polyml.5.2.1/0000755000175000017500000000000011100060542011761 5ustar daviddavidpolyml.5.2.1/Makefile.am0000644000175000017500000000350710723271500014032 0ustar daviddavidAUTOMAKE_OPTIONS=foreign AM_CPPFLAGS = $(ARCHFLAG) $(OSFLAG) -Wall AM_CFLAGS = $(ARCHFLAG) $(OSFLAG) -Wall -fno-strict-aliasing POLYIMPORT_OPTIONS = -H 10 BOOTSTRAP_OPTIONS = -H 10 SUBDIRS = libpolyml libpolymain bin_PROGRAMS = polyimport poly man_MANS = poly.1 polyimport.1 # Select the architecture-specific modules if ARCHI386 POLYIMPORT = imports/polymli386.txt else if ARCHPPC POLYIMPORT = imports/polymlppc.txt else if ARCHSPARC POLYIMPORT = imports/polymlsparc.txt else if ARCHINTERPRET POLYIMPORT = imports/polymlint.txt else if ARCHINTERPRET64 POLYIMPORT = imports/polymlint64.txt else if ARCHX86_64 POLYIMPORT = imports/polymlx86_64.txt else endif endif endif endif endif endif poly_LDFLAGS= polyimport_LDFLAGS= POLYRESOURCES= if NATIVE_WINDOWS poly_LDFLAGS += -mwindows -Wl,-u,_WinMain@16 polyimport_LDFLAGS += -mwindows POLYOBJECTFILE = polyexport.obj POLYRESOURCES += polyresource.o else POLYOBJECTFILE = polyexport.o endif poly_SOURCES = poly_LDADD = $(POLYOBJECTFILE) $(POLYRESOURCES) libpolymain/libpolymain.la libpolyml/libpolyml.la polyimport_SOURCES = polyimport.c polyimport_LDADD = $(POLYRESOURCES) libpolyml/libpolyml.la # polyexport.o: polyimport exportPoly.sml polytemp.txt ./polyimport $(POLYIMPORT_OPTIONS) polytemp.txt < exportPoly.sml > /dev/null polyexport.obj: polyimport exportPoly.sml polytemp.txt ./polyimport $(POLYIMPORT_OPTIONS) polytemp.txt < exportPoly.sml > /dev/null polyresource.o: PolyML.rc poly.ico windres -o polyresource.o PolyML.rc polytemp.txt: $(POLYIMPORT) cp $(POLYIMPORT) polytemp.txt # This builds the compiler but does not update the files in the imports directory. # It then builds a version of poly containing the new compiler. cvs: all ./poly $(BOOTSTRAP_OPTIONS) < mlsource/BuildExport.sml $(MAKE) reboot: cvs cp polytemp.txt $(POLYIMPORT) clean-local: rm -f *.obj polytemp.txt polyml.5.2.1/COPYING0000644000175000017500000006354110506226524013042 0ustar daviddavid GNU LESSER GENERAL PUBLIC LICENSE Version 2.1, February 1999 Copyright (C) 1991, 1999 Free Software Foundation, Inc. 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. When we speak of free software, we are referring to freedom of use, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish); that you receive source code or can get it if you want it; that you can change the software and use pieces of it in new free programs; and that you are informed that you can do these things. To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. GNU LESSER GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. , 1 April 1990 Ty Coon, President of Vice That's all there is to it! polyml.5.2.1/basis/0000755000175000017500000000000011100060502013056 5ustar daviddavidpolyml.5.2.1/basis/Array.sml0000644000175000017500000003723610766426250014713 0ustar daviddavid(* Title: Standard Basis Library: Array Structure Author: David Matthews Copyright David Matthews 1999, 2005 This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* G&R 2004 status: updated. Added ArraySlice and ARRAY_SLICE. *) signature ARRAY = sig eqtype 'a array type 'a vector val maxLen : int val array : (int * 'a) -> 'a array val fromList : 'a list -> 'a array val vector: 'a array -> 'a vector val tabulate : (int * (int -> 'a)) -> 'a array val length : 'a array -> int val sub : ('a array * int) -> 'a val update : ('a array * int * 'a) -> unit val copy : {src : 'a array, dst : 'a array, di : int} -> unit val copyVec : {src : 'a vector, dst : 'a array, di : int} -> unit val appi : ((int * 'a) -> unit) -> 'a array -> unit val app : ('a -> unit) -> 'a array -> unit val foldli : ((int * 'a * 'b) -> 'b) -> 'b -> 'a array -> 'b val foldri : ((int * 'a * 'b) -> 'b) -> 'b -> 'a array -> 'b val foldl : (('a * 'b) -> 'b) -> 'b -> 'a array -> 'b val foldr : (('a * 'b) -> 'b) -> 'b -> 'a array -> 'b val modifyi : ((int * 'a) -> 'a) -> 'a array -> unit val modify : ('a -> 'a) -> 'a array -> unit val findi: (int * 'a -> bool) -> 'a array -> (int * 'a) option val find: ('a -> bool) -> 'a array -> 'a option val exists: ('a -> bool) -> 'a array -> bool val all: ('a -> bool) -> 'a array -> bool val collate: ('a * 'a -> order) -> 'a array * 'a array -> order end; local (* This was previously implemented as simply an n-word block of mutable store, length being obtained from the length field. There was a complication in that equality for arrays is defined as pointer equality even for zero-sized arrays but the run-time system doesn't allow zero-sized objects. To get round that we used a one-word object with the "negative" bit set in the flags byte. This meant that the length function was quite complicated which is significant because we need to compute the length to do bounds checking on every "sub" or "update". This method is the most efficient in storage. The current version uses the first word to hold the length. *) open RuntimeCalls (* We want to allow equality so we have to use a datatype, but we don't want anything printed. *) datatype 'a array = Array of word; val System_alloc: int*int*int->word = RunCall.run_call3 POLY_SYS_alloc_store; val System_loadw: word*int->word = RunCall.run_call2 POLY_SYS_load_word; val System_setw: word * int * word -> unit = RunCall.run_call3 POLY_SYS_assign_word; val System_lock: word -> unit = RunCall.run_call1 POLY_SYS_lockseg; val System_zero: word = RunCall.run_call1 POLY_SYS_io_operation POLY_SYS_nullvector; (* A zero word. *) val System_move_words: word*int*word*int*int->unit = RunCall.run_call5 POLY_SYS_move_words (* Unsafe subscript and update functions used internally for cases where we've already checked the range. N.B. THESE ADD THE ONE WHICH IS NECESSARY TO SKIP THE LENGTH WORD *) fun unsafeSub(Array v: 'a array, i: int): 'a = RunCall.unsafeCast(System_loadw (v, i+1)) and unsafeUpdate(Array v: 'a array, i: int, new: 'a): unit = System_setw (v, i+1, RunCall.unsafeCast new); val intAsWord: int -> word = RunCall.unsafeCast and wordAsInt: word -> int = RunCall.unsafeCast (* "vector" creates a vector from an array so the representation of a zero-length object is different. Locking the resultant object turns into an immutable object and changes the equality function from pointer equality to value equality. *) fun makeVector(Array v: 'a array, start, length): 'a vector = if length = 0 then RunCall.unsafeCast System_zero (* Special case for zero *) else let (* Make a vector initialised to zero. *) val new_vec = System_alloc(length, 0, 0) handle Range => raise General.Size; in System_move_words(v, start+1, new_vec, 0, length); System_lock new_vec; RunCall.unsafeCast new_vec end in structure Array: ARRAY = struct datatype array = datatype array type 'a vector = 'a Vector.vector (* Internal function: Construct an array initialised to zero. That's probably more efficient than the alternative of setting every word to the length. *) fun alloc len = let val vec = System_alloc(len+1, 0x40, 0) in System_setw(vec, 0, RunCall.unsafeCast len); Array vec end fun array(len, a) = let val vec = System_alloc(len+1, 0x40, RunCall.unsafeCast a) in System_setw(vec, 0, RunCall.unsafeCast len); Array vec end val listLength = length; (* Pick this up from the prelude. *) fun length (Array vec: 'a array): int = RunCall.unsafeCast(System_loadw(vec, 0)) (* The maximum array size is limited by the size of the length field. On a 32 bit machine we have 24 bits of length field and 8 bits of flags so the maximum value is 2^24 - 1, less 1 for word that contains the array length. This means that the maximum size of an array is one less than the maximum size of a vector. This could cause problems. *) local val doCall: int*unit -> int = RunCall.run_call2 RuntimeCalls.POLY_SYS_process_env in val maxLen = doCall(100, ()) - 1 end; fun op sub (vec: 'a array as Array v, i: int): 'a = if i < 0 orelse i >= length vec then raise General.Subscript else RunCall.unsafeCast(System_loadw (v, i+1)) fun update (vec: 'a array as Array v, i: int, new: 'a) : unit = if i < 0 orelse i >= length vec then raise General.Subscript else System_setw (v, i+1, RunCall.unsafeCast new); (* Create an array from a list. *) fun fromList (l : 'a list) : 'a array = let val length = listLength l; (* Make a array initialised to zero. *) val vec = alloc length (* Copy the list elements into the array. *) fun init (v, i, a :: l) = ( unsafeUpdate(v, i, a); init(v, i + 1, l) ) | init (_, _, []) = (); in init(vec, 0, l); vec end fun tabulate (length: int , f : int->'a): 'a array = let val vec = if length < 0 then raise General.Size else alloc length; (* Initialise it to the function values. *) fun init i = if length <= i then () else (unsafeUpdate(vec, i, f i); init(i+1)) in init 0; vec end (* "vector" creates a vector from an array so the representation of a zero-length object is different. Locking the resultant object turns into an immutable object and changes the equality function from pointer equality to value equality. *) fun vector (vec: 'a array as Array v): 'a vector = makeVector(vec, 0, length vec) (* Copy one array into another. It's possible for the arrays to be the same and for the source and destinations to overlap so we have to take care of that. We don't actually check that the source and destination are the same but simply use either incrementing or decrementing copy operations depending on the index values. *) fun copy {src: 'a array as Array s, dst: 'a array as Array d, di: int} = let val len = length src in if di < 0 orelse di+len > length dst then raise General.Subscript else System_move_words(s, 1, d, di+1, len) end (* Copy a vector into an array. *) fun copyVec {src: 'a vector, dst: 'a array as Array d, di: int} = let val len = Vector.length src in if di < 0 orelse di+len > length dst then raise General.Subscript else System_move_words(RunCall.unsafeCast src, 0, d, di+1, len) end (* Create the other functions. *) structure VectorOps = PolyVectorOperations( struct type 'a vector = 'a array local val l = length in fun length(v: 'a array):word = intAsWord(l v) end local val u = unsafeSub in fun unsafeSub (v: 'a array, i: word) = u(v, wordAsInt i) end fun unsafeSet(v, i: word, e: 'a) = unsafeUpdate(v, wordAsInt i, e) end); open VectorOps; local (* Install the pretty printer for arrays *) (* We may have to do this outside the structure if we have opaque signature matching. *) fun pretty(put: string->unit, beg: int*bool->unit, brk: int*int->unit, nd: unit->unit) (depth: int) (printElem: 'a * int -> unit) (x: 'a array) = let val last = length x - 1 fun put_elem (index, w, d) = if d = 0 then (put "..."; d-1) else if d < 0 then d-1 else ( printElem(w, d-1); if index <> last then (put ","; brk(1, 0)) else (); d-1 ) in beg(3, false); put "fromList["; if depth <= 0 then put "..." else (foldli put_elem depth x; ()); put "]"; nd() end in val unused = PolyML.install_pp pretty end end (* Array *) structure ArraySlice = struct datatype 'a slice = Slice of { array: 'a Array.array, start: int, length: int }; fun length(Slice{length, ...}) = length fun op sub (Slice{array, start, length}, i: int): 'a = if i < 0 orelse i >= length then raise General.Subscript else unsafeSub(array, i+start) fun update (Slice{array, start, length}, i: int, new: 'a) : unit = if i < 0 orelse i >= length then raise General.Subscript else unsafeUpdate (array, i+start, new); (* Create a slice, checking the sizes so that the resulting slice is always valid. *) fun slice(vec: 'a array, i: int, NONE) = let val len = Array.length vec in if i >= 0 andalso i <= len then Slice{array=vec, start=i, length=len-i} (* Length is rest of array. *) else raise General.Subscript end | slice(vec: 'a array, i: int, SOME l) = let val len = Array.length vec in if i >= 0 andalso l >= 0 andalso i+l <= len then Slice{array=vec, start=i, length=l} (* Length is as given. *) else raise General.Subscript end (* Slice from the whole array. *) fun full a = Slice{array=a, start=0, length=Array.length a} (* Slice from existing slice *) fun subslice(Slice{array, start, length}, i: int, NONE) = if i >= 0 andalso i <= length then Slice{array=array, start=i+start, length=length-i} (* Length is rest of array. *) else raise General.Subscript | subslice(Slice{array, start, length}, i: int, SOME l) = if i >= 0 andalso l >= 0 andalso i+l <= length then Slice{array=array, start=i+start, length=l} (* Length is as given. *) else raise General.Subscript fun base(Slice{array, start, length}) = (array, start, length) fun vector (Slice{array, start, length}): 'a vector = makeVector(array, start, length) (* Copy one array into another. It's possible for the arrays to be the same and for the source and destinations to overlap so we have to take care of that. We don't actually check that the source and destination are the same but simply use either incrementing or decrementing copy operations depending on the index values. *) fun copy {src = Slice{array=Array s, start=srcStart, length=srcLen}, dst as Array d, di: int} = let in if di < 0 orelse di+srcLen > Array.length dst then raise General.Subscript else System_move_words(s, srcStart+1, d, di+1, srcLen) end (* Copy a vector into an array. *) fun copyVec {src: 'a VectorSlice.slice, dst: 'a array as Array d, di: int} = let val (v, i, len) = VectorSlice.base src in if di < 0 orelse di+len > Array.length dst then raise General.Subscript else System_move_words(RunCall.unsafeCast v, i, d, di+1, len) end fun isEmpty(Slice{length, ...}) = length = 0 (* Return the first item of the slice and the rest of the slice. *) fun getItem(Slice{length=0, ...}) = NONE | getItem(Slice{array, start, length}) = SOME(unsafeSub(array, start), Slice{array=array, start=start+1, length=length-1}) (* Create the other functions. *) structure VectorOps = PolyVectorOperations( struct type 'a vector = 'a slice fun length(Slice{length, ...}) = intAsWord length local val u = unsafeSub in fun unsafeSub (Slice{array, start, ...}, i: word) = u(array, wordAsInt i + start) end fun unsafeSet(Slice{array, start, ...}, i: word, e: 'a) = unsafeUpdate(array, wordAsInt i + start, e) end); open VectorOps; end (* ArraySlice *) end; (* Local in end *) (* The ARRAY_SLICE signature refers to the Array structure so has to be defined afterwards. *) signature ARRAY_SLICE = sig type 'a slice val length : 'a slice -> int val sub : 'a slice * int -> 'a val update : 'a slice * int * 'a -> unit val full: 'a Array.array -> 'a slice val slice: 'a Array.array * int * int option -> 'a slice val subslice: 'a slice * int * int option -> 'a slice val base: 'a slice -> 'a Array.array * int * int val vector: 'a slice -> 'a Vector.vector val copy : {src : 'a slice, dst : 'a Array.array, di : int} -> unit val copyVec : {src : 'a VectorSlice.slice, dst : 'a Array.array, di : int} -> unit val isEmpty: 'a slice -> bool val getItem: 'a slice -> ('a * 'a slice) option val appi : (int * 'a -> unit) -> 'a slice -> unit val app : ('a -> unit) -> 'a slice -> unit val modifyi : (int * 'a -> 'a) -> 'a slice -> unit val modify : ('a -> 'a) -> 'a slice -> unit val foldli : ((int * 'a * 'b) -> 'b) -> 'b -> 'a slice -> 'b val foldri : ((int * 'a * 'b) -> 'b) -> 'b -> 'a slice -> 'b val foldl : (('a * 'b) -> 'b) -> 'b -> 'a slice -> 'b val foldr : (('a * 'b) -> 'b) -> 'b -> 'a slice -> 'b val findi: (int * 'a -> bool) -> 'a slice -> (int * 'a) option val find: ('a -> bool) -> 'a slice -> 'a option val exists: ('a -> bool) -> 'a slice -> bool val all: ('a -> bool) -> 'a slice -> bool val collate: ('a * 'a -> order) -> 'a slice * 'a slice -> order end; structure ArraySlice :> ARRAY_SLICE = ArraySlice; local open ArraySlice (* Install the pretty printer for array slices *) (* We may have to do this outside the structure if we have opaque signature matching. *) fun pretty(put: string->unit, beg: int*bool->unit, brk: int*int->unit, nd: unit->unit) (depth: int) (printElem: 'a * int -> unit) (x: 'a slice) = let val last = length x - 1 fun put_elem (index, w, d) = if d = 0 then (put "..."; d-1) else if d < 0 then d-1 else ( printElem(w, d-1); if index <> last then (put ","; brk(1, 0)) else (); d-1 ) in beg(3, false); put "fromList["; if depth <= 0 then put "..." else (foldli put_elem depth x; ()); put "]"; nd() end in val _ = PolyML.install_pp pretty end (* Install overloaded equality functions. This has two effects. It speeds up equality checking by providing a type-specific equality function which is faster than the default structure equality. More importantly, it indicates to the type checker that equality on this type is allowed whatever the 'a . That does not comply with the Definition of Standard ML, which restricts this privilege to ref, but is implied by the Basis library definition. *) local val f : word*word->bool = RunCall.run_call2 RuntimeCalls.POLY_SYS_word_eq in fun it (x: 'a Array.array, y: 'a Array.array) = RunCall.unsafeCast f (x,y) end; RunCall.addOverload it "="; local val f : word*word->bool = RunCall.run_call2 RuntimeCalls.POLY_SYS_word_neq in fun it (x: 'a Array.array, y: 'a Array.array) = RunCall.unsafeCast f (x,y) end; RunCall.addOverload it "<>"; (* Available unqualified at the top level. *) type 'a array = 'a Array.array; polyml.5.2.1/basis/Array2.sml0000644000175000017500000002351210766426277014776 0ustar daviddavid(* Title: Standard Basis Library: Array2 structure and signature. Author: David Matthews Copyright David Matthews 2000, 2005 This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* G&R 2004 status: modified to accommodate changes in Array structure. *) signature ARRAY2 = sig eqtype 'a array type 'a region = { base : 'a array, row : int, col : int, nrows : int option, ncols : int option } datatype traversal = RowMajor | ColMajor val array: int * int * 'a -> 'a array val fromList: 'a list list -> 'a array val tabulate: traversal -> int * int * (int * int -> 'a) -> 'a array val sub: 'a array * int * int -> 'a val update: 'a array * int * int * 'a -> unit val dimensions: 'a array -> int * int val nCols: 'a array -> int val nRows: 'a array -> int val row: 'a array * int -> 'a Vector.vector val column: 'a array * int -> 'a Vector.vector val copy: {src : 'a region, dst : 'a array, dst_row : int, dst_col : int} -> unit val appi: traversal -> (int * int * 'a -> unit) -> 'a region -> unit val app: traversal -> ('a -> unit) -> 'a array -> unit val modifyi: traversal -> (int * int * 'a -> 'a) -> 'a region -> unit val modify: traversal -> ('a -> 'a) -> 'a array -> unit val foldi: traversal -> (int * int * 'a * 'b -> 'b) -> 'b -> 'a region -> 'b val fold: traversal -> ('a * 'b -> 'b) -> 'b -> 'a array -> 'b end; structure Array2 : ARRAY2 = struct (* There are lots of possible implementations with advantages and disadvantages according to the requirements. I'm choosing a very simple implementation in terms of arrays of arrays. *) (* This is implemented as a vector of rows i.e. Vector.sub(v, 0) returns the first row, Vector.sub(v, 1) the second. *) (* N.B. we have to use a datatype here so that we can install a pretty printer. *) datatype 'a array = Array2 of 'a Array.array Vector.vector type 'a region = { base : 'a array, row : int, col : int, nrows : int option, ncols : int option } datatype traversal = RowMajor | ColMajor fun array(r, c, init) = Array2(Vector.tabulate(r, fn _ => Array.array(c, init))) fun fromList l = let (* Check that all the lists have the same length. *) fun checkLen(l, NONE) = SOME(List.length l) | checkLen(l, SOME i) = if List.length l <> i then raise Size else SOME i val checkLengths = List.foldl checkLen NONE l in (* Build the arrays. *) Array2(Vector.fromList(List.map (fn ll => Array.fromList ll) l)) end fun tabulate RowMajor (r, c, f) = Array2(Vector.tabulate(r, fn r' => Array.tabulate(c, fn c' => f(r', c')))) | tabulate ColMajor (r, c, f) = let (* First tabulate into column-major vectors. *) val vecs = Vector.tabulate(c, fn c' => Vector.tabulate(r, fn r' => f(r', c'))) in (* Convert this to row-major arrays. *) tabulate RowMajor (r, c, fn (r', c') => Vector.sub(Vector.sub(vecs, c'), r')) end (* Internal functions: These are used where we have already checked that the indexes are in range. Actually, at the moment these repeat the checking anyway. *) fun uncheckedSub(Array2 a, i, j) = Array.sub(Vector.sub(a, i), j) and uncheckedUpdate(Array2 arr, i, j, a) = Array.update(Vector.sub(arr, i), j, a) fun sub(Array2 a, i, j) = Array.sub(Vector.sub(a, i), j) fun update (Array2 arr, i, j, a) = Array.update(Vector.sub(arr, i), j, a) fun nRows(Array2 a) = Vector.length a (* This next is wrong in the case where nRows = 0. It'll do for the moment. *) fun nCols(Array2 a) = Array.length(Vector.sub(a, 0)) fun dimensions a = (nRows a, nCols a) fun row(Array2 a, i) = Array.vector(Vector.sub(a, i)) fun column(a, j) = Vector.tabulate(nRows a, fn i => sub(a, i, j)) (* Internal function. Check that the region is valid and get the actual lengths. *) fun getRegion {base, row, col, nrows, ncols} = let val (lRows, lCols) = dimensions base val nrows' = case nrows of NONE => if row < 0 orelse row > lRows then raise Subscript else lRows - row | SOME r => if r < 0 orelse row < 0 orelse r+row > lRows then raise Subscript else r val ncols' = case ncols of NONE => if col < 0 orelse col > lCols then raise Subscript else lCols - col | SOME c => if c < 0 orelse col < 0 orelse c+col > lCols then raise Subscript else c in (nrows', ncols') end fun copy {src as {base, row, col, ...}, dst, dst_row, dst_col} = let (* Check the region and get the lengths. *) val (nrows, ncols) = getRegion src val (dRows, dCols) = dimensions dst fun copyIncrementing(r, c) = if r = nrows then () else if c = ncols then copyIncrementing(r+1, 0) else ( uncheckedUpdate(dst, dst_row+r, dst_col+c, uncheckedSub(base, row+r, col+c)); copyIncrementing(r, c+1) ) fun copyDecrementing(r, c) = if r < 0 then () else if c < 0 then copyDecrementing(r-1, ncols-1) else ( uncheckedUpdate(dst, dst_row+r, dst_col+c, uncheckedSub(base, row+r, col+c)); copyDecrementing(r, c-1) ) in (* Check the destination *) if dst_row < 0 orelse dst_col < 0 orelse dst_row+nrows > dRows orelse dst_col+ncols > dCols then raise Subscript else (* We have to be careful if dst = src and the regions overlap. Rather than treat the overlapped case specially we simply choose incrementing or decrementing copies depending on the indexes. *) if dst_row < row orelse (dst_row = row andalso dst_col < col) then copyIncrementing(0, 0) else copyDecrementing(nrows-1, ncols-1) end fun appi tr f (reg as {base, row, col, ...}) = let val (nrows, ncols) = getRegion reg fun appRowMajor (r, c) = if r = nrows then () else if c = ncols then appRowMajor(r+1, 0) else ( f(r+row, c+col, uncheckedSub(base, r+row, c+col)); appRowMajor(r, c+1) ) fun appColMajor (r, c) = if c = ncols then () else if r = nrows then appColMajor(0, c+1) else ( f(r+row, c+col, uncheckedSub(base, r+row, c+col)); appColMajor(r+1, c) ) in case tr of RowMajor => appRowMajor(0, 0) | ColMajor => appColMajor(0, 0) end fun app tr f arr = appi tr (f o #3) {base=arr, row=0, col=0, nrows=NONE, ncols=NONE} (* Just define modify in terms of app. *) fun modifyi tr f (reg as {base, ...}) = appi tr (fn(i, j, a) => uncheckedUpdate(base, i, j, f(i, j, a))) reg fun modify tr f arr = modifyi tr (f o #3) {base=arr, row=0, col=0, nrows=NONE, ncols=NONE} (* Fold is fairly similar to app. *) fun foldi tr f init (reg as {base, row, col, ...}) = let val (nrows, ncols) = getRegion reg fun foldRowMajor (r, c, i) = if r = nrows then i else if c = ncols then foldRowMajor(r+1, 0, i) else foldRowMajor(r, c+1, f(r+row, c+col, uncheckedSub(base, r+row, c+col), i)) fun foldColMajor (r, c, i) = if c = ncols then i else if r = nrows then foldColMajor(0, c+1, i) else foldColMajor(r+1, c, f(r+row, c+col, uncheckedSub(base, r+row, c+col), i)) in case tr of RowMajor => foldRowMajor(0, 0, init) | ColMajor => foldColMajor(0, 0, init) end fun fold tr f init arr = foldi tr (fn (_,_,a,b) => f (a,b)) init {base=arr, row=0, col=0, nrows=NONE, ncols=NONE} local (* Install the pretty printer for arrays *) (* We may have to do this outside the structure if we have opaque signature matching. *) fun 'a pretty(put: string->unit, beg: int*bool->unit, brk: int*int->unit, nd: unit->unit) (depth: int) (printElem: 'a * int -> unit) (x: 'a array): unit = let val (nrows, ncols) = dimensions x fun put_elem (r: int, c: int, w: 'a, d: int) = if d = 0 then (put "..."; d-1) else if d < 0 then d-1 else ( printElem(w, d-1); if c <> ncols-1 then (put ","; brk(1, 0)) else (); d-1 ) fun putRow(r, d) = if r = nrows orelse d < 0 then () else if d = 0 then put "..." else ( beg(3, false); put "["; brk(1, 2); (* Print this single row. *) foldi RowMajor put_elem depth {base=x, row=r, col=0, nrows=SOME 1, ncols=NONE}; put "]"; nd(); if r = nrows-1 then () else (put ","; brk(1, 0); putRow(r+1, d-1)) ) in beg(3, true); put "fromList["; if depth <= 0 then put "..." else putRow(0, depth); put "]"; nd() end in val () = PolyML.install_pp pretty end end; (* Install overloaded equality functions. This has two effects. It speeds up equality checking by providing a type-specific equality function which is faster than the default structure equality. More importantly, it indicates to the type checker that equality on this type is allowed whatever the 'a . That does not comply with the Definition of Standard ML, which restricts this privilege to ref, but is implied by the Basis library definition. *) local val f : word*word->bool = RunCall.run_call2 RuntimeCalls.POLY_SYS_word_eq in fun it (x: 'a Array2.array, y: 'a Array2.array) = RunCall.unsafeCast f (x,y) end; RunCall.addOverload it "="; local val f : word*word->bool = RunCall.run_call2 RuntimeCalls.POLY_SYS_word_neq in fun it (x: 'a Array2.array, y: 'a Array2.array) = RunCall.unsafeCast f (x,y) end; RunCall.addOverload it "<>"; polyml.5.2.1/basis/BIT_FLAGS.sml0000644000175000017500000000226510313043322015140 0ustar daviddavid(* Title: Standard Basis Library: BIT_FLAGS signature Author: David Matthews Copyright David Matthews 2000 This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* G&R 2004 status: checked, no change. *) signature BIT_FLAGS = sig eqtype flags val toWord : flags -> SysWord.word val fromWord : SysWord.word -> flags val all: flags val flags : flags list -> flags val intersect: flags list -> flags val clear: flags * flags -> flags val allSet : flags * flags -> bool val anySet : flags * flags -> bool end; polyml.5.2.1/basis/BasicStreamIO.sml0000644000175000017500000010253311062470201016234 0ustar daviddavid(* Title: Standard Basis Library: StreamIO functor Copyright David C.J. Matthews 2000, 2005 This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) functor BasicStreamIO( structure PrimIO : PRIM_IO structure Vector : MONO_VECTOR structure Array : MONO_ARRAY structure VectorSlice: MONO_VECTOR_SLICE structure ArraySlice: MONO_ARRAY_SLICE sharing type PrimIO.elem = Vector.elem = Array.elem = VectorSlice.elem = ArraySlice.elem sharing type PrimIO.vector = Vector.vector = Array.vector = VectorSlice.vector = ArraySlice.vector sharing type PrimIO.array = Array.array = ArraySlice.array sharing type PrimIO.vector_slice = VectorSlice.slice = ArraySlice.vector_slice sharing type PrimIO.array_slice = ArraySlice.slice val someElem : PrimIO.elem ): sig include STREAM_IO (* Note: This is non-standard but enables us to define the derived BinIO and TextIO structures more efficiently. *) val outputVec: outstream * PrimIO.vector_slice -> unit end = struct open IO type vector = Vector.vector type elem = PrimIO.elem datatype reader = datatype PrimIO.reader datatype writer = datatype PrimIO.writer type array = Array.array type pos = PrimIO.pos local structure Interrupt = RunCall.Run_exception0( val ex_iden = RuntimeCalls.EXC_interrupt ) in exception Interrupt = Interrupt.ex end (* Called after any exception in the lower level reader or writer to map any exception other than Io into Io. *) fun mapToIo (io as Io _, _, _) = io | mapToIo (Interrupt, _, _) = Interrupt | mapToIo (nonIo, name, caller) = Io { name = name, function = caller, cause = nonIo } val emptyVec = Vector.fromList [] (* Represents end-of-stream. *) datatype instream = (* The usual state of a stream: We may have to read from the reader before we have any real data or we may have already read. *) Uncommitted of { state: streamState ref, locker: Thread.Mutex.mutex } (* If we know we have unread input we can return this as the stream. That allows part of the stream to be read without locking. This is an optimisation. *) | Committed of { vec: vector, offset: int, rest: instream, startPos: pos option } and streamState = Truncated (* The stream has been closed or truncated. *) | HaveRead of (* A vector has been read from the stream. If the vector has size zero this is treated as EOF. startPos is the position when the vector was read. *) {vec: vector, rest: streamState ref, startPos: pos option } | ToRead of reader (* We have not yet closed or truncated the stream. *) and outstream = OutStream of { wrtr: writer, buffType : IO.buffer_mode ref, buf: array, bufp: int ref, isTerm: bool ref, locker: Thread.Mutex.mutex } datatype out_pos = OutPos of outstream * pos (* Create a new stream from the vector and the reader. *) fun mkInstream (r, v: vector): instream = let val readRest = Uncommitted { state = ref (ToRead r), locker = Thread.Mutex.mutex() } (* If the vector is non-empty the first entry is as though the vector had been read otherwise it's just the reader. *) in if Vector.length v = 0 then readRest else Committed { vec = v, offset = 0, rest = readRest, startPos = NONE } end local fun input' (ref (HaveRead {vec, rest, ...}), locker) = let (* TODO: If we have already read further on we could convert these entries to Committed. *) in (vec, Uncommitted{ state = rest, locker = locker }) end | input' (s as ref Truncated, locker) = (* Truncated: return end-of-stream *) (emptyVec, Uncommitted{ state = s, locker = locker }) | input' (state as ref(readMore as ToRead (RD {chunkSize, readVec = SOME readVec, getPos, ...})), locker) = let (* We've not yet read this. Try reading from the reader. *) val startPos = case getPos of SOME g => SOME(g()) | NONE => NONE val data = readVec chunkSize (* Create a reference to the reader which will be updated by the next read. The ref is shared between the existing stream and the new one so reading on either adds to the same chain. *) val nextLink = ref readMore val nextChunk = HaveRead {vec = data, rest = nextLink, startPos = startPos} in (* Extend the stream by adding this vector to the list of chunks read so far. *) state := nextChunk; (* Return a new stream which continues reading. *) (data, Uncommitted { state = nextLink, locker = locker }) end | input' (ref(ToRead(RD{name, ...})), _) = (* readVec missing in reader. *) raise Io { name = name, function = "input", cause = BlockingNotSupported } fun inputNList' (ref (HaveRead {vec, rest, startPos}), locker, n) = let val vecLength = Vector.length vec in if vecLength = 0 (* End-of-stream: Return next in list. *) then ([vec], Uncommitted{ state = rest, locker = locker }) else if n < vecLength then (* We can use what's already been read. The stream we return allows us to read the rest without blocking. *) ([VectorSlice.vector(VectorSlice.slice(vec, 0, SOME n))], Committed{ vec = vec, offset = n, startPos = startPos, rest = Uncommitted{ state = rest, locker = locker} }) else if n = vecLength then (* Exactly uses up the buffer. New stream state is the next entry. *) ([vec], Uncommitted{ state = rest, locker = locker}) else (* Have to get the next item *) let val (nextVecs, nextStream) = inputNList' (rest, locker, n - vecLength) in (vec :: nextVecs, nextStream) end end | inputNList' (s as ref Truncated, locker, _) = (* Truncated: return end-of-stream *) ([emptyVec], Uncommitted{ state = s, locker = locker }) | inputNList' (f, locker, n) = (* ToRead *) let val (vec, f') = input' (f, locker) in if Vector.length vec = 0 then ([vec], f') (* Truncated or end-of-file. *) else inputNList' (f, locker, n) (* Reread *) end in fun input (Uncommitted { state, locker }) = LibraryIOSupport.protect locker input' (state, locker) | input (Committed { vec, offset, rest, ... }) = (* This stream was produced from re-reading a stream that already had data. We can return the result without the overhead of locking. *) (VectorSlice.vector(VectorSlice.slice(vec, offset, NONE)), rest) fun inputNList (Uncommitted { state, locker }, n) = LibraryIOSupport.protect locker inputNList' (state, locker, n) | inputNList (Committed { vec, offset, rest, startPos }, n) = let val vecLength = Vector.length vec in if vecLength = 0 (* End-of-stream: Return next in list. *) then ([vec], rest) else if n < vecLength - offset then (* We can use what's already been read. Next entry is a committed stream that returns the part we haven't yet used. *) ([VectorSlice.vector(VectorSlice.slice(vec, offset, SOME n))], Committed{ vec = vec, offset = offset+n, rest = rest, startPos = startPos }) else if n = vecLength - offset then (* Exactly uses up the buffer. New stream state is the next entry. *) ([VectorSlice.vector(VectorSlice.slice(vec, offset, NONE))], rest) else (* Have to get the next item *) let val (nextVecs, nextStream) = inputNList (rest, n - vecLength) in (VectorSlice.vector(VectorSlice.slice(vec, offset, NONE)) :: nextVecs, nextStream) end end fun inputN (f, n) = let val (vecs, f') = inputNList (f, n) in (Vector.concat vecs, f') end (* Read the whole of the remaining input until we get an EOF. *) fun inputAll f = let (* Find out the size of the file. *) fun getSize(n, f) = let val (v, f') = input f val vSize = Vector.length v in if vSize = 0 then n (* Reached EOF. *) else getSize (n + vSize, f') end in (* Read the whole file. *) inputN(f, getSize(0,f)) end (* Note a crucial difference between inputN and input1. Because input1 does not return a stream if it detects EOF it cannot advance beyond a temporary EOF in a stream. *) fun input1 (Committed { vec, offset, rest, startPos }) = let val vecSize = Vector.length vec in if vecSize = 0 then NONE else if vecSize = offset+1 then SOME(Vector.sub(vec, offset), rest) else SOME(Vector.sub(vec, offset), Committed{ vec = vec, offset = offset+1, rest = rest, startPos = startPos }) end | input1 f = let val (s, f') = inputN (f, 1) in if Vector.length s = 0 then NONE else SOME(Vector.sub(s, 0), f') end end local fun doClose (ref (HaveRead {rest, ...})) = doClose rest | doClose (ref Truncated) = () | doClose (state as ref (ToRead (RD{close, ...}))) = (state := Truncated; close()) in fun closeIn (Uncommitted { state, locker }) = LibraryIOSupport.protect locker doClose state | closeIn (Committed { rest, ...}) = closeIn rest end local (* Return the reader. *) fun getReader' (ref (HaveRead {vec, rest, ...})) = getReader' rest | getReader' (ref Truncated) = raise Io { name = "", function = "getReader", cause = ClosedStream } | getReader' (state as ref (ToRead reader)) = (state := Truncated; reader) in fun getReader'' (Uncommitted { state, locker }) = LibraryIOSupport.protect locker getReader' state | getReader'' (Committed { vec, offset, rest, ... }) = getReader'' rest fun getReader f = let val reader = getReader'' f val (allInput, _) = inputAll f in (* Return the reader along with buffered input. It's not clear what to do if there are EOFs in the stream. The book says the result is the result of inputAll which takes everything up to the first EOF. *) (reader, allInput) end end local (* Check that the stream is not terminated and then convert a file position plus a vector offset into a file position. In particular, if the reader has converted CRNL into NL we don't have a simple relationship between elements and file offsets. *) fun findPosition'(startPos, offset, HaveRead {rest=ref rest, ...}) = findPosition'(startPos, offset, rest) | findPosition'(_, _, Truncated) = raise Io { name = "", function = "filePosIn", cause = ClosedStream } | findPosition'(startPos, offset, ToRead (RD { getPos = SOME getPos, setPos = SOME setPos, readVec = SOME readVec, ...})) = if offset = 0 then startPos (* Easy *) else (* When we read this vector we recorded the file position of the beginning only. To find the file position of the particular element we actually need to read the portion of the input up to that element and find out the file position at that point. *) let val savep = getPos() (* Save current position. *) (* Move to the point where we read the vector. *) val () = setPos startPos; (* Call readVec until we have read the required number of elements. N.B. Ganser & Reppy has a bug here. There is no guarantee that readVec n will actually return n elements so it's unsafe to assume that it will move the file pointer by n elements. *) fun doRead n = let val read = Vector.length(readVec n) in if read = n orelse read = 0 (* Error? *) then () else doRead (n - read) end (* Read the offset number of elements. *) val () = doRead offset; (* Record the position after actually reading the elements. *) val position = getPos(); in setPos savep; (* Restore. *) position end | findPosition'(_, _, ToRead _) = raise Io { name = "", function = "filePosIn", cause = RandomAccessNotSupported } fun findPosition(startPos, offset, Committed { rest, ... }) = findPosition(startPos, offset, rest) | findPosition(startPos, offset, Uncommitted { state = ref state, locker }) = LibraryIOSupport.protect locker findPosition' (startPos, offset, state) fun filePosIn' (HaveRead {rest=ref rest, startPos = SOME startPos, ...}) = findPosition'(startPos, 0, rest) | filePosIn' (HaveRead {startPos = NONE, ...}) = raise Io { name = "", function = "filePosIn", cause = RandomAccessNotSupported } | filePosIn' Truncated = raise Io { name = "", function = "filePosIn", cause = ClosedStream } | filePosIn' (ToRead(RD { getPos = SOME getPos, ...})) = getPos() | filePosIn' (ToRead _) = raise Io { name = "", function = "filePosIn", cause = RandomAccessNotSupported } in (* Find the first entry to get the position. *) fun filePosIn (Uncommitted { state = ref state, locker }) = LibraryIOSupport.protect locker filePosIn' state | filePosIn (Committed { vec, offset, rest, startPos = SOME startPos }) = findPosition(startPos, offset, rest) | filePosIn (Committed { startPos = NONE, ... }) = (* This can occur either because the reader doesn't support getPos or because the position is within the initial vector passed to mkInstream. *) raise Io { name = "", function = "filePosIn", cause = RandomAccessNotSupported } end local fun doCanInput' (ref (HaveRead {vec, rest, ...}), locker, n, k) = let val vecLength = Vector.length vec in if vecLength = 0 then SOME k else if vecLength >= n then SOME (k+n) else doCanInput'(rest, locker, n-vecLength, k+vecLength) end | doCanInput' (ref Truncated, _, _, k) = SOME k | doCanInput' (state as ref(readMore as ToRead (RD {chunkSize, readVecNB = SOME readVecNB, getPos, ...})), locker, n, k) = let val startPos = case getPos of SOME g => SOME(g()) | NONE => NONE in (* Read a block full. This will avoid us creating lots of small items in the list if there is actually plenty of input available. *) case readVecNB chunkSize of NONE => (* Reading these would block but we may already have some input. *) if k = 0 then NONE else SOME k | SOME data => let (* We have to record this in the stream. *) val nextLink = ref readMore val nextChunk = HaveRead {vec = data, rest = nextLink, startPos = startPos} in state := nextChunk; (* Check whether this has satisfied the request. *) doCanInput'(state, locker, n, k) end end | doCanInput' (ref(ToRead(RD {name, ...})), _, _, _) = (* readVecNB missing in reader. *) raise Io { name = name, function = "canInput", cause = NonblockingNotSupported } fun doCanInput (Uncommitted { state, locker }, n, k) = LibraryIOSupport.protect locker doCanInput' (state, locker, n, k) | doCanInput (Committed { vec, rest, ... }, n, k) = let val vecLength = Vector.length vec in if vecLength = 0 then SOME k (* Reached EOF. *) else if vecLength >= n then SOME (k + n) (* Have already read enough. *) else doCanInput(rest, n-vecLength, k+vecLength) end in fun canInput(f, n) = doCanInput(f, n, 0) end (* Look for end-of-stream. Could be defined more directly but it probably isn't worth it. *) fun endOfStream f = let val (v, _) = input f in Vector.length v = 0 end (* OUTPUT *) (* In order to be able to flush and close the streams when we exit we need to keep a list of the output streams. One unfortunate side-effect of this is that the RTS can't garbage-collect output streams since there will always be a reference to a stream until it is explicitly closed. It could be worth using a weak reference here but that requires either a separate thread or some way of registering a function to be called to check the list. *) val ostreamLock = Thread.Mutex.mutex() val outputStreamList: outstream list ref = ref nil; fun protectOut f (outs as OutStream{locker, ...}) = LibraryIOSupport.protect locker f outs fun mkOutstream'(wrtr as WR{chunkSize, ...}, buffMode) = let open Thread.Mutex val strm = OutStream{wrtr=wrtr, buffType=ref buffMode, buf=Array.array(chunkSize, someElem), isTerm=ref false, bufp=ref 0, locker=Thread.Mutex.mutex()} in (* Add it to the list. *) outputStreamList := strm :: ! outputStreamList; strm end val mkOutstream = LibraryIOSupport.protect ostreamLock mkOutstream' fun getBufferMode(OutStream{buffType=ref b, ...}) = b local (* Flush anything from the buffer. *) fun flushOut'(OutStream{buf, bufp=bufp as ref endBuf, wrtr=wrtr as WR{name, ...}, ...}) = if endBuf = 0 then () (* Nothing buffered *) else case wrtr of WR{writeArr=SOME wa, ...} => let fun flushBuff n = let val written = wa(ArraySlice.slice(buf, n, SOME(endBuf-n))) handle exn => raise mapToIo(exn, name, "flushOut") in if written+n = endBuf then () else flushBuff(written+n) end in (* Set the buffer to empty BEFORE writing anything. If we get an asynchronous interrupt (ctrl-C) we want to lose data in preference to duplicating it. *) bufp := 0; flushBuff 0 end | _ => raise Io { name = name, function = "flushOut", cause = BlockingNotSupported } (* Terminate a stream either because it has been closed or because we have extracted the underlying writer. *) fun terminateStream'(OutStream{isTerm=ref true, ...}) = () (* Nothing to do. *) | terminateStream'(f as OutStream{isTerm, ...}) = let (* outstream is not an equality type but we can get the desired effect by comparing the isTerm references for equality (N.B. NOT their contents). *) fun removeThis(OutStream{isTerm=isTerm', ...}) = isTerm' <> isTerm open Thread.Mutex in isTerm := true; lock ostreamLock; outputStreamList := List.filter removeThis (!outputStreamList); unlock ostreamLock; flushOut' f end; (* Close the stream. It is safe to repeat this and we may need to close the writer even if the stream is terminated. *) fun closeOut'(f as OutStream{wrtr=WR{close, ...}, ...}) = ( terminateStream' f; close() (* Close the underlying writer. *) ) (* Flush the stream, terminate it and return the underlying writer. *) fun getWriter'(OutStream{wrtr=WR{name, ...}, isTerm=ref true, ...}) = (* Already terminated. *) raise Io { name = name, function = "getWriter", cause = ClosedStream } | getWriter'(f as OutStream{buffType, buf, bufp, wrtr, isTerm, ...}) = ( terminateStream' f; (wrtr, !buffType) ) (* Set the buffer mode, possibly flushing the buffer as it does. *) fun setBufferMode' newBuff (f as OutStream{buffType, buf, bufp, wrtr, ...}) = (* Question: What if the stream is terminated? *) ( if newBuff = NO_BUF andalso !bufp <> 0 then (* Flush pending output. *) (* Switching from block to line buffering does not flush. *) flushOut' f else (); buffType := newBuff ) (* Internal function: Write a vector directly to the writer. It only returns when the vector has been completely written. "output" should work if the writer only provides writeArr so we may have to use that if writeVec isn't there. *) (* FOR TESTING: Put writeArr first. *) fun writeVec(OutStream{wrtr=WR{writeVec=SOME wv, name, ...}, ...}, v, i, len) = let fun forceOut p = let val written = wv(VectorSlice.slice(v, p+i, SOME(len-p))) handle exn => raise mapToIo(exn, name, "output") in if written+p = len then () else forceOut(written+p) end in forceOut 0 end | writeVec(OutStream{wrtr=WR{writeArr=SOME wa, name, ...}, ...}, v, i, len) = let val buffSize = 10 val buff = Array.array(buffSize, someElem); fun forceOut p = let val toCopy = Int.min(len-p, buffSize) val () = ArraySlice.copyVec{src=VectorSlice.slice(v, p+i, SOME toCopy), dst=buff, di=0} val written = wa(ArraySlice.slice(buff, 0, SOME toCopy)) handle exn => raise mapToIo(exn, name, "output") in if written+p = len then () else forceOut(written+p) end in forceOut 0 end | writeVec(OutStream{wrtr=WR{name, ...}, ...}, _, _, _) = raise Io { name = name, function = "output", cause = BlockingNotSupported } (* Internal function. Write a vector to the stream using the start and length provided. *) fun outputVector _ (OutStream{isTerm=ref true, wrtr=WR{name, ...}, ...}) = raise Io { name = name, function = "output", cause = ClosedStream } | outputVector (v, start, vecLen) (f as OutStream{buffType, buf, bufp, wrtr, ...}) = let val buffLen = Array.length buf fun arrayCopyVec{src: Vector.vector, si: int, len: int, dst: Array.array, di: int} = ArraySlice.copyVec{src=VectorSlice.slice(src, si, SOME len), dst=dst, di=di}; fun addVecToBuff () = if vecLen < buffLen - !bufp then (* Room in the buffer. *) ( arrayCopyVec{src=v, si=start, len=vecLen, dst=buf, di= !bufp}; bufp := !bufp + vecLen ) else let val buffSpace = buffLen - !bufp in (* Copy as much of the vector as will fit *) arrayCopyVec{src=v, si=start, len=buffSpace, dst=buf, di= !bufp}; bufp := !bufp+buffSpace; (* TODO: Flushing the buffer ensures that all the buffer contents have been written. We don't actually need that, what we need is for enough to have been written that we have space in the buffer for the rest of the vector. *) flushOut' f; (* Write it out. *) (* Copy the rest of the vector. *) arrayCopyVec{src=v, si=start+buffSpace, len=vecLen-buffSpace, dst=buf, di=0}; bufp := vecLen-buffSpace end (* addVecToBuff *) in if vecLen > buffLen then (* If the vector is too large to put in the buffer we're going to have to write something out. To reduce copying we simply flush the buffer and write the vector directly. *) (flushOut' f; writeVec(f, v, start, vecLen)) else (* Try copying to the buffer. *) if !buffType = IO.NO_BUF then (* Write it directly *) writeVec(f, v, start, vecLen) else (* Block or line buffering - add it to the buffer. We can't actually do line buffering at this level since it doesn't make sense when we don't know what constitutes a line separator. *) addVecToBuff() end (* outputVec *) (* This could be defined in terms of outputVector but this is likely to be much more efficient if we are buffering. *) fun output1' _ (OutStream{isTerm=ref true, wrtr=WR{name, ...}, ...}) = raise Io { name = name, function = "output1", cause = ClosedStream } | output1' c (f as OutStream{buffType, buf, bufp, ...}) = if !buffType = IO.NO_BUF then writeVec(f, Vector.fromList[c], 0, 1) else (* Line or block buffering. *) ( Array.update(buf, !bufp, c); bufp := !bufp + 1; if !bufp = Array.length buf then flushOut' f else () ) fun getPosOut'(f as OutStream{wrtr=WR{name, getPos=SOME getPos, ...}, ...}) = ( flushOut' f; OutPos(f, getPos()) handle exn => raise mapToIo(exn, name, "getPosOut") ) | getPosOut'(OutStream{wrtr=WR{name, ...}, ...}) = raise Io { name = name, function = "getPosOut", cause = RandomAccessNotSupported } fun setPosOut' p (f as OutStream{wrtr=WR{name, setPos=SOME setPos, ...}, ...}) = ( flushOut' f; setPos p; f ) | setPosOut' p (OutStream{wrtr=WR{name, ...}, ...}) = raise Io { name = name, function = "setPosOut", cause = RandomAccessNotSupported } in fun output1(f, c) = protectOut (output1' c) f fun output(f, v) = protectOut (outputVector(v, 0, Vector.length v)) f val flushOut = protectOut flushOut' val terminateStream = protectOut terminateStream' val closeOut = protectOut closeOut' val getWriter = protectOut getWriter' fun setBufferMode(f, n) = protectOut (setBufferMode' n) f (* Exported function to output part of a vector. Non-standard. *) fun outputVec(f, slice) = let val (v, i, len) = VectorSlice.base slice in protectOut (outputVector(v, i, len)) f end val getPosOut = protectOut getPosOut' fun setPosOut(OutPos(f, p)) = protectOut (setPosOut' p) f end fun filePosOut(OutPos(_, p)) = p (* We need to set up a function to flush the streams when we exit. This has to be set up for every session so we set up an entry function, which is persistent, to do it. *) local fun closeAll () = (* Close all the streams. closeOut removes the streams from the list so we should end up with outputStreamList being nil. *) List.foldl (fn (s, ()) => closeOut s handle _ => ()) () (! outputStreamList) (* In addition, discard any unwritten data in open streams. If we have called PolyML.export with unwritten data that will still be there whenever the exported function is run so we need to discard it. This issue really applies only to stdOut since stdErr is normally unbuffered and other streams will generate an exception if we try to write. *) fun discardAll () = List.app (fn(OutStream{bufp, ...}) => bufp := 0) (! outputStreamList) (* When we load a saved state global variables are overwritten. We need to preserve the outputStreamList across the call. We also flush the buffers before the call and discard any output that had been buffered in the saved state. This is a bit of a mess and probably needs to be changed. *) fun doOnLoad doLoad = let val savedList = ! outputStreamList in List.app flushOut savedList; doLoad(); outputStreamList := savedList; discardAll() end fun doOnEntry () = (discardAll(); PolyML.onLoad doOnLoad; OS.Process.atExit closeAll) in val it = PolyML.onEntry doOnEntry; val it = doOnEntry() (* Set it up for this session as well. *) end end; (* Define the StreamIO functor in terms of BasicStreamIO to filter out outputVec. *) (* This is non-standard. According to G&R 2004 StreamIO does not take the slice structures as args. *) functor StreamIO( structure PrimIO : PRIM_IO structure Vector : MONO_VECTOR structure Array : MONO_ARRAY structure VectorSlice: MONO_VECTOR_SLICE structure ArraySlice: MONO_ARRAY_SLICE sharing type PrimIO.elem = Vector.elem = Array.elem = VectorSlice.elem = ArraySlice.elem sharing type PrimIO.vector = Vector.vector = Array.vector = VectorSlice.vector = ArraySlice.vector sharing type PrimIO.array = Array.array = ArraySlice.array sharing type PrimIO.vector_slice = VectorSlice.slice = ArraySlice.vector_slice sharing type PrimIO.array_slice = ArraySlice.slice val someElem : PrimIO.elem ): STREAM_IO = struct structure StreamIO = BasicStreamIO(structure PrimIO = PrimIO and Vector = Vector and Array = Array and VectorSlice = VectorSlice and ArraySlice = ArraySlice val someElem = someElem) open StreamIO end; polyml.5.2.1/basis/BinIO.sml0000644000175000017500000001270010313043322014541 0ustar daviddavid(* Title: Standard Basis Library: Binary IO Copyright David C.J. Matthews 2000, 2005 This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* G&R 2004 status: in progress. *) signature BIN_IO = sig include IMPERATIVE_IO where type StreamIO.vector = Word8Vector.vector where type StreamIO.elem = Word8.word where type StreamIO.reader = BinPrimIO.reader where type StreamIO.writer = BinPrimIO.writer where type StreamIO.pos = BinPrimIO.pos val openIn : string -> instream val openOut : string -> outstream val openAppend : string -> outstream end; structure BinIO: BIN_IO = struct open IO structure StreamIO = struct structure SIO = BasicStreamIO( structure PrimIO = BinPrimIO structure Vector = Word8Vector structure Array = Word8Array structure VectorSlice = Word8VectorSlice structure ArraySlice = Word8ArraySlice val someElem : PrimIO.elem = 0wx20 ); open SIO (* StreamIO treats line buffering on output as block buffering since it has no concept of a line separator. It's not clear whether line buffering makes sense for binary IO either but at least there is a value (0w12) which we can use. *) fun output(f, v) = case getBufferMode f of LINE_BUF => let val vecLen = Word8Vector.length v (* Find the last newline character in the string. *) fun lastNewline 0 = 0 | lastNewline i = if Word8Vector.sub(v, i-1) = 0w12 then i else lastNewline(i-1) val newLinePos = lastNewline vecLen in if newLinePos = 0 then (* No newlines in it. *) SIO.output(f, v) else (* There's at least one newline. *) ( SIO.outputVec(f, Word8VectorSlice.slice(v, 0, SOME(newLinePos-1))); flushOut f; SIO.outputVec(f, Word8VectorSlice.slice(v, newLinePos, NONE)) ) end | _ => SIO.output(f, v) (* Not line buffering. *) (* This could be defined in terms of output but the underlying output1 function is likely to be more efficient. *) fun output1(f, c) = ( SIO.output1(f, c); if c = 0w12 andalso getBufferMode f = LINE_BUF then flushOut f else () ) end; structure ImpIO = ImperativeIO( structure StreamIO = StreamIO structure Vector = Word8Vector structure Array = Word8Array) open ImpIO open RuntimeCalls; local structure Interrupt = RunCall.Run_exception0( val ex_iden = EXC_interrupt ) in exception Interrupt = Interrupt.ex end (* Called after any exception in the lower level reader or writer to map any exception other than Io into Io. *) fun mapToIo (io as Io _, _, _) = io | mapToIo (Interrupt, _, _) = Interrupt | mapToIo (nonIo, name, caller) = Io { name = name, function = caller, cause = nonIo } type fileDescr = OS.IO.iodesc (* Actually abstract. This isn't the file descriptor itself, rather a pointer into the io table. *) local local val doIo: int*int*string -> fileDescr = RunCall.run_call3 POLY_SYS_io_dispatch in fun sys_open_in_bin name = doIo(4, 0, name) and sys_open_out_bin name = doIo(6, 0, name) and sys_open_append_bin name = doIo(14, 0, name) end local val doIo = RunCall.run_call3 POLY_SYS_io_dispatch in fun sys_get_buffsize (strm: fileDescr): int = doIo(15, strm, 0) end fun wrapInFileDescr(n, name) = let val binPrimRd = LibraryIOSupport.wrapBinInFileDescr {fd=n, name=name, initBlkMode=true} val streamIo = StreamIO.mkInstream(binPrimRd, Word8Vector.fromList []) in mkInstream streamIo end fun wrapOutFileDescr(n, name, buffering, isAppend) = let val buffSize = sys_get_buffsize n val binPrimWr = LibraryIOSupport.wrapBinOutFileDescr{fd=n, name=name, appendMode=isAppend, chunkSize=buffSize, initBlkMode=true} (* Construct a stream. *) val streamIo = StreamIO.mkOutstream(binPrimWr, buffering) in mkOutstream streamIo end in (* Open a file for input. *) fun openIn s = wrapInFileDescr( sys_open_in_bin s handle exn => raise mapToIo(exn, s, "BinIO.openIn"), s) (* Open a file for output. *) fun openOut s = let val f = sys_open_out_bin s handle exn => raise mapToIo(exn, s, "BinIO.openOut") (* Look at the stream to see what kind of buffering to use. *) val k = OS.IO.kind f in wrapOutFileDescr (f, s, if k = OS.IO.Kind.tty orelse k = OS.IO.Kind.pipe orelse k = OS.IO.Kind.device then IO.LINE_BUF else IO.BLOCK_BUF, false (* Not append *)) end fun openAppend s = let val f = sys_open_append_bin s handle exn => raise mapToIo(exn, s, "BinIO.openAppend") val k = OS.IO.kind f in wrapOutFileDescr (f, s, if k = OS.IO.Kind.tty orelse k = OS.IO.Kind.pipe orelse k = OS.IO.Kind.device then IO.LINE_BUF else IO.BLOCK_BUF, true (* setPos will not work. *)) end end end; polyml.5.2.1/basis/BinPrimIO.sml0000644000175000017500000000307510313043323015377 0ustar daviddavid(* Title: Standard Basis Library: Primitive Binary IO Copyright David C.J. Matthews 2000, 2005 This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* G&R 2004 status: Minor changes. I've included sharing constraints on the slice types which aren't in the book. *) structure BinPrimIO :> PRIM_IO where type vector = Word8Vector.vector where type elem = Word8.word where type array = Word8Array.array where type pos = Position.int where type vector_slice = Word8VectorSlice.slice where type array_slice = Word8ArraySlice.slice = PrimIO ( structure Array : MONO_ARRAY = Word8Array structure Vector : MONO_VECTOR = Word8Vector structure VectorSlice = Word8VectorSlice structure ArraySlice = Word8ArraySlice val someElem : Vector.elem = 0wx20 (* Initialise to spaces. *) (* BinPrimIO.pos is defined to be Position.int *) type pos = Position.int val compare = Position.compare ); polyml.5.2.1/basis/Bool.sml0000644000175000017500000000477410313043323014511 0ustar daviddavid(* Title: Standard Basis Library: Bool Structure Author: David Matthews Copyright David Matthews 1999, 2005 This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* G&R status: Minor change to signature. Done. *) signature BOOL = sig datatype bool = datatype bool val not : bool -> bool val fromString : string -> bool option val scan : (char, 'a) StringCvt.reader -> (bool, 'a) StringCvt.reader val toString : bool -> string end; structure Bool : BOOL = struct open RuntimeCalls; (* for POLY_SYS and EXC numbers *) datatype bool = datatype bool val not: bool -> bool = RunCall.run_call1 POLY_SYS_not_bool; local val explode_true = Text.String.explode "true" and explode_false = Text.String.explode "false" in fun scan (getc: (char, 'a) StringCvt.reader) (str: 'a) : (bool * 'a) option = let (* Skip leading white space. *) val strm = StringCvt.skipWS getc str (* Test for a match between a reader and a list of lower case chars. *) fun matchNC getc strm [] = (strm, true )(* Reached end of list - succeeded *) | matchNC getc strm (ch::rest) = case getc strm of NONE => (strm, false) (* Couldn't read it - fail. *) | SOME(ch', strm') => if ch = Char.toLower ch' (* N.B. ch is already lower case. *) then matchNC getc strm' rest else (strm', false) in (* If it matches "true" or "false" we have a valid match, otherwise return NONE. *) case matchNC getc strm explode_true of (strm', true) => SOME(true, strm') | _ => ( case matchNC getc strm explode_false of (strm', true) => SOME(false, strm') | _ => NONE ) end end (* Convert from a string. *) (* TODO: More efficient conversion? *) val fromString = StringCvt.scanString scan (* Convert to a string. *) fun toString true = "true" | toString false = "false" end; polyml.5.2.1/basis/BoolArray.sml0000644000175000017500000004134510766426332015524 0ustar daviddavid(* Title: Standard Basis Library: BoolArray and BoolVector Structures Author: David Matthews Copyright David Matthews 1999, 2005 This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* G&R status: BoolVector and BoolArray done. TODO: Add sliced versions. *) local open RuntimeCalls; (* for POLY_SYS and EXC numbers *) open LibrarySupport datatype address = Address of word(* Abstract *) (* TODO: Use a single word for vectors of size <= 31 (30 on Sparc). *) datatype vector = Vector of int*address and array = Array of int*address val System_lock: address -> unit = RunCall.run_call1 POLY_SYS_lockseg; val System_loadb: address*word->word = RunCall.run_call2 POLY_SYS_load_byte; val System_setb: address * word * word -> unit = RunCall.run_call3 POLY_SYS_assign_byte; val System_move_bytes: address*word*address*word*word->unit = RunCall.run_call5 POLY_SYS_move_bytes val wordSize : word = LibrarySupport.wordSize; (* Casts between int and word. *) val intAsWord: int -> word = RunCall.unsafeCast and wordAsInt: word -> int = RunCall.unsafeCast val bitsPerWord = wordAsInt wordSize * 8 (* Limit the size to the maximum value of Word.word. This is actually a long integer but since we always do the arithmetic as integers it will be fine. *) val maxLen = IntInf.pow(2, Word.wordSize) - 1 local val System_alloc = RunCall.run_call3 POLY_SYS_alloc_store val F_mutable_bytes : int = 65; in (* All the arrays and vectors are initially created containing zeros and then initialised. If the length is zero a one-word object is created. In the case of vectors this will remain all zeros and will be locked so that two zero-sized vectors will be equal. *) fun alloc bits : address = let val words : word = if bits = 0 then 0w1 (* Zero-sized objects are not allowed. *) else if bits < 0 orelse bits > maxLen then raise General.Size else intAsWord(Int.quot((bits + (bitsPerWord - 1)), bitsPerWord)) in System_alloc(words, F_mutable_bytes, 0) end end val andb = Word.andb and orb = Word.orb and notb = Word.notb and << = Word.<< and >> = Word.>>; infix 9 sub infix 7 andb infix 6 orb infix 5 << >> (* Create a vector/array from a list. Used as the basis of Array.fromList and Vector.fromList. *) fun fromList' (l : bool list) = let val length = List.length l (* Make a array initialised to zero. *) val vec = alloc length; (* Accumulate the list elements into bytes and store them in the vector. *) fun init (byteno, acc, bit, []) = if bit = 0w1 then () else System_setb(vec, byteno, acc) | init (byteno, acc, bit, a :: b) = let val byte = if a then bit orb acc else acc in if bit = 0wx80 then ( System_setb(vec, byteno, acc); init(byteno+0w1, 0w0, 0w1, b) ) else init(byteno, byte, bit << 0w1, b) end in init(0w0, 0w0, 0w1, l); (length, vec) end fun tabulate' (length: int, f : int->bool) = let val vec = if length >= 0 then alloc length else raise General.Size; (* Accumulate the bits into bytes and store into the array. *) fun init i byteNo bit acc = if i < length then let val byte = if f i then bit orb acc else acc in if bit = 0wx80 then ( System_setb(vec, byteNo, byte) ; init (i+1) (byteNo+0w1) 0w1 0w0 ) else init (i+1) byteNo (bit << 0w1) byte end else if acc = 0w0 then () else (* Put in the last byte. *) System_setb(vec, byteNo, acc) in init 0 0w0 0w1 0w0; (length, vec) end (* Internal function which subscripts the vector assuming that the index has already been checked for validity. *) fun uncheckedSub (v: address, i: int): bool = let val (byteOffset, bitOffset) = IntInf.quotRem(i, 8) val byte = System_loadb(v, intAsWord byteOffset); val mask = 0w1 << intAsWord bitOffset in byte andb mask <> 0w0 end (* Internal function. Checks a slice for validity and returns the effective length if it is valid otherwise raises Subscript. *) fun vec_slice_length(Vector(len, vec): vector, i: int, NONE) = if i >= 0 andalso i <= len then len-i (* Length is rest of vector. *) else raise General.Subscript | vec_slice_length(Vector(len, vec): vector, i: int, SOME l) = if i >= 0 andalso l >= 0 andalso i+l <= len then l (* Length is as given. *) else raise General.Subscript (* Move a set of bits from one vector of bytes to another. The bits may not be on the same byte alignment. Does not examine the destination so if dest_off is not byte aligned any bits required in the first byte must be passed in as src_in. Returns any bits which do not exactly fit into a byte. *) (* TODO: This only handles the case where the source starts at the beginning of the vector. It is easy to modify it for the case where the source offset is a multiple of 8 but more difficult to handle the other cases. *) fun move_bits(src: address, dest: address, dest_off, len, last_bits) = let val dest_byte = intAsWord(Int.quot(dest_off, 8)) (* Byte offset *) val dest_bit = intAsWord dest_off - dest_byte*0w8 (* Bit offset *) fun do_move last byte len : word = if len >= 8 then let (* Get the next byte and shift it up *) val newbyte = last orb (System_loadb(src, byte) << dest_bit) in (* Store the low-order 8 bits into the destination. *) System_setb(dest, dest_byte+byte, newbyte); (* Shift the accumulator down by 8 bits and get ready for the next byte. *) do_move (newbyte >> 0w8) (byte+0w1) (len-8) end else if len <= 0 then last else (* 0 < len < 8 *) let (* Get the next byte and shift it up *) val nextsrc = System_loadb(src, byte); val newbyte: word = last orb (nextsrc << dest_bit) (* This assumes that any extra bits of the source are zero. *) in if len + Word.toInt dest_bit >= 8 then ( (* Store the low-order 8 bits into the destination. *) System_setb(dest, dest_byte+byte, newbyte); (* Shift the accumulator down by 8 bits and get ready for the next byte. *) do_move (newbyte >> 0w8) (byte+0w1) (len-8) ) else newbyte end in (* TODO: If dest_bit is zero we can simply move the bytes. If len is not a multiple of 8 we may have to return the low-order bits. *) do_move last_bits 0w0 len end in structure BoolVector: MONO_VECTOR = struct type vector = vector type elem = bool val maxLen = maxLen fun length(Vector(l, _)) = l fun op sub (vec as Vector(l, v), i: int): bool = if i < 0 orelse i >= l then raise General.Subscript else uncheckedSub(v, i) (* Create a vector from a list. Must lock the vector before returning it. *) fun fromList (l : elem list) : vector = let val (length, vec) = fromList' l in System_lock vec; Vector(length, vec) end fun tabulate (length: int, f : int->elem): vector = let val (length, vec) = tabulate' (length, f) in System_lock vec; Vector(length, vec) end fun extract(slice as (Vector(_, vec), i: int, _)) = let (* Check the slice for validity and get the length *) val len = vec_slice_length slice in (* TODO: We may be able to handle special cases where the source and destination are aligned on the same bit offset. For the moment just take the simple approach. *) tabulate(len, fn j => uncheckedSub(vec, j+i)) end (* fun map f (Vector(len, vec)) = let val new_vec = alloc len (* Destination vector. *) fun mapbyte b i acc max = if i = max then acc else if f ((b andb i) <> 0w0) then mapbyte b (i<<0w1) (acc orb i) max else mapbyte b (i<<0w1) acc max fun copy b l = if l <= 0 then () else let val byte = System_loadb(vec, b) val res = (* Map each byte to get the result. Must not apply the function beyond the last bit. *) if l >= 8 then mapbyte byte 0w1 0w0 0wx100 else mapbyte byte 0w1 0w0 (0w1 << Word.fromInt l) in System_setb(new_vec, b, res); copy (b+0w1) (l-8) end in copy 0w0 len; System_lock new_vec; Vector(len, new_vec) end*) fun mapi f (Vector(len, vec)) = let val new_vec = alloc len (* Destination vector. *) fun mapbyte b i acc max l = if i = max then acc else if f (len-l, ((b andb i) <> 0w0)) then mapbyte b (i<<0w1) (acc orb i) max (l-1) else mapbyte b (i<<0w1) acc max (l-1) fun copy b l = if l <= 0 then () else let val byte = System_loadb(vec, b) val res = (* Map each byte to get the result. Must not apply the function beyond the last bit. *) if l >= 8 then mapbyte byte 0w1 0w0 0wx100 l else mapbyte byte 0w1 0w0 (0w1 << Word.fromInt l) l in System_setb(new_vec, b, res); copy (b+0w1) (l-8) end in copy 0w0 len; System_lock new_vec; Vector(len, new_vec) end (* To save duplicating almost the same code just define map in terms of mapi. *) fun map f v = mapi (fn (_, x) => f x) v (* Return a copy of the vector with a particular entry replaced *) fun update (v as Vector(len, _), i, c) = if i < 0 orelse i >= len then raise Subscript else mapi (fn (j, s) => if j = i then c else s) v fun concat l = let (* Calculate the total length *) fun total [] i = i | total (Vector(len, _)::t) i = total t (i+len) val total_len = total l 0 in let (* Allocate a new vector. *) val new_vec = alloc total_len (* Copy all the source vectors into the destination. *) fun copy_list (Vector(src_len, src_vec)::t) dest_off bits = let val next = move_bits(src_vec, new_vec, dest_off, src_len, bits) in copy_list t (dest_off+src_len) next end | copy_list [] dest_off bits = (* At the end of the lists store any extra in the last byte. *) if bits = 0w0 then () else System_setb(new_vec, intAsWord(Int.quot(dest_off, 8)), bits) in copy_list l 0 0w0; System_lock new_vec; Vector(total_len, new_vec) end end (* Create the other functions. *) structure VectorOps = VectorOperations( struct type vector = vector and elem = elem fun length(Vector(l, _)) = intAsWord l fun unsafeSub (Vector(_, v), i) = uncheckedSub(v, wordAsInt i) fun unsafeSet _ = raise Fail "Should not be called" end); open VectorOps; local (* Install the pretty printer for BoolVector.vector *) fun pretty(put: string->unit, beg: int*bool->unit, brk: int*int->unit, nd: unit->unit) (depth: int) _ x = let val last = length x - 1 fun put_elem (index, w, d) = if d = 0 then (put "..."; d-1) else if d < 0 then d-1 else ( put(if w then "true" else "false"); if index <> last then (put ","; brk(1, 0)) else (); d-1 ) in beg(3, false); put "fromList["; if depth <= 0 then put "..." else (foldli put_elem depth x; ()); put "]"; nd() end in val () = PolyML.install_pp pretty end end structure BoolArray: MONO_ARRAY = struct type array = array type elem = bool type vector = vector val maxLen = maxLen; fun length(Array(l, _)) = l (* Internal function for updating a bit assuming the bounds checks have already been done. *) fun uncheckedUpdate(v, i, new): unit = let val (byteOffset, bitOffset) = IntInf.quotRem(i, 8) val byteOffsetW = intAsWord byteOffset val byte = System_loadb(v, byteOffsetW); val mask = 0w1 << intAsWord bitOffset val newByte = if new then byte orb mask else byte andb (notb mask) in System_setb(v, byteOffsetW, newByte) end fun array (len, ini) = let (* Create the array with zeros initially. *) val vec = alloc len (* If we need to set this to true we set all the bytes to 0xff. This could mean that we have bits set which don't correspond to values in the range and so two arrays with the same abstract values could have different representations. That's safe for arrays because equality is pointer equality but wouldn't be safe for immutables because structure equality could give the wrong answer. *) fun setTrue i b = if len <= i then () else (System_setb(vec, b, 0wxff); setTrue (i+8) (b+0w1)) in if ini then setTrue 0 0w0 else (); Array(len, vec) end fun op sub (Array(l, v), i: int): elem = if i < 0 orelse i >= l then raise General.Subscript else uncheckedSub(v, i) (* Exported update function. *) fun update (Array (l, v), i: int, new) : unit = if i < 0 orelse i >= l then raise General.Subscript else uncheckedUpdate(v, i, new) (* Create an array from a list. *) fun fromList (l : elem list) : array = Array(fromList' l) fun tabulate (length: int , f : int->elem): array = Array(tabulate'(length, f)) fun vector(Array(len, vec)): vector = (* TODO: We may be able to handle special cases where the source and destination are aligned on the same bit offset. For the moment just take the simple approach. *) BoolVector.tabulate(len, fn j => uncheckedSub(vec, j)) (* Copy one array into another. The arrays could be the same but in that case di must be zero. *) fun copy {src as Array (slen, s), dst as Array (dlen, d), di: int} = if di < 0 orelse di+slen > dlen then raise General.Subscript else (* TODO: Handle multiple bits where possible by using move_bits or a variant. *) let fun copyBits n = if n >= slen then () else (uncheckedUpdate(d, di+n, uncheckedSub(s, n)); copyBits(n+1)) in copyBits 0 end (* fun copy {src as Array (slen, s), dst as Array (dlen, d), di: int} = let in if di < 0 orelse di+slen > dlen then raise General.Subscript else if si < di then (* Moving up - Start from the end *) (* TODO: Handle multiple bits where possible by using move_bits or a variant. *) let fun copyBits n = if n < 0 then () else (uncheckedUpdate(d, di+n, uncheckedSub(s, si+n)); copyBits(n-1)) in copyBits (slen-1) end else (* Moving down. *) let fun copyBits n = if n >= slice_len then () else (uncheckedUpdate(d, di+n, uncheckedSub(s, si+n)); copyBits(n+1)) in copyBits 0 end end *) (* Copy a vector into an array. *) fun copyVec {src as Vector(slen, s), dst as Array (dlen, d), di: int} = let fun copyBits n = if n >= slen then () else (uncheckedUpdate(d, di+n, uncheckedSub(s, n)); copyBits(n+1)) in if di < 0 orelse di+slen > dlen then raise General.Subscript else copyBits 0 end (* Create the other functions. *) structure VectorOps = VectorOperations( struct type vector = array and elem = elem fun length(Array(l, _)) = intAsWord l fun unsafeSub (Array(_, v), i) = uncheckedSub(v, wordAsInt i) fun unsafeSet (Array(_, v), i, new) = uncheckedUpdate(v, wordAsInt i, new) end); open VectorOps; local (* Install the pretty printer for BoolArray.array *) (* We may have to do this outside the structure if we have opaque signature matching. *) fun pretty(put: string->unit, beg: int*bool->unit, brk: int*int->unit, nd: unit->unit) (depth: int) _ x = let val last = length x - 1 fun put_elem (index, w, d) = if d = 0 then (put "..."; d-1) else if d < 0 then d-1 else ( put(if w then "true" else "false"); if index <> last then (put ","; brk(1, 0)) else (); d-1 ) in beg(3, false); put "fromList["; if depth <= 0 then put "..." else (foldli put_elem depth x; ()); put "]"; nd() end in val () = PolyML.install_pp pretty end end end; (* Equality for both BoolVector.vector and BoolArray.array will be inherited from word. This will give pointer equality for them which is correct for array but not for vector. We need to install a special equality function for BoolVector. *) local open BoolVector in fun it (a: vector, b: vector): bool = length a = length b andalso foldli (fn (i, v, res) => res andalso sub(b, i) = v) true a end; RunCall.addOverload it "="; polyml.5.2.1/basis/Byte.sml0000644000175000017500000000436110313043323014511 0ustar daviddavid(* Title: Standard Basis Library: Byte Structure and signature Author: David Matthews Copyright David Matthews 1999, 2005 This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA under the terms of that licence. *) (* G&R 2004 status: Complete. *) signature BYTE = sig val byteToChar : Word8.word -> char val charToByte : char -> Word8.word val bytesToString : Word8Vector.vector -> string val stringToBytes : string -> Word8Vector.vector val unpackStringVec : Word8VectorSlice.slice -> string val unpackString : Word8ArraySlice.slice -> string val packString : Word8Array.array * int * Substring.substring -> unit end; structure Byte: BYTE = struct (* Chars and Word8.word values are both tagged integers in the range 0..255. *) fun byteToChar (w: Word8.word): char = RunCall.unsafeCast w fun charToByte (c: char) : Word8.word = RunCall.unsafeCast c (* Conversion between Word8Vector.vector and string is just a cast. *) fun bytesToString (LibrarySupport.Word8Array.Vector v) : string = LibrarySupport.Word8Array.toString v fun stringToBytes (s: string) : Word8Vector.vector = LibrarySupport.Word8Array.Vector(LibrarySupport.Word8Array.fromString s) fun unpackStringVec slice : string = bytesToString(Word8VectorSlice.vector slice) fun unpackString slice : string = bytesToString(Word8ArraySlice.vector slice) fun packString(array: Word8Array.array, i, s: substring) = let val (str, offset, size) = Substring.base s val slice = Word8VectorSlice.slice(stringToBytes str, offset, SOME size) in Word8ArraySlice.copyVec{src=slice, dst=array, di=i} end end; polyml.5.2.1/basis/COPYING0000644000175000017500000006346710313043324014141 0ustar daviddavid GNU LESSER GENERAL PUBLIC LICENSE Version 2.1, February 1999 Copyright (C) 1991, 1999 Free Software Foundation, Inc. 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. When we speak of free software, we are referring to freedom of use, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish); that you receive source code or can get it if you want it; that you can change the software and use pieces of it in new free programs; and that you are informed that you can do these things. To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. GNU LESSER GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. , 1 April 1990 Ty Coon, President of Vice That's all there is to it! polyml.5.2.1/basis/CommandLine.sml0000644000175000017500000000234410313043324015774 0ustar daviddavid(* Title: Standard Basis Library: CommandLine Structure and Signature Author: David Matthews Copyright David Matthews 1999 This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* G&R 2004 checked: no change. *) signature COMMAND_LINE = sig val name : unit -> string val arguments : unit -> string list end structure CommandLine : COMMAND_LINE = struct fun callProcEnv (code: int) args = RunCall.run_call2 RuntimeCalls.POLY_SYS_process_env (code,args); val name : unit -> string = callProcEnv 0 val arguments : unit -> string list = callProcEnv 1 end; polyml.5.2.1/basis/Date.sml0000644000175000017500000004235510766426367014521 0ustar daviddavid(* Title: Standard Basis Library: Date Signature and structure. Author: David Matthews Copyright David Matthews 2000 This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* G&R 2004 status: Signature checked. No change. Probably needs the structure checking to see whether the implementation is correct. *) signature DATE = sig datatype weekday = Mon | Tue | Wed | Thu | Fri | Sat | Sun datatype month = Jan | Feb | Mar | Apr | May | Jun | Jul | Aug | Sep | Oct | Nov | Dec type date exception Date val date : { year : int, month : month, day : int, hour : int, minute : int, second : int, offset : Time.time option } -> date val year : date -> int val month : date -> month val day : date -> int val hour : date -> int val minute : date -> int val second : date -> int val weekDay : date -> weekday val yearDay : date -> int val offset : date -> Time.time option val isDst : date -> bool option val localOffset : unit -> Time.time val fromTimeLocal : Time.time -> date val fromTimeUniv : Time.time -> date val toTime : date -> Time.time val toString : date -> string val fmt : string -> date -> string val fromString : string -> date option val scan : (char, 'a) StringCvt.reader -> 'a -> (date * 'a) option val compare : date * date -> General.order end; structure Date :> DATE = struct (* There seems to be an assumption, particularly in the "compare" function, that Date.date values are records of year, month, day etc. *) type date = { year: int, (* Signed year. *) month: int, (* Month as 0..11 *) day: int, (* Day as 1..(28, 29, 30, 31) *) hour: int, (* Hour as 0..23 *) minute: int, (* Minute as 0..59 *) second: int, (* Second as 0..59 (maybe 60 or 61 if leap) *) offset: Time.time option (* Offset as Time.time -24hrs raise Date (* Should never happen *) fun isLeapYear l = if l mod 100 = 0 then (l div 100) mod 4 = 0 else l mod 4 = 0 (* Convert the enumerated type to a month number. *) fun monthToMonthNo Jan = 0 | monthToMonthNo Feb = 1 | monthToMonthNo Mar = 2 | monthToMonthNo Apr = 3 | monthToMonthNo May = 4 | monthToMonthNo Jun = 5 | monthToMonthNo Jul = 6 | monthToMonthNo Aug = 7 | monthToMonthNo Sep = 8 | monthToMonthNo Oct = 9 | monthToMonthNo Nov = 10 | monthToMonthNo Dec = 11 open RuntimeCalls fun callTiming (code: int) args = RunCall.run_call2 RuntimeCalls.POLY_SYS_timing_dispatch (code,args); (* Get the local time offset which applied at the specific time. The time is in seconds since the epoch. The result may be the current time offset if it is outside the range for which we have information. We use seconds as the argument and result here because it avoids having to multiply and divide arbitrary precision values in the RTS. May raise Size if the value is too large (or small). In that case we use the current time offset. *) fun localOffsetApplying (t: int) : int = callTiming 4 t handle General.Size => callTiming 4 (Time.toSeconds(Time.now())) (* Get the current local time offset. *) fun localOffset (): Time.time = Time.fromSeconds(localOffsetApplying(Time.toSeconds(Time.now()))) local (* Time values are since 1st January of this year. *) val baseYear: int = callTiming 2 0 val yearOffset: int = callTiming 3 0 (* The offset of zeroTime within that year. *) (* Get the day in the year. Either of day or year may be unnormalised but that shouldn't affect the result (except if year is negative???) *) fun dayInYear (day, month, year) = if isLeapYear year then Vector.sub(dayInLeapYearVec, month) + day else Vector.sub(dayVec, month) + day (* Compute the number of days since the start. *) fun yearToDays y = let fun ytod dys yr = if yr = baseYear then dys (* If the year is before the base year we subtract the number of days in this year and recurse. *) else if yr < baseYear then if isLeapYear yr then ytod (dys-366) (yr+1) else ytod (dys-365) (yr+1) (* The year we want is after the base year. *) else if yr - baseYear >= 100 (* If it is more than a century apart then we can add in the number of days in a century. There are 24 leap years in most centuries except those which are divisible by 400. Note: We're assuming the Gregorian calendar. *) then if ((yr-1) div 100) mod 4 = 0 then ytod (dys+36525) (yr-100) else ytod (dys+36524) (yr-100) else if isLeapYear(yr-1) then ytod (dys+366) (yr-1) else ytod (dys+365) (yr-1) in ytod 0 y end (* Convert days to number of years plus the day within the year. *) fun daysToYears d = let fun dtoy dys yr = if dys < 0 then (* Before the base year: have to add in days. *) if isLeapYear (yr-1) then dtoy (dys+366) (yr-1) else dtoy (dys+365) (yr-1) (* If we are at least a century away we can subtract the century. *) else if dys >= 36525 then if ((yr+99) div 100) mod 4 = 0 then dtoy (dys-36525) (yr+100) else dtoy (dys-36524) (yr+100) else if isLeapYear yr then if dys >= 366 then dtoy (dys-366) (yr+1) else (yr, dys) else if dys >= 365 then dtoy (dys-365) (yr+1) else (yr, dys) in dtoy d baseYear end (* Convert a number of seconds to a date. *) fun fromSeconds t (tzOffset: Time.time option) : date = let val tsecs = t - yearOffset val secs = tsecs mod 60 val mins = (tsecs div 60) mod 60 val hrs = (tsecs div secsPerHour) mod 24 (* Get the day and year. The day is a value between 0 and 364/365. *) val (year, days) = daysToYears (tsecs div secsPerDay) (* Convert the day into a month+day *) val isLeap = isLeapYear year fun dayToMonth dy mth = if dy <= Vector.sub(if isLeap then dayInLeapYearVec else dayVec, mth+1) then mth else dayToMonth dy (mth+1) val month = dayToMonth days 0 val dayInMonth = days - Vector.sub(if isLeap then dayInLeapYearVec else dayVec, month) in {year=year, month=month, day=dayInMonth, hour=hrs, minute=mins, second=secs, offset = tzOffset } end in (* Get the day in the year. *) fun yearDay({day, month, year, ...}:date) = dayInYear(day, month, year) (* Convert the date into a UTC time value. *) fun toTime (date as {year, month, day, hour, minute, second, offset}) = let (* Compute the seconds. *) val secs = second + minute*60 + hour*secsPerHour + (yearDay date + yearToDays year)*secsPerDay + yearOffset; in case offset of SOME t => Time.+(t, Time.fromSeconds secs) | NONE => Time.fromSeconds(secs + localOffsetApplying secs) end (* Convert a UTC time to a UTC date. *) fun fromTimeUniv t = fromSeconds (Time.toSeconds t) (SOME Time.zeroTime) (* Convert a UTC time to a date in the local time zone. *) fun fromTimeLocal t = let val secs = Time.toSeconds t val localOffset = localOffsetApplying secs in fromSeconds (secs-localOffset) NONE end (* Generate a normalised date. *) fun date {year, month, day, hour, minute, second, offset} = let (* Get the time zone information if it is provided. If it is outside +/- 24 hours we get the number of full days. *) val (tzDays, normTz) = case offset of SOME tz => let val excess = Int.quot(Time.toSeconds tz, secsPerDay)*secsPerDay; in (excess, SOME(tz-Time.fromSeconds excess)) end | NONE => (0, NONE) (* Convert it to the number of seconds since the epoch which will normalise it. *) val secs = second + minute*60 + hour*secsPerHour + (dayInYear(day, monthToMonthNo month, year) + yearToDays year)*secsPerDay + yearOffset + tzDays; in (* Convert it into a date. *) fromSeconds secs normTz end end val year: date->int = #year and day: date->int = #day and hour: date->int = #hour and minute: date->int = #minute and second: date->int = #second and offset: date->Time.time option = #offset (* Return the month from the enumerated type. *) fun month({month, ...}:date) = monthNoToMonth month (* Get the day of the week as a number - not exported. *) fun dayOfWeek({year, month, day, ...}: date) = let (* From looking at the code of mktime, which is marked as being in the public domain, this formula (Zeller's Congruence?) is used to find the day of the week for the first of any month. I don't know what range this works for but it seems accurate as far as I can test it. *) val m0 = month+1 (* Count months from 1 *) val m1 = (m0 + 9) mod 12 + 1 val yy0 = if m0 <= 2 then year-1 else year val yy1 = yy0 div 100 val yy2 = yy0 mod 100 val dow = ((26*m1 - 2) div 10 + 1 + yy2 + yy2 div 4 + yy1 div 4 - 2*yy1) mod 7 in (* Add on the day within the month. *) (dow + day - 1) mod 7 end (* Get day of week as an enumerated type - exported. *) fun weekDay date = Vector.sub(dayOfWkVec, dayOfWeek date) (* QUESTION: The definition of isDst is very vague. I am assuming that it means that, for a local time, did/will Summer Time apply at that time? *) fun isDst (d as {offset=NONE, ...} : date): bool option = let val isSummer = callTiming 5 (Time.toSeconds(toTime d)) handle Size => ~1 in if isSummer < 0 then NONE else SOME (isSummer > 0) end | isDst {offset=SOME _, ...} = SOME false (* ?? *) (* Compare the dates ignoring time zone information. *) fun compare({year=y1, month=m1, day=d1, hour=h1, minute=n1, second=s1, ...}:date, {year=y2, month=m2, day=d2, hour=h2, minute=n2, second=s2, ...}:date) = if y1 < y2 then General.LESS else if y1 > y2 then General.GREATER else if m1 < m2 then General.LESS else if m1 > m2 then General.GREATER else if d1 < d2 then General.LESS else if d1 > d2 then General.GREATER else if h1 < h2 then General.LESS else if h1 > h2 then General.GREATER else if n1 < n2 then General.LESS else if n1 > n2 then General.GREATER else Int.compare(s1, s2) (* Parse a date/time. *) fun scan getc str = let (* Try to extract an n-character string. *) fun getChars n str = let fun getN 0 s str = SOME (String.implode(List.rev s), str) | getN n s str = case getc str of NONE => NONE | SOME(ch, str') => getN (n-1) (ch :: s) str' in getN n [] str end (* Get the day of the week. We don't actually use it but we need to verify it. *) (* QUESTION: What time offset should be used? I presume NONE. *) fun parseDayOfWeek str = case getChars 3 str of NONE => NONE | SOME(s, str') => if Vector.foldr (fn(s', t) => t orelse s=s') false dayNames then SOME(s, str') else NONE fun parseMonth str = case getChars 3 str of NONE => NONE | SOME(s, str') => (* Return the month corresponding to the month name otherwise NONE. *) Vector.foldri (fn(n:int, s':string, t) => if s = s' then SOME(Vector.sub(monthVec, n), str') else t) NONE monthNames (* Get a two digit number. *) fun parse2Digits str = case getc str of NONE => NONE | SOME(ch0, str1) => if ch0 < #"0" orelse ch0 > #"9" then NONE else case getc str1 of NONE => NONE | SOME(ch1, str2) => if ch1 < #"0" orelse ch1 > #"9" then NONE else SOME((Char.ord ch0 - Char.ord #"0")*10 + (Char.ord ch1 - Char.ord #"0"), str2) (* Get two digits as a day of the month. Don't check the range. *) val parseDayOfMonth = parse2Digits (* A time is written as hh:mm:ss *) fun parseTime str = case parse2Digits str of NONE => NONE | SOME(hh, str1) => case getc str1 of NONE => NONE | SOME(ch, str2) => if ch <> #":" then NONE else case parse2Digits str2 of NONE => NONE | SOME(mm, str3) => case getc str3 of NONE => NONE | SOME(ch, str4) => if ch <> #":" then NONE else case parse2Digits str4 of NONE => NONE | SOME(ss, str5) => SOME((hh, mm, ss), str5) (* A year is represented as four digits. *) fun parseYear str = case parse2Digits str of NONE => NONE | SOME(yy0, str1) => case parse2Digits str1 of NONE => NONE | SOME(yy1, str2) => SOME(yy0*100+yy1, str2) fun parseDate str = case parseDayOfWeek str of NONE => NONE | SOME(_, str1) => case getc str1 of (* Get exactly one space. *) NONE => NONE | SOME(ch, str2) => if ch <> #" " then NONE else case parseMonth str2 of (* Name of month. *) NONE => NONE | SOME(mth, str3) => case getc str3 of (* Get exactly one space. *) NONE => NONE | SOME(ch, str4) => if ch <> #" " then NONE else case parseDayOfMonth str4 of NONE => NONE | SOME(day, str5) => case getc str5 of (* Get exactly one space. *) NONE => NONE | SOME(ch, str6) => if ch <> #" " then NONE else case parseTime str6 of NONE => NONE | SOME((hr,min,sec), str7) => case getc str7 of (* Get exactly one space. *) NONE => NONE | SOME(ch, str8) => if ch <> #" " then NONE else case parseYear str8 of NONE => NONE | SOME(year, str9) => SOME(date{year=year, month=mth, day=day, hour=hr, minute=min, second=sec, offset=NONE}, str9) in case getc str of NONE => NONE | SOME (ch, str') => (* Remove initial white space. *) if Char.isSpace ch then scan getc str' else parseDate str end val fromString = StringCvt.scanString scan (* toString generates an English language, American style date. *) fun toString (date as {year, month, day, hour, minute, second, ...}: date) = let (* Pad a number with zeros up to the required width. Doesn't work for negatives which ought to be padded after the minus sign, but that's only a problem for years. *) fun int2str n i = let val str = Int.toString i fun padZeros n = if n <= 0 then "" else "0" ^ padZeros (n-1) in padZeros (n-String.size str) ^ str end in String.concat[ Vector.sub(dayNames, dayOfWeek date), " ", Vector.sub(monthNames, month), " ", int2str 2 day, " ", int2str 2 hour, ":", int2str 2 minute, ":", int2str 2 second, " ", int2str 4 year] end fun fmt s (date as {year, month, day, hour, minute, second, offset}) = let (* Edit the string to remove any undefined escape combinations. They shouldn't normally occur. *) fun editString s i l = if i = l then s (* Done *) else if String.sub(s, i) <> #"%" then editString s (i+1) l else (* Found a % sign. *) if i = l-1 then (* This was the last character. QUESTION: This isn't defined assume we should remove it. *) String.substring(s, 0, i) else let val c = String.sub(s, i+1) in if Char.contains "aAbBcdHIjmMpSUwWxXyYZ%" c then (* OK *) editString s (i+2) l else (* Replace %c by c, i.e. remove the %. *) editString (String.substring(s, 0, i) ^ String.substring(s, i+1, l-i-1)) i (l-1) end val newFormat = editString s 0 (String.size s) val summer = case offset of SOME _ => ~1 | NONE => callTiming 5 (Time.toSeconds(toTime date)) handle Size => ~1 in callTiming 6 (newFormat, year, month, day, hour, minute, second, dayOfWeek date, yearDay date, summer) handle _ => raise Date end end; local (* Install the pretty printer for Date.date. This has to be done outside the structure because of the opaque matching. *) fun pretty(p, _, _, _) _ _ x = p(Date.toString x) in val () = PolyML.install_pp pretty end polyml.5.2.1/basis/FinalPolyML.sml0000644000175000017500000017624311062466700015757 0ustar daviddavid(* Title: Final version of the PolyML structure Author: David Matthews Copyright David Matthews 2008 This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* Based on: Title: Poly Make Program. Author: Dave Matthews, Cambridge University Computer Laboratory Copyright Cambridge University 1985 *) (* This is the version of the PolyML structure that can be compiled after we have the rest of the basis library. In particular it binds in TextIO.stdIn and TextIO.stdOut. This contains the top-level read-eval-print loop as well as "use" and Poly/ML's "make". *) local open PolyML.NameSpace (*****************************************************************************) (* top-level name space *) (*****************************************************************************) val globalTable = UniversalArray.univArray 10 (* Choose a number for the initial size. *) and tableMutex = Thread.Mutex.mutex() (* Lock to protect the table. *) local open Universal UniversalArray Thread.Thread Thread.Mutex (* Create universal tags for the name space. *) (* Should these be kept private here or included in the PolyML structure? *) val valTag: valueVal tag = tag() and fixTag: fixityVal tag = tag() and functorTag: functorVal tag = tag() and signatureTag: signatureVal tag = tag() and structureTag: structureVal tag = tag() and typeTag: typeVal tag = tag() (* Lock the mutex during any lookup or entry. This is primarily to avoid the underlying hash table from being rehashed by different threads at the same time. *) fun protect mutx f = LibraryIOSupport.protect mutx f () fun lookup t s = protect tableMutex (fn () => sub(globalTable, t, s)); fun enter t (s,v) = protect tableMutex (fn () => update(globalTable, t, s, v)); fun all t () = protect tableMutex (fn () => fold (fn (s, v, l) => if tagIs t v then (s, tagProject t v)::l else l) [] globalTable) fun forget t tag s = protect tableMutex (fn () => delete(t, tag, s)) in val globalNameSpace: PolyML.NameSpace.nameSpace = { lookupFix = lookup fixTag, lookupSig = lookup signatureTag, lookupVal = lookup valTag, lookupType = lookup typeTag, lookupFunct = lookup functorTag, lookupStruct = lookup structureTag, enterFix = enter fixTag, enterSig = enter signatureTag, enterVal = enter valTag, enterType = enter typeTag, enterFunct = enter functorTag, enterStruct = enter structureTag, allFix = all fixTag, allSig = all signatureTag, allVal = all valTag, allType = all typeTag, allFunct = all functorTag, allStruct = all structureTag } val forgetFix = forget globalTable fixTag and forgetSig = forget globalTable signatureTag and forgetVal = forget globalTable valTag and forgetType = forget globalTable typeTag and forgetFunct = forget globalTable functorTag and forgetStruct = forget globalTable structureTag end (* PolyML.compiler takes a list of these parameter values. They all default so it's possible to pass only those that are actually needed. *) datatype compilerParameters = CPOutStream of string->unit (* Output stream for debugging and other output from the compiler. Provides a default stream for other output. Default: TextIO.print *) | CPNameSpace of PolyML.NameSpace.nameSpace (* Name space to look up and enter results. Default: globalNameSpace *) | CPErrorMessageProc of string * bool * int -> unit (* Called by the compiler to generate error messages. Arguments (message, isHard, lineNo). message is the message with context information. isHard is true if this is an error, false if a warning. lineNo is the line number passed in. Default: print this to CPOutStream value using CPLineNo and CPFileName. *) | CPLineNo of unit -> int (* Called by the compiler to get the current "line number". This is passed to CPErrorMessageProc and the debugger. It may actually be a more general location than a source line. Default: fn () => 0 i.e. no line numbering. *) | CPFileName of string (* The current file being compiled. This is used by the default CPErrorMessageProc and the debugger. Default: "" i.e. interactive stream. *) | CPPrintInAlphabeticalOrder of bool (* Whether to sort the results by alphabetical order before printing them. Applies only to the default CPResultFun. Default value of printInAlphabeticalOrder. *) | CPPrintTypesWithStructure of bool (* Whether when printing the type of a value to include any structure name with the type constructors. Default value of printTypesWithStructureName. *) | CPResultFun of { fixes: (string * fixityVal) list, values: (string * valueVal) list, structures: (string * structureVal) list, signatures: (string * signatureVal) list, functors: (string * functorVal) list, types: (string * typeVal) list} -> unit (* Function to apply to the result of compiling and running the code. Default: print and enter the values into CPNameSpace. *) | CPProfiling of int (* Control profiling. 0 is no profiling, 1 is time etc. Default is value of PolyML.profiling. *) | CPTiming of bool (* Control whether the compiler should time various phases of the compilation and also the run time. Default: value of PolyML.timing. *) | CPDebug of bool (* Control whether calls to the debugger should be inserted into the compiled code. This allows breakpoints to be set, values to be examined and printed and functions to be traced at the cost of a very large run-time overhead. Default: value of PolyML.Compiler.debug *) | CPPrintDepth of unit->int (* This controls the depth of printing if the default CPResultFun is used. It is also bound into any use of PolyML.print in the compiled code and will be called to get the print depth whenever that code is executed. Default: Get the current value of PolyML.print_depth. *) | CPPrintStream of string->unit (* This is bound into any occurrence of PolyML.print and is used to produce the outut. Default: CPOutStream. *) | CPPrinterNameSpace of PolyML.NameSpace.nameSpace (* This is bound into any occurrence of PolyML.print, PolyML.makestring or General.exnMessage. It is used to search for an exception identifier in order to print the argument of an exception packet. It is also used to find infixed datatype constructors when printing values. e.g. it might print 1::2 rather than ::(1,2) if lists weren't treated specially. Default: CPNameSpace *) | CPErrorDepth of int (* Controls the depth of context to produce in error messages. Default : value of PolyML.error_depth. *) | CPLineLength of int (* Bound into any occurrences of PolyML.print. This is the length of a line used in the pretty printer. Default: value of PolyML.line_length. *) (* References for control and debugging. *) val profiling = ref 0 and timing = ref false and printDepth = ref 0 and errorDepth = ref 6 and lineLength = ref 77 val assemblyCode = ref false and codetree = ref false and codetreeAfterOpt = ref false and pstackTrace = ref false and parsetree = ref false val debug = ref false val inlineFunctors = ref true val maxInlineSize = ref 40 val ml90 = ref false val printInAlphabeticalOrder = ref true val printTypesWithStructureName = ref true val traceCompiler = ref false (* Top-level prompts. *) val prompt1 = ref "> " and prompt2 = ref "# "; (* Debugger control. *) (* Whenever we enter a function we push information onto this stack. *) type debugStackEntry = { lineNo: int, funName: string, fileName: string, space: PolyML.NameSpace.nameSpace, arguments: PolyML.NameSpace.valueVal } (* With the exception of the stack, which is thread-specific, all these are global variables and apply to any thread. Perhaps they should be thread-specific in which case the debugger will only be entered if the thread that set a breakpoint encounters it. *) local val stackTag: debugStackEntry list ref Universal.tag = Universal.tag() in (* Get the stack of previous calls. Create a new one if necessary.*) fun getStack(): debugStackEntry list ref = case Thread.Thread.getLocal stackTag of NONE => let val stack = ref [] in Thread.Thread.setLocal(stackTag, stack); stack end | SOME stack => stack end val debugLevel = ref 0 (* Set to true to exit the debug loop. Set by commands such as "continue". *) val exitLoop = ref false; (* Call tracing. *) val tracing = ref false; val breakNext = ref false; (* Single stepping. *) val stepDebug = ref false; val stepDepth = ref ~1; (* Only break at a stack size less than this. *) (* Break points. We have two breakpoint lists: a list of file-line pairs and a list of function names. *) val lineBreakPoints = ref [] and fnBreakPoints = ref [] fun checkLineBreak (file, line) = let fun findBreak [] = false | findBreak ((f, l) :: rest) = (l = line andalso f = file) orelse findBreak rest in findBreak (! lineBreakPoints) end fun checkFnBreak exact name = let (* When matching a function name we allow match if the name we're looking for matches the last component of the name we have. e.g. if we set a break for "f" we match F().S.f . *) fun matchName n = if name = n then true else if exact then false else let val nameLen = size name and nLen = size n fun isSeparator #"-" = true | isSeparator #")" = true | isSeparator #"." = true | isSeparator _ = false in nameLen > nLen andalso String.substring(name, nameLen - nLen, nLen) = n andalso isSeparator(String.sub(name, nameLen - nLen - 1)) end in List.exists matchName (! fnBreakPoints) end fun printOut s = TextIO.print s (* If we get an exception while writing to stdOut we've got a big problem and can't continue. It could happen if we have closed stdOut. Try reporting the error through stdErr and exit. *) handle SML90.Interrupt => raise SML90.Interrupt | exn => ( ( TextIO.output(TextIO.stdErr, concat["Exception ", exnName exn, " raised while writing to stdOut.\n"]); TextIO.flushOut TextIO.stdErr (* probably unnecessary. *) ) handle _ => (); (* Get out without trying to do anything else. *) OS.Process.terminate OS.Process.failure ) (* Try to print the appropriate line from the file. Used in the debugger and debug functions. *) fun printSourceLine(fileName: string, line: int, funName: string) = let open TextIO in (* First just print where we are. *) if fileName = "" then () else printOut(concat[fileName, " "]); if line = 0 then () else printOut(concat[" line:", Int.toString line, " "]); printOut(concat["function:", funName, "\n"]); (* Try to print it. This may fail if the file name was not a full path name and we're not in the correct directory. *) if fileName = "" then () else let val fd = openIn fileName fun pLine n = case inputLine fd of NONE => () | SOME s => if n = 1 then printOut s else pLine(n-1) in pLine line; closeIn fd end handle IO.Io _ => () (* If it failed simply ignore the error. *) end local open Bootstrap Bootstrap.Universal (* To allow for the possibility of changing the representation we don't make Universal be the same as Bootstrap.Universal. *) (* Default error message function. *) fun defaultErrorProc fileName (message: string, hard: bool, line: int) = printOut(concat ( (if hard then ["Error-"] else ["Warning-"]) @ (if fileName = "" then [] else [" in '", fileName, "',"]) @ (if line = 0 then [] else [" line ", Int.toString line]) @ (if line = 0 andalso fileName = "" then [] else [".\n"]) @ [message])) (* Default function to print and enter a value. *) fun printAndEnter (inOrder: bool, space: PolyML.NameSpace.nameSpace, stream: string->unit, depth: int, withStruct: bool) { fixes: (string * fixityVal) list, values: (string * valueVal) list, structures: (string * structureVal) list, signatures: (string * signatureVal) list, functors: (string * functorVal) list, types: (string * typeVal) list}: unit = let (* We need to merge the lists to sort them alphabetically. *) datatype decKind = FixStatusKind of fixityVal | TypeConstrKind of typeVal | SignatureKind of signatureVal | StructureKind of structureVal | FunctorKind of functorVal | ValueKind of valueVal val decList = map (fn (s, f) => (s, FixStatusKind f)) fixes @ map (fn (s, f) => (s, TypeConstrKind f)) types @ map (fn (s, f) => (s, SignatureKind f)) signatures @ map (fn (s, f) => (s, StructureKind f)) structures @ map (fn (s, f) => (s, FunctorKind f)) functors @ map (fn (s, f) => (s, ValueKind f)) values fun kindToInt(FixStatusKind _) = 0 | kindToInt(TypeConstrKind _) = 1 | kindToInt(SignatureKind _) = 2 | kindToInt(StructureKind _) = 3 | kindToInt(FunctorKind _) = 4 | kindToInt(ValueKind _) = 5 fun order (s1: string, k1) (s2, k2) = if s1 = s2 then kindToInt k1 <= kindToInt k2 else s1 <= s2 fun quickSort (leq:'a -> 'a -> bool) ([]:'a list) = [] | quickSort (leq:'a -> 'a -> bool) ([h]:'a list) = [h] | quickSort (leq:'a -> 'a -> bool) ((h::t) :'a list) = let val (after, befor) = List.partition (leq h) t in quickSort leq befor @ (h :: quickSort leq after) end; (* Don't sort the declarations if we want them in declaration order. *) val sortedDecs = if inOrder then quickSort order decList else decList fun printDec(n, FixStatusKind f) = ( if depth > 0 then displayFix((n,f), stream) else (); #enterFix space (n,f) ) | printDec(n, TypeConstrKind t) = ( if depth > 0 then displayType(t, depth, withStruct, stream) else (); #enterType space (n,t) ) | printDec(n, SignatureKind s) = ( if depth > 0 then displaySig(s, depth, space, withStruct, stream) else (); #enterSig space (n,s) ) | printDec(n, StructureKind s) = ( if depth > 0 then displayStruct(s, depth, space, withStruct, stream) else (); #enterStruct space (n,s) ) | printDec(n, FunctorKind f) = ( if depth > 0 then displayFunct(f, depth, space, withStruct, stream) else (); #enterFunct space (n,f) ) | printDec(n, ValueKind v) = ( if depth > 0 then displayVal(v, depth, space, withStruct, stream) else (); #enterVal space (n,v) ) in List.app printDec sortedDecs end in fun polyCompiler (getChar: unit->char option, parameters: compilerParameters list) = let (* Find the first item that matches or return the default. *) fun find f def [] = def | find f def (hd::tl) = case f hd of SOME s => s | NONE => find f def tl val outstream = find (fn CPOutStream s => SOME s | _ => NONE) TextIO.print parameters val nameSpace = find (fn CPNameSpace n => SOME n | _ => NONE) globalNameSpace parameters val lineNo = find (fn CPLineNo l => SOME l | _ => NONE) (fn () => 0) parameters val fileName = find (fn CPFileName s => SOME s | _ => NONE) "" parameters val printInOrder = find (fn CPPrintInAlphabeticalOrder t => SOME t | _ => NONE) (! printInAlphabeticalOrder) parameters val profiling = find (fn CPProfiling i => SOME i | _ => NONE) (!profiling) parameters val timing = find (fn CPTiming b => SOME b | _ => NONE) (!timing) parameters val printDepth = find (fn CPPrintDepth f => SOME f | _ => NONE) (fn () => !printDepth) parameters val printWithStruct = find (fn CPPrintTypesWithStructure t => SOME t | _ => NONE) (! printTypesWithStructureName) parameters val resultFun = find (fn CPResultFun f => SOME f | _ => NONE) (printAndEnter(printInOrder, nameSpace, outstream, printDepth(), printWithStruct)) parameters val printString = find (fn CPPrintStream s => SOME s | _ => NONE) outstream parameters val printenv = find (fn CPPrinterNameSpace s => SOME s | _ => NONE) nameSpace parameters val errorProc = find (fn CPErrorMessageProc f => SOME f | _ => NONE) (defaultErrorProc fileName) parameters val debugging = find (fn CPDebug t => SOME t | _ => NONE) (! debug) parameters (* Pass all the settings. Some of these aren't included in the parameters datatype (yet?). *) val code = PolyML.compiler(nameSpace, getChar, [ tagInject errorMessageProcTag errorProc, tagInject compilerOutputTag outstream, tagInject lineNumberTag lineNo, tagInject fileNameTag fileName, tagInject inlineFunctorsTag (! inlineFunctors), tagInject maxInlineSizeTag (! maxInlineSize), tagInject parsetreeTag (! parsetree), tagInject codetreeTag (! codetree), tagInject pstackTraceTag (! pstackTrace), tagInject assemblyCodeTag (! assemblyCode), tagInject codetreeAfterOptTag (! codetreeAfterOpt), tagInject timingTag timing, tagInject profilingTag profiling, tagInject errorDepthTag (! errorDepth), tagInject printDepthFunTag printDepth, tagInject lineLengthTag (! lineLength), tagInject traceCompilerTag (! traceCompiler), tagInject ml90Tag (! ml90), tagInject debugTag debugging, tagInject printStringTag printString, tagInject printEnvironTag printenv, tagInject debuggerTag debugFunction ]) in fn () => resultFun(code()) end (* Top-level read-eval-print loop. This is the normal top-level loop but is also used for the debugger so has to be mutually recursively defined with it. *) and topLevel isDebug (nameSpace, exitLoop) : unit = let (* This is used as the main read-eval-print loop. It is also invoked by running code that has been compiled with the debug option on when it stops at a breakpoint. In that case debugEnv contains an environment formed from the local variables. This is placed in front of the normal top-level environment. *) (* Don't use the end_of_stream because it may have been set by typing EOT to the command we were running. *) val endOfFile = ref false; val realDataRead = ref false; val lastWasEol = ref true; (* Each character typed is fed into the compiler but leading blank lines result in the prompt remaining as firstPrompt until significant characters are typed. *) fun readin () : char option = let val setPrompt : unit = if !lastWasEol (* Start of line *) then if !realDataRead then printOut (if isDebug then "debug " ^ !prompt2 else !prompt2) else printOut (if isDebug then "debug " ^ !prompt1 else !prompt1) else (); in case TextIO.input1 TextIO.stdIn of NONE => (endOfFile := true; NONE) | SOME #"\n" => ( lastWasEol := true; SOME #"\n" ) | SOME ch => ( lastWasEol := false; if ch <> #" " then realDataRead := true else (); SOME ch ) end; (* readin *) (* Remove all buffered but unread input. *) fun flushInput () = case TextIO.canInput(TextIO.stdIn, 1) of SOME 1 => (TextIO.inputN(TextIO.stdIn, 1); flushInput()) | _ => (* No input waiting or we're at EOF. *) () fun readEvalPrint () : unit = let (* If we have executed a deeply recursive function the stack will have extended to be very large. It's better to reduce the stack if we can. This is RISKY. Each function checks on entry that the stack has sufficient space for everything it will allocate and assumes the stack will not shrink. It's unlikely that any of the functions here will have asked for very much but as a precaution we allow for an extra 8k words. *) fun shrink_stack (newsize : int) : unit = RunCall.run_call1 RuntimeCalls.POLY_SYS_shrink_stack newsize val () = if isDebug then () else shrink_stack 8000; in realDataRead := false; (* Compile and then run the code. *) let val code = polyCompiler(readin, [CPNameSpace nameSpace, CPOutStream printOut]) handle Fail s => ( printOut(s ^ "\n"); flushInput(); lastWasEol := true; raise Fail s ) in code () (* Report exceptions in running code. *) handle exn => ( printOut ("Exception- " ^ PolyML.makestringInNameSpace(exn, globalNameSpace) ^ " raised\n"); raise exn ) end end; (* readEvalPrint *) (* If we are debugging we may pass exceptions back to the debugged function. *) fun handleDebuggingException () = let val () = printOut "Pass exception to function being debugged (y/n)?"; val () = flushInput (); val response = case TextIO.input1 TextIO.stdIn of NONE => false | SOME #"y" => false | SOME #"n" => true | _ => handleDebuggingException() in flushInput(); response end fun handledLoop () : unit = ( (* Process a single top-level command. *) readEvalPrint() handle exn => if not isDebug orelse handleDebuggingException() then () else raise exn; (* Exit if we've seen end-of-file or we're in the debugger and we've run "continue". *) if !endOfFile orelse exitLoop() then () else handledLoop () ) in handledLoop () end (* Debug function. Calls to this function are inserted in the compiled code if the code is compiled with debugging on. *) and debugFunction(code, value, line, file, name, debugEnv) = let val stack: debugStackEntry list ref = getStack() fun printVal v = Bootstrap.printVal(v, !printDepth, globalNameSpace, TextIO.print) fun enterDebugger ()= let (* Remove any type-ahead. *) fun flushInput () = case TextIO.canInput(TextIO.stdIn, 1) of SOME 1 => (TextIO.inputN(TextIO.stdIn, 1); flushInput()) | _ => () val () = flushInput () val () = exitLoop := false; val () = debugLevel := 0; val () = breakNext := false; val () = case !stack of {lineNo, fileName, funName, ...} :: _ => printSourceLine(fileName, line, funName) | [] => () (* Shouldn't happen. *) val compositeNameSpace = (* Compose any debugEnv with the global environment *) let (* The debugging environment depends on the currently selected stack frame. *) fun debugEnv() = #space (List.nth(!stack, !debugLevel)) fun dolookup f s = case f (debugEnv()) s of NONE => f globalNameSpace s | v => v fun getAll f () = f (debugEnv()) () @ f globalNameSpace () in { lookupFix = dolookup #lookupFix, lookupSig = dolookup #lookupSig, lookupVal = dolookup #lookupVal, lookupType = dolookup #lookupType, lookupFunct = dolookup #lookupFunct, lookupStruct = dolookup #lookupStruct, enterFix = #enterFix globalNameSpace, enterSig = #enterSig globalNameSpace, enterVal = #enterVal globalNameSpace, enterType = #enterType globalNameSpace, enterFunct = #enterFunct globalNameSpace, enterStruct = #enterStruct globalNameSpace, allFix = getAll #allFix, allSig = getAll #allSig, allVal = getAll #allVal, allType = getAll #allType, allFunct = getAll #allFunct, allStruct = getAll #allStruct } end in topLevel true (compositeNameSpace, fn _ => ! exitLoop) end fun printSpaces () = let fun printSp 0 = () | printSp n = (print " "; printSp (n-1)) val depth = List.length(! stack) in if depth > 50 then printSp 50 else if depth = 0 then () else printSp (depth-1) end in case code of 1 => (* Entry to function *) let (* Push this onto the stack. *) val newStackEntry: debugStackEntry = { lineNo = line, funName = name, fileName = file, space = debugEnv, arguments = value} in stack := newStackEntry :: !stack; if ! tracing then (printSpaces(); print name; print " "; printVal value; print "\n") else (); (* We don't actually break here because at this stage we don't have any variables declared. *) if checkLineBreak (name, line) orelse checkFnBreak false name then breakNext := true else () end | 2 => (* Return from function. *) let val (args, stackTail) = case !stack of [] => (value, []) (* Use the passed in value for the arg. *) | {arguments, ...} ::tl => (arguments, tl) in if ! tracing then (printSpaces(); print name; print " "; printVal args; print " = "; printVal value; print "\n") else (); (* Pop the stack. *) stack := stackTail end | 3 => (* Function raised an exception. *) let val (args, stackTail) = case !stack of [] => (value, []) (* Use the passed in value for the arg. *) | {arguments, ...} ::tl => (arguments, tl) in if ! tracing then (printSpaces(); print name; print " "; printVal args; print " raised "; printVal value; print "\n") else (); (* Pop the stack. *) stack := (case !stack of [] => [] | _::tl => tl) end | 4 => (* Change of line within a function *) let val (args, stackTail) = (* If this is top-level code the stack may be empty. *) case !stack of [] => (value, []) (* Use the passed in value for the arg. *) | {arguments, ...} ::tl => (arguments, tl); (* Update the entry but include the original arguments. *) val newStackEntry: debugStackEntry = { lineNo = line, funName = name, fileName = file, space = debugEnv, arguments = args} in (* Update the stack. If this is top-level code the stack may be empty. *) stack := newStackEntry :: stackTail; (* We need to enter the debugger if we are single stepping or we have a break at this line or we've just entered a function with a break point. *) if (!stepDebug andalso (!stepDepth < 0 orelse List.length(!stack) <= !stepDepth)) orelse checkLineBreak (name, line) orelse ! breakNext then enterDebugger () else () end | _ => () end (* Normal, non-debugging top-level loop. *) fun shell () = topLevel false (globalNameSpace, fn _ => false) end val bindName = ref "ml_bind"; val archSuffix = "." ^ String.map Char.toLower (PolyML.architecture()) (* The architecture-specific suffixes take precedence. *) val suffixes = ref [archSuffix, "",archSuffix^".ML", ".ML", archSuffix^".sml", ".sml"]; (* isDir raises an exception if the file does not exist so this is an easy way to test for the file. *) fun fileDirExists (name : string) : bool = (OS.FileSys.isDir name; true) handle OS.SysErr _ => false fun findFileTuple (directory, object) [] = NONE | findFileTuple (directory, object) (suffix :: suffixes) = let val fileName = object ^ suffix in if fileDirExists (OS.Path.joinDirFile{dir=directory, file = fileName}) then SOME (directory, fileName) else findFileTuple (directory, object) suffixes end; (*****************************************************************************) (* "use": compile from a file. *) (*****************************************************************************) fun use originalName = let (* use "f" first tries to open "f" but if that fails it tries "f.ML", "f.sml" etc. *) fun trySuffixes [] = (* Not found - attempt to open the original and pass back the exception. *) (TextIO.openIn originalName, originalName) | trySuffixes (s::l) = (TextIO.openIn (originalName ^ s), originalName ^ s) handle IO.Io _ => trySuffixes l (* First in list is the name with no suffix. *) val (inStream, fileName) = trySuffixes("" :: ! suffixes) val lineNo = ref 1; fun getChar () : char option = case TextIO.input1 inStream of eoln as SOME #"\n" => ( lineNo := !lineNo + 1; eoln ) | c => c in while not (TextIO.endOfStream inStream) do let val code = polyCompiler(getChar, [CPFileName fileName, CPLineNo(fn () => !lineNo)]) handle exn => (TextIO.closeIn inStream; raise exn) in code() handle exn => ( (* Report exceptions in running code. *) TextIO.print ("Exception- " ^ PolyML.makestringInNameSpace(exn, globalNameSpace) ^ " raised\n"); TextIO.closeIn inStream; raise exn ) end; (* Normal termination: close the stream. *) TextIO.closeIn inStream end (* use *) fun maxTime (x : Time.time, y : Time.time) : Time.time = if x < y then y else x; exception ObjNotFile; type 'a tag = 'a Universal.tag; fun splitFilename (name: string) : string * string = let val {dir, file } = OS.Path.splitDirFile name in (dir, file) end (* Make *) (* There are three possible states - The object may have been checked, it may be currently being compiled, or it may not have been processed yet. *) datatype compileState = NotProcessed | Searching | Checked; fun longName (directory, file) = OS.Path.joinDirFile{dir=directory, file = file} fun fileReadable (fileTuple as (directory, object)) = (* Use OS.FileSys.isDir just to test if the file/directory exists. *) if (OS.FileSys.isDir (longName fileTuple); false) handle _ => true then false else let (* Check that the object is present in the directory with the name given and not a case-insensitive version of it. This avoids problems with "make" attempting to recursively make Array etc because they contain signatures ARRAY. *) open OS.FileSys val d = openDir (if directory = "" then "." else directory) fun searchDir () = case readDir d of NONE => false | SOME f => f = object orelse searchDir () val present = searchDir() in closeDir d; present end fun findFileTuple (directory, object) [] = NONE | findFileTuple (directory, object) (suffix :: suffixes) = let val fileName = object ^ suffix val fileTuple = (directory, fileName) in if fileReadable fileTuple then SOME fileTuple else findFileTuple (directory, object) suffixes end; fun filePresent (directory : string, object : string) = findFileTuple (directory, object) (!suffixes) (* See if the corresponding file is there and if it is a directory. *) fun testForDirectory (name: string) : bool = OS.FileSys.isDir name handle _ => false (* No such file. *) (* Time stamps. *) type timeStamp = Time.time; val firstTimeStamp : timeStamp = Time.zeroTime; (* Get the current time. *) val newTimeStamp : unit -> timeStamp = Time.now (* Get the date of a file. *) val fileTimeStamp : string -> timeStamp = OS.FileSys.modTime (* String representation - includes trailing "\n"! *) fun stringOfTimeStamp (t : timeStamp) : string = Date.toString(Date.fromTimeLocal t) ^ "\n" local open Universal in val timeStampTagMethods : timeStamp tag = tag (); val dependenciesTagMethods : string list tag = tag (); end; fun lastMade (objectName : string) : timeStamp = getOpt(UniversalArray.sub(globalTable, timeStampTagMethods, objectName), firstTimeStamp); (* Main make function *) fun make (targetName: string) : unit = let (* This serves two purposes. It provides a list of objects which have been re-made to prevent them being made more than once, and it also prevents circular dependencies from causing infinite loops (e.g. let x = f(x)) *) local open HashArray; val htab : compileState hash = hash 10; in fun lookupStatus (name: string) : compileState = getOpt(sub (htab, name), NotProcessed); fun setStatus (name: string, cs: compileState) : unit = update (htab, name, cs) end; (* Remove leading directory names to get the name of the object itself. e.g. "../compiler/parsetree/gencode" yields simply "gencode". *) val (dirName,objectName) = splitFilename targetName; (* Looks to see if the file is in the current directory. If it is and the file is newer than the corresponding object then it must be remade. If it is a directory then we attempt to remake the directory by compiling the "bind" file. This will only actually be executed if it involves some identifier which is newer than the result object. *) fun remakeObj (objName: string) (findDirectory: string -> string) = let (* Find a directory that contains this object. An exception will be raised if it is not there. *) val directory = findDirectory objName; val fullName = if directory = "" (* Work around for bug. *) then objName else OS.Path.joinDirFile{dir=directory, file=objName}; val objIsDir = testForDirectory fullName; val here = fullName; (* Look to see if the file exists, possibly with an extension, and get the extended version. *) val fileTuple = let (* If the object is a directory the source is in the bind file. *) val (dir : string, file : string) = if objIsDir then (here, !bindName) else (directory, objName); in case filePresent (dir, file) of SOME res' => res' | NONE => raise Fail ("No such file or directory ("^file^","^dir^")") end ; val fileName = longName fileTuple; val newFindDirectory : string -> string = if objIsDir then let (* Look in this directory then in the ones above. *) fun findDirectoryHere (name: string) : string = case filePresent (here, name) of NONE => findDirectory name (* not in this directory *) | _ => here; in findDirectoryHere end else findDirectory; (* Compiles a file. *) fun remakeCurrentObj () = let val () = print ("Making " ^ objName ^ "\n"); local (* Keep a list of the dependencies. *) val deps : bool HashArray.hash = HashArray.hash 10; fun addDep name = if getOpt(HashArray.sub (deps, name), true) then HashArray.update(deps, name, true) else (); (* Called by the compiler to look-up a global identifier. *) fun lookupMakeEnv globalLook (name: string) : 'a option = let (* Have we re-declared it ? *) val res = lookupStatus name; in case res of NotProcessed => ( (* Compile the dependency. *) remakeObj name newFindDirectory; (* Add this to the dependencies. *) addDep name ) | Searching => (* In the process of making it *) print("Circular dependency: " ^ name ^ " depends on itself\n") | Checked => addDep name; (* Add this to the dependencies. *) (* There was previously a comment about returning NONE here if we had a problem remaking a dependency. *) globalLook name end; (* lookupMakeEnv *) (* Enter the declared value in the table. Usually this will be the target we are making. Also set the state to "Checked". The state is set to checked when we finish making the object but setting it now suppresses messages about circular dependencies if we use the identifier within the file. *) fun enterMakeEnv (kind : string, enterGlobal) (name: string, v: 'a) : unit = ( (* Put in the value. *) enterGlobal (name, v); print ("Created " ^ kind ^ " " ^ name ^ "\n"); (* The name we're declaring may appear to be a dependency but isn't, so don't include it in the list. *) HashArray.update (deps, name, false); if name = objName then let (* Put in the dependencies i.e. those names set to true in the table. *) val depends = HashArray.fold (fn (s, v, l) => if v then s :: l else l) [] deps; (* Put in a time stamp for the new object. We need to make sure that it is no older than the newest object it depends on. In theory that should not be a problem but clocks on different machines can get out of step leading to objects made later having earlier time stamps. *) val newest = List.foldl (fn (s: string, t: timeStamp) => maxTime (lastMade s, t)) (fileTimeStamp fileName) depends; val timeStamp = maxTime(newest, newTimeStamp()); in setStatus (name, Checked); UniversalArray.update(globalTable, dependenciesTagMethods, name, depends); UniversalArray.update(globalTable, timeStampTagMethods, name, timeStamp) end else () ) (* enterMakeEnv *); in val makeEnv = { lookupFix = #lookupFix globalNameSpace, lookupVal = #lookupVal globalNameSpace, lookupType = #lookupType globalNameSpace, lookupSig = lookupMakeEnv (#lookupSig globalNameSpace), lookupStruct = lookupMakeEnv (#lookupStruct globalNameSpace), lookupFunct = lookupMakeEnv (#lookupFunct globalNameSpace), enterFix = #enterFix globalNameSpace, enterVal = #enterVal globalNameSpace, enterType = #enterType globalNameSpace, enterStruct = enterMakeEnv ("signature", #enterStruct globalNameSpace), enterSig = enterMakeEnv ("signature", #enterSig globalNameSpace), enterFunct = enterMakeEnv ("signature", #enterFunct globalNameSpace), allFix = #allFix globalNameSpace, allVal = #allVal globalNameSpace, allType = #allType globalNameSpace, allSig = #allSig globalNameSpace, allStruct = #allStruct globalNameSpace, allFunct = #allFunct globalNameSpace }; end; (* local for makeEnv *) val inputFile = OS.Path.joinDirFile{dir= #1 fileTuple, file= #2 fileTuple} val inStream = TextIO.openIn inputFile; val () = let (* scope of exception handler to close inStream *) val endOfStream = ref false; val lineNo = ref 1; fun getChar () : char option = case TextIO.input1 inStream of NONE => (endOfStream := true; NONE) (* End of file *) | eoln as SOME #"\n" => (lineNo := !lineNo + 1; eoln) | c => c in while not (!endOfStream) do let val code = polyCompiler(getChar, [CPNameSpace makeEnv, CPFileName fileName, CPLineNo(fn () => !lineNo)]) in code () handle exn as Fail _ => raise exn | exn => ( print ("Exception- " ^ PolyML.makestringInNameSpace(exn, globalNameSpace) ^ " raised\n"); raise exn ) end end (* body of scope of inStream *) handle exn => (* close inStream if an error occurs *) ( TextIO.closeIn inStream; raise exn ) in (* remake normal termination *) TextIO.closeIn inStream end (* remakeCurrentObj *) in (* body of remakeObj *) setStatus (objName, Searching); (* If the file is newer than the object then we definitely must remake it. Otherwise we look at the dependency list and check those. If the result of that check is that one of the dependencies is newer than the object (probably because it has just been recompiled) we have to recompile the file. Compiling a file also checks the dependencies and recompiles them, generating a new dependency list. That is why we don't check the dependency list if the object is out of date with the file. Also if the file has been changed it may no longer depend on the things it used to depend on. *) let val objDate = lastMade objName fun maybeRemake (s:string) : unit = case lookupStatus s of NotProcessed => (* see if it's a file. *) (* Compile the dependency. *) remakeObj s newFindDirectory | Searching => (* In the process of making it *) print ("Circular dependency: " ^ s ^ " depends on itself\n") | Checked => () (* do nothing *) (* Process each entry and return true if any is newer than the target. *) val processChildren = List.foldl (fn (child:string, parentNeedsMake:bool) => ( maybeRemake child; (* Find its date and see if it is newer. *) parentNeedsMake orelse lastMade child > objDate ) ) false; in if objDate < fileTimeStamp fileName orelse ( (* Get the dependency list. There may not be one if this object has not been compiled with "make". *) case UniversalArray.sub(globalTable, dependenciesTagMethods, objName) of SOME d => processChildren d | NONE => true (* No dependency list - must use "make" on it. *) ) then remakeCurrentObj () else () end; (* Mark it as having been checked. *) setStatus (objName, Checked) end (* body of remakeObj *) (* If the object is not a file mark it is checked. It may be a pervasive or it may be missing. In either case mark it as checked to save searching for it again. *) handle ObjNotFile => setStatus (objName, Checked) | exn => (* Compilation (or execution) error. *) ( (* Mark as checked to prevent spurious messages. *) setStatus (objName, Checked); raise exn ) in (* body of make *) (* Check that the target exists. *) case filePresent (dirName, objectName) of NONE => let val dir = if dirName = "" then "" else " (directory "^dirName^")"; val s = "File "^objectName^" not found" ^ dir in print (s ^ "\n"); raise Fail s end | _ => let val targetIsDir = testForDirectory targetName; (* If the target we are making is a directory all the objects must be in the directory. If it is a file we allow references to other objects in the same directory. Objects not found must be pervasive. *) fun findDirectory (s: string) : string = if (not targetIsDir orelse s = objectName) andalso filePresent(dirName, s) <> NONE then dirName else raise ObjNotFile; in remakeObj objectName findDirectory handle exn => ( print (targetName ^ " was not declared\n"); raise exn ) end end (* make *) (* This is the root function to run the Poly/ML top level. *) fun rootShell () = let val argList = CommandLine.arguments(); fun rtsRelease() = RunCall.run_call2 RuntimeCalls.POLY_SYS_poly_specific (10, ()) fun rtsCopyright() = RunCall.run_call2 RuntimeCalls.POLY_SYS_poly_specific (11, ()) fun rtsHelp() = RunCall.run_call2 RuntimeCalls.POLY_SYS_poly_specific (19, ()) in if List.exists(fn s => s = "-v") argList then (* -v option : Print version information and exit *) print (String.concat ["Poly/ML ", Bootstrap.compilerVersion, " RTS version: ", rtsRelease(), "\n"]) else if List.exists(fn s => s = "--help") argList then (* --help option: Print argument information and exit. *) ( print (String.concat ["Poly/ML ", Bootstrap.compilerVersion, "\n"]); print "Compiler arguments:\n"; print "\n"; print "-v Print the version of Poly/ML and exit\n"; print "--help Print this message and exit\n"; print "-q Suppress the start-up message\n"; print "\nRun time system arguments:\n"; print (rtsHelp()) ) else (* Enter Poly/ML. *) let open Signal; val () = if List.exists(fn s => s = "-q") (CommandLine.arguments()) then () else print (String.concat ["Poly/ML ", Bootstrap.compilerVersion, "\n"]); (* Set up a handler for SIGINT if that is currently set to SIG_DFL. If a handler has been set up by an initialisation function don't replace it. *) val () = case signal(2, SIG_IGN) of SIG_IGN => () | SIG_DFL => (signal(2, SIG_HANDLE(fn _ => Thread.Thread.broadcastInterrupt())); ()) | oldHandle => (signal(2, oldHandle); ()) in shell(); OS.Process.exit OS.Process.success (* Run any "atExit" functions and then quit. *) end end; in structure PolyML = struct open PolyML (* We must not have a signature on the result otherwise print and makestring will be given polymorphic types and will only produce "?" *) val globalNameSpace = globalNameSpace val use = use and make = make val suffixes = suffixes val compiler = polyCompiler (* Main root function: run the main loop. *) val rootFunction: unit->unit = rootShell structure Compiler = struct datatype compilerParameters = datatype compilerParameters val compilerVersion = Bootstrap.compilerVersion val forgetSignature: string -> unit = forgetSig and forgetStructure: string -> unit = forgetStruct and forgetFunctor: string -> unit = forgetFunct and forgetValue: string -> unit = forgetVal and forgetType: string -> unit = forgetType and forgetFixity: string -> unit = forgetFix fun signatureNames (): string list = #1(ListPair.unzip (#allSig globalNameSpace ())) and structureNames (): string list = #1(ListPair.unzip (#allStruct globalNameSpace ())) and functorNames (): string list = #1(ListPair.unzip (#allFunct globalNameSpace ())) and valueNames (): string list = #1(ListPair.unzip (#allVal globalNameSpace ())) and typeNames (): string list = #1(ListPair.unzip (#allType globalNameSpace ())) and fixityNames (): string list = #1(ListPair.unzip (#allFix globalNameSpace ())) val prompt1 = prompt1 and prompt2 = prompt2 and profiling = profiling and timing = timing and printDepth = printDepth and errorDepth = errorDepth and lineLength = lineLength val assemblyCode = assemblyCode and codetree = codetree and codetreeAfterOpt = codetreeAfterOpt and pstackTrace = pstackTrace and parsetree = parsetree val debug = debug val inlineFunctors = inlineFunctors val maxInlineSize = maxInlineSize val ml90 = ml90 val printInAlphabeticalOrder = printInAlphabeticalOrder val printTypesWithStructureName = printTypesWithStructureName val traceCompiler = traceCompiler end and Debug = struct (* singleStep causes the debugger to be entered on the next call. stepOver enters the debugger on the next call when the stack is no larger than it is at present. stepOut enters the debugger on the next call when the stack is smaller than it is at present. *) fun step () = (stepDebug := true; stepDepth := ~1; exitLoop := true) and stepOver() = (stepDebug := true; stepDepth := List.length(!(getStack())); exitLoop := true) and stepOut() = (stepDebug := true; stepDepth := List.length(!(getStack())) - 1; exitLoop := true) and continue () = (stepDebug := false; stepDepth := ~1; exitLoop := true) and trace b = tracing := b fun breakAt (file, line) = if checkLineBreak(file, line) then () (* Already there. *) else lineBreakPoints := (file, line) :: ! lineBreakPoints fun clearAt (file, line) = let fun findBreak [] = (TextIO.print "No such breakpoint.\n"; []) | findBreak ((f, l) :: rest) = if l = line andalso f = file then rest else (f, l) :: findBreak rest in lineBreakPoints := findBreak (! lineBreakPoints) end fun breakIn name = if checkFnBreak true name then () (* Already there. *) else fnBreakPoints := name :: ! fnBreakPoints fun clearIn name = let fun findBreak [] = (TextIO.print "No such breakpoint.\n"; []) | findBreak (n :: rest) = if name = n then rest else n :: findBreak rest in fnBreakPoints := findBreak (! fnBreakPoints) end (* Stack traversal. *) fun up () = let val stack = getStack() in if !debugLevel < List.length (!stack) -1 then let val _ = debugLevel := !debugLevel + 1; val {funName, lineNo, fileName, ...} = List.nth(!stack, !debugLevel) in printSourceLine(fileName, lineNo, funName) end else TextIO.print "Top of stack.\n" end and down () = let val stack = getStack() in if !debugLevel = 0 then TextIO.print "Bottom of stack.\n" else let val () = debugLevel := !debugLevel - 1; val {funName, lineNo, fileName, ...} = List.nth(!stack, !debugLevel) in printSourceLine(fileName, lineNo, funName) end end (* Just print the functions without any other context. *) fun stack () : unit = let fun printTrace {funName, lineNo, fileName, ...} = ( if fileName = "" then () else TextIO.print(concat[fileName, " "]); if lineNo = 0 then () else TextIO.print(concat[" line:", Int.toString lineNo, " "]); TextIO.print(concat["function:", funName, "\n"]) ) in List.app printTrace (! (getStack())) end local fun printVal v = Bootstrap.displayVal(v, !printDepth, globalNameSpace, ! printTypesWithStructureName, TextIO.print) fun printStack stack = List.app (fn (_,v) => printVal v) (#allVal (#space stack) ()) in (* Print all variables at the current level. *) fun variables() = printStack (List.nth(!(getStack()), !debugLevel)) (* Print all the levels. *) and dump() = let fun printLevel (stack as {funName, ...}) = ( TextIO.print(concat["Function ", funName, ":"]); printStack stack; TextIO.print "\n" ) in List.app printLevel (!(getStack())) end end end (* Original print_depth etc functions. *) fun profiling i = Compiler.profiling := i and timing b = Compiler.timing := b and print_depth i = Compiler.printDepth := i and error_depth i = Compiler.errorDepth := i and line_length i = Compiler.lineLength := i end end (* PolyML. *); val use = PolyML.use; (* Copy everything out of the original name space. *) (* Do this AFTER we've finished compiling PolyML and after adding "use". *) val () = List.app (#enterVal PolyML.globalNameSpace) (#allVal Bootstrap.globalSpace ()) and () = List.app (#enterFix PolyML.globalNameSpace) (#allFix Bootstrap.globalSpace ()) and () = List.app (#enterSig PolyML.globalNameSpace) (#allSig Bootstrap.globalSpace ()) and () = List.app (#enterType PolyML.globalNameSpace) (#allType Bootstrap.globalSpace ()) and () = List.app (#enterFunct PolyML.globalNameSpace) (#allFunct Bootstrap.globalSpace ()) and () = List.app (#enterStruct PolyML.globalNameSpace) (#allStruct Bootstrap.globalSpace ()) (* We don't want Bootstrap copied over. *) val () = PolyML.Compiler.forgetStructure "Bootstrap"; polyml.5.2.1/basis/General.sml0000644000175000017500000001066011003076441015166 0ustar daviddavid(* Title: Standard Basis Library: General Structure Author: David Matthews Copyright David Matthews 1999 This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* G&R 2004 status: checked, no change. *) signature GENERAL = sig eqtype unit type exn exception Bind exception Chr exception Div exception Domain exception Fail of string exception Match exception Overflow exception Size exception Span exception Subscript val exnName : exn -> string val exnMessage : exn -> string datatype order = LESS | EQUAL | GREATER val ! : 'a ref -> 'a val := : ('a ref * 'a) -> unit val o : (('b -> 'c) * ('a -> 'b)) -> 'a -> 'c val before : ('a * unit) -> 'a val ignore : 'a -> unit end; (* We declare the values in the top-level environment and construct the structure afterwards rather than opening the structure. The reason for this is that we would prefer that types unit and exn did not capture the General structure name. *) local open RuntimeCalls (* for POLY_SYS and EXC numbers *) val System_loadw: exn*int->string = RunCall.run_call2 POLY_SYS_load_word in local structure Bind = RunCall.Run_exception0( val ex_iden = EXC_Bind ) in exception Bind = Bind.ex end local structure Div = RunCall.Run_exception0( val ex_iden = EXC_divide ) in exception Div = Div.ex end local structure Match = RunCall.Run_exception0( val ex_iden = EXC_Match ) in exception Match = Match.ex end local structure Overflow = RunCall.Run_exception0( val ex_iden = EXC_overflow ) in exception Overflow = Overflow.ex end local structure Subscript = RunCall.Run_exception0( val ex_iden = EXC_subscript ) in exception Subscript = Subscript.ex end local structure Size = RunCall.Run_exception0( val ex_iden = EXC_size ) in exception Size = Size.ex end exception Domain and Span and Chr (* Exception packets. The first word is the code, a unique id; the second is the exception name and the third is the exception argument. *) fun exnName (ex: exn) = System_loadw(ex, 1) (* exnMessage is contained in the Bootstrap.ExnMessage structure and is actually just the same as PolyML.makeString. However we have to make sure that we don't capture the namespace that is being used to compile the code at this point. Since exception packets don't contain any description of the type of the exception argument if we want to be able to print it we have to find the type by using the unique id. We can search all the declared exceptions and all the exceptions in structures to find the unique id and if we find it we can use the type information there. That requires a name space and the best choice of name space is the one used to compile the code that contains the CALL to exnMessage, not the one used to declare it here. *) open Bootstrap.ExnMessage (* fun exnMessage (ex: exn) = PolyML.makestring ex *) datatype order = LESS | EQUAL | GREATER fun op before (a, b) = a fun ignore a = () structure General (*: GENERAL *) (* Don't use a signature here. *) = struct type unit = unit (* This has to be primitive because its value is given by () *) type exn = exn exception Bind = Bind and Div = Div and Match = Match and Chr = Chr exception Overflow = Overflow and Domain= Domain and Fail = Fail exception Span = Span and Subscript = Subscript and Size = Size val exnName = exnName and op := = op := and ! = ! and op o = op o and op before = op before and ignore = ignore open Bootstrap.ExnMessage datatype order = datatype order end end (* Although these are available unqualified we always use them qualified within this library so that dependencies are maintained. *) polyml.5.2.1/basis/GenericSock.sml0000644000175000017500000000377210313043324016010 0ustar daviddavid(* Title: Standard Basis Library: Generic socket structure and signature. Author: David Matthews Copyright David Matthews 2000 This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* G&R 2004 status: checked, no change. *) signature GENERIC_SOCK = sig val socket : Socket.AF.addr_family * Socket.SOCK.sock_type -> ('af, 'sock_type) Socket.sock val socketPair : Socket.AF.addr_family * Socket.SOCK.sock_type -> ('af, 'sock_type) Socket.sock * ('af, 'sock_type) Socket.sock val socket' : Socket.AF.addr_family * Socket.SOCK.sock_type * int -> ('af, 'sock_type) Socket.sock val socketPair' : Socket.AF.addr_family * Socket.SOCK.sock_type * int -> ('af, 'sock_type) Socket.sock * ('af, 'sock_type) Socket.sock end; structure GenericSock : GENERIC_SOCK = struct fun socket' (af, st, p: int) = RunCall.run_call2 RuntimeCalls.POLY_SYS_network(14, (af, st, p)) fun socketPair' (af, st, p: int) = RunCall.run_call2 RuntimeCalls.POLY_SYS_network(55, (af, st, p)) (* We assume that the default protocol is always zero. *) fun socket(af, st) = socket'(af, st, 0) fun socketPair(af, st) = socketPair'(af, st, 0) end; polyml.5.2.1/basis/HashArray.ML0000644000175000017500000001367010766427710015232 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited Modified David C.J. Matthews 2008 This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* Hash table type - Creates a hash table of specified initial size. This version expands the hash table and rehashes when the table gets too full *) structure HashArray: (*****************************************************************************) (* HashArray export signature *) (*****************************************************************************) sig type 'a hash val hash: int -> 'a hash val update: 'a hash * string * 'a -> unit val sub: 'a hash * string -> 'a option val fold: (string * 'a * 'b -> 'b) -> 'b -> 'a hash -> 'b end = (*****************************************************************************) (* HashArray structure body *) (*****************************************************************************) struct local infix 8 sub (* Each entry in the table is a pair containing the key and the value. *) (* make namedOption local, because that means the new compiler can optimise its representation. SPF 11/5/95 *) datatype 'a namedOption = None | Some of (string * 'a); in fun hashValue (N : int) (str: string) : int = Word.toInt( Word.mod( CharVector.foldr (fn (ch: char, n: Word.word) => Word.fromInt(Char.ord ch) + 0w7*n) 0w0 str, (Word.fromInt N))) (* The above function is the quickest and simplest way of computing the hash value now that we have Word.* and Word.mod compiled inline. They aren't implemented in all code-generators so it could be worth retaining the old code. DCJM 26/2/01. *) datatype 'a hash = Hash of { used: int ref, entries: 'a namedOption array ref, hash: (string -> int) ref } fun hash (n : int) = Hash { used = ref 0, entries = ref (Array.array (n, None)), hash = ref (hashValue n) } fun op sub (Hash {entries = ref A, hash = ref hashN, ...}, name : string) : 'a option = (* Searches the table starting from the position given by the hash value. *) let open Array (* Loops until it either finds an empty entry - in which case it returns NONE, or it finds the name it is looking for. There will always be several empty entries because we rehash if it gets too full. *) fun find i = let val h = A sub i; in case h of None => NONE | Some (n,v) => if name = n then SOME v else find ((if i = 0 then length A else i) - 1) end in find (hashN name) end fun update (Hash {entries, used, hash}, name : string, value : '_a) = let open Array (* Enters the value at the first free entry at or after the one pointed to by the hash value. *) fun enterTab (A : '_a namedOption array, i : int, None : '_a namedOption) = () | enterTab (A, i, entry as Some (name,_)) = let fun enter (i : int) : unit = (* Loops until it either finds an empty entry - in which case it enters the value in there, or it finds the string. *) case (A sub i) of None => update (A, i, entry) | Some (n : string, _) => if n = name then update (A, i, entry) (* Same name as previous - overwrite it *) else enter ((if i = 0 then length A else i) - 1); in enter i end val A : '_a namedOption array = !entries; val N : int = length A; val hashN : string -> int = !hash val U : unit = enterTab (A, hashN name, Some (name, value)); val U : unit = used := !used + 1; in (* Do we need to rehash ? *) if !used * 5 > N * 4 (* More than 80% full so rehash *) then let val newN : int = N * 2; (* Double the size *) val newA : '_a namedOption array = array (newN, None); val hashNewN : string -> int = hashValue newN; fun copyOver (index : int) : unit = if index < 0 then () else ( case (A sub index) of None => () | entry as Some (name : string,_) => enterTab (newA, hashNewN name, entry); copyOver (index - 1) ); val U : unit = entries := newA; val U : unit = hash := hashNewN; in copyOver (length A - 1) end else () end; fun fold f init (Hash { entries = ref e, ...}) = let val length = Array.length e fun foldF i acc = if i >= length then acc else foldF (i+1) (case Array.sub(e, i) of None => acc | Some (name,alpha) => f (name,alpha,acc) ) in foldF 0 init end; end (* local *); end (* HashArray *); polyml.5.2.1/basis/IEEEReal.sml0000644000175000017500000001466110313043324015126 0ustar daviddavid(* Title: Standard Basis Library: IEEEReal Structure. Author: David Matthews Copyright David Matthews 2000, 2005 This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* G&R 2004 status: updated. *) structure IEEEReal: IEEE_REAL = struct exception Unordered datatype real_order = LESS | EQUAL | GREATER | UNORDERED datatype float_class = NAN | INF | ZERO | NORMAL | SUBNORMAL datatype rounding_mode = TO_NEAREST | TO_NEGINF | TO_POSINF | TO_ZERO (* This is used for newly added functions in the Standard Basis. *) fun callReal (code: int) args = RunCall.run_call2 RuntimeCalls.POLY_SYS_Real_Dispatch (code,args); fun setRoundingMode (r: rounding_mode) : unit = let (* Although the datatype values are almost certainly integers it's much safer to map them to known values here. *) val rv = case r of TO_NEAREST => 0 | TO_NEGINF => 1 | TO_POSINF => 2 | TO_ZERO => 3 in callReal 9 rv end; fun getRoundingMode () = case callReal 10 () of 0 => TO_NEAREST | 1 => TO_NEGINF | 2 => TO_POSINF | _ => TO_ZERO type decimal_approx = { class : float_class, sign : bool, digits : int list, exp : int } local fun dodigits [] = "" | dodigits (a::b) = Int.toString a ^ dodigits b in fun toString {class, sign=true, digits, exp} = (* Sign bit set *) "~" ^ toString {class=class, sign=false, digits=digits, exp=exp} | toString {class=NAN, digits, ...} = "nan(" ^ dodigits digits ^")" | toString {class=INF, ...} = "inf" | toString {class=ZERO, ...} = "0.0" | toString {digits, exp, ...} = (* NORMAL or SUBNORMAL *) "0." ^ dodigits digits ^ (if exp = 0 then "" else "E"^(Int.toString exp)) end fun 'a scan (getc: (char, 'a) StringCvt.reader) (src: 'a) : (decimal_approx *'a) option = let fun checkString (src, match: substring) = (* Check the string matches and return the rest of the input if it does. *) case Substring.getc match of NONE => (* Finished *) SOME src (* Return rest *) | SOME (ch, rest) => (case getc src of NONE => NONE | SOME (ch', src') => if ch = Char.toUpper ch' then checkString(src', rest) else NONE ) (* Return a list of digits. *) fun getdigits inp src = case getc src of NONE => (List.rev inp, src) | SOME(ch, src') => if ch >= #"0" andalso ch <= #"9" then getdigits ((Char.ord ch - Char.ord #"0") :: inp) src' else (List.rev inp, src) (* Return the signed exponent. If this doesn't represent a valid integer return NONE since we shouldn't take off the E. Int.scan accepts and removes leading space but we don't allow space here so return NONE if we find any. *) fun getExponent src = case getc src of NONE => NONE | SOME(ch, src') => if Char.isSpace ch then NONE else Int.scan StringCvt.DEC getc src fun readNumber sign (src: 'a): (decimal_approx *'a) option = case getc src of NONE => NONE | SOME (ch, _) => if ch >= #"0" andalso ch <= #"9" orelse ch = #"." then (* Digits or decimal. *) let (* Get the digits before the decimal point (if any) *) val (intPart, src2) = getdigits [] src (* Get the digits after the decimal point. If there is a decimal point with no digits after it we don't swallow the dp. *) val (decimals, src3) = case getc src2 of SOME (#".", src3a) => ( case getdigits [] src3a of ([], _) => ([], src2) | (digs, s) => (digs, s) ) | _=> ([], src2) (* Get the exponent, returning zero if it doesn't match. *) val (exponent, src4) = case getc src3 of NONE => (0, src3) | SOME (ch, src4a) => if ch = #"e" orelse ch = #"E" then ( case getExponent src4a of NONE => (0, src3) | SOME x => x ) else (0, src3) (* Trim leading zeros from the part before the decimal and trailing zeros from the part after. *) fun trimLeadingZeros [] = [] | trimLeadingZeros (0 :: l) = trimLeadingZeros l | trimLeadingZeros l = l val trimTrailingZeros = List.rev o trimLeadingZeros o List.rev val leading = trimLeadingZeros intPart val trailing = trimTrailingZeros decimals in (* If both the leading and trailing parts are empty the number is zero, except that if there were no digits at all we have a malformed number. *) case (intPart, decimals, leading, trailing) of ([], [], _, _) => NONE | (_, _, [], []) => SOME ({class=ZERO, sign=sign, digits=[], exp=0}, src4) | _ => SOME ({class=NORMAL, sign=sign, digits=List.@(leading, trailing), exp=exponent + List.length leading}, src4) end else ( (* Could be INFINITY, INF or NAN. Check INFINITY before INF. *) case checkString (src, Substring.full "INFINITY") of SOME src' => SOME ({class=INF, sign=sign, digits=[], exp=0}, src') | NONE => ( case checkString (src, Substring.full "INF") of SOME src' => SOME ({class=INF, sign=sign, digits=[], exp=0}, src') | NONE => ( case checkString (src, Substring.full "NAN") of SOME src' => SOME ({class=NAN, sign=sign, digits=[], exp=0}, src') | NONE => NONE ) ) ) in case getc src of NONE => NONE | SOME(ch, src') => if Char.isSpace ch (* Skip white space. *) then scan getc src' (* Recurse *) else if ch = #"+" then readNumber false src' (* Skip it *) else if ch = #"-" orelse ch = #"~" then readNumber true src' (* Skip it and ignore sign *) else readNumber false src end (* scan *) fun fromString (s: string): decimal_approx option = StringCvt.scanString scan s end; polyml.5.2.1/basis/IEEE_REAL.sml0000644000175000017500000000302110313043324015111 0ustar daviddavid(* Title: Standard Basis Library: IEEE_REAL Signature. Author: David Matthews Copyright David Matthews 2000, 2005 This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* G&R 2004 status: updated. *) signature IEEE_REAL = sig exception Unordered datatype real_order = LESS | EQUAL | GREATER | UNORDERED datatype float_class = NAN | INF | ZERO | NORMAL | SUBNORMAL datatype rounding_mode = TO_NEAREST | TO_NEGINF | TO_POSINF | TO_ZERO val setRoundingMode : rounding_mode -> unit val getRoundingMode : unit -> rounding_mode type decimal_approx = { class : float_class, sign : bool, digits : int list, exp : int } val toString : decimal_approx -> string val scan : (char, 'a) StringCvt.reader -> (decimal_approx, 'a) StringCvt.reader val fromString : string -> decimal_approx option end; polyml.5.2.1/basis/IMPERATIVE_IO.sml0000644000175000017500000000356610313043324015651 0ustar daviddavid(* Title: Standard Basis Library: Imperative IO Signature Copyright David C.J. Matthews 2000 This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* G&R 2004 status: checked, no change *) signature IMPERATIVE_IO = sig structure StreamIO : STREAM_IO type vector = StreamIO.vector type elem = StreamIO.elem type instream type outstream val input : instream -> vector val input1 : instream -> elem Option.option val inputN : instream * int -> vector val inputAll : instream -> vector val canInput : instream * int -> int Option.option val lookahead : instream -> elem Option.option val closeIn : instream -> unit val endOfStream : instream -> bool val output : outstream * vector -> unit val output1 : outstream * elem -> unit val flushOut : outstream -> unit val closeOut : outstream -> unit val mkInstream : StreamIO.instream -> instream val getInstream : instream -> StreamIO.instream val setInstream : instream * StreamIO.instream -> unit val mkOutstream : StreamIO.outstream -> outstream val getOutstream : outstream -> StreamIO.outstream val setOutstream : outstream * StreamIO.outstream -> unit val getPosOut : outstream -> StreamIO.out_pos val setPosOut : outstream * StreamIO.out_pos -> unit end; polyml.5.2.1/basis/INTEGER.sml0000644000175000017500000000370210313043324014702 0ustar daviddavid(* Title: Standard Basis Library: Integer signature Author: David Matthews Copyright David Matthews 1999 This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* G&R 2004 status: Minor change to type of "scan". *) signature INTEGER = sig eqtype int val toLarge : int -> LargeInt.int val fromLarge : LargeInt.int -> int val toInt : int -> Int.int val fromInt : Int.int -> int val precision : Int.int option val minInt : int option val maxInt : int option val ~ : int -> int val * : (int * int) -> int val div : (int * int) -> int val mod : (int * int) -> int val quot : (int * int) -> int val rem : (int * int) -> int val + : (int * int) -> int val - : (int * int) -> int val compare : (int * int) -> General.order val > : (int * int) -> bool val >= : (int * int) -> bool val < : (int * int) -> bool val <= : (int * int) -> bool val abs : int -> int val min : (int * int) -> int val max : (int * int) -> int val sign : int -> Int.int val sameSign : (int * int) -> bool val fmt : StringCvt.radix -> int -> string val toString : int -> string val fromString : string -> int option val scan : StringCvt.radix -> (char, 'a) StringCvt.reader -> (int, 'a) StringCvt.reader end; polyml.5.2.1/basis/INetSock.sml0000644000175000017500000000641210313043324015265 0ustar daviddavid(* Title: Standard Basis Library: Internet Sockets Author: David Matthews Copyright David Matthews 2000 This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* G&R 2004 status: Checked, no change. *) signature INET_SOCK = sig type inet type 'sock_type sock = (inet, 'sock_type) Socket.sock type 'mode stream_sock = 'mode Socket.stream sock type dgram_sock = Socket.dgram sock type sock_addr = inet Socket.sock_addr val inetAF : Socket.AF.addr_family val toAddr : NetHostDB.in_addr * int -> sock_addr val fromAddr : sock_addr -> NetHostDB.in_addr * int val any : int -> sock_addr structure UDP : sig val socket : unit -> dgram_sock val socket' : int -> dgram_sock end structure TCP : sig val socket : unit -> 'mode stream_sock val socket' : int -> 'mode stream_sock val getNODELAY : 'mode stream_sock -> bool val setNODELAY : 'mode stream_sock * bool -> unit end end; structure INetSock :> INET_SOCK = struct abstype inet = ABSTRACT with end; type 'sock_type sock = (inet, 'sock_type) Socket.sock type 'mode stream_sock = 'mode Socket.stream sock type dgram_sock = Socket.dgram sock type sock_addr = inet Socket.sock_addr val inetAF : Socket.AF.addr_family = case Socket.AF.fromString "INET" of NONE => raise OS.SysErr("Missing address family", NONE) | SOME s => s local val doCall = RunCall.run_call2 RuntimeCalls.POLY_SYS_network in fun toAddr(iaddr: NetHostDB.in_addr, port: int) : sock_addr = doCall(40, (port, iaddr)) end local val doCall1 = RunCall.run_call2 RuntimeCalls.POLY_SYS_network and doCall2 = RunCall.run_call2 RuntimeCalls.POLY_SYS_network in fun fromAddr (s: sock_addr) : NetHostDB.in_addr * int = if Socket.familyOfAddr s <> inetAF then raise Match else (doCall1(42, s), doCall2(41, s)) end local val doCall = RunCall.run_call2 RuntimeCalls.POLY_SYS_network val iAddrAny: NetHostDB.in_addr = doCall(13, ()) in fun any (p: int) : sock_addr = toAddr(iAddrAny, p) end local val doCall1 = RunCall.run_call2 RuntimeCalls.POLY_SYS_network val doCall2 = RunCall.run_call2 RuntimeCalls.POLY_SYS_network in structure UDP = struct fun socket () = GenericSock.socket(inetAF, Socket.SOCK.dgram) fun socket' p = GenericSock.socket'(inetAF, Socket.SOCK.dgram, p) end structure TCP = struct fun socket () = GenericSock.socket(inetAF, Socket.SOCK.stream) fun socket' p = GenericSock.socket'(inetAF, Socket.SOCK.stream, p) fun getNODELAY(s: 'mode stream_sock): bool = doCall1(16, RunCall.unsafeCast s) fun setNODELAY (s: 'mode stream_sock, b: bool): unit = doCall2(15, (RunCall.unsafeCast s, b)) end end end; polyml.5.2.1/basis/IO.sml0000644000175000017500000000275710313043324014125 0ustar daviddavid(* Title: Standard Basis Library: IO Structure and Signature Author: David Matthews Copyright David Matthews 2000, 2005 This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* G&R 2004 status: done. Removed TerminatedStream exception. *) signature IO = sig exception Io of {name : string, function : string, cause : exn} exception BlockingNotSupported exception NonblockingNotSupported exception RandomAccessNotSupported exception ClosedStream datatype buffer_mode = NO_BUF | LINE_BUF | BLOCK_BUF end; structure IO: IO = struct exception Io of {name : string, function : string, cause : exn} exception BlockingNotSupported exception NonblockingNotSupported exception RandomAccessNotSupported exception ClosedStream datatype buffer_mode = NO_BUF | LINE_BUF | BLOCK_BUF end; polyml.5.2.1/basis/ImperativeIO.sml0000644000175000017500000001204011062467441016151 0ustar daviddavid(* Title: Standard Basis Library: ImperativeIO functor Copyright David C.J. Matthews 2000 This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* G&R 2004 status: Done. Added where type constraints to result signature. *) functor ImperativeIO ( structure StreamIO : STREAM_IO structure Vector : MONO_VECTOR structure Array : MONO_ARRAY sharing type StreamIO.elem = Vector.elem = Array.elem sharing type StreamIO.vector = Vector.vector = Array.vector ) : IMPERATIVE_IO where type StreamIO.elem = StreamIO.elem where type StreamIO.vector = StreamIO.vector where type StreamIO.instream = StreamIO.instream where type StreamIO.outstream = StreamIO.outstream where type StreamIO.out_pos = StreamIO.out_pos where type StreamIO.reader = StreamIO.reader where type StreamIO.writer = StreamIO.writer where type StreamIO.pos = StreamIO.pos = struct structure StreamIO = StreamIO type vector = Vector.vector and elem = StreamIO.elem datatype instream = InStream of { (* An imperative input stream is a reference to a lazy functional stream. *) fStream: StreamIO.instream ref, lock: Thread.Mutex.mutex } and outstream = OutStream of { (* An imperative output stream is a reference to the underlying stream. Unlike instream the underlying stream is also imperative but we need a reference here to allow us to redirect. *) fStream: StreamIO.outstream ref } (* We don't need a mutex for outstream assuming := and ! are atomic i.e. '!' returns either the previous value or the current one and not some intermediate value. *) fun mkInstream (s : StreamIO.instream) : instream = InStream{fStream = ref s, lock = Thread.Mutex.mutex()} fun protect (InStream{fStream, lock}) f = LibraryIOSupport.protect lock f fStream (* Get and set the underlying stream. We have to interlock setInstream at least. *) fun getInstream s = protect s (fn fStream => !fStream) and setInstream(InStream{fStream, lock}, s) = LibraryIOSupport.protect lock (fn fStream => fStream := s) fStream (* These are just wrappers for the underlying functional calls. *) fun input s = protect s (fn fStream => let val (v, f') = StreamIO.input(!fStream) in fStream := f'; v end) (* We don't use StreamIO.input1 here because that never advances over a temporary EOF. *) fun input1 s = protect s (fn fStream => let val (s, f') = StreamIO.inputN(!fStream, 1) in fStream := f'; if Vector.length s = 0 then NONE else SOME(Vector.sub(s, 0)) end) fun inputN(InStream{fStream, lock}, n) = LibraryIOSupport.protect lock (fn fStream => let val (v, f') = StreamIO.inputN(!fStream, n) in fStream := f'; v end) fStream fun inputAll s = protect s (fn fStream => let val (v, f') = StreamIO.inputAll(!fStream) in fStream := f'; v end) (* These next functions only query the stream and don't affect the fStream ref so don't really need interlocking. If two threads call these functions simultaneously the result is non-deterministic anyway. *) fun canInput(InStream{fStream, lock}, n) = LibraryIOSupport.protect lock (fn fStream => StreamIO.canInput(! fStream, n)) fStream and closeIn s = protect s (fn fStream => StreamIO.closeIn(! fStream)) and endOfStream s = protect s (fn fStream => StreamIO.endOfStream(! fStream)) fun lookahead s = protect s (fn fStream => case StreamIO.input1 (! fStream) of NONE => NONE | SOME(s, _) => SOME s ) (* These are simply wrappers. *) fun mkOutstream (s : StreamIO.outstream) : outstream = OutStream{fStream = ref s} fun getOutstream(OutStream{fStream = ref s}) = s and setOutstream(OutStream{fStream}, s) = fStream := s fun output(OutStream{fStream=ref f, ...}, v) = StreamIO.output(f, v) and output1(OutStream{fStream=ref f, ...}, c) = StreamIO.output1(f, c) and flushOut(OutStream{fStream=ref f, ...}) = StreamIO.flushOut f and closeOut(OutStream{fStream=ref f, ...}) = StreamIO.closeOut f and getPosOut(OutStream{fStream=ref f, ...}) = StreamIO.getPosOut f fun setPosOut(OutStream{fStream, ...}, p) = fStream := StreamIO.setPosOut p end; polyml.5.2.1/basis/InitialBasis.ML0000644000175000017500000003264210766427747015735 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* Title: ML prelude file. Author: Dave Matthews, Cambridge University Computer Laboratory Copyright Cambridge University 1985 *) (* 10/2/94 SPF merged prelude files from AHL's v2.07X and Dave's v2.08 *) (* 10/2/94 SPF inlined signatures to avoid name-space pollution *) (* For ML97 this prelude has been reduced to virtually nothing. Almost everything is defined in the Standard Basis library. *) (*****************************************************************************) (* Infixes *) (*****************************************************************************) infix 7 * / div mod infix 6 + - ^ infixr 5 :: @ infix 4 = <> > >= < <= infix 3 := o infix 0 before (* Set up the overloading first so we can use it in the rest of the prelude. Setting up overloads is messy because of the need to capture the inline code for the functions. *) (* Conversion functions. At this stage we have installed a simple conversion function for strings and ints. *) val it: string->real = RunCall.run_call1 RuntimeCalls.POLY_SYS_conv_real; RunCall.addOverload it "convReal"; (* Comparisons. These are overloaded on strings, chars and word as well as int and real. *) val it: int*int->bool = RunCall.run_call2 RuntimeCalls.POLY_SYS_int_geq; RunCall.addOverload it ">="; val it: string*string->bool = RunCall.run_call2 RuntimeCalls.POLY_SYS_teststrgeq; RunCall.addOverload it ">="; val it: real*real->bool = RunCall.run_call2 RuntimeCalls.POLY_SYS_Real_geq; RunCall.addOverload it ">="; val it: char*char->bool = RunCall.run_call2 RuntimeCalls.POLY_SYS_word_geq; RunCall.addOverload it ">="; val it: word*word->bool = RunCall.run_call2 RuntimeCalls.POLY_SYS_word_geq; RunCall.addOverload it ">="; val it: int*int->bool = RunCall.run_call2 RuntimeCalls.POLY_SYS_int_leq; RunCall.addOverload it "<="; val it: string*string->bool = RunCall.run_call2 RuntimeCalls.POLY_SYS_teststrleq; RunCall.addOverload it "<="; val it: real*real->bool = RunCall.run_call2 RuntimeCalls.POLY_SYS_Real_leq; RunCall.addOverload it "<="; val it: char*char->bool = RunCall.run_call2 RuntimeCalls.POLY_SYS_word_leq; RunCall.addOverload it "<="; val it: word*word->bool = RunCall.run_call2 RuntimeCalls.POLY_SYS_word_leq; RunCall.addOverload it "<="; val it: int*int->bool = RunCall.run_call2 RuntimeCalls.POLY_SYS_int_gtr; RunCall.addOverload it ">"; val it: string*string->bool = RunCall.run_call2 RuntimeCalls.POLY_SYS_teststrgtr; RunCall.addOverload it ">"; val it: real*real->bool = RunCall.run_call2 RuntimeCalls.POLY_SYS_Real_gtr; RunCall.addOverload it ">"; val it: char*char->bool = RunCall.run_call2 RuntimeCalls.POLY_SYS_word_gtr; RunCall.addOverload it ">"; val it: word*word->bool = RunCall.run_call2 RuntimeCalls.POLY_SYS_word_gtr; RunCall.addOverload it ">"; val it: int*int->bool = RunCall.run_call2 RuntimeCalls.POLY_SYS_int_lss; RunCall.addOverload it "<"; val it: string*string->bool = RunCall.run_call2 RuntimeCalls.POLY_SYS_teststrlss; RunCall.addOverload it "<"; val it: real*real->bool = RunCall.run_call2 RuntimeCalls.POLY_SYS_Real_lss; RunCall.addOverload it "<"; val it: char*char->bool = RunCall.run_call2 RuntimeCalls.POLY_SYS_word_lss; RunCall.addOverload it "<"; val it: word*word->bool = RunCall.run_call2 RuntimeCalls.POLY_SYS_word_lss; RunCall.addOverload it "<"; (* Binary operations. *) val it: int*int->int = RunCall.run_call2 RuntimeCalls.POLY_SYS_aplus; RunCall.addOverload it "+"; val it: real*real->real = RunCall.run_call2 RuntimeCalls.POLY_SYS_Add_real; RunCall.addOverload it "+"; val it: word*word->word = RunCall.run_call2 RuntimeCalls.POLY_SYS_plus_word; RunCall.addOverload it "+"; val it: int*int->int = RunCall.run_call2 RuntimeCalls.POLY_SYS_aminus; RunCall.addOverload it "-"; val it: real*real->real = RunCall.run_call2 RuntimeCalls.POLY_SYS_Sub_real; RunCall.addOverload it "-"; val it: word*word->word = RunCall.run_call2 RuntimeCalls.POLY_SYS_minus_word; RunCall.addOverload it "-"; val it: int*int->int = RunCall.run_call2 RuntimeCalls.POLY_SYS_amul; RunCall.addOverload it "*"; val it: real*real->real = RunCall.run_call2 RuntimeCalls.POLY_SYS_Mul_real; RunCall.addOverload it "*"; val it: word*word->word = RunCall.run_call2 RuntimeCalls.POLY_SYS_mul_word; RunCall.addOverload it "*"; (* Unary operations. *) val it: int->int = RunCall.run_call1 RuntimeCalls.POLY_SYS_aneg; RunCall.addOverload it "~"; val it: real->real = RunCall.run_call1 RuntimeCalls.POLY_SYS_Neg_real; RunCall.addOverload it "~"; local val zero: word = RunCall.unsafeCast 0 in fun it x = zero - x end; RunCall.addOverload it "~"; fun it (i: int): int = if i >= 0 then i else ~ i; RunCall.addOverload it "abs"; fun it (x: real): real = if x >= 0.0 then x else ~ x; RunCall.addOverload it "abs"; local val zero: word = RunCall.unsafeCast 0 in fun it x = if x >= zero then x else ~ x end; RunCall.addOverload it "abs"; (* Equality functions. In this case we are not actually adding overloadings (equality is handled specially by the type system) but telling the compiler about functions which provide faster implementation of equality than the general-purpose structure equality. *) (* POLY_SYS_equala performs equality checking on both short and long versions of arbitrary precision integers. *) val it: int*int->bool = RunCall.run_call2 RuntimeCalls.POLY_SYS_equala; RunCall.addOverload it "="; (* POLY_SYS_int_eq does a simple bitwise comparison on its arguments which is sufficient if the values are always short. *) val it: bool*bool->bool = RunCall.run_call2 RuntimeCalls.POLY_SYS_int_eq; RunCall.addOverload it "="; val it: char*char->bool = RunCall.run_call2 RuntimeCalls.POLY_SYS_int_eq; RunCall.addOverload it "="; val it: string*string->bool = RunCall.run_call2 RuntimeCalls.POLY_SYS_teststreq; RunCall.addOverload it "="; (* POLY_SYS_word_eq is the same as POLY_SYS_int_eq in the memory mapped version of Poly/ML. It used to be different in the persistent store version because it was possible for two pointers to the same object to have different values. *) (* Adding an overload for equality on 'a ref has the effect of allowing equality on all ref types. *) local (* This is even more messy than usual because we have a type variable in the type. *) val f : word*word->bool = RunCall.run_call2 RuntimeCalls.POLY_SYS_word_eq in fun it (x: 'a ref, y: 'a ref) = RunCall.unsafeCast f (x,y) end; RunCall.addOverload it "="; val it : word * word -> bool = RunCall.run_call2 RuntimeCalls.POLY_SYS_word_eq; RunCall.addOverload it "="; local val not = RunCall.run_call1 RuntimeCalls.POLY_SYS_not_bool in fun it(i:int, j: int): bool = not(RunCall.run_call2 RuntimeCalls.POLY_SYS_equala(i, j)) end; RunCall.addOverload it "<>"; val it: bool*bool->bool = RunCall.run_call2 RuntimeCalls.POLY_SYS_int_neq; RunCall.addOverload it "<>"; val it: char*char->bool = RunCall.run_call2 RuntimeCalls.POLY_SYS_int_neq; RunCall.addOverload it "<>"; val it: string*string->bool = RunCall.run_call2 RuntimeCalls.POLY_SYS_teststrneq; RunCall.addOverload it "<>"; local (* This is even more messy than usual because of the types. *) val f : word*word->bool = RunCall.run_call2 RuntimeCalls.POLY_SYS_word_neq in fun it (x: 'a ref, y: 'a ref) = RunCall.unsafeCast f (x,y) end; RunCall.addOverload it "<>"; val it : word * word -> bool = RunCall.run_call2 RuntimeCalls.POLY_SYS_word_neq; RunCall.addOverload it "<>"; (* div, mod and / are overloaded in ML97. *) val it: real * real -> real = RunCall.run_call2 RuntimeCalls.POLY_SYS_Div_real; RunCall.addOverload it "/"; local infix 7 quot val op quot: int * int -> int = RunCall.run_call2 RuntimeCalls.POLY_SYS_adiv; in fun it (x, y) = let (* If the signs differ the normal quot operation will give the wrong answer. We have to round the result down by subtracting either y-1 or y+1. This will round down because it will have the opposite sign to x *) (* ... val d = x - (if (y >= 0) = (x >= 0) then 0 else if y > 0 then y-1 else y+1) ... *) val xpos = x >= 0; val ypos = y >= 0; val d = if xpos = ypos then x else if ypos then (x - (y - 1)) else (x - (y + 1)) in d quot y (* may raise Div for divide-by-zero *) end; end; RunCall.addOverload it "div"; local infix 7 rem val op rem: int * int -> int = RunCall.run_call2 RuntimeCalls.POLY_SYS_amod; in fun it(x, y) = let val r = (x rem y) (* must handle divide-by-zero *) (* handle Div => raise Mod; *) in if r = 0 orelse (y >= 0) = (r >= 0) then r else r + y end; end; RunCall.addOverload it "mod"; val it : word*word->word = RunCall.run_call2 RuntimeCalls.POLY_SYS_div_word; RunCall.addOverload it "div"; val it : word*word->word = RunCall.run_call2 RuntimeCalls.POLY_SYS_mod_word; RunCall.addOverload it "mod"; local (* We need to use the same identifier for this that we used when compiling the compiler, particularly "make". *) structure Fail = RunCall.Run_exception1 ( type ex_type = string; val ex_iden = RuntimeCalls.EXC_Fail ) in exception Fail = Fail.ex end; (* A few useful functions which are in the top-level environment. Others are added later. *) (* This is built in because the length of a string is stored as an untagged integer. The result needs to be a tagged integer. Actually this might be better written using a separate function POLY_SYS_get_string_length (by analogy with POLY_SYS_set_string_length) and then fun size (s: string): int = if isShort s then 1 else POLY_SYS_get_string_length s; The advantage would be that the . *) val size : string -> int = RunCall.run_call1 RuntimeCalls.POLY_SYS_string_length; val str: char ->string = RunCall.unsafeCast; val ord: char -> int = RunCall.unsafeCast; val not: bool -> bool = RunCall.run_call1 RuntimeCalls.POLY_SYS_not_bool; val use: string -> unit = Bootstrap.use; (* This will be replaced. *) local val System_setw: (* 'a ref*int*'a*) word*int*word ->unit = RunCall.run_call3 RuntimeCalls.POLY_SYS_assign_word in fun (var: 'a ref) := (v: 'a) : unit = (RunCall.unsafeCast System_setw (var, 0, v); ()) end; (* The following version of "o" currently gets optimised better. *) fun (f o g) = fn x => f (g x); (* functional composition *) fun length l = let (* Tail-recursive function. *) fun len [] i = i | len (_::l) i = len l (i+1) in len l 0 end local (* Temporary conversion function for characters. This is replaced in the Char structure. *) open RuntimeCalls; structure Conversion = RunCall.Run_exception1 ( type ex_type = string; val ex_iden = EXC_conversion ); exception Conversion = Conversion.ex; val isShortString : string -> bool = RunCall.run_call1 POLY_SYS_is_short fun convChar (s: string) : char = let val convS = Bootstrap.convString s in (* Should be exactly a single character i.e. a single short value. *) if isShortString convS then RunCall.unsafeCast convS else raise Conversion "Bad character" end; in val it = RunCall.addOverload convChar "convChar"; end; (* Print functions. Some of these are replaced by functions in the Basis library and are installed here merely so that we can get useful output if we get a failure while compiling it. *) local open RuntimeCalls val ord0 = ord #"0"; val chr = RunCall.unsafeCast fun print_bool (put, beg, brk, nd) depth _ (b: bool) = put(if b then "true" else "false") fun print_string (put, beg, brk, nd) depth _ (s: string) = put(s) (* Not escaped at the moment. *) fun print_char (put, beg, brk, nd) depth _ (c: char) = (put("#"); put(RunCall.unsafeCast c)) fun print_list (put, beg, brk, nd) depth printEl (l: 'a list) = let (* Print the list as [, , etc ]. Replace the rest of the list by ... once the depth reaches zero. *) fun plist [] depth = () | plist _ 0 = put "..." | plist [h] depth = printEl (h, depth) | plist (h::t) depth = ( printEl (h, depth); put ","; brk (1, 0); plist t (depth - 1) ) in beg (3, false); (* Wrap this in a begin-end block to keep it together. *) put "["; if depth <= 0 then put "..." else plist l depth; put "]"; nd () end in val it = PolyML.install_pp print_bool; val it = PolyML.install_pp print_string; val it = PolyML.install_pp print_char; val it = PolyML.install_pp print_list end; polyml.5.2.1/basis/InitialPolyML.ML0000644000175000017500000001557410766430003016030 0ustar daviddavid(* Title: PolyML structure before compiling the rest of the basis. Author: Dave Matthews, Cambridge University Computer Laboratory Copyright (c) 2000-7 Cambridge University Technical Services Limited Modified David C.J. Matthews 2008 This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* We need to use onEntry in the IO library so this has to be compiled first. However we also want "make" in the PolyML structure so we have to complete the compilation later. *) local open RuntimeCalls; in structure PolyML = (* We must not have a signature on the result otherwise print and makestring will be given polymorphic types and will only produce "?" *) struct (* The type-specific functions e.g. PolyML.print must be extracted by using open. They appear to be polymorphic but we have to be careful that they are recognised by the compiler as type-specific and not as normal polymorphic functions. *) open PolyML; local (* This is slightly awkward but is needed because otherwise the compiler would complain about a free type variable. *) val etrace: word->word = RunCall.run_call1 POLY_SYS_exception_trace; in fun exception_trace (f: unit->'a):'a = RunCall.unsafeCast etrace f end local (* Initialise the list with the existing start-up function *) val onEntryList: (unit->unit) list ref = ref[] (* Run the list in reverse order. *) fun runOnEntry [] = () | runOnEntry (f :: b) = (runOnEntry b; f() handle _ => ()); (* If the installed function returns without calling OS.Process.exit we have to run the installed "atExit" functions as though it had. Unfortunately we have to duplicate code from OS.Process here. *) local val doExit = RunCall.run_call1 RuntimeCalls.POLY_SYS_exit val doCall: int*unit -> (unit->unit) = RunCall.run_call2 RuntimeCalls.POLY_SYS_process_env in fun exit () = let val exitFun = (* If we get an empty list here we've finished. *) doCall(19, ()) handle _ => doExit 0 in (* Run the function and then repeat. *) exitFun() handle _ => (); exit() end end in (* The equivalent of atExit except that functions are added to the list persistently and of course the functions are executed at start-up rather than close-down. *) (* TODO: There ought to be a mutex here. *) fun onEntry (f: unit->unit) = onEntryList := f :: !onEntryList fun runFunction f () = ( runOnEntry(! onEntryList); (* Perform start-up operations. *) f(); (* Run the main function. *) exit() (* Perform close-down actions. *) ) (* Export functions - write out the function and everything reachable from it. *) fun export(filename: string, f: unit->unit): unit = RunCall.run_call2 RuntimeCalls.POLY_SYS_poly_specific (1, (filename, runFunction f)) fun exportPortable(filename: string, f: unit->unit): unit = RunCall.run_call2 RuntimeCalls.POLY_SYS_poly_specific (3, (filename, runFunction f)) end fun shareCommonData(root: 'a): unit = RunCall.run_call2 RuntimeCalls.POLY_SYS_poly_specific (13, root) (* The first two used to be in the System structure but that is no longer included. *) fun objSize(x:'a): int = RunCall.run_call2 RuntimeCalls.POLY_SYS_poly_specific (14, x) and showSize(x:'a): int = RunCall.run_call2 RuntimeCalls.POLY_SYS_poly_specific (15, x) and objProfile(x:'a): int = RunCall.run_call2 RuntimeCalls.POLY_SYS_poly_specific (16, x) val fullGC: unit -> unit = RunCall.run_call0 POLY_SYS_full_gc; val stackTrace: unit -> unit = RunCall.run_call0 POLY_SYS_stack_trace; local val eqWord : word*word->bool = RunCall.run_call2 POLY_SYS_word_eq in fun pointerEq(x: 'a ,y: 'a): bool = RunCall.unsafeCast eqWord (x,y) end fun rtsVersion () : int = RunCall.run_call2 POLY_SYS_process_env(104, ()) fun architecture(): string = RunCall.run_call2 RuntimeCalls.POLY_SYS_poly_specific (12, ()) fun rtsArgumentHelp(): string = RunCall.run_call2 RuntimeCalls.POLY_SYS_poly_specific (19, ()); local val onLoadList = ref [] fun loadSavedState (f: string): unit = RunCall.run_call2 RuntimeCalls.POLY_SYS_poly_specific (21, f) in (* Add a function to be called when a saved state is loaded. This is really here to ensure that we can preserve the contents of the buffer for stdIn. *) fun onLoad (f: (unit->unit)->unit): unit = onLoadList := f :: ! onLoadList (* Saving and loading state. *) structure SaveState = struct fun saveChild(f: string, depth: int): unit = RunCall.run_call2 RuntimeCalls.POLY_SYS_poly_specific (20, (f, depth)) fun saveState f = saveChild (f, 0); fun showHierarchy(): string list = RunCall.run_call2 RuntimeCalls.POLY_SYS_poly_specific (22, ()) fun renameParent{ child: string, newParent: string }: unit = RunCall.run_call2 RuntimeCalls.POLY_SYS_poly_specific (23, (child, newParent)) fun showParent(child: string): string option = RunCall.run_call2 RuntimeCalls.POLY_SYS_poly_specific (24, child) fun loadState (f: string): unit = let val loadList = ! onLoadList (* Work along the list calling each function with an argument to call the next item. That allows the functions to make local copies of any references and then reset them when the recursion unwinds. *) fun apply [] = (* Actually do the loading. *) RunCall.run_call2 RuntimeCalls.POLY_SYS_poly_specific (21, f) | apply (h::t) = h (fn () => apply t) in apply loadList; (* Reset the load list since that will have been overwritten by the load. *) onLoadList := loadList end end end local (* Poly/ML exceptions. *) structure XWindowsEx = RunCall.Run_exception1 ( type ex_type = string; val ex_iden = RuntimeCalls.EXC_XWindows ) and ForeignEx = RunCall.Run_exception1 ( type ex_type = string; val ex_iden = RuntimeCalls.EXC_foreign ) in exception XWindows = XWindowsEx.ex and Foreign = ForeignEx.ex end; end end; polyml.5.2.1/basis/Int.sml0000644000175000017500000002427010766426501014360 0ustar daviddavid(* Title: Standard Basis Library: Int and LargeInt structures Author: David Matthews Copyright David Matthews 1999 This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* G&R 2004 status: done. Very minor change to type of "scan". *) structure Int: sig (* This signature is almost the same as INTEGER except that occurrences of Int and LargeInt are removed. The type is the same in all cases so that doesn't matter. *) eqtype int val toLarge : int -> (*LargeInt.*)int val fromLarge : (*LargeInt.*)int -> int val toInt : int -> (*Int.*)int val fromInt : (*Int.*)int -> int val precision : (*Int.*)int option val minInt : int option val maxInt : int option val ~ : int -> int val * : (int * int) -> int val div : (int * int) -> int val mod : (int * int) -> int val quot : (int * int) -> int val rem : (int * int) -> int val + : (int * int) -> int val - : (int * int) -> int val compare : (int * int) -> General.order val > : (int * int) -> bool val >= : (int * int) -> bool val < : (int * int) -> bool val <= : (int * int) -> bool val abs : int -> int val min : (int * int) -> int val max : (int * int) -> int val sign : int -> (*Int.*)int val sameSign : (int * int) -> bool val fmt : StringCvt.radix -> int -> string val toString : int -> string val fromString : string -> int option val scan : StringCvt.radix -> (char, 'a) StringCvt.reader -> (int, 'a) StringCvt.reader end = struct open RuntimeCalls; (* for POLY_SYS and EXC numbers *) (* In Poly/ML we use arbitrary precision for the normal integer. That uses a short representation which is typically 30 or 31 bit and a long representation which is a pointer to a segment of bytes. *) type int = int (* Underlying type *) (* Since LargeInt and Int are the same these are identity functions. *) fun toLarge i = i and fromLarge i = i and toInt i = i and fromInt i = i val precision = NONE (* Arbitrary precision. *) and minInt = NONE and maxInt = NONE (* These are overloaded functions and are treated specially. *) (* Since they aren't overloaded in this structure we can pick up the underlying RTS functions. *) val ~ : int->int = RunCall.run_call1 POLY_SYS_aneg and op * : int*int->int = RunCall.run_call2 POLY_SYS_amul and op + : int*int->int = RunCall.run_call2 POLY_SYS_aplus and op - : int*int->int = RunCall.run_call2 POLY_SYS_aminus infix 7 quot rem val op quot: int * int -> int = RunCall.run_call2 POLY_SYS_adiv and op rem: int * int -> int = RunCall.run_call2 POLY_SYS_amod val op < : int*int->bool = RunCall.run_call2 POLY_SYS_int_lss and op > : int*int->bool = RunCall.run_call2 POLY_SYS_int_gtr and op <= : int*int->bool = RunCall.run_call2 POLY_SYS_int_leq and op >= : int*int->bool = RunCall.run_call2 POLY_SYS_int_geq (* TODO: There was a bug in the i386 RTS which caused the wrong exception to be raised for divide-by-zero. It's been fixed in the Windows version. Check other RTS's, in particular Linux. *) fun x mod y = let val r = x rem y (* must handle divide-by-zero *) (* NB: Unlike ML 90 this function raises Div if y is zero, not Mod *) in if r = 0 orelse (y >= 0) = (r >= 0) then r else r + y end; fun x div y = let (* If the signs differ the normal quot operation will give the wrong answer. We have to round the result down by subtracting either y-1 or y+1. This will round down because it will have the opposite sign to x *) (* ... val d = x - (if (y >= 0) = (x >= 0) then 0 else if y > 0 then y-1 else y+1) ... *) val xpos = x >= 0; val ypos = y >= 0; val d = if xpos = ypos then x else if ypos then (x - (y - 1)) else (x - (y + 1)) in d quot y (* may raise Div for divide-by-zero *) end; fun compare (i, j) = if i < j then General.LESS else if i > j then General.GREATER else General.EQUAL fun abs i = if i >= 0 then i else ~ i fun min (i, j) = if i < j then i else j and max (i, j) = if i > j then i else j fun sign i = if i = 0 then 0 else if i < 0 then ~1 else 1 (* It might be possible to do something clever by xor-ing the words together when both values are short. *) fun sameSign(i, j) = if i = 0 then j = 0 else if i < 0 then j < 0 else (* i > 0 *) j > 0 (* Local function *) fun baseOf StringCvt.BIN = 2 | baseOf StringCvt.OCT = 8 | baseOf StringCvt.DEC = 10 | baseOf StringCvt.HEX = 16 local fun toChars base i chs = let val digit = i rem base val ch = if digit < 10 then Char.chr(Char.ord(#"0") + digit) else (* Hex *) Char.chr(Char.ord(#"A") + digit - 10) in if i < base then ch :: chs else toChars base (i quot base) (ch :: chs) end in fun fmt radix i = if i < 0 then String.implode(#"~" :: toChars (baseOf radix) (~ i) []) else String.implode(toChars (baseOf radix) i []) end val toString = fmt StringCvt.DEC fun scan radix getc src = let val base = baseOf radix (* Read the digits, accumulating the result in acc. isOk is true once we have read a valid digit. *) fun read_digits src acc isOk = case getc src of NONE => if isOk then SOME(acc, src) else NONE | SOME(ch, src') => if Char.ord ch >= Char.ord #"0" andalso Char.ord ch < (Char.ord #"0" + base) then read_digits src' (acc*base + Char.ord ch - Char.ord #"0") true else (* Invalid character - either end of number or bad no. *) if isOk then SOME(acc, src) else NONE fun read_hex_digits src acc isOk = case getc src of NONE => if isOk then SOME(acc, src) else NONE | SOME(ch, src') => if Char.ord ch >= Char.ord #"0" andalso Char.ord ch <= Char.ord #"9" then read_hex_digits src' (acc*16 + Char.ord ch - Char.ord #"0") true else if Char.ord ch >= Char.ord #"A" andalso Char.ord ch <= Char.ord #"F" then read_hex_digits src' (acc*16 + Char.ord ch - Char.ord #"A" + 10) true else if Char.ord ch >= Char.ord #"a" andalso Char.ord ch <= Char.ord #"f" then read_hex_digits src' (acc*16 + Char.ord ch - Char.ord #"a" + 10) true else (* Invalid character - either end of number or bad no. *) if isOk then SOME(acc, src) else NONE (* There is a special case with hex numbers. A hex number MAY begin with 0x or 0X e.g. 0x1f0 but need not. So "0x " and "0xg" are both valid and represent the value 0 with "x " and "xg" as the continuations of the input. *) fun read_number src = if base = 16 then (* Hex. *) ( case getc src of NONE => NONE | SOME(ch, src') => if ch <> #"0" then read_hex_digits src 0 false else ( case getc src' of NONE => SOME(0, src') (* Accept the 0 *) | SOME(ch, src'') => if ch = #"x" orelse ch = #"X" then ( (* See if the characters after the 0x form a valid hex number. If so return that, if not return the 0 and treat the rest of the string as starting with the x. *) case read_hex_digits src'' 0 false of NONE => SOME(0, src') (* Accept the 0 *) | res => res ) else (* Start from the 0. *) read_hex_digits src 0 false ) ) else (* Binary, octal and decimal *) read_digits src 0 false in case getc src of NONE => NONE | SOME(ch, src') => if Char.isSpace ch (* Skip white space. *) then scan radix getc src' (* Recurse *) else if ch = #"+" (* Remove the + sign *) then read_number src' else if ch = #"-" orelse ch = #"~" then ( case read_number src' of NONE => NONE | SOME(i, r) => SOME(~i, r) ) else (* See if it's a valid digit. *) read_number src end (* TODO: Implement this directly? *) val fromString = StringCvt.scanString (scan StringCvt.DEC) (* Converter to int values. This replaces the basic conversion function for ints installed in the bootstrap process. In particular this converter can handle hexadecimal. *) local structure Conversion = RunCall.Run_exception1 ( type ex_type = string; val ex_iden = EXC_conversion ); exception Conversion = Conversion.ex; (* The string may be either decimal or hex. *) (* TODO: We could rewrite scan so that it raises Conversion with a string giving more information and then handle. It's possibly not worth it since the lexical analyser should only pass in a syntactically valid string. *) fun convInt s = let val radix = if String.size s >= 3 andalso String.substring(s, 0, 2) = "0x" orelse String.size s >= 4 andalso String.substring(s, 0, 3) = "~0x" then StringCvt.HEX else StringCvt.DEC in case StringCvt.scanString (scan radix) s of NONE => raise Conversion "Invalid integer constant" | SOME res => res end in (* Install this as a conversion function for integer literals. Unlike other overloaded functions there's no need to ensure that overloaded conversion functions are installed at the top-level. The compiler has type "int" built in and will use this conversion function for literals of the form nnn... in preference to any other if unification does not give an explicit type. *) val unused: unit = RunCall.addOverload convInt "convInt" end end; local (* Install the pretty printer for int *) fun prettyInt(p, _, _, _) _ _ x = p(Int.toString x) in val () = PolyML.install_pp prettyInt end; structure LargeInt = Int and Position = Int; polyml.5.2.1/basis/Int32.sml0000644000175000017500000000570510766426530014531 0ustar daviddavid(* Title: Standard Basis Library: Int32 Structure Author: Vesa Karvonen Copyright David Matthews 1999 Vesa Karvonen 2007 This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* This is a hacked version of Int32 - a 32bit Int implementation for PolyML 5. It's neither well tested nor efficiently implemented. *) structure Int32 :> INTEGER = struct open Int val precision = 32 val minInt = ~(IntInf.<< (1, Word.fromInt (precision - 1))) val maxInt = ~1-minInt fun check i = if i < minInt orelse maxInt < i then raise Overflow else i val precision = SOME precision val minInt = SOME minInt val maxInt = SOME maxInt val fromLarge = check o fromLarge val fromInt = check o fromInt val ~ = check o ~ val op * = check o op * val op + = check o op + val op - = check o op - val op div = check o op div val op mod = check o op mod val quot = check o quot val rem = check o rem val abs = check o abs fun scan' r g s = case scan r g s of NONE => NONE | SOME (i, s) => SOME (check i, s) val scan = scan' val fromString = Option.map check o fromString end; local open RuntimeCalls structure Conversion = RunCall.Run_exception1 (type ex_type = string; val ex_iden = EXC_conversion); exception Conversion = Conversion.ex; fun convInt s = let val radix = if String.size s >= 3 andalso String.substring(s, 0, 2) = "0x" orelse String.size s >= 4 andalso String.substring(s, 0, 3) = "~0x" then StringCvt.HEX else StringCvt.DEC in case StringCvt.scanString (Int32.scan radix) s of NONE => raise Conversion "Invalid integer constant" | SOME res => res end fun pretty (p, _, _, _) _ _ x = p (Int32.toString x) in val () = RunCall.addOverload convInt "convInt" val () = PolyML.install_pp pretty end; RunCall.addOverload Int32.~ "~"; RunCall.addOverload Int32.+ "+"; RunCall.addOverload Int32.- "-"; RunCall.addOverload Int32.* "*"; RunCall.addOverload Int32.div "div"; RunCall.addOverload Int32.mod "mod"; RunCall.addOverload Int32.< "<"; RunCall.addOverload Int32.> ">"; RunCall.addOverload Int32.<= "<="; RunCall.addOverload Int32.>= ">="; RunCall.addOverload Int32.abs "abs"; polyml.5.2.1/basis/IntArray.sml0000644000175000017500000000275110313043324015341 0ustar daviddavid(* Title: Standard Basis Library: IntArray and IntVector Structures Author: David Matthews Copyright David Matthews 1999-2005 This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* G&R 2004 status: no change. Added slice versions. *) structure IntVector: MONO_VECTOR = struct open Vector type vector = int vector and elem = int end; structure IntArray: MONO_ARRAY = struct open Array type vector = int vector and array = int array and elem = int end; structure IntVectorSlice: MONO_VECTOR_SLICE = struct open VectorSlice type slice = int slice and vector = IntVector.vector and elem = int end; structure IntArraySlice: MONO_ARRAY_SLICE = struct open ArraySlice type slice = int slice and vector = IntVector.vector and array = IntArray.array and elem = int and vector_slice = IntVectorSlice.slice end; polyml.5.2.1/basis/IntArray2.sml0000644000175000017500000001016610313043324015422 0ustar daviddavid(* Title: Standard Basis Library: Mono_Array2 signature and structures. Author: David Matthews Copyright David Matthews 2000 This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* G&R 2004 status: no change. *) signature MONO_ARRAY2 = sig eqtype array type elem type vector type region = { base : array, row : int, col : int, nrows : int option, ncols : int option } datatype traversal = datatype Array2.traversal val array : int * int * elem -> array val fromList : elem list list -> array val tabulate : traversal -> int * int * (int * int -> elem) -> array val sub : array * int * int -> elem val update : array * int * int * elem -> unit val dimensions : array -> int * int val nCols : array -> int val nRows : array -> int val row: array * int -> vector val column: array * int -> vector val copy: { src : region, dst : array, dst_row : int, dst_col : int } -> unit val appi: Array2.traversal -> (int * int * elem -> unit) -> region -> unit val app: Array2.traversal -> (elem -> unit) -> array -> unit val modifyi: Array2.traversal -> (int * int * elem -> elem) -> region -> unit val modify: Array2.traversal -> (elem -> elem) -> array -> unit val foldi: Array2.traversal -> (int * int * elem * 'b -> 'b) -> 'b -> region -> 'b val fold: Array2.traversal -> (elem * 'b -> 'b) -> 'b -> array -> 'b end; (* All these are simply defined in terms of Array2, at least for the moment. *) structure Word8Array2 : MONO_ARRAY2 where type vector = Word8Vector.vector where type elem = Word8.word = struct open Array2 type elem = Word8.word type vector = Word8Vector.vector type elem = Word8.word type array = elem array type region = elem region (* Have to redefine row and column in terms of Word8Vector. *) fun row(a, i) = Word8Vector.tabulate(nCols a, fn j => sub(a, i, j)) and column(a, j) = Word8Vector.tabulate(nRows a, fn i => sub(a, i, j)) end; structure CharArray2 : MONO_ARRAY2 where type vector = CharVector.vector where type elem = char = struct open Array2 type elem = char type vector = CharVector.vector type array = elem array type region = elem region fun row(a, i) = CharVector.tabulate(nCols a, fn j => sub(a, i, j)) and column(a, j) = CharVector.tabulate(nRows a, fn i => sub(a, i, j)) end; structure BoolArray2 : MONO_ARRAY2 where type vector = BoolVector.vector where type elem = bool = struct open Array2 type elem = bool type vector = BoolVector.vector type array = elem array type region = elem region fun row(a, i) = BoolVector.tabulate(nCols a, fn j => sub(a, i, j)) and column(a, j) = BoolVector.tabulate(nRows a, fn i => sub(a, i, j)) end; structure IntArray2 : MONO_ARRAY2 where type vector = IntVector.vector where type elem = int = struct open Array2 type elem = int type vector = IntVector.vector type array = elem array type region = elem region fun row(a, i) = IntVector.tabulate(nCols a, fn j => sub(a, i, j)) and column(a, j) = IntVector.tabulate(nRows a, fn i => sub(a, i, j)) end; structure RealArray2 : MONO_ARRAY2 where type vector = RealVector.vector where type elem = real = struct open Array2 type elem = real type vector = RealVector.vector type array = elem array type region = elem region fun row(a, i) = RealVector.tabulate(nCols a, fn j => sub(a, i, j)) and column(a, j) = RealVector.tabulate(nRows a, fn i => sub(a, i, j)) end; polyml.5.2.1/basis/IntInf.sml0000644000175000017500000000764210313043324015003 0ustar daviddavid(* Title: Standard Basis Library: IntInf structure and signature. Author: David Matthews Copyright David Matthews 2000 This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* G&R 2004 status: checked, no change. *) signature INT_INF = sig include INTEGER val divMod : int * int -> int * int val quotRem : int * int -> int * int val pow : int * Int.int -> int val log2 : int -> Int.int val orb : int * int -> int val xorb : int * int -> int val andb : int * int -> int val notb : int -> int val << : int * Word.word -> int val ~>> : int * Word.word -> int end; structure IntInf : INT_INF = struct open Int (* Inherit everything from Int. *) open RuntimeCalls; (* The underlying division function does compute both quot and rem (div and mod are defined in terms of these in the Int structure) so it might be worth building quotRem at least into the RTS. For the moment we just define these in terms of the functions from Int. *) fun divMod(i, j) = (i div j, i mod j) fun quotRem (i, j) = (Int.quot(i, j), Int.rem(i, j)) (* Return the position of the highest bit set in the value. *) local val isShort: int -> bool = RunCall.run_call1 POLY_SYS_is_short val loadByte: int*int->word = RunCall.run_call2 POLY_SYS_load_byte val segLength: int -> int = RunCall.run_call1 POLY_SYS_get_length (* Compute log2 for a short value. The top bit of i will always be zero since we've checked that it's positive so it will always terminate. *) fun log2Word(i: word, j: word, n: int) = if Word.>(j, i) then n-1 else log2Word(i, Word.<<(j, 0w1), n+1) (* The value is represented as little-endian byte segment. High-order bytes may be zero so we work back until we find a non-zero byte and then find the bit-position within it. *) fun log2Long(i, byte) = let val b = loadByte(i, byte) in if b = 0w0 then log2Long(i, byte-1) else log2Word(b, 0w2, 1) + byte*8 end in fun log2 i = let fun getLog2(i, j, n) = if j > i then n-1 else getLog2(i, j*2, n+1) in if i <= 0 then raise Domain else if isShort i then log2Word(Word.fromInt i, 0w2, 1) else (* i is actually a pointer to a byte segment. *) let val bytes = segLength i * RunCall.unsafeCast LibrarySupport.wordSize in log2Long(i, bytes-1) end end end (* These are implemented in the RTS. *) val orb : int * int -> int = RunCall.run_call2 POLY_SYS_ora val xorb : int * int -> int = RunCall.run_call2 POLY_SYS_xora val andb : int * int -> int = RunCall.run_call2 POLY_SYS_anda (* notb is defined as ~ (i+1) and there doesn't seem to be much advantage in implementing it any other way. *) fun notb i = ~(i + 1) fun pow(i, j) = let fun power(acc, n, 0) = acc | power(acc, n, i) = power(if andb(i, 1) = 1 then acc*n else acc, n*n, Int.quot(i, 2)) in if j < 0 then (* Various exceptional cases. *) ( if i = 0 then raise Div else if i = 1 then 1 else if i = ~1 then if Int.quot(j, 2) = 0 then (*even*) 1 else (*odd*) ~1 else 0 ) else power(1, i, j) end (* These could be implemented in the RTS although I doubt if it's really worth it. *) fun << (i: int, j: Word.word) = i * pow(2, Word.toInt j) and ~>> (i: int, j: Word.word) = Int.div(i, pow(2, Word.toInt j)) end; polyml.5.2.1/basis/LargeWord.sml0000644000175000017500000005026010766426566015525 0ustar daviddavid(* Title: Standard Basis Library: Word and LargeWord Structure Author: David Matthews Copyright David Matthews 1999, 2005 This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* G&R 2004 status: updated. *) (* This file contains definitions of both LargeWord and Word. SysWord is defined to be LargeWord. The only purpose of LargeWord is so that it can be used, as SysWord, to hold the full machine word values for certain operating-system calls. *) (* This uses the global definition of type "word" made in the compiler. That type has special status as the default for literals of the form 0wn in the absence of any other type information. *) local open RuntimeCalls; type largeword = {hi: word, lo: word} (* Extract a word value from a character stream. *) (* There's a complication here which is similar to that with 0x for Int.scan. A word value may, optionally, be preceded by 0w or for hex values 0wx, 0wX, 0x or 0X. Since this is optional it is possible for the value after the 0w to be anything, not just a valid number, in which case the result is the 0 and the continuation is w... *) fun scanWord radix getc src = let (* Some of this code duplicates code in Int.scan. It would be better to avoid that if we could. The difficulty is that Int.scan allows the number to begin with a sign and also another 0x for hex values. *) val base = case radix of StringCvt.BIN => 2 | StringCvt.OCT => 8 | StringCvt.DEC => 10 | StringCvt.HEX => 16 (* Read the digits, accumulating the result in acc. isOk is true once we have read a valid digit. *) fun read_digits src acc isOk = case getc src of NONE => if isOk then SOME(acc, src) else NONE | SOME(ch, src') => if Char.ord ch >= Char.ord #"0" andalso Char.ord ch < (Char.ord #"0" + base) then read_digits src' (acc*base + Char.ord ch - Char.ord #"0") true else (* Invalid character - either end of number or bad no. *) if isOk then SOME(acc, src) else NONE fun read_hex_digits src acc isOk = case getc src of NONE => if isOk then SOME(acc, src) else NONE | SOME(ch, src') => if Char.ord ch >= Char.ord #"0" andalso Char.ord ch <= Char.ord #"9" then read_hex_digits src' (acc*16 + Char.ord ch - Char.ord #"0") true else if Char.ord ch >= Char.ord #"A" andalso Char.ord ch <= Char.ord #"F" then read_hex_digits src' (acc*16 + Char.ord ch - Char.ord #"A" + 10) true else if Char.ord ch >= Char.ord #"a" andalso Char.ord ch <= Char.ord #"f" then read_hex_digits src' (acc*16 + Char.ord ch - Char.ord #"a" + 10) true else (* Invalid character - either end of number or bad no. *) if isOk then SOME(acc, src) else NONE fun read_number src = case radix of StringCvt.HEX => read_hex_digits src 0 false | _ => (* Binary, octal and decimal *) read_digits src 0 false in case getc src of NONE => NONE | SOME(#"0", src') => let (* May be the start of the number or may be 0w, 0x etc. *) val after0 = case getc src' of NONE => NONE | SOME(ch, src'') => if ch = #"w" then if radix = StringCvt.HEX then (* Is it 0wx, 0wX ? *) ( case getc src'' of NONE => NONE | SOME(ch, src''') => if ch = #"x" orelse ch = #"X" then read_number src''' (* Skip the 0wx *) else read_number src'' (* Skip the 0w *) ) else read_number src'' (* Skip the 0w *) else if (ch = #"x" orelse ch = #"X") andalso radix = StringCvt.HEX then read_number src'' else read_number src (* Include the 0 in the input *) in (* If the string *) case after0 of NONE => (* No valid number after it, return the zero .*) SOME(0, src') | res => res end | SOME(ch, src') => if Char.isSpace ch (* Skip white space. *) then scanWord radix getc src' (* Recurse *) else (* See if it's a valid digit. *) read_number src end (* scanWord *) (* Conversion from integer may involve extracting the low-order word from a long-integer representation. *) local (* Load the first word of a long form arbitrary precision number which is always little-endian, tag it and negate it if necessary. *) val getFirstWord: int -> word = RunCall.run_call1 POLY_SYS_get_first_long_word in (* We previously had a single RTS function to do this. I've replaced that by this code. Since most of the time we're going to be converting short integers this will avoid making an RTS call. getFirstWord can be implemented in the code-generator fairly easily on little-endian machines but it's too difficult to do it on the Sparc. *) fun wordFromInt (i: int): word = if LibrarySupport.isShortInt i then RunCall.unsafeCast i else getFirstWord i end (* The maximum word value is given by the smallest integer power of two which when converted to word gives zero, less one. *) val zero = (* 0w *) wordFromInt 0 local fun power2' n 0 = n | power2' n i = power2' (2*n) (i-1) val power2 = power2' 1 fun findlong i = if wordFromInt(power2 i) = zero then i else findlong(i+1) in val wordSize = findlong 1 val maxWordP1 = power2 wordSize val maxWord = maxWordP1 - 1 val maxLongWord = power2 (wordSize*2) - 1 val maxWordAsWord = wordFromInt maxWord val wordSizeAsWord = wordFromInt wordSize end val wordeq: word*word->bool = RunCall.run_call2 RuntimeCalls.POLY_SYS_word_eq; structure Words :> sig (* The result signatures are quite complicated because the general signature includes LargeWord.word and Word.word explicitly in a few cases. We have to make variants of them to handle the fact that we are declaring Word and LargeWord. *) type smallword = word type largeword structure Word: sig type word = word val wordSize : int val toLarge : word -> largeword val toLargeX : word -> largeword val toLargeWord : word -> largeword val toLargeWordX : word -> largeword val fromLarge : largeword -> word val fromLargeWord : largeword -> word val toLargeInt : word -> LargeInt.int val toLargeIntX : word -> LargeInt.int val fromLargeInt : LargeInt.int -> word val toInt : word -> Int.int val toIntX : word -> Int.int val fromInt : Int.int -> word val orb : (word * word) -> word val xorb : (word * word) -> word val andb : (word * word) -> word val notb : word -> word val << : (word * word) -> word val >> : (word * word) -> word val ~>> : (word * word) -> word val + : (word * word) -> word val - : (word * word) -> word val * : (word * word) -> word val div : (word * word) -> word val mod : (word * word) -> word val ~ : word -> word val compare : (word * word) -> General.order val > : (word * word) -> bool val < : (word * word) -> bool val >= : (word * word) -> bool val <= : (word * word) -> bool val min : (word * word) -> word val max : (word * word) -> word val fmt : StringCvt.radix -> word -> string val toString : word -> string val fromString : string -> word option val scan : StringCvt.radix -> (char, 'a) StringCvt.reader -> 'a -> (word * 'a) option end and LargeWord: sig eqtype word val wordSize : int val toLarge : word -> word val toLargeX : word -> word val toLargeWord : word -> word val toLargeWordX : word -> word val fromLarge : word -> word val fromLargeWord : word -> word val toLargeInt : word -> LargeInt.int val toLargeIntX : word -> LargeInt.int val fromLargeInt : LargeInt.int -> word val toInt : word -> Int.int val toIntX : word -> Int.int val fromInt : Int.int -> word val orb : (word * word) -> word val xorb : (word * word) -> word val andb : (word * word) -> word val notb : word -> word val << : (word * smallword) -> word val >> : (word * smallword) -> word val ~>> : (word * smallword) -> word val + : (word * word) -> word val - : (word * word) -> word val * : (word * word) -> word val div : (word * word) -> word val mod : (word * word) -> word val ~ : word -> word val compare : (word * word) -> General.order val > : (word * word) -> bool val < : (word * word) -> bool val >= : (word * word) -> bool val <= : (word * word) -> bool val min : (word * word) -> word val max : (word * word) -> word val fmt : StringCvt.radix -> word -> string val toString : word -> string val fromString : string -> word option val scan : StringCvt.radix -> (char, 'a) StringCvt.reader -> 'a -> (word * 'a) option end (* These sharing constraints ensure that although we are using opaque matching we retain the correct sharing. *) sharing type LargeWord.word = largeword (* Abstract *) end = struct type largeword = largeword and smallword = word structure Word = struct (* Word.word is represented using the short (tagged) integer format. It is, though, unsigned so large word values are represented in the same form as negative integers. *) type word = word val fromInt = wordFromInt and wordSize = wordSize (* Conversion to signed integer is simple. *) val toIntX: word->int = RunCall.unsafeCast (* Conversion to unsigned integer has to treat values with the sign bit set specially. *) fun toInt x = let val signed = toIntX x in if signed < 0 then maxWordP1+signed else signed end fun scan radix getc src = case scanWord radix getc src of NONE => NONE | SOME(res, src') => if res > maxWord then raise General.Overflow else SOME(fromInt res, src') (* TODO: Implement this directly? *) val fromString = StringCvt.scanString (scan StringCvt.HEX) val toLargeInt : word -> LargeInt.int = toInt and toLargeIntX : word -> LargeInt.int = toIntX and fromLargeInt : LargeInt.int -> word = fromInt infix >> << ~>> val op + : word*word->word = RunCall.run_call2 POLY_SYS_plus_word and op - : word*word->word = RunCall.run_call2 POLY_SYS_minus_word and op * : word*word->word = RunCall.run_call2 POLY_SYS_mul_word and op div : word*word->word = RunCall.run_call2 POLY_SYS_div_word and op mod : word*word->word = RunCall.run_call2 POLY_SYS_mod_word and orb : word*word->word = RunCall.run_call2 POLY_SYS_or_word and andb : word*word->word = RunCall.run_call2 POLY_SYS_and_word and xorb : word*word->word = RunCall.run_call2 POLY_SYS_xor_word and op >> : word*word->word = RunCall.run_call2 POLY_SYS_shift_right_word and op << : word*word->word = RunCall.run_call2 POLY_SYS_shift_left_word and op ~>> : word*word->word = RunCall.run_call2 POLY_SYS_shift_right_arith_word local val signShift = fromInt(Int.-(wordSize,1)) in fun toLargeWord x = {hi=zero, lo=x} and toLargeWordX x = (* Sign extend. *) {hi = x ~>> signShift, lo = x} and fromLargeWord (x: largeword) = #lo x fun ~ x = zero - x end val toLarge = toLargeWord and toLargeX = toLargeWordX and fromLarge = fromLargeWord fun notb x = xorb(maxWordAsWord, x) (* We can format the result using the integer format function. *) fun fmt radix i = Int.fmt radix (toInt i) val toString = fmt StringCvt.HEX val op > : word*word->bool = RunCall.run_call2 POLY_SYS_word_gtr and op < : word*word->bool = RunCall.run_call2 POLY_SYS_word_lss and op >= : word*word->bool = RunCall.run_call2 POLY_SYS_word_geq and op <= : word*word->bool = RunCall.run_call2 POLY_SYS_word_leq fun compare (i, j) = if i < j then General.LESS else if i > j then General.GREATER else General.EQUAL fun min (i, j) = if i < j then i else j and max (i, j) = if i > j then i else j end (* Word *) structure LargeWord = struct type word = largeword val wordSize = 2*wordSize; (* As this is LargeWord we don't need to do anything here. *) fun toLargeWord x = x and toLargeWordX x = x and fromLargeWord x = x val toLarge = toLargeWord and toLargeX = toLargeWordX and fromLarge = fromLargeWord (* The values are treated as lo + 2^n * hi *) fun fromInt x = { lo = Word.fromInt x, hi = Word.fromInt (Int.div(x, maxWordP1)) } and toIntX { lo, hi } = Word.toInt lo + Word.toIntX hi * maxWordP1 and toInt { lo, hi } = Word.toInt lo + Word.toInt hi * maxWordP1 val toLargeInt = toInt val toLargeIntX = toIntX val fromLargeInt = fromInt fun scan radix getc src = case scanWord radix getc src of NONE => NONE | SOME(res, src') => if res > maxLongWord then raise General.Overflow else SOME(fromInt res, src') (* TODO: Implement this directly? *) val fromString = StringCvt.scanString (scan StringCvt.HEX) (* Logical operations are fairly simple. *) fun orb ({hi, lo}, {hi=hi', lo=lo'}) = {hi=Word.orb(hi, hi'), lo=Word.orb(lo, lo')} and xorb ({hi, lo}, {hi=hi', lo=lo'}) = {hi=Word.xorb(hi, hi'), lo=Word.xorb(lo, lo')} and andb ({hi, lo}, {hi=hi', lo=lo'}) = {hi=Word.andb(hi, hi'), lo=Word.andb(lo, lo')} and notb {hi, lo} = {hi=Word.notb hi, lo=Word.notb lo} (* Shifts are a bit more difficult. *) fun op << ({hi, lo}, x) = if Word.>=(x, wordSizeAsWord) then {hi=Word.<<(lo, Word.-(x, wordSizeAsWord)), lo=zero} else {lo= Word.<<(lo, x), hi = Word.orb(Word.<<(hi, x), Word.>>(lo, Word.-(wordSizeAsWord, x)))} and op >> ({hi, lo}, x) = if Word.>=(x, wordSizeAsWord) then {lo=Word.>>(hi, Word.-(x, wordSizeAsWord)), hi=zero} else {hi= Word.>>(hi, x), lo= Word.orb(Word.>>(lo, x), Word.<<(hi, Word.-(wordSizeAsWord, x)))} and op ~>> ({hi, lo}, x) = if Word.>=(x, wordSizeAsWord) then {lo=Word.~>>(hi, Word.-(x, wordSizeAsWord)), hi=Word.~>>(hi, wordSizeAsWord) (* Just leaves the sign bit. *)} else {hi= Word.~>>(hi, x), (* No sign propagation into low-order word. *) lo= Word.orb(Word.>>(lo, x), Word.<<(hi, Word.-(wordSizeAsWord, x)))} (* Arithmetic is most easily done just by converting to integer and back again. *) fun op + (x, y) = fromInt(Int.+(toInt x, toInt y)) and op - (x, y) = fromInt(Int.-(toInt x, toInt y)) and op * (x, y) = fromInt(Int.*(toInt x, toInt y)) and op div (x, y) = fromInt(Int.quot(toInt x, toInt y)) and op mod (x, y) = fromInt(Int.rem(toInt x, toInt y)) and ~ x = fromInt(Int.~(toInt x)) fun op > ({hi, lo}, {hi=hi', lo=lo'}) = case Word.compare (hi, hi') of General.GREATER => true | General.EQUAL => Word.>(lo, lo') | General.LESS => false and op < ({hi, lo}, {hi=hi', lo=lo'}) = case Word.compare (hi, hi') of General.GREATER => false | General.EQUAL => Word.<(lo, lo') | General.LESS => true and op >= ({hi, lo}, {hi=hi', lo=lo'}) = case Word.compare (hi, hi') of General.GREATER => true | General.EQUAL => Word.>=(lo, lo') | General.LESS => false and op <= ({hi, lo}, {hi=hi', lo=lo'}) = case Word.compare (hi, hi') of General.GREATER => false | General.EQUAL => Word.<=(lo, lo') | General.LESS => true and compare({hi, lo}, {hi=hi', lo=lo'}) = case Word.compare (hi, hi') of General.EQUAL => Word.compare(lo, lo') | compHi => compHi fun min (i, j) = if i < j then i else j and max (i, j) = if i > j then i else j (* We can format the result using the integer format function. *) fun fmt radix i = Int.fmt radix (toInt i) val toString = fmt StringCvt.HEX end; end (* Words *) (* Converter to word values. *) local structure Conversion = RunCall.Run_exception1 ( type ex_type = string; val ex_iden = EXC_conversion ); exception Conversion = Conversion.ex; (* The string may be either 0wnnn or 0wxXXX *) fun getRadix s = if String.size s > 2 andalso String.sub(s, 2) = #"x" then StringCvt.HEX else StringCvt.DEC fun convWord s = let val radix = getRadix s in case StringCvt.scanString (Words.Word.scan radix) s of NONE => raise Conversion "Invalid word constant" | SOME res => res end and convLarge s = let val radix = getRadix s in case StringCvt.scanString (Words.LargeWord.scan radix) s of NONE => raise Conversion "Invalid word constant" | SOME res => res end in (* Install this as a conversion function for word literals. Unlike other overloaded functions there's no need to ensure that overloaded conversion functions are installed at the top-level. The compiler has type "word" built in and will use this conversion function for literals of the form 0w... in preference to any other (e.g. for Word8.word) if unification does not give an explicit type. However, because LargeWord.word is abstract we have to install the convertor outside the structure. *) val unused: unit = RunCall.addOverload convWord "convWord" val unused: unit = RunCall.addOverload convLarge "convWord" end local (* Install the pretty printer for Word.word *) fun prettyWord(p, _, _, _) _ _ x = p("0wx" ^ Words.Word.toString x) and prettyLarge(p, _, _, _) _ _ x = p("0wx" ^ Words.LargeWord.toString x) in val () = PolyML.install_pp prettyWord val () = PolyML.install_pp prettyLarge end in structure Word = Words.Word; structure LargeWord = Words.LargeWord; end; (* Add the overloaded operators. Do this outside the structure so that we can capture the inline code. We've already done this for word (=Word.word) in the prelude. *) RunCall.addOverload LargeWord.~ "~"; RunCall.addOverload LargeWord.+ "+"; RunCall.addOverload LargeWord.- "-"; RunCall.addOverload LargeWord.* "*"; RunCall.addOverload LargeWord.div "div"; RunCall.addOverload LargeWord.mod "mod"; RunCall.addOverload LargeWord.< "<"; RunCall.addOverload LargeWord.> ">"; RunCall.addOverload LargeWord.<= "<="; RunCall.addOverload LargeWord.>= ">="; (* This signature is defined in terms of Word and LargeWord so we have to define it after the structures. *) signature WORD = sig eqtype word val wordSize : int val toLarge : word -> LargeWord.word val toLargeX : word -> LargeWord.word val toLargeWord : word -> LargeWord.word val toLargeWordX : word -> LargeWord.word val fromLarge : LargeWord.word -> word val fromLargeWord : LargeWord.word -> word val toLargeInt : word -> LargeInt.int val toLargeIntX : word -> LargeInt.int val fromLargeInt : LargeInt.int -> word val toInt : word -> Int.int val toIntX : word -> Int.int val fromInt : Int.int -> word val orb : (word * word) -> word val xorb : (word * word) -> word val andb : (word * word) -> word val notb : word -> word val << : (word * Word.word) -> word val >> : (word * Word.word) -> word val ~>> : (word * Word.word) -> word val + : (word * word) -> word val - : (word * word) -> word val * : (word * word) -> word val div : (word * word) -> word val mod : (word * word) -> word val ~ : word -> word val compare : (word * word) -> General.order val > : (word * word) -> bool val < : (word * word) -> bool val >= : (word * word) -> bool val <= : (word * word) -> bool val min : (word * word) -> word val max : (word * word) -> word val fmt : StringCvt.radix -> word -> string val toString : word -> string val fromString : string -> word option val scan : StringCvt.radix -> (char, 'a) StringCvt.reader -> (word, 'a) StringCvt.reader end; polyml.5.2.1/basis/LibraryIOSupport.sml0000644000175000017500000003612711062466571017064 0ustar daviddavid(* Title: Standard Basis Library: IO Support functions Copyright David C.J. Matthews 2000 This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* This function provides wrappers for the RTS file descriptors to construct TextPrimIO and BinPrimIO readers and writers. It is used both from the TextIO and BinIO structures and also from the Windows and Unix structures to wrap up pipes. *) structure LibraryIOSupport: sig val wrapInFileDescr : { fd : OS.IO.iodesc, name : string, initBlkMode : bool } -> TextPrimIO.reader val wrapOutFileDescr : { fd : OS.IO.iodesc, name : string, appendMode : bool, initBlkMode : bool, chunkSize : int } -> TextPrimIO.writer val wrapBinInFileDescr : { fd : OS.IO.iodesc, name : string, initBlkMode : bool } -> BinPrimIO.reader val wrapBinOutFileDescr : { fd : OS.IO.iodesc, name : string, appendMode : bool, initBlkMode : bool, chunkSize : int } -> BinPrimIO.writer val readBinVector: OS.IO.iodesc * int -> Word8Vector.vector val readBinArray: OS.IO.iodesc * Word8ArraySlice.slice -> int val writeBinVec: OS.IO.iodesc * Word8VectorSlice.slice -> int val writeBinArray: OS.IO.iodesc * Word8ArraySlice.slice -> int val nonBlocking : ('a->'b) -> 'a ->'b option val protect: Thread.Mutex.mutex -> ('a -> 'b) -> 'a -> 'b end = struct (* open IO *) open RuntimeCalls type address = LibrarySupport.address type fileDescr = OS.IO.iodesc (* Called after any exception in the lower level reader or writer to map any exception other than Io into Io. *) (* We have to declare doIo separately depending on the types of the arguments. It's possible to get round this but that would result in an extra call to run_call3 for each io call. *) local val doIo: int*int*string -> fileDescr = RunCall.run_call3 POLY_SYS_io_dispatch in val stdInDesc: fileDescr = doIo(0, 0, "") and stdOutDesc: fileDescr = doIo(1, 0, "") and stdErrDesc: fileDescr = doIo(2, 0, "") fun sys_open_in_text name = doIo(3, 0, name) and sys_open_in_bin name = doIo(4, 0, name) and sys_open_out_text name = doIo(5, 0, name) and sys_open_out_bin name = doIo(6, 0, name) and sys_open_append_text name = doIo(13, 0, name) and sys_open_append_bin name = doIo(14, 0, name) end local val doIo = RunCall.run_call3 POLY_SYS_io_dispatch in fun sys_close (strm: fileDescr): unit = doIo(7, strm, 0) and sys_block_in(strm: fileDescr): unit = doIo(27, strm, 0) and sys_block_out(strm: fileDescr): unit = doIo(29, strm, 0) end local val doIo = RunCall.run_call3 POLY_SYS_io_dispatch in fun sys_read_text (strm: fileDescr, vil: address*word*word): int = doIo(8, strm, vil) fun sys_write_text (strm: fileDescr, vil: address*word*word): int = doIo(11, strm, vil) fun sys_read_bin (strm: fileDescr, vil: address*word*word): int = doIo(9, strm, vil) fun sys_write_bin (strm: fileDescr, vil: address*word*word): int = doIo(12, strm, vil) end local val doIo = RunCall.run_call3 POLY_SYS_io_dispatch in fun sys_read_string (strm: fileDescr, len: int): string = doIo(10, strm, len) end local val doIo = RunCall.run_call3 POLY_SYS_io_dispatch in fun readBinVector (strm: fileDescr, len: int): Word8Vector.vector = doIo(26, strm, len) end local val doIo = RunCall.run_call3 POLY_SYS_io_dispatch in fun sys_get_buffsize (strm: fileDescr): int = doIo(15, strm, 0) and sys_can_input(strm: fileDescr): int = doIo(16, strm, 0) and sys_can_output(strm: fileDescr): int = doIo(28, strm, 0) and sys_avail(strm: fileDescr): int = doIo(17, strm, 0) and sys_get_pos(strm: fileDescr): int = doIo(18, strm, 0) and sys_set_pos(strm: fileDescr, p: int): unit = (doIo(19, strm, p); ()) and sys_end_pos(strm: fileDescr): int = doIo(20, strm, 0) and sys_get_iodesc(strm: fileDescr): int = doIo(30, strm, 0) end local (* Find out the error which will be generated if a stream in non-blocking mode would block. *) val eAgain = OS.syserror "EAGAIN" and eWouldBlock = OS.syserror "EWOULDBLOCK" and eInProgress = OS.syserror "EINPROGRESS" in (* If evaluating the function raises EAGAIN or EWOULDBLOCK we return NONE otherwise if it succeeds return SOME result. Pass other exceptions back to the caller. *) fun nonBlocking f arg = SOME(f arg) handle exn as OS.SysErr(_, SOME e) => if (case eAgain of SOME again => e = again | NONE => false) then NONE else if (case eWouldBlock of SOME wouldBlock => e = wouldBlock | NONE => false) then NONE else if (case eInProgress of SOME inProgress => e = inProgress | NONE => false) then NONE else raise exn end val wordSize : word = LibrarySupport.wordSize; (* Find out if random access is permitted and return the appropriate values. *) fun getRandAccessFns n = let val isRandomAccess = ((sys_get_pos n; true) handle _ => false) val getPos = if isRandomAccess then SOME(fn () => sys_get_pos n) else NONE val setPos = if isRandomAccess then SOME(fn p => sys_set_pos(n, p)) else NONE val endPos = if isRandomAccess then SOME(fn () => sys_end_pos n) else NONE in (getPos, setPos, endPos) end fun writeBinArray (n: fileDescr, slice: Word8ArraySlice.slice): int = let val (buf, i, len) = Word8ArraySlice.base slice val LibrarySupport.Word8Array.Array(_, v) = buf val iW = LibrarySupport.unsignedShortOrRaiseSubscript i val lenW = LibrarySupport.unsignedShortOrRaiseSubscript len in sys_write_bin(n, (v, iW, lenW)) end fun readBinArray (n: fileDescr, slice: Word8ArraySlice.slice): int = let val (buf, i, len) = Word8ArraySlice.base slice val LibrarySupport.Word8Array.Array(_, v) = buf val lenW = LibrarySupport.unsignedShortOrRaiseSubscript len val iW = LibrarySupport.unsignedShortOrRaiseSubscript i in sys_read_bin(n, (v, iW, lenW)) end (* Write out a string using the underlying call. Note that we have to add the size of a word to the offsets to skip the length word. The underlying call deals with the special case of a single character string where the "string" is actually the character itself. *) fun writeBinVec (n: fileDescr, slice: Word8VectorSlice.slice): int = let val (buf, i, len) = Word8VectorSlice.base slice val LibrarySupport.Word8Array.Vector v = buf val iW = LibrarySupport.unsignedShortOrRaiseSubscript i val lenW = LibrarySupport.unsignedShortOrRaiseSubscript len in sys_write_bin(n, (v, iW+wordSize, lenW)) end (* Create the primitive IO functions and add the higher layers. For all file descriptors other than standard input we look at the stream to see if we can do non-blocking input and/or random access. Standard input, though is persistent and so we have to take a more restrictive view. *) fun wrapInFileDescr{ fd, name, initBlkMode } = let fun readArray (slice: CharArraySlice.slice): int = let val (buf, i, len) = CharArraySlice.base slice val LibrarySupport.CharArray.Array(_, v) = buf val iW = LibrarySupport.unsignedShortOrRaiseSubscript i val lenW = LibrarySupport.unsignedShortOrRaiseSubscript len in sys_read_text(fd, (v, iW, lenW)) end fun readVector l = sys_read_string(fd, l) (* If we have opened the stream in non-blocking mode readVec and readArray will raise an exception if they would block. We have to handle that. The blocking functions can be constructed using block_in but that should be done by augmentReader. *) val (readVec, readArr, readVecNB, readArrNB) = if initBlkMode then (SOME readVector, SOME readArray, NONE, NONE) else (NONE, NONE, SOME(nonBlocking readVector), SOME(nonBlocking readArray)) (* Don't allow random access on stdIn. The reason is that we create stdIn when we compile TextIO yet this stream is persistent (unlike every other stream). *) val (getPos, setPos, endPos) = if sys_get_iodesc fd <= 2 then (NONE, NONE, NONE) else getRandAccessFns fd (* Unlike the other functions "avail" is a function returning an option, not an optional function. *) fun avail () = let (* If we get an exception or a negative number return NONE. *) val v = sys_avail fd handle _ => ~1 in if v >= 0 then SOME v else NONE end val textPrimRd = TextPrimIO.RD { name = name, chunkSize = sys_get_buffsize fd, readVec = readVec, readArr = readArr, readVecNB = readVecNB, readArrNB = readArrNB, block = SOME(fn () => sys_block_in fd), canInput = SOME (fn () => sys_can_input fd > 0), avail = avail, getPos = getPos, setPos = setPos, endPos = endPos, verifyPos = getPos, close = fn () => sys_close fd, ioDesc = (SOME fd) : OS.IO.iodesc option } in TextPrimIO.augmentReader textPrimRd end fun wrapOutFileDescr {fd, name, appendMode, initBlkMode, chunkSize} = let fun writeArray (slice: CharArraySlice.slice): int = let val (buf, i, len) = CharArraySlice.base slice val LibrarySupport.CharArray.Array(_, v) = buf val iW = LibrarySupport.unsignedShortOrRaiseSubscript i val lenW = LibrarySupport.unsignedShortOrRaiseSubscript len in sys_write_text(fd, (v, iW, lenW)) end (* Write out a string using the underlying call. Note that we have to add the size of a word to the offsets to skip the length word. The underlying call deals with the special case of a single character string where the "string" is actually the character itself. *) fun writeVector (slice: CharVectorSlice.slice): int = let val (buf, i, len) = CharVectorSlice.base slice val v = RunCall.unsafeCast buf val iW = LibrarySupport.unsignedShortOrRaiseSubscript i val lenW = LibrarySupport.unsignedShortOrRaiseSubscript len in sys_write_text(fd, (v, iW+wordSize, lenW)) end (* Set up the writers depending on whether the stream is in non-blocking mode or not. *) val (writeVec, writeArr, writeVecNB, writeArrNB) = if initBlkMode then (SOME writeVector, SOME writeArray, NONE, NONE) else (NONE, NONE, SOME(nonBlocking writeVector), SOME(nonBlocking writeArray)) (* Random access is provided if getPos works except that we don't allow it for standard output and standard error at all. *) val (getPos, setPos, endPos) = if sys_get_iodesc fd <= 2 then (NONE, NONE, NONE) else getRandAccessFns fd (* If we have opened the stream for append we will always write to the end of the stream so setPos won't work. *) val setPos = if appendMode then NONE else setPos val textPrimWr = TextPrimIO.WR { name = name, chunkSize = chunkSize, writeVec = writeVec, writeArr = writeArr, writeVecNB = writeVecNB, writeArrNB = writeArrNB, block = SOME(fn () => sys_block_out fd), canOutput = SOME(fn () => sys_can_output fd > 0), getPos = getPos, setPos = setPos, endPos = endPos, verifyPos = getPos, close = fn () => sys_close fd, ioDesc = (SOME fd) : OS.IO.iodesc option } in TextPrimIO.augmentWriter textPrimWr end fun wrapBinInFileDescr{fd, name, initBlkMode} = let fun readVector l = readBinVector(fd, l) and readArray b = readBinArray(fd, b) (* If we have opened the stream in non-blocking mode readVec and readArray will raise an exception if they would block. We have to handle that. The blocking functions can be constructed using block_in but that should be done by augmentReader. *) val (readVec, readArr, readVecNB, readArrNB) = if initBlkMode then (SOME readVector, SOME readArray, NONE, NONE) else (NONE, NONE, SOME(nonBlocking readVector), SOME(nonBlocking readArray)) (* Random access is provided if getPos works. *) val (getPos, setPos, endPos) = getRandAccessFns fd (* Unlike the other functions "avail" is a function returning an option, not an optional function. *) fun avail () = let (* If we get an exception or a negative number return NONE. *) val v = sys_avail fd handle _ => ~1 in if v >= 0 then SOME v else NONE end val binPrimRd = BinPrimIO.RD { name = name, chunkSize = sys_get_buffsize fd, readVec = readVec, readArr = readArr, readVecNB = readVecNB, readArrNB = readArrNB, block = SOME(fn () => sys_block_in fd), canInput = SOME(fn() =>sys_can_input fd > 0), avail = avail, getPos = getPos, setPos = setPos, endPos = endPos, verifyPos = getPos, close = fn() => sys_close fd, ioDesc = SOME fd } in BinPrimIO.augmentReader binPrimRd end fun wrapBinOutFileDescr{fd, name, appendMode, initBlkMode, chunkSize} = let fun writeArray b = writeBinArray(fd, b) and writeVector b = writeBinVec(fd, b) (* Set up the writers depending on whether the stream is in non-blocking mode or not. *) val (writeVec, writeArr, writeVecNB, writeArrNB) = if initBlkMode then (SOME writeVector, SOME writeArray, NONE, NONE) else (NONE, NONE, SOME(nonBlocking writeVector), SOME(nonBlocking writeArray)) (* Random access is provided if getPos works. *) val (getPos, setPos, endPos) = getRandAccessFns fd (* If we have opened the stream for append we will always write to the end of the stream so setPos won't work. *) val setPos = if appendMode then NONE else setPos val binPrimWr = BinPrimIO.WR { name = name, chunkSize = chunkSize, writeVec = writeVec, writeArr = writeArr, writeVecNB = writeVecNB, writeArrNB = writeArrNB, block = SOME(fn () => sys_block_out fd), canOutput = SOME(fn () => sys_can_output fd > 0), getPos = getPos, setPos = setPos, endPos = endPos, verifyPos = getPos, close = fn () => sys_close fd, ioDesc = SOME fd } in BinPrimIO.augmentWriter binPrimWr end (* Many of the IO functions need a mutex so we include this here. This applies a function while a mutex is being held. *) fun protect m f a = let open Thread.Thread Thread.Mutex (* Set this to handle interrupts synchronously except if we are blocking them. We don't want to get an asynchronous interrupt while we are actually locking or unlocking the mutex but if we have to block to do IO then we should allow an interrupt at that point. *) val oldAttrs = getAttributes() val () = case List.find (fn InterruptState _ => true | _ => false) oldAttrs of SOME(InterruptState InterruptDefer) => () | _ => setAttributes[InterruptState InterruptSynch]; val () = setAttributes[InterruptState InterruptSynch] val () = lock m val result = f a handle exn => (unlock m; setAttributes oldAttrs; raise exn) in unlock m; setAttributes oldAttrs; result end end; polyml.5.2.1/basis/LibrarySupport.sml0000644000175000017500000002143210506226524016617 0ustar daviddavid(* Title: Standard Basis Library: Support functions Copyright David C.J. Matthews 2000 This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* We need to execute these calls BEFORE compiling LibrarySupport if we want them to be compiled in as constants. *) structure MachineConstants = struct val bigEndian : bool = RunCall.run_call0 RuntimeCalls.POLY_SYS_is_big_endian (); val wordSize : word = RunCall.run_call0 RuntimeCalls.POLY_SYS_bytes_per_word (); end; structure LibrarySupport :> sig eqtype address (* eqtype so we can compare vectors. *) structure CharArray: sig datatype array = Array of word*address end structure Word8Array: sig datatype array = Array of word*address datatype vector = Vector of address val toString: address -> string and fromString: string -> address end val wordSize: word val bigEndian: bool val allocString: word -> string (* Create a mutable string. *) val allocBytes: word -> address val unsafeStringSub: string*word -> char val unsafeSubstring: string*word*word -> string val stringImplode: char list -> string val stringExplode: string * word * word -> char list val isShortString : string -> bool val isShortInt : int -> bool val unsignedShortOrRaiseSize: int -> word val unsignedShortOrRaiseSubscript: int -> word val sizeAsWord : string -> word end = struct type address = string (* Provide the implementation of CharArray.array, Word8Array.array and Word8Array.vector (= Word8Vector.vector) here so that they are available to the IO routines. *) structure CharArray = struct datatype array = Array of word*address end structure Word8Array = struct (* Using the Vector and Array constructors here does not add any overhead since they are compiled as identity functions. We need to use a datatype, though, in order to hide the representation. This is because we can't use opaque matching because we want to make use of the internal representation in the IO structures. *) datatype array = Array of word*address and vector = Vector of address fun toString s = s fun fromString s = s end open RuntimeCalls; (* for POLY_SYS and EXC numbers *) open MachineConstants; (* If a vector/string is short (i.e. has an integer tag) it must be the character itself rather than a pointer to a segment. *) val isShortString: string -> bool = RunCall.run_call1 POLY_SYS_is_short local val F_mutable_bytes : word = 0wx41; val byteMask : word = 0w255; val System_alloc: word*word*word->string = RunCall.run_call3 POLY_SYS_alloc_store val System_setb: string * word * char -> unit = RunCall.run_call3 POLY_SYS_assign_byte; val System_lock: string -> unit = RunCall.run_call1 POLY_SYS_lockseg; val System_loadb: string*word->char = RunCall.run_call2 POLY_SYS_load_byte; val And: word * word -> word = RunCall.run_call2 POLY_SYS_and_word; val SetLengthWord: string * word -> unit = RunCall.run_call2 POLY_SYS_set_string_length; val MemMove: string*word*string*word*word -> unit = RunCall.run_call5 POLY_SYS_move_bytes val >> : word * word -> word = RunCall.run_call2 POLY_SYS_shift_right_word; infix >> And; val maxString = RunCall.run_call2 RuntimeCalls.POLY_SYS_process_env (101, ()) (* These two functions are used to convert between single character strings and the character representation. *) val vecAsChar: string->char = RunCall.unsafeCast val charAsVec: char->string = RunCall.unsafeCast in val isShortInt: int -> bool = RunCall.run_call1 POLY_SYS_is_short (* The length of a string is always a short integer so we can simply cast the result of "size". *) fun sizeAsWord(s: string) : word = RunCall.unsafeCast (size s) fun unsignedShortOrRaiseSize (i: int): word = if isShortInt i andalso i >= 0 then RunCall.unsafeCast i else raise Size fun unsignedShortOrRaiseSubscript (i: int): word = if isShortInt i andalso i >= 0 then RunCall.unsafeCast i else raise Subscript fun allocBytes bytes : address = let val words : word = if bytes = 0w0 then 0w1 (* Zero-sized objects are not allowed. *) else if bytes > maxString (* The maximum string size is slightly smaller than the maximum array size because strings have a length word. That means that System_alloc will not raise Size if "bytes" size is between maxString and maxString+3. It seems best to use the same maximum size for CharArray/Word8Array and for String/Word8Vector so we need to check here. *) then raise Size else (bytes + wordSize - 0w1) div wordSize in System_alloc(words, F_mutable_bytes, 0w0) end (* Allocate store for the string and set the first word to contain the length and the rest zero. *) fun allocString charsW = let (* The space is the number of characters plus space for the length word plus rounding. *) val words : word = (charsW + 0w2 * wordSize - 0w1) div wordSize (* We are relying on the allocator initialising the store since we only copy as many bytes as we have in the string, possibly leaving bytes in the last word unset. Generally that wouldn't be a problem, since we will use the string length word to find out how many real characters there are, except in the case of the structure equality function. It uses the segment length word and compares the whole of each word so we must ensure that two equal strings are equal in every WORD including any unused bytes at the end. It might be faster if we didn't want to initialise every byte to simply zero the last word of the segment. *) val vec = System_alloc(words, F_mutable_bytes, 0w0) handle Range => raise General.Size in (* Set the length word. Since this is untagged we can't simply use assign_word.*) SetLengthWord(vec, charsW); vec end (* We need implode in StringCvt so we define it here rather than in String. *) fun stringImplode [] : string = "" | stringImplode (L as (H::_)) = let (* How many characters do we have to implode? *) val listLength = length L (* In practice we could never make a list with a combined length which was a long integer but we still check it here in unsignedShortOrRaiseSize. *) val chars: word = unsignedShortOrRaiseSize listLength in if chars = 0w1 then str H else let val dest = allocString chars; fun copy (i, []:char list) = () | copy (i, H :: T) = ( System_setb (dest, i, H); copy (i + 0w1, T) ) in copy (wordSize, L); System_lock dest; (* reset mutable flag *) dest end end (* We use stringExplode in String and Substring. *) fun stringExplode (s: string, i: word, l: word) : char list = let fun exp_str (num, res) = if num = 0w0 then res else exp_str (num - 0w1, System_loadb(s, num+i-0w1+wordSize) :: res) in (* Handle the special case of a single character string which is represented by the character itself. N.B. because we use this function to explode substrings as well as whole strings the test here needs to be whether the base string is short not whether l is one. If l is zero we use exp_str which immediately returns nil. *) if isShortString s andalso l <> 0w0 then [ vecAsChar s ] else exp_str (l, []) end (* We want this in both String and Substring. *) fun unsafeSubstring(s: string, i: word, l: word) : string = let val baseLen = sizeAsWord s (* Length of base string. *) in if i = 0w0 andalso l = baseLen then s else if l = 0w0 then "" (* Empty string. *) else if l = 0w1 (* Result is a single character string (and s isn't). *) then charAsVec(System_loadb(s, i + wordSize)) else let (* Multiple character string. *) val vec = allocString l in MemMove(s, wordSize+i, vec, wordSize, l); System_lock vec; vec end end (* This can be used where we have already checked the range. *) fun unsafeStringSub(s: string, i: word): char = if isShortString s then RunCall.unsafeCast s else System_loadb(s, i + wordSize); end end; polyml.5.2.1/basis/List.sml0000644000175000017500000001375610313043324014532 0ustar daviddavid(* Title: Standard Basis Library: List Structure Author: David Matthews Copyright David Matthews 1999, 2005 This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* G&R 2004 status: Updated. *) signature LIST = sig datatype list = datatype list (* G&R include the definition of list below in their "Interface". This is illegal. *) (*datatype 'a list = nil | :: of 'a * 'a list *) exception Empty val null : 'a list -> bool val length : 'a list -> int val @ : ('a list * 'a list) -> 'a list val concat : 'a list list -> 'a list val revAppend : ('a list * 'a list) -> 'a list val tabulate : (int * (int -> 'a)) -> 'a list val hd : 'a list -> 'a val tl : 'a list -> 'a list val last : 'a list -> 'a val getItem : 'a list -> ('a * 'a list) option val nth : ('a list * int) -> 'a val take : ('a list * int) -> 'a list val drop : ('a list * int) -> 'a list val rev : 'a list -> 'a list val app : ('a -> unit) -> 'a list -> unit val map : ('a -> 'b) -> 'a list -> 'b list val mapPartial : ('a -> 'b option) -> 'a list -> 'b list val find : ('a -> bool) -> 'a list -> 'a option val filter : ('a -> bool) -> 'a list -> 'a list val partition : ('a -> bool) -> 'a list -> ('a list * 'a list) val foldl : (('a * 'b) -> 'b) -> 'b -> 'a list -> 'b val foldr : (('a * 'b) -> 'b) -> 'b -> 'a list -> 'b val exists : ('a -> bool) -> 'a list -> bool val all : ('a -> bool) -> 'a list -> bool val collate: ('a * 'a -> order) -> 'a list * 'a list -> order end; structure List: LIST = struct datatype list = datatype list exception Empty fun null [] = true | null (_::_) = false val length = length (* Declared in prelude. *) (* ... fun nil @ M = M (* append *) | (x::L) @ M = x :: (L @ M); ... *) (* Dave's improved(?) version SPF 10/2/94 *) (* Taken from the prelude. The idea is to avoid rebuilding the list if the second list is empty. *) fun x @ nil = x (* append *) | x @ y = let fun app nil = y | app (a :: b) = a :: app b in app x end; fun hd (a::_) = a | hd _ = raise Empty and tl (_::a) = a | tl _ = raise Empty (* TODO: We could avoid the test for nil in the recursive cases. *) fun last [] = raise Empty | last [a] = a | last (_::b) = last b fun getItem [] = NONE | getItem (a::b) = SOME(a, b) (* We could raise subscript immediately if i < 0 and we probably would have to if we were using fixed precision arithmetic. *) fun nth([], _) = raise General.Subscript | nth(a::_, 0) = a | nth(_::l, i) = nth(l, i-1) (* TODO: Many of these functions involve recursing down the list and so require stack space proportional to the length of the list. Would it be more efficient to build the lists in reverse and then reverse the result? That would save on stack space at the expense of constructing the list twice. *) fun take(_, 0) = [] | take([], _) = raise General.Subscript | take(a::b, i) = a :: take(b, i-1) fun drop(l, 0) = l | drop([], _) = raise General.Subscript | drop(_::l, i) = drop(l, i-1) fun revAppend([], a) = a | revAppend(x::y, a) = revAppend(y, x::a) fun rev l = revAppend(l, []) fun concat [] = [] | concat (a::b) = a @ concat b fun app f [] = () | app f (h::t) = (f h; app f t) fun map f [] = [] | map f (a::b) = f a :: map f b; fun mapPartial f [] = [] | mapPartial f (a::b) = case f a of SOME r => r :: mapPartial f b | NONE => mapPartial f b fun find f [] = NONE | find f (a::b) = if f a then SOME a else find f b fun filter f [] = [] | filter f (a::b) = if f a then a :: filter f b else filter f b (* This is defined to evaluate f from left to right. *) (* TODO: This involves returning a pair and creating new pairs which allocates storage in Poly/ML. Is there a more efficient implementation? e.g. recurse down the list and then reverse it. *) fun partition f [] = ([], []) | partition f (a::b) = let val test = f a and (x, y) = partition f b in if test then (a::x, y) else (x, a::y) end fun foldl f b [] = b | foldl f b (x::y) = foldl f (f(x, b)) y fun foldr f b [] = b | foldr f b (x::y) = f(x, foldr f b y) fun exists f [] = false | exists f (a::b) = if f a then true else exists f b fun all f [] = true | all f (a::b) = if f a then all f b else false (* tabulate a function. Rewritten again this time using an array. *) fun tabulate(n, f) = let val a = Array.tabulate(n, f) in Array.foldr (op ::) [] a end (* Lexicographic comparison. *) fun collate cmp ([], []) = General.EQUAL | collate cmp ([], _) = General.LESS | collate cmp (_, []) = General.GREATER | collate cmp (a::b, c::d) = (case cmp (a, c) of General.EQUAL => collate cmp (b, d) | notEqual => notEqual) end; (* Values available at the top level. *) exception Empty = List.Empty val null : 'a list -> bool = List.null val hd : 'a list -> 'a = List.hd val tl : 'a list -> 'a list = List.tl val length : 'a list -> int = List.length val rev : 'a list -> 'a list = List.rev val op @ : ('a list * 'a list) -> 'a list = List.@ val app : ('a -> unit) -> 'a list -> unit = List.app val map : ('a -> 'b) -> 'a list -> 'b list = List.map val foldr: ('a*'b->'b)-> 'b -> 'a list -> 'b = List.foldr val foldl: ('a*'b->'b)-> 'b -> 'a list -> 'b = List.foldl; polyml.5.2.1/basis/ListPair.sml0000644000175000017500000000736610313043324015346 0ustar daviddavid(* Title: Standard Basis Library: ListPair Structure Author: David Matthews Copyright David Matthews 1999, 2005 This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* G&R 2004 status: Done. *) signature LIST_PAIR = sig exception UnequalLengths val zip : ('a list * 'b list) -> ('a * 'b) list val zipEq : ('a list * 'b list) -> ('a * 'b) list val unzip : ('a * 'b) list -> ('a list * 'b list) val app : ('a * 'b -> unit) -> ('a list * 'b list) -> unit val appEq : ('a * 'b -> unit) -> ('a list * 'b list) -> unit val map : ('a * 'b -> 'c) -> ('a list * 'b list) -> 'c list val mapEq : ('a * 'b -> 'c) -> ('a list * 'b list) -> 'c list val foldl : (('a * 'b * 'c) -> 'c) -> 'c -> ('a list * 'b list) -> 'c val foldr : (('a * 'b * 'c) -> 'c) -> 'c -> ('a list * 'b list) -> 'c val foldlEq : (('a * 'b * 'c) -> 'c) -> 'c -> ('a list * 'b list) -> 'c val foldrEq : (('a * 'b * 'c) -> 'c) -> 'c -> ('a list * 'b list) -> 'c val all : ('a * 'b -> bool) -> ('a list * 'b list) -> bool val exists : ('a * 'b -> bool) -> ('a list * 'b list) -> bool val allEq : ('a * 'b -> bool) -> ('a list * 'b list) -> bool end; structure ListPair : LIST_PAIR = struct exception UnequalLengths fun zip (h::t, h'::t') = (h, h') :: zip(t, t') | zip (_, _) = [] (* Stop as soon as either list is exhausted. *) fun zipEq (h::t, h'::t') = (h, h') :: zipEq(t, t') | zipEq ([], []) = [] | zipEq (_, _) = raise UnequalLengths fun unzip ((a, b) :: l) = let (* TODO: This is quite inefficient in Poly/ML. It might be better to unzip each of the lists separately. *) val (x, y) = unzip l in (a :: x, b :: y) end | unzip [] = ([], []) fun map f (h::t, h'::t') = f(h, h') :: map f (t, t') | map f _ = [] fun mapEq f (h::t, h'::t') = f(h, h') :: mapEq f (t, t') | mapEq f ([], []) = [] | mapEq f _ = raise UnequalLengths fun app f (h::t, h'::t') = (f(h, h'); app f (t, t')) | app f _ = () fun appEq f (h::t, h'::t') = (f(h, h'); appEq f (t, t')) | appEq f ([], []) = () | appEq f _ = raise UnequalLengths fun foldl f b (h::t, h'::t') = foldl f (f(h, h', b)) (t, t') | foldl f b _ = b fun foldr f b (h::t, h'::t') = f(h, h', foldr f b (t, t')) | foldr f b _ = b fun foldlEq f b (h::t, h'::t') = foldlEq f (f(h, h', b)) (t, t') | foldlEq f b ([], []) = b | foldlEq f _ _ = raise UnequalLengths fun foldrEq f b (h::t, h'::t') = f(h, h', foldrEq f b (t, t')) | foldrEq f b ([], []) = b | foldrEq f _ _ = raise UnequalLengths fun exists f (h::t, h'::t') = if f(h, h') then true else exists f (t, t') | exists f _ = false (* all and allEq differ in the way they handle lists of different lengths. all returns true if the predicate holds up to the shorter of the lists whereas allEq returns false if the lists have different lengths. *) fun all f (h::t, h'::t') = if f(h, h') then all f (t, t') else false | all f _ = true (* Is it better to check the lengths first? *) fun allEq f (h::t, h'::t') = if f(h, h') then allEq f (t, t') else false | allEq f ([], []) = true | allEq f _ = false end; polyml.5.2.1/basis/MATH.sml0000644000175000017500000000253010313043324014334 0ustar daviddavid(* Title: Standard Basis Library: Math Signature. Author: David Matthews Copyright David Matthews 2000 This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* G&R 2004 status: checked, no change required. *) signature MATH = sig type real val pi : real val e : real val sqrt : real -> real val sin : real -> real val cos : real -> real val tan : real -> real val asin : real -> real val acos : real -> real val atan : real -> real val atan2 : (real * real) -> real val exp : real -> real val pow : (real * real) -> real val ln : real -> real val log10 : real -> real val sinh : real -> real val cosh : real -> real val tanh : real -> real end; polyml.5.2.1/basis/MONO_ARRAY.sml0000644000175000017500000000376210313043324015321 0ustar daviddavid(* Title: Standard Basis Library: Mono_Array signature Author: David Matthews Copyright David Matthews 1999, 2005 This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* G&R 2004 status: updated. *) signature MONO_ARRAY = sig eqtype array type elem type vector val maxLen : int val array : (int * elem) -> array val fromList : elem list -> array val vector: array -> vector val tabulate : (int * (int -> elem)) -> array val length : array -> int val sub : (array * int) -> elem val update : (array * int * elem) -> unit val copy : {src : array, dst : array, di : int} -> unit val copyVec : {src : vector, dst : array, di : int} -> unit val appi : ((int * elem) -> unit) -> array -> unit val app : (elem -> unit) -> array -> unit val foldli : ((int * elem * 'b) -> 'b) -> 'b -> array -> 'b val foldri : ((int * elem * 'b) -> 'b) -> 'b -> array -> 'b val foldl : ((elem * 'b) -> 'b) -> 'b -> array -> 'b val foldr : ((elem * 'b) -> 'b) -> 'b -> array -> 'b val modifyi : ((int * elem) -> elem) -> array -> unit val modify : (elem -> elem) -> array -> unit val findi: (int * elem -> bool) -> array -> (int * elem) option val find: (elem -> bool) -> array -> elem option val exists: (elem -> bool) -> array -> bool val all: (elem -> bool) -> array -> bool val collate: (elem * elem -> order) -> array * array -> order end; polyml.5.2.1/basis/MONO_ARRAY_SLICE.sml0000644000175000017500000000424210313043324016232 0ustar daviddavid(* Title: Standard Basis Library: MONO_ARRAY_SLICE signature Author: David Matthews Copyright David Matthews 2005 This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* G&R 2004 status: new. *) signature MONO_ARRAY_SLICE = sig type elem type array type slice type vector type vector_slice val length : slice -> int val sub : (slice * int) -> elem val update: slice * int * elem -> unit val full: array -> slice val slice: array * int * int option -> slice val subslice: slice * int * int option -> slice val base: slice -> array * int * int val vector: slice -> vector val copy : {src : slice, dst : array, di : int} -> unit val copyVec : {src : vector_slice, dst : array, di : int} -> unit val isEmpty: slice -> bool val getItem: slice -> (elem * slice) option val appi : ((int * elem) -> unit) -> slice -> unit val app : (elem -> unit) -> slice -> unit val modifyi : (int * elem -> elem) -> slice -> unit val modify : (elem -> elem) -> slice -> unit val foldli : ((int * elem * 'a) -> 'a) -> 'a -> slice -> 'a val foldri : ((int * elem * 'a) -> 'a) -> 'a -> slice -> 'a val foldl : ((elem * 'a) -> 'a) -> 'a -> slice -> 'a val foldr : ((elem * 'a) -> 'a) -> 'a -> slice -> 'a val findi: (int * elem -> bool) -> slice -> (int * elem) option val find: (elem -> bool) -> slice -> elem option val exists: (elem -> bool) -> slice -> bool val all: (elem -> bool) -> slice -> bool val collate: (elem * elem -> order) -> slice * slice -> order end; polyml.5.2.1/basis/MONO_VECTOR.sml0000644000175000017500000000362610313043324015444 0ustar daviddavid(* Title: Standard Basis Library: MONO_VECTOR signature Author: David Matthews Copyright David Matthews 1999, 2005 This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* G&R 2004 status: updated. *) signature MONO_VECTOR = sig type vector type elem val maxLen : int val fromList : elem list -> vector val tabulate : (int * (int -> elem)) -> vector val length : vector -> int val sub : (vector * int) -> elem val update: vector * int * elem -> vector val concat : vector list -> vector val mapi : ((int * elem) -> elem) -> vector -> vector val map : (elem -> elem) -> vector -> vector val appi : ((int * elem) -> unit) -> vector -> unit val app : (elem -> unit) -> vector -> unit val foldli : ((int * elem * 'a) -> 'a) -> 'a -> vector -> 'a val foldri : ((int * elem * 'a) -> 'a) -> 'a -> vector -> 'a val foldl : ((elem * 'a) -> 'a) -> 'a -> vector -> 'a val foldr : ((elem * 'a) -> 'a) -> 'a -> vector -> 'a val findi: (int * elem -> bool) -> vector -> (int * elem) option val find: (elem -> bool) -> vector -> elem option val exists: (elem -> bool) -> vector -> bool val all: (elem -> bool) -> vector -> bool val collate: (elem * elem -> order) -> vector * vector -> order end; polyml.5.2.1/basis/MONO_VECTOR_SLICE.sml0000644000175000017500000000400010313043324016346 0ustar daviddavid(* Title: Standard Basis Library: MONO_VECTOR_SLICE signature Author: David Matthews Copyright David Matthews 2005 This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* G&R 2004 status: new. *) signature MONO_VECTOR_SLICE = sig type vector type elem type slice val length : slice -> int val sub : (slice * int) -> elem val full: vector -> slice val slice: vector * int * int option -> slice val subslice: slice * int * int option -> slice val base: slice -> vector * int * int val vector: slice -> vector val concat: slice list -> vector val isEmpty: slice -> bool val getItem: slice -> (elem * slice) option val appi : ((int * elem) -> unit) -> slice -> unit val app : (elem -> unit) -> slice -> unit val mapi : ((int * elem) -> elem) -> slice -> vector val map : (elem -> elem) -> slice -> vector val foldli : ((int * elem * 'a) -> 'a) -> 'a -> slice -> 'a val foldri : ((int * elem * 'a) -> 'a) -> 'a -> slice -> 'a val foldl : ((elem * 'a) -> 'a) -> 'a -> slice -> 'a val foldr : ((elem * 'a) -> 'a) -> 'a -> slice -> 'a val findi: (int * elem -> bool) -> slice -> (int * elem) option val find: (elem -> bool) -> slice -> elem option val exists: (elem -> bool) -> slice -> bool val all: (elem -> bool) -> slice -> bool val collate: (elem * elem -> order) -> slice * slice -> order end; polyml.5.2.1/basis/NetHostDB.sml0000644000175000017500000001602310766426642015423 0ustar daviddavid(* Title: Standard Basis Library: NetHostDB and NetDB Structures and Signatures Author: David Matthews Copyright David Matthews 2000 This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* G&R 2004 status: no change *) signature NET_HOST_DB = sig eqtype in_addr eqtype addr_family type entry val name : entry -> string val aliases : entry -> string list val addrType : entry -> addr_family val addr : entry -> in_addr val addrs : entry -> in_addr list val getByName : string -> entry option val getByAddr : in_addr -> entry option val getHostName : unit -> string val scan : (char, 'a) StringCvt.reader -> (in_addr, 'a) StringCvt.reader val fromString : string -> in_addr option val toString : in_addr -> string end; signature NET_DB = sig eqtype net_addr type addr_family type entry val name : entry -> string val aliases : entry -> string list val addrType : entry -> addr_family val addr : entry -> net_addr val getByName : string -> entry option val getByAddr : net_addr * addr_family -> entry option val scan : (char, 'a) StringCvt.reader -> (net_addr, 'a) StringCvt.reader val fromString : string -> net_addr option val toString : net_addr -> string end; local fun power2 0 = 1 | power2 n = 2 * power2(n-1) val p32 = power2 32 val p24 = power2 24 val p16 = power2 16 val p8 = power2 8 fun scan getc src = let (* Read a number as either decimal, hex or octal up to the given limit. Stops when it reaches the limit or finds a character it doesn't recognise. *) fun readNum base acc limit src = let fun addDigit d src = let val n = case acc of SOME(n, _) => n | NONE => 0 val next = n*base + d in (* If we are below the limit we can continue. *) if next < limit then readNum base (SOME(next, src)) limit src else acc end in case getc src of NONE => acc | SOME(ch, src') => if Char.isDigit ch andalso ch < Char.chr(Char.ord #"0" + base) then addDigit (Char.ord ch - Char.ord #"0") src' else if base = 16 andalso (ch >= #"A" andalso ch <= #"F") then addDigit (Char.ord ch - Char.ord #"A" + 10) src' else if base = 16 andalso (ch >= #"a" andalso ch <= #"f") then addDigit (Char.ord ch - Char.ord #"a" + 10) src' else acc end (* Read a number. If it starts with 0x or 0X treat it as hex, otherwise if it starts with 0 treat as octal otherwise decimal. *) fun scanNum limit src = case getc src of NONE => NONE | SOME (#"0", src') => ( case getc src' of SOME(ch, src'') => if ch = #"x" orelse ch = #"X" then ( (* If it is invalid we have still read a zero so return that. *) case readNum 16 NONE limit src'' of NONE => SOME(0, src') | res => res ) else (* Octal - include the zero. *) readNum 8 NONE limit src' | NONE => SOME(0, src') (* Just the zero. *) ) | SOME (ch, _) => (* Treat it as a decimal number. *) readNum 10 NONE limit src fun scanAddr src limit i acc = case scanNum limit src of NONE => NONE | SOME(n, src') => let val res = acc*256 + n (* This is the accumulated result. *) in (* If the result is more than 24 bits or we've read all the sections we're finished. *) if res >= p24 orelse i = 1 then SOME(res, src') else case getc src' of SOME (#".", src'') => ( (* The limit for sections other than the first is 256. *) case scanAddr src'' 256 (i-1) res of NONE => SOME(res, src') (* Return what we had. *) | r => r ) | _ => SOME(res, src') (* Return what we've got. *) end in scanAddr src p32 4 (* Four sections in all. *) 0 end (* scan *) in structure NetHostDB :> NET_HOST_DB = struct type in_addr = int and addr_family = int type entry = string * string list * addr_family * in_addr list val name: entry -> string = #1 val aliases : entry -> string list = #2 val addrType : entry -> addr_family = #3 val addrs : entry -> in_addr list = #4 (* Addr returns the first address in the list. There should always be at least one entry. *) fun addr e = case addrs e of a :: _ => a | [] => raise OS.SysErr("No address returned", NONE) local val doCall: int*unit -> string = RunCall.run_call2 RuntimeCalls.POLY_SYS_network in fun getHostName () = doCall(0, ()) end local val doCall: int*string -> entry = RunCall.run_call2 RuntimeCalls.POLY_SYS_network in fun getByName s = SOME(doCall(1, s)) handle _ => NONE end local val doCall: int*int -> entry = RunCall.run_call2 RuntimeCalls.POLY_SYS_network in fun getByAddr n = SOME(doCall(2, n)) handle _ => NONE end val scan = scan and fromString = StringCvt.scanString scan fun toString n = let fun pr n i = (if i > 0 then pr (n div 256) (i-1) ^ "." else "") ^ Int.toString (n mod 256) in pr n 3 (* Always generate 4 numbers. *) end end; structure NetDB :> NET_DB where type addr_family = NetHostDB.addr_family = struct type net_addr = int and addr_family = NetHostDB.addr_family type entry = string * string list * addr_family * int val name: entry -> string = #1 val aliases : entry -> string list = #2 val addrType : entry -> addr_family = #3 val addr : entry -> net_addr = #4 local val doCall: int*string -> entry = RunCall.run_call2 RuntimeCalls.POLY_SYS_network in fun getByName s = SOME(doCall(9, s)) handle _ => NONE end local val doCall: int*(int*addr_family) -> entry = RunCall.run_call2 RuntimeCalls.POLY_SYS_network in fun getByAddr (n, af) = SOME(doCall(10, (n, af))) handle _ => NONE end (* The definition of NetDB.scan is very vague. Assume it's the same as NetHostDB. *) val scan = scan and fromString = StringCvt.scanString scan fun toString n = let fun pr n i = (if i > 0 then pr (n div 256) (i-1) ^ "." else "") ^ Int.toString (n mod 256) in pr n 3 (* Always generate 4 numbers. *) end end; end; local (* Install the pretty printer for NetHostDB.in_addr. This must be done outside the structure if we use opaque matching. *) fun printAddr(p, _, _, _) _ _ x = p(NetHostDB.toString x) fun printNet(p, _, _, _) _ _ x = p(NetDB.toString x) in val () = PolyML.install_pp printAddr val () = PolyML.install_pp printNet end polyml.5.2.1/basis/NetProtDB.sml0000644000175000017500000000316410313043325015411 0ustar daviddavid(* Title: Standard Basis Library: NetProtDB Structures and Signatures Author: David Matthews Copyright David Matthews 2000 This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* G&R 2004 status: checked, no change. *) signature NET_PROT_DB = sig type entry val name : entry -> string val aliases : entry -> string list val protocol : entry -> int val getByName : string -> entry option val getByNumber : int -> entry option end; structure NetProtDB :> NET_PROT_DB = struct type entry = string * string list * int val name: entry -> string = #1 val aliases : entry -> string list = #2 val protocol : entry -> int = #3 local val doCall: int*string -> entry = RunCall.run_call2 RuntimeCalls.POLY_SYS_network in fun getByName s = SOME(doCall(3, s)) handle _ => NONE end local val doCall: int*int -> entry = RunCall.run_call2 RuntimeCalls.POLY_SYS_network in fun getByNumber n = SOME(doCall(4, n)) handle _ => NONE end end; polyml.5.2.1/basis/NetServDB.sml0000644000175000017500000000411510313043325015401 0ustar daviddavid(* Title: Standard Basis Library: NetServDB Structures and Signatures Author: David Matthews Copyright David Matthews 2000 This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* G&R 2004 status: checked, no change. *) signature NET_SERV_DB = sig type entry val name : entry -> string val aliases : entry -> string list val port : entry -> int val protocol : entry -> string val getByName : string * string option -> entry option val getByPort : int * string option -> entry option end; structure NetServDB :> NET_SERV_DB = struct type entry = string * string list * int * string val name: entry -> string = #1 val aliases : entry -> string list = #2 val port : entry -> int = #3 val protocol : entry -> string = #4 local val doCall1: int*string -> entry = RunCall.run_call2 RuntimeCalls.POLY_SYS_network and doCall2: int*(string*string) -> entry = RunCall.run_call2 RuntimeCalls.POLY_SYS_network in fun getByName(s, NONE) = ( SOME(doCall1(5, s)) handle _ => NONE ) | getByName(s, SOME p) = ( SOME(doCall2(6, (s, p))) handle _ => NONE ) end local val doCall1: int*int -> entry = RunCall.run_call2 RuntimeCalls.POLY_SYS_network and doCall2: int*(int*string) -> entry = RunCall.run_call2 RuntimeCalls.POLY_SYS_network in fun getByPort(n, NONE) = ( SOME(doCall1(7, n)) handle _ => NONE ) | getByPort(n, SOME p) = ( SOME(doCall2(8, (n, p))) handle _ => NONE ) end end; polyml.5.2.1/basis/OS.sml0000644000175000017500000010633711003065044014136 0ustar daviddavid(* Title: Standard Basis Library: OS Structures and Signatures Author: David Matthews Copyright David Matthews 2000, 2005 This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* G&R 2004 status: in progress. Signatures checked. Minor change to OS_IO. Structures unchecked. OS.Path in particular may have to be checked. It wasn't clearly specified before and I may have made assumptions that conflict with the G&R. *) signature OS_FILE_SYS = sig type dirstream val openDir : string -> dirstream val readDir : dirstream -> string option val rewindDir : dirstream -> unit val closeDir : dirstream -> unit val chDir : string -> unit val getDir : unit -> string val mkDir : string -> unit val rmDir : string -> unit val isDir : string -> bool val isLink : string -> bool val readLink : string -> string val fullPath : string -> string val realPath : string -> string val modTime : string -> Time.time val fileSize : string -> Position.int val setTime : (string * Time.time Option.option) -> unit val remove : string -> unit val rename : {old : string, new : string} -> unit datatype access_mode = A_READ | A_WRITE | A_EXEC val access : (string * access_mode list) -> bool val tmpName : unit -> string eqtype file_id val fileId : string -> file_id val hash : file_id -> word val compare : (file_id * file_id) -> General.order end (* OS_FILE_SYS *); signature OS_PATH = sig exception Path exception InvalidArc val parentArc : string val currentArc : string val fromString : string -> { isAbs : bool, vol : string, arcs : string list } val toString : { isAbs : bool, vol : string, arcs : string list } -> string val validVolume : {isAbs : bool, vol : string} -> bool val getVolume : string -> string val getParent : string -> string val splitDirFile : string -> {dir : string, file : string} val joinDirFile : {dir : string, file : string} -> string val dir : string -> string val file : string -> string val splitBaseExt : string -> {base : string, ext : string option } val joinBaseExt : {base : string, ext : string option} -> string val base : string -> string val ext : string -> string option val mkCanonical : string -> string val isCanonical : string -> bool val mkAbsolute : {path : string, relativeTo : string} -> string val mkRelative : {path : string, relativeTo : string} -> string val isAbsolute : string -> bool val isRelative : string -> bool val isRoot : string -> bool val concat : string * string -> string val toUnixPath : string -> string val fromUnixPath : string -> string end (* OS_PATH *); signature OS_PROCESS = sig type status val success : status val failure : status val isSuccess : status -> bool val system : string -> status val atExit : (unit -> unit) -> unit val exit : status -> 'a val terminate : status -> 'a val getEnv : string -> string Option.option val sleep: Time.time -> unit end (* OS_PROCESS *); signature OS_IO = sig eqtype iodesc val hash : iodesc -> word val compare : (iodesc * iodesc) -> General.order eqtype iodesc_kind val kind : iodesc -> iodesc_kind structure Kind: sig val file : iodesc_kind val dir : iodesc_kind val symlink : iodesc_kind val tty : iodesc_kind val pipe : iodesc_kind val socket : iodesc_kind val device : iodesc_kind end eqtype poll_desc type poll_info val pollDesc : iodesc -> poll_desc Option.option val pollToIODesc : poll_desc -> iodesc exception Poll val pollIn : poll_desc -> poll_desc val pollOut : poll_desc -> poll_desc val pollPri : poll_desc -> poll_desc val poll : (poll_desc list * Time.time Option.option) -> poll_info list val isIn : poll_info -> bool val isOut : poll_info -> bool val isPri : poll_info -> bool val infoToPollDesc : poll_info -> poll_desc end (* OS_IO *); signature OS = sig eqtype syserror exception SysErr of (string * syserror Option.option) val errorMsg : syserror -> string val errorName : syserror -> string val syserror : string -> syserror Option.option structure FileSys : OS_FILE_SYS structure Path : OS_PATH structure Process : OS_PROCESS structure IO : OS_IO end (* OS *); structure OS:> OS = struct type syserror = int (* Abstract. *) (* The calls themselves raise the SysCall exception. That has to be turned into a SysError exception. *) structure SysErr = RunCall.Run_exception1 ( type ex_type = string * syserror Option.option val ex_iden = RuntimeCalls.EXC_syserr ); exception SysErr = SysErr.ex local val doCall: int*syserror -> string = RunCall.run_call2 RuntimeCalls.POLY_SYS_process_env in (* Convert a numeric system error to a string. *) fun errorName (s: syserror) : string = doCall(2, s) fun errorMsg (s: syserror) : string = doCall(3, s) end local val doCall: int*string -> syserror = RunCall.run_call2 RuntimeCalls.POLY_SYS_process_env in (* Convert a string to an error message if possible. *) fun syserror (s: string) : syserror option = let val n = doCall(4, s) in if n = 0 then NONE else SOME n end end structure Path:> OS_PATH = struct (* Note: The definition of relative and absolute paths are somewhat unclear and some of the examples seem contradictory. The definition I would prefer to use is that an absolute path is one which identifies a given file independent of any setting of the current directory. Hence the examples of "\" and "\A\B" as being absolute paths in DOS is in my opinion wrong. These are relative since they depend on the setting of the current volume. However this is a mess when it comes to fromString since if we don't treat "\A" as an absolute path it looks just like an absolute path with an empty arc. *) exception Path exception InvalidArc local val doCall: int*int -> string = RunCall.run_call2 RuntimeCalls.POLY_SYS_process_env in val parentArc = doCall (6, 0) and currentArc = doCall (5, 0) and separator = doCall (7, 0) end local val doCall: int*Char.char -> bool = RunCall.run_call2 RuntimeCalls.POLY_SYS_process_env in (* Assume for the moment that separators are always single chars. *) fun isSeparator ch = doCall (8, ch) (* Internal - are names case sensitive? Yes in Unix, no in Windows. *) val isCaseSensitive = doCall (9, #" ") (* Internal - is an empty arc redundant? i.e. is // equivalent to / ? In Windows it isn't at the start of a path but we will already have removed anything that looks like a volume by the time we come to canonicalise it. *) val emptyArcIsRedundant = doCall (10, #" ") end local val doCall: int*(string*bool) -> string = RunCall.run_call2 RuntimeCalls.POLY_SYS_process_env in (* Internal function - construct the prefix for a volume. *) (* Same for Unix and Windows. *) fun makePrefix(vol: string, isAbs: bool) = doCall(12, (vol, isAbs)) end local val doCall: int*string -> bool = RunCall.run_call2 RuntimeCalls.POLY_SYS_process_env in (* Internal function - returns false if the string contains an invalid character. Arc separators are allowed. *) fun isValidArc s = doCall(13, s) end local val doCall: int*string -> int*string*bool = RunCall.run_call2 RuntimeCalls.POLY_SYS_process_env in fun matchVolumePrefix s = doCall(11, s) end (* (* Windows *) fun matchVolumePrefix (s: string): int*string*bool = (* Given a string it examines the prefix and extracts the volume name if there is one. It returns the volume and also whether the name is absolute. It also returns the number of characters which matched so that this can be removed before treating the rest as a relative path. *) let val slen = String.size s in if slen = 0 then (0, "", false) else if slen >= 2 andalso String.sub(s, 1) = #":" andalso Char.isAlpha(String.sub(s, 0)) then if slen > 2 andalso isSeparator(String.sub(s, 2)) then (3, String.substring(s, 0, 2), true) (* e.g. C:\ or C:\fred *) else (2, String.substring(s, 0, 2), false) (* e.g. C: or C:fred *) else if slen > 2 andalso isSeparator(String.sub(s, 0)) andalso isSeparator(String.sub(s, 1)) then (* Looks like a UNC server name. See how big it is. *) let val (server, rest) = Substring.splitl(fn c => not (isSeparator c)) (Substring.extract(s, 2, NONE)) (* TODO: Is the server name actually valid? Assume yes. *) in if Substring.size rest = 0 then (0, "", false) else (* Must be room for a share name as well. *) let val shareName = Substring.takel(fn c => not (isSeparator c)) (Substring.triml 1 rest) in (Substring.size server + Substring.size shareName + 4, separator ^ separator ^ Substring.string server ^ separator ^ Substring.string shareName, true) end end else if isSeparator(String.sub(s, 0)) then (* Treat it as absolute even though it really isn't *) (1, "", true) else (0, "", false) end *) (* (* Unix: *) fun matchVolumePrefix (s: string): int*string*bool = if String.size s > 0 andalso String.sub(s, 0) = "/" then (1, "", true) else (0, "", false) *) (* Internal - map the strings to the canonical case if they are not case sensitive. *) val toCanonicalCase = if isCaseSensitive then fn s => s else String.map Char.toLower (* Internal - are the arcs equivalent? *) fun equivalent (s, t) = toCanonicalCase s = toCanonicalCase t (* See if the volume name is valid. *) fun validVolume {isAbs, vol} = let (* Convert it to full volume prefix form then try to match that. *) val fullVol = makePrefix(vol, isAbs) val (nLen, _, abs) = matchVolumePrefix fullVol in (* If we matched the whole name and it had the same absolute/relative status then we can assume that it was a valid volume name. *) nLen = String.size fullVol andalso abs = isAbs end (* Note: The examples for Unix paths are a mess. There is considerable confusion in the examples between "/" meaning the root directory and its use as a path separator. *) fun fromString (s: string) = let (* Do we have a volume name? *) val (volLen, vol, abs) = matchVolumePrefix s (* The remainder forms a set of arcs. *) val rest = String.extract(s, volLen, NONE) (* String.fields returns a single empty string when given the empty string. I'm not sure whether that's right or not but it's not what we want. *) val arcs = if rest = "" then [] else String.fields isSeparator rest in {isAbs = abs, vol = vol, arcs=arcs} end (* Note: This is a mess as well. For example it says that it should raise Path if there is a relative path which begins with an empty arc. That's only true in Unix. What it should say is that it if isAbs is false then it should raise Path if the resulting path has the form of an absolute path. In Windows we should raise path if given (e.g.) {isAbs=false, vol="", arcs=["", "", "a", "b"]} because that looks like a UNC name. *) fun toString {isAbs : bool, vol : string, arcs : string list} = (* Check we have a valid volume. *) if not (validVolume{isAbs=isAbs, vol=vol}) then raise Path (* Check that each arc is valid. *) else if List.find (fn s => not (isValidArc s)) arcs <> NONE then raise InvalidArc else let (* Place separators between each arc. *) fun arcsToLinks [] = [] | arcsToLinks [a] = [a] | arcsToLinks (a::b) = a :: separator :: arcsToLinks b val r = String.concat(makePrefix(vol, isAbs) :: arcsToLinks arcs) (* Check to see whether we have turned a relative path into an absolute one by including empty arcs in the wrong places. *) val (_, _, nowAbs) = matchVolumePrefix r in if nowAbs <> isAbs then raise Path else r end (* Note: this is just defined to "return the volume portion" but doesn't say what to do if there isn't a volume. Seems simplest to define it as below. *) fun getVolume s = #vol(fromString s) (* Note: Once again this has very much a Unix view of the world, most of which almost works in Windows. I don't think MacOS actually has the concept of a parent directory. *) fun getParent "" = parentArc | getParent s = let val len = String.size s val (volLen, _, _) = matchVolumePrefix s (* Split it at the last separator. *) val (prefix, suffix) = Substring.splitr (fn c => not (isSeparator c)) (Substring.full s) in if volLen = len then s (* We have a root. *) else if Substring.size suffix = 0 then (* If the last character is a separator just add on the parent arc (..) to refer to the parent directory. I don't know why we can't just remove the last component in this case but the examples don't do that. The only special case is where we have reached the root when we just return the root. *) s ^ parentArc else if Substring.size prefix = 0 then (* No separator at all *) ( if s = parentArc (* .. => ../.. *) then parentArc ^ (separator) ^ parentArc else if s = currentArc then parentArc (* . => .. *) else currentArc (* abc => . *) ) else if Substring.size prefix = volLen (* ??? If the prefix matches the volume then return the whole of prefix including the separator. *) then Substring.string prefix else (* Return the prefix with the separator removed. *) Substring.string(Substring.trimr 1 prefix) end (* Another mess defined in terms of examples for Unix from which one is expected to infer a general rule. It seems to split the string at the last separator and return the two halves without the separator except in the case where the directory is a root directory when a full volume name and separator are given. *) fun splitDirFile s = let (* Split it at the last separator. *) val (prefix, suffix) = Substring.splitr (fn c => not (isSeparator c)) (Substring.full s) val (volLen, vol, _) = matchVolumePrefix s val dirName = if Substring.size prefix = 0 then "" else Substring.string(Substring.trimr 1 prefix) and fileName = Substring.string suffix in if volLen <> 0 andalso vol = dirName then {dir = vol ^ separator, file = fileName} else {dir = dirName, file = fileName} end fun dir s = #dir(splitDirFile s) and file s = #file(splitDirFile s) (* Question: It seems from the definition of toString that the arcs list can include separators. Is that true here? Assume yes. *) (* If the last character is already a separator we don't add one, e.g. if the directory is "/". *) fun joinDirFile{dir, file} = if not (isValidArc file) then raise InvalidArc else if dir = "" then file (* Return the file name unchanged *) else if isSeparator(String.sub(dir, size dir - 1)) then dir ^ file else dir ^ separator ^ file fun splitBaseExt s = let val slen = String.size s fun getExt n = if n <= 0 then NONE (* If it's at the start ignore it. *) else if isSeparator(String.sub(s, n)) then NONE else if String.sub(s, n) = #"." then (* Found a dot. *) ( if n = slen-1 then NONE (* Dot in last position. *) else if isSeparator(String.sub(s, n-1)) then NONE (* Dot immediately after separator. *) else SOME n ) else getExt (n-1) val extPos = getExt(slen - 1) in case extPos of NONE => {base=s, ext=NONE} | SOME n => {base=String.substring(s, 0, n), ext=SOME(String.substring(s, n+1, slen-n-1))} end fun joinBaseExt {base : string, ext = NONE} = base | joinBaseExt {base : string, ext = SOME ""} = base | joinBaseExt {base : string, ext = SOME ext} = base ^ "." ^ ext fun base s = #base(splitBaseExt s) and ext s = #ext(splitBaseExt s) fun mkCanonical s = let val {isAbs, vol, arcs} = fromString s fun collapse [] = [] | collapse (a :: b) = (* Work down the list removing currentArc entries and null entries (if the OS treats them as redundant).. *) if a = currentArc orelse (emptyArcIsRedundant andalso a = "") then collapse b (* Then work back up it removing parentArc entries. *) else case collapse b of [] => [a] | b' as (x :: y) => if x = parentArc andalso not (a = parentArc) then (* Remove "a" and "x". *) y else a :: b' val collapsed = collapse arcs (* If this is the root we can remove leading occurrences of the parent arc since the parent of the root is the root. *) fun removeLeadingParent [] = [] | removeLeadingParent (a::b) = if a = parentArc then removeLeadingParent b else a::b val newArcs = if isAbs then removeLeadingParent collapsed else collapsed val res = toString{isAbs=isAbs, vol=vol, arcs=newArcs} in (* Finally replace the empty string with "." and map to lower case if it's not case sensitive. *) if res = "" then currentArc else toCanonicalCase res end fun isCanonical s = mkCanonical s = s handle Path => false fun isAbsolute s = #isAbs(fromString s) and isRelative s = not(#isAbs(fromString s)) (* Concatenate two paths. The second must be relative and, if it contains a volume name, refer to the same volume as the first. *) fun concat(s, t) = let val {isAbs=absS, vol=volS, arcs=ArcsS} = fromString s val {isAbs=absT, vol=volT, arcs=ArcsT} = fromString t (* Concatenate the two lists of arcs except that a trailing empty arc on the first path is removed (i.e. concat("a/", "b") is the same as concat("a", "b") *) fun concatArcs [] p = p | concatArcs [a] p = if a = "" then p else a :: p | concatArcs (a::b) p = a :: concatArcs b p in if absT then raise Path else if volT <> "" andalso not(equivalent(volS, volT)) then raise Path else toString{isAbs=absS, vol=volS, arcs=concatArcs ArcsS ArcsT} end (* Make an absolute path by treating a relative path as relative to a given path. *) fun mkAbsolute {path, relativeTo} = let val {isAbs=absP, vol=volP, ...} = fromString path val {isAbs=absRT, vol=volRT, ...} = fromString relativeTo in if absP then path else if not absRT then raise Path (* If the path contained a volume it must be the same as the absolute path. *) else if volP <> "" andalso not(equivalent(volP, volRT)) then raise Path else mkCanonical(concat(relativeTo, path)) end (* Make a relative path by treating an absolute path as derived from a given other absolute path. *) fun mkRelative {path, relativeTo} = case fromString path of {isAbs=false, ...} => path (* Already relative *) | {vol=volP, arcs=arcsP, ...} => let val {isAbs=absRT, vol=volRT, arcs=arcsRT} = fromString (mkCanonical relativeTo) (* Add as many parent arcs as there are arcs in the path. *) fun addParents [] p = p | addParents (a::b) p = parentArc :: addParents b p fun matchPaths [] [] = [currentArc] (* Both equal *) | matchPaths p [] = (* Absolute path is finished - return p *) p | matchPaths [] r = (* Relative paths finished - add parent arcs *) addParents r [] | matchPaths (p :: p') (r :: r') = (* Are they the same arc? Note: When arcs are case insensitive I'm doing a case insensitive match here. *) if equivalent(p, r) then matchPaths p' r' else addParents (r :: r') (p :: p') in if not absRT then raise Path (* If the path contained a volume it must be the same as the absolute path. *) else if volP <> "" andalso not(equivalent(volP, volRT)) then raise Path else toString{isAbs=false, vol="", arcs=matchPaths arcsP arcsRT} end (* Note: assume that "a root directory" is one which satisfies the property that it has no parent. Hence the volume name must match the whole string. *) fun isRoot s = let val (volLen, vol, isAbs) = matchVolumePrefix s in isAbs andalso volLen = String.size s andalso isCanonical s end (* Question: there's no definition of what these functions mean. The crucial questions are how to deal with volume names and also how to deal with symbols in the paths which may be invalid (e.g. path separators) in one or other system. For instance "a\b" is a valid file name in Unix and 31/3/2000 is valid in MacOS. Are they supposed to represent the original file system in some way? *) fun toUnixPath s = let (* We may have occurrences of "/" in the arcs if that is not a separator on this OS. Replace them by this machine's separator. *) val convArc = String.translate ( fn ch => if ch = #"/" then separator else String.str ch) fun mapArc a = if a = currentArc then "." else if a = parentArc then ".." else a fun mapArcs [] = [] | mapArcs [a] = [mapArc a] | mapArcs (a::b) = mapArc a :: "/" :: mapArcs b val {isAbs, vol, arcs} = fromString s val volArc = if vol <> "" then vol :: arcs else arcs val sl = String.concat(mapArcs volArc) in if String.size sl = 0 then "" else if isAbs then if String.sub(sl, 0) <> #"/" then "/" ^ sl else sl else (* not abs *) if String.sub(sl, 0) = #"/" then "." ^ sl else sl end fun fromUnixPath s = let val arcs = String.fields (fn ch => ch = #"/") s (* Turn any occurrences of this OS's separator into / since that can't occur within an arc. *) val convArc = String.translate ( fn ch => if isSeparator ch then "/" else String.str ch) val convArcs = List.map convArc arcs in case convArcs of [] => "" | ("" :: a :: rest) => let (* We had a leading / : is the first arc a volume name? *) val (n, vol, _) = matchVolumePrefix a in if n = String.size a then (* We have a volume name. *) toString{isAbs=true, vol=vol, arcs=rest} else toString{isAbs=true, vol="", arcs=convArcs} end | (a :: rest) => let (* May be a relative volume name. *) val (n, vol, _) = matchVolumePrefix a in if n = String.size a then toString{isAbs=false, vol=vol, arcs=rest} else toString{isAbs=false, vol="", arcs=convArcs} end end end (* Path *) structure FileSys:> OS_FILE_SYS = struct type dirFd = int (* The directory stream consists of the stream identifier returned by openDir together with the original directory name. We need that for rewind in Windows. *) datatype dirstream = DIR of dirFd * string local val doIo: int*unit*string -> dirFd = RunCall.run_call3 RuntimeCalls.POLY_SYS_io_dispatch in fun openDir (s : string): dirstream = DIR(doIo(50, (), s), s) end local val doIo: int*dirFd*unit -> string = RunCall.run_call3 RuntimeCalls.POLY_SYS_io_dispatch in fun readDir (DIR(d, _)): string option = let (* This returns the empty string at end-of-stream. *) val s = doIo(51, d, ()) in if s = "" then NONE else SOME s end end local val doIo: int*dirFd*unit -> unit = RunCall.run_call3 RuntimeCalls.POLY_SYS_io_dispatch in fun closeDir(DIR(d, _)) = doIo(52, d, ()) end local val doIo: int*dirFd*string -> unit = RunCall.run_call3 RuntimeCalls.POLY_SYS_io_dispatch in (* We need to pass in the string because Windows has to reopen the stream. *) fun rewindDir(DIR(d, s)) = doIo(53, d, s) end local val cd: string -> unit = RunCall.run_call1 RuntimeCalls.POLY_SYS_chdir; in fun chDir s = cd s end local val doIo: int*unit*unit -> string = RunCall.run_call3 RuntimeCalls.POLY_SYS_io_dispatch in (* Return current directory. *) fun getDir() = doIo(54, (), ()) (* Get a temporary file name. *) fun tmpName() = doIo(67, (), ()) end local val doIo: int*unit*string -> unit = RunCall.run_call3 RuntimeCalls.POLY_SYS_io_dispatch in (* Create and delete directories and remove a file. *) fun mkDir s = doIo(55, (), s) and rmDir s = doIo(56, (), s) and remove s = doIo(64, (), s) end local val doIo: int*unit*string -> bool = RunCall.run_call3 RuntimeCalls.POLY_SYS_io_dispatch in (* Test for directory and symbolic link. *) fun isDir s = doIo(57, (), s) and isLink s = doIo(58, (), s) end local val doIo: int*unit*string -> string = RunCall.run_call3 RuntimeCalls.POLY_SYS_io_dispatch in (* Read a symbolic link. *) fun readLink s = doIo(59, (), s) (* Get a full canonical path name. *) and fullPath s = doIo(60, (), s) end local val doIo: int*unit*string -> Time.time = RunCall.run_call3 RuntimeCalls.POLY_SYS_io_dispatch in (* Get file modification time. *) fun modTime s = doIo(61, (), s) end local val doIo: int*unit*string -> int = RunCall.run_call3 RuntimeCalls.POLY_SYS_io_dispatch in (* Get file size. *) fun fileSize s = doIo(62, (), s) end local val doIo: int*string*Time.time -> unit = RunCall.run_call3 RuntimeCalls.POLY_SYS_io_dispatch in (* Get file size. *) fun setTime(s, NONE) = doIo(63, s, Time.now()) | setTime(s, SOME t) = doIo(63, s, t) end local val doIo: int*string*string -> unit = RunCall.run_call3 RuntimeCalls.POLY_SYS_io_dispatch in (* Rename a file. *) fun rename {old, new} = doIo(65, old, new) end datatype access_mode = A_READ | A_WRITE | A_EXEC local val doIo: int*string*word -> bool = RunCall.run_call3 RuntimeCalls.POLY_SYS_io_dispatch fun mapAccess (A_READ, m) = Word.orb(m, 0w1) | mapAccess (A_WRITE, m) = Word.orb(m, 0w2) | mapAccess (A_EXEC, m) = Word.orb(m, 0w4) in (* Get access rights. *) fun access (s, m) = doIo(66, s, List.foldl mapAccess 0w0 m) end (* file_id seems to be intended to reflect the semantics of a Unix inode. That concept doesn't exist in Windows so we use a canonical file name instead. *) datatype file_id = INODE of int | FILENAME of string fun compare(INODE i, INODE j) = Int.compare(i, j) | compare(FILENAME s, FILENAME t) = String.compare(s, t) | (* These cases shouldn't happen but we'll define them anyway. *) compare(INODE _, FILENAME _) = General.GREATER | compare(FILENAME _, INODE _) = General.LESS (* TODO: The hash function is supposed to well distribute the the values when taken modulo 2^n for any n. I'm sure we can come up with something better than this. *) fun hash(INODE i) = let open Word infix xorb << val w = Word.fromInt i in w xorb (w << 0w8) xorb (w << 0w16) xorb (w << 0w24) end | hash(FILENAME s) = (* Simple hash function which multiplies the accumulator by 7 and adds in the next character. *) CharVector.foldl (fn(c, a) => a * 0w7 + Word.fromInt(Char.ord c)) 0w0 s local val doIo: int*unit*string -> int = RunCall.run_call3 RuntimeCalls.POLY_SYS_io_dispatch in (* Get file id (inode). Returns negative value if inodes aren't supported. *) fun fileId s = let val i = doIo(68, (), s) in if i < 0 then FILENAME(fullPath s) else INODE i end end fun realPath p = if Path.isAbsolute p then fullPath p else Path.mkRelative{path=fullPath p, relativeTo=fullPath(getDir())} end (* FileSys *) structure IO :> OS_IO = struct datatype iodesc = IODESC of int (* Actually abstract. This isn't the file descriptor itself, rather a pointer into the io table. *) local val doIo: int*iodesc*unit -> int = RunCall.run_call3 RuntimeCalls.POLY_SYS_io_dispatch in (* Get underlying index. *) fun getIndex f = doIo(69, f, ()) end (* TODO: The hash function is supposed to well distribute the the values when taken modulo 2^n for any n. I'm sure we can come up with something better than this. *) fun hash (i: iodesc) : word = let open Word infix xorb << val w = Word.fromInt(getIndex i) in w xorb (w << 0w8) xorb (w << 0w16) xorb (w << 0w24) end fun compare(i, j) = Int.compare(getIndex i, getIndex j) (* eq *)type iodesc_kind = int structure Kind = struct val file : iodesc_kind = 0 val dir : iodesc_kind = 1 val symlink : iodesc_kind = 2 val tty : iodesc_kind = 3 val pipe : iodesc_kind = 4 val socket : iodesc_kind = 5 val device : iodesc_kind = 6 end local val doIo: int*iodesc*int -> int = RunCall.run_call3 RuntimeCalls.POLY_SYS_io_dispatch in fun kind (i: iodesc): iodesc_kind = let val k = doIo(21, i, 0) in (* Returns a negative number if the call fails, otherwise one of the above numbers. *) if k < 0 orelse k > 6 then raise SysErr("Invalid result", NONE) else k end end (* The poll descriptor and the result of polling is a bit map together with the io descriptor. *) val inBit = 0w1 and outBit = 0w2 and priBit = 0w4 (* N.B. The implementation of poll_desc is hard-wired into Socket.pollDesc. *) type poll_desc = word*iodesc datatype poll_info = PI of word*poll_desc local val doIo: int*iodesc*int -> word = RunCall.run_call3 RuntimeCalls.POLY_SYS_io_dispatch in fun sys_poll_test(i: iodesc) = doIo(22, i, 0) end local val doIo: int*int* (iodesc Vector.vector * word Vector.vector * Time.time) -> word Vector.vector = RunCall.run_call3 RuntimeCalls.POLY_SYS_io_dispatch in fun sys_poll_block(iov, wv) = doIo(23, 0, (iov, wv, Time.zeroTime)) fun sys_poll_poll(iov, wv) = doIo(25, 0, (iov, wv, Time.zeroTime)) and sys_poll_wait (iov, wv, t) = doIo(24, 0, (iov, wv, t)) end fun pollDesc (i: iodesc): poll_desc option = (* If the poll test returns zero then polling is not allowed for any mode. *) if sys_poll_test i = 0w0 then NONE else SOME(0w0, i) fun pollToIODesc(_, i): iodesc = i exception Poll (* Add the appropriate bit to the set if it is allowed. *) local fun addBit b ((bm, i)) = if Word.andb(sys_poll_test i, b) = 0w0 then raise Poll else (Word.orb(bm, b), i) in val pollIn = addBit inBit and pollOut = addBit outBit and pollPri = addBit priBit end fun poll (l : poll_desc list, t: Time.time Option.option) : poll_info list = let (* Turn the list into vectors of io descriptors and request bits - easier for the RTS to manage. N.B. This assumes that Vector.vector creates a simple memory vector and does not wrap it in any way. *) val ioVector: iodesc Vector.vector = Vector.fromList(List.map(fn(_, i) => i) l) val bitVector: word Vector.vector = Vector.fromList(List.map(fn(b, _) => b) l) val nDescs = Vector.length ioVector (* Do the actual polling. Returns a vector with bits set for the results. *) val resV: word Vector.vector = case t of NONE => sys_poll_block(ioVector, bitVector) | SOME tt => if tt = Time.zeroTime then sys_poll_poll(ioVector, bitVector) else if tt < Time.zeroTime (* Must check for negative times since these can be interpreted as infinity. *) then raise SysErr("Invalid time", NONE) (* For non-zero times we convert this to a number of milliseconds since the current time. We have to pass in an absolute time rather than a relative time because the RTS may retry this call if the polled events haven't happened. *) else sys_poll_wait(ioVector, bitVector, tt + Time.now()) (* Convert the results into a list of poll infos ignoring zero results. *) fun resList(_, []) = [] | resList(i, pd :: pdl) = let val r = Vector.sub(resV, i) in if r <> 0w0 then PI(r, pd) :: resList(i+1, pdl) else resList(i+1, pdl) end in resList(0, l) end fun isIn(PI(b, _)) = Word.andb(b, inBit) <> 0w0 and isOut(PI(b, _)) = Word.andb(b, outBit) <> 0w0 and isPri(PI(b, _)) = Word.andb(b, priBit) <> 0w0 fun infoToPollDesc (PI(_, pd)) = pd end (* IO *) structure Process:> OS_PROCESS = struct type status = int local val doCall: int*unit -> int = RunCall.run_call2 RuntimeCalls.POLY_SYS_process_env in val success = doCall(15, ()) and failure = doCall(16, ()) end fun isSuccess i = i = success local val doCall: int*string -> status = RunCall.run_call2 RuntimeCalls.POLY_SYS_process_env in (* Run a process and wait for the result. *) fun system s = doCall(17, s) end local val doCall: int*(unit->unit) -> unit = RunCall.run_call2 RuntimeCalls.POLY_SYS_process_env in (* Register a function to be run at exit. *) fun atExit f = doCall(18, f) end local (* This code is duplicated in prelude2 for when a root function returns without calling OS.Process.exit. *) val doExit = RunCall.run_call1 RuntimeCalls.POLY_SYS_exit val doCall: int*unit -> (unit->unit) = RunCall.run_call2 RuntimeCalls.POLY_SYS_process_env in fun exit (n: int) = let val exitFun = (* If we get an empty list here we've finished. *) doCall(19, ()) handle _ => doExit n in (* Run the function and then repeat. *) exitFun() handle _ => (); exit(n) end end (* Terminate without running the atExit list or flushing the buffers. The type returns a type variable so we don't use the local...in...end mechanism to reduce extra calls, but it hardly matters since we'll only call this at most once per session! *) fun terminate n = RunCall.run_call2 RuntimeCalls.POLY_SYS_process_env(20, n) local val doCall: int*string -> string = RunCall.run_call2 RuntimeCalls.POLY_SYS_process_env in (* Get an environment string. The underlying call raises an exception if the string isn't there. *) fun getEnv s = SOME(doCall(14, s)) handle _ => NONE end (* poll is implemented so that an empty list simply waits for the time. *) fun sleep t = (IO.poll([], SOME t); ()) end (* Process. *) end; local (* Install the pretty printer for OS.IO.Kind and OS.syserror. This must be done outside the structure if we use opaque matching. *) fun kind_string k = if k = OS.IO.Kind.file then "file" else if k = OS.IO.Kind.dir then "dir" else if k = OS.IO.Kind.symlink then "symlink" else if k = OS.IO.Kind.tty then "tty" else if k = OS.IO.Kind.pipe then "pipe" else if k = OS.IO.Kind.socket then "socket" else if k = OS.IO.Kind.device then "device" else "unknown" fun printKind(p, _, _, _) _ _ x = p(kind_string x) fun printSysError(p, _, _, _) _ _ x = p(OS.errorName x) in val () = PolyML.install_pp printKind val () = PolyML.install_pp printSysError end polyml.5.2.1/basis/Option.sml0000644000175000017500000000500410313043325015053 0ustar daviddavid(* Title: Standard Basis Library: Option Structure Author: David Matthews Copyright David Matthews 1999, 2005 This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* G&R 2004 status: updated, added "app" function. *) signature OPTION = sig datatype 'a option = NONE | SOME of 'a exception Option val getOpt : ('a option * 'a) -> 'a val isSome : 'a option -> bool val valOf : 'a option -> 'a val filter : ('a -> bool) -> 'a -> 'a option val join : 'a option option -> 'a option val app : ('a -> unit) -> 'a option -> unit val map : ('a -> 'b) -> 'a option -> 'b option val mapPartial : ('a -> 'b option) -> 'a option -> 'b option val compose : (('a -> 'b) * ('c -> 'a option)) -> 'c -> 'b option val composePartial : (('a -> 'b option) * ('c -> 'a option)) -> 'c -> 'b option end; structure Option : OPTION = struct (* datatype 'a option = NONE | SOME of 'a *) datatype option = datatype option exception Option fun getOpt (SOME a, _) = a | getOpt (NONE, b) = b fun isSome (SOME _) = true | isSome (NONE) = false fun valOf (SOME a) = a | valOf (NONE) = raise Option fun filter f a = if f a then SOME a else NONE fun join (SOME v) = v | join NONE = NONE fun app f (SOME v) = f v | app _ NONE = () fun map f (SOME v) = SOME (f v) | map f NONE = NONE fun mapPartial f (SOME v) = f v | mapPartial f NONE = NONE fun compose (f, g) a = case g a of NONE => NONE | SOME v => SOME (f v) fun composePartial (f, g) a = case g a of NONE => NONE | SOME v => f v end; (* Export some of these to the top-level. *) local structure dummy: sig (* datatype 'a option = NONE | SOME of 'a *) exception Option val getOpt : ('a option * 'a) -> 'a val isSome : 'a option -> bool val valOf : 'a option -> 'a end = Option in open dummy end; polyml.5.2.1/basis/PRIM_IO.sml0000644000175000017500000000460610313043325014750 0ustar daviddavid(* Title: Standard Basis Library: Primitive IO Signature Author: David Matthews Copyright David Matthews 1999, 2005 This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* G&R 2004 done. *) signature PRIM_IO = sig type elem type vector type vector_slice type array type array_slice eqtype pos val compare : pos * pos -> General.order datatype reader = RD of { name : string, chunkSize : int, readVec : (int -> vector) Option.option, readArr : (array_slice -> int) Option.option, readVecNB : (int -> vector Option.option) Option.option, readArrNB : (array_slice -> int Option.option) Option.option, block : (unit -> unit) Option.option, canInput : (unit -> bool) Option.option, avail : unit -> int Option.option, getPos : (unit -> pos) Option.option, setPos : (pos -> unit) Option.option, endPos : (unit -> pos) Option.option, verifyPos : (unit -> pos) Option.option, close : unit -> unit, ioDesc : OS.IO.iodesc Option.option } datatype writer = WR of { name : string, chunkSize : int, writeVec : (vector_slice -> int) Option.option, writeArr : (array_slice -> int) Option.option, writeVecNB : (vector_slice -> int Option.option) Option.option, writeArrNB : (array_slice -> int Option.option) Option.option, block : (unit -> unit) Option.option, canOutput : (unit -> bool) Option.option, getPos : (unit -> pos) Option.option, setPos : (pos -> unit) Option.option, endPos : (unit -> pos) Option.option, verifyPos : (unit -> pos) Option.option, close : unit -> unit, ioDesc : OS.IO.iodesc Option.option } val openVector: vector -> reader val nullRd: unit -> reader val nullWr: unit -> writer val augmentReader : reader -> reader val augmentWriter : writer -> writer end; polyml.5.2.1/basis/PackRealBig.sml0000644000175000017500000001402010313043325015705 0ustar daviddavid(* Title: Standard Basis Library: Pack Real structures and signatures Author: David Matthews Copyright David Matthews 2000 This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* G&R 2004 status: checked: unchanged. *) signature PACK_REAL = sig type real val bytesPerElem : int val isBigEndian : bool val toBytes : real -> Word8Vector.vector val fromBytes : Word8Vector.vector -> real val subVec : Word8Vector.vector * int -> real val subArr : Word8Array.array * int -> real val update : Word8Array.array * int * real -> unit end; local open LibrarySupport open RuntimeCalls open LibrarySupport.Word8Array val realSize: word = RunCall.run_call2 POLY_SYS_Real_Dispatch (28, ()) val System_lock: address -> unit = RunCall.run_call1 POLY_SYS_lockseg; local val System_loadb: address * word -> Word8.word = RunCall.run_call2 POLY_SYS_load_byte; val System_setb: address * word * Word8.word -> unit = RunCall.run_call3 POLY_SYS_assign_byte; val System_move_bytes: address*word*address*word*word->unit = RunCall.run_call5 POLY_SYS_move_bytes val wordSize : word = LibrarySupport.wordSize; (* Move bytes, reversing the order. *) fun swapOrder(src: address, srcOff: word, dest: address, destOff: word, length: word) = if length = 0w0 then () else ( System_setb(dest, destOff+length-0w1, System_loadb(src, srcOff)); swapOrder(src, srcOff+0w1, dest, destOff, length-0w1) ) in fun doMove(src: address, srcOff: word, dest: address, destOff: word, wantBigEndian: bool) = if wantBigEndian = bigEndian (* Host byte order = required byte order *) then System_move_bytes(src, srcOff, dest, destOff, realSize) else (* Host byte order is reverse of required byte order. *) swapOrder(src, srcOff, dest, destOff, realSize) end in structure PackRealBig: PACK_REAL = struct type real = real val bytesPerElem: int = Word.toInt realSize val isBigEndian = true (* Note: this seems unnecessary. *) fun toBytes r = let val v = fromString(allocString realSize) (* r is actually represented by a pointer to a vector. *) val addr: address = RunCall.unsafeCast r in doMove(addr, 0w0, v, wordSize, isBigEndian); System_lock v; Vector v end fun fromBytes (v as Vector vec) = (* Raises an exception if the vector is too small and takes the first few elements if it's larger. *) if Word8Vector.length v < bytesPerElem then raise Subscript else let val r = allocBytes realSize in doMove(vec, wordSize, r, 0w0, isBigEndian); System_lock r; (RunCall.unsafeCast r): real end fun subVec(v as Vector vec, i) = let val iW = unsignedShortOrRaiseSubscript i * realSize in if iW >= Word.fromInt(Word8Vector.length v) then raise Subscript (* This IS defined. *) else let val r = allocBytes realSize in doMove(vec, wordSize + iW, r, 0w0, isBigEndian); System_lock r; (RunCall.unsafeCast r): real end end fun subArr(Array(l, v), i) = let val iW = unsignedShortOrRaiseSubscript i * realSize in if iW >= l then raise Subscript (* This IS defined. *) else let val r = allocBytes realSize in doMove(v, iW, r, 0w0, isBigEndian); System_lock r; (RunCall.unsafeCast r): real end end fun update(Array(l, v), i, r) = let val iW = unsignedShortOrRaiseSubscript i * realSize in if iW >= l then raise Subscript (* This IS defined. *) else let (* r is actually represented by a pointer to a vector. *) val addr: address = RunCall.unsafeCast r in doMove(addr, 0w0, v, iW, isBigEndian) end end end; structure PackRealLittle: PACK_REAL = struct type real = real val bytesPerElem: int = Word.toInt realSize val isBigEndian = false fun toBytes r = let val v = fromString(allocString realSize) (* r is actually represented by a pointer to a vector. *) val addr: address = RunCall.unsafeCast r in doMove(addr, 0w0, v, wordSize, isBigEndian); System_lock v; Vector v end fun fromBytes(v as Vector vec) = (* Raises an exception if the vector is too small and takes the first few elements if it's larger. *) if Word8Vector.length v < bytesPerElem then raise Subscript else let val r = allocBytes realSize in doMove(vec, wordSize, r, 0w0, isBigEndian); System_lock r; (RunCall.unsafeCast r): real end fun subVec(v as Vector vec, i) = let val iW = unsignedShortOrRaiseSubscript i * realSize in if iW >= Word.fromInt(Word8Vector.length v) then raise Subscript (* This IS defined. *) else let val r = allocBytes realSize in doMove(vec, wordSize+iW, r, 0w0, isBigEndian); System_lock r; (RunCall.unsafeCast r): real end end fun subArr(Array(l, v), i) = let val iW = unsignedShortOrRaiseSubscript i * realSize in if iW >= l then raise Subscript (* This IS defined. *) else let val r = allocBytes realSize in doMove(v, iW, r, 0w0, isBigEndian); System_lock r; (RunCall.unsafeCast r): real end end fun update(Array(l, v), i, r) = let val iW = unsignedShortOrRaiseSubscript i * realSize in if iW >= l then raise Subscript (* This IS defined. *) else let (* r is actually represented by a pointer to a vector. *) val addr: address = RunCall.unsafeCast r in doMove(addr, 0w0, v, iW, isBigEndian) end end end; end; polyml.5.2.1/basis/PackWord8Big.sml0000644000175000017500000001454010313043325016034 0ustar daviddavid(* Title: Standard Basis Library: PACK_WORD signature and structures Author: David Matthews Copyright David Matthews 2000, 2005 This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* G&R 2004 status: updated, the structure names have changed. *) signature PACK_WORD = sig val bytesPerElem : int val isBigEndian : bool val subVec : Word8Vector.vector * int -> LargeWord.word val subVecX : Word8Vector.vector * int -> LargeWord.word val subArr : Word8Array.array * int -> LargeWord.word val subArrX : Word8Array.array * int -> LargeWord.word val update : Word8Array.array * int * LargeWord.word -> unit end; (* I'm not sure what use Pack8Big and Pack8Little are since they don't do any packing. *) structure PackWord8Big : PACK_WORD = struct val bytesPerElem = 1 val isBigEndian = true val subVec = Word8.toLargeWord o Word8Vector.sub val subVecX = Word8.toLargeWordX o Word8Vector.sub val subArr = Word8.toLargeWord o Word8Array.sub val subArrX = Word8.toLargeWordX o Word8Array.sub fun update(a, i, v) = Word8Array.update(a, i, Word8.fromLargeWord v) end; structure PackWord8Little : PACK_WORD = struct (* Exactly the same as Pack8Big except for the value of isBigEndian *) open PackWord8Big val isBigEndian = false end; local infix << >> infix andb infix orb val op orb = LargeWord.orb and op << = LargeWord.<< and op >> = LargeWord.>> fun twoBytesToWord(hi: Word8.word, lo: Word8.word) = (Word8.toLargeWord hi << 0w8) orb Word8.toLargeWord lo fun twoBytesToWordX(hi: Word8.word, lo: Word8.word) = (Word8.toLargeWordX hi << 0w8) orb Word8.toLargeWord lo fun fourBytesToWord(highest, higher, lower, low) = (Word8.toLargeWord highest << 0w24) orb (Word8.toLargeWord higher << 0w16) orb (Word8.toLargeWord lower << 0w8) orb Word8.toLargeWord low fun fourBytesToWordX(highest, higher, lower, low) = (Word8.toLargeWordX highest << 0w24) orb (Word8.toLargeWord higher << 0w16) orb (Word8.toLargeWord lower << 0w8) orb Word8.toLargeWord low in structure PackWord16Big : PACK_WORD = struct val bytesPerElem = 2 val isBigEndian = true fun subVec(a, i) = twoBytesToWord( Word8Vector.sub(a, i*2), Word8Vector.sub(a, i*2+1)) fun subVecX(a, i) = twoBytesToWordX( Word8Vector.sub(a, i*2), Word8Vector.sub(a, i*2+1)) fun subArr(a, i) = twoBytesToWord( Word8Array.sub(a, i*2), Word8Array.sub(a, i*2+1)) fun subArrX(a, i) = twoBytesToWordX( Word8Array.sub(a, i*2), Word8Array.sub(a, i*2+1)) fun update(a, i, v) = (* Check the index before doing any update. *) if i < 0 orelse i*2+1 >= Word8Array.length a then raise Subscript else (Word8Array.update(a, i*2+1, Word8.fromLargeWord v); Word8Array.update(a, i*2, Word8.fromLargeWord(v >> 0w8)) ) end; structure PackWord16Little : PACK_WORD = struct val bytesPerElem = 2 val isBigEndian = false fun subVec(a, i) = twoBytesToWord( Word8Vector.sub(a, i*2+1), Word8Vector.sub(a, i*2)) fun subVecX(a, i) = twoBytesToWordX( Word8Vector.sub(a, i*2+1), Word8Vector.sub(a, i*2)) fun subArr(a, i) = twoBytesToWord( Word8Array.sub(a, i*2+1), Word8Array.sub(a, i*2)) fun subArrX(a, i) = twoBytesToWordX( Word8Array.sub(a, i*2+1), Word8Array.sub(a, i*2)) fun update(a, i, v) = (* Check the index before doing any update. *) if i < 0 orelse i*2+1 >= Word8Array.length a then raise Subscript else (Word8Array.update(a, i*2, Word8.fromLargeWord v); Word8Array.update(a, i*2+1, Word8.fromLargeWord(v >> 0w8)) ) end; structure PackWord32Big : PACK_WORD = struct val bytesPerElem = 4 val isBigEndian = true fun subVec(a, i) = fourBytesToWord( Word8Vector.sub(a, i*4), Word8Vector.sub(a, i*4+1), Word8Vector.sub(a, i*4+2), Word8Vector.sub(a, i*4+3)) fun subVecX(a, i) = fourBytesToWordX( Word8Vector.sub(a, i*4), Word8Vector.sub(a, i*4+1), Word8Vector.sub(a, i*4+2), Word8Vector.sub(a, i*4+3)) fun subArr(a, i) = fourBytesToWord( Word8Array.sub(a, i*4), Word8Array.sub(a, i*4+1), Word8Array.sub(a, i*4+2), Word8Array.sub(a, i*4+3)) fun subArrX(a, i) = fourBytesToWordX( Word8Array.sub(a, i*4), Word8Array.sub(a, i*4+1), Word8Array.sub(a, i*4+2), Word8Array.sub(a, i*4+3)) fun update(a, i, v) = (* Check the index before doing any update. *) if i < 0 orelse i*4+3 >= Word8Array.length a then raise Subscript else (Word8Array.update(a, i*4+3, Word8.fromLargeWord v); Word8Array.update(a, i*4+2, Word8.fromLargeWord(v >> 0w8)); Word8Array.update(a, i*4+1, Word8.fromLargeWord(v >> 0w16)); Word8Array.update(a, i*4, Word8.fromLargeWord(v >> 0w24)) ) end; structure PackWord32Little : PACK_WORD = struct val bytesPerElem = 4 val isBigEndian = false fun subVec(a, i) = fourBytesToWord( Word8Vector.sub(a, i*4+3), Word8Vector.sub(a, i*4+2), Word8Vector.sub(a, i*4+1), Word8Vector.sub(a, i*4)) fun subVecX(a, i) = fourBytesToWordX( Word8Vector.sub(a, i*4+3), Word8Vector.sub(a, i*4+2), Word8Vector.sub(a, i*4+1), Word8Vector.sub(a, i*4)) fun subArr(a, i) = fourBytesToWord( Word8Array.sub(a, i*4+3), Word8Array.sub(a, i*4+2), Word8Array.sub(a, i*4+1), Word8Array.sub(a, i*4)) fun subArrX(a, i) = fourBytesToWordX( Word8Array.sub(a, i*4+3), Word8Array.sub(a, i*4+2), Word8Array.sub(a, i*4+1), Word8Array.sub(a, i*4)) fun update(a, i, v) = (* Check the index before doing any update. *) if i < 0 orelse i*4+3 >= Word8Array.length a then raise Subscript else (Word8Array.update(a, i*4, Word8.fromLargeWord v); Word8Array.update(a, i*4+1, Word8.fromLargeWord(v >> 0w8)); Word8Array.update(a, i*4+2, Word8.fromLargeWord(v >> 0w16)); Word8Array.update(a, i*4+3, Word8.fromLargeWord(v >> 0w24)) ) end end; polyml.5.2.1/basis/PolyVectorOperations.sml0000644000175000017500000001161710316534242017772 0ustar daviddavid(* Title: Standard Basis Library: Vector and Array functor for polymorphic vectors and arrays Copyright David C.J. Matthews 2005 This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* This is almost identical to the VectorOperations functor but works on polymorphic vectors and arrays. There may be a way to combine the two. *) functor PolyVectorOperations( type 'a vector val length: 'a vector -> word val unsafeSub: 'a vector * word -> 'a val unsafeSet: 'a vector * word * 'a -> unit (* Array only *) ): sig val appi : ((int * 'a) -> unit) -> 'a vector -> unit val app : ('a -> unit) -> 'a vector -> unit val foldli : ((int * 'a * 'b) -> 'b) -> 'b -> 'a vector -> 'b val foldri : ((int * 'a * 'b) -> 'b) -> 'b -> 'a vector -> 'b val foldl : (('a * 'b) -> 'b) -> 'b -> 'a vector -> 'b val foldr : (('a * 'b) -> 'b) -> 'b -> 'a vector -> 'b val modifyi : ((int * 'a) -> 'a) -> 'a vector -> unit (* Array only *) val modify : ('a -> 'a) -> 'a vector -> unit (* Array only *) val findi: (int * 'a -> bool) -> 'a vector -> (int * 'a) option val find: ('a -> bool) -> 'a vector -> 'a option val exists: ('a -> bool) -> 'a vector -> bool val all: ('a -> bool) -> 'a vector -> bool val collate: ('a * 'a -> order) -> 'a vector * 'a vector -> order end = struct val wordAsInt: word -> int = RunCall.unsafeCast (* Apply a function to each element in turn *) fun appi f vec = let val len = length vec fun doapp j = if j >= len then () else (f(wordAsInt j, unsafeSub(vec, j)); doapp(j+0w1)) in doapp 0w0 end fun app f vec = let val len = length vec fun doapp j = if j >= len then () else (f(unsafeSub(vec, j)); doapp(j+0w1)) in doapp 0w0 end (* Fold a function over a array. *) (* foldl - increasing index *) fun foldl f init vec = let val len = length vec fun dofold j acc = if j >= len then acc else dofold (j+0w1) (f (unsafeSub(vec, j), acc)) in dofold 0w0 init end fun foldli f init vec = let val len = length vec fun dofold j acc = if j >= len then acc else dofold (j+0w1) (f (wordAsInt j, unsafeSub(vec, j), acc)) in dofold 0w0 init end (* foldr - decreasing index *) fun foldr f init vec = let val len = length vec fun dofold j acc = if j = 0w0 then acc else dofold (j-0w1) (f (unsafeSub(vec, j-0w1), acc)) in dofold len init end fun foldri f init vec = let val len = length vec fun dofold j acc = if j = 0w0 then acc else dofold (j-0w1) (f (wordAsInt(j-0w1), unsafeSub(vec, j-0w1), acc)) in dofold len init end (* Apply a function to each element in turn and update the array with the new values. *) fun modifyi f vec = let val len = length vec fun doupdate j = if j >= len then () else (unsafeSet(vec, j, f(wordAsInt j, unsafeSub(vec, j))); doupdate(j+0w1)) in doupdate 0w0 end fun modify f vec = let val len = length vec fun doupdate j = if j >= len then () else (unsafeSet(vec, j, f(unsafeSub(vec, j))); doupdate(j+0w1)) in doupdate 0w0 end (* Find a character that matches the predicate. *) fun findi pred vec = let val len = length vec fun dofind j = if j >= len then NONE else let val v = unsafeSub(vec, j) in if pred(wordAsInt j, v) then SOME (wordAsInt j, v) else dofind (j+0w1) end in dofind 0w0 end fun find pred vec = let val len = length vec fun dofind j = if j >= len then NONE else let val v = unsafeSub(vec, j) in if pred v then SOME v else dofind (j+0w1) end in dofind 0w0 end fun exists f arr = Option.isSome(find f arr) fun all pred arr = not (exists (not o pred) arr) fun collate cmp (vec1, vec2) = let val len1 = length vec1 and len2 = length vec2 (* Keep comparing items until either we come to the end of one of the arrays or we find a mismatch. *) fun dotest j = if j >= len1 then if len1 = len2 then EQUAL else (* j < len2 *) LESS else if j >= len2 then (* But j < len1, so a1 is longer *) GREATER else case cmp(unsafeSub(vec1, j), unsafeSub(vec2, j)) of LESS => LESS | GREATER => GREATER | EQUAL => dotest (j+0w1) in dotest 0w0 end end; polyml.5.2.1/basis/Posix.sml0000644000175000017500000013073711014534051014721 0ustar daviddavid(* Title: Standard Basis Library: Posix structure and signature. Author: David Matthews Copyright David Matthews 2000 This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* G&R 2004 status: Only minor changes to Posix.IO. Done. *) signature POSIX_ERROR = sig type syserror = OS.syserror (* G&R 2004 has an error *) val toWord : syserror -> SysWord.word val fromWord : SysWord.word -> syserror val errorMsg : syserror -> string val errorName : syserror -> string val syserror : string -> syserror option val acces : syserror val again : syserror val badf : syserror val badmsg : syserror val busy : syserror val canceled (* sic *) : syserror val child : syserror val deadlk : syserror val dom : syserror val exist : syserror val fault : syserror val fbig : syserror val inprogress : syserror val intr : syserror val inval : syserror val io : syserror val isdir : syserror val loop : syserror val mfile : syserror val mlink : syserror val msgsize : syserror val nametoolong : syserror val nfile : syserror val nodev : syserror val noent : syserror val noexec : syserror val nolck : syserror val nomem : syserror val nospc : syserror val nosys : syserror val notdir : syserror val notempty : syserror val notsup : syserror val notty : syserror val nxio : syserror val perm : syserror val pipe : syserror val range : syserror val rofs : syserror val spipe : syserror val srch : syserror val toobig : syserror val xdev : syserror end; signature POSIX_SIGNAL = sig eqtype signal val toWord : signal -> SysWord.word val fromWord : SysWord.word -> signal val abrt : signal val alrm : signal val bus : signal val fpe : signal val hup : signal val ill : signal val int : signal val kill : signal val pipe : signal val quit : signal val segv : signal val term : signal val usr1 : signal val usr2 : signal val chld : signal val cont : signal val stop : signal val tstp : signal val ttin : signal val ttou : signal end; signature POSIX_PROCESS = sig eqtype signal eqtype pid val wordToPid : SysWord.word -> pid val pidToWord : pid -> SysWord.word val fork : unit -> pid option val exec : string * string list -> 'a val exece : string * string list * string list -> 'a val execp : string * string list -> 'a datatype waitpid_arg = W_ANY_CHILD | W_CHILD of pid | W_SAME_GROUP | W_GROUP of pid datatype exit_status = W_EXITED | W_EXITSTATUS of Word8.word | W_SIGNALED (* sic *) of signal | W_STOPPED of signal val fromStatus : OS.Process.status -> exit_status structure W: sig include BIT_FLAGS val untraced : flags end val wait : unit -> pid * exit_status val waitpid : waitpid_arg * W.flags list -> pid * exit_status val waitpid_nh : waitpid_arg * W.flags list -> (pid * exit_status) option val exit : Word8.word -> 'a datatype killpid_arg = K_PROC of pid | K_SAME_GROUP | K_GROUP of pid val kill : killpid_arg * signal -> unit val alarm : Time.time -> Time.time val pause : unit -> unit (* QUESTION: Why does sleep return a Time.time ? Is it intended to be the time remaining? Assume so. *) val sleep : Time.time -> Time.time end; signature POSIX_PROC_ENV = sig eqtype pid eqtype uid eqtype gid eqtype file_desc val uidToWord : uid -> SysWord.word val wordToUid : SysWord.word -> uid val gidToWord : gid -> SysWord.word val wordToGid : SysWord.word -> gid val getpid : unit -> pid val getppid : unit -> pid val getuid : unit -> uid val geteuid : unit -> uid val getgid : unit -> gid val getegid : unit -> gid val setuid : uid -> unit val setgid : gid -> unit val getgroups : unit -> gid list val getlogin : unit -> string val getpgrp : unit -> pid val setsid : unit -> pid val setpgid : {pid : pid option, pgid : pid option} -> unit val uname : unit -> (string * string) list val time : unit -> Time.time val times : unit -> { elapsed : Time.time, utime : Time.time, stime : Time.time, cutime : Time.time, cstime : Time.time } val getenv : string -> string option val environ : unit -> string list val ctermid : unit -> string val ttyname : file_desc -> string val isatty : file_desc -> bool val sysconf : string -> SysWord.word end; signature POSIX_FILE_SYS = sig eqtype uid eqtype gid eqtype file_desc val fdToWord : file_desc -> SysWord.word val wordToFD : SysWord.word -> file_desc val fdToIOD : file_desc -> OS.IO.iodesc val iodToFD : OS.IO.iodesc -> file_desc option type dirstream val opendir : string -> dirstream val readdir : dirstream -> string option val rewinddir : dirstream -> unit val closedir : dirstream -> unit val chdir : string -> unit val getcwd : unit -> string val stdin : file_desc val stdout : file_desc val stderr : file_desc structure S : sig eqtype mode include BIT_FLAGS where type flags = mode val irwxu : mode val irusr : mode val iwusr : mode val ixusr : mode val irwxg : mode val irgrp : mode val iwgrp : mode val ixgrp : mode val irwxo : mode val iroth : mode val iwoth : mode val ixoth : mode val isuid : mode val isgid : mode end structure O: sig include BIT_FLAGS val append : flags val excl : flags val noctty : flags val nonblock : flags val sync : flags val trunc : flags end datatype open_mode = O_RDONLY | O_WRONLY | O_RDWR val openf : string * open_mode * O.flags -> file_desc val createf : string * open_mode * O.flags * S.mode -> file_desc val creat : string * S.mode -> file_desc val umask : S.mode -> S.mode val link : {old : string, new : string} -> unit val mkdir : string * S.mode -> unit val mkfifo : string * S.mode -> unit val unlink : string -> unit val rmdir : string -> unit val rename : {old : string, new : string} -> unit val symlink : {old : string, new : string} -> unit val readlink : string -> string eqtype dev val wordToDev : SysWord.word -> dev val devToWord : dev -> SysWord.word eqtype ino val wordToIno : SysWord.word -> ino val inoToWord : ino -> SysWord.word structure ST: sig type stat val isDir : stat -> bool val isChr : stat -> bool val isBlk : stat -> bool val isReg : stat -> bool val isFIFO : stat -> bool val isLink : stat -> bool val isSock : stat -> bool val mode : stat -> S.mode val ino : stat -> ino val dev : stat -> dev val nlink : stat -> int val uid : stat -> uid val gid : stat -> gid val size : stat -> Position.int val atime : stat -> Time.time val mtime : stat -> Time.time val ctime : stat -> Time.time end val stat : string -> ST.stat val lstat : string -> ST.stat val fstat : file_desc -> ST.stat datatype access_mode = A_READ | A_WRITE | A_EXEC val access : string * access_mode list -> bool val chmod : string * S.mode -> unit val fchmod : file_desc * S.mode -> unit val chown : string * uid * gid -> unit val fchown : file_desc * uid * gid -> unit val utime : string * {actime : Time.time, modtime : Time.time} option -> unit val ftruncate : file_desc * Position.int -> unit val pathconf : string * string -> SysWord.word option val fpathconf : file_desc * string -> SysWord.word option end; signature POSIX_IO = sig eqtype file_desc eqtype pid val pipe: unit -> {infd : file_desc, outfd : file_desc} val dup: file_desc -> file_desc val dup2: {old : file_desc, new : file_desc} -> unit val close: file_desc -> unit val readVec : file_desc * int -> Word8Vector.vector val readArr: file_desc * Word8ArraySlice.slice -> int val writeVec: file_desc * Word8VectorSlice.slice -> int val writeArr: file_desc * Word8ArraySlice.slice -> int datatype whence = SEEK_SET | SEEK_CUR | SEEK_END structure FD: sig include BIT_FLAGS val cloexec: flags end structure O: sig include BIT_FLAGS val append : flags val nonblock : flags val sync : flags end datatype open_mode = O_RDONLY | O_WRONLY | O_RDWR val dupfd : {old : file_desc, base : file_desc} -> file_desc val getfd : file_desc -> FD.flags val setfd : file_desc * FD.flags -> unit val getfl : file_desc -> O.flags * open_mode val setfl : file_desc * O.flags -> unit val lseek : file_desc * Position.int * whence -> Position.int val fsync : file_desc -> unit datatype lock_type = F_RDLCK | F_WRLCK | F_UNLCK structure FLock: sig type flock val flock : { ltype : lock_type, whence : whence, start : Position.int, len : Position.int, pid : pid option } -> flock val ltype : flock -> lock_type val whence : flock -> whence val start : flock -> Position.int val len : flock -> Position.int val pid : flock -> pid option end val getlk : file_desc * FLock.flock -> FLock.flock val setlk : file_desc * FLock.flock -> FLock.flock val setlkw : file_desc * FLock.flock -> FLock.flock val mkBinReader: { fd : file_desc, name : string, initBlkMode : bool } -> BinPrimIO.reader val mkTextReader: { fd : file_desc, name : string, initBlkMode : bool } -> TextPrimIO.reader val mkBinWriter: { fd : file_desc, name : string, appendMode : bool, initBlkMode : bool, chunkSize : int } -> BinPrimIO.writer val mkTextWriter: { fd : file_desc, name : string, appendMode : bool, initBlkMode : bool, chunkSize : int } -> TextPrimIO.writer end; signature POSIX_SYS_DB = sig eqtype uid eqtype gid structure Passwd : sig type passwd val name : passwd -> string val uid : passwd -> uid val gid : passwd -> gid val home : passwd -> string val shell : passwd -> string end structure Group : sig type group val name : group -> string val gid : group -> gid val members : group -> string list end val getgrgid : gid -> Group.group val getgrnam : string -> Group.group val getpwuid : uid -> Passwd.passwd val getpwnam : string -> Passwd.passwd end; signature POSIX_TTY = sig eqtype pid eqtype file_desc structure V : sig val eof : int val eol : int val erase : int val intr : int val kill : int val min : int val quit : int val susp : int val time : int val start : int val stop : int val nccs : int type cc val cc : (int * char) list -> cc val update : cc * (int * char) list -> cc val sub : cc * int -> char end structure I : sig include BIT_FLAGS val brkint : flags val icrnl : flags val ignbrk : flags val igncr : flags val ignpar : flags val inlcr : flags val inpck : flags val istrip : flags val ixoff : flags val ixon : flags val parmrk : flags end structure O : sig include BIT_FLAGS val opost : flags end structure C : sig include BIT_FLAGS val clocal : flags val cread : flags val cs5 : flags val cs6 : flags val cs7 : flags val cs8 : flags val csize : flags val cstopb : flags val hupcl : flags val parenb : flags val parodd : flags end structure L : sig include BIT_FLAGS val echo : flags val echoe : flags val echok : flags val echonl : flags val icanon : flags val iexten : flags val isig : flags val noflsh : flags val tostop : flags end eqtype speed val compareSpeed : speed * speed -> order val speedToWord : speed -> SysWord.word val wordToSpeed : SysWord.word -> speed val b0 : speed val b50 : speed val b75 : speed val b110 : speed val b134 : speed val b150 : speed val b200 : speed val b300 : speed val b600 : speed val b1200 : speed val b1800 : speed val b2400 : speed val b4800 : speed val b9600 : speed val b19200 : speed val b38400 : speed type termios val termios : { iflag : I.flags, oflag : O.flags, cflag : C.flags, lflag : L.flags, cc : V.cc, ispeed : speed, ospeed : speed } -> termios val fieldsOf : termios -> { iflag : I.flags, oflag : O.flags, cflag : C.flags, lflag : L.flags, cc : V.cc, ispeed : speed, ospeed : speed } val getiflag : termios -> I.flags val getoflag : termios -> O.flags val getcflag : termios -> C.flags val getlflag : termios -> L.flags val getcc : termios -> V.cc structure CF : sig val getospeed : termios -> speed val setospeed : termios * speed -> termios val getispeed : termios -> speed val setispeed : termios * speed -> termios end structure TC : sig eqtype set_action val sanow : set_action val sadrain : set_action val saflush : set_action eqtype flow_action val ooff : flow_action val oon : flow_action val ioff : flow_action val ion : flow_action eqtype queue_sel val iflush : queue_sel val oflush : queue_sel val ioflush : queue_sel val getattr : file_desc -> termios val setattr : file_desc * set_action * termios -> unit val sendbreak : file_desc * int -> unit val drain : file_desc -> unit val flush : file_desc * queue_sel -> unit val flow : file_desc * flow_action -> unit end val getpgrp : file_desc -> pid val setpgrp : file_desc * pid -> unit end; signature POSIX = sig structure Error : POSIX_ERROR structure Signal : POSIX_SIGNAL structure Process : POSIX_PROCESS where type signal = Signal.signal structure ProcEnv : POSIX_PROC_ENV where type pid = Process.pid structure FileSys : POSIX_FILE_SYS where type file_desc = ProcEnv.file_desc where type uid = ProcEnv.uid where type gid = ProcEnv.gid structure IO : POSIX_IO where type pid = Process.pid where type file_desc = ProcEnv.file_desc where type open_mode = FileSys.open_mode structure SysDB : POSIX_SYS_DB where type uid = ProcEnv.uid where type gid = ProcEnv.gid structure TTY : POSIX_TTY where type pid = Process.pid where type file_desc = ProcEnv.file_desc end; structure Posix :> sig include POSIX (* I'm not sure if it's legal to use where type with a datatype. The alternative is to copy the whole of the signature and use datatype replication. *) where type FileSys.access_mode = OS.FileSys.access_mode sharing type Process.pid = ProcEnv.pid = IO.pid = TTY.pid sharing type ProcEnv.uid = FileSys.uid = SysDB.uid sharing type ProcEnv.gid = FileSys.gid = SysDB.gid sharing type ProcEnv.file_desc = FileSys.file_desc = IO.file_desc = TTY.file_desc end (* Posix.Signal.signal is made the same as int so that we can pass the values directly to our (non-standard) Signal.signal function. Since there isn't a standard way of handling signals this is the best we can do. *) where type Signal.signal = int where type FileSys.dirstream = OS.FileSys.dirstream = struct open RuntimeCalls; fun getConst i = SysWord.fromInt(RunCall.run_call2 POLY_SYS_os_specific (4, i)) structure BitFlags = (* This structure is used as the basis of all the BIT_FLAGS structures. *) struct type flags = SysWord.word fun toWord f = f fun fromWord f = f val flags = List.foldl (fn (a, b) => SysWord.orb(a,b)) 0w0 fun allSet (fl1, fl2) = SysWord.andb(fl1, fl2) = fl1 fun anySet (fl1, fl2) = SysWord.andb(fl1, fl2) <> 0w0 fun clear (fl1, fl2) = SysWord.andb(SysWord.notb fl1, fl2) end structure Error = struct type syserror = OS.syserror val errorMsg = OS.errorMsg and errorName = OS.errorName and syserror = OS.syserror fun toWord (s: syserror): SysWord.word = SysWord.fromInt(RunCall.unsafeCast s) and fromWord (w: SysWord.word) : syserror = RunCall.unsafeCast(SysWord.toInt w) val toobig = fromWord(getConst 0) and acces = fromWord(getConst 1) and again = fromWord(getConst 2) and badf = fromWord(getConst 3) and badmsg = fromWord(getConst 4) and busy = fromWord(getConst 5) and canceled (* sic *) = fromWord(getConst 6) and child = fromWord(getConst 7) and deadlk = fromWord(getConst 8) and dom = fromWord(getConst 9) and exist = fromWord(getConst 10) and fault = fromWord(getConst 11) and fbig = fromWord(getConst 12) and inprogress = fromWord(getConst 13) and intr = fromWord(getConst 14) and inval = fromWord(getConst 15) and io = fromWord(getConst 16) and isdir = fromWord(getConst 17) and loop = fromWord(getConst 18) and mfile = fromWord(getConst 19) and mlink = fromWord(getConst 20) and msgsize = fromWord(getConst 21) and nametoolong = fromWord(getConst 22) and nfile = fromWord(getConst 23) and nodev = fromWord(getConst 24) and noent = fromWord(getConst 25) and noexec = fromWord(getConst 26) and nolck = fromWord(getConst 27) and nomem = fromWord(getConst 28) and nospc = fromWord(getConst 29) and nosys = fromWord(getConst 30) and notdir = fromWord(getConst 31) and notempty = fromWord(getConst 32) and notsup = fromWord(getConst 33) and notty = fromWord(getConst 34) and nxio = fromWord(getConst 35) and perm = fromWord(getConst 36) and pipe = fromWord(getConst 37) and range = fromWord(getConst 38) and rofs = fromWord(getConst 39) and spipe = fromWord(getConst 40) and srch = fromWord(getConst 41) and xdev = fromWord(getConst 42) end; structure Signal = struct type signal = int val toWord = SysWord.fromInt and fromWord = SysWord.toInt (* These signal values are probably defined to correspond to particular numbers but there's no harm in getting them from the RTS. *) val abrt = fromWord(getConst 43) and alrm = fromWord(getConst 44) and bus = fromWord(getConst 45) and fpe = fromWord(getConst 46) and hup = fromWord(getConst 47) and ill = fromWord(getConst 48) and int = fromWord(getConst 49) and kill = fromWord(getConst 50) and pipe = fromWord(getConst 51) and quit = fromWord(getConst 52) and segv = fromWord(getConst 53) and term = fromWord(getConst 54) and usr1 = fromWord(getConst 55) and usr2 = fromWord(getConst 56) and chld = fromWord(getConst 57) and cont = fromWord(getConst 58) and stop = fromWord(getConst 59) and tstp = fromWord(getConst 60) and ttin = fromWord(getConst 61) and ttou = fromWord(getConst 62) end; structure Process = struct type signal = Signal.signal type pid = int val pidToWord = SysWord.fromInt and wordToPid = SysWord.toInt datatype waitpid_arg = W_ANY_CHILD | W_CHILD of pid | W_SAME_GROUP | W_GROUP of pid datatype exit_status = W_EXITED | W_EXITSTATUS of Word8.word | W_SIGNALED of signal | W_STOPPED of signal datatype killpid_arg = K_PROC of pid | K_SAME_GROUP | K_GROUP of pid structure W = struct open BitFlags val untraced = getConst 133 val nohang = getConst 134 (* Not exported. *) val all = flags [ untraced, nohang] val intersect = List.foldl (fn (a, b) => SysWord.andb(a, b)) all end local val doCall = RunCall.run_call2 POLY_SYS_os_specific in fun fork () = case doCall(5, ()) of 0 => NONE (* Parent *) | n => SOME n (* Child *) end local val doCall = RunCall.run_call2 POLY_SYS_os_specific in (* Map the pid argument to positive, zero or negative. *) fun kill (K_PROC pid, si) = doCall(6,(pid, si)) | kill (K_SAME_GROUP, si) = doCall(6, (0, si)) | kill (K_GROUP pid, si) = doCall(6, (~pid, si)) end local val doCall = RunCall.run_call2 POLY_SYS_os_specific in (* The format of a result may well be sufficiently fixed that we could decode it without calling the RTS. It's probably worth the small cost to make maintenance easier. *) fun fromStatus (stat: OS.Process.status): exit_status = case (doCall(15, stat)) of (1, 0) => W_EXITED | (1, n) => W_EXITSTATUS(Word8.fromInt n) | (2, n) => W_SIGNALED n | (3, n) => W_STOPPED n | _ => raise Fail "Unknown result status" end local val doCall = RunCall.run_call2 POLY_SYS_os_specific fun doWait(kind: int, pid: pid, flags: W.flags list) = let val (pid, status) = doCall(14, (kind, pid, SysWord.toInt(W.flags flags))) in (pid, fromStatus status) end in fun waitpid(W_ANY_CHILD, flags) = doWait(0, 0, flags) | waitpid(W_CHILD pid, flags) = doWait(1, pid, flags) | waitpid(W_SAME_GROUP, flags) = doWait(2, 0, flags) | waitpid(W_GROUP pid, flags) = doWait(3, pid, flags) fun wait() = waitpid(W_ANY_CHILD, []) fun waitpid_nh(wpa, flags) = let val (pid, status) = waitpid(wpa, W.nohang :: flags) in if pid = 0 then NONE else SOME(pid, status) end end fun exec(p, args) = RunCall.run_call2 POLY_SYS_os_specific(17, (p, args)) and exece(p, args, env) = RunCall.run_call2 POLY_SYS_os_specific(18, (p, args, env)) and execp(p, args) = RunCall.run_call2 POLY_SYS_os_specific(19, (p, args)) (* The definition of "exit" is obviously designed to allow OS.Process.exit to be defined in terms of it. In particular it doesn't execute the functions registered with atExit. *) fun exit w = RunCall.run_call1 RuntimeCalls.POLY_SYS_exit w local val doCall = RunCall.run_call2 POLY_SYS_os_specific fun toAbsolute t = if t < Time.zeroTime then raise OS.SysErr("Invalid time", NONE) else t + Time.now() (* Because of rounding we may get a negative time. In that case we return zero. *) fun endTime t = let val now = Time.now() in if t > now then t-now else Time.zeroTime end in (* This previously used absolute times. Now uses relative. *) fun alarm t = doCall(20, t) fun sleep t = let val finish = toAbsolute t in (* We need to pass in the absolute time here. That's because the process scheduler retries the function until a signal occurs or the time expires. *) (* The result is zero if it returns successfully. If an exception is raised we return the remaining time. We assume that this only happens because the process is interrupted. *) (doCall(22, finish); Time.zeroTime) handle _ => endTime finish end end local val doCall = RunCall.run_call2 POLY_SYS_os_specific in fun pause() = doCall(21, ()) end end; structure ProcEnv = struct type pid = Process.pid and file_desc = OS.IO.iodesc type uid = int and gid = int val uidToWord = SysWord.fromInt and wordToUid = SysWord.toInt and gidToWord = SysWord.fromInt and wordToGid = SysWord.toInt local val doCall = RunCall.run_call2 POLY_SYS_os_specific in fun getpid () = doCall(7, ()) and getppid () = doCall(8, ()) and getuid () = doCall(9, ()) and geteuid () = doCall(10, ()) and getgid () = doCall(11, ()) and getegid () = doCall(12, ()) and getpgrp () = doCall(13, ()) and setsid () = doCall(27, ()) end val getenv = OS.Process.getEnv fun environ() = RunCall.run_call2 POLY_SYS_process_env(21, ()) local val doCall = RunCall.run_call2 POLY_SYS_os_specific in fun setuid(u: uid) = doCall(23, u) and setgid(g: gid) = doCall(24, g) end local val doCall = RunCall.run_call2 POLY_SYS_os_specific in fun getgroups() = doCall(25, ()) end local val doCall = RunCall.run_call2 POLY_SYS_os_specific in fun getlogin() = doCall(26, ()) and ctermid() = doCall(30, ()) end local val doCall = RunCall.run_call2 POLY_SYS_os_specific in (* In each case NONE as an argument is taken as 0. *) fun setpgid{pid, pgid} = doCall(28, (getOpt(pid, 0), getOpt(pgid, 0))) end local val doCall = RunCall.run_call2 POLY_SYS_os_specific in fun uname() = doCall(29, ()) end val time = Time.now fun times() = let (* Apart from the child times all these could be obtained by calling the Timer functions. *) val doCall: int*unit -> Time.time = RunCall.run_call2 RuntimeCalls.POLY_SYS_timing_dispatch fun getUserTime() = doCall(7, ()) and getSysTime() = doCall(8, ()) and getRealTime() = doCall(10, ()) and getChildUserTime() = doCall(11, ()) and getChildSysTime() = doCall(12, ()) in { elapsed=getRealTime(), utime=getUserTime(), stime=getSysTime(), cutime=getChildUserTime(), cstime=getChildSysTime()} end local val doCall = RunCall.run_call2 POLY_SYS_os_specific in fun ttyname(f: file_desc) = doCall(31, f) end local val doCall = RunCall.run_call2 POLY_SYS_os_specific in fun isatty(f: file_desc) = doCall(32, f) end local val doCall = RunCall.run_call2 POLY_SYS_os_specific in fun sysconf(s: string) = SysWord.fromInt(doCall(33, s)) end end; structure FileSys = struct type uid = ProcEnv.uid and gid = ProcEnv.gid type file_desc = OS.IO.iodesc type dirstream = OS.FileSys.dirstream datatype open_mode = O_RDONLY | O_WRONLY | O_RDWR structure O = struct open BitFlags val append = getConst 66 and excl = getConst 67 and noctty = getConst 68 and nonblock = getConst 69 and sync = getConst 70 and trunc = getConst 71 val all = flags [append, excl, noctty, nonblock, sync, trunc] val intersect = List.foldl (fn (a, b) => SysWord.andb(a, b)) all end local val doIo: int*file_desc*unit -> int = RunCall.run_call3 POLY_SYS_io_dispatch in fun fdToWord (f: file_desc) = SysWord.fromInt(doIo(30, f, ())) end local val doIo: int*unit*int -> file_desc = RunCall.run_call3 POLY_SYS_io_dispatch in fun wordToFD(s: SysWord.word): file_desc = doIo(31, (), SysWord.toInt s) end (* file_desc and OS.IO.iodesc are the same. *) fun fdToIOD i = i and iodToFD i = SOME i val opendir = OS.FileSys.openDir and readdir = OS.FileSys.readDir and rewinddir = OS.FileSys.rewindDir and closedir = OS.FileSys.closeDir and chdir = OS.FileSys.chDir and getcwd = OS.FileSys.getDir and unlink = OS.FileSys.remove and rmdir = OS.FileSys.rmDir and rename = OS.FileSys.rename and readlink = OS.FileSys.readLink val stdin : file_desc = RunCall.run_call1 POLY_SYS_io_operation POLY_SYS_stdin val stdout : file_desc = RunCall.run_call1 POLY_SYS_io_operation POLY_SYS_stdout val stderr : file_desc = RunCall.run_call1 POLY_SYS_io_operation POLY_SYS_stderr structure S = struct open BitFlags type mode = flags val irusr : mode = getConst 145 and iwusr : mode = getConst 146 and ixusr : mode = getConst 147 val irwxu : mode = flags[irusr, iwusr, ixusr] val irgrp : mode = getConst 148 and iwgrp : mode = getConst 149 and ixgrp : mode = getConst 150 val irwxg : mode = flags[irgrp, iwgrp, ixgrp] val iroth : mode = getConst 151 and iwoth : mode = getConst 152 and ixoth : mode = getConst 153 val irwxo : mode = flags[iroth, iwoth, ixoth] val isuid : mode = getConst 154 val isgid : mode = getConst 155 val all = flags [irwxu, irwxg, irwxo, isuid, isgid] val intersect = List.foldl (fn (a, b) => SysWord.andb(a, b)) all end local val o_rdonly = getConst 63 and o_wronly = getConst 64 and o_rdwr = getConst 65 fun toBits O_RDONLY = o_rdonly | toBits O_WRONLY = o_wronly | toBits O_RDWR = o_rdwr val doIo = RunCall.run_call3 POLY_SYS_io_dispatch in fun openf(name, mode, flags) = let val bits = SysWord.orb(flags, toBits mode) in doIo(70, 0, (name, SysWord.toInt bits, 0)) end and createf(name, mode, flags, smode) = let val bits = SysWord.orb(flags, toBits mode) in doIo(71, 0, (name, SysWord.toInt bits, SysWord.toInt smode)) end end fun creat(s, m) = createf(s, O_WRONLY, O.trunc, m) local val doCall = RunCall.run_call2 POLY_SYS_os_specific in fun umask m = SysWord.fromInt(doCall(50, SysWord.toInt m)) end local val doCall = RunCall.run_call2 POLY_SYS_os_specific in fun link{old, new} = doCall(51, (old, new)) and symlink{old, new} = doCall(54, (old, new)) end local val doCall = RunCall.run_call2 POLY_SYS_os_specific in fun mkdir(name, mode) = doCall(52, (name, SysWord.toInt mode)) and mkfifo(name, mode) = doCall(53, (name, SysWord.toInt mode)) and chmod(name, mode) = doCall(59, (name, SysWord.toInt mode)) end type dev = int and ino = int val wordToDev = SysWord.toInt and devToWord = SysWord.fromInt and wordToIno = SysWord.toInt and inoToWord = SysWord.fromInt structure ST = struct type stat = { mode: S.mode, kind: int, ino: ino, dev: dev, nlink: int, uid: uid, gid: gid, size: int, atime: Time.time, mtime: Time.time, ctime: Time.time } (* The "kind" information is encoded by "stat" *) fun isDir({ kind, ...} : stat) = kind = 1 and isChr({ kind, ...} : stat) = kind = 2 and isBlk({ kind, ...} : stat) = kind = 3 and isReg({ kind, ...} : stat) = kind = 0 and isFIFO({ kind, ...} : stat) = kind = 4 and isLink({ kind, ...} : stat) = kind = 5 and isSock({ kind, ...} : stat) = kind = 6 val mode : stat -> S.mode = #mode and ino : stat -> ino = #ino val dev : stat -> dev = #dev val nlink : stat -> int = #nlink val uid : stat -> uid = #uid val gid : stat -> gid = #gid val size : stat -> Position.int = #size val atime : stat -> Time.time = #atime val mtime : stat -> Time.time = #mtime val ctime : stat -> Time.time = #ctime end local val doCall1 = RunCall.run_call2 POLY_SYS_os_specific val doCall2 = RunCall.run_call2 POLY_SYS_os_specific fun convStat(mode, kind, ino, dev, nlink, uid, gid, size, atime, mtime, ctime) = { mode = SysWord.fromInt mode, kind = kind, ino = ino, dev = dev, nlink = nlink, uid = uid, gid = gid, size = size, atime = atime, mtime = mtime, ctime = ctime } in fun stat name = convStat(doCall1(55, name)) and lstat name = convStat(doCall1(56, name)) and fstat f = convStat(doCall2(57, f)) end datatype access_mode = datatype OS.FileSys.access_mode local val doCall = RunCall.run_call2 POLY_SYS_os_specific val rOK = getConst 156 and wOK = getConst 157 and eOK = getConst 158 and fOK = getConst 159 fun abit A_READ = rOK | abit A_WRITE = wOK | abit A_EXEC = eOK val abits = List.foldl (fn (a, b) => SysWord.orb(abit a,b)) 0w0 in (* If the bits are nil it tests for existence of the file. *) fun access(name, []) = doCall(58, (name, SysWord.toInt(fOK))) | access(name, al) = doCall(58, (name, SysWord.toInt(abits al))) end local val doCall = RunCall.run_call2 POLY_SYS_os_specific in fun fchmod(fd, mode) = doCall(60, (fd, SysWord.toInt mode)) end local val doCall = RunCall.run_call2 POLY_SYS_os_specific in fun chown(name, uid, gid) = doCall(61, (name, uid, gid)) end local val doCall = RunCall.run_call2 POLY_SYS_os_specific in fun fchown(fd, uid, gid) = doCall(62, (fd, uid, gid)) end local val doCall1 = RunCall.run_call2 POLY_SYS_os_specific and doCall2 = RunCall.run_call2 POLY_SYS_os_specific in fun utime (name, NONE) = doCall1(64, name) | utime (name, SOME{actime, modtime}) = doCall2(63, (name, actime, modtime)) end local val doCall = RunCall.run_call2 POLY_SYS_os_specific in fun ftruncate(fd, size) = doCall(65, (fd, size)) end local val doCall = RunCall.run_call2 POLY_SYS_os_specific in fun pathconf(name, var) = let val res = doCall(66, (name, var)) in if res < 0 then NONE else SOME(SysWord.fromInt res) end end local val doCall = RunCall.run_call2 POLY_SYS_os_specific in fun fpathconf(fd, var) = let val res = doCall(67, (fd, var)) in if res < 0 then NONE else SOME(SysWord.fromInt res) end end end; structure IO = struct type file_desc = OS.IO.iodesc and pid = Process.pid structure FD = struct open BitFlags val cloexec: flags = getConst 132 val all = flags [cloexec] val intersect = List.foldl (fn (a, b) => SysWord.andb(a, b)) all end (* Posix.IO.O seems to be a cut-down version of Posix.FileSys.O. It seems to me that one structure would suffice. *) structure O = FileSys.O datatype open_mode = datatype FileSys.open_mode local val doIo = RunCall.run_call3 POLY_SYS_io_dispatch in fun close (strm: file_desc): unit = doIo(7, strm, 0) end local val doIo = RunCall.run_call3 POLY_SYS_io_dispatch in fun readVec (strm: file_desc, len: int): Word8Vector.vector = doIo(26, strm, len) end local val doCall = RunCall.run_call2 POLY_SYS_os_specific in fun pipe() = let val (inf, outf) = doCall(110, ()) in { infd=inf, outfd=outf } end end local val doCall = RunCall.run_call2 POLY_SYS_os_specific in fun dup fd = doCall(111, fd) end local val doCall = RunCall.run_call2 POLY_SYS_os_specific in fun dup2{old, new} = doCall(112, (old, new)) end local val doCall = RunCall.run_call2 POLY_SYS_os_specific in fun dupfd{old, base} = doCall(113, (old, base)) end local val doCall = RunCall.run_call2 POLY_SYS_os_specific val o_rdonly = getConst 63 and o_wronly = getConst 64 and o_rdwr = getConst 65 and o_accmode = getConst 166 (* Access mode mask. *) in fun getfd fd = SysWord.fromInt(doCall(114, fd)) and getfl fd = let val res = SysWord.fromInt(doCall(116, fd)) (* Separate out the mode bits. *) val flgs = SysWord.andb(res, SysWord.notb o_accmode) val mode = SysWord.andb(res, o_accmode) val omode = if mode = o_rdonly then O_RDONLY else if mode = o_wronly then O_WRONLY else O_RDWR in (flgs, omode) end end local val doCall = RunCall.run_call2 POLY_SYS_os_specific in fun setfd(fd, flags) = doCall(115, (fd, SysWord.toInt flags)) and setfl(fd, flags) = doCall(117, (fd, SysWord.toInt flags)) end datatype whence = SEEK_SET | SEEK_CUR | SEEK_END local val seekSet = SysWord.toInt(getConst 160) and seekCur = SysWord.toInt(getConst 161) and seekEnd = SysWord.toInt(getConst 162) in (* Convert the datatype to the corresponding int. *) fun seekWhence SEEK_SET = seekSet | seekWhence SEEK_CUR = seekCur | seekWhence SEEK_END = seekEnd fun whenceSeek s = if s = seekSet then SEEK_SET else if s = seekCur then SEEK_CUR else SEEK_END end local val doCall = RunCall.run_call2 POLY_SYS_os_specific in fun lseek(fd, pos, whence) = doCall(115, (fd, pos, seekWhence whence)) end local val doCall = RunCall.run_call2 POLY_SYS_os_specific in fun fsync fd = doCall(119, fd) end datatype lock_type = F_RDLCK | F_WRLCK | F_UNLCK structure FLock = struct val fRdlck = SysWord.toInt(getConst 163) and fWrlck = SysWord.toInt(getConst 164) and fUnlck = SysWord.toInt(getConst 165) type flock = int (* lock type *) * int (* whence *) * Position.int (* start *) * Position.int (* len *) * pid fun flock{ltype, whence, start, len, pid} = let val lt = case ltype of F_RDLCK => fRdlck | F_WRLCK => fWrlck | F_UNLCK => fUnlck in (lt, seekWhence whence, start, len, getOpt(pid, ~1)) end fun ltype (lt, _, _, _, _) = if lt = fRdlck then F_RDLCK else if lt = fWrlck then F_WRLCK else F_UNLCK fun whence (fl: flock) = whenceSeek(#2 fl) val start : flock -> Position.int = #3 val len : flock -> Position.int = #4 fun pid (_, _, _, _, pid) = if pid < 0 then NONE else SOME pid end local val doCall = RunCall.run_call2 POLY_SYS_os_specific in fun getlk(fd, (t, w, s, l, p)) = doCall(120, (fd, t, w, s, l, p)) (* Note: the return type of setlk and setlkw is Flock.lock not unit. I assume they simply return their argument. *) and setlk(fd, (t, w, s, l, p)) = doCall(121, (fd, t, w, s, l, p)) and setlkw(fd, (t, w, s, l, p)) = doCall(122, (fd, t, w, s, l, p)) end val readArr = LibraryIOSupport.readBinArray and writeVec = LibraryIOSupport.writeBinVec and writeArr = LibraryIOSupport.writeBinArray val mkTextReader = LibraryIOSupport.wrapInFileDescr and mkTextWriter = LibraryIOSupport.wrapOutFileDescr val mkBinReader = LibraryIOSupport.wrapBinInFileDescr and mkBinWriter = LibraryIOSupport.wrapBinOutFileDescr end; structure SysDB = struct type uid = ProcEnv.uid and gid = ProcEnv.gid structure Passwd = struct type passwd = string * uid * gid * string * string val name: passwd->string = #1 and uid: passwd->uid = #2 and gid: passwd->gid = #3 and home: passwd->string = #4 and shell: passwd->string = #5 end structure Group = struct type group = string * gid * string list val name: group->string = #1 and gid: group->gid = #2 and members: group->string list = #3 end local val doCall = RunCall.run_call2 POLY_SYS_os_specific in fun getpwnam (s: string): Passwd.passwd = doCall(100, s) end local val doCall = RunCall.run_call2 POLY_SYS_os_specific in fun getpwuid (u: uid): Passwd.passwd = doCall(101, u) end local val doCall = RunCall.run_call2 POLY_SYS_os_specific in fun getgrnam (s: string): Group.group = doCall(102, s) end local val doCall = RunCall.run_call2 POLY_SYS_os_specific in fun getgrgid (g: gid): Group.group = doCall(103, g) end end; structure TTY = struct type pid = Process.pid and file_desc = OS.IO.iodesc structure V = struct val eof = SysWord.toInt(getConst 72) and eol = SysWord.toInt(getConst 73) and erase = SysWord.toInt(getConst 74) and intr = SysWord.toInt(getConst 75) and kill = SysWord.toInt(getConst 76) and min = SysWord.toInt(getConst 77) and quit = SysWord.toInt(getConst 78) and susp = SysWord.toInt(getConst 79) and time = SysWord.toInt(getConst 80) and start = SysWord.toInt(getConst 81) and stop = SysWord.toInt(getConst 82) and nccs = SysWord.toInt(getConst 83) type cc = string fun cc l = (* Generate a string using the values given and defaulting the rest to NULL. *) let fun find [] i = #"\000" | find ((n, c)::l) i = if i = n then c else find l i in CharVector.tabulate(nccs, find l) end (* Question: What order does this take? E.g. What is the result of update(cc, [(eof, #"a"), (eof, #"b")]) ? Assume that earlier entries take precedence. That also affects the processing of exceptions. *) fun update(cc, l) = let fun find [] i = String.sub(cc, i) | find ((n, c)::l) i = if i = n then c else find l i in CharVector.tabulate(nccs, find l) end val sub = String.sub end structure I = struct open BitFlags val brkint = getConst 84 and icrnl = getConst 85 and ignbrk = getConst 86 and igncr = getConst 87 and ignpar = getConst 88 and inlcr = getConst 89 and inpck = getConst 90 and istrip = getConst 91 and ixoff = getConst 92 and ixon = getConst 93 and parmrk = getConst 94 val all = flags [brkint, icrnl, ignbrk, igncr, ignpar, inlcr, inpck, istrip, ixoff, ixon, parmrk] val intersect = List.foldl (fn (a, b) => SysWord.andb(a, b)) all end structure O = struct open BitFlags val opost = getConst 95 val all = flags [opost] val intersect = List.foldl (fn (a, b) => SysWord.andb(a, b)) all end structure C = struct open BitFlags val clocal = getConst 96 and cread = getConst 97 and cs5 = getConst 98 and cs6 = getConst 99 and cs7 = getConst 100 and cs8 = getConst 101 and csize = getConst 102 and cstopb = getConst 103 and hupcl = getConst 104 and parenb = getConst 105 and parodd = getConst 106 val all = flags [clocal, cread, cs5, cs6, cs7, cs8, csize, cstopb, hupcl, parenb, parodd] val intersect = List.foldl (fn (a, b) => SysWord.andb(a, b)) all end structure L = struct open BitFlags val echo = getConst 107 and echoe = getConst 108 and echok = getConst 109 and echonl = getConst 110 and icanon = getConst 111 and iexten = getConst 112 and isig = getConst 113 and noflsh = getConst 114 and tostop = getConst 115 val all = flags [echo, echoe, echok, echonl, icanon, iexten, isig, noflsh, tostop] val intersect = List.foldl (fn (a, b) => SysWord.andb(a, b)) all end type speed = int (* compareSpeed is supposed to compare by the baud rate, not by the encoding. Provided the encoding maintains the ordering then that's fine. Maybe we should have an RTS call. *) val compareSpeed : speed * speed -> order = Int.compare and speedToWord : speed -> SysWord.word = SysWord.fromInt and wordToSpeed : SysWord.word -> speed = SysWord.toInt val b0 : speed = SysWord.toInt(getConst 116) and b50 : speed = SysWord.toInt(getConst 117) and b75 : speed = SysWord.toInt(getConst 118) and b110 : speed = SysWord.toInt(getConst 119) and b134 : speed = SysWord.toInt(getConst 120) and b150 : speed = SysWord.toInt(getConst 121) and b200 : speed = SysWord.toInt(getConst 122) and b300 : speed = SysWord.toInt(getConst 123) and b600 : speed = SysWord.toInt(getConst 124) and b1200 : speed = SysWord.toInt(getConst 125) and b1800 : speed = SysWord.toInt(getConst 126) and b2400 : speed = SysWord.toInt(getConst 127) and b4800 : speed = SysWord.toInt(getConst 128) and b9600 : speed = SysWord.toInt(getConst 129) and b19200 : speed = SysWord.toInt(getConst 130) and b38400 : speed = SysWord.toInt(getConst 131) type termios = { iflag : I.flags, oflag : O.flags, cflag : C.flags, lflag : L.flags, cc : V.cc, ispeed : speed, ospeed : speed } fun termios t = t and fieldsOf t = t val getiflag : termios -> I.flags = #iflag and getoflag : termios -> O.flags = #oflag and getcflag : termios -> C.flags = #cflag and getlflag : termios -> L.flags = #lflag and getcc : termios -> V.cc = #cc structure CF = struct val getospeed : termios -> speed = #ospeed and getispeed : termios -> speed = #ispeed fun setospeed ( { iflag, oflag, cflag, lflag, cc, ispeed, ospeed }, speed) = { iflag=iflag, oflag=oflag, cflag=cflag, lflag=lflag, cc=cc, ispeed = ispeed, ospeed = speed } fun setispeed ( { iflag, oflag, cflag, lflag, cc, ispeed, ospeed }, speed) = { iflag=iflag, oflag=oflag, cflag=cflag, lflag=lflag, cc=cc, ispeed = speed, ospeed = ospeed } end structure TC = struct type set_action = int val sanow : set_action = SysWord.toInt(getConst 135) val sadrain : set_action = SysWord.toInt(getConst 136) val saflush : set_action = SysWord.toInt(getConst 137) type flow_action = int val ooff : flow_action = SysWord.toInt(getConst 138) val oon : flow_action = SysWord.toInt(getConst 139) val ioff : flow_action = SysWord.toInt(getConst 140) val ion : flow_action = SysWord.toInt(getConst 141) type queue_sel = int val iflush : queue_sel = SysWord.toInt(getConst 142) val oflush : queue_sel = SysWord.toInt(getConst 143) val ioflush : queue_sel = SysWord.toInt(getConst 144) local val doCall = RunCall.run_call2 POLY_SYS_os_specific in fun getattr f = let val (iflag, oflag, cflag, lflag, cc, ispeed, ospeed) = doCall(150, f) in { iflag=SysWord.fromInt iflag, oflag=SysWord.fromInt oflag, cflag=SysWord.fromInt cflag, lflag=SysWord.fromInt lflag, cc=cc, ispeed = ispeed, ospeed = ospeed } end end local val doCall = RunCall.run_call2 POLY_SYS_os_specific in fun setattr (f, sa, {iflag, oflag, cflag, lflag, cc, ispeed, ospeed}) = doCall(151, (f, sa, SysWord.toInt iflag, SysWord.toInt oflag, SysWord.toInt cflag, SysWord.toInt lflag, cc, ispeed, ospeed)) end local val doCall = RunCall.run_call2 POLY_SYS_os_specific in fun sendbreak (f, d) = doCall(152, (f, d)) end local val doCall = RunCall.run_call2 POLY_SYS_os_specific in fun drain f = doCall(153, f) end local val doCall = RunCall.run_call2 POLY_SYS_os_specific in fun flush (f, qs) = doCall(154, (f, qs)) end local val doCall = RunCall.run_call2 POLY_SYS_os_specific in fun flow (f, fa) = doCall(155, (f, fa)) end local val doCall = RunCall.run_call2 POLY_SYS_os_specific in fun flow (f, fa) = doCall(155, (f, fa)) end end local val doCall = RunCall.run_call2 POLY_SYS_os_specific in fun getpgrp (f: file_desc): pid = doCall(156, f) end local val doCall = RunCall.run_call2 POLY_SYS_os_specific in fun setpgrp (f: file_desc, p: pid): unit = doCall(157, (f,p)) end end end; local (* Install the pretty printers for pid, uid, gid. DOn't install one for signal because it's now the same as int. *) fun ppid(p, _, _, _) _ _ x = p(Int.toString(SysWord.toInt(Posix.Process.pidToWord x))) and puid(p, _, _, _) _ _ x = p(Int.toString(SysWord.toInt(Posix.ProcEnv.uidToWord x))) and pgid(p, _, _, _) _ _ x = p(Int.toString(SysWord.toInt(Posix.ProcEnv.gidToWord x))) in val () = PolyML.install_pp ppid val () = PolyML.install_pp puid val () = PolyML.install_pp pgid end; polyml.5.2.1/basis/PrimIO.sml0000644000175000017500000004171110313043326014750 0ustar daviddavid(* Title: Standard Basis Library: PrimIO functor Copyright David C.J. Matthews 2000, 2005 This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* G&R 2004 status: Done *) functor PrimIO ( structure Vector : MONO_VECTOR structure VectorSlice: MONO_VECTOR_SLICE structure Array : MONO_ARRAY structure ArraySlice : MONO_ARRAY_SLICE sharing type Array.elem = Vector.elem = VectorSlice.elem = ArraySlice.elem sharing type Array.vector = Vector.vector = VectorSlice.vector = ArraySlice.vector sharing type VectorSlice.slice = ArraySlice.vector_slice sharing type Array.array = ArraySlice.array val someElem : Array.elem eqtype pos (* Note: this was shown as just a type in the functor arg. *) val compare : pos * pos -> order ): PRIM_IO = struct type array = Array.array and vector = Vector.vector and elem = Array.elem and vector_slice = VectorSlice.slice and array_slice = ArraySlice.slice type pos = pos val compare = compare datatype reader = RD of { name : string, chunkSize : int, readVec : (int -> vector) Option.option, (* Use Option once to ensure dependency. *) readArr : (array_slice -> int) Option.option, readVecNB : (int -> vector Option.option) Option.option, readArrNB : (array_slice -> int Option.option) Option.option, block : (unit -> unit) option, canInput : (unit -> bool) option, avail : unit -> int option, getPos : (unit -> pos) option, setPos : (pos -> unit) option, endPos : (unit -> pos) option, verifyPos : (unit -> pos) option, close : unit -> unit, ioDesc : OS.IO.iodesc option } datatype writer = WR of { name : string, chunkSize : int, writeVec : (vector_slice -> int) Option.option, writeArr : (array_slice -> int) Option.option, writeVecNB : (vector_slice -> int Option.option) Option.option, writeArrNB : (array_slice -> int Option.option) Option.option, block : (unit -> unit) option, canOutput : (unit -> bool) option, getPos : (unit -> pos) option, setPos : (pos -> unit) option, endPos : (unit -> pos) option, verifyPos : (unit -> pos) option, close : unit -> unit, ioDesc : OS.IO.iodesc option } (* Define readVec, readArr, readVecNB, readArrNB if they are not provided using the functions which are. *) fun augmentReader ( RD { name : string, chunkSize : int, readVec : (int -> vector) Option.option, readArr : (array_slice -> int) Option.option, readVecNB : (int -> vector Option.option) Option.option, readArrNB : (array_slice -> int Option.option) Option.option, block : (unit -> unit) option, canInput : (unit -> bool) option, avail : unit -> int option, getPos : (unit -> pos) option, setPos : (pos -> unit) option, endPos : (unit -> pos) option, verifyPos : (unit -> pos) option, close : unit -> unit, ioDesc : OS.IO.iodesc option }) : reader = let (* First try defining readVec in terms of readArr. *) val readVec' = case (readVec, readArr) of (s as SOME _, _) => s (* If readVec exists use it. *) | (NONE, SOME ra) => (* if readVec doesn't exists but readArr does *) SOME( fn (l: int) => let (* Create an array initialised to zeros. We have to be careful here. Suppose the caller was using "readVec maxInt" to mean "give me the rest of the file" knowing that it was only small. To avoid problems we only read the smaller of the size requested or the block size. *) val v = Array.array(Int.min(l, chunkSize), someElem) (* Read as much as we can. *) val n = ra(ArraySlice.full v) in (* Return the section read. *) ArraySlice.vector(ArraySlice.slice(v, 0, SOME n)) end ) | (NONE, NONE) => NONE (* And vice-versa *) val readArr' = case (readArr, readVec) of (s as SOME _, _) => s(* If readArr exists use it. *) | (NONE, SOME rv) => (* if readArr doesn't exists but readVec does *) SOME( fn slice => let val (buff, i, len) = ArraySlice.base slice (* Read a vector and try and put that into the array. *) val r = rv len in (* Copy the vector into the array. *) Array.copyVec{src=r, dst = buff, di=i}; (* Return the number of characters read. *) Vector.length r end ) | (NONE, NONE) => NONE (* We now have the blocking versions of readVec and readArr if either of them existed. Now defining the non-blocking versions using these blocking versions if we have to. *) val readVecNB' = case (readVecNB, readArrNB) of (s as SOME _, _) => s (* If readVecNB exists use it. *) | (NONE, SOME ra) => (* If readVecNB does not exist but readArrNB does*) SOME( fn (l: int) => let val v = Array.array(Int.min(l, chunkSize), someElem) in case ra(ArraySlice.full v) of NONE => NONE | SOME n => (* Return the section read. *) SOME (ArraySlice.vector(ArraySlice.slice(v, 0, SOME n))) end ) | (NONE, NONE) => (* Try using the blocking readVec' with canInput. We use the readVec' we defined above so that this will also try using readArr. *) case (canInput, readVec') of (SOME canIn, SOME rv) => SOME( fn (l: int) => if canIn() then SOME(rv l) else NONE ) | _ => NONE (* Can't do it. *) val readArrNB' = case (readArrNB, readVecNB) of (s as SOME _, _) => s(* If readArrNB exists use it. *) | (NONE, SOME rv) => (* if readArrNB doesn't exists but readVecNB does *) SOME( fn slice => let val (buff, i, len) = ArraySlice.base slice in (* Try reading a vector of this size. *) case rv len of NONE => NONE | SOME r => ( (* Copy the vector into the array. *) Array.copyVec{src=r, dst = buff, di=i}; (* Return the number of characters read. *) SOME(Vector.length r) ) end ) | (NONE, NONE) => (* Try using the blocking readArr' with canInput. We use the readArr' we defined above so that this will also try using readVec. *) case (canInput, readArr') of (SOME canIn, SOME ra) => SOME( fn slice => if canIn() then SOME(ra slice) else NONE ) | _ => NONE (* Can't do it. *) (* Finally define the blocking functions in terms of the non-blocking if we have to. *) val readVec'' = case readVec' of (* If readVec' exists use it. i.e. if readVec or readArr were defined. *) (s as SOME _) => s | NONE => (* No blocking version exists - try using block and the synthesised non-blocking version. *) case (block, readVecNB') of (SOME blk, SOME rv) => SOME( fn (l: int) => ( blk(); case rv l of NONE => (* Should not occur. *) raise IO.Io{ name=name, function="readVec", cause = IO.BlockingNotSupported } | SOME v => v ) ) | _ => NONE (* Can't do it. *) val readArr'' = case readArr' of (* If readArr' exists use it. *) (s as SOME _) => s | NONE => (* Try using block and the synthesised readArrNB'. *) case (block, readArrNB') of (SOME blk, SOME ra) => SOME( fn slice => ( blk(); case ra slice of NONE => raise IO.Io{ name=name, function="readArr", cause = IO.BlockingNotSupported } | SOME l => l ) ) | _ => NONE (* Can't do it. *) in RD { name = name, chunkSize = chunkSize, readVec = readVec'', readArr = readArr'', readVecNB = readVecNB', readArrNB = readArrNB', block = block, canInput = canInput, avail = avail, getPos = getPos, setPos = setPos, endPos = endPos, verifyPos = verifyPos, close = close, ioDesc = ioDesc } end fun augmentWriter (WR { name : string, chunkSize : int, writeVec : (vector_slice -> int) Option.option, writeArr : (array_slice -> int) Option.option, writeVecNB : (vector_slice -> int Option.option) Option.option, writeArrNB : (array_slice -> int Option.option) Option.option, block : (unit -> unit) option, canOutput : (unit -> bool) option, getPos : (unit -> pos) option, setPos : (pos -> unit) option, endPos : (unit -> pos) option, verifyPos : (unit -> pos) option, close : unit -> unit, ioDesc : OS.IO.iodesc option }) : writer = let (* First try defining writeVec in terms of writeArr. *) val writeVec' = case (writeVec, writeArr) of (s as SOME _, _) => s (* If writeVec exists use it. *) | (NONE, SOME ra) => (* if writeVec doesn't exists but writeArr does *) SOME( fn slice => let (* Create an array to hold this slice. *) val a = Array.array(VectorSlice.length slice, someElem) in (* Copy in the vector. *) ArraySlice.copyVec{src=slice, dst=a, di=0}; (* write as much as we can. *) ra(ArraySlice.full a) end ) | (NONE, NONE) => NONE (* And vice-versa *) val writeArr' = case (writeArr, writeVec) of (s as SOME _, _) => s (* If writeArr exists use it. *) | (NONE, SOME wv) => (* if writeArr doesn't exists but writeVec does *) SOME( fn slice => let (* Construct a vector from this slice. *) val v = ArraySlice.vector slice; in (* Try writing this vector. *) wv(VectorSlice.full v) end ) | (NONE, NONE) => NONE (* We now have the blocking versions of writeVec and writeArr if either of them existed. Now defining the non-blocking versions using these blocking versions if we have to. *) val writeVecNB' = case (writeVecNB, writeArrNB) of (s as SOME _, _) => s (* If writeVecNB exists use it. *) | (NONE, SOME wa) => (* If writeVecNB does not exist but writeArrNB does*) SOME( fn slice => let val len = VectorSlice.length slice (* Create an array to hold this slice. *) val a = Array.array(len, someElem) in (* Copy in the vector. *) ArraySlice.copyVec{src=slice, dst=a, di=0}; (* Try writing it and see what happened. *) wa(ArraySlice.full a) end ) | (NONE, NONE) => (* Try using the blocking writeVec' with canOutput. We use the writeVec' we defined above so that this will also try using writeArr. *) case (canOutput, writeVec') of (SOME canOut, SOME wv) => SOME( fn slice => if canOut() then SOME(wv slice) else NONE ) | _ => NONE (* Can't do it. *) val writeArrNB' = case (writeArrNB, writeVecNB) of (s as SOME _, _) => s (* If writeArrNB exists use it. *) | (NONE, SOME wv) => (* if writeArrNB doesn't exists but writeVecNB does *) SOME( fn slice => let (* Construct a vector from this slice. *) val v = ArraySlice.vector slice; in (* Try writing the vector. *) wv(VectorSlice.full v) end ) | (NONE, NONE) => (* Try using the blocking writeArr' with canOutput. We use the writeArr' we defined above so that this will also try using writeVec. *) case (canOutput, writeArr') of (SOME canOut, SOME wa) => SOME( fn slice => if canOut() then SOME(wa slice) else NONE ) | _ => NONE (* Can't do it. *) (* Finally define the blocking functions in terms of the non-blocking if we have to. *) val writeVec'' = case writeVec' of (* If writeVec' exists use it. i.e. if writeVec or writeArr were defined. *) (s as SOME _) => s | NONE => (* No blocking version exists - try using block and the synthesised non-blocking version. *) case (block, writeVecNB') of (SOME blk, SOME wv) => SOME( fn slice => ( blk(); case wv slice of NONE => (* Should not occur. *) raise IO.Io{ name=name, function="writeVec", cause = IO.BlockingNotSupported } | SOME l => l ) ) | _ => NONE (* Can't do it. *) val writeArr'' = case writeArr' of (* If writeArr' exists use it. *) (s as SOME _) => s | NONE => (* Try using block and the synthesised writeArrNB'. *) case (block, writeArrNB') of (SOME blk, SOME wa) => SOME( fn slice => ( blk(); case wa slice of NONE => raise IO.Io{ name=name, function="writeArr", cause = IO.BlockingNotSupported } | SOME l => l ) ) | _ => NONE (* Can't do it. *) in WR { name = name, chunkSize = chunkSize, writeVec = writeVec'', writeArr = writeArr'', writeVecNB = writeVecNB', writeArrNB = writeArrNB', block = block, canOutput = canOutput, getPos = getPos, setPos = setPos, endPos = endPos, verifyPos = verifyPos, close = close, ioDesc = ioDesc } end (* Null reader - always returns end-of-file except when closed when it raises IO.ClosedStream. *) fun nullRd () = let val isOpen = ref true in RD { name = "nullRd", chunkSize = 1, readVec = SOME(fn n => if n < 0 then raise Size else if !isOpen then Vector.fromList [] else raise IO.ClosedStream), readArr = SOME(fn _ => if !isOpen then 0 else raise IO.ClosedStream), readVecNB = SOME(fn n => if n < 0 then raise Size else if !isOpen then SOME(Vector.fromList []) else raise IO.ClosedStream), readArrNB = SOME(fn _ => if !isOpen then SOME 0 else raise IO.ClosedStream), block = SOME(fn () => if !isOpen then () else raise IO.ClosedStream), canInput = SOME(fn () => if !isOpen then true else raise IO.ClosedStream), avail = fn () => if !isOpen then NONE else raise IO.ClosedStream, getPos = NONE, setPos = NONE, endPos = NONE, verifyPos = NONE, close = fn () => isOpen := false, ioDesc = NONE } end (* Null writer - always swallows input except when closed when it raises IO.ClosedStream. *) fun nullWr () = let val isOpen = ref true in WR { name = "nullWr", chunkSize = 1, writeVec = SOME(fn slice => if !isOpen then VectorSlice.length slice else raise IO.ClosedStream), writeArr = SOME(fn slice => if !isOpen then ArraySlice.length slice else raise IO.ClosedStream), writeVecNB = SOME(fn slice => if !isOpen then SOME(VectorSlice.length slice) else raise IO.ClosedStream), writeArrNB = SOME(fn slice => if !isOpen then SOME(ArraySlice.length slice) else raise IO.ClosedStream), block = SOME(fn () => if !isOpen then () else raise IO.ClosedStream), canOutput = SOME(fn () => if !isOpen then true else raise IO.ClosedStream), getPos = NONE, setPos = NONE, endPos = NONE, verifyPos = NONE, close = fn () => isOpen := false, ioDesc = NONE } end fun openVector v = let val isOpen = ref true val len = Vector.length v val p = ref 0 (* Pointer to current element. *) (* Return a slice of the vector from the current position for either the rest of the vector or the size requested if that's smaller. *) fun getSlice n = if not (! isOpen) then raise IO.ClosedStream else let val toRead = Int.min(n, len - !p) (* Return the smaller of the size requested or the size left. *) val resSlice = VectorSlice.slice(v, !p, SOME toRead) in p := !p + toRead; resSlice end (* Return a slice of the vector. *) fun readVec n = if n < 0 then raise Size else VectorSlice.vector(getSlice n) (* Copy a portion of the vector into the array. We can probably copy directly from the original vector whereas if we synthesised this function it would require an extra copy. *) fun readArr slice = let val (base, di, len) = ArraySlice.base slice val resSlice = getSlice len in ArraySlice.copyVec{src=resSlice, dst=base, di=di}; VectorSlice.length resSlice end in RD { name = "openVector", chunkSize = 1, (* Or the size of the vector? *) readVec = SOME readVec, readArr = SOME readArr, readVecNB = NONE, readArrNB = NONE, block = SOME(fn () => if !isOpen then () else raise IO.ClosedStream), canInput = SOME(fn () => if !isOpen then true else raise IO.ClosedStream), (* avail returns the number of bytes and since we don't know the size of "elem" we return NONE here *) avail = fn () => if !isOpen then NONE else raise IO.ClosedStream, getPos = NONE, setPos = NONE, endPos = NONE, verifyPos = NONE, close = fn () => isOpen := false, ioDesc = NONE } end end; polyml.5.2.1/basis/Real.sml0000644000175000017500000007124110766426775014526 0ustar daviddavid(* Title: Standard Basis Library: Real Signature and structure. Author: David Matthews Copyright David Matthews 2000, 2005, 2008 This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure LargeReal = struct type real = real end; signature REAL = sig type real structure Math : MATH where type real = real val radix : int val precision : int val maxFinite : real val minPos : real val minNormalPos : real val posInf : real val negInf : real val + : (real * real) -> real val - : (real * real) -> real val * : (real * real) -> real val / : (real * real) -> real val *+ : real * real * real -> real val *- : real * real * real -> real val ~ : real -> real val abs : real -> real val min : (real * real) -> real val max : (real * real) -> real val sign : real -> int val signBit : real -> bool val sameSign : (real * real) -> bool val copySign : (real * real) -> real val compare : (real * real) -> General.order val compareReal : (real * real) -> IEEEReal.real_order val < : (real * real) -> bool val <= : (real * real) -> bool val > : (real * real) -> bool val >= : (real * real) -> bool val == : (real * real) -> bool val != : (real * real) -> bool val ?= : (real * real) -> bool val unordered : (real * real) -> bool val isFinite : real -> bool val isNan : real -> bool val isNormal : real -> bool val class : real -> IEEEReal.float_class val fmt : StringCvt.realfmt -> real -> string val toString : real -> string val fromString : string -> real option val scan : (char, 'a) StringCvt.reader -> (real, 'a) StringCvt.reader val toManExp : real -> {man : real, exp : int} val fromManExp : {man : real, exp : int} -> real val split : real -> {whole : real, frac : real} val realMod : real -> real val rem : (real * real) -> real val nextAfter : (real * real) -> real val checkFloat : real ->real val realFloor : real -> real val realCeil : real -> real val realTrunc : real -> real val realRound : real -> real val floor : real -> Int.int val ceil : real -> Int.int val trunc : real -> Int.int val round : real -> Int.int val toInt : IEEEReal.rounding_mode -> real -> int val toLargeInt : IEEEReal.rounding_mode -> real -> LargeInt.int val fromInt : int -> real val fromLargeInt : LargeInt.int -> real val toLarge : real -> LargeReal.real val fromLarge : IEEEReal.rounding_mode -> LargeReal.real -> real val toDecimal : real -> IEEEReal.decimal_approx val fromDecimal : IEEEReal.decimal_approx -> real option end; structure Real: REAL = struct open RuntimeCalls IEEEReal (* This is used for newly added functions in the Standard Basis. *) (* We want to get the io function once for each function, not once per call, but that's complicated in ML97. *) local val doReal : int*real->real = RunCall.run_call2 POLY_SYS_Real_Dispatch in fun callReal n x = doReal(n, x) end local val doReal : int*(real*real)->real = RunCall.run_call2 POLY_SYS_Real_Dispatch in fun callRealReal n p = doReal(n, p) end local val doReal : int*real->bool = RunCall.run_call2 POLY_SYS_Real_Dispatch in fun callRealToBool n x = doReal(n, x) end local val doReal : int*real->int = RunCall.run_call2 POLY_SYS_Real_Dispatch in fun callRealToInt n x = doReal(n, x) end type real = real (* Pick up from globals. *) structure Math: MATH = struct type real = real (* Pick up from globals. *) (* These are provided directly in the RTS. *) (* These are the old functions which had separate entries in the interface vector. *) val sqrt: real -> real = RunCall.run_call1 POLY_SYS_sqrt_real; val sin: real -> real = RunCall.run_call1 POLY_SYS_sin_real; val cos: real -> real = RunCall.run_call1 POLY_SYS_cos_real; val atan: real -> real = RunCall.run_call1 POLY_SYS_arctan_real; val exp: real -> real = RunCall.run_call1 POLY_SYS_exp_real; val ln: real -> real = RunCall.run_call1 POLY_SYS_ln_real; (* Functions added for ML 97. These use the Real_dispatch entry. *) (* It may well be possible to derive these from the old ML90 functions but it's almost certainly quicker to implement them in the RTS. *) val tan = callReal 0 val asin = callReal 1 val acos = callReal 2 val atan2 = callRealReal 3 val pow = callRealReal 4 val log10 = callReal 5 val sinh = callReal 6 val cosh = callReal 7 val tanh = callReal 8 (* Derived values. *) val e = exp 1.0 val pi = 4.0 * atan 1.0 end; infix 4 == != ?=; val op == : (real * real) -> bool = RunCall.run_call2 POLY_SYS_Real_eq; val op != : (real * real) -> bool = RunCall.run_call2 POLY_SYS_Real_neq; val radix : int = callRealToInt 11 0.0 val precision : int = callRealToInt 12 0.0 val maxFinite : real = callReal 13 0.0 val minNormalPos : real = callReal 14 0.0 val posInf : real = 1.0/0.0; val negInf : real = ~1.0/0.0; (* We only implement this sort of real. *) fun toLarge (x: real) : (*LargeReal.*)real =x fun fromLarge (round : IEEEReal.rounding_mode) (x: (*LargeReal.*)real): real = x val isFinite : real -> bool = callRealToBool 15 val isNan : real -> bool = callRealToBool 16 val signBit : real -> bool = callRealToBool 17 val copySign : (real * real) -> real = callRealReal 18 (* If we assume that all functions produce normalised results where possible, the only subnormal values will be those smaller than minNormalPos. *) fun isNormal x = isFinite x andalso abs x >= minNormalPos fun class x = if isFinite x then if x == 0.0 then ZERO else if abs x >= minNormalPos then NORMAL else SUBNORMAL else if isNan x then NAN else (* not finite and not Nan *) INF fun sign x = if isNan x then raise General.Domain else if x == 0.0 then 0 else if x < 0.0 then ~1 else 1 fun sameSign (x, y) = signBit x = signBit y fun unordered (x, y) = isNan x orelse isNan y (* Returns the minimum. In the case where one is a NaN it returns the other. In that case the comparison will be false. *) fun min (a: real, b: real): real = if a < b orelse isNan b then a else b (* Similarly for max. *) fun max (a: real, b: real): real = if a > b orelse isNan b then a else b fun checkFloat x = if isFinite x then x else if isNan x then raise General.Div else raise General.Overflow local infix 7 rem quot (* The RTS float and floor operations only work with SHORT integers. Since we may be dealing with arbitrary precision values we need to restrict the range of arguments so that they will work. . We use 32768 since that is always a short representation on all architectures (in fact 2^28 is probably all right). We could do better and find the largest power of two (because that's likely to be fast to multiply by) which is a short value. *) val maxShortInt = 32768 val floatShort: int -> real = RunCall.run_call1 POLY_SYS_int_to_real; val maxShortIntAsReal = floatShort maxShortInt val floorShort: real -> int = RunCall.run_call1 POLY_SYS_real_to_int; val isShort : int -> bool = RunCall.run_call1 POLY_SYS_is_short val op quot = Int.quot and op rem = Int.rem in (* TODO: I think there may be the possibility of errors due to rounding when converting large integers to real. *) fun fromInt n = if isShort n then floatShort n else (maxShortIntAsReal * fromInt (n quot maxShortInt) + floatShort (n rem maxShortInt)) val fromLargeInt = fromInt val realFloor = callReal 19 and realCeil = callReal 20 and realTrunc = callReal 21 and realRound = callReal 22 fun floor x = (* Returns the largest integer <= x. *) let fun floor' (x: real) : int = if abs x <= maxShortIntAsReal then floorShort x else let (* Return the largest multiple of maxShortInt <= x *) val d: int = maxShortInt * floor' (x / maxShortIntAsReal); in (* Add in the largest integer <= the remainder. *) d + floorShort (x - fromInt d) end; in if isNan x then raise General.Domain else if not (isFinite x) then raise General.Overflow else floor' x end fun ceil x = floor(realCeil x) (* Returns the smallest integer >= x. *) fun trunc x = floor(realTrunc x) (* Truncate towards zero. *) fun round x = floor(realRound x) (* Return the nearest integer, returning an even value if equidistant. *) fun toInt IEEEReal.TO_NEGINF r = floor r | toInt IEEEReal.TO_POSINF r = ceil r | toInt IEEEReal.TO_ZERO r = trunc r | toInt IEEEReal.TO_NEAREST r = round r val toLargeInt = toInt end; val radixAsReal (* Not exported *) = fromInt radix val epsilon (* Not exported *) = Math.pow(radixAsReal, fromInt (Int.-(1, precision))) val minPos : real = minNormalPos*epsilon; local val toMantissa : real->real = callReal 24 and toExponent : real->int = callRealToInt 25 val doReal : int*(real*int)->real = RunCall.run_call2 POLY_SYS_Real_Dispatch fun fromManAndExp (ri: real*int): real = doReal(23, ri) in fun toManExp r = if not (isFinite r) orelse r == 0.0 (* Nan, infinities and +/-0 all return r in the mantissa. We include 0 to preserve its sign. *) then {man=r, exp=0} else {man=toMantissa r, exp=toExponent r} fun fromManExp {man, exp} = if not (isFinite man) orelse man == 0.0 (* Nan, infinities and +/-0 in the mantissa all return their argument. *) then man else fromManAndExp(man, exp) end local val realConv: string->real = RunCall.run_call1 POLY_SYS_conv_real val posNan = abs(0.0 / 0.0) val negNan = ~posNan in fun fromDecimal { class = INF, sign=true, ...} = SOME negInf | fromDecimal { class = INF, sign=false, ...} = SOME posInf | fromDecimal { class = ZERO, sign=true, ...} = SOME ~0.0 | fromDecimal { class = ZERO, sign=false, ...} = SOME 0.0 (* Generate signed Nans ignoring the digits and mantissa. There was code here to set the mantissa but there's no reference to that in the current version of the Basis library. *) | fromDecimal { class = NAN, sign=true, ... } = SOME negNan | fromDecimal { class = NAN, sign=false, ... } = SOME posNan | fromDecimal { class = _ (* NORMAL or SUBNORMAL *), sign, digits, exp} = (let fun toChar x = if x < 0 orelse x > 9 then raise General.Domain else Char.chr (x + Char.ord #"0") (* Turn the number into a string. *) val str = "0." ^ String.implode(List.map toChar digits) ^"E" ^ Int.toString exp (* Convert it to a real using the RTS conversion function. Change any Conversion exceptions into Domain. *) val result = realConv str handle _ => raise General.Domain in if sign then SOME (~result) else SOME result end handle General.Domain => NONE ) end local val dtoa: real*int*int -> string*int*int = RunCall.run_call3 POLY_SYS_Real_str open StringCvt fun addZeros n = if n <= 0 then "" else "0" ^ addZeros (n-1) fun fixFmt ndigs r = if not (isFinite r) then (if signBit r then "~" else "") ^ (if isNan r then "nan" else "inf") else let (* Try to get ndigs past the decimal point. *) val (str, exp, sign) = dtoa(r, 3, ndigs) val strLen = String.size str (* If the exponents is negative or zero we need to put a zero before the decimal point. If the exponent is positive and less than the number of digits we can take that many characters off, otherwise we have to pad with zeros. *) val numb = if exp <= 0 then (* Exponent is zero or negative - all significant digits are after the decimal point. Put in any zeros before the significant digits, then the significant digits and then any trailing zeros. *) if ndigs = 0 then "0" else "0." ^ addZeros(~exp) ^ str ^ addZeros(ndigs-strLen+exp) else if strLen <= exp then (* Exponent is not less than the length of the string - all significant digits are before the decimal point. Add any extra zeros before the decimal point then zeros after it. *) str ^ addZeros(exp-strLen) ^ (if ndigs = 0 then "" else "." ^ addZeros ndigs) else (* Significant digits straddle the decimal point - insert the decimal point and add any trailing zeros. *) String.substring(str, 0, exp) ^ "." ^ String.substring(str, exp, strLen-exp) ^ addZeros(ndigs-strLen+exp) in if sign <> 0 then "~" ^ numb else numb end fun sciFmt ndigs r = if not (isFinite r) then (if signBit r then "~" else "") ^ (if isNan r then "nan" else "inf") else let (* Try to get ndigs+1 digits. 1 before the decimal point and ndigs after. *) val (str, exp, sign) = dtoa(r, 2, ndigs+1) val strLen = String.size str fun addZeros n = if n <= 0 then "" else "0" ^ addZeros (n-1) val numb = if strLen = 0 then "0" ^ (if ndigs = 0 then "" else "." ^ addZeros ndigs) ^ "E0" else (if strLen = 1 then str ^ (if ndigs = 0 then "" else "." ^ addZeros ndigs) else String.substring(str, 0, 1) ^ "." ^ String.substring(str, 1, strLen-1) ^ addZeros (ndigs-strLen+1) ) ^ "E" ^ Int.toString (exp-1) in if sign <> 0 then "~" ^ numb else numb end fun genFmt ndigs r = if not (isFinite r) then (if signBit r then "~" else "") ^ (if isNan r then "nan" else "inf") else let (* Try to get ndigs digits. *) val (str, exp, sign) = dtoa(r, 2, ndigs) val strLen = String.size str val numb = (* Have to use scientific notation if exp > ndigs. Also use it if the exponent is small (TODO: adjust this) *) if exp > ndigs orelse exp < ~5 then (* Scientific format *) (if strLen = 1 then str else String.substring(str, 0, 1) ^ "." ^ String.substring(str, 1, strLen-1) ) ^ "E" ^ Int.toString (exp-1) else (* Fixed format (N.B. no trailing zeros are added after the decimal point apart from one if necessary) *) if exp <= 0 then (* Exponent is zero or negative - all significant digits are after the decimal point. Put in any zeros before the significant digits, then the significant digits and then any trailing zeros. *) "0." ^ addZeros(~exp) ^ str else if strLen <= exp then (* Exponent is not less than the length of the string - all significant digits are before the decimal point. Add any extra zeros before the decimal point. Insert .0 at the end to make it a valid real number. *) str ^ addZeros(exp-strLen) ^ ".0" else (* Significant digits straddle the decimal point - insert the decimal point. *) String.substring(str, 0, exp) ^ "." ^ String.substring(str, exp, strLen-exp) in if sign <> 0 then "~" ^ numb else numb end fun strToDigitList str = let fun getDigs i l = if i < 0 then l else getDigs (i-1) ((Char.ord(String.sub(str, i)) - Char.ord #"0") :: l) in getDigs (String.size str - 1) [] end in fun toDecimal r = let val sign = signBit r val kind = class r in case kind of ZERO => { class = ZERO, sign = sign, digits=[], exp = 0 } | INF => { class = INF, sign = sign, digits=[], exp = 0 } | NAN => { class = NAN, sign = sign, digits=[], exp = 0 } | _ => (* NORMAL/SUBNORMAL *) let val (str, exp, sign) = dtoa(r, 0, 0) val digits = strToDigitList str in { class = kind, sign = sign <> 0, digits = digits, exp = exp } end end (* Note: The definition says, reasonably, that negative values for the number of digits raises Size. The tests also check for a very large value for the number of digits and seem to expect Size to be raised in that case. *) fun fmt (SCI NONE) r = sciFmt 6 r | fmt (SCI (SOME d) ) r = if d < 0 orelse d > 200 then raise General.Size else sciFmt d r | fmt (FIX NONE) r = fixFmt 6 r | fmt (FIX (SOME d) ) r = if d < 0 orelse d > 200 then raise General.Size else fixFmt d r | fmt (GEN NONE) r = genFmt 12 r | fmt (GEN (SOME d) ) r = if d < 1 orelse d > 200 then raise General.Size else genFmt d r | fmt EXACT r = IEEEReal.toString(toDecimal r) val toString = fmt (GEN NONE) end fun scan getc src = let (* Return a list of digits. *) fun getdigits inp src = case getc src of NONE => (List.rev inp, src) | SOME(ch, src') => if ch >= #"0" andalso ch <= #"9" then getdigits ((Char.ord ch - Char.ord #"0") :: inp) src' else (List.rev inp, src) (* Read an unsigned integer. Returns NONE if no digits have been read. *) fun getNumber sign digits acc src = case getc src of NONE => if digits = 0 then NONE else SOME(if sign then ~acc else acc, src) | SOME(ch, src') => if ch >= #"0" andalso ch <= #"9" then getNumber sign (digits+1) (acc*10 + Char.ord ch - Char.ord #"0") src' else if digits = 0 then NONE else SOME(if sign then ~acc else acc, src') (* Return the signed exponent. *) fun getExponent src = case getc src of NONE => NONE | SOME(ch, src') => if ch = #"+" then getNumber false 0 0 src' else if ch = #"-" orelse ch = #"~" then getNumber true 0 0 src' else getNumber false 0 0 src fun read_number sign src = case getc src of NONE => NONE | SOME(ch, src') => if not (ch >= #"0" andalso ch <= #"9" orelse ch = #".") then NONE (* Bad *) else (* Digits or decimal. *) let (* Get the digits before the decimal point (if any) *) val (intPart, srcAfterDigs) = getdigits [] src (* Get the digits after the decimal point (if any). If there is a decimal point we only accept it if there is at least one digit after it. *) val (decimals, srcAfterMant) = case getc srcAfterDigs of NONE => ([], srcAfterDigs) | SOME (#".", srcAfterDP) => ( (* Check that the next character is a digit. *) case getc srcAfterDP of NONE => ([], srcAfterDigs) | SOME(ch, _) => if ch >= #"0" andalso ch <= #"9" then getdigits [] srcAfterDP else ([], srcAfterDigs) ) | SOME (_, _) => ([], srcAfterDigs) (* The exponent is optional. If it doesn't form a valid exponent we return zero as the value and the continuation is the beginning of the "exponent". *) val (exponent, srcAfterExp) = case getc srcAfterMant of NONE => (0, srcAfterMant) | SOME (ch, src'''') => if ch = #"e" orelse ch = #"E" then ( case getExponent src'''' of NONE => (0, srcAfterMant) | SOME x => x ) else (0, srcAfterMant) (* Generate a decimal representation ready for conversion. We don't bother to strip off leading or trailing zeros. *) val decimalRep = {class=NORMAL, sign=sign, digits=List.@(intPart, decimals), exp=exponent + List.length intPart} in case fromDecimal decimalRep of SOME r => SOME(r, srcAfterExp) | NONE => NONE end in case getc src of NONE => NONE | SOME(ch, src') => if Char.isSpace ch (* Skip white space. *) then scan getc src' (* Recurse *) else if ch = #"+" (* Remove the + sign *) then read_number false src' else if ch = #"-" orelse ch = #"~" then read_number true src' else (* See if it's a valid digit. *) read_number false src end val fromString = StringCvt.scanString scan (* Converter to real values. This replaces the basic conversion function for reals installed in the bootstrap process. For more information see convInt in Int. *) (* Don't use it for the moment because it doesn't really provide any advantage over the existing function. *) (* local structure Conversion = RunCall.Run_exception1 ( type ex_type = string; val ex_iden = EXC_conversion ); exception Conversion = Conversion.ex; fun convReal s = case StringCvt.scanString scan s of NONE => raise Conversion "Invalid real constant" | SOME res => res in (* Install this as a conversion function for real literals. *) val unused: unit = RunCall.addOverload convReal "convReal" end *) val op + : (real * real) -> real = RunCall.run_call2 POLY_SYS_Add_real; val op - : (real * real) -> real = RunCall.run_call2 POLY_SYS_Sub_real; val op * : (real * real) -> real = RunCall.run_call2 POLY_SYS_Mul_real; val op / : (real * real) -> real = RunCall.run_call2 POLY_SYS_Div_real; val op < : (real * real) -> bool = RunCall.run_call2 POLY_SYS_Real_lss; val op <= : (real * real) -> bool = RunCall.run_call2 POLY_SYS_Real_leq; val op > : (real * real) -> bool = RunCall.run_call2 POLY_SYS_Real_gtr; val op >= : (real * real) -> bool = RunCall.run_call2 POLY_SYS_Real_geq; fun compare (r1, r2) = if not (isFinite r1 andalso isFinite r2) then raise Unordered else if r1 < r2 then General.LESS else if r1 > r2 then General.GREATER else General.EQUAL fun compareReal (r1, r2) = if not (isFinite r1 andalso isFinite r2) then UNORDERED else if r1 < r2 then LESS else if r1 > r2 then GREATER else EQUAL (* Question: The definition says "bitwise equal, ignoring signs on zeros". If we assume that all numbers are normalised, is that the same as "equal"?*) fun op ?= (x, y) = isNan x orelse isNan y orelse x == y (* Although these may be built in in some architectures it's probably not worth treating them specially at the moment. *) fun *+ (x: real, y: real, z: real): real = x*y+z and *- (x: real, y: real, z: real): real = x*y-z val ~ : real -> real = RunCall.run_call1 POLY_SYS_Neg_real (* Absolute value. N.B. Since the comparison returns false on NaN this function returns its argument on NaN. *) fun abs (x : real) : real = if x < 0.0 then ~ x else x; fun rem (x, y) = if not (isFinite y) andalso not (isNan y) then x else x - realTrunc(x / y)*y (* Split a real into whole and fractional parts. The fractional part must have the same sign as the number even if it is zero. *) fun split r = let val whole = realTrunc r val frac = r - whole in { whole = whole, frac = if not (isFinite r) then if isNan r then r else (* Infinity *) if r < 0.0 then ~0.0 else 0.0 else if frac == 0.0 then if signBit r then ~0.0 else 0.0 else frac } end (* Get the fractional part of a real. *) fun realMod r = #frac(split r) local (* For normalised numbers the next in the sequence is x*(1+epsilon). However for unnormalised values we may have to multiply the epsilon value by the radix. *) fun nextUp r p = let val nxt = r + r*p in if nxt == r then nextUp r (p*radixAsReal) else nxt end fun nextDown r p = let val prev = r - r*p in if prev == r then nextDown r (p*radixAsReal) else prev end in fun nextAfter (r, t) = if not (isFinite r) orelse r == t then r else if r < t then nextUp r epsilon else nextDown r epsilon end end; structure Math = Real.Math; structure LargeReal: REAL = Real; (* Values available unqualified at the top-level. *) val real : int -> real = Real.fromInt val trunc : real -> int = Real.trunc val floor : real -> int = Real.floor val ceil : real -> int = Real.ceil val round : real -> int =Real.round; (* Install print function. *) local fun print_real (put, beg, brk, nd) depth _ (r: real) = put(Real.fmt (StringCvt.GEN(SOME 10)) r) in val () = PolyML.install_pp print_real; end; polyml.5.2.1/basis/RealArray.sml0000644000175000017500000000351710313043326015475 0ustar daviddavid(* Title: Standard Basis Library: RealArray and RealVector Structures Author: David Matthews Copyright David Matthews 2000, 2005 This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* G&R 2004 status: done. Added sliced versions. *) (* TODO: This stores the vectors as vectors of pointers to cells containing the real values. It would be more efficient to store numbers directly in a byte-vector. We could use the move_bytes function to load and store reals although it would probably be better to define RTS functions to load and store reals. *) structure RealVector: MONO_VECTOR = struct open Vector type vector = real vector and elem = real end; structure RealArray: MONO_ARRAY = struct open Array type vector = RealVector.vector and array = real array and elem = real end; structure RealVectorSlice: MONO_VECTOR_SLICE = struct open VectorSlice type slice = real slice and elem = real and vector = RealVector.vector end; structure RealArraySlice: MONO_ARRAY_SLICE = struct open ArraySlice type slice = real slice and vector = RealVector.vector and array = RealArray.array and elem = real and vector_slice = RealVectorSlice.slice end; polyml.5.2.1/basis/RuntimeCalls.ML0000644000175000017500000001654210766427621015754 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* These numbers should correspond with those in the sys.h file *) (* in the run-time system. SPF 17/11/94. *) structure RuntimeCalls = struct (* 0 not used (unusable?) *) val POLY_SYS_exit = 1 val POLY_SYS_chdir = 9 val POLY_SYS_alloc_store = 11 val POLY_SYS_raisex = 14 val POLY_SYS_get_length = 15 val POLY_SYS_get_flags = 17 val POLY_SYS_str_compare = 23 (* DCJM 21/3/06 *) val POLY_SYS_teststreq = 24 val POLY_SYS_teststrneq = 25 val POLY_SYS_teststrgtr = 26 val POLY_SYS_teststrlss = 27 val POLY_SYS_teststrgeq = 28 val POLY_SYS_teststrleq = 29 val POLY_SYS_exception_trace = 30 val POLY_SYS_give_ex_trace = 31 (* Only used within the RTS*) val POLY_SYS_lockseg = 47 val POLY_SYS_emptystring = 48 val POLY_SYS_nullvector = 49 val POLY_SYS_network = 51 (* DCJM 22/5/00 *) val POLY_SYS_os_specific = 52 (* DCJM 22/5/00 *) val POLY_SYS_io_dispatch = 61 (* DCJM 8/5/00 *) val POLY_SYS_signal_handler = 62 (* DCJM 18/7/00 *) val POLY_SYS_atomic_incr = 70 (* DCJM 12/3/07 *) val POLY_SYS_atomic_decr = 71 (* DCJM 12/3/07 *) val POLY_SYS_thread_self = 72 (* DCJM 12/3/07 *) val POLY_SYS_thread_dispatch = 73 (* DCJM 12/3/07 *) val POLY_SYS_kill_self = 84 val POLY_SYS_profiler = 88 val POLY_SYS_full_gc = 92 (* MJC 18/03/91 *) val POLY_SYS_stack_trace = 93 (* MJC 18/03/91 *) val POLY_SYS_timing_dispatch = 94 (* DCJM 10/4/00 *) val POLY_SYS_objsize = 99 (* MJC 27/04/88 *) val POLY_SYS_showsize = 100 (* MJC 09/03/89 *) val POLY_SYS_interrupt_console_processes = 103 (* MJC 01/08/90 *) val POLY_SYS_is_short = 105 val POLY_SYS_aplus = 106 val POLY_SYS_aminus = 107 val POLY_SYS_amul = 108 val POLY_SYS_adiv = 109 val POLY_SYS_amod = 110 val POLY_SYS_aneg = 111 val POLY_SYS_xora = 112 (* DCJM 21/6/00 *) val POLY_SYS_equala = 113 val POLY_SYS_ora = 114 (* DCJM 21/6/00 *) val POLY_SYS_anda = 115 (* DCJM 21/6/00 *) val POLY_SYS_Real_str = 117 (* DCJM 6/4/00 *) val POLY_SYS_Real_geq = 118 (* DCJM 28/3/00 *) val POLY_SYS_Real_leq = 119 (* DCJM 28/3/00 *) val POLY_SYS_Real_gtr = 120 (* DCJM 28/3/00 *) val POLY_SYS_Real_lss = 121 (* DCJM 28/3/00 *) val POLY_SYS_Real_eq = 122 (* DCJM 28/3/00 *) val POLY_SYS_Real_neq = 123 (* DCJM 28/3/00 *) val POLY_SYS_Real_Dispatch = 124 (* DCJM 25/3/00 *) val POLY_SYS_Add_real = 125 val POLY_SYS_Sub_real = 126 val POLY_SYS_Mul_real = 127 val POLY_SYS_Div_real = 128 val POLY_SYS_Neg_real = 130 val POLY_SYS_Repr_real = 132 val POLY_SYS_conv_real = 133 val POLY_SYS_real_to_int = 134 val POLY_SYS_int_to_real = 135 val POLY_SYS_sqrt_real = 136 val POLY_SYS_sin_real = 137 val POLY_SYS_cos_real = 138 val POLY_SYS_arctan_real = 139 val POLY_SYS_exp_real = 140 val POLY_SYS_ln_real = 141 val POLY_SYS_stdin = 148 val POLY_SYS_stdout = 149 val POLY_SYS_process_env = 150 (* DCJM 25/4/00 *) val POLY_SYS_set_string_length = 151 (* DCJM 28/2/01 *) val POLY_SYS_get_first_long_word = 152 (* DCJM 28/2/01 *) val POLY_SYS_poly_specific = 153 (* DCJM 17/6/06 *) val POLY_SYS_io_operation = 189 val POLY_SYS_set_code_constant = 194 (* DCJM 2/1/01 *) val POLY_SYS_move_words = 195 (* DCJM 9/10/99 *) val POLY_SYS_shift_right_arith_word = 196 (* DCJM 9/10/99 *) val POLY_SYS_move_bytes = 198 (* DCJM 9/10/99 *) val POLY_SYS_code_flags = 200 (* SPF 10/11/1998 *) val POLY_SYS_shrink_stack = 201 (* SPF 10/11/1998 *) val POLY_SYS_stderr = 202 (* SPF 10/11/1998 *) val POLY_SYS_callcode_tupled = 204 (* SPF 07/07/94 *) val POLY_SYS_foreign_dispatch = 205 (* NIC 22/04/94 *) val POLY_SYS_XWindows = 209 (* MJC 27/09/90 *) val POLY_SYS_is_big_endian = 213 (* added 30/3/95 (DCJM) *) val POLY_SYS_bytes_per_word = 214 (* added 30/3/95 (DCJM) *) val POLY_SYS_offset_address = 215 val POLY_SYS_shift_right_word = 216 val POLY_SYS_word_neq = 217 val POLY_SYS_not_bool = 218 val POLY_SYS_string_length = 223 val POLY_SYS_int_eq = 229 val POLY_SYS_int_neq = 230 val POLY_SYS_int_geq = 231 val POLY_SYS_int_leq = 232 val POLY_SYS_int_gtr = 233 val POLY_SYS_int_lss = 234 val POLY_SYS_mul_word = 238 (* Reinstated DCJM 9/10/99 *) val POLY_SYS_plus_word = 239 (* Reinstated DCJM 9/10/99 *) val POLY_SYS_minus_word = 240 (* Reinstated DCJM 9/10/99 *) val POLY_SYS_div_word = 241 (* Reinstated DCJM 9/10/99 *) val POLY_SYS_or_word = 242 val POLY_SYS_and_word = 243 val POLY_SYS_xor_word = 244 val POLY_SYS_shift_left_word = 245 val POLY_SYS_mod_word = 246 (* Reinstated DCJM 9/10/99 *) val POLY_SYS_word_geq = 247 (* Reinstated DCJM 9/10/99 *) val POLY_SYS_word_leq = 248 (* Reinstated DCJM 9/10/99 *) val POLY_SYS_word_gtr = 249 (* Reinstated DCJM 9/10/99 *) val POLY_SYS_word_lss = 250 (* Reinstated DCJM 9/10/99 *) val POLY_SYS_word_eq = 251 val POLY_SYS_load_byte = 252 val POLY_SYS_load_word = 253 val POLY_SYS_assign_byte = 254 val POLY_SYS_assign_word = 255 (* val POLY_SYS_vecsize = 256 *) (* Exception identifiers *) val EXC_interrupt = 1 val EXC_syserr = 2 val EXC_size = 4 val EXC_overflow = 5 val EXC_underflow = 6 val EXC_divide = 7 val EXC_conversion = 8 val EXC_XWindows = 10 val EXC_subscript = 11 val EXC_thread = 12 (* DCJM 13/3/07. *) val EXC_foreign = 23 (* nic 4/5/94 *) (* The following numbers are hard-coded into the ML compiler rather than the run-time system, but they're still hard to change. *) val EXC_Bind = 100; (* SPF 17/11/94 *) val EXC_Match = 101; (* SPF 17/11/94 *) val EXC_Fail = 103; (* Added DCJM 23/7/00 *) (* Now also in the RTS. *) end; polyml.5.2.1/basis/SML90.sml0000644000175000017500000000704210313043326014414 0ustar daviddavid(* Title: Standard Basis Library: SML90 Signature and Structure Author: David Matthews Copyright David Matthews 1999 This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* G&R 2004 status: This structure and signature are not listed and should be avoided in new code. *) signature SML90 = sig exception Abs exception Quot exception Prod exception Neg exception Sum exception Diff exception Floor exception Exp exception Sqrt exception Ln exception Ord exception Mod exception Io of string exception Interrupt val sqrt : real -> real val exp : real -> real val ln : real -> real val sin : real -> real val cos : real -> real val arctan : real -> real val ord : string -> int val chr : int -> string val explode : string -> string list val implode : string list -> string type instream type outstream val std_in : instream val std_out : outstream val open_in : string -> instream val input : instream * int -> string val lookahead : instream -> string val close_in : instream -> unit val end_of_stream : instream -> bool val open_out : string -> outstream val output : outstream * string -> unit val close_out : outstream -> unit end; structure SML90 :> SML90 = struct exception Abs = Overflow and Quot = Overflow and Prod = Overflow and Neg = Overflow and Sum = Overflow and Diff = Overflow and Floor = Overflow and Exp = Overflow and Sqrt = Overflow and Ln = Overflow and Ord = Overflow and Mod = Div local structure Interrupt = RunCall.Run_exception0( val ex_iden = RuntimeCalls.EXC_interrupt ) in exception Interrupt = Interrupt.ex end exception Io of string fun sqrt x = if x < 0.0 then raise Sqrt else Real.Math.sqrt x fun exp x = let val r = Real.Math.exp x in if Real.isFinite r then r else raise Exp end fun ln x = if x < 0.0 then raise Ln else Real.Math.ln x val sin = Real.Math.sin and cos = Real.Math.cos and arctan = Real.Math.atan fun ord "" = raise Ord | ord s = Char.ord(String.sub(s, 0)) fun chr i = str(Char.chr i) (* Because single character strings are represented by the characters themselves we just need to coerce String.explode. *) val explode: string -> string list = RunCall.unsafeCast(String.explode) val implode = String.concat type instream = TextIO.instream and outstream = TextIO.outstream val std_in : instream = TextIO.stdIn and std_out : outstream = TextIO.stdOut fun open_in s = TextIO.openIn s handle _ => raise Io "Cannot open" and open_out s = TextIO.openOut s handle _ => raise Io "Cannot open" fun input(str, i) = TextIO.inputN(str, i) handle _ => raise Io "Cannot read" fun lookahead strm = case TextIO.lookahead strm of NONE => "" | SOME ch => str ch val close_in : instream -> unit = TextIO.closeIn and close_out : outstream -> unit = TextIO.closeOut fun output(str, s) = TextIO.output(str, s) handle _ => raise Io "Cannot output" val end_of_stream = TextIO.endOfStream end; polyml.5.2.1/basis/STREAM_IO.sml0000644000175000017500000000355610313043326015200 0ustar daviddavid(* Title: Standard Basis Library: STREAM_IO signature Copyright David C.J. Matthews 2000 This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* G&R 2004 status: checked. No change *) signature STREAM_IO = sig type elem type vector type instream type outstream type out_pos type reader type writer type pos val input : instream -> vector * instream val input1 : instream -> (elem * instream) option val inputN : instream * int -> vector * instream val inputAll : instream -> vector * instream val canInput : instream * int -> int option val closeIn : instream -> unit val endOfStream : instream -> bool val output : outstream * vector -> unit val output1 : outstream * elem -> unit val flushOut : outstream -> unit val closeOut : outstream -> unit val mkInstream : reader * vector -> instream val getReader : instream -> reader * vector val filePosIn : instream -> pos val setBufferMode : outstream * IO.buffer_mode -> unit val getBufferMode : outstream -> IO.buffer_mode val mkOutstream : writer * IO.buffer_mode -> outstream val getWriter : outstream -> writer * IO.buffer_mode val getPosOut : outstream -> out_pos val setPosOut : out_pos -> outstream val filePosOut : out_pos -> pos end; polyml.5.2.1/basis/Signal.sml0000644000175000017500000000614310757045300015034 0ustar daviddavid(* Title: Signal structure and signature. Author: David Matthews Copyright David Matthews 2000, 2008 This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) signature SIGNAL = sig datatype sig_handle = SIG_DFL | SIG_IGN | SIG_HANDLE of int->unit val signal: int * sig_handle -> sig_handle end; structure Signal: SIGNAL = struct datatype sig_handle = SIG_DFL | SIG_IGN | SIG_HANDLE of int->unit local val doSig = RunCall.run_call2 RuntimeCalls.POLY_SYS_signal_handler in fun signal(s, cmd) = let val c = case cmd of SIG_DFL => 0 | SIG_IGN => 1 | SIG_HANDLE f => RunCall.unsafeCast f in case doSig(0, (s, c)) of 0 => SIG_DFL | 1 => SIG_IGN | f => SIG_HANDLE(RunCall.unsafeCast f) end end local datatype sigHandle = SigHandle of (int->unit) * int | WeakMarker val doSig = RunCall.run_call2 RuntimeCalls.POLY_SYS_signal_handler open Thread fun sigThread(): unit = let (* This call to the RTS returns either a pair of a signal and a handler or a flag indicating that some wek reference has been set to NONE. These aren't logically related but it's convenient to use a single thread for both. *) val nextSig: sigHandle = doSig(1, ()) (* When we get a WeakMarker message we need to broadcast on this condition variable. *) fun broadCastWeak haveLock () = ( if haveLock then () else Mutex.lock Weak.weakLock; ConditionVar.broadcast Weak.weakSignal; Mutex.unlock Weak.weakLock ) in case nextSig of SigHandle (handler, signal) => (handler signal handle _ => ()) | WeakMarker => (* If the lock is free we can do the broadcast now but to avoid waiting and being unable to handle any signals we fork off a thread if we can't. *) if Mutex.trylock Weak.weakLock then broadCastWeak true () else (Thread.fork(broadCastWeak false, []); ()); sigThread() (* Forever. *) end fun forkThread() = (Thread.fork(sigThread, []); ()) in (* Run this thread now and also start one each time we start up. *) val _ = forkThread() val _ = PolyML.onEntry forkThread end end; polyml.5.2.1/basis/Socket.sml0000644000175000017500000005645410766427125015072 0ustar daviddavid(* Title: Standard Basis Library: Generic Sockets Author: David Matthews Copyright David Matthews 2000, 2005 This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* G&R 2004 status: Done. Various changes. In particular "select" added. *) signature SOCKET = sig type ('af,'sock_type) sock type 'af sock_addr type dgram type 'mode stream type passive type active structure AF : sig type addr_family = NetHostDB.addr_family val list : unit -> (string * addr_family) list val toString : addr_family -> string val fromString : string -> addr_family option end structure SOCK : sig eqtype sock_type val stream : sock_type val dgram : sock_type val list : unit -> (string * sock_type) list val toString : sock_type -> string val fromString : string -> sock_type option end structure Ctl : sig val getDEBUG : ('af, 'sock_type) sock -> bool val setDEBUG : ('af, 'sock_type) sock * bool -> unit val getREUSEADDR : ('af, 'sock_type) sock -> bool val setREUSEADDR : ('af, 'sock_type) sock * bool -> unit val getKEEPALIVE : ('af, 'sock_type) sock -> bool val setKEEPALIVE : ('af, 'sock_type) sock * bool -> unit val getDONTROUTE : ('af, 'sock_type) sock -> bool val setDONTROUTE : ('af, 'sock_type) sock * bool -> unit val getLINGER : ('af, 'sock_type) sock -> Time.time option val setLINGER : ('af, 'sock_type) sock * Time.time option -> unit val getBROADCAST : ('af, 'sock_type) sock -> bool val setBROADCAST : ('af, 'sock_type) sock * bool -> unit val getOOBINLINE : ('af, 'sock_type) sock -> bool val setOOBINLINE : ('af, 'sock_type) sock * bool -> unit val getSNDBUF : ('af, 'sock_type) sock -> int val setSNDBUF : ('af, 'sock_type) sock * int -> unit val getRCVBUF : ('af, 'sock_type) sock -> int val setRCVBUF : ('af, 'sock_type) sock * int -> unit val getTYPE : ('af, 'sock_type) sock -> SOCK.sock_type val getERROR : ('af, 'sock_type) sock -> bool val getPeerName : ('af, 'sock_type) sock -> 'af sock_addr val getSockName : ('af, 'sock_type) sock -> 'af sock_addr val getNREAD : ('af, 'sock_type) sock -> int val getATMARK : ('af, active stream) sock -> bool end val sameAddr : 'af sock_addr * 'af sock_addr -> bool val familyOfAddr : 'af sock_addr -> AF.addr_family val bind : ('af, 'sock_type) sock * 'af sock_addr -> unit val listen : ('af, passive stream) sock * int -> unit val accept : ('af, passive stream) sock -> ('af, active stream) sock * 'af sock_addr val acceptNB : ('af, passive stream) sock -> (('af, active stream) sock * 'af sock_addr) option val connect : ('af, 'sock_type) sock * 'af sock_addr -> unit val connectNB : ('af, 'sock_type) sock * 'af sock_addr -> bool val close : ('af, 'sock_type) sock -> unit datatype shutdown_mode = NO_RECVS | NO_SENDS | NO_RECVS_OR_SENDS val shutdown : ('af, 'sock_type stream) sock * shutdown_mode -> unit type sock_desc val sockDesc : ('af, 'sock_type) sock -> sock_desc val sameDesc: sock_desc * sock_desc -> bool val select: { rds: sock_desc list, wrs : sock_desc list, exs : sock_desc list, timeOut: Time.time option } -> { rds: sock_desc list, wrs : sock_desc list, exs : sock_desc list } val ioDesc : ('af, 'sock_type) sock -> OS.IO.iodesc type out_flags = {don't_route : bool, oob : bool} type in_flags = {peek : bool, oob : bool} val sendVec : ('af, active stream) sock * Word8VectorSlice.slice -> int val sendArr : ('af, active stream) sock * Word8ArraySlice.slice -> int val sendVec' : ('af, active stream) sock * Word8VectorSlice.slice * out_flags -> int val sendArr' : ('af, active stream) sock * Word8ArraySlice.slice * out_flags -> int val sendVecNB : ('af, active stream) sock * Word8VectorSlice.slice -> int option val sendArrNB : ('af, active stream) sock * Word8ArraySlice.slice -> int option val sendVecNB' : ('af, active stream) sock * Word8VectorSlice.slice * out_flags -> int option val sendArrNB' : ('af, active stream) sock * Word8ArraySlice.slice * out_flags -> int option val recvVec : ('af, active stream) sock * int -> Word8Vector.vector val recvArr : ('af, active stream) sock * Word8ArraySlice.slice -> int val recvVec' : ('af, active stream) sock * int * in_flags -> Word8Vector.vector val recvArr' : ('af, active stream) sock * Word8ArraySlice.slice * in_flags -> int val recvVecNB : ('af, active stream) sock * int -> Word8Vector.vector option val recvArrNB : ('af, active stream) sock * Word8ArraySlice.slice -> int option val recvVecNB' : ('af, active stream) sock * int * in_flags -> Word8Vector.vector option val recvArrNB' : ('af, active stream) sock * Word8ArraySlice.slice * in_flags -> int option val sendVecTo : ('af, dgram) sock * 'af sock_addr * Word8VectorSlice.slice -> unit val sendArrTo : ('af, dgram) sock * 'af sock_addr * Word8ArraySlice.slice -> unit val sendVecTo' : ('af, dgram) sock * 'af sock_addr * Word8VectorSlice.slice * out_flags -> unit val sendArrTo' : ('af, dgram) sock * 'af sock_addr * Word8ArraySlice.slice * out_flags -> unit val sendVecToNB : ('af, dgram) sock * 'af sock_addr * Word8VectorSlice.slice -> bool val sendArrToNB : ('af, dgram) sock * 'af sock_addr * Word8ArraySlice.slice -> bool val sendVecToNB' : ('af, dgram) sock * 'af sock_addr * Word8VectorSlice.slice * out_flags -> bool val sendArrToNB' : ('af, dgram) sock * 'af sock_addr * Word8ArraySlice.slice * out_flags -> bool val recvVecFrom : ('af, dgram) sock * int -> Word8Vector.vector * 'sock_type sock_addr val recvArrFrom : ('af, dgram) sock * Word8ArraySlice.slice -> int * 'af sock_addr val recvVecFrom' : ('af, dgram) sock * int * in_flags -> Word8Vector.vector * 'sock_type sock_addr val recvArrFrom' : ('af, dgram) sock * Word8ArraySlice.slice * in_flags -> int * 'af sock_addr val recvVecFromNB : ('af, dgram) sock * int -> (Word8Vector.vector * 'sock_type sock_addr) option val recvArrFromNB : ('af, dgram) sock * Word8ArraySlice.slice -> (int * 'af sock_addr) option val recvVecFromNB' : ('af, dgram) sock * int * in_flags -> (Word8Vector.vector * 'sock_type sock_addr) option val recvArrFromNB' : ('af, dgram) sock * Word8ArraySlice.slice * in_flags -> (int * 'af sock_addr) option end; structure Socket :> SOCKET = struct (* We don't really need an implementation for these. *) (* TODO: We should really pull the definition of the sock type into a common structure so it can be shared by the various socket structures. In fact it doesn't matter since the unary constructor here is compiled as an identity so the underlying representation of "SOCK x" will be the same as "x". *) datatype ('af,'sock_type) sock = SOCK of OS.IO.iodesc and dgram = DGRAM and 'mode stream = STREAM and passive = PASSIVE and active = ACTIVE structure AF = struct type addr_family = NetHostDB.addr_family local val doCall: int*unit -> (string * addr_family) list = RunCall.run_call2 RuntimeCalls.POLY_SYS_network in fun list () = doCall(11, ()) end fun toString (af: addr_family) = let val afs = list() in (* Do a linear search on the list - it's small. *) case List.find (fn (_, af') => af=af') afs of NONE => raise OS.SysErr("Missing address family", NONE) | SOME (s, _) => s end fun fromString s = let val afs = list() in (* Do a linear search on the list - it's small. *) case List.find (fn (s', _) => s=s') afs of NONE => NONE | SOME (_, af) => SOME af end end structure SOCK = struct datatype sock_type = SOCKTYPE of int local val doCall: int*unit -> (string * sock_type) list = RunCall.run_call2 RuntimeCalls.POLY_SYS_network in fun list () = doCall(12, ()) end fun toString (sk: sock_type) = let val sks = list() in (* Do a linear search on the list - it's small. *) case List.find (fn (_, sk') => sk=sk') sks of NONE => raise OS.SysErr("Missing socket type", NONE) | SOME (s, _) => s end fun fromString s = let val sks = list() in (* Do a linear search on the list - it's small. *) case List.find (fn (s', _) => s=s') sks of NONE => NONE | SOME (_, sk) => SOME sk end (* We assume that both of these at least are in the table. *) val stream = case fromString "STREAM" of NONE => raise OS.SysErr("Missing socket type", NONE) | SOME s => s val dgram = case fromString "DGRAM" of NONE => raise OS.SysErr("Missing socket type", NONE) | SOME s => s end (* Socket addresses are implemented as strings. *) datatype 'af sock_addr = SOCKADDR of Word8Vector.vector (* Note: The definition did not make these equality type variables. The assumption is probably that it works much like equality on references. *) fun sameAddr (SOCKADDR a, SOCKADDR b) = a = b fun familyOfAddr (sa: 'af sock_addr) = RunCall.run_call2 RuntimeCalls.POLY_SYS_network(39, sa) structure Ctl = struct local val doCall1 = RunCall.run_call2 RuntimeCalls.POLY_SYS_network val doCall2 = RunCall.run_call2 RuntimeCalls.POLY_SYS_network in fun getOpt (i:int) (SOCK s) = doCall1(i, s) fun setOpt (i: int) (SOCK s, b: bool) = doCall2(i, (s, b)) end fun getDEBUG s = getOpt 18 s and setDEBUG s = setOpt 17 s and getREUSEADDR s = getOpt 20 s and setREUSEADDR s = setOpt 19 s and getKEEPALIVE s = getOpt 22 s and setKEEPALIVE s = setOpt 21 s and getDONTROUTE s = getOpt 24 s and setDONTROUTE s = setOpt 23 s and getBROADCAST s = getOpt 26 s and setBROADCAST s = setOpt 25 s and getOOBINLINE s = getOpt 28 s and setOOBINLINE s = setOpt 27 s and getERROR s = getOpt 34 s and getATMARK s = getOpt 45 s local val doCall1 = RunCall.run_call2 RuntimeCalls.POLY_SYS_network val doCall2 = RunCall.run_call2 RuntimeCalls.POLY_SYS_network in fun getSNDBUF (SOCK s) = doCall1(30, s) fun setSNDBUF (SOCK s, i: int) = doCall2(29, (s, i)) fun getRCVBUF (SOCK s) = doCall1(32, s) fun setRCVBUF (SOCK s, i: int) = doCall2(31, (s, i)) fun getTYPE (SOCK s) = SOCK.SOCKTYPE(doCall1(33, s)) fun getNREAD (SOCK s) = doCall1(44, s) fun getLINGER (SOCK s): Time.time option = let val lTime = doCall1(36, s) in if lTime < 0 then NONE else SOME(Time.fromSeconds lTime) end fun setLINGER (SOCK s, NONE) = ( doCall2(35, (s, ~1)) ) | setLINGER (SOCK s, SOME t) = let val lTime = Time.toSeconds t in if lTime < 0 then raise OS.SysErr("Invalid time", NONE) else doCall2(35, (s, lTime)) end end fun getPeerName (SOCK s): 'af sock_addr = RunCall.run_call2 RuntimeCalls.POLY_SYS_network(37, s) fun getSockName (SOCK s): 'af sock_addr = RunCall.run_call2 RuntimeCalls.POLY_SYS_network (38, s) end (* Ctl *) (* Run an operation in non-blocking mode. This catches EWOULDBLOCK and returns NONE, otherwise returns SOME result. Other exceptions are passed back as normal. *) val nonBlockingCall = LibraryIOSupport.nonBlocking fun accept (SOCK s) = RunCall.run_call2 RuntimeCalls.POLY_SYS_network (46, s) local fun acc sock = RunCall.run_call2 RuntimeCalls.POLY_SYS_network (58, sock) in fun acceptNB sock = nonBlockingCall acc sock end fun bind (SOCK s, a) = RunCall.run_call2 RuntimeCalls.POLY_SYS_network (47, (s, a)) fun connect (SOCK s, a) = RunCall.run_call2 RuntimeCalls.POLY_SYS_network (48, (s, a)) local fun connct sa = RunCall.run_call2 RuntimeCalls.POLY_SYS_network (59, sa) in fun connectNB (SOCK s, a) = case nonBlockingCall connct (s,a) of SOME () => true | NONE => false end fun listen (SOCK s, b) = RunCall.run_call2 RuntimeCalls.POLY_SYS_network (49, (s, b)) (* We use the normal "close" for streams. We can't use the normal "local in" here to avoid the extra function calls at run-time because of the polymorphism. *) fun close (SOCK strm): unit = RunCall.run_call3 RuntimeCalls.POLY_SYS_io_dispatch(7, strm, 0) datatype shutdown_mode = NO_RECVS | NO_SENDS | NO_RECVS_OR_SENDS fun shutdown (SOCK s, mode) = let val m = case mode of NO_RECVS => 1 | NO_SENDS => 2 | NO_RECVS_OR_SENDS => 3 in RunCall.run_call2 RuntimeCalls.POLY_SYS_network (50, (s, m)) end (* The IO descriptor is the underlying socket. *) fun ioDesc (SOCK s) = s; type out_flags = {don't_route : bool, oob : bool} type in_flags = {peek : bool, oob : bool} type 'a buf = {buf : 'a, i : int, sz : int option} local val nullOut = { don't_route = false, oob = false } and nullIn = { peek = false, oob = false } (* This implementation is copied from the implementation of Word8Array.array and Word8Vector.vector. *) type address = LibrarySupport.address datatype vector = datatype LibrarySupport.Word8Array.vector datatype array = datatype LibrarySupport.Word8Array.array val wordSize = LibrarySupport.wordSize (* Send the data from an array or vector. Note: the underlying RTS function deals with the special case of sending a single byte vector where the "address" is actually the byte itself. *) local fun doSend i a = RunCall.run_call2 RuntimeCalls.POLY_SYS_network (i, a) in fun send (SOCK sock, base: address, offset: int, length: int, rt: bool, oob: bool): int = doSend 51 (sock, base, offset, length, rt, oob) fun sendNB (SOCK sock, base: address, offset: int, length: int, rt: bool, oob: bool): int option = nonBlockingCall (doSend 60) (sock, base, offset, length, rt, oob) end local (* Although the underlying call returns the number of bytes written the ML functions now return unit. *) fun doSendTo i a = RunCall.run_call2 RuntimeCalls.POLY_SYS_network (i, a) in fun sendTo (SOCK sock, addr, base: address, offset: int, length: int, rt: bool, oob: bool): unit = doSendTo 52 (sock, addr, base, offset, length, rt, oob) fun sendToNB (SOCK sock, addr, base: address, offset: int, length: int, rt: bool, oob: bool): bool = case nonBlockingCall (doSendTo 61) (sock, addr, base, offset, length, rt, oob) of NONE => false | SOME _ => true end local fun doRecv i a = RunCall.run_call2 RuntimeCalls.POLY_SYS_network (i, a) in (* Receive the data into an array. *) fun recv (SOCK sock, base: address, offset: int, length: int, peek: bool, oob: bool): int = doRecv 53 (sock, base, offset, length, peek, oob) fun recvNB (SOCK sock, base: address, offset: int, length: int, peek: bool, oob: bool): int option = nonBlockingCall (doRecv 62) (sock, base, offset, length, peek, oob) end local fun doRecvFrom i a = RunCall.run_call2 RuntimeCalls.POLY_SYS_network (i, a) in fun recvFrom (SOCK sock, base: address, offset: int, length: int, peek: bool, oob: bool) = doRecvFrom 54 (sock, base, offset, length, peek, oob) fun recvFromNB (SOCK sock, base: address, offset: int, length: int, peek: bool, oob: bool) = nonBlockingCall (doRecvFrom 63) (sock, base, offset, length, peek, oob) end in fun sendVec' (sock, slice: Word8VectorSlice.slice, {don't_route, oob}) = let val (Vector v, i, length) = Word8VectorSlice.base slice in send(sock, v, i + Word.toInt wordSize, length, don't_route, oob) end and sendVec (sock, vbuff) = sendVec'(sock, vbuff, nullOut) fun sendVecNB' (sock, slice: Word8VectorSlice.slice, {don't_route, oob}) = let val (Vector v, i, length) = Word8VectorSlice.base slice in sendNB(sock, v, i + Word.toInt wordSize, length, don't_route, oob) end and sendVecNB (sock, vbuff) = sendVecNB'(sock, vbuff, nullOut) fun sendArr' (sock, slice: Word8ArraySlice.slice, {don't_route, oob}) = let val (Array(_, v), i, length) = Word8ArraySlice.base slice in send(sock, v, i, length, don't_route, oob) end and sendArr (sock, vbuff) = sendArr'(sock, vbuff, nullOut) fun sendArrNB' (sock, slice: Word8ArraySlice.slice, {don't_route, oob}) = let val (Array(_, v), i, length) = Word8ArraySlice.base slice in sendNB(sock, v, i, length, don't_route, oob) end and sendArrNB (sock, vbuff) = sendArrNB'(sock, vbuff, nullOut) fun sendVecTo' (sock, addr, slice: Word8VectorSlice.slice, {don't_route, oob}) = let val (Vector v, i, length) = Word8VectorSlice.base slice in sendTo(sock, addr, v, i + Word.toInt wordSize, length, don't_route, oob) end and sendVecTo (sock, addr, vbuff) = sendVecTo'(sock, addr, vbuff, nullOut) fun sendVecToNB' (sock, addr, slice: Word8VectorSlice.slice, {don't_route, oob}) = let val (Vector v, i, length) = Word8VectorSlice.base slice in sendToNB(sock, addr, v, i + Word.toInt wordSize, length, don't_route, oob) end and sendVecToNB (sock, addr, vbuff) = sendVecToNB'(sock, addr, vbuff, nullOut) fun sendArrTo' (sock, addr, slice: Word8ArraySlice.slice, {don't_route, oob}) = let val (Array(_, v), i, length) = Word8ArraySlice.base slice in sendTo(sock, addr, v, i, length, don't_route, oob) end and sendArrTo (sock, addr, vbuff) = sendArrTo'(sock, addr, vbuff, nullOut) fun sendArrToNB' (sock, addr, slice: Word8ArraySlice.slice, {don't_route, oob}) = let val (Array(_, v), i, length) = Word8ArraySlice.base slice in sendToNB(sock, addr, v, i, length, don't_route, oob) end and sendArrToNB (sock, addr, vbuff) = sendArrToNB'(sock, addr, vbuff, nullOut) fun recvArr' (sock, slice: Word8ArraySlice.slice, {peek, oob}) = let val (Array(_, v), i, length) = Word8ArraySlice.base slice in recv(sock, v, i, length, peek, oob) end and recvArr (sock, vbuff) = recvArr'(sock, vbuff, nullIn) fun recvArrNB' (sock, slice: Word8ArraySlice.slice, {peek, oob}) = let val (Array(_, v), i, length) = Word8ArraySlice.base slice in recvNB(sock, v, i, length, peek, oob) end and recvArrNB (sock, vbuff) = recvArrNB'(sock, vbuff, nullIn) (* To receive a vector first create an array, read into it, then copy it to a new vector. This does involve extra copying but it probably doesn't matter too much. *) fun recvVec' (sock, size, flags) = let val arr = Word8Array.array(size, 0w0); val recvd = recvArr'(sock, Word8ArraySlice.full arr, flags) in Word8ArraySlice.vector(Word8ArraySlice.slice(arr, 0, SOME recvd)) end and recvVec (sock, size) = recvVec'(sock, size, nullIn) fun recvVecNB' (sock, size, flags) = let val arr = Word8Array.array(size, 0w0); in case recvArrNB'(sock, Word8ArraySlice.full arr, flags) of NONE => NONE | SOME recvd => SOME(Word8ArraySlice.vector(Word8ArraySlice.slice(arr, 0, SOME recvd))) end and recvVecNB (sock, size) = recvVecNB'(sock, size, nullIn) fun recvArrFrom' (sock, slice: Word8ArraySlice.slice, {peek, oob}) = let val (Array(_, v), i, length) = Word8ArraySlice.base slice in recvFrom(sock, v, i, length, peek, oob) end and recvArrFrom (sock, abuff) = recvArrFrom'(sock, abuff, nullIn) fun recvArrFromNB' (sock, slice: Word8ArraySlice.slice, {peek, oob}) = let val (Array(_, v), i, length) = Word8ArraySlice.base slice in recvFromNB(sock, v, i, length, peek, oob) end and recvArrFromNB (sock, abuff) = recvArrFromNB'(sock, abuff, nullIn) fun recvVecFrom' (sock, size, flags) = let val arr = Word8Array.array(size, 0w0); val (rcvd, addr) = recvArrFrom'(sock, Word8ArraySlice.full arr, flags) in (Word8ArraySlice.vector(Word8ArraySlice.slice(arr, 0, SOME rcvd)), addr) end and recvVecFrom (sock, size) = recvVecFrom'(sock, size, nullIn) fun recvVecFromNB' (sock, size, flags) = let val arr = Word8Array.array(size, 0w0); in case recvArrFromNB'(sock, Word8ArraySlice.full arr, flags) of NONE => NONE | SOME (rcvd, addr) => SOME (Word8ArraySlice.vector(Word8ArraySlice.slice(arr, 0, SOME rcvd)), addr) end and recvVecFromNB (sock, size) = recvVecFromNB'(sock, size, nullIn) end (* "select" call. *) datatype sock_desc = SOCKDESC of OS.IO.iodesc fun sockDesc (SOCK sock) = SOCKDESC sock (* Create a socket descriptor from a socket. *) fun sameDesc (SOCKDESC a, SOCKDESC b) = a = b local (* The underlying call takes three arrays and updates them with the sockets that are in the appropriate state. It sets inactive elements to ~1. *) val doIo: int * (OS.IO.iodesc Vector.vector * OS.IO.iodesc Vector.vector * OS.IO.iodesc Vector.vector * Time.time) -> OS.IO.iodesc Vector.vector * OS.IO.iodesc Vector.vector * OS.IO.iodesc Vector.vector = RunCall.run_call2 RuntimeCalls.POLY_SYS_network in fun sys_select_block(rds, wrs, exs) = doIo(64, (rds, wrs, exs, Time.zeroTime)) fun sys_select_poll(rds, wrs, exs) = doIo(65, (rds, wrs, exs, Time.zeroTime)) (* The time parameter for a wait is the absolute time when the timeout expires. *) and sys_select_wait (rds, wrs, exs, t) = doIo(66, (rds, wrs, exs, t)) end fun select { rds: sock_desc list, wrs : sock_desc list, exs : sock_desc list, timeOut: Time.time option } : { rds: sock_desc list, wrs : sock_desc list, exs : sock_desc list } = let fun sockDescToDesc(SOCKDESC sock) = sock (* Create the initial vectors. *) val rdVec: OS.IO.iodesc Vector.vector = Vector.fromList(map sockDescToDesc rds) val wrVec: OS.IO.iodesc Vector.vector = Vector.fromList(map sockDescToDesc wrs) val exVec: OS.IO.iodesc Vector.vector = Vector.fromList(map sockDescToDesc exs) val (rdResult, wrResult, exResult) = (* Do the approriate select. *) case timeOut of NONE => sys_select_block(rdVec, wrVec, exVec) | SOME t => if t <= Time.zeroTime then sys_select_poll(rdVec, wrVec, exVec) else sys_select_wait(rdVec, wrVec, exVec, t + Time.now()); (* Function to create the results. *) fun getResults v = Vector.foldr (fn (sd, l) => SOCKDESC sd :: l) [] v in (* Convert the results. *) { rds = getResults rdResult, wrs = getResults wrResult, exs = getResults exResult } end end; local (* Install the pretty printer for Socket.AF.addr_family This must be done outside the structure if we use opaque matching. *) fun printAF(p, _, _, _) _ _ x = p(Socket.AF.toString x) fun printSK(p, _, _, _) _ _ x = p(Socket.SOCK.toString x) in val () = PolyML.install_pp printAF val () = PolyML.install_pp printSK end polyml.5.2.1/basis/String.sml0000644000175000017500000021673611063504521015074 0ustar daviddavid(* Title: Standard Basis Library: String Structure Author: David Matthews Copyright David Matthews 1999, 2005 This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* This file declares Char, String and CharVector. String and CharVector are simply different views on the same underlying structure. *) (* G&R 2004 status: Done *) structure Char = struct type char = char end; (* We need this for "scan". *) structure String = struct type string = string end; (* Needed for toString, fromString etc. *) signature CHAR = sig eqtype char eqtype string val minChar : char val maxChar : char val maxOrd : int val ord : char -> int val chr : int -> char val succ : char -> char val pred : char -> char val < : (char * char) -> bool val <= : (char * char) -> bool val > : (char * char) -> bool val >= : (char * char) -> bool val compare : (char * char) -> General.order val contains : string -> char -> bool val notContains : string -> char -> bool val toLower : char -> char val toUpper : char -> char val isAlpha : char -> bool val isAlphaNum : char -> bool val isAscii : char -> bool val isCntrl : char -> bool val isDigit : char -> bool val isGraph : char -> bool val isHexDigit : char -> bool val isLower : char -> bool val isPrint : char -> bool val isSpace : char -> bool val isPunct : char -> bool val isUpper : char -> bool val fromString : String.string -> char option (* The argument to scan should be the global *) val scan : (Char.char, 'a) StringCvt.reader -> (char, 'a) StringCvt.reader val toString : char -> String.string val fromCString : String.string -> char option val toCString : char -> String.string end; signature STRING = sig eqtype string eqtype char val maxSize : int val size : string -> int val sub : (string * int) -> char val extract : (string * int * int option) -> string val substring : (string * int * int) -> string val concat : string list -> string val concatWith: string -> string list -> string val ^ : (string * string) -> string val str : char -> string val implode : char list -> string val explode : string -> char list val map : (char -> char) -> string -> string val translate : (char -> string) -> string -> string val tokens : (char -> bool) -> string -> string list val fields : (char -> bool) -> string -> string list val isPrefix : string -> string -> bool val isSubstring : string -> string -> bool val isSuffix : string -> string -> bool val compare : (string * string) -> General.order val collate : ((char * char) -> General.order) -> (string * string) -> General.order val < : (string * string) -> bool val <= : (string * string) -> bool val > : (string * string) -> bool val >= : (string * string) -> bool val toString : string -> String.string val scan: (Char.char, 'a) StringCvt.reader -> (string, 'a) StringCvt.reader val fromString : String.string -> string option val toCString : string -> String.string val fromCString : String.string -> string option end; signature SUBSTRING = sig type substring eqtype char eqtype string val size : substring -> int val base : substring -> (string * int * int) val isEmpty : substring -> bool val sub : (substring * int) -> char val getc : substring -> (char * substring) option val first : substring -> char option val extract : (string * int * int option) -> substring val substring : (string * int * int) -> substring val slice : (substring * int * int option) -> substring val full: string -> substring val string : substring -> string val concat: substring list ->string val concatWith: string -> substring list ->string val explode : substring -> char list val translate : (char -> string) -> substring -> string val app : (char -> unit) -> substring -> unit val foldl : ((char * 'a) -> 'a) -> 'a -> substring -> 'a val foldr : ((char * 'a) -> 'a) -> 'a -> substring -> 'a val tokens : (char -> bool) -> substring -> substring list val fields : (char -> bool) -> substring -> substring list val isPrefix: string -> substring -> bool val isSubstring: string -> substring -> bool val isSuffix: string -> substring -> bool val compare : (substring * substring) -> General.order val collate : ((char * char) -> General.order) -> (substring * substring) -> General.order val triml : int -> substring -> substring val trimr : int -> substring -> substring val splitl : (char -> bool) -> substring -> (substring * substring) val splitr : (char -> bool) -> substring -> (substring * substring) val splitAt : (substring * int) -> (substring * substring) val dropl : (char -> bool) -> substring -> substring val dropr : (char -> bool) -> substring -> substring val takel : (char -> bool) -> substring -> substring val taker : (char -> bool) -> substring -> substring val position : string -> substring -> (substring * substring) val span : (substring * substring) -> substring end; (* The overloads for char and string for the relational operators have already been set up in the prelude. *) local open RuntimeCalls; (* for POLY_SYS and EXC numbers *) open LibrarySupport; structure Conversion = RunCall.Run_exception1 ( type ex_type = string; val ex_iden = EXC_conversion ); exception Conversion = Conversion.ex; val System_lock: string -> unit = RunCall.run_call1 POLY_SYS_lockseg; val System_loadb: string*word->char = RunCall.run_call2 POLY_SYS_load_byte; val System_setb: string * word * char -> unit = RunCall.run_call3 POLY_SYS_assign_byte; (* Redefine these as functions on the abstract type. *) val System_loadbA: address*word->char = RunCall.run_call2 POLY_SYS_load_byte; val System_setbA: address * word * char -> unit = RunCall.run_call3 POLY_SYS_assign_byte; val System_move_bytesA: address*word*address*word*word->unit = RunCall.run_call5 POLY_SYS_move_bytes (* If a vector/string is short (i.e. has an integer tag) it must be the character itself rather than a pointer to a segment. *) val System_isShort : string -> bool = RunCall.run_call1 POLY_SYS_is_short val wordSize : word = LibrarySupport.wordSize; local val mem_move: string*word*string*word*word -> unit = RunCall.run_call5 POLY_SYS_move_bytes in fun bcopy(src: string, dst: string, src_off: word, dst_off: word, length: word) = mem_move(src, src_off, dst, dst_off, length) end (* These two functions are used to convert between single character strings and the character representation. *) val vecAsChar: string->char = RunCall.unsafeCast val charAsVec: char->string = RunCall.unsafeCast (* Casts between int and word. *) val intAsWord: int -> word = RunCall.unsafeCast and wordAsInt: word -> int = RunCall.unsafeCast (* String concatenation is currently built into the RTS although it doesn't need to be. *) (* val op ^ : string * string -> string = op ^ *)(* In prelude. *) fun op ^ (a: string, b: string): string = let val a_length = sizeAsWord a and b_length = sizeAsWord b val chars = a_length + b_length in (* Handle the special cases where one of the strings is empty. As well as saving on duplicating storage it also means we don't have to consider the special case when the result string is a single character. *) if a_length = 0w0 then b else if b_length = 0w0 then a else (* Normal case *) let val vec = allocString(a_length + b_length) in if a_length = 0w1 then System_setb (vec, wordSize, vecAsChar a) else bcopy(a, vec, wordSize, wordSize, a_length); if b_length = 0w1 then System_setb (vec, wordSize+a_length, vecAsChar b) else bcopy(b, vec, wordSize, wordSize+a_length, b_length); System_lock vec; vec end end (* op ^ *) (* This can be used where we have already checked the range. *) val unsafeSub = LibrarySupport.unsafeStringSub; (* String comparison function used in isPrefix and isSuffix. N.B. The caller must make sure that neither string is a single character. *) fun byteMatch s1 s2 i j l = if l = 0w0 then true else if System_loadb(s1, i + wordSize) = System_loadb(s2, j + wordSize) then byteMatch s1 s2 (i+0w1) (j+0w1) (l-0w1) else false (* There's an irritating dependency here. Char uses StringCvt.reader which means that StringCvt depends on Char so String depends on StringCvt. That means we can't define StringCvt in terms of String which would be easiest. I've solved this by putting common code into LibrarySupport. *) structure Char = struct type char = char and string = string val maxOrd = 255 (* Range from 0 to 255 *) (* Single characters are represented by the number so we only need to check the argument and then convert it. *) fun chr i : char = if i < 0 orelse i > maxOrd then raise General.Chr else RunCall.unsafeCast i val ord: char -> int = RunCall.unsafeCast val minChar = chr 0 and maxChar = chr maxOrd fun succ c = if ord c = maxOrd then raise Chr else chr(ord c + 1) and pred c = if ord c = 0 then raise Chr else chr(ord c - 1) fun isUpper c = #"A" <= c andalso c <= #"Z" fun isLower c = #"a" <= c andalso c <= #"z" fun isDigit c = #"0" <= c andalso c <= #"9" fun isAlpha c = isUpper c orelse isLower c fun isAlphaNum c = isAlpha c orelse isDigit c fun isHexDigit c = isDigit c orelse (#"a" <= c andalso c <= #"f") orelse (#"A" <= c andalso c <= #"F") fun isGraph c = #"!" <= c andalso c <= #"~" fun isPrint c = isGraph c orelse c = #" " fun isPunct c = isGraph c andalso not (isAlphaNum c) (* NOTE: The web page includes 0 <= ord c but all chars satisfy that. *) fun isAscii c = c <= chr 127 (* NOTE: The web page defines isCtrl not isCntrl *) fun isCntrl c = isAscii c andalso not (isPrint c) (* NOTE: There's a mistake in the web page. It says c <= #"\ " *) fun isSpace c = (#"\t" <= c andalso c <= #"\r") orelse c = #" " fun toLower c = if isUpper c then chr (ord c + 32) else c fun toUpper c = if isLower c then chr (ord c - 32) else c (* TODO: More efficient versions. Probably best to use comparison for short strings and table look-up for longer ones. *) fun contains s = let fun match 0w0 c = false | match i c = unsafeSub(s, i-0w1) = c orelse match (i-0w1) c in match (sizeAsWord s) end fun notContains s c = not (contains s c) (* Convert the first i digits as a hex number. Check the result is in the range before returning it. *) local fun readHex' getc str 0 res = if res > maxOrd then NONE else SOME(chr res, str) | readHex' getc str i res = case getc str of NONE => (* No char available. That's ok if we are converting as many chars as we can and have already converted one but not if we are converting n chars and haven't got them *) if i >= ~1 orelse res > maxOrd then NONE else SOME(chr res, str) | SOME(ch, str') => if #"0" <= ch andalso ch <= #"9" then readHex' getc str' (i-1) (res*16 + ord ch - ord #"0") else if #"a" <= ch andalso ch <= #"f" then readHex' getc str' (i-1) (res*16 + ord ch - ord #"a" + 10) else if #"A" <= ch andalso ch <= #"F" then readHex' getc str' (i-1) (res*16 + ord ch - ord #"A" + 10) else (* Not a hex char. Ok if we are converting as many as we can. *) if i >= ~1 orelse res > maxOrd then NONE else SOME(chr res, str) in fun readHexN getc str i = readHex' getc str i 0 and readHex getc str = readHex' getc str ~1 0 end (* Convert the first i digits as a decimal. There must be exactly i digits. *) fun readDec getc str 0 res = if res > maxOrd then NONE else SOME(chr res, str) | readDec getc str i res = case getc str of NONE => if res > maxOrd orelse i > 0 (* not enough chars *) then NONE else SOME(chr res, str) | SOME(ch, str') => if #"0" <= ch andalso ord #"9" >= ord ch then readDec getc str' (i-1) (res*10 + ord ch - ord #"0") else (* Not enough valid digits. *) NONE (* Convert up to i digits as an octal number. There may be fewer than i digits. *) fun readOct getc str 0 res = if res > maxOrd then NONE else SOME(chr res, str) | readOct getc str i res = case getc str of NONE => if res > maxOrd then NONE else SOME(chr res, str) | SOME(ch, str') => if #"0" <= ch andalso ord #"7" >= ord ch then readOct getc str' (i-1) (res*8 + ord ch - ord #"0") else (* Stop here. *) if res > maxOrd then NONE else SOME(chr res, str) (* This function is used as the basis of Char.scan and String.scan. There is a crucial difference between Char.scan and String.scan in that Char.scan returns NONE if it cannot read a single character whereas String.scan returns NONE only if it encounters a bad escape before reading any valid input, which includes a format sequence (\\). This function returns NONE if it encounters a bad escape but SOME("", strm) if it encounters end-of-stream or has read a format sequence. *) fun scanBase (getc: (char, 'a) StringCvt.reader) (str :'a) : (string * 'a) option = case getc str of (* Read the first character. *) NONE => SOME("", str) (* Just end-of-stream. *) | SOME(ch, str') => if ch < chr 32 orelse chr 126 < ch then NONE (* Non-printable character. *) else if ch = #"\\" then (* escape *) ( case getc str' of NONE => NONE | SOME(#"a", str'') => SOME("\a", str'') | SOME(#"b", str'') => SOME("\b", str'') | SOME(#"t", str'') => SOME("\t", str'') | SOME(#"n", str'') => SOME("\n", str'') | SOME(#"v", str'') => SOME("\v", str'') | SOME(#"f", str'') => SOME("\f", str'') | SOME(#"r", str'') => SOME("\r", str'') | SOME(#"\\", str'') => SOME("\\", str'') | SOME(#"\"", str'') => SOME("\"", str'') | SOME(#"^", str'') => (* Control char *) ( case getc str'' of NONE => NONE | SOME(ch'', str''') => if ord ch'' >= 64 andalso 95 >= ord ch'' then SOME(charAsVec(chr(ord ch'' - 64)), str''') else NONE ) | SOME(#"u", str'') => (* Hex encoding: Read 4 hex digits *) (* NOTE: There's a contradiction in the web page: It says both 4 hex digits and also "the longest sequence of such characters" *) (case readHexN getc str'' 4 of NONE => NONE | SOME(s, str) => SOME(charAsVec s, str)) | SOME(ch', str'') => if isSpace ch' then (* Remove \f...f\ and then recurse. *) ( case getc (StringCvt.skipWS getc str'') of NONE => NONE | SOME(ch'', str''') => if ch'' <> #"\\" then NONE (* Bad format *) else SOME("", str''') (* Return an empty string. *) ) else if #"0" <= ch' andalso ch' <= #"2" then (* Decimal encoding *) (* NOTE: There's a contradiction in the web page: It says both 3 digits and also "the longest sequence of such characters". The tests insist on 3 digits so we go with that. *) (case readDec getc str' 3 0 of NONE => NONE | SOME(s, str) => SOME(charAsVec s, str)) else (* Unknown escape *) NONE ) else SOME(charAsVec ch, str') (* Result is the character. *) fun scan (getc: (char, 'a) StringCvt.reader) (str :'a) : (char * 'a) option = case scanBase getc str of NONE => NONE | SOME("", strm') => (* May be end-of-string or we may have read a format sequence. *) (case getc strm' of NONE => (* end-of-string *) NONE | _ => scan getc strm') | SOME(s, strm') => SOME(vecAsChar s, strm') (* Only ever a single character *) (* Convert C escapes *) (* This function does not appear in the CHAR signature but we need to export it from Char to use it in String.fromCString. *) fun scanC (getc: (char, 'a) StringCvt.reader) (str :'a) : (char * 'a) option = case getc str of (* Read the first character. *) NONE => NONE | SOME(ch, str') => if ch < chr 32 orelse chr 126 < ch then NONE (* Non-printable character. *) else if ch = #"\\" then (* escape *) ( case getc str' of NONE => NONE | SOME(#"a", str'') => SOME((*#"\a"*) chr 7, str'') | SOME(#"b", str'') => SOME((*#"\b"*) chr 8, str'') | SOME(#"t", str'') => SOME(#"\t", str'') | SOME(#"n", str'') => SOME(#"\n", str'') | SOME(#"v", str'') => SOME((*#"\v" *) chr 11, str'') | SOME(#"f", str'') => SOME((*#"\f"*) chr 12, str'') | SOME(#"r", str'') => SOME((*#"\r"*) chr 13, str'') | SOME(#"?", str'') => SOME(#"?", str'') | SOME(#"\\", str'') => SOME(#"\\", str'') | SOME(#"\"", str'') => SOME(#"\"", str'') | SOME(#"'", str'') => SOME(#"'", str'') | SOME(#"^", str'') => (* Control char *) ( case getc str'' of NONE => NONE | SOME(ch'', str''') => if ord ch'' >= 64 andalso 95 >= ord ch'' then SOME(chr(ord ch'' - 64), str''') else NONE ) (* Note: the web page says \u here but it seems it should be \x. That's confirmed by the latest version of the library definition. *) | SOME(#"x", str'') => (* Hex encoding. *) readHex getc str'' | SOME(ch', str'') => if #"0" <= ch' andalso ch' <= #"7" then (* Octal encoding *) readOct getc str' 3 0 else (* Unknown escape *) NONE ) else SOME(ch, str') (* Result is the character. *) (* Convert from a string. *) (* TODO: More efficient conversion using the string directly rather than scanString ? *) val fromString = StringCvt.scanString scan and fromCString = StringCvt.scanString scanC (* Convert to printable string. *) local local (* Conversion to octal has now been defined to generate three octal digits in the same way as conversion to integer. *) fun octIntRepr base digs (i: int) = if digs = 0 then "" else octIntRepr base (digs-1) (i div base) ^ str(chr(i mod base + ord #"0")) in val intRepr = octIntRepr 10 3 val octalRepr = octIntRepr 8 3 end in (* Conversion to ML escapes. *) fun toString ch = (* First handle the special cases *) if ch = #"\\" then "\\\\" else if ch = #"\"" then "\\\"" else if isPrint ch (* Other printable characters *) then str ch else (* Control chars: Special cases first *) if ch = chr 7 then "\\a" else if ch = chr 8 then "\\b" else if ch = chr 9 then "\\t" else if ch = chr 10 then "\\n" else if ch = chr 11 then "\\v" else if ch = chr 12 then "\\f" else if ch = chr 13 then "\\r" else if ch < chr 32 (* Other chars must be escaped. *) then "\\^" ^ str(chr(ord ch + 64)) else (* Use 3 digit notation. *) (* Note: Web site assumes ASCII, not Unicode. *) "\\" ^ intRepr(ord ch) (* Conversion to C escapes. *) fun toCString ch = (* First handle the special cases *) if ch = #"\\" then "\\\\" else if ch = #"\"" then "\\\"" else if ch = #"?" then "\\?" else if ch = #"'" then "\\'" else if isPrint ch (* Other printable characters *) then str ch else (* Control chars: Special cases first *) if ch = chr 7 then "\\a" else if ch = chr 8 then "\\b" else if ch = chr 9 then "\\t" else if ch = chr 10 then "\\n" else if ch = chr 11 then "\\v" else if ch = chr 12 then "\\f" else if ch = chr 13 then "\\r" else (* Use octal notation. *) (* Note: Web site assumes ASCII, not Unicode. *) "\\" ^ octalRepr(ord ch) end; (* Install conversion and print functions. *) local (* It might be worth rewriting scan to raise Conversion with a string argument so we can pass back information about why an escape code was invalid. *) fun convChar s = let val len = sizeAsWord s fun rdr i = if i = len then NONE else SOME(unsafeSub(s, i), i+0w1) in case scan rdr 0w0 of NONE => raise Conversion "Invalid character constant" | SOME(res, index') => (* Check that we have converted all the string. *) if index' <> len then raise Conversion "Not exactly one character" else res end fun print_char (put, beg, brk, nd) depth _ (c: char) = put("#\"" ^ toString c ^ "\"") in val unused: unit = RunCall.addOverload convChar "convChar"; val unused: unit = PolyML.install_pp print_char end (* Define the type-specific inequalities. *) val op < : char * char -> bool = op < val op <= : char * char -> bool = op <= val op > : char * char -> bool = op > val op >= : char * char -> bool = op >= fun compare (ch, ch') = if ch < ch' then General.LESS else if ch > ch' then General.GREATER else General.EQUAL end; (* structure Char *) structure String = (* This structure is the basis of both String and CharVector. *) struct type string = string and vector = string and elem = char and char = char val size : string -> int = size (* In prelude *) (* A one character string is simply the character itself. *) val str: char ->string = charAsVec val maxSize: int = RunCall.run_call2 RuntimeCalls.POLY_SYS_process_env (101, ()) val alloc = LibrarySupport.allocString (* Concatentate a list of strings. *) fun concat [] = "" | concat [s] = s (* Handle special case to reduce copying. *) (* Could also handle the case of concat(""::s) = concat s *) | concat L = let fun total n [] = n | total n (H::T) = total (n + size H) T (* How many characters do we have to implode? This could possibly be long (although we would probably have run out of memory long before) so we have to add these as integers and then raise an exception if it's not short. *) val chars : int = total 0 L; in if chars = 0 then "" else if chars = 1 then let (* Special case for single char *) (* Find the character by first removing any empty strings. *) fun getChar [] = raise Fail "" (* Should never occur *) | getChar ("" :: T) = getChar T | getChar (H :: T) = H (* Should be a single character *) in getChar L end else (* Normal case *) let val chs = unsignedShortOrRaiseSize chars (* Check it's short. *) val vec = alloc chs fun copy (i, []:string list) = () | copy (i, H :: T) = let val src_len = sizeAsWord H in if src_len = 0w1 then (* single character strings are ints *) System_setb (vec, i, vecAsChar H) else bcopy(H, vec, wordSize, i, src_len); copy(i+src_len, T) end in copy (wordSize, L); System_lock vec; vec end end (* concat *) fun concatWith s [] = "" | concatWith s [one] = one | concatWith s (hd :: tl) = let fun mk [] = [] | mk (h::t) = s :: h :: mk t in concat(hd :: mk tl) end (* implode is very similar to concat, in fact it could be defined as a cast version of it. Since we need it for StringCvt.splitl it's defined in LibrarySupport. *) val implode = LibrarySupport.stringImplode (* This was previously built-in because of the way it worked in the Poly language. It could be defined as concat[a,b] but we define it separately for efficiency. *) val op ^ : string * string -> string = op ^ (* This replaces the string_sub function in the RTS. It's probably worthwhile because that function indexes from 1 so we need a wrap-around anyway. *) fun sub (s: string, i: int): char = if i < 0 orelse i >= size s then raise General.Subscript else if System_isShort s then vecAsChar s else System_loadb(s, intAsWord i + wordSize); (* Explode a string into a list of characters. *) fun explode (s : string) : char list = stringExplode(s, 0w0, sizeAsWord s) (* TODO: Could be defined more efficiently, perhaps by copying it into an array. *) (* This would be easier if we could process the string twice as we do with toString but we need to be careful to call f only once for each character in case it has a side-effect. *) fun translate f s = let val len = sizeAsWord s in if len = 0w1 (* Handle special case of single character. *) then f(vecAsChar s) else let (* Accumulate the characters into a list. *) fun mapChars i l = if i = len then l else mapChars (i+0w1) (f(System_loadb(s, i+wordSize)) :: l) in (* Reverse the list and concatenate it. *) concat(List.rev(mapChars 0w0 [])) end end fun substring (s, i, j) = let val len = sizeAsWord s (* Check that the index and length are both non-negative. *) val i' = unsignedShortOrRaiseSubscript i and j' = unsignedShortOrRaiseSubscript j in if i'+j' > len then raise Subscript else unsafeSubstring(s, i', j') end fun extract (s, i, NONE) = substring (s, i, size s - i) | extract (s, i, SOME j) = substring (s, i, j) (* tokens and fields are very similar except that tokens does not return empty strings for adjacent delimiters whereas fields does. *) fun tokens p s = let val length = size s fun tok' i l = (* i is the character to examine. l is the start of a token *) if i = length then (* Finished the input. Return any partially completed string. *) ( if l = i then [] else [substring (s, l, i-l)] ) else if p (sub(s, i)) (* TODO: We don't need sub to do the range check here *) then (* It's a delimiter. If we have more than one character in the string we create a string otherwise we just continue. *) ( if l = i then tok' (i+1) (i+1) else substring (s, l, i-l) :: tok' (i+1) (i+1) ) else (* Token: Keep accumulating characters. *) tok' (i+1) l in tok' 0 0 end fun fields p s = let val length = size s fun field' i l = (* i is the character to examine. l is the start of a token *) if i = length then (* Finished the input. Return any partially completed string. *) [substring (s, l, i-l)] else if p (unsafeSub(s, intAsWord i)) then (* It's a delimiter. Finish the partially completed string and start another. *) substring (s, l, i-l) :: field' (i+1) (i+1) else (* Field: Keep accumulating characters. *) field' (i+1) l in field' 0 0 end (* Generate escape characters. *) local fun toStrings convert s = let val len = sizeAsWord s in (* Handle the special case of a single character string first. *) if len = 0w1 then convert(vecAsChar s) else let (* First pass - find out the size of the result string. *) fun getSize i n = if i = len then n else getSize (i+0w1) (n + size(convert(System_loadb(s, i+wordSize)))) (* The result could possibly be long so we add the lengths as integers and convert and check when we've finished. *) val newSize = unsignedShortOrRaiseSize (getSize 0w0 0) in (* If the size is the same we can return the original string. This relies on the fact that the conversions either return the character unchanged or return a longer escape sequence. *) if newSize = len then s else let (* Second pass: create the output string and copy to it. *) val newVec = allocString newSize fun copyToOut i j = if i = len then () else let val conv = convert(System_loadb(s, i+wordSize)) val convSize = sizeAsWord conv in if convSize = 0w1 then System_setb (newVec, j, vecAsChar conv) else bcopy(conv, newVec, wordSize, j, convSize); copyToOut (i+0w1) (j+convSize) end in copyToOut 0w0 wordSize; System_lock newVec; newVec end end end in val toString = toStrings Char.toString and toCString = toStrings Char.toCString end (* Convert escapes. *) fun scan (getc: (char, 'a) StringCvt.reader) (str :'a) : (string * 'a) option = let fun scanString str l haveRead = case Char.scanBase getc str of NONE => (* Invalid escape sequence *) if haveRead then SOME(concat(rev l), str) else NONE | SOME("", strm') => (* End of input or read a format sequence. *) (case getc strm' of NONE => SOME(concat(rev l), strm') | _ => scanString strm' l true) | SOME(s, strm') => scanString strm' (s :: l) true (* More to do. *) in scanString str [] false end val fromString = StringCvt.scanString scan (* TODO: More efficient version. *) fun fromCString "" = SOME "" (* Special case *) | fromCString s = let val len = sizeAsWord s fun rdr i = if i = len then NONE else SOME(unsafeSub(s, i), i+0w1) (* Repeatedly convert escape sequences and accumulate the results in a list. *) fun convChar i = case Char.scanC rdr i of NONE => [] | SOME(res, j) => res :: convChar j in (* If we couldn't even get a single character we return NONE. *) case convChar 0w0 of [] => NONE | res => SOME(implode res) end (* Install conversion and print functions. *) local (* It might be worth rewrite scan to raise Conversion with a string argument so we can pass back information about why an escape code was invalid. *) (* Unlike fromString which returns as much of the input string as could be converted this raises an exception if the input contains any invalid character. *) fun convString s = let val len = sizeAsWord s fun rdr i = if i = len then NONE else SOME(unsafeSub(s, i), i+0w1) (* Repeatedly convert escape sequences and accumulate the results in a list. *) fun convChars i = if i = len then [] (* Finished *) else case Char.scan rdr i of NONE => (* Bad conversion *) raise Conversion "Invalid string constant" | SOME(res, j) => res :: convChars j in implode(convChars 0w0) end fun print_string (put, beg, brk, nd) depth _ (s: string) = ( beg(3, false); put "\""; put (toString s); put "\""; nd() ) in val unused: unit = RunCall.addOverload convString "convString"; val unused: unit = PolyML.install_pp print_string end (* True if s1 is a prefix of s2 *) (* G&R now says that a string is a prefix of itself. *) fun isPrefix s1 s2 = let val size_s1 = size s1 and size_s2 = size s2 in if size_s1 <= size_s2 then if size_s1 = 1 (* We have to deal with the case of single chars. *) then if size_s2 = 1 then s1 = s2 else vecAsChar s1 = System_loadb(s2, wordSize) else byteMatch s1 s2 0w0 0w0 (intAsWord size_s1) else false end (* True if s1 is a suffix of s2 *) fun isSuffix s1 s2 = let val size_s1 = size s1 and size_s2 = size s2 in if size_s1 <= size_s2 then if size_s1 = 1 (* We have to deal with the case of single chars. *) then if size_s2 = 1 then s1 = s2 else vecAsChar s1 = System_loadb(s2, wordSize+intAsWord(size_s2-1)) else byteMatch s1 s2 0w0 (intAsWord (size_s2 - size_s1)) (intAsWord size_s1) else false end (* True if s1 is a substring of s2 *) fun isSubstring s1 s2 = let val size_s1 = size s1 and size_s2 = size s2 (* Start at the beginning and compare until we get a match. *) fun doMatch i s = if s < size_s1 then false (* The remainder of the string is too small to match. *) else if byteMatch s1 s2 0w0 i (intAsWord size_s1) then true else doMatch (i+0w1) (s-1) in if size_s1 = 1 then Char.contains s2 (vecAsChar s1) else doMatch 0w0 size_s2 end (* Functions specific to CharVector, apart from map which is common. *) fun tabulate (0, f) : vector = "" (* Must not try to lock it. *) | tabulate (1, f) : vector = charAsVec(f 0) | tabulate (length: int , f : int->elem): vector = let val len = unsignedShortOrRaiseSize length (* Raises Size if length < 0 *) val vec = alloc len (* Initialise it to the function values. *) fun init i = if len <= i then () else (System_setb(vec, i+wordSize, f(wordAsInt i)); init(i+0w1)) in init 0w0; System_lock vec; vec end (* Create the other functions. *) structure VectorOps = VectorOperations( struct type vector = vector and elem = elem val length = sizeAsWord fun unsafeSub(s, i) = if System_isShort s then vecAsChar s else System_loadb(s, i + wordSize); fun unsafeSet(s, i, v) = raise Fail "Should not be called" end); open VectorOps; fun map f vec = let val len = sizeAsWord vec in if len = 0w0 then "" else if len = 0w1 (* Special case. Single character strings. *) then charAsVec(f(vecAsChar vec)) else (* len > 1 *) let (* Allocate a new vector. *) val new_vec = alloc len val byte_limit = len + wordSize fun domap i = if i >= byte_limit then () else (System_setb(new_vec, i, f(System_loadb(vec, i))); domap(i+0w1)) in domap wordSize; System_lock new_vec; new_vec end end fun mapi f vec = let val len = sizeAsWord vec in if len = 0w0 then "" else if len = 0w1 (* Special case. Single character strings. *) then charAsVec(f (0, vecAsChar vec)) else (* len >= 2 *) let (* Allocate a new vector. *) val new_vec = alloc len fun domap j = if j >= len then () else (System_setb(new_vec, j+wordSize, f(wordAsInt(j), System_loadb(vec, j+wordSize))); domap(j+0w1)) in domap 0w0; System_lock new_vec; new_vec end end (* Return a copy of the string with a particular character replaced *) fun update (v, i, c) = if i < 0 orelse i >= size v then raise Subscript else mapi (fn (j, s) => if j = i then c else s) v (* Name changes needed for CharVector. *) val maxLen = maxSize val fromList = implode val length = size (* Finally the comparison operations since defining these removes the overloading. *) val op < : (string * string) -> bool = op < val op <= : (string * string) -> bool = op <= val op > : (string * string) -> bool = op > val op >= : (string * string) -> bool = op >= local (* The previous version of compare involved two tests. This uses a single string comparison and then tests the result. *) val strCompare: string*string->int = RunCall.run_call2 POLY_SYS_str_compare in fun compare (s1, s2) = let val c = strCompare(s1, s2) in if c = 0 then General.EQUAL else if c = 1 then General.GREATER else General.LESS end end end (* String *) in (* CharArray is very similar to Word8Array and most of the code is duplicated. *) structure CharArray : MONO_ARRAY = struct (* We can't use the segment length for the length of the vector as we do for "normal" arrays and vectors. There are two ways of handling this. We could implement arrays in the same way as strings, with a length word in the first word, or we could store the length separately. The former has the advantage of using less store but the latter allows the byte vector to be used for other purposes and is probably faster. *) type address = LibrarySupport.address datatype array = datatype LibrarySupport.CharArray.array (* N.B. This representation is hard-wired into TextIO. Don't change this representation without changing that as well. *) type vector = string and elem = char infix 9 sub (* For what it's worth *) val maxLen = String.maxLen (* Use the same maximum as string. *) val alloc = LibrarySupport.allocBytes fun length(Array(l, _)) = wordAsInt l fun array (length, ini) = let (* The array is allocated containing zeros. Some versions of the RTS will allow byte vectors to be allocated with other values but other versions don't. For the moment assume that we have to initialise the array separately. *) val len = unsignedShortOrRaiseSize length val vec = alloc len fun init i = if len <= i then () else (System_setbA(vec, i, ini); init(i+0w1)) in init 0w0; Array(len, vec) end fun op sub (Array(l, v), i: int): elem = let val iW = if isShortInt i andalso i >= 0 then intAsWord i else raise General.Subscript in if iW >= l then raise General.Subscript else System_loadbA (v, iW) end fun update (Array (l, v), i: int, new) : unit = let val iW = if isShortInt i andalso i >= 0 then intAsWord i else raise General.Subscript in if iW >= l then raise General.Subscript else System_setbA (v, iW, new) end; (* Create an array from a list. *) local fun fromList' (l : char list) : word*address = let val length = unsignedShortOrRaiseSize (List.length l); (* Make a array initialised to zero. *) val vec = alloc length; (* Copy the list elements into the array. *) fun init (v, i, a :: l) = (System_setbA(v, i, a); init(v, i + 0w1, l)) | init (_, _, []) = (); in init(vec, 0w0, l); (length, vec) end in fun fromList (l : elem list) : array = Array(fromList' l) end fun tabulate (length: int , f : int->elem): array = let val len = unsignedShortOrRaiseSize length val vec = alloc len (* Initialise it to the function values. *) fun init i = if len <= i then () else (System_setbA(vec, i, f(wordAsInt i)); init(i+0w1)) in init 0w0; Array(len, vec) end fun vector (Array(len, vec)) = if len = 0w0 then "" else if len = 0w1 then (* Single character string is the character itself. *) charAsVec (System_loadbA (vec, 0w0)) else let (* Make an array initialised to zero. *) val new_vec = String.alloc len in System_move_bytesA(vec, 0w0, RunCall.unsafeCast new_vec, wordSize, len); System_lock new_vec; new_vec end (* Copy an array into another. It's possible for the arrays to be the same and for the source and destinations to overlap so we have to take care of that. We don't actually check that the source and destination are the same but simply use either incrementing or decrementing copy operations depending on the index values. *) fun copy {src as Array (len, s), dst as Array (dlen, d), di: int} = let val diW = unsignedShortOrRaiseSubscript di in if diW+len > dlen then raise General.Subscript else System_move_bytesA(s, 0w0, d, diW, len) end (* Copy avector into an array. *) (* Since the source is actually a string we have to start the copy from si+wordSize. *) fun copyVec {src, dst as Array (dlen, d), di: int} = let val len = LibrarySupport.sizeAsWord src val diW = unsignedShortOrRaiseSubscript di in if diW + len > dlen then raise General.Subscript else if System_isShort src (* i.e. String.length s = 1 *) then (* Single character strings are represented by the character so we just need to insert the character into the array. *) System_setbA(d, diW, vecAsChar src) else System_move_bytesA(RunCall.unsafeCast src, wordSize, d, diW, len) end (* Create the other functions. *) structure ArrayOps = VectorOperations( struct type vector = array and elem = elem fun length(Array(len, _)) = len fun unsafeSub(Array(_, v), i) = System_loadbA(v, i) and unsafeSet(Array(_, v), i, c) = System_setbA(v, i, c) end); open ArrayOps; local (* Install the pretty printer for CharArray.array *) (* We may have to do this outside the structure if we have opaque signature matching. *) fun pretty(put: string->unit, beg: int*bool->unit, brk: int*int->unit, nd: unit->unit) (depth: int) _ x = ( beg(3, false); put "\""; put (String.toString(vector x)); put "\""; nd() ) in val unused = PolyML.install_pp pretty end end; structure Substring :> sig type substring eqtype char eqtype string val size : substring -> int val base : substring -> (string * int * int) val isEmpty : substring -> bool val sub : (substring * int) -> char val getc : substring -> (char * substring) option val first : substring -> char option val extract : (string * int * int option) -> substring val substring : (string * int * int) -> substring (*val slice : (substring * int * int option) -> substring*) val full: string -> substring val string : substring -> string val concat: substring list ->string val concatWith: string -> substring list ->string val explode : substring -> char list val translate : (char -> string) -> substring -> string val app : (char -> unit) -> substring -> unit val foldl : ((char * 'a) -> 'a) -> 'a -> substring -> 'a val foldr : ((char * 'a) -> 'a) -> 'a -> substring -> 'a val tokens : (char -> bool) -> substring -> substring list val fields : (char -> bool) -> substring -> substring list val isPrefix: string -> substring -> bool val isSubstring: string -> substring -> bool val isSuffix: string -> substring -> bool val compare : (substring * substring) -> General.order val collate : ((char * char) -> General.order) -> (substring * substring) -> General.order val triml : int -> substring -> substring val trimr : int -> substring -> substring val splitl : (char -> bool) -> substring -> (substring * substring) val splitr : (char -> bool) -> substring -> (substring * substring) val splitAt : (substring * int) -> (substring * substring) val dropl : (char -> bool) -> substring -> substring val dropr : (char -> bool) -> substring -> substring val takel : (char -> bool) -> substring -> substring val taker : (char -> bool) -> substring -> substring val position : string -> substring -> (substring * substring) val span : (substring * substring) -> substring type vector type elem type slice val length : slice -> int val subslice: slice * int * int option -> slice val slice: vector * int * int option -> slice val vector: slice -> vector val getItem: slice -> (elem * slice) option val appi : ((int * elem) -> unit) -> slice -> unit val mapi : ((int * elem) -> elem) -> slice -> vector val map : (elem -> elem) -> slice -> vector val foldli : ((int * elem * 'a) -> 'a) -> 'a -> slice -> 'a val foldri : ((int * elem * 'a) -> 'a) -> 'a -> slice -> 'a val findi: (int * elem -> bool) -> slice -> (int * elem) option val find: (elem -> bool) -> slice -> elem option val exists: (elem -> bool) -> slice -> bool val all: (elem -> bool) -> slice -> bool sharing type slice = substring end where type elem = char where type vector = string where type char = char where type string = string = struct type vector = string and elem = char structure VectorSliceOps = VectorSliceOperations( struct type vector = vector and elem = char val vecLength = sizeAsWord fun unsafeVecSub(s, i: word) = if System_isShort s then vecAsChar s else System_loadb(s, i + wordSize) fun unsafeVecUpdate _ = raise Fail "Should not be called" (* Not applicable *) end); open VectorSliceOps; (* vector: get the slice out. Since the underlying vector is implemented using the basic string type we can use substring here. *) fun vector slice : vector = let val (vector, start, length) = base slice in unsafeSubstring(vector, intAsWord start, intAsWord length) end; (* It would be more efficient to do these as single operations but it's probably too complicated. *) fun concat L = String.concat(List.map vector L) fun concatWith s L = String.concatWith s (List.map vector L) fun map f slice = String.map f (vector slice) fun mapi f slice = String.mapi f (vector slice) (* Substring operations. *) type substring = slice type char = elem type string = vector val size = length (* Since we've already checked the bounds we don't need to do it here. *) fun string(Slice{vector=s, start=i, length=l}) = unsafeSubstring(s, i, l) (* Check that the index and length are valid. *) fun substring(s, i, j) = if i < 0 orelse j < 0 orelse String.size s < i+j then raise General.Subscript else Slice{vector=s, start=intAsWord i, length=intAsWord j} fun extract(s, i, NONE) = substring(s, i, String.size s-i) | extract(s, i, SOME j) = substring(s, i, j) fun triml k = if k < 0 then raise General.Subscript else fn (Slice{vector=s, start=i, length=l}) => if k > wordAsInt l then Slice{vector=s, start=i+l, length=0w0} else Slice{vector=s, start=i + intAsWord k, length=l - intAsWord k} fun trimr k = if k < 0 then raise General.Subscript else fn (Slice{vector=s, start=i, length=l}) => if k > wordAsInt l then Slice{vector=s, start=i, length=0w0} else Slice{vector=s, start=i, length=l - intAsWord k} fun explode (Slice{vector=s, start=i, length=l}) : char list = LibrarySupport.stringExplode(s, i, l) (* Compare two strings. We could define compare in terms of collate and it would be just as efficient provided we set PolyML.Compiler.maxInlineSize to a large enough value that collate was inlined, and hence Char.compare would be inlined. *) fun compare (Slice{vector=s, start=j, length=l}, Slice{vector=s', start=j', length=l'}) = let fun comp' i = if i = l then ( if l = l' then General.EQUAL else (* l < l' *) General.LESS ) else if i = l' (* and not l *) then General.GREATER else case Char.compare(unsafeSub(s, i+j), unsafeSub(s', i+j')) of General.EQUAL => comp' (i+0w1) | General.LESS => General.LESS | General.GREATER => General.GREATER in comp' 0w0 end fun isPrefix (s1: string) (Slice{vector=s2, start=i, length=l}) = let val size_s1 = sizeAsWord s1 in if size_s1 > l then false else if size_s1 = 0w1 then if System_isShort s2 then vecAsChar s1 = vecAsChar s2 else vecAsChar s1 = System_loadb(s2, i + wordSize) else byteMatch s1 s2 0w0 i size_s1 end (* True if s1 is a suffix of s2 *) fun isSuffix s1 (Slice{vector=s2, start=i, length=l}) = let val size_s1 = sizeAsWord s1 in if size_s1 > l then false else if size_s1 = 0w1 then if System_isShort s2 then vecAsChar s1 = vecAsChar s2 else vecAsChar s1 = System_loadb(s2, i + l - 0w1 + wordSize) else byteMatch s1 s2 0w0 (l + i - size_s1) size_s1 end (* True if s1 is a substring of s2 *) fun isSubstring s1 (Slice{vector=s2, start, length}) = let val size_s1 = sizeAsWord s1 (* Start at the beginning and compare until we get a match. *) fun doMatch i s = if s < size_s1 then false (* The remainder of the string is too small to match. *) else if ( if size_s1 = 0w1 then vecAsChar s1 = System_loadb(s2, i + wordSize) else byteMatch s1 s2 0w0 i size_s1 ) then true else doMatch (i+0w1) (s-0w1) in if System_isShort s2 then size_s1 = 0w0 orelse (size_s1 = 0w1 andalso vecAsChar s1 = vecAsChar s2) else doMatch start length end (* TODO: This would be quicker with an RTS function to scan for a character in a string. *) fun splitl f (Slice{vector=s, start=i, length=l}) = let fun find j = if j = i+l then (* All chars satisfy f *) (Slice{vector=s, start=i, length=l}, Slice{vector=s, start=j, length=0w0}) else if f(unsafeSub(s, j)) then find (j+0w1) else (* Found a separator *) (Slice{vector=s, start=i, length=j-i}, Slice{vector=s, start=j, length=l+i-j}) in find i end (* TODO: This would be quicker with an RTS function to scan for a character in a string. *) fun splitr f (Slice{vector=s, start=i, length=l}) = let fun find j = if j = i then (* All chars satisfy f *) (Slice{vector=s, start=j, length=0w0}, Slice{vector=s, start=i, length=l}) else if f(unsafeSub(s, j-0w1)) then find (j-0w1) else (* Found a separator *) (Slice{vector=s, start=i, length=j-i}, Slice{vector=s, start=j, length=l+i-j}) in find (i+l) end fun splitAt (Slice{vector=s, start=i, length=l}, j) = let val j' = unsignedShortOrRaiseSubscript j in if j' > l then raise General.Subscript else (Slice{vector=s, start=i, length=j'}, Slice{vector=s, start=i+j', length=l-j'}) end (* TODO: Define these directly rather than via split. It's not so expensive doing it this way for substrings because we don't actually copy the strings. *) fun takel p s = #1(splitl p s) and dropl p s = #2(splitl p s) and taker p s = #2(splitr p s) and dropr p s = #1(splitr p s) (* NOTE: There's an error in the web page. The example function uses "trim" rather than "triml". QUESTION: The check i'+n' >= i does not guarantee that ss is to the left of ss', merely that the end of ss' is to the right of the beginning of ss. I can't remember my reasoning about this at the moment. *) val equal_ptr: string*string->bool = RunCall.run_call2 POLY_SYS_word_eq fun span (Slice{vector=s, start=i, length=n}, Slice{vector=s', start=i', length=n'}) = (* First check with pointer equality and only if that fails do we use the string equality function. *) if (equal_ptr(s, s') orelse s = s') andalso i'+n' >= i then Slice{vector=s, start=i, length=i'+n'-i} else raise General.Span local (* map and translate are defined to apply f from left to right. *) fun list_map f [] = [] | list_map f (a::b) = f a :: list_map f b in (* TODO: Could be defined more efficiently. *) fun translate f s = String.concat(list_map f (explode s)) end (* tokens and fields are very similar except that tokens does not return empty strings for adjacent delimiters whereas fields does. This definition is almost the same as String.tokens and String.fields. *) (* QUESTION: Are these defined always to return the results as substrings of the original base string? That's important if we want to be able to use "span" to join them up again. *) fun tokens p (Slice{vector=s, start=j, length}) = let val ends = j+length fun tok' i l = (* i is the character to examine. l is the start of a token *) if i = ends then (* Finished the input. Return any partially completed string. *) ( if l = i then [] else [Slice{vector=s, start=l, length=i-l}] ) else if p (unsafeSub(s, i)) then (* It's a delimiter. If we have more than one character in the string we create a string otherwise we just continue. *) ( if l = i then tok' (i+0w1) (i+0w1) else Slice{vector=s, start=l, length=i-l} :: tok' (i+0w1) (i+0w1) ) else (* Token: Keep accumulating characters. *) tok' (i+0w1) l in tok' j j end fun fields p (Slice{vector=s, start=j, length}) = let val ends = j+length fun field' i l = (* i is the character to examine. l is the start of a token *) if i = ends then (* Finished the input. Return any partially completed string. *) [Slice{vector=s, start=l, length=i-l}] else if p (unsafeSub(s, i)) then (* It's a delimiter. Finish the partially completed string and start another. *) Slice{vector=s, start=l, length=i-l} :: field' (i+0w1) (i+0w1) else (* Field: Keep accumulating characters. *) field' (i+0w1) l in field' j j end (* TODO: Could be defined more efficiently. *) fun translate f s = String.concat(List.map f (explode s)) fun position s (Slice{vector=s', start=i, length=n}) = let val m = sizeAsWord s (* Length of string to match. *) fun pos k = if k > n-m then (* No match *) (Slice{vector=s', start=i, length=n}, Slice{vector=s', start=i+n, length=0w0}) else if compare(full s, Slice{vector=s', start=i+k, length=m}) = EQUAL then (* Match *) (Slice{vector=s', start=i, length=k}, Slice{vector=s', start=k+i, length=n-k}) else pos (k+0w1) in (* Because m and n are word values n-m is UNSIGNED so we have to check this before we call "pos". *) if m > n then (Slice{vector=s', start=i, length=n}, Slice{vector=s', start=i+n, length=0w0}) else pos 0w0 end (* Return the first character of the string together with the rest of the string. *) fun getc(Slice{length=0w0, ...}) = NONE | getc(Slice{vector=s, start=i, length=l}) = SOME(unsafeSub(s, i), Slice{vector=s, start=i+0w1, length=l-0w1}) fun first(Slice{length=0w0, ...}) = NONE | first(Slice{vector=s, start=i, length=l}) = SOME(unsafeSub(s, i)) end; (* CharVectorSlice. *) structure CharVectorSlice: MONO_VECTOR_SLICE where type elem = char where type vector = string = Substring; structure Substring : SUBSTRING = struct open Substring; val slice = subslice end local (* Install the pretty printer for CharVector.slice (and substring) *) (* We may have to do this outside the structure if we have opaque signature matching. *) fun pretty(put: string->unit, beg: int*bool->unit, brk: int*int->unit, nd: unit->unit) (depth: int) _ s = ( beg(3, false); put "\""; put(String.toString(Substring.string s)); put "\""; nd() ) in val _ = PolyML.install_pp pretty end; structure CharArraySlice:> MONO_ARRAY_SLICE where type elem = char where type vector = string where type vector_slice = CharVectorSlice.slice where type array = CharArray.array = struct type elem = char type vector = string datatype array = datatype LibrarySupport.CharArray.array (* N.B. This representation is hard-wired into TextIO. Don't change this representation without changing that as well. *) type vector_slice = CharVectorSlice.slice structure ArraySliceOps = VectorSliceOperations( struct type vector = array and elem = char fun unsafeVecSub(Array(_, s: LibrarySupport.address), i) = System_loadbA(s, i) and unsafeVecUpdate(Array(_, s), i, x) = System_setbA (s, i, x) and vecLength(Array(l, _)) = l end); open ArraySliceOps; (* vector: get the slice out. *) fun vector slice: vector = let val (Array(_, vec), start, length) = base slice in if length = 0 then "" else if length = 1 then (* Single character string is the character itself. *) RunCall.unsafeCast (System_loadbA (vec, intAsWord start)) else let val len = intAsWord length (* Make an array initialised to zero. *) val new_vec = String.alloc len in System_move_bytesA(vec, intAsWord start, RunCall.unsafeCast new_vec, wordSize, len); System_lock new_vec; new_vec end end (* Copy a slice into an array. *) fun copy {src, dst as Array (dlen, d), di: int} = let val (Array(_, s), start, length) = base src in if di < 0 orelse di+length > CharArray.length dst then raise General.Subscript else System_move_bytesA(s, intAsWord start, d, intAsWord di, intAsWord length) end (* Copy a vector slice into an array. *) fun copyVec {src: CharVectorSlice.slice, dst as Array (dlen, d), di: int} = let val (source, i, l) = CharVectorSlice.base src val len = intAsWord l and offset = intAsWord i val diW = unsignedShortOrRaiseSubscript di in if diW + len > dlen then raise General.Subscript else if System_isShort source (* i.e. length s = 1 *) then (* Single character strings are represented by the character so we just need to insert the character into the array. *) System_setbA(d, diW + offset, vecAsChar source) (* The source is represented by a string whose first word is the length. *) else System_move_bytesA(RunCall.unsafeCast source, offset + wordSize, d, diW, len) end end (* CharArraySlice *); local (* Install the pretty printer for Word8ArraySlice.slice *) (* We may have to do this outside the structure if we have opaque signature matching. *) fun pretty(put: string->unit, beg: int*bool->unit, brk: int*int->unit, nd: unit->unit) (depth: int) _ x = ( beg(3, false); put "\""; put(CharArraySlice.vector x); put "\""; nd() ) in val _ = PolyML.install_pp pretty end structure CharVector: MONO_VECTOR = String structure String: STRING = String structure Char: CHAR = Char end; (* Values available unqualified at the top level. *) val ord : char -> int = Char.ord val chr : int -> char = Char.chr val concat : string list -> string =String.concat val implode : char list -> string = String.implode val explode : string -> char list = String.explode val substring : string * int * int -> string = String.substring; val op ^ : string * string -> string = String.^; type substring = Substring.substring; (* These are declared in the prelude. *) (* val size : string -> int = String.size val str : char -> string = String.str *) polyml.5.2.1/basis/StringCvt.sml0000644000175000017500000001414710313043327015540 0ustar daviddavid(* Title: Standard Basis Library: StringCvt Structure Author: David Matthews Copyright David Matthews 1999 This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* G&R 2004 status: checked, no change required. *) signature STRING_CVT = sig datatype radix = BIN | OCT | DEC | HEX datatype realfmt = SCI of int option | FIX of int option | GEN of int option | EXACT type ('a, 'b) reader = 'b -> ('a * 'b) option val padLeft : char -> int -> string -> string val padRight : char -> int -> string -> string val splitl : (char -> bool) -> (char, 'a) reader ->'a -> (string * 'a) val takel : (char -> bool) -> (char, 'a) reader ->'a -> string val dropl : (char -> bool) -> (char, 'a) reader ->'a -> 'a val skipWS : (char, 'a) reader -> 'a -> 'a type cs val scanString : ((char, cs) reader -> ('a, cs) reader) -> string -> 'a option end; structure StringCvt : STRING_CVT = struct (* Note: Both the String and Char structures use StringCvt.reader . This means that they depend on this structure so we have to put declarations we need for both in LibrarySupport. *) open RuntimeCalls; (* for POLY_SYS and EXC numbers *) open LibrarySupport val chToString: char->string = RunCall.unsafeCast and stringToCh: string->char = RunCall.unsafeCast val System_lock: string -> unit = RunCall.run_call1 POLY_SYS_lockseg; val System_lock: string -> unit = RunCall.run_call1 POLY_SYS_lockseg; val System_loadb: string*word->char = RunCall.run_call2 POLY_SYS_load_byte; val System_setb: string * word * char -> unit = RunCall.run_call3 POLY_SYS_assign_byte; val mem_move: string*word*string*word*word -> unit = RunCall.run_call5 POLY_SYS_move_bytes datatype radix = BIN | OCT | DEC | HEX datatype realfmt = SCI of int option | FIX of int option | GEN of int option | EXACT type ('a, 'b) reader = 'b -> ('a * 'b) option fun padLeft c i s = if i <= 0 (* unsignedShortOrRaiseSize raises Size if i < 0 which isn't right here. *) then s else let val len: word = sizeAsWord s val iW = unsignedShortOrRaiseSize i (* checks that i is a short. *) in if len >= iW then s else if iW = 0w1 (* and therefore size s = 0 *) then chToString c (* return single character string. *) else let val extra = iW - len val str = allocString iW fun setCh n = if n = extra then () (* Set the character part of the string. *) else ( System_setb(str, n+wordSize, c); setCh(n+0w1) ) in setCh 0w0; (* Copy the character part of the string over. *) if len = 0w1 then System_setb(str, extra + wordSize, stringToCh s) else mem_move(s, wordSize, str, extra + wordSize, len); System_lock str; str end end fun padRight c i s = if i <= 0 (* unsignedShortOrRaiseSize raises Size if i < 0 which isn't right here. *) then s else let val len = sizeAsWord s val iW = unsignedShortOrRaiseSize i (* checks that i is a short. *) in if len >= iW then s else if iW = 0w1 (* and therefore size s = 0 *) then chToString c (* return single character string. *) else let val extra = iW - len val str = allocString iW fun setCh n = if n = iW then () (* Set the character part of the string. *) else ( System_setb(str, n+wordSize, c); setCh(n+0w1) ) in (* Copy the character part of the string over. *) if len = 0w1 then System_setb(str, wordSize, stringToCh s) else mem_move(s, wordSize, str, wordSize, len); setCh len; System_lock str; str end end (* p is described as a predicate. That implies that it is side-effect free. If it is we could use it e.g. twice, once to work out the length of the string and then to create the string itself. Assume that it may have side-effects and that we can only execute it once. *) local (* We have to define rev here because it isn't defined until we compile List. *) fun rev l [] = l | rev l (a::b) = rev (a::l) b fun split' p f res src = case f src of NONE => (stringImplode(rev [] res), src) (* Not available. *) | SOME (ch, src') => (* Char available *) if p ch then (* It matches - include in the result *) split' p f (ch :: res) src' else (stringImplode(rev [] res), src) (* No match *) in fun splitl p f src = split' p f [] src end (* It may be worth defining takel independently but it doesn't add much overhead by contrast with dropl *) fun takel p f s = #1(splitl p f s) (* fun dropl p f s = #2(splitl p f s) *) (* This is probably as efficient as it can be. *) fun dropl p f src = case f src of NONE => src (* Not available. *) | SOME (ch, src') => (* Char available *) if p ch then dropl p f src' else src (* No match *) (* Copied isSpace from Char structure to avoid circular dependency. *) fun skipWS f src = case f src of NONE => src (* Not available. *) | SOME (ch, src') => (* Char available *) if (#"\t" <= ch andalso ch <= #"\r") orelse ch = #" " then skipWS f src' else src (* No match *) datatype cs = Index of word (* Index into the string. *) fun scanString cvt s = let val len = sizeAsWord s fun rdr (Index i) = if i = len then NONE (* Since we know the index is between 0 and len-1 we can use the unsafe subscript function here. *) else SOME(LibrarySupport.unsafeStringSub(s, i), Index(i+0w1)) in case cvt rdr (Index 0w0) of NONE => NONE | SOME(res, strm') => SOME res end end; polyml.5.2.1/basis/SysWord.sml0000644000175000017500000000171110313043327015220 0ustar daviddavid(* Title: Standard Basis Library: SysWord Structure Author: David Matthews Copyright David Matthews 1999 This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* G&R 2004 status: checked, no change. *) (* Just defined in terms of LargeWord. *) structure SysWord: WORD = LargeWord; polyml.5.2.1/basis/Text.sml0000644000175000017500000000365510313043327014543 0ustar daviddavid(* Title: Standard Basis Library: Text Signature and Structure Author: David Matthews Copyright David Matthews 1999, 2005 This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* G&R 2004 status: updated to include CharVectorSlice and CharArraySlice. *) signature TEXT = sig structure Char : CHAR structure String : STRING structure Substring : SUBSTRING structure CharVector : MONO_VECTOR structure CharArray : MONO_ARRAY structure CharVectorSlice: MONO_VECTOR_SLICE structure CharArraySlice : MONO_ARRAY_SLICE sharing type Char.char = String.char = Substring.char = CharVector.elem = CharArray.elem = CharVectorSlice.elem = CharArraySlice.elem sharing type Char.string = String.string = Substring.string = CharVector.vector = CharArray.vector = CharVectorSlice.vector = CharArraySlice.vector sharing type CharArray.array = CharArraySlice.array sharing type CharVectorSlice.slice = CharArraySlice.vector_slice end; structure Text : TEXT = struct structure Char = Char structure String = String structure Substring = Substring structure CharVector = CharVector structure CharArray = CharArray structure CharVectorSlice = CharVectorSlice structure CharArraySlice = CharArraySlice end; polyml.5.2.1/basis/TextIO.sml0000644000175000017500000010632311062467237015003 0ustar daviddavid(* Title: Standard Basis Library: Text IO Copyright David C.J. Matthews 2000, 2005 This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* G&R 2004 status: updated. It's possible that there are subtleties that haven't been addressed. *) signature TEXT_STREAM_IO = sig include STREAM_IO where type vector = CharVector.vector where type elem = Char.char val inputLine : instream -> (string * instream) option val outputSubstr : outstream * Substring.substring -> unit end; signature TEXT_IO = sig (* include IMPERATIVE_IO *) structure StreamIO : TEXT_STREAM_IO where type reader = TextPrimIO.reader where type writer = TextPrimIO.writer where type pos = TextPrimIO.pos type vector = StreamIO.vector type elem = StreamIO.elem type instream type outstream val input : instream -> vector val input1 : instream -> elem option val inputN : instream * int -> vector val inputAll : instream -> vector val canInput : instream * int -> int option val lookahead : instream -> elem option val closeIn : instream -> unit val endOfStream : instream -> bool val output : outstream * vector -> unit val output1 : outstream * elem -> unit val flushOut : outstream -> unit val closeOut : outstream -> unit val mkInstream : StreamIO.instream -> instream val getInstream : instream -> StreamIO.instream val setInstream : instream * StreamIO.instream -> unit val mkOutstream : StreamIO.outstream -> outstream val getOutstream : outstream -> StreamIO.outstream val setOutstream : outstream * StreamIO.outstream -> unit val getPosOut : outstream -> StreamIO.out_pos val setPosOut : outstream * StreamIO.out_pos -> unit (* End of include IMPERATIVE_IO *) val inputLine : instream -> string option val outputSubstr : outstream * Substring.substring -> unit val openIn : string -> instream val openOut : string -> outstream val openAppend : string -> outstream val openString : string -> instream val stdIn : instream val stdOut : outstream val stdErr : outstream val print : string -> unit val scanStream : ((Char.char, StreamIO.instream) StringCvt.reader -> ('a, StreamIO.instream) StringCvt.reader) -> instream -> 'a option end; structure TextIO :> TEXT_IO = struct open IO type vector = String.string and elem = Char.char local structure Interrupt = RunCall.Run_exception0( val ex_iden = RuntimeCalls.EXC_interrupt ) in exception Interrupt = Interrupt.ex end (* Called after any exception in the lower level reader or writer to map any exception other than Io into Io. *) fun mapToIo (io as Io _, _, _) = io | mapToIo (Interrupt, _, _) = Interrupt | mapToIo (nonIo, name, caller) = Io { name = name, function = caller, cause = nonIo } (* Functional IO Layer. *) structure TextStreamIO = struct structure BasicTextStreamIO = BasicStreamIO( structure PrimIO = TextPrimIO structure Vector = CharVector structure Array = CharArray structure VectorSlice = CharVectorSlice structure ArraySlice = CharArraySlice val someElem : PrimIO.elem = #" " ); open BasicTextStreamIO (* Input a line. Adds a newline if the file ends without one. *) fun inputLine f = let (* Read a sequence of blocks until we get a newline or EOF. *) fun inputBlocks read f = let (* Read the next block and see how big it is. *) val (blk, f') = input f val length = String.size blk (* See if it contains a newline and if so where. *) fun newlinePos i = if i = length then length+1 else if String.sub(blk, i) = #"\n" then i+1 (* Return characters including newline. *) else newlinePos (i+1) val nlPos = newlinePos 0 in if length = 0 (* EOF *) then ( (* If we have not read anything at all we return NONE otherwise return what we had with a newline added. *) case read of [] => NONE | _ => SOME(String.concat(List.rev("\n"::read)), f) ) else if nlPos > length then inputBlocks (blk::read) f' (* No newline - get another block.. *) else (* The string we read included a newline. *) let (* Reread all up to and including the newline and return the stream which gives us the rest. *) val (b, f') = inputN(f, nlPos) in SOME(String.concat(List.rev(b::read)), f') end end in (* If we are at end-of-stream we return NONE. Since this is a functional stream that means we will always return NONE for a given f (i.e. there's no temporary end-of-stream to be cleared). *) inputBlocks [] f end (* StreamIO treats line buffering on output as block buffering since it has no concept of a line separator. *) fun output(f, v) = case getBufferMode f of LINE_BUF => let val vecLen = CharVector.length v (* Find the last newline character in the string. *) fun lastNewline 0 = 0 | lastNewline i = if CharVector.sub(v, i-1) = #"\n" then i else lastNewline(i-1) val newLinePos = lastNewline vecLen in if newLinePos = 0 then (* No newlines in it. *) BasicTextStreamIO.output(f, v) else (* There's at least one newline. *) ( outputVec(f, CharVectorSlice.slice(v, 0, SOME newLinePos)); flushOut f; outputVec(f, CharVectorSlice.slice(v, newLinePos, NONE)) ) end | _ => BasicTextStreamIO.output(f, v) (* Not line buffering. *) (* This could be defined in terms of output but the underlying output1 function is likely to be more efficient. *) fun output1(f, c) = ( BasicTextStreamIO.output1(f, c); if c = #"\n" andalso getBufferMode f = LINE_BUF then flushOut f else () ) end (* TextStreamIO. *) (* The imperative IO streams *) structure ImpIO = ImperativeIO( structure StreamIO = TextStreamIO structure Vector = CharVector structure Array = CharArray) (* open ImpIO *) (* Replace the StreamIO from ImpIO by our version. *) structure StreamIO = struct open TextStreamIO (* TODO: This is unnecessary. CharVectorSlice.slice and Substring.substring are the same type. *) fun outputSubstr(f, s) = let val (v, i, l) = Substring.base s in outputVec(f, CharVectorSlice.slice(v, i, SOME l)) end end; (* The simple, and original implementation was in terms of the ImperativeIO structure. The big disadvantage of it is that in the common case when we simply open a stream on a file and read it entirely through the TextIO interface we have a lot of overhead. I've changed it to use the underlying layers if required but otherwise to use the file descriptor directly. This isn't such a problem with output so we use the lower layers directly. Stream IO has now been reimplemented to be much more efficient. It seems there is still some speed advantage in using the low-level directly but there's much less difference than there used to be. *) (* The type of a stream without the layers in between. If we extract the lower level this gets replaced. *) type textInstream = { descr: OS.IO.iodesc, buffer: CharArray.array, bufp: int ref, buflimit: int ref, (* buflimit: size of useful data in the buffer. Some values of this are special. If this is ~1 it means that the buffer does not contain valid data but we have not detected an end-of-file or if we have we have passed this back to the caller. If this is 0 it means that the last read returned zero (EOF) AND we have not yet returned this to the caller. This happens if we're reading a large amount of data and we stop because we reach EOF. We return as much as we can this time and the NEXT read returns (and clears) EOF. *) name: string } datatype baseInstream = Underlying of ImpIO.instream | Direct of textInstream open Thread.Thread open Thread.Mutex datatype instream = InStream of baseInstream ref * mutex type outstream = ImpIO.outstream val output = ImpIO.output val output1 = ImpIO.output1 val flushOut = ImpIO.flushOut val closeOut = ImpIO.closeOut val mkOutstream = ImpIO.mkOutstream val getOutstream = ImpIO.getOutstream val setOutstream = ImpIO.setOutstream val getPosOut = ImpIO.getPosOut val setPosOut = ImpIO.setPosOut open RuntimeCalls LibrarySupport.CharArray type fileDescr = OS.IO.iodesc; type address = LibrarySupport.address (* We have to declare doIo separately depending on the types of the arguments. It's possible to get round this but that would result in an extra call to run_call3 for each io call. *) local val doIo: int*int*string -> fileDescr = RunCall.run_call3 POLY_SYS_io_dispatch in val stdInDesc: fileDescr = doIo(0, 0, "") and stdOutDesc: fileDescr = doIo(1, 0, "") and stdErrDesc: fileDescr = doIo(2, 0, "") fun sys_open_in_text name = doIo(3, 0, name) and sys_open_out_text name = doIo(5, 0, name) and sys_open_append_text name = doIo(13, 0, name) end local val doIo = RunCall.run_call3 POLY_SYS_io_dispatch in fun sys_get_buffsize (strm: fileDescr): int = doIo(15, strm, 0) and sys_can_input(strm: fileDescr): int = doIo(16, strm, 0) and sys_avail(strm: fileDescr): int = doIo(17, strm, 0) end local val doIo = RunCall.run_call3 POLY_SYS_io_dispatch in fun sys_close (strm: fileDescr): unit = doIo(7, strm, 0) end local val doIo = RunCall.run_call3 POLY_SYS_io_dispatch in fun sys_read_text (strm: fileDescr, vil: address*word*word): int = doIo(8, strm, vil) end local val doIo = RunCall.run_call3 POLY_SYS_io_dispatch in fun sys_read_string (strm: fileDescr, len: int): string = doIo(10, strm, len) end (* Create the primitive IO functions and add the higher layers. *) fun wrapInFileDescr(n, name, buffContents) = let val textPrimRd = LibraryIOSupport.wrapInFileDescr{fd=n, name=name, initBlkMode=true} val streamIo = StreamIO.mkInstream(textPrimRd, buffContents) in streamIo end fun wrapOutFileDescr(n, name, buffering, isAppend) = let val buffSize = sys_get_buffsize n val textPrimWr = LibraryIOSupport.wrapOutFileDescr{fd=n, name=name, appendMode=isAppend, initBlkMode=true, chunkSize=buffSize} (* Construct a stream. *) val streamIo = StreamIO.mkOutstream(textPrimWr, buffering) in mkOutstream streamIo end (* Open a file for output. *) fun openOut s = let val f = sys_open_out_text s handle exn => raise mapToIo(exn, s, "TextIO.openOut") (* Look at the stream to see what kind of buffering to use. *) val k = OS.IO.kind f in wrapOutFileDescr (f, s, if k = OS.IO.Kind.tty then IO.LINE_BUF else IO.BLOCK_BUF, false (* Not append *)) end fun openAppend s = let val f = sys_open_append_text s handle exn => raise mapToIo(exn, s, "TextIO.openAppend") val k = OS.IO.kind f in wrapOutFileDescr (f, s, if k = OS.IO.Kind.tty then IO.LINE_BUF else IO.BLOCK_BUF, true (* setPos will not work. *)) end (* Open a file for input. We start off using the Direct interface. *) fun openIn s = let val f = sys_open_in_text s handle exn => raise mapToIo(exn, s, "TextIO.openIn") val buffsize = sys_get_buffsize f handle _ => 1024 in InStream( ref (Direct{descr=f, name=s, buffer=CharArray.array(buffsize, #" "), bufp=ref 0, buflimit=ref ~1}), mutex()) end (* Get the entries for standard input, standard output and standard error. *) val stdIn = let val buffsize = sys_get_buffsize stdInDesc handle _ => 1024 in InStream( ref (Direct{descr=stdInDesc, name="stdIn", buffer=CharArray.array(buffsize, #" "), bufp=ref 0, buflimit=ref ~1}), mutex()) end (* This is a bit of a mess. When we load a saved state the references associated with stdIn will be overwritten. That could actually happen with any input file but stdIn is the only one that definitely is "persistent". We need to save the contents of the buffer across the load and update the buffer with the saved contents. *) local fun onLoad doLoad = case stdIn of InStream(ref(Direct{buffer, bufp as ref savedBufp, buflimit as ref savedBufLimit, ...}), _) => let (* Have to extract the contents and save it in a local variable. *) val savedBuff = if savedBufLimit < 0 then "" else CharArraySlice.vector( CharArraySlice.slice(buffer, savedBufp, SOME(savedBufLimit - savedBufp))); in doLoad(); CharArray.copyVec { src=savedBuff, dst=buffer, di=savedBufp }; bufp := savedBufp; buflimit := savedBufLimit end | _ => doLoad() (* Ignore this case for the moment. *) (* On startup truncate the buffer in case there was some pending input when we exported. Also install the onLoad function. *) fun onStartUp () = ( case stdIn of InStream(ref(Direct{bufp, buflimit, ...}),_) => (bufp := 0; buflimit := ~1) | _ => (); PolyML.onLoad onLoad ) in (* Set up an onEntry handler so that this is always installed. *) val () = PolyML.onEntry onStartUp; (* Install it now. *) val () = PolyML.onLoad onLoad end; (* We may want to consider unbuffered output or even linking stdOut with stdIn so that any unbuffered output is flushed before reading from stdIn. That's the way that stdio works to ensure that prompts are written out. *) (* PROBLEM: The following declaration is evaluated when this structure is created, not at the start of the session. The buffering will be set permanently to the buffering in effect at that point. Two solutions are possible. One is to define special versions of the "write" functions to examine the stream whenever they are called and decide whether to change the buffering. Another is simply to set it to unbuffered. That can be changed, though, which may not be satisfactory. *) (* I've changed this from NO_BUF to LINE_BUF which should improve the performance. An alternative might be to set up an "OnEntry" call which would examine the stream and decide what kind of buffering to use. DCJM 1/9/00. *) val stdOut = let val f = RunCall.run_call1 POLY_SYS_io_operation POLY_SYS_stdout in wrapOutFileDescr (f, "stdOut", IO.LINE_BUF (* if System_is_term f then IO.LINE_BUF else IO.BLOCK_BUF *), false) end val stdErr = let val f = RunCall.run_call1 POLY_SYS_io_operation POLY_SYS_stderr in wrapOutFileDescr (f, "stdErr", IO.NO_BUF (* Defined to be unbuffered. *), false) end (* Lock the mutex during any lookup or entry. *) fun protect f (InStream(r, m)) = LibraryIOSupport.protect m f r (* Read something into the buffer. *) fun fillBuffer({buffer=Array(length, addr), bufp, buflimit, descr, name, ...}: textInstream) : unit = ( bufp := 0; buflimit := ~1; (* Set these first in case of an exception. *) (* Read the text and set the buffer limit. If the result was zero we've reached end-of-stream. *) buflimit := sys_read_text(descr, (addr, 0w0, length)) handle exn => raise mapToIo(exn, name, "TextIO.fillBuffer") ) (* If we make a text stream from the lower level we always wrap it up. It might be possible to get the underlying file descriptor. *) fun mkInstream (s : StreamIO.instream) : instream = InStream(ref(Underlying(ImpIO.mkInstream s)), mutex()) local fun getInstream'(ref(Underlying strm)) = ImpIO.getInstream strm | getInstream'(instr as ref(Direct{descr, buffer, bufp, buflimit, name})) = let (* We have to wrap the stream at this point and pass it the remains of the buffer. *) val unprocessed = if !buflimit < 0 then "" else CharArraySlice.vector(CharArraySlice.slice(buffer, !bufp, SOME(!buflimit - !bufp))); val strm = wrapInFileDescr(descr, name, unprocessed) in instr := Underlying(ImpIO.mkInstream strm); strm end in val getInstream = protect getInstream' end local fun setInstream' s (ref(Underlying strm)) = ImpIO.setInstream(strm, s) | setInstream' s (instr as ref(Direct _)) = (* Should we close the existing stream or just discard it? We can't have previously called getInstream because that would have turned the "Direct" into an "Underlying" so there can't be any other reference to this stream. Leave it for the moment. *) instr := Underlying(ImpIO.mkInstream s) in fun setInstream(r, s) = protect (setInstream' s) r end local (* Read the next natural unit of the stream. *) fun input'(ref(Underlying strm)) = ImpIO.input strm | input'(ref(Direct(strm as {buffer, bufp, buflimit, ...}))) = if !buflimit = 0 then (* Last read returned end-of-file. Clear the EOF state once we return this empty string. *) (buflimit := ~1; "") else ( (* If we have exhausted the buffer or never read before we have to try reading now. *) if !bufp >= !buflimit then fillBuffer strm else (); if !buflimit = 0 then (* Now reached eof. Since we're returning an empty string we need to set buflimit to ~1 to indicate that we should try reading again. *) (buflimit := ~1; "") else let (* Return the rest of the buffer. *) val resString = CharArraySlice.vector(CharArraySlice.slice(buffer, !bufp, SOME(!buflimit - !bufp))); in bufp := !buflimit; resString end ) in val input = protect input' end local fun input1'(ref(Underlying strm)) = ImpIO.input1 strm | input1'(ref(Direct(strm as {buffer, bufp, buflimit, ...}))) = if !buflimit = 0 then (* Last read returned end-of-file. Clear the EOF state once we return NONE. *) (buflimit := ~1; NONE) else ( (* If we have exhausted the buffer or never read before we have to try reading now. *) if !bufp >= !buflimit then fillBuffer strm else (); if !buflimit = 0 then (* We must only return a single end-of-file for this read. We set the limit to ~1 so that we will read again. *) (buflimit := ~1; NONE) else let val resCh = CharArray.sub(buffer, !bufp) in bufp := !bufp + 1; SOME resCh end ) in val input1 = protect input1' end local fun inputN' n (ref(Underlying strm)) = ImpIO.inputN(strm, n) | inputN' n (ref(Direct(strm as {buffer, bufp, buflimit, ...}))) = if n < 0 orelse n > CharVector.maxLen then raise Size else if !buflimit = 0 then (* Last read returned end-of-file. Clear the EOF state once we return this empty string. *) (buflimit := ~1; "") else let fun readN toRead = if !bufp + toRead <= !buflimit then (* Can satisfy the request from the buffer. *) let val resString = CharArraySlice.vector(CharArraySlice.slice(buffer, !bufp, SOME toRead)); in bufp := !bufp + toRead; [resString] end else let val available = if !buflimit < 0 then 0 else !buflimit - !bufp val resString = CharArraySlice.vector(CharArraySlice.slice(buffer, !bufp, SOME available)) in fillBuffer strm; if !buflimit = 0 then (* Reached eof - return what we have. *) [resString] else resString :: readN (toRead - available) end val result = concat(readN n) in (* If we reached EOF without reading anything we clear the EOF indicator. Otherwise we leave it. That way we always return a single null string for each eof. *) if n <> 0 andalso size result = 0 then buflimit := ~1 else (); result end in fun inputN(r, n) = protect (inputN' n) r end local fun inputAll'(ref(Underlying strm)) = ImpIO.inputAll strm | inputAll'(ref(Direct(strm as {buffer, bufp, buflimit, descr, name, ...}))) = if !buflimit = 0 (* Last read returned an empty buffer. Clear the EOF state once we return this empty string. *) then (buflimit := ~1; "") else let val soFar = if !buflimit < 0 then "" else CharArraySlice.vector(CharArraySlice.slice(buffer, !bufp, SOME(!buflimit - !bufp))); (* Find out how much we have available and try reading a vector of that size. It may get less than the whole file so we have to keep trying. *) fun readAll() = let (* The call to sys_avail can raise an exception if the file is a special device e.g. in the /proc filing system on Linux. *) val charsAvailable = sys_avail descr handle exn => 0 (* If it's less than the blocksize get a block. This way we always get a reasonable amount if "avail" is giving us a small amount. *) val toRead = Int.max(charsAvailable, CharArray.length buffer) val readRest = sys_read_string(descr, toRead) handle exn => raise mapToIo(exn, name, "TextIO.inputAll") in if readRest = "" then [""] (* Reached eof. *) else readRest :: readAll() end (* Put it all together. *) val result = concat(soFar :: readAll()) in bufp := 0; (* The buffer is now empty. *) (* If we are returning a null string then we clear the eof indicator. *) if size result = 0 then buflimit := ~1 else buflimit := 0; (* We're at eof. *) result end in val inputAll = protect inputAll' end local fun canInput' n (ref(Underlying strm)) = ImpIO.canInput(strm, n) | canInput' n (ref(Direct{bufp, buflimit, descr, name, buffer, ...})) = if n < 0 orelse n > CharVector.maxLen then raise Size else let val available = if !buflimit < 0 then 0 else !buflimit - !bufp in if available >= n then SOME n (* Sufficient in the buffer. *) else if !buflimit = 0 then SOME 0 (* At EOF. *) else (* Try reading ahead. *) ( (* Copy the unused data so it is at the start of the buffer. *) if !bufp = 0 orelse !buflimit < 0 then () (* Nothing in the buffer. *) else if !bufp = !buflimit (* Nothing left in the buffer. *) then buflimit := ~1 else ( CharArraySlice.copy{src = CharArraySlice.slice(buffer, !bufp, SOME(!buflimit - !bufp)), dst = buffer, di = 0}; buflimit := !buflimit - !bufp ); bufp := 0; (* Try reading ahead into the rest of the buffer. *) if (sys_can_input descr > 0) handle exn => raise mapToIo(exn, name, "TextIO.canInput") then (* We can read ahead without blocking. How should we implement this? We are supposed to try reading ahead to see whether we actually have n bytes available. What if n-available > length buffer? The definition says that this should use readVecNB to try to read the rest. There's no guarantee that this will return more than the blocksize anyway. *) let val Array(length, addr) = buffer val inBuffer = if !buflimit < 0 then 0 else !buflimit; val inBuffW = Word.fromInt inBuffer val haveRead = sys_read_text(descr, (addr, inBuffW, length-inBuffW)) handle exn => raise mapToIo(exn, name, "TextIO.canInput") in buflimit := inBuffer + haveRead; SOME(Int.min(n, !buflimit)) end else if available = 0 then NONE (* Nothing in the buffer and can't read ahead. *) else SOME available (* Just what's in the buffer. *) ) end in fun canInput(r, n) = protect (canInput' n) r end local fun closeIn'(ref(Underlying strm)) = ImpIO.closeIn strm | closeIn'(strm as ref(Direct{descr, ...})) = ( (* Do we need to do something to get the right effect with getInstream? *) sys_close(descr) ) in val closeIn = protect closeIn' end local fun endOfStream'(ref(Underlying strm)) = ImpIO.endOfStream strm | endOfStream'(ref(Direct(strm as {buflimit, bufp, ...}))) = ( (* If we have never read before or we have exhausted the input we have to read now. *) if !bufp >= !buflimit andalso !buflimit <> 0 then fillBuffer strm else (); (* At eof if the buffer is now empty. *) !buflimit = 0 ) in val endOfStream = protect endOfStream' end local fun inputLine' (ref(Underlying strm)) = let val f = ImpIO.getInstream strm in case StreamIO.inputLine f of NONE => let (* It's not clear what should happen here. Assume that this clears any temporary EOF. *) val (s, f') = StreamIO.input f in ImpIO.setInstream(strm, f'); NONE end | SOME (s, f') => ( ImpIO.setInstream(strm, f'); SOME s ) end | inputLine' (ref(Direct(strm as {buflimit, buffer, bufp, ...}))) = if !buflimit = 0 then (buflimit := ~1; NONE) (* Already at EOF. *) else let fun newlinePos i = if i = !buflimit then !buflimit+1 else if CharArray.sub(buffer, i) = #"\n" then i+1 (* Return characters including newline. *) else newlinePos (i+1) fun readToNL haveRead = if ! buflimit = 0 then (* At EOF. The definition says that we should add a newline if the file doesn't end with one and only return NONE if we were already at EOF. *) if haveRead then ["\n"] else [""] else let val nlPos = newlinePos (!bufp) in if nlPos <= !buflimit then (* Newline in the buffer - extract up to it.*) let val resString = CharArraySlice.vector(CharArraySlice.slice(buffer, !bufp, SOME(nlPos - !bufp))) in bufp := nlPos; [resString] end else (* No newline in the buffer. *) let val resString = CharArraySlice.vector(CharArraySlice.slice(buffer, !bufp, SOME(!buflimit - !bufp))) in fillBuffer strm; resString :: readToNL true end end val _ = if !bufp >= !buflimit then fillBuffer strm else (); val result = concat(readToNL false) in if size result = 0 (* I think the effect of this is that we only clear a temporary EOF after we have returned NONE and not if we have returned a string with a newline appended. *) then ( buflimit := ~1; NONE ) else SOME result end in val inputLine = protect inputLine' end local fun lookahead' (ref(Underlying strm)) = ImpIO.lookahead strm | lookahead' (ref(Direct(strm as {buflimit, buffer, bufp, ...}))) = ( if !bufp >= ! buflimit andalso !buflimit <> 0 then fillBuffer strm else (); if !buflimit = 0 then NONE (* EOF *) else SOME(CharArray.sub(buffer, !bufp)) ) in val lookahead = protect lookahead' end fun outputSubstr(f, s) = StreamIO.outputSubstr(getOutstream f, s) fun print s = (output(stdOut, s); flushOut stdOut) (* Open a string as an input stream. It would be possible to define this using the string as the argument to mkInstream and a null reader. This way gives more flexibility since it allows for random access to the string. *) fun openString (s: string) : instream = let val stringLength = String.size s val posN = ref 0 (* We can read from the string until it is exhausted. *) fun readVec (len: int): vector = let val l = Int.min(len, stringLength - !posN) val v = String.substring(s, !posN, l) in posN := !posN + l; v end (* Closing it simply exhausts the input. *) fun close () : unit = (posN := stringLength) and avail () : int option = SOME(stringLength - ! posN) and readVecNB l = SOME(readVec l) and block () = () and canInput () = true and getPos () = !posN and setPos n = posN := n and endPos () = stringLength val textPrimRd = TextPrimIO.RD { name = "StringPrimIO", chunkSize = stringLength, (* Most efficient to read the whole string. *) readVec = SOME readVec, readArr = NONE, (* Can be synthesised. *) readVecNB = SOME readVecNB, readArrNB = NONE, (* Can be synthesised. *) block = SOME block, canInput = SOME canInput, avail = avail, getPos = SOME getPos, setPos = SOME setPos, endPos = SOME endPos, verifyPos = SOME getPos, close = close, ioDesc = NONE } val streamIo = StreamIO.mkInstream(textPrimRd, "") in InStream(ref(Underlying(ImpIO.mkInstream streamIo)), mutex()) end fun scanStream scanFn strm = let val f = getInstream strm in case (scanFn StreamIO.input1 f) of NONE => NONE | SOME(v, f') => ( setInstream(strm, f'); SOME v ) end end; (* Available unqualified at top-level. *) val print = TextIO.print; polyml.5.2.1/basis/TextPrimIO.sml0000644000175000017500000000342410313043327015615 0ustar daviddavid(* Title: Standard Basis Library: Primitive Text IO Copyright David C.J. Matthews 2000 This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* QUESTION: What is the relationship between TextPrimIO and TextIO? Is TextIO.StreamIO.reader supposed to be the same as TextPrimIO.reader and similarly for writer? Assume yes. Yes, in G&R these are explicit*) structure TextPrimIO :> sig include PRIM_IO where type vector = CharVector.vector where type elem = Char.char where type array = CharArray.array where type pos = Position.int where type vector_slice = CharVectorSlice.slice where type array_slice = CharArraySlice.slice end = PrimIO ( structure Array = CharArray structure Vector = CharVector structure ArraySlice = CharArraySlice structure VectorSlice = CharVectorSlice val someElem : Array.elem = #" " (* Initialise to spaces. *) (* BinPrimIO.pos is defined to be Position.int. TextPrimIO.pos may be abstract. It's very convenient to be able to build additional readers and that requires pos to be non-abstract. *) type pos = Position.int val compare = Position.compare ); polyml.5.2.1/basis/Thread.sml0000644000175000017500000007103110772160402015022 0ustar daviddavid(* Title: Thread package for ML. Author: David C. J. Matthews Copyright (c) 2007 This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* This signature and structure are not part of the standard basis library but are included here because they depend on the Time structure and are in turn dependencies of the BasicIO structure. *) signature THREAD = sig exception Thread of string (* Raised if an operation fails. *) structure Thread: sig type thread; (* Thread attributes - This may be extended. *) datatype threadAttribute = (* Does this thread accept a broadcast interrupt? The default is not to accept broadcast interrupts. *) EnableBroadcastInterrupt of bool (* How to handle interrupts. The default is to handle interrupts synchronously. *) | InterruptState of interruptState and interruptState = InterruptDefer (* Defer any interrupts. *) | InterruptSynch (* Interrupts are delivered synchronously. An interrupt will be delayed until an interruption point. An interruption point is one of: testInterrupt, ConditionVar.wait, ConditionVar.waitUntil and various library calls that may block, such as IO calls, pause etc. N.B. Mutex.lock is not an interruption point even though it can result in a thread blocking for an indefinite period. *) | InterruptAsynch (* Interrupts are delivered asynchronously i.e. at a suitable point soon after they are triggered. *) | InterruptAsynchOnce (* As InterruptAsynch except that only a single interrupt is delivered asynchronously after which the interrupt state is changed to InterruptSynch. It allows a thread to tidy up and if necessary indicate that it has been interrupted without the risk of a second asynchronous interrupt occurring in the handler for the first interrupt. *) (* fork: Fork a thread. Starts a new thread running the function argument. The attribute list gives initial values for thread attributes which can be modified by the thread itself. Any unspecified attributes take default values. The thread is terminated when the thread function returns, if it raises an uncaught exception or if it calls "exit". *) val fork: (unit->unit) * threadAttribute list -> thread (* exit: Terminate this thread. *) val exit: unit -> unit (* isActive: Test if a thread is still running or has terminated. *) val isActive: thread -> bool (* Test whether thread ids are the same. *) val equal: thread * thread -> bool (* Get my own ID. *) val self: unit -> thread exception Interrupt (* = SML90.Interrupt *) (* Send an Interrupt exception to a specific thread. When and indeed whether the exception is actually delivered will depend on the interrupt state of the target thread. Raises Thread if the thread is no longer running, so an exception handler should be used unless the thread is known to be blocked. *) val interrupt: thread -> unit (* Send an interrupt exception to every thread which is set to accept it. *) val broadcastInterrupt: unit -> unit (* If this thread is handling interrupts synchronously, test to see if it has been interrupted. If so it raises the Interrupt exception. *) val testInterrupt: unit -> unit (* Terminate a thread. This should be used as a last resort. Normally a thread should be allowed to clean up and terminate by using the interrupt call. Raises Thread if the thread is no longer running, so an exception handler should be used unless the thread is known to be blocked. *) val kill: thread -> unit (* Get and set thread-local store for the calling thread. The store is a tagged associative memory which is initially empty for a new thread. A thread can call setLocal to add or replace items in its store and call getLocal to return values if they exist. The Universal structure contains functions to make new tags as well as injection, projection and test functions. *) val getLocal: 'a Universal.tag -> 'a option val setLocal: 'a Universal.tag * 'a -> unit (* Change the specified attribute(s) for the calling thread. Unspecified attributes remain unchanged. *) val setAttributes: threadAttribute list -> unit (* Get the values of attributes. *) val getAttributes: unit -> threadAttribute list (* Return the number of processors that will be used to run threads. *) val numProcessors: unit -> int end structure Mutex: sig (* Mutexes. A mutex provides simple mutual exclusion. A thread can lock a mutex and until it unlocks it no other thread will be able to lock it. Locking and unlocking are intended to be fast in the situation when there is no other process attempting to lock the mutex. *) type mutex (* mutex: Make a new mutex *) val mutex: unit -> mutex (* lock: Lock a mutex. If the mutex is currently locked the thread is blocked until it is unlocked. If a thread tries to lock a mutex that it has previously locked the thread will deadlock. N.B. "lock" is not an interruption point (a point where synchronous interrupts are delivered) even though a thread can be blocked indefinitely. *) val lock: mutex -> unit (* unlock: Unlock a mutex and allow any waiting threads to run. The behaviour if the mutex was not previously locked by the calling thread is undefined. *) val unlock: mutex -> unit (* trylock: Attempt to lock the mutex. Returns true if the mutex was not previously locked and has now been locked by the calling thread. Returns false if the mutex was previously locked, including by the calling thread. *) val trylock: mutex -> bool (* These functions may not work correctly if an asynchronous interrupt is delivered during the calls. A thread should use synchronous interrupt when using these calls. *) end structure ConditionVar: sig (* Condition variables. Condition variables are used to provide communication between threads. A condition variable is used in conjunction with a mutex and usually a reference to establish and test changes in state. The normal use is for one thread to lock a mutex, test the reference and then wait on the condition variable, releasing the lock on the mutex while it does so. Another thread may then lock the mutex, update the reference, unlock the mutex, and signal the condition variable. This wakes up the first thread and reacquires the lock allowing the thread to test the updated reference with the lock held. More complex communication mechanisms, such as blocking channels, can be written in terms of condition variables. *) type conditionVar (* conditionVar: Make a new condition variable. *) val conditionVar: unit -> conditionVar (* wait: Release the mutex and block until the condition variable is signalled. When wait returns the mutex has been re-acquired. If thread is deferring interrupts a call to "wait" may cause an Interrupt exception to be delivered. (The implementation must ensure that if an Interrupt is delivered as well as signal waking up a single thread that the interrupted thread does not consume the "signal".) The mutex is (re)acquired before Interrupt is delivered. *) val wait: conditionVar * Mutex.mutex -> unit (* waitUntil: As wait except that it blocks until either the condition variable is signalled or the time (absolute) is reached. Either way the mutex is reacquired so there may be a further delay if it is held by another thread. *) val waitUntil: conditionVar * Mutex.mutex * Time.time -> bool (* signal: Wake up one thread if any are waiting on the condition variable. *) val signal: conditionVar -> unit (* broadcast: Wake up all threads waiting on the condition variable. *) val broadcast: conditionVar -> unit end end; structure Thread :> THREAD = struct open RuntimeCalls (* for POLY_SYS and EXC numbers *) local structure ThreadEx = RunCall.Run_exception1(type ex_type = string; val ex_iden = EXC_thread) in exception Thread = ThreadEx.ex end local (* Create non-overwritable mutables for mutexes and condition variables. A non-overwritable mutable in the executable or a saved state is not overwritten when a saved state further down the hierarchy is loaded. *) val F_non_overwrite_mutable : word = 0wx48; val System_alloc: word*word*word->word = RunCall.run_call3 POLY_SYS_alloc_store in fun nvref (a: 'a) : 'a ref = RunCall.unsafeCast(System_alloc(0w1, 0wx48, RunCall.unsafeCast a)) end structure Thread = struct datatype threadAttribute = EnableBroadcastInterrupt of bool | InterruptState of interruptState and interruptState = InterruptDefer | InterruptSynch | InterruptAsynch | InterruptAsynchOnce (* Convert attributes to bits and a mask. *) fun attrsToWord (at: threadAttribute list): Word.word * Word.word = let (* Check that a particular attribute appears only once. As well as accumulating the actual bits in the result we also accumulate the mask of bits. If any of these reappear we raise an exception. *) fun checkRepeat(r, acc, set, mask) = if Word.andb(set, mask) <> 0w0 then raise Thread "The same attribute appears more than once in the list" else convert(r, acc, Word.orb(set, mask)) and convert([], acc, set) = (acc, set) | convert(EnableBroadcastInterrupt true :: r, acc, set) = checkRepeat(r, Word.orb(acc, 0w1), set, 0w1) | convert(EnableBroadcastInterrupt false :: r, acc, set) = checkRepeat(r, acc (* No bit *), set, 0w1) | convert(InterruptState s :: r, acc, set) = checkRepeat(r, Word.orb(setIstateBits s, acc), set, 0w6) in convert(at, 0w0, 0w0) end and setIstateBits InterruptDefer = 0w0 | setIstateBits InterruptSynch = 0w2 | setIstateBits InterruptAsynch = 0w4 | setIstateBits InterruptAsynchOnce = 0w6 fun getIstateBits(w: Word.word): interruptState = let val ibits = Word.andb(w, 0w6) in if ibits = 0w0 then InterruptDefer else if ibits = 0w2 then InterruptSynch else if ibits = 0w4 then InterruptAsynch else InterruptAsynchOnce end fun wordToAttrs w = let (* Enable broadcast - true if bottom bit is set. *) val bcast = EnableBroadcastInterrupt(Word.andb(w, 0w1) = 0w1) in [bcast, InterruptState(getIstateBits w)] end local structure Interrupt = RunCall.Run_exception0( val ex_iden = RuntimeCalls.EXC_interrupt ) in exception Interrupt = Interrupt.ex end (* The thread id is opaque outside this structure but is actually a three word mutable object. Word 0: Index into thread table (used inside the RTS only) Word 1: Flags: initialised by the RTS and set by this code Word 2: Thread local store: read and set by this code. *) type thread = Word.word ref (* Actually this is a four word mutable object. *) (* Equality is pointer equality. *) val equal : thread*thread->bool = RunCall.run_call2 POLY_SYS_word_eq (* Return our own thread object. *) val self: unit->thread = RunCall.run_call0 POLY_SYS_thread_self fun getLocal (t: 'a Universal.tag) : 'a option = let val root: Universal.universal ref list = RunCall.run_call2 POLY_SYS_load_word(self(), 2) fun doFind [] = NONE | doFind ((ref v)::r) = if Universal.tagIs t v then SOME(Universal.tagProject t v) else doFind r in doFind root end fun setLocal (t: 'a Universal.tag, newVal: 'a) : unit = let (* See if we already have this in the list. *) val root: Universal.universal ref list = RunCall.run_call2 POLY_SYS_load_word(self(), 2) fun doFind [] = (* Not in the list - Add it. *) RunCall.run_call3 POLY_SYS_assign_word (self(), 2, ref (Universal.tagInject t newVal) :: root) | doFind (v::r) = if Universal.tagIs t (!v) (* If it's in the list update it. *) then v := Universal.tagInject t newVal else doFind r in doFind root end local val doCall: int*unit->unit = RunCall.run_call2 POLY_SYS_thread_dispatch in fun testInterrupt() = (* If there is a pending request the word in the thread object will be non-zero. *) if RunCall.run_call2 POLY_SYS_load_word(self(), 3) <> 0 then doCall(11, ()) else () end local fun getAttrWord () : Word.word = RunCall.run_call2 POLY_SYS_load_word(self(), 1) in (* Set attributes. Only changes the values that are specified. The others remain the same. *) fun setAttributes (attrs: threadAttribute list) : unit = let val oldValues: Word.word = getAttrWord () val (newValue, mask) = attrsToWord attrs in RunCall.run_call3 POLY_SYS_assign_word (self(), 1, Word.orb(newValue, Word.andb(Word.notb mask, oldValues))); (* If we are now handling interrupts asynchronously check whether we have a pending interrupt now. This will only be effective if we were previously handling them synchronously or *) if Word.andb(newValue, 0w4) = 0w4 then testInterrupt() else () end fun getAttributes() : threadAttribute list = wordToAttrs(getAttrWord()) (* These are used in the ConditionVar structure. They affect only the interrupt handling bits. *) fun getInterruptState(): interruptState = getIstateBits(getAttrWord()) and setInterruptState(s: interruptState): unit = RunCall.run_call3 POLY_SYS_assign_word (self(), 1, Word.orb(setIstateBits s, Word.andb(Word.notb 0w6, getAttrWord ()))) end val exit: unit -> unit = RunCall.run_call0 POLY_SYS_kill_self local (* The default for a new thread is to ignore broadcasts and handle explicit interrupts synchronously. *) val (defaultAttrs, _) = attrsToWord[EnableBroadcastInterrupt false, InterruptState InterruptSynch] val doCall = RunCall.run_call2 POLY_SYS_thread_dispatch in fun fork(f:unit->unit, attrs: threadAttribute list): thread = let (* Any attributes specified explicitly override the defaults. *) val (attrWord, mask) = attrsToWord attrs val attrValue = Word.orb(attrWord, Word.andb(Word.notb mask, defaultAttrs)) in doCall(7, (f, attrValue)) end end local val doCall: int*thread->bool = RunCall.run_call2 POLY_SYS_thread_dispatch in fun isActive(t: thread): bool = doCall(8, t) end local val doCall: int*unit->unit = RunCall.run_call2 POLY_SYS_thread_dispatch in fun broadcastInterrupt() = doCall(10, ()) end local val doCall: int*thread->unit = RunCall.run_call2 POLY_SYS_thread_dispatch in fun kill(t: thread) = doCall(12, t) and interrupt(t: thread) = doCall(9, t) end local val doCall = RunCall.run_call2 POLY_SYS_thread_dispatch in fun numProcessors():int = doCall(13, 0) end end structure Mutex = struct type mutex = Word.word ref fun mutex() = nvref 0w1; (* Initially unlocked. *) val atomicIncr: Word.word ref -> Word.word = RunCall.run_call1 POLY_SYS_atomic_incr and atomicDecr: Word.word ref -> Word.word = RunCall.run_call1 POLY_SYS_atomic_decr val doCall: int * mutex -> unit = RunCall.run_call2 POLY_SYS_thread_dispatch (* A mutex is implemented as a Word.word ref. It is initially set to 1 and locked by atomically decrementing it. If it was previously unlocked the result will by zero but if it was already locked it will be some negative value. When it is unlocked it is atomically incremented. If there was no contention the result will again be 1 but if some other thread tried to lock it the result will be zero or negative. In that case the unlocking thread needs to call in to the RTS to wake up the blocked thread. The cost of contention on the lock is very high. To try to avoid this we first loop (spin) to see if we can get the lock without contention. *) val spin_cycle = 20000 fun spin (m: mutex, c: int) = if ! m = 0w1 then () else if c = spin_cycle then () else spin(m, c+1); fun lock (m: mutex): unit = let val () = spin(m, 0) val newValue = atomicDecr m in if newValue = 0w0 then () (* We've acquired the lock. *) else (* It's locked. We return when we have the lock. *) ( doCall(1, m); lock m (* Try again. *) ) end fun unlock (m: mutex): unit = let val newValue = atomicIncr m in if newValue = 0w1 then () (* No contention. *) else (* Another thread has blocked and we have to release it. We can safely set the value to 1 here to release the lock. If another thread acquires it before we have woken up the other threads that's fine. Equally, if another thread decremented the count and saw it was still locked it will enter the RTS and try to acquire the lock there. *) ( m := 0w1; doCall(2, m) ) end (* Try to lock the mutex. If it was previously unlocked then lock it and return true otherwise return false. Because we don't block here there is the possibility that the thread that has locked it could release the lock shortly afterwards. The check for !m = 0w1 is an optimisation and nearly all the time it avoids the call to atomicDecr setting m to a negative value. There is a small chance that another thread could lock the mutex between the test for !m = 0w1 and the atomicDecr. In that case the atomicDecr would return a negative value and the function that locked the mutex will have to call into the RTS to reset it when it is unlocked. *) fun trylock (m: mutex): bool = if !m = 0w1 andalso atomicDecr m = 0w0 then true (* We've acquired the lock. *) else false (* The lock was taken. *) end structure ConditionVar = struct open Thread (* A condition variable contains a lock and a list of suspended threads. *) type conditionVar = { lock: Mutex.mutex, threads: thread list ref } fun conditionVar(): conditionVar = { lock = Mutex.mutex(), threads = nvref nil } (* To avoid duplicating the code we use zero to represent an infinite wait. Since that's a valid time in the past we check that it isn't used in waitUntil before doing anything else. *) val infinity = Time.zeroTime; local val doCall = RunCall.run_call2 POLY_SYS_thread_dispatch fun Sleep(mt: Mutex.mutex * Time.time): unit = doCall(3, mt) in fun innerWait({lock, threads}: conditionVar, m: Mutex.mutex, t: Time.time) : bool = let val me = self() (* My thread id. *) fun waitAgain() = let fun doFind [] = false | doFind(h::t) = equal(h, me) orelse doFind t fun removeThis [] = raise Fail "Thread missing in list" | removeThis (h::t) = if equal(h, me) then t else h :: removeThis t val () = Sleep(lock, t) (* Atomically release the lock and wait. *) val () = Mutex.lock lock (* Get the lock again. *) (* Are we still on the list? If so we haven't been explicitly woken up. We've either timed out, been interrupted or simply returned because the RTS needed to process some asynchronous results. *) val stillThere = doFind(!threads) in if not stillThere then (* We're done. *) ( Mutex.unlock lock; true ) else if t <> infinity andalso Time.now() >= t then (* We've timed out. *) ( threads := removeThis(! threads); Mutex.unlock lock; false ) else ( (* See if we've been interrupted. If so remove ourselves and exit. *) testInterrupt() handle exn => (threads := removeThis(! threads); Mutex.unlock lock; raise exn); (* Otherwise just keep waiting. *) waitAgain() ) end in Mutex.lock lock; (* Lock the internal mutex. *) Mutex.unlock m; (* Unlock the external mutex *) threads := me :: !threads; (* Add ourselves to the list. *) waitAgain() (* Wait and return the result when we're done. *) end fun doWait(c: conditionVar, m: Mutex.mutex, t: Time.time) : bool = let val originalIntstate = getInterruptState() (* Set this to handle interrupts synchronously unless we're already ignoring them. *) val () = if originalIntstate = InterruptDefer then () else setInterruptState InterruptSynch; (* Wait for the condition. If it raises an exception we still need to reacquire the lock unless we were handling interrupts asynchronously. *) val result = innerWait(c, m, t) handle exn => ( (* We had an exception. If we were handling exceptions synchronously we reacquire the lock. If it was set to InterruptAsynchOnce this counts as a single asynchronous exception and we restore the state as InterruptSynch. *) case originalIntstate of InterruptDefer => (* Shouldn't happen? *) Mutex.lock m | InterruptSynch => Mutex.lock m | InterruptAsynch => setInterruptState InterruptAsynch | InterruptAsynchOnce => setInterruptState InterruptSynch; raise exn (* Reraise the exception*) ) in (* Restore the original interrupt state first. *) setInterruptState originalIntstate; (* Normal return. Reacquire the lock before returning. *) Mutex.lock m; result end fun wait(c: conditionVar, m: Mutex.mutex) : unit = (doWait(c, m, infinity); ()) and waitUntil(c: conditionVar, m: Mutex.mutex, t: Time.time) : bool = if t = infinity then false (* This has already happened. *) else doWait(c, m, t) end local val doCall = RunCall.run_call2 POLY_SYS_thread_dispatch (* This call wakes up the specified thread. If the thread has already been interrupted and is not ignoring interrupts it returns false. Otherwise it wakes up the thread and returns true. We have to use this because we define that if a thread is interrupted before it is signalled then it raises Interrupt. *) fun doWake(t: thread): bool = doCall(4, t) (* Wake a single thread if we can (signal). *) fun wakeOne [] = [] | wakeOne (thread::rest) = if doWake thread then rest else thread :: wakeOne rest (* Wake all threads (broadcast). *) fun wakeAll [] = [] (* Always returns the empty list. *) | wakeAll (thread::rest) = (doWake thread; wakeAll rest) fun signalOrBroadcast({lock, threads}: conditionVar, wakeThreads) : unit = let val originalState = getInterruptState() in (* Set this to handle interrupts synchronously unless we're already ignoring them. We need to do this to avoid an asynchronous interrupt which could leave the internal lock in an inconsistent state. *) if originalState = InterruptDefer then () else setInterruptState InterruptSynch; (* Get the condition var lock. *) Mutex.lock lock; threads := wakeThreads(! threads); Mutex.unlock lock; setInterruptState originalState; (* Restore original state. *) (* Test if we were interrupted while we were handling interrupts synchronously. *) if originalState = InterruptAsynch orelse originalState = InterruptAsynchOnce then testInterrupt() else () end in fun signal cv = signalOrBroadcast(cv, wakeOne) and broadcast cv = signalOrBroadcast(cv, wakeAll) end end end; polyml.5.2.1/basis/Time.sml0000644000175000017500000001621110766427211014517 0ustar daviddavid(* Title: Standard Basis Library: Time Signature and structure. Author: David Matthews Copyright David Matthews 2000, 2005 This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* G&R 2004 status: updated. *) signature TIME = sig eqtype time exception Time val zeroTime : time val fromReal : LargeReal.real -> time val toReal : time -> LargeReal.real val toSeconds : time -> LargeInt.int val toMilliseconds : time -> LargeInt.int val toMicroseconds : time -> LargeInt.int val toNanoseconds : time -> LargeInt.int val fromSeconds : LargeInt.int -> time val fromMilliseconds : LargeInt.int -> time val fromMicroseconds : LargeInt.int -> time val fromNanoseconds : LargeInt.int -> time val + : time * time -> time val - : time * time -> time val compare : time * time -> General.order val < : time * time -> bool val <= : time * time -> bool val > : time * time -> bool val >= : time * time -> bool val now : unit -> time val fmt : int -> time -> string val toString : time -> string val fromString : string -> time option val scan : (char, 'a) StringCvt.reader -> (time, 'a) StringCvt.reader end; structure Time :> TIME = struct (* Unix and Windows both use 64 bit quantities for times. Windows uses a 64-bit number of 100ns ticks, Unix uses one word of seconds and another of microseconds. To handle both easily we use a single arbitrary precision number for times with the actual resolution returned as an RTS call. The intention is retain as much precision as possible. *) type time = int (* Becomes abstract *) exception Time open RuntimeCalls val doTiming: int*int->int = RunCall.run_call2 POLY_SYS_timing_dispatch fun callTiming (code: int) args = doTiming (code,args); (* Get the number of ticks per microsecond and compute the corresponding values for milliseconds and seconds. *) val ticksPerMicrosecond = callTiming 0 0 val ticksPerMillisecond = ticksPerMicrosecond * 1000 val ticksPerSecond = ticksPerMillisecond * 1000 (* Check for very large time values. These cause problems if converted to dates. *) local val Years100000 = ticksPerSecond*60*60*24*365*100000 in fun checkTimeValue t = if t < ~ Years100000 orelse t > Years100000 then raise Time else t end; (* The real representation is as a number of seconds. *) local val realTicks = Real.fromInt ticksPerSecond in fun fromReal (x: real): time = checkTimeValue(Real.round (x * realTicks)) and toReal (t: time): real = Real.fromInt t / realTicks end val zeroTime = fromReal 0.0 (* Convert to seconds, etc.*) fun toSeconds x = x div ticksPerSecond and toMilliseconds x = x div ticksPerMillisecond and toMicroseconds x = x div ticksPerMicrosecond and toNanoseconds x = x * 1000 div ticksPerMicrosecond (* Convert from the integer representations. *) fun fromSeconds i = checkTimeValue(i * ticksPerSecond) and fromMilliseconds i = checkTimeValue(i * ticksPerMillisecond) and fromMicroseconds i = checkTimeValue(i * ticksPerMicrosecond) and fromNanoseconds i = checkTimeValue(i * ticksPerMicrosecond div 1000) (* Format as a fixed precision number. if n < 0 treat as n = 0. *) fun fmt n r = Real.fmt (StringCvt.FIX(SOME(Int.max(n, 0)))) (toReal r) val toString = fmt 3 (* The scanned string is a subset of the format of a real number. It does not have an exponent. At present we convert it as a real number but it would probably be better to treat it as an integer. *) fun scan getc src = let (* Return a list of digits. *) fun getdigits inp src = case getc src of NONE => (List.rev inp, src) | SOME(ch, src') => if ch >= #"0" andalso ch <= #"9" then getdigits ((Char.ord ch - Char.ord #"0") :: inp) src' else (List.rev inp, src) fun read_number sign src = case getc src of NONE => NONE | SOME(ch, src') => if not (ch >= #"0" andalso ch <= #"9" orelse ch = #".") then NONE (* Bad "*) else (* Digits or decimal. *) let (* Get the digits before the decimal point (if any) *) val (intPart, src'') = getdigits [] src (* Get the digits after the decimal point (if any). If there is a decimal point we swallow the decimal only if there is at least one digit after it. *) val (decPart, srcAfterMant) = case getc src'' of SOME (#".", src''') => ( (* Check that the next character is a digit. *) case getc src''' of NONE => ([], src'') | SOME(ch, _) => if ch >= #"0" andalso ch <= #"9" then getdigits [] src''' else ([], src'') ) | _ => ([], src'') in case (intPart, decPart) of ([], []) => NONE (* Must have a digit either before or after the dp. *) | _ => let (* Get exactly 9 digits after the decimal point. *) val decs = intPart @ (List.take(decPart @ [ 0, 0, 0, 0, 0, 0, 0, 0, 0 ], 9)); (* It's now in nanoseconds. *) val toInt = List.foldl (fn (i, j) => i + j*10) 0 decs in SOME(fromNanoseconds(if sign then ~toInt else toInt), srcAfterMant) end end in case getc src of NONE => NONE | SOME(ch, src') => if Char.isSpace ch (* Skip white space. *) then scan getc src' (* Recurse *) else if ch = #"+" (* Remove the + sign *) then read_number false src' else if ch = #"-" orelse ch = #"~" then read_number true src' else (* See if it's a valid digit or decimal point. *) read_number false src end val fromString = StringCvt.scanString scan (* Use the integer operations for these. *) val op < : (time * time) -> bool = Int.< val op <= : (time * time) -> bool = Int.<= val op > : (time * time) -> bool = Int.> val op >= : (time * time) -> bool = Int.>=; val compare = Int.compare val op + : (time * time) -> time = Int.+ val op - : (time * time) -> time = Int.- fun now () = callTiming 1 0 handle _ => raise Time end; local (* Install the pretty printer for Time.time. This has to be done outside the structure because of the opaque matching. *) fun pretty(p, _, _, _) _ _ x = p(Time.toString x) in val it = PolyML.install_pp pretty (* Add overloads for +, -, <= etc *) val it = RunCall.addOverload Time.+ "+"; val it = RunCall.addOverload Time.- "-"; val it = RunCall.addOverload Time.< "<"; val it = RunCall.addOverload Time.> ">"; val it = RunCall.addOverload Time.<= "<="; val it = RunCall.addOverload Time.>= ">="; end polyml.5.2.1/basis/Timer.sml0000644000175000017500000000541710755557025014714 0ustar daviddavid(* Title: Standard Basis Library: Timer Signature and structure. Author: David Matthews Copyright David Matthews 2000, 2005, 2008 This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* G&R 2004 status: updated. Added checkCPUTimes. *) signature TIMER = sig type cpu_timer type real_timer val startCPUTimer : unit -> cpu_timer val checkCPUTimer : cpu_timer -> {usr : Time.time, sys : Time.time} val checkGCTime : cpu_timer -> Time.time val totalCPUTimer : unit -> cpu_timer val startRealTimer : unit -> real_timer val checkRealTimer : real_timer -> Time.time val totalRealTimer : unit -> real_timer val checkCPUTimes : cpu_timer -> { nongc: { usr : Time.time, sys : Time.time}, gc: { usr : Time.time, sys : Time.time} } end structure Timer :> TIMER = struct type cpu_timer = {userTime: Time.time, sysTime: Time.time, gcUTime: Time.time, gcSTime: Time.time } type real_timer = Time.time local val doCall: int*unit -> Time.time = RunCall.run_call2 RuntimeCalls.POLY_SYS_timing_dispatch fun getUserTime() = doCall(7, ()) and getSysTime() = doCall(8, ()) and getGCUTime() = doCall(9, ()) and getGCSTime() = doCall(13, ()) in fun startCPUTimer () = {userTime=getUserTime(), sysTime=getSysTime(), gcUTime=getGCUTime(), gcSTime=getGCSTime() } and checkCPUTimer ({ userTime, sysTime, ...}: cpu_timer) = { usr = getUserTime() - userTime, sys = getSysTime() - sysTime} and checkGCTime ({ gcUTime, ...}: cpu_timer) = getGCUTime() - gcUTime and totalCPUTimer () = { userTime=Time.zeroTime, sysTime=Time.zeroTime, gcUTime=Time.zeroTime, gcSTime=Time.zeroTime } fun checkCPUTimes (timer as { userTime, sysTime, gcUTime, gcSTime }) = let val { usr, sys } = checkCPUTimer timer val gc_usr = getGCUTime() - gcUTime and gc_sys = getGCSTime() - gcSTime in { gc = { usr = gc_usr, sys = gc_sys }, nongc = { usr = usr-gc_usr, sys = sys-gc_sys } } end fun totalRealTimer() = Time.zeroTime and startRealTimer() = doCall(10, ()) and checkRealTimer t = startRealTimer() - t end end; polyml.5.2.1/basis/Universal.ML0000644000175000017500000000470010766427621015313 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure Universal :> sig type universal type 'a tag val tag : unit -> 'a tag val tagIs : 'a tag -> universal -> bool val tagInject : 'a tag -> 'a -> universal val tagProject : 'a tag -> universal -> 'a end = struct (* The universal type is based on exn which provides a tagged union. We use opaque signature matching to create a different type. *) type universal = exn type 'a tag = { is: universal -> bool, inject: 'a -> universal, project: universal -> 'a }; (* The Match exception is created in the General structure in the basis library which hasn't been built yet. *) local structure Match = RunCall.Run_exception0( val ex_iden = RuntimeCalls.EXC_Match ) in exception Match = Match.ex end fun tag () : 'a tag = let exception E of 'a; in { inject = fn x => E x, project = fn E x => x | _ => raise Match, is = fn E x => true | _ => false } end ; val tagIs : 'a tag -> universal -> bool = #is val tagInject : 'a tag -> 'a -> universal = #inject val tagProject : 'a tag -> universal -> 'a = #project end; (* This code will test the above structure datatype t = T of int ; datatype x = X of string ; val {is=ist,inject=injectT:t->universal,project=projectT} = tag(); val {is=isx,inject=injectX:x->universal,project=projectX} = tag(); val a = injectT (T 42) ; val b = injectT (T 24) ; val c = injectX (X "hello") ; val d = injectX (X "mike") ; map ist [a,b,c,d] ; map isx [a,b,c,d] ; projectT a ; projectT b ; projectT c ; projectT d ; projectX a ; projectX b ; projectX c ; projectX d ; *) polyml.5.2.1/basis/UniversalArray.ML0000644000175000017500000000531210766427710016311 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited Modified David C.J. Matthews 2008 This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure UniversalArray :> sig type universal = Universal.universal; type 'a tag = 'a Universal.tag; type univArray; val univArray: int -> univArray; val update: univArray * 'a tag * string * 'a -> unit; val sub: univArray * 'a tag * string -> 'a option; val delete: univArray * 'a tag * string -> unit; val fold: (string * universal * 'a -> 'a) -> 'a -> univArray-> 'a; end = struct open HashArray; open Universal; type universal = universal type 'a tag = 'a tag; datatype univArray = Table of universal list hash fun univArray n = Table (hash n); fun op sub (Table tab, t:'a tag, name:string) : 'a option = let fun search [] = NONE | search (H::T) = if tagIs t H then SOME (tagProject t H) else search T; in case HashArray.sub (tab, name) of NONE => NONE | SOME t => search t end; fun update (Table tab, t:'a tag, name:string, v:'a) : unit = let val u = tagInject t v; (* If there is already an entry we add it to the list, otherwise we start a new list. *) fun search [] = [u] | search (H::T) = if tagIs t H then u :: T else H :: search T; val newList = case HashArray.sub (tab, name) of SOME v => search v | NONE => [u] in HashArray.update (tab, name, newList) end; fun delete (Table tab, t:'a tag, name:string) : unit = let fun search [] = [] | search (H::T) = if tagIs t H then T else H :: search T; in case HashArray.sub (tab, name) of SOME l => HashArray.update (tab, name, search l) | NONE => () end; fun fold f init (Table t) = HashArray.fold (fn (s, l, i) => List.foldl (fn (x,y) => f(s, x, y)) i l) init t end (* UniversalArray *); polyml.5.2.1/basis/Unix.sml0000644000175000017500000002134011014534502014530 0ustar daviddavid(* Title: Standard Basis Library: Unix structure and signature. Author: David Matthews Copyright David Matthews 2000,2008 This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) signature UNIX = sig type ('a,'b) proc type signal datatype exit_status = W_EXITED | W_EXITSTATUS of Word8.word | W_SIGNALED (* sic *) of signal | W_STOPPED of signal val fromStatus : OS.Process.status -> exit_status val executeInEnv : string * string list * string list -> ('a, 'b) proc val execute : string * string list -> ('a, 'b) proc val textInstreamOf : (TextIO.instream, 'a) proc -> TextIO.instream val binInstreamOf : (BinIO.instream, 'a) proc -> BinIO.instream val textOutstreamOf : ('a, TextIO.outstream) proc -> TextIO.outstream val binOutstreamOf : ('a, BinIO.outstream) proc -> BinIO.outstream val streamsOf : (TextIO.instream, TextIO.outstream) proc -> TextIO.instream * TextIO.outstream val reap : ('a, 'b) proc -> OS.Process.status val kill : ('a, 'b) proc * signal -> unit val exit : Word8.word -> 'a end; structure Unix :> sig (* We have to copy the signature since we can't establish the connection between exit_status and Posix.Process.exit_status with a "where type". *) type ('a,'b) proc type signal = Posix.Signal.signal datatype exit_status = datatype Posix.Process.exit_status val fromStatus : OS.Process.status -> exit_status val executeInEnv : string * string list * string list -> ('a, 'b) proc val execute : string * string list -> ('a, 'b) proc val textInstreamOf : (TextIO.instream, 'a) proc -> TextIO.instream val binInstreamOf : (BinIO.instream, 'a) proc -> BinIO.instream val textOutstreamOf : ('a, TextIO.outstream) proc -> TextIO.outstream val binOutstreamOf : ('a, BinIO.outstream) proc -> BinIO.outstream val streamsOf : (TextIO.instream, TextIO.outstream) proc -> TextIO.instream * TextIO.outstream val reap : ('a, 'b) proc -> OS.Process.status val kill : ('a, 'b) proc * signal -> unit val exit : Word8.word -> 'a end = struct type ('a,'b) proc = { pid: Posix.Process.pid, infd: Posix.IO.file_desc, outfd: Posix.IO.file_desc, (* We have to remember the result status. *) result: OS.Process.status option ref } type signal = Posix.Signal.signal datatype exit_status = datatype Posix.Process.exit_status val fromStatus = Posix.Process.fromStatus fun kill({pid, ... }: ('a, 'b) proc, signal) = Posix.Process.kill(Posix.Process.K_PROC pid, signal) (* Create a new process running a command and with pipes connecting the standard input and output. The command is supposed to be an executable and we should raise an exception if it is not. Since the exece is only done in the child we need to test whether we have an executable at the beginning. The definition does not say whether the first of the user-supplied arguments includes the command or not. Assume that only the "real" arguments are provided and pass the last component of the command name in the exece call. *) fun executeInEnv (cmd, args, env) = let open Posix (* Test first for presence of the file and then that we have correct access rights. *) val s = FileSys.stat cmd handle OS.SysErr(_, e) => raise OS.SysErr("File does not exist", e) val () = if not (FileSys.ST.isReg s) orelse not (FileSys.access(cmd, [FileSys.A_EXEC])) then raise OS.SysErr("Cannot execute file", SOME Error.acces) else () val toChild = IO.pipe() and fromChild = IO.pipe() in case Process.fork() of NONE => (* In the child *) (( (* Should really clean up the signals here and turn off timers. *) (* Close the unwanted ends of the pipes and set the required ends up as stdin and stdout. *) IO.close(#outfd toChild); IO.close(#infd fromChild); IO.dup2{old= #infd toChild, new=FileSys.wordToFD 0w0}; IO.dup2{old= #outfd fromChild, new= FileSys.wordToFD 0w1}; IO.close(#infd toChild); IO.close(#outfd fromChild); (* Run the command. *) Process.exece(cmd, OS.Path.file cmd :: args, env); (* If we get here the exec must have failed - terminate this process. We're supposed to set the error code to 126 in this case. *) Process.exit 0w126 ) handle _ => Process.exit 0w126) | SOME pid => (* In the parent *) ( IO.close(#infd toChild); IO.close(#outfd fromChild); {pid=pid, infd= #infd fromChild, outfd= #outfd toChild, result = ref NONE} ) end fun execute (cmd, args) = executeInEnv(cmd, args, Posix.ProcEnv.environ()) local (* Internal function to get the preferred buffer size. *) val doIo = RunCall.run_call3 RuntimeCalls.POLY_SYS_io_dispatch in fun sys_get_buffsize (strm: OS.IO.iodesc): int = doIo(15, strm, 0) end fun textInstreamOf {pid, infd, ...} = let val n = Posix.FileSys.fdToIOD infd val textPrimRd = LibraryIOSupport.wrapInFileDescr {fd=n, name="TextPipeInput", initBlkMode=true} val streamIo = TextIO.StreamIO.mkInstream(textPrimRd, "") in TextIO.mkInstream streamIo end fun textOutstreamOf {pid, outfd, ...} = let val n = Posix.FileSys.fdToIOD outfd val buffSize = sys_get_buffsize n val textPrimWr = LibraryIOSupport.wrapOutFileDescr{fd=n, name="TextPipeOutput", appendMode=false, initBlkMode=true, chunkSize=buffSize} (* Construct a stream. *) val streamIo = TextIO.StreamIO.mkOutstream(textPrimWr, IO.LINE_BUF) in TextIO.mkOutstream streamIo end fun binInstreamOf {pid, infd, ...} = let val n = Posix.FileSys.fdToIOD infd val binPrimRd = LibraryIOSupport.wrapBinInFileDescr{fd=n, name="BinPipeInput", initBlkMode=true} val streamIo = BinIO.StreamIO.mkInstream(binPrimRd, Word8Vector.fromList []) in BinIO.mkInstream streamIo end fun binOutstreamOf {pid, outfd, ...} = let val n = Posix.FileSys.fdToIOD outfd val buffSize = sys_get_buffsize n val binPrimWr = LibraryIOSupport.wrapBinOutFileDescr{fd=n, name="BinPipeOutput", appendMode=false, chunkSize=buffSize, initBlkMode=true} (* Construct a stream. *) val streamIo = BinIO.StreamIO.mkOutstream(binPrimWr, IO.LINE_BUF) in BinIO.mkOutstream streamIo end fun streamsOf p = (textInstreamOf p, textOutstreamOf p) (* Internal function - inverse of Posix.Process.fromStatus. *) local val doCall = RunCall.run_call2 RuntimeCalls.POLY_SYS_os_specific in fun toStatus W_EXITED: OS.Process.status = doCall(16, (1, 0)) | toStatus(W_EXITSTATUS w) = doCall(16, (1, Word8.toInt w)) | toStatus(W_SIGNALED s) = doCall(16, (2, SysWord.toInt(Posix.Signal.toWord s))) | toStatus(W_STOPPED s) = doCall(16, (3, SysWord.toInt(Posix.Signal.toWord s))) end fun reap {result = ref(SOME r), ...} = r | reap(p as {pid, infd, outfd, result}) = let val u = Posix.IO.close infd; val u = Posix.IO.close outfd; val (_, status) = Posix.Process.waitpid(Posix.Process.W_CHILD pid, []) in (* If the process is only stopped we need to wait again. *) case status of W_STOPPED _ => reap p | _ => let val s = toStatus status in result := SOME s; s end end fun exit w = OS.Process.exit(toStatus (W_EXITSTATUS w)) end; polyml.5.2.1/basis/UnixSock.sml0000644000175000017500000000505010313043327015351 0ustar daviddavid(* Title: Standard Basis Library: Unix socket structure and signature. Author: David Matthews Copyright David Matthews 2000, 2005 This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* G&R 2004 status: Checked. No change except that it seems I'd commented out some of the type equivalences. *) signature UNIX_SOCK = sig type unix type 'sock_type sock = (unix, 'sock_type) Socket.sock type 'mode stream_sock = 'mode Socket.stream sock type dgram_sock = Socket.dgram sock type sock_addr = unix Socket.sock_addr val unixAF : Socket.AF.addr_family val toAddr : string -> sock_addr val fromAddr : sock_addr -> string structure Strm : sig val socket : unit -> 'mode stream_sock val socketPair : unit -> 'mode stream_sock * 'mode stream_sock end structure DGrm : sig val socket : unit -> dgram_sock val socketPair : unit -> dgram_sock * dgram_sock end end; structure UnixSock : UNIX_SOCK = struct abstype unix = ABSTRACT with end; type 'sock_type sock = (unix, 'sock_type) Socket.sock type 'mode stream_sock = 'mode Socket.stream sock type dgram_sock = Socket.dgram sock type sock_addr = unix Socket.sock_addr val unixAF : Socket.AF.addr_family = case Socket.AF.fromString "UNIX" of NONE => raise OS.SysErr("Missing address family", NONE) | SOME s => s local val doCall: int * string -> sock_addr = RunCall.run_call2 RuntimeCalls.POLY_SYS_network in fun toAddr s = doCall(56, s) end local val doCall: int * sock_addr -> string = RunCall.run_call2 RuntimeCalls.POLY_SYS_network in fun fromAddr s = doCall(57, s) end structure Strm = struct fun socket() = GenericSock.socket(unixAF, Socket.SOCK.stream) fun socketPair() = GenericSock.socketPair(unixAF, Socket.SOCK.stream) end structure DGrm = struct fun socket() = GenericSock.socket(unixAF, Socket.SOCK.dgram) fun socketPair() = GenericSock.socketPair(unixAF, Socket.SOCK.dgram) end end; polyml.5.2.1/basis/Vector.sml0000644000175000017500000003534110766427211015070 0ustar daviddavid(* Title: Standard Basis Library: Vector Structure Author: David Matthews Copyright David Matthews 1999, 2005 This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* G&R 2004 status: updated. Added VectorSlice and VECTOR_SLICE. *) signature VECTOR = sig eqtype 'a vector val maxLen : int val fromList : 'a list -> 'a vector val tabulate : (int * (int -> 'a)) -> 'a vector val length : 'a vector -> int val sub : ('a vector * int) -> 'a val update: 'a vector * int * 'a -> 'a vector val concat : 'a vector list -> 'a vector val mapi : ((int * 'a) -> 'b) -> 'a vector -> 'b vector val map : ('a -> 'b) -> 'a vector -> 'b vector val appi : ((int * 'a) -> unit) -> 'a vector -> unit val app : ('a -> unit) -> 'a vector -> unit val foldli : ((int * 'a * 'b) -> 'b) -> 'b -> 'a vector -> 'b val foldri : ((int * 'a * 'b) -> 'b) -> 'b -> 'a vector -> 'b val foldl : (('a * 'b) -> 'b) -> 'b -> 'a vector -> 'b val foldr : (('a * 'b) -> 'b) -> 'b -> 'a vector -> 'b val findi: (int * 'a -> bool) -> 'a vector -> (int * 'a) option val find: ('a -> bool) -> 'a vector -> 'a option val exists: ('a -> bool) -> 'a vector -> bool val all: ('a -> bool) -> 'a vector -> bool val collate: ('a * 'a -> order) -> 'a vector * 'a vector -> order end; local open RuntimeCalls (* Inherit the definition of vector in the initial environment. We have to declare vector in the initial environment in order for equality to work correctly. *) (* It would be simpler to be able to define these as functions to or from 'a vector but that gives error messages about free type variables. *) val System_lock: word -> unit = RunCall.run_call1 POLY_SYS_lockseg; val System_loadw: word*word->word = RunCall.run_call2 POLY_SYS_load_word; val System_setw: word * word * word -> unit = RunCall.run_call3 POLY_SYS_assign_word; val System_length: word -> word = RunCall.run_call1 POLY_SYS_get_length; val System_zero: word = RunCall.run_call1 POLY_SYS_io_operation POLY_SYS_nullvector; (* A zero word. *) val System_move_words: word*int*word*int*int->unit = RunCall.run_call5 POLY_SYS_move_words val vecAsWord: 'a vector -> word = RunCall.unsafeCast and wordAsVec: word -> 'a vector = RunCall.unsafeCast val intAsWord: int -> word = RunCall.unsafeCast and wordAsInt: word -> int = RunCall.unsafeCast local val System_alloc: int*int*int->word = RunCall.run_call3 POLY_SYS_alloc_store in (* All the arrays are initially created containing zeros and then initialised. *) fun alloc len = System_alloc(len, 0, 0) end fun unsafeSub(v: 'a vector, i: int): 'a = RunCall.unsafeCast(System_loadw (vecAsWord v, intAsWord i)) and unsafeUpdate(v: 'a vector, i: int, new: 'a): unit = System_setw (vecAsWord v, intAsWord i, RunCall.unsafeCast new); in structure Vector: VECTOR = struct (* N.B. This implementation of vectors is implicitly used in Array.extract. Don't change this implementation without also changing that. It's also used in the interface to the RTS in OS.Poll and Socket.select. *) type 'a vector = 'a vector (* The maximum vector size is limited by the size of the length field. On a 32 bit machine we have 24 bits of length field and 8 bits of flags so the maximum value is 2^24 - 1. *) local val doCall: int*unit -> int = RunCall.run_call2 RuntimeCalls.POLY_SYS_process_env in val maxLen = doCall(100, ()) end; infix 9 sub (* For what it's worth *) (* Lock the arrays after they have been created. All this does is switch off the "mutable" bit. This does not prevent updating of itself, the signature does that by removing "update", but improves g.c. performance and causes equality to check for value equality not pointer equality. *) val listLength = length; (* Pick this up from the prelude. *) fun length v = wordAsInt(System_length(vecAsWord v)); fun op sub (vec:'a vector, i: int): 'a = let val v = vecAsWord vec in if i < 0 orelse i >= wordAsInt(System_length v) then raise General.Subscript else RunCall.unsafeCast(System_loadw (v, intAsWord i)) end (* Create a vector from a list. We have to treat an empty list specially because we don't allow zero sized heap objects. *) fun fromList [] : 'a vector = wordAsVec System_zero (* Must not try to lock it. *) | fromList (l : 'a list) : 'a vector = let val length = listLength l; (* Make a vector initialised to zero. *) val vec = alloc length; (* Copy the list elements into the vector. *) fun init (v, i, a :: l) = ( System_setw(v, intAsWord i, RunCall.unsafeCast a); init(v, i + 1, l) ) | init (_, _, []) = (); in init(vec, 0, l); System_lock vec; wordAsVec vec end fun tabulate (0, f) : 'a vector = wordAsVec System_zero (* Must not try to lock it. *) | tabulate (length: int , f : int->'a): 'a vector = let val vec = if length > 0 then alloc length else raise General.Size; (* Initialise it to the function values. *) fun init i = if length <= i then () else (System_setw(vec, intAsWord i, RunCall.unsafeCast(f i)); init(i+1)) in init 0; System_lock vec; wordAsVec vec end fun concat [] = wordAsVec System_zero | concat [v] = v (* Handle special cases to reduce copying. *) | concat l = let (* Calculate the total length *) fun total [] i = i | total (h::t) i = total t (i+length h) val total_len = total l 0 in if total_len = 0 then wordAsVec System_zero else let (* Allocate a new vector. *) val new_vec = alloc total_len fun copy_list [] _ = () | copy_list (h::t) j = let val v = vecAsWord h val src_len = length h in System_move_words(v, 0, new_vec, j, src_len); copy_list t (j+src_len) end in copy_list l 0; System_lock new_vec; wordAsVec new_vec end end fun map (f: 'a->'b) (vec: 'a vector): 'b vector = let val len = length vec in if len = 0 then wordAsVec System_zero else let (* Allocate a new vector. *) val new_vec = alloc len val newResult = wordAsVec new_vec fun domap i = if i >= len then () else (unsafeUpdate(newResult, i, f(unsafeSub(vec, i))); domap(i+1)) in domap 0; System_lock new_vec; newResult end end fun mapi (f: int*'a->'b) (vec:'a vector): 'b vector = let val len = length vec in if len = 0 then wordAsVec System_zero else let (* Allocate a new vector. *) val new_vec = alloc len val newResult = wordAsVec new_vec fun domap i = if i >= len then () else (unsafeUpdate(newResult, i, f(i, unsafeSub(vec, i))); domap(i+1)) in domap 0; System_lock new_vec; newResult end end (* Create a new vector with the ith element replaced by c *) fun update(v: 'a vector, i , c) = if i < 0 orelse i >= length v then raise Subscript else mapi (fn (j, s) => if j = i then c else s) v (* Create the other functions. *) structure VectorOps = PolyVectorOperations( struct type 'a vector = 'a vector fun length v = System_length(vecAsWord v) local val u = unsafeSub in fun unsafeSub (v: 'a vector, i: word) = u(v, wordAsInt i) end fun unsafeSet _ = raise Fail "Should not be called" end); open VectorOps; local (* Install the pretty printer for vectors *) (* We may have to do this outside the structure if we have opaque signature matching. *) fun pretty(put: string->unit, beg: int*bool->unit, brk: int*int->unit, nd: unit->unit) (depth: int) (printElem: 'a * int -> unit) (x: 'a vector) = let val last = length x - 1 fun put_elem (index, w, d) = if d = 0 then (put "..."; d-1) else if d < 0 then d-1 else ( printElem(w, d-1); if index <> last then (put ","; brk(1, 0)) else (); d-1 ) in beg(3, false); put "fromList["; if depth <= 0 then put "..." else (foldli put_elem depth x; ()); put "]"; nd() end in val unused = PolyML.install_pp pretty end end (* Vector *) structure VectorSlice = struct datatype 'a slice = Slice of { vector: 'a vector, start: int, length: int }; fun length(Slice{length, ...}) = length fun op sub (Slice{vector, start, length}, i: int): 'a = if i < 0 orelse i >= length then raise General.Subscript else unsafeSub(vector, i+start) (* Create a slice from a vector. *) fun slice(vec: 'a vector, i: int, NONE) = let val len = Vector.length vec in if i >= 0 andalso i <= len then Slice{vector=vec, start=i, length=len-i} (* Length is rest of vector. *) else raise General.Subscript end | slice(vec: 'a vector, i: int, SOME l) = let val len = Vector.length vec in if i >= 0 andalso l >= 0 andalso i+l <= len then Slice{vector=vec, start=i, length=l} (* Length is as given. *) else raise General.Subscript end (* Slice from the whole vector. *) fun full v = Slice{vector=v, start=0, length=Vector.length v} (* Slice from existing slice *) fun subslice(Slice{vector, start, length}, i: int, NONE) = if i >= 0 andalso i <= length then Slice{vector=vector, start=i+start, length=length-i} (* Length is rest of array. *) else raise General.Subscript | subslice(Slice{vector, start, length}, i: int, SOME l) = if i >= 0 andalso l >= 0 andalso i+l <= length then Slice{vector=vector, start=i+start, length=l} (* Length is as given. *) else raise General.Subscript fun vector(Slice{vector, start, length}) = if length = 0 then wordAsVec System_zero (* Special case for zero *) else let (* Make a vector initialised to zero. *) val new_vec = alloc length in System_move_words(vecAsWord vector, start, new_vec, 0, length); System_lock new_vec; wordAsVec new_vec end fun base(Slice{vector, start, length}) = (vector, start, length) fun isEmpty(Slice{length, ...}) = length = 0 (* Return the first item of the slice and the rest of the slice. *) fun getItem(Slice{length=0, ...}) = NONE | getItem(Slice{vector, start, length}) = SOME(unsafeSub(vector, start), Slice{vector=vector, start=start+1, length=length-1}) fun concat [] = wordAsVec System_zero | concat l = let (* Calculate the total length *) fun total [] i = i | total (h::t) i = total t (i+length h) val total_len = total l 0 in if total_len = 0 then wordAsVec System_zero else let (* Allocate a new vector. *) val new_vec = alloc total_len fun copy_list [] _ = () | copy_list (Slice{vector, start, length}::t) j = ( System_move_words(vecAsWord vector, start, new_vec, j, length); copy_list t (j+length) ) in copy_list l 0; System_lock new_vec; wordAsVec new_vec end end fun map (f: 'a->'b) (Slice{vector:'a Vector.vector, start, length}): 'b Vector.vector = if length = 0 then wordAsVec System_zero else let (* Allocate a new vector. *) val new_vec = alloc length val newResult = wordAsVec new_vec fun domap i = if i >= length then () else (unsafeUpdate(newResult, i, f(unsafeSub(vector, i+start))); domap(i+1)) in domap 0; System_lock new_vec; newResult end fun mapi (f: int*'a->'b) (Slice{vector:'a Vector.vector, start, length}): 'b Vector.vector = if length = 0 then wordAsVec System_zero else let (* Allocate a new vector. *) val new_vec = alloc length val newResult = wordAsVec new_vec fun domap i = if i >= length then () else (unsafeUpdate(newResult, i, f(i, unsafeSub(vector, i+start))); domap(i+1)) in domap 0; System_lock new_vec; newResult end (* Create the other functions. *) structure VectorOps = PolyVectorOperations( struct type 'a vector = 'a slice fun length(Slice{length, ...}) = intAsWord length fun unsafeSub (Slice{vector, start, ...}, i) = RunCall.unsafeCast(System_loadw (vecAsWord vector, i + intAsWord start)) fun unsafeSet _ = raise Fail "Should not be called" end); open VectorOps; end (* VectorSlice *) end (* Local in end *); (* The VECTOR_SLICE signature refers to the Vector structure which complicates things. *) signature VECTOR_SLICE = sig type 'a slice val length : 'a slice -> int val sub : ('a slice * int) -> 'a val full: 'a Vector.vector -> 'a slice val slice: 'a Vector.vector * int * int option -> 'a slice val subslice: 'a slice * int * int option -> 'a slice val base: 'a slice -> 'a Vector.vector * int * int val vector: 'a slice -> 'a Vector.vector val concat : 'a slice list -> 'a Vector.vector val isEmpty: 'a slice -> bool val getItem: 'a slice -> ('a * 'a slice) option val appi : ((int * 'a) -> unit) -> 'a slice -> unit val app : ('a -> unit) -> 'a slice -> unit val mapi : ((int * 'a) -> 'b) -> 'a slice -> 'b Vector.vector val map : ('a -> 'b) -> 'a slice -> 'b Vector.vector val foldli : ((int * 'a * 'b) -> 'b) -> 'b -> 'a slice -> 'b val foldri : ((int * 'a * 'b) -> 'b) -> 'b -> 'a slice -> 'b val foldl : (('a * 'b) -> 'b) -> 'b -> 'a slice -> 'b val foldr : (('a * 'b) -> 'b) -> 'b -> 'a slice -> 'b val findi: (int * 'a -> bool) -> 'a slice -> (int * 'a) option val find: ('a -> bool) -> 'a slice -> 'a option val exists: ('a -> bool) -> 'a slice -> bool val all: ('a -> bool) -> 'a slice -> bool val collate: ('a * 'a -> order) -> 'a slice * 'a slice -> order end; structure VectorSlice :> VECTOR_SLICE = VectorSlice; local open VectorSlice (* Install the pretty printer for vector slices *) (* We may have to do this outside the structure if we have opaque signature matching. *) fun pretty(put: string->unit, beg: int*bool->unit, brk: int*int->unit, nd: unit->unit) (depth: int) (printElem: 'a * int -> unit) (x: 'a slice) = let val last = length x - 1 fun put_elem (index, w, d) = if d = 0 then (put "..."; d-1) else if d < 0 then d-1 else ( printElem(w, d-1); if index <> last then (put ","; brk(1, 0)) else (); d-1 ) in beg(3, false); put "fromList["; if depth <= 0 then put "..." else (foldli put_elem depth x; ()); put "]"; nd() end in val _ = PolyML.install_pp pretty end; (* type 'a vector is available unqualified in the global basis. *) val vector : 'a list -> 'a vector = Vector.fromList; polyml.5.2.1/basis/VectorOperations.sml0000644000175000017500000001212410316534242017120 0ustar daviddavid(* Title: Standard Basis Library: Vector and Array functor Copyright David C.J. Matthews 2005 This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* The MONO_ARRAY and MONO_VECTOR signatures contain a number of functions for operating over vectors and arrays. Many of these do not require bounds checking so they can be implemented without the checks. This functor provides basic implementations which can be overridden if necessary. unsafeSet is used only in the modify functions which are only exported from arrays. *) functor VectorOperations( type vector type elem val length: vector -> word val unsafeSub: vector * word -> elem val unsafeSet: vector * word * elem -> unit (* Array only *) ): sig val appi : ((int * elem) -> unit) -> vector -> unit val app : (elem -> unit) -> vector -> unit val foldli : ((int * elem * 'b) -> 'b) -> 'b -> vector -> 'b val foldri : ((int * elem * 'b) -> 'b) -> 'b -> vector -> 'b val foldl : ((elem * 'b) -> 'b) -> 'b -> vector -> 'b val foldr : ((elem * 'b) -> 'b) -> 'b -> vector -> 'b val modifyi : ((int * elem) -> elem) -> vector -> unit (* Array only *) val modify : (elem -> elem) -> vector -> unit (* Array only *) val findi: (int * elem -> bool) -> vector -> (int * elem) option val find: (elem -> bool) -> vector -> elem option val exists: (elem -> bool) -> vector -> bool val all: (elem -> bool) -> vector -> bool val collate: (elem * elem -> order) -> vector * vector -> order end = struct val wordAsInt: word -> int = RunCall.unsafeCast (* Apply a function to each element in turn *) fun appi f vec = let val len = length vec fun doapp j = if j >= len then () else (f(wordAsInt j, unsafeSub(vec, j)); doapp(j+0w1)) in doapp 0w0 end fun app f vec = let val len = length vec fun doapp j = if j >= len then () else (f(unsafeSub(vec, j)); doapp(j+0w1)) in doapp 0w0 end (* Fold a function over a array. *) (* foldl - increasing index *) fun foldl f init vec = let val len = length vec fun dofold j acc = if j >= len then acc else dofold (j+0w1) (f (unsafeSub(vec, j), acc)) in dofold 0w0 init end fun foldli f init vec = let val len = length vec fun dofold j acc = if j >= len then acc else dofold (j+0w1) (f (wordAsInt j, unsafeSub(vec, j), acc)) in dofold 0w0 init end (* foldr - decreasing index *) fun foldr f init vec = let val len = length vec fun dofold j acc = if j = 0w0 then acc else dofold (j-0w1) (f (unsafeSub(vec, j-0w1), acc)) in dofold len init end fun foldri f init vec = let val len = length vec fun dofold j acc = if j = 0w0 then acc else dofold (j-0w1) (f (wordAsInt(j-0w1), unsafeSub(vec, j-0w1), acc)) in dofold len init end (* Apply a function to each element in turn and update the array with the new values. *) fun modifyi f vec = let val len = length vec fun doupdate j = if j >= len then () else (unsafeSet(vec, j, f(wordAsInt j, unsafeSub(vec, j))); doupdate(j+0w1)) in doupdate 0w0 end fun modify f vec = let val len = length vec fun doupdate j = if j >= len then () else (unsafeSet(vec, j, f(unsafeSub(vec, j))); doupdate(j+0w1)) in doupdate 0w0 end (* Find a character that matches the predicate. *) fun findi pred vec = let val len = length vec fun dofind j = if j >= len then NONE else let val v = unsafeSub(vec, j) in if pred(wordAsInt j, v) then SOME (wordAsInt j, v) else dofind (j+0w1) end in dofind 0w0 end fun find pred vec = let val len = length vec fun dofind j = if j >= len then NONE else let val v = unsafeSub(vec, j) in if pred v then SOME v else dofind (j+0w1) end in dofind 0w0 end fun exists f arr = Option.isSome(find f arr) fun all pred arr = not (exists (not o pred) arr) fun collate cmp (vec1, vec2) = let val len1 = length vec1 and len2 = length vec2 (* Keep comparing items until either we come to the end of one of the arrays or we find a mismatch. *) fun dotest j = if j >= len1 then if len1 = len2 then EQUAL else (* j < len2 *) LESS else if j >= len2 then (* But j < len1, so a1 is longer *) GREATER else case cmp(unsafeSub(vec1, j), unsafeSub(vec2, j)) of LESS => LESS | GREATER => GREATER | EQUAL => dotest (j+0w1) in dotest 0w0 end end; polyml.5.2.1/basis/VectorSliceOperations.sml0000644000175000017500000001311310313043330020065 0ustar daviddavid(* Title: Standard Basis Library: Vector and Array slice functor Copyright David C.J. Matthews 2005 This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* The mono vector slice and mono array slice operations can all be combined into this functor fairly easily. Where appropriate functions can be redefined in the calling structure. *) functor VectorSliceOperations( type vector type elem val vecLength: vector -> word val unsafeVecSub: vector * word -> elem val unsafeVecUpdate: vector * word * elem -> unit (* Array only *) ): sig (*type slice*) datatype slice = Slice of { vector: vector, start: word, length: word }; val length : slice -> int val sub : (slice * int) -> elem val full: vector -> slice val slice: vector * int * int option -> slice val subslice: slice * int * int option -> slice val base: slice -> vector * int * int val isEmpty: slice -> bool val getItem: slice -> (elem * slice) option val appi : ((int * elem) -> unit) -> slice -> unit val app : (elem -> unit) -> slice -> unit val foldli : ((int * elem * 'a) -> 'a) -> 'a -> slice -> 'a val foldri : ((int * elem * 'a) -> 'a) -> 'a -> slice -> 'a val foldl : ((elem * 'a) -> 'a) -> 'a -> slice -> 'a val foldr : ((elem * 'a) -> 'a) -> 'a -> slice -> 'a val findi: (int * elem -> bool) -> slice -> (int * elem) option val find: (elem -> bool) -> slice -> elem option val exists: (elem -> bool) -> slice -> bool val all: (elem -> bool) -> slice -> bool val collate: (elem * elem -> order) -> slice * slice -> order (* These functions modify the vector or array. They aren't used for vectors. *) val update: slice * int * elem -> unit val modifyi : (int * elem -> elem) -> slice -> unit val modify : (elem -> elem) -> slice -> unit end = struct val wordAsInt: word -> int = RunCall.unsafeCast val intAsWord: int -> word = RunCall.unsafeCast type elem = elem type vector = vector datatype slice = Slice of { vector: vector, start: word, length: word }; fun length(Slice{length, ...}) = wordAsInt length fun op sub (Slice{vector, start, length}, i: int) = let (* Check that the value is non-negative and short and cast it to word. *) val iW = LibrarySupport.unsignedShortOrRaiseSubscript i in if iW >= length then raise General.Subscript else unsafeVecSub(vector, iW+start) end (* update obviously doesn't apply to vector slices which are immutable. This function is filtered out by the caller's signature. *) fun update(Slice{vector, start, length}, i: int, x: elem) = let (* Check that the value is non-negative and short and cast it to word. *) val iW = LibrarySupport.unsignedShortOrRaiseSubscript i in if iW >= length then raise General.Subscript else unsafeVecUpdate(vector, iW+start, x) end (* Slice from the whole vector. *) fun full v = Slice{vector=v, start=0w0, length=vecLength v} (* Create a slice from a vector. *) fun slice(vec: vector, i: int, NONE) = let val iW = LibrarySupport.unsignedShortOrRaiseSubscript i val len = vecLength vec in if iW <= len then Slice{vector=vec, start=iW, length=len-iW} (* Length is rest of vector. *) else raise General.Subscript end | slice(vec: vector, i: int, SOME l) = let val len = vecLength vec val iW = LibrarySupport.unsignedShortOrRaiseSubscript i val lW = LibrarySupport.unsignedShortOrRaiseSubscript l in if iW+lW <= len then Slice{vector=vec, start=iW, length=lW} (* Length is as given. *) else raise General.Subscript end (* Slice from existing slice *) fun subslice(Slice{vector, start, length}, i: int, NONE) = let val iW = LibrarySupport.unsignedShortOrRaiseSubscript i in if iW <= length then Slice{vector=vector, start=iW+start, length=length-iW} (* Length is rest of array. *) else raise General.Subscript end | subslice(Slice{vector, start, length}, i: int, SOME l) = let val iW = LibrarySupport.unsignedShortOrRaiseSubscript i val lW = LibrarySupport.unsignedShortOrRaiseSubscript l in if iW+lW <= length then Slice{vector=vector, start=iW+start, length=lW} (* Length is as given. *) else raise General.Subscript end fun base(Slice{vector, start, length}) = (vector, wordAsInt start, wordAsInt length) fun isEmpty(Slice{length, ...}) = length = 0w0 (* Return the first item of the slice and the rest of the slice. *) fun getItem(Slice{length=0w0, ...}) = NONE | getItem(Slice{vector, start, length}) = SOME(unsafeVecSub(vector, start), Slice{vector=vector, start=start+0w1, length=length-0w1}) (* Standard vector operations. *) structure VectorOps = VectorOperations( struct type vector = slice and elem = elem fun length(Slice{length, ...}) = length fun unsafeSub (Slice{vector, start, ...}, i) = unsafeVecSub(vector, start + i) fun unsafeSet (Slice{vector, start, ...}, i, x) = unsafeVecUpdate(vector, start + i, x) end); open VectorOps; end; polyml.5.2.1/basis/Weak.sml0000644000175000017500000000450410757045632014515 0ustar daviddavid(* Title: Weak references Author: David Matthews Copyright David Matthews 2008 This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* A weak reference or array contains option values. The SOME variant of the option must contain a reference. This restriction is imposed because they require pointer equality. A weak reference or array behaves just like a normal ref or array with one difference. The garbage collector may set a weak ref or the field of weak array to NONE if it currently contains SOME r but r is not reachable other than through weak references. The one proviso is that if r is contained in the executable it is always reachable. *) signature WEAK = sig val weak: 'a ref option -> 'a ref option ref val weakArray: int * 'a ref option -> 'a ref option array val weakLock: Thread.Mutex.mutex and weakSignal: Thread.ConditionVar.conditionVar end; structure Weak: WEAK = struct fun weak (v: 'a ref option): 'a ref option ref = let val System_alloc = RunCall.run_call3 RuntimeCalls.POLY_SYS_alloc_store in System_alloc(0w1, 0wx60, v) end fun weakArray(n: int, v: 'a ref option): 'a ref option array = let (* An array consists of n+1 words with the first containing the length. *) val System_alloc = RunCall.run_call3 RuntimeCalls.POLY_SYS_alloc_store val System_setw = RunCall.run_call3 RuntimeCalls.POLY_SYS_assign_word; val arr = System_alloc(n+1, 0wx60, v) in System_setw(arr, 0, n); arr end val weakLock = Thread.Mutex.mutex() and weakSignal = Thread.ConditionVar.conditionVar() end; polyml.5.2.1/basis/Windows.sml0000644000175000017500000004563310313043330015245 0ustar daviddavid(* Title: Standard Basis Library: Windows signature and structure Author: David Matthews Copyright David Matthews 2000, 2005 This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* G&R 2004 status: Done. Minor changes. *) signature WINDOWS = sig structure Key : sig include BIT_FLAGS val allAccess : flags val createLink : flags val createSubKey : flags val enumerateSubKeys : flags val execute : flags val notify : flags val queryValue : flags val read : flags val setValue : flags val write : flags end structure Reg : sig eqtype hkey val classesRoot : hkey val currentUser : hkey val localMachine : hkey val users : hkey val performanceData : hkey val currentConfig : hkey val dynData : hkey datatype create_result = CREATED_NEW_KEY of hkey | OPENED_EXISTING_KEY of hkey val createKeyEx : hkey * string * Key.flags -> create_result val openKeyEx : hkey * string * Key.flags -> hkey val closeKey : hkey -> unit val deleteKey : hkey * string -> unit val deleteValue : hkey * string -> unit val enumKeyEx : hkey * int -> string option val enumValue : hkey * int -> string option datatype values = SZ of string | DWORD of SysWord.word | BINARY of Word8Vector.vector | MULTI_SZ of string list | EXPAND_SZ of string val queryValueEx : hkey * string -> values val setValueEx : hkey * string * values -> unit end structure Config: sig val platformWin32s : SysWord.word val platformWin32Windows : SysWord.word val platformWin32NT : SysWord.word val platformWin32CE : SysWord.word val getVersionEx: unit -> { majorVersion: SysWord.word, minorVersion: SysWord.word, buildNumber: SysWord.word, platformId: SysWord.word, csdVersion: string } val getWindowsDirectory: unit -> string val getSystemDirectory: unit -> string val getComputerName: unit -> string val getUserName: unit -> string end structure DDE : sig type info val startDialog : string * string -> info val executeString : info * string * int * int -> unit val stopDialog : info -> unit end val getVolumeInformation : string -> { volumeName : string, systemName : string, serialNumber : SysWord.word, maximumComponentLength : int } val findExecutable : string -> string option val launchApplication : string * string -> unit val openDocument : string -> unit val simpleExecute : string * string -> OS.Process.status type ('a,'b) proc val execute : string * string -> ('a, 'b) proc val textInstreamOf : (TextIO.instream, 'a) proc -> TextIO.instream val binInstreamOf : (BinIO.instream, 'a) proc -> BinIO.instream val textOutstreamOf : ('a, TextIO.outstream) proc -> TextIO.outstream val binOutstreamOf : ('a, BinIO.outstream) proc -> BinIO.outstream val reap : ('a, 'b) proc -> OS.Process.status structure Status : sig type status = SysWord.word val accessViolation : status val arrayBoundsExceeded : status val breakpoint : status val controlCExit : status val datatypeMisalignment : status val floatDenormalOperand : status val floatDivideByZero : status val floatInexactResult : status val floatInvalidOperation : status val floatOverflow : status val floatStackCheck : status val floatUnderflow : status val guardPageViolation : status val integerDivideByZero : status val integerOverflow : status val illegalInstruction : status val invalidDisposition : status val invalidHandle : status val inPageError : status val noncontinuableException: status val pending : status val privilegedInstruction : status val singleStep : status val stackOverflow : status val timeout : status val userAPC : status end val fromStatus : OS.Process.status -> Status.status val exit : Status.status -> 'a end structure Windows :> WINDOWS = struct open RuntimeCalls fun getConst i = SysWord.fromInt(RunCall.run_call2 POLY_SYS_os_specific (1006, i)) structure Key = struct type flags = SysWord.word fun toWord f = f fun fromWord f = f val flags = List.foldl (fn (a, b) => SysWord.orb(a,b)) 0w0 fun allSet (fl1, fl2) = SysWord.andb(fl1, fl2) = fl1 fun anySet (fl1, fl2) = SysWord.andb(fl1, fl2) <> 0w0 fun clear (fl1, fl2) = SysWord.andb(SysWord.notb fl1, fl2) val allAccess : flags = getConst 0 val createLink : flags = getConst 1 val createSubKey : flags = getConst 2 val enumerateSubKeys : flags = getConst 3 val execute : flags = getConst 4 val notify : flags = getConst 5 val queryValue : flags = getConst 6 val read : flags = getConst 7 val setValue : flags = getConst 8 val write : flags = getConst 9 (* all is probably equivalent to allAccess. *) val all = flags[allAccess, createLink, createSubKey, enumerateSubKeys, execute, notify, queryValue, read, setValue, write] val intersect = List.foldl (fn (a, b) => SysWord.andb(a,b)) all end structure Reg = struct datatype hkey = PREDEFINED of int | SUBKEY of int (* Actually abstract. *) val classesRoot = PREDEFINED 0 val currentUser = PREDEFINED 1 val localMachine = PREDEFINED 2 val users = PREDEFINED 3 val performanceData = PREDEFINED 4 val currentConfig = PREDEFINED 5 val dynData = PREDEFINED 6 datatype create_result = CREATED_NEW_KEY of hkey | OPENED_EXISTING_KEY of hkey datatype values = SZ of string | DWORD of SysWord.word | BINARY of Word8Vector.vector | MULTI_SZ of string list | EXPAND_SZ of string local val winCall = RunCall.run_call2 POLY_SYS_os_specific (* Open one of the root keys. *) (* QUESTION: Why is this an option? The definition asks the same question. I've removed the option type. *) fun openRoot args = SUBKEY(winCall(1007, args)) (* Open a sub-key. *) and openSubKey args = SUBKEY(winCall(1008, args)) in fun openKeyEx(PREDEFINED i, s, f) = openRoot(i, s, SysWord.toInt f) | openKeyEx(SUBKEY i, s, f) = openSubKey(i, s, SysWord.toInt f) end local val winCall = RunCall.run_call2 POLY_SYS_os_specific fun pairToResult (0, k) = CREATED_NEW_KEY (SUBKEY k) | pairToResult (_, k) = OPENED_EXISTING_KEY (SUBKEY k) (* Open one of the root keys. *) fun createRoot args = pairToResult(winCall(1009, args)) (* Open a sub-key. *) and createSubKey args = pairToResult(winCall(1010, args)) in (* I've retained the third argument in this interface which used to be used for VOLATILE (1) or NON_VOLATILE (0). Keys are now always non-volatile. *) fun createKeyEx(PREDEFINED i, s, f) = createRoot(i, s, 0, SysWord.toInt f) | createKeyEx(SUBKEY i, s, f) = createSubKey(i, s, 0, SysWord.toInt f) end local val winCall = RunCall.run_call2 POLY_SYS_os_specific in (* TODO: We wouldn't normally expect to close a predefined key but it looks as though we might have to be able to close HKEY_PERFORMANCE_DATA. *) fun closeKey(PREDEFINED i) = () | closeKey(SUBKEY i) = winCall(1011, i) end local val winCall = RunCall.run_call2 POLY_SYS_os_specific fun unpackString v = let val len = Word8Vector.length v in if len = 0 then "" else Byte.unpackStringVec(Word8VectorSlice.slice(v, 0, SOME(len -1))) end fun unpackStringList v = let val len = Word8Vector.length v fun unpack start i = if i >= len orelse Word8Vector.sub(v, i) = 0w0 then if i = start then [] else Byte.unpackStringVec(Word8VectorSlice.slice(v, start, SOME(i - start))) :: unpack (i+1) (i+1) else unpack start (i+1) in unpack 0 0 end fun queryResultToValues(t, v) = (* Decode the type code and the value. Strings are null terminated so the last character must be removed. *) case t of 1 => SZ(unpackString v) | 4 => DWORD(PackWord32Little.subVec(v, 0)) | 2 => EXPAND_SZ(unpackString v) | 7 => MULTI_SZ(unpackStringList v) | _ => BINARY v in (* The queryValue functions simply return a type and a vector of bytes. The type code is decoded and the bytes unpacked appropriately. *) fun queryValueEx(PREDEFINED i, s) = queryResultToValues(winCall(1012, (i, s))) | queryValueEx(SUBKEY i, s) = queryResultToValues(winCall(1013, (i, s))) end local val winCall = RunCall.run_call2 POLY_SYS_os_specific in fun deleteValue(PREDEFINED i, s) = (winCall(1022, (i, s))) | deleteValue(SUBKEY i, s) = (winCall(1023, (i, s))) end local val winCall = RunCall.run_call2 POLY_SYS_os_specific fun packString s = let val len = String.size s val arr = Word8Array.array(len+1, 0w0) in Byte.packString(arr, 0, Substring.full s); Word8Array.vector arr end fun packStringList sl = let (* The string list is packed as a set of null-terminated strings with a final null at the end. *) (* TODO: Check for nulls in the strings themselves? *) fun totalSize n [] = n | totalSize n (s::sl) = totalSize (n + String.size s + 1) sl val len = totalSize 1 sl val arr = Word8Array.array(len, 0w0) fun pack n [] = () | pack n (s::sl) = ( Byte.packString(arr, n, Substring.full s); pack (n + String.size s + 1) sl ) in pack 0 sl; Word8Array.vector arr end fun valuesToTypeVal(SZ s) = (1, packString s) | valuesToTypeVal(EXPAND_SZ s) = (2, packString s) | valuesToTypeVal(BINARY s) = (3, s) | valuesToTypeVal(DWORD n) = let (* Pack the 32 bit value into an array, then extract that. *) val arr = Word8Array.array(4, 0w0) in PackWord32Little.update(arr, 0, n); (4, Word8Array.vector arr) end | valuesToTypeVal(MULTI_SZ s) = (7, packStringList s) in fun setValueEx(key, name, v) = let val (t, s) = valuesToTypeVal v val (call, k) = case key of PREDEFINED i => (1016, i) | SUBKEY i => (1017, i) in (winCall(call, (k, name, t, s))) end end local val winCall = RunCall.run_call2 POLY_SYS_os_specific in fun enumKeyEx(PREDEFINED i, n) = (winCall(1018, (i, n))) | enumKeyEx(SUBKEY i, n) = (winCall(1019, (i, n))) fun enumValue(PREDEFINED i, n) = (winCall(1020, (i, n))) | enumValue(SUBKEY i, n) = (winCall(1021, (i, n))) end local val winCall = RunCall.run_call2 POLY_SYS_os_specific (* In Windows NT RegDeleteKey will fail if the key has subkeys. To give the same behaviour in both Windows 95 and NT we have to recursively delete any subkeys. *) fun basicDeleteKey(PREDEFINED i, s) = (winCall(1014, (i, s))) | basicDeleteKey(SUBKEY i, s) = (winCall(1015, (i, s))) in fun deleteKey(k, s) = let val sk = openKeyEx(k, s, Key.enumerateSubKeys) fun deleteSubKeys () = case enumKeyEx(sk, 0) of NONE => () | SOME name => (deleteKey(sk, name); deleteSubKeys()) in deleteSubKeys() handle exn => (closeKey sk; raise exn); closeKey sk; basicDeleteKey(k, s) end end end structure DDE = struct type info = int (* Actually abstract. *) local val winCall = RunCall.run_call2 POLY_SYS_os_specific in fun startDialog (service, topic) = winCall(1038, (service, topic)) end local val winCall = RunCall.run_call2 POLY_SYS_os_specific in (* The timeout and retry count apply only in the case of a busy result. The Windows call takes a timeout parameter as the length of time to wait for a response and maybe we should use it for that as well. *) fun executeString (info, cmd, retry, delay) = let fun try n = if winCall(1039, (info, cmd)) then () (* Succeeded. *) else if n = 0 then raise OS.SysErr("DDE Server busy", NONE) else ( OS.IO.poll([], SOME(Time.fromMilliseconds delay)); try (n-1) ) in try retry end end local val winCall = RunCall.run_call2 POLY_SYS_os_specific in fun stopDialog (info) = winCall(1040, info) end end (* DDE *) local val winCall = RunCall.run_call2 POLY_SYS_os_specific in fun fileTimeToLocalFileTime t = winCall(1030, t) fun localFileTimeToFileTime t = winCall(1031, t) end local val winCall = RunCall.run_call2 POLY_SYS_os_specific in fun getVolumeInformation root = let val (vol, sys, serial, max) = winCall(1032, root) in { volumeName = vol, systemName = sys, serialNumber = SysWord.fromInt serial, maximumComponentLength = max } end end local val winCall = RunCall.run_call2 POLY_SYS_os_specific in fun findExecutable s = SOME(winCall(1033, s)) handle _ => NONE end local val winCall = RunCall.run_call2 POLY_SYS_os_specific in fun openDocument s = winCall(1034, s) end local val winCall = RunCall.run_call2 POLY_SYS_os_specific in fun launchApplication (command, arg) = winCall(1035, (command, arg)) end abstype ('a,'b) proc = ABS of int with end; (* Run a process and return a proces object which will allow us to extract the input and output streams. *) fun execute(command, arg): ('a,'b) proc = RunCall.run_call2 POLY_SYS_os_specific (1000, (command, arg)) local val doIo = RunCall.run_call3 POLY_SYS_io_dispatch in fun sys_get_buffsize (strm: OS.IO.iodesc): int = doIo(15, strm, 0) end fun textInstreamOf p = let (* Get the underlying file descriptor. *) val n = RunCall.run_call2 POLY_SYS_os_specific(1001, p) val textPrimRd = LibraryIOSupport.wrapInFileDescr {fd=n, name="TextPipeInput", initBlkMode=true} val streamIo = TextIO.StreamIO.mkInstream(textPrimRd, "") in TextIO.mkInstream streamIo end fun textOutstreamOf p = let val n = RunCall.run_call2 POLY_SYS_os_specific(1002, p) val buffSize = sys_get_buffsize n val textPrimWr = LibraryIOSupport.wrapOutFileDescr{fd=n, name="TextPipeOutput", appendMode=false, initBlkMode=true, chunkSize=buffSize} (* Construct a stream. *) val streamIo = TextIO.StreamIO.mkOutstream(textPrimWr, IO.LINE_BUF) in TextIO.mkOutstream streamIo end fun binInstreamOf p = let (* Get the underlying file descriptor. *) val n = RunCall.run_call2 POLY_SYS_os_specific(1003, p) val binPrimRd = LibraryIOSupport.wrapBinInFileDescr {fd=n, name="BinPipeInput", initBlkMode=true} val streamIo = BinIO.StreamIO.mkInstream(binPrimRd, Word8Vector.fromList []) in BinIO.mkInstream streamIo end fun binOutstreamOf p = let val n = RunCall.run_call2 POLY_SYS_os_specific(1004, p) val buffSize = sys_get_buffsize n val binPrimWr = LibraryIOSupport.wrapBinOutFileDescr{fd=n, name="BinPipeOutput", appendMode=false, initBlkMode=true, chunkSize=buffSize} (* Construct a stream. *) val streamIo = BinIO.StreamIO.mkOutstream(binPrimWr, IO.LINE_BUF) in BinIO.mkOutstream streamIo end (* reap - wait until the process finishes and get the result. Note: this is defined to be able to return the result repeatedly. At present that's done by not closing the handle except in the garbage collector. That could cause us to run out of handles. *) fun reap p = RunCall.run_call2 POLY_SYS_os_specific(1005, p) local val winCall = RunCall.run_call2 POLY_SYS_os_specific in (* Run a process and wait for the result. Rather than do the whole thing as a single RTS call we first start the process and then call "reap" to get the result. This allows this to be run as a separate ML process if necessary without blocking everything. This is similar to OS.Process.system but differs in that the streams are directed to NUL and this runs the executable directly, not via cmd.exe/command.com so cannot run DOS commands. OS.Process.system waits for the result within the RTS call so the whole of ML will be blocked until the process completes. *) fun simpleExecute (command, arg) = let val process = winCall(1037, (command, arg)) in reap process end end structure Status = struct type status = SysWord.word val accessViolation = getConst 10 val arrayBoundsExceeded = getConst 11 val breakpoint = getConst 12 val controlCExit = getConst 13 val datatypeMisalignment = getConst 14 val floatDenormalOperand = getConst 15 val floatDivideByZero = getConst 16 val floatInexactResult = getConst 17 val floatInvalidOperation = getConst 18 val floatOverflow = getConst 19 val floatStackCheck = getConst 20 val floatUnderflow = getConst 21 val guardPageViolation = getConst 22 val integerDivideByZero = getConst 23 val integerOverflow = getConst 24 val illegalInstruction = getConst 25 val invalidDisposition = getConst 26 val invalidHandle = getConst 27 val inPageError = getConst 28 (* This was given as nocontinuableException *) val noncontinuableException= getConst 29 val pending = getConst 30 val privilegedInstruction = getConst 31 val singleStep = getConst 32 val stackOverflow = getConst 33 val timeout = getConst 34 val userAPC = getConst 35 end (* The status is implemented as an integer. *) fun fromStatus (s: OS.Process.status): Status.status = SysWord.fromInt(RunCall.unsafeCast s); fun exit (s: Status.status) = OS.Process.exit(RunCall.unsafeCast(SysWord.toInt s)) structure Config = struct local val winCall: int*unit->int*int*int*int*string = RunCall.run_call2 POLY_SYS_os_specific in fun getVersionEx () = let val (major, minor, build, platform, version) = winCall(1050, ()) in { majorVersion = SysWord.fromInt major, minorVersion = SysWord.fromInt minor, buildNumber = SysWord.fromInt build, platformId = SysWord.fromInt platform, csdVersion = version } end end local val winCall: int*unit->string = RunCall.run_call2 POLY_SYS_os_specific in fun getWindowsDirectory () = winCall(1051, ()) and getSystemDirectory () = winCall(1052, ()) and getComputerName () = winCall(1053, ()) and getUserName () = winCall(1054, ()) end val platformWin32s = getConst 36 val platformWin32Windows = getConst 37 val platformWin32NT = getConst 38 val platformWin32CE = getConst 39 end end; polyml.5.2.1/basis/Word32.sml0000644000175000017500000001233710766427211014706 0ustar daviddavid(* Title: Standard Basis Library: Word32 Structure Author: David Matthews Achim D. Brucker Copyright David Matthews 1999 Achim D. Brucker 2006 This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* This is a hacked version of Word32 - a 32bit Word implementation for PolyML 5. It's neither well tested nor efficiently implemented. Nevertheless, it works well enough for the XML parser fxp (http://www2.in.tum.de/~berlea/Fxp/). *) structure Word32 :> WORD = struct (* This structure is largely derived from LargeWord but we use opaque signature matching so that it is a different type. *) open LargeWord (* Values of type Word32.word can be in the range 0.. 4294967295 *) val wordSize = 32 val maxWord = 4294967295 val maxWordAsWord: word = (LargeWord.fromInt maxWord) infix 8 << >> ~>> ; (* Comparison operations, min, max and compare, fmt, toString, orb, andb, xorb can be inherited directly from LargeWord. Similarly div, mod and >> since the results will always be no larger than the arguments. *) (* Not the same as Word.notb because it only affects the bottom 32 bits. *) fun notb x = xorb(maxWordAsWord, x) (* Converting from LargeWord.word. First convert to Word.word and then mask. *) fun fromLargeWord (w: LargeWord.word) = andb(w, maxWordAsWord) val fromLarge = fromLargeWord (* Internal function to convert from Word.word. *) fun fromWord (w: Word.word) = fromLargeWord(Word.toLarge(w)) and fromInt (i: int): word = fromLargeWord(LargeWord.fromInt i) (* Arithmetic shift - sign extends. *) (* Shift the "sign" bit into the real sign bit position then shift right down again. *) local val toSignBit = (Word.fromInt(Int.-(LargeWord.wordSize,wordSize))) in fun op ~>> (a: word, b: Word.word): word = fromLargeWord(LargeWord.~>>(LargeWord.<<(a, toSignBit), Word.+(b, toSignBit))) (* Convert to a large word by sign extending. *) fun toLargeWordX (w: word): LargeWord.word = LargeWord.~>>(LargeWord.<<(toLargeWord w, toSignBit), toSignBit) end val toLargeX = toLargeWordX (* Conversion to signed integer. *) fun toIntX (x: word) : int = LargeWord.toIntX(toLargeWordX x) val toLargeIntX = toIntX (* Use LargeWord.scan but check that the result is in the range. *) val wordScan = scan; fun scan radix getc src = case wordScan radix getc src of NONE => NONE | SOME(res, src') => if res > maxWordAsWord then raise General.Overflow else SOME(res, src') val fromString = StringCvt.scanString (scan StringCvt.HEX) (* TODO: Replace by built-ins? *) fun op + (a, b) = fromLargeWord(LargeWord.+(a, b)) and op - (a, b) = fromLargeWord(LargeWord.-(a, b)) and op * (a, b) = fromLargeWord(LargeWord.*(a, b)) and op << (a, b) = fromLargeWord(LargeWord.<<(a, b)) fun ~ x = 0w0 - x end; (* Because we are using opaque signature matching we have to install type-dependent functions OUTSIDE the structure. *) local open RuntimeCalls structure Conversion = RunCall.Run_exception1 ( type ex_type = string; val ex_iden = EXC_conversion ); exception Conversion = Conversion.ex; (* The string may be either 0wnnn or 0wxXXX *) fun convWord s : Word32.word = let val radix = (* The word value must consist of at least 0w and a digit. *) if String.sub(s, 2) = #"x" then StringCvt.HEX else StringCvt.DEC in case StringCvt.scanString (Word32.scan radix) s of NONE => raise Conversion "Invalid word8 constant" | SOME res => res end (* Install the pretty printer for Word32.word *) fun pretty(p, _, _, _) _ _ x = p("0wx" ^ Word32.toString x) in val () = RunCall.addOverload convWord "convWord" val () = PolyML.install_pp pretty end; (* Add the overloaded operators. *) RunCall.addOverload Word32.~ "~"; RunCall.addOverload Word32.+ "+"; RunCall.addOverload Word32.- "-"; RunCall.addOverload Word32.* "*"; RunCall.addOverload Word32.div "div"; RunCall.addOverload Word32.mod "mod"; RunCall.addOverload Word32.< "<"; RunCall.addOverload Word32.> ">"; RunCall.addOverload Word32.<= "<="; RunCall.addOverload Word32.>= ">="; polyml.5.2.1/basis/Word8.sml0000644000175000017500000001451110766427211014625 0ustar daviddavid(* Title: Standard Basis Library: Word8 Structure Author: David Matthews Copyright David Matthews 1999 This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* G&R 2004 status: checked, no change *) structure Word8 :> WORD = struct (* This structure is largely derived from Word but we use opaque signature matching so that it is a different type. *) open Word (* Values of type Word8.word can be in the range 0..255 and are implemented using tagged integers. *) (* There seem to be two ways to implement this, given that the underlying representation is a tagged 30/31 bit integer. We could either ensure that the top 22/23 bits are always zero and mask them after every operation (or if the code-generator was clever, after several) or we could allow these bits to be undefined and mask them before any operation which could expose them. For the moment we choose the former. *) (* N.B. The Byte structure contains functions which map between Word8.word values and Char.char. It assumes that the underlying representation is the same. *) open RuntimeCalls val wordSize = 8 val maxWord = 255 val maxWordAsWord: word = RunCall.unsafeCast maxWord infix 8 << >> ~>> ; (* Comparison operations, min, max and compare, fmt, toString, orb, andb, xorb can be inherited directly from Word. Similarly div and mod since the results will always be no larger than the arguments. *) (* ... but this can't because the second argument is still Word.word even in this structure. *) val op >> : word*Word.word->word = RunCall.run_call2 POLY_SYS_shift_right_word (* Not the same as Word.notb because it only affects the bottom 8 bits. *) fun notb x = xorb(maxWordAsWord, x) (* Internal function to convert from Word.word. *) fun fromWord (w: Word.word) = andb(w, maxWordAsWord) (* Converting from LargeWord.word. First convert to Word.word and then mask. *) fun fromLargeWord (w: LargeWord.word) = fromWord(Word.fromLargeWord w) and fromInt (i: int): word = fromWord(Word.fromInt i) val fromLarge = fromLargeWord (* Arithmetic shift - sign extends. *) (* TODO: Replace by built-in? We need a separate function from arithmetic shift for Word because the sign bit is in a different place. *) (* Shift the "sign" bit into the real sign bit position then shift right down again. *) local val toSignBit = Word.fromInt(Int.-(Word.wordSize,wordSize)) in fun op ~>> (a: word, b: Word.word): word = fromWord(Word.~>>(Word.<<(a, toSignBit), Word.+(b, toSignBit))) end (* TODO: Replace with built-in? We need to mask the result so that it remains in the range 0..255 *) local val wordshift = RunCall.run_call2 POLY_SYS_shift_left_word in fun op << (a: word, b: Word.word): word = andb(wordshift(a,b), maxWordAsWord) end (* Conversion to unsigned integer. This is simpler than for Word because all Word8 values correspond to short integers. *) val toInt: word->int = RunCall.unsafeCast (* Conversion to signed integer. *) (* TODO: This could be implemented using shifts. i.e logical shift left by (Word.wordSize-Word8.wordSize) then arithmetic shift right by the same amount. *) fun toIntX (x: word) : int = let val intx = toInt x open Int (* We want integer arithmetic here. *) in if intx >= 128 then intx-maxWord-1 else intx end val fromLargeInt = fromInt and toLargeInt = toInt and toLargeIntX = toIntX (* Convert to a large word by sign extending. *) fun toLargeWordX (w: word): LargeWord.word = LargeWord.fromInt(toIntX w); val toLargeX = toLargeWordX (* Use Word.scan but check that the result is in the range. *) val wordScan = scan; fun scan radix getc src = case wordScan radix getc src of NONE => NONE | SOME(res, src') => if res > maxWordAsWord then raise General.Overflow else SOME(res, src') val fromString = StringCvt.scanString (scan StringCvt.HEX) (* TODO: Replace by built-ins? *) fun op + (a, b) = fromWord(Word.+(a, b)) and op - (a, b) = fromWord(Word.-(a, b)) and op * (a, b) = fromWord(Word.*(a, b)) end; (* Because we are using opaque signature matching we have to install type-dependent functions OUTSIDE the structure. *) local open RuntimeCalls structure Conversion = RunCall.Run_exception1 ( type ex_type = string; val ex_iden = EXC_conversion ); exception Conversion = Conversion.ex; (* The string may be either 0wnnn or 0wxXXX *) fun convWord s : Word8.word = let val radix = (* The word value must consist of at least 0w and a digit. *) if String.sub(s, 2) = #"x" then StringCvt.HEX else StringCvt.DEC in case StringCvt.scanString (Word8.scan radix) s of NONE => raise Conversion "Invalid word8 constant" | SOME res => res end (* Install the pretty printer for Word8.word *) fun pretty(p, _, _, _) _ _ x = p("0wx" ^ Word8.toString x) in val () = RunCall.addOverload convWord "convWord" val () = PolyML.install_pp pretty end; (* Add the overloaded operators. *) RunCall.addOverload Word8.+ "+"; RunCall.addOverload Word8.- "-"; RunCall.addOverload Word8.* "*"; RunCall.addOverload Word8.div "div"; RunCall.addOverload Word8.mod "mod"; RunCall.addOverload Word8.< "<"; RunCall.addOverload Word8.> ">"; RunCall.addOverload Word8.<= "<="; RunCall.addOverload Word8.>= ">="; (* Add overloadings for = and <>. The effect of this is to provide more efficient implementations than the default structure equality. *) val it : Word8.word * Word8.word -> bool = RunCall.run_call2 RuntimeCalls.POLY_SYS_word_eq; RunCall.addOverload it "="; val it : Word8.word * Word8.word -> bool = RunCall.run_call2 RuntimeCalls.POLY_SYS_word_neq; RunCall.addOverload it "<>"; polyml.5.2.1/basis/Word8Array.sml0000644000175000017500000004530710766427211015633 0ustar daviddavid(* Title: Standard Basis Library: Word8Array, Word8Vector and Byte Structures Author: David Matthews Copyright David Matthews 1999, 2005 This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* G&R 2004 status: Complete. *) local open RuntimeCalls; (* for POLY_SYS and EXC numbers *) (* We can't use the segment length for the length of the vector as we do for "normal" arrays and vectors. There are two ways of handling this. We could implement byte vectors in the same way as strings, with a length word in the first word, or we could store the length separately, as with arrays. We could, of course, treat arrays in the same way. Implementing vectors as strings simplifies conversion between the two and that's the approach I've adopted. *) open LibrarySupport datatype vector = datatype LibrarySupport.Word8Array.vector datatype array = datatype LibrarySupport.Word8Array.array val System_lock: address -> unit = RunCall.run_call1 POLY_SYS_lockseg; val System_loadb: address*word->Word8.word = RunCall.run_call2 POLY_SYS_load_byte; val System_setb: address * word * Word8.word -> unit = RunCall.run_call3 POLY_SYS_assign_byte; val System_move_bytes: address*word*address*word*word->unit = RunCall.run_call5 POLY_SYS_move_bytes val System_isShort : address -> bool = RunCall.run_call1 POLY_SYS_is_short val emptyVec: vector = (* This is represented by a null string not a null vector. *) RunCall.run_call1 POLY_SYS_io_operation POLY_SYS_emptystring; val maxLen = CharVector.maxLen val alloc = LibrarySupport.allocBytes val vecLength: vector -> int = RunCall.run_call1 RuntimeCalls.POLY_SYS_string_length; val wVecLength: vector -> word = RunCall.run_call1 RuntimeCalls.POLY_SYS_string_length; (* Casts between int and word. *) val intAsWord: int -> word = RunCall.unsafeCast and wordAsInt: word -> int = RunCall.unsafeCast infix 9 sub (* For what it's worth *) in (* We don't use opaque matching because we need the internal representation of vector and array in the IO structures. *) structure Word8Vector : MONO_VECTOR = struct type elem = Word8.word type vector = vector val maxLen = maxLen; val length = vecLength fun op sub (v as Vector s, i: int): elem = if i < 0 orelse i >= length v then raise General.Subscript else if System_isShort s then RunCall.unsafeCast s else System_loadb (s, intAsWord i + wordSize) (* Because Word8Vector.vector is implemented as a string and Word8.word as a byte all these functions have the same implementation in Word8Vector and CharVector. We might be able to avoid the casts by some clever use of opaque matching but we would have to do the conversion of Word8.word from char to an opaque type at the same time as converting Word8Vector.elem to preserve the sharing. *) (* Can't that be achieved by Word8Vector :> MONO_VECTOR where type elem = Word8.word ? *) val fromList: Word8.word list -> vector = RunCall.unsafeCast CharVector.fromList and tabulate: int * (int->Word8.word) -> vector = RunCall.unsafeCast CharVector.tabulate and concat: vector list -> vector = RunCall.unsafeCast CharVector.concat and map: (elem -> elem) -> vector -> vector = RunCall.unsafeCast CharVector.map and mapi: ((int * elem) -> elem) -> vector -> vector = RunCall.unsafeCast CharVector.mapi and update: vector * int * elem -> vector = RunCall.unsafeCast CharVector.update (* Create the other functions. *) structure VectorOps = VectorOperations( struct type vector = vector and elem = elem val length = RunCall.run_call1 RuntimeCalls.POLY_SYS_string_length fun unsafeSub (v as Vector s, i) = if System_isShort s then RunCall.unsafeCast s else System_loadb(s, i + wordSize); fun unsafeSet _ = raise Fail "Should not be called" end); open VectorOps; local (* Install the pretty printer for Word8Vector.vector *) (* We may have to do this outside the structure if we have opaque signature matching. *) fun pretty(put: string->unit, beg: int*bool->unit, brk: int*int->unit, nd: unit->unit) (depth: int) _ x = let val last = length x - 1 fun put_elem (index, w, d) = if d = 0 then (put "..."; d-1) else if d < 0 then d-1 else ( put("0wx" ^ Word8.toString w); if index <> last then (put ","; brk(1, 0)) else (); d-1 ) in beg(3, false); put "fromList["; if depth <= 0 then put "..." else (foldli put_elem depth x; ()); put "]"; nd() end in val unused = PolyML.install_pp pretty end end (* Vector *); structure Word8Array : MONO_ARRAY = struct type array = array type elem = Word8.word type vector = vector val maxLen = maxLen; fun length(Array(l, _)) = wordAsInt l fun array (length, ini) = let (* The array is allocated containing zeros. Some versions of the RTS will allow byte vectors to be allocated with other values but other versions don't. For the moment assume that we have to initialise the array separately. *) val len = unsignedShortOrRaiseSize length val vec = alloc len fun init i = if len <= i then () else (System_setb(vec, i, ini); init(i+0w1)) in init 0w0; Array(len, vec) end fun op sub (Array(l, v), i: int): elem = if i < 0 orelse i >= wordAsInt l then raise General.Subscript else System_loadb (v, intAsWord i) fun update (Array (l, v), i: int, new) : unit = if i < 0 orelse i >= wordAsInt l then raise General.Subscript else System_setb (v, intAsWord i, new); (* Create an array from a list. *) fun fromList (l : elem list) : array = let val length = unsignedShortOrRaiseSize(List.length l); (* Make a array initialised to zero. *) val vec = alloc length; (* Copy the list elements into the array. *) fun init (v, i, a :: l) = (System_setb(v, i, a); init(v, i + 0w1, l)) | init (_, _, []) = (); in init(vec, 0w0, l); Array(length, vec) end fun tabulate (length: int , f : int->elem): array = let val len = unsignedShortOrRaiseSize length val vec = alloc len (* Initialise it to the function values. *) fun init i = if len <= i then () else (System_setb(vec, i, f(wordAsInt i)); init(i+0w1)) in init 0w0; Array(len, vec) end fun vector(Array(len, vec)) = if len = 0w0 then emptyVec else if len = 0w1 then (* Single character string is the character itself. *) RunCall.unsafeCast (System_loadb (vec, 0w0)) else let (* Make an array initialised to zero. *) val new_vec = LibrarySupport.Word8Array.fromString(allocString len) in System_move_bytes(vec, 0w0, RunCall.unsafeCast new_vec, wordSize, len); System_lock new_vec; Vector new_vec end (* Copy an array into another. It's possible for the arrays to be the same but in that case di must be zero (since len = dlen) and the copy is a no-op. *) fun copy {src as Array (len, s), dst as Array (dlen, d), di: int} = let val diW = unsignedShortOrRaiseSubscript di in if diW+len > dlen then raise General.Subscript else System_move_bytes(s, 0w0, d, diW, len) end (* Copy a vector into an array. *) fun copyVec {src as Vector s, dst as Array (dlen, d), di: int} = let val len = intAsWord(vecLength src) val diW = unsignedShortOrRaiseSubscript di in if diW + len > dlen then raise General.Subscript else if System_isShort s (* i.e. length s = 1 *) then (* Single character strings are represented by the character so we just need to insert the character into the array. *) System_setb(d, diW, RunCall.unsafeCast s) else System_move_bytes(s, wordSize, d, diW, len) end (* Create the other functions. *) structure ArrayOps = VectorOperations( struct type vector = array and elem = elem fun length(Array(len, _)) = len fun unsafeSub(Array(_, v), i) = System_loadb(v, i) and unsafeSet(Array(_, v), i, c) = System_setb(v, i, c) end); open ArrayOps; local (* Install the pretty printer for Word8Array.array *) (* We may have to do this outside the structure if we have opaque signature matching. *) fun pretty(put: string->unit, beg: int*bool->unit, brk: int*int->unit, nd: unit->unit) (depth: int) _ x = let val last = length x - 1 fun put_elem (index, w, d) = if d = 0 then (put "..."; d-1) else if d < 0 then d-1 else ( put("0wx" ^ Word8.toString w); if index <> last then (put ","; brk(1, 0)) else (); d-1 ) in beg(3, false); put "fromList["; if depth <= 0 then put "..." else (foldli put_elem depth x; ()); put "]"; nd() end in val unused = PolyML.install_pp pretty end end (* Word8Array *); structure Word8VectorSlice:> MONO_VECTOR_SLICE where type elem = Word8.word where type vector = Word8Vector.vector = (* We use opaque matching here simply to remove a confusing reference to VectorSliceOps when the type is printed. *) struct type vector = vector and elem = Word8.word structure VectorSliceOps = VectorSliceOperations( struct type vector = vector and elem = Word8.word val vecLength = wVecLength fun unsafeVecSub(v as Vector s, i: word) = if System_isShort s then RunCall.unsafeCast s else System_loadb(s, i + wordSize) fun unsafeVecUpdate _ = raise Fail "Should not be called" (* Not applicable *) end); open VectorSliceOps; (* vector: get the slice out. Since the underlying vector is implemented using the basic string type we can use substring here. *) fun vector slice : vector = let val (Vector vector, start, length) = base slice in Vector(RunCall.unsafeCast(unsafeSubstring(RunCall.unsafeCast vector, intAsWord start, intAsWord length))) end; (* It would be more efficient to do these as single operations but it's probably too complicated. *) fun concat L = Word8Vector.concat(List.map vector L) fun map f slice = Word8Vector.map f (vector slice) fun mapi f slice = Word8Vector.mapi f (vector slice) end (* Word8VectorSlice *); local (* Install the pretty printer for Word8VectorSlice.slice *) (* We may have to do this outside the structure if we have opaque signature matching. *) fun pretty(put: string->unit, beg: int*bool->unit, brk: int*int->unit, nd: unit->unit) (depth: int) _ x = let val last = Word8VectorSlice.length x - 1 fun put_elem (index, w, d) = if d = 0 then (put "..."; d-1) else if d < 0 then d-1 else ( put("0wx" ^ Word8.toString w); if index <> last then (put ","; brk(1, 0)) else (); d-1 ) in beg(3, false); put "fromList["; if depth <= 0 then put "..." else (Word8VectorSlice.foldli put_elem depth x; ()); put "]"; nd() end in val _ = PolyML.install_pp pretty end; structure Word8ArraySlice:> MONO_ARRAY_SLICE where type elem = Word8.word where type vector = Word8Vector.vector where type vector_slice = Word8VectorSlice.slice where type array = Word8Array.array = struct structure VectorSliceOps = VectorSliceOperations( struct type vector = array and elem = Word8.word fun unsafeVecSub(Array(_, s), i) = System_loadb(s, i) and unsafeVecUpdate(Array(_, s), i, x) = System_setb (s, i, x) and vecLength(Array(l, _)) = l end); open VectorSliceOps; type elem = Word8.word type vector = vector type array = array type vector_slice = Word8VectorSlice.slice (* vector: get the slice out. *) fun vector slice: vector = let val (Array(_, vec), start, length) = base slice in if length = 0 then emptyVec else if length = 1 then (* Single character string is the character itself. *) RunCall.unsafeCast (System_loadb (vec, intAsWord start)) else let val len = intAsWord length (* Make an array initialised to zero. *) val new_vec = LibrarySupport.Word8Array.fromString(allocString len) in System_move_bytes(vec, intAsWord start, RunCall.unsafeCast new_vec, wordSize, len); System_lock new_vec; Vector new_vec end end (* Copy a slice into an array. *) fun copy {src, dst as Array (dlen, d), di: int} = let val (Array(_, s), start, length) = base src in if di < 0 orelse di+length > Word8Array.length dst then raise General.Subscript else System_move_bytes(s, intAsWord start, d, intAsWord di, intAsWord length) end (* Copy a vector slice into an array. *) fun copyVec {src: Word8VectorSlice.slice, dst as Array (dlen, d), di: int} = let val (Vector source, i, l) = Word8VectorSlice.base src val len = intAsWord l and offset = intAsWord i val diW = unsignedShortOrRaiseSubscript di in if diW + len > dlen then raise General.Subscript else if System_isShort source (* i.e. length s = 1 *) then (* Single character strings are represented by the character so we just need to insert the character into the array. *) System_setb(d, diW + offset, RunCall.unsafeCast source) (* The source is represented by a string whose first word is the length. *) else System_move_bytes(source, offset + wordSize, d, diW, len) end end (* Word8ArraySlice *); local (* Install the pretty printer for Word8ArraySlice.slice *) (* We may have to do this outside the structure if we have opaque signature matching. *) fun pretty(put: string->unit, beg: int*bool->unit, brk: int*int->unit, nd: unit->unit) (depth: int) _ x = let val last = Word8ArraySlice.length x - 1 fun put_elem (index, w, d) = if d = 0 then (put "..."; d-1) else if d < 0 then d-1 else ( put("0wx" ^ Word8.toString w); if index <> last then (put ","; brk(1, 0)) else (); d-1 ) in beg(3, false); put "fromList["; if depth <= 0 then put "..." else (Word8ArraySlice.foldli put_elem depth x; ()); put "]"; nd() end in val unused = PolyML.install_pp pretty end end; (* Install overloaded equality functions. Since Word8.word is an equality type the only effect of this is to speed up equality. (c.f. Array ) *) val it: Word8Array.array * Word8Array.array -> bool = RunCall.run_call2 RuntimeCalls.POLY_SYS_word_eq; RunCall.addOverload it "="; val it: Word8Array.array * Word8Array.array -> bool = RunCall.run_call2 RuntimeCalls.POLY_SYS_word_neq; RunCall.addOverload it "<>"; polyml.5.2.1/basis/build.sml0000644000175000017500000001115311003076716014713 0ustar daviddavid(* Title: Standard Basis Library: Commands to build the library Copyright David C.J. Matthews 2000, 2005 This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* Thread, Weak and Signal are Poly/ML extensions. *) Bootstrap.use "basis/RuntimeCalls.ML"; Bootstrap.use "basis/InitialBasis.ML"; Bootstrap.use "basis/InitialPolyML.ML"; Bootstrap.use "basis/Universal.ML"; Bootstrap.use "basis/General.sml"; Bootstrap.use "basis/LibrarySupport.sml"; Bootstrap.use "basis/Option.sml"; Bootstrap.use "basis/VectorOperations.sml"; Bootstrap.use "basis/PolyVectorOperations.sml"; Bootstrap.use "basis/VectorSliceOperations.sml"; Bootstrap.use "basis/StringCvt.sml"; Bootstrap.use "basis/MONO_VECTOR.sml"; Bootstrap.use "basis/MONO_VECTOR_SLICE.sml"; Bootstrap.use "basis/MONO_ARRAY.sml"; Bootstrap.use "basis/MONO_ARRAY_SLICE.sml"; Bootstrap.use "basis/Vector.sml"; Bootstrap.use "basis/Array.sml"; Bootstrap.use "basis/List.sml"; Bootstrap.use "basis/String.sml"; Bootstrap.use "basis/Text.sml"; (* Declares Char, String, CharArray, CharVector *) Bootstrap.use "basis/Bool.sml"; Bootstrap.use "basis/ListPair.sml"; Bootstrap.use "basis/Int.sml"; Bootstrap.use "basis/Array.sml"; Bootstrap.use "basis/LargeWord.sml"; Bootstrap.use "basis/Word8.sml"; Bootstrap.use "basis/Word32.sml"; Bootstrap.use "basis/INTEGER.sml"; Bootstrap.use "basis/IntInf.sml"; Bootstrap.use "basis/Int32.sml"; Bootstrap.use "basis/Word8Array.sml"; Bootstrap.use "basis/Byte.sml"; Bootstrap.use "basis/BoolArray.sml"; Bootstrap.use "basis/IntArray.sml"; Bootstrap.use "basis/RealArray.sml"; Bootstrap.use "basis/IEEE_REAL.sml"; Bootstrap.use "basis/IEEEReal.sml"; Bootstrap.use "basis/MATH.sml"; Bootstrap.use "basis/Real.sml"; Bootstrap.use "basis/Time.sml"; Bootstrap.use "basis/Date.sml"; Bootstrap.use "basis/Thread.sml"; (* Non-standard. *) Bootstrap.use "basis/Timer.sml"; Bootstrap.use "basis/CommandLine.sml"; Bootstrap.use "basis/OS.sml"; Bootstrap.use "basis/IO.sml"; Bootstrap.use "basis/PRIM_IO.sml"; Bootstrap.use "basis/PrimIO.sml"; Bootstrap.use "basis/TextPrimIO.sml"; Bootstrap.use "basis/BinPrimIO.sml"; Bootstrap.use "basis/LibraryIOSupport.sml"; Bootstrap.use "basis/STREAM_IO.sml"; Bootstrap.use "basis/BasicStreamIO.sml"; Bootstrap.use "basis/IMPERATIVE_IO.sml"; Bootstrap.use "basis/ImperativeIO.sml"; Bootstrap.use "basis/TextIO.sml"; Bootstrap.use "basis/BinIO.sml"; Bootstrap.use "basis/NetHostDB.sml"; Bootstrap.use "basis/NetProtDB.sml"; Bootstrap.use "basis/NetServDB.sml"; Bootstrap.use "basis/Socket.sml"; Bootstrap.use "basis/GenericSock.sml"; Bootstrap.use "basis/INetSock.sml"; Bootstrap.use "basis/UnixSock.sml"; Bootstrap.use "basis/PackRealBig.sml"; (* also declares PackRealLittle *) Bootstrap.use "basis/PackWord8Big.sml"; (* also declares Pack8Little. ...*) Bootstrap.use "basis/Array2.sml"; Bootstrap.use "basis/IntArray2.sml"; Bootstrap.use "basis/SML90.sml"; Bootstrap.use "basis/Weak.sml"; Bootstrap.use "basis/Signal.sml"; Bootstrap.use "basis/SysWord.sml"; Bootstrap.use "basis/BIT_FLAGS.sml"; (* Build Windows or Unix structure as appropriate. *) let val getOS: int = RunCall.run_call2 RuntimeCalls.POLY_SYS_os_specific (0, 0) in if getOS = 0 then ( Bootstrap.use "basis/Posix.sml"; Bootstrap.use "basis/Unix.sml") else if getOS = 1 then Bootstrap.use "basis/Windows.sml" else () end; Bootstrap.use "basis/HashArray.ML"; Bootstrap.use "basis/UniversalArray.ML"; Bootstrap.use "basis/FinalPolyML.sml"; (* Clean out structures and functors which are only used to build the library. *) PolyML.Compiler.forgetStructure "LibrarySupport"; PolyML.Compiler.forgetStructure "LibraryIOSupport"; PolyML.Compiler.forgetStructure "MachineConstants"; PolyML.Compiler.forgetFunctor "BasicStreamIO"; PolyML.Compiler.forgetFunctor "VectorOperations"; PolyML.Compiler.forgetFunctor "PolyVectorOperations"; PolyML.Compiler.forgetFunctor "VectorSliceOperations"; (* Now we've created the new name space we must use PolyML.make/use. *) (* Build the Process structure for backwards compatibility. *) PolyML.use "basis/processes"; polyml.5.2.1/basis/ml_bind.sml0000644000175000017500000000447610757045326015242 0ustar daviddavid(* Title: Standard Basis Library: Top level make Author: David Matthews Copyright David Matthews 1999-2008 This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) local (* Several modules are made as a result of being dependencies of modules in this list. *) (* Thread, Weak and Signal are Poly/ML extensions. *) structure g = General structure o = Option structure s = String structure ss = Substring (* structure tt = Text*) (* Declares Char, String, CharArray, CharVector *) structure b = Bool (* Depends on Text *) structure lp = ListPair structure i = Int structure a = Array structure w = LargeWord structure w8 = Word8 structure w32 = Word32 structure ii = IntInf structure i32 = Int32 structure w8a = Word8Array (* Depends on Word8, Word, String, Substring *) structure by = Byte (* Depends on Word8Array among others. *) structure bv = BoolArray structure iv = IntArray structure rv = RealArray structure rl = Real (* Depends on IEEEReal*) structure d = Date (* Depends on Time, Int, String, Char ... *) structure th = Thread (* Non-standard. May not actually need to include explicitly. *) structure t = Timer structure c = CommandLine structure o = OS (* Depends on Time *) structure t = TextIO structure b = BinIO structure nh = NetHostDB structure np = NetProtDB structure ns = NetServDB structure sk = Socket structure isk = INetSock structure usk = UnixSock structure pr = PackRealBig (* also declares PackRealLittle *) structure pw = PackWord8Big (* also declares Pack8Little. ...*) structure a2 = Array2 structure i2 = IntArray2 structure ml90 = SML90 structure we = Weak structure si = Signal (* Unix and Windows structures are built separately. *) in end; polyml.5.2.1/basis/processes.ML0000644000175000017500000003340110766427621015351 0ustar daviddavid(* Title: Process package for ML. Author: David C. J. Matthews Copyright (c) 2007 This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* This is provided for backwards compatibility. New programs should use the Thread structure directly. *) structure Process: sig type 'a channel val channel: unit -> '_a channel val send: 'a channel * 'a -> unit val receive: 'a channel -> 'a val fork: (unit->unit)->unit val console: (unit->unit)->(unit->unit) val choice: (unit->unit)*(unit->unit)->unit val interruptConsoleProcesses: unit->unit end = struct open Thread.Thread Thread.Mutex Thread.ConditionVar val debug = ref false and identifiers = ref 0 and ids = ref 0; (* Each process created by fork, console or choice has this information as thread-local data. *) datatype processData = PROC of { synchro: (synchroniser * direction) list ref, (* The synchroniser chain. *) blocker: conditionVar, (* Condition var to block this process. *) processNo: int (* An identifier for debugging. *) } and synchroniser = SYNCH of { state: choicestate ref, (* The state of this choice. *) synchLock: mutex (* A mutex to protect the state variable. *) } and choicestate = ChoiceUntaken | ChoiceTaken of direction and direction = DirLeft | DirRight; val procTag = Universal.tag(): processData Universal.tag (* Get the process data for this thread. If it was created by a Thread call directly it may not yet have any process data so we need to make it now. *) fun get_process_data(): processData = case getLocal procTag of SOME p => p | NONE => let val pnum = (identifiers := !identifiers+1; !identifiers); val pData = PROC { synchro = ref [], blocker = conditionVar(), processNo = pnum } in setLocal(procTag, pData); pData end datatype 'a channel = CHAN of {senders: 'a procVal list ref, receivers: 'a option ref procVal list ref, chanLock: mutex, Id: int} (* This represents a suspended process. The 'a is either a value to be sent or a "basket", a reference to hold the result. *) withtype 'a procVal = conditionVar * processData * 'a fun channel () : 'a channel = CHAN {senders = ref [], receivers = ref [], chanLock = mutex(), Id = (ids := !ids+1; !ids) } datatype 'a synchResult = NoMatch | FoundMatch of 'a procVal (* Prunes the synchroniser list to remove committed choices. Returns the first non-committed synchroniser or the first committed synchroniser with a choice that is taken in the "wrong" direction (i.e. which ndicates that this process must not be allowed to communicate). *) fun getActiveSynchroniser(PROC{synchro, ...}, unlockAfter) = let fun getSynch [] = [] | getSynch(l as (SYNCH{state, synchLock}, dir) :: t) = ( lock synchLock; case ! state of ChoiceUntaken => (* This is untaken. Stop here. *) ( if unlockAfter then unlock synchLock else (getSynch t; ()); (* We need to lock any others. *) l ) | ChoiceTaken d => (* This is taken. Stop here if it is taken in a different way. *) ( unlock synchLock; if d = dir then getSynch t else l ) ) val newSynchList = getSynch(! synchro) in (* We can update the list for this process. We don't need to lock the synchro variable since it is only updated either by the process itself or when this process is waiting on a channel, which is locked before access. *) synchro := newSynchList; newSynchList end (* Try to find a matching process. toSearch is the list of corresponding processes i.e. receivers if we are trying to send, senders if we are trying to receive. The result is a pair of the updated version of the toSearch, with the matching process removed if a match has been found and the matching process's data. *) fun synchronise (toSearch: 'a procVal list, thisProcess) : 'a procVal list * 'a synchResult = let (* Release the lock on the synchroniser for the process that is looking for a partner. This is only called if no matching process can be found. *) fun releaseLock(PROC{synchro = ref synchro, ...}) = List.app (fn (SYNCH{synchLock, state=ref ChoiceUntaken}, _) => unlock synchLock | _ => ()) synchro (* Commit the choices and release the locks. If some entries are shared between the two processes then we may find some entries already set. *) fun commitChoices(PROC{synchro=synchro as ref synch, ...}) = ( List.app (fn (SYNCH{synchLock, state=state as ref ChoiceUntaken}, dir) => (state := ChoiceTaken dir; unlock synchLock) | _ => ()) synch; synchro := [] (* Since all are taken we can set this to the empty list. *) ) (* Get the first synchroniser and lock it unless it is already committed. *) val mySynch = getActiveSynchroniser(thisProcess, false (* Leave locked. *)) (* Get the list of synchronisers for a potential matching process. Generally any process on the sender list will match a receiver and vice versa. The exception is if the two processes are alternative choices. We have to be careful with the synchroniser lists. We've already locked the list for our process so we mustn't lock any synchronisers that are shared. *) datatype matchResult = MrTaken | MrAlternatives | MrOK of (synchroniser * direction) list fun getMatchingSynchs(PROC{synchro, ...}) = let fun getSynch([], _) = MrOK [] | getSynch(l as (SYNCH{state, ...}, dir) :: t, myL as (SYNCH{state=s, ...}, myDir) :: myT) = if s <> state then (* Different references - safe to lock. *) lockSynch(l, myL) else (* Same reference - already locked. *) if dir <> myDir (* These are different choices. *) then MrAlternatives (* Not allowed to communicate. *) else (* OK, same choice: test the rest*) getSynch(t, myT) | getSynch(l, []) = (* The list of synchronisers for the original process is empty or has run out before this. *) lockSynch(l, []) and lockSynch(l as (SYNCH{state, synchLock}, dir) :: t, myL) = ( lock synchLock; case ! state of ChoiceUntaken => (* This is untaken. Stop here. *) ( getSynch(t, myL); (* We need to lock any others. *) MrOK l ) | ChoiceTaken d => (* This is taken. Stop here if it is taken in a different way. *) ( unlock synchLock; if d = dir then getSynch(t, myL) else MrTaken ) ) | lockSynch _ = raise Match (* Suppress warning *) in getSynch(! synchro, mySynch) end fun findAProcess [] = (* Find a process that matches and return the new list of partners and the new list of runnable processes. *) (* No match *) ([], NoMatch) | findAProcess((entry as (p,d,v)) :: t) = case getMatchingSynchs d of MrTaken => (* This process is a committed choice in a different direction. Drop it from the list since it can never communicate. *) findAProcess t | MrAlternatives => (* This process is an alternative choice with our process. It can still communicate, just not with us. Skip this and try the next. *) let val (clist, result) = findAProcess t in (entry :: clist, result) end | MrOK synchs => (t, FoundMatch entry) (* Return the new list. *) in case mySynch of (SYNCH{state = ref (ChoiceTaken _), ...}, _) :: _ => (* This choice is already taken - kill this process. Actually all we do at this stage is pretend that the process cannot communicate, and suspend it. Later it may be removed from the channel. *) (toSearch, NoMatch) | _ => (* No synch or uncommitted choice. *) case findAProcess toSearch of t as (_, NoMatch) => (releaseLock thisProcess; t) | t as (_, FoundMatch(_,p,_)) => (commitChoices thisProcess; commitChoices p; t) end (* We need to ensure that interrupts are delivered synchronously when synchronising rather than risk receiving an interrupt while holding a lock. *) fun blockInterrupt (f: unit->'a) = let open Thread val oldState = getAttributes() in case List.find (fn InterruptState _ => true | _ => false) oldState of SOME(InterruptState InterruptDefer) => f() (* Continue to defer. *) | SOME(InterruptState InterruptSynch) => f() (* No need to change. *) | _ => (* Unset(?) or asynchronous. Have to make synchronous. *) let val () = setAttributes[InterruptState InterruptSynch] (* Call the function. It may raise an Interrupt exception if it has to wait. In that case we still need to restore the old state. *) val result = f() handle exn => (setAttributes oldState; raise exn) val () = setAttributes oldState; in result end end fun send (ch: 'a channel as CHAN {senders, receivers, chanLock, ...}, v:'a) = blockInterrupt(fn () => let val () = lock chanLock; val myProcessData as PROC { blocker, ...} = get_process_data() in case synchronise(!receivers, myProcessData) of (newlist, FoundMatch (p,_,basket)) (* Success *) => ( basket := SOME v; (* Put the sent value into the receiver's basket. *) receivers := newlist; signal p; (* Wake up the new thread. *) unlock chanLock ) | (newlist, NoMatch) (* Failure *) => (* Set the new receiver/sender list to include this process, and suspend ourselves, releasing the lock. *) ( senders := (blocker, myProcessData, v) :: !senders; receivers := newlist; (* Wait until we're woken up and release the lock. This may result in an exception but if the exception is raised the lock will be reacquired so we must unlock it in the handler. *) wait(blocker, chanLock) handle exn => (unlock chanLock; raise exn); (* We don't need the lock any longer. *) unlock chanLock ) end ) fun receive (ch: 'a channel as CHAN {senders, receivers, chanLock, ...}): 'a = blockInterrupt(fn () => let val () = lock chanLock; val myProcessData as PROC { blocker, ...} = get_process_data() in case synchronise(!senders, myProcessData) of (newlist, FoundMatch (p,_,v)) (* Success *) => ( senders := newlist; signal p; (* Wake up the sending thread. *) unlock chanLock; v (* This is our result *) ) | (newlist, NoMatch) (* Failure *) => (* Set the new receiver/sender list to include this process, and suspend ourselves, releasing the lock. *) let val basket = ref NONE; (* Create a basket to receive the result. *) in receivers := (blocker, myProcessData, basket) :: !receivers; senders := newlist; (* Wait until we're woken up and release the lock. This may result in an exception but if the exception is raised the lock will be reacquired so we must unlock it in the handler. *) wait(blocker, chanLock) handle exn => (unlock chanLock; raise exn); (* We don't need the lock any longer. *) unlock chanLock; valOf(!basket) (* This should have been set to SOME v by the sender. *) end end ) fun new_process f synch attrs = (* Make a new process. *) let val pnum = (identifiers := !identifiers+1; !identifiers); val data = PROC { synchro = ref synch, processNo = pnum, blocker = conditionVar() } fun fun_to_fork () = ( setLocal(procTag, data); (f () handle _ => ()) ) val newproc = fork(fun_to_fork, attrs) in if !debug then (PolyML.print("new_process:", data); ()) else (); newproc end fun fork f = let (* Get the parent's synchroniser and remove any redundant entries. *) val synch = getActiveSynchroniser(get_process_data(), true) val threadId = new_process f synch (* Share the parent's synchroniser. *) [EnableBroadcastInterrupt false] (* Does not accept broadcasts. *) in () end and console f = let (* Get the parent's synchroniser and remove any redundant entries. *) val synch = getActiveSynchroniser(get_process_data(), true) val threadId = new_process f synch (* Share the parent's synchroniser. *) [EnableBroadcastInterrupt true] (* Accepts broadcasts. *) in (* Return a function that will interrupt the process. *) fn () => interrupt threadId end and choice (f, g) =(* Fork a pair of "choice" processes. *) let (* Get the parent's synchroniser and remove any redundant entries. *) val synch = getActiveSynchroniser(get_process_data(), true) (* If the parent is already a Choice (whether Taken or not), we run the new processes in Parallel with it. The reason for this is that if we have choice( (choice(a,b); c), d) we allow both a and c (say) to communicate (N.B. "choice" creates two new processes and returns immediately so c runs in parallel with a and b). It is actually equivalent to a.c + b.c + d . *) val newSynch = SYNCH{state = ref ChoiceUntaken, synchLock = mutex()} in new_process g (synch @ [(newSynch, DirLeft)]) [EnableBroadcastInterrupt false]; new_process f (synch @ [(newSynch, DirRight)]) [EnableBroadcastInterrupt false]; () end val interruptConsoleProcesses = broadcastInterrupt end; polyml.5.2.1/Makefile.in0000644000175000017500000006622410723271500014050 0ustar daviddavid# Makefile.in generated by automake 1.10 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ bin_PROGRAMS = polyimport$(EXEEXT) poly$(EXEEXT) @NATIVE_WINDOWS_TRUE@am__append_1 = -mwindows -Wl,-u,_WinMain@16 @NATIVE_WINDOWS_TRUE@am__append_2 = -mwindows @NATIVE_WINDOWS_TRUE@am__append_3 = polyresource.o subdir = . DIST_COMMON = $(am__configure_deps) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(srcdir)/config.h.in \ $(top_srcdir)/configure COPYING config.guess config.sub \ depcomp install-sh ltmain.sh missing ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" binPROGRAMS_INSTALL = $(INSTALL_PROGRAM) PROGRAMS = $(bin_PROGRAMS) am_poly_OBJECTS = poly_OBJECTS = $(am_poly_OBJECTS) poly_DEPENDENCIES = $(POLYOBJECTFILE) $(POLYRESOURCES) \ libpolymain/libpolymain.la libpolyml/libpolyml.la poly_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(poly_LDFLAGS) \ $(LDFLAGS) -o $@ am_polyimport_OBJECTS = polyimport.$(OBJEXT) polyimport_OBJECTS = $(am_polyimport_OBJECTS) polyimport_DEPENDENCIES = $(POLYRESOURCES) libpolyml/libpolyml.la polyimport_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(polyimport_LDFLAGS) $(LDFLAGS) -o $@ DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = $(poly_SOURCES) $(polyimport_SOURCES) DIST_SOURCES = $(poly_SOURCES) $(polyimport_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive man1dir = $(mandir)/man1 NROFF = nroff MANS = $(man_MANS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ { test ! -d $(distdir) \ || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -fr $(distdir); }; } DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best distuninstallcheck_listfiles = find . -type f -print distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCAS = @CCAS@ CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ ECHO = @ECHO@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSFLAG = @OSFLAG@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ POW_LIB = @POW_LIB@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ XMKMF = @XMKMF@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_F77 = @ac_ct_F77@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = foreign AM_CPPFLAGS = $(ARCHFLAG) $(OSFLAG) -Wall AM_CFLAGS = $(ARCHFLAG) $(OSFLAG) -Wall -fno-strict-aliasing POLYIMPORT_OPTIONS = -H 10 BOOTSTRAP_OPTIONS = -H 10 SUBDIRS = libpolyml libpolymain man_MANS = poly.1 polyimport.1 @ARCHI386_FALSE@@ARCHINTERPRET64_FALSE@@ARCHINTERPRET_FALSE@@ARCHPPC_FALSE@@ARCHSPARC_FALSE@@ARCHX86_64_TRUE@POLYIMPORT = imports/polymlx86_64.txt @ARCHI386_FALSE@@ARCHINTERPRET64_TRUE@@ARCHINTERPRET_FALSE@@ARCHPPC_FALSE@@ARCHSPARC_FALSE@POLYIMPORT = imports/polymlint64.txt @ARCHI386_FALSE@@ARCHINTERPRET_TRUE@@ARCHPPC_FALSE@@ARCHSPARC_FALSE@POLYIMPORT = imports/polymlint.txt @ARCHI386_FALSE@@ARCHPPC_FALSE@@ARCHSPARC_TRUE@POLYIMPORT = imports/polymlsparc.txt @ARCHI386_FALSE@@ARCHPPC_TRUE@POLYIMPORT = imports/polymlppc.txt # Select the architecture-specific modules @ARCHI386_TRUE@POLYIMPORT = imports/polymli386.txt poly_LDFLAGS = $(am__append_1) polyimport_LDFLAGS = $(am__append_2) POLYRESOURCES = $(am__append_3) @NATIVE_WINDOWS_FALSE@POLYOBJECTFILE = polyexport.o @NATIVE_WINDOWS_TRUE@POLYOBJECTFILE = polyexport.obj poly_SOURCES = poly_LDADD = $(POLYOBJECTFILE) $(POLYRESOURCES) libpolymain/libpolymain.la libpolyml/libpolyml.la polyimport_SOURCES = polyimport.c polyimport_LDADD = $(POLYRESOURCES) libpolyml/libpolyml.la all: config.h $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: .SUFFIXES: .c .lo .o .obj am--refresh: @: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --foreign '; \ cd $(srcdir) && $(AUTOMAKE) --foreign \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --foreign Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) config.h: stamp-h1 @if test ! -f $@; then \ rm -f stamp-h1; \ $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \ else :; fi stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status config.h $(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_srcdir) && $(AUTOHEADER) rm -f stamp-h1 touch $@ distclean-hdr: -rm -f config.h stamp-h1 install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" @list='$(bin_PROGRAMS)'; for p in $$list; do \ p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ if test -f $$p \ || test -f $$p1 \ ; then \ f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \ else :; fi; \ done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; for p in $$list; do \ f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \ echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \ rm -f "$(DESTDIR)$(bindir)/$$f"; \ done clean-binPROGRAMS: @list='$(bin_PROGRAMS)'; for p in $$list; do \ f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ echo " rm -f $$p $$f"; \ rm -f $$p $$f ; \ done poly$(EXEEXT): $(poly_OBJECTS) $(poly_DEPENDENCIES) @rm -f poly$(EXEEXT) $(poly_LINK) $(poly_OBJECTS) $(poly_LDADD) $(LIBS) polyimport$(EXEEXT): $(polyimport_OBJECTS) $(polyimport_DEPENDENCIES) @rm -f polyimport$(EXEEXT) $(polyimport_LINK) $(polyimport_OBJECTS) $(polyimport_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/polyimport.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool install-man1: $(man1_MANS) $(man_MANS) @$(NORMAL_INSTALL) test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)" @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \ l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ for i in $$l2; do \ case "$$i" in \ *.1*) list="$$list $$i" ;; \ esac; \ done; \ for i in $$list; do \ if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \ else file=$$i; fi; \ ext=`echo $$i | sed -e 's/^.*\\.//'`; \ case "$$ext" in \ 1*) ;; \ *) ext='1' ;; \ esac; \ inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ inst=`echo $$inst | sed -e 's/^.*\///'`; \ inst=`echo $$inst | sed '$(transform)'`.$$ext; \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst"; \ done uninstall-man1: @$(NORMAL_UNINSTALL) @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \ l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ for i in $$l2; do \ case "$$i" in \ *.1*) list="$$list $$i" ;; \ esac; \ done; \ for i in $$list; do \ ext=`echo $$i | sed -e 's/^.*\\.//'`; \ case "$$ext" in \ 1*) ;; \ *) ext='1' ;; \ esac; \ inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ inst=`echo $$inst | sed -e 's/^.*\///'`; \ inst=`echo $$inst | sed '$(transform)'`.$$ext; \ echo " rm -f '$(DESTDIR)$(man1dir)/$$inst'"; \ rm -f "$(DESTDIR)$(man1dir)/$$inst"; \ done # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) $(am__remove_distdir) test -d $(distdir) || mkdir $(distdir) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ distdir=`$(am__cd) $(distdir) && pwd`; \ top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ (cd $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$top_distdir" \ distdir="$$distdir/$$subdir" \ am__remove_distdir=: \ am__skip_length_check=: \ distdir) \ || exit 1; \ fi; \ done -find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r $(distdir) dist-gzip: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 $(am__remove_distdir) dist-tarZ: distdir tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__remove_distdir) dist-shar: distdir shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__remove_distdir) dist dist-all: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir); chmod a+w $(distdir) mkdir $(distdir)/_build mkdir $(distdir)/_inst chmod a-w $(distdir) dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && cd $(distdir)/_build \ && ../configure --srcdir=.. --prefix="$$dc_install_base" \ $(DISTCHECK_CONFIGURE_FLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck $(am__remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @cd $(distuninstallcheck_dir) \ && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: check-recursive all-am: Makefile $(PROGRAMS) $(MANS) config.h installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-binPROGRAMS clean-generic clean-libtool clean-local \ mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-hdr distclean-libtool distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive info: info-recursive info-am: install-data-am: install-man install-dvi: install-dvi-recursive install-exec-am: install-binPROGRAMS install-html: install-html-recursive install-info: install-info-recursive install-man: install-man1 install-pdf: install-pdf-recursive install-ps: install-ps-recursive installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-man uninstall-man: uninstall-man1 .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ install-strip .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am am--refresh check check-am clean clean-binPROGRAMS \ clean-generic clean-libtool clean-local ctags ctags-recursive \ dist dist-all dist-bzip2 dist-gzip dist-shar dist-tarZ \ dist-zip distcheck distclean distclean-compile \ distclean-generic distclean-hdr distclean-libtool \ distclean-tags distcleancheck distdir distuninstallcheck dvi \ dvi-am html html-am info info-am install install-am \ install-binPROGRAMS install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-man1 install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-recursive uninstall uninstall-am \ uninstall-binPROGRAMS uninstall-man uninstall-man1 # polyexport.o: polyimport exportPoly.sml polytemp.txt ./polyimport $(POLYIMPORT_OPTIONS) polytemp.txt < exportPoly.sml > /dev/null polyexport.obj: polyimport exportPoly.sml polytemp.txt ./polyimport $(POLYIMPORT_OPTIONS) polytemp.txt < exportPoly.sml > /dev/null polyresource.o: PolyML.rc poly.ico windres -o polyresource.o PolyML.rc polytemp.txt: $(POLYIMPORT) cp $(POLYIMPORT) polytemp.txt # This builds the compiler but does not update the files in the imports directory. # It then builds a version of poly containing the new compiler. cvs: all ./poly $(BOOTSTRAP_OPTIONS) < mlsource/BuildExport.sml $(MAKE) reboot: cvs cp polytemp.txt $(POLYIMPORT) clean-local: rm -f *.obj polytemp.txt # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: polyml.5.2.1/PPolyML.dsp0000644000175000017500000001633210673227373014017 0ustar daviddavid# Microsoft Developer Studio Project File - Name="PPolyML" - Package Owner=<4> # Microsoft Developer Studio Generated Build File, Format Version 6.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Application" 0x0101 CFG=PPolyML - Win32 IntDebug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE !MESSAGE NMAKE /f "PPolyML.mak". !MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "PPolyML.mak" CFG="PPolyML - Win32 IntDebug" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "PPolyML - Win32 Release" (based on "Win32 (x86) Application") !MESSAGE "PPolyML - Win32 Debug" (based on "Win32 (x86) Application") !MESSAGE "PPolyML - Win32 IntDebug" (based on "Win32 (x86) Application") !MESSAGE "PPolyML - Win32 IntRelease" (based on "Win32 (x86) Application") !MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 # PROP Scc_ProjName "" # PROP Scc_LocalPath "" CPP=cl.exe MTL=midl.exe RSC=rc.exe !IF "$(CFG)" == "PPolyML - Win32 Release" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "PPolyML___Win32_Release" # PROP BASE Intermediate_Dir "PPolyML___Win32_Release" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "Release" # PROP Intermediate_Dir "Release" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c # ADD CPP /nologo /MT /W3 /GX /O2 /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "WINDOWS_PC" /YX /FD /c # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x809 /d "NDEBUG" # ADD RSC /l 0x809 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 # ADD LINK32 libcmt.lib kernel32.lib user32.lib wsock32.lib gdi32.lib comdlg32.lib advapi32.lib shell32.lib /nologo /subsystem:windows /machine:I386 /out:"Release/PolyImport.exe" # SUBTRACT LINK32 /pdb:none !ELSEIF "$(CFG)" == "PPolyML - Win32 Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "PPolyML___Win32_Debug" # PROP BASE Intermediate_Dir "PPolyML___Win32_Debug" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "Debug" # PROP Intermediate_Dir "Debug" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /GZ /c # ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "WINDOWS_PC" /YX /FD /GZ /c # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x809 /d "_DEBUG" # ADD RSC /l 0x809 /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept # ADD LINK32 libcmtd.lib kernel32.lib user32.lib wsock32.lib gdi32.lib comdlg32.lib advapi32.lib shell32.lib /nologo /subsystem:windows /debug /machine:I386 /out:"Debug/PolyImport.exe" /pdbtype:sept /libpath:"llibpolyml\Debug libpolymain\Debug" # SUBTRACT LINK32 /pdb:none !ELSEIF "$(CFG)" == "PPolyML - Win32 IntDebug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "PPolyML___Win32_IntDebug" # PROP BASE Intermediate_Dir "PPolyML___Win32_IntDebug" # PROP BASE Ignore_Export_Lib 0 # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "IntDebug" # PROP Intermediate_Dir "IntDebug" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /GZ /c # ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "WINDOWS_PC" /YX /FD /GZ /c # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x809 /d "_DEBUG" # ADD RSC /l 0x809 /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 libcmtd.lib kernel32.lib user32.lib wsock32.lib gdi32.lib comdlg32.lib advapi32.lib shell32.lib /nologo /subsystem:windows /debug /machine:I386 /out:"Debug/PolyImport.exe" /pdbtype:sept /libpath:"llibpolyml\Debug libpolymain\Debug" # SUBTRACT BASE LINK32 /pdb:none # ADD LINK32 libcmtd.lib kernel32.lib user32.lib wsock32.lib gdi32.lib comdlg32.lib advapi32.lib shell32.lib /nologo /subsystem:windows /debug /machine:I386 /out:"IntDebug\PolyImport.exe" /pdbtype:sept # SUBTRACT LINK32 /pdb:none !ELSEIF "$(CFG)" == "PPolyML - Win32 IntRelease" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "PPolyML___Win32_IntRelease" # PROP BASE Intermediate_Dir "PPolyML___Win32_IntRelease" # PROP BASE Ignore_Export_Lib 0 # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "IntRelease" # PROP Intermediate_Dir "IntRelease" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c # ADD CPP /nologo /MT /W3 /GX /O2 /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "WINDOWS_PC" /YX /FD /c # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x809 /d "NDEBUG" # ADD RSC /l 0x809 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 libcmt.lib kernel32.lib user32.lib wsock32.lib gdi32.lib comdlg32.lib advapi32.lib shell32.lib /nologo /subsystem:windows /machine:I386 /out:"Release/PolyImport.exe" # SUBTRACT BASE LINK32 /pdb:none # ADD LINK32 libcmt.lib kernel32.lib user32.lib wsock32.lib gdi32.lib comdlg32.lib advapi32.lib shell32.lib /nologo /subsystem:windows /machine:I386 /out:"IntRelease\PolyImport.exe" # SUBTRACT LINK32 /pdb:none !ENDIF # Begin Target # Name "PPolyML - Win32 Release" # Name "PPolyML - Win32 Debug" # Name "PPolyML - Win32 IntDebug" # Name "PPolyML - Win32 IntRelease" # Begin Group "Source Files" # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" # Begin Source File SOURCE=.\polyimport.c # End Source File # Begin Source File SOURCE=.\PolyML.rc # End Source File # End Group # Begin Group "Header Files" # PROP Default_Filter "h;hpp;hxx;hm;inl" # Begin Source File SOURCE=.\polyexports.h # End Source File # End Group # Begin Group "Resource Files" # PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" # Begin Source File SOURCE=.\poly.ico # End Source File # End Group # End Target # End Project polyml.5.2.1/PolyML.dsp0000644000175000017500000001777110676750103013702 0ustar daviddavid# Microsoft Developer Studio Project File - Name="PolyML" - Package Owner=<4> # Microsoft Developer Studio Generated Build File, Format Version 6.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Console Application" 0x0103 CFG=PolyML - Win32 IntDebug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE !MESSAGE NMAKE /f "PolyML.mak". !MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "PolyML.mak" CFG="PolyML - Win32 IntDebug" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "PolyML - Win32 Release" (based on "Win32 (x86) Console Application") !MESSAGE "PolyML - Win32 Debug" (based on "Win32 (x86) Console Application") !MESSAGE "PolyML - Win32 IntDebug" (based on "Win32 (x86) Console Application") !MESSAGE "PolyML - Win32 IntRelease" (based on "Win32 (x86) Console Application") !MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 # PROP Scc_ProjName "" # PROP Scc_LocalPath "H/PC Ver. 2.00" CPP=cl.exe RSC=rc.exe !IF "$(CFG)" == "PolyML - Win32 Release" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "Release" # PROP BASE Intermediate_Dir "Release" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "Release" # PROP Intermediate_Dir "Release" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c # ADD CPP /nologo /MT /W3 /GX /O2 /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "WINDOWS_PC" /D "i386" /YX /FD /Zm500 /c # ADD BASE RSC /l 0x809 /d "NDEBUG" # ADD RSC /l 0x809 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 # ADD LINK32 libcmt.lib /nologo /subsystem:windows /incremental:yes /map /machine:I386 # SUBTRACT LINK32 /pdb:none !ELSEIF "$(CFG)" == "PolyML - Win32 Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "Debug" # PROP BASE Intermediate_Dir "Debug" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "Debug" # PROP Intermediate_Dir "Debug" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c # ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "WINDOWS_PC" /D "i386" /YX /FD /Zm500 /c # ADD BASE RSC /l 0x809 /d "_DEBUG" # ADD RSC /l 0x809 /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept # ADD LINK32 libcmtd.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept /libpath:"llibpolyml\Debug libpolymain\Debug" # SUBTRACT LINK32 /pdb:none !ELSEIF "$(CFG)" == "PolyML - Win32 IntDebug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "PolyML___Win32_IntDebug" # PROP BASE Intermediate_Dir "PolyML___Win32_IntDebug" # PROP BASE Ignore_Export_Lib 0 # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "IntDebug" # PROP Intermediate_Dir "IntDebug" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "WINDOWS_PC" /D "i386" /YX /FD /Zm500 /c # ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "WINDOWS_PC" /D "i386" /YX /FD /Zm500 /c # ADD BASE RSC /l 0x809 /d "_DEBUG" # ADD RSC /l 0x809 /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 libcmtd.lib kernel32.lib user32.lib wsock32.lib gdi32.lib comdlg32.lib advapi32.lib shell32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept /libpath:"llibpolyml\Debug libpolymain\Debug" # SUBTRACT BASE LINK32 /pdb:none # ADD LINK32 libcmtd.lib kernel32.lib user32.lib wsock32.lib gdi32.lib comdlg32.lib advapi32.lib shell32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept /libpath:"llibpolyml\Debug libpolymain\Debug" # SUBTRACT LINK32 /pdb:none !ELSEIF "$(CFG)" == "PolyML - Win32 IntRelease" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "PolyML___Win32_IntRelease" # PROP BASE Intermediate_Dir "PolyML___Win32_IntRelease" # PROP BASE Ignore_Export_Lib 0 # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "IntRelease" # PROP Intermediate_Dir "IntRelease" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "WINDOWS_PC" /D "i386" /YX /FD /Zm500 /c # ADD CPP /nologo /MT /W3 /GX /O2 /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "WINDOWS_PC" /D "i386" /YX /FD /Zm500 /c # ADD BASE RSC /l 0x809 /d "NDEBUG" # ADD RSC /l 0x809 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 libcmt.lib kernel32.lib user32.lib wsock32.lib gdi32.lib comdlg32.lib advapi32.lib shell32.lib /nologo /subsystem:windows /incremental:yes /map /machine:I386 # SUBTRACT BASE LINK32 /pdb:none # ADD LINK32 libcmt.lib kernel32.lib user32.lib wsock32.lib gdi32.lib comdlg32.lib advapi32.lib shell32.lib /nologo /subsystem:windows /incremental:yes /map /machine:I386 # SUBTRACT LINK32 /pdb:none !ENDIF # Begin Target # Name "PolyML - Win32 Release" # Name "PolyML - Win32 Debug" # Name "PolyML - Win32 IntDebug" # Name "PolyML - Win32 IntRelease" # Begin Group "Source Files" # PROP Default_Filter "c;cpp;rc" # Begin Source File SOURCE=.\imports\polymli386.txt !IF "$(CFG)" == "PolyML - Win32 Release" # Begin Custom Build IntDir=.\Release InputPath=.\imports\polymli386.txt "$(IntDir)\polyexport.obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" $(IntDir)\PolyImport.exe $(InputPath) -o $(IntDir)\polyexport.obj < exportPoly.sml # End Custom Build !ELSEIF "$(CFG)" == "PolyML - Win32 Debug" # Begin Custom Build IntDir=.\Debug InputPath=.\imports\polymli386.txt "$(IntDir)\polyexport.obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" $(IntDir)\PolyImport.exe $(InputPath) -o $(IntDir)\polyexport.obj < exportPoly.sml # End Custom Build !ELSEIF "$(CFG)" == "PolyML - Win32 IntDebug" # PROP Exclude_From_Build 1 !ELSEIF "$(CFG)" == "PolyML - Win32 IntRelease" # PROP Exclude_From_Build 1 !ENDIF # End Source File # Begin Source File SOURCE=.\imports\polymlint.txt !IF "$(CFG)" == "PolyML - Win32 Release" # PROP Exclude_From_Build 1 !ELSEIF "$(CFG)" == "PolyML - Win32 Debug" # PROP Exclude_From_Build 1 !ELSEIF "$(CFG)" == "PolyML - Win32 IntDebug" # Begin Custom Build IntDir=.\IntDebug InputPath=.\imports\polymlint.txt "$(IntDir)\polyexport.obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" $(IntDir)\PolyImport.exe $(InputPath) -o $(IntDir)\polyexport.obj < exportPoly.sml # End Custom Build !ELSEIF "$(CFG)" == "PolyML - Win32 IntRelease" # Begin Custom Build IntDir=.\IntRelease InputPath=.\imports\polymlint.txt "$(IntDir)\polyexport.obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" $(IntDir)\PolyImport.exe $(InputPath) -o $(IntDir)\polyexport.obj < exportPoly.sml # End Custom Build !ENDIF # End Source File # End Group # Begin Group "Header Files" # PROP Default_Filter "h" # End Group # Begin Group "Resource Files" # PROP Default_Filter "ico" # Begin Source File SOURCE=.\poly.ico # End Source File # Begin Source File SOURCE=.\PolyML.rc # End Source File # End Group # End Target # End Project polyml.5.2.1/PolyML.dsw0000644000175000017500000000273010506226524013673 0ustar daviddavidMicrosoft Developer Studio Workspace File, Format Version 6.00 # WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! ############################################################################### Project: "PPolyML"=".\PPolyML.dsp" - Package Owner=<4> Package=<5> {{{ }}} Package=<4> {{{ Begin Project Dependency Project_Dep_Name PolyLib End Project Dependency }}} ############################################################################### Project: "PolyLib"=".\libpolyml\PolyLib.dsp" - Package Owner=<4> Package=<5> {{{ }}} Package=<4> {{{ }}} ############################################################################### Project: "PolyML"=".\PolyML.dsp" - Package Owner=<4> Package=<5> {{{ }}} Package=<4> {{{ Begin Project Dependency Project_Dep_Name PolyLib End Project Dependency Begin Project Dependency Project_Dep_Name PolyMainLib End Project Dependency Begin Project Dependency Project_Dep_Name PPolyML End Project Dependency }}} ############################################################################### Project: "PolyMainLib"=".\libpolymain\PolyMainLib.dsp" - Package Owner=<4> Package=<5> {{{ }}} Package=<4> {{{ }}} ############################################################################### Global: Package=<5> {{{ }}} Package=<3> {{{ }}} ############################################################################### polyml.5.2.1/PolyML.rc0000644000175000017500000001025311076111331013471 0ustar daviddavid//Microsoft Developer Studio generated resource script. // #include "resource.h" #define APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////////////// // // Generated from the TEXTINCLUDE 2 resource. // #include "windows.h" ///////////////////////////////////////////////////////////////////////////// #undef APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////////////// // English (U.K.) resources #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENG) #ifdef _WIN32 LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_UK #pragma code_page(1252) #endif //_WIN32 #ifdef APSTUDIO_INVOKED ///////////////////////////////////////////////////////////////////////////// // // TEXTINCLUDE // 1 TEXTINCLUDE DISCARDABLE BEGIN "resource.h\0" END 2 TEXTINCLUDE DISCARDABLE BEGIN "#include ""windows.h""\r\n" "\0" END 3 TEXTINCLUDE DISCARDABLE BEGIN "\r\n" "\0" END #endif // APSTUDIO_INVOKED ///////////////////////////////////////////////////////////////////////////// // // Menu // IDR_MENU MENU DISCARDABLE BEGIN POPUP "&File" BEGIN MENUITEM "&Quit", ID_FILE_QUIT END POPUP "&Edit" BEGIN MENUITEM "&Copy", ID_EDIT_COPY MENUITEM "&Paste", ID_EDIT_PASTE END POPUP "&Run" BEGIN MENUITEM "&Interrupt", ID_RUN_INTERRUPT END POPUP "&Help" BEGIN MENUITEM "&About Poly/ML...", ID_HELP_ABOUT END END ///////////////////////////////////////////////////////////////////////////// // // Dialog // IDD_ABOUT_POLYML DIALOG DISCARDABLE 0, 0, 217, 113 STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_CAPTION | WS_SYSMENU FONT 8, "MS Sans Serif" BEGIN DEFPUSHBUTTON "OK",IDOK,7,92,50,14 LTEXT "Poly/ML Copyright David C.J. Matthews, Cambridge University Technical Services and contributors 2000-8.\n\nThis is free software and released under the GNU Lesser General Public License.", IDC_STATIC,24,30,141,47 ICON IDI_ICON,IDC_STATIC,7,7,20,20 END ///////////////////////////////////////////////////////////////////////////// // // DESIGNINFO // #ifdef APSTUDIO_INVOKED GUIDELINES DESIGNINFO DISCARDABLE BEGIN IDD_ABOUT_POLYML, DIALOG BEGIN LEFTMARGIN, 7 RIGHTMARGIN, 210 TOPMARGIN, 7 BOTTOMMARGIN, 106 END END #endif // APSTUDIO_INVOKED ///////////////////////////////////////////////////////////////////////////// // // Icon // // Icon with lowest ID value placed first to ensure application icon // remains consistent on all systems. IDI_ICON ICON DISCARDABLE "poly.ico" #ifndef _MAC ///////////////////////////////////////////////////////////////////////////// // // Version // VS_VERSION_INFO VERSIONINFO FILEVERSION 5,2,1,0 PRODUCTVERSION 5,2,1,0 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L #else FILEFLAGS 0x0L #endif FILEOS 0x40004L FILETYPE 0x1L FILESUBTYPE 0x0L BEGIN BLOCK "StringFileInfo" BEGIN BLOCK "080904b0" BEGIN VALUE "Comments", "\0" VALUE "CompanyName", " \0" VALUE "FileDescription", "PolyML v5.2.1\0" VALUE "FileVersion", "5.2.1\0" VALUE "InternalName", "PolyML\0" VALUE "LegalCopyright", "Copyright © CUTS, David Matthews and contributors 2000-2008\0" VALUE "LegalTrademarks", "\0" VALUE "OriginalFilename", "PolyML.exe\0" VALUE "PrivateBuild", "\0" VALUE "ProductName", "PolyML\0" VALUE "ProductVersion", "5.2.1\0" VALUE "SpecialBuild", "\0" END END BLOCK "VarFileInfo" BEGIN VALUE "Translation", 0x809, 1200 END END #endif // !_MAC #endif // English (U.K.) resources ///////////////////////////////////////////////////////////////////////////// #ifndef APSTUDIO_INVOKED ///////////////////////////////////////////////////////////////////////////// // // Generated from the TEXTINCLUDE 3 resource. // ///////////////////////////////////////////////////////////////////////////// #endif // not APSTUDIO_INVOKED polyml.5.2.1/config.guess0000644000175000017500000012206510506226524014321 0ustar daviddavid#! /bin/sh # Attempt to guess a canonical system name. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003 Free Software Foundation, Inc. timestamp='2003-06-17' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Per Bothner . # Please send patches to . Submit a context # diff and a properly formatted ChangeLog entry. # # This script attempts to guess a canonical system name similar to # config.sub. If it succeeds, it prints the system name on stdout, and # exits with 0. Otherwise, it exits with 1. # # The plan is that this can be called by configure scripts if you # don't specify an explicit build system type. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit 0 ;; --version | -v ) echo "$version" ; exit 0 ;; --help | --h* | -h ) echo "$usage"; exit 0 ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d -q "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown ## for Red Hat Linux if test -f /etc/redhat-release ; then VENDOR=redhat ; else VENDOR= ; fi # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep __ELF__ >/dev/null then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit 0 ;; amiga:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; arc:OpenBSD:*:*) echo mipsel-unknown-openbsd${UNAME_RELEASE} exit 0 ;; hp300:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mac68k:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; macppc:OpenBSD:*:*) echo powerpc-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mvme68k:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mvme88k:OpenBSD:*:*) echo m88k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mvmeppc:OpenBSD:*:*) echo powerpc-unknown-openbsd${UNAME_RELEASE} exit 0 ;; pmax:OpenBSD:*:*) echo mipsel-unknown-openbsd${UNAME_RELEASE} exit 0 ;; sgi:OpenBSD:*:*) echo mipseb-unknown-openbsd${UNAME_RELEASE} exit 0 ;; sun3:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; wgrisc:OpenBSD:*:*) echo mipsel-unknown-openbsd${UNAME_RELEASE} exit 0 ;; *:OpenBSD:*:*) echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE} exit 0 ;; alpha:OSF1:*:*) if test $UNAME_RELEASE = "V4.0"; then UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` fi # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE="alpha" ;; "EV4.5 (21064)") UNAME_MACHINE="alpha" ;; "LCA4 (21066/21068)") UNAME_MACHINE="alpha" ;; "EV5 (21164)") UNAME_MACHINE="alphaev5" ;; "EV5.6 (21164A)") UNAME_MACHINE="alphaev56" ;; "EV5.6 (21164PC)") UNAME_MACHINE="alphapca56" ;; "EV5.7 (21164PC)") UNAME_MACHINE="alphapca57" ;; "EV6 (21264)") UNAME_MACHINE="alphaev6" ;; "EV6.7 (21264A)") UNAME_MACHINE="alphaev67" ;; "EV6.8CB (21264C)") UNAME_MACHINE="alphaev68" ;; "EV6.8AL (21264B)") UNAME_MACHINE="alphaev68" ;; "EV6.8CX (21264D)") UNAME_MACHINE="alphaev68" ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE="alphaev69" ;; "EV7 (21364)") UNAME_MACHINE="alphaev7" ;; "EV7.9 (21364A)") UNAME_MACHINE="alphaev79" ;; esac # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` exit 0 ;; Alpha*:OpenVMS:*:*) echo alpha-hp-vms exit 0 ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit 0 ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit 0 ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit 0;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit 0 ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit 0 ;; *:OS/390:*:*) echo i370-ibm-openedition exit 0 ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit 0;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit 0;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit 0 ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit 0 ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit 0 ;; DRS?6000:UNIX_SV:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7 && exit 0 ;; esac ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; i86pc:SunOS:5.*:*) echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit 0 ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit 0 ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit 0 ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit 0 ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit 0 ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit 0 ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit 0 ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit 0 ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit 0 ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit 0 ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit 0 ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit 0 ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit 0 ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit 0 ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit 0 ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c \ && $dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \ && exit 0 echo mips-mips-riscos${UNAME_RELEASE} exit 0 ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit 0 ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit 0 ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit 0 ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit 0 ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit 0 ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit 0 ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit 0 ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit 0 ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit 0 ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit 0 ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit 0 ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit 0 ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit 0 ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit 0 ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit 0 ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0 echo rs6000-ibm-aix3.2.5 elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit 0 ;; *:AIX:*:[45]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit 0 ;; *:AIX:*:*) echo rs6000-ibm-aix exit 0 ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit 0 ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit 0 ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit 0 ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit 0 ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit 0 ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit 0 ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ ${HP_ARCH} = "hppa2.0w" ] then # avoid double evaluation of $set_cc_for_build test -n "$CC_FOR_BUILD" || eval $set_cc_for_build if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E -) | grep __LP64__ >/dev/null then HP_ARCH="hppa2.0w" else HP_ARCH="hppa64" fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit 0 ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit 0 ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0 echo unknown-hitachi-hiuxwe2 exit 0 ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit 0 ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit 0 ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit 0 ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit 0 ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit 0 ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit 0 ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit 0 ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit 0 ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit 0 ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit 0 ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit 0 ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit 0 ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; *:UNICOS/mp:*:*) echo nv1-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit 0 ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit 0 ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit 0 ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit 0 ;; *:FreeBSD:*:*|*:GNU/FreeBSD:*:*) # Determine whether the default compiler uses glibc. eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include #if __GLIBC__ >= 2 LIBC=gnu #else LIBC= #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=` echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`${LIBC:+-$LIBC} exit 0 ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit 0 ;; i*:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit 0 ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit 0 ;; x86:Interix*:[34]*) echo i586-pc-interix${UNAME_RELEASE}|sed -e 's/\..*//' exit 0 ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit 0 ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i586-pc-interix exit 0 ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit 0 ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit 0 ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; *:GNU:*:*) echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit 0 ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit 0 ;; arm*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; cris:Linux:*:*) echo cris-axis-linux-gnu exit 0 ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-${VENDOR:-unknown}-linux-gnu exit 0 ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; mips:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef mips #undef mipsel #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=mipsel #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=mips #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=` test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0 ;; mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef mips64 #undef mips64el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=mips64el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=mips64 #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=` test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0 ;; ppc:Linux:*:*) echo powerpc-${VENDOR:-unknown}-linux-gnu exit 0 ;; ppc64:Linux:*:*) echo powerpc64-${VENDOR:-unknown}-linux-gnu exit 0 ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} exit 0 ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-gnu ;; PA8*) echo hppa2.0-unknown-linux-gnu ;; *) echo hppa-unknown-linux-gnu ;; esac exit 0 ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-gnu exit 0 ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-${VENDOR:-ibm}-linux-gnu exit 0 ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; x86_64:Linux:*:*) echo x86_64-${VENDOR:-unknown}-linux-gnu exit 0 ;; i*86:Linux:*:*) # The BFD linker knows what the default object file format is, so # first see if it will tell us. cd to the root directory to prevent # problems with other programs or directories called `ld' in the path. # Set LC_ALL=C to ensure ld outputs messages in English. ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ | sed -ne '/supported targets:/!d s/[ ][ ]*/ /g s/.*supported targets: *// s/ .*// p'` case "$ld_supported_targets" in elf32-i386) TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" ;; a.out-i386-linux) echo "${UNAME_MACHINE}-pc-linux-gnuaout" exit 0 ;; coff-i386) echo "${UNAME_MACHINE}-pc-linux-gnucoff" exit 0 ;; "") # Either a pre-BFD a.out linker (linux-gnuoldld) or # one that does not give us useful --help. echo "${UNAME_MACHINE}-pc-linux-gnuoldld" exit 0 ;; esac # Determine whether the default compiler is a.out or elf eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include #ifdef __ELF__ # ifdef __GLIBC__ # if __GLIBC__ >= 2 LIBC=gnu # else LIBC=gnulibc1 # endif # else LIBC=gnulibc1 # endif #else #ifdef __INTEL_COMPILER LIBC=gnu #else LIBC=gnuaout #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=` test x"${LIBC}" != x && echo "${UNAME_MACHINE}-${VENDOR:-pc}-linux-${LIBC}" && exit 0 test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0 ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit 0 ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit 0 ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit 0 ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit 0 ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit 0 ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit 0 ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit 0 ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit 0 ;; i*86:*:5:[78]*) case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit 0 ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit 0 ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i386. echo i386-pc-msdosdjgpp exit 0 ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit 0 ;; paragon:*:*:*) echo i860-intel-osf1 exit 0 ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit 0 ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit 0 ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit 0 ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit 0 ;; M68*:*:R3V[567]*:*) test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;; 3[34]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && echo i486-ncr-sysv4.3${OS_REL} && exit 0 /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && echo i486-ncr-sysv4 && exit 0 ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit 0 ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit 0 ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit 0 ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit 0 ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit 0 ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit 0 ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit 0 ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit 0 ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit 0 ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit 0 ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit 0 ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit 0 ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit 0 ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit 0 ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit 0 ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit 0 ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit 0 ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit 0 ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit 0 ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit 0 ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit 0 ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit 0 ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit 0 ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit 0 ;; *:Darwin:*:*) case `uname -p` in *86) UNAME_PROCESSOR=i686 ;; powerpc) UNAME_PROCESSOR=powerpc ;; esac echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit 0 ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = "x86"; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit 0 ;; *:QNX:*:4*) echo i386-pc-qnx exit 0 ;; NSR-[DGKLNPTVW]:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit 0 ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit 0 ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit 0 ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit 0 ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = "386"; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit 0 ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit 0 ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit 0 ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit 0 ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit 0 ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit 0 ;; *:ITS:*:*) echo pdp10-unknown-its exit 0 ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit 0 ;; esac #echo '(No uname command or uname output not recognized.)' 1>&2 #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 eval $set_cc_for_build cat >$dummy.c < # include #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (__arm) && defined (__acorn) && defined (__unix) printf ("arm-acorn-riscix"); exit (0); #endif #if defined (hp300) && !defined (hpux) printf ("m68k-hp-bsd\n"); exit (0); #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) # if !defined (ultrix) # include # if defined (BSD) # if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); # else # if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); # else printf ("vax-dec-bsd\n"); exit (0); # endif # endif # else printf ("vax-dec-bsd\n"); exit (0); # endif # else printf ("vax-dec-ultrix\n"); exit (0); # endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && $dummy && exit 0 # Apollos put the system type in the environment. test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; } # Convex versions that predate uname can use getsysinfo(1) if [ -x /usr/convex/getsysinfo ] then case `getsysinfo -f cpu_type` in c1*) echo c1-convex-bsd exit 0 ;; c2*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit 0 ;; c34*) echo c34-convex-bsd exit 0 ;; c38*) echo c38-convex-bsd exit 0 ;; c4*) echo c4-convex-bsd exit 0 ;; esac fi cat >&2 < in order to provide the needed information to handle your system. config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: polyml.5.2.1/config.h.in0000644000175000017500000004166211046517174014036 0ustar daviddavid/* config.h.in. Generated from configure.ac by autoheader. */ #ifndef CONF_H_INCLUDED #define CONF_H_INCLUDED /* Define to 1 if the `closedir' function returns void instead of `int'. */ #undef CLOSEDIR_VOID /* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP systems. This function is required for `alloca.c' support on those systems. */ #undef CRAY_STACKSEG_END /* Define to 1 if using `alloca.c'. */ #undef C_ALLOCA /* Define to the type of elements in the array set by `getgroups'. Usually this is either `int' or `gid_t'. */ #undef GETGROUPS_T /* Define to 1 if the `getpgrp' function requires zero arguments. */ #undef GETPGRP_VOID /* Define to 1 if you have `alloca', as a function or macro. */ #undef HAVE_ALLOCA /* Define to 1 if you have and it should be used (not on Ultrix). */ #undef HAVE_ALLOCA_H /* Define to 1 if you have the header file. */ #undef HAVE_ASSERT_H /* Define to 1 if you have the `bzero' function. */ #undef HAVE_BZERO /* Define to 1 if your system has a working `chown' function. */ #undef HAVE_CHOWN /* Define to 1 if you have the header file. */ #undef HAVE_CTYPE_H /* Define to 1 if you have the header file. */ #undef HAVE_DIRECT_H /* Define to 1 if you have the header file, and it defines `DIR'. */ #undef HAVE_DIRENT_H /* Define to 1 if you have the header file. */ #undef HAVE_DLFCN_H /* Define to 1 if you have the `dlopen' function. */ #undef HAVE_DLOPEN /* Define to 1 if you don't have `vprintf' but do have `_doprnt.' */ #undef HAVE_DOPRNT /* Define to 1 if you have the `dtoa' function. */ #undef HAVE_DTOA /* Define to 1 if you have the `dup2' function. */ #undef HAVE_DUP2 /* Define to 1 if you have the header file. */ #undef HAVE_ELF_H /* Define to 1 if you have the header file. */ #undef HAVE_ERRNO_H /* Define to 1 if you have the header file. */ #undef HAVE_EXCPT_H /* Define to 1 if you have the header file. */ #undef HAVE_FCNTL_H /* Define to 1 if you have the header file. */ #undef HAVE_FENV_H /* Define to 1 if you have the header file. */ #undef HAVE_FLOAT_H /* Define to 1 if you have the `floor' function. */ #undef HAVE_FLOOR /* Define to 1 if you have the `fork' function. */ #undef HAVE_FORK /* Define to 1 if you have the header file. */ #undef HAVE_FPU_CONTROL_H /* Define to 1 if you have the `ftruncate' function. */ #undef HAVE_FTRUNCATE /* Define to 1 if you have the `getcwd' function. */ #undef HAVE_GETCWD /* Define to 1 if your system has a working `getgroups' function. */ #undef HAVE_GETGROUPS /* Define to 1 if you have the `gethostbyaddr' function. */ #undef HAVE_GETHOSTBYADDR /* Define to 1 if you have the `gethostname' function. */ #undef HAVE_GETHOSTNAME /* Define to 1 if you have the `getnetbyaddr' function. */ #undef HAVE_GETNETBYADDR /* Define to 1 if you have the `getnetbyname' function. */ #undef HAVE_GETNETBYNAME /* Define to 1 if you have the `getpagesize' function. */ #undef HAVE_GETPAGESIZE /* Define to 1 if you have the `getrusage' function. */ #undef HAVE_GETRUSAGE /* Define to 1 if you have the `gettimeofday' function. */ #undef HAVE_GETTIMEOFDAY /* Define to 1 if you have the header file. */ #undef HAVE_GRP_H /* Define to 1 if you have the header file. */ #undef HAVE_IEEEFP_H /* Define to 1 if the system has the type `IMAGE_FILE_HEADER'. */ #undef HAVE_IMAGE_FILE_HEADER /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_IO_H /* Define to 1 if you have the `dl' library (-ldl). */ #undef HAVE_LIBDL /* Define to 1 if you have the `gcc' library (-lgcc). */ #undef HAVE_LIBGCC /* Define to 1 if you have the `gcc_s' library (-lgcc_s). */ #undef HAVE_LIBGCC_S /* Define to 1 if you have the `gdi32' library (-lgdi32). */ #undef HAVE_LIBGDI32 /* Define to 1 if you have the `m' library (-lm). */ #undef HAVE_LIBM /* Define to 1 if you have the `nsl' library (-lnsl). */ #undef HAVE_LIBNSL /* Define to 1 if you have the `pthread' library (-lpthread). */ #undef HAVE_LIBPTHREAD /* Define to 1 if you have the `rt' library (-lrt). */ #undef HAVE_LIBRT /* Define to 1 if you have the `socket' library (-lsocket). */ #undef HAVE_LIBSOCKET /* Define to 1 if you have the `stdc++' library (-lstdc++). */ #undef HAVE_LIBSTDC__ /* Define to 1 if you have the `wsock32' library (-lwsock32). */ #undef HAVE_LIBWSOCK32 /* Define to 1 if you have the `X11' library (-lX11). */ #undef HAVE_LIBX11 /* Define to 1 if you have the `Xext' library (-lXext). */ #undef HAVE_LIBXEXT /* Define to 1 if you have the `Xm' library (-lXm). */ #undef HAVE_LIBXM /* Define to 1 if you have the `Xt' library (-lXt). */ #undef HAVE_LIBXT /* Define to 1 if you have the header file. */ #undef HAVE_LIMITS_H /* Define to 1 if you have the header file. */ #undef HAVE_LOCALE_H /* Define to 1 if the system has the type `long long'. */ #undef HAVE_LONG_LONG /* Define to 1 if `lstat' has the bug that it succeeds when given the zero-length file name argument. */ #undef HAVE_LSTAT_EMPTY_STRING_BUG /* Define to 1 if you have the header file. */ #undef HAVE_MACH_O_RELOC_H /* Define to 1 if you have the header file. */ #undef HAVE_MALLOC_H /* Define to 1 if you have the header file. */ #undef HAVE_MATH_H /* Define to 1 if `gregs' is member of `mcontext_t'. */ #undef HAVE_MCONTEXT_T_GREGS /* Define to 1 if `mc_esp' is member of `mcontext_t'. */ #undef HAVE_MCONTEXT_T_MC_ESP /* Define to 1 if `regs' is member of `mcontext_t'. */ #undef HAVE_MCONTEXT_T_REGS /* Define to 1 if you have the `memmove' function. */ #undef HAVE_MEMMOVE /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have the `memset' function. */ #undef HAVE_MEMSET /* Define to 1 if you have the `mkdir' function. */ #undef HAVE_MKDIR /* Define to 1 if you have the `mkfifo' function. */ #undef HAVE_MKFIFO /* Define to 1 if you have the `mkstemp' function. */ #undef HAVE_MKSTEMP /* Define to 1 if you have the `mmap' function. */ #undef HAVE_MMAP /* Define to 1 if you have the `mprotect' function. */ #undef HAVE_MPROTECT /* Define to 1 if you have the `munmap' function. */ #undef HAVE_MUNMAP /* Define to 1 if you have the header file, and it defines `DIR'. */ #undef HAVE_NDIR_H /* Define to 1 if you have the header file. */ #undef HAVE_NETDB_H /* Define to 1 if you have the header file. */ #undef HAVE_NETINET_IN_H /* Define to 1 if you have the header file. */ #undef HAVE_NETINET_TCP_H /* Define to 1 if you have the `pathconf' function. */ #undef HAVE_PATHCONF /* Define to 1 if you have the PE/COFF types. */ #undef HAVE_PECOFF /* Define to 1 if you have the header file. */ #undef HAVE_POLL_H /* Define to 1 if you have the `pow' function. */ #undef HAVE_POW /* Define to 1 if you have the header file. */ #undef HAVE_PTHREAD_H /* Define to 1 if you have the header file. */ #undef HAVE_PWD_H /* Define to 1 if your system has a GNU libc compatible `realloc' function, and to 0 otherwise. */ #undef HAVE_REALLOC /* Define to 1 if you have the `realpath' function. */ #undef HAVE_REALPATH /* Define to 1 if you have the `rmdir' function. */ #undef HAVE_RMDIR /* Define to 1 if you have the `select' function. */ #undef HAVE_SELECT /* Define to 1 if you have the header file. */ #undef HAVE_SEMAPHORE_H /* Define to 1 if you have the `setlocale' function. */ #undef HAVE_SETLOCALE /* Define to 1 if you have the `sigaction' function. */ #undef HAVE_SIGACTION /* Define to 1 if you have the `sigaltstack' function. */ #undef HAVE_SIGALTSTACK /* Define to 1 if the system has the type `sighandler_t'. */ #undef HAVE_SIGHANDLER_T /* Define to 1 if you have the header file. */ #undef HAVE_SIGINFO_H /* Define to 1 if you have the header file. */ #undef HAVE_SIGNAL_H /* Define to 1 if the system has the type `sig_t'. */ #undef HAVE_SIG_T /* Define to 1 if you have the `socket' function. */ #undef HAVE_SOCKET /* Define to 1 if the system has the type `socklen_t'. */ #undef HAVE_SOCKLEN_T /* Define to 1 if you have the `sqrt' function. */ #undef HAVE_SQRT /* Define to 1 if the system has the type `stack_t'. */ #undef HAVE_STACK_T /* Define to 1 if `stat' has the bug that it succeeds when given the zero-length file name argument. */ #undef HAVE_STAT_EMPTY_STRING_BUG /* Define to 1 if you have the header file. */ #undef HAVE_STDARG_H /* Define to 1 if stdbool.h conforms to C99. */ #undef HAVE_STDBOOL_H /* Define to 1 if you have the header file. */ #undef HAVE_STDDEF_H /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDIO_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the `strdup' function. */ #undef HAVE_STRDUP /* Define to 1 if you have the `strerror' function. */ #undef HAVE_STRERROR /* Define to 1 if you have the `strftime' function. */ #undef HAVE_STRFTIME /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the `strtod' function. */ #undef HAVE_STRTOD /* Define to 1 if `ss' is member of `struct mcontext'. */ #undef HAVE_STRUCT_MCONTEXT_SS /* Define to 1 if the system has the type `struct sigcontext'. */ #undef HAVE_STRUCT_SIGCONTEXT /* Define to 1 if `sun_len' is member of `struct sockaddr_un'. */ #undef HAVE_STRUCT_SOCKADDR_UN_SUN_LEN /* Define to 1 if `ss' is member of `struct __darwin_mcontext32'. */ #undef HAVE_STRUCT___DARWIN_MCONTEXT32_SS /* Define to 1 if `__ss' is member of `struct __darwin_mcontext32'. */ #undef HAVE_STRUCT___DARWIN_MCONTEXT32___SS /* Define to 1 if `ss' is member of `struct __darwin_mcontext64'. */ #undef HAVE_STRUCT___DARWIN_MCONTEXT64_SS /* Define to 1 if `__ss' is member of `struct __darwin_mcontext64'. */ #undef HAVE_STRUCT___DARWIN_MCONTEXT64___SS /* Define to 1 if `ss' is member of `struct __darwin_mcontext'. */ #undef HAVE_STRUCT___DARWIN_MCONTEXT_SS /* Define to 1 if `__ss' is member of `struct __darwin_mcontext'. */ #undef HAVE_STRUCT___DARWIN_MCONTEXT___SS /* Define to 1 if you have the `sysctl' function. */ #undef HAVE_SYSCTL /* Define to 1 if you have the header file, and it defines `DIR'. */ #undef HAVE_SYS_DIR_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_ELF_386_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_ELF_SPARC_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_ERRNO_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_FILE_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_FILIO_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_IOCTL_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_MMAN_H /* Define to 1 if you have the header file, and it defines `DIR'. */ #undef HAVE_SYS_NDIR_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_PARAM_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_RESOURCE_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_SELECT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_SIGNAL_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_SOCKET_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_SOCKIO_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_SYSCTL_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_SYSTEMINFO_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TERMIOS_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TIMES_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TIME_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_UIO_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_UN_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_UTSNAME_H /* Define to 1 if you have that is POSIX.1 compatible. */ #undef HAVE_SYS_WAIT_H /* Define to 1 if you have the header file. */ #undef HAVE_TCHAR_H /* Define to 1 if you have the header file. */ #undef HAVE_TIME_H /* Define to 1 if you have the header file. */ #undef HAVE_UCONTEXT_H /* Define to 1 if the system has the type `ucontext_t'. */ #undef HAVE_UCONTEXT_T /* Define to 1 if you have the `uname' function. */ #undef HAVE_UNAME /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Define to 1 if you have the header file. */ #undef HAVE_VALUES_H /* Define to 1 if you have the `vfork' function. */ #undef HAVE_VFORK /* Define to 1 if you have the header file. */ #undef HAVE_VFORK_H /* Define to 1 if you have the `vprintf' function. */ #undef HAVE_VPRINTF /* Define to 1 if you have the header file. */ #undef HAVE_WINDOWS_H /* Define to 1 if `fork' works. */ #undef HAVE_WORKING_FORK /* Define to 1 if `vfork' works. */ #undef HAVE_WORKING_VFORK /* Define to 1 if you have the header file. */ #undef HAVE_X11_XLIB_H /* Define to 1 if you have the header file. */ #undef HAVE_XM_XM_H /* Define to 1 if the system has the type `_Bool'. */ #undef HAVE__BOOL /* Define if the host is an ARM (32 bit) */ #undef HOSTARCHITECTURE_ARM /* Define if the host is a Power PC (32 bit) */ #undef HOSTARCHITECTURE_PPC /* Define if the host is a Sparc (32 bit) */ #undef HOSTARCHITECTURE_SPARC /* Define if the host is an X86 (32 bit) */ #undef HOSTARCHITECTURE_X86 /* Define if the host is an X86 (64 bit) */ #undef HOSTARCHITECTURE_X86_64 /* Define if using the interpreter */ #undef INTERPRETED /* Define to 1 if `lstat' dereferences a symlink specified with a trailing slash. */ #undef LSTAT_FOLLOWS_SLASHED_SYMLINK /* Name of package */ #undef PACKAGE /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the version of this package. */ #undef PACKAGE_VERSION /* Define to 1 if the C compiler supports function prototypes. */ #undef PROTOTYPES /* Define as the return type of signal handlers (`int' or `void'). */ #undef RETSIGTYPE /* Define to the type of arg 1 for `select'. */ #undef SELECT_TYPE_ARG1 /* Define to the type of args 2, 3 and 4 for `select'. */ #undef SELECT_TYPE_ARG234 /* Define to the type of arg 5 for `select'. */ #undef SELECT_TYPE_ARG5 /* Define to 1 if the `setvbuf' function takes the buffering type as its second argument and the buffer pointer as the third, as on System V before release 3. */ #undef SETVBUF_REVERSED /* The size of `long', as computed by sizeof. */ #undef SIZEOF_LONG /* The size of `void*', as computed by sizeof. */ #undef SIZEOF_VOIDP /* If using the C implementation of alloca, define if you know the direction of stack growth for your system; otherwise it will be automatically deduced at runtime. STACK_DIRECTION > 0 => grows toward higher addresses STACK_DIRECTION < 0 => grows toward lower addresses STACK_DIRECTION = 0 => direction of growth unknown */ #undef STACK_DIRECTION /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Define to 1 if you can safely include both and . */ #undef TIME_WITH_SYS_TIME /* Define to 1 if your declares `struct tm'. */ #undef TM_IN_SYS_TIME /* Version number of package */ #undef VERSION /* Define like PROTOTYPES; this can be used by system headers. */ #undef __PROTOTYPES /* Define to empty if `const' does not conform to ANSI C. */ #undef const /* Define to `int' if doesn't define. */ #undef gid_t /* Define to `int' if does not define. */ #undef mode_t /* Define to `long int' if does not define. */ #undef off_t /* Define to `int' if does not define. */ #undef pid_t /* Define to rpl_realloc if the replacement function should be used. */ #undef realloc /* Define to `unsigned int' if does not define. */ #undef size_t /* Define to `int' if doesn't define. */ #undef uid_t /* Define as `fork' if `vfork' does not work. */ #undef vfork #endif polyml.5.2.1/config.sub0000644000175000017500000007305510506226524013770 0ustar daviddavid#! /bin/sh # Configuration validation subroutine script. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003 Free Software Foundation, Inc. timestamp='2003-06-18' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software # can handle that machine. It does not imply ALL GNU software can. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Please send patches to . Submit a context # diff and a properly formatted ChangeLog entry. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit 0 ;; --version | -v ) echo "$version" ; exit 0 ;; --help | --h* | -h ) echo "$usage"; exit 0 ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit 0;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | freebsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis) os= basic_machine=$1 ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \ | c4x | clipper \ | d10v | d30v | dlx | dsp16xx \ | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | i370 | i860 | i960 | ia64 \ | ip2k \ | m32r | m68000 | m68k | m88k | mcore \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64vr | mips64vrel \ | mips64orion | mips64orionel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa64 | mipsisa64el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | msp430 \ | ns16k | ns32k \ | openrisc | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ | pyramid \ | s390 | s390x \ | sh | sh[1234] | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv8 | sparcv9 | sparcv9b \ | strongarm \ | tahoe | thumb | tic4x | tic80 | tron \ | v850 | v850e \ | we32k \ | x86 | xscale | xstormy16 | xtensa \ | z8k) basic_machine=$basic_machine-unknown ;; m6811 | m68hc11 | m6812 | m68hc12) # Motorola 68HC11/12. basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* \ | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ | clipper-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* \ | m32r-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | mcore-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64vr-* | mips64vrel-* \ | mips64orion-* | mips64orionel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipstx39-* | mipstx39el-* \ | msp430-* \ | none-* | np1-* | nv1-* | ns16k-* | ns32k-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ | pyramid-* \ | romp-* | rs6000-* \ | s390-* | s390x-* \ | sh-* | sh[1234]-* | sh[23]e-* | sh[34]eb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \ | tahoe-* | thumb-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tron-* \ | v850-* | v850e-* | vax-* \ | we32k-* \ | x86-* | x86_64-* | xps100-* | xscale-* | xstormy16-* \ | xtensa-* \ | ymp-* \ | z8k-*) ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; c90) basic_machine=c90-cray os=-unicos ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; crds | unos) basic_machine=m68k-crds ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; # I'm not sure what "Sysv32" means. Should this be sysv3.2? i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; mingw32) basic_machine=i386-pc os=-mingw32 ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; mmix*) basic_machine=mmix-knuth os=-mmixware ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; msdos) basic_machine=i386-pc os=-msdos ;; mvs) basic_machine=i370-ibm os=-mvs ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; nv1) basic_machine=nv1-cray os=-unicosmp ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; or32 | or32-*) basic_machine=or32-unknown os=-coff ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc) basic_machine=powerpc-unknown ;; ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tic54x | c54x*) basic_machine=tic54x-unknown os=-coff ;; tic55x | c55x*) basic_machine=tic55x-unknown os=-coff ;; tic6x | c6x*) basic_machine=tic6x-unknown os=-coff ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xps | xps100) basic_machine=xps100-honeywell ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh3 | sh4 | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sh64) basic_machine=sh64-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \ | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* \ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -kaos*) os=-kaos ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 # This also exists in the configure program, but was not the # default. # os=-sunos4 ;; m68*-cisco) os=-aout ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-ibm) os=-aix ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -ptx*) vendor=sequent ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit 0 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: polyml.5.2.1/configure0000755000175000017500000376666711076105473013746 0ustar daviddavid#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.61 for Poly/ML 5.1. # # Report bugs to . # # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, # 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi # PATH needs CR # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) as_nl=' ' IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. case $0 in *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 { (exit 1); exit 1; } fi # Work around bugs in pre-3.0 UWIN ksh. for as_var in ENV MAIL MAILPATH do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. for as_var in \ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ LC_TELEPHONE LC_TIME do if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then eval $as_var=C; export $as_var else ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var fi done # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi # Name of the executable. as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # CDPATH. $as_unset CDPATH if test "x$CONFIG_SHELL" = x; then if (eval ":") 2>/dev/null; then as_have_required=yes else as_have_required=no fi if test $as_have_required = yes && (eval ": (as_func_return () { (exit \$1) } as_func_success () { as_func_return 0 } as_func_failure () { as_func_return 1 } as_func_ret_success () { return 0 } as_func_ret_failure () { return 1 } exitcode=0 if as_func_success; then : else exitcode=1 echo as_func_success failed. fi if as_func_failure; then exitcode=1 echo as_func_failure succeeded. fi if as_func_ret_success; then : else exitcode=1 echo as_func_ret_success failed. fi if as_func_ret_failure; then exitcode=1 echo as_func_ret_failure succeeded. fi if ( set x; as_func_ret_success y && test x = \"\$1\" ); then : else exitcode=1 echo positional parameters were not saved. fi test \$exitcode = 0) || { (exit 1); exit 1; } ( as_lineno_1=\$LINENO as_lineno_2=\$LINENO test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" && test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; } ") 2> /dev/null; then : else as_candidate_shells= as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. case $as_dir in /*) for as_base in sh bash ksh sh5; do as_candidate_shells="$as_candidate_shells $as_dir/$as_base" done;; esac done IFS=$as_save_IFS for as_shell in $as_candidate_shells $SHELL; do # Try only shells that exist, to save several forks. if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { ("$as_shell") 2> /dev/null <<\_ASEOF if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi : _ASEOF }; then CONFIG_SHELL=$as_shell as_have_required=yes if { "$as_shell" 2> /dev/null <<\_ASEOF if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi : (as_func_return () { (exit $1) } as_func_success () { as_func_return 0 } as_func_failure () { as_func_return 1 } as_func_ret_success () { return 0 } as_func_ret_failure () { return 1 } exitcode=0 if as_func_success; then : else exitcode=1 echo as_func_success failed. fi if as_func_failure; then exitcode=1 echo as_func_failure succeeded. fi if as_func_ret_success; then : else exitcode=1 echo as_func_ret_success failed. fi if as_func_ret_failure; then exitcode=1 echo as_func_ret_failure succeeded. fi if ( set x; as_func_ret_success y && test x = "$1" ); then : else exitcode=1 echo positional parameters were not saved. fi test $exitcode = 0) || { (exit 1); exit 1; } ( as_lineno_1=$LINENO as_lineno_2=$LINENO test "x$as_lineno_1" != "x$as_lineno_2" && test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; } _ASEOF }; then break fi fi done if test "x$CONFIG_SHELL" != x; then for as_var in BASH_ENV ENV do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var done export CONFIG_SHELL exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} fi if test $as_have_required = no; then echo This script requires a shell more modern than all the echo shells that I found on your system. Please install a echo modern shell, or manually run the script under such a echo shell if you do have one. { (exit 1); exit 1; } fi fi fi (eval "as_func_return () { (exit \$1) } as_func_success () { as_func_return 0 } as_func_failure () { as_func_return 1 } as_func_ret_success () { return 0 } as_func_ret_failure () { return 1 } exitcode=0 if as_func_success; then : else exitcode=1 echo as_func_success failed. fi if as_func_failure; then exitcode=1 echo as_func_failure succeeded. fi if as_func_ret_success; then : else exitcode=1 echo as_func_ret_success failed. fi if as_func_ret_failure; then exitcode=1 echo as_func_ret_failure succeeded. fi if ( set x; as_func_ret_success y && test x = \"\$1\" ); then : else exitcode=1 echo positional parameters were not saved. fi test \$exitcode = 0") || { echo No shell found that supports shell functions. echo Please tell autoconf@gnu.org about your system, echo including any error possibly output before this echo message } as_lineno_1=$LINENO as_lineno_2=$LINENO test "x$as_lineno_1" != "x$as_lineno_2" && test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line after each line using $LINENO; the second 'sed' # does the real work. The second script uses 'N' to pair each # line-number line with the line containing $LINENO, and appends # trailing '-' during substitution so that $LINENO is not a special # case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # scripts with optimization help from Paolo Bonzini. Blame Lee # E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 { (exit 1); exit 1; }; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in -n*) case `echo 'x\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. *) ECHO_C='\c';; esac;; *) ECHO_N='-n';; esac if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir fi echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" # Check that we are running under the correct shell. SHELL=${CONFIG_SHELL-/bin/sh} case X$ECHO in X*--fallback-echo) # Remove one level of quotation (which was required for Make). ECHO=`echo "$ECHO" | sed 's,\\\\\$\\$0,'$0','` ;; esac echo=${ECHO-echo} if test "X$1" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test "X$1" = X--fallback-echo; then # Avoid inline document here, it may be left over : elif test "X`($echo '\t') 2>/dev/null`" = 'X\t' ; then # Yippee, $echo works! : else # Restart under the correct shell. exec $SHELL "$0" --no-reexec ${1+"$@"} fi if test "X$1" = X--fallback-echo; then # used as fallback echo shift cat </dev/null 2>&1 && unset CDPATH if test -z "$ECHO"; then if test "X${echo_test_string+set}" != Xset; then # find a string as large as possible, as long as the shell can cope with it for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... if (echo_test_string=`eval $cmd`) 2>/dev/null && echo_test_string=`eval $cmd` && (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null then break fi done fi if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then : else # The Solaris, AIX, and Digital Unix default echo programs unquote # backslashes. This makes it impossible to quote backslashes using # echo "$something" | sed 's/\\/\\\\/g' # # So, first we look for a working echo in the user's PATH. lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for dir in $PATH /usr/ucb; do IFS="$lt_save_ifs" if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then echo="$dir/echo" break fi done IFS="$lt_save_ifs" if test "X$echo" = Xecho; then # We didn't find a better echo, so look for alternatives. if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then # This shell has a builtin print -r that does the trick. echo='print -r' elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) && test "X$CONFIG_SHELL" != X/bin/ksh; then # If we have ksh, try running configure again with it. ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} export ORIGINAL_CONFIG_SHELL CONFIG_SHELL=/bin/ksh export CONFIG_SHELL exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"} else # Try using printf. echo='printf %s\n' if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then # Cool, printf works : elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && test "X$echo_testing_string" = 'X\t' && echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL export CONFIG_SHELL SHELL="$CONFIG_SHELL" export SHELL echo="$CONFIG_SHELL $0 --fallback-echo" elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && test "X$echo_testing_string" = 'X\t' && echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then echo="$CONFIG_SHELL $0 --fallback-echo" else # maybe with a smaller string... prev=: for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null then break fi prev="$cmd" done if test "$prev" != 'sed 50q "$0"'; then echo_test_string=`eval $prev` export echo_test_string exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"} else # Oops. We lost completely, so just stick with echo. echo=echo fi fi fi fi fi fi # Copy echo and quote the copy suitably for passing to libtool from # the Makefile, instead of quoting the original, which is used later. ECHO=$echo if test "X$ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo" fi tagnames=${tagnames+${tagnames},}CXX tagnames=${tagnames+${tagnames},}F77 exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= SHELL=${CONFIG_SHELL-/bin/sh} # Identity of this package. PACKAGE_NAME='Poly/ML' PACKAGE_TARNAME='-poly-ml-' PACKAGE_VERSION='5.1' PACKAGE_STRING='Poly/ML 5.1' PACKAGE_BUGREPORT='polyml AT polyml DOT org' # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_unique_file="polyexports.h" ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datarootdir datadir sysconfdir sharedstatedir localstatedir includedir oldincludedir docdir infodir htmldir dvidir pdfdir psdir libdir localedir mandir DEFS ECHO_C ECHO_N ECHO_T LIBS build_alias host_alias target_alias INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA am__isrc CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar build build_cpu build_vendor build_os host host_cpu host_vendor host_os OSFLAG CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE GREP EGREP LN_S ECHO AR RANLIB DLLTOOL AS OBJDUMP CPP CXX CXXFLAGS ac_ct_CXX CXXDEPMODE am__fastdepCXX_TRUE am__fastdepCXX_FALSE CXXCPP F77 FFLAGS ac_ct_F77 LIBTOOL MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT CCAS CCASFLAGS CCASDEPMODE am__fastdepCCAS_TRUE am__fastdepCCAS_FALSE XMKMF ALLOCA EXPPECOFF_TRUE EXPPECOFF_FALSE EXPELF_TRUE EXPELF_FALSE EXPMACHO_TRUE EXPMACHO_FALSE LIBOBJS POW_LIB ARCHI386_TRUE ARCHI386_FALSE ARCHPPC_TRUE ARCHPPC_FALSE ARCHSPARC_TRUE ARCHSPARC_FALSE ARCHINTERPRET_TRUE ARCHINTERPRET_FALSE ARCHINTERPRET64_TRUE ARCHINTERPRET64_FALSE ARCHX86_64_TRUE ARCHX86_64_FALSE NATIVE_WINDOWS_TRUE NATIVE_WINDOWS_FALSE NO_UNDEFINED_TRUE NO_UNDEFINED_FALSE LTLIBOBJS' ac_subst_files='' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP CXX CXXFLAGS CCC CXXCPP F77 FFLAGS CCAS CCASFLAGS XMKMF' # Initialize some variables set by options. ac_init_help= ac_init_version=false # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'` eval enable_$ac_feature=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'` eval enable_$ac_feature=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package | sed 's/[-.]/_/g'` eval with_$ac_package=\$ac_optarg ;; -without-* | --without-*) ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package | sed 's/[-.]/_/g'` eval with_$ac_package=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) { echo "$as_me: error: unrecognized option: $ac_option Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; } ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 { (exit 1); exit 1; }; } eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` { echo "$as_me: error: missing argument to $ac_option" >&2 { (exit 1); exit 1; }; } fi # Be sure to have absolute directory names. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; } done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used." >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || { echo "$as_me: error: Working directory cannot be determined" >&2 { (exit 1); exit 1; }; } test "X$ac_ls_di" = "X$ac_pwd_ls_di" || { echo "$as_me: error: pwd does not report name of working directory" >&2 { (exit 1); exit 1; }; } # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$0" || $as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$0" : 'X\(//\)[^/]' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || echo X"$0" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 { (exit 1); exit 1; }; } fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || { echo "$as_me: error: $ac_msg" >&2 { (exit 1); exit 1; }; } pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures Poly/ML 5.1 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/-poly-ml-] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names X features: --x-includes=DIR X include files are in DIR --x-libraries=DIR X library files are in DIR System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of Poly/ML 5.1:";; esac cat <<\_ACEOF Optional Features: --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-debug Compiles without optimisation for debugging --enable-shared[=PKGS] build shared libraries [default=yes] --enable-static[=PKGS] build static libraries [default=yes] --enable-fast-install[=PKGS] optimize for fast installation [default=yes] --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors --disable-libtool-lock avoid locking (might break parallel builds) --enable-maintainer-mode enable make rules and dependencies not useful (and sometimes confusing) to the casual installer Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-gnu-ld assume the C compiler uses GNU ld [default=no] --with-pic try to use only PIC/non-PIC objects [default=use both] --with-tags[=TAGS] include additional configurations [automatic] --with-x use the X Window System --with-portable Build the portable interpreter version of Poly/ML instead of native Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor CXX C++ compiler command CXXFLAGS C++ compiler flags CXXCPP C++ preprocessor F77 Fortran 77 compiler command FFLAGS Fortran 77 compiler flags CCAS assembler compiler command (defaults to CC) CCASFLAGS assembler compiler flags (defaults to CFLAGS) XMKMF Path to xmkmf, Makefile generator for X Window System Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF Poly/ML configure 5.1 generated by GNU Autoconf 2.61 Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by Poly/ML $as_me 5.1, which was generated by GNU Autoconf 2.61. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; 2) ac_configure_args1="$ac_configure_args1 '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi ac_configure_args="$ac_configure_args '$ac_arg'" ;; esac done done $as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } $as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo cat <<\_ASBOX ## ---------------- ## ## Cache variables. ## ## ---------------- ## _ASBOX echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( *) $as_unset $ac_var ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo cat <<\_ASBOX ## ----------------- ## ## Output variables. ## ## ----------------- ## _ASBOX echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then cat <<\_ASBOX ## ------------------- ## ## File substitutions. ## ## ------------------- ## _ASBOX echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then cat <<\_ASBOX ## ----------- ## ## confdefs.h. ## ## ----------- ## _ASBOX echo cat confdefs.h echo fi test "$ac_signal" != 0 && echo "$as_me: caught signal $ac_signal" echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer explicitly selected file to automatically selected ones. if test -n "$CONFIG_SITE"; then set x "$CONFIG_SITE" elif test "x$prefix" != xNONE; then set x "$prefix/share/config.site" "$prefix/etc/config.site" else set x "$ac_default_prefix/share/config.site" \ "$ac_default_prefix/etc/config.site" fi shift for ac_site_file do if test -r "$ac_site_file"; then { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special # files actually), so we avoid doing that. if test -f "$cache_file"; then { echo "$as_me:$LINENO: loading cache $cache_file" >&5 echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { echo "$as_me:$LINENO: creating cache $cache_file" >&5 echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 echo "$as_me: former value: $ac_old_val" >&2;} { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 echo "$as_me: current value: $ac_new_val" >&2;} ac_cache_corrupted=: fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 echo "$as_me: error: changes in the environment can compromise the build" >&2;} { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} { (exit 1); exit 1; }; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu am__api_version='1.10' ac_aux_dir= for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&5 echo "$as_me: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&2;} { (exit 1); exit 1; }; } fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. { echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6; } if test -z "$INSTALL"; then if test "${ac_cv_path_install+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in ./ | .// | /cC/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi done done ;; esac done IFS=$as_save_IFS fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { echo "$as_me:$LINENO: result: $INSTALL" >&5 echo "${ECHO_T}$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { echo "$as_me:$LINENO: checking whether build environment is sane" >&5 echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6; } # Just in case sleep 1 echo timestamp > conftest.file # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t $srcdir/configure conftest.file` fi rm -f conftest.file if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". { { echo "$as_me:$LINENO: error: ls -t appears to fail. Make sure there is not a broken alias in your environment" >&5 echo "$as_me: error: ls -t appears to fail. Make sure there is not a broken alias in your environment" >&2;} { (exit 1); exit 1; }; } fi test "$2" = conftest.file ) then # Ok. : else { { echo "$as_me:$LINENO: error: newly created file is older than distributed files! Check your system clock" >&5 echo "$as_me: error: newly created file is older than distributed files! Check your system clock" >&2;} { (exit 1); exit 1; }; } fi { echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6; } test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. echo might interpret backslashes. # By default was `s,x,x', remove it if useless. cat <<\_ACEOF >conftest.sed s/[\\$]/&&/g;s/;s,x,x,$// _ACEOF program_transform_name=`echo $program_transform_name | sed -f conftest.sed` rm -f conftest.sed # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= { echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5 echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} fi { echo "$as_me:$LINENO: checking for a thread-safe mkdir -p" >&5 echo $ECHO_N "checking for a thread-safe mkdir -p... $ECHO_C" >&6; } if test -z "$MKDIR_P"; then if test "${ac_cv_path_mkdir+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir (GNU coreutils) '* | \ 'mkdir (coreutils) '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi if test "${ac_cv_path_mkdir+set}" = set; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. test -d ./--version && rmdir ./--version MKDIR_P="$ac_install_sh -d" fi fi { echo "$as_me:$LINENO: result: $MKDIR_P" >&5 echo "${ECHO_T}$MKDIR_P" >&6; } mkdir_p="$MKDIR_P" case $mkdir_p in [\\/$]* | ?:[\\/]*) ;; */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; esac for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_AWK+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_AWK="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { echo "$as_me:$LINENO: result: $AWK" >&5 echo "${ECHO_T}$AWK" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi test -n "$AWK" && break done { echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6; } set x ${MAKE-make}; ac_make=`echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6; } SET_MAKE= else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5 echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;} { (exit 1); exit 1; }; } fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='-poly-ml-' VERSION='5.1' cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} install_sh=${install_sh-"\$(SHELL) $am_aux_dir/install-sh"} # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { echo "$as_me:$LINENO: result: $STRIP" >&5 echo "${ECHO_T}$STRIP" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_STRIP="strip" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 echo "${ECHO_T}$ac_ct_STRIP" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&5 echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" # We need awk for the "check" target. The system "awk" is bad on # some platforms. # Always define AMTAR for backward compatibility. AMTAR=${AMTAR-"${am_missing_run}tar"} am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' ac_debug_mode="no" # Check whether --enable-debug was given. if test "${enable_debug+set}" = set; then enableval=$enable_debug; ac_debug_mode="yes" fi if test "$ac_debug_mode" != "yes"; then # Default to maximum optimisation. -O2 is not good enough. # Set CCASFLAGS to empty so that it doesn't get set to CFLAGS. # The -g option on assembler causes problems on Sparc/Solaris 10. # test X || Y is equivalent to if !X then Y test "${CFLAGS+set}" = set || CFLAGS="-O3" test "${CXXFLAGS+set}" = set || CXXFLAGS="-O3" test "${CCASFLAGS+set}" = set || CCASFLAGS="" else test "${CFLAGS+set}" = set || CFLAGS="-g" test "${CXXFLAGS+set}" = set || CXXFLAGS="-g" test "${CCASFLAGS+set}" = set || CCASFLAGS="" fi # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || { { echo "$as_me:$LINENO: error: cannot run $SHELL $ac_aux_dir/config.sub" >&5 echo "$as_me: error: cannot run $SHELL $ac_aux_dir/config.sub" >&2;} { (exit 1); exit 1; }; } { echo "$as_me:$LINENO: checking build system type" >&5 echo $ECHO_N "checking build system type... $ECHO_C" >&6; } if test "${ac_cv_build+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` test "x$ac_build_alias" = x && { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5 echo "$as_me: error: cannot guess build type; you must specify one" >&2;} { (exit 1); exit 1; }; } ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&5 echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&2;} { (exit 1); exit 1; }; } fi { echo "$as_me:$LINENO: result: $ac_cv_build" >&5 echo "${ECHO_T}$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) { { echo "$as_me:$LINENO: error: invalid value of canonical build" >&5 echo "$as_me: error: invalid value of canonical build" >&2;} { (exit 1); exit 1; }; };; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { echo "$as_me:$LINENO: checking host system type" >&5 echo $ECHO_N "checking host system type... $ECHO_C" >&6; } if test "${ac_cv_host+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&5 echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&2;} { (exit 1); exit 1; }; } fi fi { echo "$as_me:$LINENO: result: $ac_cv_host" >&5 echo "${ECHO_T}$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) { { echo "$as_me:$LINENO: error: invalid value of canonical host" >&5 echo "$as_me: error: invalid value of canonical host" >&2;} { (exit 1); exit 1; }; };; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac # Set the OS flag. This should not really be required but is still used in # a few places for OS-specific quirks that can't be handled by more specific tests. # Check also for mingw in which case we want to build native Windows. poly_native_windows=no # If we are building on cygwin or mingw we need to give the -no-defined flag to # build a DLL. # On mingw we need the -mthreads flag and this must be included in CFLAGS and # CXXFLAGS before the LIBTOOL macros. poly_no_undefined=no case "${host_os}" in darwin*) OSFLAG=-DMACOSX ;; sunos* | solaris*) OSFLAG=-DSOLARIS ;; *mingw*) OSFLAG=-DWINDOWS_PC poly_native_windows=yes poly_no_undefined=yes CFLAGS="$CFLAGS -mthreads" CXXFLAGS="$CXXFLAGS -mthreads" ;; *cygwin*) poly_no_undefined=yes if test "$ac_cv_c_compiler_gnu" = "yes"; then if $CC -dumpmachine | grep -q mingw; then OSFLAG=-DWINDOWS_PC poly_native_windows=yes CFLAGS="$CFLAGS -mthreads" CXXFLAGS="$CXXFLAGS -mthreads" fi fi ;; esac # libpolyml can be a DLL but libpolymain can't. # Check whether --enable-shared was given. if test "${enable_shared+set}" = set; then enableval=$enable_shared; p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS="$lt_save_ifs" ;; esac else enable_shared=yes fi # Check whether --enable-static was given. if test "${enable_static+set}" = set; then enableval=$enable_static; p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS="$lt_save_ifs" ;; esac else enable_static=yes fi # Check whether --enable-fast-install was given. if test "${enable_fast_install+set}" = set; then enableval=$enable_fast_install; p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS="$lt_save_ifs" ;; esac else enable_fast_install=yes fi DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo done .PHONY: am__doit END # If we don't find an include directive, just comment out the code. { echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5 echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6; } am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # We grep out `Entering directory' and `Leaving directory' # messages which can occur if `w' ends up in MAKEFLAGS. # In particular we don't look at `^make:' because GNU make might # be invoked under some other name (usually "gmake"), in which # case it prints its new name instead of `make'. if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then am__include=include am__quote= _am_result=GNU fi # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then am__include=.include am__quote="\"" _am_result=BSD fi fi { echo "$as_me:$LINENO: result: $_am_result" >&5 echo "${ECHO_T}$_am_result" >&6; } rm -f confinc confmf # Check whether --enable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}gcc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="gcc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&5 echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&5 echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&5 echo "$as_me: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } # Provide some information about the compiler. echo "$as_me:$LINENO: checking for C compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (ac_try="$ac_compiler --version >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compiler --version >&5") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (ac_try="$ac_compiler -v >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compiler -v >&5") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (ac_try="$ac_compiler -V >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compiler -V >&5") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6; } ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # # List of possible output files, starting from the most likely. # The algorithm is not robust to junk in `.', hence go to wildcards (a.*) # only as a last resort. b.out is created by i960 compilers. ac_files='a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out' # # The IRIX 6 linker writes into existing files which may not be # executable, retaining their permissions. Remove them first so a # subsequent execution test works. ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { (ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link_default") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi { echo "$as_me:$LINENO: result: $ac_file" >&5 echo "${ECHO_T}$ac_file" >&6; } if test -z "$ac_file"; then echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { echo "$as_me:$LINENO: error: C compiler cannot create executables See \`config.log' for more details." >&5 echo "$as_me: error: C compiler cannot create executables See \`config.log' for more details." >&2;} { (exit 77); exit 77; }; } fi ac_exeext=$ac_cv_exeext # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { echo "$as_me:$LINENO: checking whether the C compiler works" >&5 echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6; } # FIXME: These cross compiler hacks should be removed for Autoconf 3.0 # If not cross compiling, check that we can run a simple program. if test "$cross_compiling" != yes; then if { ac_try='./$ac_file' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { echo "$as_me:$LINENO: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&5 echo "$as_me: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi fi fi { echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6; } rm -f a.out a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6; } { echo "$as_me:$LINENO: result: $cross_compiling" >&5 echo "${ECHO_T}$cross_compiling" >&6; } { echo "$as_me:$LINENO: checking for suffix of executables" >&5 echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6; } if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f conftest$ac_cv_exeext { echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 echo "${ECHO_T}$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT { echo "$as_me:$LINENO: checking for suffix of object files" >&5 echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6; } if test "${ac_cv_objext+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 echo "${ECHO_T}$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6; } if test "${ac_cv_c_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6; } GCC=`test $ac_compiler_gnu = yes && echo yes` ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6; } if test "${ac_cv_prog_cc_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cc_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 CFLAGS="" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cc_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 echo "${ECHO_T}$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5 echo $ECHO_N "checking for $CC option to accept ISO C89... $ECHO_C" >&6; } if test "${ac_cv_prog_cc_c89+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cc_c89=$ac_arg else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { echo "$as_me:$LINENO: result: none needed" >&5 echo "${ECHO_T}none needed" >&6; } ;; xno) { echo "$as_me:$LINENO: result: unsupported" >&5 echo "${ECHO_T}unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5 echo "${ECHO_T}$ac_cv_prog_cc_c89" >&6; } ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CC" am_compiler_list= { echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6; } if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf case $depmode in nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; none) break ;; esac # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. if depmode=$depmode \ source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5 echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi { echo "$as_me:$LINENO: checking for a sed that does not truncate output" >&5 echo $ECHO_N "checking for a sed that does not truncate output... $ECHO_C" >&6; } if test "${lt_cv_path_SED+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # Loop through the user's path and test for sed and gsed. # Then use that list of sed's as ones to test for truncation. as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for lt_ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" fi done done done lt_ac_max=0 lt_ac_count=0 # Add /usr/xpg4/bin/sed as it is typically found on Solaris # along with /bin/sed that truncates output. for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do test ! -f $lt_ac_sed && continue cat /dev/null > conftest.in lt_ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >conftest.in # Check for GNU sed and select it if it is found. if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then lt_cv_path_SED=$lt_ac_sed break fi while true; do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo >>conftest.nl $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break cmp -s conftest.out conftest.nl || break # 10000 chars as input seems more than enough test $lt_ac_count -gt 10 && break lt_ac_count=`expr $lt_ac_count + 1` if test $lt_ac_count -gt $lt_ac_max; then lt_ac_max=$lt_ac_count lt_cv_path_SED=$lt_ac_sed fi done done fi SED=$lt_cv_path_SED { echo "$as_me:$LINENO: result: $SED" >&5 echo "${ECHO_T}$SED" >&6; } { echo "$as_me:$LINENO: checking for grep that handles long lines and -e" >&5 echo $ECHO_N "checking for grep that handles long lines and -e... $ECHO_C" >&6; } if test "${ac_cv_path_GREP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # Extract the first word of "grep ggrep" to use in msg output if test -z "$GREP"; then set dummy grep ggrep; ac_prog_name=$2 if test "${ac_cv_path_GREP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break ac_count=`expr $ac_count + 1` if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS fi GREP="$ac_cv_path_GREP" if test -z "$GREP"; then { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} { (exit 1); exit 1; }; } fi else ac_cv_path_GREP=$GREP fi fi { echo "$as_me:$LINENO: result: $ac_cv_path_GREP" >&5 echo "${ECHO_T}$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { echo "$as_me:$LINENO: checking for egrep" >&5 echo $ECHO_N "checking for egrep... $ECHO_C" >&6; } if test "${ac_cv_path_EGREP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else # Extract the first word of "egrep" to use in msg output if test -z "$EGREP"; then set dummy egrep; ac_prog_name=$2 if test "${ac_cv_path_EGREP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break ac_count=`expr $ac_count + 1` if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS fi EGREP="$ac_cv_path_EGREP" if test -z "$EGREP"; then { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} { (exit 1); exit 1; }; } fi else ac_cv_path_EGREP=$EGREP fi fi fi { echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5 echo "${ECHO_T}$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" # Check whether --with-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. { echo "$as_me:$LINENO: checking for ld used by $CC" >&5 echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'` while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then { echo "$as_me:$LINENO: checking for GNU ld" >&5 echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6; } else { echo "$as_me:$LINENO: checking for non-GNU ld" >&5 echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6; } fi if test "${lt_cv_path_LD+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &5 echo "${ECHO_T}$LD" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5 echo "$as_me: error: no acceptable ld found in \$PATH" >&2;} { (exit 1); exit 1; }; } { echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6; } if test "${lt_cv_prog_gnu_ld+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld { echo "$as_me:$LINENO: checking for $LD option to reload object files" >&5 echo $ECHO_N "checking for $LD option to reload object files... $ECHO_C" >&6; } if test "${lt_cv_ld_reload_flag+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_ld_reload_flag='-r' fi { echo "$as_me:$LINENO: result: $lt_cv_ld_reload_flag" >&5 echo "${ECHO_T}$lt_cv_ld_reload_flag" >&6; } reload_flag=$lt_cv_ld_reload_flag case $reload_flag in "" | " "*) ;; *) reload_flag=" $reload_flag" ;; esac reload_cmds='$LD$reload_flag -o $output$reload_objs' case $host_os in darwin*) if test "$GCC" = yes; then reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' else reload_cmds='$LD$reload_flag -o $output$reload_objs' fi ;; esac { echo "$as_me:$LINENO: checking for BSD-compatible nm" >&5 echo $ECHO_N "checking for BSD-compatible nm... $ECHO_C" >&6; } if test "${lt_cv_path_NM+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM="$NM" else lt_nm_to_check="${ac_tool_prefix}nm" if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. tmp_nm="$ac_dir/$lt_tmp_nm" if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in */dev/null* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS="$lt_save_ifs" done test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm fi fi { echo "$as_me:$LINENO: result: $lt_cv_path_NM" >&5 echo "${ECHO_T}$lt_cv_path_NM" >&6; } NM="$lt_cv_path_NM" { echo "$as_me:$LINENO: checking whether ln -s works" >&5 echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6; } LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then { echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6; } else { echo "$as_me:$LINENO: result: no, using $LN_S" >&5 echo "${ECHO_T}no, using $LN_S" >&6; } fi { echo "$as_me:$LINENO: checking how to recognise dependent libraries" >&5 echo $ECHO_N "checking how to recognise dependent libraries... $ECHO_C" >&6; } if test "${lt_cv_deplibs_check_method+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_deplibs_check_method='unknown' # Need to set the preceding variable on all platforms that support # interlibrary dependencies. # 'none' -- dependencies not supported. # `unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. # 'test_compile' -- check by making test program. # 'file_magic [[regex]]' -- check by looking for files in library path # which responds to the $file_magic_cmd with a given extended regex. # If you have `file' or equivalent on your system and you're not sure # whether `pass_all' will *always* work, you probably want this one. case $host_os in aix4* | aix5*) lt_cv_deplibs_check_method=pass_all ;; beos*) lt_cv_deplibs_check_method=pass_all ;; bsdi[45]*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' lt_cv_file_magic_cmd='/usr/bin/file -L' lt_cv_file_magic_test_file=/shlib/libc.so ;; cygwin*) # func_win32_libid is a shell function defined in ltmain.sh lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' ;; mingw* | pw32*) # Base MSYS/MinGW do not provide the 'file' command needed by # func_win32_libid shell function, so use a weaker test based on 'objdump'. lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly*) if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; gnu*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]' lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix3*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be Linux ELF. linux* | k*bsd*-gnu) lt_cv_deplibs_check_method=pass_all ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; nto-qnx*) lt_cv_deplibs_check_method=unknown ;; openbsd*) if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; esac fi { echo "$as_me:$LINENO: result: $lt_cv_deplibs_check_method" >&5 echo "${ECHO_T}$lt_cv_deplibs_check_method" >&6; } file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Check whether --enable-libtool-lock was given. if test "${enable_libtool_lock+set}" = set; then enableval=$enable_libtool_lock; fi test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE="32" ;; *ELF-64*) HPUX_IA64_MODE="64" ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out which ABI we are using. echo '#line 4418 "configure"' > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then if test "$lt_cv_prog_gnu_ld" = yes; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*linux*) LD="${LD-ld} -m elf_i386" ;; ppc64-*linux*|powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; ppc*-*linux*|powerpc*-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" { echo "$as_me:$LINENO: checking whether the C compiler needs -belf" >&5 echo $ECHO_N "checking whether the C compiler needs -belf... $ECHO_C" >&6; } if test "${lt_cv_cc_needs_belf+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then lt_cv_cc_needs_belf=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 lt_cv_cc_needs_belf=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi { echo "$as_me:$LINENO: result: $lt_cv_cc_needs_belf" >&5 echo "${ECHO_T}$lt_cv_cc_needs_belf" >&6; } if test x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" fi ;; sparc*-*solaris*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) LD="${LD-ld} -m elf64_sparc" ;; *) LD="${LD-ld} -64" ;; esac ;; esac fi rm -rf conftest* ;; *-*-cygwin* | *-*-mingw* | *-*-pw32*) if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. set dummy ${ac_tool_prefix}dlltool; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_DLLTOOL+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$DLLTOOL"; then ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DLLTOOL=$ac_cv_prog_DLLTOOL if test -n "$DLLTOOL"; then { echo "$as_me:$LINENO: result: $DLLTOOL" >&5 echo "${ECHO_T}$DLLTOOL" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi fi if test -z "$ac_cv_prog_DLLTOOL"; then ac_ct_DLLTOOL=$DLLTOOL # Extract the first word of "dlltool", so it can be a program name with args. set dummy dlltool; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_ac_ct_DLLTOOL+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_DLLTOOL"; then ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_DLLTOOL="dlltool" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL if test -n "$ac_ct_DLLTOOL"; then { echo "$as_me:$LINENO: result: $ac_ct_DLLTOOL" >&5 echo "${ECHO_T}$ac_ct_DLLTOOL" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi if test "x$ac_ct_DLLTOOL" = x; then DLLTOOL="false" else case $cross_compiling:$ac_tool_warned in yes:) { echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&5 echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&2;} ac_tool_warned=yes ;; esac DLLTOOL=$ac_ct_DLLTOOL fi else DLLTOOL="$ac_cv_prog_DLLTOOL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}as", so it can be a program name with args. set dummy ${ac_tool_prefix}as; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_AS+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$AS"; then ac_cv_prog_AS="$AS" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_AS="${ac_tool_prefix}as" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AS=$ac_cv_prog_AS if test -n "$AS"; then { echo "$as_me:$LINENO: result: $AS" >&5 echo "${ECHO_T}$AS" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi fi if test -z "$ac_cv_prog_AS"; then ac_ct_AS=$AS # Extract the first word of "as", so it can be a program name with args. set dummy as; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_ac_ct_AS+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_AS"; then ac_cv_prog_ac_ct_AS="$ac_ct_AS" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_AS="as" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_AS=$ac_cv_prog_ac_ct_AS if test -n "$ac_ct_AS"; then { echo "$as_me:$LINENO: result: $ac_ct_AS" >&5 echo "${ECHO_T}$ac_ct_AS" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi if test "x$ac_ct_AS" = x; then AS="false" else case $cross_compiling:$ac_tool_warned in yes:) { echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&5 echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&2;} ac_tool_warned=yes ;; esac AS=$ac_ct_AS fi else AS="$ac_cv_prog_AS" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. set dummy ${ac_tool_prefix}objdump; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_OBJDUMP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$OBJDUMP"; then ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OBJDUMP=$ac_cv_prog_OBJDUMP if test -n "$OBJDUMP"; then { echo "$as_me:$LINENO: result: $OBJDUMP" >&5 echo "${ECHO_T}$OBJDUMP" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi fi if test -z "$ac_cv_prog_OBJDUMP"; then ac_ct_OBJDUMP=$OBJDUMP # Extract the first word of "objdump", so it can be a program name with args. set dummy objdump; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_OBJDUMP"; then ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_OBJDUMP="objdump" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP if test -n "$ac_ct_OBJDUMP"; then { echo "$as_me:$LINENO: result: $ac_ct_OBJDUMP" >&5 echo "${ECHO_T}$ac_ct_OBJDUMP" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi if test "x$ac_ct_OBJDUMP" = x; then OBJDUMP="false" else case $cross_compiling:$ac_tool_warned in yes:) { echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&5 echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&2;} ac_tool_warned=yes ;; esac OBJDUMP=$ac_ct_OBJDUMP fi else OBJDUMP="$ac_cv_prog_OBJDUMP" fi ;; esac need_locks="$enable_libtool_lock" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if test "${ac_cv_prog_CPP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { echo "$as_me:$LINENO: result: $CPP" >&5 echo "${ECHO_T}$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details." >&5 echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { echo "$as_me:$LINENO: checking for ANSI C header files" >&5 echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6; } if test "${ac_cv_header_stdc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_header_stdc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi fi { echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 echo "${ECHO_T}$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then cat >>confdefs.h <<\_ACEOF #define STDC_HEADERS 1 _ACEOF fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` { echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then eval "$as_ac_Header=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_Header=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi ac_res=`eval echo '${'$as_ac_Header'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in dlfcn.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then { echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi ac_res=`eval echo '${'$as_ac_Header'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } else # Is the header compilable? { echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6; } # Is the header present? { echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## --------------------------------------- ## ## Report this to polyml AT polyml DOT org ## ## --------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi ac_res=`eval echo '${'$as_ac_Header'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test -z "$CXX"; then if test -n "$CCC"; then CXX=$CCC else if test -n "$ac_tool_prefix"; then for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_CXX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then { echo "$as_me:$LINENO: result: $CXX" >&5 echo "${ECHO_T}$CXX" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi test -n "$CXX" && break done fi if test -z "$CXX"; then ac_ct_CXX=$CXX for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CXX="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then { echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5 echo "${ECHO_T}$ac_ct_CXX" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi test -n "$ac_ct_CXX" && break done if test "x$ac_ct_CXX" = x; then CXX="g++" else case $cross_compiling:$ac_tool_warned in yes:) { echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&5 echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&2;} ac_tool_warned=yes ;; esac CXX=$ac_ct_CXX fi fi fi fi # Provide some information about the compiler. echo "$as_me:$LINENO: checking for C++ compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (ac_try="$ac_compiler --version >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compiler --version >&5") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (ac_try="$ac_compiler -v >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compiler -v >&5") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (ac_try="$ac_compiler -V >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compiler -V >&5") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { echo "$as_me:$LINENO: checking whether we are using the GNU C++ compiler" >&5 echo $ECHO_N "checking whether we are using the GNU C++ compiler... $ECHO_C" >&6; } if test "${ac_cv_cxx_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu fi { echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_cxx_compiler_gnu" >&6; } GXX=`test $ac_compiler_gnu = yes && echo yes` ac_test_CXXFLAGS=${CXXFLAGS+set} ac_save_CXXFLAGS=$CXXFLAGS { echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5 echo $ECHO_N "checking whether $CXX accepts -g... $ECHO_C" >&6; } if test "${ac_cv_prog_cxx_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_save_cxx_werror_flag=$ac_cxx_werror_flag ac_cxx_werror_flag=yes ac_cv_prog_cxx_g=no CXXFLAGS="-g" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cxx_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 CXXFLAGS="" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cxx_werror_flag=$ac_save_cxx_werror_flag CXXFLAGS="-g" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cxx_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cxx_werror_flag=$ac_save_cxx_werror_flag fi { echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5 echo "${ECHO_T}$ac_cv_prog_cxx_g" >&6; } if test "$ac_test_CXXFLAGS" = set; then CXXFLAGS=$ac_save_CXXFLAGS elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then CXXFLAGS="-g -O2" else CXXFLAGS="-g" fi else if test "$GXX" = yes; then CXXFLAGS="-O2" else CXXFLAGS= fi fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu depcc="$CXX" am_compiler_list= { echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6; } if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CXX_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf case $depmode in nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; none) break ;; esac # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. if depmode=$depmode \ source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CXX_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CXX_dependencies_compiler_type=none fi fi { echo "$as_me:$LINENO: result: $am_cv_CXX_dependencies_compiler_type" >&5 echo "${ECHO_T}$am_cv_CXX_dependencies_compiler_type" >&6; } CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then am__fastdepCXX_TRUE= am__fastdepCXX_FALSE='#' else am__fastdepCXX_TRUE='#' am__fastdepCXX_FALSE= fi if test -n "$CXX" && ( test "X$CXX" != "Xno" && ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || (test "X$CXX" != "Xg++"))) ; then ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu { echo "$as_me:$LINENO: checking how to run the C++ preprocessor" >&5 echo $ECHO_N "checking how to run the C++ preprocessor... $ECHO_C" >&6; } if test -z "$CXXCPP"; then if test "${ac_cv_prog_CXXCPP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # Double quotes because CXXCPP needs to be expanded for CXXCPP in "$CXX -E" "/lib/cpp" do ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err }; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then break fi done ac_cv_prog_CXXCPP=$CXXCPP fi CXXCPP=$ac_cv_prog_CXXCPP else ac_cv_prog_CXXCPP=$CXXCPP fi { echo "$as_me:$LINENO: result: $CXXCPP" >&5 echo "${ECHO_T}$CXXCPP" >&6; } ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err }; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { echo "$as_me:$LINENO: error: C++ preprocessor \"$CXXCPP\" fails sanity check See \`config.log' for more details." >&5 echo "$as_me: error: C++ preprocessor \"$CXXCPP\" fails sanity check See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu fi ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu if test -n "$ac_tool_prefix"; then for ac_prog in g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77 xlf90 f90 pgf90 pghpf epcf90 gfortran g95 xlf95 f95 fort ifort ifc efc pgf95 lf95 ftn do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_F77+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$F77"; then ac_cv_prog_F77="$F77" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_F77="$ac_tool_prefix$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi F77=$ac_cv_prog_F77 if test -n "$F77"; then { echo "$as_me:$LINENO: result: $F77" >&5 echo "${ECHO_T}$F77" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi test -n "$F77" && break done fi if test -z "$F77"; then ac_ct_F77=$F77 for ac_prog in g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77 xlf90 f90 pgf90 pghpf epcf90 gfortran g95 xlf95 f95 fort ifort ifc efc pgf95 lf95 ftn do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_ac_ct_F77+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_F77"; then ac_cv_prog_ac_ct_F77="$ac_ct_F77" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_F77="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_F77=$ac_cv_prog_ac_ct_F77 if test -n "$ac_ct_F77"; then { echo "$as_me:$LINENO: result: $ac_ct_F77" >&5 echo "${ECHO_T}$ac_ct_F77" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi test -n "$ac_ct_F77" && break done if test "x$ac_ct_F77" = x; then F77="" else case $cross_compiling:$ac_tool_warned in yes:) { echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&5 echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&2;} ac_tool_warned=yes ;; esac F77=$ac_ct_F77 fi fi # Provide some information about the compiler. echo "$as_me:$LINENO: checking for Fortran 77 compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (ac_try="$ac_compiler --version >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compiler --version >&5") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (ac_try="$ac_compiler -v >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compiler -v >&5") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (ac_try="$ac_compiler -V >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compiler -V >&5") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } rm -f a.out # If we don't use `.F' as extension, the preprocessor is not run on the # input file. (Note that this only needs to work for GNU compilers.) ac_save_ext=$ac_ext ac_ext=F { echo "$as_me:$LINENO: checking whether we are using the GNU Fortran 77 compiler" >&5 echo $ECHO_N "checking whether we are using the GNU Fortran 77 compiler... $ECHO_C" >&6; } if test "${ac_cv_f77_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF program main #ifndef __GNUC__ choke me #endif end _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_f77_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_f77_compiler_gnu=$ac_compiler_gnu fi { echo "$as_me:$LINENO: result: $ac_cv_f77_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_f77_compiler_gnu" >&6; } ac_ext=$ac_save_ext ac_test_FFLAGS=${FFLAGS+set} ac_save_FFLAGS=$FFLAGS FFLAGS= { echo "$as_me:$LINENO: checking whether $F77 accepts -g" >&5 echo $ECHO_N "checking whether $F77 accepts -g... $ECHO_C" >&6; } if test "${ac_cv_prog_f77_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else FFLAGS=-g cat >conftest.$ac_ext <<_ACEOF program main end _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_f77_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_f77_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_prog_f77_g=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_prog_f77_g" >&5 echo "${ECHO_T}$ac_cv_prog_f77_g" >&6; } if test "$ac_test_FFLAGS" = set; then FFLAGS=$ac_save_FFLAGS elif test $ac_cv_prog_f77_g = yes; then if test "x$ac_cv_f77_compiler_gnu" = xyes; then FFLAGS="-g -O2" else FFLAGS="-g" fi else if test "x$ac_cv_f77_compiler_gnu" = xyes; then FFLAGS="-O2" else FFLAGS= fi fi G77=`test $ac_compiler_gnu = yes && echo yes` ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers! # find the maximum length of command line arguments { echo "$as_me:$LINENO: checking the maximum length of command line arguments" >&5 echo $ECHO_N "checking the maximum length of command line arguments... $ECHO_C" >&6; } if test "${lt_cv_sys_max_cmd_len+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else i=0 teststring="ABCD" case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} while (test "X"`$SHELL $0 --fallback-echo "X$teststring" 2>/dev/null` \ = "XX$teststring") >/dev/null 2>&1 && new_result=`expr "X$teststring" : ".*" 2>&1` && lt_cv_sys_max_cmd_len=$new_result && test $i != 17 # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done teststring= # Add a significant safety factor because C++ compilers can tack on massive # amounts of additional arguments before passing them to the linker. # It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` ;; esac fi if test -n $lt_cv_sys_max_cmd_len ; then { echo "$as_me:$LINENO: result: $lt_cv_sys_max_cmd_len" >&5 echo "${ECHO_T}$lt_cv_sys_max_cmd_len" >&6; } else { echo "$as_me:$LINENO: result: none" >&5 echo "${ECHO_T}none" >&6; } fi # Check for command to grab the raw symbol name followed by C symbol from nm. { echo "$as_me:$LINENO: checking command to parse $NM output from $compiler object" >&5 echo $ECHO_N "checking command to parse $NM output from $compiler object... $ECHO_C" >&6; } if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[BCDEGRST]' # Regexp to match symbols that can be accessed directly from C. sympat='\([_A-Za-z][_A-Za-z0-9]*\)' # Transform an extracted symbol line into a proper C declaration lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern int \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" # Define system-specific variables. case $host_os in aix*) symcode='[BCDT]' ;; cygwin* | mingw* | pw32*) symcode='[ABCDGISTW]' ;; hpux*) # Its linker distinguishes data from code symbols if test "$host_cpu" = ia64; then symcode='[ABCDEGRST]' fi lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" ;; linux* | k*bsd*-gnu) if test "$host_cpu" = ia64; then symcode='[ABCDGIRSTW]' lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" fi ;; irix* | nonstopux*) symcode='[BCDEGRST]' ;; osf*) symcode='[BCDEGQRST]' ;; solaris*) symcode='[BDRT]' ;; sco3.2v5*) symcode='[DT]' ;; sysv4.2uw2*) symcode='[DT]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[ABDT]' ;; sysv4) symcode='[DFNSTU]' ;; esac # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[ABCDGIRSTW]' ;; esac # Try without a prefix undercore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # Now try to grab the symbols. nlist=conftest.nm if { (eval echo "$as_me:$LINENO: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\"") >&5 (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if grep ' nm_test_var$' "$nlist" >/dev/null; then if grep ' nm_test_func$' "$nlist" >/dev/null; then cat < conftest.$ac_ext #ifdef __cplusplus extern "C" { #endif EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | grep -v main >> conftest.$ac_ext' cat <> conftest.$ac_ext #if defined (__STDC__) && __STDC__ # define lt_ptr_t void * #else # define lt_ptr_t char * # define const #endif /* The mapping between symbol names and symbols. */ const struct { const char *name; lt_ptr_t address; } lt_preloaded_symbols[] = { EOF $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" | grep -v main >> conftest.$ac_ext cat <<\EOF >> conftest.$ac_ext {0, (lt_ptr_t) 0} }; #ifdef __cplusplus } #endif EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_save_LIBS="$LIBS" lt_save_CFLAGS="$CFLAGS" LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS="$lt_save_LIBS" CFLAGS="$lt_save_CFLAGS" else echo "cannot find nm_test_func in $nlist" >&5 fi else echo "cannot find nm_test_var in $nlist" >&5 fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 fi else echo "$progname: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test "$pipe_works" = yes; then break else lt_cv_sys_global_symbol_pipe= fi done fi if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then { echo "$as_me:$LINENO: result: failed" >&5 echo "${ECHO_T}failed" >&6; } else { echo "$as_me:$LINENO: result: ok" >&5 echo "${ECHO_T}ok" >&6; } fi { echo "$as_me:$LINENO: checking for objdir" >&5 echo $ECHO_N "checking for objdir... $ECHO_C" >&6; } if test "${lt_cv_objdir+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null fi { echo "$as_me:$LINENO: result: $lt_cv_objdir" >&5 echo "${ECHO_T}$lt_cv_objdir" >&6; } objdir=$lt_cv_objdir case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. Xsed='sed -e 1s/^X//' sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' # Constants: rm="rm -f" # Global variables: default_ofile=libtool can_build_shared=yes # All known linkers require a `.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a ltmain="$ac_aux_dir/ltmain.sh" ofile="$default_ofile" with_gnu_ld="$lt_cv_prog_gnu_ld" if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. set dummy ${ac_tool_prefix}ar; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_AR+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_AR="${ac_tool_prefix}ar" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then { echo "$as_me:$LINENO: result: $AR" >&5 echo "${ECHO_T}$AR" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi fi if test -z "$ac_cv_prog_AR"; then ac_ct_AR=$AR # Extract the first word of "ar", so it can be a program name with args. set dummy ar; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_ac_ct_AR+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_AR="ar" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then { echo "$as_me:$LINENO: result: $ac_ct_AR" >&5 echo "${ECHO_T}$ac_ct_AR" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi if test "x$ac_ct_AR" = x; then AR="false" else case $cross_compiling:$ac_tool_warned in yes:) { echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&5 echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&2;} ac_tool_warned=yes ;; esac AR=$ac_ct_AR fi else AR="$ac_cv_prog_AR" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_RANLIB+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { echo "$as_me:$LINENO: result: $RANLIB" >&5 echo "${ECHO_T}$RANLIB" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_RANLIB="ranlib" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 echo "${ECHO_T}$ac_ct_RANLIB" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&5 echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { echo "$as_me:$LINENO: result: $STRIP" >&5 echo "${ECHO_T}$STRIP" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_STRIP="strip" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 echo "${ECHO_T}$ac_ct_STRIP" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&5 echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi old_CC="$CC" old_CFLAGS="$CFLAGS" # Set sane defaults for various variables test -z "$AR" && AR=ar test -z "$AR_FLAGS" && AR_FLAGS=cru test -z "$AS" && AS=as test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$DLLTOOL" && DLLTOOL=dlltool test -z "$LD" && LD=ld test -z "$LN_S" && LN_S="ln -s" test -z "$MAGIC_CMD" && MAGIC_CMD=file test -z "$NM" && NM=nm test -z "$SED" && SED=sed test -z "$OBJDUMP" && OBJDUMP=objdump test -z "$RANLIB" && RANLIB=: test -z "$STRIP" && STRIP=: test -z "$ac_objext" && ac_objext=o # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" fi for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` # Only perform the check for file, if the check method requires it case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then { echo "$as_me:$LINENO: checking for ${ac_tool_prefix}file" >&5 echo $ECHO_N "checking for ${ac_tool_prefix}file... $ECHO_C" >&6; } if test "${lt_cv_path_MAGIC_CMD+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/${ac_tool_prefix}file; then lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then { echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 echo "${ECHO_T}$MAGIC_CMD" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then { echo "$as_me:$LINENO: checking for file" >&5 echo $ECHO_N "checking for file... $ECHO_C" >&6; } if test "${lt_cv_path_MAGIC_CMD+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/file; then lt_cv_path_MAGIC_CMD="$ac_dir/file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then { echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 echo "${ECHO_T}$MAGIC_CMD" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi else MAGIC_CMD=: fi fi fi ;; esac enable_dlopen=no enable_win32_dll=yes # Check whether --enable-libtool-lock was given. if test "${enable_libtool_lock+set}" = set; then enableval=$enable_libtool_lock; fi test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Check whether --with-pic was given. if test "${with_pic+set}" = set; then withval=$with_pic; pic_mode="$withval" else pic_mode=default fi test -z "$pic_mode" && pic_mode=default # Use C for the default configuration in the libtool script tagname= lt_save_CC="$CC" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o objext=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;\n" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}\n' # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext printf "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $rm conftest* ac_outfile=conftest.$ac_objext printf "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $rm conftest* lt_prog_compiler_no_builtin_flag= if test "$GCC" = yes; then lt_prog_compiler_no_builtin_flag=' -fno-builtin' { echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6; } if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-fno-rtti -fno-exceptions" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:7439: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:7443: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_rtti_exceptions=yes fi fi $rm conftest* fi { echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 echo "${ECHO_T}$lt_cv_prog_compiler_rtti_exceptions" >&6; } if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" else : fi fi lt_prog_compiler_wl= lt_prog_compiler_pic= lt_prog_compiler_static= { echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6; } if test "$GCC" = yes; then lt_prog_compiler_wl='-Wl,' lt_prog_compiler_static='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' fi ;; amigaos*) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' ;; beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | pw32* | os2*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic='-fno-common' ;; interix3*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. lt_prog_compiler_can_build_shared=no enable_shared=no ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic=-Kconform_pic fi ;; hpux*) # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic='-fPIC' ;; esac ;; *) lt_prog_compiler_pic='-fPIC' ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' else lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' fi ;; darwin*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files case $cc_basename in xlc*) lt_prog_compiler_pic='-qnocommon' lt_prog_compiler_wl='-Wl,' ;; esac ;; mingw* | pw32* | os2*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic='-DDLL_EXPORT' ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static='-non_shared' ;; newsos6) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; linux* | k*bsd*-gnu) case $cc_basename in icc* | ecc*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-static' ;; pgcc* | pgf77* | pgf90* | pgf95*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; ccc*) lt_prog_compiler_wl='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static='-non_shared' ;; esac ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static='-non_shared' ;; solaris*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' case $cc_basename in f77* | f90* | f95*) lt_prog_compiler_wl='-Qoption ld ';; *) lt_prog_compiler_wl='-Wl,';; esac ;; sunos4*) lt_prog_compiler_wl='-Qoption ld ' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then lt_prog_compiler_pic='-Kconform_pic' lt_prog_compiler_static='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; unicos*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_can_build_shared=no ;; uts4*) lt_prog_compiler_pic='-pic' lt_prog_compiler_static='-Bstatic' ;; *) lt_prog_compiler_can_build_shared=no ;; esac fi { echo "$as_me:$LINENO: result: $lt_prog_compiler_pic" >&5 echo "${ECHO_T}$lt_prog_compiler_pic" >&6; } # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic"; then { echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic works... $ECHO_C" >&6; } if test "${lt_prog_compiler_pic_works+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_prog_compiler_pic_works=no ac_outfile=conftest.$ac_objext printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic -DPIC" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:7707: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:7711: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_prog_compiler_pic_works=yes fi fi $rm conftest* fi { echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works" >&5 echo "${ECHO_T}$lt_prog_compiler_pic_works" >&6; } if test x"$lt_prog_compiler_pic_works" = xyes; then case $lt_prog_compiler_pic in "" | " "*) ;; *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; esac else lt_prog_compiler_pic= lt_prog_compiler_can_build_shared=no fi fi case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic= ;; *) lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" ;; esac # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" { echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5 echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6; } if test "${lt_prog_compiler_static_works+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_prog_compiler_static_works=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" printf "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_prog_compiler_static_works=yes fi else lt_prog_compiler_static_works=yes fi fi $rm conftest* LDFLAGS="$save_LDFLAGS" fi { echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works" >&5 echo "${ECHO_T}$lt_prog_compiler_static_works" >&6; } if test x"$lt_prog_compiler_static_works" = xyes; then : else lt_prog_compiler_static= fi { echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6; } if test "${lt_cv_prog_compiler_c_o+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_prog_compiler_c_o=no $rm -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:7811: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:7815: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $rm conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files $rm out/* && rmdir out cd .. rmdir conftest $rm conftest* fi { echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o" >&5 echo "${ECHO_T}$lt_cv_prog_compiler_c_o" >&6; } hard_links="nottested" if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user { echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6; } hard_links=yes $rm conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no { echo "$as_me:$LINENO: result: $hard_links" >&5 echo "${ECHO_T}$hard_links" >&6; } if test "$hard_links" = no; then { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi { echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6; } runpath_var= allow_undefined_flag= enable_shared_with_static_runtimes=no archive_cmds= archive_expsym_cmds= old_archive_From_new_cmds= old_archive_from_expsyms_cmds= export_dynamic_flag_spec= whole_archive_flag_spec= thread_safe_flag_spec= hardcode_libdir_flag_spec= hardcode_libdir_flag_spec_ld= hardcode_libdir_separator= hardcode_direct=no hardcode_minus_L=no hardcode_shlibpath_var=unsupported link_all_deplibs=unknown hardcode_automatic=no module_cmds= module_expsym_cmds= always_export_symbols=no export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. exclude_expsyms="_GLOBAL_OFFSET_TABLE_" # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. extract_expsyms_cmds= # Just being paranoid about ensuring that cc_basename is set. for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` case $host_os in cygwin* | mingw* | pw32*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; esac ld_shlibs=yes if test "$with_gnu_ld" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec='${wl}--rpath ${wl}$libdir' export_dynamic_flag_spec='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec= fi supports_anon_versioning=no case `$LD -v 2>/dev/null` in *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix3* | aix4* | aix5*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs=no cat <&2 *** Warning: the GNU linker, at least up to release 2.9.1, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to modify your PATH *** so that a non-GNU linker is found, and then restart. EOF fi ;; amigaos*) archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes # Samuel A. Falvo II reports # that the semantics of dynamic libraries on AmigaOS, at least up # to version 4, is to share data among multiple programs linked # with the same dynamic library. Since this doesn't match the # behavior of shared libraries on other platforms, we can't use # them. ld_shlibs=no ;; beos*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then allow_undefined_flag=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs=no fi ;; cygwin* | mingw* | pw32*) # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' allow_undefined_flag=unsupported always_export_symbols=no enable_shared_with_static_runtimes=yes export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs=no fi ;; interix3*) hardcode_direct=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='${wl}-rpath,$libdir' export_dynamic_flag_spec='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; linux* | k*bsd*-gnu) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then tmp_addflag= case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; esac archive_cmds='$CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test $supports_anon_versioning = yes; then archive_expsym_cmds='$echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ $echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi link_all_deplibs=no else ld_shlibs=no fi ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then ld_shlibs=no cat <&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. EOF elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib' else ld_shlibs=no fi ;; esac ;; sunos4*) archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct=yes hardcode_shlibpath_var=no ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac if test "$ld_shlibs" = no; then runpath_var= hardcode_libdir_flag_spec= export_dynamic_flag_spec= whole_archive_flag_spec= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag=unsupported always_export_symbols=yes archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix4* | aix5*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm if $NM -V 2>&1 | grep 'GNU' > /dev/null; then export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix5*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds='' hardcode_direct=yes hardcode_libdir_separator=':' link_all_deplibs=yes if test "$GCC" = yes; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && \ strings "$collect2name" | grep resolve_lib_name >/dev/null then # We have reworked collect2 hardcode_direct=yes else # We have old collect2 hardcode_direct=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag='-berok' # Determine the default libpath from the value encoded in an empty executable. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag="-z nodefs" archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an empty executable. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag=' ${wl}-bernotok' allow_undefined_flag=' ${wl}-berok' # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec='$convenience' archive_cmds_need_lc=yes # This is similar to how AIX traditionally builds its shared libraries. archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes # see comment about different semantics on the GNU ld section ld_shlibs=no ;; bsdi[45]*) export_dynamic_flag_spec=-rdynamic ;; cygwin* | mingw* | pw32*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_From_new_cmds='true' # FIXME: Should let the user specify the lib program. old_archive_cmds='lib /OUT:$oldlib$oldobjs$old_deplibs' fix_srcfile_path='`cygpath -w "$srcfile"`' enable_shared_with_static_runtimes=yes ;; darwin* | rhapsody*) case $host_os in rhapsody* | darwin1.[012]) allow_undefined_flag='${wl}-undefined ${wl}suppress' ;; *) # Darwin 1.3 on if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then allow_undefined_flag='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' else case ${MACOSX_DEPLOYMENT_TARGET} in 10.[012]) allow_undefined_flag='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) allow_undefined_flag='${wl}-undefined ${wl}dynamic_lookup' ;; esac fi ;; esac archive_cmds_need_lc=no hardcode_direct=no hardcode_automatic=yes hardcode_shlibpath_var=unsupported whole_archive_flag_spec='' link_all_deplibs=yes if test "$GCC" = yes ; then output_verbose_link_cmd='echo' archive_cmds='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' module_cmds='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' module_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' else case $cc_basename in xlc*) output_verbose_link_cmd='echo' archive_cmds='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring' module_cmds='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' module_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' ;; *) ld_shlibs=no ;; esac fi ;; dgux*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; freebsd1*) ld_shlibs=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; hpux9*) if test "$GCC" = yes; then archive_cmds='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else archive_cmds='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes export_dynamic_flag_spec='${wl}-E' ;; hpux10*) if test "$GCC" = yes -a "$with_gnu_ld" = no; then archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes export_dynamic_flag_spec='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes fi ;; hpux11*) if test "$GCC" = yes -a "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: case $host_cpu in hppa*64*|ia64*) hardcode_libdir_flag_spec_ld='+b $libdir' hardcode_direct=no hardcode_shlibpath_var=no ;; *) hardcode_direct=yes export_dynamic_flag_spec='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_ld='-rpath $libdir' fi hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: link_all_deplibs=yes ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; newsos6) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: hardcode_shlibpath_var=no ;; openbsd*) hardcode_direct=yes hardcode_shlibpath_var=no if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' export_dynamic_flag_spec='${wl}-E' else case $host_os in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-R$libdir' ;; *) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; esac fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes allow_undefined_flag=unsupported archive_cmds='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' old_archive_From_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' fi hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~$rm $lib.exp' # Both c and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi hardcode_libdir_separator=: ;; solaris*) no_undefined_flag=' -z text' if test "$GCC" = yes; then wlarc='${wl}' archive_cmds='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' else wlarc='' archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' fi hardcode_libdir_flag_spec='-R$libdir' hardcode_shlibpath_var=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine linker options so we # cannot just pass the convience library names through # without $wl, iff we do not link with $LD. # Luckily, gcc supports the same syntax we need for Sun Studio. # Supported since Solaris 2.6 (maybe 2.5.1?) case $wlarc in '') whole_archive_flag_spec='-z allextract$convenience -z defaultextract' ;; *) whole_archive_flag_spec='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' ;; esac ;; esac link_all_deplibs=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; sysv4) case $host_vendor in sni) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds='$CC -r -o $output$reload_objs' hardcode_direct=no ;; motorola) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var=no ;; sysv4.3*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no export_dynamic_flag_spec='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7*) no_undefined_flag='${wl}-z,text' archive_cmds_need_lc=no hardcode_shlibpath_var=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag='${wl}-z,text' allow_undefined_flag='${wl}-z,nodefs' archive_cmds_need_lc=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' hardcode_libdir_separator=':' link_all_deplibs=yes export_dynamic_flag_spec='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; *) ld_shlibs=no ;; esac fi { echo "$as_me:$LINENO: result: $ld_shlibs" >&5 echo "${ECHO_T}$ld_shlibs" >&6; } test "$ld_shlibs" = no && can_build_shared=no # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc" in x|xyes) # Assume -lc should be added archive_cmds_need_lc=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. { echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6; } $rm conftest* printf "$lt_simple_compile_test_code" > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl pic_flag=$lt_prog_compiler_pic compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag allow_undefined_flag= if { (eval echo "$as_me:$LINENO: \"$archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 (eval $archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } then archive_cmds_need_lc=no else archive_cmds_need_lc=yes fi allow_undefined_flag=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $rm conftest* { echo "$as_me:$LINENO: result: $archive_cmds_need_lc" >&5 echo "${ECHO_T}$archive_cmds_need_lc" >&6; } ;; esac fi ;; esac { echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6; } library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix4* | aix5*) version_type=linux need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$host_os in yes,cygwin* | yes,mingw* | yes,pw32*) library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $rm \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" ;; mingw*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH printed by # mingw gcc, but we are running on Cygwin. Gcc prints its search # path with ; separators, and with drive letters. We can handle the # drive letters (cygwin fileutils understands them), so leave them, # especially as we might pass files found there to a mingw objdump, # which wouldn't understand a cygwinified path. Ahh. sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; esac ;; *) library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' ;; esac dynamic_linker='Win32 ld.exe' # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` else sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' fi sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd1*) dynamic_linker=no ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[123]*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; freebsd*) # from 4.6 on shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555. postinstall_cmds='chmod 555 $lib' ;; interix3*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be Linux ELF. linux* | k*bsd*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsdelf*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='NetBSD ld.elf_so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; nto-qnx*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; solaris*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no export_dynamic_flag_spec='${wl}-Blargedynsym' runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' shlibpath_overrides_runpath=no else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' shlibpath_overrides_runpath=yes case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; uts4*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac { echo "$as_me:$LINENO: result: $dynamic_linker" >&5 echo "${ECHO_T}$dynamic_linker" >&6; } test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi { echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6; } hardcode_action= if test -n "$hardcode_libdir_flag_spec" || \ test -n "$runpath_var" || \ test "X$hardcode_automatic" = "Xyes" ; then # We can hardcode non-existant directories. if test "$hardcode_direct" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, )" != no && test "$hardcode_minus_L" != no; then # Linking always hardcodes the temporary library directory. hardcode_action=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action=unsupported fi { echo "$as_me:$LINENO: result: $hardcode_action" >&5 echo "${ECHO_T}$hardcode_action" >&6; } if test "$hardcode_action" = relink; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi striplib= old_striplib= { echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5 echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6; } if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" { echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6; } else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" { echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi ;; *) { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } ;; esac fi if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it { echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6; } if test "${ac_cv_lib_dl_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_lib_dl_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6; } if test $ac_cv_lib_dl_dlopen = yes; then lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes fi ;; *) { echo "$as_me:$LINENO: checking for shl_load" >&5 echo $ECHO_N "checking for shl_load... $ECHO_C" >&6; } if test "${ac_cv_func_shl_load+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define shl_load to an innocuous variant, in case declares shl_load. For example, HP-UX 11i declares gettimeofday. */ #define shl_load innocuous_shl_load /* System header to define __stub macros and hopefully few prototypes, which can conflict with char shl_load (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef shl_load /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char shl_load (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_shl_load || defined __stub___shl_load choke me #endif int main () { return shl_load (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_func_shl_load=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_shl_load=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5 echo "${ECHO_T}$ac_cv_func_shl_load" >&6; } if test $ac_cv_func_shl_load = yes; then lt_cv_dlopen="shl_load" else { echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5 echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6; } if test "${ac_cv_lib_dld_shl_load+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char shl_load (); int main () { return shl_load (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_lib_dld_shl_load=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dld_shl_load=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5 echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6; } if test $ac_cv_lib_dld_shl_load = yes; then lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld" else { echo "$as_me:$LINENO: checking for dlopen" >&5 echo $ECHO_N "checking for dlopen... $ECHO_C" >&6; } if test "${ac_cv_func_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define dlopen to an innocuous variant, in case declares dlopen. For example, HP-UX 11i declares gettimeofday. */ #define dlopen innocuous_dlopen /* System header to define __stub macros and hopefully few prototypes, which can conflict with char dlopen (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef dlopen /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_dlopen || defined __stub___dlopen choke me #endif int main () { return dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_func_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_dlopen=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5 echo "${ECHO_T}$ac_cv_func_dlopen" >&6; } if test $ac_cv_func_dlopen = yes; then lt_cv_dlopen="dlopen" else { echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6; } if test "${ac_cv_lib_dl_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_lib_dl_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6; } if test $ac_cv_lib_dl_dlopen = yes; then lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else { echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5 echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6; } if test "${ac_cv_lib_svld_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_lib_svld_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_svld_dlopen=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5 echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6; } if test $ac_cv_lib_svld_dlopen = yes; then lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" else { echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5 echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6; } if test "${ac_cv_lib_dld_dld_link+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dld_link (); int main () { return dld_link (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_lib_dld_dld_link=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dld_dld_link=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5 echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6; } if test $ac_cv_lib_dld_dld_link = yes; then lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld" fi fi fi fi fi fi ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" { echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5 echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6; } if test "${lt_cv_dlopen_self+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext < #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif #ifdef __cplusplus extern "C" void exit (int); #endif void fnord() { int i=42;} int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; /* dlclose (self); */ } else puts (dlerror ()); exit (status); } EOF if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; esac else : # compilation failed lt_cv_dlopen_self=no fi fi rm -fr conftest* fi { echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5 echo "${ECHO_T}$lt_cv_dlopen_self" >&6; } if test "x$lt_cv_dlopen_self" = xyes; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" { echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5 echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6; } if test "${lt_cv_dlopen_self_static+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self_static=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext < #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif #ifdef __cplusplus extern "C" void exit (int); #endif void fnord() { int i=42;} int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; /* dlclose (self); */ } else puts (dlerror ()); exit (status); } EOF if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; esac else : # compilation failed lt_cv_dlopen_self_static=no fi fi rm -fr conftest* fi { echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5 echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6; } fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi # Report which library types will actually be built { echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5 echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6; } { echo "$as_me:$LINENO: result: $can_build_shared" >&5 echo "${ECHO_T}$can_build_shared" >&6; } { echo "$as_me:$LINENO: checking whether to build shared libraries" >&5 echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6; } test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix4* | aix5*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac { echo "$as_me:$LINENO: result: $enable_shared" >&5 echo "${ECHO_T}$enable_shared" >&6; } { echo "$as_me:$LINENO: checking whether to build static libraries" >&5 echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6; } # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes { echo "$as_me:$LINENO: result: $enable_static" >&5 echo "${ECHO_T}$enable_static" >&6; } # The else clause should only fire when bootstrapping the # libtool distribution, otherwise you forgot to ship ltmain.sh # with your package, and you will get complaints that there are # no rules to generate ltmain.sh. if test -f "$ltmain"; then # See if we are running on zsh, and set the options which allow our commands through # without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi # Now quote all the things that may contain metacharacters while being # careful not to overquote the AC_SUBSTed values. We take copies of the # variables and quote the copies for generation of the libtool script. for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \ SED SHELL STRIP \ libname_spec library_names_spec soname_spec extract_expsyms_cmds \ old_striplib striplib file_magic_cmd finish_cmds finish_eval \ deplibs_check_method reload_flag reload_cmds need_locks \ lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ old_postinstall_cmds old_postuninstall_cmds \ compiler \ CC \ LD \ lt_prog_compiler_wl \ lt_prog_compiler_pic \ lt_prog_compiler_static \ lt_prog_compiler_no_builtin_flag \ export_dynamic_flag_spec \ thread_safe_flag_spec \ whole_archive_flag_spec \ enable_shared_with_static_runtimes \ old_archive_cmds \ old_archive_from_new_cmds \ predep_objects \ postdep_objects \ predeps \ postdeps \ compiler_lib_search_path \ archive_cmds \ archive_expsym_cmds \ postinstall_cmds \ postuninstall_cmds \ old_archive_from_expsyms_cmds \ allow_undefined_flag \ no_undefined_flag \ export_symbols_cmds \ hardcode_libdir_flag_spec \ hardcode_libdir_flag_spec_ld \ hardcode_libdir_separator \ hardcode_automatic \ module_cmds \ module_expsym_cmds \ lt_cv_prog_compiler_c_o \ exclude_expsyms \ include_expsyms; do case $var in old_archive_cmds | \ old_archive_from_new_cmds | \ archive_cmds | \ archive_expsym_cmds | \ module_cmds | \ module_expsym_cmds | \ old_archive_from_expsyms_cmds | \ export_symbols_cmds | \ extract_expsyms_cmds | reload_cmds | finish_cmds | \ postinstall_cmds | postuninstall_cmds | \ old_postinstall_cmds | old_postuninstall_cmds | \ sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) # Double-quote double-evaled strings. eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" ;; *) eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" ;; esac done case $lt_echo in *'\$0 --fallback-echo"') lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` ;; esac cfgfile="${ofile}T" trap "$rm \"$cfgfile\"; exit 1" 1 2 15 $rm -f "$cfgfile" { echo "$as_me:$LINENO: creating $ofile" >&5 echo "$as_me: creating $ofile" >&6;} cat <<__EOF__ >> "$cfgfile" #! $SHELL # `$echo "$cfgfile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP) # NOTE: Changes made to this file will be lost: look at ltmain.sh. # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001 # Free Software Foundation, Inc. # # This file is part of GNU Libtool: # Originally by Gordon Matzigkeit , 1996 # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # A sed program that does not truncate output. SED=$lt_SED # Sed that helps us avoid accidentally triggering echo(1) options like -n. Xsed="$SED -e 1s/^X//" # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # The names of the tagged configurations supported by this script. available_tags= # ### BEGIN LIBTOOL CONFIG # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc # Whether or not to disallow shared libs when runtime libs are static allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # The host system. host_alias=$host_alias host=$host host_os=$host_os # The build system. build_alias=$build_alias build=$build build_os=$build_os # An echo program that does not interpret backslashes. echo=$lt_echo # The archiver. AR=$lt_AR AR_FLAGS=$lt_AR_FLAGS # A C compiler. LTCC=$lt_LTCC # LTCC compiler flags. LTCFLAGS=$lt_LTCFLAGS # A language-specific compiler. CC=$lt_compiler # Is the compiler the GNU C compiler? with_gcc=$GCC # An ERE matcher. EGREP=$lt_EGREP # The linker used to build libraries. LD=$lt_LD # Whether we need hard or soft links. LN_S=$lt_LN_S # A BSD-compatible nm program. NM=$lt_NM # A symbol stripping program STRIP=$lt_STRIP # Used to examine libraries when file_magic_cmd begins "file" MAGIC_CMD=$MAGIC_CMD # Used on cygwin: DLL creation program. DLLTOOL="$DLLTOOL" # Used on cygwin: object dumper. OBJDUMP="$OBJDUMP" # Used on cygwin: assembler. AS="$AS" # The name of the directory that contains temporary libtool files. objdir=$objdir # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl # Object file suffix (normally "o"). objext="$ac_objext" # Old archive suffix (normally "a"). libext="$libext" # Shared library suffix (normally ".so"). shrext_cmds='$shrext_cmds' # Executable file suffix (normally ""). exeext="$exeext" # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic pic_mode=$pic_mode # What is the maximum length of a command? max_cmd_len=$lt_cv_sys_max_cmd_len # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o # Must we lock files when doing compilation? need_locks=$lt_need_locks # Do we need the lib prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec # Compiler flag to generate thread-safe objects. thread_safe_flag_spec=$lt_thread_safe_flag_spec # Library versioning type. version_type=$version_type # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME. library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Commands used to build and install an old-style archive. RANLIB=$lt_RANLIB old_archive_cmds=$lt_old_archive_cmds old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds # Commands used to build and install a shared archive. archive_cmds=$lt_archive_cmds archive_expsym_cmds=$lt_archive_expsym_cmds postinstall_cmds=$lt_postinstall_cmds postuninstall_cmds=$lt_postuninstall_cmds # Commands used to build a loadable module (assumed same as above if empty) module_cmds=$lt_module_cmds module_expsym_cmds=$lt_module_expsym_cmds # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # Dependencies to place before the objects being linked to create a # shared library. predep_objects=$lt_predep_objects # Dependencies to place after the objects being linked to create a # shared library. postdep_objects=$lt_postdep_objects # Dependencies to place before the objects being linked to create a # shared library. predeps=$lt_predeps # Dependencies to place after the objects being linked to create a # shared library. postdeps=$lt_postdeps # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method == file_magic. file_magic_cmd=$lt_file_magic_cmd # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag # Flag that forces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # Same as above, but a single script fragment to be evaled but not shown. finish_eval=$lt_finish_eval # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # This is the shared library runtime path variable. runpath_var=$runpath_var # This is the shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist. hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec # If ld is used when linking, flag to hardcode \$libdir into # a binary during linking. This must work even if \$libdir does # not exist. hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld # Whether we need a single -rpath flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator # Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the # resulting binary. hardcode_direct=$hardcode_direct # Set to yes if using the -LDIR flag during linking hardcodes DIR into the # resulting binary. hardcode_minus_L=$hardcode_minus_L # Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into # the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var # Set to yes if building a shared library automatically hardcodes DIR into the library # and all subsequent libraries and executables linked against it. hardcode_automatic=$hardcode_automatic # Variables whose values should be saved in libtool wrapper scripts and # restored at relink time. variables_saved_for_relink="$variables_saved_for_relink" # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs # Compile-time system search path for libraries sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Fix the shell variable \$srcfile for the compiler. fix_srcfile_path="$fix_srcfile_path" # Set to yes if exported symbols are required. always_export_symbols=$always_export_symbols # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms # Symbols that must always be exported. include_expsyms=$lt_include_expsyms # ### END LIBTOOL CONFIG __EOF__ case $host_os in aix3*) cat <<\EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi EOF ;; esac # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" || (rm -f "$cfgfile"; exit 1) mv -f "$cfgfile" "$ofile" || \ (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" else # If there is no Makefile yet, we rely on a make rule to execute # `config.status --recheck' to rerun these tests and create the # libtool script then. ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` if test -f "$ltmain_in"; then test -f Makefile && make "$ltmain" fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu CC="$lt_save_CC" # Check whether --with-tags was given. if test "${with_tags+set}" = set; then withval=$with_tags; tagnames="$withval" fi if test -f "$ltmain" && test -n "$tagnames"; then if test ! -f "${ofile}"; then { echo "$as_me:$LINENO: WARNING: output file \`$ofile' does not exist" >&5 echo "$as_me: WARNING: output file \`$ofile' does not exist" >&2;} fi if test -z "$LTCC"; then eval "`$SHELL ${ofile} --config | grep '^LTCC='`" if test -z "$LTCC"; then { echo "$as_me:$LINENO: WARNING: output file \`$ofile' does not look like a libtool script" >&5 echo "$as_me: WARNING: output file \`$ofile' does not look like a libtool script" >&2;} else { echo "$as_me:$LINENO: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&5 echo "$as_me: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&2;} fi fi if test -z "$LTCFLAGS"; then eval "`$SHELL ${ofile} --config | grep '^LTCFLAGS='`" fi # Extract list of available tagged configurations in $ofile. # Note that this assumes the entire list is on one line. available_tags=`grep "^available_tags=" "${ofile}" | $SED -e 's/available_tags=\(.*$\)/\1/' -e 's/\"//g'` lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for tagname in $tagnames; do IFS="$lt_save_ifs" # Check whether tagname contains only valid characters case `$echo "X$tagname" | $Xsed -e 's:[-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,/]::g'` in "") ;; *) { { echo "$as_me:$LINENO: error: invalid tag name: $tagname" >&5 echo "$as_me: error: invalid tag name: $tagname" >&2;} { (exit 1); exit 1; }; } ;; esac if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "${ofile}" > /dev/null then { { echo "$as_me:$LINENO: error: tag name \"$tagname\" already exists" >&5 echo "$as_me: error: tag name \"$tagname\" already exists" >&2;} { (exit 1); exit 1; }; } fi # Update the list of available tags. if test -n "$tagname"; then echo appending configuration tag \"$tagname\" to $ofile case $tagname in CXX) if test -n "$CXX" && ( test "X$CXX" != "Xno" && ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || (test "X$CXX" != "Xg++"))) ; then ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu archive_cmds_need_lc_CXX=no allow_undefined_flag_CXX= always_export_symbols_CXX=no archive_expsym_cmds_CXX= export_dynamic_flag_spec_CXX= hardcode_direct_CXX=no hardcode_libdir_flag_spec_CXX= hardcode_libdir_flag_spec_ld_CXX= hardcode_libdir_separator_CXX= hardcode_minus_L_CXX=no hardcode_shlibpath_var_CXX=unsupported hardcode_automatic_CXX=no module_cmds_CXX= module_expsym_cmds_CXX= link_all_deplibs_CXX=unknown old_archive_cmds_CXX=$old_archive_cmds no_undefined_flag_CXX= whole_archive_flag_spec_CXX= enable_shared_with_static_runtimes_CXX=no # Dependencies to place before and after the object being linked: predep_objects_CXX= postdep_objects_CXX= predeps_CXX= postdeps_CXX= compiler_lib_search_path_CXX= # Source file extension for C++ test sources. ac_ext=cpp # Object file extension for compiled C++ test sources. objext=o objext_CXX=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;\n" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *[]) { return(0); }\n' # ltmain only uses $CC for tagged configurations so make sure $CC is set. # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext printf "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $rm conftest* ac_outfile=conftest.$ac_objext printf "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $rm conftest* # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX lt_save_with_gnu_ld=$with_gnu_ld lt_save_path_LD=$lt_cv_path_LD if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx else $as_unset lt_cv_prog_gnu_ld fi if test -n "${lt_cv_path_LDCXX+set}"; then lt_cv_path_LD=$lt_cv_path_LDCXX else $as_unset lt_cv_path_LD fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} compiler=$CC compiler_CXX=$CC for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` # We don't want -fno-exception wen compiling C++ code, so set the # no_builtin_flag separately if test "$GXX" = yes; then lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin' else lt_prog_compiler_no_builtin_flag_CXX= fi if test "$GXX" = yes; then # Set up default GNU C++ configuration # Check whether --with-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. { echo "$as_me:$LINENO: checking for ld used by $CC" >&5 echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'` while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then { echo "$as_me:$LINENO: checking for GNU ld" >&5 echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6; } else { echo "$as_me:$LINENO: checking for non-GNU ld" >&5 echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6; } fi if test "${lt_cv_path_LD+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &5 echo "${ECHO_T}$LD" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5 echo "$as_me: error: no acceptable ld found in \$PATH" >&2;} { (exit 1); exit 1; }; } { echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6; } if test "${lt_cv_prog_gnu_ld+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test "$with_gnu_ld" = yes; then archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) wlarc='${wl}' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | \ grep 'no-whole-archive' > /dev/null; then whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec_CXX= fi else with_gnu_ld=no wlarc= # A generic and very simple default shared library creation # command for GNU C++ for the case where it uses the native # linker, instead of GNU ld. If possible, this setting should # overridden to take advantage of the native linker features on # the platform it is being used on. archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics { echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6; } ld_shlibs_CXX=yes case $host_os in aix3*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aix4* | aix5*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix5*) for ld_flag in $LDFLAGS; do case $ld_flag in *-brtl*) aix_use_runtimelinking=yes break ;; esac done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds_CXX='' hardcode_direct_CXX=yes hardcode_libdir_separator_CXX=':' link_all_deplibs_CXX=yes if test "$GXX" = yes; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && \ strings "$collect2name" | grep resolve_lib_name >/dev/null then # We have reworked collect2 hardcode_direct_CXX=yes else # We have old collect2 hardcode_direct_CXX=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L_CXX=yes hardcode_libdir_flag_spec_CXX='-L$libdir' hardcode_libdir_separator_CXX= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols_CXX=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag_CXX='-berok' # Determine the default libpath from the value encoded in an empty executable. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds_CXX="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag_CXX="-z nodefs" archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an empty executable. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag_CXX=' ${wl}-bernotok' allow_undefined_flag_CXX=' ${wl}-berok' # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec_CXX='$convenience' archive_cmds_need_lc_CXX=yes # This is similar to how AIX traditionally builds its shared libraries. archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; beos*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then allow_undefined_flag_CXX=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs_CXX=no fi ;; chorus*) case $cc_basename in *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; cygwin* | mingw* | pw32*) # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec_CXX='-L$libdir' allow_undefined_flag_CXX=unsupported always_export_symbols_CXX=no enable_shared_with_static_runtimes_CXX=yes if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs_CXX=no fi ;; darwin* | rhapsody*) case $host_os in rhapsody* | darwin1.[012]) allow_undefined_flag_CXX='${wl}-undefined ${wl}suppress' ;; *) # Darwin 1.3 on if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then allow_undefined_flag_CXX='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' else case ${MACOSX_DEPLOYMENT_TARGET} in 10.[012]) allow_undefined_flag_CXX='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) allow_undefined_flag_CXX='${wl}-undefined ${wl}dynamic_lookup' ;; esac fi ;; esac archive_cmds_need_lc_CXX=no hardcode_direct_CXX=no hardcode_automatic_CXX=yes hardcode_shlibpath_var_CXX=unsupported whole_archive_flag_spec_CXX='' link_all_deplibs_CXX=yes if test "$GXX" = yes ; then lt_int_apple_cc_single_mod=no output_verbose_link_cmd='echo' if $CC -dumpspecs 2>&1 | $EGREP 'single_module' >/dev/null ; then lt_int_apple_cc_single_mod=yes fi if test "X$lt_int_apple_cc_single_mod" = Xyes ; then archive_cmds_CXX='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' else archive_cmds_CXX='$CC -r -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring' fi module_cmds_CXX='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds if test "X$lt_int_apple_cc_single_mod" = Xyes ; then archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' else archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' fi module_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' else case $cc_basename in xlc*) output_verbose_link_cmd='echo' archive_cmds_CXX='$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring' module_cmds_CXX='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' module_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' ;; *) ld_shlibs_CXX=no ;; esac fi ;; dgux*) case $cc_basename in ec++*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; ghcx*) # Green Hills C++ Compiler # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; freebsd[12]*) # C++ shared libraries reported to be fairly broken before switch to ELF ld_shlibs_CXX=no ;; freebsd-elf*) archive_cmds_need_lc_CXX=no ;; freebsd* | dragonfly*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions ld_shlibs_CXX=yes ;; gnu*) ;; hpux9*) hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' hardcode_libdir_separator_CXX=: export_dynamic_flag_spec_CXX='${wl}-E' hardcode_direct_CXX=yes hardcode_minus_L_CXX=yes # Not in the search PATH, # but as the default # location of the library. case $cc_basename in CC*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aCC*) archive_cmds_CXX='$rm $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "[-]L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' ;; *) if test "$GXX" = yes; then archive_cmds_CXX='$rm $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; hpux10*|hpux11*) if test $with_gnu_ld = no; then hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' hardcode_libdir_separator_CXX=: case $host_cpu in hppa*64*|ia64*) hardcode_libdir_flag_spec_ld_CXX='+b $libdir' ;; *) export_dynamic_flag_spec_CXX='${wl}-E' ;; esac fi case $host_cpu in hppa*64*|ia64*) hardcode_direct_CXX=no hardcode_shlibpath_var_CXX=no ;; *) hardcode_direct_CXX=yes hardcode_minus_L_CXX=yes # Not in the search PATH, # but as the default # location of the library. ;; esac case $cc_basename in CC*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aCC*) case $host_cpu in hppa*64*) archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' ;; *) if test "$GXX" = yes; then if test $with_gnu_ld = no; then case $host_cpu in hppa*64*) archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; interix3*) hardcode_direct_CXX=no hardcode_shlibpath_var_CXX=no hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' export_dynamic_flag_spec_CXX='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds_CXX='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; irix5* | irix6*) case $cc_basename in CC*) # SGI C++ archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) if test "$GXX" = yes; then if test "$with_gnu_ld" = no; then archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` -o $lib' fi fi link_all_deplibs_CXX=yes ;; esac hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_CXX=: ;; linux* | k*bsd*-gnu) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | grep "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' hardcode_libdir_flag_spec_CXX='${wl}--rpath,$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; icpc*) # Intel C++ with_gnu_ld=yes # version 8.0 and above of icpc choke on multiply defined symbols # if we add $predep_objects and $postdep_objects, however 7.1 and # earlier do not add the objects themselves. case `$CC -V 2>&1` in *"Version 7."*) archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 8.0 or newer tmp_idyn= case $host_cpu in ia64*) tmp_idyn=' -i_dynamic';; esac archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; esac archive_cmds_need_lc_CXX=no hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' ;; pgCC*) # Portland Group C++ compiler archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' whole_archive_flag_spec_CXX='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' ;; cxx*) # Compaq C++ archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec_CXX='-rpath $libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' ;; esac ;; lynxos*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; m88k*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; mvs*) case $cc_basename in cxx*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then archive_cmds_CXX='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' wlarc= hardcode_libdir_flag_spec_CXX='-R$libdir' hardcode_direct_CXX=yes hardcode_shlibpath_var_CXX=no fi # Workaround some broken pre-1.5 toolchains output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ;; openbsd2*) # C++ shared libraries are fairly broken ld_shlibs_CXX=no ;; openbsd*) hardcode_direct_CXX=yes hardcode_shlibpath_var_CXX=no archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' export_dynamic_flag_spec_CXX='${wl}-E' whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' fi output_verbose_link_cmd='echo' ;; osf3*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' hardcode_libdir_separator_CXX=: # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; cxx*) allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && echo ${wl}-set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' ;; *) if test "$GXX" = yes && test "$with_gnu_ld" = no; then allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; osf4* | osf5*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' hardcode_libdir_separator_CXX=: # Archives containing C++ object files must be created using # the KAI C++ compiler. old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; cxx*) allow_undefined_flag_CXX=' -expect_unresolved \*' archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ echo "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname -Wl,-input -Wl,$lib.exp `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~ $rm $lib.exp' hardcode_libdir_flag_spec_CXX='-rpath $libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' ;; *) if test "$GXX" = yes && test "$with_gnu_ld" = no; then allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; psos*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; lcc*) # Lucid # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; solaris*) case $cc_basename in CC*) # Sun C++ 4.2, 5.x and Centerline C++ archive_cmds_need_lc_CXX=yes no_undefined_flag_CXX=' -zdefs' archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' hardcode_libdir_flag_spec_CXX='-R$libdir' hardcode_shlibpath_var_CXX=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The C++ compiler is used as linker so we must use $wl # flag to pass the commands to the underlying system # linker. We must also pass each convience library through # to the system linker between allextract/defaultextract. # The C++ compiler will combine linker options so we # cannot just pass the convience library names through # without $wl. # Supported since Solaris 2.6 (maybe 2.5.1?) whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' ;; esac link_all_deplibs_CXX=yes output_verbose_link_cmd='echo' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' ;; gcx*) # Green Hills C++ Compiler archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker if test "$GXX" = yes && test "$with_gnu_ld" = no; then no_undefined_flag_CXX=' ${wl}-z ${wl}defs' if $CC --version | grep -v '^2\.7' > /dev/null; then archive_cmds_CXX='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd="$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\"" else # g++ 2.7 appears to require `-G' NOT `-shared' on this # platform. archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd="$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\"" fi hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir' fi ;; esac ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag_CXX='${wl}-z,text' archive_cmds_need_lc_CXX=no hardcode_shlibpath_var_CXX=no runpath_var='LD_RUN_PATH' case $cc_basename in CC*) archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. # So that behaviour is only enabled if SCOABSPATH is set to a # non-empty value in the environment. Most likely only useful for # creating official distributions of packages. # This is a hack until libtool officially supports absolute path # names for shared libraries. no_undefined_flag_CXX='${wl}-z,text' allow_undefined_flag_CXX='${wl}-z,nodefs' archive_cmds_need_lc_CXX=no hardcode_shlibpath_var_CXX=no hardcode_libdir_flag_spec_CXX='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' hardcode_libdir_separator_CXX=':' link_all_deplibs_CXX=yes export_dynamic_flag_spec_CXX='${wl}-Bexport' runpath_var='LD_RUN_PATH' case $cc_basename in CC*) archive_cmds_CXX='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_CXX='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; vxworks*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac { echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5 echo "${ECHO_T}$ld_shlibs_CXX" >&6; } test "$ld_shlibs_CXX" = no && can_build_shared=no GCC_CXX="$GXX" LD_CXX="$LD" cat > conftest.$ac_ext <&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # Parse the compiler output and extract the necessary # objects, libraries and library flags. # Sentinel used to keep track of whether or not we are before # the conftest object file. pre_test_object_deps_done=no # The `*' in the case matches for architectures that use `case' in # $output_verbose_cmd can trigger glob expansion during the loop # eval without this substitution. output_verbose_link_cmd=`$echo "X$output_verbose_link_cmd" | $Xsed -e "$no_glob_subst"` for p in `eval $output_verbose_link_cmd`; do case $p in -L* | -R* | -l*) # Some compilers place space between "-{L,R}" and the path. # Remove the space. if test $p = "-L" \ || test $p = "-R"; then prev=$p continue else prev= fi if test "$pre_test_object_deps_done" = no; then case $p in -L* | -R*) # Internal compiler library paths should come after those # provided the user. The postdeps already come after the # user supplied libs so there is no need to process them. if test -z "$compiler_lib_search_path_CXX"; then compiler_lib_search_path_CXX="${prev}${p}" else compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${prev}${p}" fi ;; # The "-l" case would never come before the object being # linked, so don't bother handling this case. esac else if test -z "$postdeps_CXX"; then postdeps_CXX="${prev}${p}" else postdeps_CXX="${postdeps_CXX} ${prev}${p}" fi fi ;; *.$objext) # This assumes that the test object file only shows up # once in the compiler output. if test "$p" = "conftest.$objext"; then pre_test_object_deps_done=yes continue fi if test "$pre_test_object_deps_done" = no; then if test -z "$predep_objects_CXX"; then predep_objects_CXX="$p" else predep_objects_CXX="$predep_objects_CXX $p" fi else if test -z "$postdep_objects_CXX"; then postdep_objects_CXX="$p" else postdep_objects_CXX="$postdep_objects_CXX $p" fi fi ;; *) ;; # Ignore the rest. esac done # Clean up. rm -f a.out a.exe else echo "libtool.m4: error: problem compiling CXX test program" fi $rm -f confest.$objext # PORTME: override above test on systems where it is broken case $host_os in interix3*) # Interix 3.5 installs completely hosed .la files for C++, so rather than # hack all around it, let's just trust "g++" to DTRT. predep_objects_CXX= postdep_objects_CXX= postdeps_CXX= ;; solaris*) case $cc_basename in CC*) # Adding this requires a known-good setup of shared libraries for # Sun compiler versions before 5.6, else PIC objects from an old # archive will be linked into the output, leading to subtle bugs. postdeps_CXX='-lCstd -lCrun' ;; esac ;; esac case " $postdeps_CXX " in *" -lc "*) archive_cmds_need_lc_CXX=no ;; esac lt_prog_compiler_wl_CXX= lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX= { echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6; } # C++ specific cases for pic, static, wl, etc. if test "$GXX" = yes; then lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_CXX='-Bstatic' fi ;; amigaos*) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4' ;; beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | os2* | pw32*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic_CXX='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic_CXX='-fno-common' ;; *djgpp*) # DJGPP does not support shared libraries at all lt_prog_compiler_pic_CXX= ;; interix3*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic_CXX=-Kconform_pic fi ;; hpux*) # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) ;; *) lt_prog_compiler_pic_CXX='-fPIC' ;; esac ;; *) lt_prog_compiler_pic_CXX='-fPIC' ;; esac else case $host_os in aix4* | aix5*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_CXX='-Bstatic' else lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp' fi ;; chorus*) case $cc_basename in cxch68*) # Green Hills C++ Compiler # _LT_AC_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ;; esac ;; darwin*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files case $cc_basename in xlc*) lt_prog_compiler_pic_CXX='-qnocommon' lt_prog_compiler_wl_CXX='-Wl,' ;; esac ;; dgux*) case $cc_basename in ec++*) lt_prog_compiler_pic_CXX='-KPIC' ;; ghcx*) # Green Hills C++ Compiler lt_prog_compiler_pic_CXX='-pic' ;; *) ;; esac ;; freebsd* | dragonfly*) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' if test "$host_cpu" != ia64; then lt_prog_compiler_pic_CXX='+Z' fi ;; aCC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic_CXX='+Z' ;; esac ;; *) ;; esac ;; interix*) # This is c89, which is MS Visual C++ (no shared libs) # Anyone wants to do a port? ;; irix5* | irix6* | nonstopux*) case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='-non_shared' # CC pic flag -KPIC is the default. ;; *) ;; esac ;; linux* | k*bsd*-gnu) case $cc_basename in KCC*) # KAI C++ Compiler lt_prog_compiler_wl_CXX='--backend -Wl,' lt_prog_compiler_pic_CXX='-fPIC' ;; icpc* | ecpc*) # Intel C++ lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-static' ;; pgCC*) # Portland Group C++ compiler. lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-fpic' lt_prog_compiler_static_CXX='-Bstatic' ;; cxx*) # Compaq C++ # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX='-non_shared' ;; *) ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx*) lt_prog_compiler_pic_CXX='-W c,exportall' ;; *) ;; esac ;; netbsd* | netbsdelf*-gnu) ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) lt_prog_compiler_wl_CXX='--backend -Wl,' ;; RCC*) # Rational C++ 2.4.1 lt_prog_compiler_pic_CXX='-pic' ;; cxx*) # Digital/Compaq C++ lt_prog_compiler_wl_CXX='-Wl,' # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX='-non_shared' ;; *) ;; esac ;; psos*) ;; solaris*) case $cc_basename in CC*) # Sun C++ 4.2, 5.x and Centerline C++ lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' lt_prog_compiler_wl_CXX='-Qoption ld ' ;; gcx*) # Green Hills C++ Compiler lt_prog_compiler_pic_CXX='-PIC' ;; *) ;; esac ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x lt_prog_compiler_pic_CXX='-pic' lt_prog_compiler_static_CXX='-Bstatic' ;; lcc*) # Lucid lt_prog_compiler_pic_CXX='-pic' ;; *) ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 lt_prog_compiler_pic_CXX='-KPIC' ;; *) ;; esac ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' ;; esac ;; vxworks*) ;; *) lt_prog_compiler_can_build_shared_CXX=no ;; esac fi { echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_CXX" >&5 echo "${ECHO_T}$lt_prog_compiler_pic_CXX" >&6; } # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic_CXX"; then { echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... $ECHO_C" >&6; } if test "${lt_prog_compiler_pic_works_CXX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_prog_compiler_pic_works_CXX=no ac_outfile=conftest.$ac_objext printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:12544: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:12548: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_prog_compiler_pic_works_CXX=yes fi fi $rm conftest* fi { echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_CXX" >&5 echo "${ECHO_T}$lt_prog_compiler_pic_works_CXX" >&6; } if test x"$lt_prog_compiler_pic_works_CXX" = xyes; then case $lt_prog_compiler_pic_CXX in "" | " "*) ;; *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;; esac else lt_prog_compiler_pic_CXX= lt_prog_compiler_can_build_shared_CXX=no fi fi case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic_CXX= ;; *) lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC" ;; esac # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\" { echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5 echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6; } if test "${lt_prog_compiler_static_works_CXX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_prog_compiler_static_works_CXX=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" printf "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_prog_compiler_static_works_CXX=yes fi else lt_prog_compiler_static_works_CXX=yes fi fi $rm conftest* LDFLAGS="$save_LDFLAGS" fi { echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works_CXX" >&5 echo "${ECHO_T}$lt_prog_compiler_static_works_CXX" >&6; } if test x"$lt_prog_compiler_static_works_CXX" = xyes; then : else lt_prog_compiler_static_CXX= fi { echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6; } if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_prog_compiler_c_o_CXX=no $rm -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:12648: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:12652: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o_CXX=yes fi fi chmod u+w . 2>&5 $rm conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files $rm out/* && rmdir out cd .. rmdir conftest $rm conftest* fi { echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_CXX" >&5 echo "${ECHO_T}$lt_cv_prog_compiler_c_o_CXX" >&6; } hard_links="nottested" if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user { echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6; } hard_links=yes $rm conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no { echo "$as_me:$LINENO: result: $hard_links" >&5 echo "${ECHO_T}$hard_links" >&6; } if test "$hard_links" = no; then { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi { echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6; } export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' case $host_os in aix4* | aix5*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm if $NM -V 2>&1 | grep 'GNU' > /dev/null; then export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' fi ;; pw32*) export_symbols_cmds_CXX="$ltdll_cmds" ;; cygwin* | mingw*) export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS] /s/.* \([^ ]*\)/\1 DATA/;/^.* __nm__/s/^.* __nm__\([^ ]*\) [^ ]*/\1 DATA/;/^I /d;/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' ;; linux* | k*bsd*-gnu) link_all_deplibs_CXX=no ;; *) export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac { echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5 echo "${ECHO_T}$ld_shlibs_CXX" >&6; } test "$ld_shlibs_CXX" = no && can_build_shared=no # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc_CXX" in x|xyes) # Assume -lc should be added archive_cmds_need_lc_CXX=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds_CXX in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. { echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6; } $rm conftest* printf "$lt_simple_compile_test_code" > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl_CXX pic_flag=$lt_prog_compiler_pic_CXX compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag_CXX allow_undefined_flag_CXX= if { (eval echo "$as_me:$LINENO: \"$archive_cmds_CXX 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 (eval $archive_cmds_CXX 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } then archive_cmds_need_lc_CXX=no else archive_cmds_need_lc_CXX=yes fi allow_undefined_flag_CXX=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $rm conftest* { echo "$as_me:$LINENO: result: $archive_cmds_need_lc_CXX" >&5 echo "${ECHO_T}$archive_cmds_need_lc_CXX" >&6; } ;; esac fi ;; esac { echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6; } library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix4* | aix5*) version_type=linux need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$host_os in yes,cygwin* | yes,mingw* | yes,pw32*) library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $rm \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" ;; mingw*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH printed by # mingw gcc, but we are running on Cygwin. Gcc prints its search # path with ; separators, and with drive letters. We can handle the # drive letters (cygwin fileutils understands them), so leave them, # especially as we might pass files found there to a mingw objdump, # which wouldn't understand a cygwinified path. Ahh. sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; esac ;; *) library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' ;; esac dynamic_linker='Win32 ld.exe' # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` else sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' fi sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd1*) dynamic_linker=no ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[123]*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; freebsd*) # from 4.6 on shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555. postinstall_cmds='chmod 555 $lib' ;; interix3*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be Linux ELF. linux* | k*bsd*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsdelf*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='NetBSD ld.elf_so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; nto-qnx*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; solaris*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no export_dynamic_flag_spec='${wl}-Blargedynsym' runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' shlibpath_overrides_runpath=no else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' shlibpath_overrides_runpath=yes case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; uts4*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac { echo "$as_me:$LINENO: result: $dynamic_linker" >&5 echo "${ECHO_T}$dynamic_linker" >&6; } test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi { echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6; } hardcode_action_CXX= if test -n "$hardcode_libdir_flag_spec_CXX" || \ test -n "$runpath_var_CXX" || \ test "X$hardcode_automatic_CXX" = "Xyes" ; then # We can hardcode non-existant directories. if test "$hardcode_direct_CXX" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, CXX)" != no && test "$hardcode_minus_L_CXX" != no; then # Linking always hardcodes the temporary library directory. hardcode_action_CXX=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action_CXX=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action_CXX=unsupported fi { echo "$as_me:$LINENO: result: $hardcode_action_CXX" >&5 echo "${ECHO_T}$hardcode_action_CXX" >&6; } if test "$hardcode_action_CXX" = relink; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi # The else clause should only fire when bootstrapping the # libtool distribution, otherwise you forgot to ship ltmain.sh # with your package, and you will get complaints that there are # no rules to generate ltmain.sh. if test -f "$ltmain"; then # See if we are running on zsh, and set the options which allow our commands through # without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi # Now quote all the things that may contain metacharacters while being # careful not to overquote the AC_SUBSTed values. We take copies of the # variables and quote the copies for generation of the libtool script. for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \ SED SHELL STRIP \ libname_spec library_names_spec soname_spec extract_expsyms_cmds \ old_striplib striplib file_magic_cmd finish_cmds finish_eval \ deplibs_check_method reload_flag reload_cmds need_locks \ lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ old_postinstall_cmds old_postuninstall_cmds \ compiler_CXX \ CC_CXX \ LD_CXX \ lt_prog_compiler_wl_CXX \ lt_prog_compiler_pic_CXX \ lt_prog_compiler_static_CXX \ lt_prog_compiler_no_builtin_flag_CXX \ export_dynamic_flag_spec_CXX \ thread_safe_flag_spec_CXX \ whole_archive_flag_spec_CXX \ enable_shared_with_static_runtimes_CXX \ old_archive_cmds_CXX \ old_archive_from_new_cmds_CXX \ predep_objects_CXX \ postdep_objects_CXX \ predeps_CXX \ postdeps_CXX \ compiler_lib_search_path_CXX \ archive_cmds_CXX \ archive_expsym_cmds_CXX \ postinstall_cmds_CXX \ postuninstall_cmds_CXX \ old_archive_from_expsyms_cmds_CXX \ allow_undefined_flag_CXX \ no_undefined_flag_CXX \ export_symbols_cmds_CXX \ hardcode_libdir_flag_spec_CXX \ hardcode_libdir_flag_spec_ld_CXX \ hardcode_libdir_separator_CXX \ hardcode_automatic_CXX \ module_cmds_CXX \ module_expsym_cmds_CXX \ lt_cv_prog_compiler_c_o_CXX \ exclude_expsyms_CXX \ include_expsyms_CXX; do case $var in old_archive_cmds_CXX | \ old_archive_from_new_cmds_CXX | \ archive_cmds_CXX | \ archive_expsym_cmds_CXX | \ module_cmds_CXX | \ module_expsym_cmds_CXX | \ old_archive_from_expsyms_cmds_CXX | \ export_symbols_cmds_CXX | \ extract_expsyms_cmds | reload_cmds | finish_cmds | \ postinstall_cmds | postuninstall_cmds | \ old_postinstall_cmds | old_postuninstall_cmds | \ sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) # Double-quote double-evaled strings. eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" ;; *) eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" ;; esac done case $lt_echo in *'\$0 --fallback-echo"') lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` ;; esac cfgfile="$ofile" cat <<__EOF__ >> "$cfgfile" # ### BEGIN LIBTOOL TAG CONFIG: $tagname # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc_CXX # Whether or not to disallow shared libs when runtime libs are static allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # The host system. host_alias=$host_alias host=$host host_os=$host_os # The build system. build_alias=$build_alias build=$build build_os=$build_os # An echo program that does not interpret backslashes. echo=$lt_echo # The archiver. AR=$lt_AR AR_FLAGS=$lt_AR_FLAGS # A C compiler. LTCC=$lt_LTCC # LTCC compiler flags. LTCFLAGS=$lt_LTCFLAGS # A language-specific compiler. CC=$lt_compiler_CXX # Is the compiler the GNU C compiler? with_gcc=$GCC_CXX # An ERE matcher. EGREP=$lt_EGREP # The linker used to build libraries. LD=$lt_LD_CXX # Whether we need hard or soft links. LN_S=$lt_LN_S # A BSD-compatible nm program. NM=$lt_NM # A symbol stripping program STRIP=$lt_STRIP # Used to examine libraries when file_magic_cmd begins "file" MAGIC_CMD=$MAGIC_CMD # Used on cygwin: DLL creation program. DLLTOOL="$DLLTOOL" # Used on cygwin: object dumper. OBJDUMP="$OBJDUMP" # Used on cygwin: assembler. AS="$AS" # The name of the directory that contains temporary libtool files. objdir=$objdir # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl_CXX # Object file suffix (normally "o"). objext="$ac_objext" # Old archive suffix (normally "a"). libext="$libext" # Shared library suffix (normally ".so"). shrext_cmds='$shrext_cmds' # Executable file suffix (normally ""). exeext="$exeext" # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic_CXX pic_mode=$pic_mode # What is the maximum length of a command? max_cmd_len=$lt_cv_sys_max_cmd_len # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX # Must we lock files when doing compilation? need_locks=$lt_need_locks # Do we need the lib prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static_CXX # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX # Compiler flag to generate thread-safe objects. thread_safe_flag_spec=$lt_thread_safe_flag_spec_CXX # Library versioning type. version_type=$version_type # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME. library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Commands used to build and install an old-style archive. RANLIB=$lt_RANLIB old_archive_cmds=$lt_old_archive_cmds_CXX old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX # Commands used to build and install a shared archive. archive_cmds=$lt_archive_cmds_CXX archive_expsym_cmds=$lt_archive_expsym_cmds_CXX postinstall_cmds=$lt_postinstall_cmds postuninstall_cmds=$lt_postuninstall_cmds # Commands used to build a loadable module (assumed same as above if empty) module_cmds=$lt_module_cmds_CXX module_expsym_cmds=$lt_module_expsym_cmds_CXX # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # Dependencies to place before the objects being linked to create a # shared library. predep_objects=$lt_predep_objects_CXX # Dependencies to place after the objects being linked to create a # shared library. postdep_objects=$lt_postdep_objects_CXX # Dependencies to place before the objects being linked to create a # shared library. predeps=$lt_predeps_CXX # Dependencies to place after the objects being linked to create a # shared library. postdeps=$lt_postdeps_CXX # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path_CXX # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method == file_magic. file_magic_cmd=$lt_file_magic_cmd # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag_CXX # Flag that forces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag_CXX # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # Same as above, but a single script fragment to be evaled but not shown. finish_eval=$lt_finish_eval # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # This is the shared library runtime path variable. runpath_var=$runpath_var # This is the shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action_CXX # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist. hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX # If ld is used when linking, flag to hardcode \$libdir into # a binary during linking. This must work even if \$libdir does # not exist. hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_CXX # Whether we need a single -rpath flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX # Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the # resulting binary. hardcode_direct=$hardcode_direct_CXX # Set to yes if using the -LDIR flag during linking hardcodes DIR into the # resulting binary. hardcode_minus_L=$hardcode_minus_L_CXX # Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into # the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX # Set to yes if building a shared library automatically hardcodes DIR into the library # and all subsequent libraries and executables linked against it. hardcode_automatic=$hardcode_automatic_CXX # Variables whose values should be saved in libtool wrapper scripts and # restored at relink time. variables_saved_for_relink="$variables_saved_for_relink" # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs_CXX # Compile-time system search path for libraries sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Fix the shell variable \$srcfile for the compiler. fix_srcfile_path="$fix_srcfile_path_CXX" # Set to yes if exported symbols are required. always_export_symbols=$always_export_symbols_CXX # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds_CXX # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms_CXX # Symbols that must always be exported. include_expsyms=$lt_include_expsyms_CXX # ### END LIBTOOL TAG CONFIG: $tagname __EOF__ else # If there is no Makefile yet, we rely on a make rule to execute # `config.status --recheck' to rerun these tests and create the # libtool script then. ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` if test -f "$ltmain_in"; then test -f Makefile && make "$ltmain" fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu CC=$lt_save_CC LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ldcxx=$with_gnu_ld with_gnu_ld=$lt_save_with_gnu_ld lt_cv_path_LDCXX=$lt_cv_path_LD lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld else tagname="" fi ;; F77) if test -n "$F77" && test "X$F77" != "Xno"; then ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu archive_cmds_need_lc_F77=no allow_undefined_flag_F77= always_export_symbols_F77=no archive_expsym_cmds_F77= export_dynamic_flag_spec_F77= hardcode_direct_F77=no hardcode_libdir_flag_spec_F77= hardcode_libdir_flag_spec_ld_F77= hardcode_libdir_separator_F77= hardcode_minus_L_F77=no hardcode_automatic_F77=no module_cmds_F77= module_expsym_cmds_F77= link_all_deplibs_F77=unknown old_archive_cmds_F77=$old_archive_cmds no_undefined_flag_F77= whole_archive_flag_spec_F77= enable_shared_with_static_runtimes_F77=no # Source file extension for f77 test sources. ac_ext=f # Object file extension for compiled f77 test sources. objext=o objext_F77=$objext # Code to be used in simple compile tests lt_simple_compile_test_code=" subroutine t\n return\n end\n" # Code to be used in simple link tests lt_simple_link_test_code=" program t\n end\n" # ltmain only uses $CC for tagged configurations so make sure $CC is set. # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext printf "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $rm conftest* ac_outfile=conftest.$ac_objext printf "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $rm conftest* # Allow CC to be a program name with arguments. lt_save_CC="$CC" CC=${F77-"f77"} compiler=$CC compiler_F77=$CC for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` { echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5 echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6; } { echo "$as_me:$LINENO: result: $can_build_shared" >&5 echo "${ECHO_T}$can_build_shared" >&6; } { echo "$as_me:$LINENO: checking whether to build shared libraries" >&5 echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6; } test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix4* | aix5*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac { echo "$as_me:$LINENO: result: $enable_shared" >&5 echo "${ECHO_T}$enable_shared" >&6; } { echo "$as_me:$LINENO: checking whether to build static libraries" >&5 echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6; } # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes { echo "$as_me:$LINENO: result: $enable_static" >&5 echo "${ECHO_T}$enable_static" >&6; } GCC_F77="$G77" LD_F77="$LD" lt_prog_compiler_wl_F77= lt_prog_compiler_pic_F77= lt_prog_compiler_static_F77= { echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6; } if test "$GCC" = yes; then lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_static_F77='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_F77='-Bstatic' fi ;; amigaos*) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic_F77='-m68020 -resident32 -malways-restore-a4' ;; beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | pw32* | os2*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic_F77='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic_F77='-fno-common' ;; interix3*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. lt_prog_compiler_can_build_shared_F77=no enable_shared=no ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic_F77=-Kconform_pic fi ;; hpux*) # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic_F77='-fPIC' ;; esac ;; *) lt_prog_compiler_pic_F77='-fPIC' ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl_F77='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_F77='-Bstatic' else lt_prog_compiler_static_F77='-bnso -bI:/lib/syscalls.exp' fi ;; darwin*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files case $cc_basename in xlc*) lt_prog_compiler_pic_F77='-qnocommon' lt_prog_compiler_wl_F77='-Wl,' ;; esac ;; mingw* | pw32* | os2*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic_F77='-DDLL_EXPORT' ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl_F77='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic_F77='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static_F77='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl_F77='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static_F77='-non_shared' ;; newsos6) lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' ;; linux* | k*bsd*-gnu) case $cc_basename in icc* | ecc*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-static' ;; pgcc* | pgf77* | pgf90* | pgf95*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-fpic' lt_prog_compiler_static_F77='-Bstatic' ;; ccc*) lt_prog_compiler_wl_F77='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static_F77='-non_shared' ;; esac ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl_F77='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static_F77='-non_shared' ;; solaris*) lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' case $cc_basename in f77* | f90* | f95*) lt_prog_compiler_wl_F77='-Qoption ld ';; *) lt_prog_compiler_wl_F77='-Wl,';; esac ;; sunos4*) lt_prog_compiler_wl_F77='-Qoption ld ' lt_prog_compiler_pic_F77='-PIC' lt_prog_compiler_static_F77='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then lt_prog_compiler_pic_F77='-Kconform_pic' lt_prog_compiler_static_F77='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' ;; unicos*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_can_build_shared_F77=no ;; uts4*) lt_prog_compiler_pic_F77='-pic' lt_prog_compiler_static_F77='-Bstatic' ;; *) lt_prog_compiler_can_build_shared_F77=no ;; esac fi { echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_F77" >&5 echo "${ECHO_T}$lt_prog_compiler_pic_F77" >&6; } # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic_F77"; then { echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works" >&5 echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works... $ECHO_C" >&6; } if test "${lt_prog_compiler_pic_works_F77+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_prog_compiler_pic_works_F77=no ac_outfile=conftest.$ac_objext printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic_F77" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:14209: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:14213: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_prog_compiler_pic_works_F77=yes fi fi $rm conftest* fi { echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_F77" >&5 echo "${ECHO_T}$lt_prog_compiler_pic_works_F77" >&6; } if test x"$lt_prog_compiler_pic_works_F77" = xyes; then case $lt_prog_compiler_pic_F77 in "" | " "*) ;; *) lt_prog_compiler_pic_F77=" $lt_prog_compiler_pic_F77" ;; esac else lt_prog_compiler_pic_F77= lt_prog_compiler_can_build_shared_F77=no fi fi case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic_F77= ;; *) lt_prog_compiler_pic_F77="$lt_prog_compiler_pic_F77" ;; esac # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl_F77 eval lt_tmp_static_flag=\"$lt_prog_compiler_static_F77\" { echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5 echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6; } if test "${lt_prog_compiler_static_works_F77+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_prog_compiler_static_works_F77=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" printf "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_prog_compiler_static_works_F77=yes fi else lt_prog_compiler_static_works_F77=yes fi fi $rm conftest* LDFLAGS="$save_LDFLAGS" fi { echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works_F77" >&5 echo "${ECHO_T}$lt_prog_compiler_static_works_F77" >&6; } if test x"$lt_prog_compiler_static_works_F77" = xyes; then : else lt_prog_compiler_static_F77= fi { echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6; } if test "${lt_cv_prog_compiler_c_o_F77+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_prog_compiler_c_o_F77=no $rm -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:14313: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:14317: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o_F77=yes fi fi chmod u+w . 2>&5 $rm conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files $rm out/* && rmdir out cd .. rmdir conftest $rm conftest* fi { echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_F77" >&5 echo "${ECHO_T}$lt_cv_prog_compiler_c_o_F77" >&6; } hard_links="nottested" if test "$lt_cv_prog_compiler_c_o_F77" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user { echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6; } hard_links=yes $rm conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no { echo "$as_me:$LINENO: result: $hard_links" >&5 echo "${ECHO_T}$hard_links" >&6; } if test "$hard_links" = no; then { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi { echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6; } runpath_var= allow_undefined_flag_F77= enable_shared_with_static_runtimes_F77=no archive_cmds_F77= archive_expsym_cmds_F77= old_archive_From_new_cmds_F77= old_archive_from_expsyms_cmds_F77= export_dynamic_flag_spec_F77= whole_archive_flag_spec_F77= thread_safe_flag_spec_F77= hardcode_libdir_flag_spec_F77= hardcode_libdir_flag_spec_ld_F77= hardcode_libdir_separator_F77= hardcode_direct_F77=no hardcode_minus_L_F77=no hardcode_shlibpath_var_F77=unsupported link_all_deplibs_F77=unknown hardcode_automatic_F77=no module_cmds_F77= module_expsym_cmds_F77= always_export_symbols_F77=no export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms_F77= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. exclude_expsyms_F77="_GLOBAL_OFFSET_TABLE_" # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. extract_expsyms_cmds= # Just being paranoid about ensuring that cc_basename is set. for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` case $host_os in cygwin* | mingw* | pw32*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; esac ld_shlibs_F77=yes if test "$with_gnu_ld" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec_F77='${wl}--rpath ${wl}$libdir' export_dynamic_flag_spec_F77='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then whole_archive_flag_spec_F77="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec_F77= fi supports_anon_versioning=no case `$LD -v 2>/dev/null` in *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix3* | aix4* | aix5*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs_F77=no cat <&2 *** Warning: the GNU linker, at least up to release 2.9.1, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to modify your PATH *** so that a non-GNU linker is found, and then restart. EOF fi ;; amigaos*) archive_cmds_F77='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_minus_L_F77=yes # Samuel A. Falvo II reports # that the semantics of dynamic libraries on AmigaOS, at least up # to version 4, is to share data among multiple programs linked # with the same dynamic library. Since this doesn't match the # behavior of shared libraries on other platforms, we can't use # them. ld_shlibs_F77=no ;; beos*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then allow_undefined_flag_F77=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds_F77='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs_F77=no fi ;; cygwin* | mingw* | pw32*) # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, F77) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec_F77='-L$libdir' allow_undefined_flag_F77=unsupported always_export_symbols_F77=no enable_shared_with_static_runtimes_F77=yes export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds_F77='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs_F77=no fi ;; interix3*) hardcode_direct_F77=no hardcode_shlibpath_var_F77=no hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' export_dynamic_flag_spec_F77='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds_F77='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds_F77='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; linux* | k*bsd*-gnu) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then tmp_addflag= case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler whole_archive_flag_spec_F77='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers whole_archive_flag_spec_F77='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; esac archive_cmds_F77='$CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test $supports_anon_versioning = yes; then archive_expsym_cmds_F77='$echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ $echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi link_all_deplibs_F77=no else ld_shlibs_F77=no fi ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then archive_cmds_F77='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then ld_shlibs_F77=no cat <&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. EOF elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs_F77=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs_F77=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec_F77='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib' archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib' else ld_shlibs_F77=no fi ;; esac ;; sunos4*) archive_cmds_F77='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs_F77=no fi ;; esac if test "$ld_shlibs_F77" = no; then runpath_var= hardcode_libdir_flag_spec_F77= export_dynamic_flag_spec_F77= whole_archive_flag_spec_F77= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag_F77=unsupported always_export_symbols_F77=yes archive_expsym_cmds_F77='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L_F77=yes if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct_F77=unsupported fi ;; aix4* | aix5*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm if $NM -V 2>&1 | grep 'GNU' > /dev/null; then export_symbols_cmds_F77='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds_F77='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix5*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds_F77='' hardcode_direct_F77=yes hardcode_libdir_separator_F77=':' link_all_deplibs_F77=yes if test "$GCC" = yes; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && \ strings "$collect2name" | grep resolve_lib_name >/dev/null then # We have reworked collect2 hardcode_direct_F77=yes else # We have old collect2 hardcode_direct_F77=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L_F77=yes hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_libdir_separator_F77= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols_F77=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag_F77='-berok' # Determine the default libpath from the value encoded in an empty executable. cat >conftest.$ac_ext <<_ACEOF program main end _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_f77_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds_F77="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec_F77='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag_F77="-z nodefs" archive_expsym_cmds_F77="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an empty executable. cat >conftest.$ac_ext <<_ACEOF program main end _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_f77_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag_F77=' ${wl}-bernotok' allow_undefined_flag_F77=' ${wl}-berok' # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec_F77='$convenience' archive_cmds_need_lc_F77=yes # This is similar to how AIX traditionally builds its shared libraries. archive_expsym_cmds_F77="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) archive_cmds_F77='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_minus_L_F77=yes # see comment about different semantics on the GNU ld section ld_shlibs_F77=no ;; bsdi[45]*) export_dynamic_flag_spec_F77=-rdynamic ;; cygwin* | mingw* | pw32*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec_F77=' ' allow_undefined_flag_F77=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds_F77='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_From_new_cmds_F77='true' # FIXME: Should let the user specify the lib program. old_archive_cmds_F77='lib /OUT:$oldlib$oldobjs$old_deplibs' fix_srcfile_path_F77='`cygpath -w "$srcfile"`' enable_shared_with_static_runtimes_F77=yes ;; darwin* | rhapsody*) case $host_os in rhapsody* | darwin1.[012]) allow_undefined_flag_F77='${wl}-undefined ${wl}suppress' ;; *) # Darwin 1.3 on if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then allow_undefined_flag_F77='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' else case ${MACOSX_DEPLOYMENT_TARGET} in 10.[012]) allow_undefined_flag_F77='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) allow_undefined_flag_F77='${wl}-undefined ${wl}dynamic_lookup' ;; esac fi ;; esac archive_cmds_need_lc_F77=no hardcode_direct_F77=no hardcode_automatic_F77=yes hardcode_shlibpath_var_F77=unsupported whole_archive_flag_spec_F77='' link_all_deplibs_F77=yes if test "$GCC" = yes ; then output_verbose_link_cmd='echo' archive_cmds_F77='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' module_cmds_F77='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds archive_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' module_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' else case $cc_basename in xlc*) output_verbose_link_cmd='echo' archive_cmds_F77='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring' module_cmds_F77='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds archive_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' module_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' ;; *) ld_shlibs_F77=no ;; esac fi ;; dgux*) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_shlibpath_var_F77=no ;; freebsd1*) ld_shlibs_F77=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec_F77='-R$libdir' hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2*) archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_F77=yes hardcode_minus_L_F77=yes hardcode_shlibpath_var_F77=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) archive_cmds_F77='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec_F77='-R$libdir' hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no ;; hpux9*) if test "$GCC" = yes; then archive_cmds_F77='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else archive_cmds_F77='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' hardcode_libdir_separator_F77=: hardcode_direct_F77=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_F77=yes export_dynamic_flag_spec_F77='${wl}-E' ;; hpux10*) if test "$GCC" = yes -a "$with_gnu_ld" = no; then archive_cmds_F77='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_F77='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' hardcode_libdir_separator_F77=: hardcode_direct_F77=yes export_dynamic_flag_spec_F77='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_F77=yes fi ;; hpux11*) if test "$GCC" = yes -a "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) archive_cmds_F77='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds_F77='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_F77='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) archive_cmds_F77='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds_F77='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_F77='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' hardcode_libdir_separator_F77=: case $host_cpu in hppa*64*|ia64*) hardcode_libdir_flag_spec_ld_F77='+b $libdir' hardcode_direct_F77=no hardcode_shlibpath_var_F77=no ;; *) hardcode_direct_F77=yes export_dynamic_flag_spec_F77='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_F77=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else archive_cmds_F77='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_ld_F77='-rpath $libdir' fi hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_F77=: link_all_deplibs_F77=yes ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds_F77='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec_F77='-R$libdir' hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no ;; newsos6) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_F77=yes hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_F77=: hardcode_shlibpath_var_F77=no ;; openbsd*) hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' export_dynamic_flag_spec_F77='${wl}-E' else case $host_os in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_F77='-R$libdir' ;; *) archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' ;; esac fi ;; os2*) hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_minus_L_F77=yes allow_undefined_flag_F77=unsupported archive_cmds_F77='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' old_archive_From_new_cmds_F77='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else allow_undefined_flag_F77=' -expect_unresolved \*' archive_cmds_F77='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' fi hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_F77=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' else allow_undefined_flag_F77=' -expect_unresolved \*' archive_cmds_F77='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds_F77='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~$rm $lib.exp' # Both c and cxx compiler support -rpath directly hardcode_libdir_flag_spec_F77='-rpath $libdir' fi hardcode_libdir_separator_F77=: ;; solaris*) no_undefined_flag_F77=' -z text' if test "$GCC" = yes; then wlarc='${wl}' archive_cmds_F77='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' else wlarc='' archive_cmds_F77='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' fi hardcode_libdir_flag_spec_F77='-R$libdir' hardcode_shlibpath_var_F77=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine linker options so we # cannot just pass the convience library names through # without $wl, iff we do not link with $LD. # Luckily, gcc supports the same syntax we need for Sun Studio. # Supported since Solaris 2.6 (maybe 2.5.1?) case $wlarc in '') whole_archive_flag_spec_F77='-z allextract$convenience -z defaultextract' ;; *) whole_archive_flag_spec_F77='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' ;; esac ;; esac link_all_deplibs_F77=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. archive_cmds_F77='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_F77='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_direct_F77=yes hardcode_minus_L_F77=yes hardcode_shlibpath_var_F77=no ;; sysv4) case $host_vendor in sni) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_F77=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds_F77='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds_F77='$CC -r -o $output$reload_objs' hardcode_direct_F77=no ;; motorola) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_F77=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var_F77=no ;; sysv4.3*) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var_F77=no export_dynamic_flag_spec_F77='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var_F77=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs_F77=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7*) no_undefined_flag_F77='${wl}-z,text' archive_cmds_need_lc_F77=no hardcode_shlibpath_var_F77=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds_F77='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_F77='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag_F77='${wl}-z,text' allow_undefined_flag_F77='${wl}-z,nodefs' archive_cmds_need_lc_F77=no hardcode_shlibpath_var_F77=no hardcode_libdir_flag_spec_F77='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' hardcode_libdir_separator_F77=':' link_all_deplibs_F77=yes export_dynamic_flag_spec_F77='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds_F77='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_F77='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_shlibpath_var_F77=no ;; *) ld_shlibs_F77=no ;; esac fi { echo "$as_me:$LINENO: result: $ld_shlibs_F77" >&5 echo "${ECHO_T}$ld_shlibs_F77" >&6; } test "$ld_shlibs_F77" = no && can_build_shared=no # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc_F77" in x|xyes) # Assume -lc should be added archive_cmds_need_lc_F77=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds_F77 in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. { echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6; } $rm conftest* printf "$lt_simple_compile_test_code" > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl_F77 pic_flag=$lt_prog_compiler_pic_F77 compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag_F77 allow_undefined_flag_F77= if { (eval echo "$as_me:$LINENO: \"$archive_cmds_F77 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 (eval $archive_cmds_F77 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } then archive_cmds_need_lc_F77=no else archive_cmds_need_lc_F77=yes fi allow_undefined_flag_F77=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $rm conftest* { echo "$as_me:$LINENO: result: $archive_cmds_need_lc_F77" >&5 echo "${ECHO_T}$archive_cmds_need_lc_F77" >&6; } ;; esac fi ;; esac { echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6; } library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix4* | aix5*) version_type=linux need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$host_os in yes,cygwin* | yes,mingw* | yes,pw32*) library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $rm \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" ;; mingw*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH printed by # mingw gcc, but we are running on Cygwin. Gcc prints its search # path with ; separators, and with drive letters. We can handle the # drive letters (cygwin fileutils understands them), so leave them, # especially as we might pass files found there to a mingw objdump, # which wouldn't understand a cygwinified path. Ahh. sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; esac ;; *) library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' ;; esac dynamic_linker='Win32 ld.exe' # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` else sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' fi sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd1*) dynamic_linker=no ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[123]*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; freebsd*) # from 4.6 on shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555. postinstall_cmds='chmod 555 $lib' ;; interix3*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be Linux ELF. linux* | k*bsd*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsdelf*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='NetBSD ld.elf_so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; nto-qnx*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; solaris*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no export_dynamic_flag_spec='${wl}-Blargedynsym' runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' shlibpath_overrides_runpath=no else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' shlibpath_overrides_runpath=yes case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; uts4*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac { echo "$as_me:$LINENO: result: $dynamic_linker" >&5 echo "${ECHO_T}$dynamic_linker" >&6; } test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi { echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6; } hardcode_action_F77= if test -n "$hardcode_libdir_flag_spec_F77" || \ test -n "$runpath_var_F77" || \ test "X$hardcode_automatic_F77" = "Xyes" ; then # We can hardcode non-existant directories. if test "$hardcode_direct_F77" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, F77)" != no && test "$hardcode_minus_L_F77" != no; then # Linking always hardcodes the temporary library directory. hardcode_action_F77=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action_F77=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action_F77=unsupported fi { echo "$as_me:$LINENO: result: $hardcode_action_F77" >&5 echo "${ECHO_T}$hardcode_action_F77" >&6; } if test "$hardcode_action_F77" = relink; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi # The else clause should only fire when bootstrapping the # libtool distribution, otherwise you forgot to ship ltmain.sh # with your package, and you will get complaints that there are # no rules to generate ltmain.sh. if test -f "$ltmain"; then # See if we are running on zsh, and set the options which allow our commands through # without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi # Now quote all the things that may contain metacharacters while being # careful not to overquote the AC_SUBSTed values. We take copies of the # variables and quote the copies for generation of the libtool script. for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \ SED SHELL STRIP \ libname_spec library_names_spec soname_spec extract_expsyms_cmds \ old_striplib striplib file_magic_cmd finish_cmds finish_eval \ deplibs_check_method reload_flag reload_cmds need_locks \ lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ old_postinstall_cmds old_postuninstall_cmds \ compiler_F77 \ CC_F77 \ LD_F77 \ lt_prog_compiler_wl_F77 \ lt_prog_compiler_pic_F77 \ lt_prog_compiler_static_F77 \ lt_prog_compiler_no_builtin_flag_F77 \ export_dynamic_flag_spec_F77 \ thread_safe_flag_spec_F77 \ whole_archive_flag_spec_F77 \ enable_shared_with_static_runtimes_F77 \ old_archive_cmds_F77 \ old_archive_from_new_cmds_F77 \ predep_objects_F77 \ postdep_objects_F77 \ predeps_F77 \ postdeps_F77 \ compiler_lib_search_path_F77 \ archive_cmds_F77 \ archive_expsym_cmds_F77 \ postinstall_cmds_F77 \ postuninstall_cmds_F77 \ old_archive_from_expsyms_cmds_F77 \ allow_undefined_flag_F77 \ no_undefined_flag_F77 \ export_symbols_cmds_F77 \ hardcode_libdir_flag_spec_F77 \ hardcode_libdir_flag_spec_ld_F77 \ hardcode_libdir_separator_F77 \ hardcode_automatic_F77 \ module_cmds_F77 \ module_expsym_cmds_F77 \ lt_cv_prog_compiler_c_o_F77 \ exclude_expsyms_F77 \ include_expsyms_F77; do case $var in old_archive_cmds_F77 | \ old_archive_from_new_cmds_F77 | \ archive_cmds_F77 | \ archive_expsym_cmds_F77 | \ module_cmds_F77 | \ module_expsym_cmds_F77 | \ old_archive_from_expsyms_cmds_F77 | \ export_symbols_cmds_F77 | \ extract_expsyms_cmds | reload_cmds | finish_cmds | \ postinstall_cmds | postuninstall_cmds | \ old_postinstall_cmds | old_postuninstall_cmds | \ sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) # Double-quote double-evaled strings. eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" ;; *) eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" ;; esac done case $lt_echo in *'\$0 --fallback-echo"') lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` ;; esac cfgfile="$ofile" cat <<__EOF__ >> "$cfgfile" # ### BEGIN LIBTOOL TAG CONFIG: $tagname # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc_F77 # Whether or not to disallow shared libs when runtime libs are static allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_F77 # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # The host system. host_alias=$host_alias host=$host host_os=$host_os # The build system. build_alias=$build_alias build=$build build_os=$build_os # An echo program that does not interpret backslashes. echo=$lt_echo # The archiver. AR=$lt_AR AR_FLAGS=$lt_AR_FLAGS # A C compiler. LTCC=$lt_LTCC # LTCC compiler flags. LTCFLAGS=$lt_LTCFLAGS # A language-specific compiler. CC=$lt_compiler_F77 # Is the compiler the GNU C compiler? with_gcc=$GCC_F77 # An ERE matcher. EGREP=$lt_EGREP # The linker used to build libraries. LD=$lt_LD_F77 # Whether we need hard or soft links. LN_S=$lt_LN_S # A BSD-compatible nm program. NM=$lt_NM # A symbol stripping program STRIP=$lt_STRIP # Used to examine libraries when file_magic_cmd begins "file" MAGIC_CMD=$MAGIC_CMD # Used on cygwin: DLL creation program. DLLTOOL="$DLLTOOL" # Used on cygwin: object dumper. OBJDUMP="$OBJDUMP" # Used on cygwin: assembler. AS="$AS" # The name of the directory that contains temporary libtool files. objdir=$objdir # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl_F77 # Object file suffix (normally "o"). objext="$ac_objext" # Old archive suffix (normally "a"). libext="$libext" # Shared library suffix (normally ".so"). shrext_cmds='$shrext_cmds' # Executable file suffix (normally ""). exeext="$exeext" # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic_F77 pic_mode=$pic_mode # What is the maximum length of a command? max_cmd_len=$lt_cv_sys_max_cmd_len # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o_F77 # Must we lock files when doing compilation? need_locks=$lt_need_locks # Do we need the lib prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static_F77 # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_F77 # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_F77 # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec_F77 # Compiler flag to generate thread-safe objects. thread_safe_flag_spec=$lt_thread_safe_flag_spec_F77 # Library versioning type. version_type=$version_type # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME. library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Commands used to build and install an old-style archive. RANLIB=$lt_RANLIB old_archive_cmds=$lt_old_archive_cmds_F77 old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_F77 # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_F77 # Commands used to build and install a shared archive. archive_cmds=$lt_archive_cmds_F77 archive_expsym_cmds=$lt_archive_expsym_cmds_F77 postinstall_cmds=$lt_postinstall_cmds postuninstall_cmds=$lt_postuninstall_cmds # Commands used to build a loadable module (assumed same as above if empty) module_cmds=$lt_module_cmds_F77 module_expsym_cmds=$lt_module_expsym_cmds_F77 # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # Dependencies to place before the objects being linked to create a # shared library. predep_objects=$lt_predep_objects_F77 # Dependencies to place after the objects being linked to create a # shared library. postdep_objects=$lt_postdep_objects_F77 # Dependencies to place before the objects being linked to create a # shared library. predeps=$lt_predeps_F77 # Dependencies to place after the objects being linked to create a # shared library. postdeps=$lt_postdeps_F77 # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path_F77 # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method == file_magic. file_magic_cmd=$lt_file_magic_cmd # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag_F77 # Flag that forces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag_F77 # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # Same as above, but a single script fragment to be evaled but not shown. finish_eval=$lt_finish_eval # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # This is the shared library runtime path variable. runpath_var=$runpath_var # This is the shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action_F77 # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist. hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_F77 # If ld is used when linking, flag to hardcode \$libdir into # a binary during linking. This must work even if \$libdir does # not exist. hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_F77 # Whether we need a single -rpath flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator_F77 # Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the # resulting binary. hardcode_direct=$hardcode_direct_F77 # Set to yes if using the -LDIR flag during linking hardcodes DIR into the # resulting binary. hardcode_minus_L=$hardcode_minus_L_F77 # Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into # the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var_F77 # Set to yes if building a shared library automatically hardcodes DIR into the library # and all subsequent libraries and executables linked against it. hardcode_automatic=$hardcode_automatic_F77 # Variables whose values should be saved in libtool wrapper scripts and # restored at relink time. variables_saved_for_relink="$variables_saved_for_relink" # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs_F77 # Compile-time system search path for libraries sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Fix the shell variable \$srcfile for the compiler. fix_srcfile_path="$fix_srcfile_path_F77" # Set to yes if exported symbols are required. always_export_symbols=$always_export_symbols_F77 # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds_F77 # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms_F77 # Symbols that must always be exported. include_expsyms=$lt_include_expsyms_F77 # ### END LIBTOOL TAG CONFIG: $tagname __EOF__ else # If there is no Makefile yet, we rely on a make rule to execute # `config.status --recheck' to rerun these tests and create the # libtool script then. ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` if test -f "$ltmain_in"; then test -f Makefile && make "$ltmain" fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu CC="$lt_save_CC" else tagname="" fi ;; GCJ) if test -n "$GCJ" && test "X$GCJ" != "Xno"; then # Source file extension for Java test sources. ac_ext=java # Object file extension for compiled Java test sources. objext=o objext_GCJ=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="class foo {}\n" # Code to be used in simple link tests lt_simple_link_test_code='public class conftest { public static void main(String[] argv) {}; }\n' # ltmain only uses $CC for tagged configurations so make sure $CC is set. # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext printf "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $rm conftest* ac_outfile=conftest.$ac_objext printf "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $rm conftest* # Allow CC to be a program name with arguments. lt_save_CC="$CC" CC=${GCJ-"gcj"} compiler=$CC compiler_GCJ=$CC for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` # GCJ did not exist at the time GCC didn't implicitly link libc in. archive_cmds_need_lc_GCJ=no old_archive_cmds_GCJ=$old_archive_cmds lt_prog_compiler_no_builtin_flag_GCJ= if test "$GCC" = yes; then lt_prog_compiler_no_builtin_flag_GCJ=' -fno-builtin' { echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6; } if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-fno-rtti -fno-exceptions" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:16500: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:16504: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_rtti_exceptions=yes fi fi $rm conftest* fi { echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 echo "${ECHO_T}$lt_cv_prog_compiler_rtti_exceptions" >&6; } if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then lt_prog_compiler_no_builtin_flag_GCJ="$lt_prog_compiler_no_builtin_flag_GCJ -fno-rtti -fno-exceptions" else : fi fi lt_prog_compiler_wl_GCJ= lt_prog_compiler_pic_GCJ= lt_prog_compiler_static_GCJ= { echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6; } if test "$GCC" = yes; then lt_prog_compiler_wl_GCJ='-Wl,' lt_prog_compiler_static_GCJ='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_GCJ='-Bstatic' fi ;; amigaos*) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic_GCJ='-m68020 -resident32 -malways-restore-a4' ;; beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | pw32* | os2*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic_GCJ='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic_GCJ='-fno-common' ;; interix3*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. lt_prog_compiler_can_build_shared_GCJ=no enable_shared=no ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic_GCJ=-Kconform_pic fi ;; hpux*) # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic_GCJ='-fPIC' ;; esac ;; *) lt_prog_compiler_pic_GCJ='-fPIC' ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl_GCJ='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_GCJ='-Bstatic' else lt_prog_compiler_static_GCJ='-bnso -bI:/lib/syscalls.exp' fi ;; darwin*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files case $cc_basename in xlc*) lt_prog_compiler_pic_GCJ='-qnocommon' lt_prog_compiler_wl_GCJ='-Wl,' ;; esac ;; mingw* | pw32* | os2*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic_GCJ='-DDLL_EXPORT' ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl_GCJ='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic_GCJ='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static_GCJ='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl_GCJ='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static_GCJ='-non_shared' ;; newsos6) lt_prog_compiler_pic_GCJ='-KPIC' lt_prog_compiler_static_GCJ='-Bstatic' ;; linux* | k*bsd*-gnu) case $cc_basename in icc* | ecc*) lt_prog_compiler_wl_GCJ='-Wl,' lt_prog_compiler_pic_GCJ='-KPIC' lt_prog_compiler_static_GCJ='-static' ;; pgcc* | pgf77* | pgf90* | pgf95*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) lt_prog_compiler_wl_GCJ='-Wl,' lt_prog_compiler_pic_GCJ='-fpic' lt_prog_compiler_static_GCJ='-Bstatic' ;; ccc*) lt_prog_compiler_wl_GCJ='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static_GCJ='-non_shared' ;; esac ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl_GCJ='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static_GCJ='-non_shared' ;; solaris*) lt_prog_compiler_pic_GCJ='-KPIC' lt_prog_compiler_static_GCJ='-Bstatic' case $cc_basename in f77* | f90* | f95*) lt_prog_compiler_wl_GCJ='-Qoption ld ';; *) lt_prog_compiler_wl_GCJ='-Wl,';; esac ;; sunos4*) lt_prog_compiler_wl_GCJ='-Qoption ld ' lt_prog_compiler_pic_GCJ='-PIC' lt_prog_compiler_static_GCJ='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) lt_prog_compiler_wl_GCJ='-Wl,' lt_prog_compiler_pic_GCJ='-KPIC' lt_prog_compiler_static_GCJ='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then lt_prog_compiler_pic_GCJ='-Kconform_pic' lt_prog_compiler_static_GCJ='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) lt_prog_compiler_wl_GCJ='-Wl,' lt_prog_compiler_pic_GCJ='-KPIC' lt_prog_compiler_static_GCJ='-Bstatic' ;; unicos*) lt_prog_compiler_wl_GCJ='-Wl,' lt_prog_compiler_can_build_shared_GCJ=no ;; uts4*) lt_prog_compiler_pic_GCJ='-pic' lt_prog_compiler_static_GCJ='-Bstatic' ;; *) lt_prog_compiler_can_build_shared_GCJ=no ;; esac fi { echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_GCJ" >&5 echo "${ECHO_T}$lt_prog_compiler_pic_GCJ" >&6; } # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic_GCJ"; then { echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works" >&5 echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works... $ECHO_C" >&6; } if test "${lt_prog_compiler_pic_works_GCJ+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_prog_compiler_pic_works_GCJ=no ac_outfile=conftest.$ac_objext printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic_GCJ" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:16768: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:16772: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_prog_compiler_pic_works_GCJ=yes fi fi $rm conftest* fi { echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_GCJ" >&5 echo "${ECHO_T}$lt_prog_compiler_pic_works_GCJ" >&6; } if test x"$lt_prog_compiler_pic_works_GCJ" = xyes; then case $lt_prog_compiler_pic_GCJ in "" | " "*) ;; *) lt_prog_compiler_pic_GCJ=" $lt_prog_compiler_pic_GCJ" ;; esac else lt_prog_compiler_pic_GCJ= lt_prog_compiler_can_build_shared_GCJ=no fi fi case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic_GCJ= ;; *) lt_prog_compiler_pic_GCJ="$lt_prog_compiler_pic_GCJ" ;; esac # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl_GCJ eval lt_tmp_static_flag=\"$lt_prog_compiler_static_GCJ\" { echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5 echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6; } if test "${lt_prog_compiler_static_works_GCJ+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_prog_compiler_static_works_GCJ=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" printf "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_prog_compiler_static_works_GCJ=yes fi else lt_prog_compiler_static_works_GCJ=yes fi fi $rm conftest* LDFLAGS="$save_LDFLAGS" fi { echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works_GCJ" >&5 echo "${ECHO_T}$lt_prog_compiler_static_works_GCJ" >&6; } if test x"$lt_prog_compiler_static_works_GCJ" = xyes; then : else lt_prog_compiler_static_GCJ= fi { echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6; } if test "${lt_cv_prog_compiler_c_o_GCJ+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_prog_compiler_c_o_GCJ=no $rm -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:16872: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:16876: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o_GCJ=yes fi fi chmod u+w . 2>&5 $rm conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files $rm out/* && rmdir out cd .. rmdir conftest $rm conftest* fi { echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_GCJ" >&5 echo "${ECHO_T}$lt_cv_prog_compiler_c_o_GCJ" >&6; } hard_links="nottested" if test "$lt_cv_prog_compiler_c_o_GCJ" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user { echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6; } hard_links=yes $rm conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no { echo "$as_me:$LINENO: result: $hard_links" >&5 echo "${ECHO_T}$hard_links" >&6; } if test "$hard_links" = no; then { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi { echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6; } runpath_var= allow_undefined_flag_GCJ= enable_shared_with_static_runtimes_GCJ=no archive_cmds_GCJ= archive_expsym_cmds_GCJ= old_archive_From_new_cmds_GCJ= old_archive_from_expsyms_cmds_GCJ= export_dynamic_flag_spec_GCJ= whole_archive_flag_spec_GCJ= thread_safe_flag_spec_GCJ= hardcode_libdir_flag_spec_GCJ= hardcode_libdir_flag_spec_ld_GCJ= hardcode_libdir_separator_GCJ= hardcode_direct_GCJ=no hardcode_minus_L_GCJ=no hardcode_shlibpath_var_GCJ=unsupported link_all_deplibs_GCJ=unknown hardcode_automatic_GCJ=no module_cmds_GCJ= module_expsym_cmds_GCJ= always_export_symbols_GCJ=no export_symbols_cmds_GCJ='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms_GCJ= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. exclude_expsyms_GCJ="_GLOBAL_OFFSET_TABLE_" # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. extract_expsyms_cmds= # Just being paranoid about ensuring that cc_basename is set. for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` case $host_os in cygwin* | mingw* | pw32*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; esac ld_shlibs_GCJ=yes if test "$with_gnu_ld" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec_GCJ='${wl}--rpath ${wl}$libdir' export_dynamic_flag_spec_GCJ='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then whole_archive_flag_spec_GCJ="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec_GCJ= fi supports_anon_versioning=no case `$LD -v 2>/dev/null` in *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix3* | aix4* | aix5*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs_GCJ=no cat <&2 *** Warning: the GNU linker, at least up to release 2.9.1, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to modify your PATH *** so that a non-GNU linker is found, and then restart. EOF fi ;; amigaos*) archive_cmds_GCJ='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec_GCJ='-L$libdir' hardcode_minus_L_GCJ=yes # Samuel A. Falvo II reports # that the semantics of dynamic libraries on AmigaOS, at least up # to version 4, is to share data among multiple programs linked # with the same dynamic library. Since this doesn't match the # behavior of shared libraries on other platforms, we can't use # them. ld_shlibs_GCJ=no ;; beos*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then allow_undefined_flag_GCJ=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds_GCJ='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs_GCJ=no fi ;; cygwin* | mingw* | pw32*) # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, GCJ) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec_GCJ='-L$libdir' allow_undefined_flag_GCJ=unsupported always_export_symbols_GCJ=no enable_shared_with_static_runtimes_GCJ=yes export_symbols_cmds_GCJ='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds_GCJ='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs_GCJ=no fi ;; interix3*) hardcode_direct_GCJ=no hardcode_shlibpath_var_GCJ=no hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir' export_dynamic_flag_spec_GCJ='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds_GCJ='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds_GCJ='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; linux* | k*bsd*-gnu) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then tmp_addflag= case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler whole_archive_flag_spec_GCJ='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers whole_archive_flag_spec_GCJ='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; esac archive_cmds_GCJ='$CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test $supports_anon_versioning = yes; then archive_expsym_cmds_GCJ='$echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ $echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi link_all_deplibs_GCJ=no else ld_shlibs_GCJ=no fi ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then archive_cmds_GCJ='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then ld_shlibs_GCJ=no cat <&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. EOF elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs_GCJ=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs_GCJ=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec_GCJ='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib' archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib' else ld_shlibs_GCJ=no fi ;; esac ;; sunos4*) archive_cmds_GCJ='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct_GCJ=yes hardcode_shlibpath_var_GCJ=no ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs_GCJ=no fi ;; esac if test "$ld_shlibs_GCJ" = no; then runpath_var= hardcode_libdir_flag_spec_GCJ= export_dynamic_flag_spec_GCJ= whole_archive_flag_spec_GCJ= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag_GCJ=unsupported always_export_symbols_GCJ=yes archive_expsym_cmds_GCJ='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L_GCJ=yes if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct_GCJ=unsupported fi ;; aix4* | aix5*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm if $NM -V 2>&1 | grep 'GNU' > /dev/null; then export_symbols_cmds_GCJ='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds_GCJ='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix5*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds_GCJ='' hardcode_direct_GCJ=yes hardcode_libdir_separator_GCJ=':' link_all_deplibs_GCJ=yes if test "$GCC" = yes; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && \ strings "$collect2name" | grep resolve_lib_name >/dev/null then # We have reworked collect2 hardcode_direct_GCJ=yes else # We have old collect2 hardcode_direct_GCJ=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L_GCJ=yes hardcode_libdir_flag_spec_GCJ='-L$libdir' hardcode_libdir_separator_GCJ= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols_GCJ=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag_GCJ='-berok' # Determine the default libpath from the value encoded in an empty executable. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec_GCJ='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds_GCJ="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec_GCJ='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag_GCJ="-z nodefs" archive_expsym_cmds_GCJ="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an empty executable. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec_GCJ='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag_GCJ=' ${wl}-bernotok' allow_undefined_flag_GCJ=' ${wl}-berok' # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec_GCJ='$convenience' archive_cmds_need_lc_GCJ=yes # This is similar to how AIX traditionally builds its shared libraries. archive_expsym_cmds_GCJ="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) archive_cmds_GCJ='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec_GCJ='-L$libdir' hardcode_minus_L_GCJ=yes # see comment about different semantics on the GNU ld section ld_shlibs_GCJ=no ;; bsdi[45]*) export_dynamic_flag_spec_GCJ=-rdynamic ;; cygwin* | mingw* | pw32*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec_GCJ=' ' allow_undefined_flag_GCJ=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds_GCJ='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_From_new_cmds_GCJ='true' # FIXME: Should let the user specify the lib program. old_archive_cmds_GCJ='lib /OUT:$oldlib$oldobjs$old_deplibs' fix_srcfile_path_GCJ='`cygpath -w "$srcfile"`' enable_shared_with_static_runtimes_GCJ=yes ;; darwin* | rhapsody*) case $host_os in rhapsody* | darwin1.[012]) allow_undefined_flag_GCJ='${wl}-undefined ${wl}suppress' ;; *) # Darwin 1.3 on if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then allow_undefined_flag_GCJ='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' else case ${MACOSX_DEPLOYMENT_TARGET} in 10.[012]) allow_undefined_flag_GCJ='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) allow_undefined_flag_GCJ='${wl}-undefined ${wl}dynamic_lookup' ;; esac fi ;; esac archive_cmds_need_lc_GCJ=no hardcode_direct_GCJ=no hardcode_automatic_GCJ=yes hardcode_shlibpath_var_GCJ=unsupported whole_archive_flag_spec_GCJ='' link_all_deplibs_GCJ=yes if test "$GCC" = yes ; then output_verbose_link_cmd='echo' archive_cmds_GCJ='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' module_cmds_GCJ='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds archive_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' module_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' else case $cc_basename in xlc*) output_verbose_link_cmd='echo' archive_cmds_GCJ='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring' module_cmds_GCJ='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds archive_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' module_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' ;; *) ld_shlibs_GCJ=no ;; esac fi ;; dgux*) archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_GCJ='-L$libdir' hardcode_shlibpath_var_GCJ=no ;; freebsd1*) ld_shlibs_GCJ=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec_GCJ='-R$libdir' hardcode_direct_GCJ=yes hardcode_shlibpath_var_GCJ=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2*) archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_GCJ=yes hardcode_minus_L_GCJ=yes hardcode_shlibpath_var_GCJ=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) archive_cmds_GCJ='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec_GCJ='-R$libdir' hardcode_direct_GCJ=yes hardcode_shlibpath_var_GCJ=no ;; hpux9*) if test "$GCC" = yes; then archive_cmds_GCJ='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else archive_cmds_GCJ='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir' hardcode_libdir_separator_GCJ=: hardcode_direct_GCJ=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_GCJ=yes export_dynamic_flag_spec_GCJ='${wl}-E' ;; hpux10*) if test "$GCC" = yes -a "$with_gnu_ld" = no; then archive_cmds_GCJ='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_GCJ='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir' hardcode_libdir_separator_GCJ=: hardcode_direct_GCJ=yes export_dynamic_flag_spec_GCJ='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_GCJ=yes fi ;; hpux11*) if test "$GCC" = yes -a "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) archive_cmds_GCJ='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds_GCJ='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_GCJ='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) archive_cmds_GCJ='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds_GCJ='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_GCJ='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir' hardcode_libdir_separator_GCJ=: case $host_cpu in hppa*64*|ia64*) hardcode_libdir_flag_spec_ld_GCJ='+b $libdir' hardcode_direct_GCJ=no hardcode_shlibpath_var_GCJ=no ;; *) hardcode_direct_GCJ=yes export_dynamic_flag_spec_GCJ='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_GCJ=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else archive_cmds_GCJ='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_ld_GCJ='-rpath $libdir' fi hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_GCJ=: link_all_deplibs_GCJ=yes ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds_GCJ='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec_GCJ='-R$libdir' hardcode_direct_GCJ=yes hardcode_shlibpath_var_GCJ=no ;; newsos6) archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_GCJ=yes hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_GCJ=: hardcode_shlibpath_var_GCJ=no ;; openbsd*) hardcode_direct_GCJ=yes hardcode_shlibpath_var_GCJ=no if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir' export_dynamic_flag_spec_GCJ='${wl}-E' else case $host_os in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_GCJ='-R$libdir' ;; *) archive_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir' ;; esac fi ;; os2*) hardcode_libdir_flag_spec_GCJ='-L$libdir' hardcode_minus_L_GCJ=yes allow_undefined_flag_GCJ=unsupported archive_cmds_GCJ='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' old_archive_From_new_cmds_GCJ='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then allow_undefined_flag_GCJ=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_GCJ='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else allow_undefined_flag_GCJ=' -expect_unresolved \*' archive_cmds_GCJ='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' fi hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_GCJ=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then allow_undefined_flag_GCJ=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_GCJ='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' else allow_undefined_flag_GCJ=' -expect_unresolved \*' archive_cmds_GCJ='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds_GCJ='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~$rm $lib.exp' # Both c and cxx compiler support -rpath directly hardcode_libdir_flag_spec_GCJ='-rpath $libdir' fi hardcode_libdir_separator_GCJ=: ;; solaris*) no_undefined_flag_GCJ=' -z text' if test "$GCC" = yes; then wlarc='${wl}' archive_cmds_GCJ='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_GCJ='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' else wlarc='' archive_cmds_GCJ='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds_GCJ='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' fi hardcode_libdir_flag_spec_GCJ='-R$libdir' hardcode_shlibpath_var_GCJ=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine linker options so we # cannot just pass the convience library names through # without $wl, iff we do not link with $LD. # Luckily, gcc supports the same syntax we need for Sun Studio. # Supported since Solaris 2.6 (maybe 2.5.1?) case $wlarc in '') whole_archive_flag_spec_GCJ='-z allextract$convenience -z defaultextract' ;; *) whole_archive_flag_spec_GCJ='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' ;; esac ;; esac link_all_deplibs_GCJ=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. archive_cmds_GCJ='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_GCJ='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec_GCJ='-L$libdir' hardcode_direct_GCJ=yes hardcode_minus_L_GCJ=yes hardcode_shlibpath_var_GCJ=no ;; sysv4) case $host_vendor in sni) archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_GCJ=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds_GCJ='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds_GCJ='$CC -r -o $output$reload_objs' hardcode_direct_GCJ=no ;; motorola) archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_GCJ=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var_GCJ=no ;; sysv4.3*) archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var_GCJ=no export_dynamic_flag_spec_GCJ='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var_GCJ=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs_GCJ=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7*) no_undefined_flag_GCJ='${wl}-z,text' archive_cmds_need_lc_GCJ=no hardcode_shlibpath_var_GCJ=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds_GCJ='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_GCJ='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_GCJ='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_GCJ='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag_GCJ='${wl}-z,text' allow_undefined_flag_GCJ='${wl}-z,nodefs' archive_cmds_need_lc_GCJ=no hardcode_shlibpath_var_GCJ=no hardcode_libdir_flag_spec_GCJ='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' hardcode_libdir_separator_GCJ=':' link_all_deplibs_GCJ=yes export_dynamic_flag_spec_GCJ='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds_GCJ='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_GCJ='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_GCJ='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_GCJ='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_GCJ='-L$libdir' hardcode_shlibpath_var_GCJ=no ;; *) ld_shlibs_GCJ=no ;; esac fi { echo "$as_me:$LINENO: result: $ld_shlibs_GCJ" >&5 echo "${ECHO_T}$ld_shlibs_GCJ" >&6; } test "$ld_shlibs_GCJ" = no && can_build_shared=no # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc_GCJ" in x|xyes) # Assume -lc should be added archive_cmds_need_lc_GCJ=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds_GCJ in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. { echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6; } $rm conftest* printf "$lt_simple_compile_test_code" > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl_GCJ pic_flag=$lt_prog_compiler_pic_GCJ compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag_GCJ allow_undefined_flag_GCJ= if { (eval echo "$as_me:$LINENO: \"$archive_cmds_GCJ 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 (eval $archive_cmds_GCJ 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } then archive_cmds_need_lc_GCJ=no else archive_cmds_need_lc_GCJ=yes fi allow_undefined_flag_GCJ=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $rm conftest* { echo "$as_me:$LINENO: result: $archive_cmds_need_lc_GCJ" >&5 echo "${ECHO_T}$archive_cmds_need_lc_GCJ" >&6; } ;; esac fi ;; esac { echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6; } library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix4* | aix5*) version_type=linux need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$host_os in yes,cygwin* | yes,mingw* | yes,pw32*) library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $rm \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" ;; mingw*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH printed by # mingw gcc, but we are running on Cygwin. Gcc prints its search # path with ; separators, and with drive letters. We can handle the # drive letters (cygwin fileutils understands them), so leave them, # especially as we might pass files found there to a mingw objdump, # which wouldn't understand a cygwinified path. Ahh. sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; esac ;; *) library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' ;; esac dynamic_linker='Win32 ld.exe' # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` else sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' fi sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd1*) dynamic_linker=no ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[123]*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; freebsd*) # from 4.6 on shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555. postinstall_cmds='chmod 555 $lib' ;; interix3*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be Linux ELF. linux* | k*bsd*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsdelf*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='NetBSD ld.elf_so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; nto-qnx*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; solaris*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no export_dynamic_flag_spec='${wl}-Blargedynsym' runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' shlibpath_overrides_runpath=no else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' shlibpath_overrides_runpath=yes case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; uts4*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac { echo "$as_me:$LINENO: result: $dynamic_linker" >&5 echo "${ECHO_T}$dynamic_linker" >&6; } test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi { echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6; } hardcode_action_GCJ= if test -n "$hardcode_libdir_flag_spec_GCJ" || \ test -n "$runpath_var_GCJ" || \ test "X$hardcode_automatic_GCJ" = "Xyes" ; then # We can hardcode non-existant directories. if test "$hardcode_direct_GCJ" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, GCJ)" != no && test "$hardcode_minus_L_GCJ" != no; then # Linking always hardcodes the temporary library directory. hardcode_action_GCJ=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action_GCJ=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action_GCJ=unsupported fi { echo "$as_me:$LINENO: result: $hardcode_action_GCJ" >&5 echo "${ECHO_T}$hardcode_action_GCJ" >&6; } if test "$hardcode_action_GCJ" = relink; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi # The else clause should only fire when bootstrapping the # libtool distribution, otherwise you forgot to ship ltmain.sh # with your package, and you will get complaints that there are # no rules to generate ltmain.sh. if test -f "$ltmain"; then # See if we are running on zsh, and set the options which allow our commands through # without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi # Now quote all the things that may contain metacharacters while being # careful not to overquote the AC_SUBSTed values. We take copies of the # variables and quote the copies for generation of the libtool script. for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \ SED SHELL STRIP \ libname_spec library_names_spec soname_spec extract_expsyms_cmds \ old_striplib striplib file_magic_cmd finish_cmds finish_eval \ deplibs_check_method reload_flag reload_cmds need_locks \ lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ old_postinstall_cmds old_postuninstall_cmds \ compiler_GCJ \ CC_GCJ \ LD_GCJ \ lt_prog_compiler_wl_GCJ \ lt_prog_compiler_pic_GCJ \ lt_prog_compiler_static_GCJ \ lt_prog_compiler_no_builtin_flag_GCJ \ export_dynamic_flag_spec_GCJ \ thread_safe_flag_spec_GCJ \ whole_archive_flag_spec_GCJ \ enable_shared_with_static_runtimes_GCJ \ old_archive_cmds_GCJ \ old_archive_from_new_cmds_GCJ \ predep_objects_GCJ \ postdep_objects_GCJ \ predeps_GCJ \ postdeps_GCJ \ compiler_lib_search_path_GCJ \ archive_cmds_GCJ \ archive_expsym_cmds_GCJ \ postinstall_cmds_GCJ \ postuninstall_cmds_GCJ \ old_archive_from_expsyms_cmds_GCJ \ allow_undefined_flag_GCJ \ no_undefined_flag_GCJ \ export_symbols_cmds_GCJ \ hardcode_libdir_flag_spec_GCJ \ hardcode_libdir_flag_spec_ld_GCJ \ hardcode_libdir_separator_GCJ \ hardcode_automatic_GCJ \ module_cmds_GCJ \ module_expsym_cmds_GCJ \ lt_cv_prog_compiler_c_o_GCJ \ exclude_expsyms_GCJ \ include_expsyms_GCJ; do case $var in old_archive_cmds_GCJ | \ old_archive_from_new_cmds_GCJ | \ archive_cmds_GCJ | \ archive_expsym_cmds_GCJ | \ module_cmds_GCJ | \ module_expsym_cmds_GCJ | \ old_archive_from_expsyms_cmds_GCJ | \ export_symbols_cmds_GCJ | \ extract_expsyms_cmds | reload_cmds | finish_cmds | \ postinstall_cmds | postuninstall_cmds | \ old_postinstall_cmds | old_postuninstall_cmds | \ sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) # Double-quote double-evaled strings. eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" ;; *) eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" ;; esac done case $lt_echo in *'\$0 --fallback-echo"') lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` ;; esac cfgfile="$ofile" cat <<__EOF__ >> "$cfgfile" # ### BEGIN LIBTOOL TAG CONFIG: $tagname # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc_GCJ # Whether or not to disallow shared libs when runtime libs are static allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_GCJ # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # The host system. host_alias=$host_alias host=$host host_os=$host_os # The build system. build_alias=$build_alias build=$build build_os=$build_os # An echo program that does not interpret backslashes. echo=$lt_echo # The archiver. AR=$lt_AR AR_FLAGS=$lt_AR_FLAGS # A C compiler. LTCC=$lt_LTCC # LTCC compiler flags. LTCFLAGS=$lt_LTCFLAGS # A language-specific compiler. CC=$lt_compiler_GCJ # Is the compiler the GNU C compiler? with_gcc=$GCC_GCJ # An ERE matcher. EGREP=$lt_EGREP # The linker used to build libraries. LD=$lt_LD_GCJ # Whether we need hard or soft links. LN_S=$lt_LN_S # A BSD-compatible nm program. NM=$lt_NM # A symbol stripping program STRIP=$lt_STRIP # Used to examine libraries when file_magic_cmd begins "file" MAGIC_CMD=$MAGIC_CMD # Used on cygwin: DLL creation program. DLLTOOL="$DLLTOOL" # Used on cygwin: object dumper. OBJDUMP="$OBJDUMP" # Used on cygwin: assembler. AS="$AS" # The name of the directory that contains temporary libtool files. objdir=$objdir # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl_GCJ # Object file suffix (normally "o"). objext="$ac_objext" # Old archive suffix (normally "a"). libext="$libext" # Shared library suffix (normally ".so"). shrext_cmds='$shrext_cmds' # Executable file suffix (normally ""). exeext="$exeext" # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic_GCJ pic_mode=$pic_mode # What is the maximum length of a command? max_cmd_len=$lt_cv_sys_max_cmd_len # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o_GCJ # Must we lock files when doing compilation? need_locks=$lt_need_locks # Do we need the lib prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static_GCJ # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_GCJ # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_GCJ # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec_GCJ # Compiler flag to generate thread-safe objects. thread_safe_flag_spec=$lt_thread_safe_flag_spec_GCJ # Library versioning type. version_type=$version_type # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME. library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Commands used to build and install an old-style archive. RANLIB=$lt_RANLIB old_archive_cmds=$lt_old_archive_cmds_GCJ old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_GCJ # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_GCJ # Commands used to build and install a shared archive. archive_cmds=$lt_archive_cmds_GCJ archive_expsym_cmds=$lt_archive_expsym_cmds_GCJ postinstall_cmds=$lt_postinstall_cmds postuninstall_cmds=$lt_postuninstall_cmds # Commands used to build a loadable module (assumed same as above if empty) module_cmds=$lt_module_cmds_GCJ module_expsym_cmds=$lt_module_expsym_cmds_GCJ # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # Dependencies to place before the objects being linked to create a # shared library. predep_objects=$lt_predep_objects_GCJ # Dependencies to place after the objects being linked to create a # shared library. postdep_objects=$lt_postdep_objects_GCJ # Dependencies to place before the objects being linked to create a # shared library. predeps=$lt_predeps_GCJ # Dependencies to place after the objects being linked to create a # shared library. postdeps=$lt_postdeps_GCJ # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path_GCJ # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method == file_magic. file_magic_cmd=$lt_file_magic_cmd # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag_GCJ # Flag that forces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag_GCJ # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # Same as above, but a single script fragment to be evaled but not shown. finish_eval=$lt_finish_eval # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # This is the shared library runtime path variable. runpath_var=$runpath_var # This is the shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action_GCJ # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist. hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_GCJ # If ld is used when linking, flag to hardcode \$libdir into # a binary during linking. This must work even if \$libdir does # not exist. hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_GCJ # Whether we need a single -rpath flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator_GCJ # Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the # resulting binary. hardcode_direct=$hardcode_direct_GCJ # Set to yes if using the -LDIR flag during linking hardcodes DIR into the # resulting binary. hardcode_minus_L=$hardcode_minus_L_GCJ # Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into # the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var_GCJ # Set to yes if building a shared library automatically hardcodes DIR into the library # and all subsequent libraries and executables linked against it. hardcode_automatic=$hardcode_automatic_GCJ # Variables whose values should be saved in libtool wrapper scripts and # restored at relink time. variables_saved_for_relink="$variables_saved_for_relink" # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs_GCJ # Compile-time system search path for libraries sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Fix the shell variable \$srcfile for the compiler. fix_srcfile_path="$fix_srcfile_path_GCJ" # Set to yes if exported symbols are required. always_export_symbols=$always_export_symbols_GCJ # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds_GCJ # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms_GCJ # Symbols that must always be exported. include_expsyms=$lt_include_expsyms_GCJ # ### END LIBTOOL TAG CONFIG: $tagname __EOF__ else # If there is no Makefile yet, we rely on a make rule to execute # `config.status --recheck' to rerun these tests and create the # libtool script then. ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` if test -f "$ltmain_in"; then test -f Makefile && make "$ltmain" fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu CC="$lt_save_CC" else tagname="" fi ;; RC) # Source file extension for RC test sources. ac_ext=rc # Object file extension for compiled RC test sources. objext=o objext_RC=$objext # Code to be used in simple compile tests lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }\n' # Code to be used in simple link tests lt_simple_link_test_code="$lt_simple_compile_test_code" # ltmain only uses $CC for tagged configurations so make sure $CC is set. # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext printf "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $rm conftest* ac_outfile=conftest.$ac_objext printf "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $rm conftest* # Allow CC to be a program name with arguments. lt_save_CC="$CC" CC=${RC-"windres"} compiler=$CC compiler_RC=$CC for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` lt_cv_prog_compiler_c_o_RC=yes # The else clause should only fire when bootstrapping the # libtool distribution, otherwise you forgot to ship ltmain.sh # with your package, and you will get complaints that there are # no rules to generate ltmain.sh. if test -f "$ltmain"; then # See if we are running on zsh, and set the options which allow our commands through # without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi # Now quote all the things that may contain metacharacters while being # careful not to overquote the AC_SUBSTed values. We take copies of the # variables and quote the copies for generation of the libtool script. for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \ SED SHELL STRIP \ libname_spec library_names_spec soname_spec extract_expsyms_cmds \ old_striplib striplib file_magic_cmd finish_cmds finish_eval \ deplibs_check_method reload_flag reload_cmds need_locks \ lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ old_postinstall_cmds old_postuninstall_cmds \ compiler_RC \ CC_RC \ LD_RC \ lt_prog_compiler_wl_RC \ lt_prog_compiler_pic_RC \ lt_prog_compiler_static_RC \ lt_prog_compiler_no_builtin_flag_RC \ export_dynamic_flag_spec_RC \ thread_safe_flag_spec_RC \ whole_archive_flag_spec_RC \ enable_shared_with_static_runtimes_RC \ old_archive_cmds_RC \ old_archive_from_new_cmds_RC \ predep_objects_RC \ postdep_objects_RC \ predeps_RC \ postdeps_RC \ compiler_lib_search_path_RC \ archive_cmds_RC \ archive_expsym_cmds_RC \ postinstall_cmds_RC \ postuninstall_cmds_RC \ old_archive_from_expsyms_cmds_RC \ allow_undefined_flag_RC \ no_undefined_flag_RC \ export_symbols_cmds_RC \ hardcode_libdir_flag_spec_RC \ hardcode_libdir_flag_spec_ld_RC \ hardcode_libdir_separator_RC \ hardcode_automatic_RC \ module_cmds_RC \ module_expsym_cmds_RC \ lt_cv_prog_compiler_c_o_RC \ exclude_expsyms_RC \ include_expsyms_RC; do case $var in old_archive_cmds_RC | \ old_archive_from_new_cmds_RC | \ archive_cmds_RC | \ archive_expsym_cmds_RC | \ module_cmds_RC | \ module_expsym_cmds_RC | \ old_archive_from_expsyms_cmds_RC | \ export_symbols_cmds_RC | \ extract_expsyms_cmds | reload_cmds | finish_cmds | \ postinstall_cmds | postuninstall_cmds | \ old_postinstall_cmds | old_postuninstall_cmds | \ sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) # Double-quote double-evaled strings. eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" ;; *) eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" ;; esac done case $lt_echo in *'\$0 --fallback-echo"') lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` ;; esac cfgfile="$ofile" cat <<__EOF__ >> "$cfgfile" # ### BEGIN LIBTOOL TAG CONFIG: $tagname # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc_RC # Whether or not to disallow shared libs when runtime libs are static allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_RC # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # The host system. host_alias=$host_alias host=$host host_os=$host_os # The build system. build_alias=$build_alias build=$build build_os=$build_os # An echo program that does not interpret backslashes. echo=$lt_echo # The archiver. AR=$lt_AR AR_FLAGS=$lt_AR_FLAGS # A C compiler. LTCC=$lt_LTCC # LTCC compiler flags. LTCFLAGS=$lt_LTCFLAGS # A language-specific compiler. CC=$lt_compiler_RC # Is the compiler the GNU C compiler? with_gcc=$GCC_RC # An ERE matcher. EGREP=$lt_EGREP # The linker used to build libraries. LD=$lt_LD_RC # Whether we need hard or soft links. LN_S=$lt_LN_S # A BSD-compatible nm program. NM=$lt_NM # A symbol stripping program STRIP=$lt_STRIP # Used to examine libraries when file_magic_cmd begins "file" MAGIC_CMD=$MAGIC_CMD # Used on cygwin: DLL creation program. DLLTOOL="$DLLTOOL" # Used on cygwin: object dumper. OBJDUMP="$OBJDUMP" # Used on cygwin: assembler. AS="$AS" # The name of the directory that contains temporary libtool files. objdir=$objdir # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl_RC # Object file suffix (normally "o"). objext="$ac_objext" # Old archive suffix (normally "a"). libext="$libext" # Shared library suffix (normally ".so"). shrext_cmds='$shrext_cmds' # Executable file suffix (normally ""). exeext="$exeext" # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic_RC pic_mode=$pic_mode # What is the maximum length of a command? max_cmd_len=$lt_cv_sys_max_cmd_len # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o_RC # Must we lock files when doing compilation? need_locks=$lt_need_locks # Do we need the lib prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static_RC # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_RC # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_RC # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec_RC # Compiler flag to generate thread-safe objects. thread_safe_flag_spec=$lt_thread_safe_flag_spec_RC # Library versioning type. version_type=$version_type # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME. library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Commands used to build and install an old-style archive. RANLIB=$lt_RANLIB old_archive_cmds=$lt_old_archive_cmds_RC old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_RC # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_RC # Commands used to build and install a shared archive. archive_cmds=$lt_archive_cmds_RC archive_expsym_cmds=$lt_archive_expsym_cmds_RC postinstall_cmds=$lt_postinstall_cmds postuninstall_cmds=$lt_postuninstall_cmds # Commands used to build a loadable module (assumed same as above if empty) module_cmds=$lt_module_cmds_RC module_expsym_cmds=$lt_module_expsym_cmds_RC # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # Dependencies to place before the objects being linked to create a # shared library. predep_objects=$lt_predep_objects_RC # Dependencies to place after the objects being linked to create a # shared library. postdep_objects=$lt_postdep_objects_RC # Dependencies to place before the objects being linked to create a # shared library. predeps=$lt_predeps_RC # Dependencies to place after the objects being linked to create a # shared library. postdeps=$lt_postdeps_RC # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path_RC # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method == file_magic. file_magic_cmd=$lt_file_magic_cmd # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag_RC # Flag that forces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag_RC # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # Same as above, but a single script fragment to be evaled but not shown. finish_eval=$lt_finish_eval # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # This is the shared library runtime path variable. runpath_var=$runpath_var # This is the shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action_RC # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist. hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_RC # If ld is used when linking, flag to hardcode \$libdir into # a binary during linking. This must work even if \$libdir does # not exist. hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_RC # Whether we need a single -rpath flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator_RC # Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the # resulting binary. hardcode_direct=$hardcode_direct_RC # Set to yes if using the -LDIR flag during linking hardcodes DIR into the # resulting binary. hardcode_minus_L=$hardcode_minus_L_RC # Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into # the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var_RC # Set to yes if building a shared library automatically hardcodes DIR into the library # and all subsequent libraries and executables linked against it. hardcode_automatic=$hardcode_automatic_RC # Variables whose values should be saved in libtool wrapper scripts and # restored at relink time. variables_saved_for_relink="$variables_saved_for_relink" # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs_RC # Compile-time system search path for libraries sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Fix the shell variable \$srcfile for the compiler. fix_srcfile_path="$fix_srcfile_path_RC" # Set to yes if exported symbols are required. always_export_symbols=$always_export_symbols_RC # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds_RC # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms_RC # Symbols that must always be exported. include_expsyms=$lt_include_expsyms_RC # ### END LIBTOOL TAG CONFIG: $tagname __EOF__ else # If there is no Makefile yet, we rely on a make rule to execute # `config.status --recheck' to rerun these tests and create the # libtool script then. ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` if test -f "$ltmain_in"; then test -f Makefile && make "$ltmain" fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu CC="$lt_save_CC" ;; *) { { echo "$as_me:$LINENO: error: Unsupported tag name: $tagname" >&5 echo "$as_me: error: Unsupported tag name: $tagname" >&2;} { (exit 1); exit 1; }; } ;; esac # Append the new tag name to the list of available tags. if test -n "$tagname" ; then available_tags="$available_tags $tagname" fi fi done IFS="$lt_save_ifs" # Now substitute the updated list of available tags. if eval "sed -e 's/^available_tags=.*\$/available_tags=\"$available_tags\"/' \"$ofile\" > \"${ofile}T\""; then mv "${ofile}T" "$ofile" chmod +x "$ofile" else rm -f "${ofile}T" { { echo "$as_me:$LINENO: error: unable to update list of available tagged configurations." >&5 echo "$as_me: error: unable to update list of available tagged configurations." >&2;} { (exit 1); exit 1; }; } fi fi # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' # Prevent multiple expansion { echo "$as_me:$LINENO: checking whether to enable maintainer-specific portions of Makefiles" >&5 echo $ECHO_N "checking whether to enable maintainer-specific portions of Makefiles... $ECHO_C" >&6; } # Check whether --enable-maintainer-mode was given. if test "${enable_maintainer_mode+set}" = set; then enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval else USE_MAINTAINER_MODE=no fi { echo "$as_me:$LINENO: result: $USE_MAINTAINER_MODE" >&5 echo "${ECHO_T}$USE_MAINTAINER_MODE" >&6; } if test $USE_MAINTAINER_MODE = yes; then MAINTAINER_MODE_TRUE= MAINTAINER_MODE_FALSE='#' else MAINTAINER_MODE_TRUE='#' MAINTAINER_MODE_FALSE= fi MAINT=$MAINTAINER_MODE_TRUE # Check we're in the right directory ac_config_headers="$ac_config_headers config.h" # Checks for programs. ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test -z "$CXX"; then if test -n "$CCC"; then CXX=$CCC else if test -n "$ac_tool_prefix"; then for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_CXX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then { echo "$as_me:$LINENO: result: $CXX" >&5 echo "${ECHO_T}$CXX" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi test -n "$CXX" && break done fi if test -z "$CXX"; then ac_ct_CXX=$CXX for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CXX="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then { echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5 echo "${ECHO_T}$ac_ct_CXX" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi test -n "$ac_ct_CXX" && break done if test "x$ac_ct_CXX" = x; then CXX="g++" else case $cross_compiling:$ac_tool_warned in yes:) { echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&5 echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&2;} ac_tool_warned=yes ;; esac CXX=$ac_ct_CXX fi fi fi fi # Provide some information about the compiler. echo "$as_me:$LINENO: checking for C++ compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (ac_try="$ac_compiler --version >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compiler --version >&5") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (ac_try="$ac_compiler -v >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compiler -v >&5") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (ac_try="$ac_compiler -V >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compiler -V >&5") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { echo "$as_me:$LINENO: checking whether we are using the GNU C++ compiler" >&5 echo $ECHO_N "checking whether we are using the GNU C++ compiler... $ECHO_C" >&6; } if test "${ac_cv_cxx_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu fi { echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_cxx_compiler_gnu" >&6; } GXX=`test $ac_compiler_gnu = yes && echo yes` ac_test_CXXFLAGS=${CXXFLAGS+set} ac_save_CXXFLAGS=$CXXFLAGS { echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5 echo $ECHO_N "checking whether $CXX accepts -g... $ECHO_C" >&6; } if test "${ac_cv_prog_cxx_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_save_cxx_werror_flag=$ac_cxx_werror_flag ac_cxx_werror_flag=yes ac_cv_prog_cxx_g=no CXXFLAGS="-g" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cxx_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 CXXFLAGS="" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cxx_werror_flag=$ac_save_cxx_werror_flag CXXFLAGS="-g" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cxx_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cxx_werror_flag=$ac_save_cxx_werror_flag fi { echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5 echo "${ECHO_T}$ac_cv_prog_cxx_g" >&6; } if test "$ac_test_CXXFLAGS" = set; then CXXFLAGS=$ac_save_CXXFLAGS elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then CXXFLAGS="-g -O2" else CXXFLAGS="-g" fi else if test "$GXX" = yes; then CXXFLAGS="-O2" else CXXFLAGS= fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CXX" am_compiler_list= { echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6; } if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CXX_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf case $depmode in nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; none) break ;; esac # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. if depmode=$depmode \ source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CXX_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CXX_dependencies_compiler_type=none fi fi { echo "$as_me:$LINENO: result: $am_cv_CXX_dependencies_compiler_type" >&5 echo "${ECHO_T}$am_cv_CXX_dependencies_compiler_type" >&6; } CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then am__fastdepCXX_TRUE= am__fastdepCXX_FALSE='#' else am__fastdepCXX_TRUE='#' am__fastdepCXX_FALSE= fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}gcc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="gcc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&5 echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&5 echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&5 echo "$as_me: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } # Provide some information about the compiler. echo "$as_me:$LINENO: checking for C compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (ac_try="$ac_compiler --version >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compiler --version >&5") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (ac_try="$ac_compiler -v >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compiler -v >&5") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (ac_try="$ac_compiler -V >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compiler -V >&5") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6; } if test "${ac_cv_c_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6; } GCC=`test $ac_compiler_gnu = yes && echo yes` ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6; } if test "${ac_cv_prog_cc_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cc_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 CFLAGS="" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cc_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 echo "${ECHO_T}$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5 echo $ECHO_N "checking for $CC option to accept ISO C89... $ECHO_C" >&6; } if test "${ac_cv_prog_cc_c89+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cc_c89=$ac_arg else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { echo "$as_me:$LINENO: result: none needed" >&5 echo "${ECHO_T}none needed" >&6; } ;; xno) { echo "$as_me:$LINENO: result: unsupported" >&5 echo "${ECHO_T}unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5 echo "${ECHO_T}$ac_cv_prog_cc_c89" >&6; } ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CC" am_compiler_list= { echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6; } if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf case $depmode in nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; none) break ;; esac # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. if depmode=$depmode \ source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5 echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi { echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6; } set x ${MAKE-make}; ac_make=`echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6; } SET_MAKE= else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if test "${ac_cv_prog_CPP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { echo "$as_me:$LINENO: result: $CPP" >&5 echo "${ECHO_T}$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details." >&5 echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # By default we simply use the C compiler to build assembly code. test "${CCAS+set}" = set || CCAS=$CC test "${CCASFLAGS+set}" = set || CCASFLAGS=$CFLAGS depcc="$CCAS" am_compiler_list= { echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6; } if test "${am_cv_CCAS_dependencies_compiler_type+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CCAS_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf case $depmode in nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; none) break ;; esac # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. if depmode=$depmode \ source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CCAS_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CCAS_dependencies_compiler_type=none fi fi { echo "$as_me:$LINENO: result: $am_cv_CCAS_dependencies_compiler_type" >&5 echo "${ECHO_T}$am_cv_CCAS_dependencies_compiler_type" >&6; } CCASDEPMODE=depmode=$am_cv_CCAS_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CCAS_dependencies_compiler_type" = gcc3; then am__fastdepCCAS_TRUE= am__fastdepCCAS_FALSE='#' else am__fastdepCCAS_TRUE='#' am__fastdepCCAS_FALSE= fi # Checks for libraries. { echo "$as_me:$LINENO: checking for main in -lgcc" >&5 echo $ECHO_N "checking for main in -lgcc... $ECHO_C" >&6; } if test "${ac_cv_lib_gcc_main+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lgcc $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { return main (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_lib_gcc_main=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_gcc_main=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_lib_gcc_main" >&5 echo "${ECHO_T}$ac_cv_lib_gcc_main" >&6; } if test $ac_cv_lib_gcc_main = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_LIBGCC 1 _ACEOF LIBS="-lgcc $LIBS" fi { echo "$as_me:$LINENO: checking for main in -lgcc_s" >&5 echo $ECHO_N "checking for main in -lgcc_s... $ECHO_C" >&6; } if test "${ac_cv_lib_gcc_s_main+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lgcc_s $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { return main (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_lib_gcc_s_main=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_gcc_s_main=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_lib_gcc_s_main" >&5 echo "${ECHO_T}$ac_cv_lib_gcc_s_main" >&6; } if test $ac_cv_lib_gcc_s_main = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_LIBGCC_S 1 _ACEOF LIBS="-lgcc_s $LIBS" fi { echo "$as_me:$LINENO: checking for main in -lstdc++" >&5 echo $ECHO_N "checking for main in -lstdc++... $ECHO_C" >&6; } if test "${ac_cv_lib_stdcpp_main+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lstdc++ $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { return main (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_lib_stdcpp_main=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_stdcpp_main=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_lib_stdcpp_main" >&5 echo "${ECHO_T}$ac_cv_lib_stdcpp_main" >&6; } if test $ac_cv_lib_stdcpp_main = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_LIBSTDC__ 1 _ACEOF LIBS="-lstdc++ $LIBS" fi { echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6; } if test "${ac_cv_lib_dl_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_lib_dl_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6; } if test $ac_cv_lib_dl_dlopen = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_LIBDL 1 _ACEOF LIBS="-ldl $LIBS" fi { echo "$as_me:$LINENO: checking for floor in -lm" >&5 echo $ECHO_N "checking for floor in -lm... $ECHO_C" >&6; } if test "${ac_cv_lib_m_floor+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lm $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char floor (); int main () { return floor (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_lib_m_floor=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_m_floor=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_lib_m_floor" >&5 echo "${ECHO_T}$ac_cv_lib_m_floor" >&6; } if test $ac_cv_lib_m_floor = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_LIBM 1 _ACEOF LIBS="-lm $LIBS" fi { echo "$as_me:$LINENO: checking for pthread_create in -lpthread" >&5 echo $ECHO_N "checking for pthread_create in -lpthread... $ECHO_C" >&6; } if test "${ac_cv_lib_pthread_pthread_create+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lpthread $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char pthread_create (); int main () { return pthread_create (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_lib_pthread_pthread_create=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_pthread_pthread_create=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_lib_pthread_pthread_create" >&5 echo "${ECHO_T}$ac_cv_lib_pthread_pthread_create" >&6; } if test $ac_cv_lib_pthread_pthread_create = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_LIBPTHREAD 1 _ACEOF LIBS="-lpthread $LIBS" fi # The next two are only used with mingw { echo "$as_me:$LINENO: checking for main in -lwsock32" >&5 echo $ECHO_N "checking for main in -lwsock32... $ECHO_C" >&6; } if test "${ac_cv_lib_wsock32_main+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lwsock32 $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { return main (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_lib_wsock32_main=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_wsock32_main=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_lib_wsock32_main" >&5 echo "${ECHO_T}$ac_cv_lib_wsock32_main" >&6; } if test $ac_cv_lib_wsock32_main = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_LIBWSOCK32 1 _ACEOF LIBS="-lwsock32 $LIBS" fi { echo "$as_me:$LINENO: checking for main in -lgdi32" >&5 echo $ECHO_N "checking for main in -lgdi32... $ECHO_C" >&6; } if test "${ac_cv_lib_gdi32_main+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lgdi32 $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { return main (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_lib_gdi32_main=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_gdi32_main=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_lib_gdi32_main" >&5 echo "${ECHO_T}$ac_cv_lib_gdi32_main" >&6; } if test $ac_cv_lib_gdi32_main = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_LIBGDI32 1 _ACEOF LIBS="-lgdi32 $LIBS" fi # Solaris needs -lsocket, -lnsl and -lrt # Use AC_CHECK_FUNC first so that the library is only included if it's really needed # and not just because it's present. { echo "$as_me:$LINENO: checking for gethostbyname" >&5 echo $ECHO_N "checking for gethostbyname... $ECHO_C" >&6; } if test "${ac_cv_func_gethostbyname+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define gethostbyname to an innocuous variant, in case declares gethostbyname. For example, HP-UX 11i declares gettimeofday. */ #define gethostbyname innocuous_gethostbyname /* System header to define __stub macros and hopefully few prototypes, which can conflict with char gethostbyname (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef gethostbyname /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char gethostbyname (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_gethostbyname || defined __stub___gethostbyname choke me #endif int main () { return gethostbyname (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_func_gethostbyname=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_gethostbyname=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_func_gethostbyname" >&5 echo "${ECHO_T}$ac_cv_func_gethostbyname" >&6; } if test $ac_cv_func_gethostbyname = yes; then : else { echo "$as_me:$LINENO: checking for gethostbyname in -lnsl" >&5 echo $ECHO_N "checking for gethostbyname in -lnsl... $ECHO_C" >&6; } if test "${ac_cv_lib_nsl_gethostbyname+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lnsl $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char gethostbyname (); int main () { return gethostbyname (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_lib_nsl_gethostbyname=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_nsl_gethostbyname=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_lib_nsl_gethostbyname" >&5 echo "${ECHO_T}$ac_cv_lib_nsl_gethostbyname" >&6; } if test $ac_cv_lib_nsl_gethostbyname = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_LIBNSL 1 _ACEOF LIBS="-lnsl $LIBS" fi fi { echo "$as_me:$LINENO: checking for getsockopt" >&5 echo $ECHO_N "checking for getsockopt... $ECHO_C" >&6; } if test "${ac_cv_func_getsockopt+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define getsockopt to an innocuous variant, in case declares getsockopt. For example, HP-UX 11i declares gettimeofday. */ #define getsockopt innocuous_getsockopt /* System header to define __stub macros and hopefully few prototypes, which can conflict with char getsockopt (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef getsockopt /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char getsockopt (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_getsockopt || defined __stub___getsockopt choke me #endif int main () { return getsockopt (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_func_getsockopt=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_getsockopt=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_func_getsockopt" >&5 echo "${ECHO_T}$ac_cv_func_getsockopt" >&6; } if test $ac_cv_func_getsockopt = yes; then : else { echo "$as_me:$LINENO: checking for getsockopt in -lsocket" >&5 echo $ECHO_N "checking for getsockopt in -lsocket... $ECHO_C" >&6; } if test "${ac_cv_lib_socket_getsockopt+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsocket $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char getsockopt (); int main () { return getsockopt (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_lib_socket_getsockopt=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_socket_getsockopt=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_lib_socket_getsockopt" >&5 echo "${ECHO_T}$ac_cv_lib_socket_getsockopt" >&6; } if test $ac_cv_lib_socket_getsockopt = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_LIBSOCKET 1 _ACEOF LIBS="-lsocket $LIBS" fi fi { echo "$as_me:$LINENO: checking for sem_wait" >&5 echo $ECHO_N "checking for sem_wait... $ECHO_C" >&6; } if test "${ac_cv_func_sem_wait+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define sem_wait to an innocuous variant, in case declares sem_wait. For example, HP-UX 11i declares gettimeofday. */ #define sem_wait innocuous_sem_wait /* System header to define __stub macros and hopefully few prototypes, which can conflict with char sem_wait (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef sem_wait /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char sem_wait (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_sem_wait || defined __stub___sem_wait choke me #endif int main () { return sem_wait (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_func_sem_wait=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_sem_wait=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_func_sem_wait" >&5 echo "${ECHO_T}$ac_cv_func_sem_wait" >&6; } if test $ac_cv_func_sem_wait = yes; then : else { echo "$as_me:$LINENO: checking for sem_wait in -lrt" >&5 echo $ECHO_N "checking for sem_wait in -lrt... $ECHO_C" >&6; } if test "${ac_cv_lib_rt_sem_wait+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lrt $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char sem_wait (); int main () { return sem_wait (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_lib_rt_sem_wait=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_rt_sem_wait=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_lib_rt_sem_wait" >&5 echo "${ECHO_T}$ac_cv_lib_rt_sem_wait" >&6; } if test $ac_cv_lib_rt_sem_wait = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_LIBRT 1 _ACEOF LIBS="-lrt $LIBS" fi fi # Check for X and Motif headers and libraries { echo "$as_me:$LINENO: checking for X" >&5 echo $ECHO_N "checking for X... $ECHO_C" >&6; } # Check whether --with-x was given. if test "${with_x+set}" = set; then withval=$with_x; fi # $have_x is `yes', `no', `disabled', or empty when we do not yet know. if test "x$with_x" = xno; then # The user explicitly disabled X. have_x=disabled else case $x_includes,$x_libraries in #( *\'*) { { echo "$as_me:$LINENO: error: Cannot use X directory names containing '" >&5 echo "$as_me: error: Cannot use X directory names containing '" >&2;} { (exit 1); exit 1; }; };; #( *,NONE | NONE,*) if test "${ac_cv_have_x+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # One or both of the vars are not set, and there is no cached value. ac_x_includes=no ac_x_libraries=no rm -f -r conftest.dir if mkdir conftest.dir; then cd conftest.dir cat >Imakefile <<'_ACEOF' incroot: @echo incroot='${INCROOT}' usrlibdir: @echo usrlibdir='${USRLIBDIR}' libdir: @echo libdir='${LIBDIR}' _ACEOF if (export CC; ${XMKMF-xmkmf}) >/dev/null 2>/dev/null && test -f Makefile; then # GNU make sometimes prints "make[1]: Entering...", which would confuse us. for ac_var in incroot usrlibdir libdir; do eval "ac_im_$ac_var=\`\${MAKE-make} $ac_var 2>/dev/null | sed -n 's/^$ac_var=//p'\`" done # Open Windows xmkmf reportedly sets LIBDIR instead of USRLIBDIR. for ac_extension in a so sl; do if test ! -f "$ac_im_usrlibdir/libX11.$ac_extension" && test -f "$ac_im_libdir/libX11.$ac_extension"; then ac_im_usrlibdir=$ac_im_libdir; break fi done # Screen out bogus values from the imake configuration. They are # bogus both because they are the default anyway, and because # using them would break gcc on systems where it needs fixed includes. case $ac_im_incroot in /usr/include) ac_x_includes= ;; *) test -f "$ac_im_incroot/X11/Xos.h" && ac_x_includes=$ac_im_incroot;; esac case $ac_im_usrlibdir in /usr/lib | /lib) ;; *) test -d "$ac_im_usrlibdir" && ac_x_libraries=$ac_im_usrlibdir ;; esac fi cd .. rm -f -r conftest.dir fi # Standard set of common directories for X headers. # Check X11 before X11Rn because it is often a symlink to the current release. ac_x_header_dirs=' /usr/X11/include /usr/X11R6/include /usr/X11R5/include /usr/X11R4/include /usr/include/X11 /usr/include/X11R6 /usr/include/X11R5 /usr/include/X11R4 /usr/local/X11/include /usr/local/X11R6/include /usr/local/X11R5/include /usr/local/X11R4/include /usr/local/include/X11 /usr/local/include/X11R6 /usr/local/include/X11R5 /usr/local/include/X11R4 /usr/X386/include /usr/x386/include /usr/XFree86/include/X11 /usr/include /usr/local/include /usr/unsupported/include /usr/athena/include /usr/local/x11r5/include /usr/lpp/Xamples/include /usr/openwin/include /usr/openwin/share/include' if test "$ac_x_includes" = no; then # Guess where to find include files, by looking for Xlib.h. # First, try using that file with no special directory specified. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then # We can compile using X headers with no special include directory. ac_x_includes= else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 for ac_dir in $ac_x_header_dirs; do if test -r "$ac_dir/X11/Xlib.h"; then ac_x_includes=$ac_dir break fi done fi rm -f conftest.err conftest.$ac_ext fi # $ac_x_includes = no if test "$ac_x_libraries" = no; then # Check for the libraries. # See if we find them without any special options. # Don't add to $LIBS permanently. ac_save_LIBS=$LIBS LIBS="-lX11 $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { XrmInitialize () ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then LIBS=$ac_save_LIBS # We can link X programs with no special library path. ac_x_libraries= else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 LIBS=$ac_save_LIBS for ac_dir in `echo "$ac_x_includes $ac_x_header_dirs" | sed s/include/lib/g` do # Don't even attempt the hair of trying to link an X program! for ac_extension in a so sl; do if test -r "$ac_dir/libX11.$ac_extension"; then ac_x_libraries=$ac_dir break 2 fi done done fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext fi # $ac_x_libraries = no case $ac_x_includes,$ac_x_libraries in #( no,* | *,no | *\'*) # Didn't find X, or a directory has "'" in its name. ac_cv_have_x="have_x=no";; #( *) # Record where we found X for the cache. ac_cv_have_x="have_x=yes\ ac_x_includes='$ac_x_includes'\ ac_x_libraries='$ac_x_libraries'" esac fi ;; #( *) have_x=yes;; esac eval "$ac_cv_have_x" fi # $with_x != no if test "$have_x" != yes; then { echo "$as_me:$LINENO: result: $have_x" >&5 echo "${ECHO_T}$have_x" >&6; } no_x=yes else # If each of the values was on the command line, it overrides each guess. test "x$x_includes" = xNONE && x_includes=$ac_x_includes test "x$x_libraries" = xNONE && x_libraries=$ac_x_libraries # Update the cache value to reflect the command line values. ac_cv_have_x="have_x=yes\ ac_x_includes='$x_includes'\ ac_x_libraries='$x_libraries'" { echo "$as_me:$LINENO: result: libraries $x_libraries, headers $x_includes" >&5 echo "${ECHO_T}libraries $x_libraries, headers $x_includes" >&6; } fi if test "${with_x+set}" = set; then if test "$x_includes" != "" ; then if test "$x_includes" != "NONE" ; then CFLAGS="$CFLAGS -I$x_includes" CXXFLAGS="$CXXFLAGS -I$x_includes" CPPFLAGS="$CPPFLAGS -I$x_includes" fi fi if test "$x_libraries" != "" ; then if test "$x_libraries" != "NONE" ; then LIBS="-L$x_libraries $LIBS" fi fi { echo "$as_me:$LINENO: checking for XCreateGC in -lX11" >&5 echo $ECHO_N "checking for XCreateGC in -lX11... $ECHO_C" >&6; } if test "${ac_cv_lib_X11_XCreateGC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lX11 $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char XCreateGC (); int main () { return XCreateGC (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_lib_X11_XCreateGC=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_X11_XCreateGC=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_lib_X11_XCreateGC" >&5 echo "${ECHO_T}$ac_cv_lib_X11_XCreateGC" >&6; } if test $ac_cv_lib_X11_XCreateGC = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_LIBX11 1 _ACEOF LIBS="-lX11 $LIBS" fi { echo "$as_me:$LINENO: checking for XtMalloc in -lXt" >&5 echo $ECHO_N "checking for XtMalloc in -lXt... $ECHO_C" >&6; } if test "${ac_cv_lib_Xt_XtMalloc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lXt $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char XtMalloc (); int main () { return XtMalloc (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_lib_Xt_XtMalloc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_Xt_XtMalloc=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_lib_Xt_XtMalloc" >&5 echo "${ECHO_T}$ac_cv_lib_Xt_XtMalloc" >&6; } if test $ac_cv_lib_Xt_XtMalloc = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_LIBXT 1 _ACEOF LIBS="-lXt $LIBS" fi { echo "$as_me:$LINENO: checking for XextAddDisplay in -lXext" >&5 echo $ECHO_N "checking for XextAddDisplay in -lXext... $ECHO_C" >&6; } if test "${ac_cv_lib_Xext_XextAddDisplay+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lXext $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char XextAddDisplay (); int main () { return XextAddDisplay (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_lib_Xext_XextAddDisplay=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_Xext_XextAddDisplay=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_lib_Xext_XextAddDisplay" >&5 echo "${ECHO_T}$ac_cv_lib_Xext_XextAddDisplay" >&6; } if test $ac_cv_lib_Xext_XextAddDisplay = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_LIBXEXT 1 _ACEOF LIBS="-lXext $LIBS" fi if test "$xm_includes" != "" ; then if test "$xm_includes" != "NONE" ; then CFLAGS="$CFLAGS -I$xm_includes" CXXFLAGS="$CXXFLAGS -I$xm_includes" CPPFLAGS="$CPPFLAGS -I$xm_includes" fi fi if test "$xm_libraries" != "" ; then if test "$xm_libraries" != "NONE" ; then LIBS="-L$xm_libraries $LIBS" fi fi { echo "$as_me:$LINENO: checking for XmGetDestination in -lXm" >&5 echo $ECHO_N "checking for XmGetDestination in -lXm... $ECHO_C" >&6; } if test "${ac_cv_lib_Xm_XmGetDestination+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lXm $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char XmGetDestination (); int main () { return XmGetDestination (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_lib_Xm_XmGetDestination=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_Xm_XmGetDestination=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_lib_Xm_XmGetDestination" >&5 echo "${ECHO_T}$ac_cv_lib_Xm_XmGetDestination" >&6; } if test $ac_cv_lib_Xm_XmGetDestination = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_LIBXM 1 _ACEOF LIBS="-lXm $LIBS" fi fi # TODO: May need AC_PATH_XTRA for Solaris # Check for headers # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works # for constant arguments. Useless! { echo "$as_me:$LINENO: checking for working alloca.h" >&5 echo $ECHO_N "checking for working alloca.h... $ECHO_C" >&6; } if test "${ac_cv_working_alloca_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { char *p = (char *) alloca (2 * sizeof (int)); if (p) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_working_alloca_h=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_working_alloca_h=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_working_alloca_h" >&5 echo "${ECHO_T}$ac_cv_working_alloca_h" >&6; } if test $ac_cv_working_alloca_h = yes; then cat >>confdefs.h <<\_ACEOF #define HAVE_ALLOCA_H 1 _ACEOF fi { echo "$as_me:$LINENO: checking for alloca" >&5 echo $ECHO_N "checking for alloca... $ECHO_C" >&6; } if test "${ac_cv_func_alloca_works+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __GNUC__ # define alloca __builtin_alloca #else # ifdef _MSC_VER # include # define alloca _alloca # else # ifdef HAVE_ALLOCA_H # include # else # ifdef _AIX #pragma alloca # else # ifndef alloca /* predefined by HP cc +Olibcalls */ char *alloca (); # endif # endif # endif # endif #endif int main () { char *p = (char *) alloca (1); if (p) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_func_alloca_works=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_alloca_works=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_func_alloca_works" >&5 echo "${ECHO_T}$ac_cv_func_alloca_works" >&6; } if test $ac_cv_func_alloca_works = yes; then cat >>confdefs.h <<\_ACEOF #define HAVE_ALLOCA 1 _ACEOF else # The SVR3 libPW and SVR4 libucb both contain incompatible functions # that cause trouble. Some versions do not even contain alloca or # contain a buggy version. If you still want to use their alloca, # use ar to extract alloca.o from them instead of compiling alloca.c. ALLOCA=\${LIBOBJDIR}alloca.$ac_objext cat >>confdefs.h <<\_ACEOF #define C_ALLOCA 1 _ACEOF { echo "$as_me:$LINENO: checking whether \`alloca.c' needs Cray hooks" >&5 echo $ECHO_N "checking whether \`alloca.c' needs Cray hooks... $ECHO_C" >&6; } if test "${ac_cv_os_cray+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #if defined CRAY && ! defined CRAY2 webecray #else wenotbecray #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "webecray" >/dev/null 2>&1; then ac_cv_os_cray=yes else ac_cv_os_cray=no fi rm -f conftest* fi { echo "$as_me:$LINENO: result: $ac_cv_os_cray" >&5 echo "${ECHO_T}$ac_cv_os_cray" >&6; } if test $ac_cv_os_cray = yes; then for ac_func in _getb67 GETB67 getb67; do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` { echo "$as_me:$LINENO: checking for $ac_func" >&5 echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define $ac_func to an innocuous variant, in case declares $ac_func. For example, HP-UX 11i declares gettimeofday. */ #define $ac_func innocuous_$ac_func /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $ac_func /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $ac_func (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$ac_func || defined __stub___$ac_func choke me #endif int main () { return $ac_func (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then eval "$as_ac_var=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_var=no" fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext fi ac_res=`eval echo '${'$as_ac_var'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } if test `eval echo '${'$as_ac_var'}'` = yes; then cat >>confdefs.h <<_ACEOF #define CRAY_STACKSEG_END $ac_func _ACEOF break fi done fi { echo "$as_me:$LINENO: checking stack direction for C alloca" >&5 echo $ECHO_N "checking stack direction for C alloca... $ECHO_C" >&6; } if test "${ac_cv_c_stack_direction+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then ac_cv_c_stack_direction=0 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int find_stack_direction () { static char *addr = 0; auto char dummy; if (addr == 0) { addr = &dummy; return find_stack_direction (); } else return (&dummy > addr) ? 1 : -1; } int main () { return find_stack_direction () < 0; } _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_c_stack_direction=1 else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_c_stack_direction=-1 fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi { echo "$as_me:$LINENO: result: $ac_cv_c_stack_direction" >&5 echo "${ECHO_T}$ac_cv_c_stack_direction" >&6; } cat >>confdefs.h <<_ACEOF #define STACK_DIRECTION $ac_cv_c_stack_direction _ACEOF fi ac_header_dirent=no for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do as_ac_Header=`echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh` { echo "$as_me:$LINENO: checking for $ac_hdr that defines DIR" >&5 echo $ECHO_N "checking for $ac_hdr that defines DIR... $ECHO_C" >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include <$ac_hdr> int main () { if ((DIR *) 0) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then eval "$as_ac_Header=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_Header=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi ac_res=`eval echo '${'$as_ac_Header'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_hdr" | $as_tr_cpp` 1 _ACEOF ac_header_dirent=$ac_hdr; break fi done # Two versions of opendir et al. are in -ldir and -lx on SCO Xenix. if test $ac_header_dirent = dirent.h; then { echo "$as_me:$LINENO: checking for library containing opendir" >&5 echo $ECHO_N "checking for library containing opendir... $ECHO_C" >&6; } if test "${ac_cv_search_opendir+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_func_search_save_LIBS=$LIBS cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char opendir (); int main () { return opendir (); ; return 0; } _ACEOF for ac_lib in '' dir; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_search_opendir=$ac_res else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext if test "${ac_cv_search_opendir+set}" = set; then break fi done if test "${ac_cv_search_opendir+set}" = set; then : else ac_cv_search_opendir=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_search_opendir" >&5 echo "${ECHO_T}$ac_cv_search_opendir" >&6; } ac_res=$ac_cv_search_opendir if test "$ac_res" != no; then test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi else { echo "$as_me:$LINENO: checking for library containing opendir" >&5 echo $ECHO_N "checking for library containing opendir... $ECHO_C" >&6; } if test "${ac_cv_search_opendir+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_func_search_save_LIBS=$LIBS cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char opendir (); int main () { return opendir (); ; return 0; } _ACEOF for ac_lib in '' x; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_search_opendir=$ac_res else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext if test "${ac_cv_search_opendir+set}" = set; then break fi done if test "${ac_cv_search_opendir+set}" = set; then : else ac_cv_search_opendir=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_search_opendir" >&5 echo "${ECHO_T}$ac_cv_search_opendir" >&6; } ac_res=$ac_cv_search_opendir if test "$ac_res" != no; then test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi fi { echo "$as_me:$LINENO: checking for ANSI C header files" >&5 echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6; } if test "${ac_cv_header_stdc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_header_stdc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi fi { echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 echo "${ECHO_T}$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then cat >>confdefs.h <<\_ACEOF #define STDC_HEADERS 1 _ACEOF fi { echo "$as_me:$LINENO: checking for sys/wait.h that is POSIX.1 compatible" >&5 echo $ECHO_N "checking for sys/wait.h that is POSIX.1 compatible... $ECHO_C" >&6; } if test "${ac_cv_header_sys_wait_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #ifndef WEXITSTATUS # define WEXITSTATUS(stat_val) ((unsigned int) (stat_val) >> 8) #endif #ifndef WIFEXITED # define WIFEXITED(stat_val) (((stat_val) & 255) == 0) #endif int main () { int s; wait (&s); s = WIFEXITED (s) ? WEXITSTATUS (s) : 1; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_header_sys_wait_h=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_header_sys_wait_h=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_header_sys_wait_h" >&5 echo "${ECHO_T}$ac_cv_header_sys_wait_h" >&6; } if test $ac_cv_header_sys_wait_h = yes; then cat >>confdefs.h <<\_ACEOF #define HAVE_SYS_WAIT_H 1 _ACEOF fi for ac_header in stdio.h time.h fcntl.h float.h limits.h locale.h malloc.h netdb.h netinet/in.h stddef.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then { echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi ac_res=`eval echo '${'$as_ac_Header'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } else # Is the header compilable? { echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6; } # Is the header present? { echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## --------------------------------------- ## ## Report this to polyml AT polyml DOT org ## ## --------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi ac_res=`eval echo '${'$as_ac_Header'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in stdlib.h string.h sys/file.h sys/ioctl.h sys/param.h sys/socket.h sys/systeminfo.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then { echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi ac_res=`eval echo '${'$as_ac_Header'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } else # Is the header compilable? { echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6; } # Is the header present? { echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## --------------------------------------- ## ## Report this to polyml AT polyml DOT org ## ## --------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi ac_res=`eval echo '${'$as_ac_Header'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in sys/time.h unistd.h values.h dlfcn.h signal.h ucontext.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then { echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi ac_res=`eval echo '${'$as_ac_Header'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } else # Is the header compilable? { echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6; } # Is the header present? { echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## --------------------------------------- ## ## Report this to polyml AT polyml DOT org ## ## --------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi ac_res=`eval echo '${'$as_ac_Header'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in assert.h ctype.h direct.h errno.h excpt.h fenv.h fpu_control.h grp.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then { echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi ac_res=`eval echo '${'$as_ac_Header'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } else # Is the header compilable? { echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6; } # Is the header present? { echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## --------------------------------------- ## ## Report this to polyml AT polyml DOT org ## ## --------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi ac_res=`eval echo '${'$as_ac_Header'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in ieeefp.h io.h math.h memory.h netinet/tcp.h poll.h pwd.h siginfo.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then { echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi ac_res=`eval echo '${'$as_ac_Header'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } else # Is the header compilable? { echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6; } # Is the header present? { echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## --------------------------------------- ## ## Report this to polyml AT polyml DOT org ## ## --------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi ac_res=`eval echo '${'$as_ac_Header'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in stdarg.h sys/errno.h sys/filio.h sys/mman.h sys/resource.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then { echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi ac_res=`eval echo '${'$as_ac_Header'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } else # Is the header compilable? { echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6; } # Is the header present? { echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## --------------------------------------- ## ## Report this to polyml AT polyml DOT org ## ## --------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi ac_res=`eval echo '${'$as_ac_Header'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in sys/signal.h sys/sockio.h sys/stat.h sys/termios.h sys/times.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then { echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi ac_res=`eval echo '${'$as_ac_Header'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } else # Is the header compilable? { echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6; } # Is the header present? { echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## --------------------------------------- ## ## Report this to polyml AT polyml DOT org ## ## --------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi ac_res=`eval echo '${'$as_ac_Header'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in sys/types.h sys/uio.h sys/un.h sys/utsname.h sys/select.h sys/sysctl.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then { echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi ac_res=`eval echo '${'$as_ac_Header'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } else # Is the header compilable? { echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6; } # Is the header present? { echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## --------------------------------------- ## ## Report this to polyml AT polyml DOT org ## ## --------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi ac_res=`eval echo '${'$as_ac_Header'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in sys/elf_SPARC.h sys/elf_386.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then { echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi ac_res=`eval echo '${'$as_ac_Header'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } else # Is the header compilable? { echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6; } # Is the header present? { echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## --------------------------------------- ## ## Report this to polyml AT polyml DOT org ## ## --------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi ac_res=`eval echo '${'$as_ac_Header'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in windows.h tchar.h pthread.h semaphore.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then { echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi ac_res=`eval echo '${'$as_ac_Header'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } else # Is the header compilable? { echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6; } # Is the header present? { echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## --------------------------------------- ## ## Report this to polyml AT polyml DOT org ## ## --------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi ac_res=`eval echo '${'$as_ac_Header'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done # Only check for the X headers if the user said --with-x. if test "${with_x+set}" = set; then for ac_header in X11/Xlib.h Xm/Xm.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then { echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi ac_res=`eval echo '${'$as_ac_Header'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } else # Is the header compilable? { echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6; } # Is the header present? { echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## --------------------------------------- ## ## Report this to polyml AT polyml DOT org ## ## --------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi ac_res=`eval echo '${'$as_ac_Header'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done fi # Find out which type of object code exporter to use. # If we have winnt use PECOFF. This really only applies to cygwin here. # If we have elf.h use ELF. # If we have mach-o/reloc.h use Mach-O # Otherwise use the C source code exporter. { echo "$as_me:$LINENO: checking for IMAGE_FILE_HEADER" >&5 echo $ECHO_N "checking for IMAGE_FILE_HEADER... $ECHO_C" >&6; } if test "${ac_cv_type_IMAGE_FILE_HEADER+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include typedef IMAGE_FILE_HEADER ac__type_new_; int main () { if ((ac__type_new_ *) 0) return 0; if (sizeof (ac__type_new_)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_type_IMAGE_FILE_HEADER=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_IMAGE_FILE_HEADER=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_type_IMAGE_FILE_HEADER" >&5 echo "${ECHO_T}$ac_cv_type_IMAGE_FILE_HEADER" >&6; } if test $ac_cv_type_IMAGE_FILE_HEADER = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_IMAGE_FILE_HEADER 1 _ACEOF cat >>confdefs.h <<\_ACEOF #define HAVE_PECOFF _ACEOF polyexport=pecoff else if test "${ac_cv_header_elf_h+set}" = set; then { echo "$as_me:$LINENO: checking for elf.h" >&5 echo $ECHO_N "checking for elf.h... $ECHO_C" >&6; } if test "${ac_cv_header_elf_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi { echo "$as_me:$LINENO: result: $ac_cv_header_elf_h" >&5 echo "${ECHO_T}$ac_cv_header_elf_h" >&6; } else # Is the header compilable? { echo "$as_me:$LINENO: checking elf.h usability" >&5 echo $ECHO_N "checking elf.h usability... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6; } # Is the header present? { echo "$as_me:$LINENO: checking elf.h presence" >&5 echo $ECHO_N "checking elf.h presence... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: elf.h: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: elf.h: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: elf.h: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: elf.h: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: elf.h: present but cannot be compiled" >&5 echo "$as_me: WARNING: elf.h: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: elf.h: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: elf.h: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: elf.h: see the Autoconf documentation" >&5 echo "$as_me: WARNING: elf.h: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: elf.h: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: elf.h: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: elf.h: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: elf.h: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: elf.h: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: elf.h: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## --------------------------------------- ## ## Report this to polyml AT polyml DOT org ## ## --------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { echo "$as_me:$LINENO: checking for elf.h" >&5 echo $ECHO_N "checking for elf.h... $ECHO_C" >&6; } if test "${ac_cv_header_elf_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_header_elf_h=$ac_header_preproc fi { echo "$as_me:$LINENO: result: $ac_cv_header_elf_h" >&5 echo "${ECHO_T}$ac_cv_header_elf_h" >&6; } fi if test $ac_cv_header_elf_h = yes; then cat >>confdefs.h <<\_ACEOF #define HAVE_ELF_H _ACEOF polyexport=elf else if test "${ac_cv_header_mach_o_reloc_h+set}" = set; then { echo "$as_me:$LINENO: checking for mach-o/reloc.h" >&5 echo $ECHO_N "checking for mach-o/reloc.h... $ECHO_C" >&6; } if test "${ac_cv_header_mach_o_reloc_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi { echo "$as_me:$LINENO: result: $ac_cv_header_mach_o_reloc_h" >&5 echo "${ECHO_T}$ac_cv_header_mach_o_reloc_h" >&6; } else # Is the header compilable? { echo "$as_me:$LINENO: checking mach-o/reloc.h usability" >&5 echo $ECHO_N "checking mach-o/reloc.h usability... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6; } # Is the header present? { echo "$as_me:$LINENO: checking mach-o/reloc.h presence" >&5 echo $ECHO_N "checking mach-o/reloc.h presence... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: mach-o/reloc.h: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: mach-o/reloc.h: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: mach-o/reloc.h: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: mach-o/reloc.h: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: mach-o/reloc.h: present but cannot be compiled" >&5 echo "$as_me: WARNING: mach-o/reloc.h: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: mach-o/reloc.h: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: mach-o/reloc.h: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: mach-o/reloc.h: see the Autoconf documentation" >&5 echo "$as_me: WARNING: mach-o/reloc.h: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: mach-o/reloc.h: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: mach-o/reloc.h: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: mach-o/reloc.h: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: mach-o/reloc.h: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: mach-o/reloc.h: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: mach-o/reloc.h: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## --------------------------------------- ## ## Report this to polyml AT polyml DOT org ## ## --------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { echo "$as_me:$LINENO: checking for mach-o/reloc.h" >&5 echo $ECHO_N "checking for mach-o/reloc.h... $ECHO_C" >&6; } if test "${ac_cv_header_mach_o_reloc_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_header_mach_o_reloc_h=$ac_header_preproc fi { echo "$as_me:$LINENO: result: $ac_cv_header_mach_o_reloc_h" >&5 echo "${ECHO_T}$ac_cv_header_mach_o_reloc_h" >&6; } fi if test $ac_cv_header_mach_o_reloc_h = yes; then cat >>confdefs.h <<\_ACEOF #define HAVE_MACH_O_RELOC_H _ACEOF polyexport=macho fi fi fi if test "$polyexport" = pecoff; then EXPPECOFF_TRUE= EXPPECOFF_FALSE='#' else EXPPECOFF_TRUE='#' EXPPECOFF_FALSE= fi if test "$polyexport" = elf; then EXPELF_TRUE= EXPELF_FALSE='#' else EXPELF_TRUE='#' EXPELF_FALSE= fi if test "$polyexport" = macho; then EXPMACHO_TRUE= EXPMACHO_FALSE='#' else EXPMACHO_TRUE='#' EXPMACHO_FALSE= fi # Checks for typedefs, structures, and compiler characteristics. { echo "$as_me:$LINENO: checking for stdbool.h that conforms to C99" >&5 echo $ECHO_N "checking for stdbool.h that conforms to C99... $ECHO_C" >&6; } if test "${ac_cv_header_stdbool_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #ifndef bool "error: bool is not defined" #endif #ifndef false "error: false is not defined" #endif #if false "error: false is not 0" #endif #ifndef true "error: true is not defined" #endif #if true != 1 "error: true is not 1" #endif #ifndef __bool_true_false_are_defined "error: __bool_true_false_are_defined is not defined" #endif struct s { _Bool s: 1; _Bool t; } s; char a[true == 1 ? 1 : -1]; char b[false == 0 ? 1 : -1]; char c[__bool_true_false_are_defined == 1 ? 1 : -1]; char d[(bool) 0.5 == true ? 1 : -1]; bool e = &s; char f[(_Bool) 0.0 == false ? 1 : -1]; char g[true]; char h[sizeof (_Bool)]; char i[sizeof s.t]; enum { j = false, k = true, l = false * true, m = true * 256 }; _Bool n[m]; char o[sizeof n == m * sizeof n[0] ? 1 : -1]; char p[-1 - (_Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1]; # if defined __xlc__ || defined __GNUC__ /* Catch a bug in IBM AIX xlc compiler version 6.0.0.0 reported by James Lemley on 2005-10-05; see http://lists.gnu.org/archive/html/bug-coreutils/2005-10/msg00086.html This test is not quite right, since xlc is allowed to reject this program, as the initializer for xlcbug is not one of the forms that C requires support for. However, doing the test right would require a runtime test, and that would make cross-compilation harder. Let us hope that IBM fixes the xlc bug, and also adds support for this kind of constant expression. In the meantime, this test will reject xlc, which is OK, since our stdbool.h substitute should suffice. We also test this with GCC, where it should work, to detect more quickly whether someone messes up the test in the future. */ char digs[] = "0123456789"; int xlcbug = 1 / (&(digs + 5)[-2 + (bool) 1] == &digs[4] ? 1 : -1); # endif /* Catch a bug in an HP-UX C compiler. See http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html */ _Bool q = true; _Bool *pq = &q; int main () { *pq |= q; *pq |= ! q; /* Refer to every declared value, to avoid compiler optimizations. */ return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + !!l + !m + !n + !o + !p + !q + !pq); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_header_stdbool_h=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_header_stdbool_h=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_header_stdbool_h" >&5 echo "${ECHO_T}$ac_cv_header_stdbool_h" >&6; } { echo "$as_me:$LINENO: checking for _Bool" >&5 echo $ECHO_N "checking for _Bool... $ECHO_C" >&6; } if test "${ac_cv_type__Bool+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default typedef _Bool ac__type_new_; int main () { if ((ac__type_new_ *) 0) return 0; if (sizeof (ac__type_new_)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_type__Bool=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type__Bool=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_type__Bool" >&5 echo "${ECHO_T}$ac_cv_type__Bool" >&6; } if test $ac_cv_type__Bool = yes; then cat >>confdefs.h <<_ACEOF #define HAVE__BOOL 1 _ACEOF fi if test $ac_cv_header_stdbool_h = yes; then cat >>confdefs.h <<\_ACEOF #define HAVE_STDBOOL_H 1 _ACEOF fi { echo "$as_me:$LINENO: checking for an ANSI C-conforming const" >&5 echo $ECHO_N "checking for an ANSI C-conforming const... $ECHO_C" >&6; } if test "${ac_cv_c_const+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { /* FIXME: Include the comments suggested by Paul. */ #ifndef __cplusplus /* Ultrix mips cc rejects this. */ typedef int charset[2]; const charset cs; /* SunOS 4.1.1 cc rejects this. */ char const *const *pcpcc; char **ppc; /* NEC SVR4.0.2 mips cc rejects this. */ struct point {int x, y;}; static struct point const zero = {0,0}; /* AIX XL C 1.02.0.0 rejects this. It does not let you subtract one const X* pointer from another in an arm of an if-expression whose if-part is not a constant expression */ const char *g = "string"; pcpcc = &g + (g ? g-g : 0); /* HPUX 7.0 cc rejects these. */ ++pcpcc; ppc = (char**) pcpcc; pcpcc = (char const *const *) ppc; { /* SCO 3.2v4 cc rejects this. */ char *t; char const *s = 0 ? (char *) 0 : (char const *) 0; *t++ = 0; if (s) return 0; } { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ int x[] = {25, 17}; const int *foo = &x[0]; ++foo; } { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ typedef const int *iptr; iptr p = 0; ++p; } { /* AIX XL C 1.02.0.0 rejects this saying "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ struct s { int j; const int *ap[3]; }; struct s *b; b->j = 5; } { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ const int foo = 10; if (!foo) return 0; } return !cs[0] && !zero.x; #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_c_const=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_c_const=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_c_const" >&5 echo "${ECHO_T}$ac_cv_c_const" >&6; } if test $ac_cv_c_const = no; then cat >>confdefs.h <<\_ACEOF #define const _ACEOF fi { echo "$as_me:$LINENO: checking for uid_t in sys/types.h" >&5 echo $ECHO_N "checking for uid_t in sys/types.h... $ECHO_C" >&6; } if test "${ac_cv_type_uid_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "uid_t" >/dev/null 2>&1; then ac_cv_type_uid_t=yes else ac_cv_type_uid_t=no fi rm -f conftest* fi { echo "$as_me:$LINENO: result: $ac_cv_type_uid_t" >&5 echo "${ECHO_T}$ac_cv_type_uid_t" >&6; } if test $ac_cv_type_uid_t = no; then cat >>confdefs.h <<\_ACEOF #define uid_t int _ACEOF cat >>confdefs.h <<\_ACEOF #define gid_t int _ACEOF fi { echo "$as_me:$LINENO: checking for mode_t" >&5 echo $ECHO_N "checking for mode_t... $ECHO_C" >&6; } if test "${ac_cv_type_mode_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default typedef mode_t ac__type_new_; int main () { if ((ac__type_new_ *) 0) return 0; if (sizeof (ac__type_new_)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_type_mode_t=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_mode_t=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_type_mode_t" >&5 echo "${ECHO_T}$ac_cv_type_mode_t" >&6; } if test $ac_cv_type_mode_t = yes; then : else cat >>confdefs.h <<_ACEOF #define mode_t int _ACEOF fi { echo "$as_me:$LINENO: checking for off_t" >&5 echo $ECHO_N "checking for off_t... $ECHO_C" >&6; } if test "${ac_cv_type_off_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default typedef off_t ac__type_new_; int main () { if ((ac__type_new_ *) 0) return 0; if (sizeof (ac__type_new_)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_type_off_t=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_off_t=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_type_off_t" >&5 echo "${ECHO_T}$ac_cv_type_off_t" >&6; } if test $ac_cv_type_off_t = yes; then : else cat >>confdefs.h <<_ACEOF #define off_t long int _ACEOF fi { echo "$as_me:$LINENO: checking for pid_t" >&5 echo $ECHO_N "checking for pid_t... $ECHO_C" >&6; } if test "${ac_cv_type_pid_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default typedef pid_t ac__type_new_; int main () { if ((ac__type_new_ *) 0) return 0; if (sizeof (ac__type_new_)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_type_pid_t=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_pid_t=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_type_pid_t" >&5 echo "${ECHO_T}$ac_cv_type_pid_t" >&6; } if test $ac_cv_type_pid_t = yes; then : else cat >>confdefs.h <<_ACEOF #define pid_t int _ACEOF fi { echo "$as_me:$LINENO: checking for size_t" >&5 echo $ECHO_N "checking for size_t... $ECHO_C" >&6; } if test "${ac_cv_type_size_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default typedef size_t ac__type_new_; int main () { if ((ac__type_new_ *) 0) return 0; if (sizeof (ac__type_new_)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_type_size_t=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_size_t=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_type_size_t" >&5 echo "${ECHO_T}$ac_cv_type_size_t" >&6; } if test $ac_cv_type_size_t = yes; then : else cat >>confdefs.h <<_ACEOF #define size_t unsigned int _ACEOF fi { echo "$as_me:$LINENO: checking whether time.h and sys/time.h may both be included" >&5 echo $ECHO_N "checking whether time.h and sys/time.h may both be included... $ECHO_C" >&6; } if test "${ac_cv_header_time+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include int main () { if ((struct tm *) 0) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_header_time=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_header_time=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_header_time" >&5 echo "${ECHO_T}$ac_cv_header_time" >&6; } if test $ac_cv_header_time = yes; then cat >>confdefs.h <<\_ACEOF #define TIME_WITH_SYS_TIME 1 _ACEOF fi { echo "$as_me:$LINENO: checking whether struct tm is in sys/time.h or time.h" >&5 echo $ECHO_N "checking whether struct tm is in sys/time.h or time.h... $ECHO_C" >&6; } if test "${ac_cv_struct_tm+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include int main () { struct tm tm; int *p = &tm.tm_sec; return !p; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_struct_tm=time.h else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_struct_tm=sys/time.h fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_struct_tm" >&5 echo "${ECHO_T}$ac_cv_struct_tm" >&6; } if test $ac_cv_struct_tm = sys/time.h; then cat >>confdefs.h <<\_ACEOF #define TM_IN_SYS_TIME 1 _ACEOF fi # Mac OS X, at any rate, needs signal.h to be included first. { echo "$as_me:$LINENO: checking for ucontext_t" >&5 echo $ECHO_N "checking for ucontext_t... $ECHO_C" >&6; } if test "${ac_cv_type_ucontext_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include "signal.h" #include "ucontext.h" typedef ucontext_t ac__type_new_; int main () { if ((ac__type_new_ *) 0) return 0; if (sizeof (ac__type_new_)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_type_ucontext_t=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_ucontext_t=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_type_ucontext_t" >&5 echo "${ECHO_T}$ac_cv_type_ucontext_t" >&6; } if test $ac_cv_type_ucontext_t = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_UCONTEXT_T 1 _ACEOF fi { echo "$as_me:$LINENO: checking for struct sigcontext" >&5 echo $ECHO_N "checking for struct sigcontext... $ECHO_C" >&6; } if test "${ac_cv_type_struct_sigcontext+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include "signal.h" typedef struct sigcontext ac__type_new_; int main () { if ((ac__type_new_ *) 0) return 0; if (sizeof (ac__type_new_)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_type_struct_sigcontext=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_struct_sigcontext=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_type_struct_sigcontext" >&5 echo "${ECHO_T}$ac_cv_type_struct_sigcontext" >&6; } if test $ac_cv_type_struct_sigcontext = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_STRUCT_SIGCONTEXT 1 _ACEOF fi { echo "$as_me:$LINENO: checking for stack_t" >&5 echo $ECHO_N "checking for stack_t... $ECHO_C" >&6; } if test "${ac_cv_type_stack_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include "signal.h" typedef stack_t ac__type_new_; int main () { if ((ac__type_new_ *) 0) return 0; if (sizeof (ac__type_new_)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_type_stack_t=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_stack_t=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_type_stack_t" >&5 echo "${ECHO_T}$ac_cv_type_stack_t" >&6; } if test $ac_cv_type_stack_t = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_STACK_T 1 _ACEOF fi { echo "$as_me:$LINENO: checking for sighandler_t" >&5 echo $ECHO_N "checking for sighandler_t... $ECHO_C" >&6; } if test "${ac_cv_type_sighandler_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include "signal.h" typedef sighandler_t ac__type_new_; int main () { if ((ac__type_new_ *) 0) return 0; if (sizeof (ac__type_new_)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_type_sighandler_t=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_sighandler_t=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_type_sighandler_t" >&5 echo "${ECHO_T}$ac_cv_type_sighandler_t" >&6; } if test $ac_cv_type_sighandler_t = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_SIGHANDLER_T 1 _ACEOF fi { echo "$as_me:$LINENO: checking for sig_t" >&5 echo $ECHO_N "checking for sig_t... $ECHO_C" >&6; } if test "${ac_cv_type_sig_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include "signal.h" typedef sig_t ac__type_new_; int main () { if ((ac__type_new_ *) 0) return 0; if (sizeof (ac__type_new_)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_type_sig_t=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_sig_t=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_type_sig_t" >&5 echo "${ECHO_T}$ac_cv_type_sig_t" >&6; } if test $ac_cv_type_sig_t = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_SIG_T 1 _ACEOF fi { echo "$as_me:$LINENO: checking for socklen_t" >&5 echo $ECHO_N "checking for socklen_t... $ECHO_C" >&6; } if test "${ac_cv_type_socklen_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include "sys/types.h" #include "sys/socket.h" typedef socklen_t ac__type_new_; int main () { if ((ac__type_new_ *) 0) return 0; if (sizeof (ac__type_new_)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_type_socklen_t=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_socklen_t=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_type_socklen_t" >&5 echo "${ECHO_T}$ac_cv_type_socklen_t" >&6; } if test $ac_cv_type_socklen_t = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_SOCKLEN_T 1 _ACEOF fi { echo "$as_me:$LINENO: checking for long long" >&5 echo $ECHO_N "checking for long long... $ECHO_C" >&6; } if test "${ac_cv_type_long_long+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default typedef long long ac__type_new_; int main () { if ((ac__type_new_ *) 0) return 0; if (sizeof (ac__type_new_)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_type_long_long=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_long_long=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_type_long_long" >&5 echo "${ECHO_T}$ac_cv_type_long_long" >&6; } if test $ac_cv_type_long_long = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_LONG_LONG 1 _ACEOF fi { echo "$as_me:$LINENO: checking for void*" >&5 echo $ECHO_N "checking for void*... $ECHO_C" >&6; } if test "${ac_cv_type_voidp+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default typedef void* ac__type_new_; int main () { if ((ac__type_new_ *) 0) return 0; if (sizeof (ac__type_new_)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_type_voidp=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_voidp=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_type_voidp" >&5 echo "${ECHO_T}$ac_cv_type_voidp" >&6; } # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { echo "$as_me:$LINENO: checking size of void*" >&5 echo $ECHO_N "checking size of void*... $ECHO_C" >&6; } if test "${ac_cv_sizeof_voidp+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default typedef void* ac__type_sizeof_; int main () { static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_lo=0 ac_mid=0 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default typedef void* ac__type_sizeof_; int main () { static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_hi=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr $ac_mid + 1` if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid + 1` fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default typedef void* ac__type_sizeof_; int main () { static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) < 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_hi=-1 ac_mid=-1 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default typedef void* ac__type_sizeof_; int main () { static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_lo=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_hi=`expr '(' $ac_mid ')' - 1` if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid` fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo= ac_hi= fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default typedef void* ac__type_sizeof_; int main () { static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_hi=$ac_mid else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr '(' $ac_mid ')' + 1` fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done case $ac_lo in ?*) ac_cv_sizeof_voidp=$ac_lo;; '') if test "$ac_cv_type_voidp" = yes; then { { echo "$as_me:$LINENO: error: cannot compute sizeof (void*) See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (void*) See \`config.log' for more details." >&2;} { (exit 77); exit 77; }; } else ac_cv_sizeof_voidp=0 fi ;; esac else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default typedef void* ac__type_sizeof_; static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); } static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); } #include #include int main () { FILE *f = fopen ("conftest.val", "w"); if (! f) return 1; if (((long int) (sizeof (ac__type_sizeof_))) < 0) { long int i = longval (); if (i != ((long int) (sizeof (ac__type_sizeof_)))) return 1; fprintf (f, "%ld\n", i); } else { unsigned long int i = ulongval (); if (i != ((long int) (sizeof (ac__type_sizeof_)))) return 1; fprintf (f, "%lu\n", i); } return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_sizeof_voidp=`cat conftest.val` else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) if test "$ac_cv_type_voidp" = yes; then { { echo "$as_me:$LINENO: error: cannot compute sizeof (void*) See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (void*) See \`config.log' for more details." >&2;} { (exit 77); exit 77; }; } else ac_cv_sizeof_voidp=0 fi fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi rm -f conftest.val fi { echo "$as_me:$LINENO: result: $ac_cv_sizeof_voidp" >&5 echo "${ECHO_T}$ac_cv_sizeof_voidp" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_VOIDP $ac_cv_sizeof_voidp _ACEOF { echo "$as_me:$LINENO: checking for long" >&5 echo $ECHO_N "checking for long... $ECHO_C" >&6; } if test "${ac_cv_type_long+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default typedef long ac__type_new_; int main () { if ((ac__type_new_ *) 0) return 0; if (sizeof (ac__type_new_)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_type_long=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_long=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_type_long" >&5 echo "${ECHO_T}$ac_cv_type_long" >&6; } # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { echo "$as_me:$LINENO: checking size of long" >&5 echo $ECHO_N "checking size of long... $ECHO_C" >&6; } if test "${ac_cv_sizeof_long+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default typedef long ac__type_sizeof_; int main () { static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_lo=0 ac_mid=0 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default typedef long ac__type_sizeof_; int main () { static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_hi=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr $ac_mid + 1` if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid + 1` fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default typedef long ac__type_sizeof_; int main () { static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) < 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_hi=-1 ac_mid=-1 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default typedef long ac__type_sizeof_; int main () { static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_lo=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_hi=`expr '(' $ac_mid ')' - 1` if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid` fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo= ac_hi= fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default typedef long ac__type_sizeof_; int main () { static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_hi=$ac_mid else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr '(' $ac_mid ')' + 1` fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done case $ac_lo in ?*) ac_cv_sizeof_long=$ac_lo;; '') if test "$ac_cv_type_long" = yes; then { { echo "$as_me:$LINENO: error: cannot compute sizeof (long) See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (long) See \`config.log' for more details." >&2;} { (exit 77); exit 77; }; } else ac_cv_sizeof_long=0 fi ;; esac else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default typedef long ac__type_sizeof_; static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); } static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); } #include #include int main () { FILE *f = fopen ("conftest.val", "w"); if (! f) return 1; if (((long int) (sizeof (ac__type_sizeof_))) < 0) { long int i = longval (); if (i != ((long int) (sizeof (ac__type_sizeof_)))) return 1; fprintf (f, "%ld\n", i); } else { unsigned long int i = ulongval (); if (i != ((long int) (sizeof (ac__type_sizeof_)))) return 1; fprintf (f, "%lu\n", i); } return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_sizeof_long=`cat conftest.val` else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) if test "$ac_cv_type_long" = yes; then { { echo "$as_me:$LINENO: error: cannot compute sizeof (long) See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (long) See \`config.log' for more details." >&2;} { (exit 77); exit 77; }; } else ac_cv_sizeof_long=0 fi fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi rm -f conftest.val fi { echo "$as_me:$LINENO: result: $ac_cv_sizeof_long" >&5 echo "${ECHO_T}$ac_cv_sizeof_long" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_LONG $ac_cv_sizeof_long _ACEOF # Checks for library functions. for ac_header in unistd.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then { echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi ac_res=`eval echo '${'$as_ac_Header'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } else # Is the header compilable? { echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6; } # Is the header present? { echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## --------------------------------------- ## ## Report this to polyml AT polyml DOT org ## ## --------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi ac_res=`eval echo '${'$as_ac_Header'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done { echo "$as_me:$LINENO: checking for working chown" >&5 echo $ECHO_N "checking for working chown... $ECHO_C" >&6; } if test "${ac_cv_func_chown_works+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then ac_cv_func_chown_works=no else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include int main () { char *f = "conftest.chown"; struct stat before, after; if (creat (f, 0600) < 0) return 1; if (stat (f, &before) < 0) return 1; if (chown (f, (uid_t) -1, (gid_t) -1) == -1) return 1; if (stat (f, &after) < 0) return 1; return ! (before.st_uid == after.st_uid && before.st_gid == after.st_gid); ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_chown_works=yes else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_func_chown_works=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi rm -f conftest.chown fi { echo "$as_me:$LINENO: result: $ac_cv_func_chown_works" >&5 echo "${ECHO_T}$ac_cv_func_chown_works" >&6; } if test $ac_cv_func_chown_works = yes; then cat >>confdefs.h <<\_ACEOF #define HAVE_CHOWN 1 _ACEOF fi { echo "$as_me:$LINENO: checking whether closedir returns void" >&5 echo $ECHO_N "checking whether closedir returns void... $ECHO_C" >&6; } if test "${ac_cv_func_closedir_void+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then ac_cv_func_closedir_void=yes else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header_dirent> #ifndef __cplusplus int closedir (); #endif int main () { return closedir (opendir (".")) != 0; ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_closedir_void=no else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_func_closedir_void=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi { echo "$as_me:$LINENO: result: $ac_cv_func_closedir_void" >&5 echo "${ECHO_T}$ac_cv_func_closedir_void" >&6; } if test $ac_cv_func_closedir_void = yes; then cat >>confdefs.h <<\_ACEOF #define CLOSEDIR_VOID 1 _ACEOF fi { echo "$as_me:$LINENO: checking for error_at_line" >&5 echo $ECHO_N "checking for error_at_line... $ECHO_C" >&6; } if test "${ac_cv_lib_error_at_line+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { error_at_line (0, 0, "", 0, "an error occurred"); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_lib_error_at_line=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_error_at_line=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_lib_error_at_line" >&5 echo "${ECHO_T}$ac_cv_lib_error_at_line" >&6; } if test $ac_cv_lib_error_at_line = no; then case " $LIBOBJS " in *" error.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS error.$ac_objext" ;; esac fi for ac_header in vfork.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then { echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi ac_res=`eval echo '${'$as_ac_Header'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } else # Is the header compilable? { echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6; } # Is the header present? { echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## --------------------------------------- ## ## Report this to polyml AT polyml DOT org ## ## --------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi ac_res=`eval echo '${'$as_ac_Header'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_func in fork vfork do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` { echo "$as_me:$LINENO: checking for $ac_func" >&5 echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define $ac_func to an innocuous variant, in case declares $ac_func. For example, HP-UX 11i declares gettimeofday. */ #define $ac_func innocuous_$ac_func /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $ac_func /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $ac_func (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$ac_func || defined __stub___$ac_func choke me #endif int main () { return $ac_func (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then eval "$as_ac_var=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_var=no" fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext fi ac_res=`eval echo '${'$as_ac_var'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } if test `eval echo '${'$as_ac_var'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done if test "x$ac_cv_func_fork" = xyes; then { echo "$as_me:$LINENO: checking for working fork" >&5 echo $ECHO_N "checking for working fork... $ECHO_C" >&6; } if test "${ac_cv_func_fork_works+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then ac_cv_func_fork_works=cross else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { /* By Ruediger Kuhlmann. */ return fork () < 0; ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_fork_works=yes else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_func_fork_works=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi { echo "$as_me:$LINENO: result: $ac_cv_func_fork_works" >&5 echo "${ECHO_T}$ac_cv_func_fork_works" >&6; } else ac_cv_func_fork_works=$ac_cv_func_fork fi if test "x$ac_cv_func_fork_works" = xcross; then case $host in *-*-amigaos* | *-*-msdosdjgpp*) # Override, as these systems have only a dummy fork() stub ac_cv_func_fork_works=no ;; *) ac_cv_func_fork_works=yes ;; esac { echo "$as_me:$LINENO: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&5 echo "$as_me: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&2;} fi ac_cv_func_vfork_works=$ac_cv_func_vfork if test "x$ac_cv_func_vfork" = xyes; then { echo "$as_me:$LINENO: checking for working vfork" >&5 echo $ECHO_N "checking for working vfork... $ECHO_C" >&6; } if test "${ac_cv_func_vfork_works+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then ac_cv_func_vfork_works=cross else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Thanks to Paul Eggert for this test. */ $ac_includes_default #include #ifdef HAVE_VFORK_H # include #endif /* On some sparc systems, changes by the child to local and incoming argument registers are propagated back to the parent. The compiler is told about this with #include , but some compilers (e.g. gcc -O) don't grok . Test for this by using a static variable whose address is put into a register that is clobbered by the vfork. */ static void #ifdef __cplusplus sparc_address_test (int arg) # else sparc_address_test (arg) int arg; #endif { static pid_t child; if (!child) { child = vfork (); if (child < 0) { perror ("vfork"); _exit(2); } if (!child) { arg = getpid(); write(-1, "", 0); _exit (arg); } } } int main () { pid_t parent = getpid (); pid_t child; sparc_address_test (0); child = vfork (); if (child == 0) { /* Here is another test for sparc vfork register problems. This test uses lots of local variables, at least as many local variables as main has allocated so far including compiler temporaries. 4 locals are enough for gcc 1.40.3 on a Solaris 4.1.3 sparc, but we use 8 to be safe. A buggy compiler should reuse the register of parent for one of the local variables, since it will think that parent can't possibly be used any more in this routine. Assigning to the local variable will thus munge parent in the parent process. */ pid_t p = getpid(), p1 = getpid(), p2 = getpid(), p3 = getpid(), p4 = getpid(), p5 = getpid(), p6 = getpid(), p7 = getpid(); /* Convince the compiler that p..p7 are live; otherwise, it might use the same hardware register for all 8 local variables. */ if (p != p1 || p != p2 || p != p3 || p != p4 || p != p5 || p != p6 || p != p7) _exit(1); /* On some systems (e.g. IRIX 3.3), vfork doesn't separate parent from child file descriptors. If the child closes a descriptor before it execs or exits, this munges the parent's descriptor as well. Test for this by closing stdout in the child. */ _exit(close(fileno(stdout)) != 0); } else { int status; struct stat st; while (wait(&status) != child) ; return ( /* Was there some problem with vforking? */ child < 0 /* Did the child fail? (This shouldn't happen.) */ || status /* Did the vfork/compiler bug occur? */ || parent != getpid() /* Did the file descriptor bug occur? */ || fstat(fileno(stdout), &st) != 0 ); } } _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_vfork_works=yes else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_func_vfork_works=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi { echo "$as_me:$LINENO: result: $ac_cv_func_vfork_works" >&5 echo "${ECHO_T}$ac_cv_func_vfork_works" >&6; } fi; if test "x$ac_cv_func_fork_works" = xcross; then ac_cv_func_vfork_works=$ac_cv_func_vfork { echo "$as_me:$LINENO: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&5 echo "$as_me: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&2;} fi if test "x$ac_cv_func_vfork_works" = xyes; then cat >>confdefs.h <<\_ACEOF #define HAVE_WORKING_VFORK 1 _ACEOF else cat >>confdefs.h <<\_ACEOF #define vfork fork _ACEOF fi if test "x$ac_cv_func_fork_works" = xyes; then cat >>confdefs.h <<\_ACEOF #define HAVE_WORKING_FORK 1 _ACEOF fi { echo "$as_me:$LINENO: checking type of array argument to getgroups" >&5 echo $ECHO_N "checking type of array argument to getgroups... $ECHO_C" >&6; } if test "${ac_cv_type_getgroups+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then ac_cv_type_getgroups=cross else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Thanks to Mike Rendell for this test. */ $ac_includes_default #define NGID 256 #undef MAX #define MAX(x, y) ((x) > (y) ? (x) : (y)) int main () { gid_t gidset[NGID]; int i, n; union { gid_t gval; long int lval; } val; val.lval = -1; for (i = 0; i < NGID; i++) gidset[i] = val.gval; n = getgroups (sizeof (gidset) / MAX (sizeof (int), sizeof (gid_t)) - 1, gidset); /* Exit non-zero if getgroups seems to require an array of ints. This happens when gid_t is short int but getgroups modifies an array of ints. */ return n > 0 && gidset[n] != val.gval; } _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_type_getgroups=gid_t else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_type_getgroups=int fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi if test $ac_cv_type_getgroups = cross; then cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "getgroups.*int.*gid_t" >/dev/null 2>&1; then ac_cv_type_getgroups=gid_t else ac_cv_type_getgroups=int fi rm -f conftest* fi fi { echo "$as_me:$LINENO: result: $ac_cv_type_getgroups" >&5 echo "${ECHO_T}$ac_cv_type_getgroups" >&6; } cat >>confdefs.h <<_ACEOF #define GETGROUPS_T $ac_cv_type_getgroups _ACEOF { echo "$as_me:$LINENO: checking for getgroups" >&5 echo $ECHO_N "checking for getgroups... $ECHO_C" >&6; } if test "${ac_cv_func_getgroups+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define getgroups to an innocuous variant, in case declares getgroups. For example, HP-UX 11i declares gettimeofday. */ #define getgroups innocuous_getgroups /* System header to define __stub macros and hopefully few prototypes, which can conflict with char getgroups (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef getgroups /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char getgroups (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_getgroups || defined __stub___getgroups choke me #endif int main () { return getgroups (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_func_getgroups=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_getgroups=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_func_getgroups" >&5 echo "${ECHO_T}$ac_cv_func_getgroups" >&6; } # If we don't yet have getgroups, see if it's in -lbsd. # This is reported to be necessary on an ITOS 3000WS running SEIUX 3.1. ac_save_LIBS=$LIBS if test $ac_cv_func_getgroups = no; then { echo "$as_me:$LINENO: checking for getgroups in -lbsd" >&5 echo $ECHO_N "checking for getgroups in -lbsd... $ECHO_C" >&6; } if test "${ac_cv_lib_bsd_getgroups+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lbsd $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char getgroups (); int main () { return getgroups (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_lib_bsd_getgroups=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_bsd_getgroups=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_lib_bsd_getgroups" >&5 echo "${ECHO_T}$ac_cv_lib_bsd_getgroups" >&6; } if test $ac_cv_lib_bsd_getgroups = yes; then GETGROUPS_LIB=-lbsd fi fi # Run the program to test the functionality of the system-supplied # getgroups function only if there is such a function. if test $ac_cv_func_getgroups = yes; then { echo "$as_me:$LINENO: checking for working getgroups" >&5 echo $ECHO_N "checking for working getgroups... $ECHO_C" >&6; } if test "${ac_cv_func_getgroups_works+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then ac_cv_func_getgroups_works=no else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { /* On Ultrix 4.3, getgroups (0, 0) always fails. */ return getgroups (0, 0) == -1; ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_getgroups_works=yes else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_func_getgroups_works=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi { echo "$as_me:$LINENO: result: $ac_cv_func_getgroups_works" >&5 echo "${ECHO_T}$ac_cv_func_getgroups_works" >&6; } if test $ac_cv_func_getgroups_works = yes; then cat >>confdefs.h <<\_ACEOF #define HAVE_GETGROUPS 1 _ACEOF fi fi LIBS=$ac_save_LIBS { echo "$as_me:$LINENO: checking whether getpgrp requires zero arguments" >&5 echo $ECHO_N "checking whether getpgrp requires zero arguments... $ECHO_C" >&6; } if test "${ac_cv_func_getpgrp_void+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # Use it with a single arg. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { getpgrp (0); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_func_getpgrp_void=no else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_getpgrp_void=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_func_getpgrp_void" >&5 echo "${ECHO_T}$ac_cv_func_getpgrp_void" >&6; } if test $ac_cv_func_getpgrp_void = yes; then cat >>confdefs.h <<\_ACEOF #define GETPGRP_VOID 1 _ACEOF fi if test $ac_cv_c_compiler_gnu = yes; then { echo "$as_me:$LINENO: checking whether $CC needs -traditional" >&5 echo $ECHO_N "checking whether $CC needs -traditional... $ECHO_C" >&6; } if test "${ac_cv_prog_gcc_traditional+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_pattern="Autoconf.*'x'" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include Autoconf TIOCGETP _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "$ac_pattern" >/dev/null 2>&1; then ac_cv_prog_gcc_traditional=yes else ac_cv_prog_gcc_traditional=no fi rm -f conftest* if test $ac_cv_prog_gcc_traditional = no; then cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include Autoconf TCGETA _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "$ac_pattern" >/dev/null 2>&1; then ac_cv_prog_gcc_traditional=yes fi rm -f conftest* fi fi { echo "$as_me:$LINENO: result: $ac_cv_prog_gcc_traditional" >&5 echo "${ECHO_T}$ac_cv_prog_gcc_traditional" >&6; } if test $ac_cv_prog_gcc_traditional = yes; then CC="$CC -traditional" fi fi { echo "$as_me:$LINENO: checking whether lstat dereferences a symlink specified with a trailing slash" >&5 echo $ECHO_N "checking whether lstat dereferences a symlink specified with a trailing slash... $ECHO_C" >&6; } if test "${ac_cv_func_lstat_dereferences_slashed_symlink+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else rm -f conftest.sym conftest.file echo >conftest.file if test "$as_ln_s" = "ln -s" && ln -s conftest.file conftest.sym; then if test "$cross_compiling" = yes; then ac_cv_func_lstat_dereferences_slashed_symlink=no else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { struct stat sbuf; /* Linux will dereference the symlink and fail. That is better in the sense that it means we will not have to compile and use the lstat wrapper. */ return lstat ("conftest.sym/", &sbuf) == 0; ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_lstat_dereferences_slashed_symlink=yes else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_func_lstat_dereferences_slashed_symlink=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi else # If the `ln -s' command failed, then we probably don't even # have an lstat function. ac_cv_func_lstat_dereferences_slashed_symlink=no fi rm -f conftest.sym conftest.file fi { echo "$as_me:$LINENO: result: $ac_cv_func_lstat_dereferences_slashed_symlink" >&5 echo "${ECHO_T}$ac_cv_func_lstat_dereferences_slashed_symlink" >&6; } test $ac_cv_func_lstat_dereferences_slashed_symlink = yes && cat >>confdefs.h <<_ACEOF #define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 _ACEOF if test $ac_cv_func_lstat_dereferences_slashed_symlink = no; then case " $LIBOBJS " in *" lstat.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS lstat.$ac_objext" ;; esac fi { echo "$as_me:$LINENO: checking whether lstat accepts an empty string" >&5 echo $ECHO_N "checking whether lstat accepts an empty string... $ECHO_C" >&6; } if test "${ac_cv_func_lstat_empty_string_bug+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then ac_cv_func_lstat_empty_string_bug=yes else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { struct stat sbuf; return lstat ("", &sbuf) == 0; ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_lstat_empty_string_bug=no else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_func_lstat_empty_string_bug=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi { echo "$as_me:$LINENO: result: $ac_cv_func_lstat_empty_string_bug" >&5 echo "${ECHO_T}$ac_cv_func_lstat_empty_string_bug" >&6; } if test $ac_cv_func_lstat_empty_string_bug = yes; then case " $LIBOBJS " in *" lstat.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS lstat.$ac_objext" ;; esac cat >>confdefs.h <<_ACEOF #define HAVE_LSTAT_EMPTY_STRING_BUG 1 _ACEOF fi { echo "$as_me:$LINENO: checking whether lstat dereferences a symlink specified with a trailing slash" >&5 echo $ECHO_N "checking whether lstat dereferences a symlink specified with a trailing slash... $ECHO_C" >&6; } if test "${ac_cv_func_lstat_dereferences_slashed_symlink+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else rm -f conftest.sym conftest.file echo >conftest.file if test "$as_ln_s" = "ln -s" && ln -s conftest.file conftest.sym; then if test "$cross_compiling" = yes; then ac_cv_func_lstat_dereferences_slashed_symlink=no else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { struct stat sbuf; /* Linux will dereference the symlink and fail. That is better in the sense that it means we will not have to compile and use the lstat wrapper. */ return lstat ("conftest.sym/", &sbuf) == 0; ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_lstat_dereferences_slashed_symlink=yes else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_func_lstat_dereferences_slashed_symlink=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi else # If the `ln -s' command failed, then we probably don't even # have an lstat function. ac_cv_func_lstat_dereferences_slashed_symlink=no fi rm -f conftest.sym conftest.file fi { echo "$as_me:$LINENO: result: $ac_cv_func_lstat_dereferences_slashed_symlink" >&5 echo "${ECHO_T}$ac_cv_func_lstat_dereferences_slashed_symlink" >&6; } test $ac_cv_func_lstat_dereferences_slashed_symlink = yes && cat >>confdefs.h <<_ACEOF #define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 _ACEOF if test $ac_cv_func_lstat_dereferences_slashed_symlink = no; then case " $LIBOBJS " in *" lstat.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS lstat.$ac_objext" ;; esac fi for ac_header in stdlib.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then { echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi ac_res=`eval echo '${'$as_ac_Header'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } else # Is the header compilable? { echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6; } # Is the header present? { echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## --------------------------------------- ## ## Report this to polyml AT polyml DOT org ## ## --------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi ac_res=`eval echo '${'$as_ac_Header'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done { echo "$as_me:$LINENO: checking for GNU libc compatible realloc" >&5 echo $ECHO_N "checking for GNU libc compatible realloc... $ECHO_C" >&6; } if test "${ac_cv_func_realloc_0_nonnull+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then ac_cv_func_realloc_0_nonnull=no else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #if defined STDC_HEADERS || defined HAVE_STDLIB_H # include #else char *realloc (); #endif int main () { return ! realloc (0, 0); ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_realloc_0_nonnull=yes else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_func_realloc_0_nonnull=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi { echo "$as_me:$LINENO: result: $ac_cv_func_realloc_0_nonnull" >&5 echo "${ECHO_T}$ac_cv_func_realloc_0_nonnull" >&6; } if test $ac_cv_func_realloc_0_nonnull = yes; then cat >>confdefs.h <<\_ACEOF #define HAVE_REALLOC 1 _ACEOF else cat >>confdefs.h <<\_ACEOF #define HAVE_REALLOC 0 _ACEOF case " $LIBOBJS " in *" realloc.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS realloc.$ac_objext" ;; esac cat >>confdefs.h <<\_ACEOF #define realloc rpl_realloc _ACEOF fi for ac_header in sys/select.h sys/socket.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then { echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi ac_res=`eval echo '${'$as_ac_Header'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } else # Is the header compilable? { echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6; } # Is the header present? { echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## --------------------------------------- ## ## Report this to polyml AT polyml DOT org ## ## --------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi ac_res=`eval echo '${'$as_ac_Header'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done { echo "$as_me:$LINENO: checking types of arguments for select" >&5 echo $ECHO_N "checking types of arguments for select... $ECHO_C" >&6; } if test "${ac_cv_func_select_args+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else for ac_arg234 in 'fd_set *' 'int *' 'void *'; do for ac_arg1 in 'int' 'size_t' 'unsigned long int' 'unsigned int'; do for ac_arg5 in 'struct timeval *' 'const struct timeval *'; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #ifdef HAVE_SYS_SELECT_H # include #endif #ifdef HAVE_SYS_SOCKET_H # include #endif int main () { extern int select ($ac_arg1, $ac_arg234, $ac_arg234, $ac_arg234, $ac_arg5); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_func_select_args="$ac_arg1,$ac_arg234,$ac_arg5"; break 3 else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done done done # Provide a safe default value. : ${ac_cv_func_select_args='int,int *,struct timeval *'} fi { echo "$as_me:$LINENO: result: $ac_cv_func_select_args" >&5 echo "${ECHO_T}$ac_cv_func_select_args" >&6; } ac_save_IFS=$IFS; IFS=',' set dummy `echo "$ac_cv_func_select_args" | sed 's/\*/\*/g'` IFS=$ac_save_IFS shift cat >>confdefs.h <<_ACEOF #define SELECT_TYPE_ARG1 $1 _ACEOF cat >>confdefs.h <<_ACEOF #define SELECT_TYPE_ARG234 ($2) _ACEOF cat >>confdefs.h <<_ACEOF #define SELECT_TYPE_ARG5 ($3) _ACEOF rm -f conftest* { echo "$as_me:$LINENO: checking for function prototypes" >&5 echo $ECHO_N "checking for function prototypes... $ECHO_C" >&6; } if test "$ac_cv_prog_cc_c89" != no; then { echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6; } cat >>confdefs.h <<\_ACEOF #define PROTOTYPES 1 _ACEOF cat >>confdefs.h <<\_ACEOF #define __PROTOTYPES 1 _ACEOF else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi { echo "$as_me:$LINENO: checking whether setvbuf arguments are reversed" >&5 echo $ECHO_N "checking whether setvbuf arguments are reversed... $ECHO_C" >&6; } if test "${ac_cv_func_setvbuf_reversed+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_func_setvbuf_reversed=no cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include # ifdef PROTOTYPES int (setvbuf) (FILE *, int, char *, size_t); # endif int main () { char buf; return setvbuf (stdout, _IOLBF, &buf, 1); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include # ifdef PROTOTYPES int (setvbuf) (FILE *, int, char *, size_t); # endif int main () { char buf; return setvbuf (stdout, &buf, _IOLBF, 1); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then # It compiles and links either way, so it must not be declared # with a prototype and most likely this is a K&R C compiler. # Try running it. if test "$cross_compiling" = yes; then : # Assume setvbuf is not reversed when cross-compiling. else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { /* This call has the arguments reversed. A reversed system may check and see that the address of buf is not _IOLBF, _IONBF, or _IOFBF, and return nonzero. */ char buf; if (setvbuf (stdout, _IOLBF, &buf, 1) != 0) return 1; putchar ('\r'); return 0; /* Non-reversed systems SEGV here. */ ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_setvbuf_reversed=yes else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi ac_cv_func_setvbuf_reversed=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_func_setvbuf_reversed" >&5 echo "${ECHO_T}$ac_cv_func_setvbuf_reversed" >&6; } if test $ac_cv_func_setvbuf_reversed = yes; then cat >>confdefs.h <<\_ACEOF #define SETVBUF_REVERSED 1 _ACEOF fi { echo "$as_me:$LINENO: checking return type of signal handlers" >&5 echo $ECHO_N "checking return type of signal handlers... $ECHO_C" >&6; } if test "${ac_cv_type_signal+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include int main () { return *(signal (0, 0)) (0) == 1; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_type_signal=int else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_signal=void fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_type_signal" >&5 echo "${ECHO_T}$ac_cv_type_signal" >&6; } cat >>confdefs.h <<_ACEOF #define RETSIGTYPE $ac_cv_type_signal _ACEOF { echo "$as_me:$LINENO: checking whether stat accepts an empty string" >&5 echo $ECHO_N "checking whether stat accepts an empty string... $ECHO_C" >&6; } if test "${ac_cv_func_stat_empty_string_bug+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then ac_cv_func_stat_empty_string_bug=yes else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { struct stat sbuf; return stat ("", &sbuf) == 0; ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_stat_empty_string_bug=no else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_func_stat_empty_string_bug=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi { echo "$as_me:$LINENO: result: $ac_cv_func_stat_empty_string_bug" >&5 echo "${ECHO_T}$ac_cv_func_stat_empty_string_bug" >&6; } if test $ac_cv_func_stat_empty_string_bug = yes; then case " $LIBOBJS " in *" stat.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS stat.$ac_objext" ;; esac cat >>confdefs.h <<_ACEOF #define HAVE_STAT_EMPTY_STRING_BUG 1 _ACEOF fi for ac_func in strftime do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` { echo "$as_me:$LINENO: checking for $ac_func" >&5 echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define $ac_func to an innocuous variant, in case declares $ac_func. For example, HP-UX 11i declares gettimeofday. */ #define $ac_func innocuous_$ac_func /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $ac_func /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $ac_func (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$ac_func || defined __stub___$ac_func choke me #endif int main () { return $ac_func (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then eval "$as_ac_var=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_var=no" fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext fi ac_res=`eval echo '${'$as_ac_var'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } if test `eval echo '${'$as_ac_var'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF else # strftime is in -lintl on SCO UNIX. { echo "$as_me:$LINENO: checking for strftime in -lintl" >&5 echo $ECHO_N "checking for strftime in -lintl... $ECHO_C" >&6; } if test "${ac_cv_lib_intl_strftime+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lintl $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char strftime (); int main () { return strftime (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_lib_intl_strftime=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_intl_strftime=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_lib_intl_strftime" >&5 echo "${ECHO_T}$ac_cv_lib_intl_strftime" >&6; } if test $ac_cv_lib_intl_strftime = yes; then cat >>confdefs.h <<\_ACEOF #define HAVE_STRFTIME 1 _ACEOF LIBS="-lintl $LIBS" fi fi done { echo "$as_me:$LINENO: checking for working strtod" >&5 echo $ECHO_N "checking for working strtod... $ECHO_C" >&6; } if test "${ac_cv_func_strtod+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then ac_cv_func_strtod=no else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #ifndef strtod double strtod (); #endif int main() { { /* Some versions of Linux strtod mis-parse strings with leading '+'. */ char *string = " +69"; char *term; double value; value = strtod (string, &term); if (value != 69 || term != (string + 4)) return 1; } { /* Under Solaris 2.4, strtod returns the wrong value for the terminating character under some conditions. */ char *string = "NaN"; char *term; strtod (string, &term); if (term != string && *(term - 1) == 0) return 1; } return 0; } _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_strtod=yes else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_func_strtod=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi { echo "$as_me:$LINENO: result: $ac_cv_func_strtod" >&5 echo "${ECHO_T}$ac_cv_func_strtod" >&6; } if test $ac_cv_func_strtod = no; then case " $LIBOBJS " in *" strtod.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS strtod.$ac_objext" ;; esac { echo "$as_me:$LINENO: checking for pow" >&5 echo $ECHO_N "checking for pow... $ECHO_C" >&6; } if test "${ac_cv_func_pow+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define pow to an innocuous variant, in case declares pow. For example, HP-UX 11i declares gettimeofday. */ #define pow innocuous_pow /* System header to define __stub macros and hopefully few prototypes, which can conflict with char pow (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef pow /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char pow (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_pow || defined __stub___pow choke me #endif int main () { return pow (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_func_pow=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_pow=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_func_pow" >&5 echo "${ECHO_T}$ac_cv_func_pow" >&6; } if test $ac_cv_func_pow = no; then { echo "$as_me:$LINENO: checking for pow in -lm" >&5 echo $ECHO_N "checking for pow in -lm... $ECHO_C" >&6; } if test "${ac_cv_lib_m_pow+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lm $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char pow (); int main () { return pow (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_lib_m_pow=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_m_pow=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_lib_m_pow" >&5 echo "${ECHO_T}$ac_cv_lib_m_pow" >&6; } if test $ac_cv_lib_m_pow = yes; then POW_LIB=-lm else { echo "$as_me:$LINENO: WARNING: cannot find library containing definition of pow" >&5 echo "$as_me: WARNING: cannot find library containing definition of pow" >&2;} fi fi fi for ac_func in vprintf do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` { echo "$as_me:$LINENO: checking for $ac_func" >&5 echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define $ac_func to an innocuous variant, in case declares $ac_func. For example, HP-UX 11i declares gettimeofday. */ #define $ac_func innocuous_$ac_func /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $ac_func /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $ac_func (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$ac_func || defined __stub___$ac_func choke me #endif int main () { return $ac_func (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then eval "$as_ac_var=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_var=no" fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext fi ac_res=`eval echo '${'$as_ac_var'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } if test `eval echo '${'$as_ac_var'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF { echo "$as_me:$LINENO: checking for _doprnt" >&5 echo $ECHO_N "checking for _doprnt... $ECHO_C" >&6; } if test "${ac_cv_func__doprnt+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define _doprnt to an innocuous variant, in case declares _doprnt. For example, HP-UX 11i declares gettimeofday. */ #define _doprnt innocuous__doprnt /* System header to define __stub macros and hopefully few prototypes, which can conflict with char _doprnt (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef _doprnt /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char _doprnt (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub__doprnt || defined __stub____doprnt choke me #endif int main () { return _doprnt (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_func__doprnt=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func__doprnt=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_func__doprnt" >&5 echo "${ECHO_T}$ac_cv_func__doprnt" >&6; } if test $ac_cv_func__doprnt = yes; then cat >>confdefs.h <<\_ACEOF #define HAVE_DOPRNT 1 _ACEOF fi fi done for ac_func in bzero dup2 floor ftruncate getcwd gethostbyaddr gethostname gettimeofday memmove do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` { echo "$as_me:$LINENO: checking for $ac_func" >&5 echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define $ac_func to an innocuous variant, in case declares $ac_func. For example, HP-UX 11i declares gettimeofday. */ #define $ac_func innocuous_$ac_func /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $ac_func /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $ac_func (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$ac_func || defined __stub___$ac_func choke me #endif int main () { return $ac_func (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then eval "$as_ac_var=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_var=no" fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext fi ac_res=`eval echo '${'$as_ac_var'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } if test `eval echo '${'$as_ac_var'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done for ac_func in memset mkdir mkfifo munmap pathconf pow realpath rmdir select setlocale socket sqrt strdup strerror do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` { echo "$as_me:$LINENO: checking for $ac_func" >&5 echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define $ac_func to an innocuous variant, in case declares $ac_func. For example, HP-UX 11i declares gettimeofday. */ #define $ac_func innocuous_$ac_func /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $ac_func /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $ac_func (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$ac_func || defined __stub___$ac_func choke me #endif int main () { return $ac_func (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then eval "$as_ac_var=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_var=no" fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext fi ac_res=`eval echo '${'$as_ac_var'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } if test `eval echo '${'$as_ac_var'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done for ac_func in uname dlopen getrusage strtod dtoa sigaction mkstemp getpagesize sigaltstack mmap mprotect do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` { echo "$as_me:$LINENO: checking for $ac_func" >&5 echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define $ac_func to an innocuous variant, in case declares $ac_func. For example, HP-UX 11i declares gettimeofday. */ #define $ac_func innocuous_$ac_func /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $ac_func /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $ac_func (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$ac_func || defined __stub___$ac_func choke me #endif int main () { return $ac_func (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then eval "$as_ac_var=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_var=no" fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext fi ac_res=`eval echo '${'$as_ac_var'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } if test `eval echo '${'$as_ac_var'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done for ac_func in getnetbyname getnetbyaddr sysctl do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` { echo "$as_me:$LINENO: checking for $ac_func" >&5 echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define $ac_func to an innocuous variant, in case declares $ac_func. For example, HP-UX 11i declares gettimeofday. */ #define $ac_func innocuous_$ac_func /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $ac_func /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $ac_func (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$ac_func || defined __stub___$ac_func choke me #endif int main () { return $ac_func (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then eval "$as_ac_var=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_var=no" fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext fi ac_res=`eval echo '${'$as_ac_var'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } if test `eval echo '${'$as_ac_var'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done # Where are the registers? #Linux: { echo "$as_me:$LINENO: checking for mcontext_t.gregs" >&5 echo $ECHO_N "checking for mcontext_t.gregs... $ECHO_C" >&6; } if test "${ac_cv_member_mcontext_t_gregs+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include "ucontext.h" int main () { static mcontext_t ac_aggr; if (ac_aggr.gregs) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_member_mcontext_t_gregs=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include "ucontext.h" int main () { static mcontext_t ac_aggr; if (sizeof ac_aggr.gregs) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_member_mcontext_t_gregs=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_member_mcontext_t_gregs=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_member_mcontext_t_gregs" >&5 echo "${ECHO_T}$ac_cv_member_mcontext_t_gregs" >&6; } if test $ac_cv_member_mcontext_t_gregs = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_MCONTEXT_T_GREGS 1 _ACEOF fi { echo "$as_me:$LINENO: checking for mcontext_t.regs" >&5 echo $ECHO_N "checking for mcontext_t.regs... $ECHO_C" >&6; } if test "${ac_cv_member_mcontext_t_regs+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include "ucontext.h" int main () { static mcontext_t ac_aggr; if (ac_aggr.regs) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_member_mcontext_t_regs=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include "ucontext.h" int main () { static mcontext_t ac_aggr; if (sizeof ac_aggr.regs) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_member_mcontext_t_regs=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_member_mcontext_t_regs=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_member_mcontext_t_regs" >&5 echo "${ECHO_T}$ac_cv_member_mcontext_t_regs" >&6; } if test $ac_cv_member_mcontext_t_regs = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_MCONTEXT_T_REGS 1 _ACEOF fi { echo "$as_me:$LINENO: checking for mcontext_t.mc_esp" >&5 echo $ECHO_N "checking for mcontext_t.mc_esp... $ECHO_C" >&6; } if test "${ac_cv_member_mcontext_t_mc_esp+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include "ucontext.h" int main () { static mcontext_t ac_aggr; if (ac_aggr.mc_esp) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_member_mcontext_t_mc_esp=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include "ucontext.h" int main () { static mcontext_t ac_aggr; if (sizeof ac_aggr.mc_esp) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_member_mcontext_t_mc_esp=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_member_mcontext_t_mc_esp=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_member_mcontext_t_mc_esp" >&5 echo "${ECHO_T}$ac_cv_member_mcontext_t_mc_esp" >&6; } if test $ac_cv_member_mcontext_t_mc_esp = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_MCONTEXT_T_MC_ESP 1 _ACEOF fi #Mac OS X: { echo "$as_me:$LINENO: checking for struct mcontext.ss" >&5 echo $ECHO_N "checking for struct mcontext.ss... $ECHO_C" >&6; } if test "${ac_cv_member_struct_mcontext_ss+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include "signal.h" #include "ucontext.h" int main () { static struct mcontext ac_aggr; if (ac_aggr.ss) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_member_struct_mcontext_ss=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include "signal.h" #include "ucontext.h" int main () { static struct mcontext ac_aggr; if (sizeof ac_aggr.ss) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_member_struct_mcontext_ss=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_member_struct_mcontext_ss=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_member_struct_mcontext_ss" >&5 echo "${ECHO_T}$ac_cv_member_struct_mcontext_ss" >&6; } if test $ac_cv_member_struct_mcontext_ss = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_STRUCT_MCONTEXT_SS 1 _ACEOF fi { echo "$as_me:$LINENO: checking for struct __darwin_mcontext.ss" >&5 echo $ECHO_N "checking for struct __darwin_mcontext.ss... $ECHO_C" >&6; } if test "${ac_cv_member_struct___darwin_mcontext_ss+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include "signal.h" #include "ucontext.h" int main () { static struct __darwin_mcontext ac_aggr; if (ac_aggr.ss) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_member_struct___darwin_mcontext_ss=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include "signal.h" #include "ucontext.h" int main () { static struct __darwin_mcontext ac_aggr; if (sizeof ac_aggr.ss) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_member_struct___darwin_mcontext_ss=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_member_struct___darwin_mcontext_ss=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_member_struct___darwin_mcontext_ss" >&5 echo "${ECHO_T}$ac_cv_member_struct___darwin_mcontext_ss" >&6; } if test $ac_cv_member_struct___darwin_mcontext_ss = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_STRUCT___DARWIN_MCONTEXT_SS 1 _ACEOF fi { echo "$as_me:$LINENO: checking for struct __darwin_mcontext.__ss" >&5 echo $ECHO_N "checking for struct __darwin_mcontext.__ss... $ECHO_C" >&6; } if test "${ac_cv_member_struct___darwin_mcontext___ss+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include "signal.h" #include "ucontext.h" int main () { static struct __darwin_mcontext ac_aggr; if (ac_aggr.__ss) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_member_struct___darwin_mcontext___ss=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include "signal.h" #include "ucontext.h" int main () { static struct __darwin_mcontext ac_aggr; if (sizeof ac_aggr.__ss) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_member_struct___darwin_mcontext___ss=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_member_struct___darwin_mcontext___ss=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_member_struct___darwin_mcontext___ss" >&5 echo "${ECHO_T}$ac_cv_member_struct___darwin_mcontext___ss" >&6; } if test $ac_cv_member_struct___darwin_mcontext___ss = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_STRUCT___DARWIN_MCONTEXT___SS 1 _ACEOF fi { echo "$as_me:$LINENO: checking for struct __darwin_mcontext32.ss" >&5 echo $ECHO_N "checking for struct __darwin_mcontext32.ss... $ECHO_C" >&6; } if test "${ac_cv_member_struct___darwin_mcontext32_ss+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include "signal.h" #include "ucontext.h" int main () { static struct __darwin_mcontext32 ac_aggr; if (ac_aggr.ss) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_member_struct___darwin_mcontext32_ss=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include "signal.h" #include "ucontext.h" int main () { static struct __darwin_mcontext32 ac_aggr; if (sizeof ac_aggr.ss) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_member_struct___darwin_mcontext32_ss=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_member_struct___darwin_mcontext32_ss=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_member_struct___darwin_mcontext32_ss" >&5 echo "${ECHO_T}$ac_cv_member_struct___darwin_mcontext32_ss" >&6; } if test $ac_cv_member_struct___darwin_mcontext32_ss = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_STRUCT___DARWIN_MCONTEXT32_SS 1 _ACEOF fi { echo "$as_me:$LINENO: checking for struct __darwin_mcontext32.__ss" >&5 echo $ECHO_N "checking for struct __darwin_mcontext32.__ss... $ECHO_C" >&6; } if test "${ac_cv_member_struct___darwin_mcontext32___ss+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include "signal.h" #include "ucontext.h" int main () { static struct __darwin_mcontext32 ac_aggr; if (ac_aggr.__ss) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_member_struct___darwin_mcontext32___ss=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include "signal.h" #include "ucontext.h" int main () { static struct __darwin_mcontext32 ac_aggr; if (sizeof ac_aggr.__ss) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_member_struct___darwin_mcontext32___ss=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_member_struct___darwin_mcontext32___ss=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_member_struct___darwin_mcontext32___ss" >&5 echo "${ECHO_T}$ac_cv_member_struct___darwin_mcontext32___ss" >&6; } if test $ac_cv_member_struct___darwin_mcontext32___ss = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_STRUCT___DARWIN_MCONTEXT32___SS 1 _ACEOF fi { echo "$as_me:$LINENO: checking for struct __darwin_mcontext64.ss" >&5 echo $ECHO_N "checking for struct __darwin_mcontext64.ss... $ECHO_C" >&6; } if test "${ac_cv_member_struct___darwin_mcontext64_ss+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include "signal.h" #include "ucontext.h" int main () { static struct __darwin_mcontext64 ac_aggr; if (ac_aggr.ss) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_member_struct___darwin_mcontext64_ss=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include "signal.h" #include "ucontext.h" int main () { static struct __darwin_mcontext64 ac_aggr; if (sizeof ac_aggr.ss) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_member_struct___darwin_mcontext64_ss=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_member_struct___darwin_mcontext64_ss=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_member_struct___darwin_mcontext64_ss" >&5 echo "${ECHO_T}$ac_cv_member_struct___darwin_mcontext64_ss" >&6; } if test $ac_cv_member_struct___darwin_mcontext64_ss = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_STRUCT___DARWIN_MCONTEXT64_SS 1 _ACEOF fi { echo "$as_me:$LINENO: checking for struct __darwin_mcontext64.__ss" >&5 echo $ECHO_N "checking for struct __darwin_mcontext64.__ss... $ECHO_C" >&6; } if test "${ac_cv_member_struct___darwin_mcontext64___ss+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include "signal.h" #include "ucontext.h" int main () { static struct __darwin_mcontext64 ac_aggr; if (ac_aggr.__ss) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_member_struct___darwin_mcontext64___ss=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include "signal.h" #include "ucontext.h" int main () { static struct __darwin_mcontext64 ac_aggr; if (sizeof ac_aggr.__ss) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_member_struct___darwin_mcontext64___ss=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_member_struct___darwin_mcontext64___ss=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_member_struct___darwin_mcontext64___ss" >&5 echo "${ECHO_T}$ac_cv_member_struct___darwin_mcontext64___ss" >&6; } if test $ac_cv_member_struct___darwin_mcontext64___ss = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_STRUCT___DARWIN_MCONTEXT64___SS 1 _ACEOF fi # FreeBSD includes a sun_len member in struct sockaddr_un { echo "$as_me:$LINENO: checking for struct sockaddr_un.sun_len" >&5 echo $ECHO_N "checking for struct sockaddr_un.sun_len... $ECHO_C" >&6; } if test "${ac_cv_member_struct_sockaddr_un_sun_len+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { static struct sockaddr_un ac_aggr; if (ac_aggr.sun_len) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_member_struct_sockaddr_un_sun_len=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { static struct sockaddr_un ac_aggr; if (sizeof ac_aggr.sun_len) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_member_struct_sockaddr_un_sun_len=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_member_struct_sockaddr_un_sun_len=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_member_struct_sockaddr_un_sun_len" >&5 echo "${ECHO_T}$ac_cv_member_struct_sockaddr_un_sun_len" >&6; } if test $ac_cv_member_struct_sockaddr_un_sun_len = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_STRUCT_SOCKADDR_UN_SUN_LEN 1 _ACEOF fi # Additional checks. AC_CANONICAL_HOST has already been called. #AC_CANONICAL_HOST # Test the --with-portable option to build the interpreter even if # we have a code-generator. # Check whether --with-portable was given. if test "${with_portable+set}" = set; then withval=$with_portable; ac_cv_with_portable=yes else ac_cv_with_portable=no fi case "${host_cpu}" in i[3456]86*) cat >>confdefs.h <<\_ACEOF #define HOSTARCHITECTURE_X86 1 _ACEOF polyarch=i386 ;; sparc*) cat >>confdefs.h <<\_ACEOF #define HOSTARCHITECTURE_SPARC 1 _ACEOF polyarch=sparc ;; power* | ppc*) cat >>confdefs.h <<\_ACEOF #define HOSTARCHITECTURE_PPC 1 _ACEOF polyarch=ppc ;; x86_64* | amd64*) cat >>confdefs.h <<\_ACEOF #define HOSTARCHITECTURE_X86_64 1 _ACEOF polyarch=x86_64 ;; arm*) cat >>confdefs.h <<\_ACEOF #define HOSTARCHITECTURE_ARM 1 _ACEOF ac_cv_with_portable=yes ;; *) { { echo "$as_me:$LINENO: error: Poly/ML is not supported for this architecture" >&5 echo "$as_me: error: Poly/ML is not supported for this architecture" >&2;} { (exit 1); exit 1; }; } ;; esac # If we have explicitly set --with-portable or we are on a machine without # a code-generator set to use the interpreter. if test "$ac_cv_with_portable" = "yes"; then cat >>confdefs.h <<\_ACEOF #define INTERPRETED 1 _ACEOF polyarch=interpret fi if test "$polyarch" = i386; then ARCHI386_TRUE= ARCHI386_FALSE='#' else ARCHI386_TRUE='#' ARCHI386_FALSE= fi if test "$polyarch" = ppc; then ARCHPPC_TRUE= ARCHPPC_FALSE='#' else ARCHPPC_TRUE='#' ARCHPPC_FALSE= fi if test "$polyarch" = sparc; then ARCHSPARC_TRUE= ARCHSPARC_FALSE='#' else ARCHSPARC_TRUE='#' ARCHSPARC_FALSE= fi if test "$polyarch" = interpret -a X"$ac_cv_sizeof_voidp" = X4; then ARCHINTERPRET_TRUE= ARCHINTERPRET_FALSE='#' else ARCHINTERPRET_TRUE='#' ARCHINTERPRET_FALSE= fi if test "$polyarch" = interpret -a X"$ac_cv_sizeof_voidp" = X8; then ARCHINTERPRET64_TRUE= ARCHINTERPRET64_FALSE='#' else ARCHINTERPRET64_TRUE='#' ARCHINTERPRET64_FALSE= fi if test "$polyarch" = x86_64; then ARCHX86_64_TRUE= ARCHX86_64_FALSE='#' else ARCHX86_64_TRUE='#' ARCHX86_64_FALSE= fi if test "$poly_native_windows" = yes; then NATIVE_WINDOWS_TRUE= NATIVE_WINDOWS_FALSE='#' else NATIVE_WINDOWS_TRUE='#' NATIVE_WINDOWS_FALSE= fi if test "$poly_no_undefined" = yes; then NO_UNDEFINED_TRUE= NO_UNDEFINED_FALSE='#' else NO_UNDEFINED_TRUE='#' NO_UNDEFINED_FALSE= fi ac_config_files="$ac_config_files Makefile libpolyml/Makefile libpolymain/Makefile" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( *) $as_unset $ac_var ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes (double-quote # substitution turns \\\\ into \\, and sed turns \\ into \). sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then test "x$cache_file" != "x/dev/null" && { echo "$as_me:$LINENO: updating cache $cache_file" >&5 echo "$as_me: updating cache $cache_file" >&6;} cat confcache >$cache_file else { echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5 echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext" ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCXX\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"am__fastdepCXX\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"MAINTAINER_MODE\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"MAINTAINER_MODE\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCXX\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"am__fastdepCXX\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${am__fastdepCCAS_TRUE}" && test -z "${am__fastdepCCAS_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCCAS\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"am__fastdepCCAS\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${EXPPECOFF_TRUE}" && test -z "${EXPPECOFF_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"EXPPECOFF\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"EXPPECOFF\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${EXPELF_TRUE}" && test -z "${EXPELF_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"EXPELF\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"EXPELF\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${EXPMACHO_TRUE}" && test -z "${EXPMACHO_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"EXPMACHO\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"EXPMACHO\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${ARCHI386_TRUE}" && test -z "${ARCHI386_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"ARCHI386\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"ARCHI386\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${ARCHPPC_TRUE}" && test -z "${ARCHPPC_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"ARCHPPC\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"ARCHPPC\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${ARCHSPARC_TRUE}" && test -z "${ARCHSPARC_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"ARCHSPARC\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"ARCHSPARC\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${ARCHINTERPRET_TRUE}" && test -z "${ARCHINTERPRET_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"ARCHINTERPRET\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"ARCHINTERPRET\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${ARCHINTERPRET64_TRUE}" && test -z "${ARCHINTERPRET64_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"ARCHINTERPRET64\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"ARCHINTERPRET64\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${ARCHX86_64_TRUE}" && test -z "${ARCHX86_64_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"ARCHX86_64\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"ARCHX86_64\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${NATIVE_WINDOWS_TRUE}" && test -z "${NATIVE_WINDOWS_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"NATIVE_WINDOWS\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"NATIVE_WINDOWS\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${NO_UNDEFINED_TRUE}" && test -z "${NO_UNDEFINED_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"NO_UNDEFINED\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"NO_UNDEFINED\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi : ${CONFIG_STATUS=./config.status} ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 echo "$as_me: creating $CONFIG_STATUS" >&6;} cat >$CONFIG_STATUS <<_ACEOF #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi # PATH needs CR # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) as_nl=' ' IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. case $0 in *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 { (exit 1); exit 1; } fi # Work around bugs in pre-3.0 UWIN ksh. for as_var in ENV MAIL MAILPATH do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. for as_var in \ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ LC_TELEPHONE LC_TIME do if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then eval $as_var=C; export $as_var else ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var fi done # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi # Name of the executable. as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # CDPATH. $as_unset CDPATH as_lineno_1=$LINENO as_lineno_2=$LINENO test "x$as_lineno_1" != "x$as_lineno_2" && test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line after each line using $LINENO; the second 'sed' # does the real work. The second script uses 'N' to pair each # line-number line with the line containing $LINENO, and appends # trailing '-' during substitution so that $LINENO is not a special # case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # scripts with optimization help from Paolo Bonzini. Blame Lee # E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 { (exit 1); exit 1; }; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in -n*) case `echo 'x\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. *) ECHO_C='\c';; esac;; *) ECHO_N='-n';; esac if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir fi echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 # Save the log message, to keep $[0] and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by Poly/ML $as_me 5.1, which was generated by GNU Autoconf 2.61. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF cat >>$CONFIG_STATUS <<_ACEOF # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF ac_cs_usage="\ \`$as_me' instantiates files from templates according to the current configuration. Usage: $0 [OPTIONS] [FILE]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit -q, --quiet do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF ac_cs_version="\\ Poly/ML config.status 5.1 configured by $0, generated by GNU Autoconf 2.61, with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" Copyright (C) 2006 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # If no file are specified by the user, then we need to provide default # value. By we need to know if files were specified by the user. ac_need_defaults=: while test $# != 0 do case $1 in --*=*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) echo "$ac_cs_version"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift CONFIG_FILES="$CONFIG_FILES $ac_optarg" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header { echo "$as_me: error: ambiguous option: $1 Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; };; --help | --hel | -h ) echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) { echo "$as_me: error: unrecognized option: $1 Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; } ;; *) ac_config_targets="$ac_config_targets $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF if \$ac_cs_recheck; then echo "running CONFIG_SHELL=$SHELL $SHELL $0 "$ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 CONFIG_SHELL=$SHELL export CONFIG_SHELL exec $SHELL "$0"$ac_configure_args \$ac_configure_extra_args --no-create --no-recursion fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "libpolyml/Makefile") CONFIG_FILES="$CONFIG_FILES libpolyml/Makefile" ;; "libpolymain/Makefile") CONFIG_FILES="$CONFIG_FILES libpolymain/Makefile" ;; *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 echo "$as_me: error: invalid argument: $ac_config_target" >&2;} { (exit 1); exit 1; }; };; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= trap 'exit_status=$? { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status ' 0 trap '{ (exit 1); exit 1; }' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || { echo "$me: cannot create a temporary directory in ." >&2 { (exit 1); exit 1; } } # # Set up the sed scripts for CONFIG_FILES section. # # No need to generate the scripts if there are no CONFIG_FILES. # This happens for instance when ./config.status config.h if test -n "$CONFIG_FILES"; then _ACEOF ac_delim='%!_!# ' for ac_last_try in false false false false false :; do cat >conf$$subs.sed <<_ACEOF SHELL!$SHELL$ac_delim PATH_SEPARATOR!$PATH_SEPARATOR$ac_delim PACKAGE_NAME!$PACKAGE_NAME$ac_delim PACKAGE_TARNAME!$PACKAGE_TARNAME$ac_delim PACKAGE_VERSION!$PACKAGE_VERSION$ac_delim PACKAGE_STRING!$PACKAGE_STRING$ac_delim PACKAGE_BUGREPORT!$PACKAGE_BUGREPORT$ac_delim exec_prefix!$exec_prefix$ac_delim prefix!$prefix$ac_delim program_transform_name!$program_transform_name$ac_delim bindir!$bindir$ac_delim sbindir!$sbindir$ac_delim libexecdir!$libexecdir$ac_delim datarootdir!$datarootdir$ac_delim datadir!$datadir$ac_delim sysconfdir!$sysconfdir$ac_delim sharedstatedir!$sharedstatedir$ac_delim localstatedir!$localstatedir$ac_delim includedir!$includedir$ac_delim oldincludedir!$oldincludedir$ac_delim docdir!$docdir$ac_delim infodir!$infodir$ac_delim htmldir!$htmldir$ac_delim dvidir!$dvidir$ac_delim pdfdir!$pdfdir$ac_delim psdir!$psdir$ac_delim libdir!$libdir$ac_delim localedir!$localedir$ac_delim mandir!$mandir$ac_delim DEFS!$DEFS$ac_delim ECHO_C!$ECHO_C$ac_delim ECHO_N!$ECHO_N$ac_delim ECHO_T!$ECHO_T$ac_delim LIBS!$LIBS$ac_delim build_alias!$build_alias$ac_delim host_alias!$host_alias$ac_delim target_alias!$target_alias$ac_delim INSTALL_PROGRAM!$INSTALL_PROGRAM$ac_delim INSTALL_SCRIPT!$INSTALL_SCRIPT$ac_delim INSTALL_DATA!$INSTALL_DATA$ac_delim am__isrc!$am__isrc$ac_delim CYGPATH_W!$CYGPATH_W$ac_delim PACKAGE!$PACKAGE$ac_delim VERSION!$VERSION$ac_delim ACLOCAL!$ACLOCAL$ac_delim AUTOCONF!$AUTOCONF$ac_delim AUTOMAKE!$AUTOMAKE$ac_delim AUTOHEADER!$AUTOHEADER$ac_delim MAKEINFO!$MAKEINFO$ac_delim install_sh!$install_sh$ac_delim STRIP!$STRIP$ac_delim INSTALL_STRIP_PROGRAM!$INSTALL_STRIP_PROGRAM$ac_delim mkdir_p!$mkdir_p$ac_delim AWK!$AWK$ac_delim SET_MAKE!$SET_MAKE$ac_delim am__leading_dot!$am__leading_dot$ac_delim AMTAR!$AMTAR$ac_delim am__tar!$am__tar$ac_delim am__untar!$am__untar$ac_delim build!$build$ac_delim build_cpu!$build_cpu$ac_delim build_vendor!$build_vendor$ac_delim build_os!$build_os$ac_delim host!$host$ac_delim host_cpu!$host_cpu$ac_delim host_vendor!$host_vendor$ac_delim host_os!$host_os$ac_delim OSFLAG!$OSFLAG$ac_delim CC!$CC$ac_delim CFLAGS!$CFLAGS$ac_delim LDFLAGS!$LDFLAGS$ac_delim CPPFLAGS!$CPPFLAGS$ac_delim ac_ct_CC!$ac_ct_CC$ac_delim EXEEXT!$EXEEXT$ac_delim OBJEXT!$OBJEXT$ac_delim DEPDIR!$DEPDIR$ac_delim am__include!$am__include$ac_delim am__quote!$am__quote$ac_delim AMDEP_TRUE!$AMDEP_TRUE$ac_delim AMDEP_FALSE!$AMDEP_FALSE$ac_delim AMDEPBACKSLASH!$AMDEPBACKSLASH$ac_delim CCDEPMODE!$CCDEPMODE$ac_delim am__fastdepCC_TRUE!$am__fastdepCC_TRUE$ac_delim am__fastdepCC_FALSE!$am__fastdepCC_FALSE$ac_delim GREP!$GREP$ac_delim EGREP!$EGREP$ac_delim LN_S!$LN_S$ac_delim ECHO!$ECHO$ac_delim AR!$AR$ac_delim RANLIB!$RANLIB$ac_delim DLLTOOL!$DLLTOOL$ac_delim AS!$AS$ac_delim OBJDUMP!$OBJDUMP$ac_delim CPP!$CPP$ac_delim CXX!$CXX$ac_delim CXXFLAGS!$CXXFLAGS$ac_delim ac_ct_CXX!$ac_ct_CXX$ac_delim _ACEOF if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 97; then break elif $ac_last_try; then { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} { (exit 1); exit 1; }; } else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed` if test -n "$ac_eof"; then ac_eof=`echo "$ac_eof" | sort -nru | sed 1q` ac_eof=`expr $ac_eof + 1` fi cat >>$CONFIG_STATUS <<_ACEOF cat >"\$tmp/subs-1.sed" <<\CEOF$ac_eof /@[a-zA-Z_][a-zA-Z_0-9]*@/!b _ACEOF sed ' s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g s/^/s,@/; s/!/@,|#_!!_#|/ :n t n s/'"$ac_delim"'$/,g/; t s/$/\\/; p N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n ' >>$CONFIG_STATUS >$CONFIG_STATUS <<_ACEOF CEOF$ac_eof _ACEOF ac_delim='%!_!# ' for ac_last_try in false false false false false :; do cat >conf$$subs.sed <<_ACEOF CXXDEPMODE!$CXXDEPMODE$ac_delim am__fastdepCXX_TRUE!$am__fastdepCXX_TRUE$ac_delim am__fastdepCXX_FALSE!$am__fastdepCXX_FALSE$ac_delim CXXCPP!$CXXCPP$ac_delim F77!$F77$ac_delim FFLAGS!$FFLAGS$ac_delim ac_ct_F77!$ac_ct_F77$ac_delim LIBTOOL!$LIBTOOL$ac_delim MAINTAINER_MODE_TRUE!$MAINTAINER_MODE_TRUE$ac_delim MAINTAINER_MODE_FALSE!$MAINTAINER_MODE_FALSE$ac_delim MAINT!$MAINT$ac_delim CCAS!$CCAS$ac_delim CCASFLAGS!$CCASFLAGS$ac_delim CCASDEPMODE!$CCASDEPMODE$ac_delim am__fastdepCCAS_TRUE!$am__fastdepCCAS_TRUE$ac_delim am__fastdepCCAS_FALSE!$am__fastdepCCAS_FALSE$ac_delim XMKMF!$XMKMF$ac_delim ALLOCA!$ALLOCA$ac_delim EXPPECOFF_TRUE!$EXPPECOFF_TRUE$ac_delim EXPPECOFF_FALSE!$EXPPECOFF_FALSE$ac_delim EXPELF_TRUE!$EXPELF_TRUE$ac_delim EXPELF_FALSE!$EXPELF_FALSE$ac_delim EXPMACHO_TRUE!$EXPMACHO_TRUE$ac_delim EXPMACHO_FALSE!$EXPMACHO_FALSE$ac_delim LIBOBJS!$LIBOBJS$ac_delim POW_LIB!$POW_LIB$ac_delim ARCHI386_TRUE!$ARCHI386_TRUE$ac_delim ARCHI386_FALSE!$ARCHI386_FALSE$ac_delim ARCHPPC_TRUE!$ARCHPPC_TRUE$ac_delim ARCHPPC_FALSE!$ARCHPPC_FALSE$ac_delim ARCHSPARC_TRUE!$ARCHSPARC_TRUE$ac_delim ARCHSPARC_FALSE!$ARCHSPARC_FALSE$ac_delim ARCHINTERPRET_TRUE!$ARCHINTERPRET_TRUE$ac_delim ARCHINTERPRET_FALSE!$ARCHINTERPRET_FALSE$ac_delim ARCHINTERPRET64_TRUE!$ARCHINTERPRET64_TRUE$ac_delim ARCHINTERPRET64_FALSE!$ARCHINTERPRET64_FALSE$ac_delim ARCHX86_64_TRUE!$ARCHX86_64_TRUE$ac_delim ARCHX86_64_FALSE!$ARCHX86_64_FALSE$ac_delim NATIVE_WINDOWS_TRUE!$NATIVE_WINDOWS_TRUE$ac_delim NATIVE_WINDOWS_FALSE!$NATIVE_WINDOWS_FALSE$ac_delim NO_UNDEFINED_TRUE!$NO_UNDEFINED_TRUE$ac_delim NO_UNDEFINED_FALSE!$NO_UNDEFINED_FALSE$ac_delim LTLIBOBJS!$LTLIBOBJS$ac_delim _ACEOF if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 43; then break elif $ac_last_try; then { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} { (exit 1); exit 1; }; } else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed` if test -n "$ac_eof"; then ac_eof=`echo "$ac_eof" | sort -nru | sed 1q` ac_eof=`expr $ac_eof + 1` fi cat >>$CONFIG_STATUS <<_ACEOF cat >"\$tmp/subs-2.sed" <<\CEOF$ac_eof /@[a-zA-Z_][a-zA-Z_0-9]*@/!b end _ACEOF sed ' s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g s/^/s,@/; s/!/@,|#_!!_#|/ :n t n s/'"$ac_delim"'$/,g/; t s/$/\\/; p N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n ' >>$CONFIG_STATUS >$CONFIG_STATUS <<_ACEOF :end s/|#_!!_#|//g CEOF$ac_eof _ACEOF # VPATH may cause trouble with some makes, so we remove $(srcdir), # ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=/{ s/:*\$(srcdir):*/:/ s/:*\${srcdir}:*/:/ s/:*@srcdir@:*/:/ s/^\([^=]*=[ ]*\):*/\1/ s/:*$// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF fi # test -n "$CONFIG_FILES" for ac_tag in :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) { { echo "$as_me:$LINENO: error: Invalid tag $ac_tag." >&5 echo "$as_me: error: Invalid tag $ac_tag." >&2;} { (exit 1); exit 1; }; };; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || { { echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5 echo "$as_me: error: cannot find input file: $ac_f" >&2;} { (exit 1); exit 1; }; };; esac ac_file_inputs="$ac_file_inputs $ac_f" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input="Generated from "`IFS=: echo $* | sed 's|^[^:]*/||;s|:[^:]*/|, |g'`" by configure." if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { echo "$as_me:$LINENO: creating $ac_file" >&5 echo "$as_me: creating $ac_file" >&6;} fi case $ac_tag in *:-:* | *:-) cat >"$tmp/stdin";; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` { as_dir="$ac_dir" case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 echo "$as_me: error: cannot create directory $as_dir" >&2;} { (exit 1); exit 1; }; }; } ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= case `sed -n '/datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p ' $ac_file_inputs` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF sed "$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s&@configure_input@&$configure_input&;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " $ac_file_inputs | sed -f "$tmp/subs-1.sed" | sed -f "$tmp/subs-2.sed" >$tmp/out test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && { echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined." >&5 echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined." >&2;} rm -f "$tmp/stdin" case $ac_file in -) cat "$tmp/out"; rm -f "$tmp/out";; *) rm -f "$ac_file"; mv "$tmp/out" $ac_file;; esac ;; :H) # # CONFIG_HEADER # _ACEOF # Transform confdefs.h into a sed script `conftest.defines', that # substitutes the proper values into config.h.in to produce config.h. rm -f conftest.defines conftest.tail # First, append a space to every undef/define line, to ease matching. echo 's/$/ /' >conftest.defines # Then, protect against being on the right side of a sed subst, or in # an unquoted here document, in config.status. If some macros were # called several times there might be several #defines for the same # symbol, which is useless. But do not sort them, since the last # AC_DEFINE must be honored. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* # These sed commands are passed to sed as "A NAME B PARAMS C VALUE D", where # NAME is the cpp macro being defined, VALUE is the value it is being given. # PARAMS is the parameter list in the macro definition--in most cases, it's # just an empty string. ac_dA='s,^\\([ #]*\\)[^ ]*\\([ ]*' ac_dB='\\)[ (].*,\\1define\\2' ac_dC=' ' ac_dD=' ,' uniq confdefs.h | sed -n ' t rset :rset s/^[ ]*#[ ]*define[ ][ ]*// t ok d :ok s/[\\&,]/\\&/g s/^\('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/ '"$ac_dA"'\1'"$ac_dB"'\2'"${ac_dC}"'\3'"$ac_dD"'/p s/^\('"$ac_word_re"'\)[ ]*\(.*\)/'"$ac_dA"'\1'"$ac_dB$ac_dC"'\2'"$ac_dD"'/p ' >>conftest.defines # Remove the space that was appended to ease matching. # Then replace #undef with comments. This is necessary, for # example, in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. # (The regexp can be short, since the line contains either #define or #undef.) echo 's/ $// s,^[ #]*u.*,/* & */,' >>conftest.defines # Break up conftest.defines: ac_max_sed_lines=50 # First sed command is: sed -f defines.sed $ac_file_inputs >"$tmp/out1" # Second one is: sed -f defines.sed "$tmp/out1" >"$tmp/out2" # Third one will be: sed -f defines.sed "$tmp/out2" >"$tmp/out1" # et cetera. ac_in='$ac_file_inputs' ac_out='"$tmp/out1"' ac_nxt='"$tmp/out2"' while : do # Write a here document: cat >>$CONFIG_STATUS <<_ACEOF # First, check the format of the line: cat >"\$tmp/defines.sed" <<\\CEOF /^[ ]*#[ ]*undef[ ][ ]*$ac_word_re[ ]*\$/b def /^[ ]*#[ ]*define[ ][ ]*$ac_word_re[( ]/b def b :def _ACEOF sed ${ac_max_sed_lines}q conftest.defines >>$CONFIG_STATUS echo 'CEOF sed -f "$tmp/defines.sed"' "$ac_in >$ac_out" >>$CONFIG_STATUS ac_in=$ac_out; ac_out=$ac_nxt; ac_nxt=$ac_in sed 1,${ac_max_sed_lines}d conftest.defines >conftest.tail grep . conftest.tail >/dev/null || break rm -f conftest.defines mv conftest.tail conftest.defines done rm -f conftest.defines conftest.tail echo "ac_result=$ac_in" >>$CONFIG_STATUS cat >>$CONFIG_STATUS <<\_ACEOF if test x"$ac_file" != x-; then echo "/* $configure_input */" >"$tmp/config.h" cat "$ac_result" >>"$tmp/config.h" if diff $ac_file "$tmp/config.h" >/dev/null 2>&1; then { echo "$as_me:$LINENO: $ac_file is unchanged" >&5 echo "$as_me: $ac_file is unchanged" >&6;} else rm -f $ac_file mv "$tmp/config.h" $ac_file fi else echo "/* $configure_input */" cat "$ac_result" fi rm -f "$tmp/out12" # Compute $ac_file's index in $config_headers. _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $ac_file | $ac_file:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $ac_file" >`$as_dirname -- $ac_file || $as_expr X$ac_file : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X$ac_file : 'X\(//\)[^/]' \| \ X$ac_file : 'X\(//\)$' \| \ X$ac_file : 'X\(/\)' \| . 2>/dev/null || echo X$ac_file | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'`/stamp-h$_am_stamp_count ;; :C) { echo "$as_me:$LINENO: executing $ac_file commands" >&5 echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed 10q "$mf" | grep '^#.*generated by automake' > /dev/null 2>&1; then dirpart=`$as_dirname -- "$mf" || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| . 2>/dev/null || echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`$as_dirname -- "$file" || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| . 2>/dev/null || echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` { as_dir=$dirpart/$fdir case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 echo "$as_me: error: cannot create directory $as_dir" >&2;} { (exit 1); exit 1; }; }; } # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done ;; esac done # for ac_tag { (exit 0); exit 0; } _ACEOF chmod +x $CONFIG_STATUS ac_clean_files=$ac_clean_files_save # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || { (exit 1); exit 1; } fi polyml.5.2.1/configure.ac0000644000175000017500000002370511076105473014275 0ustar daviddavid# -*- Autoconf -*- # Process this file with autoconf to produce a configure script. AC_INIT([[Poly/ML]], [[5.1]], [[polyml AT polyml DOT org]]) AM_INIT_AUTOMAKE AC_PREREQ(2.59) ac_debug_mode="no" AC_ARG_ENABLE([debug], [ --enable-debug Compiles without optimisation for debugging ], [ac_debug_mode="yes"]) if test "$ac_debug_mode" != "yes"; then # Default to maximum optimisation. -O2 is not good enough. # Set CCASFLAGS to empty so that it doesn't get set to CFLAGS. # The -g option on assembler causes problems on Sparc/Solaris 10. # test X || Y is equivalent to if !X then Y test "${CFLAGS+set}" = set || CFLAGS="-O3" test "${CXXFLAGS+set}" = set || CXXFLAGS="-O3" test "${CCASFLAGS+set}" = set || CCASFLAGS="" else test "${CFLAGS+set}" = set || CFLAGS="-g" test "${CXXFLAGS+set}" = set || CXXFLAGS="-g" test "${CCASFLAGS+set}" = set || CCASFLAGS="" fi AC_CANONICAL_HOST # Set the OS flag. This should not really be required but is still used in # a few places for OS-specific quirks that can't be handled by more specific tests. # Check also for mingw in which case we want to build native Windows. poly_native_windows=no # If we are building on cygwin or mingw we need to give the -no-defined flag to # build a DLL. # On mingw we need the -mthreads flag and this must be included in CFLAGS and # CXXFLAGS before the LIBTOOL macros. poly_no_undefined=no case "${host_os}" in darwin*) AC_SUBST([OSFLAG], [-DMACOSX]) ;; sunos* | solaris*) AC_SUBST([OSFLAG], [-DSOLARIS]) ;; *mingw*) AC_SUBST([OSFLAG], [-DWINDOWS_PC]) poly_native_windows=yes poly_no_undefined=yes CFLAGS="$CFLAGS -mthreads" CXXFLAGS="$CXXFLAGS -mthreads" ;; *cygwin*) poly_no_undefined=yes if test "$ac_cv_c_compiler_gnu" = "yes"; then if $CC -dumpmachine | grep -q mingw; then AC_SUBST([OSFLAG], [-DWINDOWS_PC]) poly_native_windows=yes CFLAGS="$CFLAGS -mthreads" CXXFLAGS="$CXXFLAGS -mthreads" fi fi ;; esac AC_LIBTOOL_WIN32_DLL # libpolyml can be a DLL but libpolymain can't. AC_PROG_LIBTOOL AM_PROG_LIBTOOL AM_MAINTAINER_MODE # Check we're in the right directory AC_CONFIG_SRCDIR([polyexports.h]) AC_CONFIG_HEADER([config.h]) # Checks for programs. AC_PROG_CXX AC_PROG_CC AC_PROG_MAKE_SET AC_PROG_CPP AM_PROG_AS # Checks for libraries. AC_CHECK_LIB(gcc, main) AC_CHECK_LIB(gcc_s, main) AC_CHECK_LIB(stdc++, main) AC_CHECK_LIB(dl, dlopen) AC_CHECK_LIB(m, floor) AC_CHECK_LIB(pthread, pthread_create) # The next two are only used with mingw AC_CHECK_LIB(wsock32, main) AC_CHECK_LIB(gdi32, main) # Solaris needs -lsocket, -lnsl and -lrt # Use AC_CHECK_FUNC first so that the library is only included if it's really needed # and not just because it's present. AC_CHECK_FUNC(gethostbyname, , AC_CHECK_LIB(nsl, gethostbyname)) AC_CHECK_FUNC(getsockopt, , AC_CHECK_LIB(socket, getsockopt)) AC_CHECK_FUNC(sem_wait, , AC_CHECK_LIB(rt, sem_wait)) # Check for X and Motif headers and libraries AC_PATH_X if test "${with_x+set}" = set; then if test "$x_includes" != "" ; then if test "$x_includes" != "NONE" ; then CFLAGS="$CFLAGS -I$x_includes" CXXFLAGS="$CXXFLAGS -I$x_includes" CPPFLAGS="$CPPFLAGS -I$x_includes" fi fi if test "$x_libraries" != "" ; then if test "$x_libraries" != "NONE" ; then LIBS="-L$x_libraries $LIBS" fi fi AC_CHECK_LIB(X11, XCreateGC) AC_CHECK_LIB(Xt, XtMalloc) AC_CHECK_LIB(Xext, XextAddDisplay) if test "$xm_includes" != "" ; then if test "$xm_includes" != "NONE" ; then CFLAGS="$CFLAGS -I$xm_includes" CXXFLAGS="$CXXFLAGS -I$xm_includes" CPPFLAGS="$CPPFLAGS -I$xm_includes" fi fi if test "$xm_libraries" != "" ; then if test "$xm_libraries" != "NONE" ; then LIBS="-L$xm_libraries $LIBS" fi fi AC_CHECK_LIB(Xm, XmGetDestination) fi # TODO: May need AC_PATH_XTRA for Solaris # Check for headers AC_FUNC_ALLOCA AC_HEADER_DIRENT AC_HEADER_STDC AC_HEADER_SYS_WAIT AC_CHECK_HEADERS([stdio.h time.h fcntl.h float.h limits.h locale.h malloc.h netdb.h netinet/in.h stddef.h]) AC_CHECK_HEADERS([stdlib.h string.h sys/file.h sys/ioctl.h sys/param.h sys/socket.h sys/systeminfo.h]) AC_CHECK_HEADERS([sys/time.h unistd.h values.h dlfcn.h signal.h ucontext.h]) AC_CHECK_HEADERS([assert.h ctype.h direct.h errno.h excpt.h fenv.h fpu_control.h grp.h]) AC_CHECK_HEADERS([ieeefp.h io.h math.h memory.h netinet/tcp.h poll.h pwd.h siginfo.h]) AC_CHECK_HEADERS([stdarg.h sys/errno.h sys/filio.h sys/mman.h sys/resource.h]) AC_CHECK_HEADERS([sys/signal.h sys/sockio.h sys/stat.h sys/termios.h sys/times.h]) AC_CHECK_HEADERS([sys/types.h sys/uio.h sys/un.h sys/utsname.h sys/select.h sys/sysctl.h]) AC_CHECK_HEADERS([sys/elf_SPARC.h sys/elf_386.h]) AC_CHECK_HEADERS([windows.h tchar.h pthread.h semaphore.h]) # Only check for the X headers if the user said --with-x. if test "${with_x+set}" = set; then AC_CHECK_HEADERS([X11/Xlib.h Xm/Xm.h]) fi # Find out which type of object code exporter to use. # If we have winnt use PECOFF. This really only applies to cygwin here. # If we have elf.h use ELF. # If we have mach-o/reloc.h use Mach-O # Otherwise use the C source code exporter. AC_CHECK_TYPES([IMAGE_FILE_HEADER], [AC_DEFINE([HAVE_PECOFF], [], [Define to 1 if you have the PE/COFF types.])] [polyexport=pecoff], [AC_CHECK_HEADER([elf.h], [AC_DEFINE([HAVE_ELF_H], [], [Define to 1 if you have the header file.])] [polyexport=elf], [AC_CHECK_HEADER([mach-o/reloc.h], [AC_DEFINE([HAVE_MACH_O_RELOC_H], [], [Define to 1 if you have the header file.])] [polyexport=macho] )] )], [#include ] ) AM_CONDITIONAL([EXPPECOFF], [test "$polyexport" = pecoff]) AM_CONDITIONAL([EXPELF], [test "$polyexport" = elf]) AM_CONDITIONAL([EXPMACHO], [test "$polyexport" = macho]) # Checks for typedefs, structures, and compiler characteristics. AC_HEADER_STDBOOL AC_C_CONST AC_TYPE_UID_T AC_TYPE_MODE_T AC_TYPE_OFF_T AC_TYPE_PID_T AC_TYPE_SIZE_T AC_HEADER_TIME AC_STRUCT_TM # Mac OS X, at any rate, needs signal.h to be included first. AC_CHECK_TYPES([ucontext_t], , , [#include "signal.h" #include "ucontext.h"]) AC_CHECK_TYPES([struct sigcontext, stack_t, sighandler_t, sig_t], , ,[#include "signal.h"]) AC_CHECK_TYPES([socklen_t],,,[#include "sys/types.h" #include "sys/socket.h"]) AC_CHECK_TYPES(long long) AC_CHECK_SIZEOF(void*) AC_CHECK_SIZEOF(long) # Checks for library functions. AC_FUNC_CHOWN AC_FUNC_CLOSEDIR_VOID AC_FUNC_ERROR_AT_LINE AC_FUNC_FORK AC_FUNC_GETGROUPS AC_FUNC_GETPGRP AC_PROG_GCC_TRADITIONAL AC_FUNC_LSTAT AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK AC_FUNC_REALLOC AC_FUNC_SELECT_ARGTYPES AC_FUNC_SETVBUF_REVERSED AC_TYPE_SIGNAL AC_FUNC_STAT AC_FUNC_STRFTIME AC_FUNC_STRTOD AC_FUNC_VPRINTF AC_CHECK_FUNCS([bzero dup2 floor ftruncate getcwd gethostbyaddr gethostname gettimeofday memmove]) AC_CHECK_FUNCS([memset mkdir mkfifo munmap pathconf pow realpath rmdir select setlocale socket sqrt strdup strerror]) AC_CHECK_FUNCS([uname dlopen getrusage strtod dtoa sigaction mkstemp getpagesize sigaltstack mmap mprotect]) AC_CHECK_FUNCS([getnetbyname getnetbyaddr sysctl]) # Where are the registers? #Linux: AC_CHECK_MEMBERS([mcontext_t.gregs, mcontext_t.regs, mcontext_t.mc_esp],,,[#include "ucontext.h"]) #Mac OS X: AC_CHECK_MEMBERS([struct mcontext.ss, struct __darwin_mcontext.ss, struct __darwin_mcontext.__ss, struct __darwin_mcontext32.ss, struct __darwin_mcontext32.__ss, struct __darwin_mcontext64.ss, struct __darwin_mcontext64.__ss],,, [#include "signal.h" #include "ucontext.h"]) # FreeBSD includes a sun_len member in struct sockaddr_un AC_CHECK_MEMBERS([struct sockaddr_un.sun_len],,, [#include ]) # Additional checks. AC_CANONICAL_HOST has already been called. #AC_CANONICAL_HOST # Test the --with-portable option to build the interpreter even if # we have a code-generator. AC_ARG_WITH(portable, [ --with-portable Build the portable interpreter version of Poly/ML instead of native], [ ac_cv_with_portable=yes], [ ac_cv_with_portable=no]) case "${host_cpu}" in i[[3456]]86*) AC_DEFINE([HOSTARCHITECTURE_X86], [1], [Define if the host is an X86 (32 bit)]) polyarch=i386 ;; sparc*) AC_DEFINE([HOSTARCHITECTURE_SPARC], [1], [Define if the host is a Sparc (32 bit)]) polyarch=sparc ;; power* | ppc*) AC_DEFINE([HOSTARCHITECTURE_PPC], [1], [Define if the host is a Power PC (32 bit)]) polyarch=ppc ;; x86_64* | amd64*) AC_DEFINE([HOSTARCHITECTURE_X86_64], [1], [Define if the host is an X86 (64 bit)]) polyarch=x86_64 ;; arm*) AC_DEFINE([HOSTARCHITECTURE_ARM], [1], [Define if the host is an ARM (32 bit)]) ac_cv_with_portable=yes ;; *) AC_MSG_ERROR([Poly/ML is not supported for this architecture]) ;; esac # If we have explicitly set --with-portable or we are on a machine without # a code-generator set to use the interpreter. if test "$ac_cv_with_portable" = "yes"; then AC_DEFINE([INTERPRETED], [1], [Define if using the interpreter] ) polyarch=interpret fi AM_CONDITIONAL([ARCHI386], [test "$polyarch" = i386]) AM_CONDITIONAL([ARCHPPC], [test "$polyarch" = ppc]) AM_CONDITIONAL([ARCHSPARC], [test "$polyarch" = sparc]) AM_CONDITIONAL([ARCHINTERPRET], [test "$polyarch" = interpret -a X"$ac_cv_sizeof_voidp" = X4]) AM_CONDITIONAL([ARCHINTERPRET64], [test "$polyarch" = interpret -a X"$ac_cv_sizeof_voidp" = X8]) AM_CONDITIONAL([ARCHX86_64], [test "$polyarch" = x86_64]) AM_CONDITIONAL([NATIVE_WINDOWS], [test "$poly_native_windows" = yes]) AM_CONDITIONAL([NO_UNDEFINED], [test "$poly_no_undefined" = yes]) AH_TOP([ #ifndef CONF_H_INCLUDED #define CONF_H_INCLUDED]) AH_BOTTOM([ #endif]) AC_CONFIG_FILES([Makefile libpolyml/Makefile libpolymain/Makefile]) AC_OUTPUT polyml.5.2.1/depcomp0000755000175000017500000003710010506226524013354 0ustar daviddavid#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2005-07-09.11 # Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301, USA. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva . case $1 in '') echo "$0: No command. Try \`$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by `PROGRAMS ARGS'. object Object file output by `PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputing dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ## The second -e expression handles DOS-style file names with drive letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the `deleted header file' problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. tr ' ' ' ' < "$tmpdepfile" | ## Some versions of gcc put a space before the `:'. On the theory ## that the space means something, we add a space to the output as ## well. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like `#:fec' to the end of the # dependency line. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ tr ' ' ' ' >> $depfile echo >> $depfile # The second pass generates a dummy entry for each header file. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> $depfile else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts `$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'` tmpdepfile="$stripped.u" if test "$libtool" = yes; then "$@" -Wc,-M else "$@" -M fi stat=$? if test -f "$tmpdepfile"; then : else stripped=`echo "$stripped" | sed 's,^.*/,,'` tmpdepfile="$stripped.u" fi if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi if test -f "$tmpdepfile"; then outname="$stripped.o" # Each line is of the form `foo.o: dependent.h'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile" sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; icc) # Intel's C compiler understands `-MD -MF file'. However on # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c # ICC 7.0 will fill foo.d with something like # foo.o: sub/foo.c # foo.o: sub/foo.h # which is wrong. We want: # sub/foo.o: sub/foo.c # sub/foo.o: sub/foo.h # sub/foo.c: # sub/foo.h: # ICC 7.1 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using \ : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form `foo.o: dependent.h', # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in `foo.d' instead, so we check for that too. # Subdirectories are respected. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then # With Tru64 cc, shared objects can also be used to make a # static library. This mecanism is used in libtool 1.4 series to # handle both shared and static libraries in a single compilation. # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. # # With libtool 1.5 this exception was removed, and libtool now # generates 2 separate objects for the 2 libraries. These two # compilations output dependencies in in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 tmpdepfile2=$dir$base.o.d # libtool 1.5 tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.o.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d tmpdepfile4=$dir$base.d "$@" -MD fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" # That's a tab and a space in the []. sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test $1 != '--mode=compile'; do shift done shift fi # Remove `-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for `:' # in the target name. This is to cope with DOS-style filenames: # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. "$@" $dashmflag | sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" tr ' ' ' ' < "$tmpdepfile" | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test $1 != '--mode=compile'; do shift done shift fi # X makedepend shift cleared=no for arg in "$@"; do case $cleared in no) set ""; shift cleared=yes ;; esac case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix="`echo $object | sed 's/^.*\././'`" touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" sed '1,2d' "$tmpdepfile" | tr ' ' ' ' | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test $1 != '--mode=compile'; do shift done shift fi # Remove `-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o, # because we must use -o when running libtool. "$@" || exit $? IFS=" " for arg do case "$arg" in "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" echo " " >> "$depfile" . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: polyml.5.2.1/exportPoly.sml0000644000175000017500000000465410773147161014716 0ustar daviddavid(* Title: Bootstrap code. Author: David Matthews Copyright David Matthews 2005-2008 This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) RunCall.addOverload Bootstrap.convString Bootstrap.convStringName; RunCall.addOverload Bootstrap.convInt "convInt"; RunCall.addOverload Bootstrap.convWord "convWord"; (* Build the main basis library. *) Bootstrap.use "basis/build.sml"; (* We've now set up the new name space so everything has to be compiled into that rather than the old space. *) (* FFI. *) PolyML.make "mlsource/extra/CInterface"; PolyML.use "mlsource/extra/CInterface/clean"; (* XWindows/Motif *) let val xcall: int*int->int*int = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows; (* See if the RTS supports the X GetTimeOfDay call. *) val isX = (xcall(30, 0); true) handle _ => false in if isX then ( PolyML.make "mlsource/extra/XWindows"; PolyML.make "mlsource/extra/Motif" ) else () end; PolyML.print_depth 100; (* Set the inline level to 40 which seems optimal. *) PolyML.Compiler.maxInlineSize := 40; (* Do this last. There's a problem that replacing the standard input loses any buffering in the previous input which includes any commands after the one that does the replacing. *) let val args = CommandLine.arguments(); (* If we have -o filename use that as the output name. N.B. polyImport takes the first argument that is not recognised as an RTS argument and treats that as the file name so any -o must occur AFTER the import file. *) fun getFile [] = "polyexport" (* Default file name *) | getFile ("-o" :: outFile :: _) = outFile | getFile (_::tl) = getFile tl val fileName = getFile args in PolyML.shareCommonData PolyML.rootFunction; PolyML.export(fileName, PolyML.rootFunction) end; polyml.5.2.1/install-sh0000755000175000017500000002201710506226524014004 0ustar daviddavid#!/bin/sh # install - install a program, script, or datafile scriptversion=2004-12-17.09 # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. It can only install one file at a time, a restriction # shared with many OS's install programs. # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit="${DOITPROG-}" # put in absolute paths if you don't have them in your path; or use env. vars. mvprog="${MVPROG-mv}" cpprog="${CPPROG-cp}" chmodprog="${CHMODPROG-chmod}" chownprog="${CHOWNPROG-chown}" chgrpprog="${CHGRPPROG-chgrp}" stripprog="${STRIPPROG-strip}" rmprog="${RMPROG-rm}" mkdirprog="${MKDIRPROG-mkdir}" chmodcmd="$chmodprog 0755" chowncmd= chgrpcmd= stripcmd= rmcmd="$rmprog -f" mvcmd="$mvprog" src= dst= dir_arg= dstarg= no_target_directory= usage="Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: -c (ignored) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. --help display this help and exit. --version display version info and exit. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test -n "$1"; do case $1 in -c) shift continue;; -d) dir_arg=true shift continue;; -g) chgrpcmd="$chgrpprog $2" shift shift continue;; --help) echo "$usage"; exit 0;; -m) chmodcmd="$chmodprog $2" shift shift continue;; -o) chowncmd="$chownprog $2" shift shift continue;; -s) stripcmd=$stripprog shift continue;; -t) dstarg=$2 shift shift continue;; -T) no_target_directory=true shift continue;; --version) echo "$0 $scriptversion"; exit 0;; *) # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. test -n "$dir_arg$dstarg" && break # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dstarg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dstarg" shift # fnord fi shift # arg dstarg=$arg done break;; esac done if test -z "$1"; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call `install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi for src do # Protect names starting with `-'. case $src in -*) src=./$src ;; esac if test -n "$dir_arg"; then dst=$src src= if test -d "$dst"; then mkdircmd=: chmodcmd= else mkdircmd=$mkdirprog fi else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dstarg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dstarg # Protect names starting with `-'. case $dst in -*) dst=./$dst ;; esac # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test -n "$no_target_directory"; then echo "$0: $dstarg: Is a directory" >&2 exit 1 fi dst=$dst/`basename "$src"` fi fi # This sed command emulates the dirname command. dstdir=`echo "$dst" | sed -e 's,/*$,,;s,[^/]*$,,;s,/*$,,;s,^$,.,'` # Make sure that the destination directory exists. # Skip lots of stat calls in the usual case. if test ! -d "$dstdir"; then defaultIFS=' ' IFS="${IFS-$defaultIFS}" oIFS=$IFS # Some sh's can't handle IFS=/ for some reason. IFS='%' set x `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'` shift IFS=$oIFS pathcomp= while test $# -ne 0 ; do pathcomp=$pathcomp$1 shift if test ! -d "$pathcomp"; then $mkdirprog "$pathcomp" # mkdir can fail with a `File exist' error in case several # install-sh are creating the directory concurrently. This # is OK. test -d "$pathcomp" || exit fi pathcomp=$pathcomp/ done fi if test -n "$dir_arg"; then $doit $mkdircmd "$dst" \ && { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \ && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \ && { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \ && { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; } else dstfile=`basename "$dst"` # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 trap '(exit $?); exit' 1 2 13 15 # Copy the file name to the temp name. $doit $cpprog "$src" "$dsttmp" && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \ && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \ && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \ && { test -z "$chmodcmd" || $doit $chmodcmd "$dsttmp"; } && # Now rename the file to the real destination. { $doit $mvcmd -f "$dsttmp" "$dstdir/$dstfile" 2>/dev/null \ || { # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { if test -f "$dstdir/$dstfile"; then $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \ || $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \ || { echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2 (exit 1); exit 1 } else : fi } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dstdir/$dstfile" } } fi || { (exit 1); exit 1; } done # The final little trick to "correctly" pass the exit status to the exit trap. { (exit 0); exit 0 } # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: polyml.5.2.1/ltmain.sh0000644000175000017500000057753010506226524013637 0ustar daviddavid# ltmain.sh - Provide generalized library-building support services. # NOTE: Changing this file will not affect anything until you rerun configure. # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005 # Free Software Foundation, Inc. # Originally by Gordon Matzigkeit , 1996 # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. basename="s,^.*/,,g" # Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh # is ksh but when the shell is invoked as "sh" and the current value of # the _XPG environment variable is not equal to 1 (one), the special # positional parameter $0, within a function call, is the name of the # function. progpath="$0" # The name of this program: progname=`echo "$progpath" | $SED $basename` modename="$progname" # Global variables: EXIT_SUCCESS=0 EXIT_FAILURE=1 PROGRAM=ltmain.sh PACKAGE=libtool VERSION=1.5.22 TIMESTAMP=" (1.1220.2.365 2005/12/18 22:14:06)" # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi # Check that we have a working $echo. if test "X$1" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test "X$1" = X--fallback-echo; then # Avoid inline document here, it may be left over : elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then # Yippee, $echo works! : else # Restart under the correct shell, and then maybe $echo will work. exec $SHELL "$progpath" --no-reexec ${1+"$@"} fi if test "X$1" = X--fallback-echo; then # used as fallback echo shift cat <&2 $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 exit $EXIT_FAILURE fi # Global variables. mode=$default_mode nonopt= prev= prevopt= run= show="$echo" show_help= execute_dlfiles= duplicate_deps=no preserve_args= lo2o="s/\\.lo\$/.${objext}/" o2lo="s/\\.${objext}\$/.lo/" ##################################### # Shell function definitions: # This seems to be the best place for them # func_mktempdir [string] # Make a temporary directory that won't clash with other running # libtool processes, and avoids race conditions if possible. If # given, STRING is the basename for that directory. func_mktempdir () { my_template="${TMPDIR-/tmp}/${1-$progname}" if test "$run" = ":"; then # Return a directory name, but don't create it in dry-run mode my_tmpdir="${my_template}-$$" else # If mktemp works, use that first and foremost my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` if test ! -d "$my_tmpdir"; then # Failing that, at least try and use $RANDOM to avoid a race my_tmpdir="${my_template}-${RANDOM-0}$$" save_mktempdir_umask=`umask` umask 0077 $mkdir "$my_tmpdir" umask $save_mktempdir_umask fi # If we're not in dry-run mode, bomb out on failure test -d "$my_tmpdir" || { $echo "cannot create temporary directory \`$my_tmpdir'" 1>&2 exit $EXIT_FAILURE } fi $echo "X$my_tmpdir" | $Xsed } # func_win32_libid arg # return the library type of file 'arg' # # Need a lot of goo to handle *both* DLLs and import libs # Has to be a shell function in order to 'eat' the argument # that is supplied when $file_magic_command is called. func_win32_libid () { win32_libid_type="unknown" win32_fileres=`file -L $1 2>/dev/null` case $win32_fileres in *ar\ archive\ import\ library*) # definitely import win32_libid_type="x86 archive import" ;; *ar\ archive*) # could be an import, or static if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | \ $EGREP -e 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then win32_nmres=`eval $NM -f posix -A $1 | \ $SED -n -e '1,100{/ I /{s,.*,import,;p;q;};}'` case $win32_nmres in import*) win32_libid_type="x86 archive import";; *) win32_libid_type="x86 archive static";; esac fi ;; *DLL*) win32_libid_type="x86 DLL" ;; *executable*) # but shell scripts are "executable" too... case $win32_fileres in *MS\ Windows\ PE\ Intel*) win32_libid_type="x86 DLL" ;; esac ;; esac $echo $win32_libid_type } # func_infer_tag arg # Infer tagged configuration to use if any are available and # if one wasn't chosen via the "--tag" command line option. # Only attempt this if the compiler in the base compile # command doesn't match the default compiler. # arg is usually of the form 'gcc ...' func_infer_tag () { if test -n "$available_tags" && test -z "$tagname"; then CC_quoted= for arg in $CC; do case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac CC_quoted="$CC_quoted $arg" done case $@ in # Blanks in the command may have been stripped by the calling shell, # but not from the CC environment variable when configure was run. " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*) ;; # Blanks at the start of $base_compile will cause this to fail # if we don't check for them as well. *) for z in $available_tags; do if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then # Evaluate the configuration. eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" CC_quoted= for arg in $CC; do # Double-quote args containing other shell metacharacters. case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac CC_quoted="$CC_quoted $arg" done case "$@ " in " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*) # The compiler in the base compile command matches # the one in the tagged configuration. # Assume this is the tagged configuration we want. tagname=$z break ;; esac fi done # If $tagname still isn't set, then no tagged configuration # was found and let the user know that the "--tag" command # line option must be used. if test -z "$tagname"; then $echo "$modename: unable to infer tagged configuration" $echo "$modename: specify a tag with \`--tag'" 1>&2 exit $EXIT_FAILURE # else # $echo "$modename: using $tagname tagged configuration" fi ;; esac fi } # func_extract_an_archive dir oldlib func_extract_an_archive () { f_ex_an_ar_dir="$1"; shift f_ex_an_ar_oldlib="$1" $show "(cd $f_ex_an_ar_dir && $AR x $f_ex_an_ar_oldlib)" $run eval "(cd \$f_ex_an_ar_dir && $AR x \$f_ex_an_ar_oldlib)" || exit $? if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then : else $echo "$modename: ERROR: object name conflicts: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" 1>&2 exit $EXIT_FAILURE fi } # func_extract_archives gentop oldlib ... func_extract_archives () { my_gentop="$1"; shift my_oldlibs=${1+"$@"} my_oldobjs="" my_xlib="" my_xabs="" my_xdir="" my_status="" $show "${rm}r $my_gentop" $run ${rm}r "$my_gentop" $show "$mkdir $my_gentop" $run $mkdir "$my_gentop" my_status=$? if test "$my_status" -ne 0 && test ! -d "$my_gentop"; then exit $my_status fi for my_xlib in $my_oldlibs; do # Extract the objects. case $my_xlib in [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; *) my_xabs=`pwd`"/$my_xlib" ;; esac my_xlib=`$echo "X$my_xlib" | $Xsed -e 's%^.*/%%'` my_xdir="$my_gentop/$my_xlib" $show "${rm}r $my_xdir" $run ${rm}r "$my_xdir" $show "$mkdir $my_xdir" $run $mkdir "$my_xdir" exit_status=$? if test "$exit_status" -ne 0 && test ! -d "$my_xdir"; then exit $exit_status fi case $host in *-darwin*) $show "Extracting $my_xabs" # Do not bother doing anything if just a dry run if test -z "$run"; then darwin_orig_dir=`pwd` cd $my_xdir || exit $? darwin_archive=$my_xabs darwin_curdir=`pwd` darwin_base_archive=`$echo "X$darwin_archive" | $Xsed -e 's%^.*/%%'` darwin_arches=`lipo -info "$darwin_archive" 2>/dev/null | $EGREP Architectures 2>/dev/null` if test -n "$darwin_arches"; then darwin_arches=`echo "$darwin_arches" | $SED -e 's/.*are://'` darwin_arch= $show "$darwin_base_archive has multiple architectures $darwin_arches" for darwin_arch in $darwin_arches ; do mkdir -p "unfat-$$/${darwin_base_archive}-${darwin_arch}" lipo -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" func_extract_an_archive "`pwd`" "${darwin_base_archive}" cd "$darwin_curdir" $rm "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" done # $darwin_arches ## Okay now we have a bunch of thin objects, gotta fatten them up :) darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print| xargs basename | sort -u | $NL2SP` darwin_file= darwin_files= for darwin_file in $darwin_filelist; do darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP` lipo -create -output "$darwin_file" $darwin_files done # $darwin_filelist ${rm}r unfat-$$ cd "$darwin_orig_dir" else cd "$darwin_orig_dir" func_extract_an_archive "$my_xdir" "$my_xabs" fi # $darwin_arches fi # $run ;; *) func_extract_an_archive "$my_xdir" "$my_xabs" ;; esac my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP` done func_extract_archives_result="$my_oldobjs" } # End of Shell function definitions ##################################### # Darwin sucks eval std_shrext=\"$shrext_cmds\" disable_libs=no # Parse our command line options once, thoroughly. while test "$#" -gt 0 do arg="$1" shift case $arg in -*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;; *) optarg= ;; esac # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in execute_dlfiles) execute_dlfiles="$execute_dlfiles $arg" ;; tag) tagname="$arg" preserve_args="${preserve_args}=$arg" # Check whether tagname contains only valid characters case $tagname in *[!-_A-Za-z0-9,/]*) $echo "$progname: invalid tag name: $tagname" 1>&2 exit $EXIT_FAILURE ;; esac case $tagname in CC) # Don't test for the "default" C tag, as we know, it's there, but # not specially marked. ;; *) if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "$progpath" > /dev/null; then taglist="$taglist $tagname" # Evaluate the configuration. eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$tagname'$/,/^# ### END LIBTOOL TAG CONFIG: '$tagname'$/p' < $progpath`" else $echo "$progname: ignoring unknown tag $tagname" 1>&2 fi ;; esac ;; *) eval "$prev=\$arg" ;; esac prev= prevopt= continue fi # Have we seen a non-optional argument yet? case $arg in --help) show_help=yes ;; --version) $echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP" $echo $echo "Copyright (C) 2005 Free Software Foundation, Inc." $echo "This is free software; see the source for copying conditions. There is NO" $echo "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." exit $? ;; --config) ${SED} -e '1,/^# ### BEGIN LIBTOOL CONFIG/d' -e '/^# ### END LIBTOOL CONFIG/,$d' $progpath # Now print the configurations for the tags. for tagname in $taglist; do ${SED} -n -e "/^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$/,/^# ### END LIBTOOL TAG CONFIG: $tagname$/p" < "$progpath" done exit $? ;; --debug) $echo "$progname: enabling shell trace mode" set -x preserve_args="$preserve_args $arg" ;; --dry-run | -n) run=: ;; --features) $echo "host: $host" if test "$build_libtool_libs" = yes; then $echo "enable shared libraries" else $echo "disable shared libraries" fi if test "$build_old_libs" = yes; then $echo "enable static libraries" else $echo "disable static libraries" fi exit $? ;; --finish) mode="finish" ;; --mode) prevopt="--mode" prev=mode ;; --mode=*) mode="$optarg" ;; --preserve-dup-deps) duplicate_deps="yes" ;; --quiet | --silent) show=: preserve_args="$preserve_args $arg" ;; --tag) prevopt="--tag" prev=tag preserve_args="$preserve_args --tag" ;; --tag=*) set tag "$optarg" ${1+"$@"} shift prev=tag preserve_args="$preserve_args --tag" ;; -dlopen) prevopt="-dlopen" prev=execute_dlfiles ;; -*) $echo "$modename: unrecognized option \`$arg'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; *) nonopt="$arg" break ;; esac done if test -n "$prevopt"; then $echo "$modename: option \`$prevopt' requires an argument" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi case $disable_libs in no) ;; shared) build_libtool_libs=no build_old_libs=yes ;; static) build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` ;; esac # If this variable is set in any of the actions, the command in it # will be execed at the end. This prevents here-documents from being # left over by shells. exec_cmd= if test -z "$show_help"; then # Infer the operation mode. if test -z "$mode"; then $echo "*** Warning: inferring the mode of operation is deprecated." 1>&2 $echo "*** Future versions of Libtool will require --mode=MODE be specified." 1>&2 case $nonopt in *cc | cc* | *++ | gcc* | *-gcc* | g++* | xlc*) mode=link for arg do case $arg in -c) mode=compile break ;; esac done ;; *db | *dbx | *strace | *truss) mode=execute ;; *install*|cp|mv) mode=install ;; *rm) mode=uninstall ;; *) # If we have no mode, but dlfiles were specified, then do execute mode. test -n "$execute_dlfiles" && mode=execute # Just use the default operation mode. if test -z "$mode"; then if test -n "$nonopt"; then $echo "$modename: warning: cannot infer operation mode from \`$nonopt'" 1>&2 else $echo "$modename: warning: cannot infer operation mode without MODE-ARGS" 1>&2 fi fi ;; esac fi # Only execute mode is allowed to have -dlopen flags. if test -n "$execute_dlfiles" && test "$mode" != execute; then $echo "$modename: unrecognized option \`-dlopen'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi # Change the help message to a mode-specific one. generic_help="$help" help="Try \`$modename --help --mode=$mode' for more information." # These modes are in order of execution frequency so that they run quickly. case $mode in # libtool compile mode compile) modename="$modename: compile" # Get the compilation command and the source file. base_compile= srcfile="$nonopt" # always keep a non-empty value in "srcfile" suppress_opt=yes suppress_output= arg_mode=normal libobj= later= for arg do case $arg_mode in arg ) # do not "continue". Instead, add this to base_compile lastarg="$arg" arg_mode=normal ;; target ) libobj="$arg" arg_mode=normal continue ;; normal ) # Accept any command-line options. case $arg in -o) if test -n "$libobj" ; then $echo "$modename: you cannot specify \`-o' more than once" 1>&2 exit $EXIT_FAILURE fi arg_mode=target continue ;; -static | -prefer-pic | -prefer-non-pic) later="$later $arg" continue ;; -no-suppress) suppress_opt=no continue ;; -Xcompiler) arg_mode=arg # the next one goes into the "base_compile" arg list continue # The current "srcfile" will either be retained or ;; # replaced later. I would guess that would be a bug. -Wc,*) args=`$echo "X$arg" | $Xsed -e "s/^-Wc,//"` lastarg= save_ifs="$IFS"; IFS=',' for arg in $args; do IFS="$save_ifs" # Double-quote args containing other shell metacharacters. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac lastarg="$lastarg $arg" done IFS="$save_ifs" lastarg=`$echo "X$lastarg" | $Xsed -e "s/^ //"` # Add the arguments to base_compile. base_compile="$base_compile $lastarg" continue ;; * ) # Accept the current argument as the source file. # The previous "srcfile" becomes the current argument. # lastarg="$srcfile" srcfile="$arg" ;; esac # case $arg ;; esac # case $arg_mode # Aesthetically quote the previous argument. lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"` case $lastarg in # Double-quote args containing other shell metacharacters. # Many Bourne shells cannot handle close brackets correctly # in scan sets, and some SunOS ksh mistreat backslash-escaping # in scan sets (worked around with variable expansion), # and furthermore cannot handle '|' '&' '(' ')' in scan sets # at all, so we specify them separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") lastarg="\"$lastarg\"" ;; esac base_compile="$base_compile $lastarg" done # for arg case $arg_mode in arg) $echo "$modename: you must specify an argument for -Xcompile" exit $EXIT_FAILURE ;; target) $echo "$modename: you must specify a target with \`-o'" 1>&2 exit $EXIT_FAILURE ;; *) # Get the name of the library object. [ -z "$libobj" ] && libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'` ;; esac # Recognize several different file suffixes. # If the user specifies -o file.o, it is replaced with file.lo xform='[cCFSifmso]' case $libobj in *.ada) xform=ada ;; *.adb) xform=adb ;; *.ads) xform=ads ;; *.asm) xform=asm ;; *.c++) xform=c++ ;; *.cc) xform=cc ;; *.ii) xform=ii ;; *.class) xform=class ;; *.cpp) xform=cpp ;; *.cxx) xform=cxx ;; *.f90) xform=f90 ;; *.for) xform=for ;; *.java) xform=java ;; esac libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"` case $libobj in *.lo) obj=`$echo "X$libobj" | $Xsed -e "$lo2o"` ;; *) $echo "$modename: cannot determine name of library object from \`$libobj'" 1>&2 exit $EXIT_FAILURE ;; esac func_infer_tag $base_compile for arg in $later; do case $arg in -static) build_old_libs=yes continue ;; -prefer-pic) pic_mode=yes continue ;; -prefer-non-pic) pic_mode=no continue ;; esac done qlibobj=`$echo "X$libobj" | $Xsed -e "$sed_quote_subst"` case $qlibobj in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") qlibobj="\"$qlibobj\"" ;; esac test "X$libobj" != "X$qlibobj" \ && $echo "X$libobj" | grep '[]~#^*{};<>?"'"'"' &()|`$[]' \ && $echo "$modename: libobj name \`$libobj' may not contain shell special characters." objname=`$echo "X$obj" | $Xsed -e 's%^.*/%%'` xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$obj"; then xdir= else xdir=$xdir/ fi lobj=${xdir}$objdir/$objname if test -z "$base_compile"; then $echo "$modename: you must specify a compilation command" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi # Delete any leftover library objects. if test "$build_old_libs" = yes; then removelist="$obj $lobj $libobj ${libobj}T" else removelist="$lobj $libobj ${libobj}T" fi $run $rm $removelist trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15 # On Cygwin there's no "real" PIC flag so we must build both object types case $host_os in cygwin* | mingw* | pw32* | os2*) pic_mode=default ;; esac if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then # non-PIC code in shared libraries is not supported pic_mode=default fi # Calculate the filename of the output object if compiler does # not support -o with -c if test "$compiler_c_o" = no; then output_obj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext} lockfile="$output_obj.lock" removelist="$removelist $output_obj $lockfile" trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15 else output_obj= need_locks=no lockfile= fi # Lock this critical section if it is needed # We use this script file to make the link, it avoids creating a new file if test "$need_locks" = yes; then until $run ln "$progpath" "$lockfile" 2>/dev/null; do $show "Waiting for $lockfile to be removed" sleep 2 done elif test "$need_locks" = warn; then if test -f "$lockfile"; then $echo "\ *** ERROR, $lockfile exists and contains: `cat $lockfile 2>/dev/null` This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $run $rm $removelist exit $EXIT_FAILURE fi $echo "$srcfile" > "$lockfile" fi if test -n "$fix_srcfile_path"; then eval srcfile=\"$fix_srcfile_path\" fi qsrcfile=`$echo "X$srcfile" | $Xsed -e "$sed_quote_subst"` case $qsrcfile in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") qsrcfile="\"$qsrcfile\"" ;; esac $run $rm "$libobj" "${libobj}T" # Create a libtool object file (analogous to a ".la" file), # but don't create it if we're doing a dry run. test -z "$run" && cat > ${libobj}T </dev/null`" != "X$srcfile"; then $echo "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $run $rm $removelist exit $EXIT_FAILURE fi # Just move the object if needed, then go on to compile the next one if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then $show "$mv $output_obj $lobj" if $run $mv $output_obj $lobj; then : else error=$? $run $rm $removelist exit $error fi fi # Append the name of the PIC object to the libtool object file. test -z "$run" && cat >> ${libobj}T <> ${libobj}T </dev/null`" != "X$srcfile"; then $echo "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $run $rm $removelist exit $EXIT_FAILURE fi # Just move the object if needed if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then $show "$mv $output_obj $obj" if $run $mv $output_obj $obj; then : else error=$? $run $rm $removelist exit $error fi fi # Append the name of the non-PIC object the libtool object file. # Only append if the libtool object file exists. test -z "$run" && cat >> ${libobj}T <> ${libobj}T <&2 fi if test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes else if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=built fi build_libtool_libs=no build_old_libs=yes break ;; esac done # See if our shared archives depend on static archives. test -n "$old_archive_from_new_cmds" && build_old_libs=yes # Go through the arguments, transforming them on the way. while test "$#" -gt 0; do arg="$1" shift case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") qarg=\"`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`\" ### testsuite: skip nested quoting test ;; *) qarg=$arg ;; esac libtool_args="$libtool_args $qarg" # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in output) compile_command="$compile_command @OUTPUT@" finalize_command="$finalize_command @OUTPUT@" ;; esac case $prev in dlfiles|dlprefiles) if test "$preload" = no; then # Add the symbol object into the linking commands. compile_command="$compile_command @SYMFILE@" finalize_command="$finalize_command @SYMFILE@" preload=yes fi case $arg in *.la | *.lo) ;; # We handle these cases below. force) if test "$dlself" = no; then dlself=needless export_dynamic=yes fi prev= continue ;; self) if test "$prev" = dlprefiles; then dlself=yes elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then dlself=yes else dlself=needless export_dynamic=yes fi prev= continue ;; *) if test "$prev" = dlfiles; then dlfiles="$dlfiles $arg" else dlprefiles="$dlprefiles $arg" fi prev= continue ;; esac ;; expsyms) export_symbols="$arg" if test ! -f "$arg"; then $echo "$modename: symbol file \`$arg' does not exist" exit $EXIT_FAILURE fi prev= continue ;; expsyms_regex) export_symbols_regex="$arg" prev= continue ;; inst_prefix) inst_prefix_dir="$arg" prev= continue ;; precious_regex) precious_files_regex="$arg" prev= continue ;; release) release="-$arg" prev= continue ;; objectlist) if test -f "$arg"; then save_arg=$arg moreargs= for fil in `cat $save_arg` do # moreargs="$moreargs $fil" arg=$fil # A libtool-controlled object. # Check to see that this really is a libtool object. if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then pic_object= non_pic_object= # Read the .lo file # If there is no directory component, then add one. case $arg in */* | *\\*) . $arg ;; *) . ./$arg ;; esac if test -z "$pic_object" || \ test -z "$non_pic_object" || test "$pic_object" = none && \ test "$non_pic_object" = none; then $echo "$modename: cannot find name of object for \`$arg'" 1>&2 exit $EXIT_FAILURE fi # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then dlfiles="$dlfiles $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. dlprefiles="$dlprefiles $pic_object" prev= fi # A PIC object. libobjs="$libobjs $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object non_pic_objects="$non_pic_objects $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object="$pic_object" non_pic_objects="$non_pic_objects $non_pic_object" fi else # Only an error if not doing a dry-run. if test -z "$run"; then $echo "$modename: \`$arg' is not a valid libtool object" 1>&2 exit $EXIT_FAILURE else # Dry-run case. # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"` non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"` libobjs="$libobjs $pic_object" non_pic_objects="$non_pic_objects $non_pic_object" fi fi done else $echo "$modename: link input file \`$save_arg' does not exist" exit $EXIT_FAILURE fi arg=$save_arg prev= continue ;; rpath | xrpath) # We need an absolute path. case $arg in [\\/]* | [A-Za-z]:[\\/]*) ;; *) $echo "$modename: only absolute run-paths are allowed" 1>&2 exit $EXIT_FAILURE ;; esac if test "$prev" = rpath; then case "$rpath " in *" $arg "*) ;; *) rpath="$rpath $arg" ;; esac else case "$xrpath " in *" $arg "*) ;; *) xrpath="$xrpath $arg" ;; esac fi prev= continue ;; xcompiler) compiler_flags="$compiler_flags $qarg" prev= compile_command="$compile_command $qarg" finalize_command="$finalize_command $qarg" continue ;; xlinker) linker_flags="$linker_flags $qarg" compiler_flags="$compiler_flags $wl$qarg" prev= compile_command="$compile_command $wl$qarg" finalize_command="$finalize_command $wl$qarg" continue ;; xcclinker) linker_flags="$linker_flags $qarg" compiler_flags="$compiler_flags $qarg" prev= compile_command="$compile_command $qarg" finalize_command="$finalize_command $qarg" continue ;; shrext) shrext_cmds="$arg" prev= continue ;; darwin_framework|darwin_framework_skip) test "$prev" = "darwin_framework" && compiler_flags="$compiler_flags $arg" compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" prev= continue ;; *) eval "$prev=\"\$arg\"" prev= continue ;; esac fi # test -n "$prev" prevarg="$arg" case $arg in -all-static) if test -n "$link_static_flag"; then compile_command="$compile_command $link_static_flag" finalize_command="$finalize_command $link_static_flag" fi continue ;; -allow-undefined) # FIXME: remove this flag sometime in the future. $echo "$modename: \`-allow-undefined' is deprecated because it is the default" 1>&2 continue ;; -avoid-version) avoid_version=yes continue ;; -dlopen) prev=dlfiles continue ;; -dlpreopen) prev=dlprefiles continue ;; -export-dynamic) export_dynamic=yes continue ;; -export-symbols | -export-symbols-regex) if test -n "$export_symbols" || test -n "$export_symbols_regex"; then $echo "$modename: more than one -exported-symbols argument is not allowed" exit $EXIT_FAILURE fi if test "X$arg" = "X-export-symbols"; then prev=expsyms else prev=expsyms_regex fi continue ;; -framework|-arch|-isysroot) case " $CC " in *" ${arg} ${1} "* | *" ${arg} ${1} "*) prev=darwin_framework_skip ;; *) compiler_flags="$compiler_flags $arg" prev=darwin_framework ;; esac compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" continue ;; -inst-prefix-dir) prev=inst_prefix continue ;; # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* # so, if we see these flags be careful not to treat them like -L -L[A-Z][A-Z]*:*) case $with_gcc/$host in no/*-*-irix* | /*-*-irix*) compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" ;; esac continue ;; -L*) dir=`$echo "X$arg" | $Xsed -e 's/^-L//'` # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then $echo "$modename: cannot determine absolute directory name of \`$dir'" 1>&2 absdir="$dir" notinst_path="$notinst_path $dir" fi dir="$absdir" ;; esac case "$deplibs " in *" -L$dir "*) ;; *) deplibs="$deplibs -L$dir" lib_search_path="$lib_search_path $dir" ;; esac case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) testbindir=`$echo "X$dir" | $Xsed -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$dir:"*) ;; *) dllsearchpath="$dllsearchpath:$dir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; *) dllsearchpath="$dllsearchpath:$testbindir";; esac ;; esac continue ;; -l*) if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos*) # These systems don't actually have a C or math library (as such) continue ;; *-*-os2*) # These systems don't actually have a C library (as such) test "X$arg" = "X-lc" && continue ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. test "X$arg" = "X-lc" && continue ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C and math libraries are in the System framework deplibs="$deplibs -framework System" continue ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype test "X$arg" = "X-lc" && continue ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work test "X$arg" = "X-lc" && continue ;; esac elif test "X$arg" = "X-lc_r"; then case $host in *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc_r directly, use -pthread flag. continue ;; esac fi deplibs="$deplibs $arg" continue ;; # Tru64 UNIX uses -model [arg] to determine the layout of C++ # classes, name mangling, and exception handling. -model) compile_command="$compile_command $arg" compiler_flags="$compiler_flags $arg" finalize_command="$finalize_command $arg" prev=xcompiler continue ;; -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe) compiler_flags="$compiler_flags $arg" compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" continue ;; -module) module=yes continue ;; # -64, -mips[0-9] enable 64-bit mode on the SGI compiler # -r[0-9][0-9]* specifies the processor on the SGI compiler # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler # +DA*, +DD* enable 64-bit mode on the HP compiler # -q* pass through compiler args for the IBM compiler # -m* pass through architecture-specific compiler args for GCC # -m*, -t[45]*, -txscale* pass through architecture-specific # compiler args for GCC # -pg pass through profiling flag for GCC # @file GCC response files -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*|-pg| \ -t[45]*|-txscale*|@*) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" compiler_flags="$compiler_flags $arg" continue ;; -shrext) prev=shrext continue ;; -no-fast-install) fast_install=no continue ;; -no-install) case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) # The PATH hackery in wrapper scripts is required on Windows # in order for the loader to find any dlls it needs. $echo "$modename: warning: \`-no-install' is ignored for $host" 1>&2 $echo "$modename: warning: assuming \`-no-fast-install' instead" 1>&2 fast_install=no ;; *) no_install=yes ;; esac continue ;; -no-undefined) allow_undefined=no continue ;; -objectlist) prev=objectlist continue ;; -o) prev=output ;; -precious-files-regex) prev=precious_regex continue ;; -release) prev=release continue ;; -rpath) prev=rpath continue ;; -R) prev=xrpath continue ;; -R*) dir=`$echo "X$arg" | $Xsed -e 's/^-R//'` # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) $echo "$modename: only absolute run-paths are allowed" 1>&2 exit $EXIT_FAILURE ;; esac case "$xrpath " in *" $dir "*) ;; *) xrpath="$xrpath $dir" ;; esac continue ;; -static) # The effects of -static are defined in a previous loop. # We used to do the same as -all-static on platforms that # didn't have a PIC flag, but the assumption that the effects # would be equivalent was wrong. It would break on at least # Digital Unix and AIX. continue ;; -thread-safe) thread_safe=yes continue ;; -version-info) prev=vinfo continue ;; -version-number) prev=vinfo vinfo_number=yes continue ;; -Wc,*) args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wc,//'` arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" case $flag in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") flag="\"$flag\"" ;; esac arg="$arg $wl$flag" compiler_flags="$compiler_flags $flag" done IFS="$save_ifs" arg=`$echo "X$arg" | $Xsed -e "s/^ //"` ;; -Wl,*) args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wl,//'` arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" case $flag in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") flag="\"$flag\"" ;; esac arg="$arg $wl$flag" compiler_flags="$compiler_flags $wl$flag" linker_flags="$linker_flags $flag" done IFS="$save_ifs" arg=`$echo "X$arg" | $Xsed -e "s/^ //"` ;; -Xcompiler) prev=xcompiler continue ;; -Xlinker) prev=xlinker continue ;; -XCClinker) prev=xcclinker continue ;; # Some other compiler flag. -* | +*) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac ;; *.$objext) # A standard object. objs="$objs $arg" ;; *.lo) # A libtool-controlled object. # Check to see that this really is a libtool object. if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then pic_object= non_pic_object= # Read the .lo file # If there is no directory component, then add one. case $arg in */* | *\\*) . $arg ;; *) . ./$arg ;; esac if test -z "$pic_object" || \ test -z "$non_pic_object" || test "$pic_object" = none && \ test "$non_pic_object" = none; then $echo "$modename: cannot find name of object for \`$arg'" 1>&2 exit $EXIT_FAILURE fi # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then dlfiles="$dlfiles $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. dlprefiles="$dlprefiles $pic_object" prev= fi # A PIC object. libobjs="$libobjs $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object non_pic_objects="$non_pic_objects $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object="$pic_object" non_pic_objects="$non_pic_objects $non_pic_object" fi else # Only an error if not doing a dry-run. if test -z "$run"; then $echo "$modename: \`$arg' is not a valid libtool object" 1>&2 exit $EXIT_FAILURE else # Dry-run case. # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"` non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"` libobjs="$libobjs $pic_object" non_pic_objects="$non_pic_objects $non_pic_object" fi fi ;; *.$libext) # An archive. deplibs="$deplibs $arg" old_deplibs="$old_deplibs $arg" continue ;; *.la) # A libtool-controlled library. if test "$prev" = dlfiles; then # This library was specified with -dlopen. dlfiles="$dlfiles $arg" prev= elif test "$prev" = dlprefiles; then # The library was specified with -dlpreopen. dlprefiles="$dlprefiles $arg" prev= else deplibs="$deplibs $arg" fi continue ;; # Some other compiler argument. *) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac ;; esac # arg # Now actually substitute the argument into the commands. if test -n "$arg"; then compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" fi done # argument parsing loop if test -n "$prev"; then $echo "$modename: the \`$prevarg' option requires an argument" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then eval arg=\"$export_dynamic_flag_spec\" compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" fi oldlibs= # calculate the name of the file, without its directory outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'` libobjs_save="$libobjs" if test -n "$shlibpath_var"; then # get the directories listed in $shlibpath_var eval shlib_search_path=\`\$echo \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\` else shlib_search_path= fi eval sys_lib_search_path=\"$sys_lib_search_path_spec\" eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'` if test "X$output_objdir" = "X$output"; then output_objdir="$objdir" else output_objdir="$output_objdir/$objdir" fi # Create the object directory. if test ! -d "$output_objdir"; then $show "$mkdir $output_objdir" $run $mkdir $output_objdir exit_status=$? if test "$exit_status" -ne 0 && test ! -d "$output_objdir"; then exit $exit_status fi fi # Determine the type of output case $output in "") $echo "$modename: you must specify an output file" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; *.$libext) linkmode=oldlib ;; *.lo | *.$objext) linkmode=obj ;; *.la) linkmode=lib ;; *) linkmode=prog ;; # Anything else should be a program. esac case $host in *cygwin* | *mingw* | *pw32*) # don't eliminate duplications in $postdeps and $predeps duplicate_compiler_generated_deps=yes ;; *) duplicate_compiler_generated_deps=$duplicate_deps ;; esac specialdeplibs= libs= # Find all interdependent deplibs by searching for libraries # that are linked more than once (e.g. -la -lb -la) for deplib in $deplibs; do if test "X$duplicate_deps" = "Xyes" ; then case "$libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi libs="$libs $deplib" done if test "$linkmode" = lib; then libs="$predeps $libs $compiler_lib_search_path $postdeps" # Compute libraries that are listed more than once in $predeps # $postdeps and mark them as special (i.e., whose duplicates are # not to be eliminated). pre_post_deps= if test "X$duplicate_compiler_generated_deps" = "Xyes" ; then for pre_post_dep in $predeps $postdeps; do case "$pre_post_deps " in *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;; esac pre_post_deps="$pre_post_deps $pre_post_dep" done fi pre_post_deps= fi deplibs= newdependency_libs= newlib_search_path= need_relink=no # whether we're linking any uninstalled libtool libraries notinst_deplibs= # not-installed libtool libraries case $linkmode in lib) passes="conv link" for file in $dlfiles $dlprefiles; do case $file in *.la) ;; *) $echo "$modename: libraries can \`-dlopen' only libtool libraries: $file" 1>&2 exit $EXIT_FAILURE ;; esac done ;; prog) compile_deplibs= finalize_deplibs= alldeplibs=no newdlfiles= newdlprefiles= passes="conv scan dlopen dlpreopen link" ;; *) passes="conv" ;; esac for pass in $passes; do if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan"; then libs="$deplibs" deplibs= fi if test "$linkmode" = prog; then case $pass in dlopen) libs="$dlfiles" ;; dlpreopen) libs="$dlprefiles" ;; link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; esac fi if test "$pass" = dlopen; then # Collect dlpreopened libraries save_deplibs="$deplibs" deplibs= fi for deplib in $libs; do lib= found=no case $deplib in -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else compiler_flags="$compiler_flags $deplib" fi continue ;; -l*) if test "$linkmode" != lib && test "$linkmode" != prog; then $echo "$modename: warning: \`-l' is ignored for archives/objects" 1>&2 continue fi name=`$echo "X$deplib" | $Xsed -e 's/^-l//'` for searchdir in $newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path; do for search_ext in .la $std_shrext .so .a; do # Search the libtool library lib="$searchdir/lib${name}${search_ext}" if test -f "$lib"; then if test "$search_ext" = ".la"; then found=yes else found=no fi break 2 fi done done if test "$found" != yes; then # deplib doesn't seem to be a libtool library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue else # deplib is a libtool library # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, # We need to do some special things here, and not later. if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $deplib "*) if (${SED} -e '2q' $lib | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then library_names= old_library= case $lib in */* | *\\*) . $lib ;; *) . ./$lib ;; esac for l in $old_library $library_names; do ll="$l" done if test "X$ll" = "X$old_library" ; then # only static version available found=no ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'` test "X$ladir" = "X$lib" && ladir="." lib=$ladir/$old_library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue fi fi ;; *) ;; esac fi fi ;; # -l -L*) case $linkmode in lib) deplibs="$deplib $deplibs" test "$pass" = conv && continue newdependency_libs="$deplib $newdependency_libs" newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` ;; prog) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi if test "$pass" = scan; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` ;; *) $echo "$modename: warning: \`-L' is ignored for archives/objects" 1>&2 ;; esac # linkmode continue ;; # -L -R*) if test "$pass" = link; then dir=`$echo "X$deplib" | $Xsed -e 's/^-R//'` # Make sure the xrpath contains only unique directories. case "$xrpath " in *" $dir "*) ;; *) xrpath="$xrpath $dir" ;; esac fi deplibs="$deplib $deplibs" continue ;; *.la) lib="$deplib" ;; *.$libext) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi case $linkmode in lib) valid_a_lib=no case $deplibs_check_method in match_pattern*) set dummy $deplibs_check_method match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"` if eval $echo \"$deplib\" 2>/dev/null \ | $SED 10q \ | $EGREP "$match_pattern_regex" > /dev/null; then valid_a_lib=yes fi ;; pass_all) valid_a_lib=yes ;; esac if test "$valid_a_lib" != yes; then $echo $echo "*** Warning: Trying to link with static lib archive $deplib." $echo "*** I have the capability to make that library automatically link in when" $echo "*** you link to this library. But I can only do this if you have a" $echo "*** shared version of the library, which you do not appear to have" $echo "*** because the file extensions .$libext of this argument makes me believe" $echo "*** that it is just a static archive that I should not used here." else $echo $echo "*** Warning: Linking the shared library $output against the" $echo "*** static library $deplib is not portable!" deplibs="$deplib $deplibs" fi continue ;; prog) if test "$pass" != link; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi continue ;; esac # linkmode ;; # *.$libext *.lo | *.$objext) if test "$pass" = conv; then deplibs="$deplib $deplibs" elif test "$linkmode" = prog; then if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlopen support or we're linking statically, # we need to preload. newdlprefiles="$newdlprefiles $deplib" compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else newdlfiles="$newdlfiles $deplib" fi fi continue ;; %DEPLIBS%) alldeplibs=yes continue ;; esac # case $deplib if test "$found" = yes || test -f "$lib"; then : else $echo "$modename: cannot find the library \`$lib' or unhandled argument \`$deplib'" 1>&2 exit $EXIT_FAILURE fi # Check to see that this really is a libtool archive. if (${SED} -e '2q' $lib | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : else $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'` test "X$ladir" = "X$lib" && ladir="." dlname= dlopen= dlpreopen= libdir= library_names= old_library= # If the library was installed with an old release of libtool, # it will not redefine variables installed, or shouldnotlink installed=yes shouldnotlink=no avoidtemprpath= # Read the .la file case $lib in */* | *\\*) . $lib ;; *) . ./$lib ;; esac if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan" || { test "$linkmode" != prog && test "$linkmode" != lib; }; then test -n "$dlopen" && dlfiles="$dlfiles $dlopen" test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen" fi if test "$pass" = conv; then # Only check for convenience libraries deplibs="$lib $deplibs" if test -z "$libdir"; then if test -z "$old_library"; then $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 exit $EXIT_FAILURE fi # It is a libtool convenience library, so add in its objects. convenience="$convenience $ladir/$objdir/$old_library" old_convenience="$old_convenience $ladir/$objdir/$old_library" tmp_libs= for deplib in $dependency_libs; do deplibs="$deplib $deplibs" if test "X$duplicate_deps" = "Xyes" ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$tmp_libs $deplib" done elif test "$linkmode" != prog && test "$linkmode" != lib; then $echo "$modename: \`$lib' is not a convenience library" 1>&2 exit $EXIT_FAILURE fi continue fi # $pass = conv # Get the name of the library we link against. linklib= for l in $old_library $library_names; do linklib="$l" done if test -z "$linklib"; then $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 exit $EXIT_FAILURE fi # This library was specified with -dlopen. if test "$pass" = dlopen; then if test -z "$libdir"; then $echo "$modename: cannot -dlopen a convenience library: \`$lib'" 1>&2 exit $EXIT_FAILURE fi if test -z "$dlname" || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlname, no dlopen support or we're linking # statically, we need to preload. We also need to preload any # dependent libraries so libltdl's deplib preloader doesn't # bomb out in the load deplibs phase. dlprefiles="$dlprefiles $lib $dependency_libs" else newdlfiles="$newdlfiles $lib" fi continue fi # $pass = dlopen # We need an absolute path. case $ladir in [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; *) abs_ladir=`cd "$ladir" && pwd` if test -z "$abs_ladir"; then $echo "$modename: warning: cannot determine absolute directory name of \`$ladir'" 1>&2 $echo "$modename: passing it literally to the linker, although it might fail" 1>&2 abs_ladir="$ladir" fi ;; esac laname=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` # Find the relevant object directory and library name. if test "X$installed" = Xyes; then if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then $echo "$modename: warning: library \`$lib' was moved." 1>&2 dir="$ladir" absdir="$abs_ladir" libdir="$abs_ladir" else dir="$libdir" absdir="$libdir" fi test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes else if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then dir="$ladir" absdir="$abs_ladir" # Remove this search path later notinst_path="$notinst_path $abs_ladir" else dir="$ladir/$objdir" absdir="$abs_ladir/$objdir" # Remove this search path later notinst_path="$notinst_path $abs_ladir" fi fi # $installed = yes name=`$echo "X$laname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` # This library was specified with -dlpreopen. if test "$pass" = dlpreopen; then if test -z "$libdir"; then $echo "$modename: cannot -dlpreopen a convenience library: \`$lib'" 1>&2 exit $EXIT_FAILURE fi # Prefer using a static library (so that no silly _DYNAMIC symbols # are required to link). if test -n "$old_library"; then newdlprefiles="$newdlprefiles $dir/$old_library" # Otherwise, use the dlname, so that lt_dlopen finds it. elif test -n "$dlname"; then newdlprefiles="$newdlprefiles $dir/$dlname" else newdlprefiles="$newdlprefiles $dir/$linklib" fi fi # $pass = dlpreopen if test -z "$libdir"; then # Link the convenience library if test "$linkmode" = lib; then deplibs="$dir/$old_library $deplibs" elif test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$dir/$old_library $compile_deplibs" finalize_deplibs="$dir/$old_library $finalize_deplibs" else deplibs="$lib $deplibs" # used for prog,scan pass fi continue fi if test "$linkmode" = prog && test "$pass" != link; then newlib_search_path="$newlib_search_path $ladir" deplibs="$lib $deplibs" linkalldeplibs=no if test "$link_all_deplibs" != no || test -z "$library_names" || test "$build_libtool_libs" = no; then linkalldeplibs=yes fi tmp_libs= for deplib in $dependency_libs; do case $deplib in -L*) newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`;; ### testsuite: skip nested quoting test esac # Need to link against all dependency_libs? if test "$linkalldeplibs" = yes; then deplibs="$deplib $deplibs" else # Need to hardcode shared library paths # or/and link against static libraries newdependency_libs="$deplib $newdependency_libs" fi if test "X$duplicate_deps" = "Xyes" ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$tmp_libs $deplib" done # for deplib continue fi # $linkmode = prog... if test "$linkmode,$pass" = "prog,link"; then if test -n "$library_names" && { test "$prefer_static_libs" = no || test -z "$old_library"; }; then # We need to hardcode the library path if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then # Make sure the rpath contains only unique directories. case "$temp_rpath " in *" $dir "*) ;; *" $absdir "*) ;; *) temp_rpath="$temp_rpath $absdir" ;; esac fi # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) compile_rpath="$compile_rpath $absdir" esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" esac ;; esac fi # $linkmode,$pass = prog,link... if test "$alldeplibs" = yes && { test "$deplibs_check_method" = pass_all || { test "$build_libtool_libs" = yes && test -n "$library_names"; }; }; then # We only need to search for static libraries continue fi fi link_static=no # Whether the deplib will be linked statically use_static_libs=$prefer_static_libs if test "$use_static_libs" = built && test "$installed" = yes ; then use_static_libs=no fi if test -n "$library_names" && { test "$use_static_libs" = no || test -z "$old_library"; }; then if test "$installed" = no; then notinst_deplibs="$notinst_deplibs $lib" need_relink=yes fi # This is a shared library # Warn about portability, can't link against -module's on # some systems (darwin) if test "$shouldnotlink" = yes && test "$pass" = link ; then $echo if test "$linkmode" = prog; then $echo "*** Warning: Linking the executable $output against the loadable module" else $echo "*** Warning: Linking the shared library $output against the loadable module" fi $echo "*** $linklib is not portable!" fi if test "$linkmode" = lib && test "$hardcode_into_libs" = yes; then # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) compile_rpath="$compile_rpath $absdir" esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" esac ;; esac fi if test -n "$old_archive_from_expsyms_cmds"; then # figure out the soname set dummy $library_names realname="$2" shift; shift libname=`eval \\$echo \"$libname_spec\"` # use dlname if we got it. it's perfectly good, no? if test -n "$dlname"; then soname="$dlname" elif test -n "$soname_spec"; then # bleh windows case $host in *cygwin* | mingw*) major=`expr $current - $age` versuffix="-$major" ;; esac eval soname=\"$soname_spec\" else soname="$realname" fi # Make a new name for the extract_expsyms_cmds to use soroot="$soname" soname=`$echo $soroot | ${SED} -e 's/^.*\///'` newlib="libimp-`$echo $soname | ${SED} 's/^lib//;s/\.dll$//'`.a" # If the library has no export list, then create one now if test -f "$output_objdir/$soname-def"; then : else $show "extracting exported symbol list from \`$soname'" save_ifs="$IFS"; IFS='~' cmds=$extract_expsyms_cmds for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" fi # Create $newlib if test -f "$output_objdir/$newlib"; then :; else $show "generating import library for \`$soname'" save_ifs="$IFS"; IFS='~' cmds=$old_archive_from_expsyms_cmds for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" fi # make sure the library variables are pointing to the new library dir=$output_objdir linklib=$newlib fi # test -n "$old_archive_from_expsyms_cmds" if test "$linkmode" = prog || test "$mode" != relink; then add_shlibpath= add_dir= add= lib_linked=yes case $hardcode_action in immediate | unsupported) if test "$hardcode_direct" = no; then add="$dir/$linklib" case $host in *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; *-*-sysv4*uw2*) add_dir="-L$dir" ;; *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ *-*-unixware7*) add_dir="-L$dir" ;; *-*-darwin* ) # if the lib is a module then we can not link against # it, someone is ignoring the new warnings I added if /usr/bin/file -L $add 2> /dev/null | $EGREP ": [^:]* bundle" >/dev/null ; then $echo "** Warning, lib $linklib is a module, not a shared library" if test -z "$old_library" ; then $echo $echo "** And there doesn't seem to be a static archive available" $echo "** The link will probably fail, sorry" else add="$dir/$old_library" fi fi esac elif test "$hardcode_minus_L" = no; then case $host in *-*-sunos*) add_shlibpath="$dir" ;; esac add_dir="-L$dir" add="-l$name" elif test "$hardcode_shlibpath_var" = no; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; relink) if test "$hardcode_direct" = yes; then add="$dir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$dir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) add_dir="$add_dir -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; *) lib_linked=no ;; esac if test "$lib_linked" != yes; then $echo "$modename: configuration error: unsupported hardcode properties" exit $EXIT_FAILURE fi if test -n "$add_shlibpath"; then case :$compile_shlibpath: in *":$add_shlibpath:"*) ;; *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;; esac fi if test "$linkmode" = prog; then test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" test -n "$add" && compile_deplibs="$add $compile_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" if test "$hardcode_direct" != yes && \ test "$hardcode_minus_L" != yes && \ test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; esac fi fi fi if test "$linkmode" = prog || test "$mode" = relink; then add_shlibpath= add_dir= add= # Finalize command for both is simple: just hardcode it. if test "$hardcode_direct" = yes; then add="$libdir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$libdir" add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; esac add="-l$name" elif test "$hardcode_automatic" = yes; then if test -n "$inst_prefix_dir" && test -f "$inst_prefix_dir$libdir/$linklib" ; then add="$inst_prefix_dir$libdir/$linklib" else add="$libdir/$linklib" fi else # We cannot seem to hardcode it, guess we'll fake it. add_dir="-L$libdir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) add_dir="$add_dir -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" fi if test "$linkmode" = prog; then test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" test -n "$add" && finalize_deplibs="$add $finalize_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" fi fi elif test "$linkmode" = prog; then # Here we assume that one of hardcode_direct or hardcode_minus_L # is not unsupported. This is valid on all known static and # shared platforms. if test "$hardcode_direct" != unsupported; then test -n "$old_library" && linklib="$old_library" compile_deplibs="$dir/$linklib $compile_deplibs" finalize_deplibs="$dir/$linklib $finalize_deplibs" else compile_deplibs="-l$name -L$dir $compile_deplibs" finalize_deplibs="-l$name -L$dir $finalize_deplibs" fi elif test "$build_libtool_libs" = yes; then # Not a shared library if test "$deplibs_check_method" != pass_all; then # We're trying link a shared library against a static one # but the system doesn't support it. # Just print a warning and add the library to dependency_libs so # that the program can be linked against the static library. $echo $echo "*** Warning: This system can not link to static lib archive $lib." $echo "*** I have the capability to make that library automatically link in when" $echo "*** you link to this library. But I can only do this if you have a" $echo "*** shared version of the library, which you do not appear to have." if test "$module" = yes; then $echo "*** But as you try to build a module library, libtool will still create " $echo "*** a static module, that should work as long as the dlopening application" $echo "*** is linked with the -dlopen flag to resolve symbols at runtime." if test -z "$global_symbol_pipe"; then $echo $echo "*** However, this would only work if libtool was able to extract symbol" $echo "*** lists from a program, using \`nm' or equivalent, but libtool could" $echo "*** not find such a program. So, this module is probably useless." $echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi else deplibs="$dir/$old_library $deplibs" link_static=yes fi fi # link shared/static library? if test "$linkmode" = lib; then if test -n "$dependency_libs" && { test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes || test "$link_static" = yes; }; then # Extract -R from dependency_libs temp_deplibs= for libdir in $dependency_libs; do case $libdir in -R*) temp_xrpath=`$echo "X$libdir" | $Xsed -e 's/^-R//'` case " $xrpath " in *" $temp_xrpath "*) ;; *) xrpath="$xrpath $temp_xrpath";; esac;; *) temp_deplibs="$temp_deplibs $libdir";; esac done dependency_libs="$temp_deplibs" fi newlib_search_path="$newlib_search_path $absdir" # Link against this library test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" # ... and its dependency_libs tmp_libs= for deplib in $dependency_libs; do newdependency_libs="$deplib $newdependency_libs" if test "X$duplicate_deps" = "Xyes" ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$tmp_libs $deplib" done if test "$link_all_deplibs" != no; then # Add the search paths of all dependency libraries for deplib in $dependency_libs; do case $deplib in -L*) path="$deplib" ;; *.la) dir=`$echo "X$deplib" | $Xsed -e 's%/[^/]*$%%'` test "X$dir" = "X$deplib" && dir="." # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2 absdir="$dir" fi ;; esac if grep "^installed=no" $deplib > /dev/null; then path="$absdir/$objdir" else eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` if test -z "$libdir"; then $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi if test "$absdir" != "$libdir"; then $echo "$modename: warning: \`$deplib' seems to be moved" 1>&2 fi path="$absdir" fi depdepl= case $host in *-*-darwin*) # we do not want to link against static libs, # but need to link against shared eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` if test -n "$deplibrary_names" ; then for tmp in $deplibrary_names ; do depdepl=$tmp done if test -f "$path/$depdepl" ; then depdepl="$path/$depdepl" fi # do not add paths which are already there case " $newlib_search_path " in *" $path "*) ;; *) newlib_search_path="$newlib_search_path $path";; esac fi path="" ;; *) path="-L$path" ;; esac ;; -l*) case $host in *-*-darwin*) # Again, we only want to link against shared libraries eval tmp_libs=`$echo "X$deplib" | $Xsed -e "s,^\-l,,"` for tmp in $newlib_search_path ; do if test -f "$tmp/lib$tmp_libs.dylib" ; then eval depdepl="$tmp/lib$tmp_libs.dylib" break fi done path="" ;; *) continue ;; esac ;; *) continue ;; esac case " $deplibs " in *" $path "*) ;; *) deplibs="$path $deplibs" ;; esac case " $deplibs " in *" $depdepl "*) ;; *) deplibs="$depdepl $deplibs" ;; esac done fi # link_all_deplibs != no fi # linkmode = lib done # for deplib in $libs dependency_libs="$newdependency_libs" if test "$pass" = dlpreopen; then # Link the dlpreopened libraries before other libraries for deplib in $save_deplibs; do deplibs="$deplib $deplibs" done fi if test "$pass" != dlopen; then if test "$pass" != conv; then # Make sure lib_search_path contains only unique directories. lib_search_path= for dir in $newlib_search_path; do case "$lib_search_path " in *" $dir "*) ;; *) lib_search_path="$lib_search_path $dir" ;; esac done newlib_search_path= fi if test "$linkmode,$pass" != "prog,link"; then vars="deplibs" else vars="compile_deplibs finalize_deplibs" fi for var in $vars dependency_libs; do # Add libraries to $var in reverse order eval tmp_libs=\"\$$var\" new_libs= for deplib in $tmp_libs; do # FIXME: Pedantically, this is the right thing to do, so # that some nasty dependency loop isn't accidentally # broken: #new_libs="$deplib $new_libs" # Pragmatically, this seems to cause very few problems in # practice: case $deplib in -L*) new_libs="$deplib $new_libs" ;; -R*) ;; *) # And here is the reason: when a library appears more # than once as an explicit dependence of a library, or # is implicitly linked in more than once by the # compiler, it is considered special, and multiple # occurrences thereof are not removed. Compare this # with having the same library being listed as a # dependency of multiple other libraries: in this case, # we know (pedantically, we assume) the library does not # need to be listed more than once, so we keep only the # last copy. This is not always right, but it is rare # enough that we require users that really mean to play # such unportable linking tricks to link the library # using -Wl,-lname, so that libtool does not consider it # for duplicate removal. case " $specialdeplibs " in *" $deplib "*) new_libs="$deplib $new_libs" ;; *) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$deplib $new_libs" ;; esac ;; esac ;; esac done tmp_libs= for deplib in $new_libs; do case $deplib in -L*) case " $tmp_libs " in *" $deplib "*) ;; *) tmp_libs="$tmp_libs $deplib" ;; esac ;; *) tmp_libs="$tmp_libs $deplib" ;; esac done eval $var=\"$tmp_libs\" done # for var fi # Last step: remove runtime libs from dependency_libs # (they stay in deplibs) tmp_libs= for i in $dependency_libs ; do case " $predeps $postdeps $compiler_lib_search_path " in *" $i "*) i="" ;; esac if test -n "$i" ; then tmp_libs="$tmp_libs $i" fi done dependency_libs=$tmp_libs done # for pass if test "$linkmode" = prog; then dlfiles="$newdlfiles" dlprefiles="$newdlprefiles" fi case $linkmode in oldlib) if test -n "$deplibs"; then $echo "$modename: warning: \`-l' and \`-L' are ignored for archives" 1>&2 fi if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then $echo "$modename: warning: \`-dlopen' is ignored for archives" 1>&2 fi if test -n "$rpath"; then $echo "$modename: warning: \`-rpath' is ignored for archives" 1>&2 fi if test -n "$xrpath"; then $echo "$modename: warning: \`-R' is ignored for archives" 1>&2 fi if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info/-version-number' is ignored for archives" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for archives" 1>&2 fi if test -n "$export_symbols" || test -n "$export_symbols_regex"; then $echo "$modename: warning: \`-export-symbols' is ignored for archives" 1>&2 fi # Now set the variables for building old libraries. build_libtool_libs=no oldlibs="$output" objs="$objs$old_deplibs" ;; lib) # Make sure we only generate libraries of the form `libNAME.la'. case $outputname in lib*) name=`$echo "X$outputname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" ;; *) if test "$module" = no; then $echo "$modename: libtool library \`$output' must begin with \`lib'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi if test "$need_lib_prefix" != no; then # Add the "lib" prefix for modules if required name=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" else libname=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` fi ;; esac if test -n "$objs"; then if test "$deplibs_check_method" != pass_all; then $echo "$modename: cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 2>&1 exit $EXIT_FAILURE else $echo $echo "*** Warning: Linking the shared library $output against the non-libtool" $echo "*** objects $objs is not portable!" libobjs="$libobjs $objs" fi fi if test "$dlself" != no; then $echo "$modename: warning: \`-dlopen self' is ignored for libtool libraries" 1>&2 fi set dummy $rpath if test "$#" -gt 2; then $echo "$modename: warning: ignoring multiple \`-rpath's for a libtool library" 1>&2 fi install_libdir="$2" oldlibs= if test -z "$rpath"; then if test "$build_libtool_libs" = yes; then # Building a libtool convenience library. # Some compilers have problems with a `.al' extension so # convenience libraries should have the same extension an # archive normally would. oldlibs="$output_objdir/$libname.$libext $oldlibs" build_libtool_libs=convenience build_old_libs=yes fi if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info/-version-number' is ignored for convenience libraries" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for convenience libraries" 1>&2 fi else # Parse the version information argument. save_ifs="$IFS"; IFS=':' set dummy $vinfo 0 0 0 IFS="$save_ifs" if test -n "$8"; then $echo "$modename: too many parameters to \`-version-info'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi # convert absolute version numbers to libtool ages # this retains compatibility with .la files and attempts # to make the code below a bit more comprehensible case $vinfo_number in yes) number_major="$2" number_minor="$3" number_revision="$4" # # There are really only two kinds -- those that # use the current revision as the major version # and those that subtract age and use age as # a minor version. But, then there is irix # which has an extra 1 added just for fun # case $version_type in darwin|linux|osf|windows) current=`expr $number_major + $number_minor` age="$number_minor" revision="$number_revision" ;; freebsd-aout|freebsd-elf|sunos) current="$number_major" revision="$number_minor" age="0" ;; irix|nonstopux) current=`expr $number_major + $number_minor - 1` age="$number_minor" revision="$number_minor" ;; esac ;; no) current="$2" revision="$3" age="$4" ;; esac # Check that each of the things are valid numbers. case $current in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) $echo "$modename: CURRENT \`$current' must be a nonnegative integer" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit $EXIT_FAILURE ;; esac case $revision in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) $echo "$modename: REVISION \`$revision' must be a nonnegative integer" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit $EXIT_FAILURE ;; esac case $age in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) $echo "$modename: AGE \`$age' must be a nonnegative integer" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit $EXIT_FAILURE ;; esac if test "$age" -gt "$current"; then $echo "$modename: AGE \`$age' is greater than the current interface number \`$current'" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit $EXIT_FAILURE fi # Calculate the version variables. major= versuffix= verstring= case $version_type in none) ;; darwin) # Like Linux, but with the current version available in # verstring for coding it into the library header major=.`expr $current - $age` versuffix="$major.$age.$revision" # Darwin ld doesn't like 0 for these options... minor_current=`expr $current + 1` verstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" ;; freebsd-aout) major=".$current" versuffix=".$current.$revision"; ;; freebsd-elf) major=".$current" versuffix=".$current"; ;; irix | nonstopux) major=`expr $current - $age + 1` case $version_type in nonstopux) verstring_prefix=nonstopux ;; *) verstring_prefix=sgi ;; esac verstring="$verstring_prefix$major.$revision" # Add in all the interfaces that we are compatible with. loop=$revision while test "$loop" -ne 0; do iface=`expr $revision - $loop` loop=`expr $loop - 1` verstring="$verstring_prefix$major.$iface:$verstring" done # Before this point, $major must not contain `.'. major=.$major versuffix="$major.$revision" ;; linux) major=.`expr $current - $age` versuffix="$major.$age.$revision" ;; osf) major=.`expr $current - $age` versuffix=".$current.$age.$revision" verstring="$current.$age.$revision" # Add in all the interfaces that we are compatible with. loop=$age while test "$loop" -ne 0; do iface=`expr $current - $loop` loop=`expr $loop - 1` verstring="$verstring:${iface}.0" done # Make executables depend on our current version. verstring="$verstring:${current}.0" ;; sunos) major=".$current" versuffix=".$current.$revision" ;; windows) # Use '-' rather than '.', since we only want one # extension on DOS 8.3 filesystems. major=`expr $current - $age` versuffix="-$major" ;; *) $echo "$modename: unknown library version type \`$version_type'" 1>&2 $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 exit $EXIT_FAILURE ;; esac # Clear the version info if we defaulted, and they specified a release. if test -z "$vinfo" && test -n "$release"; then major= case $version_type in darwin) # we can't check for "0.0" in archive_cmds due to quoting # problems, so we reset it completely verstring= ;; *) verstring="0.0" ;; esac if test "$need_version" = no; then versuffix= else versuffix=".0.0" fi fi # Remove version info from name if versioning should be avoided if test "$avoid_version" = yes && test "$need_version" = no; then major= versuffix= verstring="" fi # Check to see if the archive will have undefined symbols. if test "$allow_undefined" = yes; then if test "$allow_undefined_flag" = unsupported; then $echo "$modename: warning: undefined symbols not allowed in $host shared libraries" 1>&2 build_libtool_libs=no build_old_libs=yes fi else # Don't allow undefined symbols. allow_undefined_flag="$no_undefined_flag" fi fi if test "$mode" != relink; then # Remove our outputs, but don't remove object files since they # may have been created when compiling PIC objects. removelist= tempremovelist=`$echo "$output_objdir/*"` for p in $tempremovelist; do case $p in *.$objext) ;; $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) if test "X$precious_files_regex" != "X"; then if echo $p | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 then continue fi fi removelist="$removelist $p" ;; *) ;; esac done if test -n "$removelist"; then $show "${rm}r $removelist" $run ${rm}r $removelist fi fi # Now set the variables for building old libraries. if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then oldlibs="$oldlibs $output_objdir/$libname.$libext" # Transform .lo files to .o files. oldobjs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP` fi # Eliminate all temporary directories. for path in $notinst_path; do lib_search_path=`$echo "$lib_search_path " | ${SED} -e "s% $path % %g"` deplibs=`$echo "$deplibs " | ${SED} -e "s% -L$path % %g"` dependency_libs=`$echo "$dependency_libs " | ${SED} -e "s% -L$path % %g"` done if test -n "$xrpath"; then # If the user specified any rpath flags, then add them. temp_xrpath= for libdir in $xrpath; do temp_xrpath="$temp_xrpath -R$libdir" case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" ;; esac done if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then dependency_libs="$temp_xrpath $dependency_libs" fi fi # Make sure dlfiles contains only unique files that won't be dlpreopened old_dlfiles="$dlfiles" dlfiles= for lib in $old_dlfiles; do case " $dlprefiles $dlfiles " in *" $lib "*) ;; *) dlfiles="$dlfiles $lib" ;; esac done # Make sure dlprefiles contains only unique files old_dlprefiles="$dlprefiles" dlprefiles= for lib in $old_dlprefiles; do case "$dlprefiles " in *" $lib "*) ;; *) dlprefiles="$dlprefiles $lib" ;; esac done if test "$build_libtool_libs" = yes; then if test -n "$rpath"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos*) # these systems don't actually have a c library (as such)! ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C library is in the System framework deplibs="$deplibs -framework System" ;; *-*-netbsd*) # Don't link with libc until the a.out ld.so is fixed. ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work ;; *) # Add libc to deplibs on all other systems if necessary. if test "$build_libtool_need_lc" = "yes"; then deplibs="$deplibs -lc" fi ;; esac fi # Transform deplibs into only deplibs that can be linked in shared. name_save=$name libname_save=$libname release_save=$release versuffix_save=$versuffix major_save=$major # I'm not sure if I'm treating the release correctly. I think # release should show up in the -l (ie -lgmp5) so we don't want to # add it in twice. Is that correct? release="" versuffix="" major="" newdeplibs= droppeddeps=no case $deplibs_check_method in pass_all) # Don't check for shared/static. Everything works. # This might be a little naive. We might want to check # whether the library exists or not. But this is on # osf3 & osf4 and I'm not really sure... Just # implementing what was already the behavior. newdeplibs=$deplibs ;; test_compile) # This code stresses the "libraries are programs" paradigm to its # limits. Maybe even breaks it. We compile a program, linking it # against the deplibs as a proxy for the library. Then we can check # whether they linked in statically or dynamically with ldd. $rm conftest.c cat > conftest.c </dev/null` for potent_lib in $potential_libs; do # Follow soft links. if ls -lLd "$potent_lib" 2>/dev/null \ | grep " -> " >/dev/null; then continue fi # The statement above tries to avoid entering an # endless loop below, in case of cyclic links. # We might still enter an endless loop, since a link # loop can be closed while we follow links, # but so what? potlib="$potent_lib" while test -h "$potlib" 2>/dev/null; do potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` case $potliblink in [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; *) potlib=`$echo "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";; esac done if eval $file_magic_cmd \"\$potlib\" 2>/dev/null \ | ${SED} 10q \ | $EGREP "$file_magic_regex" > /dev/null; then newdeplibs="$newdeplibs $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes $echo $echo "*** Warning: linker path does not have real file for library $a_deplib." $echo "*** I have the capability to make that library automatically link in when" $echo "*** you link to this library. But I can only do this if you have a" $echo "*** shared version of the library, which you do not appear to have" $echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $echo "*** with $libname but no candidates were found. (...for file magic test)" else $echo "*** with $libname and none of the candidates passed a file format test" $echo "*** using a file magic. Last file checked: $potlib" fi fi else # Add a -L argument. newdeplibs="$newdeplibs $a_deplib" fi done # Gone through all deplibs. ;; match_pattern*) set dummy $deplibs_check_method match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"` for a_deplib in $deplibs; do name=`expr $a_deplib : '-l\(.*\)'` # If $name is empty we are operating on a -L argument. if test -n "$name" && test "$name" != "0"; then if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $a_deplib "*) newdeplibs="$newdeplibs $a_deplib" a_deplib="" ;; esac fi if test -n "$a_deplib" ; then libname=`eval \\$echo \"$libname_spec\"` for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do potential_libs=`ls $i/$libname[.-]* 2>/dev/null` for potent_lib in $potential_libs; do potlib="$potent_lib" # see symlink-check above in file_magic test if eval $echo \"$potent_lib\" 2>/dev/null \ | ${SED} 10q \ | $EGREP "$match_pattern_regex" > /dev/null; then newdeplibs="$newdeplibs $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes $echo $echo "*** Warning: linker path does not have real file for library $a_deplib." $echo "*** I have the capability to make that library automatically link in when" $echo "*** you link to this library. But I can only do this if you have a" $echo "*** shared version of the library, which you do not appear to have" $echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $echo "*** with $libname but no candidates were found. (...for regex pattern test)" else $echo "*** with $libname and none of the candidates passed a file format test" $echo "*** using a regex pattern. Last file checked: $potlib" fi fi else # Add a -L argument. newdeplibs="$newdeplibs $a_deplib" fi done # Gone through all deplibs. ;; none | unknown | *) newdeplibs="" tmp_deplibs=`$echo "X $deplibs" | $Xsed -e 's/ -lc$//' \ -e 's/ -[LR][^ ]*//g'` if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then for i in $predeps $postdeps ; do # can't use Xsed below, because $i might contain '/' tmp_deplibs=`$echo "X $tmp_deplibs" | ${SED} -e "1s,^X,," -e "s,$i,,"` done fi if $echo "X $tmp_deplibs" | $Xsed -e 's/[ ]//g' \ | grep . >/dev/null; then $echo if test "X$deplibs_check_method" = "Xnone"; then $echo "*** Warning: inter-library dependencies are not supported in this platform." else $echo "*** Warning: inter-library dependencies are not known to be supported." fi $echo "*** All declared inter-library dependencies are being dropped." droppeddeps=yes fi ;; esac versuffix=$versuffix_save major=$major_save release=$release_save libname=$libname_save name=$name_save case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework newdeplibs=`$echo "X $newdeplibs" | $Xsed -e 's/ -lc / -framework System /'` ;; esac if test "$droppeddeps" = yes; then if test "$module" = yes; then $echo $echo "*** Warning: libtool could not satisfy all declared inter-library" $echo "*** dependencies of module $libname. Therefore, libtool will create" $echo "*** a static module, that should work as long as the dlopening" $echo "*** application is linked with the -dlopen flag." if test -z "$global_symbol_pipe"; then $echo $echo "*** However, this would only work if libtool was able to extract symbol" $echo "*** lists from a program, using \`nm' or equivalent, but libtool could" $echo "*** not find such a program. So, this module is probably useless." $echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi else $echo "*** The inter-library dependencies that have been dropped here will be" $echo "*** automatically added whenever a program is linked with this library" $echo "*** or is declared to -dlopen it." if test "$allow_undefined" = no; then $echo $echo "*** Since this library must not contain undefined symbols," $echo "*** because either the platform does not support them or" $echo "*** it was explicitly requested with -no-undefined," $echo "*** libtool will only create a static version of it." if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi fi fi # Done checking deplibs! deplibs=$newdeplibs fi # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $deplibs " in *" -L$path/$objdir "*) new_libs="$new_libs -L$path/$objdir" ;; esac ;; esac done for deplib in $deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$new_libs $deplib" ;; esac ;; *) new_libs="$new_libs $deplib" ;; esac done deplibs="$new_libs" # All the library-specific variables (install_libdir is set above). library_names= old_library= dlname= # Test again, we may have decided not to build it any more if test "$build_libtool_libs" = yes; then if test "$hardcode_into_libs" = yes; then # Hardcode the library paths hardcode_libdirs= dep_rpath= rpath="$finalize_rpath" test "$mode" != relink && rpath="$compile_rpath$rpath" for libdir in $rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" dep_rpath="$dep_rpath $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) perm_rpath="$perm_rpath $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" if test -n "$hardcode_libdir_flag_spec_ld"; then eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" else eval dep_rpath=\"$hardcode_libdir_flag_spec\" fi fi if test -n "$runpath_var" && test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do rpath="$rpath$dir:" done eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" fi test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" fi shlibpath="$finalize_shlibpath" test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath" if test -n "$shlibpath"; then eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" fi # Get the real and link names of the library. eval shared_ext=\"$shrext_cmds\" eval library_names=\"$library_names_spec\" set dummy $library_names realname="$2" shift; shift if test -n "$soname_spec"; then eval soname=\"$soname_spec\" else soname="$realname" fi if test -z "$dlname"; then dlname=$soname fi lib="$output_objdir/$realname" linknames= for link do linknames="$linknames $link" done # Use standard objects if they are pic test -z "$pic_flag" && libobjs=`$echo "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` # Prepare the list of exported symbols if test -z "$export_symbols"; then if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then $show "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $run $rm $export_symbols cmds=$export_symbols_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" if len=`expr "X$cmd" : ".*"` && test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then $show "$cmd" $run eval "$cmd" || exit $? skipped_export=false else # The command line is too long to execute in one step. $show "using reloadable object file for export list..." skipped_export=: # Break out early, otherwise skipped_export may be # set to false by a later but shorter cmd. break fi done IFS="$save_ifs" if test -n "$export_symbols_regex"; then $show "$EGREP -e \"$export_symbols_regex\" \"$export_symbols\" > \"${export_symbols}T\"" $run eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' $show "$mv \"${export_symbols}T\" \"$export_symbols\"" $run eval '$mv "${export_symbols}T" "$export_symbols"' fi fi fi if test -n "$export_symbols" && test -n "$include_expsyms"; then $run eval '$echo "X$include_expsyms" | $SP2NL >> "$export_symbols"' fi tmp_deplibs= for test_deplib in $deplibs; do case " $convenience " in *" $test_deplib "*) ;; *) tmp_deplibs="$tmp_deplibs $test_deplib" ;; esac done deplibs="$tmp_deplibs" if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then save_libobjs=$libobjs eval libobjs=\"\$libobjs $whole_archive_flag_spec\" else gentop="$output_objdir/${outputname}x" generated="$generated $gentop" func_extract_archives $gentop $convenience libobjs="$libobjs $func_extract_archives_result" fi fi if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then eval flag=\"$thread_safe_flag_spec\" linker_flags="$linker_flags $flag" fi # Make a backup of the uninstalled library when relinking if test "$mode" = relink; then $run eval '(cd $output_objdir && $rm ${realname}U && $mv $realname ${realname}U)' || exit $? fi # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then eval test_cmds=\"$module_expsym_cmds\" cmds=$module_expsym_cmds else eval test_cmds=\"$module_cmds\" cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then eval test_cmds=\"$archive_expsym_cmds\" cmds=$archive_expsym_cmds else eval test_cmds=\"$archive_cmds\" cmds=$archive_cmds fi fi if test "X$skipped_export" != "X:" && len=`expr "X$test_cmds" : ".*" 2>/dev/null` && test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then : else # The command line is too long to link in one step, link piecewise. $echo "creating reloadable object files..." # Save the value of $output and $libobjs because we want to # use them later. If we have whole_archive_flag_spec, we # want to use save_libobjs as it was before # whole_archive_flag_spec was expanded, because we can't # assume the linker understands whole_archive_flag_spec. # This may have to be revisited, in case too many # convenience libraries get linked in and end up exceeding # the spec. if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then save_libobjs=$libobjs fi save_output=$output output_la=`$echo "X$output" | $Xsed -e "$basename"` # Clear the reloadable object creation command queue and # initialize k to one. test_cmds= concat_cmds= objlist= delfiles= last_robj= k=1 output=$output_objdir/$output_la-${k}.$objext # Loop over the list of objects to be linked. for obj in $save_libobjs do eval test_cmds=\"$reload_cmds $objlist $last_robj\" if test "X$objlist" = X || { len=`expr "X$test_cmds" : ".*" 2>/dev/null` && test "$len" -le "$max_cmd_len"; }; then objlist="$objlist $obj" else # The command $test_cmds is almost too long, add a # command to the queue. if test "$k" -eq 1 ; then # The first file doesn't have a previous command to add. eval concat_cmds=\"$reload_cmds $objlist $last_robj\" else # All subsequent reloadable object files will link in # the last one created. eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj\" fi last_robj=$output_objdir/$output_la-${k}.$objext k=`expr $k + 1` output=$output_objdir/$output_la-${k}.$objext objlist=$obj len=1 fi done # Handle the remaining objects by creating one last # reloadable object file. All subsequent reloadable object # files will link in the last one created. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\" if ${skipped_export-false}; then $show "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $run $rm $export_symbols libobjs=$output # Append the command to create the export file. eval concat_cmds=\"\$concat_cmds~$export_symbols_cmds\" fi # Set up a command to remove the reloadable object files # after they are used. i=0 while test "$i" -lt "$k" do i=`expr $i + 1` delfiles="$delfiles $output_objdir/$output_la-${i}.$objext" done $echo "creating a temporary reloadable object file: $output" # Loop through the commands generated above and execute them. save_ifs="$IFS"; IFS='~' for cmd in $concat_cmds; do IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" libobjs=$output # Restore the value of output. output=$save_output if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then eval libobjs=\"\$libobjs $whole_archive_flag_spec\" fi # Expand the library linking commands again to reset the # value of $libobjs for piecewise linking. # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then cmds=$module_expsym_cmds else cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then cmds=$archive_expsym_cmds else cmds=$archive_cmds fi fi # Append the command to remove the reloadable object files # to the just-reset $cmds. eval cmds=\"\$cmds~\$rm $delfiles\" fi save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$mode" = relink; then $run eval '(cd $output_objdir && $rm ${realname}T && $mv ${realname}U $realname)' fi exit $lt_exit } done IFS="$save_ifs" # Restore the uninstalled library and exit if test "$mode" = relink; then $run eval '(cd $output_objdir && $rm ${realname}T && $mv $realname ${realname}T && $mv "$realname"U $realname)' || exit $? if test -n "$convenience"; then if test -z "$whole_archive_flag_spec"; then $show "${rm}r $gentop" $run ${rm}r "$gentop" fi fi exit $EXIT_SUCCESS fi # Create links to the real library. for linkname in $linknames; do if test "$realname" != "$linkname"; then $show "(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)" $run eval '(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)' || exit $? fi done # If -module or -export-dynamic was specified, set the dlname. if test "$module" = yes || test "$export_dynamic" = yes; then # On all known operating systems, these are identical. dlname="$soname" fi fi ;; obj) if test -n "$deplibs"; then $echo "$modename: warning: \`-l' and \`-L' are ignored for objects" 1>&2 fi if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then $echo "$modename: warning: \`-dlopen' is ignored for objects" 1>&2 fi if test -n "$rpath"; then $echo "$modename: warning: \`-rpath' is ignored for objects" 1>&2 fi if test -n "$xrpath"; then $echo "$modename: warning: \`-R' is ignored for objects" 1>&2 fi if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info' is ignored for objects" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for objects" 1>&2 fi case $output in *.lo) if test -n "$objs$old_deplibs"; then $echo "$modename: cannot build library object \`$output' from non-libtool objects" 1>&2 exit $EXIT_FAILURE fi libobj="$output" obj=`$echo "X$output" | $Xsed -e "$lo2o"` ;; *) libobj= obj="$output" ;; esac # Delete the old objects. $run $rm $obj $libobj # Objects from convenience libraries. This assumes # single-version convenience libraries. Whenever we create # different ones for PIC/non-PIC, this we'll have to duplicate # the extraction. reload_conv_objs= gentop= # reload_cmds runs $LD directly, so let us get rid of # -Wl from whole_archive_flag_spec wl= if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then eval reload_conv_objs=\"\$reload_objs $whole_archive_flag_spec\" else gentop="$output_objdir/${obj}x" generated="$generated $gentop" func_extract_archives $gentop $convenience reload_conv_objs="$reload_objs $func_extract_archives_result" fi fi # Create the old-style object. reload_objs="$objs$old_deplibs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test output="$obj" cmds=$reload_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" # Exit if we aren't doing a library object file. if test -z "$libobj"; then if test -n "$gentop"; then $show "${rm}r $gentop" $run ${rm}r $gentop fi exit $EXIT_SUCCESS fi if test "$build_libtool_libs" != yes; then if test -n "$gentop"; then $show "${rm}r $gentop" $run ${rm}r $gentop fi # Create an invalid libtool object if no PIC, so that we don't # accidentally link it into a program. # $show "echo timestamp > $libobj" # $run eval "echo timestamp > $libobj" || exit $? exit $EXIT_SUCCESS fi if test -n "$pic_flag" || test "$pic_mode" != default; then # Only do commands if we really have different PIC objects. reload_objs="$libobjs $reload_conv_objs" output="$libobj" cmds=$reload_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" fi if test -n "$gentop"; then $show "${rm}r $gentop" $run ${rm}r $gentop fi exit $EXIT_SUCCESS ;; prog) case $host in *cygwin*) output=`$echo $output | ${SED} -e 's,.exe$,,;s,$,.exe,'` ;; esac if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info' is ignored for programs" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for programs" 1>&2 fi if test "$preload" = yes; then if test "$dlopen_support" = unknown && test "$dlopen_self" = unknown && test "$dlopen_self_static" = unknown; then $echo "$modename: warning: \`AC_LIBTOOL_DLOPEN' not used. Assuming no dlopen support." fi fi case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework compile_deplibs=`$echo "X $compile_deplibs" | $Xsed -e 's/ -lc / -framework System /'` finalize_deplibs=`$echo "X $finalize_deplibs" | $Xsed -e 's/ -lc / -framework System /'` ;; esac case $host in *darwin*) # Don't allow lazy linking, it breaks C++ global constructors if test "$tagname" = CXX ; then compile_command="$compile_command ${wl}-bind_at_load" finalize_command="$finalize_command ${wl}-bind_at_load" fi ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $compile_deplibs " in *" -L$path/$objdir "*) new_libs="$new_libs -L$path/$objdir" ;; esac ;; esac done for deplib in $compile_deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$new_libs $deplib" ;; esac ;; *) new_libs="$new_libs $deplib" ;; esac done compile_deplibs="$new_libs" compile_command="$compile_command $compile_deplibs" finalize_command="$finalize_command $finalize_deplibs" if test -n "$rpath$xrpath"; then # If the user specified any rpath flags, then add them. for libdir in $rpath $xrpath; do # This is the magic to use -rpath. case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" ;; esac done fi # Now hardcode the library paths rpath= hardcode_libdirs= for libdir in $compile_rpath $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" rpath="$rpath $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) perm_rpath="$perm_rpath $libdir" ;; esac fi case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) testbindir=`$echo "X$libdir" | $Xsed -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$libdir:"*) ;; *) dllsearchpath="$dllsearchpath:$libdir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; *) dllsearchpath="$dllsearchpath:$testbindir";; esac ;; esac done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi compile_rpath="$rpath" rpath= hardcode_libdirs= for libdir in $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" rpath="$rpath $flag" fi elif test -n "$runpath_var"; then case "$finalize_perm_rpath " in *" $libdir "*) ;; *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi finalize_rpath="$rpath" if test -n "$libobjs" && test "$build_old_libs" = yes; then # Transform all the library objects into standard objects. compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` fi dlsyms= if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then if test -n "$NM" && test -n "$global_symbol_pipe"; then dlsyms="${outputname}S.c" else $echo "$modename: not configured to extract global symbols from dlpreopened files" 1>&2 fi fi if test -n "$dlsyms"; then case $dlsyms in "") ;; *.c) # Discover the nlist of each of the dlfiles. nlist="$output_objdir/${outputname}.nm" $show "$rm $nlist ${nlist}S ${nlist}T" $run $rm "$nlist" "${nlist}S" "${nlist}T" # Parse the name list into a source file. $show "creating $output_objdir/$dlsyms" test -z "$run" && $echo > "$output_objdir/$dlsyms" "\ /* $dlsyms - symbol resolution table for \`$outputname' dlsym emulation. */ /* Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP */ #ifdef __cplusplus extern \"C\" { #endif /* Prevent the only kind of declaration conflicts we can make. */ #define lt_preloaded_symbols some_other_symbol /* External symbol declarations for the compiler. */\ " if test "$dlself" = yes; then $show "generating symbol list for \`$output'" test -z "$run" && $echo ': @PROGRAM@ ' > "$nlist" # Add our own program objects to the symbol list. progfiles=`$echo "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` for arg in $progfiles; do $show "extracting global C symbols from \`$arg'" $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" done if test -n "$exclude_expsyms"; then $run eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' $run eval '$mv "$nlist"T "$nlist"' fi if test -n "$export_symbols_regex"; then $run eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' $run eval '$mv "$nlist"T "$nlist"' fi # Prepare the list of exported symbols if test -z "$export_symbols"; then export_symbols="$output_objdir/$outputname.exp" $run $rm $export_symbols $run eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' case $host in *cygwin* | *mingw* ) $run eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' $run eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' ;; esac else $run eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' $run eval 'grep -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' $run eval 'mv "$nlist"T "$nlist"' case $host in *cygwin* | *mingw* ) $run eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' $run eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' ;; esac fi fi for arg in $dlprefiles; do $show "extracting global C symbols from \`$arg'" name=`$echo "$arg" | ${SED} -e 's%^.*/%%'` $run eval '$echo ": $name " >> "$nlist"' $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" done if test -z "$run"; then # Make sure we have at least an empty file. test -f "$nlist" || : > "$nlist" if test -n "$exclude_expsyms"; then $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T $mv "$nlist"T "$nlist" fi # Try sorting and uniquifying the output. if grep -v "^: " < "$nlist" | if sort -k 3 /dev/null 2>&1; then sort -k 3 else sort +2 fi | uniq > "$nlist"S; then : else grep -v "^: " < "$nlist" > "$nlist"S fi if test -f "$nlist"S; then eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$dlsyms"' else $echo '/* NONE */' >> "$output_objdir/$dlsyms" fi $echo >> "$output_objdir/$dlsyms" "\ #undef lt_preloaded_symbols #if defined (__STDC__) && __STDC__ # define lt_ptr void * #else # define lt_ptr char * # define const #endif /* The mapping between symbol names and symbols. */ " case $host in *cygwin* | *mingw* ) $echo >> "$output_objdir/$dlsyms" "\ /* DATA imports from DLLs on WIN32 can't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs */ struct { " ;; * ) $echo >> "$output_objdir/$dlsyms" "\ const struct { " ;; esac $echo >> "$output_objdir/$dlsyms" "\ const char *name; lt_ptr address; } lt_preloaded_symbols[] = {\ " eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$dlsyms" $echo >> "$output_objdir/$dlsyms" "\ {0, (lt_ptr) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt_preloaded_symbols; } #endif #ifdef __cplusplus } #endif\ " fi pic_flag_for_symtable= case $host in # compiling the symbol table file with pic_flag works around # a FreeBSD bug that causes programs to crash when -lm is # linked before any other PIC object. But we must not use # pic_flag when linking with -static. The problem exists in # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) case "$compile_command " in *" -static "*) ;; *) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND";; esac;; *-*-hpux*) case "$compile_command " in *" -static "*) ;; *) pic_flag_for_symtable=" $pic_flag";; esac esac # Now compile the dynamic symbol file. $show "(cd $output_objdir && $LTCC $LTCFLAGS -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")" $run eval '(cd $output_objdir && $LTCC $LTCFLAGS -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $? # Clean up the generated files. $show "$rm $output_objdir/$dlsyms $nlist ${nlist}S ${nlist}T" $run $rm "$output_objdir/$dlsyms" "$nlist" "${nlist}S" "${nlist}T" # Transform the symbol file into the correct name. case $host in *cygwin* | *mingw* ) if test -f "$output_objdir/${outputname}.def" ; then compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}.def $output_objdir/${outputname}S.${objext}%"` finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}.def $output_objdir/${outputname}S.${objext}%"` else compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` fi ;; * ) compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` ;; esac ;; *) $echo "$modename: unknown suffix for \`$dlsyms'" 1>&2 exit $EXIT_FAILURE ;; esac else # We keep going just in case the user didn't refer to # lt_preloaded_symbols. The linker will fail if global_symbol_pipe # really was required. # Nullify the symbol file. compile_command=`$echo "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"` finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` fi if test "$need_relink" = no || test "$build_libtool_libs" != yes; then # Replace the output file specification. compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` link_command="$compile_command$compile_rpath" # We have no uninstalled library dependencies, so finalize right now. $show "$link_command" $run eval "$link_command" exit_status=$? # Delete the generated files. if test -n "$dlsyms"; then $show "$rm $output_objdir/${outputname}S.${objext}" $run $rm "$output_objdir/${outputname}S.${objext}" fi exit $exit_status fi if test -n "$shlibpath_var"; then # We should set the shlibpath_var rpath= for dir in $temp_rpath; do case $dir in [\\/]* | [A-Za-z]:[\\/]*) # Absolute path. rpath="$rpath$dir:" ;; *) # Relative path: add a thisdir entry. rpath="$rpath\$thisdir/$dir:" ;; esac done temp_rpath="$rpath" fi if test -n "$compile_shlibpath$finalize_shlibpath"; then compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" fi if test -n "$finalize_shlibpath"; then finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" fi compile_var= finalize_var= if test -n "$runpath_var"; then if test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do rpath="$rpath$dir:" done compile_var="$runpath_var=\"$rpath\$$runpath_var\" " fi if test -n "$finalize_perm_rpath"; then # We should set the runpath_var. rpath= for dir in $finalize_perm_rpath; do rpath="$rpath$dir:" done finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " fi fi if test "$no_install" = yes; then # We don't need to create a wrapper script. link_command="$compile_var$compile_command$compile_rpath" # Replace the output file specification. link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` # Delete the old output file. $run $rm $output # Link the executable and exit $show "$link_command" $run eval "$link_command" || exit $? exit $EXIT_SUCCESS fi if test "$hardcode_action" = relink; then # Fast installation is not supported link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" $echo "$modename: warning: this platform does not like uninstalled shared libraries" 1>&2 $echo "$modename: \`$output' will be relinked during installation" 1>&2 else if test "$fast_install" != no; then link_command="$finalize_var$compile_command$finalize_rpath" if test "$fast_install" = yes; then relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'` else # fast_install is set to needless relink_command= fi else link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" fi fi # Replace the output file specification. link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` # Delete the old output files. $run $rm $output $output_objdir/$outputname $output_objdir/lt-$outputname $show "$link_command" $run eval "$link_command" || exit $? # Now create the wrapper script. $show "creating $output" # Quote the relink command for shipping. if test -n "$relink_command"; then # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"` relink_command="$var=\"$var_value\"; export $var; $relink_command" fi done relink_command="(cd `pwd`; $relink_command)" relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"` fi # Quote $echo for shipping. if test "X$echo" = "X$SHELL $progpath --fallback-echo"; then case $progpath in [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";; *) qecho="$SHELL `pwd`/$progpath --fallback-echo";; esac qecho=`$echo "X$qecho" | $Xsed -e "$sed_quote_subst"` else qecho=`$echo "X$echo" | $Xsed -e "$sed_quote_subst"` fi # Only actually do things if our run command is non-null. if test -z "$run"; then # win32 will think the script is a binary if it has # a .exe suffix, so we strip it off here. case $output in *.exe) output=`$echo $output|${SED} 's,.exe$,,'` ;; esac # test for cygwin because mv fails w/o .exe extensions case $host in *cygwin*) exeext=.exe outputname=`$echo $outputname|${SED} 's,.exe$,,'` ;; *) exeext= ;; esac case $host in *cygwin* | *mingw* ) output_name=`basename $output` output_path=`dirname $output` cwrappersource="$output_path/$objdir/lt-$output_name.c" cwrapper="$output_path/$output_name.exe" $rm $cwrappersource $cwrapper trap "$rm $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 cat > $cwrappersource <> $cwrappersource<<"EOF" #include #include #include #include #include #include #include #include #include #if defined(PATH_MAX) # define LT_PATHMAX PATH_MAX #elif defined(MAXPATHLEN) # define LT_PATHMAX MAXPATHLEN #else # define LT_PATHMAX 1024 #endif #ifndef DIR_SEPARATOR # define DIR_SEPARATOR '/' # define PATH_SEPARATOR ':' #endif #if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ defined (__OS2__) # define HAVE_DOS_BASED_FILE_SYSTEM # ifndef DIR_SEPARATOR_2 # define DIR_SEPARATOR_2 '\\' # endif # ifndef PATH_SEPARATOR_2 # define PATH_SEPARATOR_2 ';' # endif #endif #ifndef DIR_SEPARATOR_2 # define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) #else /* DIR_SEPARATOR_2 */ # define IS_DIR_SEPARATOR(ch) \ (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) #endif /* DIR_SEPARATOR_2 */ #ifndef PATH_SEPARATOR_2 # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) #else /* PATH_SEPARATOR_2 */ # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) #endif /* PATH_SEPARATOR_2 */ #define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) #define XFREE(stale) do { \ if (stale) { free ((void *) stale); stale = 0; } \ } while (0) /* -DDEBUG is fairly common in CFLAGS. */ #undef DEBUG #if defined DEBUGWRAPPER # define DEBUG(format, ...) fprintf(stderr, format, __VA_ARGS__) #else # define DEBUG(format, ...) #endif const char *program_name = NULL; void * xmalloc (size_t num); char * xstrdup (const char *string); const char * base_name (const char *name); char * find_executable(const char *wrapper); int check_executable(const char *path); char * strendzap(char *str, const char *pat); void lt_fatal (const char *message, ...); int main (int argc, char *argv[]) { char **newargz; int i; program_name = (char *) xstrdup (base_name (argv[0])); DEBUG("(main) argv[0] : %s\n",argv[0]); DEBUG("(main) program_name : %s\n",program_name); newargz = XMALLOC(char *, argc+2); EOF cat >> $cwrappersource <> $cwrappersource <<"EOF" newargz[1] = find_executable(argv[0]); if (newargz[1] == NULL) lt_fatal("Couldn't find %s", argv[0]); DEBUG("(main) found exe at : %s\n",newargz[1]); /* we know the script has the same name, without the .exe */ /* so make sure newargz[1] doesn't end in .exe */ strendzap(newargz[1],".exe"); for (i = 1; i < argc; i++) newargz[i+1] = xstrdup(argv[i]); newargz[argc+1] = NULL; for (i=0; i> $cwrappersource <> $cwrappersource <> $cwrappersource <<"EOF" return 127; } void * xmalloc (size_t num) { void * p = (void *) malloc (num); if (!p) lt_fatal ("Memory exhausted"); return p; } char * xstrdup (const char *string) { return string ? strcpy ((char *) xmalloc (strlen (string) + 1), string) : NULL ; } const char * base_name (const char *name) { const char *base; #if defined (HAVE_DOS_BASED_FILE_SYSTEM) /* Skip over the disk name in MSDOS pathnames. */ if (isalpha ((unsigned char)name[0]) && name[1] == ':') name += 2; #endif for (base = name; *name; name++) if (IS_DIR_SEPARATOR (*name)) base = name + 1; return base; } int check_executable(const char * path) { struct stat st; DEBUG("(check_executable) : %s\n", path ? (*path ? path : "EMPTY!") : "NULL!"); if ((!path) || (!*path)) return 0; if ((stat (path, &st) >= 0) && ( /* MinGW & native WIN32 do not support S_IXOTH or S_IXGRP */ #if defined (S_IXOTH) ((st.st_mode & S_IXOTH) == S_IXOTH) || #endif #if defined (S_IXGRP) ((st.st_mode & S_IXGRP) == S_IXGRP) || #endif ((st.st_mode & S_IXUSR) == S_IXUSR)) ) return 1; else return 0; } /* Searches for the full path of the wrapper. Returns newly allocated full path name if found, NULL otherwise */ char * find_executable (const char* wrapper) { int has_slash = 0; const char* p; const char* p_next; /* static buffer for getcwd */ char tmp[LT_PATHMAX + 1]; int tmp_len; char* concat_name; DEBUG("(find_executable) : %s\n", wrapper ? (*wrapper ? wrapper : "EMPTY!") : "NULL!"); if ((wrapper == NULL) || (*wrapper == '\0')) return NULL; /* Absolute path? */ #if defined (HAVE_DOS_BASED_FILE_SYSTEM) if (isalpha ((unsigned char)wrapper[0]) && wrapper[1] == ':') { concat_name = xstrdup (wrapper); if (check_executable(concat_name)) return concat_name; XFREE(concat_name); } else { #endif if (IS_DIR_SEPARATOR (wrapper[0])) { concat_name = xstrdup (wrapper); if (check_executable(concat_name)) return concat_name; XFREE(concat_name); } #if defined (HAVE_DOS_BASED_FILE_SYSTEM) } #endif for (p = wrapper; *p; p++) if (*p == '/') { has_slash = 1; break; } if (!has_slash) { /* no slashes; search PATH */ const char* path = getenv ("PATH"); if (path != NULL) { for (p = path; *p; p = p_next) { const char* q; size_t p_len; for (q = p; *q; q++) if (IS_PATH_SEPARATOR(*q)) break; p_len = q - p; p_next = (*q == '\0' ? q : q + 1); if (p_len == 0) { /* empty path: current directory */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal ("getcwd failed"); tmp_len = strlen(tmp); concat_name = XMALLOC(char, tmp_len + 1 + strlen(wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); } else { concat_name = XMALLOC(char, p_len + 1 + strlen(wrapper) + 1); memcpy (concat_name, p, p_len); concat_name[p_len] = '/'; strcpy (concat_name + p_len + 1, wrapper); } if (check_executable(concat_name)) return concat_name; XFREE(concat_name); } } /* not found in PATH; assume curdir */ } /* Relative path | not found in path: prepend cwd */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal ("getcwd failed"); tmp_len = strlen(tmp); concat_name = XMALLOC(char, tmp_len + 1 + strlen(wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); if (check_executable(concat_name)) return concat_name; XFREE(concat_name); return NULL; } char * strendzap(char *str, const char *pat) { size_t len, patlen; assert(str != NULL); assert(pat != NULL); len = strlen(str); patlen = strlen(pat); if (patlen <= len) { str += len - patlen; if (strcmp(str, pat) == 0) *str = '\0'; } return str; } static void lt_error_core (int exit_status, const char * mode, const char * message, va_list ap) { fprintf (stderr, "%s: %s: ", program_name, mode); vfprintf (stderr, message, ap); fprintf (stderr, ".\n"); if (exit_status >= 0) exit (exit_status); } void lt_fatal (const char *message, ...) { va_list ap; va_start (ap, message); lt_error_core (EXIT_FAILURE, "FATAL", message, ap); va_end (ap); } EOF # we should really use a build-platform specific compiler # here, but OTOH, the wrappers (shell script and this C one) # are only useful if you want to execute the "real" binary. # Since the "real" binary is built for $host, then this # wrapper might as well be built for $host, too. $run $LTCC $LTCFLAGS -s -o $cwrapper $cwrappersource ;; esac $rm $output trap "$rm $output; exit $EXIT_FAILURE" 1 2 15 $echo > $output "\ #! $SHELL # $output - temporary wrapper script for $objdir/$outputname # Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP # # The $output program cannot be directly executed until all the libtool # libraries that it depends on are installed. # # This wrapper script should never be moved out of the build directory. # If it is, it will not operate correctly. # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. Xsed='${SED} -e 1s/^X//' sed_quote_subst='$sed_quote_subst' # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH relink_command=\"$relink_command\" # This environment variable determines our operation mode. if test \"\$libtool_install_magic\" = \"$magic\"; then # install mode needs the following variable: notinst_deplibs='$notinst_deplibs' else # When we are sourced in execute mode, \$file and \$echo are already set. if test \"\$libtool_execute_magic\" != \"$magic\"; then echo=\"$qecho\" file=\"\$0\" # Make sure echo works. if test \"X\$1\" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test \"X\`(\$echo '\t') 2>/dev/null\`\" = 'X\t'; then # Yippee, \$echo works! : else # Restart under the correct shell, and then maybe \$echo will work. exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"} fi fi\ " $echo >> $output "\ # Find the directory that this script lives in. thisdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\` test \"x\$thisdir\" = \"x\$file\" && thisdir=. # Follow symbolic links until we get to the real thisdir. file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\` while test -n \"\$file\"; do destdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\` # If there was a directory component, then change thisdir. if test \"x\$destdir\" != \"x\$file\"; then case \"\$destdir\" in [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; *) thisdir=\"\$thisdir/\$destdir\" ;; esac fi file=\`\$echo \"X\$file\" | \$Xsed -e 's%^.*/%%'\` file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\` done # Try to get the absolute directory name. absdir=\`cd \"\$thisdir\" && pwd\` test -n \"\$absdir\" && thisdir=\"\$absdir\" " if test "$fast_install" = yes; then $echo >> $output "\ program=lt-'$outputname'$exeext progdir=\"\$thisdir/$objdir\" if test ! -f \"\$progdir/\$program\" || \\ { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ test \"X\$file\" != \"X\$progdir/\$program\"; }; then file=\"\$\$-\$program\" if test ! -d \"\$progdir\"; then $mkdir \"\$progdir\" else $rm \"\$progdir/\$file\" fi" $echo >> $output "\ # relink executable if necessary if test -n \"\$relink_command\"; then if relink_command_output=\`eval \$relink_command 2>&1\`; then : else $echo \"\$relink_command_output\" >&2 $rm \"\$progdir/\$file\" exit $EXIT_FAILURE fi fi $mv \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || { $rm \"\$progdir/\$program\"; $mv \"\$progdir/\$file\" \"\$progdir/\$program\"; } $rm \"\$progdir/\$file\" fi" else $echo >> $output "\ program='$outputname' progdir=\"\$thisdir/$objdir\" " fi $echo >> $output "\ if test -f \"\$progdir/\$program\"; then" # Export our shlibpath_var if we have one. if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then $echo >> $output "\ # Add our own library path to $shlibpath_var $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" # Some systems cannot cope with colon-terminated $shlibpath_var # The second colon is a workaround for a bug in BeOS R4 sed $shlibpath_var=\`\$echo \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\` export $shlibpath_var " fi # fixup the dll searchpath if we need to. if test -n "$dllsearchpath"; then $echo >> $output "\ # Add the dll search path components to the executable PATH PATH=$dllsearchpath:\$PATH " fi $echo >> $output "\ if test \"\$libtool_execute_magic\" != \"$magic\"; then # Run the actual program with our arguments. " case $host in # Backslashes separate directories on plain windows *-*-mingw | *-*-os2*) $echo >> $output "\ exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} " ;; *) $echo >> $output "\ exec \"\$progdir/\$program\" \${1+\"\$@\"} " ;; esac $echo >> $output "\ \$echo \"\$0: cannot exec \$program \${1+\"\$@\"}\" exit $EXIT_FAILURE fi else # The program doesn't exist. \$echo \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 \$echo \"This script is just a wrapper for \$program.\" 1>&2 $echo \"See the $PACKAGE documentation for more information.\" 1>&2 exit $EXIT_FAILURE fi fi\ " chmod +x $output fi exit $EXIT_SUCCESS ;; esac # See if we need to build an old-fashioned archive. for oldlib in $oldlibs; do if test "$build_libtool_libs" = convenience; then oldobjs="$libobjs_save" addlibs="$convenience" build_libtool_libs=no else if test "$build_libtool_libs" = module; then oldobjs="$libobjs_save" build_libtool_libs=no else oldobjs="$old_deplibs $non_pic_objects" fi addlibs="$old_convenience" fi if test -n "$addlibs"; then gentop="$output_objdir/${outputname}x" generated="$generated $gentop" func_extract_archives $gentop $addlibs oldobjs="$oldobjs $func_extract_archives_result" fi # Do each command in the archive commands. if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then cmds=$old_archive_from_new_cmds else # POSIX demands no paths to be encoded in archives. We have # to avoid creating archives with duplicate basenames if we # might have to extract them afterwards, e.g., when creating a # static archive out of a convenience library, or when linking # the entirety of a libtool archive into another (currently # not supported by libtool). if (for obj in $oldobjs do $echo "X$obj" | $Xsed -e 's%^.*/%%' done | sort | sort -uc >/dev/null 2>&1); then : else $echo "copying selected object files to avoid basename conflicts..." if test -z "$gentop"; then gentop="$output_objdir/${outputname}x" generated="$generated $gentop" $show "${rm}r $gentop" $run ${rm}r "$gentop" $show "$mkdir $gentop" $run $mkdir "$gentop" exit_status=$? if test "$exit_status" -ne 0 && test ! -d "$gentop"; then exit $exit_status fi fi save_oldobjs=$oldobjs oldobjs= counter=1 for obj in $save_oldobjs do objbase=`$echo "X$obj" | $Xsed -e 's%^.*/%%'` case " $oldobjs " in " ") oldobjs=$obj ;; *[\ /]"$objbase "*) while :; do # Make sure we don't pick an alternate name that also # overlaps. newobj=lt$counter-$objbase counter=`expr $counter + 1` case " $oldobjs " in *[\ /]"$newobj "*) ;; *) if test ! -f "$gentop/$newobj"; then break; fi ;; esac done $show "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" $run ln "$obj" "$gentop/$newobj" || $run cp "$obj" "$gentop/$newobj" oldobjs="$oldobjs $gentop/$newobj" ;; *) oldobjs="$oldobjs $obj" ;; esac done fi eval cmds=\"$old_archive_cmds\" if len=`expr "X$cmds" : ".*"` && test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then cmds=$old_archive_cmds else # the command line is too long to link in one step, link in parts $echo "using piecewise archive linking..." save_RANLIB=$RANLIB RANLIB=: objlist= concat_cmds= save_oldobjs=$oldobjs # Is there a better way of finding the last object in the list? for obj in $save_oldobjs do last_oldobj=$obj done for obj in $save_oldobjs do oldobjs="$objlist $obj" objlist="$objlist $obj" eval test_cmds=\"$old_archive_cmds\" if len=`expr "X$test_cmds" : ".*" 2>/dev/null` && test "$len" -le "$max_cmd_len"; then : else # the above command should be used before it gets too long oldobjs=$objlist if test "$obj" = "$last_oldobj" ; then RANLIB=$save_RANLIB fi test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" objlist= fi done RANLIB=$save_RANLIB oldobjs=$objlist if test "X$oldobjs" = "X" ; then eval cmds=\"\$concat_cmds\" else eval cmds=\"\$concat_cmds~\$old_archive_cmds\" fi fi fi save_ifs="$IFS"; IFS='~' for cmd in $cmds; do eval cmd=\"$cmd\" IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" done if test -n "$generated"; then $show "${rm}r$generated" $run ${rm}r$generated fi # Now create the libtool archive. case $output in *.la) old_library= test "$build_old_libs" = yes && old_library="$libname.$libext" $show "creating $output" # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"` relink_command="$var=\"$var_value\"; export $var; $relink_command" fi done # Quote the link command for shipping. relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"` if test "$hardcode_automatic" = yes ; then relink_command= fi # Only create the output if not a dry run. if test -z "$run"; then for installed in no yes; do if test "$installed" = yes; then if test -z "$install_libdir"; then break fi output="$output_objdir/$outputname"i # Replace all uninstalled libtool libraries with the installed ones newdependency_libs= for deplib in $dependency_libs; do case $deplib in *.la) name=`$echo "X$deplib" | $Xsed -e 's%^.*/%%'` eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` if test -z "$libdir"; then $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi newdependency_libs="$newdependency_libs $libdir/$name" ;; *) newdependency_libs="$newdependency_libs $deplib" ;; esac done dependency_libs="$newdependency_libs" newdlfiles= for lib in $dlfiles; do name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` if test -z "$libdir"; then $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi newdlfiles="$newdlfiles $libdir/$name" done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` if test -z "$libdir"; then $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi newdlprefiles="$newdlprefiles $libdir/$name" done dlprefiles="$newdlprefiles" else newdlfiles= for lib in $dlfiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac newdlfiles="$newdlfiles $abs" done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac newdlprefiles="$newdlprefiles $abs" done dlprefiles="$newdlprefiles" fi $rm $output # place dlname in correct position for cygwin tdlname=$dlname case $host,$output,$installed,$module,$dlname in *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;; esac $echo > $output "\ # $outputname - a libtool library file # Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP # # Please DO NOT delete this file! # It is necessary for linking the library. # The name that we can dlopen(3). dlname='$tdlname' # Names of this library. library_names='$library_names' # The name of the static archive. old_library='$old_library' # Libraries that this one depends upon. dependency_libs='$dependency_libs' # Version information for $libname. current=$current age=$age revision=$revision # Is this an already installed library? installed=$installed # Should we warn about portability when linking against -modules? shouldnotlink=$module # Files to dlopen/dlpreopen dlopen='$dlfiles' dlpreopen='$dlprefiles' # Directory that this library needs to be installed in: libdir='$install_libdir'" if test "$installed" = no && test "$need_relink" = yes; then $echo >> $output "\ relink_command=\"$relink_command\"" fi done fi # Do a symbolic link so that the libtool archive can be found in # LD_LIBRARY_PATH before the program is installed. $show "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)" $run eval '(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)' || exit $? ;; esac exit $EXIT_SUCCESS ;; # libtool install mode install) modename="$modename: install" # There may be an optional sh(1) argument at the beginning of # install_prog (especially on Windows NT). if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || # Allow the use of GNU shtool's install command. $echo "X$nonopt" | grep shtool > /dev/null; then # Aesthetically quote it. arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac install_prog="$arg " arg="$1" shift else install_prog= arg=$nonopt fi # The real first argument should be the name of the installation program. # Aesthetically quote it. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac install_prog="$install_prog$arg" # We need to accept at least all the BSD install flags. dest= files= opts= prev= install_type= isdir=no stripme= for arg do if test -n "$dest"; then files="$files $dest" dest=$arg continue fi case $arg in -d) isdir=yes ;; -f) case " $install_prog " in *[\\\ /]cp\ *) ;; *) prev=$arg ;; esac ;; -g | -m | -o) prev=$arg ;; -s) stripme=" -s" continue ;; -*) ;; *) # If the previous option needed an argument, then skip it. if test -n "$prev"; then prev= else dest=$arg continue fi ;; esac # Aesthetically quote the argument. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac install_prog="$install_prog $arg" done if test -z "$install_prog"; then $echo "$modename: you must specify an install program" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi if test -n "$prev"; then $echo "$modename: the \`$prev' option requires an argument" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi if test -z "$files"; then if test -z "$dest"; then $echo "$modename: no file or destination specified" 1>&2 else $echo "$modename: you must specify a destination" 1>&2 fi $echo "$help" 1>&2 exit $EXIT_FAILURE fi # Strip any trailing slash from the destination. dest=`$echo "X$dest" | $Xsed -e 's%/$%%'` # Check to see that the destination is a directory. test -d "$dest" && isdir=yes if test "$isdir" = yes; then destdir="$dest" destname= else destdir=`$echo "X$dest" | $Xsed -e 's%/[^/]*$%%'` test "X$destdir" = "X$dest" && destdir=. destname=`$echo "X$dest" | $Xsed -e 's%^.*/%%'` # Not a directory, so check to see that there is only one file specified. set dummy $files if test "$#" -gt 2; then $echo "$modename: \`$dest' is not a directory" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi fi case $destdir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) for file in $files; do case $file in *.lo) ;; *) $echo "$modename: \`$destdir' must be an absolute directory name" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; esac done ;; esac # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" staticlibs= future_libdirs= current_libdirs= for file in $files; do # Do each installation. case $file in *.$libext) # Do the static libraries later. staticlibs="$staticlibs $file" ;; *.la) # Check to see that this really is a libtool archive. if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : else $echo "$modename: \`$file' is not a valid libtool archive" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi library_names= old_library= relink_command= # If there is no directory component, then add one. case $file in */* | *\\*) . $file ;; *) . ./$file ;; esac # Add the libdir to current_libdirs if it is the destination. if test "X$destdir" = "X$libdir"; then case "$current_libdirs " in *" $libdir "*) ;; *) current_libdirs="$current_libdirs $libdir" ;; esac else # Note the libdir as a future libdir. case "$future_libdirs " in *" $libdir "*) ;; *) future_libdirs="$future_libdirs $libdir" ;; esac fi dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/ test "X$dir" = "X$file/" && dir= dir="$dir$objdir" if test -n "$relink_command"; then # Determine the prefix the user has applied to our future dir. inst_prefix_dir=`$echo "$destdir" | $SED "s%$libdir\$%%"` # Don't allow the user to place us outside of our expected # location b/c this prevents finding dependent libraries that # are installed to the same prefix. # At present, this check doesn't affect windows .dll's that # are installed into $libdir/../bin (currently, that works fine) # but it's something to keep an eye on. if test "$inst_prefix_dir" = "$destdir"; then $echo "$modename: error: cannot install \`$file' to a directory not ending in $libdir" 1>&2 exit $EXIT_FAILURE fi if test -n "$inst_prefix_dir"; then # Stick the inst_prefix_dir data into the link command. relink_command=`$echo "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` else relink_command=`$echo "$relink_command" | $SED "s%@inst_prefix_dir@%%"` fi $echo "$modename: warning: relinking \`$file'" 1>&2 $show "$relink_command" if $run eval "$relink_command"; then : else $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 exit $EXIT_FAILURE fi fi # See the names of the shared library. set dummy $library_names if test -n "$2"; then realname="$2" shift shift srcname="$realname" test -n "$relink_command" && srcname="$realname"T # Install the shared library and build the symlinks. $show "$install_prog $dir/$srcname $destdir/$realname" $run eval "$install_prog $dir/$srcname $destdir/$realname" || exit $? if test -n "$stripme" && test -n "$striplib"; then $show "$striplib $destdir/$realname" $run eval "$striplib $destdir/$realname" || exit $? fi if test "$#" -gt 0; then # Delete the old symlinks, and create new ones. # Try `ln -sf' first, because the `ln' binary might depend on # the symlink we replace! Solaris /bin/ln does not understand -f, # so we also need to try rm && ln -s. for linkname do if test "$linkname" != "$realname"; then $show "(cd $destdir && { $LN_S -f $realname $linkname || { $rm $linkname && $LN_S $realname $linkname; }; })" $run eval "(cd $destdir && { $LN_S -f $realname $linkname || { $rm $linkname && $LN_S $realname $linkname; }; })" fi done fi # Do each command in the postinstall commands. lib="$destdir/$realname" cmds=$postinstall_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$mode" = relink; then $run eval '(cd $output_objdir && $rm ${realname}T && $mv ${realname}U $realname)' fi exit $lt_exit } done IFS="$save_ifs" fi # Install the pseudo-library for information purposes. name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` instname="$dir/$name"i $show "$install_prog $instname $destdir/$name" $run eval "$install_prog $instname $destdir/$name" || exit $? # Maybe install the static library, too. test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library" ;; *.lo) # Install (i.e. copy) a libtool object. # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` destfile="$destdir/$destfile" fi # Deduce the name of the destination old-style object file. case $destfile in *.lo) staticdest=`$echo "X$destfile" | $Xsed -e "$lo2o"` ;; *.$objext) staticdest="$destfile" destfile= ;; *) $echo "$modename: cannot copy a libtool object to \`$destfile'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; esac # Install the libtool object if requested. if test -n "$destfile"; then $show "$install_prog $file $destfile" $run eval "$install_prog $file $destfile" || exit $? fi # Install the old object if enabled. if test "$build_old_libs" = yes; then # Deduce the name of the old-style object file. staticobj=`$echo "X$file" | $Xsed -e "$lo2o"` $show "$install_prog $staticobj $staticdest" $run eval "$install_prog \$staticobj \$staticdest" || exit $? fi exit $EXIT_SUCCESS ;; *) # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` destfile="$destdir/$destfile" fi # If the file is missing, and there is a .exe on the end, strip it # because it is most likely a libtool script we actually want to # install stripped_ext="" case $file in *.exe) if test ! -f "$file"; then file=`$echo $file|${SED} 's,.exe$,,'` stripped_ext=".exe" fi ;; esac # Do a test to see if this is really a libtool program. case $host in *cygwin*|*mingw*) wrapper=`$echo $file | ${SED} -e 's,.exe$,,'` ;; *) wrapper=$file ;; esac if (${SED} -e '4q' $wrapper | grep "^# Generated by .*$PACKAGE")>/dev/null 2>&1; then notinst_deplibs= relink_command= # Note that it is not necessary on cygwin/mingw to append a dot to # foo even if both foo and FILE.exe exist: automatic-append-.exe # behavior happens only for exec(3), not for open(2)! Also, sourcing # `FILE.' does not work on cygwin managed mounts. # # If there is no directory component, then add one. case $wrapper in */* | *\\*) . ${wrapper} ;; *) . ./${wrapper} ;; esac # Check the variables that should have been set. if test -z "$notinst_deplibs"; then $echo "$modename: invalid libtool wrapper script \`$wrapper'" 1>&2 exit $EXIT_FAILURE fi finalize=yes for lib in $notinst_deplibs; do # Check to see that each library is installed. libdir= if test -f "$lib"; then # If there is no directory component, then add one. case $lib in */* | *\\*) . $lib ;; *) . ./$lib ;; esac fi libfile="$libdir/"`$echo "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test if test -n "$libdir" && test ! -f "$libfile"; then $echo "$modename: warning: \`$lib' has not been installed in \`$libdir'" 1>&2 finalize=no fi done relink_command= # Note that it is not necessary on cygwin/mingw to append a dot to # foo even if both foo and FILE.exe exist: automatic-append-.exe # behavior happens only for exec(3), not for open(2)! Also, sourcing # `FILE.' does not work on cygwin managed mounts. # # If there is no directory component, then add one. case $wrapper in */* | *\\*) . ${wrapper} ;; *) . ./${wrapper} ;; esac outputname= if test "$fast_install" = no && test -n "$relink_command"; then if test "$finalize" = yes && test -z "$run"; then tmpdir=`func_mktempdir` file=`$echo "X$file$stripped_ext" | $Xsed -e 's%^.*/%%'` outputname="$tmpdir/$file" # Replace the output file specification. relink_command=`$echo "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'` $show "$relink_command" if $run eval "$relink_command"; then : else $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 ${rm}r "$tmpdir" continue fi file="$outputname" else $echo "$modename: warning: cannot relink \`$file'" 1>&2 fi else # Install the binary that we compiled earlier. file=`$echo "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"` fi fi # remove .exe since cygwin /usr/bin/install will append another # one anyway case $install_prog,$host in */usr/bin/install*,*cygwin*) case $file:$destfile in *.exe:*.exe) # this is ok ;; *.exe:*) destfile=$destfile.exe ;; *:*.exe) destfile=`$echo $destfile | ${SED} -e 's,.exe$,,'` ;; esac ;; esac $show "$install_prog$stripme $file $destfile" $run eval "$install_prog\$stripme \$file \$destfile" || exit $? test -n "$outputname" && ${rm}r "$tmpdir" ;; esac done for file in $staticlibs; do name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` # Set up the ranlib parameters. oldlib="$destdir/$name" $show "$install_prog $file $oldlib" $run eval "$install_prog \$file \$oldlib" || exit $? if test -n "$stripme" && test -n "$old_striplib"; then $show "$old_striplib $oldlib" $run eval "$old_striplib $oldlib" || exit $? fi # Do each command in the postinstall commands. cmds=$old_postinstall_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" done if test -n "$future_libdirs"; then $echo "$modename: warning: remember to run \`$progname --finish$future_libdirs'" 1>&2 fi if test -n "$current_libdirs"; then # Maybe just do a dry run. test -n "$run" && current_libdirs=" -n$current_libdirs" exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' else exit $EXIT_SUCCESS fi ;; # libtool finish mode finish) modename="$modename: finish" libdirs="$nonopt" admincmds= if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then for dir do libdirs="$libdirs $dir" done for libdir in $libdirs; do if test -n "$finish_cmds"; then # Do each command in the finish commands. cmds=$finish_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || admincmds="$admincmds $cmd" done IFS="$save_ifs" fi if test -n "$finish_eval"; then # Do the single finish_eval. eval cmds=\"$finish_eval\" $run eval "$cmds" || admincmds="$admincmds $cmds" fi done fi # Exit here if they wanted silent mode. test "$show" = : && exit $EXIT_SUCCESS $echo "X----------------------------------------------------------------------" | $Xsed $echo "Libraries have been installed in:" for libdir in $libdirs; do $echo " $libdir" done $echo $echo "If you ever happen to want to link against installed libraries" $echo "in a given directory, LIBDIR, you must either use libtool, and" $echo "specify the full pathname of the library, or use the \`-LLIBDIR'" $echo "flag during linking and do at least one of the following:" if test -n "$shlibpath_var"; then $echo " - add LIBDIR to the \`$shlibpath_var' environment variable" $echo " during execution" fi if test -n "$runpath_var"; then $echo " - add LIBDIR to the \`$runpath_var' environment variable" $echo " during linking" fi if test -n "$hardcode_libdir_flag_spec"; then libdir=LIBDIR eval flag=\"$hardcode_libdir_flag_spec\" $echo " - use the \`$flag' linker flag" fi if test -n "$admincmds"; then $echo " - have your system administrator run these commands:$admincmds" fi if test -f /etc/ld.so.conf; then $echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" fi $echo $echo "See any operating system documentation about shared libraries for" $echo "more information, such as the ld(1) and ld.so(8) manual pages." $echo "X----------------------------------------------------------------------" | $Xsed exit $EXIT_SUCCESS ;; # libtool execute mode execute) modename="$modename: execute" # The first argument is the command name. cmd="$nonopt" if test -z "$cmd"; then $echo "$modename: you must specify a COMMAND" 1>&2 $echo "$help" exit $EXIT_FAILURE fi # Handle -dlopen flags immediately. for file in $execute_dlfiles; do if test ! -f "$file"; then $echo "$modename: \`$file' is not a file" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi dir= case $file in *.la) # Check to see that this really is a libtool archive. if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : else $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi # Read the libtool library. dlname= library_names= # If there is no directory component, then add one. case $file in */* | *\\*) . $file ;; *) . ./$file ;; esac # Skip this library if it cannot be dlopened. if test -z "$dlname"; then # Warn if it was a shared library. test -n "$library_names" && $echo "$modename: warning: \`$file' was not linked with \`-export-dynamic'" continue fi dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` test "X$dir" = "X$file" && dir=. if test -f "$dir/$objdir/$dlname"; then dir="$dir/$objdir" else $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2 exit $EXIT_FAILURE fi ;; *.lo) # Just add the directory containing the .lo file. dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` test "X$dir" = "X$file" && dir=. ;; *) $echo "$modename: warning \`-dlopen' is ignored for non-libtool libraries and objects" 1>&2 continue ;; esac # Get the absolute pathname. absdir=`cd "$dir" && pwd` test -n "$absdir" && dir="$absdir" # Now add the directory to shlibpath_var. if eval "test -z \"\$$shlibpath_var\""; then eval "$shlibpath_var=\"\$dir\"" else eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" fi done # This variable tells wrapper scripts just to set shlibpath_var # rather than running their programs. libtool_execute_magic="$magic" # Check if any of the arguments is a wrapper script. args= for file do case $file in -*) ;; *) # Do a test to see if this is really a libtool program. if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then # If there is no directory component, then add one. case $file in */* | *\\*) . $file ;; *) . ./$file ;; esac # Transform arg to wrapped name. file="$progdir/$program" fi ;; esac # Quote arguments (to preserve shell metacharacters). file=`$echo "X$file" | $Xsed -e "$sed_quote_subst"` args="$args \"$file\"" done if test -z "$run"; then if test -n "$shlibpath_var"; then # Export the shlibpath_var. eval "export $shlibpath_var" fi # Restore saved environment variables if test "${save_LC_ALL+set}" = set; then LC_ALL="$save_LC_ALL"; export LC_ALL fi if test "${save_LANG+set}" = set; then LANG="$save_LANG"; export LANG fi # Now prepare to actually exec the command. exec_cmd="\$cmd$args" else # Display what would be done. if test -n "$shlibpath_var"; then eval "\$echo \"\$shlibpath_var=\$$shlibpath_var\"" $echo "export $shlibpath_var" fi $echo "$cmd$args" exit $EXIT_SUCCESS fi ;; # libtool clean and uninstall mode clean | uninstall) modename="$modename: $mode" rm="$nonopt" files= rmforce= exit_status=0 # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" for arg do case $arg in -f) rm="$rm $arg"; rmforce=yes ;; -*) rm="$rm $arg" ;; *) files="$files $arg" ;; esac done if test -z "$rm"; then $echo "$modename: you must specify an RM program" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi rmdirs= origobjdir="$objdir" for file in $files; do dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` if test "X$dir" = "X$file"; then dir=. objdir="$origobjdir" else objdir="$dir/$origobjdir" fi name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` test "$mode" = uninstall && objdir="$dir" # Remember objdir for removal later, being careful to avoid duplicates if test "$mode" = clean; then case " $rmdirs " in *" $objdir "*) ;; *) rmdirs="$rmdirs $objdir" ;; esac fi # Don't error if the file doesn't exist and rm -f was used. if (test -L "$file") >/dev/null 2>&1 \ || (test -h "$file") >/dev/null 2>&1 \ || test -f "$file"; then : elif test -d "$file"; then exit_status=1 continue elif test "$rmforce" = yes; then continue fi rmfiles="$file" case $name in *.la) # Possibly a libtool archive, so verify it. if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then . $dir/$name # Delete the libtool libraries and symlinks. for n in $library_names; do rmfiles="$rmfiles $objdir/$n" done test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" case "$mode" in clean) case " $library_names " in # " " in the beginning catches empty $dlname *" $dlname "*) ;; *) rmfiles="$rmfiles $objdir/$dlname" ;; esac test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" ;; uninstall) if test -n "$library_names"; then # Do each command in the postuninstall commands. cmds=$postuninstall_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" if test "$?" -ne 0 && test "$rmforce" != yes; then exit_status=1 fi done IFS="$save_ifs" fi if test -n "$old_library"; then # Do each command in the old_postuninstall commands. cmds=$old_postuninstall_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" if test "$?" -ne 0 && test "$rmforce" != yes; then exit_status=1 fi done IFS="$save_ifs" fi # FIXME: should reinstall the best remaining shared library. ;; esac fi ;; *.lo) # Possibly a libtool object, so verify it. if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then # Read the .lo file . $dir/$name # Add PIC object to the list of files to remove. if test -n "$pic_object" \ && test "$pic_object" != none; then rmfiles="$rmfiles $dir/$pic_object" fi # Add non-PIC object to the list of files to remove. if test -n "$non_pic_object" \ && test "$non_pic_object" != none; then rmfiles="$rmfiles $dir/$non_pic_object" fi fi ;; *) if test "$mode" = clean ; then noexename=$name case $file in *.exe) file=`$echo $file|${SED} 's,.exe$,,'` noexename=`$echo $name|${SED} 's,.exe$,,'` # $file with .exe has already been added to rmfiles, # add $file without .exe rmfiles="$rmfiles $file" ;; esac # Do a test to see if this is a libtool program. if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then relink_command= . $dir/$noexename # note $name still contains .exe if it was in $file originally # as does the version of $file that was added into $rmfiles rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}" if test "$fast_install" = yes && test -n "$relink_command"; then rmfiles="$rmfiles $objdir/lt-$name" fi if test "X$noexename" != "X$name" ; then rmfiles="$rmfiles $objdir/lt-${noexename}.c" fi fi fi ;; esac $show "$rm $rmfiles" $run $rm $rmfiles || exit_status=1 done objdir="$origobjdir" # Try to remove the ${objdir}s in the directories where we deleted files for dir in $rmdirs; do if test -d "$dir"; then $show "rmdir $dir" $run rmdir $dir >/dev/null 2>&1 fi done exit $exit_status ;; "") $echo "$modename: you must specify a MODE" 1>&2 $echo "$generic_help" 1>&2 exit $EXIT_FAILURE ;; esac if test -z "$exec_cmd"; then $echo "$modename: invalid operation mode \`$mode'" 1>&2 $echo "$generic_help" 1>&2 exit $EXIT_FAILURE fi fi # test -z "$show_help" if test -n "$exec_cmd"; then eval exec $exec_cmd exit $EXIT_FAILURE fi # We need to display help for each of the modes. case $mode in "") $echo \ "Usage: $modename [OPTION]... [MODE-ARG]... Provide generalized library-building support services. --config show all configuration variables --debug enable verbose shell tracing -n, --dry-run display commands without modifying any files --features display basic configuration information and exit --finish same as \`--mode=finish' --help display this help message and exit --mode=MODE use operation mode MODE [default=inferred from MODE-ARGS] --quiet same as \`--silent' --silent don't print informational messages --tag=TAG use configuration variables from tag TAG --version print version information MODE must be one of the following: clean remove files from the build directory compile compile a source file into a libtool object execute automatically set library path, then run a program finish complete the installation of libtool libraries install install libraries or executables link create a library or an executable uninstall remove libraries from an installed directory MODE-ARGS vary depending on the MODE. Try \`$modename --help --mode=MODE' for a more detailed description of MODE. Report bugs to ." exit $EXIT_SUCCESS ;; clean) $echo \ "Usage: $modename [OPTION]... --mode=clean RM [RM-OPTION]... FILE... Remove files from the build directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, object or program, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; compile) $echo \ "Usage: $modename [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE Compile a source file into a libtool library object. This mode accepts the following additional options: -o OUTPUT-FILE set the output file name to OUTPUT-FILE -prefer-pic try to building PIC objects only -prefer-non-pic try to building non-PIC objects only -static always build a \`.o' file suitable for static linking COMPILE-COMMAND is a command to be used in creating a \`standard' object file from the given SOURCEFILE. The output file name is determined by removing the directory component from SOURCEFILE, then substituting the C source code suffix \`.c' with the library object suffix, \`.lo'." ;; execute) $echo \ "Usage: $modename [OPTION]... --mode=execute COMMAND [ARGS]... Automatically set library path, then run a program. This mode accepts the following additional options: -dlopen FILE add the directory containing FILE to the library path This mode sets the library path environment variable according to \`-dlopen' flags. If any of the ARGS are libtool executable wrappers, then they are translated into their corresponding uninstalled binary, and any of their required library directories are added to the library path. Then, COMMAND is executed, with ARGS as arguments." ;; finish) $echo \ "Usage: $modename [OPTION]... --mode=finish [LIBDIR]... Complete the installation of libtool libraries. Each LIBDIR is a directory that contains libtool libraries. The commands that this mode executes may require superuser privileges. Use the \`--dry-run' option if you just want to see what would be executed." ;; install) $echo \ "Usage: $modename [OPTION]... --mode=install INSTALL-COMMAND... Install executables or libraries. INSTALL-COMMAND is the installation command. The first component should be either the \`install' or \`cp' program. The rest of the components are interpreted as arguments to that command (only BSD-compatible install options are recognized)." ;; link) $echo \ "Usage: $modename [OPTION]... --mode=link LINK-COMMAND... Link object files or libraries together to form another library, or to create an executable program. LINK-COMMAND is a command using the C compiler that you would use to create a program from several object files. The following components of LINK-COMMAND are treated specially: -all-static do not do any dynamic linking at all -avoid-version do not add a version suffix if possible -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) -export-symbols SYMFILE try to export only the symbols listed in SYMFILE -export-symbols-regex REGEX try to export only the symbols matching REGEX -LLIBDIR search LIBDIR for required installed libraries -lNAME OUTPUT-FILE requires the installed library libNAME -module build a library that can dlopened -no-fast-install disable the fast-install mode -no-install link a not-installable executable -no-undefined declare that a library does not refer to external symbols -o OUTPUT-FILE create OUTPUT-FILE from the specified objects -objectlist FILE Use a list of object files found in FILE to specify objects -precious-files-regex REGEX don't remove output files matching REGEX -release RELEASE specify package release information -rpath LIBDIR the created library will eventually be installed in LIBDIR -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries -static do not do any dynamic linking of libtool libraries -version-info CURRENT[:REVISION[:AGE]] specify library version info [each variable defaults to 0] All other options (arguments beginning with \`-') are ignored. Every other argument is treated as a filename. Files ending in \`.la' are treated as uninstalled libtool libraries, other files are standard or library object files. If the OUTPUT-FILE ends in \`.la', then a libtool library is created, only library objects (\`.lo' files) may be specified, and \`-rpath' is required, except when creating a convenience library. If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created using \`ar' and \`ranlib', or on Windows using \`lib'. If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file is created, otherwise an executable program is created." ;; uninstall) $echo \ "Usage: $modename [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... Remove libraries from an installation directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; *) $echo "$modename: invalid operation mode \`$mode'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; esac $echo $echo "Try \`$modename --help' for more information about other modes." exit $? # The TAGs below are defined such that we never get into a situation # in which we disable both kinds of libraries. Given conflicting # choices, we go for a static library, that is the most portable, # since we can't tell whether shared libraries were disabled because # the user asked for that or because the platform doesn't support # them. This is particularly important on AIX, because we don't # support having both static and shared libraries enabled at the same # time on that platform, so we default to a shared-only configuration. # If a disable-shared tag is given, we'll fallback to a static-only # configuration. But we'll never go from static-only to shared-only. # ### BEGIN LIBTOOL TAG CONFIG: disable-shared disable_libs=shared # ### END LIBTOOL TAG CONFIG: disable-shared # ### BEGIN LIBTOOL TAG CONFIG: disable-static disable_libs=static # ### END LIBTOOL TAG CONFIG: disable-static # Local Variables: # mode:shell-script # sh-indentation:2 # End: polyml.5.2.1/missing0000755000175000017500000002540610506226524013404 0ustar daviddavid#! /bin/sh # Common stub for a few missing GNU programs while installing. scriptversion=2005-06-08.21 # Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005 # Free Software Foundation, Inc. # Originally by Fran,cois Pinard , 1996. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301, USA. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then echo 1>&2 "Try \`$0 --help' for more information" exit 1 fi run=: # In the cases where this matters, `missing' is being run in the # srcdir already. if test -f configure.ac; then configure_ac=configure.ac else configure_ac=configure.in fi msg="missing on your system" case "$1" in --run) # Try to run requested program, and just exit if it succeeds. run= shift "$@" && exit 0 # Exit code 63 means version mismatch. This often happens # when the user try to use an ancient version of a tool on # a file that requires a minimum version. In this case we # we should proceed has if the program had been absent, or # if --run hadn't been passed. if test $? = 63; then run=: msg="probably too old" fi ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an error status if there is no known handling for PROGRAM. Options: -h, --help display this help and exit -v, --version output version information and exit --run try to run the given command, and emulate it if it fails Supported PROGRAM values: aclocal touch file \`aclocal.m4' autoconf touch file \`configure' autoheader touch file \`config.h.in' automake touch all \`Makefile.in' files bison create \`y.tab.[ch]', if possible, from existing .[ch] flex create \`lex.yy.c', if possible, from existing .c help2man touch the output file lex create \`lex.yy.c', if possible, from existing .c makeinfo touch the output file tar try tar, gnutar, gtar, then tar without non-portable flags yacc create \`y.tab.[ch]', if possible, from existing .[ch] Send bug reports to ." exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" exit $? ;; -*) echo 1>&2 "$0: Unknown \`$1' option" echo 1>&2 "Try \`$0 --help' for more information" exit 1 ;; esac # Now exit if we have it, but it failed. Also exit now if we # don't have it and --version was passed (most likely to detect # the program). case "$1" in lex|yacc) # Not GNU programs, they don't have --version. ;; tar) if test -n "$run"; then echo 1>&2 "ERROR: \`tar' requires --run" exit 1 elif test "x$2" = "x--version" || test "x$2" = "x--help"; then exit 1 fi ;; *) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 elif test "x$2" = "x--version" || test "x$2" = "x--help"; then # Could not run --version or --help. This is probably someone # running `$TOOL --version' or `$TOOL --help' to check whether # $TOOL exists and not knowing $TOOL uses missing. exit 1 fi ;; esac # If it does not exist, or fails to run (possibly an outdated version), # try to emulate it. case "$1" in aclocal*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." touch aclocal.m4 ;; autoconf) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." touch configure ;; autoheader) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acconfig.h' or \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` test -z "$files" && files="config.h" touch_files= for f in $files; do case "$f" in *:*) touch_files="$touch_files "`echo "$f" | sed -e 's/^[^:]*://' -e 's/:.*//'`;; *) touch_files="$touch_files $f.in";; esac done touch $touch_files ;; automake*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." find . -type f -name Makefile.am -print | sed 's/\.am$/.in/' | while read f; do touch "$f"; done ;; autom4te) echo 1>&2 "\ WARNING: \`$1' is needed, but is $msg. You might have modified some files without having the proper tools for further handling them. You can get \`$1' as part of \`Autoconf' from any GNU archive site." file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'` test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo "#! /bin/sh" echo "# Created by GNU Automake missing as a replacement of" echo "# $ $@" echo "exit 0" chmod +x $file exit 1 fi ;; bison|yacc) echo 1>&2 "\ WARNING: \`$1' $msg. You should only need it if you modified a \`.y' file. You may need the \`Bison' package in order for those modifications to take effect. You can get \`Bison' from any GNU archive site." rm -f y.tab.c y.tab.h if [ $# -ne 1 ]; then eval LASTARG="\${$#}" case "$LASTARG" in *.y) SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" y.tab.c fi SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" y.tab.h fi ;; esac fi if [ ! -f y.tab.h ]; then echo >y.tab.h fi if [ ! -f y.tab.c ]; then echo 'main() { return 0; }' >y.tab.c fi ;; lex|flex) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.l' file. You may need the \`Flex' package in order for those modifications to take effect. You can get \`Flex' from any GNU archive site." rm -f lex.yy.c if [ $# -ne 1 ]; then eval LASTARG="\${$#}" case "$LASTARG" in *.l) SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" lex.yy.c fi ;; esac fi if [ ! -f lex.yy.c ]; then echo 'main() { return 0; }' >lex.yy.c fi ;; help2man) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a dependency of a manual page. You may need the \`Help2man' package in order for those modifications to take effect. You can get \`Help2man' from any GNU archive site." file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` if test -z "$file"; then file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'` fi if [ -f "$file" ]; then touch $file else test -z "$file" || exec >$file echo ".ab help2man is required to generate this page" exit 1 fi ;; makeinfo) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.texi' or \`.texinfo' file, or any other file indirectly affecting the aspect of the manual. The spurious call might also be the consequence of using a buggy \`make' (AIX, DU, IRIX). You might want to install the \`Texinfo' package or the \`GNU make' package. Grab either from any GNU archive site." # The file to touch is that specified with -o ... file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` if test -z "$file"; then # ... or it is the one specified with @setfilename ... infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $infile` # ... or it is derived from the source name (dir/f.texi becomes f.info) test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info fi # If the file does not exist, the user really needs makeinfo; # let's fail without touching anything. test -f $file || exit 1 touch $file ;; tar) shift # We have already tried tar in the generic part. # Look for gnutar/gtar before invocation to avoid ugly error # messages. if (gnutar --version > /dev/null 2>&1); then gnutar "$@" && exit 0 fi if (gtar --version > /dev/null 2>&1); then gtar "$@" && exit 0 fi firstarg="$1" if shift; then case "$firstarg" in *o*) firstarg=`echo "$firstarg" | sed s/o//` tar "$firstarg" "$@" && exit 0 ;; esac case "$firstarg" in *h*) firstarg=`echo "$firstarg" | sed s/h//` tar "$firstarg" "$@" && exit 0 ;; esac fi echo 1>&2 "\ WARNING: I can't seem to be able to run \`tar' with the given arguments. You may want to install GNU tar or Free paxutils, or check the command line arguments." exit 1 ;; *) echo 1>&2 "\ WARNING: \`$1' is needed, and is $msg. You might have modified some files without having the proper tools for further handling them. Check the \`README' file, it often tells you about the needed prerequisites for installing this package. You may also peek at any GNU archive site, in case some other package would contain this missing \`$1' program." exit 1 ;; esac exit 0 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: polyml.5.2.1/poly.10000644000175000017500000000162410720633300013036 0ustar daviddavid.TH POLY 1 "Poly/ML Version 5.1 2007" .SH NAME poly \- the Poly/ML Standard ML implementation .SH SYNOPSIS .B poly .SH DESCRIPTION .I poly starts the Poly/ML shell. Poly/ML is an implementation of Standard ML developed by David Matthews at Cambridge and at the Laboratory for Foundations of Computer Science (LFCS) at Edinburgh. .SH OPTIONS .TP .B \-v Print the version of Poly/ML and exit. .TP .B \--help Print a list of the arguments and exit. .TP .B \-q Suppress the start-up message. .TP .BI \-H " size" Set the initial heap size, in MB. .TP .BI \--heap " size" Set the initial heap size, in MB. .TP .BI \--immutable " size" Set the size of the immutables buffer, in MB. .TP .BI \--mutable " size" Set the size of the mutables buffer, in MB. .TP .BI \--timeslice " timeslice Set the timeslice. .TP .BI \--debug " level" Set the debugging level. .fi .SH SEE ALSO .PP .B http://www.poly.org The Poly/ML web site. polyml.5.2.1/poly.ico0000644000175000017500000000137610506226524013464 0ustar daviddavid è( @€€€€€€€€€€ÀÀÀ€€€ÿÿÿÿÿÿÿÿÿÿÿÿ@™™™™™™‘@™™™™™‘@™™™Q™™™‘@™™™™™™‘@™™™‘™™™™@™™™™™™‘@™™™‘™™™‘@™™™‘™™™‘@@™™™™™™™‘™™™™™™™‘0™™™™™™™‘;0 ™™™™™™™™™»0™™™™‘;»³™™™ˆ@;»»™™‘ÿp;»»™™wÿÿp»»™™ÿÿÿx»»™™ÿÿÿÿ@»»™øXÿÿ@»»‘ÿpÿÿˆ;»ÿðÿÿ÷»ÿ÷ÿÿ…±‘‡wwwww›0™™™@™™™™™‘™™™™@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŸŸ€Ààðøøøøøøøøøøüü?ÿÿÿÿÿ€ÿÿÿÿÿpolyml.5.2.1/polyexports.h0000644000175000017500000000602010772160256014561 0ustar daviddavid/* Title: standalone.h Copyright (c) 2006 David C.J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ /* This header contains the structures used in saved state created by "export". */ #ifndef _STANDALONE_H #define _STANDALONE_H 1 #if(defined(HAVE_WINDOWS_H)) #include typedef UINT_PTR UNSIGNEDADDR; #else typedef unsigned long UNSIGNEDADDR; #endif // There are several entries typedef struct _memTableEntry { void *mtAddr; // The address of the area of memory UNSIGNEDADDR mtLength; // The length in bytes of the area UNSIGNEDADDR mtFlags; // Flags describing the area. UNSIGNEDADDR mtIndex; // An index to identify permanent spaces. } memoryTableEntry; #define MTF_WRITEABLE 0x00000001 // The area is writeable by ML code #define MTF_EXECUTABLE 0x00000002 // The area contains executable code #define MTF_NO_OVERWRITE 0x00000004 // With MTF_WRITEABLE: Don't load over the top typedef struct _exportDescription { unsigned structLength; // The length of this structure unsigned memTableSize; // The size of each entry in the memory table unsigned memTableEntries; // The number of entries in the memory table unsigned ioIndex; // The index in the memory table for the io interface area memoryTableEntry *memTable; // Pointer to the memory table. void *rootFunction; // Points to the start-up function UNSIGNEDADDR timeStamp; // Creation time stamp unsigned architecture; // Machine architecture unsigned rtsVersion; // Run-time system version unsigned ioSpacing; // Size of each entry in the io interface area. } exportDescription; extern exportDescription poly_exports; #ifdef __cplusplus extern "C" { #endif #ifdef WINDOWS_PC #ifdef NO_POLY_LIBRARY #define POLYLIB_API #else #if(defined(POLYLIB_EXPORTS)||defined(DLL_EXPORT)) #define POLYLIB_API __declspec(dllexport) #else #define POLYLIB_API __declspec(dllimport) #endif #endif extern POLYLIB_API int PolyWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow, exportDescription *exports); #endif int polymain(int argc, char *argv[], exportDescription *exports); #ifdef __cplusplus }; #endif #endif polyml.5.2.1/polyimport.10000644000175000017500000000131110720633300014262 0ustar daviddavid.TH POLY 1 "Poly/ML Version 5.1 2007" .SH NAME polyimport \- the Poly/ML import program .SH SYNOPSIS .B polyimport .I importfile .SH DESCRIPTION .I polyimport reads in a Poly/ML import file and runs it. Import files are generated using the PolyML.exportPortable function. .SH OPTIONS .TP .BI \-H " size" Set the initial heap size, in MB. .TP .BI \--heap " size" Set the initial heap size, in MB. .TP .BI \--immutable " size" Set the size of the immutables buffer, in MB. .TP .BI \--mutable " size" Set the size of the mutables buffer, in MB. .TP .BI \--timeslice " timeslice Set the timeslice. .TP .BI \--debug " level" Set the debugging level. .fi .SH SEE ALSO .PP .B http://www.poly.org The Poly/ML web site. polyml.5.2.1/polyimport.c0000644000175000017500000000247510673210717014372 0ustar daviddavid/* Title: ppoly.c Copyright (c) 2006 David C.J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ // This is the start-up function for Poly/ML for importing a portable database. #ifdef HAVE_CONFIG_H #include "config.h" #elif defined(WIN32) #include "winconfig.h" #else #error "No configuration file" #endif #include "polyexports.h" #ifdef WINDOWS_PC int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { return PolyWinMain(hInstance, hPrevInstance, lpCmdLine, nCmdShow, 0); } #else int main(int argc, char *argv[]) { return polymain(argc, argv, 0); } #endif polyml.5.2.1/resource.h0000644000175000017500000000144010506226524013775 0ustar daviddavid//{{NO_DEPENDENCIES}} // Microsoft Developer Studio generated include file. // Used by PolyML.rc // #define IDR_MENU 101 #define IDD_ABOUT_POLYML 101 #define IDI_ICON 102 #define ID_EDIT_COPY 30002 #define ID_EDIT_PASTE 30003 #define ID_RUN_INTERRUPT 40001 #define ID_HELP_ABOUT 40002 #define ID_FILE_QUIT 40003 #define IDC_STATIC -1 // Next default values for new objects // #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NEXT_RESOURCE_VALUE 103 #define _APS_NEXT_COMMAND_VALUE 40004 #define _APS_NEXT_CONTROL_VALUE 1000 #define _APS_NEXT_SYMED_VALUE 101 #endif #endif polyml.5.2.1/winconfig.h0000644000175000017500000004127610671516175014153 0ustar daviddavid/* config.h.in. Generated from configure.ac by autoheader. */ #ifndef CONF_H_INCLUDED #define CONF_H_INCLUDED /* Define to 1 if the `closedir' function returns void instead of `int'. */ #undef CLOSEDIR_VOID /* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP systems. This function is required for `alloca.c' support on those systems. */ #undef CRAY_STACKSEG_END /* Define to 1 if using `alloca.c'. */ #undef C_ALLOCA /* Define to the type of elements in the array set by `getgroups'. Usually this is either `int' or `gid_t'. */ #undef GETGROUPS_T /* Define to 1 if the `getpgrp' function requires zero arguments. */ #undef GETPGRP_VOID /* Define to 1 if you have `alloca', as a function or macro. */ #undef HAVE_ALLOCA #define HAVE_ALLOCA 1 /* Define to 1 if you have and it should be used (not on Ultrix). */ #undef HAVE_ALLOCA_H /* Define to 1 if you have the header file. */ #undef HAVE_ASSERT_H #define HAVE_ASSERT_H 1 /* Define to 1 if you have the `bzero' function. */ #undef HAVE_BZERO /* Define to 1 if your system has a working `chown' function. */ #undef HAVE_CHOWN /* Define to 1 if you have the header file. */ #undef HAVE_CTYPE_H #define HAVE_CTYPE_H 1 /* Define to 1 if you have the header file. */ #undef HAVE_DIRECT_H #define HAVE_DIRECT_H 1 /* Define to 1 if you have the header file, and it defines `DIR'. */ #undef HAVE_DIRENT_H /* Define to 1 if you have the header file. */ #undef HAVE_DLFCN_H /* Define to 1 if you have the `dlopen' function. */ #undef HAVE_DLOPEN /* Define to 1 if you don't have `vprintf' but do have `_doprnt.' */ #undef HAVE_DOPRNT /* Define to 1 if you have the `dtoa' function. */ #undef HAVE_DTOA /* Define to 1 if you have the `dup2' function. */ #undef HAVE_DUP2 #define HAVE_DUP2 1 /* Define to 1 if you have the header file. */ #undef HAVE_ELF_H /* Define to 1 if you have the header file. */ #undef HAVE_ERRNO_H #define HAVE_ERRNO_H 1 /* Define to 1 if you have the header file. */ #undef HAVE_EXCPT_H #define HAVE_EXCPT_H 1 /* Define to 1 if you have the header file. */ #undef HAVE_FCNTL_H #define HAVE_FCNTL_H 1 /* Define to 1 if you have the header file. */ #undef HAVE_FENV_H /* Define to 1 if you have the header file. */ #undef HAVE_FLOAT_H #define HAVE_FLOAT_H 1 /* Define to 1 if you have the `floor' function. */ #undef HAVE_FLOOR #define HAVE_FLOOR 1 /* Define to 1 if you have the `fork' function. */ #undef HAVE_FORK /* Define to 1 if you have the header file. */ #undef HAVE_FPU_CONTROL_H /* Define to 1 if you have the `ftruncate' function. */ #undef HAVE_FTRUNCATE /* Define to 1 if you have the `getcwd' function. */ #undef HAVE_GETCWD /* Define to 1 if your system has a working `getgroups' function. */ #undef HAVE_GETGROUPS /* Define to 1 if you have the `gethostbyaddr' function. */ #undef HAVE_GETHOSTBYADDR #define HAVE_GETHOSTBYADDR 1 /* Define to 1 if you have the `gethostname' function. */ #undef HAVE_GETHOSTNAME #define HAVE_GETHOSTNAME 1 /* Define to 1 if you have the `getnetbyaddr' function. */ #undef HAVE_GETNETBYADDR /* Define to 1 if you have the `getnetbyname' function. */ #undef HAVE_GETNETBYNAME /* Define to 1 if you have the `getpagesize' function. */ #undef HAVE_GETPAGESIZE /* Define to 1 if you have the `getrusage' function. */ #undef HAVE_GETRUSAGE /* Define to 1 if you have the `gettimeofday' function. */ #undef HAVE_GETTIMEOFDAY /* Define to 1 if you have the header file. */ #undef HAVE_GRP_H /* Define to 1 if you have the header file. */ #undef HAVE_IEEEFP_H /* Define to 1 if the system has the type `IMAGE_FILE_HEADER'. */ #undef HAVE_IMAGE_FILE_HEADER #define HAVE_IMAGE_FILE_HEADER 1 /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_IO_H #define HAVE_IO_H 1 /* Define to 1 if you have the `dl' library (-ldl). */ #undef HAVE_LIBDL /* Define to 1 if you have the `gcc' library (-lgcc). */ #undef HAVE_LIBGCC /* Define to 1 if you have the `gcc_s' library (-lgcc_s). */ #undef HAVE_LIBGCC_S /* Define to 1 if you have the `m' library (-lm). */ #undef HAVE_LIBM /* Define to 1 if you have the `nsl' library (-lnsl). */ #undef HAVE_LIBNSL /* Define to 1 if you have the `pthread' library (-lpthread). */ #undef HAVE_LIBPTHREAD /* Define to 1 if you have the `socket' library (-lsocket). */ #undef HAVE_LIBSOCKET /* Define to 1 if you have the `stdc++' library (-lstdc++). */ #undef HAVE_LIBSTDC__ /* Define to 1 if you have the `X11' library (-lX11). */ #undef HAVE_LIBX11 /* Define to 1 if you have the `Xext' library (-lXext). */ #undef HAVE_LIBXEXT /* Define to 1 if you have the `Xm' library (-lXm). */ #undef HAVE_LIBXM /* Define to 1 if you have the `Xt' library (-lXt). */ #undef HAVE_LIBXT /* Define to 1 if you have the header file. */ #undef HAVE_LIMITS_H /* Define to 1 if you have the header file. */ #undef HAVE_LOCALE_H #define HAVE_LOCALE_H 1 /* Define to 1 if the system has the type `long long'. */ #undef HAVE_LONG_LONG /* Define to 1 if `lstat' has the bug that it succeeds when given the zero-length file name argument. */ #undef HAVE_LSTAT_EMPTY_STRING_BUG /* Define to 1 if you have the header file. */ #undef HAVE_MACH_O_RELOC_H /* Define to 1 if you have the header file. */ #undef HAVE_MALLOC_H #define HAVE_MALLOC_H 1 /* Define to 1 if you have the header file. */ #undef HAVE_MATH_H #define HAVE_MATH_H 1 /* Define to 1 if `gregs' is member of `mcontext_t'. */ #undef HAVE_MCONTEXT_T_GREGS /* Define to 1 if `mc_esp' is member of `mcontext_t'. */ #undef HAVE_MCONTEXT_T_MC_ESP /* Define to 1 if `regs' is member of `mcontext_t'. */ #undef HAVE_MCONTEXT_T_REGS /* Define to 1 if you have the `memmove' function. */ #undef HAVE_MEMMOVE #define HAVE_MEMMOVE 1 /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H #define HAVE_MEMORY_H 1 /* Define to 1 if you have the `memset' function. */ #undef HAVE_MEMSET #define HAVE_MEMSET 1 /* Define to 1 if you have the `mkdir' function. */ #undef HAVE_MKDIR /* Define to 1 if you have the `mkfifo' function. */ #undef HAVE_MKFIFO /* Define to 1 if you have the `mkstemp' function. */ #undef HAVE_MKSTEMP /* Define to 1 if you have a working `mmap' system call. */ #undef HAVE_MMAP /* Define to 1 if you have the `mprotect' function. */ #undef HAVE_MPROTECT /* Define to 1 if you have the `munmap' function. */ #undef HAVE_MUNMAP /* Define to 1 if you have the header file, and it defines `DIR'. */ #undef HAVE_NDIR_H /* Define to 1 if you have the header file. */ #undef HAVE_NETDB_H /* Define to 1 if you have the header file. */ #undef HAVE_NETINET_IN_H /* Define to 1 if you have the header file. */ #undef HAVE_NETINET_TCP_H /* Define to 1 if you have the `pathconf' function. */ #undef HAVE_PATHCONF /* Define to 1 if you have the PE/COFF types. */ #undef HAVE_PECOFF #define HAVE_PECOFF 1 /* Define to 1 if you have the header file. */ #undef HAVE_POLL_H /* Define to 1 if you have the `pow' function. */ #undef HAVE_POW /* Define to 1 if you have the header file. */ #undef HAVE_PTHREAD_H /* Define to 1 if you have the header file. */ #undef HAVE_PWD_H /* Define to 1 if your system has a GNU libc compatible `realloc' function, and to 0 otherwise. */ #undef HAVE_REALLOC /* Define to 1 if you have the `realpath' function. */ #undef HAVE_REALPATH /* Define to 1 if you have the `rmdir' function. */ #undef HAVE_RMDIR /* Define to 1 if you have the `select' function. */ #undef HAVE_SELECT #define HAVE_SELECT 1 /* Define to 1 if you have the `setlocale' function. */ #undef HAVE_SETLOCALE #define HAVE_SETLOCALE 1 /* Define to 1 if you have the `sigaction' function. */ #undef HAVE_SIGACTION /* Define to 1 if you have the `sigaltstack' function. */ #undef HAVE_SIGALTSTACK /* Define to 1 if the system has the type `sighandler_t'. */ #undef HAVE_SIGHANDLER_T /* Define to 1 if you have the header file. */ #undef HAVE_SIGINFO_H /* Define to 1 if you have the header file. */ #undef HAVE_SIGNAL_H #define HAVE_SIGNAL_H 1 /* Define to 1 if the system has the type `sig_t'. */ #undef HAVE_SIG_T /* Define to 1 if you have the `socket' function. */ #undef HAVE_SOCKET #define HAVE_SOCKET 1 /* Define to 1 if the system has the type `socklen_t'. */ #undef HAVE_SOCKLEN_T /* Define to 1 if you have the `sqrt' function. */ #undef HAVE_SQRT #define HAVE_SQRT 1 /* Define to 1 if the system has the type `stack_t'. */ #undef HAVE_STACK_T /* Define to 1 if `stat' has the bug that it succeeds when given the zero-length file name argument. */ #undef HAVE_STAT_EMPTY_STRING_BUG /* Define to 1 if you have the header file. */ #undef HAVE_STDARG_H /* Define to 1 if stdbool.h conforms to C99. */ #undef HAVE_STDBOOL_H /* Define to 1 if you have the header file. */ #undef HAVE_STDDEF_H #define HAVE_STDDEF_H 1 /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDIO_H #define HAVE_STDIO_H 1 /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H #define HAVE_STDLIB_H 1 /* Define to 1 if you have the `strdup' function. */ #undef HAVE_STRDUP #define HAVE_STRDUP 1 /* Define to 1 if you have the `strerror' function. */ #undef HAVE_STRERROR #define HAVE_STRERROR 1 /* Define to 1 if you have the `strftime' function. */ #undef HAVE_STRFTIME #define HAVE_STRFTIME 1 /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H #define HAVE_STRING_H /* Define to 1 if you have the `strtod' function. */ #undef HAVE_STRTOD #define HAVE_STRTOD 1 /* Define to 1 if the system has the type `struct ppc_thread_state'. */ #undef HAVE_STRUCT_PPC_THREAD_STATE /* Define to 1 if the system has the type `struct sigcontext'. */ #undef HAVE_STRUCT_SIGCONTEXT /* Define to 1 if you have the `sysctl' function. */ #undef HAVE_SYSCTL /* Define to 1 if you have the header file, and it defines `DIR'. */ #undef HAVE_SYS_DIR_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_ELF_386_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_ELF_SPARC_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_ERRNO_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_FILE_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_FILIO_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_IOCTL_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_MMAN_H /* Define to 1 if you have the header file, and it defines `DIR'. */ #undef HAVE_SYS_NDIR_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_PARAM_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_RESOURCE_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_SELECT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_SIGNAL_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_SOCKET_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_SOCKIO_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H #define HAVE_SYS_STAT_H 1 /* Define to 1 if you have the header file. */ #undef HAVE_SYS_SYSCTL_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_SYSTEMINFO_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TERMIOS_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TIMES_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TIME_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H #define HAVE_SYS_TYPES_H 1 /* Define to 1 if you have the header file. */ #undef HAVE_SYS_UIO_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_UN_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_UTSNAME_H /* Define to 1 if you have that is POSIX.1 compatible. */ #undef HAVE_SYS_WAIT_H /* Define to 1 if you have the header file. */ #undef HAVE_TCHAR_H #define HAVE_TCHAR_H 1 /* Define to 1 if you have the header file. */ #undef HAVE_TIME_H #define HAVE_TIME_H 1 /* Define to 1 if you have the header file. */ #undef HAVE_UCONTEXT_H /* Define to 1 if the system has the type `ucontext_t'. */ #undef HAVE_UCONTEXT_T /* Define to 1 if you have the `uname' function. */ #undef HAVE_UNAME /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Define to 1 if you have the header file. */ #undef HAVE_VALUES_H /* Define to 1 if you have the `vfork' function. */ #undef HAVE_VFORK /* Define to 1 if you have the header file. */ #undef HAVE_VFORK_H /* Define to 1 if you have the `vprintf' function. */ #undef HAVE_VPRINTF /* Define to 1 if you have the header file. */ #undef HAVE_WINDOWS_H #define HAVE_WINDOWS_H 1 /* Define to 1 if `fork' works. */ #undef HAVE_WORKING_FORK /* Define to 1 if `vfork' works. */ #undef HAVE_WORKING_VFORK /* Define to 1 if you have the header file. */ #undef HAVE_X11_XLIB_H /* Define to 1 if the system has the type `x86_thread_state32_t'. */ #undef HAVE_X86_THREAD_STATE32_T /* Define to 1 if the system has the type `x86_thread_state64_t'. */ #undef HAVE_X86_THREAD_STATE64_T /* Define to 1 if you have the header file. */ #undef HAVE_XM_XM_H /* Define to 1 if the system has the type `_Bool'. */ #undef HAVE__BOOL /* Define to 1 if `lstat' dereferences a symlink specified with a trailing slash. */ #undef LSTAT_FOLLOWS_SLASHED_SYMLINK /* Name of package */ #undef PACKAGE /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the version of this package. */ #undef PACKAGE_VERSION /* Define to 1 if the C compiler supports function prototypes. */ #undef PROTOTYPES /* Define as the return type of signal handlers (`int' or `void'). */ #undef RETSIGTYPE /* Define to the type of arg 1 for `select'. */ #undef SELECT_TYPE_ARG1 /* Define to the type of args 2, 3 and 4 for `select'. */ #undef SELECT_TYPE_ARG234 /* Define to the type of arg 5 for `select'. */ #undef SELECT_TYPE_ARG5 /* Define to 1 if the `setvbuf' function takes the buffering type as its second argument and the buffer pointer as the third, as on System V before release 3. */ #undef SETVBUF_REVERSED /* The size of `long', as computed by sizeof. */ #undef SIZEOF_LONG #define SIZEOF_LONG 4 /* The size of `void*', as computed by sizeof. */ #undef SIZEOF_VOIDP #define SIZEOF_VOIDP 4 /* If using the C implementation of alloca, define if you know the direction of stack growth for your system; otherwise it will be automatically deduced at runtime. STACK_DIRECTION > 0 => grows toward higher addresses STACK_DIRECTION < 0 => grows toward lower addresses STACK_DIRECTION = 0 => direction of growth unknown */ #undef STACK_DIRECTION /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Define to 1 if you can safely include both and . */ #undef TIME_WITH_SYS_TIME /* Define to 1 if your declares `struct tm'. */ #undef TM_IN_SYS_TIME /* Version number of package */ #undef VERSION /* Define like PROTOTYPES; this can be used by system headers. */ #undef __PROTOTYPES /* Define to empty if `const' does not conform to ANSI C. */ #undef const /* Define to `int' if doesn't define. */ #define gid_t int /* Define to rpl_malloc if the replacement function should be used. */ #undef malloc /* Define to `int' if does not define. */ #define mode_t int /* Define to `long' if does not define. */ #undef off_t /* Define to `int' if does not define. */ #define pid_t int /* Define to rpl_realloc if the replacement function should be used. */ #undef realloc /* Define to `unsigned' if does not define. */ #undef size_t /* Define to `int' if doesn't define. */ #define uid_t int /* Define as `fork' if `vfork' does not work. */ #undef vfork #endif polyml.5.2.1/imports/0000755000175000017500000000000011100060535013460 5ustar daviddavidpolyml.5.2.1/imports/polymli386.txt0000644000175000017500000605402211020251652016163 0ustar daviddavidObjects 7478 Root 9 9:O3|@11,@7296,@10 10:O1|@170 11:C2,160|3b650c7303ff55248b42048b38ff720889f8bad8a0744190ff12b8010000008b14240bc0ff12ff7504be6ea07441566a01896504bb01000000b8270000000bc0ff1500a4040889c3ff7424088f4504eb1290b80100000090ff156091040889c3505050ff7504baa2a07441526a01896504b80100000089daff12ff7424088f4504eb0683c80050505083c4183b650c7303ff5524eb90b80100000083c41cc390|@15,63|19,0,@12 27,0,0 42,0,$11+82 53,0,0 58,0,19 66,0,I150 83,0,0 90,0,I1 103,0,$11+134 114,0,0 151,0,0 12:O1|@13 13:C2,80|3b650c7303ff552483f8017506b801000000c3ff308b400490e8e2ffffffff7504bf26a17441576a01896504b8010000008b54240c83c800ff12ff7424088f450483c410c390b80100000083c404c390|@14,63|14,0,0 34,0,$13+70 45,0,0 71,0,0 14:S20|506f6c794d4c2e72756e4f6e456e747279283129 15:S24|506f6c794d4c2e72756e46756e6374696f6e283129283129 16:O2|@18,@17 17:O2|@41,@40 18:O1|@19 19:C2,112|3b650c7303ff552450506a018d7c240457bb01000000b8010000000bc0e86a0000008b74240489f383f3fe89da83e2058b0c2489c80bc28b7d008d7ff43b7d087303ff5520897d00c747fc02000000894704bee8a37441893789fbb80f000000ff15609a0408b80100000083c408c390|@39,63|18,0,0 23,0,0 30,1,@20 83,0,@25 92,0,7 98,0,I73 103,0,0 20:C2,264|3b650c7303ff552483f80175158b44240489188b5c2408895804b801000000c208008b388b3783fe0175758b570483fa03753889d983c9038b5c240889de83e60383fe01740db858a37441ff552cb80100000089de83ce038b542404897424088954240489cb8b4004eb958b4c240889ce83e60383fe01740eb858a3744190ff552cb80100000089ce83ce038b54240489742408895424048b4004e960ffffff8b4f0483f9037507ba01000000eb1d83f9fd7507ba05000000eb1183f9017507ba09000000eb05ba0d00000089d60bf38b5c240889da83e20d83fa01740db858a37441ff552cb80100000089da83ca0d8b4c240489542408894c240489f38b4004e9fafeffff0bc0|@24,63|27,0,0 71,0,@21 79,0,0 122,0,@21 131,0,0 169,0,0 181,0,2 193,0,4 200,0,6 223,0,@21 231,0,0 21:O3|12,@23,@22 22:S53|5468652073616d65206174747269627574652061707065617273206d6f7265207468616e206f6e636520696e20746865206c697374 23:S6|546872656164 24:S38|5468726561642e5468726561642e6174747273546f576f7264283129636f6e76657274283429 25:O1|@26 26:C2,252|3b650c7303ff5524bb01000000b8030000000bc0ff1500990408f7c001000000752dff7504bf3aa47441576a018965048b308b580489d889f283c800ff12ff7424088f4504eb7183c800505050eb6ebf040007408b3783fe037521b804000740ff15209a040883f8017511bb03000000b801000000e89e000000eb6d50506a018d5c240453bb01000000b8010000000bc0e8aefdffff8b54240489d183f1fe89c883e0058b3c2489fe0bf08b5d008d5bf43b5d08730feb0ae92f000000e92a000000ff5520895d00c743fc02000000897304baa8a874418913b80f0000000bc0ff15609a040883c408505050b80100000083c40ce907ffffff83c800|@38,63|9,0,0 14,0,1 22,0,I62 38,0,$26+74 80,0,@0 92,0,@0 98,0,I71 108,0,1 113,0,0 118,1,@27 134,0,0 139,0,0 146,1,@20 211,0,@35 218,0,7 226,0,I73 237,0,0 27:C2,204|3b650c7303ff552483fb017402eb5abb01000000b8040007408b3883ff037507be01000000eb2f81fb419c00007507be01000000eb20f6c3017503ff553889de83c60270f689f33b650c7303ff5524ebc3be01000000b80400074090ff15209a040883f8017507eb1fe91a000000bb04000740b803000000ff15609a04083b650c7303ff5524eb87bbf0a57441b86ca6744183c800e8d6000000b80400074090ff15009a040883f8037506b801000000c3be04000740c70603000000bb04000740b805000000ff25609a0408|@34,63|16,0,0 21,0,@0 33,0,0 48,0,0 82,0,0 87,0,@0 94,0,I71 111,0,@0 116,0,1 122,0,I73 137,0,@28 142,0,@31 150,1,@32 155,0,@0 162,0,I70 172,0,0 178,0,@0 184,0,1 189,0,@0 194,0,2 200,0,I73 28:O1|@29 29:C2,48|3b650c7303ff552483f8017506b801000000c3ff70048b18b80900000083c800ff15609a04088b042483c404ebd20bc0|@30,63|14,0,0 25,0,4 34,0,I73 30:S30|5468726561642e436f6e646974696f6e5661722e77616b65416c6c283129 31:O2|@2,@1 32:C2,440|3b650c7303ff55248b388b700483c800ff15409a04088b500489d083e00d83f8017507ba03000000eb1d83f8057507bafdffffffeb1183f8097507ba01000000eb05baffffffff83fa037502eb2889d1ff15409a04085090ff15409a04088b500489d083e0f389c283ca058b042489500483c40489ca53575652bf010000008b7424088b1e83fb037507ba01000000eb3281ff419c00007507ba01000000eb23f7c7010000007503ff553889fa83c20270f689d73b650c7303ff5524ebc1ba0100000089f083c800ff15209a040883f8017502eb1789f3b803000000ff15609a04083b650c7303ff5524eb8e8b5424048b028b54240c0bc0ff128b4c240489018b442408ff15009a040883f8037502eb198b442408c7000300000089c3b8050000000bc0ff15609a04080bc0ff15409a04088b342483fe037507bf01000000eb1d83fefd7507bf05000000eb1183fe017507bf09000000eb05bf0d00000089c3ff15409a04088b500489d183e1f389f80bc189430483fe017502eb0783feff7402eb2b90ff15409a04088b780c83ff017413bb01000000b81700000083c410ff25609a0408b80100000083c410c3b80100000083c410c390|@33,63|18,0,I72 36,0,1 48,0,-2 60,0,0 67,0,-1 82,0,I72 90,0,I72 123,0,0 139,0,0 154,0,0 191,0,0 202,0,I71 216,0,1 222,0,I73 262,0,I70 279,0,1 286,0,2 294,0,I73 302,0,I72 315,0,0 327,0,2 339,0,4 346,0,6 354,0,I72 390,0,I72 403,0,0 408,0,11 417,0,I73 422,0,0 431,0,0 33:S40|5468726561642e436f6e646974696f6e5661722e7369676e616c4f7242726f616463617374283229 34:S35|5369676e616c2e73696754687265616428312962726f6164436173745765616b283229 35:O1|@36 36:C2,20|3b650c7303ff5524bb01000000e946fcffff0bc0|@37,63|9,0,0 14,1,@27 37:S38|5369676e616c2e73696754687265616428312962726f6164436173745765616b283129283129 38:S19|5369676e616c2e736967546872656164283129 39:S20|5369676e616c2e666f726b546872656164283129 40:O2|@158,@157 41:O4|@42,@146,@45,@7297 42:C2,104|8b420c8b385283ff017502eb188b178b4204c700010000008b7f043b650c7303ff5524ebe18b1424b814a0b4418b388b45008d40f43b45087303ff5520894500c740fc020000008978048b7a088938be14a0b44189068b5a04b82500000083c404ff2500a4040890|@145,63|20,0,0 41,0,@7298 80,0,@7298 90,0,18 99,0,I150 43:O2|@45,@44 44:O2|@72,@71 45:O2|@46,@7297 46:C2,136|3b650c7303ff55248b7a048b3752505683fe017502eb278b16ff7604ff7210bbb4aa744189d083c800e8f20400008b342483c4043b650c7303ff5524ebd2b8010000008b54240490ff128b5c24088b53048b0c24890a8b0283f8017509b80100000083c40cc38b388b7704c706010000008b40043b650c7303ff5524ebdab80100000083c40cc390|@70,63|32,0,@47 42,1,@62 63,0,0 94,0,0 109,0,0 127,0,0 47:O1|@48 48:C2,168|3b650c7303ff55248b78048b378b580883fe017506b801000000c38b531cf7c201000000752056ff33ff30ff32c70701000000b8010000008d54241090e88200000083c410c38b4d008d49f03b4d087303ff5520894d00c741fc03000000be94ae7441897108bee0ae74418971048b3389318b7d008d7ff03b7d087303ff5520897d00c747fc03000000894f08b9a4ae7441894f04b91ca0b441890f89f890ff552cb80100000090|@61,63|22,0,0 47,0,0 52,0,0 62,1,@49 95,0,@56 103,0,@59 142,0,@57 150,0,@7299 163,0,0 49:C2,348|3b650c7303ff55245250ff7504bfeeab7441576a018965048b5afc89d923c8f6c1017503ff553889d92bc88d490170f48b7d008d7ff83b7d087303ff5520897d00c747fc01000000890fff72f05789c38b42f40bc0e81e0100008b142483c800ff1289c6ff74240c8f4504eb74908b7424048b10b91ca0b4413bd1750989c3eb65bb0100000083fa03750cbb70ae7441eb59bb010000008b7d008d7ff03b7d087303ff5520897d00c747fc03000000bb94ae7441895f088947048b4ef8890f8b5d008d5bf03b5d087303ff5520895d00c743fc03000000897b08bfa4ae7441eb0fe921000000e90f000000e90a000000897b04bf1ca0b441893b89d883c800ff552cbe010000008b5c241089f223d3f6c2017503ff55388d56ff03d370f68b4c24148b41fc520bd0f6c2015a7503ff55383bd07509b80100000083c418c389f023c3a8017503ff55388d46ff03c370f689ca83c418e9a6feffff0bc0|@58,63|14,0,$49+110 86,1,@50 117,0,@7299 130,0,0 140,0,@54 147,0,0 176,0,@56 219,0,@57 244,0,@7299 259,0,0 310,0,0 50:C2,272|8b7c240483ff01755ef7c3010000007411f6c3017503ff553883fb017c0489deeb1389c6b824ae74410bc0ff552c89f3be010000008b183bf3773189da2bd683c2018b4d008d49f03b4d087303ff5520894d00c741fc03000000894108895104893189c8c20400e90f000000b824ae74410bc0ff552cb801000000f7c3010000007411f6c3017503ff553883fb017c0489deeb1189c6b824ae7441ff552c89f3be010000008b1ff7c3010000007411f6c3017503ff553883fb017c0489daeb1189c2b824ae7441ff552c89d1ba010000008d4aff03ce8b383bcf77258b5d008d5bf03b5d087303ff5520895d00c743fc03000000894308895304893389d8c20400b824ae744190ff552cb80100000090|@53,63|37,0,@51 49,0,0 109,0,@51 119,0,0 151,0,@51 161,0,0 195,0,@51 205,0,0 258,0,@51 267,0,0 51:O3|11,@52,0 52:S9|537562736372697074 53:S32|566563746f72536c6963654f7065726174696f6e7328292e736c696365283329 54:O3|1,@55,0 55:S9|496e74657272757074 56:S8|666c7573684f7574 57:S2|496f 58:S40|426173696353747265616d494f28292e666c7573684f757427283129666c75736842756666283129 59:O3|@7300,@60,0 60:S20|426c6f636b696e674e6f74537570706f72746564 61:S28|426173696353747265616d494f28292e666c7573684f757427283129 62:C2,476|3b650c7303ff552489c1b8010000000bc0e8e201000051535083f8017507bf01000000eb378b308b1e83fbff751c8b7d008d7ff83b7d087303ff5520897d00c747fc010000008937eb128b40043b650c7303ff5524ebc2bf01000000f7c70100000075368b0f8b0183f8ff751d8b710483fe037507ba01000000eb2cb844b27441e8a602000089c2eb1eb844b274410bc0e89602000089c2eb0eb844b274410bc0e88602000089c2b844b27441e87a020000ba010000008b4c24108b0183f8037507bf01000000eb2f81fa419c00007507bf01000000eb20f6c2017503ff553889d783c70270f689fa3b650c7303ff5524ebc4bf0100000089c80bc0ff15209a040883f8017507bf01000000eb1f89cbb80300000083c800ff15609a04083b650c7303ff5524eb8abf01000000ff7504be82b07441566a018965048b4424148b54241090ff1289c3ff7424088f4504eb469089c18b442410ff15009a040883f8037502eb1b8b442410c700030000005189c3b80500000090ff15609a0408eb01518b442404e8a20100008b04240bc0ff552cbb0100000089d98b44241c83c800ff15009a040883f8037502eb1b8b44241cc700030000005189c3b80500000090ff15609a0408eb01518b442410e85a0100008b042483c41cc2040090|@69,63|11,0,0 18,1,@63 31,0,0 88,0,0 118,0,0 125,0,@65 130,1,@67 139,0,@65 146,1,@67 155,0,@65 162,1,@67 169,0,@65 174,1,@67 179,0,0 195,0,0 210,0,0 244,0,0 254,0,I71 264,0,0 273,0,1 282,0,I73 297,0,0 305,0,$62+338 346,0,I70 363,0,1 371,0,2 378,0,I73 390,1,@67 403,0,0 418,0,I70 435,0,1 443,0,2 450,0,I73 462,1,@67 63:C2,216|3b650c7303ff5524ff15409a04088b500489d083e00383f8037507bf03000000eb05bf010000008b45008d40f43b45087303ff5520894500c740fc02000000897804c7000100000089d783e70d83ff017507be03000000eb1d83ff057507befdffffffeb1183ff097507be01000000eb05beffffffff8b55008d52f43b55087303ff5520895500c742fc02000000897204c702ffffffff8b7d008d7ff43b7d087303ff5520897d00c747fc02000000c7470401000000891789c68b45008d40f43b45087303ff5520894500c740fc020000008978048930c3|@64,53|10,0,I72 28,0,1 35,0,0 68,0,0 83,0,1 95,0,-2 107,0,0 114,0,-1 147,0,-1 178,0,0 64:S30|5468726561642e5468726561642e67657441747472696275746573283129 65:O2|@66,0 66:O2|-1,-2 67:C2,144|3b650c7303ff552489c70bc0ff15409a04088b50045050526a018d4c240851bb0100000089f883c800e8aaefffff0bc0ff15409a04088b7c240889fe83f6fe8b1c2489f223d38b4c240489cf0bfa89780489ce83e60983fe09752b90ff15409a04088b580c83fb017413bb01000000b81700000083c40cff25609a0408b80100000083c40cc3b80100000083c40cc390|@68,63|14,0,I72 32,0,0 42,1,@20 50,0,I72 94,0,I72 107,0,0 112,0,11 121,0,I73 126,0,0 135,0,0 68:S30|5468726561642e5468726561642e73657441747472696275746573283129 69:S26|426173696353747265616d494f28292e70726f74656374283329 70:S27|426173696353747265616d494f28292e646f4f6e4c6f6164283129 71:O2|@89,@88 72:O2|@73,@7301 73:C2,196|3b650c7303ff55248b7a048b378b1e83fb01756e8b4e048b398b178b59108b3b8b5e0489fe23f2f7c6010000007503ff553889fe2bf28d760170f450ff3152ff711057ff730c568b5d008d5bf83b5d087303ff5520895d00c743fc0100000089335389d38b44240890e87200000083c800e89601000050b8010000008b54241ceb05e93000000090ff12ff34248b5c240c8b442418e8e60200008b5424188b4c2414890a8b4424108b7c240c8938b80100000083c420c389c1b80100000089caff220bc0|@83,63|106,1,@74 114,1,@75 120,0,0 150,1,@81 175,0,0 186,0,0 74:C2,272|8b7c240483ff01755ef7c3010000007411f6c3017503ff553883fb017c0489deeb1389c6b824ae74410bc0ff552c89f3be010000008b183bf3773189da2bd683c2018b4d008d49f03b4d087303ff5520894d00c741fc03000000894108895104893189c8c20400e90f000000b824ae74410bc0ff552cb801000000f7c3010000007411f6c3017503ff553883fb017c0489deeb1189c6b824ae7441ff552c89f3be010000008b1ff7c3010000007411f6c3017503ff553883fb017c0489daeb1189c2b824ae7441ff552c89d1ba010000008d4aff03ce8b383bcf77258b5d008d5bf03b5d087303ff5520895d00c743fc03000000894308895304893389d8c20400b824ae744190ff552cb80100000090|@53,63|37,0,@51 49,0,0 109,0,@51 119,0,0 151,0,@51 161,0,0 195,0,@51 205,0,0 258,0,@51 267,0,0 75:C2,192|3b650c7303ff552450505089e3e8ca0000008b3c248b74240883fe017509b84097040883c40cc383fe0375178b5f048b54240489d0d1e80fb604038d44000183c40cc38d5e108d53fe89d0c1e80283c801ff7704ff7504bf1ab67441576a018965046a01bb8300000083c800ff15a092040889c3ff7424088f4504eb0e90b8d4b67441ff552cbb01000000d1ee89338d7436015352536a09568b5c24288b44242083c800ff1500aa04088b4424040bc0ff15209704088b44240483c424c30bc0|@80,63|14,1,@76 31,0,I48 88,0,$75+126 101,0,65 110,0,I11 127,0,@78 135,0,0 166,0,I198 178,0,I47 76:C2,24|8b7808893b8b308973048b5004895308b801000000c30bc0|@77,61|17,0,0 77:S31|566563746f72536c6963654f7065726174696f6e7328292e62617365283229 78:O3|4,@79,0 79:S4|53697a65 80:S24|436861724172726179536c6963652e766563746f72283129 81:C2,152|8b7c2404f7c7010000007407be03000000eb068b378d743601f7c0010000007410a8017503ff553883f8017c0489c2eb0eb824ae744190ff552cba010000008d46ff03c28b0b3bc1760db824ae7441ff552cb801000000f7c701000000741a8b43045389fbd1ebd1ea881c105b8d541201b801000000c204008b4304894424048b0c2489142456bb0900000089f851ff2500aa040883c800|@82,63|13,0,1 50,0,@51 59,0,0 75,0,@51 83,0,0 114,0,0 136,0,4 145,0,I198 82:S20|4368617241727261792e636f7079566563283329 83:S16|54657874494f2e6f6e4c6f6164283129 84:O2|0,@85 85:O5|@7303,@86,I148,@87,@7302 86:S5|737464496e 87:O2|4096,@7304 88:O2|@45,@143 89:O2|@90,@7305 90:C2,136|3b650c7303ff55248b7a048b3752505683fe017502eb278b16ff7604ff7210bbf4b8744189d083c800e8b2f6ffff8b342483c4043b650c7303ff5524ebd2b8010000008b54240490ff128b5c24088b53048b0c24890a8b0283f8017509b80100000083c40cc38b388b7704c706010000008b40043b650c7303ff5524ebdab80100000083c40cc390|@70,63|32,0,@91 42,1,@62 63,0,0 94,0,0 109,0,0 127,0,0 91:O1|@92 92:C2,168|3b650c7303ff55248b78048b378b580883fe017506b801000000c38b531cf7c201000000752056ff33ff30ff32c70701000000b8010000008d54241090e88200000083c410c38b4d008d49f03b4d087303ff5520894d00c741fc03000000be94ae7441897108bee0ae74418971048b3389318b7d008d7ff03b7d087303ff5520897d00c747fc03000000894f08b9a4ae7441894f04b91ca0b441890f89f890ff552cb80100000090|@61,63|22,0,0 47,0,0 52,0,0 62,1,@93 95,0,@56 103,0,@59 142,0,@57 150,0,@7299 163,0,0 93:C2,348|3b650c7303ff55245250ff7504bf2eba7441576a018965048b5afc89d923c8f6c1017503ff553889d92bc88d490170f48b7d008d7ff83b7d087303ff5520897d00c747fc01000000890fff72f05789c38b42f40bc0e856faffff8b142483c800ff1289c6ff74240c8f4504eb74908b7424048b10b91ca0b4413bd1750989c3eb65bb0100000083fa03750cbb70ae7441eb59bb010000008b7d008d7ff03b7d087303ff5520897d00c747fc03000000bb94ae7441895f088947048b4ef8890f8b5d008d5bf03b5d087303ff5520895d00c743fc03000000897b08bfa4ae7441eb0fe921000000e90f000000e90a000000897b04bf1ca0b441893b89d883c800ff552cbe010000008b5c241089f223d3f6c2017503ff55388d56ff03d370f68b4c24148b41fc520bd0f6c2015a7503ff55383bd07509b80100000083c418c389f023c3a8017503ff55388d46ff03c370f689ca83c418e9a6feffff0bc0|@58,63|14,0,$93+110 86,1,@74 117,0,@7299 130,0,0 140,0,@54 147,0,0 176,0,@56 219,0,@57 244,0,@7299 259,0,0 310,0,0 94:O2|@96,@95 95:O2|@125,0 96:O6|@87,@7307,@97,@7308,@3,@7306 97:O14|@99,@100,@104,0,0,@106,0,@107,@111,@115,4096,0,@118,@98 98:O1|@122 99:S6|737464457272 100:O1|@101 101:O2|@102,I202 102:C2,28|8b3c24c70424010000008b5a04b83b00000057ff25e098040883c800|@103,63|6,0,0 14,0,29 21,0,I61 103:S50|4c696272617279494f537570706f72742e777261704f757446696c654465736372283529746578745072696d57722d283129 104:O2|@105,I202 105:C2,28|8b3c24c70424010000008b5a04b80f00000057ff25e098040883c800|@103,63|6,0,0 14,0,7 21,0,I61 106:O1|I202 107:O1|@108 108:O2|@109,I202 109:C2,188|3b650c7303ff552450505089d189e30bc0e8baf9ffff8b04248b7c2404f7c7010000007414f7c7010000007503ff553883ff017c0489feeb148b7004b824ae74410bc0ff552c89f3be010000008b5c2408f7c3010000007411f6c3017503ff553883fb017c0489daeb138b5004b824ae744190ff552c89d0ba010000008b7d008d7ff03b7d087303ff5520897d00c747fc030000008957088977048b700489378b5c240c897c240c89da8b5904b81700000083c40c52ff25e0980408|@110,63|18,1,@76 61,0,@51 73,0,0 110,0,@51 121,0,0 174,0,11 184,0,I61 110:S49|4c696272617279494f537570706f72742e777261704f757446696c65446573637228352977726974654172726179283129 111:O1|@112 112:O2|@113,I202 113:C2,176|3b650c7303ff552450505089d189e30bc0e892f8ffff8b442404f7c0010000007410a8017503ff553883f8017c0489c7eb0db824ae7441ff552cbf010000008b742408f7c6010000007414f7c6010000007503ff553883fe017c0489f3eb10b824ae744183c800ff552cbb010000008d57088b45008d40f03b45087303ff5520894500c740fc030000008958088950048b3c2489388b74240c8944240c8b5904b81700000083c40c56ff25e098040890|@114,63|18,1,@76 51,0,@51 59,0,0 96,0,@51 107,0,0 161,0,11 171,0,I61 114:S50|4c696272617279494f537570706f72742e777261704f757446696c6544657363722835297772697465566563746f72283129 115:O1|@116 116:O2|@117,I202 117:C2,52|3b650c7303ff55246a018b5a04b8390000000bc0ff15e0980408a8017503ff553883f8017e06b803000000c3b801000000c30bc0|@103,63|14,0,28 22,0,I61 39,0,1 45,0,0 118:O1|@119 119:O3|@120,@108,@116 120:C2,84|3b650c7303ff55245250b8010000008b52080bc0ff1283f801742f8b7c24048b04248b570483c800ff1289c68b45008d40f83b45087303ff5520894500c740fc01000000893083c408c3b80100000083c408c390|@121,63|11,0,0 75,0,0 121:S40|5072696d494f28292e6175676d656e7457726974657228312977726974654172724e42272d283129 122:O3|@123,@112,@116 123:C2,84|3b650c7303ff55245250b8010000008b52080bc0ff1283f801742f8b7c24048b04248b570483c800ff1289c68b45008d40f83b45087303ff5520894500c740fc01000000893083c408c3b80100000083c408c390|@124,63|11,0,0 75,0,0 124:S40|5072696d494f28292e6175676d656e7457726974657228312977726974655665634e42272d283129 125:O6|@126,@7311,@127,@7312,@4,@7309 126:O2|4096,@7310 127:O14|@129,@130,@132,0,0,@133,0,@134,@136,@138,4096,0,@140,@128 128:O1|@142 129:S6|7374644f7574 130:O1|@131 131:O2|@102,I149 132:O2|@105,I149 133:O1|I149 134:O1|@135 135:O2|@109,I149 136:O1|@137 137:O2|@113,I149 138:O1|@139 139:O2|@117,I149 140:O1|@141 141:O3|@120,@135,@139 142:O3|@123,@137,@139 143:O2|@72,@144 144:O2|@89,0 145:S28|426173696353747265616d494f28292e646f4f6e456e747279283129 146:O3|@148,@147,@7297 147:O2|@151,@150 148:C2,116|3b650c7303ff55248b42088b3852be0100000083ff01750689f083c404c3ff7704ff7504bb52c27441536a018965048b4c24108b07ff70108b59040bc0e8eaecffff89c2ff7424088f4504eb0990ba0100000050505089d68b7c240c83c4103b650c7303ff5524ebaab80100000083c414c30bc0|@149,63|15,0,0 37,0,$148+78 62,1,@62 79,0,0 106,0,0 149:S27|426173696353747265616d494f28292e636c6f7365416c6c283129 150:O3|@153,@5,@7297 151:C2,36|3b650c7303ff55248b7808ff77088b520483c800ff12b8010000008b142483c404ff2290|@152,63|23,0,0 152:S28|426173696353747265616d494f28292e636c6f73654f757427283129 153:C2,232|3b650c7303ff55248b780c8b3783fe037506b801000000c3c70703000000525057ff7204ba010000008b04248b3883ff037507be01000000eb2f81fa419c00007507be01000000eb20f6c2017503ff553889d683c60270f689f23b650c7303ff5524ebc5be0100000083c800ff15209a040883f8017502eb1b8b1c24b80300000083c800ff15609a04083b650c7303ff5524eb908b74240c8b5e088b1389d989d08d542410e85a00000089018b44240c8b780489f883c800ff15009a040883f8037502eb15c7070300000089fbb8050000000bc0ff15609a04088b44240883c410e9aae6ffff0bc0|@156,63|19,0,0 26,0,1 37,0,0 52,0,0 67,0,0 101,0,0 110,0,I71 125,0,1 134,0,I73 166,1,@154 186,0,I70 199,0,1 206,0,2 214,0,I73 226,1,@48 154:C2,88|3b650c7303ff552483f8017506b801000000c38b388b770c8b5af43bf3743152578b400490e8d6ffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0424890289d083c408c38b4004ebab83c800|@155,61|14,0,0 155:S14|4c6973742e66696c746572283229 156:S35|426173696353747265616d494f28292e7465726d696e61746553747265616d27283129 157:O2|@161,0 158:O2|@159,@72 159:C2,52|b814a0b4418b388b45008d40f43b45087303ff5520894500c740fc020000008978048b7a048938be14a0b4418906b801000000c3|@160,53|1,0,@7298 40,0,@7298 47,0,0 160:S20|54657874494f2e3c7061747465726e3e2d283129 161:O4|@163,@162,@89,@7305 162:O3|@165,@164,@7305 163:C2,104|8b420c8b385283ff017502eb188b178b4204c700010000008b7f043b650c7303ff5524ebe18b1424b814a0b4418b388b45008d40f43b45087303ff5520894500c740fc020000008978048b7a088938be14a0b44189068b5a04b82500000083c404ff2500a4040890|@145,63|20,0,0 41,0,@7298 80,0,@7298 90,0,18 99,0,I150 164:O2|@167,@166 165:C2,116|3b650c7303ff55248b42088b3852be0100000083ff01750689f083c404c3ff7704ff7504bb6ec67441536a018965048b4c24108b07ff70108b59040bc0e8cee8ffff89c2ff7424088f4504eb0990ba0100000050505089d68b7c240c83c4103b650c7303ff5524ebaab80100000083c414c30bc0|@149,63|15,0,0 37,0,$165+78 62,1,@62 79,0,0 106,0,0 166:O3|@168,@6,@7305 167:C2,36|3b650c7303ff55248b7808ff77088b520483c800ff12b8010000008b142483c404ff2290|@152,63|23,0,0 168:C2,232|3b650c7303ff55248b780c8b3783fe037506b801000000c3c70703000000525057ff7204ba010000008b04248b3883ff037507be01000000eb2f81fa419c00007507be01000000eb20f6c2017503ff553889d683c60270f689f23b650c7303ff5524ebc5be0100000083c800ff15209a040883f8017502eb1b8b1c24b80300000083c800ff15609a04083b650c7303ff5524eb908b74240c8b5e088b1389d989d08d542410e85a00000089018b44240c8b780489f883c800ff15009a040883f8037502eb15c7070300000089fbb8050000000bc0ff15609a04088b44240883c410e916f1ffff0bc0|@156,63|19,0,0 26,0,1 37,0,0 52,0,0 67,0,0 101,0,0 110,0,I71 125,0,1 134,0,I73 166,1,@169 186,0,I70 199,0,1 206,0,2 214,0,I73 226,1,@92 169:C2,88|3b650c7303ff552483f8017506b801000000c38b388b770c8b5af43bf3743152578b400490e8d6ffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0424890289d083c408c38b4004ebab83c800|@155,61|14,0,0 170:C2,296|3b650c7303ff5524ff7504bf26c97441576a01896504b8bcc974410bc0e87e140b0089c6b84097040889f290ff12ff7504bbd2c87441536a01896504bb01000000b8270000000bc0ff1500a4040889c2ff7424088f4504eb1290b80100000090ff156091040889c2505050ff7504b906c97441516a01896504b8010000000bc0ff12ff7424088f4504eb0683c80050505083c4183b650c7303ff5524eb90b801000000ff7424208f450483c424c3ff7504b852c97441506a01896504bb01000000b8270000000bc0ff1500a4040889c7ff7424088f4504eb1290b80300000090ff156091040889c7505050ff7504be86c97441566a01896504b80100000089faff12ff7424088f4504eb0683c80050505083c4183b650c7303ff5524eb90b80100000083c418c390|@7295,63|12,0,$170+174 23,0,@171 30,1,@7293 37,0,I48 50,0,$170+90 61,0,0 66,0,19 74,0,I150 91,0,0 98,0,I1 111,0,$170+142 122,0,0 159,0,0 178,0,$170+218 189,0,0 194,0,19 202,0,I150 219,0,1 226,0,I1 239,0,$170+270 250,0,0 287,0,0 171:O2|@7,@172 172:O4|-1,@7314,@7315,@7313 173:O2|@174,80 174:C2,16|3b650c7303ff55248b5a04e91c000000|@178,63|12,1,@175 175:C2,252|f7c0010000007407bf03000000eb068b388d7c3f015053be0100000083ff01750489f3eb658d47fe8d5ffe8b7c2404f7c701000000740489faeb118d530889d3d1eb0fb61c1f8d5c1b0189daf7c201000000740489d1eb0ef642ff108b0a7402f7d98d4c0901ba0f0000005052d1ea8d46fff7e28d78015a588d77ff03f189c73b650c7303ff5524eb92e905000000bb010000008b1424f7c201000000740489d1eb0ef642ff108b0a7402f7d98d4c090152518d43ff89c983e9017503ff553433d2f7f18d4201595aa8017503ff553883f8017d21bf2ccb744189fe23f0f7c6010000007503ff55388d77ff03f070f689f083c408c383c408c30bc0|@177,63|9,0,1 24,0,0 103,0,7 144,0,0 214,0,@176 176:B8|0000008000000000 177:S22|486173685461626c652e6861736856616c7565283229 178:S25|486173685461626c652e6861736856616c7565283129283129 179:O2|@524,@7291 180:O2|@182,@181 181:O2|@183,0 182:S2|3c3d 183:O3|@7317,69,@184 184:O4|@182,-1,@186,@185 185:O3|1,@188,@187 186:O2|-2,4 187:O4|-3,0,@196,@195 188:O4|-2,1,@189,0 189:O2|@191,@190 190:O2|@194,0 191:O2|49,@192 192:O3|3,@7318,79992 193:O2|2,0 194:O2|50,@192 195:O2|0,@197 196:S4|626f6f6c 197:O6|@196,0,0,0,@199,@198 198:O2|-1,@7329 199:O2|-1,@7319 200:O3|1,@202,@201 201:O2|@204,@203 202:O1|-1 203:O2|@468,0 204:O4|@206,@207,@205,@187 205:O2|-1,@208 206:S4|74727565 207:O1|1 208:O2|5,@209 209:O2|-1,@210 210:O5|0,@212,@465,@7326,@211 211:O2|10,@466 212:O3|@214,@216,@213 213:O2|@453,@452 214:C2,32|3b650c7303ff55248b78088b3424893c24ff72048b58048b008b520856ff2290|@215,63| 215:S40|434f44455452454528292e67656e436f64652832292831296e6577456e7669726f6e283129283129 216:O2|@218,@217 217:O3|@221,0,@220 218:C2,28|3b650c7303ff55248b78088b3424893c248b58048b008b520456ff22|@219,63| 219:S44|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229656e76283129 220:O10|0,@428,@427,0,0,0,0,0,0,0 221:C2,144|3b650c7303ff55248b38f7c7010000007503ff553883ff017d02eb228b72088b4efc81e1ffffff008d4c09015123cff6c101597503ff55383bf97d02eb0db824ae7441ff552cbe010000008b4c7efe89cef7c60100000075048b0eeb0eb834cf744190ff552cb9010000008b720489d823c6a8017503ff553889d82bc68d400170f489cb8b3c2483c40857e954000000|@426,63|63,0,@51 71,0,0 94,0,@222 103,0,0 140,1,@225 222:O3|@7320,@224,@223 223:S7|676574536f6d65 224:S13|496e7465726e616c4572726f72 225:C2,540|3b650c7303ff552483f801750389d8c3508b3383feff75088b53048b7a08eb0d83fe0375058b7b08eb038b7b048b1783faf7757353bb0100000089f88d54240890e8f20100008b0c248b3183feff75088b59048b7b10eb05bff825754183feff75088b51048b5a04eb05bb8427754183feff75088b51048b520ceb1e8b55008d52f83b55087303ff5520895500c742fc01000040c702010000008b4d008d49e83b4d08730aeb05e96c000000ff5520894d00c741fc0500000089791089510c894108895904c7010100000050508b3783fefd750f89e3c7030100000089e2894204eb0d89e3c703ffffffff89e2894a048b45008d40f43b45087303ff5520894500c740fc020000008b0c2489088b5c240489580483c410c383fafb750689d883c404c383faf3757353bb0100000089f88d54240890e8fe0000008b0c248b3183feff75088b59048b7b10eb05bff825754183feff75088b51048b5a04eb05bbfc27754183feff75088b51048b520ceb1e8b55008d52f83b55087303ff5520895500c742fc01000040c702010000008b4d008d49e83b4d08730aeb05e96c000000ff5520894d00c741fc0500000089791089510c894108895904c7010100000050508b3783fefd750f89e3c7030100000089e2894204eb0d89e3c703ffffffff89e2894a048b45008d40f43b45087303ff5520894500c740fc020000008b0c2489088b5c240489580483c410c3b8302875410bc0ff552cb80100000090|@425,63|54,0,0 66,1,@226 89,0,@408 107,0,@416 150,0,0 199,0,0 216,0,0 231,0,-1 298,0,0 310,1,@226 333,0,@408 351,0,@421 394,0,0 443,0,0 460,0,0 475,0,-1 525,0,@423 535,0,0 226:C2,992|3b650c7303ff55248b38f7c701000000741583fff37c1583ff177f15bedad174418d74be34ffe6e9a2000000e99d000000e998000000e9a5010000909090e98b000000909090e920010000909090e9d8020000909090e973000000909090e96b000000909090e963000000909090e95b000000909090e953000000909090e94b000000909090e91a030000909090e908020000909090e933000000909090e94f020000909090e923000000909090e91b000000909090e9b3020000909090e90b000000909090e9db02000090909050505050505050508d5c240453bba0d57441b89b000000e8de1000008b55008d52e03b55087303ff5520895500c742fc070000008b4c2404890a8b4424088942048b7c240c897a088b74241089720c8b5c2414895a108b5c2418895a148b4c241c894a1852b80003754189ca0bc0ff128b1c248b442404ba0c03754183c800e82e300000b8010000008b54241090ff12b824267541ff552cb8010000008b480cf6c1017503ff553883f9017c115123cbf6c101597503ff55383bcb7d01c38b7afc89ce23f7f7c6010000007503ff55388d71ff03f770f68b5804ff70088b45008d40e83b45087303ff5520894500c740fc05000000c740100100000089700c8b0c24894808895804c700f7ffffff83c404c38b4804f6c3017503ff553889df83c70270f652ff7104ff7108ff710cff7110ff7114ff7118ff711c89fb8b0190e8eefdffff8b74241c8b5c24148b56fc89d923caf6c1017503ff55388d4bff03ca70f68b7d008d7fdc3b7d087303ff5520897d00c747fc080000008b1c24895f1c8b5c2404895f188b5c2408895f148b5c240c895f108b5c2410895f0c894f088b4c2418894f0489078b45008d40f43b45087303ff5520894500c740fc02000000897804c700f3ffffff83c420c35253ff7004ff700c8b400883c800e852fdffff508b4424088d5424140bc0e8f251000089c38b45008d40ec3b45087303ff5520894500c740fc040000008b54240489500c8b0c24894808895804c7000900000083c414c352ff70088b4004e802fdffff89c38b45008d40f03b45087303ff5520894500c740fc030000008b1424895008895804c7000d00000083c408c352ff70048b400883c800e8c6fcffff89c38b45008d40ec3b45087303ff5520894500c740fc04000000c7400c010000008958088b1424895004c700f9ffffff83c408c352538b40048d5424080bc0e8be51000089c38b45008d40f43b45087303ff5520894500c740fc02000000895804c7001300000083c408c3c352ff70088b4004e84efcffff89c38b45008d40f03b45087303ff5520894500c740fc030000008b1424895008895804c7001700000083c408c390|@415,63|29,0,$226+54 220,0,@227 225,0,77 230,1,@255 308,0,@312 326,0,@313 334,1,@315 339,0,0 351,0,@410 359,0,0 454,0,0 472,0,-5 659,0,-7 698,1,@412 746,0,4 803,0,6 855,0,0 870,0,-4 890,1,@414 925,0,9 983,0,11 227:O1|@228 228:C2,24|3b650c7303ff5524bf04c2b4418b3789c389f0e91c000000|@254,63|9,0,@7321 20,1,@229 229:C2,616|3b650c7303ff552489c189c890e87202000083f8ff7570f7c3010000007407b803000000eb068b038d440001538d542404e89a02000083f80175728b3c24f7c7010000007407be03000000eb068b378d7436018b5d008d5bf03b5d087303ff5520895d00c743fc03000000897308c7430401000000893b8b55008d52f43b55087303ff5520eb05e969010000895500c742fc02000000b8a4d974418902895a048b79108b742404897c2404eb05e90d00000089d389c883c40456e995d8ffff8b7d008d7ff83b7d087303ff5520897d00c747fc010000008907515057bb010000008b44240ce8a206000050505089e30bc0e8a6dfffff8b75008d76f03b75087303ff5520897500c746fc030000008b5c2408895e088b5424048956048b0c24890e8b45008d40f43b45087303ff5520894500c740fc02000000bf88e2744189388970048b742410ff761089c389f083c800e8fed7ffff8b5c2410ff7310bbf4b874418b44241483c800e8e6d7ffff6a018b5c24108b44241890e80e06000050505089e30bc0e812dfffff8b55008d52f03b55087303ff5520895500c742fc030000008b4c2408894a088b4424048942048b3c24893a8b75008d76f43b75087303ff5520897500c746fc02000000bbb4e27441891e8956048b54241c8b4a108b442424894c242489f389c789d083c42457e95fd7fffff7c3010000007407b803000000eb068b038d4400018b7d008d7ff03b7d087303ff5520897d00c747fc03000000894708c7470401000000891f8b75008d76f43b75087303ff5520897500c746fc02000000bbe0e27441891e897e048b51108b042489142489f389c789c857e9efd6ffff83c800|@253,63|14,1,@230 32,0,1 50,1,@232 71,0,1 113,0,0 151,0,@234 187,1,@62 221,0,0 230,1,@241 242,1,@76 314,0,@250 338,1,@62 350,0,@91 362,1,@62 378,1,@241 390,1,@76 462,0,@251 497,1,@62 510,0,1 552,0,0 583,0,@252 609,1,@62 230:C2,8|8b78148b3789f0c3|@231,49| 231:S32|426173696353747265616d494f28292e6765744275666665724d6f6465283129 232:C2,168|3b650c7303ff552483f8017506b801000000c3a8017503ff553889c783ef0270f6f7c7010000007503ff553883ff017d02eb2a8b72fcf7c6010000007407bb03000000eb068b1e8d5c1b015323dff6c3015b7503ff55383bfb7d02eb1289c3b824ae744183c800ff552cbe01000000f7c6010000007402eb118d5f0889dfd1ef0fb63c3e8d7c3f0189fe83fe157501c3a8017503ff553889c683ee0270f689f0e95bffffff83c800|@233,61|14,0,0 63,0,1 96,0,@51 107,0,0 233:S43|54657874494f2e5465787453747265616d494f2e6f75747075742832296c6173744e65776c696e65283129 234:C2,16|3b650c7303ff55248b5a04e91c000000|@249,63|12,1,@235 235:C2,268|3b650c7303ff55248b78088b700c8b1683fa0375628b5d008d5bf03b5d087303ff5520895d00c743fc03000000baf8da7441895308ba08db74418953048b1789138b4d008d49f03b4d087303ff5520894d00c741fc03000000895908bba4ae7441895904bb1ca0b441891989c80bc0ff552cb8010000008b08ff7308ff7004ff3351ff730450ff318b5c24188b14245323daf6c3015b7503ff55383bda7e2e0bc0e886deffff8b4c24088b44241c894c241c8b7c2418897c24188b5c241089c68b44240483c41856e98f0000008b50148b3a83ff0375218b7c24088b74241c897c241c895c24188b5c24108b44240483c41856e964000000b8010000008d54241ce83e04000083c41cc30bc0|@248,63|46,0,@236 54,0,@237 93,0,@57 101,0,@7299 115,0,0 162,1,@92 201,1,@239 244,1,@239 249,0,0 258,1,@244 236:S6|6f7574707574 237:O3|@7322,@238,0 238:S12|436c6f73656453747265616d 239:C2,148|3b650c7303ff55248b78088b7720f7c601000000751aff3753ff36b8010000008d54240c90e88600000083c40cc208008b5d008d5bf03b5d087303ff5520895d00c743fc03000000baf8da7441895308b9e0ae7441894b048b1789138b4d008d49f03b4d087303ff5520894d00c741fc03000000895908bba4ae7441895904bb1ca0b441891989c883c800ff552cb80100000090|@243,63|28,0,0 38,1,@240 73,0,@236 81,0,@59 120,0,@57 128,0,@7299 143,0,0 240:C2,368|3b650c7303ff55245250ff7504bf62dc7441576a018965048b5a0889c123cbf6c1017503ff55388d48ff03cb70f68b7a0489fe23f0f7c6010000007503ff553889fe2bf08d760170f48b45008d40f83b45087303ff5520894500c740fc010000008930ff72f45089cb8b42f890e81a0100008b142483c800ff1289c6ff74240c8f4504eb74908b7c24048b18ba1ca0b4413bda750989c6eb65be0100000083fb03750cbe70ae7441eb59be010000008b4d008d49f03b4d087303ff5520894d00c741fc03000000bef8da74418971088941048b57fc89118b75008d76f03b75087303ff5520897500c746fc03000000894e08b9a4ae7441eb0fe921000000e90f000000e90a000000894e04b91ca0b441890e89f083c800ff552cbe010000008b7c241089f323dff6c3017503ff55388d5eff03df70f68b5424148b4a04530bd9f6c3015b7503ff55383bd97509b80100000083c418c389f023c7a8017503ff55388d46ff03c770f683c418e990feffff|@242,63|14,0,$240+134 110,1,@241 141,0,@7299 154,0,0 164,0,@54 171,0,0 200,0,@236 243,0,@57 268,0,@7299 283,0,0 334,0,0 241:C2,316|8b7c240483ff017570f7c3010000007411f6c3017503ff553883fb017c0489deeb1389c6b824ae74410bc0ff552c89f3be01000000f7c0010000007407bb03000000eb068b188d5c1b013bf3773389da2bd683c2018b5d008d5bf03b5d087303ff5520895d00c743fc03000000894308895304893389d8eb05e911000000c20400b824ae744190ff552cb801000000f7c0010000007407be03000000eb068b308d743601f7c3010000007411f6c3017503ff553883fb017c0489daeb1289c3b824ae744183c800ff552cba010000008b1ff7c3010000007411f6c3017503ff553883fb017c0489d9eb1389c1b824ae74410bc0ff552c89c8b9010000008d79ff03fa3bfe77258b75008d76f03b75087303ff5520897500c746fc03000000894608894e04891689f0c20400b824ae744183c800ff552cb80100000090|@53,63|37,0,@51 49,0,0 62,0,1 130,0,@51 139,0,0 152,0,1 192,0,@51 203,0,0 237,0,@51 249,0,0 300,0,@51 311,0,0 242:S38|426173696353747265616d494f28292e7772697465566563283429666f7263654f7574283129 243:S27|426173696353747265616d494f28292e7772697465566563283429 244:C2,452|3b650c7303ff55248b42f88b388b72e489f323dff6c3017503ff553889f32bdf8d5b0170f48b7afc5323dff6c3015b7503ff55383bfb7d688b188b4d008d49f83b4d087303ff5520894d00c741fc0100000089395253ff72f0518b5aec8b42f490e8eefdffff508b5c24048b4424080bc0e86a0100008b4424088b78f88b378b58fc89f223d3f6c2017503ff55388d56ff03d370f68917b80100000083c40cc38b1889f123cbf6c1017503ff553889f12bcb8d490170f48b188b7d008d7ff83b7d087303ff5520897d00c747fc01000000890f525153ff72f0578b5aec8b42f490e86efdffff508b5c24048b4424080bc0e8ea0000008b74240c8b5ef88b138b4c240889d023c1a8017503ff55388d42ff03c170f689038b46e883c800e8c6d8ffff8b7c240c8b77ec8b5c240889f223d3f6c2017503ff55388d56ff03d370f68b4ffc89c823c3a8017503ff553889c82bc38d400170f48b5d008d5bf83b5d087303ff5520895d00c743fc010000008903ff77f05389d38b47f483c800e8d2fcffff508b5c2404b80100000090e84e0000008b5424108b4afc8b44240c89cf23f8f7c7010000007503ff553889cf2bf88d7f0170f48b72f8893eb80100000083c414c390|@247,63|98,1,@241 114,1,@245 152,0,0 226,1,@241 242,1,@245 286,1,@92 382,1,@241 392,0,0 398,1,@245 443,0,0 245:C2,200|3b650c7303ff552450505089c1ff33ff73048d5c24088b44241883c800e862d5fffff7c1010000007411f6c1017503ff553883f9017c0489c8eb10b824ae744183c800ff552cb8010000008b7c24108d77ff03f08b5c24043bf3760fb824ae74410bc0ff552cb8010000008b542408f7c20100000074268b4c240c8d79ff03f88b3424d1ead1ef88143e8d5412018d7c3f01b80100000083c414c204008b4c240c8d71088b1c24895c24188b4c241489442414897c241089f389d083c41051ff2500aa040883c800|@246,63|30,1,@76 60,0,@51 71,0,0 93,0,@51 103,0,0 147,0,0 193,0,I198 246:S25|436861724172726179536c6963652e636f7079566563283329 247:S46|426173696353747265616d494f28292e6f7574707574566563746f72283229616464566563546f42756666283129 248:S31|426173696353747265616d494f28292e6f7574707574566563746f72283229 249:S34|426173696353747265616d494f28292e6f7574707574566563746f72283129283129 250:C2,16|3b650c7303ff55248b5a04e938f7ffff|@249,63|12,1,@235 251:C2,16|3b650c7303ff55248b5a04e90cf7ffff|@249,63|12,1,@235 252:C2,16|3b650c7303ff55248b5a04e9e0f6ffff|@249,63|12,1,@235 253:S29|54657874494f2e5465787453747265616d494f2e6f7574707574283229 254:S45|434f44455452454528292e6368616e67654c6576656c2832296368616e67654c283229707072696e742d283129 255:C2,1508|8d7c248c3b7d0c7303ff55288b7d008d7ff83b7d087303ff5520897d00c747fc0100004089078b75008d76f83b75087303ff5520897500c746fc01000040c706010000008b55008d52f83b55087303ff5520895500c742fc01000040c702010000008b4d008d49e43b4d087303ff5520894d00c741fc06000000505357565251b86ce9744189018b44241489411489511089710c897908895904be0700000089f323d8f6c3017503ff5538505289f2d1fa8d40fff7ea8d58015a5870eb8b55008d52f83b55087303ff5520895500c742fc01000040c702010000008b75008d76f83b75087303ff5520897500c746fc01000040c706010000008b45008d40f83b45087303ff5520894500c740fc01000040c700010000008b7d008d7ff83b7d087303ff5520897d00c747fc01000040c70701000000f6c3017503ff553889d983c10270f65352505768aced7441bb8100000089c8ff15a09204088b7c240c89388b5d008d5be43b5d087303ff5520895d00c743fc06000000bab8ed744189138b4c2404894b14897b108b54240889530c8943088973048b7d008d7fe03b7d087303ff5520897d00c747fc07000000ba90ef744189178b54240c8957188947148977108b54240889570c8b5424108957088b1424895704b9070000008b54242456505357515289ce23f2f7c6010000007503ff553850528d41ffd1faf7ea8d70015a5870edf7c6010000007503ff553889f283c20270f66a01bb8100000089d090ff15a092040889308b4d008d49f83b4d087303ff5520894d00c741fc01000040c701010000008b7d008d7ff83b7d087303ff5520897d00c747fc01000040c707010000008b5d008d5bec3b5d087303ff5520895d00c743fc04000000ba74f174418913897b0c894308894b048b55008d52e83b55087303ff5520895500c742fc05000000565051575352be74f2744189328b742414897210897a0c894208894a048b75008d76e83b75087303ff5520897500c746fc05000000b818f474418906897e108b44241089460c894e088b4424148946048b45008d40e83b45087303ff5520894500c740fc05000000b9a0f5744189088b4c240c8948108b4c241489480c8b4c24108948088978048b4d008d49e03b4d087303ff5520894d00c741fc07000000bf40f7744189398b7c24348979188959148b5c24288959108b7c240c89790c8b5c24088959088971048b75008d76c83b75087303ff5520897500c746fc0d000000bf2cfb7441893e8b7c2424897e308b7c242c897e2c8b7c2438897e288b7c2434897e248b7c2430897e208b7c244c897e1c8b7c240c897e18895e148946108b44242889460c8b4424208946088b4424408946048b45008d40d43b45087303ff5520894500c740fc0a000000bf84fd744189388b7c240c8978248958208b7c243889781c8b7c24308978188948148b7c24348978108b7c242489780c8950088b7c242c8978048b7d008d7ff03b7d087303ff5520897d00c747fc03000000bb94fe7441891f8b5c2454895f088947048b5d008d5be83b5d087303ff5520895d00c743fc05000000ba08ff744189138b54245489531089430c894b088b5424208953048b55008d52f83b55087303ff5520895500c742fc01000040c702010000005156505753528b4d008d49d43b4d087303ff5520894d00c741fc0a000000be9cff744189318951248b7424248971208b74242089711c8b7424508971188b7424488971148b74244c8971108b74243c89710c8b7424188971088b7424448971048b75008d76cc3b75087303ff5520897500c746fc0c000000b8ac00754189068b44242489462c8b4424208946288b44243c8946248b4424188946208b44244489461c8b4424588946188956148b54246c8956108b44240c89460c8b5424148956088b5424388956048b55008d52f43b55087303ff5520895500c742fc02000000b8c001754189028b44240c8942048b45008d40f43b45087303ff5520894500c740fc02000000bf1c02754189388948048b4c24748911bf800275418979048971088b74241089710c8959108b5c2408895914894118b80100000083c470c2040090|@311,63|64,0,0 94,0,0 129,0,@256 155,0,3 215,0,0 245,0,0 275,0,0 305,0,0 329,0,@262 334,0,64 342,0,I11 377,0,@263 431,0,@267 471,0,3 537,0,64 546,0,I11 578,0,0 608,0,0 637,0,@269 683,0,@273 730,0,@277 781,0,@281 836,0,@285 901,0,@292 1008,0,@294 1090,0,@296 1131,0,@298 1183,0,0 1218,0,@300 1308,0,@302 1412,0,@304 1450,0,@306 1466,0,@308 1497,0,0 256:C2,680|3b650c7303ff55248b3883ffff756b52ff70088b720c8b0e83f9017515b8010000008d54240883c800e89602000083c408c38b398b3783feff75728b5c24048b53088b0a8b780489ce23f7f7c6010000007503ff553889ce2bf78d760170f48932f7c7010000007503ff553883ff017f0eb80100000083c408c3e9f70000008b5c240457b8410000008b5304ff128b1424f6c2017503ff553889d783ef0270f683c4043b650c7303ff5524eb05e90b000000ebadb80100000083c40cc383fe0175108b47048d542408e8f601000083c408c38b5424048b4a088b315323def6c3015b7503ff55383bde7f6d8b5c24048b7b088b378b500489f123caf6c1017503ff553889f12bca8d490170f4890ff6c2017503ff553883fa017f09b80100000083c408c38b442404528b7804b84100000089fa90ff128b3424f7c6010000007503ff553889f283ea0270f683c4043b650c7303ff5524ebb6e909000000b80100000083c40cc38b47048d542408e85201000083c408c383ff0175738b72088b0e5323d9f6c3015b7503ff55383bd97f07bbc8cc7441eb5c8b5a108b0b8b780489ce23f7f7c6010000007503ff55388d71ff03f770f6893350508b480883f90174118b3b89e6c7060100000089e6897e04eb0f8b3b89e6c7060300000089e6897e048b5d008d5bf43b5d08730feb0ae94b000000e91c000000ff5520895d00c743fc020000008b3c24893b8b74240489730483c4088b4a0c8b018b7d008d7ff43b7d087303ff5520897d00c747fc02000000894704891f8939b801000000c383fffd75418b72088b0e5323d9f6c3015b7503ff55383bd97e08c70601000000eb1c8b0e89cf23fbf7c7010000007503ff553889cf2bfb8d7f0170f4893e8b40048b5204ff228b720c8b1e83fb01750db844ed7441ff552cb8010000008b4b04890eb801000000c30bc0|@261,63|30,0,0 42,1,@257 114,0,0 133,0,32 181,0,0 202,1,@257 284,0,0 301,0,32 350,0,0 366,1,@257 401,0,@202 455,0,0 472,0,1 569,0,0 602,0,0 655,0,@259 663,0,0 673,0,0 257:C2,188|3b650c7303ff55248b7afc8b72f889f323d8f6c3017503ff55388d5eff03d870f68b471089188b188b4f1489c823c3a8017503ff553889c82bc38d400170f48b5f0889038b42fc52ff7004b8150000008b142490ff128b7c24048b77fc8b5e108b13f6c2017503ff553883fa017f09b80100000083c408c38b4c24048b41fc528b7804b84100000089fa0bc0ff128b3424f7c6010000007503ff553889f283ea0270f683c4043b650c7303ff5524ebb2b80100000083c40cc383c800|@258,63|76,0,10 112,0,0 132,0,32 177,0,0 258:S52|5072657474795072696e7465722e7072657474795072696e742833297072696e744f75742832297573654e65774c696e65283129 259:O3|@7320,@224,@260 260:S32|706f705072696e74537461636b3a207072696e7420737461636b20656d707479 261:S39|5072657474795072696e7465722e7072657474795072696e742833297072696e744f7574283229 262:O2|@207,0 263:C2,356|3b650c7303ff55248b7a148b378b4c240489f723f9f7c7010000007503ff55388d7eff03f970f68b7214893e8b7a048b37f7c6010000007503ff553889f183c10270f652505357ff72108b1c2489c890ff15009f040883f8017502eb3d8b3c24f7c7010000007503ff553883ff017c07be03000000eb05be01000000a8017503ff553883f8017c07bb03000000eb05bb010000003bf37402eb0489c7eb1889c623f7f7c6010000007503ff55388d70ff03f770f689f78b5c2404893b8b5424108b4a048b018b7a0c8b37500bc6a801587503ff55383bc6750eb838ef744190ff552cb8010000008b198b45008d40f43b45087303ff5520894500c740fc020000008b7424088970048b74240c8930f6c3017503ff553883fb017d02eb178b72088b0e5323d9f6c3015b7503ff55383bd97d02eb0fb824ae74410bc0ff552cb801000000f6c3017503ff553889d983c10270f689444efeb80100000083c414c2040083c800|@266,63|82,0,I110 113,0,1 120,0,0 137,0,1 144,0,0 218,0,@264 227,0,0 309,0,@51 319,0,0 343,0,0 264:O3|@7320,@224,@265 265:S16|746f6b656e2071756575652066756c6c 266:S38|5072657474795072696e7465722e7072657474795072696e74283329656e5175657565283329 267:C2,408|3b650c7303ff55248b420c8b38f7c7010000007503ff553889fe83c60270f652ff72188b1c2489f0ff15009f040883f8017502eb3a8b1c24f6c3017503ff553883fb017c07ba03000000eb05ba01000000a8017503ff553883f8017c07b903000000eb05b9010000003bd17402eb0489c3eb1589c223d3f6c2017503ff55388d50ff03d370f689d38b4c2404f6c3017503ff553883fb017d02eb178b41148b385323dff6c3015b7503ff55383bdf7d02eb0db824ae7441ff552cb801000000f6c3017503ff553889de83c60270f68b5470fe89d08b7804f7c7010000007503ff553883ff017c658b71108b168b790c8b37520bd6f6c2015a7503ff55383bd674728b5424048b720c891eff30ff70048b1c248b4424048b520883c800ff128b5c24048b1383faff75288b4c240c8b41048b388b730489fa23d6f6c2017503ff55388d57ff03d670f68910eb32e93e00000083fafd75288b4c240c8b41048b388b342489fb23def6c3017503ff55388d5fffeb05e91700000003de70ef8918b8010000008b54240c83c410e971feffffb80100000083c408c3|@268,63|42,0,I110 70,0,1 77,0,0 94,0,1 101,0,0 179,0,@51 187,0,0 383,0,0 400,0,0 268:S38|5072657474795072696e7465722e7072657474795072696e7428332964655175657565283129 269:C2,120|8b42048b388b720c8b1e530bdff6c3015b7503ff55383bfb750db808f27441ff552cb8010000008b38f7c7010000007503ff553883ff017d02eb178b5a088b0b5123cff6c101597503ff55383bf97d02eb0db824ae7441ff552cb801000000f7c7010000007503ff553889f983c10270f68b7c4bfe89f8c3|@272,63|27,0,@270 35,0,0 83,0,@51 91,0,0 270:O3|@7320,@224,@271 271:S34|5072657474795072696e7465722e7363616e546f703a20737461636b20656d707479 272:S38|5072657474795072696e7465722e7072657474795072696e742833297363616e546f70283129 273:C2,284|3b650c7303ff55248b7a048b37f7c6010000007503ff553889f383c30270f6525057ff721089d98b1c2489c8ff15009f040883f8017502eb3d8b3c24f7c7010000007503ff553883ff017c07be03000000eb05be01000000a8017503ff553883f8017c07bb03000000eb05bb010000003bf37402eb0489c7eb1889c623f7f7c6010000007503ff55388d70ff03f770f689f78b5c2404893b8b54240c8b4a048b018b7a0c8b37500bc6a801587503ff55383bc6750eb8acf3744190ff552cb8010000008b19f6c3017503ff553883fb017d02eb178b42088b305323def6c3015b7503ff55383bde7d02eb10b824ae744183c800ff552cb801000000f6c3017503ff553889de83c60270f68b5c2408895c70feb80100000083c410c390|@276,63|46,0,I110 77,0,1 84,0,0 101,0,1 108,0,0 182,0,@274 191,0,0 236,0,@51 247,0,0 275,0,0 274:O3|@7320,@224,@275 275:S34|5072657474795072696e7465722e7363616e507573683a20737461636b2066756c6c 276:S39|5072657474795072696e7465722e7072657474795072696e742833297363616e50757368283129 277:C2,272|3b650c7303ff55248b42088b388b72108b1e530bdff6c3015b7503ff55383bfb750db844f57441ff552cb8010000008b38f7c7010000007503ff553883ff017d02eb178b5a0c8b0b5123cff6c101597503ff55383bf97d02eb0db824ae7441ff552cbb01000000f7c7010000007503ff553889f983c10270f68b7c4bfe89fb8b08f6c1017503ff553889cf83ef0270f65053ff72048b1c2489f80bc0ff15009f040883f8017502eb3d8b3424f7c6010000007503ff553883fe017c07bb03000000eb05bb01000000a8017503ff553883f8017c07ba03000000eb05ba010000003bda7402eb0489c6eb1589c323def6c3017503ff55388d58ff03de70f689de8b54240889328b44240483c40cc383c800|@280,63|35,0,@278 43,0,0 91,0,@51 99,0,0 158,0,I110 189,0,1 196,0,0 213,0,1 220,0,0 278:O3|@7320,@224,@279 279:S20|7363616e506f703a20737461636b20656d707479 280:S38|5072657474795072696e7465722e7072657474795072696e742833297363616e506f70283129 281:C2,272|3b650c7303ff55248b42108b388b72048b1e530bdff6c3015b7503ff55383bfb750db8ccf67441ff552cb8010000008b3ef7c7010000007503ff553889fb83c30270f65256ff720c89d98b1c2489c890ff15009f040883f8017502eb3d8b3c24f7c7010000007503ff553883ff017c07be03000000eb05be01000000a8017503ff553883f8017c07bb03000000eb05bb010000003bf37402eb0489c7eb1889c623f7f7c6010000007503ff55388d70ff03f770f689f78b5c2404893b8b5424088b4a048b01a8017503ff553883f8017d02eb168b7a088b375023c6a801587503ff55383bc67d02eb0eb824ae744190ff552cb801000000a8017503ff553889c383c30270f68b445ffe83c40cc383c800|@284,63|35,0,@282 43,0,0 82,0,I110 113,0,1 120,0,0 137,0,1 144,0,0 234,0,@51 243,0,0 282:O3|@7320,@224,@283 283:S40|5072657474795072696e7465722e7363616e506f70426f74746f6d3a20737461636b20656d707479 284:S44|5072657474795072696e7465722e7072657474795072696e742833297363616e506f70426f74746f6d283129 285:C2,352|3b650c7303ff552452b8010000008d54240483c800e86201000083f80174738b3c24b8010000008b57040bc0ff128b3424a8017503ff553883f8017d02eb168b5e108b135023c2a801587503ff55383bc27d02eb1289c2b824ae744183c800ff552cbb01000000a8017503ff553889c183c10270f68b7c4bfe89fb8b138b0a83f9037570a8017503ff553883f8017d07eb1be9bf0000008b7e108b1f5023c3a801587503ff55383bc37d02eb09b824ae744190ff552ca8017503ff553889c383c30270f6b8bcf9744189445ffeb8010000008d54240483c800e89e00000083f8017420b8010000008b14240bc0e80effffffeb05e94d0000003b650c7303ff5524ebca8b3c248b770c8b1e8b57088b0a530bd9f6c3015b7503ff55383bd97416b8010000008b5704ff128d54240483c800e852010000b8010000008b142483c404e9bafeffff8d54240483c800e83601000083c404c3b80100000083c404c390|@291,63|10,0,0 22,1,@286 35,0,0 88,0,@51 99,0,0 174,0,@51 197,0,@288 206,0,0 218,1,@286 228,0,0 289,0,0 306,1,@289 311,0,0 334,1,@289 343,0,0 286:C2,160|3b650c7303ff55248b42fc8b780c8b378b58088b0b510bcef6c101597503ff55383bf17506b801000000c3ff70108b7814b80100000089faff12a8017503ff553883f8017d02eb168b34248b1e5023c3a801587503ff55383bc37d02eb0db824ae7441ff552cbe01000000a8017503ff553889c283c20270f68b4c56fe89ce8b068b3883ff017507bb03000000eb05bb0100000089d883f00283c404c383c800|@287,63|38,0,0 50,0,0 95,0,@51 103,0,0 137,0,1 144,0,0 287:S57|5072657474795072696e7465722e7072657474795072696e74283329736574546f6b656e53697a65283129746f704e6f74426567696e283129 288:O2|@207,1 289:C2,212|8b7afca8017503ff553883f8017d02eb168b77108b1e5023c3a801587503ff55383bc37d02eb1089c3b824ae744190ff552cbe01000000a8017503ff553889c383c30270f68b4c5efe89ce8b5f188b0b8b7e0489fb23d9f6c3017503ff55388d5fff03d970f68b4afc8b7d008d7ff43b7d087303ff5520897d00c747fc02000000895f048b1e891fa8017503ff553883f8017d02eb168b71108b1e5023c3a801587503ff55383bc37d02eb0fb824ae74410bc0ff552cb801000000a8017503ff553889c383c30270f6897c5efeb801000000c390|@290,63|42,0,@51 51,0,0 173,0,@51 183,0,0 206,0,0 290:S56|5072657474795072696e7465722e7072657474795072696e74283329736574546f6b656e53697a6528312961646a75737453697a65283129 291:S43|5072657474795072696e7465722e7072657474795072696e74283329736574546f6b656e53697a65283129 292:C2,524|3b650c7303ff5524f7c0010000007407bf03000000eb068b388d7c3f018b72188b1e8b4a148b31530bdef6c3015b7503ff55383bde752a8b5d008d5bf43b5d087303ff5520895d00c743fc02000000894304c703fdffffff89d889fb8b5204ff228b5d008d5bf43b5d087303ff5520895d00c743fc02000000894304c703fdffffff52575789d889fb8b5230ff128b7c24048b772c8b1e8b57288b0a530bd9f6c3015b7503ff55383bd974708b47248b188b4f208b3189da23d6f6c2017503ff553889da2bd68d520170f48b7424048b5e1c8b035223d0f6c2015a7503ff55383bd07e618b5424048b42188b388b4c24048b71148b1e530bdff6c3015b7503ff55383bfb74718b7c2404b8010000008b57100bc0ff128b742404eb05e9df000000a8017503ff553883f8017d02eb1b8b5e0c8b135023c2a801587503ff55383bc27d07eb16e9b600000089c2b824ae74410bc0ff552cbb01000000a8017503ff553889c183c10270f68b7c4bfe89fb8b55008d52f4eb05e9840000003b55087303ff5520895500c742fc02000000c74204cf0700008b0b890aa8017503ff553883f8017d02eb168b7e0c8b1f5023c3a801587503ff55383bc37d02eb09b824ae744190ff552ca8017503ff553889c183c10270f689544ffe8b4424048b5808b80100000089da0bc0ff123b650c7303ff5524e997feffffb80100000083c408c3b80100000083c408c383c800|@293,63|17,0,1 84,0,-2 126,0,-2 267,0,0 333,0,@51 343,0,0 401,0,999 446,0,@51 480,0,0 504,0,0 513,0,0 293:S40|5072657474795072696e7465722e7072657474795072696e74283329616464537472696e67283129 294:C2,200|3b650c7303ff55248b7a248b378b4a208b39570bfef7c7010000005f7503ff55383bf775248b721cc706010000008b7a04c707010000008b4a18c701010000008b7210c70601000000525053b8010000008b5214ff128b75008d76f03b75087303ff5520897500c746fc030000008b1c24895e088b542404895604c706ffffffff8b4c24088b41108b38bb0100000089fa23d3f6c2017503ff553889da2bd78d520170f48b7c2408ff74240489d389f08b570c90ff128b7424088b5e048b038b560883c40cff2290|@295,63|42,0,0 51,0,0 60,0,0 69,0,0 77,0,0 125,0,-1 139,0,0 295:S36|5072657474795072696e7465722e7072657474795072696e74283329627265616b283229 296:C2,40|3b650c7303ff55248b4208a8017503ff553889c783c70270f6bb0100000089f88b5204ff2283c800|@297,63|26,0,0 297:S40|5072657474795072696e7465722e7072657474795072696e742833296c696e65427265616b283129 298:C2,72|3b650c7303ff55248b4210a8017503ff553889c783c70270f652bb0100000089f88b520cff128b3424b8010000008b560883c800ff128b1c24b8010000008b530483c404ff220bc0|@299,63|27,0,0 42,0,0 58,0,0 299:S40|5072657474795072696e7465722e7072657474795072696e74283329656e6453747265616d283129 300:C2,192|3b650c7303ff55248b7a248b37f7c6010000007503ff553889f183c10270f6890f8b72208b0e8b7a1c8b37510bcef6c101597503ff55383bce75248b4a18c701010000008b7204c706010000008b7a14c707010000008b4a10c701010000008b4d008d49f03b4d087303ff5520894d00c741fc03000000895908894104c701010000008b42108b38be0100000089fb23def6c3017503ff553889f32bdf8d5b0170f4526a0189c88b520c0bc0ff128b14248b4a048b018b520883c404ff220bc0|@301,63|64,0,0 73,0,0 82,0,0 91,0,0 127,0,0 137,0,0 301:S41|5072657474795072696e7465722e7072657474795072696e74283329626567696e426c6f636b283229 302:C2,200|3b650c7303ff55248b422c8b388b72288b1e530bdff6c3015b7503ff55383bfb751252bb01000000b808cd74418b5218ff12eb22526a01bbffffffffb808cd74418b5224ff128b14248b4a1c8b018b522083c800ff128b04248b78148b37f7c6010000007503ff553889f383eb0270f6891f8b1783fa0175438b4810f6c1017503ff553889ce83c60270f6bb010000008b500c89f083c800ff128b0c24b8010000008b510883c800ff128b04248b7804b80100000089fa83c404ff22b80100000083c404c383c800|@303,63|36,0,0 41,0,@207 56,0,-1 61,0,@207 140,0,0 158,0,0 177,0,0 189,0,0 303:S39|5072657474795072696e7465722e7072657474795072696e74283329656e64426c6f636b283129 304:C2,20|3b650c7303ff55248b58048b008b5204ff220bc0|@305,63| 305:S36|5072657474795072696e7465722e7072657474795072696e74283329627265616b283129 306:C2,20|3b650c7303ff55248b58048b008b5204ff220bc0|@307,63| 307:S41|5072657474795072696e7465722e7072657474795072696e74283329626567696e426c6f636b283129 308:O1|@309 309:C2,8|b801000000c30bc0|@310,1|1,0,0 310:S38|5072657474795072696e7465722e7072657474795072696e74283329656c6964696e67283129 311:S28|5072657474795072696e7465722e7072657474795072696e74283329 312:O2|1,0 313:O2|@315,@314 314:O2|@407,@313 315:C2,3644|3b650c7303ff552453528b38f7c701000000741583ffeb7c1583ff177f15be5e0375418d74be54ffe6e9c4000000e9bf000000e9ba0000009090e9870c0000909090e9cb080000909090e91c0c0000909090e9a0080000909090e9e8050000909090e922090000909090e994020000909090e988010000909090e984070000909090e9be000000909090e9cb070000909090e9c8000000909090e97d090000909090e97b070000909090e9f30b0000909090e9c3000000909090e933000000909090e929050000909090e940090000909090e97b000000909090e95f070000909090e99f0b0000909090e9ac0c0000909090ff7004b87c1175418b531883c800ff128b5c2408b8881175418b530c0bc0ff128b5424048b5c24088b04248b5204ff128b4c2408b8981175418b510c0bc0ff128b4424088b7808b80100000089fa83c40cff22b8ac1175418b530c83c408ff22b8b81175418b530c83c408ff2268cc1175418b58088b40048d54240c83c800e8420d000083c408c3ff7004ff7008ff700cb8501475418b531890ff128b5c24108b4424048b54240c83c800e85efeffff8b5c2410b8181475418b1383c800ff128b142483fa0174208b4c2410b85c1475418b510c0bc0ff128b4424108b38b81814754189fa90ff126a498b5c240cb8590000008d542418e85a0f00008b4c2410b8010000008b510883c414ff22ff7004ff7008ff700cb8000375418b5318ff128b5c2410ff730cbbffffffff8b44240c83c800e87211000050bbffffffff8b44240890e8621100008b55008d52f43b55087303ff5520895500c742fc02000000b9c41a7541894a0489028b45008d40f43b45087303ff5520894500c740fc02000000895004c700f70000008b7d008d7ff43b7d087303ff5520897d00c747fc020000008947048b342489378b45008d40f43b45087303ff5520894500c740fc02000000897804bbe01a754189180bc0e8061500008b5424040bc0ff128b542418b8000375418b1283c800ff128b5c24188b44240c8b54241483c800e80efdffff8b4c2418b8010000008b510883c41cff228b501083fa017407b92c1d7541eb05b9409704088b780883ff017573ff700451bbffffffff8b400c0bc0e86a10000050bbffffffff8b44240890e85a1000008b5d008d5bf43b5d087303ff5520895d00c743fc02000000ba3c1d75418953048b4c2404890b8b7d008d7ff43b7d087303ff5520897d00c747fc02000000895f0489078b75008d76f43b7508730aeb05e963000000ff5520897500c746fc02000000897e04c706590000008b5d008d5bf43b5d087303ff5520895d00c743fc020000008973048b142489138b45008d40f43b45087303ff5520894500c740fc02000000895804b9481d754189080bc0e8d613000089c6eb728b7004f7c6010000007503ff553883fe017d645651bbffffffff8b400c0bc0e87e0f00008b5c2404ba0100000089d923caf6c1017503ff553889d12bcb8d490170f450bbffffffff89c890e8520f00008b7d008d7ff43b7d087303ff5520897d00c747fc02000000be3c1d7541897704eb0ae96f010000e9940000008b5c2404891f8b55008d52f43b55087303ff5520895500c742fc02000000897a0489028b4d008d49f43b4d087303ff5520894d00c741fc02000000895104c701590000008b45008d40f43b45087303ff5520894500c740fc020000008948048b3c24893889c68b45008d40f43b45087303ff5520894500c740fc02000000897004bb581d7541891883c800e8c612000089c6eb705651bbffffffff8b400c90e8820e000050bbffffffff8b44240890e8720e00008b5d008d5bf43b5d087303ff5520895d00c743fc02000000ba3c1d75418953048b4c2404890b8b7d008d7ff43b7d087303ff5520897d00c747fc02000000895f0489078b75008d76f43b7508730aeb05e961000000ff5520897500c746fc02000000897e04c706590000008b5d008d5bf43b5d087303ff5520895d00c743fc020000008973048b142489138b45008d40f43b45087303ff5520894500c740fc02000000895804b9681d754189080bc0e8ee11000089c68b4424108b780c89f089fa83c414ff22ff7004bbffffffff8b40080bc0e89a0d000089c3b8781d7541e886090000bb0c1475410bc0e87a0900008b5c24088b530c83c800ff128b5c24088b04248b542404e8caf9ffff8b542408b8530000008b520c83c40cff228b48048b711483feff7507bf40970408eb1d83fe017507bf8c1d7541eb1183fefd7507bf9c1d7541eb05bfac1d7541ff31ff7104ff7108ff710cff7110ff7118ff711c57b87c1175418b531890ff128b5c2424ff730c8b5c2404b8c01d754183c800e8e6080000bb510000000bc0e8da0800008b142483c800ff128b542428b8000375418b1283c800ff128b4c24288b44241c8b510c83c800ff128b4424288b38b80003754189fa90ff128b7424288b54240883fa037507bbfccc7441eb05bbd01d7541ff760cb8e01d75410bc0e87a0800008b142483c800ff128b4c242cff710cbbffffffff8b44241483c800e8620c000089c3b8ec1d7541e84e0800008b142483c800ff128b442430ff700cbbffffffff8b44242483c800e8360c000089c3b8f81d7541e8220800008b142483c800ff128b7c2434ff770cbbffffffff8b44242083c800e80a0c000089c3b8081e7541e8f60700008b142483c800ff1268181e75418b5c2428b8590000008d54244090e88a0900008b742438b8000375418b1683c800ff128b5c24388b4424308b54243483c800e81ef8ffff8b5c2438b8281e75418b530c0bc0ff128b542438b8010000008b520883c43cff22ff730c8b4004e80a13000089c3b85c217541e87a0700008b142483c40cff22ff700c68682175418b58088b40048d54241090e81616000083c408c368b02275418b5804b8770000008d54240c0bc0e8f208000083c408c3ff7004ff7008b8501475418b5318ff1268c02275418b5c2404b8590000008d54241490e8c60800008b5c240cb8181475418b1383c800ff128b54240cb8510000008b520c0bc0ff128b4c240cb8181475418b1183c800ff128b5c240c8b4424048b54240883c800e83af7ffff8b44240c8b38b81814754189fa90ff128b74240cb8530000008b560c0bc0ff128b5c240cb8010000008b530883c410ff2268d42275418b5804b8590000008d54240c90e83a08000083c408c3ff7004b87c1175418b531883c800ff128b5c2408ff730cbb51000000b8e02275410bc0e85a0600008b142483c800ff128b5c240c8b4424048b54240883c800e8aaf6ffff8b54240cb8181475418b1283c800ff128b4c240cb8530000008b510c0bc0ff128b44240c8b7808b80100000089fa83c410ff22ff7004ff7008b8501475418b531890ff128b5c240cb8f02275418b530c0bc0ff128b5c240c8b4424048b54240883c800e842f6ffff8b54240cb8002375418b520c0bc0ff128b4c240cb8000375418b1183c800ff128b5c240c8b04248b542408e812f6ffff8b44240c8b780cb85300000089faff128b74240cb8010000008b560883c410ff22b80c2375418b530c83c408ff228b4804ff31ff7104ff7108ff710cff7110b87c1175418b531883c800ff128b442418ff700cbbffffffff8b44241083c800e84a09000050bbffffffff8b44241890e83a0900008b7d008d7ff43b7d087303ff5520897d00c747fc02000000be1c23754189770489078b5d008d5bf43b5d087303ff5520895d00c743fc02000000897b04c7035b0000008b55008d52f43b55087303ff5520895500c742fc02000000895a048b0c24890a8b45008d40f43b45087303ff5520894500c740fc02000000895004bf2823754189380bc0e8de0c00008b5424040bc0ff128b5c24208b4424108b54241c83c800e8f6f4ffff8b742420b8530000008b560c0bc0ff128b5c2420b8000375418b1383c800ff128b542420b8510000008b520c0bc0ff128b4c2420b8000375418b1183c800ff128b45008d40f03b45087303ff5520894500c740fc03000000bf3823754189388b74241c8970088b5c24208958048b55008d52f43b55087303ff5520895500c742fc02000000b91c247541890a894204ff74240cbb5900000089d08d54242890e8ca0600008b4424088b3883fffd7502eb638b742420b8000375418b160bc0ff128b5c2420b8000375418b53180bc0ff128b542420b8702475418b520c0bc0ff128b4c2420b8000375418b1183c800ff128b5c24208b4424088b54241c83c800e8f2f3ffff8b4424208b7808b80100000089faff128b742420b8000375418b1683c800ff128b5c2420ff730cbb80247541b88c2475410bc0e84e030000bbfb0000000bc0e8420300008b142483c800ff128b542424b8010000008b520883c428ff2268982475418b5804b8a82475418d54240c90e8c604000083c408c368b82475418b5804b8590000008d54240c0bc0e8aa04000083c408c3ff730cbbffffffff8b4004e8ea06000089c3b8cc247541e8d60200008b142483c40cff22ff7004ff7008ff700cb8501475418b531890ff128b5c2410ff730cbbffffffff8b44240c83c800e8aa06000089c3b8e0247541e896020000bb0c1475410bc0e88a0200008b142483c800ff128b5c24148b4424048b54241083c800e8daf2ffff8b542414b8181475418b1283c800ff128b4c2414b8590000008b510c0bc0ff128b4424148b38b80003754189fa90ff128b5c24148b4424088b54241083c800e896f2ffff8b742414b8181475418b1683c800ff128b5c2414b8530000008b530c0bc0ff128b542414b8010000008b520883c418ff22ff7004ff7008b8501475418b531883c800ff128b5c240cff730cbbffffffff8b44240483c800e8d605000089c3b8f8247541e8c2010000bb0c1475410bc0e8b60100008b142483c800ff128b542410b8181475418b1283c800ff128b5c24108b4424088b54240c83c800e8f6f1ffff8b4c2410b8181475418b1183c800ff128b4424108b780cb85300000089faff128b742410b8010000008b560883c414ff2290|@406,63|31,0,$315+58 246,0,@316 263,0,@317 295,0,@318 314,0,0 326,0,@319 339,0,@320 352,0,@321 370,1,@322 388,0,@328 423,0,@326 447,0,@329 465,0,@326 481,0,44 490,1,@330 499,0,0 521,0,@312 538,0,-1 550,1,@336 556,0,-1 566,1,@336 595,0,@344 633,0,123 697,0,@346 706,1,@347 723,0,@312 759,0,0 780,0,@351 787,0,I48 804,0,-1 814,1,@336 820,0,-1 830,1,@336 859,0,@352 937,0,44 1001,0,@353 1010,1,@347 1040,0,-1 1050,1,@336 1059,0,0 1086,0,-1 1094,1,@336 1123,0,@352 1206,0,44 1272,0,@354 1282,1,@347 1293,0,-1 1302,1,@336 1308,0,-1 1318,1,@336 1347,0,@352 1425,0,44 1489,0,@355 1498,1,@347 1524,0,-1 1534,1,@336 1541,0,@356 1546,1,@323 1551,0,@325 1558,1,@323 1595,0,41 1619,0,I48 1631,0,@357 1643,0,@358 1650,0,@359 1676,0,@316 1698,0,@360 1706,1,@323 1711,0,40 1718,1,@323 1735,0,@312 1769,0,@312 1792,0,@206 1799,0,@361 1807,0,@362 1814,1,@323 1834,0,-1 1846,1,@336 1853,0,@363 1858,1,@323 1878,0,-1 1890,1,@336 1897,0,@364 1902,1,@323 1922,0,-1 1934,1,@336 1941,0,@365 1946,1,@323 1959,0,@366 1968,0,44 1978,1,@330 1987,0,@312 2023,0,@367 2039,0,0 2058,1,@368 2065,0,@380 2070,1,@323 2086,0,@381 2102,1,@382 2111,0,@384 2119,0,59 2130,1,@330 2145,0,@328 2155,0,@385 2164,0,44 2174,1,@330 2183,0,@326 2199,0,40 2215,0,@326 2253,0,@326 2267,0,41 2283,0,0 2296,0,@386 2304,0,44 2314,1,@330 2326,0,@316 2346,0,40 2351,0,@387 2358,1,@323 2395,0,@326 2411,0,41 2430,0,0 2448,0,@328 2463,0,@388 2499,0,@389 2515,0,@312 2550,0,41 2563,0,0 2576,0,@390 2606,0,@316 2626,0,-1 2638,1,@336 2644,0,-1 2654,1,@336 2683,0,@391 2721,0,45 2785,0,@392 2794,1,@347 2831,0,41 2847,0,@312 2863,0,40 2879,0,@312 2915,0,@393 2960,0,@395 2974,0,44 2986,1,@333 3008,0,@312 3023,0,@312 3039,0,@397 3055,0,@312 3094,0,0 3107,0,@312 3126,0,@398 3131,0,@399 3138,1,@323 3143,0,125 3150,1,@323 3167,0,0 3180,0,@400 3188,0,@401 3198,1,@330 3207,0,@402 3215,0,44 3226,1,@330 3238,0,-1 3246,1,@336 3253,0,@403 3258,1,@323 3280,0,@328 3298,0,-1 3310,1,@336 3317,0,@404 3322,1,@323 3327,0,@325 3334,1,@323 3371,0,@326 3387,0,44 3405,0,@312 3439,0,@326 3455,0,41 3471,0,0 3490,0,@328 3510,0,-1 3522,1,@336 3529,0,@405 3534,1,@323 3539,0,@325 3546,1,@323 3563,0,@326 3599,0,@326 3618,0,41 3631,0,0 316:O2|1,1 317:S7|474c4f42414c20 318:S11|20282a474c4f42414c2a29 319:S3|4e494c 320:S9|4d415443484641494c 321:S8|414c544d41544348 322:C2,192|3b650c7303ff55248b7afc525053b87c1175418b57180bc0ff128b7424088b5efcff730cbb510000008b442414e8aa0000008b142483c800ff128b54240c8b5afc8b4424088b52f8ff128b4c240c8b41fc8b780cb80c14754189fa90ff128b74240c8b5efcb8181475418b13ff128b54240c8b5afc8b4424048b52f8ff128b4c240c8b41fc8b38b81814754189fa0bc0ff128b74240c8b5efcb8530000008b530c83c800ff128b54240c8b4afcb8010000008b51088b7c241083c41857ff2290|@327,63|15,0,@316 37,0,40 46,1,@323 85,0,@325 102,0,@326 136,0,@326 154,0,41 174,0,0 323:C2,300|3b650c7303ff5524f7c0010000007407bf03000000eb068b388d7c3f01f7c3010000007407be03000000eb068b338d74360183ff01750389d8c383fe017501c38d56ff03d78d4a105053575652518d41fe89c1c1e90283c901ff7504b83a137541506a018965046a01bb8300000089c8ff15a0920408ff7424088f4504eb1083c800b8d4b67441ff552cb8010000008b7c2410d1ef89388d7c3f018b54241883fa03750f8b4c2420d1e98848048d4c0901eb195053506a0952bb090000008b4424340bc0ff1500aa0408eb0250538b44241c83f80375208b7c24208d77088b5c24048b542424d1ead1ee8814338d5412018d743601eb1f8b7c24208d7708ff7424045650bb090000008b44243083c800ff1500aa04088b4424040bc0ff15209704088b44240483c42cc30bc0|@324,63|17,0,1 38,0,1 93,0,$323+130 106,0,65 114,0,I11 131,0,@78 139,0,0 186,0,4 198,0,I198 261,0,4 274,0,I198 286,0,I47 324:S4|5e283229 325:S2|2c20 326:O2|0,0 327:S34|42617365436f6465547265652e7072657474792832297072696e7444696164283329 328:O2|3,0 329:S7|7b6561726c797d 330:C2,184|3b650c7303ff55248b7afc525053b87c1175418b57180bc0ff128b7424088b5efcff730cbb510000008b442414e81afeffff8b142483c800ff128b54240c8b4d008d49f03b4d087303ff5520894d00c741fc03000000b84015754189018b7afc8979088b72f8897104ff7424048b5c240c89c80bc0e8b60000008b5c240c8b53fcb8181475418b12ff128b4c240c8b41fc8b780cb85300000089fa90ff128b74240c8b5efcb8010000008b53088b4c241083c41851ff2290|@335,63|15,0,@316 37,0,40 46,1,@323 87,0,@331 118,1,@333 130,0,@326 149,0,41 166,0,0 331:C2,16|3b650c7303ff55248b5a088b5204ff22|@332,63| 332:S37|42617365436f6465547265652e7072657474792832297072696e744c697374283329283129 333:C2,180|3b650c7303ff55248b7c240483ff017508b801000000c204008b770483fe01750f89c38b0789da8b0c2483c40851ff228b4afc52505356ff37b8181475418b511883c800ff128b04248b54240c83c800ff128b4424108b78fcb8181475418b17ff128b7424108b5efc8b4424088b530cff128b5424108b4afcb8010000008b510883c800ff128b4424108b78fcb8000375418b17ff128b742404897424188b5c24088b44240c8b54241083c414e94effffff0bc0|@334,63|18,0,0 58,0,@326 90,0,@326 122,0,0 142,0,@312 334:S30|42617365436f6465547265652e707265747479283229704c697374283329 335:S34|42617365436f6465547265652e7072657474792832297072696e744c697374283329 336:C2,208|3b650c7303ff5524a8017503ff553883f8017d7183fb017507bf05000000eb1d83fbfd7507bf11000000eb1183fbff7507bf15000000eb05bf21000000be0100000089c323def6c3017503ff553889f32bd88d5b0170f457b801000000e88a0000008b55008d52f43b55087303ff5520895500c742fc02000000894204c702fd000000eb05e90700000089d0e9fb01000083fb017507bf05000000eb1d83fbfd7507bf11000000eb1183fbff7507bf15000000eb05bf210000005789c3b80100000083c800e822000000e9bd01000090|@343,63|26,0,2 38,0,8 50,0,10 57,0,16 62,0,0 89,0,0 94,1,@337 127,0,126 141,1,@341 151,0,2 163,0,8 175,0,10 182,0,16 190,0,0 198,1,@337 203,1,@341 337:C2,336|3b650c7303ff552450538b5c240c8b042483c800ff15009f0408a8017503ff553883f8157d49a8017503ff553889c683c66070f6f7c6010000007503ff553883fe017d02eb15f7c6010000007503ff553881feff0100007f02eb10b81819754183c800ff552cbf0100000089f7eb5aa8017503ff553889c781c78200000070f3f7c7010000007503ff553889fe83ee1470f6f7c6010000007503ff553883fe017d02eb15f7c6010000007503ff553881feff0100007f02eb0eb81819754190ff552cbf0100000089f78b1c248b54240c5323daf6c3015b7503ff55383bda7d298b4d008d49f43b4d087303ff5520894d00c741fc020000008b442404894104893989c883c408c204005789d38b442404ff15e09e04088b4d008d49f43b4d087303ff5520894d00c741fc020000008b7c24088979048b342489318b5c2410895c241089c389c883c40ce9b2feffff0bc0|@340,63|22,0,I110 92,0,@338 103,0,0 186,0,@338 195,0,0 274,0,I109 338:O3|@7323,@339,0 339:S3|436872 340:S14|496e742e746f4368617273283329 341:C2,288|3b650c7303ff552483f8017506b840970408c350ff30bf0100000083f801750489feeb26f7c7010000007503ff553889fe83c60270f68b400489f73b650c7303ff5524ebd6be01000000f7c6010000007414f7c6010000007503ff553883fe017c0489f3eb0db8d4b67441ff552cbb0100000083fb0375078b042483c408c38d43108d78fe89fec1ee0283ce0153ff7504ba061a7541526a018965046a01bb8300000089f083c800ff15a092040889c1ff7424088f4504eb0e90b8d4b67441ff552cb9010000008b44240cd1e889018d4400015157be090000008b5c241c83fb017502eb278b5424048b0bd1e9d1ee880c328d4c09018d7436018d46028b5b0489c63b650c7303ff5524ebd28b442404ff15209704088b44240483c420c30bc0|@342,63|14,0,I48 23,0,0 70,0,0 103,0,@78 111,0,0 146,0,$341+186 159,0,65 170,0,I11 187,0,@78 195,0,0 214,0,4 274,0,I47 342:S31|4c696272617279537570706f72742e737472696e67496d706c6f6465283129 343:S10|496e742e666d74283229 344:O2|@345,0 345:S8|20757365737d203d 346:S6|4445434c2023 347:C2,492|3b650c7303ff552483f8017506b840970408c38b780483ff0175038b00c350be0100000083f801750489f3eb3e8b38f7c7010000007407bb03000000eb068b1f8d5c1b0189f223d3f6c2017503ff55388d56ff03d370f689d68b40043b650c7303ff5524ebbebb0100000083fb017509b84097040883c404c383fb0375518b142483fa01750db8f81c7541ff552cb80100000052ff328b1c24b8409704080bc0ff154094040883f801741d8b4c24048b510483c4083b650c7303ff5524ebc2b80100000083c40cc38b042483c40cc3f7c3010000007411f6c3017503ff553883fb017c0489daeb0fb8d4b674410bc0ff552cba010000008d4a108d41fe89c7c1ef0283cf0152ff7504be221c7541566a018965046a01bb8300000089f883c800ff15a092040889c3ff7424088f4504eb0e90b8d4b67441ff552cbb010000008b54240cd1ea89138d5412015351b8090000008b7c241883ff017502eb718b37f7c6010000007407bb03000000eb068b1e8d5c1b0183fb0375158b5424045389f3d1ebd1e8881c025b8d440001eb1a50ff770453ff7424105053bb0900000089f0ff1500aa0408eb0550ff7704538b4c24088b04248d78ff03f989fe8b7c240489f083c40c3b650c7303ff5524eb05e902000000eb818b44240483c800ff15209704088b44240483c41cc30bc0|@350,63|14,0,I48 32,0,0 56,0,1 103,0,0 113,0,I48 135,0,@348 143,0,0 154,0,I48 162,0,I24 192,0,0 233,0,@78 243,0,0 266,0,$347+306 279,0,65 290,0,I11 307,0,@78 315,0,0 334,0,4 360,0,1 410,0,4 418,0,I198 478,0,I47 348:O3|103,@349,I48 349:S4|4661696c 350:S16|537472696e672e636f6e636174283129 351:S6|2c206c617374 352:O2|41,0 353:S5|434c4f5328 354:S6|504152414d28 355:S6|4c4f43414c28 356:S9|494e44495245435428 357:S6|494e4c494e45 358:S5|534d414c4c 359:S10|4f4e4c59494e4c494e45 360:S6|4c414d424441 361:S5|66616c7365 362:S3|434c3d 363:S4|2043523d 364:S5|204c45563d 365:S6|20415247533d 366:S6|20434c4f533d 367:S9|297b4c414d4244417d 368:C2,572|3b650c7303ff5524f7c0010000007456f7c001000000740489c7eb0fb8942075410bc0ff552cbf01000000f7c7010000007503ff553883ff017d1db82ccb744189c623f7f7c6010000007503ff55388d70ff03f770f6eb0289febb0300000089f0e91ef8fffff7c001000000741189c6b8c02075410bc0ff552cbf0100000089c75089fbb8cd00000083c800ff1500a4040883f801746dbf0100000081ff01020000750fb8e42075410bc0ff552cb8010000005789f80bc0ff15e0a804088b7424043bf0751fbbffffffff8b042483c800e8aef7ffff89c3b81021754183c408e997f3ffff8b1c24f6c3017503ff553889df83c70270f683c4043b650c7303ff5524eb98e909000000b80100000083c408c38b3c24f7c701000000740eb8c020754190ff552cbe0100000089fe0fb65eff8d5c1b0189da83e20783fa017571f7c7010000007410b8c020754183c800ff552cb90100000089f98b41fc81e0ffffff008d440001a8017503ff553883f8017d1dbb2ccb744189de23f0f7c6010000007503ff55388d73ff03f070f6eb0289c6f7c6010000007503ff553883fe037c6ef7c7010000007416b8c0207541eb05e97b0000000bc0ff552cbe0100000089fe8b3ef7c701000000755cf7c7010000007410b8c020754183c800ff552cbe0100000089fe0fb65eff8d5c1b0189da83e20783fa05753089fbb8d30000000bc0ff1500a4040889c3b81c217541eb05e91c00000090e862f2ffffbb5300000083c404e955f2ffffb82821754183c404c3b82821754183c404c383c800|@379,63|29,0,@369 39,0,0 60,0,@176 91,0,1 98,1,@336 113,0,@372 123,0,0 133,0,102 142,0,I150 152,0,0 165,0,@374 175,0,0 186,0,I189 199,0,-1 210,1,@336 217,0,@376 225,1,@323 266,0,0 286,0,@372 295,0,0 328,0,@372 339,0,0 371,0,@176 426,0,@372 443,0,0 468,0,@372 479,0,0 506,0,105 514,0,I150 521,0,@377 534,1,@323 539,0,41 547,1,@323 552,0,@378 561,0,@378 369:O3|@7324,@371,@370 370:S7|746f53686f7274 371:S4|43617374 372:O3|@7324,@371,@373 373:S9|746f41646472657373 374:O3|@7320,@224,@375 375:S17|556e6b6e6f776e2052545320656e747279 376:S4|20525453 377:S2|2028 378:S6|3c6c6f6e673e 379:S28|42617365436f6465547265652e737472696e674f66576f7264283129 380:S3|4c4954 381:S2|4946 382:C2,244|3b650c7303ff55248b7afc525053b87c1175418b57180bc0ff128b7424088b5efcff730cbb510000008b442414e812f1ffff8b142483c800ff128b54240c8b5afc8b4424088b52f8ff128b4c240c8b41fc8b780cb80c14754189fa90ff128b74240c8b5efcb8181475418b13ff128b54240c8b5afc8b4424048b52f8ff128b4c240c8b41fc8b780cb80c14754189fa90ff128b74240c8b5efcb8181475418b13ff128b54240c8b5afc8b4424188b52f8ff128b4c240c8b41fc8b38b81814754189fa0bc0ff128b74240c8b5efcb8530000008b530c83c800ff128b54240c8b4afcb8010000008b51088b7c241083c41c57ff2290|@383,63|15,0,@316 37,0,40 46,1,@323 85,0,@325 102,0,@326 137,0,@325 154,0,@326 188,0,@326 206,0,41 226,0,0 383:S35|42617365436f6465547265652e7072657474792832297072696e745472696164283429 384:S5|424c4f434b 385:S9|424547494e4c4f4f50 386:S4|4c4f4f50 387:S5|5241495345 388:S7|48414e444c4528 389:S4|57495448 390:S5|4c44455843 391:O2|40,0 392:S5|4341534520 393:C2,164|3b650c7303ff55248b7a04525053b87c1175418b57180bc0ff128b342483fe017502eb538b5c24088b5304ff7604ff720cbbffffffff8b0690e84af3ffffbb750000000bc0e836efffff8b142483c800ff128b4c24108b41048b38b80003754189fa0bc0ff128b74240483c4083b650c7303ff5524eba68b5c24088b53048b4b0889d38b44240489ca83c800ff128b4424088b7804b8010000008b570883c40cff220bc0|@394,63|15,0,@316 50,0,-1 58,1,@336 63,0,58 70,1,@323 92,0,@312 150,0,0 394:S25|42617365436f6465547265652e707265747479283229283229 395:C2,20|3b650c7303ff55248b58048b008b5204ff220bc0|@396,63| 396:S25|42617365436f6465547265652e707265747479283229283129 397:S5|454c53453a 398:S4|43415345 399:S3|29207b 400:S6|4d555455414c 401:S5|20414e4420 402:S9|524543434f4e535452 403:S10|434f4e5441494e455220 404:S13|534554434f4e5441494e455228 405:S15|5455504c45434f4e5441494e455228 406:S22|42617365436f6465547265652e707265747479283229 407:C2,172|3b650c7303ff5524525053b8510000008b530c90ff128b7c24048b1f83fbff75088b57048b7208eb0d83fb0375058b7708eb038b77048b5424088b1c2489f08b52040bc0ff128b0c24b80c1475418b510c83c800ff128b04248b38b80003754189fa0bc0ff128b7424048b1683faff75088b4e048b5910eb05bbf82575418b4c240889d88b1c248b51040bc0ff128b3c24b8000375418b17ff128b3424b8530000008b560c83c40cff220bc0|@409,63|12,0,40 74,0,@325 92,0,@312 122,0,@408 146,0,@312 158,0,41 408:O1|-2 409:S28|42617365436f6465547265652e7072657474794f707456616c283229 410:O3|@7320,@224,@411 411:S21|6368616e67654c3a20556e6b6e6f776e20636f6465 412:C2,92|3b650c7303ff552483f8017506b801000000c352ff70048b5af88b008b52fc0bc0e82aabffff508b4424048b5424080bc0e8caffffff8b7d008d7ff43b7d087303ff5520897d00c747fc020000008947048b3424893789f883c40cc3|@413,63|14,0,0 34,1,@226 413:S11|4c6973742e6d6170283229 414:C2,92|3b650c7303ff552483f8017506b801000000c352ff70048b5af88b008b52fc0bc0e89eaaffff508b4424048b5424080bc0e8caffffff8b7d008d7ff43b7d087303ff5520897d00c747fc020000008947048b3424893789f883c40cc3|@413,63|14,0,0 34,1,@226 415:S35|434f44455452454528292e6368616e67654c6576656c2832296368616e67654c283229 416:O1|@417 417:C2,16|b8b82775410bc0ff552cb80100000090|@420,1|1,0,@418 11,0,0 418:O3|@7320,@224,@419 419:S9|6572726f7220656e76 420:S22|434f44455452454528292e6572726f72456e76283129 421:O1|@422 422:C2,16|b8b82775410bc0ff552cb80100000090|@420,1|1,0,@418 11,0,0 423:O3|@7320,@224,@424 424:S26|6368616e67654c6576656c3a20556e6b6e6f776e20656e747279 425:S25|434f44455452454528292e6368616e67654c6576656c283229 426:S44|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229656e76283329 427:O1|@451 428:O1|@429 429:O2|-1,@430 430:O5|0,@432,@443,@7325,@431 431:O2|-7,@444 432:O2|@434,@433 433:O2|@440,0 434:C2,84|3b650c7303ff55248b780883ff0175368b30ff70048b1e8b420483c800e84e000000f7c00100000075048b18eb0db834cf7441ff552cbb010000008b042483c404e912a6ffffb8982a7541ff552cb80100000090|@439,63|30,1,@435 47,0,@222 55,0,0 66,1,@225 71,0,@437 79,0,0 435:C2,220|8b388b378b1683faff755e8b4e048b395323dff6c3015b7503ff55383bdf7d4ef6c3017503ff553883fb017d02eb148b015323d8f6c3015b7503ff55383bd87d02eb10b824ae744183c800ff552cb801000000f6c3017503ff553889df83c70270f68b5c79fe89d8c3e9040000008b4004c38b4e048b79fc81e7ffffff008d7c3f015323dff6c3015b7503ff55383bdf7d44f6c3017503ff553883fb017d02eb1f8b41fc81e0ffffff008d4400015323d8f6c3015b7503ff55383bd87d02eb0fb824ae74410bc0ff552cb8010000008b7c59fe89f8c38b4004c30bc0|@436,63|68,0,@51 79,0,0 193,0,@51 203,0,0 436:S19|5374726574636841727261792e737562283229 437:O3|@7320,@224,@438 438:S36|6f75746572206c6576656c207265616368656420696e206c6f6f6b75704f6c6441646472 439:S50|434f44455452454528292e67656e436f6465283229696e736572746564436f64652d6c6f6f6b75704f6c6441646472283129 440:O1|@441 441:O2|0,@442 442:O10|0,0,0,0,0,0,0,0,0,0 443:O5|-5,1,1,0,0 444:O8|@445,@206,0,0,1,0,0,0 445:O4|4,@447,@446,1 446:O2|-3,I229 447:O2|@449,@448 448:O2|@450,0 449:O2|-3,1 450:O5|-5,-1,1,0,0 451:O2|0,@449 452:O2|@463,@462 453:C2,452|3b650c7303ff552489c78b45008d40f03b45087303ff5520894500c740fc030000008b7424088970088958048938528b54240890ff128b1083faff75088b48048b5910eb05bbf82575418b3b83fffd7507b9e02d7541eb3a83faff75088b48048b7104eb05be142e75418b4d008d49f03b4d087303ff5520894d00c741fc03000000ba482e754189118b14248951088971048b3083feff750a8b500489c68b4208eb1383fe03750789c28b4208eb0589c28b420489d65653518d542410e8c20100008b4c24088b3183feff75078b59048b3beb0f83fe0375058b7904eb05bf0100000083feff75088b51048b5a0ceb1e8b5d008d5bf83b5d087303ff5520895d00c743fc01000040c703010000008b55008d52e83b55087303ff5520895500c742fc050000008b4c2404894a10895a0c8942088b3424897204893a8b1983fbfd755a83ff01752989c28b45008d40f43b45087303ff5520894500c740fc02000000895004c7000100000083c410c2080089c28b45008d40f03b45087303ff5520894500c740fc03000000895008897804c7000300000083c410c208008b45008d40f43b45087303ff5520894500c740fc02000000895004c700ffffffff83c410c2080090|@461,63|70,0,@408 82,0,@454 102,0,@456 131,0,@458 190,1,@459 223,0,0 266,0,0 358,0,0 402,0,1 441,0,-1 454:O1|@455 455:C2,16|b8b82775410bc0ff552cb80100000090|@420,1|1,0,@418 11,0,0 456:O1|@457 457:C2,16|b8b82775410bc0ff552cb80100000090|@420,1|1,0,@418 11,0,0 458:C2,32|3b650c7303ff55248b78088b3424893c24ff72048b58048b008b520856ff2290|@215,63| 459:C2,236|3b650c7303ff55248b3883fff775498b72fc8b5804f7c301000000740489d9eb0eb89420754190ff552cb9010000008b7e048b5c4ffe8b45008d40f43b45087303ff5520894500c740fc02000000895804c700fbffffffc383ff0d75755250ff70088b4004e896ffffff8b3083fefb75668b5804f7c301000000740fb8c02075410bc0ff552cba0100000089da8b0c24f7c101000000740489cfeb0fb8942075410bc0ff552cbf010000008b4c7afe8b45008d40f43b45087303ff5520894500c740fc02000000894804c700fbffffffeb0ae911000000e90400000083c40cc38b44240483c40cc3c383c800|@460,63|34,0,@369 43,0,0 83,0,-3 125,0,@372 135,0,0 157,0,@369 167,0,0 204,0,-3 460:S44|434f44455452454528292e67656e436f64652832292831296e6577456e7669726f6e2834296c6f6f6b283129 461:S37|434f44455452454528292e67656e436f64652832292831296e6577456e7669726f6e283429 462:O1|@464 463:O2|@462,1 464:C2,20|83f8037506b803000000c3b801000000c383c800|@206,1|6,0,1 12,0,0 465:O2|-3,@463 466:O2|@443,@467 467:O2|@449,0 468:O4|@361,@207,@469,@187 469:O2|-1,@470 470:O2|5,@471 471:O2|-1,@472 472:O5|0,@474,@493,@7328,@473 473:O2|10,@494 474:O3|@214,@476,@475 475:O2|@453,@489 476:O2|@218,@477 477:O3|@221,0,@478 478:O10|0,@480,@479,0,0,0,0,0,0,0 479:O1|@488 480:O1|@481 481:O2|-1,@482 482:O5|0,@432,@443,@7327,@483 483:O2|-7,@484 484:O8|@485,@361,0,0,1,0,0,0 485:O4|4,@486,@446,1 486:O2|@487,@448 487:O2|-3,0 488:O2|0,@487 489:O2|@491,@490 490:O1|@492 491:O2|@490,0 492:C2,20|83f8017506b803000000c3b801000000c383c800|@361,1|6,0,1 12,0,0 493:O2|-3,@491 494:O2|@443,@495 495:O2|@487,0 496:O2|@498,@497 497:O2|@499,0 498:S2|3e3d 499:O3|@7317,69,@500 500:O4|@498,-1,@186,@185 501:O2|@206,@502 502:O2|@503,0 503:O3|@7317,69,@204 504:O2|@506,@505 505:O2|@507,0 506:S3|65786e 507:O3|@7330,69,@508 508:O6|@506,0,0,0,@510,@509 509:O2|-1,@7331 510:O2|0,@511 511:O3|0,@202,0 512:O2|@514,@513 513:O2|@515,0 514:S3|636872 515:O3|@7317,69,@516 516:O4|@514,-1,@518,@517 517:O3|1,@522,@521 518:O2|-1,@519 519:O2|-7,@520 520:O8|@450,@514,0,0,1,0,0,0 521:O4|-3,0,@530,@529 522:O4|-3,0,@524,@523 523:O2|0,@525 524:S3|696e74 525:O6|@524,0,0,0,@527,@526 526:O2|-1,@7332 527:O2|0,@528 528:O3|1,@202,0 529:O2|0,@531 530:S6|737472696e67 531:O6|@530,0,0,0,@527,@532 532:O2|-1,@7333 533:O2|@535,@534 534:O2|@536,0 535:S2|3c3e 536:O3|@7317,69,@537 537:O4|@535,-1,@539,@538 538:O3|1,@540,@187 539:O2|-2,-3 540:O4|-2,1,@541,0 541:O2|@543,@542 542:O2|@545,0 543:O2|49,@544 544:O3|3,@7334,79996 545:O2|50,@544 546:O2|@548,@547 547:O2|@549,0 548:S3|616273 549:O3|@7317,69,@550 550:O4|@548,-1,@186,@551 551:O3|1,@192,@192 552:O2|@361,@553 553:O2|@554,0 554:O3|@7317,69,@468 555:O2|@557,@556 556:O2|@558,0 557:S6|506f6c794d4c 558:O3|@7335,69,@559 559:O3|@557,@561,@560 560:O4|@562,I48,0,0 561:O2|-1,@487 562:O4|-1,@7337,@7338,@7336 563:O2|@564,10 564:C2,16|3b650c7303ff55248b5a04e9d893ffff|@178,63|12,1,@175 565:O2|@6168,@6167 566:O2|@568,@567 567:O2|@569,0 568:S5|7072696e74 569:O3|@7317,69,@570 570:O4|@568,-1,@572,@571 571:O3|1,@573,@573 572:O2|-2,3 573:O3|3,@7340,79992 574:O2|@576,@575 575:O2|@577,0 576:S8|636f6d70696c6572 577:O3|@7317,69,@578 578:O4|@576,-1,@580,@579 579:O3|1,@5822,@5821 580:O2|-1,@581 581:O2|-3,@582 582:O2|@584,@583 583:O2|@587,@586 584:C2,28|3b650c7303ff55248b78088b3424893c248b58048b008b520456ff22|@585,63| 585:S27|434f4d50494c45525f424f445928292e636f6d70696c6572283129 586:O2|@709,@708 587:C2,772|8d7c24b03b7d0c7303ff55285050505050505050505052508d7c24085789de8b5c243889f0e8f60200008b5d008d5bd43b5d087303ff5520895d00c743fc0a0000008b54240889138b4c240c894b048b4424108943088b7c2414897b0c8b7424188973108b74241c8973148b7424208973188b74242489731c8b7424288973208b4c242c894b2453bb784375418b442438ba703d754183c800e81a05000050bb6c4475418b44243cba703d7541e80605000050ff7504bf0a397541576a018965048b74241083fe01744a8b5c241c8b55008d52e83b55087303ff5520895500c742fc05000000b960457541890a8b7c2414897a108b74241889720c8b4c244c894a088b7b04897a0489d00bc0ff1500950408eb168b5c241cff74244c8b53048b5c241c8b44241890ff12ff7424088f450483c448c2040083c8008b0883f90375578b7c2420c707010000008b742414c706410000008b5c241cc703730000008b54242cc702890000008b7c2430c7070100000050b8c44575418b54240483c800ff12b870ae7441ff552cb801000000eb1289c7b801000000e90600000083c43cc2040081f9cf00000075478b7d008d7ff03b7d087303ff5520897d00c747fc030000008b7008897708bb081d7541895f04c707cf00000089c289f8ff552cb801000000eb0d89c7b80100000083c43cc20400bffcc1b4413bcf757150bbe44575418b400890e87e0f000089c3b8dc4b7541e8d2d8ffffbb004c75410bc0e8c6d8ffff50bb1500000090e8bad8ffff8b5424080bc0ff128b75008d76f03b75087303ff5520897500c746fc030000008b1c24895e08ba081d7541895604c706cf00000089f083c800ff552ceb05e914000000b801000000eb0d89c6b80100000083c43cc20400f7c001000000740eb8c020754190ff552cbe0100000089c68b5e04b8204c7541e83ed8ffffbb344c75410bc0e832d8ffff50bb1500000090e826d8ffff8b5424040bc0ff128b55008d52f03b55087303ff5520895500c742fc030000008b0c24894a08b8081d7541894204c702cf00000089d083c800ff552cb80100000090|@707,63|38,1,@588 137,0,@667 146,0,@599 154,1,@601 160,0,@674 169,0,@599 174,1,@601 183,0,$587+314 231,0,@681 270,0,I30 327,0,0 337,0,32 347,0,57 357,0,68 367,0,0 373,0,@683 387,0,@54 395,0,0 404,0,0 458,0,@349 467,0,103 479,0,0 488,0,0 499,0,@7320 509,0,@684 518,1,@699 525,0,@703 530,1,@323 535,0,@704 542,1,@323 548,0,10 554,1,@323 597,0,@349 606,0,103 626,0,0 635,0,0 654,0,@372 663,0,0 673,0,@705 678,1,@323 683,0,@706 690,1,@323 696,0,10 702,1,@323 745,0,@349 754,0,103 767,0,0 588:C2,308|3b650c7303ff55245053bb403c75418b0424ba703d75410bc0e87a02000050bb684275418b442404ba703d7541e8660200008b7d008d7ff83b7d087303ff5520897d00c747fc01000040c707410000008b75008d76f83b75087303ff5520897500c746fc01000040c706730000008b5d008d5bf83b5d087303ff5520895d00c743fc01000040ba4097040889138b4d008d49f83b4d087303ff5520894d00c741fc01000040c701010000008b55008d52f83b55087303ff5520895500c742fc01000040c702890000005057565351528b45008d40f83b45087303ff5520894500c740fc01000040c700010000008b7c24288b7424108937895f048b5c240c895f08894f0c8b4c2414894f108b74242089771489571889471c8b5c2418895f208b54241c895724b80100000083c424c2040083c800|@666,63|11,0,@589 19,0,@599 26,1,@601 32,0,@659 41,0,@599 46,1,@601 76,0,32 106,0,57 135,0,I48 167,0,0 197,0,68 233,0,0 295,0,0 589:O3|@591,@594,@590 590:O2|@596,@7341 591:O2|@592,@7341 592:C2,28|8b388b72043bfe750cb803000000c3b801000000c3b801000000c390|@593,53|10,0,1 16,0,0 22,0,0 593:S19|556e6976657273616c2e746167283229283129 594:O2|@595,@7341 595:C2,44|89c78b45008d40f03b45087303ff5520894500c740fc03000000897808c740048b0000008b7a048938c30bc0|@593,37|32,0,69 596:C2,36|8b388b72043bfe750a8b4008c3b801000000c3b8503d754183c800ff552cb80100000090|@593,53|14,0,0 20,0,@597 31,0,0 597:O3|101,@598,0 598:S5|4d61746368 599:O2|@601,@600 600:O2|@606,@605 601:C2,264|3b650c7303ff55245253ff3383f8017507bf01000000eb4fff30ff70048b4424048b54240883c800ff1283f80174208b7d008d7ff83b7d087303ff5520897d00c747fc010000008b7424048937eb158b042483c4083b650c7303ff5524ebadbf0100000083c408f7c701000000750e8b5c24048b078b530883c40cff228b5c24048b542408ff338b4a0483f9017507b801000000eb4dff31ff71048b4424048b54240890ff1283f80174208b45008d40f83b45087303ff5520894500c740fc010000008b7c24048938eb158b0c2483c4083b650c7303ff5524ebafb80100000083c408f7c001000000750e8b7424088b008b560883c410ff22b8ac3e754190ff552cb80100000090|@604,63|18,0,0 96,0,0 144,0,0 220,0,0 250,0,@602 259,0,0 602:O3|@7320,@224,@603 603:S11|746167206d697373696e67 604:S21|44656275672e676574506172616d65746572283229 605:O2|@613,@612 606:O3|@7341,69,@607 607:O1|@608 608:C2,16|b8403f75410bc0ff552cb80100000090|@611,1|1,0,@609 11,0,0 609:O3|103,@349,@610 610:S16|6572726f7220696e2070726f6772616d 611:S18|44656275672e64656661756c74732d283129 612:O2|@617,@616 613:O3|@7342,69,@614 614:O1|@615 615:C2,8|b801000000c30bc0|@611,1|1,0,0 616:O2|@621,@620 617:O3|@7343,69,@618 618:O1|@619 619:C2,8|b801000000c30bc0|@611,1|1,0,0 620:O2|@623,@622 621:O3|@7344,69,I48 622:O2|@625,@624 623:O3|@7345,69,1 624:O2|@627,@626 625:O3|@7346,69,40 626:O2|@629,@628 627:O3|@7347,69,0 628:O2|@631,@630 629:O3|@7348,69,0 630:O2|@633,@632 631:O3|@7349,69,0 632:O2|@635,@634 633:O3|@7350,69,0 634:O2|@637,@636 635:O3|@7351,69,0 636:O2|@639,@638 637:O3|@7352,69,0 638:O2|@641,@640 639:O3|@7353,69,0 640:O2|@643,@642 641:O3|@7354,69,6 642:O2|@647,@646 643:O3|@7355,69,@644 644:O1|@645 645:C2,8|b801000000c30bc0|@611,1|1,0,0 646:O2|@649,@648 647:O3|@7356,69,77 648:O2|@651,@650 649:O3|@7357,69,0 650:O2|@653,@652 651:O3|@7358,69,0 652:O2|@654,0 653:O3|@7359,69,0 654:O3|@7360,69,@655 655:O1|@656 656:C2,16|b8444275410bc0ff552cb80100000090|@611,1|1,0,@657 11,0,0 657:O3|103,@349,@658 658:S9|4e6f2073747265616d 659:O3|@661,@663,@660 660:O2|@665,@7343 661:O2|@662,@7343 662:C2,28|8b388b72043bfe750cb803000000c3b801000000c3b801000000c390|@593,53|10,0,1 16,0,0 22,0,0 663:O2|@664,@7343 664:C2,44|89c78b45008d40f03b45087303ff5520894500c740fc03000000897808c740048b0000008b7a048938c30bc0|@593,37|32,0,69 665:C2,36|8b388b72043bfe750a8b4008c3b801000000c3b8503d754183c800ff552cb80100000090|@593,53|14,0,0 20,0,@597 31,0,0 666:S17|4c45585f28292e696e697469616c283329 667:O3|@669,@671,@668 668:O2|@673,@7357 669:O2|@670,@7357 670:C2,28|8b388b72043bfe750cb803000000c3b801000000c3b801000000c390|@593,53|10,0,1 16,0,0 22,0,0 671:O2|@672,@7357 672:C2,44|89c78b45008d40f03b45087303ff5520894500c740fc03000000897808c740048b0000008b7a048938c30bc0|@593,37|32,0,69 673:C2,36|8b388b72043bfe750a8b4008c3b801000000c3b8503d754183c800ff552cb80100000090|@593,53|14,0,0 20,0,@597 31,0,0 674:O3|@676,@678,@675 675:O2|@680,@7342 676:O2|@677,@7342 677:C2,28|8b388b72043bfe750cb803000000c3b801000000c3b801000000c390|@593,53|10,0,1 16,0,0 22,0,0 678:O2|@679,@7342 679:C2,44|89c78b45008d40f03b45087303ff5520894500c740fc03000000897808c740048b0000008b7a048938c30bc0|@593,37|32,0,69 680:C2,36|8b388b72043bfe750a8b4008c3b801000000c3b8503d754183c800ff552cb80100000090|@593,53|14,0,0 20,0,@597 31,0,0 681:C2,32|3b650c7303ff55248b7a088b3424893c248b5a0c8b42108b520456ff2283c800|@682,63| 682:S30|434f4d50494c45525f424f445928292e636f6d70696c6572283329283129 683:S24|436f6d70696c6174696f6e20696e7465727275707465640a 684:O1|@685 685:C2,248|3b650c7303ff552481f8b90000007506b800477541c383f8457506b80c477541c383f843720a81f8fd0000007702eb0783f8417402eb01c383f80f7506b818477541c383f8117506b824477541c383f8137506b830477541c383f8157506b83c477541c383f8177506b848477541c383f8197506b854477541c383f81b7506b860477541c383f8417353a8017503ff553889c781c78000000070f3f7c7010000007503ff553883ff017d02eb15f7c7010000007503ff553881ffff0100007f02eb0db818197541ff552cbe0100000089fe89f3b86c477541e9efcbffff6a15bb0700000090e8a200000089c3b8b9000000e9d6cbffff0bc0|@698,63|17,0,@686 28,0,@687 62,0,@688 73,0,@689 84,0,@690 95,0,@691 106,0,@692 117,0,@693 128,0,@694 195,0,@338 203,0,0 212,0,@695 217,1,@323 224,0,3 230,1,@696 237,0,92 242,1,@323 686:S2|5c5c 687:S2|5c22 688:S2|5c61 689:S2|5c62 690:S2|5c74 691:S2|5c6e 692:S2|5c76 693:S2|5c66 694:S2|5c72 695:S2|5c5e 696:C2,400|3b650c7303ff552483fb017508b840970408c20400f6c3017503ff553889df83ef0270f6a8017503ff553883f8017c07be03000000eb05be010000008b5c2404f6c3017503ff553883fb017c07ba03000000eb05ba010000003bf2750489c1eb4f83fa017426f6c3017503ff553889da83ea0270f689c123caf6c1017503ff553889c12bca8d490170f4eb24f6c3017503ff553889da83c20270f689c123caf6c1017503ff553889c12bca8d490170f4505789c8ff15e09e0408ff74240c8b5c240483c800e836ffffff508b5c24108b44240890ff15009f040883f8017502eb3b8b4c2410f6c1017503ff553883f9017c07bf03000000eb05bf01000000a8017503ff553883f8017c07be03000000eb05be010000003bfe7402eb0489c1eb1889c723f9f7c7010000007503ff55388d78ff03f970f689f9f6c1017503ff553889ce83c66070f6f7c6010000007503ff553883fe017d02eb15f7c6010000007503ff553881feff0100007f02eb0db818197541ff552cbb0100000089f38b04248b54240c83c41452e9b3c9ffff83c800|@697,63|14,0,I48 49,0,1 56,0,0 78,0,1 85,0,0 182,0,I109 214,0,I110 243,0,1 250,0,0 267,0,1 274,0,0 367,0,@338 375,0,0 393,1,@323 697:S18|436861722e6f6374496e7452657072283329 698:S16|436861722e746f537472696e67283129 699:C2,348|3b650c7303ff5524f7c0010000007407bf03000000eb068b388d7c3f0183ff03750489daff22505357be01000000ba010000008b0c243bd1750489f0eb618d42028d7a088b5c240889c289f8d1e80fb604038d44000156528b54240cff12f7c0010000007407b903000000eb068b088d4c09018b44240489c723f9f7c7010000007503ff55388d78ff03f970f68b142489fe83c4083b650c7303ff5524eb94e905000000b801000000f7c0010000007410a8017503ff553883f8017c0489c7eb0eb8d4b6744190ff552cbf010000003bf975088b44240883c40cc38d77108d5efe89dac1ea0283ca0157ff7504b86e4a7541506a018965046a01bb8300000089d083c800ff15a092040889c6ff7424088f4504eb0e90b8d4b67441ff552cbe010000008b5c240cd1eb891e8d5c1b015652bb01000000b8090000008d5424240bc0e8320000008b4424040bc0ff15209704088b44240483c424c30bc0|@702,63|17,0,1 42,0,0 47,0,0 103,0,1 165,0,0 194,0,@78 203,0,0 238,0,$699+278 251,0,65 262,0,I11 279,0,@78 287,0,0 306,0,0 311,0,4 322,1,@700 334,0,I47 700:C2,172|3b650c7303ff55248b7af43bdf7506b801000000c38d73088b4afc5089f0d1e80fb604018d44000152538b52f883c800ff12f7c0010000007407bf03000000eb068b388d7c3f0183ff03751c8b7424048b5ee08b542408d1e8d1ea8804138d4400018d541201eb1c8b74240457ff76e0ff74241057bb090000000bc0ff1500aa0408eb01578b4c24048d41028b7c240c8b34248d5eff03df89da89c389d08b54240883c410e956ffffff0bc0|@701,63|16,0,0 59,0,1 118,0,4 126,0,I198 701:S31|537472696e672e746f537472696e6773283229636f7079546f4f7574283229 702:S19|537472696e672e746f537472696e6773283229 703:S26|457863657074696f6e2d20496e7465726e616c4572726f723a20 704:S23|20726169736564207768696c6520636f6d70696c696e67 705:S11|457863657074696f6e2d20 706:S36|20756e65787065637465646c7920726169736564207768696c6520636f6d70696c696e67 707:S27|434f4d50494c45525f424f445928292e636f6d70696c6572283329 708:O3|@978,@5819,@740 709:C2,2540|908dbc24d4feffff3b7d0c7303ff5528525053bb6c4475418b442410ba703d7541e8cef0ffff50bb9c5675418b442414ba703d7541e8baf0ffff50bb905775418b442418ba703d7541e8a6f0ffff50bb845875418b44241cba703d7541e892f0ffff50bb785975418b442420ba703d7541e87ef0ffff8b7c24105050505050ff7728ff7730ff7738ff772cff7744ff7740bb01000000b80f00000090ff15009d040850bb01000000b81100000083c800ff15009d040850bb01000000b81300000083c800ff15009d040850bb01000000b81b00000083c800ff15009d04088d74242889068d5c24288b14248953048d4c24288b4424048941088d7c24288b74240889770c8b5c244cff7308ff730cff7310ff7314ff7318ff731cff7320ff73248b138b4b0489cb89d0e8aa0c00008b44244c8b78088b378b58188b1381fa89000000740489d1eb0289f1bbbc5a754189c8e8220d000083f80174138b44244cba505b754190e8720d000089c1eb05b9010000008b4c244c8b41088b388b71188b1e81fb89000000740489daeb0289fa8b7c24508b5f0489d090e8da0c000083f80174678b74244cff7608ff760cff7610ff7614ff7618ff761cff7620ff76248b5e048b0690e8363a000083f8017430ff7608ff760cff7610ff7614ff7618ff761cff7620ff76248b5e048b0690e8e60b0000b8dc887541ff552cb801000000b80c89754183c454c2040050505089e3b80100000090e8d23a00008b75008d76f03b75087303ff5520897500c746fc03000000bb2c8d7541891e8b5424088956088b4c242c894e048b44245c8b7d008d7ff43b7d087303ff5520897d00c747fc020000008977048b5c2404891f56578b5c24608b4004ba948d754183c800e80e3f0000505050bb01000000b80f00000090ff15009d04088b54245089c123caf6c1017503ff553889c12bca8d490170f451bb01000000b8110000000bc0ff15009d04088b7c245089c623f7f7c6010000007503ff553889c62bf78d760170f48d5c240889338d5424088b0c24894a048b44240c8b74240889c323def6c3017503ff55388d58ff03de70f68b54245883fa01747050505050505050538d442404508b9c2488000000b89b0000000bc0e8a693ffff8b7d008d7fe03b7d087303ff5520897d00c747fc070000008b74240489378b5c2408895f048b54240c8957088b4c2410894f0c8b4424148947108b4424188947148b74241c89771857b818147541eb05e92b00000089f283c800ff12ff3424bb214e00008b44242c83c800e81e560100b8010000008b54241090ff1289c1eb0eb9010000005050505050505053508b8c2490000000ff7108ff710cff7110ff7114ff7118ff711cff7120ff71248b59048b0190e81638000083f8017430ff7108ff710cff7110ff7114ff7118ff711cff7120ff71248b59048b0190e8c6090000b8dc887541ff552cb801000000b80100000050505089e3b80100000083c800e8b638000050505089e3b80100000090e8a638000050505089e3b80100000090e89638000050505089e3b80100000090e88638000050505089e3b80100000090e8763800008b45008d40f03b45087303ff5520894500c740fc03000000bf300c774189388b7424388970088b9c249c0000008958048b55008d52f03b55087303ff5520895500c742fc03000000b9780c7741890a8b7c242c897a088bb424980000008972048b5d008d5bf03b5d087303ff5520895d00c743fc03000000b9c00c7741890b8b7c2420897b088bb424900000008973048b4d008d49f03b4d087303ff5520894d00c741fc03000000bf080d774189398b7424148971088bbc24940000008979048b75008d76f03b75087303ff5520897500c746fc03000000bf500d7741893e8b7c2408897e088bbc248c000000897e048b7d008d7fcc3b7d087303ff5520897d00c747fc0c000000895f2c8977288b74241c8977248957208b5c2404895f1c894718894f148b5424708957108b4c2428894f0c8b4424348947088b7424108977048b5c2478891f578b9c24d00000008b442468ba980d774183c800e83abb01008b9424cc000000ff7208ff720cff7210ff7214ff7218ff721cff7220ff72248b5a048b0283c800e8fe35000083f8017407b901000000eb1aff3424ffb424d00000008b5c24208b44243890e8bed7070089c15050bb01000000b80f000000ff15009d04088b8c24bc00000089c723f9f7c7010000007503ff553889c72bf98d7f0170f457bb01000000b811000000ff15009d04088bb424bc00000089c323def6c3017503ff553889c32bde8d5b0170f48d542404891a8d4c24048b04248941048b7c24088b5c240489fa23d3f6c2017503ff55388d57ff03d370f68b8c24d800000089d7ff7108ff710cff7110ff7114ff7118ff711cff7120ff71248b59048b010bc0e82235000083f8017430ff7108ff710cff7110ff7114ff7118ff711cff7120ff71248b59048b0190e8d2060000b860377d41ff552cbb01000000bb010000005789cb8b4424740bc0e8d6e30700505050bb01000000b80f00000090ff15009d04088bb424d000000089c323def6c3017503ff553889c32bde8d5b0170f453bb01000000b81100000083c800ff15009d04088b9424d000000089c123caf6c1017503ff553889c12bca8d490170f48d44240889088d7c24088b34248977048b5c240c8b4c240889d823c1a8017503ff55388d43ff03c170f68bbc24ec00000089c6ff7708ff770cff7710ff7714ff7718ff771cff7720ff77248b5f048b0783c800e82234000083f8017430ff7708ff770cff7710ff7714ff7718ff771cff7720ff77248b5f048b0790e8d2050000b8dcdf7e41ff552cbb01000000bb010000008b9c24dc00000083fb01747050505050505050568d4c2404518b9c2408010000b89b000000e8968effff8b45008d40e03b45087303ff5520894500c740fc070000008b7c240489388b7424088970048b5c240c8958088b54241089500c8b4c24148948108b4c24188948148b7c241c89781850b81814754189faeb05e92900000083c800ff128b1c248b442428ba0c03754183c800e8deadffffb8010000008b54241090ff1289c2eb0eba010000005050505050505056508b9c241c0100008b442428ba14ea784190e8ba940300505050bb01000000b80f00000090ff15009d04088b94240401000089c123caf6c1017503ff553889c12bca8d490170f451bb01000000b81100000083c800ff15009d04088bbc240401000089c623f7f7c6010000007503ff553889c62bf78d760170f48d5c240889338d5424088b0c24894a048b44240c8b7c240889c623f7f7c6010000007503ff55388d70ff03f770f68b45008d40d43b45087303ff5520894500c740fc0a000000bb0ce07e4189188b9424f80000008950248b4c24048948208bbc24b800000089781c8b9c24140100008958188b9424180100008950148b8c24940000008948108b7c244489780c8b5c241489580889700481c428010000c2040083c800|@5818,63|20,0,@674 29,0,@599 34,1,@601 40,0,@710 49,0,@599 54,1,@601 60,0,@717 69,0,@599 74,1,@601 80,0,@724 89,0,@599 94,1,@601 100,0,@731 109,0,@599 114,1,@601 146,0,0 151,0,7 158,0,I94 164,0,0 169,0,8 178,0,I94 184,0,0 189,0,9 198,0,I94 204,0,0 209,0,13 218,0,I94 298,1,@738 331,0,@740 338,1,@743 352,0,@745 358,1,@747 367,0,0 410,1,@743 454,1,@929 494,1,@738 499,0,@931 507,0,0 512,0,@933 528,0,0 534,1,@937 563,0,@949 630,0,@951 638,1,@953 646,0,0 651,0,7 658,0,I94 689,0,0 694,0,8 702,0,I94 807,0,77 814,1,@255 892,0,@326 914,0,10000 926,1,@1563 931,0,0 947,0,0 998,1,@929 1038,1,@738 1043,0,@931 1051,0,0 1056,0,0 1066,0,0 1074,1,@937 1084,0,0 1090,1,@937 1100,0,0 1106,1,@937 1116,0,0 1122,1,@937 1132,0,0 1138,1,@937 1167,0,@1739 1215,0,@1740 1263,0,@1741 1311,0,@1742 1359,0,@1743 1482,0,@1744 1490,1,@1745 1534,1,@929 1544,0,0 1570,1,@4883 1579,0,0 1584,0,7 1590,0,I94 1627,0,0 1632,0,8 1638,0,I94 1754,1,@929 1794,1,@738 1799,0,@4913 1807,0,0 1812,0,0 1826,1,@4915 1834,0,0 1839,0,7 1846,0,I94 1880,0,0 1885,0,8 1894,0,I94 2010,1,@929 2050,1,@738 2055,0,@5715 2063,0,0 2068,0,0 2105,0,77 2110,1,@255 2188,0,@326 2214,0,@313 2222,1,@315 2227,0,0 2243,0,0 2268,0,@2858 2274,1,@2860 2282,0,0 2287,0,7 2294,0,I94 2328,0,0 2333,0,8 2342,0,I94 2448,0,@5717 710:O3|@712,@714,@711 711:O2|@716,@7352 712:O2|@713,@7352 713:C2,28|8b388b72043bfe750cb803000000c3b801000000c3b801000000c390|@593,53|10,0,1 16,0,0 22,0,0 714:O2|@715,@7352 715:C2,44|89c78b45008d40f03b45087303ff5520894500c740fc03000000897808c740048b0000008b7a048938c30bc0|@593,37|32,0,69 716:C2,36|8b388b72043bfe750a8b4008c3b801000000c3b8503d754183c800ff552cb80100000090|@593,53|14,0,0 20,0,@597 31,0,0 717:O3|@719,@721,@718 718:O2|@723,@7348 719:O2|@720,@7348 720:C2,28|8b388b72043bfe750cb803000000c3b801000000c3b801000000c390|@593,53|10,0,1 16,0,0 22,0,0 721:O2|@722,@7348 722:C2,44|89c78b45008d40f03b45087303ff5520894500c740fc03000000897808c740048b0000008b7a048938c30bc0|@593,37|32,0,69 723:C2,36|8b388b72043bfe750a8b4008c3b801000000c3b8503d754183c800ff552cb80100000090|@593,53|14,0,0 20,0,@597 31,0,0 724:O3|@726,@728,@725 725:O2|@730,@7347 726:O2|@727,@7347 727:C2,28|8b388b72043bfe750cb803000000c3b801000000c3b801000000c390|@593,53|10,0,1 16,0,0 22,0,0 728:O2|@729,@7347 729:C2,44|89c78b45008d40f03b45087303ff5520894500c740fc03000000897808c740048b0000008b7a048938c30bc0|@593,37|32,0,69 730:C2,36|8b388b72043bfe750a8b4008c3b801000000c3b8503d754183c800ff552cb80100000090|@593,53|14,0,0 20,0,@597 31,0,0 731:O3|@733,@735,@732 732:O2|@737,@7353 733:O2|@734,@7353 734:C2,28|8b388b72043bfe750cb803000000c3b801000000c3b801000000c390|@593,53|10,0,1 16,0,0 22,0,0 735:O2|@736,@7353 736:C2,44|89c78b45008d40f03b45087303ff5520894500c740fc03000000897808c740048b0000008b7a048938c30bc0|@593,37|32,0,69 737:C2,36|8b388b72043bfe750a8b4008c3b801000000c3b8503d754183c800ff552cb80100000090|@593,53|14,0,0 20,0,@597 31,0,0 738:C2,20|8b5c241cc70301000000b801000000c220000bc0|@739,9|6,0,0 11,0,0 739:S21|4c45585f28292e72657365744c6578616e28313029 740:O1|@741 741:C2,20|83f8737506b803000000c3b801000000c383c800|@742,1|6,0,1 12,0,0 742:S15|496e745365742e6d6b283129283129 743:C2,12|3b650c7303ff552489daff22|@744,63| 744:S19|53594d5f53455428292e696e73696465283229 745:O2|@747,@746 746:O4|@760,@807,@808,@759 747:C2,128|3b650c7303ff55248b78188b3781fe89000000740cc70789000000b801000000c38b70088b1e83fb0175475250568b4810b80100000089caff128b7c24046a03ff37ff7704ff7708ff770cff7710ff7714ff7718ff771cff7720ff772489c3b80c5c754190e8ba000000b8a45e7541ff552cc706890000008b5204ff2283c800|@758,63|23,0,68 28,0,0 50,0,0 96,0,@748 102,1,@752 107,0,@756 116,0,68 748:O1|@749 749:C2,20|3b650c7303ff55248b780cb8445c754189faff22|@751,63|12,0,@750 750:S34|756e657870656374656420656e64206f662066696c6520656e636f756e7465726564 751:S25|4c45585f28292e6572726f724d657373616765283329283129 752:C2,364|3b650c7303ff55248b7d008d7ff83b7d087303ff5520897d00c747fc01000040c707010000008b75008d76f43b75087303ff5520897500c746fc02000000ba1c5e75418916897e04505050505050505053578d4c240c5189f3b89b00000083c800e87286ffff8b45008d40e03b45087303ff5520894500c740fc070000008b7c240c89388b7424108970048b5c24148958088b54241889500c8b4c241c8948108b4c24208948148b7c24248978188b74245483fe01740a8b542444c7020300000050b81814754189fa83c800ff128b04248b54240c83c800ff12b8010000008b54241890ff128b5c24048b13b90100000083fa01750489c8eb338b45008d40f43b45087303ff5520894500c740fc020000008948048b3a893889c18b52043b650c7303ff5524ebc9b801000000e82abdffff89c78b45008d40f03b45087303ff5520894500c740fc030000008b7424088970088b5c245889580489388b5424348b4c242c83c45c51ff220bc0|@755,63|34,0,0 63,0,@753 90,0,77 98,1,@255 189,0,1 195,0,@326 219,0,0 237,0,0 297,0,0 302,1,@347 753:C2,44|8b7a048b378b5d008d5bf43b5d087303ff5520895d00c743fc020000008973048903891fb801000000c30bc0|@754,61|37,0,0 754:S27|4c45585f28292e657750726f6328313329707072696e742d283129 755:S17|4c45585f28292e657750726f6328313329 756:O3|@7320,@224,@757 757:S11|656e64206f662066696c65 758:S18|4c45585f28292e696e73796d626f6c283129 759:O2|@915,@7365 760:C2,1544|8d7c24b03b7d0c7303ff55285250ff30ff7004ff700883c800e80606000081f8fd00000075608b7c240cff7708ff770cff7710ff7714ff7718ff771cff7720ff77248b5f048b070bc0e8420600008b7424088b1e83fb61723283fb73772d8b44240c83c800e8d20600008b5424048b0a89cbb8fd0000000bc0e84ab3ffff8b7c24048907eb6fe9190000008b542410ff74240c8b5a08b8fd0000008b52040bc0ff12eb7083f84775708b7c240cff7708ff770cff7710ff7714ff7718ff771cff7720ff77248b5f048b0783c800e8be0500008b7424088b1e83fb45751d8b5424108b44240c8b520cff128b0c24c70187000000eb60e9e60400008b542410ff74240c8b5a08b8470000008b520483c800ff12eb62e9c704000083f845751b8b7c24108b44240c8b570c83c800ff128b3424c7067f000000eb7383f877751c8b3c24c707730000008b74240c8b1ec70341000000eb5ce98604000083f859751c8b3c24c707710000008b74240c8b1ec70341000000eb5ee96504000083f85175598b7c240cff7708ff770cff7710ff7714ff7718ff771cff7720ff77248b5f048b07e8ea0400008b742408eb0ae92f040000e92a0400008b1e83fb55740b8b1424c70269000000eb6b8b44240c90e83e100000eb64e90704000083f85375178b3c24c7076b0000008b74240c8b1ec70341000000eb6781f8b700000075178b3c24c7076d0000008b74240c8b1ec70341000000eb6c81f8bb00000075218b3c24c7076f0000008b74240c8b1ec70341000000eb71e9a8030000e9a303000081f8bf000000751c8b3c24c707670000008b74240c8b1ec70341000000eb70e97f03000081f8f7000000751c8b3c24c707750000008b74240c8b1ec70341000000eb74e95b03000081f8fb000000751c8b3c24c707770000008b74240c8b1ec70341000000eb70e93703000083f85d756b8b7c240cff7708ff770cff7710ff7714ff7718ff771cff7720ff7724eb05e90f0300008b5f048b0783c800e8b20300008b7424088b1e83fb5d74708b54240cb801000000eb05e9e70200008b5210ff128b4c24088b395089fbb81874754190e8b6b0ffffeb0ae9c7020000e92a0100008b75008d76f43b75087303ff5520897500c746fc02000000bb30747541891e8946048b5424106a03ff32ff7204ff7208ff720cff7210ff7214eb05e91a000000ff7218ff721cff7220ff72248b5c242c89f090e82efaffffeb708b54240cff7208ff720cff7210ff7214ff7218ff721cff7220ff72248b5a048b02e8f20200008b4c24088b0183f85d74708b7c240cb8010000008b571083c800ff128b7424088b1e50b86074754183c800e8faafffff8b55008d52f43b55087303ff5520895500c742fc02000000eb05e9f0010000b97c747541890a8942048b4424106a03ff30ff7004ff7008ff700cff7010ff7014ff7018ff701cff7020eb05e912000000ff70248b5c242c89d00bc0e876f9ffffeb698b3c24c7077b0000008b74240c8b1ec7034100000050eb6d83f809750b8b3c24c70701000000eb6283f861721383f873770e8b44240c83c800e8ce020000eb6681f883000000720a81f8b50000007702eb1c81f8c3000000720881f8f5000000760c83f84f7407eb2be93f0100008b7c2410ff74240cbbac747541b8409704088b5704eb0ae923010000e91d01000090ff12eb6e50bf2900000083ff01750cbe01000000eb3ee9010100008d5ffe8d5308b94475754189d0d1e80fb604018d4400018b34243bc67507be03000000eb148d5ffe89df3b650c7303ff5524ebbbbe0100000083fe0174238b5c2414ff7424108b53088b4b0489d3b84097040889caeb05e9a500000090ff12eb718b04240bc0e8b6e1ffff8b5c241050b8010000008b531090ff12508b5c2404b86075754190e862aeffffbb450000000bc0e856aeffff8b55008d52f43b55087303ff5520895500c742fc02000000b97c757541890a8942048b4424186a03ff30ff7004ff7008ff700cff7010ff7014eb05e927000000ff7018ff701cff7020ff70248b5c242c89d090e8daf7ffff8b7c24188b37c7064100000083c40883c4045083c4048b1c248b1381fa8900000075108b44240c8b54241083c414e903faffffb80100000083c414c30bc0|@806,63|26,1,@761 74,1,@762 102,1,@765 115,0,126 122,1,@323 151,0,126 206,1,@762 239,0,67 262,0,35 307,0,63 323,0,57 335,0,32 356,0,56 368,0,32 418,1,@762 450,0,52 462,1,@788 483,0,53 495,0,32 514,0,54 526,0,32 545,0,55 557,0,32 586,0,51 598,0,32 622,0,58 634,0,32 658,0,59 670,0,32 730,1,@762 750,0,0 776,0,@796 782,1,@323 823,0,@797 882,1,@752 922,1,@762 942,0,0 962,0,@798 970,1,@323 1006,0,@799 1066,1,@752 1077,0,61 1089,0,32 1106,0,0 1130,1,@765 1191,0,@800 1196,0,I48 1222,0,20 1232,0,0 1250,0,@803 1274,0,1 1296,0,0 1322,0,I48 1346,1,@685 1356,0,0 1372,0,@804 1378,1,@323 1383,0,34 1390,1,@323 1419,0,@805 1478,1,@752 1490,0,32 1534,0,0 761:C2,80|3b650c7303ff55248b388b3783fe13720783fe1b7702eb0783fe417402eb2b50ff7008ff700cff7010ff7014ff7018ff701cff7020ff70248b58048b00e82a0000008b042483c404ebb689f0c383c800|@764,63|62,1,@762 762:C2,84|3b650c7303ff55248b5c240c8b1383fa01753050b8010000008b54241883c800ff12f7c00100000075048b08eb05b9090000008b04248908b80100000083c404c220008b4a04890b8b3a8938b801000000c22000|@763,63|21,0,0 47,0,4 57,0,0 77,0,0 763:S17|4c45585f28292e6e657874436828313029 764:S24|4c45585f28292e736b697057686974655370616365283129 765:C2,1804|3b650c7303ff55248b7808c7078100000050ff30ff700457ff701c50bb546d7541b84097040883c800e8520700008b74240889068b5c240c8b1381faef00000075718b0ebb6100000089c890ff154094040883f80174618b442404c700850000008b7c2410ff7708ff770cff7710ff7714ff7718ff771cff7720ff77248b5f048b0783c800e8cafeffff8b74240c8b1e81fbf100000075718b542410ff7208ff720cff7210ff7214ff7218ff721cff7220eb0ae9f8010000e9f3010000ff72248b5a048b02e88afeffff8b4c240c8b0183f861720783f8737702eb2281f8c3000000720a81f8cd0000007702eb1081f883000000723381f88d000000772bff742410bb006f7541eb05e9c3000000b8886f75410bc0e8660600008b7c24088907b80100000083c414c38b7c2410b8010000008b571083c800ff128b7424088b1e50b8946f754183c800e83eabffff8b5424108b0a89cb83c800e82eabffff8b7d008d7ff43b7d087303ff5520897d00c747fc02000000beb86f754189378947048b5c24148b542418c7442418030000008b0b894c24148b4304894424108b73088974240c8b4b0c894c24088b4310894424048b73148b0c24893424ff7318ff731cff7320ff732489cb89f852e997f4ffff8b1683fa61722983fa737724ff742410bb546d7541b8e86f75410bc0e88e0500008b4c24088901b80100000083c414c38b4c2410b8010000008b511083c800ff128b7c24088b375089f3b8946f754190e866aaffff8b5c24108b1389d383c800e856aaffff8b4d008d49f43b4d087303ff5520894d00c741fc02000000bff46f754189398941048b7424148b5c2418c7442418030000008b16895424148b4604894424108b7e08897c240c8b560c895424088b4610894424048b7e148b1424893c24ff7618ff761cff7620ff76245389d389c88b0c2483c40451e9b8f3ffff8b4c240c8b0181f8f100000075688b7c24088b37bb6100000089f090ff154094040883f80174748b5c2410ff7308ff730cff7310ff7314ff7318ff731cff7320ff73248b138b4b0489cb89d090e852fcffff8b44240c8b3883ff61720783ff737702eb2781ffc3000000720f81ffcd0000007707eb15e9e200000081ff83000000723281ff8d000000772aff742410bb006f7541b824707541eb05e9bd00000090e82a0400008b7424088906b80100000083c414c38b742410b8010000008b561083c800ff128b5c24088b135089d3b83070754190e802a9ffff8b4c24108b3989fb83c800e8f2a8ffff8b75008d76f43b75087303ff5520897500c746fc02000000bb54707541891e8946048b5424148b4c2418c7442418030000008b02894424148b7a04897c24108b5a08895c240c8b420c894424088b7a10897c24048b5a148b0424891c24ff7218ff721cff7220ff722489c389f051e95bf2ffff8b7c240c8b3783fe5d7502eb168b1f81fb8b0000007502eb0a8b1781facb00000075708b1f83fb5d756e8b542404c702830000008b4c24088b01bb5d00000090e83aa8ffff8b7c240889078b742410ff7608ff760cff7610ff7614ff7618ff761cff7620ff76248b5e048b06e8d6faffff8b5c240c8b1383fa61720583fa7376728b4c2410b8010000008b51100bc0ff12eb0ae95c020000e99d0000008b7c24088b375089f3b88470754190e8cea7ffff8b5c24108b1389d383c800e8bea7ffff8b4d008d49f43b4d087303ff5520894d00c741fc02000000bfa470754189398941048b7424146a03ff36ff7604ff7608eb05e923000000ff760cff7610ff7614ff7618ff761cff7620ff76248b5c242c89c890e842f1ffffeb208b4c24088b01ff742410bb546d75410bc0e8420200008b7c2408890750eb01508b5424108b0a81f98b0000007502eb0c8b0281f8cb0000007402eb708b028b7c241450ff7708ff770cff7710ff7714ff7718ff771cff7720ff77248b5f048b0790e8c6f9ffff8b7424148b1e81fbfd00000075708b542418ff7208ff720cff7210ff7214ff7218ff721cff7220ff72248b5a048b02e892f9ffff8b4c24148b0183f861725383f873774eeb05e91f0100008b7c240cc707830000008b7424108b1e89dabbd470754189d083c800e892a6ffffff742418bb546d75410bc0e876010000eb05e9670000008b4c24108901b80100000083c41cc38b398b75008d76f43b75087303ff5520897500c746fc02000000c7460401000000893e8b5d008d5bf43b5d087303ff5520895d00c743fc02000000897304c703fd0000008b542408891a8b04248901b80100000083c41cc38b1683fa61724283fa73773d8b4c240cc701830000008b4424108b38bb8b00000089f80bc0e8eaa5ffffff742418bb546d75410bc0e8ce0000008b7424108906b80100000083c41cc38b0e8b45008d40f43b45087303ff5520894500c740fc02000000c740040100000089088b7c240889078b1c24891eb80100000083c41cc3b80100000083c418c3b80100000083c414c30bc0|@787,63|13,0,64 29,0,@766 34,0,I48 42,1,@769 69,0,48 78,0,I24 93,0,66 134,1,@762 198,1,@762 259,0,@773 271,0,@776 278,1,@769 289,0,0 302,0,0 322,0,@777 330,1,@323 346,1,@323 375,0,@778 396,0,1 461,1,@752 482,0,@766 487,0,@779 494,1,@769 505,0,0 518,0,0 540,0,@777 546,1,@323 562,1,@323 591,0,@780 612,0,1 684,1,@752 709,0,48 718,0,I24 766,1,@762 832,0,@773 837,0,@781 850,1,@769 861,0,0 874,0,0 896,0,@782 902,1,@323 918,1,@323 947,0,@783 968,0,1 1033,1,@752 1085,0,65 1096,0,46 1102,1,@323 1146,1,@762 1171,0,0 1204,0,@784 1210,1,@323 1226,1,@323 1255,0,@785 1314,1,@752 1331,0,@766 1338,1,@769 1418,1,@762 1470,1,@762 1503,0,65 1516,0,@786 1526,1,@323 1535,0,@766 1542,1,@769 1560,0,0 1597,0,0 1632,0,126 1648,0,0 1674,0,65 1685,0,69 1694,1,@323 1703,0,@766 1710,1,@769 1721,0,0 1758,0,0 1776,0,0 1785,0,0 1794,0,0 766:O1|@767 767:C2,28|83f861721183f8737706b803000000c3b801000000c3b801000000c3|@768,1|11,0,1 17,0,0 23,0,0 768:S15|436861722e69734469676974283129 769:C2,80|3b650c7303ff55248b7c240453ff3750b8010000008d54240ce84e0000008b75008d76f43b75087303ff5520897500c746fc020000008946048b1c24891e89f08b54240c83c41452e9f7acffff83c800|@772,63|17,0,0 26,1,@770 73,1,@347 770:C2,140|3b650c7303ff55248b42f88b38525789f88b52fcff1283f80174658b7424048b5e04ff7308ff730cff7310ff7314ff7318ff731cff7320ff73248b138b4b0489cb89d00bc0e81ef7ffffb8010000008b5424040bc0e8a6ffffff8b7d008d7ff43b7d087303ff5520897d00c747fc020000008947048b3424893789f883c408c3b80100000083c408c383c800|@771,63|70,1,@762 75,0,0 129,0,0 771:S26|4c45585f28292e7265616443686172732833296c6f6f70283129 772:S19|4c45585f28292e726561644368617273283329 773:O1|@774 774:C2,72|83f861720b83f8737706b803000000c381f8c3000000720e81f8cd0000007706b803000000c381f883000000721481f88d0000007706b803000000c3b801000000c3b801000000c3|@775,1|11,0,1 33,0,1 55,0,1 61,0,0 67,0,0 775:S18|436861722e69734865784469676974283129 776:S3|307778 777:S25|6d616c666f726d656420776f726420636f6e7374616e743a20 778:C2,20|3b650c7303ff55248b780c8b420489faff220bc0|@751,63| 779:S2|3077 780:C2,20|3b650c7303ff55248b780c8b420489faff220bc0|@751,63| 781:S2|3078 782:S28|6d616c666f726d656420696e746567657220636f6e7374616e743a20 783:C2,20|3b650c7303ff55248b780c8b420489faff220bc0|@751,63| 784:S23|6d616c666f726d6564207265616c206e756d6265723a20 785:C2,20|3b650c7303ff55248b780c8b420489faff220bc0|@751,63| 786:S2|457e 787:S21|4c45585f28292e70617273654e756d626572283129 788:C2,44|3b650c7303ff5524ff701450ff30b8010000008d54240c0bc0e82a0000008b3c248907b80100000083c40cc3|@795,63|15,0,0 26,1,@789 36,0,0 789:C2,76|3b650c7303ff55248b42f8528b7810b80100000089fa0bc0ff12508b742404b8010000008b56fc90ff12f7c00100000075048b00eb05b8090000008d5424080bc0e82200000083c408c30bc0|@794,63|16,0,0 32,0,0 55,0,4 66,1,@790 790:C2,344|3b650c7303ff552483f80975708b7afc8b77f8525056b8010000008b56100bc0ff128b5c2408508b53f8bbffffffff89d0e8daa4ffff89c3b824737541e8c6a0ffffbb530000000bc0e8baa0ffff8b4d008d49f43b4d087303ff5520894d00c741fc02000000bf5c73754189398941048b7424046a03ff36ff7604eb05e92c000000ff7608ff760cff7610ff7614ff7618ff761cff7620ff76248b5c242c89c890e83eeaffff8b44240883c410c38b7afc5250b8010000008b57fc90ff12f7c00100000075048b30eb05be090000008b1c2483fb55753c83fe5375298b5424048b4afcb8010000008b51fc90ff12f7c00100000075068b0083c408c3b80900000083c408c389f08b54240483c408e9edfeffff83fb51753083fe55751db8010000008b5424048b52fce86afeffff8b54240483c408e9c6feffff89f08b54240483c408e9b8feffff89f08b54240483c408e9aafeffff0bc0|@793,63|23,0,0 43,0,-1 50,1,@336 57,0,@791 62,1,@323 67,0,41 74,1,@323 103,0,@792 162,1,@752 180,0,0 203,0,4 228,0,0 253,0,4 286,0,0 298,1,@789 791:S45|656e64206f662066696c6520666f756e6420696e20636f6d6d656e742028737461727473206174206c696e6520 792:C2,20|3b650c7303ff55248b780c8b420489faff220bc0|@751,63| 793:S54|4c45585f28292e7061727365436f6d6d656e74283129736b6970436f6d6d656e74283129736b6970436f6d6d656e74426f6479283129 794:S36|4c45585f28292e7061727365436f6d6d656e74283129736b6970436f6d6d656e74283129 795:S22|4c45585f28292e7061727365436f6d6d656e74283129 796:S16|756e6b6e6f776e2073796d626f6c202e 797:C2,20|3b650c7303ff55248b780c8b420489faff220bc0|@751,63| 798:S17|756e6b6e6f776e2073796d626f6c202e2e 799:C2,20|3b650c7303ff55248b780c8b420489faff220bc0|@751,63| 800:O1|@801 801:C2,84|81f883000000720a81f8b50000007702eb1c81f8c3000000720881f8f5000000760c83f861720d83f8737602eb06b803000000c383f84f7506b803000000c381f8bf0000007506b803000000c3b801000000c390|@802,1|47,0,1 58,0,1 72,0,1 78,0,0 802:S24|4c45585f28292e6973416c7068614e756d65726963283129 803:S20|3a3d3c3e2b2a215e2f7c26257e2d3f60405c2423 804:S19|756e6b6e6f776e206368617261637465722022 805:C2,20|3b650c7303ff55248b780c8b420489faff220bc0|@751,63| 806:S20|4c45585f28292e7061727365546f6b656e283129 807:O2|@809,@808 808:O1|@913 809:C2,672|3b650c7303ff55248b7c240452ff37ff7704ff77085783c800e8b2f7ffff8b7424088b1e83fb5d75708b54241450ff7208ff720cff7210ff7214ff7218ff721cff7220ff72248b5a048b020bc0e852efffff8b4c240c8b0181f883000000720a81f8b50000007702eb1281f8c3000000723881f8f50000007602eb2ebb5d0000008b042490e8529cffff8b7c2418897c2418bbac747541eb05e93f0100008b54241083c414e956ffffff50bf2900000083ff017507be01000000eb398d5ffe8d5308b94475754189d0d1e80fb604018d4400018b34243bc67507be03000000eb148d5ffe89df3b650c7303ff5524ebc0be0100000083fe01742f8b5c2414ff7304bb5d0000008b44240883c800e8ca9bffff8b542420895424208b1c248b54241883c41ce9d7feffff8b5c241cb8010000008b531083c800ff12508b5c2408b89878754190e8929bffffbb5d0000000bc0e8869bffff8b5c240483c800e87a9bffff8b55008d52f43b55087303ff5520895500c742fc02000000b9b4787541890a8942048b442420c7442420030000008b388b74241c897c241c8b5804895c24188b4808894c24148b780c897c24108b5810895c240c8b4814894c24088b7818897c24048b581c8b0c24891c24ff7020ff702489cb89d056e9dbe4ffff8b5424048902f7c0010000007407b903000000eb068b088d4c0901f6c1017503ff553883f9017e60f7c0010000007407bf03000000eb068b388d7c3f01f7c7010000007503ff553883ff017f1189c3b824ae74410bc0ff552cbe01000000f7c001000000740489c6eb080fb670048d74360150bb4f00000089f090ff154094040883f801740ceb0350eb07be7d000000eb208b1c24b8e47875410bc0e866050000f7c00100000075048b30eb05be030000008b4424048930b80100000083c414c20400|@912,63|26,1,@769 78,1,@762 125,0,46 134,1,@323 147,0,@800 172,0,20 182,0,0 195,0,@803 219,0,1 241,0,0 258,0,46 270,1,@323 302,0,0 320,0,@810 326,1,@323 331,0,46 338,1,@323 350,1,@323 379,0,@811 396,0,1 473,1,@752 492,0,1 526,0,1 557,0,@51 567,0,0 593,0,39 602,0,I24 617,0,62 627,0,@812 634,1,@907 651,0,1 662,0,0 810:S20|696e76616c6964206964656e7469666572202d20 811:C2,20|3b650c7303ff55248b780c8b420489faff220bc0|@751,63| 812:O4|-1,@7362,@7363,@7361 813:O2|@564,272 814:O2|@906,14 815:O2|@816,28 816:S4|7468656e 817:O2|@818,15 818:S2|6966 819:O2|@820,22 820:S2|6f66 821:O2|@822,37 822:S7|73686172696e67 823:O2|@824,35 824:S6|737472756374 825:O2|@826,29 826:S4|74797065 827:O2|@828,33 828:S9|737472756374757265 829:O2|35,43 830:O2|42,48 831:O2|@832,31 832:S4|77697468 833:O2|@834,24 834:S4|6f70656e 835:O2|@836,13 836:S3|66756e 837:O2|@838,3 838:S3|616e64 839:O2|@840,12 840:S2|666e 841:O2|58,47 842:O2|@843,16 843:S2|696e 844:O2|@845,10 845:S3|656e64 846:O2|61,45 847:O2|@848,8 848:S2|646f 849:O2|@850,9 850:S4|656c7365 851:O2|@852,40 852:S6|657174797065 853:O2|@854,17 854:S5|696e666978 855:O2|@856,7 856:S8|6461746174797065 857:O2|@858,23 858:S2|6f70 859:O2|@860,5 860:S2|6173 861:O2|@862,2 862:S7|61627374797065 863:O2|@864,34 864:S9|7369676e6174757265 865:O2|@866,18 866:S6|696e66697872 867:O2|@868,39 868:S8|7769746874797065 869:O2|@870,30 870:S3|76616c 871:O2|@872,26 872:S5|7261697365 873:O2|@874,21 874:S6|6e6f6e666978 875:O2|124,44 876:O2|@877,38 877:S7|66756e63746f72 878:O2|@879,11 879:S9|657863657074696f6e 880:O2|@881,42 881:S5|7768657265 882:O2|@883,36 883:S3|736967 884:O2|@885,25 885:S6|6f72656c7365 886:O2|@887,20 887:S5|6c6f63616c 888:O2|@889,49 889:S2|2d3e 890:O2|@891,32 891:S5|7768696c65 892:O2|@893,50 893:S2|3a3e 894:O2|@895,46 895:S2|3d3e 896:O2|@897,27 897:S3|726563 898:O2|@899,19 899:S3|6c6574 900:O2|@901,41 901:S7|696e636c756465 902:O2|@903,4 903:S7|616e64616c736f 904:O2|@905,6 905:S4|63617365 906:S6|68616e646c65 907:C2,84|3b650c7303ff55248b3883ffff75238b70048b168b480c8b39575389d883c800ff128d54240883c800e84200000083c408c3ff7008538b700489d889f283c800ff128d54240883c800e82601000083c408c30bc0|@911,63|42,1,@908 74,1,@910 908:C2,196|3b650c7303ff5524a8017503ff553883f8017d02eb168b7afc8b375023c6a801587503ff55383bc67d02eb0f89c6b824ae7441ff552cbf01000000a8017503ff553889c683c60270f68b5c77fe89df83ff017506b801000000c35250ff77048b1f8b42f8ff154094040883f80174218b45008d40f83b45087303ff5520894500c740fc010000008b1424891083c40cc38b4c240483f901750d8b4424088b78fc8b3789f2eb0289caf6c2017503ff553889d083e80270f68b54240883c40ce93dffffff90|@909,63|47,0,@51 55,0,0 85,0,0 102,0,I24 909:S27|486173685461626c652e6861736853756228322966696e64283129 910:C2,208|3b650c7303ff5524a8017503ff553883f8017d02eb218b7afc8b77fc81e6ffffff008d7436015023c6a801587503ff55383bc67d02eb1089c6b824ae744190ff552cbf010000008b7447fe89f783ff017506b801000000c35250ff77048b1f8b42f80bc0ff154094040883f80174218b45008d40f83b45087303ff5520894500c740fc010000008b1c24891883c40cc38b54240483fa0175188b4c24088b41fc8b78fc81e7ffffff008d7c3f0189fbeb0289d3f6c3017503ff553889d883e80270f68b54240883c40ce932ffffff0bc0|@909,63|58,0,@51 67,0,0 83,0,0 102,0,I24 911:S20|486173685461626c652e68617368537562283229 912:S20|4c45585f28292e70617273654964656e74283329 913:C2,84|50bf2900000083ff017509b80100000083c404c38d47fe8d7008b84475754189f3d1eb0fb61c188d5c1b018b04243bd87509b80300000083c404c38d77fe89f73b650c7303ff5524ebbcb80100000083c404c390|@914,57|2,0,20 12,0,0 27,0,@803 51,0,1 75,0,0 914:S27|436861722e636f6e7461696e732831296d61746368283129283129 915:C2,320|3b650c7303ff55245052ff30ff7004ff7008ff700cff7010ff7014ff7018ff701cff7020ff70248b5c24208b00e862e4ffffff7504bfa2817541578b742410ff7604896504b8010000008d54241c83c800e806010000bb0100000083f801750489d8eb338b55008d52f43b55087303ff5520895500c742fc02000000895a048b08890a89d38b40043b650c7303ff5524ebc9b8010000000bc0e8c297ffff8b54240c8902b801000000ff7424088f450483c41cc30bc08b4c24088b388b71043bfe75638b5c240c50b8010000008b5310ff128b5424108b4c2414c7442414030000008b3a897c24108b72048974240c8b5a088b7c2408895c24088b720c897424048b5a108b3424891c24ff7214ff7218ff721cff7220ff722489c3b81088754151e982daffffe90b00000089c3b80100000083c410c390ff552cb80100000090|@928,63|46,1,@762 54,0,$915+182 70,0,0 82,1,@916 87,0,0 147,0,0 154,1,@341 165,0,0 201,0,0 222,0,1 284,0,@925 290,1,@752 302,0,0 315,0,0 916:C2,1184|3b650c7303ff55248b7af48b3783fe45750c8b72fc8b1ec70341000000c383fe1575688b5afc52ff7308ff730cff7310ff7314ff7318ff731cff7320ff73248b0b8b430489c389c890e8eae2ffff8b3c248b77f88b5d008d5bf03b5d087303ff5520895d00c743fc03000000c7430801000000ba048775418953048b4e04890b89d890ff552cb80100000081feb9000000756a8b5afc5250ff7308ff730cff7310ff7314ff7318ff731cff7320ff73248b0b8b730489f389c8e87ae2ffff8b5c24048b53f48b0a8b43fc51ff7008ff700cff7010ff7014ff7018ff701cff7020ff70248b58048b0090e84ae2ffff8b3c2483ff13720c83ff1b7707eb0ce94b02000083ff417402eb738b7424088b46fc90e8b6e1ffff81f8b90000007502eb618b5c24088b53fc52b8010000008b5210ff128b4c240c8b79f48b3750bbe445754189f00bc0e8c6c5ffff89c3b818877541e81a8fffffbb388775410bc0e80e8fffff8b5d008d5bf43b5d087303ff5520895d00c743fc02000000eb0ae9c9000000e989000000ba4c87754189138943048b4c24046a03ff31ff7104ff7108ff710cff7110ff7114ff7118ff711cff7120ff712489d88b5c242ce88ed8ffff8b7c24108b77f48b1e81fbb9000000743d8b1683fa4574368b0e83f909742f8b47fcff7008ff700cff7010ff7014ff7018ff701cff7020ff70248b58048b00e836e1ffff3b650c7303ff5524ebb283c4088b5424088b4afcff7108ff710cff7110ff7114ff7118ff711cff7120ff71248b59048b010bc0e8fee0ffff8b4424048b54240883c40ce9b6fdffff81ffbd00000075728b7424088b5ef48b138b4efc52ff7108ff710cff7110ff7114ff7118ff711cff7120ff71248b59048b0190e8b6e0ffff8b45008d40f43b45087303ff5520894500c740fc020000008b7c2408897804c700b90000008b75008d76f43b75087303ff5520897500c746fc02000000894604eb05e934000000c706bd0000008b5d008d5bf43b5d087303ff5520895d00c743fc020000008973048b1424891389d88b54240c83c410e903fdffff8b75008d76f43b75087303ff5520897500c746fc020000008b5c2404895e04c706b90000008b55008d52f43b55087303ff5520895500c742fc02000000897204893a89d08b54240883c40ce9b3fcffff8b5afc525056ff7308ff730cff7310ff7314ff7318ff731cff7320ff73248b0bff73048b1c2489c883c40490e8badfffff8b042483f809753d8b7c24088b77f88b5d008d5bf03b5d087303ff5520895d00c743fc03000000c7430801000000ba048775418953048b4e04890b89d8ff552cb80100000083f843720a81f8fd0000007702eb0783f8417402eb2f8b7d008d7ff43b7d087303ff5520897d00c747fc020000008b742404897704890789f88b54240883c40ce9f8fbffff8b7c24088b77fc56b8010000008b5610ff12508b4424080bc0e87ebfffff89c3b87c877541e83e8cffffbb9c8775410bc0e8328cffff8b5d008d5bf43b5d087303ff5520895d00c743fc02000000bab487754189138943048b4c24046a03ff31ff7104ff7108ff710cff7110ff7114ff7118ff711cff7120ff712489d88b5c242ce8bed5ffff8b44240c8b54241083c414e962fbffff0bc0|@924,63|25,0,32 74,1,@762 111,0,0 116,0,@917 135,0,0 186,1,@762 234,1,@762 274,1,@761 297,0,0 317,0,@684 326,1,@699 333,0,@918 338,1,@323 343,0,@919 350,1,@323 391,0,@920 442,1,@752 510,1,@762 566,1,@762 638,1,@762 675,0,92 715,0,94 798,0,92 890,1,@762 936,0,0 941,0,@917 959,0,0 1041,0,0 1058,1,@685 1065,0,@921 1070,1,@323 1075,0,@922 1082,1,@323 1111,0,@923 1162,1,@752 917:S9|456e644f664c696e65 918:S21|756e65787065637465642063686172616374657220 919:S11|20696e205c202e2e2e205c 920:C2,20|3b650c7303ff55248b780c8b420489faff220bc0|@751,63| 921:S22|756e7072696e7461626c652063686172616374657220 922:S16|20666f756e6420696e20737472696e67 923:C2,20|3b650c7303ff55248b780c8b420489faff220bc0|@751,63| 924:S33|4c45585f28292e7061727365537472696e67283129676574537472696e67283129 925:O1|@926 926:C2,20|3b650c7303ff55248b780cb84888754189faff22|@751,63|12,0,@927 927:S36|6e6f206d61746368696e672071756f746520666f756e64206f6e2074686973206c696e65 928:S21|4c45585f28292e7061727365537472696e67283129 929:C2,12|8b5c241c8b03c2200083c800|@930,9| 930:S24|4c45585f28292e6572726f724f6363757272656428313029 931:O3|103,@349,@932 932:S22|537461746963206572726f7273202870617373203129 933:O1|@934 934:C2,8|b838897541c30bc0|@936,1|1,0,@935 935:O6|0,0,0,0,0,0 936:S34|434f4d50494c45525f424f445928292e62617365436f6d70696c6572283329283129 937:C2,180|8b45008d40f83b45087303ff5520894500c740fc01000040c700010000008b7d008d7ff43b7d087303ff5520897d00c747fc02000000be508a754189378947048b75008d76f43b75087303ff5520897500c746fc02000000ba608b754189168946048b55008d52f43b55087303ff5520895500c742fc02000000b9f08b7541890a8942048b45008d40f43b45087303ff5520894500c740fc02000000b9ac8c75418908897004893b894304895308b801000000c3|@948,63|26,0,0 55,0,@938 89,0,@942 123,0,@944 157,0,@946 175,0,0 938:C2,32|3b650c7303ff55248b7a048b375089f08d54240490e82200000083c404c30bc0|@941,63|22,1,@939 939:C2,88|3b650c7303ff552483f8017506b801000000c38b3852ff37ff77048b400483c800e8daffffff8b7424088b45008d40f43b45087303ff5520894500c740fc020000008b1c248958048b54240489108b56fc83c40cff220bc0|@940,63|14,0,0 940:S41|5554494c49544945535f28292e7365617263684c6973742832296170706c792831296170706c283129 941:S34|5554494c49544945535f28292e7365617263684c6973742832296170706c79283129 942:C2,72|8b7d008d7ff43b7d087303ff5520897d00c747fc02000000895f0489078b5a048b038b75008d76f43b75087303ff5520897500c746fc02000000894604893e8933b801000000c390|@943,61|66,0,0 943:S34|5554494c49544945535f28292e7365617263684c697374283229656e746572283229 944:C2,116|3b650c7303ff55248b7a048b375083fe017509b80100000083c404c38b16ff7204ff76048b5c24088b020bc0ff154094040883f80174228b45008d40f83b45087303ff5520894500c740fc010000008b4c2404890883c40cc38b342483c4083b650c7303ff5524eba5b80100000083c40cc30bc0|@945,63|20,0,0 46,0,I24 106,0,0 945:S35|5554494c49544945535f28292e7365617263684c6973742832296c6f6f6b7570283129 946:C2,20|3b650c7303ff55248b58048b008b5204ff220bc0|@947,63| 947:S34|5554494c49544945535f28292e7365617263684c697374283229656e746572283129 948:S26|5554494c49544945535f28292e7365617263684c697374283229 949:C2,44|3b650c7303ff552452508b520883c800ff1283f801750f8b7c24048b04248b570483c408ff2283c408c30bc0|@950,63| 950:S24|4d6973632e6c6f6f6b757044656661756c74283229283129 951:O31|@953,@1520,@1521,@1528,@1530,@1531,@1532,@1533,@1523,@1536,@1538,@1539,@1540,@1541,@1542,@1544,@1545,@1546,@1549,@1552,@1553,@1554,@1557,@1558,@1046,@1559,@1560,@1561,@1537,@1562,@952 952:O3|@978,@1040,@1561 953:C2,1036|908dbc2464ffffff3b7d0c7303ff55288b7c24048b75008d76f43b75087303ff5520897500c746fc02000000b94c927541890e895e048b4d008d49f43b4d087303ff5520894d00c741fc02000000525053ff37ff77045651bf94a4754189398959048b55008d52ec3b55087303ff5520895500c742fc04000000bf78a67541893a89720c894a08895a048b7d008d7fe43b7d087303ff5520897d00c747fc06000040b810ce75418907c7470401000000c7470801000000c7470c01000000c7471001000000c74714010000008b45008d40e83b45087303ff5520894500c740fc05000040bb30d575418918c7400401000000c7400801000000c7400c01000000c74010010000008b5d008d5bec3b5d087303ff5520895d00c743fc04000000be74db754189338b74240489730c8b7424108973088943048970048b7424188b4e748948088b342489700c8b4c24188b7178897010c640ff008b4c2410894f04895708895f0c8947108b442404894714c647ff008b75008d76f43b75087303ff5520897500c746fc02000000b920dd7541890e8b4c2410894e048b4c24188b45008d40a03b45087303ff5520894500c740fc1700000052575356ff713cff7140ff7110ff7144ff7148ff714cff7150ff7154ff7114ff7158ff715cff7160ff7164ff7168ff716cff717050b908e0754189088b4c24048948588b4c24088948548b4c240c8948508b4c241089484c8b4c24148948488b4c24188948448b4c241c8948408b4c242089483c8b4c24248948388b4c24288948348b4c242c8948308b4c243089482c8b4c24348948288b4c24388948248b4c243c8948208b4c244089481c8958188978148950108b5c246489580c8970088b4c24588948048b5d008d5bf43b5d087303ff5520895d00c743fc02000000b9b8577641890b8b4c2464894b048b4d008d49f03b4d087303ff5520894d00c741fc030000008959088b5c245c8959048b5c246089198b45008d40f43b45087303ff5520894500c740fc02000000bb085976418958048b5c246889180bc0e8a217000051508b54246c8b7a088b378b5a188b0b81f989000000740489c8eb0289f08b7424748b5e040bc0e8c6c9ffff83f80174198b5c24748b43048d54247883c800e842ca000083c478c204008b5c246cff7308ff730cff7310ff7314ff7318ff731cff7320ff73248b138b4b0489cb89d0e89608000050ff742470ff742408bb010000008b4424108b542414ff128b1c24e816dc00008b7c24708b77088b1e8b57188b0a81f989000000740689c389c8eb0689c189d889cb83f87374278b068b0a81f989000000740289c883f80174145389fbb877000000ba0c967541e82e040000eb06b801000000538b45008d40f43b45087303ff5520894500c740fc02000000c74004010000008b3c24893881c480000000c2040090|@1519,63|45,0,@954 89,0,@1016 123,0,@1022 163,0,@1140 172,0,0 179,0,0 186,0,0 193,0,0 200,0,0 229,0,@1156 238,0,0 245,0,0 252,0,0 259,0,0 288,0,@1170 396,0,@1172 491,0,@1178 660,0,@1389 738,0,@1394 754,1,@1025 798,1,@743 822,1,@1396 870,1,@971 884,0,0 902,1,@1413 968,0,59 973,0,@957 978,1,@959 985,0,0 1017,0,0 954:C2,344|3b650c7303ff552452ff730450ff338b5a048b4b088b398b73188b0681f8890000007402eb0289f883f87d7538b8010000008d54241083c800e83601000089c78b45008d40f43b45087303ff5520894500c740fc02000000c7400401000000893883c410c38b7c240c8b47048b50088b0a8b70188b1e81fb89000000740489d8eb0289c883f869755c8b54240c8b4204ba505b7541e88ac8ffff8b4c240c8b41048b78088b378b58188b1381fa89000000740489d0eb0289f083f87d742c8b41048b78188b3781fe890000007408b838a27541ff552cc70769000000b80100000083c410c3e963000000ff71048d542414e82e0f00008b4c24108b79048b77088b1e8b57188b3281fe89000000740689c389f0eb0689c689d889f383f86b7510538b4104ba505b7541e8f6c7ffffeb16538b5904b853000000ba0c96754183c800e8960200008b042483c418c3b80100000083c410c30bc0|@1015,63|46,0,0 58,1,@955 91,0,0 145,0,@745 150,1,@747 207,0,@1008 216,0,52 221,0,0 242,1,@1010 293,0,@745 298,1,@747 309,0,41 314,0,@957 322,1,@959 334,0,0 955:C2,532|3b650c7303ff55248b42fc8b78048b77088b1e8b4f188b0181f8890000007402eb0289d883f87d74328b5afcff73048b1c24b8f0957541ba0c96754190e8260200008b0424ba505b754183c800e85ec7ffffb8589c754183c404c38b5afc8b430452ff7008ff700cff7010ff7014ff7018ff701cff7020ff70248b58048b000bc0e8d20300008b1c248b53fc508b45008d40f03b45087303ff5520894500c740fc03000000be609c754189308b34248970088b4a048948048b53f090ff128b4424048b78f483ff0174618b1c24f7c3010000007407ba03000000eb068b138d541201f6c2017503ff553883fa037e5bf7c3010000007407b903000000eb068b0b8d4c0901f6c1017503ff553883f9037f0eb824ae744190ff552cbe01000000f7c301000000740989deeb0de9210000000fb673058d743601bb4f00000089f090ff154094040889c6eb0cbe01000000eb05be010000008b5c24048b53f483fa0174148b43fc568b58048b442404e8b608000089c1eb06b901000000565050ff7424086a03518d4c240c51bb1f4e0000b8c8cc744190e8860b00008b45008d40f43b45087303ff5520894500c740fc020000008b3c2489388b74240489700483c800e81e0c00008b5c241089c28b45008d40f43b45087303ff5520894500c740fc020000008950048b4c240c8908528b53f883c800ff128b4424148b78fc8b4704ba505b7541e8a6c5ffff8b042483c418c383c800|@1007,63|51,0,@956 56,0,@957 62,1,@959 70,0,@745 78,1,@747 83,0,@989 130,1,@960 166,0,@990 214,0,1 248,0,1 274,0,@51 283,0,0 313,0,39 322,0,I24 331,0,0 338,0,0 366,1,@994 375,0,0 395,0,9999 400,0,@202 406,1,@1003 450,1,@1005 513,0,@745 518,1,@747 956:S17|3c74797065206964656e7469666965723e 957:O2|@959,@958 958:O3|@978,@980,@977 959:C2,468|3b650c7303ff55248b7b088b378b4b188b3981ff89000000740689c689f8eb0689c789f089fe83f87f754189dfff7708ff770cff7710ff771451ff771cff7720ff77248b5f048b0790e8a2010000565789c3b8450000000bc0e8327cffffbb450000000bc0e8267cffffeb698b43088b388b0181f889000000740489c1eb0289f956538b5a0489c890e856c4ffff83f80174298b3c24ff7708ff770cff7710ff7714ff7718ff771cff7720ff77248b5f048b070bc0e836010000eb5a8b3c248b77088b1e8b57188b0a81f989000000740989c8eb07e93c00000089d8a8017503ff553883f8017d02eb11a8017503ff553881f88b0000007d02eb10b824ae744183c800ff552cb801000000bb549875418b4c43fe89c88b3c2450ff7708ff770cff7710ff7714ff7718ff771cff7720ff77248b5f048b070bc0e8be02000050bb789a75418b44240c90e8427bffff8b5c240483c800e8367bffffbb909a75410bc0e82a7bffff8b75008d76f43b75087303ff5520897500c746fc02000000bba49a7541891e8946048b5424088b4c2410c7442410030000008b028944240c8b7a04897c24088b5a08895c24048b420c8b3c24890424ff7210ff7214ff7218ff721cff7220ff722489fb89f051e99bc4ffff83c800|@976,63|74,1,@960 83,0,34 90,1,@323 95,0,34 102,1,@323 138,1,@743 182,1,@960 252,0,@51 263,0,0 268,0,@962 314,1,@971 320,0,@973 330,1,@323 342,1,@323 347,0,@974 354,1,@323 383,0,@975 404,0,1 461,1,@752 960:C2,8|8b03c2200083c800|@961,9| 961:S13|4c45585f28292e696428313029 962:O69|7,@964,@862,@838,@903,@860,@905,@856,@848,@850,@845,@879,@840,@836,@906,@818,@843,@854,@866,@899,@887,@874,@820,@858,@834,@885,@872,@897,@816,@826,@870,@832,@891,@828,@864,@824,@883,@822,@877,@868,@852,@901,@881,35,124,61,@895,58,42,@889,@893,95,40,41,91,93,44,59,123,125,46,@965,@956,@966,@967,@968,@969,@970,@963 963:S14|756e6b6e6f776e2073796d626f6c 964:S12|3c6964656e7469666965723e 965:S3|2e2e2e 966:S17|3c737472696e6720636f6e7374616e743e 967:S18|3c696e746567657220636f6e7374616e743e 968:S15|3c7265616c20636f6e7374616e743e 969:S15|3c776f726420636f6e7374616e743e 970:S15|3c6368617220636f6e7374616e743e 971:C2,28|3b650c7303ff5524b8010000008b5424188b3c2483c42457ff220bc0|@972,63|9,0,0 972:S17|4c45585f28292e6c696e656e6f28313029 973:S14|2065787065637465642062757420 974:S10|2077617320666f756e64 975:C2,20|3b650c7303ff55248b780c8b420489faff220bc0|@751,63| 976:S20|534b4950535f28292e6e6f74666f756e64283229 977:O1|@988 978:C2,48|3b650c7303ff552452508b520883c800ff1283f8017409b80300000083c408c38b7c24048b04248b570483c408ff2290|@979,63|24,0,1 979:S17|496e745365742e706c7573283229283129 980:O3|@978,@982,@981 981:O1|@987 982:O3|@978,@984,@983 983:O1|@986 984:O1|@985 985:C2,20|83f8037506b803000000c3b801000000c383c800|@742,1|6,0,1 12,0,0 986:C2,20|83f87d7506b803000000c3b801000000c383c800|@742,1|6,0,1 12,0,0 987:C2,20|81f8810000007506b803000000c3b801000000c3|@742,1|9,0,1 15,0,0 988:C2,20|81f8830000007506b803000000c3b801000000c3|@742,1|9,0,1 15,0,0 989:O1|0 990:C2,220|3b650c7303ff552452ff308b5a088b042483c800ff154094040883f80174718b7c24048b770456ff7608ff760cff7610ff7614ff7618ff761cff7620ff76248b5e048b0690e87afdffff50bb589d75418b44240890e8fe75ffff8b5d008d5bf43b5d087303ff5520895d00c743fc02000000ba789d754189138943048b4c24048b442410c7442410030000008b39eb05e93e000000897c240c8b7104897424088b5108895424048b790c8b3424893c24ff7110ff7114ff7118ff711cff7120ff71245389f389c68b042483c40456e961bfffffb80100000083c408c3|@993,63|22,0,I24 70,1,@971 76,0,@991 86,1,@323 115,0,@992 136,0,1 207,1,@752 212,0,0 991:S23|2068617320616c7265616479206265656e20757365642e 992:C2,20|3b650c7303ff55248b780c8b420489faff220bc0|@751,63| 993:S55|50415253455f44454328292e7061727365446563283329676574547970655661727328322967657454797065566172283129552d283129 994:C2,456|3b650c7303ff5524508b7b24bbcc9f754189f8ba703d754190e8829fffff83f8017509b80300000083c404c38b3424f7c6010000007407bb03000000eb068b1e8d5c1b01f6c3017503ff553883fb037e63f7c6010000007407ba03000000eb068b168d541201f6c2017503ff553883fa037f10b824ae744183c800ff552cb901000000f7c601000000740489f1eb080fb64e058d4c0901bbbf00000089c80bc0ff154094040883f8017409b80300000083c404c38b1424f7c2010000007407b903000000eb068b0a8d4c0901f6c1017503ff553883f9037e68f7c2010000007407b803000000eb068b028d440001a8017503ff553883f8037f0db824ae7441ff552cbf01000000f7c201000000740489d7eb080fb67a058d7c3f01bb4f00000089f80bc0ff154094040883f80174688b3c24f7c701000000740cbe03000000eb0be9770000008b378d743601f7c6010000007503ff553883fe057e58f7c7010000007407bb03000000eb068b1f8d5c1b01f6c3017503ff553883fb057f0db824ae7441ff552cba01000000f7c701000000740989faeb0de9210000000fb657068d541201bbbf00000089d083c404ff2540940408b80100000083c404c3b80100000083c404c30bc0|@1002,63|13,0,@995 20,0,@599 26,1,@601 36,0,1 56,0,1 90,0,1 116,0,@51 127,0,0 152,0,95 162,0,I24 172,0,1 192,0,1 226,0,1 251,0,@51 259,0,0 284,0,39 294,0,I24 315,0,1 357,0,1 383,0,@51 391,0,0 421,0,95 432,0,I24 437,0,0 446,0,0 995:O3|@997,@999,@996 996:O2|@1001,@7358 997:O2|@998,@7358 998:C2,28|8b388b72043bfe750cb803000000c3b801000000c3b801000000c390|@593,53|10,0,1 16,0,0 22,0,0 999:O2|@1000,@7358 1000:C2,44|89c78b45008d40f03b45087303ff5520894500c740fc03000000897808c740048b0000008b7a048938c30bc0|@593,37|32,0,69 1001:C2,36|8b388b72043bfe750a8b4008c3b801000000c3b8503d754183c800ff552cb80100000090|@593,53|14,0,0 20,0,@597 31,0,0 1002:S21|50415253455f44454328292e69735765616b283229 1003:C2,136|8b7d008d7ff83b7d087303ff5520897d00c747fc010000408907f7c301000000740489deeb0ef643ff108b337402f7de8d74360189f3c1e3038d5bf98b44241083f8017407be09000000eb05be0100000089da0bd68b74240c83fe017407bb05000000eb05bb0100000089d10bcb8b5c240889ca0bd38b4c24048939895104b801000000c2100090|@1004,63|70,0,4 77,0,0 95,0,2 102,0,0 128,0,0 1004:S23|5354525543545f56414c5328292e6d616b655476283629 1005:C2,44|8b388b70048b45008d40f03b45087303ff5520894500c740fc03000000897008897804c70007000000c30bc0|@1006,49|37,0,3 1006:S7|54797065566172 1007:S50|50415253455f44454328292e7061727365446563283329676574547970655661727328322967657454797065566172283129 1008:O3|@7320,@224,@1009 1009:S31|417474656d707420746f20707573682074776f20706172656e746865736573 1010:C2,116|3b650c7303ff552452b80100000083c800e83af1ffff8b3c2450ff77ecbb889b7541b871000000ba00a3754190e86a00000083f801740f8b5424040bc0e8beffffff89c6eb05be010000008b5d008d5bf43b5d087303ff5520895d00c743fc020000008973048b1424891389d883c408c383c800|@1014,63|10,0,0 18,1,@955 30,0,@983 35,0,56 40,0,@1011 46,1,@1012 71,0,0 1011:O2|@1012,@957 1012:C2,248|3b650c7303ff55248b7c24048b77088b0e8b77188b3e81ff89000000740489feeb0289ce500bc6a801587503ff55383bf075178b442404ba505b754190e822b8ffffb803000000c204008b7424048b4e088b398b4e188b3181fe89000000740489f1eb0289f9525089c883c800e88eb7ffff83f801746a8b1c24f6c3017503ff553883fb017d02eb12f6c3017503ff553881fb8b0000007d02eb10b824ae744183c800ff552cba01000000ba549875418b4c5afe89ca8b4424048b5c240c8b780489d089fa83c800ff128b44240cba505b75410bc0e88ab7ffffb803000000eb05e90600000083c408c20400b80100000083c408c2040090|@1013,63|56,0,@745 62,1,@747 67,0,1 110,1,@743 156,0,@51 167,0,0 172,0,@962 207,0,@745 214,1,@747 219,0,1 237,0,0 1013:S19|534b4950535f28292e74657374666f72283329 1014:S29|534b4950535f28292e6765744c697374283429666f724c697374283129 1015:S37|50415253455f44454328292e70617273654465632833296765745479706556617273283229 1016:C2,48|8b45008d40f03b45087303ff5520894500c740fc03000000bbe0a4754189188b5c24048958088b4a04894804c2040090|@1021,15|25,0,@1017 1017:C2,180|3b650c7303ff552452508b520883c800ff12f7c00100000075068b0083c408c38b7c24048b770456ff7608ff760cff7610ff7614ff7618ff761cff7620ff76248b5e048b06e8faf4ffff50bbb0a575418b44240890e87e6dffff8b5d008d5bf43b5d087303ff5520895d00c743fc02000000bae4a5754189138943048b4c24046a03ff31ff7104ff7108ff710cff7110ff7114ff7118ff711cff7120ff712489d88b5c242ce80ab7ffffb8589c754183c410c390|@1020,63|70,1,@971 76,0,@1018 86,1,@323 115,0,@1019 166,1,@752 171,0,@989 1018:S42|20686173206e6f74206265656e206465636c6172656420696e2074797065206465636c61726174696f6e 1019:C2,20|3b650c7303ff55248b780c8b420489faff220bc0|@751,63| 1020:S42|50415253455f44454328292e706172736544656328332967656e54797065566172456e76283329283129 1021:S39|50415253455f44454328292e706172736544656328332967656e54797065566172456e76283329 1022:C2,496|3b650c7303ff552450505052508d5c2408b80100000083c800e8eae2ffff8b7d008d7ff03b7d087303ff5520897d00c747fc030000008b74240889378b5c240c895f048b5424108957088b4c240489fbb8010000008b510cff1289c78b45008d40f43b45087303ff5520894500c740fc02000000be84a875418970048b1c24891889f90bc0e8ba0100008b7c240451ff7704ff342489c3b8909b7541ba60a97541e84e0200008b342450ff7608ff760cff7610ff7614ff7618ff761cff7620ff76248b5e048b060bc0e8def2ffff508b5c24088b4424040bc0e83e0300008b5c2410ff74241c8b53088b5c241c8b44241883c800ff128b4c242483f901742c8b7c24108b77048b5e088b138b4e188b3981ff89000000740689c289f8eb0689c789d089fa83f85b7404eb0d89c28b44242883f8017502eb07bec8cc7441eb718b7c24108b77048b5e088b0b8b46188b1881fb89000000740489d8eb0289c883f85b7511528b4704ba505b754190e886b3ffffeb16528b5f04b87b000000ba0c96754183c800e826eeffff8b542414689c797541ff72048b5c2418b810ad7541ba68ad754190e8520500008b4c2414eb05e91a000000ff34248b59048b442414ba94ae754190e87206000089c683c4048b442428897424308944242c8b5c24088b04248b7c242083c42c57e90525000090|@1139,63|18,0,0 26,1,@937 81,0,0 117,0,@1023 134,1,@1025 152,0,@984 157,0,@1029 162,1,@1030 202,1,@971 218,1,@1033 313,0,@202 360,0,@745 366,1,@747 377,0,61 382,0,@957 390,1,@959 399,0,@826 411,0,@1040 416,0,@1042 422,1,@1043 448,0,@1045 454,1,@1047 491,1,@1137 1023:O1|@1024 1024:C2,20|83f85b7506b803000000c3b801000000c383c800|@742,1|6,0,1 12,0,0 1025:C2,20|3b650c7303ff55248b58048b00e91e0000000bc0|@1028,61|14,1,@1026 1026:C2,40|8b7d008d7ff03b7d087303ff5520897d00c747fc03000000bef89a75418937895f0889470489f8c3|@1027,57|25,0,@978 1027:S14|496e745365742e706c7573283229 1028:S14|496e745365742e706c7573283129 1029:O2|@1030,@957 1030:C2,220|3b650c7303ff55248b7c24048b77088b0e8b77188b3e81ff89000000740489feeb0289ce525389c389f083c800e86eb1ffff83f80174408b74240cff7608ff760cff7610ff7614ff7618ff761cff7620ff76248b5e048b0690e84eeeffff5089f0ba505b754183c800e896b1ffff8b042483c40cc204008b7424048b5c240cb864aa75418b560490ff128b5c240c8b53088b0a8b43188b3881ff89000000740489feeb0289ce8b1c2489f00bc0e8eeb0ffff83f80175198b44240cba505b754190e83eb1ffff3b650c7303ff5524ebbab84097040883c408c2040090|@1032,63|46,1,@743 90,1,@960 98,0,@745 106,1,@747 128,0,@1031 174,1,@743 188,0,@745 194,1,@747 209,0,I48 1031:S10|4964656e746966696572 1032:S17|534b4950535f28292e6765746964283329 1033:C2,32|3b650c7303ff55245053b8030000008d5424080bc0e82200000083c408c20400|@1039,63|11,0,1 22,1,@1034 1034:C2,372|3b650c7303ff55248b7afcf7c7010000007407be03000000eb068b378d7436015023c6a801587503ff55383bc67e06b801000000c3a8017503ff553889c683ee0270f6f7c6010000007503ff553883fe017d02eb27f7c7010000007407bb03000000eb068b1f8d5c1b015323def6c3015b7503ff55383bf37d02eb0f89c6b824ae7441ff552cbb01000000f7c701000000740489fbeb118d5e0889ded1ee0fb634378d74360189f3525089d9bb5d00000089c890ff154094040883f80174718b442404ff70f8ff70048b58fcb860ac7541e81267ffffbb78ac75410bc0e80667ffff8b7d008d7ff43b7d087303ff5520897d00c747fc02000000be90ac754189378947048b5c24048b542410c7442410030000008b0b894c240c8b4304894424088b7308897424048b4b0c8b0424eb05e91f000000890c24ff7310ff7314ff7318ff731cff7320ff732489c389f852e970b0ffff8b0424a8017503ff553889c783c70270f689f88b54240483c408e98dfeffff90|@1038,63|20,0,1 48,0,0 94,0,1 127,0,@51 135,0,0 173,0,46 182,0,I24 205,0,@1035 210,1,@323 215,0,@1036 222,1,@323 251,0,@1037 272,0,1 336,1,@752 1035:S15|7175616c6966696564206e616d6520 1036:S13|20696c6c6567616c2068657265 1037:C2,20|3b650c7303ff55248b780c8b420489faff220bc0|@751,63| 1038:S36|5554494c49544945535f28292e636865636b466f72446f7473283329636865636b283129 1039:S28|5554494c49544945535f28292e636865636b466f72446f7473283329 1040:O1|@1041 1041:C2,52|83f8757506b803000000c383f8697506b803000000c383f8037506b803000000c383f87d7506b803000000c3b801000000c30bc0|@979,1|6,0,1 17,0,1 28,0,1 39,0,1 45,0,0 1042:O2|@1043,@957 1043:C2,232|3b650c7303ff55248b7c24048b77088b0e8b77188b3e81ff89000000740489feeb0289ce52505389c389f00bc0e866adffff83f80175728b7424088b5c24108b4424148b56040bc0ff128b5c24108b53088b0a8b43188b3881ff89000000740489feeb0289ce8b45008d40f43b45087303ff5520894500c740fc020000008b0c248948048b7c2404893889f190e8b6faffff89c389c883c800e8faacffff83f801752c8b442410eb05e92c000000ba505b75410bc0e842adffff3b650c7303ff5524eb86b80100000083c40cc20800b80100000083c40cc20800b80100000083c40cc2080083c800|@1044,63|46,1,@743 142,1,@1025 154,1,@743 175,0,@745 182,1,@747 197,0,0 208,0,0 219,0,0 1044:S18|534b4950535f28292e736b69706f6e283429 1045:O3|@1047,@1130,@1046 1046:O3|@978,@1132,@1135 1047:C2,208|3b650c7303ff5524535289c78b45008d40f43b45087303ff5520894500c740fc02000000bea0af7541897004893889f990e8d2f9ffff518d54240c0bc0e8e200000050ff74240cbb68b77541b863000000ba00a3754183c800e8faf3ffff83f8017446ff7424148b5c24108b4424088b54240c0bc0e886ffffff89c78b45008d40f43b45087303ff5520894500c740fc020000008978048b342489308b5c241083c41853e9c31c0000687ccc7541ff742410bb68b775418b44240cba68ad754190e8fafdffff8b042483c410c2040090|@1129,63|37,0,@1048 50,1,@1025 62,1,@1050 72,0,@1056 77,0,49 82,0,@1011 90,1,@1012 165,1,@1126 170,0,@1128 179,0,@1056 188,0,@1042 194,1,@1043 1048:O1|@1049 1049:C2,20|83f8637506b803000000c3b801000000c383c800|@742,1|6,0,1 12,0,0 1050:C2,156|3b650c7303ff55245289c78b45008d40f43b45087303ff5520894500c740fc02000000be90b075418970048938e8b2f8ffff508d5424080bc0e8b20000008b5c240450ff73fcbb68b77541b861000000ba00a37541e8daf2ffff83f80174358d54240c0bc0e8821900008b55008d52f43b55087303ff5520895500c742fc020000008942048b0c24890a89d083c40ce9241a00008b042483c40cc390|@1125,63|36,0,@1051 46,1,@1025 58,1,@1053 71,0,@1056 76,0,48 81,0,@1011 86,1,@1012 102,1,@1118 144,1,@1120 1051:O1|@1052 1052:C2,20|83f8617506b803000000c3b801000000c383c800|@742,1|6,0,1 12,0,0 1053:C2,1232|3b650c7303ff55248b7afc8b77fc8b5e088b0b8b7e188b1f81fb89000000740689c189d8eb0689c389c889d983f869756352518b5afc8b43fcba505b754183c800e862aaffffb8010000008d5424080bc0e8960400008b5424048b4afc8b79fc8b77088b1e8b57188b3281fe89000000740689c389f0eb0689c689d889f383f86b7516538b41fcba505b754190e816aaffffeb1ae91a000000538b59fcb853000000ba0c9675410bc0e8b2e4ffff8b0424eb708b42fc8b58fc8b7b088b378b43188b3881ff89000000740489f8eb0289f083f87575718b72fc52518b46fcba505b75410bc0e8bea9ffff50508b5c240c8b53fcff72fcbb68b77541b877000000ba00a37541e83af1ffff83f801741989e1b8acb77541890189e7c7470401000000eb61e9140300008b4c240c8b41fcff70fc8d54241483c800e82a0600008b7c24108b77fceb05e9d00000008b5efc8b53088b0a8b7b188b1781fa89000000740689c189d0eb0689c289c889d183f8777517518b46fcba505b75410bc0e826a9ffffeb1ae96d000000518b5efcb8fb000000ba0c9675410bc0e8c2e3ffff8b4c24148b41fc8b7d008d7ff43b7d087303ff5520897d00c747fc02000000be30c0754189378b58fc895f0489fb8b04240bc0e8ba0e0000bb030000000bc0e8ae1100008d54240889028d4c2408c741040100000083c4088b45008d40f43b45087303ff5520894500c740fc020000008b3c2489388b742404897004eb738b72fc8b5efc8b43088b388b73188b0681f8890000007402eb0289f883f87d75768b7afc8b4ffc52ff7108ff710cff7110ff7114ff7118ff711cff7120ff71248b59048b01e8eae4ffff8b570483c800ff128b7d008d7ff43b7d087303ff5520897d00c747fc02000000c7470401000000eb05e9a501000089078b34248b5efc8b53fc8b4a088b018b72188b0e81f9890000007409eb05e93300000089c883f87d7511578b43fcba505b754190e8daa7ffffeb16578b5bfcb8f0957541ba0c96754183c800e87ae2ffff8b0424eb728b7afc8b47fc8b70088b1e8b78188b3781fe89000000740489f0eb0289d883f803756a8b5afc52ff73fc89cbb8909b7541ba60a97541e87ef5ffff505089c1b890c675410bc0e8c212000083c800e80213000083f801743a8b45008d40f83b45087303ff5520894500c740fc01000040eb05e9d5000000bf90c67541893889e6c706ffffffff89e3894304eb17e98600000089e0c7000100000089e7be90c675418977048b5d008d5bf43b5d087303ff5520895d00c743fc020000008b142489138b4424048943048b45008d40f03b45087303ff5520894500c740fc03000000895808894804c700010000000bc0e8b612000089c78b45008d40f43b45087303ff5520894500c740fc02000000c74004010000008938eb318b5afc52ff73fc8b1c24b884997541ba0c9675410bc0e842e1ffff8b0424ba505b754183c800e87aa6ffffb8010000005083c404505083c4048b5424088b4afc8b79fc8b77088b1e8b57188b0a81f989000000740689c389c8eb0689c189d889cb83f803751189d88d54240c0bc0e88212000083c40cc383fb017509b8589c754183c40cc38b430483f80175068b0383c40cc38b4c24088b71fcff33ff76fc8b1c24b884997541ba0c9675410bc0e8aae0ffff8b0424ba505b754183c800e8e2a5ffff8b44240483c414c30bc0|@1117,63|58,0,@745 66,1,@747 71,0,0 82,1,@1054 136,0,@745 142,1,@747 158,0,41 163,0,@957 170,1,@959 223,0,@745 230,1,@747 247,0,@1056 252,0,59 257,0,@1011 262,1,@1012 274,0,@1059 285,0,0 314,1,@1067 375,0,@745 382,1,@747 398,0,125 403,0,@957 410,1,@959 446,0,@1088 466,1,@1091 471,0,1 478,1,@1099 495,0,0 610,1,@960 649,0,0 708,0,@745 714,1,@747 725,0,@956 730,0,@957 738,1,@959 792,0,@984 797,0,@1029 802,1,@1030 811,0,@1107 818,1,@1109 826,1,@1111 867,0,@1107 877,0,-1 897,0,0 904,0,@1107 979,0,0 986,1,@1113 1019,0,0 1038,0,@964 1043,0,@957 1050,1,@959 1058,0,@745 1066,1,@747 1071,0,0 1138,1,@1115 1152,0,@989 1190,0,@964 1195,0,@957 1202,1,@959 1210,0,@745 1218,1,@747 1054:C2,328|3b650c7303ff55248b42fc8b78fc8b77fc8b5e088b0b8b46188b3881ff89000000740489f8eb0289c852bb10ad75410bc0e822a5ffff83f801744f8b1c248b53fc8b4afc8b41f88b78048b45008d40f43b45087303ff5520894500c740fc020000008978048b73f8893083c800e896f2ffff8b1c248b53fc8b4afcff71048b59fc8b51f8ff1289c6eb388b34248b5efc8b53fcff72fc8b1c24b8f0957541ba0c9675410bc0e8cadfffff8b0424ba505b754183c800e802a5ffffbe589c754183c4048b0c248b41fc8b78fc56ff77fcbb10ad7541b871000000ba00a3754183c800e872ecffff83f8017435b8010000008b54240490e806ffffff8b75008d76f43b75087303ff5520897500c746fc020000008946048b1c24891e89f083c408c38b45008d40f43b45087303ff5520894500c740fc02000000c74004010000008b3424893083c408c3|@1055,63|43,0,@1040 50,1,@743 110,1,@1025 154,0,@956 159,0,@957 166,1,@959 174,0,@745 182,1,@747 187,0,@989 208,0,@1040 213,0,56 218,0,@1011 226,1,@1012 236,0,0 315,0,0 1055:S69|50415253455f5459504528292e7061727365547970652833297475706c655479706528312962617369635479706528312974795365712d70726f636573734c697374283129 1056:O1|@1057 1057:C2,8|b801000000c30bc0|@1058,1|1,0,0 1058:S16|496e745365742e656d7074792d283129 1059:O4|-3,0,@1061,@1060 1060:O2|0,@1062 1061:S4|756e6974 1062:O6|@1061,0,0,0,@1064,@1063 1063:O2|-1,@7366 1064:O2|0,@1065 1065:O3|1,@1066,0 1066:O4|-2,1,0,0 1067:C2,116|3b650c7303ff552452b80100000083c800e87a0000008b3c2450ff77ecbb68b77541b871000000ba00a3754190e8aaeaffff83f801740f8b5424040bc0e8beffffff89c6eb05be010000008b5d008d5bf43b5d087303ff5520895d00c743fc020000008973048b1424891389d883c408c383c800|@1014,63|10,0,0 18,1,@1068 30,0,@1056 35,0,56 40,0,@1011 46,1,@1012 71,0,0 1068:C2,300|3b650c7303ff55248b45008d40f43b45087303ff5520894500c740fc02000000bf08ba75418978048b72f8893089d10bc0e8c6efffff8b79fc8b77fc518b5efcba40ba7541e8420100008b1c248b53fc8b4afc8b79fc8b77088b1e8b57188b3281fe89000000740689c389f0eb0689c689d889f383f85f7513538b41fcba505b754183c800e826a2ffffeb16538b59fcb875000000ba0c96754183c800e8c6dcffff8b5c24048b53fc8b4afc8b41f88b78088b45008d40f43b45087303ff5520894500c740fc020000008978048b73f8893083c800e822efffff8b5c24048b53fc8b4afcff71048b59fc8b51f883c800ff12505089e75789c38b44240ce8b20200008b45008d40f43b45087303ff5520894500c740fc020000008b342489308b5c240489580483c410c30bc0|@1087,63|33,0,@1069 50,1,@1025 65,0,@1071 70,1,@1072 126,0,@745 134,1,@747 145,0,58 150,0,@957 158,1,@959 214,1,@1025 254,1,@1079 1069:O1|@1070 1070:C2,20|83f85f7506b803000000c3b801000000c383c800|@742,1|6,0,1 12,0,0 1071:O2|@1072,@1029 1072:C2,340|3b650c7303ff55248b7b088b378b4b188b3981ff89000000740689c689f8eb0689c789f089fe81f881000000756189deff7608ff760cff7610ff761451ff761cff7620ff76248b5e048b060bc0e87addfffff7c0010000007407bb03000000eb068b188d5c1b01f6c3017503ff553883fb017f0f89c7b824ae7441ff552cba01000000f7c001000000740989c2eb0de9aa0000000fb650048d54120156505289f0ba505b754183c800e876a0ffffbbfd0000008b04240bc0ff154094040883f8017402eb18bb610000008b042483c800ff154094040883f8017502eb598b542408ff7208ff720cff7210ff7214ff7218ff721cff7220ff72248b5a048b0283c800e8d2deffff8b4c24086a03ff31ff7104ff7108ff710cff7110ff7114ff7118ff711cff7120ff712489c3b8bcbb754190e812a1ffff8b44240483c40cc38b0424891c2489f389c7b818bc75418b520457ff2290|@1078,63|78,1,@960 91,0,1 119,0,@51 127,0,0 162,0,@745 170,1,@747 175,0,126 186,0,I24 198,0,48 210,0,I24 258,1,@971 300,0,@1073 306,1,@752 329,0,@1076 1073:O1|@1074 1074:C2,20|3b650c7303ff55248b780cb8f4bb754189faff22|@751,63|12,0,@1075 1075:S25|4c6162656c73206d75737420626520312c322c332c2e2e2e2e 1076:O1|@1077 1077:C2,28|83f8617506b803000000c383f8037506b803000000c3b801000000c3|@979,1|6,0,1 17,0,1 23,0,0 1078:S20|534b4950535f28292e6765744c6162656c283229 1079:C2,40|3b650c7303ff552453e8360000008b7c240889078b3424897704b80100000083c404c2040083c800|@1086,63|10,1,@1080 27,0,0 1080:C2,212|3b650c7303ff5524f7c0010000007407bf03000000eb068b388d7c3f01f7c7010000007503ff553883ff037f02eb5ef7c0010000007407bf03000000eb068b388d7c3f01f7c7010000007503ff553883ff017f0f89c7b824ae7441ff552cbe01000000f7c001000000740489c6eb080fb670048d74360150bb6100000089f090ff154094040883f8017403eb08508b042483c404c38b3424f7c6010000007407bb03000000eb068b1e8d5c1b01f6c3017503ff553889da83ea0270f652bb0300000089f090e82600000083c404e92effffff0bc0|@1085,63|17,0,1 56,0,1 87,0,@51 95,0,0 121,0,48 130,0,I24 161,0,1 190,0,1 198,1,@1081 1081:C2,156|3b650c7303ff5524f7c0010000007407bf03000000eb068b388d7c3f01f7c3010000007411f6c3017503ff553883fb017c0489deeb1389c6b824ae74410bc0ff552c89f3be010000008b5c2404f7c3010000007411f6c3017503ff553883fb017c0489daeb1389c2b824ae74410bc0ff552c89d0ba010000008d4aff03ce3bcf760db824ae7441ff552cb8010000008954240489f3e91e0000000bc0|@1084,63|17,0,1 57,0,@51 69,0,0 105,0,@51 117,0,0 131,0,@51 139,0,0 150,1,@1082 1082:C2,212|3b650c7303ff5524f7c0010000007407bf03000000eb068b388d7c3f0183fb01750b8b7424043bf77503c204008b74240483fe017508b840970408c2040083fe0375148d7b0889fbd1eb0fb61c188d5c1b0189d8c204008d7e108d57fe89d7c1ef0283cf015053ff7504baf2be7541526a018965046a01bb8300000089f80bc0ff15a092040889c1ff7424088f4504eb0e90b8d4b67441ff552cb901000000d1ee89318d7436018b7c240c8d5f085150516a09568b442424ff1500aa04088b4424040bc0ff15209704088b44240483c41cc20400|@1083,63|17,0,1 55,0,I48 107,0,$1082+146 120,0,65 130,0,I11 147,0,@78 155,0,0 186,0,I198 198,0,I47 1083:S33|4c696272617279537570706f72742e756e73616665537562737472696e67283329 1084:S19|537472696e672e737562737472696e67283329 1085:S40|545950455f5452454528292e6d6b4c6162656c456e74727928332973747269705a65726f73283129 1086:S27|545950455f5452454528292e6d6b4c6162656c456e747279283329 1087:S60|50415253455f5459504528292e7061727365547970652833297475706c655479706528312962617369635479706528312974795365712d6c2d283129 1088:C2,152|3b650c7303ff55248b7a045057ff7708ff770cff7710ff7714ff7718ff771cff7720ff77248b5f048b0783c800e8c2d9ffff8b75008d76f43b75087303ff5520897500c746fc02000000bbe4c07541891e8b5424048956048b0c248b7c2408c7442408030000008b19895c24048b5104891424ff7108ff710cff7110ff7114ff7118ff711cff7120ff712489c389f057e9cf9bffff83c800|@1090,63|46,1,@971 75,0,@1089 99,0,1 145,1,@752 1089:C2,20|3b650c7303ff55248b780c8b420489faff220bc0|@751,63| 1090:S58|50415253455f5459504528292e7061727365547970652833297475706c655479706528312962617369635479706528312974795365712d283129 1091:C2,60|3b650c7303ff552483f8017506b801000000c3538b3857ff378b400490e8deffffffff7424048b5c24048d54241083c800e82200000083c40cc30bc0|@1098,63|14,0,0 50,1,@1092 1092:C2,256|3b650c7303ff552483f80175288b45008d40f43b45087303ff5520894500c740fc02000000c74004010000008b5c24048918c204008b3852505357ff70048b1f8b44240890e8d200000083f801752d8b74241050ff76fc8b5c2410b8d4c3754190e8a250ffffbbe4c375410bc0e89650ffff8b142483c800ff12eb0250508b742404f7c6010000007503ff553883fe017f2d8b5d008d5bf43b5d087303ff5520895d00c743fc020000008b5424148953048b4c2420890b89d883c41cc20400ff7424208b5c24148b44240c8b54241c0bc0e82affffff8b5d008d5bf43b5d087303ff5520895d00c743fc020000008943048b54240c891389d883c41cc2040090|@1097,63|40,0,0 70,1,@1093 92,0,@1095 98,1,@323 103,0,@1096 110,1,@323 1093:C2,200|3b650c7303ff5524f7c0010000007407bf03000000eb068b388d7c3f01f7c3010000007407be03000000eb068b338d743601560bf7f7c6010000005e7503ff55383bfe753c505390ff154094040883f8017409b80100000083c408c38b1c248b44240490ff15a094040883f8017409b8ffffffff83c408c3b80300000083c408c3f7c0010000007407ba03000000eb068b108d541201f7c3010000007407b903000000eb068b0b8d4c09015223d1f6c2015a7503ff55383bd17d06b8ffffffffc3b803000000c390|@1094,63|17,0,1 38,0,1 74,0,I24 84,0,0 102,0,I27 112,0,-1 121,0,1 138,0,1 159,0,1 188,0,-1 194,0,1 1094:S28|545950455f5452454528292e636f6d706172654c6162656c73283229 1095:S7|4c6162656c2028 1096:S25|292061707065617273206d6f7265207468616e206f6e63652e 1097:S33|545950455f5452454528292e736f72744c6162656c73283229656e746572283329 1098:S25|545950455f5452454528292e736f72744c6162656c73283229 1099:C2,220|3b650c7303ff552489c78b45008d40f03b45087303ff5520894500c740fc03000000c7400801000000897804891889d990e8c200000083f9017401c35050506a016a016a018d7c241057bb1f4e0000b8c8cc744190e82edcffff8b45008d40f43b45087303ff5520894500c740fc020000008b74240489308b5c24088958040bc0e8c6dcffff89c189c883c800e8c600000083f801743989c8e8ea00000089c890e8b200000083f801740b89c8e8d600000089c7eb0db8503d7541ff552cbf010000008b1c2489f890e8fa000000eb05b80100000089c883c40cc390|@1106,63|37,0,0 50,1,@1100 75,0,9999 80,0,@202 86,1,@1003 130,1,@1005 142,1,@1102 154,1,@1103 162,1,@1102 174,1,@1103 183,0,@597 191,0,0 202,1,@1104 209,0,0 1100:C2,48|8b388b70048b58088b45008d40ec3b45087303ff5520894500c740fc0400000089580c897008897804c700fdffffffc3|@1101,57|43,0,-2 1101:S12|4c6162656c6c656454797065 1102:C2,20|8b3883ff077506b803000000c3b801000000c390|@1006,33|8,0,1 14,0,0 1103:C2,36|8b78048b70088b45008d40f43b45087303ff5520894500c740fc020000008970048938c3|@1006,49| 1104:C2,12|8b38891fb801000000c30bc0|@1105,41|5,0,0 1105:S27|5354525543545f56414c5328292e747653657456616c7565283229 1106:S25|545950455f5452454528292e6d6b4c6162656c6c6564283229 1107:O6|@1108,0,0,0,@510,@207 1108:S9|756e646566696e6564 1109:C2,4|8b4014c3|@1110,1| 1110:S29|5354525543545f56414c5328292e74634964656e746966696572283129 1111:C2,20|8b3883ff037506b803000000c3b801000000c390|@1112,33|8,0,1 14,0,0 1112:S26|5354525543545f56414c5328292e6973556e7365744964283129 1113:C2,48|8b388b70048b58088b45008d40ec3b45087303ff5520894500c740fc0400000089580c897008897804c700fbffffffc3|@1114,57|43,0,-3 1114:S16|54797065436f6e737472756374696f6e 1115:C2,356|3b650c7303ff55248b7afc8b77fc8b5efc89d150ff7308ff730cff7310ff7314ff7318ff731cff7320ff73248b13ff73048b1c2489d083c404e81ad0ffff505089c3b890c675410bc0e8b2feffff83c800e8f2feffff83f801742e8b55008d52f83b55087303ff5520895500c742fc01000040b890c67541890289e7c707ffffffff89e6895604eb1289e2c7020100000089e0bf90c675418978048b75008d76f43b75087303ff5520897500c746fc020000008b142489168b4424048946048b45008d40f03b45087303ff5520894500c740fc030000008970088958048b7c240889380bc0e8b2feffff8b71fc8b5efc51508b43fcba505b754183c800e8ae92ffff8b5424048b4afc8b41fc8b78fc8b77088b1e8b57188b0a81f989000000740489c8eb0289d883f80375308b45008d40f43b45087303ff5520894500c740fc02000000c74004010000008b1c2489188b54240483c414e9a4feffff8b042483c414c390|@1116,63|58,1,@960 67,0,@1107 74,1,@1109 82,1,@1111 116,0,@1107 126,0,-1 141,0,0 148,0,@1107 230,1,@1113 246,0,@745 254,1,@747 327,0,0 1116:S64|50415253455f5459504528292e7061727365547970652833297475706c6554797065283129626173696354797065283129636f6e7374727563746f7273283129 1117:S49|50415253455f5459504528292e7061727365547970652833297475706c6554797065283129626173696354797065283129 1118:C2,116|3b650c7303ff5524528b42f890e8f2e6ffff8b3c248b77fc50ff76fcbb68b77541b861000000ba00a375410bc0e816d9ffff83f801740f8b5424040bc0e8beffffff89c3eb05bb010000008b55008d52f43b55087303ff5520895500c742fc02000000895a048b0c24890a89d083c408c383c800|@1119,63|14,1,@1053 29,0,@1056 34,0,48 39,0,@1011 46,1,@1012 71,0,0 1119:S49|50415253455f5459504528292e7061727365547970652833297475706c6554797065283129706172736552657374283129 1120:C2,72|3b650c7303ff5524bb03000000baf4ca75410bc0ff1289c78b45008d40f03b45087303ff5520894500c740fc03000000c7400801000000897804c70003000000e97bfaffff83c800|@1124,63|9,0,1 14,0,@1121 51,0,0 60,0,1 65,1,@1100 1121:O1|@1122 1122:C2,144|3b650c7303ff552483f8017506b801000000c353ff30ff7004bbffffffff8b44240883c800e89a4bffff8b7d008d7ff43b7d087303ff5520897d00c747fc020000008b74240489770489078b5c2408f6c3017503ff553889da83c20270f65789d38b442404e896ffffff8b4d008d49f43b4d087303ff5520894d00c741fc020000008941048b0424890189c883c410c3|@1123,63|14,0,0 26,0,-1 38,1,@336 1123:S26|545950455f5452454528292e6d6170746f5265636f7264283229 1124:S28|545950455f5452454528292e6d6b50726f6475637454797065283129 1125:S37|50415253455f5459504528292e7061727365547970652833297475706c6554797065283129 1126:C2,44|8b388b70048b45008d40f03b45087303ff5520894500c740fc03000000897008897804c70003000000c30bc0|@1127,49|37,0,1 1127:S12|46756e6374696f6e54797065 1128:S11|456e64206f662074797065 1129:S25|50415253455f5459504528292e706172736554797065283329 1130:O3|@978,@1132,@1131 1131:O1|@1134 1132:O1|@1133 1133:C2,20|83f8717506b803000000c3b801000000c383c800|@742,1|6,0,1 12,0,0 1134:C2,20|83f86b7506b803000000c3b801000000c383c800|@742,1|6,0,1 12,0,0 1135:O1|@1136 1136:C2,20|83f8777506b803000000c3b801000000c383c800|@742,1|6,0,1 12,0,0 1137:C2,48|8b7d008d7fec3b7d087303ff5520897d00c747fc04000000895f0c8b5c2404895f088b542408895704890789f8c20800|@1138,45| 1138:S29|50415253455f5452454528292e6d6b5479706542696e64696e67283429 1139:S37|50415253455f44454328292e70617273654465632833297479706542696e64696e67283629 1140:C2,832|8d7c24a43b7d0c7303ff55285250538b4204ba505b75410bc0e8428dffff50505089e3b80100000090e842bbffff8b7d008d7ff03b7d087303ff5520897d00c747fc030000008b342489378b5c2404895f048b5424088957088b4c24145789fbb8030000008b5114ff1289c78b45008d40f43b45087303ff5520894500c740fc02000000be84a875418970048b5c2420891889f990e812daffff8b7c241851ff7704ff342489c3b8909b7541ba60a97541e8a6daffff8b342450ff7608ff760cff7610ff7614ff7618ff761cff7620ff76248b5e048b060bc0e836cbffff508b5c24088b4424040bc0e896dbffff8b5c24248b53048b4a088b018b7a188b3781fe89000000740289f083f85b750e89d0ba505b7541e8468cffffeb128b5b04b87b000000ba0c967541e8eac6ffff8b5c24248b53048b4a088b018b7a188b3781fe89000000740289f083f80f75718b74240883fe017507b801000000eb535251ff720cff7210ff721457ff721cff7220ff72248b5a048b0290e896caffff8b1c246a03ff33ff7304ff7308ff730cff7310ff7314ff7318ff731cff7320ff732489c3b86cd175410bc0e8d68cffff83c4048b5424248b4204ba505b7541eb05e93400000090e8968bffff8b4c2424ff71048b5c2430b8909b7541ba60a975410bc0e876d9ffff89c38b04248b7c242883c43057e9d80100008b45008d40f43b45087303ff5520894500c740fc02000000be54d275418970048b74242c893083c800e886d8ffff89c38b45008d40f43b45087303ff5520894500c740fc02000000ba8cd27541895004891883c800e85ad8ffff8b4c2424ff742408ff742404ff742424508b5c241c8b4424308b51100bc0ff128b7c242450ff7704bb68b77541b807000000ba00a37541e86ed2ffff83f801743b8b45008d40f43b45087303ff5520894500c740fc02000000bb54d275418958048b5424308910e8eed7ffff508d5424300bc0e8ea01000089c6eb06be01000000508b5c242c56ff7304bb68b77541b84f000000ba00a375410bc0e80ad2ffff83f801740f8d5424340bc0e8a602000089c2eb05ba010000008b4d008d49f43b4d087303ff5520894d00c741fc020000008b04248941048b7c2408893989d389c88b74243483c43c56e930030000|@1155,63|19,0,@745 26,1,@747 36,0,0 42,1,@937 97,0,1 133,0,@1023 150,1,@1025 168,0,@984 173,0,@1029 178,1,@1030 218,1,@971 234,1,@1033 273,0,@745 278,1,@747 288,0,61 293,0,@957 298,1,@959 344,0,0 378,1,@971 419,0,@1141 426,1,@752 441,0,@745 454,1,@747 470,0,@984 475,0,@1029 482,1,@1030 500,1,@1144 529,0,@1146 546,1,@1025 577,0,@1148 590,1,@1025 635,0,@1056 640,0,3 645,0,@1011 650,1,@1012 684,0,@1146 698,1,@1025 710,1,@1150 719,0,0 733,0,@1056 738,0,39 743,0,@1011 750,1,@1012 766,1,@1152 775,0,0 828,1,@1153 1141:O1|@1142 1142:C2,20|3b650c7303ff55248b780cb8a4d1754189faff22|@751,63|12,0,@1143 1143:S52|4461746174797065207265706c69636174696f6e206d757374206e6f7420636f6e7461696e2074797065207661726961626c6573 1144:C2,40|89c78b45008d40f03b45087303ff5520894500c740fc03000000895808897804c700f9ffffffc390|@1145,41|34,0,-4 1145:S37|50415253455f5452454528292e6d6b44617461747970655265706c69636174696f6e283229 1146:O1|@1147 1147:C2,20|83f84f7506b803000000c3b801000000c383c800|@742,1|6,0,1 12,0,0 1148:O1|@1149 1149:C2,20|83f8077506b803000000c3b801000000c383c800|@742,1|6,0,1 12,0,0 1150:C2,168|3b650c7303ff55248b45008d40f43b45087303ff5520894500c740fc02000000bf8cd275418978048b72d0893089d10bc0e8c2d5ffff8b79fc51508b59f48b41f88b570cff128b34248b5efc50ff7304bb68b77541b807000000ba00a375410bc0e8e2cfffff83f801740f8b5424040bc0e88affffff89c2eb05ba010000008b4d008d49f43b4d087303ff5520894d00c741fc020000008951048b0424890189c883c408c383c800|@1151,63|33,0,@1148 50,1,@1025 81,0,@1056 86,0,3 91,0,@1011 98,1,@1012 123,0,0 1151:S37|50415253455f44454328292e7061727365446563283329616e6442696e64696e6773283229 1152:C2,172|3b650c7303ff55248b45008d40f43b45087303ff5520894500c740fc02000000bf8cd275418978048b7204893089d10bc0e8ced4ffff8b79fc8b71f451ff7604ff76086a016a018b1e8b5708ff128b1c248b53fc50ff7204bb68b77541b807000000ba00a375410bc0e8e6ceffff83f801740f8b5424040bc0e882ffffff89c1eb05b9010000008b45008d40f43b45087303ff5520894500c740fc020000008948048b3c24893883c408c390|@1151,63|33,0,@1148 50,1,@1025 89,0,@1056 94,0,3 99,0,@1011 106,1,@1012 131,0,0 1153:C2,48|89c78b45008d40ec3b45087303ff5520894500c740fc0400000089580c897808c7400401000000c70007000000c30bc0|@1154,41|35,0,0 41,0,3 1154:S37|50415253455f5452454528292e6d6b44617461747970654465636c61726174696f6e283229 1155:S43|50415253455f44454328292e706172736544656328332964617461747970654465634f725265706c283329 1156:C2,192|3b650c7303ff5524525053689c797541ff72048b5c24188b4210ba68ad75410bc0e81ed8ffff8b7c24088b3424ff76088b5e048b068b570cff12508b4424148d5424100bc0e8920000008b5d008d5bf83b5d087303ff5520895d00c743fc01000040ba90c6754189138b4d008d49f83b4d087303ff5520894d00c741fc01000040c701010000008b7d008d7fe83b7d087303ff5520897d00c747fc05000000894f108b74242089770c894708895f048b5c241c891f89f883c410c2100083c800|@1169,63|12,0,@826 27,0,@1042 34,1,@1043 70,1,@1157 99,0,@1107 131,0,0 1157:C2,516|3b650c7303ff55248b7afc8b77048b5e088b0b8b7e188b1f81fb89000000740689c189d8eb0689c389c889d983f82f7507b803000000eb05b80100000083f80174188b5afc5251508b4304ba505b754190e80e85ffff89c3eb08bb010000005251508b142483fa017407b903000000eb078b4c24088b49f88b4424088b78fc8b45008d40f43b45087303ff5520894500c740fc020000008b77088970048b5c240489180bc0e806d2ffff8b5424088b7afc8b7208ff7608ff7704506818bc7541518b5e048b0683c800e85201000050508b5c24108b53fc8b4a048b79088b378b59188b1381fa89000000740689c689d0eb0689c289f089d683f82d756b8b4424108b50fc568b4204ba505b7541e85284ffff8b45008d40f43b45087303ff5520894500c740fc02000000b9d4da75418948048b7c2410893890e872d1ffff8b7424148b5efcff76f08b5b04ba94ae754190e852d7ffff8d5424048b0c24890a8d7c2404894704eb0f89e0893089e6bac8cc7441895604508b4d008d49f43b4d087303ff5520894d00c741fc020000008b44240489018b7c24088979048b7424148b5efc51ff7304bb68b77541b859000000ba00a3754183c800e842cbffff83f80174138b4424148b5424180bc0e82efeffff89c2eb05ba010000008b4d008d49f43b4d087303ff5520894d00c741fc020000008951048b0424890189c883c41cc383c800|@1168,63|50,0,1 57,0,0 76,0,@745 82,1,@747 91,0,0 107,0,1 166,1,@1025 188,0,@1076 202,1,@1158 265,0,@745 270,1,@747 299,0,@1166 314,1,@1025 332,0,@1045 338,1,@1047 367,0,@202 424,0,@1056 429,0,44 434,0,@1011 442,1,@1012 471,0,0 1158:C2,364|3b650c7303ff552453ff7424148b5c24148b442410ba60a9754183c800e81ed1ffff8b7c241450ff7708ff770cff7710ff7714ff7718ff771cff7720ff77248b5f048b0790e8aec1ffff508b5c241c8b4424040bc0e80ed2ffff8b04248b54240483c800ff12f7c00100000075348b1889d883c800e80e01000083f801740e89d8e842010000be03000000eb1a8b1383faff7507be03000000eb0cbe01000000eb05be0100000083fe0174728b74240c83fe01756e8b542418ff7208ff720cff7210ff7214ff7218ff721cff7220ff72248b5a048b0283c800e81ac1ffff508b5c2404b85100000090e89e39ffffbb14da75410bc0e89239ffff8b4d008d49f43b4d087303ff5520894d00c741fc02000000bf4cda75418939894104eb0ae937000000e9320000008b74241c6a01ff36ff7604ff7608ff760cff7610ff7614ff7618ff761cff7620ff76248b5c242c89c8e81283ffff89c3eb06bb01000000508b44240483c40cc214000bc0|@1165,63|22,0,@1029 30,1,@1030 70,1,@971 86,1,@1033 118,1,@1159 130,1,@1161 135,0,1 149,0,1 156,0,0 163,0,0 218,1,@971 228,0,40 234,1,@323 239,0,@1162 246,1,@323 275,0,@1163 338,1,@752 347,0,0 1159:C2,20|8b3883ff017506b803000000c3b801000000c390|@1160,33|8,0,1 14,0,0 1160:S5|496e666978 1161:C2,4|8b4004c3|@1160,1| 1162:S46|292068617320696e666978207374617475732062757420776173206e6f74207072656365646564206279206f702e 1163:C2,20|3b650c7303ff55248b780c8b420489faff220bc0|@1164,63| 1164:S27|4c45585f28292e7761726e696e674d657373616765283329283129 1165:S42|50415253455f44454328292e706172736544656328332967657453686f72744e6f6e496e666978283729 1166:O1|@1167 1167:C2,20|83f8597506b803000000c3b801000000c383c800|@742,1|6,0,1 12,0,0 1168:S48|50415253455f44454328292e7061727365446563283329646174617479706542696e64283629636f6e73747273283129 1169:S38|50415253455f44454328292e7061727365446563283329646174617479706542696e64283629 1170:C2,348|3b650c7303ff55245050505250538d5c240cb8010000000bc0e8eeadffff8b7d008d7ff03b7d087303ff5520897d00c747fc030000008b74240c89378b5c2410895f048b5424148957088b4c24085789fbb8030000008b510c83c800ff1289c78b45008d40f43b45087303ff5520894500c740fc02000000be84a875418970048b5c2420891889f990e8baccffff8b7c240c51ff7708ff342489c3b8909b7541ba60a97541e84ecdffff8b342450ff7608ff760cff7610ff7614ff7618ff761cff7620ff76248b5e048b060bc0e8debdffff508b5c24088b4424040bc0e83eceffff8b5c24188b53088b4a088b018b7a188b3781fe89000000740289f083f85b750e89d0ba505b7541e8ee7effffeb128b5b08b87b000000ba0c967541e892b9ffff8b5c24188b54242c8b4c2408894c242c8b04248b7c2428894424288b74241089742424895424208b4b048b5c240c8b44241489ca83c42057ff22|@1171,63|19,0,0 26,1,@937 82,0,1 121,0,@1023 138,1,@1025 156,0,@984 161,0,@1029 166,1,@1030 206,1,@971 222,1,@1033 261,0,@745 266,1,@747 276,0,61 281,0,@957 286,1,@959 1171:S41|50415253455f44454328292e7061727365446563283329646174617479706542696e64696e67283329 1172:C2,156|3b650c7303ff552450505052538d5c2408b80100000083c800e842acffff8b7c24048b75008d76f03b75087303ff5520897500c746fc03000000bbd8dd7541891e8b57048956088b4c240c894e048b45008d40f03b45087303ff5520894500c740fc03000000bb58df754189188b5c24108958088970048b34248b5c2408891e8b3424894e048b5c2410895e0889460cb80100000083c414c383c800|@1177,63|18,0,0 26,1,@937 59,0,@1173 103,0,@1175 145,0,0 1173:C2,296|3b650c7303ff5524f7c0010000007407bf03000000eb068b388d7c3f01f7c7010000007503ff553883ff037e5df7c0010000007407bf03000000eb068b388d7c3f01f7c7010000007503ff553883ff037f1189c7b824ae74410bc0ff552cbe01000000f7c001000000740489c6eb080fb670058d7436015250bb4f00000089f0ff154094040889c6eb07be0100000052508b5c2404568b5b088b442404e86ebfffff5050ff7424086a03508d54240c52bb1f4e0000b8c8cc744183c800e846c2ffff8b45008d40f43b45087303ff5520894500c740fc020000008b0c2489088b7c240489780483c800e8dec2ffff8b74241089c38b45008d40f43b45087303ff5520894500c740fc020000008958048b54240c8910538b560483c800ff128b042483c418c383c800|@1174,63|17,0,1 54,0,1 85,0,@51 95,0,0 122,0,39 130,0,I24 139,0,0 158,1,@994 177,0,9999 182,0,@202 190,1,@1003 234,1,@1005 1174:S50|50415253455f44454328292e70617273654465632833296d616b6554797065566172456e762832296c6f6f6b757054283129 1175:C2,48|3b650c7303ff552452508b520883c800ff12f7c00100000075068b0083c408c38b7c24048b04248b570483c408ff2290|@1176,63| 1176:S43|50415253455f44454328292e70617273654465632833296d616b6554797065566172456e76283229283129 1177:S40|50415253455f44454328292e70617273654465632833296d616b6554797065566172456e76283229 1178:C2,3496|8d7c24843b7d0c7303ff55288b7d008d7fec3b7d087303ff5520897d00c747fc04000000becced754189378b725889770c8957088b4c2408894f048b4d008d49f43b4d087303ff5520894d00c741fc02000000bef4f0754189318b7424088971048b75008d76dc3b75087303ff5520897500c746fc08000000525053ff305751ff7250ff7238ff723cff7248ff725456bae8fa754189168b54240489561c8b5424388956188b4424088946148b44240c8946108b44241089460c8b442414894608894e048b44242c8b5d008d5bc03b5d087303ff5520895d00c743fc0f000000ba0c1376418913897338897b348b504c8953308b7848897b2c8b4844894b288b70408973248b703c8973208b703889731c8b70348973188b7424188973148b70308973108b702c89730c8b70288973088b7424388973048b74242483fe017402eb2f8b7424388b4e088b398b56188b0281f8890000007402eb0289f853bb40ef754183c800e89a79ffff83f8017503eb3c538b5c243c8b53088b0a8b43188b3881ff89000000740489feeb0289ce89f1f7c101000000741a83f9057c1a83f93d7f1abfcae175418d7c8fecffe7e9700a0000e9f3000000e9ee000000e9e900000090e956040000909090e9db000000909090e9d3000000909090e9cb000000909090e9c3000000909090e90c040000909090e9b3000000909090e9ab000000909090e9a3000000909090e99f050000909090e993000000909090e98c020000909090e983000000909090e97b000000909090e973000000909090e9cb070000909090e9c3070000909090e95b000000909090e97c050000909090e9ab070000909090e943000000909090e93b000000909090e933000000909090e92b000000909090e923000000909090e91b000000909090e913000000909090e936030000909090e9ac00000090909053bb68b77541b831000000ba00a3754183c800e842c0ffff83f80174718b74243c8b5e088b138b4e188b0181f889000000740489c7eb0289d7bb5826764189f883c800e81278ffff83f801741cb8010000008d54243490e8ae5500008b7c243483c44057e9cd5600008b5c243cb884997541ba0c967541e8fab2ffff8b44243cba505b75410bc0e83278ffffeb05e90b000000b8d411764183c434c20800b8d411764183c434c2080089d8ba505b754183c800e80678ffff505050508b74244089e3b8010000008b5608ff12505050508b5c24508b530889e3b801000000ff128b4c244c8b45008d40f03b45087303ff5520894500c740fc03000000bf703a764189388b7424088970088b5c241c8958048b55008d52f03b55087303ff5520895500c742fc030000008942088b41048942048b39893a8b5d008d5bf03b5d087303ff5520895d00c743fc030000008973088b7424048973048b342489338b74245052b8030000008b5604ff128b45008d40f43b45087303ff5520894500c740fc02000000bb8cd275418958048b54245c891090e872c4ffff8d54245883c800e8965600008b4d008d49f43b4d087303ff5520894d00c741fc020000008b7c240c8979048b74240489318b5d008d5bf43b5d087303ff5520895d00c743fc020000008b54241c8953048b7c2414893b895c246089cb8b74245883c46056e9d558000089d8ba505b754183c800e8ae76ffff505050508b74244089e3b8010000008b5608ff12505050508b5c24508b530889e3b801000000ff128b4c244c8b45008d40f03b45087303ff5520894500c740fc03000000bf203e764189388b7424088970088b5c241c8958048b55008d52f03b55087303ff5520895500c742fc030000008942088b41048942048b39893a8b5d008d5bf03b5d087303ff5520895d00c743fc030000008973088b7424048973048b342489338b74245052b8030000008b5604ff128d54245883c800e8ea5800008b5d008d5bf43b5d087303ff5520895d00c743fc020000008b54240c8953048b4c2404890b8b7d008d7ff43b7d087303ff5520897d00c747fc020000008b74241c8977048b5424148917897c24608b4c245883c46051e9eb5c000089d8ba505b754190e88675ffff8d54243483c800e8465d00008b74243483c44056e9015e00008b7424308b4c2438894c243c8b5c242cb8010000008b56148b7c243483c43c57ff2289d8ba505b754190e83e75ffff8b7424308b45008d40f43b45087303ff5520894500c740fc020000008b5e1c8958048b542438891083c800e85ac2ffff508d5424380bc0e8ee5d000050ff742444bb68b77541b84f000000ba00a3754183c800e882bcffff83f801743b8b45008d40f43b45087303ff5520894500c740fc02000000bf244576418978048b7424408930e802c2ffff508d5424400bc0e8965e000089c1eb06b901000000508b4424488b78088b378b58188b1381fa89000000740489d0eb0289f083f83f7513518b44244cba505b75410bc0e86e74ffffeb16518b5c244cb8ec797541ba0c9675410bc0e80eafffff8b45008d40f43b45087303ff5520894500c740fc02000000b9244676418948048b7c2448893890e876c1ffff89c38b44243c8b542430ff128b74244c8b5e088b138b4e188b3981ff89000000740689c289f8eb0689c789d089fa83f815750f5289f0ba505b7541e8ea73ffffeb125289f3b8887a7541ba0c967541e88eaeffff8b3424897424508b5c24048b44240c8b54244883c45052e9a65e000089d8ba505b7541e8ae73ffff8d54243483c800e8065f00008b74243483c44056e99962000089d8ba505b754183c800e88673ffff5050508b742438505050ff7604ff76088d5c2408b8010000000bc0e876a1ffff8b5d008d5bf03b5d087303ff5520895d00c743fc03000000bacc4a764189138b4c2410894b088b4424048943048d7c24148b74240c89378d542414895a048d4c24148b04248941088b7d008d7ff03b7d087303ff5520897d00c747fc030000008b74241489378b5c2418895f048b54241c8957088b4c24508b45008d40f43b45087303ff5520894500c740fc020000008b51248950048b5c24588918570bc0e80ec0ffff89c38b04248b54244490ff128b5424608b4a088b398b72188b1e81fb89000000740689c789d8eb0689c389f889df83f821750f5789d0ba505b7541e88272ffffeb125789d3b8707a7541ba0c967541e826adffff5050508b55008d52f03b55087303ff5520895500c742fc03000000b9144b7641890a8b4424288942088b7c2458897a0489e6891689e38b54242c89530489e18b4424308941088b7d008d7ff03b7d087303ff5520897d00c747fc030000008b342489378b5c2404895f048b5424088957088b45008d40f43b45087303ff5520894500c740fc02000000b9244676418948048b74246c893089f90bc0e81abfffff89c389c88b5424540bc0ff128b7c24708b77088b1e8b57188b0a81f989000000740689c389c8eb0689c189d889cb83f815750f5389f8ba505b7541e88e71ffffeb125389fbb8887a7541ba0c967541e832acffffc7442474030000008b1c248b4424108b7c246c83c47457e9aa3b00005689d8ba505b754183c800e84e71ffff8b1c2483fb2b7507be08cd7441eb598b5424408b4a088b018b7a188b3781fe89000000740289f081f881000000756051ff720cff7210ff721457ff721cff7220ff72248b5a048b0283c800e8a6adffffbb804b76410bc0e852690000f7c00100000075098b38eb15e95b010000b874f5754183c800ff552cbf01000000f7c7010000007503ff553883ff017d07eb17e9f6000000f7c7010000007503ff553883ff137f02eb6d8b74244057ff7608ff760cff7610ff7614ff7618ff761cff7620ff76248b5e048b0683c800e832afffff8b5c244489c1ff7308ff730cff7310ff7314ff7318ff731cff7320ff73248b038b7b0489fb0bc0e8faacffff5189c3b83c55764183c800e88a27ffffbb50557641eb05e95a00000083c800e87627ffff8b75008d76f43b75087303ff5520897500c746fc02000000bb80557641891e8946048b5424486a03ff32ff7204ff7208ff720cff7210ff7214ff7218ff721cff7220ff72248b5c242c89f0e80271ffffeb0257508b442448ba505b75410bc0e8ca6fffff8b442404eb07b80100000050508b5c240883fb23750a90e8ee69000089c6eb218b75008d76f43b75087303ff5520897500c746fc02000000894604c706ffffffff83c4085668f0557641ff7424488b5c2448b858267641ba68ad754183c800e86ac1ffffb8010000008d54243c0bc0e8e66900008b1c248b54243c83c44852e9f26a0000505050508b7c244089e3b8010000008b5708ff12505050508b74245089e3b8010000008b5608ff128b5c244c8b55008d52f03b55087303ff5520895500c742fc030000008b4c241c894a088b43048942048b3b893a8b74245c52ff7608ff760cff7610ff7614ff7618ff761cff7620ff76248b5e048b06e87eadffff508b5c24608b4424048b54242890ff128b5d008d5bf83b5d087303ff5520895d00c743fc01000040ba589c754189138b4d008d49f83b4d087303ff5520894d00c741fc01000040bff8f9754189398b75008d76ec3b75087303ff5520897500c746fc04000000895e0c894e08bb84577641895e04c706f1ffffffff342489c389f00bc0e8c24f00008b55008d52f43b55087303ff5520895500c742fc02000000c742040100000089028b4d008d49f43b4d087303ff5520894d00c741fc020000008b4424108941048b7c240889398b75008d76f43b75087303ff5520897500c746fc020000008b5c2420895e048b44241889068974246489cb89d08b7c245c83c46457e9da4f00000bc0|@1388,63|37,0,@1179 84,0,@1183 145,0,@1204 225,0,@1257 350,0,@1180 358,1,@743 419,0,$1178+450 684,0,@1056 689,0,24 694,0,@1011 702,1,@1012 740,0,@1275 750,1,@743 760,0,0 770,1,@1321 783,1,@1323 792,0,@964 797,0,@957 802,1,@959 811,0,@745 818,1,@747 830,0,@1251 841,0,@1251 854,0,@745 862,1,@747 877,0,0 900,0,0 935,0,@1325 1037,0,1 1071,0,@1148 1086,1,@1025 1098,1,@1327 1191,1,@1331 1198,0,@745 1206,1,@747 1221,0,0 1244,0,0 1279,0,@1333 1381,0,1 1398,1,@1334 1489,1,@1341 1496,0,@745 1502,1,@747 1514,1,@1343 1527,1,@1344 1548,0,0 1568,0,@745 1574,1,@747 1622,1,@1025 1634,1,@1346 1644,0,@1056 1649,0,39 1654,0,@1011 1662,1,@1012 1696,0,@1347 1710,1,@1025 1722,1,@1349 1731,0,0 1775,0,@745 1782,1,@747 1794,0,@832 1799,0,@957 1806,1,@959 1835,0,@1350 1850,1,@1025 1909,0,@745 1914,1,@747 1924,0,@845 1929,0,@957 1934,1,@959 1962,1,@1352 1969,0,@745 1974,1,@747 1986,1,@1354 1999,1,@1357 2006,0,@745 2014,1,@747 2039,0,0 2046,1,@937 2075,0,@1359 2210,1,@1025 2269,0,@745 2274,1,@747 2284,0,@843 2289,0,@957 2294,1,@959 2326,0,@1360 2436,0,@1350 2454,1,@1025 2513,0,@745 2518,1,@747 2528,0,@845 2533,0,@957 2538,1,@959 2546,0,1 2566,1,@1273 2574,0,@745 2582,1,@747 2595,0,@207 2662,1,@960 2667,0,@1362 2674,1,@1375 2696,0,@1191 2707,0,0 2790,1,@971 2834,1,@960 2842,0,@1379 2850,1,@323 2855,0,@1380 2870,1,@323 2899,0,@1381 2950,1,@752 2963,0,@745 2970,1,@747 2981,0,0 2998,1,@1382 3035,0,-1 3044,0,@1383 3057,0,@1275 3062,0,@1042 3070,1,@1043 3075,0,0 3086,1,@1384 3102,1,@1385 3117,0,0 3137,0,0 3226,1,@971 3271,0,@989 3302,0,@1198 3339,0,@1387 3348,0,-8 3362,1,@1328 3393,0,0 3490,1,@1331 1179:C2,344|3b650c7303ff55248b7a048b77088b0e8b77188b3e81ff89000000740489feeb0289ce83fe7375225250538b4204ba505b75410bc0e86a6dffff8b1c248b4424048b54240883c40cebb68b72048b4e088b398b4e188b3181fe89000000740489f1eb0289f9525053bb40ef754189c80bc0e8ca6cffff83f801746d8b5c24088b5304ff7208ff720cff7210ff7214ff7218ff721cff7220ff72248b5a048b020bc0e8b2abffff8b4c240889c78b45008d40f43b45087303ff5520894500c740fc020000008b710c8970048b1c2489185790e81abaffffff710450bb030000008b4424108b5108eb05e95f00000083c800ff128b55008d52f43b55087303ff5520895500c742fc020000008b0c24894a048902528b5c24088b44240c8b5424100bc0e8dafeffff8b7d008d7ff43b7d087303ff5520897d00c747fc020000008947048b3424893789f883c414c3b80100000083c40cc383c800|@1182,63|47,0,@745 54,1,@747 105,0,@1180 114,1,@743 162,1,@971 210,1,@1025 219,0,1 333,0,0 1180:O1|@1181 1181:C2,348|89c7f7c701000000741583ff057c1583ff3b7f15be76ef75418d74beecffe6e9ea000000e9e5000000e9e0000000e91c010000909090e9d3000000909090e9cb000000909090e9c3000000909090e9bb000000909090e9c4000000909090e9ab000000909090e9a3000000909090e99b000000909090e9ce000000909090e98b000000909090e99a000000909090e97b000000909090e973000000909090e96b000000909090e992000000909090e984000000909090e953000000909090e980000000909090e966000000909090e93b000000909090e933000000909090e948000000909090e923000000909090e91b000000909090e913000000909090e90b000000909090e94a00000090909083f83d7506b803000000c3b801000000c3b803000000c3b803000000c3b803000000c3b803000000c3b803000000c3b803000000c3b803000000c3b803000000c3b803000000c3b803000000c390|@979,49|21,0,$1181+46 276,0,1 282,0,0 288,0,1 294,0,1 300,0,1 306,0,1 312,0,1 318,0,1 324,0,1 330,0,1 336,0,1 342,0,1 1182:S43|50415253455f44454328292e706172736544656328332964656328342964656353657175656e6365283229 1183:C2,152|3b650c7303ff55248b45008d40f43b45087303ff5520894500c740fc020000008b7c240c897804bea8f17541893089d153e892b7ffff5150505050505089e3b8010000008d54242090e89e0000008b442410a8017503ff553883f8017d0a8b44240883c420c21400ff3424ff742408ff742410ff74241850bb01000000b85d0000008d54243483c800e8520400008b400883c420c2140090|@1203,63|40,0,@1184 50,1,@1025 64,0,0 74,1,@1186 121,0,0 126,0,46 138,1,@1194 1184:O1|@1185 1185:C2,20|83f82f7506b803000000c3b801000000c383c800|@742,1|6,0,1 12,0,0 1186:C2,372|3b650c7303ff55248b45008d40f43b45087303ff5520894500c740fc020000008b7a088978048b7204893089d15383c800e8a6b6ffff89c78b45008d40f43b45087303ff5520894500c740fc020000008b71f48970048b590489185790e87ab6ffff518b51100bc0ff128b5c24048b1424e81a0100008b14248b4af88b79048b77088b1e8b57188b0a81f989000000740689c389c8eb0689c189d889cb8b0c24538b590890e88268ffff83f801741d8b7c24048b77f8ff76048b5f048b4708ba60a9754190e8c2b6ffffeb05b84097040850bb4097040890ff154094040883f8017407b808cd7441eb298b4424088b78fc8b042489fa0bc0ff12f7c00100000075048b00eb0db874f57541ff552cb80100000089c689f00bc0e8b6e6ffff83f801740b89f0e8eae6ffff89c3eb118b1e83fbff75058b5e04eb05bbffffffff8b0e83f9ff7507ba03000000eb05ba010000008b44241089308950048b7c24048978088b142489500c895810b80100000083c414c3|@1193,63|50,1,@1025 94,1,@1025 114,1,@1187 166,1,@743 192,0,@1029 198,1,@1030 205,0,I48 211,0,I48 218,0,I24 228,0,@207 263,0,@1191 271,0,0 282,1,@1159 294,1,@1161 315,0,-1 327,0,1 334,0,0 364,0,0 1187:C2,316|3b650c7303ff55248b7af88b77048b4e088b398b4e188b3181fe89000000740489f1eb0289f95250538b5a0c89c883c800e86667ffff83f80174758b5c24088b53f88b4a048b41088b388b71188b1e81fb89000000740489d8eb0289f88b7c24088b5f0890e83267ffff83f801745d8b7424088b5ef88b5304ff7208ff720cff7210ff7214ff7218ff721cff7220ff72248b5a048b0283c800e80aa4ffff8b56fc83c800ff12f7c0010000007532eb05e97c0000008b0889c8e886e5ffff83f801740e89c8e8bae5ffffeb0ce90f0000008b0183f8ff75088b44240483c40cc38b7424088b45008d40f43b45087303ff5520894500c740fc020000008b5e0c8958048b142489108b4e1083c800e83ab4ffff89caff1289c38b44240490e8360000008b1c248b54240883c40ce9cffeffff8b44240483c40cc383c800|@1190,63|50,1,@743 102,1,@743 154,1,@960 186,1,@1159 198,1,@1161 270,1,@1025 286,1,@1188 1188:C2,40|89c78b45008d40f03b45087303ff5520894500c740fc03000000895808897804c70003000000c390|@1189,41|34,0,1 1189:S24|50415253455f5452454528292e6d6b4170706c6963283229 1190:S61|50415253455f44454328292e70617273654465632833296465632834297061727365496e66697828372970617273654170706c69636174696f6e283229 1191:O3|@7367,@1192,0 1192:S6|4f7074696f6e 1193:S56|50415253455f44454328292e70617273654465632833296465632834297061727365496e666978283729726561644e6578744f7073283229 1194:C2,900|8d7c24a83b7d0c7303ff552850505050505250538d5c240cb801000000e8eafbffff8b7d008d7fe83b7d087303ff5520897d00c747fc050000008b74240c89378b5c2410895f048b5424148957088b4c2418894f0c8b44241c8947108b4424088b48f88b510457bbcc9f75418b4224ba703d754190e83a47ffff83f8017407b901000000eb728b4c24208b442428510bc8f6c101597503ff55383bc8755f8b7c24348b7424143bfe74588b5c240c8b53f88b4a0451ff7108ff710cff7110ff7114ff7118ff711cff7120ff71248b59048b0183c800e876a3ffff8b3c246a03ff37ff7704ff7708ff770cff7710ff7714ff7718ff771ceb0fe92a000000e91c000000e917000000ff7720ff772489c3b874f9754190e8a665ffff89c1eb06b9010000005083c4048b7c24208b7424285623f7f7c6010000005e7503ff55383bfe7e02eb5c8b5c243483fb0174718b54240c8b4af88b4104bbcc9f75418b4024ba703d754190e84a46ffff83f80174168b5c242c8b44241c90ff154094040883f801751deb718b7c24208b742428560bf7f7c6010000005e7503ff55383bfe75568b542428f6c2017503ff553889d183c10270f68b44243483f801740deb05e9330000008b7c242ceb05bf5d000000ff742410ff742418ff742420ff742428ff74243089cb89f88b54242083c800e80efeffff89c3eb038b1c248b7d008d7ff83b7d087303ff5520897d00c747fc01000040be589c754189378b55008d52f83b55087303ff5520895500c742fc01000040b9f8f97541890a8b45008d40ec3b45087303ff5520894500c740fc0400000089780c8950088b7c242c897804c700f1ffffff8b75008d76f43b75087303ff5520897500c746fc02000000c74604010000008b5308891689c18b45008d40f43b45087303ff5520894500c740fc020000008970048b7424308930e89e0100005389c389c80bc0e83afcffff8b1c248b55008d52e83b55087303ff5520895500c742fc050000008b4b10894a108b7b0c897a0c8942088b73048972048b3b893a8b3c248b4f108b7424085123cef6c101597503ff55383bce7c02eb278b342450ff730cff33ff7310ff7304528b5c24248b460c83c800ff154094040883f801750feb4950ff730cff33ff7310ff7304528b5c240c895c24548b542404895424508b4c2414894c244c8b442410894424488b7c2408897c24448b5c24208b4424248b54242883c440e986fcffff8b042483c440c2140090|@1202,63|25,0,0 30,1,@1186 104,0,@995 112,0,@599 118,1,@601 128,0,0 214,1,@971 272,0,@1195 278,1,@752 287,0,0 344,0,@995 352,0,@599 358,1,@601 378,0,I24 458,0,46 530,0,@989 561,0,@1198 606,0,-8 637,0,0 682,1,@1200 694,1,@1188 806,0,I24 1195:O1|@1196 1196:C2,20|3b650c7303ff55248b780cb8acf9754189faff22|@751,63|12,0,@1197 1197:S66|4d6978656420726967687420616e64206c656674206173736f63696174697665206f70657261746f7273206f66207468652073616d6520707265636564656e63652e 1198:O4|@1199,-1,@561,@989 1199:S11|3c756e646566696e65643e 1200:C2,36|89c78b45008d40f43b45087303ff5520894500c740fc02000000897804c7001b000000c3|@1201,33|31,0,13 1201:S9|5475706c6554726565 1202:S54|50415253455f44454328292e70617273654465632833296465632834297061727365496e6669782837296e6578744c6576656c283729 1203:S42|50415253455f44454328292e70617273654465632833296465632834297061727365496e666978283729 1204:C2,296|3b650c7303ff55248b7d008d7fe83b7d087303ff5520897d00c747fc05000000be2cfc754189378b7218897710895f0c8947088957048b4d008d49d43b4d087303ff5520894d00c741fc0a000000bee8ff754189318b721c8971248b72188971208b721489711c8979188b72108971148b720c89711089410c895108895904525053575168c4117641538b5c2420b81c127641ba68ad754190e8eeb1ffff8b5c24108b45008d40f43b45087303ff5520894500c740fc020000008b53088950048b4c2418890883c800e806adffff8b7c24108b74240cff7608ff742404681c1276416818bc7541508b5e048b068b5704ff1289c38b4424188b542404ff125068c4127641ff742410bb68b775418b442424ba68ad754183c800e86eb1ffff8b042483c418c2040090|@1256,63|33,0,@1205 79,0,@1218 133,0,@1250 143,0,@1253 148,0,@1042 154,1,@1043 202,1,@1025 222,0,@1253 227,0,@1076 256,0,@1255 265,0,@1056 274,0,@1042 282,1,@1043 1205:C2,416|8d7c24a83b7d0c7303ff552889d689c189d883c800e8a201000089c78b45008d40f43b45087303ff5520894500c740fc02000000ba38fe75418950048908565357e84aacffff8b7c24085150ff77088b7424108b1c248b54241456ff7308ff7210bb68b77541b85f000000ba00a3754190e86aa6ffff83f801745d8b45008d40f43b45087303ff5520894500c740fc02000000bf08ba75418978048b74240c8930e8eaabffff8b5c241cff34248b5b10ba94ae7541e8ceb1ffff89c38b44240490e87e01000089c683c4083b650c7303ff5524e97bffffffe905000000b9010000008b4c24048b44241c51ff700cbb68b77541b80b000000ba00a37541e8dea5ffff83f80174698b7c241883ff0175658b7424208b5e0c53ff7308ff730cff7310ff7314ff7318ff731cff7320ff73248b138b4b0489cb89d0e8ba9cffff8b3c246a03ff37ff7704ff7708ff770cff7710ff7714ff7718ff771cff7720ff772489c3b8d8fe75410bc0e8fa5effffeb06e923000000508b742424ff7424188b5e0c8b46088b560490ff1289c38b44240483c428e9740100008b042483c424c390|@1217,63|22,1,@1206 53,0,@1208 66,1,@1025 98,0,@1056 103,0,47 108,0,@1011 114,1,@1012 148,0,@1069 162,1,@1025 177,0,@1045 182,1,@1047 194,1,@1210 222,0,0 239,0,@1056 244,0,5 249,0,@1011 254,1,@1012 314,1,@971 355,0,@1212 362,1,@752 404,1,@1215 1206:C2,20|8b3883fff17506b803000000c3b801000000c390|@1207,33|8,0,1 14,0,0 1207:S23|50415253455f5452454528292e69734964656e74283129 1208:O1|@1209 1209:C2,20|83f80b7506b803000000c3b801000000c383c800|@742,1|6,0,1 12,0,0 1210:C2,40|89c78b45008d40f03b45087303ff5520894500c740fc03000000897808895804c700fbffffffc390|@1211,41|34,0,-3 1211:S28|50415253455f5452454528292e6d6b436f6e73747261696e74283229 1212:O1|@1213 1213:C2,20|3b650c7303ff55248b780cb810ff754189faff22|@751,63|12,0,@1214 1214:S32|4578706563746564206964206f722069643a7479206265666f72652060617327 1215:C2,40|89c78b45008d40f03b45087303ff5520894500c740fc03000000895808897804c700efffffffc390|@1216,41|34,0,-9 1216:S25|50415253455f5452454528292e6d6b4c617965726564283229 1217:S61|50415253455f44454328292e70617273654465632833296465632834297061747465726e283329636f6e73747261696e744f724c617965726564283229 1218:C2,2032|3b650c7303ff55248b7a048b77088b1e8b4f188b3181fe89000000740689c389f0eb0689c689d889f383f86775168b4204ba505b754183c800e84a5bffffb8f4077641c383f86d756352538b4204ba505b75410bc0e82e5bffff8b5c24048b53048b4a088b018b7a188b3781fe89000000740289f083f86f740e8d54240883c800e88e070000eb05b8010000008b5c24048b53048b4a088b398b72188b0e81f989000000740b89c789c8eb0be93c00000089c189f889cf83f86f7510578b4304ba505b7541e8be5affffeb16578b5b04b8bb000000ba0c96754183c800e85e95ffff8b042483c40ce93708000083f869757252538b4204ba505b754190e8865affff8b5c24048b53048b4a088b018b7a188b3781fe89000000740289f083f86b74718b45008d40f43b45087303ff5520894500c740fc020000008b73148970048b0c248908e88aa7ffff8b7c2404508b5f048b470c8b5708ff128b74240450ff7604eb05e9bc000000bb68b77541b871000000ba00a3754190e8a6a1ffff83f801743d8d54240c0bc0e8e20700008b5d00eb05e92d0000008d5bf43b5d087303ff5520895d00c743fc020000008943048b1424891389d80bc0e87af8ffffeb0b8b0424eb06b8680a7641508b5c24088b53048b4a088b398b72188b0e81f989000000740689c789c8eb0689c189f889cf83f86b7513578b4304ba505b754183c800e88259ffffeb16578b5b04b853000000ba0c96754183c800e82294ffff8b042483c410c38b72048b4e088b398b4e188b3181fe89000000740489f1eb0289f983f975756a52538b4204ba505b75410bc0e83259ffff8b5c2404ff7304bb68b77541b877000000ba00a3754190e8b2a0ffff83f8017409b8680a764183c408c3505089e3b8010000008d542410e8f60700008b54240c8b4a048b41088b388b71188b1e81fb89000000740989d8eb07e97b00000089f883f877751189c8ba505b754183c800e8be58ffffeb1289cbb8fb000000ba0c96754190e86293ffff8b55008d52f83b55087303ff5520895500c742fc01000040b9c8cc7441890a8b45008d40ec3b45087303ff5520894500c740fc040000008b7c240489780c8950088b3424897004c7001100000083c410c383f87f75738b5a2089d1ff7308ff730cff7310ff7314ff7318ff731cff7320ff73248b038b7b0489fb90e8d294ffff508b4120ba505b75410bc0e81a58ffff8b75008d76f83b75087303ff5520897500c746fc01000040bb589c7541891e8b45008d40ec3b45087303ff5520894500c740fc04000000eb05e91b000000badc0e764189500c8b0c24894808897004c700edffffff83c404c381f88100000075748b5a2089d1ff7308ff730cff7310ff7314ff7318ff731cff7320ff73248b038b7b0489fb0bc0e83694ffff508b4120ba505b75410bc0e87e57ffff8b75008d76f83b75087303ff5520897500c746fc01000040bb589c7541891e8b45008d40ec3b45087303ff5520894500c740fc04000000eb05e91b000000ba240f764189500c8b0c24894808897004c700edffffff83c404c381f88300000075718b5a04528b4b24bbcc9f754189c8ba703d754183c800e81a39ffff83f8017402eb648b04248b780457ff7708ff770cff7710ff7714ff7718ff771cff7720ff77248b5f048b07e88695ffff8b34246a03ff36ff7604ff7608ff760cff7610ff7614ff7618ff761cff7620ff762489c3eb05e9a1000000b8480f764183c800e8be57ffff83c4048b1c248b5320ff7208ff720cff7210ff7214ff7218ff721cff7220ff72248b5a048b0290e81693ffff8b0c24508b4120ba505b754183c800e85a56ffff8b45008d40f83b45087303ff5520894500c740fc01000040bf589c7541893889c68b45008d40ec3b45087303ff5520894500c740fc04000000bbb00f764189580c8b1424895008897004c700edffffff83c408c381f88700000075758b5a2089d1ff7308ff730cff7310ff7314ff7318ff731cff7320ff73248b038b7b0489fb83c800e87a92ffff508b4120ba505b75410bc0e8c255ffff8b75008d76f83b75087303ff5520897500c746fc01000040bb589c7541891e8b45008d40ec3b45087303ff5520894500c740fc04000000eb05e91b000000bad40f764189500c8b0c24894808897004c700edffffff83c404c381f88500000075748b5a2089d1ff7308ff730cff7310ff7314ff7318ff731cff7320ff73248b038b7b0489fb0bc0e8de91ffff508b4120ba505b75410bc0e82655ffff8b75008d76f83b75087303ff5520897500c746fc01000040bb589c7541891e8b45008d40ec3b45087303ff5520894500c740fc04000000eb05e91b000000baf80f764189500c8b0c24894808897004c700edffffff83c404c38b4a048b41088b388b71188b0681f8890000007402eb0289f852538b5a24e84654ffff83f80174718b7c24048b77048b5e088b138b4e188b0181f8890000007402eb0289d083f82f7507ba03000000eb05ba0100000083fa0174125289f0ba505b754183c800e86254ffffeb06b801000000528b7c24088b770cff7608ff7704ff74240c6818bc7541ff7424108b5e048b06e8e2080000eb05e96b0000008b5d008d5bf83b5d087303ff5520895d00c743fc01000040ba589c754189138b4d008d49f83b4d087303ff5520894d00c741fc01000040bff8f97541893989c68b45008d40ec3b45087303ff5520894500c740fc0400000089580c894808897004c700f1ffffff83c40cc38b7c240468c4117641ff77048b5c2408b868b77541ba68ad754183c800e8a6a5ffffb8d411764183c408c390|@1252,63|50,0,@745 58,1,@747 63,0,@1219 79,0,@745 86,1,@747 130,1,@1220 137,0,0 193,0,@745 198,1,@747 209,0,93 214,0,@957 222,1,@959 233,1,@1222 248,0,@745 254,1,@747 326,1,@1025 362,0,@1056 367,0,56 372,0,@1011 378,1,@1012 394,1,@1224 442,1,@1200 454,0,@1226 506,0,@745 514,1,@747 525,0,41 530,0,@957 538,1,@959 587,0,@745 594,1,@747 606,0,@1056 611,0,59 616,0,@1011 622,1,@1012 632,0,@1226 645,0,0 654,1,@1227 702,0,@745 710,1,@747 719,0,125 724,0,@957 730,1,@959 759,0,@202 807,0,8 858,1,@960 867,0,@745 874,1,@747 903,0,@989 941,0,@1232 959,0,-10 1014,1,@960 1023,0,@745 1030,1,@747 1059,0,@989 1097,0,@1236 1115,0,-10 1139,0,@995 1146,0,@599 1154,1,@601 1202,1,@971 1250,0,@1238 1258,1,@752 1302,1,@960 1314,0,@745 1322,1,@747 1351,0,@989 1384,0,@1241 1402,0,-10 1458,1,@960 1467,0,@745 1474,1,@747 1503,0,@989 1541,0,@1243 1559,0,-10 1614,1,@960 1623,0,@745 1630,1,@747 1659,0,@989 1697,0,@1245 1715,0,-10 1754,1,@743 1798,0,1 1805,0,0 1818,0,@745 1826,1,@747 1833,0,0 1856,0,@1076 1870,1,@1247 1906,0,@989 1937,0,@1198 1980,0,-8 1993,0,@1250 2005,0,@1056 2010,0,@1042 2018,1,@1043 2023,0,@1251 1219:O1|-16 1220:C2,168|3b650c7303ff55248b7afc8b45008d40f43b45087303ff5520894500c740fc020000008b77108970048b5af8891889d190e88aa0ffff8b79fc51508b5f048b470c8b5708ff128b34248b5efc50ff7304bb68b77541b871000000ba00a375410bc0e8aa9affff83f801740f8b5424040bc0e88affffff89c2eb05ba010000008b4d008d49f43b4d087303ff5520894d00c741fc020000008951048b0424890189c883c408c383c800|@1221,63|50,1,@1025 81,0,@1056 86,0,56 91,0,@1011 98,1,@1012 123,0,0 1221:S68|50415253455f44454328292e70617273654465632833296465632834297061747465726e28332961746f6d69635061747465726e283129702d766172734c697374283129 1222:C2,36|89c78b45008d40f43b45087303ff5520894500c740fc02000000897804c70013000000c3|@1223,33|31,0,9 1223:S4|4c697374 1224:C2,168|3b650c7303ff55248b7afc8b45008d40f43b45087303ff5520894500c740fc020000008b77148970048b5af8891889d190e82e9fffff8b79fc51508b5f048b470c8b5708ff128b34248b5efc50ff7304bb68b77541b871000000ba00a375410bc0e84e99ffff83f801740f8b5424040bc0e88affffff89c2eb05ba010000008b4d008d49f43b4d087303ff5520894d00c741fc020000008951048b0424890189c883c408c383c800|@1225,63|50,1,@1025 81,0,@1056 86,0,56 91,0,@1011 98,1,@1012 123,0,0 1225:S66|50415253455f44454328292e70617273654465632833296465632834297061747465726e28332961746f6d69635061747465726e283129702d7475706c6573283129 1226:O1|14 1227:C2,928|3b650c7303ff55248b42fc5253ff7004bb68b77541b87b000000ba00a375410bc0e87698ffff83f80174198b3c24c70701000000c7470401000000b80100000083c408c38b7c24048b77fc8b45008d40f43b45087303ff5520894500c740fc020000008b5e1c8958048b57f8891083c800e8d69dffff89c18b45008d40f43b45087303ff5520894500c740fc02000000bf84a87541897804890883c800e8aa9dffff8b7424048b5efc518b5b04ba40ba754183c800e822afffff8b5424088b4afc50ff7104bb68b77541b85b000000ba00a3754190e8c297ffff83f80174198b7c240c8b77fcff7424048b5e048b460c8b560890ff12eb678b0424f7c0010000007407bf03000000eb068b388d7c3f01f7c7010000007503ff553883ff017e70f7c0010000007407be03000000eb068b308d743601f7c6010000007503ff553883fe017f0eb824ae744190ff552cbb01000000f7c001000000740989c3eb0de96d0100000fb658048d5c1b0189dabb6300000089d083c800ff15c094040883f80174708b0c24f7c101000000740eeb05e9bb000000b803000000eb068b018d440001a8017503ff553883f8017f0db824ae7441ff552cbf01000000f7c101000000740489cfeb080fb679048d7c3f01bb7300000089f80bc0ff15e094040883f801746d8b7c240c8b77fc8b5e0453ff7308eb05e958000000ff730cff7310ff7314ff7318ff731cff7320ff73248b138b4b0489cb89d083c800e8968dffff8b3c246a03ff37ff7704ff7708ff770cff7710ff7714ff7718ff771cff7720ff772489c3b82c0e76410bc0e8d64fffffeb01508b75008d76f83b75087303ff5520897500c746fc01000040bb589c7541891e8b55008d52f83b55087303ff5520895500c742fc01000040b9f8f97541890a8b45008d40ec3b45087303ff5520894500c740fc0400000089700c8950088b7c2404897804c700f1ffffff8b7424108b5efc8b531889c38b4424080bc0ff1283c4048b4d008d49f43b4d087303ff5520894d00c741fc020000008941048b042489018b7c240c8b77fc51ff7604bb18bc7541b871000000ba00a375410bc0e88a95ffff83f801744d505089e3b8010000008b54241890e8d6fcffff8b5d008d5bf43b5d087303ff5520895d00c743fc020000008b5424048953048b4c2408890b8b4424148b3c248938895804b80100000083c41cc38b5d008d5bf43b5d087303ff5520895d00c743fc02000000c74304010000008b142489138b4c240cc70103000000895904b80100000083c414c30bc0|@1231,63|17,0,@1056 22,0,61 27,0,@1011 34,1,@1012 48,0,0 55,0,0 60,0,0 114,1,@1025 145,0,@1023 158,1,@1025 174,0,@1071 182,1,@1072 198,0,@1056 203,0,45 208,0,@1011 214,1,@1012 260,0,1 297,0,1 326,0,@51 335,0,0 367,0,49 378,0,I28 406,0,1 431,0,@51 439,0,0 464,0,57 474,0,I29 538,1,@971 579,0,@1228 586,1,@752 618,0,@989 649,0,@1198 694,0,-8 765,0,@1076 770,0,56 775,0,@1011 782,1,@1012 796,0,0 860,0,0 895,0,0 910,0,1 918,0,0 1228:O1|@1229 1229:C2,20|3b650c7303ff55248b780cb8640e764189faff22|@751,63|12,0,@1230 1230:S35|203d20706174206578706563746564206166746572206e756d65726963206c6162656c 1231:S67|50415253455f44454328292e70617273654465632833296465632834297061747465726e28332961746f6d69635061747465726e2831296765744c6162656c73283229 1232:O4|@1234,-1,@186,@1233 1233:O3|1,@521,@1235 1234:S10|636f6e76537472696e67 1235:O3|3,@7368,79992 1236:O4|@1237,-1,@186,@1233 1237:S7|636f6e76496e74 1238:O1|@1239 1239:C2,20|3b650c7303ff55248b780cb8800f764189faff22|@751,63|12,0,@1240 1240:S38|5265616c20636f6e7374616e7473206e6f7420616c6c6f77656420696e207061747465726e73 1241:O4|@1242,-1,@186,@1233 1242:S8|636f6e765265616c 1243:O4|@1244,-1,@186,@1233 1244:S8|636f6e7643686172 1245:O4|@1246,-1,@186,@1233 1246:S8|636f6e76576f7264 1247:C2,296|3b650c7303ff552453ff7424148b5c24148b442410ba60a9754183c800e82e99ffff508b54240490ff12f7c00100000075348b3089f083c800e85ac9ffff83f801740e89f0e88ec9ffffbf03000000eb1a8b1e83fbff7507bf03000000eb0cbf01000000eb05bf0100000083ff0174728b7c240c83ff01756e8b742418ff7608ff760cff7610ff7614ff7618ff761cff7620ff76248b5e048b0683c800e86689ffff508b5c2404b85100000090e8ea01ffffbb14da75410bc0e8de01ffff8b5d008d5bf43b5d087303ff5520895d00c743fc02000000ba601176418913894304eb0ae935000000e9300000008b4c241c6a01ff31ff7104ff7108ff710cff7110ff7114ff7118ff711cff7120ff712489d88b5c242ce85e4bffffeb01508b44240483c40cc2140090|@1249,63|22,0,@1029 30,1,@1030 58,1,@1159 70,1,@1161 75,0,1 89,0,1 96,0,0 103,0,0 158,1,@971 168,0,40 174,1,@323 179,0,@1162 186,1,@323 215,0,@1248 278,1,@752 1248:C2,20|3b650c7303ff55248b780c8b420489faff220bc0|@1164,63| 1249:S41|50415253455f44454328292e70617273654465632833296765744c6f6e674e6f6e496e666978283729 1250:S7|5061747465726e 1251:O1|-5 1252:S55|50415253455f44454328292e70617273654465632833296465632834297061747465726e28332961746f6d69635061747465726e283129 1253:O1|@1254 1254:C2,132|83f82f7506b803000000c383f8757506b803000000c383f86d7506b803000000c383f8697506b803000000c381f887000000742781f885000000741f81f883000000741781f881000000740f83f87f740a83f861740583f8037506b803000000c383f861740583f8037506b803000000c383f8677506b803000000c3b801000000c30bc0|@979,1|6,0,1 17,0,1 28,0,1 39,0,1 92,0,1 108,0,1 119,0,1 125,0,0 1255:S14|456e64206f66207061747465726e 1256:S39|50415253455f44454328292e70617273654465632833296465632834297061747465726e283329 1257:C2,392|3b650c7303ff55248b7d008d7ff03b7d087303ff5520897d00c747fc03000000beb014764189378b720489770889570452508b4d008d49cc3b4d087303ff5520894d00c741fc0c000000b83016764189018b423489412c8b72308971288b722c8971248b72288971208b722489711c8979188b7a208979148b7a1c8979108b3c2489790c8b7c24048979088b7a04897904518b7c2408536840287641ff7704b854287641ba68ad7541e8ba99ffff8b74240c8b5e048b53088b0a8b43188b3881ff89000000740489f8eb0289c8bb5428764183c800e82647ffff83f80174708b45008d40f43b45087303ff5520894500c740fc02000000be182976418970048b1c24891890e8a694ffff8d54241083c800e82e1500008b54240c8b4a048b79088b378b59188b1381fa89000000740689c689d0eb0689c289f089d683f81d75378b44240c568b4004ba505b7541eb05e92900000090e80a47ffff8b4424048d54241483c800e8321d000089c38b042483c414e99d23000089f083c410c3b8d411764183c410c30bc0|@1320,63|33,0,@1258 75,0,@1261 152,0,@1280 160,0,@1281 165,0,@1042 170,1,@1043 206,0,@1281 214,1,@743 248,0,@1283 262,1,@1025 274,1,@1285 329,0,@745 342,1,@747 358,1,@1298 371,1,@1318 382,0,@1251 1258:C2,32|3b650c7303ff5524ff72085352508d54241083c800e82200000083c410c20400|@1260,63|22,1,@1259 1259:C2,224|3b650c7303ff552450508b7af48b770852ff7608ff760cff7610ff7614ff7618ff761cff7620ff76248b5e048b0683c800e80285ffff8b1c248b53f4508b4b048b7bf089cb89f88b52040bc0ff128d74240889068d5c24088b14248953048b4d008d49f43b4d087303ff5520894d00c741fc020000008b44240889018b7c240c8979048b74240451ff76fcbb68b775418b46f8ba00a3754190e8828dffff83f801740f8b5424080bc0e852ffffff89c3eb05bb010000008b55008d52f43b55087303ff5520895500c742fc02000000895a048b0c24890a89d083c414c383c800|@1014,63|50,1,@971 140,0,@1056 148,0,@1011 154,1,@1012 179,0,0 1260:S63|50415253455f44454328292e706172736544656328332964656328342965787072657373696f6e28322965787072657373696f6e4c696e654c697374283329 1261:C2,2896|3b650c7303ff55248b7a048b77088b1e8b4f188b3181fe89000000740689c389f0eb0689c689d889f383f86d756e52538b4204ba505b754190e80245ffff8b5c24048b53048b4a088b018b7a188b3781fe89000000740289f083f86f74438b45008d40f43b45087303ff5520894500c740fc020000008b73108970048b0c248908e80692ffff8b7c2404ff7704ff770c508d542414e8d20a0000eb0de964000000b8010000005050508b5c24108b53048b4a088b398b72188b0e81f989000000740689c789c8eb0689c189f889cf83f86f7511578b4304ba505b754190e85e44ffffeb16578b5b04b8bb000000ba0c96754183c800e8fe7effff8b042483c418e9d7f1ffff8b42048b70088b0e8b78188b3781fe89000000740489f0eb0289c883f869757052538b4204ba505b75410bc0e80a44ffff8b5c2404ff7304bb68b77541b86b000000ba00a3754190e88a8bffff83f8017409b8680a764183c408c38b5424048b4a04ff7108ff710cff7110ff7114ff7118ff711cff7120ff71248b59048b0190e86a82ffff8b7c240489c68b4500eb05e9e10100008d40f43b45087303ff5520894500c740fc020000008b5f208958048b1424891089f190e8ca90ffff8b7c24045189c38b470c8b570890ff128b74240850ff7604bb68b77541b871000000ba00a37541e8ee8affff83f801746f8b54240c8b45008d40f43b45087303ff5520894500c740fc020000008b4a148948048b7c240889380bc0e86a90ffff8b74240cff7604ff760c508d54241ce8ca0900008b5d008d5bf43b5d087303ff5520895d00c743fc020000008943048b54240c891389d8e892e1ffff89c3eb718b5c240cff7304bb68b77541b873000000ba00a3754190e85e8affff83f80174558b55008d52f43b55087303ff5520895500c742fc020000008b4c2404894a048b042489028b7c240c8b45008d40f43b45087303ff5520894500c740fc020000008b771c8970048b5c2408891889d1eb0ae950000000e945000000e8aa8fffff8b7c240c5150bb730000008b470c8b571890ff128b75008d76f43b75087303ff5520897500c746fc020000008946048b1c24891e89f090e87609000089c3eb048b1c245050508b5424188b4a048b41088b388b71188b0681f8890000007402eb0289f883f86b7514538b4204ba505b75410bc0e8e641ffff89c7eb16538b5a04b853000000ba0c96754190e8867cffff89c78b042483c420c38b4a048b41088b388b71188b0681f8890000007402eb0289f883f875757152538b4204ba505b75410bc0e89641ffff8b7c2404ff7704bb68b77541b877000000ba00a3754190e81689ffff83f8017409b8680a764183c408c38b742404ff76048d54240c0bc0e8fe0800008b5d008d5bf83b5d087303ff5520895d00c743fc01000040bac8cc744189138b4d00eb05e97e0000008d49ec3b4d087303ff5520894d00c741fc0400000089410c895908c7410403000000c701110000008b4424088b78048b77088b1e8b57188b3281fe8900000074078b580489f0eb078b700489d889f383f87775115189d8ba505b75410bc0e8ce40ffffeb1251b8fb000000ba0c9675410bc0e8727bffff8b042483c410c38b7a048b47088b308b4f188b0181f8890000007402eb0289f083f827757052538b4204ba505b7541e88640ffff8b7c24045050508b770c505050ff7604ff76088d5c2408b80100000083c800e8726effff8b5d008d5bf03b5d087303ff5520895d00c743fc03000000ba1c25764189138b4c2410894b088b4424048943048d7c24148b74240c89378d542414eb05e992010000895a048d4c24148b04248941088b7d008d7ff03b7d087303ff5520897d00c747fc030000008b74241489378b5c2418895f048b54241c8957088b45008d40f43b45087303ff5520894500c740fc02000000b9642576418948048b742420893089f9e8068dffff8b7c24245189c389c88b572c0bc0ff128b7424288b5e048b53088b0a8b7b188b1781fa89000000740689c189d0eb0689c289c889d183f8217510518b4604ba505b7541e8723fffffeb16518b5e04b8707a7541ba0c96754183c800e8127affff8b4c242c8b45008d40f43b45087303ff5520894500c740fc020000008b79288978048b742428893083c800e8768cffff50bb730000008b4424088b511890ff128b5c242c8b53048b4a088b398b72188b0e81f989000000740689c789c8eb0689c189f889cf83f8157510578b4304ba505b7541e8e23effffeb16578b5b04b8887a7541ba0c96754183c800e88279ffff8b442430689c257641ff7004bb68b775418b442434ba68ad754190e8ae90ffff8b7c2434c7442434010000008b1c248b44240483c43457e9da0800008b72048b46088b388b4e188b0181f8890000007402eb0289f883f82f7507bf03000000eb05bf0100000083ff0174135253578b4204ba505b754190e84e3effffeb08b8010000005253578b7c24088b77048b5e088b138b4e188b0181f8890000007402eb0289d050bb582676410bc0e8b63dffff83f80174748b7c240c8b770cff7608ff7704ff7424106858267641ff7424148b5e048b0683c800e89af2ffff8b5d008d5bf83b5d087303ff5520895d00c743fc01000040ba589c754189138b4d008d49f83b4d087303ff5520894d00c741fc01000040bff8f97541893989c68b45008d40ec3b4508730aeb05e920000000ff5520894500c740fc0400000089580c894808897004c700f1ffffff83c410c38b3c2483ff5775328b74240c8b4604ba505b754190e8623dffff8b5c240c8b5b048b442408ba40ba754183c800e8269cffff83c410e97608000083ff7f75708b74240c8b5e04ff7308ff730cff7310ff7314ff7318ff731cff7320ff73248b138b4b0489cb89d00bc0e8b679ffff508b4604ba505b75410bc0e8fe3cffff8b45008d40f83b45087303ff5520894500c740fc01000040bf589c7541893889c68b45008d40ec3b45087303ff5520eb05e925000000894500c740fc04000000bbdc0e764189580c8b1424895008897004c700edffffff83c414c381ff8100000075718b74240c8b5e04ff7308ff730cff7310ff7314ff7318ff731cff7320ff73248b138b4b0489cb89d0e81679ffff508b4604ba505b75410bc0e85e3cffff8b45008d40f83b45087303ff5520894500c740fc01000040bf589c7541893889c68b45008d40ec3b45087303ff5520894500eb05e922000000c740fc04000000bb240f764189580c8b1424895008897004c700edffffff83c414c381ff8300000075718b74240c8b5e04ff7308ff730cff7310ff7314ff7318ff731cff7320ff73248b138b4b0489cb89d0e87678ffff508b4604ba505b75410bc0e8be3bffff8b45008d40f83b45087303ff5520894500c740fc01000040bf589c7541893889c68b45008d40ec3b45087303ff5520894500eb05e922000000c740fc04000000bbb00f764189580c8b1424895008897004c700edffffff83c414c381ff8500000075718b74240c8b5e04ff7308ff730cff7310ff7314ff7318ff731cff7320ff73248b138b4b0489cb89d0e8d677ffff508b4604ba505b75410bc0e81e3bffff8b45008d40f83b45087303ff5520894500c740fc01000040bf589c7541893889c68b45008d40ec3b45087303ff5520894500eb05e922000000c740fc04000000bbf80f764189580c8b1424895008897004c700edffffff83c414c381ff8700000075718b74240c8b5e04ff7308ff730cff7310ff7314ff7318ff731cff7320ff73248b138b4b0489cb89d0e83677ffff508b4604ba505b75410bc0e87e3affff8b45008d40f83b45087303ff5520894500c740fc01000040bf589c7541893889c68b45008d40ec3b45087303ff5520894500eb05e922000000c740fc04000000bbd40f764189580c8b1424895008897004c700edffffff83c414c38b74240cff76048b1c24b884997541ba0c967541e8c274ffff8b0424ba505b754183c800e8fa39ffffb8d411764183c414c390|@1279,63|52,0,@745 58,1,@747 130,1,@1025 150,1,@1262 162,0,0 216,0,@745 222,1,@747 233,0,93 238,0,@957 246,1,@959 257,1,@1222 299,0,@745 306,1,@747 318,0,@1056 323,0,53 328,0,@1011 334,1,@1012 344,0,@1226 390,1,@971 446,1,@1025 475,0,@1056 480,0,56 485,0,@1011 490,1,@1012 542,1,@1025 562,1,@1263 602,1,@1200 618,0,@1056 623,0,57 628,0,@1011 634,1,@1012 734,1,@1025 745,0,57 794,1,@1264 847,0,@745 854,1,@747 867,0,41 872,0,@957 878,1,@959 927,0,@745 934,1,@747 946,0,@1056 951,0,59 956,0,@1011 962,1,@1012 972,0,@1226 994,1,@1266 1023,0,@202 1069,0,1 1075,0,8 1127,0,@745 1134,1,@747 1142,0,125 1147,0,@957 1154,1,@959 1201,0,@745 1206,1,@747 1234,0,0 1242,1,@937 1271,0,@1269 1394,0,@1270 1410,1,@1025 1477,0,@745 1482,1,@747 1493,0,@843 1498,0,@957 1506,1,@959 1554,1,@1025 1560,0,57 1621,0,@745 1626,1,@747 1637,0,@845 1642,0,@957 1650,1,@959 1659,0,@1272 1667,0,@1056 1676,0,@1042 1682,1,@1043 1694,0,0 1710,1,@1273 1745,0,1 1752,0,0 1768,0,@745 1774,1,@747 1781,0,0 1819,0,@1275 1826,1,@743 1853,0,@1275 1870,1,@1247 1899,0,@989 1930,0,@1198 1980,0,-8 2004,0,@745 2010,1,@747 2026,0,@1071 2034,1,@1072 2042,1,@1277 2094,1,@960 2103,0,@745 2110,1,@747 2139,0,@989 2179,0,@1232 2197,0,-10 2254,1,@960 2263,0,@745 2270,1,@747 2299,0,@989 2339,0,@1236 2357,0,-10 2414,1,@960 2423,0,@745 2430,1,@747 2459,0,@989 2499,0,@1241 2517,0,-10 2574,1,@960 2583,0,@745 2590,1,@747 2619,0,@989 2659,0,@1245 2677,0,-10 2734,1,@960 2743,0,@745 2750,1,@747 2779,0,@989 2819,0,@1243 2837,0,-10 2856,0,@964 2861,0,@957 2866,1,@959 2874,0,@745 2882,1,@747 2887,0,@1251 1262:C2,120|3b650c7303ff55248b7afc528b5aec8b42f08b570883c800ff128b342450ff76f4bb68b77541b871000000ba00a3754190e83a81ffff83f801740f8b5424040bc0e8baffffff89c3eb05bb010000008b55008d52f43b55087303ff5520895500c742fc02000000895a048b0c24890a89d083c408c383c800|@1014,63|34,0,@1056 39,0,56 44,0,@1011 50,1,@1012 75,0,0 1263:C2,120|3b650c7303ff55248b7afc528b5ae48b42e88b570883c800ff128b342450ff76ecbb68b77541b871000000ba00a3754190e8a680ffff83f801740f8b5424040bc0e8baffffff89c3eb05bb010000008b55008d52f43b55087303ff5520895500c742fc02000000895a048b0c24890a89d083c408c383c800|@1014,63|34,0,@1056 39,0,56 44,0,@1011 50,1,@1012 75,0,0 1264:C2,36|89c78b45008d40f43b45087303ff5520894500c740fc02000000897804c700f5ffffffc3|@1265,33|31,0,-6 1265:S6|457870536571 1266:C2,116|3b650c7303ff552452b80100000083c800e87a0000008b3c2450ff77f4bb68b77541b871000000ba00a3754190e8c67fffff83f801740f8b5424040bc0e8beffffff89c6eb05be010000008b5d008d5bf43b5d087303ff5520895d00c743fc020000008973048b1424891389d883c408c383c800|@1014,63|10,0,0 18,1,@1267 30,0,@1056 35,0,56 40,0,@1011 46,1,@1012 71,0,0 1267:C2,264|3b650c7303ff55248b45008d40f43b45087303ff5520894500c740fc02000000bf84a875418978048b72f8893089d10bc0e8e284ffff8b79fc518b5f04ba40ba754183c800e85e96ffff8b34248b5efc8b53048b4a088b398b72188b0e81f989000000740689c789c8eb0689c189f889cf83f85b7512578b4304ba505b75410bc0e84637ffffeb16578b5b04b87b000000ba0c96754183c800e8e671ffff8b4424048b78fc8b70f88b45008d40f43b45087303ff5520894500c740fc020000008b5f24895804893090e84a84ffff8b5424048b4afc89c38b410c8b510883c800ff1289c78b45008d40f43b45087303ff5520894500c740fc020000008978048b3424893083c408c3|@1268,63|33,0,@1023 50,1,@1025 62,0,@1071 70,1,@1072 123,0,@745 130,1,@747 141,0,61 146,0,@957 154,1,@959 202,1,@1025 1268:S73|50415253455f44454328292e706172736544656328332964656328342965787072657373696f6e28322961746f6d696345787072657373696f6e2831296c6162656c6c65642d283129 1269:C2,44|3b650c7303ff552452508b520883c800ff1283f801750f8b7c24048b04248b570483c408ff2283c408c30bc0|@950,63| 1270:O1|@1271 1271:C2,20|83f8217506b803000000c3b801000000c383c800|@742,1|6,0,1 12,0,0 1272:S21|456e64206f66206c65742065787072657373696f6e 1273:C2,84|8b7d008d7ff83b7d087303ff5520897d00c747fc01000040c7070100000089c68b45008d40e83b45087303ff5520894500c740fc0500000089781089700c8958088b5c2404895804c70015000000c2040083c800|@1274,57|26,0,0 74,0,10 1274:S34|50415253455f5452454528292e6d6b4c6f63616c4465636c61726174696f6e283329 1275:O1|@1276 1276:C2,40|83f85b7506b803000000c383f8617506b803000000c383f8037506b803000000c3b801000000c390|@979,1|6,0,1 17,0,1 28,0,1 34,0,0 1277:C2,276|3b650c7303ff55245050506a016a016a018d7c241057bb1f4e0000b8c8cc744190e8167affff8b45008d40f43b45087303ff5520894500c740fc020000008b74240489308b5c24088958040bc0e8ae7affff5050508d5424045289c38b44241090e86a95ffff8b4d008d49f43b4d087303ff5520894d00c741fc020000008b44240489018b7c24088979048b75008d76f43b75087303ff5520897500c746fc02000000c7460401000000890ebb0100000089f00bc0e8fa9cffff89c38b45008d40f43b45087303ff5520894500c740fc020000008b1424895004891890e89aa4ffff89c18b45008d40ec3b45087303ff5520894500c740fc0400000089580c8948088b7c240c897804c700e7ffffff83c418c390|@1278,63|23,0,9999 28,0,@202 34,1,@1003 78,1,@1005 98,1,@1079 166,0,0 173,0,0 182,1,@1099 222,1,@1126 267,0,-13 1278:S26|50415253455f5452454528292e6d6b53656c6563746f72283129 1279:S61|50415253455f44454328292e706172736544656328332964656328342965787072657373696f6e28322961746f6d696345787072657373696f6e283129 1280:S10|45787072657373696f6e 1281:O1|@1282 1282:C2,160|83f857745781f887000000744f81f885000000744781f883000000743f81f881000000743783f87f743283f861742d83f803742883f85b742383f861741e83f803741983f875741483f869740f83f86d740a83f82f740583f8277506b803000000c383f8197506b803000000c383f80d7506b803000000c383f8417506b803000000c383f81f7506b803000000c383f8357506b803000000c3b801000000c390|@979,1|93,0,1 104,0,1 115,0,1 126,0,1 137,0,1 148,0,1 154,0,0 1283:O1|@1284 1284:C2,20|83f81d7506b803000000c3b801000000c383c800|@742,1|6,0,1 12,0,0 1285:C2,164|3b650c7303ff552489c78b45008d40f43b45087303ff5520894500c740fc02000000be102a7641897004893889d1570bc0e8367fffff5189cae8ba0000008b3c248b77fc8b5e048b53088b0a8b7b188b3781fe89000000740689c189f0eb0689c689c889f183f83375318b04248b70fc518b4604ba505b7541e8a231ffff8b4424088b54240483c800e872ffffff89c38b042483c40ce9910d000089c883c408c383c800|@1317,63|35,0,@1286 50,1,@1025 58,1,@1288 117,0,@745 122,1,@747 151,1,@1315 1286:O1|@1287 1287:C2,20|83f8337506b803000000c3b801000000c383c800|@742,1|6,0,1 12,0,0 1288:C2,164|3b650c7303ff552489c78b45008d40f43b45087303ff5520894500c740fc02000000be082b7641897004893889d1570bc0e83e7effff5189cae8ba0000008b3c248b77fc8b5e048b53088b0a8b7b188b3781fe89000000740689c189f0eb0689c689c889f183f80975318b04248b70fc518b4604ba505b7541e8aa30ffff8b4424088b54240483c800e872ffffff89c38b042483c40ce9ed0b000089c883c408c383c800|@1314,63|35,0,@1289 50,1,@1025 58,1,@1291 117,0,@745 122,1,@747 151,1,@1312 1289:O1|@1290 1290:C2,20|83f8097506b803000000c3b801000000c383c800|@742,1|6,0,1 12,0,0 1291:C2,1348|3b650c7303ff55248b7afc8b77048b5e088b0b8b7e188b1f81fb89000000740689c189d8eb0689c389c889d983f81f75738b42fc52518b4004ba505b754183c800e8ea2fffff8b7c24048b77fc8b45008d40f43b45087303ff5520894500c740fc020000008b5e0c8958048b1424891090e8067dffff8b4c240489c38b41f88b51fc0bc0ff128b7c24048b77fc8b5e048b53088b0a8b7b188b1781fa89000000740deb05e9f300000089c189d0eb0689c289c889d183f8397512518b4604ba505b75410bc0e8662fffffeb16518b5e04b81c797541ba0c96754183c800e8066affff8b4c24088b41fc8b78088b45008d40f43b45087303ff5520894500c740fc020000008978048b7424048930e86a7cffff89c38b41f88b51fc0bc0ff128b5c24088b53fc8b4a048b79088b378b59188b3b81ff89000000740689c689f8eb0689c789f089fe83f8137511568b4204ba505b754190e8d62effffeb16568b5a04b8c47a7541ba0c96754183c800e87669ffff8b74240c8b5c24088b46f88b56fcff128b5c24108944241089da8b1c248b44240483c41052e9c403000083f84175738b42fc52518b4004ba505b754183c800e87a2effff8b45008d40f43b45087303ff5520894500c740fc02000000bf0c3176418978048b342489300bc0e89a7bffff8b5c24048b53f88b4bfc89c389d089ca0bc0ff128b7c24048b77fc8b5e048b53088b0a8b7b188b3781fe89000000740deb05e98200000089c189f0eb0689c689c889f183f81175398b4424048b70fc518b4604ba505b754183c800e8ee2dffff8b5c24088b53f88b4bfc8b5c240489d089caff1289c38b042483c40ce9a10300008b4c24048b41fcff70048b1c24b8ac7a7541ba0c96754183c800e86668ffff8b0424ba505b754183c800e89e2dffffb8d411764183c40cc383f80d75708b42fc52518b4004ba505b7541e87e2dffff8b7c24048b77fc8b45008d40f43b45087303ff5520894500c740fc020000008b5e108958048b1424891090e89a7affff8b4c240489c38b41f88b51fc0bc0ff128b7c24048b77fc8b5e048b53088b0a8b7b188b1781fa89000000740deb05e95600000089c189d0eb0689c289c889d183f82d7512518b4604ba505b75410bc0e8fa2cffffeb16518b5e04b84c797541ba0c96754183c800e89a67ffff8b4424048b54240883c800e80a03000089c38b042483c40ce92d06000083f835752a8b42fc52518b4004ba505b7541e8ae2cffff8b7c24048b1c248b47f88b57fc90ff1283c408e9620600008b42fc8b58048b7b088b378b43188b3881ff89000000740489f8eb0289f083f81975558b72fc52518b4604ba505b754183c800e85e2cffff8b45008d40f43b45087303ff5520894500c740fc02000000bbbc5a75418958048b142489100bc0e87e79ffff8b54240483c800e85e02000083c408e93a0600008b72fc8b45008d40f43b45087303ff5520894500c740fc020000008b5e1889580489085283c800e83e79ffff8b14248b7afc8b72f851ff7608ff72f468d83576416858267641508b5e048b068b571483c800ff1289c38b45008d40f43b45087303ff5520894500c740fc02000000ba082b76418950048b0c24890889d90bc0e8e678ffff8b7c240450ff77f88b34248b5c240c8b53fc51ff7608ff7204bb68b77541b85f000000ba00a3754183c800e80673ffff83f80174618b45008d40f43b45087303ff5520894500c740fc02000000b908ba75418948048b7c240c8938e88678ffff8b7424148b5efcff34248b5b04ba94ae754190e8667effff89c38b44240490e816ceffff89c183c4083b650c7303ff5524e972ffffffe909000000b80100000083c418c38b44240483c418c30bc0|@1311,63|58,0,@745 66,1,@747 114,1,@1025 191,0,@745 198,1,@747 209,0,@816 214,0,@957 222,1,@959 270,1,@1025 336,0,@745 342,1,@747 353,0,@850 358,0,@957 366,1,@959 408,1,@1292 426,0,@745 434,1,@747 463,0,@1294 478,1,@1025 566,0,@745 574,1,@747 607,1,@1296 625,0,@848 630,0,@957 638,1,@959 646,0,@745 654,1,@747 659,0,@1251 681,0,@745 686,1,@747 734,1,@1025 811,0,@745 818,1,@747 829,0,@820 834,0,@957 842,1,@959 858,1,@1298 871,1,@1303 889,0,@745 894,1,@747 918,1,@1305 966,0,@745 974,1,@747 1003,0,@740 1018,1,@1025 1030,1,@1298 1038,1,@1307 1082,1,@1025 1103,0,@1309 1108,0,@1275 1153,0,@1289 1170,1,@1025 1200,0,@1056 1205,0,47 1210,0,@1011 1218,1,@1012 1252,0,@1069 1266,1,@1025 1284,0,@1045 1290,1,@1047 1302,1,@1210 1330,0,0 1292:C2,48|89c78b45008d40ec3b45087303ff5520894500c740fc0400000089580c8b5c2404895808897804c70005000000c20400|@1293,41|41,0,2 1293:S22|50415253455f5452454528292e6d6b436f6e64283329 1294:O1|@1295 1295:C2,20|83f8117506b803000000c3b801000000c383c800|@742,1|6,0,1 12,0,0 1296:C2,40|89c78b45008d40f03b45087303ff5520894500c740fc03000000897808895804c7001f000000c390|@1297,41|34,0,15 1297:S23|50415253455f5452454528292e6d6b5768696c65283229 1298:C2,652|3b650c7303ff55248b7afc525068603d7541ff770489c3b81c127641ba68ad7541e8a67bffff8b7424048b5efc8b5304ff7208ff720cff7210ff7214ff7218ff721cff7220ff72248b5a048b02e82a68ffff89c18b45008d40f43b45087303ff5520894500c740fc02000000bf503476418978048b34248930e89676ffff8b5c24048b53fc51508b43f88b5a048b5238ff128b7c24088b77fc8b5e048b53088b0a8b7b188b3781fe89000000740689c189f0eb0689c689c889f183f85d75198b7424088b46fc518b4004ba505b75410bc0e8f228ffffeb588b4424088b70fc518b5e04b8247d7541ba0c967541e88e63ffff8b5c240c8b53fc8b4a048b41088b388b71188b1e81fb89000000740489d8eb0289f883f85b751c8b44240c8b78fc8b4704ba505b754190e89a28ffffeb0ae905000000b8010000008b45008d40f43b45087303ff5520894500c740fc02000000bad4da75418950048b4c2408890890e8ae75ffff8b7c240c89c38b47f88b57fc0bc0ff128b75008d76f83b75087303ff5520897500c746fc01000040bb589c7541891e8b55008d52f83b55087303ff5520895500c742fc01000040b9589c7541890a8b7d008d7fe83b7d087303ff5520897d00c747fc0500000089571089770c8b34248977088b5c2404895f0489078b55008d52f43b55087303ff5520895500c742fc02000000897a04c702ebffffff8b4c240c8b41fc52ff7004bb68b77541b859000000ba00a3754190e8426fffff83f80174138b44240c8b5424100bc0e8cafdffff89c7eb05bf010000008b75008d76f43b75087303ff5520897500c746fc02000000897e048b1c24891e8b5424108b4afc566888347641ff7104bb68b775418b442418ba68ad7541e84a79ffff8b042483c418c383c800|@1302,63|14,0,@598 24,0,@1253 29,0,@1042 34,1,@1043 78,1,@971 109,0,@1299 122,1,@1025 203,0,@745 210,1,@747 228,0,@895 233,0,@957 238,1,@959 292,0,@745 298,1,@747 310,0,0 339,0,@1166 354,1,@1025 399,0,@989 430,0,@989 510,0,-11 526,0,@1056 531,0,44 536,0,@1011 542,1,@1012 571,0,0 616,0,@1301 624,0,@1056 633,0,@1042 638,1,@1043 1299:O1|@1300 1300:C2,20|83f85d7506b803000000c3b801000000c383c800|@742,1|6,0,1 12,0,0 1301:S12|456e64206f66206d61746368 1302:S50|50415253455f44454328292e706172736544656328332964656328342965787072657373696f6e2832296d61746368283129 1303:C2,40|89c78b45008d40f03b45087303ff5520894500c740fc03000000895808897804c700fdffffffc390|@1304,41|34,0,-2 1304:S22|50415253455f5452454528292e6d6b43617365283229 1305:C2,36|89c78b45008d40f43b45087303ff5520894500c740fc02000000897804c70019000000c3|@1306,33|31,0,12 1306:S5|5261697365 1307:C2,36|89c78b45008d40f43b45087303ff5520894500c740fc02000000897804c7000d000000c3|@1308,33|31,0,6 1308:S2|466e 1309:O1|@1310 1310:C2,148|83f8577506b803000000c381f887000000742781f885000000741f81f883000000741781f881000000740f83f87f740a83f861740583f8037506b803000000c383f85b740a83f861740583f8037506b803000000c383f8757506b803000000c383f8697506b803000000c383f86d7506b803000000c383f82f7506b803000000c383f8277506b803000000c3b801000000c30bc0|@979,1|6,0,1 59,0,1 80,0,1 91,0,1 102,0,1 113,0,1 124,0,1 135,0,1 141,0,0 1311:S55|50415253455f44454328292e706172736544656328332964656328342965787072657373696f6e2832296b6579576f7264457870283129 1312:C2,40|89c78b45008d40f03b45087303ff5520894500c740fc03000000895808897804c700ffffffffc390|@1313,41|34,0,-1 1313:S25|50415253455f5452454528292e6d6b416e64616c736f283229 1314:S57|50415253455f44454328292e706172736544656328332964656328342965787072657373696f6e2832297061727365416e64616c736f283129 1315:C2,40|89c78b45008d40f03b45087303ff5520894500c740fc03000000895808897804c700e9ffffffc390|@1316,41|34,0,-12 1316:S24|50415253455f5452454528292e6d6b4f72656c7365283229 1317:S56|50415253455f44454328292e706172736544656328332964656328342965787072657373696f6e28322970617273654f72656c7365283129 1318:C2,40|89c78b45008d40f03b45087303ff5520894500c740fc03000000895808897804c7000f000000c390|@1319,41|34,0,7 1319:S28|50415253455f5452454528292e6d6b48616e646c6554726565283229 1320:S42|50415253455f44454328292e706172736544656328332964656328342965787072657373696f6e283229 1321:C2,228|3b650c7303ff55248b42088b78088b378b58188b0b81f989000000740489c8eb0289f052bb58267641e82222ffff83f80174708b0424ff70088b5804b858267641ba60a9754183c800e86270ffff50508b7d008d7ff83b7d087303ff5520897d00c747fc01000040c7070100000089e6890689e3897b048b55008d52f43b55087303ff5520895500c742fc020000008b0c24890a8b44240489420452b801000000eb05e9300000008b54240c90e84effffff8b7d008d7ff43b7d087303ff5520897d00c747fc020000008947048b3424893789f883c410c3b80100000083c404c383c800|@1322,63|37,0,@1275 42,1,@743 61,0,@1275 66,0,@1029 74,1,@1030 106,0,0 157,0,0 217,0,0 1322:S36|50415253455f44454328292e706172736544656328332964656328342976617273283129 1323:C2,72|8b7d008d7ff83b7d087303ff5520897d00c747fc01000040c7070100000089c68b45008d40f03b45087303ff5520894500c740fc03000000897808897004c70017000000c383c800|@1324,49|26,0,0 64,0,11 1324:S26|50415253455f5452454528292e6d6b4f70656e54726565283129 1325:C2,48|3b650c7303ff552452508b520883c800ff12f7c00100000075068b0083c408c38b7c24048b04248b570483c408ff2290|@1326,63| 1326:S39|50415253455f44454328292e70617273654465632833296465632834296e6577456e762d283129 1327:C2,488|3b650c7303ff55248b7a088b77088b1e8b4f188b3181fe89000000740689c389f0eb0689c689d889f383f8377507b803000000eb05b8010000005253508b5c24088b53088b4a088b018b7a188b3781fe89000000740289f083f837751789d0ba505b754190e81a20ffff3b650c7303ff5524ebc98b042483f80174358b44240489da83c800e876ffffff8b7d008d7ff43b7d087303ff5520897d00c747fc02000000894704c7070100000089f883c40cc351ff720cff7210ff721457ff721cff7220ff72248b5a048b0283c800e8665effff89c78b45008d40f43b45087303ff5520894500c740fc02000000be84a875418970048b5c2404891889f990e8ce6cffff8b7c240851508b5f088b47a88b57d083c800ff128b74240c8b5e088b53088b0a8b7b188b1781fa89000000740689c189d0eb0689c289c889d183f85b7510518b4608ba505b7541e8361fffffeb16518b5e08b87b000000ba0c96754183c800e8d659ffff8b4c24108b5c240c8b41a88b51ccff12ff74240489c38b44240490e87e0000008b7c241050ff7708bb68b77541b807000000ba00a37541e87e66ffff83f80174138b4424108b5424140bc0e84afeffff89c6eb05be010000008b5d008d5bf43b5d087303ff5520895d00c743fc020000008973048b1424891389d883c418c383c800|@1330,63|47,0,1 54,0,0 96,0,@745 102,1,@747 167,0,0 206,1,@971 237,0,@1023 254,1,@1025 325,0,@745 330,1,@747 341,0,61 346,0,@957 354,1,@959 386,1,@1328 399,0,@1056 404,0,3 409,0,@1011 414,1,@1012 443,0,0 1328:C2,44|8b7d008d7ff03b7d087303ff5520897d00c747fc030000008b742404897708895f04890789f8c2040083c800|@1329,57| 1329:S28|50415253455f5452454528292e6d6b56616c42696e64696e67283329 1330:S36|50415253455f44454328292e706172736544656328332964656328342976616c42283129 1331:C2,84|8b7d008d7ff83b7d087303ff5520897d00c747fc01000040c7070100000089c68b45008d40e83b45087303ff5520894500c740fc050000008978108b7c240489780c895808897004c700e3ffffffc2040083c800|@1332,57|26,0,0 74,0,-15 1332:S32|50415253455f5452454528292e6d6b56616c4465636c61726174696f6e283329 1333:C2,48|3b650c7303ff552452508b520883c800ff12f7c00100000075068b0083c408c38b7c24048b04248b570483c408ff2290|@1326,63| 1334:C2,160|3b650c7303ff55248b45008d40f43b45087303ff5520894500c740fc02000000bf8cd275418978048b7204893089d10bc0e81a6affff5189cae87e0000008b3c248b77fc50ff760cbb68b77541b807000000ba00a375410bc0e84264ffff83f801740f8b5424040bc0e892ffffff89c3eb05bb010000008b55008d52f43b55087303ff5520895500c742fc02000000895a048b0c24890a89d083c408c383c800|@1151,63|33,0,@1148 50,1,@1025 58,1,@1335 73,0,@1056 78,0,3 83,0,@1011 90,1,@1012 115,0,0 1335:C2,196|3b650c7303ff55245250b8010000008d5424080bc0e8c60000008b7d008d7ff83b7d087303ff5520897d00c747fc01000040c707010000008b75008d76f83b75087303ff5520897500c746fc01000040bbf8f97541891e8b55008d52f83b55087303ff5520895500c742fc01000040b9589c7541890a8b5d008d5bf83b5d087303ff5520895d00c743fc01000040b9589c7541890b8b4d008d49e83b4d087303ff5520894d00c741fc0500000089591089790c897108894104891189c883c408c383c800|@1340,63|11,0,0 22,1,@1336 52,0,0 81,0,@1198 112,0,@989 143,0,@989 1336:C2,472|3b650c7303ff55248b42fc8b780852ff7708ff770cff7710ff7714ff7718ff771cff7720ff77248b5f048b0790e8ea59ffff8b342489c38b45008d40f43b45087303ff5520894500c740fc02000000ba84a875418950048b4ef8890853e85268ffff8b7c24048b77fc508b5e088b46a88b56d090ff128b5c24048b53fc8b4a088b79088b378b59188b1381fa89000000740689c689d0eb0689c289f089d683f85b75198b5424048b42fc568b4008ba505b75410bc0e8ae1affffeb588b4424048b50fc568b5a08b87b000000ba0c967541e84a55ffff8b4c24088b41fc8b78088b77088b1e8b57188b0a81f989000000740489c8eb0289d883f85d751c8b4424088b58fc8b4308ba505b754190e8561affffeb0ae905000000b8010000008b4424088b78f88b45008d40f43b45087303ff5520894500c740fc02000000bed4da754189700489380bc0e86667ffff8b5c24088b53fc89c38b42a88b52cc83c800ff12ff74240489c38b44240490e8820000008b4c24088b79fc50ff7708bb68b77541b859000000ba00a3754190e87261ffff83f8017413b8010000008b54240c90e85afeffff89c6eb05be010000008b5d008d5bf43b5d087303ff5520895d00c743fc020000008973048b1424891389d883c410c383c800|@1339,63|46,1,@971 80,0,@1023 94,1,@1025 175,0,@745 182,1,@747 200,0,61 205,0,@957 210,1,@959 264,0,@745 270,1,@747 282,0,0 318,0,@1166 330,1,@1025 366,1,@1337 382,0,@1056 387,0,44 392,0,@1011 398,1,@1012 408,0,0 427,0,0 1337:C2,44|8b7d008d7ff03b7d087303ff5520897d00c747fc030000008b742404897708895f04890789f8c2040083c800|@1338,57| 1338:S24|50415253455f5452454528292e6d6b436c61757365283329 1339:S47|50415253455f44454328292e706172736544656328332964656328342966756e4228312962696e64696e6773283129 1340:S36|50415253455f44454328292e706172736544656328332964656328342966756e42283129 1341:C2,48|89c78b45008d40ec3b45087303ff5520894500c740fc040000008b74240489700c895808897804c700f3ffffffc20400|@1342,57|41,0,-7 1342:S32|50415253455f5452454528292e6d6b46756e4465636c61726174696f6e283329 1343:C2,172|3b650c7303ff55248b45008d40f43b45087303ff5520894500c740fc02000000bf8cd275418978048b7204893089d10bc0e84a65ffff8b79fc8b71f851ff7604ff76086a016a018b1e8b5710ff128b1c248b53fc50ff720cbb68b77541b807000000ba00a375410bc0e8625fffff83f801740f8b5424040bc0e882ffffff89c1eb05b9010000008b45008d40f43b45087303ff5520894500c740fc020000008948048b3c24893883c408c390|@1151,63|33,0,@1148 50,1,@1025 89,0,@1056 94,0,3 99,0,@1011 106,1,@1012 131,0,0 1344:C2,36|89c78b45008d40f43b45087303ff5520894500c740fc02000000897804c700e5ffffffc3|@1345,33|31,0,-14 1345:S15|547970654465636c61726174696f6e 1346:C2,172|3b650c7303ff55248b45008d40f43b45087303ff5520894500c740fc02000000bf8cd275418978048b72c8893089d10bc0e82a64ffff8b79fc51508b59f8b8010000008b57180bc0ff128b34248b5efc50ff730cbb68b77541b807000000ba00a375410bc0e8465effff83f801740f8b5424040bc0e886ffffff89c2eb05ba010000008b4d008d49f43b4d087303ff5520894d00c741fc020000008951048b0424890189c883c408c383c800|@1151,63|33,0,@1148 50,1,@1025 63,0,0 85,0,@1056 90,0,3 95,0,@1011 102,1,@1012 127,0,0 1347:O1|@1348 1348:C2,20|83f83f7506b803000000c3b801000000c383c800|@742,1|6,0,1 12,0,0 1349:C2,172|3b650c7303ff55248b45008d40f43b45087303ff5520894500c740fc02000000bf8cd275418978048b72c0893089d10bc0e82a63ffff8b79fc8b71f851ff7604ff76086a016a018b1e8b5710ff128b1c248b53fc50ff720cbb68b77541b807000000ba00a375410bc0e8425dffff83f801740f8b5424040bc0e882ffffff89c1eb05b9010000008b45008d40f43b45087303ff5520894500c740fc020000008948048b3c24893883c408c390|@1151,63|33,0,@1148 50,1,@1025 89,0,@1056 94,0,3 99,0,@1011 106,1,@1012 131,0,0 1350:O1|@1351 1351:C2,20|83f8157506b803000000c3b801000000c383c800|@742,1|6,0,1 12,0,0 1352:C2,48|89c78b45008d40ec3b45087303ff5520894500c740fc0400000089580c8978088b5c2404895804c70001000000c20400|@1353,41|41,0,0 1353:S36|50415253455f5452454528292e6d6b416273747970654465636c61726174696f6e283329 1354:C2,160|3b650c7303ff55248b45008d40f43b45087303ff5520894500c740fc02000000bf8cd275418978048b7204893089d10bc0e8b261ffff5189cae87e0000008b3c248b77fc50ff760cbb68b77541b807000000ba00a375410bc0e8da5bffff83f801740f8b5424040bc0e892ffffff89c3eb05bb010000008b55008d52f43b55087303ff5520895500c742fc02000000895a048b0c24890a89d083c408c383c800|@1151,63|33,0,@1148 50,1,@1025 58,1,@1355 73,0,@1056 78,0,3 83,0,@1011 90,1,@1012 115,0,0 1355:C2,656|3b650c7303ff55248b7afc89c68b45008d40f43b45087303ff5520894500c740fc020000008b5f20895804893089d15690e8f660ffff51ff7108ff342489c3b858267641ba60a97541e88e61ffff8b3c2450ff7708ff770cff7710ff7714ff7718ff771cff7720ff77248b5f048b070bc0e81e52ffff508b5c24088b4424040bc0e87e62ffff8b742408ff7608bb68b77541b82d000000ba00a3754190e8da5affff83f80174728b45008d40f43b45087303ff5520894500c740fc02000000bb84a875418958048b54240c8910e85a60ffff8b4c24088b79f8ff77088b5908ba94ae754190e83a66ffff8b75008d76f83b75087303ff5520897500c746fc01000040bbf8f97541891e8b55008d52ec3b55087303ff5520eb05e923000000895500c742fc04000000b9d4117641894a0c8942088972048b0424890289d083c410c38b5c2408ff7308bb68b77541b85b000000ba00a375410bc0e81e5affff83f80174738b542408ff72088b5c2410b858267641ba60a9754190e85e60ffff8b4d008d49f83b4d087303ff5520894d00c741fc01000040bf589c754189398b75008d76f83b75087303ff5520897500c746fc01000040bbf8f97541891e8b55008d52ec3b55087303ff5520895500c742fc04000000eb05e95f000000894a0c897208894204c702f1ffffff8b4d008d49f83b4d087303ff5520894d00c741fc01000040b8f8f9754189018b7d008d7fec3b7d087303ff5520897d00c747fc0400000089570cbec8cc7441897708894f048b1c24891f89f883c410c38b55008d52f83b55087303ff5520895500c742fc01000040b9f8f97541890a8b45008d40ec3b45087303ff5520894500c740fc04000000bfd411764189780cbec8cc74418970088950048b1c24891883c410c383c800|@1356,63|50,1,@1025 64,0,@1275 69,0,@1029 74,1,@1030 114,1,@971 130,1,@1033 142,0,@1056 147,0,22 152,0,@1011 158,1,@1012 192,0,@1023 206,1,@1025 224,0,@1045 230,1,@1047 259,0,@1198 297,0,@1251 329,0,@1056 334,0,45 339,0,@1011 346,1,@1012 367,0,@1275 372,0,@1029 378,1,@1030 407,0,@989 438,0,@1198 486,0,-8 515,0,@1198 549,0,@202 595,0,@1198 626,0,@1251 634,0,@202 1356:S48|50415253455f44454328292e7061727365446563283329646563283429657863657074696f6e42696e64696e67283129 1357:C2,36|89c78b45008d40f43b45087303ff5520894500c740fc02000000897804c7000b000000c3|@1358,33|31,0,5 1358:S13|45784465636c61726174696f6e 1359:C2,44|3b650c7303ff552452508b520883c800ff1283f801750f8b7c24048b04248b570483c408ff2283c408c30bc0|@950,63| 1360:C2,36|3b650c7303ff552452508b520883c800ff128b7c24048b04248b570483c408ff2283c800|@1361,63| 1361:S35|50415253455f44454328292e6d6b4c6f63616c426f6479466978456e76283529283129 1362:O1|@1363 1363:C2,40|89c78b45008d40f43b45087303ff5520894500c740fc02000000becc4b76418930897804c383c800|@1374,49|27,0,@1364 1364:C2,28|3b650c7303ff55248b3c24c70424ffffffff8b5a0457e91d00000090|@1373,63|14,0,-1 23,1,@1365 1365:C2,316|3b650c7303ff55248b74240483fe017507bf05000000eb1d83fefd7507bf11000000eb1183feff7507bf15000000eb05bf2100000057535089da0bc0ff1283f801750bb80100000083c40cc204008b188b1383fa13720783fa1b7702eb0783fa417402eb178b4c2410894c24108b43048b5c240483c40ce984ffffff83fa5775138b43048d54240c90e8ca00000083c40cc2040083fa5b7502eb0a81fafd0000007402eb758b43048d54240c90e8a600000083f801750bb80100000083c40cc204008b088b39be0100000089fb23def6c3017503ff553889f32bdf8d5b0170f48b55008d52f43b55087303ff5520895500c742fc020000008b7104897204891a8b45008d40f83b45087303ff5520894500c740fc01000000eb05e908000000891083c40cc204008b04248d54240c83c800e82200000083c40cc20400|@1372,63|18,0,2 30,0,8 42,0,10 49,0,16 68,0,0 138,1,@1366 174,1,@1366 184,0,0 199,0,0 306,1,@1366 1366:C2,364|3b650c7303ff55248b7afc83ff21757152508b52f883c800ff1283f8017509b80100000083c408c38b308b1e83fb6174228b14248b4c240889542408bb01000000b8010000008b54240483c40851e9350100008b542404ff76048b04248b52f8ff1283f80175498b4d008d49f43b4d087303ff5520894d00c741fc02000000eb05e9cf0000008b0424894104c701010000008b45008d40f83b45087303ff5520894500c740fc01000000890883c40cc38b088b3981fff10000007502eb0a81ffb10000007402eb5dff7104bb01000000b8010000008b54240ce8aa00000083f80175478b75008d76f43b75087303ff5520897500c746fc020000008b1c24895e04c706010000008b45008d40f83b45087303ff5520894500c740fc01000000893083c40cc3e90400000083c40cc38b7424048b5c240c8974240c89dabb01000000b80100000089d68b54240883c40c56e9330000008b3424890424bb01000000b80100000056e9f902000090|@1371,63|32,0,0 61,0,0 66,0,0 79,1,@1367 142,0,0 204,0,0 209,0,0 218,1,@1367 259,0,0 317,0,0 322,0,0 337,1,@1367 348,0,0 353,0,0 359,1,@1369 1367:C2,664|3b650c7303ff55245250538b4424108b52f80bc0ff1283f80175588b7c240483ff0174448b75008d76f43b75087303ff5520897500c746fc020000008b5c2410895e048b142489168b45008d40f83b45087303ff5520894500c740fc01000000893083c40cc20400b80100000083c40cc204008b388b37f7c6010000007503ff553883fe617c70f7c6010000007503ff553883fe737f608b1c24ba2100000089d923caf6c1017503ff553850528d43ffd1faf7ea8d48015a5870ed89cb23def6c3017503ff55388d59ff03de70f6f6c3017503ff553889da83ea6070f68b4f04894c241089d3b8030000008b54240883c40ce909fffffff7c6010000007503ff553881fe830000007c70f7c6010000007503ff553881fe8d0000007f628b1c24ba2100000089d923caf6c1017503ff553850528d43ffd1faf7ea8d48015a5870ed89cb23def6c3017503ff55388d59ff03de70f6f6c3017503ff553889da81ea8200000070f3f6c2017503ff553889d183c11470f68b5f04eb0ae91c000000e917000000895c241089cbb8030000008b54240883c40ce965fefffff7c6010000007503ff553881fec30000007c70f7c6010000007503ff553881fecd0000007f628b1c24ba2100000089d923caf6c1017503ff553850528d43ffd1faf7ea8d48015a5870ed89cb23def6c3017503ff55388d59ff03de70f6f6c3017503ff553889da81eac200000070f3f6c2017503ff553889d183c11470f68b5f04eb0ae91c000000e917000000895c241089cbb8030000008b54240883c40ce9c1fdffff8b5c240483fb0174448b55008d52f43b55087303ff5520895500c742fc020000008b4c2410894a048b1c24891a8b45008d40f83b45087303ff5520894500c740fc01000000891083c40cc20400b80100000083c40cc2040090|@1368,63|105,0,0 155,0,16 231,0,1 289,0,16 395,0,1 453,0,16 559,0,1 653,0,0 1368:S29|496e742e7363616e283329726561645f6865785f646967697473283329 1369:C2,356|3b650c7303ff55245250538b4424108b52f80bc0ff1283f80175588b7c240483ff0174448b75008d76f43b75087303ff5520897500c746fc020000008b5c2410895e048b142489168b45008d40f83b45087303ff5520894500c740fc01000000893083c40cc20400b80100000083c40cc204008b388b37f7c6010000007503ff553883fe617c748b5c24088b53fcf6c2017503ff553889d183c16070f65123cef6c101597503ff55383bf17d5f8b0c2489c823c2a8017503ff5538528d41ffd1faf7ea8d40015a70ef89c123cef6c1017503ff55388d48ff03ce70f6f6c1017503ff553889c883e86070f68b4f04894c241089c3b803000000eb05e90c0000008b54240883c40ce9f4feffff8b5c240483fb0174448b55008d52f43b55087303ff5520895500c742fc020000008b4c2410894a048b1c24891a8b45008d40f83b45087303ff5520894500c740fc01000000891083c40cc20400b80100000083c40cc20400|@1370,63|105,0,0 245,0,1 346,0,0 1370:S25|496e742e7363616e283329726561645f646967697473283329 1371:S25|496e742e7363616e283329726561645f6e756d626572283129 1372:S11|496e742e7363616e283329 1373:S17|496e742e7363616e283129283129283129 1374:S14|496e742e7363616e283129283129 1375:C2,128|3b650c7303ff5524f7c0010000007407bf03000000eb068b388d7c3f018b75008d76f03b75087303ff5520897500c746fc03000000ba6c5476418916897e0889460489f089da0bc0ff1289c1b80100000089ca90ff1283f8017506b801000000c38b388b45008d40f83b45087303ff5520894500c740fc010000008b378930c3|@1378,63|17,0,1 54,0,@1376 77,0,0 92,0,0 1376:C2,108|8b7a083bc77506b801000000c38b7204f7c601000000740489f3eb118d580889d9d1e90fb60c0e8d4c090189cb8d48028b45008d40f43b45087303ff5520894500c740fc02000000894804891889c38b45008d40f83b45087303ff5520894500c740fc010000008918c30bc0|@1377,63|8,0,0 1377:S29|537472696e674376742e7363616e537472696e67283229726472283129 1378:S23|537472696e674376742e7363616e537472696e67283229 1379:S11|507265636564656e636520 1380:S37|206e6f7420616c6c6f7765642c206d757374206265206265747765656e203020616e642039 1381:C2,20|3b650c7303ff55248b780c8b420489faff220bc0|@751,63| 1382:C2,36|89c78b45008d40f43b45087303ff5520894500c740fc02000000897804c70001000000c3|@1160,33|31,0,0 1383:S8|5661726961626c65 1384:C2,256|3b650c7303ff55248b42088b78088b378b58188b0b81f989000000740489c8eb0289f052bb58267641e8de04ffff83f80174748b0424ff7008ff34248b5804b858267641ba60a97541e81e53ffff8b3c2450ff7708ff770cff7710ff7714ff7718ff771cff7720ff77248b5f048b070bc0e8ae43ffff508b5c24088b4424040bc0e80e54ffff8b7424088b5ef88b45008d40f43b45087303ff5520894500c740fc02000000eb05e9480000008b56c48950048b0c2489088b1383c800ff12b8010000008b5424080bc0e832ffffff8b7d008d7ff43b7d087303ff5520897d00c747fc020000008947048b3424893789f883c40cc3b80100000083c404c383c800|@1322,63|37,0,@1275 42,1,@743 64,0,@1275 69,0,@1029 74,1,@1030 114,1,@971 130,1,@1033 191,0,0 245,0,0 1385:C2,40|89c78b45008d40f03b45087303ff5520894500c740fc03000000897808895804c70009000000c390|@1386,41|34,0,4 1386:S27|50415253455f5452454528292e6d6b446972656374697665283229 1387:S2|6974 1388:S29|50415253455f44454328292e7061727365446563283329646563283429 1389:C2,168|3b650c7303ff55248b7a0457ff7708ff770cff7710ff7714ff7718ff771cff7720ff77248b5f048b07e83e42ffff8b34246a03ff36ff7604ff7608ff760cff7610ff7614ff7618ff761cff7620ff762489c3b87c5876410bc0e87e04ffff50506a016a036a038d5c240c53bb1f4e0000b8c8cc7441e8ae48ffff8b45008d40f43b45087303ff5520894500c740fc020000008b142489108b4c240489480483c40ce94649ffff0bc0|@1393,63|42,1,@971 83,0,@1390 90,1,@752 108,0,9999 113,0,@202 118,1,@1003 162,1,@1005 1390:O1|@1391 1391:C2,20|3b650c7303ff55248b780cb8b458764189faff22|@751,63|12,0,@1392 1392:S31|467265652074797065207661726961626c6573206e6f7420616c6c6f776564 1393:S36|50415253455f44454328292e7061727365446563283329676c6f62616c456e762d283129 1394:O1|@1395 1395:C2,628|89c7f7c701000000741883ff037c1881ff870000007f15be425976418d74bef4ffe6e923020000e91e020000e91902000090e924020000909090e922020000909090e903020000909090e9fb010000909090e9f3010000909090e9fc010000909090e9fa010000909090e9db010000909090e9d3010000909090e9cb010000909090e9da010000909090e9cc010000909090e9ca010000909090e9ab010000909090e9b4010000909090e99b010000909090e9aa010000909090e9a2010000909090e994010000909090e992010000909090e98a010000909090e96b010000909090e974010000909090e972010000909090e953010000909090e95c010000909090e943010000909090e93b010000909090e94a010000909090e942010000909090e923010000909090e92c010000909090e913010000909090e928010000909090e903010000909090e9fb000000909090e9f3000000909090e90e010000909090e9e3000000909090e9db000000909090e9d3000000909090e9cb000000909090e9d4000000909090e9bb000000909090e9c4000000909090e9ab000000909090e9a3000000909090e9ac000000909090e993000000909090e98b000000909090e983000000909090e98c000000909090e973000000909090e97c000000909090e963000000909090e95b000000909090e953000000909090e95c000000909090e943000000909090e93b000000909090e933000000909090e92b000000909090e934000000909090e92c000000909090e924000000909090e91c000000909090e91400000090909083f8437506b803000000c3b801000000c3b803000000c3b803000000c3b803000000c3b803000000c390|@979,49|24,0,$1395+50 592,0,1 598,0,0 604,0,1 610,0,1 616,0,1 622,0,1 1396:C2,624|3b650c7303ff55248b7af48b77088b1e8b4f188b3181fe89000000740689c389f0eb0689c689d889f383f873740583f8017506b801000000c38b72fc5253508b5e0483c800e822fffeff83f80174718b5c24048b042483c800e80efffeff83f80175628b5c24088b53f4bbcc9f75418b4224ba703d75410bc0e86ae1feff83f801746b8b4424088b78f457ff7708ff770cff7710ff7714ff7718ff771cff7720ff77248b5f048b0790e8d63dffff8b34246a01ff36ff7604ff7608ff760ceb0ae98b010000e924000000ff7610ff7614ff7618ff761cff7620ff762489c3b82c5e76410bc0e80a00ffff89c1eb06b9010000005050508b5c240c83fb4d75238b542414ff72888b5af48b428c90e80602000089e1890189e0bfcc9e7641897804eb7283fb4575238b542414ff72888b5af48b428c90e82a42000089e1890189e0bf8ca27641897804eb6083fb4375288b542414ff72888b5af48b428c90e81a3500008b4c24148b79fc89e6890689e38b5708895304eb7083fb2975338b542414ff72888b5af48b428ce8ee3400008b4c2414eb05e9830000008b79fc89e6890689e38b5708895304eb72e96d0000008b5424148b4af4ff7108ff710cff7110ff7114ff7118ff711cff7120ff71248b59048b010bc0e8aa3cffff8b7c241450ff77f4ff7788eb05e930000000bb030000008b478c8b579090ff128b1c24e8221000008b7424188b5efc8d54240489028d4c24048b430889410483c4048b4424048b54241490e8d6fdffff8b7d008d7ff43b7d087303ff5520897d00c747fc020000008947048b3424893789f883c418c38b5c24088b5bf4b877000000ba0c967541e82238ffffb80100000083c40cc390|@1518,63|52,0,0 70,1,@743 90,1,@743 107,0,@995 115,0,@599 122,1,@601 170,1,@971 223,0,@1397 230,1,@752 239,0,0 270,1,@1400 281,0,@1504 310,1,@1506 321,0,@1516 350,1,@1477 394,1,@1477 470,1,@971 493,0,1 510,1,@1413 600,0,59 605,0,@957 610,1,@959 615,0,0 1397:O1|@1398 1398:C2,20|3b650c7303ff55248b780cb8645e764189faff22|@1164,63|12,0,@1399 1399:S74|4d4c205374616e6461726420726571756972657320273b27206265747765656e20646966666572656e74206b696e6473206f6620746f702d6c6576656c206465636c61726174696f6e2e 1400:C2,52|3b650c7303ff552452505389d8ba505b754183c800e89efcfeff8d54240c83c800e82a0000008b7c240c83c41457e9613f000090|@1503,63|14,0,@745 22,1,@747 34,1,@1401 47,1,@1501 1401:C2,116|3b650c7303ff552452b80100000083c800e87a0000008b3c2450ff77f4bbac8d7641b807000000ba00a3754190e8d243ffff83f801740f8b5424040bc0e8beffffff89c6eb05be010000008b5d008d5bf43b5d087303ff5520895d00c743fc020000008973048b1424891389d883c408c383c800|@1014,63|10,0,0 18,1,@1402 30,0,@1468 35,0,3 40,0,@1011 46,1,@1012 71,0,0 1402:C2,1504|8d7c24b03b7d0c7303ff55288b7af452ff7708ff770cff7710ff7714ff7718ff771cff7720ff77248b5f048b07e85a3affff8b34248b5efc8b53fc89c18b45008d40f43b45087303ff5520894500c740fc020000008b7a0c8978048b5e04891890e8be48ffff8b142451ff72f4ff342489c3b818bc7541ba60a9754190e85249ffff8b0c2450ff7108ff710cff7110ff7114ff7118ff711cff7120ff71248b59048b010bc0e8e239ffff508b5c24088b4424040bc0e8424affff8b44240c8b78f48b77088b1e8b57188b0a81f98900000074078b58f489c8eb078b48f489d889cb83f869750e89d8ba505b7541e8e6fafeffeb12b851000000ba0c96754183c800e88a35ffff8b44240c8b78fc8b77fc8b58048b45008d40f43b45087303ff5520894500c740fc020000008b561489500489180bc0e8ea47ffff505050508b4c241c8b79f48b77088b1e8b57188b0a81f989000000740689c389c8eb0689c189d889cb83f86b7546b801000000e88a0400008b7d008d7ff83b7d087303ff5520897d00c747fc01000040c7070100000089e6c7060300000089e3ba4097040889530489e189790889e789470ceb708b44241c8b48f48b71088b168b79188b0781f8890000007402eb0289d053bbe4657641e89ef9feff83f801746a8b7c2420ff34248b5ff48b47f88b57fc0bc0e8de04000083c800e8020400008b75008d76f83b75087303ff5520897500c746fc01000040c706010000008d5c2404eb05e979010000c703030000008d542404b940970408894a048d7c24048977088d74240489460ceb738b45008d40f43b45087303ff5520894500c740fc02000000bf08ba75418978048b3424893083c800e8b246ffff8b5c2420ff73f4ff342489c3b818bc7541ba60a9754190e84647ffff8b142450ff7208ff720cff7210ff7214ff7218ff721cff7220ff72248b5a048b020bc0e8d637ffffeb05e9dc000000508b5c24088b44240483c800e82e48ffff8b4c24288b41f48b78088b378b58188b1381fa89000000740489d0eb0289f083f85f75128b41f4ba505b754183c800e8d6f8feffeb128b59f4b875000000ba0c967541e87a33ffff8b45008d40f43b45087303ff5520894500c740fc02000000b9688776418948048b7c2408893890e8e245ffff8b742428508b5ef48b46f88b56fc90e85a1500008b5d008d5bf83b5d087303ff5520895d00c743fc01000040c703010000008d54240cc702030000008d4c240c8b3c248979048d74240c895e088d5c240c89430c83c40883c4048b55008d52ec3b55087303ff5520895500c742fc040000008b0c24890a8b4424048942048b7c2408897a088b74240c89720c8b5c241c8b4bf48b41088b388b71188b0681f8890000007402eb0289f883f86b7512528b43f4ba505b7541e8daf7feff89c7eb16528b5bf4b853000000ba0c96754190e87a32ffff89c78b7c24208b77f48b5e088b138b4e188b0181f8890000007402eb0289d083f8657507ba03000000eb05ba010000005256bb68b77541b85f000000ba00a375410bc0e8163fffff83f8017402eb248b7c2424ff77f4bb68b77541b865000000ba00a375410bc0e8f23effff83f8017502eb498b7424248b45008d40f43b45087303ff5520894500c740fc02000000bb84a875418958048b5604891083c800e86a44ffff8b4c2424508b59f48b41f88b51fc90e8e213000089c7eb05bf589c75418b7424248b5ef48b53088b0a8b43188b1081fa89000000740489d0eb0289c883f85b7513578b46f4ba505b754190e8cef6feff89c1eb16578b5ef4b87b000000ba0c96754190e86e31ffff89c18b4c2428ff71048b59f48b41f88b51fc90e8ce220000505050505050508b7d008d7ff83b7d087303ff5520897d00c747fc01000040c7070100000089e68b5c2424891e89e289420489e18b44244089410889e68b5c2438895e0c89e28b4c2420894a1089e089781489e78b74241c8977188b45008d40e03b45087303ff5520894500c740fc070000008b1c2489188b5424048950048b4c24088948088b7c240c89780c8b7424108970108b7424148970148b5c241889581883c448c3|@1500,63|46,1,@971 98,1,@1025 115,0,@1076 120,0,@1029 126,1,@1030 166,1,@971 182,1,@1033 233,0,@745 238,1,@747 245,0,40 250,0,@957 258,1,@959 310,1,@1025 361,0,0 366,1,@1403 396,0,0 404,0,1 411,0,I48 461,0,@1405 466,1,@743 494,1,@1407 502,1,@1403 532,0,0 549,0,1 558,0,I48 606,0,@1069 622,1,@1025 639,0,@1076 644,0,@1029 650,1,@1030 690,1,@971 714,1,@1033 758,0,@745 766,1,@747 776,0,58 781,0,@957 786,1,@959 815,0,@1465 830,1,@1025 850,1,@1431 880,0,0 890,0,1 1013,0,@745 1018,1,@747 1031,0,41 1036,0,@957 1042,1,@959 1083,0,1 1090,0,0 1097,0,@1056 1102,0,47 1107,0,@1011 1114,1,@1012 1133,0,@1056 1138,0,50 1143,0,@1011 1150,1,@1012 1190,0,@1023 1206,1,@1025 1226,1,@1431 1235,0,@989 1280,0,@745 1286,1,@747 1299,0,61 1304,0,@957 1310,1,@959 1334,1,@1467 1371,0,0 1403:C2,36|89c78b45008d40f43b45087303ff5520894500c740fc02000000897804c700f7ffffffc3|@1404,33|31,0,-5 1404:S6|536967446563 1405:O1|@1406 1406:C2,96|83f8537506b803000000c383f84b7506b803000000c383f8437506b803000000c383f8177506b803000000c383f83d7506b803000000c383f8517506b803000000c383f83b7506b803000000c383f80f7506b803000000c3b801000000c30bc0|@979,1|6,0,1 17,0,1 28,0,1 39,0,1 50,0,1 61,0,1 72,0,1 83,0,1 89,0,0 1407:C2,56|3b650c7303ff552450505050525053ff70088d5c2410b8010000008b52d40bc0ff12b8010000008d5424200bc0e82200000083c420c20400|@1464,63|23,0,0 35,0,0 46,1,@1408 1408:C2,1436|3b650c7303ff55248b7aec8b77fc8b45008d40f43b45087303ff5520894500c740fc020000008b5e2c8958048b4a0489085283c800e8c641ffff8b3c2468746c7641ff77e48b5f04ba68ad7541e86646ffff8b34248b5ee48b53088b0a8b43188b3881ff89000000740489f8eb0289c883f80f757252ff730cff7310ff7314ff7318ff731cff7320ff73248b038b7b0489fb83c800e8ce32ffff8b34248b5eec8b53fc89c18b45008d40f43b45087303ff5520894500c740fc020000008b7a308978048b5e04891890e83241ffff8b14248b7ae88b75008d76f43b75087303ff5520897500eb05e979000000c746fc02000000bb886c7641891e8b5ae4895e048b55008d52f03b55087303ff5520895500c742fc030000008972088b77048972048b1f891a8b1c248b7bec515089d3b8030000008b57dc90ff128b1c24e8c60500008b4d008d49f43b4d087303ff5520894d00c741fc02000000c74104010000008901eb7083f83b75708b46e4ff7008ff700cff7010ff7014ff7018ff701cff7020ff70248b58048b0083c800e8d631ffff8b3c248b77ec8b5efc89c28b45008d40f43b45087303ff5520894500c740fc020000008b4b308948048b7704893052e83a40ffff8b5c2404508b43e4ba505b7541eb0ae917030000e94e0000000bc0e8cef2feff8b542408ff72e88d542410e89a05000083c800e84adbffff8b5c240883c800e8fe0400008b4d008d49f43b4d087303ff5520894d00c741fc02000000c74104010000008901eb7083f85175708b46e4ff7008ff700cff7010ff7014ff7018ff701cff7020ff70248b58048b0083c800e80e31ffff8b3c248b77ec8b5efc89c28b45008d40f43b45087303ff5520894500c740fc020000008b4b308948048b7704893052e8723fffff8b5c2404508b43e4ba505b7541eb0ae94c020000e94e0000000bc0e806f2feff8b542408ff72e88d542410e8a605000083c800e882daffff8b5c240883c800e8360400008b4d008d49f43b4d087303ff5520894d00c741fc02000000c74104010000008901eb7183f83d75248b46e4ba505b754183c800e8aaf1feff8b0424ff70e48d54240890e81e06000089c1eb7683f81775238b46e4ba505b75410bc0e882f1feff8b0424ff70e48d54240890e8de08000089c1eb5e83f843755e8b46e4ba505b75410bc0e85af1feff8b0424ff70e48d542408eb05e9830100000bc0e8aa0b000083c800e8ae1500008b4d008d49f43b4d087303ff5520894d00c741fc02000000eb05e953010000c74104010000008901eb74e94301000083f853756f8b46e4ba505b754183c800e8f6f0feffb8a07a76410bc0e8363effff8b3c2468e47a7641ff77e48b5f04ba68ad7541e8d642ffff8b34248b5eec8b53fc8b45008d40f43b45087303ff5520894500c740fc020000008b4a308948048b7e04893883c800e8ea3dffffeb0ae9cf000000e99b00000089c68b45008d40f43b45087303ff5520894500c740fc02000000bb18bc7541895804893083c800e8b23dffff8b1424508b5ae48b42e88b52ec0bc0e82a0d000050b8010000008d54240890e80a1500008b4d008d49f43b4d087303ff5520894d00c741fc020000008941048b0424890189c890e81e1600008b4d008d49f43b4d087303ff5520894d00c741fc02000000c74104010000008901eb2f83f84b75248b46e4ba505b754183c800e8e2effeff8b0424ff70e48d54240890e82a16000089c1eb06b90100000050505083c4088b4424048b78e48b77088b1e8b57188b0281f8890000007402eb0289d883f87375178b442404518b40e4ba505b754190e88eeffeff89c3eb06bb01000000518b7c24088b77e48b5e088b138b4e188b0181f8890000007402eb0289d08b57ec8b5afc8b5b2c83c800e8f2eefeff83f801742fb8010000008b54240890e88efaffff83f80175078b042483c40cc3508b4424048d5424100bc0e8321a000083c410c38b042483c40cc383c800|@1463,63|54,1,@1025 62,0,@1409 73,0,@1042 78,1,@1043 150,1,@971 202,1,@1025 244,0,@1410 304,0,1 318,1,@1413 349,0,0 398,1,@971 450,1,@1025 463,0,@745 482,1,@747 498,1,@1415 506,1,@1344 518,1,@1413 549,0,0 598,1,@971 650,1,@1025 663,0,@745 682,1,@747 698,1,@1416 706,1,@1344 718,1,@1413 749,0,0 766,0,@745 774,1,@747 790,1,@1417 807,0,@745 814,1,@747 830,1,@1422 847,0,@745 854,1,@747 878,1,@1429 886,1,@1446 924,0,0 946,0,@745 954,1,@747 959,0,@1432 966,1,@1025 974,0,@1435 985,0,@1042 990,1,@1043 1042,1,@1025 1085,0,@1076 1098,1,@1025 1118,1,@1431 1124,0,0 1134,1,@1448 1174,1,@1450 1205,0,0 1222,0,@745 1230,1,@747 1246,1,@1452 1255,0,0 1308,0,@745 1314,1,@747 1323,0,0 1370,1,@743 1380,0,0 1418,1,@1461 1409:S9|5369676e6174757265 1410:C2,156|3b650c7303ff55248b7a045057ff7708ff770cff7710ff7714ff7718ff771cff7720ff77248b5f048b0783c800e86a2dffff50bbb0a575418b44240890e8eea5feff8b75008d76f43b75087303ff5520897500c746fc02000000bb406d7641891e8946048b5424046a03ff32ff7204ff7208ff720cff7210ff7214ff7218ff721cff7220ff72248b5c242c89f0e87aeffeffb8589c754183c40cc390|@1412,63|46,1,@971 52,0,@1018 62,1,@323 91,0,@1411 142,1,@752 147,0,@989 1411:C2,20|3b650c7303ff55248b780c8b420489faff220bc0|@751,63| 1412:S75|50415253455f44454328292e70617273654465632833297369676e6174757265537065632833297061727365536967456e7472696573283129746869735369672d6e6577656e762d283129 1413:C2,72|8b7d008d7ff83b7d087303ff5520897d00c747fc01000040c7070100000089c68b45008d40ec3b45087303ff5520894500c740fc0400000089780c895808897004c7000d000000c3|@1414,57|26,0,0 67,0,6 1414:S27|535452554354555245535f28292e6d6b546f704c6576656c283229 1415:C2,184|3b650c7303ff55248b45008d40f43b45087303ff5520894500c740fc02000000bf8cd275418978048b72f4893089d10bc0e83a3affff8b79fc8b77ec8b59f051ff7304ff73086a016a038b1b8b56e090ff128b14248b4afc8b79ec50ff77f4bb68b77541b807000000ba00a3754183c800e84a34ffff83f801740f8b5424040bc0e87affffff89c6eb05be010000008b5d008d5bf43b5d087303ff5520895d00c743fc020000008973048b1424891389d883c408c383c800|@1151,63|33,0,@1148 50,1,@1025 96,0,@1056 101,0,3 106,0,@1011 114,1,@1012 139,0,0 1416:C2,184|3b650c7303ff55248b45008d40f43b45087303ff5520894500c740fc02000000bf8cd275418978048b72f4893089d10bc0e86639ffff8b79fc8b77ec8b59f051ff7304ff73086a036a038b1b8b56e090ff128b14248b4afc8b79ec50ff77f4bb68b77541b807000000ba00a3754183c800e87633ffff83f801740f8b5424040bc0e87affffff89c6eb05be010000008b5d008d5bf43b5d087303ff5520895d00c743fc020000008973048b1424891389d883c408c383c800|@1151,63|33,0,@1148 50,1,@1025 96,0,@1056 101,0,3 106,0,@1011 114,1,@1012 139,0,0 1417:C2,116|3b650c7303ff552452b80100000083c800e87a0000008b3c2450ff77f8bb68b77541b807000000ba00a3754190e8e632ffff83f801740f8b5424040bc0e8beffffff89c6eb05be010000008b5d008d5bf43b5d087303ff5520895d00c743fc020000008973048b1424891389d883c408c383c800|@1014,63|10,0,0 18,1,@1418 30,0,@1056 35,0,3 40,0,@1011 46,1,@1012 71,0,0 1418:C2,376|3b650c7303ff55248b42fc8b78e452ff7708ff770cff7710ff7714ff7718ff771cff7720ff77248b5f048b0790e86e29ffff8b34248b5efc89c28b45008d40f43b45087303ff5520894500c740fc02000000b908ba75418948048b7b04893889d1e8d237ffff8b3c248b77fc51ff76e4ff342489c3b818bc7541ba60a975410bc0e86238ffff8b1c2450ff7308ff730cff7310ff7314ff7318ff731cff7320ff73248b138b4b0489cb89d00bc0e8ee28ffff508b5c24088b4424040bc0e84e39ffff8b44240c8b78fc8b77e48b5e088b138b4e188b0181f8890000007402eb0289d083f85f751389f0ba505b754183c800e8f6e9feff89c2eb1689f3b875000000ba0c96754183c800e89624ffff89c28b7c240c8b77fc8b5eec8b53fc8b45008d40f43b45087303ff5520894500c740fc020000008b4a348948048b7e04893890e8f236ffff8b74240c8b5efcff73fc8b5be4ba94ae754190e8d23cffff8b5424088b4c24108954241089c38b042483c41051e91c000000|@1421,63|46,1,@971 83,0,@1069 98,1,@1025 118,0,@1076 123,0,@1029 130,1,@1030 174,1,@971 190,1,@1033 234,0,@745 242,1,@747 253,0,58 258,0,@957 266,1,@959 322,1,@1025 340,0,@1045 346,1,@1047 372,1,@1419 1419:C2,48|89c78b45008d40ec3b45087303ff5520894500c740fc0400000089580c8978088b5c2404895804c70011000000c20400|@1420,41|41,0,8 1420:S25|535452554354555245535f28292e6d6b56616c536967283329 1421:S73|50415253455f44454328292e70617273654465632833297369676e6174757265537065632833297061727365536967456e7472696573283129746869735369672d646f56616c283129 1422:C2,116|3b650c7303ff552452b80100000083c800e87a0000008b3c2450ff77f8bb68b77541b807000000ba00a3754190e8fe2fffff83f801740f8b5424040bc0e8beffffff89c6eb05be010000008b5d008d5bf43b5d087303ff5520895d00c743fc020000008973048b1424891389d883c408c383c800|@1014,63|10,0,0 18,1,@1423 30,0,@1056 35,0,3 40,0,@1011 46,1,@1012 71,0,0 1423:C2,348|3b650c7303ff55248b42fc8b78e452ff7708ff770cff7710ff7714ff7718ff771cff7720ff77248b5f048b0790e88626ffff8b34248b5efc89c28b45008d40f43b45087303ff5520894500c740fc02000000b9e47476418948048b7b04893889d1e8ea34ffff8b3c248b77fc51ff76e4ff342489c3b858267641ba60a975410bc0e87a35ffff8b1c2450ff7308ff730cff7310ff7314ff7318ff731cff7320ff73248b138b4b0489cb89d00bc0e80626ffff508b5c24088b4424040bc0e86636ffff8b44240c8b78fcff77e4bb68b77541b82d000000ba00a375410bc0e8be2effff83f80174538b5c240c8b53fc8b4aec8b41fc8b78348b45008d40f43b45087303ff5520894500c740fc020000008978048b720489300bc0e83234ffff8b5c240c8b53fcff72e08b5ae4ba94ae754190e8123affff89c6eb05bec8cc74418b5c24088b542410895c241089f38b042483c41052e95700000083c800|@1428,63|46,1,@971 83,0,@1424 98,1,@1025 118,0,@1275 123,0,@1029 130,1,@1030 174,1,@971 190,1,@1033 205,0,@1056 210,0,22 215,0,@1011 222,1,@1012 282,1,@1025 300,0,@1045 306,1,@1047 315,0,@202 341,1,@1426 1424:O1|@1425 1425:C2,20|83f82d7506b803000000c3b801000000c383c800|@742,1|6,0,1 12,0,0 1426:C2,48|89c78b45008d40ec3b45087303ff5520894500c740fc0400000089580c8978088b5c2404895804c700ffffffffc20400|@1427,41|41,0,-1 1427:S24|535452554354555245535f28292e6d6b4578536967283329 1428:S72|50415253455f44454328292e70617273654465632833297369676e6174757265537065632833297061727365536967456e7472696573283129746869735369672d646f4578283129 1429:C2,116|3b650c7303ff552452b80100000083c800e87a0000008b3c2450ff77f8bb68b77541b807000000ba00a3754190e8022dffff83f801740f8b5424040bc0e8beffffff89c6eb05be010000008b5d008d5bf43b5d087303ff5520895d00c743fc020000008973048b1424891389d883c408c383c800|@1014,63|10,0,0 18,1,@1430 30,0,@1056 35,0,3 40,0,@1011 46,1,@1012 71,0,0 1430:C2,452|3b650c7303ff55248b42fc8b78e452ff7708ff770cff7710ff7714ff7718ff771cff7720ff77248b5f048b0790e88a23ffff8b34248b5efc50ff73e4ff3424bb68b77541b858267641ba60a9754183c800e8ae32ffff8b142450ff7208ff720cff7210ff7214ff7218ff721cff7220ff72248b5a048b020bc0e83e23ffff508b5c24088b4424040bc0e89e33ffff8b4c240c8b41fc8b78e48b77088b1e8b57188b0a81f98900000074078b58e489c8eb078b48e489d889cb83f85f750f89d8ba505b754190e83ee4feffeb12b875000000ba0c96754183c800e8e21effff8b44240c8b78fc8b77ec8b5efc8b45008d40f43b45087303ff5520894500c740fc020000008b53348950048b4f04890883c800e83e31ffff8b7c240c8b77fc508b5ee48b46e88b56ec0bc0e8b20000005050505050508b5d008d5bf83b5d087303ff5520895d00c743fc01000040c7030100000089e28b4c2420890a89e78b74241889770489e2b9589c7541894a0889e7c7470c0100000089e6895e1089e38943148b45008d40e43b45087303ff5520894500c740fc060000008b142489108b4c24048948048b7c24088978088b74240c89700c8b5c24108958108b54241489501483c428c3|@1445,63|46,1,@971 64,0,@1056 69,0,@1275 74,0,@1029 82,1,@1030 122,1,@971 138,1,@1033 192,0,@745 198,1,@747 205,0,58 210,0,@957 218,1,@959 274,1,@1025 298,1,@1431 334,0,0 358,0,@989 370,0,0 1431:C2,572|3b650c7303ff552489d15053b8a07a7641e85e30ffff5168e47a7641ff7424088b5c2418ba68ad7541e8fe34ffffff742404bb68b77541b849000000ba00a37541e87e2affff83f80174738b45008d40f43b45087303ff5520894500c740fc02000000bf244676418978048b7424108930e8fe2fffff89c38b45008d40f43b45087303ff5520894500c740fc02000000ba007b7641895004891883c800e8d22fffff89c18b45008d40f43b45087303ff5520894500c740fc02000000eb05e978000000bfbc5a75418978048908e8a22fffff508b5c24088b44240c8b5424040bc0e83aedffff83c800e85eecffff8b7424048b5e088b138b4e188b3981ff89000000740689c289f8eb0689c789d089fa83f815750f5289f0ba505b7541e806e2feffeb125289f3b8887a7541ba0c967541e8aa1cffff8b0424eb718b4424048b78088b378b58188b1381fa89000000740489d1eb0289f183f90375718b45008d40f43b45087303ff5520894500c740fc02000000b9007b76418948048b7c2410893883c800e8ea2effffff74240489c3b818bc7541ba60a9754183c800e8822fffff8b74240450ff7608eb05e949000000ff760cff7610ff7614ff7618ff761cff7620ff76248b5e048b06eb05e92200000083c800e80220ffff508b5c240c8b4424040bc0e86230ffff8b0424e8fe000000eb06b8589c75415050ff74240cbb68b77541b855000000ba00a3754183c800e8ae28ffff83f80174158b04248d54241483c800e81e01000083c414c204008b042483c414c2040083c800|@1444,63|13,0,@1432 18,1,@1025 24,0,@1435 37,0,@1042 42,1,@1043 51,0,@1056 56,0,36 61,0,@1011 66,1,@1012 100,0,@1350 114,1,@1025 145,0,@1436 158,1,@1025 196,0,@740 206,1,@1025 226,1,@1407 234,1,@1403 281,0,@745 286,1,@747 296,0,@845 301,0,@957 306,1,@959 373,0,@1436 390,1,@1025 401,0,@1076 406,0,@1029 414,1,@1030 470,1,@971 486,1,@1033 494,1,@1438 501,0,@989 512,0,@1056 517,0,42 522,0,@1011 530,1,@1012 550,1,@1440 1432:O2|@1076,@1433 1433:O1|@1434 1434:C2,20|83f8497506b803000000c3b801000000c383c800|@742,1|6,0,1 12,0,0 1435:S18|5374617274206f66207369676e6174757265 1436:O1|@1437 1437:C2,20|83f8557506b803000000c3b801000000c383c800|@742,1|6,0,1 12,0,0 1438:C2,36|89c78b45008d40f43b45087303ff5520894500c740fc02000000897804c700f5ffffffc3|@1439,33|31,0,-6 1439:S14|5369676e61747572654964656e74 1440:C2,728|3b650c7303ff55248b7af88b77088b1e8b4f188b3181fe89000000740689c389f0eb0689c689d889f383f83b751252538b42f8ba505b754190e8a2dffeffeb1652538b5af8b89c797541ba0c9675410bc0e8421affff8b5c24048b53f8ff7208ff720cff7210ff7214ff7218ff721cff7220ff72248b5a048b0283c800e8121effff505050508d5c2404b8010000000bc0e85a0dffff8b4d008d49f03b4d087303ff5520894d00c741fc030000008b44240489018b7c24088979048b74240c8971088b5c24148b53f489cbb8010000008b52e890ff128b4c241489c78b45008d40f43b45087303ff5520894500c740fc02000000be84a875418970048b590489185783c800e8222cffffff71f889c3b8909b7541ba60a97541e8be2cffff8b5424188b4af450ff7424148b5c24148b4424108b51e483c800ff128b7c241c8b77f88b5e088b138b4e188b1981fb89000000740689c289d8eb0689c389d089da83f85b7510528b47f8ba505b7541e86edefeffeb16528b5ff8b87b000000ba0c96754183c800e80e19ffff8b542420689c797541ff72f88b5a04b810ad7541ba68ad75410bc0e83a30ffff8b4c24208b45008d40f43b45087303ff5520894500c740fc02000000bf007b76418978048b710489300bc0e8522bffff89c38b45008d40f43b45087303ff5520894500c740fc02000000ba8cd27541895004891883c800e8262bffffff34248b59f8ba94ae7541e80e31ffffff74240450ff7424148b5c24148b4424280bc0e8c60000008b4c242050ff71f8bb68b77541b855000000ba00a37541e83225ffff83f801740f8b04248b54242483c428e9a2fdffff8b442424ff70f8bb68b77541b807000000ba00a3754190e80225ffff83f80174508b7c24248b77f88b5e088b138b4e188b0181f8890000007402eb0289d083f83b750d8b042489fa83c428e952fdffff8b1181fa89000000740ab838a275410bc0ff552cc701070000008b042483c428c38b042483c428c30bc0|@1443,63|52,0,@745 58,1,@747 70,0,@826 75,0,@957 82,1,@959 126,1,@971 139,0,0 146,1,@937 204,0,0 245,0,@1023 262,1,@1025 272,0,@984 277,0,@1029 282,1,@1030 361,0,@745 366,1,@747 377,0,61 382,0,@957 390,1,@959 399,0,@826 410,0,@1040 415,0,@1042 422,1,@1043 455,0,@1436 470,1,@1025 501,0,@1148 514,1,@1025 525,0,@1045 530,1,@1047 554,1,@1441 567,0,@1056 572,0,42 577,0,@1011 582,1,@1012 614,0,@1056 619,0,3 624,0,@1011 630,1,@1012 697,0,@1008 708,0,3 1441:C2,88|8b7d008d7fe83b7d087303ff5520897d00c747fc050000008b742408897710895f0c8b5c240c895f088947048b44240489078b45008d40f43b45087303ff5520894500c740fc02000000897804c700efffffffc20c000bc0|@1442,57|79,0,-9 1442:S28|535452554354555245535f28292e6d6b576865726554797065283529 1443:S56|50415253455f44454328292e706172736544656328332970617273655369676e617475726528332967657457686572655479706573283129 1444:S40|50415253455f44454328292e706172736544656328332970617273655369676e6174757265283329 1445:S79|50415253455f44454328292e70617273654465632833297369676e6174757265537065632833297061727365536967456e7472696573283129746869735369672d646f537472756374757265283129 1446:C2,36|89c78b45008d40f43b45087303ff5520894500c740fc02000000897804c7000f000000c3|@1447,33|31,0,7 1447:S12|537472756374757265446563 1448:C2,204|3b650c7303ff55248b42fc8b78e48b77088b1e8b4f188b0181f8890000007402eb0289d883f80375728b5afc52ff73e4ff34248b5b04b818bc7541ba60a9754190e8ee28ffff8b142450ff7208ff720cff7210ff7214ff7218ff721cff7220ff72248b5a048b020bc0e87e19ffff508b5c24088b4424040bc0e8de29ffff8b0424e87afaffff50b8010000008b54240c90e86affffff8b4d00eb05e9230000008d49f43b4d087303ff5520894d00c741fc020000008941048b0424890189c883c410c3b801000000c383c800|@1449,63|55,0,@1076 60,0,@1029 66,1,@1030 106,1,@971 122,1,@1033 130,1,@1438 136,0,0 196,0,0 1449:S74|50415253455f44454328292e70617273654465632833297369676e6174757265537065632833297061727365536967456e7472696573283129746869735369672d736967696473283129 1450:C2,36|89c78b45008d40f43b45087303ff5520894500c740fc02000000897804c700fbffffffc3|@1451,33|31,0,-3 1451:S10|496e636c756465536967 1452:C2,116|3b650c7303ff552452b80100000083c800e87a0000008b3c2450ff77f8bb18bc7541b807000000ba00a3754190e81221ffff83f801740f8b5424040bc0e8beffffff89c6eb05be010000008b5d008d5bf43b5d087303ff5520895d00c743fc020000008973048b1424891389d883c408c383c800|@1014,63|10,0,0 18,1,@1453 30,0,@1076 35,0,3 40,0,@1011 46,1,@1012 71,0,0 1453:C2,512|3b650c7303ff55248b42fc8b78e452ff7708ff770cff7710ff7714ff7718ff771cff7720ff77248b5f048b0790e89a17ffff8b34248b5efc50ff73e4bb68b77541b83b000000ba00a375410bc0e86220ffff8b5424048b4afc8b79ec8b77fc89c38b45008d40f43b45087303ff5520894500c740fc020000008b56388950048b7904893853e8da25ffff8b7424088b5efcff73e489c3b818bc7541ba60a9754190e86e26ffff8b5424088b4afc8b79e48b77088b1e8b57188b3281fe89000000740689c389f0eb0689c689d889f383f85b7511538b41e4ba505b754190e836d8feffeb16538b59e4b87b000000ba0c96754183c800e8d612ffff8b5c240c8b53fcff72e48d54241490e80e0100008b4d008d49f43b4d087303ff5520894d00c741fc020000008941048b4424048901ff74240c89cb8b44240ce8b20100008b7c24108b77fc8b5ee48b53088b0a8b7b188b3781fe89000000740689c189f0eb0689c689c889f183f80775268b4424108b70fc8b56e451bbcc9f75418b4224ba703d75410bc0e8a6b9feff83f8017565eb0351eb608b4c24148b41fc8b78e457ff7708ff770cff7710ff7714ff7718ff771cff7720ff77248b5f048b0790e80a16ffff8b34246a03ff36ff7604ff7608ff760cff7610ff7614ff7618ff761cff7620ff762489c3b8b88576410bc0e84ad8feffeb01508b44240483c41cc383c800|@1460,63|46,1,@971 61,0,@1056 66,0,29 71,0,@1011 78,1,@1012 134,1,@1025 151,0,@1076 156,0,@1029 162,1,@1030 216,0,@745 222,1,@747 233,0,61 238,0,@957 246,1,@959 266,1,@1454 314,1,@1455 375,0,@995 383,0,@599 390,1,@601 446,1,@971 487,0,@1457 494,1,@752 1454:C2,184|3b650c7303ff55248b7afc8b77fc8b5eec8b43fc8b48388b45008d40f43b45087303ff5520894500c740fc020000008948048b4e0489085290e80a24ffff8b3c248b77fc8b5efcff73e489c3b818bc7541ba60a9754183c800e89a24ffff8b142450ff72ecbb909b7541b85b000000ba00a3754190e81e1effff83f801740f8b5424040bc0e876ffffff89c1eb05b9010000008b45008d40f43b45087303ff5520894500c740fc020000008948048b3c24893883c408c390|@1014,63|58,1,@1025 77,0,@1076 82,0,@1029 90,1,@1030 102,0,@984 107,0,45 112,0,@1011 118,1,@1012 143,0,0 1455:C2,48|89c78b45008d40ec3b45087303ff5520894500c740fc0400000089580c8978088b5c2404895804c700f9ffffffc20400|@1456,41|41,0,-4 1456:S26|535452554354555245535f28292e6d6b53686172696e67283329 1457:O1|@1458 1458:C2,20|3b650c7303ff55248b780cb8f085764189faff22|@751,63|12,0,@1459 1459:S42|73686172696e67202e2e2e20616e64202e2e2e206973206e6f7420616c6c6f77656420696e204d4c3937 1460:S77|50415253455f44454328292e70617273654465632833297369676e6174757265537065632833297061727365536967456e7472696573283129746869735369672d646f53686172696e67283129 1461:C2,68|3b650c7303ff552483f80175048b42f0c352ff308b40040bc0e8e2ffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0424890289d083c408c3|@1462,5| 1462:S15|4c6973742e40283229617070283129 1463:S57|50415253455f44454328292e70617273654465632833297369676e6174757265537065632833297061727365536967456e7472696573283129 1464:S39|50415253455f44454328292e70617273654465632833297369676e617475726553706563283329 1465:O1|@1466 1466:C2,20|83f84b7506b803000000c3b801000000c383c800|@742,1|6,0,1 12,0,0 1467:C2,1520|3b650c7303ff55245253508b7afc8b45008d40f43b45087303ff5520894500c740fc020000008b771c897004b9ac8d764189080bc0e8e220ffff68e48d7641ff7424088b5c2418ba68ad754190e88225ffff8b45008d40f43b45087303ff5520894500c740fc02000000bf08ba75418978048b742410893090e89e20ffff89c38b45008d40f43b45087303ff5520894500c740fc02000000ba0c8e7641895004891883c800e87220ffff50ff742408bb68b77541b847000000ba00a3754183c800e8a61affff83f801745c8b04248d54241083c800e8ca0500008b7c24088b77088b1e8b57188b0a81f989000000740689c389c8eb0689c189d889cb83f815750f5389f8ba505b7541e8c2d2feffeb125389fbb8887a7541ba0c967541e8660dffff8b0c24eb74ff742408bb68b77541b827000000ba00a3754183c800e82a1affff83f80174598b4c2408ff7108ff710cff7110ff7114ff7118ff711cff7120ff71248b59048b0190e81611ffff5050508b7c241050505050ff7704ff77088d5c240cb80100000090e85200ffff8b75008d76f03b7508730feb0ae93d040000e9bd010000ff5520897500c746fc03000000bbe49b7641891e8b5424148956088b4c2404894e048d4424188b7c241089388d5c24188973048d5424188b0c24894a088b45008d40f03b45087303ff5520894500c740fc030000008b7c241889388b74241c8970048b5c24208958088b5424308b4afc89c78b45008d40f43b45087303ff5520894500c740fc020000008b71108970048b5c242489185790e8da1effff508b5c24348b4424048b5424380bc0e8fe0500008b5424308b4a088b398b72188b1e81fb89000000740689c789d8eb0689c389f889df83f821750f5789d0ba505b7541e846d1feffeb125789d3b8707a7541ba0c967541e8ea0bffff8b45008d40f43b45087303ff5520894500c740fc02000000ba244676418950048b4c242c890890e8521effff508b5c24388b4424088b54243c0bc0e822fdffff8b7d008d7ff43b7d087303ff5520897d00c747fc02000000c747040100000089078b7424348b5e088b138b4e188b0181f8890000007402eb0289d083f81575145789f0ba505b754183c800e8a2d0feff89c2eb165789f3b8887a7541ba0c9675410bc0e8420bffff89c26a01ff7424188b5c24088b44240c83c800e8fa0d000089c1eb708b45008d40f43b45087303ff5520894500c740fc02000000b92c9c76418948048b3c2489380bc0e88e1dffffff74240889c3b818bc7541ba60a9754183c800e8261effff50ff74240cbb68b77541b869000000ba00a3754183c800e8aa17ffff83f80174708b74240c8b5e088b13eb05e9030200008b4e188b0181f889000000740489c7eb0289d783ff6b756cb81500000090e8620e00008b75008d76ec3b75087303ff5520897500c746fc04000000c7460c01000000c7460801000000bb40970408895e0489068b7d008d7ff03b7d08730aeb05e94e010000ff5520897d00c747fc03000000897708c7470401000000c707f3ffffffeb718b7c24108b57fc8b45008d40f43b45087303ff5520894500c740fc020000008b5a148958048b4c2404890883c800e88e1cffff8b7c240c8b77088b1e8b57188b0a81f989000000740689c389c8eb0689c189d889cb8b4c24108b71fc538b5e180bc0e8aacefeff83f80174178b0424eb05e9260000008d542418e8ca01000089c7eb16ff34248b5c24148b4424108b542418e80efbffff89c783c4048b5c240c8b53088b0a8b43188b3081fe89000000740489f0eb0289c883f86b75125789d8ba505b754190e8aacefeff89c1eb1257b853000000ba0c967541e84e09ffff89c18b5d008d5bf83b5d087303ff5520895d00c743fc01000040c703010000008b4d008d49ec3b4d087303ff5520894d00c741fc0400000089590c8b5424048951088b0424894104c701fdffffffeb468b75008d76f83b75087303ff5520897500c746fc01000040c706010000008b4d008d49f03b4d087303ff5520894d00c741fc030000008971088b1c24895904c701f1ffffff505050505050505050505083c42c89c88d5424140bc0e8da0e000083c414c20400|@1499,63|45,0,@1468 54,1,@1025 59,0,@1470 72,0,@1042 78,1,@1043 107,0,@1069 122,1,@1025 153,0,@1471 166,1,@1025 176,0,@1056 181,0,35 186,0,@1011 194,1,@1012 214,1,@1473 261,0,@745 266,1,@747 276,0,@845 281,0,@957 286,1,@959 300,0,@1056 305,0,19 310,0,@1011 318,1,@1012 362,1,@971 388,0,0 394,1,@937 435,0,@1492 574,1,@1025 594,1,@1475 641,0,@745 646,1,@747 656,0,@843 661,0,@957 666,1,@959 695,0,@1350 710,1,@1025 761,0,0 802,0,@745 810,1,@747 822,0,@845 827,0,@957 834,1,@959 858,1,@1483 891,0,@1493 906,1,@1025 917,0,@1076 922,0,@1029 930,1,@1030 940,0,@1056 945,0,52 950,0,@1011 958,1,@1012 1008,0,10 1014,1,@1488 1045,0,0 1052,0,0 1057,0,I48 1103,0,0 1109,0,-7 1162,1,@1025 1214,1,@743 1238,1,@1473 1308,0,@745 1314,1,@747 1324,0,41 1329,0,@957 1334,1,@959 1366,0,0 1412,0,-2 1444,0,0 1483,0,-8 1510,1,@1495 1468:O1|@1469 1469:C2,20|83f8477506b803000000c3b801000000c383c800|@742,1|6,0,1 12,0,0 1470:S29|737472756374206f722066756e63746f72206170706c69636174696f6e 1471:O1|@1472 1472:C2,20|83f8657506b803000000c3b801000000c383c800|@742,1|6,0,1 12,0,0 1473:C2,332|3b650c7303ff55245050508b7af45050505250ff7704ff77088d5c2410b80100000083c800e812fbfeff8b75008d76f03b75087303ff5520897500c746fc03000000bbac8f7641891e8b5424188956088b4c2404894e048d44241c8b7c241489388d5c241c8973048d54241c8b0c24894a088b45008d40f03b45087303ff5520894500c740fc030000008b7c241c89388b7424208970048b5c242489580889c28b45008d40f43b45087303ff5520894500c740fc02000000b9244676418948048b7c2408893889d190e8aa19ffff8b7c240c508b5ff889c88b57fc0bc0e8ce00000050b81500000090e8ca0a00008b75008d76ec3b75087303ff5520897500c746fc04000000c7460c01000000c7460801000000bb40970408895e0489068b45008d40f03b45087303ff5520894500c740fc030000008970088b1424895004c700f3ffffff83c42cc383c800|@1491,63|30,0,0 38,1,@937 67,0,@1474 185,0,@1350 202,1,@1025 222,1,@1475 228,0,10 234,1,@1488 265,0,0 272,0,0 277,0,I48 321,0,-7 1474:C2,44|3b650c7303ff552452508b520883c800ff1283f801750f8b7c24048b04248b570483c408ff2283c408c30bc0|@950,63| 1475:C2,32|3b650c7303ff5524535250b8010000008d54240c90e82200000083c40cc20400|@1487,63|12,0,0 22,1,@1476 1476:C2,464|3b650c7303ff55248b7af88b77fc8b45008d40f43b45087303ff5520894500c740fc020000008b5e248958048b4a0489085283c800e85218ffff8b3c248b77fc8b5e088b138b4e188b3981ff89000000740689c289f8eb0689c789d089fa83f87375238b14248b42fcba505b754183c800e8cacafeffb8010000008b142483c404e97affffff8b04248b78fc8b5f088b0b8b77188b0681f8890000007402eb0289c88b0c248b59f88b7bfc528b5f200bc0e826cafeff83f801744d8b742404ff34248b5efc8b46f48b56f80bc0e81a01000050b8010000008b54240890e81effffff8b5d008d5bf43b5d087303ff5520895d00c743fc020000008943048b1424891389d883c40cc38b7424048b5efc8b53088b0a8b43188b3881ff89000000740489f8eb0289c8bb40ef754190e8aac9feff83f80174708b7424048b5efcff7308ff730cff7310ff7314ff7318ff731cff7320ff73248b138b4b0489cb89d00bc0e88e08ffff8b7c24048b77f850ff77fcff742408bb030000008b47f48b5690ff128b1c24e80adcffff50b8010000008b54240c90e866feffff8b5d008d5bf43b5d08730aeb05e91b000000ff5520895d00c743fc020000008943048b1424891389d883c410c3b80100000083c408c3|@1486,63|54,1,@1025 106,0,@745 114,1,@747 119,0,0 178,1,@743 206,1,@1477 212,0,0 296,0,@1180 302,1,@743 354,1,@971 374,0,1 390,1,@1413 396,0,0 456,0,0 1477:C2,736|8d7c24ac3b7d0c7303ff5528525053ff3053bb68b77541b843000000ba00a37541e8ca10ffff83f80174188d5424100bc0e8c60200008b7c241083c41857e985edffffff742404bb68b77541b829000000ba00a3754183c800e89210ffff83f80174738b7c2404ff7708ff770cff7710ff7714ff7718ff771cff7720ff77248b5f048b0790e87e07ffff5050508b74241450505050ff7604ff76088d5c240cb80100000090e8baf6feff8b5d008d5bf03b5d087303ff5520895d00c743fc03000000ba7098764189138b4c2414894b088b442404eb05e9f70100008943048d7c24188b74241089378d542418895a048d4c24188b04248941088b7d008d7ff03b7d087303ff5520897d00c747fc030000008b74241889378b5c241c895f048b5424208957088b4c24308b41fcff70108b45008d40f43b45087303ff5520894500c740fc020000008b0c248948048b4c243c89085790e84615ffff508b5c24348b4424048b54243c0bc0e86afcffff8b7c24308b77088b1e8b57188b0a81f989000000740689c389c8eb0689c189d889cb83f821750f5389f8ba505b7541e8b2c7feffeb125389fbb8707a7541ba0c967541e85602ffff5050508b45008d40f03b45087303ff5520894500c740fc03000000bfb898764189388b7424308970088b5c243c89580489e2890289e18b44243489410489e78b7424388977088b5d008d5bf03b5d087303ff5520895d00c743fc030000008b142489138b4c2404894b048b4424088943088b45008d40f43b45087303ff5520894500c740fc02000000bf244676418978048b742450893089d90bc0e84a14ffff508b5c244489c88b54244ce872fbffff8b7c24408b77088b1e8b57188b0a81f989000000740689c389c8eb0689c189d889cb83f815750f5389f8ba505b7541e8bac6feffeb125389fbb8887a7541ba0c967541e85e01ffffc7442454030000008b4424248b7c2450894424508b1c248b44241083c45057e90a040000b8589c754183c410c2040083c800|@1485,63|19,0,@1056 24,0,33 29,0,@1011 34,1,@1012 50,1,@1478 63,1,@1446 72,0,@1056 77,0,20 82,0,@1011 90,1,@1012 134,1,@971 160,0,0 166,1,@937 195,0,@1481 342,1,@1025 362,1,@1475 409,0,@745 414,1,@747 424,0,@843 429,0,@957 434,1,@959 466,0,@1482 576,0,@1350 594,1,@1025 610,1,@1475 657,0,@745 662,1,@747 672,0,@845 677,0,@957 682,1,@959 690,0,1 718,1,@1483 723,0,@989 1478:C2,116|3b650c7303ff552452b80100000083c800e87a0000008b3c2450ff77f4bbac8d7641b807000000ba00a3754190e8c20dffff83f801740f8b5424040bc0e8beffffff89c6eb05be010000008b5d008d5bf43b5d087303ff5520895d00c743fc020000008973048b1424891389d883c408c383c800|@1014,63|10,0,0 18,1,@1479 30,0,@1468 35,0,3 40,0,@1011 46,1,@1012 71,0,0 1479:C2,624|3b650c7303ff55248b7af452ff7708ff770cff7710ff7714ff7718ff771cff7720ff77248b5f048b07e84e04ffff8b34248b5efc8b53fc89c18b45008d40f43b45087303ff5520894500c740fc020000008b7a0c8978048b5e04891890e8b212ffff8b142451ff72f4ff342489c3b818bc7541ba60a9754190e84613ffff8b0c2450ff7108ff710cff7110ff7114ff7118ff711cff7120ff71248b59048b010bc0e8d603ffff508b5c24088b4424040bc0e83614ffff8b44240c8b78f48b77088b1e8b57188b0a81f989000000740489c8eb0289d883f8657507b803000000eb05b8010000008b5c240c50ff73f4bb68b77541b85f000000ba00a37541e8620cffff83f8017402eb248b542410ff72f4bb68b77541b865000000ba00a375410bc0e83e0cffff83f8017502eb458b4c24108b45008d40f43b45087303ff5520894500c740fc02000000bf84a875418978048b7104893083c800e8b611ffff508b59f48b41f88b51fc90e832e1ffff89c2eb05ba589c75418b4c24108b41f48b78088b378b58188b3b81ff89000000740489f8eb0289f083f85b7513528b41f4ba505b754190e81ec4feff89c6eb16528b59f4b87b000000ba0c96754190e8befefeff89c68b742414ff76048b5ef48b46f88b56fc90e81ef0ffff5050505050508b5d008d5bf83b5d087303ff5520895d00c743fc01000040c7030100000089e28b4c2428890a89e78b74242089770489e289420889e18b44241c89410c89e7895f1089e68b5c2418895e148b45008d40e43b45087303ff5520894500c740fc060000008b142489108b4c24048948048b7c24088978088b74240c89700c8b5c24108958108b54241489501483c430c390|@1480,63|42,1,@971 94,1,@1025 111,0,@1076 116,0,@1029 122,1,@1030 162,1,@971 178,1,@1033 219,0,1 226,0,0 239,0,@1056 244,0,47 249,0,@1011 254,1,@1012 273,0,@1056 278,0,50 283,0,@1011 290,1,@1012 330,0,@1023 346,1,@1025 362,1,@1431 371,0,@989 416,0,@745 422,1,@747 435,0,61 440,0,@957 446,1,@959 470,1,@1467 506,0,0 1480:S49|50415253455f44454328292e7061727365446563283329737472756374757265446563283329646f537472446563283129 1481:C2,44|3b650c7303ff552452508b520883c800ff1283f801750f8b7c24048b04248b570483c408ff2283c408c30bc0|@950,63| 1482:C2,36|3b650c7303ff552452508b520883c800ff128b7c24048b04248b570483c408ff2283c800|@1361,63| 1483:C2,56|89c78b45008d40e83b45087303ff5520894500c740fc050000008b7424088970108b54240489500c897808895804c70007000000c2080090|@1484,61|48,0,3 1484:S27|535452554354555245535f28292e6d6b4c6f63616c646563283429 1485:S38|50415253455f44454328292e7061727365446563283329737472756374757265446563283329 1486:S42|50415253455f44454328292e706172736544656328332973747244656328332967657444656373283129 1487:S32|50415253455f44454328292e7061727365446563283329737472446563283329 1488:C2,348|3b650c7303ff552450ff7504bfe29a7641576a098965048b75008d76f83b75087303ff5520897500c746fc01000040c70601000000a8017503ff553889c383c30270f66a0189dabb8100000089d00bc0ff15a09204088b4c240c89088b7d008d7ff83b7d087303ff5520897d00c747fc0100004089078b5d008d5bf43b5d087303ff5520895d00c743fc02000000ba2c3675418913894b048b45008d40f83b45087303ff5520894500c740fc01000040891889c38b45008d40ec3b45087303ff5520894500c740fc0400000089780c897008895804c700ffffffffff7424088f450483c410c38b1083fa09755b50bbffffffff8b4424040bc0e8c67bfeff89c3b8749b7641e8b277feff8b4d008d49f03b4d087303ff5520894d00c741fc03000000894108b854cf7441894104bffcc1b441893989c890ff552cb801000000eb1089c1b801000000e90400000083c404c30bc0ff552cb80100000090|@1490,63|13,0,$1488+230 49,0,0 72,0,64 82,0,I11 143,0,@564 215,0,-1 239,0,-1 250,1,@336 257,0,@1489 262,1,@323 294,0,@224 302,0,@7320 315,0,0 324,0,0 343,0,0 1489:S16|486173685461626c652e686173683a20 1490:S21|486173685461626c652e686173684d616b65283129 1491:S47|50415253455f44454328292e706172736544656328332973747275637456616c283329737472756374456e64283129 1492:C2,44|3b650c7303ff552452508b520883c800ff1283f801750f8b7c24048b04248b570483c408ff2283c408c30bc0|@950,63| 1493:O1|@1494 1494:C2,20|83f8697506b803000000c3b801000000c383c800|@742,1|6,0,1 12,0,0 1495:C2,180|3b650c7303ff55245250ff72f8bb68b77541b85f000000ba00a3754190e88606ffff83f80174308b7c2404ff77f08b5ff88b47f48b57fc0bc0e8a6dbffff6a0189c38b44240483c800e8820000008b54240483c408eba98b7c2404ff77f8bb68b77541b865000000ba00a37541e83606ffff83f80174338b742404ff76f08b5ef88b46f48b56fc0bc0e856dbffff6a0389c38b44240483c800e8320000008b54240483c408e956ffffff8b042483c408c383c800|@1498,63|14,0,@1056 19,0,47 24,0,@1011 30,1,@1012 58,1,@1431 74,1,@1496 95,0,@1056 100,0,50 105,0,@1011 110,1,@1012 138,1,@1431 154,1,@1496 1496:C2,48|89c78b45008d40ec3b45087303ff5520894500c740fc040000008b74240489700c895808897804c70009000000c20400|@1497,57|41,0,4 1497:S32|535452554354555245535f28292e6d6b536967436f6e73747261696e74283329 1498:S51|50415253455f44454328292e706172736544656328332973747275637456616c283329646f436f6e73747261696e7473283129 1499:S35|50415253455f44454328292e706172736544656328332973747275637456616c283329 1500:S49|50415253455f44454328292e706172736544656328332966756e63746f72446563283329646f46756e6374446563283129 1501:C2,36|89c78b45008d40f43b45087303ff5520894500c740fc02000000897804c70005000000c3|@1502,33|31,0,2 1502:S10|46756e63746f72446563 1503:S36|50415253455f44454328292e706172736544656328332966756e63746f72446563283329 1504:O1|@1505 1505:C2,20|83f84d7506b803000000c3b801000000c383c800|@742,1|6,0,1 12,0,0 1506:C2,52|3b650c7303ff552452505389d8ba505b754183c800e852bcfeff8d54240c83c800e82a0000008b7c240c83c41457e9d102000090|@1515,63|14,0,@745 22,1,@747 34,1,@1507 47,1,@1513 1507:C2,116|3b650c7303ff552452b80100000083c800e87a0000008b3c2450ff77f4bb68b77541b807000000ba00a3754190e88603ffff83f801740f8b5424040bc0e8beffffff89c6eb05be010000008b5d008d5bf43b5d087303ff5520895d00c743fc020000008973048b1424891389d883c408c383c800|@1014,63|10,0,0 18,1,@1508 30,0,@1056 35,0,3 40,0,@1011 46,1,@1012 71,0,0 1508:C2,404|3b650c7303ff55248b7af452ff7708ff770cff7710ff7714ff7718ff771cff7720ff77248b5f048b07e812fafeff8b342450ff76f4ff3424bb68b77541b858267641ba60a975410bc0e83a09ffff8b1c2450ff7308ff730cff7310ff7314ff7318ff731cff7320ff73248b138b4b0489cb89d00bc0e8c6f9feff508b5c24088b4424040bc0e8260affff8b44240c8b78f48b77088b1e8b57188b0a81f98900000074078b58f489c8eb078b48f489d889cb83f85b750e89d8ba505b7541e8cabafeffeb12b87b000000ba0c96754183c800e86ef5feff8b44240c8b78fc8b77fc8b58048b45008d40f43b45087303ff5520894500c740fc020000008b562889500489180bc0e8ce07ffff8b4c240c508b59f48b41f88b51fc90e846d7ffff505050508b7d008d7ff83b7d087303ff5520897d00c747fc01000040be94a17641893789e38b542418891389e18b74241089710489e3897b0889e289420c8b45008d40ec3b45087303ff5520894500c740fc040000008b0c2489088b7c24048978048b7424088970088b5c240c89580c83c420c30bc0|@1512,63|42,1,@971 57,0,@1056 62,0,@1275 67,0,@1029 74,1,@1030 118,1,@971 134,1,@1033 185,0,@745 190,1,@747 197,0,61 202,0,@957 210,1,@959 262,1,@1025 282,1,@1431 315,0,@1509 1509:O4|@1511,@1510,0,0 1510:S9|554e444546494e4544 1511:O3|0,@563,@442 1512:S49|50415253455f44454328292e70617273654465632833297369676e6174757265446563283329646f536967446563283129 1513:C2,36|89c78b45008d40f43b45087303ff5520894500c740fc02000000897804c7000b000000c3|@1514,33|31,0,5 1514:S12|5369676e6174757265446563 1515:S38|50415253455f44454328292e70617273654465632833297369676e6174757265446563283329 1516:O1|@1517 1517:C2,20|83f8457506b803000000c3b801000000c383c800|@742,1|6,0,1 12,0,0 1518:S38|50415253455f44454328292e70617273654465632833297061727365546f7044656373283129 1519:S23|50415253455f44454328292e7061727365446563283329 1520:O3|@978,@1522,@1521 1521:O3|@978,@1523,@1180 1522:O3|@978,@1504,@1516 1523:O3|@978,@1525,@1524 1524:O1|@1527 1525:O1|@1526 1526:C2,20|83f8437506b803000000c3b801000000c383c800|@742,1|6,0,1 12,0,0 1527:C2,20|83f8297506b803000000c3b801000000c383c800|@742,1|6,0,1 12,0,0 1528:O3|@978,@1529,@1023 1529:O3|@978,@1069,@1471 1530:O3|@978,@1270,@1350 1531:O3|@978,@1131,@1132 1532:O3|@978,@1180,@1525 1533:O3|@978,@1076,@1534 1534:O1|@1535 1535:C2,20|83f8277506b803000000c3b801000000c383c800|@742,1|6,0,1 12,0,0 1536:O3|@978,@1537,@1525 1537:O3|@978,@740,@1180 1538:O3|@978,@1350,@1148 1539:O3|@978,@1405,@740 1540:O3|@978,@1405,@1350 1541:O3|@978,@1540,@1148 1542:O3|@978,@1543,@1148 1543:O3|@978,@1131,@1023 1544:O3|@978,@1146,@1347 1545:O3|@978,@1424,@1023 1546:O3|@978,@1547,@1281 1547:O1|@1548 1548:C2,20|83f8137506b803000000c3b801000000c383c800|@742,1|6,0,1 12,0,0 1549:O3|@978,@1550,@1281 1550:O1|@1551 1551:C2,20|83f8397506b803000000c3b801000000c383c800|@742,1|6,0,1 12,0,0 1552:O3|@978,@1424,@1253 1553:O3|@978,@1289,@1069 1554:O3|@978,@1132,@1555 1555:O1|@1556 1556:C2,20|83f86f7506b803000000c3b801000000c383c800|@742,1|6,0,1 12,0,0 1557:O3|@978,@1131,@740 1558:O3|@978,@1557,@1132 1559:O3|@978,@740,@1350 1560:O3|@978,@1069,@1208 1561:O3|@978,@1076,@1184 1562:O3|@978,@1424,@1166 1563:C2,144|3b650c7303ff55248b7d008d7ff43b7d087303ff5520897d00c747fc02000000be00a7764189378b7424048977048b55008d52f03b55087303ff5520895500c742fc03000000b900a97641890a897a088972048b4d008d49f43b4d087303ff5520894d00c741fc02000000bed80b77418931895104ba40970408895424048b3424891c2489c389c889fa56ff2283c800|@1738,63|33,0,@1564 71,0,@1566 108,0,@1737 118,0,I48 1564:C2,428|3b650c7303ff552483fb017508b801000000c208008b7b0483ff0175528b742404f7c6010000007503ff553883fe017f148b4a04b8989975418b510c8b0c2483c40c51ff2289c28b45008d40f43b45087303ff5520894500c740fc020000008970048b0b89088b3c2483c40c57ff228b742404f7c6010000007503ff553883fe017f148b4a04b8989975418b510c8b0c2483c40c51ff22525057ff33bb590000008b44241883c800ff154094040883f8017407bb03000000eb12bb770000008b44241890ff154094040889c389da83f2028b4c240c8b4104528b7818b81814754189fa90ff128b45008d40f43b45087303ff5520894500c740fc020000008b7424188970048b5c240489188b54240c90ff128b5424108b4a048b45008d40f43b45087303ff5520894500c740fc02000000c74004010000008b3c2489388b1190ff128b7424108b5e048b44241c8b530cff128b5424108b4a04b8010000008b510883c800ff128b4424108b7804b8000375418b17ff128b742418f7c6010000007503ff553889f383eb0270f68b54241c8954241c895c24188b5c24088b44240c8b54241083c414e954feffff|@1565,63|14,0,0 53,0,@965 135,0,@965 157,0,44 170,0,I24 180,0,1 187,0,59 198,0,I24 221,0,@326 308,0,0 346,0,0 366,0,@312 1565:S45|535452554354555245535f28292e646973706c617953747275637473283329646973706c61794c697374283429 1566:C2,2988|3b650c7303ff5524f6c3017503ff553883fb017f0d8b7a04b8989975418b570cff228b38f7c701000000741583ffef7c1583ff117f15be52a976418d74be44ffe6e99c000000e997000000e9920000009090e98f070000909090e947010000909090e94a010000909090e9a3020000909090e9a6020000909090e9ab060000909090e9f7090000909090e96f050000909090e9f3030000909090e943000000909090e9eb050000909090e99b040000909090e97b080000909090e9760a0000909090e997010000909090e9430a0000909090e918000000909090e9eb0200009090908b5a04b8c8b476418b530cff228b4d008d49f03b4d087303ff5520894d00c741fc03000000bfd8b4764189398951088b72048971045253ff700451b8501475418b561883c800ff128b5c240c8b5304b8b47975418b520c83c800ff128b4c240c8b41048b38b80003754189fa0bc0ff128b75008d76f43b75087303ff5520897500c746fc02000000bb64b67641891e8b14248956048b4c240c68347a7541ff74240c8b5c240c89f08b510883c800ff128b44240c8b7804b8010000008b570883c410ff228b5a048b40048b530cff228b4a045253ff7004b87c1175418b511883c800ff128b4424088b7804b8807975418b570c83c800ff128b7424088b5e04b8000375418b13ff128b55008d52f43b55087303ff5520895500c742fc02000000b9dcb67641890a8b4424088942046840970408ff7424088b5c24088b780889d089faff128b7424088b5e04b8000375418b13ff128b5424088b4a04b8887a75418b510c83c800ff128b4424088b7804b8010000008b570883c40cff228b4d008d49f03b4d087303ff5520894d00c741fc03000000bf40b7764189398951088b72048971045253ff700451b8501475418b5618ff128b5c240c8b5304b87c7b75418b520c83c800ff128b4c240c8b41048b38b80003754189fa0bc0ff128b75008d76f43b75087303ff5520897500c746fc02000000bb28b87641891e8b14248956048b4c240c68347a7541ff74240c8b5c240c89f08b510883c800ff128b44240c8b7804b8010000008b570883c410ff228b5a048b40048b530cff228b4a045253ff7004b87c1175418b511883c800ff128b4424088b7804b8887c75418b570c83c800ff128b7424088b5e04b8000375418b13ff128b55008d52f43b55087303ff5520895500c742fc02000000b99cb87641890a8b4424088942046840970408ff7424088b5c24088b780889d089faff128b7424088b5e04b8000375418b13ff128b5424088b4a04b8887a75418b510c83c800ff128b4424088b7804b8010000008b570883c40cff228b4a045253ff7008ff700cb8181475418b511883c800ff128b44240c8b7804b8d47b75418b570c83c800ff128b74240c8b5e04b87c1175418b13ff128b54240c8b4a04ff710cbb04b676418b442408e89a65feff8b142483c800ff128b4424108b7804b8000375418b17ff128b74240cf7c6010000007503ff553889f383eb0270f68b54241089d9ff7204b80100000083c800e86a0b0000ff3424506a0389cb8b44241483c800e8820f00008b4424148b7804b8010000008b570883c418ff228b4a045253ff7008ff700cb8181475418b511883c800ff128b44240c8b7804b84c7c75418b570c83c800ff128b74240c8b5e04b87c1175418b13ff128b54240c8b4a04ff710cbb04b676418b442408e8da64feff8b142483c800ff128b4424108b7804b8000375418b17ff128b74240cf7c6010000007503ff553889f383eb0270f68b54241089d9ff7204b80100000083c800e8aa0a0000ff3424506a0389cb8b44241483c800e8c20e00008b4424148b7804b8010000008b570883c418ff228b4d008d49f03b4d087303ff5520894d00c741fc03000000bff4d9764189398951088b72048971045253ff700451b8501475418b5618ff128b5c240c8b5304b8307c75418b520c83c800ff128b4c240c8b41048b38b80003754189fa0bc0ff128b75008d76f43b75087303ff5520897500c746fc02000000bbe4db7641891e8b14248956048b4c240c68347a7541ff74240c8b5c240c89f08b510883c800ff128b44240c8b7804b8010000008b570883c410ff228b4a045253ff7004ff7008b8000375418b511883c800ff128b44240c8b7804ff770cbb510000008b442404e88a63feff8b142483c800ff128b7424108b5e04b8181475418b13ff128b5c240c8b4424088b54241083c800e8a6f9ffff8b5424108b4a04b8181475418b11ff128b4424108b7804b8530000008b570c83c800ff128b7424108b5e04b8010000008b530883c414ff228b4a045253ff7004ff700cb8000375418b511883c800ff12bb409704088b44240490ff154094040883f8017402eb348b44240c8b7804ff770cbb04b676418b44240890e8de62feff8b142483c800ff128b7424108b5e04b858dc76418b13ff1283c4048b542408f6c2017503ff553889d183e90270f689cb8b04248b54240ce8eaf8ffff8b44240c8b7804b8010000008b570883c410ff228b4a045253ff7008ff700cb8501475418b511883c800ff128b44240c8b7804b8647975418b570c83c800ff128b74240c8b5e04b8000375418b13ff128b54240483fa017502eb258b4c240c8b41048b780cb89c79754189fa0bc0ff128b74240c8b5e04b8000375418b13ff128b54240c8b4d008d49f43b4d087303ff5520894d00c741fc02000000b864dc764189018b7a048979046a7bff74240c8b5c240889c88b52080bc0ff128b74240c8b5e04b8010000008b530883c410ff228b48048b7a045253ff7104ff7108ff710cff7110b8501475418b57180bc0ff128b5c24108b44240c8b54241483c800e8e6f7ffff8b7424148b5e04b8000375418b13ff128b5424148b4a04b86c7c75418b510c83c800ff128b4424148b7804b8000375418b17ff128b7424148b5e04b89c7975418b530c83c800ff128b5424148b4a04b8000375418b11ff128b4424148b4804b80100000083c800e84607000050516a038b5c241c8b44241083c800e82e2b00008b4424148b78048b4424088b570cff128b7424148b5e04b8000375418b13ff128b5424148b4a04b87b0000008b510c83c800ff128b4424148b7804b8000375418b17ff128b742410f7c6010000007503ff553889f383eb0270f68b54241489d9ff7204b80100000083c800e8c2060000ff3424506a0389cb8b44241083c800e8da0a00008b4424188b7804b8010000008b570883c41cff228b4a045253ff7004ff7008ff7010b8501475418b5118ff128b4424108b78048b342483fe017407b8bc7c7541eb05b8547d75418b570cff128b5c24108b5304b8000375418b12ff128b4c240cf6c1017503ff553889c883e80270f68b7d008d7ff43b7d087303ff5520897d00c747fc02000000bea4df764189378b5c2410895f046a77508b53088b5c240c89f890ff128b4c24108b41048b38b80003754189fa0bc0ff128b7424108b5e04b8707a75418b530c83c800ff128b5424108b4a04b8000375418b11ff128b44240ca8017503ff553889c783ef0270f68b75008d76f43b75087303ff5520897500c746fc02000000bbd4df7641891e8b5424108956046a77578b5c241089f08b52080bc0ff128b4c24108b41048b38b80003754189fa0bc0ff128b7424108b5e04b8887a75418b530c83c800ff128b5424108b4a04b8010000008b510883c414ff228b4a045253ff7004b894db76418b51180bc0ff128b4424088b7804b86c7d75418b570c83c800ff128b7424088b5e04b8000375418b13ff128b542404f6c2017503ff553889d183e90270f68b45008d40f43b45087303ff5520894500c740fc02000000bf04e0764189388b7424088970046840970408518b5c24088b5608ff128b5c24088b5304b8010000008b520883c40cff22f6c3017503ff553889d983e90270f68b7a048b3424893c2489cb8b400456e9ff2b0000f6c3017503ff553889d983e90270f65253ff7008ff700c89cb8b4004e8aaf4ffff8b44240c8b78048b342483fe017407b8f8b57641eb05b804b676418b570cff128b5c240c8b5304b8000375418b12ff128b4c2408f6c1017503ff553889c883e80270f689c38b4424048b54240c83c410e955f4ffff90|@1736,63|25,0,@965 55,0,$1566+82 230,0,@1567 264,0,@1568 286,0,@328 306,0,@828 328,0,@312 363,0,@1573 380,0,@838 410,0,0 442,0,@316 462,0,@824 482,0,@312 515,0,@1575 529,0,I48 558,0,@312 574,0,@845 594,0,0 631,0,@1577 653,0,@328 670,0,@864 692,0,@312 727,0,@1579 744,0,@838 774,0,0 806,0,@316 826,0,@883 846,0,@312 879,0,@1581 893,0,I48 922,0,@312 938,0,@845 958,0,0 982,0,@326 1002,0,@870 1022,0,@316 1041,0,@1570 1050,1,@323 1070,0,@312 1110,0,0 1118,1,@1582 1138,1,@1593 1150,0,0 1174,0,@326 1194,0,@879 1214,0,@316 1233,0,@1570 1242,1,@323 1262,0,@312 1302,0,0 1310,1,@1582 1330,1,@1593 1342,0,0 1379,0,@1661 1401,0,@328 1418,0,@877 1440,0,@312 1475,0,@1664 1492,0,@838 1522,0,0 1546,0,@312 1569,0,40 1578,1,@323 1598,0,@326 1634,0,@326 1650,0,41 1670,0,0 1694,0,@312 1707,0,I48 1718,0,I24 1740,0,@1570 1750,1,@323 1770,0,@1666 1822,0,0 1846,0,@328 1866,0,@822 1886,0,@312 1916,0,@826 1934,0,@312 1971,0,@1667 2010,0,0 2043,0,@328 2082,0,@312 2098,0,@881 2118,0,@312 2134,0,@826 2154,0,@312 2170,0,0 2178,1,@1582 2198,1,@1669 2226,0,@312 2242,0,61 2262,0,@312 2302,0,0 2310,1,@1582 2330,1,@1593 2342,0,0 2369,0,@328 2394,0,@887 2401,0,@899 2418,0,@312 2470,0,@1673 2508,0,@312 2526,0,@843 2546,0,@312 2597,0,@1674 2636,0,@312 2654,0,@845 2674,0,0 2695,0,@1662 2714,0,@901 2734,0,@312 2786,0,@1675 2800,0,I48 2822,0,0 2865,1,@1676 2918,0,@1569 2925,0,@1570 2942,0,@312 1567:S5|3c6261643e 1568:C2,260|3b650c7303ff55248b7a045253ff7004ff7008ff700cff7014b8501475418b571883c800ff128b7424148b5e048b44240c8b530cff128b14248b0a83f9017502eb588b4424148b78048b74240483fe017407b8f8b57641eb05b804b676418b570c83c800ff128b5c24148b5304b8000375418b12ff128b4c2410f6c1017503ff553889c883e80270f68b7c241489c38b04248b570883c800ff128b7424088b1e83fb017502eb478b5424148b4a04b810b676418b510c0bc0ff128b4424148b7804b8000375418b17ff128b742410f7c6010000007503ff553889f383eb0270f68b5424148b4424088b520890ff128b4c24148b41048b7808b80100000089fa83c418ff22|@1572,63|26,0,@328 83,0,@1569 90,0,@1570 110,0,@312 175,0,@1571 194,0,@312 249,0,0 1569:S3|203a3e 1570:S2|203a 1571:S2|203d 1572:S61|535452554354555245535f28292e646973706c617953747275637473283329646973706c6179283229646973706c617953747275637442696e64283229 1573:C2,20|3b650c7303ff55248b58048b008b5204ff220bc0|@1574,63| 1574:S61|535452554354555245535f28292e646973706c617953747275637473283329646973706c6179283229646973706c617953747275637442696e64283129 1575:C2,20|3b650c7303ff55248b58048b008b5204ff220bc0|@1576,63| 1576:S41|535452554354555245535f28292e646973706c617953747275637473283329646973706c6179283129 1577:C2,136|3b650c7303ff55248b7a045253ff7004ff700cb8501475418b571890ff128b74240c8b5e04ff730cbb10b676418b442408e8425bfeff8b142483c800ff128b5424108b4a04b8000375418b11ff128b44240ca8017503ff553889c783ef0270f68b74241089fb8b4424048b560883c800ff128b5c24108b5304b8010000008b520883c414ff220bc0|@1578,63|20,0,@328 41,0,@1571 50,1,@323 70,0,@312 122,0,0 1578:S58|535452554354555245535f28292e646973706c617953747275637473283329646973706c6179283229646973706c617953696742696e64283229 1579:C2,20|3b650c7303ff55248b58048b008b5204ff220bc0|@1580,63| 1580:S58|535452554354555245535f28292e646973706c617953747275637473283329646973706c6179283229646973706c617953696742696e64283129 1581:C2,20|3b650c7303ff55248b58048b008b5204ff220bc0|@1576,63| 1582:C2,100|8b45008d40f83b45087303ff5520894500c740fc01000040c700ffffffff8b7d008d7ff83b7d087303ff5520897d00c747fc01000040c7070100000089c68b45008d40f03b45087303ff5520894500c740fc03000000bb4cb976418918897008897804c3|@1592,57|26,0,-1 56,0,0 87,0,@1583 1583:C2,288|3b650c7303ff55248b7a048b37525083fe017507bb01000000eb4c8b1689d1ff76048b5c24048b4204e80e01000083f801741c8b5d008d5bf83b5d087303ff5520895d00c743fc01000000890beb158b342483c4043b650c7303ff5524ebb0bb0100000083c40483fb0175748b4424048b78088b37f7c6010000007503ff553889f383c30270f6891f8b14248b5a048b02e8f600000083f8017407b934bb7641eb05b94f0000008b4424048b78088b0751e83e01000089c38b04240bc0e8aa58feff8b7424088b5d008d5bf43b5d087303ff5520895d00c743fc02000000eb05e9310000008b54240489530489038b4e048b398b55008d52f43b55087303ff5520895500c742fc02000000897a04891a891183c40cc38b038b0083c408c30bc0|@1591,63|21,0,0 42,1,@1584 96,0,0 146,1,@1586 156,0,@1588 163,0,39 178,1,@1589 190,1,@323 1584:C2,20|8b388b333bfe7506b803000000c3b801000000c3|@1585,57|9,0,1 15,0,0 1585:S23|5354525543545f56414c5328292e73616d655476283229 1586:C2,28|89d883e00983f8017507bf03000000eb05bf0100000089f883f002c3|@1587,41|11,0,1 18,0,0 1587:S27|5354525543545f56414c5328292e7476457175616c697479283229 1588:S2|2727 1589:C2,280|3b650c7303ff5524a8017503ff553883f8357c5ea8017503ff553883f8017c07be03000000eb05be0100000083fe03750489c3eb0ea8017503ff553889c383eb3270f65089dabb3500000089d083c800ff15e09e0408a8017503ff553889c183e90270f689c883c800e892ffffff89c7eb06bf409704085057bb350000008b4424040bc0ff15009f040883f8017502eb1fa8017503ff553883f8017c07bf03000000eb05bf0100000083ff037402eb0489c7eb0ea8017503ff553889c783c73470f6f7c7010000007503ff553889fe81c6c200000070f3f7c6010000007503ff553883fe017d02eb15f7c6010000007503ff553881feff0100007f02eb0db818197541ff552cbb0100000089f38b042483c408e96056feff|@1590,63|33,0,1 40,0,0 71,0,26 82,0,I109 115,0,I48 122,0,26 134,0,I110 158,0,1 165,0,0 255,0,@338 263,0,0 276,1,@323 1590:S40|545950455f5452454528292e7661724e616d6553657175656e63652831292831296e616d65283129 1591:S33|545950455f5452454528292e7661724e616d6553657175656e6365283129283129 1592:S30|545950455f5452454528292e7661724e616d6553657175656e6365283129 1593:C2,24|3b650c7303ff552489e283c800e822000000c20c0083c800|@1660,63|14,1,@1594 1594:C2,1568|3b650c7303ff5524525383c800e82a06000089c689f083c800e86608ffff83f801744d89f0e88a08ffff89c18b59048b01e8ca07000089c689f083c800e80208000083f801741b8b5c24048b530cff720c89c88b53080bc0ff128b142483c40cff228b1c2489f08b54240483c408eb9089f083c800e8de0d000083f801745c89f0e8020e00008b1883fb0175678b4804ff70088b042483c800e8320e000083c800e8ee08ffff83c800e82e09ffff83f801740489c8eb138b042483c800e80e0e000083c800e8560e00008b7c24088b770c8b5f0483fb017407eb1ee94a0200005050ff760c8d5c2404e8720e00008b442408eb0ae90d0000005050ff760c8b142483c418ff228b1424f6c2017503ff553883fa017f148b4c24048b790cb8989975418b570c83c408ff22f7c301000000750c8b088b78048b70088b03eb158b088b78048b7008b878d17641ff552cb80100000051575683c800e8de0400008b5c2408f7c30100000075058b5304eb1289c2b878d1764190ff552c89d1ba0100000089c1528b44240490e8420d000083c800e8fe07ffff83c800e83e08ffff83f80174068b442408eb118b442404e81e0d000083c800e8660d00008b7c24148b770c5150b8181475418b561890ff128b5c240883fb017402eb298b442404e88a12000083f8017402eb198b442404e89213000083f80174718b4424040bc0e8b21300008b542418f6c2017503ff553883fa037f158b4c241c8b410c8b780cb89899754189faff12eb708b4c241c8b410c8b7818b81814754189fa83c800ff128b74241c8b5e0cb8510000008b530c83c800ff128b54241c8b4a0cb8181475418b11ff128b442418eb05e967000000a8017503ff553889c783ef0270f6ff74241489fbb8590000008d54242483c800e8621300008b74241ceb05e9590000008b5e0cb8181475418b1390ff128b54241c8b4a0cb8530000008b510c83c800ff128b44241c8b780cb8010000008b570883c800ff12eb228b542418f6c2017503ff553889d183e90270f689cb8b4424048b54241ce80afdffff8b44241c8b780cb8000375418b17ff128b74241c8b5e0c8b04248b530c90ff128b54241c8b4a0cb8010000008b510883c420ff2289f090e85212000083f801747089f0e8761200008b1c24f6c3017503ff553883fb017f148b5424048b4a0cb8989975418b510c83c408ff22ff70048b000bc0e8ce0200008b5424088b4a0c50b8181475418b51180bc0ff128b0424e8fa11000083f80174258b042483c800e81a1200008b5c24088b04248d542410eb05e99600000090e86e140000eb228b442408a8017503ff553889c783ef0270f689fb8b04248b54240c0bc0e82afcffff8b74240c8b5e0cb8000375418b13ff128b54240c8b4a0cb8d87c75418b510c83c800ff128b44240c8b780cb8000375418b17ff128b742408f7c6010000007503ff553889f383eb0270f68b4424048b54240c90e8d2fbffff8b54240c8b4a0cb8010000008b510883c410ff2289f090e83e04000083f801747389f189c80bc0e85e0400008b3c24f7c7010000007503ff553883ff017f148b7424048b5e0cb8989975418b530c83c408ff22ff30ff700489c890e8de0f000083f801744f8b74240c8b5e0cb8181475418b53180bc0ff128b0424ba98d676410bc0ff12508b5c240cb8550000008d542414eb05e9bd0000000bc0e8261100008b54240c8b4a0cb8010000008b510883c410ff228b74240c8b5e0cb848cc74418b531883c800ff128b54240c8b4a0cb8f70000008b510c83c800ff128b442408a8017503ff553889c783ef0270f68b1c2489f88d542410e8ae1400008b74240483fe0175278b142483fa017507bb98997541eb05bbb8d876418b4c240c8b410c8b780c89d889fa83c800ff128b5c240c8b530cb8fb0000008b520c83c800ff128b4c240c8b410c8b7808b80100000089fa83c410ff2289f083c800e84608000083f801745589f0e87e08000083f80175148b5c24048b530cb8c8d876418b520c83c408ff228b5c24048b530c50b8181475418b521890ff128b04248d54240ce8da1500008b4c24088b410c8b7808b80100000089fa83c40cff2289f083c800e85202000083f80174148b5c24048b530cb8c8d876418b520c83c408ff228b5c24048b530cb8a8d976418b520c83c408ff2290|@1659,63|14,1,@1595 26,1,@1102 38,1,@1103 50,1,@1596 62,1,@1598 118,1,@1620 130,1,@1621 154,1,@1622 162,1,@1109 170,1,@1111 190,1,@1622 198,1,@1624 234,1,@1626 286,0,@965 327,0,@1640 335,0,0 346,1,@1595 370,0,@1640 381,0,0 394,1,@1622 402,1,@1109 410,1,@1111 430,1,@1622 438,1,@1624 452,0,@326 478,1,@1642 494,1,@1644 510,1,@1645 542,0,@965 563,0,@326 582,0,40 602,0,@326 642,0,44 654,1,@1646 673,0,@326 690,0,41 710,0,0 766,0,@312 798,0,0 814,1,@1644 826,1,@1645 854,0,@965 874,1,@1595 887,0,@326 902,1,@1644 918,1,@1645 942,1,@1647 990,0,@312 1006,0,@889 1026,0,@312 1078,0,0 1094,1,@1600 1110,1,@1601 1141,0,@965 1162,1,@1642 1179,0,@326 1194,0,@1650 1208,0,42 1226,1,@1646 1238,0,0 1258,0,@193 1278,0,123 1318,1,@1652 1340,0,@965 1347,0,@1654 1378,0,125 1401,0,0 1418,1,@1616 1430,1,@1618 1447,0,@1655 1468,0,@326 1486,1,@1656 1501,0,0 1518,1,@1598 1535,0,@1655 1555,0,@1658 1595:C2,424|3b650c7303ff552489c689f090e83602ffff83f801747489f389d80bc0e85602ffff89df89c68b5e048b060bc0e892010000575650e8c6ffffff8b1c243bd87502eb1189c689f38b4424040bc0e86602ffff89f089c389d890e8aa01000083f80174088b44240883c40cc389d8e8da01000083f801747489d989c80bc0e8fa0100008b3883ff017567eb05e9140100008b7008f7c601000000755a8b1e8b48048b13ff73048b1c2489d083c800e81201000089c389d883c800e88e01000083f801744e5689d883c800e8ae010000ff3089cb8b40048d542418e8e60100008b55008d52f43b55087314eb0fe993000000e988000000e97b000000ff5520895500c742fc020000008b0c24894a048902eb0eb8c4ca764190ff552cba010000008b45008d40f03b45087303ff5520894500c740fc030000008b7c24048978088b328970048b5a04891889d983c800e89600ffff89c689f38b44241083c800e85601ffff83f901740689f083c418c38b44241483c418c38b44240883c40cc389c883c40cc389d8e80e06000083f801740f89d8e8460600008b44240883c40cc389d883c40cc389f0c390|@1619,63|14,1,@1102 30,1,@1103 46,1,@1596 78,1,@1104 90,1,@1598 110,1,@1600 126,1,@1601 174,1,@1596 186,1,@1600 202,1,@1601 218,1,@1602 274,0,@1614 283,0,0 334,1,@1100 350,1,@1104 390,1,@1616 402,1,@1618 1596:C2,8|8b1889d8c383c800|@1597,9| 1597:S24|5354525543545f56414c5328292e747656616c7565283229 1598:C2,20|8b3883ffff7506b803000000c3b801000000c390|@1599,33|8,0,1 14,0,0 1599:S9|456d70747954797065 1600:C2,20|8b3883fffd7506b803000000c3b801000000c390|@1101,33|8,0,1 14,0,0 1601:C2,44|8b78048b70088b580c8b45008d40f03b45087303ff5520894500c740fc030000008958088970048938c30bc0|@1101,57| 1602:C2,416|3b650c7303ff552483f801751a83fb017506b801000000c3b8e8c776410bc0ff552cb8010000008b3883fb017570505052ff70048d742408568b5f048b0783c800e8c20100008b5d008d5bf43b5d087303ff5520895d00c743fc020000008b54240889138b4c240c894b0453bb010000008b4424048b542408e882ffffff8b7d008d7ff43b7d087303ff5520897d00c747fc020000008947048b3424eb05e908000000893789f883c414c38b33525357ff700456ff73048b1e8b070bc0e8defbfeff83f801753a8b1c248b4424088b54241483c800e826ffffff8b5d008d5bf43b5d087303ff5520895d00c743fc020000008943048b542404891389d883c418c3a8017503ff553883f8017d7250508b5c241489e2528b0b8b430489c389c88b5424200bc0e8de0000008b7d008d7ff43b7d087303ff5520897d00c747fc020000008b342489378b5c2404895f04578b5c241c8b4424148b5424200bc0e89efeffff8b55008d52f43b55087303ff5520895500c742fc02000000894204eb05e90b0000008b0c24890a89d083c424c3b8e8c7764183c800ff552cb80100000090|@1613,63|19,0,0 25,0,@1603 35,0,0 66,1,@1605 109,0,0 190,1,@1093 294,1,@1605 400,0,@1603 411,0,0 1603:O3|@7320,@224,@1604 1604:S51|616464546f496e7374616e63653a20456e74727920696e20696e7374616e636520627574206e6f7420696e2067656e65726963 1605:C2,268|3b650c7303ff552489d689c189d883c800e866fdfeff83f801746b5689d883c800e886fdfeff8b3c248b77f8508b5e048b0683c800e8ee000000508b5e048b0690e85ef2ffff83f8017407bb03000000eb168b5c24048b138b430489c389d00bc0e83ef2ffff89c38b7c240489de8b5f048b070bc0e81a01000083f801740cbb03000000eb1ae9720000008b5c24088b53f88b5a048b020bc0e8f600000089c3505051566a01538d442410508b5c241cb8c8cc7441e8f2d7feff8b45008d40f43b45087303ff5520894500c740fc020000008b7c240489388b7424088970040bc0e88ad8feff8b5c241c8b14248913894304b80100000083c418c20400b820ca764190ff552cb80100000090|@1612,63|18,1,@1102 34,1,@1103 54,1,@1606 66,1,@1586 76,0,1 98,1,@1586 118,1,@1608 128,0,1 154,1,@1608 177,0,@202 182,1,@1003 226,1,@1005 243,0,0 254,0,@1610 263,0,0 1606:C2,48|89d8c1e80383c801a8017503ff553883f8017d1bbb2ccb744189da23d0f6c2017503ff55388d53ff03d070f689d0c3c3|@1607,13|21,0,@176 1607:S24|5354525543545f56414c5328292e74764c6576656c283229 1608:C2,28|89d883e00383f8017507bf03000000eb05bf0100000089f883f002c3|@1609,41|11,0,1 18,0,0 1609:S23|5354525543545f56414c5328292e74765765616b283229 1610:O3|@7320,@224,@1611 1611:S43|6372656174654e65774669656c643a204e6577206669656c64206973206e6f742061207479706520766172 1612:S40|545950455f5452454528292e6576656e7475616c2831296372656174654e65774669656c64283329 1613:S39|545950455f5452454528292e6576656e7475616c283129616464546f496e7374616e6365283229 1614:O3|@7320,@224,@1615 1615:S35|756e6966795265636f7264733a204e6f742061206c6162656c6c6564207265636f7264 1616:C2,20|8b3883ff057506b803000000c3b801000000c390|@1617,33|8,0,1 14,0,0 1617:S11|4f7665726c6f6164536574 1618:C2,4|8b4004c3|@1617,1| 1619:S23|545950455f5452454528292e6576656e7475616c283129 1620:C2,20|8b3883fffb7506b803000000c3b801000000c390|@1114,33|8,0,1 14,0,0 1621:C2,44|8b78048b70088b580c8b45008d40f03b45087303ff5520894500c740fc030000008958088970048938c30bc0|@1114,57| 1622:C2,20|8b3883ff0175048b4004c38b70048b1e89d8c390|@1623,57| 1623:S22|5354525543545f56414c5328292e706c696e67283129 1624:C2,4|8b00c390|@1625,1| 1625:S23|5354525543545f56414c5328292e74634e616d65283129 1626:C2,332|3b650c7303ff5524f7c0010000007407bf03000000eb068b388d7c3f018b75008d76f03b75087303ff5520897500c746fc03000000894608897e04c706010000005053bbf4cd764189f083c800e8820100008b188b480489d8e80e04000083f801741a8b0424bf4097040889388b742404897004b80100000083c408c389d80bc0e8ca0100008b7804f7c7010000007503ff553883ff037d358b188b50088b45008d40f03b45087303ff5520894500c740fc03000000895008c7400401000000891883c800e84203000089c6eb328d77fe8b188b50088b45008d40f03b45087303ff5520894500c740fc03000000895008897004891883c800e80e03000089c689f083c800e84601000051ff70048b188b40080bc0e8baf0feff89c18b04240bc0e82a01000051ff70048b188b40080bc0e89ef0feff8b7c24088b34248937894704b80100000083c410c390|@1639,63|17,0,1 61,0,0 68,0,@1627 78,1,@1630 90,1,@1637 103,0,I48 117,0,0 130,1,@1631 188,0,0 198,1,@1634 250,1,@1634 262,1,@1631 278,1,@1082 290,1,@1631 306,1,@1082 323,0,0 1627:O1|@1628 1628:C2,24|83f85d7507bf03000000eb05bf0100000089f883f002c390|@1629,33|6,0,1 13,0,0 1629:S40|5554494c49544945535f28292e73706c6974537472696e672832293c7061747465726e3e2d283129 1630:C2,96|3b650c7303ff552490e86e000000ff7008ff7004ff30538b5424048b4424088d78ff03fa505089e389f88d54241883c800e8760000008b45008d40f43b45087303ff5520894500c740fc020000008b342489308b5c240489580483c418c30bc0|@1636,63|10,1,@1631 50,1,@1633 1631:C2,4|c383c800|@1632,1| 1632:S5|536c696365 1633:C2,368|3b650c7303ff55248b7af43bc7757289c68b45008d40f03b45087303ff5520894500c740fc030000008b4afc894808c7400401000000893089d683c800e84a01000089c28b45008d40f03b45087303ff5520894500c740fc030000008948088b7ef88978048b4ef48908520bc0e81a0100008b14248913894304b801000000eb05e90400000083c404c38d70fe8b4afcf7c101000000740689c689c8eb118d7e0889c689f8d1e80fb604018d4400015256538b52f083c800ff1283f80174188b5c24048d53fe8b1c2489d08b54240883c40ce929ffffff8b5c24088b5424048b4bf489d02bc183c00189c78b45008d40f03b45087303ff5520894500c740fc030000008b73fc897008897804890883c800e8760000008b53f88d79ff03fa8b4c240489fe2bf183c6018b4c240889c78b45008d40f03b45087303ff5520894500c740fc030000008b59fc8958088970048b542404891083c800e82e0000008b3424893e894604b80100000083c40cc390|@1635,63|50,0,0 62,1,@1634 110,1,@1634 123,0,0 274,1,@1634 346,1,@1634 359,0,0 1634:C2,4|c383c800|@1632,1| 1635:S26|537562737472696e672e73706c69747228322966696e64283229 1636:S19|537562737472696e672e73706c697472283229 1637:C2,20|8b780483ff017506b803000000c3b801000000c3|@1638,33|9,0,1 15,0,0 1638:S34|566563746f72536c6963654f7065726174696f6e7328292e6973456d707479283129 1639:S27|5554494c49544945535f28292e73706c6974537472696e67283229 1640:O3|@7369,@1641,0 1641:S5|456d707479 1642:C2,216|3b650c7303ff552489c689f090e80af4ffff83f801747189f0e82ef4ffff8b1883fb0375688b5004f7c20100000075628b7a04f7c701000000755cbe0300000083fa017506b803000000c38b1a56ff33ff7204bbffffffff89f083c800e8c644feff89c38b442404ff154094040883f80174448b542408f6c2017503ff553889d183c10270f6eb14e945000000e93a000000e92f000000e9240000008b142489ce83c40c3b650c7303ff5524eb92b80100000083c40cc3b80100000083c40cc3b801000000c3b801000000c3b801000000c3b801000000c3|@1643,63|14,1,@1600 26,1,@1601 60,0,1 70,0,1 84,0,-1 94,1,@336 106,0,I24 175,0,0 184,0,0 193,0,0 199,0,0 205,0,0 211,0,0 1643:S28|545950455f5452454528292e697350726f6475637454797065283129 1644:C2,20|8b3883ff037506b803000000c3b801000000c390|@1127,33|8,0,1 14,0,0 1645:C2,36|8b78048b70088b45008d40f43b45087303ff5520894500c740fc020000008970048938c3|@1127,49| 1646:C2,528|3b650c7303ff55248b7c240483ff017508b801000000c204008b770483fe0175685250538b0783c800e81af0ffff50bb550000008b442408ff154094040883f801744b8b042483c800e842ffffff83f801740d8b042483c800e862ffffffeb118b04240bc0e80efeffff83f8017502eb1d8b5c24048b04248b54240c8b4c241083c41851e9a3010000e91b0000008b5c24048b04248b54240c8b52fc8b4c241083c41851e963e9fffff6c3017503ff553883fb017f178b5afc8b4b0cb8989975418b510c8b3c2483c40857ff22525053568b070bc0e86eefffff8b5c240c8b53fc8b4a0c50b8181475418b511883c800ff12bb550000008b44240c90ff154094040883f80174418b042483c800e87efeffff83f801740d8b042483c800e89efeffffeb118b04240bc0e84afdffff83f8017502eb138b5c24088b04248b54241090e8e6000000eb168b5c24088b04248b7c24108b57fc83c800e8aee8ffff8b7424108b5efc8b530cff32bb590000008b44241090ff154094040889c183f1028b45008d40f43b45087303ff5520894500c740fc02000000c740040100000089088b142490ff128b4424148b78fc8b770c8b4424108b560c90ff128b5c24148b53fc8b4a0cb8010000008b5108ff128b4424148b78fc8b770cb8000375418b1690ff128b5c240cf6c3017503ff553889da83ea0270f68b4c2408894c241c89d38b4424108b54241483c418e9f1fdffff90|@1649,63|18,0,0 42,1,@1595 48,0,42 58,0,I24 74,1,@1644 90,1,@1645 102,1,@1642 133,1,@1647 165,1,@1594 189,0,@965 214,1,@1595 230,0,@326 243,0,42 254,0,I24 270,1,@1644 286,1,@1645 298,1,@1642 322,1,@1647 346,1,@1594 363,0,44 374,0,I24 410,0,0 453,0,0 473,0,@312 1647:C2,200|3b650c7303ff5524f6c3017503ff553883fb037f108b5afc8b4b0cb8989975418b510cff228b7afc8b770c525053b8181475418b56180bc0ff128b5c24088b53fc8b4a0cb8510000008b510cff128b4424088b78fc8b770cb8181475418b1690ff128b1c24f6c3017503ff553889da83ea0270f689d38b4424048b4c24088b51fce85ae7ffff8b4424088b78fc8b770cb8181475418b1690ff128b5c24088b53fc8b4a0cb8530000008b510cff128b4424088b78fc8b770cb8010000008b560883c40cff2283c800|@1648,63|28,0,@965 47,0,@326 69,0,40 89,0,@326 130,1,@1594 145,0,@326 165,0,41 185,0,0 1648:S43|545950455f5452454528292e74446973702835296469737050283229706172656e74686573697365283229 1649:S41|545950455f5452454528292e744469737028352964697370502832297072657474794c697374283329 1650:O1|@1651 1651:C2,72|3b650c7303ff552483f8017506b801000000c38b38ff77048b40040bc0e8deffffff8b7d008d7ff43b7d087303ff5520897d00c747fc020000008947048b0424890789f883c404c3|@413,33|14,0,0 1652:C2,364|3b650c7303ff552483fb017506b801000000c38b3ba8017503ff553883f8017f108b42fc8b700cb8989975418b560cff228b72fc8b4e0c5250ff37ff7704ff7304b8181475418b511883c800ff128b4424108b78fc8b770cb8181475418b5618ff128b5c24108b53fc8b4a0cff710cbb750000008b44240c90e8363bfeff8b142483c800ff128b4424148b78fc8b770cb8000375418b1690ff128b5c2410f6c3017503ff553889da83ea0270f689d38b4424088b4c24148b51fc83c800e866e5ffff8b4424148b78fc8b770cb8010000008b5608ff128b5c240483fb017502eb298b5424148b4afc8b410c8b38b81814754189faff128b7424148b5efc8b530cb8590000008b520cff128b4c24148b41fc8b780cb8010000008b5708ff128b74240483fe017509b80100000083c418c38b5c24148b53fc8b4a0cb8000375418b1183c800ff128b442410a8017503ff553889c783ef0270f68b5c240489f88b54241483c418e996feffff0bc0|@1653,63|14,0,0 40,0,@965 66,0,@326 89,0,@326 112,0,58 122,1,@323 145,0,@312 190,1,@1594 205,0,0 238,0,@326 257,0,44 277,0,0 296,0,0 315,0,@312 1653:S35|545950455f5452454528292e7444697370283529646973705028322970526563283229 1654:S5|2c202e2e2e 1655:S7|6e6f2074797065 1656:C2,128|3b650c7303ff552483f8017506b801000000c38b780483ff0175148b72fc8b5e0c8b000bc0e84af3ffff8b530cff228b72fc8b5e0c89d18b00e836f3ffff51578b530c90ff128b4424048b78fc8b770cb8181475418b1690ff128b5c24048b53fc8b4a0cb85f0000008b510cff128b04248b54240483c408e983ffffff83c800|@1657,63|14,0,0 38,1,@1624 58,1,@1624 81,0,@326 101,0,47 1657:S42|545950455f5452454528292e744469737028352964697370502832297072696e745443636f6e73283129 1658:S3|626164 1659:S28|545950455f5452454528292e74446973702835296469737050283229 1660:S20|545950455f5452454528292e7444697370283529 1661:C2,388|3b650c7303ff55248b7a045253ff30ff7004ff700cff7010ff7018b8501475418b571890ff128b7424188b5e04ff730cbb510000008b44240ce88638feff8b142483c800ff128b54241c8b4a04b8000375418b11ff128b44241c8b7804b894db76418b571883c800ff128b742418f7c6010000007503ff553889f383eb0270f68b54241c8b4424148b520890ff128b4c241c8b41048b7808b80100000089fa90ff128b74241c8b5e04b8530000008b530c83c800ff128b5424048b0a83f90174558b44241c8b78048b74240883fe017407b8f8b57641eb05b804b676418b570cff128b5c241c8b5304b8000375418b12ff128b4c2418f6c1017503ff553889c883e80270f68b7c241c89c38b4424048b57080bc0ff128b44241c8b7804b8000375418b17ff128b74241c8b5e04b87b0000008b530c83c800ff128b54241c8b4a04b8000375418b11ff128b442418a8017503ff553889c783ef0270f68b74241c89fb8b4424108b560883c800ff128b5c241c8b5304b8010000008b520883c420ff220bc0|@1663,63|28,0,@328 49,0,40 58,1,@323 78,0,@312 94,0,@1662 153,0,0 170,0,41 210,0,@1569 217,0,@1570 234,0,@312 286,0,@312 302,0,61 322,0,@312 374,0,0 1662:O2|3,1 1663:S60|535452554354555245535f28292e646973706c617953747275637473283329646973706c6179283229646973706c617946756e637442696e64283229 1664:C2,20|3b650c7303ff55248b58048b008b5204ff220bc0|@1665,63| 1665:S60|535452554354555245535f28292e646973706c617953747275637473283329646973706c6179283229646973706c617946756e637442696e64283129 1666:O2|1,2 1667:C2,20|3b650c7303ff55248b7a048b008b570cff220bc0|@1668,63| 1668:S44|535452554354555245535f28292e646973706c617953747275637473283329646973706c6179283229283129 1669:C2,336|3b650c7303ff55245053bf0100000083f801750489feeb26f7c7010000007503ff553889fb83c30270f68b400489df3b650c7303ff5524ebd6be0100000083fe03754c8b5c2404f7c30100000075048b13eb10b878d1764183c800ff552cba01000000ff742410ff742418ff7424148b5c240c89d0e8b6dfffff8b4c2410b8000375418b118b7c240883c41857ff22f7c6010000007503ff553883fe037e728b1c24f6c3017503ff553883fb037f168b542410b8989975418b520c8b4c240883c41851ff228b542410b8181475418b521883c800ff128b4c2410b8510000008b510c0bc0ff128b4424108b38b81814754189fa90ff128b5c24048b04248d542408e8660000008b742410b853000000eb05e92d0000008b560c83c800ff128b5c2410b8010000008b53080bc0ff128b542410b8000375418b128b4c240883c41851ff22b80100000083c408c20c000bc0|@1672,63|11,0,0 58,0,0 84,0,@1640 95,0,0 118,1,@1593 127,0,@312 180,0,@965 202,0,@326 219,0,40 237,0,@326 258,1,@1670 267,0,41 291,0,0 307,0,@312 324,0,0 1670:C2,260|3b650c7303ff5524a8017503ff553883f8017f0d8b7a08b8989975418b570cff2283fb017474f7c30100000075048b3beb1389c7b878d176410bc0ff552c89febf01000000525053ff7208ff720cff720489c389f8e86adeffff8b7424088b5e08b8181475418b13ff128b1424f7c20100000075058b4a04eb0db878d17641ff552cb90100000083f90174698b4424088b7808b859000000eb05e95f0000008b570c0bc0ff128b7424088b5e08b8000375418b13ff128b1424f7c20100000075058b4a04eb0db878d17641ff552cb9010000008b442404a8017503ff553889c783ef0270f689cb89f88b54240883c40ce90bffffffb80100000083c40cc3b801000000c3|@1671,63|24,0,@965 53,0,@1640 65,0,0 86,1,@1593 98,0,@326 123,0,@1640 131,0,0 148,0,44 174,0,@312 199,0,@1640 207,0,0 246,0,0 255,0,0 1671:S36|545950455f5452454528292e7072696e7454797065566172732835297056617273283229 1672:S28|545950455f5452454528292e7072696e745479706556617273283529 1673:C2,20|3b650c7303ff55248b58048b008b5204ff220bc0|@1576,63| 1674:C2,20|3b650c7303ff55248b58048b008b5204ff220bc0|@1576,63| 1675:C2,20|3b650c7303ff55248b58048b008b5204ff220bc0|@1576,63| 1676:C2,5816|3b650c7303ff55248b7d008d7ff43b7d087303ff5520897d00c747fc02000000be08f7764189378b7424048977048b55008d52f43b55087303ff5520895500c742fc02000000b9f8f87641890ab954f97641894a048b4d008d49f43b4d087303ff5520894d00c741fc02000000be5cf976418931897904f6c3017503ff553883fb017f158b5c2404b8989975418b530c8b0c2483c40851ff228b305053575251f7c601000000741583fee17c1583fe1f7f15b802e176418d44b07cffe0e90c010000e907010000e9020100009090e9e3090000909090e9c9040000909090e9110b0000909090e9a5150000909090e959140000909090e985080000909090e9f9000000909090e9cd070000909090e9d1000000909090e945050000909090e9b50e0000909090e9a3000000909090e9550c0000909090e9f9060000909090e977120000909090e959130000909090e9f50c0000909090e929010000909090e989020000909090e9210b0000909090e9090f0000909090e97d0f0000909090e9a7080000909090e999100000909090e961140000909090e905060000909090e929090000909090e97d050000909090e901100000909090e953030000909090e9dd080000909090e9251100009090908b7c2418b8dcfb76418b570c8b74241483c41c56ff228b7c24108b7424188b47048b560c8b5c241483c41c53ff228b7c24108b470c0bc0e8ae190000ff7708bb000f76410bc0ff154094040883f801744f8b5d008d5bf43b5d087303ff5520895d00c743fc02000000ba2cfc76418953048b0c24890b8b45008d40f43b45087303ff5520894500c740fc02000000895804c70045000000e85238feff89c6eb038b34248b5c241c89f08b530c8b4c241883c42051ff228b7c24108b742418ff7704ff7708b8181475418b56180bc0ff128b5c24048b1383fa03740583faf175268b4c2414f6c1017503ff553889c883e80270f6ff74242089c38b4424080bc0e82efdffffeb628b4c2420b8510000008b510cff128b4424208b38b81814754189fa90ff128b742414f7c6010000007503ff553889f383eb0270f6ff7424208b44240890e8eafcffff8b542420b8181475418b1283c800ff128b4c2420b8530000008b510c0bc0ff128b4424208b38b81814754189fa90ff128b34248b1e83fb1b75248b542414f6c2017503ff553889d183e90270f6ff74242089cb89f00bc0e88efcffffeb628b542420b8510000008b520cff128b4c2420b8181475418b1183c800ff128b442414a8017503ff553889c783ef0270f6ff74242089fb8b44240483c800e84afcffff8b742420b8181475418b1683c800ff128b5c2420b8530000008b530c0bc0ff128b542420b8010000008b52088b4c241c83c42451ff228b7c24108b742418ff7704ff7708ff770cb8181475418b561883c800ff128b5c2424b8347975418b530c0bc0ff128b542424b8000375418b1283c800ff128b4c2418f6c1017503ff553889c883e80270f6ff74242489c38b44240c0bc0e8b2fbffff8b7c2424b8000375418b1783c800ff128b742424b81c7975418b560c0bc0ff128b5c2424b8000375418b1383c800ff128b542418f6c2017503ff553889d183e90270f6ff74242489cb8b4424040bc0e85efbffff8b4424248b38b80003754189fa90ff128b742424b8c47a75418b560c0bc0ff128b5c2424b8000375418b1383c800ff128b542418f6c2017503ff553889d183e90270f6ff74242489cb8b4424080bc0e80afbffff8b4424248b7808b80100000089fa8b74242083c42856ff228b7424108b4c2418ff7604b894db76418b511883c800ff128b44241c8b780cb85100000089faff128b74241cb8000375418b1683c800ff128b5c2410f6c3017503ff553889da83ea0270f652ff74240cbb590000008b4424088b54241490ff128b4c241cb8181475418b1183c800ff128b44241c8b780cb85300000089faff128b74241cb8010000008b56088b5c241883c42053ff228b7424108b55008d52f43b55087303ff5520895500c742fc02000000b938fc7641890ab854f976418942048b4c2418ff760452b894db76418b511890ff128b4424208b780cb8d47b754189faff128b742420b8000375418b1683c800ff128b5d008d5bf43b5d087303ff5520895d00c743fc02000000ba68fd764189138b0c24894b048b442414a8017503ff553889c783ef0270f65753bb347a75418b44240c8b542418ff128b742420b8010000008b56088b5c241c83c42453ff228b7424108b55008d52f43b55087303ff5520895500c742fc02000000b9d0fd7641890ab854f976418942048b4c2418ff760452b894db76418b511890ff128b4424208b780cb81c7a754189faff128b742420b8000375418b1683c800ff128b5d008d5bf03b5d087303ff5520895d00c743fc03000000bad4fe764189138b0c24894b088b4424108943048b7c2414f7c7010000007503ff553889fe83ee0270f65653bb347a75418b44240c8b54241890ff128b5c2420b8010000008b53088b4c241c83c42451ff228b7424108b542418ff7604b894db76418b521890ff128b4c241cb8047a75418b510c0bc0ff128b44241c8b38b80003754189fa90ff128b742410f7c6010000007503ff553889f383eb0270f65368e4ff7641bb409704088b4424088b54241490ff128b54241cb8010000008b52088b4c241883c42051ff228b7424108b4c2418ff7604b894db76418b511890ff128b44241c8b780cb8b700000089faff128b74241cb8000375418b1683c800ff128b5c2410f6c3017503ff553889da83ea0270f652ff74240cbb590000008b4424088b54241490ff128b4c241cb8181475418b1183c800ff128b44241c8b780cb8bb00000089faff128b74241cb8010000008b56088b5c241883c42053ff228b7c24108b742418ff7704ff7708b8501475418b56180bc0ff128b5c2414f6c3017503ff553889da83ea0270f6ff74242089d38b4424040bc0e88ef7ffff8b4c2420b8000375418b1183c800ff128b4424208b780cb87500000089faff128b742420b8000375418b1683c800ff12b8010000000bc0e8eacfffffff742420506a038b5c24208b442410e802d4ffff8b5c2420b8010000008b53088b4c241c83c42451ff228b7c24108b742418ff7704ff7708b894db76418b56180bc0ff128b5c2414f6c3017503ff553889da83ea0270f6ff74242089d38b4424080bc0e8eaf6ffff8b4c2420b8000375418b1183c800ff128b4424208b780cb8487b754189faff128b742420b8000375418b1683c800ff128b5c2414f6c3017503ff553889da83ea0270f6ff74242089d38b4424040bc0e896f6ffff8b4c2420b8010000008b51088b7c241c83c42457ff228b7c24108b77048b542418ff36ff7608b8181475418b5218ff128b4c2414f6c1017503ff553889c883e80270f6ff74242089c38b4424040bc0e842f6ffff8b7c2420b8000375418b1783c800ff128b742420b8247d75418b560c0bc0ff128b5c2420b8000375418b1383c800ff128b542414f6c2017503ff553889d183e90270f6ff74242089cb8b4424080bc0e8eef5ffff8b4424208b7808b80100000089fa8b74241c83c42456ff228b7424108b4c2418ff7604b894db76418b511883c800ff128b44241c8b780cb84c7a754189faff128b74241cb8000375418b1683c800ff128b5c2410f6c3017503ff553889da83ea0270f652ff74240cbbf90000008b4424088b54241490ff128b4c241cb8010000008b51088b7c241883c42057ff228b7c2418b84c0077418b570c8b74241483c41c56ff228b7c2418b8bf0000008b570c8b74241483c41c56ff228b7424108b4c2418ff7604ff7608ff760cb8501475418b511883c800ff128b4424248b7c240883ff01740a8b700cb8bc7c7541eb088b700cb8547d754189f290ff128b5c2424b8000375418b1383c800ff12505089e38b44240883c800e8f61400008b542420f6c2017503ff553889d183e90270f651ff74241cbb770000008b4424088b54242490ff128b44242c8b38b80003754189fa90ff128b74242cb8707a75418b560c0bc0ff128b5c242cb8000375418b1383c800ff12505089e38b44241483c800e8621500008b542428f6c2017503ff553889d183e90270f651ff742424bb770000008b4424088b54242c90ff128b4424348b38b80003754189fa90ff128b742434b8887a75418b560c0bc0ff128b5c2434b8010000008b53088b4c243083c43851ff228b7424108b5604f7c20100000075188b028b480883f9037507b9dc7a7541eb0cb99c797541eb05b99c7975418b44241852518b7018b894db764189f2ff128b5c24208b04248b530cff128b542420b8000375418b1283c800ff128b4c2414f6c1017503ff553889c883e80270f65068e4017741bb347a75418b44240c8b542418ff128b7c2420b8010000008b57088b74241c83c42456ff228b7424108b542418ff7608ff760cb894db76418b52180bc0ff128b4c2420b8147b75418b510c0bc0ff128b4424208b38b80003754189fa90ff128b75008d76f43b75087303ff5520897500c746fc02000000bb74037741891e8b5424088956048b4c2414f6c1017503ff553889c883e80270f65056bb347a75418b44240c8b5424180bc0ff128b3c2483ff017502eb568b742420b8000375418b1690ff128b5c2420b8b87b75418b530c0bc0ff128b542420b8000375418b1283c800ff128b4c2414f6c1017503ff553889c883e80270f65068e4037741bb347a75418b4424088b542418ff128b7c2420b8010000008b57088b74241c83c42456ff228b7c24108b742418ff7704ff7708b894db76418b56180bc0ff128b5c2420b8147b75418b530c0bc0ff128b542420b8000375418b1283c800ff128b4c24208b4424048b510c83c800ff128b4424208b38b80003754189fa90ff128b742420b87b0000008b560c0bc0ff128b5c2420b8000375418b1383c800ff128b542420b8147b75418b520c0bc0ff128b4c2420b8000375418b1183c800ff128b4424208b780c8b042489fa0bc0ff128b742420b8010000008b56088b5c241c83c42453ff228b7424108b442418ff7604ff7608ff760c8b7018b894db764189f290ff128b5c2424b8607b75418b530c0bc0ff128b542424b8000375418b1283c800ff128b4d008d49f43b4d087303ff5520894d00c741fc02000000b82404774189018b7c240c8979048b742418f7c6010000007503ff553889f383eb0270f65351bb347a75418b44240c8b54241c83c800ff128b542424b8000375418b1283c800ff128b0c2483f9017502eb5a8b4424248b780cb8b87b754189fa0bc0ff128b742424b8000375418b1683c800ff128b5c2418f6c3017503ff553889da83ea0270f652685c047741bb347a75418b4424088b54241cff128b4c2424b8000375418b1183c800ff128b4424248b780cb8ec79754189faff128b742424b8000375418b1683c800ff128b5c2424b894db76418b53180bc0ff12505089e38b44241083c800e8de1400008b542420f6c2017503ff553889d183e90270f651ff74241cbb770000008b4424088b54242490ff128b44242c8b7808b80100000089faff128b74242cb8010000008b56088b5c242883c43053ff228b7424108b4c2418ff7604b894db76418b511890ff128b44241c8b780cb85100000089faff128b74241cb8181475418b1683c800ff12505089e38b44240883c800e8021500008b5c2418f6c3017503ff553889da83ea0270f652ff742414bb770000008b4424088b54241c90ff128b4c2424b8181475418b1183c800ff128b4424248b780cb85300000089faff128b742424b8010000008b56088b5c242083c42853ff228b7424108b542418ff7604ff7608b894db76418b52180bc0ff12ff7424208b5c24188b44240883c800e82e1500008b4c2420b8000375418b1183c800ff128b442414a8017503ff553889c783ef0270f6576848077741bb409704088b4424088b54241890ff128b742420b8010000008b56088b5c241c83c42453ff228b7424108b55008d52f43b55087303ff5520895500c742fc02000000b9a4077741890ab854f976418942048b4c2418ff760452b894db76418b511890ff128b4424208b780cb84c7c754189faff128b742420b8000375418b1683c800ff128b5d008d5bf43b5d087303ff5520895d00c743fc02000000bafc08774189138b0c24894b048b442414a8017503ff553889c783ef0270f65753bb347a75418b44240c8b542418ff128b742420b8010000008b56088b5c241c83c42453ff228b7c24108b742418ff7704b8181475418b561890ff128b5c241cb8ec7b75418b530c0bc0ff128b54241cb8000375418b1283c800ff128b4c2410f6c1017503ff553889c883e80270f6ff74241c89c38b4424040bc0e8f2edffff8b7c241cb8010000008b57088b74241883c42056ff228b7424108b4c2418ff7604ff7608b8181475418b51180bc0ff128b442414a8017503ff553889c783ef0270f6ff74242089fb8b44240883c800e89eedffff8b742420b8000375418b1683c800ff128b5c2420b894db76418b53180bc0ff128b542420b8b07d75418b520c0bc0ff128b4c2420b8000375418b1183c800ff128b442414a8017503ff553889c783ef0270f657ff742410bbf90000008b4424088b5424180bc0ff128b742420b8010000008b56080bc0ff128b5c2420b8010000008b53088b4c241c83c42451ff228b7c24108b742418ff7704ff7708b8181475418b56180bc0ff128b5c2420b8f07c75418b530c0bc0ff128b542420b8000375418b1283c800ff128b4c2414f6c1017503ff553889c883e80270f6ff74242089c38b4424040bc0e8b2ecffff8b7c2420b8000375418b1783c800ff128b742420b8ac7a75418b560c0bc0ff128b5c2420b8000375418b1383c800ff128b542414f6c2017503ff553889d183e90270f6ff74242089cb8b4424080bc0e85eecffff8b4424208b7808b80100000089fa8b74241c83c42456ff228b7424108b4c2418ff7604ff7608b894db76418b5118ff128b4424208b7818b81814754189faff128b742420b8a47d75418b560c0bc0ff128b5c2420b8000375418b1383c800ff128b542414f6c2017503ff553889d183e90270f6ff74242089cb8b4424080bc0e8daebffff8b4424208b38b80003754189fa90ff128b742420b84c7975418b560c0bc0ff128b5c2420b8010000008b53080bc0ff128b542420b8000375418b1283c800ff128b4c2414f6c1017503ff553889c883e80270f650ff742410bbf90000008b4424088b54241890ff128b7c2420b8010000008b57088b74241c83c42456ff228b7c24108b742418ff7704ff7708b894db76418b56180bc0ff128b5c2414f6c3017503ff553889da83ea0270f6ff74242089d38b4424080bc0e81eebffff8b4c2420b8000375418b1183c800ff128b4424208b780cb8887d754189faff128b742420b8000375418b1683c800ff128b5c2414f6c3017503ff553889da83ea0270f6ff74242089d38b4424040bc0e8caeaffff8b4c2420b8010000008b51088b7c241c83c42457ff228b7c24108b742418ff7704ff7708b894db76418b56180bc0ff128b5c2414f6c3017503ff553889da83ea0270f6ff74242089d38b4424080bc0e876eaffff8b4c2420b8000375418b1183c800ff128b4424208b780cb8a07c754189faff128b742420b8000375418b1683c800ff128b5c2414f6c3017503ff553889da83ea0270f6ff74242089d38b4424040bc0e822eaffff8b4c2420b8010000008b51088b7c241c83c42457ff228b7c24108b742418ff7704ff770cb848cc74418b56180bc0ff128b5c2420b8f70000008b530c0bc0ff128b542414f6c2017503ff553889d183e90270f689cb8b04248d54241c83c800e8ee1200008b44240483f8017402eb1d8b7c24208b342483fe017507b898997541eb05b8b8d876418b570cff128b5c2420b8fb0000008b530c0bc0ff128b542420b8010000008b52088b4c241c83c42451ff228b7c24108b742418ff760c8b5f04b8470000000bc0e8da1bfeff8b14248b5c241883c42053ff2290|@1735,63|33,0,@1677 71,0,@1679 78,0,@1681 110,0,@1682 137,0,@965 179,0,$1676+206 467,0,@1689 518,1,@1690 526,0,@1234 534,0,I24 568,0,@1692 609,0,34 614,1,@347 659,0,@326 729,0,40 745,0,@326 795,0,@326 811,0,41 829,0,@326 889,0,40 903,0,@326 955,0,@326 971,0,41 987,0,0 1022,0,@326 1039,0,@818 1055,0,@312 1107,0,@312 1123,0,@816 1139,0,@312 1193,0,@312 1207,0,@850 1223,0,@312 1278,0,0 1306,0,@1662 1326,0,40 1339,0,@312 1375,0,44 1395,0,@326 1414,0,41 1427,0,0 1473,0,@1693 1480,0,@1681 1496,0,@1662 1514,0,@870 1527,0,@312 1563,0,@1695 1596,0,@838 1615,0,0 1661,0,@1697 1668,0,@1681 1684,0,@1662 1702,0,@836 1715,0,@312 1751,0,@1699 1795,0,@838 1815,0,0 1844,0,@1662 1859,0,@834 1877,0,@312 1910,0,@1703 1915,0,I48 1935,0,0 1964,0,@1662 1982,0,91 1995,0,@312 2031,0,44 2051,0,@326 2070,0,93 2083,0,0 2115,0,@328 2167,0,@312 2186,0,58 2199,0,@312 2211,0,0 2218,1,@1582 2238,1,@1593 2247,0,0 2279,0,@1662 2331,0,@312 2350,0,@860 2363,0,@312 2415,0,0 2449,0,@326 2499,0,@312 2515,0,@895 2531,0,@312 2586,0,0 2614,0,@1662 2634,0,@840 2647,0,@312 2683,0,124 2703,0,0 2725,0,@1706 2747,0,95 2782,0,@328 2811,0,@887 2821,0,@899 2835,0,@312 2858,1,@1707 2887,0,59 2909,0,@312 2923,0,@843 2939,0,@312 2962,1,@1709 2991,0,59 3013,0,@312 3027,0,@845 3043,0,0 3086,0,@852 3093,0,@826 3100,0,@826 3114,0,@1662 3139,0,@312 3171,0,@1710 3176,0,@838 3195,0,0 3227,0,@1662 3243,0,@856 3261,0,@312 3295,0,@1715 3330,0,@838 3361,0,@312 3375,0,@868 3391,0,@312 3423,0,@1717 3428,0,@838 3447,0,0 3479,0,@1662 3495,0,@856 3511,0,@312 3545,0,@312 3559,0,61 3575,0,@312 3591,0,@856 3607,0,@312 3639,0,0 3677,0,@1662 3691,0,@862 3707,0,@312 3743,0,@1719 3781,0,@838 3803,0,@312 3832,0,@868 3847,0,@312 3879,0,@1720 3884,0,@838 3903,0,@312 3922,0,@832 3935,0,@312 3951,0,@1662 3974,1,@1722 4003,0,59 4026,0,0 4039,0,0 4068,0,@1662 4086,0,40 4099,0,@326 4122,1,@1723 4151,0,59 4171,0,@326 4190,0,41 4203,0,0 4235,0,@1662 4262,1,@1724 4271,0,@312 4302,0,@1726 4307,0,I48 4327,0,0 4373,0,@1729 4380,0,@1681 4396,0,@1662 4414,0,@879 4427,0,@312 4463,0,@1731 4496,0,@838 4515,0,0 4544,0,@326 4559,0,@872 4575,0,@312 4627,0,0 4659,0,@326 4711,0,@312 4727,0,@1662 4743,0,@906 4759,0,@312 4794,0,124 4815,0,0 4831,0,0 4863,0,@326 4879,0,@891 4895,0,@312 4947,0,@312 4963,0,@848 4979,0,@312 5034,0,0 5065,0,@1662 5082,0,@326 5095,0,@905 5111,0,@312 5165,0,@312 5179,0,@820 5195,0,0 5211,0,@312 5247,0,124 5267,0,0 5299,0,@1662 5351,0,@312 5370,0,@903 5383,0,@312 5435,0,0 5467,0,@1662 5519,0,@312 5538,0,@885 5551,0,@312 5603,0,0 5635,0,@193 5651,0,123 5694,1,@1733 5722,0,@965 5729,0,@1654 5743,0,125 5759,0,0 5791,0,35 5798,1,@323 1677:C2,420|3b650c7303ff55248b7c2408f7c7010000007503ff553883ff017f148b7204b8989975418b560c8b1c2483c40c53ff2283f8017508b801000000c208008b700483fe0175328b188b45008d40f03b45087303ff5520894500c740fc030000008b4a0489480889780489188b5424048b342483c40c56ff228b4a04525356ff30b8181475418b511890ff128b44240c8b78048b45008d40f03b45087303ff5520894500c740fc030000008978088b7424188970048b1c2489188b542414ff128b54240c8b4a04ff31bb590000008b44240cff154094040883f8017407b803000000eb2cbb770000008b44240c90ff154094040883f8017407b803000000eb10bb409704088b44240c90ff154094040889c783f7028b45008d40f43b45087303ff5520894500c740fc02000000c740040100000089388b142490ff128b7424108b5e048b44240c8b530cff128b5424108b4a04b8010000008b510883c800ff128b4424108b7804b8000375418b17ff128b74241cf7c6010000007503ff553889f383eb0270f68b542418895c241c895424188b5c240c8b4424088b54241083c414e95cfeffff|@1678,63|32,0,@965 54,0,0 128,0,@326 200,0,44 210,0,I24 220,0,1 227,0,59 238,0,I24 248,0,1 255,0,I48 266,0,I24 302,0,0 338,0,0 358,0,@312 1678:S37|50415253455f5452454528292e7074446973706c61792833297072696e744c697374283429 1679:C2,28|3b650c7303ff55248b78088b3424893c248b58048b008b520456ff22|@1680,63| 1680:S25|50415253455f5452454528292e7074446973706c6179283129 1681:O1|@1676 1682:C2,196|3b650c7303ff55248b7c24045253ff30ff7008ff700cb894db76418b57180bc0ff12b8010000000bc0e842bfffff50ff74241c6a038b5c24188b44240ce82ae3ffff8b7424188b4424088b560c83c800ff128b5c2418b8000375418b1383c800ff128b542418b87b0000008b520c0bc0ff128b4c2418b8000375418b1183c800ff128b44240ca8017503ff553889c783ef0270f68b74241057683cfa7641bbf90000008b44240c8b56040bc0ff128b5c2418b8010000008b53088b4c241483c41c51ff22|@1688,63|23,0,@1662 35,0,0 42,1,@1582 62,1,@1669 87,0,@312 103,0,61 119,0,@312 154,0,@1683 159,0,124 179,0,0 1683:O1|@1684 1684:C2,28|3b650c7303ff55248b78088b3424893c248b58048b0056e91c000000|@1687,63|24,1,@1685 1685:C2,164|3b650c7303ff55248b7c240453ff30ff7004b848cc74418b57180bc0ff128b7424108b4424048b560c83c800ff128b0424e8becaffff83f8017402eb4d8b5c2410b8000375418b13ff128b542410b84c7975418b520c0bc0ff128b4c2410b8000375418b1183c800ff12b8010000000bc0e8dabdffffff742410506a038b5c24148b44240ce8f2c1ffff8b4424108b7808b80100000089fa8b74240c83c41456ff220bc0|@1686,63|19,0,@193 50,1,@1598 66,0,@312 79,0,@820 95,0,@312 107,0,0 114,1,@1582 134,1,@1593 146,0,0 1686:S44|50415253455f5452454528292e7074446973706c61792833297072696e74436f6e7374727563746f72283329 1687:S44|50415253455f5452454528292e7074446973706c61792833297072696e74436f6e7374727563746f72283129 1688:S45|50415253455f5452454528292e7074446973706c61792833297072696e74446174617479706542696e64283329 1689:S7|3c456d7074793e 1690:C2,4|8b00c390|@1691,1| 1691:S24|5354525543545f56414c5328292e76616c4e616d65283129 1692:O2|34,0 1693:C2,228|3b650c7303ff552483f80175258b7c2404b83c7d75418b570c83c800ff128b742404b8000375418b168b1c2483c40853ff228b7c24045253ff30ff7004b894db76418b571883c800ff128b742408f7c6010000007503ff553889f383eb0270f68b54240cff7424148b4424088b520490ff128b4c2414b8000375418b1183c800ff128b4424148b780cb87b00000089faff128b742414b8000375418b1683c800ff128b5c2408f6c3017503ff553889da83ea0270f68b4c240cff74241489d38b4424048b51040bc0ff128b4424148b7808b80100000089fa8b74241083c41856ff220bc0|@1694,63|18,0,@897 35,0,@312 62,0,@1662 119,0,@312 138,0,61 151,0,@312 210,0,0 1694:S40|50415253455f5452454528292e7074446973706c61792833297072696e7456616c42696e64283329 1695:C2,28|3b650c7303ff55248b78088b3424893c248b58048b008b520456ff22|@1696,63| 1696:S40|50415253455f5452454528292e7074446973706c61792833297072696e7456616c42696e64283129 1697:C2,184|3b650c7303ff55248b7c24045253ff30ff7004b894db76418b571890ff128b742408f7c6010000007503ff553889f383eb0270f68b54240cff7424148b4424088b520490ff128b4c2414b8000375418b1183c800ff128b4424148b780cb87b00000089faff128b742414b8000375418b1683c800ff128b5c2408f6c3017503ff553889da83ea0270f68b4c240cff74241489d38b4424048b51040bc0ff128b4424148b7808b80100000089fa8b74241083c41856ff220bc0|@1698,63|20,0,@1662 75,0,@312 94,0,61 107,0,@312 166,0,0 1698:S39|50415253455f5452454528292e7074446973706c61792833297072696e74436c61757365283329 1699:C2,88|3b650c7303ff55248b388b75008d76f43b75087303ff5520897500c746fc02000000bb48ff7641891e8b5a08895e048b4804f6c1017503ff553889c883e80270f68b0c2489042456bbf90000008b47048b520451ff220bc0|@1702,63|35,0,@1700 73,0,124 1700:C2,28|3b650c7303ff55248b78088b3424893c248b58048b008b520456ff22|@1701,63| 1701:S39|50415253455f5452454528292e7074446973706c61792833297072696e74436c61757365283129 1702:S41|50415253455f5452454528292e7074446973706c61792833297072696e746676616c62696e64283129 1703:O1|@1704 1704:C2,20|3b650c7303ff55248b388b70088b078b560cff22|@1705,63| 1705:S40|50415253455f5452454528292e7074446973706c61792833297072696e745374724e616d65283129 1706:S2|2829 1707:C2,156|3b650c7303ff5524f7c001000000756f8b38505053ff37ff77048d5c240c8b4004e8daffffff8b5d008d5bf43b5d087303ff5520895d00c743fc020000008b44240c8943048b7c2404893b8b45008d40f43b45087303ff5520894500c740fc020000008b7c24108978048b3c2489388b7c2408891f894704b801000000eb05e90400000083c414c3c70301000000c7430401000000b801000000c390|@1708,41|121,0,0 138,0,0 145,0,0 150,0,0 1708:S17|4c697374506169722e756e7a6970283229 1709:C2,156|3b650c7303ff5524f7c001000000756f8b38505053ff37ff77048d5c240c8b4004e8daffffff8b5d008d5bf43b5d087303ff5520895d00c743fc020000008b44240c8943048b7c2404893b8b45008d40f43b45087303ff5520894500c740fc020000008b7c24108978048b3c2489388b7c2408891f894704b801000000eb05e90400000083c414c3c70301000000c7430401000000b801000000c390|@1708,41|121,0,0 138,0,0 145,0,0 150,0,0 1710:O1|@1711 1711:C2,28|3b650c7303ff55248b78088b3424893c248b58048b0056e91c000000|@1714,63|24,1,@1712 1712:C2,204|3b650c7303ff55248b7c240453ff30ff7004ff700cb894db76418b571883c800ff12b8010000000bc0e87ab6ffff50ff7424186a038b5c24188b44240ce862daffff8b7424148b4424088b560c83c800ff128b44240483c800e8eec2ffff83f8017402eb4d8b5c2414b8000375418b13ff128b542414b87b0000008b520c0bc0ff128b4c2414b8000375418b1183c800ff12b8010000000bc0e80ab6ffffff742414506a038b5c24188b442410e822baffff8b4424148b7808b80100000089fa8b74241083c41856ff220bc0|@1713,63|22,0,@1662 35,0,0 42,1,@1582 62,1,@1669 90,1,@1598 106,0,@312 119,0,61 135,0,@312 147,0,0 154,1,@1582 174,1,@1593 186,0,0 1713:S41|50415253455f5452454528292e7074446973706c61792833297072696e745479706542696e64283329 1714:S41|50415253455f5452454528292e7074446973706c61792833297072696e745479706542696e64283129 1715:C2,28|3b650c7303ff55248b78088b3424893c248b58048b008b520456ff22|@1716,63| 1716:S45|50415253455f5452454528292e7074446973706c61792833297072696e74446174617479706542696e64283129 1717:O1|@1718 1718:C2,28|3b650c7303ff55248b78088b3424893c248b58048b0056e91cfeffff|@1714,63|24,1,@1712 1719:C2,28|3b650c7303ff55248b78088b3424893c248b58048b008b520456ff22|@1716,63| 1720:O1|@1721 1721:C2,28|3b650c7303ff55248b78088b3424893c248b58048b0056e9a4fdffff|@1714,63|24,1,@1712 1722:C2,156|3b650c7303ff5524f7c001000000756f8b38505053ff37ff77048d5c240c8b4004e8daffffff8b5d008d5bf43b5d087303ff5520895d00c743fc020000008b44240c8943048b7c2404893b8b45008d40f43b45087303ff5520894500c740fc020000008b7c24108978048b3c2489388b7c2408891f894704b801000000eb05e90400000083c414c3c70301000000c7430401000000b801000000c390|@1708,41|121,0,0 138,0,0 145,0,0 150,0,0 1723:C2,156|3b650c7303ff5524f7c001000000756f8b38505053ff37ff77048d5c240c8b4004e8daffffff8b5d008d5bf43b5d087303ff5520895d00c743fc020000008b44240c8943048b7c2404893b8b45008d40f43b45087303ff5520894500c740fc020000008b7c24108978048b3c2489388b7c2408891f894704b801000000eb05e90400000083c414c3c70301000000c7430401000000b801000000c390|@1708,41|121,0,0 138,0,0 145,0,0 150,0,0 1724:C2,248|3b650c7303ff55248b1883fb0375158b542404b8087c75418b520c8b0c2483c40851ff2283fb0175678b542404ff7004b8181475418b5218ff128b4c2408b8f87a75418b510c0bc0ff128b4424088b38b80003754189fa90ff128b742408ff760cbbffffffff8b44240483c800e84210feff8b142483c800ff128b5c240cb8010000008b53088b4c240883c41051ff228b542404ff7004b8181475418b521890ff128b4c2408b89c7b75418b510c0bc0ff128b4424088b38b80003754189fa90ff128b742408ff760cbbffffffff8b44240483c800e8da0ffeff8b142483c800ff128b5c240cb8010000008b53088b4c240883c41051ff22|@1725,63|20,0,@874 49,0,@326 63,0,@854 81,0,@312 98,0,-1 110,1,@336 127,0,0 152,0,@326 167,0,@866 185,0,@312 202,0,-1 214,1,@336 231,0,0 1725:S31|56414c55455f4f505328292e646973706c6179466978537461747573283329 1726:O1|@1727 1727:C2,20|3b650c7303ff55248b78088b008b570cff220bc0|@1728,63| 1728:S28|50415253455f5452454528292e7074446973706c6179283329283129 1729:C2,268|3b650c7303ff55248b7c24045253ff30ff7008ff700cb8181475418b57180bc0ff128b7424188b4424088b560c83c800ff128b44240483c800e88ebdffff83f8017402eb4d8b5c2418b8000375418b13ff128b542418b84c7975418b520c0bc0ff128b4c2418b8000375418b1183c800ff12b8010000000bc0e8aab0ffffff742418506a038b5c24188b442410e8c2b4ffff8b04248b3883fff77502eb588b742418b8000375418b1683c800ff128b5c2418b87b0000008b530c0bc0ff128b542418b8000375418b1283c800ff128b4c240cf6c1017503ff553889c883e80270f68b7c2410ff74241889c38b4424048b57040bc0ff128b742418b8010000008b56088b5c241483c41c53ff22|@1730,63|23,0,@326 58,1,@1598 74,0,@312 87,0,@820 103,0,@312 115,0,0 122,1,@1582 142,1,@1593 163,0,@312 179,0,61 195,0,@312 251,0,0 1730:S39|50415253455f5452454528292e7074446973706c61792833297072696e74457842696e64283329 1731:C2,28|3b650c7303ff55248b78088b3424893c248b58048b008b520456ff22|@1732,63| 1732:S39|50415253455f5452454528292e7074446973706c61792833297072696e74457842696e64283129 1733:C2,460|3b650c7303ff5524f6c3017503ff553883fb017f0d8b7a04b8989975418b570cff2283f8017506b801000000c38b780483ff0175708b308b4a045253ff36ff7604b8181475418b511883c800ff128b44240c8b7804ff770cbb10b676418b442408e8ee08feff8b142483c800ff128b7424108b5e04b8000375418b13ff128b54240cf6c2017503ff553889d183e90270f68b442410ff700489cb8b442408ba54f97641eb05e9180000000bc0ff128b7c24108b7704b8010000008b560883c414ff228b308b4a04525357ff36ff7604b8181475418b511890ff128b4424108b7804b8181475418b571883c800ff128b7424108b5e04ff730cbb10b676418b442408e84e08feff8b142483c800ff128b5424148b4a04b8000375418b11ff128b442410a8017503ff553889c783ef0270f68b742414ff760489fb8b442408ba54f976410bc0ff128b5c24148b5304b8010000008b520883c800ff128b4c24148b41048b38b81814754189fa0bc0ff128b7424148b5e04b8590000008b530c83c800ff128b5424148b4a04b8010000008b510883c800ff128b4424148b7804b8000375418b17ff128b742410f7c6010000007503ff553889f383eb0270f68b44240c8b54241483c418e934feffff|@1734,63|25,0,@965 40,0,0 66,0,@326 89,0,@1571 98,1,@323 118,0,@312 159,0,@1681 182,0,0 208,0,@326 226,0,@326 249,0,@1571 258,1,@323 278,0,@312 318,0,@1681 334,0,0 356,0,@326 374,0,44 394,0,0 414,0,@312 1734:S42|50415253455f5452454528292e7074446973706c6179283329646973706c61795265634c697374283229 1735:S25|50415253455f5452454528292e7074446973706c6179283329 1736:S41|535452554354555245535f28292e646973706c617953747275637473283329646973706c6179283229 1737:C2,20|3b650c7303ff55248b58048b008b5204ff220bc0|@1576,63| 1738:S31|535452554354555245535f28292e646973706c617953747275637473283329 1739:C2,44|3b650c7303ff552452508b520883c800ff1283f801750f8b7c24048b04248b570483c408ff2283c408c30bc0|@950,63| 1740:C2,44|3b650c7303ff552452508b520883c800ff1283f801750f8b7c24048b04248b570483c408ff2283c408c30bc0|@950,63| 1741:C2,44|3b650c7303ff552452508b520883c800ff1283f801750f8b7c24048b04248b570483c408ff2283c408c30bc0|@950,63| 1742:C2,44|3b650c7303ff552452508b520883c800ff1283f801750f8b7c24048b04248b570483c408ff2283c408c30bc0|@950,63| 1743:C2,44|3b650c7303ff552452508b520883c800ff1283f801750f8b7c24048b04248b570483c408ff2283c408c30bc0|@950,63| 1744:O2|@1745,@1509 1745:C2,116|3b650c7303ff552453528b7d008d7ff83b7d087303ff5520897d00c747fc01000040c707ffffffff5057ff7308ff730cff7310ff7314ff7318ff731cff7320ff73248b338b4b0489cb89f00bc0e82e8cfeffff7424145068409704088b5c240c8b4424108d54241c90e82200000083c410c20400|@4882,63|36,0,-1 78,1,@971 88,0,I48 106,1,@1746 1746:C2,108|3b650c7303ff5524528b7d008d7ff43b7d087303ff5520897d00c747fc02000000bebc0e77418937895f04575383f801750bb80100000083c40cc20c00ff70048b008d54241083c800e8ae0100008b042483c4043b650c7303ff5524ebcfb80100000083c410c20c0083c800|@4881,63|34,0,@1747 51,0,0 74,1,@1753 95,0,0 1747:C2,68|3b650c7303ff55248b42048b38f7c7010000007503ff553883ff017d0ab801000000e939000000f7c7010000007503ff553889fe83c60270f6893089f8e9a20000000bc0|@1752,53|30,0,0 35,1,@1748 62,1,@1750 1748:C2,68|8b45008d40f83b45087303ff5520894500c740fc01000040c7000100000089c78b45008d40f43b45087303ff5520894500c740fc02000000897804c700ffffffffc30bc0|@1749,33|26,0,0 61,0,-1 1749:S27|5354525543545f56414c5328292e6d616b65467265654964283129 1750:C2,36|89c78b45008d40f43b45087303ff5520894500c740fc02000000897804c70001000000c3|@1751,33|31,0,0 1751:S5|426f756e64 1752:S56|535452554354555245535f28292e70617373325374727563747328332970617373325374727563742835296d616b65547970654964283129 1753:C2,100|3b650c7303ff55248b3883ff0f75088b5804e96900000083ff0575088b5804e918fb050083ff0b75088b5804e94b0a060083ff07750b8b58048b4008e9530d060083ff0d75178b70088b1c2489342489d98b580c8b400451e9ff120600b801000000c390|@4880,63|19,1,@1754 32,1,@4821 45,1,@4849 61,1,@4856 89,1,@4869 94,0,0 1754:C2,160|3b650c7303ff55248b7afc8b75008d76ec3b75087303ff5520897500c746fc04000000b96c117741890e8b4ffc894e0c8946088b7a08897e045050505250538d5c240c89f0e8660500008b342483fe017502eb368b1eff7604ff7308ff730cff7310ff73148b138b4b0489cb89d08d54242c83c800e8aa0900008b342483c4043b650c7303ff5524ebc38b5c24088b530c8b42248b54240c83c418ff2283c800|@4820,63|36,0,@1755 70,1,@1777 118,1,@1791 1755:C2,88|3b650c7303ff5524ff720cff7208ff720489c3b8e011774190e82e01feffbbf41177410bc0e82201feff8b7c24048b74240c897c240c8b1c248b542408895c240889442404bb0300000089d083c40456e96700000083c800|@1776,63|20,0,@1756 26,1,@323 31,0,@1757 38,1,@323 70,0,1 81,1,@1758 1756:S10|53747275637475726520 1757:S43|2068617320616c7265616479206265656e20626f756e6420696e2074686973206465636c61726174696f6e 1758:C2,124|3b650c7303ff552483fb017407bfc0127741eb05bf401377418b75008d76ec3b75087303ff5520897500c746fc04000000bbc4137741891e89460c8b5424048956088b4c240c894e0489c38b45008d40f03b45087303ff5520894500c740fc030000008970088b742408897004891889fa8b1c2483c41053ff220bc0|@1775,63|14,0,@1759 21,0,@1762 50,0,@1765 1759:O1|@1760 1760:C2,64|3b650c7303ff55248b388b3424c7042403000000ff37ff7704ff7708ff770cff7710ff7714ff7718ff771cff7720ff77248b58048b400856e98f49feff83c800|@1761,63|16,0,1 57,1,@752 1761:S19|4c45585f28292e6572726f7250726f63283129 1762:O1|@1763 1763:C2,64|3b650c7303ff55248b388b3424c7042401000000ff37ff7704ff7708ff770cff7710ff7714ff7718ff771cff7720ff77248b58048b400856e90f49feff83c800|@1764,63|16,0,0 57,1,@752 1764:S21|4c45585f28292e7761726e696e6750726f63283129 1765:C2,220|3b650c7303ff55248b7a0c5250bbbc1477418b4724ba703d754183c800e8a229feff8b342450b8181475418b56180bc0ff128b5c24048b5424088b42088b530cff128b4c2404b8501475418b1183c800ff128b4424048b7818b81814754189faff128b742404b8b01577418b560c0bc0ff128b5c2404b8000375418b1383c800ff128b5424088b4d008d49f43b4d087303ff5520894d00c741fc02000000c74104010000008b42048901ff7424048b5c240489c890e8d691ffff8b7c2404b8010000008b57080bc0ff128b742404b8010000008b560883c40cff2290|@1774,63|14,0,@1766 22,0,@599 30,1,@601 39,0,@326 71,0,@328 90,0,@326 103,0,@1773 119,0,@312 161,0,0 182,1,@1563 191,0,0 207,0,0 1766:O3|@1768,@1770,@1767 1767:O2|@1772,@7354 1768:O2|@1769,@7354 1769:C2,28|8b388b72043bfe750cb803000000c3b801000000c3b801000000c390|@593,53|10,0,1 16,0,0 22,0,0 1770:O2|@1771,@7354 1771:C2,44|89c78b45008d40f03b45087303ff5520894500c740fc03000000897808c740048b0000008b7a048938c30bc0|@593,37|32,0,69 1772:C2,36|8b388b72043bfe750a8b4008c3b801000000c3b8503d754183c800ff552cb80100000090|@593,53|14,0,0 20,0,@597 31,0,0 1773:S10|466f756e64206e656172 1774:S29|535452554354555245535f28292e6572726f724e656172283529283129 1775:S26|535452554354555245535f28292e6572726f724e656172283529 1776:S71|535452554354555245535f28292e7061737332537472756374732833297061737332537472756374283529706173733253747275637475726544656328322973456e762d283129 1777:C2,184|8b7d008d7ff83b7d087303ff5520897d00c747fc01000040c707010000008b75008d76f43b75087303ff5520897500c746fc02000000ba341777418916897e048b55008d52f03b55087303ff5520895500c742fc03000000b944187741890a894208897a048b45008d40f43b45087303ff5520894500c740fc02000000b99419774189088978048b7d008d7ff43b7d087303ff5520897d00c747fc02000000b9541a7741890f8957048933897b04894308b801000000c390|@1790,63|26,0,0 55,0,@1778 89,0,@1782 126,0,@1786 160,0,@1788 178,0,0 1778:C2,32|3b650c7303ff55248b7a048b375089f08d54240490e82200000083c404c30bc0|@1781,63|22,1,@1779 1779:C2,88|3b650c7303ff552483f8017506b801000000c38b3852ff37ff77048b400483c800e8daffffff8b7424088b45008d40f43b45087303ff5520894500c740fc020000008b1c248958048b54240489108b56fc83c40cff220bc0|@1780,63|14,0,0 1780:S43|5554494c49544945535f28292e6e6f4475706c6963617465732832296170706c792831296170706c283129 1781:S36|5554494c49544945535f28292e6e6f4475706c6963617465732832296170706c79283129 1782:C2,32|3b650c7303ff55245253508b7a048b078d54240c90e82200000083c40cc30bc0|@1785,63|22,1,@1783 1783:C2,152|3b650c7303ff552483f80175538b42fc8b7d008d7ff43b7d087303ff5520897d00c747fc020000008b72f88977048b5af4891f8b48048b198b4d008d49f43b4d087303ff5520894d00c741fc0200000089590489398b7804890fb801000000c38b3852ff70048b5af48b0790ff154094040883f80174128b7424048b5efc8b46f48b530883c408ff228b04248b54240483c408e968ffffff|@1784,63|91,0,0 110,0,I24 1784:S43|5554494c49544945535f28292e6e6f4475706c696361746573283229656e7465722832296c6f6f6b283129 1785:S36|5554494c49544945535f28292e6e6f4475706c696361746573283229656e746572283229 1786:C2,116|3b650c7303ff55248b7a048b375083fe017509b80100000083c404c38b16ff7204ff76048b5c24088b020bc0ff154094040883f80174228b45008d40f83b45087303ff5520894500c740fc010000008b4c2404890883c40cc38b342483c4083b650c7303ff5524eba5b80100000083c40cc30bc0|@1787,63|20,0,0 46,0,I24 106,0,0 1787:S37|5554494c49544945535f28292e6e6f4475706c6963617465732832296c6f6f6b7570283129 1788:C2,20|3b650c7303ff55248b58048b008b5204ff220bc0|@1789,63| 1789:S36|5554494c49544945535f28292e6e6f4475706c696361746573283229656e746572283129 1790:S28|5554494c49544945535f28292e6e6f4475706c696361746573283229 1791:C2,596|8d7c24a83b7d0c7303ff55288b7af0525053ff77f4ff770c8b47040bc0e8c2f7fdffbb5d0000000bc0e8b6f7fdffff3424ff742408ff74242c8b5c24188b74241c8b56f090e8260200008b5c24188b0b83f901750489c2eb6f8b7c24108b77f08b56f48b0af6c1017503ff553883f9017e0489cbeb05bb010000008b4c24108b79f08b7424108b56f05053ff770c8b5c24148b4204e84af7fdffbb5d0000000bc0e83ef7fdffff3424ff74241c508b5c24108b4424308b4c24288b51f0e87acd000089c789f8eb05e936010000e8ca27000089c689f883c800e8022800005050578d5c24045389c389f083c800e8322800008b55008d52f43b55087303ff5520895500c742fc020000008b4c2404890a8b4424088942048b7d008d7ff43b7d087303ff5520897d00c747fc02000000bec8087d4189378b1c24895f048b4c243883f901744c89d689d8e84e2700005089d8e88a270000505056578d5424085289c38b442414e8ba2700008b45008d40f43b45087303ff5520894500c740fc020000008b4c240889088b7c240c897804eb0789d050505052578b7c243c8b77f08b5efc50ff742408ff77ecff742444ff73fc8b5c24288b44243ce8422d00008b5424408b4af0ff71f88b5c243c8b41040bc0e80ef6fdffbb5d0000000bc0e802f6fdffff3424ff742408508b5c24148b442428badcc677410bc0e822aa000089c283c43489d38b442408e81eed05008b7c241089c68b45008d40f43b45087303ff5520894500c740fc020000008970048b5c24088918568b57f883c800ff128b5424208b0c24890ab80100000083c418c210000bc0|@4819,63|30,1,@323 35,0,46 42,1,@323 70,1,@1792 119,0,0 150,1,@323 155,0,46 162,1,@323 190,1,@2265 206,1,@1902 218,1,@1904 238,1,@1906 304,0,@4815 330,1,@1902 338,1,@1904 358,1,@1906 442,1,@1917 466,1,@323 471,0,46 478,1,@323 499,0,@2175 506,1,@2177 522,1,@4817 584,0,0 1792:C2,2256|8d7c24a03b7d0c7303ff55288b7d008d7ff43b7d087303ff5520897d00c747fc02000000be3026774189378b7424088977048b4c24048b3183fef175708b44240c8b7afc8b75008d76ec3b75087303ff5520897500c746fc040000005253ff7104ff7108ff702cff77fc56b8e026774189068b7c2404897e0c8b542420895608895e04ff742410568b5c2410b848277741e88209000089c189c883c800e80e21000083f801741a8b442418eb05e9650000008b78fc8b77f88b460483c41cc20c008b44240c890883f9017542b815000000e8e27bffff8b7d008d7fec3b7d087303ff5520897d00c747fc04000000c7470c01000000c7470801000000be40970408897704890789f883c41cc20c008b410883c41cc20c0083fefd75708b74240c52505357ff7104ff7108ff710cff7628ff762cff72fc8b34248b55008d52ec3b55087303ff5520895500c742fc04000000b9e43f7741890a8b4efc894a0c8b44242c894208895a04ff742404682440774168f84077416a01528b5c241c8b442424e83e22000089c789f8eb05e947010000e88623000083f80174138b7424248b5efc8b53f88b420483c428c20c008b74240c893e89f883c800e8ba23000089c389f883c800e80a24000089c189d883c800e85624000089c789d883c800e88e240000505053518d7424085689c389f80bc0e8be2400008b5d008d5bf43b5d087303ff5520895d00c743fc020000008b54240889138b4c240c894b0453ff742448ff742448ff7424308b5c243cb8409704088b542444e8c6fdffff8b74240483fe01753f50b815000000e86a7affff8b5d008d5bec3b5d087303ff5520895d00c743fc04000000c7430c01000000c7430801000000ba40970408895304890389dfeb048b7e08508b5c243c8b53fcff742404ff742448ff74243cff72fc89fb8b44241083c800e8e62900008b4c2430894c244c8b442404894424488b7c2438897c2444bbd4c677418b44240cbadcc6774183c440e9d8a6000083fef37572525053ff7104ff71088b0424ba5028774183c800e84608000089c38b04240bc0e83ea800005350b815000000e8aa79ffff8b55008d52ec3b55087303ff5520895500c742fc04000000c7420c01000000c74208010000008b0c24894a0489025289d0ba5028774190e8f20700008b7d00eb05e9240200008d7ff83b7d087303ff5520897d00c747fc01000040c707010000008b75008d76f03b75087303ff5520897500c746fc03000000bbb0e27741891e8b5424088956088946048b4d008d49f03b4d087303ff5520894d00c741fc03000000bb3ce3774189198951088941048b5d008d5bf03b5d087303ff5520895d00c743fc03000000ba7ce3774189138b5424088953088943048b55008d52ec3b55087303ff5520895500c742fc04000000505756515352b8bce3774189028b44242089420c897a088b4424148942048b45008d40ec3b45087303ff5520894500c740fc04000000bfa0e5774189388b7c242089780c8b7c24148978088b7c24108978048b7c24208b7424448b4d008d49f03b4d087303ff5520894d00c741fc03000000bb88e6774189198b5f188959088b56188951048b7c24208b5d008d5bf03b5d087303ff5520895d00c743fc03000000bad0e6774189138b57208953088b7e20897b048b5424208b7c24448b75008d76f03b75087303ff5520897500c746fc03000000505153ff722cff772c56ba18e7774189168b7c2408897e088b5424048956048b7c245c8b55008d52cc3b55087303ff5520895500c742fc0c00000089722c8b7728897228894224895a208b5c241c895a1c894a188b4f14894a148b47108942108b5c2424895a0c8b5c2418895a088b5c2420895a04bb60e77741891a52ff742448ff7424508b5c24648b44244c8b5424588b52fc83c800e882ebffff8b44243083c450c20c0083fe0775718b5904f7c301000000756b8b7b0483ff0175685250ff7108ff710cff33b8150000000bc0e81277ffff8b75008d76ec3b75087303ff5520897500c746fc04000000c7460c01000000c7460801000000bb40970408895e04890689f0ba50287741e85a0500008b5424208b4d008d49f0eb0fe948010000e933010000e9200100003b4d087303ff5520894d00c741fc03000000bf8ce7774189398b70188971088b5a188959048b7d008d7ff03b7d087303ff5520897d00c747fc03000000bed4e7774189378b70208977088b5a20895f048b7424208b5d008d5bf03b5d087303ff5520895d00c743fc03000000ba1ce8774189138b502c8953088b562c8953048b55008d52cc3b55087303ff5520895500c742fc0c000000895a2c8b5e28895a288b5824895a24897a208b781c897a1c894a188b4e14894a148b70108972108b480c894a0c8b70088972088b7004897204b964e87741890a5252ff74240cff7424188b5c242c8b4424188b7c24208b57fce8fee9ffff8b7424208b1c24895c2424897424208b5424048954241c8b5c24088b4424108b54241483c418e9e3f8ffffb8e0e8774190ff552cb801000000b8e0e8774183c800ff552cb80100000083fe09757052505357ff7104ff7108ff710cff742428ff742428ff742410e8a2f8ffff8b5c24248b13f6c2017503ff553883fa017e0489d1eb05b90100000050ff74242cff742418ff74242089cb8b4424148b542428e836c4000089c189c883c800e88a1e000089c789c883c800e8c21e0000eb05e90d0100005050518d7424045689c389f8e8ee1e00008b5d008d5bf43b5d087303ff5520895d00c743fc020000008b54240489138b4c2408894b048b45008d40f43b45087303ff5520894500c740fc02000000bf74077d4189388b34248970048b54241083fa01745089c789f0e80a1e000089c189f083c800e8421e0000505053578d5424085289c389c80bc0e8721e00008b4d008d49f43b4d087303ff5520894d00c741fc020000008b44240889018b7c240c897904eb0689d9505053508b4424388b78fc51ff742408ff742430ff74243cff77fc8b5c24248b44243083c800e8fa2300008b7424308974244c8b1c24895c24488b542438895424448b5c24048b442414badcc6774183c440e9eea00000b8e0e87741ff552cb80100000090|@4814,63|37,0,@1793 108,0,@1795 141,0,@1797 146,1,@1798 158,1,@1883 205,0,10 210,1,@1488 241,0,0 248,0,0 253,0,I48 338,0,@1889 365,0,@1890 370,0,@1893 386,1,@1894 402,1,@1896 442,1,@1898 454,1,@1900 466,1,@1902 478,1,@1904 498,1,@1906 557,0,I48 581,0,10 586,1,@1488 617,0,0 624,0,0 629,0,I48 678,1,@1917 707,0,@2174 716,0,@2175 724,1,@2177 746,0,@1801 754,1,@1803 766,1,@2178 773,0,10 778,1,@1488 809,0,0 816,0,0 832,0,@1801 838,1,@1803 875,0,0 904,0,@2241 945,0,@2243 982,0,@2244 1029,0,@2245 1077,0,@2251 1137,0,@2252 1184,0,@2253 1245,0,@2254 1352,0,@2255 1386,1,@1746 1435,0,10 1442,1,@1488 1473,0,0 1480,0,0 1485,0,I48 1497,0,@1801 1502,1,@1803 1552,0,@2257 1595,0,@2258 1642,0,@2259 1742,0,@2260 1774,1,@1746 1822,0,@2263 1831,0,0 1836,0,@2263 1847,0,0 1910,0,0 1938,1,@2265 1950,1,@1902 1962,1,@1904 1986,1,@1906 2052,0,@4812 2078,1,@1902 2090,1,@1904 2110,1,@1906 2194,1,@1917 2230,0,@2175 2238,1,@2177 2243,0,@2263 2251,0,0 1793:C2,68|3b650c7303ff55248b42048b38f7c7010000007503ff553883ff017d0ab801000000e9c5e8fffff7c7010000007503ff553889fe83c60270f6893089f8e92ee9ffff0bc0|@1794,53|30,0,0 35,1,@1748 62,1,@1750 1794:S69|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973747275637456616c75652835296e6577547970654964283129 1795:C2,36|3b650c7303ff55248b7a088b3424893c24ff720450bb030000008b420c56e925ebffff90|@1796,63|22,0,1 31,1,@1758 1796:S29|535452554354555245535f28292e676976654572726f72283329283129 1797:S9|537472756374757265 1798:C2,36|3b650c7303ff552450538b5c2410b89c2777418d5424080bc0e84a16000083c408c20800|@1888,63|15,0,@1799 26,1,@1881 1799:O1|@1800 1800:C2,144|3b650c7303ff552483f801754150b8150000000bc0e83e72ffff8b75008d76ec3b75087303ff5520897500c746fc04000000c7460c01000000c7460801000000bb40970408895e04890689f7eb048b78085089f8ba50287741e87e0000008b702c8b45008d40f03b45087303ff5520894500c740fc03000000bbd03b774189188970088b142489500483c404c383c800|@1880,63|15,0,10 22,1,@1488 53,0,0 60,0,0 65,0,I48 85,0,@1801 90,1,@1803 122,0,@1876 1801:O7|@1803,@1835,@1842,@1849,@1856,@1863,@1802 1802:O3|@1871,@1873,@1870 1803:C2,676|8b7d008d7ff03b7d087303ff5520897d00c747fc03000000be402b774189378b308977088b5a18895f048b4d008d49f03b4d087303ff5520894d00c741fc03000000be742c774189318b308971088b72148971048b5d008d5bf03b5d087303ff5520895d00c743fc03000000beac2c774189338b308973088b72108973048b75008d76f03b75087303ff5520897500c746fc0300000052ff30575153ff720c56bae42c774189168b4424148946088b5424048956048b5424188b45008d40f03b45087303ff5520894500c740fc03000000bf1c2d774189388b7c24148978088b7a088978048b4c24188b5d008d5bf03b5d087303ff5520895d00c743fc03000000be542d774189338b7424148973088b71048973048b5424188b7d008d7ff03b7d087303ff5520897d00c747fc03000000be8c2d774189378b4c2414894f088b72188977048b4c24188b75008d76f03b75087303ff5520897500c746fc03000000badc34774189168b5424148956088b51148956048b4c24188b55008d52f03b55087303ff5520895500c742fc0300000050535756ff711052b918357741890a8b4c242c894a088b4c2404894a048b4c24308b45008d40f03b45087303ff5520894500c740fc03000000bb5435774189188b5c242c8958088b590c8958048b7c24308b75008d76f03b75087303ff5520897500c746fc03000000ba9035774189168b54242c8956088b57088956048b4c24308b5d008d5bf03b5d087303ff5520895d00c743fc03000000bacc35774189138b7c242c897b088b51048953048b7d008d7fcc3b7d087303ff5520897d00c747fc0c0000008b54241889572c8b4c2410894f288947248b442424894720895f1c8b5c2428895f188b5424148957148b4c2420894f108b44240889470c8b5c240c895f088977048b1424891789f883c434c30bc0|@1834,63|25,0,@1804 67,0,@1808 109,0,@1809 161,0,@1810 210,0,@1811 258,0,@1812 306,0,@1813 354,0,@1829 410,0,@1830 459,0,@1831 507,0,@1832 555,0,@1833 1804:C2,28|3b650c7303ff55248b3c248904248b5a048b420857e91e0000000bc0|@1807,63|22,1,@1805 1805:C2,152|3b650c7303ff5524538b5c2408e83652feff83f801750bb80100000083c404c204008b3883ff01750bb80100000083c404c204008b3424ff37ff77048b4424048b160bc0ff1283f80174318b5c24088b4424048b53080bc0ff1289c28b45008d40f83b45087303ff5520894500c740fc01000000891083c40cc204008b3c2483c4083b650c7303ff5524eb98b80100000083c40cc2040090|@1806,63|14,1,@907 24,0,0 42,0,0 141,0,0 1806:S28|556e6976657273616c5461626c652e756e69764c6f6f6b7570283329 1807:S28|5354525543545f56414c5328292e6d616b654c6f6f6b283229283129 1808:C2,28|3b650c7303ff55248b3c248904248b5a048b420857e9eafeffff0bc0|@1807,63|22,1,@1805 1809:C2,28|3b650c7303ff55248b3c248904248b5a048b420857e9b2feffff0bc0|@1807,63|22,1,@1805 1810:C2,28|3b650c7303ff55248b3c248904248b5a048b420857e97afeffff0bc0|@1807,63|22,1,@1805 1811:C2,28|3b650c7303ff55248b3c248904248b5a048b420857e942feffff0bc0|@1807,63|22,1,@1805 1812:C2,28|3b650c7303ff55248b3c248904248b5a048b420857e90afeffff0bc0|@1807,63|22,1,@1805 1813:C2,32|3b650c7303ff55248b388b3424893c24ff70048b5a048b420856e91d00000090|@1828,63|27,1,@1814 1814:C2,124|3b650c7303ff552450538b44240c8b530483c800ff12508b5c24148b4424080bc0e8d24ffefff7c00100000075108b008d54240c90e85e00000089c7eb248b7d008d7ff43b7d087303ff5520897d00c747fc02000000c74704010000008b342489378b5c2414897c24148b4424088b54240c83c41452e91501000090|@1827,63|34,1,@907 54,1,@1815 89,0,0 119,1,@1817 1815:C2,176|3b650c7303ff552483f80175258b45008d40f43b45087303ff5520894500c740fc02000000c74004010000008b7af48938c38b7af852ff30ff70048b4424048b1783c800ff1283f801742d8b7424088b5d008d5bf43b5d087303ff5520895d00c743fc020000008b14248953048b4ef4890b89d883c40cc38b04248b5424080bc0e87affffff8b75008d76f43b75087303ff5520897500c746fc020000008946048b5c2404891e89f083c40cc383c800|@1816,63|40,0,0 1816:S36|556e6976657273616c5461626c652e756e6976456e746572283429736561726368283129 1817:C2,444|3b650c7303ff55248b3883ff01754cb83031774190e846e3fdffbb5c3177410bc0e83ae3fdff8b75008d76f03b75087303ff5520897500c746fc03000000894608bb081d7541895e04c706cf00000089f00bc0ff552cb8010000008b700c8b168b0a8b78048b3753ff7004ff7008ff700c525189d889f290ff128b5d008d5bf43b5d087303ff5520895d00c743fc020000008b54241c8953048b4c2414890b5389c38b44240883c800e8760100008b44240c8b38f7c7010000007503ff553889fe83c60270f689308b18ba0b00000089d923caf6c1017503ff553850528d43ffd1faf7ea8d48015a5870ed8b0424bf0900000089c623f7f7c6010000007503ff5538505289c2d1fa8d47fff7ea8d70015a5870eb5123cef6c101597503ff55383bce7e70a8017503ff55388d58ff03d870f6f6c3017503ff553889da83c20270f689de6a01bb8100000089d0ff15a092040889308b5d008d5bf43b5d087303ff5520895d00c743fc02000000bae8c97441891389730456508b4c241089018b44241889188b7c240c8b1ff6c3017503ff5538eb05e91700000089d883e80270ef8d54242090e87e02000083c420c20400b80100000083c418c2040090|@1826,63|16,0,@1818 22,1,@323 27,0,@1819 34,1,@323 66,0,@349 75,0,103 87,0,0 170,1,@1820 203,0,5 239,0,4 326,0,64 334,0,I11 365,0,@174 422,1,@1824 433,0,0 1818:S34|417474656d707420746f2073657420612076616c75652077697468206e616d652028 1819:S24|2920696e20612066726f7a656e2068617368207461626c65 1820:C2,48|3b650c7303ff55248b7c240483ff017508b801000000c2040050ff3789d88d54240883c800e82200000083c408c20400|@1823,63|18,0,0 38,1,@1821 1821:C2,324|3b650c7303ff5524a8017503ff553883f8017d02eb168b7afc8b375023c6a801587503ff55383bc67d02eb0f89c6b824ae7441ff552cbf01000000a8017503ff553889c683c60270f68b5c77fe89df83ff01754ea8017503ff553883f8017d02eb168b7afc8b375023c6a801587503ff55383bc67d02eb0fb824ae74410bc0ff552cb801000000a8017503ff553889c383c30270f68b420489445ffeb801000000c352508b5af88b0783c800ff154094040883f801745b8b5424048b0c24f6c1017503ff553883f9017d02eb178b42fc8b385123cff6c101597503ff55383bcf7d02eb0fb824ae74410bc0ff552cb801000000f6c1017503ff553889ce83c60270f68b5a04895c70feb80100000083c408c38b0c2483f901750d8b4424048b78fc8b3789f2eb0289caf6c2017503ff553889d083e80270f68b54240483c408e9bcfeffff|@1822,63|47,0,@51 55,0,0 121,0,@51 131,0,0 157,0,0 174,0,I24 229,0,@51 239,0,0 266,0,0 1822:S39|486173685461626c652e68617368536574283329656e746572546162283329656e746572283129 1823:S31|486173685461626c652e68617368536574283329656e746572546162283329 1824:C2,176|3b650c7303ff5524a8017503ff553883f8017d06b801000000c3a8017503ff553883f8017d02eb168b7aec8b375023c6a801587503ff55383bc67d02eb1189c6b824ae74410bc0ff552cbf01000000a8017503ff553889c683c60270f68b5c77fe89df83ff017502eb25525057ff72e08b5ae48b07e81a96fdffff74240489c38b44240490e872fdffff83c408eb0252508b1424f6c2017503ff553889d083e80270f68b54240483c408e951ffffff90|@1825,63|21,0,0 65,0,@51 75,0,0 118,1,@175 134,1,@1820 1825:S31|486173685461626c652e68617368536574283329636f70794f766572283129 1826:S20|486173685461626c652e68617368536574283329 1827:S27|556e6976657273616c5461626c652e756e6976456e746572283429 1828:S29|5354525543545f56414c5328292e6d616b65456e746572283229283129 1829:C2,32|3b650c7303ff55248b388b3424893c24ff70048b5a048b420856e9cdf8ffff90|@1828,63|27,1,@1814 1830:C2,32|3b650c7303ff55248b388b3424893c24ff70048b5a048b420856e991f8ffff90|@1828,63|27,1,@1814 1831:C2,32|3b650c7303ff55248b388b3424893c24ff70048b5a048b420856e955f8ffff90|@1828,63|27,1,@1814 1832:C2,32|3b650c7303ff55248b388b3424893c24ff70048b5a048b420856e919f8ffff90|@1828,63|27,1,@1814 1833:C2,32|3b650c7303ff55248b388b3424893c24ff70048b5a048b420856e9ddf7ffff90|@1828,63|27,1,@1814 1834:S24|5354525543545f56414c5328292e6d616b65456e76283129 1835:O3|@1837,@1839,@1836 1836:O2|@1841,@7370 1837:O2|@1838,@7370 1838:C2,28|8b388b72043bfe750cb803000000c3b801000000c3b801000000c390|@593,53|10,0,1 16,0,0 22,0,0 1839:O2|@1840,@7370 1840:C2,44|89c78b45008d40f03b45087303ff5520894500c740fc03000000897808c740048b0000008b7a048938c30bc0|@593,37|32,0,69 1841:C2,36|8b388b72043bfe750a8b4008c3b801000000c3b8503d754183c800ff552cb80100000090|@593,53|14,0,0 20,0,@597 31,0,0 1842:O3|@1844,@1846,@1843 1843:O2|@1848,@7371 1844:O2|@1845,@7371 1845:C2,28|8b388b72043bfe750cb803000000c3b801000000c3b801000000c390|@593,53|10,0,1 16,0,0 22,0,0 1846:O2|@1847,@7371 1847:C2,44|89c78b45008d40f03b45087303ff5520894500c740fc03000000897808c740048b0000008b7a048938c30bc0|@593,37|32,0,69 1848:C2,36|8b388b72043bfe750a8b4008c3b801000000c3b8503d754183c800ff552cb80100000090|@593,53|14,0,0 20,0,@597 31,0,0 1849:O3|@1851,@1853,@1850 1850:O2|@1855,@7335 1851:O2|@1852,@7335 1852:C2,28|8b388b72043bfe750cb803000000c3b801000000c3b801000000c390|@593,53|10,0,1 16,0,0 22,0,0 1853:O2|@1854,@7335 1854:C2,44|89c78b45008d40f03b45087303ff5520894500c740fc03000000897808c740048b0000008b7a048938c30bc0|@593,37|32,0,69 1855:C2,36|8b388b72043bfe750a8b4008c3b801000000c3b8503d754183c800ff552cb80100000090|@593,53|14,0,0 20,0,@597 31,0,0 1856:O3|@1858,@1860,@1857 1857:O2|@1862,@7372 1858:O2|@1859,@7372 1859:C2,28|8b388b72043bfe750cb803000000c3b801000000c3b801000000c390|@593,53|10,0,1 16,0,0 22,0,0 1860:O2|@1861,@7372 1861:C2,44|89c78b45008d40f03b45087303ff5520894500c740fc03000000897808c740048b0000008b7a048938c30bc0|@593,37|32,0,69 1862:C2,36|8b388b72043bfe750a8b4008c3b801000000c3b8503d754183c800ff552cb80100000090|@593,53|14,0,0 20,0,@597 31,0,0 1863:O3|@1865,@1867,@1864 1864:O2|@1869,@7330 1865:O2|@1866,@7330 1866:C2,28|8b388b72043bfe750cb803000000c3b801000000c3b801000000c390|@593,53|10,0,1 16,0,0 22,0,0 1867:O2|@1868,@7330 1868:C2,44|89c78b45008d40f03b45087303ff5520894500c740fc03000000897808c740048b0000008b7a048938c30bc0|@593,37|32,0,69 1869:C2,36|8b388b72043bfe750a8b4008c3b801000000c3b8503d754183c800ff552cb80100000090|@593,53|14,0,0 20,0,@597 31,0,0 1870:O2|@1875,@7317 1871:O2|@1872,@7317 1872:C2,28|8b388b72043bfe750cb803000000c3b801000000c3b801000000c390|@593,53|10,0,1 16,0,0 22,0,0 1873:O2|@1874,@7317 1874:C2,44|89c78b45008d40f03b45087303ff5520894500c740fc03000000897808c740048b0000008b7a048938c30bc0|@593,37|32,0,69 1875:C2,36|8b388b72043bfe750a8b4008c3b801000000c3b8503d754183c800ff552cb80100000090|@593,53|14,0,0 20,0,@597 31,0,0 1876:C2,80|3b650c7303ff5524528b5208ff12f7c00100000075308b3c248b5f048b0083c800e84600000089c68b45008d40f83b45087303ff5520894500c740fc01000000893083c404c3b80100000083c404c390|@1879,63|34,1,@1877 71,0,0 1877:C2,232|3b650c7303ff552483f801751289c6b8503d754183c800ff552cbf010000008b78048b3783fe01755983f8017507ba40970408eb028b1083f801754b53ff770452b81500000083c800e8725dffff8b7d008d7fec3b7d087303ff5520897d00c747fc04000000c7470c01000000c7470801000000be40970408897704890789f9eb0de95d0000008b480853ff7704528b45008d40f03b45087303ff5520894500c740fc030000008b7c24088978088b742404897004c700050000008b5d008d5bf03b5d087303ff5520895d00c743fc03000000894b088943048b1424891389d883c40cc3c383c800|@1878,63|16,0,@597 27,0,0 47,0,I48 66,0,10 74,1,@1488 105,0,0 112,0,0 117,0,I48 183,0,2 1878:S35|5354525543545f56414c5328292e6d616b6553656c6563746564537472756374283229 1879:S36|56414c55455f4f505328292e6c6f6f6b7570537472756374757265283429283129283129 1880:S33|56414c55455f4f505328292e6c6f6f6b7570537472756374757265283429283129 1881:C2,268|3b650c7303ff55245050525089df8d5c240889f890e8ae8effffbb409704088b44240890ff154094040883f80174138b5c24048b44240c8b53f80bc0ff1289c6eb468b742404ff742408ff76048b5ef8b848277741baec3e77410bc0ff1289c389d883c800e8c600000083f8017407be589c7541eb1289d88b142490ff1289c28b44240cff1289c6f7c60100000075068b0683c410c38b4c2404ff7104bb1c2175418b41fce84ad4fdff8b5c241083c800e83ed4fdffbb503f77410bc0e832d4fdff50bb409704088b442410ff154094040883f8017407b840970408eb108b5c2410b8703f77410bc0e806d4fdff89c38b04240bc0e8fad3fdff8b5424040bc0ff12b80100000083c418c390|@1887,63|22,1,@1626 27,0,I48 38,0,I24 81,0,@1797 86,0,@1882 102,1,@1883 112,0,@989 158,0,@377 166,1,@323 178,1,@323 183,0,@1885 190,1,@323 196,0,I48 206,0,I24 216,0,I48 227,0,@1886 234,1,@323 246,1,@323 259,0,0 1882:O1|@1798 1883:C2,20|83f8017506b803000000c3b801000000c383c800|@1884,1|6,0,1 12,0,0 1884:S34|5354525543545f56414c5328292e6973556e646566696e6564537472756374283129 1885:S23|2920686173206e6f74206265656e206465636c61726564 1886:S14|20696e2073747275637475726520 1887:S42|56414c55455f4f505328292e6c6f6f6b75705374727563747572652834296c6f6f6b7570537472283229 1888:S30|56414c55455f4f505328292e6c6f6f6b7570537472756374757265283429 1889:C2,36|3b650c7303ff55248b7a088b3424893c24ff720450bb030000008b420c56e921d2ffff90|@1796,63|22,0,1 31,1,@1758 1890:O1|@1891 1891:C2,100|3b650c7303ff552483f8017541b81500000083c800e8b659ffff8b75008d76ec3b75087303ff5520897500c746fc04000000c7460c01000000c7460801000000bb40970408895e04890689f7eb038b780889f8ba5028774190e8f6e7ffff8b4028c30bc0|@1892,63|14,0,10 22,1,@1488 53,0,0 60,0,0 65,0,I48 84,0,@1801 90,1,@1803 1892:S67|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973747275637456616c756528352966756e6374722d283129 1893:S7|46756e63746f72 1894:C2,284|3b650c7303ff55245050538d5c24040bc0e86e8bffffbb409704088b44240490ff154094040883f801740f8b4424088b14240bc0ff1289c7eb62ff742404ff7424148b5c2428b8482777410bc0e802e6ffff89c789f883c800e88efdffff83f80174208b7d008d7ff83b7d087303ff5520897d00c747fc010000008b7424148937eb1989f88b54241c83c800ff1289c68b44240889f20bc0ff1289c7f7c70100000075088b0783c40cc21400bb1c2175418b442418e8f6d0fdff8b5c240883c800e8ead0fdffbb503f77410bc0e8ded0fdff50bb409704088b442408ff154094040883f8017407bb40970408eb128b5c2408b8703f77410bc0e8b2d0fdff89c38b04240bc0e8a6d0fdff8b5424140bc0ff128b44241883c410c21400|@1895,63|18,1,@1626 23,0,I48 34,0,I24 71,0,@1797 78,1,@1798 90,1,@1883 173,0,@377 182,1,@323 194,1,@323 199,0,@1885 206,1,@323 212,0,I48 222,0,I24 232,0,I48 243,0,@1886 250,1,@323 262,1,@323 1895:S24|56414c55455f4f505328292e6c6f6f6b7570416e79283729 1896:C2,20|83f8017506b803000000c3b801000000c383c800|@1897,1|6,0,1 12,0,0 1897:S35|5354525543545f56414c5328292e6973556e646566696e656446756e63746f72283129 1898:C2,24|83f801750eb8503d754190ff552cb8010000008b400cc390|@1899,1|6,0,@597 15,0,0 1899:S30|5354525543545f56414c5328292e66756e63746f72526573756c74283129 1900:C2,24|83f801750eb8503d754190ff552cb8010000008b00c30bc0|@1901,1|6,0,@597 15,0,0 1901:S27|5354525543545f56414c5328292e66756e63746f72417267283129 1902:C2,4|8b400cc3|@1903,1| 1903:S28|5354525543545f56414c5328292e7369674d696e5479706573283129 1904:C2,4|8b4008c3|@1905,1| 1905:S28|5354525543545f56414c5328292e7369674d61785479706573283129 1906:C2,220|3b650c7303ff5524f6c3017503ff553883fb017d07bf01000000eb0289dff7c7010000007503ff553889fe83c60270f65053576890c67541bb8100000089f090ff15a09204088b1c2489188b55008d52ec3b55087303ff5520895500c742fc04000000b9f0447741890a8b7c2408897a0c8b7424048972088942048b5d008d5bec3b5d087303ff5520895d00c743fc04000000b9a0477741890b897b0c8973088943048b45008d40f43b45087303ff5520894500c740fc02000000bf7c49774189388958048b7424108906895604b80100000083c40cc2040083c800|@1916,63|22,0,0 52,0,@1107 57,0,64 66,0,I11 100,0,@1907 148,0,@1913 188,0,@1915 207,0,0 1907:C2,444|3b650c7303ff5524525083c800e8c601000083f8017502eb5f8b3c248b1f83fbfd75218b57048b0a8b0183f803750489feeb1389cf3b650c7303ff5524ebddbe0100000089fe8b0e83f90175058b5604eb0db848477741ff552cba010000008b4424048b780c5223d7f6c2015a7503ff55383bd77d07eb61e95c0000008b1c248b0b83f9fd75218b43048b388b3783fe03750489daeb1389fb3b650c7303ff5524ebddba0100000089da8b3a83ff0175058b4204eb0db848477741ff552cb8010000008b7424048b5e085023c3a801587503ff55383bc37c09b80100000083c408c38b4c2404ff71048b4424048b3083fefd75218b58048b138b0a83f903750489c7eb1389d03b650c7303ff5524ebddbf0100000089c78b1783fa0175058b5f04eb10b84847774183c800ff552cbb01000000f6c3017503ff553883fb017d02eb178b0c248b015323d8f6c3015b7503ff55383bd87d02eb0eb824ae744190ff552cb901000000f6c3017503ff553889de83c60270f68b1c248b4c73fe89c80bc0e84a80feff83c800e88a80feff83f8017409b80100000083c40cc38b45008d40f83b45087303ff5520894500c740fc01000000890883c40cc30bc0|@1912,63|14,1,@1908 64,0,0 83,0,@1910 91,0,0 164,0,0 183,0,@1910 191,0,0 218,0,0 273,0,0 292,0,@1910 303,0,0 346,0,@51 355,0,0 386,1,@1109 394,1,@1111 404,0,0 1908:C2,64|8b3083fefd75218b58048b138b0a83f903750489c7eb1389d03b650c7303ff5524ebddbf0100000089c78b1f83fb017506b803000000c3b801000000c383c800|@1909,63|36,0,0 50,0,1 56,0,0 1909:S26|5354525543545f56414c5328292e6973426f756e644964283129 1910:O3|@7320,@224,@1911 1911:S21|6f666673657449643a206e6f74206120426f756e64 1912:S32|535452554354555245535f28292e747970654d61746368546162283329283129 1913:C2,408|3b650c7303ff55245250530bc0e816ffffff83f80174718b7c24048b1f83fbfd75218b57048b0a8b0183f803750489feeb1389cf3b650c7303ff5524ebddbe0100000089fe8b0e83f90175058b5604eb0eb84847774190ff552cba010000008b4424088b780c5223d7f6c2015a7503ff55383bd77c708b5c24048b0b83f9fd75288b43048b38eb05e9010100008b3783fe03750489daeb1389fb3b650c7303ff5524ebd6ba0100000089da8b3a83ff0175058b4204eb10b84847774183c800ff552cb8010000008b7424088b5e085023c3a801587503ff55383bc37d658b4c2408ff7104eb05e9a30000008b4424088b3083fefd75218b58048b138b0a83f903750489c7eb1389d03b650c7303ff5524ebddbf0100000089c78b1783fa0175058b5f04eb0eb84847774190ff552cbb01000000f6c3017503ff553883fb017d07eb1ce9470000008b0c248b015323d8f6c3015b7503ff55383bd87d02eb0db824ae7441ff552cb801000000f6c3017503ff553889de83c60270f68b1c248b4c2404894c73feb80100000083c410c3b80100000083c40cc390|@1914,63|14,1,@1908 63,0,0 82,0,@1910 91,0,0 165,0,0 184,0,@1910 195,0,0 275,0,0 294,0,@1910 303,0,0 351,0,@51 359,0,0 390,0,0 399,0,0 1914:S32|535452554354555245535f28292e747970654d61746368546162283329283229 1915:C2,20|3b650c7303ff55248b58048b008b5204ff220bc0|@1912,63| 1916:S29|535452554354555245535f28292e747970654d61746368546162283329 1917:C2,160|3b650c7303ff55248b7c24108b75008d76e83b75087303ff5520897500c746fc05000000ba904a77418916897e108b54240489560c8b4c240c894e088b4c2408894e045053ff770489f20bc0ff128b45008d40e83b45087303ff5520894500c740fc05000000bfb872774189388b34248970108b5c241089580c8b5424188950088b4c24148948048b5c240489c78b44240889fa8b74240c83c42056ff220bc0|@2173,63|37,0,@1918 103,0,@2034 1918:C2,140|3b650c7303ff552489d789c689d883c800e8920000008b5d008d5be03b5d087303ff5520895d00c743fc07000000ba784b77418913897b188973148b77108973108b570c89530c8b4f08894b088b4f04894b048b4d008d49f43b4d087303ff5520894d00c741fc02000000baec67774189118959048b1c24c704240100000089da89cb52e93f1d000083c800|@2033,63|18,1,@1919 47,0,@1921 108,0,@2000 123,0,0 133,1,@2002 1919:C2,4|8b00c390|@1920,1| 1920:S23|5354525543545f56414c5328292e736967546162283129 1921:C2,988|3b650c7303ff552489d15089d8ba143a774183c800e88eeeffff83f801747289d8ba083a774183c800e806efffff89c78b41140bc0e886ffffff5157ff742408bbf8397741e8b6dffffff7c001000000756f8b308b04240bc0e8ea7afeff83c800e82a7bfeff83f801755b8b5c240456ff731089f38b442408e87a0300008b44240483c800e8fa04000089c18b0424eb05e9e101000083c800e8e6040000510bc8f6c101597503ff55383bc874698b4424088b780c8b70088b58048b442404eb0ae95f010000e94f0100000bc0e80280ffff57565389c3b83c51774190e85ec6fdffbb4c5177410bc0e852c6fdff8b542404895424208b0c248b7c241c894c241c89442418bb030000008b44240883c41857e999c5ffff8b4424040bc0e8d604000083f801746c8b042483c800e8fe04000083f801755c8b4424088b780c8b70088b58048b04240bc0e8867fffff57565389c3b85100000090e8e2c5fdffbb046777410bc0e8d6c5fdff8b542404895424208b0c248b7c241c894c241c89442418bb030000008b44240883c41857e91dc5ffff8b4424040bc0e80a1a000083f801746c8b042483c800e8fa19000083f801755c8b4424088b780c8b70088b58048b04240bc0e80a7fffff57565389c3b85100000090e866c5fdffbb586777410bc0e85ac5fdff8b542404895424208b0c248b7c241c894c241c89442418bb030000008b44240883c41857e9a1c4ffffb80100000083c410c20400b80100000083c40cc204008b742404ff760cff7608ff76048b5c2414b8746777410bc0e8fec4fdffbb846777410bc0e8f2c4fdff8b5c2404895c241c8b14248b4c24188954241889442414bb030000008b44240883c41451e939c4ffff89d8ba2c38774183c800e83aeaffff83f801747489d8ba2038774183c800e8b2eaffff89c78b41140bc0e81afdffff5157ff742408bb10387741e84addfffff7c00100000075708b1883fb017548b81500000083c800e8b24bffff8b55008d52ec3b55087303ff5520895500c742fc04000000c7420c01000000c7420801000000b940970408eb05e9cb000000894a04890289d6eb038b73088b0c2483f901754956b81500000083c800e85e4bffff8b7d008d7feceb05e94a0000003b7d087303ff5520897d00c747fc04000000c7470c01000000c7470801000000be40970408897704890789faeb048b5108568b44240889d38b78188b042489fa8b74241083c41856ff228b742404ff760cff7608ff76048b5c2414b8a46777410bc0e8a6c3fdffbb846777410bc0e89ac3fdff8b5c2404895c241c8b14248b4c24188954241889442414bb030000008b44240883c41451e9e1c2ffffb80100000083c404c204000bc0|@1999,63|14,0,@1865 22,1,@1866 34,0,@1864 42,1,@1869 54,1,@1919 65,0,@1863 70,1,@1805 90,1,@1109 98,1,@1111 122,1,@1922 134,1,@1926 154,1,@1926 206,1,@1624 216,0,@1928 222,1,@323 227,0,@1929 234,1,@323 262,0,1 275,1,@1758 286,1,@1930 302,1,@1931 330,1,@1624 340,0,40 346,1,@323 351,0,@1993 358,1,@323 386,0,1 399,1,@1758 410,1,@1994 426,1,@1994 454,1,@1624 464,0,40 470,1,@323 475,0,@1995 482,1,@323 510,0,1 523,1,@1758 528,0,0 539,0,0 567,0,@1996 574,1,@323 579,0,@1997 586,1,@323 614,0,1 627,1,@1758 634,0,@1851 642,1,@1852 654,0,@1850 662,1,@1855 674,1,@1919 685,0,@1849 690,1,@1805 710,0,10 718,1,@1488 749,0,0 756,0,0 761,0,I48 794,0,10 802,1,@1488 840,0,0 847,0,0 852,0,I48 911,0,@1998 918,1,@323 923,0,@1997 930,1,@323 958,0,1 971,1,@1758 976,0,0 1922:C2,256|3b650c7303ff552489c15389c8e80a01000089c789c883c800e83277feff515790e832f7ffff83f80174378b7424108b4424040bc0e81677feff89c38b45008d40f43b45087303ff5520894500c740fc020000008b54240889500489188b1690ff128b0424e8aa7bffff83f801746a8b042483c800e8ca7bffff8b0424e8927bffff83f801740f8b042483c800e8b27bffff89c6eb0db8503d7541ff552cbe010000008b460883c800e8de7bffff8b5c241089c189c883c800e89276feff518b53040bc0ff12f7c0010000007510b80100000083c410c20400e9170000008b442414894424148b5c240c8b042483c410e90bffffffb80100000083c40cc20400|@1925,63|14,1,@1923 26,1,@1109 34,1,@1908 54,1,@1109 102,1,@1620 118,1,@1621 126,1,@1620 142,1,@1621 151,0,@597 159,0,0 170,1,@1622 186,1,@1109 207,0,0 246,0,0 1923:C2,28|8b78108b1f83fb0175058b7704eb078b77048b1689d68b4604c30bc0|@1924,61| 1924:S7|6f283229283129 1925:S31|545950455f5452454528292e656e74657254797065436f6e73747273283329 1926:C2,4|8b4004c3|@1927,1| 1927:S24|5354525543545f56414c5328292e74634172697479283129 1928:S7|54797065732028 1929:S25|29206861766520646966666572656e7420617269746965732e 1930:C2,28|8b78108b1f83fb0175058b7704eb078b77048b1689d68b06c383c800|@1924,61| 1931:C2,276|3b650c7303ff552489c189c890e8b6ffffff83f8017406b803000000c389c80bc0e8befeffff83c800e89a73ffff83f8017406b801000000c389c80bc0e8627affff89c789c883c800e8e2000000505089c689c890e8be74feff89fb90e8fe74feff83f80174298b55008d52f83b55087303ff5520895500c742fc01000040890a89e1c701ffffffff89e0895004eb0d89e2c7020100000089e08948048b7d008d7ff43b7d087303ff5520897d00c747fc020000008b142489178b4c2404894f048b45008d40f03b45087303ff5520894500c740fc030000008978088958048930e8ce74feff681c537741bb7453774190e80201000083f8ff7507b803000000eb05b80100000089c783f70289f883c408c30bc0|@1992,63|14,1,@1930 24,0,1 34,1,@1923 42,1,@1598 52,0,0 62,1,@1624 74,1,@1932 86,1,@1109 94,1,@1111 133,0,-1 148,0,0 226,1,@1113 231,0,@1934 236,0,@1937 242,1,@1939 252,0,1 259,0,0 1932:C2,4|8b400cc3|@1933,1| 1933:S27|5354525543545f56414c5328292e74635479706556617273283129 1934:O1|@1935 1935:C2,8|b803000000c30bc0|@1936,1|1,0,1 1936:S33|545950455f5452454528292e7065726d697473457175616c697479283129283129 1937:O1|@1938 1938:C2,8|b8ffffffffc30bc0|@1936,1|1,0,-1 1939:C2,668|3b650c7303ff552453e8ba6fffff89c689f083c800e8f671feff83f801746389f0e81a72feff89c18b59048b01e80667ffff83f801740bb80300000083c404c204008b59048b010bc0e83e71ffff89c689f083c800e8ba71ffff83f801743f5689f083c800e8da71ffff89c88b54240cff1283f8ff7510b8ffffffff83c408c20400e9270000008b5c240c895c240c8b5c24048b042483c408e962ffffff89c88b5424088b5c240483c40c53ff2289f090e85a7effff83f801741289f0e87e7effffb8ffffffff83c404c2040089f00bc0e80e77ffff83f801746189f0e83277ffff8b088b40080bc0e86e77ffff89c789f883c800e82672feff89fe90e86672feff83f801740bb8ffffffff83c404c204005156685856774189f3b87b000000baa8567741e8ea0100008b1883fbfd7410b80300000083c40cc20400e9ed0000008b042490e8d671feff89c1b820597741e8ca71feff89c389c883c800e87e02000083f801740bb8ffffffff83c40cc204008b0424e856fcffff83f8017419bb030000008b4424048d54240c90e82204000083c40cc204008b04240bc0e84afbffff83c800e82670ffff83f80174398b042483c800e86671feff8b5424080bc0ff1283f8ff750bb8ffffffff83c40cc2040089c38b4424048d54240c90e8d203000083c40cc204008b04240bc0e8fafaffff89c78b04240bc0e83afdffff578b5c24080bc0e8560400006a0389c38b44240483c800e82e0500008b742414897424148b5c240c83c410e9d2fdffff89f090e8de6fffff83f801742989f0e80270ffff8b4004ba1c6677410bc0ff12bb030000008d5424040bc0e85603000083c404c2040089f083c800e8f274ffff83f801741489f0e82a75ffffb888667741ff552cb80100000089f0e8620e0000b8ffffffff83c404c2040083c800|@1991,63|10,1,@1595 22,1,@1102 34,1,@1103 46,1,@1586 56,0,1 74,1,@1596 86,1,@1600 102,1,@1601 120,0,-1 178,1,@1644 190,1,@1645 195,0,-1 210,1,@1620 222,1,@1621 234,1,@1622 246,1,@1109 254,1,@1111 264,0,-1 277,0,@1940 284,0,61 289,0,@1943 294,1,@1944 306,0,1 326,1,@1109 333,0,@1950 338,1,@1109 350,1,@1946 360,0,-1 374,1,@1930 384,0,1 398,1,@1953 414,1,@1923 422,1,@1598 438,1,@1109 456,0,-1 478,1,@1953 494,1,@1923 506,1,@1932 518,1,@1956 534,1,@1958 562,1,@1600 574,1,@1601 582,0,@1987 591,0,1 602,1,@1953 618,1,@1616 630,1,@1618 635,0,@1989 643,0,0 650,1,@1975 655,0,-1 1940:O1|@1941 1941:C2,8|b8f8257541c30bc0|@1942,1|1,0,@408 1942:S26|545950455f5452454528292e657175616c697479283329283129 1943:O2|@1944,@7373 1944:C2,32|3b650c7303ff552453508b7a048b078d5424080bc0e82200000083c408c20400|@1949,63|22,1,@1945 1945:C2,116|3b650c7303ff552483f801750ab8010000008b5204ff228b3852ff7704ff7708ff70048b1f8b42f8ff154094040883f80174348b74240c8b46fc83c800e88e6ffeff89c38b44240890e8826ffeff89da89c389d090e83600000083f80174088b44240483c410c38b04248b54240c83c410eb8d90|@1948,63|14,0,0 42,0,I24 62,1,@1109 74,1,@1109 86,1,@1946 1946:C2,264|538b1883fbfd75218b50048b0a8b3983ff03750489c7eb1389c83b650c7303ff5524ebddbf0100000089c7578b5424048b0283f8fd75218b7a048b1f8b0b83f903750489d1eb1389da3b650c7303ff5524ebddb90100000089d18b3c248b1f83fbfd752c8b3183fefd751c8b57048b41043bd07509b80300000083c408c3b80100000083c408c3b80100000083c408c383fbff752c8b3183feff751c8b57048b41043bd07509b80300000083c408c3b80100000083c408c3b80100000083c408c383fb0175388b3183fe0175288b57048b4104520bd0f6c2015a7503ff55383bd07509b80300000083c408c3b80100000083c408c3b80100000083c408c3b80100000083c408c390|@1947,63|37,0,0 84,0,0 118,0,1 127,0,0 136,0,0 167,0,1 176,0,0 185,0,0 228,0,1 237,0,0 246,0,0 255,0,0 1947:S27|5354525543545f56414c5328292e73616d65547970654964283229 1948:S41|5052494e545f5441424c4528292e6765744f7665726c6f61642833297365617263684c697374283129 1949:S28|5052494e545f5441424c4528292e6765744f7665726c6f6164283329 1950:O6|@1952,0,0,0,@510,@1951 1951:O2|-1,@7374 1952:S4|7265616c 1953:C2,92|3b650c7303ff552483f801750389d8c35253ff7004ff72048b5afc8b00bacc5977410bc0ff1283f8ff7509b8ffffffff83c40cc383f8017511bb010000008b04248b54240883c40cebb68b5c24048b04248b54240883c40ceba60bc0|@1955,63|30,0,@1954 44,0,-1 58,0,0 1954:O1|@1939 1955:S35|545950455f5452454528292e657175616c6974792833296571466f724c697374283229 1956:C2,172|3b650c7303ff5524f7c0010000007571f7c301000000756e8b308b480489f00bc0e88a6bfeff83f801740989f0e8ae6bfeffeb0fb8503d75410bc0ff552cb8010000008b7d008d7ff43b7d087303ff5520897d00c747fc020000008947048b338937578b5b0489c890e892ffffff8b5d008d5bf43b5d087303ff5520895d00eb0ae920000000e915000000c743fc020000008943048b1424891389d883c404c3b801000000c3b801000000c3|@1957,63|34,1,@1102 46,1,@1103 53,0,@597 63,0,0 161,0,0 167,0,0 1957:S23|545950455f5452454528292e636f707956617273283229 1958:C2,76|3b650c7303ff552489c189d88b5c240490e8520000008b7d008d7ff43b7d087303ff5520897d00c747fc02000000be185e77418937894704bba0657741895c240489fb89c8e9ce0400000bc0|@1986,63|18,1,@1959 47,0,@1965 57,0,@1983 70,1,@1969 1959:C2,64|8b7d008d7ff83b7d087303ff5520897d00c747fc0100004089078b45008d40f03b45087303ff5520894500c740fc03000000beac5b77418930895808897804c3|@1964,57|51,0,@1960 1960:C2,80|3b650c7303ff552489d689c389d883c800e8ee69feff83f801740f89f189d80bc0e80e6afeff89c2eb0db8503d7541ff552cba0100000051528b41048b3889f88d54240890e82200000083c408c30bc0|@1963,63|18,1,@1102 34,1,@1103 43,0,@597 51,0,0 70,1,@1961 1961:C2,356|3b650c7303ff552483f80175738b7af889d68b5f048b070bc0e8a25effff8b5ef889c18b038b7b0489fb83c800e87e6dffff83f80174088b56fc8b5a08eb05bb01000000505056516a01538d5c241053bb1f4e0000b8c8cc744183c800e86644feff8b45008d40f43b45087303ff5520894500c740fc020000008b542404eb05e9b000000089108b4c240889480483c800e8f644feff89c689f083c800e8f668feff83f801740f89f189c80bc0e81669feff89c3eb0db8503d7541ff552cbb010000008b04248b78f889de8b5f048b0790e83e68ffff89c389f083c800e82669feff8b1c248b53fc8b45008d40f43b45087303ff5520894500c740fc020000008b7bf889780489088b72048b1e8b7d008d7ff43b7d087303ff5520897d00c747fc02000000895f0489078b7204893e89c883c40cc38b3889d1ff37ff70048b59f88b470490e8265dffff83f80174088b44240483c408c38b042489ca83c408e99cfeffff|@1962,63|26,1,@1586 46,1,@1608 64,0,0 81,0,9999 86,0,@202 94,1,@1003 146,1,@1005 158,1,@1102 174,1,@1103 183,0,@597 191,0,0 210,1,@1596 222,1,@1104 326,1,@1584 1962:S41|545950455f5452454528292e7476617253657175656e63652832292831297054797065566172283129 1963:S30|545950455f5452454528292e7476617253657175656e6365283229283129 1964:S27|545950455f5452454528292e7476617253657175656e6365283229 1965:C2,364|3b650c7303ff552489d689c389d883c800e88267feff83f801747289f189d80bc0e8a267feff89df89c68b5e048b060bc0e80e6bffff81f81f4e0000740389f8c3515689f88b5104ff128b1c2489c18b038b7b0489fb83c800e8b666ffff89c689f083c800e83267ffff83f80174695689f083c800e85267ffff51ff700868a05f77418b5c24148b44240ceb05e9d500000083c800e84e01000089c389d883c800e8f666ffff83f801747389d8e81a67ffff8b088b70048b4424040bc0e8d666feff83f801741689f38b442404e8f666feff89da89c3eb13e97f000000b8503d754190ff552cbb010000008b45008d40f43b45087303ff5520894500c740fc020000008b3c248978048b74240c893089c78b45008d40f03b4508730aeb05e92d000000ff5520894500c740fc03000000897808895004890889d983c800e8f665feff89c389c883c800e8ba66feffeb0fb8246577410bc0ff552ceb035051508b44240483c414c389d8c30bc0|@1982,63|18,1,@1102 34,1,@1103 50,1,@1606 90,1,@1596 102,1,@1600 118,1,@1601 127,0,@1966 150,1,@1969 162,1,@1600 174,1,@1601 190,1,@1102 206,1,@1103 222,0,@597 231,0,0 318,1,@1100 330,1,@1104 337,0,@1980 1966:O1|@1967 1967:C2,4|c383c800|@1968,1| 1968:S47|545950455f5452454528292e67656e6572616c6973655479706573283329636f707954797065566172283129283129 1969:C2,696|3b650c7303ff552453e85a63ffff89c689f083c800e89665feff83f801741a89f389d80bc0e8b665feff89d88b14248b4c240483c40c51ff2289f00bc0e8426bffff83f801746889f189c80bc0e8626bffff51ff30ff70088b4424048d54241090e86e02000089c18b04240bc0e88a6bffff518b54241890ff1289c789f883c800e8c66bffff8b34248b5c24083bf3752389f9508b44240890e85e6bffff3bc875218b4424088b3883ff017516eb0ae9b60000005089f9eb0a8b44241083c418c20400505089c80bc0e8f265feff83c800e83266feff83f80174298b55008d52f83b55087303ff5520895500c742fc01000040890a89e1c701ffffffff89e0895004eb0d89e2c7020100000089e08948048b7d008d7ff43b7d087303ff5520897d00c747fc020000008b342489378b5c2404895f048b45008d40f03b45087303ff5520894500c740fc030000008978088b5424088950048b4c240c89088b7c242083c42857e9f265feff89f090e83e71ffff83f801747089f389d80bc0e85e71ffff53ff30ff7004ff7424148b5c24108b44240890e866feffff50ff7424188b5c24148b4424080bc0e852feffff8b14248b4c24083bd175128b7c24043bc7750a8b44240c83c414c2040089c78b45008d40f43b45087303ff5520894500c740fc02000000eb05e91200000089780489108b74241483c41c56e9226afeff89f090e8ae63ffff83f801746789f189c80bc0e8ce63ffff51ff30ff70048b04248d5424100bc0e8760100008b3c243bc7750a8b44240883c410c2040089c68b45008d40f03b45087303ff5520894500c740fc03000000c74008010000008970048b5c240489188b54241083c41852e9de62feff89f090e8f662ffff83f801740bb8c8cc744183c404c2040089f090e8fe01000083f801740bb8589c754183c404c2040089f090e89a68ffffb8d0647741ff552cb80100000090|@1979,63|10,1,@1595 22,1,@1102 38,1,@1103 62,1,@1620 78,1,@1621 98,1,@1970 110,1,@1622 130,1,@1624 154,1,@1622 202,1,@1109 210,1,@1111 249,0,-1 264,0,0 358,1,@1113 366,1,@1644 382,1,@1645 506,1,@1126 514,1,@1600 530,1,@1601 550,1,@1973 600,0,0 622,1,@1100 630,1,@1598 640,0,@202 654,1,@1975 664,0,@989 678,1,@1618 683,0,@1977 691,0,0 1970:C2,124|3b650c7303ff552483f8017506b801000000c35250ff30ff7004ff72048b5afc8b442408ba6c63774183c800ff12508b4424048b5424100bc0e8c2ffffff8b3c248b7424083bfe75108b5c24043bc375088b44240c83c414c38b5d008d5bf43b5d087303ff5520895d00c743fc02000000894304893b89d883c414c3|@1972,63|14,0,0 37,0,@1971 1971:O1|@1969 1972:S34|545950455f5452454528292e636f707954797065283329636f70794c697374283129 1973:C2,164|3b650c7303ff552483f8017506b801000000c38b385250ff37ff7704ff7004ff72048b5afc8b442408ba6c6377410bc0ff12508b4424048b5424140bc0e8beffffff8b34248b5c24083bf375108b5424043bc275088b44241083c418c38b55008d52f43b55087303ff5520895500c742fc020000008972048b4c240c890a8b7d008d7ff43b7d087303ff5520897d00c747fc02000000894704891789f883c418c383c800|@1974,63|14,0,0 42,0,@1971 1974:S40|545950455f5452454528292e636f707954797065283329636f70795265636f72644c697374283129 1975:C2,20|8b3883ff017506b803000000c3b801000000c390|@1976,33|8,0,1 14,0,0 1976:S7|42616454797065 1977:O3|@7320,@224,@1978 1978:S27|636f7079547970653a204f7665726c6f616453657420666f756e64 1979:S23|545950455f5452454528292e636f707954797065283329 1980:O3|@7320,@224,@1981 1981:S48|436f7079206f66206c6162656c6c6564207265636f7264206973206e6f742061206c6162656c6c6564207265636f7264 1982:S44|545950455f5452454528292e67656e6572616c6973655479706573283329636f707954797065566172283129 1983:O1|@1984 1984:C2,4|c383c800|@1985,1| 1985:S33|545950455f5452454528292e67656e6572616c6973655479706573283329283129 1986:S30|545950455f5452454528292e67656e6572616c6973655479706573283329 1987:O1|@1988 1988:C2,72|3b650c7303ff552483f8017506b801000000c38b38ff77048b40040bc0e8deffffff8b7d008d7ff43b7d087303ff5520897d00c747fc020000008947048b0424890789f883c404c3|@413,33|14,0,0 1989:O3|@7320,@224,@1990 1990:S28|657175616c697479202d204f7665726c6f616473657420666f756e64 1991:S23|545950455f5452454528292e657175616c697479283329 1992:S30|545950455f5452454528292e7065726d697473457175616c697479283129 1993:S18|29206973206e6f7420616e20657174797065 1994:C2,28|8b78108b1f83fb0175058b7704eb078b77048b1689d68b4608c30bc0|@1924,61| 1995:S19|29206973206e6f742061206461746174797065 1996:S6|547970652028 1997:S23|29206d697373696e6720696e207374727563747572652e 1998:S11|5374727563747572652028 1999:S42|535452554354555245535f28292e6d61746368536967732836296d617463684e616d6573283229283329 2000:C2,28|3b650c7303ff55248b78088b3424893c248b58048b008b520456ff22|@2001,63| 2001:S42|535452554354555245535f28292e6d61746368536967732836296d617463684e616d6573283229283129 2002:C2,156|3b650c7303ff552453e8aa0000008b7c24088b700883fe01750889f883c404c2040050578b5804b80100000089da0bc0ff128b542404ff30ff7004b8010000008b120bc0ff1289c18b45008d40f03b45087303ff5520894500c740fc030000008b7c24088978088b34248970048b5c24048918518b542414ff1289c28b042489d783c4143b650c7303ff5524eb84b80100000083c418c2040083c800|@2032,63|10,1,@2003 40,0,0 60,0,0 143,0,0 2003:C2,236|3b650c7303ff552490e8fa00000050508b780883ff017464508b7004b80100000089f290ff128b580483fb0175678b1424b8010000008b12ff128b480883f901743f508b7804b80100000089fa83c800ff128b700483fe0175108b142483c4043b650c7303ff5524ebc78d5c24088b142489138d4c2408897104eb3be9270000008d7c240489078d742404c746040100000050eb228d5424048b0c24890a8d7c2404895f0450eb0f89e6890689e3c743040100000050508b45008d40f43b45087303ff5520894500c740fc020000008b54240889108b4c240c894804bad86e774183c410e9f704000083c800|@2031,63|10,1,@2004 29,0,0 50,0,0 71,0,0 142,0,0 177,0,0 221,0,@2018 229,1,@2020 2004:C2,280|3b650c7303ff552450508b3883ffff75348b700c8b1e8b138b4d008d49f43b4d087303ff5520894d00c741fc02000000bf4c6b7741893989590489e3891389e2894a04eb3b8b70088b5efc81e3ffffff008d5c1b018b55008d52f43b55087303ff5520895500c742fc02000000b9dc6b7741890a89720489e1891989e38953048b55008d52f03b55087303ff5520895500c742fc03000000b9406c7741890a8b04248942088b7c2404897a0452befffffffff7c6010000007503ff553889f383c30270f68b5424045323daf6c3015b7503ff55383bda7c0a89d88b142483c40cff225389d88b54240c83c800ff1283f80175198b342483c4043b650c7303ff5524ebafb80100000083c410c38b04248b54240483c410ff22|@2017,63|49,0,@2005 110,0,@2007 153,0,@2008 174,0,-1 260,0,0 2005:C2,72|a8017503ff553883f8017d02eb168b7a048b375023c6a801587503ff55383bc67d02eb0fb824ae74410bc0ff552cb801000000a8017503ff553889c683c60270f68b4477fec30bc0|@2006,53|37,0,@51 47,0,0 2006:S34|486173685461626c652e686173684f7665722831293c7061747465726e3e2d283129 2007:C2,72|a8017503ff553883f8017d02eb218b7a048b77fc81e6ffffff008d7436015023c6a801587503ff55383bc67d02eb10b824ae744183c800ff552cb8010000008b7447fe89f0c30bc0|@2006,53|48,0,@51 59,0,0 2008:C2,156|8b7a085023c7a801587503ff55383bc77d07be03000000eb05be010000008b5d008d5be83b5d087303ff5520895d00c743fc05000000b9f86c7741890b894310897b0c8b4a04894b088953048b7d008d7fec3b7d087303ff5520897d00c747fc04000000b9b46d7741890f89470c8b42088947088b4a04894f048b45008d40f03b45087303ff5520894500c740fc030000008970088978048918c390|@2016,63|19,0,1 26,0,0 55,0,@2009 101,0,@2011 2009:C2,116|3b650c7303ff5524528b4210a8017503ff553889c283c20270f68b04248b780c5223d7f6c2015a7503ff55383bd77c0c8b700489d089f283c404ff22528b700889d089f2ff1283f80175198b042483c4043b650c7303ff5524ebb1b80100000083c408c38b5c24048b04248b530483c408ff2290|@2010,63|92,0,0 2010:S35|486173685461626c652e686173684f7665722831296d616b6549746572283129283129 2011:C2,72|3b650c7303ff55248b420c8b7a085023c7a801587503ff55383bc77d1b8b5204ff1283f8017510b8186e774183c800ff552cb801000000c3b8506e77410bc0ff552cb80100000090|@2010,63|40,0,@2012 51,0,0 57,0,@2014 67,0,0 2012:O3|@7320,@224,@2013 2013:S31|486173685461626c652e686173684f7665722e76616c756520284e6f6e6529 2014:O3|@7320,@224,@2015 2015:S39|486173685461626c652e686173684f7665722e76616c756520286c696d69742070617373656429 2016:S32|486173685461626c652e686173684f7665722831296d616b6549746572283129 2017:S21|486173685461626c652e686173684f766572283129 2018:O2|@2020,@2019 2019:O2|@2027,@2018 2020:C2,132|8b780483ff017507be03000000eb05be0100000089f383f3028b75008d76f03b75087303ff5520897500c746fc03000000b9906f7741890e8946088b4a04894e048b7d008d7ff43b7d087303ff5520897d00c747fc02000000b9f46f7741890f8947048b45008d40f03b45087303ff5520894500c740fc030000008958088978048930c3|@2026,63|9,0,1 16,0,0 50,0,@2021 90,0,@2023 2021:C2,24|3b650c7303ff55248b7a088b5f048b078b5204ff2283c800|@2022,63| 2022:S40|556e6976657273616c5461626c652e756e69764f7665722831296d616b6549746572283129283129 2023:C2,108|3b650c7303ff552450508b42048b780483ff017509b87c70774190ff552c8b30ff37b8010000008b56040bc0ff128d5c24048b1089138d4c24048b3c248979048b45008d40f43b45087303ff5520894500c740fc020000008b74240489308b5c240889580483c40cc383c800|@2022,63|22,0,@2024 35,0,0 2024:O3|@7320,@224,@2025 2025:S29|556e6976657273616c5461626c652e756e69764f7665722e76616c7565 2026:S37|556e6976657273616c5461626c652e756e69764f7665722831296d616b6549746572283129 2027:C2,224|3b650c7303ff552483fb01750eb8e071774190ff552cb8010000008b7b0483ff0175705050ff72048b30b80100000089f283c800ff128b580883fb017436508b5004b80100000090ff128b480483f90175108b042483c4043b650c7303ff5524ebc68d7c24088b342489378d5c2408894b04eb128d54240489028d4c2404c7410401000000508b45008d40f43b4508730aeb05e923000000ff5520894500c740fc020000008b7c240889388b74240c8970048b54240483c410ff2289c68b45008d40f43b45087303ff5520894500c740fc0200000089780489308b5204ff2290|@2030,63|14,0,@2028 23,0,0 43,0,0 67,0,0 129,0,0 2028:O3|@7320,@224,@2029 2029:S28|556e6976657273616c5461626c652e756e69764f7665722e6e657874 2030:S33|556e6976657273616c5461626c652e756e69764f7665722831296e657874283229 2031:S26|556e6976657273616c5461626c652e756e69764f766572283129 2032:S26|556e6976657273616c5461626c652e756e6976466f6c64283329 2033:S39|535452554354555245535f28292e6d61746368536967732836296d617463684e616d6573283229 2034:C2,268|3b650c7303ff552489d789c689d883c800e86ad8ffff8b55008d52e03b55087303ff5520895500c742fc07000000b9e0737741890a897a188972148b4f10894a108b4f0c894a0c8b4f08894a088b4f04894a048b4d008d49f43b4d087303ff5520894d00c741fc02000000575653505251bf3cc0774189398951046a0189cb0bc0e81af5ffff8b44240c83c800e8eed7ffff8b7424148b5d008d5be43b5d087303ff5520895d00c743fc06000000bac0c0774189138b4c2410894b148b7e10897b108b560c89530c8b4e08894b088b4e04894b048b4d008d49f43b4d087303ff5520894d00c741fc02000000bafcc5774189118959046a0189cb83c800e89ef4ffffb80100000083c418c390|@2172,63|18,1,@1919 47,0,@2035 114,0,@2158 130,1,@2002 142,1,@1919 175,0,@2160 237,0,@2170 254,1,@2002 259,0,0 2035:C2,500|3b650c7303ff552489d15089d8ba143a774183c800e826c6ffff83f801747089d8ba083a774183c800e89ec6ffff89c78b41140bc0e81ed7ffff5157ff742408bbf8397741e84eb7fffff7c00100000075708b7424048b5d008d5be83b5d087303ff5520895d00c743fc05000000baf075774189138b4e10894b108b7e04897b0c8b56088953088b4e0c894b04eb05e9440000008b4c24048b5610895424108b54240c895c240c8b590c895c24088b7908897c24048b71048b1c248934248b00eb05e90600000052e923450000b80100000083c40cc2040089d8ba2c3877410bc0e872c3ffff83f801747489d8ba2038774183c800e8eac3ffff89c78b41140bc0e852d6ffff5157ff742408bb10387741e882b6fffff7c00100000075708b1883fb017548b81500000083c800e8ea24ffff8b55008d52ec3b55087303ff5520895500c742fc04000000c7420c01000000c7420801000000b940970408eb05e984000000894a04890289d6eb038b73088b0c2483f901754956b81500000083c800e89624ffff8b7d008d7feceb05e94a0000003b7d087303ff5520897d00c747fc04000000c7470c01000000c7470801000000be40970408897704890789faeb048b5108568b44240889d38b78188b042489fa8b74241083c41856ff22b80100000083c40cc20400b80100000083c404c2040090|@2157,63|14,0,@1865 22,1,@1866 34,0,@1864 42,1,@1869 54,1,@1919 65,0,@1863 70,1,@1805 111,0,@2036 201,1,@2146 206,0,0 219,0,@1851 226,1,@1852 238,0,@1850 246,1,@1855 258,1,@1919 269,0,@1849 274,1,@1805 294,0,10 302,1,@1488 333,0,0 340,0,0 345,0,I48 378,0,10 386,1,@1488 424,0,0 431,0,0 436,0,I48 478,0,0 489,0,0 2036:C2,84|3b650c7303ff55248b7d008d7fec3b7d087303ff5520897d00c747fc04000000be6076774189378b720489770c8b5808895f088b4a08894f048b5a108b3424891c24ff7204ff720c578b58048b0056e92c010000|@2145,63|33,0,@2037 80,1,@2041 2037:C2,164|3b650c7303ff55248b7a0c5250bbbc1477418b4724ba703d754183c800e806c7fdff8b34248b5c240450ff760c8b5b08b820777741e81e9cfdffbb387777410bc0e8129cfdff8b142483c800ff128b542408b858dc76418b1283c800ff128b4c240c8b45008d40f43b45087303ff5520894500c740fc02000000c74004010000008b790489388b7424088b5c24108974241089da8b5c240483c41052e9532fffff83c800|@2040,63|14,0,@1766 22,0,@599 30,1,@601 49,0,@2038 54,1,@323 59,0,@2039 66,1,@323 83,0,@1666 125,0,0 157,1,@1563 2038:S16|5768696c6520636865636b696e672028 2039:S6|29206e656172 2040:S29|535452554354555245535f28292e666f756e644e656172283329283129 2041:C2,144|3b650c7303ff55248b7d008d7ff43b7d087303ff5520897d00c747fc02000000be1c78774189378b74241089770453576a03bb010000000bc0e83ae3ffff8b5d008d5bec3b5d087303ff5520895d00c743fc04000000bae07d774189138b4c2414894b0c8b7c2410897b088b74240c8973048b142489542418895c24148b5c24048b54240883c41452e9ba0800000bc0|@2144,63|33,0,@2042 51,0,0 58,1,@1958 87,0,@2061 138,1,@2069 2042:C2,64|3b650c7303ff55248b7d008d7ff43b7d087303ff5520897d00c747fc02000000be7878774189378b72048977048b1c24893c2489d9bba879774151e9a4e7ffff|@2060,63|33,0,@2043 54,0,@2049 60,1,@1969 2043:C2,112|3b650c7303ff55248b7d008d7ff43b7d087303ff5520897d00c747fc02000000be0479774189378b72048977048b5d008d5bf43b5d087303ff5520895d00c743fc02000000897304b974797741890bb9a07977418b3424890c245368a8797741684097040889fb56e90b01000083c800|@2059,63|33,0,@2044 73,0,@2046 80,0,@2048 92,0,@2049 97,0,I48 105,1,@2052 2044:C2,32|3b650c7303ff55248b520490ff120bc0ff15609e040889c783f70289f8c30bc0|@2045,63|18,0,I105 2045:S44|545950455f5452454528292e6d617463685479706573283629636f7079546172676574283129283129283129 2046:O1|@2047 2047:C2,8|b801000000c30bc0|@2045,1|1,0,0 2048:O1|@1748 2049:O1|@2050 2050:C2,4|c383c800|@2051,1| 2051:S22|545950455f5452454528292e747269764d6170283129 2052:C2,420|3b650c7303ff55248b7c240c89c689f090e8ba4cfeff89f153ff37ff77045089c8e876d6ffff89c689f083c800e84e4bffff83f801740489f3eb578b5d008d5be43b5d087303ff5520895d00c743fc06000000bab07b774189138b44240c8943148b7c2420897b108b54241c89530c8b442414894308b8287c7741894304515653bba879774189f090e882e5ffff89c3eb025156538b44240c8b54241883c800ff1283f8017402eb0d8b5424048b0c243bd17502eb588b44240c8b5424100bc0ff12f7c00100000075088b0083c41cc210008b44240483c800e8a24affff83f80174308b4424080bc0e86e51ffff505089e383c800e8a251ffff8b5c24048b44242883c800e8be97fdff89c2eb14e9840000008b4424080bc0e83e51ffff89c2505089d18b44241090e8bad7ffff5150b8010000008b54243c83c800ff1289c18b44241890e836d6ffffff74241051506a018b5c24108b44241483c800e8de00000089c78b45008d40f43b45087303ff5520894500c740fc020000008978048b74241c8930578b5424280bc0ff128b042483c430c210008b44240883c41cc2100083c800|@2058,63|18,1,@1109 34,1,@1923 46,1,@1598 84,0,@2053 119,0,@2055 130,0,@2049 138,1,@1969 218,1,@1598 234,1,@1624 246,1,@1626 262,1,@323 282,1,@1624 298,1,@1932 305,0,0 326,1,@1930 350,1,@2056 2053:C2,40|3b650c7303ff55248b7a108b3424893c24ff720c68a8797741ff72088b5a148b520456ff2283c800|@2054,63|21,0,@2049 2054:S44|545950455f5452454528292e636f707954797065436f6e737472283629636f7069656445717569762d283129 2055:O1|@2052 2056:C2,224|5053bf0100000083fb01750489feeb26f7c7010000007503ff553889f883c00270f68b5b0489c73b650c7303ff5524ebd6be010000008b5d008d5bf03b5d087303ff5520895d00c743fc03000000c74308010000008b4424188943048b7c2410893b8b55008d52f83b55087303ff5520895500c742fc01000040891a8b5d008d5bf43b5d087303ff5520895d00c743fc02000000895304c703ffffffff8b55008d52e43b55087303ff5520895500c742fc060000008b4c2414894a14895a108b1c24895a0c8b5c240c895a088972048b742404893289d083c408c2100083c800|@2057,63|3,0,0 50,0,0 81,0,0 153,0,-1 2057:S32|5354525543545f56414c5328292e6d616b6554797065436f6e73747273283629 2058:S29|545950455f5452454528292e636f707954797065436f6e737472283629 2059:S41|545950455f5452454528292e6d617463685479706573283629636f7079546172676574283129283129 2060:S38|545950455f5452454528292e6d617463685479706573283629636f7079546172676574283129 2061:C2,48|3b650c7303ff5524bf2c7e77418b3424893c24ff7004ff7008ff720cff7208ff72048b18b8387e774156e93d00000090|@2068,63|9,0,@2062 37,0,@2063 43,1,@2064 2062:S2|746f 2063:S11|43616e2774206d61746368 2064:C2,160|3b650c7303ff55248b7d008d7fdc3b7d087303ff5520897d00c747fc08000000be087f774189378b74240c89771c894718895f148b5c2418895f108b44241489470c8b5424108957088b4c2404894f048b4c2408c7442418030000008b16895424148b4604894424108b5e08895c240c8b560c895424088b4610894424048b5e148b1424891c24ff7618ff761cff7620ff762489cb89f852e9abddfdff83c800|@2067,63|33,0,@2065 88,0,1 153,1,@752 2065:C2,284|3b650c7303ff552489d150b80100000090e8ae39ffff8b791c5150bbbc1477418b4724ba703d754190e852befdff8b74240850b8501475418b561890ff128b5c240c8b5424088b42188b530cff128b4c240cb8000375418b1183c800ff128b442408ff74240cff7424086a038b5c240c8b40140bc0e8763dffff8b7c240cb8000375418b1783c800ff128b74240c8b5c24088b43108b560cff128b54240cb8000375418b1283c800ff128b4c2408ff74240cff7424086a038b5c240c8b410c0bc0e82a3dffff8b44240c8b38b80003754189fa90ff128b74240c8b5c24088b43088b560cff128b54240cb8000375418b1283c800ff128b4c24088b44240c8b510483c800ff128b44240c8b7808b80100000089fa83c410ff2283c800|@2066,63|12,0,0 18,1,@1582 28,0,@1766 36,0,@599 42,1,@601 52,0,@328 83,0,@312 118,1,@1593 127,0,@312 159,0,@312 194,1,@1593 205,0,@312 235,0,@312 270,0,0 2066:S28|545950455f5452454528292e6d617463684572726f72283829283129 2067:S25|545950455f5452454528292e6d617463684572726f72283829 2068:S37|545950455f5452454528292e6d61746368547970657328362963616e744d61746368283129 2069:C2,28|3b650c7303ff5524ff7424088d54240490e822000000c2080083c800|@2143,63|18,1,@2070 2070:C2,4032|3b650c7303ff55245253500bc0e86642ffff508b4424080bc0e85a42ffff508b4424040bc0e876e3ffff83f801740bb80100000083c414c204008b44240483c800e87a44feff83f801746e8b4424040bc0e89a44feff89c68b04240bc0e83ee3ffff83f801740bb80100000083c414c204008b0424e84644feff83f801746789f38b042490e86644feff89d98b59048b01e8a643ffff51508b4424088b542420ff1289c689f083c800e81244feff83f801746589f389d8eb05e9aa03000083c800e82a44feff89d95089c38b4424080bc0e8c238ffff83f8017410b80100000083c420c20400e96a0300008b4424088b58048b0090e8e20e000083f801741e8b5c24108b04248d54242083c800e82a0f000083c420c20400e91d0300008b3c248b5f048b07e81243ffff89c68b44240490e88e43ffff83f8017473568b44240890e8ae43ffff89c38b04240bc0e87243ffff83f801745c538b44240490e89243ffff89c6bbc8cc74418b442408e8be43feffbbc8cc74418b4424100bc0e8ae43feff51ff742410ff74240c68a879774189f38b4424108d54243883c800e84e1e000089c38b44240c8d54242ceb0ae993000000e91c00000090e87e0e00008b1c248b4424148d54242ce86e0e000083c42cc204008b04240bc0e8a242ffff83f80174198b5c24148b4424048d5424240bc0e8460e000083c424c204008b542420ff72048b4424208b54242c90ff1289c18b45008d40f03b45087303ff5520894500c740fc03000000bf08ad77418978088948048b74241c89308b14248b5c242883c43053ff228b44240483c800e8be47ffff83f80174728b4424040bc0e8f247ffff89c389f083c800e8a247ffff83f801745b89f0e8da47ffff53518d54242890e8ae29000083f80175578b542424ff72048b4424248b5424300bc0ff1289c18b45008d40f03b45087303ff5520894500c740fc03000000bf34ae77418978088948048b742420eb0ae9d4000000e95d00000089308b14248b5c242c83c43453ff2289c1bbc8cc74418b442408e83e42feffbbc8cc74418b4424100bc0e82e42feff89c890e85e2a000089c38b4424088d54242890e8220d00008b1c248b4424108d542428e8120d000083c428c2040089f083c800e84641ffff83f80174198b5c24108b04248d54242083c800e8ea0c000083c420c204008b54241cff72048b44241c8b54242890ff1289c18b45008d40f03b45087303ff5520894500c740fc03000000bf08ad77418978088948048b74241889308b14248b5c242483c42c53ff228b44240483c800e8d240ffff83f801741589cb8b4424088d542420e87a0c000083c420c2040089f083c800e8ae40ffff83f80174198b5c24108b04248d54242083c800e8520c000083c420c204008b5c241cff73048b44241c8b54242890ff1289c28b45008d40f03b45087303ff5520894500c740fc03000000b908ad77418948088950048b7c241889388b14248b74242483c42c56ff22bba8797741895c242089f38b44240c8b54241883c41ce9abfbffff89f08d5424140bc0e8422b000083c414c204008b44240490e82246ffff83f801746d8b4424040bc0e84246ffff8b308b58088b042483c800e80edfffff83f801740bb80100000083c414c204008b0424e81640feff83f801741d8b042483c800e83640feff8d54241483c800e85e2d000083c414c204008b04240bc0e8be45ffff83f801746689f1538b442404eb05e9a5040000e8d645ffffff30ff70088b4424080bc0e80e46ffff508b4424040bc0e80246ffff89c78b04240bc0e8ba40feff89fe90e8fa40feff83f8017402eb21568b44240483c800e86acaffff83c800e8463fffff83f801740aeb4de91402000056eb458b442404e84acaffff89c38b44240490e88accffff5389cbe8aad3ffff6a0389c38b44240483c800e882d4ffff8b542430895424308b5c24188b54242883c42ce972faffff8b0424e83a40feff83c800e87a40feff83f8017402eb638b042490e8eec9ffff83c800e8ca3effff83f8017402eb4b8b042490e8d6c9ffff89c38b04240bc0e816ccffff538b5c24100bc0e832d3ffff6a0389c38b44240483c800e80ad4ffff8b5424308954243089c38b44241c8b54242883c42ce9f8f9ffff518b4424188b54243083c800ff1289c389d883c800e87244ffff83f801747189d989c80bc0e89244ffffff308b40080bc0e8ce44ffff89c789f883c800e8863ffeff89fe90e8c63ffeff83f801751a5689f083c800e83ac9ffff83c800e8163effff83f8017556eb0356eb518b04240bc0e81ec9ffff89c38b04240bc0e85ecbffff538b5c24080bc0e87ad2ffffeb05e9a40000006a0389c38b442404e84ed3ffffbaa87977418954243c89c38b4424288b54243483c438e93bf9ffff8b442410e8023ffeff89c38b04240bc0e8f63efeff5189da89c389d0e8aacfffff83f80174198b5c240c8b4424088d5424380bc0e86a2d000083c438c204008b4c24348b45008d40f03b45087303ff5520894500c740fc03000000bfb0b677418978088b34248970048b5c242889188b51048b4c243883c44051ff22baa8797741895424308b44241c8b54242883c42ce9a6f8ffff8b0424e8ae42ffff83f80174718b042483c800e8e242ffff89f15089d80bc0e88e43ffff89c789f883c800e8463efeff89fe90e8863efeff83f8017402eb185689f090e8fac7ffff83c800e8d63cffff83f8017405eb4d56eb4a8b04240bc0e8dec7ffff89c38b04240bc0e81ecaffff5389cbe83ed1ffff6a0389c3eb05e9dd0000008b442404e812d2ffff8b542424895424248b5c240c8b54241c83c420e902f8ffff83f901755d8b5c2404f7c30100000075448b042483c800e8b63dfeff89c18b0383c800e8aa3dfeffff730489c389c8e85eceffff83f8017407ba03000000eb1b8b1c2483c4043b650c7303ff5524ebb9ba01000000ba010000005083fa017410eb0350eb0bb80100000083c420c204008b5c241cff73048b4424108b54242883c800ff1289c28b45008d40f03b45087303ff5520894500c740fc03000000b9d8b677418948088950048b7c241489388b14248b74242483c42c56ff2289f189d883c800e84642ffff89c789f883c800e8fe3cfeff89fe90e83e3dfeff83f8017402eb185689f090e8b2c6ffff83c800e88e3bffff83f8017405eb4956eb468b04240bc0e896c6ffff89c38b04240bc0e8d6c8ffff5389cbe8f6cfffff6a0389c38b44240483c800e8ced0ffff8b542420895424208b5c24088b54241883c41ce9bef6ffff8b5c2414ff73048b4424088b54242083c800ff1289c28b45008d40f03b45087303ff5520894500c740fc03000000b908ad77418948088950048b7c240c89388b14248b74241c83c42456ff228b44240483c800e87640ffff83f80174728b4424040bc0e8aa40ffff89c68b04240bc0e8ead9ffff83f801740bb80100000083c414c204008b0424e8f23afeff83f801741d8b042483c800e8123bfeff8d54241483c800e83a28000083c414c204008b04240bc0e89a40ffff83f801747289f18b042490e8ba40ffffff308b4008eb05e97402000083c800e8ee40ffff89c789f883c800e8a63bfeff89fe90e8e63bfeff83f8017402eb185689f090e85ac5ffff83c800e8363affff83f8017405eb5756eb548b04240bc0e83ec5ffff89c38b04240bc0e87ec7ffff538b5c2408eb05e9c801000083c800e892ceffff6a0389c38b44240483c800e86acfffff8b5424248954242489c38b4424108b54241c83c420e958f5ffff518b44240c8b54242483c800ff1289c389d883c800e8d23fffff83f801746e89d989c80bc0e8f23fffffff308b40080bc0e82e40ffff89c789f883c800e8e63afeff89fe90e8263bfeff83f801740bb80100000083c424c204005689f0e892c4ffff83c800e86e39ffff83f80175568b042483c800e87ac4ffff89c38b04240bc0e8bac6ffff538b5c2408eb05e9eb00000083c800e8cecdffff6a0389c38b44240483c800e8a6ceffffbaa87977418954243089c38b44241c8b54242883c42ce993f4ffff8b5c240483fb017562518b54240cf7c20100000075488b3a8b72048b44241090e83e3afeff89c389f883c800e8323afeff5689da89c389d0e8e6caffff83f8017407b903000000eb1b8b142483c4043b650c7303ff5524ebb5b901000000b9010000005083f9017411eb045150eb0bb80100000083c430c204008b54242c8b45008d40f03b45087303ff5520894500c740fc03000000b9d8b677418948088b7c24048978048b74242089308b52048b5c243083c43853ff22baa8797741895424248b4424108b54241c83c420e9c2f3ffff8b5c2410ff73048b4424048b54241c83c800ff1289c28b45008d40f03b45087303ff5520894500c740fc03000000b908ad77418948088950048b7c240889388b14248b74241883c42056ff228b44240483c800e82a45ffff83f80174718b4424040bc0e84a45ffff8b308b58048b042483c800e8ead6ffff83f801740bb80100000083c414c204008b0424e8f237feff83f801741d8b042483c800e81238feff8d54241483c800e83a25000083c414c204008b04240bc0e89a3dffff83f80174298b042483c800e8ba3dffffeb05e9ad0000008b58088b008d54241483c800e8f228000083c414c204008b04240bc0e88e44ffff83f801743e89f18b042490e8ae44ffff53ff7004ff7424208b1889c88b54241c83c800e8a6f2ffff8b442420894424208b1c248b4424048b54241883c41ce98bf2ffff8b542410ff72048b4424048b54241cff1289c18b45008d40f03b45087303ff5520894500c740fc03000000bf08ad77418978088948048b74240889308b14248b5c241883c42053ff228b44240483c800e8b636ffff83f80174718b042483c800e8c6d5ffff83f801740bb80100000083c414c204008b0424e8ce36feff83f801741d8b042483c800e8ee36feff8d54241483c800e81624000083c414c204008b04240bc0e8763cffff83f80174288b042483c800e8963cffff8b58088b008d5424140bc0e8d6270000eb05e96d00000083c414c204008b042483c800e82a36ffff83f801740bb80100000083c414c204008b7c2410ff77048b4424048b54241c83c800ff1289c68b45008d40f03b45087303ff5520894500c740fc03000000bb08ad77418958088970048b54240889108b14248b4c241883c42051ff228b44240483c800e83636ffff89c68b04240bc0e8d6d4ffff83f801740bb80100000083c414c204008b0424e8de35feff83f801741d8b042483c800e8fe35feff8d54241483c800e82623000083c414c204008b04240bc0e8863bffff83f80174218b042483c800e8a63bffff8b58088b008d5424140bc0e8e626000083c414c204008b04240bc0e88635ffff83f801743289f18b042490e8a635ffffff742404ff742404ff74242089c389c88d54242083c800e886100000b80100000083c414c204008b5c2410ff73048b4424048b54241cff1289c28b45008d40f03b45087303ff5520894500c740fc03000000b908ad77418948088950048b7c240889388b14248b74241883c42056ff220bc0|@2142,63|14,1,@1595 26,1,@1595 38,1,@1975 48,0,0 66,1,@1102 82,1,@1103 94,1,@1975 104,0,0 118,1,@1102 134,1,@1103 146,1,@1596 170,1,@1102 194,1,@1103 210,1,@1584 220,0,0 246,1,@2071 270,1,@2073 294,1,@1596 306,1,@1600 322,1,@1601 334,1,@1600 350,1,@1601 357,0,@202 366,1,@1104 371,0,@202 382,1,@1104 396,0,@2049 414,1,@2108 442,1,@2073 458,1,@2073 474,1,@1598 498,1,@2073 553,0,@2125 590,1,@1616 606,1,@1618 618,1,@1616 630,1,@1618 642,1,@2126 697,0,@2128 741,0,@202 750,1,@1104 755,0,@202 766,1,@1104 774,1,@2129 790,1,@2073 806,1,@2073 822,1,@1598 846,1,@2073 901,0,@2125 938,1,@1598 958,1,@2073 974,1,@1598 998,1,@2073 1053,0,@2125 1083,0,@2049 1118,1,@2131 1134,1,@1620 1150,1,@1621 1166,1,@1975 1176,0,0 1190,1,@1102 1206,1,@1103 1218,1,@2133 1234,1,@1620 1258,1,@1621 1274,1,@1622 1286,1,@1622 1298,1,@1109 1306,1,@1111 1326,1,@1923 1334,1,@1598 1358,1,@1923 1370,1,@1932 1378,1,@1956 1394,1,@1958 1426,1,@1109 1434,1,@1111 1450,1,@1923 1458,1,@1598 1474,1,@1923 1486,1,@1932 1498,1,@1956 1514,1,@1958 1566,1,@1620 1582,1,@1621 1594,1,@1622 1606,1,@1109 1614,1,@1111 1630,1,@1923 1638,1,@1598 1658,1,@1923 1670,1,@1932 1682,1,@1956 1702,1,@1958 1707,0,@2049 1738,1,@1109 1750,1,@1109 1762,1,@1946 1786,1,@2135 1825,0,@2138 1858,0,@2049 1886,1,@1616 1902,1,@1618 1914,1,@1622 1926,1,@1109 1934,1,@1111 1950,1,@1923 1958,1,@1598 1978,1,@1923 1990,1,@1932 1998,1,@1956 2018,1,@1958 2070,1,@1109 2082,1,@1109 2094,1,@1946 2104,0,1 2127,0,0 2132,0,0 2148,0,0 2205,0,@2139 2242,1,@1622 2254,1,@1109 2262,1,@1111 2278,1,@1923 2286,1,@1598 2306,1,@1923 2318,1,@1932 2326,1,@1956 2342,1,@1958 2417,0,@2125 2454,1,@1616 2470,1,@1618 2482,1,@1975 2492,0,0 2506,1,@1102 2522,1,@1103 2534,1,@2133 2550,1,@1620 2566,1,@1621 2586,1,@1622 2598,1,@1109 2606,1,@1111 2622,1,@1923 2630,1,@1598 2650,1,@1923 2662,1,@1932 2682,1,@1956 2698,1,@1958 2750,1,@1620 2766,1,@1621 2778,1,@1622 2790,1,@1109 2798,1,@1111 2808,0,0 2822,1,@1923 2830,1,@1598 2846,1,@1923 2858,1,@1932 2878,1,@1956 2894,1,@1958 2899,0,@2049 2958,1,@1109 2970,1,@1109 2982,1,@1946 2992,0,1 3015,0,0 3020,0,0 3037,0,0 3076,0,@2139 3110,0,@2049 3181,0,@2125 3218,1,@1644 3234,1,@1645 3250,1,@1975 3260,0,0 3274,1,@1102 3290,1,@1103 3302,1,@2133 3318,1,@1620 3334,1,@1621 3358,1,@2140 3374,1,@1644 3390,1,@1645 3489,0,@2125 3526,1,@1598 3542,1,@1975 3552,0,0 3566,1,@1102 3582,1,@1103 3594,1,@2133 3610,1,@1620 3626,1,@1621 3642,1,@2140 3666,1,@1598 3676,0,0 3733,0,@2125 3770,1,@1601 3782,1,@1975 3792,0,0 3806,1,@1102 3822,1,@1103 3834,1,@2133 3850,1,@1620 3866,1,@1621 3882,1,@2140 3898,1,@1600 3914,1,@1601 3942,1,@2108 3947,0,0 4001,0,@2125 2071:C2,28|89d883e00583f8017507bf03000000eb05bf0100000089f883f002c3|@2072,41|11,0,1 18,0,0 2072:S31|5354525543545f56414c5328292e74764e6f6e556e69666961626c65283229 2073:C2,576|3b650c7303ff55248b7afc8b75008d76e43b75087303ff5520897500c746fc06000000b988937741890e8b4f04894e148b7af4897e108b4a04894e0c8b4af8894e088946045250538b58048b00e8ae33ffff89c389d883c800e82a34ffff83f801742989f15389d890e84a34ffff5168a87977418b5c240c8b4424088b7c24148b57fc0bc0e83aefffffeb3689d883c800e83e39ffff83f801742589d8e87639ffff505668a879774189da8b5c240c89d08b4c24148b51fc90e806efffffeb0250568b54240c8b5a048b020bc0e8cefeffff83f8017402eb4c8b45008d40f43b45087303ff5520894500c740fc02000000b95496774189088b3c2489780483c800e81e05000089c68b44240889f20bc0ff1289c3b80300000089da90ff1283f8017402eb728b4424088d542414e85a08000083f80174658b4c240c8b59048b0190e85afeffff83f8017407b8e49b7741eb05b8189c77418b7c24108b77fc50ff7604ff77f48b47f88b570490ff1289c38b45008d40f03b45087303ff5520894500c740fc030000008b5424088950088958048b0c24eb0ae919000000e90b00000089088b54240483c420ff22b80100000083c414c38b54240c8b5a048b0283c800e8e627ffff83f8017461684c9c7741bb2ca077418b44240ce896c0ffff83f8ff75498b4c24108b41fcff7004ff71f48b41f88b51040bc0ff1289c78b45008d40f03b45087303ff5520894500c740fc03000000be8ca077418970088978048b1c2489188b542404ff12eb0250508b5c24108b44241483c41ce9b632feff0bc0|@2107,63|36,0,@2074 78,1,@1596 90,1,@1600 106,1,@1601 112,0,@2049 134,1,@2070 146,1,@1616 158,1,@1618 165,0,@2049 186,1,@2070 206,1,@2071 242,0,@2077 258,1,@2081 277,0,1 302,1,@2092 322,1,@2071 332,0,@2094 339,0,@2095 429,0,0 450,1,@1586 460,0,@2096 465,0,@2103 474,1,@1939 533,0,@2106 570,1,@1104 2074:C2,568|3b650c7303ff552483f8017506b801000000c389d689d80bc0e80a32feff83f801746689f189d80bc0e82a32feff8b790489c68b5f048b0790e89635ffff508b5e048b0690e88a35ffff8b1c245323d8f6c3015b7503ff55383bd87d0489daeb0289c2528b5f048b07e8d235ffff83f8017402eb198b5e048b0683c800e8be35ffff83f8017507eb37e9a30100008b5e048b060bc0e80a31ffff89c389d883c800e8d236ffff83f801740e89d8e80a37ffffba01000000eb0cba03000000eb05ba0100000089d78b5e048b0690e80235ffff8b1c24500bc3a801587503ff55383bc37402eb15578b5e048b0690e84e35ffff8b14243bc27503eb70578b5e048b06e83efcffff83f80174455156ff7114ff71108b41088b510c83c800ff1289c28b45008d40f03b45087303ff5520894500c740fc03000000b9dc9577418948088950048b3c2489388b542404ff12eb718b5e048b06e8f625ffff51565050506a01ff7424188d54240ceb05e9a0000000528b5c2424b8c8cc744183c800e8d60bfeff8b45008d40f43b45087303ff5520894500c740fc020000008b0c2489088b7c240489780483c800e86e0cfeff89c689f083c800e86e30feff83f8017417eb05e94e00000089f189c883c800e88630feff89c3eb0db8503d7541ff552cbb010000008b44240889df8b58048b0083c800e8ae2fffff89c389f883c800e89630feff89cb8b44240890e88a30feffeb04515650508b4c240c8b59048b4424080bc0e8da24ffff89c783f70289f883c41cc3b803000000c390|@2076,63|14,0,0 26,1,@1102 42,1,@1103 58,1,@1606 70,1,@1606 106,1,@1608 126,1,@1608 150,1,@1596 162,1,@1616 174,1,@1618 179,0,0 186,0,1 193,0,0 206,1,@1606 238,1,@1608 258,1,@2071 313,0,@2075 342,1,@1586 374,0,@202 382,1,@1003 426,1,@1005 438,1,@1102 462,1,@1103 471,0,@597 479,0,0 498,1,@1596 510,1,@1104 522,1,@1104 546,1,@1584 562,0,1 2075:S44|2854797065207661726961626c65206973206672656520696e20737572726f756e64696e672073636f706529 2076:S57|545950455f5452454528292e747970654d617463682834296d6174636828332961737369676e283229636865636b466f724c6f6f7073283229 2077:C2,44|89c78b45008d40f03b45087303ff5520894500c740fc03000000be9c96774189308b7204897008897804c390|@2080,53|27,0,@2078 2078:C2,16|3b650c7303ff55248b5a048b5208ff22|@2079,63| 2079:S60|545950455f5452454528292e747970654d617463682834296d6174636828332961737369676e283229636865636b466f724c6f6f7073283129283129 2080:S57|545950455f5452454528292e747970654d617463682834296d6174636828332961737369676e283229636865636b466f724c6f6f7073283129 2081:C2,72|8b7d008d7ff43b7d087303ff5520897d00c747fc02000000beb497774189378947048b45008d40f43b45087303ff5520894500c740fc02000000bed09977418930897804c383c800|@2091,49|25,0,@2082 59,0,@2087 2082:C2,296|3b650c7303ff5524525089d890e8a22bffff8b7c2404508b57040bc0ff1289c68b44240489f20bc0ff1289c38b04240bc0e8c62dfeff83f80174248b042483c800e8e62dfeff89d98b58048b00e8262dffff89c389c88b54240883c40ceba18b042483c800e86633ffff83f801741b89d98b042490e88633ffff518b008d542410e8be00000083c410c38b0424e86a3affff83f801742e8b042483c800e88a3affffff3089da8b580489d08b54240c0bc0e84affffff8b1c248b54240c83c410e93bffffff8b042490e8322dffff83f801741f89d98b042490e8522dffff518b40048d54241083c800e8ba00000083c410c38b0424e8e2cbffff83f801740689d883c40cc38b042490e8ae2cffff83f801740689d883c40cc38b042490e86e32ffff89d883c40cc3|@2086,63|14,1,@1595 50,1,@1102 66,1,@1103 78,1,@1596 102,1,@1620 118,1,@1621 130,1,@2083 142,1,@1644 158,1,@1645 202,1,@1600 218,1,@1601 234,1,@2085 246,1,@1975 266,1,@1598 286,1,@1618 2083:C2,48|3b650c7303ff552483f80175048b42f0c352ff308b40040bc0e8e2ffffff8b7c24048b1c248b57fc83c408ff2283c800|@2084,63| 2084:S13|4c6973742e666f6c6472283329 2085:C2,48|3b650c7303ff552483f80175048b42f0c352ff308b40040bc0e8e2ffffff8b14248b4c24048b5a048b51fc83c408ff22|@2084,63| 2086:S31|545950455f5452454528292e666f6c6454797065283129666f6c6454283229 2087:C2,44|89c78b45008d40f03b45087303ff5520894500c740fc03000000be189a774189308b7204897008897804c390|@2090,53|27,0,@2088 2088:C2,16|3b650c7303ff55248b5a048b5208ff22|@2089,63| 2089:S34|545950455f5452454528292e666f6c6454797065283129666f6c6454283129283129 2090:S31|545950455f5452454528292e666f6c6454797065283129666f6c6454283129 2091:S23|545950455f5452454528292e666f6c6454797065283129 2092:C2,204|3b650c7303ff552489d689c389d883c800e8b630ffff83f801747189f189d80bc0e8d630ffffff308b40080bc0e81231ffff500bc0e89ab5ffff83c800e8762affff83f8017409b80300000083c408c38b04240bc0e87ab5ffff89c78b04240bc0e8bab7ffff51578b5c240c90e8d6beffff6a0389c38b44240483c800e8aebfffff83c800e82628ffffeb05e90c0000008b54240483c410e963ffffff89d80bc0e8522afeff83f801741b89f189d80bc0e8722afeff8b59f8e8121fffff89c783f70289f8c3b803000000c3|@2093,63|18,1,@1620 34,1,@1621 46,1,@1622 54,1,@1923 62,1,@1598 72,0,1 86,1,@1923 98,1,@1932 110,1,@1956 126,1,@1958 134,1,@1595 162,1,@1102 178,1,@1103 186,1,@1584 199,0,1 2093:S58|545950455f5452454528292e747970654d617463682834296d6174636828332961737369676e283229636865636b5265616c4572726f72283129 2094:S42|2843616e6e6f7420756e6966792077697468206578706c696369742074797065207661726961626c6529 2095:S44|2854797065207661726961626c6520746f20626520756e6966696564206f636375727320696e207479706529 2096:O1|@2097 2097:C2,624|3b650c7303ff552489c68b5e048b060bc0e86e1effff83f8017406b803000000c38b5e048b0683c800e84af4ffff83f8017406b8ffffffffc38b5e048b0683c800e8c22cffff89c18b5e048b06e8222dffff5050566a036a01508d4424105089cbb8c8cc744183c800e81e04feff8b45008d40f43b45087303ff5520894500c740fc020000008b7c240489388b7424088970040bc0e8b604feff8b1c2489c18b038b7b0489fb83c800e82a28ffff89c689cb8b0424e81229feff89f090e8ea2dffff83f801747189f0e8222effff51bae09e7741ff1283f8017509b8ffffffff83c410c38b580483fb0175708b088b0424e86628feff83f801740d8b042483c800e88628feffeb0fb8503d75410bc0ff552cb80100000089c789c80bc0e8d62effff505089c689c890e83e29feff89fb90e87e29feffeb05e9f200000083f80174308b55008d52f83b55087303ff5520895500c742fc01000040eb05e982000000890a89e1c701ffffffff89e0895004eb0d89e2c7020100000089e08948048b7d008d7ff43b7d087303ff5520897d00c747fc020000008b142489178b4c2404894f048b45008d40f03b45087303ff5520894500c740fc03000000897808897004c7000100000089d9e83a29feff89c389c883c800e8f227feffb80300000083c418c389c18b042490e86e27feff83f801740d8b042483c800e88e27feffeb0fb8503d75410bc0ff552cb80100000089c689c80bc0e83e01000089c389f083c800e8a627feffb80300000083c410c389c8e82627feff83f801741189f389c80bc0e84627feff89da89c3eb0fb8503d75410bc0ff552cbb0100000089d989d389c8e86627feffb80300000083c40cc390|@2102,63|18,1,@1586 28,0,1 42,1,@2071 52,0,-1 66,1,@1606 78,1,@1608 98,0,@202 106,1,@1003 150,1,@1005 170,1,@1596 182,1,@1104 190,1,@1616 202,1,@1618 208,0,@2098 220,0,-1 242,1,@1102 258,1,@1103 265,0,@597 275,0,0 286,1,@1624 298,1,@1109 306,1,@1111 359,0,-1 374,0,0 451,0,0 458,1,@1113 470,1,@1104 475,0,1 490,1,@1102 506,1,@1103 513,0,@597 523,0,0 534,1,@2101 546,1,@1104 551,0,1 562,1,@1102 578,1,@1103 589,0,@597 599,0,0 610,1,@1104 615,0,1 2098:O1|@2099 2099:C2,96|3b650c7303ff552483f8017506b801000000c38b08ff700489c883c800e866b2ffff83f8017431518b44240490e8ceffffff8b7d008d7ff43b7d087303ff5520897d00c747fc020000008947048b3424893789f883c408c38b042483c404eba0|@2100,63|14,0,0 30,1,@1930 2100:S62|545950455f5452454528292e747970654d617463682834296d6174636828332961737369676e28322963616e4d6b4571547628312966696c746572283129 2101:C2,36|89c78b45008d40f43b45087303ff5520894500c740fc02000000897804c70005000000c3|@1617,33|31,0,2 2102:S53|545950455f5452454528292e747970654d617463682834296d6174636828332961737369676e28322963616e4d6b45715476283129 2103:O1|@2104 2104:C2,8|b8ffffffffc30bc0|@2105,1|1,0,-1 2105:S44|545950455f5452454528292e747970654d617463682834296d6174636828332961737369676e283229283129 2106:S24|28526571756972657320657175616c697479207479706529 2107:S41|545950455f5452454528292e747970654d617463682834296d6174636828332961737369676e283229 2108:C2,508|3b650c7303ff552452ff7008ff30ff7308ff338b5b048b40048d542414e8f60100008b7c240883ff0174708b342483fe017402eb6b8b5c240483fb017502eb658b1389d18b7b048b5a048b0290e8fa23ffff89fe89c389d890e87624ffff83f801745d5689d883c800e89624ffff8b50048b45008d40f03b45087303ff5520894500c740fc03000000c7400801000000895004c70003000000eb0fe947000000e938000000e93300000083c800e8be23feff89c389c883c800e88224feffeb0ab834ac77410bc0ff552c8b1c2483c4043b650c7303ff5524e95cffffff8b44242083c414c20c008b342483fe01747183ff017402eb6f8b5c240c83fb017502eb698b1389d18b7b048b5a048b02e83a23ffff89fe89c389d890e8b623ffff83f80174595689d883c800e8d623ffff8b50048b45008d40f03b45087303ff5520894500c740fc03000000c7400801000000895004c70003000000e81223feffeb0fe93e000000e92f000000e92a00000089c389c80bc0e8c623feffeb0ab834ac77410bc0ff552c8b1c2483c4043b650c7303ff5524e961ffffff8b44241c83c414c20c008b54240483fa0175068b5c240ceb1489c18b44240c8d54241490e8ce09000089c389c889c78b45008d40f03b45087303ff5520894500c740fc03000000895808897804c700010000008b74241483c42456e97722feff83c800|@2124,63|30,1,@2109 78,1,@1596 90,1,@1600 106,1,@1601 140,0,0 149,0,1 174,1,@1100 186,1,@1104 193,0,@2121 270,1,@1596 282,1,@1600 298,1,@1601 332,0,0 341,0,1 346,1,@1100 374,1,@1104 381,0,@2121 446,1,@2123 488,0,0 501,1,@1100 2109:C2,1048|3b650c7303ff552483f801757283fb017506b801000000c38b038b7af483ff0174628b72fc8b4efc53ff30ff7104ff720c8b42088b520490ff12508b5c240cb82ca7774190e8766ffdffbb3ca777410bc0e86a6ffdff89c78b45008d40f03b45087303ff5520894500c740fc030000008978088b34248970048b5c2404eb0ae96e000000e90b00000089188b54240890ff12eb56535283fb017502eb4a8b338b1424ff7304ff368b4af883f9017502eb25ff71048b5c24048b018b54240c83c800e8920300008b0c2483c4043b650c7303ff5524ebd48b5c240483c4083b650c7303ff5524ebaf5050508b44241083c414c38b3883fb01756f8b72ec83fe01746c8b5afc8b4bfc50ff37ff7104ff720c8b42088b52040bc0ff12508b5c240cb82ca7774190e8966efdffbb3ca777410bc0e88a6efdff89c78b45008d40f03b45087303ff5520894500c740fc030000008978088b34248970048b5c240489188b54240890ff12eb5ae95d000000505283f8017502eb498b188b1424ff7004ff338b4af083f9017502eb24ff71048b5c24048b018b54240c0bc0e8ba0200008b0c2483c4043b650c7303ff5524ebd58b44240483c4083b650c7303ff5524ebb05050508b44241083c414c38b3352505357ff37ff7704ff700456ff36ff7604ff73048b5c24088b442418e8e61dfeff83f80175568b5c2428ff73048b5c24088b4424188b54242c8b4afc8b51fc90e8e6dbffff8b1c248b4424108b542428e8defdffff8b7d008d7ff43b7d087303ff5520897d00c747fc020000008947048b74241c893789f883c42cc3a8017503ff553883f8017d738b5c24288b53ec83fa01746c8b4bfc8b41fcff7004ff730c8b43088b530490ff12508b5c2424b82ca7774190e83a6dfdffbb3ca777410bc0e82e6dfdff89c78b45008d40f03b45087303ff5520894500c740fc030000008978088b34248970048b5c240489188b54240890ff128b442430eb0ae970000000e90400000083c438c38b4bf083f9017502eb22ff71048b5c241c8b018b54242ce8660100008b0c2483c4043b650c7303ff5524ebd78b5c24208b4424108b54242883c800e8eafcffff8b7d008d7ff43b7d087303ff5520897d00c747fc020000008947048b74241c893789f883c42cc38b5c24288b53f483fa0174698b4bfc8b41fcff7004ff730c8b43088b530490ff12508b5c2414b82ca7774190e8526cfdffbb3ca777410bc0e8466cfdff89c78b45008d40f03b45087303ff5520894500c740fc030000008978088b34248970048b5c240489188b54240890ff128b44242c83c438c38b4bf883f9017502eb22ff71048b5c240c8b018b54242ce88a0000008b0c2483c4043b650c7303ff5524ebd78b1c248b4424248b542428e812fcffff8b7d008d7ff43b7d087303ff5520897d00c747fc020000008947048b74240c893789f883c42cc383c800|@2120,63|19,0,0 64,0,@2110 70,1,@323 75,0,@2111 82,1,@323 194,1,@2112 288,0,@2110 294,1,@323 299,0,@2111 306,1,@323 410,1,@2112 490,1,@1093 526,1,@2070 636,0,@2110 642,1,@323 647,0,@2111 654,1,@323 750,1,@2112 868,0,@2110 874,1,@323 879,0,@2111 886,1,@323 970,1,@2112 2110:S7|284669656c6420 2111:S9|206d697373696e6729 2112:C2,328|3b650c7303ff552489d789c689d98b5e048b060bc0e8f221ffff57508b5e048b06e86213ffff508b5e048b0690e84ae9ffff508b5e048b0690e83a22ffff50505651ff742414ff742414508d442414508b5c2428b8c8cc7441e832f9fdff8b45008d40f43b45087303ff5520894500c740fc020000008b7c240889388b74240c8970040bc0e8caf9fdff8b5d008d5bf43b5d087303ff5520895d00c743fc020000008943048b14248913538b4c24088b59048b0190e8221dffff89c689f083c800e89e1dffff83f801745989f0e8c21dffff8b1883fb0175508b40048d54242490e87e00000089c28b45008d40f03b45087303ff5520894500c740fc03000000c7400801000000895004c7000100000090e8ea1cfeff89c38b44240883c424e9ac1dfeffe9110000008b40048d54242490e8a601000083c424c3b860ab7741ff552cb80100000090|@2119,63|22,1,@1606 34,1,@1586 46,1,@2071 58,1,@1608 85,0,@202 90,1,@1003 134,1,@1005 182,1,@1596 194,1,@1600 206,1,@1601 226,1,@2113 259,0,0 268,0,0 274,1,@1100 288,1,@1104 306,1,@2115 315,0,@2117 323,0,0 2113:C2,260|3b650c7303ff552483f80175258b45008d40f43b45087303ff5520894500c740fc02000000c74004010000008b7adc8938c38b385257ff70048b5ae08b0783c800e8d219feff83f801752a8b75008d76f43b75087303ff5520897500c746fc020000008b1c24895e048b542404891689f083c40cc3a8017503ff553883f8017d348b04248b54240890e872ffffff8b75008d76f43b75087303ff5520897500c746fc020000008946048b5c2404891e89f083c40cc38b7424088b5d008d5bf43b5d087303ff5520895d00c743fc020000008b14248953048b4c2404890b8b45008d40f43b45087303ff5520894500c740fc020000008958048b7edc893883c40cc383c800|@2114,63|40,0,0 66,1,@1093 2114:S78|545950455f5452454528292e747970654d617463682834296d61746368283329756e6966795265636f7264732835296164644669656c64546f47656e65726963283229616464456e747279283129 2115:C2,188|3b650c7303ff552483f8017506b801000000c38b3852ff37ff70048b5ae08b44240483c800e87618feff83f8017509b80100000083c40cc3a8017503ff553883f8017d0c8b04248b54240883c40cebb08b7424088b5efc8b53fc8b4afcff7104ff730c8b43088b530483c800ff12508b5c2410b82ca7774190e80e68fdffbb3ca777410bc0e80268fdff89c78b45008d40f03b45087303ff5520894500c740fc030000008978088b34248970048b5c240489188b54240883c418ff22|@2116,63|14,0,0 38,1,@1093 48,0,0 116,0,@2110 122,1,@323 127,0,@2111 134,1,@323 2116:S82|545950455f5452454528292e747970654d617463682834296d61746368283329756e6966795265636f7264732835296164644669656c64546f47656e65726963283229636865636b456e7472696573283129 2117:O3|@7320,@224,@2118 2118:S40|6164644669656c64546f47656e657269633a204e6f742061206c6162656c6c6564207265636f7264 2119:S67|545950455f5452454528292e747970654d617463682834296d61746368283329756e6966795265636f7264732835296164644669656c64546f47656e65726963283229 2120:S63|545950455f5452454528292e747970654d617463682834296d61746368283329756e6966795265636f7264732835296d617463684c6162656c6c6564283229 2121:O3|@7320,@224,@2122 2122:S36|667265657a6547656e657269633a204e6f742061206c6162656c6c6564207265636f7264 2123:C2,68|3b650c7303ff552483f80175048b42f0c352ff308b40040bc0e8e2ffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0424890289d083c408c3|@1462,5| 2124:S47|545950455f5452454528292e747970654d617463682834296d61746368283329756e6966795265636f726473283529 2125:S20|28496e636f6d70617469626c6520747970657329 2126:C2,192|3b650c7303ff552483f8017506b801000000c352ff30ff70048b42dcf7c00100000075478b308b58048b442404e86a19feff89c189f083c800e85e19feff5389c389c80bc0e812aaffff83f8017407bf03000000eb1b8b042483c4043b650c7303ff5524ebb6bf01000000bf010000005083ff0174378b4424048b54240c83c800e87affffff8b7d008d7ff43b7d087303ff5520897d00c747fc020000008947048b742408893789f883c410c38b4424048b54240c83c410e943ffffff83c800|@2127,63|14,0,0 46,1,@1109 58,1,@1109 70,1,@1946 80,0,1 103,0,0 108,0,0 2127:S44|545950455f5452454528292e747970654d617463682834296d61746368283329696e74657273656374283229 2128:S27|28496e636f6d70617469626c65206f7665726c6f6164696e677329 2129:C2,508|3b650c7303ff5524f7c00100000075718b780483ff01756e8b3089f090e8d21dffff505089c789f090e83a18feff89fb90e87a18feff83f80174298b55008d52f83b55087303ff5520895500c742fc01000040893289e0c700ffffffff89e7895704eb0d89e2c7020100000089e08970048b7d008d7ff43b7d087303ff5520eb0ae9de000000e942000000897d00c747fc020000008b342489378b5424048957048b45008d40f03b45087303ff5520894500c740fc03000000897808895804c7000100000083c408e93718feff5050506a016a016a018d74241056bb1f4e0000b8c8cc7441e89ef1fdff8b45008d40f43b45087303ff5520894500c740fc020000008b5c240489188b5424088950040bc0e836f2fdff89c18b04240bc0e832f0ffff89c689c883c800e82a16feff83f801741189f389c80bc0e84a16feff89da89c3eb0fb8503d75410bc0ff552cbb0100000089d889d30bc0e86a16feff89c883c40cc35050506a016a016a018d7c241057bb1f4e0000b8c8cc744190e806f1fdff8b45008d40f43b45087303ff5520894500c740fc020000008b74240489308b5c24088958040bc0e89ef1fdff89c18b04240bc0e89aefffff89c689c883c800e89215feff83f801741189f389c80bc0e8b215feff89da89c3eb0fb8503d75410bc0ff552cbb0100000089d889d30bc0e8d215feff89c883c40cc3|@2130,63|30,1,@1624 42,1,@1109 50,1,@1111 89,0,-1 104,0,0 193,0,0 201,1,@1113 220,0,9999 225,0,@202 230,1,@1003 274,1,@1005 286,1,@2101 298,1,@1102 314,1,@1103 325,0,@597 335,0,0 346,1,@1104 371,0,9999 376,0,@202 382,1,@1003 426,1,@1005 438,1,@2101 450,1,@1102 466,1,@1103 477,0,@597 487,0,0 498,1,@1104 2130:S28|545950455f5452454528292e6d6b4f7665726c6f6164536574283129 2131:C2,568|3b650c7303ff552489d689c18b59048b01e822e0ffff83f801745a8b46ec83c800e8ca1affff83f8017472568b46ec0bc0e8ea1affffff308b40080bc0e8261bffff89c789f883c800e8de15feff89fe90e81e16feff83f8017402eb1d5689f090e8929fffff83c800e86e14ffff83f8017508eb5ce9a1010000568b5c2408518b43ec8b53040bc0ff1289c189c883c800e85a1affff83f801746beb05e95b01000089c890e8761affff8b088b40080bc0e8b21affff89c789f883c800e86a15feff89fe90e8aa15feff83f8017407eb1ce9c50000005689f0e81a9fffff83c800e8f613ffff83f8017503eb26568b5c24108b43ec8b5304ff1289c38b4424048b542410eb05e96e00000083c414e985dfffff8b5c2410ff73f08b44240483c800e8d29effff89c78b44240490e812a1ffff5789cbe832a8ffff6a0389c38b44240483c800e80aa9ffff83c800e88211ffffbea87977418b5c241c8974241c89da89c38b4424048b4c241889d78b51fc83c41c57e9e3ceffff8b44240c8b78048b70ec89f089fa90ff1289c38b04248b54240c83c410e9fddeffff8b5c24088b4bf08b0424e84e9effff89c78b04240bc0e88ea0ffff51578b5c240c90e8aaa7ffff6a0389c38b44240483c800e882a8ffff83c800e8fa10ffff8b7424108b5e048b542414895c241489c38b44240489d18b56fc83c41451e95fceffff56518b46ec8b560483c800ff1289c38b04248b54240483c408e97ddeffff56518b46ec8b560490ff1289c38b04248b54240483c408e961deffff90|@2132,63|18,1,@2071 34,1,@1620 50,1,@1621 62,1,@1622 74,1,@1109 82,1,@1111 98,1,@1923 106,1,@1598 146,1,@1620 166,1,@1621 178,1,@1622 190,1,@1109 198,1,@1111 218,1,@1923 226,1,@1598 271,1,@2073 290,1,@1923 302,1,@1932 310,1,@1956 326,1,@1958 334,1,@1595 339,0,@2049 373,1,@2070 407,1,@2073 422,1,@1923 434,1,@1932 446,1,@1956 462,1,@1958 470,1,@1595 505,1,@2070 535,1,@2073 563,1,@2073 2132:S34|545950455f5452454528292e747970654d617463682834296d617463682833292f34 2133:C2,508|3b650c7303ff552489d68b58048b000bc0e8a2ddffff83f801745a8b46f083c800e84a18ffff83f801747089f18b41f090e86a18ffffff308b40080bc0e8a618ffff89c789f883c800e85e13feff89fe90e89e13feff83f8017402eb1d5689f090e8129dffff83c800e8ee11ffff83f8017508eb6fe92201000056518b41ec8b51040bc0ff1289c389d883c800e80a12feff83f801742c89d8eb05e99c00000090e82612feff8b1424508b42f08b5204ff1289c38b04248b54240483c410e955ddffff8b1424b9a87977418b44240c894c240c89c78b42f08b52fc83c40c57e9f8ccffff8b04240bc0e88a9cffff89c38b04240bc0e8ca9effff51538b5c240c90e8e6a5ffff6a0389c38b44240483c800e8bea6ffff83c800e8360fffff8b5424048b4a048b7c2410894c24108b5aec8b52fc83c41057e9a0ccffff568b46ec8b560490ff1289c389d883c800e84a11feff83f801742489d8e86e11feff8b1424508b42f08b5204ff1289c38b04248b54240483c408e99ddcffff8b1424b9a87977418b442404894c240489c78b42f08b52fc83c40457e940ccffff568b46ec8b560490ff1289c389d883c800e8ea10feff83f801742489d8e80e11feff8b1424508b42f08b5204ff1289c38b04248b54240483c408e93ddcffff8b1424b9a87977418b442404894c240489c78b42f08b52fc83c40457e9e0cbffff|@2134,63|18,1,@2071 34,1,@1620 50,1,@1621 62,1,@1622 74,1,@1109 82,1,@1111 98,1,@1923 106,1,@1598 142,1,@1102 162,1,@1103 191,1,@2073 199,0,@2049 224,1,@2070 234,1,@1923 246,1,@1932 258,1,@1956 274,1,@1958 282,1,@1595 312,1,@2070 334,1,@1102 346,1,@1103 375,1,@2073 383,0,@2049 408,1,@2070 430,1,@1102 442,1,@1103 471,1,@2073 479,0,@2049 504,1,@2070 2134:S34|545950455f5452454528292e747970654d617463682834296d617463682833292f35 2135:C2,220|3b650c7303ff552483fb01755083f8017506b801000000c38b7afcff7704ff72f48b42f88b520490ff1289c68b45008d40f03b45087303ff5520894500c740fc03000000bb50b677418958088970048b142489108b54240483c408ff22f7c001000000753052ff7304ff700468a87977418b3b8b1889f88b52fc83c800e816cbffff8b5c24048b04248b54240883c40ce96bffffff8b7afcff7704ff72f48b42f88b5204ff1289c68b45008d40f03b45087303ff5520894500c740fc03000000bb50b677418958088970048b142489108b54240483c408ff2283c800|@2137,63|19,0,0 69,0,@2136 109,0,@2049 126,1,@2070 193,0,@2136 2136:S32|28446966666572656e74206e756d62657273206f6620617267756d656e747329 2137:S45|545950455f5452454528292e747970654d617463682834296d617463682833296d617463684c69737473283229 2138:S29|28446966666572656e74207479706520636f6e7374727563746f727329 2139:S35|284f7665726c6f6164696e6720646f6573206e6f7420696e636c756465207479706529 2140:C2,460|3b650c7303ff552489d15089d8e8e614ffff89c789f883c800e89e0ffeff89fe90e8de0ffeff83f8017402eb185689f090e85299ffff83c800e82e0effff83f8017405eb5a56eb578b04240bc0e83699ffff89c38b04240bc0e8769bffff51ff71f0538b5c24100bc0e88ea2ffff6a0389c38b44240483c800e866a3ffff8b5424088b4a048b7c2414894c241489c38b4424048b52fc83c41457e94dc9ffff518b41ec8b51040bc0ff1289c389d883c800e8ca13ffff83f801747389d989c80bc0e8ea13ffffff308b40080bc0e82614ffff89c789f883c800e8de0efeff89fe90e81e0ffeff83f8017409b80100000083c410c35689f00bc0e88a98ffff83c800e8660dffff83f80175668b5c24088b4bf08b0424e86e98ffff89c78b04240bc0e8ae9affff51578b5c240ceb05e9750000000bc0e8c2a1ffff6a0389c38b44240483c800e89aa2ffffbea87977418b5c241c8974241c89da89c38b4424048b4c241089d78b51fc83c41c57e97bc8ffff8b5c24088b53fc8b45008d40f03b45087303ff5520894500c740fc03000000bf08ad77418978088b73f089700489088b520483c414ff228b1424b9a87977418b44240c894c240c89c78b42f08b52fc83c40c57e923c8ffff83c800|@2141,63|14,1,@1622 26,1,@1109 34,1,@1111 50,1,@1923 58,1,@1598 78,1,@1923 90,1,@1932 106,1,@1956 122,1,@1958 155,1,@2070 178,1,@1620 194,1,@1621 206,1,@1622 218,1,@1109 226,1,@1111 236,0,0 250,1,@1923 258,1,@1598 278,1,@1923 290,1,@1932 310,1,@1956 326,1,@1958 331,0,@2049 365,1,@2070 401,0,@2125 428,0,@2049 453,1,@2070 2141:S35|545950455f5452454528292e747970654d617463682834296d617463682833292f3130 2142:S32|545950455f5452454528292e747970654d617463682834296d61746368283329 2143:S24|545950455f5452454528292e747970654d61746368283429 2144:S25|545950455f5452454528292e6d617463685479706573283629 2145:S68|535452554354555245535f28292e6d61746368536967732836296d6174636856616c73283229636865636b5479706573416e64537472756374757265732d283329283129 2146:C2,580|3b650c7303ff552489c789f890e86a12ffff89c689d883c800e85e12ffff5689c189f80bc0e80297ffff5089d8e8fa96ffff8b1424520bd0f6c2015a7503ff55383bd0740bb80100000083c408c2140089d883c800e8ae98ffff50505089f80bc0e88a0cfeff570bc0e8ca0cfeff83f80174308b45008d40f83b45087303ff5520894500c740fc010000408b3c2489388d542408c702ffffffff8d542408894204eb148d442408c700010000008d7c24088b14248957048b45008d40f43b45087303ff5520894500c740fc020000008b7c240889388b54240c89500489c78b45008d40f03b45087303ff5520894500c740fc030000008978088970048b7424048930530bc0e8820cfeff505089c38b44240883c800e8d60bfeff83c800e8160cfeff83f801742d8b55008d52f83b55087303ff5520895500c742fc010000408b442408890289e7c707ffffffff89e6895604eb1189e2c7020100000089e08b7c24088978048b75008d76f43b75087303ff5520897500c746fc020000008b142489168b4424048946048b45008d40f03b45087303ff5520894500c740fc030000008970088948048b7c241089385383c800e8d60bfeff8b75008d76ec3b75087303ff5520897500c746fc04000000bb30bc7741891e8b54243489560c894e088b4c2430894e04ff74243c52ff7424345689c38b44241083c800e8a2bbffff8b44241083c800e846abffff89c18b44240c90e83aabffff83f8017502eb0783f9017402eb0bb80100000083c428c2140089c389c88d5424280bc0e8e200000083c428c21400|@2156,63|14,1,@1624 26,1,@1624 38,1,@1926 46,1,@1926 70,0,0 86,1,@1932 98,1,@1109 106,1,@1111 150,0,-1 169,0,0 262,1,@1113 278,1,@1109 286,1,@1111 329,0,-1 344,0,0 434,1,@1113 463,0,@2147 506,1,@2041 518,1,@1994 530,1,@1994 549,0,0 570,1,@2148 2147:C2,164|3b650c7303ff55248b7a0c5250bbbc1477418b4724ba703d754183c800e83681fdff8b34248b5c240450ff760c8b5b08b820777741e84e56fdffbb387777410bc0e84256fdff8b142483c800ff128b542408b858dc76418b1283c800ff128b4c240c8b45008d40f43b45087303ff5520894500c740fc02000000c74004010000008b790489388b7424088b5c24108974241089da8b5c240483c41052e983e9feff83c800|@2040,63|14,0,@1766 22,0,@599 30,1,@601 49,0,@2038 54,1,@323 59,0,@2039 66,1,@323 83,0,@1666 125,0,0 157,1,@1563 2148:C2,424|3b650c7303ff552483fb01755883f8017506b801000000c3ff720cff7208ff72048b5afcb8b4be7741e89a55fdffbb530000000bc0e88e55fdff8b7c24048b74240c897c240c8b1c248b542408895c240889442404bb0300000089d083c40456e9d354ffff83f801754fff720cff7208ff72048b5afcb8e4be77410bc0e84655fdffbb530000000bc0e83a55fdff8b7c24048b74240c897c240c8b1c248b542408895c240889442404bb0300000089d083c40456e97f54ffff89d78b308b480489f083c800e8323effff508b03e82a3effff57ff33ff730456515089c38b44241883c800ff154094040883f801755c8b442414ff700cff7008ff70048b5c240cb814bf7741e8be54fdffbb34bf77410bc0e8b254fdff8b5c242483c800e8a654fdff8b7c24048b742428897c24288b1c24895c242489442420bb030000008b44240883c42056e9ed53ffff8b4424080bc0e80201000089c78b44241090e8f60000008b74241489c38b45008d40f03b45087303ff5520894500c740fc030000008b54241889500889580489388b561090ff128b5c240c8b4424048b54241483c41ce95afeffff0bc0|@2155,63|19,0,0 37,0,@2149 42,1,@323 47,0,41 54,1,@323 86,0,1 97,1,@1758 119,0,@2150 126,1,@323 131,0,41 138,1,@323 170,0,1 181,1,@1758 198,1,@1690 206,1,@1690 230,0,I24 257,0,@2151 262,1,@323 267,0,@2152 274,1,@323 286,1,@323 314,0,1 327,1,@1758 338,1,@2153 350,1,@2153 2149:S37|546f6f206d616e7920636f6e7374727563746f727320746f206d6174636820747970652028 2150:S39|4e6f7420656e6f75676820636f6e7374727563746f727320746f206d6174636820747970652028 2151:S24|4c6f6f6b696e6720666f7220636f6e7374727563746f7220 2152:S11|2062757420666f756e6420 2153:C2,4|8b400cc3|@2154,1| 2154:S26|5354525543545f56414c5328292e76616c547970654f66283129 2155:S48|535452554354555245535f28292e636865636b54797065436f6e73747273283729636865636b436f6e73747273283229 2156:S33|535452554354555245535f28292e636865636b54797065436f6e73747273283729 2157:S65|535452554354555245535f28292e6d61746368536967732836296d6174636856616c73283229636865636b5479706573416e64537472756374757265732d283329 2158:C2,28|3b650c7303ff55248b78088b3424893c248b58048b008b520456ff22|@2159,63| 2159:S65|535452554354555245535f28292e6d61746368536967732836296d6174636856616c73283229636865636b5479706573416e64537472756374757265732d283129 2160:C2,668|3b650c7303ff552489d15089d8baf83a774183c800e82a7affff83f801745989d8baec3a774183c800e8a27affff8b7804f7c701000000750bb80100000083c404c2040089c68b4114e82a8affff5156ff742408bb70287741e85a6afffff7c00100000075728b1c248b530483fa01750cb903000000eb0ae912020000b9010000008b388b770483fe017509ff30b803000000eb07ff30b80100000083f801755f83f901745a8b4c2408ff710cff7108ff71048b5c2418b878c3774190e83651fdffbb88c377410bc0e82a51fdff8b7c2404897c2420eb05e9610100008b34248b5c241c8974241c8944241889dabb030000008b44240883c41852e96850ffff83f801747083f90175708b0424e876fdffff89c189c883c800e8e201000083f8017407b810c47741eb288b45008d40f43b45087303ff5520894500c740fc02000000bf10c47741897804890890e80e0afeff89c689d883c800e82afdffff8b5c24088b55008d52ec3b55087303ff5520895500eb0ae950000000e94b000000c742fc04000000b930c47741890a8b7b0c897a0c8b4c240c894a088b4b08894a048b7b10897c24148b7b0c8b4c2410897c24108b7b04897c240c8954240889c389f083c40851e9e6b4ffff8b0424e8b6fcffff89c189d883c800e8aafcffff8b5c24088b55008d52ec3b55087303ff5520895500c742fc04000000bff0c47741893a8b730c89720c8b7c240c897a088b7b08897a048b7310897424148b730c8b7c2410897424108b73048974240c8954240889c389c883c40857e972b4ffff8b5c2404ff730cff7308ff73048b5c2414b878c3774190e89e4ffdffbb846777410bc0e8924ffdff8b5424048954241c8b0c248b7c2418894c241889442414bb030000008b44240883c41457e9d94effffb80100000083c404c204000bc0|@2169,63|14,0,@1871 22,1,@1872 34,0,@1870 42,1,@1875 58,0,0 74,1,@1919 85,0,@1802 90,1,@1805 114,0,1 126,0,0 143,0,1 152,0,0 184,0,@2161 190,1,@323 195,0,@2162 202,1,@323 239,0,1 252,1,@1758 270,1,@2153 282,1,@2163 292,0,@2165 323,0,@2165 334,1,@1126 346,1,@2153 391,0,@2167 454,1,@2041 462,1,@2153 474,1,@2153 507,0,@2168 570,1,@2041 592,0,@2161 598,1,@323 603,0,@1997 610,1,@323 638,0,1 651,1,@1758 656,0,0 2161:S7|56616c75652028 2162:S46|29206d75737420626520616e20657863657074696f6e20746f206d6174636820746865207369676e61747572652e 2163:C2,20|8b3883ffff7506b803000000c3b801000000c390|@2164,33|8,0,1 14,0,0 2164:S24|5354525543545f56414c5328292e6973456d707479283129 2165:O4|-3,0,@506,@2166 2166:O2|0,@508 2167:C2,164|3b650c7303ff55248b7a0c5250bbbc1477418b4724ba703d754183c800e83679fdff8b34248b5c240450ff760c8b5b08b820777741e84e4efdffbb387777410bc0e8424efdff8b142483c800ff128b542408b858dc76418b1283c800ff128b4c240c8b45008d40f43b45087303ff5520894500c740fc02000000c74004010000008b790489388b7424088b5c24108974241089da8b5c240483c41052e983e1feff83c800|@2040,63|14,0,@1766 22,0,@599 30,1,@601 49,0,@2038 54,1,@323 59,0,@2039 66,1,@323 83,0,@1666 125,0,0 157,1,@1563 2168:C2,164|3b650c7303ff55248b7a0c5250bbbc1477418b4724ba703d754183c800e87678fdff8b34248b5c240450ff760c8b5b08b820777741e88e4dfdffbb387777410bc0e8824dfdff8b142483c800ff128b542408b858dc76418b1283c800ff128b4c240c8b45008d40f43b45087303ff5520894500c740fc02000000c74004010000008b790489388b7424088b5c24108974241089da8b5c240483c41052e9c3e0feff83c800|@2040,63|14,0,@1766 22,0,@599 30,1,@601 49,0,@2038 54,1,@323 59,0,@2039 66,1,@323 83,0,@1666 125,0,0 157,1,@1563 2169:S66|535452554354555245535f28292e6d61746368536967732836296d6174636856616c73283229636865636b56616c756573416e64457863657074696f6e732d283329 2170:C2,28|3b650c7303ff55248b78088b3424893c248b58048b008b520456ff22|@2171,63| 2171:S66|535452554354555245535f28292e6d61746368536967732836296d6174636856616c73283229636865636b56616c756573416e64457863657074696f6e732d283129 2172:S38|535452554354555245535f28292e6d61746368536967732836296d6174636856616c73283229 2173:S26|535452554354555245535f28292e6d6174636853696773283629 2174:O1|@1908 2175:O2|@2177,@2176 2176:O2|@2187,@2175 2177:C2,372|3b650c7303ff552489d789c689f083c800e87a01000057565350b8150000000bc0e8e2d2feff8b5d008d5bec3b5d087303ff5520895d00c743fc04000000c7430c01000000c74308010000008b1424895304890389c189d890e8e683ffff8b7d008d7ff43b7d087303ff5520897d00c747fc02000000bec4c8774189378947048b55008d52f43b55087303ff5520895500c742fc02000000be30c9774189328942048b75008d76f43b75087303ff5520897500c746fc02000000515350575256b970c97741890e8946048b45008d40f03b45087303ff5520894500c740fc0300000089500889780489308b7c242450ff742420ff74243cff74243cff74243c8b5c2434b8010000008b570490ff128b44242083c800e87600000089c68b44241090e8567bffff89c38b44241090e88e7bffff5653508b442420e87e0100008b55008d52ec3b55087303ff5520895500c742fc040000008b4c2404894a0c8b3c24897a088b742408897204890289d083c434c20c00|@2186,63|18,1,@2178 27,0,10 34,1,@1488 65,0,0 72,0,0 90,1,@1919 119,0,@2180 153,0,@2182 193,0,@2183 260,0,0 278,1,@2178 290,1,@1902 302,1,@1904 314,1,@2184 2178:C2,4|8b4004c3|@2179,1| 2179:S24|5354525543545f56414c5328292e7369674e616d65283129 2180:C2,36|3b650c7303ff55248b388b3424893c24ff7004bbf83977418b420456e9e364ffff83c800|@2181,63|20,0,@1863 29,1,@1814 2181:S36|535452554354555245535f28292e636f70795369672835296c617374416464722d283129 2182:C2,36|3b650c7303ff55248b388b3424893c24ff7004bb103877418b420456e97764ffff83c800|@2181,63|20,0,@1849 29,1,@1814 2183:C2,36|3b650c7303ff55248b388b3424893c24ff7004bb702877418b420456e93764ffff83c800|@2181,63|20,0,@1802 29,1,@1814 2184:C2,204|3b650c7303ff55248b3883ffff75708b70048b1e8b500c8b0a8b3983ff017507b860970408eb5d535157ff7504be06ca7741566a018965046a01bb0100000089f883c800ff15a092040889c6ff7424088f4504eb0e90b8d4b67441ff552cbe0100000056566a01ff742418bb030000008b442420ff15a0a904088b0424eb0ae944000000e91100000083c800ff15209704088b042483c418eb015389c68b45008d40f03b45087303ff5520894500c740fc030000008970088b1c24895804c7000100000083c404c3c383c800|@2185,63|33,0,I49 46,0,$2184+86 59,0,0 70,0,I11 87,0,@78 95,0,0 108,0,1 118,0,I195 142,0,I47 192,0,0 2185:S23|486173685461626c652e68617368467265657a65283129 2186:S24|535452554354555245535f28292e636f7079536967283529 2187:C2,252|3b650c7303ff55248b7d008d7fe83b7d087303ff5520897d00c747fc05000000bef0cb774189378b7424108977108b4c240c894f0c8b4c2408894f088b4c2404894f0452505357ff74241cff74241c5189f38b44241083c800e8920100008b44240483c800e8f67fffff8b7c240c8b75008d76d83b75087303ff5520897500c746fc09000000bbe0cf7741891e8b14248956208b4c2420894e1c8b5c241c895e188b5424188956148b5424148956108b570489560c8b7c2408897e088b5424248956048b7d008d7ff43b7d087303ff5520897d00c747fc02000000ba2ce2774189178977048b7424088974242489fb8b54241083c42452e9849cffff|@2240,63|33,0,@2188 90,1,@2193 102,1,@1919 135,0,@2203 220,0,@2238 248,1,@2002 2188:C2,40|3b650c7303ff55248b7a0c8b3424893c24ff72086834cc7741ff72048b5a1056e9dbadffff83c800|@2192,63|21,0,@2189 33,1,@2052 2189:O1|@2190 2190:C2,4|c383c800|@2191,1| 2191:S46|535452554354555245535f28292e66756c6c436f7079536967283729636f707954797065436f6e73283129283129 2192:S43|535452554354555245535f28292e66756c6c436f7079536967283729636f707954797065436f6e73283129 2193:C2,136|3b650c7303ff552490e8627effff8b55008d52e43b55087303ff5520895500c742fc06000000b96ccd7741890a895a148b5c240c895a108b4c2408894a0c8b7c2404897a08be40cf77418972048b75008d76f43b75087303ff5520897500c746fc02000000bf48cf7741893e895604c744240c0100000089f38b342483c40c56e90b9bffff83c800|@2202,63|10,1,@1919 39,0,@2194 70,0,@2199 102,0,@2200 115,0,0 129,1,@2002 2194:C2,288|3b650c7303ff552489d15089d8ba2c38774183c800e8b26affff83f801746d89d8ba2038774183c800e82a6bffff83f801753f51b815000000e852ccfeff8b75008d76ec3b75087303ff5520897500c746fc04000000c7460c01000000c7460801000000bb40970408895e04890689f7eb048b7808518b342457ff7614ff7610ff760c8b5c24148b4608eb05e93f000000e8b644fdffbb5d0000000bc0e8aa44fdff8b5c24108b5424048954241c8b0c248b7c2418894c2418894424148b73048b5c24088b44240c89f283c41457ff2289d8ba143a77410bc0e8d66bffff83f801743289d8ba083a774183c800e84e6cffffff7110ff710c68a8ce7741ff71088b59140bc0e87aabffffb80100000083c404c20400b80100000083c404c20400|@2198,63|14,0,@1851 22,1,@1852 34,0,@1850 42,1,@1855 53,0,10 58,1,@1488 89,0,0 96,0,0 101,0,I48 146,1,@323 151,0,46 158,1,@323 211,0,@1865 218,1,@1866 230,0,@1864 238,1,@1869 249,0,@2195 262,1,@2052 267,0,0 278,0,0 2195:O1|@2196 2196:C2,4|c383c800|@2197,1| 2197:S55|535452554354555245535f28292e636f707954797065436f6e7374727563746f7273283529636f707954797065436f6e73283129283129 2198:S40|535452554354555245535f28292e636f707954797065436f6e7374727563746f7273283529283329 2199:O1|@2193 2200:C2,28|3b650c7303ff55248b78088b3424893c248b58048b008b520456ff22|@2201,63| 2201:S40|535452554354555245535f28292e636f707954797065436f6e7374727563746f7273283529283129 2202:S37|535452554354555245535f28292e636f707954797065436f6e7374727563746f7273283529 2203:C2,1396|3b650c7303ff552489d15089d8ba2c38774183c800e83e68ffff83f801747089d8ba2038774183c800e8b668ffff83f80175435150b81500000083c800e8dac9feff8b75008d76ec3b75087303ff5520897500c746fc04000000c7460c01000000c7460801000000bb40970408895e04890689f7eb058b780851508b74240457ff761cff7618ff76148b5c2418eb05e9020100008b46100bc0e83a42fdffbb5d0000000bc0e82e42fdff8b5c2414ff742404ff742404508b530c8b5c24148b4424180bc0ff1289c18b44241090e8be04000083c800e81205000083f80174318b4424100bc0e8a604000083c800e84e0500008b7c24148b770889c323def6c3017503ff55388d58ff03de70f689d8eb048b44242089c78b44241083c800e87a050000575789cb83c800e8be0500008b7424188b5e0489c28b45008d40f43b45087303ff5520894500c740fc020000008950048b4c241c89088b530890ff128b0424a8017503ff553889c783c70270f68b7424245723fef7c7010000005f7503ff55383bf77e0889f083c420c2040089f883c420c2040089d8ba143a7741e89e68ffff83f80174758b45008d40f83b45087303ff5520894500c740fc010000408b7c240889385089d8ba083a7741e8fa68ffff5150ff7118ff71146834cc7741ff71108b591ce826a8ffff8b34243bc67507bb03000000eb05bb0100000089da83f2028b4d008d49f83b4d087303ff5520894d00c741fc01000040eb05e970010000891189c789f00bc0e8ca80ffff89c389f883c800e8be80ffff570bc0e83e0500008b55008d52f43b55087303ff5520895500c742fc02000000bf34d87741893a894204528b442408e8d294ffff518d54241c0bc0e8c20600008b34248b1e83fb01746089c18b44240883c800e8ae94ffff83f80174528b4424080bc0e8caf9feff89c78b44240890e84a80ffff89c68b44240890e826f4fdff5756508b442414e8ca7effff5168c8cc7441ff742408506a018b5c24188b44241c0bc0e86ea9ffffeb0de9470000008b44240850505051508b5c240483c800e8ee0d00008b4424248b78048b45008d40f43b45087303ff5520894500c740fc020000008b34248970048b5c242c89188b5704ff12eb378b5424108b4a048b45008d40f43b45087303ff5520894500c740fc020000008b7c24088978048b74241889308b510490ff1250505050508b5c24288b138b4c24345123caf6c101597503ff55383bca7e0889c883c430c2040089d083c430c2040089d8baf83a774190e88667ffff83f801746a89d8baec3a774183c800e8fe67ffff8b78088b3783fe01755f5150ff7704ff30ff7004ff700cff7120bba8e177418b442404e8468cffff8b5c24148b54240c8b4b0889d723f9f7c7010000007503ff55388d7aff03f970f6520bd7f6c2015a7503ff55383bd77407eb13e9560100008b34243bc67507eb53e9b40000008b55008d52f43b55087303ff5520895500c742fc02000000897a04c702010000008b75008d76ec3b75087303ff5520897500c746fc0400000089460c8956088b5424048956048b4424088906eb048b7424108b53048b45008d40f43b45087303ff5520894500c740fc020000008970048b7424088930578b1283c800ff128b1c24f6c3017503ff553889da83c20270f68b4c24245123caf6c101597503ff55383bca7e0889c883c420c2040089d083c420c20400515057ff30ff7004ff700cff7120bba8e177418b4424040bc0e82e8bffff8b1c243bc374338b4d008d49ec3b4d087303ff5520894d00c741fc0400000089410c8b44240c8941088b7c24048979048b742408893189caeb048b5424108b4c24148b41048b388b45008d40f43b45087303ff5520894500c740fc020000008950048b742408893089faff128b44242083c41cc204008b44240883c404c204000bc0|@2237,63|14,0,@1851 22,1,@1852 34,0,@1850 42,1,@1855 54,0,10 62,1,@1488 93,0,0 100,0,0 105,0,I48 154,1,@323 159,0,46 166,1,@323 206,1,@2204 214,1,@2206 230,1,@2204 238,1,@2208 286,1,@2210 298,1,@2212 409,0,@1865 414,1,@1866 457,0,@1864 462,1,@1869 475,0,@2189 486,1,@2052 498,0,1 505,0,0 554,1,@1932 566,1,@1932 574,1,@2214 603,0,@2216 618,1,@1994 630,1,@2218 654,1,@1994 670,1,@1624 682,1,@1932 694,1,@1109 706,1,@1930 712,0,@202 734,1,@2056 762,1,@2230 916,0,@1871 922,1,@1872 934,0,@1870 942,1,@1875 973,0,@2234 982,1,@1969 1085,0,0 1251,0,@2234 1262,1,@1969 2204:C2,24|83f801750eb8503d754190ff552cb8010000008b4004c390|@2205,1|6,0,@597 15,0,0 2205:S29|5354525543545f56414c5328292e737472756374416363657373283129 2206:C2,20|8b3883ff017506b803000000c3b801000000c390|@2207,33|8,0,1 14,0,0 2207:S25|5354525543545f56414c5328292e6973466f726d616c283129 2208:C2,28|8b3883ff0175048b4004c3b8503d754183c800ff552cb80100000090|@2209,33|12,0,@597 23,0,0 2209:S25|5354525543545f56414c5328292e7661466f726d616c283129 2210:C2,16|83f8017506b840970408c38b00c30bc0|@2211,1|6,0,I48 2211:S27|5354525543545f56414c5328292e7374727563744e616d65283129 2212:C2,76|8b7d008d7ff43b7d087303ff5520897d00c747fc020000008b742404897704c707010000008b55008d52f03b55087303ff5520895500c742fc03000000895a08897a04890289d0c204000bc0|@2213,61|33,0,0 2213:S33|5354525543545f56414c5328292e6d616b65466f726d616c537472756374283329 2214:C2,128|3b650c7303ff5524f7c301000000755cf7c00100000075598b7d008d7ff43b7d087303ff5520897d00c747fc020000008b308977048b138917578b5b048b400490e8baffffff8b7d008d7ff43b7d087303ff5520897d00c747fc020000008947048b3424893789f883c404c3e906000000b801000000c3b801000000c383c800|@2215,61|114,0,0 120,0,0 2215:S45|535452554354555245535f28292e66756c6c436f70795369672837292833297a69705479706556617273283229 2216:C2,148|3b650c7303ff5524508b7a0483ff0175078b042483c404c38b178b0a8b72048b5f048b0424e852edfdff83f801743f568b44240490e872edfdff89c689c883c800e836edfdff83f801741e5689c883c800e856edfdff89d989c38b0424e8f2e1feff83f8017415eb0b89d950eb0e5689d950eb088b44240483c40cc389cf83c4083b650c7303ff5524eb81b80100000083c40cc3|@2217,63|38,1,@1102 54,1,@1103 66,1,@1102 82,1,@1103 94,1,@1584 140,0,0 2217:S45|535452554354555245535f28292e66756c6c436f7079536967283729283329636f707954797065566172283129 2218:C2,512|3b650c7303ff552483f8017506b801000000c38b388b72f45257ff7004ff37ff7704ff7708ff770cff76208b5ae88b44240483c800e8aa86ffff8b1c243bc37507ba03000000eb05ba0100000089d183f10250508b7c240c8b3783fe01755a8b5c24208b53f48b77048b7a0889f323dff6c3017503ff55388d5eff03df70f68b742420f6c3017503ff553889da83c20270f68b7c2420505153ff76f852ff77f88b34248b3e5223d7f6c2015a7503ff55383bd77e0989d6eb07e95800000089fe8b54240889328b7d008d7ff43b7d087303ff5520897d00c747fc02000000895f04c707010000008b7424388b5ef48b530883fa017507b803000000eb05b80100000089c183f1028d44241889388d7c2418894f04eb1389e3893b89e2c74204010000005051505050508b4c241083f9017402eb0b8b44241c83f8017502eb5b8b7d008d7fec3b7d087303ff5520897d00c747fc040000008b74241489770c8b5c2418895f088b5424288957048b44242c89075789f8e8a200000089c68b46080bc0e8ca05000083f80174148b460883c800e8fa05000089f0eb0fe9050000008b0424eb058b442434508b7c241483ff017402eb0b8b74242083fe017502eb0d8b74243c8b5ee4c70303000000508b4424388b542440e826feffff8b5d008d5bf43b5d087303ff5520895d00c743fc020000008943048b1424891389d883c444c3|@413,63|14,0,0 54,1,@1969 66,0,1 73,0,0 227,0,0 247,0,1 254,0,0 287,0,0 374,1,@2219 386,1,@2227 402,1,@2229 456,0,1 2219:C2,336|3b650c7303ff552489c789f890e8fee3ffff89c689f883c800e89620ffff89fb89c189f090e84ef7feff83f80174395689f083c800e86ef7feff8b0424e836f7feff83f801740f8b042483c800e856f7feff89c7eb0db8503d7541ff552cbf010000008b4704eb0389f05689c689f00bc0e8d6effeff83f801740f5389f083c800e8f6effeff89c2eb0db8503d7541ff552cba010000008b420883c800e822f0feff83c800e83e8bffff5183f8017507b901000000eb588b388b700489f883c800e8ee1fffff57568b5c2408ff154094040883f80174208b4d008d49f83b4d087303ff5520894d00c741fc010000008b5c24048919eb158b042483c4083b650c7303ff5524eba4b90100000083c408f7c101000000752f8b01e8f2e2ffffff3189c38b44240cbaa4dc77410bc0e85200000083f80174078b042483c410c38b44240883c410c38b44240483c40cc30bc0|@2226,63|14,1,@2153 26,1,@1690 38,1,@1644 54,1,@1645 62,1,@1644 78,1,@1645 87,0,@597 95,0,0 114,1,@1620 130,1,@1621 139,0,@597 147,0,0 158,1,@1622 166,1,@1994 177,0,0 194,1,@1690 206,0,I24 264,0,0 282,1,@2153 295,0,@2220 302,1,@2222 2220:O2|@2222,@2221 2221:O2|@2224,@2220 2222:C2,632|3b650c7303ff552489d689c189d883c800e8b2eefeff83f80174715689d883c800e8d2eefeff89c689c883c800e896eefeff83f801745a5689c883c800e8b6eefeff8b1c2489c18b430883c800e8eeeefeff83c800e8aae9fdff508b410883c800e8daeefeff83c800e896e9fdff5189c38b442404e84a7affff83f80174688b4424088b3c248b378b18eb0ae988000000e97a00000083fb01751783fe017509b80300000083c410c3b80100000083c410c3f7c6010000007544ff7304ff76048b1b8b068b54241490e832ffffff83f80174228b5c24048b342483c4083b650c7303ff5524eba3e91b000000b80100000083c418c3b80100000083c418c3b80100000083c410c3b80100000083c410c3b80100000083c404c389d80bc0e8d2f4feff83f801745e5689d883c800e8f2f4feff89c689c883c800e8b6f4feff83f801744789f389c80bc0e8d6f4feff53508b1b8b008b54240890e8a2feffff83f80174198b5424048b0c248b5a048b41048b54240883c40ce984feffffb80100000083c40cc3e909000000b80100000083c404c389d8e85ee7feff83f801745c5689d883c800e87ee7feff89c689c883c800e842e7feff83f80174455689c883c800e862e7feff8b1c248b1383fa0174228b0883f90174128b7c24048b5b048b40048b570483c408ff22b80100000083c408c3b80100000083c408c3e909000000b80100000083c404c389d80bc0e8e2e6fdff83f801743489d8e806e7fdff89c689c883c800e8cae6fdff83f801741689f389c80bc0e8eae6fdff89da89c389d0e987dbfeffb801000000c389d8e88285ffff83f801740789c8e97685ffff89d890e84ee6feff83f801740789c8e942e6feffb801000000c3|@2223,63|18,1,@1620 34,1,@1621 46,1,@1620 62,1,@1621 78,1,@1622 86,1,@1109 98,1,@1622 106,1,@1109 118,1,@1946 161,0,1 170,0,0 237,0,0 246,0,0 255,0,0 264,0,0 273,0,0 286,1,@1644 302,1,@1645 314,1,@1644 330,1,@1645 381,0,0 395,0,0 406,1,@1600 422,1,@1601 434,1,@1600 450,1,@1601 490,0,0 499,0,0 513,0,0 526,1,@1102 538,1,@1103 550,1,@1102 566,1,@1103 577,1,@1584 582,0,0 590,1,@1975 602,1,@1975 610,1,@1598 622,1,@1598 627,0,0 2223:S25|545950455f5452454528292e657175616c5479706573283229 2224:C2,136|3b650c7303ff552483fb01751183f8017506b803000000c3b801000000c3f7c001000000755b8b3b8b305257ff730456ff70048b1e8b0790ff154094040883f80174358b5c240c8b5424048b4c24108b5b048b42048b5104ff1283f80174108b5c24088b04248b54241083c414eb91b80100000083c414c3b80100000083c414c3b801000000c390|@2225,63|19,0,1 25,0,0 58,0,I24 112,0,0 121,0,0 130,0,0 2225:S31|545950455f5452454528292e657175616c5265636f72644c69737473283229 2226:S35|545950455f5452454528292e66696e6456616c7565436f6e7374727563746f72283129 2227:C2,20|8b3883ffff7506b803000000c3b801000000c390|@2228,33|8,0,1 14,0,0 2228:S6|476c6f62616c 2229:C2,4|8b4004c3|@2228,1| 2230:C2,100|8b78108b1783fa0175058b7704eb078b77048b0e89ce8b4d008d49f03b4d087303ff5520894d00c741fc030000008959088b5e048959048b1689118b78108b1f83fbff750e8b50108b7204890eb801000000c3b84ce1774183c800ff552cb80100000090|@2233,63|78,0,0 84,0,@2231 95,0,0 2231:O3|103,@349,@2232 2232:S24|41737369676e6d656e7420746f2066726f7a656e20726566 2233:S34|5354525543545f56414c5328292e7463536574436f6e7374727563746f7273283229 2234:O1|@2235 2235:C2,4|c383c800|@2236,1| 2236:S41|535452554354555245535f28292e66756c6c436f7079536967283729636f7079547970283129283129 2237:S31|535452554354555245535f28292e66756c6c436f7079536967283729283329 2238:C2,28|3b650c7303ff55248b78088b3424893c248b58048b008b520456ff22|@2239,63| 2239:S31|535452554354555245535f28292e66756c6c436f7079536967283729283129 2240:S28|535452554354555245535f28292e66756c6c436f7079536967283729 2241:C2,36|3b650c7303ff55248b7a0852508b570cff128b7424048b5e048b04248b530c83c408ff22|@2242,63| 2242:S67|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973747275637456616c75652835296e6577456e762d283129 2243:C2,36|3b650c7303ff55248b7a0852508b5704ff128b7424048b5e048b04248b530483c408ff22|@2242,63| 2244:C2,36|3b650c7303ff55248b7a0852508b571cff128b7424048b5e048b04248b531c83c408ff22|@2242,63| 2245:C2,252|3b650c7303ff55248b7a0c5250ff30ff70048b570883c800ff128b34248b460890e8f200000083f801741e8b460883c800e8260100008b5c240c8b53048b4424088b520883c410ff2289f00bc0e82a01000089c383f3028b54240c8b4a088b018b7a048b5d008d5bf43b5d087303ff5520895d00c743fc02000000894304c703010000008b4d008d49ec3b4d087303ff5520894d00c741fc040000008b560c89510c8959088b5e048959048b5c24048919508b45008d40f43b45087303ff5520894500c740fc0200000089480489188b57080bc0ff128b5424108b0c24f6c1017503ff553889c883c00270f68b7a088907b80100000083c414c30bc0|@2242,63|34,1,@2246 50,1,@2248 78,1,@2249 128,0,0 242,0,0 2246:C2,20|8b3883fffd7506b803000000c3b801000000c390|@2247,33|8,0,1 14,0,0 2247:S10|4f7665726c6f61646564 2248:C2,4|8b4004c3|@2247,1| 2249:C2,36|8b7804f7c7010000007506b803000000c383ff017506b803000000c3b801000000c30bc0|@2250,33|12,0,1 23,0,1 29,0,0 2250:S30|5354525543545f56414c5328292e6973436f6e7374727563746f72283129 2251:C2,204|3b650c7303ff55248b7a0c52ff30ff70048b5724ff128b1c2483fb017540b8150000000bc0e832b4feff8b55008d52ec3b55087303ff5520895500c742fc04000000c7420c01000000c7420801000000b940970408894a04890289d6eb038b73088b5424088b4a048b018b7a0850ff77245089f38b44241090e8aef0ffff89c68b45008d40f43b45087303ff5520894500c740fc020000008970048b5c240c89188b1424ff128b5424108b4c2404f6c1017503ff553889c883c00270f68b7a048907b80100000083c414c390|@2242,63|31,0,10 38,1,@1488 69,0,0 76,0,0 81,0,I48 122,1,@2212 195,0,0 2252:C2,44|3b650c7303ff552452508b520883c800ff1283f801750f8b7c24048b04248b570483c408ff2283c408c30bc0|@950,63| 2253:C2,44|3b650c7303ff552452508b520883c800ff1283f801750f8b7c24048b04248b570483c408ff2283c408c30bc0|@950,63| 2254:C2,44|3b650c7303ff552452508b520883c800ff1283f801750f8b7c24048b04248b570483c408ff2283c408c30bc0|@950,63| 2255:O1|@2256 2256:C2,8|b801000000c30bc0|@2242,1|1,0,0 2257:C2,44|3b650c7303ff552452508b520883c800ff1283f801750f8b7c24048b04248b570483c408ff2283c408c30bc0|@950,63| 2258:C2,44|3b650c7303ff552452508b520883c800ff1283f801750f8b7c24048b04248b570483c408ff2283c408c30bc0|@950,63| 2259:C2,44|3b650c7303ff552452508b520883c800ff1283f801750f8b7c24048b04248b570483c408ff2283c408c30bc0|@950,63| 2260:O1|@2261 2261:C2,8|b801000000c30bc0|@2262,1|1,0,0 2262:S69|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973747275637456616c75652835296c6f63616c456e762d283129 2263:O3|@7320,@224,@2264 2264:S24|73747275637456616c75653a206e6f7420612076616c7565 2265:C2,248|3b650c7303ff552452508b3883fff575728b5afc8b4d008d49ec3b4d087303ff5520894d00c741fc04000000be24ea774189318b73fc89710c8941088b7c24108979048b5424148b7424048b5efc8b7bf88b722c89742414be64ea774189742410be746c76418974240c8b77048b5c240889742408894c240489d98b5a148b4004eb05e90900000083c40451e96757ffff53ff742414ff7424148b5c24208d54241483c800e8860100008b7424088b5efc8b55008d52ec3b55087303ff5520895500c742fc04000000b9c0ff7c41890a8b7bfc897a0c8b4c2404894a088b4c2414894a04895424188b1c248b7c240c83c41857e9f8150500|@4811,63|45,0,@2266 89,0,@2267 98,0,@1409 141,1,@1894 166,1,@2270 202,0,@4791 244,1,@4792 2266:C2,36|3b650c7303ff55248b7a088b3424893c24ff720450bb030000008b420c56e9e127ffff90|@1796,63|22,0,1 31,1,@1758 2267:O1|@2268 2268:C2,100|3b650c7303ff552483f8017541b81500000083c800e876affeff8b75008d76ec3b75087303ff5520897500c746fc04000000c7460c01000000c7460801000000bb40970408895e04890689f7eb038b780889f8ba5028774190e8b63dffff8b4014c30bc0|@2269,63|14,0,10 22,1,@1488 53,0,0 60,0,0 65,0,I48 84,0,@1801 90,1,@1803 2269:S73|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296c6f6f6b5369672832296c6f6f6b7570466e283129 2270:C2,704|8d7c24a03b7d0c7303ff55288b3083fef575058b7804eb05bf4097040852505357b81500000083c800e88eaefeff8b5d008d5bec3b5d087303ff5520895d00c743fc04000000c7430c01000000c74308010000008b14248953048903505389d8ba50287741e8d63cffff8b4c24148b79fc8b77fc8b5d008d5bec3b5d087303ff5520895d00c743fc04000000ba1cee774189138b56fc89530c8b4c2410894b088b4c2420894b048b4d008d49ec3b4d087303ff5520894d00c741fc04000000bfb8ef7741893989590c8b78188979088b70088971048b55008d52ec3b55087303ff5520895500c742fc04000000bf68f07741893a895a0c8b7820897a088b780c897a048b75008d76ec3b75087303ff5520897500c746fc04000000bfb4f07741893e895e0c8b782c897e088b7824897e048b7d008d7fec3b7d087303ff5520897d00c747fc040000005053ff7018ff7020ff7010ff702cff7014ff7028515256ff3057b8f4f077418907895f0c8b4424208947088b5c2404895f048b5c24308b45008d40ec3b45087303ff5520894500c740fc04000000b944f1774189088b4c242c89480c8b4b148948088b53048950048b7424308b7d008d7fec3b7d087303ff5520897d00c747fc04000000ba84f1774189178b54242c89570c8b56288957088b4e1c894f048b5d008d5bcc3b5d087303ff5520895d00c743fc0c0000008b4c241c894b2c8b4c2414894b288b4c2408894b248b4c2424894b20897b1c8b7c2428897b188b4c2418894b148b7c2420897b108b4c240c894b0c8b7c2410897b088943048b0c24890bff742440ff742458ff7424586a018b4424548b5424580bc0e81e0400008b44243483c800e8be55ffff89c78b44243490e8f655ffff57508b44244090e8e6dbffff8b75008d76ec3b75087303ff5520897500c746fc040000008b5c2404895e0c8b14248956088b4c2444894e04890689f083c454c20800|@4790,63|25,0,I48 34,0,10 42,1,@1488 73,0,0 80,0,0 97,0,@1801 102,1,@1803 141,0,@2271 192,0,@2274 238,0,@2277 284,0,@2279 356,0,@2280 408,0,@2282 462,0,@2283 610,1,@2284 622,1,@1902 634,1,@1904 646,1,@2184 2271:C2,248|3b650c7303ff55248b7a0c525053bbcc9f75418b4724ba703d75410bc0e84a4ffdff83f80174328b45008d40f43b45087303ff5520894500c740fc020000008b34248970048b5c240489188b5424108b4c240c83c41c51ff228b4424048b54241483c800ff12f7c00100000075588b742408ff760cff7608ff7604bb1c2175418b44242490e81224fdff8b5c241083c800e80624fdffbb30ef77410bc0e8fa23fdff8b5c2404895c24248b1424895424208944241cbb030000008b44240883c418e94623ffff8b45008d40f43b45087303ff5520894500c740fc020000008b34248970048b5c240489188b5424108b4c240c83c41c51ff22|@2273,63|15,0,@995 23,0,@599 30,1,@601 124,0,@377 134,1,@323 146,1,@323 151,0,@2272 158,1,@323 182,0,1 194,1,@1758 2272:S39|2920697320616c72656164792070726573656e7420696e2074686973207369676e61747572652e 2273:S79|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c28352973696756616c7565283429636865636b416e64456e746572283529 2274:C2,36|3b650c7303ff5524bff8ef77418b3424893c24ff7208ff72048b58048b008b520c56ff22|@2276,63|9,0,@2275 2275:S5|56616c7565 2276:S88|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c28352973696756616c7565283429636865636b416e64456e746572283129283129283129283129 2277:C2,36|3b650c7303ff5524bfa8f077418b3424893c24ff7208ff72048b58048b008b520c56ff22|@2276,63|9,0,@2278 2278:S4|54797065 2279:C2,36|3b650c7303ff5524bf482777418b3424893c24ff7208ff72048b58048b008b520c56ff22|@2276,63|9,0,@1797 2280:C2,36|3b650c7303ff5524bf34f177418b3424893c24ff7208ff72048b58048b008b520c56ff22|@2276,63|9,0,@2281 2281:S6|466978697479 2282:C2,36|3b650c7303ff5524bf746c76418b3424893c24ff7208ff72048b58048b008b520c56ff22|@2276,63|9,0,@1409 2283:C2,36|3b650c7303ff5524bff84077418b3424893c24ff7208ff72048b58048b008b520c56ff22|@2276,63|9,0,@1893 2284:C2,1104|8d7c24ac3b7d0c7303ff55288b3883fff5756f8b72fc8b4efc8b7d008d7fec3b7d087303ff5520897d00c747fc04000000be30f6774189378b71fc89770c8b4af8894f088b74240c8977048b4a0c8b72fc5253ff700457ff7114ff712cff76fc8b04248b70f8ff7424046864ea774168746c7641ff7604578b5c241c8b442424eb05e9df0000000bc0e8b64effff89c389d883c800e81251ffff89c189d883c800e84a51ffff5050538d7c24045789c389c883c800e87a51ffff8b75008d76f43b75087303ff5520897500c746fc020000008b5c2404891e8b5424088956045050508b4c242c89e08b7908893889e38b510c89530489e08b59248958088b45008d40f03b45087303ff5520894500c740fc030000008b142489108b5424048950048b5424088950088b5424388b5c243c89442444b8d4c6774189442440b870f677418944243c897424388b742434895c24348b5c240c89d0bae8c6774183c43456e9aed7ffff83fff775485352508b70048b4c241083fe01750889c883c40cc21000ff7604ff74241c89cb8b068d542414e8a603000089c18b342483c4043b650c7303ff5524ebcdb80100000083c410c2100083ffef75728b7004505050525053ff36ff7604ff7608ff760cff76108d5c2420b80100000090e8de95fdff50505089e3b80100000090e8ce95fdff8b5c24208b5424488b4d008d49ec3b4d087303ff5520894d00c741fc04000000b8c0f37c4189018b7c243489790c8b73208971088b4220894104eb05e9110200008b7d008d7fec3b7d087303ff5520897d00c747fc04000000be20f47c4189378b74240889770c8b732c8977088b422c8947048b7424208b55008d52cc3b55087303ff5520895500c742fc0c000000897a2c8b46288942288b7c2404897a24894a208b4e1c894a1c8b7b18897a188b7e14897a148b7b10897a108b5c2430895a0c8b7e08897a088b5e04895a048b068902ff742448ff742448ff742448ff74244889d38b4424288b542438e822fdffff8b7c24288b77fc8b5efc8b55008d52ec3b55087303ff5520895500c742fc04000000b980f47c41890a8b4c2424894a0c8b4c241c894a088b4bfc894a0450ff74240c6890047841683c0578416890c67541528b5c244c8b44242c90e8064cffff8b7c242c8b77fc8b5efc8b55008d52e43b55087303ff5520895500c742fc06000000b940f57c41890a8b4c2424894a148b4c244c894a108b7c2428897a0c8b7c2420897a088b7bfc897a048b74242c8b5efc8b7bfc50ff77fcff74242889d38b44241ce89a100000b8010000000bc0e802010000ff742414506a016a018b5c24288b44242c0bc0e8a286ffff8b7424308b5efc8b53fc8b4d008d49ec3b4d087303ff5520894d00c741fc04000000bf70f77c4189398b7afc89790c8b74242c8971088b7424248971045189c38b44240483c800e8d60105008b5c24288b430c8b54243483c800ff128b5424288b42248b54240883c800ff128b44240483c440c21000b8ecfe7c410bc0ff552cb80100000090|@4789,63|50,0,@2285 107,0,@2267 112,0,@1409 138,1,@1894 150,1,@1902 162,1,@1904 182,1,@1906 309,0,@2174 318,0,@2286 345,0,@2176 354,1,@2187 402,1,@2289 425,0,0 468,0,0 474,1,@937 484,0,0 490,1,@937 527,0,@4765 584,0,@4766 769,0,@4767 801,0,@2298 806,0,@2301 811,0,@1107 826,1,@1894 865,0,@4769 930,1,@2308 935,0,0 942,1,@2287 966,1,@2056 1005,0,@4774 1042,1,@4775 1089,0,@4787 1099,0,0 2285:C2,36|3b650c7303ff55248b7a088b3424893c24ff720450bb030000008b420c56e9d51bffff90|@1796,63|22,0,1 31,1,@1758 2286:O1|@2287 2287:C2,68|8b45008d40f83b45087303ff5520894500c740fc01000040bf08cd7441893889c78b45008d40f43b45087303ff5520894500c740fc02000000897804c700fdffffffc390|@2288,33|25,0,@207 62,0,-2 2288:S31|5354525543545f56414c5328292e6d616b655661726961626c654964283129 2289:C2,2192|3b650c7303ff55248b3883ff0f75195289de8b580489f08d5424040bc0e88a08000083c404c2040083ff1175738b72f88b4efc8b79fc8b75008d76ec3b75087303ff5520897500c746fc04000000b9f8027841890e8b4ffc894e0c8946088b4804894e048b4d008d49ec3b4d087303ff5520894d00c741fc04000000525053ff7004ff7008ff700cff77fc56ff7210ff72fc51bf3803784189398b542404eb05e9ba01000089510c8b7c24088979088971048b7424288b56f88b7afc8b47fc8b58fcff7324bbcc9f75418b0424ba703d754183c800e8ae45fdff83f8017402eb60bbfccc74418b44241c0bc0ff154094040883f8017402eb62bbd01d75418b44241c0bc0ff154094040883f8017402eb4abbb40578418b44241c0bc0ff154094040883f8017402eb32bbc00578418b44241c0bc0ff154094040883f8017407eb1ae948000000bbcc0578418b44241c90ff154094040883f80174338b5c241cb8d805784190e84e1afdffbbec0578410bc0e8421afdffff742428ff74242450bb030000008b44242090e89a19ffff8b54242c8b4af88b41fc8b78fcff77fcff7424248b5c240c8b44242083c800e8520d00008b74242c8b5efcff730868540b7841bbd80b78418b44242083c800e82e67ffff8b55008d52f43b55087303ff5520895500c742fc020000008b4c2428894a04c702010000008b7d008d7fec3b7d087303ff5520897d00c747fc0400000089470c895708c74704ffffffff8b74242089378b45008d40f43b45087303ff5520894500c740fc0200000089780489308b14240bc0ff128b5c2428f6c3017503ff553889d883c00270f683c434c2040083ffff75738b72f88b4efc8b79fc8b75008d76ec3b75087303ff5520897500c746fc04000000b9000c7841890e8b4ffc894e0c8946088b4804894e048b4d008d49ec3b4d087303ff5520894d00c741fc04000000525053ff7004ff7008ff700cff77fc56ff7210ff72fc51bf400c784189398b542404eb05e9c601000089510c8b7c24088979088971048b7424288b56f88b7afc8b47fc8b58fcff7324bbcc9f75418b0424ba703d7541e87a43fdff83f8017402eb60bbfccc74418b44241c0bc0ff154094040883f8017402eb64bbd01d75418b44241c0bc0ff154094040883f8017402eb68bbb40578418b44241c0bc0ff154094040883f8017402eb50bbc00578418b44241c0bc0ff154094040883f8017407eb38e968000000bbcc0578418b44241c90ff154094040883f8017407eb1ce917000000bb845776418b44241c90ff154094040883f8017502eb358b5c241cb8d805784183c800e8fa17fdffbbec0578410bc0e8ee17fdffff742428ff74242450bb030000008b44242090e84617ffff8b54242c8b4af88b41fc8b78fcff77fcff7424248b5c240c8b44242083c800e8fe0a00008b74242c8b5efc8b55008d52f43b55087303ff5520895500c742fc020000008b4c2424894a04c702010000008b45008d40ec3b45087303ff5520894500c740fc040000008b7c241889780c895008c74004010000008b54241c891089c78b45008d40f43b45087303ff5520894500c740fc0200000089780489108b530890ff128b742424f7c6010000007503ff553889f083c00270f683c430c2040083fffb754c528b700483fe01750889d883c404c204008b1424ff7604ff7210ff742410ff7208538b5afc8b068b52f8e8eef5ffff89c38b342483c4043b650c7303ff5524ebc3b80100000083c408c2040083fff975738b75008d76f03b75087303ff5520897500c746fc030000008b480c894e088b7808897e048b7804893e8b7af88b4ffc8b41fc8b78fc525356bbcc9f75418b4724ba703d7541e84641fdff83f80174708b5c24088b53fc8b4b108b45008d40f03b45087303ff5520894500c740fc03000000eb05e904010000bf980d784189388b72208970088b79208978048b75008d76f03b75087303ff5520897500c746fc03000000bbe00d7841891e8b5a2c895e088b792c897e048b5c24088b4bfceb05e9860000008b7c24088b5ffc8b7c2408ff721850ff721056ff7114ff7328ff77fc8b0c248b7c24248b5ffc8b55008d52cc3b55087303ff5520895500c742fc0c00000089722c8b7424048972288b73248972248942208b431c89421c8b7c2418897a188b7c2408897a148b7c2410897a108b7b0c897a0c8b7908897a088b4b04894a048b3b893a89d6eb0e8b7424088b76fc505050505050508b5c2424ff73f489f38b4424208b5424288b52f890e8be1000008b44242083c428c2040083ff0d75718b75008d76f83b75087303ff5520897500c746fc01000040891e8b5d008d5bf83b5d087303ff5520895d00c743fc01000040c703010000008b4afc8b7a1052ff7004ff70085653ff7118ff7120ff77208b45008d40f03b45087303ff5520894500c740fc03000000bf9c2f78418938eb05e9900100008b5424048950088b0c248948048b7c241c8b57fc8b4f108b75008d76f03b75087303ff5520897500c746fc03000000bbe42f7841891e8b5a2c895e088b592c895e048b7c241c8b5ffc8b4c241c8b79fc8b4c241c50ff721056ff7314ff7728ff71fc8b14248b4c24348b79fc8b5d008d5bf03b5d087303ff5520895d00c743fc03000000b82c30784189038b442428894308897b048b4424348b75008d76f03b75087303ff5520897500c746fc03000000b940317841890e8b4c2424894e088b48fc894e048b45008d40cc3b45087303ff5520894500c740fc0c0000008b4c240c89482c8b4c24048948288b4a248948248b5424148950208b4f1c89481c8b5424208950188b5424088950148b54241089501089700c8958088b77048970048b1f89188b5424348b5af88b73fc8b4efc8b7c243450ff71fcff742434ff7708bb70f677418b4424400bc0e8023300008b7424248b1e83fb017507ba01000000eb23ff73048b038d54243ce88af204008b1c2483c4043b650c7303ff5524ebd6ba010000008b4c24288b0183c438c20400b834f37c4183c800ff552cb80100000090|@4764,63|30,1,@2290 79,0,@2294 148,0,@2295 198,0,@995 206,0,@599 214,1,@601 226,0,@206 238,0,I24 250,0,@361 262,0,I24 274,0,@2303 286,0,I24 298,0,@2304 310,0,I24 327,0,@2305 338,0,I24 352,0,@2306 358,1,@323 363,0,@2307 370,1,@323 384,0,1 394,1,@1758 430,1,@2308 445,0,@2322 450,0,@2325 462,1,@1969 499,0,0 536,0,-1 646,0,@2327 715,0,@2328 765,0,@995 773,0,@599 778,1,@601 790,0,@206 802,0,I24 814,0,@361 826,0,I24 838,0,@2303 850,0,I24 862,0,@2304 874,0,I24 891,0,@2305 902,0,I24 919,0,@1387 930,0,I24 946,0,@2306 954,1,@323 959,0,@2307 966,1,@323 980,0,1 990,1,@1758 1026,1,@2308 1070,0,0 1111,0,0 1234,1,@2284 1257,0,0 1329,0,@995 1337,0,@599 1342,1,@601 1393,0,@2331 1436,0,@2332 1638,1,@2333 1709,0,0 1762,0,@2412 1823,0,@2413 1908,0,@2414 1953,0,@2416 2095,0,@2286 2106,1,@2418 2122,0,0 2138,1,@4759 2159,0,0 2176,0,@4762 2187,0,0 2290:C2,572|8d7c24983b7d0c7303ff552883fb017501c38b3b8b72fc8b4efc5250ff37ff7704ff7714ff7304ff7118ff7120ff76108b1c248b55008d52f03b55087303ff5520895500c742fc03000000b904027841890a8b7c2404897a088b73208972048b4c24208b79fc8b47fc8b7424208b5efc8b4bfc8b7c24208b77fc8b5e108b7d008d7ff03b7d087303ff5520897d00c747fc03000000be4c02784189378b712c8977088b4b2c894f048b7424208b5efc8b4bfc8b7424208b5efc8b73fc8b5c242052ff701057ff7114ff7628ff73fc8b34248b5efc8b4c24388b41fc8b50fc8b7c24388b77fc8b4efc8b4424388b78fc8b77fc8b4424388b78fc8b47fc8b7c2438ff7308ff720cff7124ff36ff7004ff77fc8b14248b4afc8b45008d40cc3b45087303ff5520894500c740fc0c0000008b7c242489782c8b74241c8970288b5c240c8958248b7c242c8978208b711c89701c8b5c24388958188b7c24208978148b5c24288958108b7c241089780c8b5c24148958088b7c24048978048b5c240889188b7c24508b5ffc50ff73088b5c244c8b04240bc0e87211fdffbb5d0000000bc0e86611fdffff742450508b5c240c8b4424508b5424608b4afc8b51f8e8d2e9ffff8b7c2454f7c7010000007503ff553889fe83c60270f6508b5c244889f08b54245c0bc0e816feffff89c1ff7424588b5c24048b44245490e822d5ffff8b7c245c8b77fc8b5efc89c28b45008d40f43b45087303ff5520894500c740fc020000008950048b5424508910518b532490ff128b042483c464c383c800|@2293,63|76,0,@2291 150,0,@2292 406,1,@323 411,0,46 418,1,@323 446,1,@2270 506,1,@2212 2291:C2,44|3b650c7303ff552452508b520883c800ff1283f801750f8b7c24048b04248b570483c408ff2283c408c30bc0|@950,63| 2292:C2,44|3b650c7303ff552452508b520883c800ff1283f801750f8b7c24048b04248b570483c408ff2283c408c30bc0|@950,63| 2293:S89|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296d616b65536967496e746f28362970726f6365737353696728332970537472756374283229 2294:C2,36|3b650c7303ff55248b7a088b3424893c24ff720450bb030000008b420c56e90d0fffff90|@1796,63|22,0,1 31,1,@1758 2295:C2,172|3b650c7303ff55248b7a0c8b72088b5d008d5bf03b5d087303ff5520895d00c743fc03000000b900047841890b8b4f20894b088b7e20897b048b4a0c8b7d008d7ff03b7d087303ff5520897d00c747fc03000000525053ff712cff762c57b948047841890f8b7424088977088b5424048957048b4c24148b742418897c2418ba9004784189542414bf3c057841897c2410ba90c675418954240c8b7904897c240883c40856e9263dffff0bc0|@2302,63|39,0,@2296 95,0,@2297 128,0,@2298 137,0,@2301 146,0,@1107 166,1,@1894 2296:C2,44|3b650c7303ff552452508b520883c800ff1283f801750f8b7c24048b04248b570483c408ff2283c408c30bc0|@950,63| 2297:C2,44|3b650c7303ff552452508b520883c800ff1283f801750f8b7c24048b04248b570483c408ff2283c408c30bc0|@950,63| 2298:O1|@2299 2299:C2,100|3b650c7303ff552483f8017541b81500000083c800e84a95feff8b75008d76ec3b75087303ff5520897500c746fc04000000c7460c01000000c7460801000000bb40970408895e04890689f7eb038b780889f8ba5028774190e88a23ffff8b4020c30bc0|@2300,63|14,0,10 22,1,@1488 53,0,0 60,0,0 65,0,I48 84,0,@1801 90,1,@1803 2300:S27|56414c55455f4f505328292e6c6f6f6b7570547970283329283129 2301:S16|5479706520636f6e7374727563746f72 2302:S88|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296d616b65536967496e746f28362970726f636573735369672833296c6f6f6b7570283129 2303:S3|6e696c 2304:S2|3a3a 2305:S3|726566 2306:S12|53706563696679696e672022 2307:S13|2220697320696c6c6567616c2e 2308:C2,128|3b650c7303ff55248b7d008d7fec3b7d087303ff5520897d00c747fc04000000bea00678418937895f0c8b5c2408895f088b74240489770489c28b45008d40f43b45087303ff5520894500c740fc02000000b95c0a7841890889780489d183c800e8e690ffff89c789c889faff1289c6b80100000089f28b1c2483c40c53ff22|@2321,63|33,0,@2309 83,0,@2317 98,1,@2081 113,0,0 2309:C2,664|3b650c7303ff552489d689d890e8d2c4feff83f801747089f189d80bc0e8f2c4feffff30ff7004ff70088b0424e82ac5feff83c800e8e6bffdff83c800e826c0fdff83f8017470518b4424088b510c90ff1289c189cb8b44240483c800e85202000089c890e8b6bffdff83c800e8f6bffdff83f801757189c8e8de49ffff5150bf01000000eb05e9050200008b74241483fe01750489fbeb2df7c7010000007503ff553889fa83c20270f68b760489d73b650c730aeb05e9cc010000ff5524ebcfbb010000008b1424520bd3f6c2015a7503ff55383bd374718b4c24088b442404e8c6c4feffeb05e99201000053ff7108ff710450bbffffffff8b44241083c800e81a0ffdff50bbffffffff8b44241090e80a0ffdff8b7d008d7ff43b7d087303ff5520897d00c747fc02000000c747040100000089078b75008d76f43b75087303ff5520897500eb05e927010000c746fc02000000897e04bbb4097841891e8b55008d52f43b55087303ff5520895500c742fc020000008972048b0c24890a8b45008d40f43b45087303ff5520894500c740fc02000000895004bfcc09784189388b75008d76f43b75087303ff5520897500c746fc020000008946048b5c2404891e8b45008d40f43b45087303ff5520894500c740fc02000000897004bae00978418910e86612fdff8b4d008d49f43b4d087303ff5520894d00c741fc02000000bffc09784189398941048b74240c8b5c242cc744242c030000008b16895424288b4604894424248b7e08897c24208b560c8954241c8b4610894424188b7e14897c24148b5618895424108b461c8944240c8b7e208b542408897c24088b4624894424045389d389c88b142483c40852e97e53fdffb80100000083c418c3b80100000083c410c3b80100000083c40cc3b801000000c390|@2316,63|14,1,@1620 30,1,@1621 46,1,@1622 54,1,@1109 62,1,@1111 94,1,@2310 102,1,@1109 110,1,@1111 122,1,@1926 129,0,0 194,0,0 226,1,@1624 246,0,-1 258,1,@336 264,0,-1 274,1,@336 305,0,0 346,0,@2312 412,0,@2313 479,0,@2314 486,1,@347 515,0,@2315 536,0,1 626,1,@752 631,0,0 640,0,0 649,0,0 658,0,0 2310:C2,32|8b3883ffff750b8b7004891eb801000000c3b84ce17741ff552cb80100000090|@2311,57|13,0,0 19,0,@2231 27,0,0 2311:S25|5354525543545f56414c5328292e7570646174655052283229 2312:S13|2074797065287329206e6f7420 2313:S11|2920726571756972657320 2314:S18|5479706520636f6e7374727563746f722028 2315:C2,20|3b650c7303ff55248b780c8b420489faff220bc0|@751,63| 2316:S37|545950455f5452454528292e61737369676e54797065732834296173735479706573283229 2317:C2,44|89c78b45008d40f03b45087303ff5520894500c740fc03000000bea40a784189308b7204897008897804c390|@2320,53|27,0,@2318 2318:C2,16|3b650c7303ff55248b5a048b5208ff22|@2319,63| 2319:S40|545950455f5452454528292e61737369676e54797065732834296173735479706573283129283129 2320:S37|545950455f5452454528292e61737369676e54797065732834296173735479706573283129 2321:S26|545950455f5452454528292e61737369676e5479706573283429 2322:O1|@2323 2323:C2,4|c383c800|@2324,1| 2324:S82|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296d616b65536967496e746f28362970726f63657373536967283329283129 2325:O1|@2326 2326:C2,4|c383c800|@2324,1| 2327:C2,36|3b650c7303ff55248b7a088b3424893c24ff720450bb030000008b420c56e90506ffff90|@1796,63|22,0,1 31,1,@1758 2328:C2,172|3b650c7303ff55248b7a0c8b72088b5d008d5bf03b5d087303ff5520895d00c743fc03000000b9080d7841890b8b4f20894b088b7e20897b048b4a0c8b7d008d7ff03b7d087303ff5520897d00c747fc03000000525053ff712cff762c57b9500d7841890f8b7424088977088b5424048957048b4c24148b742418897c2418ba9004784189542414bf3c057841897c2410ba90c675418954240c8b7904897c240883c40856e91e34ffff0bc0|@2302,63|39,0,@2329 95,0,@2330 128,0,@2298 137,0,@2301 146,0,@1107 166,1,@1894 2329:C2,44|3b650c7303ff552452508b520883c800ff1283f801750f8b7c24048b04248b570483c408ff2283c408c30bc0|@950,63| 2330:C2,44|3b650c7303ff552452508b520883c800ff1283f801750f8b7c24048b04248b570483c408ff2283c408c30bc0|@950,63| 2331:C2,44|3b650c7303ff552452508b520883c800ff1283f801750f8b7c24048b04248b570483c408ff2283c408c30bc0|@950,63| 2332:C2,44|3b650c7303ff552452508b520883c800ff1283f801750f8b7c24048b04248b570483c408ff2283c408c30bc0|@950,63| 2333:C2,428|3b650c7303ff5524528b7afc8b77fc8b4d008d49ec3b4d087303ff5520894d00c741fc04000000bff00f784189398b7af889790c8b108951088b7efc8979048b500483fa0174718b5008f7c2010000007509ff30ff70088b02eb148b1052ff7008b878d1764190ff552cb8010000005351ff732c6890047841683c0578416890c67541518b5b200bc0e85232ffff89c189c883c800e8feb7fdff83c800e83eb8fdff83f80175718b442408f7c001000000750a8b7804eb13e9c2000000b878d1764190ff552cbf010000005183ff01750bb80100000083c418c204008b742408ff7704ff762c6890047841683c0578416890c67541ff7424188b5e208b0783c800e8da31ffff8b5c24188b53fc8b4afc8b7d008d7feceb05e9570000003b7d087303ff5520897d00c747fc04000000bed410784189378b71fc89770c8b5c2420895f088b542414895704578b5c24080bc0e8960100008b3c2483c4043b650c7303ff5524e963ffffffb80100000083c41cc20400b80100000083c414c204005153ff308b40088d54241083c800e80a0e0000ba541f784190ff128b1c248d542410e81210000083c410c20400|@2411,63|40,0,@2334 98,0,@1640 107,0,0 117,0,@2298 122,0,@2301 127,0,@1107 138,1,@1894 150,1,@1109 158,1,@1111 190,0,@1640 199,0,0 210,0,0 231,0,@2298 236,0,@2301 241,0,@1107 258,1,@1894 304,0,@2337 338,1,@2338 362,0,0 373,0,0 398,1,@2358 403,0,@2362 418,1,@2364 2334:C2,72|3b650c7303ff5524ff720cff7208ff7204bb5410784183c800e8aa02fdff8b7c24088b74240c897c240c8b5c2404895c240889442404bb030000008b042483c40456e9f101ffff90|@2336,63|18,0,@2335 26,1,@323 55,0,1 67,1,@1758 2335:S14|20696e207369676e61747572652e 2336:S93|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296170706c7953686172696e67436f6e73747261696e742833296c6f6f6b75704661696c757265283129 2337:C2,36|3b650c7303ff55248b7a088b3424893c24ff720450bb030000008b420c56e93101ffff90|@1796,63|22,0,1 31,1,@1758 2338:C2,1432|3b650c7303ff552489c789f890e89ab5fdff89fe90e8dab5fdff83f8017402eb1889d80bc0e882b5fdff83c800e8c2b5fdff83f8017502eb08b801000000c2040089f00bc0e89e3fffff89c789d883c800e8923fffff500bc7a801587503ff55383bf8742e89f00bc0e8cabafeff89c3b8c8167841e82a01fdffbb4c5177410bc0e81e01fdff8b5424048b342483c40856ff2289f15389c890e8da3effff508b4424040bc0e8ce3effff89c68b04240bc0e8a6b3feff83f801755a8b042483c800e8aab9feff83f801744f8b042483c800e8cab9feff8b0424e892b9feff83f801740f8b042483c800e8b2b9feff89c3eb0db8503d7541ff552cbb0100000089c8e8be40ffff518b1be8c604000083f8017453eb08e97a00000051eb498b442404e84ab9feff83f801740f8b4424040bc0e86ab9feff89c2eb0db8503d7541ff552cba010000008b420883c800e896b9feff8b4c2410894c24108b5c240883c40ce99afeffff8b0424e8cab9feff89c3b8dc177841e82a00fdffbbf41778410bc0e81e00fdff8b5424108b5c240c83c41453ff2289f083c800e8beb2feff83f801755a89f0e8c6b8feff83f80174535689f083c800e8e6b8feff8b0424e8aeb8feff83f801740f8b042483c800e8ceb8feff89c3eb0db8503d7541ff552cbb010000008b4424080bc0e8d63fffff518b1be8de03000083f8017458eb09e9820000005651eb4d8b44240483c800e85eb8feff83f801740f8b4424040bc0e87eb8feff89c2eb0db8503d7541ff552cba010000008b420883c800e8aab8feff8b4c2414894c241489c38b042483c410e9adfdffff8b44240c0bc0e8dab8feff89c3b8dc177841e83afffcffbbf41778410bc0e82efffcff8b5424148b5c241083c41853ff2289c883c800e81eb3fdff89c38b44240490e812b3fdff5189da89c389d0e8c643ffff83f801740bb80100000083c40cc204008b0424e84e53ffff83f8017507b903000000eb05b90100000089c883f00289c18b44240883c800e82a53ffff83f8017507b803000000eb05b80100000089c783f7028b04240bc0e8aab2fdff515790e8f203000083f80175318b4424080bc0e81eb8feff89c3b8dc177841e87efefcffbb941878410bc0e872fefcff8b5424188b74241483c41c56ff228b44241090e862b2fdff83c800e8aa03000083f80175318b4424100bc0e8d6b7feff89c3b8dc177841e836fefcffbb941878410bc0e82afefcff8b5424188b74241483c41c56ff228b44240890e81ab2fdff83c800e86203000083f80174218b74240483fe0175188b5c24088b4424108d54241490e8e203000083c414c204008b44241090e8e2b1fdff83c800e82a03000083f80174218b342483fe0175198b5c24108b4424088d5424140bc0e8aa03000083c414c204008b44240890e8aab1fdff83c800e8f202000083f8017402eb188b442410e892b1fdff83c800e8da02000083f8017502eb738b442408e8623cffff508b4424140bc0e8563cffff8b342483fe01745b83f801755b8b4424140bc0e856b1fdff83c800e89e02000083f8017411bb030000008b44241490e8c2040000eb708b44241490e8bab6feff89c3b8dc177841e81afdfcffbb046777410bc0e80efdfcff8b54241ceb0fe9a4000000e90a000000e90500000090ff12eb6483f801746483fe01755f8b44240c83c800e8e6b0fdff83c800e82e02000083f8017416bb030000008b44240c90e852040000eb35e9300000008b44240ce846b6feff89c3b8dc177841e8a6fcfcffbb046777410bc0e89afcfcff8b54241c0bc0ff12eb26e9210000008b44240ce88ab0fdff89c38b44241490e87eb0fdff89da89c389d090e882050000b80100000083c418c204008b442408e8eab5feff89c3b8dc177841e84afcfcffbb681d78410bc0e83efcfcff89c68b44241090e8c6b5feff89c389f083c800e826fcfcffbb781d78410bc0e81afcfcff8b5424188b5c241483c41c53ff22|@2357,63|14,1,@1109 22,1,@1111 38,1,@1109 46,1,@1111 58,0,0 70,1,@1926 82,1,@1926 106,1,@1624 113,0,@2339 118,1,@323 123,0,@1929 130,1,@323 154,1,@1923 166,1,@1923 178,1,@1598 194,1,@1620 210,1,@1621 218,1,@1620 234,1,@1621 243,0,@597 251,0,0 258,1,@1932 266,1,@2340 290,1,@1620 306,1,@1621 315,0,@597 323,0,0 334,1,@1622 362,1,@1624 369,0,@2342 374,1,@323 379,0,@2343 386,1,@323 410,1,@1598 422,1,@1620 438,1,@1621 446,1,@1620 462,1,@1621 471,0,@597 479,0,0 490,1,@1932 498,1,@2340 526,1,@1620 542,1,@1621 551,0,@597 559,0,0 570,1,@1622 602,1,@1624 609,0,@2342 614,1,@323 619,0,@2343 626,1,@323 650,1,@1109 662,1,@1109 674,1,@1946 684,0,0 698,1,@1994 708,0,1 715,0,0 734,1,@1994 744,0,1 751,0,0 766,1,@1109 774,1,@2344 790,1,@1624 797,0,@2342 802,1,@323 807,0,@2346 814,1,@323 838,1,@1109 846,1,@2344 862,1,@1624 869,0,@2342 874,1,@323 879,0,@2346 886,1,@323 910,1,@1109 918,1,@2344 950,1,@2347 966,1,@1109 974,1,@2344 1006,1,@2347 1022,1,@1109 1030,1,@2344 1046,1,@1109 1054,1,@2344 1070,1,@1931 1082,1,@1931 1106,1,@1109 1114,1,@2344 1124,0,1 1134,1,@2348 1146,1,@1624 1153,0,@2342 1158,1,@323 1163,0,@1993 1170,1,@323 1218,1,@1109 1226,1,@2344 1236,0,1 1246,1,@2348 1262,1,@1624 1269,0,@2342 1274,1,@323 1279,0,@1993 1286,1,@323 1310,1,@1109 1322,1,@1109 1334,1,@2353 1339,0,0 1354,1,@1624 1361,0,@2342 1366,1,@323 1371,0,@2355 1378,1,@323 1390,1,@1624 1402,1,@323 1407,0,@2356 1414,1,@323 2339:S21|43616e6e6f742073686172653a2054797065732028 2340:C2,164|3b650c7303ff552483fb01751183f8017506b803000000c3b801000000c389c68b0383c800e89eaefdff83f801745b89f18b030bc0e8beaefdfff7c101000000755389c68b0183c800e87aaefdff83f801743c568b0183c800e89aaefdffff730489c38b4424040bc0e832a3feff83f801740e8b1c248b410483c408e97fffffffb80100000083c408c3e90c000000b801000000c3b801000000c3b801000000c383c800|@2341,63|19,0,1 25,0,0 38,1,@1102 54,1,@1103 74,1,@1102 90,1,@1103 106,1,@1584 130,0,0 144,0,0 150,0,0 156,0,0 2341:S44|545950455f5452454528292e6c696e6b54797065436f6e7374727563746f7273283329657141726773283229 2342:S15|43616e6e6f742073686172653a2028 2343:S20|29206973206120747970652066756e6374696f6e 2344:C2,64|8b3083fefd75218b58048b138b0a83f903750489c7eb1389d03b650c7303ff5524ebddbf0100000089c78b1f83fbfd7506b803000000c3b801000000c383c800|@2345,63|36,0,0 50,0,1 56,0,0 2345:S29|5354525543545f56414c5328292e69735661726961626c654964283129 2346:S17|29206973206e6f7420666c657869626c65 2347:C2,380|3b650c7303ff552489d789c689f083c800e886b3feff89c189d883c800e8063affff50505089f00bc0e8e2adfdff570bc0e822aefdff83f801742d8b45008d40f83b45087303ff5520894500c740fc0100004089308d7c2408c707ffffffff8d542408894204eb118d442408c700010000008d7c24088977048b55008d52f43b55087303ff5520895500c742fc020000008b44240889028b7c240c897a048b45008d40f03b45087303ff5520894500c740fc030000008950088948048b542404891089f153e8e2adfdff508b4424040bc0e8ea37ffff83f801747289c8e82eadfdff510bc0e876feffff83f80174298b042483c800e8e236ffff83c800e8beabfeff83f8017411bb030000008b04240bc0e882000000eb538b04240bc0e8d637ffff83f801753d8b44240c8b78048b0424e866b2feff5789c3b8dc17784183c800e8c2f8fcffbb04677741eb05e91800000083c800e8aef8fcff8b142483c800ff12eb015083c404eb01508b5c24048b44240883c41ce9c500000090|@2352,63|18,1,@1624 30,1,@1932 42,1,@1109 50,1,@1111 91,0,-1 110,0,0 198,1,@1113 210,1,@1930 222,1,@1109 230,1,@2344 246,1,@1923 254,1,@1598 264,0,1 274,1,@2348 286,1,@1931 306,1,@1624 314,0,@2342 322,1,@323 327,0,@1993 342,1,@323 375,1,@2350 2348:C2,100|8b78108b1783fa0175058b7704eb078b77048b0e89ce8b4d008d49f03b4d087303ff5520894d00c741fc030000008b7e088979088b560489510489198b58108b1383faff750e8b78108b7704890eb801000000c3b84ce177410bc0ff552cb80100000090|@2349,63|79,0,0 85,0,@2231 95,0,0 2349:S30|5354525543545f56414c5328292e7463536574457175616c697479283229 2350:C2,100|8b78108b1783fa0175058b7704eb078b77048b0e89ce8b4d008d49f03b4d087303ff5520894d00c741fc030000008b7e088979088959048b1e89198b50108b3a83ffff750e8b70108b5e04890bb801000000c3b84ce1774183c800ff552cb80100000090|@2351,63|78,0,0 84,0,@2231 95,0,0 2351:S32|5354525543545f56414c5328292e74635365744571756976616c656e74283229 2352:S46|545950455f5452454528292e6c696e6b54797065436f6e7374727563746f72732833297365744571756976283229 2353:C2,340|538b1883fbfd75218b50048b0a8b3983ff03750489c7eb1389c83b650c7303ff5524ebddbf0100000089c7578b5424048b0283f8fd75218b7a048b1f8b0b83f903750489d1eb1389da3b650c7303ff5524ebddb90100000089d18b3c248b1f83fb01754e8b3183fe0175288b57048b4104520bd0f6c2015a7503ff55383bd07509b80300000083c408c3b80100000083c408c383fefd75118b51048b04248902b80300000083c408c3b80100000083c408c383fbff75428b3183feff751c8b57048b41043bd07509b80300000083c408c3b80100000083c408c383fefd75118b51048b04248902b80300000083c408c3b80100000083c408c383fbfd75338b3183fefd751e8b57048b41043bd07509b80300000083c408c3890ab80300000083c408c38b5704890ab80300000083c408c38b3183fefd75118b51048b04248902b80300000083c408c3b80100000083c408c30bc0|@2354,63|37,0,0 84,0,0 130,0,1 139,0,0 161,0,1 170,0,0 201,0,1 210,0,0 232,0,1 241,0,0 272,0,1 283,0,1 297,0,1 321,0,1 330,0,0 2354:S29|5354525543545f56414c5328292e756e69667954797065496473283229 2355:S7|2920616e642028 2356:S21|292061726520646966666572656e74207479706573 2357:S35|545950455f5452454528292e6c696e6b54797065436f6e7374727563746f7273283329 2358:C2,184|3b650c7303ff552483f8017506b801000000c38b7af452ff7004ff772cff342468981e784168482777416a01ff72f88b5c24148b00e80a23ffff83f801753fb81500000090e8ee7bfeff8b5d008d5bec3b5d087303ff5520895d00c743fc04000000c7430c01000000c7430801000000ba40970408895304890389deeb038b7008568b4424088b54240c83c800e86effffff8b5d008d5bf43b5d087303ff5520895d00c743fc020000008943048b1424891389d883c410c3|@413,63|14,0,0 33,0,@2359 38,0,@1797 54,1,@1894 64,0,10 70,1,@1488 101,0,0 108,0,0 113,0,I48 2359:O1|@2360 2360:C2,100|3b650c7303ff552483f8017541b81500000083c800e8427bfeff8b75008d76ec3b75087303ff5520897500c746fc04000000c7460c01000000c7460801000000bb40970408895e04890689f7eb038b780889f8ba5028774190e88209ffff8b402cc30bc0|@2361,63|14,0,10 22,1,@1488 53,0,0 60,0,0 65,0,I48 84,0,@1801 90,1,@1803 2361:S41|56414c55455f4f505328292e6c6f6f6b75705374727563747572654469726563746c79283429283129 2362:O1|@2363 2363:C2,104|3b650c7303ff552483f8017506b801000000c38b7d008d7ff43b7d087303ff5520897d00c747fc02000000c74704010000008b308937578b400483c800e8beffffff8b7d008d7ff43b7d087303ff5520897d00c747fc020000008947048b3424893789f883c404c3|@413,49|14,0,0 46,0,0 2364:C2,84|3b650c7303ff552483f801750eb85020784190ff552cb8010000005250ba7c2078410bc0ff128d54240883c800e8220400008b0424ba9c2978410bc0ff128d54240883c800e87e0b0000b80100000083c408c390|@2410,63|14,0,@2365 23,0,0 30,0,@2367 46,1,@2380 54,0,@2393 70,1,@2403 75,0,0 2365:O3|@7320,@224,@2366 2366:S18|456d7074792073686172696e67206c697374 2367:O1|@2368 2368:C2,68|3b650c7303ff552483f8017506b801000000c3ff70048b0090e842000000508b4424040bc0e8d6ffffffbf042478418b742408897c24088b1c2483c40856e99101000090|@2377,63|14,0,0 26,1,@2369 43,0,@2378 63,1,@2375 2369:C2,88|3b650c7303ff552483f8017506b801000000c38b78048b0090e8362affff576a01bb5821784183c800e84647ffff508b4424040bc0e8c6ffffffbe282278418b5c24088974240889da8b1c2483c40852e91f01000083c800|@2377,63|14,0,0 26,1,@1919 34,0,@2370 42,1,@2002 59,0,@2373 81,1,@2375 2370:O1|@2371 2371:C2,64|3b650c7303ff55248b188b48088b4004ba143a7741e8a618ffff83f801741e8b45008d40f43b45087303ff5520894500c740fc020000008948048918c389c8c3|@2372,63|17,0,@1865 22,1,@1866 2372:S98|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296170706c7953686172696e67436f6e73747261696e7428332974797065436f6e7374724e616d6573283129283129 2373:O1|@2374 2374:C2,12|8b58048b00ff254094040890|0,63|7,0,I24 2375:C2,208|3b650c7303ff552483fb017503c2040050ff33ff730483f8017507bf01000000eb548b308b58048b45008d40f43b45087303ff5520894500c740fc020000008970048b5424048910538b54241483c800ff1283f8017407bf03000000eb158b042483c4043b650c7303ff5524eba8bf0100000083c40483ff0174178b4c2410894c24108b1c248b44240883c40ce96effffffff7424108b5c24048b44240c83c800e85affffff8b4d008d49f43b4d087303ff5520894d00c741fc020000008941048b442404890189c883c40cc2040090|@2376,63|28,0,0 88,0,1 111,0,0 2376:S85|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296170706c7953686172696e67436f6e73747261696e74283329756e696f6e283329 2377:S88|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296170706c7953686172696e67436f6e73747261696e74283329756e696f6e4d6170283329 2378:O1|@2379 2379:C2,12|8b58048b00ff254094040890|0,63|7,0,I24 2380:C2,84|3b650c7303ff552483f8017506b801000000c352ff70048b00e852000000508b4424048b5424080bc0e8d2ffffff8b7d008d7ff43b7d087303ff5520897d00c747fc020000008947048b3424893789f883c40cc3|@413,63|14,0,0 26,1,@2381 2381:C2,36|3b650c7303ff5524528b5af890e82e0000008d54240483c800e8ca02000083c404c30bc0|@2392,63|14,1,@2382 26,1,@2389 2382:C2,28|3b650c7303ff55245089d88d5424040bc0e82200000083c404c30bc0|@2388,63|18,1,@2383 2383:C2,80|3b650c7303ff552483f8017506b801000000c352ff308b4004e8e2ffffff8b542404508b5c24048b42fc83c800e83a0000008b0c2483f901750483c40cc38d54240c83c800e85a01000083c40cc30bc0|@2084,63|14,0,0 46,1,@2384 70,1,@2387 2384:C2,28|3b650c7303ff55245089d88d5424040bc0e82200000083c404c30bc0|@2386,63|18,1,@2385 2385:C2,120|3b650c7303ff552483f8017506b801000000c352ff308b4004e8e2ffffff89c78b04240bc0e84e25ffff8b54240457ff72fcbbf83977410bc0e87a05fffff7c00100000075288b4d008d49f43b4d087303ff5520894d00c741fc020000008b3c248979048b30893189c883c40cc38b042483c40cc383c800|@2084,63|14,0,0 38,1,@1919 51,0,@1863 58,1,@1805 2386:S98|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296170706c7953686172696e67436f6e73747261696e742833296765745669727454797065436f6e73747273283229 2387:C2,68|3b650c7303ff552483f80175048b42f4c352ff308b40040bc0e8e2ffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0424890289d083c408c3|@1462,5| 2388:S99|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296170706c7953686172696e67436f6e73747261696e742833296c6973745669727454797065436f6e73747273283229 2389:C2,168|3b650c7303ff552483f8017506b801000000c352ff30ff70048b042483f8017507bf01000000eb668b5424088b7afc8b77fc8b5efc8b4bfc8b51fc8b7d008d7fec3b7d087303ff5520897d00c747fc04000000b950287841890f8b4afc894f0c8b56048957088b4b08894f04ff7004578b188b44240c83c800e80ae9ffff8b042483c4043b650c7303ff5524eb8ee905000000bf010000008b04248b54240883c40ce959ffffff90|@2391,63|14,0,0 34,0,0 84,0,@2390 122,1,@2338 148,0,0 2390:C2,36|3b650c7303ff55248b7a088b3424893c24ff720450bb030000008b420c56e9b5e9feff90|@1796,63|22,0,1 31,1,@1758 2391:S129|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296170706c7953686172696e67436f6e73747261696e742833297368617265566972745374727563747328322973686172655669727454797065436f6e7374722831297368617265416c6c283129 2392:S118|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296170706c7953686172696e67436f6e73747261696e742833297368617265566972745374727563747328322973686172655669727454797065436f6e737472283129 2393:O1|@2394 2394:C2,68|3b650c7303ff552483f8017506b801000000c3ff70048b0090e842000000508b4424040bc0e8d6ffffffbf782b78418b742408897c24088b1c2483c40856e971f8ffff90|@2377,63|14,0,0 26,1,@2395 43,0,@2401 63,1,@2375 2395:C2,88|3b650c7303ff552483f8017506b801000000c38b78048b0090e81621ffff576a01bb782a784183c800e8263effff508b4424040bc0e8c6ffffffbe482b78418b5c24088974240889da8b1c2483c40852e9fff7ffff83c800|@2377,63|14,0,0 26,1,@1919 34,0,@2396 42,1,@2002 59,0,@2399 81,1,@2375 2396:O1|@2397 2397:C2,64|3b650c7303ff55248b188b48088b4004ba2c387741e89e0dffff83f801741e8b45008d40f43b45087303ff5520894500c740fc020000008948048918c389c8c3|@2398,63|17,0,@1851 22,1,@1852 2398:S100|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296170706c7953686172696e67436f6e73747261696e742833297375625374727563747572654e616d6573283129283129 2399:O1|@2400 2400:C2,12|8b58048b00ff254094040890|0,63|7,0,I24 2401:O1|@2402 2402:C2,12|8b58048b00ff254094040890|0,63|7,0,I24 2403:C2,112|3b650c7303ff552483f8017506b801000000c3ff3052ff70048b42f88d54240c90e8660000008b7c24048b77fc8b5efc8b5b0889f2e8fef3ffff508b4424048b5424080bc0e8b6ffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0c24890a89d083c410c3|@413,63|14,0,0 34,1,@2404 54,1,@2364 2404:C2,88|3b650c7303ff552483f8017506b801000000c352ff308b4004e8e2ffffff8b542404508b5c24048b42fc83c800e8420000008b4d008d49f43b4d087303ff5520894d00c741fc020000008b3c24897904890189c883c40cc3|@2084,63|14,0,0 46,1,@2405 2405:C2,28|3b650c7303ff55245089d88d5424040bc0e82200000083c404c30bc0|@2409,63|18,1,@2406 2406:C2,48|3b650c7303ff552483f8017506b801000000c352ff308b4004e8e2ffffff89c38b04248b54240483c408e91d00000090|@2084,63|14,0,0 43,1,@2407 2407:C2,172|3b650c7303ff552489d783c800e8fa1dffff53ff77fcbb103877410bc0e82afefefff7c001000000756f8b1883fb017541b81500000083c800e8926cfeff8b55008d52ec3b55087303ff5520895500c742fc04000000c7420c01000000c7420801000000b940970408894a04890289d6eb038b73088b55008d52f43b55087303ff5520895500c742fc020000008b0c24894a04893289d0eb05e90400000083c404c38b042483c404c383c800|@2408,63|14,1,@1919 23,0,@1849 30,1,@1805 50,0,10 58,1,@1488 89,0,0 96,0,0 101,0,I48 2408:S113|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296170706c7953686172696e67436f6e73747261696e74283329676574566972745375625374727563747572652832297375627374724c6973742d283229 2409:S99|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296170706c7953686172696e67436f6e73747261696e7428332967657456697274537562537472756374757265283229 2410:S96|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296170706c7953686172696e67436f6e73747261696e7428332973686172655669727453747275637473283229 2411:S77|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296170706c7953686172696e67436f6e73747261696e74283329 2412:C2,44|3b650c7303ff552452508b520883c800ff1283f801750f8b7c24048b04248b570483c408ff2283c408c30bc0|@950,63| 2413:C2,44|3b650c7303ff552452508b520883c800ff1283f801750f8b7c24048b04248b570483c408ff2283c408c30bc0|@950,63| 2414:C2,148|3b650c7303ff55248b78048b72088b1ef6c3017503ff553889d983c10270f6890e8b4a048b75008d76f43b75087303ff5520897500c746fc02000000895e04c706010000008b5d008d5bec3b5d087303ff5520895d00c743fc040000008b570c89530c8973088b77048973048b3089338b45008d40f43b45087303ff5520894500c740fc0200000089580489308b5108ff220bc0|@2415,63|65,0,0 2415:S90|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296d616b65536967496e746f28362970726f63657373536967283329656e74657256616c283129 2416:C2,128|3b650c7303ff552489d1ff30ff70048b042483c800e8321fffff83c800e85e92ffff83f80174278b41088b388b75008d76f43b75087303ff5520897500c746fc02000000897e048b1c24891e89308b41048b780c8b45008d40f43b45087303ff5520894500c740fc020000008b34248970048b5c2404891889fa83c408ff2290|@2417,63|22,1,@1923 30,1,@2163 2417:S91|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296d616b65536967496e746f28362970726f63657373536967283329656e74657254797065283129 2418:C2,156|3b650c7303ff55245389c78b4424140bc0e8a20000008b55008d52c83b55087303ff5520895500c742fc0d0000008b482c894a30be2433784189722c8b70288972288b5824895a248b4820894a208b481c894a1c8b70188972188b70148972148b70108972108b700c89720c8b70088972088b70048972048b18891a5752ff7424146a016a0389fb89f88d54241883c800e89e00000083c408c21000|@4758,63|18,1,@2419 53,0,@2421 146,1,@2424 2419:C2,4|c383c800|@2420,1| 2420:S3|456e76 2421:O1|@2422 2422:C2,8|b801000000c30bc0|@2423,1|1,0,0 2423:S28|50415253455f5452454528292e7061737332283629656e762d283129 2424:C2,28|3b650c7303ff552452508d54240883c800e82200000083c408c21000|@4757,63|18,1,@2425 2425:C2,5504|8d7c24803b7d0c7303ff55288b38f7c701000000741583ffe17c1583ff1f7f15bee63378418d74be7cffe6e90a010000e905010000e900010000e920150000909090e919040000909090e9be040000909090e905040000909090e998130000909090e9ab090000909090e96a010000909090e9f8140000909090e9c8000000909090e9f1030000909090e9c50e0000909090e9a3000000909090e9a3050000909090e981080000909090e9bc110000909090e92f120000909090e96c050000909090e974010000909090e9e7010000909090e93d050000909090e928140000909090e9c60e0000909090e91b090000909090e903100000909090e9f7020000909090e948070000909090e9d10a0000909090e976030000909090e9110f0000909090e9b6020000909090e9ab0a0000909090e997100000909090b848497841ff552cb8010000008b7a108b72fc8b4d008d49ec3b4d087303ff5520894d00c741fc0400000053ff7004ff7008ff700cff7718ff7730ff760cff720c51be7c49784189318b54240889510c8959088b442404894104ff74240c68a04b7841686c4d784168f8f97541518b5c24248b44243090e8a60bffff5089c3b80300000083c800e8161800008b7c241c8b342489378b5c2418890383c428c35253ff7004bb030000008b400c83c800e8c21800008b5c24088b53fc8b4d008d49f03b4d087303ff5520894d00c741fc03000000bf9453784189398b7424048971088b7a0c89790457ff730c51bba43375410bc0e85e1e00008b3424890683c40cc35253ff70088b40040bc0e8b6fdffff508b5c24088b4424048b54240c0bc0e8a2fdffff8b5c240c8b53fc8b4d008d49f03b4d087303ff5520894d00c741fc03000000bfbc56784189398b7424088971088b7a0c8979048b742410897c24108b530c8b7c240c8954240c894c240889c38b042483c40856e9da1d00005250ff7008ff700c89c38b40040bc0e836fdffff8b5c240c8b53fc8b4d008d49f03b4d087303ff5520894d00c741fc03000000bf3857784189398b7424088971088b7a0c8979048b75008d76ec3b75087303ff5520897500c746fc04000000bfb4577841893e8b7a0c897e0c8b530c895608894e0468a879774156bbeccb744183c800e8ce49ffff8b5c24088b04248b54240ce8b2fcffff508b5c240c8b4424088b5424100bc0e89efcffff8b4c24108b79fc8b75008d76f03b75087303ff5520897500c746fc03000000bb00587841891e8b54240c8956088b5f0c895e048b55008d52ec3b55087303ff5520895500c742fc04000000bb7c587841891a8b5f0c895a0c8b790c897a0889720468a87977415289c38b4424080bc0e83649ffff8b042483c414c353528b40048d54240883c800e82e21000083c408e9ee92fdff8b5afc8b4d008d49ec3b4d087303ff5520894d00c741fc04000000bf4059784189398b730c89710c8941088b7a0c8979045250ff7004ff7008518b400c8d5424140bc0e8d62100008b1c24e86689fdff8b5c240883c800e85a8cfdff8b742404890683c414c38b4008c38b58088b0c24891c24ff70048b580c8b401051e9502200008b58048b0c24891c248b58088b400c51e9db5c00005250ff7004ff7008b81500000083c800e8ae61feff508b4424088d5424140bc0e8a274000083f8017507bb01000000eb25ff70048b008d5424180bc0e88e7500008b042483c4043b650c7303ff5524ebd4bb010000008b1c24b8a8b578410bc0e8827e000089c2b80100000083c800ff128b4c24048901b8589c754183c414c38b5afc8b4d008d49ec3b4d087303ff5520894d00c741fc04000000bf5cb8784189398b730c89710c8941088b7a0c8979045050505250ff70048d5c240c89c890e862ddfeff8b342483fe017507bb01000000eb6d8b168b4c24088b41fc8b7d008d7fe83b7d087303ff5520897d00c747fc05000000bb08b97841891f8b5910895f108b5c2404895f0c8b580c895f088b410c8947048b5c24088b43fcff7604ff700cff710c89fb8b42040bc0e89accffff8b342483c4043b650c7303ff5524eb87e905000000bb010000008b142483fa017507b901000000eb24ff72048b028d54241c90e8228000008b142483c4043b650c7303ff5524ebd5b901000000b8589c754183c418c38b58088b0c24891c246a018b580c8b400451e9298100008b58088b0c24891c246a038b580c8b400451e9128100008b4a108b7afc8b75008d76ec3b75087303ff5520897500c746fc04000000525053ff7004ff7008ff7120ff7130ff770cff720c56bf20db7c41893e8b54240889560c895e088b4c2404894e04ff74240c6890047841683c0578416890c67541568b5c24248b44242883c800e8aa06ffff5050508d5c24048b442420e81e92feffbb409704088b44240490ff154094040883f8017407b801000000eb6c8b4424308b78108b70fc8b5d008d5bec3b5d087303ff5520895d00c743fc04000000ba60db7c4189138b4e0c894b0c8b54242c8953088b500c895304ff742404538b5f30b8482777410bc0e882ecfeff89c18b45008d40f83b45087303ff5520894500c740fc0100000089088b7c24308b77fc508b5c24288b4604e8aed7fcffff342489c38b4424080bc0e80676000089c189c883c800e8fa2bffff83f80175398b7c24348b77fc5150ff760cff770cbba0db7c418b4424340bc0e86ed7fcffff742440ff74240450bb030000008b44241090e85a0e0000eb04515050508b44240883f8017502eb4b8b7c24448b77108b188b480489d8e866c0feff89c28b45008d40f43b45087303ff5520894500c740fc020000008958048910518b560883c800ff128b042483c4043b650c7303ff5524ebae8b7c24448b77108b45008d40f43b45087303ff5520894500c740fc020000008b5c240c8958048b54243889108b560c83c800ff12b8589c754183c448c3528b40040bc0e8b69f04008b5d008d5bf43b5d087303ff5520895d00c743fc02000000c743040100000089035050b87c75784183c800e88a8afdff83c800e8ca8afdff83f801742e8b55008d52f83b55087303ff5520895500c742fc01000040b97c757841890a89e0c700ffffffff89e7895704eb1289e2c7020100000089e1b87c7578418941048b7d008d7ff43b7d087303ff5520897d00c747fc020000008b342489378b5424048957048b45008d40f03b45087303ff5520894500c740fc03000000897808b9a4757841894804891883c40ce9888afdff5250ff70048b400890e8caf6ffff8b5c24088b53fc8b4d008d49e83b4d087303ff5520894d00c741fc05000000bf68de7c4189398b73108971108b7c240489790c8b7a0c8979088b530c8951048b7c24088b57fc50ff720cff730c89cb8b44240ce8cac8ffff8b4c240c8b41fc8b7d008d7ff03b7d087303ff5520897d00c747fc03000000be24df7c4189378b5c2408895f088b500c8957048b75008d76ec3b75087303ff5520897500c746fc04000000bba0df7c41891e89560c8b590c895e08897e0468a8797741568b5c240c8b44240883c800e80a43ffff8b44240483c410c38b4004e9fe9d04008b58048b4afc8b7d008d7fec3b7d087303ff5520897d00c747fc04000000beecdf7c4189378b710c89770c8947088b4b04894f045050505250ff3351ff7308ff730cff73108d5c241c89f8e852d8feff8b4424188b7804f7c7010000007503ff553889fe83c60270f6566a0156ff74242cff742418bb010000008b4424208b54242c90e8722300008b5c241c8b53108b4d008d49f03b4d087303ff5520894d00c741fc03000000bf84e07c4189398b7424288971088b7a188979048b75008d76c83b75087303ff5520897500c746fc0d0000008b5a30895e308b7a2c897e2c8b5a28895e288b5a24895e248b7a20897e208b7a1c897e1c894e188b4a14894e148b4a10894e108b4a0c894e0c8b4a08894e088b4a04894e048b1a891e8b5c241c5056ff742418ff7308ff7424108b5c242c8b4424288b7424308b56fc83c800e872f4ffff8b5c240889038b54240c8b0c24890a8b7c24208b77fc8b5d008d5bec3b5d087303ff5520895d00c743fc04000000bacce07c4189138b560c89530c8b4c241c894b088b4c2414894b0450538b5f088b44240890e8625100008b45008d40f43b45087303ff5520894500c740fc020000008b3c248978048b742404893083c434e99a8cfdffb8acb77541c35050505250ff7004ff7008ff700cff70108d5c2418b80100000083c800e8d249fdff50505089e3b80100000090e8c249fdff50505089e3b80100000090e8b249fdff8b5c242483fb0174098b4c242c8b5108eb168b54242c8b4a08f6c1017503ff553889ca83c20270f68b44242c8b78108b75008d76f03b75087303ff5520897500c746fc03000000b90ce17c41890e8b4c2438894e088b4f18894e048b5d008d5bf03b5d087303ff5520895d00c743fc03000000b854e17c4189038b4424148943088b47208943048b4c242c8b41108b7c242c8b4f108b7d008d7ff03b7d087303ff5520897d00c747fc03000000525653ff7010ff713057b99ce17c41890f8b4424208947088b4c2404894f048b4424448b48108b55008d52c83b55087303ff5520895500c742fc0d000000897a308b712c89722c8b5928895a288b7c241c897a248b7c240c897a208b791c897a1c8b4424108942188b41148942148b4424088942108b44242889420c8b44244c8942088b4104894204bbe4e17c41891aff7114ff712856528b5c2444be589c754183fb01750489f2eb408b0b8b442454ff7304ff742404ff7104ff742430ff70048b58f88b018b7c24688b57fc90e826f2ffff89c68b1c2483c4043b650c7303ff5524ebbcba010000008b4c24548b45008d40ec3b45087303ff5520894500c740fc04000000bf54e27c4189388b74244089700c8b5c245c8958088b51108950048b7d008d7ff03b7d087303ff5520897d00c747fc03000000befce27c4189378b5c2438895f088957048b75008d76f03b75087303ff5520897500c746fc03000000bb3ce37c41891e8b5c242c895e088956048b5d008d5bc83b5d087303ff5520895d00c743fc0d0000008b4c2410894b308b4c2404894b2c8b4c2408894b288973248b74241c8973208b4a1c894b1c8b7424208973188b74240c8973148b742418897310897b0c8943088b42048943048b3a893b538b74244cbf589c754183fe01750489fbeb3e8b168b4c2458ff7604ff742404ff7204ff742434ff71048b59f88b028b51fc83c800e8eaf0ffff89c78b342483c4043b650c7303ff5524ebbebb010000008b54245083fa017402eb4c8b4c24588b41fc8b7d008d7fec3b7d087303ff5520897d00c747fc04000000be7ce37c4189378b500c89570c8b7424548977088b710c89770453578b59088b44240483c800e8c64d0000eb01538b042483c46cc352ff7210ff72088b5804b9589c754183fb01750689c883c40cc38b038b7c2408ff7304ff742408ff7004ff74240cff77048b5ff88b008b57fce836f0ffff89c18b1c2483c4043b650c7303ff5524ebbfb80100000083c410c38b5afc8b4d008d49ec3b4d087303ff5520894d00c741fc04000000bfbce37c4189398b730c89710c8941088b7a0c8979045050505250ff70048d5c240c89c890e8c2d2feff8b342483fe017507bb01000000eb26ff76048b068d54241c83c800e866a004008b342483c4043b650c7303ff5524ebd3bb01000000b8589c754183c418c3525089c38b40040bc0e8c2efffff8b5c24048b53fc8b4d008d49f03b4d087303ff5520894d00c741fc03000000bf00eb7c4189398b34248971088b7a0c8979048b75008d76ec3b75087303ff5520897500c746fc04000000bf7ceb7c41893e8b7a0c897e0c8b530c895608894e0468a87977415689c3b810c477410bc0e85a3cffff50506a016a016a018d4c240c51bb1f4e0000b8c8cc7441e8665cfdff8b45008d40f43b45087303ff5520894500c740fc020000008b3c2489388b74240489700483c410e9fe5cfdff5250ff700889c38b400490e8f6eeffff508b4424048b54240c0bc0e8f696040089c38b45008d40f43b45087303ff5520894500c740fc020000008b1424895004b910c477418908e82e87fdff8b7c240c8b77fc8b55008d52f03b55087303ff5520895500c742fc03000000b9c8eb7c41890a8b4c2408894a088b4e0c894a048b4d008d49ec3b4d087303ff5520894d00c741fc040000005350ff760cff770c5251bf44ec7c4189398b74240c89710c8b7c240889790889510468a87977415189c38b44241c0bc0e8463bffff8b44241883c428c35250ff700489c38b400890e822eeffff8b5c24088b53fc8b4d008d49f03b4d087303ff5520894d00c741fc03000000bf90ec7c4189398b7424048971088b7a0c8979048b75008d76ec3b75087303ff5520897500c746fc04000000bf0ced7c41893e8b7a0c897e0c8b530c895608894e0468a879774156bbeccb744183c800e8ba3affff8b5c24048b04248b542408e89eedffffb8acb7754183c40cc35250ff70048b40080bc0e896950400508b5c24088b4424048b54240c0bc0e872edffff8b5c240c8b53fc8b4d008d49f03b4d087303ff5520894d00c741fc03000000bf58ed7c4189398b7424088971088b7a0c8979048b742410897c24108b530c8b7c240c8954240c894c240889c38b042483c40856e9aa0d00005250ff700889c38b400490e80aedffff8b5c24088b53fc8b4d008d49f03b4d087303ff5520894d00c741fc03000000bfd4ed7c4189398b7424048971088b7a0c8979048b75008d76ec3b75087303ff5520897500c746fc04000000bf50ee7c41893e8b7a0c897e0c8b530c895608894e0468a879774156bbeccb744183c800e8a239ffff8b5c24048b04248b542408e886ecffff8b4c24088b79fc8b75008d76f03b75087303ff5520897500c746fc03000000bb9cee7c41891e8b5424048956088b5f0c895e048b55008d52ec3b55087303ff5520895500c742fc04000000bb18ef7c41891a8b5f0c895a0c8b790c897a0889720468a879774152bbeccb744183c800e81e39ffffb8eccb744183c40cc35250ff700889c38b4004e8faebffff8b5c24088b53fc8b4d008d49f03b4d087303ff5520894d00c741fc03000000bf64ef7c4189398b7424048971088b7a0c8979048b75008d76ec3b75087303ff5520897500c746fc04000000bfe0ef7c41893e8b7a0c897e0c8b530c895608894e0468a879774156bbeccb744183c800e89238ffff8b5c24048b04248b542408e876ebffff8b4c24088b79fc8b75008d76f03b75087303ff5520897500c746fc03000000bb2cf07c41891e8b5424048956088b5f0c895e048b55008d52ec3b55087303ff5520895500c742fc04000000bba8f07c41891a8b5f0c895a0c8b790c897a0889720468a879774152bbeccb744183c800e80e38ffffb8eccb744183c40cc352ff70048b580883fb017502eb418b5424048b4a108b45008d40f43b45087303ff5520894500c740fc020000008b3c248978048b338930ff73048b1190ff128b1c2483c4043b650c7303ff5524ebb8b8589c754183c408c3b8f4f07c4183c800ff552cb801000000b828f17c4183c800ff552cb80100000090|@4756,63|33,0,$2425+58 315,0,@2426 323,0,0 381,0,@2428 409,0,@2434 414,0,@2439 419,0,@1198 434,1,@1894 442,0,1 450,1,@2440 479,0,1 490,1,@2442 526,0,@2461 551,0,@521 558,1,@2463 638,0,@2469 690,1,@2463 746,0,@2470 790,0,@2471 812,0,@2049 818,0,@187 826,1,@2069 898,0,@2472 942,0,@2473 964,0,@2049 978,1,@2069 1002,1,@2474 1010,1,@1120 1042,0,@2475 1082,1,@2477 1090,1,@1091 1102,1,@1099 1140,1,@2478 1161,1,@2659 1174,0,10 1182,1,@1488 1198,1,@2703 1208,0,0 1226,1,@2705 1247,0,0 1255,0,@2721 1262,1,@2729 1269,0,0 1285,0,@989 1321,0,@2733 1358,1,@1777 1371,0,0 1411,0,@2735 1466,1,@2308 1492,0,0 1505,0,0 1522,1,@2737 1543,0,0 1548,0,@989 1575,1,@2739 1598,1,@2739 1655,0,@4697 1683,0,@2298 1688,0,@2301 1693,0,@1107 1710,1,@1894 1726,1,@1626 1731,0,I48 1742,0,I24 1752,0,0 1793,0,@4698 1827,0,@1797 1834,1,@1798 1882,1,@323 1898,1,@2707 1910,1,@1994 1935,0,@4699 1946,1,@323 1960,0,1 1970,1,@2429 2006,1,@1690 2119,0,@989 2134,1,@4700 2165,0,0 2174,0,@2523 2182,1,@1109 2190,1,@1111 2224,0,@2523 2234,0,-1 2249,0,0 2256,0,@2523 2327,0,@2525 2340,1,@1113 2390,0,@4706 2442,1,@2308 2478,0,@4708 2522,0,@4709 2541,0,@2049 2558,1,@2069 2574,1,@4700 2609,0,@4710 2654,1,@1777 2696,0,0 2710,1,@2492 2746,0,@4712 2898,1,@2424 2949,0,@4713 2986,1,@2643 3030,1,@1126 3035,0,@1059 3062,0,0 3070,1,@937 3080,0,0 3086,1,@937 3096,0,0 3102,1,@937 3178,0,@4714 3222,0,@4715 3290,0,@4716 3417,0,@4717 3436,0,@989 3486,1,@2424 3509,0,0 3542,0,@4720 3593,0,@4722 3634,0,@4723 3754,0,@989 3802,1,@2424 3825,0,0 3872,0,@4724 3910,1,@2643 3935,0,@989 3982,1,@2424 4005,0,0 4041,0,@4725 4078,1,@1777 4091,0,0 4110,1,@4726 4131,0,0 4136,0,@989 4190,0,@4737 4233,0,@4738 4255,0,@2049 4263,0,@2165 4270,1,@2069 4288,0,9999 4293,0,@202 4298,1,@1003 4342,1,@1005 4374,1,@4700 4411,0,@2165 4418,1,@1126 4454,0,@4739 4508,0,@4740 4532,0,@2049 4546,1,@2069 4606,0,@4741 4650,0,@4742 4672,0,@2049 4678,0,@187 4686,1,@2069 4707,0,@1059 4726,1,@4700 4782,0,@4743 4834,1,@2463 4886,0,@4744 4930,0,@4745 4952,0,@2049 4958,0,@187 4966,1,@2069 5018,0,@4746 5062,0,@4747 5084,0,@2049 5090,0,@187 5098,1,@2069 5103,0,@187 5158,0,@4748 5202,0,@4749 5224,0,@2049 5230,0,@187 5238,1,@2069 5290,0,@4750 5334,0,@4751 5356,0,@2049 5362,0,@187 5370,1,@2069 5375,0,@187 5463,0,@989 5472,0,@4752 5483,0,0 5488,0,@4754 5499,0,0 2426:O3|@7320,@224,@2427 2427:S28|61737369676e54797065733a20656d7074797472656520666f756e64 2428:C2,36|3b650c7303ff55248b7a088b3424893c24ff720450bb030000008b420c56e91d00000090|@2433,63|22,0,1 31,1,@2429 2429:C2,124|3b650c7303ff552483fb017407bfc0127741eb05bf401377418b75008d76ec3b75087303ff5520897500c746fc04000000bb544a7841891e89460c8b5424048956088b4c240c894e0489c38b45008d40f03b45087303ff5520894500c740fc030000008970088b742408897004891889fa8b1c2483c41053ff220bc0|@2432,63|14,0,@1759 21,0,@1762 50,0,@2430 2430:C2,188|3b650c7303ff55248b7a0c5250bbbc1477418b4724ba703d754183c800e812f3fcff8b342450b8181475418b56180bc0ff128b5c24048b5424088b42088b530cff128b4c2404b8501475418b1183c800ff128b4424048b7818b81814754189faff128b742404b8b01577418b560c0bc0ff128b5c2404b8000375418b1383c800ff128b542408ff7424048b5c24048b4204e84a95feff8b4c2404b8010000008b51080bc0ff128b4424048b7808b80100000089fa83c40cff2283c800|@2431,63|14,0,@1766 22,0,@599 30,1,@601 39,0,@326 71,0,@328 90,0,@326 103,0,@1773 119,0,@312 146,1,@1676 155,0,0 174,0,0 2431:S28|50415253455f5452454528292e6572726f724e656172283529283129 2432:S25|50415253455f5452454528292e6572726f724e656172283529 2433:S36|50415253455f5452454528292e7061737332283629676976654572726f72283329283129 2434:O1|@2435 2435:C2,144|3b650c7303ff552483f801754150b8150000000bc0e83a4efeff8b75008d76ec3b75087303ff5520897500c746fc04000000c7460c01000000c7460801000000bb40970408895e04890689f7eb048b78085089f8ba50287741e87adcfeff8b70188b45008d40f03b45087303ff5520894500c740fc03000000bb544c784189188970088b142489500483c404c383c800|@2438,63|15,0,10 22,1,@1488 53,0,0 60,0,0 65,0,I48 85,0,@1801 90,1,@1803 122,0,@2436 2436:C2,172|3b650c7303ff5524528b5208ff12f7c00100000075688b3c248b308b5e088b0b83f901755e8b55008d52f03b55087303ff5520895500c742fc030000008b47048942088b7b04897a04c702050000008b45008d40ec3b45087303ff5520894500c740fc040000008b4e0c89480c8950088b56048950048b3e893889c2eb07e92000000089f28b45008d40f83b45087303ff5520894500c740fc01000000891083c404c3b80100000083c404c3|@2437,63|75,0,2 164,0,0 2437:S32|56414c55455f4f505328292e6c6f6f6b757056616c7565283429283129283129 2438:S29|56414c55455f4f505328292e6c6f6f6b757056616c7565283429283129 2439:S20|56616c7565206f7220636f6e7374727563746f72 2440:C2,152|3b650c7303ff552489c789d890e8a20000008b500483fa01753e8b580c89d80bc0e8c277feff83f8017406b810c47741c38b45008d40f43b45087303ff5520894500c740fc02000000ba10c477418950048918e9407efdff89fe89c18b41080bc0e8e696ffff83f80174178b410883c800e81a97ffff89d8bb01000000e9520000008b0424893424bb0100000089c78b410c57e9c80cffff|@2460,63|14,1,@2441 34,1,@1598 44,0,@2165 74,0,@2165 84,1,@1126 98,1,@2246 114,1,@2248 121,0,0 126,1,@2442 137,0,0 148,1,@1958 2441:C2,4|c383c800|@2275,1| 2442:C2,144|3b650c7303ff552489c68b4608e86696ffff83f801745f8b460883c800e89a96ffff83f809753553ff760c8b06ba084f784183c800e87e000000ba6050784190ff128b5c24048b542408895c240889c38b042483c40852e9440200008b1c24c704240300000089dabb010000008b460c52e9160cffff8b1c24c704240300000089dabb010000008b460c52e9fc0bffff|@2459,63|14,1,@2246 30,1,@2248 46,0,@2443 54,1,@2444 59,0,@2448 88,1,@2451 98,0,1 105,0,0 114,1,@1958 124,0,1 131,0,0 140,1,@1958 2443:O2|@2444,@7373 2444:C2,32|3b650c7303ff5524508b7a048b078d54240483c800e82200000083c404c30bc0|@2447,63|22,1,@2445 2445:C2,152|3b650c7303ff552483f8017506b801000000c38b3852ff7704ff7708ff70048b1f8b42fcff154094040883f80174598b75008d76f43b75087303ff5520897500c746fc020000008b5c2404895e048b5424088916568b4424048b542410e89effffff8b4d008d49f43b4d087303ff5520894d00c741fc020000008941048b0424890189c883c414c38b04248b54240c83c410e969ffffff90|@2446,63|14,0,0 38,0,I24 2446:S42|5052494e545f5441424c4528292e6765744f7665726c6f6164732831297365617263684c697374283129 2447:S29|5052494e545f5441424c4528292e6765744f7665726c6f616473283129 2448:O1|@2449 2449:C2,72|3b650c7303ff552483f8017506b801000000c38b38ff378b400483c800e8deffffff8b7d008d7ff43b7d087303ff5520897d00c747fc020000008947048b0424890789f883c404c3|@2450,33|14,0,0 2450:S38|56414c55455f4f505328292e6f7665726c6f6164547970652832296765745479706573283129 2451:C2,216|3b650c7303ff55248b7c240483ff01743489c189c8e89a81feff83f801741789c8e8be81feff51538b40040bc0e83a72feff89c6eb1ab8f0517841ff552cbe01000000eb0b50530bc0e8da00000089c689f083c800e85a74fdff83f801746a89f0e87e74fdff508b4424040bc0e8ea5cffff8b75008d76f43b75087303ff5520897500c746fc020000008b1c24895e0489068b55008d52f43b55087303ff5520895500c742fc02000000c74204010000008932c74424100300000089d38b44240883c40ce92309ffffb8c452784190ff552cb80100000090|@2458,63|22,1,@1644 34,1,@1645 46,1,@1595 55,0,@2452 63,0,0 74,1,@2454 86,1,@1102 98,1,@1103 110,1,@2129 173,0,0 183,0,1 197,1,@1958 202,0,@2456 211,0,0 2452:O3|@7320,@224,@2453 2453:S26|676574526573756c74202d206e6f7420612066756e6374696f6e 2454:C2,100|3b650c7303ff552489c689f090e87a80feff83f801744689f0e89e80feff8b3089f083c800e86673feff83f801742789f189c80bc0e88673feff8b7804f7c701000000750a8b378b4604e9f570feff89c8e9ee70feff89f0e9e770feff89f0e9e070feff|@2455,63|14,1,@1644 26,1,@1645 38,1,@1600 54,1,@1601 75,1,@1595 82,1,@1595 89,1,@1595 96,1,@1595 2455:S23|545950455f5452454528292e6669727374417267283129 2456:O3|@7320,@224,@2457 2457:S42|67656e6572616c6973654f7665726c6f6164202d20617267206973206e6f742061207479706520766172 2458:S33|545950455f5452454528292e67656e6572616c6973654f7665726c6f6164283329 2459:S27|56414c55455f4f505328292e6f7665726c6f616454797065283229 2460:S51|50415253455f5452454528292e706173733228362961737369676e56616c756573283629696e7374616e636554797065283229 2461:C2,96|3b650c7303ff55248b7a0450ff7208bbbc1477418b4724ba703d754190e8d2e9fcff8b74240450b8b01577418b560c90ff128b5c2408b8000375418b1383c800ff128b5424088b4c240c8954240c8b1c248b44240483c40c51e9428cfeff0bc0|@2462,63|16,0,@1766 24,0,@599 30,1,@601 40,0,@1773 55,0,@312 90,1,@1676 2462:S36|50415253455f5452454528292e7061737332283629666f756e644e656172283129283129 2463:C2,372|3b650c7303ff552453e81e6ffeff89c689f083c800e85a7efeff83f801747189f389d80bc0e87a7efeff89d890e8427efeff83f801740b89d8e8667efeff89c2eb0db8503d7541ff552cba010000008b4d008d49ec3b4d087303ff5520894d00c741fc04000000b8cc55784189018b7c241089790c8b74240c8971088b5c24088959045268a8797741518b5c240ceb05e9150000008b020bc0e8de2bffff8b14248b420483c408c20c005050566a016a016a018d5c241053bb1f4e0000b8c8cc744183c800e8da4bfdff8b45008d40f43b45087303ff5520894500c740fc020000008b54240489108b4c24088948040bc0e8724cfdff89c78b45008d40f43b45087303ff5520894500c740fc020000008978048b74240c893089fb0bc0e8c276fdff8b55008d52ec3b55087303ff5520895500c742fc04000000b954567841890a8b7c241c897a0c8b7424188972088b4c2414894a045368a87977415289c38b44240c0bc0e8122bffff8b042483c414c20c0090|@2468,63|10,1,@1595 22,1,@1644 38,1,@1645 46,1,@1644 58,1,@1645 67,0,@597 75,0,0 104,0,@2464 133,0,@2049 154,1,@2069 185,0,9999 190,0,@202 198,1,@1003 242,1,@1005 286,1,@1126 315,0,@2467 344,0,@2049 358,1,@2069 2464:C2,48|3b650c7303ff5524bfec7975418b3424893c24ff7004ff7008ff720cff7208ff72048b18b81856784156e95128ffff90|@2466,63|9,0,@832 37,0,@2465 43,1,@2064 2465:S11|43616e277420756e696679 2466:S32|545950455f5452454528292e756e69667928352963616e744d61746368283129 2467:C2,48|3b650c7303ff5524bfec7975418b3424893c24ff7004ff7008ff720cff7208ff72048b18b81856784156e9c927ffff90|@2466,63|9,0,@832 37,0,@2465 43,1,@2064 2468:S20|545950455f5452454528292e6170706c79283529 2469:C2,96|3b650c7303ff55248b7a0450ff7208bbbc1477418b4724ba703d754190e8aae6fcff8b74240450b8b01577418b560c90ff128b5c2408b8000375418b1383c800ff128b5424088b4c240c8954240c8b1c248b44240483c40c51e91a89feff0bc0|@2462,63|16,0,@1766 24,0,@599 30,1,@601 40,0,@1773 55,0,@312 90,1,@1676 2470:C2,96|3b650c7303ff55248b7a0450ff7208bbbc1477418b4724ba703d754190e82ee6fcff8b74240450b8b01577418b560c90ff128b5c2408b8000375418b1383c800ff128b5424088b4c240c8954240c8b1c248b44240483c40c51e99e88feff0bc0|@2462,63|16,0,@1766 24,0,@599 30,1,@601 40,0,@1773 55,0,@312 90,1,@1676 2471:C2,48|3b650c7303ff5524bfec7975418b3424893c24ff7004ff7008ff720cff7208ff72048b18b81856784156e96926ffff90|@2466,63|9,0,@832 37,0,@2465 43,1,@2064 2472:C2,96|3b650c7303ff55248b7a0450ff7208bbbc1477418b4724ba703d754190e866e5fcff8b74240450b8b01577418b560c90ff128b5c2408b8000375418b1383c800ff128b5424088b4c240c8954240c8b1c248b44240483c40c51e9d687feff0bc0|@2462,63|16,0,@1766 24,0,@599 30,1,@601 40,0,@1773 55,0,@312 90,1,@1676 2473:C2,48|3b650c7303ff5524bfec7975418b3424893c24ff7004ff7008ff720cff7208ff72048b18b81856784156e9a125ffff90|@2466,63|9,0,@832 37,0,@2465 43,1,@2064 2474:C2,92|3b650c7303ff552483f8017506b801000000c352ff70048b5afc8b008b52f80bc0e8bedaffff508b4424048b5424080bc0e8caffffff8b7d008d7ff43b7d087303ff5520897d00c747fc020000008947048b3424893789f883c40cc3|@413,63|14,0,0 34,1,@2425 2475:C2,36|3b650c7303ff55248b7a088b3424893c24ff720450bb030000008b420c56e959f0ffff90|@2476,63|22,0,1 31,1,@2429 2476:S56|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c7565732832296d7367466e283129 2477:C2,152|3b650c7303ff552483f8017506b801000000c350508b3852ff7004ff378b5af88b47048b52fc83c800e8bed9ffff8d74240c8b1c24891e8d54240c8942048b4d008d49f43b4d087303ff5520894d00c741fc020000008b44240c89018b7c2410897904518b4424088b54240c90e88effffff8b75008d76f43b75087303ff5520897500c746fc020000008946048b1c24891e89f083c418c3|@413,63|14,0,0 42,1,@2425 2478:C2,344|3b650c7303ff55248b7a04f7c7010000007503ff553889fe83c60270f68b4c2408508b45008d40f43b45087303ff5520894500c740fc02000000bfe85b784189388970045253568b1183c800ff128b7424048b5c24088b45008d40f03b45087303ff5520894500c740fc03000000ba485d784189108b4b108948088b3c248978048b1690ff128b7424088b5efc8b55008d52ec3b55087303ff5520895500c742fc04000000b9ec5e7841890a8b430c89420c8b7ef8897a088b4e0c894a0450505089e389d0e822bbfeff50505089e3b80100000090e8322efdff8b5c242cb8010000008d5424280bc0e83e04000050508b5c2434b8010000008d542430e8b62200008b1c248b4424308d54242ce8c62700008b4424248b78108b45008d40f03b45087303ff5520894500c740fc03000000be6c94784189308978088b5c24288958048b5424100bc0ff12b8589c754183c42cc2080083c800|@2658,63|59,0,@2479 111,0,@2483 166,0,@2487 198,1,@1777 208,0,0 214,1,@937 223,0,0 234,1,@2489 245,0,0 254,1,@2613 270,1,@2622 306,0,@2657 331,0,@989 2479:C2,20|3b650c7303ff55248b5a048b4004e91d00000090|@2482,63|15,1,@2480 2480:C2,168|3b650c7303ff552453e84267feff89c689f083c800e87e69fdff83f801740b89f0e8a269fdff89c3eb0db8503d7541ff552cbb0100000089d98b59048b0183c800e87a5efeff89c68b59048b01e85e6dfeff505051566a03508d5c2410538b5c241cb8c8cc74410bc0e85a44fdff8b45008d40f43b45087303ff5520894500c740fc020000008b54240489108b4c24088948040bc0e8f244fdff89c38b042483c410e96169fdff90|@2481,63|10,1,@1595 22,1,@1102 34,1,@1103 43,0,@597 51,0,0 66,1,@1586 78,1,@1608 99,0,@202 106,1,@1003 150,1,@1005 163,1,@1104 2481:S27|545950455f5452454528292e736574547661724c6576656c283229 2482:S61|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c4465636c61726174696f6e283429552d283129 2483:C2,64|3b650c7303ff55248b7a0852ff70048b008b572cff12f7c001000000750d8b1c248b0083c408e9310000008b7424048b5e048b042483c408e993feffff83c800|@2486,63|39,1,@2484 57,1,@2480 2484:C2,184|3b650c7303ff5524505383c800e8b265feff89c689f083c800e8ee67fdff83f801740b89f0e81268fdff89c3eb0db8503d7541ff552cbb01000000538b44240490e87e65feff89c189c883c800e8ba67fdff83f801740989c8e8de67fdffeb0fb8503d75410bc0ff552cb8010000008b3c2489c68b5f048b07e83a6bfeff89c18b5e048b06e82e6bfeff5123c8f6c101597503ff55383bc87e0e8b5c240489f883c40ce9d467fdff8b5c240889f083c40ce9c667fdff0bc0|@2485,63|14,1,@1595 26,1,@1102 38,1,@1103 47,0,@597 55,0,0 66,1,@1595 78,1,@1102 90,1,@1103 97,0,@597 107,0,0 122,1,@1606 134,1,@1606 164,1,@1104 178,1,@1104 2485:S27|545950455f5452454528292e6c696e6b5479706556617273283229 2486:S69|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c4465636c61726174696f6e2834293c7061747465726e3e2d283129 2487:C2,76|3b650c7303ff5524ff720cff7208ff7204bbf411774183c800e8aeb3fcff8b7c24048b74240c897c240c8b1c248b542408895c240889442404bb0300000089d083c40456e987eaffff83c800|@2488,63|18,0,@1757 26,1,@323 58,0,1 69,1,@2429 2488:S66|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c4465636c61726174696f6e2834296e6577456e762d283129 2489:C2,328|3b650c7303ff552483fb017506b801000000c38b3b83ff01750a8b5b04b803000000ebdc8b75008d76f83b75087303ff5520897500c746fc01000040c706030000008b4d008d49e83b4d087303ff5520894d00c741fc050000005250ff37ff7708ff730456ff72dcff72e851ba0461784189118971108b7c240489790c8941088b5c24088959048b5424206a01ff72f051ff74242489c38b4424248b52f883c800e8720100008b4c240c8b3983ff0174338b7424208b5ef88b530483fa0374218b4bfc8b790c50bbcc9f75418b4724ba703d754190e80eddfcff83f801742feb0650eb2a50eb278b7424248b5ef88b53fcff74241cff74241c68ac7d7841bb010000008b420c83c800e80ee9ffff8b5c24148b4424208b54242483c800e8defeffff8b75008d76f43b75087303ff5520897500c746fc020000008946048b1c24891e89f083c428c3|@2612,63|14,0,0 30,0,1 62,0,1 109,0,@2490 162,1,@2492 200,0,@995 208,0,@599 214,1,@601 250,0,@2611 255,0,0 266,1,@2429 2490:C2,60|3b650c7303ff55248b7a10c7070100000052508b520c0bc0ff128b7424048b5e0883fb01740b8b04248b560483c408ff22b80100000083c408c30bc0|@2491,63|13,0,0 50,0,0 2491:S81|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c4465636c61726174696f6e2834296d617050726f63657373283229656e74657256616c73283129 2492:C2,2412|3b650c7303ff55248b7c24048b37f7c601000000741583fee17c1583fe1d7f15b9f26178418d4cb17cffe1e902010000e9fd000000e9f8000000e9dc080000909090e9eb000000909090e9e3000000909090e9db000000909090e9d3000000909090e9cb000000909090e98a030000909090e9e1070000909090e9bb000000909090e9ab000000909090e9a3000000909090e99b000000909090e993000000909090e9c0060000909090e983000000909090e97b000000909090e973000000909090e996030000909090e963000000909090e95b000000909090e953000000909090e94b000000909090e943000000909090e93b000000909090e914050000909090e97a050000909090e923000000909090e91b000000909090e913000000909090e9d0040000909090e9e4070000909090b8589c7541c210005050525053ff7704ff7708ff770c8d5c24188b44240890e87e69feff8b4424148b78fc8b770cbbcc9f75418b4624ba703d7541e85edafcff83f80175108b5c240c83fb017407baf8f97541eb72bb409704088b442418ff154094040883f80174268b5c24148b53108b4424088b521883c800ff12f7c00100000075048b10eb6ebaf8f97541eb678b5c24148b53108b4bfc8b45008d40ec3b45087303ff5520894500c740fc04000000bf406b784189388b710c89700c8b7c2424897808eb05e92a0000008b5c2410895804ff723068a04b784168806b784168f8f97541508b5a188b44241c0bc0e82addfeff89c289d189c890e84e81ffff83f80174618b7c243083ff0174288b7424148b5efc51ff742428ff74241868946b78418b530cbb0300000089d00bc0e89ee5ffffeb01518b7424088b1c24891e89d890e80aeaffff89c18b41040bc0e88e07000083f80174128b410483c800e8b2070000eb0ee9430000008b410c90e81261feff83f8017402eb218b4424188b78fcff742428ff74241868206c7841bb030000008b470ce836e5ffff8b1c24b80100000083c800e8f2e8ffffeb7050506a016a016a018d44240c508b5c2444b8c8cc744183c800e82a3cfdff8b45008d40f43b45087303ff5520894500c740fc020000008b3c2489388b74240489700483c800e8c23cfdff8b5d008d5bf83b5d087303ff5520895d00c743fc01000040c703010000008b55008d52f8eb05e9980000003b55087303ff5520895500c742fc01000040c70201000000535289c38b442418e8220700008b4c241c8b79fc50ff74241c8b5f0c8b442418e84a45fdff8b7424208b5efcff730cff7424206a018b5ef88b442420e8860700008b45008d40f43b45087303ff5520894500c740fc020000008b14248950048b4c241489088b5424340bc0ff128b4424108b3c24893889f8e8a659ffff83c4088b742404890683c424c210005250ff7704bb030000008b470c83c800e896e8ffff8b7c24088b77fc8b5d008d5bf03b5d087303ff5520895d00c743fc03000000ba8c6e784189138b4c2410894b088b560c89530452ff74240853bba433754190e832eeffff8b0c24890183c40cc210008b77048b0e83f9f175718b4a10525053ff7708ff7604ff7608ff7118ff7130ff72fc8b14248b4d008d49ec3b4d087303ff5520894d00c741fc04000000bf086f784189398b720c89710c8b7c2428897908894104ff74240468a04b784168806b784168f8f97541518b5c241c8b442424e87edafeff89c689f0eb05e971000000e89e7effff83f80174178b5c240c893389f3b80100000090e8d6e6ffff89c1eb6d89f090e88a08000083f8017407bb01000000eb358b5c24208b53fcff720cbbb86f78418b442414e8d6abfcffff74242cff74242450bb030000008b44240c90e8c2e2ffff89c383c404b9589c7541eb328b72fc525053ff7708ff7424145068d86f7841bb030000008b460ceb05e91000000090e88ee2ffffb9589c7541505050505051ff742438ff742438ff742438ff7424248b5c242c8b4424308b542434e85efaffff8b5c24248b53fc8b4d008d49f03b4d087303ff5520894d00c741fc03000000bf1070784189398b74242c8971088b7a0c897904897c24388b5c2420895c2434894c243089c38b04248b4c242883c43051e98decffff5250538b47048d54240ce8ce0800008b7c240c83c42057e9c562fdff525053ff7704ff77088b470c8d5424140bc0e82e0900008b7c24108b77fc8b5d008d5bec3b5d087303ff5520895d00c743fc04000000ba1872784189138b4e0c894b0c8b5424188953088b54240c89530490e83659fdff8b5c240483c800e82a5cfdff8b0c24890183c414c210005250538b47048d54240c0bc0e8560a00008b7d008d7ff43b7d087303ff5520897d00c747fc02000000c747040100000089075050b87c75784183c800e8465efdff89fe90e8865efdff83f801742e8b5d008d5bf83b5d087303ff5520895d00c743fc01000040ba7c757841891389e1c701ffffffff89e0895804eb1289e3c7030100000089e2b97c757841894a048b45008d40f43b45087303ff5520894500c740fc020000008b3c2489388b5c240489580489c28b45008d40f03b45087303ff5520894500c740fc03000000895008b9a475784189480489308b7c241483c42857e93d5efdff5250ff7704ff74241cff74241cff74241cff77080bc0e87ef8ffff8b7c24088b77fc8b5d008d5be83b5d087303ff5520895d00c743fc05000000bae07a784189138b4f10894b108b54241089530c8b560c8953088b7424048973048b5424088b72fc50ff760cff74240c8b44240ce8729cffff8b5c240c8b53fc8b4d008d49f03b4d087303ff5520894d00c741fc03000000b8dc7b784189018b7c24148979088b720c8971048b45008d40ec3b45087303ff5520894500c740fc04000000bb587c7841891889700c8b5c240889580889480468a8797741508b5c240c8b4424080bc0e8b216ffff8b44240483c410c21000525053ff77086a03ff742420ff742420ff77040bc0e88ef7ffff50ff742424ff742424ff742424ff7424108b5c24188b44241c8b5424200bc0e86af7ffff8b7c24108b77fc8b5d008d5bf03b5d087303ff5520895d00c743fc03000000baa47c784189138b4c2418894b088b560c8953048b7d008d7fec3b7d087303ff5520897d00c747fc04000000ba207d784189178b560c89570c8b74240c897708895f0468a87977415789c38b44240890e8f615ffff8b042483c414c21000b8acb77541c2100050506a016a016a018d44240c50bb1f4e0000b8c8cc744183c800e8ee35fdff8b45008d40f43b45087303ff5520894500c740fc020000008b3c2489388b7424048970048b5c240883c41c53e98136fdff90|@2610,63|33,0,$2492+58 307,0,@989 338,1,@1626 353,0,@995 361,0,@599 366,1,@601 385,0,@1198 392,0,I48 402,0,I24 443,0,@1198 484,0,@2493 521,0,@2434 526,0,@2494 531,0,@1198 546,1,@1894 558,1,@2249 593,0,@2495 601,0,1 610,1,@2429 630,1,@2441 642,1,@2496 658,1,@2497 674,1,@1598 701,0,@2498 706,0,1 714,1,@2429 722,0,0 730,1,@2440 754,0,@202 762,1,@1003 806,1,@1005 836,0,0 873,0,0 886,1,@2499 910,1,@1033 938,1,@2501 998,1,@2153 1023,0,1 1034,1,@2442 1070,0,@2505 1096,0,@521 1102,1,@2463 1179,0,@2506 1206,0,@2434 1211,0,@2494 1216,0,@1198 1230,1,@1894 1246,1,@2249 1264,0,0 1270,1,@2440 1282,1,@2507 1292,0,0 1309,0,@2509 1318,1,@323 1332,0,1 1342,1,@2429 1352,0,@989 1373,0,@2510 1378,0,1 1394,1,@2429 1399,0,@989 1474,0,@2511 1523,1,@2463 1538,1,@2512 1551,1,@1120 1574,1,@2513 1610,0,@2515 1638,1,@1091 1650,1,@1099 1678,1,@2517 1709,0,0 1718,0,@2523 1726,1,@1109 1734,1,@1111 1768,0,@2523 1778,0,-1 1793,0,0 1800,0,@2523 1873,0,@2525 1891,1,@1113 1954,0,@2603 2006,1,@2308 2042,0,@2606 2086,0,@2607 2106,0,@2049 2122,1,@2069 2230,0,@2608 2274,0,@2609 2297,0,@2049 2310,1,@2069 2324,0,@1059 2345,0,9999 2350,0,@202 2358,1,@1003 2407,1,@1005 2493:C2,36|3b650c7303ff55248b7a088b3424893c24ff720450bb030000008b420c56e959deffff90|@2433,63|22,0,1 31,1,@2429 2494:S11|436f6e7374727563746f72 2495:S48|4964656e746966696572206265666f72652060617327206d757374206e6f74206265206120636f6e7374727563746f72 2496:C2,24|3b650c7303ff5524ff15609e040889c283f20289d0c30bc0|@2494,5|10,0,I105 2497:C2,4|8b00c390|@2494,1| 2498:S41|436f6e7374727563746f72206d757374206265206170706c69656420746f20736f6d657468696e672e 2499:C2,88|8b7d008d7ff03b7d087303ff5520897d00c747fc030000008b7424048977088b542408895704c707030000008b4d008d49ec3b4d087303ff5520894d00c741fc0400000089590c897908c74104ffffffff890189c8c20800|@2500,63|40,0,1 77,0,-1 2500:S27|5354525543545f56414c5328292e6d616b654c6f63616c56283429 2501:C2,284|3b650c7303ff55248b7c240c5053bbcc9f75418b4724ba703d75410bc0e87ad0fcff83f801740bb80100000083c408c20c00bbfccc74418b44240490ff154094040883f8017402eb60bbd01d75418b4424040bc0ff154094040883f8017402eb6cbbb40578418b4424040bc0ff154094040883f8017402eb54bbc00578418b4424040bc0ff154094040883f8017402eb3cbbcc0578418b4424040bc0ff154094040883f8017407eb24e91f0000008b74240c83fe017459bb845776418b442404ff154094040883f8017502eb438b5c2404b8246e784183c800e8eea4fcffbb486e78410bc0e8e2a4fcff8b7424148b5c24108b142489542414895c24108944240cbb0300000089f083c408e9c0dbffffb80100000083c408c20c0090|@2504,63|15,0,@995 23,0,@599 30,1,@601 40,0,0 51,0,@206 62,0,I24 74,0,@361 86,0,I24 98,0,@2303 110,0,I24 122,0,@2304 134,0,I24 146,0,@2305 158,0,I24 184,0,@1387 194,0,I24 210,0,@2502 218,1,@323 223,0,@2503 230,1,@323 258,0,1 268,1,@2429 273,0,0 2502:S25|526562696e64696e67206f722073706563696679696e672022 2503:S12|2220697320696c6c6567616c 2504:S39|50415253455f5452454528292e7061737332283629636865636b466f724275696c74496e283529 2505:C2,96|3b650c7303ff55248b7a0450ff7208bbbc1477418b4724ba703d754190e8dacefcff8b74240450b8b01577418b560c90ff128b5c2408b8000375418b1383c800ff128b5424088b4c240c8954240c8b1c248b44240483c40c51e94a71feff0bc0|@2462,63|16,0,@1766 24,0,@599 30,1,@601 40,0,@1773 55,0,@312 90,1,@1676 2506:C2,36|3b650c7303ff55248b7a088b3424893c24ff720450bb030000008b420c56e991daffff90|@2433,63|22,0,1 31,1,@2429 2507:C2,40|3b650c7303ff55248b18b80cfa754190ff154094040883f8017406b803000000c3b801000000c390|@2508,63|11,0,@1199 18,0,I24 28,0,1 34,0,0 2508:S33|5354525543545f56414c5328292e6973556e646566696e656456616c7565283129 2509:S21|206973206e6f74206120636f6e7374727563746f72 2510:S46|436f6e7374727563746f7220696e2061207061747465726e20776173206e6f7420616e206964656e746966696572 2511:C2,96|3b650c7303ff55248b7a0450ff7208bbbc1477418b4724ba703d754190e856cdfcff8b74240450b8b01577418b560c90ff128b5c2408b8000375418b1383c800ff128b5424088b4c240c8954240c8b1c248b44240483c40c51e9c66ffeff0bc0|@2462,63|16,0,@1766 24,0,@599 30,1,@601 40,0,@1773 55,0,@312 90,1,@1676 2512:C2,104|3b650c7303ff552483f8017506b801000000c352ff7004ff7210ff720cff7208ff308b5af48b42f88b52fc0bc0e8faf0ffff508b4424048b5424080bc0e8beffffff8b7d008d7ff43b7d087303ff5520897d00c747fc020000008947048b3424893789f883c40cc3|@413,63|14,0,0 46,1,@2492 2513:C2,160|3b650c7303ff552483f8017506b801000000c38b3852ff37ff7004ff7210ff720cff7208ff77048b5af48b42f88b52fc90e872f0ffff505089e65689c38b442410e81e4bfdff8b5d008d5bf43b5d087303ff5520895d00c743fc020000008b142489138b4c2404894b04538b44240c8b5424140bc0e886ffffff8b7d008d7ff43b7d087303ff5520897d00c747fc020000008947048b3424893789f883c418c3|@2514,63|14,0,0 50,1,@2492 66,1,@1079 2514:S65|50415253455f5452454528292e706173733228362961737369676e56616c75657328362970726f636573735061747465726e2836296d61704c6162656c73283129 2515:C2,36|3b650c7303ff55248b7a088b3424893c24ff720450bb030000008b420c56e981d7ffff90|@2516,63|22,0,1 31,1,@2429 2516:S64|50415253455f5452454528292e706173733228362961737369676e56616c75657328362970726f636573735061747465726e283629706174547970652d283129 2517:C2,108|3b650c7303ff5524505052506a016a016a018d7c241457bb1f4e0000b8c8cc7441e81a2efdff8b45008d40f43b45087303ff5520894500c740fc020000008b74240889308b5c240c8958040bc0e8b22efdff508b4424048d5424140bc0e8260000008b042483c414c383c800|@2522,63|24,0,9999 29,0,@202 34,1,@1003 78,1,@1005 94,1,@2518 2518:C2,204|3b650c7303ff552483f8017506b801000000c38b7af452ff7004ff7710ff770cff7708ff308b5ff48b47f88b57fc83c800e85aeeffff8b7424048b5ef48b53fc8b4afc8b7d008d7ff03b7d087303ff5520897d00c747fc03000000ba1074784189178b53048957088b510c8957048b55008d52ec3b55087303ff5520895500c742fc0400000050ff76ecff710cff73f85752bb8c747841891a8b4c240c894a0c8b742408897208897a0468a8797741528b5c241890e8d60cffff8b4424188b54241c83c420e936ffffff0bc0|@2521,63|14,0,0 50,1,@2492 92,0,@2519 147,0,@2520 171,0,@2049 182,1,@2069 2519:C2,96|3b650c7303ff55248b7a0450ff7208bbbc1477418b4724ba703d754190e856c9fcff8b74240450b8b01577418b560c90ff128b5c2408b8000375418b1383c800ff128b5424088b4c240c8954240c8b1c248b44240483c40c51e9c66bfeff0bc0|@2462,63|16,0,@1766 24,0,@599 30,1,@601 40,0,@1773 55,0,@312 90,1,@1676 2520:C2,48|3b650c7303ff5524bfec7975418b3424893c24ff7004ff7008ff720cff7208ff72048b18b81856784156e99109ffff90|@2466,63|9,0,@832 37,0,@2465 43,1,@2064 2521:S79|50415253455f5452454528292e706173733228362961737369676e56616c75657328362970726f636573735061747465726e28362970726f636573734c6973742831296170706c794c697374283129 2522:S67|50415253455f5452454528292e706173733228362961737369676e56616c75657328362970726f636573735061747465726e28362970726f636573734c697374283129 2523:O6|@2525,1,0,@2526,@2528,@2524 2524:O2|-1,@7383 2525:S4|6c697374 2526:O2|@2527,0 2527:O3|3,@7375,79992 2528:O2|-1,@7376 2529:O3|1,@202,@2530 2530:O2|@2532,@2531 2531:O2|@2583,0 2532:O4|@2304,@989,@2534,@2533 2533:O3|1,@2577,@2576 2534:O2|-1,@2535 2535:O2|5,@2536 2536:O2|-1,@2537 2537:O5|0,@2539,@2572,@7380,@2538 2538:O2|10,@2573 2539:O3|@214,@2541,@2540 2540:O2|@453,@2564 2541:O2|@218,@2542 2542:O3|@221,0,@2543 2543:O10|0,@2545,@2555,@2544,0,0,0,0,0,0 2544:O1|@2561 2545:O1|@2546 2546:O2|-1,@2547 2547:O5|0,@432,@443,@7377,@2548 2548:O2|-7,@2549 2549:O8|@2550,@2304,0,0,1,0,0,0 2550:O4|4,@2552,@2551,1 2551:O2|-3,I218 2552:O2|@2553,0 2553:O4|4,@448,@2554,1 2554:O2|-3,I105 2555:O1|@2556 2556:O2|-1,@2557 2557:O5|0,@432,@2559,@7378,@2558 2558:O2|-7,@2560 2559:O5|-5,2,1,0,0 2560:O8|@450,@2304,0,0,1,0,0,0 2561:O2|-1,@2562 2562:O5|0,@432,@2563,@7379,@2558 2563:O5|-5,3,1,0,0 2564:O4|@2566,@2568,@2567,@2565 2565:O1|@2571 2566:O3|@2568,@2567,@2565 2567:O1|@2570 2568:O1|@2569 2569:C2,24|3b650c7303ff5524ff15609e040889c283f20289d0c30bc0|@2304,5|10,0,I105 2570:C2,4|c383c800|@2304,1| 2571:C2,4|c383c800|@2304,1| 2572:O2|-3,@2566 2573:O2|@443,@2574 2574:O2|@2559,@2575 2575:O2|@2563,0 2576:O4|-3,@2526,@2525,@2582 2577:O4|-2,1,@2578,0 2578:O2|@2580,@2579 2579:O2|@2581,0 2580:O2|49,@2527 2581:O2|50,@2576 2582:O2|0,@2523 2583:O4|@2303,@207,@2584,@2576 2584:O2|-1,@2585 2585:O2|5,@2586 2586:O2|-1,@2587 2587:O5|0,@2588,@2602,@7381,@473 2588:O3|@214,@2590,@2589 2589:O2|@453,@2598 2590:O2|@218,@2591 2591:O3|@221,0,@2592 2592:O10|0,@2593,@479,0,0,0,0,0,0,0 2593:O1|@2594 2594:O2|-1,@2595 2595:O5|0,@432,@443,@7382,@2596 2596:O2|-7,@2597 2597:O8|@485,@2303,0,0,1,0,0,0 2598:O2|@2600,@2599 2599:O1|@2601 2600:O2|@2599,0 2601:C2,20|83f8017506b803000000c3b801000000c383c800|@2303,1|6,0,1 12,0,0 2602:O2|-3,@2600 2603:C2,96|3b650c7303ff55248b7a108b75008d76ec3b75087303ff5520897500c746fc04000000bb5c7b7841891e8b5a08895e0c8b4a0c894e088b4a04894e048b5f308b1424891c246890047841683c0578416890c67541568b5f2052e9cac5feff0bc0|@2605,63|36,0,@2604 70,0,@2298 75,0,@2301 80,0,@1107 90,1,@1894 2604:C2,36|3b650c7303ff55248b7a088b3424893c24ff720450bb030000008b420c56e93dceffff90|@2433,63|22,0,1 31,1,@2429 2605:S55|50415253455f5452454528292e706173733228362961737369676e56616c756573283629707441737369676e5479706573283329283129 2606:C2,96|3b650c7303ff55248b7a0450ff7208bbbc1477418b4724ba703d754190e88ac1fcff8b74240450b8b01577418b560c90ff128b5c2408b8000375418b1383c800ff128b5424088b4c240c8954240c8b1c248b44240483c40c51e9fa63feff0bc0|@2462,63|16,0,@1766 24,0,@599 30,1,@601 40,0,@1773 55,0,@312 90,1,@1676 2607:C2,48|3b650c7303ff5524bfec7975418b3424893c24ff7004ff7008ff720cff7208ff72048b18b81856784156e9c501ffff90|@2466,63|9,0,@832 37,0,@2465 43,1,@2064 2608:C2,96|3b650c7303ff55248b7a0450ff7208bbbc1477418b4724ba703d754190e8c2c0fcff8b74240450b8b01577418b560c90ff128b5c2408b8000375418b1383c800ff128b5424088b4c240c8954240c8b1c248b44240483c40c51e93263feff0bc0|@2462,63|16,0,@1766 24,0,@599 30,1,@601 40,0,@1773 55,0,@312 90,1,@1676 2609:C2,48|3b650c7303ff5524bfec7975418b3424893c24ff7004ff7008ff720cff7208ff72048b18b81856784156e9fd00ffff90|@2466,63|9,0,@832 37,0,@2465 43,1,@2064 2610:S53|50415253455f5452454528292e706173733228362961737369676e56616c75657328362970726f636573735061747465726e283629 2611:S39|5061747465726e20646f6573206e6f74206465636c61726520616e79207661726961626c65732e 2612:S69|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c4465636c61726174696f6e2834296d617050726f63657373283229 2613:C2,716|8d7c24a03b7d0c7303ff552883fb01751e8b5c240483fb017508b801000000c20400b814817841ff552cb8010000008b3b83ff0175128b442404894424048b5b04b803000000ebb88b742404f7c601000000757283f801744a8b4af85250ff7704ff7708ff7304ff36ff7604ff72e0ff71108b1c248b4d008d49f03b4d087303ff5520894d00c741fc03000000ba5081784189118b7c24048979088b7318897104eb1d8b4af85250ff7704ff7708ff7304ff36ff7604ff71108b1c248b4b18508b542420eb05e9f30100008b7af88b77108b5a088b42f48b7c24208b57f88b7a108b55008d52ec3b55087303ff5520895500c742fc0400000051ff7620ff7610ff7630ff7614ff7628ff7304ff7004ff772c52be9881784189328b5c240c895a0c8b4424088942088b7c2404897a048b7424488b5ef88b43108b7d008d7fc83b7d087303ff5520897d00c747fc0d0000008b4c2418894f3089572c8b5424108957288b4824894f248b5424208957208b501c89571c8b7424248977188b7424148977148b74241c8977108b700c89770c8b5808895f088b5804895f048b3089378b7424488b4ef857ff742440ff7108ff76f08b5c24508b4424508b7c24588b57f88b52fc90e87eb3ffff8b4c24488b79f88b77fc8b5d008d5bf03b5d087303ff5520895d00c743fc03000000baf881784189138b57f88953088b4e0c894b048b4d008d49ec3b4d087303ff5520894d00c741fc04000000bf7482784189398b560c89510c8b7c243c89790889590468a87977415189c38b44243c83c800e84a00ffff8b74244483fe0174578b5c24408b0b83f9fb75128b5b083b650c7303ff5524ebecba0100000083f90d7507ba03000000eb05ba0100000083fa0175248b4424488b78f88b77fcff77f8ff74244068c0827841bb030000008b460c90e8eec8ffff8b5c2430895c24508b5c24388b4424448b54244883c44ce942fdffffb814817841ff552cb80100000090|@2621,63|27,0,0 35,0,@2614 43,0,0 66,0,1 142,0,@2616 276,0,@2617 454,1,@2424 493,0,@2618 536,0,@2619 559,0,@2049 574,1,@2069 612,0,0 622,0,1 629,0,0 656,0,@2620 661,0,1 670,1,@2429 703,0,@2614 711,0,0 2614:O3|@7320,@224,@2615 2615:S35|636865636b54797065733a206261646c792d666f726d65642070617273652d74726565 2616:C2,44|3b650c7303ff552452508b520883c800ff1283f801750f8b7c24048b04248b570483c408ff2283c408c30bc0|@950,63| 2617:C2,68|3b650c7303ff552452508b520c83c800ff1283f80175278b7c24048b04248b570883c800ff1283f801750f8b7424048b04248b560483c408ff2283c408c383c408c30bc0|@950,63| 2618:C2,96|3b650c7303ff55248b7a0450ff7208bbbc1477418b4724ba703d754190e86ebbfcff8b74240450b8b01577418b560c90ff128b5c2408b8000375418b1383c800ff128b5424088b4c240c8954240c8b1c248b44240483c40c51e9de5dfeff0bc0|@2462,63|16,0,@1766 24,0,@599 30,1,@601 40,0,@1773 55,0,@312 90,1,@1676 2619:C2,48|3b650c7303ff5524bfec7975418b3424893c24ff7004ff7008ff720cff7208ff72048b18b81856784156e9a9fbfeff90|@2466,63|9,0,@832 37,0,@2465 43,1,@2064 2620:S51|526563757273697665206465636c61726174696f6e206973206e6f74206f662074686520666f726d2060666e206d6174636827 2621:S69|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c4465636c61726174696f6e283429636865636b5479706573283329 2622:C2,252|3b650c7303ff552483f8017506b801000000c38b3883ff0175058b4004ebe1f7c301000000757252ff7708ff7004ff33ff7304ff72f08b4704e8da0000008b7424148b5ef88b53fc8b4d008d49f03b4d087303ff5520894d00c741fc03000000bfd888784189398b7bf88979088b720c8971045056ff742418518b5c24108b44241883c800e87e0500008b5c24148b53f88b4afc8b4500eb05e9500000008d40ec3b45087303ff5520894500c740fc04000000bf7c90784189388b710c89700c8b7af88978088b5c2410895804508b5a088b44240ce8960c00008b5c24048b44240c8b54241483c418e912ffffffb8e4937841ff552cb80100000090|@2656,63|14,0,0 58,1,@2623 97,0,@2627 134,1,@2628 180,0,@2642 214,1,@2643 239,0,@2654 247,0,0 2623:C2,836|3b650c7303ff55248b38f7c701000000741583ffe77c1583ff1d7f15be9a8478418d74be64ffe6e9ea000000e9e5000000e9e0000000e9e1020000909090e9d3000000909090e9cb000000909090e967010000909090e9bb000000909090e9bf000000909090e9ab000000909090e9a3000000909090e99b000000909090e993000000909090e927010000909090e983000000909090e97b000000909090e973000000909090e917020000909090e963000000909090e95b000000909090e953000000909090e94b000000909090e949000000909090e93b000000909090e95f010000909090e93d000000909090e923000000909090e91b000000909090e913000000909090e9bb000000909090e9ad000000909090b801000000c3b803000000c3b803000000c38b780483ff017506b803000000c38b72f88b5efc8b4b0c5257bbcc9f75418b4124ba703d754183c800e8ceb7fcff83f801754e8b0424bf0300000083f801750689f883c408c383ff017413ff70048b008b54240890e87efeffff89c6eb08be01000000ff700489f78b042483c4043b650c7303ff5524ebc3b80100000083c40cc3b80100000083c408c38b4008e946feffffb803000000c3b803000000c38b5af88b4bfc8b790c52ff7004bbcc9f75418b4724ba703d754190e83eb7fcff83f801754e8b3424bb0300000083fe01750689d883c408c383fb017413ff76048b068b54240890e8eefdffff89c2eb08ba01000000ff760489d38b342483c4043b650c7303ff5524ebc3b80100000083c40cc3b80100000083c408c38b5af88b4bfc8b790c52ff700cbbcc9f75418b4724ba703d754190e8c2b6fcff83f80175528b3424bb0300000083fe01750689d883c408c38b1683fb017415ff76048b42048b5424080bc0e86efdffff89c1eb08b901000000ff760489cb8b342483c4043b650c7303ff5524ebbfb80100000083c40cc3b80100000083c408c38b5af88b4bfc8b790c52ff7004ff7008bbcc9f75418b4724ba703d75410bc0e83eb6fcff83f80175288b4424040bc0e86a00000083f801740f8b04248b54240883c40ce9f6fcffffb80100000083c40cc3b80100000083c40cc38b5af88b4bfc8b410cbbcc9f75418b4024ba703d754183c800e8eab5fcff89c783f70289f8c30bc0|@2626,63|29,0,$2623+54 279,0,0 285,0,1 291,0,1 305,0,1 322,0,@995 330,0,@599 338,1,@601 351,0,1 391,0,0 417,0,0 426,0,0 443,0,1 449,0,1 468,0,@995 476,0,@599 482,1,@601 495,0,1 535,0,0 561,0,0 570,0,0 592,0,@995 600,0,@599 606,1,@601 619,0,1 663,0,0 689,0,0 698,0,0 723,0,@995 731,0,@599 738,1,@601 754,1,@2624 779,0,0 788,0,0 806,0,@995 814,0,@599 822,1,@601 2624:C2,80|3b650c7303ff55248b3883fff175318b70088b1e8b480489d8e8565dffff83f8017417bbcc05784189c80bc0ff154094040889c783f70289f8c3b801000000c383fffb75058b4008ebb6b801000000c3|@2625,63|26,1,@2249 36,0,@2305 46,0,I24 59,0,0 75,0,0 2625:S78|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c4465636c61726174696f6e28342969734e6f6e526566436f6e7374727563746f72283129 2626:S71|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c4465636c61726174696f6e2834296e6f6e457870616e73697665283129 2627:C2,96|3b650c7303ff55248b7a0450ff7208bbbc1477418b4724ba703d754190e88eb4fcff8b74240450b8b01577418b560c90ff128b5c2408b8000375418b1383c800ff128b5424088b4c240c8954240c8b1c248b44240483c40c51e9fe56feff0bc0|@2462,63|16,0,@1766 24,0,@599 30,1,@601 40,0,@1773 55,0,@312 90,1,@1676 2628:C2,188|3b650c7303ff55248b7d008d7fe83b7d087303ff5520897d00c747fc05000000be2c8a784189378b7424088977108b54240c89570c8947088b4c2404894f048b4d008d49e83b4d087303ff5520894d00c741fc05000000ba1c8c784189118b54241089511089590c8b5c240c89590889790489c78b45008d40f43b45087303ff5520894500c740fc02000000bb708f7841891889480489f990e85e0dffff89c789c889faff1289c6b80300000089f290ff12b801000000c210000bc0|@2641,63|33,0,@2629 88,0,@2633 141,0,@2637 154,1,@2081 169,0,1 179,0,0 2629:C2,116|3b650c7303ff55248b7d008d7fe43b7d087303ff5520897d00c747fc06000000bebc8a784189378b720c8977148947108b420889470c895f088b5a04895f048b0c24c7042403000000ff36ff7604ff7608ff760cff7610ff7614ff7618ff761cff7620ff76248b5a1089f851e9f7d1fcff83c800|@2632,63|33,0,@2630 69,0,1 109,1,@752 2630:C2,208|3b650c7303ff552489d150b80100000090e8fa2dfeff8b79145150bbbc1477418b4724ba703d754190e89eb2fcff8b74240850b8501475418b561890ff128b5c240c8b5424088b42108b530cff128b4c240cb8000375418b1183c800ff128b442408ff74240cff7424086a038b5c240c8b400c0bc0e8c231feff8b7c240cb8000375418b1783c800ff128b74240c8b5c24088b43088b560cff128b54240cb8000375418b1283c800ff128b4c24088b44240c8b510483c800ff128b44240c8b7808b80100000089fa83c410ff2283c800|@2631,63|12,0,0 18,1,@1582 28,0,@1766 36,0,@599 42,1,@601 52,0,@328 83,0,@312 118,1,@1593 127,0,@312 159,0,@312 194,0,0 2631:S49|545950455f5452454528292e616c6c6f7747656e6572616c69736174696f6e283629676976654572726f72283229283129 2632:S46|545950455f5452454528292e616c6c6f7747656e6572616c69736174696f6e283629676976654572726f72283229 2633:C2,684|3b650c7303ff552489d689c189d883c800e87e39fdff83f801746a5689d883c800e89e39fdff89c78b5f048b07e80e3dfeff8b34248b5e0c5023c3a801587503ff55383bc37c718b5f048b0790e8ee3cfeff81f81f4e000074638b5f048b070bc0e8aa38feff89fb50e8763efeff83f80174178b042483c800e8aa3efeffba03000000eb0ae91d020000ba010000008b4608515352bbcc9f75418b4024ba703d754183c800e8c2b0fcff8b7c24108b771083fe017535eb0ae9e4010000e9df0100008b5c240489c18b038b530489d30bc0e8d63cfeff83f8017402eb0783f9017402eb07b903000000eb038b0c2483f90174178b5424108b420ca8017503ff553889c383eb0270f6eb05bb1f4e00008b5424108b42085153bbcc9f75418b4024ba703d7541e842b0fcff8b7c240c89c68b5f048b07e87603ffff83f801742e8b5c240483fb0174258b54241083fa01741c8b442418bbe48e78418b7804b8a8f0774189faff12b901000000eb408b1c2483fb0375348b54241083fa01742b83fe0174268b4c240883f901751d8b442418bb0c8f78418b7804b8a8f0774189fa90ff12b901000000eb048b4c24108b54240c8b5a048b0283c800e8fe2cfeff8b7c240483ff01741d8b5c240c89c68b138b430489c389d083c800e8d202ffff89f789c6eb07be0100000089c78b5c240c578b138b430489c389d0e8ae3bfeff505051ff74240c56508d7c2410578b5c2420b8c8cc7441e8aa12fdff8b45008d40f43b45087303ff5520894500c740fc020000008b74240489308b5c24088958040bc0e84213fdff89c189c883c800e84237fdff83f801740989c8e86637fdffeb0fb8503d75410bc0ff552cb8010000008b7c241c89c68b5f048b0783c800e88e36feff89c389f083c800e87637fdff89cb8b44241c90e86a37fdff8b042483c42cc389c883c404c389c8c30bc0|@2636,63|18,1,@1102 34,1,@1103 46,1,@1606 78,1,@1606 98,1,@1596 106,1,@1616 122,1,@1618 127,0,1 139,0,0 150,0,@995 158,0,@599 166,1,@601 210,1,@1608 229,0,1 267,0,9999 281,0,@995 289,0,@599 294,1,@601 310,1,@2071 342,0,@2634 350,0,@2278 359,0,0 401,0,@2635 409,0,@2278 419,0,0 442,1,@1586 474,1,@2071 485,0,0 506,1,@1608 529,0,@202 534,1,@1003 578,1,@1005 590,1,@1102 602,1,@1103 609,0,@597 619,0,0 638,1,@1596 650,1,@1104 662,1,@1104 2634:S29|696e636c75646573206120667265652074797065207661726961626c65 2635:S40|696e636c756465732061206672656520696d70657261746976652074797065207661726961626c65 2636:S44|545950455f5452454528292e616c6c6f7747656e6572616c69736174696f6e28362967656e6572616c283229 2637:C2,44|89c78b45008d40f03b45087303ff5520894500c740fc03000000beb88f784189308b7204897008897804c390|@2640,53|27,0,@2638 2638:C2,16|3b650c7303ff55248b5a048b5208ff22|@2639,63| 2639:S47|545950455f5452454528292e616c6c6f7747656e6572616c69736174696f6e28362967656e6572616c283129283129 2640:S44|545950455f5452454528292e616c6c6f7747656e6572616c69736174696f6e28362967656e6572616c283129 2641:S34|545950455f5452454528292e616c6c6f7747656e6572616c69736174696f6e283629 2642:C2,36|3b650c7303ff55248b7a088b3424893c24ff720450bb030000008b420c56e91db9ffff90|@2433,63|22,0,1 31,1,@2429 2643:C2,124|3b650c7303ff55248b7d008d7ff03b7d087303ff5520897d00c747fc03000000be549178418937895f088b5c2404895f0489c28b45008d40f43b45087303ff5520894500c740fc02000000b9c4927841890889780489d10bc0e83606ffff89c789c889faff1289c6b80300000089f290ff12b801000000c204000bc0|@2653,63|33,0,@2644 76,0,@2649 90,1,@2081 105,0,1 115,0,0 2644:C2,172|3b650c7303ff552489d689c189d883c800e81a3afeff83f80174705689d883c800e83a3afeff83f901742a8b480889c890e8723afeff83c800e88a0000008b3c248b77085023c6a801587503ff55383bc67e48eb058b4808eb41ff770489c80bc0e8423afeff83c800e88a3afeff89c3b860927841e8ea80fcffbb530000000bc0e8de80fcff8b1424eb05e914000000ff12b80100000083c408c3b80300000083c404c3b803000000c30bc0|@2648,63|18,1,@1620 34,1,@1621 50,1,@1622 58,1,@2645 98,1,@1622 106,1,@1624 113,0,@2647 118,1,@323 123,0,41 130,1,@323 147,0,0 156,0,1 165,0,1 2645:C2,4|8b4008c3|@2646,1| 2646:S27|5354525543545f56414c5328292e74634c65744465707468283129 2647:S30|5479706520636f6e7461696e73206c6f63616c2064617461747970652028 2648:S50|545950455f5452454528292e636865636b466f724c6f63616c446174617479706573283329636865636b5479706573283229 2649:C2,44|89c78b45008d40f03b45087303ff5520894500c740fc03000000be0c93784189308b7204897008897804c390|@2652,53|27,0,@2650 2650:C2,16|3b650c7303ff55248b5a048b5208ff22|@2651,63| 2651:S53|545950455f5452454528292e636865636b466f724c6f63616c446174617479706573283329636865636b5479706573283129283129 2652:S50|545950455f5452454528292e636865636b466f724c6f63616c446174617479706573283329636865636b5479706573283129 2653:S37|545950455f5452454528292e636865636b466f724c6f63616c446174617479706573283329 2654:O3|@7320,@224,@2655 2655:S33|616c6c6f7747656e3a206261646c792d666f726d65642070617273652d74726565 2656:S67|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c4465636c61726174696f6e283429616c6c6f7747656e283229 2657:C2,76|3b650c7303ff55248b7a0852ff70048b57080bc0ff128b7424048b5e048b138b4d008d49f43b4d087303ff5520894d00c741fc020000008951048b04248901890bb80100000083c408c30bc0|@2482,63|66,0,0 2658:S56|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c4465636c61726174696f6e283429 2659:C2,400|3b650c7303ff55248b7a04f7c7010000007503ff553889fe83c60270f689c18b45008d40f43b45087303ff5520894500c740fc02000000bfc09678418938897004525153568b1390ff128b7424088b5c240c8b45008d40f03b45087303ff5520894500c740fc03000000ba3897784189108b4b108948088b3c248978048b1690ff128b74240c8b5efc8b55008d52ec3b55087303ff5520895500c742fc04000000b9e4977841890a8b430c89420c8b7ef8897a088b4e0c894a0450505089e389d0e88680feff8b44242083f8017507bf01000000eb25ff70048b008d5424200bc0e89a0200008b042483c4043b650c7303ff5524ebd4bf010000008b74242083fe017507bb01000000eb24ff76048b068d54242090e8ea0600008b342483c4043b650c7303ff5524ebd5bb010000008b5424188b4afc8b45008d40e03b45087303ff5520894500c740fc07000000bf38ab784189388b74240c8970188b5a088958148b7af88978108b710c89700c8b4a0c8948088b72108970048b142483c800ff12b8589c754183c41cc2040083c800|@2702,63|56,0,@2660 107,0,@2662 162,0,@2664 194,1,@1777 208,0,0 226,1,@2666 247,0,0 261,0,0 278,1,@2676 299,0,0 335,0,@2699 387,0,@989 2660:C2,20|3b650c7303ff55248b5a048b4004e945c5ffff90|@2661,63|15,1,@2480 2661:S61|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737346756e4465636c61726174696f6e283329552d283129 2662:C2,64|3b650c7303ff55248b7a0852ff70048b008b572cff12f7c001000000750d8b1c248b0083c408e941c6ffff8b7424048b5e048b042483c408e9a3c4ffff83c800|@2663,63|39,1,@2484 57,1,@2480 2663:S69|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737346756e4465636c61726174696f6e2833293c7061747465726e3e2d283129 2664:C2,76|3b650c7303ff5524ff720cff7208ff7204bbf411774183c800e8b67afcff8b7c24048b74240c897c240c8b1c248b542408895c240889442404bb0300000089d083c40456e98fb1ffff83c800|@2665,63|18,0,@1757 26,1,@323 58,0,1 69,1,@2429 2665:S64|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737346756e4465636c61726174696f6e2833296d7367466e283129 2666:C2,684|3b650c7303ff55248b7804f7c70100000075728b3752ff36ff7608ff7008ff700c8b5c240c8b0383f8fb75128b5b083b650c7303ff5524ebecba0100000083f80375128b5b043b650c7303ff5524ebd5ba0100000083f8f175058b5304eb05ba40970408528b442410ba5c9b78410bc0ff128b7c24145050506a016a016a018d742410eb05e913020000568b5ff0b8c8cc74410bc0e8b207fdff8b45008d40f43b45087303ff5520894500c740fc020000008b5c240489188b5424088950040bc0e84a08fdff8b4d008d49f83b4d087303ff5520894d00c741fc01000040c701010000008b7d008d7ff83b7d087303ff5520897d00c747fc01000040c70701000000515789c38b44241483c800e8aed2ffff8b7424108b1c24891e83fb01752a8b4c24208b79fc8b77fc50ff77f8ff74242068089c7841bb030000008b460c0bc0e8e2afffff89c2eb06ba0100000050bb409704088b44241083c800ff154094040883f801755b8b4c24248b41fc8b78fcff74241c8b5f0c8b44241490e87e10fdff8b7424248b5efc8b53fcff720cff7424206a018b5bf88b44241c90e8b6d2ffff8b4c24248b41fc8b78108b4424108b571890ff12f7c00100000075098b30eb0ae9cd000000bef8f975418b5c24248b53fc8b4afc8b410c56bbcc9f75418b4024ba703d75410bc0e806a3fcff83f80174638b042483c800e8a64affff83f80174538b7424288b5efc8b53fcff720cff73f8bbe44575418b44241c90e8a2aefcff89c3b8409c7841e8f677fcffbb549c78410bc0e8ea77fcffff3424ff74242c50bb030000008b4424100bc0e8d6aeffff89c7eb07bf0100000050508b7c24248b74240c89378b5c24308b45008d40f43b45087303ff5520894500c740fc020000008970048b54241c89108b53e883c434ff22b80100000083c428c3b8809c784190ff552cb80100000090|@2675,63|58,0,0 81,0,0 96,0,I48 106,0,@2667 143,0,@202 150,1,@1003 194,1,@1005 224,0,0 254,0,0 270,1,@2499 307,0,@2670 312,0,1 322,1,@2429 331,0,0 337,0,I48 350,0,I24 382,1,@1033 414,1,@2501 456,0,@1198 475,0,@995 483,0,@599 490,1,@601 506,1,@2249 532,0,@684 542,1,@699 549,0,@2671 554,1,@323 559,0,@2672 566,1,@323 579,0,1 590,1,@2429 599,0,0 661,0,0 670,0,@2673 679,0,0 2667:O1|@2668 2668:C2,60|3b650c7303ff55248b3883fffb75058b4008ebec83ff03751a8b400490e8deffffffa8017503ff553889c783c70270f689f8c3b801000000c383c800|@2669,33|52,0,0 2669:S67|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737346756e4465636c61726174696f6e2833296765744172697479283129 2670:S46|436c617573616c2066756e6374696f6e20646f6573206e6f74206861766520616e7920706172616d65746572732e 2671:S9|5661726961626c6520 2672:S34|20616c7265616479206465636c61726564206173206120636f6e7374727563746f72 2673:O3|@7320,@224,@2674 2674:S41|66696e644e616d65416e6450617474733a206261646c792d666f726d65642070617273652d74726565 2675:S75|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737346756e4465636c61726174696f6e28332966696e644e616d65416e645061747473283129 2676:C2,80|3b650c7303ff55248b78088b3752ff7010ff30ff700c568b580483fb017509b80100000083c414c3ff73048b038d542418e8360000008b1c2483c4043b650c7303ff5524ebd4b80100000083c418c390|@2698,63|32,0,0 50,1,@2677 71,0,0 2677:C2,892|8d7c24903b7d0c7303ff55288b7afc8b77fc8b5efc8b4d008d49ec3b4d087303ff5520894d00c741fc04000000bf1ca1784189398b7b0c89790c8b308971088b700889710450505052ff30ff7004568d5c241089c8e88278feff8b5c240c8b53fc8b4af0f6c1017503ff553889c883c00270f6508b7bf08b37505089e2528b5c241889f08d54242c90e80a0400008b4c24188b7c240483ff017507b8589c7541eb5a8b770483fe0175048b07eb53ff71f4bb0100000083ff01750489d8eb338b55008d52f43b55087303ff5520895500c742fc02000000895a048b0f890a89d38b7f043b650c7303ff5524ebc9b80100000083c800e8122cfdffeb0de905000000ff71f4eb03ff71f48b342489068b5c241c8b53fc8b4afc8b41108b7d008d7fec3b7d087303ff5520897d00c747fc04000000be00a9784189378b74242889770c8b72ec8977088b5818895f048b74241c8b56fc8b4afc8b41108b5c241c8b73fc8b56fc8b4a108b5c241c8b73fc8b56fc8b5a108b74241c8b56fc8b72fc8b56108b74241c57ff7020ff7110ff7330ff7214ff76fc8b0c248b41fc8b70108b5c24348b53fc8b7af48b4c24348b41fc8b58f88b5424348b4afc8b41fc8b50108b4d008d49ec3b4d087303ff5520894d00c741fc04000000b860a9784189018b470489410c8b7b048979088b422c8941048b7c24348b5ffc8b53fc8b42108b7c24348b5ffc8b53fc8b7a108b5c24348b53fc8b5afc8b53108b5c2434ff762851ff7008ff770cff32ff73fc8b3c248b77fc8b5e108b54244c8b42fc8b48fc8b79108b74244c8b56fc8b42fc8b48108b75008d76c83b75087303ff5520897500c746fc0d0000008b5424208956308b54241089562c8b5424148956288b53248956248b5c2428895e208b511c89561c8b5c242c895e188b5c241c895e148b5c2424895e108b5c2408895e0c8b5c240c895e088b5f04895e048b7c2404893e8b5c244c8b7bfc8b47fc56ff742444ff7008ff7424488b5c24548b4424548b7c245c8b77fc8b56fc8b52fc0bc0e80293ffff8b4c244c8b79f889078b71fc8b5efc8b53fc8b7d008d7ff03b7d087303ff5520897d00c747fc03000000b9c0a97841890f8b4c2448894f088b4a0c894f048b75008d76ec3b75087303ff5520897500c746fc04000000bb3caa7841891e894e0c8b5c2440895e08897e04bfa87977418b5c245c897c245c8974245889df89c38b44243483c45857e9badffeff0bc0|@2697,63|46,0,@2678 86,1,@1777 138,1,@2681 156,0,@989 178,0,0 238,0,0 246,1,@1120 308,0,@2693 472,0,@2694 746,1,@2424 793,0,@2695 837,0,@2696 857,0,@2049 886,1,@2069 2678:C2,76|3b650c7303ff5524ff720cff7208ff7204bb84a1784183c800e87e71fcff8b7c24048b74240c897c240c8b1c248b542408895c240889442404bb0300000089d083c40456e957a8ffff83c800|@2680,63|18,0,@2679 26,1,@323 58,0,1 69,1,@2429 2679:S39|2068617320616c7265616479206265656e20626f756e6420696e207468697320636c617573652e 2680:S94|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737346756e4465636c61726174696f6e28332970726f6365737346756e28312970726f63657373436c617573652831296d657373466e283129 2681:C2,896|3b650c7303ff55248b3b83fffb757150505253ff73048d74240c568b5b0883c800e8daffffff8b5c24088b53f08b42fc8b78fc8b77fc8b4d008d49e83b4d087303ff5520894d00c741fc05000000bab8a5784189118b57108951108b44240489410c8b460c8941088b73e48971048b4424088b70f08b56fc8b7afc8b47fceb05e9a9000000ff700cff73e489cb8b442408e85263ffff8b7c24088b77f08b5efc8b53fc8b4afc8b45008d40f03b45087303ff5520894500c740fc03000000be74a6784189308b77ec8970088b590c8958048b55008d52ec3b55087303ff5520895500c742fc04000000bbf0a67841891a8b590c895a0c8b4fe4894a0889420468a8797741528b5c24088b442414e88addfeff8b4424188b7c240c89388b742410897004b80100000083c414c2040083ff037572a8017503ff553889c683ee0270f6505052ff73088d4c2408518b5b0489f0e8aafeffff8b4424046a01ff70e0ff70f8ff74240cbb010000008b40e48b7c24148b77f08b56fc8b52fc0bc0e81abeffff8b4c24048b79f08b77fc8b5efc8b53fc8b7d008d7ff03b7d087303ff5520897d00eb05e964000000c747fc03000000be3ca7784189378b71ec8977088b5a0c895f045053ff71e45789c38b44241890e84ab0ffff8b55008d52f43b55087303ff5520895500c742fc020000008b4c2410894a048b3c24893a8b7424188906895604b80100000083c414c2040083fff175718b72f089d1508b46ec90e8ae57feff51ff7304ff73085089c38b442408ff154094040883f8017402eb648b44240c8b78f08b77fc8b5efc8b53fcff720cff70ecff70e48b5c2414b8b8a778410bc0e8366efcffbbe8a778410bc0e82a6efcff8b5c240c83c800e81e6efcffff742404eb05e999000000ff74240450bb030000008b4424140bc0e802a5ffff83c40c8b4c241083f9017502eb458b44240c8b78f08b77fc8b5efc8b53fcff720cff70ecff70e4bb08a87841b830a878410bc0e8c66dfcffff742404ff74240450bb030000008b44241490e8b2a4ffff83c40c8b4c240c8b41f08b7c24048b70ec89378b40ec90e8221affff8b5c24188903c7430401000000b80100000083c414c2040083fff7751a8b742404ba589c75418916c7460401000000b801000000c204008b72f08b4efc8b41fc8b78fc53ff72e46860a87841bb030000008b470c83c800e83aa4ffff8b742404bb589c7541891ec7460401000000b801000000c20400|@2692,63|79,0,@2682 146,1,@2308 191,0,@2684 234,0,@2685 256,0,@2049 270,1,@2069 292,0,0 359,0,0 382,1,@2492 434,0,@2686 466,1,@2463 516,0,0 542,1,@1690 562,0,I24 603,0,@2687 610,1,@323 615,0,@2688 622,1,@323 634,1,@323 655,0,1 666,1,@2429 710,0,@2689 715,0,@2690 722,1,@323 736,0,1 746,1,@2429 774,1,@2153 787,0,0 792,0,0 812,0,@989 821,0,0 826,0,0 850,0,@2691 855,0,1 866,1,@2429 875,0,@989 884,0,0 889,0,0 2682:C2,96|3b650c7303ff55248b7a108b75008d76ec3b75087303ff5520897500c746fc04000000bb34a67841891e8b5a08895e0c8b4a0c894e088b4a04894e048b5f308b1424891c246890047841683c0578416890c67541568b5f2052e9f29afeff0bc0|@2605,63|36,0,@2683 70,0,@2298 75,0,@2301 80,0,@1107 90,1,@1894 2683:C2,36|3b650c7303ff55248b7a088b3424893c24ff720450bb030000008b420c56e965a3ffff90|@2433,63|22,0,1 31,1,@2429 2684:C2,96|3b650c7303ff55248b7a0450ff7208bbbc1477418b4724ba703d754190e8f296fcff8b74240450b8b01577418b560c90ff128b5c2408b8000375418b1383c800ff128b5424088b4c240c8954240c8b1c248b44240483c40c51e96239feff0bc0|@2462,63|16,0,@1766 24,0,@599 30,1,@601 40,0,@1773 55,0,@312 90,1,@1676 2685:C2,48|3b650c7303ff5524bfec7975418b3424893c24ff7004ff7008ff720cff7208ff72048b18b81856784156e92dd7feff90|@2466,63|9,0,@832 37,0,@2465 43,1,@2064 2686:C2,96|3b650c7303ff55248b7a0450ff7208bbbc1477418b4724ba703d754190e82a96fcff8b74240450b8b01577418b560c90ff128b5c2408b8000375418b1383c800ff128b5424088b4c240c8954240c8b1c248b44240483c40c51e99a38feff0bc0|@2462,63|16,0,@1766 24,0,@599 30,1,@601 40,0,@1773 55,0,@312 90,1,@1676 2687:S39|496e20636c617573616c2066756e6374696f6e206f6e6520636c6175736520646566696e657320 2688:S21|20616e6420616e6f7468657220646566696e657320 2689:S29|646966666572656e74206e756d62657273206f66207061747465726e73 2690:S39|436c617573616c2066756e6374696f6e20636f6e7461696e7320636c6175736573207769746820 2691:S43|5374617274206f6620636c617573616c2066756e6374696f6e206973206e6f742061207661726961626c65 2692:S98|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737346756e4465636c61726174696f6e28332970726f6365737346756e28312970726f63657373436c61757365283129646f5061747465726e73283329 2693:C2,68|3b650c7303ff552452508b520c83c800ff1283f80175278b7c24048b04248b570883c800ff1283f801750f8b7424048b04248b560483c408ff2283c408c383c408c30bc0|@950,63| 2694:C2,68|3b650c7303ff552452508b520c83c800ff1283f80175278b7c24048b04248b570883c800ff1283f801750f8b7424048b04248b560483c408ff2283c408c383c408c30bc0|@950,63| 2695:C2,96|3b650c7303ff55248b7a0450ff7208bbbc1477418b4724ba703d754190e8a693fcff8b74240450b8b01577418b560c90ff128b5c2408b8000375418b1383c800ff128b5424088b4c240c8954240c8b1c248b44240483c40c51e91636feff0bc0|@2462,63|16,0,@1766 24,0,@599 30,1,@601 40,0,@1773 55,0,@312 90,1,@1676 2696:C2,48|3b650c7303ff5524bfec7975418b3424893c24ff7004ff7008ff720cff7208ff72048b18b81856784156e9e1d3feff90|@2466,63|9,0,@832 37,0,@2465 43,1,@2064 2697:S85|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737346756e4465636c61726174696f6e28332970726f6365737346756e28312970726f63657373436c61757365283129 2698:S69|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737346756e4465636c61726174696f6e28332970726f6365737346756e283129 2699:C2,176|3b650c7303ff552489d789c68b46040bc0e8fa13ffff8b55008d52f03b55087303ff5520895500c742fc03000000b904ac7841890a8b4f10894a088b5f0c895a045756506a0353ff7708528b5f1883c800e8c6ddffff8b5424088b4d008d49ec3b4d087303ff5520894d00c741fc04000000b880ac784189018b7a0c89790c8b72108971088b5a08895904518b5a148b4424040bc0e8eae4ffff8b5424088b4a048b4424048b510883c40cff2283c800|@2661,63|18,1,@2153 47,0,@2700 82,1,@2628 115,0,@2701 150,1,@2643 2700:C2,96|3b650c7303ff55248b7a0450ff7208bbbc1477418b4724ba703d754190e86291fcff8b74240450b8b01577418b560c90ff128b5c2408b8000375418b1383c800ff128b5424088b4c240c8954240c8b1c248b44240483c40c51e9d233feff0bc0|@2462,63|16,0,@1766 24,0,@599 30,1,@601 40,0,@1773 55,0,@312 90,1,@1676 2701:C2,36|3b650c7303ff55248b7a088b3424893c24ff720450bb030000008b420c56e9199dffff90|@2433,63|22,0,1 31,1,@2429 2702:S56|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737346756e4465636c61726174696f6e283329 2703:C2,172|3b650c7303ff552483f8017506b801000000c38b388b72fc8b5e108b4efc52ff7004ff37ff7330ff72f8ff710cff760c8b75008d76ec3b75087303ff5520897500c746fc04000000bbc8ad7841891e8b54240489560c8b4c2408894e088b0424894604ff742410568b5c2414b848277741e8e679feff508b4424188b54241c0bc0e87affffff8b7d008d7ff43b7d087303ff5520897d00c747fc020000008947048b3424893789f883c420c3|@413,63|14,0,0 73,0,@2704 109,0,@1797 114,1,@1798 2704:C2,36|3b650c7303ff55248b7a088b3424893c24ff720450bb030000008b420c56e9d19bffff90|@2433,63|22,0,1 31,1,@2429 2705:C2,232|3b650c7303ff552489d789c689f083c800e8d690feff83f8017406b801000000c383fe0175405756b815000000e8c2ebfdff8b55008d52ec3b55087303ff5520895500c742fc04000000c7420c01000000c7420801000000b940970408894a04890289d3eb058b5e0857568b5424048b4afc8b45008d40ec3b45087303ff5520894500c740fc04000000bf0caf784189388b72ec89700c8b79108978088b0c2489480489c789d80bc0e8829cfeff8b75008d76f43b75087303ff5520897500c746fc02000000bbd4b47841891e897e048b542408c74424080100000089f383c40852e969b9feff90|@2720,63|18,1,@1883 28,0,0 41,0,10 46,1,@1488 77,0,0 84,0,0 89,0,I48 139,0,@2706 170,1,@1919 199,0,@2718 216,0,0 227,1,@2002 2706:C2,504|3b650c7303ff552489d15089d8ba143a774183c800e8fa8afeff83f801747089d8ba083a774183c800e8728bfeff8b790850ff770ce8dab7feff83f80175068b742404eb378b442404e8f21cfeff8b75008d76f83b75087303ff5520897500c746fc010000008b5904891e5689c38b44240883c800e89a01000089c68b45008d40f43b45087303ff5520894500eb05e91d000000c740fc020000008970048b54240889108b14248b4c240c83c41451ff2289d8baf83a774190e83a8bfeff83f801747089d8baec3a774183c800e8b28bfeff8b78088b1f83fb01755c8b55008d52f03b55087303ff5520895500c742fc030000008b71048972088b7704897204c702050000008b5d008d5bec3b5d087303ff5520895d00c743fc040000008b780c897b0c8953088b70048973048b108913eb0ae952000000e90400000089deeb0289c65156568b5c240c8b410ce8fa7efeff8b5424048b4a088b45008d40f43b45087303ff5520894500c740fc020000008b3c248978048b74240889308b51088b5c240c83c41453ff2289d8ba2c387741e89687feff83f801745189d8ba2038774183c800e80e88feff518b590483c800e87a8bfeff8b3c248b770889c38b45008d40f43b45087303ff5520894500c740fc020000008958048b54240489108b56248b4c240883c41051ff22b80100000083c404c2040090|@2717,63|14,0,@1865 22,1,@1866 34,0,@1864 42,1,@1869 54,1,@1994 74,1,@1624 118,1,@2707 180,0,@1871 186,1,@1872 198,0,@1870 206,1,@1875 258,0,2 334,1,@1817 397,0,@1851 402,1,@1852 414,0,@1850 422,1,@1855 434,1,@1877 493,0,0 2707:C2,128|3b650c7303ff552489c789f890e88e15fdff89c689f883c800e89aa1feff89f953565089c8e826a0feff89c789c883c800e8c6e0ffff5168c8cc7441ff74240c57508b5c24148b44241c83c800e8becafeff508b4424040bc0e8a2b5feff8d54241483c800e83200000089c38b04240bc0e8362fffff8b042483c414c2040090|@2716,63|14,1,@1109 26,1,@1932 38,1,@1930 50,1,@2645 56,0,@202 78,1,@2056 90,1,@1994 102,1,@2708 114,1,@2230 2708:C2,84|3b650c7303ff552483f8017506b801000000c352ff70048b00e852000000508b4424048b5424080bc0e8d2ffffff8b7d008d7ff43b7d087303ff5520897d00c747fc020000008947048b3424893789f883c40cc3|@413,63|14,0,0 26,1,@2709 2709:C2,200|3b650c7303ff55248b7d008d7ff03b7d087303ff5520897d00c747fc03000000be10b3784189378b72f88977088b5aec895f0452ff30ff7004ff700857bbb0b378418b400ce88aadfeff8b54240c8b0c248b3183fe01753a8b5a04f7c301000000752b8b7d008d7ff03b7d087303ff5520897d00c747fc030000008b138957088b7104897704c70705000000eb0689cfeb0289cf8b5d008d5bec3b5d087303ff5520895d00c743fc0400000089430c897b088b5424048953048b4c2408890b89d883c410c383c800|@2715,63|33,0,@2710 62,0,@2712 70,1,@1969 136,0,2 2710:C2,60|3b650c7303ff552489d789c689f083c800e89a13fdff57568b5f080bc0e84ea4feff83f801740b8b5c24048b430483c408c38b042483c408c383c800|@2711,63|18,1,@1109 30,1,@1946 2711:S63|56414c55455f4f505328292e6d6b53656c656374656454797065283329636f707941436f6e7374727563746f72283129636f707954797065436f6e73283129 2712:O1|@2713 2713:C2,4|c383c800|@2714,1| 2714:S61|56414c55455f4f505328292e6d6b53656c656374656454797065283329636f707941436f6e7374727563746f72283129636f7079547970283129283129 2715:S48|56414c55455f4f505328292e6d6b53656c656374656454797065283329636f707941436f6e7374727563746f72283129 2716:S29|56414c55455f4f505328292e6d6b53656c656374656454797065283329 2717:S74|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c756573283229636f7079456e7472696573283129636f7079456e747279283329 2718:C2,28|3b650c7303ff55248b78088b3424893c248b58048b008b520456ff22|@2719,63| 2719:S74|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c756573283229636f7079456e7472696573283129636f7079456e747279283129 2720:S62|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c756573283229636f7079456e7472696573283129 2721:O1|@2722 2722:C2,8|b8d4b57841c30bc0|@2728,1|1,0,@2723 2723:O1|@2724 2724:C2,40|89c78b45008d40f43b45087303ff5520894500c740fc02000000be20b678418930897804c383c800|@2727,49|27,0,@2725 2725:C2,36|8b7d008d7ff43b7d087303ff5520897d00c747fc020000008947048b4204890789f8c390|@2726,37| 2726:S57|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c756573283229283129283129283129 2727:S54|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c756573283229283129283129 2728:S51|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c756573283229283129 2729:C2,64|3b650c7303ff55245089d80bc0e8e6b2feff89c78b45008d40f03b45087303ff5520894500c740fc03000000be7cb7784189308978088b1c2489580483c404c3|@2732,63|14,1,@2004 45,0,@2730 2730:C2,124|3b650c7303ff5524528b7a088b570883fa01750483c404c35057b8010000008b57040bc0ff128b0c24ff30ff7004b8010000008b1183c800ff128b7c2410508b4424088b57040bc0ff1289c68b44240489f20bc0ff1289c38b44241089da0bc0ff128b3c2483c4143b650c7303ff5524eb9ab80100000083c418c390|@2731,63|27,0,0 47,0,0 115,0,0 2731:S32|486173685461626c652e68617368466f6c64283229666f6c6446283129283129 2732:S21|486173685461626c652e68617368466f6c64283229 2733:C2,76|3b650c7303ff5524ff720cff7208ff7204bbf411774183c800e83e5afcff8b7c24048b74240c897c240c8b1c248b542408895c240889442404bb0300000089d083c40456e91791ffff83c800|@2734,63|18,0,@1757 26,1,@323 58,0,1 69,1,@2429 2734:S57|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c7565732832296d657373466e283129 2735:C2,96|3b650c7303ff55248b7a108b75008d76ec3b75087303ff5520897500c746fc04000000bb84b97841891e8b5a08895e0c8b4a0c894e088b4a04894e048b5f308b1424891c246890047841683c0578416890c67541568b5f2052e9a287feff0bc0|@2605,63|36,0,@2736 70,0,@2298 75,0,@2301 80,0,@1107 90,1,@1894 2736:C2,36|3b650c7303ff55248b7a088b3424893c24ff720450bb030000008b420c56e91590ffff90|@2433,63|22,0,1 31,1,@2429 2737:C2,216|3b650c7303ff55248b7af08b77fc52ff30ff7004ff7008ff700c8b5c240c8b4604e8ce58fcff8b5c24108b53f08b4afc50b8010000008b51fc83c800ff12ff74240c50ff7424106a018b5c24148b442410e816c2feff8b7c24148b77f08b5efc50ff760c8b5b0c8b4424180bc0e85ef0fcff8b5424188b45008d40f43b45087303ff5520894500c740fc020000008b0c248948048b7c241489388b52f883c800ff128b7424188b5ef08b53108b45008d40f43b45087303ff5520894500c740fc020000008b0c248948048b7c241489388b520c83c41cff22|@2738,63|34,1,@323 50,0,0 82,1,@2056 110,1,@1033 2738:S62|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c75657328322970726f6365737354797065283129 2739:C2,904|8d7c24ac3b7d0c7303ff55288b7afc8b75008d76ec3b75087303ff5520897500c746fc04000000b9a4be7841890e8b4f0c894e0c8b7af8897e088b4a0c894e045050505250538d5c240c89f090e80e5bfeff8b4424208d54241883c800e8ee030000508b7c240483ff017507be01000000eb6f8b1f8b54240c8b4afc8b45008d40e83b45087303ff5520894500c740fc05000000be10c1784189308b72108970108b72f889700c8b710c8970088b4a0c8948048b74240c8b4efcff7704ff710cff720c8b7b0489c389f883c800e8324affff8b3c2483c4043b650c7303ff5524eb85e905000000be010000008b5c240483fb017507ba01000000eb23ff73048b038d542420e8c20500008b1c2483c4043b650c7303ff5524ebd6ba010000008b4c240c8b41fc8b7d008d7fec3b7d087303ff5520897d00c747fc04000000be0cc3784189378b580c895f0c8b51f88957088b710c89770450505089e389f883c800e8fa59feff8b5c24308b54240cf7c301000000753cf7c201000000752dff7304ff72048b038b1a8d54243090e81e0700008b14248b5c240483c4083b650c7303ff5524ebc8b901000000b901000000eb05b9010000006a01bb20ce7c418b44241083c800e8f21104008b4c242c83f90175118b7c24188b77108b46088b1424ff12eb7150505089e3b80100000083c800e88accfcff8b4424248b7d008d7ff03b7d087303ff5520897d00c747fc03000000bef4d97c4189378b5c2404895f088b50108957048b4d008d49ec3b4d087303ff5520894d00c741fc04000000be84da7c4189318b5c240889590c8b742414897108eb05e9210100008b5a188959048b75008d76c83b75087303ff5520897500c746fc0d0000008b42308946308b5a2c895e2c8b42288946288b42248946248b5a20895e208b5a1c895e1c894e188b4a14894e148b4a10894e108b4a0c894e0c897e088b7a04897e048b0a890e8b4c242456ff71088b4c2428b8589c754183f901750489c7eb3f8b318b5c242cff7104ff742408ff7604ff74240cff73048b5bf88b068b5424408b52fc0bc0e87275ffff8b0c2483c4043b650c7303ff5524ebbdbf010000008b74244483fe017507b801000000eb518b1e8b53048b0aff760451ff7310bb0100000089c890e8065cffff8b44240483c800e8d2a8feff8b3c248907bb010000008b44240490e86a22ffff8b74240883c40c3b650c7303ff5524eba8b80100000083c414b8589c754183c428c208000bc0|@4696,63|40,0,@2740 78,1,@1777 94,1,@2742 109,0,0 149,0,@2745 206,1,@2308 232,0,0 246,0,0 262,1,@2747 283,0,0 319,0,@2749 354,1,@1777 398,1,@2751 423,0,0 428,0,0 435,0,0 442,0,@4667 454,1,@4670 490,0,0 498,1,@937 531,0,@4693 575,0,@4695 715,0,@989 766,1,@2424 787,0,0 801,0,0 822,0,0 830,1,@2348 842,1,@1994 852,0,0 862,1,@2230 884,0,0 892,0,@989 2740:C2,76|3b650c7303ff5524ff720cff7208ff7204bbf411774183c800e8f653fcff8b7c24048b74240c897c240c8b1c248b542408895c240889442404bb0300000089d083c40456e9cf8affff83c800|@2741,63|18,0,@1757 26,1,@323 58,0,1 69,1,@2429 2741:S58|50415253455f5452454528292e706173733228362961737369676e56616c756573283629617373416273446174612834296d657373466e283129 2742:C2,84|3b650c7303ff552483f8017506b801000000c352ff70048b00e852000000508b4424048b5424080bc0e8d2ffffff8b7d008d7ff43b7d087303ff5520897d00c747fc020000008947048b3424893789f883c40cc3|@413,63|14,0,0 26,1,@2743 2743:C2,236|3b650c7303ff55248b7af08b77fc52ff30ff7004ff700c8b5c24088b460483c800e8d252fcff8b5c240c8b53f08b4afc50b8010000008b51fc83c800ff128b7c24108b77f068c8cc7441506a01ff76088b5c24148b44241090e812bcfeff8b5c240889038b5424108b4af08b79fc50ff710c8b5f0c8b442414e856eafcff8b7424148b45008d40f43b45087303ff5520894500c740fc020000008b1c248958048b54241089108b56f883c800ff128b4c24148b41f08b78108b45008d40f43b45087303ff5520894500c740fc020000008b34248970048b5c241089188b570c90ff128b042483c418c383c800|@2744,63|34,1,@323 50,0,0 70,0,@202 90,1,@2056 122,1,@1033 2744:S61|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737341627344617461283429656e74657254636f6e283129 2745:C2,96|3b650c7303ff55248b7a108b75008d76ec3b75087303ff5520897500c746fc04000000bb8cc17841891e8b5a08895e0c8b4a0c894e088b4a04894e048b5f308b1424891c246890047841683c0578416890c67541568b5f2052e99a7ffeff0bc0|@2605,63|36,0,@2746 70,0,@2298 75,0,@2301 80,0,@1107 90,1,@1894 2746:C2,36|3b650c7303ff55248b7a088b3424893c24ff720450bb030000008b420c56e90d88ffff90|@2433,63|22,0,1 31,1,@2429 2747:C2,216|3b650c7303ff55248b7af08b77fc52ff30ff7004ff700c8b5c24088b460483c800e8c650fcff8b5c240c8b53f08b4afc50b8010000008b51fc83c800ff12ff742408506a016a018b5c24148b4424100bc0e80ebafeff8b7c24108b77f08b5efc50ff760c8b5b0c8b4424140bc0e856e8fcff8b5424148b45008d40f43b45087303ff5520894500c740fc020000008b0c248948048b7c241089388b52f883c800ff128b7424148b5ef08b53108b45008d40f43b45087303ff5520894500c740fc020000008b0c248948048b7c241089388b520c83c418ff22|@2748,63|34,1,@323 50,0,0 82,1,@2056 110,1,@1033 2748:S65|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737341627344617461283429656e7465725769746854797065283129 2749:C2,76|3b650c7303ff5524ff720cff7208ff7204bb74c3784183c800e88e4ffcff8b7c24048b74240c897c240c8b1c248b542408895c240889442404bb0300000089d083c40456e96786ffff83c800|@2741,63|18,0,@2750 26,1,@323 58,0,1 69,1,@2429 2750:S52|2068617320616c7265616479206265656e2075736564206173206120636f6e7374727563746f7220696e20746869732074797065 2751:C2,280|3b650c7303ff55245253ff30ff7008ff700cb8010000008b7c240483ff01750489c6eb22a8017503ff553889c383c30270f68b7f0489d83b650c7303ff5524ebdabe0100000050508b44241490e8be02fdff83c800e8fe02fdff83f801742d8b5d008d5bf83b5d087303ff5520895d00c743fc010000408b542414891389e0c700ffffffff89e7895f04eb1189e3c7030100000089e28b4424148942048b7d008d7ff43b7d087303ff5520897d00c747fc020000008b342489378b5c2404895f048b45008d40f03b45087303ff5520894500c740fc030000008978088b5424108950048b7c24088938e8be02fdff50bbe4c478418b44241090e8f20100008d54242083c800e83a04000089c38b44241883c420e9041cffff|@4666,63|19,0,0 66,0,0 78,1,@1109 86,1,@1111 129,0,-1 144,0,0 234,1,@1113 240,0,@2752 250,1,@2759 262,1,@2764 276,1,@2230 2752:O1|@2753 2753:C2,40|89c78b45008d40f43b45087303ff5520894500c740fc02000000be30c578418930897804c383c800|@2758,49|27,0,@2754 2754:C2,36|3b650c7303ff55248b7a048b378b1c24893424ff770489d98b58048b0051e91d00000090|@2757,63|31,1,@2755 2755:C2,24|8b7c240889c389f88b342483c40c56ff25a094040883c800|@2756,63|17,0,I27 2756:S73|50415253455f5452454528292e706173733228362961737369676e56616c7565732836296173734162734461746128342967656e56616c7565436f6e737472732832296c6571283429 2757:S76|50415253455f5452454528292e706173733228362961737369676e56616c7565732836296173734162734461746128342967656e56616c7565436f6e737472732832296c6571283129283129 2758:S73|50415253455f5452454528292e706173733228362961737369676e56616c7565732836296173734162734461746128342967656e56616c7565436f6e737472732832296c6571283129 2759:C2,192|3b650c7303ff552483f8017506b801000000c38b780483ff0175248b188b45008d40f43b45087303ff5520894500c740fc02000000c74004010000008918c35357ff308b042489daff125050508d5c24048b4424108d542418e87e0000008b5c24148b44240883c800e892ffffff508b5c24188b4424080bc0e882ffffff8b75008d76f43b75087303ff5520897500c746fc020000008946048b5c2410891e83fe0175078b042483c41cc3568b4424048d54242090e81e01000083c420c30bc0|@2763,63|14,0,0 56,0,0 90,1,@2760 182,1,@2762 2760:C2,196|3b650c7303ff552483f8017513c70301000000c7430401000000b801000000c35253ff30ff70048b4424048b52e80bc0ff125050508d5c24048b44240c8b542418e8baffffff8b3c2483ff01743b8b75008d76f43b75087303ff5520897500c746fc020000008b5c2404895e048b54241089168b4c241489318b442408894104b80100000083c41cc38b75008d76f43b75087303ff5520897500c746fc020000008b5c2408895e048b54241089168b4c24148b4424048901897104b80100000083c41cc3|@2761,63|15,0,0 22,0,0 27,0,0 129,0,0 188,0,0 2761:S17|4c6973742e706172746974696f6e283329 2762:C2,68|3b650c7303ff552483f80175048b42e0c352ff308b40040bc0e8e2ffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0424890289d083c408c3|@1462,5| 2763:S17|4d6973632e717569636b536f7274283229 2764:C2,196|3b650c7303ff5524525083f8017507bf01000000eb6d8b108b7c24048b77fc8b5ef08b4bfc8b7d008d7fe83b7d087303ff5520897d00c747fc05000000bed4c9784189378b73108977108b73f889770c8b710c8977088b4b0c894f048b7424048b4efc8b71f08b4efcff7004ff710cff730c89fb8b42040bc0e8923cffff8b0424eb05e91500000083c4043b650c7303ff5524e972ffffffbf010000008b042490e8f600000083c800e88e08000089c38b04248d5424080bc0e8f600040083c408c30bc0|@4665,63|16,0,0 62,0,@2765 122,1,@2308 153,0,0 162,1,@2767 170,1,@2826 186,1,@4659 2765:C2,96|3b650c7303ff55248b7a108b75008d76ec3b75087303ff5520897500c746fc04000000bb50ca7841891e8b5a08895e0c8b4a0c894e088b4a04894e048b5f308b1424891c246890047841683c0578416890c67541568b5f2052e9d676feff0bc0|@2605,63|36,0,@2766 70,0,@2298 75,0,@2301 80,0,@1107 90,1,@1894 2766:C2,36|3b650c7303ff55248b7a088b3424893c24ff720450bb030000008b420c56e9497fffff90|@2433,63|22,0,1 31,1,@2429 2767:C2,172|3b650c7303ff552483f8017506b801000000c350508b388b77048b1e83fbff751189e2c7020100000089e28b0f894a04eb21ff7004ff3789f0e88a0000008d54240889028d4c24088b042489410483c404eb03ff70048b45008d40f43b45087303ff5520894500c740fc020000008b7c240489388b742408897004508b44240490e87affffff8b5d008d5bf43b5d087303ff5520895d00c743fc020000008943048b1424891389d883c410c3|@413,63|14,0,0 37,0,0 58,1,@2768 2768:C2,532|3b650c7303ff552489c689f090e84afafdff83f801745c89f0e86efafdff8b1883fb03756e8b5004f7c20100000075688b7a0483ff0175078b328b4604ebc1be0100000083fa01750489f3eb2bf7c6010000007503ff553889f083c00270f68b520489c63b650c7303ff5524ebd6bb01000000e9750000008b45008d40f83b45087303ff5520894500c740fc010000008918c3e94f000000bf0100000083fa01750489feeb26f7c7010000007503ff553889fb83c30270f68b520489df3b650c7303ff5524ebd6be010000008b45008d40f83b45087303ff5520894500c740fc010000008930c3b803000000c389f00bc0e86206feff83f801740d89f0e88606feffb8ffffffffc389f083c800e81afffdff83f801747089f0e83efffdff8b088b40080bc0e87afffdff500bc0e80284feff8b3883ffff74358b042490e8f283feff89c68b04240bc0e83286feff5689cbe8528dfeff6a0389c38b44240483c800e82a8efeff83c408e992feffff8b0424e8f2f9fcff89c6b888cd7841e8e6f9fcff5189c3eb05e98200000089f083c800e8928afeff83f8017409b80300000083c408c38b44240490e81a9afefff7c001000000754f8b188b5304f7c20100000075398b0a83f90175298b780483ff0175188b730c8b1c2489f083c800e80a04000083c408e916feffffb80300000083c408c3b80300000083c408c3b80300000083c408c3b80300000083c408c3b803000000c3|@2825,63|14,1,@1600 26,1,@1601 64,0,0 111,0,0 153,0,0 200,0,0 232,0,1 242,1,@1644 254,1,@1645 259,0,-1 270,1,@1620 282,1,@1621 294,1,@1622 302,1,@1923 318,1,@1923 330,1,@1932 338,1,@1956 354,1,@1958 370,1,@1109 377,0,@2769 382,1,@1109 402,1,@1946 412,0,1 426,1,@1994 478,1,@2823 491,0,1 500,0,1 509,0,1 518,0,1 527,0,1 2769:O6|@2305,1,0,@2771,@2773,@2770 2770:O2|-1,@7391 2771:O2|@2772,0 2772:O3|3,@7384,79992 2773:O2|-1,@7385 2774:O3|1,@202,@2775 2775:O2|@2776,0 2776:O4|@2305,@989,@2778,@2777 2777:O3|1,@2820,@2819 2778:O2|-1,@2779 2779:O2|5,@2780 2780:O2|-1,@2781 2781:O5|0,@2782,@2818,@7386,@2538 2782:O3|@214,@2784,@2783 2783:O2|@453,@2810 2784:O2|@218,@2785 2785:O3|@221,0,@2786 2786:O10|0,@2788,@2793,@2787,0,0,0,0,0,0 2787:O1|@2803 2788:O1|@2789 2789:O2|-1,@2790 2790:O5|0,@432,@443,@7387,@2791 2791:O2|-7,@2792 2792:O8|@449,@2305,0,0,1,0,0,0 2793:O1|@2794 2794:O2|-1,@2795 2795:O5|0,@432,@2559,@7388,@2796 2796:O2|-7,@2797 2797:O8|@2798,@2305,0,0,1,0,0,0 2798:O4|4,@2800,@2799,0 2799:O2|-3,I11 2800:O2|@449,@2801 2801:O2|@2802,@448 2802:O2|-3,64 2803:O2|-1,@2804 2804:O5|0,@432,@2563,@7389,@2805 2805:O2|-7,@2806 2806:O8|@2807,@2305,0,0,1,0,0,0 2807:O4|4,@2809,@2808,0 2808:O2|-3,I253 2809:O2|@450,@495 2810:O4|@2812,@2814,@2813,@2811 2811:O1|@2817 2812:O3|@2814,@2813,@2811 2813:O1|@2816 2814:O1|@2815 2815:C2,8|b803000000c30bc0|@2305,1|1,0,1 2816:C2,32|89c78b45008d40f83b45087303ff5520894500c740fc010000408938c383c800|@2305,33| 2817:C2,8|8b3889f8c383c800|@2305,33| 2818:O2|-3,@2812 2819:O4|-3,@2822,@2305,@2821 2820:O3|3,@7390,79993 2821:O2|0,@2769 2822:O2|@2820,0 2823:C2,132|3b650c7303ff552489c689f090e85a01feff83f801740b89f0e87e01feff89c2eb0db8503d7541ff552cba010000008b328b4a0489c883c800e802fafdff83f801740d535689c80bc0e822fafdffeb0fb8503d75410bc0ff552cb8010000008b5c24048b00e85288feff8b7c2408c74424080300000089c38b042483c40857e92089feff|@2824,63|14,1,@1644 26,1,@1645 35,0,@597 43,0,0 58,1,@1620 74,1,@1621 81,0,@597 91,0,0 102,1,@1956 114,0,1 128,1,@1958 2824:S32|545950455f5452454528292e636f6e7374727563746f72526573756c74283229 2825:S27|56414c55455f4f505328292e6765745475706c654b696e64283129 2826:C2,300|3b650c7303ff5524f7c00100000075718b388b3783fe01753e8b580483fb0175318b5f04b878d37841e82201000089c28b45008d40f43b45087303ff5520894500c740fc02000000c74004010000008910c3e94de6030083fe0375468b580483fb0175398b5f04b8f825754190e8f6e8030089c28b45008d40f43b4508730aeb05e9a1000000ff5520894500c740fc02000000c74004010000008910c3e902e6030083feff75408b580483fb0175338b5f04b8f82575410bc0e8aae8030089c28b45008d40f43b45087303ff5520894500c740fc02000000c74004010000008910c3e9bde503008b580483fb0175338b5f04b8f82575410bc0e86ae8030089c28b45008d40f43b45087303ff5520894500c740fc02000000c74004010000008910c3e97de50300e978e50300|@4658,63|37,0,@2827 42,1,@2828 75,0,0 83,1,@4624 104,0,@408 110,1,@4626 150,0,0 158,1,@4624 179,0,@408 186,1,@4626 219,0,0 227,1,@4624 243,0,@408 250,1,@4626 283,0,0 291,1,@4624 296,1,@4624 2827:O1|4 2828:C2,324|3b650c7303ff5524505389c3b8d02b7541e84a0100008b7d008d7fdc3b7d087303ff5520897d00c747fc08000000c7471c01000000c7471801000000c7471401000000c7471003000000c7470c01000000c74708010000008b342489770489078b5d008d5bf43b5d087303ff5520895d00c743fc02000000897b04c703f3ffffff538b5c240889f090e83e0e00008b55008d52f43b55087303ff5520895500c742fc02000000c742040100000089028b4d008d49f43b4d087303ff5520894d00c741fc020000008951048b042489018b7d008d7ff43b7d087303ff5520897d00c747fc02000000894f04c7071500000083f901752c89f80bc0e88a0b00008b75008d76f43b75087303ff5520897500c746fc02000000894604c706fbffffffeb0289febb0100000089f0ba14ea78410bc0e87e15000089c3b80100000089da83c40cff22|@4623,63|13,0,@450 18,1,@2829 49,0,0 56,0,0 63,0,0 70,0,1 77,0,0 84,0,0 125,0,-7 138,1,@2847 169,0,0 236,0,10 250,1,@2837 283,0,-3 292,0,0 299,0,@2858 306,1,@2860 313,0,0 2829:C2,1484|3b650c7303ff55248b3b83fff975728b75008d76f43b75087303ff5520897500c746fc02000000c746040100000089068b45008d40ec3b45087303ff5520894500c740fc04000000c7400c03000000ba74777841895008897004c700090000008b75008d76f43b75087303ff5520897500c746fc02000000c7460401000000eb05e93300000089068b45008d40ec3b45087303ff5520894500c740fc04000000c7400c03000000ba48777841895008897004c70009000000c383ff0175728b75008d76f43b75087303ff5520897500c746fc02000000c746040100000089068b55008d52ec3b55087303ff5520895500c742fc04000000c7420c03000000b874777841894208897204c702090000008b75008d76f43b75087303ff5520897500c746fc02000000c7460401000000eb05e93300000089168b45008d40ec3b45087303ff5520894500c740fc04000000c7400c03000000ba48777841895008897004c70009000000c383ff057506b8c42b7541c383ff0375708b7304f7c601000000740489f2eb1289c2b89420754190ff552c89d0ba010000008b4d008d49f43b4d087303ff5520894d00c741fc02000000895104c701fbffffff8b55008d52f43b55087303ff5520895500c742fc02000000c742040100000089028b45008d40f43b4508730aeb05e945000000ff5520894500c740fc02000000895004890889c28b45008d40ec3b45087303ff5520894500c740fc04000000c7400c03000000b9a02b7541894808895004c70009000000c383fffb755b8b7304f7c601000000740489f2eb1389c2b8942075410bc0ff552c89d1ba010000008b4d008d49f43b4d087303ff5520894d00c741fc02000000895104c701fbffffff8b1083fa0b75165189c3b801000000e85a03000089c2eb45e9b700000083fafb75125189c3b80100000090e83e03000089c2eb298b55008d52f03b55087303ff5520895500c742fc03000000c7420801000000894204c7020d000000518b4d008d49f43b4d087303ff5520894d00c741fc02000000c741040100000089118b45008d40f43b45087303ff5520894500c740fc020000008948048b3c24893889c68b45008d40ec3b45087303ff5520894500c740fc04000000c7400c03000000bba02b7541895808897004c7000900000083c404c383ff07755b8b7304f7c601000000740489f2eb1389c2b8942075410bc0ff552c89d1ba010000008b4d008d49f43b4d087303ff5520894d00c741fc02000000895104c701fbffffff8b1083fa0b75165189c3b801000000e83e02000089c2eb45e9b700000083fafb75125189c3b80100000090e82202000089c2eb298b55008d52f03b55087303ff5520895500c742fc03000000c7420801000000894204c7020d000000518b4d008d49f43b4d087303ff5520894d00c741fc02000000c741040100000089118b45008d40f43b45087303ff5520894500c740fc020000008948048b3c24893889c68b45008d40ec3b45087303ff5520894500c740fc04000000c7400c03000000bba02b7541895808897004c7000900000083c404c383ffff75718b7304f7c601000000741189c1b8c02075410bc0ff552cba0100000089f28b0af7c101000000740489caeb1289c2b89420754190ff552c89d1ba01000000f7c201000000740489d1eb1489c1b89420754183c800ff552c89c8b9010000008b55008d52f43b55087303ff5520895500eb05e9df000000c742fc02000000894a04c702fbffffff8b0883f90b75125289c3b80100000090e8de00000089c1eb4183f9fb75135289c3b8010000000bc0e8c600000089c1eb298b4d008d49f03b4d087303ff5520894d00c741fc03000000c7410801000000894104c7010d000000528b45008d40f43b45087303ff5520894500c740fc02000000c740040100000089088b7d008d7ff43b7d087303ff5520897d00c747fc020000008947048b342489378b45008d40ec3b45087303ff5520894500c740fc04000000c7400c03000000bba02b7541895808897804c7000900000083c404c3b8c42b7541c30bc0|@2846,63|42,0,0 75,0,1 80,0,@2554 92,0,4 123,0,0 163,0,1 168,0,@2551 180,0,4 217,0,0 250,0,1 255,0,@2554 267,0,4 298,0,0 338,0,1 343,0,@2551 355,0,4 366,0,@449 394,0,@369 405,0,0 438,0,-3 469,0,0 540,0,1 545,0,@446 557,0,4 585,0,@369 597,0,0 630,0,-3 645,0,0 650,1,@2830 672,0,0 678,1,@2830 713,0,0 722,0,6 754,0,0 821,0,1 826,0,@446 838,0,4 869,0,@369 881,0,0 914,0,-3 929,0,0 934,1,@2830 956,0,0 962,1,@2830 997,0,0 1006,0,6 1038,0,0 1105,0,1 1110,0,@446 1122,0,4 1149,0,@372 1159,0,0 1182,0,@369 1193,0,0 1212,0,@369 1225,0,0 1265,0,-3 1280,0,0 1286,1,@2830 1303,0,0 1310,1,@2830 1345,0,0 1354,0,6 1386,0,0 1451,0,1 1456,0,@446 1468,0,4 1477,0,@449 2830:C2,1244|3b650c7303ff55248b3b83ff15756d50ff7304be010000008b142483fa01750489f1eb26f7c6010000007503ff553889f083c00270f68b520489c63b650c7303ff5524ebd6b9010000008b4424045023c1a801587503ff55383bc17d4e8b3c2483ff01750eb824ae744190ff552cb80100000083f801750d8b07eb05e9ba00000083c408c3a8017503ff553889c683ee0270f689f08b7f043b650c7303ff5524ebbeb80100000083c408c3bfc0df784183ff017507be03000000eb208b1f8b1383fafb75128b7f043b650c7303ff5524ebdebe01000000be0100000083fe017430b8fcdf784183c800e8520400008b4d008d49f43b4d087303ff5520894d00c741fc02000000894104c701fbffffffeb05b9fcdf78418b45008d40f43b45087303ff5520894500c740fc02000000894804c700edffffff83c408c383fffb757050508b7304f7c6010000007402eb66f7c601000000741089c1b8c020754190ff552cba0100000089f20fb64aff8d4c090189ca83e20783fa017402eb53f7c601000000741289c2b8c020754183c800ff552cb90100000089f18b51fc81e2ffffff008d541201f7c0010000007410eb0ae907010000e91600000089c1eb0ef640ff108b087402f7d98d4c09013bd17765bac0df784183fa017507b903000000eb208b028b3883fffb75128b52043b650c7303ff5524ebdeb901000000b90100000083f9017434b8fcdf78410bc0e82e0300008b75008d76f43b75087303ff5520897500c746fc02000000894604c706fbffffffeb0ae914000000befcdf784189e3c703edffffff89e2897204eb46f7c601000000741189c2b8c02075410bc0ff552cb90100000089f1f7c001000000740489c2eb0eb89420754190ff552cba010000008b4451fe89e2c702fbffffff89e18941048b45008d40f43b45087303ff5520894500c740fc020000008b3c2489388b74240489700483c408c383ff0b75718b73048b0e83f9ff75088b56048b5210eb05baf82575418b3a83ff1575585689d383c800e816fdffff8b3083fef775718b5d008d5bec3b5d087303ff5520895d00c743fc040000008b501089530c8b480c894b088b7808897b048b700489338b34248b3e83ffff751a8b0c248b5104eb0ae97b010000e93e010000ff700c8b4204eb098b500cb898e178415289c18b45008d40f03b45087303ff5520894500eb05e942000000c740fc030000008b1424895008c7400401000000891889ca90ff1289c18b45008d40f43b45087303ff5520894500c740fc02000000894804c7000b00000083c408c383fe0d755b8b58048b1383faf775738b4d008d49ec3b4d087303ff5520894d00c741fc040000008b7b1089790c8b730c8971088b53088951048b530489118b14248b3283feff750e8b3c248b77048b50088b4604eb0fff7008b8cce17841eb06e9680000005289c78b45008d40f03b45087303ff5520894500c740fc03000000eb05e9420000008b730c897008c7400401000000890889fa83c800ff128b5d008d5bf43b5d087303ff5520895d00c743fc02000000894304c7030b0000008b042483c408e98efbffff83c404c383c404c38b0e83f9ff750c8b7b048b5704508b4208eb1883f903750a8b7b0489c28b4708eb088b7b0489c28b47045289c38b042483c404e94efbffff89c68b45008d40f03b45087303ff5520894500c740fc03000000897008895804c7000d000000c383c800|@2845,63|20,0,0 70,0,0 102,0,@51 111,0,0 163,0,0 172,0,@2831 182,0,1 211,0,0 216,0,0 226,0,@2836 234,1,@2837 267,0,-3 274,0,@2836 307,0,-10 346,0,@372 355,0,0 392,0,@372 403,0,0 465,0,@2831 475,0,1 504,0,0 509,0,0 519,0,@2836 526,1,@2837 559,0,-3 571,0,@2836 579,0,-10 601,0,@372 611,0,0 630,0,@369 639,0,0 651,0,-3 724,0,@408 840,0,@2841 887,0,0 929,0,5 1027,0,@2843 1081,0,0 1123,0,5 1236,0,6 2831:O2|@2833,@2832 2832:O2|@2834,@495 2833:O2|-3,100 2834:O2|-3,@2835 2835:S4|42696e64 2836:O2|10,@2831 2837:C2,272|3b650c7303ff55248b3883fffb75048b4004c383ff1575728b700483fe017506b801000000c356bb0100000083fe01750489daeb23f6c3017503ff553889d883c00270f68b760489c33b650c7303ff5524ebd9ba01000000f7c201000000740489d1eb0fb8942075410bc0ff552cb9010000006a01bb8100000089c8ff15a092040850bf01000000eb05e9720000008b74240483fe017502eb56f7c701000000740489fbeb0db894207541ff552cbb0100000057ff7604538b0683c800e83effffff8b54240c8b0c2489444afe8b442408a8017503ff553889c783c70270f68b74240483c40c3b650c7303ff5524eba38b042490ff15209704088b042483c408c3b834e1784190ff552cb80100000090|@2840,63|33,0,0 40,0,0 84,0,0 101,0,@369 111,0,0 118,0,64 126,0,I11 132,0,0 167,0,@369 175,0,0 246,0,I47 258,0,@2838 267,0,0 2838:O3|@7320,@224,@2839 2839:S32|6d616b6556616c202d206e6f7420636f6e7374616e74206f72207265636f7264 2840:S36|434f44455452454528292e6d616b65436f6e737456616c2831296d616b6556616c283129 2841:O1|@2842 2842:C2,16|b8b82775410bc0ff552cb80100000090|@420,1|1,0,@418 11,0,0 2843:O1|@2844 2844:C2,16|b8b82775410bc0ff552cb80100000090|@420,1|1,0,@418 11,0,0 2845:S30|434f44455452454528292e66696e64456e747279496e426c6f636b283229 2846:S26|56414c55455f4f505328292e636f6e7374724d61746368283229 2847:C2,748|3b650c7303ff55248b3bf7c701000000745883fff97c5383ff077f4ebe76e278418d74be1cffe6909090e941000000909090e915010000909090e93e020000909090e9d0010000909090e98f000000909090e9e5010000909090e9b2010000909090e9f7000000909090b89c317541c38b5d008d5bdc3b5d087303ff5520895d00c743fc08000000c7431c01000000c7431801000000c7431401000000c7431003000000c7430c01000000c7430801000000894304b8d02b754189038b45008d40f43b45087303ff5520894500c740fc02000000895804c700f3ffffffc38b5d008d5bdc3b5d087303ff5520895d00c743fc08000000c7431c01000000c7431801000000c7431401000000c7431003000000c7430c01000000c7430801000000894304b854e5784189038b45008d40f43b45087303ff5520894500c740fc02000000895804c700f3ffffffc389c18b4304e8be01000089c789c889faff2250ff73048b5b08b84097040883c800e8aa0300008b5d008d5bec3b5d087303ff5520895d00c743fc04000000c7430c03000000894308bab82b7541895304c703090000008b4d008d49dc3b4d087303ff5520894d00c741fc08000000c7411c01000000c7411801000000c7411401000000c7411003000000c7410c01000000c74108010000008b042489410489198b45008d40f43b45087303ff5520894500c740fc02000000894804c700f3ffffff83c404c3b848cf7841c38b45008d40f43b45087303ff5520894500c740fc020000008b5304895004c700fbffffffc38b5304f7c201000000740489d1eb10b89420754183c800ff552cb9010000008b45008d40f43b45087303ff5520894500c740fc02000000894804c700fbffffffc38b5d008d5bdc3b5d087303ff5520895d00c743fc08000000c7431c01000000c7431801000000c7431401000000c7431003000000c7430c01000000c7430801000000894304bad02b754189138b45008d40f43b45087303ff5520894500c740fc02000000895804c700f3ffffffc390|@2857,63|29,0,$2847+42 107,0,@487 139,0,0 146,0,0 153,0,0 160,0,1 167,0,0 174,0,0 182,0,@450 217,0,-7 249,0,0 256,0,0 263,0,0 270,0,1 277,0,0 284,0,0 292,0,@2848 327,0,-7 338,1,@2849 358,0,I48 366,1,@2853 397,0,1 405,0,@448 414,0,4 445,0,0 452,0,0 459,0,0 466,0,1 473,0,0 480,0,0 521,0,-7 530,0,@2796 567,0,-3 588,0,@369 599,0,0 632,0,-3 664,0,0 671,0,0 678,0,0 685,0,1 692,0,0 699,0,0 707,0,@450 742,0,-7 2848:O2|10,@448 2849:C2,40|89c78b45008d40f43b45087303ff5520894500c740fc02000000bea4e578418930897804c383c800|@2852,49|27,0,@2850 2850:C2,352|3b650c7303ff55248b7a04f7c701000000740489feeb1289c6b89420754190ff552c89f0be010000008b5d008d5bf43b5d087303ff5520895d00c743fc02000000897304c703fbffffff8b75008d76f43b75087303ff5520897500c746fc02000000b9b82b7541894e04891e8b5d008d5bf43b5d087303ff5520895d00c743fc02000000897304c70315000000505383fe017507ba03000000eb208b0e8b0183f8fb75128b76043b650c7303ff5524ebdeba01000000ba0100000083fa01742d8b04240bc0e89af9ffff8b7d008d7ff43b7d087303ff5520897d00c747fc02000000894704c707fbffffffeb038b3c248b75008d76dc3b75087303ff5520897500c746fc08000000c7461c01000000c7461801000000c7461401000000c7461003000000c7460c01000000c74608010000008b5c2404895e04893e8b45008d40f43b45087303ff5520894500c740fc02000000897004c700f3ffffff83c408c3|@2851,63|26,0,@369 37,0,0 70,0,-3 99,0,@448 137,0,10 149,0,1 178,0,0 183,0,0 198,1,@2837 231,0,-3 267,0,0 274,0,0 281,0,0 288,0,1 295,0,0 302,0,0 344,0,-7 2851:S26|56414c55455f4f505328292e6162737472616374283129283129 2852:S25|56414c55455f4f505328292e746167426f78436f6465283129 2853:C2,372|3b650c7303ff55248b7c2404f7c701000000740489feeb1189c6b894207541ff552c89f0be010000008b55008d52f43b55087303ff5520895500c742fc02000000897204c702fbffffff5389c152b8010000008d5424080bc0e8320100008b7d008d7ff43b7d087303ff5520897d00c747fc020000008947048b342489378b5d008d5bf43b5d087303ff5520895d00c743fc02000000897b04c70315000000515383ff017507ba03000000eb208b0f8b0183f8fb75128b7f043b650c7303ff5524ebdeba01000000ba0100000083fa01742b8b0424e8c6f7ffff8b7d008d7ff43b7d087303ff5520897d00c747fc02000000894704c707fbffffffeb038b3c248b75008d76dc3b75087303ff5520897500c746fc08000000c7461c01000000c7461801000000c7461401000000c7461003000000c7460c01000000c74608010000008b5c2404895e04893e8b45008d40f43b45087303ff5520894500c740fc02000000897004c700f3ffffff83c410c204000bc0|@2856,63|27,0,@369 37,0,0 70,0,-3 79,0,0 90,1,@2854 155,0,10 167,0,1 196,0,0 201,0,0 214,1,@2837 247,0,-3 283,0,0 290,0,0 297,0,0 304,0,1 311,0,0 318,0,0 360,0,-7 2854:C2,136|3b650c7303ff55248b7afc5023c7a801587503ff55383bc77d668b75008d76f03b75087303ff5520897500c746fc03000000894608bbd02b7541895e04c7060d000000a8017503ff553889c383c30270f6525689d8e8a6ffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0424890289d083c408c3b801000000c30bc0|@2855,61|54,0,@450 63,0,6 129,0,0 2855:S39|56414c55455f4f505328292e7461675475706c65436f64652833296765744669656c6473283129 2856:S27|56414c55455f4f505328292e7461675475706c65436f6465283329 2857:S25|56414c55455f4f505328292e636f6e7374724d616b65283229 2858:O3|@2860,@4082,@2859 2859:O3|@4279,@4278,@4083 2860:C2,1880|908dbc247cffffff3b7d0c7303ff5528525053bb905775418b0424ba703d754190e82e53fcff50bba8f178418b442404ba703d7541e81a53fcff50bb9cf278418b442408ba703d7541e80653fcff50bb6c4475418b44240cba703d7541e8f252fcff8b7c240483ff01742b8b75008d76f03b75087303ff5520897500c746fc03000000bb90f37841891e8946088b54240c895604eb268b75008d76f43b75087303ff5520897500c746fc02000000bb707c7b41891e8b54240c8956045050506a01bb81000000b81700000090ff15a0920408c700150000008b4d008d49f43b4d087303ff5520894d00c741fc02000000894104c701ffffffff8b45008d40f83b45087303ff5520894500c740fc0100004089088d7c240489078d5c2404c74304010000008b55008d52f43b55087303ff5520895500c742fc020000008b4c2404890a8b4424088942045050526a01bb81000000b817000000ff15a0920408c700150000008b7d008d7ff43b7d087303ff5520897d00c747fc02000000894704c707ffffffff8b5d008d5bf83b5d087303ff5520895d00c743fc01000040893b8d542404891a8d4c2404c74104010000008b45008d40f43b45087303ff5520894500c740fc020000008b7c240489388b5c24088958048b5424288b0a83f9f975058b4a08eb0289d18b55008d52f03b55087303ff5520895500c742fc03000000bb9c7c7b41891a8942088b1c24895a048b5c242c8b7d008d7fe83b7d087303ff5520897d00c747fc0500000056505152ff730457bb887d7b41891f8b5c2438895f108b5c2424895f0c8b5c2404895f088977048b5d008d5bf43b5d087303ff5520895d00c743fc02000000be24837b4189338943048b75008d76f43b75087303ff5520897500c746fc02000000b81429754189068b4424188946048b45008d40f43b45087303ff5520894500c740fc02000000b968847b4189088950048b55008d52f43b55087303ff5520895500c742fc02000000b9d0847b41890a8b4c2410894a048b4d008d49f83b4d087303ff5520894d00c741fc01000040c701030000008b7c24445650526a01516a01ff7424186a016a01ff7424548b4424348b570890ff12508b5c24308b44242c0bc0e8f69702008b5c24248b44242083c800e8e69702008b34248b1683faff75088b4e048b5908eb0d83fa0375058b5e08eb038b5e0483faff75088b46048b4810eb05b9f825754183faff75078b7e048b07eb0f83fa0375058b4604eb05b8010000008b3983fff375358b710489c28b45008d40f43b45087303ff5520894500c740fc02000000c74004ffffffff8b7e148938535152e87698020089c7eb1483fffd7507bf03000000eb05bf0100000053515083ff0174718b75008d76f43b75087303ff5520897500c746fc02000000c74604010000008b5c2408891e83fe0175058b0424eb13568b4424048d54245c0bc0e81e9b020083c404e8769b02008b1083fafb752f89c18b45008d40f43b45087303ff5520894500c740fc02000000bfcc8a7b418938eb05e9d900000089480483c458c38b4c244883f901747150505050505050508d7c2404578b5c2458b89b0000000bc0e8b2f4fbff8b75008d76e03b75087303ff5520897500c746fc070000008b5c2404891e8b5424088956048b4c240c894e088b44241089460c8b7c2414897e108b7c2418897e148b5c241c895e1889f38b0424ba0c037541eb05e9090000000bc0e80a14fcffeb0850505050505050508b4424748b1c248b78048b44244489faff128b5424440bc0ff1289c68b45008d40f43b45087303ff5520894500c740fc02000000bb0c8b7b41891889700483c478c38b342483fe01752a8b45008d40f43b45087303ff5520894500c740fc02000000bba08b7b4189188b54240c89500483c458c389f083c800e8429c020089c3b803000000e8729d02008b5d008d5bf43b5d087303ff5520895d00c743fc020000008943048b54240889138b4d008d49f43b4d087303ff5520894d00c741fc02000000895904c701150000005183fb017507b803000000eb208b3b8b3783fefb75128b5b043b650c7303ff5524ebdeb801000000b80100000083f801742b8b0424e8deefffff8b5d008d5bf43b5d087303ff5520895d00c743fc02000000894304c703fbffffffeb038b1c248b55008d52f43b55087303ff5520895500c742fc02000000c7420401000000891a83fa0175068b4c2404eb13528b4424088d542460e8269f020089c183c4048b45008d40f43b45087303ff5520894500c740fc02000000894804c700130000008b7c244c83ff01746f50505050505050508d742404568b5c245cb89b0000000bc0e896f2fbff8b5d008d5be03b5d087303ff5520895d00c743fc070000008b54240489138b4c2408894b048b44240c8943088b7c2410897b0c8b7424148973108b7424188973148b54241c8953188b0424ba0c037541eb05e907000000e8f211fcffeb0850505050505050508b7424788b1c248b4424488b56040bc0ff128b5424480bc0ff1289c38b45008d40ec3b45087303ff5520894500c740fc04000000ba10907b41891089580c8b4c24308948088b7c242889780483c47cc3|@4081,63|20,0,@717 28,0,@599 34,1,@601 40,0,@2861 49,0,@599 54,1,@601 60,0,@2868 69,0,@599 74,1,@601 80,0,@674 89,0,@599 94,1,@601 132,0,@2875 175,0,@4027 194,0,64 199,0,11 206,0,I11 212,0,10 245,0,-1 288,0,0 335,0,64 340,0,11 346,0,I11 352,0,10 385,0,-1 428,0,0 512,0,@4028 564,0,@4030 619,0,@4043 653,0,@434 691,0,@4047 725,0,@4049 764,0,1 814,1,@4051 830,1,@4051 879,0,@408 906,0,0 949,0,-1 962,1,@4053 976,0,1 983,0,0 1022,0,0 1054,1,@4057 1062,1,@4058 1100,0,@4060 1147,0,77 1154,1,@255 1236,0,@313 1250,1,@315 1317,0,@4062 1363,0,@4063 1386,1,@4064 1393,0,1 1398,1,@4067 1464,0,10 1475,0,1 1504,0,0 1509,0,0 1522,1,@2837 1555,0,-3 1591,0,0 1618,1,@4075 1656,0,9 1687,0,77 1694,1,@255 1774,0,@313 1786,1,@315 1853,0,@4076 2861:O3|@2863,@2865,@2862 2862:O2|@2867,@7351 2863:O2|@2864,@7351 2864:C2,28|8b388b72043bfe750cb803000000c3b801000000c3b801000000c390|@593,53|10,0,1 16,0,0 22,0,0 2865:O2|@2866,@7351 2866:C2,44|89c78b45008d40f03b45087303ff5520894500c740fc03000000897808c740048b0000008b7a048938c30bc0|@593,37|32,0,69 2867:C2,36|8b388b72043bfe750a8b4008c3b801000000c3b8503d754183c800ff552cb80100000090|@593,53|14,0,0 20,0,@597 31,0,0 2868:O3|@2870,@2872,@2869 2869:O2|@2874,@7346 2870:O2|@2871,@7346 2871:C2,28|8b388b72043bfe750cb803000000c3b801000000c3b801000000c390|@593,53|10,0,1 16,0,0 22,0,0 2872:O2|@2873,@7346 2873:C2,44|89c78b45008d40f03b45087303ff5520894500c740fc03000000897808c740048b0000008b7a048938c30bc0|@593,37|32,0,69 2874:C2,36|8b388b72043bfe750a8b4008c3b801000000c3b8503d754183c800ff552cb80100000090|@593,53|14,0,0 20,0,@597 31,0,0 2875:C2,144|3b650c7303ff55245050505050505052508d7c2408578b5a08b89b00000083c800e8b6effbff8b75008d76e03b75087303ff5520897500c746fc070000008b5c2408891e8b54240c8956048b4c2410894e088b44241489460c8b7c2418897e108b7c241c897e148b5c2420895e1889f38b0424ba0c03754190e8160ffcff8b5424048b5a048b042483c424e91c000000|@4026,63|26,0,77 34,1,@255 116,0,@313 122,1,@315 140,1,@2876 2876:C2,272|3b650c7303ff55248b3883fff375718b700453ff36ff7610ff7618538b5e04b80100000090e8020100008b5d008d5bf43b5d087303ff5520895d00c743fc02000000ba9cf9784189138943045368b80b794168e40b794168400c79416a03ff742418ff742418ff74242889c38b44242890e8c217000089c18b45008d40f4eb05e9200000003b45087303ff5520894500c740fc02000000bf947a7b41893889480483c410c3505353bbd47a7b41b80100000083c800e87200000068e87a7b4168487b7b4168747b7b4168a87b7b416a036a016a01ff74241c89c38b44242483c800e85217000089c68b45008d40f43b45087303ff5520894500c740fc02000000bbdc7b7b41891889700483c408c30bc0|@4025,63|32,0,0 38,1,@2877 67,0,@2886 78,0,@2940 83,0,@2942 88,0,@2946 114,1,@2948 152,0,@4011 169,0,@4013 174,0,0 182,1,@2877 187,0,@4014 192,0,@4018 197,0,@4020 202,0,@4022 226,1,@2948 257,0,@4024 2877:C2,768|8d7c24b03b7d0c7303ff552889c6536a01bb83000000b80f00000090ff15a09204088b5d008d5bf43b5d087303ff5520895d00c743fc02000000894304c703010000008b55008d52f83b55087303ff5520895500c742fc01000040891a8b4d008d49f83b4d087303ff5520894d00c741fc01000040c701010000008b45008d40f83b45087303ff5520894500c740fc01000040c700010000008b7d008d7ff83b7d087303ff5520897d00c747fc01000040c707010000008b5d008d5bf83b5d087303ff5520895d00c743fc01000040c703010000005652515057538b75008d76f83b75087303ff5520897500c746fc01000040c706010000008b55008d52f83b55087303ff5520895500c742fc01000040c702010000008b4d008d49f83b4d087303ff5520894d00c741fc01000040c701ffffff7f8b45008d40f83b45087303ff5520894500c740fc01000040c700010000008b7d008d7ff83b7d087303ff5520897d00c747fc01000040c707010000008b5d008d5bf83b5d087303ff5520895d00c743fc01000040c703010000005652515057538b75008d76f83b75087303ff5520897500c746fc01000040c706010000008b55008d52f83b55087303ff5520895500c742fc01000040c702010000008b4d008d49f83b4d087303ff5520894d00c741fc01000040c701010000008b45008d40f83b45087303ff5520894500c740fc01000040c700010000008b7d008d7ff83b7d087303ff5520897d00c747fc01000040c707010000005652515057bb84f878418b44244cba703d754183c800e8da45fcff50bb6c4475418b442450ba703d7541e8c645fcff8b75008d76ac3b75087303ff5520897500c746fc140000008b1c24895e4c8b5424188956488b4c2424894e448b7c2414897e4089463c8b5c2434895e388b5424048956348b4c2430894e308b44242089462c8b7c2408897e288b5c240c895e248b54241c8956208b4c2444894e1c8b4424288946188b7c2448897e148b5c242c895e108b54243889560c8b4c2440894e088b4424108946048b7c243c893e89f083c44cc20400|@2885,63|18,0,65 23,0,7 30,0,I11 63,0,0 119,0,0 149,0,0 179,0,0 209,0,0 245,0,0 275,0,0 305,0,1073741823 335,0,0 365,0,0 395,0,0 431,0,0 461,0,0 491,0,0 521,0,0 551,0,0 561,0,@2878 570,0,@599 578,1,@601 584,0,@674 593,0,@599 598,1,@601 2878:O3|@2880,@2882,@2879 2879:O2|@2884,@7350 2880:O2|@2881,@7350 2881:C2,28|8b388b72043bfe750cb803000000c3b801000000c3b801000000c390|@593,53|10,0,1 16,0,0 22,0,0 2882:O2|@2883,@7350 2883:C2,44|89c78b45008d40f03b45087303ff5520894500c740fc03000000897808c740048b0000008b7a048938c30bc0|@593,37|32,0,69 2884:C2,36|8b388b72043bfe750a8b4008c3b801000000c3b8503d754183c800ff552cb80100000090|@593,53|14,0,0 20,0,@597 31,0,0 2885:S28|49333836434f4445434f4e5328292e636f6465437265617465283329 2886:C2,68|3b650c7303ff55248b7d008d7ff43b7d087303ff5520897d00c747fc020000008b7204897704c707010000008b58088b0c24891c2489fbb8fcf9784151e9320000000bc0|@2939,63|40,0,0 56,0,@2887 62,1,@2888 2887:S11|70757368436f6465526566 2888:C2,248|3b650c7303ff55248b7c24048b771c8b168b0b83f9fb75568b7304f7c6010000007503ff553883fe017c0850b803000000eb0650b80100000083f801750489f0eb12f7c6010000007503ff553889f083e8fa70f653ff770cff772852bbf9ffffff83c800ff15e09e040889c1eb0eb9ffffffff5053ff770cff7728528b45008d40ec3b45087303ff5520894500c740fc0400000089480cc7400811000000c74004030000008b7c240c8938508b5c24048b44240c90e85a0000008b7424188b1c24f6c3017503ff553889da83c20270f68b4e1c89118b44240483f8017410568b5c2414b84097040890e86a0200008b042483c414c2040090|@2938,63|45,0,1 53,0,0 93,0,-4 102,0,I109 111,0,-1 154,0,8 161,0,1 182,1,@2889 228,0,I48 234,1,@2893 2889:C2,456|3b650c7303ff55248b388b378b1683fa017510b808fd784183c800ff552cb8010000008b4e048b395323dff6c3015b7503ff55383bdf7d52f6c3017503ff553883fb017d02eb148b015323d8f6c3015b7503ff55383bd87d02eb10b824ae744183c800ff552cb801000000f6c3017503ff553889df83c70270f68b5c2404895c79feb801000000c204008b39ba0700000089f923caf6c1017503ff553850528d47ffd1faf7ea8d48015a5870edf6c3017503ff553889df83c70270f65123cff6c101597503ff55383bcf7e0489caeb0289faf6c2017503ff553889d183c10270f653ff3052ff7004bb8100000089c890ff15a09204088b3c2489388b5e048b13f6c2017503ff553889d183c10070f68b385123cff6c101597503ff55383bcf7e0d89c2b824ae744183c800ff552c50506a0352bb030000008b460490ff15a0a904088b75008d76f43b75087303ff5520897500c746fc020000008b1c24895e04c706ffffffff8b54240889328b4c240cf6c1017503ff553883f9017d02eb148b035123c8f6c101597503ff55383bc87d02eb10b824ae744183c800ff552cb801000000f6c1017503ff553889cf83c70270f68b74241489747bfeb80100000083c410c2040083c800|@2892,63|20,0,@2890 31,0,0 92,0,@51 103,0,0 131,0,0 141,0,3 233,0,64 242,0,I11 292,0,@51 308,0,1 318,0,I195 354,0,-1 404,0,@51 415,0,0 443,0,0 2890:O3|103,@349,@2891 2891:S39|417474656d707420746f207570646174652061206c6f636b656420737472657463684172726179 2892:S22|5374726574636841727261792e757064617465283329 2893:C2,388|3b650c7303ff55248b7c240450ff7724b815000000e83615fcffbb1c2175410bc0e82a15fcff8b5c240483c800e81e15fcffbb08ff78410bc0e81215fcff8b142483c800ff12b814ff78418b14240bc0ff128b74240c8b5e1c8b13bbffffffff89d083c800e8ee18fcff8b142483c800ff12b820ff78418b14240bc0ff128b4c240c8b41088b38bbffffffff89f883c800e8c218fcff8b142483c800ff12b830ff78418b14240bc0ff128b74240c8b5e308b13bbffffffff89d083c800e89618fcff8b142483c800ff12b8150000008b14240bc0ff12b840ff78418b14240bc0ff128b4c240c8b1c248b411090e8f6000000b8150000008b14240bc0ff128b5c240cb8030000000bc0e86a0400008b780883ff017456508b7004b80100000089f283c800ff128b5c2410508b530c89c389d083c800e8e22afcffff74240889c38b44240490e89a0800008b4c2404b8010000008b1183c800ff1283c4083b650c7303ff5524eba7b801000000e90600000083c410c20400b80100000083c408c204000bc0|@2937,63|17,0,10 22,1,@323 27,0,@377 34,1,@323 46,1,@323 51,0,@2894 58,1,@323 71,0,@2895 92,0,-1 102,1,@336 115,0,@2896 136,0,-1 146,1,@336 159,0,@2897 180,0,-1 190,1,@336 203,0,10 215,0,@2898 238,1,@2899 243,0,10 259,0,1 266,1,@2915 283,0,0 310,1,@435 326,1,@2925 335,0,0 360,0,0 376,0,0 2894:S2|290a 2895:S4|7073703d 2896:S5|206c696d3d 2897:S5|207273703d 2898:S5|726567733d 2899:C2,100|3b650c7303ff55245350bf01000000f7c7010000007503ff553883ff0b7e09b80100000083c408c35789f88d54240c0bc0e84a0000008b3424f7c6010000007503ff553889f383c30270f689df83c4043b650c7303ff5524ebb5b80100000083c40cc390|@2914,63|11,0,0 32,0,0 50,1,@2900 91,0,0 2900:C2,296|3b650c7303ff55248b7af8a8017503ff553883f8017d02eb158b378b1e5023c3a801587503ff55383bc37d02eb1189c3b824ae74410bc0ff552cbe01000000a8017503ff553889c383c30270f68b4c5efe89cef7c6010000007503ff553883fe017e5b525056b8410000008b52fc0bc0ff128b4424088b7c2404f7c7010000007503ff553883ff017d02eb12f7c7010000007503ff553883ff0d7d02eb118b70fcb81401794190ff552cb80100000083ff09750f8b70fcb80d000000eb19e95c00000083ff0b750a8b70fcb80f000000eb058b70fc89f85690e8920000008b142483c800ff128b5c240cb87b0000008b53fc0bc0ff128b54240cff72fcbbffffffff8b44240883c800e8e215fcff8b142483c800ff12b80100000083c414c3b801000000c383c800|@2913,63|49,0,@51 59,0,0 103,0,32 162,0,@2901 171,0,0 184,0,6 204,0,7 218,1,@2903 235,0,61 254,0,-1 266,1,@336 279,0,0 288,0,0 2901:O3|@7320,@224,@2902 2902:S19|426164207265676973746572206e756d626572 2903:C2,180|3b650c7303ff552489c7f7c701000000745883ff017c5383ff0f7f4ebe6a0179418d74befcffe6909090e953000000909090e957000000909090e955000000909090e941000000909090e94b000000909090e949000000909090e947000000909090e945000000909090bbffffffff0bc0e80a15fcff89c3b8e5000000e9f610fcffb810027941c3b81c027941c3b828027941c3b834027941c3b840027941c3b84c027941c3b858027941c3b864027941c30bc0|@2912,63|29,0,$2903+42 107,0,-1 114,1,@336 121,0,114 126,1,@323 131,0,@2904 137,0,@2905 143,0,@2906 149,0,@2907 155,0,@2908 161,0,@2909 167,0,@2910 173,0,@2911 2904:S4|25656178 2905:S4|25656278 2906:S4|25656378 2907:S4|25656478 2908:S4|25657370 2909:S4|25656270 2910:S4|25657369 2911:S4|25656469 2912:S25|49333836434f4445434f4e5328292e72656752657072283129 2913:S35|5452414e535f54414228292e7072696e74526567732832297072696e74526567283129 2914:S24|5452414e535f54414228292e7072696e7452656773283229 2915:C2,288|3b650c7303ff552483f801746e8b45008d40f43b45087303ff5520894500c740fc02000000bf1c04794189388958048b731c8b165350f6c2017503ff553889d183e90270f6f6c1017503ff553883f9017d0489c8eb358b4424045189cb8b400c90e83e26fcff83f801751a8b142483c4043b650c7303ff5524ebbbe913000000b8010000008b042483c4048b142483c408ff228b7d008d7ff43b7d087303ff5520897d00c747fc02000000bec80579418937895f045357bafffffffff6c2017503ff553889d183c10270f68b4424048b781c8b375123cef6c101597503ff55383bce7c0489c8eb2e5189cb8b400c83c800e8ae25fcff83f80175158b142483c4043b650c7303ff5524ebb1b8010000008b042483c4048b142483c408ff220bc0|@2924,63|38,0,@2916 98,1,@435 129,0,0 172,0,@2921 184,0,-1 242,1,@435 268,0,0 2916:C2,136|a8017503ff553883f8017c07bf03000000eb05bf010000008b75008d76f43b75087303ff5520897500c746fc02000000bbc0047941891e8946048b5d008d5bec3b5d087303ff5520895d00c743fc04000000b90c057941890b89530c8943088b42048943048b4d008d49f03b4d087303ff5520894d00c741fc03000000897908897104891989c8c3|@2920,63|13,0,1 20,0,0 49,0,@2917 83,0,@2919 2917:C2,4|8b4204c3|@2918,5| 2918:S36|5452414e535f54414228292e6f766572537461636b2832296d6b49746572283129283129 2919:C2,116|3b650c7303ff552452ff720c8b7a08f7c7010000007503ff553889fe83ee0270f6f7c6010000007503ff553883fe017d0489f0eb358b5c24048b53045689f38b420c83c800e82e24fcff83f80175158b3c2483c4043b650c7303ff5524ebb0b8010000008b042483c4048b142483c408ff220bc0|@2918,63|70,1,@435 96,0,0 2920:S33|5452414e535f54414228292e6f766572537461636b2832296d6b49746572283129 2921:C2,148|8b7a048b771c8b1e5023c3a801587503ff55383bc37d07b903000000eb05b9010000008b5d008d5bf43b5d087303ff5520895d00c743fc02000000bf78067941893b8943048b75008d76ec3b75087303ff5520897500c746fc04000000bf98067941893e89560c8946088b42048946048b7d008d7ff03b7d087303ff5520897d00c747fc03000000894f08895f04893789f8c390|@2920,63|24,0,1 31,0,0 60,0,@2922 94,0,@2923 2922:C2,4|8b4204c3|@2918,5| 2923:C2,120|3b650c7303ff552452ff720c8b7a08f7c7010000007503ff553889fe83c60270f68b5c24048b53048b4a1c8b015023c6a801587503ff55383bf07c0489f0eb2e5689f38b420c83c800e89e22fcff83f80175158b3c2483c4043b650c7303ff5524ebacb8010000008b042483c4048b142483c408ff220bc0|@2918,63|74,1,@435 100,0,0 2924:S24|5452414e535f54414228292e6f766572537461636b283229 2925:C2,280|3b650c7303ff552483fb017508b801000000c20400ff33ff7304ff7308ff730cbbffffffffe84a0ffcff8b5424140bc0ff12b8410000008b54241490ff12bbffffffff8b4424080bc0e8260ffcff8b5424140bc0ff12b8410000008b54241490ff128b5c24148b44240c83c800e8c2000000bb110000008b4424040bc0e8d202000083f801741fb8000b79418b542414ff128b44240483c800e856f9ffff8b5424140bc0ff128b3c2483ffff7502eb52b80c0b79418b54241483c800ff128b3424bbf9ffffff89f223d3f6c2017503ff55385089f2d1fa8d43fff7ea8d50015870edbbffffffff89d0e8860efcff8b5424140bc0ff12b8530000008b54241490ff12b8150000008b5424148b4c241083c41851ff2283c800|@2936,63|14,0,0 33,0,-1 38,1,@336 51,0,32 63,0,-1 74,1,@336 87,0,32 110,1,@2926 115,0,8 126,1,@2932 136,0,@2934 154,1,@2903 177,0,@2935 194,0,-4 227,0,-1 234,1,@336 247,0,41 259,0,10 2926:C2,380|3b650c7303ff55248b3883ff057513538b40040bc0e8a6f8ffff8b142483c404ff2283fffd75448b7004f7c6010000007430f7c601000000740489f2eb0db894207541ff552cba0100000053bbffffffff89d00bc0e8e60dfcff8b142483c404ff22b87f00000089daff2283ff01752c53ff7004b85100000089da90ff128b0424e8120100008b5424040bc0ff12b8530000008b54240483c408ff2283ff03754753ff70088b400490e812f8ffff8b5424040bc0ff12b85c0a79418b54240490ff12bbffffffff8b042483c800e86e0dfcff8b5424040bc0ff12b8530000008b54240483c408ff2283fffb753353ff7004b8680a794189daff12bbffffffff8b042483c800e8360dfcff8b5424040bc0ff12b8530000008b54240483c408ff2253ff7004b8b700000089da90ff128b342483fe017502eb36ff7604bbffffffff8b0683c800e8f60cfcff8b5424080bc0ff12b8410000008b54240890ff128b342483c4043b650c7303ff5524ebc3b8bb0000008b54240483c408ff22|@2931,63|22,1,@2903 63,0,@369 71,0,0 77,0,-1 86,1,@336 99,0,63 117,0,40 130,1,@2927 143,0,41 170,1,@2903 183,0,@2929 195,0,-1 206,1,@336 219,0,41 242,0,@2930 251,0,-1 262,1,@336 275,0,41 293,0,91 316,0,-1 326,1,@336 339,0,32 367,0,93 2927:C2,4|8b4014c3|@2928,1| 2928:S26|49333836434f4445434f4e5328292e70726f634e616d65283129 2929:S2|4028 2930:S6|626173654028 2931:S30|5452414e535f54414228292e7072696e74537461636b556e696f6e283229 2932:C2,36|500bc3a801587503ff55383bc37507bf03000000eb05bf0100000089f883f002c383c800|@2933,41|16,0,1 23,0,0 2933:S24|49333836434f4445434f4e5328292e7265674e6571283229 2934:S4|20696e20 2935:S10|20746f20626173654028 2936:S25|5452414e535f54414228292e7072696e74456e747279283329 2937:S25|5452414e535f54414228292e7072696e74537461636b283329 2938:S25|5452414e535f54414228292e7075736850737461636b283329 2939:S34|475f434f444528292e67656e636f6465283229636c6f73757265416464722d283129 2940:O1|@2941 2941:C2,8|b801000000c30bc0|@2939,1|1,0,0 2942:O1|@2943 2943:C2,16|b8180c79410bc0ff552cb80100000090|@2939,1|1,0,@2944 11,0,0 2944:O3|@7320,@224,@2945 2945:S15|4e6f7420737461746963206c696e6b 2946:O1|@2947 2947:C2,16|b8180c79410bc0ff552cb80100000090|@2939,1|1,0,@2944 11,0,0 2948:C2,1624|3b650c7303ff552450538b44240c83c800e85e06000089c7bb11000000b81100000083c800e86e0b000083f80174285789f883c800e8b60b0000506881841e0089c38b442408ba401979410bc0e8920c00008b3424eb42576a118b5c240889f8ba001f7941e83e120000ff3424bb8ca47941b898a479410bc0e81eedffff50687f841e0089c38b442408ba401979410bc0e84e0c00008b34248b5c242089da83f202f6c2017503ff553883fa017e5856526a058b5c24148b442410ba001f794190e8e2110000ff74240cbba8a47941b898a4794190e8c2ecffff8b3c24f7c7010000007503ff553889fe83ee0270f6505689c38b442414ba4019794190e8e20b00008b0c24eb08b9ffffffff5650508b45008d40f03b45087303ff5520894500c740fc03000040c74008ffffffffc74004ffffffffc700ffffffffc700050000005051b8010000008d54242490e8ee9600008b7d008d7fe83b7d087303ff5520897d00c747fc05000000bea0a6794189378b5c2430895f108b54241089570c8b4c241c894f088b4424188947048b75008d76f03b75087303ff5520897500c746fc03000000b968e07941890e8b4c241c894e088946048b4d008d49dc3b4d087303ff5520894d00c741fc08000000b898e4794189018b44244489411c8b54241c8951188b5424348951148b1c248959108b5c243089590c8b5c24048959088b5c24188959048b5d008d5be83b5d087303ff5520895d00c743fc05000000ba28e9794189138b5424348953108b142489530c8b5424308953088b4424048943048b45008d40cc3b45087303ff5520894500c740fc0c000040ba9cef79418910c7400401000000c7400801000000c7400c01000000c7401001000000c7401401000000c7401801000000c7401c01000000c7402001000000c7402401000000c7402801000000c7402c010000008b55008d52c03b55087303ff5520895500c742fc0f000040575651535052bfa4997a41893ac7420401000000c7420801000000c7420c01000000c7421001000000c7421401000000c7421801000000c7421c01000000c7422001000000c7422401000000c7422801000000c7422c01000000c7423001000000c7423401000000c74238010000008b7d008d7fe03b7d087303ff5520897d00c747fc07000040be84bd7a418937c7470401000000c7470801000000c7470c01000000c7471001000000c7471401000000c74718010000008b75008d76c43b75087303ff5520897500c746fc0e000040b9b4c17a41890ec7460401000000c7460801000000c7460c01000000c7461001000000c7461401000000c7461801000000c7461c01000000c7462001000000c7462401000000c7462801000000c7462c01000000c7463001000000c74634010000008b4d008d49ec3b4d087303ff5520894d00c741fc04000040bb60207b418919c7410401000000c7410801000000c7410c010000008b5d008d5bf43b5d087303ff5520895d00c743fc02000040b81c2e7b418903c74304010000008b45008d40ec3b45087303ff5520894500c740fc04000000ba642f7b4189108b54240489500c8b5424348950088b5424308950048b542404895304c643ff008b5424308951048b5424348951088b54240489510cc641ff00897e048b5424308956088b54243489560c8b5424048956108b5424108956148b5424188956188b54245089561c8b5424548956208b54244c8956248b5424588956288b54244889562c8b542428895630895e34c646ff008b5c2430895f048b5c2434895f0889470c8b5c2404895f108b542414895714894f18c647ff008b0c24bab8307b418951048b5424408951088b5c243089590c8b5c241c8959108b5c24348959148b5c24488959188b54241889511c8b0c248b54244c8951208b5c24508959248b0c248b5424548951288b0c248b5c245889592c8b0c248b54245c8951308b0c248b5c24108959348b0c248b5c2404895938c641ff008b4c2430894b048b5c24048b4c2434894b0889430c8b4c2414894b108973148b74240c8973188b342489731c897b208b7c2408897b248b7424288973288b7c2410897b2cc643ff006a0168bcbc7a416a01bb589c754189c68b44244489f20bc0ff128b44243083c800e886f8000083f801750fb8010000008b542414ff1289c3eb05bb010000008b4424300bc0e81a1e0200508b4424340bc0e8321e0200894424608b1c248b4424388b54244083c46052e9422002000bc0|@4010,63|18,1,@2949 25,0,8 30,0,8 38,1,@2958 54,1,@2960 60,0,1000000 71,0,@2963 78,1,@2965 97,0,@2977 102,1,@2979 110,0,@3182 115,0,@3183 122,1,@2888 128,0,999999 139,0,@2963 146,1,@2965 188,0,@2977 194,1,@2979 203,0,@3184 208,0,@3183 214,1,@2888 248,0,@2963 254,1,@2965 264,0,-1 298,0,-1 305,0,-1 311,0,-1 317,0,2 324,0,0 334,1,@3185 363,0,@3188 422,0,@3262 463,0,@3271 542,0,@3282 600,0,@3290 609,0,0 616,0,0 623,0,0 630,0,0 637,0,0 644,0,0 651,0,0 658,0,0 665,0,0 672,0,0 679,0,0 714,0,@3594 723,0,0 730,0,0 737,0,0 744,0,0 751,0,0 758,0,0 765,0,0 772,0,0 779,0,0 786,0,0 793,0,0 800,0,0 807,0,0 814,0,0 843,0,@3683 852,0,0 859,0,0 866,0,0 873,0,0 880,0,0 887,0,0 916,0,@3689 925,0,0 932,0,0 939,0,0 946,0,0 953,0,0 960,0,0 967,0,0 974,0,0 981,0,0 988,0,0 995,0,0 1002,0,0 1009,0,0 1038,0,@3816 1047,0,0 1054,0,0 1061,0,0 1090,0,@3843 1099,0,0 1128,0,@3847 1320,0,@3853 1515,0,@3677 1522,0,@989 1546,1,@3316 1556,0,0 1571,0,0 1582,1,@3854 1594,1,@3855 1618,1,@3859 2949:C2,1008|8d7c24a03b7d0c7303ff5528505089c66affbb81000000b80d000000ff15a0920408c7000b0000008b5d008d5bf43b5d087303ff5520895d00c743fc02000000894304c703ffffffff8b55008d52f83b55087303ff5520895500c742fc01000040891a89e1891189e0c74004ffffffff8b7d008d7ff43b7d087303ff5520897d00c747fc020000008b1c24891f8b5424048957045050576a01bb81000000b80d00000090ff15a0920408c7000b0000008b4d008d49f43b4d087303ff5520894d00c741fc02000000894104c701ffffffff8b45008d40f83b45087303ff5520894500c740fc0100004089088d7c240489078d5c2404c74304010000008b55008d52f43b55087303ff5520895500c742fc020000008b4c2404890a8b44240889420450505050526a01bb81000000b80f0000000bc0ff15a0920408c7000d0000008b7d008d7ff83b7d087303ff5520897d00c747fc01000040c7070b0000008b5d008d5bf83b5d087303ff5520895d00c743fc01000040ba589c754189138b4d008d49f83b4d087303ff5520894d00c741fc01000040c7010d0000008d54240489028d4424048978048d7c2404895f088d5c2404894b0c8b55008d52ec3b55087303ff5520895500c742fc040000008b4c2404890a8b4424088942048b7c240c897a088b5c2410895a0c5050526a01bb81000000b817000000ff15a0920408c700150000008b55008d52f43b55087303ff5520895500c742fc02000000894204c702ffffffff8b4d008d49f83b4d087303ff5520894d00c741fc0100004089118d44240489088d7c2404c74704010000008b5d008d5bf43b5d087303ff5520895d00c743fc020000008b54240489138b4c2408894b048b45008d40f83b45087303ff5520894500c740fc01000040c700010000008b7d008d7ff83b7d087303ff5520897d00c747fc01000040c707010000008b55008d52f83b55087303ff5520895500c742fc01000040c702030000008b4d008d49f83b4d087303ff5520894d00c741fc01000040c701010000005653505752518b75008d76f83b75087303ff5520897500c746fc01000040c706010000008b5d008d5bf83b5d087303ff5520895d00c743fc01000040c703010000008b45008d40f83b45087303ff5520894500c740fc01000040c70001000000565350bbf41679418b442420ba703d754183c800e83a27fcff50bb6c4475418b442424ba703d7541e82627fcff8b7d008d7fc83b7d087303ff5520897d00c747fc0d0000008b7424188977308b5c2404895f2c8b14248957288947248b4c2448894f208b44241c89471c8b7424148977188b5c240c895f148b5424288957108b4c2420894f0c8b4424088947088b7424348977048b5c2410891f89f883c45cc383c800|@2957,63|19,0,64 24,0,6 30,0,I11 36,0,5 69,0,-1 108,0,-1 154,0,64 159,0,6 166,0,I11 172,0,5 205,0,-1 248,0,0 297,0,64 302,0,7 310,0,I11 316,0,6 346,0,5 375,0,@989 407,0,6 495,0,64 500,0,11 506,0,I11 512,0,10 545,0,-1 588,0,0 655,0,0 685,0,0 715,0,1 745,0,0 781,0,0 811,0,0 841,0,0 849,0,@2950 858,0,@599 866,1,@601 872,0,@674 881,0,@599 886,1,@601 2950:O3|@2952,@2954,@2951 2951:O2|@2956,@7349 2952:O2|@2953,@7349 2953:C2,28|8b388b72043bfe750cb803000000c3b801000000c3b801000000c390|@593,53|10,0,1 16,0,0 22,0,0 2954:O2|@2955,@7349 2955:C2,44|89c78b45008d40f03b45087303ff5520894500c740fc03000000897808c740048b0000008b7a048938c30bc0|@593,37|32,0,69 2956:C2,36|8b388b72043bfe750a8b4008c3b801000000c3b8503d754183c800ff552cb80100000090|@593,53|14,0,0 20,0,@597 31,0,0 2957:S25|5452414e535f54414228292e74746162437265617465283129 2958:C2,28|500bc3a801587503ff55383bc37506b803000000c3b801000000c390|@2959,9|16,0,1 22,0,0 2959:S23|49333836434f4445434f4e5328292e7265674571283229 2960:C2,148|3b650c7303ff55248b78308b37bbf9ffffff89f223d3f6c2017503ff55385089f2d1fa8d43fff7ea8d50015870ed8b37f7c6010000007503ff553889f383c30270f6891f8b378b58188b0b5123cef6c101597503ff55383bf17e048b3789338b75008d76f43b75087303ff5520897500c746fc02000000895604c706fbffffff8b142489042489f3b81419794152e919e1ffff90|@2962,63|14,0,-4 124,0,-3 137,0,@2961 143,1,@2888 2961:S5|696e637370 2962:S20|5452414e535f54414228292e696e637370283129 2963:O2|@2965,@2964 2964:O2|@2968,@2963 2965:C2,240|3b650c7303ff5524525053ff700c8b0424e81610fcff83f8017550bbffffffff8b44240490e83efdfbff89c3b8641a7941e82af9fbff8b7d008d7ff03b7d087303ff5520897d00c747fc03000000894708be54cf7441897704bbfcc1b441891f89f890ff552cb8010000008b78048b74241489fb23def6c3017503ff55388d5fff03de70f6f6c3017503ff553883fb017f1d8b54240c8b4c2408894c24148b5c2404b8030000008b520483c410ff228b55008d52ec3b55087303ff5520895500c742fc040000008b480c894a0c8b7808897a08895a048b18891a895424148b5c24048b042483c410e9dfe0ffff83c800|@2967,63|18,1,@435 28,0,-1 38,1,@336 45,0,@2966 50,1,@323 82,0,@224 90,0,@7320 103,0,0 163,0,1 233,1,@2889 2966:S23|696e6372557365436f756e743a206e6f20656e74727920 2967:S27|5452414e535f54414228292e696e6372557365436f756e74283329 2968:C2,416|3b650c7303ff55248b7c2404525053ff770c8b0424e8c20efcff83f801750bb80100000083c410c204008b308b4808bb1100000089c883c800e826fdffff83f8017407b811000000eb5f8b44240883f8017502eb3d8b1e83fb057507bf03000000eb2883fbfb751e8b5604f6c2017503ff553883fa017d07bf03000000eb0cbf01000000eb05bf0100000083ff017502eb1c8b7c2414568b5f1089c890e81a010000b811000000eb0be90500000089c856eb015689c7bb1100000089f8e8a2fcffff83f80174706a018b5c240c8b442408e8a6dfffff8b34248b1e83fb0575148b5424188b5a108b460483c800e8ca000000eb5583fb0375138b5424188b5a108b46040bc0e8b2000000eb3d83fbff75388b560483fa017502eb2e8b4c2410ff72046aff8b1a8b4424208b510483c800ff128b1424eb05e92000000083c4043b650c7303ff5524ebcb8b54241889d08b4c241483c41c51e9340200008b75008d76ec3b75087303ff5520897500c746fc04000000c7460cffffffff897e08c74604010000008b1c24891e897424188b5c24088b44240483c414e9dedeffff0bc0|@2976,63|22,1,@435 32,0,0 48,0,8 58,1,@2958 68,0,8 93,0,1 121,0,1 128,0,0 135,0,0 158,1,@2969 163,0,8 183,0,8 190,1,@2958 210,1,@2889 238,1,@2969 262,1,@2969 344,1,@2974 375,0,-1 385,0,0 410,1,@2889 2969:C2,288|3b650c7303ff552490e82e010000a8017503ff553883f8017d02eb158b138b0a5023c1a801587503ff55383bc17d02eb1289c2b824ae744183c800ff552cbf01000000a8017503ff553889c783c70270f68b4c7afe89cf83ff01754bbbffffffffe8f6f9fbff89c3b8f41d7941e8e2f5fbff8b7d008d7ff03b7d087303ff5520897d00c747fc03000000894708be54cf7441897704bbfcc1b441891f89f890ff552cb80100000083ff0375198b730c8b0ef6c1017503ff553889ce83c60270f68b4b0c8931f7c7010000007503ff553889fe83ee0270f6a8017503ff553883f8017d02eb138b0a5023c1a801587503ff55383bc17d02eb0fb824ae74410bc0ff552cb801000000a8017503ff553889c783c70270f689747afeb801000000c390|@2973,63|10,1,@2970 52,0,@51 63,0,0 93,0,-1 98,1,@336 105,0,@2972 110,1,@323 142,0,@224 150,0,@7320 163,0,0 249,0,@51 259,0,0 282,0,0 2970:C2,24|83f80d7506b809000000c383f80f7506b80b000000c3c390|@2971,1|6,0,4 17,0,5 2971:S22|49333836434f4445434f4e5328292e6e526567283129 2972:S29|667265653a20726567697374657220616c726561647920667265652023 2973:S19|5452414e535f54414228292e66726565283229 2974:C2,104|3b650c7303ff55248b781c8b37f7c6010000007503ff553889f383eb0270f68b70088b165323daf6c3015b7503ff55383bda7c2b50538b400ce80e0bfcff83f80175138b4c24048b411c8b3c24893889c883c408ebaab80100000083c408c3b801000000c383c800|@2975,63|58,1,@435 87,0,0 96,0,0 2975:S23|5452414e535f54414228292e636c6561724f6666283129 2976:S26|5452414e535f54414228292e72656d6f7665456e747279283329 2977:O2|@2979,@2978 2978:O3|@3001,@3155,@3000 2979:C2,236|3b650c7303ff55248b7d008d7ff03b7d087303ff5520897d00c747fc03000000be2420794189378947088b7424048977048b4d008d49f43b4d087303ff5520894d00c741fc02000000c741040100000089318b75008d76f83b75087303ff5520897500c746fc01000000890e5053ff70285756565350bbe4207941b8030000008b520490ff12ff7424108b5c24048b44240883c800e8820100008b5c24108b5310ff7204ff7208ff720c8b1a8b44242490e8b20400008b4c240883f90174208b44240c0bc0e85a0800008b7c2410897c2418bbbc28794183c414e96dddffffb80100000083c414c204000bc0|@2999,63|33,0,@2980 76,0,0 119,0,@2982 124,0,1 150,1,@2985 178,1,@2989 198,1,@2996 211,0,@2998 219,1,@2893 224,0,0 2980:C2,120|3b650c7303ff55248b42088b78108b4204e866fdffffa8017503ff553883f8017d02eb158b178b0a5023c1a801587503ff55383bc17d02eb0eb824ae744190ff552cbe01000000a8017503ff553889c683c60270f68b4c72fe89cef7c6010000007503ff553883fe017e06b803000000c3b801000000c390|@2981,55|18,1,@2970 58,0,@51 67,0,0 108,0,1 114,0,0 2981:S34|5452414e535f54414228292e6765745265676973746572283329696e557365283129 2982:O1|@2983 2983:C2,8|b803000000c30bc0|@2984,1|1,0,1 2984:S29|5452414e535f54414228292e6765745265676973746572283329283129 2985:C2,92|3b650c7303ff55248b7c240450ff770c538b771c8b16bb0300000089d08d54240ce852000000b8010000008b54240890ff1283f8017419bb01000000b8030000008d54240ce82e00000083c40cc20400b80100000083c40cc2040090|@2988,63|23,0,1 34,1,@2986 39,0,0 56,0,0 61,0,1 70,1,@2986 81,0,0 2986:C2,608|3b650c7303ff55245323d8f6c3015b7503ff55383bd87d6e8b7a045250538b470ce8ae07fcff83f8017502eb5e8b308b48048b7808ff700cbb1100000089f80bc0e816f6ffff83f8017402eb5b8b5c240c8b53f483fa017502eb525651578b0283f8017507bf01000000eb358b70048b1c248b0090e8e2f5ffff83f8017411bf03000000eb1be9ce010000e98401000089f03b650c7303ff5524ebc4bf0100000083ff017561eb0ae964010000565157eb5a8b5c24088b0b83f905755e8b4424188b78f483ff017507ba03000000eb63ff73048b3783fe017507ba01000000eb358b1c248b0683c800e86ef5ffff83f8017407ba03000000eb1c8b76043b650c7303ff5524ebcee97e000000e979000000ba0100000083c404eb5e83f903755e8b4424188b78f483ff01750cba03000000eb50e94b000000ff73048b3783fe017507ba01000000eb2b8b1c248b0683c800e806f5ffff83f8017407ba03000000eb128b76043b650c7303ff5524ebceba0100000083c404eb0ae905000000ba0100000083fa017502eb718b4c240483f901751d8b442418ff70048b5c2414b801000000ba4c19794190e84af7ffffeb5e8b4424188b78048b5f108b0424e8f2f8ffff8b7424188b5d008d5bec3b5d087303ff5520895d00c743fc040000008b54240c89530cc74308110000008b4c2404894b048b4424088903eb05e90e000000538b5c24148b46f890e866d7ffff83c40c83c4048b4424088b78fcb80100000089fa0bc0ff1283f80174258b3424f7c6010000007503ff553889f383c30270f68b4424048b54240883c40ce9b0fdffffb80100000083c40cc3b801000000c390|@2987,63|34,1,@435 57,0,8 66,1,@2958 102,0,0 118,1,@2958 128,0,1 157,0,0 202,0,1 219,0,0 234,1,@2958 244,0,1 274,0,0 301,0,1 323,0,0 338,1,@2958 348,0,1 368,0,0 383,0,0 415,0,0 420,0,@2964 426,1,@2968 446,1,@2969 488,0,8 522,1,@2889 540,0,0 593,0,0 602,0,0 2987:S38|5452414e535f54414228292e72656d6f766546726f6d4361636865283329636c656172283229 2988:S30|5452414e535f54414228292e72656d6f766546726f6d4361636865283329 2989:C2,356|3b650c7303ff552489c789f890e80af9ffffa8017503ff553883f8017d02eb138b135023c2a801587503ff55383bc27d02eb1089c2b824ae744190ff552cbe01000000a8017503ff553889c683c60270f68b5473fe89d683fe017571a8017503ff553883f8017d02eb138b335023c6a801587503ff55383bc67d02eb09b824ae744190ff552ca8017503ff553889c283c20270f6c74453fe030000008b45008d40f43b45087303ff5520894500c740fc02000000c740040100000089388b7d008d7ff83b7d087303ff5520eb05e944000000897d00c747fc0100000089078b7424088b1e89f883c800e8920000008b54240889028b4424048b38f7c7010000007503ff553889fe83ee0270f68930b801000000c20c00bbffffffff0bc0e81af1fbff89c3b8f8277941e806edfbff8b4d008d49f03b4d087303ff5520894d00c741fc03000000894108b854cf7441894104bffcc1b441893989c890ff552cb80100000090|@2995,63|14,1,@2970 54,0,@51 63,0,0 126,0,@51 152,0,1 183,0,0 234,1,@2990 271,0,0 279,0,-1 286,1,@336 293,0,@2994 298,1,@323 330,0,@224 338,0,@7320 351,0,0 2990:C2,144|3b650c7303ff552483f8017506b801000000c383fb017506b801000000c38b1b8b0083c800e88200000050bf0100000083f801750489feeb26f7c7010000007503ff553889fb83c30270f68b400489df3b650c7303ff5524ebd6be0100000083fe0d7509b80100000083c404c38b45008d40f83b45087303ff5520894500c740fc010000008b1c24891883c404c30bc0|@2993,61|14,0,0 25,0,0 38,1,@2991 44,0,0 91,0,0 101,0,0 2991:C2,236|3b650c7303ff552483fb017501c383f801750389d8c389c789de8b1e8b0783c800e836f1ffff83f8017435ff378b5e048b47040bc0e8c6ffffff8b5d008d5bf43b5d087303ff5520895d00c743fc020000008943048b1424891389d883c404c38b0783c800e886f6ffff89c38b0683c800e87af6ffff5323d8f6c3015b7503ff55383bd87d32ff3789f38b4704e86effffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0424890289d083c404c3ff368b5e0489f80bc0e83affffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0424890289d083c404c3|@2992,61|34,1,@2958 102,1,@2970 114,1,@2970 2992:S20|5452414e535f54414228292e6d65726765283229 2993:S26|5452414e535f54414228292e726567536574556e696f6e283229 2994:S29|676574527365743a2063616e2774206765742072656769737465722023 2995:S22|5452414e535f54414228292e67657452736574283529 2996:C2,56|3b650c7303ff55248b388b3756bb750000008b4014e85eeafbff50bb030000008b44240490e856eefbff89c38b042483c408e941eafbff90|@2997,63|14,0,58 22,1,@323 28,0,1 38,1,@336 51,1,@323 2997:S30|49333836434f4445434f4e5328292e7472616365436f6e74657874283129 2998:S11|6765745265676973746572 2999:S26|5452414e535f54414228292e6765745265676973746572283329 3000:O2|@3162,@3161 3001:C2,88|3b650c7303ff55248b7c24045250ff770c53ff7728b8010000008d54241483c800e84e0000008b342483fe01741f8b5c2418895c2420bbe89d7941b8409704088b54241483c42052e91bd4ffffb80100000083c414c20c00|@3154,63|22,0,0 34,1,@3002 55,0,@3153 60,0,I48 73,1,@2893 78,0,0 3002:C2,1120|3b650c7303ff55248b7a048b771c8b1e5023c3a801587503ff55383bc37d5d525089c38b470c83c800e8e2fffbfff7c00100000075598b108b0a83f90375638b780483ff017502eb248b742404ff7204ff720857ff7008ff700c8b4424148b56f083c800ff1283f8017460eb14ff7204ff720857ff7008ff700ceb59e9d70300008b5c24188b530c83fa017507eb50e99e0300008b0a83f901750cb801000000eb38e9910100008b5c24108b01e8e6edffff83f8017407b803000000eb1c8b49043b650c7303ff5524ebcbe967030000b801000000e95d03000083f801745e8b7c240883ff01751c8b742418ff76048b5c2418b801000000ba4c197941e832f0ffffeb668b7424188b5ef883fb017510b8010000008d54241ce85e030000eb5cbb110000008b442404e8fedfffff83f801745a8b560c83fa017507eb67e9f50200008b0a83f9017507b801000000eb368b5c24048b0183c800e83aedffff83f801740cb803000000eb1ce9c80200008b49043b650c7303ff5524ebc8e9b6020000b80100000083f8017407eb17e9120000008b4424048d54241c83c800e81a330000eb718b5424188b4a048b7a0c83ff017507b8589c7541eb388b3783fe017507b801000000eb2a8b5afc8b430489f390e8fe65000089c78b45008d40f83b45087303ff5520894500c740fc01000000893889c38b41100bc0e8ba66000089c6bb1100000089f00bc0e81edfffff83f8017415eb05e91d02000089f08d54241c90e896320000eb6eb8010000008d54241ce846020000eb6383f90575638b7c2404ff7204ff7004ff7008ff700c8b4424108b57f0ff1283f8017502eb598b7424148b5e0c83fb017502eb558b1383fa017507b901000000eb428b7a048b5c240c8b0283c800e80eecffff83f8017416b903000000eb25e99c010000e997010000e98601000089fa3b650c7303ff5524ebbcb901000000e97401000083f90174658b74240883fe01751f8b5c2414ff73048b5c2414b801000000ba4c19794183c800e84eeeffffeb6a8b5c24148b53f883fa017510b8010000008d542418e8ce6a0000eb60bb110000008b442404e81adeffff83f801745e8b4c24148b410c83f8017507eb67e9050100008b3883ff017507be01000000eb368b5c24048b0783c800e852ebffff83f801740cbe03000000eb1ce9d80000008b7f043b650c7303ff5524ebc8e9c6000000be0100000083fe017407eb17e9120000008b4424048d54241883c800e89a6c0000eb6d8b4c24148b41048b710c83fe017507bf589c7541eb3d8b1e83fb017507bf01000000eb2a8b51fcff70108b4204e8166400008b7d008d7ff83b7d087303ff5520897d00c747fc010000008907eb08ff7010eb03ff701089fb8b04240bc0e8ca64000089c1bb1100000089c8eb05e93100000083c800e826ddffff83f801740d89c88d54241ce80e6c0000eb0eb8010000008d54241ce8aa69000083c404eb045050505050eb0550505050508b542414f6c2017503ff553889d183c10270f689c88b54241883c41ce9a8fbffffb801000000c30bc0|@3152,63|42,1,@435 156,0,0 174,1,@2958 184,0,1 209,0,0 244,0,0 249,0,@2964 254,1,@2968 273,0,0 282,1,@3003 289,0,8 298,1,@2932 330,0,0 346,1,@2958 356,0,1 386,0,0 414,1,@3093 436,0,@989 450,0,0 466,1,@3136 506,1,@3138 513,0,8 522,1,@2932 546,1,@3093 553,0,0 562,1,@3003 627,0,0 646,1,@2958 656,0,1 690,0,0 725,0,0 730,0,@2964 738,1,@2968 757,0,0 766,1,@3144 773,0,8 782,1,@2932 818,0,0 834,1,@2958 844,0,1 874,0,0 902,1,@3146 924,0,@989 938,0,0 954,1,@3136 1002,1,@3138 1009,0,8 1026,1,@2932 1042,1,@3146 1049,0,0 1058,1,@3144 1113,0,0 3003:C2,552|3b650c7303ff55248b42fc8b78fc52ff72e48b58088b40048b570890ff128b3424bb110000008b46e8e882dcffff83f80174708b5efc8b56e883fa13753eff7308bb190000008b0424e8f6010000b8d41176410bc0e8161400008b1c24e8c61e00006a0dff742404bb0b000000b80900000083c800e82e2d0000eb708b4d008d49f43b4d087303ff5520894d00c741fc02000000895104c701ddffffffff730851eb05e927000000bb190000008b442404e88e0100008b0424e8b21300008b5c240483c800e85e1e000083c404eb4e8b5efcff76f0ff76f4ff7308bb190000008b04240bc0e85a010000eb05e92c000000b8d411764183c800e8721300008b1c24e8221e00006a0dff7424048b5c240c8b44241090e88e2c000083c4088b5424048b4afc8b41048b58108b42f4e842edffff8b7c24048b77fc8b5e048b53308b0ab8f9ffffff89cb23d8f6c3017503ff5538505289cad1fa8d40fff7ea8d58015a5870eb8b55008d52f43b55087303ff5520895500c742fc02000000895a04c702fbffffff8b4424048b5d008d5bec3b5d087303ff5520895d00c743fc04000000894b0c8b48e8894b088b48ec894b048913538b5ff88b46f4e876cbffff8b4424048b78fc8b77048b5e308b13f6c2017503ff553889d183c10270f6890b8b138b4e188b015223d0f6c2015a7503ff55383bd07e278b5424048b42fc8b78048b5c24048b4bfc8b71048b56308b028b5f188903b80100000083c408c3b80100000083c408c383c800|@3092,63|34,0,8 42,1,@2932 66,0,12 74,1,@3004 79,0,@1251 86,1,@3038 94,1,@3052 105,0,5 110,0,4 118,1,@3088 153,0,-18 169,0,12 178,1,@3004 186,1,@3038 198,1,@3052 220,0,12 230,1,@3004 242,0,@1251 250,1,@3038 258,1,@3052 278,1,@3088 302,1,@2969 322,0,-4 385,0,-3 442,1,@2889 532,0,0 541,0,0 3004:C2,240|3b650c7303ff55248b78308b3783fe017507ba03000000eb05ba0100000089d683f6028b50048b0a83f9017402eb338b48408b3983ff017502eb21c70201000000505352565189fb90e8be0000008b3424c7060100000083c404eb0a50535256eb04505352568b4424048b388b342483fe0174158b542408f6c2017503ff553889d383c30c70f6eb048b5c2408ff74240c89da89fb89d00bc0e80e1900008b4c240c8b41408b3883ff017502eb208b7104c706010000005089fb89c890e84a0000008b1c24c7030100000083c4048b54240c8b4a308b0183f8017509b80100000083c410c389d083c410e91924000090|@3087,63|19,0,1 26,0,0 61,0,0 74,1,@3005 83,0,0 154,1,@3047 179,0,0 190,1,@3005 199,0,0 221,0,0 235,1,@3069 3005:C2,680|3b650c7303ff552483fb017506b801000000c38b3b8b378b1683faff757050ff7304ff30ff7008ff7034ff76048b1c248b44240890e88a020000a8017503ff553881f8010100007c25a8017503ff553889c781effe01000070f3f7c7010000007503ff553889f983e90270f6eb0289c18b44240c8b388b342489fb23def6c3017503ff553889fb2bde8d5b01eb05e9b500000070edf6c3017503ff553889da83ea0270f68b388b5c2404893bf6c2017503ff553881fa01ffffff7c12f6c2017503ff553881fa010100007d02eb08b804367941ff552c83f901740bb82c36794183c800ff552cf6c2017503ff553883fa017d14f6c2017503ff553889d181c10002000070f3eb0289d1f7c101000000740489caeb0ef641ff108b117402f7da8d54120189d181e1ff0100005189f38b44240c83c800e8f20300008b5c24148b0424e8f20c0000eb6e50ff7304ff30ff7008ff7034ff76048b5c24088b042483c800e8260e00008b4c240c8b398b342489fb23def6c3017503ff553889fb2bde8d5b0170f4f6c3017503ff553889da83ea0870f68b398b5c2404893b83f801740ab82c3679410bc0ff552c83fa017571b858427941eb05e9db0000000bc0e85e0f0000f7c001000000740489c2eb0ef640ff108b107402f7da8d54120189d181e1ff0100008b0424a8017503ff553889c783ef0270f6515189fb8b442410e82a030000ff34248b5c24088b442410e81a0300008b742404f7c601000000750aeb05e95f000000ff553889f383c30270efff34248b44241083c800e8ee0200008b542404f6c2017503ff553889d183c10470f6ff342489cb8b44241083c800e8ca0200008b442404a8017503ff553889c783c70670f6ff342489fb8b442410e8aa020000eb0fff74240889f389d090e83a1200005083c4048b5c24108b44241483c418e95afdffff0bc0|@3046,63|14,0,0 54,1,@3006 207,0,@3010 220,0,@3012 310,1,@3014 322,1,@3031 354,1,@3035 417,0,@3012 432,0,@3037 446,1,@3038 510,1,@3014 526,1,@3014 570,1,@3014 606,1,@3014 638,1,@3014 654,1,@3042 3006:C2,404|3b650c7303ff55248b388b47048b70fc81e6ffffff008d743601f7c6010000007503ff553883fe017d1ab92ccb744189ca23d6f6c2017503ff55388d51ff03d670f6eb0289f2b90900000089ce23f2f7c6010000007503ff553850528d41ffd1faf7ea8d70015a5870edf6c3017503ff553883fb017c3b5323def6c3015b7503ff55383bde7d2bf7c301000000740489daeb10b89420754183c800ff552cba0100000089d1d1e90fb60c088d4c090189c8c35689dabbffffffff89d090e8fae1fbff50bbffffffff8b44240490e8eae1fbff8b4d008d49f43b4d087303ff5520894d00c741fc02000000c741040100000089018b45008d40f43b45087303ff5520894500c740fc02000000894804bfb435794189388b75008d76f43b75087303ff5520897500c746fc020000008946048b1c24891e8b45008d40f43b45087303ff5520894500c740fc02000000897004bad035794189100bc0e88ee5fbff8b4d008d49f03b4d087303ff5520894d00c741fc03000000894108b854cf7441894104bffcc1b441893989c890ff552cb80100000090|@3009,63|43,0,@176 71,0,4 148,0,@369 159,0,0 182,0,-1 190,1,@336 196,0,-1 206,1,@336 237,0,0 271,0,@3007 337,0,@3008 346,1,@347 378,0,@224 386,0,@7320 399,0,0 3007:S17|206f7574206f662072616e676520302e2e 3008:S15|637365674765743a20496e64657820 3009:S19|434f44455f5345472e63736567476574283229 3010:O3|@7320,@224,@3011 3011:S14|6a756d7020746f6f206c61726765 3012:O3|@7320,@224,@3013 3013:S39|7265616c6c794669784272616e636865733a206a756d7020616c72656164792070617463686564 3014:C2,716|3b650c7303ff55248b388b3783feff750eb85439794190ff552cb8010000008b57048b4afc81e1ffffff008d4c0901f6c1017503ff553883f9017d1abe2ccb74415089f023c1a8017503ff55388d46ff03c170f6eb035089c8be0900000089f123c8f6c1017503ff5538505289f2d1fa8d40fff7ea8d48015a5870ebf6c3017503ff553883fb017d7389d8bbffffffff90e8bedffbff8b7d008d7ff43b7d087303ff5520897d00c747fc02000000be9839794189770489078b45008d40f43b45087303ff5520894500c740fc02000000897804bbc8397941891883c800e8a2e3fbff8b55008d52f03b55087303ff5520895500c742fc03000000eb05e91e000000894208b954cf7441894a04b8fcc1b441890289d00bc0ff552cb8010000005323d9f6c3015b7503ff55383bd97d3af7c301000000740489d8eb10b89420754183c800ff552cb8010000008b7424085389f3d1ebd1e8881c025b8d440001b80100000083c404c204008b3783fe01740fb8e03979410bc0ff552cb801000000be0700000089f223d0f6c2017503ff55385089f2d1fa8d40fff7ea8d50015870edf6c3017503ff553883fb017c07b803000000eb05b80100000083f803750489dfeb0ff6c3017503ff553889df83ef0670f6535152bb0900000089f890ff15e09e0408a8017503ff553889c683c60270f68b1c245323def6c3015b7503ff55383bde7e0489daeb0289f2f7c201000000740489d1eb0eb89420754190ff552cb9010000006a01bb0300000089c8ff15a09204088b7d008d7ff43b7d087303ff5520897d00c747fc02000000894704c707010000008b75008d76f83b75087303ff5520897500c746fc01000040893e5057ff74240c6a0189f38b44241c0bc0e82e0100008b5c2410f7c301000000740489daeb0db894207541ff552cba010000008b4c24048b44241cd1e8d1ea8804118d4400018d5412018b7c24148b34248937b80100000083c418c204000bc0|@3030,63|18,0,@3015 27,0,0 61,0,@176 90,0,4 140,0,-1 146,1,@336 175,0,@3017 212,0,@3019 222,1,@347 261,0,@224 269,0,@7320 283,0,0 316,0,@369 327,0,0 351,0,0 369,0,@3020 379,0,0 384,0,3 430,0,1 437,0,0 469,0,4 478,0,I109 534,0,@369 543,0,0 550,0,1 558,0,I11 591,0,0 638,1,@3022 659,0,@369 667,0,0 704,0,0 3015:O3|@7320,@224,@3016 3016:S42|637365675365743a2063616e2774206368616e6765206c6f636b656420636f646520736567656d656e74 3017:O2|@3018,0 3018:S25|206f7574206f662072616e676520302e2e696e66696e697479 3019:S15|637365675365743a20496e64657820 3020:O3|@7320,@224,@3021 3021:S34|637365675365743a2063616e277420657874656e6420636f6465207365676d656e74 3022:C2,896|3b650c7303ff55248b388b0783f80175718b338b1e83fb01756d8b57048b4afc81e1ffffff008d4c0901f6c1017503ff553883f9017d1cb82ccb744189c223d1f6c2017503ff55388d50ff03d170f689d0eb0289c88b56048b4afc81e1ffffff008d4c0901f6c1017503ff553883f9017d26bb2ccb74415089d823c1a801750feb0ae9e8020000e9d4020000ff55388d43ff03c170eaeb035089c8bb090000008b0c2489da23d1f6c2017503ff55385089dad1fa8d41fff7ea8d50015870edb90900000089cb23d8f6c3017503ff5538505289cad1fa8d40fff7ea8d58015a5870ebb9090000008b442408ff7704ff76045253515089cf23f8f7c7010000007503ff5538505289cad1fa8d40fff7ea8d78015a5870eb8b74242489d923cef6c1017503ff553889d92bce8d490170f4f7c6010000007503ff553883fe017d02eb125223d6f6c2015a7503ff55383bd67c02eb72bbffffffff89f083c800e842dbfbff50bbffffffff8b44241090e832dbfbff8b7d008d7ff43b7d087303ff5520897d00c747fc02000000c747040100000089078b75008d76f43b75087303ff5520897500c746fc02000000897e04bbb4357941891e8b55008d52f43b55087303ff5520eb05e971000000895500c742fc020000008972048b0c24890a8b45008d40f43b45087303ff5520894500c740fc02000000895004bfb83d7941893883c800e8cedefbff8b75008d76f03b75087303ff5520897500c746fc03000000894608bb54cf7441895e04bafcc1b441891689f090ff552cb801000000f7c7010000007503ff553883ff017d02eb125123cff6c101597503ff55383bcf7c02eb7251bbffffffff89f80bc0e836dafbff50bbffffffff8b44240490e826dafbff8b7d008d7ff43b7d087303ff5520897d00c747fc02000000c747040100000089078b75008d76f43b75087303ff5520897500c746fc02000000897e04bbb4357941891e8b55008d52f43b55087303ff5520eb05e971000000895500c742fc020000008972048b0c24890a8b45008d40f43b45087303ff5520894500c740fc02000000895004bfdc3d7941893883c800e8c2ddfbff8b75008d76f03b75087303ff5520897500c746fc03000000894608bb54cf7441895e04bafcc1b441891689f090ff552cb801000000bb0100000089f88d54241c83c800e88a00000083c41cc20800b8f03e79410bc0ff552cb801000000b8f03e794183c800ff552cb80100000090|@3029,63|56,0,@176 115,0,@176 156,0,4 192,0,4 227,0,4 340,0,-1 350,1,@336 356,0,-1 366,1,@336 397,0,0 431,0,@3007 504,0,@3023 514,1,@347 546,0,@224 554,0,@7320 567,0,0 609,0,-1 618,1,@336 624,0,-1 634,1,@336 665,0,0 699,0,@3007 772,0,@3024 782,1,@347 814,0,@224 822,0,@7320 835,0,0 840,0,0 854,1,@3025 865,0,@3027 875,0,0 880,0,@3027 891,0,0 3023:S25|63736567436f70795365673a2042797465206c656e67746820 3024:S25|63736567436f70795365673a2042797465206f666673657420 3025:C2,168|3b650c7303ff55248b7a08530bdff6c3015b7503ff55383bdf7506b801000000c3f7c301000000740489deeb1489c6b89420754183c800ff552c89f0be010000008b4af889f7d1ef0fb63c398d7c3f01f7c001000000740489c6eb1189c6b894207541ff552c89f0be010000008b4af45089f8d1e8d1ee880431588d743601f6c3017503ff553889df83c70270f6a8017503ff553889c683c60270f689fb89f0e95bffffff83c800|@3026,63|28,0,0 48,0,@369 61,0,0 95,0,@369 105,0,0 3026:S35|434f44455f5345472e63736567436f7079536567283429636f70794279746573283229 3027:O3|@7320,@224,@3028 3028:S49|63736567436f70795365673a2063616e206f6e6c7920636f7079206265747765656e206279746520736567656d656e7473 3029:S23|434f44455f5345472e63736567436f7079536567283429 3030:S19|434f44455f5345472e63736567536574283329 3031:C2,52|3b650c7303ff5524ff7344508b7c2404c707ffffff7f8b73188b06568d54240c90e82a0000008b1c248903b80100000083c40cc3|@3034,63|18,0,1073741823 34,1,@3032 44,0,0 3032:C2,140|3b650c7303ff552483f8017506b801000000c38b388b378b1e83fb0175058b4004ebdd8b4e048b7af8510bcff6c101597503ff55383bcf75058b4004ebc28b5afc8b0b8b7e045123cff6c101597503ff55383bf97d02893b52ff308b400483c800e89affffff8b75008d76f43b75087303ff5520897500c746fc020000008946048b1c24891e89f083c408c3|@3033,63|14,0,0 3033:S43|49333836434f4445434f4e5328292e72656d6f76654c6162656c28322972656d6f7665456e747279283129 3034:S29|49333836434f4445434f4e5328292e72656d6f76654c6162656c283229 3035:C2,336|3b650c7303ff5524505389c38b04240bc0e822f3ffff8b7c2404f7c7010000007503ff553889fe83c60270f65089f38b4424040bc0e8fef2ffff8b5c2408f6c3017503ff553889da83c20470f65089d38b44240890e8def2ffff8b4c240cf6c1017503ff553889cf83c70670f65089fb8b44240c90e8bef2ffffa8017503ff553881f8010100007c13a8017503ff553889c681ee0002000070f3eb0289c6bb0102000089f223d3f6c2017503ff55385089f2d1fa8d43fff7ea8d50015870ed8b0c2489d023c1a8017503ff55388d42ff03c170f68b7c2404be0102000089fb23def6c3017503ff5538505289fad1fa8d46fff7ea8d58015a5870eb8b54240889d923caf6c1017503ff55388d4bff03ca70f6bf0100020089c623f7f7c6010000007503ff5538505289c2d1fa8d47fff7ea8d70015a5870eb89f023c1a8017503ff55388d46ff03c170f683c414c30bc0|@3036,63|18,1,@3006 54,1,@3006 86,1,@3006 118,1,@3006 159,0,256 217,0,256 275,0,65536 3036:S24|49333836434f4445434f4e5328292e676574333273283229 3037:O1|15 3038:C2,724|3b650c7303ff55248b38f7c701000000741883ffdb7c1883ff277f18be9a4279418db4be94000000ffe6e943010000e93e010000e93901000090e9e4010000909090e961010000909090e97f020000909090e9c0010000909090e93d010000909090e985010000909090e933010000909090e96f010000909090e9c2010000909090e9c0010000909090e9fb000000909090e9bc010000909090e9c6010000909090e988010000909090e92b010000909090e9f9010000909090e903020000909090e9b7000000909090e9c1000000909090e994010000909090e932010000909090e991000000909090e9cd010000909090e9bf010000909090e94e010000909090e934010000909090e94a010000909090e948010000909090e965000000909090e90e010000909090e9fa000000909090e9d4000000909090e9c6000000909090e94f000000909090e991000000909090e96a000000909090e969010000909090e9b6000000909090e93b010000909090b851010000c3b807010000c3b803010000c3b8d7010000c3b8d3010000c3b8d1010000c3b817010000c3b813010000c3b811010000c38b7804f7c7010000007503ff553889f881c0a000000070f3c38b7804f7c7010000007503ff553889f881c0b000000070f3c3b8ff010000c3b821010000c3b81b010000c38b7804f7c7010000007503ff553889f881c07001000070f3c3b88f010000c3b88d010000c3b81f000000c3b81f010000c3b887010000c3b885010000c3b8e1000000c3b8e5000000c3b8e7000000c3b8e9000000c3b8eb000000c3b8ed000000c3b8ef000000c3b8f9000000c3b8fb000000c3b8fd000000c3b8ff000000c38b78088b4004e87a000000be1100000089c223d6f6c2017503ff55385089c2d1fa8d46fff7ea8d50015870ed89d023c7a8017503ff55388d42ff03c770f6c3b8f3010000c3b8ef010000c3b8ed010000c3b883010000c3b8a3010000c3b8d5000000c3b8d1000000c3|@3041,53|29,0,$3038+58 371,0,168 377,0,131 383,0,129 389,0,235 395,0,233 401,0,232 407,0,139 413,0,137 419,0,136 475,0,255 481,0,144 487,0,141 518,0,199 524,0,198 530,0,15 536,0,143 542,0,195 548,0,194 554,0,112 560,0,114 566,0,115 572,0,116 578,0,117 584,0,118 590,0,119 596,0,124 602,0,125 608,0,126 614,0,127 626,1,@3039 631,0,8 683,0,249 689,0,247 695,0,246 701,0,193 707,0,209 713,0,106 719,0,104 3039:C2,84|83f8ff7506b801000000c383f8057506b803000000c383f8017506b805000000c383f8fb7506b807000000c383f8037506b809000000c383f8077506b80b000000c383f8f97506b80d000000c3b80f000000c390|@3040,1|6,0,0 17,0,1 28,0,2 39,0,3 50,0,4 61,0,5 72,0,6 78,0,7 3040:S30|49333836434f4445434f4e5328292e61726974684f70546f496e74283129 3041:S25|49333836434f4445434f4e5328292e6f70546f496e74283129 3042:C2,528|3b650c7303ff5524a8017503ff553883f8017c07bf03000000eb05bf0100000083ff03750489c6eb11a8017503ff553889c681eefeff010070f35053bb0100020089f090ff15e09e040850bb010002008b442408ff15009f040883f8017502eb1fa8017503ff553883f8017c07bb03000000eb05bb0100000083fb037402eb0489c3eb11a8017503ff553889c381c30000020070f38b1424f6c2017503ff553883fa017c07b903000000eb05b90100000083f903750489d0eb12f6c2017503ff553889d081e8fe01000070f353bb010200000bc0ff15e09e040850bb010200008b442408ff15009f040883f8017502eb1fa8017503ff553883f8017c07bf03000000eb05bf0100000083ff037402eb0489c7eb11a8017503ff553889c781c70002000070f38b742404f7c6010000007503ff553883fe017c07bb03000000eb05bb0100000083fb03750489f2eb15f7c6010000007503ff553889f281eafe01000070f357bb0102000089d090ff15e09e040850bb010200008b44240cff15009f040883f8017502eb1fa8017503ff553883f8017c07b903000000eb05b90100000083f9037402eb0489c1eb11a8017503ff553889c181c10002000070f38b442408a8017503ff553883f8017d13a8017503ff553889c781c70002000070f3eb0289c78b7424208b1c24895c24208b54241c894c241c8b4c2414894c2418897424148b5c240489f883c41452e91c000000|@3045,63|21,0,1 28,0,0 61,0,65536 70,0,I109 76,0,65536 86,0,I110 110,0,1 117,0,0 166,0,1 173,0,0 206,0,256 214,0,I109 220,0,256 230,0,I110 254,0,1 261,0,0 314,0,1 321,0,0 357,0,256 366,0,I109 372,0,256 382,0,I110 406,0,1 413,0,0 524,1,@3043 3043:C2,284|3b650c7303ff55248b7c240cf7c701000000740489feeb0ef647ff108b377402f7de8d74360189f281e2ff0100005053528b5c24148b442410e8f6edffff8b4c2410f6c1017503ff553889c883c00270f68b7c2418f7c701000000740489feeb0ef647ff108b377402f7de8d74360189f381e3ff0100005389c38b44241083c800e8aeedffff8b542410f6c2017503ff553889d183c10470f68b0424f7c001000000740489c7eb0ef640ff108b387402f7df8d7c3f0189fe81e6ff0100005689cb8b442410e86aedffff8b5c2410f6c3017503ff553889da83c20670f68b4c2404f7c101000000740489c8eb0ef641ff108b017402f7d88d44000189c781e7ff0100008b74240c897c241889d389f08b54240883c41852e918edffff|@3044,63|58,1,@3014 130,1,@3014 198,1,@3014 280,1,@3014 3044:S27|49333836434f4445434f4e5328292e736574344279746573283629 3045:S24|49333836434f4445434f4e5328292e736574333273283329 3046:S35|49333836434f4445434f4e5328292e7265616c6c794669784272616e63686573283229 3047:C2,412|3b650c7303ff55248b7c240483fb017407bec9000000eb05bef500000089f223d0f6c2017503ff553889f22bd08d520170f483fb0174068b378b0eeb168b0f8b31f7c6010000007503ff553889f183c10470f65051ff77408b77188b0653ff37ff770456ff7730ff7744528d5424280bc0e842010000508b7c24188b378b5c24088b1389f123caf6c1017503ff553889f12bca8d490170f48b7424045123cef6c101597503ff55383bce7e708b54240c8b0ac702010000008b74241c83fe017407be01000000eb598b742414c70603000000b8104d79410bc0e8a2f7ffff518b5c24340bc0e84e0200008b5c2434b8010000000bc0e83e0200008b5c241c8b13f6c2017503ff553889d183c1fe70f68b5c243489c8e806030000eb0ae96e000000e9230000008b75008d76f43b75087303ff5520897500c746fc02000000c74604010000008906eb01518b5c240cc703ffffff7f8b5424148b02568d5424340bc0e8760300008b4c241889018b5c24388b04240bc0e8120900008b4424148b7c24048938b80100000083c434c20400b80100000083c42cc204000bc0|@3086,63|18,0,100 25,0,122 114,1,@3048 180,0,0 194,0,0 206,0,1 211,0,@3051 218,1,@3038 230,1,@3052 239,0,0 246,1,@3052 278,1,@3056 321,0,0 336,0,1073741823 354,1,@3058 374,1,@3068 389,0,0 400,0,0 3048:C2,48|3b650c7303ff552483f8017506b801000000c352ff308b4004e8e2ffffff89c38b04248b54240483c408e91d00000090|@2084,63|14,0,0 43,1,@3049 3049:C2,220|8b388b3783feff75708b4af48b31525053ff770483fe017507bb01000000eb238b168b4c24083bd17507bb03000000eb128b76043b650c7303ff5524ebd6bb0100000083fb0174088b44240483c410c38b44240c8b78f88b342489fb23def6c3017503ff553889fb2bde8d5b0170f48b54240489d923caeb05e95b000000f6c1017503ff55388d4bff03ca70f6bec90000008b58fc89f223d3f6c2017503ff553889f22bd38d520170f45123caf6c101597503ff55383bca7e178b4c2404f6c1017503ff553889c883c00a70f683c410c38b44240483c410c389d8c3|@3050,63|26,0,0 43,0,1 63,0,0 142,0,100 3050:S44|49333836434f4445434f4e5328292e636865636b4272616e63684c697374283329636865636b4c6162283229 3051:O1|9 3052:C2,128|3b650c7303ff5524a8017503ff553883f8017c5ca8017503ff553881f8010200007d4d8b3b8b37f7c6010000007503ff553889f283c20270f68917f7c001000000740489c1eb0ef640ff108b087402f7d98d4c090189c881e0ff0100008b14248904248b4b0889f389c852e9e4e8ffffb8b44d79410bc0ff552cb80100000090|@3055,63|108,1,@3014 113,0,@3053 123,0,0 3053:O3|@7320,@224,@3054 3054:S19|67656e38753a20696e76616c69642062797465 3055:S23|49333836434f4445434f4e5328292e67656e3875283229 3056:C2,120|8b7d008d7ff43b7d087303ff5520897d00c747fc02000000894704c707ffffffff8b75008d76f83b75087303ff5520897500c746fc01000040893e8b7b448b175023c2a801587503ff55383bc27d0289078b43188b108b4d008d49f43b4d087303ff5520894d00c741fc020000008951048931890889f0c3|@3057,63|29,0,-1 3057:S32|49333836434f4445434f4e5328292e6d616b6553686f72744c6162656c283229 3058:C2,580|3b650c7303ff552483f8017506b801000000c352ff308b4004e8e2ffffff8b14248b0a8b3983ff01750483c408c38b7424048b5ef48b1350ff710483fa017507b901000000eb238b028b7c24083bc77507b903000000eb128b52043b650c7303ff5524ebd6b90100000083f90174588b74240c8b5ed483fb017502eb4f8b56ec8b0a8b042489cf23f8f7c7010000007503ff553889cf2bf88d7f0170f4b9ff00000089c823c3a8017503ff553889c82bc38d400170f45023c7a801587503ff55383bf87c07eb30e92b0000008b55008d52f43b55087303ff5520895500c742fc020000008b4c2404894a048b442408890289d083c410c38b74240c8b5eec8b138b0c2489d023c1a8017503ff553889d02bc18d400170f4bfc90000008b56fc89f923caf6c1017503ff553889f92bca8d490170f45023c1a801587503ff55383bc17e728b45008d40f43b45087303ff5520894500c740fc02000000c74004010000008b7c240889388b4c240c89c38b4104e80ee1ffffb81c5179410bc0e822f2ffff8b7c240c8b5f04e8cefcffff8b74240c8b5e04b80100000083c800e8c60000008b5c240c8b53ec8b0af6c1017503ff5538eb05e93600000089c883c0f870ef8b7d008d7ff43b7d087303ff5520897d00c747fc02000000894704c707010000008b742408893e8b44240483c410c38b44240c8b78dc8b0f8b1c245323d9f6c3015b7503ff55383bd97d0c8b4c240c8b59dc8b142489138b55008d52f43b55087303ff5520895500c742fc020000008b4c2404894a048b742408893289d083c410c390|@3067,63|14,0,0 65,0,0 82,0,1 102,0,0 158,0,127 280,0,100 350,0,0 370,1,@3005 375,0,@3059 382,1,@3038 394,1,@3052 406,0,0 414,1,@3060 478,0,0 3059:O1|-9 3060:C2,108|3b650c7303ff5524a8017503ff553883f8017c49f7c0010000007402eb16bfac5179415023c7a801587503ff55383bc77c02eb298b3b8b37f7c6010000007503ff553889f283c20870f689178b4b088b1424890c2489f352e937000000b8e453794190ff552cb80100000090|@3066,63|31,0,@3061 89,1,@3062 94,0,@3064 103,0,0 3061:B8|0000000001000000 3062:C2,496|3b650c7303ff5524a8017503ff553883f8017c07bf03000000eb05bf0100000083ff03750489c6eb11a8017503ff553889c681eefeff010070f35053bb0100020089f090ff15e09e040850bb010002008b442408ff15009f040883f8017502eb1fa8017503ff553883f8017c07bb03000000eb05bb0100000083fb037402eb0489c3eb11a8017503ff553889c381c30000020070f38b1424f6c2017503ff553883fa017c07b903000000eb05b90100000083f903750489d0eb12f6c2017503ff553889d081e8fe01000070f353bb010200000bc0ff15e09e040850bb010200008b442408ff15009f040883f8017502eb1fa8017503ff553883f8017c07bf03000000eb05bf0100000083ff037402eb0489c7eb11a8017503ff553889c781c70002000070f38b742404f7c6010000007503ff553883fe017c07bb03000000eb05bb0100000083fb03750489f2eb15f7c6010000007503ff553889f281eafe01000070f357bb0102000089d090ff15e09e040850bb010200008b44240cff15009f040883f8017502eb1fa8017503ff553883f8017c07b903000000eb05b90100000083f9037402eb0489c1eb11a8017503ff553889c181c10002000070f38b4424208b3c24897c24208b74241c894c241c8b5c2414895c2418894424148b5c24048b44240883c41456e993f4ffff83c800|@3063,63|21,0,1 28,0,0 61,0,65536 70,0,I109 76,0,65536 86,0,I110 110,0,1 117,0,0 166,0,1 173,0,0 206,0,256 214,0,I109 220,0,256 230,0,I110 254,0,1 261,0,0 314,0,1 321,0,0 357,0,256 366,0,I109 372,0,256 382,0,I110 406,0,1 413,0,0 489,1,@3043 3063:S24|49333836434f4445434f4e5328292e736574333275283329 3064:O3|@7320,@224,@3065 3065:S20|67656e3332753a20696e76616c696420776f7264 3066:S24|49333836434f4445434f4e5328292e67656e333275283229 3067:S49|49333836434f4445434f4e5328292e636865636b4272616e63684c697374283329636f6e766572744c6162656c73283129 3068:C2,180|3b650c7303ff5524ff730453ff33ff733483f8017509b80100000083c410c38b7b308b3783fe017502eb0d50ff734089d8e89a000000eb0450ff73408b1c248b1383fa0175068b4c2404eb13528b4424088d54241ce8ce03000089c183c4048b44240c8b385789c88d54241c90e8160400008b7424108b1e8b1424530bdaf6c3015b7503ff55383bda750489c1eb1489c183c4043b650c7303ff5524ebc1b9010000008b4424048908b80100000083c41cc30bc0|@3085,63|23,0,0 50,1,@3069 86,1,@3078 110,1,@3079 159,0,0 170,0,0 3069:C2,460|3b650c7303ff55248b78408b3783fe017502eb248b5804c7030100000050ff70305789f390e8dadbffff8b1424c7020100000083c404eb0450ff70308b1c248b13b90900000089d023c1a8017503ff553852d1fa8d41fff7ea8d40015a70efc70301000000a8017503ff553883f8017d0eb82457794190ff552cb801000000a8017503ff553881f801ffffff7c70a8017503ff553881f8010100007d6689c3b85057794190e87aecffff538b5c24080bc0e826f7ffffb8ffffffff0bc0e852efffffba1100000089c123caf6c1017503ff553850528d40ffd1faf7ea8d48015a5870edf6c1017503ff553889c881c08001000070f3a8017503ff5538eb0ae926000000e92100000089c783c70870ea8b5c240889f8e8c2f6ffff8b5c24088b042483c40ce9f300000089c3b8f825754190e8eeebffff538b5c24080bc0e89af6ffffb8ffffffff0bc0e8c6eeffffba1100000089c123caf6c1017503ff553850528d40ffd1faf7ea8d48015a5870edf6c1017503ff553889c881c08001000070f3a8017503ff553889c783c70870f68b5c240889f8e842f6ffff8b7424088b1e8b13f6c2017503ff553889d183c10870f6890b8b46088b7c240c8944240c89d38b042483c40c57e904efffff|@3077,63|25,0,0 38,1,@3005 47,0,0 66,0,4 97,0,0 114,0,@3070 123,0,0 160,0,@3072 166,1,@3038 178,1,@3052 183,0,-1 190,1,@3039 195,0,8 278,1,@3052 293,1,@3073 300,0,@408 306,1,@3038 318,1,@3052 323,0,-1 330,1,@3039 335,0,8 406,1,@3052 456,1,@3042 3070:O3|@7320,@224,@3071 3071:S20|4e6567617469766520737461636b207265736574 3072:O1|2 3073:C2,176|3b650c7303ff5524a8017503ff553881f801ffffff7c72a8017503ff553881f8010100007d688b3b8b37f7c6010000007503ff553889f283c20270f68917a8017503ff553883f8017d13a8017503ff553889c181c10002000070f3eb0289c1f7c101000000740489c8eb0ef641ff108b017402f7d88d44000189c181e1ff0100008b0424890c24eb0ae914000000e90f0000008b7b0889f389c689f856e972deffffb824587941ff552cb80100000090|@3076,63|158,1,@3014 163,0,@3074 171,0,0 3074:O3|@7320,@224,@3075 3075:S19|67656e38733a20696e76616c69642062797465 3076:S23|49333836434f4445434f4e5328292e67656e3873283229 3077:S25|49333836434f4445434f4e5328292e72657365745370283129 3078:C2,68|3b650c7303ff552483f80175048b42e4c352ff308b40040bc0e8e2ffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0424890289d083c408c3|@1462,5| 3079:C2,388|3b650c7303ff552483f8017506b801000000c38b388b378b1e83fbff75728b4af48b398b5e0489f923cbf6c1017503ff553889f92bcb8d490170f483f903756d8b7af48b1f8b4af08b395323dff6c3015b7503ff55383bdf7f0c8b5804b8945a794190ff552c8b5e04f6c3017503ff553889df83c7fe70f68b5af4893b52ff70048b5af88b46040bc0e8f6e5ffffeb05e94b0000008b5424048b4afcc701010000008b042483c408e953ffffff52ff308b40040bc0e846ffffff8b7d008d7ff43b7d087303ff5520897d00c747fc020000008947048b3424893789f883c408c38b4af48b398b5e0489f923cbf6c1017503ff553889f92bcb8d490170f483f90975508b7af48b1f8b4af08b395323dff6c3015b7503ff55383bdf7f0e8b5804b8c85a794183c800ff552c8b5e04f6c3017503ff553889df83c7fe70f68b72f4893e8b5afcc703010000008b4004e9aefeffff52ff308b400490e8a2feffff8b7d008d7ff43b7d087303ff5520897d00c747fc020000008947048b3424893789f883c408c3|@3084,63|14,0,0 94,0,@3080 138,1,@3031 158,0,0 288,0,@3082 326,0,0 3080:O3|@7320,@224,@3081 3081:S25|4261636b696e6720757020746f6f2066617220283862697429 3082:O3|@7320,@224,@3083 3083:S26|4261636b696e6720757020746f6f206661722028333262697429 3084:S35|49333836434f4445434f4e5328292e6669787570283229636865636b4c616273283129 3085:S23|49333836434f4445434f4e5328292e6669787570283229 3086:S33|49333836434f4445434f4e5328292e636865636b4272616e63684c697374283329 3087:S27|49333836434f4445434f4e5328292e646f50656e64696e67283229 3088:C2,484|3b650c7303ff552483f801750c83fb0b7407bf01000000eb2aa8017503ff553881f801ffffff7c16a8017503ff553881f8010100007d07bf03000000eb05bfffffffff83fb097572a8017503ff553883f8017d0a89c3b8985d7941ff552c83ff017507be01000000eb1d83ff037507be81000000eb1183ffff7507be01010000eb05be810100008b5c2408ba1100000089d923caf6c1017503ff553850528d43ffd1faf7ea8d48015a5870ed89f223d1f6c2017503ff5538eb05e9350000008d56ff03d170eff6c2017503ff553889d183c10870f650578b5c240c89c8e89ef0ffff8b5c240cb8490000000bc0e88ef0ffffeb7283ff017507be01000000eb1d83ff037507be81000000eb1183ffff7507be01010000eb05be810100008b542408b91100000050575356525189d023c1a8017503ff553852d1fa8d41fff7ea8d40015a70ef89f223d0f6c2017503ff55388d56ff03d070f689d123cbf6c1017503ff5538eb05e9160000008d4aff03cb70ef8b5c241c89c890e802f0ffff83c4108b042483f80375178b7c240c89fb8b4424048b74240883c41456e920faffff83f8ff75318b7c240c8b378b1ef6c3017503ff553889da83c20870f689168b4f08894c24108b4424048b54240883c41052e99ee8ffffb80100000083c408c2080083c800|@3091,63|19,0,0 56,0,1 63,0,-1 87,0,@3089 100,0,0 112,0,64 124,0,128 131,0,192 140,0,8 222,1,@3052 231,0,36 238,1,@3052 250,0,0 262,0,64 274,0,128 281,0,192 290,0,8 378,1,@3052 412,1,@3073 466,1,@3042 471,0,0 3089:O3|@7320,@224,@3090 3090:S21|4e6567617469766520737461636b206f6666736574 3091:S24|49333836434f4445434f4e5328292e67656e6f7032283429 3092:S62|5452414e535f54414228292e7075736852656769737465727328352970757368456e7472696573283129736176654469726563744f6e537461636b283129 3093:C2,268|3b650c7303ff55248b7afc8b770452508b5e108b42f483c800e816beffff8b5c24048b53e88b1c2489d083c800e8aab9ffff83f8017402eb618b4c2404bb110000008b41e8e892b9ffff83f80174198b41fcff3424ff70088b59f48b41f083c800e8c2000000eb328b41fc6a11ff742404ff70088b59e8b8f5ffffff90e8f20300008b7c24048b77fc8b5e048b5b108b47e883c800e89abdffff8b5424048b4afc8b45008d40f43b45087303ff5520894500c740fc020000008b3c24897804c700050000008b75008d76ec3b75087303ff5520897500c746fc040000008b5ae4895e0cc74608110000008b7aec897e0489068b442408897424088b5af889c68b41f483c40856e9e99bffff90|@3135,63|26,1,@2969 46,1,@2958 62,0,8 70,1,@2958 98,1,@3094 120,0,-6 126,1,@3098 150,1,@2969 193,0,2 230,0,8 263,1,@2889 3094:C2,236|3b650c7303ff55248b7c240883ff1375735053bb190000008b44240c90e8bad0ffffb8d41176410bc0e8dae2ffff8b5c240c83c800e886edffff6a0dff7424108b5c24088b44240c90e8f2fbffffbb190000008b44240c0bc0e87ed0ffffb8f40776410bc0e89ee2ffff8b5c240c83c800e84aedffff8b74240cc744241001000000eb05e9160000008974240cbb0b000000b80900000083c408e9a1fbffff5053bb190000008b44240c83c800e82ad0ffffb8680a76410bc0e84ae2ffff8b5c240c83c800e8f6ecffff8b7424108b5c240c89742410895c240c8b1c248b44240483c408e91f00000083c800|@3097,63|20,0,12 30,1,@3004 35,0,@1251 42,1,@3038 54,1,@3052 74,1,@3088 79,0,12 90,1,@3004 95,0,@1219 102,1,@3038 114,1,@3052 126,0,0 142,0,5 147,0,4 155,1,@3088 162,0,12 174,1,@3004 179,0,@1226 186,1,@3038 198,1,@3052 229,1,@3095 3095:C2,484|3b650c7303ff552483f801750c83fb0b7407bf01000000eb2aa8017503ff553881f801ffffff7c16a8017503ff553881f8010100007d07bf03000000eb05bfffffffff83fb097572a8017503ff553883f8017d0a89c3b8985d7941ff552c83ff017507be01000000eb1d83ff037507be81000000eb1183ffff7507be01010000eb05be810100008b5c2408ba1100000089d923caf6c1017503ff553850528d43ffd1faf7ea8d48015a5870ed89f223d1f6c2017503ff5538eb05e9350000008d56ff03d170eff6c2017503ff553889d183c10870f650578b5c240c89c8e8d6ebffff8b5c240cb8490000000bc0e8c6ebffffeb7283ff017507be01000000eb1d83ff037507be81000000eb1183ffff7507be01010000eb05be810100008b542408b91100000050575356525189d023c1a8017503ff553852d1fa8d41fff7ea8d40015a70ef89f223d0f6c2017503ff55388d56ff03d070f689d123cbf6c1017503ff5538eb05e9160000008d4aff03cb70ef8b5c241c89c890e83aebffff83c4108b042483f80375178b7c240c89fb8b4424048b74240883c41456e958f5ffff83f8ff75318b7c240c8b378b1ef6c3017503ff553889da83c20870f689168b4f08894c24108b4424048b54240883c41052e9d6e3ffffb80100000083c408c2080083c800|@3096,63|19,0,0 56,0,1 63,0,-1 87,0,@3089 100,0,0 112,0,64 124,0,128 131,0,192 140,0,8 222,1,@3052 231,0,36 238,1,@3052 250,0,0 262,0,64 274,0,128 281,0,192 290,0,8 378,1,@3052 412,1,@3073 466,1,@3042 471,0,0 3096:S23|49333836434f4445434f4e5328292e67656e4541283429 3097:S25|49333836434f4445434f4e5328292e67656e4c6f6164283429 3098:C2,5916|3b650c7303ff55248b7c2408530bdff6c3015b7503ff55383bfb7502eb198b74240c560bf7f7c6010000005e7503ff55383bfe7402eb0b89c6b8dc79794190ff552cf7c001000000741583f8e77c1583f8157f15ba126379418d548264ffe2e9ca000000e9c5000000e9c0000000e912130000909090e9b3000000909090e94d0b0000909090e9a3000000909090e97b0c0000909090e971010000909090e9a70d0000909090e990000000909090e904140000909090e973000000909090e96b000000909090e963000000909090e9290a0000909090e9d2010000909090e986110000909090e92d100000909090e93b000000909090e95d130000909090e92f100000909090e9a9060000909090e939100000909090e9bd040000909090e915150000909090e9d1020000909090b8107a7941ff552cb80100000083ff1375388b4c2404c744240c0b000000c7442408ffffffffc7442404110000008b0424890c2489dabb090000005089d08b142483c40452e92816000053bb190000008b44240883c800e806ccffffb8987e79410bc0e826deffff8b5c240883c800e8d2e8ffff8b0c24b81100000089cf23f8f7c7010000007503ff5538505289cad1fa8d40fff7ea8d78015a5870ebf7c7010000007503ff553889fe81c68001000070f38b5c240c89f223d3f6c2017503ff55388d56ff03d370f68b4c240889cb89d08b7c240483c41457e968e8ffff83fb13754fbb190000008b44240483c800e86ecbffffb8d41176410bc0e88eddffff8b5c240483c800e83ae8ffff8b4c2404c744240c0d000000894c2408bb0b000000b8090000008b3c2483c40857e994f6ffff8b4d008d49f43b4d087303ff5520894d00c741fc02000000895904c701ddffffff51bb190000008b4424080bc0e8fecaffff8b0424e822ddffff8b7c240889fb8b74240483c41456e9c7e7ffff53566a01ff74241089f80bc0e8c21b000050bb190000008b44240c90e8c2caffffb8f88079410bc0e8e2dcffff8b5c240c83c800e88ee7ffffff742410ff7424108b5c240cb8ffffffff0bc0e8befaffffbb190000008b44240c0bc0e882caffffb8748879410bc0e8a2dcffff8b5c240c83c800e84ee7ffff8b4c2410b81100000089cf23f8f7c7010000007503ff5538505289cad1fa8d40fff7ea8d78015a5870ebf7c7010000007503ff553889fe81c68001000070f38b5c241489f223d3f6c2017503ff55388d56ff03d370f68b5c240c89d083c800e8eae6ffff8b4c240cff31bb1900000089c80bc0e8f2c9ffff8b04248b38f7c7010000007503ff553889fe83c60470f68b5c240489da23d6f6c2017503ff553889da2bd68d520170f489d1b884887941e8e2dbffff518b5c24140bc0e88ee6ffff8b44241489c38b04248b7c241083c42057e9b8f0ffff53566a01ff74241089f883c800e8721a000050bb190000008b44240c90e872c9ffffb8987e79410bc0e892dbffff8b5c240c83c800e83ee6ffff8b4c2404b81100000089cf23f8f7c7010000007503ff5538505289cad1fa8d40fff7ea8d78015a5870ebf7c7010000007503ff553889fe81c68001000070f38b5c241089f223d3f6c2017503ff55388d56ff03d370f68b5c240c89d083c800e8dae5ffffbb190000008b44240c0bc0e8e6c8ffffb88c8879410bc0e806dbffff8b5c240c83c800e8b2e5ffff8b4c2410b81100000089cf23f8f7c7010000007503ff5538505289cad1fa8d40fff7ea8d78015a5870ebf7c7010000007503ff553889fe81c68001000070f38b5c241489f223d3f6c2017503ff55388d56ff03d370f68b5c240c89d083c800e84ee5ffffbb190000008b44240c0bc0e85ac8ffffb8f88079410bc0e87adaffff8b5c240c83c800e826e5ffffff742410ff7424108b5c2418b8030000000bc0e856f8ffff8b4c240cff31bb1900000089c80bc0e816c8ffff8b04248b38f7c7010000007503ff553889fe83c60470f68b5c240489da23d6f6c2017503ff553889da2bd68d520170f489d1b884887941e806daffff518b5c24140bc0e8b2e4ffff8b44241489c38b04248b7c241083c42057e9dceeffff53566a01ff74241089f883c800e89618000050bb190000008b44240c90e896c7ffffb8987e79410bc0e8b6d9ffff8b5c240c83c800e862e4ffff8b4c2414b81100000089cf23f8f7c7010000007503ff5538505289cad1fa8d40fff7ea8d78015a5870ebf7c7010000007503ff553889fe81c68001000070f38b5c241089f223d3f6c2017503ff55388d56ff03d370f68b5c240c89d083c800e8fee3ffffbb190000008b44240c0bc0e80ac7ffffb88c8879410bc0e82ad9ffff8b5c240c83c800e8d6e3ffff8b4c2410b81100000089cf23f8f7c7010000007503ff5538505289cad1fa8d40fff7ea8d78015a5870ebf7c7010000007503ff553889fe81c68001000070f38b5c240489f223d3f6c2017503ff55388d56ff03d370f68b5c240c89d083c800e872e3ffffbb190000008b44240c0bc0e87ec6ffffb8f88079410bc0e89ed8ffff8b5c240c83c800e84ae3ffffff742410ff7424108b5c2418b8030000000bc0e87af6ffff8b4c240cff31bb1900000089c80bc0e83ac6ffff8b04248b38f7c7010000007503ff553889fe83c60470f68b5c240489da23d6f6c2017503ff553889da2bd68d520170f489d1b884887941e82ad8ffff518b5c24140bc0e8d6e2ffff8b44241489c38b04248b7c241083c42057e900edffff53566a01ff74241089f883c800e8ba1600008b4c240c83f901742950bb190000008b44240ce8b2c5ffffb89c8879410bc0e8d2d7ffff8b5c240c83c800e87ee2ffffeb01508b44241083f8057428bb190000008b44240c0bc0e87ec5ffffb8a88879410bc0e89ed7ffff8b5c240c83c800e84ae2ffff8b7c241483ff05756ebb190000008b44240c90e84ec5ffffb8f88079410bc0e86ed7ffff8b5c240c83c800e81ae2ffff6a01ff7424108b5c240cb8ffffffffe84ef5ffffbb190000008b44240c0bc0e812c5ffffb8e88079410bc0e832d7ffff8b5c240c83c800e8dee1ffff8b5c240cb8f5010000eb05e90a00000083c800e8c6e1ffffeb728b74240483fe05746ebb190000008b44240c83c800e8c6c4ffffb8987e79410bc0e8e6d6ffff8b5c240c83c800e892e1ffff8b5c2404ba1100000089d923caf6c1017503ff553850528d43ffd1faf7ea8d48015a5870edf6c1017503ff553889c881c08001000070f3a8017503ff5538eb0ae98b000000e91200000089c783c70470ea8b5c240c89f8e836e1ffffbb190000008b44240c0bc0e842c4ffffb8e88079410bc0e862d6ffff8b5c240c83c800e80ee1ffff8b5c240cb8f50100000bc0e8fee0ffffbb190000008b44240c0bc0e80ac4ffffb8f88079410bc0e82ad6ffff8b5c240c83c800e8d6e0ffff6a01ff7424108b5c241cb8ffffffffe80af4ffffbb190000008b44240c0bc0e8cec3ffffb88c8779410bc0e8eed5ffff8b5c240c83c800e89ae0ffff8b5c240cb8d50100000bc0e88ae0ffffbb190000008b44240c0bc0e896c3ffffb8f88079410bc0e8b6d5ffff8b5c240c83c800e862e0ffffff742410ff742410bb01000000b80300000090e892f3ffff8b5c241083fb057427bb190000008b44240c90e84ec3ffffb8b48879410bc0e86ed5ffff8b5c240c83c800e81ae0ffff8b54241083fa017427bb190000008b44240c90e81ec3ffffb8c08879410bc0e83ed5ffff8b5c240c83c800e8eadfffff8b4c240cff31bb1900000089c80bc0e8f2c2ffff8b04248b38f7c7010000007503ff553889fe83c60470f68b5c240489da23d6f6c2017503ff553889da2bd68d520170f489d1b884887941e8e2d4ffff518b5c24140bc0e88edfffff8b44241489c38b04248b7c241083c42057e9b8e9ffff53bb190000008b44240883c800e882c2ffffb8f88079410bc0e8a2d4ffff8b5c240883c800e84edfffffff74240cff74240c8b5c2418b8ffffffff0bc0e87ef2ffffbb190000008b4424080bc0e842c2ffffb8748879410bc0e862d4ffff8b5c240883c800e80edfffff8b4c240cb81100000089cf23f8f7c7010000007503ff5538505289cad1fa8d40fff7ea8d78015a5870ebf7c7010000007503ff553889fe81c68001000070f38b1c2489f223d3f6c2017503ff55388d56ff03d370f68b44240889c389d08b7c240483c41457e9a4deffff53bb190000008b44240883c800e8aec1ffffb8987e79410bc0e8ced3ffff8b5c240883c800e87adeffff8b0c24b81100000089cf23f8f7c7010000007503ff5538505289cad1fa8d40fff7ea8d78015a5870ebf7c7010000007503ff553889fe81c68001000070f38b5c240c89f223d3f6c2017503ff55388d56ff03d370f68b5c240889d0e81adeffffbb190000008b4424080bc0e826c1ffffb88c8879410bc0e846d3ffff8b5c240883c800e8f2ddffff8b4c240cb81100000089cf23f8f7c7010000007503ff5538505289cad1fa8d40fff7ea8d78015a5870ebf7c7010000007503ff553889fe81c68001000070f38b5c241089f223d3f6c2017503ff55388d56ff03d370f68b5c240889d083c800e88eddffff8b4c240c8b442408c7442410030000008944240c89cbb8ffffffff8b7c240483c40c57e91a19000053bb190000008b44240890e872c0ffffb8987e79410bc0e892d2ffff8b5c240883c800e83eddffff8b4c2410b81100000089cf23f8f7c7010000007503ff5538505289cad1fa8d40fff7ea8d78015a5870ebf7c7010000007503ff553889fe81c68001000070f38b5c240c89f223d3f6c2017503ff55388d56ff03d370f68b5c240889d083c800e8dadcffffbb190000008b4424080bc0e8e6bfffffb88c8879410bc0e806d2ffff8b5c240883c800e8b2dcffff8b4c240cb81100000089cf23f8f7c7010000007503ff5538505289cad1fa8d40fff7ea8d78015a5870ebf7c7010000007503ff553889fe81c68001000070f38b1c2489f223d3f6c2017503ff55388d56ff03d370f68b5c240889d0e852dcffff8b4c240c8b442408c7442410030000008944240c89cbb8ffffffff8b7c240483c40c57e9de17000083ff01742953bb190000008b442408e832bfffffb89c8879410bc0e852d1ffff8b5c240883c800e8fedbffffeb01538b4c240c83f9057428bb190000008b4424080bc0e8febeffffb8a88879410bc0e81ed1ffff8b5c240883c800e8cadbffff8b44241083f805756ebb190000008b44240890e8cebeffffb8f88079410bc0e8eed0ffff8b5c240883c800e89adbffff6a01ff74240c8b5c2408b8ffffffffe8ceeeffffbb190000008b4424080bc0e892beffffb8e88079410bc0e8b2d0ffff8b5c240883c800e85edbffff8b5c2408b8d5010000eb05e90a00000083c800e846dbffffeb708b3c2483ff05746dbb190000008b442408e84abeffffb8987e79410bc0e86ad0ffff8b5c240883c800e816dbffff8b3424bb1100000089f223d3f6c2017503ff55385089f2d1fa8d43fff7ea8d50015870edf6c2017503ff553889d181c18001000070f3f6c1017503ff553889c8eb0ae989000000e91000000083c00470ea8b5c24080bc0e8badaffffbb190000008b4424080bc0e8c6bdffffb8e88079410bc0e8e6cfffff8b5c240883c800e892daffff8b5c2408b8d50100000bc0e882daffffbb190000008b4424080bc0e88ebdffffb8f88079410bc0e8aecfffff8b5c240883c800e85adaffff6a01ff74240c8b5c2418b8ffffffffe88eedffffbb190000008b4424080bc0e852bdffffb88c8779410bc0e872cfffff8b5c240883c800e81edaffff8b5c2408b8c50100000bc0e80edaffffbb190000008b4424080bc0e81abdffffb8f88079410bc0e83acfffff8b5c240883c800e8e6d9ffffff74240cff74240cbb01000000b80300000090e816edffff8b74240c83fe057427bb190000008b44240890e8d2bcffffb8b48879410bc0e8f2ceffff8b5c240883c800e89ed9ffff8b5c240c83fb01742ebb190000008b44240890e8a2bcffffb8c08879410bc0e8c2ceffff8b54240889d38b4c240483c41451e967d9ffffb80100000083c404c20c008b4c24048974240c897c2408894c2404b803000000e9d61600008b4c24048974240c897c2408894c2404b801000000e9bc16000053bb190000008b44240883c800e832bcffffb8987e79410bc0e852ceffff8b5c240883c800e8fed8ffff8b0c24b81100000089cf23f8f7c7010000007503ff5538505289cad1fa8d40fff7ea8d78015a5870ebf7c7010000007503ff553889fe81c68001000070f38b5c240c89f223d3f6c2017503ff55388d56ff03d370f68b5c240889d0e89ed8ffffbb190000008b4424080bc0e8aabbffffb8c49079410bc0e8cacdffff8b5c240883c800e876d8ffff8b4c240cb81100000089cf23f8f7c7010000007503ff5538505289cad1fa8d40fff7ea8d78015a5870ebf7c7010000007503ff553889fe81c68001000070f38b5c241089f223d3f6c2017503ff55388d56ff03d370f68b44240889c389d08b7c240483c41457e90bd8ffff53bb190000008b4424080bc0e816bbffffb8987e79410bc0e836cdffff8b5c240883c800e8e2d7ffff8b0c24b81100000089cf23f8f7c7010000007503ff5538505289cad1fa8d40fff7ea8d78015a5870ebf7c7010000007503ff553889fe81c68001000070f38b5c240c89f223d3f6c2017503ff55388d56ff03d370f68b5c240889d0e882d7ffffbb190000008b4424080bc0e88ebaffffb8d49079410bc0e8aeccffff8b5c240883c800e85ad7ffff8b4c240cb81100000089cf23f8f7c7010000007503ff5538505289cad1fa8d40fff7ea8d78015a5870ebf7c7010000007503ff553889fe81c68001000070f38b5c241089f223d3f6c2017503ff55388d56ff03d370f68b44240889c389d08b7c240483c41457e9efd6ffff53bb190000008b4424080bc0e8fab9ffffb8f88079410bc0e81accffff8b5c240883c800e8c6d6ffffff74240cff74240c8b5c2418b8ffffffff0bc0e8f6e9ffffbb190000008b4424080bc0e8bab9ffffb8909079410bc0e8dacbffff8b5c240883c800e886d6ffff8b4c240cb81100000089cf23f8f7c7010000007503ff5538505289cad1fa8d40fff7ea8d78015a5870ebf7c7010000007503ff553889fe81c68001000070f38b1c2489f223d3f6c2017503ff55388d56ff03d370f68b44240889c389d08b7c240483c41457e91cd6ffff53bb190000008b44240883c800e826b9ffffb8680a76410bc0e846cbffff8b5c240883c800e8f2d5ffff8b4c24108b44240c8b7c2408894c2410c744240cffffffff894424088b742404897c24048b1c24b8fdffffff83c40456e94507000053bb190000008b442408e8cab8ffffb8987e79410bc0e8eacaffff8b5c240883c800e896d5ffff8b4c2410b81100000089cf23f8f7c7010000007503ff5538505289cad1fa8d40fff7ea8d78015a5870ebf7c7010000007503ff553889fe81c68001000070f38b5c240c89f223d3f6c2017503ff55388d56ff03d370f68b5c240889d083c800e832d5ffffbb190000008b4424080bc0e83eb8ffffb8e88079410bc0e85ecaffff8b5c240883c800e80ad5ffff8b4c240cf6c1017503ff553889c881c0d001000070f38b5c240890e8ead4ffffbb190000008b4424080bc0e8f6b7ffffb808cd74410bc0e816caffff8b5c240883c800e8c2d4ffff8b5c2408b86d0100000bc0e8b2d4ffffff74240c6a01ff742414ff7424148b5c2410b801000000e81e060000bb190000008b4424080bc0e8a2b7ffffb8f88079410bc0e8c2c9ffff8b5c240883c800e86ed4ffff8b7c240c8b742408897c2410c744240c01000000897c24088b5c24048974240489da89fbb80300000083c40452e9c405000053bb190000008b44240883c800e846b7ffffb8e88079410bc0e866c9ffff8b5c240883c800e812d4ffff8b4c2410f6c1017503ff553889c881c0d001000070f38b5c240890e8f2d3ffffbb190000008b4424080bc0e8feb6ffffb8987e79410bc0e81ec9ffff8b5c240883c800e8cad3ffffff742410ff74240c8b5c2408b8010000000bc0e8fae6ffffbb190000008b4424080bc0e8beb6ffffb8f88079410bc0e8dec8ffff8b5c240883c800e88ad3ffff8b7c24108b742408897c2410c744240c01000000897c24088b5c24048974240489da89fbb80300000083c40452e9e0040000|@3134,63|58,0,@3099 85,0,$3098+110 303,0,@3101 311,0,0 328,0,5 336,0,-1 344,0,8 357,0,4 372,1,@3103 378,0,12 390,1,@3004 395,0,@3104 402,1,@3038 414,1,@3052 422,0,8 520,1,@3052 530,0,12 542,1,@3004 547,0,@1251 554,1,@3038 566,1,@3052 578,0,6 587,0,5 592,0,4 604,1,@3088 637,0,-18 643,0,12 654,1,@3004 662,1,@3038 681,1,@3052 698,1,@3111 704,0,12 714,1,@3004 719,0,@3109 726,1,@3038 738,1,@3052 755,0,-1 762,1,@3095 767,0,12 778,1,@3004 783,0,@3118 790,1,@3038 802,1,@3052 811,0,8 902,1,@3052 913,0,12 922,1,@3004 977,0,@3119 982,1,@3038 994,1,@3052 1016,1,@3073 1034,1,@3111 1040,0,12 1050,1,@3004 1055,0,@3104 1062,1,@3038 1074,1,@3052 1083,0,8 1174,1,@3052 1179,0,12 1190,1,@3004 1195,0,@3120 1202,1,@3038 1214,1,@3052 1223,0,8 1314,1,@3052 1319,0,12 1330,1,@3004 1335,0,@3109 1342,1,@3038 1354,1,@3052 1371,0,1 1378,1,@3095 1389,0,12 1398,1,@3004 1453,0,@3119 1458,1,@3038 1470,1,@3052 1492,1,@3073 1510,1,@3111 1516,0,12 1526,1,@3004 1531,0,@3104 1538,1,@3038 1550,1,@3052 1559,0,8 1650,1,@3052 1655,0,12 1666,1,@3004 1671,0,@3120 1678,1,@3038 1690,1,@3052 1699,0,8 1790,1,@3052 1795,0,12 1806,1,@3004 1811,0,@3109 1818,1,@3038 1830,1,@3052 1847,0,1 1854,1,@3095 1865,0,12 1874,1,@3004 1929,0,@3119 1934,1,@3038 1946,1,@3052 1968,1,@3073 1986,1,@3111 2001,0,12 2010,1,@3004 2015,0,@3121 2022,1,@3038 2034,1,@3052 2051,0,12 2062,1,@3004 2067,0,@3122 2074,1,@3038 2086,1,@3052 2100,0,12 2110,1,@3004 2115,0,@3109 2122,1,@3038 2134,1,@3052 2149,0,-1 2154,1,@3095 2159,0,12 2170,1,@3004 2175,0,@3107 2182,1,@3038 2194,1,@3052 2203,0,250 2218,1,@3052 2234,0,12 2246,1,@3004 2251,0,@3104 2258,1,@3038 2270,1,@3052 2279,0,8 2362,1,@3052 2367,0,12 2378,1,@3004 2383,0,@3107 2390,1,@3038 2402,1,@3052 2411,0,250 2418,1,@3052 2423,0,12 2434,1,@3004 2439,0,@3109 2446,1,@3038 2458,1,@3052 2473,0,-1 2478,1,@3095 2483,0,12 2494,1,@3004 2499,0,@3113 2506,1,@3038 2518,1,@3052 2527,0,234 2534,1,@3052 2539,0,12 2550,1,@3004 2555,0,@3109 2562,1,@3038 2574,1,@3052 2587,0,0 2592,0,1 2598,1,@3095 2612,0,12 2622,1,@3004 2627,0,@3123 2634,1,@3038 2646,1,@3052 2660,0,12 2670,1,@3004 2675,0,@3124 2682,1,@3038 2694,1,@3052 2705,0,12 2714,1,@3004 2769,0,@3119 2774,1,@3038 2786,1,@3052 2808,1,@3073 2814,0,12 2826,1,@3004 2831,0,@3109 2838,1,@3038 2850,1,@3052 2867,0,-1 2874,1,@3095 2879,0,12 2890,1,@3004 2895,0,@3118 2902,1,@3038 2914,1,@3052 2923,0,8 3020,1,@3052 3026,0,12 3038,1,@3004 3043,0,@3104 3050,1,@3038 3062,1,@3052 3070,0,8 3158,1,@3052 3163,0,12 3174,1,@3004 3179,0,@3120 3186,1,@3038 3198,1,@3052 3207,0,8 3298,1,@3052 3314,0,1 3325,0,-1 3338,1,@3125 3344,0,12 3354,1,@3004 3359,0,@3104 3366,1,@3038 3378,1,@3052 3387,0,8 3478,1,@3052 3483,0,12 3494,1,@3004 3499,0,@3120 3506,1,@3038 3518,1,@3052 3527,0,8 3614,1,@3052 3630,0,1 3641,0,-1 3654,1,@3125 3665,0,12 3674,1,@3004 3679,0,@3121 3686,1,@3038 3698,1,@3052 3715,0,12 3726,1,@3004 3731,0,@3122 3738,1,@3038 3750,1,@3052 3764,0,12 3774,1,@3004 3779,0,@3109 3786,1,@3038 3798,1,@3052 3813,0,-1 3818,1,@3095 3823,0,12 3834,1,@3004 3839,0,@3107 3846,1,@3038 3858,1,@3052 3867,0,234 3882,1,@3052 3897,0,12 3906,1,@3004 3911,0,@3104 3918,1,@3038 3930,1,@3052 3938,0,8 4022,1,@3052 4027,0,12 4038,1,@3004 4043,0,@3107 4050,1,@3038 4062,1,@3052 4071,0,234 4078,1,@3052 4083,0,12 4094,1,@3004 4099,0,@3109 4106,1,@3038 4118,1,@3052 4133,0,-1 4138,1,@3095 4143,0,12 4154,1,@3004 4159,0,@3113 4166,1,@3038 4178,1,@3052 4187,0,226 4194,1,@3052 4199,0,12 4210,1,@3004 4215,0,@3109 4222,1,@3038 4234,1,@3052 4247,0,0 4252,0,1 4258,1,@3095 4272,0,12 4282,1,@3004 4287,0,@3123 4294,1,@3038 4306,1,@3052 4320,0,12 4330,1,@3004 4335,0,@3124 4342,1,@3038 4361,1,@3052 4366,0,0 4393,0,1 4398,1,@3127 4419,0,0 4424,1,@3127 4430,0,12 4442,1,@3004 4447,0,@3104 4454,1,@3038 4466,1,@3052 4474,0,8 4562,1,@3052 4567,0,12 4578,1,@3004 4583,0,@3132 4590,1,@3038 4602,1,@3052 4611,0,8 4709,1,@3052 4715,0,12 4726,1,@3004 4731,0,@3104 4738,1,@3038 4750,1,@3052 4758,0,8 4846,1,@3052 4851,0,12 4862,1,@3004 4867,0,@3133 4874,1,@3038 4886,1,@3052 4895,0,8 4993,1,@3052 4999,0,12 5010,1,@3004 5015,0,@3109 5022,1,@3038 5034,1,@3052 5051,0,-1 5058,1,@3095 5063,0,12 5074,1,@3004 5079,0,@3130 5086,1,@3038 5098,1,@3052 5107,0,8 5204,1,@3052 5210,0,12 5222,1,@3004 5227,0,@1226 5234,1,@3038 5246,1,@3052 5270,0,-1 5290,0,-2 5299,1,@3105 5305,0,12 5314,1,@3004 5319,0,@3104 5326,1,@3038 5338,1,@3052 5347,0,8 5438,1,@3052 5443,0,12 5454,1,@3004 5459,0,@3107 5466,1,@3038 5478,1,@3052 5510,1,@3052 5515,0,12 5526,1,@3004 5531,0,@207 5538,1,@3038 5550,1,@3052 5559,0,182 5566,1,@3052 5589,0,0 5594,1,@3105 5599,0,12 5610,1,@3004 5615,0,@3109 5622,1,@3038 5634,1,@3052 5654,0,0 5675,0,1 5684,1,@3105 5690,0,12 5702,1,@3004 5707,0,@3107 5714,1,@3038 5726,1,@3052 5758,1,@3052 5763,0,12 5774,1,@3004 5779,0,@3104 5786,1,@3038 5798,1,@3052 5815,0,0 5822,1,@3095 5827,0,12 5838,1,@3004 5843,0,@3109 5850,1,@3038 5862,1,@3052 5882,0,0 5903,0,1 5912,1,@3105 3099:O3|@7320,@224,@3100 3100:S27|526567697374657273206d75737420626520646966666572656e74 3101:O3|@7320,@224,@3102 3102:S25|556e696d706c656d656e74656420696e737472756374696f6e 3103:C2,1080|3b650c7303ff55248b7c240c83ffff75725053bb190000008b44240c90e8ceb5ffffb8987e79410bc0e8eec7ffff8b5c240c83c800e89ad2ffff8b74241083fe1175248b5c24188b54240c8b4c2404894c2418895424148b04248b7c240883c41457e9b5e5ffff8b1c24f6c3017503ff553889da83ea0470f68b4c24188b44240ceb05e92400000089742418c7442414ffffffff8b7c2404897c24108944240c89cb89d083c408e9b0030000a8017503ff553883f8077f0489c6eb338b74241083fe0174108b54240883fa017407be01000000eb1a83fe0774108b54240883fa077407be07000000eb05be03000000500bc6a801587503ff55383bc67502eb7483fe137543505356bb190000008b442410e8dab4ffffb8d41176410bc0e8fac6ffff8b5c241083c800e8a6d1ffff6a0dff742414bb0b000000b80900000083c800e80ee0ffffeb518b55008d52f43b55087303ff5520895500c742fc02000000897204c702ddffffff50535652bb19000000eb05e9ab0000008b442414e86eb4ffff8b0424e892c6ffff8b5c241483c800e83ed1ffff83c404bb190000008b44241083c800e846b4ffffb8987e79410bc0e866c6ffff8b5c241083c800e812d1ffff8b4c2408b81100000089cf23f8f7c7010000007503ff5538505289cad1fa8d40fff7ea8d78015a5870ebf7c7010000007503ff553889fe81c68001000070f38b1c2489f223d3f6c2017503ff55388d56ff03d370f68b5c241089d0e8b2d0ffffeb03505356bb190000008b44241090e8bab3ffffb8e88079410bc0e8dac5ffff8b5c241083c800e886d0ffff8b1c24f6c3017503ff553889da81c2d001000070f38b5c241089d0e866d0ffff8b4c241483f9117502eb49bb190000008b44241083c800e866b3ffffb8e88079410bc0e886c5ffff8b5c241083c800e832d0ffff8b442414a8017503ff553889c781c7d001000070f38b5c241089f8e812d0ffffbb190000008b4424100bc0e81eb3ffffb8f08079410bc0e83ec5ffff8b5c241083c800e8eacfffff8b74241483fe117519ff3424ff7424148b5c24248b44240c83c800e812e3ffffeb1a566a01ff742408ff74241c8b5c242c8b4424140bc0e8360100008b5c24088b1424530bdaf6c3015b7503ff55383bda7547bb190000008b44241083c800e8a2b2ffffb8f88079410bc0e8c2c4ffff8b5c241083c800e86ecfffffff7424086a01ff742410ff74241c8b5c2418b803000000e8da000000eb498b4d008d49f43b4d087303ff5520894d00c741fc02000000895104c7012100000051bb190000008b4424140bc0e83ab2ffff8b0424e85ec4ffff8b5c241483c800e80acfffff83c4048b44241483f811750bb80100000083c40cc21000bb190000008b44241083c800e8feb1ffffb8f88079410bc0e81ec4ffff8b5c241083c800e8caceffff8b7c24148b742410897c241cc744241801000000897c24148974241089fbb80300000083c40ce92700000083c800|@3110,63|20,0,12 30,1,@3004 35,0,@3104 42,1,@3038 54,1,@3052 99,1,@3095 144,0,-1 168,1,@3105 207,0,0 228,0,3 235,0,1 265,0,12 274,1,@3004 279,0,@1251 286,1,@3038 298,1,@3052 309,0,5 314,0,4 322,1,@3088 357,0,-18 366,0,12 382,1,@3004 390,1,@3038 402,1,@3052 410,0,12 422,1,@3004 427,0,@3104 434,1,@3038 446,1,@3052 455,0,8 542,1,@3052 552,0,12 562,1,@3004 567,0,@3107 574,1,@3038 586,1,@3052 618,1,@3052 634,0,12 646,1,@3004 651,0,@3107 658,1,@3038 670,1,@3052 702,1,@3052 707,0,12 718,1,@3004 723,0,@3108 730,1,@3038 742,1,@3052 774,1,@3095 802,1,@3105 830,0,12 842,1,@3004 847,0,@3109 854,1,@3038 866,1,@3052 889,0,1 894,1,@3105 929,0,16 935,0,12 946,1,@3004 954,1,@3038 966,1,@3052 983,0,0 994,0,12 1006,1,@3004 1011,0,@3109 1018,1,@3038 1030,1,@3052 1050,0,0 1065,0,1 1073,1,@3105 3104:O1|-15 3105:C2,520|3b650c7303ff552483fb117502eb0c83f801750e83fb0b7502eb07bf01000000eb2aa8017503ff553881f801ffffff7c16a8017503ff553881f8010100007d07bf03000000eb05bfffffffff83fb117507be0b000000eb0289de83ff017507ba01000000eb1d83ff037507ba81000000eb1183ffff7507ba01010000eb05ba810100008b4c2408505357565251b81100000089cb23d8f6c3017503ff5538505289cad1fa8d40fff7ea8d58015a5870eb89d123cbf6c1017503ff55388d4aff03cb70f6f6c1017503ff553889c883c00870f68b5c241c83c800e89acdffff8b74242483fe017507bf01000000eb1d83feff7507bf81000000eb1183fe037507bf01010000eb05bf810100008b5c2428ba1100000089d923caf6c1017503ff553850528d43ffd1faf7ea8d48015a5870ed89f823c1a8017503ff55388d47ff03c170f68b7c240889c223d7f6c2017503ff55388d50ff03d770f68b5c241c89d00bc0e812cdffff8b4c240c83f90375178b44241c89c38b4424148b7c241883c42c57e932d7ffff83f9ff75368b44241c8b388b37f7c6010000007503ff553889f383c30870f6891f8b50088954242889f38b4424148b4c241883c42851e9abc5ffff8b44241083f81175318b7c241c8b378b1ef6c3017503ff553889da83c20870f689168b4f08894c24288b4424148b54241883c42852e971c5ffffb80100000083c418c210000bc0|@3106,63|28,0,0 65,0,1 72,0,-1 82,0,5 96,0,0 108,0,64 120,0,128 127,0,192 142,0,8 218,1,@3052 232,0,0 244,0,64 256,0,128 263,0,192 272,0,8 354,1,@3052 386,1,@3073 445,1,@3042 503,1,@3042 508,0,0 3106:S28|49333836434f4445434f4e5328292e67656e496e6465786564283629 3107:O1|-3 3108:O1|-13 3109:O1|-12 3110:S26|49333836434f4445434f4e5328292e67656e53746f7265283629 3111:C2,1604|3b650c7303ff55248b7c24048b74240883fe017407ba05000000eb05ba03000000500bc3a801587503ff55383bc3757083f81375435053ff3752bb1900000089f8e8caaeffffb8d41176410bc0e8eac0ffff8b5c241483c800e896cbffff6a0dff742418bb0b000000b80900000083c800e8fed9ffffeb518b4d008d49f43b4d087303ff5520894d00c741fc02000000894104c701ddffffff5053ff3752eb05e9d300000051bb1900000089f8e85eaeffff8b0424e882c0ffff8b5c241883c800e82ecbffff83c4048b45008d40f03b45087303ff5520894500c740fc03000000c74008070000008b3c24897804c7000100000050bb190000008b44241883c800e80aaeffff8b0424e82ec0ffff8b5c241883c800e8dacaffff8b742410bb1100000089f223d3f6c2017503ff55385089f2d1fa8d43fff7ea8d50015870edf6c2017503ff553889d181c18001000070f38b44242089cf23f8f7c7010000007503ff55388d79ff03f870f68b5c241889f8e87ecaffffeb5c8b4c240c500bc1a801587503ff55383bc1757183f81375495053ff3752bb1900000089f890e86eadffffb8d41176410bc0e88ebfffff8b5c241483c800e83acaffff6a0dff742418bb0b000000b80900000083c800e8a2d8ffffeb59e9490200008b75008d76f43b75087303ff5520897500c746fc02000000894604c706ddffffffeb05e9e30000005053ff375256bb190000008b44241890e8faacffff8b0424e81ebfffff8b5c241883c800e8cac9ffff83c4048b5d008d5bf03b5d087303ff5520895d00c743fc03000000c74308070000008b1424895304c7030100000053bb190000008b44241883c800e8a6acffff8b0424e8cabeffff8b5c241883c800e876c9ffff8b4c2410b81100000089cf23f8f7c7010000007503ff5538505289cad1fa8d40fff7ea8d78015a5870ebf7c7010000007503ff553889fe81c68001000070f38b5c240c89f223d3f6c2017503ff55388d56ff03d370f68b5c241889d083c800e812c9ffffeb715053ff3752bb1900000089f890e81aacffffb8987e79410bc0e83abeffff8b5c241483c800e8e6c8ffff8b442408bf1100000089c623f7f7c6010000007503ff5538505289c2d1fa8d47fff7ea8d70015a5870ebf7c6010000007503ff553889f381c38001000070f38b54240c89d9eb05e9c800000023caf6c1017503ff55388d4bff03ca70f68b5c241489c8e87ec8ffff8b45008d40f03b45087303ff5520894500c740fc03000000c74008070000008b3c24897804c7000100000050bb190000008b4424180bc0e85eabffff8b0424e882bdffff8b5c241883c800e82ec8ffff8b742410bb1100000089f223d3f6c2017503ff55385089f2d1fa8d43fff7ea8d50015870edf6c2017503ff553889d181c18001000070f38b44242089cf23f8f7c7010000007503ff55388d79ff03f870f68b5c241889f8e8d2c7ffff8b74241083fe017539bb190000008b44241890e8d6aaffffb8848779410bc0e8f6bcffff8b5c241883c800e8a2c7ffff8b5c2418b8030000000bc0e892c7ffffeb6cf7c6010000007503ff553883fe097d61bb190000008b442418e88eaaffffb878d378410bc0e8aebcffff8b5c241883c800e85ac7ffff8b5c2410f6c3017503ff553889da81c28001000070f38b5c241889d083c800e836c7ffff8b5c2418b8030000000bc0e826c7ffffeb62e95d000000bb190000008b44241883c800e82aaaffffb88c8779410bc0e84abcffff8b5c241883c800e8f6c6ffff8b5c2410f6c3017503ff553889da81c28001000070f38b5c241889d083c800e8d2c6ffff8b5c2418b8030000000bc0e8cecaffff8b4c24108b44240c510bc8f6c101597503ff55383bc87502eb168b7c2420510bcff6c101597503ff55383bcf7402eb468b7d008d7ff43b7d087303ff5520897d00c747fc02000000894f04c7072100000057bb190000008b44241ce87ea9ffff8b0424e8a2bbffff8b5c241c83c800e84ec6ffffeb01508b5c241cb89487794183c800e8be0000008b74240c8b1e5053bb190000008b4424240bc0e83ea9ffffb8d41176410bc0e85ebbffff8b5c242483c800e80ac6ffff8b5c2424b8ab0000000bc0e8fac5ffff8b5c2424b8710000000bc0e8eac5ffff8b55008d52f43b55087303ff5520895500c742fc02000000c74204010000008b4c2404890a8b5c242489d0e80ecdffff8b042483c420c20c0090|@3117,63|22,0,2 29,0,1 59,0,12 66,1,@3004 71,0,@1251 78,1,@3038 90,1,@3052 101,0,5 106,0,4 114,1,@3088 149,0,-18 167,0,12 174,1,@3004 182,1,@3038 194,1,@3052 228,0,3 240,0,0 246,0,12 258,1,@3004 266,1,@3038 278,1,@3052 287,0,8 370,1,@3052 406,0,12 414,1,@3004 419,0,@1251 426,1,@3038 438,1,@3052 449,0,5 454,0,4 462,1,@3088 502,0,-18 520,0,12 530,1,@3004 538,1,@3038 550,1,@3052 584,0,3 596,0,0 602,0,12 614,1,@3004 622,1,@3038 634,1,@3052 643,0,8 734,1,@3052 746,0,12 754,1,@3004 759,0,@3104 766,1,@3038 778,1,@3052 787,0,8 882,1,@3052 913,0,3 925,0,0 931,0,12 942,1,@3004 950,1,@3038 962,1,@3052 971,0,8 1054,1,@3052 1068,0,12 1078,1,@3004 1083,0,@3112 1090,1,@3038 1102,1,@3052 1111,0,1 1118,1,@3052 1141,0,12 1150,1,@3004 1155,0,@2827 1162,1,@3038 1174,1,@3052 1210,1,@3052 1219,0,1 1226,1,@3052 1238,0,12 1250,1,@3004 1255,0,@3113 1262,1,@3038 1274,1,@3052 1310,1,@3052 1319,0,1 1326,1,@3060 1407,0,16 1413,0,12 1422,1,@3004 1430,1,@3038 1442,1,@3052 1454,0,@3114 1462,1,@3115 1475,0,12 1486,1,@3004 1491,0,@1251 1498,1,@3038 1510,1,@3052 1519,0,85 1526,1,@3052 1535,0,56 1542,1,@3052 1573,0,0 1590,1,@3068 3112:O1|-20 3113:O1|-4 3114:O1|-11 3115:C2,112|3b650c7303ff55248b7b308b3783fe017502eb105053ff3389d883c800e87ecdffffeb045053ff338b44240890e892baffff8b5c240483c800e83ec5ffff8b5c2404b8010000000bc0e82ec5ffff8b1c248b13f6c2017503ff553889d183c1fe70f68b5c240489c883c40ce9f4c5ffff|@3116,63|30,1,@3069 46,1,@3038 58,1,@3052 67,0,0 74,1,@3052 108,1,@3056 3116:S32|49333836434f4445434f4e5328292e707574436f6e646974696f6e616c283229 3117:S26|49333836434f4445434f4e5328292e7461675465737432283529 3118:O3|0,-1,3 3119:O1|11 3120:O3|0,3,3 3121:O2|-18,0 3122:O2|-18,2 3123:O2|16,2 3124:O2|16,0 3125:C2,416|3b650c7303ff55248b7c2408f7c7010000007503ff553881ff01ffffff7c71f7c7010000007503ff553881ff010100007d635053bb190000008b44240ce826a7ffffb8505779410bc0e846b9ffff8b5c240c83c800e8f2c3ffff8b44240483c800e81ebcffffbe1100000089c323def6c3017503ff5538505289c2d1fa8d46fff7ea8d58015a5870ebf6c301750feb0ae94a000000e945000000ff553889da81c28001000070e78b0c2489d023c1a8017503ff55388d42ff03c170f68b5c240c90e886c3ffff8b7c24108b74240c89f389f88b54240883c41452e9adcdffff5053bb190000008b44240c83c800e876a6ffffb8f82575410bc0e896b8ffff8b5c240c83c800e842c3ffff8b44240483c800e86ebbffffbe1100000089c323def6c3017503ff5538505289c2d1fa8d46fff7ea8d58015a5870ebf6c3017503ff553889da81c28001000070f38b0c2489d023c1a8017503ff55388d42ff03c170f68b5c240c90e8e2c2ffff8b7c240c8b378b1ef6c3017503ff553889da83c20870f689168b4c24108b47088944241089c88b54240883c41052e9a3bbffff83c800|@3126,63|53,0,12 62,1,@3004 67,0,@3072 74,1,@3038 86,1,@3052 98,1,@3039 103,0,8 194,1,@3052 219,1,@3073 226,0,12 238,1,@3004 243,0,@408 250,1,@3038 262,1,@3052 274,1,@3039 279,0,8 358,1,@3052 409,1,@3042 3126:S26|49333836434f4445434f4e5328292e67656e496d6d6564283429 3127:C2,1420|3b650c7303ff55248b7c240883ff01740983ff05740489feeb1183fb037407be03000000eb05be0d00000083ff01742c505356bb190000008b44241090e846a5ffffb89c8879410bc0e866b7ffff8b5c241083c800e812c2ffffeb035053568b74241483fe057426bb190000008b442410e812a5ffffb8a88879410bc0e832b7ffff8b5c241083c800e8dec1ffff8b1c248b542414530bdaf6c3015b7503ff55383bda747083fb137542bb190000008b4424100bc0e8cea4ffffb8d41176410bc0e8eeb6ffff8b5c241083c800e89ac1ffff6a0dff742414bb0b000000b80900000083c800e802d0ffffeb518b4d008d49f43b4d087303ff5520894d00c741fc02000000895904c701ddffffff51bb19000000eb05e9230000008b44241483c800e862a4ffff8b0424e886b6ffff8b5c241483c800e832c1ffff83c4048b4c241883f90175748b04248b7c2404500bc7a801587503ff55383bc7750ab8549079410bc0ff552cbb190000008b4424100bc0e812a4ffffb8987e79410bc0e832b6ffff8b5c241083c800e8dec0ffff8b742418bb1100000089f223d3f6c2017503ff55385089f2d1fa8d43fff7ea8d50015870edf6c201750aeb05e985000000ff553889d181c18001000070ec8b042489cf23f8f7c7010000007503ff55388d79ff03f870f68b5c241089f80bc0e87ac0ffff6a03ff7424148b5c2408b807000000e81afcffffbb190000008b4424100bc0e872a3ffffb8f88079410bc0e892b5ffff8b5c241083c800e83ec0ffff6a01ff7424148b5c240cb8ffffffffe872d3ffffeb71bb190000008b442410e836a3ffffb8f88079410bc0e856b5ffff8b5c241083c800e802c0ffff6a01ff7424148b5c240cb8ffffffffe836d3ffffbb190000008b4424100bc0e8faa2ffffb8987e79410bc0e81ab5ffff8b5c241083c800e8c6bfffff8b442418bf1100000089c623f7eb05e968000000f7c6010000007503ff5538505289c2d1fa8d47fff7ea8d70015a5870ebf7c6010000007503ff553889f381c38001000070f38b142489d923caf6c1017503ff55388d4bff03ca70f68b5c241089c890e85ebfffff6a03ff7424148b5c2408b807000000e8fefaffff8b5c2410b8948779410bc0e8bef9ffff8b7d008d7ff43b7d087303ff5520897d00c747fc02000000c7470401000000890757bb190000008b442414e826a2ffffb8d41176410bc0e846b4ffff8b5c241483c800e8f2beffff8b5c2414b8ab0000000bc0e8e2beffff8b5c2414b8690000000bc0e8d2beffff8b5c24148b0424e81ac6ffffbb190000008b4424140bc0e8d2a1ffffb8909079410bc0e8f2b3ffff8b5c241483c800e89ebeffff8b5c2414b8a50100000bc0e88ebeffffbb190000008b4424140bc0e89aa1ffffb88c8779410bc0e8bab3ffff8b5c241483c800e866beffff8b742404f7c6010000007503ff553889f381c3e001000070f389da8b5c241489d00bc0e83ebeffff8b4c240c83f9017445bb190000008b44241490e842a1ffffb8f88079410bc0e862b3ffff8b5c241483c800e80ebeffff6a016a01ff742420ff742420bb01000000b80300000090e87aefffffeb3ebb190000008b442414e8fea0ffffb8f88079410bc0e81eb3ffff8b5c241483c800e8cabdffffff742418ff742418bb05000000b80300000090e8fad0ffff8b4424048b7c2418500bc7a801587503ff55383bc774478b75008d76f43b75087303ff5520897500c746fc02000000894604c7062100000056bb190000008b44241890e886a0ffff8b0424e8aab2ffff8b5c241883c800e856bdffffeb01508b74241c83fe057428bb190000008b4424180bc0e856a0ffffb8b48879410bc0e876b2ffff8b5c241883c800e822bdffff8b5c241c83fb01742ebb190000008b44241890e826a0ffffb8c08879410bc0e846b2ffff8b54241889d38b4c241483c42451e9ebbcffffb80100000083c414c20c00|@3131,63|32,0,1 39,0,6 52,0,12 62,1,@3004 67,0,@3121 74,1,@3038 86,1,@3052 105,0,12 114,1,@3004 119,0,@3122 126,1,@3038 138,1,@3052 171,0,12 182,1,@3004 187,0,@1251 194,1,@3038 206,1,@3052 217,0,5 222,0,4 230,1,@3088 265,0,-18 271,0,12 290,1,@3004 298,1,@3038 310,1,@3052 349,0,@3128 359,0,12 370,1,@3004 375,0,@3104 382,1,@3038 394,1,@3052 403,0,8 494,1,@3052 509,0,3 514,1,@3125 519,0,12 530,1,@3004 535,0,@3109 542,1,@3038 554,1,@3052 569,0,-1 574,1,@3095 581,0,12 590,1,@3004 595,0,@3109 602,1,@3038 614,1,@3052 629,0,-1 634,1,@3095 639,0,12 650,1,@3004 655,0,@3104 662,1,@3038 674,1,@3052 683,0,8 778,1,@3052 793,0,3 798,1,@3125 807,0,@3114 814,1,@3115 845,0,0 853,0,12 862,1,@3004 867,0,@1251 874,1,@3038 886,1,@3052 895,0,85 902,1,@3052 911,0,52 918,1,@3052 930,1,@3068 935,0,12 946,1,@3004 951,0,@3130 958,1,@3038 970,1,@3052 979,0,210 986,1,@3052 991,0,12 1002,1,@3004 1007,0,@3113 1014,1,@3038 1026,1,@3052 1066,1,@3052 1080,0,12 1090,1,@3004 1095,0,@3109 1102,1,@3038 1114,1,@3052 1131,0,0 1136,0,1 1142,1,@3105 1149,0,12 1158,1,@3004 1163,0,@3109 1170,1,@3038 1182,1,@3052 1195,0,2 1200,0,1 1206,1,@3095 1262,0,16 1268,0,12 1278,1,@3004 1286,1,@3038 1298,1,@3052 1315,0,12 1326,1,@3004 1331,0,@3123 1338,1,@3038 1350,1,@3052 1364,0,12 1374,1,@3004 1379,0,@3124 1386,1,@3038 1405,1,@3052 1410,0,0 3128:O3|@7320,@224,@3129 3129:S35|417373657274696f6e206661696c65643a20496e76616c696420726567697374657273 3130:O3|0,-4,3 3131:S28|49333836434f4445434f4e5328292e6469766d6f64576f7264283529 3132:O3|0,2,3 3133:O3|0,1,3 3134:S23|49333836434f4445434f4e5328292e67656e5252283529 3135:S60|5452414e535f54414228292e7075736852656769737465727328352970757368456e747269657328312973617665446972656374496e526567283129 3136:C2,160|3b650c7303ff5524f7c0010000007572f7c301000000756f89c789de8b1e8b0790e89e86ffff83f80174088b5e048b4704ebcd8b07e81e8cffff89c38b0683c800e8128cffff5323d8f6c3015b7503ff55383bd87d3eff3789f38b4704e89effffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0424eb0ae918000000e912000000890289d083c404c38b5e0489f8e962ffffffc3c3|@3137,61|34,1,@2958 54,1,@2970 66,1,@2970 3137:S32|5452414e535f54414228292e696e766572736553657428312964696666283229 3138:C2,68|3b650c7303ff55248b78048b37ff700c57ff7008ff3056538b4424148b1083fa017509b81100000083c418c3bb1100000089f08d5424180bc0e82200000083c418c30bc0|@3143,63|36,0,8 45,0,8 58,1,@3139 3139:C2,748|3b650c7303ff5524a8017503ff553883f8017d02eb168b7af08b375023c6a801587503ff55383bc67d02eb0f89c6b824ae7441ff552cbf01000000a8017503ff553889c683c60270f68b4c77fe89cfa8017503ff553883f8017d02eb0ea8017503ff553883f80d7d02eb1089c1b81401794190ff552cbe0100000083f8097507be0d000000eb0e83f80b7507be0f000000eb0289c68b4af45250535756518b1183fa017507b903000000eb388b0a83f9017507b901000000eb2a8b5c24048b0190e8ba84ffff83f8017407b903000000eb128b49043b650c7303ff5524ebcfb9010000008b442410a8017503ff553883f8017d02eb0ea8017503ff553883f80d7d02eb0fb8140179410bc0ff552cbf0100000083f8097507bf0d000000eb0e83f80b7507bf0f000000eb0289c78b7424148b56e883fa017507bb03000000eb4051578b1a83fb017507bb01000000eb2b8b4b048b038b1c2490e82284ffff83f8017407bb03000000eb1189cb3b650c7303ff5524ebcebb0100000083c404eb01518b4c240c83f901755d8b042483f801745a83fb01745a8b7c2414f7c7010000007503ff553883ff017d02eb12f7c7010000007503ff553883ff0d7d02eb10b81401794183c800ff552cb80100000083ff097507b80d000000eb1d83ff0b7516b80f000000eb11e918000000e913000000e90e00000089f88b54241883c41ce9040100008b7c241483ff017507b80b000000eb12f7c7010000007503ff553889f883e80270f689de50bb110000008b44241483c800e84683ffff83f801745883f901755383fe01744ef7c7010000007503ff553883ff017d02eb12f7c7010000007503ff553883ff0d7d02eb0eb81401794190ff552cbb0100000083ff097507bb0d000000eb1483ff0b7507bb0f000000eb0889fbeb048b5c24148b54241c8b0c248b42ec510bc8f6c101597503ff55383bc8752d89dfbb1100000089f883c800e8ba82ffff83f8017409b81100000083c420c389f88b54241c83c420e92600000089c883c420e914fdffff|@3142,63|47,0,@51 55,0,0 110,0,@2901 119,0,0 129,0,6 141,0,7 166,0,1 180,0,0 194,1,@2958 204,0,1 224,0,0 261,0,@2901 271,0,0 281,0,6 293,0,7 314,0,1 330,0,0 346,1,@2958 356,0,1 375,0,0 448,0,@2901 459,0,0 469,0,6 481,0,7 512,1,@3140 526,0,5 554,0,8 566,1,@2958 622,0,@2901 631,0,0 641,0,6 653,0,7 696,0,8 706,1,@2958 716,0,8 734,1,@3140 3140:C2,248|3b650c7303ff552489d789c689f083c800e8f687ffffa8017503ff553883f8017d02eb168b57f08b0a5023c1a801587503ff55383bc17d02eb0c89c2b824ae74410bc0ff552ca8017503ff553889c183c10270f6c7444afe030000008b4d008d49f43b4d087303ff5520894d00c741fc02000000c741040100000089318b5d008d5bf83b5d087303ff5520895d00c743fc01000000890b8b4ff48b115756505389d38b0424e8c68fffff89018b4c240c8b7c240483ff017507b80b000000eb12f7c7010000007503ff553889f883e80270f68b71f889068b59fc8b13f6c2017503ff553889d083e80270f689038b44240883c410c383c800|@3141,63|18,1,@2970 61,0,@51 88,0,1 119,0,0 166,1,@2990 186,0,5 3141:S47|5452414e535f54414228292e67657441636365707461626c655265676973746572283229616c6c6f63526567283129 3142:S47|5452414e535f54414228292e67657441636365707461626c65526567697374657228322966696e6446726565283229 3143:S36|5452414e535f54414228292e67657441636365707461626c655265676973746572283229 3144:C2,500|3b650c7303ff55248b42fc8b78fc52ff72e88b58088b40048b570890ff128b34248b5efc8b56f483fa137540ff7308bb190000008b04240bc0e8b298ffffb8d41176410bc0e8d2aaffff8b1c24e882b5ffff6a0dff742404bb0b000000b80900000083c800e8eac3ffffeb4d8b4d008d49f43b4d087303ff5520894d00c741fc02000000895104c701ddffffffff730851bb190000008b44240483c800e84e98ffff8b0424e872aaffff8b5c240483c800e81eb5ffff83c4048b442404bb110000008b40ece8fe7fffff83f80174098b7424048b7ef4eb1d8b7c24048b77fc8b5e048b5b108b47f490e83284ffff8b5424048b7aec8b4c24048b41fc8b70048b5e308b13bef9ffffff89d323def6c3017503ff55385052d1fa8d46fff7ea8d58015a5870ed8b75008d76f43b75087303ff5520897500c746fc02000000895e04c706fbffffff8b5c24045752ff70f4ff71f856ff73f08b5d008d5bec3b5d087303ff5520895d00c743fc0400000089530c897b088b14248953048933538b5c240c8b442410e85662ffff8b4c241c8b41fc8b78048b77308b1ef6c3017503ff553889da83c20270f689168b1e8b57188b0a5323d9f6c3015b7503ff55383bd97e278b5c241c8b4bfc8b41048b74241c8b56fc8b7a048b5f308b0b8b7018890eb80100000083c420c3b80100000083c420c383c800|@3145,63|48,0,12 58,1,@3004 63,0,@1251 70,1,@3038 78,1,@3052 89,0,5 94,0,4 102,1,@3088 137,0,-18 146,0,12 158,1,@3004 166,1,@3038 178,1,@3052 190,0,8 198,1,@2958 234,1,@2969 261,0,-4 322,0,-3 390,1,@2889 480,0,0 489,0,0 3145:S59|5452414e535f54414228292e7075736852656769737465727328352970757368456e7472696573283129736176655265674f6e537461636b283129 3146:C2,216|3b650c7303ff552450528b7afc8b77048b5e108b42f483c800e8ae82ffff8b1c248b53ec8b5c240489d083c800e8427effff83f8017402eb1d8b0c248b41fc6a11ff742408ff70088b59f4b8f5ffffff90e8b6c8ffff8b3c248b47f88d54240890e88e0000008b34248b5efc8b55008d52f43b55087303ff5520895500c742fc020000008b4c2404894a04c702050000008b45008d40ec3b45087303ff5520894500c740fc040000008b7ee889780cc74008110000008b4ef089480489108b542408894424088b43f48b5ef883c40852e9b760ffff83c800|@3151,63|26,1,@2969 46,1,@2958 76,0,-6 82,1,@3098 98,1,@3147 141,0,2 178,0,8 209,1,@2889 3147:C2,364|3b650c7303ff55248b7af88b77fc8b5e048b4b1c8b395023c7a801587503ff55383bc77d738b7af88b77fc8b5e0452508b4b0c89c389c80bc0e8ba8efbfff7c00100000075728b388b3783fe03756e8b5c24048b53f88b4804ff7008ff700c8b5af48b4704e8167dffff83f80174738b44240c8b58f88b53fc8b72048b44240c8b58f8ff7708518b43f48b5e10e84681ffff8b7c2414eb05e9c90000008b77f88b5efc8b53048b5a108b47fc90e8d60000008b4c2414eb0ae985000000e97a0000008b41f88b78fc8b75008d76f03b75087303ff5520897500c746fc03000000eb05e9510000008b5c2404895e088b51fc895604c706030000008b5d008d5bec3b5d087303ff5520895d00c743fc040000008b44240889430c8b44240c8943088b04248943048933538b5c24148b47f490e8625fffffeb0e5050eb0a50505050eb04505050508b442410a8017503ff553889c783c70270f689f88b54241483c418e99afeffffb801000000c3|@3150,63|58,1,@435 102,1,@2958 142,1,@2969 174,1,@3148 246,0,1 306,1,@2889 359,0,0 3148:C2,212|3b650c7303ff552490e87e81ffffa8017503ff553883f8017d02eb158b138b0a5023c1a801587503ff55383bc17d02eb1289c2b824ae744183c800ff552cbf01000000a8017503ff553889c783c70270f68b4c7afe89cf83ff01751c8b4b0c8b31f7c6010000007503ff553889f183e90270f68b730c890ef7c7010000007503ff553889fe83c60270f6a8017503ff553883f8017d02eb138b0a5023c1a801587503ff55383bc17d02eb10b824ae744183c800ff552cb801000000a8017503ff553889c783c70270f689747afeb801000000c390|@3149,63|10,1,@2970 52,0,@51 63,0,0 172,0,@51 183,0,0 206,0,0 3149:S19|5452414e535f54414228292e696e6372283229 3150:S70|5452414e535f54414228292e7075736852656769737465727328352970757368456e747269657328312973617665526567496e5265672831297265674368616e676564283129 3151:S57|5452414e535f54414228292e7075736852656769737465727328352970757368456e747269657328312973617665526567496e526567283129 3152:S42|5452414e535f54414228292e7075736852656769737465727328352970757368456e7472696573283129 3153:S13|70757368526567697374657273 3154:S28|5452414e535f54414228292e70757368526567697374657273283529 3155:O2|0,@3156 3156:O2|1,@3157 3157:O2|2,@3158 3158:O2|3,@3159 3159:O2|6,@3160 3160:O2|7,0 3161:O2|@3172,@2978 3162:C2,416|3b650c7303ff55248b7c2404f7c7010000007503ff553883ff017d708b70308b0e8b781c8b37f7c6010000007503ff553889f783ef0270f65250535189f8ba34a0794190ff128b34248b580883fb01745950568b4804b80100000089ca83c800ff128b7c241089c38b470c0bc0e89a8afbfff7c00100000075398b580cf6c3017503ff553889da83c202eb05e96700000070ef8b0c245223d1f6c2015a7503ff55383bd17e0989d6eb0ce92f00000089ceeb038b34248b5c240456b8010000008b130bc0ff128b342483c40c3b650c7303ff5524e970ffffffba0100000089f2895424148b5c24048b4424088b54240c83c410e908ffffff8b70308b0e5123cff6c101597503ff55383bf97d0d89c6b894a1794183c800ff552c8b0e510bcff6c101597503ff55383bf97508b801000000c204005250538b52040bc0ff1283f8017402eb3ebb190000008b0424e86a90ffffb89c8879410bc0e88aa2ffff8b1c24e83aadffff8b4424048b78308b37f7c6010000007503ff553889f383c30270f6891f8b542410895424108b1c248b4424048b54240883c40ce962feffff0bc0|@3171,63|63,0,@3163 87,0,0 110,1,@435 188,0,0 218,0,0 272,0,@3169 301,0,0 326,0,12 334,1,@3004 339,0,@3121 346,1,@3038 354,1,@3052 3163:O1|@3164 3164:C2,136|a8017503ff553883f8017c07bf03000000eb05bf010000008b75008d76f03b75087303ff5520897500c746fc03000000bbe0a07941891ebb34a07941895e088946048b5d008d5bf43b5d087303ff5520895d00c743fc02000000ba4ca1794189138943048b45008d40f03b45087303ff5520894500c740fc030000008978088958048930c383c800|@3168,61|13,0,1 20,0,0 49,0,@3165 56,0,@3163 91,0,@3167 3165:C2,36|3b650c7303ff55248b7a04f7c7010000007503ff553889fe83ee0270f689f08b5208ff22|@3166,63| 3166:S34|5452414e535f54414228292e696e64446f776e746f28322970726576283129283129 3167:C2,4|8b4204c3|@3166,5| 3168:S31|5452414e535f54414228292e696e64446f776e746f28322970726576283129 3169:O3|@7320,@224,@3170 3170:S32|707573685265676973746572733a20756e707573686564207265676973746572 3171:S25|5452414e535f54414228292e616c69676e537461636b283329 3172:C2,124|3b650c7303ff55248b78308b378b4d008d49f03b4d087303ff5520894d00c741fc03000000bf88a27941893989410889710450566a01535089cbb8010000008b52040bc0ff128b7424048b5e308b138b0c24520bd1f6c2015a7503ff55383bd17507b803000000eb05b80100000089c783f70289f883c408c383c800|@3181,63|38,0,@3173 59,0,0 99,0,1 106,0,0 3173:C2,192|3b650c7303ff55248b7a085289c38b470ce8e686fbff83f8017510b864a3794183c800ff552cb8010000008b308b1e83fbfb75308b14248b4e048b7a045123cff6c101597503ff55383bcf7e0eb8a0a3794190ff552cb801000000b80100000083c404c38b500cf6c2017503ff553883fa017c238b0c248b79045223d7f6c2015a7503ff55383bd77d0db8e0a37941ff552cb8010000008b0c248b7904520bd7f6c2015a7503ff55383bd77509b80300000083c404c3b80100000083c404c390|@3180,63|18,1,@435 28,0,@3174 39,0,0 78,0,@3176 87,0,0 92,0,0 139,0,@3178 147,0,0 174,0,1 183,0,0 3174:O3|@7320,@224,@3175 3175:S33|70757368416e79456e747279417443757272656e7453503a206e6f20656e747279 3176:O3|@7320,@224,@3177 3177:S40|70757368416e79456e747279417443757272656e7453503a20656e7472792061626f766520727370 3178:O3|@7320,@224,@3179 3179:S39|70757368416e79456e747279417443757272656e7453503a20756e70757368656420656e747279 3180:S52|5452414e535f54414228292e70757368416e79456e747279417443757272656e74535028322973656c656374456e747279283129 3181:S38|5452414e535f54414228292e70757368416e79456e747279417443757272656e745350283229 3182:O2|2,8 3183:S7|70757368526567 3184:O2|2,2 3185:C2,400|3b650c7303ff55248b7a0c5023c7a801587503ff55383bc77d6ea8017503ff553883f8057d6783f8017507be01000000eb6083f8037507be07000000eb595250ff72e0bbffffffff90e8be71fbff89c3b860a67941e8aa6dfbff8b5d008d5bf03b5d087303ff5520895d00c743fc03000000894308ba54cf7441895304b9fcc1b441890b89d8eb14e9fa000000e9f5000000e910000000e90b00000083c800ff552cbe010000005250ff72e056568b5af88b42f4ba001f7941e8aa79ffff8b5c240c8b55008d52f43b55087303ff5520895500c742fc020000008b0c24894a04c70205000000ff73f489d3b898a4794190e86654ffff8b7c240c506a0189c38b47f4ba401979410bc0e89673ffff8b74240cf7c6010000007503ff553883fe017d02eb188b5c24088b135223d6f6c2015a7503ff55383bf27d02eb0fb824ae74410bc0ff552cbb01000000f7c6010000007503ff553889f183c10270f68b042489444bfebb01000000f7c6010000007503ff553889f083c00270f68b54241083c414e979feffffb801000000c383c800|@3187,63|44,0,0 56,0,3 68,0,-1 74,1,@336 81,0,@3186 86,1,@323 118,0,@224 126,0,@7320 163,0,0 181,0,@2977 186,1,@2979 226,0,2 236,0,@3183 242,1,@2888 259,0,@2963 266,1,@2965 317,0,@51 327,0,0 357,0,0 392,0,0 3186:S12|4e6f74206172672072656720 3187:S34|475f434f444528292e636f646567656e283130297075736841726752656773283129 3188:C2,240|3b650c7303ff55248b4210a8017503ff553883f8057d07bf01000000eb0ea8017503ff553889c783ef0470f689d6bb11000000b81100000090e82e71ffff83f801743d89fb8b460490e8be000000a8017503ff553889c283ea0270f689f1538b590889d090e8c600000051ff71088b5c2408b8110000000bc0e812010000eb615056505057ff760c6a018d5c240c538b5e048b4608ba08aa794183c800e8de0200008b54240c6aff8b5c240c8b4204ba4019794190e8fe71ffff8b4c240c8b4104e8460000008b5908e862000000ff71088b5c24048b442408e8b200000083c40c8b04248b400483c408e96138000090|@3261,63|24,0,0 47,0,8 52,0,8 58,1,@2958 74,1,@3189 102,1,@3190 115,0,8 122,1,@3192 150,0,@3198 158,1,@3200 176,0,@2963 182,1,@2965 194,1,@3189 202,1,@3190 218,1,@3192 235,1,@3259 3189:C2,8|8b78308b07c30bc0|@1924,33| 3190:C2,32|8b7b308b3789f223d0f6c2017503ff55388d56ff03d070f68917b801000000c3|@3191,61|27,0,0 3191:S28|49333836434f4445434f4e5328292e7265736574537461636b283229 3192:C2,344|3b650c7303ff55248b7c240483f8117409b8a4a9794190ff552c83fb017529ff7704bb1900000089f8e8d687ffffb8cca979410bc0e8f699ffff8b5c240883c800e8a2a4ffffeb61be0900000089da23d6f6c2017503ff55385089dad1fa8d46fff7ea8d50015870edff770452bb1900000089f890e88a87ffffb8d4a979410bc0e8aa99ffff8b5c240c83c800e856a4ffffbb010200008b04240bc0ff15009f040883f8017507eb24e993000000a8017503ff553883f8017c07b903000000eb05b90100000083f9037402eb0489c1eb11a8017503ff553889c181c10002000070f38b5c240c89c890e8faa3ffff8b0c24f6c1017503ff553883f9017c07b803000000eb05b80100000083f803750489cfeb12f6c1017503ff553889cf81effe01000070f3bb0102000089f8ff15e09e04088b5c240c83c800e8eaadffff83c4048b3424c70603000000b80100000083c404c2040083c800|@3197,63|18,0,@3193 35,0,12 42,1,@3004 47,0,@3195 54,1,@3038 66,1,@3052 73,0,4 110,0,12 118,1,@3004 123,0,@3196 130,1,@3038 142,1,@3052 147,0,256 158,0,I110 187,0,1 194,0,0 234,1,@3052 255,0,1 262,0,0 294,0,256 302,0,I109 314,1,@3073 326,0,1 331,0,0 3193:O3|@7320,@224,@3194 3194:S14|57726f6e6720617267756d656e74 3195:O1|18 3196:O1|-19 3197:S36|49333836434f4445434f4e5328292e72657475726e46726f6d46756e6374696f6e283329 3198:O2|@3200,@3199 3199:O2|@3249,@2978 3200:C2,480|3b650c7303ff55245050525053ff730c8b5c24248b04240bc0e8467ffbff83f801754bbbffffffff8b44242490e86e6cfbff89c3b81cac7941e85a68fbff8b7d008d7ff03b7d087303ff5520897d00c747fc03000000894708be54cf7441897704bbfcc1b441891f89f890ff552c8d7c24108b74242489378d5c24108943048b5424148b4c2404ff32ff7204ff7208ff720c89f38b410c0bc0e8c67efbff83f8017510b840ac794183c800ff552cbf010000008b700483fe037507bf03000000eb05bf01000000578b5c24108b1383fa0575728b4c243483f901751b8b7c24308b730489378b442438894704b80100000083c42cc20c0083ff01745c8b45008d40f43b45087303ff5520894500c740fc02000000c74004010000008b7b04893857e82a010000ff74241c89c3b868ad7941e8e275ffff8b7424348b1c24891e8b54243ceb05e952000000895604b80100000083c430c20c00bb110000008b442408e81a5fffff83f80174198b5c2430b8010000008d54242c90e82a02000083c42cc20c008b5c2430b8010000008d54242ce83203000083c42cc20c00bb110000008b442408e8d65effff83f80174198b5c2430b8010000008d54242c90e8e601000083c42cc20c008b5c2430b8010000008d54242ce8ee02000083c42cc20c00|@3248,63|26,1,@435 36,0,-1 46,1,@336 53,0,@3201 58,1,@323 90,0,@224 98,0,@7320 154,1,@435 164,0,@3202 175,0,0 188,0,1 195,0,0 237,0,0 279,0,0 290,1,@3204 301,0,@3206 306,1,@2985 334,0,0 345,0,8 354,1,@2932 368,0,0 378,1,@3209 393,0,0 402,1,@3211 413,0,8 422,1,@2932 436,0,0 446,1,@3209 461,0,0 470,1,@3211 3201:S28|70737461636b5265616c456e7472793a206e6f7420656e7472793a20 3202:O3|@7320,@224,@3203 3203:S23|6c6173745265666572656e63653a206e6f20656e747279 3204:C2,188|3b650c7303ff5524bf0100000083f801750489feeb438b75008d76f43b75087303ff5520897500c746fc02000000c74604010000008b18891e8b480489fb89f090e8fa79ffff89c789c83b650c7303ff5524ebb9be0100000056bb0100000083fe01750489daeb23f6c3017503ff553889d983c10270f68b760489cb3b650c7303ff5524ebd9ba0100000083fa0d7509b80100000083c404c38b45008d40f83b45087303ff5520894500c740fc010000008b0c24890883c404c30bc0|@3205,63|9,0,0 49,0,0 66,1,@2991 85,0,0 91,0,0 135,0,0 145,0,0 3205:S24|5452414e535f54414228292e6c697374546f536574283129 3206:O1|@3207 3207:C2,8|b803000000c30bc0|@3208,1|1,0,1 3208:S42|5452414e535f54414228292e72656d6f766552656769737465727346726f6d4361636865283229283129 3209:C2,208|3b650c7303ff55248b420883f80174428b75008d76ec3b75087303ff5520897500c746fc040000008b4ad8894e0cc74608110000008b7ae0897e048b42e489065253568b5af88b42e8e80e4dffff89c7eb128b7aec52538b5f108b42dce8eaedffff89c78b7424048b5d008d5bf43b5d087303ff5520895d00c743fc020000008b56dc895304c70305000000ff76ecb898a4794190e8ae4bffff8b4c2404506aff8b590c8b41ecba4019794190e8de6affff8b4424088b7c24048b70dc89378b1c24895f04b80100000083c40cc30bc0|@3210,63|49,0,8 74,1,@2889 94,1,@3148 136,0,2 144,0,@3183 150,1,@2888 168,0,@2963 174,1,@2965 198,0,0 3210:S43|5452414e535f54414228292e6c6f6164456e74727928352975736543616368655265676973746572283229 3211:C2,544|3b650c7303ff55248b7af452538b5af08b42ec8b57040bc0ff128b7424048b5eec508b530c8b5ef889d083c800e86a7afbff83f8017510b824b1794183c800ff552cb8010000008b4c24088b790883ff0175598b30ff7004ff7008ff700cbb110000008b4424040bc0e8b668ffff83f801744e8b1e83fb03750989f2be03000000eb3b83fbfb752c8b5604f6c2017503ff553883fa017c0989f0be03000000eb108b41d45689c683f602eb2fe91a00000050eb2789f2be0100000052eb1d52eb1a89f3be0100000053eb10be01000000ff7004ff7008ff700cff3083fe01741a566a038b590c8b41ecba4019794183c800e87a69ffff89c3eb06bb01000000568b74241cff760cff76ec8b5c241c8b46f0e8560100008b5c241c8b55008d52f43b55087303ff5520895500c742fc020000008b4c2414894a04c70205000000ff73ec89d3b898a47941e8da49ffff8b3c2483ff01747189c6bb110000008b44240ce8525affff83f80174198b5c241c8b53ec568b5a108b44241083c800e8fa6bffffeb01568b5c24208b55008d52ec3b55087303ff5520895500c742fc040000008b4c240c894a0c8b4424188942088b7c2414897a048b7424088932528b53e88b4bf889cbeb05e93800000089d083c800e8664affff8b4424208b78ec8b5f108b44241890e842ebffff8b7424206aff8b5e0c8b46ecba401979410bc0e86e68ffffeb01508b74241c8b5c2418891e8b1424895604b80100000083c424c30bc0|@3247,63|46,1,@435 56,0,@3212 67,0,0 95,0,8 106,1,@2958 125,0,1 155,0,1 183,0,0 196,0,0 204,0,0 234,0,@2963 242,1,@2965 251,0,0 274,1,@3214 315,0,2 325,0,@3183 330,1,@2888 345,0,8 354,1,@2932 382,1,@2969 466,1,@2889 486,1,@3148 503,0,@2963 510,1,@2965 534,0,0 3212:O3|@7320,@224,@3213 3213:S24|6c6f6164456e7472793a20656e7472792064656c65746564 3214:C2,948|3b650c7303ff55248b7c240450505053ff77288b5c241c8b470c83c800e80e78fbff83f801754bbbffffffff8b44241c90e83665fbff89c3b81cac7941e82261fbff8b75008d76f03b75087303ff5520897500c746fc03000000894608bb54cf7441895e04bafcc1b441891689f090ff552c8d74240c8b5c241c891e8d54240c8942048b4c2410bb110000008b41080bc0e8b658ffff83f801742d8b5c24048b410883c800e8a258ffff83f801746d6a11ff742408ff7424108b5908b8f5ffffffe88ab0ffffeb598b018b3883ff05752f8b70048b5c240489f083c800e86a58ffff83f80174756a11ff742408ff74241089f3b8f5ffffff90e852b0ffffeb6183fffd752bff7004ff742408ff742410bb11000000b8f5ffffffeb0ae945020000e94002000083c800e8a2020000eb6d83ff01756d8b75008d76f43b75087303ff5520897500c746fc020000008b5c2404895e04c706e5ffffffeb0ae905020000e900020000ff700456bb190000008b4424100bc0e8667dffff8b0424e88a8fffff8b5c241083c800e8369affffff742410bb010000008b442408eb0ae9c4010000e9090000000bc0e866260000eb7083ff037517ff742404ff74240c8b58048b40080bc0e83aacffffeb5983fffb75598b7424188b5e308b13f6c2017503ff553889d183e90270f6baf9ffffff89cf23faf7c7010000007503ff553850528d41ffd1faf7ea8d78015a5870ed8b500489d123cff6c1017503ff553889d1eb0fe93e010000e937010000e91d0000002bcf8d490170e3ff742404ff74240cbb0900000089c8e8baabffffeb708b7004f7c60100000075048b1eeb10b878d1764183c800ff552cbb0100000050508b542420538b420ce8b675fbff83f8017553bbffffffff8b04240bc0e8de62fbff89c3b81cac7941e8ca5efbff8b4d008d49f03b4d087303ff5520894d00c741fc03000000894108b854cf7441eb05e9a0000000894104bffcc1b441893989c80bc0ff552c8d4c24048b3c2489398d7424048946048b5c24088b138b0a83f9fb75658b4424248b78308b37f7c6010000007503ff553889f383eb0270f6bef9ffffff89d923cef6c1017503ff5538505289dad1fa8d46fff7ea8d48015a5870eb8b720489f323d9f6c3017503ff553889f32bd98d5b0170f4ff7424148b442414e842260000eb0ab8e0db79410bc0ff552c83c40c505083c4086aff8b5c24208b44241cba40197941e88a64ffff8b142483fa0174268b44240883c800e85e73ffff8b4c2418894c241cbb28dc79418b7c241483c41c57e96c48ffffb80100000083c414c2080090|@3246,63|30,1,@435 40,0,-1 50,1,@336 57,0,@3201 62,1,@323 94,0,@224 102,0,@7320 136,0,8 146,1,@2932 166,1,@2932 189,0,-6 194,1,@3098 222,1,@2932 244,0,-6 250,1,@3098 273,0,8 278,0,-6 298,1,@3215 342,0,-14 363,0,12 374,1,@3004 382,1,@3038 394,1,@3052 403,0,0 426,1,@3237 454,1,@3094 490,0,-4 575,0,4 582,1,@3094 604,0,@1640 615,0,0 630,1,@435 640,0,-1 650,1,@336 657,0,@3201 662,1,@323 694,0,@224 709,0,@7320 779,0,-4 846,1,@3241 853,0,@3243 881,0,@2963 886,1,@2965 906,1,@2996 919,0,@3245 932,1,@2893 937,0,0 3215:C2,7464|3b650c7303ff55248b7c2408530bdff6c3015b7503ff55383bfb751283f8f1740d89c6b8dc79794183c800ff552cf7c001000000741583f8e77c1583f8197f15be7eb579418d748664ffe6e9da000000e9d5000000e9d0000000e910090000909090e9a0190000909090e99f060000909090e9931b0000909090e9ab000000909090e900020000909090e96d100000909090e9a0000000909090e924180000909090e9051a0000909090e97b0d0000909090e973000000909090e9d5050000909090e927030000909090e9b8070000909090e9cd130000909090e9850b0000909090e97e170000909090e9f3150000909090e98f0e0000909090e9a3060000909090e923000000909090e91b000000909090e929040000909090e934090000909090e967180000909090b8107a7941ff552cb8010000008b5c240cf7c3010000007470f7c301000000740489daeb10b89420754183c800ff552cba01000000f6c2017503ff55388d42ff03c270f6a8017503ff553889c683c60270f68b55008d52f43b55087303ff5520895500c742fc02000000897a04c702e5ffffff5652bb190000008b44240c90e86279ffff8b0424eb05e94800000090e87e8bffff8b5c240c83c800e82a96ffff8b4c240c8b018b38f7c7010000007503ff553889fe83c60870f689308b5908895c241489fb8b4424048b54240883c41452e9e88effff8b55008d52f43b55087303ff5520895500c742fc02000000897a04c702e5ffffff52bb190000008b4424080bc0e8de78ffff8b0424e8028bffff8b5c240883c800e8ae95ffff8b4d008d49f43b4d087303ff5520894d00c741fc020000008b442410894104c701030000008b7c2408897c2410bb0100000089c88b74240483c41056e9bd1a00008b5c240cf7c301000000746ef7c301000000740489daeb10b89420754183c800ff552cba01000000f6c2017503ff55388d4aff03ca70f6f6c1017503ff553889c883c00270f6a8017503ff553881f801ffffff7c0fa8017503ff553881f8010100007c5f50bb190000008b442408e81678ffffb854d37941eb05e98200000083c800e82e8affff8b5c240883c800e8da94ffff8b7c24088b378b1ef6c3017503ff553889da83c20870f689168b4f08894c24108b04248b54240483c41052e99e8dffff50bb190000008b44240890e8b677ffffb85cd379410bc0e8d689ffff8b5c240883c800e88294ffff8b7c240889fb8b04248b74240483c41456e9ac9effffbb190000008b442404e87a77ffffb854d379410bc0e89a89ffff8b5c240483c800e84694ffff8b55008d52f43b55087303ff5520895500c742fc020000008b4c240c894a04c702030000008b4424048944240cbb0100000089d08b3c2483c40c57e9561900008b54240cf7c201000000740489d1eb0db894207541ff552cb90100000053518b5c240c8b442404e8261a000050bb190000008b44241090e8e676ffffb8987e79410bc0e80689ffff8b5c241083c800e8b293ffff8b442408bf1100000089c623f7f7c6010000007503ff5538505289c2d1fa8d47fff7ea8d70015a5870ebf7c6010000007503ff553889f381c38001000070f38b54241489d923caf6c1017503ff55388d4bff03ca70f68b5c241089c883c800e84e93ffff8b442404a8017503ff55388d78ff03f870f657ff7424148b5c241cb8ffffffff83c800e8daceffff8b742410ff36bb1900000089f00bc0e82e76ffff8b1c248b13f6c2017503ff553889d183c10470f68b44240489c723f9f7c7010000007503ff553889c72bf98d7f0170f489fbb884887941e81e88ffff538b5c24180bc0e8ca92ffff8b54241889d38b04248b4c241483c42451e9f49cffff8b54240cf7c201000000740489d1eb0fb8942075410bc0ff552cb90100000053518b5c240c8b442404e8d218000050bb190000008b44241090e89275ffffb8987e79410bc0e8b287ffff8b5c241083c800e85e92ffff8b442408bf1100000089c623f7f7c6010000007503ff5538505289c2d1fa8d47fff7ea8d70015a5870ebf7c6010000007503ff553889f381c38001000070f38b54241489d923caf6c1017503ff55388d4bff03ca70f68b5c241089c883c800e8fa91ffff8b442404a8017503ff55388d78ff03f870f657ff7424148b5c241cb80700000083c800e886cdffff8b742410ff36bb1900000089f00bc0e8da74ffff8b1c248b13f6c2017503ff553889d183c10470f68b44240489c723f9f7c7010000007503ff553889c72bf98d7f0170f489fbb884887941e8ca86ffff538b5c24180bc0e87691ffff8b54241889d38b04248b4c241483c42451e9a09bffff8b54240cf7c201000000740489d1eb0fb8942075410bc0ff552cb901000000f6c1017503ff55388d41ff03c170f65350bb190000008b44240ce83e74ffffb8f88079410bc0e85e86ffff8b5c240c83c800e80a91ffff8b7c24108b74240c897c2414897424108b5c24048b04248b54240883c41052e92ea4ffff8b54240cf7c201000000740489d1eb0db894207541ff552cb901000000f6c1017503ff55388d41ff03c170f6be0100000089c123cef6c1017503ff553889f12bc88d490170f45351bb190000008b44240c0bc0e8aa73ffffb8f88079410bc0e8ca85ffff8b5c240c83c800e87690ffff8b4424108b7c240c89442414897c24108b5c24048b04248b74240883c41056e99aa3ffff8b54240cf7c201000000740489d1eb0db894207541ff552cb901000000f6c1017503ff55388d41ff03c170f6a8017503ff553889c683c60270f65356bb190000008b44240c0bc0e82273ffffb8987e79410bc0e84285ffff8b5c240c83c800e8ee8fffff8b5c2404ba1100000089d923caf6c1017503ff553850528d43ffd1faf7ea8d48015a5870edf6c1017503ff553889c881c08001000070f38b7c241089c623f7f7c6010000007503ff55388d70ff03f770f68b5c240c89f0e8928fffff8b5c24108b54240c8b0c24894c241489542410b8050000008b7c240883c41057e921cbffff8b54240cf7c201000000740489d1eb10b89420754183c800ff552cb901000000f6c1017503ff55388d41ff03c170f6a8017503ff553889c683c60270f65356bb190000008b44240c0bc0e83a72ffffb8987e79410bc0e85a84ffff8b5c240c83c800e8068fffff8b5c2404ba1100000089d923caf6c1017503ff553850528d43ffd1faf7ea8d48015a5870edf6c1017503ff553889c881c08001000070f38b7c241089c623f7f7c6010000007503ff55388d70ff03f770f68b5c240c89f0e8aa8effff8b5c24108b54240c8b0c24894c241489542410b8030000008b7c240883c41057e939caffff8b54240cf7c201000000740489d1eb10b89420754183c800ff552cb9010000005351bb190000008b44240c83c800e86e71ffffb8987e79410bc0e88e83ffff8b5c240c83c800e83a8effff8b442404bf1100000089c623f7f7c6010000007503ff5538505289c2d1fa8d47fff7ea8d70015a5870ebf7c6010000007503ff553889f381c38001000070f38b54241089d923caf6c1017503ff55388d4bff03ca70f68b5c240c89c883c800e8d68dffff8b0424a8017503ff55388d78ff03f870f68b7424108b5c240c897c2414895c241089f3b8f9ffffff8b54240883c41052e955c9ffff8b54240cf7c201000000740489d1eb10b89420754183c800ff552cb901000000f6c1017503ff553883f9017d02eb0ff6c1017503ff553883f93f7f02eb708b45008d40f43b45087303ff5520894500c740fc02000000897804c700e5ffffff50bb190000008b44240890e84e70ffff8b0424e87282ffff8b5c240883c800e81e8dffff8b7c24088b378b1ef6c3017503ff553889da83c20870f689168b4f08894c2410b8030000008b542404eb05e90900000083c41052e9d985ffff5351bb190000008b44240c83c800e8ee6fffffb8987e79410bc0e80e82ffff8b5c240c83c800e8ba8cffff8b442404bf1100000089c623f7f7c6010000007503ff5538505289c2d1fa8d47fff7ea8d70015a5870ebf7c6010000007503ff553889f381c38001000070f38b54241089d923caf6c1017503ff55388d4bff03ca70f68b5c240c89c883c800e8568cffffbb190000008b44240c0bc0e8626fffffb85cd579410bc0e88281ffff8b5c240c83c800e82e8cffff8b442410a8017503ff553889c781c7c001000070f38b5c240c89f8e80e8cffff8b5c240c8b0424e84296ffff8b0424ba64d579410bc0ff12be0300000089f323d8f6c3017503ff553889f32bd88d5b0170f453bb190000008b44241083c800e8e66effffb8f88079410bc0e80681ffff8b5c241083c800e8b28bffff8b5424148b4c241089542418894c241489d38b04248b7c240c83c41457e9d89effff8b54240cf7c201000000740489d1eb0fb8942075410bc0ff552cb901000000f6c1017503ff553883f9017d02eb0ff6c1017503ff553883f93f7f02eb708b45008d40f43b45087303ff5520894500c740fc02000000897804c700e5ffffff50bb190000008b44240890e83e6effff8b0424e86280ffff8b5c240883c800e80e8bffff8b7c24088b378b1ef6c3017503ff553889da83c20870f689168b4f08894c2410b8030000008b542404eb05e90900000083c41052e9c983ffff5351bb190000008b44240c83c800e8de6dffffb8987e79410bc0e8fe7fffff8b5c240c83c800e8aa8affff8b442404bf1100000089c623f7f7c6010000007503ff5538505289c2d1fa8d47fff7ea8d70015a5870ebf7c6010000007503ff553889f381c38001000070f38b54241089d923caf6c1017503ff55388d4bff03ca70f68b5c240c89c883c800e8468affffbb190000008b44240c0bc0e8526dffffb85cd579410bc0e8727fffff8b5c240c83c800e81e8affff8b442410a8017503ff553889c781c7d001000070f38b5c240c89f8e8fe89ffff8b5c240c8b0424e83294ffff8b7424108b5c240cc744241403000000895c241089f3b8050000008b54240883c41052e97ec5ffff8b54240cf7c201000000740489d1eb0db894207541ff552cb9010000005351bb190000008b44240c83c800e8b66cffffb8987e79410bc0e8d67effff8b5c240c83c800e88289ffff8b442404bf1100000089c623f7f7c6010000007503ff5538505289c2d1fa8d47fff7ea8d70015a5870ebf7c6010000007503ff553889f381c38001000070f38b54241089d923caf6c1017503ff55388d4bff03ca70f68b5c240c89c883c800e81e89ffffbb190000008b44240c0bc0e82a6cffffb85cd579410bc0e84a7effff8b5c240c83c800e8f688ffff8b442410a8017503ff553889c781c7f001000070f38b5c240c89f8e8d688ffff8b3424f7c6010000007503ff553883fe017d02eb12f7c6010000007503ff553883fe3f7f02eb07bb3f000000eb0289f389da8b5c240c89d083c800e8d692ffff8b4c24108b44240cc7442414030000008944241089cbb8050000008b7c240883c41057e922c4ffff8b54240cf7c201000000740489d1eb0db894207541ff552cb90100000053518b5c240c8b442404e88e0e00008b3c2483ff057502eb0a89c6b8ecd57941ff552c50bb190000008b44241090e83a6bffffb8f88079410bc0e85a7dffff8b5c241083c800e80688ffffff742414ff7424148b5c2410b8ffffffff0bc0e8369bffffbb190000008b4424100bc0e8fa6affffb8748879410bc0e81a7dffff8b5c241083c800e8c687ffff8b742414bb1100000089f223d3f6c2017503ff55385089f2d1fa8d43fff7ea8d50015870edf6c2017503ff553889d181c18001000070f38b44240889cf23f8f7c7010000007503ff55388d79ff03f870f68b5c241089f8e86a87ffff8b742410ff36bb1900000089f00bc0e8726affff8b1c248b13f6c2017503ff553889d183c10470f68b44240489c723f9f7c7010000007503ff553889c72bf98d7f0170f489fbb884887941e8627cffff538b5c24180bc0e80e87ffff8b54241889d38b04248b4c241483c42451e93891ffff8b54240cf7c201000000740489d1eb0fb8942075410bc0ff552cb901000000f6c1017503ff553883f9017f0fb81cd679410bc0ff552cb8010000005351b801000000be030000008b1c245323def6c3015b7503ff55383bf37d33f7c6010000007503ff55388d56ff03d670f6a8017503ff553889c183c10270f689d689c83b650c7303ff5524ebbfb801000000530bdef6c3015b7503ff55383bf37502eb10b81cd6794183c800ff552cb80100000083f8017570bb190000008b44240ce85269ffffb8987e79410bc0e8727bffff8b5c240c83c800e81e86ffff8b542404b91100000089d023c1a8017503ff553852d1fa8d41fff7ea8d40015a70efa8017503ff553889c781c78001000070f38b74241089fb23def6c3017503ff55388d5fff03deeb05e91900000070ef8b54240c89d989d389c88b7c240883c41857e9b685ffff83f803755bbb190000008b44240c90e8be68ffffb8f88079410bc0e8de7affff8b5c240c83c800e88a85ffff8b5424108b4c240c8b44240489442414c7442410010000008954240c8b7c2408894c240889c3b8ffffffff83c40857e9deb6ffff83f805755ebb190000008b44240c90e85e68ffffb8f88079410bc0e87e7affff8b5c240c83c800e82a85ffff8b5424108b4c240c8b44240489442414c7442410030000008954240c8b7c2408894c2408bb11000000b8fbffffff83c40857e97bb6ffff83f807755fbb190000008b44240c0bc0e8fa67ffffb8f88079410bc0e81a7affff8b5c240c83c800e8c684ffff8b5424108b4c240c8b44240489442414c7442410fdffffff8954240c8b7c2408894c2408bb11000000b8f3ffffff83c40857e917b6ffff50bb190000008b4424100bc0e89a67ffffb8987e79410bc0e8ba79ffff8b5c241083c800e86684ffff8b542408b91100000089d023c1a8017503ff553852d1fa8d41fff7ea8d40015a70efa8017503ff553889c781c78001000070f38b74241489fb23def6c3017503ff55388d5fff03de70f689da8b5c241089d090e80e84ffffbb190000008b4424100bc0e81a67ffffb85cd579410bc0e83a79ffff8b5c241083c800e8e683ffff8b4c2414f6c1017503ff553889c881c0c001000070f38b5c241090e8c683ffff8b5c24108b0424e8fa8dffffbf030000008b74240489fb23def6c3017503ff553889fb2bde8d5b0170f453bb190000008b44241483c800e8a666ffffb8f88079410bc0e8c678ffff8b5c241483c800e87283ffff8b5424188b4c24148954241c894c241889d38b04248b7c241083c41857e99896ffff8b54240cf7c201000000740489d1eb0fb8942075410bc0ff552cb901000000f6c1017503ff553883f9017f0fb81cd679410bc0ff552cb8010000005351b801000000be030000008b1c245323def6c3015b7503ff55383bf37d33f7c6010000007503ff55388d56ff03d670f6a8017503ff553889c183c10270f689d689c83b650c7303ff5524ebbfb801000000530bdef6c3015b7503ff55383bf37502eb10b81cd6794183c800ff552cb80100000083f8017570bb190000008b44240ce8aa65ffffb8987e79410bc0e8ca77ffff8b5c240c83c800e87682ffff8b542404b91100000089d023c1a8017503ff553852d1fa8d41fff7ea8d40015a70efa8017503ff553889c781c78001000070f38b74241089fb23def6c3017503ff55388d5fff03deeb05e91900000070ef8b54240c89d989d389c88b7c240883c41857e90e82ffff50bb190000008b44241090e81a65ffffb8987e79410bc0e83a77ffff8b5c241083c800e8e681ffff8b542408b91100000089d023c1a8017503ff553852d1fa8d41fff7ea8d40015a70efa8017503ff553889c781c78001000070f38b74241489fb23def6c3017503ff55388d5fff03de70f689da8b5c241089d090e88e81ffffbb190000008b4424100bc0e89a64ffffb85cd579410bc0e8ba76ffff8b5c241083c800e86681ffff8b4c2414f6c1017503ff553889c881c0d001000070f38b5c241090e84681ffff8b5c24108b0424e87a8bffff8b7c24148b742410c7442418030000008974241489fbb8050000008b54240c83c41452e9c6bcffff8b54240cf7c201000000740489d1eb0db894207541ff552cb901000000f6c1017503ff553883f9017f0fb81cd679410bc0ff552cb8010000005351b801000000be030000008b1c245323def6c3015b7503ff55383bf37d33f7c6010000007503ff55388d56ff03d670f6a8017503ff553889c183c10270f689d689c83b650c7303ff5524ebbfb801000000530bdef6c3015b7503ff55383bf37502eb10b81cd6794183c800ff552cb801000000f6c3017503ff553889da83ea0270f6f6c2017503ff55388d4aff03ca70f6f6c1017503ff553889c883c00270f650bb190000008b44241083c800e84263ffffb8987e79410bc0e86275ffff8b5c241083c800e80e80ffff8b7c2408be1100000089fb23def6c3017503ff5538505289fad1fa8d46fff7ea8d58015a5870ebf6c3017503ff553889da81c28001000070f38b4c241489d023c1a8017503ff55388d42ff03c170f68b5c2410e8b67fffff8b7c24148b7424108b1c24895c24188974241489fbb8030000008b54240c83c41452e943bbffff8b54240cf7c201000000740489d1eb0eb89420754190ff552cb901000000b80900000089ce23f0f7c6010000007503ff5538505289cad1fa8d40fff7ea8d70015a5870eb8b4c2404897c240c894c240889f08b342483c40856e97191ffff8b54240cf7c201000000740489d1eb10b89420754183c800ff552cb9010000005351bb190000008b44240c83c800e81a62ffffb808cd74410bc0e83a74ffff8b5c240c83c800e8e67effff8b5c240cb86d0100000bc0e8d67effffff742410ff7424108b5c240c8b44240883c800e80692ffffbb190000008b44240c0bc0e8ca61ffffb8f88079410bc0e8ea73ffff8b5c240c83c800e8967effff8b4424108b7c240c89442414c7442410010000008944240c8b742408897c240889c3b80300000083c40856e9eeafffff57ff742408b8f9ffffff90e89690ffff68ffffff01ff7424088b5c2410b80300000090e8f2b9ffffbb190000008b4424040bc0e84a61ffffb8f88079410bc0e86a73ffff8b5c240483c800e8167effff8b5c24088b542404895c240cc744240801000000895c24048b0c24891424b80300000051e975afffff53bb190000008b442408e8fa60ffffb808cd74410bc0e81a73ffff8b5c240883c800e8c67dffff8b5c2408b86d0100000bc0e8b67dffffff74240cff74240c8b5c2408b8ffffffff0bc0e8e690ffffbb190000008b4424080bc0e8aa60ffffb8f88079410bc0e8ca72ffff8b5c240883c800e8767dffff8b5c240c8b542408895c2410c744240c01000000895c24088b4c240489542404b80300000083c40451e9d0aeffff53bb190000008b44240883c800e85260ffffb878d378410bc0e87272ffff8b5c240883c800e81e7dffff8b1c24f6c3017503ff553889da81c28000000070f38b5c240889d0e8fe7cffff8b5c2408b8ffffffff0bc0e82e87ffff8b5c2408b8210000000bc0e8de7cffffff74240cff74240c8b5c2408b8010000000bc0e8068fffff8b5c2408b848d679410bc0e83ab7ffff8b4d008d49f43b4d087303ff5520894d00c741fc02000000c7410401000000890151bb190000008b44240ce8a25fffffb88c8779410bc0e8c271ffff8b5c240c83c800e86e7cffff8b442410a8017503ff553889c781c7b001000070f38b5c240c89f8e84e7cffff8b5c240c8b0424e89683ffffbb190000008b44240c0bc0e84e5fffffb8f88079410bc0e86e71ffff8b5c240c83c800e81a7cffff8b7424108b5c240c89742414c7442410010000008974240c8b542408895c240889f3b80300000083c40852e972adffff536850d67941ff74240cbb010000008b442408e8160500008b5d008d5bf43b5d087303ff5520895d00c743fc020000008b54240c895304c703e5ffffff5053bb190000008b44241083c800e8b65effff8b0424e8da70ffff8b5c241083c800e8867bffff8b4c24108b018b38f7c7010000007503ff553889fe83c60870f68930ff710889fbb80700000090e84e74ffff8b44241083c800e8a2060000508b5c24148b4424080bc0e89282ffffff742418ff7424188b5c2414b8010000000bc0e8668dffffbb190000008b4424140bc0e8325effffb8f88079410bc0e85270ffff8b5c241483c800e8fe7affffff7424186a01ff742420ff7424208b5c2428b803000000e86aacffff8b5c24148b04248b54241083c42052e92282ffff0bc0|@3236,63|36,0,@3099 65,0,$3215+90 299,0,@3101 307,0,0 336,0,@369 347,0,0 409,0,-14 416,0,12 426,1,@3004 442,1,@3038 454,1,@3052 508,1,@3042 541,0,-14 547,0,12 558,1,@3004 566,1,@3038 578,1,@3052 615,0,1 628,0,0 643,1,@3216 672,0,@369 683,0,0 749,0,12 758,1,@3004 763,0,@3218 778,1,@3038 790,1,@3052 838,1,@3042 844,0,12 854,1,@3004 859,0,@3219 866,1,@3038 878,1,@3052 900,1,@3073 905,0,12 914,1,@3004 919,0,@3218 926,1,@3038 938,1,@3052 975,0,1 988,0,0 1002,1,@3216 1023,0,@369 1031,0,0 1046,1,@3220 1052,0,12 1062,1,@3004 1067,0,@3104 1074,1,@3038 1086,1,@3052 1095,0,8 1186,1,@3052 1218,0,-1 1226,1,@3125 1237,0,12 1246,1,@3004 1301,0,@3119 1306,1,@3038 1318,1,@3052 1340,1,@3073 1361,0,@369 1371,0,0 1386,1,@3220 1392,0,12 1402,1,@3004 1407,0,@3104 1414,1,@3038 1426,1,@3052 1435,0,8 1526,1,@3052 1558,0,3 1566,1,@3125 1577,0,12 1586,1,@3004 1641,0,@3119 1646,1,@3038 1658,1,@3052 1680,1,@3073 1701,0,@369 1711,0,0 1733,0,12 1742,1,@3004 1747,0,@3109 1754,1,@3038 1766,1,@3052 1802,1,@3095 1823,0,@369 1831,0,0 1851,0,0 1879,0,12 1890,1,@3004 1895,0,@3109 1902,1,@3038 1914,1,@3052 1950,1,@3095 1971,0,@369 1979,0,0 2015,0,12 2026,1,@3004 2031,0,@3104 2038,1,@3038 2050,1,@3052 2059,0,8 2142,1,@3052 2166,0,2 2179,1,@3125 2200,0,@369 2211,0,0 2247,0,12 2258,1,@3004 2263,0,@3104 2270,1,@3038 2282,1,@3052 2291,0,8 2374,1,@3052 2398,0,1 2411,1,@3125 2432,0,@369 2443,0,0 2450,0,12 2462,1,@3004 2467,0,@3104 2474,1,@3038 2486,1,@3052 2495,0,8 2586,1,@3052 2626,0,-4 2639,1,@3125 2660,0,@369 2671,0,0 2734,0,-14 2740,0,12 2750,1,@3004 2758,1,@3038 2770,1,@3052 2807,0,1 2827,1,@3042 2834,0,12 2846,1,@3004 2851,0,@3104 2858,1,@3038 2870,1,@3052 2879,0,8 2970,1,@3052 2975,0,12 2986,1,@3004 2991,0,@3222 2998,1,@3038 3010,1,@3052 3042,1,@3052 3054,1,@3073 3062,0,@3223 3071,0,1 3098,0,12 3110,1,@3004 3115,0,@3109 3122,1,@3038 3134,1,@3052 3168,1,@3095 3189,0,@369 3199,0,0 3262,0,-14 3268,0,12 3278,1,@3004 3286,1,@3038 3298,1,@3052 3335,0,1 3355,1,@3042 3362,0,12 3374,1,@3004 3379,0,@3104 3386,1,@3038 3398,1,@3052 3407,0,8 3498,1,@3052 3503,0,12 3514,1,@3004 3519,0,@3222 3526,1,@3038 3538,1,@3052 3570,1,@3052 3582,1,@3073 3598,0,1 3609,0,2 3622,1,@3125 3643,0,@369 3651,0,0 3658,0,12 3670,1,@3004 3675,0,@3104 3682,1,@3038 3694,1,@3052 3703,0,8 3794,1,@3052 3799,0,12 3810,1,@3004 3815,0,@3222 3822,1,@3038 3834,1,@3052 3866,1,@3052 3910,0,31 3930,1,@3073 3946,0,1 3957,0,2 3970,1,@3125 3991,0,@369 3999,0,0 4014,1,@3220 4031,0,@3226 4040,0,12 4050,1,@3004 4055,0,@3109 4062,1,@3038 4074,1,@3052 4091,0,-1 4098,1,@3095 4103,0,12 4114,1,@3004 4119,0,@3118 4126,1,@3038 4138,1,@3052 4147,0,8 4230,1,@3052 4241,0,12 4250,1,@3004 4305,0,@3119 4310,1,@3038 4322,1,@3052 4344,1,@3073 4365,0,@369 4375,0,0 4393,0,@3228 4403,0,0 4410,0,0 4415,0,1 4485,0,0 4508,0,@3228 4519,0,0 4529,0,12 4538,1,@3004 4543,0,@3104 4550,1,@3038 4562,1,@3052 4571,0,8 4666,1,@3052 4676,0,12 4686,1,@3004 4691,0,@3109 4698,1,@3038 4710,1,@3052 4734,0,0 4753,0,-1 4762,1,@3105 4772,0,12 4782,1,@3004 4787,0,@3109 4794,1,@3038 4806,1,@3052 4830,0,1 4847,0,8 4852,0,-3 4861,1,@3105 4871,0,12 4882,1,@3004 4887,0,@3109 4894,1,@3038 4906,1,@3052 4930,0,-2 4947,0,8 4952,0,-7 4961,1,@3105 4967,0,12 4978,1,@3004 4983,0,@3104 4990,1,@3038 5002,1,@3052 5011,0,8 5090,1,@3052 5095,0,12 5106,1,@3004 5111,0,@3222 5118,1,@3038 5130,1,@3052 5162,1,@3052 5174,1,@3073 5179,0,1 5210,0,12 5222,1,@3004 5227,0,@3109 5234,1,@3038 5246,1,@3052 5280,1,@3095 5301,0,@369 5311,0,0 5329,0,@3228 5339,0,0 5346,0,0 5351,0,1 5421,0,0 5444,0,@3228 5455,0,0 5465,0,12 5474,1,@3004 5479,0,@3104 5486,1,@3038 5498,1,@3052 5507,0,8 5602,1,@3052 5608,0,12 5618,1,@3004 5623,0,@3104 5630,1,@3038 5642,1,@3052 5651,0,8 5730,1,@3052 5735,0,12 5746,1,@3004 5751,0,@3222 5758,1,@3038 5770,1,@3052 5802,1,@3052 5814,1,@3073 5830,0,1 5841,0,2 5854,1,@3125 5875,0,@369 5883,0,0 5901,0,@3228 5911,0,0 5918,0,0 5923,0,1 5993,0,0 6016,0,@3228 6027,0,0 6078,0,12 6090,1,@3004 6095,0,@3104 6102,1,@3038 6114,1,@3052 6123,0,8 6202,1,@3052 6228,0,1 6241,1,@3125 6262,0,@369 6271,0,0 6276,0,4 6335,1,@3094 6356,0,@369 6367,0,0 6374,0,12 6386,1,@3004 6391,0,@207 6398,1,@3038 6410,1,@3052 6419,0,182 6426,1,@3052 6450,1,@3095 6455,0,12 6466,1,@3004 6471,0,@3109 6478,1,@3038 6490,1,@3052 6510,0,0 6529,0,1 6538,1,@3105 6548,0,-4 6554,1,@3094 6559,0,16777215 6572,0,1 6578,1,@3125 6583,0,12 6594,1,@3004 6599,0,@3109 6606,1,@3038 6618,1,@3052 6638,0,0 6653,0,1 6659,1,@3105 6665,0,12 6674,1,@3004 6679,0,@207 6686,1,@3038 6698,1,@3052 6707,0,182 6714,1,@3052 6731,0,-1 6738,1,@3095 6743,0,12 6754,1,@3004 6759,0,@3109 6766,1,@3038 6778,1,@3052 6798,0,0 6815,0,1 6824,1,@3105 6830,0,12 6842,1,@3004 6847,0,@2827 6854,1,@3038 6866,1,@3052 6898,1,@3052 6907,0,-1 6914,1,@3073 6923,0,16 6930,1,@3052 6947,0,0 6954,1,@3094 6963,0,@3230 6970,1,@3115 7001,0,0 7009,0,12 7018,1,@3004 7023,0,@3113 7030,1,@3038 7042,1,@3052 7074,1,@3052 7086,1,@3068 7091,0,12 7102,1,@3004 7107,0,@3109 7114,1,@3038 7126,1,@3052 7146,0,0 7165,0,1 7174,1,@3105 7180,0,@3231 7189,0,0 7198,1,@3232 7235,0,-14 7242,0,12 7254,1,@3004 7262,1,@3038 7274,1,@3052 7312,0,3 7318,1,@3042 7330,1,@3234 7346,1,@3068 7363,0,0 7370,1,@3094 7375,0,12 7386,1,@3004 7391,0,@3109 7398,1,@3038 7410,1,@3052 7433,0,1 7438,1,@3105 7458,1,@3068 3216:C2,168|3b650c7303ff55248b7c24048b77388b16f6c2017503ff553889d183c10270f6890e8b178b0a8b55008d52f03b55087303ff5520895500c742fc03000000895a08894a0489028b4f0c8b018b4d008d49f43b4d087303ff5520894d00c741fc0200000089410489118b470c890883fb017407bbf7ffffffeb05bb030000008b5424048b0a8b01a8017503ff553889c783c70870f689398b72088974240489df89c389f8e9fc72ffff|@3217,63|115,0,-5 122,0,1 164,1,@3042 3217:S31|49333836434f4445434f4e5328292e616464436f6e7374546f566563283329 3218:O1|-17 3219:O1|17 3220:C2,440|3b650c7303ff552483f801753b53ff33bb190000008b442404e8b25cffffb8848779410bc0e8d26effff8b5c240483c800e87e79ffff8b5c2404b8030000000bc0e86e79ffffeb6ca8017503ff553883f8097d6553ff3350bb190000008b442408e86a5cffffb878d378410bc0e88a6effff8b5c240883c800e83679ffff8b3c24f7c7010000007503ff553889fe81c68001000070f38b5c240889f090e81279ffff8b5c2408b8030000000bc0e80279ffffeb66e96400000053ff3350bb190000008b44240883c800e8025cffffb88c8779410bc0e8226effff8b5c240883c800e8ce78ffff8b3c24f7c7010000007503ff553889fe81c68001000070f38b5c240889f090e8aa78ffff8b5c2408b8030000000bc0e8a67cffff83c4048b5c2404b89487794183c800e80ab3ffff8b1c248b135052bb190000008b44240c83c800e88a5bffffb8d41176410bc0e8aa6dffff8b5c240c83c800e85678ffff8b5c240cb8ab0000000bc0e84678ffff8b5c240cb8710000000bc0e83678ffff8b4d008d49f43b4d087303ff5520894d00c741fc02000000c74104010000008b44240489018b5c240c89c8e85a7fffff8b042483c410c383c800|@3221,63|17,0,12 26,1,@3004 31,0,@3112 38,1,@3038 50,1,@3052 59,0,1 66,1,@3052 89,0,12 98,1,@3004 103,0,@2827 110,1,@3038 122,1,@3052 158,1,@3052 167,0,1 174,1,@3052 190,0,12 202,1,@3004 207,0,@3113 214,1,@3038 226,1,@3052 262,1,@3052 271,0,1 278,1,@3060 290,0,@3114 298,1,@3115 310,0,12 322,1,@3004 327,0,@1251 334,1,@3038 346,1,@3052 355,0,85 362,1,@3052 371,0,56 378,1,@3052 409,0,0 426,1,@3068 3221:S26|49333836434f4445434f4e5328292e7461675465737431283229 3222:O1|3 3223:O1|@3224 3224:C2,60|3b650c7303ff552483f8017506b803000000c3a8017503ff553889c783ef0270f689f80bc0e8d6ffffffa8017503ff55388d78ff03f870f689f8c390|@3225,33|14,0,1 3225:S32|49333836434f4445434f4e5328292e67656e5249283529706f77657232283129 3226:O3|@7320,@224,@3227 3227:S24|4d756c7469706c79206e6f7420696d706c656d656e746564 3228:O3|@7320,@224,@3229 3229:S18|4e6f74206120706f776572206f662074776f 3230:O1|6 3231:O2|-1,@3230 3232:C2,456|3b650c7303ff5524f7c301000000740489dfeb1189c7b894207541ff552c89fbbf0100000050508b5c24108b1383faff757050ff7304bb190000008b4424140bc0e89259ffffb88c8779410bc0e8b26bffff8b5c241483c800e85e76ffff8b4c2404f6c1017503ff553889c881c08001000070f38b5c241490e83e76ffff8b5c2414b8030000000bc0e83a7affff8b5c24148b0424e8a6b0ffff8d7c24088907eb05e90d0000008d742408c7460401000000eb5983fa037559f7c7010000007503ff55388d4fff03cf70f6f6c1017503ff553889cf83c70270f6ff730457ff74241489c3b8fdffffffe882b1ffff8b5c24108b0424e846b0ffff8d74240489068d5c2404c7430401000000eb6ee9890000008b4b048b3183fe0d7502eb1b83feeb7502eb0f5057518b5c241890e8d6fbffffeb08505751eb035057518b5c2404f6c3017503ff55388d53ff03d370f6f6c2017503ff553889d183c10270f651ff74241c8b5c2410b8fdffffff90e8feb0ffff8b5c24188b0424eb05e91a00000090e8baafffff8d7c240c89078d74240cc746040100000083c408508b45008d40f43b45087303ff5520894500c740fc020000008b5c240889188b54240c89500483c410c208000bc0|@3233,63|23,0,@369 33,0,0 55,0,12 66,1,@3004 71,0,@3113 78,1,@3038 90,1,@3052 122,1,@3052 131,0,1 138,1,@3060 150,1,@3115 174,0,0 229,0,-2 234,1,@3125 246,1,@3115 263,0,0 302,1,@3220 360,0,-2 366,1,@3125 386,1,@3115 403,0,0 3233:S36|49333836434f4445434f4e5328292e636f6d70617265416e644272616e63685249283429 3234:C2,144|3b650c7303ff55248b78308b3783fe017507bb01000000eb1150ff7004ff704090e8aa7cffff89c3eb0750ff7004ff70408b14248b0ac702010000008b4424048b3883ff01740689c883c40cc3518b5c240cb8104d79410bc0e8d2aeffff8b742408c706030000008b5d008d5bf43b5d087303ff5520895d00c743fc020000008b1424895304890389d883c410c30bc0|@3235,63|19,0,0 34,1,@3069 56,0,0 83,0,@3051 90,1,@3115 100,0,1 3235:S37|49333836434f4445434f4e5328292e756e636f6e646974696f6e616c4272616e6368283129 3236:S23|49333836434f4445434f4e5328292e67656e5249283529 3237:C2,268|3b650c7303ff55248b78208b37f7c601000000754d8b168b0a8b0183f801750fb890da79410bc0ff552cb8010000008b41048b7d008d7ff43b7d087303ff5520897d00c747fc02000000894704c707030000008b4c2404894c240489f8e99ef8ffff8b502c8b0a5053525183f9017507b801000000eb298b7c24148b318b5f108b56103bda7507b803000000eb128b49043b650c7303ff5524ebd0b80100000083f8017402eb2a8b4d008d49f43b4d087303ff5520894d00c741fc020000008b04248941048b7c241489398b742404890e8b5d008d5bf43b5d087303ff5520895d00c743fc020000008b54240c895304c703010000008b4c2414894c241489d88b5c240883c410e9f4f7ffff|@3240,63|33,0,@3238 43,0,0 79,0,1 94,1,@3216 113,0,0 136,0,1 156,0,0 242,0,0 264,1,@3216 3238:O3|@7320,@224,@3239 3239:S28|63736567416464723a206e6f74206120636f6465207365676d656e74 3240:S27|49333836434f4445434f4e5328292e636f6465436f6e7374283329 3241:C2,180|3b650c7303ff552483fb01755450bb190000008b4424080bc0e82e55ffffb8987e79410bc0e84e67ffff8b5c240883c800e8fa71ffff8b3c24f7c7010000007503ff553889fe81c6c001000070f38b5c240889f08b54240483c40c52e9cf71ffff5053bb190000008b44240c90e8da54ffffb8f88079410bc0e8fa66ffff8b5c240c83c800e8a671ffff8b7c240c8b7424048974240c8b5c2408897c240889dabb090000008b042483c40852e9c784ffff83c800|@3242,63|15,0,12 26,1,@3004 31,0,@3104 38,1,@3038 50,1,@3052 93,1,@3052 100,0,12 110,1,@3004 115,0,@3109 122,1,@3038 134,1,@3052 161,0,4 173,1,@3095 3242:S32|49333836434f4445434f4e5328292e67656e537461636b4f6666736574283329 3243:O3|@7320,@224,@3244 3244:S48|6c6f616450737461636b456e7472793a20636f6e7461696e657220656e747279206973206e6f74206f6e20737461636b 3245:S15|6c6f616450737461636b456e747279 3246:S30|5452414e535f54414228292e6c6f616450737461636b456e747279283429 3247:S41|5452414e535f54414228292e6c6f6164456e7472792835297573654e65775265676973746572283229 3248:S24|5452414e535f54414228292e6c6f6164456e747279283529 3249:C2,424|3b650c7303ff5524525053ff7028ff7504bf16de7941576a01896504bb010000008b401090e846b5ffff89c6bb1100000089f00bc0e8aa2dffff83f801740489f3eb648b5d008d5bf43b5d087303ff5520895d00c743fc02000000ba80de794189138b4c2414894b045351bb010000008b44240490e80244ffff8b442418bb010000008b401083c800e8e2b4ffff89c6bb1100000089f00bc0e8462dffff83f801740989f3eb64e9760000008b5c241c6a01ff742418ff7424208b5304bb34df7941b80100000090ff12ff742418bb010000008b4424040bc0e89e43ffff8b4c2418bb010000008b411083c800e87eb4ffff89c6bb1100000089f00bc0e8e22cffff83f801740989f3eb14e90f000000b884df79410bc0ff552cbb0100000083c4048b54240c83fa01741d538b44241490e84e4affffff742418bbb0df79410bc0e8661fffffeb01538b0424ff74240c8f450483c420c383c8008b0883f903751f89c7b870ae744183c800ff552cb801000000eb0b89c7b80100000083c410c3508b442408e8fa49ffffff74240cbbb0df79410bc0e8121fffff8b04240bc0ff552cb80100000090|@3258,63|18,0,$3249+346 29,0,0 38,1,@3138 45,0,8 54,1,@2932 92,0,@3250 108,0,0 118,1,@2985 127,0,0 138,1,@3138 145,0,8 154,1,@2932 190,0,@3252 195,0,0 207,0,0 218,1,@2985 227,0,0 238,1,@3138 245,0,8 254,1,@2932 273,0,@3255 283,0,0 306,1,@2996 315,0,@3257 322,1,@2893 356,0,@54 367,0,0 376,0,0 390,1,@2996 399,0,@3257 406,1,@2893 419,0,0 3250:C2,92|3b650c7303ff55248b4204ff7010bb010000008b042483c800e88eb3ffff89c6bb1100000089f00bc0e8f22bffff83f8017413568b5c240489f083c800e8a23dffff89c3eb06bb0100000056bb110000008b042483c408e93039ffff|@3251,63|15,0,0 26,1,@3138 33,0,8 42,1,@2932 62,1,@2969 71,0,0 77,0,8 88,1,@2958 3251:S52|5452414e535f54414228292e676574416e795265676973746572283229722d756e74696c536f6d657468696e6746726565283129 3252:O1|@3253 3253:C2,8|b803000000c30bc0|@3254,1|1,0,1 3254:S25|5452414e535f54414228292e70757368416c6c283229283129 3255:O3|@7320,@224,@3256 3256:S17|4e6f206672656520726567697374657273 3257:S14|676574416e795265676973746572 3258:S29|5452414e535f54414228292e676574416e795265676973746572283229 3259:C2,24|8b7814c707030000008b30c70603000000b801000000c390|@3260,49|5,0,1 13,0,1 18,0,0 3260:S22|5452414e535f54414228292e65786974696e67283129 3261:S27|475f434f444528292e636f646567656e2831302965786974283129 3262:C2,184|3b650c7303ff55248b7c2404f7c701000000751f525053ff37ff34248b5a088b4204ba001f79410bc0e8863effff8b3424eb165250538b5a088b4204ba14aa7941e80efcffff89c6508b5c240c5656ff73088b5c24108b44241483c800e8720000008b5424108b4d008d49f43b4d087303ff5520894d00c741fc020000008b0424894104c70105000000ff720489cbb898a4794190e80e19ffff8b7c241089c68b1c248b470483c800e80e03000089f083c414c204000bc0|@3270,63|35,0,@2977 42,1,@2979 61,0,@3199 66,1,@3249 94,1,@3263 134,0,2 144,0,@3183 150,1,@2888 170,1,@3268 3263:C2,648|3b650c7303ff5524a8017503ff553889c783c70270f6be0900000089fa23d6f6c2017503ff55385089fad1fa8d46fff7ea8d50015870edbf0100000289de23f7f7c6010000007503ff5538505289dad1fa8d47fff7ea8d70015a5870eb89c323def6c3017503ff55388d58ff03de70f65253ff742410ff742410bb0b000000b80100000090e8927dffff8b542404b90100000089d023c1a8017503ff553889c82bc28d400170f450bb190000008b442410e8424effffb8f88079410bc0e86260ffff8b5c241083c800e80e6bffffff742414ff7424148b5c241c8b44240883c800e83e7effffbb190000008b4424100bc0e8024effffb8e0e379410bc0e82260ffff8b5c241083c800e8ce6affff8b7c2414be1100000089fb23def6c3017503ff5538505289fad1fa8d46fff7ea8d58015a5870ebf6c3017503ff553889da81c28000000070f3f6c2017503ff553889d183c10a70f68b5c241089c890e87a6affff8b5c2410b8110000000bc0e8aa74ffff8b5c2410b8f0e379410bc0e8dea4ffff8b7d008d7ff43b7d087303ff5520897d00c747fc02000000c7470401000000890757bb190000008b442414e8464dffffb8d41176410bc0e8665fffff8b5c241483c800e8126affff8b5c2414b8ab0000000bc0e8026affff8b5c2414b8410000000bc0e83274ffff8b5c24148b0424e83a71ffff6a0b6aff6a11ff742420bb010000008b442428e8fa96ffffbb190000008b4424140bc0e8da4cffffb8f8e379410bc0e8fa5effff8b5c241483c800e8a669ffff8b742418f7c6010000007503ff553889f381c38000000070f389da8b5c241489d00bc0e87e69ffff8b5c2414b8f9ffffff0bc0e8ae73ffff8b4c241489cb8b4424088b7c241083c41c57e9636dffff83c800|@3267,63|23,0,4 56,0,16777216 123,0,5 128,0,0 134,1,@3094 143,0,0 169,0,12 178,1,@3004 183,0,@3109 190,1,@3038 202,1,@3052 226,1,@3095 231,0,12 242,1,@3004 247,0,@3264 254,1,@3038 266,1,@3052 275,0,8 350,1,@3052 359,0,8 366,1,@3073 375,0,@3265 382,1,@3115 413,0,0 421,0,12 430,1,@3004 435,0,@1251 442,1,@3038 454,1,@3052 463,0,85 470,1,@3052 479,0,32 486,1,@3073 498,1,@3068 513,0,0 522,1,@3103 527,0,12 538,1,@3004 543,0,@3266 550,1,@3038 562,1,@3052 602,1,@3052 611,0,-4 618,1,@3073 641,1,@3060 3264:O3|0,-2,3 3265:O1|10 3266:O1|13 3267:S28|49333836434f4445434f4e5328292e616c6c6f6353746f7265283429 3268:C2,8|b801000000c30bc0|@3269,9|1,0,0 3269:S28|5452414e535f54414228292e636f6e7461696e734c6f63616c283229 3270:S33|475f434f444528292e636f646567656e2831302963616c6c676574766563283329 3271:C2,448|3b650c7303ff552483fb017471a8017503ff553883f8017d6a8b5a0c89d923c8f6c1017503ff55388d4bff03c870f6f6c1017503ff553883f9057d5ff6c1017503ff553883f9017d02eb178b42088b385123cff6c101597503ff55383bcf7d02eb0db824ae7441ff552cb801000000f6c1017503ff553889cf83c702eb0ae9ab000000e96d00000070ea8b4c78fe89c88b7c240483ff017407eb19e91e000000506a0389c38b4204ba40197941e80e34ffffeb01508b042483c404c20800bff9ffffff89c623f7f7c6010000007503ff5538505289c2d1fa8d47fff7ea8d70015a5870eb89f38b42048b142483c40c52e9e70000005289c38b42040bc0e8a20200008b7c240883ff017402eb178b3424506a0389c38b4604ba40197941e89e33ffffeb01508b042483c408c208008b7d008d7ff03b7d087303ff5520897d00c747fc03000000be8ce8794189378b5a04895f088b4a10894f0489c68b45008d40ec3b45087303ff5520894500c740fc040000008b4a1889480c8958088978048930528b521c83c800ff128b7c240883ff0174218b34248b5e1483fb017516506aff8b5e108b4604ba4019794190e80e33ffffeb01508b042483c408c208000bc0|@3281,63|99,0,@51 107,0,0 169,0,@2963 174,1,@2965 191,0,-4 241,1,@3272 254,1,@3277 281,0,@2963 286,1,@2965 327,0,@3279 424,0,@2963 430,1,@2965 3272:C2,32|3b650c7303ff55245350b8010000008d5424080bc0e82200000083c408c30bc0|@3276,63|11,0,0 22,1,@3273 3273:C2,272|3b650c7303ff55248b7af88b771c8b1e5023c3a801587503ff55383bc37c378b45008d40f43b45087303ff5520894500c740fc020000008b5afc895804c700fbffffff8b0c24893c2489c3b8dce7794151e90a13ffff525089c38b470ce87242fbfff7c001000000755e8b108b0a83f9fb755a8b7c24048b72048b5ffc530bdef6c3015b7503ff55383bf3751c6a038b5c24048b47f8ba401979410bc0e80632ffff8b042483c408c38b0424a8017503ff553889c183c10270f689c88b54240483c408e938ffffffe9230000008b3c24f7c7010000007503ff553889fe83c60270f689f08b54240483c408e910ffffff8b1424f6c2017503ff553889d183c10270f689c88b54240483c408e9f0feffff|@3275,63|63,0,-3 76,0,@3274 82,1,@2888 94,1,@435 151,0,@2963 158,1,@2965 3274:S9|70757368537461636b 3275:S33|5452414e535f54414228292e70757368537461636b283229736561726368283129 3276:S24|5452414e535f54414228292e70757368537461636b283229 3277:C2,16|3b650c7303ff55248b4020e93841fbff|@3278,63|12,1,@435 3278:S27|5452414e535f54414228292e70737461636b466f72446563283229 3279:C2,40|3b650c7303ff5524526a038b5a048b4208ba4019794183c800e8ae30ffff8b3c248b470483c404c3|@3280,63|18,0,@2963 26,1,@2965 3280:S37|475f434f444528292e636f646567656e283130296c6f63616464722834296465632d283129 3281:S30|475f434f444528292e636f646567656e283130296c6f6361646472283429 3282:C2,64|89c78b45008d40e03b45087303ff5520894500c740fc07000000be84e9794189308b72108970188b4a0c8948148958108b5a0889580c8b5a04895808897804c3|@3289,63|27,0,@3283 3283:C2,212|3b650c7303ff5524505089d6506a01bb81000000b80b00000083c800ff15a0920408c700090000008b5d008d5bf43b5d087303ff5520895d00c743fc02000000894304c703ffffffff8b55008d52f83b55087303ff5520895500c742fc01000040891a8d4c240489118d442404c74004010000008b7d008d7ff43b7d087303ff5520897d00c747fc020000008b5c2404891f8b54240889570456578b4e0483f9017509b80100000083c414c3ff71048b018d542418e8360000008b0c2483c4043b650c7303ff5524ebd4b80100000083c418c390|@3288,63|16,0,64 21,0,5 30,0,I11 36,0,4 69,0,-1 112,0,0 164,0,0 182,1,@3284 203,0,0 3284:C2,1096|3b650c7303ff55248b38f7c701000000741583ffef7c1583ff157f15beaaea79418d74be44ffe6e9aa000000e9a5000000e9a0000000e98a030000909090e9fa020000909090e98b000000909090e924030000909090e9a2000000909090e9fc010000909090e96b000000909090e963000000909090e984020000909090e95f000000909090e94b000000909090e943000000909090e93b000000909090e975010000909090e92b000000909090e9ce010000909090e91b000000909090e919000000909090e9be010000909090e9f0010000909090b801000000c3b801000000c352ff70088b4004e812ffffff8b04248b54240483c408e903ffffff8b780883ff0375598b7004f7c6010000007503ff553883fe017d658b5af08b4b0c89cf23fef7c7010000007503ff55388d79ff03fe70f6f7c7010000007503ff553883ff057d688b701083fe017460f7c7010000007503ff553883ff017d07eb24e9940000008b43088b305623f7f7c6010000005e7503ff55383bfe7d07eb12e930000000b824ae7441ff552cb801000000f7c7010000007503ff553889fe83c60270f68b7c70fe89f88b52f4ff22b801000000c35256ff701089f38b42ec90e84e3dfbff83f80175278b1c2483fb01741f8b5424088b4af0ff72f48b5c24088b411090e8e2fbffff8b142483c410ff22b80100000083c40cc38b72f08b5e1883fb0175108b481083f90174088b46148b52f4ff22b801000000c352ff70048b40080bc0e8dafdffff8b1c2483fb017509b80100000083c408c3ff73048b038b54240890e8bafdffff8b1c2483c4043b650c7303ff5524ebd3b80100000083c40cc352ff70086a038b58048b42ec0bc0e83e0effff8b04248b54240483c408e97ffdffff8b4004e977fdffff528b580483fb017509b80100000083c404c3ff73048b038b54240490e856fdffff8b1c2483c4043b650c7303ff5524ebd3b80100000083c408c3528b580483fb017509b80100000083c404c3ff73048b038b54240483c800e81afdffff8b1c2483c4043b650c7303ff5524ebd1b80100000083c408c352ff70048b580883fb017502eb21ff73048b038b54240883c800e8e2fcffff8b1c2483c4043b650c7303ff5524ebd88b04248b54240483c408e9c3fcffff528b580483fb017509b80100000083c404c3ff73048b038b54240490e8a2fcffff8b1c2483c4043b650c7303ff5524ebd3b80100000083c408c352ff7004ff70088b580c83fb017502eb1eff73048b038b54240ce86afcffff8b1c2483c4043b650c7303ff5524ebdb8b4424048b54240883c800e84afcffff8b04248b54240883c40ce93bfcffff52ff70048b1c2483fb017502eb3b8b138b0a83f9f975188b442404ff73046a038b5a048b40ec0bc0e8be0cffffeb0ab8d8ee79410bc0ff552c8b1c2483c4043b650c7303ff5524ebbe8b142483fa017509b80100000083c408c3ff72048b028b54240890e8d2fbffff8b142483c4043b650c7303ff5524ebd3b80100000083c40cc390|@3287,63|29,0,$3284+54 215,0,0 221,0,0 387,0,@51 395,0,0 429,0,0 446,1,@435 482,1,@3277 495,0,0 531,0,0 559,0,0 599,0,0 622,1,@2889 659,0,0 699,0,0 717,0,0 759,0,0 839,0,0 879,0,0 1006,1,@2889 1013,0,@3285 1047,0,0 1087,0,0 3285:O3|@7320,@224,@3286 3286:S22|4d757475616c446563733a206e6f74204465636c6172 3287:S47|475f434f444528292e636f646567656e283130296964656e746966794c6f6164732832292831296c6f616473283129 3288:S39|475f434f444528292e636f646567656e283130296964656e746966794c6f616473283229283129 3289:S36|475f434f444528292e636f646567656e283130296964656e746966794c6f616473283229 3290:C2,4764|3b650c7303ff55248b7c241083ff017507be03000000eb05be0100000089f183f1028b30f7c601000000741583feeb7c1583fe177f15bfeeef79418d7cb754ffe7e9c4000000e9bf000000e9ba0000009090e9c30f0000909090e966080000909090e96b0e0000909090e9cf060000909090e9db040000909090e9ba090000909090e9ce030000909090e903030000909090e9ef040000909090e99d110000909090e977050000909090e9ba000000909090e9530d0000909090e91e050000909090e9230f0000909090e9a6020000909090e933000000909090e9ce030000909090e9da0c0000909090e928000000909090e90f050000909090e91e0e0000909090e9ab100000909090b854027a41ff552cbe010000005251b8010000008b5424100bc0ff128b342483fe0174348b5c2404ff7304bb94027a41b8a0027a410bc0e82e09ffff8b75008d76f83b75087303ff5520897500c746fc010000008906eb71be01000000eb6f52ff7004ff70088b42040bc0e89e1100008b742408508b460483c800e88e1100008b5d008d5bf83b5d087303ff5520895d00c743fc01000040c703010000008b54240c8b4d008d49ec3b4d087303ff5520894d00c741fc04000000bf30037a4189398b720489710ceb0ae9ba100000e9b51000008b7a08897908895904505351ff7424288b5c243089f00bc0e8ee1600008b74241850ff74242cff742408ff74242c89c38b4424248b560cff128b5c242c83fb0175168b54241c89c18b420490e83e19000083f8017519eb0489c1eb138b7c241c51b8010000008b57100bc0ff12eb06b801000000518b5424208b4a048b41148b3883ff017407be01000000eb5451ff72088b1c2489c80bc0e8da1100008b7424048b5e14c70303000000508b44240490e83ee6ffff8b55008d52f03b55087303ff5520895500c742fc030000008b4c240c894a088b3c24897a04890289d683c40c8b5c240c8b138b4c242056ff7104ff7108b80100000083fa01750489c7eb32ff7204ff74240450ff7424288b5c24148b02ba2c0b7a4190e8c21800008b142483c4043b650c7303ff5524ebcabf010000008b7424048b5c241c8b56088b4b04890a8b44242cff74243cff74243cff74243c8b5c241c8b780c8b44243089faff128b74242cff7604ff760850ff74242c8b5c240c8b442418ba2c0b7a4183c800e85a1800008b1c248b5424248b4b088b7a04893989c6eb7253ff742414ff742414ff7424148b58048b40088b521490ff1289c6eb5a52ff7004ff7008ff700c6aff6affff7424206a01bb030000008b4424140bc0e84afcfffff7c00100000075048b30eb0db820387a41ff552cbe010000008b5c24048b0b83f9f375258b43048b781c83ff017513eb0ae9a30e0000e9910e0000ba03000000eb0cba01000000eb05ba010000008b44240c8b3c2483ff017507bf03000000eb05bf0100000089fb83f3025656ff74241053528b58088b40040bc0e87e4400008b75008d76f83b75087303ff5520897500c746fc010000008b14248916eb705251ff700cff70108b58088b40048b52180bc0ff128b342483fe01741c8b75008d76f83b75087303ff5520897500c746fc010000008906eb728b5c24046aff8b530489c389d0ba4019794190e81625ffffbe01000000eb588b7008bb0900000089f123cbf6c1017503ff55385052eb05e9b50d000089f2d1fa8d43fff7ea8d48015a5870e452516aff6affff7424186a01bb030000008b400483c800e80afbfffff7c0010000007510eb0ae9770d0000e9720d00008b38eb0db820387a41ff552cbf010000008b742404ff7608ff760489fb8b442408bac4397a4190e8fe4400008b75008d76f83b75087303ff5520897500c746fc010000008906eb706a03ff742414ff742410bbd03f7a418b40048b521c90ff128b75008d76f83b75087303ff5520897500c746fc010000008906eb728b75008d76f43b75087303ff5520897500c746fc020000008b5804895e04c706fdffffffff720489f3b8a0027a4190e8ba04ffff8b75008d76f8eb05e9b50c00003b75087303ff5520897500c746fc010000008906eb6fff700cff742414ff742414ff742414ff7424148b58088b4004eb05e97d0c00008b5220ff1289c6eb7452518b58048b4424188d5424080bc0e8764a000089c6eb6152ff7004ff7008ff7204ff72088b5c24048b4424088b52240bc0ff12506a018b5c24088b44240cba64417a41eb05e9290c0000e87e4b00008b4424088d54241483c800e8e24e00008b74241050ff7604bb01000000b810477a41eb0ae9fb0b0000e9f30b000090e8122bffff8b5c24148b5b048b042490e82a5100008b5424148b4a0850ff31ff7104ff7134bb0100000089c8e8e239ffff8b442404c700010000008b7c24088b378b1c2489338b178b4c242489d68b410483c800e832b1ffff8b5d008d5bf03b5d087303ff5520895d00c743fc030000008b54240c89530889430489338b45008d40f83b45087303ff5520894500c740fc010000008918ff742438ff742438ff74243850bb030000008b44243089ca90e8c6f8ffff89c6eb708b742404f7c60100000075048b1eeb138b5804b880497a4190ff552c89d8bb010000005251ff33ff7304ff73088b1c248b40048d542414e89e5200008b1c248d542414e8be530000508b54240483fa017502eb608b0a8b0183f80175418b7c24148b7704ff720456ff76288b5e10eb05e9c10a00008b410483c800e80a25ffff8b1c2483fb01741bff742404bb7c5c7a41b84097040890e8f205ffffeb05ff720450508b54240883c40c3b650c7303ff5524eb998b0c2483f9017502eb2a8b442414ff71046aff8b198b4004ba401979410bc0e8a621ffff8b0c2483c4043b650c7303ff5524ebcf8b4424148b4004e8deafffff8b7c240889c623f7f7c6010000007503ff553889c62bf78d760170f48b5c24148b5b0889f00bc0e8d6afffff8b542414ff7204ff7208bb030000008b442414e8f66700008b0c248b4114c700030000008b7c241483ff0174338b742418ff7604bb94027a41b8a0027a4190e8d201ffff8b75008d76f83b75087303ff5520897500c746fc010000008906eb72be01000000eb708b75008d76f43b75087303ff5520897500c746fc02000000bb48627a41891e8b7a28897e045251ff70046a01ff7208ff720489f3b801000000ba0c1f79410bc0e85a30ffff6aff6affff74241c6a01bb030000008b4424108b542418e8daf6fffff7c0010000007510eb0ae93c090000e9370900008b30eb0db820387a41ff552cbe010000008b5c24086a01566a038b53088b4b0489cb89d0ba8c167a410bc0e86e3a00008b7c240850ff7708bb1f0000008b042483c800e81637ffff8b1c24b80700000083c800e87e5f0000bb190000008b042483c800e8f636ffffb8d41176410bc0e81649ffff8b1c24e8c653ffff8b1c24b8ab00000083c800e8b653ffff8b1c24b85900000083c800e8a653ffff8b7424106aff8b5c24088b4604ba4019794190e8ce1fffff8b5c24108b4304e85ae6ffff8b54240c83fa01742fff7304bb94027a41b8a0027a4190e85e00ffff8b75008d76f83b75087303ff5520897500c746fc010000008906eb74be01000000eb728b75008d76f43b75087303ff5520897500c746fc020000008b580c895e048b4804890e5251ff700853ff7204ff72088b5c240489f08b522483c800ff12506a018b5c24088b44240cba64417a4183c800e8464700008b4424148b78048b77108b5e088b1389d9bb01000000eb0ae9c4070000e9bf07000089d083c800e8ae2bffff89018b4424148b40040bc0e846adffff8b7c2414508b470483c800e83e0800008b74241850ff7608bb190000008b042483c800e8a635ffffb8d41176410bc0e8c647ffff8b1c24e87652ffff6a0dff742404bb0b000000b80900000083c800e8de60ffff8b5c24208b4304e89e1dffff8b5424206aff89c38b4204ba4019794183c800e87a1effff8b4c2414b80100000083f901750489c7eb338b75008d76f43b75087303ff5520897500c746fc020000008946048b19891e89f08b49043b650c7303ff5524ebc9bf0100000089f88d542424e882670000be0100000083f801750489f3eb338b55008d52f43b55087303ff5520895500c742fc020000008972048b08890a89d68b40043b650c7303ff5524ebc9bb010000008b542420536a116a13ff7208bb09000000b8f5ffffffe81a67ffff8b4c2424ff7424348b5c243c8b4104e8e60c00008b7c2424506affff742438ff74243889c38b4424308b570c0bc0ff128b74242889c38b46040bc0e8e2abffff8b54241089c123caf6c1017503ff553889c12bca8d490170f4f6c1017503ff553889c883e80270f6bf0900000089c123cff6c1017503ff5538505289c2d1fa8d47fff7ea8d48015a5870eb536a13ff7608bb0900000089c883c800e82e63ffff8b44243c83f80175278b7c242c8b470483c800e8c60e000083f80175138b5c242cb8010000008b531090ff1289c6eb05be010000008b7c242c8b77048b5e148b1383fa017407b901000000eb5356ff77088b1c2489f090e86a0700008b4c24048b7914c70703000000508b44240490e8cedbffff8b75008d76f03b75087303ff5520897500c746fc030000008b5c240c895e088b1424895604890689f183c40c8b0424f7c001000000751d8b74242c516aff8b188b4604ba4019794183c800e86a1cffff89c7eb06bf01000000518b44240c8d54243490e8326e00008b7c2430ff742440ff742440ff7424408b5c24148b4424348b570c83c800ff128b742430ff7604ff760850ff7424208b5c240c8b442410ba2c0b7a4183c800e80e0e00008b1c248b5424188b4b088b7a04893989c6eb5d526a018b5a088b4204ba001f79410bc0e8aa21ffff8b3424ff7604bb48cc7441b898a4794183c800e886fcfeff8b75008d76f83b75087303ff5520897500c746fc010000008906eb728b70048b5e108b3b83fffd750cb803000000eb0ae949040000b80100000089c383f30283f801741583f901741089c7b8146e7a4190ff552cb901000000b90100000052ff36ff7604ff760cff761050536aff6affff74242c6a01bb030000008b460890e88ef1fffff7c001000000750beb05e9de0300008b10eb0eb820387a4190ff552cba010000008b4c241852ff74242c8b5c24348b41040bc0e83e0a0000508b442414ba406e7a41ff12ff74241cff74241c89c38b44241c8d54242c90e8b270000089c6eb608b75008d76e43b75087303ff5520897500c746fc06000000bb3c8f7a41891e8956148b4a04894e108b7a08897e0c8b5c2408895e088b5a1c895e04528b400489f290ff12be01000000eb6352ff7004be010000008b1c2483fb01750989f2eb2be925030000f7c6010000007503ff553889f183c10270f68b5b0489ce3b650c7303ff5524ebd1ba010000005083fa0175228b4c2408ff7104bb94027a41b8a0027a4190e8fafafeff89e78907eb4be9cf020000528b5c2408b8010000008d5424100bc0e8769200008b4c240c8b79088b77308b1e83fb017507ba01000000eb0c5089f8e8e655ffff89c2eb01508d4c24088b0424890183c4088b75008d76f83b75087303ff5520897500c746fc010000008b3c24893eeb5cff70048b5a088b4204ba40957a4190e8b29500008b75008d76f83b75087303ff5520897500c746fc010000008906eb5b52ff7004ff70086aff6affff74241c6a01bb030000008b400c0bc0e8c6effffff7c00100000075098b30eb15e906020000b820387a4183c800ff552cbe010000008b1c248b1383fa157573568b4b04b80100000083f9017507eb68e9d401000050ff71046aff6affff7424286a01bb030000008b018b5424240bc0e866effffff7c00100000075048b38eb0db820387a41ff552cbf010000008b742414ff7424046affff7608ff760489fb8b442418ba78927a4183c800e812920000eb0ae92d000000e9730000008b5c2404f6c3017503ff553889da83c20870f689d08b0c2483c4083b650c7303ff5524e964ffffff566aff6affff7424206a01bb030000008b4424148b54241c83c800e8d6eefffff7c00100000075048b08eb0db820387a41ff552cb90100000051b8010000008d542414e8f695000083c4048b44240c6aff8b5c24048b4004ba401979410bc0e84e18ffff8b7c242083ff017507be01000000eb5c8b74240cff7604bb94027a41b8a0027a410bc0e8def8feff8b75008d76f83b75087303ff5520897500c746fc010000008906eb7152ff70086aff6affff7424186a01bb030000008b400490e832eefffff7c00100000075098b30eb15e96c000000b820387a4183c800ff552cbe010000008b5c240456ff74241c8b532cbb010000008b442408ff1250b8010000008d54241090e8769600008b75008d76f83b7508730aeb05e923000000ff5520897500c746fc010000008b0c24890eeb0fb838997a410bc0ff552cbe0100000083c41050505083c408505050505050505083c4205050505050505050505050505083c424505050505083c42083c408505050505083c4145050505050505050505050505083c42c89f083c408c210000bc0|@3593,63|18,0,1 25,0,0 55,0,$3290+82 267,0,@3291 275,0,0 282,0,0 310,0,@3293 315,0,@3294 322,1,@2888 355,0,0 374,1,@3295 390,1,@3295 420,0,0 453,0,@3297 502,1,@3310 554,1,@3316 575,0,0 589,0,0 612,0,0 630,1,@3298 643,0,1 654,1,@3234 720,0,0 752,0,@3317 758,1,@3319 779,0,0 854,0,@3317 862,1,@3319 935,0,1 963,0,@3409 971,0,0 1010,0,1 1017,0,0 1024,0,0 1041,0,1 1048,0,0 1074,1,@3411 1180,0,@2963 1186,1,@2965 1191,0,0 1201,0,4 1255,0,1 1295,0,@3409 1303,0,0 1324,0,@3416 1330,1,@3417 1373,0,@3424 1446,0,-2 1456,0,@3294 1462,1,@2888 1558,1,@3427 1606,0,@3429 1618,1,@3430 1634,1,@3437 1647,0,0 1652,0,@3444 1670,1,@2985 1686,1,@3447 1707,0,0 1714,1,@3004 1724,0,0 1754,1,@3189 1834,0,1 1874,0,@3456 1885,0,0 1910,1,@3458 1922,1,@3462 1978,1,@2969 1995,0,@3481 2000,0,I48 2006,1,@2893 2059,0,@2963 2066,1,@2965 2094,1,@3189 2138,1,@3190 2153,0,1 2162,1,@3489 2174,0,1 2195,0,@3293 2200,0,@3294 2206,1,@2888 2239,0,0 2270,0,@3491 2298,0,0 2303,0,@2978 2310,1,@3001 2325,0,1 2367,0,@3409 2375,0,0 2399,0,@3339 2406,1,@3405 2419,0,15 2430,1,@3004 2438,0,3 2446,1,@3474 2451,0,12 2462,1,@3004 2467,0,@1251 2474,1,@3038 2482,1,@3052 2490,0,85 2498,1,@3052 2506,0,44 2514,1,@3052 2532,0,@2963 2538,1,@2965 2550,1,@3259 2567,0,@3293 2572,0,@3294 2578,1,@2888 2611,0,0 2690,0,@3429 2698,1,@3430 2720,0,0 2742,1,@2990 2758,1,@3189 2774,1,@3295 2787,0,12 2798,1,@3004 2803,0,@1251 2810,1,@3038 2818,1,@3052 2829,0,5 2834,0,4 2842,1,@3088 2854,1,@2960 2870,0,@2963 2878,1,@2965 2887,0,0 2947,0,0 2958,1,@3493 2963,0,0 3023,0,0 3040,0,4 3045,0,-6 3050,1,@3098 3070,1,@3310 3114,1,@3189 3159,0,4 3200,0,4 3210,1,@3094 3234,1,@3316 3248,0,0 3263,0,0 3285,0,0 3302,1,@3298 3315,0,1 3326,1,@3234 3398,0,@2963 3406,1,@2965 3415,0,0 3430,1,@3513 3490,0,@3317 3498,1,@3319 3531,0,@2977 3538,1,@2979 3549,0,@193 3554,0,@3183 3562,1,@2888 3608,0,1 3620,0,0 3642,0,@3519 3651,0,0 3656,0,0 3685,0,1 3718,0,@3409 3727,0,0 3750,1,@3310 3760,0,@3521 3786,1,@3524 3819,0,@3571 3863,0,0 3874,0,0 3929,0,0 3947,0,@3293 3952,0,@3294 3958,1,@2888 3979,0,0 3990,1,@3577 4012,0,0 4022,1,@3069 4084,0,@3582 4090,1,@3583 4140,0,1 4172,0,@3409 4183,0,0 4202,0,0 4233,0,1 4263,0,@3409 4271,0,0 4298,0,@3578 4306,1,@3579 4374,0,1 4407,0,@3409 4415,0,0 4421,0,0 4430,1,@3588 4451,0,@2963 4458,1,@2965 4472,0,0 4486,0,@3293 4491,0,@3294 4498,1,@2888 4545,0,1 4576,0,@3409 4587,0,0 4604,0,0 4616,0,0 4626,1,@3590 4669,0,@3591 4679,0,0 3291:O3|@7320,@224,@3292 3292:S40|67656e6364653a2063616e277420636f64652d67656e657261746520476c6f62616c2076616c7565 3293:O2|-2,0 3294:S9|70757368436f6e7374 3295:C2,64|8b78088b378b581c8b138917505089e1891189e28972048b45008d40f43b45087303ff5520894500c740fc020000008b0c2489088b7c240489780483c408c390|@3296,63| 3296:S24|5452414e535f54414228292e6d61726b537461636b283129 3297:C2,164|3b650c7303ff55248b420c8b78148b3783fe017407bb01000000eb545250ff72088b1c2490e8960000008b5c24048b5314c70203000000508b44240490e8fad4ffff8b4d008d49f03b4d087303ff5520894d00c741fc03000000c74108010000008b3c24897904890189cb83c40ceb01528b14248b4a048b018b7d008d7ff43b7d087303ff5520897d00c747fc02000000894704891f8939b80100000083c404c383c800|@3309,63|22,0,0 38,1,@3298 51,0,1 62,1,@3234 93,0,0 153,0,0 3298:C2,392|3b650c7303ff55248b781c8b375050f7c6010000007503ff553889f283c20270f65053ff7024ff70286a01bb8100000089d00bc0ff15a092040889308b4d008d49f43b4d087303ff5520894d00c741fc02000000894104c701ffffffff8b45008d40f83b45087303ff5520894500c740fc0100004089088d7c241089078d742410c74604010000008b5d008d5bf43b5d087303ff5520895d00c743fc020000008b54241089138b4c2414894b048b44240c8b781c8b378b50308b0a8b78108b57048b02535651508b4424180bc0e87e23ffff8b7d008d7fe83b7d087303ff5520897d00c747fc050000008b7424048977108b5c2408895f0c8b14248957088947048b4c240c890f57b8010000008b7c24208b771c8b1e5023c3a801587503ff55383bc37d3e5089c38b470c0bc0e86224fbff508b5c24048b4424180bc0e8f2f5feff8b1424f6c2017503ff553889d183c10270f689c883c4043b650c7303ff5524ebaa8b54241483fa017412ff7424188b5c2404b894057a41e83a0000008b042483c42cc383c800|@3308,63|44,0,64 54,0,I11 89,0,-1 132,0,0 206,1,@2996 265,0,0 302,1,@435 318,1,@2889 373,0,@3299 378,1,@3300 3299:S9|736176655374617465 3300:C2,272|3b650c7303ff552453ff7304ff730cff73108b5424140bc0ff12b8150000008b54241490ff12b8d4067a418b54241490ff128b4424088b5424140bc0ff12b8e4067a418b54241490ff12bbffffffff8b4424040bc0e8be10fbff8b5424140bc0ff12b830ff78418b54241490ff12bbffffffff8b042483c800e89a10fbff8b5424140bc0ff12b8150000008b54241490ff128b442404baf4067a4190ff128b780883ff017452508b7004b80100000089f283c800ff128b5c2410508b1389c389d0e81623fbffff74241c89c38b44240490e8ce00ffff8b4c2404b8010000008b1183c800ff1283c4083b650c7303ff5524ebabb801000000e90600000083c418c20400b80100000083c410c204000bc0|@3307,63|27,0,10 39,0,@3301 63,0,@3302 75,0,-1 86,1,@336 99,0,@2897 111,0,-1 122,1,@336 135,0,10 151,0,@3303 171,0,0 194,1,@435 210,1,@2925 219,0,0 244,0,0 260,0,0 3301:S8|636f6e746578743d 3302:S5|207073703d 3303:O1|@3304 3304:C2,136|a8017503ff553883f8017c07bf03000000eb05bf010000008b75008d76f03b75087303ff5520897500c746fc03000000bba0077a41891ebbf4067a41895e088946048b5d008d5bf43b5d087303ff5520895d00c743fc02000000bae0077a4189138943048b45008d40f03b45087303ff5520894500c740fc030000008978088958048930c383c800|@3168,61|13,0,1 20,0,0 49,0,@3305 56,0,@3303 91,0,@3306 3305:C2,36|3b650c7303ff55248b7a04f7c7010000007503ff553889fe83ee0270f689f08b5208ff22|@3166,63| 3306:C2,4|8b4204c3|@3166,5| 3307:S25|5452414e535f54414228292e7072696e745374617465283329 3308:S24|5452414e535f54414228292e736176655374617465283229 3309:S53|475f434f444528292e636f646567656e2831302967656e636465283629726573756c742d6e65774d617463684661696c466e283129 3310:C2,128|3b650c7303ff55248b7c240483ff017508b8589c7541c2040083fbff755a8b7010ff7608ff760c8b5e048b0690e86a0000005089c1bb1100000089c890e8460fffff83f801740a89e0c70001000000eb0489e089088b45008d40f83b45087303ff5520894500c740fc010000008b3c24893883c404c2040089d8c2040083c800|@3315,63|18,0,@989 46,1,@3311 54,0,8 62,1,@2958 75,0,0 3311:C2,32|3b650c7303ff55248b3b53575089f88d54240c0bc0e82200000083c40cc20800|@3314,63|22,1,@3312 3312:C2,248|3b650c7303ff5524a8017503ff553883f8017d02eb168b7af48b375023c6a801587503ff55383bc67d02eb0f89c6b824ae7441ff552cbf01000000a8017503ff553889c683c60270f68b5c77fe89df83ff01756183f8017507b90b000000eb0ea8017503ff553889c183e90270f68b7afc890fa8017503ff553883f8017d02eb0ea8017503ff553883f80d7d02eb10b81401794183c800ff552cb80100000083f8097506b80d000000c383f80b750bb80f000000c3e901000000c383f8017507b90b000000eb0ea8017503ff553889c183e90270f68b42f8510bc8f6c101597503ff55383bc87506b811000000c389c8e90bffffff83c800|@3313,63|47,0,@51 55,0,0 90,0,5 144,0,@2901 155,0,0 165,0,6 176,0,7 193,0,5 233,0,8 3313:S52|5452414e535f54414228292e63686f6f7365526567697374657228312963686f6f736552656728342966696e6446726565283129 3314:S41|5452414e535f54414228292e63686f6f7365526567697374657228312963686f6f7365526567283429 3315:S31|475f434f444528292e63686f6f73654d657267655265676973746572283329 3316:C2,8|8b388b07c383c800|@1924,33| 3317:O3|@3319,@3321,@3318 3318:O6|@3340,@3161,@3199,@2977,@2978,@3339 3319:C2,668|3b650c7303ff552483f80175078b442408c20c008b7b148b3783fe017472f7c00100000075058b4804eb1289c1b8503d754190ff552c89c8b901000000f7c00100000075058b7008eb1389c6b8503d75410bc0ff552c89f0be010000008b7c24045053ff74241456ff376a0389c88b520483c800ff128b34248b5e14c703010000008b16c702010000008b4c2404eb05e936000000f7c10100000075048b39eb1489c7b8503d754183c800ff552c89f9bf01000000508b5c241889f890e85248ffff8b042483c40cc20c00f7c00100000075058b4804eb1189c1b8503d7541ff552c89c8b901000000f7c00100000075058b7008eb1389c6b8503d75410bc0ff552c89f0be01000000505052505353ff742420ff742428ff7424248d44241c5089f389c88b520890ff128b7c240c83ff0174718b34248b5e148b1383fa017407b901000000eb4f8b5c242089f0e846f7ffff8b0c248b7914c70703000000508b4424240bc0e8aacbffff8b75008d76f03b75087303ff5520897500c746fc030000008b5c2414895e088b1424895604890689f183c4048b442404f7c001000000750ceb05e9bc0000008b7804eb0db8503d7541ff552cbf01000000f7c00100000075058b7008eb0fb8503d75410bc0ff552cbe010000008b5c24188b54240851ff74242456ff336a038b5c241489f88b52040bc0ff128b4c24048b39c707010000008b7114c706010000008b5c2408f7c30100000075048b13eb1289c2b8503d754190ff552c89d0ba01000000508b5c242889d090e8da46ffff8b4c24288b442420894c24288b3c24897c2424894424208b5c24088b4424048b54241083c41ce99bfdffff8b742404f7c60100000075048b1eeb0eb8503d754190ff552cbb0100000089da8b5c242089d00bc0e88246ffff8b44241083c414c20c00|@3320,63|46,0,@597 57,0,0 77,0,@597 89,0,0 126,0,0 134,0,0 164,0,@597 177,0,0 190,1,@3068 219,0,@597 229,0,0 249,0,@597 261,0,0 321,0,0 334,1,@3298 346,0,1 358,1,@3234 431,0,@597 439,0,0 457,0,@597 467,0,0 510,0,0 519,0,0 542,0,@597 553,0,0 566,1,@3068 630,0,@597 639,0,0 654,1,@3068 3320:S23|5452414e535f54414228292e6d657267654c6162283529 3321:O2|@3322,@2977 3322:C2,584|3b650c7303ff55248b7b2883ff01741a525053ff730c57ff732489c3b8a0107a41e846f7ffff89c6eb0cbe01000000525053ff730c578b7424088b5c240c8b56108b4a048b430889018b7c242083ff017507bf11000000eb5e5050ff378b038b1c2483c800e8de1afbff83f801750bb8b0107a4183c800ff552c8d7c24048b342489378d5c24048943048b5424088b0a8b0183f80575058b7904eb2f8b7208bb1100000089f083c800e8b6fbfeff83f801740989f7eb14e912000000b8e4107a410bc0ff552cbf0100000083c40c8b5c24088b531c8b0af6c1017503ff553889c883e80270f68b75008d76f43b75087303ff5520897500c746fc02000000b914117a41890e8b4c241c894e045789f290ff128b780883ff017441508b7004b80100000089f283c800ff12ff74241089c3b803000000ba4c19794183c800e82a0bffff8b1c24b8010000008b13ff1283c4043b650c7303ff5524ebb7b8010000008d54241890e8720200008b74240c8b5c24108b56308b4b10890a8b461c8b388b530c891057b8010000008d54241c83c800e84e0300008b4c2428f7c101000000756e8b7c2418ff7424048b5c24308b4424148b570483c800ff128b75008d76f43b75087303ff5520897500c746fc020000008b5c2404895e04c70605000000ff74241089f3b898a4794183c800e8e2e9feff89c28b45008d40f83b45087303ff5520894500c740fc010000008910eb05b8010000008b7c240883ff01741e508b4424300bc0e8da17ffffff742414bba0107a410bc0e8f2ecfeffeb01508b042483c420c210000bc0|@3338,63|29,0,@3323 34,1,@3300 43,0,0 83,0,8 102,1,@435 112,0,@3324 160,0,8 170,1,@2932 189,0,@3326 199,0,0 255,0,@3328 287,0,0 305,0,1 310,0,@2964 318,1,@2968 326,0,0 348,0,0 358,1,@3331 390,0,0 402,1,@3333 475,0,2 486,0,@3183 494,1,@2888 529,0,0 550,1,@2996 559,0,@3323 566,1,@2893 3323:S8|7365745374617465 3324:O3|@7320,@224,@3325 3325:S25|70537461636b5265616c456e7472793a206e6f20656e747279 3326:O3|@7320,@224,@3327 3327:S24|73657453746174653a206e6f742061207265676973746572 3328:C2,136|8b7a045023c7a801587503ff55383bc77c07be03000000eb05be010000008b5d008d5bf03b5d087303ff5520895d00c743fc03000000b9b8117a41890b8953088943048b4d008d49f43b4d087303ff5520894d00c741fc02000000bff8117a4189398941048b45008d40f03b45087303ff5520894500c740fc030000008970088948048918c30bc0|@3168,63|19,0,1 26,0,0 55,0,@3329 92,0,@3330 3329:C2,36|3b650c7303ff55248b7a04f7c7010000007503ff553889fe83ee0270f689f08b5208ff22|@3166,63| 3330:C2,4|8b4204c3|@3166,5| 3331:C2,196|3b650c7303ff55248b7af48b771c8b1e5023c3a801587503ff55383bc37c06b801000000c3525089c38b470c90e83a17fbff83f8017502eb6c8b108b0a83f905751a8b7c24048b77f4ff70088b5e108b420483c800e8f209ffffeb1f83f90375178b7c24048b77f4ff70088b5e108b4204e8d609ffffeb03ff7008bb110000008b04240bc0e8fef7feff83f80174138b4424088b78f48b5f108b042490e8aa09ffff83c4048b0424a8017503ff553889c783c70270f689f88b54240483c408e93cffffff|@3332,63|32,0,0 46,1,@435 86,1,@2969 114,1,@2969 124,0,8 134,1,@2932 158,1,@2969 3332:S31|5452414e535f54414228292e73657453746174652836296672656573283129 3333:C2,704|3b650c7303ff55248b7af88b770c5023c6a801587503ff55383bc67c06b801000000c3525089c38b07e83616fbff8b5c24048b14248b4be45223d1f6c2015a7503ff55383bd17c07bffc157a41eb598b7bf45089d38b470c90e80616fbff83f8017507bffc157a41eb3f8b7424088b5ef48b138b0a83f9017407bfffffffffeb038b780c89f98b7d008d7ff43b7d087303ff5520897d00c747fc02000000894f048b4804890feb01508b742408ff37ff7704ff7424088b5c24108b46f0e842e7feff8b5c240883fb0175218b54240cf6c2017503ff553889d183c10270f689c88b54241083c414e914ffffff8b138b0a83f905751f8b4424108b78f452ff7304ff7308ff730c8b5f108b420490e8e287ffffeb2e83f903751f8b4424108b78f452ff7304ff7308ff730c8b5f108b420490e8be87ffffeb0a52ff7304ff7308ff730cbb110000008b4424040bc0e82ef6feff83f80174138b4424208b78f48b5f108b442404e88a87ffff8b442410a8017503ff553883f8017d02eb6e8b3c24f7c7010000007503ff553883ff017c19500bc7a801587503ff55383bf8744cb808167a41ff552ceb428b7424208b5d008d5bec3b5d087303ff5520895d00c743fc0400000089430c8b5424048953088b4c2408894b048b44240c8903538b5c24208b46f00bc0e81ae6feff8b7c241cf7c7010000007503ff553889fe83c60270f689f08b54242083c800e8f2fdffff8b5c24208b530483fa0174728b4bf48b411c8b388b74241c5723fef7c7010000005f7503ff55383bf77c07bf01000000eb1989f38b410ce81a14fbff83f8017507bf01000000eb038b78048b5c24145323dff6c3015b7503ff55383bdf7d3f8b54242089d923cff6c1017503ff553889d92bcf8d490170f48b442424eb05e924000000894c24248b5c241c89c78b42f4ba4019794183c42457e98c03ffffb80100000083c424c3b80100000083c424c30bc0|@3337,63|30,0,0 42,1,@435 73,0,@3334 90,1,@435 100,0,@3334 123,0,-1 190,1,@2889 270,1,@3148 306,1,@3148 323,0,8 334,1,@2932 358,1,@3148 415,0,@3335 486,1,@2889 570,0,0 582,1,@435 592,0,0 671,0,@2963 680,1,@2965 685,0,0 694,0,0 3334:O2|0,-1 3335:O3|@7320,@224,@3336 3336:S28|446966666572656e7420737461636b2064657374696e6174696f6e73 3337:S38|5452414e535f54414228292e73657453746174652836297075744f6e456e7472696573283129 3338:S23|5452414e535f54414228292e7365745374617465283629 3339:O2|@3405,@2977 3340:C2,2372|8d7c24a83b7d0c7303ff55288b7c2414525053ff770cff7724ff7728ff7504be661f7a41566a018965048b75008d76f83b75087303ff5520897500c746fc01000040c706010000008b4c240c83f9017433568b44243483c800e84a11ffffff74243cbbf81f7a410bc0e862e6feffff7424148b5c2424b80c207a410bc0e88eeeffffeb01568b44243c8b78088b378b5c24308b13520bd6f6c2015a7503ff55383bf2740ab820207a410bc0ff552c8b4c241cf7c10100000075718b742438f7c601000000756a50508b442428ff31ff368b5c24048b0083c800e80e12fbff83f801750bb8b0107a4183c800ff552c8d7c24088b74240489378d5c24088943048b54240c8b0a8b3983ff0575058b4104eb328b7208bb1100000089f00bc0e8e6f2feff83f801740e89f0eb18e96d000000e956000000b840207a4190ff552cb8010000008b5c24345050ff7424086a038b53148b5c245c8b4424540bc0ff126aff89c38b442454ba401979410bc0e84e01ffff8b4c2438ff34248b5c244c8b4424548b510cff128b3424eb35b868207a4183c800ff552cbe01000000eb238b74243883fe017507be11000000eb0eb868207a4190ff552cbe0100000050505050508b5c24508b531c8b0af6c1017503ff553889c883e80270f68b7c24448b4d008d49f43b4d087303ff5520894d00c741fc02000000bba8207a4189198b178951045689ca90ff128b480883f9017441508b7804b80100000089fa83c800ff12ff74245889c3b803000000ba4c19794183c800e8da01ffff8b3424b8010000008b16ff1283c4043b650c7303ff5524ebb78b7c24548b771c8b1ef6c3017503ff553889da83ea0270f689d0baac217a410bc0ff128b480883f901745e508b7804b80100000089fa83c800ff128b7424585089c38b460c90e85210fbff8b5c2440508b138b5c240489d00bc0e83e10fbff8b0c2483f9017502eb6e83f8017520ff7424608b5c2408b801000000ba4c1979410bc0e83a01ffffeb60e91d0200008b790cf7c7010000007503ff553883ff017c3b8b580cf6c3017503ff553883fb017c22530bdff6c3015b7503ff55383bfb74128b108b70048b5808b8b8227a410bc0ff552c89feeb08e9af0100008b700c8b590483fb017507eb0fe99d0100008b500483fa017402eb698b308b58088b41080bc0e8b2f0feff83f8017419ff7424608b5c2408b801000000ba4c197941e89e00ffffeb5c8b198b1383fa0375588b0683f80375568b7b088b53048b5e0489d00bc0e8defdfeff83f801741a8b4e08510bcff6c101597503ff55383bf97507eb68e9c8000000ff7424608b5c2408b801000000ba4c1979410bc0e84200ffffeb68e905010000e91a000000ff7424608b5c2408b801000000ba4c19794190e81e00ffffeb6483fafb75648b0683f8fb753d8b7b048b4e04510bcff6c101597503ff55383bf97507eb60e9bd000000ff7424608b5c2408b801000000ba4c1979410bc0e8dafffeffeb72e99d000000ff7424608b5c2408b801000000ba4c1979410bc0e8bafffeffeb71e97d000000ff7424608b5c2408b801000000ba4c1979410bc0e89afffeffeb62e95d000000560bf7f7c6010000005e7503ff55383bfe744a8b5d008d5bec3b5d087303ff5520895d00c743fc04000000eb05e92b00000089730c8b71088973088b71048973048b318933538b5c2408eb05e90c0000008b44244083c800e8b2dffeff8b4c2408b8010000008b1183c800ff1283c40c3b650c7303ff5524e978fdffff8b7c24548b771c8b1ef6c3017503ff553889da83ea0270f689d0baf0227a4183c800ff12b9010000008b780883ff01744450518b5804b80100000089da90ff1289c38b04248d5424480bc0e81a0800008b54240450b8010000008b120bc0ff128b0c2483c40c3b650c7303ff5524ebb9be0100000089ce568b5c243c8b5424588b4a1c8b01a8017503ff553889c783ef0270f6ff731089f8baf8247a4190ff128b34248b580883fb01744650568b4804b80100000089ca83c800ff1289c38b04248d5424500bc0e8a60900008b7c240450b8010000008b170bc0ff128b342483c40c3b650c7303ff5524ebb7ba0100000089f28b4c24045123caf6c101597503ff55383bca7e0489cfeb0289d78b74245c8b56308b0a5123cff6c101597503ff55383bf97d2b8b0a89c823c7a8017503ff553889c82bc78d400170f489f98b5c245490e8f68affff8b44245c8b7830890f8b45008d40f03b45087303ff5520894500c740fc03000000bf90277a4189388b74245c8970088b5c24408958048b5424446a01ff7424585689c3b8010000008b521083c800ff128b4c245c8b411c8b38f7c7010000007503ff553889fe83ee0270f689f0ba70287a41ff128b580883fb017431508b5004b80100000090ff128d54244c83c800e80e0c00008b0c24b8010000008b11ff1283c4043b650c7303ff5524ebc78b54245c8b4a1c8b39f7c7010000007503ff553889fe83ee0270f689f0ba9c2d7a4183c800ff128b580883fb017431508b5004b80100000090ff128d54244c83c800e8da1000008b0c24b8010000008b11ff1283c4043b650c7303ff5524ebc78b5424408b4c245c8b79308b378b5a105323def6c3015b7503ff55383bde7d0a8b442420c700030000008b4424208b3083fe017402eb708b5c24408b54245c8b4a308b018b7b105023c7a801587503ff55383bf87e6f8b7424448b5c245489d08b56040bc0ff1283f8017402eb4abb190000008b44245483c800e8ce11ffffb89c8879410bc0e8ee23ffff8b5c245483c800e89a2effff8b5c245c8b53308b0af6c101750aeb05e919000000ff553889c883c00270ef89023b650c7303ff5524e972ffffff8b742458f7c60100000075528b55008d52f43b55087303ff5520895500c742fc020000008b4c2408894a04c70205000000ff74245c89d3b898a4794190e822dbfeff8b5d008d5bf83b5d087303ff5520895d00c743fc010000008903eb05bb010000008b54243083fa01741c538b442458e81e09ffffff742460bbf81f7a410bc0e836defeffeb01538b4c24248b018b4d008d49f43b4d087303ff5520894d00c741fc020000008b3c248979048901ff7424308f4504eb5f0bc08b3083fe03751989c3b870ae744183c800ff552cb901000000eb05b901000000508b4424280bc0e8ae08ffffff742430bbf81f7a410bc0e8c6ddfeffff7424088b5c2418b80c207a410bc0e8f2e5ffff8b04240bc0ff552cb9010000008b7424508b19891e8b5104895604b80100000083c44cc21400|@3404,63|32,0,$3340+2254 68,0,0 90,1,@2996 99,0,@3341 106,1,@2893 119,0,@3342 126,1,@3300 165,0,@3343 218,1,@435 228,0,@3324 277,0,8 286,1,@2932 310,0,@3345 319,0,0 359,0,@2963 366,1,@2965 396,0,@3347 407,0,0 423,0,8 430,0,@3347 439,0,0 501,0,@3349 531,0,0 549,0,1 554,0,@2964 562,1,@2968 570,0,0 618,0,@3352 639,0,0 662,1,@435 682,1,@435 710,0,0 715,0,@2964 722,1,@2968 793,0,@3356 850,1,@2932 868,0,0 873,0,@2964 878,1,@2968 914,1,@2958 958,0,0 963,0,@2964 970,1,@2968 995,0,0 1000,0,@2964 1006,1,@2968 1062,0,0 1067,0,@2964 1074,1,@2968 1094,0,0 1099,0,@2964 1106,1,@2968 1126,0,0 1131,0,@2964 1138,1,@2968 1238,1,@2889 1247,0,0 1301,0,@3358 1311,0,0 1329,0,0 1350,1,@3362 1360,0,0 1387,0,0 1427,0,@3364 1451,0,0 1474,1,@3368 1484,0,0 1511,0,0 1598,1,@3190 1636,0,@3372 1670,0,0 1712,0,@3374 1731,0,0 1746,1,@3378 1754,0,0 1805,0,@3384 1827,0,0 1842,1,@3388 1850,0,0 1909,0,1 1982,0,12 1994,1,@3004 1999,0,@3121 2006,1,@3038 2018,1,@3052 2113,0,2 2124,0,@3183 2130,1,@2888 2163,0,0 2182,1,@2996 2191,0,@3341 2198,1,@2893 2264,0,@54 2275,0,0 2282,0,0 2294,1,@2996 2303,0,@3341 2310,1,@2893 2323,0,@3342 2330,1,@3300 2343,0,0 2362,0,0 3341:S10|6d657267655374617465 3342:S11|7361766564207374617465 3343:O3|@7320,@224,@3344 3344:S6|4d61726b6572 3345:O3|@7320,@224,@3346 3346:S14|4e6f742061207265676973746572 3347:O3|@7320,@224,@3348 3348:S37|6d657267655374617465202d204d69736d61746368656420726573756c7420737461746573 3349:C2,136|8b7a045023c7a801587503ff55383bc77c07be03000000eb05be010000008b5d008d5bf03b5d087303ff5520895d00c743fc03000000b94c217a41890b8953088943048b4d008d49f43b4d087303ff5520894d00c741fc02000000bf8c217a4189398941048b45008d40f03b45087303ff5520894500c740fc030000008970088948048918c30bc0|@3168,63|19,0,1 26,0,0 55,0,@3350 92,0,@3351 3350:C2,36|3b650c7303ff55248b7a04f7c7010000007503ff553889fe83ee0270f689f08b5208ff22|@3166,63| 3351:C2,4|8b4204c3|@3166,5| 3352:O1|@3353 3353:C2,136|a8017503ff553883f8017c07bf03000000eb05bf010000008b75008d76f03b75087303ff5520897500c746fc03000000bb58227a41891ebbac217a41895e088946048b5d008d5bf43b5d087303ff5520895d00c743fc02000000ba98227a4189138943048b45008d40f03b45087303ff5520894500c740fc030000008978088958048930c383c800|@3168,61|13,0,1 20,0,0 49,0,@3354 56,0,@3352 91,0,@3355 3354:C2,36|3b650c7303ff55248b7a04f7c7010000007503ff553889fe83ee0270f689f08b5208ff22|@3166,63| 3355:C2,4|8b4204c3|@3166,5| 3356:O3|@7320,@224,@3357 3357:S29|6d657267653a206d69736d6174636865642064657374696e6174696f6e 3358:O1|@3359 3359:C2,136|a8017503ff553883f8017c07bf03000000eb05bf010000008b75008d76f03b75087303ff5520897500c746fc03000000bb9c237a41891ebbf0227a41895e088946048b5d008d5bf43b5d087303ff5520895d00c743fc02000000badc237a4189138943048b45008d40f03b45087303ff5520894500c740fc030000008978088958048930c383c800|@3168,61|13,0,1 20,0,0 49,0,@3360 56,0,@3358 91,0,@3361 3360:C2,36|3b650c7303ff55248b7a04f7c7010000007503ff553889fe83ee0270f689f08b5208ff22|@3166,63| 3361:C2,4|8b4204c3|@3166,5| 3362:C2,180|3b650c7303ff55248b7a14508b470c0bc0e87205fbfff7c00100000075718b308b1e83fbfb756d8b5604f6c2017503ff553883fa017c07b903000000eb05b90100000083f901750489d7eb0ff6c2017503ff553889d783effa70f6bbf9ffffff89f80bc0ff15e09e0408a8017503ff553889c683c60270f68b1c245323def6c3015b7503ff55383bf37e1289f0eb0ae916000000e90a00000083c404c389d883c404c38b042483c404c38b042483c404c383c800|@3363,63|18,1,@435 56,0,1 63,0,0 92,0,-4 102,0,I109 3363:S36|5452414e535f54414228292e6d657267655374617465283729676574496e557365283229 3364:O1|@3365 3365:C2,136|a8017503ff553883f8017c07bf03000000eb05bf010000008b75008d76f03b75087303ff5520897500c746fc03000000bba4257a41891ebbf8247a41895e088946048b5d008d5bf43b5d087303ff5520895d00c743fc02000000bae4257a4189138943048b45008d40f03b45087303ff5520894500c740fc030000008978088958048930c383c800|@3168,61|13,0,1 20,0,0 49,0,@3366 56,0,@3364 91,0,@3367 3366:C2,36|3b650c7303ff55248b7a04f7c7010000007503ff553889fe83ee0270f689f08b5208ff22|@3166,63| 3367:C2,4|8b4204c3|@3166,5| 3368:C2,268|3b650c7303ff55248b7a145250538b470ce86a03fbff8b7424088b5ef8508b138b5c240489d083c800e85203fbff8b0c24f7c10100000075728b398b3783fefb75088b44240883c410c3f7c001000000755e8b188b1383fafb755a8b4b04f6c1017503ff553883f9017c07b803000000eb05b80100000083f801750489c8eb0ff6c1017503ff553889c883e8fa70f6bbf9ffffffff15e09e04088b7c24085023c7a801587503ff5538eb0fe951000000e944000000e9370000003bc77d0489c6eb0289fe8b5c240c8b53bc5223d6f6c2015a7503ff55383bf27d10b82c277a4183c800ff552cb80100000089f083c410c38b44240883c410c38b44240883c410c38b44240883c410c383c800|@3371,63|18,1,@435 42,1,@435 108,0,1 115,0,0 144,0,-4 150,0,I109 220,0,@3369 231,0,0 3369:O3|@7320,@224,@3370 3370:S28|6d6572676553746174653a20756e70757368656420656e7472696573 3371:S39|5452414e535f54414228292e6d6572676553746174652837296765744d696e537461636b283229 3372:C2,152|3b650c7303ff55248b7a08525089c38b470c83c800e8da01fbff8b7424048b5e04508b138b5c240489d083c800e8c201fbff8b0c24f7c101000000754f8b398b3783fefb751af7c0010000007509b80100000083c40cc3b80100000083c40cc3f7c001000000751b8b188b1383fafb7509b80300000083c40cc3b80100000083c40cc3b80100000083c40cc3b80100000083c40cc383c800|@3373,63|22,1,@435 46,1,@435 79,0,0 88,0,0 114,0,1 123,0,0 132,0,0 141,0,0 3373:S36|5452414e535f54414228292e6d6572676553746174652837296d75737450757368283129 3374:O1|@3375 3375:C2,136|a8017503ff553883f8017c07bf03000000eb05bf010000008b75008d76f03b75087303ff5520897500c746fc03000000bb1c297a41891ebb70287a41895e088946048b5d008d5bf43b5d087303ff5520895d00c743fc02000000ba5c297a4189138943048b45008d40f03b45087303ff5520894500c740fc030000008978088958048930c383c800|@3168,61|13,0,1 20,0,0 49,0,@3376 56,0,@3374 91,0,@3377 3376:C2,36|3b650c7303ff55248b7a04f7c7010000007503ff553889fe83ee0270f689f08b5208ff22|@3166,63| 3377:C2,4|8b4204c3|@3166,5| 3378:C2,476|3b650c7303ff55248b7a14525089c38b470c83c800e8eefffaff8b7424048b5ef8508b138b5c240489d083c800e8d6fffaff8b0c24f7c101000000755e8b398b3783fefb7509b80100000083c40cc383fe037571f7c001000000756e8b188b1383fa05753b8b74240c897c240c8b79088b442408897c24088b79048b542404897c24048b790c893c248b5b045089d08b142483c40456e95d010000e93301000083fa03755a8b77088b5308520bd6f6c2015a7503ff55383bf274178b7008b8382d7a41eb0ae9b0000000e9a2000000ff552c8b70088b5b048b47040bc0e842e0feff83f801746abb1100000089f083c800e82ee0feff83f801740989f3eb22e964000000bb110000008b410890e812e0feff83f80174058b5908eb05bb090000008b118b44240c8954240c8b79088b742408897c24088b51048b7c2404895424048b510c8914245089f889f28b0c24eb05e90900000083c40451e999000000b80100000083c40cc3b80100000083c40cc3b80100000083c40cc3f7c00100000075488b188b1383fa0575368b74240c897c240c8b79088b442408897c24088b79048b542404897c24048b790c893c248b5b045089d08b142483c40456e937000000b80100000083c40cc3b80100000083c40cc3b80100000083c40cc3|@3383,63|22,1,@435 46,1,@435 71,0,0 151,1,@3379 191,0,@3381 222,1,@2932 232,0,8 242,1,@2932 261,0,8 270,1,@2932 285,0,4 347,1,@3379 352,0,0 361,0,0 370,0,0 445,1,@3379 450,0,0 459,0,0 468,0,0 3379:C2,376|3b650c7303ff552489d789c689d9bb0900000089c8e87eecfeff83f80174308b5ffc57568b53088b5f0c8b471483c800ff128b4c240450ff742404ff711489c38b410c0bc0e89685ffff8b0424eb6f8b4424108b1883fb05751389cb8b40040bc0e832ecfeff83f8017402eb1489cb8b44240c0bc0e81eecfeff83f8017502eb168b57145756518b5a1089c890e80e70ffff8b0424eb368b57fc575651518b5f0c8b47148b520c90ff128b4c2408ff742404ff71148b5c24088b410ceb05e90a0000000bc0e81685ffff8b04248b7c24088b7714508b5c24088b460c90e82efdfaff83f8017502eb1d8b5c240cff73148b5c240cb801000000ba4c19794183c800e82eeefeff8b54240c8b4d008d49f43b4d087303ff5520894d00c741fc020000008b0424894104c701050000008b7d008d7fec3b7d087303ff5520897d00c747fc040000008b74241489770cc74708110000008b5c2418895f04890f897c24208b5c24088b42f08b54241083c42052e93bcefeff83c800|@3380,63|15,0,4 22,1,@2958 70,1,@3214 98,1,@2958 118,1,@2958 142,1,@3148 198,1,@3214 222,1,@435 245,0,0 250,0,@2964 258,1,@2968 298,0,2 336,0,8 369,1,@2889 3380:S37|5452414e535f54414228292e6d6572676553746174652837296c6f6164546f526567283629 3381:O3|@7320,@224,@3382 3382:S25|6d657267653a206d69736d617463686564206f666673657473 3383:S39|5452414e535f54414228292e6d6572676553746174652837296c6f6164456e7472696573283129 3384:O1|@3385 3385:C2,136|a8017503ff553883f8017c07bf03000000eb05bf010000008b75008d76f03b75087303ff5520897500c746fc03000000bb482e7a41891ebb9c2d7a41895e088946048b5d008d5bf43b5d087303ff5520895d00c743fc02000000ba882e7a4189138943048b45008d40f03b45087303ff5520894500c740fc030000008978088958048930c383c800|@3168,61|13,0,1 20,0,0 49,0,@3386 56,0,@3384 91,0,@3387 3386:C2,36|3b650c7303ff55248b7a04f7c7010000007503ff553889fe83ee0270f689f08b5208ff22|@3166,63| 3387:C2,4|8b4204c3|@3166,5| 3388:C2,588|3b650c7303ff55248b7a14525089c38b470c83c800e8c2fafaff8b7424048b5ef8508b138b5c240489d083c800e8aafafaff8b0c24f7c101000000756af7c0010000007567ff710cff7104ff31ff7108ff70088b7c24088b3783fe0575538b088b5f048b042483c800e8f6e8feff83f8017409b80100000083c420c38b0183f80575408b59048b4704e86adbfeff83f80174278b7c241c8b77d8c70603000000b801000000eb0fe994010000e986010000e93700000083c420c3b80100000083c420c383f8fb750fb810317a410bc0ff552cb8010000008b5c241c8b53d8c70203000000b80100000083c420c383fefd75298b188b1383fafd7513b8010000008d54242090e88e01000083c420c3b834327a41ff552cb80100000083fe01752b8b188b1383fa017515b8010000008d54242083c800e85e01000083c420c3b85c327a41ff552cb80100000083fe03755c8b088b5c24048b0424e806e8feff83f8017409b80100000083c420c38b0183f803753e8b59048b4704e8e6e7feff83f8017413b8010000008d54242090e80601000083c420c38b5c241c8b53d8c70203000000b80100000083c420c3e90e000000b884327a4190ff552cb80100000083fefb75548b188b1383fafb75358b4f048b4304510bc8f6c101597503ff55383bc87502eb09b8b4327a4190ff552cb8010000008d5424200bc0e89a00000083c420c38b4c241c8b41d8c70003000000b80100000083c420c38b188b1383faff7509b80100000083c420c3b8ec327a41ff552cb801000000b80100000083c40cc3b80100000083c40cc383c800|@3403,63|22,1,@435 46,1,@435 106,1,@2958 116,0,0 138,1,@2932 156,0,1 161,0,0 187,0,0 201,0,@3389 211,0,0 224,0,1 229,0,0 252,0,0 262,1,@3391 271,0,@3393 279,0,0 298,0,0 310,1,@3391 319,0,@3395 327,0,0 346,1,@2958 356,0,0 378,1,@2958 388,0,0 398,1,@3391 415,0,1 420,0,0 434,0,@3397 443,0,0 486,0,@3399 495,0,0 506,1,@3391 523,0,1 528,0,0 546,0,0 555,0,@3401 563,0,0 568,0,0 577,0,0 3389:O3|@7320,@224,@3390 3390:S21|6d657267653a20756e70757368656420656e747279 3391:C2,152|3b650c7303ff552489d6bb110000008b46e483c800e846d9feff83f80174708b5ee08b46e4e836d9feff83f80174608b5efc8b5314568b5a108b46e490e8e2eafeff8b0c248b41fc8b7d008d7fec3b7d087303ff5520897d00c747fc040000008b71f089770cc74708110000008b59ec895f048b51e889178b542404897c24048b59f88b40f083c40452e955c9feffb801000000c383c800|@3392,63|11,0,8 22,1,@2932 38,1,@2932 62,1,@2969 105,0,8 139,1,@2889 144,0,0 3392:S53|5452414e535f54414228292e6d657267655374617465283729636865636b456e7472696573283129666c7573684361636865283129 3393:O3|@7320,@224,@3394 3394:S16|4c69746572616c206d69736d61746368 3395:O3|@7320,@224,@3396 3396:S16|436f6465726566206d69736d61746368 3397:O3|@7320,@224,@3398 3398:S24|6d657267653a206d69736d61746368656420446972656374 3399:O3|@7320,@224,@3400 3400:S31|6d657267653a206d69736d61746368656420737461636b20656e7472696573 3401:O3|@7320,@224,@3402 3402:S27|6d657267653a206d69736d61746368656420436f6e7461696e6572 3403:S40|5452414e535f54414228292e6d657267655374617465283729636865636b456e7472696573283129 3404:S25|5452414e535f54414228292e6d657267655374617465283729 3405:C2,936|3b650c7303ff552450505250538b7b0c8b5c241c89f883c800e8f2f5faff83f801754bbbffffffff8b44241c90e81ae3faff89c3b81cac7941e806dffaff8b75008d76f03b75087303ff5520897500c746fc03000000894608bb54cf7441895e04bafcc1b441891689f090ff552c8d74240c8b5c241c891e8d54240c8942048b4c24108b0424ff31ff71088b400c83c800e87af5faff83f8017510b840ac794183c800ff552cbf010000008b700483fe037507bf03000000eb05bf010000008b5c24048b1383fa0575728b4b048b5c242889c80bc0e8bee3feff83f80174628b44242083f801745e83ff01755e8b7c2410ff7424288b5c24108b44240c8b5704ff128b75008d76f43b75087303ff5520897500c746fc020000008b5c2428895e04c70605000000ff74240889f3b898a4794183c800e862c5feffeb14e938000000e933000000e924000000e91f000000506aff8b5c242c8b442410ba4019794190e87ee4feff8b042483c420c20c008b44242483c41cc20c008b5c24288b042490e812e3feff83f801746d8b4c242083f901742083ff01751b8b442410ff7424288b5c24108b78048b44240c89fa0bc0ff12eb128b4424088b58108b4424280bc0e8da66ffff8b7d008d7ff43b7d087303ff5520897d00c747fc020000008b742428897704c70705000000ff74240889fbb898a47941eb05e926000000e89ac4feff506aff8b5c242c8b442410ba4019794183c800e8cae3feff8b042483c420c20c008b4d008d49f43b4d087303ff5520894d00c741fc02000000c74104010000008b44242889018b75008d76f83b75087303ff5520897500c746fc01000000890e8b5d008d5bf03b5d087303ff5520895d00c743fc03000000ba38377a4189138b4c2408894b08894304575189da89f389d00bc0e82aebfeff8b0c2483f901746e8b44240c8b78108b44242ce87ae7feffa8017503ff553883f8017d02eb158b378b1e5023c3a801587503ff55383bc37d02eb0eb824ae744190ff552cbe01000000a8017503ff553889c283c20270f68b4c56fe89ce83fe0375388b4424088b3883ff03752d8b5c242c8b4004eb05e91f000000e87ee1feff83f80174158b74240c8b5e108b44242c83c800e86e65ffffeb1a8b442414ff74242c8b5c24148b78048b44241089fa83c800ff12ff742428ff7424108b5c24348b44241883c800e87a7affff8b75008d76f43b75087303ff5520897500c746fc020000008b5c242c895e04c706050000008b54240c8954242c89f3b898a479418b4c242083c42c51e9f5c2feff90|@3408,63|26,1,@435 36,0,-1 46,1,@336 53,0,@3201 58,1,@323 90,0,@224 98,0,@7320 146,1,@435 156,0,@3202 167,0,0 180,0,1 187,0,0 214,1,@2958 291,0,2 302,0,@3183 310,1,@2888 348,0,@2963 354,1,@2965 386,1,@2958 450,1,@3148 487,0,2 498,0,@3183 510,1,@2888 526,0,@2963 534,1,@2965 574,0,0 635,0,@3406 662,1,@2985 686,1,@2970 726,0,@51 735,0,0 790,1,@2958 814,1,@3148 866,1,@3214 903,0,2 918,0,@3183 931,1,@2888 3406:C2,120|3b650c7303ff55248b42088b78108b4204e852e6feffa8017503ff553883f8017d02eb158b178b0a5023c1a801587503ff55383bc17d02eb0eb824ae744190ff552cbe01000000a8017503ff553889c683c60270f68b4c72fe89cef7c6010000007503ff553883fe017e06b803000000c3b801000000c390|@3407,55|18,1,@2970 58,0,@51 67,0,0 108,0,1 114,0,0 3407:S35|5452414e535f54414228292e6c6f6164546f5370656369666963526567283529283129 3408:S32|5452414e535f54414228292e6c6f6164546f5370656369666963526567283529 3409:O3|@7320,@224,@3410 3410:S21|67656e546f537461636b3a206e6f20726573756c74 3411:C2,252|3b650c7303ff552450ff7024ff7028ff7424108b5c241c8b400483c800e8b2c2feff8b7c2408ff74241c8b5c241c8b4720e89ec2feff8b742414f7c6010000007503ff553889f383eb0270f6538b5c24208b44240cba4019794183c800e8a6e0feff8b142483fa017473b868397a418b54240490ff12bbffffffff8b44241c0bc0e8eaddfaff8b5424040bc0ff12b884397a418b54240490ff12bbffffffff8b4424180bc0e8c6ddfaff8b5424040bc0ff12b894397a418b54240490ff12bbffffffff8b4424140bc0e8a2ddfaff8b5424040bc0ff12b815000000eb05e90e0000008b5424048b4c240c83c42051ff22b80100000083c40cc2100090|@3415,63|30,1,@2889 50,1,@2889 86,0,@2963 94,1,@2965 107,0,@3412 119,0,-1 130,1,@336 143,0,@3413 155,0,-1 166,1,@336 179,0,@3414 191,0,-1 202,1,@336 215,0,10 241,0,0 3412:S17|6d616b65456e7472793a20696e6465783d 3413:S6|206c6f636e3d 3414:S5|207573653d 3415:S24|5452414e535f54414228292e6d616b65456e747279283629 3416:O2|@3417,@3198 3417:C2,896|3b650c7303ff552450508b7c240c5250538b470c90e89aeffaff83f801754bbbffffffff8b04240bc0e8c2dcfaff89c3b81cac7941e8aed8faff8b75008d76f03b75087303ff5520897500c746fc03000000894608bb54cf7441895e04bafcc1b441891689f090ff552c8d74240c8b1c24891e8d54240c8942048b4c24108b018b3883ffff756d8b742404f7c6010000007503ff553883fe017c07ba03000000eb05ba0100000083fa0375078b500489f0eb158b5004f7c6010000007503ff553889f083e80670f652bb090000000bc0ff15e09e04088b0c2483f901750db824ae7441ff552cbf0100000083f80175098b39eb27e952000000a8017503ff553889c683ee0270f689f08b49043b650c7303ff5524ebc3bf01000000576a0389fb8b442424ba40197941e85adefeff6aff8b5c240c8b442424ba40197941e846defeff8b042483c41cc2080083fffd75718b7004f7c6010000007442f7c601000000740489f2eb128b5004b894207541ff552c89d1ba0100000083fa01751f8b5c2418895c241cbb94027a41b8a0027a418b54241483c41c52e9a3befefff7c6010000007402eb5af7c60100000074108b4804b8c0207541ff552cba01000000eb05e96501000089f28b5afc81e3ffffff008d5c1b018b542404f6c2017503ff553883fa017c0a8b4804b803000000eb088b4804b80100000083f803750989d7eb14e943000000f6c2017503ff553889d783ef0670f65153bb0900000089f80bc0ff15e09e0408f7c001000000740489c6eb0ef640ff108b307402f7de8d7436018b1c243bde7604eb125650b86c3d7a4183c800ff552cb8010000006aff8b5c240c8b442424ba4019794183c800e816ddfeff8b542404f7c201000000740db8c0207541ff552cb90100000089d18b44240ca8017503ff553883f8017c07bf03000000eb05bf0100000083ff03750489c6eb0ea8017503ff553889c683ee0670f651bb0900000089f0ff15e09e0408f7c001000000740489c3eb0db894207541ff552cbb010000008b14248b4c5afe8b45008d40f43b45087303ff5520894500c740fc02000000894804c700fdffffff8b7c2424897c242889c3b8a0027a418b74242083c42856e915bdfeff50508b742410536a018d5c2408538b5c242c8b4424308b5604ff126aff8b5c24088b442424ba40197941e82edcfeff8b5424208b4a2c8b018b7a1c8b375089f3b8010000008d54242090e85e00000083c41cc20800|@3423,63|22,1,@435 32,0,-1 42,1,@336 49,0,@3201 54,1,@323 86,0,@224 94,0,@7320 156,0,1 163,0,0 202,0,4 210,0,I109 223,0,@51 231,0,0 279,0,0 293,0,@2963 298,1,@2965 313,0,@2963 318,1,@2965 363,0,@369 373,0,0 391,0,@3293 396,0,@3294 409,1,@2888 435,0,@372 443,0,0 490,0,1 500,0,0 536,0,4 546,0,I109 588,0,@3418 599,0,0 614,0,@2963 622,1,@2965 639,0,@372 647,0,0 670,0,1 677,0,0 706,0,4 714,0,I109 731,0,@369 739,0,0 779,0,-2 794,0,@3294 807,1,@2888 849,0,@2963 854,1,@2965 876,0,0 886,1,@3420 3418:O3|@7320,@224,@3419 3419:S35|696e646972656374202d20696e76616c696420636f6e7374616e742061646472657373 3420:C2,436|3b650c7303ff55248b7c24045323dff6c3015b7503ff55383bfb7c708b5a04528b5b108b42e483c800e83e5effff8b14248b4a048b412c8b388b711c8b1e5323dff6c3015b7503ff55383bfb7e048b3e89388b7d008d7ff03b7d087303ff5520897d00c747fc030000008b5af0895f088b42e4894704c707030000008b72048974240889fbb8783f7a41eb05e90800000083c404e9cfbbfeff8b720452505389fb8b460c90e832ebfafff7c00100000075728b188b1383fa03756e8b4c240483f90175108b7c24088b77048b4e2c8b44241089018b4424088b7b088b73048b58e489f00bc0e87ad9feff83f80174458b5c24088b53f0520bd7f6c2015a7503ff55383bfa752e6a038b4b048b5c241489c8ba4019794183c800e892dafeff8b442410eb0ae960000000e93100000083c40cc204008b5c2410f6c3017503ff553889da83c20270f6895424108b1c24b8030000008b54240883c40ce9a1feffff8b4c2410f6c1017503ff553889cf83c70270f6897c24108b1c248b4424048b54240883c40ce977feffff8b5c2410f6c3017503ff553889da83c20270f6895424108b1c248b4424048b54240883c40ce94dfeffff90|@3422,63|42,1,@3148 120,0,1 134,0,@3421 149,1,@2888 166,1,@435 230,1,@2958 274,0,@2963 282,1,@2965 335,0,1 3421:S8|696e646972656374 3422:S32|5452414e535f54414228292e696e646972656374283429736561726368283329 3423:S23|5452414e535f54414228292e696e646972656374283429 3424:O1|@3425 3425:C2,8|b801000000c30bc0|@3426,1|1,0,0 3426:S39|475f434f444528292e636f646567656e2831302967656e636465283629726573756c742d283129 3427:C2,228|3b650c7303ff552483fb0175408b5af883fb0174328b42fcff7004bb94027a41b8a0027a41e8bab9feff89c78b45008d40f83b45087303ff5520894500c740fc010000008938c3b801000000c38b3b8b3783fef975335250ff73046a016affff7208ff72048b0bbb0300000089c88b52fc83c800ff128b1c248b4424048b54240883c40ce977ffffff8b4b0483f901751e8b3c24890424ff720cff7208ff72048b33bb0300000089f08b52fc57ff225250516a016affff7208ff7204ff33bb030000008b04248b52fc83c404ff128b1c248b4424048b54240883c40ce91fffffff83c800|@3428,63|28,0,@3293 33,0,@3294 38,1,@2888 72,0,0 104,0,1 163,0,1 191,0,1 3428:S47|475f434f444528292e636f646567656e2831302967656e636465283629726573756c742d636f64654c697374283229 3429:O2|@3430,@2978 3430:C2,308|3b650c7303ff5524505089d65053ff700c6a01bb81000000b81700000083c800ff15a0920408c700150000008b5d008d5bf43b5d087303ff5520895d00c743fc02000000894304c703ffffffff8b55008d52f83b55087303ff5520895500c742fc01000040891a8d4c240c89118d44240cc74004010000008b7d008d7ff43b7d087303ff5520897d00c747fc020000008b5c240c891f8b5424108957048b45008d40f03b45087303ff5520894500c740fc03000000b9c0427a4189088b5c240889580889780456578b542424ff128b55008d52ec3b55087303ff5520895500c742fc04000000b9b4437a41890a8b44241089420c8b3c24897a088b7424088972048b5c24048b4c2420894c24248b7c240c897c24208b74241c8944241c8b430489d389c7b80100000089fa83c41c56ff2283c800|@3436,63|20,0,64 25,0,11 34,0,I11 40,0,10 73,0,-1 116,0,0 182,0,@3431 231,0,@3433 293,0,0 3431:C2,180|3b650c7303ff552450508b7a08525089c38b470c90e8aae6faff83f801754bbbffffffff8b04240bc0e8d2d3faff89c3b81cac7941e8becffaff8b75008d76f03b75087303ff5520897500c746fc03000000894608bb54cf7441895e04bafcc1b441891689f090ff552c8d7424088b1c24891e8d5424088942048b4c2404ff71048b5c240c8b042490e836e6faffa8017503ff553889c783c70270f68b742414897c24148b5c240c8b042483c41456e9b0b7feff|@3432,63|22,1,@435 32,0,-1 42,1,@336 49,0,@3201 54,1,@323 86,0,@224 94,0,@7320 138,1,@435 176,1,@2889 3432:S28|5452414e535f54414228292e70757368416c6c427574283429283129 3433:C2,196|3b650c7303ff55248b7a0c525089c38b470c83c800e8b6e5faff83f8017510b894447a4183c800ff552cb8010000008b742404ff30ff7004ff7008ff700c8b5c24108b4608e886e5faff8b5c24085323d8f6c3015b7503ff55383bd87e09b80300000083c418c38b1424f6c2017503ff553883fa017f02eb418b4c24148b45008d40ec3b45087303ff5520894500c740fc04000000c7400cffffffff8b7c24048978088958048b74240c8930508b5c24148b410490e8b6b6feffb80100000083c418c390|@3432,63|22,1,@435 32,0,@3434 43,0,0 70,1,@435 95,0,1 152,0,-1 182,1,@2889 187,0,0 3434:O3|@7320,@224,@3435 3435:S20|70757368416c6c4275743a206e6f20656e747279 3436:S25|5452414e535f54414228292e70757368416c6c427574283429 3437:C2,84|3b650c7303ff552483f8017506b801000000c352ff70048b00e852000000508b4424048b5424080bc0e8d2ffffff8b7d008d7ff43b7d087303ff5520897d00c747fc020000008947048b3424893789f883c40cc3|@413,63|14,0,0 26,1,@3438 3438:C2,244|3b650c7303ff55248b3883fff9757252ff7004ff7008ff700c6aff6affff72086a01bb030000008b4424148b52fc0bc0ff12f7c00100000075048b30eb0db820387a41ff552cbe010000008b5c240c8b53fc5050566a038d4c2408518b5a048b4208ba08aa79410bc0e85e64ffff8b44240c8b3083fef375298b58048b531ceb05e96000000083fa017510b864467a4183c800ff552cbf01000000bf01000000eb05bf010000008b5c24148b53fc8b4c240883f9017507bf03000000eb05bf0100000089f983f102ff742404ff742414516a018b5a088b4204e81ef2ffff8b44240483c418c3b89c467a41ff552cb80100000090|@3443,63|35,0,1 63,0,@3409 71,0,0 99,0,@3198 106,1,@3200 140,0,@3439 151,0,0 156,0,0 163,0,0 184,0,1 191,0,0 218,1,@3411 231,0,@3441 239,0,0 3439:O3|@7320,@224,@3440 3440:S29|4c6f6f704172673a20737461746963206c696e6b2066756e6374696f6e 3441:O3|@7320,@224,@3442 3442:S29|67656e4c6f6f704172673a206e6f742061206465636c61726174696f6e 3443:S49|475f434f444528292e636f646567656e2831302967656e636465283629726573756c742d67656e4c6f6f70417267283129 3444:O1|@3445 3445:C2,8|b803000000c30bc0|@3446,1|1,0,1 3446:S28|5452414e535f54414228292e636c6561724361636865283129283129 3447:C2,24|3b650c7303ff5524538d542404e82200000083c404c30bc0|@3455,63|14,1,@3448 3448:C2,84|3b650c7303ff552483f8017506b801000000c352ff70048b00e852000000508b4424048b5424080bc0e8d2ffffff8b7d008d7ff43b7d087303ff5520897d00c747fc020000008947048b3424893789f883c40cc3|@413,63|14,0,0 26,1,@3449 3449:C2,148|3b650c7303ff55248b7afc89c38b470c90e86ae1faff83f8017510b8b4487a4183c800ff552cb8010000008b308b1e83fbfb75258b45008d40f43b45087303ff5520894500c740fc020000008b5604895004c700ffffffffc383fb0575258b45008d40f43b45087303ff5520894500c740fc020000008b5604895004c70001000000c3b8e4487a4183c800ff552cb80100000090|@3454,63|18,1,@435 28,0,@3450 39,0,0 84,0,-1 126,0,0 132,0,@3452 143,0,0 3450:O3|@7320,@224,@3451 3451:S21|6765744c6f6f70446573743a206e6f20656e747279 3452:O3|@7320,@224,@3453 3453:S29|6765744c6f6f70446573743a2077726f6e6720656e7472792074797065 3454:S48|5452414e535f54414228292e6765744c6f6f7044657374696e6174696f6e732832296765744c6f6f7044657374283129 3455:S34|5452414e535f54414228292e6765744c6f6f7044657374696e6174696f6e73283229 3456:O3|@7320,@224,@3457 3457:S27|4e6f20426567696e4c6f6f7020666f72204c6f6f7020696e737472 3458:C2,204|3b650c7303ff5524f7c001000000755ef7c301000000755b8b3b8b0f83f901751f8b75008d76f83b75087303ff5520897500c746fc010000008b4f04890eeb05beffffffff52ff7004ff7304566affff72086a01bb030000008b008b52fc0bc0ff12f7c001000000750e8b38eb19e953000000e948000000b89c4a7a410bc0ff552cbf01000000578b5c24048b4424088b54240c90e866ffffff8b75008d76f43b75087303ff5520897500c746fc020000008946048b1c24891e89f083c410c3b801000000c3b801000000c3|@3461,63|65,0,-1 85,0,1 121,0,@3459 131,0,0 193,0,0 199,0,0 3459:O3|@7320,@224,@3460 3460:S18|6576616c4172673a206e6f20726573756c74 3461:S15|4c697374506169722e6d6170283329 3462:C2,288|3b650c7303ff552483f801751a83fb017506b801000000c3b81c4c7a410bc0ff552cb801000000f7c30100000075738b3b8b3783fe01756f52ff30ff77048b5b048b400490e8b6ffffff8b5c24088b53fc50ff742404ff74240c6a018b5a048b4208ba8c167a410bc0e826e8ffff8b4c240c8b79fc8b77045056ff76288b5e108b44241090e8aa50ffff8b1c2483fb017420ff742404bb544c7a41b840970408eb0ae96a000000e93100000090e8d6b1feff8b55008d52f43b55087303ff5520895500c742fc020000008b4c240c894a048b442408890289d083c41cc38b4afc52ff7004ff7304ff30ff77048b59048b4108ba684c7a410bc0e8a60000008b1c248b4424048b54240883c40ce9effeffffb81c4c7a4190ff552cb80100000090|@3488,63|19,0,0 25,0,@3463 35,0,0 99,0,@3339 106,1,@3405 134,1,@3148 151,0,@3465 156,0,I48 174,1,@2893 243,0,@3466 250,1,@3468 274,0,@3463 283,0,0 3463:O3|@7320,@224,@3464 3464:S30|6d6f7665417267733a204d69736d61746368656420617267756d656e7473 3465:S12|6c6f636b5265676973746572 3466:O3|@3468,@3467,@3198 3467:O2|@3484,@3199 3468:C2,1140|3b650c7303ff55245350528b7b308b378b4c2410510bcef6c101597503ff55383bf17507be03000000eb05be010000005050568b7b0c8b5c242089f890e8bedcfaff83f801754bbbffffffff8b44242090e8e6c9faff89c3b81cac7941e8d2c5faff8b75008d76f03b75087303ff5520897500c746fc03000000894608bb54cf7441895e04bafcc1b441891689f090ff552c8d7424048b5c2420891e8d5424048942048b4c24088b018b3883fffd75708b342483fe017419ff70048b1c24b8f1ffffff0bc0e8c603000083f8017471eb05ff7004eb6a8b5c2410ff7424148b53048b5c241c8b44242483c800ff12ff34246a11ff74241cbb11000000b8f1ffffffe89a67ffff6aff8b5c24288b44241cba40197941e8bacbfeff8b4c2418eb05e9e30000008b41308b38f7c7010000007503ff553889fe83c60270f68930eb726a01bbffffffff8b4424040bc0e8a206000083f80174608b5c2410ff7424148b53048b5c241c8b4424240bc0ff128b4c24188b41308b388b74242089fb23def6c3017503ff553889fb2bde8d5b0170f4f6c3017503ff553889da83ea0270f6bf0900000089d323dff6c3017503ff5538eb0ae984020000e93c0000005052d1fa8d47fff7ea8d58015a5870e16a096aff6a11ff7424208b44241083c800e8620600006aff8b5c24288b44241cba40197941e8decafeffeb71b8010000008d54241ce8ce0b0000eb6683ff0375668b342483fe01741c8b7004ff7008bb110000008b41080bc0e85ec9feff83f8017471eb08ff70088b7004eb6c8b5c241056ff7424188b53048b5c24208b44242883c800ff12bb190000008b4424180bc0e84ee1feffb8d4117641eb0fe9cd010000e9c8010000e97900000090e85ef3feff8b5c241883c800e80afefeff6a0dff74241c8b5c24088b44240c90e8760cffffeb0ae938000000e9330000006aff8b5c242c8b442420ba40197941e816cafeff8b4c241c8b41308b38f7c7010000007503ff553889fe83c60270f68930eb70b8010000008d54241c83c800e8e60a000050eb6183fffb75618b342483fe0174178b7004bb110000008b4108e87ac8feff83f8017471eb058b7004eb6f8b5c240c56ff7424148b53048b5c241c8b4424240bc0ff128b4c24188b41308b38f7c7010000007503ff553889fe83ee02eb0fe9e6000000e9e1000000e9ca00000070e5bb0900000089f223d3f6c2017503ff55385089f2d1fa8d43fff7ea8d50015870ed8b3c24eb0ae989000000e98400000089fe23f2f7c6010000007503ff55388d77ff03f270f656bb190000008b44241883c800e8fadffeffb8d41176410bc0e81af2feff8b5c241883c800e8c6fcfeff6a0dff74241cbb090000008b442408e8320bffff6aff8b5c242c8b442420ba40197941e8dec8feff8b5c241c8b53308b0af6c1017503ff553889c883c00270f68902eb26b8010000008d5424180bc0e8b20900005050eb12b8010000008d5424180bc0e89e090000505083c4048b7424188b5e308b138b4e188b015223d0f6c2015a7503ff55383bd07e0f8b3b8939b80100000083c41cc20800b80100000083c41cc2080090|@3483,63|37,0,1 44,0,0 62,1,@435 72,0,-1 82,1,@336 89,0,@3201 94,1,@323 126,0,@224 134,0,@7320 191,0,-8 198,1,@3469 248,0,8 253,0,-8 258,1,@3215 273,0,@2963 278,1,@2965 323,0,-1 334,1,@3471 416,0,4 478,1,@3473 493,0,@2963 498,1,@2965 505,0,0 514,1,@3480 540,0,8 550,1,@2958 595,0,12 606,1,@3004 611,0,@1251 634,1,@3038 646,1,@3052 666,1,@3088 693,0,@2963 698,1,@2965 734,0,0 746,1,@3480 770,0,8 778,1,@2958 863,0,4 934,0,12 946,1,@3004 951,0,@1251 958,1,@3038 970,1,@3052 981,0,4 990,1,@3088 1005,0,@2963 1010,1,@2965 1043,0,0 1054,1,@3480 1063,0,0 1074,1,@3480 1118,0,0 1129,0,0 3469:C2,804|f7c001000000741583f8ef7c1583f8137f15bf42517a418d7c8744ffe7e9a4000000e99f000000e99a0000009090e9a7000000909090e9ab000000909090e9e3000000909090e995000000909090e973000000909090e96b000000909090e963000000909090e963000000909090e953000000909090e94b000000909090e943000000909090e941010000909090e933000000909090e92b000000909090e9d1010000909090e941000000909090e913000000909090e919000000909090e95902000090909089d8ff25609e0408b801000000c3b801000000c3b801000000c3b803000000c3b803000000c3f7c301000000742cf7c301000000740489deeb0fb8942075410bc0ff552cbe0100000083fe057506b803000000c3b801000000c3b801000000c3f7c301000000745df7c301000000740489deeb0db894207541ff552cbe01000000f7c6010000007503ff553883fe017e5b56bb030000008b14245323daf6c3015b7503ff55383bda7d29f6c3017503ff55388d43ff03c370f689c33b650c7303ff5524ebd2e936000000b80100000083c404c3530bdaf6c3015b7503ff55383bda750eb80300000083c404c3e909000000b80100000083c404c3b801000000c3b801000000c3f7c301000000745ff7c301000000740489deeb0fb8942075410bc0ff552cbe01000000f7c6010000007503ff553883fe017e5b56bb030000008b14245323daf6c3015b7503ff55383bda7d29f6c3017503ff55388d43ff03c370f689c33b650c7303ff5524ebd2e936000000b80100000083c404c3530bdaf6c3015b7503ff55383bda750eb80300000083c404c3e909000000b80100000083c404c3b801000000c3b801000000c3f7c301000000745ff7c301000000740489deeb0fb8942075410bc0ff552cbe01000000f7c6010000007503ff553883fe017e5b56bb030000008b14245323daf6c3015b7503ff55383bda7d29f6c3017503ff55388d43ff03c370f689c33b650c7303ff5524ebd2e936000000b80100000083c404c3530bdaf6c3015b7503ff55383bda750eb80300000083c404c3e909000000b80100000083c404c3b801000000c3b801000000c3b801000000c30bc0|@3470,61|19,0,$3469+46 202,0,I105 207,0,0 213,0,0 219,0,0 225,0,1 231,0,1 257,0,@369 267,0,0 277,0,1 283,0,0 289,0,0 315,0,@369 323,0,0 345,0,1 401,0,0 426,0,1 440,0,0 449,0,0 455,0,0 481,0,@369 491,0,0 513,0,1 569,0,0 594,0,1 608,0,0 617,0,0 623,0,0 649,0,@369 659,0,0 681,0,1 737,0,0 762,0,1 776,0,0 785,0,0 791,0,0 797,0,0 3470:S27|49333836434f4445434f4e5328292e696e73747249735249283229 3471:C2,16|8b1c2483c40853ff25609e040883c800|@3472,13|9,0,I105 3472:S26|49333836434f4445434f4e5328292e697353746f726549283329 3473:C2,968|3b650c7303ff55248b7c240c83ffff75638b742404f7c0010000007402eb5af6c3017503ff553881fb01ffffff7c10f6c3017503ff553881fb010100007c3f5053bb1d00000089f090e81edbfeff8b54241083fa117507bb05000000eb05bb0300000089d98b5c240c89c80bc0e872030000eb60e9d1010000e9a600000083fb0175628b54241083fa01755e8b4c240883f911755a5053ff36bb1b00000089f090e8c6dafeff8b04248b38bb0900000089f80bc0ff15009f040883f8017502eb33a8017503ff553883f8017c0cbe03000000eb0ae94d000000be0100000083fe037411eb13e932000000e92d000000e92800000089c6eb0ea8017503ff553889c683c60870f683fe0775148b5c2410b80300000090e8ca020000eb0350535083c404eb025053bb190000008b44240c0bc0e836dafeffb8f8e379410bc0e856ecfeff8b5c240c83c800e802f7feff8b5c241083fb1175156a01ff7424108b5c24208b442408e86605ffffeb268b1424f6c2017503ff553889d183e90470f6536aff6a01ff7424188b5c242889c8e84628ffff8b442404f7c001000000746ff7c001000000740489c7eb0db894207541ff552cbf01000000f7c7010000007503ff55388d77ff03f770f6f7c6010000007503ff553889f383c30270f68b54240c8b0a8b01a8017503ff553889c783c70870f689398b72088974241889df89c389f88b7c240883c41857e937effeff8b7d008d7ff43b7d087303ff5520897d00c747fc02000000894704c707030000008b74240c89742418bb0100000089f88b54240883c41852e9567bfffff7c001000000750db8e8597a41ff552cb801000000f7c001000000740489c6eb10b89420754183c800ff552cbe010000008b54240883fa1175545356bb190000008b44240c0bc0e8d6d8feffb82c5a7a410bc0e8f6eafeff8b5c240c83c800e8a2f5feff6a01ff7424108b5c24208b44240c90e80e04ffff8b4c240c89cb8b04248b7c240883c41c57e978f5feff5356bb190000008b44240c0bc0e882d8feffb8e88079410bc0e8a2eafeff8b5c240c83c800e84ef5feff8b4c2410f6c1017503ff553889c881c0d001000070f38b5c240c90e82ef5feffbb190000008b44240c0bc0e83ad8feffb82c5a7a410bc0e85aeafeff8b5c240c83c800e806f5feffff7424106a016a01ff7424188b5c24288b44241483c800e87226ffff8b5c240c8b0424e8def4feffbb190000008b44240c0bc0e8ead7feffb8f88079410bc0e80aeafeff8b5c240c83c800e8b6f4feff8b7c24108b74240c897c2418c744241401000000897c24108974240c89fbb80300000083c408e91326ffff83c800|@3479,63|66,0,14 74,1,@3004 88,0,2 95,0,1 110,1,@3474 154,0,13 162,1,@3004 172,0,4 182,0,I110 206,0,1 218,0,0 272,0,1 278,1,@3474 295,0,12 306,1,@3004 311,0,@3266 318,1,@3038 330,1,@3052 358,1,@3088 398,1,@3105 427,0,@369 435,0,0 521,1,@3042 554,0,1 567,0,0 582,1,@3216 595,0,@3476 603,0,0 620,0,@369 631,0,0 647,0,12 658,1,@3004 663,0,@3478 670,1,@3038 682,1,@3052 702,1,@3088 724,1,@3052 731,0,12 742,1,@3004 747,0,@3107 754,1,@3038 766,1,@3052 798,1,@3052 803,0,12 814,1,@3004 819,0,@3478 826,1,@3038 838,1,@3052 866,1,@3105 878,1,@3052 883,0,12 894,1,@3004 899,0,@3109 906,1,@3038 918,1,@3052 938,0,0 953,0,1 961,1,@3105 3474:C2,256|3b650c7303ff55248b3b8b3789c223d6f6c2017503ff553889c22bd68d520170f453bb0900000089d083c800ff15009f040883f8017502eb1fa8017503ff553883f8017c07b903000000eb05b90100000083f9037402eb0489c1eb0ea8017503ff553889c183c10870f683f9037526bb190000008b04240bc0e80ad7feffb8584279410bc0e82ae9feff8b1c2483c404e9d7f3feff83f9057534bb190000008b042483c800e8ded6feffb8c49079410bc0e8fee8feff8b1c24e8aef3feff8b1c24b88101000083c404e99ef3feff83f90775228b4c2404c7442404010000008b0424890424bb01000000b80500000051e92b2fffffb80100000083c404c30bc0|@3475,63|35,0,4 46,0,I110 70,0,1 77,0,0 112,0,12 122,1,@3004 127,0,@3037 134,1,@3038 145,1,@3052 155,0,12 166,1,@3004 171,0,@3132 178,1,@3038 186,1,@3052 194,0,192 202,1,@3052 219,0,0 230,0,0 235,0,2 241,1,@3125 246,0,0 3475:S23|49333836434f4445434f4e5328292e616c69676e283229 3476:O3|@7320,@224,@3477 3477:S42|67656e53746f7265493a2073746f72696e67206c6f6e6720636f6e7374616e7420617320612062797465 3478:O1|12 3479:S27|49333836434f4445434f4e5328292e67656e53746f726549283629 3480:C2,520|3b650c7303ff552450508b7af452ff72086a018d74240c568b5afc8b42f88b570883c800ff128b1c248b53fc52ff72288b5a108b44240c0bc0e87e41ffff8b0c2483f9017414ff742404bb544c7a41b84097040890e8b6a2feff8b4424088b78f4ff70f88b58fc8b40048b570483c800ff128b7424088b5efc8b53308b0a8b4604510bc8f6c101597503ff55383bc875738b7c240c83ff13753eff76f8bb190000008b0424e832d5feffb8d41176410bc0e852e7feff8b1c24e802f2feff6a0dff742404bb0b000000b80900000083c800e86a00ffffeb518b4d008d49f43b4d087303ff5520894d00c741fc02000000897904c701ddffffffff76f851bb19000000eb05e93f0000008b442404e8cad4feff8b0424e8eee6feff8b5c240483c800e89af1feff83c4048b44240c8b78fc8b77308b1ef6c3017503ff553889da83c20270f68916eb638b3a89f923c8f6c1017503ff553889f92bc88d490170f4f6c1017503ff553889cf83ef0270f6b90900000089fb23d9f6c3017503ff5538505289fad1fa8d41fff7ea8d58015a5870eb8b5424086a096aff6a11ff72f88b44241c83c800e8421effff508b4c240c8b41fc50ff70288b58108b442418e84ac0feff8b3c2483ff017414ff742404bb7c5c7a41b84097040890e832a1feff8b7424148b5c2420c7442420ffffffff89da8b5c241c8b46fc89d1ba4019794183c42051e9f9bcfeff90|@3482,63|58,1,@3148 75,0,@3465 80,0,I48 86,1,@2893 158,0,12 166,1,@3004 171,0,@1251 178,1,@3038 186,1,@3052 197,0,5 202,0,4 210,1,@3088 245,0,-18 254,0,12 270,1,@3004 278,1,@3038 290,1,@3052 367,0,4 422,1,@3103 446,1,@2969 463,0,@3481 468,0,I48 474,1,@2893 490,0,-1 506,0,@2963 515,1,@2965 3481:S14|756e6c6f636b5265676973746572 3482:S49|5452414e535f54414228292e73746f7265496e537461636b28342967656e6572616c53746f7265496e537461636b283129 3483:S27|5452414e535f54414228292e73746f7265496e537461636b283429 3484:C2,96|3b650c7303ff5524a8017503ff553883f8017c448b7b308b375023c6a801587503ff55383bc67d30ff730c5352508b4b1c8b31f7c6010000007503ff553889f283ea0270f689d08d5424100bc0e82a00000083c410c20400b801000000c20400|@3487,63|78,1,@3485 89,0,0 3485:C2,464|3b650c7303ff5524a8017503ff553883f8017d06b801000000c38b7af8525089c38b470c90e8eacbfafff7c00100000075668b308b1e83fbfb75628b5424048b4af0bff9ffffff89cb23dff6c3017503ff5538505289cad1fa8d47fff7ea8d58015a5870eb8b7e04530bdff6c3015b7503ff55383bfb7574ff7004ff7008bb110000008b042483c800e8a2acfeff83f801740f8b1c24eb59e90b010000e9020100008b5c240c8b53f4ff76048b4bf88b430489c389c88b520483c800ff128b7c24108b77f88b5e308b13f6c2017503ff553889d183e90270f6ba0900000089cf23faf7c701000000750feb0ae9af000000e946000000ff553850528d41ffd1faf7ea8d78015a5870e18b142489d123cff6c1017503ff55388d4aff03cf70f68b7c24105050ff7704bb0900000089c80bc0e8b200ffff8b1c2483c4088b75008d76f43b75087303ff5520897500c746fc02000000895e04c706050000008b5d008d5bec3b5d087303ff5520895d00c743fc04000000c7430cffffffffc74308110000008b54240489530489338b4c240c538b5c240c8b41fc90e8169cfeffeb0a5050eb065050eb0250508b742408f7c6010000007503ff553889f383eb0270f689d88b54240c83c410e932feffff0bc0|@3486,63|21,0,0 38,1,@435 67,0,-4 127,0,8 138,1,@2932 218,0,4 297,0,4 306,1,@3094 345,0,2 376,0,-1 383,0,8 410,1,@2889 3486:S56|5452414e535f54414228292e6c6f6164456e7472794265666f72654f76657277726974696e6728332966696e64546865456e747279283129 3487:S41|5452414e535f54414228292e6c6f6164456e7472794265666f72654f76657277726974696e67283329 3488:S47|475f434f444528292e636f646567656e2831302967656e636465283629726573756c742d6d6f766541726773283229 3489:C2,512|3b650c7303ff55248b7c240483fb01747050ff37ff7704bb1900000089f883c800e806d0feffb8e0e379410bc0e826e2feff8b5c241083c800e8d2ecfeff8b5c2410b8cb0000000bc0e8c2ecfeff8b5c2410b8190000000bc0e8b2ecfeff8b5c2410b8f0e379410bc0e82627ffff8b75008d76f43b75087303ff5520897500eb05e966000000c746fc02000000c7460401000000890656bb190000008b44241490e886cffeffb8d41176410bc0e8a6e1feff8b5c241483c800e852ecfeff8b5c2414b8ab0000000bc0e842ecfeff8b5c2414b8490000000bc0e832ecfeff8b5c24148b0424e87af3feffeb0750ff37ff770450bb190000008b44241490e82acffeff8b7424088b1e8b54240c89d123cbf6c1017503ff553889d12bcb8d490170f4f6c1017503ff553889c883e80470f6a8017503ff553881f801ffffff7c45a8017503ff553881f8010100007d3650bb190000008b44241890e8cecefeffb8104d79410bc0e8eee0feff8b5c241883c800e89aebfeff8b5c24188b0424e8cef5feffeb6651bb190000008b44241883c800e896cefeffb81c5179410bc0e8b6e0feff8b5c241883c800e862ebfeff8b3c24f7c7010000007503ff553889fe83ee0a70f68b5c24188b138b0af6c1017503ff553889c883c00870f68902ff730889cb89f00bc0e81ae4feff8b7c2408c70703000000b80100000083c414c2040090|@3490,63|24,0,12 34,1,@3004 39,0,@3264 46,1,@3038 58,1,@3052 67,0,101 74,1,@3052 83,0,12 90,1,@3052 99,0,@3265 106,1,@3115 144,0,0 152,0,12 162,1,@3004 167,0,@1251 174,1,@3038 186,1,@3052 195,0,85 202,1,@3052 211,0,36 218,1,@3052 230,1,@3068 244,0,12 254,1,@3004 336,0,12 346,1,@3004 351,0,@3051 358,1,@3038 370,1,@3052 382,1,@3073 390,0,12 402,1,@3004 407,0,@3059 414,1,@3038 426,1,@3052 486,1,@3042 496,0,1 501,0,0 3490:S26|49333836434f4445434f4e5328292e6a756d706261636b283329 3491:C2,32|8b7a04500bc7a801587503ff55383bc77506b803000000c3b801000000c30bc0|@3492,37|19,0,1 25,0,0 3492:S35|5452414e535f54414228292e707573685370656369666963456e747279283329283129 3493:C2,84|3b650c7303ff552483f8017506b801000000c352ff70048b00e852000000508b4424048b5424080bc0e8d2ffffff8b7d008d7ff43b7d087303ff5520897d00c747fc020000008947048b3424893789f883c40cc3|@413,63|14,0,0 26,1,@3494 3494:C2,244|3b650c7303ff55248b7afc89d689c38b470483c800e87244ffff8b56fca8017503ff553889c783c70270f65050565350578d4c2410518b5a088b4204ba30647a41e8ea0000008b45008d40f43b45087303ff5520894500c740fc020000008b7c240c89388b7424108970048b5c2408506aff6affff73086a018b53fcbb030000008b44241883c800ff12f7c00100000075048b08eb0db820387a41ff552cb9010000008b44240c8b78fc8b742404f7c6010000007503ff553889f383c30470f651538b5f048b4708ba40647a41e8e20100008b54240c8b4afc6aff89c38b4104ba40197941e84eb5feff8b042483c418c383c800|@3512,63|22,1,@3189 61,0,@3495 66,1,@3497 125,0,1 151,0,@3409 159,0,0 201,0,@3496 206,1,@3500 225,0,@2963 230,1,@2965 3495:O3|@3497,@3496,@3199 3496:O3|@3500,@3499,@3466 3497:C2,312|3b650c7303ff55245250538b52080bc0ff128b7c24048b771c8b1e8b55008d52f83b55087303ff5520895500c742fc01000040c702010000008b4d008d49f43b4d087303ff5520894d00c741fc02000000894104c701e5ffffff50535251bb190000008b4424100bc0e876cbfeff8b0424e89addfeff8b5c241083c800e846e8feff8b45008d40f43b45087303ff5520894500c740fc020000008b7c2404897804c700ffffffffff742410bb0100000090e8626dffff8b75008d76f43b75087303ff5520897500c746fc020000008b5c240c895e04c70605000000ff74241489f3b898a4794183c800e8d294feff8b54241850ff7424288b5c241c8b4424188b52040bc0ff126aff89c38b442418ba401979410bc0e8eeb3feff8b4c24208b44240489018b7c2408897904b80100000083c41cc208000bc0|@3498,63|53,0,0 86,0,-14 95,0,12 106,1,@3004 114,1,@3038 126,1,@3052 163,0,-1 172,0,0 178,1,@3216 215,0,2 226,0,@3183 234,1,@2888 271,0,@2963 278,1,@2965 300,0,0 3498:S26|5452414e535f54414228292e7075736841646472657373283429 3499:O2|@3505,@3199 3500:C2,248|3b650c7303ff55248b7c2404f7c7010000007503ff553889fe83ee0270f6525053ff742414568b520883c800ff128b1c248b53308b0a8b4424105123c8f6c101597503ff55383bc87e148b742408508b4424088b56040bc0ff1289c7eb05bf010000008b7c2410f7c7010000007503ff553889fe83ee0270f6bbf9ffffff89f223d3f6c2017503ff55385089f2d1fa8d43fff7ea8d50015870ed8b4d008d49f43b4d087303ff5520894d00c741fc02000000895104c701fbffffffff342489cbb8e8667a41e87293feff8b3c248b77308b1e8b542410530bdaf6c3015b7503ff55383bda740c89c1b800677a410bc0ff552c83c40cc20800|@3504,63|95,0,0 122,0,-4 183,0,-3 193,0,@3501 198,1,@2888 233,0,@3502 3501:S16|7075736856616c7565546f537461636b 3502:O3|@7320,@224,@3503 3503:S40|7075736856616c7565546f537461636b3a20436f756c646e2774207075736820746f20737461636b 3504:S31|5452414e535f54414228292e7075736856616c7565546f537461636b283429 3505:C2,196|3b650c7303ff55248b7b308b37ff730c5053528b4b1c8b11f6c2017503ff553889d083e80270f6ff7328568d5424180bc0e8aa0000008b7c240c8b77308b1e8b1424530bdaf6c3015b7503ff55383bda7408b8786a7a41ff552c8b0e8b44241c89cb23d8f6c3017503ff553889cb2bd88d5b0170f489da8b5c241089d0e8e63fffff8b4c240c8b41308b7c241c89388b74240483fe01741f8b44241090e836c0feff8b5c240c895c241cbbc06a7a4183c418e94995feffb80100000083c418c204000bc0|@3511,63|50,1,@3506 83,0,@3508 126,1,@3190 158,1,@2996 171,0,@3510 179,1,@2893 184,0,0 3506:C2,480|3b650c7303ff5524a8017503ff553883f8017d06b801000000c38b7af4525089c38b470c90e812c1fafff7c00100000075728b308b1e83fbfb756e8b5424048b4a04f6c1017503ff553889cf83ef0270f6bbf9ffffff89fa23d3f6c2017503ff55385089fad1fa8d43fff7ea8d50015870ed8b4e045123caf6c101597503ff55383bca7d70ff7004ff7008bb110000008b04240bc0e8bea1feff83f801740f8b0424eb77e90f010000e9060100008b44240c8b78f0518b58f88b40f48b570490ff128b7424108b5ef48b53308b0af6c1017503ff553889cf83ef0270f6b9f9ffffff89fe23f1f7c6010000007503ff55385052eb05e9b600000089fad1fa8d41fff7ea8d70015a5870e48b0c2489cf23fef7c701000000750aeb05e928000000ff553889cf2bfe8d7f0170ed8b7424105050ff76f8bb0900000089f890e8cef5feff8b042483c4088b5c240c8b55008d52f43b55087303ff5520895500c742fc02000000894204c702050000008b4d008d49ec3b4d087303ff5520894d00c741fc04000000c7410cffffffffc74108110000008b4424048941048911518b7bfc8b5c240c89f883c800e82e91feffeb0a5050eb065050eb0250508b742408f7c6010000007503ff553889f383eb0270f689d88b54240c83c410e922feffff0bc0|@3507,63|21,0,0 38,1,@435 82,0,-4 140,0,8 150,1,@2932 222,0,-4 310,0,4 318,1,@3094 361,0,2 392,0,-1 399,0,8 426,1,@2889 3507:S43|5452414e535f54414228292e726573657442757452656c6f61642833296c6f6164456e7472696573283129 3508:O3|@7320,@224,@3509 3509:S47|726573657442757452656c6f61643a206d75737420686176652070757368656420736f6d657468696e67206d6f7265 3510:S14|726573657442757452656c6f6164 3511:S29|5452414e535f54414228292e726573657442757452656c6f6164283329 3512:S45|475f434f444528292e636f646567656e2831302967656e636465283629726573756c742d67656e546167283129 3513:C2,96|3b650c7303ff552483f8017506b801000000c38b7afc52ff7004ff7704ff77088b5ae48b00e852000000508b4424048b5424080bc0e8c6ffffff8b75008d76f43b75087303ff5520897500c746fc020000008946048b1c24891e89f083c40cc3|@413,63|14,0,0 38,1,@3514 3514:C2,288|3b650c7303ff552453ff30ff7004ff742414bb01000000b810477a4190e862b5feff8b7c24148b77308b5c2408891e8b17c702010000008b4f14c701010000008b471c8b18f6c3017503ff553889de83ee0270f68b5d008d5bf43b5d087303ff5520895d00c743fc02000000baf06c7a4189138b142489530489f089da83c800ff128b480883f9017441508b7804b80100000089fa83c800ff12ff74241889c3b801000000ba4c19794183c800e842aefeff8b3424b8010000008b16ff1283c4043b650c7303ff5524ebb78b7c2410ff37ff7704ff7734bb1f00000089f883c800e89ac3feff8b5c241cb8050000000bc0e802ecffff8b742404c706010000008b5c24088b138b0c2489118b038b7c24108907b80100000083c418c208000bc0|@3518,63|19,0,0 24,0,@3444 30,1,@2985 51,0,0 60,0,0 109,0,@3515 143,0,0 161,0,0 166,0,@2964 174,1,@2968 182,0,0 216,0,15 226,1,@3004 235,0,2 242,1,@3474 252,0,0 276,0,0 3515:C2,136|8b7a045023c7a801587503ff55383bc77c07be03000000eb05be010000008b5d008d5bf03b5d087303ff5520895d00c743fc03000000b9946d7a41890b8953088943048b4d008d49f43b4d087303ff5520894d00c741fc02000000bfd46d7a4189398941048b45008d40f03b45087303ff5520894500c740fc030000008970088948048918c30bc0|@3168,63|19,0,1 26,0,0 55,0,@3516 92,0,@3517 3516:C2,36|3b650c7303ff55248b7a04f7c7010000007503ff553889fe83ee0270f689f08b5208ff22|@3166,63| 3517:C2,4|8b4204c3|@3166,5| 3518:S21|5452414e535f54414228292e666978757048283429 3519:O3|@7320,@224,@3520 3520:S17|43617365202d206e6f2064656661756c74 3521:O1|@3522 3522:C2,124|3b650c7303ff552483f8017506b801000000c38b38ff7004be010000008b5f0483fb01750489f2eb26f7c6010000007503ff553889f083c00270f68b5b0489c63b650c7303ff5524ebd6ba01000000528b44240490e8a6ffffff8b3c2489fe23f0f7c6010000007503ff55388d77ff03f070f689f083c408c383c800|@3523,61|14,0,0 25,0,0 75,0,0 3523:S49|475f434f444528292e636f646567656e2831302967656e636465283629726573756c742d636f756e744361736573283129 3524:C2,1632|8d7c24903b7d0c7303ff552883f801753d8b5ae483fb01742d8b4afc8b420c894424088b7a08897c24048b72048b1c24893424538b5adc8b42ec8b510c8b0c2483c40451ff22b801000000c208005253ff30ff700453ff72e88b5c24208b44241ce81606000083f80174708b7c240c8b77fc8b4604e81e93ffff8b5c240c8b53fc505050ff73e06a038d4c240c518b5a048b4208ba08aa7941e8663affff8b4424188b78fc6aff8b5c240c8b4704ba401979410bc0e882a9feff8b7424188b5efc8b530452ff72288b5a108b44240c0bc0e8222cffff8b0c24eb05e91b03000083f9017417ff742404bb544c7a41b8409704080bc0e8528dfeffeb05b8010000008b4424208b78fc8b5f088b4704ba14aa79410bc0e8866cffff8b7424208b5efc8b5304508b5a1090e81aacfeff8b4c24248b41fc8b780457ff77288b5f108b4424180bc0e8feabfeff8b342483fe017418ff742404bb7c5c7a41b84097040890e8e68cfeff89c3eb05bb010000008b5c242c8b53fcff742434ff74243cff73e8ff72088b5c24188b44242890e8060600008b4c242c8b79fc508b5f088b470490e82e93ffff8b7424308b5efc8b53048b4a1c8b395052ff7308ff34246a01576a0189d3ba300e7a41e8529dffff8b7424048b1ec703010000008b5614c702010000008b0c24ff31ff7104ff7134bb0100000089c8e81ebffeff8b442404c700010000008b7c24088b378b1c2489338b178b4c24488b41e483f80174728b71fc52ff710cff7108ff71048b59dc8b41ec8b560c90ff128b5c244c8b530c83fa0175178b4bfc89c68b410483c800e89a99ffff83f8017517eb0489c6eb1156b8010000008b51100bc0ff1289c2eb06ba01000000568b4c24508b41fc8b78048b77148b1e83fb01740cba01000000eb57e98300000057ff70088b1c2489f8e83292ffff8b5424048b4a14c70103000000508b44240490e89666ffff8b7d008d7ff03b7d087303ff5520897d00c747fc030000008b74240c8977088b1c24895f04890789fa83c40c8b0c24f7c101000000751b8b7c24508b77fc526aff8b198b4604ba40197941e832a7feffeb06b801000000528b3c24eb6d8b79fc8b77048b5e148b0383f8017407bf01000000eb5b5256ff77088b1c2489f090e89691ffff8b7c24048b7714c70603000000508b44240490e8fa65ffff8b5d008d5bf03b5d087303ff5520895d00c743fc03000000c74308010000008b1424895304890389df83c40ceb06e9030000005250508b75008d76f43b75087303ff5520897500c746fc020000008b5c2448895e048b54244c89165789f3b8010000008d54245ce85e0900008b4c24588b79fcff7704ff770850ff74244c8b5c240c8b442410ba2c0b7a41e85698ffff8b34248b5c24448b56088b4b04890a83c460c208008b7c240c8b77fc8b4604e88e8fffff8b5c240c8b142483fa017507b903000000eb05b90100000083f901751f8b73fc50ff73e8516a038b5be08b4604ba4019794190e8faa5feff89c7eb0abf0100000050ff73e8518b4c2410ff31ff71048b04248d54242490e8ce0f00008b7c240883ff01751f8b5c24208b53fc506aff8b5be08b4204ba4019794190e8b2a5feff89c6eb06be01000000508b7424248b5efcff760cff7608ff76048b530c8b5edc8b4424140bc0ff128b4c24248b790c83ff0175178b71fc89c38b460483c800e81e97ffff83f8017517eb0489c3eb1153b8010000008b56100bc0ff1289c2eb06ba01000000538b7424288b5efc8b53048b4a148b0183f8017407bf01000000eb5352ff73088b1c2489d090e8ba8fffff8b7c24048b7714c70603000000508b44240490e81e64ffff8b5d008d5bf03b5d087303ff5520895d00c743fc030000008b54240c8953088b0c24894b04890389df83c40c8b0424f7c001000000751d8b5c24288b53fc576aff8b188b4204ba40197941e8baa4feff89c6eb06be01000000578b7c242c8b77fcff76088b5e048b44240cbaf08d7a4183c800e8361900008b5c241883fb0174068b542404eb6bba010000008b4c240c83f901750489d0eb23f6c2017503ff553889d783c70270f68b490489fa3b650c7303ff5524ebd9b8010000008b7c242889fe23f0f7c6010000007503ff553889fe2bf08d760170f4ff742438ff74243889f38b4424288b54243490e8def9ffff89c28b5c242c8b4bfcff7104ff710852ff7424288b5c240c8b442410ba2c0b7a410bc0e8f295ffff8b3c248b7424208b5f088b5604891383c434c2080090|@3570,63|71,0,0 98,1,@3525 118,1,@3295 149,0,@3198 154,1,@3200 175,0,@2963 182,1,@2965 210,1,@3148 234,0,@3465 239,0,I48 246,1,@2893 253,0,0 271,0,@3199 278,1,@3249 298,1,@2969 326,1,@2969 343,0,@3481 348,0,I48 354,1,@2893 363,0,0 398,1,@3527 418,1,@3298 453,0,@3321 458,1,@3322 470,0,0 479,0,0 495,0,0 502,1,@3004 512,0,0 590,1,@3316 607,0,0 623,0,0 649,0,0 670,1,@3298 683,0,1 694,1,@3234 769,0,@2963 774,1,@2965 781,0,0 808,0,0 826,1,@3298 839,0,1 850,1,@3234 881,0,0 949,0,0 958,1,@3533 989,0,@3317 994,1,@3319 1030,1,@3295 1047,0,1 1054,0,0 1080,0,@2963 1086,1,@2965 1095,0,0 1122,1,@3547 1152,0,@2963 1158,1,@2965 1167,0,0 1226,1,@3316 1243,0,0 1259,0,0 1285,0,0 1302,1,@3298 1315,0,1 1326,1,@3234 1401,0,@2963 1406,1,@2965 1415,0,0 1438,0,@3565 1446,1,@3566 1466,0,0 1514,0,0 1599,0,@3317 1606,1,@3319 3525:C2,216|3b650c7303ff5524f7c0010000007459f7c30100000074718b7c2408f7c7010000007503ff553883ff0f7e6289de23f0f7c6010000007503ff553889de2bf08d760170f4f7c6010000007503ff553883fe017c07bb03000000eb05bb0100000083fb03750989f2eb17e960000000f7c6010000007503ff553889f283ea0470f6bb0700000089d0eb0ae938000000e92b00000090ff15e09e04088b4c24085123c8f6c101597503ff55383bc87c08b803000000c20800b801000000c20800b801000000c20800b801000000c20800b801000000c208000bc0|@3526,63|85,0,1 92,0,0 129,0,3 150,0,I109 175,0,1 183,0,0 191,0,0 199,0,0 207,0,0 3526:S32|49333836434f4445434f4e5328292e757365496e646578656443617365283429 3527:C2,1068|3b650c7303ff55248b7c24048b74240883fe017407ba01000000eb708b542410f6c2017503ff55388d4aff03ca70f6f6c1017503ff553889ce83c60270f68b4c240cf6c1017503ff55388d51ff03d170f6f6c2017503ff553889d183c10270f65053ff37ff77045651bb190000008b44241c83c800e806b9feffb88c8779410bc0e826cbfeff8b5c241ceb05e9fc000000e8ced5feff8b442414a8017503ff553889c781c78001000070f38b5c241c89f8e8aed5feff8b5c241cb8030000000bc0e8aad9feff8b5c241cb848d679410bc0e81210ffff50ff742408ff7424248b5c2420b8fdffffff90e82a11ffff8b5c2420b8fc7a7a410bc0e8ea0fffff50ff742408ff7424288b5c2424b8fdffffff90e80211ffff8b5c2424b8047b7a410bc0e8c20fffff8b75008d76f43b75087303ff5520897500c746fc02000000c746040100000089068b5d008d5bf43b5d087303ff5520895d00c743fc020000008973048b142489138b55008d52f43b55087303ff5520895500c742fc02000000895a048b4c2404890a83c410eb075053ff37ff77048b4d008d49f83b4d087303ff5520894d00c741fc01000040c701010000008b45008d40f43b45087303ff5520894500c740fc020000008b7c2408897804c700e5ffffff525150bb190000008b4424200bc0e896b7feff8b0424e8bac9feff8b5c242083c800e866d4feff8b75008d76f43b75087303ff5520897500c746fc020000008b5c2404895e04c706ffffffffff742420bb0100000089f083c800e87e59ffffbb190000008b4424200bc0e83ab7feffb8f88079410bc0e85ac9feff8b5c242083c800e806d4feff8b54242cb9f1ffffff89d023c1a8017503ff553852d1fa8d41fff7ea8d40015a70efa8017503ff553889c783ef0870f6ff7424186a03ff74241cff74242c8b5c242489f883c800e84205ffffbb190000008b4424200bc0e8c6b6feffb8d41176410bc0e8e6c8feff8b5c242083c800e892d3feff8b742414f7c6010000007503ff553889f381c3c001000070f389da8b5c242089d00bc0e86ad3feff8b4c240cc701030000008b4424288b7c242c89c623f7f7c6010000007503ff553889c62bf78d760170f4f7c6010000007503ff553889f383c30270f6ba1100000089d923caf6c1017503ff553850528d43ffd1faf7ea8d48015a5870edf6c1017503ff553889ce83c60670f689f38b44242090e80eb6feff8b5c24108b13bb0900000089d090ff15009f040883f8017502eb1fa8017503ff553883f8017c07b903000000eb05b90100000083f9037402eb0489c1eb0ea8017503ff553889c183c10870f683f9057434bb190000008b44242090e8aeb5feffb8584279410bc0e8cec7feff8b5c242083c800e87ad2feff3b650c7303ff5524e97bffffff8b4c24108b018b7c24048907508b4424308d54242090e8460000008b5c24248b44240c83c800e896d9feff8b042483c420c2100090|@3532,63|22,0,0 106,0,12 118,1,@3004 123,0,@3113 130,1,@3038 146,1,@3052 178,1,@3052 187,0,1 194,1,@3060 203,0,@3230 210,1,@3115 228,0,-2 234,1,@3125 243,0,@3528 250,1,@3115 268,0,-2 274,1,@3125 283,0,@3529 290,1,@3115 321,0,0 430,0,0 467,0,-14 475,0,12 486,1,@3004 494,1,@3038 506,1,@3052 543,0,-1 552,0,0 562,1,@3216 567,0,12 578,1,@3004 583,0,@3109 590,1,@3038 602,1,@3052 611,0,-8 678,1,@3105 683,0,12 694,1,@3004 699,0,@1251 706,1,@3038 718,1,@3052 758,1,@3052 768,0,1 823,0,8 878,1,@3004 889,0,4 898,0,I110 922,0,1 929,0,0 964,0,12 974,1,@3004 979,0,@3037 986,1,@3038 998,1,@3052 1038,1,@3530 1054,1,@3068 3528:O1|-8 3529:O1|-7 3530:C2,180|3b650c7303ff55248b7a0c5023c7a801587503ff55383bc77e06b801000000c389d389c1b81c517941e826c7feff53518b5b040bc0e8d2d1feff8b4424048b5804b80100000083c800e8cad5feffb8584279410bc0e8fac6feff8b7c24048b5f04e8a6d1feffb8584279410bc0e8e2c6feff8b7424048b5e04e88ed1feffb8584279410bc0e8cac6feff8b5c24048b5b04e876d1feff8b1424f6c2017503ff553889d083c00270f68b54240483c408e94cffffff|@3531,63|27,0,0 37,0,@3059 42,1,@3038 54,1,@3052 66,0,0 74,1,@3060 79,0,@3037 86,1,@3038 98,1,@3052 103,0,@3037 110,1,@3038 122,1,@3052 127,0,@3037 134,1,@3038 146,1,@3052 3531:S47|49333836434f4445434f4e5328292e696e646578656443617365283629696e697469616c6973655461626c65283129 3532:S29|49333836434f4445434f4e5328292e696e646578656443617365283629 3533:C2,644|8d7c24a83b7d0c7303ff5528f7c30100000075748b3b8b72fc8b4efc8b71045250ff37ff7704ff7304ff7104ff7108ff72c8ff761c8b0c248b39ff7424086a01576a018b5c241c8b442414ba300e7a4190e8aa91ffff8b74240c8b1ec703010000008b5614c702010000008b4c2408ff31ff7104ff7134bb0100000089c883c800e872b3feffeb05e9e80100008b442404c700010000008b7c24088b378b1c2489338b178b4c242c8b41fc8b78fc528b470483c800e8be85ffff89c18b4424248d54243490e8d60100008b74242c83fe01750489c7eb0d8d5424340bc0e89602000089c78b5c24308b53fc8b42fc5157ff720cff7208ff72048b5adc8b700c8b44243c89f283c800ff128b5c24388b53fc8b4a0c83f90175148b7afc89c68b4704e8a68dffff83f801751feb0489c6eb198b4bfc8b41fc568b7810b80100000089fa0bc0ff1289c2eb06ba01000000568b44242c83f801752c8b7c243c8b77fc8b5efcff77b0ff7704ff7708ff73088b5c24148b47cc83c800e85a0200008b042483c440c38b7c243c8b77fc8b5efc8b53048b4a148b0183f8017407b801000000eb5352ff73088b1c2489d090e80286ffff8b7c24048b7714c70603000000508b44240490e8665affff8b5d008d5bf03b5d087303ff5520895d00c743fc030000008b54240c8953088b0c24894b04890389d883c40c8b3c24f7c70100000075218b5c243c8b53fc8b4afc506aff8b1f8b4104ba4019794190e8fe9afeff89c6eb06be01000000508b5c24308b4424088b54244090e8c6fdffff8b7424408b5efc8b53fcff7204ff720850ff7424188b5c240c8b442410ba2c0b7a4190e8ba8cffff8b0c248b7c24108b71088b5f04891e83c448c3b8dc827a4190ff552cb80100000090|@3546,63|76,0,@3321 82,1,@3322 94,0,0 103,0,0 120,0,0 130,1,@3004 147,0,0 182,1,@3295 198,1,@3534 222,1,@3537 290,1,@3316 316,0,0 331,0,0 378,1,@3538 413,0,0 430,1,@3298 443,0,1 454,1,@3234 532,0,@2963 538,1,@2965 547,0,0 600,0,@3317 606,1,@3319 630,0,@3544 639,0,0 3534:C2,116|3b650c7303ff552483f8017506b801000000c38b388b70048b45008d40f43b45087303ff5520894500c740fc020000008b5acc895804893889d783c800e84e000000575089f089fa90e8b2ffffff8b75008d76f43b75087303ff5520897500c746fc020000008946048b1c24891e89f083c408c3|@413,61|14,0,0 62,1,@3535 3535:C2,4|c383c800|@3536,1| 3536:S29|49333836434f4445434f4e5328292e636f6e7374724361736573283129 3537:C2,68|3b650c7303ff552483f80175048b42f8c352ff308b40040bc0e8e2ffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0424890289d083c408c3|@1462,5| 3538:C2,48|3b650c7303ff55248b7c2404ff770850538b4424188d54240ce82e0000008b04248d54240ce85601000083c40cc21000|@3543,63|26,1,@3539 38,1,@3541 3539:C2,224|3b650c7303ff55248b7a085023c7a801587503ff55383bc77f738b720c89c323def6c3017503ff553889c32bde8d5b0170f4b91100000089df23f9f7c7010000007503ff5538505289dad1fa8d41fff7ea8d78015a5870eb8b5af889d923cff6c1017503ff55388d4bff03cf70f68b7a1089fb23d9f6c3017503ff553889fb2bd98d5b0170f4f6c301750aeb05e946000000ff553889df83ef0a70eff6c1017503ff553889cb83c30270f65250ff72fc89f883c800e8f2c4feff8b1424f6c2017503ff553889d083c00270f68b54240483c408e928ffffffb801000000c30bc0|@3540,63|51,0,8 182,1,@3042 217,0,0 3540:S47|49333836434f4445434f4e5328292e6d616b654a756d705461626c65283629707574496e44656661756c7473283129 3541:C2,208|3b650c7303ff552483f8017506b801000000c38b388b378b5a0c89f123cbf6c1017503ff553889f12bcb8d490170f4be1100000089cb23def6c3017503ff5538505289cad1fa8d46fff7ea8d58015a5870eb8b4af889ce23f3f7c6010000007503ff55388d71ff03f370f68b5f0489df23fef7c7010000007503ff553889df2bfe8d7f0170f4f7c7010000007503ff553889fb83eb0a70f6f7c6010000007503ff553889f783c70270f652ff7004ff72fc89de89fb89f00bc0e8bac3feff8b04248b54240483c408e933ffffff83c800|@3542,63|14,0,0 48,0,8 186,1,@3042 3542:S44|49333836434f4445434f4e5328292e6d616b654a756d705461626c65283629707574496e4361736573283129 3543:S31|49333836434f4445434f4e5328292e6d616b654a756d705461626c65283629 3544:O3|@7320,@224,@3545 3545:S24|67656e43617365202d206e756c6c2063617365206c697374 3546:S58|475f434f444528292e636f646567656e2831302967656e636465283629726573756c742d63617365436f646528342967656e4361736573283229 3547:C2,392|3b650c7303ff552483f801750eb8f4847a4190ff552cb8010000008b780483ff0175718b72fc8b5efc8b4d008d49f43b4d087303ff5520894d00c741fc020000008b38897904c701fdffffff52ff730489cbb8a0027a410bc0e86276feff8b34248b5efc8b53fcb924857a418b7c2404894c2404b924857a41890c24ff7204ff72088b73e089c389f0ba30857a4157e9580100008b72fc8b5efc5257ff308b4304e8be7effff8b5424088b4afc8b79fc506a038b59e08b4704ba4019794183c800e84295feff8b74240c8b5efc8b53fc8b4d008d49f43b4d087303ff5520894d00c741fc020000008b442404894104c701fdffffffff720489cbb8a0027a410bc0e8ba75feff8b7c240c8b77fc8b5efc68a08d7a4168a08d7a41ff7304ff730889c38b46e0ba30857a4183c800e8ba000000508b44240c8b5424100bc0e8befeffff8b5424108b4afc8b79fc50ff7704ff77086a01ff7424148b5c240c8b442414ba2c0b7a4183c800e89a86ffff8b34248b5c240c8b56088b4b04890a8b44240483c41cc383c800|@3564,63|14,0,@3548 23,0,0 72,0,-2 83,0,@3294 90,1,@2888 104,0,@3550 117,0,@3550 138,0,@3551 144,1,@3552 162,1,@3295 186,0,@2963 194,1,@2965 241,0,-2 251,0,@3294 258,1,@2888 273,0,@3563 278,0,@3563 294,0,@3551 302,1,@3552 354,0,@3317 362,1,@3319 3548:O3|@7320,@224,@3549 3549:S23|707574496e436173657320686173206e6f206361736573 3550:O2|0,@3114 3551:O2|@3552,@3198 3552:C2,976|3b650c7303ff55248b7c24085050525053ff772889c38b470ce82aa4faff83f801754bbbffffffff8b44240890e85291faff89c3b81cac7941e83e8dfaff8b75008d76f03b75087303ff5520897500c746fc03000000894608bb54cf7441895e04bafcc1b441891689f090ff552c8d7424108b5c2408891e8d5424108942048b4c241450508b442428ff318b5c24108b400c83c800e8aea3faff83f801754bbbffffffff8b44241090e8d690faff89c3b81cac7941e8c28cfaff8b7d008d7ff03b7d087303ff5520897d00c747fc03000000894708be54cf7441897704bbfcc1b441891f89f890ff552c8d7c24048b74241089378d5c24048943048b5424088b0c248b3983fffd75738b1a8b0383f8fd756fff73048b59048b44243490e8ca02000083f801745f50508b7c2424ff7104566a018d74240c568b5c24488b4424448b570490ff126aff8b5c240c8b442440ba40197941e8c292feff6aff8b5c24288b442440ba40197941e8ae92feffff742440ff74243c8b5c2408eb0fe937010000e99d000000e90d0000008b44240c0bc0e88a4fffffeb748b1c248b4424380bc0e84602000083f801746650508b7c2424ff7424206a018d5c2408538b5c24448b4424408b570490ff126aff8b5c24088b44243cba40197941e83e92feff6aff8b5c24208b44243cba40197941e82a92feffff742440ff7424388b5c24108b44240883c800e8164fffffeb14e95d0100008b4424388d542428e826020000505050eb6d8b59048b44243083c800e8ba01000083f801745e50508b7c2420ff7104566a018d74240c568b5c24448b4424408b570490ff126aff8b5c240c8b44243cba40197941e8b291feff6aff8b5c24248b44243cba40197941e89e91feffff74243cff7424388b5c24088b44240ceb0ae9d9000000e90a00000083c800e87e4effffeb118b4424348d54242490e89201000050505050eb708b1a8b0383f8fd756cff73048b1c248b4424380bc0e81a01000083f801745b50508b7c2424ff7424206a018d5c2408538b5c24448b4424408b570490ff126aff8b5c24088b44243cba40197941e81291feff6aff8b5c24208b44243cba40197941e8fe90feffff742440ff742438eb0fe941000000e928000000e9110000008b5c24108b4424080bc0e8da4dffffeb258b4424388d54242890e8ee0000005050eb138b4424348d54242483c800e8da000000505050508b7c241c83ff01741950ff742440bb608d7a41b84097040883c800e89e74feffeb01508b5c243c8b442440e8167bffff8b75008d76f03b75087303ff5520897500c746fc03000000c74608010000008946048b1c24891e89f083c438c2100083c800|@3562,63|26,1,@435 36,0,-1 46,1,@336 53,0,@3201 58,1,@323 90,0,@224 98,0,@7320 150,1,@435 160,0,-1 170,1,@336 177,0,@3201 182,1,@323 214,0,@224 222,0,@7320 286,1,@3553 337,0,@2963 342,1,@2965 357,0,@2963 362,1,@2965 402,1,@3232 418,1,@3553 469,0,@2963 474,1,@2965 489,0,@2963 494,1,@2965 518,1,@3232 538,1,@3555 558,1,@3553 609,0,@2963 614,1,@2965 629,0,@2963 634,1,@2965 670,1,@3232 686,1,@3555 718,1,@3553 769,0,@2963 774,1,@2965 789,0,@2963 794,1,@2965 834,1,@3232 850,1,@3555 870,1,@3555 893,0,@3561 898,0,I48 906,1,@2893 922,1,@3298 953,0,0 3553:C2,24|8b3883ffff7506b803000000c389d8ff25609e040883c800|@3554,45|8,0,1 17,0,I105 3554:S26|49333836434f4445434f4e5328292e6973436f6d705249283229 3555:C2,280|3b650c7303ff552450508b7af45250ff72f06a018d742410568b5a088b42048b57040bc0ff128b5c24048b530852ff72288b5a108b44241090e85612ffff8b0c2483f9017416ff742404bb544c7a41b84097040890e88e73feffeb05b8010000008b44240c50508b78f4ff70ec6a018d742408568b58088b40048b570483c800ff128b5c24148b530852ff72288b5a108b44242090e84a92feff8b0c2483f9017416ff742404bb7c5c7a41b84097040890e83273feffeb05b8010000008b44241c6aff8b5c24288b4008ba401979410bc0e8028ffeff8b7c241c6aff8b5c24108b4708ba4019794190e8ea8efeff8b74241c8b5c24188b542428895c24288b4e04894c24248b5c24088b44242083c42452e91e0000000bc0|@3560,63|58,1,@3148 75,0,@3465 80,0,I48 86,1,@2893 93,0,0 150,1,@2969 167,0,@3481 172,0,I48 178,1,@2893 185,0,0 203,0,@2963 210,1,@2965 228,0,@2963 234,1,@2965 274,1,@3556 3556:C2,504|3b650c7303ff55248b7c24088b3783fe0375745053ff7704bb190000008b442410e85aa5feffb8e0e379410bc0e87ab7feff8b5c241083c800e826c2feff8b5c2408ba1100000089d923caf6c1017503ff553850528d43ffd1faf7ea8d48015a5870edf6c1017503ff553889c881c08001000070f38b7c240489c623f7f7c601000000750aeb05e94b000000ff55388d70ff03f770ef8b5c241089f090e8c2c1feff8b5c24108b0424e83afcfeff89c38b45008d40f43b45087303ff5520894500c740fc02000000c7400401000000891883c40cc2080083fe017574a8017503ff553883f8097e0489daeb0289c28b4f048b3183fe0d750850b803000000eb1383feeb750850b803000000eb0650b80100000053515350ff7424188b5c241489d0e84af5feffbb190000008b4424100bc0e84aa4feffb8e0e379410bc0e86ab6feff8b5c241083c800e816c1feffeb05e9920000008b5c2408ba1100000089d923caf6c1017503ff553850528d43ffd1faf7ea8d48015a5870edf6c1017503ff553889c881c08001000070f38b7c240489c623f7f7c6010000007503ff55388d70ff03f770f68b5c241089f090e8b2c0feff8b5c24108b0424e82afbfeff89c38b45008d40f43b45087303ff5520894500c740fc02000000c7400401000000891883c40cc20800b8c88c7a4183c800ff552cb80100000090|@3559,63|25,0,12 34,1,@3004 39,0,@3264 46,1,@3038 58,1,@3052 67,0,8 158,1,@3052 170,1,@3115 203,0,0 250,0,1 263,0,1 271,0,0 290,1,@3111 295,0,12 306,1,@3004 311,0,@3264 318,1,@3038 330,1,@3052 346,0,8 430,1,@3052 442,1,@3115 475,0,0 488,0,@3557 499,0,0 3557:O3|@7320,@224,@3558 3558:S31|53686f756c64206e6f7420686176652073686f72742f6c6f6e672068657265 3559:S36|49333836434f4445434f4e5328292e636f6d70617265416e644272616e63685252283429 3560:S43|5452414e535f54414228292e636f6d70617265416e644272616e636828362967656e436f6d705252283129 3561:S16|636f6d70617265416e644272616e6368 3562:S31|5452414e535f54414228292e636f6d70617265416e644272616e6368283629 3563:O2|0,@3230 3564:S60|475f434f444528292e636f646567656e2831302967656e636465283629726573756c742d63617365436f6465283429707574496e4361736573283129 3565:O2|@3566,@3321 3566:C2,172|3b650c7303ff55248b7b148b3783fe01750db8c48e7a41ff552cb80100000083f8017508b801000000c20400f7c00100000075058b4804eb1489c1b8503d754183c800ff552c89c8b9010000008b731c8b3e5053ff74240c6a01576a0189c88b52040bc0ff128b34248b5e14c703010000008b16c702010000008b4c2404f7c10100000075048b01eb0db8503d7541ff552cb8010000008b7c240c89fb8b4c240883c41051e9c6c5feff0bc0|@3569,63|19,0,@3567 27,0,0 37,0,0 60,0,@597 73,0,0 110,0,0 118,0,0 139,0,@597 147,0,0 166,1,@3068 3567:O3|@7320,@224,@3568 3568:S12|4e6f74206272616e63686564 3569:S20|5452414e535f54414228292e6669787570283329 3570:S47|475f434f444528292e636f646567656e2831302967656e636465283629726573756c742d63617365436f6465283429 3571:C2,324|3b650c7303ff552483f8017506b801000000c38b388b3783fef975738b5f088b0b83f9f3756e8b73048b4d008d49dc3b4d087303ff5520894d00c741fc0800000052ff7704ff770cff7004ff7304ff761cff720cff721051be9c907a4189318b5c240489591c8b5424088951188b44241c8941148b7c24188979108b74240c89710c8b5c24208959088b542414eb0ae9a2000000e93200000089510483fa017507b803000000eb05b801000000506affff73088b430489cb89c78b44241c89faff12b80100000083c424c352ff7704ff770cff7004ff7210ff720c6aff6affff72086a01bb030000008b47088b521490ff12f7c00100000075048b38eb0db820387a41ff552cbf0100000057ff742414ff7424146a018b5c24108b44241483c800e8eea7ffff8b4424088b54241483c418e9cafeffffb834917a41ff552cb80100000090|@3576,63|14,0,0 89,0,@3572 162,0,1 169,0,0 195,0,0 229,0,1 255,0,@3409 263,0,0 290,1,@3411 311,0,@3574 319,0,0 3572:C2,52|3b650c7303ff55248b7a0c89fe83f6025250ff7214ff7210568b5a188b421c0bc0e88ea7ffff8b1c248b43048b530883c404ff22|@3573,63|34,1,@3411 3573:S63|475f434f444528292e636f646567656e2831302967656e636465283629726573756c742d67656e4d757475616c44656373283129646973636172642d283129 3574:O3|@7320,@224,@3575 3575:S33|67656e4d757475616c44656373202d204e6f742061206465636c61726174696f6e 3576:S52|475f434f444528292e636f646567656e2831302967656e636465283629726573756c742d67656e4d757475616c44656373283129 3577:C2,176|3b650c7303ff552483fb01751c8b7afc8b72108b1c2489342489d9bb010000008b42f08b572c51ff225250ff73046aff6affff72086a018b3bbb0300000089f88b52fc90ff12f7c00100000075048b30eb0db820387a41ff552cbe010000008b5c2404f6c3017503ff553889da83c20870f6568b5c240489d08b54240ce87effffff8b4c240c8b79fc50ff74240c6affff7708ff77048b5c2414ba78927a410bc0e8320000008b042483c414c383c800|@3581,63|28,0,0 58,0,1 83,0,@3409 91,0,0 155,0,@3578 162,1,@3579 3578:O2|@3579,@3198 3579:C2,576|3b650c7303ff55245250536a0389c38b442414ba4019794190e8b686feff50508b7c2410ff74240c6a018d742408568b5c24248b4424288b57040bc0ff128b5c2418ff73288b5b108b44240490e83e09ffff8b142483fa017418ff74241cbb544c7a41b84097040890e8766afeff89c1eb05b90100000050508b4c24248b5c24148b410c90e87696faff83f801754bbbffffffff8b44241490e89e83faff89c3b81cac7941e88a7ffaff8b7d008d7ff03b7d087303ff5520897d00c747fc03000000894708be54cf7441897704bbfcc1b441891f89f890ff552c89e78b742414893789e38943048b5424048b0a8b0183f8fd75726a018b5c24308b4104e8f2c0ffff83f8017431ff74240cff7424306a11ff7424348b5c24408b410490e822c1ffff6aff8b5c24188b442428ba40197941e89e85feffeb5b50508b7c2424566a018d742408568b5c24388b44243c8b570483c800ff12ff742414ff7424386a11ff74243ceb05e92d0000008b5c24488b4424100bc0e846e6feff6aff8b5c24088b442430ba40197941e84685feff83c408eb56e95100000050508b7c2424566a018d742408568b5c24388b44243c8b570483c800ff12ff742414ff7424386a11ff74243c8b5c24488b44241090e8eee5feff6aff8b5c24088b442430ba40197941e8ee84feff83c4088b5c2424ff73288b5b108b4424100bc0e8e287feff8b142483fa017414ff742428bb7c5c7a41b84097040890e8ca68feff8b4c2428c7442434ffffffff8b5c241489c8ba401979418b7c242483c43457e99684feff0bc0|@3580,63|20,0,@2963 26,1,@2965 78,1,@3148 95,0,@3465 100,0,I48 106,1,@2893 115,0,0 134,1,@435 144,0,-1 154,1,@336 161,0,@3201 166,1,@323 198,0,@224 206,0,@7320 254,1,@3471 286,1,@3473 301,0,@2963 306,1,@2965 374,1,@3103 389,0,@2963 394,1,@2965 462,1,@3103 477,0,@2963 482,1,@2965 506,1,@2969 523,0,@3481 528,0,I48 534,1,@2893 546,0,-1 557,0,@2963 570,1,@2965 3580:S24|5452414e535f54414228292e6d6f7665546f566563283629 3581:S54|475f434f444528292e636f646567656e2831302967656e636465283629726573756c742d6c6f6164536d616c6c566563746f72283229 3582:O2|@3583,@3000 3583:C2,92|3b650c7303ff552450536aff8b520490ff128b44240c8d54240883c800e8560000008b7d008d7ff43b7d087303ff5520897d00c747fc02000000894704c707ffffffff8b7424048974240c89fbb8a0967a4183c408e96a64feff0bc0|@3587,63|30,1,@3584 63,0,-1 78,0,@3586 86,1,@2888 3584:C2,136|3b650c7303ff552483f8017506b801000000c3a8017503ff553889c783ef0270f65289f890e8d6ffffff8b142450ff72f8bb190000008b0424e8329afeffb89c8879410bc0e852acfeff8b1c24e802b7feff8b4c24088b41fce84282feff8b7d008d7ff43b7d087303ff5520897d00c747fc020000008b742404897704890789f883c40cc383c800|@3585,63|14,0,0 50,0,12 58,1,@3004 63,0,@3121 70,1,@3038 78,1,@3052 90,1,@2960 3585:S46|5452414e535f54414228292e72657365727665537461636b537061636528332970757368456e7472696573283129 3586:S17|72657365727665537461636b5370616365 3587:S32|5452414e535f54414228292e72657365727665537461636b5370616365283329 3588:C2,244|3b650c7303ff55248b7af8500bc7a801587503ff55383bc77506b801000000c3be0900000089c323def6c3017503ff5538505289c2d1fa8d46fff7ea8d58015a5870ebf7c7010000007503ff553889fe83ee0270f6500bc6a801587503ff55383bc67507b901000000eb1f8b4afc5250536a038b5aec8b4104ba4019794183c800e8ee81feff89c1eb035250538b4424088b78fcff7708ff77048b58ec8b442408bac4397a4183c800e83ea2ffff8b7424088b5efcff34246affff7308ff730489c38b46f0ba78927a4183c800e8cefaffff8b542404f6c2017503ff553889d083c00270f68b54240883c40ce90fffffff83c800|@3589,63|27,0,0 33,0,4 101,0,0 122,0,@2963 130,1,@2965 162,0,@3416 170,1,@3417 198,0,@3578 206,1,@3579 3589:S43|475f434f444528292e636f646567656e2831302967656e636465283629726573756c742d636f7079283129 3590:C2,244|3b650c7303ff55248b7af8500bc7a801587503ff55383bc77506b801000000c3be0900000089c323def6c3017503ff5538505289c2d1fa8d46fff7ea8d58015a5870ebf7c7010000007503ff553889fe83ee0270f6500bc6a801587503ff55383bc67507b901000000eb1f8b4afc5250536a038b5af48b4104ba4019794183c800e8aa80feff89c1eb035250538b4424088b78fcff7708ff77048b58f48b442408bac4397a4183c800e8faa0ffff8b7424088b5efcff34246affff7308ff730489c38b46f0ba78927a4183c800e88af9ffff8b542404f6c2017503ff553889d083c00270f68b54240883c40ce90fffffff83c800|@3589,63|27,0,0 33,0,4 101,0,0 122,0,@2963 130,1,@2965 162,0,@3416 170,1,@3417 198,0,@3578 206,1,@3579 3591:O3|@7320,@224,@3592 3592:S41|67656e6364653a2063616e277420636f64652d67656e657261746520436f64654e696c2076616c7565 3593:S29|475f434f444528292e636f646567656e2831302967656e636465283629 3594:C2,1656|8d7c24a43b7d0c7303ff55288b781c83ff0175725253ff30ff700cff7010ff7018ff72088b5804b80300000090e8925bfeff8b7424148b5d008d5be03b5d087303ff5520895d00c743fc07000000ba38a07a4189138b4c2408894b188b7e30897b148b561c8953108b4e18894b0c8b4e0c894b088b4e10894b048b4c24148b55008d52eceb05e9a40100003b55087303ff5520895500c742fc04000000bf4ca67a41893a8b74240889720c8b792c897a088b710c8972048b7424148b4d008d49e03b4d087303ff5520894d00c741fc07000000bf18a87a4189398b7c24088979188b7e288979148b7e0c8979108b7e1c89790c8959088941048b7424148b7d008d7fec3b7d087303ff5520897d00c747fc0400000050535251ff760cff762457bee8aa7a4189378b74242489770c8b7424048977088b7424088977048b74242483fe017507bb01000000eb23ff76048b068d542438e8de1400008b342483c4043b650c7303ff5524ebd6bb010000008b5424308b4d008d49f43b4d087303ff5520894d00c741fc020000008b442418894104c70101000000ff720c89cbb8fcf9784183c800e8c25efeff508b54243090ff128b7d008d7ff43b7d087303ff5520897d00c747fc02000000bea8b27a4189378b5c2418895f048b55008d52f43b55087303ff5520895500c742fc02000000b918b37a41890a8b4424108942048b74243457ff74241852ff7424106a01ff742438ff742438ff76088b5c243c8b44244c8b5604ff128b042483c438c20c005253ff30ff7004ff700cff7010ff70188b74240883fe017507bb03000000eb208b168b0a83f9fb75128b76043b650c7303ff5524ebdebb01000000bb0100000083fb0174728b442418ff70088b5c2410b80100000090e83a59feff8b7d008d7ff03b7d087303ff5520897d00c747fc03000000beb0b37a4189378b5c2408895f088947048b55008d52f43b55087303ff5520895500c742fc02000000b9e8b47a41890a897a048b7c2418526824b57a416888b57a41eb05e96400000068bcb57a416a03ff742418ff742418ff770889c38b4424308b57040bc0ff128b7424188b5d008d5bf43b5d087303ff5520895d00c743fc02000000894304c703fdffffffff760cb8a0027a410bc0e82e5dfeff508b54241890ff128b042483c420c20c008b45008d40f43b45087303ff5520894500c740fc02000000bff0b57a4189388b7424088970048b5c241850ff73088b5c2414b80300000083c800e83658feff8b55008d52f43b55087303ff5520895500c742fc02000000b9acb87a41890a8b3c24897a048b74241c5268e8b87a416848b97a41687cb97a416a01ff74241cff74241cff760889c38b4424348b560483c800ff128b5c242c83fb017444508b5c2410b8030000008d542424e80e1c00008b5424208b4a148b79308b3783fe017502eb0b5089c890e87eb7feffeb01508b04248b542420ff128b042483c428c20c00508b442410ba5cbb7a4183c800ff12a8017503ff553889c283c20270f68b4c242052ff742430bb8100000089d08b513490ff128b7c24248b75008d76f43b75087303ff5520897500c746fc020000008b5c2404895e04c706fdffffff50ff770c89f3b8a0027a4183c800e8ce5bfeff8b5424286a016affff7214ff720c89c38b442410ba78927a410bc0e822f4ffff8b4c2428ff710cbb94027a41b8a0027a410bc0e8965bfeff8b7c2404f7c7010000007503ff553889fe83ee0270f68b5c2428f7c6010000007503ff553889f283ea0270f65056528b4b0c89c389c8ba40197941e89e7afeffb8030000008b3c245023c7a801587503ff55383bc77e07be01000000eb65be0900000089c323def6c3017503ff5538505289c2d1fa8d46fff7ea8d58015a5870eb8b54243050536affff7214ff720c8b5c24188b44241cba78927a4183c800e866f3ffff8b0c24f6c1017503ff553889c883c00270f683c4043b650c7303ff5524eb82e905000000be010000008b5c24306a038b530c8b5c240c89d0ba401979410bc0e8f679feff8b4424088b54242c0bc0ff128b5c2420b8090000008d5424340bc0e8721c00008b4c24306a038b5c240c8b410cba4019794190e8be79feff8b4424305050ff7424106a018d7c2408578b580c8b4014ba08aa794183c800e8620affff8b742438ff34246a016a11ff7614bbffffffffb80100000083c800e8eab4ffff8b5c24386aff8b530c8b5c240889d0ba4019794183c800e85e79feff8b4c24386aff8b5c24148b410cba4019794190e84679feff8b44241083c43cc20c00|@3682,63|40,0,1 46,1,@2877 79,0,@3595 158,0,@3610 212,0,@3616 289,0,@3622 326,0,0 342,1,@3636 363,0,0 404,0,0 414,0,@2887 422,1,@2888 459,0,@3641 497,0,@3643 585,0,1 614,0,0 619,0,0 640,0,0 646,1,@2877 675,0,@3645 716,0,@3648 731,0,@3649 736,0,@3652 748,0,@3654 811,0,-2 819,0,@3294 826,1,@2888 872,0,@3656 898,0,1 906,1,@2877 935,0,@3663 953,0,@3664 958,0,@3667 963,0,@3669 1009,0,1 1018,1,@3671 1046,1,@3069 1077,0,@3673 1110,0,64 1159,0,-2 1170,0,@3294 1178,1,@2888 1203,0,@3578 1210,1,@3579 1222,0,@3293 1227,0,@3294 1234,1,@2888 1293,0,@2963 1298,1,@2965 1303,0,1 1326,0,0 1333,0,4 1390,0,@3578 1398,1,@3579 1439,0,0 1459,0,@2963 1466,1,@2965 1487,0,4 1498,1,@3676 1516,0,@2963 1522,1,@2965 1550,0,@3198 1558,1,@3200 1577,0,-1 1582,0,0 1590,1,@3473 1610,0,@2963 1618,1,@2965 1636,0,@2963 1642,1,@2965 3595:C2,700|3b650c7303ff552483f8017510b80100000089da8b3c2483c40c57ff2252538b7a18f7c701000000752b83f80375048b37eb30a8017503ff553889c383eb0270f68b7f0489d83b650c7303ff5524ebd2be01000000b810a37a4190ff552cbe010000008b1e83fbfb75408b55008d52f43b55087303ff5520895500c742fc020000008b4e04894a04c702fdffffff8b4424108944241089d3b8a0027a418b7c240883c41057e92e59feff83fbf775698b560883fa0375668b4e04f6c1017503ff553883f9017d5b8b4424048b780c89fb23d9f6c3017503ff55388d5fff03d970f6f6c3017503ff553883fb057d738b4c2404f6c3017503ff553883fb017d02eb268b71048b165323daf6c3015b7503ff55383bda7d11eb1fe990010000e911010000e9c9000000b824ae744183c800ff552cbe01000000f6c3017503ff553889da83c20270f68b5c56fe89de8b5424108b5c240c897424108b34248974240ceb05e91b0000008b742408895c240889d38b4108ba34a37a4183c40856e987010000bb0100000089ca23d3f6c2017503ff553889da2bd18d520170f4b90900000089d623f1f7c6010000007503ff55385052d1fa8d41fff7ea8d70015a5870ed56b8010000008b54240483c800ff128b5c24108b542414895c24148954241089c38b0424bac4397a4183c40ce9a897ffff8b442404ff700889cb8b042490e80246ffff8b7c24148b742410894424148b5c2404895c24108b54240c8974240c89fb8b042489d1ba34a37a4183c40c51e9d50000008b4c24048b45008d40e43b45087303ff5520894500c740fc06000000bf64a57a4189388b79088978148b5c24108958108b511089500c8b14248950088b54240c895004508b45008d40ec3b45087303ff5520894500c740fc0400000089500c8958088b14248950048b560489108b51148b74240c83c41856ff22b8dca57a4190ff552cb80100000090|@3609,63|14,0,0 81,0,0 86,0,@3596 95,0,0 138,0,-2 153,0,@3294 166,1,@2888 296,0,@51 307,0,0 372,0,@3598 381,1,@3599 386,0,0 412,0,4 449,0,0 484,0,@3416 492,1,@3417 510,1,@3277 550,0,@3598 559,1,@3599 592,0,@3605 686,0,@3607 695,0,0 3596:O3|@7320,@224,@3597 3597:S11|66696e64436c6f73757265 3598:O2|@3599,@3416 3599:C2,364|3b650c7303ff5524505052538b5c241c8b400c0bc0e82a86faff83f801754bbbffffffff8b44241c90e85273faff89c3b81cac7941e83e6ffaff8b7d008d7ff03b7d087303ff5520897d00c747fc03000000894708be54cf7441897704bbfcc1b441891f89f890ff552c8d7c24088b74241c89378d5c24088943048b54240c8b4a04f6c1017503ff553883f9017f0bb8c8a47a4183c800ff552c8b028b3883fffd753d8b5d008d5bf43b5d087303ff5520895d00c743fc020000008b7004897304c703fdffffff8b14248954241cb8a0027a418b4c241083c41c51e9f055feff83ff01753d8b5d008d5bf43b5d087303ff5520895d00c743fc020000008b7004897304c703010000008b14248954241cb8fcf978418b4c241083c41c51e9ae55feff83fffb7535ff7004b8010000008b54241c90ff128b7424088b5c2418895c24208b5424048954241c89c38b04248b56048b4c241483c41c51ff22b8fca47a410bc0ff552cb80100000090|@3604,63|22,1,@435 32,0,-1 42,1,@336 49,0,@3201 54,1,@323 86,0,@224 94,0,@7320 144,0,@3600 195,0,-2 207,0,@3294 220,1,@2888 261,0,0 273,0,@2887 286,1,@2888 299,0,0 349,0,@3602 359,0,0 3600:O3|@7320,@224,@3601 3601:S28|707573684e6f6e4c6f63616c3a207a65726f2075736520636f756e74 3602:O3|@7320,@224,@3603 3603:S43|707573684e6f6e4c6f63616c3a206e6f74204c69746572616c2c20436f6465526566206f7220537461636b 3604:S27|5452414e535f54414228292e707573684e6f6e4c6f63616c283529 3605:C2,40|3b650c7303ff55248b7a0c8b3424893c24ff7208ff72048b5a108b4214ba34a37a4156e9b4fdffff|@3606,63|30,0,@3598 36,1,@3599 3606:S44|475f434f444528292e636f646567656e2831302967656e50726f6328352970726576696f7573283429283129 3607:O3|@7320,@224,@3608 3608:S33|70726576696f75733a2062616420636f64657472656520696e20636c6f73757265 3609:S41|475f434f444528292e636f646567656e2831302967656e50726f6328352970726576696f7573283429 3610:C2,244|3b650c7303ff552483f8017506b803000000c3528b7a0cf7c701000000752b83f80375048b37eb2fa8017503ff553889c283ea0270f68b7f0489d03b650c7303ff5524ebd2be01000000b810a37a41ff552cbe010000008b1683fafb753f8b4604f7c001000000740eb8c020754190ff552cbf0100000089c70fb65fff8d5c1b0189df83e70783ff057509b80300000083c404c3b80100000083c404c383faf775448b460883f803752e8b7e04f7c7010000007503ff553883ff017e128b1c248b4b0489fb89c883c404e941000000b80100000083c404c38b3c248b46048b570883c404ff22b8a8a77a41ff552cb80100000090|@3615,63|14,0,1 70,0,0 75,0,@3596 83,0,0 106,0,@372 115,0,0 140,0,1 149,0,0 203,1,@3611 208,0,0 231,0,@3613 239,0,0 3611:C2,16|3b650c7303ff55248b4004e91882faff|@3612,63|12,1,@435 3612:S22|5452414e535f54414228292e697350726f6342283229 3613:O3|@7320,@224,@3614 3614:S38|6973536c3a2062616420636f64657472656520696e2066756e6374696f6e20636c6f73757265 3615:S37|475f434f444528292e636f646567656e2831302967656e50726f632835296973536c283129 3616:C2,472|3b650c7303ff552483f801757052b80100000089da83c800ff126a05506a018b5c241c8b442418ba8c167a4190e82a8bffff8b3c248b75008d76f43b75087303ff5520897500c746fc020000008b5f04895e04c7060100000050ff74241489f3b8fcf97841e88e51feff8b54240c89028b0c24894a04b801000000eb05e90600000083c408c20c005250538b7a18f7c701000000752b83f80375048b37eb30a8017503ff553889c383eb0270f68b7f0489d83b650c7303ff5524ebd2be01000000b810a37a4190ff552cbe010000008b1e83fbf7755f8b560883fa01745cb8010000008b14240bc0ff126a05506a018b5c24248b442420ba8c167a4190e85a8affff8b4c240850ff74241cff74241c8b5c240c8b4424108b51080bc0ff128b7c241489078b3424897704b80100000083c410c20c00e98d0000008b4c24088b45008d40e43b45087303ff5520894500c740fc06000000bf0caa7a4189388b79108978148b5c24188958108b510c89500c8b14248950088b542414895004508b45008d40ec3b45087303ff5520894500c740fc0400000089500c8958088b14248950048b560489108b51140bc0ff128b4c24148b3889398b7004897104b80100000083c410c20c00b884aa7a4183c800ff552cb80100000090|@3621,63|15,0,0 40,0,@3339 46,1,@3405 85,0,0 97,0,@2887 102,1,@2888 119,0,0 189,0,0 194,0,@3596 203,0,0 223,0,0 248,0,@3339 254,1,@3405 299,0,0 343,0,@3617 445,0,0 456,0,@3619 467,0,0 3617:C2,40|3b650c7303ff55248b7a0c8b3424893c24ff7208ff72048b5a108b4214ba34a37a4156e90cf9ffff|@3618,63|30,0,@3598 36,1,@3599 3618:S42|475f434f444528292e636f646567656e2831302967656e50726f632835296c6f6164536c283529283129 3619:O3|@7320,@224,@3620 3620:S28|6c6f6164536c202d20636c6f73757265206e6f742065787472616374 3621:S39|475f434f444528292e636f646567656e2831302967656e50726f632835296c6f6164536c283529 3622:C2,208|3b650c7303ff552483f8017506b801000000c3528b7a0cf7c701000000752b83f80375048b37eb2fa8017503ff553889c283ea0270f68b7f0489d03b650c7303ff5524ebd2be01000000b810a37a41ff552cbe010000008b1683fafb750b8b460483c404e98300000083faf775518b4e0883f90375398b4604a8017503ff553883f8017e1b8b3c2489c38b4704e8c23cffff8b34248b5e0483c404e914020000b838af7a410bc0ff552cb8010000008b04248b78088b460489fa83c404ff22b864af7a4183c800ff552cb80100000090|@3635,63|14,0,0 70,0,0 75,0,@3596 83,0,0 101,1,@3623 142,1,@3277 156,1,@3627 161,0,@3631 171,0,0 192,0,@3633 203,0,0 3623:C2,52|3b650c7303ff552489c3b8cf00000090ff1500a4040850bb0b000000b8010000008d542404e82600000083c404e96a00ffff0bc0|@3626,63|11,0,103 18,0,I150 24,0,5 29,0,0 38,1,@3624 46,1,@3204 3624:C2,256|3b650c7303ff5524f6c3017503ff553883fb017d01c3f7c301000000740489dfeb0ef643ff108b3b7402f7df8d7c3f0189d6505389fbb80300000090ff15e0af04088b5efc89da23d083fa0174598b0c24f6c1017503ff553889c883e80270f6f6c1017503ff553883f9017d02eb0ff6c1017503ff553883f90d7d02eb1189c2b8140179410bc0ff552cbf0100000083f9097507bf0d000000eb1383f90b750cbf0f000000eb07e93100000089cf8b55008d52f43b55087303ff5520895500c742fc020000008b4c2404894a04893a89c389d089f283c408e923ffffff8b0c24f6c1017503ff553889c883e80270f689c38b44240489f283c408e901ffffff90|@3625,63|55,0,1 62,0,I245 129,0,@2901 139,0,0 149,0,6 161,0,7 3625:S42|5452414e535f54414228292e67657452656769737465725365742831296465636f646542697473283229 3626:S29|5452414e535f54414228292e6765745265676973746572536574283129 3627:C2,200|3b650c7303ff55245050508b7b0c89c389f883c800e8ce7bfaff83f801754bbbffffffff8b04240bc0e8f668faff89c3b81cac7941e8e264faff8b75008d76f03b75087303ff5520897500c746fc03000000894608bb54cf7441895e04bafcc1b441891689f090ff552c8d7424048b1c24891e8d5424048942048b4c24088b018b3883fffd750b8b400483c40ce9a6fdffff83ff0175268b400483c800e842000000f7c001000000750a8b0083c40ce984fdffffb80100000083c40cc3b80100000083c40cc30bc0|@3630,63|22,1,@435 32,0,-1 42,1,@336 49,0,@3201 54,1,@323 86,0,@224 94,0,@7320 142,1,@3623 158,1,@3628 176,1,@3623 181,0,0 190,0,0 3628:C2,76|8b78208b37f7c60100000075388b1e8b138b0a83f901750fb890da79410bc0ff552cb9010000008b4a048b45008d40f83b45087303ff5520894500c740fc010000008908c3b801000000c390|@3629,63|25,0,@3238 35,0,0 70,0,0 3629:S29|49333836434f4445434f4e5328292e636f646541646472657373283129 3630:S32|5452414e535f54414228292e67657446756e6374696f6e526567536574283229 3631:O3|@7320,@224,@3632 3632:S18|736c5265675365743a20617267756d656e74 3633:O3|@7320,@224,@3634 3634:S42|736c5265675365743a2062616420636f64657472656520696e2066756e6374696f6e20636c6f73757265 3635:S41|475f434f444528292e636f646567656e2831302967656e50726f63283529736c526567536574283129 3636:C2,456|3b650c7303ff55248b3883fff7756c8b700883fe0375698b5804f6c3017503ff553883fb017d5e8b4afc8b791889fe23f3f7c6010000007503ff55388d77ff03f370f6f7c6010000007503ff553883fe057d76f7c6010000007503ff553883fe017d02eb258b59108b035023c6a801587503ff55383bf07d11eb1ce940010000e9e3000000e978000000b824ae7441ff552cbb01000000f7c6010000007503ff553889f083c00270f68b7443fe89f38b45008d40f43b45087303ff5520894500c740fc02000000eb05e92e000000bec0b17a4189308958048b1c24c7042401000000ff7114ff710c89de89c3b801000000ba0c1f794156e92878feffb801000000c38b4afcff710cff71148b4424040bc0e84a37ffff8b7d008d7ff43b7d087303ff5520897d00c747fc02000000befcb17a4189378947048b5c2408c7442408010000008b14248b4c240489542404890c2489d889fb89c7b801000000ba0c1f794157e9bc77feff8b5afc8b4b2083f9017406b801000000c38b7d008d7ff43b7d087303ff5520897d00c747fc02000000be38b27a4189378b431c8947048b3424c7042401000000ff7314ff730c89fbb801000000ba0c1f794156e96477feffb801000000c30bc0|@3640,63|139,0,@51 147,0,0 207,0,@3637 222,0,0 237,0,0 242,0,@2978 248,1,@3001 253,0,0 274,1,@3277 303,0,@3638 320,0,0 345,0,0 350,0,@2978 356,1,@3001 372,0,0 402,0,@3639 420,0,0 433,0,0 438,0,@2978 444,1,@3001 449,0,0 3637:C2,32|8b7a04500bc7a801587503ff55383bc77506b803000000c3b801000000c30bc0|@3492,37|19,0,1 25,0,0 3638:C2,32|8b7a04500bc7a801587503ff55383bc77506b803000000c3b801000000c30bc0|@3492,37|19,0,1 25,0,0 3639:C2,32|8b7a04500bc7a801587503ff55383bc77506b803000000c3b801000000c30bc0|@3492,37|19,0,1 25,0,0 3640:S44|475f434f444528292e636f646567656e2831302967656e50726f6328352970757368436c6f73757265283129 3641:C2,32|3b650c7303ff55248b78088b3424893c24ff700c8b58048b008b520456ff2290|@3642,63| 3642:S41|475f434f444528292e636f646567656e2831302967656e50726f6328352970726576696f7573283129 3643:C2,76|3b650c7303ff55245050ff7008ff700c8d7c2408578b58048b008b520483c800ff128b45008d40f43b45087303ff5520894500c740fc020000008b342489308b5c240489580483c408c30bc0|@3644,63| 3644:S39|475f434f444528292e636f646567656e2831302967656e50726f632835296c6f6164536c283129 3645:C2,228|3b650c7303ff552483f801753d8b5d008d5bf43b5d087303ff5520895d00c743fc020000008b4204894304c703010000008b7c2408897c2408b8fcf978418b342483c40856e91646feff8b7a08f7c701000000752b83f80375048b37eb31a8017503ff553889c383eb0270f68b7f0489d83b650c7303ff5524ebd2be01000000b810a37a410bc0ff552cbe010000008b1e83fbfb753f8b55008d52f43b55087303ff5520895500c742fc020000008b4e04894a04c702fdffffff8b4424088944240889d3b8a0027a418b3c2483c40857e98b45feffb8b0b47a4190ff552cb80100000090|@3609,63|45,0,0 58,0,@2887 70,1,@2888 124,0,0 129,0,@3596 139,0,0 182,0,-2 197,0,@3294 209,1,@2888 214,0,@3646 223,0,0 3646:O3|@7320,@224,@3647 3647:S30|70726576696f75733a20636c6f73757265206e6f7420636f6e7374616e74 3648:C2,32|3b650c7303ff55248b78088b3424893c24ff700c8b58048b008b520456ff2290|@3642,63| 3649:O1|@3650 3650:C2,8|b801000000c30bc0|@3651,1|1,0,0 3651:S45|475f434f444528292e636f646567656e2831302967656e50726f63283529636c6f73757265416464722d283129 3652:O1|@3653 3653:C2,16|b8180c79410bc0ff552cb80100000090|@3651,1|1,0,@2944 11,0,0 3654:O1|@3655 3655:C2,16|b8180c79410bc0ff552cb80100000090|@3651,1|1,0,@2944 11,0,0 3656:C2,272|3b650c7303ff552483f8017510b80100000089da8b3c2483c40c57ff225250538b7a04f7c701000000752b83f80375048b37eb2fa8017503ff553889c383eb0270f68b7f0489d83b650c7303ff5524ebd2be01000000b810a37a41ff552cbe010000008b1e83fbfb75408b55008d52f43b55087303ff5520895500c742fc020000008b4e04894a04c702fdffffff8b4424148944241489d3b8a0027a418b7c240c83c41457e97643feff8b5424088b5a048b442404e87200000050b8010000008b542404ff128b0c24bf0900000089ce23f7f7c6010000007503ff5538505289cad1fa8d47fff7ea8d70015a5870eb8b5c24148b542418895c24188954241489c389f0bac4397a4183c410e9d082ffff|@3609,63|14,0,0 82,0,0 87,0,@3596 95,0,0 138,0,-2 153,0,@3294 166,1,@2888 182,1,@3657 188,0,0 202,0,4 260,0,@3416 268,1,@3417 3657:C2,136|3b650c7303ff5524f7c30100000075678b3b8b3783fefb752783f803750db8c0b77a41ff552cb801000000a8017503ff553889c283ea0270f68b5b0489d0ebc083f8037506b803000000c3a8017503ff553889c283ea0270f68b5b0489d083c800e89affffffa8017503ff553889c783c70270f689f8c3b81cb87a4183c800ff552cb80100000090|@3662,61|31,0,@3658 39,0,0 70,0,1 120,0,@3660 131,0,0 3658:O3|@7320,@224,@3659 3659:S65|7472616e736c617465436c6f73757265496e6465783a20636f6e7374616e747320646f6e27742062656c6f6e6720696e20706879736963616c20636c6f73757265 3660:O3|@7320,@224,@3661 3661:S53|7472616e736c617465436c6f73757265496e6465783a2062616420696e64657820696e746f206c6f676963616c20636c6f73757265 3662:S54|475f434f444528292e636f646567656e2831302967656e50726f632835297472616e736c617465436c6f73757265496e646578283229 3663:C2,32|3b650c7303ff55248b78088b3424893c24ff700c8b58048b008b520456ff2290|@3642,63| 3664:O1|@3665 3665:C2,8|b801000000c30bc0|@3666,1|1,0,0 3666:S42|475f434f444528292e636f646567656e2831302967656e50726f63283529636f6465416464722d283129 3667:O1|@3668 3668:C2,16|b8180c79410bc0ff552cb80100000090|@3666,1|1,0,@2944 11,0,0 3669:O1|@3670 3670:C2,16|b8180c79410bc0ff552cb80100000090|@3666,1|1,0,@2944 11,0,0 3671:C2,348|3b650c7303ff552483fb0175738b7afc52ff7208bb010000008b5734ff128b34248b5efc8b55008d52f43b55087303ff5520895500c742fc020000008b4edc894a04c702fdffffff50ff730c89d3b8a0027a410bc0e80640feff8b7c24048b77fc6a016affff7614ff760c89c38b442410ba78927a4183c800e856d8ffffeb05e9070000008b042483c408c38b3b8b3783fefb75088b5b04e963ffffff8b4afc5250ff73046aff6affff72046a01ff33bb030000008b04248b513883c4040bc0ff12f7c00100000075048b38eb0db820387a41ff552cbf010000008b742404f7c6010000007503ff553889f383c30270f65789da8b5c240489d08b54240c83c800e8fafeffff8b4c2408bf0900000089ce23f7f7c6010000007503ff5538505289cad1fa8d47fff7ea8d70015a5870eb8b5c240c8b53fc50566affff7214ff720c8b5c2414ba78927a4183c800e882d7ffff8b042483c414c383c800|@3672,63|21,0,0 68,0,-2 79,0,@3294 86,1,@2888 114,0,@3578 122,1,@3579 177,0,1 207,0,@3409 215,0,0 267,0,4 326,0,@3578 334,1,@3579 3672:S42|475f434f444528292e636f646567656e2831302967656e50726f632835296c6f61644974656d73283229 3673:O1|@3674 3674:C2,60|3b650c7303ff552483f8017506b801000000c38b388b3783fefb75058b4004ebdf8b400490e8d6ffffffa8017503ff553889c783c70270f689f8c390|@3675,49|14,0,0 3675:S48|475f434f444528292e636f646567656e2831302967656e50726f632835296e6f6e436f6e73746e74436f756e74283129 3676:C2,172|3b650c7303ff552483fb017506b801000000c38b3b8b3783fefb75058b5b04ebdf8b4afc5250ff7304ff72d46aff6aff68bcbc7a416a01ff33bb030000008b04248b513883c40490ff12f7c00100000075048b38eb0db820387a41ff552cbf010000008b74240c8b5efcff7424086affff7314ff730c89fb8b442410ba78927a41e80ad6ffff8b542408f6c2017503ff553889d183c10870f68b5c240489c88b54240c83c410e955ffffff90|@3672,63|14,0,0 49,0,@3677 58,0,1 87,0,@3409 95,0,0 125,0,@3578 130,1,@3579 3677:O1|@3678 3678:C2,16|b8f0bc7a410bc0ff552cb80100000090|@3681,1|1,0,@3679 11,0,0 3679:O3|@7320,@224,@3680 3680:S40|636f646567656e3a20756e68616e646c6564207061747465726e2d6d61746368206661696c757265 3681:S34|475f434f444528292e636f646567656e283130296d617463684661696c6564283129 3682:S30|475f434f444528292e636f646567656e2831302967656e50726f63283529 3683:C2,840|3b650c7303ff55248b7c241083ff017507be03000000eb05be0100000089f183f102525053518b4204e80245ffff8b7c240c50ff74241cbb010000008b4424108b571890ff128b7424288b1e83fbfd75708b54241050ff742424ff742424ff742424bb010000008b4424188b520c0bc0ff128b4c2414ff7104ff71086a01ff7424108b5c240c8b442410ba2c0b7a410bc0e83e4dffff8b04248b7c24088b70088b5f04891e8b54240c83fa0174428b4c2418ff7104bb94027a41b8a0027a41eb05e93500000083c800e8be3bfeff89c78b45008d40f83b45087303ff5520894500c740fc01000000893883c41cc21400b80100000083c41cc2140089c189c80bc0e85e02000083f80174498b4424108b1c248b4004e89e0200008b7c24108b7424248b5c24208b54241c8b4c241889742428895c242489542420894c241cbb030000008b4424088b57108b7c241483c41c57ff228b4424108b40040bc0e8224cffff83f80174668b7c24108b1c248b4704e8420200008b742410ff76088b5e0489c8baf08d7a410bc0e8eaceffff8b5c24108b5424288b4c24248b4424208b7c241c8b742418894c242889442424897c24208974241cff7310bb0300000089d08b14248b4c241883c42051ff228b7c241051ff7424248b5c242c8b4704e81e49ffff8b74241450ff742428ff742428ff74242889c38b44241c8b560cff128b5c242883fb0175168b54241889c18b420490e86e4bffff83f8017519eb0489c1eb138b7c241851b8010000008b57140bc0ff12eb06b801000000518b54241c8b4a048b41148b3883ff017407be01000000eb5451ff72088b1c2489c80bc0e80a44ffff8b7424048b5e14c70303000000508b44240490e86e18ffff8b55008d52f03b55087303ff5520895500c742fc030000008b4c240c894a088b3c24897a04890289d683c40c8b1c24f7c301000000751d8b4c241c566aff8b1b8b4104ba4019794183c800e80a59feff89c2eb06ba01000000568b542420ff72088b5a048b442410baf08d7a410bc0e88acdffff8b4c2420ff742430ff742430ff7424308b5c24148b4424448b510c83c800ff128b7c2420ff7704ff770850ff74241c8b5c240c8b442410ba2c0b7a4183c800e8a24affff8b34248b5c24148b56088b4b04890a83c428c2140090|@3688,63|18,0,1 25,0,0 42,1,@3295 56,0,0 99,0,0 139,0,@3317 146,1,@3319 182,0,@3293 187,0,@3294 202,1,@2888 241,0,0 258,1,@3684 278,1,@3686 319,0,1 350,1,@3316 370,1,@3686 387,0,@3565 394,1,@3566 442,0,1 478,1,@3310 530,1,@3316 551,0,0 565,0,0 588,0,0 606,1,@3298 619,0,1 630,1,@3234 702,0,@2963 710,1,@2965 719,0,0 739,0,@3565 746,1,@3566 806,0,@3317 814,1,@3319 3684:C2,20|83f8017506b803000000c3b801000000c383c800|@3685,1|6,0,1 12,0,0 3685:S27|5452414e535f54414228292e6973456d7074794c6162656c283129 3686:C2,16|8b78088b73048937b801000000c30bc0|@3687,57|9,0,0 3687:S26|5452414e535f54414228292e756e6d61726b537461636b283229 3688:S30|475f434f444528292e636f646567656e2831302967656e436f6e64283729 3689:C2,2428|3b650c7303ff55248b7c240c83ff017507be03000000eb05be0100000089f183f10252505351be0100000083fb01750489f2eb26f7c6010000007503ff553889f183c10270f68b5b0489ce3b650c7303ff5524ebd6ba01000000528b4c240c8b0183f8fb755a8b7904f7c701000000740eb8c020754190ff552cbe0100000089fe5789f3b8cd00000083c800ff1500a4040883f80174708b3424bb209304083bf375226a19bbfdffffffb8010000008d54241c0bc0e8de08000083c418c21000e93f050000ba609304083bf2751e6ae9bbfdffffffb8010000008d54241c83c800e8b208000083c418c21000b940a404083bf175236af9bbfdffffffb8010000008d54241ceb05e9c804000090e88608000083c418c21000b820ad04083bf0751b6aedbbfdffffffb8010000008d54241ce86208000083c418c21000bf20a404083bf7751bbb13000000b8fdffffff8d5424180bc0e8fa46000083c418c21000bb809e04083bf3751bbb01000000b8010000008d5424180bc0e8d646000083c418c21000baa09e04083bf2751bbb15000000b8110000008d5424180bc0e8b246000083c418c21000b9c09e04083bf1751bbb0d000000b80d0000008d5424180bc0e88e46000083c418c21000b8209f04083bf0751b6a11bb15000000b8010000008d54241ce8ae07000083c418c21000bf80ac04083bf7751b6ae7bbe7ffffffb8030000008d54241ce88a07000083c418c21000bb80af04083bf3751bbb0f000000b80f0000008d5424180bc0e82246000083c418c21000baa0af04083bf2751bbb03000000b8030000008d5424180bc0e8fe45000083c418c21000b9c0af04083bf1751bbbe7ffffffb8e7ffffff8d5424180bc0e8da45000083c418c21000b8e0af04083bf0751bbb17000000b8fdffffff8d5424180bc0e8b645000083c418c21000bf40ac04083bf7751bbb07000000b8fdffffff8d5424180bc0e89245000083c418c21000bbc0a904083bf3751bbbfbffffffb8fdffffff8d5424180bc0e86e45000083c418c21000bac0af04083bf2751bbbe7ffffffb8e7ffffff8d5424180bc0e84a45000083c418c21000b900af04083bf1751bbbf3ffffffb8f3ffffff8d5424180bc0e82645000083c418c21000b820af04083bf0751bbbffffffffb8ffffffff8d5424180bc0e80245000083c418c21000bf40af04083bf7751bbbebffffffb8efffffff8d5424180bc0e8de44000083c418c21000bb60af04083bf3751bbb05000000b8fdffffff8d5424180bc0e8ba44000083c418c21000ba00b004083bf2751bbb0b000000b8fdffffff8d5424180bc0e89644000083c418c21000b9c0b004083bf1751bbbf7ffffffb8fdffffff8d5424180bc0e87244000083c418c21000b8e0b004083bf0751bbb09000000b8fdffffff8d5424180bc0e84e44000083c418c21000bfa09204083bf77517b8010000008d54241883c800e88a46000083c418c21000bb20b104083bf37517b8ffffffff8d54241883c800e89e4a000083c418c21000ba00b104083bf27517b8010000008d54241883c800e87e4a000083c418c210008b4c242883f9017458b8e0ad04083bf07502eb5dbf00ae04083bf77502eb62bba0b004083bf37502eb5cba60ac04083bf27502eb61b8609f04083bf07502eb5bbf20ae04083bf77502eb60bb40ae04083bf37502eb5aba60ae04083bf27507eb5de9d3000000b880ae04083bf07507eb4de948000000bf20b004083bf7750ceb3de938000000e933000000bb40b004083bf3750ceb28e923000000e91e000000ba60b004083bf2750ceb13e90e000000e909000000b880b004083bf075708b7d008d7fec3b7d087303ff5520897d00c747fc04000000c7470c010000008b7424108977088b5c240c895f04c707090000008b5424148b4424248b7424208b5c241cb99c317541894c24288944242489742420895c241c8b4c2418c744241801000000bbc42b754189f88b5204eb05e90600000083c41851ff228b45008d40f83b45087303ff5520894500c740fc010000008b7c241089388d5424180bc0e87e10000083c418c210008b45008d40f83b45087303ff5520894500c740fc010000008b74241089308d54241883c800e84e10000083c418c2100083f8f7755d8b790883ff0175258b590c83fb0175168b710483fe017507be03000000eb13be01000000eb0cbe01000000eb05be0100000083ff01743a8b5904f6c3017503ff553883fb017e1b8b5424105357ff7110568b4208e846dfffff89c3eb2ee9e5020000bb01000000ff710457ff711056eb1a8b5c2410ff710457ff7110568b44240c8b532883c800ff1289c383fb0174718b4c242c83f901750b8b44240889c283f202eb05ba010000008b4424208b7d008d7fdc3b7d087303ff5520897d00c747fc08000000be141a7b4189378b1c24895f1c8b7424088977188b70208977148b5c240c895f108b5818895f0c8b480c894f088b4808894f045257b801000000eb05e9d10100008d54242c0bc0e8fe5400008b7d008d7ff43b7d087303ff5520897d00c747fc02000000894704c7070500000089f8e87ae3feff8b74240883fe017407bb01000000eb728b5c241083fb01744b8b542414f6c2017503ff553883fa017d0fb8f01e7b410bc0ff552cbb010000008b4c24285089d38b4108e8fe1effff8b7c242c8b5f08e852e4ffff89c38b04240bc0e8ae5cfeff89c3eb258b542428508b4424188b521c0bc0ff1289c38b04240bc0e88e5cfeffeb05e90500000089c383c4048b4c240883f9017402eb238b4424288b78088b77108b56088b0a535289c890e85e5cfeff8b3c24890783c404eb01538b44241083f8017402eb4e8b7c241483ff01742b8b74242cff76088b5c241c8b04240bc0e8621effff6a0389c38b442404ba401979410bc0e86a4ffeffeb178b74242c6a038b5e188b4608ba40197941e8524ffeff5083c4048b5c240883fb01743d8b55008d52f43b55087303ff5520895500c742fc02000000b92c1f7b41890a8b44240489420489d38b4424248d5424300bc0e8e615000083c430c210008b55008d52f43b55087303ff5520895500c742fc02000000b9d01f7b41890a8b442404894204ff342452bb010000008b44242c8d5424380bc0e8222a000083c430c210008b142483fa01742a8b4c240483f90175218b4424208b782483ff0175156a038b58188b4008ba4019794183c800e8924efeff8b0c2483f9017407b801000000eb1e8b45008d40f83b45087303ff5520894500c740fc010000008b7c241c89388d5424240bc0e8020d000083c424c210008b45008d40f83b45087303ff5520894500c740fc0100000089088d54241483c800e8d60c000083c414c21000|@3815,63|18,0,1 25,0,0 39,0,0 86,0,0 114,0,@372 123,0,0 133,0,102 142,0,I150 155,0,I15 166,0,-2 171,0,0 182,1,@3690 198,0,I17 209,0,-2 214,0,0 226,1,@3690 237,0,I152 248,0,-2 253,0,0 270,1,@3690 281,0,I223 292,0,-2 297,0,0 306,1,@3690 317,0,I151 326,0,9 331,0,-2 342,1,@3785 353,0,I106 362,0,0 367,0,0 378,1,@3785 389,0,I107 398,0,10 403,0,8 414,1,@3785 425,0,I108 434,0,6 439,0,6 450,1,@3785 461,0,I111 472,0,10 477,0,0 486,1,@3690 497,0,I218 508,0,-13 513,0,1 522,1,@3690 533,0,I242 542,0,7 547,0,7 558,1,@3785 569,0,I243 578,0,1 583,0,1 594,1,@3785 605,0,I244 614,0,-13 619,0,-13 630,1,@3785 641,0,I245 650,0,11 655,0,-2 666,1,@3785 677,0,I216 686,0,3 691,0,-2 702,1,@3785 713,0,I196 722,0,-3 727,0,-2 738,1,@3785 749,0,I244 758,0,-13 763,0,-13 774,1,@3785 785,0,I238 794,0,-7 799,0,-7 810,1,@3785 821,0,I239 830,0,-1 835,0,-1 846,1,@3785 857,0,I240 866,0,-11 871,0,-9 882,1,@3785 893,0,I241 902,0,2 907,0,-2 918,1,@3785 929,0,I246 938,0,5 943,0,-2 954,1,@3785 965,0,I252 974,0,-5 979,0,-2 990,1,@3785 1001,0,I253 1010,0,4 1015,0,-2 1026,1,@3785 1037,0,I11 1046,0,0 1058,1,@3789 1069,0,I255 1078,0,-1 1090,1,@3791 1101,0,I254 1110,0,0 1122,1,@3791 1142,0,I229 1153,0,I230 1164,0,I251 1175,0,I217 1186,0,I113 1197,0,I231 1208,0,I232 1219,0,I233 1235,0,I234 1251,0,I247 1272,0,I248 1293,0,I249 1314,0,I250 1349,0,0 1369,0,4 1390,0,@487 1418,0,0 1423,0,@449 1482,1,@3705 1530,1,@3705 1570,0,1 1577,0,0 1584,0,0 1591,0,0 1630,1,@3611 1644,0,0 1710,0,0 1743,0,@3804 1796,0,0 1814,1,@3808 1847,0,2 1854,1,@3204 1868,0,0 1901,0,@3810 1911,0,0 1926,1,@3277 1938,1,@3627 1950,1,@2990 1982,1,@2990 2030,1,@2990 2082,1,@3277 2095,0,@2963 2102,1,@2965 2121,0,@2963 2126,1,@2965 2168,0,@3812 2194,1,@3712 2229,0,@3814 2247,0,0 2262,1,@3741 2310,0,@2963 2318,1,@2965 2331,0,0 2374,1,@3705 2418,1,@3705 3690:C2,396|3b650c7303ff55248b7af4f7c70100000075638b770483fe01756089d150ff378b44240c90e87e01000083f8017402eb18538b5c24088b44241083c800e88685ffff83f8017503eb73538b41fc516aff6affff71046a01bb030000008b78108b44241889fa83c800ff12f7c001000000750e8b30eb19e900010000e9ec000000b820387a410bc0ff552cbe010000008b1c248b53fc8b4d008d49f43b4d087303ff5520894d00c741fc020000008b44240c894104c701fdffffffeb05e97f00000056ff720889cbb8a0027a4190e8f22dfeff8b7c24048b770cf7c601000000750d89c18b06e82e01000089c3eb07bb0100000089c18b5424048b42fcff742418ff74240cff7008ff700c5389cb8b442414bab0cd7a4183c800e85a01000089c78b45008d40f83b45087303ff5520894500c740fc01000000893883c414c204008b45008d40f83b45087303ff5520894500c740fc010000008b79f8893889ca8b74240c83c41456e9480b0000b890097b410bc0ff552cb801000000b890097b4183c800ff552cb80100000090|@3784,63|38,1,@3691 62,1,@3469 88,0,1 129,0,@3409 139,0,0 182,0,-2 200,0,@3294 206,1,@2888 230,1,@3693 239,0,0 274,0,@3695 282,1,@3696 360,1,@3705 365,0,@3782 375,0,0 380,0,@3782 391,0,0 3691:C2,48|83f8177506b801000000c383f8077506b801000000c383f8fb7507bf03000000eb05bf0100000089f883f002c383c800|@3692,33|6,0,0 17,0,0 28,0,1 35,0,0 3692:S27|49333836434f4445434f4e5328292e696e73747249735252283129 3693:C2,32|89c78b45008d40f83b45087303ff5520894500c740fc010000008938c383c800|@3694,33| 3694:S6|557365526567 3695:O4|@3696,@3199,@2977,@3198 3696:C2,572|3b650c7303ff55248b7c240c5050525053ff772889c38b470ce8a25bfaff83f801754bbbffffffff8b44240890e8ca48faff89c3b81cac7941e8b644faff8b75008d76f03b75087303ff5520897500c746fc03000000894608bb54cf7441895e04bafcc1b441891689f090ff552c8d7424108b5c2408891e8d5424108942048b4c241450508b44242cff318b5c24108b400c83c800e8265bfaff83f801754bbbffffffff8b44241090e84e48faff89c3b81cac7941e83a44faff8b7d008d7ff03b7d087303ff5520897d00c747fc03000000894708be54cf7441897704bbfcc1b441891f89f890ff552c8d7c24048b74241089378d5c24048943048b5424088b0c248b3983fffd75638b1a8b0383f8fd755fff73048b59048b44243890e82e82ffff83f80174118b41048d54242883c800e822010000eb5c8b1c248b44243c0bc0e80a82ffff83f80174118b04248d54242883c800e826030000eb71b8010000008d542428e83e050000eb66e93c0000008b59048b44243490e8d281ffff83f80174168b41048d54242483c800e8c6000000eb16e96e000000b8010000008d54242483c800e8fe04000050eb5a8b1a8b0383f8fd7542ff73048b1c248b44243c90e88a81ffff83f801741deb0ae935000000e9300000008b04248d54242883c800e89a020000eb1fb8010000008d542428e8b2040000eb0fb8010000008d542424e8a2040000508b7c241083ff01741a50ff742438bbd0d77a41b8409704080bc0e87e2dfeff89c6eb06be01000000508b042483c42cc2140083c800|@3704,63|26,1,@435 36,0,-1 46,1,@336 53,0,@3201 58,1,@323 90,0,@224 98,0,@7320 150,1,@435 160,0,-1 170,1,@336 177,0,@3201 182,1,@323 214,0,@224 222,0,@7320 286,1,@3469 306,1,@3697 322,1,@3469 342,1,@3699 349,0,0 358,1,@3701 378,1,@3469 398,1,@3697 410,0,0 422,1,@3701 450,1,@3469 482,1,@3699 489,0,0 498,1,@3701 505,0,0 514,1,@3701 534,0,@3703 539,0,I48 546,1,@2893 555,0,0 3697:C2,476|3b650c7303ff552450508b7af45250ff72ec6a018d742410568b5a0c8b42088b570c0bc0ff128b5c24048b530c52ff72288b5a108b44241090e8bacbfeff8b0c2483f9017416ff742404bb544c7a41b84097040890e8f22cfeffeb05b8010000008b44240c5050508b780483ff0175268b70f48b58088b400c8b5604ff1289e38b54241c891389e18b7c242089790489e6894608eb728b5c241c8b0790e84e47feff83f801742b8b7424188b5ef48b53048b5e088b460c90ff1289e18b7c241c893989e68b5c2420895e0489e2894208eb418b7424188b5ef4ff37ff34248b53088b5e088b460c90ff128d4c24048b44242089018d7c24048b7424248977048d5c24048b1424eb05e90600000089530883c4048b4c2418ff742414ff74240cff71088b5c240c8b4110e8dae3feff8b4424188b7d008d7ff43b7d087303ff5520897d00c747fc020000008b742408897704c70705000000ff700c89fbb898a47941e88e28feff8b5c24188b530c5052ff72288b5a108b44240ce8ca4afeff8b0c2483f9017416ff742404bb7c5c7a41b84097040890e8b22bfeffeb05b8010000008b4424246aff8b5c24148b400cba401979410bc0e88247feff8b7c24246aff8b5ff08b470cba401979410bc0e86a47feff8b44240883c430c30bc0|@3698,63|58,1,@3148 75,0,@3465 80,0,I48 86,1,@2893 93,0,0 158,1,@2958 298,1,@3215 339,0,2 349,0,@3183 354,1,@2888 378,1,@2969 395,0,@3481 400,0,I48 406,1,@2893 413,0,0 431,0,@2963 438,1,@2965 455,0,@2963 462,1,@2965 3698:S37|5452414e535f54414228292e62696e6172794f7028372967656e42696e6172794952283129 3699:C2,476|3b650c7303ff552450508b7af45250ff72f06a018d742410568b5a0c8b42088b570c0bc0ff128b5c24048b530c52ff72288b5a108b44241090e892c9feff8b0c2483f9017416ff742404bb544c7a41b84097040890e8ca2afeffeb05b8010000008b44240c5050508b780483ff0175268b70f48b58088b400c8b5604ff1289e38b54241c891389e18b7c242089790489e6894608eb728b5c241c8b0790e82645feff83f801742b8b7424188b5ef48b53048b5e088b460c90ff1289e18b7c241c893989e68b5c2420895e0489e2894208eb418b7424188b5ef4ff37ff34248b53088b5e088b460c90ff128d4c24048b44242089018d7c24048b7424248977048d5c24048b1424eb05e90600000089530883c4048b4c2418ff742414ff74240cff71088b5c240c8b4114e8b2e1feff8b4424188b7d008d7ff43b7d087303ff5520897d00c747fc020000008b742408897704c70705000000ff700c89fbb898a47941e86626feff8b5c24188b530c5052ff72288b5a108b44240ce8a248feff8b0c2483f9017416ff742404bb7c5c7a41b84097040890e88a29feffeb05b8010000008b4424246aff8b5c24148b400cba401979410bc0e85a45feff8b7c24246aff8b5fec8b470cba401979410bc0e84245feff8b44240883c430c30bc0|@3700,63|58,1,@3148 75,0,@3465 80,0,I48 86,1,@2893 93,0,0 158,1,@2958 298,1,@3215 339,0,2 349,0,@3183 354,1,@2888 378,1,@2969 395,0,@3481 400,0,I48 406,1,@2893 413,0,0 431,0,@2963 438,1,@2965 455,0,@2963 462,1,@2965 3700:S37|5452414e535f54414228292e62696e6172794f7028372967656e42696e6172795249283129 3701:C2,792|8d7c24ac3b7d0c7303ff552850508b7af452ff72f06a018d74240c568b5a0c8b42088b570c83c800ff128b1c248b530c52ff72288b5a108b44240c0bc0e866c7feff8b0c2483f9017416ff742404bb544c7a41b84097040890e89e28feffeb05b8010000008b44240850508b78f4ff70ec6a018d742408568b580c8b40088b570c83c800ff128b5c24108b530c52ff72288b5a108b44240890e80ac7feff8b0c2483f9017416ff742404bb544c7a41b84097040890e84228feffeb05b8010000008b44241850505050508b780483ff01753a8b70f48b58088b400c8b56040bc0ff1289e38b542430891389e18b7c243489790489e68b5c241c895e0889e28b4c2420894a0c89e7894710eb728b5c24308b0783c800e88642feff83f801743d8b74242c8b5ef48b53048b5e088b460c90ff1289e18b7c2430893989e68b5c2434895e0489e28b4c241c894a0889e78b74242089770c89e3894310eb588b5c241c8b0783c800e83642feff83f801744a8b74242c8b5ef48b53048b5e08eb05e9870000008b460c0bc0ff1289e18b7c2430893989e68b5c2434895e0489e28b4c241c894a0889e78b74242089770c89e3894310eb56e9510000008b74242c8b5ef4ff37ff34248b53088b5e088b460c0bc0ff128d4c24048b44243489018d7c24048b7424388977048d5c24048b5424208953088d4c24048b44242489410c8d7c24048b342489771083c4048b5c242cff742408ff742414ff73088b53148b5c240c89d083c800e80e8cfeff8b4c242c8b45008d40f43b45087303ff5520894500c740fc020000008b7c2410897804c70005000000ff710c89c3b898a47941e84223feff8b74242c8b5e0c5053ff73288b5b108b44240ce87e45feff8b142483fa017418ff742404bb7c5c7a41b84097040890e86626feff89c1eb05b9010000008b4c24388b410c50ff70288b58108b44241ce84245feff8b3c2483ff017418ff742404bb7c5c7a41b84097040890e82a26feff89c6eb05be010000008b7424406aff8b5c24248b460cba40197941e8fa41feff8b5c24406aff8b530c8b5c241c89d0ba4019794183c800e8de41feff8b44241083c44cc30bc0|@3702,63|62,1,@3148 79,0,@3465 84,0,I48 90,1,@2893 97,0,0 154,1,@3148 171,0,@3465 176,0,I48 182,1,@2893 189,0,0 278,1,@2958 358,1,@2958 550,1,@3098 591,0,2 601,0,@3183 606,1,@2888 630,1,@2969 647,0,@3481 652,0,I48 658,1,@2893 667,0,0 690,1,@2969 707,0,@3481 712,0,I48 718,1,@2893 727,0,0 745,0,@2963 750,1,@2965 770,0,@2963 778,1,@2965 3702:S37|5452414e535f54414228292e62696e6172794f7028372967656e42696e6172795252283129 3703:S8|62696e6172794f70 3704:S23|5452414e535f54414228292e62696e6172794f70283729 3705:C2,536|3b650c7303ff55248b7a0883ff017507be03000000eb05be01000000525056b8010000008d54240c90e8060200008b742404f7c60100000075598b168b0a83f9fb75478b7d008d7ff43b7d087303ff5520897d00c747fc02000000894704c70705000000ff720489f8e802d4feff508b4424040bc0e85ad3ffff89c38b04240bc0e87e4dfeff89c3eb10bb010000005050eb07bb0100000050508b4c240c83f9017507ba01000000eb218b4424108b78fc8b77088b56108b4a088b0153e8424dfeff8901ba01000000eb01538b442410f7c00100000075498b308b1e83fbfb7507bfffffffffeb3e8b5424148b4afc6aff6affff72046a01bb030000008b008b51100bc0ff12f7c00100000075048b38eb14b820387a41ff552cbf01000000eb05bfffffffff8b7424148b5efc8b55008d52e03b55087303ff5520895500c742fc07000000b96cdb7a41890a8b4424108942188b4b24894a148b4318894210897a0c8b730c8972088b73088972048b74240c83fe0174378b7c24148b75008d76f43b75087303ff5520897500c746fc02000000b880df7a41890689560489f38b47f48b54241483c418e9820600008b7424148b45008d40f43b45087303ff5520894500c740fc02000000c740040100000089388b7d008d7ff43b7d087303ff5520897d00c747fc02000000bb48f47a41891f8957048b14248b4c2418895424188b5c2414897c241489da89c38b46f483c41451e9981a0000|@3781,63|17,0,1 24,0,0 32,0,0 42,1,@3706 96,0,2 106,1,@3204 118,1,@3623 130,1,@2990 139,0,0 148,0,0 164,0,0 190,1,@2990 197,0,0 226,0,-1 249,0,1 275,0,@3409 283,0,0 290,0,-1 326,0,@3708 404,0,@3710 426,1,@3712 461,0,0 492,0,@3740 532,1,@3741 3706:C2,216|3b650c7303ff5524a8017503ff553883f8057c02eb178b7afc8b77ec5023c6a801587503ff55383bc67d02eb06b801000000c383f8017507bb01000000eb5c83f8037507bb07000000eb505250bbffffffff83c800e8323cfaff89c3b860a67941e81e38faff8b55008d52f03b55087303ff5520895500c742fc03000000894208b954cf7441894a04b8fcc1b441890289d090ff552cbb01000000a8017503ff553889c183c10270f6525389c8e84effffff8b7d008d7ff43b7d087303ff5520897d00c747fc020000008947048b3424893789f883c408c3|@3707,63|46,0,0 57,0,0 69,0,3 78,0,-1 86,1,@336 93,0,@3186 98,1,@323 130,0,@224 138,0,@7320 151,0,0 3707:S57|475f434f444528292e636f646567656e2831302967656e4576616c28362963616c6c436c6f7375726528312967657441726752656773283129 3708:C2,944|3b650c7303ff55248b4218f7c00100000075718b388b3783fefb756d8b4f04f7c1010000007410b8c020754183c800ff552cb80100000089c85253515089c3b8cd000000ff1500a4040883f80174708b44240c8b7d008d7ff43b7d087303ff5520897d00c747fc020000008b742404897704c707fdffffffff700489fbb8a0027a41eb0ae960020000e9c601000083c800e80e1efeff8b5d008d5bf83b5d087303ff5520895d00c743fc0100000089038b542408891ac7420403000000eb05e917000000c7420801000000c7420c01000000b80100000083c410c38b04248b388b74240c8b5d008d5bf43b5d087303ff5520895d00c743fc02000000897b04c703fdffffffff7604b8a0027a41e8921dfeff8b14248b4afc81e1ffffff008d4c090183f903753e8b7d008d7ff83b7d087303ff5520897d00c747fc0100000089078b742408893ec7460401000000c7460801000000c7460c01000000b80100000083c410c38b7d008d7ff83b7d087303ff5520897d00c747fc0100000089078b74240c8b5d008d5bf43b5d087303ff5520895d00c743fc020000008b542404895304c703fdffffff57ff7604b8a0027a41e8ee1cfeff8b4c24106a05506a018b59048b4108ba8c167a4183c800e83656ffff8b7c24108b77045056ff76288b5e10b80500000083c800e8babefeff8b1c2483fb017414ff742404bb544c7a41b84097040890e8f21ffeff8b55008d52f43b55087303ff5520895500c742fc02000000c74204010000008b4c2408890a8b4424188b7c240c8938c7400401000000895008be48cc744189700cb80100000083c420c352536a05ff720c6a018b5a048b4208ba8c167a4190e89a55ffff8b5c24048b53045052ff72288b5a10b80500000083c800e81ebefeff8b0c2483f9017414ff742404bb544c7a41b84097040890e8561ffeff8b45008d40f83b45087303ff5520894500c740fc010000008b7c240889388b74240c8906c7460403000000c7460801000000bb48cc7441895e0cb80100000083c414c38b7a1483ff017421c70301000000c7430401000000c7430801000000c7430c01000000b801000000c352536a05ff72106a018b5a048b4208ba8c167a4183c800e8da54ffff8b7424048b5e045053ff73288b5b10b80500000083c800e85ebdfeff8b142483fa017414ff742404bb544c7a41b84097040890e8961efeff8b4d008d49f43b4d087303ff5520894d00c741fc02000000c74104010000008b44240889018b7c240cc70701000000c7470401000000894f08be48cc744189770cb80100000083c414c3|@3709,63|40,0,@372 51,0,0 64,0,102 70,0,I150 116,0,-2 126,0,@3294 146,1,@2888 185,0,1 199,0,0 206,0,0 211,0,0 257,0,-2 265,0,@3294 270,1,@2888 330,0,0 337,0,0 344,0,0 349,0,0 420,0,-2 429,0,@3294 434,1,@2888 454,0,@3339 462,1,@3405 482,0,2 490,1,@3148 507,0,@3465 512,0,I48 518,1,@2893 549,0,0 572,0,0 580,0,@193 588,0,0 612,0,@3339 618,1,@3405 638,0,2 646,1,@3148 663,0,@3465 668,0,I48 674,1,@2893 717,0,1 724,0,0 729,0,@193 737,0,0 755,0,0 762,0,0 769,0,0 776,0,0 781,0,0 802,0,@3339 810,1,@3405 830,0,2 838,1,@3148 855,0,@3465 860,0,I48 866,1,@2893 897,0,0 913,0,0 920,0,0 928,0,@193 936,0,0 3709:S62|475f434f444528292e636f646567656e2831302967656e4576616c28362963616c6c436c6f737572652831296c6f6164436c6f7375726550726f63283229 3710:C2,76|3b650c7303ff55245050505089e38b520483c800ff128b45008d40ec3b45087303ff5520894500c740fc040000008b3c2489388b7424048970048b5c24088958088b54240c89500c83c410c3|@3711,63| 3711:S62|475f434f444528292e636f646567656e2831302967656e4576616c28362963616c6c436c6f737572652831296c6f6164436c6f7375726550726f63283129 3712:C2,808|3b650c7303ff55245253bb010000008d5424080bc0e82a03000089c3b8010000008d542408e89a05000050b8010000008b542404ff128b388b70048b4808ff700cbb11000000b8110000000bc0e88a37feff83f80174708b5c240c8b53fc8b43ec8b5a2c500bc3a801587503ff55383bc37502eb2d8b44240c8b58fc8b532cf6c2017503ff553883fa057f1d8b44240c8b58ecf6c3017503ff553883fb057e02eb07b811000000eb4f8b54240c8b42fc5050575651ff70306a018d5c2414538b58088b400ceb05e933000000ba08aa7941e81ac9feff8b5424208b4afc6aff8b5c24148b4108ba401979410bc0e83638feff8b44240ceb4f5050575651eb488b44240c8b58fc50505756516a11ff73306a018b530cff73088b1c2489d0ba8c167a4183c404e81a52ffff8b4c24208b79fc6aff89c38b4708ba40197941e8e637feffb8110000008b7424208b5efc8b532cf6c2017503ff553883fa057f07b901000000eb0ff6c2017503ff553889d183e90470f68b7eecf7c7010000007503ff553883ff057f0850b801000000eb1350f7c7010000007503ff553889f883e80470f689cb23d8f6c3017503ff553889cb2bd88d5b0170f489d9bb110000008b0424e81636feff8b5c24248b53fc508b4208e8a6c5feff89c723f9f7c7010000007503ff55388d78ff03f970f68b342489fa23d6f6c2017503ff553889fa2bd68d520170f48b4bfc8b590c89d090e88ec5feff8b44241083f801751d8b7c24288b77fcff760c8b5c2408b8f825754183c800e8b6050000eb1e8b7c24288b77fcff742404ff7608ff760c8b5c24188b000bc0e85a0c00008b5c241c83fb017502eb4a8b5424288b4afc8b4108ff730450ff70288b3b8b581089f8e8b639feff8b342483fe017414ff742404bb7c5c7a41b84097040890e89e1afeff8b5c240883c40c3b650c7303ff5524ebaf8b4c240883f90175068b542420eb128b4424208d54242c83c800e8720e000089c283fa017502eb2b8b4424288b78fcff72046aff8b1a8b4708ba40197941e83a36feff8b142483c4043b650c7303ff5524ebce8b4424288b78fc8b74242cc744242c030000008b5f08895c24288b58f08b40ec83c42856e9750e000090|@3739,63|11,0,0 22,1,@3713 29,0,0 38,1,@3718 44,0,0 66,0,8 71,0,8 78,1,@2958 163,0,8 205,0,@3198 210,1,@3200 231,0,@2963 238,1,@2965 286,0,@3339 294,1,@3405 313,0,@2963 318,1,@2965 323,0,8 351,0,0 393,0,0 442,0,8 450,1,@2958 466,1,@3189 526,1,@3190 554,0,@408 562,1,@3720 594,1,@3727 634,1,@2969 651,0,@3481 656,0,I48 662,1,@2893 710,1,@3735 741,0,@2963 746,1,@2965 781,0,1 803,1,@3736 3713:C2,152|3b650c7303ff552483f8017506b801000000c38b7afc8b77fc5253ff7004ff77048b188b4424088b56340bc0ff128b5c24088b53fc8b4afc508b59088b410cba28e47a4190e8760000008b7c2404f7c7010000007503ff553889fe83c60270f65089f38b4424048b54240c0bc0e88effffff8b5d008d5bf43b5d087303ff5520895d00c743fc020000008943048b1424891389d883c410c3|@3717,63|14,0,0 64,0,@3714 70,1,@3715 3714:O2|@3715,@3198 3715:C2,324|3b650c7303ff552450505250538b7b0c8b5c241889f883c800e83245faff83f801754bbbffffffff8b44241890e85a32faff89c3b81cac7941e8462efaff8b75008d76f03b75087303ff5520897500c746fc03000000894608bb54cf7441895e04bafcc1b441891689f090ff552c8d74240c8b5c2418891e8d54240c89420450508b4c24088b410c90e8c244faff83f801754bbbffffffff8b44242090e8ea31faff89c3b81cac7941e8d62dfaff8b7d008d7ff03b7d087303ff5520897d00c747fc03000000894708be54cf7441897704bbfcc1b441891f89f890ff552c89e78b742420893789e38943048b5424048b0a8b0183f8fb75448b7904f7c7010000007503ff553883ff017e2950508b5c2418566a018d742408568b73048b5c241c8b44242089f20bc0ff128b44240483c424c2040089f083c41cc2040089f083c41cc20400|@3716,63|26,1,@435 36,0,-1 46,1,@336 53,0,@3201 58,1,@323 90,0,@224 98,0,@7320 138,1,@435 148,0,-1 158,1,@336 165,0,@3201 170,1,@323 202,0,@224 210,0,@7320 3716:S24|5452414e535f54414228292e6c6f61644966417267283329 3717:S56|475f434f444528292e636f646567656e2831302967656e4576616c2836296a756d70546f50726f6328322967656e4172674c697374283229 3718:C2,460|3b650c7303ff552483fb017506b801000000c3a8017503ff553883f8057d71a8017503ff553889c783c70270f65250ff338b5b0489f883c800e8c2ffffff8b5c240483fb017507be01000000eb6583fb037507be07000000eb5950bbffffffff8b44240890e86230faff89c3b860a67941e84e2cfaff8b55008d52f03b55087303ff5520895500c742fc03000000eb05e9a8000000894208b954cf7441894a04b8fcc1b441890289d00bc0ff552cbe010000008b5424088b4afc8b79fc505656ff74240c6a018b5f088b470cba8c167a41e8aa4cffff8b7424108b5efc8b53fc8b4a085051ff71288b59108b44240c0bc0e82ab5feff8b042483f8017414ff742404bb544c7a41b84097040890e86216feff8b7d008d7ff43b7d087303ff5520897d00c747fc020000008b7424108977048b5c2408891f89f883c420c38b7afc8b77fc8b4e2cf6c1017503ff553883f9057d13a8017503ff553889c783ef0470f65089f8eb1b89c723f9f7c7010000007503ff553889c72bf98d7f0170f45089f88b7afc8b77fc52ff7304ff33508b5e088b460cba684c7a41e8f264ffff8b5c2408f6c3017503ff553889da83c20270f68b1c2489d08b54240483c800e83efeffffb80100000083c40cc390|@3719,63|14,0,0 72,0,0 84,0,3 92,0,-1 102,1,@336 109,0,@3186 114,1,@323 153,0,@224 161,0,@7320 175,0,0 205,0,@3339 210,1,@3405 242,1,@3148 259,0,@3465 264,0,I48 270,1,@2893 405,0,@3466 410,1,@3468 451,0,0 3719:S54|475f434f444528292e636f646567656e2831302967656e4576616c2836296a756d70546f50726f632832296d6f766541726773283229 3720:C2,604|3b650c7303ff55248b7c240483fb11744f8b75008d76f43b75087303ff5520897500c746fc02000000895e04c706ddffffff50ff7704ff7728ff774856bb1900000089f890e8ce47feff8b0424e8f259feff8b5c241883c800e89e64feffeb0b50ff7704ff7728ff7748508b7424108b1e83fbfd75398b542404c702030000008b44241890e8ee0100008b4c24088b3983ff01750489c6eb12578d54241883c800e89605000089c683c4048931eb7283fb0375448b542404c70203000000bb190000008b4424180bc0e84a47feffb8d41176410bc0e86a59feff8b5c241883c800e81664feff8b5c2418b8450000000bc0e80664feffeb5883fb0175588b542404c70203000000ff7604bb190000008b44241c0bc0e8fe46feffb81c517941eb05e91f01000083c800e81659feff8b5c241c83c800e8c263feffff74241cbb030000008b4424040bc0e8feeffeffeb71e9f00000008b560883fa0175698b4c2404c70103000000ff7604bb190000008b44241c0bc0e89e46feffb81c5179410bc0e8be58feff8b5c241c83c800e86a63feff8b45008d40f43b45087303ff5520894500c740fc020000008b3c24897804c70003000000ff74241cbb03000000eb0ae97c000000e9090000000bc0e87ae8feffeb6eff7604bb190000008b44241c90e83246feffb8d41176410bc0e85258feff8b5c241c83c800e8fe62feff8b5c241cb84b0000000bc0e8ee62feff8b4d008d49f43b4d087303ff5520894d00c741fc020000008b0424894104c70103000000ff74241cbb0100000089c8e80ae8feff83c4048b7c240cc70703000000b80100000083c414c204000bc0|@3726,63|46,0,-18 62,0,12 70,1,@3004 78,1,@3038 90,1,@3052 124,0,1 134,1,@3721 162,1,@3725 186,0,1 191,0,12 202,1,@3004 207,0,@1251 214,1,@3038 226,1,@3052 235,0,34 242,1,@3052 259,0,1 267,0,12 278,1,@3004 283,0,@3059 298,1,@3038 310,1,@3052 319,0,1 330,1,@3237 355,0,1 363,0,12 374,1,@3004 379,0,@3059 386,1,@3038 398,1,@3052 434,0,1 443,0,1 462,1,@3216 472,0,12 482,1,@3004 487,0,@1251 494,1,@3038 506,1,@3052 515,0,37 522,1,@3052 558,0,1 567,0,0 574,1,@3216 587,0,1 592,0,0 3721:C2,592|3b650c7303ff55248b78308b3783fe017507bb01000000eb1550ff30ff7004ff704083c800e87e6afeff89c3eb0950ff30ff7004ff70408b14248b0a5189c80bc0e826020000508b4424040bc0e8b2020000508b7c240483ff017507be01000000eb448b1f8b138b0a83f90175128b7f043b650c7303ff5524ebdcbe01000000ff77048b5c241c8b420483c800e85254feff8b3c2483c4043b650c7303ff5524ebb5be010000008b142483fa01750d8b4c24108b0189c383f302eb05bb0300000083fb0174718b4c240c8911bb0b0000008b442418e8c644feff8b4424148b38f7c7010000007503ff553881ffdd0000007f71b8104d794190e8ce56feff8b5c241883c800e87a61feff8b5c2418b8010000000bc0e86a61feff8b5c24148b13f6c2017503ff553889d183c1fe70f68b45008d40f4eb05e9f80000003b45087303ff5520894500c740fc02000000894804c700ffffffff8b75008d76f83b7508730aeb05e911000000ff5520897500c746fc010000408906eb71b81c5179410bc0e84656feff8b5c241883c800e8f260feff8b5c2418b8010000000bc0e8ee64feff8b7424148b1ef6c3017503ff553889da83c2f870f68b4d008d49f43b4d087303ff5520894d00c741fc02000000895104c701010000008b75008d76f83b75087303ff5520897500eb05e909000000c746fc01000040890e8b44240cc700010000008b7c2410c707030000008b5d008d5bf43b5d087303ff5520895d00c743fc020000008b542404895304893389d883c41cc38b4c240cc701010000008b442410c700030000008b44240483c41cc3|@3724,63|19,0,0 38,1,@3069 66,1,@3722 78,1,@3723 93,0,0 124,0,0 142,1,@3031 163,0,0 189,0,1 205,0,5 214,1,@3004 244,0,@3051 250,1,@3038 262,1,@3052 271,0,0 278,1,@3052 339,0,-1 379,0,@3059 386,1,@3038 398,1,@3052 407,0,0 414,1,@3060 468,0,0 511,0,0 521,0,1 570,0,0 580,0,1 3722:C2,124|3b650c7303ff552483f8017506b801000000c38b388b378b1e83fb017502eb248b5604f6c2017503ff553889d183c1fe70f6f6c1017503ff553881f9dd0000007e02eb30578b400490e8b2ffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0c24890a89d083c404c38b4004e984ffffff|@155,63|14,0,0 3723:C2,124|3b650c7303ff552483f8017506b801000000c38b388b378b1e83fb017502eb548b5604f6c2017503ff553889d183c1fe70f6f6c1017503ff553881f9dd0000007f02eb30578b400490e8b2ffffff8b7d008d7ff43b7d087303ff5520897d00c747fc020000008947048b3424893789f883c404c38b4004e984ffffff|@155,63|14,0,0 3724:S31|49333836434f4445434f4e5328292e67656e53656c664272616e6368283129 3725:C2,68|3b650c7303ff552483f80175048b42e8c352ff308b40040bc0e8e2ffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0424890289d083c408c3|@1462,5| 3726:S32|49333836434f4445434f4e5328292e6a756d70546f46756e6374696f6e283329 3727:C2,392|3b650c7303ff552450508b7c2410505389c38b470ce88a3afaff83f801754bbbffffffff8b44240490e8b227faff89c3b81cac7941e89e23faff8b75008d76f03b75087303ff5520897500c746fc03000000894608bb54cf7441895e04bafcc1b441891689f090ff552c8d7424088b5c2404891e8d5424088942048b4c240c8b018b3883fffd753c8b75008d76f03b75087303ff5520897500c746fc030000008b14248956088b5004895604c706ffffffffff7424148b5c242089f090e87af8ffffeb7183ff0175478b342483fe017409b884f07a4190ff552c8b55008d52f43b55087303ff5520895500c742fc020000008b7004897204c70201000000ff7424148b5c242089d090e82ef8ffffeb5283ff0575438b342483fe01742fbb050000008b4004e80228feff83f801741dff742414eb05e9280000008b5c2420b808cd74410bc0e8f2f7ffffeb16b8c0f07a410bc0ff552ceb0ab808f17a410bc0ff552c8b5c2418c744241cffffffff89da8b5c240489d0ba401979418b4c241083c41c51e9f028feff|@3734,63|22,1,@435 32,0,-1 42,1,@336 49,0,@3201 54,1,@323 86,0,@224 94,0,@7320 174,0,-1 190,1,@3720 210,0,@3728 250,0,0 266,1,@3720 286,0,2 294,1,@2958 319,0,@207 326,1,@3720 333,0,@3730 345,0,@3732 362,0,-1 375,0,@2963 388,1,@2965 3728:O3|@7320,@224,@3729 3729:S36|6a756d70546f436f64653a20696e6469726563742063616c6c20746f20636f6465526566 3730:O3|@7320,@224,@3731 3731:S47|6a756d70546f436f64653a204e6f7420696e646972656374696f6e207468726f75676820636c6f7375726520726567 3732:O3|@7320,@224,@3733 3733:S38|6a756d70546f436f64653a204e6f74206120636f6e7374616e74206f72207265676973746572 3734:S25|5452414e535f54414228292e6a756d70546f436f6465283529 3735:C2,68|3b650c7303ff552483f80175048b42dcc352ff308b40040bc0e8e2ffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0424890289d083c408c3|@1462,5| 3736:C2,488|3b650c7303ff5524a8017503ff553883f8057d0489c7eb05bf05000000f7c7010000007503ff553889fe83ee0270f650535756ba010000008b04245223d0f6c2015a7503ff55383bd07e02eb7083fa017507bf01000000eb5a83fa037507bf07000000eb4e52bbffffffff89d0e88224faff89c3b860a67941e86e20faff8b75008d76f03b75087303ff5520897500c746fc03000000894608bb54cf7441895e04bafcc1b441891689f090ff552cbf010000008b74241452ff7628eb05e94d0000008b5e1089f80bc0e8ca29feff8b1c2483fb017414ff74241cbb7c5c7a41b84097040890e8b20afeff8b542404f6c2017503ff553889d183c10270f689ca83c4083b650c7303ff5524e929ffffff8b7c241883ff01740a8b44241490e802edfeff8b74240c8b5c24045323def6c3015b7503ff55383bf37e5089f223d3f6c2017503ff553889f22bd38d520170f48b4c24148b41308b3889fe23f2f7c6010000007503ff553889fe2bf28d760170f489308b592883fb01741051bbd0f37a41b840970408e8120afeff8b54240883fa01750bb80100000083c410c208008b4c24148b5910b80100000083c800e896a8feffff742414bb48cc7441b898a4794190e87e06feff89c78b45008d40f83b45087303ff5520894500c740fc01000000893883c410c20800|@3738,63|25,0,2 52,0,0 83,0,0 95,0,3 103,0,-1 110,1,@336 117,0,@3186 122,1,@323 154,0,@224 162,0,@7320 175,0,0 202,1,@2969 219,0,@3481 224,0,I48 230,1,@2893 286,1,@3259 380,0,@3737 385,0,I48 390,1,@2893 404,0,0 422,0,0 430,1,@3148 439,0,@193 444,0,@3183 450,1,@2888 3737:S5|6465637370 3738:S44|475f434f444528292e636f646567656e2831302967656e4576616c2836297365747570526573756c74283429 3739:S43|475f434f444528292e636f646567656e2831302967656e4576616c2836296a756d70546f50726f63283229 3740:C2,76|3b650c7303ff55245050505089e38b520483c800ff128b45008d40ec3b45087303ff5520894500c740fc040000008b3c2489388b7424048970048b5c24088958088b54240c89500c83c410c3|@3711,63| 3741:C2,488|3b650c7303ff5524525383c800e8f20100008b7c24048b77fc83f80175058b1c24eb13508b4424048d54240c90e84604000089c3eb015053ff7424188b5e0c8b4608ba88f97a410bc0e896040000508b4424048b54240c0bc0e816090000ff30ff7004b8010000008b54241cff128b542404f6c2017503ff553883fa017c258b4c24148b79fcff30ff7004ff7008ff700c528b5f088b470cbac8657a41e81672ffffeb0bff30ff7004ff7008ff700c8b4c240c83f90175188b4424248b78fc8b5f0cb8f82575410bc0e8ee0b0000eb1a8b4424248b78fcff7708ff770c8b5c24108b010bc0e8561000008b1c2483fb0175068b742418eb108b4424188d54242890e8b212000089c683fe017502eb488b5424248b4afc8b4108ff760450ff70288b58108b06e88a26feff8b3c2483ff017414ff742404bb7c5c7a41b84097040890e87207feff8b74240883c40c3b650c7303ff5524ebb18b4c241083f90175068b542404eb128b4424048d54242883c800e8a212000089c283fa017502eb2b8b4424248b78fcff72046aff8b1a8b4708ba40197941e80e23feff8b142483c4043b650c7303ff5524ebce8b4424248b78fcff77088b5c2434b868ad7941e8c62afeff8b7424248b5efcc7442430010000008b53088954242c8b5ef08b46ec83c428e936fbffff0bc0|@3780,63|14,1,@3742 46,1,@3748 67,0,@3749 74,1,@3750 90,1,@3758 100,0,0 153,0,@3499 158,1,@3505 195,0,@408 202,1,@3762 230,1,@3770 258,1,@3778 294,1,@2969 311,0,@3481 316,0,I48 322,1,@2893 370,1,@3779 401,0,@2963 406,1,@2965 441,0,@3206 446,1,@2985 461,0,0 482,1,@3736 3742:C2,32|3b650c7303ff55245289c3b8010000008d54240490e82200000083c404c30bc0|@3747,63|12,0,0 22,1,@3743 3743:C2,384|3b650c7303ff552483fb017506b801000000c3a8017503ff553883f8057d7083f8017507be01000000eb6083f8037507be07000000eb545250ff33ff7304bbffffffff0bc0e8861ffaff89c3b860a67941e8721bfaff8b5d008d5bf03b5d087303ff5520895d00c743fc03000000894308ba54cf7441895304b9fcc1b441890b89d890ff552cbe010000008b0beb05e9650000008b3983fffb7507bfffffffffeb1a8b7d008d7ff83b7d087303ff5520897d00c747fc0100000089378b72fc8b4efc5250ff7304576affff76046a018b3bbb0300000089f88b511090ff12f7c00100000075048b38eb4db88cf87a41ff552cbf01000000eb3e8b7afc8b77fc5250ff73046aff6affff77046a018b0bbb0300000089c88b561083c800ff12f7c00100000075048b38eb0db820387a41ff552cbf010000008b442404a8017503ff553889c683c60270f6578b5c240489f08b54240c90e8a6feffff8b5d008d5bf43b5d087303ff5520895d00c743fc020000008943048b1424891389d883c410c3|@3746,63|14,0,0 37,0,0 49,0,3 63,0,-1 70,1,@336 77,0,@3186 82,1,@323 114,0,@224 122,0,@7320 135,0,0 156,0,-1 210,0,1 235,0,@3744 243,0,0 272,0,1 299,0,@3409 307,0,0 3744:O3|@7320,@224,@3745 3745:S17|6c64417267733a204e6f20726573756c74 3746:S50|475f434f444528292e636f646567656e2831302967656e4576616c2836296576616c417267732831296c6441726773283229 3747:S41|475f434f444528292e636f646567656e2831302967656e4576616c2836296576616c41726773283129 3748:C2,68|3b650c7303ff552483f80175048b42f4c352ff308b40040bc0e8e2ffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0424890289d083c408c3|@1462,5| 3749:O2|@3750,@2978 3750:C2,124|3b650c7303ff5524508b7d008d7fec3b7d087303ff5520897d00c747fc04000000be2cfa7a41893789470c8b74240c8977088b480c894f048b44240883f8017507b903000000eb05b90100000089ce83f6025053ff74240889fb89f08b520490ff12bb01000000b8010000008d54240490e8aa01000083c404c20800|@3757,63|34,0,@3751 66,0,1 73,0,0 99,0,0 104,0,0 114,1,@3755 3751:C2,268|3b650c7303ff55248b7a0c525089c38b470c83c800e83e2ffaff83f8017510b854fb7a4183c800ff552cb8010000008b7004f7c6010000007503ff553883fe037e02eb518b5c2404ff3056ff7008ff700c8b530883fa017507b901000000eb2e8b028b7c2410500bc7a801587503ff55383bc77507b903000000eb128b52043b650c7303ff5524ebcbb90100000083f901740beb12ff3056ff7008ff700cb80300000083c418c38b3424f7c6010000007503ff553883fe017f02eb468b5c24148b55008d52ec3b55087303ff5520895500c742fc04000000c7420cffffffff8b4c2404894a088b4424088942048b7c240c893a528b73048b5c241489f0e8f6fffdffb80100000083c418c390|@3754,63|22,1,@435 32,0,@3752 43,0,0 90,0,0 118,0,1 138,0,0 159,0,1 219,0,-1 254,1,@2889 259,0,0 3752:O3|@7320,@224,@3753 3753:S26|707573684e6f6e417267756d656e74733a206e6f20656e747279 3754:S34|5452414e535f54414228292e707573684e6f6e417267756d656e7473283429283129 3755:C2,496|3b650c7303ff55248b7afc8b771c8b0e5323d9f6c3015b7503ff55383bd97d6c5250538b4a0883f9017507b801000000eb318b398b3424560bf7f7c6010000005e7503ff55383bfe7507b803000000eb128b49043b650c7303ff5524ebc8b80100000083f80174298b1c24f6c3017503ff553889da83c20270f689d38b4424048b54240883c40ce974ffffffe95d0100008b5c24088b53fc8b1c248b420c83c800e82a2dfafff7c00100000075718b388b3783fe03756d8b580483fb0175068b4c2404eb648b5424088b4afcff770451ff71288b59108b44240883c800e87e9ffeff8b042483f8017414ff742404bb544c7a41b84097040890e8b600feff8b7d008d7ff43b7d087303ff5520897d00c747fc020000008b742410897704eb0fe9a5000000e912000000e99f0000008b5c2408891f89f983c40ceb7083fe0575708b580483fb0175068b4c2404eb678b5424088b4afcff770451ff71288b59108b4424080bc0e8f69efeff8b042483f8017414ff742404bb544c7a41b84097040890e82e00feff8b7d008d7ff43b7d087303ff5520897d00c747fc020000008b7424108977048b5c2408eb0fe91d000000e90e000000e913000000891f89f983c40ceb0a8b4c2404eb048b4c24048b0424a8017503ff553889c783c70270f689fb89c88b54240883c40ce912feffffc390|@3756,63|44,0,0 75,0,1 95,0,0 162,1,@435 222,1,@3148 239,0,@3465 244,0,I48 250,1,@2893 358,1,@3148 375,0,@3465 380,0,I48 386,1,@2893 3756:S49|5452414e535f54414228292e707573684e6f6e417267756d656e747328342967657452656769737465724c697374283229 3757:S31|5452414e535f54414228292e707573684e6f6e417267756d656e7473283429 3758:C2,80|3b650c7303ff5524525050508d7c240457bbffffffffb8010000008d5424140bc0e8460000008b45008d40f43b45087303ff5520894500c740fc020000008b342489308b5c240489580483c40cc30bc0|@3761,63|18,0,-1 23,0,0 34,1,@3759 3759:C2,592|3b650c7303ff55248b7c240883ff0175158b542404891ac7420401000000b801000000c20800a8017503ff553883f8057d7383f8017507be01000000eb6183f8037507be07000000eb55525053ff37ff7704bbffffffff0bc0e8d217faff89c3b860a67941e8be13faff8b5d008d5bf03b5d087303ff5520895d00c743fc03000000894308ba54cf7441895304b9fcc1b441890b89d890ff552cbe01000000a801750aeb05e9c1000000ff553889c183c10270ef505052ff3756ff77048d4424105089c890e836ffffff8b7c24088b77fc8b5efcff3424ff7424086a018b530c8b4b0889cb89d0ba8c167a4190e8f233ffff8b7c24088b77fc8b5efc8b53085052ff72288b5a108b44240c0bc0e8729cfeff8b0c2483f9017414ff742404bb544c7a41b84097040890e8aafdfdff8b45008d40f43b45087303ff5520894500c740fc020000008b7c241c8978048b74240889308b5c24248b5424188913894304b80100000083c420c20800f6c3017503ff553883fb017d1c8b5afc8b4bfc89d650ff37ff77048b4108e88ea7feff89f289c6eb0889de50ff37ff77048b5afc8b4bfcf7c6010000007503ff553889f083c00270f65256ff74240c508b59088b410cba40647a4183c800e87665ffff8b3c24f7c7010000007503ff553889fe83c60270f68b5c2410f6c3017503ff553889da83c20270f6505050ff7424148d4c24085189f389d08b54241883c800e8eefdffff8b45008d40f43b45087303ff5520894500c740fc020000008b7c24088978048b342489308b5c24248b5424048913894304b80100000083c420c208000bc0|@3760,63|26,0,0 31,0,0 56,0,0 68,0,3 83,0,-1 90,1,@336 97,0,@3186 102,1,@323 134,0,@224 142,0,@7320 155,0,0 232,0,@3339 238,1,@3405 270,1,@3148 287,0,@3465 292,0,I48 298,1,@2893 353,0,0 394,1,@3189 450,0,@3496 458,1,@3500 580,0,0 3760:S50|475f434f444528292e636f646567656e2831302967656e4576616c28362970757368417267732831296c6441726773283429 3761:S41|475f434f444528292e636f646567656e2831302967656e4576616c2836297075736841726773283129 3762:C2,696|3b650c7303ff55248b7b48c707030000008b3083fefd7534ff33ff732489d80bc0e8ae0200008b1c248b138b4d008d49f43b4d087303ff5520894d00c741fc020000008951048901890beb5c83fe03755cff3353bb1f0000008b042490e8662efeff8b1c24b80100000083c800e8ce56ffffbb190000008b042483c800e8462efeffb8d41176410bc0e86640feff8b1c24e8164bfeff8b1c24b82500000083c800e8064bfeffeb6ce9a001000083fe017567ff3353ff7004bb1f0000008b442404e8022efeff8b5c2404b8030000000bc0e86a56ffffbb190000008b4424040bc0e8e22dfeffb8c8cc74410bc0e80240feff8b5c240483c800e8ae4afeffff742404bb030000008b4424040bc0e8ead6feffeb74e9340100008b500883fa01756cff3353ff7004bb1f0000008b44240490e8922dfeff8b5c2404b8030000000bc0e8fa55ffffbb190000008b4424040bc0e8722dfeffb8c8cc74410bc0e8923ffeff8b5c240483c800e83e4afeff8b4d008d49f43b4d087303ff5520894d00c741fc02000000eb0ae9bd000000e91e0000008b0424894104c70103000000ff742404bb0300000089c8e84ecffeffeb71ff3353ff7004bb1f0000008b4424040bc0e8022dfeff8b5c2404b8010000000bc0e86a55ffffbb190000008b4424040bc0e8e22cfeffb8d41176410bc0e8023ffeff8b5c240483c800e8ae49feff8b5c2404b82b0000000bc0e89e49feff8b4d008d49f43b4d087303ff5520894d00eb05e924000000c741fc020000008b0424894104c70103000000ff742404bb0100000089c890e8b2cefeff83c4048b7c24048b37bb0900000089f00bc0ff15009f040883f8017502eb1fa8017503ff553883f8017c07bb03000000eb05bb0100000083fb037402eb0489c3eb0ea8017503ff553889c383c30870f683fb057410b890057b4183c800ff552cb801000000b80100000083c408c3|@3769,63|13,0,1 34,1,@3763 85,0,15 94,1,@3004 102,0,0 110,1,@3474 115,0,12 126,1,@3004 131,0,@1251 138,1,@3038 146,1,@3052 154,0,18 162,1,@3052 185,0,15 194,1,@3004 203,0,1 210,1,@3474 215,0,12 226,1,@3004 231,0,@202 238,1,@3038 250,1,@3052 259,0,1 270,1,@3237 296,0,15 306,1,@3004 315,0,1 322,1,@3474 327,0,12 338,1,@3004 343,0,@202 350,1,@3038 362,1,@3052 410,0,1 419,0,1 426,1,@3216 439,0,15 450,1,@3004 459,0,0 466,1,@3474 471,0,12 482,1,@3004 487,0,@1251 494,1,@3038 506,1,@3052 515,0,21 522,1,@3052 565,0,1 574,0,0 582,1,@3216 596,0,4 606,0,I110 630,0,1 637,0,0 672,0,@3767 683,0,0 688,0,0 3763:C2,212|3b650c7303ff552450ff30bb1f00000090e8de2bfeff8b5c2404b8030000000bc0e84654ffffbb190000008b4424040bc0e8be2bfeffb8c8cc74410bc0e8de3dfeff8b5c240483c800e88a48feff8b5c2404b8010000000bc0e8864cfeff8b3c248b37bb0900000089f00bc0ff15009f040883f8017502eb1fa8017503ff553883f8017c07bb03000000eb05bb0100000083fb037402eb0489c3eb0ea8017503ff553889c383c30870f683fb05740bb830057b4183c800ff552c8b1c248b13f6c2017503ff553889d183c1f870f689c883c408c3|@3766,63|12,0,15 18,1,@3004 27,0,1 34,1,@3474 39,0,12 50,1,@3004 55,0,@202 62,1,@3038 74,1,@3052 83,0,0 90,1,@3060 100,0,4 110,0,I110 134,0,1 141,0,0 176,0,@3764 3764:O3|@7320,@224,@3765 3765:S29|67656e53656c6643616c6c3a2063616c6c206e6f7420616c69676e6564 3766:S29|49333836434f4445434f4e5328292e67656e53656c6643616c6c283129 3767:O3|@7320,@224,@3768 3768:S30|63616c6c46756e6374696f6e3a2063616c6c206e6f7420616c69676e6564 3769:S30|49333836434f4445434f4e5328292e63616c6c46756e6374696f6e283229 3770:C2,380|3b650c7303ff552450508b7c2410505389c38b470ce87a23faff83f801754bbbffffffff8b44240490e8a210faff89c3b81cac7941e88e0cfaff8b75008d76f03b75087303ff5520897500c746fc03000000894608bb54cf7441895e04bafcc1b441891689f090ff552c8d7424088b5c2404891e8d5424088942048b4c240c8b018b3883fffd75388b75008d76f03b75087303ff5520897500c746fc030000008b14248956088b5004895604c706ffffffff8b5c241489f090e8befaffffeb7283ff0175438b342483fe017409b888077b4190ff552c8b55008d52f43b55087303ff5520895500c742fc020000008b7004897204c702010000008b5c241489d090e876faffffeb4e83ff05753f8b342483fe01742bbb050000008b4004e8fa10feff83f80174198b5c2414b808cd7441eb05e91f0000000bc0e83efaffffeb16b8c4077b410bc0ff552ceb0ab80c087b410bc0ff552c8b5c2418c7442418ffffffff89da8b5c240489d0ba401979418b4c241083c41851e9ec11feff|@3777,63|22,1,@435 32,0,-1 42,1,@336 49,0,@3201 54,1,@323 86,0,@224 94,0,@7320 174,0,-1 186,1,@3762 206,0,@3771 246,0,0 258,1,@3762 278,0,2 286,1,@2958 300,0,@207 314,1,@3762 321,0,@3773 333,0,@3775 350,0,-1 363,0,@2963 376,1,@2965 3771:O3|@7320,@224,@3772 3772:S34|63616c6c436f64653a20696e6469726563742063616c6c20746f20636f6465526566 3773:O3|@7320,@224,@3774 3774:S45|63616c6c436f64653a204e6f7420696e646972656374696f6e207468726f75676820636c6f7375726520726567 3775:O3|@7320,@224,@3776 3776:S36|63616c6c436f64653a204e6f74206120636f6e7374616e74206f72207265676973746572 3777:S23|5452414e535f54414228292e63616c6c436f6465283429 3778:C2,68|3b650c7303ff552483f80175048b42d8c352ff308b40040bc0e8e2ffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0424890289d083c408c3|@1462,5| 3779:C2,68|3b650c7303ff552483f80175048b42e8c352ff308b40040bc0e8e2ffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0424890289d083c408c3|@1462,5| 3780:S41|475f434f444528292e636f646567656e2831302967656e4576616c28362963616c6c50726f63283429 3781:S44|475f434f444528292e636f646567656e2831302967656e4576616c28362963616c6c436c6f73757265283129 3782:O3|@7320,@224,@3783 3783:S46|67656e553a20636f6d70696c696e6720756e617279206f70657261746f722028617267636f756e74203c3e203129 3784:S37|475f434f444528292e636f646567656e2831302967656e4576616c28362967656e55283329 3785:C2,456|3b650c7303ff55248b7af4f7c70100000075668b7704f7c60100000075608b4e0483f901755d5250ff3789d890e8bac2ffff83f8017402eb4f8b04248b3883fffb751653ff368b58048b44240ce8ba46ffff83f8017405eb3253ff368b34248b1e83fbfb75708b5e048b442404e89a46ffff83f8017464eb12e939010000e924010000e90f01000053ff368b4424108b78fc6aff6affff70046a01bb030000008b4424188b571090ff12f7c00100000075048b30eb0db820387a41ff552cbe010000008b5c24108b53fc566aff6affff73046a01eb0ae993000000e98e000000bb030000008b4424148b5210ff12f7c00100000075048b08eb0db820387a41ff552cb9010000008b4424148b780cf7c701000000750c8b0790e83ec2ffff89c6eb05be010000008b5c24148b53fcff742408ff742414ff7208ff720c5689cb8b442414bab0cd7a4190e86ec2ffff89c18b45008d40f83b45087303ff5520894500c740fc01000000890883c418c38b5424108b45008d40f83b45087303ff5520894500c740fc010000008b4af8890883c414e961ccffffb8ec0b7b4183c800ff552cb801000000b8ec0b7b4183c800ff552cb801000000b8ec0b7b4183c800ff552cb80100000090|@3788,63|46,1,@3691 78,1,@3469 110,1,@3469 156,0,1 183,0,@3409 191,0,0 225,0,1 251,0,@3409 259,0,0 282,1,@3693 291,0,0 324,0,@3695 330,1,@3696 403,1,@3705 408,0,@3786 419,0,0 424,0,@3786 435,0,0 440,0,@3786 451,0,0 3786:O3|@7320,@224,@3787 3787:S47|67656e423a20636f6d70696c696e672062696e617279206f70657261746f722028617267636f756e74203c3e203229 3788:S37|475f434f444528292e636f646567656e2831302967656e4576616c28362967656e42283229 3789:C2,992|3b650c7303ff55248b42f4f7c00100000075708b388b3783fefb756c8b5804f7c30100000075668b0b8b3183fefb75628b4304f7c001000000755c8b700483fe0175598b5f04f7c30100000074768b5904f7c3010000007470f7c30100000074068b3089d8eb108b30b89420754190ff552cb801000000505089e3c70301000000eb1ee936030000e90f030000e9e8020000e9c1020000e99a020000e97302000089e18941048b44240489c381e3ff01000089d981c98100000081f9810000007571eb0ae929020000e9240200008b4704f7c001000000740489c3eb0eb89420754190ff552cbb01000000f6c3017503ff553883fb017d1fb82ccb744189c723fbf7c7010000007503ff55388d78ff03fb70f689f8eb0289d8a8017503ff553883f8017e71a8017503ff553883f80b7d6aeb05e9950100008b7afc5251506aff6affff72046a01bb0300000089f08b571083c800ff12f7c00100000075048b30eb0db820387a41ff552cbe010000008b5c24088b53fc8b0c24f6c1017503ff553889c883e80270f6565089f38b4208ba40197941eb0ae90d010000e90801000090e84e0bfeff8b7c240c8b77fcff770c8b5c240c8b4424088b561490ff1250508b5c241081fb81000000751389e2c702ffffffff89e1c7410409000000eb1189e2c7020100000089e1c74104030000008b7c240cf7c7010000007503ff553889fe83ee0270f6bb0900000089f223d3f6c2017503ff55385089f2d1fa8d43fff7ea8d50015870ed50f6c2017503ff553883fa017d02eb508b4c24188b41fc5252ff74240cff700cff70088b5c24208b442414ba78927a410bc0e8c283ffff8b3c248b74240c89fa23d6f6c2017503ff553889fa2bd68d520170f483c4043b650c7303ff5524eba18b45008d40f83b45087303ff5520894500c740fc010000008b0c24890883c424c38b45008d40f83b45087303ff5520894500c740fc010000008b4af8890883c408e9cfc8ffff8b45008d40f83b45087303ff5520894500c740fc010000008b7af8893883c408e9aac8ffff8b45008d40f83b45087303ff5520894500c740fc010000008b4af88908e988c8ffff8b45008d40f83b45087303ff5520894500c740fc010000008b5af88918e966c8ffff8b45008d40f83b45087303ff5520894500c740fc010000008b7af88938e944c8ffff8b45008d40f83b45087303ff5520894500c740fc010000008b7af88938e922c8ffff8b45008d40f83b45087303ff5520894500c740fc010000008b4af88908e900c8ffff8b45008d40f83b45087303ff5520894500c740fc010000008b5af88918e9dec7ffff8b45008d40f83b45087303ff5520894500c740fc010000008b7af88938e9bcc7ffff|@3790,63|106,0,@369 115,0,0 125,0,0 222,0,@369 231,0,0 249,0,@176 328,0,1 355,0,@3409 363,0,0 400,0,@2963 418,1,@2965 464,0,-1 473,0,4 483,0,0 492,0,1 519,0,4 595,0,@3578 602,1,@3579 713,1,@3705 750,1,@3705 784,1,@3705 818,1,@3705 852,1,@3705 886,1,@3705 920,1,@3705 954,1,@3705 988,1,@3705 3790:S46|475f434f444528292e636f646567656e2831302967656e4576616c28362967656e416c6c6f6353746f7265283129 3791:C2,516|3b650c7303ff55248b7af4f7c70100000075718b7704f7c601000000756b8b5e04f7c30100000075658b4b0483f901756252500bc0e8e601000083f8017402eb168b068b1083fafb75728b4804f7c1010000007502eb6a8b4424048b50fcff33ff366aff6affff70046a01bb030000008b078b521083c800ff12f7c001000000751aeb14e96a010000e955010000e940010000e92e0100008b08eb0fb820387a410bc0ff552cb9010000008b44240c8b78fc516aff6affff7004eb0ae9da000000e9d50000006a01bb030000008b4424148b5710ff12f7c00100000075048b30eb0db820387a41ff552cbe010000008b5c24108b53fc566aff6affff73046a01bb030000008b44241c8b5210ff12f7c00100000075048b08eb0db820387a41ff552cb9010000008b4424148b78fc51ff742414ff7708ff770c8b5c24108b442414ba04137b4183c800e82a0100008b7424148b5ef083fb0174388b56fcff7208bb94027a41b8a0027a4183c800e806e8fdff89c18b45008d40f83b45087303ff5520894500c740fc01000000890883c418c3b80100000083c418c38b7c24048b45008d40f83b45087303ff5520894500c740fc010000008b77f8893089fa83c408e9a2c5ffffb8ac197b41ff552cb801000000b8ac197b4183c800ff552cb801000000b8ac197b4183c800ff552cb801000000b8ac197b4183c800ff552cb80100000090|@3803,63|54,1,@3792 108,0,1 157,0,@3409 167,0,0 201,0,1 227,0,@3409 235,0,0 257,0,1 283,0,@3409 291,0,0 322,0,@3794 330,1,@3795 353,0,@3293 358,0,@3294 366,1,@2888 403,0,0 450,1,@3705 455,0,@3801 463,0,0 468,0,@3801 479,0,0 484,0,@3801 495,0,0 500,0,@3801 511,0,0 3792:C2,8|b803000000c30bc0|@3793,1|1,0,1 3793:S32|49333836434f4445434f4e5328292e6973496e646578656453746f7265283129 3794:O2|@3795,@3198 3795:C2,1196|8d7c24b03b7d0c7303ff552850508b7c24105250538b470c90e85616faff83f801754bbbffffffff8b04240bc0e87e03faff89c3b81cac7941e86afff9ff8b75008d76f03b75087303ff5520897500c746fc03000000894608bb54cf7441895e04bafcc1b441891689f090ff552c8d74240c8b1c24891e8d54240c8942048b4c241050508b442424ff318b5c24308b400ce8de15faff83f801754bbbffffffff8b44243090e80603faff89c3b81cac7941e8f2fef9ff8b7d008d7ff03b7d087303ff5520897d00c747fc03000000894708be54cf7441897704bbfcc1b441891f89f890ff552c8d7c24048b74243089378d5c24048943048b54240850508b4c241cff32ff74241c6a018d44240c508b5c24408b44243c8b510483c800ff128b7c2434ff77288b5f108b44240890e8d287feff8b342483fe017418ff742438bb544c7a41b84097040890e80ae9fdff89c3eb05bb010000008b44243c0bc0e86603000083f8017407bb09000000eb05bb030000008b5424108b0a83f9fd75708b4424048b3883fffd756a8b7204f7c60100000074078b780489f0eb108b7804b894207541ff552cb801000000a8017503ff553883f8017d1db92ccb744189ce23f0f7c6010000007503ff55388d71ff03f070f689f089c623f3f7c6010000007503ff5538505289c2d1fa8d43ffeb0ae994010000e9b4000000f7ea8d70015a5870df6a018b5c244089f8e85a3fffff83f801742dff742408ff7424406a11ff74244089f389f8e88e3fffff6aff8b5c24448b44243cba40197941e80a04feffeb5550508b5c242c56ff74244c6a018d54240c528b4b048b5c24508b44244c89ca90ff12ff742414ff74244c6a11ff74244c8b5c24108b44241490e8b664feff6aff8b5c240c8b442448ba40197941e8b603feff83c40c6aff8b5c24208b44243cba4019794190e89e03feffeb708b7204f7c601000000740489f0eb10b89420754183c800ff552cb801000000a8017503ff553883f8017d1cbf2ccb744189f923c8f6c1017503ff55388d4fff03c870f689cfeb0289c789f923cbf6c1017503ff5538505289fad1fa8d43fff7ea8d48015a5870eb50508b44242c51eb05e933010000ff74244c6a018d7c240c578b5c24508b78048b44244c89fa83c800ff12ff742414ff74244c6a11ff74244c8b5c24108b44241490e8da63feff6aff8b5c240c8b442448ba40197941e8da02feff6aff8b5c242c8b442448ba40197941e8c602feff83c40ceb738b4424048b3883fffd756d8b70046a03bbffffffff89f083c800e8c23dffff83f801745950508b5c242c56ff7424286a018d54240c528b4b048b5c24508b44244c89ca0bc0ff12ff742414ff74244cff74240cff74244cbb010000008b4424100bc0e8ca3dffff6aff8b5c24508b442448eb0fe955000000e93b000000e923000000ba4019794183c800e83202feff6aff8b5c240c8b442448ba40197941e81e02feffeb25b8010000008d542430e8d2000000505050eb12b8010000008d54243090e8be00000050505083c40c8b742438ff76288b5e108b44240c83c800e8ea04feff8b1c2483fb017414ff74243cbb7c5c7a41b84097040890e8d2e5fdff8b54243cc7442444ffffffff8b5c241089d0ba401979418b4c243483c44451e99e01feff0bc0|@3800,63|26,1,@435 36,0,-1 46,1,@336 53,0,@3201 58,1,@323 90,0,@224 98,0,@7320 146,1,@435 156,0,-1 166,1,@336 173,0,@3201 178,1,@323 210,0,@224 218,0,@7320 302,1,@3148 319,0,@3465 324,0,I48 330,1,@2893 339,0,0 350,1,@3796 360,0,4 367,0,1 415,0,@369 423,0,0 440,0,@176 522,1,@3471 550,1,@3473 565,0,@2963 570,1,@2965 634,1,@3103 649,0,@2963 654,1,@2965 672,0,@2963 678,1,@2965 700,0,@369 711,0,0 728,0,@176 854,1,@3103 869,0,@2963 874,1,@2965 889,0,@2963 894,1,@2965 920,0,-1 930,1,@3471 991,0,0 1002,1,@3473 1034,0,@2963 1042,1,@2965 1057,0,@2963 1062,1,@2965 1069,0,0 1078,1,@3798 1088,0,0 1098,1,@3798 1126,1,@2969 1143,0,@3481 1148,0,I48 1154,1,@2893 1166,0,-1 1177,0,@2963 1190,1,@2965 3796:C2,20|83f8ff7506b803000000c3b801000000c383c800|@3797,1|6,0,1 12,0,0 3797:S10|53544f52455f574f5244 3798:C2,280|3b650c7303ff552450508b7af452ff72ec6a018d74240c568b5a088b42048b570483c800ff128b1c248b530852ff72288b5a108b44240c0bc0e8ba83feff8b0c2483f9017416ff742404bb544c7a41b84097040890e8f2e4fdffeb05b8010000008b44240850508b78f4ff70106a018d742408568b58088b40048b570483c800ff128b5c2410ff73d8ff730cff74241cff7304bb010000008b44241090e88661feff8b5424106aff8b5c24088b4208ba4019794190e88200feff8b4c24108b410850ff70288b58108b44241c90e87603feff8b3c2483ff017414ff742404bb7c5c7a41b84097040890e85ee4fdff8b7424188b5c2424c7442424ffffffff89da8b5c24208b460889d1ba4019794183c42451e92500feff90|@3799,63|58,1,@3148 75,0,@3465 80,0,I48 86,1,@2893 93,0,0 148,0,0 158,1,@3103 176,0,@2963 182,1,@2965 206,1,@2969 223,0,@3481 228,0,I48 234,1,@2893 250,0,-1 266,0,@2963 275,1,@2965 3799:S49|5452414e535f54414228292e61737369676e4f7028362973746f7265496e64657865645669615265676973746572283129 3800:S23|5452414e535f54414228292e61737369676e4f70283629 3801:O3|@7320,@224,@3802 3802:S25|67656e41737369676e3a20617267636f756e74203c3e203329 3803:S42|475f434f444528292e636f646567656e2831302967656e4576616c28362967656e41737369676e283129 3804:C2,764|3b650c7303ff55248b421c83f801747552536a05ff720c6a018b5a048b4208ba8c167a4190e83619ffff8b7c24048b77045056ff76288b5e10b80500000083c800e8ba81feff8b1c2483fb017418ff742404bb544c7a41b84097040890e8f2e2fdff89c2eb05ba010000008b55008d52f43b55087303ff5520895500c742fc02000000eb05e932000000c74204010000008b4c2408890a8b44240cc70001000000c7400401000000895008bf48cc744189780cb80100000083c414c38b7a1883ff01747252538b5a108b420490e856cdfeff8b742404506a058b5e088b4604ba001f794190e81e04feff8b5c2408ff7304bba8a47941b898a479410bc0e8fadefdff8b5424088b4a045051ff71288b5910b80500000083c800e8e280feff8b042483f8017420ff742404bb544c7a41b840970408eb05e9c70000000bc0e812e2fdff89c7eb05bf010000008b7c24148b470483c800e83e8cfeffa8017503ff553889c683ee0270f6bb0900000089f223d3f6c2017503ff55385089f2d1fa8d43fff7ea8d50015870ed8b4c2414ff710889d3b8050000000bc0e836bffeff8b45008d40f83b45087303ff5520894500c740fc010000008b7c240c89388b75008d76f43b75087303ff5520897500c746fc02000000c74604010000008b5c2408891e8b5424108902c7420401000000897208b948cc7441894a0cb80100000083c418c38b75008d76f43b75087303ff5520897500c746fc02000000b92c1d7b41890e8b4a0c894e048b45008d40ec3b45087303ff5520894500c740fc040000008b7a0889780c8b4a048948088970048b7210893052538b5214ff128b5c24048b5304ff30ff700452ff72288b5a10b80500000083c800e8867ffeff8b0c2483f9017414ff742404bb544c7a41b84097040890e8bee0fdff8b45008d40f83b45087303ff5520894500c740fc010000008b7c240c89388b75008d76f43b75087303ff5520897500c746fc02000000c74604010000008b5c2408891e8b5424108902c7420401000000897208b948cc7441894a0cb80100000083c418c30bc0|@3807,63|32,0,@3339 38,1,@3405 58,0,2 66,1,@3148 83,0,@3465 88,0,I48 94,1,@2893 103,0,0 141,0,0 157,0,0 164,0,0 172,0,@193 180,0,0 206,1,@3277 224,0,@2977 230,1,@2979 242,0,@3184 247,0,@3183 254,1,@2888 274,0,2 282,1,@3148 299,0,@3465 304,0,I48 318,1,@2893 327,0,0 342,1,@3189 361,0,4 403,0,2 410,1,@3241 471,0,0 490,0,0 498,0,@193 506,0,0 539,0,@3805 622,0,2 630,1,@3148 647,0,@3465 652,0,I48 658,1,@2893 719,0,0 738,0,0 746,0,@193 754,0,0 3805:C2,4|8b4204c3|@3806,5| 3806:S60|475f434f444528292e636f646567656e2831302967656e4576616c2836296c6f61645374617469634c696e6b50726f63283229707573684974283129 3807:S51|475f434f444528292e636f646567656e2831302967656e4576616c2836296c6f61645374617469634c696e6b50726f63283229 3808:C2,212|3b650c7303ff5524a8017503ff553883f8057c02eb148b7aec5023c7a801587503ff55383bc77d02eb06b801000000c383f8017507be01000000eb5b83f8037507be07000000eb4f5250bbffffffff0bc0e89ef8f9ff89c3b860a67941e88af4f9ff8b5d008d5bf03b5d087303ff5520895d00c743fc03000000894308ba54cf7441895304b9fcc1b441890b89d890ff552cbe01000000a8017503ff553889c383c30270f6525689d8e852ffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0c24890a89d083c408c3|@3809,63|43,0,0 54,0,0 66,0,3 75,0,-1 82,1,@336 89,0,@3186 94,1,@323 126,0,@224 134,0,@7320 147,0,0 3809:S43|475f434f444528292e636f646567656e2831302967656e4576616c28362967657441726752656773283129 3810:O3|@7320,@224,@3811 3811:S35|737461746963206c696e6b2066756e6374696f6e20697320616e20617267756d656e74 3812:C2,76|3b650c7303ff55245050505089e38b520483c800ff128b45008d40ec3b45087303ff5520894500c740fc040000008b3c2489388b7424048970048b5c24088958088b54240c89500c83c410c3|@3813,63| 3813:S51|475f434f444528292e636f646567656e2831302967656e4576616c2836296c6f61645374617469634c696e6b50726f63283129 3814:C2,76|3b650c7303ff55245050505089e38b520483c800ff128b45008d40ec3b45087303ff5520894500c740fc040000008b3c2489388b7424048970048b5c24088958088b54240c89500c83c410c3|@3813,63| 3815:S30|475f434f444528292e636f646567656e2831302967656e4576616c283629 3816:C2,2508|3b650c7303ff55245253508b3883ff057572ff7004ff7008ff700c8b420483c800e82ee2feff8b742414508b460483c800e81ee2feff50ff742424bb010000008b4424148b54242090e8b2ffffff89c389d883c800e82ea0ffff83f80174408b54241c8b1c248b4204e86ea0ffff8b4c241c8b5c24048b4104e85ea0ffff8b442424eb05e92e020000894424248b5c24188b44240c89ca83c420e961ffffff8b54241c8b420483c800e8fae9feff83f801744f8b4c241c538b5c24048b41040bc0e816a0ffff8b5c24088b4104e80aa0ffffff71088b59048b442404baf08d7a41e8b66cffff8b442428894424288b5c241c8b44240c8b54242083c424e9fefeffff53ff7424288b5c24208b4424148b5424240bc0e8e6feffff8b4c24208b79048b77148b1e83fb017407ba01000000eb565057ff71088b1c2489f890e84ee2feff8b5424048b4a14c70103000000508b44240490e8b2b6feff8b7d008d7ff03b7d087303ff5520897d00c747fc03000000c74708010000008b3424897704890789fa83c40ceb01508b4c242452ff71088b59048b44240cbaf08d7a41e8fa6bffff8b44242489c783f702ff74243089fb8b4424188b54242ce842feffff8b74242850ff7604ff76086a01ff74241c8b5c240c8b442418ba2c0b7a4190e816e9feff8b1c248b5424148b4b088b420489018b7c24308b77048b5e148b0b83f9017407b901000000eb5556ff77088b1c2489f083c800e876e1feff8b7c24048b7714c70603000000508b44240490e8dab5feff8b5d008d5bf03b5d087303ff5520895d00c743fc03000000c74308010000008b1424895304890389d983c40c8b44243051ff70088b58048b442410baf08d7a4183c800e8226bffff8b7c2434ff7704ff77086a01ff7424288b5c240c8b442418ba2c0b7a410bc0e85ae8feff8b34248b5c24208b56088b4b04890a8b44240483c43cc2040083ff0375728b70048b4e0cf7c10100000075698b118b5a04f7c30100000075618b7b0483ff01755e8b710483fe01755b8b78048b45008d40f43b45087303ff5520894500c740fc020000008b33897004c700fbffffff8b4d008d49f43b4d087303ff5520894d00c741fc02000000c7410401000000eb19e9fd000000e9e4000000e9cb000000e9b2000000e99600000089018b45008d40f43b45087303ff5520894500c740fc020000008948048b4f0889088b75008d76ec3b75087303ff5520897500c746fc04000000c7460c03000000bb482a7b41895e08894604c706090000008b45008d40ec3b45087303ff5520894500c740fc040000008b5f1089580c8b0a894808897004c700050000008b742410897424108b5c24048b54240883c40ce923fcffffb8010000008d54240c83c800e80606000083c40cc20400b8010000008d54240ce8f205000083c40cc20400b8010000008d54240ce8de05000083c40cc20400b8010000008d54240ce8ca05000083c40cc2040083fffb75738b700483fe037507b903000000eb05b9010000003bcb75608b5a048b4b148b3983ff01740bb80100000083c40cc2040053ff72088b1c248b44240490e81adffeff8b7424048b5e14c70303000000508b44240490e87eb3feff8b55008d52f03b55087303ff5520895500c742fc03000000eb0ae927000000e917000000c74208010000008b0c24894a04890289d083c418c20400b80100000083c40cc2040083ff1375618b700483fe01750bb80100000083c40cc204008b5e0483fb01751a8b542410895424108b5c24048b068b54240883c40ce9f2faffff8b542408536a016affff74241c6a01bb030000008b068b520c90ff128b342483c4043b650c7303ff5524eba2e90b000000b80100000083c410c2040083ff09755e8b70088b0e83f9fb75598b500483fa017517b8010000008d54240c83c800e88204000083c40cc204008b5a0483fb0175718b7e04b880ac04083bf8752b8b44240489c183f1028b4424108944241089cb8b028b54240883c40ce953faffffe906040000e9ed030000b8609e04083bf875718b028b0883f9fb754a8b7804f7c70100000074228b742410897424108b5c2404b8c42b75418b54240883c40ce90ffaffffe9020100008b742410897424108b5c2404b89c3175418b54240883c40ce9edf9ffff50bb01000000b88c2b7b4183c800e8a262ffff83f80174678b44240ceb05e9ae0000006aff6affff74241c6a01bb030000008b780c8b44241089fa0bc0ff12f7c00100000075048b30eb0db820387a41ff552cbe010000008b5c240c56ff7304bb94027a41b8a0027a41e82ed3fdff8b54240c83fa01740cb98c2b7b41eb0ae936000000b950d679418b7c2410894c24188b742414894c24148b5f04895c24108b57088954240c89c38b0424ba30857a4183c40c56e90f5effffb8010000008d54241083c800e81603000083c410c20400b8010000008d54240ce80203000083c40cc204008b7b0483ff0175648b4604b9e0ad04083bc17528681c2b7b4168102b7b41681c2b7b4168102b7b418b1b8b028d54241c90e80a04000083c40cc20400b900ae04083bc1752c68102b7b41681c2b7b4168102b7b41681c2b7b418b1b8b028d54241ce8da03000083c40cc20400e927020000b9a0b004083bc1752a681c2b7b4168102b7b41681c2b7b4168102b7b418b1b8b028d54241c83c800e8a203000083c40cc20400b960ac04083bc1752768102b7b41681c2b7b4168102b7b41681c2b7b418b1b8b028d54241ce87203000083c40cc20400b9609f04083bc1752768a08d7a416824857a4168a08d7a416824857a418b1b8b028d54241ce84203000083c40cc20400b920ae04083bc17527686c2d7b4168802d7b41688c2d7b4168a02d7b418b1b8b028d54241ce81203000083c40cc20400b940ae04083bc17527688c2d7b4168a02d7b41686c2d7b4168802d7b418b1b8b028d54241ce8e202000083c40cc20400b960ae04083bc1752768a02d7b41688c2d7b4168802d7b41686c2d7b418b1b8b028d54241ce8b202000083c40cc20400b980ae04083bc1752768802d7b41686c2d7b4168a02d7b41688c2d7b418b1b8b028d54241ce88202000083c40cc20400b920b004083bc1752768ac2d7b4168b82d7b4168cc2d7b4168e02d7b418b1b8b028d54241ce85202000083c40cc20400b940b004083bc1752768cc2d7b4168e02d7b4168ac2d7b4168b82d7b418b1b8b028d54241ce82202000083c40cc20400b960b004083bc1752768e02d7b4168cc2d7b4168b82d7b4168ac2d7b418b1b8b028d54241ce8f201000083c40cc20400b980b004083bc1752768b82d7b4168ac2d7b4168e02d7b4168cc2d7b418b1b8b028d54241ce8c201000083c40cc20400b8010000008d54240ce86a00000083c40cc20400b8010000008d54240ce85600000083c40cc20400b8010000008d54240ce84200000083c40cc20400b8010000008d54240ce82e00000083c40cc20400|@3842,63|34,1,@3295 50,1,@3295 60,0,0 86,1,@3684 106,1,@3686 122,1,@3686 170,1,@3316 194,1,@3686 206,1,@3686 221,0,@3565 226,1,@3566 300,0,0 318,1,@3298 331,0,1 342,1,@3234 373,0,0 409,0,@3565 414,1,@3566 472,0,@3317 478,1,@3319 515,0,0 534,1,@3298 547,0,1 558,1,@3234 589,0,0 622,0,@3565 630,1,@3566 659,0,@3317 666,1,@3319 777,0,-3 808,0,0 900,0,1 905,0,@3817 917,0,4 961,0,2 990,0,0 1002,1,@3818 1013,0,0 1022,1,@3818 1033,0,0 1042,1,@3818 1053,0,0 1062,1,@3818 1086,0,1 1093,0,0 1115,0,0 1138,1,@3298 1151,0,1 1162,1,@3234 1205,0,0 1226,0,0 1250,0,0 1310,0,1 1344,0,0 1378,0,0 1390,1,@3818 1412,0,I218 1464,0,I105 1505,0,@449 1539,0,@487 1557,0,0 1562,0,@3824 1570,1,@3553 1601,0,1 1631,0,@3409 1639,0,0 1652,0,@3293 1657,0,@3294 1662,1,@2888 1676,0,@3824 1688,0,@3231 1728,0,@3551 1737,1,@3552 1742,0,0 1754,1,@3818 1765,0,0 1774,1,@3818 1796,0,I229 1805,0,@3820 1810,0,@3819 1815,0,@3820 1820,0,@3819 1834,1,@3825 1845,0,I230 1854,0,@3819 1859,0,@3820 1864,0,@3819 1869,0,@3820 1882,1,@3825 1898,0,I251 1907,0,@3820 1912,0,@3819 1917,0,@3820 1922,0,@3819 1938,1,@3825 1949,0,I217 1958,0,@3819 1963,0,@3820 1968,0,@3819 1973,0,@3820 1986,1,@3825 1997,0,I113 2006,0,@3563 2011,0,@3550 2016,0,@3563 2021,0,@3550 2034,1,@3825 2045,0,I231 2054,0,@3829 2059,0,@3831 2064,0,@3832 2069,0,@3834 2082,1,@3825 2093,0,I232 2102,0,@3832 2107,0,@3834 2112,0,@3829 2117,0,@3831 2130,1,@3825 2141,0,I233 2150,0,@3834 2155,0,@3832 2160,0,@3831 2165,0,@3829 2178,1,@3825 2189,0,I234 2198,0,@3831 2203,0,@3829 2208,0,@3834 2213,0,@3832 2226,1,@3825 2237,0,I247 2246,0,@3835 2251,0,@3836 2256,0,@3838 2261,0,@3840 2274,1,@3825 2285,0,I248 2294,0,@3838 2299,0,@3840 2304,0,@3835 2309,0,@3836 2322,1,@3825 2333,0,I249 2342,0,@3840 2347,0,@3838 2352,0,@3836 2357,0,@3835 2370,1,@3825 2381,0,I250 2390,0,@3836 2395,0,@3835 2400,0,@3840 2405,0,@3838 2418,1,@3825 2429,0,0 2438,1,@3818 2449,0,0 2458,1,@3818 2469,0,0 2478,1,@3818 2489,0,0 2498,1,@3818 3817:O2|-3,I113 3818:C2,160|3b650c7303ff55248b7afc526aff6affff72046a01bb010000008b42f48b570cff128b34248b5ef883fb017407ba102b7b41eb05ba1c2b7b418b4efc5052ff7104bb94027a41b8a0027a410bc0e86acffdff8b7c2404f7c70100000075328b7424088b5efc8b14248b4c240c8954240c895424088b5304895424048b730889342489c38b07ba30857a4151e9585affffb8282b7b410bc0ff552cb80100000090|@3823,63|22,0,0 46,0,@3819 53,0,@3820 66,0,@3293 71,0,@3294 78,1,@2888 134,0,@3551 140,1,@3552 145,0,@3821 155,0,0 3819:O2|1,@3114 3820:O2|1,@3230 3821:O3|@7320,@224,@3822 3822:S18|67656e546573743a204e6f20726573756c74 3823:S46|475f434f444528292e636f646567656e2831302967656e5465737428332967656e4f746865725465737473283129 3824:O2|-1,@3114 3825:C2,316|3b650c7303ff55248b7af883ff0174068b742410eb048b74240c83ff0174068b4c2408eb048b4c2404525089f0e82601000083f8017402eb388b14248b0283f8fb7512538b5a0489c8e8425dffff83f8017403eb1d538b3c248b1f83fbfb75748b5f0489f0e8265dffff83f801746aeb01538b5c24088b53fc56516aff6affff73046a01bb030000008b44241c8b520cff12f7c00100000075048b08eb0db820387a41ff552cb9010000008b4424108b78fc516aff6affff70046a01bb030000008b44241c8b570cff12f7c0010000007510eb0ae94d000000e9480000008b30eb0db820387a41ff552cbe010000008b5c24148b53fc8b4c2408894c24288b442404894424248b7a04897c24208b4a08894c241c89f38b0424ba30857a4183c418e97e58ffffb8010000008b5424088b4c240c83c42051e980fdffff|@3828,63|46,1,@3826 74,1,@3553 102,1,@3553 133,0,1 159,0,@3409 167,0,0 189,0,1 227,0,@3409 235,0,0 282,0,@3551 290,1,@3552 295,0,0 312,1,@3818 3826:C2,8|b803000000c30bc0|@3827,1|1,0,1 3827:S26|49333836434f4445434f4e5328292e6973436f6d705252283129 3828:S43|475f434f444528292e636f646567656e2831302967656e5465737428332967656e436f6d70617265283629 3829:O2|0,@3830 3830:O1|7 3831:O2|0,@3528 3832:O2|0,@3833 3833:O1|8 3834:O2|0,@3529 3835:O2|1,@3265 3836:O2|1,@3837 3837:O1|-6 3838:O2|1,@3839 3839:O1|-10 3840:O2|1,@3841 3841:O1|5 3842:S30|475f434f444528292e636f646567656e2831302967656e54657374283329 3843:C2,216|3b650c7303ff5524a8017503ff553883f8057d7483f8017507be01000000eb5b83f8037507be07000000eb4f5253bbffffffff0bc0e86ae8f9ff89c3b860a67941e856e4f9ff8b5d008d5bf03b5d087303ff5520895d00c743fc03000000894308ba54cf7441895304b9fcc1b441890b89d890ff552cbe010000008b7d008d7ff83b7d08730aeb05e911000000ff5520897d00c747fc010000008937eb05bfffffffff576affff74240c6a0189dfbb0300000089f88b5204ff12f7c00100000075058b00c20400b8102f7b4183c800ff552cb80100000090|@3846,63|26,0,0 38,0,3 47,0,-1 54,1,@336 61,0,@3186 66,1,@323 98,0,@224 106,0,@7320 119,0,0 159,0,-1 175,0,1 200,0,@3844 211,0,0 3844:O3|@7320,@224,@3845 3845:S17|67656e4172673a206e6f20726573756c74 3846:S29|475f434f444528292e636f646567656e2831302967656e417267283329 3847:C2,164|3b650c7303ff5524525353ff742418ff742418ff742418bb030000008b520c90ff128b3c2483ff01750bb80100000083c408c20c00f7c7010000007556f7c001000000753f8b742404ff37ff306a038b5e048b4608ba8c167a4183c800e8ae03ffff89c38b45008d40f83b45087303ff5520894500c740fc01000000891883c408c20c00b824307b410bc0ff552cb801000000b854307b4183c800ff552cb80100000090|@3852,63|24,0,1 43,0,0 86,0,@3339 94,1,@3405 133,0,@3848 143,0,0 148,0,@3850 159,0,0 3848:O3|@7320,@224,@3849 3849:S24|67656e546f52656769737465723a206e6f20726573756c74 3850:O3|@7320,@224,@3851 3851:S29|67656e546f52656769737465723a206e6f742061207265676973746572 3852:S36|475f434f444528292e636f646567656e2831302967656e546f5265676973746572283529 3853:O1|@2948 3854:C2,8|8b78188b07c30bc0|@1924,33| 3855:C2,44|3b650c7303ff55248b78108b77088b1e53bb01000000b80b0000008d5424040bc0e82200000083c404c30bc0|@3858,63|18,0,0 23,0,5 34,1,@3856 3856:C2,360|3b650c7303ff5524a8017503ff553883f8017d0389d8c3a8017503ff553883f8017d02eb0ea8017503ff553883f80d7d02eb1089c6b81401794190ff552cbf0100000083f8097507bf0d000000eb0e83f80b7507bf0f000000eb0289c78b72fc83fe017502eb44525053578b0e83f9017507b801000000eb2b8b1c248b0183c800e85ae6fdff83f8017407b803000000eb128b49043b650c7303ff5524ebceb80100000083f8017506eb5c525053508b5c2408f6c3017503ff553889da83ea0270f6f6c3017503ff553883fb017d02eb0ff6c3017503ff553883fb0d7d02eb0fb8140179410bc0ff552cb90100000083fb097507b90d000000eb1383fb0b750cb90f000000eb07e93300000089d98b45008d40f43b45087303ff5520894500c740fc020000008b7c2404897804890889c389d08b54240c83c410e9c1feffff8b7c2408f7c7010000007503ff553889fe83ee0270f68b5c240489f08b54240c83c410e999feffff90|@3857,63|54,0,@2901 63,0,0 73,0,6 85,0,7 115,0,0 130,1,@2958 140,0,1 160,0,0 225,0,@2901 235,0,0 245,0,6 257,0,7 3857:S41|5452414e535f54414228292e6765744d6f646966656452656753657428312967657452656773283229 3858:S31|5452414e535f54414228292e6765744d6f6469666564526567536574283129 3859:C2,2380|908dbc2478ffffff3b7d0c7303ff55288b780c8b378b50248b0a8b78288b178b78485053565152578b078b7c241450ff37ff7708ff7710ff7714ff771cff7720ff7738ff773cff774c89fbb80100000090e84a25ffff8b7424208b1e538b5c2440b80100000083c800e8aa1dfeff8b54243cf6c2017503ff553883fa297c71b8f9ffffff89c723faf7c7010000007503ff553850528d40ffd1faf7ea8d78015a5870edf7c7010000007503ff553881ff01ffffff7c5ef7c7010000007503ff553881ff010100007d6889fbb8f880794190e87e0efeff8b55008d52f43b55087303ff5520895500c742fc02000000eb05e9d0000000b9743c7b41894a04890252b803000000e87608000083f801750a8b3424eb64e918000000508b4424048d54244c83c800e89609000089c683c404eb6289fbb8f880794190e8160efeff8b55008d52f43b55087303ff5520895500c742fc02000000b92c3e7b41894a04890252b80900000083c800e81208000083f801750a8b3424eb1be916000000508b4424048d54244c83c800e89e09000089c683c40456bb51000000b80f00000083c800e8e609000083f80175058b0c24eb39508b4424048d542450e89e0b000089c183c404eb248b4c242883f9017414bb49000000b80900000090e8ae09000089c1eb05b901000000505051b80100000083f901750489c7eb22a8017503ff553889c683c60270f68b490489f03b650c7303ff5524ebdabf01000000bb0900000089f883c800ff15009f040883f8017502eb1fa8017503ff553883f8017c07be03000000eb05be0100000083fe037402eb0489c6eb0ea8017503ff553889c683c60870f683fe017507bb01000000eb2aba0900000089d123cef6c1017503ff553889d12bce8d490170f4bbc8407b4189c80bc0e88e0b000089c38b3c2483ff01750489d8eb0e89d88d54245083c800e8b60c000050be0100000083f801750489f3eb26f7c6010000007503ff553889f283c20270f68b400489d63b650c7303ff5524ebd6bb01000000f6c3017503ff553883fb017c07ba03000000eb05ba0100000083fa03750489d9eb0ff6c3017503ff553889d983e90670f6bb0900000089c890ff15e09e04088b7c24348b37f7c6010000007503ff553883fe017c07bb03000000eb05bb0100000083fb03750489f2eb12f7c6010000007503ff553889f283ea0670f650bb0900000089d090ff15e09e04088b0c2489c723f9f7c7010000007503ff55388d78ff03f970f6f7c7010000007503ff553889fe83c60870f6f7c6010000007503ff553889f383c30270f653ba010000008b44240c83f801750489d7eb23f6c2017503ff553889d683c60270f68b400489f23b650c7303ff5524ebd9bf01000000be0100000089fb23def6c3017503ff553889f32bdf8d5b0170f453ff7424508b44246090e8ba0b0000ff74244c8b5c24048b44246083c800e8a20d00008b542404f7c201000000740489d1eb0db894207541ff552cb9010000006a01bb8300000089c8ff15a09204088b7d008d7ff43b7d087303ff5520897d00c747fc02000000894704c707010000008b75008d76f83b75087303ff5520897500c746fc01000040893e8b5d008d5bf83b5d087303ff5520895d00c743fc0100000089338b54242c891a8b4c24388b44240889018b7c24408b1f56535089f38b44244883c800e84602feff8b55008d52f83b55087303ff5520895500c742fc01000040c70201000000528b4424148d542468e8a60f00008b4c24488b01a8017503ff553883f8017c07bf03000000eb05bf0100000083ff03750489c6eb0ea8017503ff553889c683ee0670f6bb0900000089f00bc0ff15e09e04088b5c241089c223d3f6c2017503ff55388d50ff03d370f6b90900000089d023c1a8017503ff553852d1fa8d41fff7ea8d40015a70ef5250ff74240c89c30bc0e82e19feff8b7c2404f7c7010000007503ff553889fe83c60670f6f7c6010000007503ff553889f383c30270f6ba0900000089d923caf6c1017503ff553850528d43ffd1faf7ea8d48015a5870edff74240c89cbb80500000083c800e8d218feff8b442404a8017503ff553889c783c70270f6be0900000089fb23def6c3017503ff5538505289fad1fa8d46fff7ea8d58015a5870ebff74240cb80100000090e88e18feff8b54240c8b0a8b3983ff017544ff7104bb850000008b04240bc0ff1540aa04088b75008d76f43b75087303ff5520897500c746fc020000008b1c24895e04c706030000008b5424108932b801000000eb10b86c487b4183c800ff552cb801000000bb409704088b442448ff154094040883f8017407b901000000eb048b4c24488b442408a8017503ff553889c783c70470f65189fb8b4424140bc0e8e20e00008b742478bb0100000083fe01750489daeb5d8b0683f80d7507b909000000eb0e83f80f7507b90b000000eb0289c1f7c101000000740489cfeb0ef641ff108b397402f7df8d7c3f015389fbb8030000000bc0ff15e0af04088b3c2489c30bdf8b760483c4043b650c7303ff5524eb9ae905000000ba010000008b4c2408f6c1017503ff553889c883c00670f65289c38b442414e84a0e00008b7c246883ff017507be01000000eb318b1fff7704ff73088b138b4b0489cb89d08d54247c0bc0e84e1000008b3c2483c4043b650c7303ff5524ebc8be010000008b5c243c8b1383fa0175638b4424108b388b3783fe037544ff7704bb050000008b04240bc0ff1540aa04088b5d008d5bf43b5d087303ff5520895d00c743fc020000008b1424895304c703ffffffff8b4c24148919b901000000eb18b8804f7b4183c800ff552cb901000000eb06b901000000508b4c244883f90174208b7c24148b378b1e83fb01750eb890da794190ff552cb8010000008b4604eb448b4424148b388b1f83fb01750eb890da794190ff552cbe010000008b77048b55008d52f83b55087303ff5520895500c742fc01000040893289d189c8ff152097040889c85089c38b4424780bc0e8361400008b44243c83f80174658b742424bb0900000089f223d3f6c2017503ff55385089f2d1fa8d43fff7ea8d50015870ed8b4c243889c823c2a8017503ff55388d41ff03c270f6ff7424788b5c241c83c800e85e160000b8307a7b418b54244090ff128bbc248000000083ff017507eb3ae945000000ff37ff7704b8410000008b54244890ff128b44240483c800e81ec5fdff8b5424480bc0ff128b3c2483c4083b650c7303ff5524ebbfb8487a7b418b54244090ff1289c7eb05bf010000008b042483c47cc20400|@4009,63|76,0,0 82,1,@3474 98,0,0 106,1,@3060 128,0,-4 204,0,@3109 210,1,@3038 246,0,@3860 257,0,1 262,1,@3862 294,1,@3864 308,0,@3109 314,1,@3038 343,0,@3865 354,0,4 362,1,@3862 394,1,@3866 405,0,40 410,0,7 418,1,@3867 442,1,@3869 463,0,36 468,0,4 474,1,@3867 483,0,0 491,0,0 534,0,0 539,0,4 550,0,I110 574,0,1 581,0,0 616,0,0 623,0,4 649,0,@3870 658,1,@3873 686,1,@3875 692,0,0 739,0,0 757,0,1 764,0,0 793,0,4 802,0,I109 829,0,1 836,0,0 869,0,4 878,0,I109 945,0,0 993,0,0 998,0,0 1034,1,@3876 1054,1,@3884 1075,0,@369 1083,0,0 1090,0,65 1098,0,I11 1131,0,0 1222,1,@3022 1252,0,0 1266,1,@3892 1289,0,1 1296,0,0 1324,0,4 1334,0,I109 1362,0,4 1402,1,@3062 1447,0,4 1486,0,2 1494,1,@3062 1517,0,4 1556,0,0 1562,1,@3062 1583,0,66 1594,0,I200 1630,0,1 1641,0,0 1648,0,@3894 1659,0,0 1664,0,I48 1674,0,I24 1684,0,0 1722,1,@3896 1731,0,0 1752,0,4 1764,0,5 1802,0,1 1810,0,I245 1843,0,0 1874,1,@3896 1888,0,0 1918,1,@3901 1939,0,0 1971,0,2 1982,0,I200 2018,0,-1 2029,0,0 2036,0,@3912 2047,0,0 2054,0,0 2082,0,@3238 2091,0,0 2114,0,@3238 2123,0,0 2162,0,I47 2178,1,@3914 2196,0,4 2262,1,@3920 2267,0,@4007 2303,0,32 2322,1,@2903 2351,0,@4008 2367,0,0 3860:O2|124,@3861 3861:O2|36,0 3862:C2,244|3b650c7303ff552483f8017506b801000000c35053bb010200008b042483c800ff15009f040883f8017502eb1fa8017503ff553883f8017c07bf03000000eb05bf0100000083ff037402eb0489c7eb11a8017503ff553889c781c70002000070f38b742404f7c6010000007503ff553889f383eb0270f68b1424f6c2017503ff553883fa017c07b903000000eb05b90100000083f903750489d0eb12f6c2017503ff553889d081e8fe01000070f35753bb0102000083c800ff15e09e040889c38b04240bc0e836ffffff8b7d008d7ff43b7d087303ff5520897d00c747fc020000008947048b742404893789f883c410c383c800|@3863,63|14,0,0 22,0,256 34,0,I110 58,0,1 65,0,0 136,0,1 143,0,0 177,0,256 186,0,I109 3863:S37|49333836434f4445434f4e5328292e636f7079436f64652833296765744279746573283229 3864:C2,68|3b650c7303ff552483f80175048b42b4c352ff308b40040bc0e8e2ffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0424890289d083c408c3|@1462,5| 3865:O2|188,@3861 3866:C2,68|3b650c7303ff552483f80175048b42b4c352ff308b40040bc0e8e2ffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0424890289d083c408c3|@1462,5| 3867:C2,384|3b650c7303ff552489c1b8e0e379410bc0e8b203feffbf1100000089ce23f7f7c6010000007503ff5538505289cad1fa8d47fff7ea8d70015a5870ebf7c6010000007503ff553889f281c28000000070f3f6c2017503ff553889d183c10a70f650b8f0e3794183c800e85a03feff50b8d411764190e84e03feff8b7d008d7ff43b7d087303ff5520897d00c747fc02000000c7470401000000891f8b75008d76f43b75087303ff5520897500c746fc02000000897e04c706ab0000008b5d008d5bf43b5d087303ff5520895d00c743fc0200000089730489038b55008d52f43b55087303ff5520895500c742fc02000000895a04c702070000008b45008d40f43b45087303ff5520894500c740fc020000008950048b3c2489388b75008d76f43b75087303ff5520897500c746fc02000000894604c706190000008b5d008d5bf43b5d087303ff5520895d00c743fc02000000897304890b8b45008d40f43b45087303ff5520894500c740fc020000008958048b542404891083c408c383c800|@3868,63|11,0,@3264 18,1,@3038 23,0,8 98,0,@3265 106,1,@3038 112,0,@1251 118,1,@3038 149,0,0 184,0,85 246,0,3 311,0,12 3868:S43|49333836434f4445434f4e5328292e636f7079436f646528332974657374526567416e6454726170283229 3869:C2,68|3b650c7303ff552483f80175048b42b0c352ff308b40040bc0e8e2ffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0424890289d083c408c3|@1462,5| 3870:O1|@3871 3871:C2,20|3b650c7303ff5524b858427941e97e01feff0bc0|@3872,53|9,0,@3037 14,1,@3038 3872:S37|49333836434f4445434f4e5328292e636f7079436f64652833296e6f70436f64652d283129 3873:C2,272|3b650c7303ff5524a8017503ff553883f8017d0f89c6b8d4b67441ff552cbf01000000a8017503ff553889c783c70270f689c6536a01bb8100000089f883c800ff15a0920408893089c75657bb010000008b5424045223d3f6c2015a7503ff55383bd37f02eb415389d88b54240c0bc0ff128b0c24f6c1017503ff553889cf83c70270f68b74240489447efef6c1017503ff553889cb83c30270f683c4043b650c7303ff5524eba98b0c248b01bf0100000083f801750689f883c40cc38d70fe8d58fef6c3017503ff553889da83c20270f68b0c248b4451fe8b5d008d5bf43b5d087303ff5520895d00c743fc02000000897b04890389f089df3b650c7303ff5524ebaeb80100000083c40cc383c800|@3874,63|23,0,@78 31,0,0 55,0,64 66,0,I11 77,0,0 174,0,0 261,0,0 3874:S16|4c6973742e746162756c617465283229 3875:C2,68|3b650c7303ff552483f80175048b42b0c352ff308b40040bc0e8e2ffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0424890289d083c408c3|@1462,5| 3876:C2,252|3b650c7303ff55248b7c240483ff017508b801000000c204008b37f7c6010000007503ff553889f283ea0270f6505356ff7704ff700889d38b04240bc0e8eef0fdff508b5c24048b44240c0bc0e8a6fdfdff8b4c24108b7c240c89ce23f7f7c6010000007503ff553889ce2bf78d760170f4f7c6010000007503ff553889f383eb0870f650b8c8cc744183c800e8fafefdff8b542404520bd0f6c2015a7503ff55383bd07408b8ec437b41ff552c8b042483f8017408b830447b41ff552c83fb01750bb86c447b4183c800ff552cff74240889df8b5c241489f883c800e85602feff8b74240c897424208b5c24148b44241883c41ce906ffffff0bc0|@3883,63|18,0,0 62,1,@3006 78,1,@3035 134,0,@202 142,1,@3038 167,0,@3877 183,0,@3879 196,0,@3881 222,1,@3042 3877:O3|@7320,@224,@3878 3878:S41|66697852656375727369766543616c6c733a206e6f7420612063616c6c20696e737472756374696f6e 3879:O3|@7320,@224,@3880 3880:S34|66697852656375727369766543616c6c733a20616c72656164792070617463686564 3881:O3|@7320,@224,@3882 3882:S30|66697852656375727369766543616c6c733a207a65726f206f6666736574 3883:S35|49333836434f4445434f4e5328292e66697852656375727369766543616c6c73283329 3884:C2,464|3b650c7303ff55248b7c240483ff017508b801000000c204008b378b168b0a83f9ff75735053ff7704ff7008ff72048b1c248b44240483c800e8f6eefdffa8017503ff553881f8010100007c25a8017503ff553889c681eefe01000070f3f7c6010000007503ff553889f783ef0270f6eb0289c78b44240c8b342489c323def6c3017503ff553889c32bde8d5b0170f4f6c301750aeb05e99c000000ff553889da83ea0270ef83ff01740bb8bc467b4183c800ff552cf6c2017503ff553881fa01ffffff7c66f6c2017503ff553881fa010100007d56f6c2017503ff553883fa017d14f6c2017503ff553889d181c10002000070f3eb0289d1f7c101000000740489cfeb0ef641ff108b397402f7df8d7c3f0189f981e1ff0100005189f38b44240883c800e872f0fdffeb6db8fc467b410bc0ff552ceb665053ff7704ff7008ff72048b5c24048b042483c800e8aafafdff8b7c240c8b342489fb23def6c3017503ff553889fb2bde8d5b0170f4f6c3017503ff553889da83ea0870f683f8017408b8bc467b41ff552c83fa01741dff74240489f389d0eb0ae918000000e9130000000bc0e892fffdffeb0ab83c477b410bc0ff552c8b4c2408894c24188b5c240c8b44241083c414e932feffff0bc0|@3891,63|18,0,0 58,1,@3006 172,0,@3885 294,1,@3014 301,0,@3887 334,1,@3035 387,0,@3885 422,1,@3042 429,0,@3889 3885:O3|@7320,@224,@3886 3886:S37|6669785265637572736976654272616e636865733a20616c72656164792070617463686564 3887:O3|@7320,@224,@3888 3888:S38|6669785265637572736976654272616e636865733a206272616e636820746f6f206c61726765 3889:O3|@7320,@224,@3890 3890:S33|6669785265637572736976654272616e636865733a207a65726f206f6666736574 3891:S38|49333836434f4445434f4e5328292e6669785265637572736976654272616e63686573283329 3892:C2,116|3b650c7303ff552483f8017506b801000000c38b7a988b378b18f7c301000000740489d9eb0ef643ff108b0b7402f7d98d4c090189cb81e3ff01000052ff7004565389f38b429c0bc0e876eefdff8b5424088b0c24f6c1017503ff553889c883c00270f68b7a9889078b44240483c40ceb8e0bc0|@3893,63|14,0,0 74,1,@3014 3893:S43|49333836434f4445434f4e5328292e636f7079436f64652833297075745072656c7564654c697374283129 3894:O3|@7320,@224,@3895 3895:S37|63736567436f6e76657274546f436f64653a206e6f7420612062797465207365676d656e74 3896:C2,404|3b650c7303ff55248b388b0783f803755b8b77048b56fc81e2ffffff008d541201f6c2017503ff553883fa017d1bb92ccb744189c823c2a8017503ff55388d41ff03c270f689c1eb0289d1f6c3017503ff553883fb017d02eb175123cbf6c101597503ff55383bcb7e07eb72e9120100005189d8bbffffffffe896cdf9ff50bbffffffff8b44240490e886cdf9ff8b7d008d7ff43b7d087303ff5520897d00c747fc02000000c747040100000089078b75008d76f43b75087303ff5520897500c746fc02000000897e04bbb4357941891e8b55008d52f43b5508730aeb05e974000000ff5520895500c742fc020000008972048b0c24890a8b45008d40f43b45087303ff5520894500c740fc02000000895004bf5c4a7b41893883c800e822d1f9ff8b75008d76f03b75087303ff5520897500c746fc03000000894608bb54cf7441895e04bafcc1b441891689f090ff552cb801000000f7c301000000740489d9eb10b89420754183c800ff552cb9010000008b44240489444efeb801000000c20400b8784a7b4183c800ff552cb80100000090|@3900,63|47,0,@176 117,0,-1 122,1,@336 128,0,-1 138,1,@336 169,0,0 203,0,@3007 276,0,@3897 286,1,@347 318,0,@224 326,0,@7320 339,0,0 356,0,@369 367,0,0 380,0,0 388,0,@3898 399,0,0 3897:S19|63736567507574576f72643a20496e64657820 3898:O3|@7320,@224,@3899 3899:S41|63736567507574576f72643a206e6f7420616e20756e6c6f636b656420636f6465207365676d656e74 3900:S23|434f44455f5345472e63736567507574576f7264283329 3901:C2,276|3b650c7303ff55248b3883ff03753752ff7004ff74240c8b42fc83c800e80e0100008b34248b5ec88b13f6c2017503ff553889d183e90270f6890bb80100000083c404c2040083ffff75678b70048b0e8b7aa8be0900000089f823c6a8017503ff55385289fad1fa8d46fff7ea8d40015a70ed89ce23f0f7c6010000007503ff55388d71ff03f070f68b4a9c8b018b3883ff01750eb890da794190ff552cb8010000008b4004f7c601000000740989f7eb13e953000000f646ff108b3e7402f7df8d7c3f0189d65389fb0bc0ff1520ac04085650ff7424108b5c240c8b46fc0bc0e84a0000008b1c248b53c88b0af6c1017503ff553889c883e80270f68902b80100000083c408c20400b801000000c204000bc0|@3911,63|30,1,@3902 60,0,0 84,0,4 150,0,@3238 159,0,0 206,0,I215 226,1,@3902 256,0,0 267,0,0 3902:C2,120|3b650c7303ff55248b78108b378b50208b0af7c10100000075048b01eb0db8a04c7b41ff552cb801000000bf0900000089f223d7f6c2017503ff55385089f2d1fa8d47fff7ea8d50015870ed89d923caf6c1017503ff55388d4bff03ca70f68b7c24088b742404897c24088974240489cbe93e0000000bc0|@3910,63|31,0,@3903 39,0,0 44,0,4 114,1,@3905 3903:O3|@7320,@224,@3904 3904:S5|7363536574 3905:C2,448|3b650c7303ff55248b388b0783f803756a8b77048b56fc81e2ffffff008d541201f6c2017503ff553883fa017d1bb92ccb744189c823c2a8017503ff55388d41ff03c270f689c1eb0289d1b80900000089c223d1f6c2017503ff55385089c2d1fa8d41fff7ea8d50015870edf6c3017503ff553883fb017d07eb17e9310100005223d3f6c2015a7503ff55383bd37e02eb705189d8bbffffffff83c800e85ec9f9ff50bbffffffff8b44240490e84ec9f9ff8b7d008d7ff43b7d087303ff5520897d00c747fc02000000c747040100000089078b75008d76f43b75087303ff5520897500c746fc02000000897e04bbb4357941891e8b55008d52f43b5508730aeb05e974000000ff5520895500c742fc020000008972048b0c24890a8b45008d40f43b45087303ff5520894500c740fc02000000895004bf9c4e7b41893883c800e8eaccf9ff8b75008d76f03b75087303ff5520897500c746fc03000000894608bb54cf7441895e04bafcc1b441891689f090ff552cb801000000f7c301000000740489d9eb10b89420754183c800ff552cb9010000008b4424088b5c240489442408895c240489cb89f0ff2580a90408b8bc4e7b4190ff552cb80100000090|@3909,63|47,0,@176 76,0,4 150,0,-1 158,1,@336 164,0,-1 174,1,@336 205,0,0 239,0,@3007 312,0,@3906 322,1,@347 354,0,@224 362,0,@7320 375,0,0 392,0,@369 403,0,0 429,0,I194 434,0,@3907 443,0,0 3906:S23|63736567507574436f6e7374616e743a20496e64657820 3907:O3|@7320,@224,@3908 3908:S45|63736567507574436f6e7374616e743a206e6f7420616e20756e6c6f636b656420636f6465207365676d656e74 3909:S27|434f44455f5345472e63736567507574436f6e7374616e74283429 3910:S29|49333836434f4445434f4e5328292e636f6e73744c6162656c73283429 3911:S37|49333836434f4445434f4e5328292e636f7079436f6465283329707574436f6e7374283329 3912:O3|@7320,@224,@3913 3913:S47|63736567436f6e76657274546f436f64653a206e6f7420616e20756e6c6f636b656420636f6465207365676d656e74 3914:C2,72|3b650c7303ff55248b782c8b37535083fe017509b80100000083c408c3ff76048b068d54240c83c800e8360000008b342483c4043b650c7303ff5524ebd1b80100000083c40cc390|@3919,63|21,0,0 42,1,@3915 63,0,0 3915:C2,220|3b650c7303ff55248b780c8b378b58208b0bff703852505183fe017502eb278b06ff7604ff70088b58048b008d54241890e8c20000008b342483c4043b650c7303ff5524ebd28b44240c8b3883ff01756a8b3424f7c60100000075048b1eeb0fb8a04c7b410bc0ff552cbb010000008b138b0a83f903754c53ff7204bb050000008b0424ff1540aa04088b45008d40f43b45087303ff5520894500c740fc020000008b3c24897804c700ffffffff8b7424048906b801000000eb05e91300000083c418c3b8804f7b410bc0ff552cb801000000b80100000083c410c3|@3918,63|50,1,@3916 97,0,@3903 107,0,0 125,0,2 134,0,I200 170,0,-1 181,0,0 197,0,@3912 207,0,0 212,0,0 3916:C2,112|3b650c7303ff55248b3883ff0175568b72f88b48048b7ef88b41108b77103bc6753b8b4af852ff71fcff74240c8b42f490e8b2faffff8b04248b78fc8b37f7c6010000007503ff553889f383eb0270f6891fb80100000083c404c20400b801000000c20400b801000000c2040083c800|@3917,63|50,1,@3902 83,0,0 94,0,0 102,0,0 3917:S50|49333836434f4445434f4e5328292e6669784f7468657252656673283229666978526566283129707574436f6e7374283329 3918:S39|49333836434f4445434f4e5328292e6669784f7468657252656673283229666978526566283129 3919:S30|49333836434f4445434f4e5328292e6669784f7468657252656673283229 3920:C2,6804|3b650c7303ff55248b7c24048b75008d76f83b75087303ff5520897500c746fc01000040c70601000000ff770cff773cff771056ff77385350ff7714bb409704088b0424ff154094040883f801740db87f0000008b542418ff12eb0a8b04248b54241890ff12b8f46c7b418b54241890ff128b5c24108b138b4c24045223d1f6c2015a7503ff55383bd17d6c8b03bb030000000bc0e8e2c3f9ff8b5424180bc0ff12b8130000008b54241890ff128b7c24108b3789f38b44240883c800e8fee0fdff8b5c24108b13f6c2017503ff553889d183c10270f6890b89c1b85057794190e836effdff510bc8f6c101597503ff55383bc87507eb24e981190000b8f825754183c800e812effdff510bc8f6c101597503ff55383bc87402eb5d8b035189c38b44240ce896e0fdffa8017503ff553883f8017c07bf03000000eb05bf0100000083ff03750489c6eb0ea8017503ff553889c683ee0e70f6bb1100000089f0ff15e09e0408bb1100000090ff15009f040883f8017507eb32e9a2000000a8017503ff553883f8017c07bb03000000eb05bb0100000083fb037410a8017503ff553889c383c31070f689d88d5424240bc0e806190000b8086e7b418b54241c90ff12b8010000008d5424240bc0e8021a0000b8590000008b54241c90ff12b8505779410bc0e832eefdff8b1424520bd0f6c2015a7503ff55383bd07513b8010000008d54242483c800e89e1d0000eb6db8010000008d542424e8561e0000eb62b848d67941e8f2edfdff510bc8f6c101597503ff55383bc8751eb81c757b418b54241890ff12b8010000008d5424200bc0e88e200000eb71b894877941e8baedfdff510bc8f6c101597503ff55383bc8752ab808767b418b542418eb0ae9e0170000e9db17000090ff12b8010000008d5424200bc0e84a200000eb71b884887941e876edfdff510bc8f6c101597503ff55383bc87526b814767b418b54241890ff12b801000000eb05e9931700008d54242083c800e80a200000eb71b8fc7a7a41e836edfdff510bc8f6c101597503ff55383bc87526b820767b418b54241890ff12b8010000008d542420eb05e94f17000083c800e8ca1f0000eb71b8047b7a41e8f6ecfdff510bc8f6c101597503ff55383bc87526b82c767b418b54241890ff12b8010000008d542420eb05e90f17000083c800e88a1f0000eb71b8982d7b41e8b6ecfdff510bc8f6c101597503ff55383bc87526b838767b418b54241890ff12b8010000008d542420eb05e9cf16000083c800e84a1f0000eb71b8782d7b41e876ecfdff510bc8f6c101597503ff55383bc87526b844767b418b54241890ff12b8010000008d542420eb05e98f16000083c800e80a1f0000eb71b8c42d7b41e836ecfdff510bc8f6c101597503ff55383bc87526b850767b418b54241890ff12b8010000008d542420eb05e94f16000083c800e8ca1e0000eb71b8ec2d7b41e8f6ebfdff510bc8f6c101597503ff55383bc87526b85c767b418b54241890ff12b8010000008d542420eb05e90f16000083c800e88a1e0000eb71b8d82d7b41e8b6ebfdff510bc8f6c101597503ff55383bc87526b868767b418b54241890ff12b8010000008d542420eb05e9cf15000083c800e84a1e0000eb71b8f0e37941e876ebfdff510bc8f6c101597503ff55383bc87526b874767b418b54241890ff12b8010000008d542420eb05e98f15000083c800e80a1e0000eb76b8104d7941e836ebfdff510bc8f6c101597503ff55383bc87526b880767b418b54241890ff12b8010000008d542420eb05e94f15000083c800e8ca1d0000eb70b81c517941e8f6eafdff510bc8f6c101597503ff55383bc8755b8b038b5c240890e846e9fdff8b7c24108b37f7c601000000750aeb05e90a150000ff553889f383c30870ef891f50b880767b418b54241c83c800ff128b5424148b0a8b042489cf23f8f7c7010000007503ff5538eb0ae9d0140000e91e0000008d79ff03f870eabb0300000089f890e8d2bef9ff8b54241c0bc0ff12eb74b8c8cc7441e85eeafdff510bc8f6c101597503ff55383bc8755f8b038b5c240890e8aee8fdff8b7c24108b37f7c6010000007503ff553889f383c30870f6891f50b88c767b418b54241c0bc0ff128b5424148b0a8b042489cf23f8f7c7010000007503ff55388d79ff03f870f6bb03000000eb0ae931140000e91200000089f890e842bef9ff8b54241c0bc0ff12eb6db8680a7641e8cee9fdff510bc8f6c101597503ff55383bc875588b0389c38b44240883c800e852dbfdffa8017503ff553883f8017c07bf03000000eb05bf0100000083ff03750489c6eb0ea8017503ff553889c683ee0e70f6bb1100000089f0ff15e09e0408bb11000000eb0ae9a8130000e97900000090ff15009f040883f8017502eb1fa8017503ff553883f8017c07bb03000000eb05bb0100000083fb037402eb0489c3eb0ea8017503ff553889c383c31070f653b89c767b418b54241cff12b8010000008d5424240bc0e8be140000b8590000008b54241c90ff128b0424e8d2a7fdff8b54241c0bc0ff12eb7051bb1100000089c8ff15009f040883f8017502eb1fa8017503ff553883f8017c07bf03000000eb05bf0100000083ff037402eb0489c7eb0ea8017503ff553889c783c71070f683ff07756e8b0424a8017503ff553883f87f7d648b7c24148b3789f38b44240c83c800e81edafdffeb05e9b5120000a8017503ff553883f8017c07bb03000000eb05bb0100000083fb03750489c2eb0ea8017503ff553889c283ea0e70f6bb1100000089d090ff15e09e0408bb11000000eb0ae90a010000e90501000090ff15009f040883f8017502eb1fa8017503ff553883f8017c07b903000000eb05b90100000083f9037402eb0489c1eb0ea8017503ff553889c183c11070f68b0424a8017503ff553883f8017c07bf03000000eb05bf0100000083ff03750489c6eb0ea8017503ff553889c683ee0e70f651bb1100000089f0ff15e09e0408bb1100000090ff15009f040883f8017502eb2da8017503ff553883f8017c07bb03000000eb05bb0100000083fb037410a8017503ff553889c383c31070f689d88d54242883c800e8fa110000b8130000008b54242090ff12b8010000008d5424280bc0e8f6120000b8590000008b54242090ff128b0424e80aa6fdff8b5424200bc0ff12eb71b8987e7941e816e7fdff8b3c24500bc7a801587503ff55383bf8755a8b7424148b1e8b44240c83c800e896d8fdffa8017503ff553883f8017c07ba03000000eb05ba0100000083fa03750489c1eb0ea8017503ff553889c183e90e70f6bb1100000089c8ff15e09e0408bb11000000eb0ae9e9100000e97900000090ff15009f040883f8017502eb1fa8017503ff553883f8017c07bf03000000eb05bf0100000083ff037402eb0489c7eb0ea8017503ff553889c783c71070f657b89c767b418b542420ff128b0424e832a5fdff8b5424200bc0ff12b8590000008b54242090ff12b8010000008d5424280bc0e8e6110000eb71b8f0807941e822e6fdff8b3424500bc6a801587503ff55383bf0755a8b5c24148b1389d38b44240c90e8a2d7fdffa8017503ff553883f8017c07b903000000eb05b90100000083f903750489c7eb0ea8017503ff553889c783ef0e70f6bb1100000089f8ff15e09e0408bb11000000eb0ae9f50f0000e97501000090ff15009f040883f8017502eb1fa8017503ff553883f8017c07be03000000eb05be0100000083fe037402eb0489c6eb0ea8017503ff553889c683c61070f656b8ac767b418b542420ff128b3424f7c601000000745583fe017c5083fe0f7f4bbb1a5d7b418d5cb3fcffe3e961000000909090e969000000909090e971000000909090e979000000909090e981000000909090e989000000909090e991000000909090e9a3000000909090bbffffffff8b042483c800e856b9f9ff89c3b8e5000000e842b5f9ff8b5424200bc0ff12eb70b8bc767b418b54242083c800ff12eb65b8c8767b418b54242083c800ff12eb66b8d4767b418b54242083c800ff12eb56b8e0767b418b54242083c800ff12eb46b8ec767b418b54242083c800ff12eb36b8f8767b418b54242083c800ff12eb26b804777b418b54242083c800ff12eb16e911000000e90c000000b810777b418b54242090ff12b8590000008b54242090ff12b8010000008d5424280bc0e8f60f0000eb64b89c887941e832e4fdff8b1c245323d8f6c3015b7503ff55383bd87c58b81c777b4183c800e812e4fdff5323d8f6c3015b7503ff55383bd87f6ebb110000008b04240bc0ff15009f040883f8017502eb29a8017503ff553883f8017c0cba03000000eb0ae9120e0000ba0100000083fa037407eb09e93a00000089c2eb0ea8017503ff553889c283c21070f689d083c800e886a2fdff89c3b828777b41e8f2b3f9ff8b54241ceb05e90700000083c800ff12eb60b8c0887941e87ee3fdff5323d8f6c3015b7503ff55383bd87c5bb838777b410bc0e862e3fdff5323d8f6c3015b7503ff55383bd87f6ebb110000008b04240bc0ff15009f040883f8017502eb24a8017503ff553883f8017c0cba03000000eb0ae9610d0000ba0100000083fa037402eb0989c2eb13e936000000a8017503ff553889c283c21070f689d083c800e8d6a1fdff89c3b844777b41e842b3f9ff8b54241ceb05e90700000083c800ff12eb69b858427941e8cee2fdff530bd8f6c3015b7503ff55383bd8750eb850777b418b54241c90ff12eb74b8f8807941e8a6e2fdff530bd8f6c3015b7503ff55383bd8755f8b5424148b0a89cb8b44240c83c800e826d4fdffa8017503ff553883f8017c0cbf03000000eb0ae9a80c0000bf0100000083ff03750489c6eb0ea8017503ff553889c683ee0e70f6bb1100000089f083c800ff15e09e0408eb0ae9750c0000e97e000000bb1100000090ff15009f040883f8017502eb1fa8017503ff553883f8017c07bb03000000eb05bb0100000083fb037402eb0489c3eb0ea8017503ff553889c383c31070f653b85c777b418b542420ff12b8010000008d5424280bc0e88a0d0000b8590000008b54242090ff128b0424e89ea0fdff8b5424200bc0ff12eb69b86c777b41e8aae1fdff5323d8f6c3015b7503ff55383bd87c67b878777b410bc0e88ee1fdff5323d8f6c3015b7503ff55383bd87f5cb89c767b418b54241c90ff12b8010000008d5424240bc0e8ba110000bb110000008b04240bc0ff15009f040883f8017507eb2ee9810b0000a8017503ff553883f8017c0cba03000000eb0ae942000000ba0100000083fa037407eb09e93100000089c2eb0ea8017503ff553889c283c21070f689d00bc0e8e29ffdff89c3b859000000e84eb1f9ff8b54241c0bc0ff12eb70b8f8e37941e8e2e0fdff530bd8f6c3015b7503ff55383bd8753ab884777b418b54241c90ff12b8010000008d5424240bc0e86e0c0000b8590000008b54241c90ff12b8010000008d5424240bc0e8f2100000eb5cb82c5a7a41e88ee0fdff530bd8f6c3015b7503ff55383bd87547eb05e9b10a0000b898777b418b54241c0bc0ff12b8010000008d5424240bc0e8120c0000b8590000008b54241c90ff12b8010000008d5424240bc0e8ce0f0000eb71e9710a0000b854d3794183c800e82ae0fdff530bd8f6c3015b7503ff55383bd8751eb8ac777b418b54241c90ff12b8010000008d5424240bc0e856100000eb70b85cd37941e8f2dffdff530bd8f6c3015b7503ff55383bd87526b8ac777b418b54241c90ff12b8010000008d542424eb05e9000a000083c800e84e0f0000eb6db8d4117641e8b2dffdff530bd8f6c3015b7503ff55383bd875588b5424148b0a89cb8b44240c83c800e832d1fdffeb05e9c1090000a8017503ff553883f8017c07bf03000000eb05bf0100000083ff03750489c6eb0ea8017503ff553889c683ee0e70f6bb1100000089f0eb0ae984090000e99900000090ff15e09e0408bb1100000090ff15009f040883f8017502eb1fa8017503ff553883f8017c07bb03000000eb05bb0100000083fb037402eb0489c3eb0ea8017503ff553889c383c31070f683fb057507b8bc777b41eb1d83fb097507b8c8777b41eb1183fb0d7507b8d4777b41eb05b8e0777b418b54241c90ff12b8130000008b54241c90ff12b8010000008d5424240bc0e8660a0000eb71b88c877941e8a2defdff530bd8f6c3015b7503ff55383bd8755c8b5424148b0a89cb8b44240c83c800e822d0fdffa8017503ff553883f8017c07bf03000000eb05bf0100000083ff03750489c6eb0ea8017503ff553889c683ee0e70f6bb1100000089f0ff15e09e0408bb11000000eb0ae970080000e9d500000090ff15009f040883f8017502eb1fa8017503ff553883f8017c07bb03000000eb05bb0100000083fb037402eb0489c3eb0ea8017503ff553889c383c31070f683fb017507b8ec777b41eb4183fb077507b8fc777b41eb3583fb097507b808787b41eb2983fb0b7507b814787b41eb1d83fb0d7507b824787b41eb1183fb0f7507b830787b41eb05b8e0777b41538b542420ff12b8130000008b54242090ff12b8010000008d5424280bc0e83a0900008b1c2483fb01755fb8590000008b54242090ff12b8010000008d5424280bc0e8b60d0000eb74b878d37841e852ddfdff530bd8f6c3015b7503ff55383bd8755f8b5424148b0a89cb8b44240c83c800e8d2cefdffa8017503ff553883f8017c0cbf03000000eb0ae94d070000bf0100000083ff03750489c6eb0ea8017503ff553889c683ee0e70f6bb1100000089f083c800ff15e09e0408eb0ae91a070000e9aa000000bb1100000090ff15009f040883f8017502eb1fa8017503ff553883f8017c07bb03000000eb05bb0100000083fb037402eb0489c3eb0ea8017503ff553889c383c31070f683fb017507b840787b41eb1183fb077507b850787b41eb05b8e0777b41538b542420ff12b8130000008b54242090ff12b8010000008d5424280bc0e8120800008b1c2483fb01755fb8590000008b54242090ff12b8010000008d5424280bc0e8c60b0000eb74b85cd57941e82adcfdff530bd8f6c3015b7503ff55383bd8755f8b5424148b0a89cb8b44240c83c800e8aacdfdffa8017503ff553883f8017c0cbf03000000eb0ae925060000bf0100000083ff03750489c6eb0ea8017503ff553889c683ee0e70f6bb1100000089f083c800ff15e09e0408eb0ae9f2050000e9ae000000bb1100000090ff15009f040883f8017502eb1fa8017503ff553883f8017c07bb03000000eb05bb0100000083fb037402eb0489c3eb0ea8017503ff553889c383c31070f683fb097507b85c787b41eb1d83fb0b7507b868787b41eb1183fb0f7507b874787b41eb05b8e0777b418b54241c90ff12b8130000008b54241c90ff12b8010000008d5424240bc0e8de060000b8590000008b54241c90ff12b8010000008d5424240bc0e89a0a0000eb71b8e8807941e8fedafdff530bd8f6c3015b7503ff55383bd8755c8b5424148b0a89cb8b44240c83c800e87eccfdffa8017503ff553883f8017c07bf03000000eb05bf0100000083ff03750489c6eb0ea8017503ff553889c683ee0e70f6bb1100000089f0ff15e09e0408bb11000000eb0ae9c8040000e98100000090ff15009f040883f8017502eb1fa8017503ff553883f8017c07bb03000000eb05bb0100000083fb037402eb0489c3eb0ea8017503ff553889c383c31070f683fb0b7507b868787b41eb1183fb0f7507b874787b41eb05b8e0777b418b54241c90ff12b880787b418b54241c90ff12b8010000008d5424240bc0e8c6050000eb71b808cd7441e802dafdff530bd8f6c3015b7503ff55383bd8755c8b5424148b0a89cb8b44240c83c800e882cbfdff8b7c24148b37f7c6010000007503ff553889f383c30270f6891f81f86d01000075698b1789d38b44240c90e852cbfdffa8017503ff553883f8017c11b903000000eb0fe9cc030000e995020000b90100000083f903750489c7eb0ea8017503ff553889c783ef0e70f6bb1100000089f80bc0ff15e09e0408bb1100000090ff15009f040883f8017507eb24e96e000000a8017503ff553883f8017c07be03000000eb05be0100000083fe037402eb0489c6eb0ea8017503ff553889c683c61070f656b88c787b418b54242083c800ff12b8010000008d5424280bc0e8b6040000b8590000008b54242090ff128b0424e8ca97fdff8b5424200bc0ff12eb71a8017503ff553881f8010100007c67a8017503ff553881f81f0100007f5d8b17508b5c241089d00bc0e81ed7fdff8b4c24188b39f7c7010000007503ff553889fe83c60870f689318b1c24f7c301000000742f81fb010100007c2c81fb1f0100007f29ba126a7b418d949afcfbffffeb0fe99d020000e93d010000e938010000ffe2e98b000000e986000000e98100000090e984000000909090e973000000909090e9b3000000909090e9b4000000909090e96d000000909090e96e000000909090e9a5000000909090e9a6000000909090e93b000000909090e933000000909090e92b000000909090e923000000909090e93f000000909090e940000000909090e941000000909090e94200000090909089c7b89c787b41eb6189c7b814767b41eb5889c7b81c757b41eb4f89c7b808767b41eb4689c7b820767b41eb3d89c7b844767b41eb3489c7b838767b41eb2b89c7b82c767b41eb2289c7b850767b41eb1989c7b874767b41eb1089c7b868767b41eb0789c7b85c767b41578b54242483c800ff128b74241c8b1e8b142489d923caf6c1017503ff55388d4bff03ca70f6bb0300000089c8e892abf9ff8b5424240bc0ff12eb2750b8a8787b418b5424200bc0ff12bb030000008b042483c800e86aabf9ff8b5424200bc0ff125083c404eb60b8f4077641e8f2d6fdff530bd8f6c3015b7503ff55383bd8751eb844777b418b54241c90ff12b8010000008d5424240bc0e87e020000eb58b8cca97941e8bad6fdff530bd8f6c3015b7503ff55383bd87513b8b4787b418b54241c90ff12eb70e9ca000000b8c0787b4183c800e88ad6fdff530bd8f6c3015b7503ff55383bd87513b8c8787b418b54241c90ff12eb6de999000000b8d4a9794183c800e85ad6fdff530bd8f6c3015b7503ff55383bd87523b8d4787b418b54241c90ff12b8010000008d5424240bc0e8ae0c0000eb5ee959000000b88487794183c800e81ad6fdff530bd8f6c3015b7503ff55383bd87526b8f8797b418b54241ceb05e92c0000000bc0ff12b8010000008d5424240bc0e876050000eb16bb030000008b042490e836aaf9ff8b54241c0bc0ff125083c4045083c4045083c4045083c40483c40450b8150000008b54241c90ff1283c4043b650c7303ff5524e9f4e5ffffb8150000008b5424188b7c242083c42857ff2283c800|@4006,63|38,0,0 61,0,I48 70,0,I24 80,0,63 103,0,@3921 143,0,1 150,1,@336 163,0,9 190,1,@3006 220,0,@3072 226,1,@3038 254,0,@408 262,1,@3038 294,1,@3006 311,0,1 318,0,0 346,0,8 354,0,I109 359,0,8 366,0,I110 395,0,1 402,0,0 434,1,@3922 439,0,@3931 451,0,0 462,1,@3932 467,0,44 479,0,@3072 486,1,@3038 510,0,0 522,1,@3933 529,0,0 538,1,@3935 545,0,@3230 550,1,@3038 571,0,@3944 583,0,0 594,1,@3945 601,0,@3114 606,1,@3038 627,0,@3947 651,0,0 662,1,@3945 669,0,@3119 674,1,@3038 695,0,@3948 707,0,0 726,1,@3945 733,0,@3528 738,1,@3038 759,0,@3949 771,0,0 790,1,@3945 797,0,@3529 802,1,@3038 823,0,@3950 835,0,0 854,1,@3945 861,0,@3833 866,1,@3038 887,0,@3951 899,0,0 918,1,@3945 925,0,@3830 930,1,@3038 951,0,@3952 963,0,0 982,1,@3945 989,0,@3837 994,1,@3038 1015,0,@3953 1027,0,0 1046,1,@3945 1053,0,@3841 1058,1,@3038 1079,0,@3954 1091,0,0 1110,1,@3945 1117,0,@3839 1122,1,@3038 1143,0,@3955 1155,0,0 1174,1,@3945 1181,0,@3265 1186,1,@3038 1207,0,@3956 1219,0,0 1238,1,@3945 1245,0,@3051 1250,1,@3038 1271,0,@3957 1283,0,0 1302,1,@3945 1309,0,@3059 1314,1,@3038 1342,1,@3035 1381,0,@3957 1438,0,1 1446,1,@336 1461,0,@202 1466,1,@3038 1494,1,@3035 1526,0,@3958 1570,0,1 1590,1,@336 1605,0,@1226 1610,1,@3038 1642,1,@3006 1659,0,1 1666,0,0 1694,0,8 1702,0,I109 1707,0,8 1726,0,I110 1750,0,1 1757,0,0 1788,0,@3959 1799,0,0 1810,1,@3932 1815,0,44 1830,1,@2903 1846,0,8 1854,0,I110 1878,0,1 1885,0,0 1950,1,@3006 1974,0,1 1981,0,0 2009,0,8 2018,0,I109 2023,0,8 2042,0,I110 2066,0,1 2073,0,0 2118,0,1 2125,0,0 2154,0,8 2162,0,I109 2167,0,8 2174,0,I110 2198,0,1 2205,0,0 2238,1,@3922 2243,0,9 2255,0,0 2266,1,@3932 2271,0,44 2286,1,@2903 2301,0,@3104 2306,1,@3038 2342,1,@3006 2359,0,1 2366,0,0 2394,0,8 2402,0,I109 2407,0,8 2426,0,I110 2450,0,1 2457,0,0 2488,0,@3959 2502,1,@2903 2515,0,44 2527,0,0 2538,1,@3932 2545,0,@3108 2550,1,@3038 2586,1,@3006 2603,0,1 2610,0,0 2638,0,8 2646,0,I109 2651,0,8 2670,0,I110 2694,0,1 2701,0,0 2732,0,@3960 2764,0,$3920+2774 2839,0,-1 2850,1,@336 2857,0,114 2862,1,@323 2877,0,@3961 2893,0,@3962 2909,0,@3963 2925,0,@3964 2941,0,@3965 2957,0,@3966 2973,0,@3967 2999,0,@3968 3011,0,44 3023,0,0 3034,1,@3932 3041,0,@3121 3046,1,@3038 3070,0,@3969 3078,1,@3038 3099,0,8 3110,0,I110 3134,0,1 3146,0,0 3186,1,@2903 3193,0,@3970 3198,1,@323 3221,0,@3124 3226,1,@3038 3247,0,@3971 3254,1,@3038 3275,0,8 3286,0,I110 3310,0,1 3322,0,0 3362,1,@2903 3369,0,@3972 3374,1,@323 3397,0,@3037 3402,1,@3038 3423,0,@3973 3437,0,@3109 3442,1,@3038 3478,1,@3006 3495,0,1 3507,0,0 3535,0,8 3546,0,I109 3563,0,8 3570,0,I110 3594,0,1 3601,0,0 3632,0,@3974 3643,0,0 3654,1,@3932 3659,0,44 3674,1,@2903 3689,0,@3975 3694,1,@3038 3715,0,@3976 3722,1,@3038 3743,0,@3959 3755,0,0 3766,1,@3935 3771,0,8 3782,0,I110 3811,0,1 3823,0,0 3862,1,@2903 3869,0,44 3874,1,@323 3889,0,@3266 3894,1,@3038 3915,0,@3977 3927,0,0 3938,1,@3932 3943,0,44 3955,0,0 3966,1,@3935 3973,0,@3478 3978,1,@3038 4006,0,@3978 4019,0,0 4030,1,@3932 4035,0,44 4047,0,0 4058,1,@3933 4070,0,@3218 4078,1,@3038 4099,0,@3979 4111,0,0 4122,1,@3935 4129,0,@3219 4134,1,@3038 4155,0,@3979 4167,0,0 4186,1,@3933 4193,0,@1251 4198,1,@3038 4234,1,@3006 4258,0,1 4265,0,0 4293,0,8 4314,0,I109 4319,0,8 4326,0,I110 4350,0,1 4357,0,0 4392,0,@3980 4404,0,@3981 4416,0,@3982 4423,0,@3983 4435,0,9 4447,0,0 4458,1,@3932 4465,0,@3113 4470,1,@3038 4506,1,@3006 4523,0,1 4530,0,0 4558,0,8 4566,0,I109 4571,0,8 4590,0,I110 4614,0,1 4621,0,0 4656,0,@3984 4668,0,@3985 4680,0,@3986 4692,0,@3987 4704,0,@3988 4716,0,@3989 4723,0,@3983 4735,0,9 4747,0,0 4758,1,@3932 4771,0,44 4783,0,0 4794,1,@3935 4801,0,@2827 4806,1,@3038 4842,1,@3006 4859,0,1 4871,0,0 4899,0,8 4910,0,I109 4927,0,8 4934,0,I110 4958,0,1 4965,0,0 5000,0,@3990 5012,0,@3991 5019,0,@3983 5031,0,9 5043,0,0 5054,1,@3932 5067,0,44 5079,0,0 5090,1,@3933 5097,0,@3222 5102,1,@3038 5138,1,@3006 5155,0,1 5167,0,0 5195,0,8 5206,0,I109 5223,0,8 5230,0,I110 5254,0,1 5261,0,0 5296,0,@3992 5308,0,@3993 5320,0,@3994 5327,0,@3983 5339,0,9 5351,0,0 5362,1,@3932 5367,0,44 5379,0,0 5390,1,@3933 5397,0,@3107 5402,1,@3038 5438,1,@3006 5455,0,1 5462,0,0 5490,0,8 5498,0,I109 5503,0,8 5522,0,I110 5546,0,1 5553,0,0 5588,0,@3993 5600,0,@3994 5607,0,@3983 5619,0,@3995 5631,0,0 5642,1,@3932 5649,0,@207 5654,1,@3038 5690,1,@3006 5738,1,@3006 5755,0,1 5772,0,0 5800,0,8 5810,0,I109 5815,0,8 5822,0,I110 5851,0,1 5858,0,0 5889,0,@3996 5903,0,0 5914,1,@3932 5919,0,44 5934,1,@2903 5990,1,@3035 6048,0,$3920+6094 6225,0,@3997 6234,0,@3948 6243,0,@3944 6252,0,@3947 6261,0,@3949 6270,0,@3952 6279,0,@3951 6288,0,@3950 6297,0,@3953 6306,0,@3956 6315,0,@3955 6324,0,@3954 6367,0,1 6374,1,@336 6390,0,@3998 6403,0,1 6414,1,@336 6433,0,@1219 6438,1,@3038 6459,0,@3972 6471,0,0 6482,1,@3932 6489,0,@3195 6494,1,@3038 6515,0,@3999 6534,0,@4000 6542,1,@3038 6563,0,@4001 6582,0,@3196 6590,1,@3038 6611,0,@4002 6623,0,0 6634,1,@4003 6646,0,@3112 6654,1,@3038 6675,0,@4005 6695,0,0 6706,1,@3933 6713,0,1 6722,1,@336 6755,0,10 6783,0,10 3921:S2|3a0a 3922:C2,104|3b650c7303ff552483f8017507b8846d7b41eb4d83f8037507b8906d7b41eb4183f8057507b89c6d7b41eb3583f8077507b8a86d7b41eb2983f8097507b8347a7541eb1d83f80b7507b8b46d7b41eb1183f80d7507b8c06d7b41eb05b8cc6d7b418b52f8ff220bc0|@3930,63|14,0,@3923 26,0,@3924 38,0,@3925 50,0,@3926 62,0,@838 74,0,@3927 86,0,@3928 93,0,@3929 3923:S3|616464 3924:S2|6f72 3925:S3|616463 3926:S3|736262 3927:S3|737562 3928:S3|786f72 3929:S3|636d70 3930:S40|49333836434f4445434f4e5328292e7072696e74436f64652833297072696e744172697468283129 3931:S5|5f72657609 3932:C2,956|3b650c7303ff55248b42f08b385289fb8b42e80bc0e8d2c5fdff8b34248b5ef08b13f6c2017503ff553889d183c10270f6890ba8017503ff553883f8017c07bf03000000eb05bf0100000083ff03750489c2eb0ea8017503ff553889c283ea7e70f650bb8100000089d00bc0ff15e09e040850bb110000008b442404ff15009f040883f8017502eb1fa8017503ff553883f8017c07b903000000eb05b90100000083f9037402eb0489c1eb0ea8017503ff553889c183c11070f68b042483f80775188b7c2408ff77f889c80bc0e85692fdff8b142483c410ff2283f90975718b7c24088b77f08b1e8b47e80bc0e8fac4fdff8b5424088b4af08b39f7c7010000007503ff553889fe83c60270f68931a8017503ff553883f8017c07bb03000000eb05bb0100000083fb03750489c7eb0ea8017503ff553889c783ef7e70f650bb8100000089f80bc0ff15e09e0408eb05e9c90100008b3424f7c6010000007503ff553883fe017c07bb03000000eb05bb0100000083fb03750489f2eb12f7c6010000007503ff553889f283ea0e70f650bb1100000089d090ff15e09e0408bb1100000090ff15009f040883f8017502eb1fa8017503ff553883f8017c07b903000000eb05b90100000083f9037402eb0489c1eb0ea8017503ff553889c183c11070f651bb110000008b442408ff15009f040883f8017502eb1fa8017503ff553883f8017c07b903000000eb05b90100000083f9037402eb0489c1eb0ea8017503ff553889c183c11070f68b44240c83f803751151b8010000008b542418e896010000eb2183f8057502eb0783f90b7402eb1251b8010000008b54241890e83e020000eb01518b7c2418b8510000008b57f883c800ff128b74241083fe017402eb0a8b1c2483fb0b7502eb1d8b5c2418ff73f88b44240483c800e88a90fdff8b142483c800ff12eb01508b54240883fa09745a8b4c241cff71f889d00bc0e86690fdff89c3b859000000e8d2a1f9ff8b74241083fe017507bfbc747b41eb1d83fe037507bfc8747b41eb1183fe057507bfd4747b41eb05bfe0747b4189fbe89ea1f9ff8b142483c800ff12eb01508b4c2420b8530000008b51f883c424ff2283f801753483f90b752f8b7c2408b8510000008b57f8ff12b8010000008b5424080bc0e85a0100008b742408b8530000008b56f883c40cff2283f803751451b8010000008b54240c83c800e86a000000eb1983f805751351b8010000008b54240c0bc0e81a010000eb01518b7c240cff77f88b44240490e88e8ffdff89c3b851000000e8faa0f9ffbb530000000bc0e8eea0f9ff8b142483c414ff220bc0|@3943,63|22,1,@3006 64,0,1 71,0,0 100,0,64 110,0,I109 116,0,8 126,0,I110 150,0,1 157,0,0 206,1,@2903 238,1,@3006 284,0,1 291,0,0 320,0,64 330,0,I109 361,0,1 368,0,0 401,0,8 410,0,I109 415,0,8 422,0,I110 446,0,1 453,0,0 484,0,8 494,0,I110 518,0,1 525,0,0 565,0,0 574,1,@3933 596,0,0 606,1,@3935 618,0,40 666,1,@2903 702,1,@2903 709,0,44 714,1,@323 728,0,@3939 740,0,@3940 752,0,@3941 759,0,@3942 766,1,@323 786,0,41 813,0,40 823,0,0 834,1,@3935 843,0,41 862,0,0 874,1,@3933 887,0,0 898,1,@3935 918,1,@2903 925,0,40 930,1,@323 935,0,41 942,1,@323 3933:C2,128|3b650c7303ff55248b42f08b385289fb8b42e80bc0e8fac1fdffa8017503ff553881f8010100007c22a8017503ff553889c381ebfe01000070f3f6c3017503ff553889de83ee0270f6eb0289c68b1c248b53f08b0af6c1017503ff553889c883c00270f68902ff73f8bb0300000089f090e85aa4f9ff8b142483c408ff220bc0|@3934,63|22,1,@3006 106,0,1 114,1,@336 3934:S36|49333836434f4445434f4e5328292e7072696e74436f64652833297072696e7438283129 3935:C2,132|3b650c7303ff55248b42f08b38528b5ae889f80bc0e8facdfdff8b34248b5ef08b13f6c2017503ff553889d183c10870f6890b83f80375328b7eec8b1783fa0174288b0bf6c1017503ff553889ca83ea0870f650528b4efc8b018d54240c83c800e83a00000083c40cc3ff76f8bb0300000083c800e88ea3f9ff8b142483c408ff220bc0|@3938,63|22,1,@3035 98,1,@3936 110,0,1 118,1,@336 3936:C2,224|3b650c7303ff552483f801751d8b7afcff77f8bb030000008b42f80bc0e846a3f9ff8b142483c404ff228b388b378b1e83fb0175718b4e048b5afc8b73f48b1ebe0900000052ff7114ff7704ff7004ff72f4535689d823c6a8017503ff55385289dad1fa8d46fff7ea8d40015a70ed8b7c241089fe23f0f7c6010000007503ff55388d77ff03f070f68b5c2408530bdef6c3015b7503ff55383bde75298b5424188b4afceb05e92b000000ff71f88b5c2418b87b0000000bc0e8a29ef9ff8b142483c420ff228b44240c8b54241883c41ce92affffff8b4004e922ffffff0bc0|@3937,63|20,0,1 30,1,@336 65,0,4 179,0,61 186,1,@323 3937:S47|49333836434f4445434f4e5328292e7072696e74436f64652833297072696e74333228312966696e64526566283129 3938:S37|49333836434f4445434f4e5328292e7072696e74436f64652833297072696e743332283129 3939:S2|2c31 3940:S2|2c32 3941:S2|2c34 3942:S2|2c38 3943:S37|49333836434f4445434f4e5328292e7072696e74436f64652833297072696e744541283129 3944:S3|6a6509 3945:C2,148|3b650c7303ff55248b42f08b385289fb8b42e80bc0e8c2befdffa8017503ff553881f8010100007c22a8017503ff553889c381ebfe01000070f3f6c3017503ff553889de83ee0270f6eb0289c68b1c248b53f08b0af6c1017503ff553889c883c00270f689028b3a89f123cff6c1017503ff55388d4eff03cf70f6ff73f8bb0300000089c8e80ea1f9ff8b142483c408ff220bc0|@3946,63|22,1,@3006 127,0,1 134,1,@336 3946:S38|49333836434f4445434f4e5328292e7072696e74436f64652833297072696e744a6d70283129 3947:S4|6a6e6509 3948:S3|6a6f09 3949:S3|6a6c09 3950:S3|6a6709 3951:S4|6a6c6509 3952:S4|6a676509 3953:S3|6a6209 3954:S3|6a6109 3955:S4|6a6e6109 3956:S4|6a6e6209 3957:S4|6a6d7009 3958:S5|63616c6c09 3959:S5|6d6f766c09 3960:S5|6d6f766209 3961:S3|25616c 3962:S3|25636c 3963:S3|25646c 3964:S3|25626c 3965:S3|256168 3966:S3|256368 3967:S3|256468 3968:S3|256268 3969:O2|-18,7 3970:S6|707573686c09 3971:O2|16,7 3972:S4|706f7009 3973:S3|6e6f70 3974:S5|6c65616c09 3975:O2|-14,0 3976:O2|-14,7 3977:S9|6d6f766c5f72657609 3978:S9|6d6f76625f72657609 3979:S5|7075736809 3980:S4|63616c6c 3981:S3|6a6d70 3982:S4|70757368 3983:S3|3f3f3f 3984:S5|746573746c 3985:S4|6e65676c 3986:S4|6d756c6c 3987:S5|696d756c6c 3988:S4|6469766c 3989:S5|696469766c 3990:S5|7465737462 3991:S4|6e656762 3992:S3|73686c 3993:S3|736872 3994:S3|736172 3995:S3|09312c 3996:S6|6d6f767a6c09 3997:S4|3f3f3f09 3998:S4|65736309 3999:S3|726574 4000:O1|19 4001:S3|737463 4002:S4|72657409 4003:C2,204|3b650c7303ff55248b42f08b385257ff72e889fb8b04240bc0e806bbfdff8b742404f7c6010000007503ff553889f383c30270f6508b442404e8e6bafdffa8017503ff553881f8010100007c13a8017503ff553889c281ea0002000070f3eb0289c2b90102000089d023c1a8017503ff553852d1fa8d41fff7ea8d40015a70ef8b3c2489c623f7f7c6010000007503ff55388d70ff03f770f68b5c240c8b53f08b0af6c1017503ff553889c883c00470f68902ff73f8bb0300000089f0e81e9df9ff8b142483c414ff220bc0|@4004,63|26,1,@3006 58,1,@3006 99,0,256 183,0,1 190,1,@336 4004:S37|49333836434f4445434f4e5328292e7072696e74436f64652833297072696e743136283129 4005:S10|74657374620925616c2c 4006:S27|49333836434f4445434f4e5328292e7072696e74436f6465283329 4007:S16|526567697374657220736574203d205b 4008:S3|5d0a0a 4009:S26|49333836434f4445434f4e5328292e636f7079436f6465283329 4010:S20|475f434f444528292e636f646567656e28313029 4011:C2,4|8b4204c3|@4012,5| 4012:S22|475f434f444528292e67656e636f6465283229283129 4013:S11|3c746f70206c6576656c3e 4014:O1|@4015 4015:C2,16|b81c7b7b410bc0ff552cb80100000090|@2939,1|1,0,@4016 11,0,0 4016:O3|@7320,@224,@4017 4017:S17|746f70206c6576656c2072656163686564 4018:O1|@4019 4019:C2,8|b801000000c30bc0|@2939,1|1,0,0 4020:O1|@4021 4021:C2,16|b8180c79410bc0ff552cb80100000090|@2939,1|1,0,@2944 11,0,0 4022:O1|@4023 4023:C2,16|b8180c79410bc0ff552cb80100000090|@2939,1|1,0,@2944 11,0,0 4024:C2,44|8b45008d40f43b45087303ff5520894500c740fc02000000c74004010000008b7a048938ff25c0aa04080bc0|@4012,63|27,0,0 38,0,I204 4025:S19|475f434f444528292e67656e636f6465283229 4026:S40|434f44455452454528292e67656e436f6465283229636f646547656e416e645072696e742d283129 4027:C2,16|3b650c7303ff55248b5a04e9bc77fdff|@4026,63|12,1,@2876 4028:C2,152|3b650c7303ff55248b3383feff75088b4b048b7908eb0d83fe0375058b7b08eb038b7b048b0f83f9f7752d8b75008d76f83b75087303ff5520897500c746fc01000000891e525053568b5f048b42080bc0e8327efdffeb035250538b4424088b7d008d7ff83b7d087303ff5520897d00c747fc010000008b342489378b5c240c897c240c89da8b5c24048b400483c40c52e9f27dfdff0bc0|@4029,63|82,1,@2889 146,1,@2889 4029:S45|434f44455452454528292e67656e436f6465283229696e736572746564436f64652d656e746572446563283229 4030:C2,188|3b650c7303ff55248b7a1083ff0174705050505050505052508d742408568b5a0cb89b00000083c800e8b665f9ff8b5d008d5be03b5d087303ff5520895d00c743fc070000008b54240889138b4c240c894b048b4424108943088b7c2414897b0c8b7424188973108b74241c8973148b5424208953188b0424ba0c037541eb05e907000000e81285f9ffeb095050505050505052508b7424048b1c248b46048b56080bc0ff128b5c24048b530489c389d083c424e91f00000083c800|@4042,63|34,0,77 42,1,@255 122,0,@313 134,1,@315 181,1,@4031 4031:C2,528|3b650c7303ff55248b3b83fffb750389d8c383ff0975705053ff73048b5b080bc0e8daffffff8b1883fbed750483c40cc383fbfb75358b7804f7c701000000740eb88c807b4190ff552cba01000000f7c7010000007410b8c020754183c800ff552cba0100000089faeb10b8c4807b4183c800ff552cba01000000528b74240483fe01756beb05e906010000ff7504b9567f7b41516a018965048b45008d40f43b45087303ff5520894500c740fc02000000c7400401000000891090ff15c0aa040889c78b45008d40f43b45087303ff5520894500c740fc02000000897804c700fbffffffff7424088f450483c41cc3e929000000908b3083fe037519b870ae744190ff552cb801000000eb09b80100000083c410c38b44240883c410c3ba0100000083fe01750489d1eb23f6c2017503ff553889d083c00270f68b760489c23b650c7303ff5524ebd9b901000000f7c101000000740489c8eb10b89420754183c800ff552cb8010000006a01bb810000000bc0ff15a0920408508b5c2408b8010000008d54241490e80e01000083c410c35389c689d889f283c800ff12ff7504bb46807b41536a0189650489c2b80100000090ff1289c18b45008d40f43b45087303ff5520894500c740fc02000000894804c700fbffffffff7424088f450483c410c30bc08b3883ff037519b870ae744190ff552cb801000000eb09b80100000083c404c38b042483c404c383c800|@4041,63|66,0,@4032 75,0,0 88,0,@372 99,0,0 108,0,@4034 119,0,0 144,0,$4031+246 181,0,0 190,0,I204 225,0,-3 254,0,@54 263,0,0 270,0,0 287,0,0 331,0,0 348,0,@369 359,0,0 366,0,64 374,0,I11 384,0,0 394,1,@4036 418,0,$4031+486 431,0,0 469,0,-3 494,0,@54 503,0,0 510,0,0 4032:O3|@7320,@224,@4033 4033:S30|436f64652061646472657373206973206e6f7420616e2061646472657373 4034:O3|@7320,@224,@4035 4035:S30|436f64652061646472657373206973206e6f74206120636f6e7374616e74 4036:C2,328|3b650c7303ff552483fb01757289d38b44240490ff152097040853ff7504ba8a817b41526a018965048b45008d40f43b45087303ff5520894500c740fc020000008b4c24148948048b7bf0893883c800ff15c0aa040889c68b45008d40f43b45087303ff5520894500c740fc02000000897004c700fbffffffff742408eb05e9380000008f450483c410c20400908b1883fb03751bb870ae744190ff552cb801000000eb0bb80100000083c404c204008b14248b42f883c404c204005250ff73048b1b8b42fcba60827b4190ff128b3883ffed750683c40cc2040083fffb75598b742404f7c601000000740489f3eb158b5804b89420754183c800ff552c89dabb010000008b5424108b4804894c5afef7c6010000007503ff553889f383c30270f68954241089de8b1c2489f08b54240883c40ce9c7feffffb868827b4190ff552cb80100000090|@4040,63|22,0,I47 31,0,$4036+142 82,0,I204 117,0,-3 150,0,@54 159,0,0 166,0,0 199,0,@4037 244,0,@369 257,0,0 314,0,@4038 323,0,0 4037:O1|@4031 4038:O3|@7320,@224,@4039 4039:S36|526573756c74206f66206576616c75617465206973206e6f74206120636f6e7374616e74 4040:S33|434f44455452454528292e6576616c756174652832296c6f616441726773283329 4041:S22|434f44455452454528292e6576616c75617465283229 4042:S41|434f44455452454528292e67656e436f6465283229696e736572746564436f64652d6576616c283129 4043:C2,176|3b650c7303ff55248b780883ff0175738b30ff7004ff368b1c248b4204e83ea6f9ff83f80175618b5d008d5be83b5d087303ff5520895d00c743fc05000000c74310010000008b54240489530cc74308030000008b0c24894b04c703f7ffffff8b45008d40f43b45087303ff5520894500c740fc02000000895804c70001000000eb0ae917000000e90400000083c408c38b188b44240483c408e9a94bf9ffb8f0837b4183c800ff552cb80100000090|@4046,63|30,1,@435 66,0,0 80,0,1 92,0,-5 125,0,0 155,1,@225 160,0,@4044 171,0,0 4044:O3|@7320,@224,@4045 4045:S36|6f75746572206c6576656c207265616368656420696e206c6f6f6b75704e657741646472 4046:S50|434f44455452454528292e67656e436f6465283229696e736572746564436f64652d6c6f6f6b75704e657741646472283129 4047:C2,20|3b650c7303ff55248b58048b008b5204ff220bc0|@4048,63| 4048:S45|434f44455452454528292e67656e436f6465283229696e736572746564436f64652d656e746572446563283129 4049:C2,56|3b650c7303ff55248b7d008d7ff83b7d087303ff5520897d00c747fc010000008b700489378b1c24893c2489d98b188b420451e91c76fdff|@4050,63|52,1,@2889 4050:S48|434f44455452454528292e67656e436f6465283229696e736572746564436f64652d656e7465724e6577446563283129 4051:C2,216|3b650c7303ff55248b188b1383fa017506b801000000c38b4b048b3983ff017507be60970408eb66505157ff7504beb2857b41566a018965046a01bb0100000089f80bc0ff15a092040889c6ff7424088f4504eb0e90b8d4b67441ff552cbe0100000056566a01ff742418bb030000008b442420ff15a0a904088b042483c800ff15209704088b342483c418eb01508b5d008d5bf43b5d087303ff5520895d00c743fc02000000897304c703010000008b1424891af7c201000000740eb8c020754190ff552cb80100000089d083c404ff25209704080bc0|@4052,63|18,0,0 34,0,I49 47,0,$4051+86 60,0,0 70,0,I11 87,0,@78 95,0,0 108,0,1 118,0,I195 130,0,I47 172,0,0 190,0,@372 199,0,0 210,0,I47 4052:S22|5374726574636841727261792e667265657a65283229 4053:C2,20|3b650c7303ff55248b58048b00e91e0000000bc0|@4056,63|14,1,@4054 4054:C2,616|3b650c7303ff55243bc37506b803000000c3f7c0010000007406b801000000c3f7c3010000007406b801000000c38b78fc81e7ffffff008d7c3f018b73fc81e6ffffff008d7436013bfe7406b801000000c30fb670ff8d7436010fb653ff8d54120189f10bca89ce81e68100000083fe017406b801000000c389ca83e20383fa01745ef7c7010000007503ff553883ff017d1abe2ccb744189f123cff6c1017503ff55388d4eff03cf70f6eb0289f9bf0900000089ce23f7f7c6010000007503ff5538505289cad1fa8d47fff7ea8d70015a5870ebf7c601000000740989f2eb13e96b000000f646ff108b167402f7da8d541201505352b9010000008b04243bc87509b80300000083c40cc38b7c240889ced1ee0fb634378d7436018b5c240489cad1ea0fb614138d5412013bf275188d410289c13b650c7303ff5524ebbdb80100000083c40cc3b80100000083c40cc383ff03750d8b088b0389c389c8e99dfeffff83ff05755c8b088b78048b338b5304f7c10100000074133bce750989d389f8e979feffffb801000000c3f7c6010000007406b801000000c3f7c70100000074133bfa750989f389c8e950feffffb801000000c3f7c201000000740bb801000000c3e92a000000575289f389c80bc0e82afeffff83f801740f8b1c248b44240483c408e916feffffb80100000083c408c38d4ffe505383f9017507b803000000eb418b7c24048b744ffe8b1c248b544bfe5189d389f090e8e2fdffff83f801741a8b0c248d41fe89c183c4043b650c7303ff5524ebc0b801000000b80100000083c40483f80174158b4c24048b018b3c248b3789f383c408e9a1fdffffb80100000083c408c3|@4055,63|13,0,1 27,0,0 41,0,0 77,0,0 116,0,0 148,0,@176 176,0,4 248,0,0 260,0,1 320,0,0 329,0,0 392,0,0 406,0,0 433,0,0 447,0,0 491,0,0 510,0,1 569,0,0 574,0,0 608,0,0 4055:S32|537472756374757265457175616c6974792e7374727563747572654571283229 4056:S32|537472756374757265457175616c6974792e7374727563747572654571283129 4057:C2,68|3b650c7303ff552483f80175048b42a4c352ff308b40040bc0e8e2ffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0424890289d083c408c3|@1462,5| 4058:C2,188|f7c001000000755e8b780483ff01755b8b308b1e83fbf9752489c28b45008d40f43b45087303ff5520894500c740fc02000000895004c70013000000c383fbef752e89c28b45008d40f43b45087303ff5520894500c740fc02000000895004c70013000000c3e92c000000e9030000008b00c389c68b45008d40f43b45087303ff5520894500c740fc02000000897004c70013000000c389c78b45008d40f43b45087303ff5520894500c740fc02000000897804c70013000000c390|@4059,61|56,0,9 97,0,9 146,0,9 182,0,9 4059:S21|434f44455452454528292e77726170456e76283129 4060:C2,4|8b4204c3|@4061,5| 4061:S24|434f44455452454528292e67656e436f6465283229283129 4062:C2,120|3b650c7303ff5524b8010000008b5204ff128b7d008d7ff43b7d087303ff5520897d00c747fc02000000894704c707fbffffff8b75008d76f43b75087303ff5520897500c746fc02000000897e04c706010000008b45008d40f43b45087303ff5520894500c740fc02000000897004c7000b000000c30bc0|@4061,63|9,0,0 47,0,-3 80,0,0 113,0,5 4063:C2,40|8b45008d40f43b45087303ff5520894500c740fc020000008b7a04897804c7000b000000c383c800|@4061,37|32,0,5 4064:C2,148|3b650c7303ff552483f8017506b801000000c38b388b3783feef753aff70048b470483c800e8d6ffffff508b4424040bc0e8caffffff83f80175078b042483c408c3508b4424048d54240c0bc0e85e00000083c40cc383fef97531578b40040bc0e89affffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0424890289d083c404c38b4004e96cffffff|@4066,53|14,0,0 78,1,@4065 4065:C2,68|3b650c7303ff552483f80175048b42f4c352ff308b40040bc0e8e2ffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0424890289d083c408c3|@1462,5| 4066:S36|434f44455452454528292e67656e436f6465283229657870616e644d757475616c283129 4067:C2,160|3b650c7303ff552483fb017506b801000000c38b3b8b3783fef9756a8b57045223d0f6c2015a7503ff55383bd07d058b5b04ebcc505389d88d54240890e87a0000008b4c2404f6c1017503ff553889cf83c70270f6508b5c240489f890e89effffff8b75008d76f43b75087303ff5520897500c746fc020000008946048b1c24891e89f0eb05e90400000083c40cc3b8548f7b4183c800ff552cb80100000090|@4074,63|14,0,0 62,1,@4068 144,0,@4072 155,0,0 4068:C2,244|3b650c7303ff552483f8017506b89c317541c38b388b3783fef975718b5f048b4afc530bd9f6c3015b7503ff55383bd974058b4004ebc98b47088b3083fe07756b8b5d008d5be83b5d087303ff5520895d00c743fc05000000c7431001000000c7430c01000000c7430803000000894b04c703f7ffffffff70048b45008d40f03b45087303ff5520894500eb05e951000000c740fc030000008b3c24897808895804c7001700000083c404c38b45008d40e83b45087303ff5520894500c740fc05000000c7401001000000c7400c01000000c7400803000000894804c700f7ffffffc3b8ec8e7b4183c800ff552cb80100000090|@4071,63|14,0,@487 92,0,0 99,0,0 106,0,1 115,0,-5 164,0,11 199,0,0 206,0,0 213,0,1 222,0,-5 228,0,@4069 239,0,0 4069:O3|@7320,@224,@4070 4070:S21|66696e64456e7472793a206e6f74204465636c6172 4071:S45|434f44455452454528292e67656e436f646528322967657456616c75657328322966696e64456e747279283129 4072:O3|@7320,@224,@4073 4073:S23|67657456616c7565733a206e6f742061204465636c6172 4074:S33|434f44455452454528292e67656e436f646528322967657456616c756573283229 4075:C2,68|3b650c7303ff552483f80175048b42a0c352ff308b40040bc0e8e2ffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0424890289d083c408c3|@1462,5| 4076:C2,408|3b650c7303ff552452b8010000008b520c83c800ff12f7c001000000740db8c4917b41ff552cbf01000000f7c0010000007410b8c020754183c800ff552cbf0100000089c78b75008d76f43b75087303ff5520897500c746fc02000000bb002c7541891e897e048b178b4d008d49f43b4d087303ff5520894d00c741fc02000000895104c701fbffffff8b04248b78088b1783faff75088b5f048b5b04eb05bbfc917b418b45008d40f03b45087303ff5520894500c740fc03000000bf68cd744189388970088958048b34248b5e088b3b83ffff75088b53048b520ceb1e8b55008d52f83b55087303ff5520895500c742fc01000040c702010000008b5d008d5be83b5d087303ff5520895d00c743fc050000008b7e04897b1089530c894b08894304c7030100000050508b1783fafd750f89e0c7000100000089e3894b04eb0d89e1c701ffffffff89e08958048b5d008d5bf43b5d087303ff5520895d00c743fc020000008b0c24890b8b4424048943048b45008d40f43b45087303ff5520894500c740fc02000000895804c7000b00000083c40cc390|@4061,63|10,0,0 31,0,@4077 39,0,0 52,0,@372 63,0,0 94,0,@453 134,0,-3 160,0,@4079 189,0,@214 248,0,0 293,0,0 310,0,0 325,0,-1 399,0,5 4077:O3|@7320,@224,@4078 4078:S31|526573756c7420766563746f72206973206e6f7420616e2061646472657373 4079:O1|@4080 4080:C2,16|b8b82775410bc0ff552cb80100000090|@420,1|1,0,@418 11,0,0 4081:S21|434f44455452454528292e67656e436f6465283229 4082:O2|@4084,@4083 4083:O2|@4206,@4205 4084:C2,204|3b650c7303ff55245250505089de6a01bb81000000b80d0000000bc0ff15a0920408c7000b0000008b5d008d5bf43b5d087303ff5520895d00c743fc02000000894304c703ffffffff8b55008d52f83b55087303ff5520895500c742fc01000040891a89e1891189e0c74004010000008b7d008d7ff43b7d087303ff5520897d00c747fc020000008b1c24891f8b5424048957048b4d008d49f83b4d087303ff5520894d00c741fc01000040c701010000005751bb50937b4189f08d5424180bc0e8be00000083c410c30bc0|@4204,63|17,0,64 22,0,6 30,0,I11 36,0,5 69,0,-1 108,0,0 174,0,0 181,0,@4085 194,1,@4090 4085:O1|@4086 4086:C2,16|b884937b410bc0ff552cb80100000090|@4089,1|1,0,@4087 11,0,0 4087:O3|@7320,@224,@4088 4088:S31|6f75746572206c6576656c207265616368656420696e20636f7079436f6465 4089:S37|434f44455452454528292e707265436f6465283229696e736572746564436f64652d283129 4090:C2,456|3b650c7303ff5524505089d650536a01bb81000000b80d0000000bc0ff15a0920408c7000b0000008b5d008d5bf43b5d087303ff5520895d00c743fc02000000894304c703ffffffff8b55008d52f83b55087303ff5520895500c742fc01000040891a8d4c240889118d442408c74004010000008b7d008d7ff43b7d087303ff5520897d00c747fc020000008b5c2408891f8b54240c8957045050576a01bb81000000b80d000000ff15a0920408c7000b0000008b4d008d49f43b4d087303ff5520894d00c741fc02000000894104c701ffffffff8b45008d40f83b45087303ff5520894500c740fc0100004089088d7c240489078d5c2404c74304010000008b55008d52f43b55087303ff5520895500c742fc020000008b4c2404890a8b4424088942045050526a01bb81000000b80d000000ff15a0920408c7000b0000008b7d008d7ff43b7d087303ff5520897d00c747fc02000000894704c707ffffffff8b5d008d5bf83b5d087303ff5520895d00c743fc01000040893b8d542404891a8d4c2404c74104010000008b45008d40f43b45087303ff5520894500c740fc020000008b7c240489388b5c240889580450568b4424248d5424300bc0e82200000083c430c20800|@4203,63|17,0,64 22,0,6 30,0,I11 36,0,5 69,0,-1 112,0,0 159,0,64 164,0,6 170,0,I11 176,0,5 209,0,-1 252,0,0 299,0,64 304,0,6 310,0,I11 316,0,5 349,0,-1 392,0,0 446,1,@4091 4091:C2,1676|3b650c7303ff5524528b38f7c701000000741583ffeb7c1583ff177f15be0a967b418d74be54ffe6e9c5000000e9c0000000e9bb000000909090e999050000909090e932030000909090e9a3000000909090e9ec020000909090e921040000909090e973040000909090e987010000909090e97b000000909090e9f0010000909090e9c4000000909090e9e4010000909090e96c000000909090e99f040000909090e902030000909090e925050000909090e99d000000909090e9a4050000909090e96e010000909090e9ad030000909090e928000000909090e9e4020000909090e9ff020000909090e93b050000909090b8789c7b41ff552cb80100000083c404c3ff70048b4008e8f2feffff508b4424048b5424080bc0e8e2feffff89c28b45008d40f03b45087303ff5520894500c740fc030000008b3c24897808895004c7000100000083c40cc3b8f825754183c404c3ff70088b40048d54240883c800e86e0500008b1c248b0b83f9f775468b7d008d7fec3b7d087303ff5520897d00c747fc040000008b731089770c8b530c8957088b4b08894f048b4b04890f5089fbb8010000008b5424080bc0e8ca05000089c2eb0e5089d88b542408e83efeffff89c28b45008d40ec3b45087303ff5520894500c740fc04000000c7400c010000008950088b3c24897804c7000900000083c40cc38b5d008d5bec3b5d087303ff5520895d00c743fc040000008b4810894b0c8b780c897b088b70088973048b50048913b8030000008b142483c404e947050000ff70088b40040bc0e8befdffff89c38b45008d40f03b45087303ff5520894500c740fc030000008b1424895008895804c7000d00000083c408c383c404c3ff7004ff70088b1c2483fb017507ba01000000eb678b0b8b0183f8f975438b7c2408ff7304ff71046a018b5c24048b47e490e8aa62fdff8b7424106a018b5c24048b46d80bc0e89662fdff8b5c24106a018b53d48b5c240489d0e88262fdffeb0ab8189f7b410bc0ff552c8b5c240483c4083b650c7303ff5524eb8de905000000ba010000008b4424048b542408e8fafcffff508b4424048d5424100bc0e86a06000089c18b45008d40f03b45087303ff5520894500c740fc030000008948088b3c24897804c700ffffffff83c410c38b40048d54240483c800e83e07000089c38b45008d40f43b45087303ff5520894500c740fc02000000895804c700f1ffffff83c404c38b400490e87efcffff89c38b45008d40f43b45087303ff5520894500c740fc02000000895804c700edffffff83c404c38b580c8b4c2404895c24048b58088b400483c40451e9410700008b40048d54240483c800e8b22700008d54240483c800e87e41000083c404e91ef0ffff8b40048d542404e8724500008b5d008d5bf43b5d087303ff5520895d00c743fc02000000894304c703150000005383f8017507ba03000000eb208b088b3983fffb75128b40043b650c7303ff5524ebdeba01000000ba0100000083fa0174308b042490e8ea45fdff89c68b45008d40f43b45087303ff5520894500c740fc02000000897004c700fbffffff83c408c38b042483c408c383c404c38b5d008d5bf83b5d087303ff5520895d00c743fc01000040c703030000008b5004ff7204ff7208ff720cff7210ff7214ff7218ff721c89d98b1a89c88d54242090e84e2a000089c3b8030000008d542404e84a35000083c404c3ff7004ff700c8b40080bc0e816fbffff508b4424088b54240c0bc0e806fbffff508b4424088d5424140bc0e8ce44000089c38b45008d40ec3b45087303ff5520894500c740fc0400000089580c8b5424048950088b0c24894804c700f5ffffff83c414c38b5804ff33ff7304ff7308ff73108b430c8d5424140bc0e8f2440000508b4424048b5424140bc0e896faffff508b44240c8b5424180bc0e886faffff8b55008d52e83b55087303ff5520895500c742fc050000008b0c24894a108b7c2404897a0c8942088b7424108972048b5c2414891a8b45008d40f43b45087303ff5520894500c740fc02000000895004c7000300000083c41cc383c404c3ff7004ff70088b400ce81afaffff508b4424048b54240c0bc0e80afaffff89c38b45008d40ec3b45087303ff5520894500c740fc040000008b142489500c8958088b4c2408894804c700ebffffff83c410c3ff70088b400490e8caf9ffff89c38b45008d40f03b45087303ff5520894500c740fc030000008b1424895008895804c7001700000083c408c38b58048b1383faff750a8b4b048b410883c404c383fa0375078b430883c404c38b430483c404c30bc0|@4202,63|30,0,$4091+58 243,0,@4092 251,0,0 323,0,0 332,0,@408 354,1,@4094 419,0,0 430,1,@4096 479,0,0 494,0,4 550,0,1 561,1,@4096 615,0,6 642,0,0 678,1,@2889 698,1,@2889 718,1,@2889 725,0,@4098 757,0,0 786,1,@4100 827,0,-1 846,1,@4103 881,0,-8 929,0,-10 959,1,@4104 974,1,@4149 986,1,@4192 994,1,@4058 1006,1,@4199 1039,0,10 1050,0,1 1079,0,0 1084,0,0 1098,1,@2837 1133,0,-3 1178,0,1 1218,1,@4150 1225,0,1 1234,1,@4165 1286,1,@4200 1334,0,-6 1366,1,@4201 1484,0,1 1570,0,-11 1627,0,11 4092:O3|@7320,@224,@4093 4093:S19|756e6b6e6f776e20696e737472756374696f6e 4094:C2,88|3b650c7303ff552483f8017506b801000000c352ff308b4004e8e2ffffff508b4424048b7c24088b57fc83c800e8faf8ffff8b75008d76f43b75087303ff5520897500c746fc020000008b1c24895e04890689f083c40cc3|@4095,63|14,0,0 46,1,@4091 4095:S41|434f44455452454528292e707265436f6465283229636f7079436f64652834297265766d6170283229 4096:C2,380|3b650c7303ff55248b7b0883ff017402eb098b3383fe017402eb2789c68b45008d40f03b45087303ff5520894500c740fc0300000089700889780489188b52f0ff22f7c6010000007503ff553883fe017d73b90100000089f023c1a8017503ff553889c82bc68d400170f452565089c38b42080bc0e8be8bf9ff8b7c2408506a038b5c24088b470890e84a5dfdff8b342489f383f3028b45008d40e83b45087303ff5520894500c740fc05000000895810c7400c01000000c74008030000008b542408eb05e90d000000895004c700f7ffffff83c410c352505689f38b42d40bc0e8528bf9fff7c00100000075068b0083c40cc38b5c24088b53e48b1c2489d090e8328bf9ff8b4c240483f90174158b7c2408506a038b5c24088b47d8e8b65cfdffeb01508b44240c6a038b5c24088b40e483c800e89e5cfdff8b3c2489fe83f6028b45008d40e83b45087303ff5520894500c740fc05000000897010c7400c01000000c74008030000008b5c2404895804c700f7ffffff83c410c3|@4097,63|83,0,0 118,1,@435 138,1,@2889 180,0,0 187,0,1 207,0,-5 226,1,@435 258,1,@435 286,1,@2889 310,1,@2889 352,0,0 359,0,1 372,0,-5 4097:S42|434f44455452454528292e707265436f6465283229636f7079436f64652834296c6f6361646472283229 4098:O3|@7320,@224,@4099 4099:S29|6465636c6172654172673a206e6f742061206465636c61726174696f6e 4100:C2,192|3b650c7303ff552483f8017506b801000000c352ff308b4004e8e2ffffff8b14248b3a83fff9755f8b7424048b5efc50ff7204ff72086a018b4be48b5c240889c8e88e5bfdff8b04248b7c24108b57fc90e82af6ffff8b4d008d49ec3b4d087303ff5520894d00c741fc04000000c7410c030000008941088b742404897104c701f9ffffffeb1089c6b82ca07b4190ff552cb9010000008b5d008d5bf43b5d087303ff5520895d00c743fc020000008b542408895304890b89d883c414c30bc0|@4095,63|14,0,0 66,1,@2889 82,1,@4091 113,0,1 129,0,-4 138,0,@4101 147,0,0 4101:O3|@7320,@224,@4102 4102:S26|636f70794465633a206e6f742061206465636c61726174696f6e 4103:C2,88|3b650c7303ff552483f8017506b801000000c352ff308b4004e8e2ffffff508b4424048b7c24088b57fc83c800e83ef5ffff8b75008d76f43b75087303ff5520897500c746fc020000008b1c24895e04890689f083c40cc3|@4095,63|14,0,0 46,1,@4091 4104:C2,1568|8d7c24903b7d0c7303ff5528525053b80100000090e822060000508b4424048b54240c0bc0e8d2f4ffff50b8010000008b54241090e802060000508b4424088b5424140bc0e8860800008b44241c8b54241483c800e8a2f4ffff50b8010000008b54241890e8d20500005050508d7c24045789c38b44241490e8e20a00008b4424108b54242483c800e8661000008b4424208b54242483c800e85ef4ffff500bc0e84211000083f80175518b5c240c8b4424180bc0e8d218000089c18b5c24088b44241090e8c218000089c78b45008d40ec3b45087303ff5520894500c740fc0400000089780c8948088b3424897004c7000500000083c42cc2040050508b7424188b1e83fb0375738b5604ff30ff7004ff7008ff700cff32ff7204ff7208ff720cff72108b5c24088b442414e876150000f7c00100000075708b480c83f903756dff30ff7008ff34248b5c24088b44243c83c800e8061a0000505089e0508b5c24448b4424540bc0e8f2090000ff7424088b5c24108b442454eb05e9a2030000e8c21b000083f80174738b5c24048b4424540bc0e8f21700008b7d008d7ff43b7d087303ff5520eb0ae9c2020000e9c9010000897d00c747fc020000008b7424288977048907578b4424188d54246c90e8a21c00008b5d008d5bf43b5d087303ff5520895d00c743fc020000008943048b1424891389d98b5c2404eb05e9870000008b4424140bc0e87e1700008b7c24308b7424205623f7f7c6010000005e7503ff55383bfe7d0489fbeb0289f38b5424348b7c24245223d7f6c2015a7503ff55383bd77e0489d6eb0289fe8b55008d52e83b55087303ff5520895500c742fc05000000894210894a0c8b4c2428894a08895a0489328d442438c700030000008d7c2438895704eb728b5c24048b44245483c800e8f21600008b7d008d7ff43b7d087303ff5520897d00c747fc020000008b7424288977048907578b4424188d54246c90e84a1c00008b5d008d5bf43b5d087303ff5520895d00c743fc020000008943048b1424891389d98b5c24048b44241490e892160000eb05e9f10200008b7c24308b7424205623f7f7c6010000005e7503ff55383bfe7d0489fbeb0289f38b5424348b7c24245223d7f6c2015a7503ff55383bd77e0489d6eb0289fe8b55008d52e83b55087303ff5520895500c742fc05000000894210894a0c8b4c241c894a08895a0489328d442438c700030000008d7c2438895704eb738b5c24388b442444e8021600008b7d008d7ff43b7d087303ff5520897d00c747fc020000008b7424188977048907578b4424088d54245c90e8f61b00008b5d008d5bf43b5d087303ff5520895d00c743fc020000008943048b1424891389d98b5c24388b44240490e8a21500008b7c2420eb05e9fd0100008b7424105623f7f7c6010000005e7503ff55383bfe7d0489fbeb0289f38b5424248b7c24145223d7f6c2015a7503ff55383bd77e0489d6eb0289fe8b55008d52e83b55087303ff5520895500c742fc05000000894210894a0c8b4c240c894a08895a0489328d442428c700030000008d7c242889570450505050eb718b5c24388b442444e80e1500008b4d008d49f43b4d087303ff5520894d00c741fc020000008b7c241889790489018b75008d76f43b75087303ff5520897500c746fc02000000c7460401000000890e89f18b5c24348b44243c83c800e8ba1400008b7d008d7fe83b7d087303ff5520eb05e90b010000897d00c747fc05000000894710894f0c8b7424148977088b5c241c895f048b54242089178d4c2424c701030000008d4424248978045050505050eb6f8b08ff7004ff7008ff700c8b5c24208b44242c83c800e84e1400008b7d008d7ff43b7d087303ff5520897d00c747fc020000008b74240489770489078b5d008d5bf43b5d087303ff5520895d00c743fc02000000c7430401000000893b8b5424248b3a83fffd750cb89c317541eb07e95b00000089d0538b5c242083c800e8e61300008b75008d76e83b75087303ff5520897500c746fc050000008946108b1c24895e0c8b5424048956088b44240c894604890e8d7c2410c707030000008d5c2410897304505050505050505050508b45008d40f43b45087303ff5520894500c740fc020000008b54243889108b4c243c89480483c46cc2040083c800|@4148,63|16,0,0 22,1,@4105 38,1,@4091 44,0,0 54,1,@4105 70,1,@4107 86,1,@4091 92,0,0 102,1,@4105 122,1,@4113 138,1,@4123 154,1,@4091 162,1,@4125 182,1,@4135 198,1,@4135 242,0,2 302,1,@4129 342,1,@4139 362,1,@4113 386,1,@4143 406,1,@4135 466,1,@4145 522,1,@4135 637,0,1 662,1,@4135 710,1,@4146 758,1,@4135 880,0,1 902,1,@4135 950,1,@4147 998,1,@4135 1120,0,1 1146,1,@4135 1210,0,0 1230,1,@4135 1297,0,1 1338,1,@4135 1402,0,0 1420,0,@487 1442,1,@4135 1501,0,1 4105:C2,576|3b650c7303ff55248b42f88b388b1f83fbff75078b4f048b31eb108b4f048b71fc81e6ffffff008d7436018b42088b188b0b8b3983ffff75098b59048b0389c7eb128b59048b43fc81e0ffffff008d44000189c7525657ff72e4b801000000ba010000008b4c2408520bd1f6c2015a7503ff55383bd1750489c7eb5b505289d38b44240890e8ea81f9ff83f801744d8b0424a8017503ff553889c783c70270f68b75008d76f43b75087303ff5520897500c746fc020000008b5c2404895e04890689fa89f083c4083b650c7303ff5524eb92bf01000000e92c0000008b0424a8017503ff553889c783c70270f689fa8b44240483c4083b650c7303ff5524e961ffffffbf010000008b74240c57ff7608bb01000000ba010000008b4c240c520bd1f6c2015a7503ff55383bd1750489d8eb58535289d38b44240883c800e83281f9ff83f801744d8b0424a8017503ff553889c783c70270f68b75008d76f43b75087303ff5520897500c746fc020000008b5c2404895e04890689fa89f383c4083b650c7303ff5524eb90e931000000b8010000008b0424a8017503ff553889c783c70270f689fa8b5c240483c4083b650c7303ff5524e95fffffffb8010000008b7d008d7ff83b7d087303ff5520897d00c747fc010000408b74240489378b5d008d5bf83b5d087303ff5520895d00c743fc0100004089038b5424148b4a048b018b75008d76f83b75087303ff5520897500c746fc0100004089068b45008d40f03b45087303ff5520894500c740fc03000000897808897004891883c418c390|@4106,63|91,0,0 96,0,0 134,1,@435 211,0,0 260,0,0 273,0,0 278,0,0 318,1,@435 400,0,0 444,0,0 4106:S45|434f44455452454528292e707265436f6465283229636f7079436f646528342973617665557361676573283129 4107:C2,192|3b650c7303ff55248b388b378b58088b0b8b7a088b1f8b3b8b1f83fbff75098b5f048b3b89fbeb128b5f048b7bfc81e7ffffff008d7c3f0189fbf6c3017503ff553889df83ef0270f65251ff70045789f38b420890e8820000008b7424088b5ef88b138b0283f8ff75078b7a048b0feb108b7a048b4ffc81e1ffffff008d4c0901f6c1017503ff553889ce83ee0270f68b5c2408568b4be48b5c240889c883c800e8360000008b4424088b3c248b378b58048933b80100000083c40cc383c800|@4112,63|86,1,@4108 162,1,@4108 181,0,0 4108:C2,236|3b650c7303ff55248b7c2404f7c7010000007503ff553883ff017d1b83fb017508b801000000c20400b888ab7b4190ff552cb80100000083fb017531506a0189fbe85e50fdff8b742408f7c6010000007503ff553889f383eb0270f6895c2408bb010000008b042483c404eb938b33570bfef7c7010000005f7503ff55383bf7753650ff73046a0389fb83c800e81250fdff8b5c240cf6c3017503ff553889da83ea0270f68954240c8b1c248b44240483c408e948ffffff50536a0189fb83c800e8de4ffdff8b5c240cf6c3017503ff553889da83ea0270f68954240c8b1c248b44240483c408e914ffffff|@4111,63|34,0,0 42,0,@4109 51,0,0 66,1,@2889 97,0,0 142,1,@2889 194,1,@2889 4109:O3|@7320,@224,@4110 4110:S21|736574546f53617665643a206e6f7420656d707479 4111:S57|434f44455452454528292e707265436f6465283229636f7079436f6465283429736574546f5361766564283129636f70794172726179283329 4112:S45|434f44455452454528292e707265436f6465283229636f7079436f6465283429736574546f5361766564283129 4113:C2,284|3b650c7303ff55248b388b378b50088b0a8b3b8b178b7b08535651ff700452578b07505050ff73045256686cad7b418d7c241457bb01000000b80100000083c800e8360100005050ff74240cff7424286804b17b418d74240c568b5c24208b44242483c800e81201000050508b5c24288b138b4c24108b013bd0751389e78b742408893789e38b54240c895304eb6f8b3b83ff0174358b75008d76f43b75087303ff5520897500c746fc020000008b5c2408895e04ba74b17b41891689e1893189e08b7c240c897804eb338b75008d76f43b75087303ff5520897500c746fc020000008b5c240c895e04ba74b17b41891689e18b442408890189e78977048b74243c8b1c24891e8b542404895604b80100000083c438c2040083c800|@4122,63|43,0,@4114 53,0,0 58,0,0 66,1,@4116 81,0,@4118 102,1,@4116 182,0,@4121 235,0,@4121 271,0,0 4114:O1|@4115 4115:C2,32|bf0100000089c623f7f7c6010000007503ff553889fe2bf08d760170f489f0c3|0,49|1,0,0 4116:C2,752|3b650c7303ff55248b7c240c83ff0175728b74241083fe0175118b542404891a894204b801000000c210005053ff76048b068b5424140bc0ff128b5d008d5be83b5d087303ff5520895d00c743fc05000000c7431003000000c7430c01000000c7430803000000894304c703f7ffffff8b55008d52f43b55087303ff5520895500eb05e93d000000c742fc020000008b4c2408894a04891a8b4424148b7c24108b34248974241cc74424180100000089442414897c24108b5c240489d083c40ce93bffffff8b74241083fe0175715053ff77048b078b54241483c800ff128b5d008d5be83b5d087303ff5520895d00c743fc05000000c7431003000000c7430c01000000c7430803000000894304c703f7ffffff8b55008d52f43b55087303ff5520895500c742fc020000008b4c2404894a04891a8b4424148b7c2410eb05e925000000c744241c010000008b34248974241889442414897c241089d38b44240883c40ce997feffff8b178b0e520bd1f6c2015a7503ff55383bd175368b5424088b4c24045053ff7704ff760452518b742408897424288b44240c8944242489542420894c241c8b44241483c418e94dfeffff5223d1f6c2015a7503ff55383bd17d705053ff760489c88b5424140bc0ff128b7d008d7fe83b7d087303ff5520897d00c747fc05000000c7471003000000c7470c01000000c7470803000000894704c707f7ffffff8b75008d76f43b75087303ff5520897500c746fc020000008b5c2408895e04893e8b5424188b4c2414eb05e9250000008b4424108b3c24897c241c89542418894c2414894424108b5c240489f083c40ce9a3fdffff5053ff770489d08b542414ff128b7d008d7fe83b7d087303ff5520897d00c747fc05000000c7471003000000c7470c01000000c7470803000000894704c707f7ffffff8b75008d76f43b75087303ff5520897500c746fc020000008b5c2404895e04893e8b54241c8b4c24148b4424108954241c8b3c24897c2418894c24148944241089f38b44240883c40ce912fdffff0bc0|@4117,63|36,0,0 85,0,1 92,0,0 99,0,1 108,0,-5 171,0,0 249,0,1 256,0,0 263,0,1 272,0,-5 328,0,0 493,0,1 500,0,0 507,0,1 516,0,-5 645,0,1 652,0,0 659,0,1 668,0,-5 4117:S61|434f44455452454528292e707265436f6465283229636f7079436f6465283429636f6d707574654b696c6c536574732833296b696c6c53657473283629 4118:O1|@4119 4119:C2,4|c383c800|@4120,1| 4120:S63|434f44455452454528292e707265436f6465283229636f7079436f6465283429636f6d707574654b696c6c536574732833293c7061747465726e3e2d283129 4121:O5|-5,0,0,0,1 4122:S50|434f44455452454528292e707265436f6465283229636f7079436f6465283429636f6d707574654b696c6c53657473283329 4123:C2,160|3b650c7303ff55248b388b378b58088b0b5251ff7004ff720883fe017502eb22ff76046a038b1e8b4424080bc0e82a49fdff8b342483c4043b650c7303ff5524ebd78b44240cff70e48b7c240c83ff017502eb22ff77046a038b1f8b4424080bc0e8f648fdff8b3c2483c4043b650c7303ff5524ebd78b7424088b1e83fb0174168b5424108b4a04c70103000000b80100000083c414c3b80100000083c414c3|@4124,63|46,1,@2889 98,1,@2889 138,0,1 143,0,0 152,0,0 4124:S47|434f44455452454528292e707265436f6465283229636f7079436f646528342961646446726f6d5361766564283129 4125:C2,856|3b650c7303ff55248b3883ff0975748b70088b1e83fbfb756f8b5604b9e0ad04083bd17502eb14b9609f04083bd17502eb09b9a0b004083bd175718b4804f7c101000000756b8b7904f7c70100000075658b5f0483fb0175628b178b3283fefb755e8b48048b018b1883fbfb75728b5004f7c201000000746cf7c2010000007410eb0ae9ab010000e9a001000089d6eb0eb89420754190ff552cbe010000008b4d008d49f43b4d08731eeb19e976010000e96b010000e960010000e955010000e9c5000000ff5520894d00c741fc02000000c741040100000089318b5d00eb0ae930000000e9250000008d5bec3b5d087303ff5520895d00c743fc040000008b1789530c894b08897304893389d8c3b801000000c38b7a04f7c7010000007464f7c701000000740489f8eb0fb8942075410bc0ff552cb8010000008b5d008d5bf43b5d087303ff5520895d00c743fc02000000c743040100000089038b75008d76ec3b75087303ff5520897500c746fc040000008b1189560c895e08894604890689f0c3b801000000c38b48048b018b1883fbfb756e8b5004f7c2010000007468f7c201000000740489d6eb0eb89420754190ff552cbe010000008b4d008d49f43b4d087303ff5520894d00c741fc02000000c741040100000089318b5d008d5bec3b5d087303ff5520895d00c743fc040000008b1789530c894b08897304893389d8c3e906000000b801000000c3b801000000c3b801000000c3b801000000c3b801000000c3b801000000c3b801000000c383ff0375718b7004ff36ff7604ff7608ff760c8b4610e8b2fdffff508b4424040bc0e81a0100008b1c24f7c3010000007570f7c001000000756dff33ff7304ff7308ff730cff308b5c24048b44241c83c800e836020000bb010000000bc0e89a03000083f80175668b4c240883f901750a8b1424eb13e9a20000008b04248d542428e84a04000089c28b4424208b7c240c5023c7a801587503ff55383bc77d10eb0ae96d000000e95f00000089c6eb0289fe8b5c24248b4c24105323d9f6c3015b7503ff55383bd97e0989d8eb07e92f00000089c88b7d008d7fec3b7d087303ff5520897d00c747fc040000008b5c2404895f0c895708897704890789f883c428c3b80100000083c428c3b80100000083c414c3b80100000083c414c3b801000000c30bc0|@4134,63|29,0,I229 40,0,I113 51,0,I251 146,0,@369 155,0,0 213,0,0 272,0,0 301,0,@369 311,0,0 342,0,0 389,0,0 430,0,@369 439,0,0 470,0,0 522,0,0 528,0,0 534,0,0 540,0,0 546,0,0 552,0,0 558,0,0 598,1,@4126 646,1,@4129 651,0,0 658,1,@4131 694,1,@4133 822,0,0 831,0,0 840,0,0 849,0,0 4126:C2,132|3b650c7303ff552483f8017506b8589c7541c38b388b378b1e83fbfb755f8b560483fa037557ff77048b400490e8ceffffff83f8017509b80100000083c404c38b3883ff0175058b0c24eb13578b4424048d542408e84600000089c183c4048b45008d40f83b45087303ff5520894500c740fc01000000890883c404c3b801000000c390|@4128,63|14,0,@989 56,0,0 86,1,@4127 126,0,0 4127:C2,68|3b650c7303ff552483f80175048b42f8c352ff308b40040bc0e8e2ffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0424890289d083c408c3|@1462,5| 4128:S67|434f44455452454528292e707265436f6465283229636f7079436f6465283429636f7079436f6e6428332966696e6443617365283129636865636b4361736573283129 4129:C2,276|3b650c7303ff55248b3b83fff775708b75008d76ec3b75087303ff5520897500c746fc040000008b531089560c8b4b0c894e088b7b08897e048b7b04893e8b3883fff775718b4d008d49ec3b4d087303ff5520894d00c741fc040000008b501089510c8b780c8979088b78088979048b780489398b7b048b5004520bd7eb05e94e000000f6c2015a7503ff55383bfa75358b7b0c8b500c520bd7f6c2015a7503ff55383bfa751f8b7b088b50083bfa75158b7b10eb05e91100000083ff01740389f0c389c8c3b801000000c3b801000000c383ff0d75348b3083fe0d75278b53088b4808520bd1f6c2015a7503ff55383bd17406b801000000c38b5b048b4004e9fbfeffffb801000000c3b801000000c383c800|@4130,63|199,0,0 205,0,0 245,0,0 262,0,0 268,0,0 4130:S53|434f44455452454528292e707265436f6465283229636f7079436f6465283429636f7079436f6e6428332973696d696c6172283229 4131:C2,148|3bd87506b803000000c3f7c3010000007558f7c001000000755b8b3b8b30560bf7f7c6010000005e7503ff55383bfe754f8b53048b48043bd1753f8b7b088b7008560bf7f7c6010000005e7503ff55383bfe751b8b530c8b480c3bd17506b803000000c3b801000000c3e91d000000b801000000c3e90c000000b801000000c3b801000000c3b801000000c3b801000000c30bc0|@4132,63|5,0,1 95,0,1 101,0,0 112,0,0 123,0,0 129,0,0 135,0,0 141,0,0 4132:S27|65712d434f44455452454528292e73696d696c6172697479283229 4133:C2,68|3b650c7303ff552483f80175048b42e0c352ff308b40040bc0e8e2ffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0424890289d083c408c3|@1462,5| 4134:S54|434f44455452454528292e707265436f6465283229636f7079436f6465283429636f7079436f6e6428332966696e6443617365283129 4135:C2,184|3b650c7303ff552483fb017501c350508b3883ff13752f8b500483fa01750489deeb145289d88d54240c83c800e8a200000089c683c40489e0c7001300000089e7897704eb4a8b75008d76f43b75087303ff5520897500c746fc02000000c7460401000000890683fe01750489daeb135689d88d54240c0bc0e8b600000089c283c40489e0c7001300000089e78957048b45008d40f43b45087303ff5520894500c740fc020000008b342489308b5c240489580483c408c3|@4138,61|46,1,@4136 59,0,9 97,0,0 122,1,@4137 135,0,9 4136:C2,68|3b650c7303ff552483f80175048b42f4c352ff308b40040bc0e8e2ffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0424890289d083c408c3|@1462,5| 4137:C2,68|3b650c7303ff552483f80175048b42f4c352ff308b40040bc0e8e2ffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0424890289d083c408c3|@1462,5| 4138:S56|434f44455452454528292e707265436f6465283229636f7079436f6465283429636f7079436f6e642833296164644b696c6c536574283229 4139:C2,124|3b650c7303ff55248b7c2404f7c7010000007503ff553883ff017e118b5804c70301000000b801000000c20400f6c3017503ff553883fb017d218b308b165389f189d08d5424040bc0e84a0000008901b80100000083c404c204008b70088b165389f189d08d542404e8c20000008901b80100000083c404c2040090|@4142,63|33,0,0 38,0,0 74,1,@4140 81,0,0 106,1,@4141 113,0,0 4140:C2,124|3b650c7303ff552483f8017506b801000000c38b7afcbe0100000089fb23def6c3017503ff553889f32bdf8d5b0170f48b30530bdef6c3015b7503ff55383bf3743252568b40040bc0e8b2ffffff8b5d008d5bf43b5d087303ff5520895d00c743fc020000008943048b1424891389d883c408c38b4004e984ffffff|@155,61|14,0,0 23,0,0 4141:C2,100|3b650c7303ff552483f8017506b801000000c38b388b72fc560bf7f7c6010000005e7503ff55383bfe743152578b400490e8caffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0424890289d083c408c38b4004eb9f83c800|@155,53|14,0,0 4142:S45|434f44455452454528292e707265436f6465283229636f7079436f646528342972656d6f76654974656d283329 4143:C2,228|8b388b378b50088b0a8b7c2404f7c7010000007503ff553883ff017e088b70048b06c20400f6c3017503ff553883fb017d5c5383fe01750bb80100000083c404c204008b1c24ba0100000089d923caf6c1017503ff553889d12bcb8d490170f48b06500bc1a801587503ff55383bc1750bb80300000083c404c204008b76043b650c7303ff5524ebaab801000000e90600000083c404c204005383f901750bb80100000083c404c204008b318b1c24530bdef6c3015b7503ff55383bf3750bb80300000083c404c204008b49043b650c7303ff5524ebc3b80100000083c404c204000bc0|@4144,63|57,0,0 71,0,0 114,0,1 138,0,0 160,0,0 192,0,1 216,0,0 4144:S40|434f44455452454528292e707265436f6465283229636f7079436f6465283429696e536574283329 4145:C2,128|3b650c7303ff552483f8017506b801000000c38b3889d1ff7004ff77048b59988b0783c800e8eafaffff8b7d008d7ff43b7d087303ff5520897d00c747fc020000008b3424897704890751578b44240c89ca83c800e8a6ffffff8b5d008d5bf43b5d087303ff5520895d00c743fc020000008943048b1424891389d883c410c3|@413,63|14,0,0 38,1,@4135 4146:C2,128|3b650c7303ff552483f8017506b801000000c38b3889d1ff7004ff77048b59988b0783c800e84efaffff8b7d008d7ff43b7d087303ff5520897d00c747fc020000008b3424897704890751578b44240c89ca83c800e8a6ffffff8b5d008d5bf43b5d087303ff5520895d00c743fc020000008943048b1424891389d883c410c3|@413,63|14,0,0 38,1,@4135 4147:C2,128|3b650c7303ff552483f8017506b801000000c38b3889d1ff7004ff77048b59dc8b0783c800e8b2f9ffff8b7d008d7ff43b7d087303ff5520897d00c747fc020000008b3424897704890751578b44240c89ca83c800e8a6ffffff8b5d008d5bf43b5d087303ff5520895d00c743fc020000008943048b1424891389d883c410c3|@413,63|14,0,0 38,1,@4135 4148:S43|434f44455452454528292e707265436f6465283229636f7079436f6465283429636f7079436f6e64283329 4149:C2,884|3b650c7303ff552483f8017506b801000000c38b388b3783fef975748b5afc52ff7704ff7708ff70046a018b4be48b5c240c89c890e89639fdff8b44240c8b78fc6a018b5c240c8b47d883c800e87e39fdff8b7424048b1683fafb753c8b4c240c8b41fc8b7d008d7ff83b7d087303ff5520897d00c747fc010000008937578b5c240c8b40d483c800e84239fdffeb05e96a01000089c3eb178b4c240c8b41fc6a018b5c240c8b40d4e82239fdff89c38b04248b54240c0bc0e842ffffff8b7c240c8b77fc508b5c240c8b46e4e85e67f9ff83f801751e8b5c24108b53fc8b4ad08b79fc508b44240c8b5704ff1283f801740deb0350eb088b44240483c418c38b5c240c8b0b83f9f3756f8b4424148b78fcff73048b5c24148b47d890e80e67f9ff8b75008d76f83b75087303ff5520897500c746fc0100004089068b1c2456ff7304ff7308ff730cff7310ff7314ff7318ff731c8b1b89f08b542438e82e0200008b14248b0a89c389c88b54241c0bc0e8260d000089c2eb1489d88b7c24148b57fc0bc0e8f2d2ffff89c250508b74241c8b5efc526a018b4be48b5c242089c8e82a38fdff8b45008d40ec3b45087303ff5520894500c740fc040000008b7c240c89780c8b34248970088b5c241c895804c700f9ffffff8b55008d52f43b55087303ff5520895500c742fc020000008b4c2410894a04890289d083c424c383feef757052ff7704ff70048b5c240483fb017507ba01000000eb24ff73048b038d54241090e8ba0e00008b1c2483c4043b650c7303ff5524ebd5ba010000008b04248b54240883c800e8b2fdffff508b4424088d5424100bc0e8ce0f000050bb01000000b8010000008d542414e81e120000eb05e98c0000008d542410e80615000083f80175078b042483c410c38b480483f90175288b7d008d7ff43b7d087303ff5520897d00c747fc020000008b34248977048b18891f89f883c410c38b7d008d7ff43b7d087303ff5520897d00c747fc02000000894704c707efffffff8b75008d76f43b75087303ff5520897500c746fc020000008b1c24895e04893e89f083c410c352578b400483c800e8eefcffff508b4424048b5c24088b53fc83c800e856d1ffff8b1083fa1375218b0c2483f90175078b400483c40cc38b40048d54240c0bc0e8ea15000083c40cc38b4d008d49f43b4d087303ff5520894d00c741fc020000008b3c24897904890189c883c40cc3|@4191,63|14,0,0 54,1,@2889 78,1,@2889 138,1,@2889 170,1,@2889 206,1,@435 286,1,@435 350,1,@4150 370,1,@4165 390,1,@4091 418,1,@2889 468,0,-4 533,0,0 550,1,@4170 571,0,0 602,1,@4174 608,0,0 613,0,0 622,1,@4179 638,1,@4186 731,0,-9 802,1,@4091 838,1,@4190 4150:C2,832|3b650c7303ff55248b7d008d7ff83b7d087303ff5520897d00c747fc01000040c707010000008b75008d76f83b75087303ff5520897500c746fc01000040c706010000008b4d008d49f83b4d087303ff5520894d00c741fc01000040c70101000000525053575651ff72fc8b14248b4424188b58fc8b7c24188b77fc8b4d008d49dc3b4d087303ff5520894d00c741fc08000000b840c87b4189018b46f089411c8b7bd48979188b5ad88959148b7c240c8979108b7c240889790c8b7c24148979088b7c24048979048b7c242cf7c7010000007503ff553889fb83c30270f65050f6c3017503ff553889da83c20270f651536a01bb8100000089d090ff15a09204088b0c2489088b7d008d7ff43b7d087303ff5520897d00c747fc02000000894704c707ffffffff8b75008d76f83b75087303ff5520897500c746fc01000040893e8d5c240889338d542408c74204010000008b4d008d49f43b4d087303ff5520894d00c741fc020000008b44240889018b7c240c8979048b75008d76f43b75087303ff5520897500c746fc02000000bb78cd7b41891e8b5424048956045151ff74241c89f38b44242c8b7c24348b77fc8b56d090e84ecdffff50b8030000008d54243490e84a07000083f80175058b1c24eb608b55008d52f43b55087303ff5520895500c742fc02000000c74204010000008b0c24890a83fa01750489c7eb12528d54243883c800e85e08000089c783c4048b5d008d5bf43b5d087303ff5520895d00c743fc02000000897b04c703130000008b7424248b1683fa0175708b4c241c8b018b7d008d7fdc3b7d087303ff5520897d00c747fc08000000c7471c030000008947188b7424408977148b542444895710c7470c010000008b4c244c894f088b442450894704891f8b5d008d5bf43b5d087303ff5520895d00c743fc02000000897b04c703f3ffffffeb05e91a0000008b7c24308b47fc8b48d08b41f88b7c243483c45457e9aeb6ffff8b0e8b44241c8b388b75008d76dc3b75087303ff5520897500c746fc08000000c7461c01000000897e188b5424408956148b442444894610894e0c8b7c244c897e088b4c2450894e04891e8b45008d40f43b45087303ff5520894500c740fc02000000897004c700f3ffffff83c434c21c00|@4164,63|34,0,0 64,0,0 94,0,0 149,0,@4151 245,0,64 254,0,I11 292,0,-1 335,0,0 401,0,@4159 438,1,@4090 444,0,1 454,1,@4161 495,0,0 522,1,@4163 560,0,9 608,0,1 632,0,0 681,0,-7 714,1,@4031 753,0,0 822,0,-7 4151:C2,556|3b650c7303ff552452ff700453ff3083fb0175708b1c2483fb017402eb0b8b44240883f8017502eb0eb888ca7b4190ff552cb901000000b9010000008b5c241483fb0174108b4208c70003000000b901000000eb05b9010000008b4a048b01c7010300000089c783f7028b45008d40e83b45087303ff5520894500c740fc05000000eb05e924000000897810c7400c01000000c7400801000000c7400401000000c700f7ffffff83c410c2040083fb0375688b3c24f7c7010000007503ff553883ff017e5a8b5c240883fb01750db888ca7b41ff552cb901000000b90100000089fb8b4218e85a60f9fff7c00100000075088b0083c410c204008b54241483fa0174218b44240c6a038b5c24048b401490e8ce31fdff89c1eb0fe939000000e934000000b9010000008b4c240c8b41048b38c700030000008b71108b1e8b510c8b025389c389f88d5424140bc0e82601000083c410c2040083fb0375578b3c24f7c7010000007503ff553883ff017d448b74240883fe01750eb888ca7b4190ff552cbb01000000bb010000008b5a048b0bc703030000008b42108b388b720c8b1e5789c88d54241490e8ca00000083c410c20400f6c3017503ff553889df83ef0270f689c68b45008d40f03b45087303ff5520894500c740fc030000008b5c241489580889780489308b521cff128b1083fafb750683c410c204008b4c240c8b79048b37c707030000008b59108b138b44240c8b780c8b1f5289f08d5424140bc0e85200000083c410c20400|@4158,63|42,0,@4152 51,0,0 56,0,0 74,0,1 79,0,0 86,0,0 97,0,1 143,0,0 150,0,0 157,0,0 163,0,-5 207,0,@4152 215,0,0 220,0,0 230,1,@435 274,1,@2889 293,0,0 308,0,1 334,1,@4154 378,0,@4152 387,0,0 392,0,0 403,0,1 426,1,@4154 518,0,1 546,1,@4154 4152:O3|@7320,@224,@4153 4153:S23|707265763a206261646c792d666f726d6564206c6f6164 4154:C2,452|3b650c7303ff55248b7c240483ff0175708b5afc8b4af4f6c1017503ff553889ce83ee0270f68b7d008d7fe83b7d087303ff5520897d00c747fc05000000c747100100000089770c8b72f88977088b4af0894f04c707f7ffffff8b4afc8b71108b0e8b75008d76f43b75087303ff5520897500c746fc02000000894e04893eeb05e9580000008b4b1089318b7afc8b770c8b1ef6c3017503ff553889d983c10270f6890e89c383f3028b45008d40e83b45087303ff5520894500c740fc05000000895810c7400c01000000c7400801000000894804c700f7ffffffc204008b378b0e83f9f775718b4e04525053ff7608ff760cff7704ff72f0518b542404510bcaf6c101597503ff55383bca75728b4c241c8b79f4f7c7010000007503ff553889fe83ee0270f68b54240c520bd6f6c2015a7503ff55383bd675568b7424108b51f83bf2754b89c683f6028b45008d40e83b4508730aeb05e959000000ff5520894500c740fc05000000897010c7400c01000000c7400801000000895804eb05e90c000000c700f7ffffff83c420c20400f6c3017503ff553889d983e90270f68b7c2408897c242489cb8b54241c83c420e94afeffffb898cc7b41ff552cb80100000090|@4157,63|65,0,0 86,0,-5 199,0,0 206,0,0 215,0,-5 368,0,0 375,0,0 391,0,-5 439,0,@4155 447,0,0 4155:O3|@7320,@224,@4156 4156:S40|6d616b65436c6f73757265456e7472793a20636c6f73757265206973206e6f742045787472616374 4157:S80|434f44455452454528292e707265436f6465283229636f7079436f6465283429696e73657274283129636f70794c616d626461283929707265762833296d616b65436c6f73757265456e747279283329 4158:S61|434f44455452454528292e707265436f6465283229636f7079436f6465283429696e73657274283129636f70794c616d62646128392970726576283329 4159:C2,28|3b650c7303ff55248b78088b3424893c248b58048b008b520456ff22|@4160,63| 4160:S61|434f44455452454528292e707265436f6465283229636f7079436f6465283429696e73657274283129636f70794c616d62646128392970726576283129 4161:C2,240|3b650c7303ff55248b7a105023c7a801587503ff55383bc77e06b801000000c3525089c38b42d00bc0e85e5bf9ff83f80175718b3424bb0100000089f223d3f6c2017503ff553889da2bd68d520170f48b4d008d49e83b4d087303ff5520894d00c741fc05000000c7411003000000c7410c01000000c7410803000000895104c701f7fffffff7c6010000007503ff553889f083c00270f6518b542408e85effffffeb05e9260000008b7d008d7ff43b7d087303ff5520897d00c747fc020000008947048b3424893789f883c40cc38b3424f7c6010000007503ff553889f083c00270f68b54240483c408e910ffffff|@4162,63|27,0,0 42,1,@435 55,0,0 107,0,1 114,0,0 121,0,1 130,0,-5 4162:S65|434f44455452454528292e707265436f6465283229636f7079436f6465283429696e73657274283129636f70794c616d6264612839296164644b696c6c73283129 4163:C2,68|3b650c7303ff552483f80175048b42c8c352ff308b40040bc0e8e2ffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0424890289d083c408c3|@1462,5| 4164:S54|434f44455452454528292e707265436f6465283229636f7079436f6465283429696e73657274283129636f70794c616d626461283929 4165:C2,236|3b650c7303ff55248b3b83fff3755f8b73045250ff36ff7604ff7608ff7610ff7614ff76188b460c8d54242090e8d6000000bb0100000083f801750489daeb388b4d008d49f43b4d087303ff5520894d00c741fc020000008959048b38893989cb8b40043b650c7303ff5524ebc9e974000000ba010000008b4d008d49dc3b4d087303ff5520894d00c741fc080000008b44241889411c8b3c248979188b7424048971148b5c240889591089510c8b54240c8951088b4424108941048b7c241489398b45008d40f43b45087303ff5520894500c740fc02000000894804c700f3ffffff83c420c389d8c30bc0|@4169,63|46,1,@4166 51,0,0 116,0,0 223,0,-7 4166:C2,172|3b650c7303ff552483f8017506b801000000c38b388b1f83fbf7754a8b4d008d49ec3b4d087303ff5520894d00c741fc040000008b771089710c8b5f0c8959088b5f088959048b5f04891952ff700489cb8b42f88b4afc8b51fc83c800e8f2cbffff89c6eb118b4804b8c0d17b4190ff552cbe01000000568b4424048b54240890e87affffff8b7d008d7ff43b7d087303ff5520897d00c747fc020000008947048b3424893789f883c40cc3|@413,63|14,0,0 94,1,@4096 106,0,@4167 115,0,0 4167:O3|@7320,@224,@4168 4168:S26|6d616b654c6f616473202d206e6f7420616e2045787472616374 4169:S59|434f44455452454528292e707265436f6465283229636f7079436f6465283429696e73657274283129636f707950726f63436c6f73757265283229 4170:C2,172|3b650c7303ff55248b3883fff975778b70088b1e83fbfb75378b4afc8b79fc8b75008d76f83b75087303ff5520897500c746fc010000008b5808891e52ff7004568b5c24048b47d490e89e28fdffeb0452ff70048b5424048b4afc8b41fc6a018b5c24048b40e40bc0e87e28fdff8b7c24048b77fc8b5efc8b542408c744240801000000eb05e9110000008b4bd88b1c2489c883c40852e95028fdffb800d37b410bc0ff552cb80100000090|@4173,63|74,1,@2889 106,1,@2889 128,0,0 152,1,@2889 157,0,@4171 167,0,0 4171:O3|@7320,@224,@4172 4172:S21|6170706c79466e3a206e6f742061204465636c6172 4173:S70|434f44455452454528292e707265436f6465283229636f7079436f6465283429696e73657274283129636f70794465636c61726174696f6e732831296170706c79466e283129 4174:C2,84|3b650c7303ff552483f8017506b801000000c352ff70048b00e852000000508b4424048b5424080bc0e8d2ffffff8b7d008d7ff43b7d087303ff5520897d00c747fc020000008947048b3424893789f883c40cc3|@413,63|14,0,0 26,1,@4175 4175:C2,344|3b650c7303ff55248b3883fff9756f8b72fc8b5efc52ff7004ff70088b4bd88b5c240489c8e86a55f9ff8b7d008d7ff83b7d087303ff5520897d00c747fc0100004089078b34248b1683faf375358b4e0457ff7104ff7108ff710cff7110ff7114ff7118ff711c8b1989f88b7c24288b57fc83c800e87af0ffff89c3eb1ae9c50000005789f08b4c240c8b59fc8b53fc90e84ac1ffff89c38b0b83f9fb75378b44240c8b78fc8b77fc8b55008d52f83b55087303ff5520895500c742fc01000000891a53528b5c24108b46d490e86226fdff89c2eb1e8b44240c8b78fc8b77fc536a018b5c24108b46d483c800e84226fdff89c28b5c24108b53fc8b4afc8b4424048b38578b5c24108b41d890e82226fdff8b45008d40ec3b45087303ff5520894500c740fc04000000c7400c010000008b34248970088b5c240c895804c700f9ffffff83c414c3b864d57b410bc0ff552cb80100000090|@4178,63|38,1,@435 118,1,@4150 146,1,@4091 206,1,@2889 238,1,@2889 270,1,@2889 301,0,0 320,0,-4 329,0,@4176 339,0,0 4176:O3|@7320,@224,@4177 4177:S21|636f70794465633a206e6f742061204465636c6172 4178:S70|434f44455452454528292e707265436f6465283229636f7079436f6465283429696e73657274283129636f70794465636c61726174696f6e73283129636f7079446563283129 4179:C2,336|3b650c7303ff55248b7c240483ff01752783f8037510895c2404bb01000000b801000000ebda5289d88d542404e83a01000083c404c204008b378b0e83f9f975728b4afc525053ff37ff7604ff7608ff7704ff71fc8b14248b5c240c8b42d80bc0e83a53f9ff83f80174748b5c2408b8030000008b4c241c8b51fc0bc0e88af9ffff8b7d008d7fec3b7d087303ff5520897d00c747fc04000000c7470c010000008947088b74240c897704c707f9ffffffeb05e98800000057ff7424088b5c241cb8030000008b54242483c800e82effffff8b5d008d5bf43b5d08730aeb05e91d000000ff5520895d00c743fc020000008943048b1424891389d883c424c204008b4d008d49f43b4d087303ff5520894d00c741fc020000008b4424148941048b7c241089398b7424048974242489cb8b4424188b54241c83c420e9c0feffffb84cd87b410bc0ff552cb80100000090|@4185,63|27,0,0 32,0,0 46,1,@4180 98,1,@435 112,0,1 126,1,@4165 157,0,0 173,0,-4 194,0,1 321,0,@4183 331,0,0 4180:C2,172|3b650c7303ff552483f8017506b801000000c38b388b1f83fbf9754a52ff7004ff77048b5f08b8010000008b4afc8b51fce86af8ffff8b75008d76ec3b75087303ff5520897500c746fc04000000c7460c010000008946088b0424894604c706f9ffffffeb118b4804b818d87b4190ff552cbe01000000568b4424088b54240c90e87affffff8b7d008d7ff43b7d087303ff5520897d00c747fc020000008947048b3424893789f883c410c3|@413,63|14,0,0 39,0,0 50,1,@4165 81,0,0 96,0,-4 106,0,@4181 115,0,0 4181:O3|@7320,@224,@4182 4182:S28|6d6b4c69676874436c6f737572653a206e6f742061204465636c6172 4183:O3|@7320,@224,@4184 4184:S29|70726f63657373436c6f73757265733a206e6f742061204465636c6172 4185:S78|434f44455452454528292e707265436f6465283229636f7079436f6465283429696e73657274283129636f70794465636c61726174696f6e7328312970726f63657373436c6f7375726573283329 4186:C2,264|3b650c7303ff552483f8017506b801000000c38b388b3783fef975708b5afc8b4bfc52ff7704ff7708ff70048b5c24088b41e40bc0e86e50f9ff83f80175228b7c240c8b77fc8b5efc8b53d08b4afc508b4424088b510490ff1283f8017412eb0350eb0d8b4424048b54241083c414eb8f8b4424108b78fc8b77fc6a018b5c24108b46e490e8be21fdffeb05e9670000008b5d008d5bec3b5d087303ff5520895d00c743fc040000008b142489530c8b4c2408894b088b44240c894304c703f9ffffff538b4424088b54241490e82effffff8b7d008d7ff43b7d087303ff5520897d00c747fc020000008947048b3424893789f883c418c3b800da7b410bc0ff552cb80100000090|@4189,63|14,0,0 54,1,@435 134,1,@2889 191,0,-4 249,0,@4187 259,0,0 4187:O3|@7320,@224,@4188 4188:S25|636f7079456e74726965733a204e6f742061204465636c6172 4189:S74|434f44455452454528292e707265436f6465283229636f7079436f6465283429696e73657274283129636f70794465636c61726174696f6e73283129636f7079456e7472696573283129 4190:C2,68|3b650c7303ff552483f80175048b42f4c352ff308b40040bc0e8e2ffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0424890289d083c408c3|@1462,5| 4191:S60|434f44455452454528292e707265436f6465283229636f7079436f6465283429696e73657274283129636f70794465636c61726174696f6e73283129 4192:C2,84|3b650c7303ff552483f8017506b801000000c352ff70048b00e852000000508b4424048b5424080bc0e8d2ffffff8b7d008d7ff43b7d087303ff5520897d00c747fc020000008947048b3424893789f883c40cc3|@413,63|14,0,0 26,1,@4193 4193:C2,256|3b650c7303ff55248b3883fff975708b70088b1e83fb15756b52ff7004ff700c8b40080bc0e8f20000008b1083fafb75338b4c24088b79fc8b75008d76f83b75087303ff5520897500c746fc01000000890650568b5c240c8b47d40bc0e8261ffdffeb168b4c24088b79fc506a018b5c240c8b47d4e80e1ffdff8b4500eb0ae939000000e9330000008d40ec3b45087303ff5520894500c740fc040000008b74240489700c8b1c248958088b542408895004c700f9ffffff83c410c3c383ffef7537528b40048d54240483c800e80a02000089c68b45008d40f43b45087303ff5520894500c740fc02000000897004c700efffffff83c404c3e91e0000000bc0|@4198,63|38,1,@4194 94,1,@2889 118,1,@2889 180,0,-4 206,1,@4197 241,0,-9 250,1,@4194 4194:C2,240|3b650c7303ff55248b3883ff157558528b40048d5424040bc0e8ee0000008b75008d76f43b75087303ff5520897500c746fc02000000894604c706150000005683f8017507bb03000000eb258b108b0a83f9fb75178b40043b650c7303ff5524ebdebb01000000e940000000bb0100000083fb01742f8b0424e8d202fdff89c78b45008d40f43b45087303ff5520894500c740fc02000000897804c700fbffffff83c408c38b042483c408c383fff7753b8b700c83fe0175328b5804f6c3017503ff553883fb017e228b4afc508b41d490e8f64bf9fff7c00100000075068b0083c404c38b042483c404c3c3c383c800|@4196,63|26,1,@4195 59,0,10 70,0,1 99,0,0 109,0,0 122,1,@2837 157,0,-3 210,1,@435 4195:C2,88|3b650c7303ff552483f8017506b801000000c352ff70048b008b52fc90e8d2feffff508b4424048b5424080bc0e8ceffffff8b7d008d7ff43b7d087303ff5520897d00c747fc020000008947048b3424893789f883c40cc3|@413,63|14,0,0 30,1,@4194 4196:S55|434f44455452454528292e707265436f6465283229636f7079436f6465283429696e736572742831297265636f707956616c7565283129 4197:C2,88|3b650c7303ff552483f8017506b801000000c352ff70048b008b52fc90e802fdffff508b4424048b5424080bc0e8ceffffff8b7d008d7ff43b7d087303ff5520897d00c747fc020000008947048b3424893789f883c40cc3|@413,63|14,0,0 30,1,@4193 4198:S61|434f44455452454528292e707265436f6465283229636f7079436f6465283429696e736572742831297265636f70794465636c61726174696f6e283129 4199:C2,88|3b650c7303ff552483f8017506b801000000c352ff308b4004e8e2ffffff508b4424048b7c24088b57fc83c800e86ab6ffff8b75008d76f43b75087303ff5520897500c746fc020000008b1c24895e04890689f083c40cc3|@4095,63|14,0,0 46,1,@4091 4200:C2,88|3b650c7303ff552483f8017506b801000000c352ff70048b008b52fc90e806b6ffff508b4424048b5424080bc0e8ceffffff8b7d008d7ff43b7d087303ff5520897d00c747fc020000008947048b3424893789f883c40cc3|@413,63|14,0,0 30,1,@4091 4201:C2,148|3b650c7303ff552483f8017506b801000000c352ff308b4004e8e2ffffff50508b54240850ff72048b028b4c24148b51fce87eb5ffff8d7c240889078d7424088b1c24895e048b55008d52f43b55087303ff5520895500c742fc020000008b4c2408890a8b44240c8942048b7d008d7ff43b7d087303ff5520897d00c747fc020000008b742404897704891789f883c418c30bc0|@4095,63|14,0,0 50,1,@4091 4202:S41|434f44455452454528292e707265436f6465283229636f7079436f6465283429696e73657274283129 4203:S32|434f44455452454528292e707265436f6465283229636f7079436f6465283429 4204:S21|434f44455452454528292e707265436f6465283229 4205:O3|@4209,@4211,@4208 4206:C2,900|3b650c7303ff55248b38f7c701000000741583ffef7c1583ff177f15be8ee17b418d74be44ffe6e9b2000000e9ad000000e9a8000000e92e020000909090e99b000000909090e99f000000909090e946010000909090e99b000000909090e999000000909090e985000000909090e971000000909090e963000000909090e95b000000909090e953000000909090e971000000909090e9db020000909090e90e020000909090e933000000909090e9ae010000909090e923000000909090e91b000000909090e985000000909090e944010000909090e9a1020000909090b801000000c3b803000000c3b803000000c3b803000000c3b803000000c38b4008e9fcfeffff52ff7008ff700c8b400483c800e8eafeffff83f801742c8b4424048b5424080bc0e8d6feffff83f801740f8b04248b54240883c40ce9c2feffffb80100000083c40cc3b80100000083c40cc3528b780483ff017509b80300000083c404c3ff77048b078b5424040bc0e88efeffff83f80174198b3c2483c4043b650c7303ff5524ebcdb80100000083c408c3b80100000083c408c352ff7008ff700c8b40040bc0e856feffff83f801745f8b142483fa017507b903000000eb32ff72048b028b54240c0bc0e832feffff83f80174158b142483c4043b650c7303ff5524ebcfb901000000b90100000083c40483f90174108b4424048b54240883c40ce9fbfdffffb80100000083c40cc3b80100000083c40cc3528b480483f9017509b80300000083c404c3ff71048b018b54240483c800e8c6fdffff83f80174198b0c2483c4043b650c7303ff5524ebccb80100000083c408c3b80100000083c408c38b4004e997fdffff528b480483f9017509b80300000083c404c3ff71048b018b54240490e876fdffff83f80174198b0c2483c4043b650c7303ff5524ebceb80100000083c408c3b80100000083c408c38b48088b3983fffb75628b7104f7c60100000074138b5804b8c020754190ff552c89d8bb0100000089f352ff700456b8cd00000083c800ff1500a4040883f80174598b5c24088b53048b5c24048b042483c800ff1283f80174538b4c240483f901750eb80300000083c40cc3e94e000000ff71048b018b54240c0bc0e8cefcffff83f801741e8b0c2483c4043b650c7303ff5524ebc8b801000000e91600000083c410c3b80100000083c410c3b80100000083c40cc3b80100000083c40cc3b801000000c3b803000000c38b4004e97cfcffff|@4207,63|29,0,$4206+54 223,0,0 229,0,1 235,0,1 241,0,1 247,0,1 319,0,0 328,0,0 346,0,1 392,0,0 401,0,0 440,0,1 484,0,0 489,0,0 518,0,0 527,0,0 545,0,1 592,0,0 601,0,0 627,0,1 672,0,0 681,0,0 714,0,@372 725,0,0 737,0,102 746,0,I150 789,0,1 840,0,0 854,0,0 863,0,0 872,0,0 881,0,0 887,0,1 4207:S28|434f44455452454528292e7369646545666665637446726565283129 4208:O2|I15,@4215 4209:C2,348|5250538b7a08be0100000083ff01750489f3eb3683fe017407ba03000000eb168b5424048b073bd07507ba03000000eb05ba0100000089d68b7f043b650c7303ff5524ebc6bb0100000083fb017409b80300000083c40cc38b5424088b4204bf0100000083f801750489feeb3683ff017407bb03000000eb168b5c24048b103bda7507bb03000000eb05bb0100000089df8b40043b650c7303ff5524ebc6be0100000083fe0174638b1c24f7c301000000755d8b5304f7c20100000075678b028b3883fffb75638b720483fe0175608b4804f7c1010000007509b80300000083c40cc3f7c10100000074058b4004eb0fb8942075410bc0ff552cb80100000083f8017511b803000000eb0fe943000000e935000000b80100000089c783f70289f883c40cc3e917000000e909000000b80100000083c40cc3b80100000083c40cc3b80100000083c40cc3b80100000083c40cc3b80100000083c40cc3|@4210,63|7,0,0 26,0,1 43,0,1 50,0,0 70,0,0 80,0,1 96,0,0 115,0,1 132,0,1 139,0,0 159,0,0 219,0,1 241,0,@369 251,0,0 261,0,1 278,0,0 304,0,0 313,0,0 322,0,0 331,0,0 340,0,0 4210:S35|434f44455452454528292e736964654566666563744672656552545343616c6c283229 4211:O2|I109,@4212 4212:O2|I110,@4213 4213:O2|I241,@4214 4214:O2|I246,0 4215:O2|I17,@4216 4216:O2|I24,@4217 4217:O2|I25,@4218 4218:O2|I26,@4219 4219:O2|I27,@4220 4220:O2|I28,@4221 4221:O2|I29,@4222 4222:O2|I105,@4223 4223:O2|I106,@4224 4224:O2|I107,@4225 4225:O2|I108,@4226 4226:O2|I111,@4227 4227:O2|I112,@4228 4228:O2|I113,@4229 4229:O2|I114,@4230 4230:O2|I115,@4231 4231:O2|I117,@4232 4232:O2|I118,@4233 4233:O2|I119,@4234 4234:O2|I120,@4235 4235:O2|I121,@4236 4236:O2|I122,@4237 4237:O2|I123,@4238 4238:O2|I125,@4239 4239:O2|I126,@4240 4240:O2|I127,@4241 4241:O2|I128,@4242 4242:O2|I130,@4243 4243:O2|I136,@4244 4244:O2|I137,@4245 4245:O2|I138,@4246 4246:O2|I139,@4247 4247:O2|I140,@4248 4248:O2|I141,@4249 4249:O2|I189,@4250 4250:O2|I196,@4251 4251:O2|I213,@4252 4252:O2|I214,@4253 4253:O2|I216,@4254 4254:O2|I217,@4255 4255:O2|I218,@4256 4256:O2|I223,@4257 4257:O2|I229,@4258 4258:O2|I230,@4259 4259:O2|I231,@4260 4260:O2|I232,@4261 4261:O2|I233,@4262 4262:O2|I234,@4263 4263:O2|I238,@4264 4264:O2|I239,@4265 4265:O2|I240,@4266 4266:O2|I242,@4267 4267:O2|I243,@4268 4268:O2|I244,@4269 4269:O2|I245,@4270 4270:O2|I247,@4271 4271:O2|I248,@4272 4272:O2|I249,@4273 4273:O2|I250,@4274 4274:O2|I251,@4275 4275:O2|I252,@4276 4276:O2|I253,@4277 4277:O2|I152,0 4278:O2|@4597,@4083 4279:C2,32|3b650c7303ff552452538b5c24148d54240883c800e82200000083c408c22800|@4596,63|22,1,@4280 4280:C2,11768|908dbc2474ffffff3b7d0c7303ff55288b38f7c701000000741583ffeb7c1583ff177f15be76ea7b418d74be54ffe6e9c2000000e9bd000000e9b8000000e9aa2c0000909090e90c170000909090e9a3000000909090e91b160000909090e9a20b0000909090e9ab290000909090e93b0b0000909090e97b000000909090e9be120000909090e91f010000909090e9d2120000909090e98c000000909090e953000000909090e909170000909090e9022a0000909090e9f5000000909090e92e2d0000909090e915270000909090e91f290000909090e928000000909090e9c6240000909090e9d3240000909090e9e6290000909090b8789c7b41ff552cb80100000089c38b45008d40f43b45087303ff5520894500c740fc02000000895804c70001000000c352ff7008bb010000008b40040bc0e8c7feffff83c800e8d22c000050bb010000008b4424048b54240890e8abfeffff83c800e8b62c00008b5d008d5bf03b5d087303ff5520895d00c743fc030000008943088b1424895304c703010000008b45008d40f43b45087303ff5520894500c740fc02000000895804c7000100000083c40cc3b8b8197c41c35253ff7004ff700cbb010000008b400890e83bfeffff8b1083faff75088b48048b590ceb1e8b5d008d5bf83b5d087303ff5520895d00c743fc01000040c70301000000508b4c2410538b790883ff017507be01000000eb3a8b1f8b53048b0c243bd1751c8b75008d76f83b75087303ff5520897500c746fc01000000891eeb128b7f043b650c7303ff5524ebbfbe010000008b4424048b1883fbff75088b50048b7a10eb05bff8257541f7c601000000751089f08d54241890e81e2d000083c418c38b1783faf375758b4f0450508b31ff7104ff71146a01bb81000000b8170000000bc0ff15a0920408c700150000008b5d008d5bf43b5d087303ff5520895d00c743fc02000000894304c703ffffffff8b55008d52f83b55087303ff5520895500c742fc01000040891a8d4c240889118d442408c7400401000000eb05e9a70800008b7d008d7ff43b7d087303ff5520897d00c747fc020000008b5c2408891f8b54240c8957045050576a01bb81000000b81700000090ff15a0920408c700150000008b4d008d49f43b4d087303ff5520894d00c741fc02000000894104c701ffffffff8b45008d40f83b45087303ff5520894500c740fc0100004089088d7c240489078d5c2404c74304010000008b55008d52f43b55087303ff5520895500c742fc020000008b4c2404890a8b4424088942045050526a01bb81000000b817000000ff15a0920408c700150000008b7d008d7ff43b7d087303ff5520897d00c747fc02000000894704c707ffffffff8b5d008d5bf83b5d087303ff5520895d00c743fc01000040893b8d542404891a8d4c2404c74104010000008b45008d40f43b45087303ff5520894500c740fc020000008b7c240489388b5c24088958045650ba010000008b4c243c83f901750489d0eb23f6c2017503ff553889d783c70270f68b490489fa3b650c7303ff5524ebd9b801000000bf0100000089c623f7f7c6010000007503ff553889fe2bf08d760170f4508b5c244089f08d54244c90e80a350000508b5c24248b4424200bc0e8863d00008b5d008d5bf03b5d087303ff5520895d00c743fc03000000ba302d7c4189138b4c2408894b088b7c241c897b048b74244c8b55008d52ec3b55087303ff5520895500c742fc04000000bf3c2e7c41893a894a0c8b7e1c897a088b4ef8894a04508b45008d40f43b45087303ff5520894500c740fc02000000c74004010000008b4c242c89085352e80697ffff83f8017402eb348b45008d40f43b45087303ff5520894500c740fc02000000c74004030000008b7c2434893883c800e8d296ffff83f8017502eb708b7c24588b75008d76e83b75087303ff5520897500c746fc05000000bb782f7c41891e8b5424488956108b4c2408894e0c8b4424288946088b5f1c895e048b4d008d49f43b4d087303ff5520894d00c741fc02000000b8cc317c4189018b04248941048b45008d40f43b4508730aeb05e9a2000000ff5520894500c740fc02000000ba48327c4189108970048b75008d76f43b75087303ff5520897500c746fc02000000bac8327c4189168b5424048956048b55008d52f43b55087303ff5520895500c742fc02000000bf38337c41893a8b5c2414895a048b7c24588b5f1483fb01740850b803000000eb05508b442450ff34245652ff771cff771850ff7710ff742474ff7708ff770489cb8b4424448b57fcff12eb728b75008d76f83b75087303ff5520897500c746fc01000040c706010000008b5d008d5bf83b5d087303ff5520895d00c743fc01000040c703010000005050536a01bb81000000b81700000090ff15a0920408c700150000008b55008d52f43b55087303ff5520895500c742fc02000000eb05e9d7020000894204c702ffffffff8b4d008d49f83b4d087303ff5520894d00c741fc0100004089118d44240489088d7c2404c74704010000008b5d008d5bf43b5d087303ff5520895d00c743fc020000008b54240489138b4c2408894b048b4424648b78188b178b4c241c89d723f9f7c7010000007503ff55388d7aff03f970f68b481889398b7c24648b4d008d49e03b4d087303ff5520894d00c741fc07000000b8d0337c4189018b4424148941188b471c89411489591089710c8b3c248979088b44241c89410453515652b8010000008d54247890e8f64500008b7c24108b3783fe0174718b5c24748b53188b0af6c1017503ff553889cf83c70270f6893a8b75008d76e83b75087303ff5520897500c746fc05000000c7461001000000c7460c01000000c7460803000000894e04c706f7ffffff5051568b5c2438b8030000008d94248400000090e8725e00008b5d008d5beceb05e9f50000003b5d087303ff5520895d00c743fc04000000c7430c010000008b1424895308894304c70309000000538b44240c90e88e2500008b4d008d49ec3b4d087303ff5520894d00c741fc04000000c7410c010000008941088b442408894104c701f9ffffff8b7d008d7ff43b7d087303ff5520897d00c747fc02000000c7470401000000890f8b75008d76f83b75087303ff5520897500c746fc01000040c7060100000083ff0175268b45008d40f43b45087303ff5520894500c740fc020000008b1c24895804c70001000000eb728b45008d40f03b45087303ff5520894500c740fc030000008b1c24895808897804c70003000000eb718b5c24048b1383fa01746b0bc0e8ba240000508b5c2430b8010000008d54247c90e84a5d00008b4d008d49f03b4d087303ff5520894d00c741fc030000008941088b0424894104eb05e939000000c701ffffffff8b45008d40f43b45087303ff5520894500c740fc02000000894804eb0ae911000000e908000000c70001000000eb015050505083c428508b5c24488b4424440bc0e84291ffff8b5c242c8b44242883c800e83291ffff8b0c248b3983ffff75088b71048b4608eb0d83ff0375058b4108eb038b410483ffff75088b59048b7310eb05bef825754183ffff75088b51048b5a04eb05bbbc527c418b5424508b0a83f9ff750d8b7c24508b570489c18b02eb1983f903750a8b7c2450508b4704eb0b89c7b80100000057eb01518b7c24048b0f83f9ff75078b57048b12eb0f83f90375058b5704eb05ba0100000083fa01750889c28b442418eb1352508b4424208d5424700bc0e8125e0000eb02505283f80175058b1424eb13508b4424048d542474e8565e000089c283c40483f9ff75088b47048b400ceb1e8b45008d40f83b45087303ff5520894500c740fc01000040c700010000008b7d008d7fe83b7d087303ff5520897d00c747fc0500000089771089470c8b4c2408894f08895f0489178b0683f8fd755283fa0175258b45008d40f43b45087303ff5520894500c740fc02000000894804c7000100000083c470c38b45008d40f03b45087303ff5520894500c740fc03000000894808895004c7000300000083c470c38b45008d40f43b45087303ff5520894500c740fc02000000897804c700ffffffff83c470c3b8010000008d5424180bc0e8e223000083c418c38b5d008d5bec3b5d087303ff5520895d00c743fc040000008b4810894b0c8b780c897b088b70088973048b700489338b45008d40f03b45087303ff5520894500c740fc030000008978088b4a1c89480489188b5228ff228b58048b4a1cf6c1017503ff553889cf83c70270f6505089d650ff33ff7304ff7310ff7314576a01bb81000000b81700000090ff15a0920408c700150000008b5d008d5bf43b5d087303ff5520895d00c743fc02000000894304c703ffffffff8b55008d52f83b55087303ff5520895500c742fc01000040891a8d4c241889118d442418c74004010000008b7d008d7ff43b7d087303ff5520897d00c747fc020000008b5c2418891f8b54241c8957045050576a01bb81000000b817000000ff15a0920408c700150000008b4d008d49f43b4d087303ff5520894d00c741fc02000000894104c701ffffffff8b45008d40f83b45087303ff5520894500c740fc0100004089088d7c240489078d5c2404c74304010000008b55008d52f43b55087303ff5520895500c742fc020000008b4c2404890a8b4424088942048b7d008d7fec3b7d087303ff5520897d00c747fc04000000bbb0537c41891f8b5e28895f0c8b04248947088b44240c8947048b45008d40ec3b45087303ff5520894500c740fc04000000b954557c4189088b4ef889480c8950088b5c240c8958048b5d008d5bf03b5d087303ff5520895d00c743fc03000000b970577c41890b8953088b0c24894b048b4d008d49f43b4d087303ff5520894d00c741fc02000000565257505351be74587c4189318941048b45008d40f43b45087303ff5520894500c740fc02000000beec587c4189308978048b7d008d7ff43b7d087303ff5520897d00c747fc02000000be64597c418937895f048b5d008d5bf43b5d087303ff5520895d00c743fc02000000becc597c4189338953048b55008d52f83b55087303ff5520895500c742fc01000040c702030000008b742414505753ff742430526a01ff76106a01ff7608ff760489cb8b44245c8b56fcff128b5d008d5bf83b5d087303ff5520895d00c743fc01000040c703010000008b5424148b4d008d49f03b4d087303ff5520894d00c741fc03000000bf5c5a7c4189398b721c8971088959048b7d008d7ff03b7d087303ff5520897d00c747fc03000000be245c7c4189378b72f8897708894f04535783c800e8fe1e00008b5d008d5bf43b5d087303ff5520895d00c743fc02000000ba8c5d7c4189138b0c24894b048b7c241c8b77fcff74242c8b560483c800ff1250508b5c243883fb0375718b55008d52dc3b55087303ff5520895500c742fc08000000c7421c01000000c7421801000000c74214030000008b4c243c894a10c7420c010000008b7c2434897a088b74244089720489028b5d008d5bf43b5d087303ff5520895d00c743fc02000000895304c703f3ffffff8b5500eb05e9600000008d52f83b55087303ff5520895500c742fc01000040c702010000008b4c24248b45008d40e83b45087303ff5520894500c740fc0500000089581089500cbf9c3175418978088b71f8897004c7000100000089e3c703ffffffff89e2894204eb7583fb0175758b54240c8b0a8b7d008d7fdc3b7d087303ff5520897d00c747fc08000000c7471c01000000c7471801000000c74714010000008b74243c897710894f0c8b5c2434895f088b54244089570489078b4d008d49f43b4d087303ff5520894d00c741fc02000000897904c701f3ffffffeb0ae94e020000e9780000008b45008d40f83b45087303ff5520894500c740fc01000040c700010000008b7c24248b75008d76e83b75087303ff5520897500c746fc050000008b5c2448895e1089460c894e088b5728895604c706010000008b0383f8fd750f89e6c7060100000089e6894e04eb6b89e1c701ffffffff89e1897104eb6189c28b45008d40f43b45087303ff5520894500c740fc02000000c74004ffffffff89185283c800e8e68affff83f80174358b4c2428ff71048b442404ba045e7c410bc0e8766200008b3c245023c7a801587503ff55383bc77d16eb0de970010000e96b01000050eb07befdffffffeb048b7424408b4c24148b018b7d008d7fdc3b7d087303ff5520897d00c747fc08000000c7471c01000000c74718010000008977148b5c2444895f1089470c8b54243c8957088b4424488947048b44240489078b5d008d5bf43b5d087303ff5520895d00c743fc02000000897b04c703f3ffffff8b3983ff0175138b7c242c5689d88b571083c800ff1289c1eb0389d9568b75008d76dc3b75087303ff5520897500c746fc08000000c7461c01000000c74618010000008b1c24895e148b542448895610c7460c010000008b4424408946088b7c244c897e048b5c2408891e8b55008d52f43b55087303ff5520895500c742fc02000000897204c702f3ffffff8b45008d40f83b45087303ff5520894500c740fc01000040c700010000008b7c24308b75008d76e83b75087303ff5520897500c746fc0500000089561089460c894e088b5ff8895e04c706010000008d54240cc702ffffffff8d4c240c89710483c40c8b45008d40f43b45087303ff5520894500c740fc020000008b3c2489388b742404897004508b5c24548b44245090e8fa87ffff8b5c24348b44243083c800e8ea87ffff8b042483c458c389c38b45008d40f43b45087303ff5520894500c740fc02000000895804c70001000000c38b4d008d49f83b4d087303ff5520894d00c741fc01000040c701010000008b7d008d7ff83b7d087303ff5520897d00c747fc01000040c707010000008b75008d76f43b75087303ff5520897500c746fc02000000c74604010000005253ff7004ff70085157568b542410891683fe0175068b44240ceb0e8b44240c8d54241c90e8026a00008b75008d76f43b75087303ff5520897500c746fc02000000894604c706130000008b5424188b45008d40f83b45087303ff5520894500c740fc0100000089388b5d008d5bf43b5d087303ff5520895d00c743fc02000000b984687c41890b8b4c2408894b048b4d008d49f43b4d087303ff5520894d00c741fc0200000089790489198b5c24188b7d008d7ff43b7d087303ff5520897d00c747fc0200000056ff72f8ff7228ff7224ff7220ff721cff7218ff7214ff72105051ff7308578b5c2404895f04890f8b54244cff742428ff742428ff742428ff742428ff742428ff742428ff7424285057ff72048b5c245489f08b52fc0bc0ff128b4c243c8b0183f80175798b7d008d7ff43b7d087303ff5520897d00c747fc02000000c74704010000008b742444893783ff0175068b5c2440eb16578b4424448d54245483c800e88269000089c383c4048b55008d52f43b55087303ff5520895500c742fc02000000895a04c702130000008b5c244889d08b54244c83c450e99beaffff8b4424408d54245083c800e89a6900008b7c244c8b75008d76f83b75087303ff5520897500c746fc010000008b5c2438891e8b55008d52f43b55087303ff5520895500c742fc02000000b9586b7c41890a8b4c243c894a048b4d008d49f43b4d087303ff5520894d00c741fc0200000089590489118b5d008d5bf43b5d087303ff5520895d00c743fc020000008b5708895304890b50ff7728ff7724ff7720ff771cff7718ff7714ff77105653ff77048b5ff88b4424708b57fcff1283c800e8ea1700008b4d008d49f03b4d087303ff5520894d00c741fc030000008b3c24897908894104c701ffffffff8b45008d40f43b45087303ff5520894500c740fc02000000894804c7000100000083c454c3f7c30100000075708b4a08f7c101000000756a8b398b338b5f043bf3740fb8806b7c410bc0ff552cb80100000052ff378b40048d542408e8ca6a00008b54240489c18b45008d40f03b45087303ff5520894500c740fc030000008b7a1c897808c740040300000089088b14240bc0ff128b75008d76f4eb0ae954000000e9400000003b75087303ff5520897500c746fc02000000894604c706f1ffffff8b45008d40f43b45087303ff5520894500c740fc02000000897004c7000100000083c408c3b8346c7c410bc0ff552cb801000000b8346c7c4183c800ff552cb80100000052bb010000008b400490e89be8ffff83c800e8a61600008b5d008d5bf43b5d087303ff5520895d00c743fc02000000894304c703edffffff8b45008d40f43b45087303ff5520894500c740fc02000000895804c7000100000083c404c35253ff7008ff700cbb010000008b400490e837e8ffff83c800e8421600008b1883fbfb75418b500483fa0175258b0c248b3983fffd7509b86c6c7c4183c410c38b5c240889c88b54240c83c410e9fbe7ffff8b5c24088b4424048b54240c83c410e9e7e7ffff508b5c240c8b4424088b5424100bc0e8d3e7ffff508b5c24108b4424088b5424140bc0e8bfe7ffff508b5424048b3a83ffff75088b72048b4e08eb0d83ff0375058b4a08eb038b4a0483ffff75078b5a048b33eb0f83ff0375058b7204eb05be010000008b1883fbff75088b50048b5a08eb0d83fb0375058b5808eb038b58048b14248b3a83ffff75078b42048b00eb0f83ff0375058b4204eb05b8010000008b1183fafb757283fe0175728b3b83fffb757083f80175708b71048b43043bf0756b8b5424188b72fc518b44240c8b560890ff1283f80174088b44240883c420c38b5d008d5bf43b5d087303ff5520895d00c743fc02000000c74304010000008b54240c89138b4d008d49f83b4d087303ff5520894d00eb19e9a5020000e938020000e9cb010000e95c010000e965000000c741fc01000040c7010100000083fb0175288b45008d40f43b45087303ff5520894500c740fc020000008b3c24897804c7000100000083c420c38b45008d40f03b45087303ff5520894500c740fc030000008b3c24897808895804c7000300000083c420c3505083fe03751883f801751389e2c7020100000089e28b4c2410894a04eb6e83fe01756e83f80375698b55008d52f43b55087303ff5520895500c742fc02000000c74204010000008b4c2410890a8b75008d76ec3b75087303ff5520897500c746fc04000000c7460c03000000b948777841894e08895604c7060900000089e2c7020100000089e1897104eb3de9380000008b55008d52ec3b55087303ff5520895500c742fc04000000895a0c894a088b4c2410894a04c7020500000089e6c7060100000089e18951048b45008d40f43b45087303ff5520894500c740fc020000008b342489308b54240489500483c424c38b4424040bc0e866130000508b4424040bc0e85a1300008b75008d76ec3b75087303ff5520897500c746fc0400000089460c8b1c24895e088b54240c895604c706050000008b45008d40f43b45087303ff5520894500c740fc02000000897004c7000100000083c420c38b442404e8fe120000508b4424040bc0e8f21200008b75008d76ec3b75087303ff5520897500c746fc0400000089460c8b1c24895e088b54240c895604c706050000008b45008d40f43b45087303ff5520894500c740fc02000000897004c7000100000083c420c38b442404e896120000508b4424040bc0e88a1200008b4d008d49ec3b4d087303ff5520894d00c741fc0400000089410c8b04248941088b7c240c897904c701050000008b45008d40f43b45087303ff5520894500c740fc02000000894804c7000100000083c420c383fa1575588b0383f8157571ff7104ff7304bf010000008b74240483fe01750489fbeb26f7c7010000007503ff553889fa83c20270f68b760489d73b650c7303ff5524ebd6bb0100000053ba010000008b4c240483f901750989d0eb2fe9ee030000f6c2017503ff553889d783c70270f68b490489fa3b650c730aeb05e902010000ff5524ebcdb8010000008b3c24500bc7a801587503ff55383bf8756dbe010000008b5c240883fb01750489f2eb26f7c6010000007503ff553889f183c10270f68b5b0489ce3b650c7303ff5524ebd6ba010000008b4c24248b41188b38f7c7010000007503ff553889fe83c60270f689306a01ff74240cff74240c52bb0100000089f88d542438eb05e909000000e85a65000083c428c38b44241083c800e812110000508b4424100bc0e8061100008b75008d76ec3b75087303ff5520897500c746fc0400000089460c8b1c24895e088b542418895604c706050000008b45008d40f43b45087303ff5520894500c740fc02000000897004c7000100000083c42cc383f81775588b7b048b3783fef775748b570883fa0375718b470c83f801756eff7104ff7308ff7704b9010000008b5c240883fb01750489caeb28f6c1017503ff553889c883c00270f68b5b0489c13b650c7303ff5524ebd9ba01000000e9020200008b4c2404510bcaf6c101597503ff55383bca754b8b45008d40f83b45087314eb0fe974010000e907010000e99a000000ff5520894500c740fc010000008b3c24893850ff74240c6a0151bb0100000089f88d54243890e82e64000083c428c38b44241083c800e8e60f0000508b4424100bc0e8da0f00008b7d008d7fec3b7d087303ff5520897d00c747fc0400000089470c8b34248977088b5c2418895f04c707050000008b45008d40f43b45087303ff5520894500c740fc02000000897804c7000100000083c42cc38b442404e87e0f0000508b4424040bc0e8720f00008b7d008d7fec3b7d087303ff5520897d00c747fc0400000089470c8b34248977088b5c240c895f04c707050000008b45008d40f43b45087303ff5520894500c740fc02000000897804c7000100000083c420c38b442404e8160f0000508b4424040bc0e80a0f00008b4d008d49ec3b4d087303ff5520894d00c741fc0400000089410c8b04248941088b7c240c897904c701050000008b45008d40f43b45087303ff5520894500c740fc02000000894804c7000100000083c420c38b442404e8ae0e0000508b4424040bc0e8a20e00008b5d008d5bec3b5d087303ff5520895d00c743fc0400000089430c8b14248953088b4c240c894b04c703050000008b45008d40f43b45087303ff5520894500c740fc02000000895804c7000100000083c420c38b442404e8460e0000508b4424040bc0e83a0e00008b7d008d7fec3b7d087303ff5520897d00c747fc0400000089470c8b34248977088b5c240c895f04c707050000008b45008d40f43b45087303ff5520894500c740fc02000000897804c7000100000083c420c383fa1775598b41048b3883fff775598b700883fe0375728b500c83fa01756f8b3b83ff15756dff7108ff7004ff7304b9010000008b342483fe01750489cbeb2df6c1017503ff553889ca83c20270f68b760489d13b650c7303ff5524ebd9e9b1040000bb01000000e93f0400008b542408520bd3f6c2015a7503ff55383bd375488b4d008d49f8eb0fe9b6030000e949030000e99c0000003b4d087303ff5520894d00c741fc010000008b44240489016a016a01ff7424085289cb8d54243890e85a61000083c428c38b44241083c800e8120d0000508b4424100bc0e8060d00008b4d008d49ec3b4d087303ff5520894d00c741fc0400000089410c8b04248941088b7c2418897904c701050000008b45008d40f43b45087303ff5520894500c740fc02000000894804c7000100000083c42cc383ff1775718b73048b1683faf7756c8b7e0883ff0375698b560c83fa0175668b79088b5308520bd7f6c2015a7503ff55383bfa75688b7d008d7ff83b7d087303ff5520897d00c747fc010000008b5804891f8b55008d52f83b55087303ff5520895500c742fc010000008b46048902526a016a01eb14e9c5010000e958010000e9eb000000e97e000000ff710889fb8d54242c90e85260000083c41cc38b44240483c800e80a0c0000508b4424040bc0e8fe0b00008b4d008d49ec3b4d087303ff5520894d00c741fc0400000089410c8b04248941088b7c240c897904c701050000008b45008d40f43b45087303ff5520894500c740fc02000000894804c7000100000083c420c38b442404e8a20b0000508b4424040bc0e8960b00008b4d008d49ec3b4d087303ff5520894d00c741fc0400000089410c8b04248941088b7c240c897904c701050000008b45008d40f43b45087303ff5520894500c740fc02000000894804c7000100000083c420c38b442404e83a0b0000508b4424040bc0e82e0b00008b75008d76ec3b75087303ff5520897500c746fc0400000089460c8b1c24895e088b54240c895604c706050000008b45008d40f43b45087303ff5520894500c740fc02000000897004c7000100000083c420c38b442404e8d20a0000508b4424040bc0e8c60a00008b4d008d49ec3b4d087303ff5520894d00c741fc0400000089410c8b04248941088b7c240c897904c701050000008b45008d40f43b45087303ff5520894500c740fc02000000894804c7000100000083c420c38b442404e86a0a0000508b4424040bc0e85e0a00008b75008d76ec3b75087303ff5520897500c746fc0400000089460c8b1c24895e088b54240c895604c706050000008b45008d40f43b45087303ff5520894500c740fc02000000897004c7000100000083c420c38b442404e8020a0000508b4424040bc0e8f60900008b4d008d49ec3b4d087303ff5520894d00c741fc0400000089410c8b04248941088b7c240c897904c701050000008b45008d40f43b45087303ff5520894500c740fc02000000894804c7000100000083c420c38b442404e89a090000508b4424040bc0e88e0900008b5d008d5bec3b5d087303ff5520895d00c743fc0400000089430c8b14248953088b4c240c894b04c703050000008b45008d40f43b45087303ff5520894500c740fc02000000895804c7000100000083c420c38b442404e832090000508b4424040bc0e8260900008b75008d76ec3b75087303ff5520897500c746fc0400000089460c8b1c24895e088b54240c895604c706050000008b45008d40f43b45087303ff5520894500c740fc02000000897004c7000100000083c420c38b442404e8ca080000508b4424040bc0e8be0800008b4d008d49ec3b4d087303ff5520894d00c741fc0400000089410c8b04248941088b7c240c897904c701050000008b45008d40f43b45087303ff5520894500c740fc02000000894804c7000100000083c420c352538b40048d54240883c800e81a68000083c408c3505089d6ff70046a01bb81000000b81700000083c800ff15a0920408c700150000008b5d008d5bf43b5d087303ff5520895d00c743fc02000000894304c703ffffffff8b55008d52f83b55087303ff5520895500c742fc01000040891a8d4c240489118d442404c74004010000008b7d008d7ff43b7d087303ff5520897d00c747fc020000008b5c2404891f8b5424088957048b4d008d49f83b4d087303ff5520894d00c741fc01000040c7010300000051575650505089e0508b5c241cb8030000008d542428e85a8400008b7d008d7ff43b7d087303ff5520897d00c747fc020000008b742404897704c707150000008b5c24148b1383fa01742b89f890e80ecffcff8b4d008d49f43b4d087303ff5520894d00c741fc02000000894104c701fbffffffeb0289f98b45008d40f43b45087303ff5520894500c740fc020000008b7c2408897804c7001500000051508b5c24288b44242483c800e80e1b00008b7424148b5d008d5bf03b5d087303ff5520895d00c743fc03000000ba88ce744189138943088b4e1c894b048b45008d40f83b45087303ff5520894500c740fc01000040c700010000008b7d008d7ff43b7d087303ff5520897d00c747fc02000000baf0cd74418917895f048b5d008d5be83b5d087303ff5520895d00c743fc050000008b142489531089430c8b442404894308897b048b7c2408893b8b45008d40f43b45087303ff5520894500c740fc02000000895804c700ffffffff83c42cc352ff7008bb010000008b400490e80fd8ffff8b1083faff75088b48048b5910eb05bbf825754183faff75088b78048b4f08eb0d83fa0375058b4808eb038b4804508b3b83ff15751289d88d54240c83c800e8ce85000083c40cc38b3183fefb757589cb8b4424040bc0e842c8fcff8b1c248b0b83f9ff75078b7b048b17eb0f83f90375058b5304eb05ba010000008b7d008d7ff83b7d087303ff5520897d00c747fc01000040c7070100000083fa01752e89c68b45008d40f43b45087303ff5520894500c740fc02000000897004c70001000000eb05e92e00000083c40cc389c68b45008d40f03b45087303ff5520894500c740fc03000000897008895004c7000300000083c40cc38b1083faff750b8b3c248b5f048b4308eb1383fa0375088b3c248b4708eb068b3c248b47048b1083fa0b751189c38b4424040bc0e86ec7fcff89c3eb3c83fafb750f89c38b442404e85ac7fcff89c3eb288b5d008d5bf03b5d087303ff5520895d00c743fc030000008b7c2404897b08894304c7030d0000008b34248b0e83f9ff75078b46048b10eb0f83f90375058b5604eb05ba010000008b45008d40f83b45087303ff5520894500c740fc01000040c7000100000083fa0175258b45008d40f43b45087303ff5520894500c740fc02000000895804c7000100000083c40cc38b45008d40f03b45087303ff5520894500c740fc03000000895808895004c7000300000083c40cc389c38b45008d40f43b45087303ff5520894500c740fc02000000895804c70001000000c35253ff7008ff700cbb010000008b400483c800e8d3d5ffff83c800e8de030000508b4424048d5424140bc0e8fa860000508b5c24108b44240c8b5424140bc0e8a7d5ffff83c800e8b20300008b5d008d5bec3b5d087303ff5520895d00c743fc040000008b142489530c8943088b4c2404894b04c703f5ffffff8b45008d40f43b45087303ff5520894500c740fc02000000895804c7000100000083c418c389c38b45008d40f43b45087303ff5520894500c740fc02000000895804c70001000000c352ff7008bb010000008b4004e817d5ffff8b1083faff75088b48048b5908eb0d83fa0375058b5808eb038b58048b3b83fff77507b901000000eb0f89c6b8f89b7c41ff552cb9010000008b7424048b4e188b118b7c24048b1c2489d123cbf6c1017503ff55388d4aff03cb70f68b7718890e8b5d008d5bf03b5d087303ff5520895d00c743fc03000000b9349c7c41890b89530889430450528b44240883c800e87a2bffff8b7d008d7ff43b7d087303ff5520897d00c747fc02000000be549d7c4189378b1c24895f045089fb8b44240c83c800e8462bffff8b5424088b3a83ffff75088b72048b4e08eb0d83ff0375058b4a08eb038b4a048b75008d76f03b75087303ff5520897500c746fc030000008b5c240c895e08894e04c706170000008b4d008d49f43b4d087303ff5520894d00c741fc02000000894104c7011500000083ffff75078b5a048b03eb0f83ff0375058b4204eb05b8010000008b1c2483fb01750489c3eb0e8d54241483c800e87a87000089c38b55008d52f83b55087303ff5520895500c742fc01000040c702010000008b4424108b7d008d7ff43b7d087303ff5520897d00c747fc0200000056515352ff701c57b8609e7c4189078b4424048947048b45008d40e83b45087303ff5520894500c740fc0500000089481089500c897008897804891889c78b45008d40f43b45087303ff5520894500c740fc02000000897804c700ffffffff83c42cc38b58088b0b83f905751f52ff70048b400c83c800e82a5b0000bb010000008b142483c404e9ebd2ffff83f913751f52ff70048b400c83c800e8065b0000bb010000008b142483c404e9c7d2ffff52ff700453bb010000008b400c0bc0e8b3d2ffff83c800e8be00000050bb010000008b4424048b54240c90e897d2ffff83c800e8a2000000bb010000008d5424100bc0e84a870000bf0100000083f801750489f8eb338b75008d76f43b75087303ff5520897500c746fc02000000897e048b18891e89f78b40043b650c7303ff5524ebc9b8010000000bc0e8d271ffff89c68b45008d40f43b45087303ff5520894500c740fc02000000897004c7000100000083c410c38b4004c383c800|@4595,63|37,0,$4280+62 247,0,@4092 255,0,0 290,0,0 300,0,0 318,1,@4281 324,0,0 346,1,@4281 385,0,0 418,0,0 427,0,@4284 441,0,0 495,0,0 514,0,0 574,0,0 598,0,@408 618,1,@4285 649,0,64 654,0,11 662,0,I11 668,0,10 701,0,-1 744,0,0 798,0,64 803,0,11 810,0,I11 816,0,10 849,0,-1 892,0,0 939,0,64 944,0,11 950,0,I11 956,0,10 989,0,-1 1032,0,0 1076,0,0 1124,0,0 1129,0,0 1170,1,@4365 1186,1,@4381 1215,0,@4383 1264,0,@4385 1313,0,0 1326,1,@4053 1364,0,1 1378,1,@4053 1418,0,@4387 1476,0,@4393 1520,0,@4395 1554,0,@4397 1592,0,@4399 1619,0,1 1694,0,0 1724,0,0 1734,0,64 1739,0,11 1746,0,I11 1752,0,10 1792,0,-1 1835,0,0 1945,0,@4401 1988,0,0 1998,1,@4407 2066,0,0 2073,0,0 2080,0,1 2089,0,-5 2101,0,1 2114,1,@4443 2152,0,0 2167,0,4 2178,1,@4281 2209,0,0 2225,0,-4 2256,0,0 2288,0,0 2329,0,0 2370,0,1 2390,1,@4281 2400,0,0 2410,1,@4443 2456,0,-1 2501,0,0 2526,1,@4051 2542,1,@4051 2591,0,@408 2609,0,@4445 2655,0,0 2692,0,0 2722,1,@4447 2750,1,@4448 2798,0,0 2885,0,0 2925,0,1 2962,0,-1 2971,0,0 2982,1,@4285 3118,0,64 3123,0,11 3130,0,I11 3136,0,10 3169,0,-1 3212,0,0 3259,0,64 3264,0,11 3270,0,I11 3276,0,10 3309,0,-1 3352,0,0 3418,0,@4449 3468,0,@4451 3515,0,@4453 3561,0,@4455 3595,0,@4457 3629,0,@4459 3663,0,@4461 3698,0,1 3764,0,0 3797,0,@4463 3837,0,@4467 3858,1,@4281 3887,0,@4469 3956,0,0 3963,0,0 3970,0,1 3984,0,0 4033,0,-7 4070,0,0 4109,0,@487 4124,0,0 4132,0,-1 4181,0,0 4188,0,0 4195,0,0 4254,0,-7 4296,0,0 4349,0,0 4364,0,0 4379,0,-1 4419,0,-1 4430,1,@4053 4451,0,@4471 4458,1,@4473 4496,0,-2 4539,0,0 4546,0,0 4612,0,-7 4672,0,0 4679,0,0 4699,0,0 4752,0,-7 4782,0,0 4831,0,0 4841,0,-1 4902,1,@4051 4918,1,@4051 4960,0,0 4991,0,0 5021,0,0 5052,0,0 5094,1,@4486 5127,0,9 5186,0,@4487 5384,0,0 5418,1,@4489 5456,0,9 5490,1,@4490 5553,0,@4495 5670,1,@4281 5709,0,-1 5742,0,0 5781,0,@4496 5791,0,0 5806,1,@4498 5849,0,1 5903,0,-8 5936,0,0 5945,0,@4499 5955,0,0 5960,0,@4499 5971,0,0 5977,0,0 5994,1,@4281 6027,0,-10 6060,0,0 6077,0,0 6094,1,@4281 6124,0,@4501 6266,0,0 6326,0,0 6422,0,0 6485,0,0 6526,0,0 6569,0,1 6593,0,0 6645,0,0 6682,0,1 6687,0,@2551 6699,0,4 6707,0,0 6762,0,2 6770,0,0 6826,1,@4281 6838,1,@4281 6884,0,2 6917,0,0 6930,1,@4281 6942,1,@4281 6988,0,2 7021,0,0 7034,1,@4281 7046,1,@4281 7092,0,2 7125,0,0 7152,0,0 7203,0,0 7209,0,0 7269,0,0 7292,0,0 7343,0,0 7388,0,0 7406,1,@4503 7422,1,@4281 7434,1,@4281 7480,0,2 7513,0,0 7562,0,0 7610,0,0 7694,0,0 7706,1,@4503 7722,1,@4281 7734,1,@4281 7780,0,2 7813,0,0 7826,1,@4281 7838,1,@4281 7884,0,2 7917,0,0 7930,1,@4281 7942,1,@4281 7988,0,2 8021,0,0 8034,1,@4281 8046,1,@4281 8092,0,2 8125,0,0 8138,1,@4281 8150,1,@4281 8196,0,2 8229,0,0 8285,0,0 8337,0,0 8430,1,@4503 8446,1,@4281 8458,1,@4281 8504,0,2 8537,0,0 8694,1,@4503 8710,1,@4281 8722,1,@4281 8768,0,2 8801,0,0 8814,1,@4281 8826,1,@4281 8872,0,2 8905,0,0 8918,1,@4281 8930,1,@4281 8976,0,2 9009,0,0 9022,1,@4281 9034,1,@4281 9080,0,2 9113,0,0 9126,1,@4281 9138,1,@4281 9184,0,2 9217,0,0 9230,1,@4281 9242,1,@4281 9288,0,2 9321,0,0 9334,1,@4281 9346,1,@4281 9392,0,2 9425,0,0 9438,1,@4281 9450,1,@4281 9496,0,2 9529,0,0 9542,1,@4281 9554,1,@4281 9600,0,2 9633,0,0 9654,1,@4523 9672,0,64 9677,0,11 9686,0,I11 9692,0,10 9725,0,-1 9768,0,0 9835,0,1 9853,0,1 9862,1,@4569 9899,0,10 9918,1,@2837 9951,0,-3 9992,0,10 10010,1,@4381 10043,0,@221 10084,0,0 10113,0,@218 10200,0,-1 10213,0,0 10242,0,@408 10290,1,@4573 10314,1,@2830 10346,0,0 10376,0,0 10416,0,0 10465,0,1 10526,1,@2830 10546,1,@2830 10590,0,6 10622,0,0 10652,0,0 10690,0,0 10730,0,1 10769,0,0 10783,0,0 10802,1,@4281 10818,1,@4582 10846,1,@4281 10892,0,-6 10925,0,0 10964,0,0 10974,0,0 11022,0,0 11031,0,@4583 11039,0,0 11108,0,@4585 11130,1,@3873 11159,0,@4587 11182,1,@3873 11254,0,11 11287,0,10 11314,0,0 11338,1,@4589 11370,0,0 11411,0,@4590 11493,0,-1 11522,1,@4509 11527,0,0 11558,1,@4509 11563,0,0 11584,0,0 11602,1,@4281 11608,0,0 11630,1,@4281 11635,0,0 11646,1,@4591 11651,0,0 11711,0,0 11718,1,@4058 11753,0,0 4281:C2,192|3b650c7303ff55248b3083feff75078b58048b3beb0f83fe0375058b7804eb05bf0100000083ff01751983feff75078b58048b4308c383fe0375048b4008c38b4004c383feff75088b58048b5b08eb0d83fe0375058b5808eb038b58048b55008d52f43b55087303ff5520895500c742fc02000000c7420401000000891a83fa01750489f9eb145289f88d54240483c800e84600000089c183c4048b45008d40f43b45087303ff5520894500c740fc02000000894804c70013000000c383c800|@4283,63|33,0,0 120,0,0 146,1,@4282 184,0,9 4282:C2,68|3b650c7303ff552483f80175048b42fcc352ff308b40040bc0e8e2ffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0424890289d083c408c3|@1462,5| 4283:S40|434f44455452454528292e6f7074696d69736550726f632831322967657447656e6572616c283129 4284:O2|0,@408 4285:C2,888|3b650c7303ff55248b7d008d7ff83b7d087303ff5520897d00c747fc01000040c707030000005752508b42f48d54240c90e85e0300008b7424048b5eec8b0b83f9ff75088b7b048b5708eb0d83f90375058b5308eb038b53048b7ef083ff01740850b803000000eb098b5efc89c18b4314518b5c240c8b0b83f901745f8b4c24088b59ec8b3b83ffff75098b7304508b4608eb1283ff03750789c68b4308eb0589c68b4304568b3083fefb75708b0c2483f9017407bb03000000eb668b4c240c8b79ec8b1f83fbff75088b47048b5808eb1283fb03750a8b5f08eb08e9770000008b5f048b0383f8fb75568b7304f7c601000000740db8c0207541ff552cb80100000089f0525689c3b8cd0000000bc0ff1500a4040883f801741feb0ae92e000000e9260000008b5c240c8b042483c800e8f602000089c3eb0ebb01000000eb07bb01000000525083c404eb1252eb0fbb0100000052eb07bb01000000505283fb0174408b7c24108b77fc8b45008d40ec3b45087303ff5520894500c740fc040000008b5c240489580c8b14248950088b4c2408894804c700090000008b5610ff12eb708b44240cf7c00100000075698b388b7424108b5ef8f7c301000000755d8b57048b0b3bd175598b46fcff701c8b45008d40f03b45087303ff5520894500c740fc030000008b1424895008c74004030000008b54240c89108b1783c800ff1289c18b45008d40f43b45087303ff5520eb14e9c7000000e98c000000e91a000000e915000000894500c740fc02000000894804c700f1ffffffeb688b56fc8b45008d40f03b45087303ff5520894500c740fc030000008b4a1c894808c74004010000008b5c240889188b1783c800ff1289c28b45008d40ec3b45087303ff5520894500c740fc040000008b4c240489480c8b3c24897808895004c7000900000050eb38e9330000008b45008d40ec3b45087303ff5520894500c740fc040000008b7c240489780c8b34248970088b5c2408895804c700090000005083c4048b5424108b4aec8b3183feff75078b59048b3beb0f83fe0375058b7904eb05bf010000008b5d008d5bf83b5d087303ff5520895d00c743fc01000040c7030100000083ff01752789c78b45008d40f43b45087303ff5520894500c740fc02000000897804c7000100000083c418c389c38b45008d40f03b45087303ff5520894500c740fc03000000895808897804c7000300000083c418c3|@4364,63|34,0,1 50,1,@4286 99,0,1 182,0,1 247,0,@372 255,0,0 266,0,102 274,0,I150 306,1,@4287 315,0,0 322,0,0 337,0,0 345,0,0 409,0,4 497,0,1 567,0,-8 609,0,0 670,0,4 728,0,4 768,0,0 798,0,0 838,0,0 880,0,1 4286:C2,124|3b650c7303ff552483f8017506b801000000c352ff7004bb010000008b008b7af88b57fc90e8b6ccffff83c800e8c2faffff8b3083fefb7502eb0d8b5c24048b53fcc70201000000508b4424048b542408e8aaffffff8b5d008d5bf43b5d087303ff5520895d00c743fc020000008943048b1424891389d883c40cc3|@413,63|14,0,0 24,0,0 38,1,@4280 46,1,@4281 68,0,0 4287:C2,280|3b650c7303ff55245053bf241f7c41be0100000083ff01750489f3eb4983fe017407ba03000000eb23ff77048b070bc0ff15e0a804088b5424083bd07507ba03000000eb0aba01000000eb03ff770489d68b3c2483c4043b650c7303ff5524ebb3bb0100000083fb017409b80300000083c408c3ba54227c41b90100000083fa01750489c8eb4783f9017407bf03000000eb21ff72048b02ff15e0a804088b7c24083bf87507bf03000000eb0abf01000000eb03ff720489f98b142483c4043b650c7303ff5524ebb5b80100000083f801743a8b3c24be0300000083ff01750689f083c408c3ff770489f38b07e89603000089c68b3c2483c4043b650c7303ff5524ebd7b80100000083c40cc3b80100000083c408c30bc0|@4363,63|11,0,@4288 16,0,0 35,0,1 50,0,I189 63,0,1 70,0,0 98,0,0 108,0,1 117,0,@4356 122,0,0 141,0,1 154,0,I189 167,0,1 174,0,0 202,0,0 215,0,1 238,1,@4359 261,0,0 270,0,0 4288:O2|15,@4289 4289:O2|24,@4290 4290:O2|25,@4291 4291:O2|26,@4292 4292:O2|27,@4293 4293:O2|28,@4294 4294:O2|29,@4295 4295:O2|105,@4296 4296:O2|106,@4297 4297:O2|107,@4298 4298:O2|108,@4299 4299:O2|109,@4300 4300:O2|110,@4301 4301:O2|111,@4302 4302:O2|112,@4303 4303:O2|113,@4304 4304:O2|114,@4305 4305:O2|115,@4306 4306:O2|117,@4307 4307:O2|118,@4308 4308:O2|119,@4309 4309:O2|120,@4310 4310:O2|121,@4311 4311:O2|122,@4312 4312:O2|123,@4313 4313:O2|125,@4314 4314:O2|126,@4315 4315:O2|127,@4316 4316:O2|128,@4317 4317:O2|130,@4318 4318:O2|133,@4319 4319:O2|134,@4320 4320:O2|135,@4321 4321:O2|136,@4322 4322:O2|137,@4323 4323:O2|138,@4324 4324:O2|139,@4325 4325:O2|140,@4326 4326:O2|141,@4327 4327:O2|189,@4328 4328:O2|196,@4329 4329:O2|213,@4330 4330:O2|214,@4331 4331:O2|216,@4332 4332:O2|217,@4333 4333:O2|218,@4334 4334:O2|223,@4335 4335:O2|229,@4336 4336:O2|230,@4337 4337:O2|231,@4338 4338:O2|232,@4339 4339:O2|233,@4340 4340:O2|234,@4341 4341:O2|238,@4342 4342:O2|239,@4343 4343:O2|240,@4344 4344:O2|241,@4345 4345:O2|242,@4346 4346:O2|243,@4347 4347:O2|244,@4348 4348:O2|245,@4349 4349:O2|246,@4350 4350:O2|247,@4351 4351:O2|248,@4352 4352:O2|249,@4353 4353:O2|250,@4354 4354:O2|251,@4355 4355:O2|152,0 4356:O2|17,@4357 4357:O2|252,@4358 4358:O2|253,0 4359:C2,120|8b3883fffb755883fb0174588b5804f7c3010000007406b803000000c3f7c301000000740eb8c020754190ff552cba0100000089da0fb64aff8d4c090189ca81e28100000081fa810000007507b903000000eb05b90100000089c883f002c3e906000000b801000000c3b80c237c41ff552cb80100000090|@4362,47|24,0,1 38,0,@372 47,0,0 78,0,1 85,0,0 101,0,0 107,0,@4360 115,0,0 4360:O3|@7320,@224,@4361 4361:S29|6973496d6d757461626c653a20617267206e6f7420636f6e7374616e74 4362:S40|434f44455452454528292e6561726c7952747343616c6c2832296973496d6d757461626c65283229 4363:S26|434f44455452454528292e6561726c7952747343616c6c283229 4364:S54|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d6973652832296e6f74496e6c696e6543616c6c283129 4365:C2,180|3b650c7303ff552483fb017506b801000000c38b7d008d7ff43b7d087303ff5520897d00c747fc02000000bea8247c4189378b72c08977045250ff7304578b0bbb0100000089c88b52fc83c800e80ec6ffffff7424086a0189c38b4424088b7c24148b57fce8120100008b742408f7c6010000007503ff553889f383c30270f65089da8b5c240889d08b542410e86effffff83f80175078b042483c414c3508b4424048d5424180bc0e84607000083c418c30bc0|@4380,63|14,0,0 44,0,@4366 65,0,0 78,1,@4280 102,1,@4368 170,1,@4379 4366:C2,80|3b650c7303ff55248b38be0100000089fb23def6c3017503ff553889f32bdf8d5b0170f48b75008d76f83b75087303ff5520897500c746fc010000008b4804890e8b3c248934248b420457e92cd6fcff|@4367,63|11,0,0 76,1,@2889 4367:S54|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f7079283229736574546162283129 4368:C2,420|3b650c7303ff55248b3383feff75088b4b048b7908eb0d83fe0375058b7b08eb038b7b04575350528b0f83f9fb756383feff75088b53048b4210eb05b8f82575418b1083faf3755e8b70048b5e1483fbff75448b4c241483f90375278b55008d52f43b55087303ff5520895500c742fc020000008b7c240c897a04c70201000000eb2d8b4424080bc0e83201000089c2eb1ee9720000008b4424080bc0e81e01000089c2eb0a89d890e81201000089c28b45008d40f43b45087303ff5520894500c740fc020000008950048b4c241889088b54240483c800ff128b4424088b3883ffff750b8b70048b0683c410c2080083ff0375098b400483c410c20800b80100000083c410c2080083f9f775608b570c83fa01755d89d890e8a200000089c18b45008d40f43b45087303ff5520894500c740fc020000008948048b7c241889388b54240483c800ff128b7424088b1e83fbff750b8b56048b0283c410c2080083fb0375138b460483c410c20800e921000000e90b000000b80100000083c410c208008d5424100bc0e8b601000083c410c208008d54241090e8a601000083c410c20800|@4378,63|61,0,@408 125,0,0 138,1,@4369 158,1,@4369 170,1,@4369 255,0,0 282,1,@4369 377,0,0 394,1,@4373 410,1,@4373 4369:C2,260|8b3083feff75078b58048b3beb0f83fe0375058b7804eb05bf0100000083ff017501c383feff75088b78048b5f08eb0d83fe0375058b5808eb038b580483feff75088b78048b5710eb05baf825754183feff75088b78048b4f04eb05b934287c4183feff75088b78048b7f0ceb1e8b7d008d7ff83b7d087303ff5520897d00c747fc01000040c707010000008b75008d76e83b75087303ff5520897500c746fc05000000895610897e0c895e08894e04c7060100000050508b0a83f9fd750f89e0c7000100000089e7895f04eb0d89e0c700ffffffff89e78977048b45008d40f43b45087303ff5520894500c740fc020000008b342489308b5c240489580483c408c390|@4372,63|25,0,0 75,0,@408 93,0,@4370 136,0,0 178,0,0 195,0,0 210,0,-1 4370:O1|@4371 4371:C2,16|b8b82775410bc0ff552cb80100000090|@420,1|1,0,@418 11,0,0 4372:S39|434f44455452454528292e6f7074696d69736550726f6328313229737472697044656373283129 4373:C2,548|3b650c7303ff55248b7af08b77188b1ef6c3017503ff553889d983c10270f6890e8b4af88b0183f8ff75088b79048b4710eb05b8f82575418b3083fef375228b78048b4f1483f9ff75138b720483fe037507bff8257541eb0a89c7eb0689c7eb0289c78b4d008d49e83b4d087303ff5520894d00c741fc05000000c7411001000000c7410c01000000c7410803000000895904c701f7ffffff8b42f88b3083feff75088b70048b7604eb05bed82a7c418b42f85253575156ff72f8ff308b142483faff750c8b4424048b50048b420ceb1e8b45008d40f83b45087303ff5520894500c740fc01000040c700010000008b55008d52e83b55087303ff5520895500c742fc05000000897a1089420c894a08897204c7020100000050508b0783f8fd750f89e6c7060100000089e2894a04eb0d89e6c706ffffffff89e18951048b75008d76f43b75087303ff5520897500c746fc020000008b142489168b4c2404894e048b5424208b45008d40f43b45087303ff5520894500c740fc020000008970048b4a0889088b52f483c800ff128b4424208b78f88b1f83fbff75078b57048b32eb0f83fb0375058b7704eb05be010000008b55008d52ec3b55087303ff5520895500c742fc04000000c7420c010000008b48fc894a088b7c241c897a04c702f9ffffff8b5d008d5bf43b5d087303ff5520895d00c743fc02000000c7430401000000891383fb01750689f083c424c35389f08d5424280bc0e85600000083c428c30bc0|@4377,63|52,0,@408 83,0,@408 126,0,0 133,0,0 140,0,1 149,0,-5 172,0,@4374 235,0,0 277,0,0 294,0,0 309,0,-1 430,0,0 461,0,0 480,0,-4 511,0,0 538,1,@4376 4374:O1|@4375 4375:C2,16|b8b82775410bc0ff552cb80100000090|@420,1|1,0,@418 11,0,0 4376:C2,68|3b650c7303ff552483f80175048b42d8c352ff308b40040bc0e8e2ffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0424890289d083c408c3|@1462,5| 4377:S39|434f44455452454528292e6f7074696d69736550726f63283132296e65774465636c2834292f33 4378:S37|434f44455452454528292e6f7074696d69736550726f63283132296e65774465636c283429 4379:C2,68|3b650c7303ff552483f80175048b42e8c352ff308b40040bc0e8e2ffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0424890289d083c408c3|@1462,5| 4380:S45|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f7079283229 4381:C2,144|3b650c7303ff55248b188b0383f8ff75728b7b048b3783fe017506b860970408c35756ff7504bab22c7c41526a018965046a01bb0100000089f00bc0ff15a092040889c1ff7424088f4504eb0e90b8d4b67441ff552cb90100000051516a0156bb030000008b44242083c800ff15a0a904088b042483c800ff15209704088b0424eb05e90400000083c418c38b4304c3|@4382,63|28,0,I49 39,0,$4381+78 52,0,0 62,0,I11 79,0,@78 87,0,0 97,0,1 110,0,I195 122,0,I47 4382:S22|5374726574636841727261792e766563746f72283229 4383:C2,176|3b650c7303ff55248b3383feff75088b4b048b7908eb0d83fe0375058b7b08eb038b7b048b0f83f9f775468b7704f7c6010000007503ff553883fe017f02eb2c8b4d008d49f83b4d087303ff5520894d00c741fc0100000089195250535189f38b42080bc0e88acdfcffeb08525053eb035250538b4424088b7d008d7ff83b7d087303ff5520897d00c747fc010000008b342489378b5c240c897c240c89da8b5c24048b400483c40c52e945cdfcff90|@4384,63|102,1,@2889 171,1,@2889 4384:S56|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229736574546162466f72496e6c696e65283229 4385:C2,220|3b650c7303ff55248b7c240483ff017402eb148b30f7c6010000007503ff553883fe017e02eb2e89c68b45008d40f03b45087303ff5520894500c740fc0300000089780889580489308b52048b1c2483c40853ff2252505389f38b420ce8e6faf8fff7c00100000075338b5c24088b14248b4b0889d723f9f7c7010000007503ff553889d72bf98d7f0170f48b1889f88b74240c83c41456e993a0f8ff8b5c24088b45008d40f03b45087303ff5520894500c740fc030000008b5424108950088b0c248948048b7c240489388b53048b74240c83c41456ff2283c800|@4386,63|94,1,@435 153,1,@225 4386:S59|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d6973652832296c6f6f6b75704c6f63616c4e657741646472283329 4387:C2,384|3b650c7303ff55248b7c240483ff0175778b3083fe01750fb814317c410bc0ff552cb801000000f7c6010000007503ff553883fe017e2a525389f38b420883c800e8c6f9f8fff7c00100000075048b08eb66b834cf7441ff552cb901000000eb5cb90100000089f723f9f7c7010000007503ff553889cf2bfe8d7f0170f4f7c701000000750aeb05e997000000ff553883ff017d02eb2b8b4a0c8b41fc81e0ffffff008d4400015023c7a801587503ff55383bf87d0ceb17e934000000e92f000000b824ae7441ff552cbe010000008b7479fef7c60100000075048b0eeb10b834cf744183c800ff552cb90100000052538b5c24048b14248b430489d723f8f7c7010000007503ff553889d72bf88d7f0170f489cb89f88b74240883c41056e9d09ef8ff8b72108b0e83f9ff75088b7e048b4f04eb05b950317c418b7c2404f7c7010000007503ff553889fe83ee0270f689c28b45008d40f03b45087303ff5520894500c740fc03000000897008895804891089ca8b0c2483c40851ff220bc0|@4392,63|25,0,@4388 35,0,0 66,1,@435 83,0,@222 91,0,0 98,0,0 195,0,@51 203,0,0 224,0,@222 235,0,0 288,1,@225 311,0,@4390 4388:O3|@7320,@224,@4389 4389:S35|6c6f6f6b75704465633a20496e6c696e652066756e6374696f6e207265637572736573 4390:O1|@4391 4391:C2,16|b8b82775410bc0ff552cb80100000090|@420,1|1,0,@418 11,0,0 4392:S61|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d6c6f6f6b7570446563283329 4393:C2,28|3b650c7303ff55248b78088b3424893c248b58048b008b520456ff22|@4394,63| 4394:S59|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d6973652832296c6f6f6b75704c6f63616c4e657741646472283129 4395:C2,28|3b650c7303ff55248b78088b3424893c248b58048b008b520456ff22|@4396,63| 4396:S61|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d6c6f6f6b7570446563283129 4397:C2,20|3b650c7303ff55248b58048b008b5204ff220bc0|@4398,63| 4398:S56|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229736574546162466f72496e6c696e65283129 4399:C2,56|3b650c7303ff55248b7d008d7ff83b7d087303ff5520897d00c747fc010000008b700489378b1c24893c2489d98b188b420451e9b4c7fcff|@4400,63|52,1,@2889 4400:S59|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d6973652832297365744e6577546162466f72496e6c696e65283129 4401:C2,136|3b650c7303ff5524528b7a0cc7070300000083fb017402eb098b5a08c7030300000050bb0100000083f801750489daeb23f6c3017503ff553889df83c70270f68b400489fb3b650c7303ff5524ebd9ba010000008b4424048b7804520bd7f6c2015a7503ff55383bd774098b042483c408c2040089fb8b04248d542408e82200000083c408c20400|@4406,63|14,0,1 30,0,1 36,0,0 80,0,0 126,1,@4402 4402:C2,664|3b650c7303ff552483f801751a83fb017506b801000000c3b828377c410bc0ff552cb8010000008b7afcf6c3017503ff553883fb017d02eb228b77188b4efc81e1ffffff008d4c09015323d9f6c3015b7503ff55383bd97d02eb168b088b7004b824ae74410bc0ff552c89f0be010000008b4c5efe89cef7c60100000075048b0eeb168b308b4804b834cf74410bc0ff552c89c8b9010000008b3183feff75088b79048b7708eb0d83fe0375058b7108eb038b71048b088b3983fffb75268b3e83fffb75188b79048b4e043bf97507bf03000000eb71bf01000000eb6fbf01000000eb6d83fff7756d8b3e83fff7756b8b79045253ff30ff7004ff7108ff710cff7604ff7608ff760c578b4c240c510bcff6c101597503ff55383bf975708b4424148b7c24083bc775698b7424248b5424048b4e0489d023c1a8017503ff55388d42ff03c1eb19e996000000e991000000e98c000000e971000000e95800000070db8b7efc8b571489c323daf6c3017503ff553889c32bda8d5b0170f48b442410500bc3a801587503ff5538eb0ae91e000000e9120000003bc37507bf03000000eb3abf01000000eb33bf01000000eb2cbf01000000eb25bf010000005253ff30ff7004505050505050eb11bf01000000525351ff700450505050505083c418eb075253ff30ff700483ff017402eb1a8b74240c8b5efc6a038b53108b5c240c89d083c800e8a6c4fcff8b4c240c8b41fc8b5c24088b401090e8f2f2f8ff83f801744e8b7c2408f7c7010000007503ff553889fe83ee0270f689f38b04248b54240c83c800e8b6fdffff8b5d008d5bf43b5d087303ff5520895d00c743fc020000008943048b542404891389d883c410c38b7c2408f7c7010000007503ff553889fe83ee0270f689f38b04248b54240c83c410e968fdffff|@4405,63|19,0,0 25,0,@4403 35,0,0 97,0,@51 109,0,0 137,0,@222 149,0,0 208,0,1 215,0,0 222,0,0 413,0,1 420,0,0 427,0,0 434,0,0 441,0,0 461,0,0 518,1,@2889 538,1,@435 4403:O3|@7320,@224,@4404 4404:S33|66696c74657241726773273a2077726f6e67206e756d626572206f662061726773 4405:S76|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d66696c7465724172677328332966696c7465724172677327283229 4406:S62|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d66696c74657241726773283329 4407:C2,924|8d7c24983b7d0c7303ff55288b7afc8b75008d76dc3b75087303ff5520897500c746fc08000000bbb83b7c41891e8b5a94895e1c8b4aac894e188b4a88894e148b4ab4894e108b4acc894e0c8b4aec894e088b4f1c894e048b7d008d7ff43b7d087303ff5520897d00c747fc02000000b9b83e7c41890f8b4aa4894f048b5d008d5bf43b5d087303ff5520895d00c743fc02000000b9f03e7c41890b8973048b75008d76f43b75087303ff5520897500c746fc02000000b9803f7c41890e8b4aa8894e048b4d008d49f43b4d087303ff5520894d00c741fc020000005250ff72bc575356ff72b851bab03f7c4189118b5424048951048b54241c8b42fc8b7c241c8b5ffc8b74241c8b4efc8b511483fa01740aff701cb803000000eb0a8b7c241cff701c8b47f08b7c24208b77fc8b5424208b4d008d49f83b4d087303ff5520894d00c741fc010000008b7ae889398b5424208b7d008d7ff43b7d087303ff5520897d00c747fc02000000ff731850ff761051ff729057ba04407c4189178b7424048977048b5c24388b55008d52f43b55087303ff5520895500c742fc020000008b73e8897204893a8b7bfc8b45008d40f43b45087303ff5520894500c740fc020000008b4f0889480489108b5424388b72fc8b5c24388b4bfcff742428ff742428ff742424ff742424ff742424ff742424ff742424ff74242450ff76048b5c24548b4424588b51fc83c800ff128b7c24388b77988b1e83fb01745e8b57b4b90100000083fa01750489c8eb728b442438525189d38b409490e846eff8ff83f80174418b3c24f7c7010000007503ff553889fe83c60270f68b5c2404f6c3017503ff553889da83ea0270f689f183c4083b650c7303ff5524ebaae948000000b8010000008b7c2404f7c7010000007503ff553889fe83ee0270f68b0c24eb05e91700000089f283c4083b650c7303ff5524e96effffffb8010000008b54243883c43ce9bd0500008b578c8b0a83f9017461508b5fb4b90100000083fb01750489c8eb598b7c243c53518b479490e892eef8ff83f801744a8b3424f7c6010000007503ff553889f383c30270f68b542404f6c2017503ff553889d183e90270f689c889d989c383c4083b650c7303ff5524eba8e95e000000b801000000e92e0000008b742404f7c6010000007503ff553889f383eb0270f68b0c2483c4083b650c7303ff5524e970ffffffb8010000008b7c24385023c7a801587503ff55383bc77e0c8b54243c83c440e972fcffff8b042483c440c383c43cc383c800|@4442,63|40,0,@4408 113,0,@4412 150,0,@4413 184,0,@4415 233,0,@4416 279,0,1 376,0,@4417 544,0,0 570,1,@435 640,0,0 695,0,0 707,1,@4419 726,0,0 750,1,@435 824,0,0 875,0,0 4408:C2,600|3b650c7303ff55248b7c240483ff0175708b0883f901750e52538b4208e83aebffff89c6eb60f6c1017503ff553883f9017e2a525389cb8b420c83c800e88aedf8fff7c00100000075048b30eb71b834cf7441ff552cbe01000000eb67be0100000089cf23fef7c7010000007503ff553889f72bf98d7f0170f452535189fbeb0ae977010000e93f0100008b421c83c800e836edf8ff83f80174718b7424088b5e148b561089d923caf6c1017503ff55388d4bff03ca70f68b042489cfeb0ae906010000e90101000023f8f7c7010000007503ff55388d79ff03f870f68b4d008d49e83b4d087303ff5520894d00c741fc05000000c7411001000000c7410c01000000c7410803000000eb05e92c000000897904c701f7ffffff8b75008d76f43b75087303ff5520897500c746fc02000000894e04c70601000000eb728b7424088b1c24ba0100000089d923caf6c1017503ff553889d12bcb8d490170f4f6c1017503ff553883f9017d02eb228b46188b78fc81e7ffffff008d7c3f015123cff6c101597503ff55383bcf7d02eb10b824ae744183c800ff552cb8010000008b5c48fe89d8f7c001000000750beb05e9130000008b30eb0fb834cf74410bc0ff552cbe0100000083c4048b5424048b0c248b420489cf23f8f7c7010000007503ff553889cf2bf88d7f0170f489f389f88b74240883c41056e9b791f8ff8b72088b0e83f9ff75088b7e048b4f04eb05b92c3e7c418b7c2404f7c7010000007503ff553889fe83ee0270f689c28b45008d40f03b45087303ff5520894500c740fc03000000897008895804891089ca8b0c2483c40851ff2290|@4411,63|30,1,@4369 62,1,@435 79,0,@222 87,0,0 94,0,0 146,1,@435 248,0,0 255,0,0 262,0,1 278,0,-5 311,0,0 325,0,0 400,0,@51 411,0,0 441,0,@222 451,0,0 505,1,@225 528,0,@4409 4409:O1|@4410 4410:C2,16|b8b82775410bc0ff552cb80100000090|@420,1|1,0,@418 11,0,0 4411:S77|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d636865636b466f724c6f6f70496e7374727328312970726576283329 4412:C2,28|3b650c7303ff55248b78088b3424893c248b58048b008b520456ff22|@4394,63| 4413:C2,28|3b650c7303ff55248b78088b3424893c248b58048b008b520456ff22|@4414,63| 4414:S77|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d636865636b466f724c6f6f70496e7374727328312970726576283129 4415:C2,20|3b650c7303ff55248b58048b008b5204ff220bc0|@4398,63| 4416:C2,56|3b650c7303ff55248b7d008d7ff83b7d087303ff5520897d00c747fc010000008b700489378b1c24893c2489d98b188b420451e93cbbfcff|@4400,63|52,1,@2889 4417:C2,28|3b650c7303ff55248b78088b3424893c248b58048b008b520456ff22|@4418,63| 4418:S62|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d66696c74657241726773283129 4419:C2,1148|8d7c24883b7d0c7303ff55288b7afc8b771cf7c6010000007503ff553889f383c30270f68b4d008d49e03b4d087303ff5520894d00c741fc07000000bf1c457c4189398b72ec8971188b7aac8979148b7a948979108b7acc89790c8959088b7ae88979045050525053516a01bb81000000b8170000000bc0ff15a0920408c700150000008b75008d76f43b75087303ff5520897500c746fc02000000894604c706ffffffff8b5d008d5bf83b5d087303ff5520895d00c743fc0100004089338d542410891a8d4c2410c74104010000008b45008d40f43b45087303ff5520894500c740fc020000008b7c241089388b7424148970048b5c240c8b53fc8b4d008d49ec3b4d087303ff5520894d00c741fc04000000bf584a7c4189398b72f889710c8941088b7c24048979048b7d008d7ff03b7d087303ff5520897d00c747fc03000000be944c7c4189378947088b53cc8957048b74240c8b5d008d5bf43b5d087303ff5520895d00c743fc02000000bab84d7c418913894b048b4d008d49f43b4d087303ff5520894d00c741fc02000000ba504e7c4189118b14248951048b55008d52f43b55087303ff5520895500c742fc020000005057ff76bc535152bee04e7c418932897a048b7d008d7ff43b7d087303ff5520897d00c747fc02000000be684f7c4189378947048b45008d40f83b45087303ff5520894500c740fc01000040c700030000008b7424248b5efc8b4b1483f901740850b803000000eb088b542424508b42f08b5424288b72fc8b5c24288b4d008d49f43b4d087303ff5520894d00c741fc02000000ba18507c4189118b53908951048b5c24288b55008d52f43b55087303ff5520895500c742fc020000005750ff761051ff73e8528b742404897204890a8b5c24408b4bfc8b75008d76f43b75087303ff5520897500c746fc020000008b7908897e0489168b5424408b42fc8b5c24408b4bfcff742420ff742420ff74241cff742444ff742428ff742424ff7424246a0156ff70048b5c244c8b4424508b51fcff128b7c2440508b77b4bb0100000083fe01750489daeb6f8b4c2444565389f38b41940bc0e8eee5f8ff83f801743f8b0424a8017503ff553889c783c70270f68b742404f7c6010000007503ff553889f383eb0270f689da89fb89d683c4083b650c7303ff5524eba6ba010000008b442404a8017503ff553889c783ef0270f68b1c2489feeb05e91500000083c4083b650c7303ff5524e973ffffffba010000008b4c24405223d1f6c2015a7503ff55383bd17e0e89d08b54244483c450e955fcffff8b042483c800e812d4ffff8b7c24448b77fc8b5e1cf6c3017503ff553889da83c20270f68b4d008d49dc3b4d087303ff5520894d00c741fc08000000c7411c01000000c7411801000000c74114ffffffff8b742440897110c7410c010000008951088b5fdc89590489018b55008d52f43b55087303ff5520895500c742fc02000000894a04c702f3ffffff8b4d008d49f83b4d087303ff5520894d00c741fc01000040c701010000008b45008d40f43b45087303ff5520894500c740fc02000000895004c7000100000083c450c383c800|@4441,63|61,0,@4420 109,0,64 114,0,11 122,0,I11 128,0,10 161,0,-1 204,0,0 277,0,@4428 324,0,@4430 368,0,@4432 402,0,@4434 447,0,@4436 481,0,@4438 516,0,1 537,0,1 587,0,@4440 755,0,0 782,1,@435 850,0,0 901,0,0 946,1,@4281 1002,0,0 1009,0,0 1016,0,-1 1030,0,0 1074,0,-7 1104,0,0 1137,0,0 4420:C2,860|3b650c7303ff55248b7c240483ff0175718b3083fe01756f8b4a0889df23f9f7c7010000007503ff553889df2bf98d7f0170f48b75008d76e83b75087303ff5520897500c746fc05000000c7461001000000897e0cc7460801000000c7460401000000c706f7ffffff89d823c1a8017503ff553889d82bc18d400170f48b7d00eb0ae978020000e9890000008d7fe83b7d087303ff5520897d00c747fc05000000c747100100000089470cc7470801000000c7470401000000c707f7ffffff8b5d008d5be83b5d087303ff5520895d00c743fc05000000897b108b420489430c897308bf94487c41897b04c703010000008b45008d40f43b45087303ff5520894500c740fc02000000895804c700ffffffffc20400f7c6010000007503ff553883fe017e57525389f38b420c90e836e3f8fff7c00100000075048b18eb0db834cf7441ff552cbb010000008b5424048b0c248b420889cf23f8f7c7010000007503ff553889cf2bf88d7f0170f489f88b74240883c41056e9d488f8ffb90100000089f723f9f7c7010000007503ff553889cf2bfe8d7f0170f452535689fb8b4210e8c2e2f8ff83f80174718b04248d54240c83c800e8f20100008b7424088b5c24048b560889d923caf6c1017503ff553889d92bca8d490170f48b7d008d7fe83b7d087303ff5520897d00c747fc05000000c7471001000000894f0cc7470803000000894704c707f7ffffff8b45008d40f43b45087303ff5520eb05e919000000894500c740fc02000000897804c7000100000083c40cc204008b7424088b1c24ba0100000089d923caf6c1017503ff553889d12bcb8d490170f4f6c1017503ff553883f9017d02eb228b46148b78fc81e7ffffff008d7c3f015123cff6c101597503ff55383bcf7d02eb0fb824ae74410bc0ff552cb8010000008b5c48fe89d8f7c00100000075048b10eb0eb834cf744190ff552cba010000008b4c24048b460889cf23f8f7c7010000007503ff553889cf2bf88d7f0170f4f7c7010000007503ff553889fb83c30270f689d989d389c88b7c240c83c41457e95187f8ff8b72188b0e83f9ff75088b7e048b4f04eb05b9cc497c418b7c2404f7c7010000007503ff553889fe83ee0270f689c28b45008d40f03b45087303ff5520894500c740fc03000000897008895804891089ca8b0c2483c40851ff2283c800|@4427,63|78,0,0 88,0,0 95,0,0 101,0,-5 164,0,0 174,0,0 181,0,0 187,0,-5 228,0,@4421 237,0,0 270,0,-1 302,1,@435 319,0,@222 327,0,0 376,1,@225 381,0,0 418,1,@435 438,1,@4423 501,0,0 511,0,1 520,0,-5 560,0,0 578,0,0 653,0,@51 663,0,0 686,0,@222 695,0,0 763,1,@225 786,0,@4425 4421:O1|@4422 4422:C2,16|b8b82775410bc0ff552cb80100000090|@420,1|1,0,@418 11,0,0 4423:C2,140|3b650c7303ff552483f8017506b801000000c38b7afcbe0100000089c323def6c3017503ff553889f32bd88d5b0170f452508b4710e882e0f8ff83f801742f8b1424f6c2017503ff553889d083c00270f68b542404e8a6ffffffa8017503ff553889c183e90270f689c883c408c38b1424f6c2017503ff553889d083c00270f68b54240483c408e974ffffff|@4424,63|14,0,0 23,0,0 54,1,@435 4424:S84|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d636865636b52656375727369766543616c6c73283129676574506172616d4e6f283129 4425:O1|@4426 4426:C2,16|b8b82775410bc0ff552cb80100000090|@420,1|1,0,@418 11,0,0 4427:S78|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d636865636b52656375727369766543616c6c7328312970726576283329 4428:C2,448|3b650c7303ff55248b7c240483ff0175708b30f7c6010000007503ff553883fe017e6352535689f38b42080bc0e8fadef8ff83f80175708b5c24088b5424048b4b0489d023c1a8017503ff553889d02bc18d400170f48b7d008d7fe83b7d087303ff5520897d00c747fc05000000c747100100000089470cc7470803000000eb0ae9f8000000e96e0000008b3424897704c707f7ffffff8b45008d40f43b45087303ff5520eb05e919000000894500c740fc02000000897804c7000100000083c40cc204008b5c24088b5424048b4b0489d723f9f7c7010000007503ff553889d72bf98d7f0170f48b1889f88b74240c83c41456e91b84f8ff8b4a0489df23f9f7c7010000007503ff553889df2bf98d7f0170f483fe017507bb03000000eb05bb0100000089de83f6028b5d008d5be83b5d087303ff5520895d00c743fc05000000c7431001000000897b0c8973088b38897b04c703f7ffffff8b45008d40f43b45087303ff5520894500c740fc02000000895804c70001000000c20400f7c7010000007503ff553889fe83ee0270f689c18b45008d40f03b45087303ff5520894500c740fc0300000089700889580489088b520c8b342483c40856ff220bc0|@4429,63|46,1,@435 113,0,0 123,0,1 147,0,-5 187,0,0 245,1,@225 282,0,1 289,0,0 325,0,0 342,0,-5 375,0,0 4429:S86|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d636865636b52656375727369766543616c6c732831296c6f63616c4e657741646472283329 4430:C2,176|3b650c7303ff55248b3383feff75088b4b048b7908eb0d83fe0375058b7b08eb038b7b048b0f83f9f775468b7704f7c6010000007503ff553883fe017f02eb2c8b4d008d49f83b4d087303ff5520894d00c741fc0100000089195250535189f38b42080bc0e826aefcffeb08525053eb035250538b4424088b7d008d7ff83b7d087303ff5520897d00c747fc010000008b342489378b5c240c897c240c89da8b5c24048b400483c40c52e9e1adfcff90|@4431,63|102,1,@2889 171,1,@2889 4431:S80|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d636865636b52656375727369766543616c6c73283129736574546162283229 4432:C2,28|3b650c7303ff55248b78088b3424893c248b58048b008b520456ff22|@4433,63| 4433:S86|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d636865636b52656375727369766543616c6c732831296c6f63616c4e657741646472283129 4434:C2,28|3b650c7303ff55248b78088b3424893c248b58048b008b520456ff22|@4435,63| 4435:S78|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d636865636b52656375727369766543616c6c7328312970726576283129 4436:C2,20|3b650c7303ff55248b58048b008b5204ff220bc0|@4437,63| 4437:S80|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d636865636b52656375727369766543616c6c73283129736574546162283129 4438:C2,56|3b650c7303ff55248b7d008d7ff83b7d087303ff5520897d00c747fc010000008b700489378b1c24893c2489d98b188b420451e984abfcff|@4439,63|52,1,@2889 4439:S83|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d636865636b52656375727369766543616c6c732831297365744e6577546162283129 4440:C2,28|3b650c7303ff55248b78088b3424893c248b58048b008b520456ff22|@4418,63| 4441:S71|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d636865636b52656375727369766543616c6c73283129 4442:S70|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d636865636b466f724c6f6f70496e73747273283129 4443:C2,364|3b650c7303ff552483fb017506b801000000c35250538b4294e876d8f8ff83f80175248b3c24f7c7010000007503ff553889fe83ee0270f689f38b4424048b54240883c40cebb98b7c24088b3424f7c6010000007503ff553883fe017d02eb228b5fac8b53fc81e2ffffff008d5412015223d6f6c2015a7503ff55383bf27d02eb0db824ae7441ff552cbb010000008b4c73fe89cbf7c30100000075048b03eb0eb834cf744190ff552cb8010000000bc0e8a6c6ffff8b7c240483ff01740489c6eb608b7424088b5e888b56b489d923caf6c1017503ff55388d4bff03ca70f68b3c2489cb23dff6c3017503ff553889cb2bdf8d5b0170f48b75008d76ec3b75087303ff5520897500c746fc04000000c7460c01000000894608895e04c706f9ffffff8b1424f6c2017503ff553889d183e90270f65689cb8b4424088b54240c90e8bafeffff8b7d008d7ff43b7d087303ff5520897d00c747fc020000008947048b3424893789f883c410c3|@4444,63|14,0,0 26,1,@435 131,0,@51 139,0,0 162,0,@222 171,0,0 178,1,@4281 275,0,0 287,0,-4 4444:S60|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d6d616b6544656373283229 4445:O1|@4446 4446:C2,16|b8b82775410bc0ff552cb80100000090|@420,1|1,0,@418 11,0,0 4447:C2,68|3b650c7303ff552483f80175048b4294c352ff308b40040bc0e8e2ffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0424890289d083c408c3|@1462,5| 4448:C2,68|3b650c7303ff552483f80175048b428cc352ff308b40040bc0e8e2ffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0424890289d083c408c3|@1462,5| 4449:C2,328|3b650c7303ff55248b7c240483ff01756b8b30f7c6010000007503ff553883fe017e5e525389f38b420883c800e8a2d5f8fff7c00100000075048b18eb0db834cf7441ff552cbb010000008b5424048b0c248b420489cf23f8f7c7010000007503ff553889cf2bf88d7f0170f489f88b74240883c41056e9407bf8ffe9850000008b4a0489df23f9f7c7010000007503ff553889df2bf98d7f0170f483fe017507bb03000000eb05bb0100000089de83f6028b5d008d5be83b5d087303ff5520895d00c743fc05000000c7431001000000897b0c8973088b38897b04c703f7ffffff8b45008d40f43b45087303ff5520894500c740fc02000000895804c70001000000c20400f7c7010000007503ff553889fe83ee0270f689c18b45008d40f03b45087303ff5520894500c740fc0300000089700889580489088b520c8b342483c40856ff220bc0|@4450,63|46,1,@435 63,0,@222 71,0,0 120,1,@225 162,0,1 169,0,0 205,0,0 222,0,-5 255,0,0 4450:S53|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d6973652832296c6f63616c4f6c6441646472283329 4451:C2,448|3b650c7303ff55248b7c240483ff0175708b30f7c6010000007503ff553883fe017e6352535689f38b42080bc0e8fed3f8ff83f80175708b5c24088b5424048b4b0489d023c1a8017503ff553889d02bc18d400170f48b7d008d7fe83b7d087303ff5520897d00c747fc05000000c747100100000089470cc7470803000000eb0ae9f8000000e96e0000008b3424897704c707f7ffffff8b45008d40f43b45087303ff5520eb05e919000000894500c740fc02000000897804c7000100000083c40cc204008b5c24088b5424048b4b0489d723f9f7c7010000007503ff553889d72bf98d7f0170f48b1889f88b74240c83c41456e91f79f8ff8b4a0489df23f9f7c7010000007503ff553889df2bf98d7f0170f483fe017507bb03000000eb05bb0100000089de83f6028b5d008d5be83b5d087303ff5520895d00c743fc05000000c7431001000000897b0c8973088b38897b04c703f7ffffff8b45008d40f43b45087303ff5520894500c740fc02000000895804c70001000000c20400f7c7010000007503ff553889fe83ee0270f689c18b45008d40f03b45087303ff5520894500c740fc0300000089700889580489088b520c8b342483c40856ff220bc0|@4452,63|46,1,@435 113,0,0 123,0,1 147,0,-5 187,0,0 245,1,@225 282,0,1 289,0,0 325,0,0 342,0,-5 375,0,0 4452:S53|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d6973652832296c6f63616c4e657741646472283329 4453:C2,176|3b650c7303ff55248b3383feff75088b4b048b7908eb0d83fe0375058b7b08eb038b7b048b0f83f9f775468b7704f7c6010000007503ff553883fe017f02eb2c8b4d008d49f83b4d087303ff5520894d00c741fc0100000089195250535189f38b42080bc0e84aa3fcffeb08525053eb035250538b4424088b7d008d7ff83b7d087303ff5520897d00c747fc010000008b342489378b5c240c897c240c89da8b5c24048b400483c40c52e905a3fcff90|@4454,63|102,1,@2889 171,1,@2889 4454:S47|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229736574546162283229 4455:C2,28|3b650c7303ff55248b78088b3424893c248b58048b008b520456ff22|@4456,63| 4456:S53|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d6973652832296c6f63616c4e657741646472283129 4457:C2,28|3b650c7303ff55248b78088b3424893c248b58048b008b520456ff22|@4458,63| 4458:S53|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d6973652832296c6f63616c4f6c6441646472283129 4459:C2,20|3b650c7303ff55248b58048b008b5204ff220bc0|@4460,63| 4460:S47|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229736574546162283129 4461:C2,56|3b650c7303ff55248b7d008d7ff83b7d087303ff5520897d00c747fc010000008b700489378b1c24893c2489d98b188b420451e920a1fcff|@4462,63|52,1,@2889 4462:S50|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d6973652832297365744e6577546162283129 4463:C2,316|8b7a0889de23f7f7c6010000007503ff553889de2bf78d760170f48b580889d923cef6c1017503ff553889d92bce8d490170f48b72048b1e52ff30ff70045183fb017507ba01000000eb5b8b0b8b0183f8f7753d8b7c24088b7104560bf7f7c6010000005e7503ff55383bfe75448b14248b790c520bd7f6c2015a7503ff55383bd7752e8b5424048b41083bd07523eb1ab8b45b7c4190ff552cbf0100000083ff017507eb0ce919000000ba03000000eb128b5b043b650c7303ff5524eb80ba0100000083fa017409b80100000083c410c38b7c240c8b75008d76e83b75087303ff5520897500c746fc05000000c74610010000008b1c24895e0c8b5424048956088b4c2408894e04c706f7ffffff8b47048b188b55008d52f43b55087303ff5520895500c742fc02000000895a0489328910b80100000083c410c3|@4466,63|69,0,0 146,0,@4464 155,0,0 172,0,1 192,0,0 202,0,0 241,0,0 267,0,-5 308,0,0 4464:O3|@7320,@224,@4465 4465:S25|66696e644e6f6e4c6f63616c3a206e6f742045787472616374 4466:S52|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d6973652832296164644e6f6e4c6f63616c283229 4467:C2,268|3b650c7303ff552489c78b45008d40f03b45087303ff5520894500c740fc030000008958088b74240489700489385253ff77048b52080bc0ff128b1083faff75088b48048b5908eb0d83fa0375058b5808eb038b58048b0b83f9f7755f8b7d008d7fec3b7d087303ff5520897d00c747fc040000008b731089770c8b530c8957088b43088947048b4b04890f83f901755683f80175358b4c240483f901750a8b0c2483f9017402eb188b4c2408538b5c241489f88b510490ff12eb06e942000000538b042483c410c204008b4c2408538b5c241489f88b510483c800ff128b042483c410c204008b4c2408538b5c241489f88b510483c800ff128b042483c410c2040089d883c40cc2040090|@4468,63| 4468:S55|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636865636b526563757273696f6e283329 4469:C2,28|3b650c7303ff55248b78088b3424893c248b58048b008b520456ff22|@4470,63| 4470:S55|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636865636b526563757273696f6e283129 4471:O2|@4473,@4472 4472:O2|@4484,@4471 4473:C2,1352|3b650c7303ff55248b38f7c701000000741583ffeb7c1583ff177f15be525e7c418d74be54ffe6e9c2000000e9bd000000e9b8000000e911040000909090e90b030000909090e920020000909090e9d7020000909090e99f010000909090e911030000909090e96b010000909090e934010000909090e947010000909090e9d2000000909090e966020000909090e9ce000000909090e953000000909090e9db010000909090e99b030000909090e973010000909090e960040000909090e919010000909090e9a3020000909090e988000000909090e9d4000000909090e942030000909090e9fa0300009090908b780452ff770cff77108b47080bc0e8fefeffff508b4424048b54240c0bc0e8eefeffff8b342489f223d0f6c2017503ff55388d56ff03d070f68b4c240c528b44240c8b5104ff128b3c2489fe23f0f7c6010000007503ff55388d77ff03f070f689f083c414c3b801000000c3b803000000c352ff70088b400490e892feffff508b4424048b5424080bc0e882feffff8b1c2489da23d0f6c2017503ff55388d53ff03d070f6f6c2017503ff553889d083c00270f683c40cc38b4008e951feffff528b40048d5424040bc0e8a603000083c404c38b400483c800ff15609e040889c383f30289d8c3b803000000c3528b400490e81afeffffa8017503ff553889c383c30270f689d883c404c38b580452ff73108b030bc0e8f6fdffff8b142489c123caf6c1017503ff55388d48ff03ca70f689c883c408c352ff70048b4008e8cefdffff508b4424048d54240c0bc0e8ba0300008b1c2489da23d0f6c2017503ff55388d53ff03d070f6f6c2017503ff553889d083c00470f683c40cc3528b40048d5424040bc0e8ee03000083c404c352ff7008ff700c8b400490e872fdffff508b4424088b54240c0bc0e862fdffff8b1c2489da23d0f6c2017503ff55388d53ff03d070f6528b4424088b542410e83efdffff8b0c2489cf23f8f7c7010000007503ff55388d79ff03f870f6f7c7010000007503ff553889f883c00470f683c414c352ff70088b400490e802fdffff508b4424048d54240c0bc0e8c60300008b1c2489da23d0f6c2017503ff55388d53ff03d070f689d083c40cc3528b40048d54240483c800e806040000a8017503ff553889c383c30270f689d883c404c3528b400483c800e8a6fcffffa8017503ff553889c383c30270f689d883c404c3b803000000c352ff7008ff700c8b400483c800e87afcffff508b4424088b54240c0bc0e86afcffff8b1c2489da23d0f6c2017503ff55388d53ff03d070f6528b4424088d542414e8f20300008b0c2489cf23f8f7c7010000007503ff55388d79ff03f870f657be010000008b5c240c83fb01750489f2eb26f7c6010000007503ff553889f183c10270f68b5b0489ce3b650c7303ff5524ebd6ba010000008b0c2489c823c2a8017503ff55388d41ff03c270f683c418c3528b40048d542404e8e6030000a8017503ff553889c383c30470f689d883c404c3b803000000c38b58088b0b83f915753f52ff700c8b43048d542408e81e040000508b4424048b5424080bc0e88afbffff8b3c2489fe23f0f7c6010000007503ff55388d77ff03f070f689f083c40cc352ff7004538b400ce85efbffff508b4424048b54240c0bc0e84efbffff8b3c2489fe23f0f7c6010000007503ff55388d77ff03f070f68b5c240889f023c3a8017503ff55388d46ff03c370f683c410c352ff70088b400490e80efbffff8b1c2489da23d0f6c2017503ff55388d53ff03d070f6f6c2017503ff553889d083c00470f683c408c38b58048b0b83f9ff750b8b7b048b4708e9d0faffff83f90375088b4308e9c3faffff8b4304e9bbfaffff83c800|@4483,63|29,0,$4473+54 342,0,0 348,0,1 442,1,@4474 458,0,I105 471,0,1 574,1,@4476 630,1,@4477 778,1,@4478 822,1,@4479 879,0,1 950,1,@4480 981,0,0 1032,0,0 1070,1,@4481 1095,0,1 1122,1,@4482 4474:C2,80|3b650c7303ff552483f8017506b801000000c352ff70048b008b52fcff12508b4424048b5424080bc0e8d2ffffff8b3c2489fe23f0f7c6010000007503ff55388d77ff03f070f689f083c40cc383c800|@4475,63|14,0,0 4475:S34|42617365436f6465547265652e6973536d616c6c28322973697a654c697374283129 4476:C2,80|3b650c7303ff552483f8017506b801000000c352ff70048b008b52fcff12508b4424048b5424080bc0e8d2ffffff8b3c2489fe23f0f7c6010000007503ff55388d77ff03f070f689f083c40cc383c800|@4475,63|14,0,0 4477:C2,80|3b650c7303ff552483f8017506b801000000c352ff70048b008b52fcff12508b4424048b5424080bc0e8d2ffffff8b3c2489fe23f0f7c6010000007503ff55388d77ff03f070f689f083c40cc383c800|@4475,63|14,0,0 4478:C2,80|3b650c7303ff552483f8017506b801000000c352ff70048b008b52fcff12508b4424048b5424080bc0e8d2ffffff8b3c2489fe23f0f7c6010000007503ff55388d77ff03f070f689f083c40cc383c800|@4475,63|14,0,0 4479:C2,80|3b650c7303ff552483f8017506b801000000c352ff70048b008b52fcff12508b4424048b5424080bc0e8d2ffffff8b3c2489fe23f0f7c6010000007503ff55388d77ff03f070f689f083c40cc383c800|@4475,63|14,0,0 4480:C2,80|3b650c7303ff552483f8017506b801000000c352ff70048b008b52fcff12508b4424048b5424080bc0e8d2ffffff8b3c2489fe23f0f7c6010000007503ff55388d77ff03f070f689f083c40cc383c800|@4475,63|14,0,0 4481:C2,80|3b650c7303ff552483f8017506b801000000c352ff70048b008b52fcff12508b4424048b5424080bc0e8d2ffffff8b3c2489fe23f0f7c6010000007503ff55388d77ff03f070f689f083c40cc383c800|@4475,63|14,0,0 4482:C2,80|3b650c7303ff552483f8017506b801000000c352ff70048b008b52fcff12508b4424048b5424080bc0e8d2ffffff8b3c2489fe23f0f7c6010000007503ff55388d77ff03f070f689f083c40cc383c800|@4475,63|14,0,0 4483:S30|42617365436f6465547265652e6973536d616c6c28322973697a65283129 4484:C2,164|3b650c7303ff552483f8017506b801000000c38b3852ff7704ff70048b078b520483c800ff1250be010000008b5c240883fb01750489f2eb26f7c6010000007503ff553889f183c10270f68b5b0489ce3b650c7303ff5524ebd6ba010000008b0c2489c823c2a8017503ff55388d41ff03c270f6508b4424088b542410e87effffff8b3c2489fe23f0f7c6010000007503ff55388d77ff03f070f689f083c414c383c800|@4485,63|14,0,0 40,0,0 91,0,0 4485:S38|42617365436f6465547265652e6973536d616c6c28322973697a65436173654c697374283129 4486:C2,68|3b650c7303ff552483f80175048b42e4c352ff308b40040bc0e8e2ffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0424890289d083c408c3|@1462,5| 4487:C2,12|8b7a04c707030000008b00c3|@4488,37|5,0,1 4488:S51|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d69736528322966696c74657241726773283129 4489:C2,68|3b650c7303ff552483f80175048b42acc352ff308b40040bc0e8e2ffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0424890289d083c408c3|@1462,5| 4490:C2,84|3b650c7303ff552483f8017506b801000000c352ff70048b00e852000000508b4424048b5424080bc0e8d2ffffff8b7d008d7ff43b7d087303ff5520897d00c747fc020000008947048b3424893789f883c40cc3|@413,63|14,0,0 26,1,@4491 4491:C2,288|3b650c7303ff55248b3883fff9757252ff7004bb010000008b40088b52fc83c800e85a80ffff8b7424048b5efc8b53188b0af6c1017503ff553889cf83c70270f6893a8b7d008d7fe83b7d087303ff5520897d00c747fc05000000c7471001000000c7470c01000000c7470803000000894f04c707f7ffffff8b75008d76f4eb05e98c0000003b75087303ff5520897500c746fc02000000897e04c706010000008b7c24048b5ffc89c28b45008d40f43b45087303ff5520894500c740fc020000008970048b3424893052518b532490ff128b44240483c800e8b6adffff89c38b45008d40ec3b45087303ff5520894500c740fc04000000c7400c010000008958088b1424895004c700f9ffffff83c410c3b8f46a7c41ff552cb80100000090|@4494,63|20,0,0 34,1,@4280 94,0,0 101,0,0 108,0,1 117,0,-5 157,0,0 218,1,@4281 251,0,0 266,0,-4 275,0,@4492 283,0,0 4492:O3|@7320,@224,@4493 4493:S19|6465636c4172673a206e6f74204465636c6172 4494:S48|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d6973652832296465636c417267283129 4495:C2,12|8b7a04c707030000008b00c3|@4488,37|5,0,1 4496:O3|@7320,@224,@4497 4497:S26|4c6f6f703a206d69736d61746368656420426567696e4c6f6f70 4498:C2,100|3b650c7303ff552483f8017506b801000000c352ff7004bb010000008b008b52fce85e7effff83c800e86aacffff508b4424048b5424080bc0e8c2ffffff8b7d008d7ff43b7d087303ff5520897d00c747fc020000008947048b3424893789f883c40cc3|@413,63|14,0,0 24,0,0 34,1,@4280 42,1,@4281 4499:O3|@7320,@224,@4500 4500:S30|4c6f6f703a206e6f74206174207461696c206f6620426567696e4c6f6f70 4501:O2|0,@4502 4502:O2|9,0 4503:C2,744|3b650c7303ff55248b7ae88b0f83f9ff75078b77048b36eb0f83f90375058b7704eb05be010000008b7ae48b0f83f9ff75078b4f048b09eb0f83f90375058b4f04eb05b9010000005052515389f38b44241c8d54241083c800e8a602000050ff7424208b5c24088b44241c8d5424140bc0e88e0200008b7c24088b77fc8b5e188b138b4c241489d723f9f7c7010000007503ff55388d7aff03f970f6893b8b7d008d7ff03b7d087303ff5520897d00c747fc03000000be18757c4189378957088b5c240c895f04505289fb89c8e8dad3feff8b55008d52f43b55087303ff5520895500c742fc02000000b928767c41890a8b3c24897a045089d38b44242083c800e8a6d3feff8b75008d76e83b75087303ff5520897500c746fc05000000c7461001000000c7460c01000000c74608030000008b5c2418895e04c706f7ffffff8b55008d52f03b55087303ff5520895500c742fc030000008b4c2420894a08897204c702170000008b7d008d7ff43b7d087303ff5520897d00c747fc02000000894704c707150000008b75008d76f43b75087303ff5520897500c746fc02000000894e04c706070000008b45008d40ec3b45087303ff5520894500c740fc04000000c7400c01000000897008895804c700f9ffffff8b7424148b5d008d5bec3b5d087303ff5520895d00c743fc040000008b4c2408894b0c8b4c240c894b088b4eec894b04c703050000008b75008d76f43b75087303ff5520897500c746fc020000008b0c24894e04891e8b5d008d5bf43b5d087303ff5520895d00c743fc0200000089730489038b4d008d49f83b4d087303ff5520894d00c741fc01000040c701010000008b4424148b70fc8b45008d40f43b45087303ff5520894500c740fc0200000052575351ff761c50bee4767c4189308b7424048970048b75008d76e83b75087303ff5520897500c746fc05000000897e10894e0c895608894604891e8b45008d40f43b45087303ff5520894500c740fc02000000897004c700ffffffff83c434c21000|@4522,63|36,0,0 68,0,0 90,1,@4504 114,1,@4504 183,0,@4516 206,1,@3873 235,0,@4518 258,1,@3873 289,0,0 296,0,0 303,0,1 316,0,-5 356,0,11 389,0,10 422,0,3 453,0,0 465,0,-4 519,0,2 610,0,0 654,0,@4520 734,0,-1 4504:C2,228|3b650c7303ff55248b7c2404f7c701000000751b5289de8b1f89f00bc0e8de0000008b5c240483c40c53e91d1affff8b75008d76e83b75087303ff5520897500c746fc05000000c7461001000000c7460c01000000c74608030000008b4afc894e04c706f7ffffff8b7d008d7ff43b7d087303ff5520897d00c747fc02000000894704c7071500000053ff720489fb89f0e84a0200008b75008d76f43b75087303ff5520897500c746fc02000000c7460401000000890683fe0175058b0424eb14568b4424048d54240883c800e80e04000083c4048b5c240483c40c53e96a19ffff0bc0|@4515,63|30,1,@4505 43,1,@4058 74,0,0 81,0,0 88,0,1 100,0,-5 133,0,10 146,1,@4509 177,0,0 206,1,@4514 222,1,@4058 4505:C2,324|3b650c7303ff552483f801750eb8e8717c4190ff552cb8010000008b388b3783fef975708b4f04510bcbf6c101597503ff55383bcb75628b5afc510bcbf6c101597503ff55383bcb75048b4004c38b75008d76e83b75087303ff5520897500c746fc05000000c7461001000000c7460c01000000c7460803000000895e04c706f7ffffff8b4d008d49ec3b4d087303ff5520eb0ae97b000000e943000000894d00c741fc04000000c7410c010000008971088b7704897104c701f9ffffff8b7d008d7ff43b7d087303ff5520897d00c747fc020000008b7004897704890f89f8c352578b400483c800e812ffffff8b7d008d7ff43b7d087303ff5520897d00c747fc020000008947048b3424893789f883c408c352578b4004e8e2feffff8b5d008d5bf43b5d087303ff5520895d00c743fc020000008943048b1424891389d883c408c3|@4508,63|14,0,@4506 23,0,0 105,0,0 112,0,0 119,0,1 128,0,-5 171,0,0 186,0,-4 4506:O3|@7320,@224,@4507 4507:S19|7265706c616365436f6e7461696e6572446563 4508:S76|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f6d62696e655475706c65732836297265706c616365436f6e7461696e6572446563283229 4509:C2,228|3b650c7303ff55248b3b83ff05755d50ff7304ff730cff7424108b5b08e8deffffff50ff7424148b5c24088b4424100bc0e8caffffff89c38b45008d40ec3b45087303ff5520894500c740fc0400000089580c8b3c248978088b5c2408895804c7000500000083c410c2040083ff137536508b43048d542404e88200000089c68b45008d40f43b45087303ff5520894500c740fc02000000897004c7001300000083c404c2040083ffed750589d8c2040089c68b45008d40ec3b45087303ff5520894500c740fc0400000089700c8958088b542404895004c700ebffffffc2040083c800|@4513,63|98,0,2 122,1,@4510 157,0,9 218,0,-11 4510:C2,136|3b650c7303ff552483f801750eb878d1764190ff552cb8010000008b780483ff017533ff72048b188b42fcba0c747c41ff1289c68b45008d40f43b45087303ff5520894500c740fc02000000c74004010000008930c352ff308b400490e89effffff8b75008d76f43b75087303ff5520897500c746fc020000008946048b1c24891e89f083c408c3|@4512,63|14,0,@1640 23,0,0 44,0,@4511 79,0,0 4511:O1|@4509 4512:S40|434f44455452454528292e6d6b536574436f6e7461696e65722833296170706c794c617374283129 4513:S28|434f44455452454528292e6d6b536574436f6e7461696e6572283329 4514:C2,68|3b650c7303ff552483f80175048b42f8c352ff308b40040bc0e8e2ffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0424890289d083c408c3|@1462,5| 4515:S69|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f6d62696e655475706c65732836296372656174654272616e6368283329 4516:C2,164|8b7a0889c623f7f7c6010000007503ff55388d70ff03f770f68b5d008d5be83b5d087303ff5520895d00c743fc05000000c7431001000000c7430c01000000c74308030000008b4a04894b04c703f7ffffff8b7d008d7ff03b7d087303ff5520897d00c747fc03000000894708895f04c7070d0000008b45008d40ec3b45087303ff5520894500c740fc04000000c7400c01000000897808897004c700f9ffffffc30bc0|@4517,63|52,0,0 59,0,0 66,0,1 78,0,-5 114,0,6 145,0,0 157,0,-4 4517:S69|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f6d62696e655475706c65732836297370656369616c446563732d283129 4518:C2,80|8b7a0489c623f7f7c6010000007503ff55388d70ff03f770f68b45008d40e83b45087303ff5520894500c740fc05000000c7401001000000c7400c01000000c7400803000000897004c700f7ffffffc3|@4519,53|52,0,0 59,0,0 66,0,1 75,0,-5 4519:S72|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f6d62696e655475706c65732836297370656369616c456e74726965732d283129 4520:C2,136|3b650c7303ff55248b388b75008d76e83b75087303ff5520897500c746fc050000008b5f0c895e108b4f08894e0c8b4f04894e088b0f894e04c706f7ffffff8b4d008d49f43b4d087303ff5520894d00c741fc02000000897104c701010000008b70048b420489f723f8f7c7010000007503ff553889f72bf88d7f0170f489cb89f8e90158f8ff90|@4521,63|59,0,-5 92,0,0 131,1,@225 4521:S60|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f6d62696e655475706c6573283629656e76283129 4522:S54|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f6d62696e655475706c6573283629 4523:C2,616|3b650c7303ff55245283f8017509b86c6c7c4183c404c38b388b3783fef97516ff77048b5f088b40048d542408e85202000083c404c383feef75138b5f048b40048d542404e8ea04000083c404c38b580483fb0175108b5af88b008b52fc83c404e9c671ffff53bb010000008b008b52fce8b671ffff508b4424048b5424080bc0e87affffff8b0883f9ff75088b78048b5708eb0d83f90375058b5008eb038b500483f9ff75088b70048b7e10eb05bff825754183f9ff75088b58048b7304eb05be44947c418b1c248b0b83f9ff750b8b1c248b4b04508b01eb1883f903750a8b1c2489c18b4304eb0850b801000000eb01518b5c24048b0b83f9ff75088b4b048b4908eb0d83f90375058b4b08eb038b4b048b1c245257565051ff338b1c2483fbff750b8b5c24188b53048b02eb1383fb0375098b5c24188b4304eb05b8010000008b55008d52f43b55087303ff5520895500c742fc02000000894204890a83fa0175068b4c2408eb14528b44240c8d54242c90e8f21a000089c183c4048b4424188b1083faff75088b58048b5b0ceb1e8b5d008d5bf83b5d087303ff5520895d00c743fc01000040c703010000008b7d008d7fe83b7d087303ff5520897d00c747fc050000008b742410897710895f0c8b5c2414895f088b5c240c895f04890f8b1e83fbfd755a83f90175298b45008d40f43b45087303ff5520894500c740fc020000008b542414895004c7000100000083c428c38b45008d40f03b45087303ff5520894500c740fc030000008b542414895008894804c7000300000083c428c38b45008d40f43b45087303ff5520894500c740fc02000000897804c700ffffffff83c428c3|@4568,63|15,0,@4501 46,1,@4524 70,1,@4529 98,1,@4280 104,0,0 114,1,@4280 176,0,@408 194,0,@4565 236,0,0 319,0,0 374,1,@4567 428,0,0 527,0,0 571,0,1 608,0,-1 4524:C2,444|3b650c7303ff55248b7afc8b77fc5250ff762489d9bb0100000089c889f283c800e8826fffffff7424106a0389c38b4424088b7c24108b77fc8b56fc90e882aaffff508b4424088b5c240c8b53fc83c800e826fdffff8b142483fa01750683c410c204008b3883ffff75088b70048b4e08eb0d83ff0375058b4808eb038b480483ffff75088b58048b7310eb05bef825754183ffff75088b58048b5b04eb05bb687c7c4183ffff75098b500489c78b02eb1383ff03750789c78b4704eb0789c7b80100000083f80175058b1424eb14508b4424048d54241490e82e01000089c283c4048b0783f8ff75088b47048b400ceb1e8b45008d40f83b45087303ff5520894500c740fc01000040c700010000008b7d008d7fe83b7d087303ff5520897d00c747fc0500000089771089470c894f08895f0489178b1e83fbfd755683fa0175278b45008d40f43b45087303ff5520894500c740fc02000000894804c7000100000083c410c204008b45008d40f03b45087303ff5520894500c740fc03000000894808895004c7000300000083c410c204008b45008d40f43b45087303ff5520894500c740fc02000000897804c700ffffffff83c410c204000bc0|@4528,63|22,0,0 34,1,@4280 62,1,@4368 82,1,@4523 142,0,@408 160,0,@4525 193,0,0 218,1,@4527 268,0,0 351,0,0 393,0,1 432,0,-1 4525:O1|@4526 4526:C2,16|b8b82775410bc0ff552cb80100000090|@420,1|1,0,@418 11,0,0 4527:C2,68|3b650c7303ff552483f80175048b42ecc352ff308b40040bc0e8e2ffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0424890289d083c408c3|@1462,5| 4528:S59|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70794465636c61726174696f6e732831292f32 4529:C2,1396|8d7c24b03b7d0c7303ff55285250bf1814754183fb01750489feeb25ff73048b1389fb89d0e86605000089c78b1c2483c4043b650c7303ff5524ebd7be010000008b5c24048b53fc8b4afc8b41188b38ff36ff7604578b4424048d54241483c800e89a0600008b7424108b5efc8b53fc8b4a188b3950578b44241083f8017507bf01000000eb718b308b1e83fbf9754c8b5424188b4afc8b79fcff7004ff7604ff7724bb010000008b460889fae8466cffff89c68b45008d40f43b45087303ff5520894500c740fc020000008970048b5c240489188b1424ff12eb0e8b5004b890857c4183c800ff552c8b44240883c40c3b650c730aeb05e90d000000ff5524e976ffffffbf010000008b75008d76f83b75087303ff5520897500c746fc01000040c706010000008b5d008d5bec3b5d087303ff5520895d00c743fc04000000bac0857c4189138b4c2408894b0c8b04248943088973045356b8010000008d54242483c800e80a08000050bf0300000083f801750489feeb378b188b0b83f9f975158b73088b1683fafb750489faeb0cba01000000eb05ba0100000089d78b40043b650c7303ff5524ebc5be010000008b5c24048b1383fa017402eb0783fe017502eb058b0c24eb608b0424bac08e7c4183c800ff128b4d008d49f43b4d087303ff5520894d00c741fc020000008b3c24897904c701efffffff8b75008d76f43b75087303ff5520897500c746fc02000000894604c70615000000515683f801750cbb03000000eb25e95e0100008b108b0a83f9fb75128b40043b650c7303ff5524ebd9bb01000000bb0100000083fb0174308b042483c800e86a60fcff89c78b45008d40f43b45087303ff5520894500c740fc02000000897804c700fbffffffeb038b04248b7d008d7ff43b7d087303ff5520897d00c747fc02000000c747040100000089078b75008d76f43b75087303ff5520897500c746fc02000000897e048b5c2404891e8b55008d52f43b55087303ff5520895500c742fc02000000897204c702130000008b4c242c8b41fc8b78fc89d08b5710ff12508b7424248b5c241cba18147541f7c6010000007561f7c301000000755e5050ff7604ff7304528d44240c508b1b8b068d54244c83c800e8320f00008b7d008d7ff43b7d087303ff5520897d00c747fc020000008b74240889378b5c240c895f0489fa8b1c248b74240483c4103b650c7303ff5524eb97e90e000000e905000000b90100000089d1eb0289d18b490483c40c518b4424248b7c24288b57fc90e82ef7ffff8b1c2483fb017507be01000000eb7050508b530483fa01751189e18b3b893989e6c7460401000000eb2e8b4d008d49f43b4d087303ff5520894d00c741fc02000000895904c701efffffff89e7890f89e6c74604010000008b75008d76f43b75087303ff5520897500c746fc020000008b0c24890e8b7c2404897e0483c4088b1083faff75088b48048b5908eb0d83fa0375058b5808eb038b580483faff75088b78048b4f10eb05b9f825754183faff75088b78048b7f04eb05bf6c937c4183faff75088b5004508b02eb1483fa03750789c28b4204eb0789c2b8010000005283f801750489f2eb145089f08d54243483c800e8ca11000089c283c4048b04248b3083feff75088b70048b760ceb1e8b75008d76f83b75087303ff5520897500c746fc01000040c706010000008b45008d40e83b45087303ff5520894500c740fc0500000089481089700c89580889780489108b3983fffd755283fa0175258b45008d40f43b45087303ff5520894500c740fc02000000895804c7000100000083c430c38b45008d40f03b45087303ff5520894500c740fc03000000895808895004c7000300000083c430c389c68b45008d40f43b45087303ff5520894500c740fc02000000897004c700ffffffff83c430c383c800|@4564,63|15,0,@326 38,1,@4530 61,0,0 98,1,@4532 129,0,0 164,0,0 174,1,@4280 224,0,@4533 262,0,0 292,0,0 321,0,@4535 346,0,0 358,1,@4537 364,0,1 401,0,0 408,0,0 428,0,0 461,0,@4551 502,0,-9 535,0,10 547,0,1 581,0,0 586,0,0 602,1,@2837 637,0,-3 673,0,0 741,0,9 772,0,@326 818,1,@4555 892,0,0 922,1,@4523 935,0,0 962,0,0 997,0,-9 1010,0,0 1095,0,@408 1113,0,@4561 1145,0,0 1170,1,@4563 1223,0,0 1306,0,0 1346,0,1 1385,0,-1 4530:C2,260|50508b3883fff9756f8b70088b1683faf3756a8b4e048b791483ff01752d8b55008d52f43b55087303ff5520895500c742fc020000008b33897204890289e0891089e28b4304894204eb5f8b55008d52f43b55087303ff5520895500c742fc020000008b7304897204890289e08b33893089e0895004eb62e9320000008b4d008d49f43b4d087303ff5520894d00c741fc020000008b7b04897904890189e78b03890789e7894f04eb30e92b0000008b75008d76f43b75087303ff5520897500c746fc020000008b5304895604890689e18b13891189e18971048b45008d40f43b45087303ff5520894500c740fc020000008b3c2489388b74240489700483c408c30bc0|@4531,63| 4531:S70|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70794465636c61726174696f6e732831293c7061747465726e3e2d283229 4532:C2,308|3b650c7303ff552483f8017506b801000000c38b388b1f83fbf975738b4afc8b71fc8b5efc8b4b188b318b5afc8b4bfc8b59fc8b4d008d49e83b4d087303ff5520894d00c741fc05000000c7411001000000c7410c01000000c7410803000000897104c701f7ffffff52ff7004ff770456ff7324518b5d008d5bf43b5d087303ff5520895d00c743fc02000000eb05e95b000000894b04c703010000008b45008d40f43b45087303ff5520894500c740fc020000008958048b54240c89108b5424040bc0ff128b4c24148b41fc8b78fc8b77fc8b5e188b13f6c2017503ff553889d183c10270f6890b8b742408eb108b4804b890857c41ff552cbe01000000568b4424148b54241890e8f2feffff8b7d008d7ff43b7d087303ff5520897d00c747fc020000008947048b3424893789f883c41cc3|@413,63|14,0,0 78,0,0 85,0,0 92,0,1 101,0,-5 153,0,0 243,0,@4533 251,0,0 4533:O3|@7320,@224,@4534 4534:S22|6d757475616c446563733a206e6f74204465636c6172 4535:C2,136|8b3883fff7755d8b700883fe03755a8b580c83fb01753e8b48048b7a0c5123cff6c101597503ff55383bcf7c198b72085123cef6c101597503ff55383bce7d06b801000000c38b7204c70603000000b801000000c38b4a04c70103000000b801000000c3e90f0000008b5a04c70303000000b801000000c38b7204c70603000000b801000000c390|@4536,63|65,0,0 75,0,1 80,0,0 90,0,1 95,0,0 110,0,1 115,0,0 125,0,1 130,0,0 4536:S72|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70794465636c61726174696f6e73283129636865636b436c6f73757265283129 4537:C2,56|3b650c7303ff5524528b5ae88b42f08d5424040bc0e83a0000008b780483ff01740db8010000008b142483c404ebd18b0083c404c383c800|@4550,63|22,1,@4538 35,0,0 4538:C2,128|3b650c7303ff5524f7c001000000755ef7c301000000755b52ff30ff338b5b048b40040bc0e8d6ffffff5050508d7c2404578b5c24108b4424148b7424188b56fce8560000008b45008d40f43b45087303ff5520894500c740fc020000008b1c2489188b54240489500483c414c3e906000000b818147541c3b818147541c390|@4549,63|66,1,@4539 116,0,@326 122,0,@326 4539:C2,1388|3b650c7303ff55248b3883fff975718b7424088b4afc8b79fc8b4ffc8b7d008d7fec3b7d087303ff5520897d00c747fc04000000c7470c01000000c7470801000000c74704030000005253ff7004ff7008ff36ff7604ff7128578b4c2414890f8b44241c8b70fc8b56fc8b5afc8b45008d40f03b45087303ff5520894500eb05e9d8040000c740fc03000000c74008010000008b4b1c89480489388b54240490ff128b3083feff75088b58048b7b08eb0d83fe0375058b7808eb038b78048b1f83fbfb75688b55008d52ec3b55087303ff5520895500c742fc04000000c7420c01000000897a088b4c2418894a04c702f9ffffff8b4d008d49f43b4d087303ff5520894d00c741fc020000008b44240c89410489118b742424890e8b542408895604b80100000083c420c208008b54241c8b4afc8b71fc8b5efc89c78b45008d40f43b45087303ff5520894500c740fc02000000ba2c8d7c418950048b5424148910578b53240bc0ff128b4c24208b41fc8b78fc8b77fc8b45008d40f43b45087303ff5520894500c740fc02000000bb2c8d7c418958048b54241c89108b5620ff12bb010000008b4424148b4c24208b79fc8b77fc8b56fc90e8d660ffff8b1083faff75088b48048b5908eb0d83fa0375058b5808eb038b580483faff75088b78048b4f10eb05b9f82575418b3383fefb7507bf03000000eb05bf0100000083fefb750689c289d8eb7483fef375748b53048b74242050535157ff76e08b720c83fe017502eb1bff76048b068b542404ff128b342483c4043b650c7303ff5524ebde8b45008d40e83b45087303ff5520894500c740fc05000000c7401001000000c7400c01000000c74008030000008b5c2430895804c700f7ffffffeb15e91500000089c2b8508d7c4190ff552cb80100000083c404eb04525351578b4c24308b79fc8b77fc8b5efc8b55008d52f43b55087303ff5520895500c742fc02000000894204c70201000000508b45008d40f43b45087303ff5520894500c740fc020000008950048b54243089108b532090ff128b4c24088b3983fff3752c8b71048b5e1483fbff7507b8f8257541eb328b5424108b0283f8ff75088b7a048b4710eb1fb8f8257541eb188b7424108b1e83fbff75088b56048b4210eb05b8f82575418b1083fafd742d8b7c24148b1f83fbff75088b4f048b7110eb05bef82575418b0e83f9fd7507b903000000eb0cb901000000eb05b9010000008b7c24348b77fc8b5efc8b53fc8b7c24108b3783feff750e8b5c24108b7b0489c68b4704eb0850b88c8d7c41eb01568b5c24148b3383feff75078b7b048b3feb0f83fe0375058b7b04eb05bf0100000083feff75098b7304508b460ceb1f508b45008d40f83b45087303ff5520894500c740fc01000040c700010000008b5d008d5be83b5d087303ff5520895d00c743fc050000008b74240489731089430c8b4424088943088b0424894304893b8b0683f8fd755683ff0175278b45008d40f43b45087303ff5520894500c740fc020000008b7c2408897804c70001000000eb4b8b45008d40f03b45087303ff5520894500c740fc030000008b742408897008897804c70003000000eb218b45008d40f43b45087303ff5520894500c740fc02000000895804c700ffffffff89c78b45008d40f43b45087303ff5520894500c740fc020000008978048b7424348930518b522483c800ff128b5d008d5bec3b5d087303ff5520895d00c743fc04000000c7430c010000008b5424188953088b4c243c894b04c703f9ffffff8b45008d40f43b45087303ff5520894500c740fc020000008b7c243089780489188b74242c83fe017407bb03000000eb138b5c241083fb017407bb03000000eb038b1c248b5424488902895a04b80100000083c444c20800b8c08d7c4190ff552cb80100000090|@4548,63|55,0,0 62,0,0 69,0,1 143,0,0 224,0,0 240,0,-4 291,0,0 341,0,@4540 400,0,@4540 419,0,0 442,1,@4280 488,0,@408 500,0,1 507,0,0 605,0,0 612,0,0 619,0,1 632,0,-5 646,0,@4542 655,0,0 710,0,0 777,0,@408 803,0,@408 829,0,@408 860,0,@408 872,0,1 879,0,0 886,0,0 930,0,@4544 966,0,0 1011,0,0 1109,0,0 1151,0,1 1186,0,-1 1261,0,0 1281,0,-4 1328,0,1 1344,0,1 1363,0,0 1374,0,@4546 1383,0,0 4540:O2|0,@4541 4541:O5|-5,0,0,-1,0 4542:O3|@7320,@224,@4543 4543:S33|70726f636573734e6f6e496e6c696e65733a204e6f7420612066756e6374696f6e 4544:O1|@4545 4545:C2,16|b8b82775410bc0ff552cb80100000090|@420,1|1,0,@418 11,0,0 4546:O3|@7320,@224,@4547 4547:S29|70726f636573734e6f6e496e6c696e65733a206e6f74204465636c6172 4548:S77|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70794465636c61726174696f6e7328312970726f636573734e6f6e496e6c696e6573283429 4549:S17|4c697374506169722e666f6c6472283429 4550:S73|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70794465636c61726174696f6e7328312972657065617450726f63657373283129 4551:O1|@4552 4552:C2,152|3b650c7303ff552483f8017506b801000000c38b388b1f83fbf9753b8b75008d76e83b75087303ff5520897500c746fc05000000c7461001000000c7460c01000000c74608030000008b5704895604c706f7ffffffeb108b5004b87c8f7c41ff552cbe01000000568b40040bc0e88effffff8b7d008d7ff43b7d087303ff5520897d00c747fc020000008947048b3424893789f883c404c3|@413,61|14,0,0 55,0,0 62,0,0 69,0,1 81,0,-5 91,0,@4553 99,0,0 4553:O3|@7320,@224,@4554 4554:S20|65787472616374733a206e6f74204465636c6172 4555:C2,748|3b650c7303ff55248b3883fff975758b7424088b4afc8b79fc8b4ffc8b7d008d7fec3b7d087303ff5520897d00c747fc04000000c7470c01000000c7470801000000c74704030000005253ff7004ff36ff7604ff7128578b4c2410890f8b4424188b70fc8b56fc8b5afc8b45008d40f03b45087303ff5520894500c740fc03000000eb05e953020000c74008010000008b4b1c89480489388b542404ff128b7c2418508b5fcc8b44241083c800e86e4afcff8b74241c8b5efc8b53fc8b4afc8b7d008d7ff43b7d087303ff5520897d00c747fc02000000894704c70701000000508b45008d40f43b45087303ff5520894500c740fc020000008978048b7c241c89388b512083c800ff128b7424208b5efc8b53fc8b4afc8b4424048b3883ffff75088b70048b7e10eb05bff82575418b7424048b0683f8ff75088b5e048b4304eb05b8b0927c418b7424048b1e83fbff75078b56048b1aeb0f83fb0375058b5e04eb05bb010000008b5424048b3283feff75088b72048b760ceb1e8b75008d76f83b75087303ff5520897500c746fc01000040c706010000008b55008d52e83b55087303ff5520895500c742fc05000000897a1089720c8b3424897208894204891a8b0783f8fd754e83fb0175238b45008d40f43b45087303ff5520894500c740fc02000000897004c70001000000eb478b45008d40f03b45087303ff5520894500c740fc03000000897008895804c70003000000eb218b45008d40f43b45087303ff5520894500c740fc02000000895004c700ffffffff89c78b45008d40f43b45087303ff5520894500c740fc020000008978048b5c241889188b51240bc0ff128b542414f6c2017503ff553889d183c10270f68b45008d40ec3b45087303ff5520894500c740fc04000000c7400c010000008b3c248978088b74241c897004c700f9ffffff8b5d008d5bf43b5d087303ff5520895d00c743fc020000008b54241089530489038b4424288908895804b80100000083c424c20800b8e4927c410bc0ff552cb80100000090|@4560,63|55,0,0 62,0,0 69,0,1 140,0,0 174,1,@2830 220,0,0 299,0,@408 323,0,@4556 356,0,0 405,0,0 491,0,0 529,0,1 564,0,-1 656,0,0 675,0,-4 722,0,0 733,0,@4558 743,0,0 4556:O1|@4557 4557:C2,16|b8b82775410bc0ff552cb80100000090|@420,1|1,0,@418 11,0,0 4558:O3|@7320,@224,@4559 4559:S24|726570726f636573734465633a206e6f74204465636c6172 4560:S77|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70794465636c61726174696f6e73283129646563732d726570726f63657373446563283429 4561:O1|@4562 4562:C2,16|b8b82775410bc0ff552cb80100000090|@420,1|1,0,@418 11,0,0 4563:C2,68|3b650c7303ff552483f80175048b42ccc352ff308b40040bc0e8e2ffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0424890289d083c408c3|@1462,5| 4564:S59|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70794465636c61726174696f6e732831292f33 4565:O1|@4566 4566:C2,16|b8b82775410bc0ff552cb80100000090|@420,1|1,0,@418 11,0,0 4567:C2,68|3b650c7303ff552483f80175048b42d4c352ff308b40040bc0e8e2ffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0424890289d083c408c3|@1462,5| 4568:S57|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70794465636c61726174696f6e73283129 4569:C2,532|3b650c7303ff552483fb0175208b5c2404c70301000000c7430401000000c7430801000000b801000000c204008b7d008d7ff43b7d087303ff5520897d00c747fc02000000be4c977c4189378b72ec8977045250ff7304578b0bbb0100000089c88b52e890e8b254ffffff7424086a0389c38b4424088b7c24148b57e8e8b68fffff8b74240c508b5c240c8b46ec83c800e8d293f8fff7c00100000075048b18eb0db834cf7441ff552cbb010000008b54240cf6c2017503ff553889d183c10270f6505050538d442404508b5c241c89c88b542424e826ffffff8b3c248b1f83fbff75088b57048b7208eb0d83fb0375058b7708eb038b770483fbff75088b4f048b5110eb05baf82575418b0e83f9fb7502eb148b4424208b78f0c70701000000b801000000eb05b8010000008b0283f8fd752a83f9fb75258b5d008d5bf43b5d087303ff5520895d00c743fc020000008b7c240c897b04893389dfeb5d8b7d008d7fe83b7d087303ff5520897d00c747fc05000000c7471001000000c7470c01000000c74708030000008b5c241c895f04c707f7ffffff8b5d008d5bf43b5d087303ff5520895d00c743fc020000008b4c240c894b04893b89df8b5d008d5bf43b5d087303ff5520895d00c743fc020000008b4c2408894b0489338b4c240483f90175068b742410eb118b4424108d5424240bc0e88a00000089c68b4424288930895804897808b80100000083c424c2040090|@4572,63|19,0,0 26,0,0 33,0,0 38,0,0 70,0,@4570 91,0,0 102,1,@4280 126,1,@4368 146,1,@435 163,0,@222 171,0,0 263,0,@408 285,0,0 290,0,0 297,0,0 377,0,0 384,0,0 391,0,1 404,0,-5 502,1,@4571 521,0,0 4570:C2,56|3b650c7303ff55248b7d008d7ff83b7d087303ff5520897d00c747fc010000008b700489378b1c24893c2489d98b188b420451e9a063fcff|@4460,63|52,1,@2889 4571:C2,68|3b650c7303ff552483f80175048b42e0c352ff308b40040bc0e8e2ffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0424890289d083c408c3|@1462,5| 4572:S49|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d6973652832296d616b6544656373283329 4573:C2,500|3b650c7303ff55245289c38b42f883c800e87642fcff8b3c248b77f48b1683faff75088b4e048b5904eb05bb4c9a7c418b4ffc53ff7124ff7120ff711cff7118ff7114ff71106a01ff7108ff7104bb809a7c418b51fc0bc0ff128b3083feff75088b58048b7b08eb0d83fe0375058b7808eb038b780483feff75088b50048b5a10eb05bbf825754183feff75088b48048b5104eb05bab49a7c418b0c248b71f450575352ff71f4ff368b0c2483f9ff750b8b7424048b4e048b01eb1383f90375098b7424048b4604eb05b8010000008b7424148b0e83f9ff75078b7e048b0feb0f83f90375058b4e04eb05b90100000083f901750489c7eb12518d54242083c800e8a601000089c783c4048b7424148b0e83f9ff75088b46048b500ceb1e8b55008d52f83b55087303ff5520895500c742fc01000040c702010000008b45008d40e83b45087303ff5520894500c740fc0500000089581089500c8b5424108950088b54240889500489388b1383fafd755a83ff0175298b45008d40f43b45087303ff5520894500c740fc020000008b7c2410897804c7000100000083c41cc38b45008d40f03b45087303ff5520894500c740fc030000008b4c2410894808897804c7000300000083c41cc389c78b45008d40f43b45087303ff5520894500c740fc02000000897804c700ffffffff83c41cc30bc0|@4581,63|18,1,@2830 44,0,@4574 79,0,@4576 132,0,@408 150,0,@4578 203,0,0 236,0,0 258,1,@4580 312,0,0 407,0,0 451,0,1 490,0,-1 4574:O1|@4575 4575:C2,16|b8b82775410bc0ff552cb80100000090|@420,1|1,0,@418 11,0,0 4576:O1|@4577 4577:C2,16|b8b82775410bc0ff552cb80100000090|@420,1|1,0,@418 11,0,0 4578:O1|@4579 4579:C2,16|b8b82775410bc0ff552cb80100000090|@420,1|1,0,@418 11,0,0 4580:C2,68|3b650c7303ff552483f80175048b42e0c352ff308b40040bc0e8e2ffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0424890289d083c408c3|@1462,5| 4581:S40|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d6973652832292f31 4582:C2,100|3b650c7303ff552483f8017506b801000000c352ff7004bb010000008b008b52fce89a4effff83c800e8a67cffff508b4424048b5424080bc0e8c2ffffff8b7d008d7ff43b7d087303ff5520897d00c747fc020000008947048b3424893789f883c40cc3|@413,63|14,0,0 24,0,0 34,1,@4280 42,1,@4281 4583:O3|@7320,@224,@4584 4584:S35|6f7074696d697365202d20636f6e7461696e6572206973206e6f742045787472616374 4585:C2,196|3b650c7303ff55248b7a0889c623f7f7c6010000007503ff55388d70ff03f770f68b5a048b0b83f9ff75088b7b048b4f08eb0d83f90375058b4b08eb038b4b048b3983ff0b750f5689cb83c800e8423efcff89c7eb3983fffb750f5689cb83c800e82e3efcff89c7eb258b7d008d7ff03b7d087303ff5520897d00c747fc03000000894708894f04c7070d000000568b45008d40ec3b45087303ff5520894500c740fc04000000c7400c010000008978088b3424897004c700f9ffffff83c404c383c800|@4586,63|78,1,@2830 98,1,@2830 138,0,6 170,0,0 185,0,-4 4586:S53|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d6973652832297370656369616c446563732d283129 4587:C2,80|8b7a0489c623f7f7c6010000007503ff55388d70ff03f770f68b45008d40e83b45087303ff5520894500c740fc05000000c7401001000000c7400c01000000c7400803000000897004c700f7ffffffc3|@4588,53|52,0,0 59,0,0 66,0,1 75,0,-5 4588:S56|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d6973652832297370656369616c456e74726965732d283129 4589:C2,68|3b650c7303ff552483f80175048b42ecc352ff308b40040bc0e8e2ffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0424890289d083c408c3|@1462,5| 4590:C2,136|3b650c7303ff55248b388b75008d76e83b75087303ff5520897500c746fc050000008b5f0c895e108b4f08894e0c8b4f04894e088b0f894e04c706f7ffffff8b4d008d49f43b4d087303ff5520894d00c741fc02000000897104c701010000008b70048b420489f723f8f7c7010000007503ff553889f72bf88d7f0170f489cb89f8e98530f8ff90|@219,63|59,0,-5 92,0,0 131,1,@225 4591:C2,1152|3b650c7303ff55248b3883ff0575585253ff7004ff700cbb010000008b40080bc0e8daffffffbe0100000083f801750489f0eb388b5d008d5bf43b5d087303ff5520895d00c743fc020000008973048b10891389de8b40043b650c7303ff5524ebc9b801000000e9b700000090e85eeafeff50bb010000008b4424048b54241090e87affffffbb0100000083f801750489d8eb338b55008d52f43b55087303ff5520895500c742fc02000000895a048b38893a89d38b40043b650c7303ff5524ebc9b8010000000bc0e802eafeff8b55008d52ec3b55087303ff5520895500c742fc0400000089420c8b04248942088b7c2408897a04c702050000008b75008d76f43b75087303ff5520897500c746fc020000008b5c240c895e04891689f083c414c383ff13755a528b700483fe01750eb878d1764190ff552cb8010000008b560483fa01750d8b068b142483c404e9acfeffff8b45008d40f43b45087303ff5520894500c740fc020000008958048b3e89388b760489c33b650c7303ff5524ebaae909000000b80100000083c404c383ff1775618b70048b0e83f9f7755c8b7e0883ff0375598b4e0c83f90175708b78088b4af8510bcff6c101597503ff55383bf9755f8b7af08b0f83f9f7755a8b4f0883f90375718b4f0c83f9017526ff7704ff760489d88d5424080bc0e8aa02000083c408c3e937020000e9e7010000e9970100008b75008d76ec3b75087303ff5520897500c746fc04000000eb0fe92d010000e9db000000e9890000008b4af0894e0c8946088b42f8894604c706ebffffff8b7d00eb05e91d0000008d7ff43b7d087303ff5520897d00c747fc02000000895f04893789f8c38b75008d76ec3b75087303ff5520897500c746fc040000008b4af0894e0c8946088b42f8894604c706ebffffff8b7d008d7ff43b7d087303ff5520897d00c747fc02000000895f04893789f8c38b75008d76ec3b75087303ff5520897500c746fc040000008b4af0894e0c8946088b42f8894604c706ebffffff8b7d008d7ff43b7d087303ff5520897d00c747fc02000000895f04893789f8c38b7d008d7fec3b7d087303ff5520897d00c747fc040000008b72f089770c8947088b42f8894704c707ebffffff8b4d008d49f43b4d087303ff5520894d00c741fc02000000895904893989c8c38b7d008d7fec3b7d087303ff5520897d00c747fc040000008b72f089770c8947088b4af8894f04c707ebffffff8b45008d40f43b45087303ff5520894500c740fc020000008958048938c38b4d008d49ec3b4d087303ff5520894d00c741fc040000008b7af089790c8941088b72f8897104c701ebffffff8b45008d40f43b45087303ff5520894500c740fc020000008958048908c38b7d008d7fec3b7d087303ff5520897d00c747fc040000008b72f089770c8947088b4af8894f04c707ebffffff8b45008d40f43b45087303ff5520894500c740fc020000008958048938c38b75008d76ec3b75087303ff5520897500c746fc040000008b4af0894e0c8946088b42f8894604c706ebffffff8b7d008d7ff43b7d087303ff5520897d00c747fc02000000895f04893789f8c390|@4594,63|24,0,0 39,0,0 99,0,0 110,1,@4058 116,0,0 135,0,0 195,0,0 202,1,@4058 248,0,2 306,0,@1640 315,0,0 392,0,0 494,1,@4592 575,0,-11 659,0,-11 736,0,-11 813,0,-11 890,0,-11 965,0,-11 1040,0,-11 1115,0,-11 4592:C2,304|3b650c7303ff552483f801750eb8e8717c4190ff552cb8010000008b388b3783fef975708b5f048b4af8530bd9f6c3015b7503ff55383bd9755f8b75008d76e83b75087303ff5520897500c746fc05000000c7461001000000c7460c01000000c74608030000008b5afc895e04c706f7ffffff8b4d008d49ec3b4d087303ff5520894d00c741fc04000000c7410c01000000eb0ae967000000e9320000008971088b7704897104c701f9ffffff8b7d008d7ff43b7d087303ff5520897d00c747fc020000008b7004897704890f89f8c352578b4004e826ffffff8b7d008d7ff43b7d087303ff5520897d00c747fc020000008947048b3424893789f883c408c352578b4004e8f6feffff8b5d008d5bf43b5d087303ff5520895d00c743fc020000008943048b1424891389d883c408c3|@4593,63|14,0,@4506 23,0,0 85,0,0 92,0,0 99,0,1 111,0,-5 142,0,0 169,0,-4 4593:S79|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d69736528322970757368536574436f6e7461696e65722832297265706c616365436f6e7461696e6572446563283129 4594:S57|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d69736528322970757368536574436f6e7461696e6572283229 4595:S38|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229 4596:S27|434f44455452454528292e6f7074696d69736550726f6328313229 4597:C2,176|3b650c7303ff5524505089d650536a01bb81000000b80d0000000bc0ff15a0920408c7000b0000008b5d008d5bf43b5d087303ff5520895d00c743fc02000000894304c703ffffffff8b55008d52f83b55087303ff5520895500c742fc01000040891a8d4c240889118d442408c74004010000008b7d008d7ff43b7d087303ff5520897d00c747fc020000008b5c2408891f8b54240c89570456578b44240c8d5424180bc0e82200000083c418c20400|@4622,63|17,0,64 22,0,6 30,0,I11 36,0,5 69,0,-1 112,0,0 166,1,@4598 4598:C2,1484|3b650c7303ff55248b38f7c701000000741583ffeb7c1583ff177f15bedea67c418d74be54ffe6e9c2000000e9bd000000e9b8000000e917040000909090e93e030000909090e9a3000000909090e9f8020000909090e957010000909090e954030000909090e9a7000000909090e97b000000909090e994010000909090e940050000909090e977020000909090e932010000909090e953000000909090e9fb010000909090e9a6030000909090e998010000909090e933000000909090e94d010000909090e9e6020000909090e9ec000000909090e920000000909090e937030000909090e99f040000909090b890ac7c41ff552cb801000000528b40048d5424040bc0e80e05000083c404e91ae2feff8b5d008d5bec3b5d087303ff5520895d00c743fc040000008b4810894b0c8b780c897b088b70088973048b7004893383ff017532f7c6010000007503ff553883fe017c1a8b580883fb017412506a0389f38b42e883c800e80e53fcffeb01508b042483c404c3f7c7010000007503ff553889fe83ee0270f68b45008d40f03b45087303ff5520894500c740fc030000008b4a0489480889700489188b52f0ff228b5804b801000000e94d070000b8982d7b41c352ff70088b400490e82efeffff508b4424048b5424080bc0e81efeffff89c38b45008d40f03b45087303ff5520894500c740fc030000008958088b1424895004c7000100000083c40cc3c352ff70088b40040bc0e8e2fdffff89c38b45008d40f03b45087303ff5520894500c740fc030000008b1424895008895804c7000d00000083c408c352ff7004ff700c8b4008e8a6fdffff508b4424088d5424100bc0e8b60c000089c38b45008d40ec3b45087303ff5520894500c740fc040000008b54240489500c8b0c24894808895804c7000900000083c410c352ff7008ff700c8b400490e852fdffff508b4424088b54240c0bc0e842fdffff508b4424088b5424100bc0e832fdffff89c38b45008d40ec3b45087303ff5520894500c740fc0400000089580c8b14248950088b4c2404894804c7000500000083c414c352ff70088b4004e8f2fcffff508b4424048d54240c0bc0e8760c000089c38b45008d40f03b45087303ff5520894500c740fc030000008958088b1424895004c700ffffffff83c40cc3528b40048d5424040bc0e8fa0c000089c38b45008d40f43b45087303ff5520894500c740fc02000000895804c700f1ffffff83c404c3528b4004e876fcffff89c38b45008d40f43b45087303ff5520894500c740fc02000000895804c700edffffff83c404c3b8782d7b41c352ff7008ff700c8b4004e83afcffff508b4424048d5424100bc0e8f20c0000508b44240c8b5424100bc0e81afcffff89c38b45008d40ec3b45087303ff5520894500c740fc040000008b142489500c8958088b4c2404894804c700f5ffffff83c414c3528b40048d54240483c800e8120d000089c38b45008d40f43b45087303ff5520894500c740fc02000000895804c7001500000083c404c3c38b580c8b3b83fff775618b730883fe03755e8b4b0c83f90175428b7b04f7c7010000007503ff553883ff017f07b903000000eb1c52ff7004ff7008ff700c8b5b048b42e883c800e83e7ef8ff89c1eb3c52ff7004ff7008ff700ceb30b90300000052ff7004ff700853eb21e90f000000b90300000052ff7004ff700853eb0db90300000052ff7004ff7008538b7424048b1e83fb05751dff74240889f38b4424040bc0e8c6c6ffff8b54240c83c410e9fafaffff83fb13751bff74240889f38b442404e8a6c6ffff8b54240c83c410e9dafaffff83fbed750e89f08b54240c83c410e9c7faffff8b04248b54240c90e8bafaffff508b4424088b5424100bc0e8aafaffff89c28b45008d40ec3b45087303ff5520894500c740fc040000008b0c2489480c8950088b7c240c897804c700ebffffff83c414c352ff70088b4004e86afaffff89c38b45008d40f03b45087303ff5520894500c740fc030000008b1424895008895804c7001700000083c408c3b8f8257541c383c800|@4621,63|29,0,$4598+54 239,0,@4599 247,0,0 262,1,@4601 270,1,@4058 362,1,@2889 438,0,0 443,1,@4602 448,0,@3833 519,0,0 579,0,6 614,1,@4616 662,0,4 762,0,2 794,1,@4617 835,0,-1 854,1,@4618 889,0,-8 937,0,-10 946,0,@3830 978,1,@4619 1042,0,-6 1062,1,@4620 1097,0,10 1152,0,1 1178,1,@435 1199,0,1 1219,0,1 1234,0,1 1270,1,@4509 1302,1,@4509 1410,0,-11 1467,0,11 1476,0,@408 4599:O3|@7320,@224,@4600 4600:S24|636c65616e436f64653a20756e6b6e6f776e20696e737472 4601:C2,728|3b650c7303ff552483f8017506b801000000c38b388b3783fef975658b5afc52ff7704ff7708ff770cff70046a018b4be88b5c241089c80bc0e8264efcff8b04248b542410e8b6ffffff8b7c24108b77fc508b5c24108b46e8e8667cf8ff83f8017402eb218b5c24148b53fc8b4aec8b44240c8b51040bc0ff1283f8017407eb72e9990000008b5c240c8b0b83f9f375198b5b048b4424108b7c24148b57fc0bc0e84e02000089c2eb1289d88b7c24148b57fc0bc0e82ef9ffff89c28b75008d76ec3b75087303ff5520897500c746fc040000008b5c2408895e0c8956088b542410895604c706f9ffffff8b4d008d49f4eb05e9200000003b4d087303ff5520894d00c741fc020000008b0424894104893189c883c418c38b042483c418c383feef755b52ff7704ff70048b5c240483fb017507ba01000000eb498b0b8b0183f8f9751c8b7c24088b77fcff73046a018b59048b46e883c800e8064dfcffeb0ab804b37c410bc0ff552c8b1c2483c4043b650c7303ff5524ebb5ba01000000e9a90000008b04248b5424080bc0e86efeffff50ff742408bb01000000b8010000008d542414e8ca04000083f80175078b042483c410c38b480483f90175288b7d008d7ff43b7d087303ff5520897d00c747fc020000008b34248977048b18891f89f883c410c38b7d008d7ff43b7d087303ff5520897d00c747fc02000000894704c707efffffff8b75008d76f43b75087303ff5520897500c746fc020000008b1c24895e04893e89f083c410c383fe13753852ff77048b4004e8c2fdffff508b4424048b5424080bc0e8b2fdffff8b1c2483fb01750483c40cc38d54240c83c800e80606000083c40cc352578b40040bc0e88afdffff508b4424048b5c24088b53fc83c800e85ef7ffff8b5424088b4afc8b79ec508b5704ff1283f801740f8b74240483fe01740689f083c410c38b75008d76f43b75087303ff5520897500c746fc020000008b5c2404895e048b1424891689f083c410c3|@4615,63|14,0,0 58,1,@2889 90,1,@435 162,1,@4602 182,1,@4598 231,0,-4 309,0,0 346,1,@2889 353,0,@4608 379,0,0 408,0,0 413,0,0 422,1,@4610 515,0,-9 610,1,@4614 646,1,@4598 4602:C2,236|3b650c7303ff55248b7d008d7fe83b7d087303ff5520897d00c747fc05000000bebcb07c4189378b72f089771089470c8b42e88947088b4b08894f048b4d008d49f43b4d087303ff5520894d00c741fc02000000b864b27c418901897904ff7304ff7308ff7310ff7314ff7424088b3b89cb89f88b52ec90ff128b75008d76dc3b75087303ff5520897500c746fc08000000c7461c01000000c74618010000008b1c24895e148b542404895610c7460c010000008b4c2408894e088b7c240c897e0489068b45008d40f43b45087303ff5520894500c740fc02000000897004c700f3ffffff83c410c383c800|@4607,63|33,0,@4603 85,0,@4605 149,0,0 156,0,0 176,0,0 225,0,-7 4603:C2,340|3b650c7303ff552483fb01756750505050508b188b4a0c530bd9f6c3015b7503ff55383bd975528b780483ff01744a8b7424188b5a0489f023c3a8017503ff553889f02bc38d400170f489e7c707f7ffffff89e7c747040100000089e7c747080100000089e789470c89e0c7401001000000eb60e99a000000f6c3017503ff553883fb017c168b780483ff01740e506a038b420890e8ce49fcffeb01508b04248d7c2404c707f7ffffff8d7424048b18895e048d5424048b4804894a088d7c24048b700889770c8d5424048b780c897a1083c4048b45008d40e83b45087303ff5520894500c740fc050000008b342489308b5c24048958048b5424088950088b4c240c89480c8b7c241089781083c414c20400f6c3017503ff553889df83ef0270f689c68b45008d40f03b45087303ff5520894500c740fc030000008b5c240489580889780489308b52108b0c2483c40851ff22|@4604,63|78,0,-5 87,0,0 96,0,0 110,0,0 150,1,@2889 166,0,-5 4604:S46|434f44455452454528292e636c65616e50726f63283329636c65616e4c616d6264612832296c6f6f6b7570283329 4605:C2,28|3b650c7303ff55248b78088b3424893c248b58048b008b520456ff22|@4606,63| 4606:S46|434f44455452454528292e636c65616e50726f63283329636c65616e4c616d6264612832296c6f6f6b7570283129 4607:S37|434f44455452454528292e636c65616e50726f63283329636c65616e4c616d626461283229 4608:O3|@7320,@224,@4609 4609:S23|736574456e7472793a20756e6b6e6f776e20696e737472 4610:C2,348|3b650c7303ff55248b7c240483ff01751d83f8037510895c2404bb01000000b801000000ebdab801000000c204008b378b0e83f9f9756b8b4afc525053ff37ff7604ff7608ff760cff7704ff71fc8b14248b5c24108b42e890e8f275f8ff83f80175448b4d008d49f43b4d087303ff5520894d00c741fc020000008b4424188941048b7c241489398b7424048974242889cb8b44241c8b54242083c424e95effffffe9a70000008b4c240c8b3983fff3751a8b59048b4424108b7424208b56fc8b52fc0bc0e8b6fbffffeb1289c88b7424208b5efc8b53fc90e896f2ffff8b55008d52ec3b55087303ff5520895500c742fc040000008b4c2408894a0c8942088b442410894204c702f9ffffff52ff7424088b5c2420b8030000008b5424280bc0e8dafeffff8b7d008d7ff43b7d087303ff5520897d00c747fc020000008947048b3424893789f883c428c20400b8acb47c41ff552cb80100000090|@4613,63|27,0,0 32,0,0 39,0,0 90,1,@435 198,1,@4602 218,1,@4598 265,0,-4 279,0,1 335,0,@4611 343,0,0 4611:O3|@7320,@224,@4612 4612:S28|70726f636573734d757475616c3a20756e6b6e6f776e20696e737472 4613:S66|434f44455452454528292e636c65616e50726f63283329636c65616e436f646528312970726f636573734465637328312970726f636573734d757475616c73283329 4614:C2,68|3b650c7303ff552483f80175048b42f4c352ff308b40040bc0e8e2ffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0424890289d083c408c3|@1462,5| 4615:S49|434f44455452454528292e636c65616e50726f63283329636c65616e436f646528312970726f6365737344656373283129 4616:C2,88|3b650c7303ff552483f8017506b801000000c352ff70048b008b52fc90e8bef0ffff508b4424048b5424080bc0e8ceffffff8b7d008d7ff43b7d087303ff5520897d00c747fc020000008947048b3424893789f883c40cc3|@413,63|14,0,0 30,1,@4598 4617:C2,164|3b650c7303ff552483f8017506b801000000c38b388b1f83fbf9754252ff7004ff77048b47088b52fce83ef0ffff8b75008d76ec3b75087303ff5520897500c746fc04000000c7460c010000008946088b1424895604c706f9ffffffeb118b4804b82ca07b4190ff552cbe01000000568b4424088b54240c90e882ffffff8b4d008d49f43b4d087303ff5520894d00c741fc020000008941048b0424890189c883c410c3|@413,63|14,0,0 42,1,@4598 73,0,0 88,0,-4 98,0,@4101 107,0,0 4618:C2,88|3b650c7303ff552483f8017506b801000000c352ff70048b008b52fc90e88aefffff508b4424048b5424080bc0e8ceffffff8b7d008d7ff43b7d087303ff5520897d00c747fc020000008947048b3424893789f883c40cc3|@413,63|14,0,0 30,1,@4598 4619:C2,88|3b650c7303ff552483f8017506b801000000c352ff70048b008b52fc90e816efffff508b4424048b5424080bc0e8ceffffff8b7d008d7ff43b7d087303ff5520897d00c747fc020000008947048b3424893789f883c40cc3|@413,63|14,0,0 30,1,@4598 4620:C2,88|3b650c7303ff552483f8017506b801000000c352ff70048b008b52fc90e8a2eeffff508b4424048b5424080bc0e8ceffffff8b7d008d7ff43b7d087303ff5520897d00c747fc020000008947048b3424893789f883c40cc3|@413,63|14,0,0 30,1,@4598 4621:S35|434f44455452454528292e636c65616e50726f63283329636c65616e436f6465283129 4622:S23|434f44455452454528292e636c65616e50726f63283329 4623:S39|56414c55455f4f505328292e6372656174654e756c6c617279436f6e7374727563746f72283229 4624:C2,124|3b650c7303ff552450bf0100000083f801750489feeb338b308b1683fa01750489fbeb12f7c7010000007503ff553889fb83c30270f689df8b40043b650c7303ff5524ebc9be01000000f7c6010000007503ff553883fe037f10bb010000008b042483c404e92e000000bb010000008b042483c404e9ba0e00000bc0|@4657,63|10,0,0 70,0,0 91,0,0 102,1,@4625 107,0,0 118,1,@4655 4625:C2,528|3b650c7303ff552483f8017506b801000000c38b388b3783fe0175628b55008d52f43b55087303ff5520895500c742fc02000000895a04c7020300000053ff70048b5f0489d083c800e8c619fcff8b4c2404f6c1017503ff553883f9017d24be0100000089cf23fef7c7010000007503ff553889f72bf98d7f0170f4eb30e95d000000f6c1017503ff553889cf83c70270f6be0100000089fb23def6c3017503ff553889f32bdf8d5b0170f489df5089fb8b442404e846ffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0c24890a89d083c40cc383fe03754753ff70048b5f04b8589c7541e836010000508b5c24088b4424040bc0e8fafeffff8b5d008d5bf43b5d087303ff5520895d00c743fc020000008943048b1424891389d883c40cc383feff754753ff70048b5f04b88c877941e8ea000000508b5c24088b4424040bc0e8aefeffff8b5d008d5bf43b5d087303ff5520895d00c743fc020000008943048b1424891389d883c40cc38b1683fa01754953ff70048b5f04b8589c75410bc0e89a000000508b5c24088b4424040bc0e85efeffff8b4d008d49f43b4d087303ff5520894d00c741fc020000008941048b0424890189c883c40cc353ff70048b5f04b88c87794190e852000000508b5c24088b4424040bc0e816feffff8b4d008d49f43b4d087303ff5520894d00c741fc020000008941048b0424890189c883c40cc3|@4654,63|14,0,0 57,0,1 74,1,@2828 96,0,0 147,0,0 237,0,@989 242,1,@4626 313,0,@3113 318,1,@4626 391,0,@989 398,1,@4626 464,0,@3113 470,1,@4626 4626:C2,600|3b650c7303ff5524505389c3b8d02b7541e83219fcff8b7d008d7fdc3b7d087303ff5520897d00c747fc08000000c7471c01000000c7471801000000c7471401000000c7471003000000c7470c01000000c74708010000008b342489770489078b5d008d5bf43b5d087303ff5520895d00c743fc02000000897b04c703f3ffffff89d98b4424040bc0e8e60100005189c7b8d02b754189faff128b75008d76dc3b75087303ff5520897500c746fc08000000c7461c01000000c7461801000000c7461401000000c7461003000000c7460c01000000c74608010000008b5c2404895e0489068b55008d52f43b55087303ff5520895500c742fc02000000897204c702f3ffffff528b5c240cb8d02b754190e8020700008b4d008d49dc3b4d087303ff5520894d00c741fc08000000c7411c01000000c7411801000000c7411401000000c7411003000000c7410c01000000c74108010000008b7c240889790489018b75008d76f43b75087303ff5520897500c746fc02000000894e04c706f3ffffff8b5d008d5bf43b5d087303ff5520895d00c743fc02000000c743040100000089338b55008d52f43b55087303ff5520895500c742fc02000000895a048b0c24890a8b45008d40f43b45087303ff5520894500c740fc020000008950048b7c240489388b75008d76f43b75087303ff5520897500c746fc02000000894604c7061500000083f801752b89f090e85e22fcff8b5d008d5bf43b5d087303ff5520895d00c743fc02000000894304c703fbffffffeb0289f389dabb0100000089d0ba14ea7841e8522cfcff89c1b80100000089ca83c410ff22|@4653,63|13,0,@450 18,1,@2829 49,0,0 56,0,0 63,0,0 70,0,1 77,0,0 84,0,0 125,0,-7 138,1,@4627 146,0,@450 181,0,0 188,0,0 195,0,0 202,0,1 209,0,0 216,0,0 258,0,-7 268,0,@450 274,1,@4647 305,0,0 312,0,0 319,0,0 326,0,1 333,0,0 340,0,0 382,0,-7 413,0,0 513,0,10 526,1,@2837 559,0,-3 570,0,0 577,0,@2858 582,1,@2860 589,0,0 4627:C2,144|8b3883fff97506b8b8be7c41c383ff017506b808bf7c41c383ff057506b804c07c41c383fffb75268b70048b45008d40f43b45087303ff5520894500c740fc02000000bfe4c07c418938897004c383ff07752c8b70048b58088b45008d40f03b45087303ff5520894500c740fc03000000bf40c27c418938895808897004c383fffd7506b8b8be7c41c3b8fcc27c41c3|@4646,57|8,0,@4628 19,0,@4631 30,0,@4634 68,0,@4637 114,0,@4639 133,0,@4628 139,0,@4641 4628:O1|@4629 4629:C2,4|c383c800|@4630,1| 4630:S32|56414c55455f4f505328292e6964656e746974794170706c79436f6465283129 4631:O1|@4632 4632:C2,180|3b650c7303ff55248b7d008d7ff43b7d087303ff5520897d00c747fc02000000c747040100000089078b45008d40f43b45087303ff5520894500c740fc02000000897804c700150000005083ff017507be03000000eb208b078b3083fefb75128b7f043b650c7303ff5524ebdebe01000000be0100000083fe0174318b04240bc0e87220fcff89c38b45008d40f43b45087303ff5520894500c740fc02000000895804c700fbffffff83c404c38b042483c404c3|@4633,63|35,0,0 70,0,10 81,0,1 110,0,0 115,0,0 130,1,@2837 165,0,-3 4633:S27|56414c55455f4f505328292e626f784170706c79436f6465283129 4634:O1|@4635 4635:C2,152|8b7d008d7ff43b7d087303ff5520897d00c747fc02000000c747040100000089078b45008d40f43b45087303ff5520894500c740fc02000000897804bfb0cf784189388b7d008d7ff43b7d087303ff5520897d00c747fc02000000894704b8c42b754189078b45008d40ec3b45087303ff5520894500c740fc04000000c7400c01000000be8ccf7841897008897804c70009000000c30bc0|@4636,49|27,0,0 61,0,@2802 95,0,@449 128,0,0 133,0,@2799 145,0,4 4636:S27|56414c55455f4f505328292e7265664170706c79436f6465283129 4637:C2,276|3b650c7303ff55248b7a04f7c701000000740489feeb1289c6b89420754190ff552c89f0be010000008b5d008d5bf43b5d087303ff5520895d00c743fc02000000897304c703fbffffff8b75008d76f43b75087303ff5520897500c746fc02000000c746040100000089068b45008d40f43b45087303ff5520894500c740fc0200000089700489188b75008d76f43b75087303ff5520897500c746fc02000000894604c706150000005683f8017507bb03000000eb208b108b3a83fffb75128b40043b650c7303ff5524ebdebb01000000bb0100000083fb0174328b042483c800e83e1efcff89c68b45008d40f43b45087303ff5520894500c740fc02000000897004c700fbffffff83c404c38b042483c404c3|@4638,63|26,0,@369 37,0,0 70,0,-3 101,0,0 165,0,10 176,0,1 205,0,0 210,0,0 226,1,@2837 261,0,-3 4638:S33|56414c55455f4f505328292e746167426f784170706c79436f6465283129283129 4639:C2,112|3b650c7303ff552450ff72048b5a08b84097040890e80e25fcff8b7d008d7ff43b7d087303ff5520897d00c747fc02000000c74704010000008b3424893789c38b45008d40ec3b45087303ff5520894500c740fc04000000c7400c03000000895808897804c7000900000083c404c390|@4640,63|16,0,I48 22,1,@2853 53,0,0 91,0,1 103,0,4 4640:S38|56414c55455f4f505328292e7461675475706c654170706c79436f6465283129283129283129 4641:O1|@4642 4642:C2,16|b830c37c410bc0ff552cb80100000090|@4645,1|1,0,@4643 11,0,0 4643:O3|@7320,@224,@4644 4644:S25|636f6e7374616e742063616e2774206265206170706c696564 4645:S29|56414c55455f4f505328292e636f6e7374724170706c79283129283129 4646:S26|56414c55455f4f505328292e636f6e7374724170706c79283129 4647:C2,300|3b650c7303ff55248b3b83fff97501c383ff01754f8b3083fe0b750c89c3b801000000e9f016fcff83fefb750c89c3b801000000e9df16fcff89c28b45008d40f03b45087303ff5520894500c740fc03000000c7400801000000895004c7000d000000c383ff0575538b75008d76f43b75087303ff5520897500c746fc02000000ba1c32754189560489068b45008d40ec3b45087303ff5520894500c740fc04000000c7400c01000000b924d07841894808897004c70009000000c383fffb754f8b3083fe0b750c89c3b803000000e94416fcff83fefb750c89c3b803000000e93316fcff89c28b45008d40f03b45087303ff5520894500c740fc03000000c7400803000000895004c7000d000000c383ff0775088b5b08e92b00000083fffd7501c3b89c317541c383c800|@4652,63|31,0,0 36,1,@2830 48,0,0 53,1,@2830 86,0,0 95,0,6 130,0,@495 166,0,0 171,0,@2808 183,0,4 203,0,1 208,1,@2830 220,0,1 225,1,@2830 258,0,1 267,0,6 281,1,@4648 292,0,@487 4648:C2,352|3b650c7303ff55245389c1b8030000008d54240490e8620100008b7d008d7ff43b7d087303ff5520897d00c747fc02000000894704c70715000000515783f8017507be03000000eb208b188b1383fafb75128b40043b650c7303ff5524ebdebe01000000be0100000083fe01742b8b0424e89a1afcff8b4d008d49f43b4d087303ff5520894d00c741fc02000000894104c701fbffffffeb038b0c248b45008d40dc3b45087303ff5520894500c740fc08000000c7401c01000000c7401801000000c7401401000000c7401003000000c7400c01000000c7400801000000bf4097040889780489088b75008d76f43b75087303ff5520897500c746fc02000000894604c706f3ffffff8b5d008d5bf43b5d087303ff5520895d00c743fc02000000c74304010000008b54240489138b45008d40ec3b45087303ff5520894500c740fc04000000c7400c03000000897008895804c7000900000083c40cc383c800|@4651,63|12,0,1 22,1,@4649 55,0,10 67,0,1 96,0,0 101,0,0 114,1,@2837 147,0,-3 183,0,0 190,0,0 197,0,0 204,0,1 211,0,0 218,0,0 223,0,I48 261,0,-7 292,0,0 329,0,1 341,0,4 4649:C2,136|3b650c7303ff55248b7afc5023c7a801587503ff55383bc77f668b75008d76f03b75087303ff5520897500c746fc03000000894608bbd02b7541895e04c7060d000000a8017503ff553889c383c30270f6525689d8e8a6ffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0424890289d083c408c3b801000000c30bc0|@4650,61|54,0,@450 63,0,6 129,0,0 4650:S50|56414c55455f4f505328292e7461676765645475706c654465737472756374436f64652832296765744669656c6473283129 4651:S38|56414c55455f4f505328292e7461676765645475706c654465737472756374436f6465283229 4652:S29|56414c55455f4f505328292e636f6e7374724465737472756374283229 4653:S37|56414c55455f4f505328292e637265617465556e617279436f6e7374727563746f72283229 4654:S35|56414c55455f4f505328292e63686f6f73654f7074696d697365645265707231283229 4655:C2,492|3b650c7303ff552483f8017506b801000000c38b388b1783fa01755a8b4d008d49f83b4d087303ff5520894d00c741fc0100004089198b700489c890ff15209704088b55008d52f43b55087303ff5520895500c742fc02000000894a04c702ffffffff53568b5f0489d083c800e8060bfcff89c6eb7083fa0375338b4d008d49f43b4d087303ff5520894d00c741fc02000000895904c701fbffffff53ff70048b5f0489c8e8e6f2ffff89c6eb7283faff75388b4d008d49f43b4d087303ff5520894d00c741fc02000000895904c701fbffffff53ff70048b5f0489c8e8aef2ffff89c6eb72e9740000008b0af6c1017503ff553883f9097f2b8b75008d76f03b75087303ff5520897500c746fc03000000894e08895e04c70607000000eb26e93a0000008b75008d76f43b75087303ff5520897500c746fc02000000895e04c706fbffffff53ff70048b5f0489f00bc0e83af2ffffeb05e90200000089c68b442404a8017503ff553883f8017d1fbb0100000089c723fbf7c7010000007503ff553889df2bf88d7f0170f4eb2aa8017503ff553889c783c70270f6bb0100000089fa23d3f6c2017503ff553889da2bd78d520170f489d75689fb8b4424040bc0e83afeffff8b4d008d49f43b4d087303ff5520894d00c741fc020000008941048b0424890189c883c40cc3|@4656,63|14,0,0 62,0,I47 95,0,-1 110,1,@2828 152,0,-3 166,1,@4626 208,0,-3 222,1,@4626 282,0,3 322,0,-3 338,1,@4626 368,0,0 413,0,0 4656:S35|56414c55455f4f505328292e63686f6f73654f7074696d697365645265707232283229 4657:S46|56414c55455f4f505328292e63686f6f7365436f6e7374725265707228312963686f6f7365526570722831292f35 4658:S44|56414c55455f4f505328292e63686f6f7365436f6e7374725265707228312963686f6f736552657072283129 4659:C2,124|3b650c7303ff5524f7c0010000007558f7c301000000755552ff7004ff73048b1b8b008b52fc83c800e86a000000508b5c24048b4424088b54240c0bc0e8beffffff8b7d008d7ff43b7d087303ff5520897d00c747fc020000008947048b3424893789f883c410c3e906000000b801000000c3b801000000c383c800|@3461,63|42,1,@4660 110,0,0 116,0,0 4660:C2,244|3b650c7303ff552489d68b08ff70048b042483c800e816faf9ff83f801741989d8e8ea000000566a03508b5ee089c80bc0e81a010000eb428b45008d40f43b45087303ff5520894500c740fc020000008b7ee08978048b142489105690e87e00f9ff89c689d883c800e8a20000006a015089f389c8e8d60000008b1c248b53fc8b7af08b77fc5150ff770c8b5e0c89c890e8bedef8ff8b5c24088b53fc8b4af08b41fcff700cff710c6a038b59f88b44241083c800e8f2a0fbff8b7c24088b77fc8b45008d40f43b45087303ff5520894500c740fc020000008b1c248958048b54240489108b56dcff128b042483c410c383c800|@4664,63|22,1,@1598 34,1,@4661 50,1,@4662 94,1,@1126 106,1,@4661 118,1,@4662 146,1,@1033 182,1,@2501 4661:C2,36|89c78b45008d40f43b45087303ff5520894500c740fc02000000897804c700ffffffffc3|@2228,33|31,0,-1 4662:C2,76|8b7d008d7ff83b7d087303ff5520897d00c747fc010000008b74240889378b55008d52ec3b55087303ff5520895500c742fc04000000895a0c8b5c2404895a08897a04890289d0c208000bc0|@4663,61| 4663:S32|5354525543545f56414c5328292e6d616b6556616c7565436f6e737472283429 4664:S83|50415253455f5452454528292e706173733228362961737369676e56616c7565732836296173734162734461746128342967656e56616c7565436f6e7374727328322970726f63657373436f6e737472283229 4665:S77|50415253455f5452454528292e706173733228362961737369676e56616c7565732836296173734162734461746128342967656e56616c7565436f6e73747273283229646563436f6e73283129 4666:S67|50415253455f5452454528292e706173733228362961737369676e56616c7565732836296173734162734461746128342967656e56616c7565436f6e73747273283229 4667:O1|@4668 4668:C2,56|8b7d008d7ff03b7d087303ff5520897d00c747fc03000000894708b854cf7441894704b8fcc1b441890789f883c800ff552cb80100000090|@4669,33|28,0,@224 36,0,@7320 51,0,0 4669:S54|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737341627344617461283429552d283129 4670:C2,716|3b650c7303ff5524505050538d5c2408b8a4d17c41e82a0300008b7d008d7fe83b7d087303ff5520897d00c747fc05000040be64d57c418937c7470401000000c7470801000000c7470c01000000c74710010000008b5d008d5bf43b5d087303ff5520895d00c743fc02000000ba68d77c418913897b048b4c2408894f04895f088b44241489470c8b74240c897710c647ff00578b5c240883fb017502eb768b03e85ef7f8ffff33ff73048b54241890ff1283f80175278b55008d52f43b55087303ff5520895500c742fc02000000c74204010000008b4c2404890aeb678b088b3183fe0175058b7904eb0fb8503d75410bc0ff552cbf010000008b5d008d5bf43b5d087303ff5520895d00c743fc02000000eb05e9e3000000897b048b5424048913575389d00bc0e88681faff83f8017402eb308b4c2404f7c10100000075098b01eb12e94a000000b878d17641ff552cb8010000000bc0e85681faff83f8017502eb298b0c2483f9017502eb1fff7104bb030000008b01e80e4afbff8b0c2483c4043b650c7303ff5524ebda8b142483c40889d78b44240483c800e862f6f8ff8b75008d76f43b75087303ff5520897500c746fc02000000897e04c7060100000089c38b45008d40f43b45087303ff5520894500c740fc0200000089700489188b5424140bc0ff128b1c2483c4083b650c7303ff5524e99bfeffff8b54240883fa01750bb80100000083c414c204008b0a8b7a0489c890e8e6f5f8ff5157508b54240c83c800ff1283f8ff753d8b4424080bc0e87a80faff83f801746b8b4424080bc0e846fbf9ff89c3b874677741e8a641f8ffbb98d97c410bc0e89a41f8ff8b5424100bc0ff12eb3e8b45008d40f43b45087303ff5520894500c740fc02000000bebcd97c418970048b1c2489188b54241883c800ff12bb030000008b4424080bc0e8e248fbff8b54240483c40c3b650c7303ff5524e943ffffffb80100000083c420c2040083c800|@4692,63|17,0,@4671 22,1,@4674 51,0,@4682 60,0,0 67,0,0 74,0,0 81,0,0 110,0,@4686 162,1,@1109 210,0,0 237,0,@597 247,0,0 298,1,@1930 331,0,@1640 339,0,0 346,1,@1930 371,0,1 378,1,@2348 414,1,@1109 447,0,0 519,0,0 538,1,@1109 566,1,@1930 582,1,@1624 589,0,@1996 594,1,@323 599,0,@4690 606,1,@323 645,0,@4691 667,0,1 678,1,@2348 703,0,0 4671:O1|@4672 4672:C2,20|3b650c7303ff55248b58048b00e9c285faff0bc0|@4673,63|14,1,@1946 4673:S27|5354525543545f56414c5328292e73616d65547970654964283129 4674:C2,116|8b7d008d7ff83b7d087303ff5520897d00c747fc01000040c707010000008b75008d76f03b75087303ff5520897500c746fc03000000ba90d27c418916894608897e048b55008d52f03b55087303ff5520895500c742fc03000000b968d47c41890a897a088942048933895304b801000000c390|@4681,63|26,0,0 55,0,@4675 92,0,@4679 110,0,0 4675:C2,196|3b650c7303ff55248b7a048b375250ff305683fe017507bb01000000eb588b54240c8b0e8b45008d40f43b45087303ff5520894500c740fc020000008b7c24048978048b198918ff76048b520883c800ff1283f8017407bb03000000eb158b342483c4043b650c7303ff5524eba4bb0100000083c40483fb0174138b04248d54241083c800e85600000089c2eb038b14248b4c240c8b45008d40f43b45087303ff5520894500c740fc020000008950048b7c240889388b71048906b80100000083c410c3|@4678,63|24,0,0 88,0,1 111,0,0 134,1,@4676 188,0,0 4676:C2,136|3b650c7303ff552483f8017506b801000000c38b7afc8b308b58048b45008d40f43b45087303ff5520894500c740fc020000008b4af48948048b0e89085256538b570890ff1283f80174078b042483c40cc38b04248b542408e8a2ffffff8b7d008d7ff43b7d087303ff5520897d00c747fc020000008947048b742404893789f883c40cc383c800|@4677,63|14,0,0 4677:S33|5554494c49544945535f28292e6d61705461626c6528322964656c657465283229 4678:S32|5554494c49544945535f28292e6d61705461626c65283229656e746572283129 4679:C2,148|3b650c7303ff55248b7a088b37525083fe017509b80100000083c408c38b168b4c24048b45008d40f43b45087303ff5520894500c740fc020000008b3c248978048b1a8918ff7204ff76048b51040bc0ff1283f80174228b45008d40f83b45087303ff5520894500c740fc010000008b542404891083c410c38b342483c4083b650c7303ff5524eb86b80100000083c410c30bc0|@4680,63|21,0,0 138,0,0 4680:S33|5554494c49544945535f28292e6d61705461626c652832296c6f6f6b7570283129 4681:S24|5554494c49544945535f28292e6d61705461626c65283229 4682:C2,404|3b650c7303ff552452508b521083c800ff12f7c00100000075048b38eb05bf14d77c418b3783feff751983feff75078b470483c408c3b8503d7541ff552cb8010000008b5c24048b45008d40f43b45087303ff5520894500c740fc02000000ba20d77c418950048b0c248908578b5304ff128b04248b3083fe0175058b7804eb0eb8503d754190ff552cbf01000000bb0300000083ff01750489daeb7183fbff7507b9ffffffffeb6a8b4424088b700c83fe01742853ff37ff77048b4424100bc0e8e641fbff83f80175218b4424040bc0e8367bfaff83f8017511eb0853ff37ff7704eb07b9ffffffffeb2c8b44240490e8c690faff8b5c2414ff7424048b530889c38b44240c90ff1289c1eb0ae91f0000005050ff770489cb8b3c2483c40c3b650c7303ff5524e967ffffffba010000008b4c240883fa0175058b0424eb218b45008d40f43b45087303ff5520894500c740fc02000000895004c700ffffffff89c78b45008d40f43b45087303ff5520894500c740fc020000008978048b7424048930528b5104ff128b042483c410c383c800|@4685,63|31,0,@4683 55,0,@597 63,0,0 96,0,@4684 130,0,@597 139,0,0 144,0,1 163,0,-1 194,1,@2344 210,1,@1930 230,0,-1 242,1,@1994 302,0,0 349,0,-1 4683:O2|-1,-1 4684:O2|-1,0 4685:S49|545950455f5452454528292e67656e457175616c69747946756e6374696f6e7328332967656e457175616c697479283129 4686:C2,244|3b650c7303ff552483fb017503c2040089d789c68b0383c800e8c2e7faff89f950e822fbf9ff83f801740d568b44240490e842fbf9ffeb148b442408894424088b5b0489f089ca83c404ebb48b0383c800e88ae7faff89c689f083c800e8e6faf9ff83f801740b89f0e80afbf9ff89c2eb0db8503d7541ff552cba010000008b45008d40f43b45087303ff5520894500c740fc02000000bf78d87c4189388b74240c89700451ff7304508b59048b020bc0e8827bfaff83f8ff750bb8ffffffff83c410c2040083f8017507bb01000000eb048b5c24088b5424148954241489d98b1c2489c88b54240483c410e90fffffff83c800|@4689,63|26,1,@2153 34,1,@1644 50,1,@1645 82,1,@2153 94,1,@1644 106,1,@1645 115,0,@597 123,0,0 152,0,@4687 178,1,@1939 188,0,-1 204,0,0 4687:C2,144|3b650c7303ff552489c78b4204e84e7afaff5783f8017507be01000000eb588b308b580489f083c800e80aedf8ff83f801740b89f0e82eedf8ff89c2eb0db8503d7541ff552cba0100000089d98b1c2489d083c800e8b6e1f9ff83f8017407be03000000eb1189c83b650c7303ff5524eba1be0100000083fe017409b80300000083c404c3b8ffffffff83c404c30bc0|@4688,63|14,1,@1932 25,0,0 42,1,@1102 54,1,@1103 63,0,@597 71,0,0 86,1,@1584 96,0,1 115,0,0 125,0,1 134,0,-1 4688:S52|545950455f5452454528292e67656e457175616c69747946756e6374696f6e73283329636f6e737472457128332965712d283129 4689:S46|545950455f5452454528292e67656e457175616c69747946756e6374696f6e73283329636f6e7374724571283329 4690:S27|2920646f6573206e6f74207265737065637420657175616c697479 4691:O2|-1,1 4692:S35|545950455f5452454528292e67656e457175616c69747946756e6374696f6e73283329 4693:C2,36|3b650c7303ff552452508b520883c800ff128b7c24048b77048b04248b560883c408ff22|@4694,63| 4694:S71|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737341627344617461283429552d646563456e762d656e74657256616c466e283129 4695:C2,68|3b650c7303ff552452508b520c83c800ff1283f80175278b7c24048b04248b570883c800ff1283f801750f8b7424048b04248b560483c408ff2283c408c383c408c30bc0|@950,63| 4696:S49|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737341627344617461283429 4697:C2,36|3b650c7303ff55248b7a088b3424893c24ff720450bb030000008b420c56e9796efbff90|@2433,63|22,0,1 31,1,@2429 4698:C2,36|3b650c7303ff55248b7a088b3424893c24ff720450bb030000008b420c56e9396efbff90|@2433,63|22,0,1 31,1,@2429 4699:S18|206973206e6f742061206461746174797065 4700:C2,108|3b650c7303ff5524505052506a016a016a018d7c241457bb1f4e0000b8c8cc7441e8fec4f8ff8b45008d40f43b45087303ff5520894500c740fc020000008b74240889308b5c240c8958040bc0e896c5f8ff508b4424048d5424140bc0e8260000008b042483c414c383c800|@4705,63|24,0,9999 29,0,@202 34,1,@1003 78,1,@1005 94,1,@4701 4701:C2,188|3b650c7303ff552483f8017506b801000000c38b7af452ff70048b5ff88b008b52f483c800e83e57fbff8b7424048b5ef48b53fc8b4d008d49f03b4d087303ff5520894d00c741fc03000000bf1cdd7c4189398b7bf88979088b7a0c8979048b7d008d7fec3b7d087303ff5520897d00c747fc0400000050ff76ecff720cff730c5157ba98dd7c4189178b74240c89770c8b5c2408895f08894f0468a8797741578b5c2418e8caa3faff8b4424188b54241c83c420e946ffffff0bc0|@4704,63|14,0,0 38,1,@2425 77,0,@4702 132,0,@4703 156,0,@2049 166,1,@2069 4702:C2,96|3b650c7303ff55248b7a0450ff7208bbbc1477418b4724ba703d754190e84a60f8ff8b74240450b8b01577418b560c90ff128b5c2408b8000375418b1383c800ff128b5424088b4c240c8954240c8b1c248b44240483c40c51e9ba02faff0bc0|@2462,63|16,0,@1766 24,0,@599 30,1,@601 40,0,@1773 55,0,@312 90,1,@1676 4703:C2,48|3b650c7303ff5524bfec7975418b3424893c24ff7004ff7008ff720cff7208ff72048b18b81856784156e985a0faff90|@2466,63|9,0,@832 37,0,@2465 43,1,@2064 4704:S61|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737369676e4c6973742831296170706c794c697374283129 4705:S49|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737369676e4c697374283129 4706:C2,96|3b650c7303ff55248b7a108b75008d76ec3b75087303ff5520897500c746fc04000000bbe4de7c41891e8b5a08895e0c8b4a0c894e088b4a04894e048b5f308b1424891c246890047841683c0578416890c67541568b5f2052e94262faff0bc0|@2605,63|36,0,@4707 70,0,@2298 75,0,@2301 80,0,@1107 90,1,@1894 4707:C2,36|3b650c7303ff55248b7a088b3424893c24ff720450bb030000008b420c56e9b56afbff90|@2433,63|22,0,1 31,1,@2429 4708:C2,96|3b650c7303ff55248b7a0450ff7208bbbc1477418b4724ba703d754190e8425ef8ff8b74240450b8b01577418b560c90ff128b5c2408b8000375418b1383c800ff128b5424088b4c240c8954240c8b1c248b44240483c40c51e9b200faff0bc0|@2462,63|16,0,@1766 24,0,@599 30,1,@601 40,0,@1773 55,0,@312 90,1,@1676 4709:C2,48|3b650c7303ff5524bfec7975418b3424893c24ff7004ff7008ff720cff7208ff72048b18b81856784156e97d9efaff90|@2466,63|9,0,@832 37,0,@2465 43,1,@2064 4710:C2,76|3b650c7303ff5524ff720cff7208ff7204bb54e07c4183c800e8ae32f8ff8b7c24048b74240c897c240c8b1c248b542408895c240889442404bb0300000089d083c40456e98769fbff83c800|@2734,63|18,0,@4711 26,1,@323 58,0,1 69,1,@2429 4711:S37|2068617320616c7265616479206265656e20626f756e6420696e2074686973206d61746368 4712:C2,44|3b650c7303ff552452508b520883c800ff1283f801750f8b7c24048b04248b570483c408ff2283c408c30bc0|@950,63| 4713:C2,36|3b650c7303ff55248b7a088b3424893c24ff720450bb030000008b420c56e9cd68fbff90|@2433,63|22,0,1 31,1,@2429 4714:C2,44|3b650c7303ff552452508b520883c800ff1283f801750f8b7c24048b04248b570483c408ff2283c408c30bc0|@950,63| 4715:C2,44|3b650c7303ff552452508b520883c800ff1283f801750f8b7c24048b04248b570483c408ff2283c408c30bc0|@950,63| 4716:C2,44|3b650c7303ff552452508b520883c800ff1283f801750f8b7c24048b04248b570483c408ff2283c408c30bc0|@950,63| 4717:O1|@4718 4718:C2,8|b801000000c30bc0|@4719,1|1,0,0 4719:S60|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c7565732832296c6f63616c456e762d283129 4720:C2,72|3b650c7303ff55248b7a0c8b378b5d008d5bf43b5d087303ff5520895d00c743fc020000008973048b70048933891f52508b5208ff128b5c24048b53048b04248b520883c408ff22|@4721,63| 4721:S59|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c756573283229626f6479456e762d283129 4722:C2,36|3b650c7303ff552452508b520883c800ff128b7c24048b77048b04248b560c83c408ff22|@4721,63| 4723:C2,36|3b650c7303ff552452508b520883c800ff128b7c24048b77048b04248b562483c408ff22|@4721,63| 4724:C2,36|3b650c7303ff55248b7a088b3424893c24ff720450bb030000008b420c56e91d66fbff90|@2433,63|22,0,1 31,1,@2429 4725:C2,76|3b650c7303ff5524ff720cff7208ff7204bbf411774183c800e8de2ef8ff8b7c24048b74240c897c240c8b1c248b542408895c240889442404bb0300000089d083c40456e9b765fbff83c800|@2734,63|18,0,@1757 26,1,@323 58,0,1 69,1,@2429 4726:C2,1080|8d7c24ac3b7d0c7303ff55288b7af08b77fc8b5d008d5be83b5d087303ff5520895d00c743fc05000000b978e87c41890b8b4f10894b108b4aec894b0c8b4e0c894b088b770c8973048b4af08b71fc52ff30ff7004ff7008ff700cff760cff770c8b44240ce87621fbff8b44240483c800e8d6e0f9ff83f8017407bb01000000eb7150506a016a016a038d5c240c53bb1f4e0000b8c8cc7441e81ebcf8ff8b45008d40f43b45087303ff5520894500c740fc020000008b142489108b4c240489480483c800e8b6bcf8ff8b7c24188b77f08b5efc8b55008d52f03b55087303ff5520895500c742fc03000000b934e97c41eb05e953000000890a8b4fec894a088b7b0c897a048b4d008d49ec3b4d087303ff5520894d00c741fc04000000bfb0e97c4189398b7b0c89790c8b5e0c89590889510468a87977415189c38b44241490e84e9bfaff89c383c4088b14248b0283f8f775708b7d008d7ff83b7d087303ff5520897d00c747fc01000040c707010000008b75008d76f83b75087303ff5520897500c746fc01000040c706010000008b5d008d5bf03b5d087303ff5520895d00c743fc03000000897308897b04c703030000008b4d008d49ec3b4d087303ff5520eb05e923000000894d00c741fc040000008b7c240489790c895908c74104010000008b74240c8931eb7183f8f175718b7c24108b77f08b5e108b4efc8b45008d40ec3b45087303ff5520894500c740fc04000000ff7204ff7208ff7318ff7330ff77ecff710cff760c50bbfce97c4189188b54240889500c8b4c240c8948088b7c2404897804ff74241068a04b7841683cea7c4168f8f97541eb0ae927010000e911010000508b5c24288b442430e86e5afaff89c689f083c800e89667fbff8b580483fb017502eb4b8b5424308b4af08b79fc56ff770cff72ecff710c8b5c242cb851000000e8e62bf8ffbb50ea7c410bc0e8da2bf8ffff742404ff74240450bb030000008b44241490e8c662fbff83c40ceb01568b54241c8b0c24890a89c80bc0e83ad8faff8b7d008d7ff83b7d087303ff5520897d00c747fc01000040c707010000008b75008d76f83b75087303ff5520897500c746fc01000040c706010000008b5d008d5bf03b5d087303ff5520895d00c743fc03000000897308897b04c703030000008b55008d52ec3b55087303ff5520895500c742fc0400000089420c895a08c74204010000008b4c2430890a89d1eb0eb870ea7c4190ff552cb90100000083c4248b44240889088b7c24108b45008d40f43b45087303ff5520894500c740fc02000000bec8cc74418970048b5c240c8918518b57f80bc0ff128b5424148b4af08b41fcff710c8b580c8b44241483c800e892c2f8ff8b7c24148b77f08b5efcff730cff760c6a038b5fec8b44241c0bc0e8ca84fbff8b5424148b4af08b41108b78088b45008d40f43b45087303ff5520894500c740fc020000008b34248970048b5c2410891889fa83c418ff220bc0|@4736,63|43,0,@4727 102,1,@2308 114,1,@1598 124,0,0 144,0,9999 149,0,@202 154,1,@1003 198,1,@1005 237,0,@4729 287,0,@4730 309,0,@2049 322,1,@2069 367,0,0 397,0,0 433,0,1 481,0,0 558,0,@4731 590,0,@2434 595,0,@4732 600,0,@1198 626,1,@1894 638,1,@2441 677,0,40 682,1,@323 687,0,@4733 694,1,@323 708,0,1 718,1,@2429 742,1,@2153 772,0,0 802,0,0 838,0,1 875,0,0 890,0,@4734 899,0,0 941,0,@202 986,1,@1033 1018,1,@2501 4727:C2,96|3b650c7303ff55248b7a108b75008d76ec3b75087303ff5520897500c746fc04000000bbf4e87c41891e8b5a08895e0c8b4a0c894e088b4a04894e048b5f308b1424891c246890047841683c0578416890c67541568b5f2052e93258faff0bc0|@2605,63|36,0,@4728 70,0,@2298 75,0,@2301 80,0,@1107 90,1,@1894 4728:C2,36|3b650c7303ff55248b7a088b3424893c24ff720450bb030000008b420c56e9a560fbff90|@2433,63|22,0,1 31,1,@2429 4729:C2,96|3b650c7303ff55248b7a0450ff7208bbbc1477418b4724ba703d754190e83254f8ff8b74240450b8b01577418b560c90ff128b5c2408b8000375418b1383c800ff128b5424088b4c240c8954240c8b1c248b44240483c40c51e9a2f6f9ff0bc0|@2462,63|16,0,@1766 24,0,@599 30,1,@601 40,0,@1773 55,0,@312 90,1,@1676 4730:C2,48|3b650c7303ff5524bfec7975418b3424893c24ff7004ff7008ff720cff7208ff72048b18b81856784156e96d94faff90|@2466,63|9,0,@832 37,0,@2465 43,1,@2064 4731:C2,36|3b650c7303ff55248b7a088b3424893c24ff720450bb030000008b420c56e99d5ffbff90|@2433,63|22,0,1 31,1,@2429 4732:S9|457863657074696f6e 4733:S22|29206973206e6f7420616e20657863657074696f6e2e 4734:O3|@7320,@224,@4735 4735:S41|70726f63657373457863657074696f6e3a206261646c792d666f726d65642070617273652d74726565 4736:S67|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c75657328322970726f63657373457863657074696f6e283129 4737:C2,96|3b650c7303ff55248b7a0450ff7208bbbc1477418b4724ba703d754190e86652f8ff8b74240450b8b01577418b560c90ff128b5c2408b8000375418b1383c800ff128b5424088b4c240c8954240c8b1c248b44240483c40c51e9d6f4f9ff0bc0|@2462,63|16,0,@1766 24,0,@599 30,1,@601 40,0,@1773 55,0,@312 90,1,@1676 4738:C2,48|3b650c7303ff5524bfec7975418b3424893c24ff7004ff7008ff720cff7208ff72048b18b81856784156e9a192faff90|@2466,63|9,0,@832 37,0,@2465 43,1,@2064 4739:C2,96|3b650c7303ff55248b7a0450ff7208bbbc1477418b4724ba703d754190e89e51f8ff8b74240450b8b01577418b560c90ff128b5c2408b8000375418b1383c800ff128b5424088b4c240c8954240c8b1c248b44240483c40c51e90ef4f9ff0bc0|@2462,63|16,0,@1766 24,0,@599 30,1,@601 40,0,@1773 55,0,@312 90,1,@1676 4740:C2,48|3b650c7303ff5524bfec7975418b3424893c24ff7004ff7008ff720cff7208ff72048b18b81856784156e9d991faff90|@2466,63|9,0,@832 37,0,@2465 43,1,@2064 4741:C2,96|3b650c7303ff55248b7a0450ff7208bbbc1477418b4724ba703d754190e8d650f8ff8b74240450b8b01577418b560c90ff128b5c2408b8000375418b1383c800ff128b5424088b4c240c8954240c8b1c248b44240483c40c51e946f3f9ff0bc0|@2462,63|16,0,@1766 24,0,@599 30,1,@601 40,0,@1773 55,0,@312 90,1,@1676 4742:C2,48|3b650c7303ff5524bfec7975418b3424893c24ff7004ff7008ff720cff7208ff72048b18b81856784156e91191faff90|@2466,63|9,0,@832 37,0,@2465 43,1,@2064 4743:C2,96|3b650c7303ff55248b7a0450ff7208bbbc1477418b4724ba703d754190e80e50f8ff8b74240450b8b01577418b560c90ff128b5c2408b8000375418b1383c800ff128b5424088b4c240c8954240c8b1c248b44240483c40c51e97ef2f9ff0bc0|@2462,63|16,0,@1766 24,0,@599 30,1,@601 40,0,@1773 55,0,@312 90,1,@1676 4744:C2,96|3b650c7303ff55248b7a0450ff7208bbbc1477418b4724ba703d754190e8924ff8ff8b74240450b8b01577418b560c90ff128b5c2408b8000375418b1383c800ff128b5424088b4c240c8954240c8b1c248b44240483c40c51e902f2f9ff0bc0|@2462,63|16,0,@1766 24,0,@599 30,1,@601 40,0,@1773 55,0,@312 90,1,@1676 4745:C2,48|3b650c7303ff5524bfec7975418b3424893c24ff7004ff7008ff720cff7208ff72048b18b81856784156e9cd8ffaff90|@2466,63|9,0,@832 37,0,@2465 43,1,@2064 4746:C2,96|3b650c7303ff55248b7a0450ff7208bbbc1477418b4724ba703d754190e8ca4ef8ff8b74240450b8b01577418b560c90ff128b5c2408b8000375418b1383c800ff128b5424088b4c240c8954240c8b1c248b44240483c40c51e93af1f9ff0bc0|@2462,63|16,0,@1766 24,0,@599 30,1,@601 40,0,@1773 55,0,@312 90,1,@1676 4747:C2,48|3b650c7303ff5524bfec7975418b3424893c24ff7004ff7008ff720cff7208ff72048b18b81856784156e9058ffaff90|@2466,63|9,0,@832 37,0,@2465 43,1,@2064 4748:C2,96|3b650c7303ff55248b7a0450ff7208bbbc1477418b4724ba703d754190e8024ef8ff8b74240450b8b01577418b560c90ff128b5c2408b8000375418b1383c800ff128b5424088b4c240c8954240c8b1c248b44240483c40c51e972f0f9ff0bc0|@2462,63|16,0,@1766 24,0,@599 30,1,@601 40,0,@1773 55,0,@312 90,1,@1676 4749:C2,48|3b650c7303ff5524bfec7975418b3424893c24ff7004ff7008ff720cff7208ff72048b18b81856784156e93d8efaff90|@2466,63|9,0,@832 37,0,@2465 43,1,@2064 4750:C2,96|3b650c7303ff55248b7a0450ff7208bbbc1477418b4724ba703d754190e83a4df8ff8b74240450b8b01577418b560c90ff128b5c2408b8000375418b1383c800ff128b5424088b4c240c8954240c8b1c248b44240483c40c51e9aaeff9ff0bc0|@2462,63|16,0,@1766 24,0,@599 30,1,@601 40,0,@1773 55,0,@312 90,1,@1676 4751:C2,48|3b650c7303ff5524bfec7975418b3424893c24ff7004ff7008ff720cff7208ff72048b18b81856784156e9758dfaff90|@2466,63|9,0,@832 37,0,@2465 43,1,@2064 4752:O3|@7320,@224,@4753 4753:S27|61737369676e54797065733a2077696c646361726420666f756e64 4754:O3|@7320,@224,@4755 4755:S34|61737369676e54797065733a206c617965726564207061747465726e20666f756e64 4756:S48|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c756573283229 4757:S36|50415253455f5452454528292e706173733228362961737369676e56616c756573283629 4758:S21|50415253455f5452454528292e7061737332283629 4759:C2,44|3b650c7303ff552489d1500bc0e82675faff518d5424080bc0e82a00000089c38b44240483c408e9b8eefaff|@4761,63|14,1,@1994 26,1,@4760 40,1,@2230 4760:C2,124|3b650c7303ff552483f8017506b801000000c38b7af88b77fc8b5efc89d1ff30ff70048b4424040bc0e88e09faff518b53180bc0ff12f7c00100000075048b38eb048b7c2408578b4424088b5424040bc0e8aaffffff8b7d008d7ff43b7d087303ff5520897d00c747fc020000008947048b3424893789f883c410c3|@413,63|14,0,0 42,1,@1690 4761:S98|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296d616b65536967496e746f28362970726f63657373536967283329757064617465436f6e7374724c697374283129 4762:O3|@7320,@224,@4763 4763:S27|70726f636573735369673a206e6f742061207369676e6174757265 4764:S79|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296d616b65536967496e746f28362970726f63657373536967283329 4765:C2,68|3b650c7303ff552452508b520c83c800ff1283f80175278b7c24048b04248b570883c800ff1283f801750f8b7424048b04248b560483c408ff2283c408c383c408c30bc0|@950,63| 4766:C2,68|3b650c7303ff552452508b520c83c800ff1283f80175278b7c24048b04248b570883c800ff1283f801750f8b7424048b04248b560483c408ff2283c408c383c408c30bc0|@950,63| 4767:C2,72|3b650c7303ff5524ff720cff7208ff7204bb5410784183c800e81a1ef8ff8b7c24088b74240c897c240c8b5c2404895c240889442404bb030000008b042483c40456e9611dfaff90|@4768,63|18,0,@2335 26,1,@323 55,0,1 67,1,@1758 4768:S82|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296d616b65536967496e746f2836296c6f6f6b75704661696c757265283129 4769:C2,232|3b650c7303ff55248b7a148b72108b5d008d5bf03b5d087303ff5520895d00c743fc03000000b944f67c41890b8b4f20894b088b7e20897b048b4a148b7d008d7ff03b7d087303ff5520897d00c747fc03000000525053ff712cff762c57b98cf67c41890f8b7424088977088b5424048957048b4c24148b75008d76ec3b75087303ff5520897500c746fc04000000bad4f67c4189168b510489560c8b410c8946088b5908895e048b442418897c2418bf90047841897c2414bf3c0578418b5c2410897c2410bf90c675418b54240c897c240c8974240889d989d389c789c883c40857e9e04afaff|@4773,63|39,0,@4770 95,0,@4771 144,0,@4772 177,0,@2298 186,0,@2301 199,0,@1107 228,1,@1894 4770:C2,44|3b650c7303ff552452508b520883c800ff1283f801750f8b7c24048b04248b570483c408ff2283c408c30bc0|@950,63| 4771:C2,44|3b650c7303ff552452508b520883c800ff1283f801750f8b7c24048b04248b570483c408ff2283c408c30bc0|@950,63| 4772:C2,36|3b650c7303ff55248b7a088b3424893c24ff720450bb030000008b420c56e9311bfaff90|@1796,63|22,0,1 31,1,@1758 4773:S81|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296d616b65536967496e746f2836296c6f6f6b7570476c6f62616c283129 4774:C2,36|3b650c7303ff55248b7a088b3424893c24ff720450bb030000008b420c56e9951afaff90|@1796,63|22,0,1 31,1,@1758 4775:C2,864|3b650c7303ff552489c789f890e8fecef8ff89fe90e83ecff8ff83f8017408b801000000c2040089f0e81e59faff89c789d883c800e81259faff500bc7a801587503ff55383bf8742e89f00bc0e84ad4f9ff89c3b82cfb7c41e8aa1af8ffbb4c5177410bc0e89e1af8ff8b5424048b342483c40856ff2289f15389c890e85a58faff508b4424040bc0e84e58faff89c68b04240bc0e826cdf9ff83f80175728b042483c800e82ad3f9ff83f80174678b042483c800e84ad3f9ff8b188b780889c8e8625afaff515790e8de02000083f801741f8b042483c800e86ed3f9ff8b742414897424148b5c240c83c410e90effffff8b44240483c800e89ed3f9ff89c3b848fc7c41e8fe19f8ffbbf4177841eb0ae94a000000e9150000000bc0e8e619f8ff8b5424148b74241083c41856ff2289c883c800e862d3f9ff89c3b848fc7c41e8c219f8ffbbf41778410bc0e8b619f8ff8b54240c8b5c240883c41053ff2289f083c800e86ad2f9ff83f801744e5689f083c800e88ad2f9ff8b0424e852d2f9ff83f801740f8b042483c800e872d2f9ff89c3eb0db8503d7541ff552cbb010000008b4424080bc0e87a59faff518b1be8f601000083f8017450eb045651eb4a8b442404e80ad2f9ff83f801740f8b4424040bc0e82ad2f9ff89c2eb0db8503d7541ff552cba010000008b420883c800e856d2f9ff8b4c2414894c241489c38b042483c410e9f5fdffff8b042483c800e8faccf8ff83c800e8421efbff83f80175318b042483c800e86ed2f9ff89c3b848fc7c41e8ce18f8ffbb70fc7c410bc0e8c218f8ff8b5424148b5c241083c41853ff228b04240bc0e86257faff83f80174418b44240c0bc0e88a57faff83f80175318b042483c800e81ed2f9ff89c3b848fc7c41e87e18f8ffbb8cfc7c410bc0e87218f8ff8b5424148b5c241083c41853ff228b04240bc0e8c26cfaff83f80174658b44240c0bc0e8b26cfaff83f801755a8b042483c800e8ced1f9ff89c3b848fc7c41e82e18f8ffbbccfc7c410bc0e82218f8ff89c38b44240c90e8aad1f9ff89da89c389d090e80a18f8ffbbecfc7c410bc0e8fe17f8ff8b5424148b4c241083c41851ff22e92c0000008b042490e8eacbf8ff89c38b44240c90e8decbf8ff89da89c389d090e8e220fbffb80100000083c410c204008b1c248b44240c8d54241090e8f601000083c410c20400|@4786,63|14,1,@1109 22,1,@1111 32,0,0 42,1,@1926 54,1,@1926 78,1,@1624 85,0,@4776 90,1,@323 95,0,@1929 102,1,@323 126,1,@1923 138,1,@1923 150,1,@1598 166,1,@1620 182,1,@1621 194,1,@1932 202,1,@4777 218,1,@1622 250,1,@1624 257,0,@4779 262,1,@323 267,0,@2343 286,1,@323 310,1,@1624 317,0,@4779 322,1,@323 327,0,@2343 334,1,@323 358,1,@1620 374,1,@1621 382,1,@1620 398,1,@1621 407,0,@597 415,0,0 426,1,@1932 434,1,@4777 454,1,@1620 470,1,@1621 479,0,@597 487,0,0 498,1,@1622 530,1,@1109 538,1,@2344 554,1,@1624 561,0,@4779 566,1,@323 571,0,@4780 578,1,@323 602,1,@1930 618,1,@1931 634,1,@1624 641,0,@4779 646,1,@323 651,0,@4781 658,1,@323 682,1,@1994 698,1,@1994 714,1,@1624 721,0,@4779 726,1,@323 731,0,@4782 738,1,@323 750,1,@1624 762,1,@323 767,0,@4783 774,1,@323 802,1,@1109 814,1,@1109 826,1,@2353 831,0,0 854,1,@4784 4776:S38|43616e6e6f74206170706c792074797065207265616c69736174696f6e3a2054797065732028 4777:C2,164|3b650c7303ff552483fb01751183f8017506b803000000c3b801000000c389c68b0383c800e82acaf8ff83f801745b89f18b030bc0e84acaf8fff7c101000000755389c68b0183c800e806caf8ff83f801743c568b0183c800e826caf8ffff730489c38b4424040bc0e8bebef9ff83f801740e8b1c248b410483c408e97fffffffb80100000083c408c3e90c000000b801000000c3b801000000c3b801000000c383c800|@4778,63|19,0,1 25,0,0 38,1,@1102 54,1,@1103 74,1,@1102 90,1,@1103 106,1,@1584 130,0,0 144,0,0 150,0,0 156,0,0 4778:S36|545950455f5452454528292e736574576865726554797065283329657141726773283229 4779:S32|43616e6e6f74206170706c792074797065207265616c69736174696f6e3a2028 4780:S18|2920697320616c726561647920667265652e 4781:S53|2920697320616e206571747970652062757420746865207479706520646f6573206e6f74207065726d697420657175616c6974792e 4782:S21|292069732061206461746174797065206275742028 4783:S9|29206973206e6f742e 4784:C2,380|3b650c7303ff552489d789c689f083c800e836cff9ff89c189d883c800e8b655faff50505089f00bc0e892c9f8ff570bc0e8d2c9f8ff83f801742d8b45008d40f83b45087303ff5520894500c740fc0100004089308d7c2408c707ffffffff8d542408894204eb118d442408c700010000008d7c24088977048b55008d52f43b55087303ff5520895500c742fc020000008b44240889028b7c240c897a048b45008d40f03b45087303ff5520894500c740fc030000008950088948048b542404891089f153e892c9f8ff508b4424040bc0e89a53faff83f801747289c8e8dec8f8ff510bc0e8261afbff83f80174298b042483c800e89252faff83c800e86ec7f9ff83f8017411bb030000008b04240bc0e8321cfbffeb538b04240bc0e88653faff83f801753d8b44240c8b78048b0424e816cef9ff5789c3b85100000083c800e87214f8ffbb04677741eb05e91800000083c800e85e14f8ff8b142483c800ff12eb015083c404eb01508b5c24048b44240883c41ce9751cfbff90|@4785,63|18,1,@1624 30,1,@1932 42,1,@1109 50,1,@1111 91,0,-1 110,0,0 198,1,@1113 210,1,@1930 222,1,@1109 230,1,@2344 246,1,@1923 254,1,@1598 264,0,1 274,1,@2348 286,1,@1931 306,1,@1624 314,0,40 322,1,@323 327,0,@1993 342,1,@323 375,1,@2350 4785:S38|545950455f5452454528292e7365745768657265547970652833297365744571756976283229 4786:S27|545950455f5452454528292e736574576865726554797065283329 4787:O3|@7320,@224,@4788 4788:S40|6d616b65536967496e746f3a206e6f742061205369674964656e74206e6f72206120536967446563 4789:S66|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296d616b65536967496e746f283629 4790:S63|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c28352973696756616c7565283429 4791:C2,36|3b650c7303ff55248b7a088b3424893c24ff720450bb030000008b420c56e94512faff90|@1796,63|22,0,1 31,1,@1758 4792:C2,164|3b650c7303ff55248b7d008d7ff83b7d087303ff5520897d00c747fc01000040891f8b75008d76f43b75087303ff5520897500c746fc02000000bac0007d418916897e0450535789f283c800ff128b44240883c800e82ac8faff8b0c248b398b74240850578b060bc0e842c9faff8b5d008d5bec3b5d087303ff5520895d00c743fc040000008b54240c89530c8b0c24894b088b7c2404897b04890389d883c414c20400|@4810,63|59,0,@4793 86,1,@2178 106,1,@2184 4793:C2,112|3b650c7303ff552489d783c800e8664afaff8b55008d52f03b55087303ff5520895500c742fc03000000b94c017d41890a8b4f04894a08897a048b75008d76f43b75087303ff5520897500c746fc02000000bb54067d41891e8956048b1424c704240100000089f352e92a67faff0bc0|@4809,63|14,1,@1919 43,0,@4794 83,0,@4807 98,0,0 106,1,@2002 4794:C2,356|3b650c7303ff552489d189d8ba2c387741e8d636faff83f801746a89d8ba2038774183c800e84e37faff83f8017543ff7104b8150000000bc0e87298f9ff8b7d008d7fec3b7d087303ff5520897d00c747fc04000000c7470c01000000c7470801000000be40970408897704890789f8eb068b4008ff71048b14248b7c240483c40c57ff2289d8ba143a774190e84238faff83f801746d89d8ba083a774183c800e8ba38faff8b7d008d7ff43b7d087303ff5520897d00c747fc02000000becc027d4189378b5908895f0489c689f00bc0e89ec4f8ff575089f083c800e85e4efaff89c389d883c800e836c3f9ff83f80175165189da8b5c240889d090e802010000eb06e953000000518b44240483c800e8ae15fbff83f80174368b14248b4a088b01a8017503ff553889c783c70270f689390bc0e81a0dfaff89c38b44240490e83e19fbffb80100000083c40cc20400b80100000083c40cc20400b801000000c20400|@4806,63|13,0,@1851 18,1,@1852 30,0,@1850 38,1,@1855 51,0,10 58,1,@1488 89,0,0 96,0,0 101,0,I48 136,0,@1865 142,1,@1866 154,0,@1864 162,1,@1869 191,0,@4795 210,1,@1109 222,1,@1923 234,1,@1598 254,1,@4797 274,1,@2344 310,1,@1750 322,1,@2353 327,0,0 338,0,0 349,0,0 4795:C2,40|3b650c7303ff55248b42048b38f7c7010000007503ff553889fe83c60270f6893089f8e9ac0cfaff|@4796,53|36,1,@1750 4796:S56|535452554354555245535f28292e72656e616d655661726961626c654173426f756e642833297365745374616d7073283129283329283129 4797:C2,116|3b650c7303ff55248b7d008d7ff03b7d087303ff5520897d00c747fc03000000bee0037d418937895f08bb0c057d41895f0489c28b45008d40f43b45087303ff5520894500c740fc02000000b914057d41890889780489d390e8a293faff89c289d80bc0ff1289c1b80100000089caff2283c800|@4805,63|33,0,@4798 43,0,@4800 77,0,@4801 90,1,@2081 105,0,0 4798:C2,220|3b650c7303ff552489d689d890e892c7f9ff83f801747089f15389d890e8b2c7f9ff8b0424e87ac7f9ff83f801740d8b042483c800e89ac7f9ffeb0fb8503d75410bc0ff552cb8010000008b400883c800e8c6c7f9ff89c789f883c800e87ec2f8ff575089f883c800e83e4cfaff89c689f083c800e816c1f9ff83f8017519ff71088b1c24eb05e94800000089f08b510483c800ff12eb03ff71088b4424040bc0e88a13fbff83f80174208b4424088b14240bc0ff1289c38b44240490e82e17fbffb80100000083c410c3b80100000083c410c3b801000000c30bc0|@4799,63|14,1,@1620 30,1,@1621 38,1,@1620 54,1,@1621 61,0,@597 71,0,0 82,1,@1622 94,1,@1109 106,1,@1923 118,1,@1598 162,1,@2344 190,1,@2353 195,0,0 204,0,0 213,0,0 4799:S42|545950455f5452454528292e736574547970657328322973657454797065436f6e73747256616c283229 4800:O1|@4797 4801:C2,44|89c78b45008d40f03b45087303ff5520894500c740fc03000000be5c057d4189308b7204897008897804c390|@4804,53|27,0,@4802 4802:C2,16|3b650c7303ff55248b5a048b5208ff22|@4803,63| 4803:S45|545950455f5452454528292e736574547970657328322973657454797065436f6e73747256616c283129283129 4804:S42|545950455f5452454528292e736574547970657328322973657454797065436f6e73747256616c283129 4805:S23|545950455f5452454528292e7365745479706573283229 4806:S53|535452554354555245535f28292e72656e616d655661726961626c654173426f756e642833297365745374616d7073283129283329 4807:C2,28|3b650c7303ff55248b78088b3424893c248b58048b008b520456ff22|@4808,63| 4808:S53|535452554354555245535f28292e72656e616d655661726961626c654173426f756e642833297365745374616d7073283129283129 4809:S50|535452554354555245535f28292e72656e616d655661726961626c654173426f756e642833297365745374616d7073283129 4810:S38|535452554354555245535f28292e72656e616d655661726961626c654173426f756e64283329 4811:S52|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c283529 4812:C2,164|3b650c7303ff5524525083c800e8423ffaff83f80174718b3c248b1f83fbfd75218b57048b0a8b0183f803750489feeb1389cf3b650c7303ff5524ebddbe0100000089fe8b0e83f90175058b5604eb0fb8484777410bc0ff552cba010000008b442404528b40040bc0e88e3bfaff8b14245223d0f6c2015a7503ff55383bd07c10b803000000eb05e90d00000083c40cc3b80100000083c40cc3b80100000083c408c390|@4813,63|14,1,@1908 62,0,0 81,0,@1910 91,0,0 106,1,@1902 130,0,1 146,0,0 155,0,0 4813:S72|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973747275637456616c75652835296d757374436f707954797065283129 4814:S57|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973747275637456616c7565283529 4815:C2,164|3b650c7303ff5524525083c800e8ee3dfaff83f80174718b3c248b1f83fbfd75218b57048b0a8b0183f803750489feeb1389cf3b650c7303ff5524ebddbe0100000089fe8b0e83f90175058b5604eb0fb8484777410bc0ff552cba010000008b442404528b40040bc0e83a3afaff8b14245223d0f6c2015a7503ff55383bd07c10b803000000eb05e90d00000083c40cc3b80100000083c40cc3b80100000083c408c390|@4816,63|14,1,@1908 62,0,0 81,0,@1910 91,0,0 106,1,@1902 130,0,1 146,0,0 155,0,0 4816:S109|535452554354555245535f28292e70617373325374727563747328332970617373325374727563742835297061737332537472756374757265446563283229706173733253747275637475726542696e64283629726573756c745369672d6d757374436f707954797065283129 4817:C2,132|8b7d008d7ff83b7d087303ff5520897d00c747fc01000040c707010000008b75008d76f83b75087303ff5520897500c746fc01000040c706010000008b55008d52f03b55087303ff5520895500c742fc03000000897208897a04c702030000008b7d008d7ff03b7d087303ff5520897d00c747fc03000000895f08895704890789f8c390|@4818,61|26,0,0 56,0,0 92,0,1 4818:S32|5354525543545f56414c5328292e6d616b654c6f63616c537472756374283229 4819:S84|535452554354555245535f28292e70617373325374727563747328332970617373325374727563742835297061737332537472756374757265446563283229706173733253747275637475726542696e64283629 4820:S63|535452554354555245535f28292e70617373325374727563747328332970617373325374727563742835297061737332537472756374757265446563283229 4821:C2,160|3b650c7303ff55248b7afc8b75008d76ec3b75087303ff5520897500c746fc04000000b9280c7d41890e8b4ffc894e0c8946088b7a08897e045050505250538d5c240c89f0e8aa0afaff8b342483fe017502eb368b1eff7604ff7308ff730cff7310ff7314ff73188b138b4b0489cb89d08d542430e8160100008b342483c4043b650c7303ff5524ebc38b5c24088b530c8b421c8b54240c83c418ff2283c800|@4848,63|36,0,@4822 70,1,@1777 118,1,@4825 4822:C2,88|3b650c7303ff5524ff720cff7208ff720489c3b89c0c7d4190e87206f8ffbbf41177410bc0e86606f8ff8b7c24048b74240c897c240c8b1c248b542408895c240889442404bb0300000089d083c40456e9ab05faff83c800|@4824,63|20,0,@4823 26,1,@323 31,0,@1757 38,1,@323 70,0,1 81,1,@1758 4823:S8|46756e63746f7220 4824:S69|535452554354555245535f28292e7061737332537472756374732833297061737332537472756374283529706173733246756e63746f7244656328322973456e762d283129 4825:C2,1480|908dbc247cffffff3b7d0c7303ff55288b3883ff0375615253ff7004ff7008ff700cb8150000000bc0e8d28cf9ff8b75008d76ec3b75087303ff5520897500c746fc04000000c7460c01000000c7460801000000bb40970408895e04890689f0ba50287741e81a1bfaff8b14248b3a83fff5750989d1eb59e93d05000083fff7750489d1eb4b83ffef750489d1eb428b75008d76f43b75087303ff5520897500c746fc02000000c746040100000089168b4d008d49f43b4d087303ff5520894d00c741fc02000000897104c701f7ffffff8b5c24108b73f050ff760cff7424306840970408bb0100000089c88b4c24208b51f00bc0e81adbfaff89c189cb8b44240c83c800e8fafbffff5150bb409704088b44241483c800ff154094040883f80175318b4424088b78248b45008d40f43b45087303ff5520894500c740fc020000008b34248970048b5c2414891889faff12eb628b44240490e8de3cfaff8b7d008d7ff03b7d087303ff5520897d00c747fc03000000bee0127d4189378b1c24895f088b5424088957048b4d008d49f43b4d087303ff5520894d00c741fc02000000bee8147d4189318979046a0189cb90e8a659faff8b5c24108b142489138b4c24088b44241c8b78f08b770c8b5d008d5bf03b5d087303ff5520895d00c743fc03000000ba7c157d4189138b51188953088b4e18894b048b5424088b44241c8b78f08b770c8b4d008d49f03b4d087303ff5520894d00c741fc03000000b8c4157d4189018b42208941088b56208951048b44241c8b78f08b770c8b5424088b44241c8b78f08b470c8b7d008d7ff03b7d087303ff5520897d00c747fc030000005351ff7610ff722cff702c57b80c167d4189078b7424088977088b5424048957048b4424348b70f08b560c8b5d008d5bcc3b5d087303ff5520895d00c743fc0c000000897b2c8b7a28897b288b4a24894b248b4424108943208b421c89431c8b7424148973188b72148973148b74240c8973108b720c89730c8b7a08897b088b7a04897b04be54167d4189338b44241ce8c233faff8b55008d52f83b55087303ff5520895500c742fc0100004089028b4d008d49f43b4d087303ff5520894d00c741fc02000000b8e8167d4189018951048b7c24348b77f05352518b5c24548b46040bc0e87202f8ffbb90177d410bc0e86602f8ffff742408ff742408ff7424448b5c24648b54244c8b52f0e8d60cfaff8b4c24488b3183fe01750489c7eb7289c38b4424280bc0e82a33faff8b5424408b7af053508b5c245c8b470483c800e81602f8ffbb90177d410bc0e80a02f8ffff742410ff742464508b5c240c8b44245c8b7424548b56f083c800e842d8faff89c389d883c800e89632faff89c189d883c800e8ce32faff5050538d7c2404eb05e91f0100005789c389c8e8fa32faff8b75008d76f43b75087303ff5520897500c746fc020000008b5c2404891e8b5424088956048b4d008d49f43b4d087303ff5520894d00c741fc02000000b89c177d4189018b3c248979048b5c246483fb01744c89f80bc0e81632faff5089f8e85232faff505056518d5424085289c38b442414e88232faff8b55008d52f43b55087303ff5520895500c742fc020000008b4c2408890a8b44240c894204eb0789f250505056518b4c24688b41f08b78fc52ff742408ff71ecffb4248c000000ff77fc8b5c24288b44243890e80638faff8b74246c8b5ef08b53048b9c248000000089d0e8d200f8ffbb90177d410bc0e8c600f8ffff74242cff742404508b5c24108b442424badcc6774190e8e6b4faff89c783c42c89f8e86ab6faff8b4c24048b3150568b0790e886b7faff8b5d008d5bec3b5d087303ff5520895d00c743fc04000000c7430c010000008b14248953088b4c2404894b048903b801000000e86e06000053508b5c24348b44246490e8020700008b7c244889c68b45008d40f43b45087303ff5520894500c740fc020000008970048b5c245c8918568b57f883c800ff128b5424588b0c24890ab80100000083c450c21400b8e4197d41ff552cb80100000090|@4847,63|35,0,10 42,1,@1488 73,0,0 80,0,0 85,0,I48 97,0,@1801 102,1,@1803 170,0,0 205,0,-5 225,0,I48 230,0,0 246,1,@2265 262,1,@4817 269,0,I48 282,0,I24 346,1,@1919 375,0,@4826 419,0,@4828 434,1,@2002 486,0,@4830 543,0,@4831 622,0,@4832 743,0,@4833 754,1,@1904 809,0,@4836 838,1,@323 843,0,@4838 850,1,@323 878,1,@1792 906,1,@1904 930,1,@323 935,0,@4838 942,1,@323 974,1,@2265 986,1,@1902 998,1,@1904 1022,1,@1906 1088,0,@4839 1114,1,@1902 1122,1,@1904 1142,1,@1906 1230,1,@1917 1254,1,@323 1259,0,@4838 1266,1,@323 1288,0,@2175 1294,1,@2177 1306,1,@2178 1322,1,@2184 1353,0,0 1373,0,0 1378,1,@4841 1394,1,@4843 1456,0,0 1467,0,@4845 1475,0,0 4826:C2,400|3b650c7303ff552489d15089d8ba143a774183c800e82627faff83f80174438b4104ff700c89d8ba083a774190e89a27faff89c78b45008d40f43b45087303ff5520894500c740fc020000008978048b74240489308b14248b5c240883c41053ff2289d8baf83a7741e8b627faff83f80174708b4104ff700889d8baec3a774190e82a28faff8b78088b1f83fb0175588b55008d52f03b55087303ff5520895500c742fc030000008b71088972088b4f04894a04c702050000008b75008d76ec3b75087303ff5520897500c746fc040000008b580c895e0c8956088b5004895604eb0ae93b000000e9060000008b08890eeb0289c68b45008d40f43b45087303ff5520894500c740fc020000008970048b54240489108b14248b4c240883c41051ff2289d8ba2c38774183c800e82624faff83f801744b8b4104ff702489d8ba2038774190e89a24faff8b5908e80a28faff89c78b45008d40f43b45087303ff5520894500c740fc020000008978048b74240489308b14248b5c240883c41053ff22b80100000083c404c2040083c800|@4827,63|14,0,@1865 22,1,@1866 40,0,@1864 46,1,@1869 101,0,@1871 106,1,@1872 124,0,@1870 130,1,@1875 182,0,2 294,0,@1851 302,1,@1852 320,0,@1850 326,1,@1855 334,1,@1877 387,0,0 4827:S83|535452554354555245535f28292e7061737332537472756374732833297061737332537472756374283529706173733246756e63746f72446563283229706173733246756e63746f7242696e64283729283329 4828:C2,28|3b650c7303ff55248b78088b3424893c248b58048b008b520456ff22|@4829,63| 4829:S83|535452554354555245535f28292e7061737332537472756374732833297061737332537472756374283529706173733246756e63746f72446563283229706173733246756e63746f7242696e64283729283129 4830:C2,44|3b650c7303ff552452508b520883c800ff1283f801750f8b7c24048b04248b570483c408ff2283c408c30bc0|@950,63| 4831:C2,44|3b650c7303ff552452508b520883c800ff1283f801750f8b7c24048b04248b570483c408ff2283c408c30bc0|@950,63| 4832:C2,44|3b650c7303ff552452508b520883c800ff1283f801750f8b7c24048b04248b570483c408ff2283c408c30bc0|@950,63| 4833:O1|@4834 4834:C2,8|b801000000c30bc0|@4835,1|1,0,0 4835:S95|535452554354555245535f28292e7061737332537472756374732833297061737332537472756374283529706173733246756e63746f72446563283229706173733246756e63746f7242696e64283729656e7657697468417267732d283129 4836:C2,40|3b650c7303ff55248b42048b38f7c7010000007503ff553889fe83c60270f6893089f8e990f8f9ff|@4837,53|36,1,@1750 4837:S92|535452554354555245535f28292e7061737332537472756374732833297061737332537472756374283529706173733246756e63746f72446563283229706173733246756e63746f7242696e642837296e6577547970654964283129 4838:S3|28292e 4839:C2,164|3b650c7303ff5524525083c800e81a2ffaff83f80174718b3c248b1f83fbfd75218b57048b0a8b0183f803750489feeb1389cf3b650c7303ff5524ebddbe0100000089fe8b0e83f90175058b5604eb0fb8484777410bc0ff552cba010000008b442404528b40040bc0e8662bfaff8b14245223d0f6c2015a7503ff55383bd07c10b803000000eb05e90d00000083c40cc3b80100000083c40cc3b80100000083c408c390|@4840,63|14,1,@1908 62,0,0 81,0,@1910 91,0,0 106,1,@1902 130,0,1 146,0,0 155,0,0 4840:S105|535452554354555245535f28292e7061737332537472756374732833297061737332537472756374283529706173733246756e63746f72446563283229706173733246756e63746f7242696e64283729726573756c745369672d6d757374436f707954797065283129 4841:C2,100|8b45008d40f83b45087303ff5520894500c740fc01000040c700010000008b7d008d7ff83b7d087303ff5520897d00c747fc01000040c7070100000089c68b45008d40f03b45087303ff5520894500c740fc03000000897808897004c70003000000c390|@4842,49|26,0,0 56,0,0 94,0,1 4842:S26|5354525543545f56414c5328292e6d616b654c6f63616c283129 4843:C2,48|8b7d008d7fec3b7d087303ff5520897d00c747fc040000008b74240889770c8b542404895708894704891f89f8c20800|@4844,61| 4844:S28|5354525543545f56414c5328292e6d616b6546756e63746f72283429 4845:O3|@7320,@224,@4846 4846:S16|706173733246756e63746f7242696e64 4847:S80|535452554354555245535f28292e7061737332537472756374732833297061737332537472756374283529706173733246756e63746f72446563283229706173733246756e63746f7242696e64283729 4848:S61|535452554354555245535f28292e7061737332537472756374732833297061737332537472756374283529706173733246756e63746f72446563283229 4849:C2,148|3b650c7303ff55248b7afc8b75008d76ec3b75087303ff5520897500c746fc04000000b95c1b7d41890e8b4ffc894e0c8946088b420889460450505052538d5c240889f090e86afbf9ff8b3c2483ff017502eb2a8b37ff7704ff7608ff760c8b5e048b068d54242090e81a0100008b3c2483c4043b650c7303ff5524ebcf8b7424048b5e0c8b43048b54240883c414ff2283c800|@4855,63|36,0,@4850 70,1,@1777 106,1,@4853 4850:C2,88|3b650c7303ff5524ff720cff7208ff720489c3b8d01b7d4190e83ef7f7ffbbf41177410bc0e832f7f7ff8b7c24048b74240c897c240c8b1c248b542408895c240889442404bb0300000089d083c40456e977f6f9ff83c800|@4852,63|20,0,@4851 26,1,@323 31,0,@1757 38,1,@323 70,0,1 81,1,@1758 4851:S10|5369676e617475726520 4852:S71|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352970617373325369676e617475726544656328322973456e762d283129 4853:C2,208|3b650c7303ff55248b7af0525053ff770c8b470490e86af6f7ffbb5d0000000bc0e85ef6f7ffff3424ff74240c50bb010000008b4424208b7424188b56f083c800e896ccfaff89c389d883c800e8ea26faff89c189d883c800e82227faff51508b0383c800e812adfaff8b7d008d7fec3b7d087303ff5520897d00c747fc040000008b74240489770c8b1c24895f088b54240c89570489078b4c242089398b4424148b70f88b45008d40f43b45087303ff5520894500c740fc02000000897804891089f28b5c241883c42453ff220bc0|@4854,63|22,1,@323 27,0,46 34,1,@323 47,0,0 66,1,@2265 78,1,@1902 90,1,@1904 102,1,@2184 4854:S84|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352970617373325369676e617475726544656328322970617373325369676e617475726542696e64283429 4855:S63|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352970617373325369676e6174757265446563283229 4856:C2,708|8d7c24b03b7d0c7303ff5528525053b81500000090e81e7cf9ff8b7d008d7fec3b7d087303ff5520897d00c747fc04000000c7470c01000000c7470801000000be40970408897704890789f8ba50287741e8660afaff8b5c24088b530c8b4d008d49f03b4d087303ff5520894d00c741fc03000000bfa4207d4189398b70188971088b7a188979048b75008d76f03b75087303ff5520897500c746fc03000000bbec207d41891e8b5820895e088b7a20897e048b5c24088b530c8b7d008d7ff03b7d087303ff5520897d00c747fc03000000bb34217d41891f8b582c895f088b5a2c895f048b5424088b5a0c8b55008d52cc3b55087303ff5520895500c742fc0c000000897a2c505156ff701057ff7314ff7328ff7008ff700cff7024ff7004ff701c528b5c2418895a288b44240c8942248972208b44240489421c894a188b4c241c894a148b7424248972108b74241089720c8b7424148972088b742408897204be7c217d4189328b74243c52ff7608ff76048b5ef48b4424448b56fc83c800e8eaeef9ff8b5c243c8b55008d52f03b55087303ff5520895500c742fc03000000b9f8217d41890a8b4424308942088b7b0c897a048b75008d76f03b75087303ff5520897500c746fc03000000b988227d41890e894608897e048b4d008d49f03b4d087303ff5520894d00c741fc03000000b8c8227d4189018b4424308941088979048b44243c8b7d008d7ff03b7d087303ff5520897d00c747fc03000000bb08237d41891f8b5c2430895f088b580c895f048b45008d40cc3b45087303ff5520894500c740fc0c0000008b5c242089582c8b5c24188958288948248b4c24288948208b5c240489581c8b4c242c8948188b5c241c8958148b4c242489481089700c895008897804bf7c217d4189388b74243c8b5c2440894424408b56088954243c8b4e04894c243889d88b5ef489c78b4424348b56fc83c43857e9afedf9ff83c800|@4868,63|16,0,10 22,1,@1488 53,0,0 60,0,0 65,0,I48 77,0,@1801 82,1,@1803 118,0,@4857 161,0,@4858 211,0,@4859 355,0,@4860 386,1,@1746 419,0,@4863 463,0,@4865 500,0,@4866 545,0,@4867 650,0,@4860 701,1,@1746 4857:C2,44|3b650c7303ff552452508b520883c800ff1283f801750f8b7c24048b04248b570483c408ff2283c408c30bc0|@950,63| 4858:C2,44|3b650c7303ff552452508b520883c800ff1283f801750f8b7c24048b04248b570483c408ff2283c408c30bc0|@950,63| 4859:C2,44|3b650c7303ff552452508b520883c800ff1283f801750f8b7c24048b04248b570483c408ff2283c408c30bc0|@950,63| 4860:O1|@4861 4861:C2,8|b801000000c30bc0|@4862,1|1,0,0 4862:S71|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352970617373324c6f63616c6465632832296c6f63616c456e762d283129 4863:C2,36|3b650c7303ff55248b7a0852508b5708ff128b7424048b5e048b04248b530883c408ff22|@4864,63| 4864:S70|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352970617373324c6f63616c646563283229626f6479456e762d283129 4865:C2,36|3b650c7303ff55248b7a0852508b570cff128b7424048b5e048b04248b530c83c408ff22|@4864,63| 4866:C2,36|3b650c7303ff55248b7a0852508b5724ff128b7424048b5e048b04248b532483c408ff22|@4864,63| 4867:C2,36|3b650c7303ff55248b7a0852508b5704ff128b7424048b5e048b04248b530483c408ff22|@4864,63| 4868:S59|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352970617373324c6f63616c646563283229 4869:C2,360|3b650c7303ff55248b7a0c8b75008d76f03b75087303ff5520897500c746fc03000000b910257d41890e897e08895e048b4d008d49f03b4d087303ff5520894d00c741fc03000000525053ff720cff7718ff7720ff7710ff772cff7714ff77285651bf7c267d4189398b5424208951088959048b7c242c8b55008d52f03b55087303ff5520895500c742fc03000000b884277d4189028b470c894208895a048b5c242c8b75008d76f03b75087303ff5520897500c746fc03000000b990287d41890e8b4b0c894e088b4424248946048b7c242c8b470c8b5d008d5bcc3b5d087303ff5520895d00c743fc0c0000008b4c2410894b2c8b4c2408894b288973248b7424188973208b481c894b1c8b74241c8973188b74240c8973148b7424148973108b342489730c8b7424048973088b700489730489138b54242c8b7afc8b74242c53ff77fcff74243cff76048b5af88b4424380bc0e85a0dfbffb80100000083c430c2040083c800|@4879,63|36,0,@4870 99,0,@4873 144,0,@4875 188,0,@4877 342,1,@2418 347,0,0 4870:C2,160|3b650c7303ff55248b7a0852ff70048b57080bc0ff128b7424048b5e048b138b0c248b45008d40e83b45087303ff5520894500c740fc050000008b790c8978108b590889580c8b59048958088b19895804c700fdffffff8b5d008d5bf43b5d087303ff5520895d00c743fc02000000c7430401000000890383fb01750489d0eb105389d08d54240c90e82e00000083c4048b5e048903b80100000083c408c390|@4872,63|83,0,-2 114,0,0 138,1,@4871 151,0,0 4871:C2,68|3b650c7303ff552483f80175048b42f4c352ff308b40040bc0e8e2ffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0424890289d083c408c3|@1462,5| 4872:S70|535452554354555245535f28292e7061737332537472756374732833297061737332537472756374283529706173733253696e676c65746f6e2833296e6577456e762d283129 4873:C2,140|3b650c7303ff55248b7a0852ff70048b570c0bc0ff128b7424048b5e048b138b4d008d49f43b4d087303ff5520894d00c741fc020000008b0424894104c701030000008b7d008d7ff43b7d087303ff5520897d00c747fc02000000c7470401000000890f83ff01750489d1eb125789d08d54240c90e82e00000089c183c404890bb80100000083c408c30bc0|@4872,63|63,0,1 94,0,0 118,1,@4874 130,0,0 4874:C2,68|3b650c7303ff552483f80175048b42f4c352ff308b40040bc0e8e2ffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0424890289d083c408c3|@1462,5| 4875:C2,144|3b650c7303ff55248b7a0852508b1790ff128b7424048b5e048b138b0c248b45008d40f03b45087303ff5520894500c740fc030000008b79048978088b19895804c700010000008b5d008d5bf43b5d087303ff5520895d00c743fc02000000c7430401000000890383fb01750489d0eb105389d08d54240c90e82e00000083c4048b5e048903b80100000083c408c390|@4872,63|67,0,0 98,0,0 122,1,@4876 135,0,0 4876:C2,68|3b650c7303ff552483f80175048b42f4c352ff308b40040bc0e8e2ffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0424890289d083c408c3|@1462,5| 4877:C2,140|3b650c7303ff55248b7a0852ff70048b57240bc0ff128b7424048b5e048b138b4d008d49f43b4d087303ff5520894d00c741fc020000008b0424894104c701ffffffff8b7d008d7ff43b7d087303ff5520897d00c747fc02000000c7470401000000890f83ff01750489d1eb125789d08d54240c90e82e00000089c183c404890bb80100000083c408c30bc0|@4872,63|63,0,-1 94,0,0 118,1,@4878 130,0,0 4878:C2,68|3b650c7303ff552483f80175048b42f4c352ff308b40040bc0e8e2ffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0424890289d083c408c3|@1462,5| 4879:S60|535452554354555245535f28292e7061737332537472756374732833297061737332537472756374283529706173733253696e676c65746f6e283329 4880:S54|535452554354555245535f28292e70617373325374727563747328332970617373325374727563742835297061737332446563283129 4881:S43|535452554354555245535f28292e7061737332537472756374732833297061737332537472756374283529 4882:S29|535452554354555245535f28292e706173733253747275637473283329 4883:C2,184|3b650c7303ff55248b7d008d7ff43b7d087303ff5520897d00c747fc02000000be4c2b7d4189378b74240489770489c28b45008d40f43b45087303ff5520894500c740fc02000000b9d0357d4189088970045357ff128b45008d40f43b45087303ff5520894500c740fc02000000bf48367d4189388b34248970048b54240490ff128b45008d40f43b45087303ff5520894500c740fc02000000bbdc367d4189188b14248950048b5424108b4c240883c41451ff2283c800|@4912,63|33,0,@4884 73,0,@4908 111,0,@4910 155,0,@4911 4884:C2,112|3b650c7303ff55248b7d008d7fec3b7d087303ff5520897d00c747fc04000000bed82b7d4189378b720489770c89470889570489d189d80bc0e8ae1ffaff8b5d008d5bf43b5d087303ff5520895d00c743fc02000000ba14357d418913897b048b3c24c704240100000057e99c3cfaff|@4907,63|33,0,@4885 58,1,@1919 87,0,@4905 102,0,0 108,1,@2002 4885:C2,268|3b650c7303ff552489d15089d8ba2c38774183c800e8460cfaff83f801746f51538b5c24088b410890e8b2e6f7ffbb5d0000000bc0e8a6e6f7ff89c38b0424ba2038774190e8a20cfaff83f801754453b815000000e8ca6df9ff8b4d008d49ec3b4d087303ff5520894d00c741fc04000000c7410c01000000c7410801000000bf40970408897904890189caeb09e91a0000008b5008538b4c240889d38b04248b51048b7c241083c41857ff2289d8baf83a774190e8720efaff83f801744051538b5c24088b410890e812e6f7ff89c38b0424baec3a774190e8da0efaff83c800e88a92faff8b5424048b4a0c894c241089df89c389f883c40ce929000000b80100000083c404c204000bc0|@4904,63|14,0,@1851 22,1,@1852 42,1,@323 47,0,46 54,1,@323 64,0,@1850 70,1,@1855 81,0,10 86,1,@1488 117,0,0 124,0,0 129,0,I48 176,0,@1871 182,1,@1872 202,1,@323 212,0,@1870 218,1,@1875 226,1,@2153 251,1,@4886 256,0,0 4886:C2,152|3b650c7303ff55248b7d008d7ff83b7d087303ff5520897d00c747fc01000040c707010000008b75008d76ec3b75087303ff5520897500c746fc04000000bab42d7d418916897e0c8b7c2404897e088946048b45008d40f43b45087303ff5520894500c740fc02000000baa8337d41891089700490e8d669faff89c189d889caff1289c7b80100000089fa90ff12b801000000c204000bc0|@4903,63|34,0,0 63,0,@4887 107,0,@4899 118,1,@2081 133,0,0 143,0,0 4887:C2,612|8d7c24b03b7d0c7303ff552889d689d890e8e697f8ff83f801747089f189d80bc0e80698f8ff89c78b5f048b07e84697f9ff89fe90e88297f9ff83f80174718b5e048b0690e85e9bf9ff83f80375668b590c8b03515683c800e82202000089c3b8bf000000e89ae4f7ff8b5424048b4a0c8b39f7c7010000007503ff553889fe83c60270f6893189c3eb05e9cc010000b801000000e8cee0f9ff8b142489d989c68b5a048b0283c800e8768cf9ffeb0ae9a1010000e99c0100005168c8cc744156506a01bb0100000089c80bc0e81e030000505089c389d890e82e98f8ff83c800e86e98f8ff83f80174298b55008d52f83b55087303ff5520895500c742fc01000040891a89e1c701ffffffff89e0895004eb0d89e2c7020100000089e18959048b45008d40f43b45087303ff5520894500c740fc020000008b3c2489388b74240489700489c38b45008d40f03b45087303ff5520894500c740fc030000008958088b542408895004c700010000000bc0e83298f8ff8b4c24108b79085057ff7708ff770cff7710ff7714ff7718ff771cff7720ff77248b5f048b0790e8ce6af8ff8b7424188b5d008d5bf43b5d087303ff5520895d00c743fc02000000bab4327d418953048b4e04890b89c78b45008d40f43b45087303ff5520894500c740fc02000000895804bb20337d4189185790e846ebf7ff8b55008d52f43b55087303ff5520895500c742fc02000000b938337d41890a8942048b4424046a01ff30ff7004ff7008ff700cff7010ff7014ff7018ff701cff7020ff70248b5c242c89d0e89a2cf8ff8b5c24088b44241883c420e91696f8ffb801000000c3b801000000c30bc0|@4898,63|18,1,@1102 34,1,@1103 46,1,@1596 54,1,@1598 70,1,@1606 90,1,@4888 97,0,95 102,1,@323 145,0,0 150,1,@1748 170,1,@1586 188,0,@202 197,0,0 206,1,@4890 218,1,@1109 226,1,@1111 265,0,-1 280,0,0 363,0,0 370,1,@1113 414,1,@971 447,0,@4892 489,0,@4896 498,1,@347 527,0,@4897 578,1,@752 594,1,@1104 599,0,0 605,0,0 4888:C2,280|3b650c7303ff5524a8017503ff553883f8357c5ea8017503ff553883f8017c07be03000000eb05be0100000083fe03750489c3eb0ea8017503ff553889c383eb3270f65089dabb3500000089d083c800ff15e09e0408a8017503ff553889c183e90270f689c883c800e892ffffff89c7eb06bf409704085057bb350000008b4424040bc0ff15009f040883f8017502eb1fa8017503ff553883f8017c07bf03000000eb05bf0100000083ff037402eb0489c7eb0ea8017503ff553889c783c73470f6f7c7010000007503ff553889fe81c6c200000070f3f7c6010000007503ff553883fe017d02eb15f7c6010000007503ff553881feff0100007f02eb0db818197541ff552cbb0100000089f38b042483c408e96ce1f7ff|@4889,63|33,0,1 40,0,0 71,0,26 82,0,I109 115,0,I48 122,0,26 134,0,I110 158,0,1 165,0,0 255,0,@338 263,0,0 276,1,@323 4889:S50|545950455f5452454528292e636865636b466f7246726565547970655661726961626c657328332967656e4e616d65283129 4890:C2,196|5053bf0100000083fb01750489feeb26f7c7010000007503ff553889f883c00270f68b5b0489c73b650c7303ff5524ebd6be010000008b5d008d5bf03b5d087303ff5520895d00c743fc03000000c74308010000008b4424188943048b7c2410893b8b55008d52f43b55087303ff5520895500c742fc02000000895a04c702010000008b5d008d5be43b5d087303ff5520895d00c743fc060000008b4c2414894b148953108b142489530c8b54240c8953088973048b742404893389d883c408c2100090|@4891,63|3,0,0 50,0,0 81,0,0 127,0,0 4891:S38|5354525543545f56414c5328292e6d616b6546726f7a656e54797065436f6e73747273283629 4892:O2|@4894,@4893 4893:O2|@4895,0 4894:S33|2920636f6e7461696e73206120667265652074797065207661726961626c652e0a 4895:S32|53657474696e6720697420746f206120756e69717565206d6f6e6f747970652e 4896:S13|5468652074797065206f662028 4897:C2,20|3b650c7303ff55248b780c8b420489faff220bc0|@1164,63| 4898:S53|545950455f5452454528292e636865636b466f7246726565547970655661726961626c6573283329636865636b5479706573283229 4899:C2,44|89c78b45008d40f03b45087303ff5520894500c740fc03000000bef0337d4189308b7204897008897804c390|@4902,53|27,0,@4900 4900:C2,16|3b650c7303ff55248b5a048b5208ff22|@4901,63| 4901:S56|545950455f5452454528292e636865636b466f7246726565547970655661726961626c6573283329636865636b5479706573283129283129 4902:S53|545950455f5452454528292e636865636b466f7246726565547970655661726961626c6573283329636865636b5479706573283129 4903:S40|545950455f5452454528292e636865636b466f7246726565547970655661726961626c6573283329 4904:S64|535452554354555245535f28292e636865636b466f72467265655479706556617273283429636865636b537472756374283229636865636b456e747279283329 4905:C2,28|3b650c7303ff55248b78088b3424893c248b58048b008b520456ff22|@4906,63| 4906:S64|535452554354555245535f28292e636865636b466f72467265655479706556617273283429636865636b537472756374283229636865636b456e747279283129 4907:S51|535452554354555245535f28292e636865636b466f72467265655479706556617273283429636865636b537472756374283229 4908:C2,44|3b650c7303ff552489d78b308b40040bc0e86289faff8b5f048b1424891c2489c389f052e907f7ffff83c800|@4909,63|18,1,@2153 37,1,@4886 4909:S40|535452554354555245535f28292e636865636b466f72467265655479706556617273283429283129 4910:C2,120|3b650c7303ff552452ff7004bb5d0000008b000bc0e856dcf7ff8b342483fe01754050b81500000090e88663f9ff8b5d008d5bec3b5d087303ff5520895d00c743fc04000000c7430c01000000c7430801000000ba40970408895304890389dfeb048b7e08508b5c24088b530489fb8b042483c40cff2290|@4909,63|13,0,46 22,1,@323 36,0,10 42,1,@1488 73,0,0 80,0,0 85,0,I48 4911:C2,56|3b650c7303ff552452ff7004bb90177d418b000bc0e8c2dbf7ff89c78b04240bc0e8ba0bfaff8b74240489c389f88b560483c408ff220bc0|@4909,63|13,0,@4838 22,1,@323 34,1,@1898 4912:S37|535452554354555245535f28292e636865636b466f72467265655479706556617273283429 4913:O3|103,@349,@4914 4914:S21|537461746963206572726f72732028706173733229 4915:C2,524|3b650c7303ff55248b7d008d7ff83b7d087303ff5520897d00c747fc01000040c707030000008b75008d76f43b75087303ff5520897500c746fc02000000bab8397d418916897e048b55008d52f83b55087303ff5520895500c742fc01000040c702010000008b4d008d49e83b4d087303ff5520894d00c741fc05000040505357565251b8203a7d418901c7410401000000c7410801000000c7410c01000000c74110010000008b45008d40e83b45087303ff5520894500c740fc05000000bb94c57e4189188970108b74241089700c89480889500489410489510889790c897110c641ff008b5d008d5bf43b5d087303ff5520895d00c743fc02000000ba7cde7e418913894b04505050538d4c2404518b5c2428b8ecde7e4183c800e8020700008b45008d40f43b45087303ff5520894500c740fc020000008b7c2404897804c700150000005083ff017507be03000000eb208b1f8b1383fafb75128b7f043b650c7303ff5524ebdebe01000000be0100000083fe01742c8b042490e8f6a6fbff8b4d008d49f43b4d087303ff5520894d00c741fc02000000894104c701fbffffffeb038b0c248b45008d40f43b45087303ff5520894500c740fc02000000c7400401000000890883f80175068b7c2404eb13508b4424088d54242ce8e2a5010089c783c4048b45008d40f43b45087303ff5520894500c740fc02000000897804c7001300000083c428c3|@5714,63|34,0,1 63,0,@4916 98,0,0 133,0,@4918 142,0,0 149,0,0 156,0,0 163,0,0 192,0,@5686 255,0,@5708 278,0,@5709 286,1,@4925 323,0,10 334,0,1 363,0,0 368,0,0 382,1,@2837 415,0,-3 451,0,0 478,1,@5713 516,0,9 4916:C2,28|8b42048b38f7c7010000007503ff553889fe83c60270f6893089f8c3|@4917,53| 4917:S40|535452554354555245535f28292e67656e636f6465537472756374732832296d6b41646472283129 4918:C2,588|3b650c7303ff55248b3b83ff0f75708b75008d76e83b75087303ff5520897500c746fc05000000b9883c7d41890e8b4a0c894e108b7a08897e0c8946088b42048946048b45008d40f43b45087303ff5520894500c740fc02000000bf003f7d4189388970048b7424088b7c240489442408897c24048b5b0489f0e91505000083ff0575718b75008d76e43b75087303ff5520897500c746fc06000000b990417d41890e8946148b42108946108b4a04894e0c8b7a0c897e088b7a08897e048b7d008d7ff43b7d087303ff5520897d00c747fc02000000b938477d41890f8977048b7424088b4c2404897c2408894c24048b5b04eb05e90700000089f0e99304000083ff0775708b75008d76f03b75087303ff5520897500c746fc03000000b9e8477d41890e8946088956045050505250ff7304568d742410568b5b088b44242890e84e0400008b5d008d5bf03b5d087303ff5520895d00c743fc03000000ba8c487d4189138b4c2404894b088b44240889430450eb05e9540000005050538d7c2404578b5c24148b4424280bc0e8020400008b1c2483fb0175068b742418eb108b4424188d54242490e82a0d000089c68b54242889328b4c2404894a048b442408894208b80100000083c424c2080083ff0d75588b72088b0e52ff730cff74241051ff720c50ff73088b43048b5a100bc0e8420d00008b3c248b37ff30ff700489f08d54241083c800e80a8801008b5c24148b54240489138943048b0c24894b08b80100000083c410c208008b742404c70601000000c74604010000008b542408895608b801000000c20800|@5685,63|40,0,@4919 92,0,@4923 123,1,@4925 157,0,@4929 215,0,@4948 253,1,@4925 287,0,@4950 322,1,@4925 351,0,@4952 398,1,@4925 426,1,@4953 453,0,0 498,1,@4954 522,1,@5683 546,0,0 562,0,0 569,0,0 581,0,0 4919:C2,408|3b650c7303ff55248b7a108b37f7c6010000007503ff553889f183c10270f6890f8b4810ff7004ff70088b0152e8b698faff535690e87a0100008b388b342489378b5c24088b530c8b328b780489378b742408518b5c24148b46080bc0e8ced5f7ffbb5d0000000bc0e8c2d5f7ff8b1c248b1383fa01754250b81500000083c800e8ee5cf9ff8b7d008d7fec3b7d087303ff5520897d00c747fc04000000c7470c01000000c7470801000000be40970408897704890789f9eb048b4a08508b442410ff3424ff74241089cb8b78048b44241c89faff128b75008d76ec3b75087303ff5520897500c746fc04000000c7460c010000008946088b5c2408895e04c706f9ffffff8b55008d52f43b55087303ff5520895500c742fc02000000c742040100000089328b4d008d49e83b4d087303ff5520894d00c741fc05000000c7411001000000c7410c01000000c7410803000000895904c701f7ffffff8b45008d40f43b45087303ff5520894500c740fc02000000c740040100000089088b7c242089178947048b74240c897708b80100000083c41cc20400|@4922,63|46,1,@2204 54,1,@4920 94,1,@323 99,0,46 106,1,@323 122,0,10 130,1,@1488 161,0,0 168,0,0 173,0,I48 241,0,0 257,0,-4 288,0,0 321,0,0 328,0,0 335,0,1 344,0,-5 375,0,0 398,0,0 4920:C2,60|8b3883ff0375268b75008d76f43b75087303ff5520897500c746fc020000008b5808895e048b5004891689f0c3b8503d754190ff552cb80100000090|@4921,61|46,0,@597 55,0,0 4921:S24|5354525543545f56414c5328292e76614c6f63616c283129 4922:S65|535452554354555245535f28292e67656e636f646553747275637473283229636f646553747264656373283429636f646553747275637475726542696e64283329 4923:C2,76|3b650c7303ff552450505089e7578b58048b008b52040bc0ff128b45008d40f03b45087303ff5520894500c740fc030000008b342489308b5c24048958048b54240889500883c40cc383c800|@4924,63| 4924:S65|535452554354555245535f28292e67656e636f646553747275637473283229636f646553747264656373283429636f646553747275637475726542696e64283129 4925:C2,204|3b650c7303ff552483fb01751c8b5c2404c70301000000c7430401000000894308b801000000c2080089c78b45008d40f43b45087303ff5520894500c740fc020000008978048b338930ff73048b54240c83c800ff1250505050ff74241c8d5c2408538b5c24188b400883c800e88effffff8b14248b44240483f80175048b0aeb0e8b028d54241490e85a00000089c18b3c248b5c240883fb0175058b7704eb0f8b47048d54241490e89a00000089c68b542418890a8972048b4c240c894a08b80100000083c414c2080090|@4928,63|19,0,0 26,0,0 34,0,0 138,1,@4926 170,1,@4927 193,0,0 4926:C2,68|3b650c7303ff552483f80175048b42f0c352ff308b40040bc0e8e2ffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0424890289d083c408c3|@1462,5| 4927:C2,68|3b650c7303ff552483f80175048b42f4c352ff308b40040bc0e8e2ffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0424890289d083c408c3|@1462,5| 4928:S41|535452554354555245535f28292e67656e636f6465537472756374732832296d617050616972283429 4929:C2,600|3b650c7303ff55248b388b3783fe03756f8b4a048b31f7c6010000007503ff553889f183c10270f68b7204890e8b4a088b31c701030000008b4f08ff7004ff700cff70148b01520bc0e89293faff535690e856fcffff8b38c707ffffffff8b7424088b5e048b138b480489118b54240c8b3a8b542408578b5c24148b4214eb05e9c5010000e89ed0f7ff8b4c240c8b791050bb04447d418b4724ba703d75410bc0e852fbf7ff83f8017407bef8447d41eb05beac457d418b4424040bc0e86a00faff5650bb90177d418b442408e856d0f7ff8b74241850ff7424188b5c24088b44242c8b560c0bc0ff128b5c24188b53048b0a89c78b45008d40ec3b45087303ff5520894500c740fc040000008b74240889700cc740080300000089480489388b542404ff128b5c24188b53048b0af6c1017503ff553889cf83ef0270f6893a8b742410f7c6010000007503ff553889f183c10270f68b7b08890f89c18b44240ce86203000083c800e83efbffff8b388b74241089378b5c24188b53048b328b780489378b75008d76ec3b75087303ff5520897500c746fc04000000c7460c01000000894e088b4c2410894e04c706f9ffffff8b4d008d49f43b4d087303ff5520894d00c741fc02000000c741040100000089318b75008d76e83b75087303ff5520897500c746fc05000000c7461001000000c7460c01000000c74608030000008b442410894604c706f7ffffff8b7d008d7ff43b7d087303ff5520897d00c747fc02000000c747040100000089378b74242c890e897e048b4c2414894e08b80100000083c428c20400b8b4467d41ff552cb80100000090|@4947,63|52,0,1 74,1,@2204 82,1,@4920 90,0,-1 134,1,@323 147,0,@4930 155,0,@599 162,1,@601 172,0,@4937 179,0,@4940 190,1,@1898 197,0,@4838 206,1,@323 279,0,1 354,1,@4943 362,1,@4920 415,0,0 431,0,-4 462,0,0 495,0,0 502,0,0 509,0,1 522,0,-5 553,0,0 576,0,0 587,0,@4945 595,0,0 4930:O3|@4932,@4934,@4931 4931:O2|@4936,@7345 4932:O2|@4933,@7345 4933:C2,28|8b388b72043bfe750cb803000000c3b801000000c3b801000000c390|@593,53|10,0,1 16,0,0 22,0,0 4934:O2|@4935,@7345 4935:C2,44|89c78b45008d40f03b45087303ff5520894500c740fc03000000897808c740048b0000008b7a048938c30bc0|@593,37|32,0,69 4936:C2,36|8b388b72043bfe750a8b4008c3b801000000c3b8503d754183c800ff552cb80100000090|@593,53|14,0,0 20,0,@597 31,0,0 4937:O1|@4938 4938:C2,108|8b7d008d7fdc3b7d087303ff5520897d00c747fc08000000c7471c01000000c7471801000000c74714030000008b7008897710c7470c010000008b5804895f088b500c8957048b08890f8b45008d40f43b45087303ff5520894500c740fc02000000897804c700f3ffffffc3|@4939,63|27,0,0 34,0,0 41,0,1 54,0,0 103,0,-7 4939:S25|434f44455452454528292e6d6b4d6163726f50726f63283129 4940:O1|@4941 4941:C2,108|8b7d008d7fdc3b7d087303ff5520897d00c747fc08000000c7471c01000000c7471801000000c74714ffffffff8b7008897710c7470c010000008b5804895f088b500c8957048b08890f8b45008d40f43b45087303ff5520894500c740fc02000000897804c700f3ffffffc3|@4942,63|27,0,0 34,0,0 41,0,-1 54,0,0 103,0,-7 4942:S20|434f44455452454528292e6d6b50726f63283129 4943:C2,24|83f801750eb8503d754190ff552cb8010000008b4008c390|@4944,1|6,0,@597 15,0,0 4944:S30|5354525543545f56414c5328292e66756e63746f72416363657373283129 4945:O3|@7320,@224,@4946 4946:S34|636f646546756e63746f7242696e643a206e6f7420612046756e63746f7242696e64 4947:S63|535452554354555245535f28292e67656e636f646553747275637473283229636f646553747264656373283429636f646546756e63746f7242696e64283329 4948:C2,76|3b650c7303ff552450505089e7578b58048b008b52040bc0ff128b45008d40f03b45087303ff5520894500c740fc030000008b342489308b5c24048958048b54240889500883c40cc383c800|@4949,63| 4949:S63|535452554354555245535f28292e67656e636f646553747275637473283229636f646553747264656373283429636f646546756e63746f7242696e64283129 4950:C2,80|3b650c7303ff5524505050ff70048d7c2404578b188b42088b520490ff128b45008d40f03b45087303ff5520894500c740fc030000008b342489308b5c24048958048b54240889500883c40cc383c800|@4951,63| 4951:S47|535452554354555245535f28292e67656e636f6465537472756374732832296d617053747264656373283329283129 4952:C2,80|3b650c7303ff5524505050ff70048d7c2404578b188b42088b520490ff128b45008d40f03b45087303ff5520894500c740fc030000008b342489308b5c24048958048b54240889500883c40cc383c800|@4951,63| 4953:C2,68|3b650c7303ff552483f80175048b42dcc352ff308b40040bc0e8e2ffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0424890289d083c408c3|@1462,5| 4954:C2,1312|8d7c24843b7d0c7303ff55288b7d008d7ff43b7d087303ff5520897d00c747fc02000000be944e7d4189378b74240c8977048b55008d52f83b55087303ff5520895500c742fc010000408b4c2410890a8b75008d76f83b75087303ff5520897500c746fc01000040c706010000005053575256ff7324bbf44e7d418b0424ba703d75410bc0e8a6f3f7ff8b5c2410508b5324bbe84f7d4189d0ba703d754183c800e88af3f7ff8b4c2414508b792483ff017507be01000000eb468b1f8b4f0489d8badc507d4183c800e8c206000083f801741c8b75008d76f83b75087303ff5520897500c746fc01000000891eeb1189cf3b650c7303ff5524ebb3be01000000f7c60100000075108b06ba20517d410bc0e8be060000eb05b86c517d418b7d008d7fe83b7d087303ff5520897d00c747fc05000000beb8517d4189378947108b5c2404895f0c8b54240c8957088b4c2410894f048b75008d76ec3b75087303ff5520897500c746fc04000000b9b4637d41890e8b0c24894e0c8b5424148956088b5424108956048b55008d52e43b55087303ff5520895500c742fc06000000bbb8697d41891a894a148b5c2410895a108b5c2418895a0c8b5c2424895a088972048b4d008d49e43b4d087303ff5520894d00c741fc06000000bb74017e4189198b1c248959148941108b44240489410c8b4424248941088b5c24108959048b5d008d5bf43b5d087303ff5520895d00c743fc02000000b8d0097e4189038b4424188943048b45008d40f03b45087303ff5520894500c740fc03000000575652515350bfa80c7e4189388958088b7c24308978048b7d008d7ff43b7d087303ff5520897d00c747fc02000000be80347e4189378947048b75008d76ec3b75087303ff5520897500c746fc04000000ba04367e4189168b54244489560c8b4c2410894e088b4c2428894e04505089e1c7010100000089e1bbd0397e418959048b4d008d49f43b4d087303ff5520894d00c741fc020000008b1c2489198b5c2404895904505089e3c7030100000089e3b8dc397e418943048b5d008d5bf43b5d087303ff5520895d00c743fc020000008b042489038b442404894304505089e0c7000100000089e0ba003a7e418950048b45008d40f43b45087303ff5520894500c740fc020000008b142489108b5424048950048b55008d52ec3b55087303ff5520895500c742fc04000000575651535052bf343a7e41893a89720c894a088b7424588972048b4d008d49f03b4d087303ff5520894d00c741fc03000000bff45c7e4189398b7c24408979088971048b7d008d7fdc3b7d087303ff5520897d00c747fc08000000be98647e4189378b74241489771c8b74245c8977188b7424588977148b742474897710895f0c895708894f048b5d008d5be43b5d087303ff5520895d00c743fc06000000b9f8727e41890b8b4c2430894b148b4c245c894b1089430c8953088b4424588943048b55008d52c03b55087303ff5520895500c742fc0f000000b91c767e41890a8b4c2414894a388b4c2434894a34897a308b7c2454897a2c8b4c2444894a288b7c2460897a248b4c246c894a20895a1c8b7c2448897a188b5c2438895a148972108b7c245c897a0c8942088b5c243c895a048b45008d40f43b45087303ff5520894500c740fc020000008948048b7c246489388b5d008d5bf43b5d087303ff5520895d00c743fc02000000c743040100000089035050ff7424788d4424045089df8b9c248c00000089f890ff128b45008d40f43b45087303ff5520894500c740fc020000008b342489308b5c240489580483c470c21400|@5682,63|37,0,@4955 106,0,0 119,0,@4957 127,0,@599 134,1,@601 147,0,@4964 154,0,@599 162,1,@601 180,0,0 194,0,@4971 202,1,@4972 252,0,0 267,0,@4973 274,1,@4974 281,0,@4975 310,0,@4978 365,0,@5017 416,0,@5030 474,0,@5363 535,0,@5374 579,0,@5381 620,0,@5443 654,0,@5450 687,0,0 694,0,@5460 743,0,0 750,0,@5461 799,0,0 806,0,@5464 880,0,@5468 924,0,@5513 965,0,@5526 1033,0,@5552 1091,0,@5561 1239,0,0 4955:C2,28|8b42048b38f7c7010000007503ff553889fe83c60270f6893089f8c3|@4956,53| 4956:S32|50415253455f5452454528292e67656e636f64652837296d6b41646472283129 4957:O3|@4959,@4961,@4958 4958:O2|@4963,@7344 4959:O2|@4960,@7344 4960:C2,28|8b388b72043bfe750cb803000000c3b801000000c3b801000000c390|@593,53|10,0,1 16,0,0 22,0,0 4961:O2|@4962,@7344 4962:C2,44|89c78b45008d40f03b45087303ff5520894500c740fc03000000897808c740048b0000008b7a048938c30bc0|@593,37|32,0,69 4963:C2,36|8b388b72043bfe750a8b4008c3b801000000c3b8503d754183c800ff552cb80100000090|@593,53|14,0,0 20,0,@597 31,0,0 4964:O3|@4966,@4968,@4965 4965:O2|@4970,@7359 4966:O2|@4967,@7359 4967:C2,28|8b388b72043bfe750cb803000000c3b801000000c3b801000000c390|@593,53|10,0,1 16,0,0 22,0,0 4968:O2|@4969,@7359 4969:C2,44|89c78b45008d40f03b45087303ff5520894500c740fc03000000897808c740048b0000008b7a048938c30bc0|@593,37|32,0,69 4970:C2,36|8b388b72043bfe750a8b4008c3b801000000c3b8503d754183c800ff552cb80100000090|@593,53|14,0,0 20,0,@597 31,0,0 4971:O2|@4972,@7392 4972:C2,28|8b388b72043bfe750cb803000000c3b801000000c3b801000000c390|@593,53|10,0,1 16,0,0 22,0,0 4973:O2|@4974,@7392 4974:C2,36|8b388b72043bfe750a8b4008c3b801000000c3b8503d754183c800ff552cb80100000090|@593,53|14,0,0 20,0,@597 31,0,0 4975:O1|@4976 4976:C2,8|b801000000c30bc0|@4977,1|1,0,0 4977:S24|44454255474745525f28292e6e756c6c4465627567283129 4978:C2,204|3b650c7303ff55248b7d008d7fe43b7d087303ff5520897d00c747fc06000000bea0527d4189378b338977148b4a10894f108b720c89770c8947088b4424048947048b4a0889018b75008d76f43b75087303ff5520897500c746fc02000000897e04c706fbffffff8b7a048b07568b530483c800ff128b75008d76f43b75087303ff5520897500c746fc02000000c746040100000089068b45008d40ec3b45087303ff5520894500c740fc04000000c7400c010000008b1c24895808897004c7000900000083c404c2040090|@5016,63|33,0,@4979 100,0,-3 145,0,0 178,0,0 193,0,4 4979:C2,48|3b650c7303ff55248b7a108b3424893c2468f8257541ff720cff7208ff72048b5a14baec527d4156e93f00000083c800|@5015,63|18,0,@408 35,0,@4980 41,1,@4982 4980:O2|@4982,@4981 4981:O4|I48,-1,@561,@1059 4982:C2,972|8d7c24983b7d0c7303ff55288b7c2408f7c7010000007407be03000000eb068b378d74360189d1505356bb0100000089f8e8b203000051bae0577d41ff128b4004e8fac5f7ff50bb4c00774190e81a06000083f80174398b3c24f7c7010000007407be03000000eb068b378d743601f7c6010000007503ff553889f383eb0470f653bb0100000089f8e80e6af8ffeb038b042450bb5b000000e8ce05000083f80174398b3c24f7c7010000007407be03000000eb068b378d743601f7c6010000007503ff553889f383eb0270f653bb0100000089f8e8c269f8ffeb038b042450508b7c242c8b3783fe0175458b5d008d5bf43b5d087303ff5520895d00c743fc020000008b5704895304c703fbffffff89c1538b5f08b8409704080bc0e8e206000089e7c7070300000089e6894604eb7383fe0375438b5d008d5bf43b5d087303ff5520895d00c743fc020000008b5704895304c703fbffffff89c1538b5f08b840970408e89a06000089e7c7070500000089e6894604eb6a83feff754f8b5d008d5bf43b5d087303ff5520895d00c743fc020000008b5704895304c703fbffffffeb05e93a00000089c153bb10c47741b84097040883c800e84606000089e7c7070700000089e6894604eb168b5c241089e2c7020900000089e18b530489510489c15050505050505050505050505050505050508b45008d40f03b45087303ff5520894500c740fc03000000bfa45b7d4189388b74245c8970088b5c24608958048b55008d52f03b55087303ff5520895500c742fc03000000bfe45e7d41893a897208895a0489e6bbec617d41891e89e7beec617d4189770489e389530889e2bfec617d41897a0c89e6bbec617d41895e1089e2bf44627d41897a1489e6bb44627d41895e1889e2bf44627d41897a1c89e6bbec617d41895e2089e2bf44627d41897a2489e6bbdc627d41895e2889e2bfdc627d41897a2c89e689463089e3ba44627d4189533489e0bfdc627d4189783889e6bb44627d41895e3c89e2b8dc627d4189424089e7bedc627d418977448b5d008d5bb43b5d087303ff5520895d00c743fc120000008b142489138b4424048943048b7c2408897b088b74240c89730c8b7424108973108b7424148973148b7424188973188b74241c89731c8b7424208973208b7424248973248b7424288973288b74242c89732c8b7424308973308b7424348973348b7424388973388b74243c89733c8b7424408973408b5424448953448b45008d40e43b45087303ff5520894500c740fc060000008958148948108b4c247089480c8b7c24688978088b74244c8970048b5c244889188b5424788b74246483c47c56ff2290|@5014,63|25,0,1 43,0,0 50,1,@4983 56,0,@4985 66,1,@341 72,0,@1706 78,1,@4989 99,0,1 131,0,0 138,1,@1081 149,0,45 154,1,@4989 175,0,1 207,0,0 214,1,@1081 268,0,-3 279,0,I48 286,1,@4993 294,0,1 342,0,-3 353,0,I48 358,1,@4993 366,0,2 414,0,-3 429,0,@2165 434,0,I48 442,1,@4993 450,0,3 469,0,4 526,0,@4995 571,0,@4999 586,0,@5003 595,0,@5003 610,0,@5003 620,0,@5003 630,0,@5006 640,0,@5006 650,0,@5006 660,0,@5003 670,0,@5006 680,0,@5011 690,0,@5011 705,0,@5006 715,0,@5011 725,0,@5006 735,0,@5011 745,0,@5011 4983:C2,168|f7c001000000742f8b7c240483ff01742689c38b45008d40f43b45087303ff5520894500c740fc02000000c74004010000008918c2040050538b7c240cbe0100000083ff01750889f083c408c204008d5ffe8b04248d50ff03d78d42fe8d78088b54240489f8d1e80fb604028d4400018b7d008d7ff43b7d087303ff5520897d00c747fc02000000897704890789fe89df3b650c7303ff5524eba7b80100000083c408c204000bc0|@4984,61|46,0,0 62,0,0 156,0,0 4984:S31|4c696272617279537570706f72742e737472696e674578706c6f6465283329 4985:O1|@4986 4986:C2,88|3b650c7303ff552483f8017506b818147541c3ff308b400490e8e2ffffff505089e75789c38b44240ce8460000008b45008d40f43b45087303ff5520894500c740fc020000008b342489308b5c240489580483c40cc30bc0|@2084,61|14,0,@326 42,1,@4987 4987:C2,208|83f85375398b45008d40f43b45087303ff5520894500c740fc020000008b7b04897804c700530000008b742404c70603000000894604b801000000c2040083f85175398b7d008d7ff43b7d087303ff5520897d00c747fc020000008b7304897704c707510000008b442404c70001000000897804b801000000c204008b3b83ff0375188b742404c706030000008b4304894604b801000000c204008b75008d76f43b75087303ff5520897500c746fc020000008b530489560489068b442404c70001000000897004b801000000c20400|@4988,61|37,0,41 47,0,1 55,0,0 99,0,40 109,0,0 117,0,0 137,0,1 148,0,0 193,0,0 201,0,0 4988:S40|44454255474745525f28292e646562756746756e6374696f6e283729636865636b43686172283329 4989:C2,192|3b650c7303ff5524f7c3010000007407bf03000000eb068b3b8d7c3f01f7c0010000007407be03000000eb068b308d7436015623f7f7c6010000005e7503ff55383bfe7f7283ff03754283fe03750c89da89c389d0ff2540940408f7c6010000007503ff553889f283ea0270f68d4a0889cfd1ef0fb63c388d7c3f013bdf7506b803000000c3b801000000c389f223d7f6c2017503ff553889f22bd78d520170f48b0c24c7042401000000505389d389f851e925000000b801000000c383c800|@4992,63|17,0,1 38,0,1 87,0,I24 129,0,1 135,0,0 167,0,0 179,1,@4990 184,0,0 4990:C2,112|3b650c7303ff552483f8017508b803000000c20c008b7c240c8d77088b54240489f1d1e90fb60c0a8d4c09018d73088b7c240889f2d1ea0fb614178d5412013bca75258b4c240c8d71028d53028d58fe8b4424048974240c897c24088944240489de89d389f0eb98b801000000c20c00|@4991,63|14,0,1 105,0,0 4991:S12|627974654d61746368283529 4992:S18|537472696e672e6973537566666978283229 4993:C2,84|8b7d008d7ff43b7d087303ff5520897d00c747fc020000008b742404897704c707ffffffff8b55008d52ec3b55087303ff5520895500c742fc04000000895a0c897a08c74204ffffffff890289d0c2040083c800|@4994,61|33,0,-1 70,0,-1 4994:S28|5354525543545f56414c5328292e6d616b65476c6f62616c56283329 4995:C2,28|3b650c7303ff55248b7a048b3424893c248b5a0856e91e0000000bc0|@4998,63|22,1,@4996 4996:C2,648|3b650c7303ff5524f7c30100000075718b3b8b3783fefd756d8b542404f7c201000000756650ff7704ff7708ff7304ff32ff720489c38b4424100bc0ff154094040883f80174668b4d008d49f43b4d087303ff5520894d00c741fc020000008b442404894104c701fbffffff518b5c24108b442414e8bafeffff89c78b4500eb0fe9f9010000e941000000e9340000008d40f83b45087303ff5520894500c740fc01000000893883c418c204008b0c24894c241c8b5c24088b44241483c418e93cffffffb801000000c2040083fe0175708b542404f7c201000000756950ff7704ff7708ff7304ff32ff720489c38b4424100bc0ff154094040883f80174728b4d008d49f43b4d087303ff5520894d00c741fc020000008b442404894104c701fbffffff89c883c800e8466fffff8b7d008d7fec3b7d087303ff5520897d00eb0ae969000000e95c000000c747fc040000008b74240c89770c894708c74704010000008b5c2410891f8b45008d40f8eb05e91a0000003b45087303ff5520894500c740fc01000000893883c418c204008b0c24894c241c8b5c24088b44241483c418e959feffffb801000000c2040083fe0375708b542404f7c201000000756950ff7704ff7708ff770cff7304ff32ff720489c38b442414ff154094040883f801746d8b45008d40f43b45087303ff5520894500c740fc020000008b4c2404894804c700fbffffff90e8666effffff74240c508b5c24188b44241c0bc0e8926effffeb0ae946000000e93900000089c78b45008d40f83b45087303ff5520894500c740fc01000000893883c41cc204008b0c24894c24208b5c24088b44241883c41ce999fdffffb801000000c204008b542404895424048b5b04e981fdffffb801000000c2040090|@4997,63|62,0,I24 104,0,-3 118,1,@4993 197,0,0 246,0,I24 288,0,-3 298,1,@4661 351,0,0 424,0,0 474,0,I24 516,0,-3 522,1,@4661 542,1,@4662 616,0,0 640,0,0 4997:S39|44454255474745525f28292e6d616b6553706163652833296c6f6f6b757056616c756573283329 4998:S42|44454255474745525f28292e6d616b6553706163652833296c6f6f6b757056616c756573283129283129 4999:C2,20|3b650c7303ff55248b5a048b4208e91d00000090|@5002,63|15,1,@5000 5000:C2,620|3b650c7303ff5524f7c00100000075728b388b3783fefd756ef7c301000000756b8b55008d52f43b55087303ff5520895500c742fc020000008b0b894a04c702fbffffffff7704ff7004ff7304528b5f088b44240ce8a2fbffff8b7d008d7ff43b7d087303ff5520897d00c747fc020000008947048b7424088937578b5c2404eb0fe9df010000e93a000000e92f0000008b442408e866ffffff8b5d008d5bf43b5d087303ff5520895d00c743fc020000008943048b1424891389d883c410c3b801000000c383fe017572f7c301000000756f8b55008d52f43b55087303ff5520895500c742fc020000008b0b894a04c702fbffffffff7704ff7708ff700489d0e8366cffff8b7d008d7fec3b7d087303ff5520897d00c747fc040000008b74240489770c894708c74704010000008b54240889178b45008d40f4eb0ae958000000e94d0000003b45087303ff5520894500c740fc020000008978048910508b5b048b44240483c800e892feffff8b7d008d7ff43b7d087303ff5520897d00c747fc020000008947048b3424893789f883c410c3b801000000c383fe037571f7c301000000756e8b50048b45008d40f43b45087303ff5520894500c740fc020000008b0b894804c700fbffffffff7704ff7708ff770c520bc0e85e6bffffff7304ff742408508b5c24148b44241883c800e8866bffff8b7d008d7ff43b7d087303ff5520897d00c747fc02000000eb0ae949000000e93e0000008947048b7424108937578b5c24048b44240890e8cefdffff8b5d008d5bf43b5d087303ff5520895d00c743fc020000008943048b1424891389d883c418c3b801000000c38b4004e99afdffffb801000000c3|@5001,63|64,0,-3 86,1,@4993 193,0,0 242,0,-3 258,1,@4661 299,0,0 405,0,0 457,0,-3 474,1,@4661 498,1,@4662 601,0,0 615,0,0 5001:S36|44454255474745525f28292e6d616b655370616365283329616c6c56616c756573283229 5002:S27|44454255474745525f28292e6d616b655370616365283329283129 5003:O1|@5004 5004:C2,8|b801000000c30bc0|@5005,1|1,0,0 5005:S35|44454255474745525f28292e6d616b655370616365283329616c6c456d707479283129 5006:O1|@5007 5007:C2,16|b878627d410bc0ff552cb80100000090|@5010,1|1,0,@5008 11,0,0 5008:O3|103,@349,@5009 5009:S29|43616e6e6f74207570646174652074686973206e616d65207370616365 5010:S34|44454255474745525f28292e6d616b6553706163652833296e6f456e746572283129 5011:O1|@5012 5012:C2,8|b801000000c30bc0|@5013,1|1,0,0 5013:S33|44454255474745525f28292e6d616b6553706163652833296e6f4c6f6f6b283129 5014:S28|44454255474745525f28292e646562756746756e6374696f6e283729 5015:S34|44454255474745525f28292e646562756746756e6374696f6e283129283129283129 5016:S38|50415253455f5452454528292e67656e636f6465283729616464446562756743616c6c283329 5017:C2,528|3b650c7303ff55248b7a0c83ff01751d8b442404c700010000008b338970048b4b04894808b801000000c208008b720489c18b065251ff338b530490ff128b7d008d7ff43b7d087303ff5520897d00c747fc02000000c747040100000089078b75008d76f43b75087303ff5520897500c746fc02000000897e048b5c2414891e8b55008d52f43b55087303ff5520895500c742fc02000000897204c702150000005283fe017507b903000000eb208b068b3883fffb75128b76043b650c7303ff5524ebdeb901000000b90100000083f901742e8b042483c800e8767bfbff8b75008d76f43b75087303ff5520897500c746fc02000000894604c706fbffffffeb038b34248b5c240c8b53048b0a5050518d442404508b5b0889f083c800e80a0100008b44241083c800e85ae9faff8b700483fe01752b8b7d008d7ff03b7d087303ff5520897d00c747fc030000008b580c895f088b10895704c70701000000eb6f89c389f0e8ae06fbff83f801743789f0e8d606fbff89c28b45008d40f03b45087303ff5520894500c740fc030000008950088b4b0c8948048b3b8938e87603000089c7eb2a8b45008d40f43b45087303ff5520894500c740fc020000008b530c8950048b0b890890e8aa03000089c78b45008d40f43b45087303ff5520894500c740fc020000008b74240c89700489388b5c241c8b142489138943048b4c2404894b08b80100000083c418c2080090|@5029,63|22,0,0 38,0,0 89,0,0 157,0,10 168,0,1 197,0,0 202,0,0 218,1,@2837 251,0,-3 286,1,@5018 298,1,@2441 347,0,0 358,1,@2496 370,1,@2497 414,1,@5025 458,1,@5027 517,0,0 5018:C2,304|3b650c7303ff55248b3883fffb75378b5d008d5bf43b5d087303ff5520895d00c743fc02000000ba2c677d4189138943048b542404c70201000000895a04b801000000c2080083fff7754a8b5d008d5be83b5d087303ff5520895d00c743fc05000000ba74677d4189138b50048953108b480c894b0c8b7424088973088943048b7c2404c70701000000895f04b801000000c2080050b80100000089da83c800ff128b75008d76f03b75087303ff5520897500c746fc03000000bb38687d41891e8946088b54240c8956048b4d008d49ec3b4d087303ff5520894d00c741fc04000000c7410c010000008b3c24897908894104c701f9ffffff8b5d008d5bf43b5d087303ff5520895d00c743fc02000000c7430401000000890b8b4c24088919897104b80100000083c404c208000bc0|@5024,63|40,0,@5019 55,0,0 63,0,0 100,0,@5021 134,0,0 142,0,0 151,0,0 187,0,@5023 230,0,0 245,0,-4 276,0,0 292,0,0 5019:C2,4|8b4204c3|@5020,5| 5020:S29|434f44455452454528292e6d756c7469706c6555736573283429283129 5021:C2,124|8b7a08500bc7a801587503ff55383bc775048b4204c389c623f7f7c6010000007503ff553889c62bf78d760170f48b420c89c323def6c3017503ff55388d58ff03de70f68b45008d40e83b45087303ff5520894500c740fc05000000c740100100000089580cc74008030000008b7210897004c700f7ffffffc30bc0|@5022,61|95,0,0 105,0,1 117,0,-5 5022:S35|434f44455452454528292e6d756c7469706c65557365732834296c6f6164466e283129 5023:C2,84|8b7a0489c623f7f7c6010000007503ff553889c62bf78d760170f48b45008d40e83b45087303ff5520894500c740fc05000000c740100100000089700cc74008030000008b7208897004c700f7ffffffc383c800|@5022,53|54,0,0 64,0,1 76,0,-5 5024:S26|434f44455452454528292e6d756c7469706c6555736573283429 5025:C2,48|8b388b70048b58088b45008d40ec3b45087303ff5520894500c740fc0400000089580c897008897804c70003000000c3|@5026,57|43,0,1 5026:S10|456e7656436f6e737472 5027:C2,44|8b388b70048b45008d40f03b45087303ff5520894500c740fc03000000897008897804c700fdffffffc30bc0|@5028,49|37,0,-2 5028:S8|456e7656616c7565 5029:S42|50415253455f5452454528292e67656e636f64652837296372656174654465627567456e747279283429 5030:C2,196|3b650c7303ff55248b7a1483ff01746e528b75008d76f43b75087303ff5520897500c746fc02000000895e04c7060100000083f801750489f3eb5a5050ff70048d5424045289f38b008d542414e88e0000008b4d008d49f43b4d087303ff5520894d00c741fc020000008b44240489018b7c240889790489ce8b0424eb05e92b00000083c40c3b650c7303ff5524eba2bb010000008b5424088b0b890a8b4304894204b80100000083c404c204008b742404c70601000000895e04b801000000c2040090|@5362,63|46,0,0 78,1,@5031 145,0,0 164,0,0 180,0,0 188,0,0 5031:C2,192|3b650c7303ff55248b7afc8b77108b0e525083c800e89654faff8b5424048b7afc8b7424048b56fcff33ff730450ff770cff720889cb8b442414ba746b7d410bc0e8b60000005050508b4c24188b79fc508d742404568b5c24148b44241c8b570483c800ff128b142483fa0175068b5c2410eb108b4424108d54241c90e88a95000089c38b4d008d49f43b4d087303ff5520894d00c741fc020000008b4424088941048b7c240489398b742420891e894e04b80100000083c41cc2040083c800|@5361,63|22,1,@2153 59,0,@5032 66,1,@5034 126,1,@5360 179,0,0 5032:O4|@5034,@5207,@5209,@5033 5033:O2|@5211,@5032 5034:C2,2056|3b650c7303ff552489d689c18b41080bc0e8c274faff83f801740e8b410883c800e8f274faffc20c008b41088b3883ff0375688b70048b168b48088b3989de23f7f7c6010000007503ff553889de2bf78d760170f4505050505083fa017541f7c6010000007503ff553889f383eb0270f689e2c702f7ffffff89e7c747040100000089e6c746080100000089e2895a0c89e7c7471001000000eb29e96300000089e3c703f7ffffff89e789570489e3c743080300000089e289720c89e7c74710010000008b45008d40e83b45087303ff5520894500c740fc050000008b342489308b5c24048958048b5424088950088b4c240c89480c8b7c241089781083c414c20c0083ff05755f8b7004ff70088b0424e84ad2f9ff83f8017407baf8257541eb148b0424e8b268faff560bc0e8f206000089c2eb01568b0a83f90b751289d38b04248b7c240883c41857e9e46dfbff83f9fb751789d38b04248b7c240883c41857e9cd6dfbffe92d0000008b45008d40f03b45087303ff5520894500c740fc030000008b3c24897808895004c7000d00000083c408c20c0083ff01750db8a0757d41ff552cb8010000000bc0e8d277faff505083f80775738b442414e85a65f9ff83f801740d89f38b442414e87a65f9ffeb07bb589c7541eb328b4424140bc0e83665f9ff83f801740f8b4424140bc0e85665f9ff89c2eb0db8503d7541ff552cba0100000089d98b1a89ce8b4424105653bbc8757d418b4024ba703d754190e8cecff7ff8b7c2418eb05e9e400000050bbbc767d418b4724ba703d75410bc0e8aecff7ff8b7424088b5c241c50ff76088b532483fa017507b901000000eb4eff32ff72048b4424048b5424080bc0ff1283f80174208b4d008d49f83b4d087303ff5520894d00c741fc010000008b4424048901eb158b142483c4083b650c7303ff5524ebaeb90100000083c408f7c101000000750f8b7424108b018b5604ff1289c7eb05bfb0777d418b75008d76e83b75087303ff5520897500c746fc05000000bb3c7b7d41891e8b54240c8956108b4c2408894e0c8b442404894608897e048d7c2414c707fbffffff8d5c2414897304eb5983f8f975598b44241483c800e8f663f9ff83f801744d8b4424140bc0e81664f9ff8b1889d883c800e8de56f9ff83f801742089d8e80257f9ff8b5004f7c20100000075078b0a8b7104eb1dbe589c7541eb16be589c7541eb0fe969040000e936000000be589c75418b5d008d5bf43b5d087303ff5520895d00c743fc02000000ba9c9d7d41891389730489e1c701fbffffff89e0895804eb7383f8fd75738b4424140bc0e85e63f9ff83f801740d89f38b442414e87e63f9ffeb07bb589c7541eb328b4424140bc0e83a63f9ff83f801740f8b4424140bc0e85a63f9ff89c2eb0db8503d7541ff552cba0100000089d98b1a89ce8b4424105653ff76088b782483ff017511be01000000eb56e9b1030000e9a4000000ff37ff77048b4424048b542408ff1283f80174208b75008d76f83b75087303ff5520897500c746fc010000008b5c2404891eeb158b3c2483c4083b650c7303ff5524eba6be0100000083c408f7c601000000750f8b4c24088b068b5104ff1289c2eb05bab0777d418b4d008d49f03b4d087303ff5520894d00c741fc03000000b8589e7d4189018b7c24048979088951048d74240cc706fbffffff8d5c240c894b04eb7683f80575768b44241490e83e62f9ff83f80174438b4424140bc0e85e62f9ff8b1889d883c800e82655f9ff83f801742089d8e84a55f9ff8b5004f7c20100000075078b0a8b7104eb13be589c7541eb0cbe589c7541eb05be589c75418b5d008d5bf43b5d087303ff5520895d00c743fc02000000eb0ae98a020000e919000000bae0a17d41891389730489e1c701fbffffff89e0895804eb7183f803757150508b44241c0bc0e8a261f9ff83f80174648b44241c0bc0e8c261f9ff8b3089f083c800e88661f9ff83f801747389f0e8aa61f9ff8b580489d80bc0e86e61f9ff83f801746089d8e89261f9ff8b480489c80bc0e85661f9ff83f801746689c8e87a61f9ff8b308b5804eb0fe9f3010000e96c010000e91201000089d883c800e82a61f9ff83f801747489f189d80bc0e84a61f9ff518b388b1f83fb07753beb0ae9cb000000e9af0000008b5f088b470483c800e87253f9ff8b1083faff750989feeb18e97a00000089c73b650c7303ff5524ebc3be0100000089fe568b5424048b0283f807753089d78b5f088b4704e83653f9ff8b3083feff750beb05e92900000089f9eb1389c23b650c7303ff5524ebceb90100000089d18d7c24088b342489378d5c2408894b04eb5c89e2b9589c7541890a89e0bf589c75418978045050eb5f89e0bf589c7541893889e6bb589c7541895e045050eb4889e2b9589c7541890a89e0bf589c75418978045050eb3189e3ba589c7541891389e1b8589c75418941045050eb1ae91500000089e6bb589c7541891e89e2b9589c7541894a0450508b45008d40f03b45087303ff5520894500c740fc03000000bf38a47d4189388b74240c8970088b5c24088958048d542410c702fbffffff8d4c2410894104eb7153ff742418ff742418ff742418bbd02b754189c88b560c0bc0ff128b75008d76dc3b75087303ff5520897500c746fc08000000c7461c01000000c7461801000000c74614ffffffffc7461003000000c7460c01000000c7460803000000bb40970408895e04890689e2c702f3ffffffeb05e90900000089e18971045050505083c41050505083c40c50505050508b45008d40f43b45087303ff5520894500c740fc020000008b7c241489388b74241889700483c41cc20c0090|@5206,63|18,1,@2227 34,1,@2229 117,0,-5 126,0,0 135,0,0 149,0,0 164,0,-5 178,0,1 192,0,0 274,1,@1883 284,0,@408 294,1,@2204 302,1,@5035 332,1,@2830 355,1,@2830 399,0,6 415,0,@5039 423,0,0 430,1,@2248 446,1,@1644 462,1,@1645 469,0,@989 482,1,@1644 498,1,@1645 507,0,@597 515,0,0 532,0,@5041 540,0,@599 546,1,@601 563,0,@5048 571,0,@599 578,1,@601 603,0,0 680,0,0 711,0,@5055 740,0,@5093 776,0,-3 802,1,@1644 818,1,@1645 830,1,@1600 842,1,@1601 865,0,@989 872,0,@989 889,0,@989 918,0,@5147 931,0,-3 954,1,@1644 970,1,@1645 977,0,@989 990,1,@1644 1006,1,@1645 1015,0,@597 1023,0,0 1051,0,0 1136,0,0 1167,0,@5055 1196,0,@5148 1218,0,-3 1242,1,@1644 1258,1,@1645 1270,1,@1600 1282,1,@1601 1305,0,@989 1312,0,@989 1319,0,@989 1360,0,@5165 1373,0,-3 1398,1,@1644 1414,1,@1645 1426,1,@1644 1438,1,@1645 1450,1,@1644 1462,1,@1645 1474,1,@1644 1486,1,@1645 1518,1,@1644 1534,1,@1645 1570,1,@1596 1603,0,0 1630,1,@1596 1665,0,0 1692,0,@989 1701,0,@989 1715,0,@989 1724,0,@989 1738,0,@989 1747,0,@989 1761,0,@989 1770,0,@989 1789,0,@989 1798,0,@989 1832,0,@5171 1858,0,-3 1885,0,@450 1925,0,0 1932,0,0 1939,0,-1 1946,0,1 1953,0,0 1960,0,1 1965,0,I48 1978,0,-7 5035:C2,388|3b650c7303ff552489c689f090e8a26cfaff83f801740889f0e8d66cfaffc38b1683fa0375608b46048b388b4e088b1189d823c2a8017503ff553889d82bc28d400170f4505050505083ff01753da8017503ff553889c783ef0270f689e3c703f7ffffff89e2c742040100000089e0c740080100000089e3897b0c89e2c7421001000000eb29e96100000089e3c703f7ffffff89e2897a0489e7c747080300000089e389430c89e2c74210010000008b45008d40e83b45087303ff5520894500c740fc050000008b3c2489388b5c24048958048b5424088950088b4c240c89480c8b7c241089781083c414c383fa0575728b460890e842caf9ff83f8017407b9f8257541eb148b4608e8aa60faffff7604e8eafeffff89c1eb03ff76048b0183f80b750d89cb8b042483c404e9df65fbff83f8fb750d89cb8b042483c404e9cd65fbff8b45008d40f03b45087303ff5520894500c740fc030000008b3c24897808eb05e90d000000894804c7000d00000083c404c3b858757d4190ff552cb80100000090|@5038,63|14,1,@2227 26,1,@2229 96,0,-5 105,0,0 114,0,0 128,0,0 143,0,-5 157,0,1 171,0,0 246,1,@1883 256,0,@408 266,1,@2204 301,1,@2830 319,1,@2830 365,0,6 374,0,@5036 383,0,0 5036:O3|@7320,@224,@5037 5037:S9|4e6f20616363657373 5038:S25|56414c55455f4f505328292e636f6465416363657373283229 5039:O3|@7320,@224,@5040 5040:S16|636f646556616c202d20466f726d616c 5041:O3|@5043,@5045,@5042 5042:O2|@5047,@7355 5043:O2|@5044,@7355 5044:C2,28|8b388b72043bfe750cb803000000c3b801000000c3b801000000c390|@593,53|10,0,1 16,0,0 22,0,0 5045:O2|@5046,@7355 5046:C2,44|89c78b45008d40f03b45087303ff5520894500c740fc03000000897808c740048b0000008b7a048938c30bc0|@593,37|32,0,69 5047:C2,36|8b388b72043bfe750a8b4008c3b801000000c3b8503d754183c800ff552cb80100000090|@593,53|14,0,0 20,0,@597 31,0,0 5048:O3|@5050,@5052,@5049 5049:O2|@5054,@7360 5050:O2|@5051,@7360 5051:C2,28|8b388b72043bfe750cb803000000c3b801000000c3b801000000c390|@593,53|10,0,1 16,0,0 22,0,0 5052:O2|@5053,@7360 5053:C2,44|89c78b45008d40f03b45087303ff5520894500c740fc03000000897808c740048b0000008b7a048938c30bc0|@593,37|32,0,69 5054:C2,36|8b388b72043bfe750a8b4008c3b801000000c3b8503d754183c800ff552cb80100000090|@593,53|14,0,0 20,0,@597 31,0,0 5055:O18|@5057,@5060,@5062,@5064,@5066,@5068,@5070,@5072,@5074,@5076,@5078,@5080,@5082,@5084,@5086,@5088,@5090,@5056 5056:O1|@5092 5057:O1|@5058 5058:C2,8|b801000000c30bc0|@5059,1|1,0,0 5059:S31|56414c55455f4f505328292e6e756c6c456e7669726f6e6d656e742d283129 5060:O1|@5061 5061:C2,8|b801000000c30bc0|@5059,1|1,0,0 5062:O1|@5063 5063:C2,8|b801000000c30bc0|@5059,1|1,0,0 5064:O1|@5065 5065:C2,8|b801000000c30bc0|@5059,1|1,0,0 5066:O1|@5067 5067:C2,8|b801000000c30bc0|@5059,1|1,0,0 5068:O1|@5069 5069:C2,8|b801000000c30bc0|@5059,1|1,0,0 5070:O1|@5071 5071:C2,8|b801000000c30bc0|@5059,1|1,0,0 5072:O1|@5073 5073:C2,8|b801000000c30bc0|@5059,1|1,0,0 5074:O1|@5075 5075:C2,8|b801000000c30bc0|@5059,1|1,0,0 5076:O1|@5077 5077:C2,8|b801000000c30bc0|@5059,1|1,0,0 5078:O1|@5079 5079:C2,8|b801000000c30bc0|@5059,1|1,0,0 5080:O1|@5081 5081:C2,8|b801000000c30bc0|@5059,1|1,0,0 5082:O1|@5083 5083:C2,8|b801000000c30bc0|@5059,1|1,0,0 5084:O1|@5085 5085:C2,8|b801000000c30bc0|@5059,1|1,0,0 5086:O1|@5087 5087:C2,8|b801000000c30bc0|@5059,1|1,0,0 5088:O1|@5089 5089:C2,8|b801000000c30bc0|@5059,1|1,0,0 5090:O1|@5091 5091:C2,8|b801000000c30bc0|@5059,1|1,0,0 5092:C2,8|b801000000c30bc0|@5059,1|1,0,0 5093:C2,164|3b650c7303ff55245250ff7210b8010000008b520c83c800ff128b7c240850505050505050508d742404568b5f08b89b0000000bc0e8f667f7ff8b5d008d5be03b5d087303ff5520895d00c743fc070000008b54240489138b4c2408894b048b44240c8943088b7c2410897b0c8b7424148973108b7424188973148b54241c8953188b4c2428ff342453ff71048b5c242c8b442430e8260000008b44242483c42cc30bc0|@5146,63|14,0,0 47,0,77 54,1,@255 150,1,@5094 5094:C2,180|3b650c7303ff55248b7d008d7ff43b7d087303ff5520897d00c747fc02000000becc7c7d4189378b7424048977048b55008d52f43b55087303ff5520895500c742fc02000000b9c8847d41890a8b4c2408894a048b4d008d49e83b4d087303ff5520894d00c741fc05000000505357ff76285251b840877d4189018b74240889711089510c8979088b5424208951048b44242489442424c7442420ffffffffc744241c010000008b44241489ca83c418ff220bc0|@5145,63|33,0,@5095 71,0,@5112 117,0,@5114 155,0,-1 163,0,0 5095:C2,216|3b650c7303ff55248b7a045250b8010000008b570883c800ff128b7424048b5e0450b8010000008b53200bc0ff1250ba010000008b4c240483f901750489d0eb368b398b75008d76f43b75087303ff5520897500c746fc020000008956048b5f04891e8b490489f23b650c7303ff5524ebc6b80100000050bf010000008b74240483fe01750489fbeb368b168b4d008d49f43b4d087303ff5520894d00c741fc020000008979048b420489018b760489cf3b650c7303ff5524ebc6bb010000008b542414895c24148b1c248b44240c83c41452e91c000000|@5111,63|14,0,0 35,0,0 48,0,0 115,0,0 121,0,0 188,0,0 212,1,@5096 5096:C2,320|3b650c7303ff55245083fb017507bf01000000eb34ff73048b33bb0100000089f08d542408e83201000083f80175158b1c2483c4043b650c7303ff5524ebcabf0100000089c783c404f7c701000000750889f883c404c204008b5c240883fb01750bb80100000083c404c204008b030bc0e83a57faff89c189c883c800e82a62faff83f801747189c8e85e62faff8b3b83ff017545ff730450b81500000083c800e8961bf9ff8b75008d76ec3b75087303ff5520897500c746fc04000000c7460c01000000c7460801000000bb40970408895e04890689f0eb0989c68b4708ff7304560bc0e88eccf9ff89c18b04240bc0e872010000eb05e90f00000089c389c88d54240ce83e020000eb09b801000000ff73045083f801751f8b5c240483c4083b650c7303ff5524e92fffffffb80100000083c40cc2040083c40cc2040090|@5110,63|15,0,0 27,0,0 38,1,@5097 64,0,0 99,0,0 114,1,@2204 126,1,@2227 138,1,@2229 154,0,10 162,1,@1488 193,0,0 200,0,0 205,0,I48 230,1,@1919 242,1,@5098 262,1,@5103 269,0,0 303,0,0 5097:C2,240|3b650c7303ff55248b780483ff01757389d689c18b41080bc0e83261faff83f80174448b410883c800e86261faff560bc0e8d60000008b3c248b77fc3bc6751e8b45008d40f83b45087303ff5520894500c740fc01000000890883c404c3b80100000083c404c38b41088b3883ff017568f7c301000000741a8b7804b8c0207541eb05e96200000083c800ff552cba0100000089da8b5804f7c30100000074058b4004eb0eb89420754190ff552cb8010000008b7c42fe8b5efc3bfb75208b45008d40f83b45087303ff5520894500c740fc010000008908c3e906000000b801000000c3b801000000c3b801000000c3|@5102,63|26,1,@2227 42,1,@2229 50,1,@5098 95,0,0 125,0,@372 143,0,0 166,0,@369 175,0,0 223,0,0 229,0,0 235,0,0 5098:C2,72|3b650c7303ff55248b3883fffb75048b4004c383ff0b75218b70048b1e83fbff75088b56048b4208ebd683fb0375058b4608ebcc8b4604ebc7b88c807d4190ff552cb80100000090|@5101,61|58,0,@5099 67,0,0 5099:O3|@7320,@224,@5100 5100:S22|6576616c75653a204e6f74206120636f6e7374616e74 5101:S20|434f44455452454528292e6576616c7565283129 5102:S40|56414c55455f4f505328292e66696e64457863657074696f6e2833297465737456616c7565283229 5103:C2,96|3b650c7303ff5524525383c800e8f6e7f9ffba84817d4190ff1283f8017509b80100000083c408c38b38ff70048b5f048b078d54240c83c800e8de00000083f80175198b042483c4043b650c7303ff5524ebc7b80100000083c40cc383c40cc3|@5109,63|14,1,@2003 19,0,@5104 32,0,0 58,1,@5107 84,0,0 5104:O1|@5105 5105:C2,100|3b650c7303ff55248b780883ff01744c508b7004b80100000089f290ff128b1c2450b8010000008b1383c800ff1283c800e8caffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0c24890a89d083c408c3b801000000c30bc0|@5106,63|21,0,0 35,0,0 93,0,0 5106:S16|4d6973632e697465724c697374283129 5107:C2,444|3b650c7303ff552489d189d8baf83a7741e8cab8f9ff83f801741a89d8baec3a774183c800e842b9f9ff8b59f88b51fce9c3fcffff89d8ba2c38774190e8d2b5f9ff83f801747489d8ba2038774183c800e84ab6f9ff89c789f883c800e8ea52faff89fe89c389d890e8da5dfaff83f801747189d8e80e5efaff83fe01754a5150b81500000083c800e84a17f9ff8b55008d52ec3b55087303ff5520895500c742fc04000000c7420c01000000c7420801000000b940970408eb05e9f6000000894a04890289d0eb0789c28b4608515290e83ec8f9ff89c18b04240bc0e822fdffffeb05e91300000089c389c88b7c24048b57fc83c408e9e8fdffff8b1383fa01757183fe01754251ff7304b815000000e8c216f9ff8b4d008d49ec3b4d087303ff5520894d00c741fc04000000c7410c01000000c7410801000000bf40970408897904890189c8eb078b460851ff7304e8bec7f9ff8b4c24048b79f8f7c701000000741989c3b8c020754183c800ff552ceb05e937000000be0100000089fe8b1c24f7c301000000740489daeb1289c2b89420754190ff552c89d0ba010000008b5c56fe8b51fc83c408e934fdffffb801000000c3b801000000c3|@5108,63|13,0,@1871 18,1,@1872 30,0,@1870 38,1,@1875 49,1,@5097 56,0,@1851 62,1,@1852 74,0,@1850 82,1,@1855 94,1,@2204 106,1,@2227 118,1,@2229 130,0,10 138,1,@1488 169,0,0 176,0,0 181,0,I48 210,1,@1919 222,1,@5098 248,1,@5103 269,0,10 274,1,@1488 305,0,0 312,0,0 317,0,I48 338,1,@1919 360,0,@372 378,0,0 402,0,@369 413,0,0 428,1,@5103 433,0,0 439,0,0 5108:S53|56414c55455f4f505328292e66696e64457863657074696f6e283329736561726368537061636528322966696e644974656d283229 5109:S42|56414c55455f4f505328292e66696e64457863657074696f6e2833297365617263685370616365283229 5110:S28|56414c55455f4f505328292e66696e64457863657074696f6e283329 5111:S44|56414c55455f4f505328292e7072696e74537472756374283529657863657074696f6e536561726368283129 5112:C2,560|3b650c7303ff55248b7c241483ff017508b801000000c218008b770483fe01756f83fb01753e89c38b45008d40ec3b45087303ff5520894500c740fc040000008b54240889500c8b4c24048948088b378970048b7c2418893889da8b342483c41c56ff228b542418f7c201000000741189c1b8c0207541ff552c89c8b90100000089d1f7c301000000740a5089d8eb17e95000000089c3b89420754183c800ff552cb8010000008b5c41fe8b45008d40ec3b45087303ff5520894500c740fc040000008b4c240c89480c8b7424088970088b1789500489188b14248b7c240483c42057ff228b4c2404f6c1017503ff553883f9017f168b42048b580cb89899754189da8b1c2483c41c53ff228b742418f7c601000000740f50b8c020754190ff552cb8010000005089f0f7c30100000074055089d8eb1050b8942075410bc0ff552cb8010000008b0c248b7441fe8b45008d40ec3b45087303ff5520894500c740fc040000008b4c241489480c8b4c240c8948088b0f89480489305253ff77048b542410ff12bb590000008b44242490ff154094040883f80175138b4424088b7804b8000375418b1783c800ff128b4424088b78048b4424248b570cff128b7424088b5e04b8000375418b13ff128b542404f6c2017503ff553889d183c10270f68b442418a8017503ff553889c783ef0270f68b74242c8b5c24248b5424208b44241c8974242c8b342489742428895c2424895424208944241c897c241889cb8b4424108b54240883c414e9d0fdffff|@5113,63|18,0,0 115,0,@372 125,0,0 152,0,@369 163,0,0 253,0,@965 282,0,@372 291,0,0 313,0,@369 323,0,0 391,0,44 402,0,I24 419,0,@312 454,0,@312 5113:S33|56414c55455f4f505328292e7072696e7453747275637428352970566563283829 5114:C2,1816|3b650c7303ff55245250538b7c241083ff017507be01000000eb238b5c24048b173bda7507be03000000eb128b7f043b650c7303ff5524ebd6be0100000083fe0174198b4424088b7804b8989975418b570c8b74240c83c41c56ff228b0c248b0183f80775568b59088b410490e87a3df9ff8b3883ffff75198b7424088b5e04b87f0000008b530c8b4c240c83c41c51ff228b7424188b5c24148b54241089742418895c24148954241089c38b4424048b54240883c40ce944ffffff89c883c800e87e43f9ff83f801747289c8e8a243f9ff8b088b40080bc0e8de43f9ff89c789f883c800e8963ef8ff89fe90e8d63ef8ff83f80174198b5c24088b5304b87f0000008b520c8b4c240c83c41c51ff2289f083c800e8663ef8ff89c3b8d8b77541e85a3ef8ff515689da89c389d083c800e80acff9ff83f8017422eb05e9cd0300008b4c24108b41048b780cb84c00774189fa8b74241483c42456ff228b042490e81a3ef8ff89c1b8cc327541e80e3ef8ff89c389c883c800e8c2cef9ff83f80174718b44240cf7c0010000007410b8c020754183c800ff552cbf0100000089c78b77048b5c2410f7c001000000740fb8c02075410bc0ff552cba0100000089c28b02568b530890ff12f7c00100000075718b0090e82e36faff8b1083faff751e8b4c24148b79048b04248b570c8b742418eb05e97e00000083c42856ff228b4c2410f7c101000000741089c6b8c020754190ff552cbf0100000089cf8b77088b5d008d5bf43b5d087303ff5520895d00c743fc020000008b7c241c897b04890beb05e918000000565389c38b4424088d54242090e8da04000083c418c20c008b5424148b4a048b04248b510c8b7c241883c42857ff228b7c240483ff017507b89c317541eb648b770483fe0175618b5d008d5be83b5d087303ff5520895d00c743fc05000000bad8967d4189138b0f894b108b44240c89430c8b5424188953088b4424108943048b45008d40f43b45087303ff5520894500c740fc02000000895804c700fbffffffeb5ce99900000089f88d54241483c800e83a0d00008b5d008d5bf43b5d087303ff5520895d00c743fc02000000894304c703150000005383f8017507ba03000000eb258b088b3983fffb75178b40043b650c7303ff5524ebdeba01000000e93d000000ba0100000083fa01742d8b0424e86a55fbff89c68b45008d40f43b45087303ff5520894500c740fc02000000897004c700fbffffffeb038b042483c404ff7504be768b7d41566a1789650489c38b44240ce8de3bf8ffbaacc8b4418b0a535083f901750fb824ae74410bc0ff552cb8010000008b39ff7704ff71048b5c24088b07e86eccf9ff83f80174068b442404eb158b0c2483c4083b650c7303ff5524ebbeb8010000008b74242c89c38b460489da83c800ff1289c28b44243cff1289c18b44240c90e8d2f4ffff89caff1289c78b44242889fa0bc0ff12ff7424188f450483c430c20c0083c8008b3083fe17756f89c18b042483c800e896dbf9ff83f80174218b042483c800e886dbf9ff518b5c24088d5424180bc0e8e60c000083c418c20c008b04240bc0e8d2c4f9ff8b3883ffff745f8b042490e8c2c4f9ff89c68b04240bc0e802c7f9ff51568b5c240c90e81ecef9ff6a0389c38b442404eb05e955000000e8f2cef9ff8b5c24288b5424248b4c2420895c242889542424894c242089c38b4424148b54241883c41ce920fbffff8b7424108b5e04b87f0000008b530c8b7c241483c42457ff2289c3b80100000083c414c20c0090ff552cb80100000089c8e85a46f9ff83f801742089c8e87e46f9ff8b7c24088b7704b84c7a75418b560c8b5c240c83c41c53ff2289c8e83239f9ff83f801747089c8e85639f9ff8b7c2418f7c7010000007503ff553883ff017f198b7424088b5e04b8989975418b530c8b4c240c83c41c51ff22ff700489c890e8ce0d000083f80174728b74240c8b5e04b894db76418b53180bc0ff128b54240c8b4a04b8510000008b510c83c800ff128b4500eb05e9430100008d40f03b45087303ff5520894500c740fc03000000bf809b7d4189388b7424148970088b5c240c895804ff742408ff7424046a596aff6affff7424308b530ceb05e935000000bb0100000090ff128b4c240c8b41048b780cb85300000089fa90ff128b74240c8b5e04b8010000008b53088b4c241083c42051ff228b74240c8b5e04b894db76418b53180bc0ff128b54240c8b4a04b8f70000008b510c83c800ff128b44240c8b7d008d7fec3b7d087303ff5520897d00c747fc04000000bef49b7d4189378b5c2414895f0c8947088b50048957048b4d008d49f43b4d087303ff5520894d00c741fc02000000bed49c7d418931897904ff742408ff7424046a596aff6affff742430bb010000008b500c89c890ff128b4c240c8b41048b780cb8fb00000089fa90ff128b74240c8b5e04b8010000008b53088b4c241083c42051ff228b7c24088b7704b8109d7d418b560c8b5c240c83c41c53ff22|@5144,63|21,0,0 38,0,1 58,0,0 75,0,@965 110,1,@1596 129,0,63 194,1,@1620 206,1,@1621 218,1,@1622 230,1,@1109 238,1,@1111 255,0,63 278,1,@1109 285,0,@1062 290,1,@1109 306,1,@1946 333,0,@1706 354,1,@1109 361,0,@508 366,1,@1109 378,1,@1946 400,0,@372 411,0,0 433,0,@372 443,0,0 470,1,@2153 526,0,@372 535,0,0 598,1,@5115 641,0,@487 680,0,@5128 741,0,-3 762,1,@5130 795,0,10 806,0,1 835,0,0 845,0,0 858,1,@2837 893,0,-3 909,0,$5114+1078 926,1,@1109 931,0,@7393 945,0,@51 955,0,0 974,1,@1946 1006,0,0 1042,1,@5098 1094,1,@1994 1110,1,@1994 1126,1,@5132 1142,1,@1923 1158,1,@1923 1170,1,@1932 1182,1,@1956 1202,1,@1958 1256,0,63 1276,0,0 1291,0,0 1298,1,@1644 1310,1,@1645 1322,0,@840 1342,1,@1600 1354,1,@1601 1386,0,@965 1410,1,@5136 1427,0,@1662 1446,0,40 1490,0,@5138 1539,0,0 1557,0,41 1574,0,0 1599,0,@1662 1618,0,123 1659,0,@5140 1706,0,@5142 1734,0,0 1757,0,125 1774,0,0 1799,0,@5143 5115:C2,904|3b650c7303ff55248b7afc5250538b571083c800ff12f7c00100000075048b30eb05be08cd74418b5c24088b53fc8b4a0456b8501475418b51180bc0ff128b04248b3883ff0175708b70048b4424040bc0e8ea36f9ff83f801746289f18b442404e80a37f9ff8b7804f7c70100000075738b3751578b1eb863000000ff154094040883f80174628b1c248b5304f7c20100000075598b0a528b19b86500000090ff154094040883f80174738b04248b780483ff01756deb0ae9fa000000e9e50000008b7424188b5c24088b56085323daf6c3015b7503ff55383bda7d16b903000000eb14e9b0000000e99f000000e98d000000b9010000008b5efc8b4424188b7d008d7fdc3b7d087303ff5520897d00c747fc08000000ba18927d41eb0ae951000000e94000000089178b54242489571c8b7424048977188b7424148977148b7424088977108b74242089770c8b70fc8977088b430c89470489cb89f88d54241ce88a030000eb6f8d54241c90e876040000eb688d54241c90e86a040000eb618d54241890e85e04000050eb598d542418e85204000050eb718d542410e846040000505050eb688d5424100bc0e836040000505050eb5d83ffff755d8b70048b4424040bc0e87635f9ff83f801747189f18b442404eb14e98d010000e988010000e983010000e97e0100000bc0e87e35f9ff8b7804f7c70100000075728b3751578b1eb863000000eb14e95a010000e955010000e950010000e93d0100000bc0ff154094040883f80174608b1c248b5304f7c20100000075708b0a528b19eb05e906010000b8650000000bc0ff154094040883f80174718b04248b780483ff01756b8b7424188b5c24088b5608eb05e9c90000005323daf6c3015b7503ff55383bda7d0cb903000000eb0ae9a1000000b9010000008b5efc8b4424188b7d008d7fdc3b7d08730aeb05e976000000ff5520897d00c747fc08000000bad0957d4189178b542424eb0ae94b000000e93a00000089571c8b7424048977188b7424148977148b7424088977108b74242089770c8b70fc8977088b430c89470489cb89f88d54241ce8e6010000eb5d8d54241c90e8d2020000eb518d54241c90e8c6020000eb458d54241890e8ba02000050eb388d542418e8ae02000050eb2c8d542410e8a2020000505050eb1e8d5424100bc0e892020000505050eb0e8d5424100bc0e8820200005050508b7424188b5efc8b5304b8010000008b52088b4c241c83c42851ff2283c800|@5127,63|35,0,@207 51,0,@328 82,1,@1600 98,1,@1601 120,0,49 126,0,I24 155,0,50 162,0,I24 222,0,1 244,0,0 280,0,@5116 354,1,@5120 366,1,@5122 378,1,@5122 390,1,@5122 402,1,@5122 414,1,@5122 430,1,@5122 454,1,@1600 494,1,@1601 516,0,49 546,0,I24 582,0,50 590,0,I24 645,0,1 657,0,0 700,0,@5125 774,1,@5120 786,1,@5122 798,1,@5122 810,1,@5122 822,1,@5122 834,1,@5122 850,1,@5122 866,1,@5122 884,0,0 5116:C2,108|3b650c7303ff55248b7a10f7c7010000007503ff553889fe83c60270f68b5d008d5bf03b5d087303ff5520895d00c743fc03000000b9a0927d41890b8b4a0c894b088b7a08897b048b7a1c8b0c24893c24ff7218ff7214ff7210565089d8bb010000008b520451ff2283c800|@5119,63|54,0,@5117 95,0,0 5117:C2,40|3b650c7303ff55248b78048b70088b1c24893424ff700cff720889d98b5f048b008b520451ff2290|@5118,63| 5118:S56|56414c55455f4f505328292e7072696e745374727563742835297072696e74732835297072696e74496e6669786564283429283129283129 5119:S53|56414c55455f4f505328292e7072696e745374727563742835297072696e74732835297072696e74496e6669786564283429283129 5120:C2,144|3b650c7303ff552483fb03756c8b5afc8b4b0cf6c1017503ff553883f9037f108b43fc8b7804b8989975418b570cff228b7bfc8b77045250b8510000008b560cff128b5c24048b53fc8b4a0cf6c1017503ff553889c883e80270f68b14240bc0ff128b4424048b78fc8b77fc8b5e04b8530000008b530ceb05e90500000083c408ff228b7afc89c68b470c89f2ff2290|@5121,63|39,0,@965 57,0,40 112,0,41 5121:S68|56414c55455f4f505328292e7072696e745374727563742835297072696e74732835297072696e74496e66697865642834296d6179506172656e74686573697365283229 5122:C2,116|3b650c7303ff55248b7afc8b770881fecf0700007507bb03000000eb05bb010000008b4ffc8b45008d40dc3b45087303ff5520894500c740fc08000000beec947d4189308b72f089701c8b72f88970188b71048970148b4a088948108b72f489700c8b72048970088b77fc897004e995feffff90|@5124,63|23,0,1 30,0,0 62,0,@5123 111,1,@5120 5123:C2,140|3b650c7303ff55248b7a1c8b3783fe037502eb248b5a145250b8307b75418b530c83c800ff128b5424048b4a14b8000375418b11ff12eb0252508b5c24048b53148b43188b520c90ff128b4c24048b41148b38b80003754189fa0bc0ff128b7424048b1c248b542408895c2408c7442404cf0700008b4e08890c248b5e0c8b461089d78b560457ff2283c800|@5119,63|26,0,@858 46,0,@312 84,0,@312 113,0,999 5124:S52|56414c55455f4f505328292e7072696e745374727563742835297072696e74732835297072696e74496e66697865642834292f33 5125:C2,108|3b650c7303ff55248b7a10f7c7010000007503ff553889fe83c60270f68b5d008d5bf03b5d087303ff5520895d00c743fc03000000b958967d41890b8b4a0c894b088b7a08897b048b7a1c8b0c24893c24ff7218ff721456ff72105089d8bb010000008b520451ff2283c800|@5119,63|54,0,@5126 95,0,0 5126:C2,40|3b650c7303ff55248b78048b70088b1c24893424ff700cff720889d98b5f048b008b520451ff2290|@5118,63| 5127:S50|56414c55455f4f505328292e7072696e745374727563742835297072696e74732835297072696e74496e6669786564283429 5128:C2,68|3b650c7303ff55248b7d008d7ff43b7d087303ff5520897d00c747fc020000008b72088977048b5a0c891f8b48048b1c24890c246aff5789d98b5a108b008b520451ff22|@5129,63| 5129:S56|56414c55455f4f505328292e7072696e745374727563742835297072696e74732835296d616b654172672831297072696e74417267283129 5130:C2,156|3b650c7303ff552483f8017506b801000000c38b7d008d7fe83b7d087303ff5520897d00c747fc05000000be30987d4189378b308977108b5af8895f0c8b4a04894f088b72fc8977048b75008d76f43b75087303ff5520897500c746fc02000000897e04c706fbffffff52568b40040bc0e88affffff8b5d008d5bf43b5d087303ff5520895d00c743fc020000008943048b1424891389d883c408c3|@413,63|14,0,0 44,0,@5131 102,0,-3 5131:C2,68|3b650c7303ff55248b7d008d7ff43b7d087303ff5520897d00c747fc020000008b72088977048b5a0c891f8b48048b1c24890c246aff5789d98b5a108b008b520451ff22|@5129,63| 5132:C2,388|3b650c7303ff552483f801750eb8309a7d4190ff552cb8010000008b388b7704f7c601000000757789d15057ff77088b042483c800e8a247faff83f80174658b042483c800e8d247faff8b7c24048b54240853ff36ff37ff770cff7204e836e7fffff7c001000000740db8c0207541ff552cbf0100000089c78b07515789c68b41f889f2ff1283f801751e8b5c24188b4424088b54240483c428e961ffffffe9cd000000e9b50000008b5c241483fb0174188b5424048b4afc8b41048b780c8b44241089fa83c428ff228b5424048b4a0cf6c1017503ff553883f9017f138b42fc8b7804b8989975418b570c83c428ff228b04248b78088b42f889faff12508b5c241c8b4424100bc0e8a637fbff8b7424088b1c248b56f83bda75058b4e04eb208b4d008d49f43b4d087303ff5520894d00c741fc020000008b7e0489790489118b7c242c895c242c894c242889c38b44241489f283c42857e986f4ffff8b41fc8b7804b87f0000008b570c83c40cff228b5afc8b4b04b87f0000008b510cff2283c800|@5135,63|14,0,@5133 23,0,0 54,1,@2227 70,1,@2229 94,1,@5098 107,0,@372 115,0,0 229,0,@965 266,1,@2823 346,1,@5115 357,0,63 376,0,63 5133:O3|@7320,@224,@5134 5134:S12|6e6f6e65206d617463686573 5135:S55|56414c55455f4f505328292e7072696e745374727563742835297072696e74732835297072696e74436f6e737472756374696f6e283229 5136:C2,172|3b650c7303ff552489c689f090e80e2bf9ff83f801746b89f0e8322bf9ff8b1883fb037562ba030000008b780483ff017506b803000000c38b3752ff36ff7704bbffffffff89d00bc0e8de7bf7ff89c38b442404ff154094040883f80174368b5c2408f6c3017503ff553889da83c20270f68b3c2483c40c3b650c7303ff5524ebabe91d000000e912000000b80100000083c40cc3b80100000083c40cc3b801000000c3b801000000c30bc0|@5137,63|14,1,@1600 26,1,@1601 38,0,1 51,0,1 65,0,-1 74,1,@336 86,0,I24 141,0,0 150,0,0 159,0,0 165,0,0 5137:S28|56414c55455f4f505328292e697350726f6475637454797065283129 5138:C2,40|3b650c7303ff55248b78048b70088b1c24893424ff700cff720889d98b5f048b008b520451ff2290|@5139,63| 5139:S38|56414c55455f4f505328292e7072696e745374727563742835297072696e7473283529283129 5140:C2,148|3b650c7303ff55248b7a045250ff33ff7304b8181475418b57180bc0ff128b74240c8b5e04ff730cbb10b676418b442408e88e76f7ff8b142483c800ff128b5424108b4a04b8000375418b11ff128b44241ca8017503ff553889c783ef0270f68b742410576affff760c8b5c24108b4424188b560883c800ff128b5c24108b5304b8010000008b52088b4c241483c42051ff2290|@5141,63|19,0,@326 41,0,@1571 50,1,@323 70,0,@312 130,0,0 5141:S38|56414c55455f4f505328292e7072696e745374727563742835297072696e7473283529283429 5142:C2,32|3b650c7303ff55248b78088b3424893c24ff700c8b58048b008b520456ff2290|@5139,63| 5143:S7|3c656d7074793e 5144:S35|56414c55455f4f505328292e7072696e745374727563742835297072696e7473283529 5145:S26|56414c55455f4f505328292e7072696e74537472756374283529 5146:S34|56414c55455f4f505328292e636f646556616c2835297072696e7450726f63283129 5147:C2,160|3b650c7303ff552450505050505050ff30ff7004ff700cff72048d7c2410578b5808b89b0000000bc0e8a245f7ff8b75008d76e03b75087303ff5520897500c746fc070000008b5c2410891e8b5424148956048b4c2418894e088b44241c89460c8b7c2420897e108b7c2424897e148b5c2428895e188b5424048b4c242c8954242c897424288b442408894424248b1c248b44240c83c42451e9c2ddffff0bc0|@5146,63|35,0,77 42,1,@255 154,1,@5094 5148:C2,272|3b650c7303ff55248b7d008d7ff83b7d087303ff5520897d00c747fc01000040be4097040889378b75008d76f43b75087303ff5520897500c746fc02000000bb849f7d41891e897e04505050505050508b5d008d5bf43b5d087303ff5520895d00c743fc02000000b9fc9f7d41890b897b0489e1891989e3b9b0a07d41894b0489e3b904a17d41894b0889e389730c89e1be30a17d4189711089e3b95ca17d41894b1489e6bb88a17d41895e188b4d008d49e03b4d087303ff5520894d00c741fc070000008b342489318b5c24048959048b5c24088959088b5c240c89590c8b5c24108959108b5c24148959148b7424188971185768214e000051ff72048b5a08e89edcffff8b1c248b0383c420c390|@5164,63|33,0,I48 64,0,@5149 105,0,@5151 121,0,@5153 131,0,@5156 146,0,@5158 156,0,@5160 166,0,@5162 246,0,10000 258,1,@5094 5149:C2,40|3b650c7303ff55248b7a048b375789c389f083c800e81a73f7ff8b1c248903b80100000083c404c3|@5150,63|22,1,@323 32,0,0 5150:S41|56414c55455f4f505328292e636f646556616c2835296d616b65537472696e6728312970702d283129 5151:C2,108|3b650c7303ff5524528b38f7c7010000007503ff553883ff017f09b80100000083c404c38b14248b42048b305750bb4100000089f0e88272f7ff8b1c2489038b542404f6c2017503ff553889d183e90270f689cf83c4083b650c7303ff5524ebaab80100000083c40cc30bc0|@5152,63|28,0,0 47,0,32 54,1,@323 98,0,0 5152:S34|5072657474795072696e7465722e75676c795072696e74283229627265616b283129 5153:O1|@5154 5154:C2,8|b803000000c30bc0|@5155,1|1,0,1 5155:S29|5072657474795072696e7465722e75676c795072696e74283229283129 5156:O1|@5157 5157:C2,8|b801000000c30bc0|@5155,1|1,0,0 5158:O1|@5159 5159:C2,8|b801000000c30bc0|@5155,1|1,0,0 5160:O1|@5161 5161:C2,8|b801000000c30bc0|@5155,1|1,0,0 5162:O1|@5163 5163:C2,8|b801000000c30bc0|@5155,1|1,0,0 5164:S35|56414c55455f4f505328292e636f646556616c2835296d616b65537472696e67283129 5165:C2,276|3b650c7303ff55248b7d008d7ff83b7d087303ff5520897d00c747fc01000040be4097040889378b75008d76f43b75087303ff5520897500c746fc02000000bb10a37d41891e897e04505050505050508b5d008d5bf43b5d087303ff5520895d00c743fc02000000b984a37d41890b897b0489e1891989e3b9b0a07d41894b0489e3b904a17d41894b0889e389730c89e1be30a17d4189711089e3b95ca17d41894b1489e6bb0ca47d41895e188b4d008d49e03b4d087303ff5520894d00c741fc070000008b342489318b5c24048959048b5c24088959088b5c240c89590c8b5c24108959108b5c24148959148b7424188971185768214e000051ff70048b5a048b000bc0e812d9ffff8b1c248b0383c420c390|@5146,63|33,0,I48 64,0,@5166 105,0,@5168 121,0,@5153 131,0,@5156 146,0,@5158 156,0,@5160 166,0,@5169 246,0,10000 262,1,@5094 5166:C2,40|3b650c7303ff55248b7a048b375789c389f083c800e88e6ff7ff8b1c248903b80100000083c404c3|@5167,63|22,1,@323 32,0,0 5167:S40|56414c55455f4f505328292e636f646556616c2835297072696e7450726f6328332970702d283129 5168:C2,108|3b650c7303ff5524528b38f7c7010000007503ff553883ff017f09b80100000083c404c38b14248b42048b305750bb4100000089f0e8fa6ef7ff8b1c2489038b542404f6c2017503ff553889d183e90270f689cf83c4083b650c7303ff5524ebaab80100000083c40cc30bc0|@5152,63|28,0,0 47,0,32 54,1,@323 98,0,0 5169:O1|@5170 5170:C2,8|b801000000c30bc0|@5155,1|1,0,0 5171:C2,76|3b650c7303ff5524528b7d008d7ff43b7d087303ff5520897d00c747fc02000000bea0a47d418937894704578b42048d5424080bc0e8ba0000008b1c24ba00ae7d4183c408e98a0900000bc0|@5205,63|34,0,@5172 54,1,@5174 62,0,@5200 70,1,@5201 5172:C2,60|3b650c7303ff55248b780c8b70188b188b48088b45008d40ec3b45087303ff5520894500c740fc0400000089480c89580889700489388b5204ff2290|@5173,63| 5173:S42|56414c55455f4f505328292e636f646556616c283529696e7374616c6c50702831297070726f63283129 5174:C2,316|3b650c7303ff552489d689c389d883c800e84226f9ff83f801746f89f189d80bc0e86226f9ffff308b40080bc0e89e26f9ff500bc0e826abf9ff8b3883ffff75728b042490e84a21f8ff8b74240483fe017502eb638b5e0483fb0175138b51fc508b5a088b0683c800e8ea000000eb5b8b51fc50518b420890e8eaf4ffff83f801750fb8a8ab7d41eb05e99f000000ff552c8b0c248b41fc8b700889f0e8e61ff9ff83f801741f89f0e80a20f9ff8b5804eb0ae939000000e9130000008b44240ce8e605000083c404eb06e901000000508b042490e8c606000083f801750bb84cad7d4183c800ff552c8b042483c40cc38b042490e866aaf9ff89c68b04240bc0e8a6acf9ff51568b5c240c90e8c2b3f9ff6a0389c38b44240483c800e89ab4f9ff8b54240483c410e9d2feffffb888ad7d41ff552cb80100000090|@5199,63|18,1,@1620 34,1,@1621 46,1,@1622 54,1,@1923 70,1,@1109 106,1,@5175 122,1,@5136 132,0,@5187 158,1,@1600 170,1,@1601 194,1,@5189 214,1,@5193 224,0,@5195 246,1,@1923 258,1,@1932 270,1,@1956 286,1,@1958 303,0,@5197 311,0,0 5175:C2,784|3b650c7303ff552489c689d890e81a2cf9ff83f801747189f189d80bc0e83a2cf9ff518b388b1f83fb07752a8b5f088b470483c800e86e1ef9ff8b1083faff750489feeb1389c73b650c7303ff5524ebd4be0100000089fe89f083c800e8ce1ef9ff83f801747089f0e8f21ef9ff8b1083fa0375678b4804f7c10100000075618b3951578b1feb05e972020000b8630000000bc0ff154094040883f80174708b34248b5c24048b5304f7c20100000075638b0aff760452518b19b86500000090ff154094040883f801745e8b04248b7c24048b7704eb0fe913020000e9fe010000e9e901000083fe01756eff70048b5c24188b0b83f907753a89df8b5f088b4704e8a21df9ff8b3083feff7510eb0ae9ab010000e99601000089faeb1889c33b650c7303ff5524ebc9e971010000ba0100000089da528b4424108b3083fe07752c89c18b59088b4104e85a1df9ff8b3883ffff750989cfeb16e9310100003b650c7303ff5524ebd2bf0100000089c789fb8b042490e8b21df8ff83f801745a8b042483c800e8d21df8ff89c189d883c800e8961df8ff83f801747489d8e8ba1df8ff89c389c883c800e85612f9ff83f80174618b4424048b3083fe07752f89c18b59088b410483c800e8da1cf9ff8b3883ffff750989cfeb16e9a10000003b650c7303ff5524ebcfbf0100000089c789fb89d80bc0e80623f9ff83f801747089d8e82a23f9ff8b1083fa017552eb0ae96b000000e9660000008b400890e85623f9ff83c800e8121ef8ff89c1b8e4337541e8061ef8ff89c389c883c800e8baaef9ff83f8017409b80100000083c420c3b8b0a97d410bc0ff552cb801000000b80caa7d4183c800ff552cb801000000b80caa7d4183c800ff552cb801000000b86caa7d4183c800ff552cb801000000b8c0aa7d4183c800ff552cb801000000b8c0aa7d4183c800ff552cb801000000b8c0aa7d4183c800ff552cb801000000b8c0aa7d4183c800ff552cb801000000b8c0aa7d4183c800ff552cb801000000b8c0aa7d4183c800ff552cb801000000b8c0aa7d4183c800ff552cb801000000b810ab7d4183c800ff552cb80100000090|@5186,63|14,1,@1644 30,1,@1645 54,1,@1596 82,0,0 94,1,@1600 106,1,@1601 142,0,49 150,0,I24 187,0,50 194,0,I24 258,1,@1596 303,0,0 330,1,@1596 361,0,0 374,1,@1102 390,1,@1103 402,1,@1102 414,1,@1103 426,1,@1584 458,1,@1596 489,0,0 502,1,@1620 514,1,@1621 542,1,@1622 550,1,@1109 557,0,@525 562,1,@1109 574,1,@1946 584,0,0 593,0,@5176 603,0,0 608,0,@5178 619,0,0 624,0,@5178 635,0,0 640,0,@5180 651,0,0 656,0,@5182 667,0,0 672,0,@5182 683,0,0 688,0,@5182 699,0,0 704,0,@5182 715,0,0 720,0,@5182 731,0,0 736,0,@5182 747,0,0 752,0,@5182 763,0,0 768,0,@5184 779,0,0 5176:O3|103,@349,@5177 5177:S65|417267756d656e74207072696e746572206d757374206861766520747970652027612a696e742d3e756e697420287365636f6e6420617267206e6f7420696e7429 5178:O3|103,@349,@5179 5179:S70|417267756d656e74207072696e746572206d757374206861766520747970652027612a696e742d3e756e697420287365636f6e6420617267206e6f74207479706520696e7429 5180:O3|103,@349,@5181 5181:S60|417267756d656e74207072696e746572206d757374206861766520747970652027612a696e742d3e756e697420286d69736d61746368656420276129 5182:O3|103,@349,@5183 5183:S55|417267756d656e74207072696e746572206d757374206861766520747970652027612a696e742d3e756e697420286e6f74207061697229 5184:O3|103,@349,@5185 5185:S59|417267756d656e74207072696e746572206d757374206861766520747970652027612a696e742d3e756e697420286e6f742066756e6374696f6e29 5186:S59|56414c55455f4f505328292e636f646556616c283529696e7374616c6c5070283129666f6c6c6f775479706573283129636865636b46756e283229 5187:O3|103,@349,@5188 5188:S24|417267756d656e74206d7573742062652061207475706c65 5189:C2,92|3b650c7303ff552483f801751a83fb017506b801000000c3b850ac7d410bc0ff552cb801000000f7c301000000751f8b3bff7004ff73048b5f048b0090e86afaffff8b1c248b44240483c408ebb2b850ac7d41ff552cb80100000090|@5192,63|19,0,0 25,0,@5190 35,0,0 62,1,@5175 79,0,@5190 87,0,0 5190:O3|103,@349,@5191 5191:S30|5475706c652073697a6520646f6573206e6f74206d617463682074797065 5192:S60|56414c55455f4f505328292e636f646556616c283529696e7374616c6c5070283129666f6c6c6f775479706573283129636865636b46756e73283229 5193:C2,64|8b3083fefd75218b58048b138b0a83f903750489c7eb1389d03b650c7303ff5524ebddbf0100000089c78b1f83fbff7506b803000000c3b801000000c383c800|@5194,63|36,0,0 50,0,1 56,0,0 5194:S25|5354525543545f56414c5328292e6973467265654964283129 5195:O3|103,@349,@5196 5196:S36|496e76616c6964207479706520286e6f74206672656520617420746f702d6c6576656c29 5197:O3|103,@349,@5198 5198:S38|496e76616c6964207479706520286e6f742061207479706520636f6e737472756374696f6e29 5199:S48|56414c55455f4f505328292e636f646556616c283529696e7374616c6c5070283129666f6c6c6f775479706573283129 5200:O2|@5201,@7393 5201:C2,108|3b650c7303ff55248b7d008d7ff43b7d087303ff5520897d00c747fc02000000895f0489078b5a048b0b50535789c88d54240c0bc0e84e0000008b7d008d7ff43b7d087303ff5520897d00c747fc020000008947048b342489378b5c2404893bb80100000083c40cc383c800|@5204,63|54,1,@5202 97,0,0 5202:C2,112|3b650c7303ff552483f8017506b801000000c38b385257ff70048b5afc8b070bc0e8c6a8f9ff83f801740c8b04248b54240883c40cebc98b04248b54240883c800e8baffffff8b75008d76f43b75087303ff5520897500c746fc020000008946048b5c2404891e89f083c40cc383c800|@5203,63|14,0,0 34,1,@1946 5203:S31|5052494e545f5441424c4528292e616464507028322966696c746572283129 5204:S22|5052494e545f5441424c4528292e6164645070283229 5205:S34|56414c55455f4f505328292e636f646556616c283529696e7374616c6c5070283129 5206:S22|56414c55455f4f505328292e636f646556616c283529 5207:O2|@5208,@7394 5208:C2,36|8b388b72043bfe750a8b4008c3b801000000c3b8503d754183c800ff552cb80100000090|@593,53|14,0,0 20,0,@597 31,0,0 5209:O2|@5210,@7394 5210:C2,28|8b388b72043bfe750cb803000000c3b801000000c3b801000000c390|@593,53|10,0,1 16,0,0 22,0,0 5211:C2,1972|3b650c7303ff55248b780483ff0175705053ff742414ff742414ff7424148b5c24248b520483c800ff1289c68b44240490e8724bf9ff8b5d008d5bf43b5d087303ff5520895d00c743fc02000000894304c703fbffffff8b55008d52f43b55087303ff5520895500c742fc02000000c74204010000008b0c24890a8b4500eb05e9c70000008d40f43b45087303ff5520894500c740fc0200000089500489188b7d008d7ff43b7d087303ff5520897d00c747fc0200000089470489378b75008d76f43b75087303ff5520897500c746fc02000000897e04c706150000005683ff017507bb03000000eb208b178b0a83f9fb75128b7f043b650c7303ff5524ebdebb01000000bb0100000083fb0174348b042483c800e8aa2efbff89c78b45008d40f43b45087303ff5520894500c740fc02000000897804c700fbffffff83c40cc210008b042483c40cc21000f7c701000000757053ff742410ff742410ff7424108b5c24208b5204ff128b1883fb0b751189c3b80300000090e80629fbff89c6eb4083fbfb751389c3b80300000083c800e8ee28fbff89c6eb288b75008d76f03b75087303ff5520897500c746fc03000000c7460803000000894604c7060d000000eb05e9550000008b55008d52f43b55087303ff5520895500c742fc02000000c74204010000008b0c24890a8b45008d40ec3b45087303ff5520894500c740fc04000000c7400c01000000897008895004c7000900000083c404c2100089d689c18b4108e86632faff83f80174728b410883c800e89a32faff83f8ff7567538b5c24148b44241090e8820500008b7d008d7ff43b7d087303ff5520897d00c747fc02000000c74704010000008b3424893789c38b45008d40ec3b45087303ff5520894500c740fc04000000c7400c03000000895808897804c70009000000eb0ae99b040000e90600000083c404c2100089c789f8e89a3a000083f8017471538b5c24148b44241090e8020500008b75008d76f43b75087303ff5520897500c746fc02000000c74604010000008b1c24891e8b55008d52ec3b55087303ff5520895500c742fc04000000c7420c03000000894208897204c702090000008b4d008d49f43b4d087303ff5520894d00eb05e946000000c741fc02000000c741040100000089118b45008d40ec3b45087303ff5520894500c740fc04000000c7400c03000000bf48777841897808894804c7000900000083c404c2100083ff0975735050536a01ff742418ff7424188d742410568b5c24288b0190e8f63900008b5d008d5bf43b5d087303ff5520895d00c743fc02000000c74304010000008b142489138b45008d40ec3b45087303ff5520894500c740fc04000000c7400c030000008b4c2404894808895804c70009000000eb05e90600000083c40cc2100089f890e84e46000083f801745c8b44240c0bc0e8561ef9ff83f80174708b44240c0bc0e8761ef9ff8b0889c883c800e83a1ef9ff83f801745989c8e85e1ef9ff53ff70048b388b1f83fb0775218b5f088b4704e89210f9ff89c73b650c7303ff5524ebe2be01000000e96602000089fe89f090e8fa10f9ff83f801745b89f189c80bc0e81a11f9ff8b7804eb0ae9f9000000e9ea000000f7c70100000075698b7704f7c60100000075638b5e0483fb0175608b178b4a048b3983ff0775248b59088b410483c800e81e10f9ff89c13b650c7303ff5524ebdfe994000000b80100000089c8508b7424048b1683fa07752c8b5e088b460490e8ee0ff9ff89c63b650c7303ff5524ebe1e954000000e93f000000e929000000bb0100000089f38b75008d76f43b75087303ff5520897500c746fc02000000895e048b0c24890eeb5389c88d54240890e84e45000089c650eb4289c88d542408e83e45000089c650eb3289c88d542408e82e45000089c650eb2289f08d542408e81e45000089c650eb12beacfb7d41535050eb08beacfb7d415350508b5d008d5bf03b5d087303ff5520895d00c743fc03000000bab8fb7d4189138b0e894b088b4604894304515053ff7504bf7ab67d41576a018965048b44242090e80ecaffff8b75008d76ec3b75087303ff5520897500c746fc04000000bbd0ff7d41891e8b54242089560c894e088b4c2410894e048b45008d40f43b45087303ff5520894500c740fc02000000897004c700fbffffffff7424088f450483c424c210000bc08b3883ff03751bb870ae744190ff552cb801000000eb0bb80100000083c418c210008b75008d76f43b75087303ff5520897500c746fc020000008b1c24895e04c706fbffffff8b55008d52f43b55087303ff5520895500c742fc02000000c74204010000008b4c2414890a8b45008d40ec3b45087303ff5520894500c740fc04000000c7400c01000000897008895004c7000900000083c418c2100053ff742410ff742410ff7424108b5c242089c88b5604ff128b75008d76f43b75087303ff5520897500c746fc02000000c74604010000008b1c24891e89c28b45008d40ec3b45087303ff5520894500c740fc04000000c7400c01000000895008897004c7000900000083c404c2100053ff742410ff742410ff7424108b5c242089c88b560490ff128b7d008d7ff43b7d087303ff5520897d00c747fc02000000c74704010000008b3424893789c38b45008d40ec3b45087303ff5520894500c740fc04000000c7400c01000000895808897804c7000900000083c404c2100083c800|@5359,63|50,1,@1690 83,0,-3 114,0,0 217,0,10 228,0,1 257,0,0 262,0,0 278,1,@2837 313,0,-3 372,0,1 378,1,@2830 394,0,1 402,1,@2830 437,0,1 446,0,6 484,0,0 520,0,0 532,0,4 550,1,@2246 566,1,@2248 586,1,@5212 617,0,0 655,0,1 667,0,4 694,1,@5317 714,1,@5212 745,0,0 781,0,1 793,0,4 831,0,0 864,0,1 869,0,@2551 881,0,4 922,1,@5319 953,0,0 989,0,1 1005,0,4 1026,1,@5341 1042,1,@1644 1058,1,@1645 1070,1,@1644 1082,1,@1645 1106,1,@1596 1123,0,0 1138,1,@1600 1154,1,@1601 1222,1,@1596 1244,0,0 1270,1,@1596 1302,0,0 1350,1,@5343 1366,1,@5343 1382,1,@5343 1398,1,@5343 1408,0,@5345 1418,0,@5345 1450,0,@5346 1474,0,$5211+1590 1490,1,@5098 1519,0,@5358 1571,0,-3 1598,0,@54 1607,0,0 1614,0,0 1656,0,-3 1687,0,0 1724,0,0 1736,0,4 1797,0,0 1835,0,0 1847,0,4 1909,0,0 1947,0,0 1959,0,4 5212:C2,680|3b650c7303ff5524f6c3017503ff553889df83c70270f68b5d008d5bf83b5d087303ff5520895d00c743fc01000040c703010000008b55008d52f83b55087303ff5520895500c742fc01000040c702010000008b4d008d49f83b4d087303ff5520894d00c741fc01000040c701010000008b75008d76f43b75087303ff5520897500c746fc02000000505753525156b8d8ba7d418906895e048b45008d40e43b45087303ff5520894500c740fc06000000bfd0bf7d4189388958148950108b5c241089580c894808897004508b44241890e83a99faff68c0ec7d41bb010000008b542404ff128b1083fa01752f8b48048b45008d40f43b45087303ff5520894500c740fc02000000c74004010000008b7c2414893889ca83c41cff228b48048b45008d40f43b45087303ff5520894500c740fc02000000c74004010000008b7c2414893889ca0bc0ff128b74240c8b1ef7c301000000752f8b4b0483f90175048b13eb448b55008d52f43b55087303ff5520895500c742fc02000000895a04c702efffffffeb218b55008d52f43b55087303ff5520895500c742fc02000000895a04c702efffffff8b4d008d49ec3b4d087303ff5520894d00c741fc04000000c7410c03000000894108b824ed7d41894104c701090000008b7d008d7ff43b7d087303ff5520897d00c747fc02000000c7470401000000890f8b75008d76f43b75087303ff5520897500c746fc02000000897e0489168b5d008d5bf43b5d087303ff5520895d00c743fc02000000897304c703130000008b55008d52dc3b55087303ff5520895500c742fc08000000c7421c01000000c7421801000000c7421401000000c7421003000000c7420c010000008b4c2414894a08b85ced7d41894204891a8b45008d40f43b45087303ff5520894500c740fc02000000895004c700f3ffffff83c41cc3|@5316,63|49,0,0 79,0,0 109,0,0 144,0,@5213 178,0,@5225 210,1,@2454 215,0,@5308 220,0,0 267,0,0 314,0,0 385,0,-9 420,0,-9 451,0,1 459,0,@5311 468,0,4 499,0,0 563,0,9 594,0,0 601,0,0 608,0,0 615,0,1 622,0,0 634,0,@5315 672,0,-7 5213:C2,200|5050f7c301000000753c8b55008d52ec3b55087303ff5520895500c742fc04000000b9bcbb7d41890a89420c8b038942088b4b04894a0489e7c7070100000089e7895704eb578b7d008d7ff03b7d087303ff5520897d00c747fc03000000bb4cbc7d41891f8b4a04894f088947048b45008d40f43b45087303ff5520894500c740fc02000000bb20bf7d41891889780489e7c707ffffffff89e38943048b45008d40f43b45087303ff5520894500c740fc020000008b142489108b4c240489480483c408c383c800|@5224,47|35,0,@5214 59,0,0 95,0,@5216 135,0,@5222 148,0,-1 5214:C2,56|3b650c7303ff552489c78b45008d40f03b45087303ff5520894500c740fc030000008978088b72048970048b5a0889188b520cff2283c800|@5215,63| 5215:S50|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e28322972657475726e436f6465283229283129 5216:C2,300|3b650c7303ff55248b5a088b0bf6c1017503ff553889cf83c70270f6893b8b0ba8017503ff553889c783c70270f68b75008d76f43b75087303ff5520897500c746fc02000000b894bd7d418906897e048b45008d40f43b45087303ff5520894500c740fc02000000bb54be7d4189188978048b5d008d5bf43b5d087303ff5520895d00c743fc02000000894b04893b89c18b45008d40f03b45087303ff5520894500c740fc030000008958088948048930578b520483c800ff128b7d008d7fdc3b7d087303ff5520897d00c747fc08000000c7471c01000000c7471801000000c74714ffffffffc7471005000000c7470c010000008b3424897708bbc4be7d41895f0489078b45008d40f43b45087303ff5520894500c740fc02000000897804c700f3ffffff83c404c30bc0|@5221,63|71,0,@5217 105,0,@5219 213,0,0 220,0,0 227,0,-1 234,0,2 241,0,0 252,0,@5220 290,0,-7 5217:C2,84|8b388b720489fb23def6c3017503ff553889fb2bde8d5b0170f48b45008d40e83b45087303ff5520894500c740fc05000000c740100100000089580cc7400803000000c74004ffffffffc700f7ffffffc383c800|@5218,61|53,0,0 63,0,1 70,0,-1 76,0,-5 5218:S69|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e28322972657475726e436f646528322977726170706564436f6465283229636f64652d283129 5219:C2,84|8b388b720489fb23def6c3017503ff553889fb2bde8d5b0170f48b45008d40e83b45087303ff5520894500c740fc05000000c740100100000089580cc7400803000000c74004fdffffffc700f7ffffffc383c800|@5218,61|53,0,0 63,0,1 70,0,-2 76,0,-5 5220:S10|65717b2e2e2e7d283229 5221:S61|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e28322972657475726e436f646528322977726170706564436f6465283229 5222:C2,20|3b650c7303ff55248b58048b008b5204ff220bc0|@5223,63| 5223:S61|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e28322972657475726e436f646528322977726170706564436f6465283129 5224:S47|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e28322972657475726e436f6465283229 5225:C2,672|3b650c7303ff552452538b3883ff0775618b75008d76f43b75087303ff5520897500c746fc020000008b4808894e048b5004891689cb8b4004e81e05f9ff8b0883f9ff751989f08b54240c90ff128b1c248b7c240883c41057e95e0200008b7c240c897c240c8b1c248b54240483c408eb8e89c689f083c800e8360bf9ff83f801747189f0e85a0bf9ff8b088b40080bc0e8960bf9ff89c789f883c800e84e06f8ff51575068f8c57d4189fbb87b000000baa856774183c800e82696f9ff8b3083fefd745d8b5d008d5bf43b5d087303ff5520895d00c743fc02000000ba64c67d4189138943048b4d008d49f43b4d08730aeb05e92a010000ff5520894d00c741fc02000000895904c701010000008b5c240c89c88b7c241483c41c57e99a010000b8d8b775410bc0e8c205f8ff89c38b04240bc0e87696f9ff83f801741a8b5c24108b53048b5c240cb8bcc67d418b4c241483c41c51ff228b442404e8eea5f9ff83f801755b8b4424040bc0e84a8ff9ff8b1883fbff744e8b442404e83a8ff9ff89c18b44240490e87a91f9ff518b5c240c0bc0e89698f9ff6a0389c38b44240483c800e86e99f9ff8b7c241c897c241c8b5c24108b54241483c418e93efeffffe9160000008b5c240cb8e8c67d418b54241483c41c52e9df0000008b188b53088b0a83f90175168b5c240cb8e8c67d418b7c241483c41c57e9bd000000508b5c240c8b4424088d54241890e83e0800008b5c240c8b7c241483c41c57e99900000089f0e8ba03f9ff83f801745d89f0e8de03f9ff8b5804f7c30100000075378b530483fa01751c8b0b8b7c240c897c240c8b1c248b41048b54240483c408e99bfdffff8b40048d54240890e8aa25000083c408c204008b40048d5424080bc0e89625000083c408c20400b8e8c67d418b54240883c41052e91e0000000bc0|@5307,63|58,1,@1596 90,1,@5226 122,1,@1620 134,1,@1621 146,1,@1622 158,1,@1109 166,0,@5231 173,0,61 178,0,@1943 186,1,@1944 222,0,@5234 267,0,0 286,1,@5226 291,0,@1062 298,1,@1109 310,1,@1946 331,0,@5236 350,1,@1994 366,1,@1923 382,1,@1923 394,1,@1932 406,1,@1956 422,1,@1958 460,0,@5238 473,1,@5226 494,0,@5238 507,1,@5226 526,1,@5246 543,1,@5226 550,1,@1600 562,1,@1601 622,1,@5296 642,1,@5296 653,0,@5238 666,1,@5226 5226:C2,180|83fb017501c350508b3883ffff753f8b75008d76ec3b75087303ff5520897500c746fc04000000ba5cc37d4189168b500489560c8b0b894e088b4b04894e0489e3c7030100000089e1897104eb3d8b75008d76ec3b75087303ff5520897500c746fc04000000ba5cc47d4189168b4804894e0c8b138956088b530489560489e3c7030100000089e28972048b45008d40f43b45087303ff5520894500c740fc020000008b0c2489088b7c240489780483c408c390|@5230,63|40,0,@5227 67,0,0 103,0,@5229 130,0,0 5227:C2,168|3b650c7303ff552452508b520c83c800ff128b7c2404508b4424048b57080bc0ff128b742408508b4424088b56040bc0ff128b5d008d5bf43b5d087303ff5520895d00c743fc02000000c743040100000089038b55008d52f43b55087303ff5520895500c742fc02000000895a048b0c24890a8b45008d40ec3b45087303ff5520894500c740fc04000000c7400c030000008b7c2404897808895004c7000900000083c410c30bc0|@5228,63|77,0,0 142,0,1 158,0,4 5228:S49|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e28322972657475726e46756e283229283129 5229:C2,328|3b650c7303ff552452508b520c83c800ff128b7c2404508b4424048b57080bc0ff128b742408508b4424088b56040bc0ff128b5d008d5bf43b5d087303ff5520895d00c743fc02000000c743040100000089038b55008d52f43b55087303ff5520895500c742fc02000000895a048b0c24890a8b45008d40f43b45087303ff5520894500c740fc02000000895004c700150000005083fa017507bf03000000eb208b328b1e83fbfb75128b52043b650c7303ff5524ebdebf01000000bf0100000083ff01742b8b0424e8de1afbff8b55008d52f43b55087303ff5520895500c742fc02000000894204c702fbffffffeb038b14248b4d008d49f43b4d087303ff5520894d00c741fc02000000c741040100000089118b45008d40ec3b45087303ff5520894500c740fc04000000c7400c030000008b7c2408897808894804c7000900000083c414c3|@5228,63|77,0,0 144,0,10 155,0,1 184,0,0 189,0,0 202,1,@2837 235,0,-3 271,0,0 304,0,1 320,0,4 5230:S46|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e28322972657475726e46756e283229 5231:O1|@5232 5232:C2,8|b8f8257541c30bc0|@5233,1|1,0,@408 5233:S54|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b6545712833297370656369616c2d283129 5234:C2,4|8b4204c3|@5235,5| 5235:S46|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329283129 5236:O1|@5237 5237:C2,8|b8c42b7541c30bc0|@5235,1|1,0,@449 5238:O2|0,@5239 5239:O1|@5240 5240:C2,8|b820c77d41c30bc0|@5245,1|1,0,@5241 5241:O2|-3,@5242 5242:O1|@5243 5243:C2,20|3b650c7303ff55248b58048b00e91e0000000bc0|@4056,63|14,1,@5244 5244:C2,616|3b650c7303ff55243bc37506b803000000c3f7c0010000007406b801000000c3f7c3010000007406b801000000c38b78fc81e7ffffff008d7c3f018b73fc81e6ffffff008d7436013bfe7406b801000000c30fb670ff8d7436010fb653ff8d54120189f10bca89ce81e68100000083fe017406b801000000c389ca83e20383fa01745ef7c7010000007503ff553883ff017d1abe2ccb744189f123cff6c1017503ff55388d4eff03cf70f6eb0289f9bf0900000089ce23f7f7c6010000007503ff5538505289cad1fa8d47fff7ea8d70015a5870ebf7c601000000740989f2eb13e96b000000f646ff108b167402f7da8d541201505352b9010000008b04243bc87509b80300000083c40cc38b7c240889ced1ee0fb634378d7436018b5c240489cad1ea0fb614138d5412013bf275188d410289c13b650c7303ff5524ebbdb80100000083c40cc3b80100000083c40cc383ff03750d8b088b0389c389c8e99dfeffff83ff05755c8b088b78048b338b5304f7c10100000074133bce750989d389f8e979feffffb801000000c3f7c6010000007406b801000000c3f7c70100000074133bfa750989f389c8e950feffffb801000000c3f7c201000000740bb801000000c3e92a000000575289f389c80bc0e82afeffff83f801740f8b1c248b44240483c408e916feffffb80100000083c408c38d4ffe505383f9017507b803000000eb418b7c24048b744ffe8b1c248b544bfe5189d389f090e8e2fdffff83f801741a8b0c248d41fe89c183c4043b650c7303ff5524ebc0b801000000b80100000083c40483f80174158b4c24048b018b3c248b3789f383c408e9a1fdffffb80100000083c408c3|@4055,63|13,0,1 27,0,0 41,0,0 77,0,0 116,0,0 148,0,@176 176,0,4 248,0,0 260,0,1 320,0,0 329,0,0 392,0,0 406,0,0 433,0,0 447,0,0 491,0,0 510,0,1 569,0,0 574,0,0 608,0,0 5245:S45|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e28322964656661756c742d283129 5246:C2,580|3b650c7303ff552489d789c689f083c800e88afcf7ff89c189f083c800e80a02f9ff8b57fc5756535150ff72088b3c248b1783fa017507b901000000eb518b02ff30ff72048b5c24108b400490e80e8df9ff83f80174208b4d008d49f83b4d087303ff5520894d00c741fc010000008b7c24048939eb158b142483c4083b650c7303ff5524ebabb90100000083c4088b7424148b5d008d5bec3b5d087303ff5520895d00c743fc04000000ba80cc7d4189138b4e04894b0c8b46fc8943088b7c2404897b048b55008d52e83b55087303ff5520895500c742fc05000000bfa4ce7d41893a8b7c2410897a108b7c240c897a0c895a088b780c897a048b7424148b4efc8b41088b38535283ff017507be01000000eb528b1fff33ff77048b53048b5c241889d0e8368cf9ff83f80174208b75008d76f83b75087303ff5520897500c746fc010000008b4c2404890eeb158b3c2483c4083b650c7303ff5524ebaabe0100000083c4085050f7c60100000075418b45008d40ec3b45087303ff5520894500c740fc04000000bff4d37d4189388b5c240889580c8b168950088b4c241c89480489e7c707ffffffff89e3894304eb658b5c242c8b4424208b54242483c800e8aa0800008b7c241c83ff01750f89e6c706ffffffff89e3894304eb398b75008d76ec3b75087303ff5520897500c746fc04000000bb5ce67d41891e89460c897e088b54240c89560489e1c701ffffffff89e08970048b45008d40f43b45087303ff5520894500c740fc020000008b3c2489388b74240489700483c428c2040083c800|@5295,63|18,1,@1109 30,1,@1624 56,0,0 78,1,@1946 136,0,0 172,0,@5247 222,0,@5256 271,0,0 294,1,@1946 352,0,0 394,0,@5260 423,0,-1 450,1,@5262 467,0,-1 503,0,@5292 526,0,-1 5247:C2,332|3b650c7303ff55245253ff33ff7304ff720cbb010000008b52080bc0ff128b3883ff0175738b742404f7c6010000007503ff553889f383c30270f68b50048b45008d40f43b45087303ff5520894500c740fc020000008b0c2489480489180bc0ff128b7d008d7fec3b7d087303ff5520897d00c747fc04000000c7470c03000000894708bee8cd7d41897704c707090000008b5c2404eb05e9a0000000f6c3017503ff553889da83c20270f68b4c240c57528b5904b830ce7d4183c800e87645f7ffbb3cce7d410bc0e86a45f7ff8b7d008d7fdc3b7d087303ff5520897d00c747fc08000000c7471c01000000c7471801000000c7471401000000c7471005000000c7470c010000008b34248977088947048b5c2404891f8b45008d40f43b45087303ff5520894500c740fc02000000897804c700f3ffffff83c418c38b70048b44240889f283c410ff2290|@5255,63|19,0,0 125,0,1 133,0,@5248 142,0,4 182,0,@5253 190,1,@323 195,0,@5254 202,1,@323 233,0,0 240,0,0 247,0,0 254,0,2 261,0,0 309,0,-7 5248:O2|@5249,0 5249:O2|10,@5250 5250:O2|@450,@5251 5251:O2|@5252,0 5252:O5|-5,-2,1,0,0 5253:S3|65712d 5254:S5|282e2e2e29 5255:S78|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329657175616c697479466f72436f6e737472756374696f6e283329676574417267283229 5256:C2,1000|3b650c7303ff55248b7d008d7ff43b7d087303ff5520897d00c747fc02000000895f0489078b74240483fe01756a50505050508b7c241c530bdff6c3015b7503ff55383bfb75568b5a0489c123cbf6c1017503ff553889c12bcb8d490170f4f6c1017503ff553889c883e80270f689e1c701f7ffffff89e1c741040100000089e1c741080100000089e189410c89e0c7401001000000eb41e97b0000008b5a0489c123cbf6c1017503ff553889c12bcb8d490170f489e0c700f7ffffff89e089780489e0c740080300000089e089480c89e1c74110010000008b45008d40e83b45087303ff5520894500c740fc050000008b0c2489088b7424048970048b7424088970088b74240c89700c8b4c241089481083c414c208008b4c2408510bcbf6c101597503ff55383bcb74708b5a0489c623f3f7c6010000007503ff553889c62bf38d760170f48b45008d40e83b45087303ff5520894500c740fc05000000c740100100000089700cc7400803000000894804c700f7ffffff5752508b420c8d54240c0bc0e87a02000089c78b45008d40ec3b45087303ff5520eb05e926000000894500c740fc04000000c7400c030000008b3424897008897804c7000900000083c40cc2080089d3508b4310e86282f9ff53578b530cbb03000000f7c2010000007571f7c001000000756e83fb01746e8b328b1e83fb07756a8b4d008d49f43b4d087303ff5520894d00c741fc020000008b7e088979048b5e0489198b188b3b83ff07754c8b308b5d008d5bf43b5d087303ff5520895d00c743fc020000008b7e08897b048b7e04893bff7204ff700489c8eb14e95f000000e956000000e928000000e916000000e876e9f8ff89c7eb25bf01000000ff7204ff7004eb18bf01000000ff7204ff7004eb0bbf01000000ff7204ff700489fb8b04248b54240483c4083b650c7303ff5524e92cffffffb90100000089d9eb0289d983f901746d8b5424048b4c24088b420489cf23f8f7c7010000007503ff553889cf2bf88d7f0170f4f7c7010000007503ff553889fe83ee0470f68b45008d40e83b45087303ff5520894500c740fc05000000c740100100000089700cc7400801000000c7400401000000c700f7ffffffeb05e90600000083c40cc208008b5424048b4c24088b420489cf23f8f7c7010000007503ff553889cf2bf88d7f0170f4f7c7010000007503ff553889fe83ee0270f68b5d008d5be83b5d087303ff5520895d00c743fc05000000c743100100000089730cc7430801000000c7430401000000c703f7ffffff538b420c8d5424100bc0e8ca00000089c28b45008d40ec3b45087303ff5520894500c740fc04000000c7400c030000008b0c24894808895004c7000900000083c410c20800|@5259,63|114,0,-5 123,0,0 132,0,0 146,0,0 185,0,-5 199,0,1 213,0,0 354,0,0 364,0,1 373,0,-5 390,1,@5257 430,0,1 445,0,4 462,1,@1932 472,0,1 618,1,@1584 627,0,0 640,0,0 653,0,0 689,0,0 784,0,0 794,0,0 801,0,0 807,0,-5 904,0,0 914,0,0 921,0,0 927,0,-5 942,1,@5258 975,0,1 990,0,4 5257:C2,92|3b650c7303ff552483f8017506b801000000c38b7af852ff70048b5afc8b008b57080bc0ff12508b4424048b5424080bc0e8caffffff8b75008d76f43b75087303ff5520897500c746fc020000008946048b1c24891e89f083c40cc3|@413,63|14,0,0 5258:C2,92|3b650c7303ff552483f8017506b801000000c38b7af852ff70048b5af48b008b57080bc0ff12508b4424048b5424080bc0e8caffffff8b75008d76f43b75087303ff5520897500c746fc020000008946048b1c24891e89f083c40cc3|@413,63|14,0,0 5259:S83|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329657175616c697479466f72436f6e737472756374696f6e2833297265637572736976654571283429 5260:C2,32|3b650c7303ff55248b7a088b3424893c24ff72048b58048b008b520c56ff2290|@5261,63| 5261:S86|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329657175616c697479466f72436f6e737472756374696f6e2833297265637572736976654571283129283129 5262:C2,1016|3b650c7303ff552489d789c689f083c800e81af2f7ff89c189f083c800e89af7f8ff8b57fc5756535150ff72148b3c248b17f6c2017503ff553889d683c60270f689378b5424148b7afc8b77148b1e8b4c24148b41fc8b55008d52f43b55087303ff5520895500c742fc020000008b7c2408897a04891a8b7424148b7efc8b4f088b318b4d008d49f43b4d087303ff5520894d00c741fc0200000089710489118b7808890f8b442410e89a7df9ff5350be0100000083f801750489f3eb26f7c6010000007503ff553889f283c20270f68b400489d63b650c7303ff5524ebd6bb010000008b54241c8b4afc8b410ca8017503ff553889c783c70270f683fb01750489feeb12f7c7010000007503ff553889fe83c60270f68b4d008d49e83b4d087303ff5520894d00c741fc05000000b8a4d87d4189018979108b420489410c8b142489510889590451568b44241cf7c00100000075748b500483fa01752e8b74241c53578b0683c800e8be05000083f8017407b8c42b7541eb608b4424248d54243083c800e87e060000eb7053578b4424248d54243083c800e86a06000089c18b45008d40ec3b45087303ff5520894500c740fc0400000089480cbfc42b7541897808bec0e47d41eb05e910000000897004c70005000000eb4ae94500000053578d542430e81e06000089c78b45008d40ec3b45087303ff5520eb05e923000000894500c740fc0400000089780cbec42b7541897008bbc0e47d41895804c70005000000508b5c2420b830ce7d4183c800e8f23bf7ffbbe0e47d410bc0e8e63bf7ff8b55008d52dc3b55087303ff5520895500c742fc08000000c7421c01000000c7421801000000c74214ffffffffc7421005000000c7420c010000008b4c240c894a088942048b042489028b7d008d7ff43b7d087303ff5520897d00c747fc02000000895704c707f3ffffff8b5c240883fb01750489feeb73578b5c2424b830ce7d4190e85e3bf7ffbbece47d410bc0e8523bf7ff8b55008d52dc3b55087303ff5520895500c742fc08000000c7421c01000000c7421801000000c74214ffffffff8b4c240c894a10c7420c010000008b7c2408897a088942048b342489328b75008d76f43b7508730aeb05e919000000ff5520897500c746fc02000000895604c706f3ffffff83c4048b5c24308b53fc8b4a108b018b7d008d7fec3b7d087303ff5520897d00c747fc04000000c7470c010000008977088b742418897704c707f9ffffff8b75008d76f43b75087303ff5520897500c746fc02000000c7460401000000893e83fe01750489c7eb0f568d542438e8ae0c000089c783c40489398b7424308b5efc8b45008d40f03b45087303ff5520894500c740fc03000000ba58e57d4189108b4c24188948088b7b0c89780483c434c3|@5291,63|18,1,@1109 30,1,@1624 170,1,@1932 177,0,0 224,0,0 304,0,@5263 362,1,@5271 372,0,@449 390,1,@5273 410,1,@5273 444,0,@449 452,0,@5284 468,0,2 486,1,@5273 527,0,@449 535,0,@5284 544,0,2 554,0,@5253 562,1,@323 567,0,@5286 574,1,@323 605,0,0 612,0,0 619,0,-1 626,0,2 633,0,0 681,0,-7 704,0,@5253 710,1,@323 715,0,@5287 722,1,@323 753,0,0 760,0,0 767,0,-1 781,0,0 836,0,-7 882,0,0 898,0,-4 929,0,0 950,1,@5288 993,0,@5289 5263:C2,64|3b650c7303ff552450528b7a04be0100000089fb23def6c3017503ff553889f32bdf8d5b0170f489d98b5a0889c88d54240883c800e82200000083c408c30bc0|@5270,63|14,0,0 54,1,@5264 5264:C2,236|3b650c7303ff552483fb01750b8b7af88b42fc8b570cff228b3b8b3783fe0775728b4d008d49f43b4d087303ff5520894d00c741fc020000008b77088971048b770489315250ff730489cb8b42fc83c800e832e1f8ff83f801745f8b5c24088b53f88b4d008d49f03b4d087303ff5520894d00c741fc03000000b808da7d4189018b7c24048979088b72108971048b4500eb05e9460000008d40f43b45087303ff5520894500c740fc02000000894804c700ffffffff83c40cc38b5c2404f6c3017503ff553889da83c20270f68b1c2489d08b54240883c40ce922ffffffb8d4da7d41ff552cb80100000090|@5269,63|82,1,@1584 123,0,@5265 178,0,-1 223,0,@5267 231,0,0 5265:C2,80|8b388b720489fb23def6c3017503ff553889fb2bde8d5b0170f48b45008d40e83b45087303ff5520894500c740fc05000000c740100100000089580cc74008030000008b7a08897804c700f7ffffffc3|@5266,61|53,0,0 63,0,1 75,0,-5 5266:S88|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329657175616c697479466f7244617461747970652832296e6577547646756e28312966696e645476283229283129 5267:O3|@7320,@224,@5268 5268:S27|66696e6454763a206e6f7420612074797065207661726961626c65 5269:S85|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329657175616c697479466f7244617461747970652832296e6577547646756e28312966696e645476283229 5270:S76|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329657175616c697479466f7244617461747970652832296e6577547646756e283129 5271:C2,108|3b650c7303ff55248b7804f7c70100000075538b3783fe0375468b580889d80bc0e88a04faff83f801742f89d8e8be04faff83c800e832a4fffff7c001000000740db8c0207541ff552cba0100000089c28b4204ff25609e0408b801000000c3b801000000c3b801000000c3|@5272,61|34,1,@2227 46,1,@2229 54,1,@5098 67,0,@372 75,0,0 86,0,I105 91,0,0 97,0,0 103,0,0 5272:S74|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329657175616c697479466f7244617461747970652832296973456e756d283129 5273:C2,480|3b650c7303ff552483f8017506b89c317541c38b3889d1ff7704ff7708ff770cff70048b00e8fafeffff83f801740a8b042489ca83c410ebc7518b59d88b44240ce8da96ffff508b7c2414f7c70100000075728b3783fe0375708b1083fa0b751189c3b80100000090e8c2fdfaff89c3eb4083fafb751389c3b80100000083c800e8aafdfaff89c3eb288b5d008d5bf03b5d087303ff5520895d00c743fc03000000c7430801000000894304c7030d0000008b4d008d49ec3b4d087303ff5520894d00eb0ae904010000e9ef000000c741fc04000000c7410c03000000895908b8b82b7541894104c701090000008b3c248b1f83fb0b75125189fbb80100000090e82afdfaff89c6eb4183fbfb75135189fbb8010000000bc0e812fdfaff89c6eb298b75008d76f03b75087303ff5520897500c746fc03000000c7460801000000897e04c7060d000000518b55008d52ec3b55087303ff5520895500c742fc04000000c7420c03000000897208b90cce7d41894a04c70209000000528b4424108b54240c90e876feffff89c78b45008d40ec3b45087303ff5520894500c740fc0400000089780c8b34248970088b5c2404895804c7000500000083c420c38d54241883c800e83200000083c418c38d54241883c800e82200000083c418c30bc0|@5283,63|14,0,@487 38,1,@5271 66,1,@5035 100,0,0 106,1,@2830 122,0,0 130,1,@2830 165,0,0 174,0,6 217,0,1 225,0,@448 234,0,4 252,0,0 258,1,@2830 275,0,0 282,1,@2830 317,0,0 326,0,6 358,0,1 366,0,@5251 375,0,4 438,0,2 454,1,@5274 470,1,@5274 5274:C2,684|3b650c7303ff55248b7aec528b5fe08b42f483c800e896f2faff8b34248b5eec8b55008d52f03b55087303ff5520895500c742fc03000000b95ce17d41890a8b7ef8897a088b4bd8894a048b5d008d5bf43b5d087303ff5520895d00c743fc02000000b9f8e27d41890b8953048b4d008d49f43b4d087303ff5520894d00c741fc02000000bf9ce37d4189398951048b34248b56ec8b7d008d7ff43b7d087303ff5520897d00c747fc020000008b72e48977048b72d889378b14248b72ec8b55008d52f43b55087303ff5520895500c742fc02000000894a04891a8b0c248b59ec8b4bfc57ff76dc89d38b51fc83c800ff128b3083fe0175118b58048b042489da83c800ff1289c7eb0db8d8e37d41ff552cbf010000008b5424048b4ae88b3183fe0b750f5789cbb801000000e802fbfaffeb3d83fefb750f5789cbb801000000e8eefafaffeb298b45008d40f03b45087303ff5520894500c740fc03000000c7400801000000894804c7000d000000578b5d008d5bec3b5d087303ff5520895d00c743fc04000000c7430c03000000894308bab82b7541895304c703090000008b4c24088b41e88b3083fe0b75135389c3b8010000000bc0e876fafaff89c7eb4183fefb75135389c3b8010000000bc0e85efafaff89c7eb298b7d008d7ff03b7d087303ff5520897d00c747fc03000000c7470801000000894704c7070d000000538b5d008d5bec3b5d087303ff5520895d00c743fc04000000c7430c03000000897b08ba0cce7d41895304c703090000008b4d008d49ec3b4d087303ff5520894d00c741fc04000000b89c31754189410c8b7c2404897908895904c701050000008b74240c518b46f08b56ec83c800e88efbffff89c38b45008d40ec3b45087303ff5520894500c740fc0400000089580c8b14248950088b4c2404894804c7000500000083c414c30bc0|@5282,63|22,1,@2823 57,0,@5275 100,0,@5277 134,0,@5279 267,0,@5280 275,0,0 297,0,0 302,1,@2830 317,0,0 322,1,@2830 355,0,0 364,0,6 396,0,1 404,0,@448 413,0,4 435,0,0 442,1,@2830 459,0,0 466,1,@2830 501,0,0 510,0,6 542,0,1 550,0,@5251 559,0,4 588,0,@487 607,0,2 626,1,@5273 674,0,2 5275:C2,280|3b650c7303ff5524525089c38b42080bc0e84692ffff8b3083fe0b751189c3b80500000090e842f9faff89c7eb4083fefb751389c3b80500000083c800e82af9faff89c7eb288b7d008d7ff03b7d087303ff5520897d00c747fc03000000c7470805000000894704c7070d0000008b5c24048b14248b4b0489d023c1a8017503ff553889d02bc18d400170f48b75008d76e83b75087303ff5520897500c746fc05000000c746100100000089460cc74608030000008b54240c895604c706f7ffffff8b45008d40f43b45087303ff5520894500c740fc02000000c7400401000000893089c68b45008d40ec3b45087303ff5520894500c740fc04000000c7400c03000000897808897004c7000900000083c408c204000bc0|@5276,63|18,1,@5035 32,0,2 38,1,@2830 54,0,2 62,1,@2830 97,0,2 106,0,6 167,0,0 177,0,1 190,0,-5 221,0,0 256,0,1 268,0,4 5276:S93|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329657175616c697479466f72446174617479706528322970726f63657373436f6e737472732831296465737472756374283329 5277:C2,32|3b650c7303ff55248b3c24c70424ffffffff8b58048b008b520457ff2283c800|@5278,63|14,0,-1 5278:S96|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329657175616c697479466f72446174617479706528322970726f63657373436f6e737472732831296465737472756374283129283129 5279:C2,32|3b650c7303ff55248b3c24c70424fdffffff8b58048b008b520457ff2283c800|@5278,63|14,0,-2 5280:O3|@7320,@224,@5281 5281:S21|6170706c7945713a2077726f6e6720726573756c74 5282:S84|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329657175616c697479466f72446174617479706528322970726f63657373436f6e737472732831292f32 5283:S82|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329657175616c697479466f72446174617479706528322970726f63657373436f6e73747273283129 5284:O4|4,@5250,@5285,1 5285:O2|-3,I251 5286:S3|283229 5287:S3|283129 5288:C2,68|3b650c7303ff552483f80175048b42c8c352ff308b40040bc0e8e2ffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0424890289d083c408c3|@1462,5| 5289:C2,80|8b388b720489fb23def6c3017503ff553889fb2bde8d5b0170f48b45008d40e83b45087303ff5520894500c740fc05000000c740100100000089580cc74008030000008b7a08897804c700f7ffffffc3|@5290,61|53,0,0 63,0,1 75,0,-5 5290:S68|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329657175616c697479466f724461746174797065283229283129 5291:S65|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329657175616c697479466f724461746174797065283229 5292:C2,92|3b650c7303ff552452508b520c83c800ff128b7c2404508b47088d54240c83c800e85200000089c68b45008d40ec3b45087303ff5520894500c740fc04000000c7400c030000008b1c24895808897004c7000900000083c40cc30bc0|@5294,63|34,1,@5293 67,0,1 82,0,4 5293:C2,92|3b650c7303ff552483f8017506b801000000c38b7afc52ff70048b5af88b008b57040bc0ff12508b4424048b5424080bc0e8caffffff8b75008d76f43b75087303ff5520897500c746fc020000008946048b1c24891e89f083c40cc3|@413,63|14,0,0 5294:S72|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329657175616c697479466f72436f6e737472756374696f6e283329283129 5295:S69|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329657175616c697479466f72436f6e737472756374696f6e283329 5296:C2,100|3b650c7303ff55248b7d008d7fec3b7d087303ff5520897d00c747fc04000000be6ce87d4189378b720489770c8b5afc895f088947048b45008d40f43b45087303ff5520894500c740fc02000000b9dceb7d4189088978048b7b048b5af889faff220bc0|@5306,63|33,0,@5297 79,0,@5304 5297:C2,36|3b650c7303ff5524525350bb010000008b42048d54240c0bc0e82200000083c40cc20400|@5303,63|12,0,0 26,1,@5298 5298:C2,296|3b650c7303ff552483f8017506b8c42b7541c38b388b75008d76f03b75087303ff5520897500c746fc03000000b9f0e97d41890e895e088b4af4894e048b4d008d49f03b4d087303ff5520894d00c741fc030000005253ff7704ff700456ff72f851bac8ea7d4189118959088b4424048941048b7c24188b57fc8b45008d40f43b45087303ff5520894500c740fc020000008948048930ff7704ff720c89c38b4424188b52080bc0ff128b3083fe0175118b58048b042489da83c800ff1289c7eb0db8d8e37d41ff552cbf010000008b542418f6c2017503ff553889d183c10270f65789cb8b4424148b542420e80effffff89c78b45008d40ec3b45087303ff5520894500c740fc04000000be9c31754189700c8978088b1c24895804c7000500000083c424c390|@5302,63|14,0,@449 46,0,@5299 99,0,@5301 195,0,@5280 203,0,0 269,0,@487 287,0,2 5299:C2,104|3b650c7303ff5524ff72088b52040bc0ff128b3883ff0b750d89c38b042483c404e9b2f0faff83fffb750d89c38b042483c404e9a0f0faff89c68b45008d40f03b45087303ff5520894500c740fc030000008b1c24895808897004c7000d00000083c404c383c800|@5300,63|34,1,@2830 52,1,@2830 93,0,6 5300:S73|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b65457128332965715475706c65283329636f6d62696e65456e7472696573283229283129 5301:C2,104|3b650c7303ff5524ff72088b52040bc0ff128b3883ff0b750d89c38b042483c404e9daeffaff83fffb750d89c38b042483c404e9c8effaff89c68b45008d40f03b45087303ff5520894500c740fc030000008b1c24895808897004c7000d00000083c404c383c800|@5300,63|34,1,@2830 52,1,@2830 93,0,6 5302:S70|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b65457128332965715475706c65283329636f6d62696e65456e7472696573283229 5303:S53|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b65457128332965715475706c65283329 5304:C2,28|3b650c7303ff55248b78088b3424893c248b58048b008b520456ff22|@5305,63| 5305:S53|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b65457128332965715475706c65283129 5306:S45|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b6545712833292f34 5307:S43|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329 5308:O1|@5309 5309:C2,8|b8e8c67d41c30bc0|@5310,1|1,0,@5238 5310:S48|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e283229726573756c74436f64652d283129 5311:O2|@5313,@5312 5312:O2|@5314,0 5313:O3|6,@450,0 5314:O3|6,@450,1 5315:S8|657175616c697479 5316:S34|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e283229 5317:C2,20|83f8fb7506b803000000c3b801000000c383c800|@5318,1|6,0,1 12,0,0 5318:S8|4e6f74457175616c 5319:C2,136|3b650c7303ff5524505389d890e83a64faff83c800e88a0000008b7d008d7fe83b7d087303ff5520897d00c747fc05000000be08f67d4189378b1c24895f108b54240489570c8b4c2414894f088b742410897704505789c389d0baa85677410bc0e87668f9ff89c38b04240bc0e802def8ff8b542410891a894204b80100000083c40cc210000bc0|@5340,63|14,1,@2454 22,1,@5320 51,0,@5328 91,0,@1943 98,1,@1944 110,1,@1624 124,0,0 5320:C2,1744|3b650c7303ff552489c689f090e822d7f7ff83f801746b89f0e846d7f7ff89c78b5f048b07e886d6f8ff89fe89c389d890e84edcf8ff83f801745c89d8e886dcf8ff5650f7c00100000075558b388b7004b8e433754183c800e8e6d7f7ff89c389f883c800e8dad7f7ff5689da89c389d0e88e68f9ff83f801740cba03000000eb25e9d30500008b042483c4043b650c7303ff5524ebade9b8050000ba01000000ba010000005083fa017474b8e4337541e81addf8ff505089c1b8e43375410bc0e87ed7f7ff83c800e8bed7f7ff83f801742e8b45008d40f83b45087303ff5520894500c740fc01000040bfe4337541893889e6c706ffffffff89e3894304eb1289e0c7000100000089e7bee43375418977048b5d008d5bf43b5d08730aeb05e95a000000ff5520895d00c743fc020000008b142489138b4424048943048b45008d40f03b45087303ff5520894500c740fc03000000895808894804c7000100000083c800e876d7f7ff89c38b44241090e82ed6f7ffb8e433754183c414c38b542404f7c20100000075488b3a8b7204b820597741e8aad6f7ff89c389f883c800e89ed6f7ff5689da89c389d0e85267f9ff83f8017407b903000000eb1b8b142483c4043b650c7303ff5524ebb5b901000000b9010000005083f9017471b8205977410bc0e8e6dbf8ff505089c1b8205977410bc0e84ad6f7ff83c800e88ad6f7ff83f801742e8b45008d40f83b45087303ff5520894500c740fc01000040bf20597741893889e6c706ffffffff89e3894304eb1289e0c7000100000089e7be205977418977048b5d008d5bf4eb05e95f0000003b5d087303ff5520895d00c743fc020000008b142489138b4424048943048b45008d40f03b45087303ff5520894500c740fc03000000895808894804c7000100000083c800e842d6f7ff89c38b44241490e8fad4f7ffb82059774183c418c38b4c2408f7c1010000007544b868f57d4190e87ad5f7ff89c78b0183c800e86ed5f7ffff710489c389f8e82266f9ff83f8017407b803000000eb1b8b0c2483c4043b650c7303ff5524ebb9b801000000b8010000005083f8017471b868f57d410bc0e8b6daf8ff505089c7b868f57d410bc0e81ad5f7ff89fe90e85ad5f7ff83f801742e8b5d008d5bf83b5d087303ff5520895d00c743fc01000040ba68f57d41891389e1c701ffffffff89e0895804eb1289e3c7030100000089e2b968f57d41894a048b45008d40f4eb05e95f0000003b45087303ff5520894500c740fc020000008b3c2489388b5c240489580489c28b45008d40f03b45087303ff5520894500c740fc03000000895008897004c7000100000090e812d5f7ff89c38b44241890e8cad3f7ffb868f57d4183c41cc38b44240cf7c00100000075488b308b5804b89cf57d41e846d4f7ff89c189f083c800e83ad4f7ff5389c389c80bc0e8ee64f9ff83f8017407bf03000000eb1b8b042483c4043b650c7303ff5524ebb5bf01000000bf010000005083ff017471b89cf57d410bc0e882d9f8ff505089c7b89cf57d410bc0e8e6d3f7ff89fe90e826d4f7ff83f801742e8b5d008d5bf83b5d087303ff5520895d00c743fc01000040ba9cf57d41891389e1c701ffffffff89e0895804eb1289e3c7030100000089e2b99cf57d41894a048b45008d40f4eb05e95f0000003b45087303ff5520894500c740fc020000008b3c2489388b5c240489580489c28b45008d40f03b45087303ff5520894500c740fc03000000895008897004c7000100000090e8ded3f7ff89c38b44241c90e896d2f7ffb89cf57d4183c420c38b7c2410f7c7010000007548b84434754190e816d3f7ff89c38b0783c800e80ad3f7ffff770489da89c389d00bc0e8ba63f9ff83f8017407be03000000eb1b8b3c2483c4043b650c7303ff5524ebb5be01000000be010000005083fe017471b8443475410bc0e84ed8f8ff505089c6b8443475410bc0e8b2d2f7ff83c800e8f2d2f7ff83f801742e8b5d008d5bf83b5d087303ff5520895d00c743fc01000040ba44347541891389e1c701ffffffff89e0895804eb1289e3c7030100000089e2b944347541894a048b45008d40f4eb05e95f0000003b45087303ff5520894500c740fc020000008b3c2489388b5c240489580489c28b45008d40f03b45087303ff5520894500c740fc03000000895008897004c7000100000090e8aad2f7ff89c38b44242090e862d1f7ffb84434754183c424c3b890c6754183c41cc3b890c67541c389f090e8a6d6f8ff83f801746389f0e8cad6f8ff8b088b40080bc0e806d7f8ff500bc0e88e5bf9ff83c800e86ad0f8ff83f80174078b042483c404c38b0424e8725bf9ff89c78b04240bc0e8b25df9ff5789cbe8d264f9ff6a0389c38b44240483c800e8aa65f9ff83c408e936f9ffffb890c67541c3|@5327,63|14,1,@1102 26,1,@1103 38,1,@1596 50,1,@1616 62,1,@1618 82,0,@525 90,1,@1109 102,1,@1109 114,1,@1946 124,0,1 157,0,0 162,0,0 173,0,@525 178,1,@1624 187,0,@525 194,1,@1109 202,1,@1111 236,0,@525 246,0,-1 261,0,0 268,0,@525 350,0,0 358,1,@1113 370,1,@1104 375,0,@525 401,0,@1950 406,1,@1109 418,1,@1109 430,1,@1946 440,0,1 463,0,0 468,0,0 479,0,@1950 486,1,@1624 495,0,@1950 502,1,@1109 510,1,@1111 544,0,@1950 554,0,-1 569,0,0 576,0,@1950 658,0,0 666,1,@1113 678,1,@1104 683,0,@1950 704,0,@5321 710,1,@1109 722,1,@1109 734,1,@1946 744,0,1 767,0,0 772,0,0 783,0,@5321 790,1,@1624 799,0,@5321 806,1,@1109 814,1,@1111 848,0,@5321 858,0,-1 873,0,0 880,0,@5321 964,0,0 970,1,@1113 982,1,@1104 987,0,@5321 1013,0,@5324 1018,1,@1109 1030,1,@1109 1042,1,@1946 1052,0,1 1075,0,0 1080,0,0 1091,0,@5324 1098,1,@1624 1107,0,@5324 1114,1,@1109 1122,1,@1111 1156,0,@5324 1166,0,-1 1181,0,0 1188,0,@5324 1272,0,0 1278,1,@1113 1290,1,@1104 1295,0,@5324 1316,0,@531 1322,1,@1109 1334,1,@1109 1350,1,@1946 1360,0,1 1383,0,0 1388,0,0 1399,0,@531 1406,1,@1624 1415,0,@531 1422,1,@1109 1430,1,@1111 1464,0,@531 1474,0,-1 1489,0,0 1496,0,@531 1580,0,0 1586,1,@1113 1598,1,@1104 1603,0,@531 1612,0,@1107 1621,0,@1107 1630,1,@1620 1642,1,@1621 1654,1,@1622 1662,1,@1923 1670,1,@1598 1690,1,@1923 1702,1,@1932 1710,1,@1956 1726,1,@1958 1739,0,@1107 5321:O6|@5323,0,0,0,@527,@5322 5322:O2|-1,@7395 5323:S4|776f7264 5324:O6|@5326,0,0,0,@527,@5325 5325:O2|-1,@7396 5326:S4|63686172 5327:S48|545950455f5452454528292e74797065436f6e73747246726f6d4f7665726c6f61642832297072656654797065283129 5328:C2,100|3b650c7303ff552452bb7b0000008b420c83c800ff154094040883f8017409b820c77d4183c404c38b3c248b470cba084f78410bc0e8d258faff83c800e83e0000008b342450ff7608ff76048b5e0c8b461083c800e8de000000b8f825754183c404c390|@5339,63|10,0,61 22,0,I24 32,0,@5241 47,0,@2443 54,1,@2444 62,1,@5329 86,1,@5331 91,0,@408 5329:C2,84|3b650c7303ff552483f8017506b840970408c38b780483ff0175098b308b06e9a0d5f8ff8b308b0690e896d5f8ff57bb5f00000090e8f61bf7ff508b4424040bc0e8baffffff89c38b042483c408e9dd1bf7ff90|@5330,63|14,0,I48 32,1,@1624 42,1,@1624 48,0,47 54,1,@323 79,1,@323 5330:S64|56414c55455f4f505328292e6765744f7665726c6f6164496e7374616e63652836296e6f74466f756e642831296d616b654f7665726c6f61644c697374283129 5331:C2,340|3b650c7303ff552453e8d65afaff8b7c240c50bbbc1477418b4724ba703d754190e82246f7ff89c68b04240bc0e83ecef7ff83f801747189f38b042490e85ecef7ff8b5c2404b8b0f87d410bc0e8261bf7ff8b55008d52f43b55087303ff5520895500c742fc02000000b9dcf87d41890a8942048b44240c8b7c2410c7442414030000008b37897424108b5f04895c240c8b4f088b742408894c24088b5f0c895c24048b4f10eb05e91c000000890c24ff7714ff7718ff771cff7720ff772489c389d056e98b64f7ff8b5d008d5be83b5d087303ff5520895d00c743fc05000000ba0cf97d4189138b4c2404894b108b44241489430c8b3c24897b088973048b74240c8b542410c7442414030000008b0a894c24108b7a04897c240c8b42088b4c2408894424088b7a0c897c24048b4210890424ff7214ff7218ff721cff7220ff72245389f38b042483c40451e90264f7ff0bc0|@5338,63|10,1,@2454 20,0,@1766 28,0,@599 34,1,@601 46,1,@1102 62,1,@1103 71,0,@5332 78,1,@323 107,0,@5333 128,0,1 197,1,@752 226,0,@5334 267,0,1 334,1,@752 5332:S34|556e61626c6520746f207265736f6c7665206f7665726c6f6164696e6720666f7220 5333:C2,20|3b650c7303ff55248b780c8b420489faff220bc0|@751,63| 5334:C2,144|3b650c7303ff552452508b7818b894db764189faff128b34248b5c2404ff760c8b5310bbb8f97d4189d083c800e87a19f7ff8b4c24088b590ce86e19f7ffbbd4f97d410bc0e86219f7ff8b142483c800ff128b4424088b4808ff7004b801000000e85abff8ffff742408506a038b5c240c89c80bc0e872c3f8ff8b4424088b7808b80100000089fa83c410ff2283c800|@5337,63|14,0,@1662 36,0,@5335 46,1,@323 58,1,@323 63,0,@5336 70,1,@323 93,0,0 98,1,@1582 118,1,@1593 130,0,0 5335:S18|206973206f7665726c6f61646564206f6e20 5336:S9|20627574206e6f7420 5337:S31|545950455f5452454528292e6f7665726c6f61644572726f72283529283129 5338:S28|545950455f5452454528292e6f7665726c6f61644572726f72283529 5339:S45|56414c55455f4f505328292e6765744f7665726c6f6164496e7374616e63652836296e6f74466f756e64283129 5340:S34|56414c55455f4f505328292e6765744f7665726c6f6164496e7374616e6365283629 5341:C2,20|83f8017506b803000000c3b801000000c383c800|@5342,1|6,0,1 12,0,0 5342:S11|4164644f7665726c6f6164 5343:C2,132|3b650c7303ff5524528b1083fa07751d8b58088b400483c800e832caf8ff3b650c7303ff5524ebe1bf0100000089c78b1c24578b4bf88b3983ff07751e8b59088b41040bc0e806caf8ff89c13b650c7303ff5524ebe0b80100000089c889c38b45008d40f43b45087303ff5520894500c740fc020000008958048b1424891083c408c390|@5344,47|26,1,@1596 41,0,0 70,1,@1596 87,0,0 5344:S40|56414c55455f4f505328292e6170706c7946756e6374696f6e2836293c7061747465726e3e2d2f32 5345:O2|@989,@989 5346:C2,80|8b7d008d7ff43b7d087303ff5520897d00c747fc02000000894704c707fbffffff8b45008d40ec3b45087303ff5520894500c740fc04000000be24fc7d41893089780c8b7a088978088b7204897004c3|@5357,53|29,0,-3 58,0,@5347 5347:C2,148|3b650c7303ff5524f7c0010000007407bf03000000eb068b388d7c3f01f7c7010000007503ff553883ff097e245250ff720c6a09bb01000000e846c1f7ffbbd4fc7d4190ff154094040883f8017412eb075250ff720ceb098b5c24088b7304eb078b7424088b760889f083c800e84a0000008b1c248b54240c895c240c89c38b44240489d1bab4fd7d4183c40c51e90901000090|@5356,63|17,0,1 53,0,0 58,1,@1081 63,0,@5348 70,0,I24 110,1,@5349 134,0,@5351 143,1,@5352 5348:S4|636f6e76 5349:C2,132|3b650c7303ff552489c689f090e892cef8ff83f801745c89f0e8b6cef8ff8b088b40080bc0e8f2cef8ff500bc0e87a53f9ff8b3883ffff75078b042483c404c38b04240bc0e86253f9ff89c68b04240bc0e8a255f9ff5689cbe8c25cf9ff6a0389c38b44240483c800e89a5df9ff83c408eb8db888ad7d4183c800ff552cb80100000090|@5350,63|14,1,@1620 26,1,@1621 38,1,@1622 46,1,@1923 70,1,@1923 82,1,@1932 90,1,@1956 106,1,@1958 116,0,@5197 127,0,0 5350:S42|56414c55455f4f505328292e6170706c7946756e6374696f6e283629666f6c6c6f775479706573283129 5351:O2|@5352,@7373 5352:C2,112|3b650c7303ff552453508b7d008d7ff03b7d087303ff5520897d00c747fc030000008b74240c897708895f0489078b5a048b0353578d542410e84e0000008b55008d52f43b55087303ff5520895500c742fc020000008942048b0c24890a8b4424048910b80100000083c410c2040090|@5355,63|58,1,@5353 101,0,0 5353:C2,160|3b650c7303ff552483f8017506b801000000c38b385257ff7704ff70048b5af88b070bc0ff154094040883f80174388b74240c8b46fc83c800e836c8f7ff89c38b44240490e82ac8f7ff89da89c389d090e8de58f9ff83f801740c8b04248b54240c83c410eb998b04248b54240c83c800e88affffff8b75008d76f43b75087303ff5520897500c746fc020000008946048b5c2408891e89f083c410c383c800|@5354,63|14,0,0 38,0,I24 58,1,@1109 70,1,@1109 82,1,@1946 5354:S37|5052494e545f5441424c4528292e6164644f7665726c6f616428332966696c746572283129 5355:S28|5052494e545f5441424c4528292e6164644f7665726c6f6164283329 5356:S48|56414c55455f4f505328292e6170706c7946756e6374696f6e2836296164644f7665726c6f6164696e67283129283129 5357:S49|56414c55455f4f505328292e6170706c7946756e6374696f6e2836296164644f7665726c6f616447656e6572616c283129 5358:C2,148|3b650c7303ff5524f7c0010000007407bf03000000eb068b388d7c3f01f7c7010000007503ff553883ff097e245250ff720c6a09bb01000000e89abdf7ffbbd4fc7d4190ff154094040883f8017412eb075250ff720ceb098b5c24088b7304eb078b7424088b760889f083c800e89efcffff8b1c248b54240c895c240c89c38b44240489d1bab4fd7d4183c40c51e95dfdffff90|@5356,63|17,0,1 53,0,0 58,1,@1081 63,0,@5348 70,0,I24 110,1,@5349 134,0,@5351 143,1,@5352 5359:S28|56414c55455f4f505328292e6170706c7946756e6374696f6e283629 5360:C2,68|3b650c7303ff552483f80175048b42e4c352ff308b40040bc0e8e2ffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0424890289d083c408c3|@1462,5| 5361:S52|50415253455f5452454528292e67656e636f64652837296d616b654465627567456e74726965732833296c6f6164566172283329 5362:S42|50415253455f5452454528292e67656e636f64652837296d616b654465627567456e7472696573283329 5363:C2,1372|8d7c24b03b7d0c7303ff55288b7c24048b721483fe017503c210008b4d008d49e03b4d087303ff5520894d00c741fc07000000beec067e4189318b72108971188b74240c8971148b720c89711089590c8b72088971088b378971048b75008d76e03b75087303ff5520897500c746fc07000000525053ff37ff770451ff7208ff720cff721056ba0c087e4189168b7c2404897e188b5424308956148b7c2408897e10895e0c8b7c240c897e088b7c2418897e048b4424248b5d008d5be43b5d087303ff5520895d00c743fc06000000bfcc087e41893b8b7810897b148b480c894b108b54241c89530c8b50088953088b7424188973048b75008d76f43b75087303ff5520897500c746fc020000008b542410895604c706fbffffff8b5424248b4a048b0153568b54241c0bc0ff128b7d008d7ff43b7d087303ff5520897d00c747fc02000000c74704010000008b74244089378b5d008d5bf43b5d087303ff5520895d00c743fc02000000897b0489038b55008d52f43b55087303ff5520895500c742fc02000000895a04c702150000005283fb017507b903000000eb208b038b3883fffb75128b5b043b650c7303ff5524ebdeb901000000b90100000083f901742e8b042483c800e8c6dcfaff8b75008d76f43b75087303ff5520897500c746fc02000000894604c706fbffffffeb038b34248b5d008d5bf43b5d087303ff5520895d00c743fc02000000c743040100000089338b55008d52ec3b55087303ff5520895500c742fc04000000c7420c010000008b4c2404894a08895a04c702090000008b45008d40f43b45087303ff5520894500c740fc020000008b7c240c897804c700fbffffff8b7424308b5e0489c18b0352518b5424280bc0ff128b7d008d7ff43b7d087303ff5520897d00c747fc020000008b742410897704c707fbffffff8b5c24388b530489c18b0251578b542430ff128b7d008d7ff43b7d087303ff5520897d00c747fc02000000be8c097e4189770489078b5d008d5bf43b5d087303ff5520895d00c743fc02000000897b04c703150000005383ff017507ba03000000eb208b0f8b0183f8fb75128b7f043b650c7303ff5524ebdeba01000000ba0100000083fa01742e8b042483c800e85edbfaff8b7d008d7ff43b7d087303ff5520897d00c747fc02000000894704c707fbffffffeb038b3c248b75008d76f43b75087303ff5520897500c746fc02000000c7460401000000893e8b5d008d5bec3b5d087303ff5520895d00c743fc04000000c7430c010000008b542404895308897304c703090000008b4d008d49ec3b4d087303ff5520894d00c741fc04000000b81c32754189410c8959088b7c2440897904c701f5ffffff8b75008d76f43b75087303ff5520897500c746fc02000000c7460401000000890e8b5d008d5bf43b5d087303ff5520895d00c743fc020000008973048b54240889138b4d008d49f43b4d087303ff5520894d00c741fc02000000895904c701150000005183fb017507b803000000eb208b3b8b3783fefb75128b5b043b650c7303ff5524ebdeb801000000b80100000083f801742c8b042490e81adafaff8b5d008d5bf43b5d087303ff5520895d00c743fc02000000894304c703fbffffffeb038b1c248b55008d52f43b55087303ff5520895500c742fc02000000c7420401000000891a8b4d008d49ec3b4d087303ff5520894d00c741fc04000000c7410c010000008b442410894108895104c701090000008b7d008d7ff43b7d087303ff5520897d00c747fc02000000c7470401000000890f8b75008d76f43b75087303ff5520897500c746fc02000000897e048b5c2414891e8b45008d40f43b45087303ff5520894500c740fc02000000897004c7001300000083c44cc2100083c800|@5373,63|52,0,@5364 135,0,@5368 208,0,@5370 279,0,-3 329,0,0 397,0,10 408,0,1 437,0,0 442,0,0 458,1,@2837 491,0,-3 527,0,0 560,0,0 576,0,4 613,0,-3 671,0,-3 719,0,@5372 757,0,10 768,0,1 797,0,0 802,0,0 818,1,@2837 851,0,-3 887,0,0 920,0,0 936,0,4 965,0,@495 984,0,-6 1015,0,0 1083,0,10 1094,0,1 1123,0,0 1128,0,0 1142,1,@2837 1175,0,-3 1211,0,0 1244,0,0 1260,0,4 1291,0,0 1359,0,9 5364:C2,96|3b650c7303ff55248b388b70048b45008d40f43b45087303ff5520894500c740fc020000008b5a14895804893089d15790e8460000008b79188b742404897c24048b1424890424ff7110ff710cff71088b590489d0baec527d4156e9c04bffff|@5367,63|50,1,@5365 86,0,@4980 92,1,@4982 5365:C2,44|8b388b70048b45008d40f03b45087303ff5520894500c740fc03000000897008897804c70001000000c30bc0|@5366,49|37,0,0 5366:S10|4465627567456e746572 5367:S61|50415253455f5452454528292e67656e636f64652837297772617046756e6374696f6e496e4465627567283629656e74657246756e6374696f6e283129 5368:C2,92|3b650c7303ff55248b7d008d7ff03b7d087303ff5520897d00c747fc030000008b72148977088b5804895f04c7070300000053ff721857ff7210ff720cff72088b5a048b00baec527d4183c800e8ae4affff8b042483c404c383c800|@5369,63|46,0,1 70,0,@4980 78,1,@4982 5369:S61|50415253455f5452454528292e67656e636f64652837297772617046756e6374696f6e496e44656275672836296c6561766546756e6374696f6e283129 5370:C2,88|3b650c7303ff55248b7d008d7ff43b7d087303ff5520897d00c747fc020000008b7004897704c707ffffffff56ff721457ff7210ff720cff72088b5a048b00baec527d4190e8f649ffff8b04240bc0ff552cb80100000090|@5371,63|40,0,-1 64,0,@4980 70,1,@4982 83,0,0 5371:S65|50415253455f5452454528292e67656e636f64652837297772617046756e6374696f6e496e4465627567283629657863657074696f6e46756e6374696f6e283129 5372:O2|@3830,0 5373:S45|50415253455f5452454528292e67656e636f64652837297772617046756e6374696f6e496e4465627567283629 5374:C2,472|3b650c7303ff552489d783c800e80af2f8ff505057536a03ff7704ff7424208d742414568b5c242c90e8dae3ffffff7504bb4a0a7e41536a018965048b44241490e81276ffff89c28b44240cff1289c18b45008d40f83b45087303ff5520894500c740fc010000008908ff7424088f450483c41cc20c0083c8008b3881ffcb000000751a89c6b80100000083c410c20c0089c6b80100000083c410c20c0083ff11756a8b74240450ff76048b5808b8c40b7e410bc0e82e08f7ffbbe40b7e410bc0e82208f7ff8b5c240883c800e81608f7ffbb080c7e410bc0e80a08f7ff8b5c241483c800e8fe07f7ffff74241cff74242450bb030000008b44240c90e8ea3efaffb80100000083c418c20c00e90d00000089c6b80100000083c410c20c0083ff0b75568b742404ff76048b5c2404b8140c7e4190e8ae07f7ffbb080c7e410bc0e8a207f7ff8b5c241083c800e89607f7ffff742418ff74242050bb030000008b44240c90e8823efaffb80100000083c414c20c00b801000000e90600000083c410c20c008b742404ff76048b5c2404b8480c7e41e84e07f7ffbb080c7e410bc0e84207f7ff8b5c241083c800e83607f7ffff742418ff74242050bb030000008b44240c90e8223efaffb80100000083c414c20c0083c800|@5380,63|14,1,@1690 42,1,@5319 50,0,$5374+122 66,1,@5098 135,0,0 148,0,0 175,0,@5375 182,1,@323 187,0,@5376 194,1,@323 206,1,@323 211,0,@5377 218,1,@323 230,1,@323 244,0,1 254,1,@2429 259,0,0 277,0,0 304,0,@5378 310,1,@323 315,0,@5377 322,1,@323 334,1,@323 348,0,1 358,1,@2429 363,0,0 374,0,0 401,0,@5379 406,1,@323 411,0,@5377 418,1,@323 430,1,@323 444,0,1 454,1,@2429 459,0,0 5375:S22|436f6e76657273696f6e20657863657074696f6e2028 5376:S26|2920726169736564207768696c6520636f6e76657274696e6720 5377:S4|20746f20 5378:S43|4f766572666c6f7720657863657074696f6e20726169736564207768696c6520636f6e76657274696e6720 5379:S34|457863657074696f6e20726169736564207768696c6520636f6e76657274696e6720 5380:S41|50415253455f5452454528292e67656e636f64652837296765744c69746572616c56616c7565283529 5381:C2,1688|3b650c7303ff55248b7c240852508b74240c8b0ef7c101000000741583f9e17c1583f91d7f15baea0c7e418d548a7cffe2e904010000e9ff000000e9fa0000009090e9ea040000909090e9eb000000909090e9e3000000909090e9db000000909090e9d3000000909090e9cb000000909090e90a050000909090e980050000909090e9bb000000909090e9ab000000909090e9a3000000909090e99b000000909090e993000000909090e939050000909090e983000000909090e97b000000909090e973000000909090e98e030000909090e963000000909090e95b000000909090e953000000909090e94b000000909090e943000000909090e93b000000909090e92c020000909090e935040000909090e923000000909090e91b000000909090e913000000909090e912010000909090e9e703000090909089f883c408c208008b4e088b115289d083c800e84240faffff70048b042490e8c65dfaff83f80174538b042483c800e8ea5dfaff8b45008d40ec3b45087303ff5520894500c740fc04000000ba5c137e41891089580c8b5424088950088b54240c895004894424188b4424048944241489d889fb83c410e96a0500008b042483f801751e68f4077641ff74240889da89fb89d08d542418e8a60d000083c410c2080089da89fb89d083c800e8ee1200008b4d008d49f43b4d087303ff5520894d00c741fc020000008b388979048b74240489318b5d008d5bec3b5d087303ff5520895d00c743fc040000008b500c89530c8b70088973088b7804897b04890b89d883c410c208008b4f048b1183fa05756853ff37ff770c8b46048d54241490e81e1600008b4d008d49f43b4d087303ff5520894d00c741fc02000000894104c701fdffffff8b45008d40ec3b45087303ff5520894500c740fc040000008b3c2489780cc74008010000008948048b742404893083c414c2080083fafd756b53ff37ff770c8b5e048b41048d54241490e85e1600008b4d008d49f43b4d087303ff5520894d00c741fc02000000894104c701fdffffff8b45008d40ec3b45087303ff5520894500c740fc040000008b3c2489780cc74008010000008948048b742404893083c414c20800b8d4267e4183c800ff552cb8010000008b4e088b115351ff760c89d189c8e8c2b5f7ff83f801742489c8e8e6b5f7ff8b58048b000bc0e826b5f8ff89c23b650c7303ff5524ebd3b80100000089c8e896b5f8ff83f801741089c8e8bab5f8ff8b3889f883f002eb05b80100000083f80174238b7c2410ff742418ff742410680c277e41bb030000008b470483c800e85e39faffeb05b8010000008b4424048b3889f8e8c2160000ba58287e4190ff128b342483fe01750489c3eb3e8b168b4c24048b3950ff7604ff720489fb8b02e862180000ff74240889c38b44240490e89e1900008b74240483c40c3b650c7303ff5524ebbebb010000008b55008d52f43b55087303ff5520895500c742fc02000000895a04c7021b0000008b4c241c894c241c895424188b5c24088b44240c8b54241083c414e9a3fbffff8b4e048b1183faf175718b41088b3889f883c800e81e3dfaffff70048b042490e8a25afaff83f80174628b042483c800e8c65afaff8b55008d52e83b55087303ff5520895500c742fc05000000b8542b7e4189028b4608894210895a0c8b4c2404894a088b4c2408894a048b4c241489542414897c241089dfeb05e93900000089cb89f883c40ce9370200008b142483fa01751bff76085789d88b5c241c8d5424140bc0e8760a000083c40cc208008b44241483c40cc2080089f883c408c2080089d989fb89c88b54240883c41452e9a70f000089d989fb89c88b54240883c41452e9940f00008b4d008d49ec3b4d087303ff5520894d00c741fc04000000ba902b7e41891189410c8b4424048941088959048b5e0489f889ca8b4c240883c41451ff228b4e048b118b442404505053ff7608ff760c526a01ff7004ff7424208d44241c5089d3b87b000000e882dbffff8b7c241cff3424ff74241cff74242c8b5c24148b4424108b5708ff128b742428894424288b5c2410895c242489f38b44240c83c420e9901d0000897c24108b4e08894c240c8b54240483c408e901faffffff760457ff76088b54241083c800e8eef9ffff508b4c24048b3983fff175078b71088b06eb1c83fffb75128b49083b650c7303ff5524ebe0b801000000b8f8f975418b34248b5d008d5bf43b5d087303ff5520895d00c743fc020000008b1689530489038b45008d40ec3b45087303ff5520894500c740fc040000008b7e0c89780c8b4e088948088b5604895004891883c410c2080083c800|@5442,63|39,0,$5381+66 334,1,@2441 346,1,@2496 362,1,@2497 391,0,@5382 434,1,@5384 447,0,@1219 466,1,@5394 486,1,@5400 602,1,@5406 635,0,-2 672,0,0 714,1,@5407 747,0,-2 784,0,0 804,0,@5411 815,0,0 834,1,@1102 846,1,@1103 858,1,@1596 875,0,0 882,1,@1600 894,1,@1601 908,0,0 930,0,@5413 935,0,1 946,1,@2429 953,0,0 966,1,@5414 971,0,@5418 1010,1,@5421 1026,1,@5423 1048,0,0 1081,0,13 1138,1,@2441 1150,1,@2496 1166,1,@2497 1195,0,@5427 1253,1,@5384 1282,1,@5394 1325,1,@5400 1344,1,@5400 1373,0,@5428 1445,0,61 1450,1,@5319 1508,1,@5436 1592,0,0 1597,0,@1198 5382:C2,32|3b650c7303ff55248b3c2489042468f40776418b5a0c8b42088b520457ff2290|@5383,63|15,0,@1219 5383:S37|50415253455f5452454528292e67656e636f64652837296275696c64416f74283429283129 5384:C2,540|3b650c7303ff552489c78b44240483c800e80ee8f8ff8b53048b0a83f90575718b44240490e856abf9ff5753ff33ff730ce802020000bf0100000083f801750489feeb26f7c7010000007503ff553889fb83c30270f68b400489df3b650c7303ff5524ebd6be010000008b5d008d5bf43b5d087303ff5520895d00c743fc02000000c74304010000008b54240c8913eb05e9fb0000008b4c24088b45008d40ec3b45087303ff5520894500c740fc040000008b790c89780cc7400801000000ba50577941895004c7000100000056538b54242090ff1250505089e18b7c240c893989e689460489e38b5424288953088b4d008d49f03b4d087303ff5520894d00c741fc030000008b042489018b7c24048979048b7424088971088b5d008d5bf43b5d087303ff5520895d00c743fc02000000c7430401000000890b8b4d008d49f43b4d087303ff5520894d00c741fc02000000895904c701010000008b45008d40ec3b45087303ff5520894500c740fc040000008b7c241489780c8b7424108970088948048b5c2418891883c424c2080083f901756b535750ff33ff7308ff730c8b42048d54241890e8820100008b7d008d7ff43b7d087303ff5520897d00c747fc02000000894704c707010000008b75008d76ec3b75087303ff5520897500c746fc040000008b1c24895e0c8b542404895608897e048b4c2408890e89f0eb05e90600000083c418c20800b8b01b7e410bc0ff552cb80100000090|@5393,63|18,1,@1690 38,1,@2153 50,1,@5385 55,0,0 102,0,0 133,0,0 187,0,0 192,0,@3072 201,0,0 309,0,0 344,0,0 426,1,@5387 459,0,0 525,0,@5391 535,0,0 5385:C2,184|3b650c7303ff552489c689f090e872b5f8ff83f801747389f0e896b5f8ff8b088b40080bc0e8d2b5f8ff500bc0e8ee50f9ff83f801751a508b44240490e84a3af9ff83c800e826aff8ff83f8017540eb0350eb3b8b44240490e82e3af9ff89c78b44240490e86e3cf9ff5789cbe88e43f9ff6a0389c38b44240483c800e86644f9ff83c40ce976ffffffe9070000008b042483c408c389f090e812bcf8ff83f801740f89f0e836bcf8ff8b4004e94effffffb801000000c3|@5386,63|14,1,@1620 26,1,@1621 38,1,@1622 46,1,@1994 62,1,@1923 70,1,@1598 90,1,@1923 102,1,@1932 110,1,@1956 126,1,@1958 154,1,@1644 166,1,@1645 179,0,0 5386:S28|545950455f5452454528292e676574436f6e7374724c697374283129 5387:C2,508|3b650c7303ff552483f80175708b45008d40f43b45087303ff5520894500c740fc02000000c74004010000008b7af889388b72fc8b5d008d5bec3b5d087303ff5520895d00c743fc040000008b4e0c894b0cc7430801000000bf50577941897b04c70301000000ff72045089d88b5208ff1250505089e68b5c240ceb05e960000000891e89e289420489e18b4424108941088b7d008d7ff03b7d087303ff5520897d00c747fc030000008b342489378b5c2404895f048b5424088957088b45008d40f43b45087303ff5520894500c740fc02000000c7400401000000893883c414c38b3889d68b58048b470890e802e4f8ff5657538b5ef4ff154094040883f80174708b5424088b4d008d49f43b4d087303ff5520894d00c741fc02000000c74104010000008b42f889018b7c2404ff72048b1f89c883c800e8da0000008b74240c8b5c2408508b43048b560883c800ff1250505089e28b4c240c890a89e789470489e68b5c2410895e088b55008d52f0eb05e94c0000003b55087303ff5520895500c742fc030000008b0c24890a8b4424048942048b7c2408897a088b75008d76f43b75087303ff5520897500c746fc020000008b5c2414895e04891689f083c420c38b04248b5424080bc0e82efeffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b4c2404890a89d083c40cc383c800|@5390,63|40,0,0 85,0,0 90,0,@3072 99,0,0 216,0,0 238,1,@1690 250,0,I24 290,0,0 314,1,@5388 5388:C2,536|3b650c7303ff552483f801750389d8c383fb017501c3f7c00100000075048b38eb1389c7b878d176410bc0ff552c89f8bf01000000f7c30100000075048b33eb1489c6b878d1764183c800ff552c89f0be01000000560bf7f7c6010000005e7503ff55383bfe7571f7c00100000075048b10eb1189c2b878d17641ff552c89d0ba01000000f7c00100000075058b4804eb0db878d17641ff552cb901000000f7c30100000075058b4304eb0fb878d176410bc0ff552cb8010000005289c389c890e83affffff8b7d008d7ff43b7d087303ff5520897d00eb05e915000000c747fc020000008947048b3424893789f883c404c3f7c00100000075048b10eb1289c2b878d1764190ff552c89d1ba01000000f7c30100000075048b0beb1489c1b878d1764183c800ff552c89c8b9010000005223d1f6c2015a7503ff55383bd17d6bf7c00100000075048b38eb1489c7b878d1764183c800ff552c89febf01000000f7c00100000075058b7004eb0db878d17641ff552cbe010000005789f083c800e87afeffff8b5d008d5bf43b5d087303ff5520895d00c743fc020000008943048b1424891389d883c404c3f7c30100000075048b3beb1189c7b878d17641ff552c89febf01000000f7c30100000075058b7304eb1389c6b878d176410bc0ff552c89f3be010000005789f390e80efeffff8b5d008d5bf43b5d087303ff5520895d00c743fc020000008943048b1424891389d883c404c3|@5389,63|37,0,@1640 49,0,0 68,0,@1640 81,0,0 119,0,@1640 129,0,0 147,0,@1640 155,0,0 173,0,@1640 183,0,0 258,0,@1640 269,0,0 288,0,@1640 301,0,0 336,0,@1640 349,0,0 367,0,@1640 375,0,0 443,0,@1640 453,0,0 473,0,@1640 485,0,0 5389:S30|50415253455f5452454528292e67656e636f6465283729706c7573283229 5390:S57|50415253455f5452454528292e67656e636f64652837296275696c64416f74283429616464436f6e737472283429616464436c697374283129 5391:O3|@7320,@224,@5392 5392:S35|616464436f6e7374723a206261646c792d666f726d656420616e642d6f722074726565 5393:S46|50415253455f5452454528292e67656e636f64652837296275696c64416f74283429616464436f6e737472283429 5394:C2,944|3b650c7303ff552489d789c68b44240490e8b2dff8ff8b53048b0283f80575718b4d008d49f43b4d087303ff5520894d00c741fc02000000c741040100000089318b47088b55008d52ec3b55087303ff5520895500c742fc040000005756ff33ff730c51ff700c528b5c2404895a0cc7420801000000b850577941894204c702010000008b7c241852ff74242889f3eb05e9c50000008b47f88b57fcff1250505089e68b5c2414891e89e289420489e18b44242c8941088b7d008d7ff03b7d087303ff5520897d00c747fc030000008b342489378b5c2404895f048b5424088957088b4d008d49f43b4d087303ff5520894d00c741fc02000000c741040100000089398b7d008d7ff43b7d087303ff5520897d00c747fc02000000894f04c707ffffffff8b75008d76ec3b75087303ff5520897500c746fc040000008b5c2418895e0cc7460801000000897e048b54241c891689f083c428c2080083f8ff75708b4a04f7c101000000756a8b015756ff33ff730c5150ff71048b5c24208b400890e84602000083f80174738b75008d76f43b75087303ff5520897500c746fc02000000c74604010000008b5c2414891e8b5424048b1a89f090e82efbffff8b4c24048b7c241850ff7104ff74242ceb0ae9ca010000e9b70100008b5c24208b47f88b57fcff1250505089e68b5c240c891e89e289420489e18b442430eb05e9530000008941088b7d008d7ff03b7d087303ff5520897d00c747fc030000008b342489378b5c2404895f048b5424088957088b4d008d49f43b4d087303ff5520894d00c741fc020000008b742410897104893989cfeb728b7d008d7ff43b7d087303ff5520897d00c747fc02000000c74704010000008b74241489378b5c24188b53088b4d008d49ec3b4d087303ff5520894d00c741fc040000008b420c89410cc7410801000000be50577941897104c701010000008b7424185751ff74242c8b5c24208b46f8eb05e96c0000008b56fcff1250505089e38b54240c891389e189410489e08b7c24308978088b75008d76f03b75087303ff5520897500c746fc030000008b1c24891e8b5424048956048b4c2408894e088b45008d40f43b45087303ff5520894500c740fc020000008b5c2418895804893089c78b55008d52f43b55087303ff5520895500c742fc02000000897a04c702ffffffff8b4d008d49ec3b4d087303ff5520894d00c741fc040000008b44241c89410cc74108010000008951048b7c2420893989c883c42cc20800b808217e4190ff552cb801000000b808217e4183c800ff552cb80100000090|@5399,63|18,1,@1690 59,0,0 114,0,0 119,0,@3072 128,0,0 253,0,0 288,0,-1 326,0,0 386,1,@5395 422,0,0 442,1,@5388 625,0,0 675,0,0 680,0,@3072 689,0,0 854,0,-1 892,0,0 914,0,@5397 923,0,0 928,0,@5397 939,0,0 5395:C2,208|3b650c7303ff55248b700889f0e86ac0f9ff83f801745689f0e89ec0f9ff89c68b43080bc0e852c0f9ff83f80174388b430883c800e882c0f9ff89c189f083c800e8f25fffff5089c8e8ea5fffff8b3c243bf87509b80300000083c404c3b80100000083c404c3b801000000c38b1683fa0375558b4e048b018b7e088b178b4b088b3983ff03753b8b71048b1e8b79088b37500bc3a801587503ff55383bc3751c520bd6f6c2015a7503ff55383bd67506b803000000c3b801000000c3b801000000c3b801000000c3b801000000c390|@5396,63|14,1,@2227 26,1,@2229 38,1,@2227 54,1,@2229 66,1,@5098 74,1,@5098 86,0,1 95,0,0 104,0,0 178,0,1 184,0,0 190,0,0 196,0,0 202,0,0 5396:S33|56414c55455f4f505328292e697354686553616d65457863657074696f6e283229 5397:O3|@7320,@224,@5398 5398:S37|6164644578636f6e7374723a206261646c792d666f726d656420616e642d6f722074726565 5399:S48|50415253455f5452454528292e67656e636f64652837296275696c64416f742834296164644578636f6e737472283429 5400:C2,328|3b650c7303ff55248b7b048b1783fafd753b50ff33ff7308ff730c8b47048d54241083c800e83a0100008b75008d76f43b75087303ff5520897500c746fc02000000894604c706fdffffffeb7083fa01753b50ff33ff7308ff730c8b47048d54241083c800e87a0100008b75008d76f43b75087303ff5520897500c746fc02000000894604c70601000000eb5283faff754250ff33ff7308ff730c8b47048d54241083c800e8fe0100008b75008d76f43b75087303ff5520897500eb05e91d000000c746fc02000000894604c706ffffffffeb0b89fe50ff33ff7308ff730c8b4d008d49f43b4d087303ff5520894d00c741fc02000000c74104010000008b44240c89015689cb8b4424040bc0e87ef6ffff8b7d008d7fec3b7d087303ff5520897d00c747fc0400000089470c8b7424088977088b1c24895f048b54240c891789f883c414c30bc0|@5405,63|38,1,@5401 71,0,-2 102,1,@5403 135,0,0 166,1,@5404 206,0,-1 250,0,0 270,1,@5388 5401:C2,92|3b650c7303ff552483f8017506b801000000c352ff70048b188b42fcba5c237e4183c800ff12508b4424048b5424080bc0e8caffffff8b7d008d7ff43b7d087303ff5520897d00c747fc020000008947048b3424893789f883c40cc3|@413,63|14,0,0 29,0,@5402 5402:O1|@5400 5403:C2,168|3b650c7303ff552483f8017506b801000000c38b3852ff7004ff37ff77088b5f048b42fcba5c237e4183c800ff1250505089e68b5c2410891e89e289420489e18b44240c8941088b7d008d7ff03b7d087303ff5520897d00c747fc030000008b342489378b5c2404895f048b542408895708578b4424188b54241c0bc0e87effffff8b4d008d49f43b4d087303ff5520894d00c741fc020000008941048b0424890189c883c420c3|@413,63|14,0,0 37,0,@5402 5404:C2,168|3b650c7303ff552483f8017506b801000000c38b3852ff7004ff37ff77088b5f048b42fcba5c237e4183c800ff1250505089e68b5c2410891e89e289420489e18b44240c8941088b7d008d7ff03b7d087303ff5520897d00c747fc030000008b342489378b5c2404895f048b542408895708578b4424188b54241c0bc0e87effffff8b4d008d49f43b4d087303ff5520894d00c741fc020000008941048b0424890189c883c420c3|@413,63|14,0,0 37,0,@5402 5405:S47|50415253455f5452454528292e67656e636f64652837296275696c64416f7428342961646444656661756c74283229 5406:C2,148|3b650c7303ff552483f8017506b801000000c38b7a088b75008d76ec3b75087303ff5520897500c746fc040000008b5f0c895e0cc7460801000000b950577941894e04c7060100000052ff700456ff308b5af48b42f88b52fc83c800ff12508b4424048b5424080bc0e892ffffff8b7d008d7ff43b7d087303ff5520897d00c747fc020000008947048b3424893789f883c40cc3|@413,63|14,0,0 55,0,0 60,0,@3072 69,0,0 5407:C2,144|3b650c7303ff552483fb01751a83f8017506b801000000c3b880267e410bc0ff552cb801000000f7c001000000755152ff7304ff7004ff30ff338b5af48b42f88b52fc90ff12508b5c24088b4424048b54240c0bc0e8a6ffffff8b7d008d7ff43b7d087303ff5520897d00c747fc020000008947048b3424893789f883c410c3b880267e410bc0ff552cb80100000090|@5410,63|19,0,0 25,0,@5408 35,0,0 129,0,@5408 139,0,0 5408:O3|@7320,@224,@5409 5409:S6|6d657267656c 5410:S43|50415253455f5452454528292e67656e636f64652837296275696c64416f742834296d657267656c283229 5411:O3|@7320,@224,@5412 5412:S31|7061747465726e206973206e6f742061207475706c6520696e20612d6f2d74 5413:S31|43616e27742066696e642061206669786564207265636f726420747970652e 5414:C2,176|3b650c7303ff552489c689f090e86e9ef8ff83f801743b89f0e8929ef8ffbb010000008b500483fa01750389d8c3f6c3017503ff553889d883c00270f68b520489c33b650c7303ff5524ebdab801000000c389f090e8229ef7ff83f801741589f0e8469ef7ff8b58048b000bc0e8869df8ffeb8c89f083c800e8d2a3f8ff83f801741c89f0e8f6a3f8ff8b4008e836a4f8ff83c800e8be28f9ffe961ffffffb800287e4183c800ff552cb80100000090|@5417,61|14,1,@1600 26,1,@1601 31,0,0 77,0,0 86,1,@1102 98,1,@1103 110,1,@1596 122,1,@1620 134,1,@1621 142,1,@1622 150,1,@1923 160,0,@5415 171,0,0 5415:O3|@7320,@224,@5416 5416:S26|656e7472794e756d626572202d206e6f742061207265636f7264 5417:S26|545950455f5452454528292e7265636f72645769647468283129 5418:O1|@5419 5419:C2,80|3b650c7303ff552483f8017506b801000000c3a8017503ff553889c783ef0270f689f80bc0e8d6ffffff8b7d008d7ff43b7d087303ff5520897d00c747fc02000000894704b8f4077641890789f8c390|@5420,33|14,0,0 70,0,@1219 5420:S43|50415253455f5452454528292e67656e636f64652837296275696c64416f742834296275696c646c283129 5421:C2,268|3b650c7303ff552489c689d890e8a29cf8ff83f801746589f189d80bc0e8c29cf8ff51bf010000008b7004f7c60100000075538b1e57ff76048b138b5c240889d083c800ff154094040883f80174088b44240483c40cc38b4c2404f6c1017503ff553889c883c00270f68b342489c783c4083b650c7303ff5524ebafe91e000000b801000000e90400000083c40cc3b8503d754183c800ff552cb80100000089d8e80a9cf7ff83f801742089f189d80bc0e82a9cf7ff8b58048b000bc0e86a9bf8ff89c389c8e935ffffff89d8e8b2a1f8ff83f801742489f189d80bc0e8d2a1f8ff8b4008e812a2f8ff83c800e89a26f9ff89c389c8e905ffffffb800287e4183c800ff552cb80100000090|@5422,63|14,1,@1600 30,1,@1601 36,0,0 70,0,I24 130,0,0 144,0,@597 155,0,0 162,1,@1102 178,1,@1103 190,1,@1596 206,1,@1620 222,1,@1621 230,1,@1622 238,1,@1923 252,0,@5415 263,0,0 5422:S26|545950455f5452454528292e656e7472794e756d626572283229 5423:C2,152|3b650c7303ff55248b7c2404f7c701000000756a83fb0175258b5d008d5bf43b5d087303ff5520895d00c743fc020000008b5704895304890389d8c20400f6c3017503ff553889da83ea0270f6ff37ff770489d390e8a6ffffff8b7d008d7ff43b7d087303ff5520897d00c747fc020000008947048b1c24891f89f8eb05e90600000083c404c20400b8002b7e4190ff552cb80100000090|@5426,45|138,0,@5424 147,0,0 5424:O3|@7320,@224,@5425 5425:S6|6d657267656e 5426:S43|50415253455f5452454528292e67656e636f64652837296275696c64416f742834296d657267656e283329 5427:C2,32|3b650c7303ff55248b3c24890424ff72108b5a0c8b42088b520457ff2283c800|@5383,63| 5428:C2,172|3b650c7303ff552483fb0175468b5d008d5bec3b5d087303ff5520895d00c743fc04000000b9582c7e41890b8b4a04894b0c8b7a0c897b088b72088973048b3424891c24687479784189c389c856e9e5e7ffff8b7d008d7fe03b7d087303ff5520897d00c747fc07000000bed02c7e4189378b0b894f188b72048977148b4a0c894f108b4a08894f0c8b4b04894f088957048b1c24893c24680076784189d989c389f051e98fe7ffff83c800|@5435,63|38,0,@5429 69,0,@2583 79,1,@5384 108,0,@5431 153,0,@2532 165,1,@5384 5429:C2,32|3b650c7303ff55248b3c2489042468f40776418b5a0c8b42088b520457ff2290|@5430,63|15,0,@1219 5430:S51|50415253455f5452454528292e67656e636f64652837296275696c64416f7428342970726f636573734c697374283229283129 5431:C2,636|3b650c7303ff55248b78048b3783fefd75718b5f04f7c301000000756b8b4b04f7c10100000075658b710483fe01756252ff31ff30ff700cff33ff72188b5a148b42108b520c0bc0ff128b5c240c508b53088b4b0489d38b44240c89ca83c800ff128b7d008d7ff43b7d087303ff5520897d00c747fc02000000c7470401000000eb14e9b7000000e9a2000000e98d000000e97800000089078b75008d76f43b75087303ff5520897500c746fc02000000897e048b1c24891e8b55008d52f43b55087303ff5520895500c742fc02000000897204c702fdffffff8b4d008d49ec3b4d087303ff5520894d00c741fc040000008b44240489410cc74108010000008951048b7c2408893989c883c414c3b8682f7e4183c800ff552cb801000000b8682f7e4183c800ff552cb801000000b8682f7e4183c800ff552cb80100000083fe0575718b5d008d5bec3b5d087303ff5520895d00c743fc040000008b480c894b0cc7430801000000bf50577941897b04c703010000008b75008d76ec3b75087303ff5520897500c746fc04000000894e0cc7460801000000bf50577941897e04c7060100000052ff30515653ff72188b5a14eb05e9b30000008b42108b520cff128b74240c508b5e088b4424048b560483c800ff128b5d008d5bf43b5d087303ff5520895d00c743fc02000000c743040100000089038b55008d52f43b55087303ff5520895500c742fc02000000895a048b0c24890a8b45008d40f43b45087303ff5520894500c740fc02000000895004c700fdffffff8b7d008d7fec3b7d087303ff5520897d00c747fc040000008b74240889770cc74708010000008947048b5c240c891f89f883c414c3b8682f7e4190ff552cb80100000090|@5434,63|125,0,0 214,0,-2 252,0,0 272,0,@5432 283,0,0 288,0,@5432 299,0,0 304,0,@5432 315,0,0 357,0,0 362,0,@3072 371,0,0 405,0,0 410,0,@3072 419,0,0 497,0,0 564,0,-2 602,0,0 622,0,@5432 631,0,0 5432:O3|@7320,@224,@5433 5433:S34|6d6b436f6e735061743a206261646c792d666f726d65642070617273652d74726565 5434:S60|50415253455f5452454528292e67656e636f64652837296275696c64416f7428342970726f636573734c6973742832296d6b436f6e73506174283129 5435:S48|50415253455f5452454528292e67656e636f64652837296275696c64416f7428342970726f636573734c697374283229 5436:C2,372|3b650c7303ff55248b7b048b3783fe0575728b55008d52f43b55087303ff5520895500c742fc02000000c7420401000000890250505089e08b4c2410890889e089500489e28b4424148942088b55008d52f03b55087303ff5520895500c742fc030000008b3c24893a8b7424048972048b7c2408897a088b75008d76f43b7508730aeb05e96b000000ff5520897500c746fc02000000c746040100000089168b55008d52f43b55087303ff5520895500c742fc02000000897204c702030000008b7d008d7fec3b7d087303ff5520897d00c747fc040000008b730c89770cc74708010000008957048b13891789f883c40cc2080083fe03756c50ff33ff730c8b47048d54240c83c800e8820000008b5d008d5bf43b5d087303ff5520895d00c743fc02000000894304c703030000008b55008d52ec3b55087303ff5520895500c742fc040000008b0c24894a0cc7420801000000895a048b442404890289d083c40cc20800b8e0337e4190ff552cb80100000090|@5441,63|45,0,0 153,0,0 188,0,1 225,0,0 266,1,@5437 299,0,1 336,0,0 358,0,@5439 367,0,0 5437:C2,464|3b650c7303ff552483f80175708b45008d40f43b45087303ff5520894500c740fc02000000c74004010000008b7afc893850505089e68b5a04891e89e689460489e08b72088970088b45008d40f03b45087303ff5520894500c740fc030000008b0c2489088b5c24048958048b4c240889480889c38b45008d40f4eb05e91f0000003b45087303ff5520894500c740fc02000000c7400401000000891883c40cc38b388b7208f7c601000000752a8b5f08f7c30100000075185257ff70048b1b8b0683c800e8ea94ffff83f8017470eb0e5257ff7004eb6c5257ff7004eb6a8b5424088b4d008d49f43b4d087303ff5520894d00c741fc02000000c74104010000008b42fc89018b7c2404ff7204ff72088b5f0489c883c800e842e6ffff50505089e68b5c2410891e89e289420489e18b44240c8941088b7d008d7ff0eb0fe956000000e951000000e94c0000003b7d087303ff5520897d00c747fc030000008b342489378b5c2404895f048b5424088957088b4d008d49f43b4d087303ff5520894d00c741fc020000008b442414894104893989c883c420c38b04248b542408e85afeffff8b5d008d5bf43b5d087303ff5520895d00c743fc020000008943048b542404891389d883c40cc383c800|@5438,63|40,0,0 151,0,0 198,1,@5244 254,0,0 282,1,@5388 5438:S58|50415253455f5452454528292e67656e636f64652837296275696c64416f7428342961646453636f6e737472283429616464436c697374283129 5439:O3|@7320,@224,@5440 5440:S36|61646453636f6e7374723a206261646c792d666f726d656420616e642d6f722074726565 5441:S47|50415253455f5452454528292e67656e636f64652837296275696c64416f7428342961646453636f6e737472283429 5442:S34|50415253455f5452454528292e67656e636f64652837296275696c64416f74283429 5443:C2,36|3b650c7303ff55245250bb03000000b8c0347e418d54240890e83600000083c404c30bc0|@5449,63|11,0,1 16,0,@5444 26,1,@5445 5444:O4|0,@3072,0,0 5445:C2,124|3b650c7303ff55248b7c240483ff017503c204008b378b0e83f9eb754e8b7e048b4c2404f6c3017503ff553889de83c60270f6525053ff7704ff7708ff710456ff72fc8b3c2450ff7424108b4424188b57040bc0ff128b742408897424248b5c24048b54241c83c420eb95b86c357e4183c800ff552cb80100000090|@5448,63|108,0,@5446 119,0,0 5446:O3|@7320,@224,@5447 5447:S30|6d616b6574202d206261646c7920666f726d656420706172736574726565 5448:S43|50415253455f5452454528292e67656e636f64652837296275696c64547265652831296d616b6574283329 5449:S35|50415253455f5452454528292e67656e636f64652837296275696c6454726565283129 5450:C2,332|3b650c7303ff55248b7a0c8b37f7c6010000007503ff553889f183c10270f6890f8b4d008d49ec3b4d087303ff5520894d00c741fc04000000c7410c01000000895908897104c701f9ffffff8b5d008d5be83b5d087303ff5520895d00c743fc05000000c7431001000000c7430c01000000c7430803000000897304c703f7ffffff5256538b55008d52f43b55087303ff5520895500c742fc020000008b7c2414897a04c70201000000518b3083fe01750489d3eb545050ff76048d4c24045189d38b068d54242090e89a0000008b45008d40f43b45087303ff5520894500c740fc020000008b7c240489388b74240889700489c28b342483c40c3b650c7303ff5524eba8bb010000008b55008d52f43b55087303ff5520895500c742fc020000008b0b894a048b042489028b7c24148b730489378957048b542404895708b80100000083c410c208000bc0|@5459,63|60,0,0 72,0,-4 103,0,0 110,0,0 117,0,1 126,0,-5 166,0,0 202,1,@5451 262,0,0 320,0,0 5451:C2,224|3b650c7303ff552489d789c689f083c800e8ba16faff89f9ff70088b042483c800e8d600000083f8017458568b44240490e8060100005050508b79fc51ff30ff7004ff33ff71f48d742414568b5b048b4424248b57080bc0ff128b5c240c8b5424088b4bf8890a8b43fc8b78048b378b54240489328b54241083fa01750a8b3424eb15e9490000008b04248d5424240bc0e8e600000089c68b45008d40f43b45087303ff5520894500c740fc020000008b7c24188978048b54241489108b7c24288937894704b80100000083c424c20400b848397e4190ff552cb80100000090|@5458,63|18,1,@2441 34,1,@5452 50,1,@5454 146,1,@5455 199,0,0 210,0,@5456 219,0,0 5452:C2,20|8b3883ff037506b803000000c3b801000000c390|@5453,33|8,0,1 14,0,0 5453:S5|4c6f63616c 5454:C2,36|8b78048b70088b45008d40f43b45087303ff5520894500c740fc020000008970048938c3|@5453,49| 5455:C2,68|3b650c7303ff552483f80175048b42ecc352ff308b40040bc0e8e2ffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0424890289d083c408c3|@1462,5| 5456:O3|@7320,@224,@5457 5457:S7|73657441646472 5458:S47|50415253455f5452454528292e67656e636f64652837296465636c6172655661727328342973657441646472283329 5459:S37|50415253455f5452454528292e67656e636f64652837296465636c61726556617273283429 5460:O2|@3833,0 5461:O2|@5462,0 5462:O2|-10,@5463 5463:O2|-3,@597 5464:O2|@5465,0 5465:O2|-10,@5466 5466:O2|-3,@5467 5467:O3|100,@2835,0 5468:C2,576|3b650c7303ff55248b7c24045050505253ff7704ff7708ff770c508d742418568b5c243089f88b520c83c800ff128b5c242c8b0424e82202000050bb010000008b44243090e8e603000083f8017402eb148b1c248b44243090e8d203000083f8017502eb398b45008d40f03b45087303ff5520894500c740fc030000008b5424188950088b4c24388948048b7c243089388b54243483c800ff1289c3eb588b5c240c8b1383fafd75618b4b04f7c10100000075478b410483f801752aff742438ff742438ff742438ff74242cff318b5c24248b44242c8b54242883c800e81effffff89c3eb7189c88d54242490e84204000089c3eb66e9e900000089c88d542424e82e04000089c3eb6a83fa0175178b5b048b4424088d54242483c800e8d20e000089c3eb5883faff75588b4b04b80100000083f9017502eb4e8b7d008d7ff43b7d087303ff5520897d00c747fc02000000894704eb0ae988000000e9830000008b31893789f88b49043b650c7303ff5524ebbfe96b000000b801000000e961000000e90e0000008d54242490e85617000089c3eb4e83fa0375138b43048d54242483c800e8b21b000089c3eb368b45008d40f03b45087303ff5520894500c740fc030000008b4c24188948088b7c24388978048b342489308b54243483c800ff1289c38b4b0483f90175068b54241ceb15518b4424208d5424280bc0e83220000089c283c404505089e08b3b893889e68956048b45008d40f43b45087303ff5520894500c740fc020000008b142489108b4c240489480483c42cc214000bc0|@5512,63|54,1,@5469 60,0,0 70,1,@5471 90,1,@5471 238,1,@5473 258,1,@5473 286,1,@5489 303,0,0 378,0,0 398,1,@5505 422,1,@5509 510,1,@5511 5469:C2,396|3b650c7303ff552483f8017502eb0783fb017402eb06b801000000c3f7c00100000075048b38eb1189c7b878d17641ff552c89f8bf01000000f7c30100000075048b33eb1489c6b878d1764183c800ff552c89f0be01000000560bf7f7c6010000005e7503ff55383bfe7571f7c00100000075048b10eb1189c2b878d17641ff552c89d0ba01000000f7c00100000075058b4804eb0db878d17641ff552cb901000000f7c30100000075058b4304eb0fb878d176410bc0ff552cb8010000005289c389c890e836ffffff8b7d008d7ff43b7d087303ff5520897d00eb05e915000000c747fc020000008947048b3424893789f883c404c3f7c00100000075048b10eb1289c2b878d1764190ff552c89d1ba01000000f7c30100000075048b0beb1489c1b878d1764183c800ff552c89c8b9010000005223d1f6c2015a7503ff55383bd17d21f7c00100000075058b7804eb0db878d17641ff552cbf0100000089f8e99afefffff7c30100000075058b7b04eb1289c7b878d1764190ff552c89febf0100000089fbe974feffff|@5470,63|23,0,0 43,0,@1640 53,0,0 72,0,@1640 85,0,0 123,0,@1640 133,0,0 151,0,@1640 159,0,0 177,0,@1640 187,0,0 262,0,@1640 273,0,0 292,0,@1640 305,0,0 339,0,@1640 347,0,0 374,0,@1640 385,0,0 5470:S35|50415253455f5452454528292e67656e636f6465283729696e74657273656374283229 5471:C2,196|3b650c7303ff552483f801751183fb017506b803000000c3b801000000c383fb017506b801000000c3f7c00100000075048b38eb1489c7b878d1764183c800ff552c89f8bf01000000f7c30100000075048b33eb1489c6b878d1764183c800ff552c89f0be01000000560bf7f7c6010000005e7503ff55383bfe7540f7c00100000075058b5004eb0eb878d1764190ff552cba01000000f7c30100000075058b4b04eb0fb878d176410bc0ff552cb90100000089cb89d0e944ffffffb801000000c30bc0|@5472,63|19,0,1 25,0,0 36,0,0 56,0,@1640 69,0,0 88,0,@1640 101,0,0 138,0,@1640 147,0,0 165,0,@1640 175,0,0 189,0,0 5472:S28|50415253455f5452454528292e67656e636f64652837296571283229 5473:C2,208|3b650c7303ff55245250bf0100000083f801750489feeb26f7c7010000007503ff553889fa83c20270f68b400489d73b650c7303ff5524ebd6be010000008b5424048b45008d40e03b45087303ff5520894500c740fc07000000bf54407e4189388970188b3c248978148b7afc8978108b5aec89580c8b4af08948088b4a10894804f7c6010000007503ff553889f183e90270f65150b8010000008d5424100bc0e83e0900008b7c240c8b77f48b5c2410897424108944240c89da8b5f148b470c528b5424048b0c2483c41051ff2290|@5488,63|11,0,0 58,0,0 91,0,@5474 151,0,0 162,1,@5486 5474:C2,452|3b650c7303ff5524505253bb010000008b44241090e8f6fdffff83f8017402eb18bb010000008b44240883c800e8defdffff83f8017502eb3c8b7c24048b45008d40f03b45087303ff5520894500c740fc030000008b7424148970088b1c248958048b54240889108b57048b4c240c83c41851ff226a01bb01000000b8010000008d542410e8560100008b7c2404508b771483fe017510b824ae744183c800ff552cbb0100000083f80175048b1eeb22a8017503ff553889c283ea0270f689d08b76043b650c7303ff5524ebc5bb010000008b5424088b4a108b3983ff0b75105389cb8b4424040bc0e88699faffeb3c83fffb750f5389cb8b44240490e87299faffeb288b45008d40f03b45087303ff5520894500c740fc030000008b3424897008894804c7000d000000538b5d008d5bf43b5d087303ff5520895d00c743fc02000000c74304010000008b5424048913508b44241c83c800e80a0500008b4d008d49f03b4d087303ff5520894d00c741fc03000000bf8c487e4189398b7424108971088941048b5c24208b54240c89542420894c241c8b4c24148b442418894c24188b3c24897c24148b5424048954241089d98b5e0c89c789c88b560883c41057ff22|@5485,63|12,0,0 22,1,@5471 34,0,0 46,1,@5471 120,0,0 125,0,0 134,1,@5475 152,0,@51 163,0,0 206,0,0 234,1,@2830 254,1,@2830 295,0,6 327,0,0 346,1,@5481 375,0,@5483 5475:C2,292|3b650c7303ff55248b7af88b7424048b4f18510bcef6c101597503ff55383bf1750589d8c204005250538b5a0489f00bc0e80a01000083f80174708b4424088b78f88b77148b5c241083fe01750db824ae7441ff552cb80100000083fb0175048b06eb23f6c3017503ff553889da83ea0270f689d38b76043b650c7303ff5524ebc7b8010000008b5424080bc0e8920100008b5424045023c2a801587503ff55383bc27e2c8b4c2410eb05e949000000f6c1017503ff553889cf83c70270f6897c241089cb8b54240883c40ce92fffffff8b4c2410f6c1017503ff553889c883c00270f6894424108b1c2489d08b54240883c40ce907ffffff8b442410a8017503ff553889c783c70270f6897c24108b1c248b4424048b54240883c40ce9defeffff0bc0|@5480,63|50,1,@5476 79,0,@51 87,0,0 131,0,0 142,1,@5478 5476:C2,160|3b650c7303ff552483fb017506b801000000c3f7c30100000075048b3beb1289c7b878d1764190ff552c89f8bf01000000500bc7a801587503ff55383bc77506b803000000c3f7c30100000075048b33eb1389c6b878d176410bc0ff552c89f0be010000005023c6a801587503ff55383bc67d06b801000000c3f7c30100000075058b5304eb1089c3b878d1764190ff552cba0100000089d3e962ffffff0bc0|@5477,61|14,0,0 34,0,@1640 45,0,0 65,0,1 85,0,@1640 97,0,0 117,0,0 138,0,@1640 147,0,0 5477:S32|50415253455f5452454528292e67656e636f6465283729696e73696465283229 5478:C2,432|3b650c7303ff55248b78048b3783fefd7554528b5f04b90100000083fb01750689c883c404c351ff73048b038b54240890e8caffffff8b7c24045023c7a801587503ff55383bc77e0489c6eb0289fe89f18b1c2483c4083b650c7303ff5524ebbab801000000e90400000083c40cc3578b5afc8b400c83c800e8baf7ffff50bb0100000090e882f9ffff83f801746b8b5c24048b1383fa01754ab9010000008b430483f801750489cfeb23f6c1017503ff553889ce83c60270f68b400489f13b650c7303ff5524ebd9bf01000000f7c7010000007503ff553889f883c00270f683c408c383faff754fb9010000008b430483f801750989cfeb28e991000000f6c1017503ff553889ce83c60270f68b400489f13b650c7303ff5524ebd4bf01000000f7c7010000007503ff553889f883c00270f683c408c383fa03754ab9010000008b430483f801750489cfeb23f6c1017503ff553889ce83c60270f68b400489f13b650c7303ff5524ebd9bf01000000f7c7010000007503ff553889f883c00270f683c408c3b80100000083c408c38b1c24f7c30100000075068b0383c408c3b878d1764190ff552cb80100000090|@5479,63|23,0,0 98,0,0 122,1,@5469 128,0,0 134,1,@5471 155,0,0 202,0,0 234,0,0 286,0,0 318,0,0 365,0,0 392,0,0 418,0,@1640 427,0,0 5479:S66|50415253455f5452454528292e67656e636f6465283729636f64655061747428372970617474436f64652d6465737061746368283429706174744465707468283129 5480:S68|50415253455f5452454528292e67656e636f6465283729636f64655061747428372970617474436f64652d646573706174636828342966696e6444656570657374283329 5481:C2,396|3b650c7303ff552483f8017506b801000000c383fb017501c3f7c00100000075048b38eb1489c7b878d1764183c800ff552c89f8bf01000000f7c30100000075048b33eb1489c6b878d1764183c800ff552c89f0be01000000560bf7f7c6010000005e7503ff55383bfe7540f7c00100000075058b5004eb0eb878d1764190ff552cba01000000f7c30100000075058b4b04eb0fb878d176410bc0ff552cb90100000089cb89d0e954fffffff7c00100000075048b10eb1189c2b878d17641ff552c89d1ba01000000f7c30100000075048b0beb1489c1b878d1764183c800ff552c89c8b9010000005223d1f6c2015a7503ff55383bd17d6bf7c00100000075048b38eb1489c7b878d1764183c800ff552c89febf01000000f7c00100000075058b7004eb0db878d17641ff552cbe010000005789f083c800e8c2feffff8b5d008d5bf43b5d087303ff5520895d00c743fc020000008943048b1424891389d883c404c3f7c30100000075058b7b04eb1489c7b878d1764183c800ff552c89febf0100000089fbe974feffff|@5482,63|14,0,0 40,0,@1640 53,0,0 72,0,@1640 85,0,0 122,0,@1640 131,0,0 149,0,@1640 159,0,0 187,0,@1640 197,0,0 216,0,@1640 229,0,0 264,0,@1640 277,0,0 295,0,@1640 303,0,0 372,0,@1640 385,0,0 5482:S30|50415253455f5452454528292e67656e636f646528372964696666283229 5483:C2,32|3b650c7303ff55248b78088b3424893c24ff72048b58048b008b520856ff2290|@5484,63| 5484:S57|50415253455f5452454528292e67656e636f6465283729636f64655061747428372970617474436f64652d6465737061746368283129283129 5485:S54|50415253455f5452454528292e67656e636f6465283729636f64655061747428372970617474436f64652d6465737061746368283429 5486:C2,96|3b650c7303ff55248b7af45023c7a801587503ff55383bc77e06b801000000c3a8017503ff553889c683c60270f6525089f083c800e8c6ffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0424890289d083c408c3|@5487,53|27,0,0 5487:S30|50415253455f5452454528292e67656e636f646528372966726f6d283229 5488:S45|50415253455f5452454528292e67656e636f6465283729636f64655061747428372970617474436f64652d2f32 5489:C2,1028|3b650c7303ff552483fb01752e8b45008d40f03b45087303ff5520894500c740fc030000008b7af48978088b72148970048b5adc89188b5210ff228b3b525057ff73048b5a0c8b0790e81af2ffff50bb0100000090e8e2f3ffff83f80174118b5c24048b44240c8b54241083c414eb908b74240c83fe0375718b5c24088b5424108b4af08b41048b38ff7304578b73088b5afc89f0ba484e7e4183c800e88a0300008b5c2414508b5bdc8b44240883c800e832ceffff8b5424188b4a148b7c241c894c241c8b721089742418894424148b1c24895c24108b4424048944240c8b5aec8b42f48b52f0eb05e90600000083c40c57ff228b5c24088b5424108b4af08b41048b38578b7b088b5afc89f8ba8c507e410bc0e8560500008b7424088b5c24108b53f08b4a048b3950ff7604578b5bfc8b4608ba484e7e4183c800e8ea0200008b742418508b5edc8b44240c83c800e892cdffff8b5c241cff7314ff731050ff74240cff7424148b53ec8b4bf48b43f089d389c789c889fa0bc0ff128b742418f7c6010000007503ff553889f383eb0270f65089da8b5c241489d08b542420e85afeffff8b4c24208b79ec83ff0174648b75008d76f43b75087303ff5520897500c746fc02000000c74604010000008b5c240c891e8b55008d52ec3b55087303ff5520895500c742fc04000000c7420c03000000bb48777841895a08897204c702090000008b580483fb01750cbe786c7c41eb32e9b30000008b730483fe0175048b33eb218b75008d76f43b75087303ff5520897500c746fc02000000895e04c706130000008b4d008d49ec3b4d087303ff5520894d00c741fc04000000bff825754189790c897108895104c701050000008b34248b55008d52f43b55087303ff5520895500c742fc020000008b7e04897a04890a505089e1c701ffffffff89e18951048b45008d40f43b45087303ff5520894500c740fc020000008b1c2489188b54240489500483c42cc38b34248b1e8b10530bdaf6c3015b7503ff55383bda7511f6c3017503ff553883fb017c0483c424c38b4e0483f901750989c7b8786c7c41eb358b790483ff01750689c28b01eb24508b45008d40f43b45087303ff5520894500c740fc02000000894804c70013000000eb0452eb01578b14248b7a0483ff017507bf786c7c41eb308b5f0483fb0175048b3feb248b7d008d7ff43b7d087303ff5520897d00c747fc020000008b5a04895f04c707130000008b55008d52ec3b55087303ff5520895500c742fc04000000897a0c8942088b442410894204c702050000008b7d008d7ff43b7d087303ff5520897d00c747fc02000000c74704010000008917505089e3c703ffffffff89e2897a048b45008d40f43b45087303ff5520894500c740fc020000008b3c2489388b5c240489580483c430c30bc0|@5504,63|74,1,@5469 80,0,0 86,1,@5471 150,0,@5490 158,1,@5491 178,1,@5388 271,0,@5499 278,1,@5500 310,0,@5490 318,1,@5491 338,1,@5388 461,0,0 498,0,1 503,0,@2551 515,0,4 528,0,@4502 580,0,9 609,0,@408 624,0,2 669,0,-1 769,0,@4502 819,0,9 841,0,@4502 891,0,9 934,0,2 965,0,0 977,0,-1 5490:O2|@5491,@5032 5491:C2,352|3b650c7303ff55248b7804f7c70100000075708b3783fe01756e5368c8cc744168d04f7e416a018b5c24148b52040bc0ff128b1083fa0b751189c3b80500000090e82e8cfaff89c3eb4c83fafb751389c3b80500000083c800e8168cfaff89c3eb348b5d008d5bf03b5d087303ff5520895d00c743fc03000000c7430805000000eb0ae96b000000e95e000000894304c7030d0000008b4d008d49f43b4d087303ff5520894d00c741fc02000000c74104010000008b042489018b45008d40ec3b45087303ff5520894500c740fc04000000c7400c01000000895808894804c7000900000083c404c20400b89c317541c2040083ff0175598b3383fe0b7511b8050000008b142483c40852e9648bfaff83fefb7511b8050000008b142483c40852e94e8bfaff8b45008d40f03b45087303ff5520894500c740fc03000000c7400805000000895804c7000d000000c20400b844507e4190ff552cb80100000090|@5498,63|28,0,@202 33,0,@5492 60,0,2 66,1,@2830 82,0,2 90,1,@2830 125,0,2 146,0,6 177,0,0 213,0,0 225,0,4 236,0,@487 256,0,2 268,1,@2830 278,0,2 290,1,@2830 321,0,2 330,0,6 338,0,@5496 347,0,0 5492:O10|@7398,@7399,@7400,@7401,@618,@5493,@7402,@7397,@607,0 5493:O1|@5494 5494:C2,8|b801000000c30bc0|@5495,1|1,0,0 5495:S18|4c45585f28292e6e756c6c4c65782d283129 5496:O3|@7320,@224,@5497 5497:S11|6d616b65496e7665727365 5498:S26|56414c55455f4f505328292e6d616b65496e7665727365283329 5499:O2|@5500,@5032 5500:C2,492|3b650c7303ff55248b7804f7c70100000075715368c8cc744168d04f7e416a018b5c24148b520490ff128b1883fb0b751189c3b80100000090e8f289faff89c6eb4083fbfb751389c3b80100000083c800e8da89faff89c6eb288b75008d76f03b75087303ff5520897500c746fc03000000c7460801000000894604c7060d000000eb05e9550000008b55008d52f43b55087303ff5520895500c742fc02000000c74204010000008b0c24890a8b45008d40ec3b45087303ff5520894500c740fc04000000c7400c03000000897008895004c7000900000083c404c2040083ff0175708b0b83f90b75105250b801000000e83a89faff89c6eb4283f9fb75135250b80100000083c800e82289faff89c6eb2a8b75008d76f03b75087303ff5520897500c746fc03000000c7460801000000895e04c7060d00000052508b4424045668c8cc744168d04f7e416a018b5c241ceb05e9850000008b78048b44241089fa83c800ff128b75008d76f43b75087303ff5520897500c746fc02000000c746040100000089068b5d008d5bf43b5d087303ff5520895d00c743fc020000008973048b142489138b45008d40ec3b45087303ff5520894500c740fc04000000c7400c03000000b9d4e47d41894808895804c7000900000083c40cc20400b8a0527e4190ff552cb80100000090|@5503,63|21,0,@202 26,0,@5492 52,0,0 58,1,@2830 74,0,0 82,1,@2830 117,0,0 126,0,6 164,0,0 200,0,1 212,0,4 237,0,0 242,1,@2830 258,0,0 266,1,@2830 301,0,0 310,0,6 322,0,@202 327,0,@5492 385,0,0 450,0,1 455,0,@5285 467,0,4 478,0,@5501 487,0,0 5501:O3|@7320,@224,@5502 5502:S9|6d616b654775617264 5503:S24|56414c55455f4f505328292e6d616b654775617264283329 5504:S47|50415253455f5452454528292e67656e636f6465283729636f64655061747428372967656e436f6e73747273283229 5505:C2,936|3b650c7303ff552483f801752e8b45008d40f03b45087303ff5520894500c740fc030000008b7af48978088b72148970048b5adc89188b5210ff228b385257ff70048b5a0c8b070bc0e826e9ffff50bb0100000090e8eeeaffff83f801740d8b4424048b54240c83c410eb948b4424048b54240c90e886ffffff8b74240c8b5ef08b55008d52ec3b55087303ff5520895500c742fc04000000b9e0567e41890a8b7eec897a0c8b4b08894a088942048b5c24088b4c240c8b79f08b77048b3e5052578b73088b59fc89f0ba8c507e410bc0e8a6fcffff8b5c24108b5424148b4af08b79048b3750ff7304568b73088b5afc89f0ba484e7e4190e83afaffff8b5c241cff742408ff7310ff74241850ff7424108b53ec8b4bf48b43f089d389c789c889fa90ff128b74241c8b5eec83fb0174688b55008d52f43b55087303ff5520895500c742fc02000000c74204010000008b4c2404890a8b7d008d7fec3b7d087303ff5520897d00c747fc04000000c7470c03000000b948777841894f08895704c707090000008b54240c8b4a0483f901750cb9786c7c41eb35e9b30000008b710483fe0175048b09eb248b4d008d49f43b4d087303ff5520894d00c741fc020000008b5a04895904c701130000008b55008d52ec3b55087303ff5520895500c742fc04000000bef825754189720c894a08897a04c702050000008b5d008d5bf43b5d087303ff5520895d00c743fc020000008b4804894b048913505089e7c707ffffffff89e6895e048b45008d40f43b45087303ff5520894500c740fc020000008b1c2489188b54240489500483c428c38b54240c8b088b3a510bcff6c101597503ff55383bcf7513f6c1017503ff553883f9017c0689d083c420c38b700483fe017507b8786c7c41eb2d8b5e0483fb0175048b06eb218b45008d40f43b45087303ff5520894500c740fc02000000897004c700130000008b4d008d49ec3b4d087303ff5520894d00c741fc04000000be982d7b4189710c8941088b5c2404895904c701050000008b44240c8b580483fb017507be786c7c41eb2d8b730483fe0175048b33eb218b75008d76f43b75087303ff5520897500c746fc02000000895e04c706130000008b55008d52f03b55087303ff5520895500c742fc03000000897208894a04c702010000008b4d008d49f43b4d087303ff5520894d00c741fc02000000c74104010000008911505089e7c707ffffffff89e6894e048b45008d40f43b45087303ff5520894500c740fc020000008b1c2489188b54240489500483c428c383c800|@5508,63|74,1,@5469 80,0,0 86,1,@5471 154,0,@5506 203,0,@5499 210,1,@5500 244,0,@5490 250,1,@5491 333,0,0 370,0,1 375,0,@2551 387,0,4 404,0,@4502 459,0,9 488,0,@408 503,0,2 545,0,-1 646,0,@4502 693,0,9 722,0,@3833 741,0,2 758,0,@4502 805,0,9 841,0,0 872,0,0 884,0,-1 5506:C2,16|8b420c83f80174048b4204c38b4208c3|@5507,5| 5507:S64|50415253455f5452454528292e67656e636f6465283729636f64655061747428372967656e45786e436f6e73747273283129636f646544656661756c74283129 5508:S50|50415253455f5452454528292e67656e636f6465283729636f64655061747428372967656e45786e436f6e73747273283129 5509:C2,1144|3b650c7303ff552483f801752e8b45008d40f03b45087303ff5520894500c740fc030000008b7af48978088b72148970048b5adc89188b5210ff228b385257ff70048b5a0c8b470490e8b2e4ffff50bb0100000090e87ae6ffff83f801740d8b4424048b54240c83c410eb948b7424088b560883fa017507bb9c317541eb238b5d008d5bf43b5d087303ff5520895d00c743fc020000008b0a894b04c703fbffffff8b44240c8b7d008d7ff43b7d087303ff5520897d00c747fc02000000c74704010000008b48fc890f8b55008d52f43b55087303ff5520895500c742fc02000000897a04891a8b7d008d7ff43b7d087303ff5520897d00c747fc02000000895704c70715000000ff365783fa017507be03000000eb208b1a8b0b83f9fb75128b52043b650c7303ff5524ebdebe01000000be0100000083fe01742f8b04240bc0e83287faff89c78b45008d40f43b45087303ff5520894500c740fc02000000897804c700fbffffffeb038b04248b7d008d7ff43b7d087303ff5520897d00c747fc02000000c747040100000089078b75008d76ec3b75087303ff5520897500c746fc04000000c7460c030000008b5c2404895e08897e04c706090000008b54241456ff72108b5adc8b442410e8aebfffff8b4c241c89c78b45008d40f03b45087303ff5520894500c740fc030000008b71f48970088b591489580489388b142483c800ff12508b4424188b5424200bc0e8eafdffff8b5424208b4aec83f90174648b7d008d7ff43b7d087303ff5520897d00c747fc02000000c74704010000008b74240889378b5d008d5bec3b5d087303ff5520895d00c743fc04000000c7430c03000000be48777841897308897b04c703090000008b700483fe01750cbf786c7c41eb32e9b30000008b7e0483ff0175048b3eeb218b7d008d7ff43b7d087303ff5520897d00c747fc02000000897704c707130000008b55008d52ec3b55087303ff5520895500c742fc04000000b9f8257541894a0c897a08895a04c702050000008b3c248b5d008d5bf43b5d087303ff5520895d00c743fc020000008b4f04894b048913505089e2c702ffffffff89e2895a048b45008d40f43b45087303ff5520894500c740fc020000008b342489308b5c240489580483c42cc38b3c248b378b18530bdef6c3015b7503ff55383bf37514f7c6010000007503ff553883fe017c0483c424c38b570483fa01750989c1b8786c7c41eb358b4a0483f901750689c38b02eb24508b45008d40f43b45087303ff5520894500c740fc02000000895004c70013000000eb0453eb01518b1c248b4b0483f9017507b9786c7c41eb308b710483fe0175048b09eb248b4d008d49f43b4d087303ff5520894d00c741fc020000008b7304897104c701130000008b5d008d5bec3b5d087303ff5520895d00c743fc04000000894b0c8943088b4c240c894b04c703050000008b45008d40f43b45087303ff5520894500c740fc02000000c74004010000008918505089e6c706ffffffff89e38943048b45008d40f43b45087303ff5520894500c740fc020000008b0c2489088b74240489700483c430c383c800|@5510,63|74,1,@5469 80,0,0 86,1,@5471 121,0,@487 158,0,-3 193,0,0 260,0,10 273,0,1 302,0,0 307,0,0 322,1,@2837 357,0,-3 393,0,0 426,0,1 442,0,4 462,1,@5388 573,0,0 610,0,1 615,0,@2551 627,0,4 640,0,@4502 692,0,9 721,0,@408 736,0,2 781,0,-1 884,0,@4502 934,0,9 956,0,@4502 1006,0,9 1049,0,2 1080,0,0 1092,0,-1 5510:S57|50415253455f5452454528292e67656e636f6465283729636f64655061747428372970617474436f64652d666f6c64436f6e73747273283129 5511:C2,68|3b650c7303ff552483f80175048b42d8c352ff308b40040bc0e8e2ffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0424890289d083c408c3|@1462,5| 5512:S34|50415253455f5452454528292e67656e636f6465283729636f646550617474283729 5513:C2,1008|8d7c24983b7d0c7303ff55288b7c240483ff017508b801000000c220008b378b0e83f9eb755b8b7e048b4c24048b742408f7c6010000007571525053ff37ff7704ff7104ff36ff7604bf010000008b54240483fa01750489f9eb2bf7c7010000007503ff553889f883c00270f68b520489c73b650c7303ff5524ebd6b901000000e9590300008b442430a8017503ff553889c783ef0270f6f7c7010000007503ff553883ff017d07eb1de9230300008b7424348b1e5323dff6c3015b7503ff55383bfb7d02eb10b824ae744183c800ff552cbe01000000f7c7010000007503ff553889fa83c20270f68b5c56fe89de83fe017542515756bbffffffff90e8cab8f6ff89c3b800617e41e8b6b4f6ffbb10617e410bc0e8aab4f6ffff742424ff74241c50bb010000008b44242c90e896ebf9ff89c2eb08ba010000005157568b4c24288b41048b38f7c7010000007503ff553889fe83c60270f689308b5d008d5bf03b5d087303ff5520895d00c743fc030000008b542448895308c74304010000008b7c2408893b8b74241083fe01750489daeb59505050ff76048d4c2404518b068d542440e88a0200008b45008d40f03b45087303ff5520894500c740fc030000008b7c240489388b7424088970048b5c240c89580889c38b342483c4103b650c7303ff5524eba3ba010000008b45008d40ec3b45087303ff5520894500c740fc040000008b4c241889480c8b7c24448978088b72088970048b5c241c8918ff72048b5424500bc0ff128b55008d52f43b55087303ff5520895500c742fc02000000c7420401000000890283fa0175058b0c24eb16528b4424048d54243483c800e8e203000089c183c4048b45008d40f43b45087303ff5520894500c740fc02000000894804c700130000008b7c242c8b77048b1ef6c3017503ff553889da83ea0270f689168b5c240483fb037507b99c637e41eb05b9ac457d418b16505152bb5f0000008b442454e8f6b2f6ff50bbffffffff8b44245090e8eeb6f6ff89c38b04240bc0e8dab2f6ff89c18b45008d40ec3b45087303ff5520894500c740fc0400000089480c8b7c241c8978088b7424048970048b5c240c89188b54240890ff128b54244c8b4c241889d723f9f7c7010000007503ff55388d7aff03f970f68b75008d76ec3b75087303ff5520897500c746fc04000000c7460c01000000894608897e04c706f9ffffff8b5c2450f6c3017503ff553889d983c10270f656ff742464ff742464ff742464ff7424645152ff74243cff7424488b5c24588b44245c8b542460e856fcffff8b7d008d7ff43b7d087303ff5520897d00c747fc020000008947048b3424893789f883c444c22000b84c647e41ff552cb801000000b84c647e4183c800ff552cb80100000090|@5525,63|22,0,0 74,0,0 125,0,0 200,0,@51 211,0,0 248,0,-1 254,1,@336 261,0,@5514 266,1,@323 271,0,@5515 278,1,@323 292,0,0 302,1,@2429 311,0,0 381,0,0 422,1,@5516 489,0,0 581,0,0 610,1,@5519 648,0,9 688,0,@5520 695,0,@4940 705,0,47 714,1,@323 720,0,-1 730,1,@336 742,1,@323 859,0,0 871,0,-4 979,0,@5523 987,0,0 992,0,@5523 1003,0,0 5514:S8|5061747465726e20 5515:S14|20697320726564756e64616e742e 5516:C2,356|3b650c7303ff552489d789c689f083c800e8feecf9ff89f9ff70088b042483c800e81ad7ffff83f8017470568b44240490e84ad7ffff8b3bbe0100000089fa23d6f6c2017503ff553889f22bd78d520170f48b75008d76e83b75087303ff5520897500c746fc05000000c7461001000000c7460c01000000c7460803000000895604c706f7ffffff5050508b51fc51ff30ff700457ff730456eb05e9b40000008d442418508b5b088b4424288b520890ff128b7c2404be0100000089fb23def6c3017503ff553889f32bdf8d5b0170f48b54240c891a8b4c24108b41fc8b70048b1e8b542408891af7c7010000007503ff553889fb83eb0270f68b7c241483ff0175058b1424eb108b04248d5424280bc0e86a00000089c28b75008d76f43b75087303ff5520897500c746fc020000008b4c241c894e048b44241889068b7c242c891f895704897708b80100000083c428c20400b848397e410bc0ff552cb80100000090|@5518,63|18,1,@2441 34,1,@5452 50,1,@5454 57,0,0 109,0,0 116,0,0 123,0,1 132,0,-5 183,0,0 274,1,@5517 330,0,0 341,0,@5456 351,0,0 5517:C2,68|3b650c7303ff552483f80175048b42ecc352ff308b40040bc0e8e2ffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0424890289d083c408c3|@1462,5| 5518:S43|50415253455f5452454528292e67656e636f64652837296367457870732831302973657441646472283329 5519:C2,68|3b650c7303ff552483f80175048b42ccc352ff308b40040bc0e8e2ffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0424890289d083c408c3|@1462,5| 5520:O1|@5521 5521:C2,108|8b7d008d7fdc3b7d087303ff5520897d00c747fc08000000c7471c01000000c7471801000000c74714010000008b7008897710c7470c010000008b5804895f088b500c8957048b08890f8b45008d40f43b45087303ff5520894500c740fc02000000897804c700f3ffffffc3|@5522,63|27,0,0 34,0,0 41,0,0 54,0,0 103,0,-7 5522:S23|434f44455452454528292e6d6b496e6c70726f63283129 5523:O3|@7320,@224,@5524 5524:S6|636745787073 5525:S33|50415253455f5452454528292e67656e636f646528372963674578707328313029 5526:C2,928|8d7c24a03b7d0c7303ff5528525053bf0100000083fb01750489feeb26f7c7010000007503ff553889fa83c20270f68b5b0489d73b650c7303ff5524ebd6be010000008b5c2408568b4424048b531c90ff12508b442408ba54687e41ff128b542408f7c20100000075238b3a8b3783feeb75088b5f048b4b04eb2689c3b8503d754190ff552cb901000000eb1489c1b8503d754183c800ff552c89c8b9010000008b5424108b72148b1e50505051538d7c240c578b5a188b4424440bc0e88600ffff8b7424208b5e148b038b54240c90ff128b5424208b4a108b398b74241489fb23def6c3017503ff55388d5fff03de70f68919f7c6010000007503ff553889f383c30270f650576a0153bb810000008b042483c4040bc0ff15a092040889308b55008d52f83b55087303ff5520895500c742fc01000040c702030000008b4c243083f90174288b7d008d7ff43b7d087303ff5520897d00c747fc02000000bb946a7e41891f8b5c2404895f04eb2c8b7c24288b5f0c8b7d008d7ff03b7d087303ff5520897d00c747fc03000000be686b7e418937895708895f0489c35257b8030000008d54243490e84e0500008b55008d52dc3b55087303ff5520895500c742fc08000000bf106c7e41893a895a1c8b7424248972188b7c2414897a148b7424088972108b7c2428897a0c8b7c243c897a088b7424448972048b4d008d49f43b4d087303ff5520894d00c741fc02000000be1c717e4189318951048b54243053ff7424045150ff74241cff742434bb010000008b4424588b520890ff128b4c24088b3983ff01752150ff742434ff74241c6888717e41bb010000008b44245c90e8bee2f9ff89c6eb06be01000000508b74242c83fe03756d8b1c248b4b0483f90175068b542420eb15518b4424248d5424400bc0e87a0a000089c283c40483fa01750bb8786c7c4183c43cc218008b420483f80175088b0283c43cc218008b45008d40f43b45087303ff5520894500c740fc02000000895004c7001300000083c43cc218008b5c2438ff742444ff74244cff742454ff7424106a03ff742424ff742434ff74244c8b53048b5c24708b44245490ff128b0c248b710483fe01750489c7eb12568d54244083c800e8420a000089c783c40483ff0175068b5c2420eb15578b4424248d5424400bc0e8820a000089c383c40483fb01750bb8786c7c4183c43cc218008b530483fa0175088b0383c43cc218008b45008d40f43b45087303ff5520894500c740fc02000000895804c7001300000083c43cc218000bc0|@5551,63|16,0,0 63,0,0 88,0,@5527 126,0,@597 135,0,0 144,0,@597 157,0,0 190,1,@5018 268,0,64 282,0,I11 314,0,1 352,0,@5533 399,0,@5535 416,0,1 426,1,@5536 455,0,@5537 531,0,@5545 560,0,0 595,0,@5547 600,0,0 610,1,@2429 619,0,0 662,1,@5548 677,0,@4502 732,0,9 814,1,@5549 846,1,@5550 861,0,@4502 916,0,9 5527:O1|@5528 5528:C2,120|3b650c7303ff552483f8017506b801000000c38b388b1f83fbeb751a8b5704ff70048b5a08b80100000083c800e86200000089c6eb118b5004b8586a7e4190ff552cbe01000000568b44240490e8aeffffff8b4d008d49f43b4d087303ff5520894d00c741fc020000008941048b0424890189c883c408c3|@413,63|14,0,0 38,0,0 46,1,@5529 58,0,@5531 67,0,0 5529:C2,288|3b650c7303ff55248b3b83fff1753e8b73088b1689c15289d0e82a7cf9ff83f801740689c883c404c38b45008d40f43b45087303ff5520894500c740fc020000008948048b3c24893883c404c383ff1b752d8b730483fe017501c3ff76048b1e90e89affffff8b342483c4043b650c7303ff5524ebdfb80100000083c404c383ff11752f8b730c83fe017501c38b1eff76048b5b04e866ffffff8b342483c4043b650c7303ff5524ebddb80100000083c404c383ff0375088b5b08e940ffffff83ff13752e8b730483fe017501c3ff76048b1e0bc0e826ffffff8b342483c4043b650c7303ff5524ebdeb80100000083c404c383fffb75088b5b08e900ffffff83ffef7518ff73088b5b040bc0e8eefeffff8b1c2483c404e9e3feffffc30bc0|@5530,63|26,1,@2249 119,0,0 171,0,0 235,0,0 5530:S34|50415253455f5452454528292e67656e636f646528372966696e6456617273283229 5531:O3|@7320,@224,@5532 5532:S36|66696e64416c6c56617273202d206261646c7920666f726d656420706172736574726565 5533:C2,124|8b45008d40f43b45087303ff5520894500c740fc020000008b7a04897804c700edffffff8b75008d76f43b75087303ff5520897500c746fc02000000c74604010000008906505089e0c7000100000089e08970048b45008d40f43b45087303ff5520894500c740fc020000008b342489308b74240489700483c408c3|@5534,53|32,0,-10 63,0,0 75,0,0 5534:S50|50415253455f5452454528292e67656e636f6465283729636f64654d61746368283829636f646544656661756c742d283129 5535:C2,16|8b4208c700010000008b4204c383c800|@5534,5|5,0,0 5536:C2,96|3b650c7303ff55248b7af05023c7a801587503ff55383bc77e06b801000000c3a8017503ff553889c683c60270f6525089f083c800e8c6ffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0424890289d083c408c3|@5487,53|27,0,0 5537:C2,832|3b650c7303ff5524525053bb0100000090e83ed2ffff83f8017412b8010000008b14248b7c240c83c41457ff228b7c2404f7c70100000075048b37eb0eb878d1764190ff552cbe01000000f7c6010000007503ff553889f383eb0270f68b542408f6c3017503ff553883fb017d02eb178b4a1c8b015323d8f6c3015b7503ff55383bd87d02eb10b824ae744183c800ff552cb901000000f6c3017503ff553889df83c70270f68b4479fe89c1f6c1017503ff553889cf83c70270f6f6c3017503ff553883fb017d02eb178b4a1c8b015323d8f6c3015b7503ff55383bd87d02eb09b824ae744190ff552cf6c3017503ff553889d883c00270f6897c41fe8b7a1883ff0375728b5a0cf7c301000000756c8b038b0883f9eb75688b78048b5424088b45008d40ec3b45087303ff5520894500c740fc040000008b4f0489480c8b5a048958088b4c24108948048b1f8918568b520890ff128b55008d52f43b55087303ff5520895500c742fc02000000c7420401000000eb0fe963000000e94e000000e93b0000008902505089e18b442408890189e78957048b45008d40f43b45087303ff5520894500c740fc020000008b342489308b5c240489580483c418c20400b86c6f7e4190ff552cb801000000b86c6f7e4183c800ff552cb80100000056538b421483f801750eb824ae744190ff552cbf0100000083fb0175048b38eb23f6c3017503ff553889de83ee0270f689f38b40043b650c7303ff5524ebc6bf0100000057be0100000083ff01750489f3eb26f7c6010000007503ff553889f283c20270f68b7f0489d63b650c7303ff5524ebd6bb0100000089da8b1c2489d00bc0e8320100008b4c24148b79108b74240489fb23def6c3017503ff55388d5fff03de70f68b55008d52e83b55087303ff5520895500c742fc05000000c7421001000000c7420c01000000c7420803000000895a04c702f7ffffff8b75008d76ec3b75087303ff5520897500c746fc04000000c7460c01000000895608894604c706090000008b5d008d5bf43b5d087303ff5520895d00c743fc02000000c74304010000008933505089e28b442410890289e6895e048b45008d40f43b45087303ff5520894500c740fc020000008b1c2489188b54240489500483c420c2040090|@5544,63|12,0,0 18,1,@5471 28,0,0 62,0,@1640 71,0,0 136,0,@51 147,0,0 226,0,@51 369,0,0 450,0,@5538 459,0,0 464,0,@5538 475,0,0 490,0,@51 499,0,0 543,0,0 549,0,0 596,0,0 610,1,@5540 671,0,0 678,0,0 685,0,1 694,0,-5 725,0,0 737,0,4 768,0,0 5538:O3|@7320,@224,@5539 5539:S34|636f64654d61746368202d206261646c7920666f726d656420706172736574726565 5540:C2,208|3b650c7303ff552483fb017506b801000000c389c78b030bc0e876def9ff89fe8b480889c8e896c8ffff83f80174705689c883c800e8c6c8ffff8b388b378b55008d52e83b55087303ff5520895500c742fc05000000c7421001000000c7420c01000000c7420803000000897204c702f7ffffff8b0c24f6c1017503ff553889ce83ee0270f6528b5b0489f090e86effffff8b5d008d5bf43b5d08730aeb05e91b000000ff5520895d00c743fc020000008943048b1424891389d883c408c3b894707e4183c800ff552cb80100000090|@5543,63|14,0,0 26,1,@2441 38,1,@5452 54,1,@5454 89,0,0 96,0,0 103,0,1 112,0,-5 192,0,@5541 203,0,0 5541:O3|@7320,@224,@5542 5542:S11|6d616b654172674c697374 5543:S37|50415253455f5452454528292e67656e636f64652837296d616b654172676c697374283229 5544:S43|50415253455f5452454528292e67656e636f6465283729636f64654d61746368283829636f64652d283329 5545:C2,28|3b650c7303ff55248b78088b3424893c248b58048b008b520456ff22|@5546,63| 5546:S43|50415253455f5452454528292e67656e636f6465283729636f64654d61746368283829636f64652d283129 5547:S27|4d61746368657320617265206e6f7420657868617573746976652e 5548:C2,68|3b650c7303ff552483f80175048b42c0c352ff308b40040bc0e8e2ffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0424890289d083c408c3|@1462,5| 5549:C2,68|3b650c7303ff552483f80175048b42c0c352ff308b40040bc0e8e2ffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0424890289d083c408c3|@1462,5| 5550:C2,68|3b650c7303ff552483f80175048b42c0c352ff308b40040bc0e8e2ffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0424890289d083c408c3|@1462,5| 5551:S35|50415253455f5452454528292e67656e636f6465283729636f64654d61746368283829 5552:C2,308|3b650c7303ff552452505368c0347e41ff742418bb030000008b4424088b5214ff128b7c24088b77048b1e505050538d542408528b5f108b44242c0bc0e8a6f2feff8b4c24148b41048b3889f88b54240883c800ff128b75008d76f83b75087303ff5520897500c746fc01000040c706030000008b5c24148b55008d52f03b55087303ff5520895500c742fc03000000b948747e41890a8972088b7b0c897a04565268ac747e41680003754150ff7424148b5308bb030000008b44242883c800ff128b0c248b3983ff0175368b7424188b5e048b13f6c2017503ff553883fa017e2050ff742424ff742418686c757e41bb010000008b44243ce8c6d5f9ff89c1eb06b901000000508b34248b5e0483fb01750a8b44240c83c420c21000538b4424108d54242483c800e86a01000083c424c21000|@5560,63|12,0,@5444 21,0,1 62,1,@5018 112,0,1 145,0,@5553 163,0,@5555 168,0,@312 181,0,1 236,0,@5558 241,0,0 250,1,@2429 259,0,0 298,1,@5559 5553:C2,16|8b4208c700010000008b4204c383c800|@5554,5|5,0,0 5554:S48|50415253455f5452454528292e67656e636f6465283729636f646542696e64283629636f646544656661756c74283129 5555:O1|@5556 5556:C2,104|3b650c7303ff5524ff7004bb010000008b0083c800e896c9ffff83f801740db8010000008b142483c404ff22505089e7c707ffffffff89e6c74604010000008b45008d40f43b45087303ff5520894500c740fc020000008b1c2489188b54240489500483c40cc390|@5557,63|12,0,0 22,1,@5471 32,0,0 50,0,-1 59,0,0 5557:S42|50415253455f5452454528292e67656e636f6465283729636f646542696e64283629636f64652d283129 5558:S26|5061747465726e206973206e6f7420657868617573746976652e 5559:C2,68|3b650c7303ff552483f80175048b42dcc352ff308b40040bc0e8e2ffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0424890289d083c408c3|@1462,5| 5560:S34|50415253455f5452454528292e67656e636f6465283729636f646542696e64283629 5561:C2,2060|8d7c24a43b7d0c7303ff55288b7d008d7fcc3b7d087303ff5520897d00c747fc0c000040be447e7e418937c7470401000000c7470801000000c7470c01000000c7471001000000c7471401000000c7471801000000c7471c01000000c7472001000000c7472401000000c7472801000000c7472c010000008b75008d76e03b75087303ff5520897500c746fc07000040b984957e41890ec7460401000000c7460801000000c7460c01000000c7461001000000c7461401000000c74618010000008b4d008d49e43b4d087303ff5520894d00c741fc060000005250535756ff7230ff7228ff7218ff722451ba90a27e4189118b5424048951148b5424088951108b54240c89510c8979088b5424108951048b5424248b42088946048b5c24248b7b0c897e088b7424248b4c24148b461089410c8b5424248b4c24148b7a148979108b5c24148b0c24894b148b4c241c894b188b5c2414c643ff008b4c24248b5c24188b41248943048b7424248b5c24188b56088953088b7c24248b5c24188b4f34894b0c8b4424188b5c24148958108b5c24248958148b4424188b73308970188b5424248b4424188b7a3889781c8b4c24248b4424188b710c8970208b5c24248b4424188b7b288978248b5424248b4424188b722c8970288b4c24248b4424188b791889782c8b5c2418c643ff008b44242083f801751c8b5c242cc703010000008b44241c894304b80100000083c428c20800f7c00100000075048b00eb10b878d1764183c800ff552cb8010000008b5c24248b531883fa017502eb1e8b7424248b4e2c8b398b5804530bdff6c3015b7503ff55383bdf7402eb07b901000000eb358b542424538b5c24208b4424348b52280bc0ff128b4d008d49f43b4d087303ff5520894d00c741fc02000000c741040100000089018b442420f7c00100000075048b38eb10b878d1764183c800ff552cbf0100000050508b378b1e83fbf375765156ff76048b142483fa017507b901000000eb25ff72048b028d5424400bc0e88e2b00008b142483c4043b650c7303ff5524ebd4b9010000008b04248d54243c83c800e8522c0000508b442404bae0b57e41ff1250508b7c244489e6568b5c24408b57040bc0ff128b5c2408f7c3010000007572eb05e9f60000008b530483fa0175358b4d008d49f43b4d087303ff5520894d00c741fc020000008b04248941048b3b89398d742418890e8d4c24188b442404894104eb5b8b4d008d49f43b4d087303ff5520894d00c741fc02000000895904c701efffffff8b45008d40f43b4508730aeb05e92d000000ff5520894500c740fc020000008b3c2489780489088d74241889068d4c24188b442404894104eb59e9a30300008b55008d52f43b55087303ff5520895500c742fc02000000895a04c702efffffff8b4d008d49f43b4d087303ff5520894d00c741fc020000008b042489410489118d7c2418890f8d7424188b5c2404895e04eb6de94a03000083fbe375688b56108b025156508b46048d54243c0bc0e8e63b000050508b7c2440508d742404568b5c24408b4424108b570483c800ff128b54240483fa0175058b1c24eb108b04248d5424480bc0e80a43000089c38d4c241889198d4424188b7c2408897804eb71e9dd02000083fb15756c8b56108b02515050ff760850ff74244c8d4c240c518b5c24408b460c8b542448e836fbffff5050ff7424548d442404508b5c241c8b4424148b542450e81afbffff50508b7c245089e6568b5c244c8b4424148b57040bc0ff128b142483fa0175108b5c2408eb1ce96c020000e9440000008b4424088d54245483c800e8ca42000089c383fb0175068b4c2418eb14538b44241c8d54245890e80e43000089c183c4048d44242489088d7c24248b742404897704eb6783fb0b756751ff76048b04248d54243883c800e83e430000508b442404ba2cc17e41ff1250508b54244089e1518b5c243c8b52040bc0ff128b3c2483ff0175068b442408eb0e8b4424088d54244490e8d24500008d74241489068d5c24148b542404895304eb73e9b401000083fb01756e51ff7604ff76088b142483fa017507b901000000eb2e8b028b78048b378b58108b0bff720489cb89f090e8b664f9ff8b142483c4043b650c7303ff5524ebcbb9010000005050ff74244c8d442404508b5c24408b4424148b54244883c800e8d2f9ffff8b7c2408eb0ae93d010000e94f00000083ff017507be01000000eb2d8b1f8b53048b0aff7704bb0100000089c80bc0e84e64f9ff8b3c2483c4043b650c7303ff5524ebc0be010000008d5c24148b142489138d4c24148b442404894104eb7183fb0775718b55008d52f43b55087303ff5520895500c742fc020000008b442424894204c70201000000518b460883f801750489d7eb5d5050ff70048d7424045689d38b008d54244483c800e8024500008b5d008d5bf43b5d087303ff5520895d00c743fc020000008b5424048913eb0ae973000000e9370000008b4c2408894b0489da8b042483c40c3b650c7303ff5524eb9ae905000000bf010000008d7424048b1f891e8d5424048b4f04894a04eb3383fb17751c8b56088b028b7c242c518d4c2404518b5c242c8b57040bc0ff12eb1289e2c7020100000089e28b44242489420451505050505050505083c40c8b7c2440f7c70100000075058b7704eb0db878d17641ff552cbe010000005050ff7424588d5c2404538b5c242c89f08b54245490e84af8ffff8b0c2483f90175068b542420eb108b4424208d54245090e83a45000089c283fa0175068b44241ceb12528b4424208d54245490e87e45000083c4048b7c245489078b742404897704b80100000083c450c2080083c800|@5681,63|37,0,@5562 46,0,0 53,0,0 60,0,0 67,0,0 74,0,0 81,0,0 88,0,0 95,0,0 102,0,0 109,0,0 116,0,0 145,0,@5594 154,0,0 161,0,0 168,0,0 175,0,0 182,0,0 189,0,0 236,0,@5615 509,0,0 521,0,0 544,0,@1640 555,0,0 604,0,0 657,0,0 680,0,@1640 691,0,0 720,0,0 738,1,@5619 759,0,0 774,1,@5621 784,0,@5642 919,0,-9 1015,0,-9 1098,1,@5644 1154,1,@5662 1314,1,@5663 1342,1,@5664 1390,1,@5665 1400,0,@5673 1450,1,@5675 1499,0,0 1526,1,@2230 1547,0,0 1604,0,0 1621,0,0 1630,1,@2230 1651,0,0 1715,0,0 1754,1,@5676 1831,0,0 1892,0,0 1935,0,@1640 1943,0,0 1998,1,@5679 2026,1,@5680 2047,0,0 5562:C2,2844|3b650c7303ff552452538b38f7c701000000741583ffe77c1583ff1f7f15be7e7e7e418d74be64ffe6e9f4000000e9ef000000e9ea0000009090e981040000909090e96a0a0000909090e9d3000000909090e900020000909090e9c3000000909090e9c6000000909090e9b3000000909090e90b070000909090e9a3000000909090e99b000000909090e9cd050000909090e935090000909090e9aa090000909090e97b000000909090e9fb010000909090e9ca020000909090e963000000909090e95b000000909090e953000000909090e9a0050000909090e934070000909090e979030000909090e95b050000909090e9fc050000909090e923000000909090e9d0060000909090e9f9020000909090e928050000909090e9d9070000909090b8f825754183c408c208008b58088b3b8b700c89f80bc0e8bacef9ff8b580483fb01753c8b5424048b4a088b018b1e8b7424048b54240c895c24108b4e04894c240c8b5c2408895424085389c389f8ba7c897e418b3c2483c40c57e9c209000089d890e8feebf9ff83f801745f89d8e826ecf9ff8b5424048b4a088b018b1e53ff7204ff74241489c389f8ba746b7d4183c800e896ebfeff8b1083fa0b751489c3b8030000008b4c240883c41451e9af5afaff83fafb751989c3b8030000008b4c240883c41451e9965afaffe93000000089c18b45008d40f03b45087303ff5520894500c740fc03000000c7400803000000894804c7000d00000083c408c208008b5424048b4a088b018b1e8b74240c895c24108b5a04895c240c8b4c24088974240889c389f8ba746b7d4183c40851e9f9eafeff8b58048b0b51ff742410508b58088b400c8b520c90ff12f7c00100000075298b388b45008d40f43b45087303ff5520894500c740fc02000000897804c700fbffffff83c408c20800b8f825754183c408c20800ff7004ff742414ff7424148b400890e842fdffff8b1c248b1383faf175468b4b088b398b730c8b168b4c24088b71088b1e8b4c24088b742410895c2414895424108b59048b54240c895c240c8974240889c389f889d1ba886b7d4183c40851e9f22effff50ff742418ff7424188b5c24108b44240c8b5424140bc0e8d6fcffff8b4d008d49f43b4d087303ff5520894d00c741fc02000000c74104010000008b3c24893989c68b45008d40ec3b45087303ff5520894500c740fc04000000c7400c01000000897008894804c7000900000083c410c20800ff7008ff700cff742418ff7424188b400483c800e866fcffff50ff74241cff74241c8b5c24148b44240c8b5424180bc0e84afcffff50ff742420ff7424208b5c24188b4424148b54241c0bc0e82efcffff89c38b45008d40ec3b45087303ff5520894500c740fc0400000089580c8b14248950088b4c2404894804c7000500000083c418c208008b4804f7c10100000075398b790483ff01751e8b7424108b54240c897424108954240c8b018b54240483c408e9c7fbffff8b40048d54240890e82e08000083c408c208008b40048d5424080bc0e81a08000083c408c208008b480cf7c10100000075418b790483ff0175248b318b5424108b5c240c89542410895c240c8b1c248b46048b54240483c408e969fbffff89cb8b40088d54240890e83e09000083c408c2080089cb8b40088d542408e82a09000083c408c2080050ff7004ff700c8b1c2489d890e89a42f7ff83f801742489d8e8be42f7ff8b58048b000bc0e8fe41f8ff89c33b650c7303ff5524ebd4ba0100000089d8e86e42f8ff83f801741289d8e89242f8ff8b1089d183f10289caeb05ba0100000083fa0174238b4c2410ff742408ff74241c680c277e41bb030000008b410490e836c6f9ff89c2eb05ba010000008b042483c800e89aa3ffff83f8037507bad02b7541eb358b1c248b442404e84ea5ffff8b55008d52f03b55087303ff5520895500c742fc03000000894208b9d02b7541894a04c7020d0000008b4424108b78088b37f7c6010000007503ff553889f383c30270f65253bb470000008b442424e8b28ef6ff8b5c240c83c800e8a68ef6ff8b55008d52dc3b55087303ff5520895500c742fc08000000c7421c01000000c7421801000000c7421401000000c7421003000000c7420c010000008b0c24894a088942048b44240489028b45008d40f43b45087303ff5520894500c740fc02000000895004c700f3ffffff83c41cc20800b89c31754183c408c208008b40048d542408e8de0b000083c408c208008b4c24108b7c240c894c2410897c240c8b400883c408e989f9ffff8b5d008d5bf83b5d087303ff5520895d00c743fc01000040c70301000000ff7424105089d9bb0100000089c88b52100bc0ff1283f801750bb8786c7c4183c408c208008b780483ff0175088b0083c408c2080089c68b45008d40f43b45087303ff5520894500c740fc02000000897004c7001300000083c408c208005050ff7008ff74241c8d4c2408518b400c8b521490ff128b5c24088b04248d542414e87e0c000083f80175068b7c2404eb16508b4424088d54241883c800e81a0e000089c783c40483ff01750bb8786c7c4183c414c208008b770483fe0175088b0783c414c208008b45008d40f43b45087303ff5520894500c740fc02000000897804c7001300000083c414c208008b40048d542408e80a0c000083f801750bb8786c7c4183c408c208008b580483fb0175088b0083c408c2080089c28b45008d40f43b45087303ff5520894500c740fc02000000895004c7001300000083c408c20800ff742410ff7424108b400483c800e816f8ffff89c38b45008d40f43b45087303ff5520894500c740fc02000000895804c700edffffff83c408c2080050ff7008ff742418ff7424188b400483c800e8d6f7ffff8b5c240c508b4424048b531c0bc0ff128b50048b3a83ffff7531ff7204bb010000008b400c0bc0e8cab7ffff83f80174138b04248d54241883c800e8460d000089c1eb0db91c327541eb06b91c327541508b7424148b5d008d5bf43b5d087303ff5520895d00c743fc02000000ba84947e4189138973045168782d7b41ff7604ff74242cff742420536a038b5c24248b4424288b5618ff1289c18b45008d40ec3b45087303ff5520894500c740fc040000008b3c2489780c8948088b742408897004c700f5ffffff83c41cc20800ff7004ff742414ff7424148b400883c800e8f2f6ffff50ff742418ff7424188b5c24108b44240c8b5424140bc0e8d6f6ffff8b5d008d5bf43b5d087303ff5520895d00c743fc02000000baf8947e4189530489038b4d008d49f43b4d087303ff5520894d00c741fc02000000895904c701130000008b45008d40ec3b45087303ff5520894500c740fc04000000bf9c31754189780c8948088b3424897004c7000500000089c38b45008d40f03b45087303ff5520894500c740fc03000000c7400801000000895804c700ffffffff83c410c2080050ff7008ff742418ff7424188b40040bc0e81ef6ffff8b5c240c8b55008d52f43b55087303ff5520895500c742fc02000000b910957e41890a895a048b7c2418894424188b7304897424148b4c2410897c24108b4424088944240c895424088b542404c7442404010000008b43188b1c2489c689d089f283c40451ff22ff7008ff742414ff7424148b40040bc0e8a2f5ffff50ff742418ff7424188b5c24108b44240c8b5424140bc0e886f5ffff89c38b45008d40ec3b45087303ff5520894500c740fc04000000ba9c31754189500c8958088b0c24894804c7000500000083c410c20800ff7008ff742414ff7424148b40040bc0e83af5ffff50ff742418ff7424188b5c24108b44240c8b5424140bc0e81ef5ffff89c38b45008d40ec3b45087303ff5520894500c740fc0400000089580cbac42b75418950088b0c24894804c7000500000083c410c2080083c800|@5593,63|31,0,$5562+58 291,0,@408 314,1,@2441 370,0,@5563 382,1,@5564 390,1,@2496 402,1,@2497 430,0,@5032 438,1,@5034 452,0,1 465,1,@2830 477,0,1 490,1,@2830 528,0,1 537,0,6 586,0,@5032 595,1,@5034 661,0,-3 672,0,@408 769,0,@5033 778,1,@5211 837,0,0 875,0,0 887,0,4 1022,0,2 1090,1,@5566 1110,1,@5566 1186,1,@5569 1206,1,@5569 1230,1,@1102 1242,1,@1103 1254,1,@1596 1271,0,0 1278,1,@1600 1290,1,@1601 1306,0,0 1328,0,@5413 1333,0,1 1342,1,@2429 1351,0,0 1362,1,@5414 1372,0,@450 1386,1,@5421 1418,0,@450 1427,0,6 1461,0,35 1470,1,@323 1482,1,@323 1513,0,0 1520,0,0 1527,0,0 1534,0,1 1541,0,0 1589,0,-7 1600,0,@487 1618,1,@5581 1681,0,0 1693,0,0 1712,0,@4502 1769,0,9 1814,1,@5583 1842,1,@5586 1857,0,@4502 1912,0,9 1930,1,@5583 1940,0,@4502 1997,0,9 2057,0,-10 2120,0,0 2130,1,@5471 2150,1,@5587 2159,0,@495 2166,0,@495 2200,0,@5588 2211,0,@3830 2286,0,-6 2371,0,@5590 2409,0,9 2438,0,@487 2456,0,2 2489,0,0 2498,0,-1 2559,0,@5592 2611,0,0 2709,0,@487 2727,0,2 2816,0,@449 2831,0,2 5563:O2|@5564,@5033 5564:C2,236|3b650c7303ff552489d789c689f083c800e8aa35f9ff8b1083faff75328b4c240c8b4424088b542404895c240c894c2408894424048b1c2489142453bb9c31754189f08b57048b3c2483c40457ff22f6c3017503ff553889d983c10270f651ff742410ff742410ff742410bbd02b754189f08b570483c800ff128b7d008d7fdc3b7d087303ff5520897d00c747fc08000000c7471c01000000c7471801000000c74714ffffffffc7471003000000c7470c01000000c7470803000000be4097040889770489078b45008d40f43b45087303ff5520894500c740fc02000000897804c700f3ffffffc20c000bc0|@5565,63|18,1,@2153 61,0,@487 108,0,@450 149,0,0 156,0,0 163,0,-1 170,0,1 177,0,0 184,0,1 189,0,I48 227,0,-7 5565:S29|56414c55455f4f505328292e636f6465457846756e6374696f6e283529 5566:C2,156|3b650c7303ff5524528d542404e8a60000008b7d008d7ff43b7d087303ff5520897d00c747fc02000000894704c707150000005783f8017507be03000000eb208b188b1383fafb75128b40043b650c7303ff5524ebdebe01000000be0100000083fe0174308b042490e8e254faff89c18b45008d40f43b45087303ff5520894500c740fc02000000894804c700fbffffff83c408c38b042483c408c3|@5568,63|14,1,@5567 47,0,10 58,0,1 87,0,0 92,0,0 106,1,@2837 141,0,-3 5567:C2,96|3b650c7303ff552483f8017506b801000000c38b7afc52ff7004ff7708ff77048b5ff88b008b57fcff12508b4424048b5424080bc0e8c6ffffff8b75008d76f43b75087303ff5520897500c746fc020000008946048b1c24891e89f083c40cc3|@413,63|14,0,0 5568:S50|50415253455f5452454528292e67656e636f6465283729636f646553657175656e6365283429636f646567656e2834292f36 5569:C2,124|3b650c7303ff5524525053bf0100000083fb01750489feeb26f7c7010000007503ff553889fa83c20270f68b5b0489d73b650c7303ff5524ebd6be01000000568b5c2404b8c08c7e418d542410e8e200000089c38b45008d40f43b45087303ff5520894500c740fc02000000895804c7001300000083c410c383c800|@5580,63|12,0,0 59,0,0 69,0,@5570 78,1,@5575 113,0,9 5570:O1|@5571 5571:C2,16|b8f48c7e410bc0ff552cb80100000090|@5574,1|1,0,@5572 11,0,0 5572:O3|@7320,@224,@5573 5573:S17|6d697373696e6720696e207265636f7264 5574:S51|50415253455f5452454528292e67656e636f6465283729636f646553657175656e6365283429636f646567656e283429283129 5575:C2,396|3b650c7303ff552483fb01757189c38b42f083c800e8bab3fcff8b7d008d7ff43b7d087303ff5520897d00c747fc02000000894704c707150000005783f8017507be03000000eb208b188b1383fafb75128b40043b650c7303ff5524ebdebe01000000be0100000083fe0174338b042490e83652faff8b4d008d49f4eb05e9450000003b4d087303ff5520894d00c741fc02000000894104c701fbffffffeb038b0c248b45008d40f43b45087303ff5520894500c740fc02000000c7400401000000890883c404c38b3b8b72fc5250ff37ff7304ff7608ff76048b5ef88b47048b56fc90ff128b5c240c8b53fc8b4afc8b79088b375050568d742404568b592090e87ed7feff8b5c24148b53f88b0a89cb8b44240ce88a9affff8b7c24148b77fc8b5efc8b55008d52e83b55087303ff5520895500c742fc05000000b9048f7e41890a8942108b44241089420c8b4c2404894a088b43088942048b5c240889d089fa83c800e896feffff83f80175078b042483c418c3508b4424048d54241c0bc0e8b600000083c41cc30bc0|@5579,63|22,1,@3873 55,0,10 66,0,1 95,0,0 100,0,0 114,1,@2837 154,0,-3 190,0,0 258,1,@5018 278,1,@5421 317,0,@5576 386,1,@5578 5576:C2,44|3b650c7303ff55248b7a10500bc7a801587503ff55383bc7750a8b72048b068b5208ff228b520cff2283c800|@5577,63| 5577:S67|50415253455f5452454528292e67656e636f6465283729636f646553657175656e6365283429636f646567656e2834296465636c6973742832296c6f6f6b466e283129 5578:C2,68|3b650c7303ff552483f80175048b42e4c352ff308b40040bc0e8e2ffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0424890289d083c408c3|@1462,5| 5579:S58|50415253455f5452454528292e67656e636f6465283729636f646553657175656e6365283429636f646567656e2834296465636c697374283229 5580:S50|50415253455f5452454528292e67656e636f6465283729636f646553657175656e6365283429636f646567656e2834292f38 5581:C2,260|3b650c7303ff552483f8017506b89c317541c352ff7004ff7208ff72048b5af88b008b52fc83c800ff12508b4424048b5424080bc0e8c6ffffff8b7d008d7ff43b7d087303ff5520897d00c747fc02000000c747040100000089078b75008d76f43b75087303ff5520897500c746fc02000000897e048b1c24891e8b55008d52f43b55087303ff5520895500c742fc02000000897204c702150000005283fe017507b903000000eb208b068b3883fffb75128b76043b650c7303ff5524ebdeb901000000b90100000083f901742f8b0424e8ba4efaff89c68b45008d40f43b45087303ff5520894500c740fc02000000897004c700fbffffff83c410c38b042483c410c3|@5582,63|14,0,@487 85,0,0 152,0,10 163,0,1 192,0,0 197,0,0 210,1,@2837 245,0,-3 5582:S59|50415253455f5452454528292e67656e636f6465283729636f646553657175656e6365283429636f646567656e283429636f6e734c697374283129 5583:C2,248|3b650c7303ff552483f8017506b801000000c38b388b72fc8b4e2c83f9017502eb1a8b4e288b318b4f04510bcef6c101597503ff55383bce7402eb07be01000000eb3a8b72fc5253ff3751ff7004518b42088b562483c800ff128b75008d76f43b75087303ff5520897500c746fc02000000c74604010000008906eb0a5253ff37ff7704ff70048b5c241056ff7308ff74240c8b53fc8b5c24188b4424140bc0ff12508b5c24148b4424088b5424180bc0e84affffff8b4d008d49f43b4d087303ff5520894d00c741fc020000008941048b0424890183f90175088b44240483c41cc3518b4424088d54242090e82200000083c420c30bc0|@5585,63|14,0,0 61,0,0 117,0,0 238,1,@5584 5584:C2,68|3b650c7303ff552483f80175048b42e0c352ff308b40040bc0e8e2ffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0424890289d083c408c3|@1462,5| 5585:S59|50415253455f5452454528292e67656e636f6465283729636f646553657175656e6365283429636f646567656e283429636f64654c697374283229 5586:C2,68|3b650c7303ff552483f80175048b42e8c352ff308b40040bc0e8e2ffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0424890289d083c408c3|@1462,5| 5587:C2,116|3b650c7303ff552483f8017506b801000000c38b388b72fc8b5e088b0b52ff700468c8cc7441ff7604ff720489cb8b4708ba746b7d4183c800e862d7feff508b4424048b5424080bc0e8b2ffffff8b7d008d7ff43b7d087303ff5520897d00c747fc020000008947048b3424893789f883c40cc3|@413,63|14,0,0 34,0,@202 50,0,@5032 58,1,@5034 5588:C2,32|3b650c7303ff55248b78088b3424893c24ff700c8b58048b008b520456ff2290|@5589,63| 5589:S48|50415253455f5452454528292e67656e636f6465283729636f646553657175656e6365283429636f646567656e283129 5590:O2|@5591,0 5591:O2|-8,0 5592:C2,32|3b650c7303ff55248b78088b3424893c24ff700c8b58048b008b520456ff2290|@5589,63| 5593:S48|50415253455f5452454528292e67656e636f6465283729636f646553657175656e6365283429636f646567656e283429 5594:C2,1452|8d7c24a83b7d0c7303ff55285250538b7c24108b1f83fbfb75128b7f083b650c7303ff5524ebecbe0100000083fb0d75058b7704eb0db84c9b7e41ff552cbe010000008b5424088b42048b08f6c1017503ff553889cf83c70270f689388b5c24088b4b0c8b39c70103000000f7c60100000075518b168b0283f8eb75398b5a048b4b0c8b018b4b108b198b4a04508b45008d40f03b45087303ff5520894500c740fc030000008b14248950088958048b59088918eb1db8909b7e41ff552cb801000000eb0eb8909b7e4190ff552cb8010000005657ff7004ff70088b00e86e05000083f803747250bb510000008b44242ce83e7cf6ff50bbffffffff8b44240490e83680f6ff89c38b04240bc0e8227cf6ffbb530000000bc0e8167cf6ff8b54242450508b4a188b7d008d7ff43b7d087303ff5520897d00c747fc020000008b31897704bbc8cc7441891f89e3893b89e78b5904895f04eb05e98a0200008b7d008d7ff43b7d087303ff5520897d00c747fc020000008b142489178b54240489570450578b5c2414b803000000e81a0700008b4c24345050ff74240cff74240c8b5c24348b44244c8b511490ff128b7c2438ff3424ff742420ff742428ff7424108b5c24188b5710ff128b7424388b5e048b138b4d008d49dc3b4d087303ff5520894d00c741fc08000000c7411c01000000c7411801000000c74114ffffffff8b7c2418897910c7410c010000008951088b54240889510489018b45008d40f43b45087303ff5520894500c740fc02000000894804c700f3ffffff8b13f6c2017503ff553889d183e90270f6890b8b560c8b4c2424890a8b0b5050518d4c2404518b5e0890e8f2cdfeff8b4424408b78048b37f7c6010000007503ff553889f083c00270f68b54240483c800ff12508b5c2424b8d02b754190e84e0800008b5d008d5bec3b5d087303ff5520895d00c743fc04000000c7430c010000008b1424895308894304c703090000008b4c24448b41048b38f7c7010000007503ff553889fe83c60270f65356bbece47d418b44245883c800e83a7af6ff8b5d008d5bdc3b5d087303ff5520895d00c743fc08000000c7431c01000000c7431801000000c7431401000000c7431003000000c7430c010000008b14248953088943048b4c2404890b8b45008d40f43b45087303ff5520894500c740fc02000000895804c700f3ffffff8b7c244483ff0174338b5c24488b138b75008d76ec3b75087303ff5520897500c746fc04000000c7460c01000000894608895604c706f9ffffffeb0289c68b5d008d5bf43b5d087303ff5520895d00c743fc02000000c7430401000000893383fb01750a8b44240c83c450c20800538b4424108d54245490e88e08000083c454c208008b5424188b0ac7020100000051bbece47d418b44242c83c800e82e79f6ff8b7c242050508b77188b5d008d5bf43b5d087303ff5520895d00c743fc020000008b16895304b9c8cc7441890b89e1891989e38b4e04894b048b5d008d5bf43b5d087303ff5520895d00c743fc020000008b3c24893b8b7c2404897b048b7c2428505368d02b754150538b5c242c8b4424448b571490ff128b74243068d02b7541ff742418ff742420ff74240c8b5c24148b56100bc0ff128b5c242c8b54241089138b4c24308b79048b37f7c6010000007503ff553889f383eb0270f6891f8b710c8b5c241c891e8b1ff6c3017503ff553889da83c20270f68b5d008d5bdc3b5d087303ff5520895d00c743fc08000000c7431c01000000c7431801000000c74314ffffffffc7431003000000c7430c010000008953088b54240489530489038b45008d40f43b45087303ff5520894500c740fc02000000895804c700f3ffffff8b5c242883fb0174318b55008d52ec3b55087303ff5520895500c742fc04000000c7420c010000008942088b442410894204c702f9ffffffeb0289c28b45008d40f43b45087303ff5520894500c740fc02000000c7400401000000891083c434c208000bc0|@5614,63|40,0,0 55,0,@5595 63,0,0 104,0,1 183,0,@5597 191,0,0 198,0,@5597 207,0,0 222,1,@5599 233,0,40 242,1,@323 248,0,-1 258,1,@336 270,1,@323 275,0,41 282,1,@323 325,0,@202 393,0,1 398,1,@5605 494,0,0 501,0,0 508,0,-1 522,0,0 567,0,-7 614,1,@5018 660,0,@450 666,1,@5609 697,0,0 712,0,4 746,0,@5287 758,1,@323 789,0,0 796,0,0 803,0,0 810,0,1 817,0,0 865,0,-7 911,0,0 923,0,-4 958,0,0 990,1,@5613 1008,0,0 1014,0,@5287 1026,1,@323 1069,0,@202 1130,0,@450 1155,0,@450 1274,0,0 1281,0,0 1288,0,-1 1295,0,1 1302,0,0 1347,0,-7 1387,0,0 1403,0,-4 1438,0,0 5595:O3|@7320,@224,@5596 5596:S42|676574466e426f64793a206e6f74206120636f6e73747261696e656420666e2d65787072657373696f6e 5597:O3|@7320,@224,@5598 5598:S41|636f646550726f633a20626f6479206f6620666e206973206e6f74206120636c61757365206c697374 5599:C2,456|3b650c7303ff55248b3883ff1b7537be010000008b580483fb01750389f0c3f7c6010000007503ff553889f083c00270f68b5b0489c63b650c7303ff5524ebd7b801000000c383ff1175698b70088b1e5689d80bc0e88229f7ff83f801742489d8e8a629f7ff8b58048b000bc0e8e628f8ff89c33b650c7303ff5524ebd3ba0100000089d8e85629f8ff83f801741289d8e87a29f8ff8b1089d783f70289faeb05ba0100000083fa01740eb80300000083c404c3e90d0000008b14248b0283c404e99a8affff83ff05751fff70088b400ce82affffff83f803750b8b042483c404e91affffff83c404c383fffb75088b4008e909ffffff83ff0f75088b4004e9fcfeffff83ff15754f8b700883fe01750eb8b89d7e4190ff552cb80100000083fe01750fb878d176410bc0ff552cbb010000008b560483fa0175048b1eeb128b76043b650c7303ff5524ebd3bb010000008b03e9a8feffff83fffd755c8b7008bb0300000083fe01750389d8c383fb03752b8b068b3883ffeb75138b5804ff76048b030bc0e876feffff89c2eb14b8ec9d7e41ff552cba01000000eb0589daff760489d38b342483c4043b650c7303ff5524ebb1b801000000e90400000083c404c3b803000000c3|@5604,61|16,0,0 65,0,0 86,1,@1102 98,1,@1103 110,1,@1596 127,0,0 134,1,@1600 146,1,@1601 162,0,0 172,0,1 194,1,@5414 274,0,@5600 283,0,0 293,0,@1640 303,0,0 333,0,0 353,0,1 399,0,@5602 407,0,0 437,0,0 451,0,1 5600:O3|@7320,@224,@5601 5601:S26|7475706c6557696474683a20656d707479206c6f63616c646563 5602:O3|@7320,@224,@5603 5603:S8|6765745769647468 5604:S26|50415253455f5452454528292e7475706c655769647468283129 5605:C2,260|3b650c7303ff5524530bd8f6c3015b7503ff55383bd87554b80100000089df23f8f7c7010000007503ff553889c72bfb8d7f0170f48b45008d40e83b45087303ff5520894500c740fc05000000c7401001000000c7400c01000000c7400803000000897804c700f7ffffffc35089d88d5424040bc0e8a60000008b7d008d7ff43b7d087303ff5520897d00c747fc02000000894704c707150000005783f8017507be03000000eb208b188b1383fafb75128b40043b650c7303ff5524ebdebe01000000be0100000083fe0174308b042490e80241faff89c18b45008d40f43b45087303ff5520894500c740fc02000000894804c700fbffffff83c408c38b042483c408c3|@5608,63|25,0,0 80,0,0 87,0,0 94,0,1 103,0,-5 118,1,@5606 151,0,10 162,0,1 191,0,0 196,0,0 210,1,@2837 245,0,-3 5606:C2,176|3b650c7303ff55248b7afc5023c7a801587503ff55383bc77d06b801000000c3be0100000089c323def6c3017503ff553889f32bd88d5b0170f48b75008d76e83b75087303ff5520897500c746fc05000000c7461001000000c7460c01000000c7460803000000895e04c706f7ffffffa8017503ff553889c383eb0270f6525689d883c800e876ffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0424890289d083c408c3|@5607,61|27,0,0 33,0,0 85,0,0 92,0,0 99,0,1 108,0,-5 5607:S38|50415253455f5452454528292e6d6b4172675475706c652832296d6b4172674c697374283129 5608:S26|50415253455f5452454528292e6d6b4172675475706c65283229 5609:C2,72|3b650c7303ff552483fb03752489c38b45008d40f43b45087303ff5520894500c740fc02000000c74004010000008918c35053b8010000008d54240890e82200000083c408c30bc0|@5612,63|42,0,0 52,0,0 62,1,@5610 5610:C2,184|3b650c7303ff55248b7af8500bc7a801587503ff55383bc77506b801000000c38b72fc8b0e83f90b7510525089f383c800e8be39faff89c3eb3a83f9fb750f525089f30bc0e8aa39faff89c3eb268b5d008d5bf03b5d087303ff5520895d00c743fc03000000894308897304c7030d00000052508b0424a8017503ff553889c783c70270f65389f88b54240890e86effffff8b75008d76f43b75087303ff5520897500c746fc020000008946048b1c24891e89f083c40cc3|@5611,63|27,0,0 50,1,@2830 70,1,@2830 110,0,6 5611:S33|50415253455f5452454528292e6c6f6164417267732832296d6b61726773283129 5612:S24|50415253455f5452454528292e6c6f616441726773283229 5613:C2,68|3b650c7303ff552483f80175048b42acc352ff308b40040bc0e8e2ffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0424890289d083c408c3|@1462,5| 5614:S49|50415253455f5452454528292e67656e636f6465283729636f646553657175656e6365283429636f646550726f63283429 5615:C2,128|3b650c7303ff55248b7d008d7fec3b7d087303ff5520897d00c747fc04000000be2ca37e4189378b721089770c8b4a0c894f088b4a08894f048b4c240c8b7424085053ff721457ff720451568b542420894c24288b4c2410894c2424897424208b74241c8954241c897c2418c7442414010000008b54240883c41456ff220bc0|@5618,63|33,0,@5616 112,0,0 5616:C2,208|3b650c7303ff55248b7a0c83ff01747552ff30ff7004ff7008ff700cff34248b5c240c8b4424088b52080bc0ff128b74241050ff742408ff7424088b5c24148b4424188b56040bc0ff128b5d008d5bf43b5d087303ff5520895d00c743fc02000000c743040100000089038b55008d52f43b55087303ff5520895500c742fc02000000eb05e92d000000895a048b0c24890a8b45008d40f43b45087303ff5520894500c740fc02000000895004c7001300000083c418c38b70088b1c24893424ff700c89d98b58048b008b520451ff22|@5617,63|101,0,0 175,0,9 5617:S56|50415253455f5452454528292e67656e636f6465283729636f646553657175656e6365283429636f6465416c742835296367457870283129 5618:S48|50415253455f5452454528292e67656e636f6465283729636f646553657175656e6365283429636f6465416c74283529 5619:C2,136|3b650c7303ff55248b78088b3789d389f0e896a9f9ff8b700889f00bc0e8b693ffff83f801745089f0e8ea93ffff8b53fc8b7a108b37f7c6010000007503ff553889f183c10270f6890f8b0ff6c1017503ff553889cf83c70270f68b4a1089398b3889378b73fc8b7e088b178b48048911b801000000c3b848397e4183c800ff552cb80100000090|@5620,63|18,1,@2441 30,1,@5452 42,1,@5454 114,0,0 120,0,@5456 131,0,0 5620:S58|50415253455f5452454528292e67656e636f6465283729636f646553657175656e63652834293c7061747465726e3e2d73657441646472283129 5621:C2,1620|8d7c24803b7d0c7303ff552883f8017506b801000000c38b388b378b1e8b4f088b318b085250ff3053ff770456ff710c8b0c248b398b5424108b4a108b018b5c24145089f0e87aa8f9ff89f9ff70088b042483c800e89692ffff83f801740f8b042483c800e8c692ffff8b00eb0db8e8ab7e41ff552cb8010000008b388b742420508b44241083c800e8e655f8ff51ff73045789c38b460890e8a26cf6ff8b5c2420f7c30100000075188b0b50ff31bb08ac7e41b801000000e8da05000089c2eb1389c2b8e4ac7e410bc0ff552c89d1ba01000000528b442428bf0300000083f801750489feeb2e83ff0375118b108b48048b4204e862f5ffff89c3eb0589fb8b480489df89c83b650c7303ff5524ebcebe010000008b5c24388b53fc8b4a1883f9017407b803000000eb0289f083f8037507bf03000000eb05bf0100000089fe83f60250568b7c240883ff01750489f3eb298b1789d123cef6c1017503ff55388d4aff03ce70f689ce8b7f043b650c7303ff5524ebd3bb010000008b4c241883f903751383fb037507ba03000000eb0cba01000000eb05ba0100000083fa0174118b7c241cc70701000000b801000000eb05b8010000008b4424408b78fc8b77088b0ef6c1017503ff553889c883c00270f689068b4c24408b41fc8b78108b378b4c24408b41fc8b7810c707030000005352568b44243c8d54245090e89a0500008b5c242483fb0375238b54240cf6c2017503ff553889d183c10270f6508b5c240c89c8e88ef6ffff89c6eb59508b5c24188b442410baecae7e41ff128b55008d52f43b55087303ff5520895500c742fc02000000894204c702150000005283f8017507b903000000eb258b388b3783fefb75178b40043b650c7303ff5524ebdeb901000000e93b000000b90100000083f901742b8b0424e8f237faff8b75008d76f43b75087303ff5520897500c746fc02000000894604c706fbffffffeb038b342483c40456bbffffffff8b442410e8726ef6ff8b5d008d5bf43b5d087303ff5520895d00c743fc02000000ba3c1d754189530489038b4d008d49f43b4d087303ff5520894d00c741fc02000000895904c701510000008b45008d40f43b45087303ff5520894500c740fc020000008948048b7c2420893883c800e83672f6ff8b74245450508b5ef48b55008d52f43b55087303ff5520895500c742fc020000008b0b894a04bfc8cc7441893a89e7891789e28b7b04897a048b55008d52f43b55087303ff5520895500c742fc020000008b0c24890a8b4c2404894a048b4c245c50ff74240c50528b5c241c8b46c88b51d8ff128b74242483fe03750489c7eb115689c3b8d02b75410bc0e81ec9fdff89c78b5c246050508b53f48b4d008d49f43b4d087303ff5520894d00c741fc020000008b02894104bec8cc7441893189e6890e89e18b72048971048b4d008d49f43b4d087303ff5520894d00c741fc020000008b1c2489198b5c24048959048b5c24688b43fcff742414ff742460ff742454518b5c24448b481489f889caff128b7c24688b77fc8b5e088b13f6c2017503ff553889d183e90270f6890b8b56108b4c241c890a8b0bf6c1017503ff553889cf83c70270f68b4d008d49dc3b4d087303ff5520894d00c741fc08000000c7411c01000000c7411801000000c74114ffffffff8b5c2424895910c7410c010000008979088b7c240889790489018b5d008d5bf43b5d087303ff5520895d00c743fc02000000894b04c703f3ffffff8b4c24448b44243889018b7c242083ff0174608b4d008d49ec3b4d087303ff5520894d00c741fc04000000c7410c01000000895908894104c701f9ffffff518b4424408b54246c90e8c2faffff8b7d008d7ff43b7d087303ff5520897d00c747fc020000008947048b3424893789f883c470c3a8017503ff553889c183c10270f68b7d008d7fec3b7d087303ff5520897d00c747fc04000000c7470c01000000895f08894f04c707f9ffffff8b5c2440f6c3017503ff553889d983e90270f6576a01ff74243c518b5c2440b8010000008d54247ce8be0400008b7d008d7fec3b7d087303ff5520897d00c747fc04000000c7470c010000008947088b74243c897704c707f9ffffff578b4424448b54247083c800e8f6f9ffff8b5d008d5bf43b5d087303ff5520895d00c743fc020000008943048b142489138b4d008d49f43b4d087303ff5520894d00c741fc020000008959048b442404890189c883c474c383c800|@5641,63|18,0,0 70,1,@2441 86,1,@5452 102,1,@5454 111,0,@5622 119,0,0 138,1,@1690 154,1,@323 176,0,@5624 181,0,0 186,1,@5625 197,0,@5627 209,0,0 219,0,1 246,1,@5599 274,0,0 294,0,1 308,0,1 315,0,0 376,0,0 395,0,1 402,0,0 409,0,0 424,0,0 429,0,0 436,0,0 493,0,1 510,1,@5629 550,1,@5605 568,0,@5633 603,0,10 614,0,1 643,0,0 653,0,0 666,1,@2837 699,0,-3 713,0,-1 722,1,@336 751,0,@352 789,0,40 830,1,@347 873,0,@202 967,0,@450 974,1,@4509 1019,0,@202 1188,0,0 1195,0,0 1202,0,-1 1216,0,0 1261,0,-7 1311,0,0 1323,0,-4 1421,0,0 1433,0,-4 1469,0,0 1478,1,@5636 1509,0,0 1525,0,-4 5622:O3|@7320,@224,@5623 5623:S6|6c7641646472 5624:O1|@5599 5625:C2,100|3b650c7303ff55248b7c24048b3783fefb75098b570889542404ebe483fe0375405053ff77048b470889da90ff128b5d008d5bf43b5d087303ff5520895d00c743fc020000008b54240889530489038b0c24894c241089d88b5c240483c40ceb9fc20400|@5626,63| 5626:S73|50415253455f5452454528292e67656e636f6465283729636f646553657175656e63652834293c7061747465726e3e2d6c6f616446756e446563732831296765745061747473283329 5627:O3|@7320,@224,@5628 5628:S23|6261646c7920666f726d65642070617273652074726565 5629:C2,312|3b650c7303ff552483f8017506b801000000c38b3852ff7004ff7704ff7708ff37bb68ae7e41b8010000000bc0e8cafeffff8b74240c8b5ed483fb03751bf7c00100000075048b10eb30b878d17641ff552cba01000000eb218b55008d52f43b55087303ff5520895500c742fc02000000894204c7021b0000008b4d008d49f83b4d087303ff5520894d00c741fc01000040b8589c754189018b7d008d7ff83b7d087303ff5520897d00c747fc01000040b8589c754189078b45008d40e83b45087303ff5520894500c740fc0500000089781089480c8950088b3c248978048b54240489108b4d008d49f43b4d087303ff5520894d00c741fc02000000894104c701ebffffff518b44240c89f2e8eefeffff8b7d008d7ff43b7d087303ff5520897d00c747fc020000008947048b3424893789f883c414c3|@413,63|14,0,0 34,0,@5630 39,0,0 46,1,@5625 75,0,@1640 83,0,0 118,0,13 147,0,@989 178,0,@989 258,0,-11 5630:O1|@5631 5631:C2,4|c383c800|@5632,1| 5632:S84|50415253455f5452454528292e67656e636f6465283729636f646553657175656e63652834293c7061747465726e3e2d6c6f616446756e446563732831296d6174636865732d2831297061744c6973742d283129 5633:O1|@5634 5634:C2,156|3b650c7303ff552483fb017506b801000000c38b3b89c623f7f7c6010000007503ff55388d70ff03f770f6a8017503ff553889c283c20270f65057ff730489f389d083c800e8f2eeffff8b4c24088b7c240489ce23f7f7c6010000007503ff55388d71ff03f770f6508b5c240489f00bc0e88affffff8b5d008d5bf43b5d087303ff5520895d00c743fc020000008943048b1424891389d883c410c3|@5635,63|14,0,0 70,1,@5605 5635:S73|50415253455f5452454528292e67656e636f6465283729636f646553657175656e63652834293c7061747465726e3e2d6c6f616446756e446563732831296d616b6541726773283229 5636:C2,1032|3b650c7303ff552483fb0175728b5ac083fb03756f8b42cca8017503ff553889c783c70270f68b75008d76e83b75087303ff5520897500c746fc05000000c74610010000008b4ad4894e0cc7460803000000897e04c706f7ffffff8b45008d40ec3b45087303ff5520894500c740fc04000000c7400c01000000897008eb0ae9ce010000e9100000008b7c240c897804c70009000000c20c008b4d008d49f43b4d087303ff5520894d00c741fc02000000895904c701070000008b42fc8b78fc8b77088b1e505052538d5c2408538b5f0c89c80bc0e806b5feff8b14248b4afc8b41fc8b78088b078b542408ff128b34248b5eccf6c3017503ff553889da83c20270f68b4d008d49e83b4d087303ff5520894d00c741fc05000000c74110010000008b7ed489790cc7410803000000895104c701f7ffffff8b55008d52f43b55087303ff5520895500c742fc02000000c7420401000000890283fa01750889c28b442418eb1252508b4424208d54241490e8ae020000eb0250528b55008d52ec3b55087303ff5520895500c742fc04000000c7420c01000000894a08894204c702090000008b4d008d49f03b4d087303ff5520894d00c741fc030000008b46c08941088b1c24895904c701170000008b5d008d5bf43b5d087303ff5520895d00c743fc02000000c7430401000000890b8b4d008d49f43b4d087303ff5520894d00c741fc02000000895904891183f90175068b5c240ceb13518b4424108d542418e85e02000089c383c4048b45008d40f43b45087303ff5520894500c740fc02000000895804c7001300000083c414c20c008b7afc8b77fc8b4e088b39f7c7010000007503ff553889f983c10270f68b7e08890f8b4afc8b79fc8b77108b0e8b7afc8b77fc8b7e10c707030000005250ff33ff730451bbece47d418b44241c0bc0e81260f6ff8b75008d76e83b75087303ff5520897500c746fc05000000c74610010000008b5c2418895e0cc7460803000000c74604ffffffffc706f7ffffff508b5c240c89f00bc0e882edffff8b4c242483f901750489c2eb0d8d5424180bc0e8de01000089c28b44241ca8017503ff553889c783ef0270f68b7424108b5c240c89f123cbf6c1017503ff55388d4eff03cb70f652ff742404578b5c241489c88b542420e8b6fcffff8b7c24148b77fc8b5efc8b53088b0af6c1017503ff553889cf83ef0270f6893a8b4c24148b79fc8b77fc8b5e108b54240489138b5424148b4afc8b79fc8b77088b1ef6c3017503ff553889da83c20270f68b5d008d5bdc3b5d087303ff5520895d00c743fc08000000c7431c01000000c7431801000000c7431401000000c7431003000000c7430c010000008953088b142489530489038b45008d40f43b45087303ff5520894500c740fc02000000895804c700f3ffffff83c418c20c00|@5640,63|65,0,0 78,0,1 87,0,-5 118,0,0 146,0,4 182,0,3 214,1,@5018 286,0,0 299,0,1 308,0,-5 339,0,0 370,1,@5637 405,0,0 417,0,4 459,0,11 490,0,0 546,1,@5638 584,0,9 650,0,1 663,0,@5287 674,1,@323 705,0,0 719,0,1 726,0,-1 732,0,-5 746,1,@5609 770,1,@5639 950,0,0 957,0,0 964,0,0 971,0,1 978,0,0 1022,0,-7 5637:C2,68|3b650c7303ff552483f80175048b42f0c352ff308b40040bc0e8e2ffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0424890289d083c408c3|@1462,5| 5638:C2,68|3b650c7303ff552483f80175048b42e8c352ff308b40040bc0e8e2ffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0424890289d083c408c3|@1462,5| 5639:C2,68|3b650c7303ff552483f80175048b420cc352ff308b40040bc0e8e2ffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0424890289d083c408c3|@1462,5| 5640:S73|50415253455f5452454528292e67656e636f6465283729636f646553657175656e63652834293c7061747465726e3e2d6c6f616446756e446563732831296d616b6546756e73283529 5641:S62|50415253455f5452454528292e67656e636f6465283729636f646553657175656e63652834293c7061747465726e3e2d6c6f616446756e44656373283129 5642:O1|@5643 5643:C2,76|3b650c7303ff552483f8017506b801000000c38b388b77088b1e538b400483c800e8daffffff8b7d008d7ff43b7d087303ff5520897d00c747fc020000008947048b3424893789f883c404c3|@413,57|14,0,0 5644:C2,320|3b650c7303ff552483f8017506b801000000c38b3883ff017572528b400483c800e83601000083f8017502eb27f7c00100000075058b7004eb1389c6b878d176410bc0ff552c89f3be0100000083fe017402eb0483c404c38b5d008d5bf43b5d087303ff5520895d00c743fc02000000894304c703efffffff8b45008d40f43b45087303ff5520894500eb05e914000000c740fc02000000c7400401000000891883c404c389d1ff37ff7704ff70048b4424080bc0e8420500005189c38b410890e8a25bf6ffbb5b0000000bc0e8965bf6ff8b3c248b77fcff77c850ff76208b5ff48b4424148b57f083c800ff128b5c24048b53fcff722450ff742418ff74240c8b4bf48b5a2089c88b521cff12508b44240c8b5424080bc0e8e2feffff83f80175078b042483c418c3508b4424048d54241c0bc0e87e05000083c41cc30bc0|@5661,63|14,0,0 34,1,@5645 61,0,@1640 73,0,0 117,0,-9 155,0,0 182,1,@5657 194,1,@323 199,0,45 206,1,@323 310,1,@5660 5645:C2,300|3b650c7303ff552483f8017506b801000000c38b3883ff0175058b4004ebe189d68b5f048b48048b07e81a0100008b7efc8b57108b3a8b56fc5653515057ff7210f7c7010000007503ff553889fe83c60270f68b1424893283f8017507b901000000eb23ff70048b008d54241ce82a0200008b042483c4043b650c7303ff5524ebd6b9010000008b44240c8b5424140bc0e86affffff8b7c240883ff01750483c418c38b378b1e83fbf1755f8b56088b0a5089c890e8d695f9ff8b480889c80bc0e8f67fffff83f801740fff760489c890e82680ffff8b00eb0db8e8ab7e41ff552cb8010000008b7c241cff3424ff74241cbb030000008b57ec0bc0ff128b74240483fe01750983c420c3e90e0000008d54242090e8a602000083c420c3b8ccbb7e41ff552cb80100000090|@5656,63|14,0,0 42,1,@5646 94,0,0 110,1,@5649 131,0,0 182,1,@2441 194,1,@5452 210,1,@5454 219,0,@5622 227,0,0 243,0,1 278,1,@5653 287,0,@5654 295,0,0 5646:C2,132|3b650c7303ff55248b3883fffb75058b4008ebec83ffef7539ff70088b40040bc0e8daffffff508b4424040bc0e8ceffffff83f80175078b042483c408c3508b4424048d54240c0bc0e85200000083c40cc383fff1752489c28b45008d40f43b45087303ff5520894500c740fc02000000c74004010000008910c3b801000000c383c800|@5648,37|74,1,@5647 116,0,0 124,0,0 5647:C2,68|3b650c7303ff552483f80175048b42f4c352ff308b40040bc0e8e2ffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0424890289d083c408c3|@1462,5| 5648:S74|50415253455f5452454528292e67656e636f6465283729636f646553657175656e63652834293c7061747465726e3e2d636f646552656375727369766528312967657456617273283129 5649:C2,116|3b650c7303ff55248b3883fff175548b70088b1e89d189d890e8d693f9ff8b700889f00bc0e8f67dffff83f801742489f0e82a7effff8b188b51ec89138b79fc8b77fc8b5e088b138b48048911b801000000c3b8d8ba7e4183c800ff552cb801000000b8d8ba7e4183c800ff552cb80100000090|@5652,63|26,1,@2441 38,1,@5452 50,1,@5454 78,0,0 84,0,@5650 95,0,0 100,0,@5650 111,0,0 5650:O3|@7320,@224,@5651 5651:S36|7365744164647265737320202d206261646c7920666f726d656420706172736574726565 5652:S77|50415253455f5452454528292e67656e636f6465283729636f646553657175656e63652834293c7061747465726e3e2d636f646552656375727369766528312973657441646472657373283129 5653:C2,68|3b650c7303ff552483f80175048b42e4c352ff308b40040bc0e8e2ffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0424890289d083c408c3|@1462,5| 5654:O3|@7320,@224,@5655 5655:S31|56616c4465636c61726174696f6e202d206e6f742061207661726961626c65 5656:S64|50415253455f5452454528292e67656e636f6465283729636f646553657175656e63652834293c7061747465726e3e2d636f6465526563757273697665283129 5657:C2,60|3b650c7303ff55248b3883fff175048b4004c383fffb75058b4008ebe383ffef75138b70048b1e83fbf175048b4604c38b4008ebcbb8a4bc7e41c390|@5659,57|54,0,@5658 5658:S9|3c7061747465726e3e 5659:S69|50415253455f5452454528292e67656e636f6465283729636f646553657175656e63652834293c7061747465726e3e2d636f6465446563732831296765744e616d65283129 5660:C2,68|3b650c7303ff552483f80175048b42e4c352ff308b40040bc0e8e2ffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0424890289d083c408c3|@1462,5| 5661:S59|50415253455f5452454528292e67656e636f6465283729636f646553657175656e63652834293c7061747465726e3e2d636f646544656373283129 5662:C2,68|3b650c7303ff552483f80175048b42bcc352ff308b40040bc0e8e2ffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0424890289d083c408c3|@1462,5| 5663:C2,68|3b650c7303ff552483f80175048b42acc352ff308b40040bc0e8e2ffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0424890289d083c408c3|@1462,5| 5664:C2,68|3b650c7303ff552483f80175048b42a8c352ff308b40040bc0e8e2ffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0424890289d083c408c3|@1462,5| 5665:C2,84|3b650c7303ff552483f8017506b801000000c352ff70048b00e852000000508b4424048b5424080bc0e8d2ffffff8b7d008d7ff43b7d087303ff5520897d00c747fc020000008947048b3424893789f883c40cc3|@413,63|14,0,0 26,1,@5666 5666:C2,324|3b650c7303ff55248b78048b3789d38b480c89f090e8e68ef9ff8b700889f00bc0e80679ffff83f801742b89f0e83a79ffff8b55008d52f43b55087303ff5520895500c742fc020000008b7804897a048b308932eb0db8e8ab7e41ff552cba010000008b73fc8b46108b38f7c7010000007503ff553889f883c00270f65351ff32ff7204ff761057508b54240889028b44241089388b7c24188b77fc8b5e088b138b4c240c89118b108b4c24148b0183f8f77507b89cc07e41eb5283f8f1753c8b79088b378b5c24188b43fc8b78088b0f8b5c24188b43fc8b7c24188b5ffc5268c8cc7441ff7024ff732089cb89f0ba746b7d4190e85eabfeffeb12b8c8c07e410bc0ff552cb801000000eb015289c78b45008d40ec3b45087303ff5520894500c740fc04000000c7400c010000008978088b3424897004c700f9ffffff83c420c30bc0|@5672,63|22,1,@2441 34,1,@5452 46,1,@5454 87,0,@5622 95,0,0 181,0,@5667 225,0,@202 240,0,@5032 246,1,@5034 253,0,@5670 263,0,0 299,0,0 314,0,-4 5667:O4|4,@5668,@2799,0 5668:O2|@449,@5669 5669:O2|@2802,@495 5670:O3|@7320,@224,@5671 5671:S6|636f64654578 5672:S57|50415253455f5452454528292e67656e636f6465283729636f646553657175656e63652834293c7061747465726e3e2d636f64654578283129 5673:O1|@5674 5674:C2,76|3b650c7303ff552483f8017506b801000000c38b388b77048b1e538b400483c800e8daffffff8b7d008d7ff43b7d087303ff5520897d00c747fc020000008947048b3424893789f883c404c3|@413,57|14,0,0 5675:C2,68|3b650c7303ff552483f80175048b42bcc352ff308b40040bc0e8e2ffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0424890289d083c408c3|@1462,5| 5676:C2,104|3b650c7303ff55248b78048b3789d1ff33ff730489f083c800e806a5f8ff50508b79fc89e6568b5c240c8b570483c800ff128b142483fa0175068b5c240ceb108b44240c8d54241090e83600000089c38b4c241489198b442404894104b80100000083c410c20400|@5678,63|26,1,@1994 74,1,@5677 94,0,0 5677:C2,68|3b650c7303ff552483f80175048b42f0c352ff308b40040bc0e8e2ffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0424890289d083c408c3|@1462,5| 5678:S61|50415253455f5452454528292e67656e636f6465283729636f646553657175656e63652834293c7061747465726e3e2d676574436f6e73747273283329 5679:C2,68|3b650c7303ff552483f80175048b42b0c352ff308b40040bc0e8e2ffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0424890289d083c408c3|@1462,5| 5680:C2,68|3b650c7303ff552483f80175048b42acc352ff308b40040bc0e8e2ffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0424890289d083c408c3|@1462,5| 5681:S38|50415253455f5452454528292e67656e636f6465283729636f646553657175656e6365283429 5682:S23|50415253455f5452454528292e67656e636f6465283729 5683:C2,236|3b650c7303ff552483f8017506b801000000c38b388b1f83fbfd75708b4d008d49ec3b4d087303ff5520894d00c741fc040000008b771089710c8b5f0c8959088b5f088959048b5f0489198b5afc8b7b088b3752ff700468589c754168d04f7e416a0189f389c8ba746b7d4190e8eaa6feff8b75008d76f83b75087303ff5520897500c746fc01000000eb05e9040000008906eb09be0100000052ff7004f7c6010000007536ff368b4424048b54240890e84affffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0c24890a89d083c40cc38b04248b54240483c408e915ffffff90|@5684,63|14,0,0 88,0,@989 93,0,@5492 104,0,@5032 110,1,@5034 150,0,0 5684:S18|4c6973742e6d61705061727469616c283229 5685:S45|535452554354555245535f28292e67656e636f646553747275637473283229636f646553747264656373283429 5686:C2,1196|3b650c7303ff55248b7d008d7fec3b7d087303ff5520897d00c747fc04000000be5cca7e4189378b721089770c8b4a0c894f088b4a04894f048b0883f9fd75728b700c8b0e52ff700489c80bc0e87280feff8b7424048b56048b3253575189f390e8beadfeff89c38b04240bc0e8127df8ff83f801754653b815000000e8e6d3f7ff8b4d008d49ec3b4d087303ff5520894d00c741fc04000000c7410c01000000c7410801000000bf40970408897904eb05e9a0000000890189caeb048b500853ff742420ff74242089d38b4424188b54241c0bc0e826ffffff8b4d008d49f43b4d087303ff5520894d00c741fc02000000c741040100000089018b45008d40ec3b45087303ff5520894500c740fc04000000c7400c010000008b3c24897808894804c7000900000089c68b4424040bc0e8f27bf8ff5050ff7424148d5c24045389c389f08b54241883c800ff128b042483c420c2080083f9f175768b70088b0e8b42048b3089c890e8f277f8ff83f8017407baf8257541eb1889c890e85a0ef9ff53575189f30bc0e896acfeff89c2eb035357518b042483f801754852b8150000000bc0e8bed2f7ff8b7d008d7fec3b7d087303ff5520897d00c747fc04000000c7470c01000000c7470801000000eb05e934000000be40970408897704890789f9eb048b4808525050ff7424148d7c24045789cb8b4424108b5424180bc0ff128b042483c418c2080083f90775708b7804f7c701000000756a8b770483fe0175678b4d008d49f03b4d087303ff5520894d00c741fc03000000be34dc7e4189318b7424088971088b72088971045050505253ff37518d4c2410518b58088b4424240bc0e8b677feffff742420ff7424188b5c240c8b4424088b542410eb0fe996000000e981000000e96f0000000bc0e86afdffff8b7d008d7ff43b7d087303ff5520897d00c747fc02000000c7470401000000890783ff0175068b74240ceb15578b4424108d54241c0bc0e87a14000089c683c4048b45008d40f43b45087303ff5520894500c740fc02000000897004c7001300000083c418c20800b840dd7e41ff552cb801000000b840dd7e4183c800ff552cb80100000083f9f375718b75008d76f03b75087303ff5520897500c746fc03000000b978dd7e41890e8b4c2408894e088b4a08894e04505050525357ff7008568d742414568b58048b44242883c800e8b676feff8b5d008d5bf43b5d087303ff5520895d00c743fc020000008b542414895304c70315000000eb05e9e80000005383fa017507b903000000eb208b028b3883fffb75128b52043b650c7303ff5524ebdeb901000000b90100000083f901742d8b04240bc0e8a216faff8b75008d76f43b75087303ff5520897500c746fc02000000894604c706fbffffffeb038b34245050ff7424148d5c2404538b5c241489f08b54241883c800ff128b55008d52f43b55087303ff5520895500c742fc02000000c74204010000008b0c24890a83fa0175068b44241ceb14528b4424208d54242c83c800e8fe13000083c40489c78b45008d40f43b45087303ff5520894500c740fc02000000897804c7001300000083c428c2080083f90975188b7c24088b742404897c2408897424048b4004e965fbffffb840dd7e4183c800ff552cb80100000090|@5707,63|33,0,@5687 78,1,@4943 98,1,@5035 110,1,@1900 121,0,10 126,1,@1488 157,0,0 164,0,0 169,0,I48 245,0,0 278,0,0 293,0,4 306,1,@1898 362,1,@1883 372,0,@408 382,1,@2204 394,1,@5035 415,0,10 422,1,@1488 453,0,0 460,0,0 472,0,I48 572,0,@5700 614,1,@4925 689,0,0 718,1,@5702 756,0,9 767,0,@5703 775,0,0 780,0,@5703 791,0,0 825,0,@5705 870,1,@4925 907,0,10 925,0,1 954,0,0 959,0,0 974,1,@2837 1007,0,-3 1069,0,0 1102,1,@5706 1140,0,9 1180,0,@5703 1191,0,0 5687:C2,752|3b650c7303ff55248b7a048b375050525053568d4c2410518b5a0c0bc0e8629bfeff8b4424088b78048b078b54241090ff128b75008d76f83b75087303ff5520897500c746fc01000040c70603000000505050689c317541bb81000000b8170000000bc0ff15a0920408c700150000008b5d008d5bf43b5d087303ff5520895d00c743fc02000000894304c703ffffffff8b55008d52f83b55087303ff5520895500c742fc01000040891a8d4c240489118d442404bf9c3175418978048b5d008d5bf43b5d087303ff5520895d00c743fc020000008b54240489138b4c2408894b048b45008d40f83b45087303ff5520894500c740fc01000040c7000100000089c78b44242883c800e8ce7ff8ff8b5424148b4d008d49d43b4d087303ff5520894d00c741fc0a00000056535750ff7204ff720851ba68cd7e4189118b5424048951248b5424388951208b54242889511c8b5424088951188b54241c8951148b54243089511089710c8959088979048b55008d52f43b55087303ff5520895500c742fc02000000be80da7e418932894a046a0189d3e8629cf8ff8b5c24188b1383fa01741c8b4c24408b44242c8901c7410403000000b80100000083c43cc208008b4c24108b018b7d008d7ff43b7d087303ff5520897d00c747fc02000000be08db7e4189378b5c2414895f0489fb0bc0e8de74fcff8b55008d52f43b55087303ff5520895500c742fc02000000894204c702150000005283f8017507b903000000eb208b388b3783fefb75128b40043b650c7303ff5524ebdeb901000000b90100000083f901742c8b042490e85a13faff8b5d008d5bf43b5d087303ff5520895d00c743fc02000000894304c703fbffffffeb038b1c248b55008d52f43b55087303ff5520895500c742fc02000000c7420401000000891a83fa0175068b4c2438eb13528b44243c8d542444e87e0e000089c183c4048b45008d40f43b45087303ff5520894500c740fc02000000894804c700130000008b7c24448907c7470401000000b80100000083c440c20800|@5699,63|30,1,@5018 76,0,1 84,0,@487 89,0,64 94,0,11 102,0,I11 108,0,10 141,0,-1 182,0,@487 252,0,0 266,1,@1919 310,0,@5688 392,0,@5694 406,1,@2002 434,0,1 439,0,0 480,0,@5696 498,1,@3873 531,0,10 542,0,1 571,0,0 576,0,0 590,1,@2837 623,0,-3 659,0,0 686,1,@5698 724,0,9 737,0,0 742,0,0 5688:C2,2652|3b650c7303ff552489d15089d8ba2c38774183c800e8b66af8ff83f801746389d8ba2038774183c800e82e6bf8ff89c789f883c800e8ce07f9ff89fe90e82208f9ff83f801747089f0e8ba07f9ff83c800e86208f9ff89c38b411c0bc0e86e7df8ff515653ff74240cbb1038774183c800e89a5df8fff7c00100000075098b10eb15e950020000b874f5754183c800ff552cba0100000089d189c80bc0e86607f9ff89c689f083c800e8b607f9ff83f801745f89f0eb05e91002000090e8f607f9ff8b1424500bc2a801587503ff55383bc274148b7c24088b5f0cc70301000000b801000000eb05b80100000089f00bc0e8c207f9ff8b7c24088b77148b1e83fb0b75135189f30bc0e8520cfaff89c3eb64e93a00000083fbfb750e5189f30bc0e83a0cfaff89c3eb648b5d008d5bf03b5d087303ff5520895d00c743fc03000000894308897304c7030d00000051eb438b5c24088b530cc702010000008b43188b3889c8e82270f8ff83f801740cbbf8257541eb1de91900000089c8e88606f9ff5189fbe8c6a4feff89c3eb06e901000000518b142483fa01754253b81500000083c800e8eacaf7ff8b4d008d49ec3b4d087303ff5520894d00c741fc04000000c7410c01000000c7410801000000bf40970408897904890189ceeb048b7208538b44240c83f801753f56b815000000e89ecaf7ff8b7d008d7fec3b7d087303ff5520897d00c747fc04000000c7470c01000000c7470801000000be40970408897704890789f9eb048b48085650508b7c241c518d742404568b5c24108b4424148b571083c800ff128b5c240483fb0175148b4c241c8b410cc70001000000ba01000000eb05ba010000008b54241cff34248b5c24188b420883c800e83a2bfaff8b4c241c8b41048b388b7424145723fef7c7010000005f7503ff55383bf77c1ff7c6010000007503ff553889f383c30270f68918b80100000083c424c20400b80100000083c424c20400b80100000083c404c2040089d8baf83a774183c800e8b66af8ff83f801747389d8baec3a774183c800e82e6bf8ff8b78088b3783fe01755f89c38b411ce8c27af8ff5153ff7704ff74240cbb7028774190e8ee5af8fff7c00100000075048b10eb0db874f57541ff552cba010000008b4c240489d78b410490e82e07000083f80174208b5f0483fb017511be03000000eb16e91c060000e90c060000be01000000eb05be010000008b41040bc0e8fa06000083f80174198b5704f7c2010000007507bb03000000eb0cbb01000000eb05bb010000008b57088b0283f80175718b4a048b3c24510bcff6c101597503ff55383bcf7402eb0c83fe017402eb0583fb0174148b7c24088b470cc70001000000b801000000eb05b80100000083fe0174718b442404e8eaedf8ff83c800e85af2f8ff83f80174608b7424088b5e148b0383f80b751489c80bc0e84609faffeb05e91f04000089c2eb3583f8fb750c89c890e82e09faff89c2eb248b55008d52f03b55087303ff5520895500c742fc03000000894a08895a04c7020d00000089d7eb0ae9d1020000e9f00000008b44240490e8122af8ff8b75008d76f43b75087303ff5520897500c746fc02000000894604c706fbffffff8b5d008d5bf43b5d087303ff5520895d00c743fc02000000ba1c32754189530489338b4d008d49f43b4d087303ff5520894d00c741fc0200000089590489398b45008d40f43b45087303ff5520894500c740fc02000000894804c700150000005083f9017507bf03000000eb208b318b1e83fbfb75128b49043b650c7303ff5524ebdebf01000000bf0100000083ff01742e8b042490e8720dfaff89c28b45008d40f43b45087303ff5520894500c740fc02000000895004c700fbffffffeb728b0424eb728b7424088b5e188b13f6c2017503ff553889d083c00270f6518b5620ff128b3883ff0b751189c38b042483c800e8d607faff89c1eb4783fffb750f89c38b042490e8c207faff89c1eb338b4d008d49f03b4d087303ff5520894d00c741fc030000008b3424897108894104eb0ae94d030000e948030000c7010d0000008b442408e8a628f8ff8b5d008d5bf43b5d087303ff5520895d00c743fc02000000894304c703fbffffff8b55008d52f43b55087303ff5520895500c742fc02000000b8b82b7541894204891a8b7d008d7ff43b7d087303ff5520897d00c747fc02000000895704890f8b75008d76f43b75087303ff5520897500c746fc02000000897e04c706150000005683ff017507bb03000000eb208b178b0a83f9fb75128b7f043b650c7303ff5524ebdebb01000000bb0100000083fb01742e8b042490e8060cfaff89c78b45008d40f43b45087303ff5520894500c740fc02000000897804c700fbffffffeb038b04248b7d008d7fdc3b7d087303ff5520897d00c747fc08000000c7471c01000000c7471801000000c74714ffffffffc7471003000000c7470c01000000c7470803000000be4097040889770489078b45008d40f43b45087303ff5520894500c740fc02000000897804c700f3ffffff83c404eb6883fb0174688b7424088b5e148b3b83ff0b750989c8e81206faffeb3483fffb750b89c80bc0e80206faffeb248b45008d40f03b45087303ff5520894500c740fc03000000894808895804c7000d0000008b3083fe0b751b89c3b80300000083c800e8c605faffeb64e976010000e94200000083fefb751189c3b80300000083c800e8a605faffeb5889c38b45008d40f03b45087303ff5520894500c740fc03000000c7400803000000895804c7000d000000eb558b7424088b5e148b0383f80b750f89c890e86205faffeb3de93800000083f8fb750f89c890e84e05faffeb29e9240000008b45008d40f03b45087303ff5520894500c740fc03000000894808895804c7000d00000050eb708b4c24088b410cc7000100000083fe01742e8b7424088b5e188b13528b44240890e87ae9f8ff50ff76246a018b5c240c89f8ba7c897e410bc0e8a2b3ffffeb688b7424088b56188b0a8b442404e84ee9f8ff8b7424085350ff76246a0189cb89f8ba746b7d4183c800e87e95feffeb05e9620000008b1c2483fb01745a8b1083fa0b751089c3b8030000000bc0e88e04faffeb4383fafb751489c3b80300000090e87a04faffeb2fe92a00000089c18b45008d40f03b45087303ff5520894500c740fc03000000c7400803000000894804c7000d0000008b54240c508b5c24088b42080bc0e89224faff8b4c240c8b41048b388b7424045723fef7c7010000005f7503ff55383bf77c1ff7c6010000007503ff553889f383c30270f68918b80100000083c414c20400b80100000083c414c20400b80100000083c404c2040089d8ba143a774183c800e82a63f8ff83f801747289d8ba083a774183c800e8a263f8ff89c78b411c0bc0e82274f8ff5157ff742408bbf8397741e85254f8fff7c00100000075048b30eb0db874f57541ff552cbe0100000089f18b042490e8d68ff8ff5089c8e8ce8ff8ff8b3c24f7c701000000754ff7c001000000753cff7704ff7004eb05e9450000008b188b078d54241883c800e8a20000008b04248b7c240483c4083b650c7303ff5524ebbfb80100000083c418c20400b80100000083c410c20400b80100000083c410c20400b80100000083c404c204000bc0|@5693,63|14,0,@1851 22,1,@1852 34,0,@1850 42,1,@1855 54,1,@2204 62,1,@2206 74,1,@2204 82,1,@2208 94,1,@1919 106,0,@1849 114,1,@1805 136,0,@1191 147,0,0 158,1,@2204 170,1,@2206 190,1,@2208 221,0,0 226,0,0 233,0,0 242,1,@2208 266,1,@2830 290,1,@2830 330,0,6 346,0,0 358,1,@1883 368,0,@408 382,1,@2204 390,1,@5035 414,0,10 422,1,@1488 453,0,0 460,0,0 465,0,I48 493,0,10 498,1,@1488 529,0,0 536,0,0 541,0,I48 604,0,0 609,0,0 616,0,0 638,1,@2889 695,0,0 706,0,0 717,0,0 730,0,@1871 738,1,@1872 750,0,@1870 758,1,@1875 778,1,@1919 792,0,@1802 798,1,@1805 815,0,@1191 823,0,0 838,1,@5689 856,0,1 873,0,0 880,0,0 890,1,@5689 911,0,1 918,0,0 925,0,0 984,0,0 989,0,0 996,0,0 1010,1,@2153 1018,1,@2163 1046,1,@2830 1070,1,@2830 1110,0,6 1134,1,@1690 1167,0,-3 1196,0,@495 1263,0,10 1274,0,1 1303,0,0 1308,0,0 1322,1,@2837 1357,0,-3 1414,1,@2830 1434,1,@2830 1489,0,6 1498,1,@1690 1531,0,-3 1560,0,@448 1627,0,10 1638,0,1 1667,0,0 1672,0,0 1686,1,@2837 1721,0,-3 1757,0,0 1764,0,0 1771,0,-1 1778,0,1 1785,0,0 1792,0,1 1797,0,I48 1835,0,-7 1866,1,@2830 1882,1,@2830 1920,0,6 1934,0,1 1942,1,@2830 1966,0,1 1974,1,@2830 2009,0,1 2018,0,6 2042,1,@2830 2062,1,@2830 2105,0,6 2121,0,0 2146,1,@2153 2163,0,@5563 2170,1,@5564 2190,1,@2153 2210,0,@5032 2218,1,@5034 2247,0,1 2254,1,@2830 2268,0,1 2274,1,@2830 2314,0,1 2323,0,6 2342,1,@2889 2399,0,0 2410,0,0 2421,0,0 2434,0,@1865 2442,1,@1866 2454,0,@1864 2462,1,@1869 2474,1,@1919 2485,0,@1863 2490,1,@1805 2507,0,@1191 2515,0,0 2526,1,@1994 2534,1,@1994 2582,1,@5691 2607,0,0 2618,0,0 2629,0,0 2640,0,0 5689:C2,20|83f8ff7506b803000000c3b801000000c383c800|@5690,1|6,0,1 12,0,0 5690:S11|53696d706c6556616c7565 5691:C2,396|3b650c7303ff55248b78088b3783fe01755a8b4b088b3183fe0175728b41048b5f04500bc3a801587503ff55383bc3740c8b5af88b730cc706010000008b72f88b5e148b0383f80b750e52ff77048b4104e84e02faffeb4e83f8fb751452ff77048b410490e83a02faffeb3ae9150100008b45008d40f03b45087303ff5520894500c740fc030000008b5904eb05e96b0000008958088b4e14894804c7000d00000052ff77048b7c24048b77f8508b5c24048b4608e84622faff8b5c24048b53f88b4a048b018b3c245023c7a801587503ff55383bf87c1df7c7010000007503ff553889fe83c60270f68931b80100000083c408c3b80100000083c408c38b4af88b710cc706010000008b71188b0e8b72f852ff7704ff700cff76246a0189d889cbba746b7d410bc0e84292feff8b7c24048b77f8508b5c24048b4608e8be21faff8b5c24048b53f88b4a048b018b3c245023c7a801587503ff55383bf87c1df7c7010000007503ff553889fe83c60270f68931b80100000083c408c3b80100000083c408c3b801000000c3|@5692,63|57,0,0 82,1,@2830 102,1,@2830 158,0,6 182,1,@2889 237,0,0 246,0,0 262,0,0 291,0,@5032 298,1,@5034 318,1,@2889 373,0,0 382,0,0 391,0,0 5692:S90|535452554354555245535f28292e67656e636f646553747275637473283229737472756374757265436f64652834296d61746368537472756374757265283429552d28332970726f63657373436f6e7374727563746f72283229 5693:S69|535452554354555245535f28292e67656e636f646553747275637473283229737472756374757265436f64652834296d61746368537472756374757265283429552d283329 5694:C2,28|3b650c7303ff55248b78088b3424893c248b58048b008b520456ff22|@5695,63| 5695:S69|535452554354555245535f28292e67656e636f646553747275637473283229737472756374757265436f64652834296d61746368537472756374757265283429552d283129 5696:C2,20|3b650c7303ff552489c38b4204e96a4ef6ff0bc0|@5697,63|14,1,@435 5697:S76|535452554354555245535f28292e67656e636f646553747275637473283229737472756374757265436f64652834296d61746368537472756374757265283429636f64654c6973742d283129 5698:C2,68|3b650c7303ff552483f80175048b42bcc352ff308b40040bc0e8e2ffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0424890289d083c408c3|@1462,5| 5699:S64|535452554354555245535f28292e67656e636f646553747275637473283229737472756374757265436f64652834296d61746368537472756374757265283429 5700:C2,80|3b650c7303ff5524505050ff70048d7c2404578b188b42088b520490ff128b45008d40f03b45087303ff5520894500c740fc030000008b342489308b5c24048958048b54240889500883c40cc383c800|@5701,63| 5701:S56|535452554354555245535f28292e67656e636f646553747275637473283229737472756374757265436f6465283429636f6465642d283129 5702:C2,68|3b650c7303ff552483f80175048b42e4c352ff308b40040bc0e8e2ffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0424890289d083c408c3|@1462,5| 5703:O3|@7320,@224,@5704 5704:S30|737472756374757265436f64653a206e6f74206120737472756374757265 5705:C2,80|3b650c7303ff5524505050ff70048d7c2404578b188b42088b520490ff128b45008d40f03b45087303ff5520894500c740fc030000008b342489308b5c24048958048b54240889500883c40cc383c800|@4951,63| 5706:C2,68|3b650c7303ff552483f80175048b42d4c352ff308b40040bc0e8e2ffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0424890289d083c408c3|@1462,5| 5707:S47|535452554354555245535f28292e67656e636f646553747275637473283229737472756374757265436f6465283429 5708:C2,84|3b650c7303ff5524505050ff70048d7c2404578b18b8409704088b520483c800ff128b45008d40f03b45087303ff5520894500c740fc030000008b342489308b5c24048958048b54240889500883c40cc383c800|@4951,63|22,0,I48 5709:O2|0,@5710 5710:O1|@5711 5711:C2,8|b89c317541c30bc0|@5712,1|1,0,@487 5712:S40|535452554354555245535f28292e67656e636f646553747275637473283229636f6465642d283129 5713:C2,68|3b650c7303ff552483f80175048b42d4c352ff308b40040bc0e8e2ffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0424890289d083c408c3|@1462,5| 5714:S31|535452554354555245535f28292e67656e636f646553747275637473283229 5715:O3|103,@349,@5716 5716:S21|537461746963206572726f72732028706173733329 5717:C2,772|8d7c248c3b7d0c7303ff55285050505052ff7224bb01000000b80f0000000bc0ff15009d040850bb01000000b81100000083c800ff15009d040850bb01000000b81300000083c800ff15009d040850bb01000000b81b00000083c800ff15009d04088d7c241489078d7424148b1c24895e048d5424148b4c2404894a088d4424148b7c240889780c8b74240c83fe01740d89f090ff15409c040889c3eb05bb01000000ff7504bbdae07e41536a018965048b4c241cb8010000008b512083c800ff1289c2ff7424088f4504eb70908b7c240c83ff01741350b80100000083c800ff15409c040889c6eb06be01000000505050bb01000000b80f000000ff15009d04088b74242c89c323def6c3017503ff553889c32bde8d5b0170f453bb01000000b8110000000bc0ff15009d04088b54242c89c123caf6c101750aeb05e989000000ff553889c12bca8d490170ed8d44240489088d7c24048b34248977048b5c24088b4c240489d823c1a8017503ff55388d43ff03c170f68b7c241c83ff01741150b80100000090ff15409c040889c6eb06be01000000508b7424248b5e1883fb01741aff7608ff7604ff742408ff76148b5e0c8b46100bc0e8620100008b44241090ff552cba010000008b44241883f801741252b8010000000bc0ff15409c040889c7eb06bf01000000525050bb01000000b80f000000ff15009d04088b7c243889c623f7f7c6010000007503ff553889c62bf78d760170f456bb01000000b81100000083c800ff15009d04088b5c243889c223d3f6c2017503ff553889c22bd38d520170f48d4c240489118d4424048b3c248978048b7424088b5c240489f223d3f6c2017503ff55388d56ff03d370f68b4c242c505050505050528d442404508b591c8b44242ce8a61700008b7d008d7fe43b7d087303ff5520897d00c747fc060000008b74240489378b5c2408895f048b54240c8957088b4c2410894f0c8b4424148947108b7424188977148b5c24488b531883fa01742157ff7308ff7304ff74240cff73148b4b108b430c89c389c80bc0e826000000eb01578b042483c460c3|@936,63|21,0,0 26,0,7 34,0,I94 40,0,0 45,0,8 54,0,I94 60,0,0 65,0,9 74,0,I94 80,0,0 85,0,13 94,0,I94 150,0,I88 159,0,0 167,0,$5717+206 182,0,0 217,0,0 226,0,I88 235,0,0 243,0,0 248,0,7 254,0,I94 285,0,0 290,0,8 298,0,I94 387,0,0 394,0,I88 403,0,0 442,1,@5718 455,0,0 470,0,0 478,0,I88 487,0,0 495,0,0 500,0,7 506,0,I94 540,0,0 545,0,8 554,0,I94 650,1,@5787 758,1,@5718 5718:C2,316|3b650c7303ff55245053b884e47e418b54240c90ff12bb030000008b442404ba9ce47e4190e85e0100008b54240c0bc0ff12b8ccf97e418b54240c90ff128b3c248b74240489fb23def6c3017503ff553889fb2bde8d5b0170f489dabb0300000089d0ba9ce47e4190e81a0100008b54240c0bc0ff12b8e0f97e418b54240c90ff128b4c24188b042489cf23f8f7c7010000007503ff553889cf2bf88d7f0170f4bb0300000089f8ba9ce47e41e8d60000008b54240c0bc0ff12b8f4f97e418b54240c90ff128b7424148b5c241889f223d3f6c2017503ff553889f22bd38d520170f4bb0300000089d0ba9ce47e410bc0e8920000008b54240c0bc0ff12b808fa7e418b54240c90ff12bb030000008b442410ba9ce47e4190e86a0000008b54240c0bc0ff12b8150000008b54240c8b4c240883c41c51ff2283c800|@5786,63|11,0,@5719 23,0,1 32,0,@5720 38,1,@5722 51,0,@5782 93,0,1 100,0,@5720 106,1,@5722 119,0,@5783 162,0,1 169,0,@5720 174,1,@5722 187,0,@5784 228,0,1 235,0,@5720 242,1,@5722 255,0,@5785 267,0,1 276,0,@5720 282,1,@5722 295,0,10 5719:S15|54696d696e67202d2070617273653a 5720:O2|@5722,@5721 5721:B8|0000000080842e41 5722:C2,132|3b650c7303ff5524f6c3017503ff553883fb017e0489dfeb05bf010000008b5d008d5bf83b5d087303ff5520895d00c743fc01000000893b8b7d008d7ff43b7d087303ff5520897d00c747fc02000000895f04c707ffffffff5257ba54e57e41ff128b7424048b5e0483c800ff1540a104088b1c24bafce57e4183c408e9de0000000bc0|@5781,63|26,0,0 85,0,-1 92,0,@5723 110,0,I128 118,0,@5727 126,1,@5729 5723:O1|@5724 5724:C2,96|3b650c7303ff5524f7c0010000007406ff2520a2040850bb01000100ff15e09e040883c800e8d6ffffff89c3b8d8e57e4183c800ff1520a1040850bb010001008b442404ff15009f04080bc0ff1520a2040889c38b042483c408ff25e0a00408|@5726,63|18,0,I135 24,0,32768 30,0,I109 45,0,@5725 54,0,I127 60,0,32768 70,0,I110 78,0,I135 92,0,I125 5725:B8|000000000000e040 5726:S15|5265616c2e66726f6d496e74283129 5727:O2|@5729,@5728 5728:O2|@5774,@5773 5729:C2,300|3b650c7303ff55248b3b83fffd754b8b530483fa01750abb0d000000e9270100008b0af6c1017503ff553883f9017d02eb12f6c1017503ff553881f9910100007f02eb0fb8d4b674410bc0ff552cb80100000089cbe9ee00000083ffff754b8b730483fe01750abb0d000000e9df0400008b16f6c2017503ff553883fa017d02eb12f6c2017503ff553881fa910100007f02eb0fb8d4b674410bc0ff552cb80100000089d3e9a604000083ff03754b8b730483fe01750abb19000000e99f0900008b16f6c2017503ff553883fa037d02eb12f6c2017503ff553881fa910100007f02eb0fb8d4b674410bc0ff552cb80100000089d3e9660900005050505089e38b520490ff128b7424088b5c2410897424108b54240c8954240c89d98b5c24048b042483c40c51e9d80c0000|@5772,63|24,0,6 29,1,@5730 69,0,@78 79,0,0 86,1,@5730 104,0,6 109,1,@5742 149,0,@78 159,0,0 166,1,@5742 184,0,12 189,1,@5756 229,0,@78 239,0,0 246,1,@5756 296,1,@5763 5730:C2,608|3b650c7303ff5524505389c3b81f00000083c800ff15c0a0040883f80175518b5c2404b823000000ff15c0a0040883f8017407bffd000000eb05bf40970408578b5c2408b82100000083c800ff15c0a0040883f8017407bfd8e97e41eb05bfe4e97e4189fb8b042483c40ce9ec2af6ff8b3c24f7c7010000007503ff553889fe83c60270f656bb050000008b44240890ff15e09f04088b18f7c3010000007407ba03000000eb068b138d54120183fa01754c8b342483fe017507bf40970408eb1dff700889f0baf0e97e4190ff1289c3b85d000000e8822af6ff89c7eb03ff700889fbb86100000090e86e2af6ffbb78ea7e410bc0e8622af6ff89c1eb6f83fa0375478b142483fa017507be40970408eb20ff700853ff700489d0ba84ea7e41ff1289c3b85d000000e82e2af6ff89c6eb07ff700853ff700489f38b4424040bc0e8162af6ff89c7eb70ff700850ff700453526a03bb010000008b44240883c800e8e6d4f6ffbb5d000000eb05e9d100000083c800e8e229f6ff8b3424f7c6010000007503ff553889f383eb0270f65053bb030000008b44240c83c800e8aad4f6ff89c38b04240bc0e8ae29f6ff8b5424188b4c240489d7eb05e94400000023f9f7c7010000007503ff553889d72bf98d7f0170f4f7c7010000007503ff553889fe83c60270f65089f0bae8ea7e4190ff1289c38b04240bc0e85e29f6ff89c783c410bb8b00000089f883c800e84a29f6ff8b1c24f6c3017503ff553889da83ea0270f650bbffffffff89d090e8322df6ff89c38b04240bc0e81e29f6ff89c183c40c8b042483f801740f89cbb8fd00000083c40ce90229f6ff89c883c40cc3|@5741,63|13,0,15 22,0,I124 36,0,17 42,0,I124 52,0,126 59,0,I48 69,0,16 78,0,I124 88,0,@5731 95,0,@5732 108,1,@323 135,0,2 146,0,I117 161,0,1 187,0,I48 199,0,@5733 209,0,46 214,1,@323 228,0,48 234,1,@323 239,0,@5736 246,1,@323 268,0,I48 284,0,@5737 293,0,46 298,1,@323 322,1,@323 342,0,0 354,1,@1081 359,0,46 374,1,@323 402,0,1 414,1,@1081 426,1,@323 491,0,@5739 506,1,@323 516,0,69 526,1,@323 550,0,-1 558,1,@336 570,1,@323 590,0,126 598,1,@323 5731:S3|6e616e 5732:S3|696e66 5733:O1|@5734 5734:C2,64|3b650c7303ff5524a8017503ff553883f8017f06b840970408c3a8017503ff553889c783ef0270f689f883c800e8ceffffff89c3b861000000e98228f6ff0bc0|@5735,63|21,0,I48 53,0,48 58,1,@323 5735:S25|5265616c2e736369466d742832296164645a65726f73283129 5736:S2|4530 5737:O1|@5738 5738:C2,64|3b650c7303ff5524a8017503ff553883f8017f06b840970408c3a8017503ff553889c783ef0270f689f883c800e8ceffffff89c3b861000000e9ee27f6ff0bc0|@5735,63|21,0,I48 53,0,48 58,1,@323 5739:O1|@5740 5740:C2,64|3b650c7303ff5524a8017503ff553883f8017f06b840970408c3a8017503ff553889c783ef0270f689f883c800e8ceffffff89c3b861000000e98a27f6ff0bc0|@5735,63|21,0,I48 53,0,48 58,1,@323 5741:S14|5265616c2e736369466d74283229 5742:C2,708|3b650c7303ff5524505389c3b81f00000083c800ff15c0a0040883f80175518b5c2404b823000000ff15c0a0040883f8017407bffd000000eb05bf40970408578b5c2408b82100000083c800ff15c0a0040883f8017407bfd8e97e41eb05bfe4e97e4189fb8b042483c40ce9e426f6ffff3424bb070000008b442408ff15e09f04088b38f7c7010000007407be03000000eb068b378d7436018b5804f6c3017503ff553883fb017f738b0c2483f9017507ba61000000eb69ba0100000089d923caf6c1017503ff553889d12bcb8d490170f45753ff70085689c8ba44ee7e4190ff1289c3b8c0ee7e41e86626f6ff8b5c240c83c800e85a26f6ff8b7c24108b342489fb23def6c3017503ff553889fb2bde8d5b0170f48b542408eb0ae93f000000e93300000089d923caf6c1017503ff55388d4bff03ca70f65089c8baccee7e4183c800ff1289c38b04240bc0e80226f6ff89c283c408eb595050ff7008eb705323def6c3015b7503ff55383bf37f6589da23d6f6c2017503ff553889da2bd68d520170f45050ff70085789d0ba30ef7e410bc0ff1289c38b04240bc0e8b225f6ff8b7c241083ff01750cb940970408eb2ce9ef0000005089f8ba94ef7e4190ff1289c3b85d000000e88625f6ffeb0ae9d1000000e91400000089c1eb015089cb8b042490e86a25f6ff89c2eb725050ff700857535653bb0100000089f883c800e83ed0f6ffbb5d0000000bc0e84225f6ff8b14248b4c240489d723f9f7c7010000007503ff553889d72bf98d7f0170f4505789cb8b442410e806d0f6ff89c38b04240bc0e80a25f6ff8b74241c8b5c240489f223d3f6c2017503ff5538eb05e93e00000089f22bd38d520170ed8b4c240889d723f9f7c7010000007503ff55388d7aff03f970f65089f8baf8ef7e41ff1289c38b04240bc0e8b624f6ff89c283c40c83c4088b342483fe01740f89d3b8fd00000083c414e99724f6ff89d083c414c390|@5755,63|13,0,15 22,0,I124 36,0,17 42,0,I124 52,0,126 59,0,I48 69,0,16 78,0,I124 88,0,@5731 95,0,@5732 108,1,@323 116,0,3 126,0,I117 141,0,1 178,0,48 185,0,0 219,0,@5743 229,0,@5746 234,1,@323 246,1,@323 317,0,@5747 334,1,@323 398,0,@5749 414,1,@323 428,0,I48 443,0,@5751 453,0,46 458,1,@323 486,1,@323 504,0,0 514,1,@1081 519,0,46 526,1,@323 570,1,@1081 582,1,@323 652,0,@5753 666,1,@323 689,0,126 697,1,@323 5743:O1|@5744 5744:C2,64|3b650c7303ff5524a8017503ff553883f8017f06b840970408c3a8017503ff553889c783ef0270f689f883c800e8ceffffff89c3b861000000e92e24f6ff0bc0|@5745,63|21,0,I48 53,0,48 58,1,@323 5745:S16|5265616c2e6164645a65726f73283129 5746:S2|302e 5747:O1|@5748 5748:C2,64|3b650c7303ff5524a8017503ff553883f8017f06b840970408c3a8017503ff553889c783ef0270f689f883c800e8ceffffff89c3b861000000e9a623f6ff0bc0|@5745,63|21,0,I48 53,0,48 58,1,@323 5749:O1|@5750 5750:C2,64|3b650c7303ff5524a8017503ff553883f8017f06b840970408c3a8017503ff553889c783ef0270f689f883c800e8ceffffff89c3b861000000e94223f6ff0bc0|@5745,63|21,0,I48 53,0,48 58,1,@323 5751:O1|@5752 5752:C2,64|3b650c7303ff5524a8017503ff553883f8017f06b840970408c3a8017503ff553889c783ef0270f689f883c800e8ceffffff89c3b861000000e9de22f6ff0bc0|@5745,63|21,0,I48 53,0,48 58,1,@323 5753:O1|@5754 5754:C2,64|3b650c7303ff5524a8017503ff553883f8017f06b840970408c3a8017503ff553889c783ef0270f689f883c800e8ceffffff89c3b861000000e97a22f6ff0bc0|@5745,63|21,0,I48 53,0,48 58,1,@323 5755:S14|5265616c2e666978466d74283229 5756:C2,668|3b650c7303ff5524505389c3b81f00000083c800ff15c0a0040883f80175518b5c2404b823000000ff15c0a0040883f8017407bffd000000eb05bf40970408578b5c2408b82100000083c800ff15c0a0040883f8017407bfd8e97e41eb05bfe4e97e4189fb8b042483c40ce9d421f6ffff3424bb050000008b442408ff15e09f04088b38f7c7010000007407be03000000eb068b378d7436018b58048b14245323daf6c3015b7503ff55383bda7e02eb0ff6c3017503ff553883fbf77c02eb6183fe03750489faeb5d5753ff7008566a03bb0100000089f890e856ccf6ffbb5d0000000bc0e85a21f6ff8b0c24f6c1017503ff553889cf83ef0270f65057bb030000008b4424140bc0e826ccf6ff89c38b04240bc0e82a21f6ff89c283c408eb0ae9440000005053ff7008bb8b00000089d083c800e80a21f6ff8b4c2404f6c1017503ff553889cf83ef0270f650bbffffffff89f8e8f224f6ff89c38b04240bc0e8de20f6ff89c1eb72f6c3017503ff553883fb017f47b90100000089de23f1f7c6010000007503ff553889ce2bf38d760170f45050ff70085789f0ba2cf37e4183c800ff1289c3b8c0ee7e41e89220f6ff8b1c24e88a20f6ff89c1eb585323def6c3015b7503ff55383bf37f4d89d923cef6c1017503ff5538eb05e99a00000089d92bce8d490170ed5050ff70085789c8ba90f37e4190ff1289c38b04240bc0e83e20f6ffbbf4f37e410bc0e83220f6ff89c1eb65e9600000005050ff700857535653bb0100000089f80bc0e802cbf6ffbb5d0000000bc0e80620f6ff8b0c248b7c240489ce23f7f7c6010000007503ff553889ce2bf78d760170f4505689fb8b442410e8cacaf6ff89c38b04240bc0e8ce1ff6ff89c183c40c8b5c240483fb01740f89cbb8fd00000083c418e9b11ff6ff89c883c418c383c800|@5762,63|13,0,15 22,0,I124 36,0,17 42,0,I124 52,0,126 59,0,I48 69,0,16 78,0,I124 88,0,@5731 95,0,@5732 108,1,@323 116,0,2 126,0,I117 141,0,1 210,0,0 218,1,@1081 223,0,46 230,1,@323 255,0,1 266,1,@1081 278,1,@323 300,0,69 310,1,@323 335,0,-1 342,1,@336 354,1,@323 376,0,0 413,0,@5757 425,0,@5746 430,1,@323 438,1,@323 499,0,@5759 514,1,@323 519,0,@5761 526,1,@323 549,0,0 558,1,@1081 563,0,46 570,1,@323 614,1,@1081 626,1,@323 647,0,126 655,1,@323 5757:O1|@5758 5758:C2,64|3b650c7303ff5524a8017503ff553883f8017f06b840970408c3a8017503ff553889c783ef0270f689f883c800e8ceffffff89c3b861000000e9461ff6ff0bc0|@5745,63|21,0,I48 53,0,48 58,1,@323 5759:O1|@5760 5760:C2,64|3b650c7303ff5524a8017503ff553883f8017f06b840970408c3a8017503ff553889c783ef0270f689f883c800e8ceffffff89c3b861000000e9e21ef6ff0bc0|@5745,63|21,0,I48 53,0,48 58,1,@323 5761:S2|2e30 5762:S14|5265616c2e67656e466d74283229 5763:C2,224|3b650c7303ff552483fb037528ff742408ff742408bb0100000083c800e8deffffff89c3b8fd0000008b3c2483c40c57e96b1ef6ff8b7c240883ffff75298b442404ba14f57e4190ff1289c3b890f57e41e84a1ef6ffbb530000008b342483c40c56e9391ef6ff83ff017508b8e4e97e41c2080083ff057508b89cf57e41c20800508b442408baa8f57e4190ff1289c3b8c0ee7e41e8061ef6ff8b1c2483fb017507be40970408eb2150bbffffffff8b4424040bc0e8ee21f6ff89c3b88b000000e8da1df6ff89c6eb015089f38b04248b54240883c41452e9c31df6ff83c800|@5771,63|22,0,0 37,0,126 49,1,@323 67,0,@5764 77,0,@5767 82,1,@323 87,0,41 99,1,@323 109,0,@5732 122,0,@5768 135,0,@5769 145,0,@5746 150,1,@323 163,0,I48 171,0,-1 182,1,@336 189,0,69 194,1,@323 217,1,@323 5764:O1|@5765 5765:C2,60|3b650c7303ff552483f8017506b840970408c3ff7004bbffffffff8b00e88221f6ff508b4424040bc0e8d2ffffff89c38b042483c408e9611df6ff90|@5766,63|14,0,I48 23,0,-1 30,1,@336 55,1,@323 5766:S20|494545455265616c2e646f646967697473283129 5767:S4|6e616e28 5768:S3|302e30 5769:O1|@5770 5770:C2,60|3b650c7303ff552483f8017506b840970408c3ff7004bbffffffff8b00e8ee20f6ff508b4424040bc0e8d2ffffff89c38b042483c408e9cd1cf6ff90|@5766,63|14,0,I48 23,0,-1 30,1,@336 55,1,@323 5771:S20|494545455265616c2e746f537472696e67283429 5772:S11|5265616c2e666d74283229 5773:B8|0000000000001000 5774:C2,420|3b650c7303ff552452505389c3b8230000000bc0ff15c0a00408508b5c2408b81f000000ff15c0a0040883f8017463bb04f87e418b442408ff1580a0040883f8017407bf05000000eb70bb04f87e418b44240890ff1500a0040883f80174068b742408eb0f8b44240883c800ff1580a1040889c68b5c240c8b5b0489f083c800ff1500a0040883f801740cbf03000000eb32e907000000bffdffffffeb268b5c2408b82100000090ff15c0a0040883f801740cbfffffffffeb0ae905000000bf0100000083ff0575278b7c2404c707010000008b3424897704c7470805000000c7470c01000000b80100000083c410c383ff0175278b7c2404c707010000008b3424897704c7470801000000c7470c01000000b80100000083c410c383ffff75278b7c2404c707010000008b3424897704c74708ffffffffc7470c01000000b80100000083c410c3576a01bb010000008b442410ff15e09f0408ff7004ff70088b0083c800e8620000008b3c2483ff017507be03000000eb05be0100000089f383f3028b5424108b4c2404890a895a048b7c2408897a0889420cb80100000083c41cc390|@5780,63|14,0,17 22,0,I124 32,0,15 38,0,I124 48,0,@5775 58,0,I122 68,0,2 75,0,@5775 86,0,I118 110,0,I130 130,0,I118 140,0,1 152,0,-2 163,0,16 170,0,I124 180,0,-1 192,0,0 207,0,0 220,0,2 227,0,0 232,0,0 251,0,0 264,0,0 271,0,0 276,0,0 295,0,0 308,0,-1 315,0,0 320,0,0 332,0,0 342,0,I117 358,1,@5776 371,0,1 378,0,0 411,0,0 5775:B8|0000000000000000 5776:C2,72|3b650c7303ff552450f7c0010000007407bf03000000eb068b388d7c3f01f7c7010000007503ff553889f883e80270f689c3b8010000008d5424040bc0e82200000083c404c30bc0|@5779,63|18,0,1 51,0,0 62,1,@5777 5777:C2,196|3b650c7303ff5524f6c3017503ff553883fb017d01c3f6c3017503ff553889df83ef0270f6f6c3017503ff553883fb017d02eb2a8b72fcf7c6010000007407b903000000eb068b0e8d4c09015323d9f6c3015b7503ff55383bd97d02eb1189c3b824ae74410bc0ff552cbe01000000f7c6010000007402eb118d4b0889cbd1eb0fb61c1e8d5c1b0189def7c6010000007503ff553889f183e96070f68b75008d76f43b75087303ff5520897500c746fc02000000894604890e89fb89f0e93effffff0bc0|@5778,63|64,0,1 97,0,@51 107,0,0 5778:S32|5265616c2e737472546f44696769744c69737428312967657444696773283229 5779:S22|5265616c2e737472546f44696769744c697374283129 5780:S17|5265616c2e746f446563696d616c283229 5781:S11|54696d652e666d74283229 5782:S12|2c2073656d616e746963733a 5783:S12|2c207472616e736c6174653a 5784:S11|2c2067656e65726174653a 5785:S6|2c2072756e3a 5786:S29|434f4d50494c45525f424f445928292e7072696e7454696d6573283629 5787:C2,284|3b650c7303ff552450bf78fb7e4183fb01750489feeb575050ff73048d542404528b0b89fb89c88d5424140bc0e8120100008b45008d40f43b45087303ff5520894500c740fc020000008b7c240489388b74240889700489c78b1c2483c40c3b650c7303ff5524eba5be010000008b5e04538b13bb0100000089d00bc0e8961300008b0c2450bb010000008b410883c800e8821300008b7c240450bb010000008b47140bc0e86e1300008b74240850bb010000008b460c0bc0e85a1300008b5c240c508b5304bb0100000089d0e8461300008b4c241050bb010000008b41100bc0e8321300008b7c24208b74241089378b1c24895f048b54240c8957088b4c2404894f0c8947108b442408894714b80100000083c41cc2040083c800|@5817,63|10,0,@5788 46,1,@5789 106,0,0 117,0,0 126,1,@5814 135,0,0 146,1,@5814 156,0,0 166,1,@5814 176,0,0 186,1,@5814 199,0,0 206,1,@5814 216,0,0 226,1,@5814 271,0,0 5788:O2|0,@935 5789:C2,940|3b650c7303ff55248b7b048b3083fe057572528b4d008d49f43b4d087303ff5520894d00c741fc020000008b570c8951048b138911ff37ff7704ff7708ff7710ff77148b780483ff01750489ceeb5a5050ff77048d5c24045389cb8b078d542428e8620300008b55008d52f43b55087303ff5520895500c742fc020000008b4c2404eb05e975000000890a8b44240889420489d18b3c2483c40c3b650c7303ff5524eba2be010000008b5d008d5be43b5d087303ff5520895d00c743fc060000008b14248953148b4c2404894b108b460489430c8b7c2408897b088b54240c8953048b4c2410890b8b7c241c8b168917895f04b80100000083c418c2040083fe0f7571528b4d008d49f43b4d087303ff5520894d00c741fc020000008b57148951048b138911ff37ff7704ff7708ff770cff77108b780483ff01750489ceeb585050ff77048d5c24045389cb8b078d54242883c800e8560400008b55008d52f43b55087303ff5520895500c742fc02000000eb05e97e0000008b4c2404890a8b44240889420489d18b3c2483c40c3b650c7303ff5524eb9fe905000000be010000008b5d008d5be43b5d087303ff5520895d00c743fc060000008b56048953148b0c24894b108b44240489430c8b7c2408897b088b4c240c894b048b44241089038b7c241c8b0e890f895f04b80100000083c418c2040083fe077559528b480483f901750489d8eb565050ff71048d7c2404578b018b542410e8e2fdffff8b75008d76f43b75087303ff5520897500c746fc020000008b5c2404891e8b54240889560489f38b0c2483c40c3b650c7303ff5524ebabe91e000000b8010000008b7c24088b3089378b5804895f04b80100000083c404c2040083fe0d755c528b480c8b1183fa01750489d9eb575050ff72048d442404508b028d54241490e83a0a00008b7d008d7ff43b7d087303ff5520897d00c747fc020000008b74240489378b5c2408895f0489fb8b142483c40c3b650c7303ff5524ebaae91e000000b9010000008b4424088b3989388b7104897004b80100000083c404c2040083fe0b7573ff33ff37ff7704ff7708ff770cff7710ff77148b4004ba300d7f41ff128b54240483fa01750489c3eb0d8d54241c0bc0e8060f000089c38b4d008d49e43b4d087303ff5520894d00c741fc060000008b04248941148959108b7c240889790c8b74240c8971088b5c24108959048b542414eb05e91a00000089118b4424208b7c24188938894804b80100000083c41cc204008b5424048b0b890a8b7b04897a04b801000000c2040083c800|@5813,63|98,1,@5790 165,0,0 244,0,0 342,1,@5794 414,0,0 493,0,0 603,0,0 622,0,0 670,1,@5808 735,0,0 754,0,0 792,0,@5810 818,1,@5812 905,0,0 930,0,0 5790:C2,296|3b650c7303ff55248b7afc8b77fc8b0e83f90b751dff700cff7014ff33ff730489f38b44240483c800e84edbf9ff89c1eb5083f9fb751bff700cff7014ff33ff730489f38b44240490e82edbf9ff89c1eb308b4d008d49f03b4d087303ff5520894d00c741fc030000008b13895108897104c7010d000000ff700cff701452ff73048b4424088b3889f883c800e8b200000089c689f883c800e82e43f8ff89c389f883c800e8c642f8ff5089c8e852ccfdffff34245089f090e86a19feff8b542408f6c2017503ff553889d183c10270f68b7d008d7ff43b7d087303ff5520897d00c747fc020000008947048b74241089378b5d008d5bf43b5d087303ff5520895d00c743fc020000008b542404895304893b8b4424188908895804b80100000083c414c2040090|@5793,63|42,1,@2830 74,1,@2830 116,0,6 142,1,@5791 154,1,@1900 166,1,@1898 174,1,@4661 186,1,@4843 285,0,0 5791:C2,24|83f801750eb8503d754190ff552cb8010000008b4004c390|@5792,1|6,0,@597 15,0,0 5792:S28|5354525543545f56414c5328292e66756e63746f724e616d65283129 5793:S66|535452554354555245535f28292e706173733453747275637473283329657874726163745374727563742833296578747261637446756e63746f7242696e64283329 5794:C2,464|3b650c7303ff55248b78108b3783fe01754852ff7004ff33ff7304b81500000090e8a298f7ff8b7d008d7fec3b7d087303ff5520897d00c747fc04000000c7470c01000000c7470801000000be40970408897704890789f9eb0c8b4e0852ff7004ff33ff73048b44240c8b78fc8b77fc8b1683fa0b75135189f38b44240883c800e80ed9f9ff89c3eb4183fafb75135189f38b44240883c800e8f6d8f9ff89c3eb298b5d008d5bf03b5d087303ff5520895d00c743fc030000008b442404894308897304c7030d00000051538b5c24048b04240bc0e8120100008b7c240cf7c7010000007503ff553889fe83c60270f68b5c240456ff730cff73088b03e87ac7f8ff8b55008d52ec3b55087303ff5520895500c742fc040000008b4c2404894a0c8b3c24897a08be4097040889720489028b5d008d5bf43b5d087303ff5520895d00c743fc020000008b4c240c894b04c703ffffffff8b45008d40f03b45087303ff5520894500c740fc030000008950088958048b7c241c89388b75008d76f43b75087303ff5520897500c746fc02000000894604893e8b5d008d5bf43b5d087303ff5520895d00c743fc020000008b54241489530489338b4c24288b4424088901895904b80100000083c424c20400|@5807,63|28,0,10 34,1,@1488 65,0,0 72,0,0 77,0,I48 130,1,@2830 154,1,@2830 198,0,6 214,1,@5795 254,1,@2184 296,0,I48 338,0,-1 454,0,0 5795:C2,112|3b650c7303ff552489c789d890e80648f8ff8b5d008d5bf03b5d087303ff5520895d00c743fc03000000baac037f418913897b08bf60077f41897b048b55008d52f43b55087303ff5520895500c742fc02000000bf68077f41893a895a048b3424c704240100000089d356e9c864f8ff|@5806,63|14,1,@1919 43,0,@5796 53,0,@5803 85,0,@5804 100,0,0 108,1,@2002 5796:C2,392|3b650c7303ff552489d189d8ba2c387741e87634f8ff83f801747189d8ba2038774183c800e8ee34f8ff89c789f883c800e88ed1f8ff8b1883fb0175678b51088b3283fe0b7513515789d38b400483c800e8c6d6f9ff89c6eb6883fefb7513515789d38b400483c800e8aed6f9ff89c6eb688b75008d76f03b75087303ff5520897500c746fc03000000eb05e9a90000008b5804895e08895604c7060d0000005157eb3689fe515650e812dcf8ff83f80174148b042483c800e842dcf8ff89c6eb15e913000000b850057f4183c800ff552cbe0100000083c4048b142483fa01754056b81500000090e86295f7ff8b4d008d49ec3b4d087303ff5520894d00c741fc04000000c7410c01000000c7410801000000bf40970408897904890189cbeb048b5a08568b4c24088b04248b51048b7c240c83c41457ff2289d8ba143a7741e82e35f8ff83f801743589d8ba083a774183c800e8a635f8ff515090e81262f8ff8d54240883c800e86a00000089c38b04248b7c240883c41057e9a0dbf8ffb801000000c20400|@5802,63|13,0,@1851 18,1,@1852 30,0,@1850 38,1,@1855 50,1,@2204 82,1,@2830 106,1,@2830 156,0,6 170,1,@2227 186,1,@2229 200,0,@5797 211,0,0 228,0,10 234,1,@1488 265,0,0 272,0,0 277,0,I48 317,0,@1865 322,1,@1866 334,0,@1864 342,1,@1869 350,1,@1994 362,1,@5799 380,1,@2230 385,0,0 5797:O3|@7320,@224,@5798 5798:S28|6578747261637456616c73546f5369673a2062616420616363657373 5799:C2,84|3b650c7303ff552483f8017506b801000000c352ff70048b00e852000000508b4424048b5424080bc0e8d2ffffff8b7d008d7ff43b7d087303ff5520897d00c747fc020000008947048b3424893789f883c40cc3|@413,63|14,0,0 26,1,@5800 5800:C2,196|3b650c7303ff55248b78088b3783fe01756f8b5afc8b4b088b3183fe0b7515ff30ff7004ff700c8b5b088b4704e8a2d4f9ffeb4b83fefb7517ff30ff7004ff700c8b5b088b47040bc0e886d4f9ffeb2fff30ff7004ff700c8b45008d40f03b45087303ff5520894500c740fc030000008b5704895008894804c7000d000000eb05e93c00000083c800e8cec5fdff8b4d008d49ec3b4d087303ff5520894d00c741fc040000008b3c2489790c8941088b7424048971048b5c2408891989c883c40cc3c390|@5801,63|46,1,@2830 74,1,@2830 123,0,6 138,1,@4661 5801:S70|535452554354555245535f28292e7061737334537472756374732833296578747261637456616c73546f536967283229283329636f707941436f6e7374727563746f72283129 5802:S51|535452554354555245535f28292e7061737334537472756374732833296578747261637456616c73546f536967283229283329 5803:O1|@5795 5804:C2,28|3b650c7303ff55248b78088b3424893c248b58048b008b520456ff22|@5805,63| 5805:S51|535452554354555245535f28292e7061737334537472756374732833296578747261637456616c73546f536967283229283129 5806:S48|535452554354555245535f28292e7061737334537472756374732833296578747261637456616c73546f536967283229 5807:S68|535452554354555245535f28292e706173733453747275637473283329657874726163745374727563742833296578747261637453747275637475726542696e64283329 5808:C2,1140|3b650c7303ff55248b3883fffd75718b75008d76ec3b75087303ff5520897500c746fc040000008b4810894e0c8b780c897e088b7808897e048b7804893e8b7b0452ff7008ff700cff37ff7704ff7708ff770cff7710ff77148b442418e812dcf8ff83f80174718b4424180bc0e846dcf8ff8b13f6c2017503ff553889d1eb05e9e801000083c10270ef89f090e8faf2f7ff8b7d008d7ff43b7d087303ff5520897d00c747fc0200000089770489078b75008d76f43b75087303ff5520897500c746fc020000008b5c240c895e04893e8b55008d52e4eb05e94a0000003b55087303ff5520895500c742fc060000008b04248942148b7c2404897a108b5c2408895a0c8972088b4424108942048b7c2414893a8b742428890e895604b80100000083c424c204008b5424208b42fc8b78fc8b1783fa0b75105156ff3389fb8b0424e822d1f9ffeb4183fafb75135156ff3389fb8b042483c800e80ad1f9ffeb298b45008d40f03b45087303ff5520894500c740fc030000008b13895008897804c7000d00000051565289c18b4424040bc0e8f6f1f7ff89c689c883c800e84ec2fdff8b5d008d5bec3b5d087303ff5520895d00c743fc040000008b54240889530c8943088b4c2428894b0489338b0424a8017503ff553889c783c70270f68b55008d52f43b55087303ff5520895500c742fc02000000895a0489328b4d008d49f43b4d087303ff5520894d00c741fc020000008b44241889410489118b75008d76e43b75087303ff5520897500c746fc060000008b5c240c895e148b5424108956108b44241489460c894e088b5c241c895e048b54242089168b4c24348939897104b80100000083c430c2040083ffff75708b73048b480489c883c800e89acbf8ff8b7d008d7ff43b7d087303ff5520897d00c747fc02000000894f0489078b55008d52f43b55087303ff5520895500c742fc020000008b4e14894a04893a8b45008d40e43b45087303ff5520894500c740fc060000008950148b7e10897810eb05e9290000008b560c89500c8b56088950088b56048950048b1689108b5424048b3b893a894204b801000000c2040083ff0175718b75008d76f43b75087303ff5520897500c746fc020000008b50088956048b4804890e8b7b048b4d008d49f43b4d087303ff5520894d00c741fc020000008b0789410489318b75008d76e43b75087303ff5520897500c746fc060000008b57148956148b47108946108b470c89460ceb05e9210000008b47088946088b4704894604890e8b4c24048b038901897104b801000000c204008b73048b480489c890e832c0f7ff505051ff33ff36ff7604ff7608ff760cff7610ff76148d5c242090e852c0f7ff8b45008d40f43b45087303ff5520894500c740fc020000008b7c241c8978048b74242489308b5d008d5bf43b5d087303ff5520895d00c743fc020000008b54241089530489038b4d008d49e43b4d087303ff5520894d00c741fc060000008b04248941148b7c24048979108b74240889710c8b54240c8951088959048b44241489018b7c242c8b7424188937894f04b80100000083c428c20400|@5809,63|94,1,@2246 110,1,@2248 142,1,@1690 285,0,0 322,1,@2830 346,1,@2830 386,0,6 402,1,@1690 414,1,@4661 611,0,0 638,1,@2210 777,0,0 933,0,0 950,1,@1624 982,1,@1626 1130,0,0 5809:S56|535452554354555245535f28292e706173733453747275637473283329657874726163745374727563742833296d616b6544656373283329 5810:O1|@5811 5811:C2,108|3b650c7303ff552483f8017506b801000000c38b388b77088b1e8b55008d52f43b55087303ff5520895500c742fc02000000895a048b5f04891a528b400483c800e8baffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0424890289d083c404c3|@413,61|14,0,0 5812:C2,68|3b650c7303ff552483f80175048b42e8c352ff308b40040bc0e8e2ffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0424890289d083c408c3|@1462,5| 5813:S45|535452554354555245535f28292e70617373345374727563747328332965787472616374537472756374283329 5814:C2,80|3b650c7303ff552483f801750389d8c38b38ff3753578b40048d54240ce84a0000008b75008d76f43b75087303ff5520897500c746fc020000008b5c2404895e048b1424891689f383c40cebb383c800|@5816,63|30,1,@5815 5815:C2,140|3b650c7303ff552483f8017506b801000000c38b388b70048b45008d40f43b45087303ff5520894500c740fc020000008b1f8958048b4afc8908525756e86a77fcff83f80175368b04248b54240883c800e8aaffffff8b7d008d7ff43b7d087303ff5520897d00c747fc020000008947048b742404893789f883c40cc38b04248b54240883c40ce974ffffff|@155,63|14,0,0 62,1,@4053 5816:S41|535452554354555245535f28292e70617373345374727563747328332972657646696c746572283229 5817:S29|535452554354555245535f28292e706173733453747275637473283329 5818:S31|434f4d50494c45525f424f445928292e62617365436f6d70696c6572283329 5819:O1|@5820 5820:C2,20|83f8017506b803000000c3b801000000c383c800|@742,1|6,0,1 12,0,0 5821:O3|1,@1059,@6076 5822:O4|-2,1,@5823,0 5823:O2|@5825,@5824 5824:O2|@6061,@6060 5825:O2|49,@5826 5826:O4|-3,0,@5828,@5827 5827:O2|0,@5829 5828:S9|6e616d655370616365 5829:O6|@5828,0,0,0,@5831,@5830 5830:O2|-1,@7425 5831:O2|-1,@7403 5832:O3|0,@5833,0 5833:O4|-2,1,@5834,0 5834:O2|@5836,@5835 5835:O2|@5854,@5853 5836:O2|@5838,@5837 5837:O3|1,@1059,@5839 5838:S6|616c6c466978 5839:O4|-3,@5841,@2525,@5840 5840:O2|0,@2523 5841:O2|@5842,0 5842:O4|-2,1,@5843,0 5843:O2|@5845,@5844 5844:O2|@5846,0 5845:O2|49,@521 5846:O2|50,@5847 5847:O4|-3,0,@5849,@5848 5848:O2|0,@5850 5849:S9|66697869747956616c 5850:O6|@5849,0,0,0,@5852,@5851 5851:O2|-1,@7405 5852:O2|-1,@7404 5853:O2|@5870,@5869 5854:O2|@5856,@5855 5855:O3|1,@1059,@5857 5856:S6|616c6c536967 5857:O4|-3,@5858,@2525,@5840 5858:O2|@5859,0 5859:O4|-2,1,@5860,0 5860:O2|@5845,@5861 5861:O2|@5862,0 5862:O2|50,@5863 5863:O4|-3,0,@5865,@5864 5864:O2|0,@5866 5865:S12|7369676e617475726556616c 5866:O6|@5865,0,0,0,@5868,@5867 5867:O2|-1,@7407 5868:O2|-1,@7406 5869:O2|@5886,@5885 5870:O2|@5872,@5871 5871:O3|1,@1059,@5873 5872:S6|616c6c56616c 5873:O4|-3,@5874,@2525,@5840 5874:O2|@5875,0 5875:O4|-2,1,@5876,0 5876:O2|@5845,@5877 5877:O2|@5878,0 5878:O2|50,@5879 5879:O4|-3,0,@5881,@5880 5880:O2|0,@5882 5881:S8|76616c756556616c 5882:O6|@5881,0,0,0,@5884,@5883 5883:O2|-1,@7409 5884:O2|-1,@7408 5885:O2|@5902,@5901 5886:O2|@5888,@5887 5887:O3|1,@1059,@5889 5888:S7|616c6c54797065 5889:O4|-3,@5890,@2525,@5840 5890:O2|@5891,0 5891:O4|-2,1,@5892,0 5892:O2|@5845,@5893 5893:O2|@5894,0 5894:O2|50,@5895 5895:O4|-3,0,@5897,@5896 5896:O2|0,@5898 5897:S7|7479706556616c 5898:O6|@5897,0,0,0,@5900,@5899 5899:O2|-1,@7411 5900:O2|-1,@7410 5901:O2|@5918,@5917 5902:O2|@5904,@5903 5903:O3|1,@1059,@5905 5904:S8|616c6c46756e6374 5905:O4|-3,@5906,@2525,@5840 5906:O2|@5907,0 5907:O4|-2,1,@5908,0 5908:O2|@5845,@5909 5909:O2|@5910,0 5910:O2|50,@5911 5911:O4|-3,0,@5913,@5912 5912:O2|0,@5914 5913:S10|66756e63746f7256616c 5914:O6|@5913,0,0,0,@5916,@5915 5915:O2|-1,@7413 5916:O2|-1,@7412 5917:O2|@5922,@5921 5918:O2|@5920,@5919 5919:O3|1,@5842,@1059 5920:S8|656e746572466978 5921:O2|@5926,@5925 5922:O2|@5924,@5923 5923:O3|1,@5859,@1059 5924:S8|656e746572536967 5925:O2|@5930,@5929 5926:O2|@5928,@5927 5927:O3|1,@5875,@1059 5928:S8|656e74657256616c 5929:O2|@5946,@5945 5930:O2|@5932,@5931 5931:O3|1,@1059,@5933 5932:S9|616c6c537472756374 5933:O4|-3,@5934,@2525,@5840 5934:O2|@5935,0 5935:O4|-2,1,@5936,0 5936:O2|@5845,@5937 5937:O2|@5938,0 5938:O2|50,@5939 5939:O4|-3,0,@5941,@5940 5940:O2|0,@5942 5941:S12|73747275637475726556616c 5942:O6|@5941,0,0,0,@5944,@5943 5943:O2|-1,@7415 5944:O2|-1,@7414 5945:O2|@5950,@5949 5946:O2|@5948,@5947 5947:O3|1,@5891,@1059 5948:S9|656e74657254797065 5949:O2|@6024,@6023 5950:O2|@5952,@5951 5951:O3|1,@521,@5953 5952:S9|6c6f6f6b7570466978 5953:O4|-3,@5955,@5956,@5954 5954:O2|0,@5957 5955:O2|@5847,0 5956:S6|6f7074696f6e 5957:O6|@5956,1,0,@5959,@5961,@5958 5958:O2|-1,@7424 5959:O2|@5960,0 5960:O3|3,@7416,79992 5961:O2|-1,@7417 5962:O3|1,@202,@5963 5963:O2|@5965,@5964 5964:O2|@5987,0 5965:O4|@5967,@207,@5968,@5966 5966:O4|-3,@5959,@5956,@5954 5967:S4|4e4f4e45 5968:O2|-1,@5969 5969:O2|5,@5970 5970:O2|-1,@5971 5971:O5|0,@5972,@5986,@7418,@473 5972:O3|@214,@5974,@5973 5973:O2|@453,@5982 5974:O2|@218,@5975 5975:O3|@221,0,@5976 5976:O10|0,@5977,@479,0,0,0,0,0,0,0 5977:O1|@5978 5978:O2|-1,@5979 5979:O5|0,@432,@443,@7419,@5980 5980:O2|-7,@5981 5981:O8|@485,@5967,0,0,1,0,0,0 5982:O2|@5984,@5983 5983:O1|@5985 5984:O2|@5983,0 5985:C2,20|83f8017506b803000000c3b801000000c383c800|@5967,1|6,0,1 12,0,0 5986:O2|-3,@5984 5987:O4|@5989,@989,@5990,@5988 5988:O3|1,@5960,@5966 5989:S4|534f4d45 5990:O2|-1,@5991 5991:O2|5,@5992 5992:O2|-1,@5993 5993:O5|0,@5994,@6022,@7420,@2538 5994:O3|@214,@5996,@5995 5995:O2|@453,@6014 5996:O2|@218,@5997 5997:O3|@221,0,@5998 5998:O10|0,@6000,@6005,@5999,0,0,0,0,0,0 5999:O1|@6010 6000:O1|@6001 6001:O2|-1,@6002 6002:O5|0,@432,@443,@7421,@6003 6003:O2|-7,@6004 6004:O8|@2550,@5989,0,0,1,0,0,0 6005:O1|@6006 6006:O2|-1,@6007 6007:O5|0,@432,@2559,@7422,@6008 6008:O2|-7,@6009 6009:O8|@2848,@5989,0,0,1,0,0,0 6010:O2|-1,@6011 6011:O5|0,@432,@2563,@7423,@6012 6012:O2|-7,@6013 6013:O8|@5313,@5989,0,0,1,0,0,0 6014:O4|@6016,@6018,@6017,@6015 6015:O1|@6021 6016:O3|@6018,@6017,@6015 6017:O1|@6020 6018:O1|@6019 6019:C2,24|3b650c7303ff5524ff15609e040889c283f20289d0c30bc0|@5989,5|10,0,I105 6020:C2,32|89c78b45008d40f83b45087303ff5520894500c740fc010000008938c383c800|@5989,33| 6021:C2,4|8b00c390|@5989,1| 6022:O2|-3,@6016 6023:O2|@6030,@6029 6024:O2|@6026,@6025 6025:O3|1,@521,@6027 6026:S9|6c6f6f6b7570536967 6027:O4|-3,@6028,@5956,@5954 6028:O2|@5863,0 6029:O2|@6036,@6035 6030:O2|@6032,@6031 6031:O3|1,@521,@6033 6032:S9|6c6f6f6b757056616c 6033:O4|-3,@6034,@5956,@5954 6034:O2|@5879,0 6035:O2|@6040,@6039 6036:O2|@6038,@6037 6037:O3|1,@5907,@1059 6038:S10|656e74657246756e6374 6039:O2|@6046,@6045 6040:O2|@6042,@6041 6041:O3|1,@521,@6043 6042:S10|6c6f6f6b757054797065 6043:O4|-3,@6044,@5956,@5954 6044:O2|@5895,0 6045:O2|@6050,@6049 6046:O2|@6048,@6047 6047:O3|1,@5935,@1059 6048:S11|656e746572537472756374 6049:O2|@6055,0 6050:O2|@6052,@6051 6051:O3|1,@521,@6053 6052:S11|6c6f6f6b757046756e6374 6053:O4|-3,@6054,@5956,@5954 6054:O2|@5911,0 6055:O2|@6057,@6056 6056:O3|1,@521,@6058 6057:S12|6c6f6f6b7570537472756374 6058:O4|-3,@6059,@5956,@5954 6059:O2|@5939,0 6060:O2|@6067,0 6061:O2|50,@6062 6062:O3|1,@1059,@6063 6063:O4|-3,@6064,@5956,@5954 6064:O2|@6065,0 6065:O4|-3,0,@5326,@6066 6066:O2|0,@5324 6067:O2|51,@6068 6068:O4|-3,@6069,@2525,@5840 6069:O2|@6070,0 6070:O4|-3,0,@6072,@6071 6071:O2|0,@6073 6072:S9|756e6976657273616c 6073:O6|@6072,0,0,0,@6075,@6074 6074:O2|-1,@7427 6075:O2|-1,@7426 6076:O4|-2,1,@6077,0 6077:O2|@6079,@6078 6078:O2|@6082,@6081 6079:O2|@6080,@5839 6080:S5|6669786573 6081:O2|@6085,@6084 6082:O2|@6083,@5889 6083:S5|7479706573 6084:O2|@6088,@6087 6085:O2|@6086,@5873 6086:S6|76616c756573 6087:O2|@6091,@6090 6088:O2|@6089,@5905 6089:S8|66756e63746f7273 6090:O2|@6093,0 6091:O2|@6092,@5857 6092:S10|7369676e617475726573 6093:O2|@6094,@5933 6094:S10|73747275637475726573 6095:O2|@6097,@6096 6096:O2|@6098,0 6097:S21|6d616b65737472696e67496e4e616d655370616365 6098:O3|@7317,69,@6099 6099:O4|@6097,-1,@6101,@6100 6100:O3|1,@6102,@521 6101:O2|-2,2 6102:O4|-2,1,@6103,0 6103:O2|@6105,@6104 6104:O2|@6107,0 6105:O2|49,@6106 6106:O3|3,@7428,79992 6107:O2|50,@5826 6108:O2|@6110,@6109 6109:O2|@6111,0 6110:S16|7072696e74496e4e616d655370616365 6111:O3|@7317,69,@6112 6112:O4|@6110,-1,@6114,@6113 6113:O3|1,@6115,@1059 6114:O2|-2,-4 6115:O4|-2,1,@6116,0 6116:O2|@6118,@6117 6117:O2|@6107,@6120 6118:O2|49,@6119 6119:O3|3,@7429,79992 6120:O2|@6122,@6121 6121:O2|@6124,0 6122:O2|51,@6123 6123:O3|1,@521,@1059 6124:O2|52,@522 6125:O2|@6127,@6126 6126:O2|@6128,0 6127:S10|6d616b65737472696e67 6128:O3|@7317,69,@6129 6129:O4|@6127,-1,@6131,@6130 6130:O3|1,@6132,@521 6131:O2|-2,-2 6132:O3|3,@7430,79992 6133:O2|@6135,@6134 6134:O2|@6136,0 6135:S10|696e7374616c6c5f7070 6136:O3|@7317,69,@6137 6137:O4|@6135,-1,@6139,@6138 6138:O3|1,@6140,@1059 6139:O2|-2,1 6140:O3|1,@6142,@6141 6141:O3|1,@522,@6163 6142:O4|-2,1,@6143,0 6143:O2|@6145,@6144 6144:O2|@6147,@6146 6145:O2|49,@6123 6146:O2|@6155,@6154 6147:O2|50,@6148 6148:O3|1,@6149,@1059 6149:O4|-2,1,@6150,0 6150:O2|@6152,@6151 6151:O2|@6153,0 6152:O2|49,@522 6153:O2|50,@187 6154:O2|@6161,0 6155:O2|51,@6156 6156:O3|1,@6157,@1059 6157:O4|-2,1,@6158,0 6158:O2|@6152,@6159 6159:O2|@6160,0 6160:O2|50,@522 6161:O2|52,@6162 6162:O3|1,@1059,@1059 6163:O3|1,@6165,@6164 6164:O3|1,@6166,@1059 6165:O3|3,@7431,79992 6166:O3|3,@7432,79992 6167:O2|@6169,0 6168:S9|4e616d655370616365 6169:O3|@7335,69,@6170 6170:O3|@6168,@561,@6171 6171:O4|@6172,I48,0,0 6172:O4|-1,@7434,@7435,@7433 6173:O2|@5865,@6192 6174:O2|@5881,@6175 6175:O2|@6176,0 6176:O3|@7330,69,@5882 6177:O2|@5897,@6178 6178:O2|@6179,0 6179:O3|@7330,69,@5898 6180:O2|@5913,@6181 6181:O2|@6182,0 6182:O3|@7330,69,@5914 6183:O2|@5828,@6184 6184:O2|@6185,0 6185:O3|@7330,69,@5829 6186:O2|@5941,@6187 6187:O2|@6188,0 6188:O3|@7330,69,@5942 6189:O2|@5849,@6190 6190:O2|@6191,0 6191:O3|@7330,69,@5850 6192:O2|@6193,0 6193:O3|@7330,69,@5866 6194:O2|@6196,@6195 6195:O2|@6197,0 6196:S3|6d6f64 6197:O3|@7317,69,@6198 6198:O4|@6196,-1,@186,@6199 6199:O3|1,@188,@192 6200:O2|@2525,@6201 6201:O2|@6202,0 6202:O3|@7330,69,@2523 6203:O2|33,@6204 6204:O2|@6205,0 6205:O3|@7317,69,@6206 6206:O4|33,-1,@6208,@6207 6207:O3|1,@6213,@6212 6208:O2|-1,@6209 6209:O2|-7,@6210 6210:O8|@2807,@6211,0,0,1,0,0,0 6211:S4|21283129 6212:O3|3,@7437,79992 6213:O4|-3,@6215,@2305,@6214 6214:O2|0,@2769 6215:O2|@6212,0 6216:O2|@5956,@6217 6217:O2|@6218,0 6218:O3|@7330,69,@5957 6219:O2|@5967,@6220 6220:O2|@6221,0 6221:O3|@7317,69,@5965 6222:O2|42,@6223 6223:O2|@6224,0 6224:O3|@7317,69,@6225 6225:O4|42,-1,@186,@6199 6226:O2|@5326,@6227 6227:O2|@6228,0 6228:O3|@7330,69,@5324 6229:O2|43,@6230 6230:O2|@6231,0 6231:O3|@7317,69,@6232 6232:O4|43,-1,@186,@6199 6233:O2|126,@6234 6234:O2|@6235,0 6235:O3|@7317,69,@6236 6236:O4|126,-1,@186,@551 6237:O2|45,@6238 6238:O2|@6239,0 6239:O3|@7317,69,@6240 6240:O4|45,-1,@186,@6199 6241:O2|@6243,@6242 6242:O2|@6244,0 6243:S9|426f6f747374726170 6244:O3|@7335,69,@6245 6245:O3|@6243,@561,@6246 6246:O4|@6247,I48,0,0 6247:O4|-1,@7439,@7440,@7438 6248:O2|@6994,@6993 6249:O2|@6251,@6250 6250:O2|@6252,0 6251:S12|646973706c617946756e6374 6252:O3|@7317,69,@6253 6253:O4|@6251,-1,@6255,@6254 6254:O3|1,@6298,@1059 6255:O2|-1,@6256 6256:O2|-3,@6257 6257:O1|@6258 6258:C2,160|3b650c7303ff552450505050505050ff30ff7004ff7008ff700c8d7c2410578b5810b89b0000000bc0e892b8f5ff8b75008d76e03b75087303ff5520897500c746fc070000008b5c2410891e8b5424148956048b4c2418894e088b44241c89460c8b7c2420897e108b7c2424897e148b5c2428895e188b54242c8974242c8b4c2404894c24288b0424894424248b5c24088b44240c83c42452e91e0000000bc0|@6297,63|35,0,77 42,1,@255 154,1,@6259 6259:C2,472|3b650c7303ff5524f6c3017503ff553883fb017f158b7c240cb8989975418b570c8b342483c41056ff228b7c240c5053b8181475418b5718ff128b7424148b44240483c800e8ded4ffffff760c89c3b85c2d7f4190e8f6e6f5ffbb1c2175410bc0e8eae6f5ff8b142483c800ff128b5c2418b8181475418b1383c800ff128b44240883c800e82617f8ff83c800e882aaf8ffbb4097040890ff154094040883f80175418b5424188b4a0c8b44240883c800e8fa16f8ff83c800e856aaf8ff51bb04b6764190e886e6f5ff8b142483c800ff128b44241c8b38b86c2d7f4189fa90ff12eb01508b44240ce8c216f8ff83f801753fb81500000090e8966df7ff8b4d008d49ec3b4d087303ff5520894d00c741fc04000000c7410c01000000c7410801000000bf40970408897904890189caeb038b50088b4c2408f6c1017503ff553889c883e80270f6ff74241c6a01ff742420ff74242089c389d0ba782d7f410bc0e8c60000008b7c241cb8383f7f418b570c0bc0ff128b74241cb86c2d7f418b1683c800ff128b44240c83c800e8c215f8ff8b5c2408f6c3017503ff553889da83ea0270f6ff74241c6a03ff742420ff74242089d3ba782d7f4183c800e86a0000008b4c241cb8010000008b51088b7c241083c42057ff22|@6296,63|26,0,@965 49,0,@326 70,1,@5791 80,0,@6260 86,1,@323 91,0,@377 98,1,@323 115,0,@326 134,1,@1900 142,1,@2210 147,0,I48 154,0,I24 178,1,@1900 186,1,@2210 192,0,@1570 198,1,@323 217,0,@6261 234,1,@1900 244,0,10 250,1,@1488 281,0,0 288,0,0 293,0,I48 347,0,@6262 354,1,@6264 363,0,@6295 379,0,@6261 398,1,@1898 438,0,@6262 446,1,@6264 455,0,0 6260:S8|66756e63746f7220 6261:O2|1,3 6262:O3|@6264,@6288,@6263 6263:O2|@6292,@6262 6264:C2,356|3b650c7303ff552452538b7c241850b8142f7f418b571890ff128b74241cb8887c75418b560c0bc0ff128b5c2404f6c3017503ff553883fb037f218b54241cb8000375418b120bc0ff128b4c241cb8989975418b510c0bc0ff12eb718b55008d52f83b55087303ff5520895500c742fc01000040c7020100000089d18b04240bc0e81e1df8ff510bc0e8ee3af8ff8b780883ff017459508b7004b80100000089f283c800ff128b5c24048b138b4d008d49f43b4d087303ff5520894d00c741fc020000008951048901890beb05e95f0000008b04248b38b80100000089fa0bc0ff1283c4043b650c7303ff5524eb9f8b34248b1e89dabb202f7f4189d0e80a98f9ff83f8017502eb258b08ff70048b59048b018d5424140bc0e8b20100008b042483c4043b650c7303ff5524ebd483c4048b4c241cb8000375418b11ff128b44241c8b780cb8887a754189faff128b74241cb8010000008b56088b5c240c83c42053ff22|@6287,63|16,0,@6265 31,0,@883 64,0,@312 79,0,@965 118,0,0 130,1,@1919 138,1,@2003 155,0,0 216,0,0 247,0,@6266 254,1,@2759 282,1,@6273 310,0,@312 326,0,@845 339,0,0 6265:O2|0,1 6266:O1|@6267 6267:C2,40|89c78b45008d40f43b45087303ff5520894500c740fc02000000be6c2f7f418930897804c383c800|@6272,49|27,0,@6268 6268:C2,36|3b650c7303ff55248b7a048b378b1c24893424ff770489d98b58048b0051e91d00000090|@6271,63|31,1,@6269 6269:C2,24|8b7c240889c389f88b342483c40c56ff25e094040883c800|@6270,63|17,0,I29 6270:S33|56414c55455f4f505328292e646973706c61795369672836296f72646572283429 6271:S36|56414c55455f4f505328292e646973706c61795369672836296f72646572283129283129 6272:S33|56414c55455f4f505328292e646973706c61795369672836296f72646572283129 6273:C2,524|3b650c7303ff552489d189d8ba38377741e8ca06f8ff83f80174638b411051538b38b858dc764189fa83c800ff128b0424ba2c37774183c800e82e07f8ff8b7424048b5ef8f6c3017503ff553889da83ea0270f68b4efc8b7e108b5c2408897c24088b7e08897c24048b7e04893c245389d38b51048b3c2483c40457ff2289d8ba2c387741e84a07f8ff83f80174638b411051538b38b858dc764189fa83c800ff128b0424ba2038774183c800e8ae07f8ff8b7424048b5ef8f6c3017503ff553889da83ea0270f68b4efc8b7e108b5c2408897c24088b7e08897c24048b7e04893c245389d38b51088b3c2483c40457ff2289d8ba143a7741e8be08f8ff83f80174458b411051538b38b858dc764189fa83c800ff128b0424ba083a774183c800e82209f8ff8b7424048b5e108b542408895c24088b4e04894c24048b5ef883c40452e9e000000089d8baf83a77410bc0e84a09f8ff83f801745989d8baec3a774183c800e8c209f8ff8b7804f7c7010000007506b801000000c38b71105150b858dc76418b1690ff128b5c24048b53108b4c2408895424088b4308894424048b7b048b3424893c248b5bf889f051e94c06000089d8ba203977410bc0e80607f8ff83f801743e8b411051538b38b858dc764189fa83c800ff128b0424ba1439774183c800e86a07f8ff8b7424048b5e108b542408895c24088b5ef883c40852e9a3d3f7ffb801000000c390|@6286,63|13,0,@1844 18,1,@1845 35,0,@1666 50,0,@1843 58,1,@1848 129,0,@1851 134,1,@1852 151,0,@1666 166,0,@1850 174,1,@1855 245,0,@1865 250,1,@1866 267,0,@1666 282,0,@1864 290,1,@1869 324,1,@6274 331,0,@1871 338,1,@1872 350,0,@1870 358,1,@1875 374,0,0 385,0,@1666 432,1,@6283 439,0,@1858 446,1,@1859 463,0,@1666 478,0,@1857 486,1,@1862 513,1,@1724 518,0,0 6274:C2,448|3b650c7303ff552489c153b80100000090e82a86f7ff8b3c24f7c7010000007503ff553883ff017f168b74240cb8989975418b560c8b5c240483c41053ff225089c883c800e84a34f8ff83f801747189c8e86a99f7ff5050518d5c2404e89e99f7ff8b74241cb8181475418b56180bc0ff128b5c241cb8147b75418b530c0bc0ff128b54241cb858dc76418b1283c800ff128b0424e8b21ff8ffff74240cff742420ff7424208b5c241c83c800e88aa9f7ff8b4c241cff710cbb10b67641eb05e9570000008b44240ce85edff5ff8b142483c800ff128b44240483c800e8b233f8ff8b7c2414f7c7010000007503ff553889fe83ee0270f689f38d54241883c800e8d60000008b5c2420b8010000008b53088b4c241883c42451ff2289c883c800e89a98f7ff5050518d5c2404e8ce98f7ff8b74241cb8501475418b56180bc0ff128b5c241c8b4b0c8b042490e8921df8ff83f8017407b8dc7a7541eb05b89c79754189ca83c800ff128b44241c8b38b80003754189fa90ff128b0424e8ca1ef8ffff74240cff742420ff7424208b5c241c83c800e8a2a8f7ff8b74241c8b4424088b560c83c800ff128b5c241cb8010000008b53088b4c241483c42051ff22|@6282,63|12,0,0 18,1,@1582 46,0,@965 70,1,@1994 82,1,@1624 94,1,@1626 103,0,@326 119,0,@856 135,0,@1666 150,1,@1932 174,1,@1669 186,0,@1571 202,1,@323 222,1,@1994 258,1,@6275 267,0,0 290,1,@1624 302,1,@1626 311,0,@328 334,1,@1930 344,0,@852 351,0,@826 369,0,@312 382,1,@1932 406,1,@1669 431,0,0 6275:C2,240|3b650c7303ff552483f8017506b801000000c38b7a085253ff30ff7004b874357f418b571883c800ff128b44240483c800e84ec7f7ff89c68b44240490e89e8af8ff50ff74240c89f3b8030000008b54241483c800e8be0000008b5c2408f6c3017503ff553889da83ea0270f68b0c2483f9017502eb62f6c2017503ff553883fa017d02eb5389d78b0183c800e8f2c6f7ff89c68b0183c800e8428af8ff57ff7104505789f3b8010000008b54241c0bc0e8620000008b5c2404f6c3017503ff553889da83ea0270f68b0c2483c4083b650c7303ff5524eb978b44240c8b7808b8010000008b570883c410ff2283c800|@6281,63|14,0,0 30,0,@6276 50,1,@1690 62,1,@2153 74,0,1 86,1,@6277 142,1,@1690 154,1,@2153 167,0,0 178,1,@6277 225,0,0 6276:O2|2,1 6277:C2,528|3b650c7303ff552483f80174158b7208525053b858dc76418b160bc0ff1289c7eb128b7a08525053b8000375418b1790ff1289c78b7424088b5e08b8181475418b531890ff128b5424088b4a08b8181475418b511883c800ff128b44240483f80174158b7c24088b7708b8ac377f418b1683c800ff12eb4e8b7c24088b7708b8181475418b561890ff128b5c24088b5308b8f90000008b520c83c800ff128b4c24088b41088b38b858dc764189fa0bc0ff128b7424088b5e08b8010000008b530883c800ff128b542410f6c2017503ff553883fa017f158b4c24088b41088b780cb89899754189faff12eb528b4c24088b41088b780c8b042489fa90ff128b44241483c800e8269cf7ff83f801742f8b4424140bc0e8469cf7ff8b7424088b5e08b8b8377f418b13ff128b5424088b4a08b84c7975418b510c83c800ff128b7424088b5e08b8010000008b530883c800ff128b44241483c800e8d29bf7ff83f80174718b4424140bc0e8f29bf7ff8b542410f6c2017503ff553883fa017e5a8b4c24088b41088b38b8b8377f4189fa90ff128b44241483c800e8929bf7ff83f801740f8b4424140bc0e8b29bf7ff89c6eb0db8503d7541ff552cbe010000008b5c2410f6c3017503ff553889da83ea0270f6eb0ae91d000000e9180000008b4c2408ff7108ff71f8ff710489d38b060bc0e88285f7ff8b5424088b4a08b8010000008b51088b7c240c83c41857ff2290|@6280,63|20,0,@1666 41,0,@312 60,0,@326 78,0,@326 107,0,@6278 128,0,@326 146,0,124 168,0,@1666 186,0,0 226,0,@965 262,1,@1644 278,1,@1645 290,0,@6279 306,0,@820 326,0,0 346,1,@1644 362,1,@1645 393,0,@6279 410,1,@1644 426,1,@1645 435,0,@597 443,0,0 498,1,@1593 510,0,0 6278:O2|0,2 6279:O2|1,4 6280:S46|545950455f5452454528292e646973706c617954797065436f6e737472732834297056616c436f6e737472283429 6281:S50|545950455f5452454528292e646973706c617954797065436f6e737472732834297056616c436f6e7374724c697374283229 6282:S33|545950455f5452454528292e646973706c617954797065436f6e73747273283429 6283:C2,768|3b650c7303ff5524f6c3017503ff553883fb017f158b7c240cb8989975418b570c8b342483c41056ff228b388b70048b4808ff700c89f00bc0e83e9fffff83f801747189fe89c80bc0e8baa7f8ff83f801746689c8e8eea7f8ff8b542410535650b8181475418b521883c800ff128b4c241cb8d47b75418b510c0bc0ff128b44241c8b38b80003754189fa90ff128b74241cff760cbb10b676418b44240883c800e8aed9f5ff8b142483c800ff128b5c2420eb0ae97f010000e9f2000000b86c2d7f418b1383c800ff12ff7504ba6a397f41526a018965048b44241090e8e246feffff742418ff742430ff7424308b5c242883c800e89e42feffff7424088f4504eb2683c8008b0883f9037509b870ae744190ff552c8b7c2420b80cfa75418b570c0bc0ff125050508b74242cb8000375418b16ff128b5c242cb8181475418b53180bc0ff128b54242cb8750000008b520c0bc0ff128b4c242cb86c2d7f418b1183c800ff12b8010000000bc0e8f67ef7ffff74242c50ff74242c8b5c24248b4424280bc0e80a83f7ff8b44242c8b7808b80100000089faff128b74242cb8010000008b56088b5c242083c43053ff228b5424105356b8181475418b52180bc0ff128b4c2418ff710c8b5c2404b8803b7f4183c800e87ad8f5ffbb04b676410bc0e86ed8f5ff8b142483c800ff128b44241c8b38b86c2d7f4189fa90ff12b8010000000bc0e85e7ef7ffff74241c50ff74241c8b5c24148b4424180bc0e87282f7ff8b74241cb8010000008b56088b5c241083c42053ff2283fe0175748b44241053578b7018b81814754189f283c800ff128b5c2418b84c7c75418b530c0bc0ff128b542418b87c1175418b1283c800ff128b4c24188b04248b510cff128b4424088b3883ffff74558b742418b87c1175418b16ff128b5c2418b84c7975418b530c0bc0ff128b542418b86c2d7f41eb05e93e0000008b12ff12b8010000000bc0e8a27df7ffff74241850ff7424188b5c24108b4424140bc0e8b681f7ff8b742418b8010000008b56088b5c240c83c41c53ff22b80100000083c404c20c0090|@6285,63|26,0,@965 58,1,@5689 74,1,@2227 86,1,@2229 98,0,@326 115,0,@870 133,0,@312 150,0,@1571 162,1,@323 191,0,@6261 206,0,$6283+262 222,1,@5098 246,1,@5094 270,0,@54 283,0,@1199 302,0,@312 315,0,@326 331,0,58 347,0,@6261 359,0,0 366,1,@1582 390,1,@1593 402,0,0 415,0,0 439,0,@326 462,0,@6284 470,1,@323 475,0,@1570 482,1,@323 501,0,@6261 511,0,0 518,1,@1582 542,1,@1593 551,0,0 583,0,@326 599,0,@879 615,0,@316 654,0,@316 667,0,@820 683,0,@6261 699,0,0 706,1,@1582 730,1,@1593 739,0,0 757,0,0 6284:S4|76616c20 6285:S28|56414c55455f4f505328292e646973706c617956616c756573283529 6286:S39|56414c55455f4f505328292e646973706c6179536967283629646973706c617953706563283229 6287:S25|56414c55455f4f505328292e646973706c6179536967283629 6288:O2|@6289,@6262 6289:C2,184|3b650c7303ff5524f6c3017503ff553883fb017f158b7c240cb8989975418b570c8b342483c41056ff228b7c240c525053b8181475418b571883c800ff128b7424188b44240483c800e8268cf8ffff760c89c3b8e43c7f4190e84ad6f5ffbb10b676410bc0e83ed6f5ff8b142483c800ff128b5c241cb858dc76418b1383c800ff128b54240cff74241c6a03ff742420ff7424208b5c24148b4424188b520490ff128b4c241cb8010000008b51088b7c241083c42057ff22|@6291,63|26,0,@965 50,0,@326 74,1,@2178 84,0,@6290 90,1,@323 95,0,@1571 102,1,@323 119,0,@1666 167,0,0 6290:S10|7369676e617475726520 6291:S32|56414c55455f4f505328292e646973706c61795369676e617475726573283529 6292:C2,448|3b650c7303ff5524f6c3017503ff553883fb017f158b7c240cb8989975418b570c8b342483c41056ff2289d789c689f090e89e01f8ff83f80174158b5c240cb8c8b476418b530c8b0c2483c41051ff2289f083c800e80299f8ff83fe01754357565350b81500000090e86e5cf7ff8b5d008d5bec3b5d087303ff5520895d00c743fc04000000c7430c01000000c7430801000000ba40970408895304890389d8eb0989c28b4608575653520bc0e8b28af8ff8b4c241c50b8181475418b511890ff128b442420ff700c8b5c2408b8fc3e7f4183c800e8bed4f5ffbb04b676410bc0e8b2d4f5ff8b142483c800ff128b7c2424b858dc76418b1783c800ff12bb409704088b44240490ff154094040883f80175118b7424248b4424048b560c0bc0ff12eb708b5c241083fb017541b81500000083c800e8a25bf7ff8b55008d52ec3b55087303ff5520895500c742fc04000000c7420c01000000c7420801000000b940970408894a04890289d6eb038b73088b54240cf6c2017503ff553889d183e90270f68b442414ff7424246a03ff742428eb05e911000000ff74242889cb8b780489f089fa0bc0ff128b742424b8010000008b56088b5c241883c42853ff22|@6294,63|26,0,@965 50,1,@1883 64,0,@1567 86,1,@2210 100,0,10 106,1,@1488 137,0,0 144,0,0 149,0,I48 174,1,@2178 184,0,@326 206,0,@6293 214,1,@323 219,0,@1570 226,1,@323 243,0,@1666 255,0,I48 266,0,I24 302,0,10 310,1,@1488 341,0,0 348,0,0 353,0,I48 431,0,0 6293:S10|73747275637475726520 6294:S32|56414c55455f4f505328292e646973706c617953747275637475726573283529 6295:S3|29203a 6296:S30|56414c55455f4f505328292e646973706c617946756e63746f7273283529 6297:S45|494e495449414c4953455f28292e696e6974476c6f62616c456e76283129646973706c617946756e6374283129 6298:O4|-2,1,@6299,0 6299:O2|@6301,@6300 6300:O2|@6160,@6302 6301:O2|49,@5911 6302:O2|@6304,@6303 6303:O2|@6306,@6305 6304:O2|51,@5826 6305:O2|@6307,0 6306:O2|52,@187 6307:O2|53,@6123 6308:O2|@6310,@6309 6309:O2|@6311,0 6310:S10|646973706c6179536967 6311:O3|@7317,69,@6312 6312:O4|@6310,-1,@6314,@6313 6313:O3|1,@6319,@1059 6314:O2|-1,@6315 6315:O2|-3,@6316 6316:O1|@6317 6317:C2,168|3b650c7303ff552450505050505050ff30ff7004ff7008ff700c8d7c2410578b5810b89b0000000bc0e89aa2f5ff8b75008d76e03b75087303ff5520897500c746fc070000008b5c2410891e8b5424148956048b4c2418894e088b44241c89460c8b7c2420897e108b7c2424897e148b5c2428895e188b54242c8974242c8b4c2404894c24288b0424894424248b5c24088b44240c89d7ba043c7f4183c42457e9c7faffff83c800|@6318,63|35,0,77 42,1,@255 152,0,@6288 161,1,@6289 6318:S43|494e495449414c4953455f28292e696e6974476c6f62616c456e76283129646973706c6179536967283129 6319:O4|-2,1,@6320,0 6320:O2|@6321,@6300 6321:O2|49,@5863 6322:O2|@6324,@6323 6323:O2|@6325,0 6324:S17|636f6d70696c65724f7574707574546167 6325:O3|@7317,69,@6326 6326:O4|@6324,-1,@6328,@6327 6327:O4|-3,@6331,@6332,@6330 6328:O2|-1,@6329 6329:O2|-3,@674 6330:O2|0,@6333 6331:O2|@6123,0 6332:S3|746167 6333:O6|@6332,1,0,@6335,@6337,@6334 6334:O2|-1,@7444 6335:O2|@6336,0 6336:O3|3,@7442,79992 6337:O2|-1,@7443 6338:O2|@6340,@6339 6339:O2|@6341,0 6340:S16|6d6178496e6c696e6553697a65546167 6341:O3|@7317,69,@6342 6342:O4|@6340,-1,@6344,@6343 6343:O4|-3,@6346,@6332,@6330 6344:O2|-1,@6345 6345:O2|-3,@2868 6346:O2|@522,0 6347:O2|@6349,@6348 6348:O2|@6350,0 6349:S15|617373656d626c79436f6465546167 6350:O3|@7317,69,@6351 6351:O4|@6349,-1,@6353,@6352 6352:O4|-3,@6355,@6332,@6330 6353:O2|-1,@6354 6354:O2|-3,@2878 6355:O2|@187,0 6356:O2|@6358,@6357 6357:O2|@6359,0 6358:S14|636f6e76537472696e674e616d65 6359:O3|@7317,69,@6360 6360:O4|@6358,-1,@6361,@521 6361:O2|-1,@6362 6362:O2|-3,@1234 6363:O2|@6365,@6364 6364:O2|@6366,0 6365:S17|696e6c696e6546756e63746f7273546167 6366:O3|@7317,69,@6367 6367:O4|@6365,-1,@6368,@6352 6368:O2|-1,@6369 6369:O2|-3,@4930 6370:O2|@6372,@6371 6371:O2|@6373,0 6372:S7|6d6c3930546167 6373:O3|@7317,69,@6374 6374:O4|@6372,-1,@6375,@6352 6375:O2|-1,@6376 6376:O2|-3,@995 6377:O2|@6379,@6378 6378:O2|@6380,0 6379:S11|636f646574726565546167 6380:O3|@7317,69,@6381 6381:O4|@6379,-1,@6382,@6352 6382:O2|-1,@6383 6383:O2|-3,@717 6384:O2|@6386,@6385 6385:O2|@6387,0 6386:S10|646973706c617956616c 6387:O3|@7317,69,@6388 6388:O4|@6386,-1,@6390,@6389 6389:O3|1,@6395,@1059 6390:O2|-1,@6391 6391:O2|-3,@6392 6392:O1|@6393 6393:C2,160|3b650c7303ff552450505050505050ff30ff7004ff7008ff700c8d7c2410578b5810b89b0000000bc0e83e9df5ff8b75008d76e03b75087303ff5520897500c746fc070000008b5c2410891e8b5424148956048b4c2418894e088b44241c89460c8b7c2420897e108b7c2424897e148b5c2428895e188b54242c8974242c8b4c2404894c24288b0424894424248b5c24088b44240c83c42452e9c6f1ffff0bc0|@6394,63|35,0,77 42,1,@255 154,1,@6283 6394:S43|494e495449414c4953455f28292e696e6974476c6f62616c456e76283129646973706c617956616c283129 6395:O4|-2,1,@6396,0 6396:O2|@6397,@6300 6397:O2|49,@5879 6398:O2|@6400,@6399 6399:O2|@6401,0 6400:S14|7072696e74537472696e67546167 6401:O3|@7317,69,@6402 6402:O4|@6400,-1,@6403,@6327 6403:O2|-1,@6404 6404:O2|-3,@5048 6405:O2|@6407,@6406 6406:O2|@6408,0 6407:S13|646973706c6179537472756374 6408:O3|@7317,69,@6409 6409:O4|@6407,-1,@6411,@6410 6410:O3|1,@6416,@1059 6411:O2|-1,@6412 6412:O2|-3,@6413 6413:O1|@6414 6414:C2,168|3b650c7303ff552450505050505050ff30ff7004ff7008ff700c8d7c2410578b5810b89b0000000bc0e8329bf5ff8b75008d76e03b75087303ff5520897500c746fc070000008b5c2410891e8b5424148956048b4c2418894e088b44241c89460c8b7c2420897e108b7c2424897e148b5c2428895e188b54242c8974242c8b4c2404894c24288b0424894424248b5c24088b44240c89d7ba882d7f4183c42457e96ff4ffff83c800|@6415,63|35,0,77 42,1,@255 152,0,@6263 161,1,@6292 6415:S46|494e495449414c4953455f28292e696e6974476c6f62616c456e76283129646973706c6179537472756374283129 6416:O4|-2,1,@6417,0 6417:O2|@6418,@6300 6418:O2|49,@5939 6419:O2|@6421,@6420 6420:O2|@6422,0 6421:S12|706172736574726565546167 6422:O3|@7317,69,@6423 6423:O4|@6421,-1,@6424,@6352 6424:O2|-1,@6425 6425:O2|-3,@724 6426:O2|@6428,@6427 6427:O2|@6429,0 6428:S13|6c696e654c656e677468546167 6429:O3|@7317,69,@6430 6430:O4|@6428,-1,@6431,@6343 6431:O2|-1,@6432 6432:O2|-3,@6433 6433:O3|@6435,@6437,@6434 6434:O2|@6439,@7356 6435:O2|@6436,@7356 6436:C2,28|8b388b72043bfe750cb803000000c3b801000000c3b801000000c390|@593,53|10,0,1 16,0,0 22,0,0 6437:O2|@6438,@7356 6438:C2,44|89c78b45008d40f03b45087303ff5520894500c740fc03000000897808c740048b0000008b7a048938c30bc0|@593,37|32,0,69 6439:C2,36|8b388b72043bfe750a8b4008c3b801000000c3b8503d754183c800ff552cb80100000090|@593,53|14,0,0 20,0,@597 31,0,0 6440:O2|@6442,@6441 6441:O2|@6443,0 6442:S11|6465627567676572546167 6443:O3|@7317,69,@6444 6444:O4|@6442,-1,@6446,@6445 6445:O4|-3,@6451,@6332,@6330 6446:O2|-1,@6447 6447:O2|-3,@6448 6448:O3|@4971,@6449,@4973 6449:O2|@6450,@7392 6450:C2,44|89c78b45008d40f03b45087303ff5520894500c740fc03000000897808c740048b0000008b7a048938c30bc0|@593,37|32,0,69 6451:O2|@6452,0 6452:O3|1,@6453,@1059 6453:O4|-2,1,@6454,0 6454:O2|@6152,@6455 6455:O2|@5878,@6456 6456:O2|@6458,@6457 6457:O2|@6460,@6459 6458:O2|51,@522 6459:O2|@6462,@6461 6460:O2|52,@521 6461:O2|@6463,0 6462:O2|53,@521 6463:O2|54,@5826 6464:O2|@6466,@6465 6465:O2|@6467,0 6466:S14|70737461636b5472616365546167 6467:O3|@7317,69,@6468 6468:O4|@6466,-1,@6469,@6352 6469:O2|-1,@6470 6470:O2|-3,@2950 6471:O2|@6473,@6472 6472:O2|@6474,0 6473:S11|676c6f62616c5370616365 6474:O3|@7317,69,@6475 6475:O4|@6473,-1,@6476,@5826 6476:O2|-1,@6477 6477:O2|-3,@6478 6478:O18|@6480,@6497,@6502,@6507,@6512,@6517,@6522,@6525,@6528,@6533,@6536,@6541,@6544,@6547,@6550,@6553,@6556,@6479 6479:O2|@6559,@171 6480:O2|@6481,@171 6481:C2,60|3b650c7303ff55248b42048b7d008d7ff43b7d087303ff5520897d00c747fc02000000be144e7f4189378b70048977048b1889f8e97b04000083c800|@6496,63|36,0,@6482 53,1,@6493 6482:C2,32|3b650c7303ff5524bb043977418b420490e826000000bac8517f41ff2283c800|@6492,63|9,0,@1856 18,1,@6483 23,0,@6490 6483:C2,160|3b650c7303ff55248b7d008d7ff43b7d087303ff5520897d00c747fc02000000be0c4f7f418937895f04535790e88e1af8ff8b580883fb0174528b54240450ff328b4804b80100000089ca90ff128b40048b1424ff1283f801740d8b4424048b54240883c410ff228b4424048b38b80100000089fa83c800ff1283c4083b650c7303ff5524ebabb801000000e90400000083c410c38b142483c408ff2283c800|@6489,63|33,0,@6484 46,1,@2003 69,0,0 111,0,0 136,0,0 6484:C2,236|3b650c7303ff552452508b500883fa01744e8b7c24048b770450ff368b5804b80100000089da0bc0ff128b40048b1424ff1283f8017407b903000000eb298b542404b8010000008b1283c800ff1283c4083b650c7303ff5524ebafb901000000b90100000050508b44240c8b7d008d7fec3b7d087303ff5520897d00c747fc04000000be14507f4189378b5c2408895f0c8b50048957088947048b75008d76f03b75087303ff5520897500c746fc03000000bbf8507f41891e8b5c2408895e088956048b5d008d5bf03b5d087303ff5520895d00c743fc03000000894b08897304893b89d883c410c383c800|@6488,63|32,0,0 56,0,1 67,0,0 92,0,0 97,0,0 132,0,@6485 179,0,@6487 6485:C2,144|3b650c7303ff55248b420c528b38b80100000089fa83c800ff128b700883fe01745a8b1c248b530850ff328b4804b80100000089ca83c800ff128b40048b1424ff1283f80174128b4424088b78048b44240489fa83c40cff228b4424048b38b80100000089fa0bc0ff1283c4083b650c7303ff5524eba3b801000000e90400000083c40cc38b1c248b530483c404ff22|@6486,63|15,0,0 47,0,0 96,0,0 120,0,0 6486:S48|556e6976657273616c5461626c652e756e69764f76657253706563696669632832296d616b6549746572283129283129 6487:C2,80|3b650c7303ff55248b4208528b7804b80100000089fa0bc0ff128b34248b5e04ff308b40048b5308ff1289c28b45008d40f43b45087303ff5520894500c740fc020000008950048b0c24890883c408c3|@6486,63|16,0,0 6488:S45|556e6976657273616c5461626c652e756e69764f76657253706563696669632832296d616b6549746572283129 6489:S34|556e6976657273616c5461626c652e756e69764f7665725370656369666963283229 6490:O1|@6491 6491:C2,100|3b650c7303ff55248b780883ff01744c508b7004b80100000089f290ff128b1c2450b8010000008b1383c800ff1283c800e8caffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0c24890a89d083c408c3b801000000c30bc0|@5106,63|21,0,0 35,0,0 93,0,0 6492:S22|4d414b455f28292e6462456e76416c6c283329283129 6493:C2,332|3b650c7303ff552489c1b8010000000bc0e8a25ef5ff515350b8d8537f4183c800e8c65ff5ffb8010000008b7c24048b3783fe037507bb01000000eb2e81f8419c00007507bb01000000eb1fa8017503ff553889c383c30270f689d83b650c7303ff5524ebc5bb0100000089f883c800ff15209a040883f8017507bb01000000eb1f89fbb80300000083c800ff15609a04083b650c7303ff5524eb8abb01000000ff7504ba36537f41526a01896504b8010000008b542414ff1289c1ff7424088f4504eb469089c78b442404ff15009a040883f8037502eb1b8b742404c706030000005789f3b80500000090ff15609a0408eb01578b442404e8ee5ef5ff8b04240bc0ff552cb9010000008b44241090ff15009a040883f8037502eb1b8b442410c700030000005189c3b80500000090ff15609a0408eb01518b442410e8aa5ef5ff8b042483c41cc383c800|@6495,63|11,0,0 18,1,@63 26,0,@6494 34,1,@67 39,0,0 55,0,0 70,0,0 103,0,0 114,0,I71 124,0,0 133,0,1 142,0,I73 157,0,0 165,0,$6493+198 176,0,0 206,0,I70 223,0,1 231,0,2 238,0,I73 250,1,@67 263,0,0 274,0,I70 291,0,1 299,0,2 306,0,I73 318,1,@67 6494:O2|@4691,0 6495:S18|4d414b455f28292e70726f74656374283229 6496:S25|4d414b455f28292e6462456e76416c6c283129283129283129 6497:O2|@6498,@171 6498:C2,60|3b650c7303ff55248b42048b7d008d7ff43b7d087303ff5520897d00c747fc02000000be88547f4189378b70048977048b1889f8e907feffff83c800|@6496,63|36,0,@6499 53,1,@6493 6499:C2,32|3b650c7303ff5524bb1c3777418b420490e8b2f9ffffbac4547f41ff2283c800|@6492,63|9,0,@1842 18,1,@6483 23,0,@6500 6500:O1|@6501 6501:C2,100|3b650c7303ff55248b780883ff01744c508b7004b80100000089f290ff128b1c2450b8010000008b1383c800ff1283c800e8caffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0c24890a89d083c408c3b801000000c30bc0|@5106,63|21,0,0 35,0,0 93,0,0 6502:O2|@6503,@171 6503:C2,60|3b650c7303ff55248b42048b7d008d7ff43b7d087303ff5520897d00c747fc02000000beb0557f4189378b70048977048b1889f8e9dffcffff83c800|@6496,63|36,0,@6504 53,1,@6493 6504:C2,32|3b650c7303ff5524bb702877418b420490e88af8ffffbaec557f41ff2283c800|@6492,63|9,0,@1802 18,1,@6483 23,0,@6505 6505:O1|@6506 6506:C2,100|3b650c7303ff55248b780883ff01744c508b7004b80100000089f290ff128b1c2450b8010000008b1383c800ff1283c800e8caffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0c24890a89d083c408c3b801000000c30bc0|@5106,63|21,0,0 35,0,0 93,0,0 6507:O2|@6508,@171 6508:C2,60|3b650c7303ff55248b42048b7d008d7ff43b7d087303ff5520897d00c747fc02000000bed8567f4189378b70048977048b1889f8e9b7fbffff83c800|@6496,63|36,0,@6509 53,1,@6493 6509:C2,32|3b650c7303ff5524bbf83977418b420490e862f7ffffba14577f41ff2283c800|@6492,63|9,0,@1863 18,1,@6483 23,0,@6510 6510:O1|@6511 6511:C2,100|3b650c7303ff55248b780883ff01744c508b7004b80100000089f290ff128b1c2450b8010000008b1383c800ff1283c800e8caffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0c24890a89d083c408c3b801000000c30bc0|@5106,63|21,0,0 35,0,0 93,0,0 6512:O2|@6513,@171 6513:C2,60|3b650c7303ff55248b42048b7d008d7ff43b7d087303ff5520897d00c747fc02000000be00587f4189378b70048977048b1889f8e98ffaffff83c800|@6496,63|36,0,@6514 53,1,@6493 6514:C2,32|3b650c7303ff5524bb283677418b420490e83af6ffffba3c587f41ff2283c800|@6492,63|9,0,@1835 18,1,@6483 23,0,@6515 6515:O1|@6516 6516:C2,100|3b650c7303ff55248b780883ff01744c508b7004b80100000089f290ff128b1c2450b8010000008b1383c800ff1283c800e8caffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0c24890a89d083c408c3b801000000c30bc0|@5106,63|21,0,0 35,0,0 93,0,0 6517:O2|@6518,@171 6518:C2,68|3b650c7303ff55248b7a048b75008d76ec3b75087303ff5520897500c746fc04000000bb30597f41891e8b5f04895e0c8b08894e088b4804894e048b1f89f0e95cf9ffff|@6521,63|36,0,@6519 64,1,@6493 6519:C2,36|3b650c7303ff55248b7a088b3424893c24ff7204bb043977418b420c56e976d4f7ff0bc0|@6520,63|21,0,@1856 30,1,@1814 6520:S24|4d414b455f28292e6462456e76456e746572283429283129 6521:S27|4d414b455f28292e6462456e76456e746572283129283129283129 6522:O2|@6523,@171 6523:C2,68|3b650c7303ff55248b7a048b75008d76ec3b75087303ff5520897500c746fc04000000bb205a7f41891e8b5f04895e0c8b08894e088b4804894e048b1f89f0e96cf8ffff|@6521,63|36,0,@6524 64,1,@6493 6524:C2,36|3b650c7303ff55248b7a088b3424893c24ff7204bb1c3777418b420c56e986d3f7ff0bc0|@6520,63|21,0,@1842 30,1,@1814 6525:O2|@6526,@171 6526:C2,68|3b650c7303ff55248b7a048b75008d76ec3b75087303ff5520897500c746fc04000000bbcc5a7f41891e8b5f04895e0c8b08894e088b4804894e048b1f89f0e9c0f7ffff|@6521,63|36,0,@6527 64,1,@6493 6527:C2,36|3b650c7303ff55248b7a088b3424893c24ff7204bb702877418b420c56e9dad2f7ff0bc0|@6520,63|21,0,@1802 30,1,@1814 6528:O2|@6529,@171 6529:C2,60|3b650c7303ff55248b42048b7d008d7ff43b7d087303ff5520897d00c747fc02000000be705b7f4189378b70048977048b1889f8e91ff7ffff83c800|@6496,63|36,0,@6530 53,1,@6493 6530:C2,32|3b650c7303ff5524bb103877418b420490e8caf2ffffbaac5b7f41ff2283c800|@6492,63|9,0,@1849 18,1,@6483 23,0,@6531 6531:O1|@6532 6532:C2,100|3b650c7303ff55248b780883ff01744c508b7004b80100000089f290ff128b1c2450b8010000008b1383c800ff1283c800e8caffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0c24890a89d083c408c3b801000000c30bc0|@5106,63|21,0,0 35,0,0 93,0,0 6533:O2|@6534,@171 6534:C2,68|3b650c7303ff55248b7a048b75008d76ec3b75087303ff5520897500c746fc04000000bba05c7f41891e8b5f04895e0c8b08894e088b4804894e048b1f89f0e9ecf5ffff|@6521,63|36,0,@6535 64,1,@6493 6535:C2,36|3b650c7303ff55248b7a088b3424893c24ff7204bbf83977418b420c56e906d1f7ff0bc0|@6520,63|21,0,@1863 30,1,@1814 6536:O2|@6537,@171 6537:C2,60|3b650c7303ff55248b7a048b75008d76f03b75087303ff5520897500c746fc03000000bb445d7f41891e8b5f04895e088946048b1f89f0e948f5ffff|@6540,63|36,0,@6538 56,1,@6493 6538:C2,32|3b650c7303ff55248b7a048b3424893c24bb043977418b420856e915cef7ff90|@6539,63|18,0,@1856 27,1,@1805 6539:S25|4d414b455f28292e6462456e764c6f6f6b7570283329283129 6540:S28|4d414b455f28292e6462456e764c6f6f6b7570283129283129283129 6541:O2|@6542,@171 6542:C2,60|3b650c7303ff55248b7a048b75008d76f03b75087303ff5520897500c746fc03000000bb2c5e7f41891e8b5f04895e088946048b1f89f0e960f4ffff|@6540,63|36,0,@6543 56,1,@6493 6543:C2,32|3b650c7303ff55248b7a048b3424893c24bb1c3777418b420856e92dcdf7ff90|@6539,63|18,0,@1842 27,1,@1805 6544:O2|@6545,@171 6545:C2,60|3b650c7303ff55248b7a048b75008d76f03b75087303ff5520897500c746fc03000000bbcc5e7f41891e8b5f04895e088946048b1f89f0e9c0f3ffff|@6540,63|36,0,@6546 56,1,@6493 6546:C2,32|3b650c7303ff55248b7a048b3424893c24bb702877418b420856e98dccf7ff90|@6539,63|18,0,@1802 27,1,@1805 6547:O2|@6548,@171 6548:C2,68|3b650c7303ff55248b7a048b75008d76ec3b75087303ff5520897500c746fc04000000bb745f7f41891e8b5f04895e0c8b08894e088b4804894e048b1f89f0e918f3ffff|@6521,63|36,0,@6549 64,1,@6493 6549:C2,36|3b650c7303ff55248b7a088b3424893c24ff7204bb283677418b420c56e932cef7ff0bc0|@6520,63|21,0,@1835 30,1,@1814 6550:O2|@6551,@171 6551:C2,60|3b650c7303ff55248b7a048b75008d76f03b75087303ff5520897500c746fc03000000bb18607f41891e8b5f04895e088946048b1f89f0e974f2ffff|@6540,63|36,0,@6552 56,1,@6493 6552:C2,32|3b650c7303ff55248b7a048b3424893c24bbf83977418b420856e941cbf7ff90|@6539,63|18,0,@1863 27,1,@1805 6553:O2|@6554,@171 6554:C2,68|3b650c7303ff55248b7a048b75008d76ec3b75087303ff5520897500c746fc04000000bbc0607f41891e8b5f04895e0c8b08894e088b4804894e048b1f89f0e9ccf1ffff|@6521,63|36,0,@6555 64,1,@6493 6555:C2,36|3b650c7303ff55248b7a088b3424893c24ff7204bb103877418b420c56e9e6ccf7ff0bc0|@6520,63|21,0,@1849 30,1,@1814 6556:O2|@6557,@171 6557:C2,60|3b650c7303ff55248b7a048b75008d76f03b75087303ff5520897500c746fc03000000bb64617f41891e8b5f04895e088946048b1f89f0e928f1ffff|@6540,63|36,0,@6558 56,1,@6493 6558:C2,32|3b650c7303ff55248b7a048b3424893c24bb283677418b420856e9f5c9f7ff90|@6539,63|18,0,@1835 27,1,@1805 6559:C2,60|3b650c7303ff55248b7a048b75008d76f03b75087303ff5520897500c746fc03000000bbf8617f41891e8b5f04895e088946048b1f89f0e994f0ffff|@6540,63|36,0,@6560 56,1,@6493 6560:C2,32|3b650c7303ff55248b7a048b3424893c24bb103877418b420856e961c9f7ff90|@6539,63|18,0,@1849 27,1,@1805 6561:O2|@6563,@6562 6562:O2|@6564,0 6563:S11|646973706c617954797065 6564:O3|@7317,69,@6565 6565:O4|@6563,-1,@6567,@6566 6566:O3|1,@6572,@1059 6567:O2|-1,@6568 6568:O2|-3,@6569 6569:O1|@6570 6570:C2,148|3b650c7303ff552450505050505050ff30ff7004ff70088d7c240c578b580cb89b00000090e88e80f5ff8b75008d76e03b75087303ff5520897500c746fc070000008b5c240c891e8b5424108956048b4c2414894e088b44241889460c8b7c241c897e108b7c2420897e148b5c2424895e188b542428897424288b0c24894c24248b5c24048b44240883c42452e946cfffff0bc0|@6571,63|32,0,77 38,1,@255 142,1,@6274 6571:S44|494e495449414c4953455f28292e696e6974476c6f62616c456e76283129646973706c617954797065283129 6572:O4|-2,1,@6573,0 6573:O2|@6575,@6574 6574:O2|@6160,@6576 6575:O2|49,@5895 6576:O2|@6578,@6577 6577:O2|@6579,0 6578:O2|51,@187 6579:O2|52,@6123 6580:O2|@6582,@6581 6581:O2|@6583,0 6582:S13|6c696e654e756d626572546167 6583:O3|@7317,69,@6584 6584:O4|@6582,-1,@6586,@6585 6585:O4|-3,@6588,@6332,@6330 6586:O2|-1,@6587 6587:O2|-3,@659 6588:O2|@6589,0 6589:O3|1,@1059,@522 6590:O2|@6592,@6591 6591:O2|@6593,0 6592:S3|757365 6593:O3|@7317,69,@6594 6594:O4|@6592,-1,@6595,@6123 6595:O2|-1,@6596 6596:O2|-3,@6597 6597:O3|@6599,@171,@6598 6598:O18|@6671,@6676,@6681,@6686,@6691,@6696,@6699,@6702,@6705,@6710,@6713,@6716,@6719,@6722,@6725,@6728,@6731,@6670 6599:C2,1336|3b650c7303ff55245250bb4097040890ff154094040883f8017407bfac6a7f41eb0a8b0424e83605000089c78b75008d76f83b75087303ff5520897500c746fc01000040c706030000008b5d008d5bf83b5d087303ff5520895d00c743fc01000040c703010000008b55008d52ec3b55087303ff5520895500c742fc04000000b9fc6d7f41890a897a0c895a088972048b45008d40f43b45087303ff5520894500c740fc02000000b9cc887f4189088b0c248948045756535250ff7504b9ca697f41516a018965048b4424148b3883ff0175718b742424b8b48a7f41bacc447541e89adef5ff89c38b45008d40f43b45087303ff5520894500c740fc02000000ba348b7f4189108b4c2418894804bac84275410bc0e862dcf5ff89c78b45008d40f43b45087303ff5520894500c740fc02000000ba848b7f4189108b4c240c894804eb05e91d03000089f9babc3c754190e81ad6f5ff50b865000000bafcf27841e84a8cf9ff8b7d008d7ff43b7d087303ff5520897d00c747fc02000000c747040100000089078b55008d52f43b55087303ff5520895500c742fc02000000897a048b042489028b7d008d7ff43b7d087303ff5520897d00c747fc02000000895704890f8b55008d52f43b55087303ff5520895500c742fc02000000897a04891a528b5c24188b4608ba5c37754183c800e882d0f5ff89c1b80100000089ca90ff12ff7004ff7008ff700cff7010ff70148b3883ff017502eb588b378b5c243c8b53048b4d008d49ec3b4d087303ff5520894d00c741fc04000000b8ec8b7f4189018b420489410c8b1e8959088b5e04895904ff77048b1a89c883c800e8b6eaffff8b3c2483c4043b650c7303ff5524eba18b74240c83fe017502eb558b1e8b54243c8b4a048b45008d40ec3b45087303ff5520894500c740fc04000000bf2c8c7f4189388b790489780c8b138950088b5304895004ff76048b190bc0e856eaffff8b342483c4043b650c7303ff5524eba48b1c2483fb017502eb568b138b4c243c8b41048b7d008d7fec3b7d087303ff5520897d00c747fc04000000be6c8c7f4189378b700489770c8b0a894f088b4a04894f04ff73048b1889f890e8f6e9ffff8b1c2483c4043b650c7303ff5524eba38b54240483fa017502eb558b0a8b44243c8b78048b75008d76ec3b75087303ff5520897500c746fc04000000bbac8c7f41891e8b5f04895e0c8b018946088b4104894604ff72048b1f89f0e896e9ffff8b142483c4043b650c7303ff5524eba48b4c240883f9017502eb598b018b7c243c8b77048b5d008d5bec3b5d087303ff5520895d00c743fc04000000baec8c7f4189138b560489530c8b38897b088b7804897b04ff710489d98b1e89c80bc0e832e9ffff8b0c2483c4043b650c7303ff5524eba08b44241083f8017502eb558b388b74243c8b5e048b55008d52ec3b55087303ff5520895500c742fc04000000b92c8d7f41890a8b4b04894a0c8b378972088b7704897204ff70048b1b89d0e8d2e8ffff8b042483c4043b650c7303ff5524eba483c4183b650c7303ff5524e962fcffffff7424088f4504eb7183c8008b3081fecf000000754650ff7008bb6c8d7f418b442418e8aa1c00008b5d008d5bf03b5d087303ff5520895d00c743fc030000008b1424895308b9081d7541894b04c703cf00000089d883c800ff552c8b580450b8204c75410bc0e88ea8f5ffbb8c8e7f410bc0e882a8f5ffeb05e941000000ba04c2b4418b0a89c389c890e88e6bf5ffb804c2b4418b38ff7710bbf4b8744189f80bc0e8ca44f5ffbb6c8d7f418b4424140bc0e81a1c00008b04240bc0ff552cbb6c8d7f418b44241c83c428e9011c000090|@6669,63|11,0,I48 18,0,I24 28,0,@6600 38,1,@6601 70,0,1 100,0,0 129,0,@6606 169,0,@6642 190,0,$6599+1138 216,0,@6649 221,0,@678 226,1,@679 257,0,@6652 271,0,@663 278,1,@664 309,0,@6654 332,0,@594 338,1,@595 344,0,50 349,0,@2872 354,1,@2873 385,0,0 490,0,@583 498,1,@587 505,0,0 572,0,@6656 606,1,@6493 671,0,@6657 702,1,@6493 766,0,@6658 798,1,@6493 863,0,@6659 894,1,@6493 959,0,@6660 994,1,@6493 1059,0,@6661 1090,1,@6493 1153,0,@6662 1162,1,@6639 1197,0,@349 1206,0,103 1223,0,@705 1230,1,@323 1235,0,@6668 1242,1,@323 1254,0,@7321 1266,1,@229 1271,0,@7321 1281,0,@91 1290,1,@62 1295,0,@6662 1306,1,@6639 1319,0,@6662 1331,1,@6639 6600:O2|@7301,@8 6601:C2,492|3b650c7303ff552450ff7504bfee6a7f41576a0189650450bb01000000b8070000000bc0ff15e098040889c6ff7424088f4504eb70908b10b91ca0b4413bd1750989c3eb65bb0100000083fa03750cbb70ae7441eb59bb010000008b7d008d7ff03b7d087303ff5520897d00c747fc03000000bec06c7f418977088947048b1c24891f8b5d008d5bf03b5d087303ff5520895d00c743fc03000000897b08b9a4ae7441eb0fe921000000e90f000000e90a000000894b04bf1ca0b441893b89d883c800ff552cbe0100000056ff7504bbae6b7f41536a018965046a0189f3b81f00000090ff15e098040889c2ff7424088f4504eb0990ba01080000505050bb4100000089d0e8160100008b4d008d49f83b4d087303ff5520894d00c741fc01000040c701010000008b7d008d7ff83b7d087303ff5520897d00c747fc01000040c707ffffffff8b75008d76e83b75087303ff5520897500c746fc05000000897e1089460c8b5c240c895e088b54241c895604890e8b4d008d49f43b4d087303ff5520894d00c741fc02000000897104c701010000008b45008d40f83b45087303ff5520894500c740fc01000040890889c66a03bb91000000b80300000083c800ff15a09204088b5d008d5bf43b5d087303ff5520895d00c743fc02000000894304893389d883c420c383c800|@6605,63|13,0,$6601+54 25,0,0 30,0,3 38,0,I61 57,0,@7299 70,0,0 80,0,@54 87,0,0 116,0,@6602 159,0,@57 184,0,@7299 199,0,0 208,0,$6601+246 223,0,15 230,0,I61 247,0,1024 255,0,32 262,1,@6603 292,0,0 322,0,-1 401,0,0 436,0,72 441,0,1 450,0,I11 6602:S13|54657874494f2e6f70656e496e 6603:C2,212|3b650c7303ff5524f7c0010000007410a8017503ff553883f8017c0489c7eb0fb8d4b674410bc0ff552cbf0100000083ff017507be03000000eb2881fff1ffff077610b8d4b6744183c800ff552cbe010000008d47088d70fe89f0c1e80283c80189c653576a01bb8300000089f00bc0ff15a092040850bf010000008b7424043bf77702eb258b1c248b542408d1ead1ef88143b8d5412018d7c3f018d4f0289cf3b650c7303ff5524ebd18b5d008d5bf43b5d087303ff5520895d00c743fc020000008b1424895304893389d883c40cc383c800|@6604,63|33,0,@78 43,0,0 53,0,1 68,0,@78 79,0,0 104,0,65 114,0,I11 120,0,0 6604:S18|4368617241727261792e6172726179283229 6605:S16|54657874494f2e6f70656e496e283129 6606:C2,92|3b650c7303ff552452bb746e7f418b420ce87e180000f7c00100000075288b3883ff15751d8b34248b5e048b13f6c2017503ff553889d183c10270f6890b83c404c383c404c38b3c248b7708c70603000000b80100000083c404c390|@6641,63|10,0,@6607 18,1,@6639 78,0,1 83,0,0 6607:O2|@6609,@6608 6608:O2|@6617,@6616 6609:C2,500|3b650c7303ff55248b388b0783f8ff75718b77048b1e50508b4d008d49f43b4d087303ff5520894d00c741fc02000000b89c707f4189018b42048941045256ff730c89df89cb89f890e85640f5ffff70048b000bc0e80aacf5ff8d74240c89068d5c240c8b14248953048b4c24048b44241089018b7c240cf7c701000000740eeb05e97e000000be03000000eb068b378d74360183fe017509b80100000083c414c3f7c7010000007407bb03000000eb068b1f8d5c1b01f6c3017503ff553883fb017f0fb824ae74410bc0ff552cba01000000f7c701000000740489faeb080fb657048d5412018b45008d40f83b45087303ff5520894500c740fc01000000891083c414c38b77048b5e108b1383fa01750cc703ffffffffb801000000c38b0e8b118b035223d0f6c2015a7503ff55383bd07c1c51ff760c53ff7608ff742408538b5e0489c883c800e84a010000eb0551ff760c538b3c248b3783fe01750fc707ffffffffb80100000083c40cc38b5c24088b138b4c2404f7c2010000007411f6c2017503ff553883fa017c0489d0eb0eb824ae744190ff552cb8010000008b393bc7720eb824ae744190ff552cbe010000008b710489c2d1ea0fb614168d54120189d68b03a8017503ff553889c283c20270f689138b45008d40f83b45087303ff5520894500c740fc01000000893083c40cc3|@6615,63|49,0,@6610 74,1,@62 86,1,@347 136,0,1 154,0,0 171,0,1 197,0,@51 207,0,0 276,0,-1 281,0,0 330,1,@6612 353,0,-1 358,0,0 402,0,@51 411,0,0 422,0,@51 431,0,0 6610:C2,68|3b650c7303ff5524505089e757bb030000008b520483c800ff128b45008d40f43b45087303ff5520894500c740fc020000008b342489308b5c240489580483c408c30bc0|@6611,63|14,0,1 6611:S32|426173696353747265616d494f28292e696e7075744e4c697374283129283129 6612:C2,256|3b650c7303ff55248b7c2408c700010000008b442404c700ffffffff53ff7504bea2717f41566a018965048b55008d52f03b55087303ff5520895500c742fc030000008b0f894a08c74204010000008b77048932528b5c2420b8110000000bc0ff15e09804088b5c24148903b801000000ff7424088f450483c410c20c008b08bf1ca0b4413bcf750989c2eb68ba0100000083f903750cba70ae7441eb57ba010000008b75008d76f03b75087303ff5520897500c746fc03000000bb40727f41895e088946048b142489168b55008d52f03b55087303ff5520895500c742fc03000000897208bfa4ae7441897a04be1ca0b441893289d0ff552cb80100000090|@6614,63|14,0,0 24,0,-1 33,0,$6612+126 75,0,0 90,0,8 98,0,I61 109,0,0 129,0,@7299 142,0,0 152,0,@54 159,0,0 188,0,@6613 231,0,@57 239,0,@7299 251,0,0 6613:S17|54657874494f2e66696c6c427566666572 6614:S20|54657874494f2e66696c6c427566666572283529 6615:S17|54657874494f2e696e7075743127283129 6616:O2|@6620,I48 6617:C2,940|3b650c7303ff55248b78048b3783feff75158b5c2404c70301000000894304b801000000c20400f7c60100000075758b4d008d49ec3b4d087303ff5520894d00c741fc040000008b780c89790c8b78088979088b7e048979048b3889398b7e0c83ff0175158b5c2404c70301000000894b04b801000000c20400530bdff6c3015b7503ff55383bfb75718b5d008d5bf83b5d087303ff5520895d00c743fc01000000eb05e9aa020000893b51538b5e088b0683c800e80e6af5ff50505089e30bc0e81243f5ffff7424088b5c24088b44240483c800e8e64af6ff8b55008d52f43b55087303ff5520895500c742fc02000000c7420401000000eb05e91a00000089028b4c241489118b44240c894104b80100000083c410c204005323dff6c3015b7503ff55383bfb7e728b55008d52f83b55087303ff5520895500c742fc01000000891a53ff30ff7008ff700cff36ff7604ff760857528b5c24088b4424100bc0e86269f5ff50505089e30bc0e86642f5ffff7424088b5c24088b44240483c800e83a4af6ff8b4c24108b7c242889ce23f7f7c601000000750aeb05e9cc000000ff55388d71ff03f770ef8b5c240c89da23d7f6c2017503ff553889da2bd78d520170f48b4d008d49ec3b4d087303ff5520894d00c741fc0400000089510c8971088b7c24148979048b74241889318b5d008d5bf43b5d087303ff5520895d00c743fc02000000c743040100000089038b55008d52f83b55087303ff5520895500c742fc01000040890a8b4d008d49ec3b4d087303ff5520894d00c741fc040000008b44241c89410c8b7c24208979088951048b74242489318b542430891a894a04b80100000083c42cc204008b4d008d49ec3b4d087303ff5520894d00c741fc040000008b780c89790c8b78088979088b7e048979048b3889398b460c89df23f8f7c7010000007503ff553889df2bf88d7f0170f4505052ff36ff7608508d7424105689fb89c890e832fdffff8b5d008d5bf83b5d087303ff5520895d00c743fc010000008b14248913538b5c24088b44240c90e8ce67f5ff50505089e30bc0e8d240f5ffff7424088b5c24088b44240483c800e8a648f6ff8b4d008d49f43b4d087303ff5520894d00c741fc020000008b7c241c89790489018b742428890e8b5c2420895e04b80100000083c424c20400505050536868767f418d5c240853bb030000008b520483c800ff128b55008d52f43b55087303ff5520895500c742fc02000000c74204010000008b0c24890a8b44241089108b7c2404897804b80100000083c40cc204000bc0|@6619,63|24,0,0 32,0,0 107,0,0 115,0,0 182,1,@241 194,1,@76 214,1,@1082 245,0,0 272,0,0 354,1,@241 366,1,@76 386,1,@1082 522,0,0 611,0,0 758,1,@241 770,1,@76 790,1,@1082 841,0,0 856,0,@6618 866,0,1 905,0,0 928,0,0 6618:S6|696e7075744e 6619:S29|426173696353747265616d494f28292e696e7075744e4c697374283329 6620:C2,1888|3b650c7303ff552450508b780883ff01756983fb0174695250ff7424188b5c24208b000bc0e85207000083c800e81ea4f5fff7c0010000007407be03000000eb068b308d7436018b5c241c530bdef6c3015b7503ff55383bf37507ba03000000eb05ba0100000089d183f1028d7c240889078d742408894e04eb59e96d0000005250ff7424188b5c24208b0090e89609000083f801751a8b7424048d5c24088b560489138d4c2408c7410401000000eb738b30f7c6010000007407bb03000000eb068b1e8d5c1b0183fb01750cba03000000eb0ae90d050000ba010000008d4c240889318d7c2408895704eb718b77088b0e8b7704525053ff30ff37ff7704ff770851568b1689cf23faf7c7010000007503ff553889cf2bfa8d7f0170f48b742438eb05e9bd0400005623f7f7c6010000005e7503ff55383bfe7c708b5c240c8b138b4d008d49f83b4d087303ff5520894d00c741fc010000008931eb05e9830400005189d38b44241483c800e85e3cf5ff83c800e8823df5ff8b7c240c8b378b5c243889f223d3f6c2017503ff55388d56ff03d370f689178d4c242489018d442424c7400401000000eb708b5424088b0a8b7c240c8b0789cb23d8f6c3017503ff553889cb2bd88d5b0170f489f123cbf6c1017503ff553889f12bcb8d490170f48b4424108b185123cbf6c101597503ff55383bcb7f728b0a8b1789cf23faf7c7010000007503ff553889cf2bfa8d7f0170f48b54240c8b0aeb05e9c20300008b55008d52f83b55087303ff5520895500c742fc01000000893a575289cb8b4424180bc0e8863bf5ff83c800e8aa3cf5ff8b4c243c8b3c2489ce23f7f7c6010000007503ff5538eb05e99d01000089ce2bf78d760170ed8b5c240c8b138b7c241089178b54241c83fa017433505656ff7424448b5c24248b44242890e82209000089c18b45008d40f83b45087303ff5520894500c740fc010000008908eb16505656ff7424448b5c24248b4424280bc0e84e0b000083f80175178d4c24308b44240489018d7c2430c7470401000000eb728b0883f90175178d7c24308b74240489378d5c2430c7430403000000eb598b3c245123cff6c101597503ff55383bf97d0489feeb0289ce8b5d008d5bf83b5d087303ff5520895d00c743fc010000008933515653bb010000008b4424280bc0e87a3af5ff83c800e89e3bf5ff8b54241ceb0ae977020000e9720200008b4c2404890a8b7c24208b342489378b5d008d5bf43b5d087303ff5520895d00c743fc02000000c743040100000089038b45008d40f43b45087303ff5520894500c740fc020000008958048b54240c89100bc0e88aa0f5ff8b4c242c83f90174268b7424048b5c24085323def6c3015b7503ff55383bf37d07bf03000000eb0cbf01000000eb05bf010000008d74243889068d5c2438897b0483c408eb718b0a8b1789cf23faf7c7010000007503ff553889cf2bfa8d7f0170f48b54240c8b0a8b55008d52f83b55087303ff5520895500c742fc01000000893a575289cb8b44241890e87a39f5ff83c800e89e3af5ff8b4c243c8b3c2489ce23f7f7c6010000007503ff553889ce2bf78d7601eb05e95e01000070ed8b5c240c8b138b7c241089178b5c241c83fb01746c50ff74243c89f38b44242090e8d20200008b55008d52f43b55087303ff5520895500c742fc020000008942048b0c24890a89d090e87e9ff5fff7c0010000007407bf03000000eb068b388d7c3f018b7424405623f7f7c6010000005e7503ff55383bfe7d0cbb03000000eb0ae914000000bb010000008d54242c89028d4c242c895904eb5d50ff74243c89f38b442420e8fa04000083f80175168d54242c8b0c24890a8d44242cc7400401000000eb728b10f7c2010000007407b903000000eb068b0a8d4c090183f901751b8d7c242c8b342489378d5c242cc7430403000000eb64e95f0000008b7d008d7ff43b7d087303ff5520897d00c747fc02000000c747040100000089178b45008d40f43b45087303ff5520894500c740fc02000000eb05e91f0000008978048b3424893090e8829ef5ff8d5c242c89038d54242cc74204010000005083c40c83c41c8b4c2408f7c1010000007407b803000000eb068b018d440001a8017503ff553883f8017e71f7c1010000007407be03000000eb068b318d7436018b1c248b55008d52f83b55087303ff5520895500c742fc01000040c702010000008b45008d40ec3b45087303ff5520894500c740fc040000008b7b0c89780c8b4b088948088950048b0b89088b4d008d49ec3b4d087303ff5520eb05e926000000894d00c741fc0400000089710cc74108010000008951048b74240889318b5304890a89c7eb038b3c248b74240c83fe0174758b5424048b4d008d49f83b4d087303ff5520894d00c741fc01000040c701010000008b45008d40ec3b45087303ff5520894500c740fc040000008b5f0c89580c8b77088970088948048b3789308b75008d76ec3b75087303ff5520897500c746fc04000000c7460c01000000c7460801000000eb05e911000000894e048b4a04890e8b5704893289c3eb0289fb8b5424148b4c2408890a895a048b44240c894208b80100000083c410c20c0090|@6638,63|38,1,@6621 46,1,@347 59,0,1 92,0,1 99,0,0 142,1,@6627 171,0,0 188,0,1 206,0,1 218,0,0 366,1,@74 374,1,@75 422,0,0 582,1,@74 590,1,@75 670,1,@6631 722,1,@6635 748,0,0 778,0,1 839,0,0 850,1,@74 858,1,@75 920,0,0 962,1,@347 1000,0,1 1007,0,0 1014,0,0 1106,1,@74 1114,1,@75 1190,1,@6621 1230,1,@347 1243,0,1 1279,0,1 1291,0,0 1322,1,@6627 1347,0,0 1364,0,1 1397,0,1 1435,0,0 1482,1,@347 1499,0,0 1523,0,1 1556,0,1 1597,0,0 1681,0,0 1745,0,0 1819,0,0 1826,0,0 1877,0,0 6621:C2,144|3b650c7303ff552490e89e0000008b5024f7c2010000007517ff30ff3289d88d5424080bc0e8ae00000083c408c204008b4d008d49f03b4d087303ff5520894d00c741fc030000008b7c2404897908bee0ae74418971048b1889198b75008d76f03b75087303ff5520897500c746fc03000000894e08b9a4ae7441894e04b91ca0b441890e89f0ff552cb80100000090|@6626,63|10,1,@6622 38,1,@6624 80,0,@59 119,0,@57 127,0,@7299 139,0,0 6622:C2,4|c383c800|@6623,1| 6623:S2|5244 6624:C2,348|3b650c7303ff55245250ff7504bf1e7f7f41576a018965048b52f890ff1289c6ff7424088f4504eb72908b5c24048b08bf1ca0b4413bcf750989c2eb63ba0100000083f903750cba70ae7441eb61ba010000008b75008d76f03b75087303ff5520897500c746fc030000008b53048956088946048b7bfc893e8b55008d52f03b55087303ff5520895500c742fc03000000897208bea4ae7441eb0ae91b000000e90a000000897204be1ca0b441893289d00bc0ff552cbe01000000f7c6010000007407bb03000000eb068b1e8d5c1b0183fb017509b80100000083c414c38b54240c5323daf6c3015b7503ff55383bda7c258b45008d40f43b45087303ff5520894500c740fc02000000c7400401000000893083c414c389d023c3a8017503ff553889d02bc38d400170f4568b54241490e8cafeffff8b4d008d49f43b4d087303ff5520894d00c741fc020000008941048b0424890189c883c418c3|@6625,63|14,0,$6624+42 49,0,@7299 62,0,0 72,0,@54 79,0,0 149,0,@57 169,0,@7299 183,0,0 196,0,1 214,0,0 269,0,0 6625:S41|426173696353747265616d494f28292e72656164566563466f72636564283329646f52656164283129 6626:S32|426173696353747265616d494f28292e72656164566563466f72636564283329 6627:C2,300|3b650c7303ff552490e8f2fdffff8b5034f7c2010000007572ff30ff7504b90a817f41516a0189650489d88b1283c800ff12ff7424088f450483c410c2040083c8008b30bb1ca0b4413bf3750989c7eb6ebf0100000083fe03750cbf70ae7441eb5dbf010000008b55008d52f03b55087303ff5520895500c742fc030000008b4c2408894a08894204eb05e93b0000008b3c24893a8b7d008d7ff03b7d087303ff5520897d00c747fc03000000895708bba4ae7441895f04ba1ca0b441891789f80bc0ff552cb8010000008b4d008d49f03b4d087303ff5520894d00c741fc03000000bf68767f41897908be10827f418971048b1889198b7d008d7ff03b7d087303ff5520897d00c747fc03000000894f08bea4ae7441897704b91ca0b441890f89f8ff552cb80100000090|@6630,63|10,1,@6622 31,0,$6627+66 69,0,@7299 82,0,0 92,0,@54 99,0,0 177,0,@57 185,0,@7299 199,0,0 228,0,@6618 236,0,@6628 275,0,@57 283,0,@7299 295,0,0 6628:O3|@7445,@6629,0 6629:S23|4e6f6e626c6f636b696e674e6f74537570706f72746564 6630:S28|426173696353747265616d494f28292e726561645665634e42283329 6631:C2,148|3b650c7303ff552490e856fcffff8b5020f7c201000000751bff3053ff32b8010000008d54240c0bc0e88200000083c40cc208008b4d008d49f03b4d087303ff5520894d00c741fc030000008b7c2404897908bee0ae74418971048b1889198b75008d76f03b75087303ff5520897500c746fc03000000894e08b9a4ae7441894e04b91ca0b441890e89f0ff552cb80100000090|@6634,63|10,1,@6622 31,0,0 42,1,@6632 84,0,@59 123,0,@57 131,0,@7299 143,0,0 6632:C2,316|3b650c7303ff55245250ff7504bf52837f41576a01896504ff72f46a0189c38b42f883c800e83231f5ff8b142483c800ff1289c6ff74240c8f4504eb72908b5c24048b08bf1ca0b4413bcf750989c2eb63ba0100000083f903750cba70ae7441eb61ba010000008b75008d76f03b75087303ff5520897500c746fc030000008b53048956088946048b7bfc893e8b55008d52f03b55087303ff5520895500c742fc03000000897208bea4ae7441eb0ae91b000000e90a000000897204be1ca0b441893289d00bc0ff552cbe0100000083fe017502eb308b5c241089f223d3f6c2017503ff55388d56ff03d370f68b4c24148b41085223d0f6c2015a7503ff55383bd07d02eb1a8b5c241089f023c3a8017503ff55388d46ff03c370f683c418c389f023c3a8017503ff55388d46ff03c370f689ca83c418e9c4feffff|@6633,63|14,0,$6632+62 38,1,@74 69,0,@7299 82,0,0 92,0,@54 99,0,0 169,0,@57 189,0,@7299 203,0,0 6633:S38|426173696353747265616d494f28292e66696c6c427566666572283429646f52656164283129 6634:S29|426173696353747265616d494f28292e66696c6c427566666572283429 6635:C2,332|3b650c7303ff552490e8f6f9ffff8b5030f7c201000000755cff30ff7504b92a857f41516a018965048b7d008d7ff03b7d087303ff5520897d00c747fc03000000895f088b33897704c7070100000089f88b1290ff12ff7424088f450483c410c2080083c8008b10b91ca0b4413bd1750e89c3eb6ce971000000bb0100000083fa03750cbb70ae7441eb56bb010000008b7d008d7ff03b7d087303ff5520897d00c747fc030000008b7424088977088947048b1c24891f8b5d008d5bf03b5d087303ff5520895d00c743fc03000000897b08b9a4ae7441894b04bf1ca0b441893b89d8ff552cb8010000008b4d008d49f03b4d087303ff5520894d00c741fc03000000bf2c867f41897908be10827f418971048b1889198b7d008d7ff03b7d087303ff5520897d00c747fc03000000894f08bea4ae7441897704b91ca0b441890f89f8ff552cb80100000090|@6637,63|10,1,@6622 31,0,$6635+102 75,0,0 105,0,@7299 123,0,0 133,0,@54 140,0,0 211,0,@57 219,0,@7299 231,0,0 260,0,@6636 268,0,@6628 307,0,@57 315,0,@7299 327,0,0 6636:S8|63616e496e707574 6637:S31|426173696353747265616d494f28292e66696c6c4275666665724e42283429 6638:S33|426173696353747265616d494f28292e7265616446726f6d526561646572283529 6639:C2,468|3b650c7303ff55248b08ff7004b80100000083c800e87e2af5ff53515083f8017507bf01000000eb378b308b1e83fbff751c8b7d008d7ff83b7d087303ff5520897d00c747fc010000008937eb128b40043b650c7303ff5524ebc2bf01000000f7c70100000075368b0f8b0183f8ff751d8b710483fe037507ba01000000eb2cb844b27441e8422bf5ff89c2eb1eb844b274410bc0e8322bf5ff89c2eb0eb844b274410bc0e8222bf5ff89c2ba010000008b4c240c8b0183f8037507bf01000000eb2f81fa419c00007507bf01000000eb20f6c2017503ff553889d783c70270f689fa3b650c7303ff5524ebc4bf0100000089c8ff15209a040883f8017507bf01000000eb1f89cbb80300000083c800ff15609a04083b650c7303ff5524eb8cbf01000000ff7504beda877f41566a018965048b4424108b54241490ff1289c3ff7424088f4504eb469089c18b44240cff15009a040883f8037502eb1b8b44240cc700030000005189c3b80500000090ff15609a0408eb01518b442404e84a2af5ff8b04240bc0ff552cbb0100000089d98b44241883c800ff15009a040883f8037502eb1b8b442418c700030000005189c3b80500000090ff15609a0408eb01518b442410e8022af5ff8b042483c420c383c800|@6640,63|14,0,0 22,1,@63 35,0,0 92,0,0 122,0,0 129,0,@65 134,1,@67 143,0,@65 150,1,@67 159,0,@65 166,1,@67 173,0,0 189,0,0 204,0,0 238,0,0 246,0,I71 256,0,0 265,0,1 274,0,I73 289,0,0 297,0,$6639+330 338,0,I70 355,0,1 363,0,2 370,0,I73 382,1,@67 395,0,0 410,0,I70 427,0,1 435,0,2 442,0,I73 454,1,@67 6640:S17|54657874494f2e70726f74656374283229 6641:S37|4d414b455f28292e757365496e746f456e7628312975736528312967657443686172283129 6642:C2,336|3b650c7303ff552483fb017407bf388a7f41eb05bf488a7f415057ff7204bbffffffff8b4424100bc0e8c68df5ff8b7d008d7ff43b7d087303ff5520897d00c747fc02000000c74704010000008b74240889378b5d008d5bf43b5d087303ff5520895d00c743fc02000000897b04ba588a7f4189138b4d008d49f43b4d087303ff5520894d00c741fc0200000089590489018b45008d40f43b45087303ff5520894500c740fc02000000894804bf648a7f4189388b75008d76f43b75087303ff5520897500c746fc020000008946048b1c24891e8b55008d52f43b55087303ff5520895500c742fc02000000897204b9748a7f41890a8b45008d40f43b45087303ff5520894500c740fc020000008950048b7c240489380bc0e80691f5ffbe04c2b4418b1e89da89c389d00bc0e8de4bf5ffb904c2b4418b018b7810897c2410bbf4b8744183c40ce91725f5ff83c800|@6648,63|14,0,@6643 21,0,@6644 31,0,-1 42,1,@336 73,0,0 111,0,@6645 174,0,@6646 240,0,@6647 282,1,@347 287,0,@7321 302,1,@229 307,0,@7321 321,0,@91 329,1,@62 6643:S6|4572726f722d 6644:S8|5761726e696e672d 6645:S2|2e0a 6646:S8|272c206c696e6520 6647:S5|20696e2027 6648:S39|4d414b455f28292e757365496e746f456e762831297573652831296572726f7250726f63283329 6649:O2|@6650,@7321 6650:C2,64|3b650c7303ff55248b7a048b375289c389f083c800e8024bf5ff8b1c248b53048b0a8b41108b7c240489442404bbf4b8744189c883c40457e93324f5ff83c800|@6651,63|22,1,@229 46,0,@91 57,1,@62 6651:S15|54657874494f2e7072696e74283129 6652:C2,8|8b42048b3889f8c3|@6653,37| 6653:S35|4d414b455f28292e757365496e746f456e76283129757365283129636f64652d283129 6654:C2,28|3b650c7303ff55248b78088b3424893c248b58048b008b520456ff22|@6655,63| 6655:S39|4d414b455f28292e757365496e746f456e762831297573652831296572726f7250726f63283129 6656:C2,36|3b650c7303ff55248b7a088b3424893c24ff7204bb043977418b420c56e9baa1f7ff0bc0|@6520,63|21,0,@1856 30,1,@1814 6657:C2,36|3b650c7303ff55248b7a088b3424893c24ff7204bb702877418b420c56e97aa1f7ff0bc0|@6520,63|21,0,@1802 30,1,@1814 6658:C2,36|3b650c7303ff55248b7a088b3424893c24ff7204bb103877418b420c56e93aa1f7ff0bc0|@6520,63|21,0,@1849 30,1,@1814 6659:C2,36|3b650c7303ff55248b7a088b3424893c24ff7204bb1c3777418b420c56e9faa0f7ff0bc0|@6520,63|21,0,@1842 30,1,@1814 6660:C2,36|3b650c7303ff55248b7a088b3424893c24ff7204bb283677418b420c56e9baa0f7ff0bc0|@6520,63|21,0,@1835 30,1,@1814 6661:C2,36|3b650c7303ff55248b7a088b3424893c24ff7204bbf83977418b420c56e97aa0f7ff0bc0|@6520,63|21,0,@1863 30,1,@1814 6662:O1|@6663 6663:C2,76|3b650c7303ff55248b388b0783f8ff751d8b77048b1e8b530c8b0c2489142489dabbdc8d7f4189d051e98e21f5ff8b77048b1c24c704240100000089da8b5e08b80f00000052ff25e0980408|@6667,63|34,0,@6664 42,1,@62 55,0,0 65,0,7 72,0,I61 6664:O1|@6665 6665:C2,76|3b650c7303ff552489c78b0790e8d2f0ffffff700c8b57048b0283f8ff7502eb1bf7c001000000750d8b50043b650c7303ff5524ebe2c702ffffffffb8010000008b142483c404ff2283c800|@6666,63|14,1,@6622 56,0,-1 61,0,0 6666:S27|426173696353747265616d494f28292e636c6f7365496e27283129 6667:S18|54657874494f2e636c6f7365496e27283129 6668:S8|207261697365640a 6669:S27|4d414b455f28292e757365496e746f456e76283129757365283129 6670:O2|@6734,@171 6671:O2|@6672,@171 6672:C2,60|3b650c7303ff55248b42048b7d008d7ff43b7d087303ff5520897d00c747fc02000000be308f7f4189378b70048977048b1889f8e95fc3ffff83c800|@6496,63|36,0,@6673 53,1,@6493 6673:C2,32|3b650c7303ff5524bb043977418b420490e80abfffffba6c8f7f41ff2283c800|@6492,63|9,0,@1856 18,1,@6483 23,0,@6674 6674:O1|@6675 6675:C2,100|3b650c7303ff55248b780883ff01744c508b7004b80100000089f290ff128b1c2450b8010000008b1383c800ff1283c800e8caffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0c24890a89d083c408c3b801000000c30bc0|@5106,63|21,0,0 35,0,0 93,0,0 6676:O2|@6677,@171 6677:C2,60|3b650c7303ff55248b42048b7d008d7ff43b7d087303ff5520897d00c747fc02000000be58907f4189378b70048977048b1889f8e937c2ffff83c800|@6496,63|36,0,@6678 53,1,@6493 6678:C2,32|3b650c7303ff5524bb1c3777418b420490e8e2bdffffba94907f41ff2283c800|@6492,63|9,0,@1842 18,1,@6483 23,0,@6679 6679:O1|@6680 6680:C2,100|3b650c7303ff55248b780883ff01744c508b7004b80100000089f290ff128b1c2450b8010000008b1383c800ff1283c800e8caffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0c24890a89d083c408c3b801000000c30bc0|@5106,63|21,0,0 35,0,0 93,0,0 6681:O2|@6682,@171 6682:C2,60|3b650c7303ff55248b42048b7d008d7ff43b7d087303ff5520897d00c747fc02000000be80917f4189378b70048977048b1889f8e90fc1ffff83c800|@6496,63|36,0,@6683 53,1,@6493 6683:C2,32|3b650c7303ff5524bb702877418b420490e8babcffffbabc917f41ff2283c800|@6492,63|9,0,@1802 18,1,@6483 23,0,@6684 6684:O1|@6685 6685:C2,100|3b650c7303ff55248b780883ff01744c508b7004b80100000089f290ff128b1c2450b8010000008b1383c800ff1283c800e8caffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0c24890a89d083c408c3b801000000c30bc0|@5106,63|21,0,0 35,0,0 93,0,0 6686:O2|@6687,@171 6687:C2,60|3b650c7303ff55248b42048b7d008d7ff43b7d087303ff5520897d00c747fc02000000bea8927f4189378b70048977048b1889f8e9e7bfffff83c800|@6496,63|36,0,@6688 53,1,@6493 6688:C2,32|3b650c7303ff5524bbf83977418b420490e892bbffffbae4927f41ff2283c800|@6492,63|9,0,@1863 18,1,@6483 23,0,@6689 6689:O1|@6690 6690:C2,100|3b650c7303ff55248b780883ff01744c508b7004b80100000089f290ff128b1c2450b8010000008b1383c800ff1283c800e8caffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0c24890a89d083c408c3b801000000c30bc0|@5106,63|21,0,0 35,0,0 93,0,0 6691:O2|@6692,@171 6692:C2,60|3b650c7303ff55248b42048b7d008d7ff43b7d087303ff5520897d00c747fc02000000bed0937f4189378b70048977048b1889f8e9bfbeffff83c800|@6496,63|36,0,@6693 53,1,@6493 6693:C2,32|3b650c7303ff5524bb283677418b420490e86abaffffba0c947f41ff2283c800|@6492,63|9,0,@1835 18,1,@6483 23,0,@6694 6694:O1|@6695 6695:C2,100|3b650c7303ff55248b780883ff01744c508b7004b80100000089f290ff128b1c2450b8010000008b1383c800ff1283c800e8caffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0c24890a89d083c408c3b801000000c30bc0|@5106,63|21,0,0 35,0,0 93,0,0 6696:O2|@6697,@171 6697:C2,68|3b650c7303ff55248b7a048b75008d76ec3b75087303ff5520897500c746fc04000000bb00957f41891e8b5f04895e0c8b08894e088b4804894e048b1f89f0e98cbdffff|@6521,63|36,0,@6698 64,1,@6493 6698:C2,36|3b650c7303ff55248b7a088b3424893c24ff7204bb043977418b420c56e9a698f7ff0bc0|@6520,63|21,0,@1856 30,1,@1814 6699:O2|@6700,@171 6700:C2,68|3b650c7303ff55248b7a048b75008d76ec3b75087303ff5520897500c746fc04000000bbac957f41891e8b5f04895e0c8b08894e088b4804894e048b1f89f0e9e0bcffff|@6521,63|36,0,@6701 64,1,@6493 6701:C2,36|3b650c7303ff55248b7a088b3424893c24ff7204bb1c3777418b420c56e9fa97f7ff0bc0|@6520,63|21,0,@1842 30,1,@1814 6702:O2|@6703,@171 6703:C2,68|3b650c7303ff55248b7a048b75008d76ec3b75087303ff5520897500c746fc04000000bb58967f41891e8b5f04895e0c8b08894e088b4804894e048b1f89f0e934bcffff|@6521,63|36,0,@6704 64,1,@6493 6704:C2,36|3b650c7303ff55248b7a088b3424893c24ff7204bb702877418b420c56e94e97f7ff0bc0|@6520,63|21,0,@1802 30,1,@1814 6705:O2|@6706,@171 6706:C2,60|3b650c7303ff55248b42048b7d008d7ff43b7d087303ff5520897d00c747fc02000000befc967f4189378b70048977048b1889f8e993bbffff83c800|@6496,63|36,0,@6707 53,1,@6493 6707:C2,32|3b650c7303ff5524bb103877418b420490e83eb7ffffba38977f41ff2283c800|@6492,63|9,0,@1849 18,1,@6483 23,0,@6708 6708:O1|@6709 6709:C2,100|3b650c7303ff55248b780883ff01744c508b7004b80100000089f290ff128b1c2450b8010000008b1383c800ff1283c800e8caffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0c24890a89d083c408c3b801000000c30bc0|@5106,63|21,0,0 35,0,0 93,0,0 6710:O2|@6711,@171 6711:C2,68|3b650c7303ff55248b7a048b75008d76ec3b75087303ff5520897500c746fc04000000bb2c987f41891e8b5f04895e0c8b08894e088b4804894e048b1f89f0e960baffff|@6521,63|36,0,@6712 64,1,@6493 6712:C2,36|3b650c7303ff55248b7a088b3424893c24ff7204bbf83977418b420c56e97a95f7ff0bc0|@6520,63|21,0,@1863 30,1,@1814 6713:O2|@6714,@171 6714:C2,60|3b650c7303ff55248b7a048b75008d76f03b75087303ff5520897500c746fc03000000bbd0987f41891e8b5f04895e088946048b1f89f0e9bcb9ffff|@6540,63|36,0,@6715 56,1,@6493 6715:C2,32|3b650c7303ff55248b7a048b3424893c24bb043977418b420856e98992f7ff90|@6539,63|18,0,@1856 27,1,@1805 6716:O2|@6717,@171 6717:C2,60|3b650c7303ff55248b7a048b75008d76f03b75087303ff5520897500c746fc03000000bb70997f41891e8b5f04895e088946048b1f89f0e91cb9ffff|@6540,63|36,0,@6718 56,1,@6493 6718:C2,32|3b650c7303ff55248b7a048b3424893c24bb1c3777418b420856e9e991f7ff90|@6539,63|18,0,@1842 27,1,@1805 6719:O2|@6720,@171 6720:C2,60|3b650c7303ff55248b7a048b75008d76f03b75087303ff5520897500c746fc03000000bb109a7f41891e8b5f04895e088946048b1f89f0e97cb8ffff|@6540,63|36,0,@6721 56,1,@6493 6721:C2,32|3b650c7303ff55248b7a048b3424893c24bb702877418b420856e94991f7ff90|@6539,63|18,0,@1802 27,1,@1805 6722:O2|@6723,@171 6723:C2,68|3b650c7303ff55248b7a048b75008d76ec3b75087303ff5520897500c746fc04000000bbb89a7f41891e8b5f04895e0c8b08894e088b4804894e048b1f89f0e9d4b7ffff|@6521,63|36,0,@6724 64,1,@6493 6724:C2,36|3b650c7303ff55248b7a088b3424893c24ff7204bb283677418b420c56e9ee92f7ff0bc0|@6520,63|21,0,@1835 30,1,@1814 6725:O2|@6726,@171 6726:C2,60|3b650c7303ff55248b7a048b75008d76f03b75087303ff5520897500c746fc03000000bb5c9b7f41891e8b5f04895e088946048b1f89f0e930b7ffff|@6540,63|36,0,@6727 56,1,@6493 6727:C2,32|3b650c7303ff55248b7a048b3424893c24bbf83977418b420856e9fd8ff7ff90|@6539,63|18,0,@1863 27,1,@1805 6728:O2|@6729,@171 6729:C2,68|3b650c7303ff55248b7a048b75008d76ec3b75087303ff5520897500c746fc04000000bb049c7f41891e8b5f04895e0c8b08894e088b4804894e048b1f89f0e988b6ffff|@6521,63|36,0,@6730 64,1,@6493 6730:C2,36|3b650c7303ff55248b7a088b3424893c24ff7204bb103877418b420c56e9a291f7ff0bc0|@6520,63|21,0,@1849 30,1,@1814 6731:O2|@6732,@171 6732:C2,60|3b650c7303ff55248b7a048b75008d76f03b75087303ff5520897500c746fc03000000bba89c7f41891e8b5f04895e088946048b1f89f0e9e4b5ffff|@6540,63|36,0,@6733 56,1,@6493 6733:C2,32|3b650c7303ff55248b7a048b3424893c24bb283677418b420856e9b18ef7ff90|@6539,63|18,0,@1835 27,1,@1805 6734:C2,60|3b650c7303ff55248b7a048b75008d76f03b75087303ff5520897500c746fc03000000bb3c9d7f41891e8b5f04895e088946048b1f89f0e950b5ffff|@6540,63|36,0,@6735 56,1,@6493 6735:C2,32|3b650c7303ff55248b7a048b3424893c24bb103877418b420856e91d8ef7ff90|@6539,63|18,0,@1849 27,1,@1805 6736:O2|@6738,@6737 6737:O2|@6739,0 6738:S8|6465627567546167 6739:O3|@7317,69,@6740 6740:O4|@6738,-1,@6741,@6352 6741:O2|-1,@6742 6742:O2|-3,@4964 6743:O2|@6745,@6744 6744:O2|@6746,0 6745:S10|45786e4d657373616765 6746:O3|@7335,69,@6747 6747:O3|@6745,@561,@6748 6748:O4|@6749,I48,0,0 6749:O4|-1,@7447,@7448,@7446 6750:O2|@6752,@6751 6751:O2|@6753,0 6752:S10|65786e4d657373616765 6753:O3|@7317,69,@6754 6754:O4|@6752,-1,@6131,@6755 6755:O3|1,@2165,@521 6756:O2|@6758,@6757 6757:O2|@6759,0 6758:S11|66696c654e616d65546167 6759:O3|@7317,69,@6760 6760:O4|@6758,-1,@6762,@6761 6761:O4|-3,@6764,@6332,@6330 6762:O2|-1,@6763 6763:O2|-3,@4957 6764:O2|@521,0 6765:O2|@6767,@6766 6766:O2|@6768,0 6767:S16|7072696e74446570746846756e546167 6768:O3|@7317,69,@6769 6769:O4|@6767,-1,@6770,@6585 6770:O2|-1,@6771 6771:O2|-3,@5041 6772:O2|@6774,@6773 6773:O2|@6775,0 6774:S9|74696d696e67546167 6775:O3|@7317,69,@6776 6776:O4|@6774,-1,@6777,@6352 6777:O2|-1,@6778 6778:O2|-3,@710 6779:O2|@6781,@6780 6780:O2|@6782,0 6781:S15|7072696e74456e7669726f6e546167 6782:O3|@7317,69,@6783 6783:O4|@6781,-1,@6785,@6784 6784:O4|-3,@6790,@6332,@6330 6785:O2|-1,@6786 6786:O2|-3,@6787 6787:O3|@5209,@6788,@5207 6788:O2|@6789,@7394 6789:C2,44|89c78b45008d40f03b45087303ff5520894500c740fc03000000897808c740048b0000008b7a048938c30bc0|@593,37|32,0,69 6790:O2|@5826,0 6791:O2|@1246,@6792 6792:O2|@6793,0 6793:O3|@7317,69,@6794 6794:O4|@1246,-1,@6796,@6795 6795:O3|1,@521,@6817 6796:O2|-1,@6797 6797:O2|-3,@6798 6798:O1|@6799 6799:C2,208|3b650c7303ff5524f7c0010000007407bf03000000eb068b388d7c3f01f7c7010000007503ff553883ff057e59f7c0010000007407bf03000000eb068b388d7c3f01f7c7010000007503ff553883ff057f1189c7b824ae74410bc0ff552cbe01000000f7c001000000740489c6eb080fb670068d74360181fef10000007507be03000000eb05beffffffff8b7d008d7ff43b7d087303ff5520897d00c747fc02000000bb54a27f41891f89770489fb0bc0e8b2b1f6ff83f8017510b870ab7f4183c800ff552cb8010000008b00c30bc0|@6816,63|17,0,1 54,0,1 85,0,@51 95,0,0 128,0,1 135,0,-1 164,0,@6800 178,1,@1375 188,0,@6813 199,0,0 6800:C2,44|89c78b45008d40f03b45087303ff5520894500c740fc03000000be9ca27f4189308978088b7a04897804c390|@6812,53|27,0,@6801 6801:C2,156|3b650c7303ff5524ff72048b5a0883c800e8a200000083f8017506b801000000c38b388b37bb04ab7f415323def6c3015b7503ff55383bf37e0db810ab7f41ff552cb801000000f7c601000000740489f2eb0ef646ff108b167402f7da8d5412018b4d008d49f43b4d087303ff5520894d00c741fc020000008b5f0489590489118b45008d40f83b45087303ff5520894500c740fc010000008908c3|@6811,63|18,1,@6802 28,0,0 38,0,@6808 59,0,@6809 67,0,0 6802:C2,768|3b650c7303ff55248b74240483fe017507bf05000000eb1d83fefd7507bf11000000eb1183feff7507bf15000000eb05bf2100000057535089da0bc0ff1283f801750bb80100000083c40cc204008b188b1383fa617559ff73048b04248b54240883c800ff1283f8017507b901000000eb708b388b3781feef00000075698b5c241483fb037565ff77048b04248b54240c83c800ff1283f8017507b901000000eb6c8b108b0a81f9f10000007507eb0fe9e001000081f9b10000007402eb548b7c241883ff037529ff7204bb01000000b8010000008d542418e83e02000089c1eb70e95d010000e9b0000000e966000000ff7204bb01000000b8010000008d54241883c800e8ee04000089c1eb68e92e0100008b7c241883ff03751aff3424bb01000000b8010000008d542418e8ea01000089c1eb61ff3424bb01000000b8010000008d5424180bc0e8aa04000089c1eb5ee9ea00000083fb03751fff7704bb01000000b8010000008d542414e8aa01000089c1eb1ee9c6000000ff7704bb01000000b8010000008d54241490e86604000089c150eb63e9a500000081fef10000007502eb0f81feb10000007407eb4fe98c0000008b5c241483fb03754183fb03751bff7704bb01000000b8010000008d54241490e84201000089c1eb62ff7704bb01000000b8010000008d5424140bc0e80204000089c1eb46e9420000008b5c241483fb03751eff742404bb01000000b8010000008d54241483c800e8fa00000089c1eb1aff742404bb01000000b8010000008d54241490e8ba03000089c15083c40483f90175448b55008d52f43b55087303ff5520895500c742fc020000008b0c24894a04c702010000008b45008d40f83b45087303ff5520894500c740fc01000000891083c410c2040089c883c410c2040083fa13720783fa1b7702eb0783fa417402eb178b4c2410894c24108b43048b5c240483c40ce941fdffff8b4c241083f903751cff3424bb01000000b8010000008d542410e83e00000083c40cc20400ff3424bb01000000b8010000008d542410e8fe02000083c40cc20400|@6807,63|18,0,2 30,0,8 42,0,10 49,0,16 68,0,0 108,0,0 156,0,0 204,0,0 209,0,0 218,1,@6803 245,0,0 250,0,0 262,1,@6805 288,0,0 293,0,0 302,1,@6803 314,0,0 319,0,0 330,1,@6805 352,0,0 357,0,0 366,1,@6803 383,0,0 388,0,0 398,1,@6805 455,0,0 460,0,0 470,1,@6803 482,0,0 487,0,0 498,1,@6805 525,0,0 530,0,0 542,1,@6803 555,0,0 560,0,0 570,1,@6805 617,0,0 716,0,0 721,0,0 730,1,@6803 744,0,0 749,0,0 758,1,@6805 6803:C2,664|3b650c7303ff55245250538b4424108b52f80bc0ff1283f80175588b7c240483ff0174448b75008d76f43b75087303ff5520897500c746fc020000008b5c2410895e048b142489168b45008d40f83b45087303ff5520894500c740fc01000000893083c40cc20400b80100000083c40cc204008b388b37f7c6010000007503ff553883fe617c70f7c6010000007503ff553883fe737f608b1c24ba2100000089d923caf6c1017503ff553850528d43ffd1faf7ea8d48015a5870ed89cb23def6c3017503ff55388d59ff03de70f6f6c3017503ff553889da83ea6070f68b4f04894c241089d3b8030000008b54240883c40ce909fffffff7c6010000007503ff553881fe830000007c70f7c6010000007503ff553881fe8d0000007f628b1c24ba2100000089d923caf6c1017503ff553850528d43ffd1faf7ea8d48015a5870ed89cb23def6c3017503ff55388d59ff03de70f6f6c3017503ff553889da81ea8200000070f3f6c2017503ff553889d183c11470f68b5f04eb0ae91c000000e917000000895c241089cbb8030000008b54240883c40ce965fefffff7c6010000007503ff553881fec30000007c70f7c6010000007503ff553881fecd0000007f628b1c24ba2100000089d923caf6c1017503ff553850528d43ffd1faf7ea8d48015a5870ed89cb23def6c3017503ff55388d59ff03de70f6f6c3017503ff553889da81eac200000070f3f6c2017503ff553889d183c11470f68b5f04eb0ae91c000000e917000000895c241089cbb8030000008b54240883c40ce9c1fdffff8b5c240483fb0174448b55008d52f43b55087303ff5520895500c742fc020000008b4c2410894a048b1c24891a8b45008d40f83b45087303ff5520894500c740fc01000000891083c40cc20400b80100000083c40cc2040090|@6804,63|105,0,0 155,0,16 231,0,1 289,0,16 395,0,1 453,0,16 559,0,1 653,0,0 6804:S29|7363616e576f7264283329726561645f6865785f646967697473283329 6805:C2,356|3b650c7303ff55245250538b4424108b52f80bc0ff1283f80175588b7c240483ff0174448b75008d76f43b75087303ff5520897500c746fc020000008b5c2410895e048b142489168b45008d40f83b45087303ff5520894500c740fc01000000893083c40cc20400b80100000083c40cc204008b388b37f7c6010000007503ff553883fe617c748b5c24088b53fcf6c2017503ff553889d183c16070f65123cef6c101597503ff55383bf17d5f8b0c2489c823c2a8017503ff5538528d41ffd1faf7ea8d40015a70ef89c123cef6c1017503ff55388d48ff03ce70f6f6c1017503ff553889c883e86070f68b4f04894c241089c3b803000000eb05e90c0000008b54240883c40ce9f4feffff8b5c240483fb0174448b55008d52f43b55087303ff5520895500c742fc020000008b4c2410894a048b1c24891a8b45008d40f83b45087303ff5520894500c740fc01000000891083c40cc20400b80100000083c40cc20400|@6806,63|105,0,0 245,0,1 346,0,0 6806:S25|7363616e576f7264283329726561645f646967697473283329 6807:S11|7363616e576f7264283329 6808:B8|ffffff7f00000000 6809:O3|5,@6810,0 6810:S8|4f766572666c6f77 6811:S24|576f7264732e576f72642e7363616e283129283129283129 6812:S21|576f7264732e576f72642e7363616e283129283129 6813:O3|8,@6815,@6814 6814:S21|496e76616c696420776f726420636f6e7374616e74 6815:S10|436f6e76657273696f6e 6816:S45|494e495449414c4953455f28292e696e6974476c6f62616c456e76283129776f72644f66537472696e67283129 6817:O4|-3,0,@5323,@6818 6818:O2|0,@5321 6819:O2|@1234,@6820 6820:O2|@6821,0 6821:O3|@7317,69,@6822 6822:O4|@1234,-1,@6824,@6823 6823:O3|1,@521,@521 6824:O2|-1,@6825 6825:O2|-3,@6826 6826:O1|@6827 6827:C2,92|3b650c7303ff5524f7c0010000007407bf03000000eb068b388d7c3f018b75008d76f03b75087303ff5520897500c746fc03000000bbf0ac7f41891e897e088946045657b8010000008d542408e82601000083c408e97a6cf5ff0bc0|@6840,63|17,0,1 54,0,@6828 69,0,0 78,1,@6830 86,1,@341 6828:C2,192|8b7a08500bc7a801587503ff55383bc77506b801000000c3a8017503ff553883f8017d02eb298b7204f7c6010000007407bb03000000eb068b1e8d5c1b015023c3a801587503ff55383bc37d02eb1089c3b824ae744190ff552cbe01000000f7c6010000007402eb118d580889d9d1e90fb60c0e8d4c090189cea8017503ff553889c383c30270f68b4d008d49f43b4d087303ff5520894d00c741fc0200000089590489318b45008d40f83b45087303ff5520894500c740fc010000008908c3|@6829,63|19,0,0 50,0,1 82,0,@51 91,0,0 6829:S28|4d6973632e756e657363617065537472696e67283129726472283129 6830:C2,288|3b650c7303ff55248b7af8500bc7a801587503ff55383bc77506b801000000c352ff72fc8b1c240bc0e80e01000083f8017507be01000000eb718b1853ff338b1c24b84097040890ff154094040883f80174348b542404ff72048b04248b54240c83c800ff1283f8017507be01000000eb5e8b042483c40c3b650c7303ff5524eba2be010000008b5424048b4d008d49f43b4d087303ff5520894d00c741fc020000008b4204894104eb05e9230000008b3c2489398b75008d76f83b75087303ff5520897500c746fc01000000890e5083c40c83fe01750fb8ccbb7f410bc0ff552cb8010000008b1eff338b43048b54240883c800e806ffffff8b55008d52f43b55087303ff5520895500c742fc020000008942048b0c24890a89d083c40cc3|@6839,63|27,0,0 42,1,@6831 52,0,0 67,0,I48 74,0,I24 108,0,0 131,0,0 217,0,@6837 227,0,0 6831:C2,1576|3b650c7303ff5524505389daff1283f80175448b7d008d7ff43b7d087303ff5520897d00c747fc020000008b742404897704bb40970408891f8b45008d40f83b45087303ff5520894500c740fc01000000893883c408c38b388b3783fe417302eb0a81fefd0000007702eb09b80100000083c408c381feb90000007569ff77048b04248b54240490ff1283f8017509b80100000083c40cc38b188b1381fac300000075478b4d008d49f43b4d087303ff5520894d00c741fc020000008b7b04897904c7010f0000008b45008d40f83b45087303ff5520894500c740fc01000000890883c40cc3e9fc04000081fac500000075428b4d008d49f43b4d087303ff5520894d00c741fc020000008b7b04897904c701110000008b45008d40f83b45087303ff5520894500c740fc01000000890883c40cc381fae900000075428b4d008d49f43b4d087303ff5520894d00c741fc020000008b7b04897904c701130000008b45008d40f83b45087303ff5520894500c740fc01000000890883c40cc381fadd00000075428b4d008d49f43b4d087303ff5520894d00c741fc020000008b7b04897904c701150000008b45008d40f83b45087303ff5520894500c740fc01000000890883c40cc381faed00000075428b4d008d49f43b4d087303ff5520894d00c741fc020000008b7b04897904c701170000008b45008d40f83b45087303ff5520894500c740fc01000000890883c40cc381facd00000075428b4d008d49f43b4d087303ff5520894d00c741fc020000008b7b04897904c701190000008b45008d40f83b45087303ff5520894500c740fc01000000890883c40cc381fae500000075428b4d008d49f43b4d087303ff5520894d00c741fc020000008b7b04897904c7011b0000008b45008d40f83b45087303ff5520894500c740fc01000000890883c40cc381fab900000075428b4d008d49f43b4d087303ff5520894d00c741fc020000008b7b04897904c701b90000008b45008d40f83b45087303ff5520894500c740fc01000000890883c40cc383fa4575428b4d008d49f43b4d087303ff5520894d00c741fc020000008b7b04897904c701450000008b45008d40f83b45087303ff5520894500c740fc01000000890883c40cc381fabd00000075698b43048b54240490ff1283f8017509b80100000083c40cc38b088b39f7c7010000007503ff553881ff810000007c73f7c7010000007503ff553881ffbf0000007f65f7c7010000007503ff553889fe81ee8000000070f3f7c6010000007503ff553883fe017d07eb1ae97a000000f7c6010000007503ff553881feff0100007f02eb10b81819754183c800ff552cbb0100000089f38b55008d52f43b5508730feb0ae938000000e933000000ff5520895500c742fc020000008b7104897204891a8b45008d40f83b45087303ff5520894500c740fc01000000891083c40cc3b80100000083c40cc381faeb0000007566ff7304ff742408bb09000000b801000000e8fe01000083f8017509b80100000083c40cc38b088b7d008d7ff43b7d087303ff5520897d00c747fc020000008b71048977048b19891f8b45008d40f83b45087303ff5520894500c740fc01000000893883c40cc383fa13720783fa1b7702eb0783fa417402eb5b8b4b045189c88b54240890ff1283f80175058b0424eb2f8b388b3783fe13720783fe1b7702eb0783fe417402eb158b4f0483c4043b650c7303ff5524ebc5b8010000008b04248b54240890ff1283f801750eb80100000083c410c3e9580000008b188b1381fab90000007409b80100000083c410c38b4d008d49f43b4d087303ff5520894d00c741fc020000008b7b04897904be4097040889318b45008d40f83b45087303ff5520894500c740fc01000000890883c410c383fa61726a83fa65776aff3424ff742408bb07000000b80100000090e8ca04000083f8017509b80100000083c40cc38b088b7d008d7ff43b7d087303ff5520897d00c747fc020000008b71048977048b19891f8b45008d40f83b45087303ff5520894500c740fc010000008938eb0ae909000000e90400000083c40cc3b80100000083c40cc38b5d008d5bf43b5d087303ff5520895d00c743fc020000008b570489530489338b45008d40f83b45087303ff5520894500c740fc01000000891883c408c383c800|@6836,63|51,0,I48 109,0,0 144,0,0 196,0,7 275,0,8 349,0,9 423,0,10 497,0,11 571,0,12 645,0,13 719,0,92 790,0,34 848,0,0 964,0,@338 975,0,0 1056,0,0 1080,0,4 1085,0,0 1090,1,@6832 1100,0,0 1256,0,0 1276,0,0 1302,0,0 1341,0,I48 1395,0,3 1400,0,0 1406,1,@6834 1416,0,0 1503,0,0 6832:C2,980|3b650c7303ff552483fb017571a8017503ff553881f8ff0100007e08b801000000c20800a8017503ff553883f8017d02eb11a8017503ff553881f8ff0100007f02eb10b81819754183c800ff552cbf0100000089c78b5d008d5bf43b5d087303ff5520895d00c743fc020000008b442408894304893b8b45008d40f8eb05e9170000003b45087303ff5520894500c740fc010000008918c2080050538b4424108b54240cff1283f80175608b3c24f7c7010000007503ff553883ffff7c02eb198b742404f7c6010000007503ff553881feff0100007f02eb0bb80100000083c408c20800f7c6010000007503ff553883fe017d02eb1af7c6010000007503ff553881feff0100007f07eb14e952000000b8181975410bc0ff552cbb0100000089f38b55008d52f43b55087303ff5520895500c742fc020000008b4c2410894a04891a8b45008d40f83b45087303ff5520894500c740fc01000000891083c408c208008b388b3783fe61727083fe7377708b1c24f6c3017503ff553889da83ea0270f68b4c2404bb2100000089c823c3a8017503ff55385289cad1fa8d43fff7ea8d40015a70ed89c323def6c3017503ff55388d58ff03de70f6f6c3017503ff553889d983e96070f68b44240c8b5f04895c24108944240c89d3eb0ae90f000000e90a00000089c883c408e911feffff81fec3000000727281fecd000000776f8b1c24f6c3017503ff553889da83ea0270f68b4c2404bb2100000089c823c3a8017503ff55385289cad1fa8d43fff7ea8d40015a70ed89c323def6c3017503ff55388d58ff03de70f6f6c3017503ff553889d981e9c200000070f3f6c1017503ff553889c883c014eb0ae920000000e91b00000070ea8b5c240c8b4f04894c2410895c240c89d383c408e972fdffff81fe83000000727281fe8d000000776f8b1c24f6c3017503ff553889da83ea0270f68b4c2404bb2100000089c823c3a8017503ff55385289cad1fa8d43fff7ea8d40015a70ed89c323def6c3017503ff55388d58ff03de70f6f6c3017503ff553889d981e98200000070f3f6c1017503ff553889c883c014eb0ae920000000e91b00000070ea8b5c240c8b4f04894c2410895c240c89d383c408e9d3fcffff8b1c24f6c3017503ff553883fbff7c02eb168b542404f6c2017503ff553881faff0100007f02eb0bb80100000083c408c20800f6c2017503ff553883fa017d02eb12f6c2017503ff553881faff0100007f02eb0eb81819754190ff552cb90100000089d18b5d008d5bf43b5d087303ff5520895d00c743fc020000008b542410895304890b8b45008d40f83b45087303ff5520894500c740fc01000000891883c408c208000bc0|@6833,63|29,0,0 68,0,@338 79,0,0 218,0,0 273,0,@338 283,0,0 391,0,16 534,0,16 693,0,16 854,0,0 898,0,@338 907,0,0 6833:S16|436861722e7265616448657827283429 6834:C2,520|3b650c7303ff552483fb017571a8017503ff553881f8ff0100007e08b801000000c20800a8017503ff553883f8017d02eb11a8017503ff553881f8ff0100007f02eb10b81819754183c800ff552cbf0100000089c78b5d008d5bf43b5d087303ff5520895d00c743fc020000008b442408894304893b8b45008d40f8eb05e9170000003b45087303ff5520894500c740fc010000008918c2080050538b4424108b54240cff1283f80175608b7c2404f7c7010000007503ff553881ffff0100007e02eb158b3424f7c6010000007503ff553883fe017f02eb0bb80100000083c408c20800f7c7010000007503ff553883ff017d02eb1af7c7010000007503ff553881ffff0100007f07eb14e952000000b8181975410bc0ff552cbb0100000089fb8b55008d52f43b55087303ff5520895500c742fc020000008b4c2410894a04891a8b45008d40f83b45087303ff5520894500c740fc01000000891083c408c208008b388b3783fe617271f7c6010000007503ff553883fe737f668b1c24f6c3017503ff553889da83ea0270f68b4c2404bb1500000089c823c3a8017503ff55385289cad1fa8d43fff7ea8d40015a70ed89c323def6c3017503ff55388d58ff03de70f6f6c3017503ff553889d983e96070f68b44240c8b5f04eb0ae919000000e914000000895c24108944240c89d389c883c408e906feffffb80100000083c408c2080083c800|@6835,63|29,0,0 68,0,@338 79,0,0 218,0,0 273,0,@338 283,0,0 402,0,10 507,0,0 6835:S15|436861722e72656164446563283429 6836:S16|436861722e7363616e42617365283229 6837:O3|8,@6815,@6838 6838:S23|496e76616c696420737472696e6720636f6e7374616e74 6839:S34|4d6973632e756e657363617065537472696e67283129636f6e764368617273283129 6840:S22|4d6973632e756e657363617065537472696e67283129 6841:O2|@6843,@6842 6842:O2|@6844,0 6843:S12|70726f66696c696e67546167 6844:O3|@7317,69,@6845 6845:O4|@6843,-1,@6846,@6343 6846:O2|-1,@6847 6847:O2|-3,@731 6848:O2|@6850,@6849 6849:O2|@6851,0 6850:S15|636f6d70696c657256657273696f6e 6851:O3|@7317,69,@6852 6852:O4|@6850,-1,@6853,@521 6853:O2|-1,@6854 6854:O2|-3,@6855 6855:S11|352e322052656c65617365 6856:O2|@6858,@6857 6857:O2|@6859,0 6858:S16|7472616365436f6d70696c6572546167 6859:O3|@7317,69,@6860 6860:O4|@6858,-1,@6861,@6352 6861:O2|-1,@6862 6862:O2|-3,@667 6863:O2|@6865,@6864 6864:O2|@6866,0 6865:S8|7072696e7456616c 6866:O3|@7317,69,@6867 6867:O4|@6865,-1,@6869,@6868 6868:O3|1,@6877,@1059 6869:O2|-1,@6870 6870:O2|-3,@6871 6871:O1|@6872 6872:C2,296|3b650c7303ff5524505050505050508b7d008d7ff43b7d087303ff5520897d00c747fc02000000be5cbf7f4189378b700c89770489e3893b89e7bbb0a07d41895f0489e7bb04a17d41895f0889e789770c89e3bf30a17d41897b1089e3bf5ca17d41897b1489e3bfd4bf7f41897b188b5d008d5be03b5d087303ff5520895d00c743fc070000008b3c24893b8b5424048953048b4c2408894b088b74240c89730c8b7424108973108b7424148973148b5424188953188b088b78048b70088b4104e80219ffff83f8017453578b41080bc0e87e21f8ff83f801743a8b410883c800e8ae21f8ff565390e822c1fdff8b5c24088b542428895c24288b3c24897c24248b742404897424208b590c83c42052e9cfbcfdffb80100000083c420c3b80100000083c41cc390|@6876,63|40,0,@6873 59,0,@5153 69,0,@5156 84,0,@5158 94,0,@5160 104,0,@6874 194,1,@5689 210,1,@2227 226,1,@2229 234,1,@5098 273,1,@5094 278,0,0 287,0,0 6873:C2,92|3b650c7303ff5524528b38f7c7010000007503ff553883ff017f09b80100000083c404c38b342457b8410000008b5604ff128b1c24f6c3017503ff553889da83ea0270f689d783c4043b650c7303ff5524ebb8b80100000083c408c3|@5152,63|28,0,0 41,0,32 84,0,0 6874:O1|@6875 6875:C2,8|b801000000c30bc0|@5155,1|1,0,0 6876:S41|494e495449414c4953455f28292e696e6974476c6f62616c456e762831297072696e7456616c283129 6877:O4|-2,1,@6878,0 6878:O2|@6397,@6879 6879:O2|@6160,@6880 6880:O2|@6304,@6577 6881:O2|@6883,@6882 6882:O2|@6884,0 6883:S10|646973706c6179466978 6884:O3|@7317,69,@6885 6885:O4|@6883,-1,@6887,@6886 6886:O3|1,@6894,@1059 6887:O2|-1,@6888 6888:O2|-3,@6889 6889:O1|@6890 6890:C2,20|3b650c7303ff55248b58048b00e91e0000000bc0|@6893,63|14,1,@6891 6891:C2,176|3b650c7303ff552450505050505050ff30ff70048d7c240857b89b00000083c800e82a22f5ff8b75008d76e03b75087303ff5520897500c746fc070000008b5c2408891e8b54240c8956048b4c2410894e088b44241489460c8b7c2418897e108b7c241c897e148b54242089561856b818147541ff12ff3424bbcf0700008b44240883c800e86644f7ffb8000375418b54240c90ff128b4424088b5424180bc0ff12b8010000008b54241483c428ff22|@6892,63|26,0,77 34,1,@255 112,0,@326 122,0,999 134,1,@1724 139,0,@312 163,0,0 6892:S43|494e495449414c4953455f28292e696e6974476c6f62616c456e76283129646973706c6179466978283229 6893:S43|494e495449414c4953455f28292e696e6974476c6f62616c456e76283129646973706c6179466978283129 6894:O4|-2,1,@6895,0 6895:O2|@6897,@6896 6896:O2|@6898,0 6897:O2|49,@5842 6898:O2|50,@6123 6899:O2|@6901,@6900 6900:O2|@6902,0 6901:S19|6572726f724d65737361676550726f63546167 6902:O3|@7317,69,@6903 6903:O4|@6901,-1,@6905,@6904 6904:O4|-3,@6907,@6332,@6330 6905:O2|-1,@6906 6906:O2|-3,@589 6907:O2|@6908,0 6908:O3|1,@6909,@1059 6909:O4|-2,1,@6910,0 6910:O2|@5845,@6911 6911:O2|@6153,@6912 6912:O2|@6458,0 6913:O2|@6915,@6914 6914:O2|@6916,0 6915:S9|556e6976657273616c 6916:O3|@7335,69,@6917 6917:O3|@6915,@561,@6918 6918:O4|@6919,I48,0,0 6919:O4|-1,@7451,@7452,@7450 6920:O2|@6072,@6969 6921:O2|@6332,@6922 6922:O2|@6923,0 6923:O3|@7330,69,@6333 6924:O2|@6926,@6925 6925:O2|@6927,0 6926:S10|74616750726f6a656374 6927:O3|@7317,69,@6928 6928:O4|@6926,-1,@6930,@6929 6929:O3|1,@6936,@6935 6930:O2|-1,@6931 6931:O2|-3,@6932 6932:O1|@6933 6933:C2,4|8b4008c3|@6934,1| 6934:S29|556e6976657273616c2e74616750726f6a6563742d2370726f6a656374 6935:O3|1,@6070,@6938 6936:O4|-3,@6937,@6332,@6330 6937:O2|@6938,0 6938:O3|3,@7454,79992 6939:O2|@6941,@6940 6940:O2|@6942,0 6941:S9|746167496e6a656374 6942:O3|@7317,69,@6943 6943:O4|@6941,-1,@6945,@6944 6944:O3|1,@6951,@6950 6945:O2|-1,@6946 6946:O2|-3,@6947 6947:O1|@6948 6948:C2,4|8b4004c3|@6949,1| 6949:S27|556e6976657273616c2e746167496e6a6563742d23696e6a656374 6950:O3|1,@6953,@6070 6951:O4|-3,@6952,@6332,@6330 6952:O2|@6953,0 6953:O3|3,@7455,79992 6954:O2|@6956,@6955 6955:O2|@6957,0 6956:S5|7461674973 6957:O3|@7317,69,@6958 6958:O4|@6956,-1,@6960,@6959 6959:O3|1,@6966,@6965 6960:O2|-1,@6961 6961:O2|-3,@6962 6962:O1|@6963 6963:C2,4|8b00c390|@6964,1| 6964:S19|556e6976657273616c2e74616749732d236973 6965:O3|1,@6070,@187 6966:O4|-3,@6967,@6332,@6330 6967:O2|@6968,0 6968:O3|3,@7456,79992 6969:O2|@6970,0 6970:O3|@7330,69,@6073 6971:O2|@1237,@6972 6972:O2|@6973,0 6973:O3|@7317,69,@6974 6974:O4|@1237,-1,@6976,@6975 6975:O3|1,@521,@522 6976:O2|-1,@6977 6977:O2|-3,@6978 6978:O1|@6979 6979:C2,236|3b650c7303ff5524f7c0010000007407bf03000000eb068b388d7c3f01f7c7010000007503ff553883ff077c20506a05bb01000000e8cef5f5ffbb2470754190ff154094040883f8017403eb48508b3424f7c6010000007407bb03000000eb068b1e8d5c1b01f6c3017503ff553883fb097c296a07bb0100000089f090e886f5f5ffbba8c87f4190ff154094040883f8017502eb07be03000000eb05beffffffff8b55008d52f43b55087303ff5520895500c742fc02000000b9b4c87f41890a89720489d38b042490e8628bf6ff83f8017510b834c97f4183c800ff552cb8010000008b0083c404c383c800|@6985,63|17,0,1 49,0,0 54,1,@1081 59,0,@781 66,0,I24 90,0,1 118,0,0 126,1,@1081 131,0,@6980 138,0,I24 150,0,1 157,0,-1 186,0,@6981 202,1,@1375 212,0,@6983 223,0,0 6980:S3|7e3078 6981:C2,44|89c78b45008d40f03b45087303ff5520894500c740fc03000000befcc87f4189308978088b7a04897804c390|@1374,53|27,0,@6982 6982:C2,28|3b650c7303ff55248b7a048b3424893c248b5a0856e9ee82f6ff0bc0|@1373,63|22,1,@1365 6983:O3|8,@6815,@6984 6984:S24|496e76616c696420696e746567657220636f6e7374616e74 6985:S44|494e495449414c4953455f28292e696e6974476c6f62616c456e76283129696e744f66537472696e67283129 6986:O2|@6988,@6987 6987:O2|@6989,0 6988:S19|636f64657472656541667465724f7074546167 6989:O3|@7317,69,@6990 6990:O4|@6988,-1,@6991,@6352 6991:O2|-1,@6992 6992:O2|-3,@2861 6993:O2|@6995,0 6994:S13|6572726f724465707468546167 6995:O3|@7317,69,@6996 6996:O4|@6994,-1,@6997,@6343 6997:O2|-1,@6998 6998:O2|-3,@1766 6999:O2|47,@7000 7000:O2|@7001,0 7001:O3|@7317,69,@7002 7002:O4|47,-1,@186,@6199 7003:O2|@7005,@7004 7004:O2|@7006,0 7005:S3|646976 7006:O3|@7317,69,@7007 7007:O4|@7005,-1,@186,@6199 7008:O2|@7010,@7009 7009:O2|@7011,0 7010:S6|766563746f72 7011:O3|@7330,69,@7012 7012:O6|@7010,1,0,@7014,@527,@7013 7013:O2|-1,@7458 7014:O2|@7015,0 7015:O3|3,@7457,79992 7016:O2|60,@7017 7017:O2|@7018,0 7018:O3|@7317,69,@7019 7019:O4|60,-1,@186,@185 7020:O2|62,@7021 7021:O2|@7022,0 7022:O3|@7317,69,@7023 7023:O4|62,-1,@186,@185 7024:O2|@7026,@7025 7025:O2|@7027,0 7026:S7|52756e43616c6c 7027:O3|@7335,69,@7028 7028:O3|@7026,@561,@7029 7029:O4|@7030,I48,0,0 7030:O4|-1,@7460,@7461,@7459 7031:O2|@174,20 7032:O2|@7243,@7242 7033:O2|@7035,@7034 7034:O2|@7036,0 7035:S14|52756e5f657863657074696f6e31 7036:O3|@7370,69,@7037 7037:O4|@7039,@7035,@7054,@7038 7038:O4|@7057,I48,1,0 7039:O3|I48,@7041,@7040 7040:O4|@7042,I48,1,0 7041:O3|1,@7464,@7463 7042:O3|0,@563,@7043 7043:O10|0,0,0,0,0,0,0,@7045,@7044,0 7044:O2|@7051,@7050 7045:O2|@7047,@7046 7046:O2|@7048,0 7047:S7|65785f6964656e 7048:O3|@7317,69,@7049 7049:O4|@7047,-1,@326,@522 7050:O2|@7052,0 7051:S7|65785f74797065 7052:O3|@7330,69,@7053 7053:O6|@7051,0,0,0,@510,@326 7054:O2|-1,@7055 7055:O2|-7,@7056 7056:O8|@450,@7035,0,0,1,0,0,0 7057:O3|0,@563,@7058 7058:O10|0,@7059,0,0,0,0,0,0,0,0 7059:O2|@7061,@7060 7060:O2|@7062,0 7061:S2|6578 7062:O3|@7317,69,@7063 7063:O4|@7061,0,@326,@7064 7064:O4|-3,0,@7051,@7065 7065:O2|0,@7053 7066:O2|@7068,@7067 7067:O2|@7069,0 7068:S10|756e7361666543617374 7069:O3|@7317,69,@7070 7070:O4|@7068,-1,@7072,@7071 7071:O3|1,@7077,@7076 7072:O2|-1,@7073 7073:O2|-7,@7074 7074:O8|@450,@7075,1,0,1,0,0,0 7075:S13|756e7361666543617374283129 7076:O3|3,@7466,79992 7077:O3|3,@7465,79992 7078:O2|@7080,@7079 7079:O2|@7081,0 7080:S9|72756e5f63616c6c30 7081:O3|@7317,69,@7082 7082:O4|@7080,-1,@7084,@7083 7083:O3|1,@522,@7098 7084:O2|-1,@7085 7085:O2|-7,@7086 7086:O8|@7087,@7080,1,0,1,0,0,0 7087:O2|9,@7088 7088:O2|@7090,@7089 7089:O2|@7093,0 7090:O4|-4,1,@7091,0 7091:O4|4,@448,@7092,1 7092:O2|-3,I189 7093:O2|-7,@7094 7094:O8|@7096,@7095,2,0,1,0,0,0 7095:S12|72756e5f63616c6c30283129 7096:O4|4,0,@7097,0 7097:O5|-5,1,1,1,0 7098:O3|1,@1059,@7099 7099:O3|3,@7467,79992 7100:O2|@7102,@7101 7101:O2|@7103,0 7102:S9|72756e5f63616c6c31 7103:O3|@7317,69,@7104 7104:O4|@7102,-1,@7106,@7105 7105:O3|1,@522,@7110 7106:O2|-1,@7107 7107:O2|-7,@7108 7108:O8|@7091,@7109,1,0,1,0,0,0 7109:S12|72756e5f63616c6c31283129 7110:O3|1,@7099,@7111 7111:O3|3,@7468,79992 7112:O2|@7114,@7113 7113:O2|@7115,0 7114:S9|72756e5f63616c6c32 7115:O3|@7317,69,@7116 7116:O4|@7114,-1,@7118,@7117 7117:O3|1,@522,@7128 7118:O2|-1,@7119 7119:O2|-7,@7120 7120:O8|@7121,@7114,1,0,1,0,0,0 7121:O2|9,@7122 7122:O2|@7090,@7123 7123:O2|@7124,0 7124:O2|-7,@7125 7125:O8|@7127,@7126,2,0,1,0,0,0 7126:S12|72756e5f63616c6c32283129 7127:O4|4,@5311,@7097,0 7128:O3|1,@7130,@7129 7129:O3|3,@7469,79992 7130:O4|-2,1,@7131,0 7131:O2|@7133,@7132 7132:O2|@7134,0 7133:O2|49,@7099 7134:O2|50,@7111 7135:O2|@7137,@7136 7136:O2|@7138,0 7137:S9|72756e5f63616c6c33 7138:O3|@7317,69,@7139 7139:O4|@7137,-1,@7141,@7140 7140:O3|1,@522,@7155 7141:O2|-1,@7142 7142:O2|-7,@7143 7143:O8|@7144,@7137,1,0,1,0,0,0 7144:O2|9,@7145 7145:O2|@7090,@7146 7146:O2|@7147,0 7147:O2|-7,@7148 7148:O8|@7150,@7149,2,0,1,0,0,0 7149:S12|72756e5f63616c6c33283129 7150:O4|4,@7151,@7097,0 7151:O2|@5313,@7152 7152:O2|@5314,@7153 7153:O2|@7154,0 7154:O3|6,@450,2 7155:O3|1,@7157,@7156 7156:O3|3,@7470,79992 7157:O4|-2,1,@7158,0 7158:O2|@7133,@7159 7159:O2|@7134,@7160 7160:O2|@7161,0 7161:O2|51,@7129 7162:O2|@7164,@7163 7163:O2|@7165,0 7164:S9|72756e5f63616c6c34 7165:O3|@7317,69,@7166 7166:O4|@7164,-1,@7168,@7167 7167:O3|1,@522,@7183 7168:O2|-1,@7169 7169:O2|-7,@7170 7170:O8|@7171,@7164,1,0,1,0,0,0 7171:O2|9,@7172 7172:O2|@7090,@7173 7173:O2|@7174,0 7174:O2|-7,@7175 7175:O8|@7177,@7176,2,0,1,0,0,0 7176:S12|72756e5f63616c6c34283129 7177:O4|4,@7178,@7097,0 7178:O2|@5313,@7179 7179:O2|@5314,@7180 7180:O2|@7154,@7181 7181:O2|@7182,0 7182:O3|6,@450,3 7183:O3|1,@7185,@7184 7184:O3|3,@7471,79992 7185:O4|-2,1,@7186,0 7186:O2|@7133,@7187 7187:O2|@7134,@7188 7188:O2|@7161,@7189 7189:O2|@7190,0 7190:O2|52,@7156 7191:O2|@7193,@7192 7192:O2|@7194,0 7193:S9|72756e5f63616c6c35 7194:O3|@7317,69,@7195 7195:O4|@7193,-1,@7197,@7196 7196:O3|1,@522,@7213 7197:O2|-1,@7198 7198:O2|-7,@7199 7199:O8|@7200,@7193,1,0,1,0,0,0 7200:O2|9,@7201 7201:O2|@7090,@7202 7202:O2|@7203,0 7203:O2|-7,@7204 7204:O8|@7206,@7205,2,0,1,0,0,0 7205:S12|72756e5f63616c6c35283129 7206:O4|4,@7207,@7097,0 7207:O2|@5313,@7208 7208:O2|@5314,@7209 7209:O2|@7154,@7210 7210:O2|@7182,@7211 7211:O2|@7212,0 7212:O3|6,@450,4 7213:O3|1,@7215,@7214 7214:O3|3,@7472,79992 7215:O4|-2,1,@7216,0 7216:O2|@7133,@7217 7217:O2|@7134,@7218 7218:O2|@7161,@7219 7219:O2|@7190,@7220 7220:O2|@7221,0 7221:O2|53,@7184 7222:O2|@7224,@7223 7223:O2|@7225,0 7224:S14|52756e5f657863657074696f6e30 7225:O3|@7370,69,@7226 7226:O4|@7228,@7224,@7233,@7227 7227:O4|@7236,I48,0,0 7228:O3|I48,@7230,@7229 7229:O4|@7231,I48,0,0 7230:O3|1,@7474,@7473 7231:O3|0,@563,@7232 7232:O10|0,0,0,0,0,0,0,0,@7045,0 7233:O2|-1,@7234 7234:O2|-7,@7235 7235:O8|@450,@7224,0,0,1,0,0,0 7236:O3|0,@563,@7237 7237:O10|0,@7238,0,0,0,0,0,0,0,0 7238:O2|@7061,@7239 7239:O2|@7240,0 7240:O3|@7317,69,@7241 7241:O4|@7061,0,@326,@202 7242:O2|@7244,0 7243:S11|6164644f7665726c6f6164 7244:O3|@7317,69,@7245 7245:O4|@7243,-1,@3293,@7246 7246:O3|1,@7247,@6123 7247:O3|1,@7249,@7248 7248:O3|3,@7476,79992 7249:O3|3,@7475,79992 7250:O2|@2303,@7251 7251:O2|@7252,0 7252:O3|@7317,69,@2583 7253:O2|@1952,@7254 7254:O2|@7255,0 7255:O3|@7330,69,@1950 7256:O2|@2305,@7257 7257:O2|@7259,@7258 7258:O2|@7260,0 7259:O3|@7330,69,@2769 7260:O3|@7317,69,@2776 7261:O2|@1061,@7262 7262:O2|@7263,0 7263:O3|@7330,69,@1062 7264:O2|61,@7265 7265:O2|@7266,0 7266:O3|@7317,69,@7267 7267:O4|61,-1,@7269,@7268 7268:O3|1,@7270,@187 7269:O2|-2,-1 7270:O4|-2,1,@7271,0 7271:O2|@7273,@7272 7272:O2|@7275,0 7273:O2|49,@7274 7274:O3|3,@7477,79996 7275:O2|50,@7274 7276:O2|@5323,@7277 7277:O2|@7278,0 7278:O3|@7330,69,@5321 7279:O2|@2304,@7280 7280:O2|@7281,0 7281:O3|@7317,69,@2532 7282:O2|@5989,@7283 7283:O2|@7284,0 7284:O3|@7317,69,@5987 7285:O2|@530,@7286 7286:O2|@7287,0 7287:O3|@7330,69,@531 7288:O2|@196,@7289 7289:O2|@7290,0 7290:O3|@7330,69,@197 7291:O2|@7292,0 7292:O3|@7330,69,@525 7293:C2,868|8b7d008d7ff43b7d087303ff5520897d00c747fc02000000be78987f4189378947048b75008d76f43b75087303ff5520897500c746fc02000000bbb8997f41891e8946048b5d008d5bf43b5d087303ff5520895d00c743fc02000000ba049b7f4189138943048b55008d52f43b55087303ff5520895500c742fc02000000b918997f41890a8942048b4d008d49f43b4d087303ff5520894d00c741fc02000000505756535251b8e49c7f4189018b4424148941048b45008d40f43b45087303ff5520894500c740fc02000000bf509c7f4189388b7c24148978048b7d008d7ff43b7d087303ff5520897d00c747fc02000000bea0947f4189378b7424148977048b75008d76f43b75087303ff5520897500c746fc02000000bbf8957f41891e8b5c2414895e048b5d008d5bf43b5d087303ff5520895d00c743fc02000000bacc977f4189138b5424148953048b55008d52f43b55087303ff5520895500c742fc02000000b9a49b7f41890a8b4c2414894a048b4d008d49f43b4d087303ff5520894d00c741fc02000000505756535251b84c957f4189018b44242c8941048b45008d40f43b45087303ff5520894500c740fc02000000bf589a7f4189388b7c242c8978048b7d008d7ff43b7d087303ff5520897d00c747fc02000000bed88e7f4189378b74242c8977048b75008d76f43b75087303ff5520897500c746fc02000000bb28917f41891e8b5c242c895e048b5d008d5bf43b5d087303ff5520895d00c743fc02000000ba50927f4189138b54242c8953048b55008d52f43b55087303ff5520895500c742fc02000000b900907f41890a8b4c242c894a048b4d008d49f43b4d087303ff5520894d00c741fc02000000505756535251b8a4967f4189018b4424448941048b45008d40f43b45087303ff5520894500c740fc02000000bf78937f4189388b7c24448978048b7d008d7fb43b7d087303ff5520897d00c747fc120000008b7424308977448b74242c8977408b74241c89773c8b7424388977388b7424148977348b74243c8977308b74243489772c8b7424408977288b742420897724894f208b4c2424894f1c8b7424188977188b4c2428894f14894710895f0c8b44240c8947088957048b74241089378b5d008d5bf03b5d087303ff5520895d00c743fc03000000ba58657f418913897b088b4c2444894b0489d883c448c30bc0|@7294,63|25,0,@6714 59,0,@6720 93,0,@6726 127,0,@6717 167,0,@6734 205,0,@6732 243,0,@6697 281,0,@6703 319,0,@6711 357,0,@6729 401,0,@6700 439,0,@6723 477,0,@6672 515,0,@6682 553,0,@6687 591,0,@6677 635,0,@6706 673,0,@6692 844,0,@6599 7294:S21|4d414b455f28292e757365496e746f456e76283129 7295:S6|69742d283129 7296:MO1|@16 7297:MO1|0 7298:MO1|@43 7299:MO1|0 7300:MO1|0 7301:MO1|@84 7302:MO1|1209 7303:MO1|1208 7304:MB4096|282a0a09436f707972696768742028632920323030362d372020446176696420432e204a2e204d617474686577730a0a0954686973206c696272617279206973206672656520736f6674776172653b20796f752063616e2072656469737472696275746520697420616e642f6f720a096d6f6469667920697420756e64657220746865207465726d73206f662074686520474e55204c65737365722047656e6572616c205075626c69630a094c6963656e7365206173207075626c697368656420627920746865204672656520536f66747761726520466f756e646174696f6e3b206569746865720a0976657273696f6e20322e31206f6620746865204c6963656e73652c206f722028617420796f7572206f7074696f6e2920616e79206c617465722076657273696f6e2e0a090a0954686973206c69627261727920697320646973747269627574656420696e2074686520686f706520746861742069742077696c6c2062652075736566756c2c0a0962757420574954484f555420414e592057415252414e54593b20776974686f7574206576656e2074686520696d706c6965642077617272616e7479206f660a094d45524348414e544142494c495459206f72204649544e45535320464f52204120504152544943554c415220505552504f53452e20205365652074686520474e550a094c65737365722047656e6572616c205075626c6963204c6963656e736520666f72206d6f72652064657461696c732e0a090a09596f752073686f756c642068617665207265636569766564206120636f7079206f662074686520474e55204c65737365722047656e6572616c205075626c69630a094c6963656e736520616c6f6e6720776974682074686973206c6962726172793b206966206e6f742c20777269746520746f20746865204672656520536f6674776172650a09466f756e646174696f6e2c20496e632e2c203531204672616e6b6c696e2053742c20466966746820466c6f6f722c20426f73746f6e2c204d41202030323131302d3133303120205553410a2a290a0a282a20436f6d70696c65722074686520636f6d70696c657220616e64206578706f7274206974206173206120706f727461626c652066696c652e20205468652072657374206f66207468650a202020626f6f7473747261702070726f63657373206973207468656e20646f6e65207768656e2074686520706f727461626c652066696c6520697320696d706f727465642e202a290a0a506f6c794d4c2e7072696e745f646570746820303b0a0a506f6c794d4c2e6d616b6520226d6c736f757263652f4d4c436f6d70696c65722f426f6f74223b0a506f6c794d4c2e6d616b6520226d6c736f757263652f4d4c436f6d70696c6572223b0a0a506f6c794d4c2e7368617265436f6d6d6f6e44617461204d4c436f6d70696c65722e7368656c6c3b0a0a506f6c794d4c2e6578706f7274506f727461626c652822706f6c7974656d70222c0a20202020666e202829203d3e20284d4c436f6d70696c65722e7368656c6c28293b204f532e50726f636573732e65786974204f532e50726f636573732e73756363657373292068616e646c65205f203d3e204f532e50726f636573732e65786974204f532e50726f636573732e6661696c757265293b0a20202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020 7305:MO1|@94 7306:MO1|1 7307:MO1|0 7308:MO1|0 7309:MO1|-1 7310:MB4096|23206561746564207369676e6174757265204d4c436f6d70696c65720a73696f6e0a790a730a0a6d706f72740a20202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020 7311:MO1|0 7312:MO1|0 7313:MO1|@7316 7314:MO1|@173 7315:MO1|38 7316:MO81|80,0,0,0,0,0,0,0,@180,0,@496,@501,@504,0,@512,@533,0,0,0,@546,@552,0,@555,0,0,0,@6194,@6200,0,0,0,0,0,0,@6203,0,@6216,0,0,0,0,@6219,@6222,@6226,@6229,@6233,@6237,@6241,@6999,0,0,0,0,@7003,@7008,@7016,@7020,@7024,@7250,@7253,@7256,@7261,@7264,@7276,0,@7279,0,0,0,0,0,0,0,0,0,0,0,@7282,@7285,@7288,@179 7317:MO1|0 7318:MO1|@193 7319:MO1|@200 7320:MO1|0 7321:MO1|@125 7322:MO1|0 7323:MO1|0 7324:MO1|0 7325:MO1|0 7326:MO1|0 7327:MO1|0 7328:MO1|0 7329:MO1|0 7330:MO1|0 7331:MO1|0 7332:MO1|0 7333:MO1|0 7334:MO1|@202 7335:MO1|0 7336:MO1|@7339 7337:MO1|@563 7338:MO1|7 7339:MO11|10,0,@566,0,@574,@6095,@6108,0,@6125,@6133,@565 7340:MO1|@202 7341:MO1|0 7342:MO1|0 7343:MO1|0 7344:MO1|0 7345:MO1|0 7346:MO1|0 7347:MO1|0 7348:MO1|0 7349:MO1|0 7350:MO1|0 7351:MO1|0 7352:MO1|0 7353:MO1|0 7354:MO1|0 7355:MO1|0 7356:MO1|0 7357:MO1|0 7358:MO1|0 7359:MO1|0 7360:MO1|0 7361:MO1|@7364 7362:MO1|@813 7363:MO1|49 7364:MO273|272,0,0,@815,@817,0,0,0,0,0,@819,0,0,@821,0,0,0,0,0,0,@823,0,0,@825,0,0,0,0,@827,0,0,0,0,0,0,0,@829,0,0,0,0,0,0,@830,0,0,0,0,0,0,0,@831,0,0,@833,@835,@837,@839,@841,@842,@844,@846,@847,0,@849,0,0,@851,0,0,0,0,0,@853,0,0,0,@855,0,0,@857,0,0,0,0,0,0,@859,0,0,0,0,0,@861,0,0,0,@863,0,0,0,0,0,@865,0,@867,@869,0,0,@871,0,0,0,@873,0,0,0,0,0,0,0,0,0,0,0,@875,0,0,0,0,0,0,0,0,0,0,0,0,0,0,@876,0,0,0,@878,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,@880,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,@882,0,0,@884,0,0,0,0,0,0,0,0,0,0,0,0,0,0,@886,0,0,0,@888,0,@890,0,0,0,0,0,0,0,0,0,0,@892,0,0,@894,0,0,0,0,0,0,0,0,@896,0,0,0,0,0,0,0,0,0,0,@898,0,0,0,0,@900,0,0,0,0,0,@902,0,@904,0,0,0,0,0,0,0,@814,0,0,0,0,0,0,0 7365:MO1|0 7366:MO1|0 7367:MO1|0 7368:MO1|@193 7369:MO1|0 7370:MO1|0 7371:MO1|0 7372:MO1|0 7373:MO1|0 7374:MO1|0 7375:MO1|@202 7376:MO1|@2529 7377:MO1|0 7378:MO1|0 7379:MO1|0 7380:MO1|0 7381:MO1|0 7382:MO1|0 7383:MO1|0 7384:MO1|@202 7385:MO1|@2774 7386:MO1|0 7387:MO1|0 7388:MO1|0 7389:MO1|0 7390:MO1|@202 7391:MO1|0 7392:MO1|0 7393:MO1|0 7394:MO1|0 7395:MO1|0 7396:MO1|0 7397:MO1|0 7398:MO1|32 7399:MO1|I48 7400:MO1|57 7401:MO1|0 7402:MO1|68 7403:MO1|@5832 7404:MO1|@511 7405:MO1|0 7406:MO1|@511 7407:MO1|0 7408:MO1|@511 7409:MO1|0 7410:MO1|@511 7411:MO1|0 7412:MO1|@511 7413:MO1|0 7414:MO1|@511 7415:MO1|0 7416:MO1|@202 7417:MO1|@5962 7418:MO1|0 7419:MO1|0 7420:MO1|0 7421:MO1|0 7422:MO1|0 7423:MO1|0 7424:MO1|0 7425:MO1|0 7426:MO1|@511 7427:MO1|0 7428:MO1|@202 7429:MO1|@202 7430:MO1|@202 7431:MO1|@202 7432:MO1|@202 7433:MO1|@7436 7434:MO1|@563 7435:MO1|7 7436:MO11|10,@6174,@6177,@6180,0,0,0,@6183,@6186,@6189,@6173 7437:MO1|@202 7438:MO1|@7441 7439:MO1|@173 7440:MO1|38 7441:MO81|80,@6249,@6308,@6322,0,@6338,0,0,@6347,@6356,@6363,0,0,@6370,0,0,@6377,0,@6384,0,0,@6398,0,@6405,@6419,@6426,@6440,@6464,@6471,@6561,@6580,0,@6590,0,@6736,0,0,@6743,0,0,0,0,0,0,@6756,0,0,0,@6765,@6772,@6779,@6791,@6819,@6841,0,0,0,0,@6848,@6856,@6863,@6881,@6899,0,0,0,0,@6913,@6971,0,0,0,0,@6986,0,0,0,0,0,0,@6248 7442:MO1|@202 7443:MO1|@511 7444:MO1|0 7445:MO1|0 7446:MO1|@7449 7447:MO1|@563 7448:MO1|1 7449:MO11|10,0,0,0,0,0,0,0,0,@6750,0 7450:MO1|@7453 7451:MO1|@563 7452:MO1|5 7453:MO11|10,0,0,@6921,0,@6924,@6939,@6954,0,0,@6920 7454:MO1|@202 7455:MO1|@202 7456:MO1|@202 7457:MO1|@202 7458:MO1|0 7459:MO1|@7462 7460:MO1|@7031 7461:MO1|10 7462:MO21|20,0,0,@7033,0,0,0,0,@7066,0,@7078,@7100,@7112,@7135,@7162,@7191,@7222,0,0,0,@7032 7463:MO1|0 7464:MO1|0 7465:MO1|@202 7466:MO1|@202 7467:MO1|@202 7468:MO1|@202 7469:MO1|@202 7470:MO1|@202 7471:MO1|@202 7472:MO1|@202 7473:MO1|0 7474:MO1|0 7475:MO1|@202 7476:MO1|@202 7477:MO1|@202 0:MVO1|1 1:MVO1|0 2:MVO1|1 3:MVO1|1 4:MVO1|1 5:MVO1|1 6:MVO1|1 7:MVO1|1 8:MVO1|1 polyml.5.2.1/imports/polymlint.txt0000644000175000017500000334503211020453520016263 0ustar daviddavidObjects 7434 Root 9 9:O3|@11,@7102,@10 10:O1|@180 11:C5,96|008056085617293b4d0054000e0c00034d014c002a2a0e0e0e0c0002503b2d0e0e0c00025078760e3b28133b4d0230000e0c0003050f00ff6d3b4d0322000e0e0e0c00026478760a3b3b2d0e0e0c0002050500ff6d3b64511e333b2705420e0e|@13,I253,@12,I150,I1| 12:O1|@14 13:S24|506f6c794d4c2e72756e46756e6374696f6e283129283129 14:C3,56|00802b3b4d0030000e0c000303033b02232b352c36294d011e000e0e0e0c00025078760a3b3b2e0e0e0c0002050500ff6d3b6465420e0e0e|@15,I229,@12| 15:S20|506f6c794d4c2e72756e4f6e456e747279283129 16:O2|@18,@17 17:O2|@43,@42 18:O1|@19 19:C8,88|00800402003b3b3b2c4d004b000c00055029352a364d013f002a4d023a000e0e0e0c0003293d4d032e000e0e0e0c00032c2a4d0422000e0e0e0c00034d0518002a6928072a4d060f000c0003503b2707420e0e0e0e0e0e0e|@21,@22,-1,I244,I243,I242,@20,I73| 20:O1|@28 21:S20|5369676e616c2e666f726b546872656164283129 22:O1|@23 23:C10,320|00832e3b4d0038010e0c000303072b2e452d4606dd2e3529353b4d0022010e0e0e0c0003039e2936293c4d0012010e0e0e0c0003034e3036303c4d0102010e0e0e0c0003303c4d02f6000e0e0e0c0003293b4d03ea000e0e0e0c0003644d04df000c000203054d05d60010303c4d01cf000c0003302c2c2c2c4d06c300220c7b060c000530362f3c4d02b4000e0c0003293b4d03aa000e0e0e0c0003644d049f000c000203054d059600102f3c4d018f000c00032f2b332c2c4d068300340e7b060b0005293630362a4d0773004d086f000c00030a03000f00080012000c00280602073b02043d02013f29324d015000020248000e0c00033128064d0241000e0e0c0003293b4d0336000e0e0e0c0003644d042b000c000203054d052200103128064d011a000e0e0e0c0003312d2c2c2c4d060b00220d7b060d00051f040e0e|@25,I229,I242,I243,I251,I218,@24,@22,-2,I107| 24:O3|12,@27,@26 25:S38|5468726561642e5468726561642e6174747273546f576f7264283129636f6e76657274283429 26:S53|5468652073616d65206174747269627574652061707065617273206d6f7265207468616e206f6e636520696e20746865206c697374 27:S6|546872656164 28:C17,224|00803c3b4d00d8000e0c0003294d01cf000c00024d02c8000e0c0002031929352a367876093b2c2e0e0c0002050500ff6d3b642603029d4d03a5003b4d04a0000e0c0003293c4d0596000e0e0e0c000364031c4d0389004d0685000e0e0c0002293b4d057a000e0e0e0c00036402013b030d3b3c4d0768000e0c00035002554d085d000402003b3b3b2c4d0952000e0e0e0c00055029352a364d0a43002a4d0b3e000e0e0e0c0003293d4d0c32000e0e0e0c00032c2a4d0d26000e0e0e0c00032f2a6928072a4d0e16000e0e0e0c0003503b26093b4d0f07002d0e0e7d040002|@30,I62,I105,I218,@0,I253,I251,I71,@31,@29,@22,-1,I244,I243,I242,I73,@20| 29:O1|@40 30:S19|5369676e616c2e736967546872656164283129 31:O1|@32 32:C13,208|00812b03043b5002783b4d00c2003b4d01bd000e0e0c0003293c4d02b2000e0e0e0c00036403033b0226291b204e4d039e000e0e0e0c000303033b0213293c4d048d000e0e0c0003292502501e423b64644d007b004d0577000c0002293b4d036e000e0e0e0c000303043b5002123c4d005d004d0659000e0e0c000326031e75514d074b004d0847004d0943000c0003504d003b004d0a37000c0002293c4d032e000e0e0e0c000303033b021f4d001f003b3c4d0b19000e0e0c0004503d4d000e004d060a002e0e7e05000364430e0e|@34,@0,I253,I251,I229,I106,I71,I73,@7103,@35,@33,I70,I255| 33:O1|@38 34:S35|5369676e616c2e73696754687265616428312962726f6164436173745765616b283229 35:O1|@36 36:C4,48|00802b3b4d0028000e0c000303033b021b2b352c363f2b4d0115000e0e0c000350294d020a002e0e7d050002420e0e0e|@37,I229,I73,@35| 37:S30|5468726561642e436f6e646974696f6e5661722e77616b65416c6c283129 38:C18,544|00812c352d364d0016020e0e0e0c0001293c4d010a020e0e0e0c00032928064d02fd010e0e0c0003290a040010000a0013000a0019004d03e601020a3c02074d04dd0102013b293c4d05d4010e0c000303043b5002444d00c6010e0e0e0c00014d00bc010e0c0001293c4d01b2010e0e0e0c00034d06a8012a4d02a3010c00033d2a4d079a010e0e0e0c00032d3c2b4d088d010e0e0c000426063b2f3b4d017f010c0003293c4d0976010e0e0e0c00036403033b0226291b204e4d0562010e0e0e0c000303033b0213293c4d0a51010e0e0c0003292502501e3d3b64642f4d0b3e010e0e0e0c0002293b4d0532010e0e0e0c000303043b50020e3c314d0c20010e0c000326031e6c512d3b4d0111010e0e0c0003320c00022e3b2b4d0801010e0e0c0004502f4d0df6000e0e0e0c0002293c4d05ea000e0e0e0c000303043b500217303b3c4d08d7000c0004503d314d0ccd000e0e0c0003504d00c3000c00012c4d04bb004d0eb7000c00030a03000f00080012000c00280602073b02043d02013f4d009a000e0e0e0c0001293c4d018e000e0e0e0c00034d0684002a4d027f000c00032c2a4d0776000e0e0e0c00032e3c2b4d0869000e0e0c000450313b4d055d000e0e0c000303033c020f4d034f00324d094a000e0e0e0c0003033d4d003e000e0e0e0c0001293e4d0132000e0e0e0c0003293b4d0f26000e0e0e0c0003654d101b000c0002030e280b3b4d0c0f0022120e7e1200033b02013b270e430e|@39,I72,I253,I243,-1,-2,I229,-7,I242,I255,I251,I106,I71,I73,I70,I107,I113,I218| 39:S40|5468726561642e436f6e646974696f6e5661722e7369676e616c4f7242726f616463617374283229 40:C2,16|00802b3b4d0008002d0e0e0e7e030003|@41,@31| 41:S38|5369676e616c2e73696754687265616428312962726f6164436173745765616b283129283129 42:O2|@168,@167 43:O4|@44,@156,@48,@7104 44:C6,112|00805609293b4d0066000e0e0e0c000329293b4d0159000e0e0c000303043b50021c29352a362a36293b3b4d0241000e0e0c0004502a250426031e2926035056284d032b003b4d0026000e0e0e0c00032a2a694d0319003b2b4d0213000c000450565728122a4d040600330e7e090003|@45,I253,I229,I255,@7105,I150| 45:S28|426173696353747265616d494f28292e646f4f6e456e747279283129 46:O2|@48,@47 47:O2|@79,@78 48:O2|@49,@7104 49:C6,152|00805607293b4d008e000e0e0e0c000329293b4d0181000e0e0c000303043b50022029352a362a392b4d026b002b4d0366000e0e0e0c0004502a250426031e2d2603503b2e0c0002505627293b2c4d0446000e0e0e0c0004505637293b4d0037000c000329293b4d012d000e0e0c000303033b021d29352a362a36293b3b4d0416000e0e0e0c0004502a250426031e293b662706420e0e0e|@51,I253,I229,@52,@50,I255| 50:O1|@68 51:S27|426173696353747265616d494f28292e646f4f6e4c6f6164283129 52:O1|@53 53:C11,120|00802b36293b4d006e000e0e0e0c00032d3729352f352c3b4d015c000e0c000303033b02492b2307294d024b000c00024d0344000e0c0002031d29353b303b3b4d0434000e0c0004503b0e0e0e4f0527008000026502162b4d061c004d0718006a4d0813004d090f002b6a6410642705420e0e0e0e0e0e0e|@55,I253,I229,I105,I218,I255,@56,@66,@57,@7106,@54| 54:S2|496f 55:S28|426173696353747265616d494f28292e666c7573684f757427283129 56:C12,176|008078762d3b5630564329314d00a0000e0c00032968012c332b4d0192000e0e0e0c000427041205000100f8ff0c0002054600ff6d56112a354d0273004d036f000c000303032a0202020202292a353c4d045c000e0c000303064d055200020202020212292b4d0646006a4d0241004d073d002b6a646410292d4d0832000e0e0e0c000356232a2a4d0924000e0c00036503033b0212292d4d0814000e0c00030e4f0a0b0011000264420e0e0e0e0e0e|@58,I107,@59,@7106,I251,I229,@64,@57,@54,I106,I113,@56| 57:S8|666c7573684f7574 58:S40|426173696353747265616d494f28292e666c7573684f757427283129666c75736842756666283129 59:O1|@60 60:C10,208|00822b3b4d00c8000e0c0003034a2c4d01bd000e0e0c0002030c2c3b4d02b0000e0c000302013b03032c02054d03a000102e352a2a4d0497000c00030312292b4d058c000e0c00032b2a326a296502054d067c00106502722b352e352e4d016f000c0002030c2e3b4d0264000e0c000302013b03032e02054d035400102b4d014e000e0e0e0c0002030c2b3b4d0240000e0c000302013b03032b02054d033000102a2a4d0729000e0e0c0003292d4d041e000e0e0e0c00036403082a2a336a296402054d080900102704440e0e0e0e0e|@62,I229,I105,I231,@61,I248,I240,@61,I239,@61| 61:O3|11,@63,0 62:S32|566563746f72536c6963654f7065726174696f6e7328292e736c696365283329 63:S9|537562736372697074 64:O3|1,@65,0 65:S9|496e74657272757074 66:O3|@7107,@67,0 67:S20|426c6f636b696e674e6f74537570706f72746564 68:C16,448|00823b4d00b9010e0e0c000229293b4d01ad010e0e0c000303033b022229352a362a354d0299014d0195010e0e0c000303052a68010207292503511e2e3b6564294d037b010c00024d0474010e0c00020345293529354d0266014d0162010e0e0e0c000303212936293c4d0152010e0e0e0c000303033b020b4d0543014d063f010c000264020d4d0535014d0631010e0e0c000264020d4d0525014d0621010e0e0c00024d0718014d0614010e0c00023b303b4d0809010e0e0c0003293c4d09fe000e0e0e0c00036403033b0226291b204e4d01ea000e0e0e0c000303033b0213293c4d0ad9000e0e0c0003292502501e3f3b6464304d0bc6000e0e0e0c0002293b4d01ba000e0e0e0c000303033b02103c324d0ca9000e0e0c000326031e6e3b6578760d3b220c220c0e0e0e0c0002054500ff6d314d0d86000e0e0e0c0002293c4d017a000e0e0e0c000303043b500217323b3c4d0e67000c0004503d334d0c5d000e0e0c0003502f4d0652000e0e0e0c0002502a10314d0d44000e0c0002293c4d013a000e0e0e0c000303043b500217323b3c4d0e27000c0004503d334d0c1d000e0e0c0003502f4d0612000e0e0e0c0002502a2707440e0e0e0e0e0e0e|@70,@71,I229,-1,I105,I218,@69,@74,@69,I253,I251,I106,I71,I73,I70,I255| 69:O2|@77,0 70:S26|426173696353747265616d494f28292e70726f74656374283329 71:O1|@72 72:C7,112|00804d006a000e0e0e0c0001293c4d015e000e0e0e0c0003293c4d0252000e0e0e0c0003293c4d0346000e0e0e0c00033b2a692c28064d0236000e0e0e0c0003290a040010000a0013000a0019004d041e00020a3c02074d05150002013b4d040e002a69293b692d2a692709420e0e0e|@73,I72,I253,I243,I251,-1,-2| 73:S30|5468726561642e5468726561642e67657441747472696275746573283129 74:O1|@75 75:C13,192|00804d00ba000e0e0e0c0001293c4d01ae000e0e0e0c00030402002e3b3b2c4d029d000e0e0c00055029352a364d008f000c00014d0388002b4d0483000c0003292f4d057a000e0e0e0c00032d2a4d066e000e0e0e0c00032c3c2b4d0761000e0e0c0004502e3f4d0555000e0e0c0003293f4d084a000e0e0e0c000364033c4d003d000e0e0c0001293e4d0132000e0e0e0c0003293b4d0926000e0e0e0c0003654d0a1b000c0002030e280b3b4d0b0f00220d0e7e0c00033b02013b2709420e|@76,I72,I253,@22,-1,I244,I243,I242,I255,I251,I113,I218,I73| 76:S30|5468726561642e5468726561642e73657441747472696275746573283129 77:O2|-1,-2 78:O2|@100,@99 79:O2|@80,@7108 80:C8,160|00805607293b4d0096000e0e0e0c000329353b4d0189000e0e0c0003037029362935293b4d0078000e0c00032b39293b4d006c000e0c00032d382a2d4d0260000e0c00032968012b2f2b4d0352000e0e0e0c0004654d0447000c00023b220c0e0e0c0002502d2b2b4d0534000e0c0004502e3b2f4d0628000e0c0004502c3b2d4d061c000e0c0004503b2707020a3b2e2e0e0e0e7d05000265420e0e0e0e0e0e|@82,I253,I229,I107,@83,@85,@81,I255| 81:O1|@93 82:S16|54657874494f2e6f6e4c6f6164283129 83:O1|@84 84:C10,208|00822b3b4d00c8000e0c0003034a2c4d01bd000e0e0c0002030c2c3b4d02b0000e0c000302013b03032c02054d03a000102e352a2a4d0497000c00030312292b4d058c000e0c00032b2a326a296502054d067c00106502722b352e352e4d016f000c0002030c2e3b4d0264000e0c000302013b03032e02054d035400102b4d014e000e0e0e0c0002030c2b3b4d0240000e0c000302013b03032b02054d033000102a2a4d0729000e0e0c0003292d4d041e000e0e0e0c00036403082a2a336a296402054d080900102704440e0e0e0e0e|@62,I229,I105,I231,@61,I248,I240,@61,I239,@61| 85:O1|@86 86:C12,168|00800403002c2a4d009d000e0e0c00035029352a362b372b362a0a01006d0073002a28084d0180000e0c0003293c4d0276000e0e0e0c0003293f4d036a000e0e0e0c000378760f3b2c28413b4d0458000e0c0004050800ff6d4d054b0010292f4d0644000e0c0003502d302b3f324d0736000e0e0e0c000650294d082a000e0e0e0c00025029270402144d091a00020e292c4d0a12000e0e0e0c000329642705420e0e0e0e0e0e0e|@88,@89,I239,I240,I241,I11,@87,I151,I198,I47,I48,I252| 87:O3|4,@92,0 88:S24|436861724172726179536c6963652e766563746f72283129 89:O1|@90 90:C1,24|00812c352d362e372e2a452c462b4766430e0e0e0e0e0e0e|@91| 91:S31|566563746f72536c6963654f7065726174696f6e7328292e62617365283229 92:S4|53697a65 93:C10,120|00822c352d362d4d006d000e0e0c0002304d0163000c0002030c303b4d0258000e0c000302013b03033002054d03480010292b4d0441000e0e0c0003292e4d0536000e0e0e0c00036403054d062900102f4d0123000c0002030e2b2a314d071700320e7b050900042f3f2d2c2e4d080700340e7b07090006|@94,I223,I105,I231,@61,I239,I249,@61,I254,I198| 94:S20|4368617241727261792e636f7079566563283329 95:O2|0,@96 96:O5|@7110,@97,I148,@98,@7109 97:S5|737464496e 98:O2|4096,@7111 99:O2|@48,@154 100:O2|@101,@7112 101:C6,152|00805607293b4d008e000e0e0e0c000329293b4d0181000e0e0c000303043b50022029352a362a392b4d026b002b4d0366000e0e0e0c0004502a250426031e2d2603503b2e0c0002505627293b2c4d0446000e0e0e0c0004505637293b4d0037000c000329293b4d012d000e0e0c000303033b021d29352a362a36293b3b4d0416000e0e0e0c0004502a250426031e293b662706420e0e0e|@51,I253,I229,@102,@50,I255| 102:O1|@103 103:C11,120|00802b36293b4d006e000e0e0e0c00032d3729352f352c3b4d015c000e0c000303033b02492b2307294d024b000c00024d0344000e0c0002031d29353b303b3b4d0434000e0c0004503b0e0e0e4f0527008000026502162b4d061c004d0718006a4d0813004d090f002b6a6410642705420e0e0e0e0e0e0e|@55,I253,I229,I105,I218,I255,@104,@66,@57,@7106,@54| 104:C12,176|008078762d3b5630564329314d00a0000e0c00032968012c332b4d0192000e0e0e0c000427041205000100f8ff0c0002054600ff6d56112a354d0273004d036f000c000303032a0202020202292a353c4d045c000e0c000303064d055200020202020212292b4d0646006a4d0241004d073d002b6a646410292d4d0832000e0e0e0c000356232a2a4d0924000e0c00036503033b0212292d4d0814000e0c00030e4f0a0b0011000264420e0e0e0e0e0e|@58,I107,@83,@7106,I251,I229,@64,@57,@54,I106,I113,@104| 105:O2|@107,@106 106:O2|@136,0 107:O6|@98,@7114,@108,@7115,@3,@7113 108:O14|@110,@111,@115,0,0,@117,0,@118,@122,@126,4096,0,@129,@109 109:O1|@133 110:S6|737464457272 111:O1|@112 112:O2|@113,I202 113:C2,24|00805607281d2a3b4d000c002f0e0e7b050400040e0e0e0e|@114,I61| 114:S50|4c696272617279494f537570706f72742e777261704f757446696c654465736372283529746578745072696d57722d283129 115:O2|@116,I202 116:C2,24|0080560728072a3b4d000c002f0e0e7b050400040e0e0e0e|@114,I61| 117:O1|I202 118:O1|@119 119:O2|@120,I202 120:C6,120|00800403002c2a4d006d000e0e0c00035029352a362b372b362b4d015a000e0e0e0c0002030c2b3b4d024c000e0c000302013b03032b02054d033c00102b4d0136000e0e0e0c0002030c2b3b4d0228000e0c000302013b03032b02054d0318001056772c2c2c6a280b2b2b4d040900220e0e0e7b050c0004|@121,@89,I105,I231,@61,I61| 121:S49|4c696272617279494f537570706f72742e777261704f757446696c65446573637228352977726974654172726179283129 122:O1|@123 123:O2|@124,I202 124:C7,128|00800403002c2a4d0075000e0e0c00035029352a362b372a4d0164000e0c0002030c2a3b4d0258000e0c000302013b03032a02054d034800102a4d0142000e0e0e0c0002030c2a3b4d0234000e0c000302013b03032a02054d0324001056672b3f4d041b000c00032f2a2d6a280b2c2b4d050c00220e0e7b050c00040e0e0e0e|@125,@89,I105,I231,@61,I239,I61| 125:S50|4c696272617279494f537570706f72742e777261704f757446696c6544657363722835297772697465566563746f72283129 126:O1|@127 127:O2|@128,I202 128:C3,32|00805607281c2a3b4d0014000e0c0004293b4d010a002f0e7e0500030e0e0e0e|@114,I61,I233| 129:O1|@130 130:O3|@131,@119,@127 131:C1,24|00803b56180c0002030c2b56170c00022968016402013b42|@132| 132:S40|5072696d494f28292e6175676d656e7457726974657228312977726974654172724e42272d283129 133:O3|@134,@123,@127 134:C1,24|00803b56180c0002030c2b56170c00022968016402013b42|@135| 135:S40|5072696d494f28292e6175676d656e7457726974657228312977726974655665634e42272d283129 136:O6|@137,@7118,@138,@7119,@4,@7116 137:O2|4096,@7117 138:O14|@140,@141,@143,0,0,@144,0,@145,@147,@149,4096,0,@151,@139 139:O1|@153 140:S6|7374644f7574 141:O1|@142 142:O2|@113,I149 143:O2|@116,I149 144:O1|I149 145:O1|@146 146:O2|@120,I149 147:O1|@148 148:O2|@124,I149 149:O1|@150 150:O2|@128,I149 151:O1|@152 152:O3|@131,@146,@150 153:O3|@134,@148,@150 154:O2|@79,@155 155:O2|@100,0 156:O3|@158,@157,@7104 157:O2|@161,@160 158:C4,88|00805608293b4d004e000e0e0e0c0003293b2a3b4d0140000e0c0003030329022e2a352b367876163b56972e392f2b2b4d0224000e0c00046505080e0e0e00ff6d3b642a2a2505250526031e393b662704420e0e0e0e0e0e|@159,I253,I229,@50| 159:S27|426173696353747265616d494f28292e636c6f7365416c6c283129 160:O3|@163,@5,@7104 161:C1,24|00802b3729372d56370c0002503b2a2e7d0500020e0e0e0e|@162| 162:S28|426173696353747265616d494f28292e636c6f73654f757427283129 163:C11,280|00802b38293b4d000e010e0e0e0c0003293c4d0102010e0e0e0c000303033b06ce2a3b3c4d02f0000e0c00045056273b2a3b4d00e2000e0e0e0c0003293c4d03d6000e0e0e0c00036403033b0226291b204e4d01c2000e0e0e0c000303033b0213293c4d04b1000e0e0c0003292502501e403b64642a4d059e000e0e0e0c0002293b4d0192000e0e0e0c000303043b50020e3c2c4d0680000e0c000326031e6f5156385648293b4d006d000e0e0c00033b2a0e0e0e4f075f007000022d3b2b4d0255000e0e0c0004505687294d0848000e0c0002293c4d013e000e0e0e0c000303043b50021b2a3b3c4d022b0002021f000c0004503d2b4d061d000e0e0c000350220c4d091100220d0e0e0e7d0d000265420e0e0e0e0e0e|@165,I253,I229,I255,I251,I106,I71,I73,@164,I70,@52| 164:C5,80|00802b3b4d0048000e0c000303033b02382b352c362a3856342a2a4d0131000e0e0c0003644d0227000c0002640310290e4f031b002100022b2a6929650209290e4f030b0021000265420e0e0e0e0e0e|@166,I229,I251,I218,@164| 165:S35|426173696353747265616d494f28292e7465726d696e61746553747265616d27283129 166:S14|4c6973742e66696c746572283229 167:O2|@171,0 168:O2|@169,@79 169:C4,40|008056074d0020003b4d011b000c00032a2a694d0011003b2b4d020b000c0004503b66420e0e0e0e|@170,@7105,I253,I255| 170:S20|54657874494f2e3c7061747465726e3e2d283129 171:O4|@173,@172,@100,@7112 172:O3|@175,@174,@7112 173:C6,112|00805609293b4d0066000e0e0e0c000329293b4d0159000e0e0c000303043b50021c29352a362a36293b3b4d0241000e0e0c0004502a250426031e2926035056284d032b003b4d0026000e0e0e0c00032a2a694d0319003b2b4d0213000c000450565728122a4d040600330e7e090003|@45,I253,I229,I255,@7105,I150| 174:O2|@177,@176 175:C4,88|00805608293b4d004e000e0e0e0c0003293b2a3b4d0140000e0c0003030329022e2a352b367876163b56972e392f2b2b4d0224000e0c00046505080e0e0e00ff6d3b642a2a2505250526031e393b662704420e0e0e0e0e0e|@159,I253,I229,@50| 176:O3|@178,@6,@7112 177:C1,24|00802b3729372d56370c0002503b2a2e7d0500020e0e0e0e|@162| 178:C11,280|00802b38293b4d000e010e0e0e0c0003293c4d0102010e0e0e0c000303033b06ce2a3b3c4d02f0000e0c00045056273b2a3b4d00e2000e0e0e0c0003293c4d03d6000e0e0e0c00036403033b0226291b204e4d01c2000e0e0e0c000303033b0213293c4d04b1000e0e0c0003292502501e403b64642a4d059e000e0e0e0c0002293b4d0192000e0e0e0c000303043b50020e3c2c4d0680000e0c000326031e6f5156385648293b4d006d000e0e0c00033b2a0e0e0e4f075f007000022d3b2b4d0255000e0e0c0004505687294d0848000e0c0002293c4d013e000e0e0e0c000303043b50021b2a3b3c4d022b0002021f000c0004503d2b4d061d000e0e0c000350220c4d091100220d0e0e0e7d0d000265420e0e0e0e0e0e|@165,I253,I229,I255,I251,I106,I71,I73,@179,I70,@102| 179:C5,80|00802b3b4d0048000e0c000303033b02382b352c362a3856342a2a4d0131000e0e0c0003644d0227000c0002640310290e4f031b002100022b2a6929650209290e4f030b0021000265420e0e0e0e0e0e|@166,I229,I251,I218,@179| 180:C6,152|00807876513b4d008e004d018a000e0e0e0c00024d0280002a0c00025178760e3b28133b4d0370000e0c0003050f00ff6d3b4d0462000e0e0e0c00026478760a3b3b2d0e0e0c0002050500ff6d3b64511e333b64053a00ff6d78760e3b28133b4d0334000e0c0003050f00ff6d3c4d0426000e0e0e0c00026478760a3b3b2d0e0e0c0002050500ff6d3b64511e333b65420e0e0e0e0e0e0e|@182,@183,@181,I48,I150,I1| 181:O1|@7100 182:S6|69742d283129 183:O2|@7,@184 184:O4|-1,@7121,@7122,@7120 185:O2|@186,80 186:C2,16|00802b56174d0007002d0e0e7e030003|@188,@187| 187:O1|@189 188:S25|486173685461626c652e6861736856616c7565283129283129 189:C13,224|00812c4d00d9000e0e0c00023b2a293b4d01cc000e0c000303032a027c293c4d02bd000e0e0c00032a3c4d02b2000e0e0e0c0003314d03a7000c00020303310218293f4d0499000e0e0c0003322a4d058e000e0e0e0c000364294d0382000e0e0e0c0002030329020b294d0672000e0e0e0c000228072f4d0765000e0e0c00032a2a4d045a000e0e0e0c0003292f2508250826061e863b2706652d4d0341000e0e0c000203032d020b2d4d0632000e0e0e0c00022a2a4d0826000e0e0e0c0003293b4d091a000e0e0e0c0003030e4d0a0e002a4d0b0900317e08000329270443|@191,I223,I229,I240,I105,I239,I252,I152,I238,I246,I234,@190,I106| 190:B8|0000008000000000 191:S22|486173685461626c652e6861736856616c7565283229 192:O2|@546,@7098 193:O2|@195,@194 194:O2|@196,0 195:S2|3c3d 196:O3|@7124,69,@197 197:O4|@195,-1,@199,@198 198:O3|1,@201,@200 199:O2|-2,4 200:O4|-3,0,@208,@7126 201:O4|-2,1,@202,0 202:O2|@204,@203 203:O2|@207,0 204:O2|49,@205 205:O3|3,@7125,79992 206:O2|2,0 207:O2|50,@205 208:S4|626f6f6c 209:O6|@208,0,0,0,@211,@210 210:O2|-1,@7143 211:O2|-1,@7127 212:O3|1,@214,@213 213:O2|@216,@215 214:O1|-1 215:O2|@492,0 216:O4|@218,@219,@217,@200 217:O2|-1,@220 218:S4|74727565 219:O1|1 220:O2|5,@7128 221:O5|0,@223,@489,@7137,@222 222:O2|10,@490 223:O3|@225,@227,@224 224:O2|@477,@476 225:C1,24|00802b352c362d37563756482f0e0e7b060300050e0e0e0e|@226| 226:S40|434f44455452454528292e67656e436f64652832292831296e6577456e7669726f6e283129283129 227:O2|@229,@228 228:O3|@232,0,@231 229:C1,16|00802b352c362d3756372e7b05030004|@230| 230:S44|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229656e76283129 231:O10|0,@453,@452,0,0,0,0,0,0,0 232:C11,120|00822d3556182a3b4d006c000e0c000303033c0218294d015e000e0e0e0c00022b2a4d0252000e0e0e0c00036403054d03450010292b4d043e000e0e0e0c00032964294d0531000e0e0c00024d0628000e0c000203062935296402054d071800105647312a4d080f000c0003292c4d090600330e7e0b0003|@234,I234,I15,I231,@61,I253,I105,I218,@235,I107,@233| 233:O1|@238 234:S44|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229656e76283329 235:O3|@7129,@237,@236 236:S7|676574536f6d65 237:S13|496e7465726e616c4572726f72 238:C12,424|00812c3b4d00a0010e0c000303032b06d53b2c354d0190014d008c010e0c000303082c362937296502162c353c4d0077010c000303062c37296402042c36296429354d0262014d035e010e0e0e0c00030a0400b4000a0011000a00b1004d0447011006d6293b0e0e0e4f053b013000032e354d0132014d002e010e0e0e0c000303082e362939296502044d061a012f354d0114014d0010010e0c000303082f362936296502044d07fe0030354d01f8004d00f4000e0c00030308303629382965020e3c28403b4d08de000e0e0e0c00043b2b2e2c2f68050402002d354d09c8004d00c4000202bb000e0c00030308293b452f46500209294d01ad00452b4650292706029e2d029b293b4f059b003000032e354d0192004d008e000e0e0e0c000303082e362939296502044d067a002f354d0174004d007000020266000e0c000303082f362936296502044d0a5a0030354d0154004d0050000e0c00030308303629382965020e3c28403b4d083a000e0e0e0c00043b2b2e2c2f68050402002d354d0924004d0020000e0c00030308293b452f46500209294d010d00452b465029270665430e0e0e0e|@240,I229,-1,-7,I107,@241,@243,@440,@446,I11,-2,@239| 239:O1|@451 240:S25|434f44455452454528292e6368616e67654c6576656c283229 241:O3|@7129,@237,@242 242:S26|6368616e67654c6576656c3a20556e6b6e6f776e20656e747279 243:C16,392|00812c354d0080014d017c010e0c00030a1200a3002600650029012600260026002600260026005c01ed002600120126002600480126005f01040700284d4d0246012b4d0341010e0e0c00045029372a23062b4d0431012b0e0c000250302a4d0525010e0e0c0003503b2c0e0e0c0002504d0613011006cc2c362d372e38293b4d0704010e0c0003030c292f4d08f8000e0c000302013b03032f021756382a2a4d09e4000e0c00034d0adc002e2e2c3b6805656602d02c3629352a362b372c382d392e3a2f2306302307343c4d09b8000e0c0003312a0e0e0e4f0bab00b1000356b8312a4d09a0000e0c00032b342b343434343468084d008e002a69270e02862c362d372e382a2f0e4f0b7b004100033b2d0e0e0e4f0c6f005000023f2a2d2f6b270602612c362d372a2e0e0e4f0b570031000328062a2c6a66024a2c362d37292e020240000e0e0e4f0b3b003100034d0d34002c2b3b6b66022b2c363b2a0e0e4f0e230020000228092a696602172c02142c362d372a2e0e4f0b0b00310003280b2a2c6a66430e|@245,-7,I107,@246,@280,@338,@339,@442,I231,I234,I106,-5,@243,@444,-4,@244| 244:C4,48|00802b3b4d0028000e0c000303033b021d2b352c3656272b2a4f0113004200032b4f020b004100022a2a69292706420e|@445,I229,@243,@244| 245:S35|434f44455452454528292e6368616e67654c6576656c2832296368616e67654c283229 246:O1|@247 247:C4,32|00804d001a003b4d0115000e0e0c0003292d4d020a002e0e7e0400030e0e0e0e|@249,@7130,I253,@248| 248:O1|@250 249:S45|434f44455452454528292e6368616e67654c6576656c2832296368616e67654c283229707072696e742d283129 250:C14,280|00812c4d0011010e0e0c0002294d0107014d0203010c000307d22c4d03f9000e0e0c00023b2a0e0e0e4f04eb00300002293b4d02e2000e0e0e0c000303262f4d03d5000e0e0c0002303b2b6a4d05c8002a693339342b2b4d06bd00220d0e0e7b050c0004296801303b2b4d07aa000e0e0e0c00040403002a2a4d089b000c00035029352a362b372b2b2b6a4d0989002a69220f3922102b2b4d067c000e0c00045022103922114d0a6e002b4d0669000e0e0c0004502210343b4d075b000c00040403002a2a4d084f000c00035029352a362b372b2b2b6a4d0b3d002a6922183922192b2b4d063000221b020206000e7b051a00042c4d031f000c00022d3b2b6a4d0c14002a693039312b2b4d060900330e0e0e7b05090004|@252,@253,-1,I229,I223,@256,@258,@50,@271,@89,@278,@102,@279,@251| 251:C2,16|00802b56174d0007002d0e0e7e030003|@260,@259| 252:S29|54657874494f2e5465787453747265616d494f2e6f7574707574283229 253:O1|@254 254:C2,24|00802b3a293b4d000e000e0e0e0c00032965420e0e0e0e0e|@255,I253| 255:S32|426173696353747265616d494f28292e6765744275666665724d6f6465283129 256:C11,152|00802b3b4d0090000e0c000303033b028356072c3c4d017f000c0003293b4d0276000e0e0e0c000303033c02182a4d0366000e0e0e0c00022a2a4d045a000e0e0e0c00036403054d054d00102a4d0647000c000203032a0218293f4d0739000e0e0c00032b2a4d082e000e0e0e0c00036429404d0021000e0e0c00036603032b02122b3c4d0110000e0c00030e4f090700010002420e0e0e|@257,I229,I107,I234,I223,I231,@61,I105,I239,I252,@256| 257:S43|54657874494f2e5465787453747265616d494f2e6f75747075742832296c6173744e65776c696e65283129 258:C2,16|00802b56174d0007002d0e0e7e030003|@260,@259| 259:O1|@261 260:S34|426173696353747265616d494f28292e6f7574707574566563746f72283129283129 261:C12,168|00812c3729352e38293b4d009a000e0e0e0c0003293c4d018e000e0e0e0c000303162b4d0281004d037d006a4d0478004d0574002b6a641030353136323a3235333634372e353b2b2b4d065b000c0003031e220f4d0750000e0c000250220f2e2e2e4d08420022120e0e0e7b061000052e3b4d0032000e0e0e0c00033c2a4d0926000e0e0e0c0003640311220f2e2e2e4d08140022120e7b061000053b4f0a0700c00002270c430e|@263,I253,I229,@264,@266,@7106,@54,I233,@102,@267,I251,@262| 262:C9,472|00801201000100f5ff1202000100f4ff1203000100f9ff293b4d00bb010c00032b2a4d01b2010e0e0e0c00032d2a4d02a6010e0e0e0c00032705037a1201000100f9ff293b4d008f010c00031203000100f6ff56301205000100f5ff1206000100f7ff2a68012a2e2b4d036b010c00042f2e2b4d0461010e0e0c0004501209000100f9ff120a000100f9ff293b4d0047010c0003120c000100f5ff2a2a4d0537010c00032d3b2b4d062d010e0e0c0004503b270d06dc1201000100f4ff1202000100f9ff293b4d000e010e0e0e0c00032b2a4d0102010e0e0e0c00031205000100f9ff293b4d00ef000c00031207000100f6ff56701209000100f7ff2e68012a2d2b4d03d2000e0e0e0c00042e2d2b4d04c5000e0e0c000450120c000100f9ff120d000100f9ff293b4d00ab000c000329344d05a2000e0e0e0c00032c3b2b4d0695000e0e0c00045056f84d0789000e0e0c0002501210000100f6ff29220d4d0575000e0e0c00031212000100f5ff29220f4d0162000e0e0e0c00031214000100faff1215000100f7ff2b68012a2f2b020240004d0340000e0c00043b2d2b4d0435000e0e0c0004501218000100f9ff1219000100f5ff2922164d011a000e0e0e0c00032b3b2b4d060d000e0e0c0004503b271a420e0e0e|@275,I253,I107,I234,@271,@274,I106,I255,@102| 263:S31|426173696353747265616d494f28292e6f7574707574566563746f72283229 264:O3|@7131,@265,0 265:S12|436c6f73656453747265616d 266:S6|6f7574707574 267:O1|@268 268:C8,72|00832e37292308294d003c000e0c00024d0134000e0c0002031129352b353b3b0e4f0223005000026602182a35294d0316004d0412006a4d050d004d0609002b6a6410651f040e0e|@270,I105,I218,@269,@66,@266,@7106,@54| 269:C12,184|00807876353b56395648302a4d00a8000e0c0003566729334d019c000e0c00032968012e2d2b4d028e000e0e0e0c0004270656420e0c0002054600ff6d56112a354d0373004d046f000c000303032a0202020202292a353c4d055c000e0c000303064d065200020202020212292b4d0746006a4d0341004d083d002b6a646410292d4d0032000e0e0e0c000356272a2a4d0924000e0c00036503033b0212292d4d0014000e0c00030e4f0a0b0011000264420e0e0e0e0e0e|@272,I106,I107,@271,@7106,I251,I229,@64,@266,@54,I113,@269| 270:S27|426173696353747265616d494f28292e7772697465566563283429 271:O1|@273 272:S38|426173696353747265616d494f28292e7772697465566563283429666f7263654f7574283129 273:C11,224|00822b3b4d00d8000e0c000303562c4d01cd000e0e0c0002030c2c3b4d02c0000e0c000302013b03032c02054d03b000102e4d04aa000e0e0e0c00022a2a4d059e000e0e0e0c00030312292b4d0690000e0c00032b2a326a296502054d0780001065027a2b352e4d0475000e0e0c00022e4d016b000c0002030c2e3b4d0260000e0c000302013b03032e02054d035000102b4d014a000e0e0e0c0002030c2b3b4d023c000e0c000302013b03032b02054d032c00102a2a4d0825000e0e0c0003292d4d051a000e0e0e0c00036403082a2a336a296402054d090500102704440e|@62,I229,I105,I231,@61,I223,I248,I240,@61,I239,@61| 274:O1|@276 275:S46|426173696353747265616d494f28292e6f7574707574566563746f72283229616464566563546f42756666283129 276:C10,160|00822c352d360403002e2a4d0091000e0e0c00035029352a362b37334d0180000e0c0002030c333b4d0274000e0c000302013b03033302054d03640010292b4d045d000e0e0c000329314d0552000e0e0e0c00036403054d064500102c4d013f000c0002031a292c4d0434000e0c00032f2a2f4d072900220d0e0e7b050d00042b3f4d041a000e0e0e0c00032d2a312d2f4d080b00220f7b070d00060e0e0e0e|@277,@89,I105,I231,@61,I239,I249,@61,I254,I198| 277:S25|436861724172726179536c6963652e636f7079566563283329 278:C2,16|00802b56174d0007002d0e0e7e030003|@260,@259| 279:C2,16|00802b56174d0007002d0e0e7e030003|@260,@259| 280:O1|@281 281:C23,472|00823c28402f4d00ce010e0e0e0c00043c28403b4d00c0010e0c00043c28403b4d00b4010e0c00044d01ac01302d2d2d220c68063e324d029e010e0e0e0c00033c28403b4d0090010e0c00043c28403b4d0084010e0c00043c28403b4d0078010e0c00043c28403b4d006c010e0c00042d3c4d0362010e0e0e0c00032928404d0455014d0051010e0e0c0004293b314d0545010e0e0c0004504d063b012e2b31333168064d0730012d3332322f220d68073e22124d0220010e0c0003293c4d0316010e0e0e0c00032928403b4d0008010e0c0004293b2d4d05fd000e0e0c0004503c28403b4d00ef000c00043c28403b4d00e4000e0c00044d08dc002b2d2c6b4d09d4002c2e2d3268054d0aca00302e302f68054d0bc0002d30333168054d0cb6002b2f31220f31221468074d0da8002214220c220f2e33220c221d22162218221b221b2217680d4d0e8c0022122f220f22142f22152219220e2210680a4d0f76002a221f6a4d106e00220e2e2d222268053c28403b4d005e000e0e0e0c00044d115400221633221322182218221c2211221332680a4d123e002211313022252f221f221d2211221a22152217680c4d1325002f694d141f002c6922222b454d151500462c4732482f49304a2a4b2720440e0e0e0e0e0e0e|@283,I11,@284,I108,I106,@290,I255,@291,@295,@297,@301,@305,@309,@313,@320,@322,@324,@326,@328,@330,@332,@334,@282| 282:O1|@336 283:S28|5072657474795072696e7465722e7072657474795072696e74283329 284:C13,648|00812c354d0080024d017c020e0c00030a02000b023b0067015609293b4d0267020c0003293b4d035e020e0e0e0c000303054d0452021029365639293b2c4d0546020e0e0e0c0004503b270406cd2c362d373b5639293b4d022d020e0e0c0003293b4d0322020e0e0e0c0003030c3b0e0e4f06130250000206d5293529354d0706024d0102020e0e0e0c00030a01008000da0029365678293b4d02eb010c0003342a4d08e2010e0e0e0c000365035256785688293b4d02cf010c000329334d01c6010e0e0e0c00032c3b2b4d05b9010e0e0c00045033293b4d08ac010e0c000303033b0218282056d70c000250293c4d0195010e0e0c000325011e243b2705020b290e0e0e4f067f0170000264026656685678293b4d026f01020267010c000329324d0162010e0e0e0c00032c3b2b4d0555010e0e0c00045032293b4d0848010e0c000303033b021c282056c7020225000c000250293c4d012d010e0e0c000325011e283b2705020c2936290e4f0617017000026464270506cc2c362d375628293b4d0202010e0e0e0c00032f2a4d08f6000e0e0e0c00036503064d09e9000259562a563a293b4d02dd000e0e0c0003292e4d0ad2000e0e0e0c00032c3b2b4d05c5000e0e0c0004500402002e0316567a293b4d02b1000e0e0c00032b3b452a4626030212567a293b4d029b000c00032b3c452a46260329270556395649293b4d0284000e0c00032c2a692c3b2b4d0576000e0e0e0c0004503b270702662c365618293b4d0260000e0c00032e2a4d0b56000e0e0e0c00036503165618293b3b4d05440002023c000e0c0004503b51022b56185628293b4d022d000e0e0c000329304d0122000e0e0e0c00032c3b2b4d0515000e0e0c0004503b26052956272d7d050002430e0e0e|@286,-2,I107,I253,I229,@287,I255,@285,-1,I232,@214,I106,I233| 285:C6,136|0080570a5613292e4d007c000e0c00032b3b2b4d0171000e0e0c0004505738574b575a293b4d025f000c00032b2a4d0356000e0e0e0c00032d3b2b4d0149000e0e0c0004504057970e0c000250578a293b4d0233000c000329293b4d0429000e0e0c000303033b0218282057c70c000250293c4d0311000e0e0c000325011e253b270b420e0e0e0e|@289,I106,I255,I253,I107,I232| 286:S39|5072657474795072696e7465722e7072657474795072696e742833297072696e744f7574283229 287:O3|@7129,@237,@288 288:S32|706f705072696e74537461636b3a207072696e7420737461636b20656d707479 289:S52|5072657474795072696e7465722e7072657474795072696e742833297072696e744f75742832297573654e65774c696e65283129 290:O2|@219,0 291:C11,304|0082560b561b293b4d0024010e0c0003292f4d011a010e0e0e0c00032c3b2b4d020d010e0e0c00045056475657293b4d00fd000e0e0c0003293c4d01f2000e0e0e0c0003568a2a2a4d03e4000e0c0003293b4d04da000e0e0e0c000303033c02242a3b4d05c9000e0e0c00032a3b4d05be000e0e0e0c00032a2a4d04b2000e0e0e0c000365030329020a292b4d01a0000e0c00032f3b2b4d0295000e0e0c00045056b7293b4d0087000c000356d9293b4d007c000e0c00032b2a4d0672000e0e0e0c0003270403054d0764001056b856c7293b4d0059000e0e0c000322122212692a3b4d0849000e0e0c000303033c02182c3b4d0039000e0e0c00032b2a4d052e000e0e0e0c00036403054d092100102a3c4d011a000e0e0e0c00032d2a2c4d020d0022150e0e7b051500040e0e0e0e|@293,I253,I106,I255,I110,I229,I231,I113,@292,I234,@61| 292:O3|@7129,@237,@294 293:S38|5072657474795072696e7465722e7072657474795072696e74283329656e5175657565283329 294:S16|746f6b656e2071756575652066756c6c 295:C13,408|00805609293b4d008e010e0e0e0c0003293c4d0182010e0e0e0c0003563c2a2a4d0274010e0c0003293b4d036a010e0e0e0c000303033c02242a3b4d0459010e0e0c00032a3b4d044e010e0e0e0c00032a2a4d0342010e0e0e0c000365030329020a292b4d0130010e0c0003566b2a3b4d0524010e0c000303033c0218293b4d0015010e0e0c00032b2a4d040a010e0e0e0c00036403054d06fd00102a3c4d01f6000e0e0e0c00032a2a4d00ea000e0e0e0c0003296529352a36293b4d04d8000e0c0003033456aa293b4d00ca000e0e0e0c000356c9293b4d00bc000e0c00032b2a4d07b2000e0e0e0c000327044d08a6000e0e0e0c000202013b039756a9293b304d0992000e0e0e0c0004502b2b56d80c0003502b354d0a7d004d0b79000e0e0c00030a0100370008003b5002592b3656c756d7293b4d005d000e0e0c0003292d4d0152000e0e0e0c00032c3b2b4d0945000e0e0c0004503b2606022a56b756c7293b4d0030000e0c0003292e4d0126000e0e0e0c00032c3b2b4d0919000e0e0c0004503b26053b220c220e0e0e0e7d0e00023b270a42|@296,I253,I106,I110,I229,I231,I234,@61,I113,I218,I255,-2,I107| 296:S38|5072657474795072696e7465722e7072657474795072696e7428332964655175657565283129 297:C8,144|00805607293b4d0086000e0e0e0c00035629293b4d0078000e0c00032b2a4d016e000e0e0e0c0003270403054d0260001056085617293b4d0055000e0e0c0003293b4d034a000e0e0e0c000303033c02182b3b4d0039000e0e0c00032a2a4d042e000e0e0e0c00036403054d05210010293c4d061a000e0e0e0c00032c2a4d000e000e0e0e0c0003292705420e0e0e0e|@299,I253,I113,@298,I234,I231,@61,I106| 298:O3|@7129,@237,@300 299:S38|5072657474795072696e7465722e7072657474795072696e742833297363616e546f70283129 300:S34|5072657474795072696e7465722e7363616e546f703a20737461636b20656d707479 301:C11,256|008056075617293b4d00f4000e0c0003293c4d01ea000e0e0e0c0003564a2a2a4d02dc000e0c0003293b4d03d2000e0e0e0c000303033c02242a3b4d04c1000e0e0c00032a3b4d04b6000e0e0e0c00032a2a4d03aa000e0e0e0c000365030329020a292b4d0198000e0c00032f3b2b4d058d000e0e0c0004505677293b4d007f000c00035699293b4d0074000e0c00032b2a4d066a000e0e0e0c0003270403054d075c001056785687293b4d0051000e0e0c0003293b4d0846000e0e0e0c000303033c02182b3b4d0035000e0e0c00032a2a4d042a000e0e0e0c00036403054d091d0010293c4d0116000e0e0e0c00032c2a220f4d05080022100e7b050e0004|@303,I253,I106,I110,I229,I231,I255,I113,@302,I234,@61| 302:O3|@7129,@237,@304 303:S39|5072657474795072696e7465722e7072657474795072696e742833297363616e50757368283129 304:S34|5072657474795072696e7465722e7363616e507573683a20737461636b2066756c6c 305:C12,264|00805608293b4d00fe000e0e0e0c0003562a293b4d00f0000e0c00032b2a4d01e6000e0e0e0c0003270403054d02d8001056095618293b4d00cd000e0e0c0003293b4d03c2000e0e0e0c000303033c02182b3b4d00b1000e0e0c00032a2a4d04a6000e0e0e0c00036403054d05990010293c4d0692000e0e0e0c00032c2a4d0086000e0e0e0c0003296556485658293b4d0074000e0c0003293c4d076a000e0e0e0c000356872a2a4d085c000e0c0003293b4d0952000e0e0e0c000303033c02242a3b4d0441000e0e0c00032a3b4d0436000e0e0e0c00032a2a4d092a000e0e0e0c000365030329020a292b4d0618000e0c00032f3b2b4d0a0d000e0e0c00045030270b420e0e0e|@307,I253,I113,@306,I234,I231,@61,I106,I107,I110,I229,I255| 306:O3|@7129,@237,@308 307:S38|5072657474795072696e7465722e7072657474795072696e742833297363616e506f70283129 308:S20|7363616e506f703a20737461636b20656d707479 309:C11,264|0080560a293b4d00fe000e0e0e0c00035627293b4d00f0000e0c00032b2a4d01e6000e0e0e0c0003270403054d02d8001056075617293b4d00cd000e0e0c0003293c4d03c2000e0e0e0c000356492a2a4d04b4000e0c0003293b4d05aa000e0e0e0c000303033c02242a3b4d0699000e0e0c00032a3b4d068e000e0e0e0c00032a2a4d0582000e0e0e0c000365030329020a292b4d0370000e0c00032f3b2b4d0765000e0e0c00045056785687293b4d0055000e0e0c0003293b4d084a000e0e0e0c000303033c02182b3b4d0039000e0e0c00032a2a4d062e000e0e0e0c00036403054d09210010293c4d031a000e0e0e0c00032c2a4d000e000e0e0e0c000329270c420e0e0e0e|@311,I253,I113,@310,I106,I110,I229,I231,I255,I234,@61| 310:O3|@7129,@237,@312 311:S44|5072657474795072696e7465722e7072657474795072696e742833297363616e506f70426f74746f6d283129 312:S40|5072657474795072696e7465722e7363616e506f70426f74746f6d3a20737461636b20656d707479 313:C13,312|00803b3b3b4f002f0120000207d33b56370c0002563a2a3b4d011c010e0c000303033c0218293b4d020d010e0e0c00032b2a4d0302010e0e0e0c00036403054d04f500102a3c4d05ee000e0e0e0c00032a2a4d02e2000e0e0e0c00032965293529353c4d06d1000e0e0c000303ba566a2d3b4d01c2000e0e0e0c000303033c0218293b4d02b1000e0e0c00032e2a4d03a6000e0e0e0c00036403054d049900102d3c4d0592000e0e0e0c00032a2a4d0786004d0882000e0e0e0c0004513b0e0e0e4f007300700002030b3b310e0c0002501e1402023b505679293b4d025900020251000e0e0c00035698293b4d0248000e0c00032b2a4d093e000e0e0e0c000327044d0a32000e0e0e0c000203113b56870c00020e4f0b1f007000025002023b503b31337d0a00022c4f0b0b00600002270402013b65420e|@315,@316,I234,I253,I231,@61,I106,I229,@318,I255,I113,I218,@314| 314:C7,192|0080570a2c3b4d00b6000e0e0e0c000303033c0218293b4d01a5000e0e0c00032d2a4d029a000e0e0e0c00036403054d038d00102c3c4d0486000e0e0e0c00032a2a4d017a000e0e0e0c0003296529352a36574c293b4d0166000e0e0e0c00032b2a4d045a000e0e0e0c0003577a2e2b69343b4d0049000e0e0c000303033c02182a3b4d0139000e0e0c0003220c2a4d022d000e0e0c00036403054d03210010343c4d041a000e0e0e0c00032b2a2c4d050d00220f0e0e7b050d00040e0e0e0e|@319,I234,I253,I231,@61,I106,I255| 315:S43|5072657474795072696e7465722e7072657474795072696e74283329736574546f6b656e53697a65283129 316:C9,160|00805709293b4d0096000e0e0e0c00035728293b4d0088000e0c00032b2a4d017e000e0e0e0c0003270403033b026d570a3b572b0e0c0002293b4d0262000e0e0e0c000303033c02182a3b4d0051000e0e0c00032a2a4d0346000e0e0e0c00036403054d04390010293c4d0532000e0e0e0c00032b2a4d0026000e0e0e0c0003296529353b2a354d0615000e0e0c000327044d070a002c0e0e800002420e0e0e|@317,I253,I113,I234,I231,@61,I106,I229,I218| 317:S57|5072657474795072696e7465722e7072657474795072696e74283329736574546f6b656e53697a65283129746f704e6f74426567696e283129 318:O2|@219,1 319:S56|5072657474795072696e7465722e7072657474795072696e74283329736574546f6b656e53697a6528312961646a75737453697a65283129 320:C13,456|00802b4d00c1010e0e0c0002561c293b4d01b4010e0c0003563b293b4d01a8010e0c00032b2a4d029e010e0e0e0c0003270403104d0390012d69292b56472f0e7e0500034d0380012d69292b2c12060001000c000e0c00045012030001000b00293b4d0162010e0e0e0c000312050001000a00293b4d014f010c00032b2a4d0246010e0e0e0c000327044d043a010e0e0e0c00020377562f293b4d012a010e0e0e0c0003564e293b4d011c010e0c00032b2a4d0512010e0e0e0c0003567d293b4d0104010e0c00032b2a4d06fa000e0e0e0c000327070332562c293b4d01e8000e0c0003564b293b4d01dc000e0c00032b2a4d02d2000e0e0e0c000327044d04c6000e0e0e0c000202013b02013b03b33b563a0e0e0c000256392a3b4d07a8000e0c000303033c0218293b4d0199000e0e0c00032b2a4d088e000e0e0e0c00036403054d098100102a3c4d0a7a000e0e0e0c00032a2a4d016e000e0e0e0c00032965293556692a1be703692e3b4d0757000c000303033c02182a3b4d0149000e0e0c00032f2a4d083e000e0e0e0c00036403054d093100102e3c4d0a2a000e0e0e0c00032b2a2c4d0b1d000e0e0c0004513b56980e0c0002260706009bfe3b270602013b65420e0e|@321,I223,I253,I113,-2,I218,I107,I233,I234,I231,@61,I106,I255| 321:S40|5072657474795072696e7465722e7072657474795072696e74283329616464537472696e67283129 322:C6,176|0081560f293b4d00a6000e0e0e0c0003562e293b4d0098000e0c00032b2a4d018e000e0e0e0c000327040342560d293b3b4d027b000c0004505617293b3b4d026e000e0e0e0c000450562c293b3b4d025e000e0e0e0c000450563a293b3b4d024e000e0e0e0c0004503b260502023b503b561b0e0e0c0002504d0333002d2d6a561a293b4d0028000e0c0003644d041f000c00022a2a3056590c0004505627293b4d000b000c00036456382e7d060002|@323,I253,I113,I255,-1,I111| 323:S36|5072657474795072696e7465722e7072657474795072696e74283329627265616b283229 324:C2,32|00805608293c4d0016000e0e0e0c0003293b56472f0e0e0e7e0500030e0e0e0e|@325,I106| 325:S40|5072657474795072696e7465722e7072657474795072696e742833296c696e65427265616b283129 326:C2,48|0080560a293c4d0026000e0e0e0c0003293b56490e0c0003503b56380e0c0002503b56372e0e0e0e7d0500020e0e0e0e|@327,I106| 327:S40|5072657474795072696e7465722e7072657474795072696e74283329656e6453747265616d283129 328:C6,200|0081560f561f293b4d00bc000e0c0003293c4d01b2000e0e0e0c00032c3b2b4d02a5000e0e0c000450564e293b4d0097000c0003566d293b4d008c000e0c00032b2a4d0382000e0e0e0c000327040342564c293b3b4d026f000c0004505657293b3b4d0262000e0e0e0c000450566b293b3b4d0252000e0e0e0c000450567a293b3b4d0242000e0e0e0c0004503b260502023b503b31316a565a293b4d0028000e0c0003644d041f000c00022a2a3b56990c0004505667293b4d000b000c0003645678327d0a0002|@329,I253,I106,I255,I113,I111| 329:S41|5072657474795072696e7465722e7072657474795072696e74283329626567696e426c6f636b283229 330:C8,216|008012010001000b00293b4d00c9000e0e0c000312030001000a00293b4d00b7000c00032b2a4d01ae000e0e0e0c00032704030f4d02a0003b562c0e0e0c00035002264d0291004d038d003b563f0e0e0e0c000450560d293b4d007b000c000364561e0e0e0c000250560b561b293b4d0065000e0e0c0003293c4d045a000e0e0e0c00032c3b2b4d054d000e0e0c000450564b293b4d003f000c0003293b4d0136000e0e0e0c0003650329564a293c4d0625000e0e0c0003293b56890e0c0003503b56780e0c0002503b5677320e0e0e7d0900023b270442|@331,I253,I113,@219,-1,I107,I255,I106| 331:S39|5072657474795072696e7465722e7072657474795072696e74283329656e64426c6f636b283129 332:C1,16|00802b352c3656272d0e0e0e7e030003|@333| 333:S36|5072657474795072696e7465722e7072657474795072696e74283329627265616b283129 334:C1,16|00802b352c3656272d0e0e0e7e030003|@335| 335:S41|5072657474795072696e7465722e7072657474795072696e74283329626567696e426c6f636b283129 336:C1,8|00803b420e0e0e0e|@337| 337:S38|5072657474795072696e7465722e7072657474795072696e74283329656c6964696e67283129 338:O2|1,0 339:O2|@341,@340 340:O2|@439,@339 341:C103,2184|00813b3b3b3b30354d007c084d0178080e0c00030a16005107f0040107dd04ad0245057501fd0021046b006c048500ad0541042c079c002e006902a105790058041807f10730363023064d023a082a0e0e0c00025130384d032d082a0e0c000251293156770c00035030384d0419082a0e0c00025130373b2a320e0e7d0a000206dd2f384d0500082a310e0e7d0900022f384d06f2072a317d090002303631372a2a4d07e2070e0e0e4f08db078000046506d13036313732383223064d09c8072a0c0002512a33320e0c00035032354d0ab5072a0e0c00025129031b32384d0ba6072a0e0e0c00025132354d0c99072a0e0c00025102023b50282c2c28240e0e0e4f0d83079000045032373b2a340e0e7d0c00023036313732383223064d0e67072a0e0e0e0c00025132382c4d0f58074d1054070e0c00032b4d0f4b074d1047070c0003294d113f0769287b2a692c2a694d1233072a6927054d132b07020223070c00022a0c00025132354d1419072a0e0c0002512a33320e0c00035032373b2a340202fe060e0e7d0c000230363137323833392903064d15ed0602044d16e7062c4d17e2060e0e0e0c0002033c2b4d0fd5064d10d1060e0e0c00032e4d0fc7064d10c3060c00032b4d18bb06692a2a69282c2a692d2a694d19ac062a6927064d13a4060e0c0002028a2d3b4d1a98060e0c000303442b4d0f8d064d1089060e0e0c00032e4d1b7f060c0002294d0f77064d1073060c00032c4d1c6b06692a2a69282c2a692e2a694d1d5c062a6927074d1354060e0c0002023a2b4d0f49064d1045060e0e0c00032e4d0f3b064d1037060c00032b4d1e2f06692a2a69282c2a692d2a694d1f20062a6927064d1318060e0c0002220c382a2a220e0e7d0f000230363137294d0fff054d10fb050c00034d20f4052a4d21ef050c0003294d22e7054d21e3050c000334382a2a0e0c0002512d220c340c000350343828292a220d7d0e0002303629352a362b372c382d392e3a2f23063023072b4d23ab054d01a7050c00030a020018000c0012004d24970502104d169105020a4d258b0502044d268505221023064d277d052a0e0c0002512210384d2870052b4d216b050c00032928284d2161050e0e0c0003642a0e0e0e0c0002512210354d294c052a0c000251221038312a0e0e0e0c0002512210354d2a34052a0c0002512210382b3c4d2b26050e0e0e0c000303064d2c1a0502044d2d14054d2e10052a4d210b050c0003642a0e0e0e0c0002512210382c4d0ff7044d10f3040c00034d2fec042a4d21e7040c0003642a0e0e0e0c000251221038304d0fd3044d10cf040c00034d30c8042a4d21c3040c0003642a0e0e0e0c0002512210382e4d0faf044d10ab040c00034d31a4042a4d219f040c0003642a0e0e0e0c000251282c2f4d328c040e160d008604120000000004502210354d3378042a0c00025131221122100e0e0e0c0003502210384d3460042a0c0002512210373b2a22127d130002303630382a4d3547040c00024d3640042a4d213b040c0003642a320e7d0a00023036313732382b2b2b4d3723044f381f04a000056606cb3036283b2a4d3910040e4f0d0b047000046406d1303631373123064d3afa032a0e0e0c000251282c2a4d3bec030e4f0de7038000045031354d3cdd032a0e0c000251313828282a0e0e0e0c00025131354d3dc5032a0e0c0002512a32310e0c00035031354d3eb1032a0e0c000251313828292a0e0e0e0c00025131373b2a330e0e7d0b00023036282c2a4d3f8b034f0d87037000046406d430363023064d4078032a0c00025130384d416d0328284d2167030c00032a0c0002512931300e0c00035030354d4251032a020248030e0c000251303828292a0e0e0e0c00025130373b2a3202022e030e0e7d0a0002303631373123064d4321032a0e0c00025131384d4415032a0e0c0002512a32310e0c00035031384d4501032a0e0c00025131354d46f5022a0e0c0002512932310e0c000350313828292a0e0e0e0c00025131373b2a330e0e7d0b00022f384d47ca022a317d090002303629352a362b372c382d39220c23064d48b0022a0202a7020c000251220c382d4d0f9f024d109b020c00032f4d0f93024d108f020c0003294d49870269282d2a692c2a694d4a7b022a6927054d1373020c00022a0c0002512b220d220c0e0e0e0c000350220c3828292a0e0e0c000251220c354d4b4c022a0c000251220c3828282a0e0e0c000251220c354d4c34022a0c0002514d4d2b02220d220c6a4d4e22022a6929282c2e0e4f4f1702e00004502b354d230d024d2b09020e0e0c000303043b50024f220e354d50f7012a0e0e0e0c000251220e23064d51e7012a0e0e0e0c000251220e384d52d8012a0c000251220e354d53cc012a0c0002512b220f220e0e0e0e0c000350220e373b2a0e0e0e0c000251220e354d54a8012a0c000251220e384d559c014d5698014d2194010e0c000329287d4d2189010e0e0c0003642a0e0e0e0c000251220e373b2a22107d11000230364d576a012a4d5865010e0e4f0d5f017000046406d13036282c2a4d5950010e4f0d4b017000046406d3303630382a4d0f3c014d1038010e0c00034d5a30012a4d212b010c0003642a320e7d0a00023036313732383223064d5b13012a0e0e0e0c00025132382c4d0f04014d1000010e0c00034d5cf8002a4d21f3000c0003294d5deb004d21e7000c0003652a0e0e0e0c0002512933320e0c00035032354d5ecd002a0e0c0002513238282c2a0e0e0e0c00025132354d5fb5002a0e0c0002512a33320e0c00035032354d60a1002a0e0c000251323828292a0e0e0e0c00025132373b2a34020282000e0e7d0c0002303631373123064d6175002a02026c000e0c00025131382a4d0f64004d1060000e0c00034d6258002a4d2153000c0003294d634b004d2147000c0003652a0e0e0e0c00025131354d6435002a0e0c0002512a32310e0c00035031354d6521002a0e0c000251313828292a0e0e0e0c00025131373b2a330e0e7d0b00022704430e|@343,-11,I107,@344,@345,@346,@347,@348,@349,@350,@356,@342,@357,@342,@358,@338,-1,@364,@375,@377,@378,@338,@383,I48,I218,@384,@385,I234,I111,@384,@386,@384,@387,@388,@353,@351,-2,@389,@390,@391,@344,@392,@338,@338,I229,@218,@393,@394,@395,@396,@397,@398,@338,@399,@400,@413,@414,@415,@417,@356,@418,@342,@342,@342,@419,@344,@420,@342,@356,@421,@422,@338,@423,@344,@424,@425,@338,@338,@426,@428,@359,@338,@338,@430,@338,@338,@431,@432,@433,@434,@435,@436,@356,@437,@351,@342,@338,@342,@356,@438,@351,@342,@342| 342:O2|0,0 343:S22|42617365436f6465547265652e707265747479283229 344:O2|1,1 345:S7|474c4f42414c20 346:S11|20282a474c4f42414c2a29 347:S3|4e494c 348:S9|4d415443484641494c 349:S8|414c544d41544348 350:C6,136|008256072923064d007d002a0e0c000251561729382e28284d016c000e0c00032a0c0002515627302a56550e0e0c000350563729384d024f002a0e0e0e0c000251564729354d033f002a0e0e0e0c0002515657322a56850e0e0c000350566729354d0423002a0e0e0e0c0002515677293828292a0e0c000251568729373b2a220d0e0e0e7d0f0002|@352,@344,@353,@351,@342,@342| 351:S2|2c20 352:S34|42617365436f6465547265652e7072657474792832297072696e7444696164283329 353:O1|@354 354:C12,264|00812c4d0001010e0e0c00022c4d00f7000c00022a3b4d01ee000e0e0e0c000303032d06ca293b4d01dd000e0e0c000303032e02cf2a2a4d02cd000e0e0c00032928084d02c1000e0e0c0003293c4d03b6000e0e0e0c0003293f4d04aa000e0e0e0c000378760f3b2c28413b4d0598000e0c0004050800ff6d4d068b0010292e4d0784000e0c0003502f3c4d0179000e0e0c00030311293f220c4d086a000e0e0e0c000450020e333f2b3f334d0958000e0c0006502e3c4d014d000e0e0c000303193f304d0240000e0c00032a2a220c4d0834000e0c000451021a3f304d0227000c0003333f2c2c334d091b00020213000c000651294d0a0e000e0e0e0c00025029270565430e0e|@355,I223,I229,I239,I240,I241,I11,@87,I151,I254,I198,I47| 355:S4|5e283229 356:O2|3,0 357:S7|7b6561726c797d 358:C6,96|008256072923064d0055002a0e0c000251561729382e28284d0144000e0c00032a0c0002514d023700563556476a2931314f032b0051000450563729354d041f002a0e0e0e0c0002515647293828292a0e0c000251565729373b2a337d0c0002|@360,@344,@353,@361,@359,@342| 359:C6,136|00822b3b4d0080000e0c000303033b02752b36293b4d006f000c0003030a2c3529302e0e7d0700022c3556272923064d0155002a0e0c0002512a310e0e0c000250563729354d023f002a0e0e0e0c00025156472938322a0e0e0c000251565729373b2a0e0e0c000251566729354d0317002a0e0e0e0c0002513434310e4f0407009100042707440e|@363,I229,@342,@342,@338,@359| 360:S34|42617365436f6465547265652e7072657474792832297072696e744c697374283329 361:C1,16|008056082c2a56372e0e0e0e7e040003|@362| 362:S37|42617365436f6465547265652e7072657474792832297072696e744c697374283329283129 363:S30|42617365436f6465547265652e707265747479283229704c697374283329 364:O1|@365 365:C7,144|00812c3b4d0088000e0c0003034a2b4d017d004d0279000e0e0c00030a02000d0011000a00281002083d020528080201402d4d035a000e0e0e0c00023b2a2c4d044d000e0e0c0004287e2a692927044d053d002c7d0400022b4d0133004d022f000c00030a02000d0011000a00281002083d020528080201403b2e2b4d0410000e0c0004644d0507002c0e0e7d040002|@367,I234,-2,I107,I111,@368,@366| 366:O1|@373 367:S10|496e742e666d74283229 368:O1|@369 369:C9,192|00822c2c4d00b8000e0c000329404d01ae000e0e0e0c0003033128302a4d029f000c0003293b4d0196000e0e0e0c000303033c020b2928ff4d0384000e0c000303054d047a00102964023e28412a4d026e000e0e0e0c000329404d0562000e0e0e0c0003293b4d0156000e0e0e0c000303033c020b2928ff4d0344000e0c000303054d043a001029652e2e4d0131000e0e0c000303072930692964021b2e2e4d061d000e0e0c00032a3169292b314d070e00327b0509000465440e0e0e0e0e0e|@371,I110,I234,I106,I233,@370,I107,I109,@368| 370:O3|@7132,@372,0 371:S14|496e742e746f4368617273283329 372:S3|436872 373:C15,264|00802b3b4d0000010e0c000303064d01f60006cd2b353b2d293b4d00ea000e0e0e0c000303032a021629362b3c4d02d7000c0003292b25042504511e233b6565294d03c3000c0002030c293b4d04b8000e0c000302013b03032902054d05a80010293c4d00a1000e0e0c000303032b02932928084d0690000e0c0003293c4d0786000e0e0e0c0003293f4d087a000e0e0e0c000378760f3b2c28413b4d0968000e0c0004050800ff6d4d0a5b0010292e4d0b54000e0c0003503f33293b4d0047000c000303043b50022a29352a362d2d2c4d0c33000c0004502c3c4d062900020222000e0e0c0003292b2505250526031e35260351294d0d0e000e0e0e0c00025029270466420e0e|@374,I229,I48,I106,I105,I231,@87,I239,I240,I241,I11,@87,I151,I254,I47| 374:S31|4c696272617279537570706f72742e737472696e67496d706c6f6465283129 375:O2|@376,0 376:S8|20757365737d203d 377:S6|4445434c2023 378:O1|@379 379:C19,400|00802b3b4d0088010e0c000303064d017e0106cb2b36293b4d0074010e0c000303062c35296406cd2c3b2a3b4d0060010e0c000303032902282a352b362a4d024e010e0e0e0c00022c2a4d0342010e0e0e0c00032b2a2506250626041e323b270465290a0100e800ee00294d0421010e0e0c0002030c293b4d0514010e0c000302013b03032902054d060401102928084d07fc000e0c0003293c4d08f2000e0e0e0c0003293f4d09e6000e0e0e0c000378760f3b2c28413b4d0ad4000e0c0004050800ff6d4d0bc70010292e4d0cc0000e0c0003503f33293b4d00b3000202a9000c000303043b50025229352a362a4d029d00020292000e0e0c0002293c4d008e000e0e0e0c0003030d2e2e2d4d0d7f000c000450020e2b3f30302d4d0e70000e0c0006502d2a4d0765000e0e0c0003292c2506250626041e61260451294d0f4e000e0e0e0c000250292705023a4d013e0002342d293b4d0035000e0e0c000303054d102a001029354d0123002a4d111e000e0e0e0c0003030c2a36292503511e2b3b64020129656464420e0e0e0e0e|@381,I229,I48,I223,I106,I105,I231,@87,I239,I240,I241,I11,@87,I151,I254,I198,I47,@380,I24| 380:O3|103,@382,I48 381:S16|537472696e672e636f6e636174283129 382:S4|4661696c 383:S6|2c206c617374 384:O2|41,0 385:S5|434c4f5328 386:S6|504152414d28 387:S6|4c4f43414c28 388:S9|494e44495245435428 389:S10|4f4e4c59494e4c494e45 390:S6|494e4c494e45 391:S5|534d414c4c 392:S6|4c414d424441 393:S5|66616c7365 394:S3|434c3d 395:S4|2043523d 396:S5|204c45563d 397:S6|20415247533d 398:S6|20434c4f533d 399:S9|297b4c414d4244417d 400:O1|@401 401:C29,480|00802b4d00d9010e0e0c0002033e2b4d00cd010e0e0c000203032b02054d01bf0110293b4d02b8010e0c000303104d03ae012a4d04a9010e0e0c0003020129293c4d059b012f0e0e7e0500032b4d008f010c000203054d068601102b28662a4d077d010e0e0c000364035d3b291b00014d086c010e0c000303054d09620110294d0a5c010e0c00022d2a4d0b52010e0e0e0c000364031d294d0c44014d0540010e0c00034d0d38012a4d0e33012f0e0e7e050003293c4d0426010e0e0e0c000325011e563b6406cc2b4d0013010c000203054d0f0a01102b294d1003010c0002293e4d11fa000e0e0e0c0003293b4d0bee000e0e0e0c00036603442b4d00e0000e0c000203054d12d600102b4d13d0000e0c0002293b4d02c6000e0e0e0c000303104d03ba002a4d04b5000e0e0c0003020129293c4d14a7000c00036502013b03952b4d0099000e0e0c000203054d158e00102b293b4d1686000e0e0e0c0003294d007b000c00024d1774000e0c00020339294d0069000e0e0c000203054d185e001029294d1057000c0002293e4d114e00020245000e0e0e0c0003293d4d0b3e000e0e0e0c00036602013b032228692a4d072b000c00034d1924002a4d0e1f000c00032928294d0e1500317e0700034d1a0c006502044d1b0500420e0e0e0e|@403,I105,@404,I234,@190,I106,@364,@407,I150,I229,@409,I189,I251,-1,@411,@353,@407,I17,I243,@407,I15,I231,@407,I253,I218,@407,@412,@402,@402| 402:S6|3c6c6f6e673e 403:S28|42617365436f6465547265652e737472696e674f66576f7264283129 404:O3|@7133,@406,@405 405:S7|746f53686f7274 406:S4|43617374 407:O3|@7133,@406,@408 408:S9|746f41646472657373 409:O3|@7129,@237,@410 410:S17|556e6b6e6f776e2052545320656e747279 411:S4|20525453 412:S2|2028 413:S3|4c4954 414:S2|4946 415:C8,184|008356072923064d00ad002a0e0c000251561729382e28284d019c000e0c00032a0c0002515627312a56550e0e0c000350563729384d027f002a0e0e0e0c000251564729354d036f002a0e0e0e0c0002515657332a56850e0e0c000350566729384d0453002a0e0e0e0c000251567729354d0543002a0e0e0e0c0002515687220c2a56b50e0c000350569729354d0627002a0e0e0e0c00025156a7293828292a0e0c00025156b729373b2a22100e0e0e7d1300020e0e0e0e|@416,@344,@353,@351,@342,@351,@342,@342| 416:S35|42617365436f6465547265652e7072657474792832297072696e745472696164283429 417:S5|424c4f434b 418:S9|424547494e4c4f4f50 419:S4|4c4f4f50 420:S5|5241495345 421:S7|48414e444c4528 422:S4|57495448 423:S5|4c44455843 424:O2|40,0 425:S5|4341534520 426:C7,128|008156072923064d0075002a0e0c0002512c293b4d0168000e0c000303043b50024429352a36564729382c4d0251004d034d000e0e0c000329283a4d0441000e0e0c0003642a0e0e0e0c000251565729354d052b002a0e0e0e0c0002512b250526041e5026045056172e2a56480c000350562729373b2a307d0800020e0e0e0e|@427,@344,I229,-1,@364,@353,@338| 427:S25|42617365436f6465547265652e707265747479283229283229 428:C1,16|00802b352c3656272d0e0e0e7e030003|@429| 429:S25|42617365436f6465547265652e707265747479283229283129 430:S5|454c53453a 431:S3|29207b 432:S4|43415345 433:S5|20414e4420 434:S6|4d555455414c 435:S9|524543434f4e535452 436:S10|434f4e5441494e455220 437:S13|534554434f4e5441494e455228 438:S15|5455504c45434f4e5441494e455228 439:C7,160|00812b3828282a0e0e0c0002512c354d008d004d0189000e0e0c000303082c362937296502162c353c4d0173000c000303062c37296402042c362964292d56370e0c0003502c384d0255002a0e0c0002512c354d0349002a0e0c0002512d354d003d004d0139000e0e0c000303082d362939296502044d042600292e56470e0e0e0c0003502d354d0515002a0e0c0002512d3828292a2f0e7d0700020e0e0e0e|@441,-1,I229,@351,@338,@440,@338| 440:O1|-2 441:S28|42617365436f6465547265652e7072657474794f707456616c283229 442:O3|@7129,@237,@443 443:S21|6368616e67654c3a20556e6b6e6f776e20636f6465 444:C4,48|00802b3b4d0028000e0c000303033b021d2b352c3656272b2a4f0113004200032b4f020b004100022a2a69292706420e|@445,I229,@243,@444| 445:S11|4c6973742e6d6170283229 446:O1|@447 447:C2,8|00804d000200100e|@449,@448| 448:O3|@7129,@237,@450 449:S22|434f44455452454528292e6572726f72456e76283129 450:S9|6572726f7220656e76 451:C2,8|00804d000200100e|@449,@448| 452:O1|@475 453:O1|@7134 454:O5|0,@456,@467,@7136,@455 455:O2|-7,@468 456:O2|@457,@7135 457:C8,88|00802b352c362d37293b4d004a000e0e0e0c000303362b355647292b4d0138000e0c0003294d022f000c00024d0328000e0c000203062935296402054d041800102e2a4d051100347e0a00034d060800100e0e0e0e0e0e0e|@459,I229,@460,I105,I218,@235,@233,@458| 458:O3|@7129,@237,@463 459:S50|434f44455452454528292e67656e436f6465283229696e736572746564436f64652d6c6f6f6b75704f6c6441646472283129 460:O1|@461 461:C9,232|00812c35293b4d00de000e0e0e0c000329354d01d2004d02ce000e0e0e0c0003036a29362f362a3b4d00bc000e0c0003302a4d03b2000e0e0e0c00036403492f3b4d03a3000c000303033c02182a3b4d0095000e0e0c0003302a4d048a000e0e0e0c00036403054d057d00102f3c4d0676000e0e0e0c00032b2a4d006a000e0e0e0c0003296502012965025a29362f362a4d0753000c0002302a4d034a000e0e0e0c000364033d2f3b4d033b000c000303033c02182a4d072e000e0e0e0c0002302a4d0422000e0e0e0c00036403054d051500102a304d000e000e0e0e0c00032964020129656543|@462,I253,-1,I229,I234,I231,@61,I106,I15| 462:S19|5374726574636841727261792e737562283229 463:S36|6f75746572206c6576656c207265616368656420696e206c6f6f6b75704f6c6441646472 464:O1|@465 465:O2|0,@466 466:O10|0,0,0,0,0,0,0,0,0,0 467:O5|-5,1,1,0,0 468:O8|@469,@218,0,0,1,0,0,0 469:O4|4,@471,@470,1 470:O2|-3,I229 471:O2|@473,@472 472:O2|@474,0 473:O2|-3,1 474:O5|-5,-1,1,0,0 475:O2|0,@473 476:O2|@487,@486 477:C10,296|00832e2e2e6a2c0e0e0c00023b2a354d0015014d0111010e0e0c000303082a362939296502044d02fe0029354d03f8004d01f4000e0c000303064d04ea0002262b354d00e2004d01de000e0e0e0c000303082b362936296502044d05ca004d06c6002a2f6a642c354d00bc004d01b8000e0c000303082c362937296502162c353c4d01a3000c000303062c37296402042c3629640e4f078f004000022d354d0086004d0182000e0e0e0c000303082d362935296502132d353c4d016b000c000303062d36296402013b2e354d0059004d0155000e0e0c000303082e3629382965020e3c28403b4d083e000e0e0e0c00042a2d2d2c3168052e354d032b004d0127000c000303172b3b4d011c000e0c000303053b2d6902043c2c2e6a02064d0007002a6927081f040e|@479,-1,I229,@440,-2,@480,@482,@484,@478,I11| 478:C10,176|00802b354d00a8004d01a4000e0c0003032c2b3657172a4d0295000e0e0c000203032a02054d038700102a2a4d0480000e0c00034d0578002a692704026d2b3528064d016a000e0e0e0c0003035c2b362c372a0e0e4f06570021000229354d054e004d014a000e0e0e0c000303382936294d023b000c000203054d07320010292c4d022b000c000203032c02054d081f00102a2a4d0418000e0c00034d0510002a69270402012e6602012b420e0e0e0e|@485,-5,I229,I105,@404,I253,-3,@478,@407,@404| 479:S37|434f44455452454528292e67656e436f64652832292831296e6577456e7669726f6e283429 480:O1|@481 481:C2,8|00804d000200100e|@449,@448| 482:O1|@483 483:C2,8|00804d000200100e|@449,@448| 484:C1,24|00802b352c362d37563756482f0e0e7b060300050e0e0e0e|@226| 485:S44|434f44455452454528292e67656e436f64652832292831296e6577456e7669726f6e2834296c6f6f6b283129 486:O1|@488 487:O2|@486,1 488:C2,16|00803c2c4d0008002d0e0e0e7e030003|@218,I229| 489:O2|-3,@487 490:O2|@467,@491 491:O2|@473,0 492:O4|@393,@219,@493,@200 493:O2|-1,@494 494:O2|5,@7138 495:O5|0,@497,@516,@7142,@496 496:O2|10,@517 497:O3|@225,@499,@498 498:O2|@477,@512 499:O2|@229,@500 500:O3|@232,0,@501 501:O10|0,@503,@502,0,0,0,0,0,0,0 502:O1|@511 503:O1|@7139 504:O5|0,@506,@467,@7141,@505 505:O2|-7,@507 506:O2|@457,@7140 507:O8|@508,@393,0,0,1,0,0,0 508:O4|4,@509,@470,1 509:O2|@510,@472 510:O2|-3,0 511:O2|0,@510 512:O2|@514,@513 513:O1|@515 514:O2|@513,0 515:C2,16|00803b2c4d0008002d0e0e0e7e030003|@393,I229| 516:O2|-3,@514 517:O2|@467,@518 518:O2|@510,0 519:O2|@521,@520 520:O2|@522,0 521:S2|3e3d 522:O3|@7124,69,@523 523:O4|@521,-1,@199,@198 524:O2|@218,@525 525:O2|@526,0 526:O3|@7124,69,@216 527:O2|@529,@528 528:O2|@530,0 529:S3|65786e 530:O3|@7144,69,@531 531:O6|@529,0,0,0,@533,@532 532:O2|-1,@7145 533:O2|0,@534 534:O3|0,@214,0 535:O2|@537,@536 536:O2|@538,0 537:S3|636872 538:O3|@7124,69,@539 539:O4|@537,-1,@541,@540 540:O3|1,@545,@544 541:O2|-1,@542 542:O2|-7,@543 543:O8|@474,@537,0,0,1,0,0,0 544:O4|-3,0,@551,@7148 545:O4|-3,0,@546,@7146 546:S3|696e74 547:O6|@546,0,0,0,@549,@548 548:O2|-1,@7147 549:O2|0,@550 550:O3|1,@214,0 551:S6|737472696e67 552:O6|@551,0,0,0,@549,@553 553:O2|-1,@7149 554:O2|@556,@555 555:O2|@557,0 556:S2|3c3e 557:O3|@7124,69,@558 558:O4|@556,-1,@560,@559 559:O3|1,@561,@200 560:O2|-2,-3 561:O4|-2,1,@562,0 562:O2|@564,@563 563:O2|@566,0 564:O2|49,@565 565:O3|3,@7150,79996 566:O2|50,@565 567:O2|@569,@568 568:O2|@570,0 569:S3|616273 570:O3|@7124,69,@571 571:O4|@569,-1,@199,@572 572:O3|1,@205,@205 573:O2|@393,@574 574:O2|@575,0 575:O3|@7124,69,@492 576:O2|@578,@577 577:O2|@579,0 578:S6|506f6c794d4c 579:O3|@7151,69,@580 580:O3|@578,@582,@581 581:O4|@583,I48,0,0 582:O2|-1,@510 583:O4|-1,@7153,@7154,@7152 584:O2|@585,10 585:C2,16|00802b56174d0007002d0e0e7e030003|@188,@187| 586:O2|@5942,@5941 587:O2|@589,@588 588:O2|@590,0 589:S5|7072696e74 590:O3|@7124,69,@591 591:O4|@589,-1,@593,@592 592:O3|1,@594,@594 593:O2|-2,3 594:O3|3,@7156,79992 595:O2|@597,@596 596:O2|@598,0 597:S8|636f6d70696c6572 598:O3|@7124,69,@599 599:O4|@597,-1,@601,@600 600:O3|1,@5629,@5628 601:O2|-1,@602 602:O2|-3,@603 603:O2|@605,@604 604:O2|@608,@607 605:C1,16|00802b352c362d3756372e7b05030004|@606| 606:S27|434f4d50494c45525f424f445928292e636f6d70696c6572283129 607:O2|@729,@728 608:C24,392|0082040a002d2d2b4d007c010e0c00045029352a372b382c23062d23072e324d0165014d0261010e0e0c0003334d0357014d0253010c000378762b3b2d03184d04450156d722102213326805294d0537010c000264020d2e2211221056f70e0e0e0c000409d100ff6d29353c4d0618010e0c0003034c2f3b3b4d070b010c000450313b28204d07ff000c000450303b28394d07f3000c0004502e3b28444d07e7000c0004502d3b3b4d07dc000e0c0004504d08d3002b0e0e0e0c0002504d09c700100200293528674d06bc000e0c0003030b293728674d0aae002b6a10020029354d0ba3004d0c9f000c000303402937294d0d93004d0e8f000c00034d0f88002a4d1083000c0003294d117b004d1077000c000329404d106e000e0e0e0c00032f0c00025028674d0a5d002b6a100200294d125300020249000c000203054d1346001029293c4d143e000e0e0e0c00034d1534002a4d102f000c0003294d1627004d1023000c000329404d101a000e0e0e0c00032f0c00025028674d0a09002b6a102709440e0e0e|@610,@611,@7179,@623,@7180,@701,I30,I229,I255,@703,@64,@382,@7129,I251,@704,@720,@725,@353,@726,I105,@407,I253,@727,@609| 609:S36|20756e65787065637465646c7920726169736564207768696c6520636f6d70696c696e67 610:S27|434f4d50494c45525f424f445928292e636f6d70696c6572283329 611:O1|@612 612:C6,136|00822c4d0081004d017d000e0e0c00032d4d0273004d016f000c00033c284028204d0363000c00043c284028394d0357000c00043c28404d044d004d0349000e0e0c00043c28403b4d033c000e0c00043c284028444d032f000c00043c28403b4d0324000e0c0004332f452d462e472c483049220d4a2b4b2a4c312408220c24092708440e0e0e0e|@613,@7158,@623,@7157,I11,I48| 613:S17|4c45585f28292e696e697469616c283329 614:O2|@620,@7159 615:O2|@616,@7159 616:C2,32|00802b3556174d0016000e0e0e0c000303033c0202020202013b420e0e0e0e0e|@617,I251| 617:S19|556e6976657273616c2e746167283229283129 618:O2|@619,@7159 619:C1,16|008056072928452e6a64420e0e0e0e0e|@617| 620:C3,40|00802b3556174d001e000e0e0e0c000303062b3729640202020202054d01080010420e0e0e0e0e0e|@617,I251,@621| 621:O3|101,@622,0 622:S5|4d61746368 623:O2|@625,@624 624:O2|@630,@629 625:C5,168|00812b352d293b4d009d000e0e0c000303033b021a29352a362a2d0e0e0c000203052a68010207292503511e263b6564294d0173000c00024d026c000e0c0002030e29352e372a2a300e0e0e7d0800022d35563729293b4d004d000e0e0c000303033b021a29352a362a2e0e0e0c000203052a68010207292503511e263b6564294d0123000c00024d021c000e0c0002030e293531372a2a330e0e0e7d0b00024d030400100e0e0e|@627,I229,I105,I218,@626| 626:O3|@7129,@237,@628 627:S21|44656275672e676574506172616d65746572283229 628:S11|746167206d697373696e67 629:O2|@637,@636 630:O3|@7159,69,@631 631:O1|@632 632:C2,8|00804d000200100e|@634,@633| 633:O3|103,@382,@635 634:S18|44656275672e64656661756c74732d283129 635:S16|6572726f7220696e2070726f6772616d 636:O2|@641,@640 637:O3|@7160,69,@638 638:O1|@639 639:C1,8|00803b420e0e0e0e|@634| 640:O2|@645,@644 641:O3|@7161,69,@642 642:O1|@643 643:C1,8|00803b420e0e0e0e|@634| 644:O2|@647,@646 645:O3|@7162,69,I48 646:O2|@649,@648 647:O3|@7163,69,1 648:O2|@651,@650 649:O3|@7164,69,40 650:O2|@653,@652 651:O3|@7165,69,0 652:O2|@655,@654 653:O3|@7166,69,0 654:O2|@657,@656 655:O3|@7167,69,0 656:O2|@659,@658 657:O3|@7168,69,0 658:O2|@661,@660 659:O3|@7169,69,0 660:O2|@663,@662 661:O3|@7170,69,0 662:O2|@665,@664 663:O3|@7171,69,0 664:O2|@667,@666 665:O3|@7172,69,6 666:O2|@671,@670 667:O3|@7173,69,@668 668:O1|@669 669:C1,8|00803b420e0e0e0e|@634| 670:O2|@673,@672 671:O3|@7174,69,77 672:O2|@675,@674 673:O3|@7175,69,0 674:O2|@677,@676 675:O3|@7176,69,0 676:O2|@678,0 677:O3|@7177,69,0 678:O3|@7178,69,@679 679:O1|@680 680:C2,8|00804d000200100e|@634,@681| 681:O3|103,@382,@682 682:S9|4e6f2073747265616d 683:O2|@688,@7161 684:O2|@685,@7161 685:C2,32|00802b3556174d0016000e0e0e0c000303033c0202020202013b420e0e0e0e0e|@617,I251| 686:O2|@687,@7161 687:C1,16|008056072928452e6a64420e0e0e0e0e|@617| 688:C3,40|00802b3556174d001e000e0e0e0c000303062b3729640202020202054d01080010420e0e0e0e0e0e|@617,I251,@621| 689:O2|@694,@7175 690:O2|@691,@7175 691:C2,32|00802b3556174d0016000e0e0e0c000303033c0202020202013b420e0e0e0e0e|@617,I251| 692:O2|@693,@7175 693:C1,16|008056072928452e6a64420e0e0e0e0e|@617| 694:C3,40|00802b3556174d001e000e0e0e0c000303062b3729640202020202054d01080010420e0e0e0e0e0e|@617,I251,@621| 695:O2|@700,@7160 696:O2|@697,@7160 697:C2,32|00802b3556174d0016000e0e0e0c000303033c0202020202013b420e0e0e0e0e|@617,I251| 698:O2|@699,@7160 699:C1,16|008056072928452e6a64420e0e0e0e0e|@617| 700:C3,40|00802b3556174d001e000e0e0e0c000303062b3729640202020202054d01080010420e0e0e0e0e0e|@617,I251,@621| 701:C1,24|0080560a561956282b2b2b5667310e7b050600040e0e0e0e|@702| 702:S30|434f4d50494c45525f424f445928292e636f6d70696c6572283329283129 703:S24|436f6d70696c6174696f6e20696e7465727275707465640a 704:O1|@705 705:C21,272|00802b285c4d0007010c000303064d01fe0006da2b28224d00f5000e0e0c000303064d02ea0006dc28212c4d03e1000e0e0c0003030c2b287e4d03d3000c000302013b03033c020c2b28204d00c1000e0e0c000303032b02b12b28074d04b0000e0c00030a0600730079007f0085008f0095009b002b28204d0594000e0c0003033e2b28404d0687000c0003293b4d077e000e0e0e0c000303033c020b2928ff4d086c000e0c000303054d09620010294d0a5c002a4d0b57002f0e0e7e0500032b3e404d0c49000e0e0c0004285c2a4d0b3d002e7e04000302304d0d3200022a4d0e2c0002244d0f2600021e02021a004d101c0002144d111600020e4d1210000208020204004d130600420e0e0e0e0e|@707,I229,@708,@709,I248,I107,I250,I106,I234,I233,@370,@710,@353,@711,@714,@715,@716,@717,@718,@719,@706| 706:S2|5c72 707:S16|436861722e746f537472696e67283129 708:S2|5c5c 709:S2|5c22 710:S2|5c5e 711:O1|@712 712:C13,296|00822c3b4d0020010e0c000303064d01160106ce2c3c4d020e010e0e0e0c00032e3b4d0302010e0e0e0c00032d3b4d03f6000e0e0e0c00032a2a4d00ea000e0e0e0c0003030330023429031b2e3c4d02d6000e0e0e0c0003312a4d02ca000e0e0e0c00036402162e3c4d04bb000c0003312a4d02b2000e0e0e0c00036429304d05a5000e0e0c0003292e324d0699000e0e0c000433324d078e000e0e0e0c0003293b4d0082000e0e0e0c000303033c0224323b4d0371000e0e0c00032a3b4d0366000e0e0e0c00032a2a4d005a000e0e0e0c000365030329020e29334d044800020240000e0c00032928304d0439000e0e0c0003293b4d082e000e0e0e0c000303033c020b2928ff4d091c000e0c000303054d0a120010292d2a4d0b0a00220e7e0f0003440e0e0e|@713,I229,I48,I107,I231,I106,I109,@711,I110,I234,I233,@370,@353| 713:S18|436861722e6f6374496e7452657072283329 714:S2|5c61 715:S2|5c62 716:S2|5c74 717:S2|5c6e 718:S2|5c76 719:S2|5c66 720:O1|@721 721:C17,288|00812c4d0019010e0e0c0002293c4d010e010e0e0e0c0003030a2d2d2d0e0e0e7d0500023b3b292c4d02f4000e0c000303032a024b293c4d03e5000e0e0c00032a3f4d03da000e0e0e0c0003312a4d04ce000e0e0e0c000364300e0e0e0c00024d00bc000e0c00022c2a4d05b2000e0e0e0c0003292c2505250526031e563b6665294d069a000e0e0e0c0002030c293b4d078c000e0c000302013b03032902054d087c0010292c4d0275000e0e0c000303032f02632928084d0364000e0c0003293c4d095a000e0e0e0c0003293f4d0a4e000e0e0e0c000378760f3b2c28413b4d0b3c000e0c0004050800ff6d4d0c2f0010292e4d0d28000e0c0003503b3f3b0e4f0e1b00900003502a4d0f12000e0e0e0c0002502a270566430e0e0e0e0e0e|@723,I223,I229,I251,I239,I252,I106,I105,I231,@87,I240,I241,I11,@87,I151,@722,I47| 722:C9,160|008156042c2a4d0096000e0e0e0c00036403033b028856082c3f4d0182000e0e0e0c00032a2a4d0276000e0e0e0c00036556170e0e0c0002294d0363000c0002293c4d045a000e0e0e0c000303151203000100f8ff29302d4d0544000e0c00045102161203000100f8ff2b3f2b322e4d062d000e0e0c0006512d3c4d0121000e0e0c00032f2b4d0116000e0e0e0c0003292b0e0e0e4f0707005100032704430e|@724,I251,I239,I252,I223,I229,I254,I198,@722| 723:S19|537472696e672e746f537472696e6773283229 724:S31|537472696e672e746f537472696e6773283229636f7079546f4f7574283229 725:S26|457863657074696f6e2d20496e7465726e616c4572726f723a20 726:S23|20726169736564207768696c6520636f6d70696c696e67 727:S11|457863657074696f6e2d20 728:O3|@1050,@5626,@759 729:C41,1504|00822b4d00d9054d01d5050e0e0c00032c4d02cb054d01c7050c00032d4d03bf054d01bb050c00032e4d04b3054d01af050c00032f4d05a7054d01a3050c000331230a32230c33230e34230b220c2311220d231004040028073b4d0682050e0e0e0c000328083b4d0675050e0e0c000328093b4d0669050e0e0c0003280d3b4d065d050e0e0c00032d2a452b462c472d48502d372e38221635221736221837221938221a39221b3a221c2306221d2307221e2308221f23094d0724050e0c000b221737221823062a3b4d0813050c00032a3b4d080a050e0e0e0c00032928444d09fd040e0e0c00034d0af4040e0c000203032902012a294d0be5044d0ce1040e0e0c00032705030e22174d0dd2040e0e0e0c000202013b221837221923062a3b4d08bc040e0c00032a3b4d08b2040e0e0e0c00032928444d09a5040e0e0c00034d0a9c040e0c000203032902012a121a00010001002a2a4d0c85040e0e0c000327060364221835221936221a37221b38221c39221d3a221e2306221f230722202308222123094d0e56040e0e0e0c000b0330221835221936221a37221b38221c39221d3a221e2306221f230722202308222123094d0728040e0c000b504d0f1f04104d101a0406dd0403003b2a4d110f040c00035029362a374d12030422122b6a121900010001002c2b692a221f2b4d13ed030e0e0c000404020028073b4d06de030e0e0e0c000329220c4d14d1030e0e0c000328083b4d06c5030e0e0c000329220f4d14b9030e0e0c00032d2a452c46502d352e36292b4d15a4030e0c0003221f033c040700284d22242b4d1690030e0c00045029372a23062b4d1781032b0e0c000250220c1b10272b4d1871030e0e0c0004503b2c0e0e0c0002270402013b222835222936222a37222b38222c39222d3a222e2306222f23072230230822312309020232034d0e35030e0e0c000b0330222835222936222a37222b38222c39222d3a222e2306222f230722302308223123094d0708030e0c000b504d19ff02103b0403003b2a4d11f4020e0c00035029352a362b370403003b2a4d11e0020e0c00035029362a370403003b2a4d11ce020e0e0e0c00035029352a362b370403003b2a4d11b8020e0c00035029362a370403003b2a4d11a6020e0e0e0c00035029352a362b374d1a9502223122106a4d1b8c022231220e6a4d1c83022230346a4d1d7b022232326a4d1e730222312f6a2226342216221422282f33220d34221633220d680c222222422b4d1f51020e0e0c000422423522433622443722453822463922473a2248230622492307224a2308224b23094d0e26020e0e0e0c000b03033b020f221722113422454d2010020e0c000504020028073b4d0602020e0e0e0c00032922304d14f5010e0e0c000328083b4d06e9010e0e0c00032922334d14dd010e0e0c00032d2a452c46502d352e36292b4d15c8010e0c0003224b35224c36224d37224e38224f3922503a225123062252230722532308225423094d0e9e010e0e0e0c000b0330224b35224c36224d37224e38224f3922503a225123062252230722532308225423094d0770010e0c000b504d216701103b222d224d4d225d010e0e0c000304020028073b4d064e010e0e0e0c000329223a4d1441010e0e0c000328083b4d0635010e0e0c000329223d4d1429010e0e0c00032d2a452c46502d352e36292b4d1514010e0c0003225535225636225737225838225939225a3a225b2306225c2307225d2308225e23094d0eea000e0e0e0c000b0330225535225636225737225838225939225a3a225b2306225c2307225d2308225e23094d07bc000e0c000b504d23b300103b224f0339040700284d22532b4d16a1000e0e0c00045029372a23062b4d2491002b0e0c000250220d2a4d2584000e0c0003503b2c0e0e0c0002270402013b3322564d266c000e0c000304020028073b4d065e000e0e0e0c00032922454d1451000e0e0c000328083b4d0645000e0e0c00032922484d1439000e0e0c00032d2a452c46502d352e36292b4d1524000e0c00034d271c002a220d2218223d22602260224822102260680a27482714440e0e0e0e|@731,@7180,@623,@7181,@7182,@7183,@7184,I94,@756,I253,I113,I218,@759,@762,@765,@956,@959,@961,@965,@978,@980,I107,I106,@280,@342,@1666,@959,@1878,@1879,@1880,@1881,@1882,@1883,@4619,@4653,@4655,@5515,@342,@339,@3083,@730| 730:C9,520|0080560f04040028073b4d00fa010e0e0e0c000328083b4d00ed010e0e0c000328093b4d00e1010e0e0c0003280d3b4d00d5010e0e0c00032d2a452b462c472d48502d372e38303b4d01bc010e0c00034d02b4010e0c0002030c304d03a9010e0e0c000202013b78760c3b3b56de0e0e0e0c000205ce00ff6d323b4d0189010e0e0c00034d0280010e0c0002030c3b4d0375010e0e0c000202013b04020028073b4d0063010c0003292f4d045a010e0e0e0c000328083b4d004d010e0e0c000329324d0442010e0e0e0c00032d2a452c46502d352e36292b4d052c010e0c000322123b4d0121010e0e0c00034d0218010e0c0002030c3b4d030d010e0e0c000202013b12150001000600033412150001000500121600010004001217000100030012180001000200121900010001002c2c2c2c33324d06cf000c0007260602023b503310323b4d01be000e0e0e0c00034d02b4000e0c0002030c3b4d03a9000e0e0c000202013b04020028073b4d0097000c0003292f4d048e000e0e0e0c000328083b4d0081000e0e0c000329324d0476000e0e0e0c00032d2a452c46502d352e36292b4d0560000e0c000312140001000700040600342b2b4d074b000c00045029121700010006000335121700010005001218000100040012190001000300121a0001000200121b00010001002c2c2c2c220c324d060f000c0007260602023b50292716420e0e|@964,I94,I113,I218,I88,I107,I106,@5518,@5517| 731:S31|434f4d50494c45525f424f445928292e62617365436f6d70696c6572283329 732:O2|@737,@7170 733:O2|@734,@7170 734:C2,32|00802b3556174d0016000e0e0e0c000303033c0202020202013b420e0e0e0e0e|@617,I251| 735:O2|@736,@7170 736:C1,16|008056072928452e6a64420e0e0e0e0e|@617| 737:C3,40|00802b3556174d001e000e0e0e0c000303062b3729640202020202054d01080010420e0e0e0e0e0e|@617,I251,@621| 738:O2|@743,@7166 739:O2|@740,@7166 740:C2,32|00802b3556174d0016000e0e0e0c000303033c0202020202013b420e0e0e0e0e|@617,I251| 741:O2|@742,@7166 742:C1,16|008056072928452e6a64420e0e0e0e0e|@617| 743:C3,40|00802b3556174d001e000e0e0e0c000303062b3729640202020202054d01080010420e0e0e0e0e0e|@617,I251,@621| 744:O2|@749,@7165 745:O2|@746,@7165 746:C2,32|00802b3556174d0016000e0e0e0c000303033c0202020202013b420e0e0e0e0e|@617,I251| 747:O2|@748,@7165 748:C1,16|008056072928452e6a64420e0e0e0e0e|@617| 749:C3,40|00802b3556174d001e000e0e0e0c000303062b3729640202020202054d01080010420e0e0e0e0e0e|@617,I251,@621| 750:O2|@755,@7171 751:O2|@752,@7171 752:C2,32|00802b3556174d0016000e0e0e0c000303033c0202020202013b420e0e0e0e0e|@617,I251| 753:O2|@754,@7171 754:C1,16|008056072928452e6a64420e0e0e0e0e|@617| 755:C3,40|00802b3556174d001e000e0e0e0c000303062b3729640202020202054d01080010420e0e0e0e0e0e|@617,I251,@621| 756:O1|@757 757:C2,16|0089313b3b4d0007000c0004503b1f0a|@758,I255| 758:S21|4c45585f28292e72657365744c6578616e28313029 759:O1|@760 760:C2,16|00802b28394d0007002d0e0e7e030003|@761,I113| 761:S15|496e745365742e6d6b283129283129 762:O1|@763 763:C1,16|00812c2c2c0e0e0e7d0400020e0e0e0e|@764| 764:S19|53594d5f53455428292e696e73696465283229 765:O2|@767,@766 766:O4|@781,@833,@834,@780 767:C8,176|00802b372c2306293b4d00a3000c00032928444d0199000e0e0c00034d0290000e0c0002640311293b28444d0381000e0e0c0004503b02702a3b4d0072000e0e0e0c0003293b4d0166000e0e0e0c000364033b2d393b2a0e0e0c00024d0450002a3c323533363437220c38220d39220e3a220f23062210230722112308221223094d052b000c000e504d062300103b502a3b28444d0318000e0c0004502d56372e0e0e0e7d05000265420e0e0e0e0e0e|@769,I253,I113,I218,I255,@770,@774,@768| 768:O3|@7129,@237,@779 769:S18|4c45585f28292e696e73796d626f6c283129 770:O1|@771 771:C2,16|00802b384d0008002a2d0e0e7d040002|@773,@772| 772:S34|756e657870656374656420656e64206f662066696c6520656e636f756e7465726564 773:S25|4c45585f28292e6572726f724d657373616765283329283129 774:O1|@775 775:C9,168|008c3c28403b4d009e000e0e0e0c00044d0194002a69040700284d2b2b4d0287000c00045029372a23062b22120312220e3b3c4d0371000e0e0c0004503b5002023b504d0461002b0e0c0002502922150e0c0002503b2c0e0e0c0002502e3b4d0545000e0e0c0003293b2a3b4d0638000e0c000303032902132a352b362a2c692a2a2505250526031e1e3b66664d0717000c000229221422166a6433320e0e0e7d1500020e0e0e0e|@777,I11,@776,@280,I255,@342,I253,I229,@378| 776:C3,40|008056075617293b4d001c000e0c00032e2a692c3b2b4d010e000e0e0e0c0004503b2704420e0e0e|@778,I253,I255| 777:S17|4c45585f28292e657750726f6328313329 778:S27|4c45585f28292e657750726f6328313329707072696e742d283129 779:S11|656e64206f662066696c65 780:O2|@942,@7189 781:C26,1704|00802b352c362d372e4d009b060c000229287e4d0191060e0e0c000303952f353036313732383339343a220c2306220d2307220e2308220f23094d026a060e0e0e0c000b502c3b4d035d060e0e0c000328302a4d0451060e0e0c0003030c2928394d0443060c000302013b6403342f4d0535060e0e0c0002502b3b4d0329060e0e0c0003287e2a4d061d060e0e0c00032d3b2b4d0711060e0e0c0004503b2603020f5648287e2a3256870e0e0e0c00045106d72928234d01ee050e0e0e0c000303692f353036313732383339343a220c2306220d2307220e2308220f23094d02c6050e0e0e0c000b502c3b4d03b9050e0e0c00032928224d01ad050e0e0c000364031a2f56590e0e0e0c0002502a3b28434d0793050c0004503b50020c564828232a3256870c00045106d22928224d0176050e0e0e0c000303172f56590c0002502a3b283f4d075f050c0004503b5006d729283b4d0150050e0c000303232a3b28394d0742050e0e0e0c0004502f35293b28204d0731050e0e0c0004503b5106cb29282c4d0120050202f4040e0c000303232a3b28384d070e050e0e0e0c0004502f35293b28204d07fd040e0e0c0004503b5106cb2928284d01ec040e0c000303712f353036313732383339343a220c2306220d2307220e2308220f23094d02c6040e0e0e0c000b502c3b4d03b9040e0e0c000329282a4d01ad04020281040e0e0c0003644d089f040c000203132a3b28344d0792040e0e0e0c0004503b5002102f4d098204020256040e0e0e0c00025006d32928294d016e040e0e0e0c000303272a3b28354d075e04020232040e0e0e0c0004502f35293b28204d0749040e0e0c0004503b5106d129285b4d0138040e0c000303272a3b28364d072a040202fe030e0e0e0c0004502f35293b28204d0715040e0e0c0004503b5106d129285d4d0104040e0c000303232a3b28374d07f6030e0e0e0c0004502f35293b28204d07e5030e0e0c0004503b5106cb29285f4d01d4030e0c000303232a3b28334d07c6030e0e0e0c0004502f35293b28204d07b5030e0e0c0004503b5106cb29287b4d01a403020278030e0c000303232a3b283a4d0792030e0e0e0c0004502f35293b28204d0781030e0e0c0004503b5106dc29287d4d017003020244030e0c000303232a3b283b4d075e030e0e0e0c0004502f35293b28204d074d030e0e0c0004503b5106dd29282e4d013c03020210030e0c000307d42f353036313732383339343a220c2306220d2307220e2308220f23094d0212030202e6020e0e0e0c000b502c3b4d0301030e0e0c000329282e4d01f5020e0e0c0003644d08eb020c000203622f393b2a0202b6020e0e0e0c00022e3b4d03d2020e0e0e0c00034d0ac8022a4d06c3020c00034d0bbc022a69292d3c220e35220f3622103722113822123922133a22142306221523070202710222162308221723094d0c8d020e0e0c000e260602c72f353036313732383339343a220c2306220d2307220e2308220f230902023c024d0260020202a1000e0c000b502c3b4d0351020e0e0c000329282e4d0145020e0e0c0003644d083b020c0002035a2f393b2a0e0e0e0c00022e3b4d0326020e0e0e0c00034d0d1c022a4d0617020c00034d0e10022a69292d3c220e35220f3622103722113822123922133a221423062215230722162308221723094d0ce5010e0e0c000e2606021f2a3b283d4d07d4010e0c0004502f35293b28204d07c5010e0e0c0004503b5106cb293f4d01b5010e0e0c0003030f2a3b3b4d07a7010c0004503b5006cb28302a4d0498010e0c0003030c2928394d048b010c000302013b030e2f4d057e010e0e0e0c00025006d028412a4d046e010e0e0e0c0003030c29285a4d045f010c000302013b03033c021b28612a4d044d010e0e0c0003030c29287a4d043f010c000302013b03033c020c2928274d012d010e0e0c000303114d0f22014d101e013156770c00045006d22814293b4d010d010e0e0c000303033b024f293c4d11fd000e0e0c0003293f4d12f2000202c6000e0e0e0c00034d13e4002a4d14df000c0003292e4d01d6000202aa000e0e0e0c00036603033c0212293c4d11c0000e0c0003292502501e5b3b6464031456484d0fab002a32568702027b000c0004510275294d1598000e0c000230393b2a0e0c00024d1688002c4d0683000c00032928224d0679000e0e0c00034d1770002a69292d3c220f3522103622113722123822133922143a221523062216230722172308221823094d0c4500020219000e0e0c000e50220c35293b28204d0730000e0c0004503b26082a3b4d0322000e0e0e0c00032928444d1815000e0e0c00036403092f2e300e0e7d0700023b270442|@783,@784,I229,@786,I253,I248,@790,@353,I255,I218,@815,@824,@825,@774,@826,@827,I48,@828,I240,I239,@831,I252,@704,@832,@782,I113| 782:C1,16|00802b3856172a2d7d0400020e0e0e0e|@773| 783:S20|4c45585f28292e7061727365546f6b656e283129 784:O1|@785 785:C6,112|00802b35293b4d0066000e0e0e0c000328092a4d0159000e0e0c0003030c29280d4d014b000c000302013b03033c020c2928204d0239000e0e0c0003032e2d352e362f3730383139323a332306342307220c2308220d23094d0314000e0c000b502d4d040a002e0e7d0500022965420e|@787,I253,I248,I229,@786,@784| 786:O1|@788 787:S24|4c45585f28292e736b697057686974655370616365283129 788:C6,112|00892d3b4d0068000e0c0003293b4d015e000e0e0e0c0003032f3b310e0c0002294d024b000c00024d0344000e0c000203062935296402013f220e3b2b4d042f000c0004503b65021e29352a36303b2b4d041c000e0c000450220e3b2c4d040f000c0004503b65641f0a0e0e0e0e0e0e|@789,I253,I229,I105,I218,I255| 789:S17|4c45585f28292e6e657874436828313029 790:O1|@791 791:C26,1952|00802b352c362d372e23072a3b28404d008d070e0e0c0004504d0183074d027f07314d037a070e0e0e0c00042c3b2b4d006d070e0e0c0004502d3b4d0461070e0e0c00032928774d0555070e0e0c00036403182c3b4d0447070c00032928304d063d070e0e0c00036402013b07cb2b3b28424d002a070e0e0e0c00045030353136323733383439220c3a220d2306220e2307220f2308221023094d0702070e0e0e0c000b502d3b4d04f5060e0e0c00032928784d05e9060e0e0c00036407d430353136323733383439220c3a220d2306220e2307220f2308221023094d07c0060e0c000b502d3b4d04b5060e0e0c000328302a4d08a9060e0e0c0003030c2928394d089b060c000302013b03033c023f28612a4d0889060e0e0c0003030c2928664d087b060c000302013b03033c021f28412a4d08690602026b010e0e0c0003030c2928464d0857060c000302013b6403234d094a064d0a4606324d0341060e0e0c00042d3b2b4d0035060e0e0c0004503b64027330393b2a0c00022e3b4d041e060e0e0e0c00034d0b14062a4d0c0f06020255000c0003313b4d0402060e0e0e0c00032a2a4d0cf6050e0e0e0c00034d0dec052a69292f3c22113522123622133722143822153922163a221723062218230722192308221a23094d0ec105221b0e0e7b0f0f000e02ba2d3b4d04b0050e0c000328302a4d08a5050e0e0c0003030c2928394d0897050c000302013b6403234d0f8a054d028605324d0381050e0e0c00042d3b2b4d0075050e0e0c0004503b64026f30393b2a0c00022e3b4d045e050e0e0e0c00034d1054052a4d0c4f050c0003313b4d0446050e0e0e0c00032a2a4d0c3a050e0e0e0c00034d1130052a69292f3c22113522123622133722143822153922163a221723062218230722192308221a23094d0e0505221b0e0e7b0f0f000e06d32d3b4d04f4040e0c00032928784d05e9040e0e0c00036403182c3b4d04db040c00032928304d06d1040e0e0c00036402013b07d530353136323733383439220c3a220d2306220e2307220f2308221023094d07a5040e0e0c000b502d3b4d0499040e0e0c000328302a4d088d040e0e0c0003030c2928394d087f040c000302013b03033c023b28612a4d086d040e0e0c0003030c2928664d085f040c000302013b03033c021b28412a4d084d040e0e0c0003030c2928464d083f040c000302013b6403274d1232044d0a2e04324d03290402021b040e0e0c00042d3b2b4d0019040e0e0c0004503b64027330393b2a0c00022e3b4d0402040e0e0e0c00034d13f8032a4d0cf303020255000c0003313b4d04e6030e0e0e0c00032a2a4d0cda030e0e0e0c00034d14d0032a69292f3c22113522123622133722143822153922163a221723062218230722192308221a23094d0ea503221b0e0e7b0f0f000e06cb2d3b4d0494030e0c000329282e4d0589030e0e0c00036403033c02332d3b4d0478030e0c00032928454d056d030e0e0c00036403033c02172d3b4d045c030e0c00032928654d0551030e0e0c00036407d12d3b4d0443030c000329282e4d0539030e0e0c00036407dd2b3b28414d0029030e0e0c0004502c3b4d041d030e0e0c000329282e4d0c11030e0e0c00032e3b2b4d0005030e0e0c000450323533363437220c38220d39220e3a220f23062210230722112308221223094d07dc020e0c000b502f3b4d04d1020202c3020e0e0c000328302a4d08c1020e0e0c0003030c2928394d08b3020c000302013b644d15a8020e0c0002037a32393b2a0e0e0e0c0002303b4d0492020e0e0e0c00034d1688022a4d0c83020c0003333b4d047a0202026b020e0e0e0c00032a2a4d0c6a020e0e0e0c00034d1760022a69292f3c2213352214020259003622153722163822173922183a22192306221a2307221b2308221c23094d0e31020e0e0c000e2608022c2e3b4d0422020e0e0e0c0003294d021702220c4d0311020e0e0c0004303b2b4d0005020e0e0c0004503b26035102023b502d3b4d04f1010e0e0c00032928454d05e5010e0e0c00036403033c02172d3b4d04d4010e0c00032928654d05c9010e0e0c00036407ce2d3b4d04bb010c00033135323633373438220c39220d3a220e2306220f230722102308221123094d0796010e0e0e0c000b502e3b4d0489010e0e0c000329287e4d057d010e0e0c00036403ca3135323633373438220c39220d3a220e2306220f230722102308221123094d0753010c000b502e3b4d0449010e0e0c000328302a4d083d010e0e0c0003030c2928394d082f010c000302013b64034b2c3b28414d001e010e0e0e0c0004502d3b4d0411010e0e0c0003294d1807014d0c03010c0003294d02fb00220c4d03f5000202e3000e0e0c0004303b2b4d00e5000e0e0c0004503b66022e2e3b4d04d5000e0e0c0003293b69287e2a692e3b2b4d00c2000e0e0e0c000450313b2e4d00b4000e0c0004503b66029a2e3b4d04a5000e0e0c000328302a4d0899000e0e0c0003030c2928394d088b000c000302013b6403472c3b28414d007a000e0e0e0c0004502d3b4d046d000e0e0c00032928454d0c61000e0e0c0003294d025700220c4d0351000e0e0c0004303b2b4d0045000e0e0c0004503b66022a2e3b4d0435000e0e0c0003293b692d3b2b4d0026000e0e0e0c000450303b2d4d0018000e0c0004503b656402013b02013b2705420e0e0e0e0e0e0e|@793,I255,I48,@794,@797,I253,I229,I24,@786,I248,@802,@803,@806,@353,@807,@774,@808,@806,@809,@810,@811,@812,I218,@813,@814,@792| 792:S2|457e 793:S21|4c45585f28292e70617273654e756d626572283129 794:O1|@795 795:C2,32|008028302c4d0017000c0003030e2b28394d000b002d0e0e7e0300033b420e0e|@796,I248| 796:S15|436861722e69734469676974283129 797:O1|@798 798:C3,32|00822b353b3b0e0e0e4f001300200002302a6929654d0107002e0e0e7d070002|@800,@799,@378| 799:C4,88|00805604293b4d004e000e0e0e0c00032956380e0e0c00020335562729352a362b372c382d392e3a2f23063023073123083223094d0120000e0c000b503b0e0e0e4f0213003100022b2a69296602013b65420e0e0e0e0e0e|@801,I253,@786,@799| 800:S19|4c45585f28292e726561644368617273283329 801:S26|4c45585f28292e7265616443686172732833296c6f6f70283129 802:S3|307778 803:O1|@804 804:C2,96|008028302c4d0057000c0003030c2b28394d004b000c000302013b03033c023d28612c4d0039000e0e0c0003030c2b28664d002b000c000302013b03033c021d28412c4d0019000e0e0c0003030e2b28464d000b002d0e0e7e0300033b420e0e|@805,I248| 805:S18|436861722e69734865784469676974283129 806:S25|6d616c666f726d656420776f726420636f6e7374616e743a20 807:C1,16|00802b3856172a2d7d0400020e0e0e0e|@773| 808:S2|3077 809:C1,16|00802b3856172a2d7d0400020e0e0e0e|@773| 810:S2|3078 811:S28|6d616c666f726d656420696e746567657220636f6e7374616e743a20 812:C1,16|00802b3856172a2d7d0400020e0e0e0e|@773| 813:S23|6d616c666f726d6564207265616c206e756d6265723a20 814:C1,16|00802b3856172a2d7d0400020e0e0e0e|@773| 815:O1|@816 816:C3,40|00802b352c3a3b3b0e4f001b003000022c3b2b4d0111000e0e0c0004503b2704420e0e0e0e0e0e0e|@818,@817,I255| 817:C4,64|0080560729393b2a0e0c00023b3b56530e0c0002294d0027000c00024d0120000e0c000203062935296402013f640e0e0e4f020b004000022704420e0e0e0e0e|@820,I105,I218,@819| 818:S22|4c45585f28292e7061727365436f6d6d656e74283129 819:C12,296|00802b3f4d0020010e0c000303705707571729393b2a0e0e0e0c00025642294d0105014d0201010e0e0c00034d03f8002a4d04f3000c00032928294d04e9000e0e0c00034d05e0002a69292f3c3435220c36220d37220e38220f3922103a221123062212230722132308221423094d06b6000e0e0e0c000e5034270902a73b57130c0002294d079f000c00024d0898000e0c000203062935296402013f2d282a4d0084000e0c000303382928294d0077000c000303223b57330c0002294d0767000c00024d0860000e0c000203062935296402013f640208294f094b0021000202422d28284d003f000c0003032c29282a4d0033000c000303143b0e0e4f0a27002200020e4f091f00210002020a290e0e4f091300210002020a290e0e4f09070021000265420e0e|@822,I229,-1,@364,@823,@353,@821,@774,I105,I218,@819,@817| 820:S36|4c45585f28292e7061727365436f6d6d656e74283129736b6970436f6d6d656e74283129 821:C1,16|00802b3856172a2d7d0400020e0e0e0e|@773| 822:S54|4c45585f28292e7061727365436f6d6d656e74283129736b6970436f6d6d656e74283129736b6970436f6d6d656e74426f6479283129 823:S45|656e64206f662066696c6520666f756e6420696e20636f6d6d656e742028737461727473206174206c696e6520 824:S16|756e6b6e6f776e2073796d626f6c202e 825:C1,16|00802b3856172a2d7d0400020e0e0e0e|@773| 826:S17|756e6b6e6f776e2073796d626f6c202e2e 827:C1,16|00802b3856172a2d7d0400020e0e0e0e|@773| 828:O1|@829 829:C3,136|008028412c4d007f000c0003030c2b285a4d0073000c000302013b03033c021b28612c4d0061000e0e0c0003030c2b287a4d0053000c000302013b03033c021b28302c4d0041000e0e0c0003030c2b28394d0033000c000302013b03033c02202b28274d0121000e0e0c000303033c020f2b285f4d0110002d0e0e0e7e030003420e0e0e0e0e0e0e|@830,I248,I229| 830:S24|4c45585f28292e6973416c7068614e756d65726963283129 831:S20|3a3d3c3e2b2a215e2f7c26257e2d3f60405c2423 832:S19|756e6b6e6f776e206368617261637465722022 833:O2|@835,@834 834:O1|@940 835:C25,576|00822b352c362d373030304d0031020e0e0c00042c3b4d0126020e0e0e0c000329282e4d0219020e0e0c00036407d72f353036313732383339343a220c2306220d2307220e2308220f23094d03f1010e0e0c000b2d3b4d01e6010e0e0e0c000328412a4d04d9010e0e0c0003030c29285a4d04cb010c000302013b03033c021b28612a4d04b9010e0e0c0003030c29287a4d04ab010c000302013b031b2b282e4d059c010e0c0003294d0693013433220c0e0e7b050c00042814293b4d0280010e0c000303033b024b293c4d0771010e0e0c0003293f4d0866010e0e0e0c00034d095c012a4d0a57010c0003292e4d024e010e0e0e0c00036603033c0216293c4d073c0102028c000e0c0003292502501e563b6464031956672c282e4d0520010e0c0003292b220c34220d7b050d000431393b2a0e0c00024d0b04012e4d05ff000c000329282e4d05f5000e0e0c0003292e4d05ea000e0e0e0c00034d0ce0002a69292e3c22113522123622133722143822153922163a221723062218230722192308221a23094d0db500221b0e0e7b0f11000e2b3b2b4d0ea5000e0e0c000450294d0f9a000e0e0e0c00023b2a4d108e000e0e0e0c0003640344294d0f80000e0c00023b2a4d1176000e0e0e0c00036403054d12690010294d1363000c0002030329020b293f4d0a55000e0e0c00032928274d1449000e0e0c00036402013b0304283e02284d1536002a4d1631000e0e0c0003294d1327000c00024d1720000e0c000203062935296402013c642b3b2b4d0e0b000c0004503b2705440e0e0e|@837,@797,I253,I229,@786,I248,@353,@828,I240,I239,@831,I252,@838,@839,@774,I255,I223,I234,I231,@61,I105,I24,@840,@836,I218| 836:O1|@935 837:S20|4c45585f28292e70617273654964656e74283329 838:S20|696e76616c6964206964656e7469666572202d20 839:C1,16|00802b3856172a2d7d0400020e0e0e0e|@773| 840:O4|-1,@7186,@7187,@7185 841:O2|@585,272 842:O2|@934,14 843:O2|@844,28 844:S4|7468656e 845:O2|@846,15 846:S2|6966 847:O2|@848,22 848:S2|6f66 849:O2|@850,37 850:S7|73686172696e67 851:O2|@852,35 852:S6|737472756374 853:O2|@854,29 854:S4|74797065 855:O2|@856,33 856:S9|737472756374757265 857:O2|35,43 858:O2|42,48 859:O2|@860,31 860:S4|77697468 861:O2|@862,24 862:S4|6f70656e 863:O2|@864,13 864:S3|66756e 865:O2|@866,3 866:S3|616e64 867:O2|@868,12 868:S2|666e 869:O2|58,47 870:O2|@871,16 871:S2|696e 872:O2|@873,10 873:S3|656e64 874:O2|61,45 875:O2|@876,8 876:S2|646f 877:O2|@878,9 878:S4|656c7365 879:O2|@880,40 880:S6|657174797065 881:O2|@882,17 882:S5|696e666978 883:O2|@884,7 884:S8|6461746174797065 885:O2|@886,23 886:S2|6f70 887:O2|@888,5 888:S2|6173 889:O2|@890,2 890:S7|61627374797065 891:O2|@892,34 892:S9|7369676e6174757265 893:O2|@894,18 894:S6|696e66697872 895:O2|@896,39 896:S8|7769746874797065 897:O2|@898,30 898:S3|76616c 899:O2|@900,26 900:S5|7261697365 901:O2|@902,21 902:S6|6e6f6e666978 903:O2|124,44 904:O2|@905,38 905:S7|66756e63746f72 906:O2|@907,11 907:S9|657863657074696f6e 908:O2|@909,42 909:S5|7768657265 910:O2|@911,36 911:S3|736967 912:O2|@913,25 913:S6|6f72656c7365 914:O2|@915,20 915:S5|6c6f63616c 916:O2|@917,49 917:S2|2d3e 918:O2|@919,32 919:S5|7768696c65 920:O2|@921,50 921:S2|3a3e 922:O2|@923,46 923:S2|3d3e 924:O2|@925,27 925:S3|726563 926:O2|@927,19 927:S3|6c6574 928:O2|@929,41 929:S7|696e636c756465 930:O2|@931,4 931:S7|616e64616c736f 932:O2|@933,6 933:S4|63617365 934:S6|68616e646c65 935:C6,88|00812c354d0050004d014c000e0c0003032e2c362d382a3b4d023c000e0c00032a3b4d0232000e0e0e0c00033b302c0e0e0c00020e4f031f00500002270502152c362d373b2e2c0e0e0c00020e4f04070030000266430e0e|@937,-1,I229,I253,@938,@936| 936:C10,160|008056032c3b4d0096000e0e0e0c000303033c0218294d0186000e0e0e0c00022d2a4d027a000e0e0e0c00036403054d036d0010292d4d0466000e0e0e0c00032964293b4d0558000e0c000303033b024829352a365647292c4d0643000c000364030529680102302f3b4d0532000e0e0e0c0003030e5643294d0123000c0002296502012f293c4d0715000e0e0c0003644f080b004100026565420e0e0e0e0e|@939,I234,I15,I231,@61,I253,I229,I24,I107,@936| 937:S20|486173685461626c652e68617368537562283229 938:C10,176|008056012c3b4d00a6000e0e0e0c000303033c0218293b4d0195000e0e0c00032d2a4d028a000e0e0e0c00036403054d037d00102c3c4d0476000e0e0e0c00032a2a4d016a000e0e0e0c00032965293b4d055c000e0c000303033b024c29352a365647292c4d0647000c000364030529680102342f3b4d0536000e0e0e0c000303125641293b4d0126000e0e0e0c0003296502012f293c4d0715000e0e0c0003644f080b004100026565420e0e0e0e0e|@939,I234,I253,I231,@61,I106,I229,I24,I107,@938| 939:S27|486173685461626c652e6861736853756228322966696e64283129 940:C6,96|00802814293b4d0056000e0e0e0c000303033b0247293c4d0145000e0e0c0003293f4d023a000e0e0e0c00034d0330002a4d042b000c000329304d0022000e0e0e0c00036603033c0212293c4d0110000e0c0003292502501e543b6464420e0e|@941,I229,I240,I239,@831,I252| 941:S27|436861722e636f6e7461696e732831296d61746368283129283129 942:C9,208|00802b352c363b2e352f36303731383239333a342306220c2307220d2308220e23094d00aa000e0e0e0c000b5078764a56573b0e0e4f019700600002293b2a3b4d028c000e0c000303032902132a352b362a2c692a2a2505250526031e1e3b66664d036b000c00022e3b2b4d0461000e0e0c0004503b6405550e00ff6d293556574d054b000c0003033d2f393b2a0e0e0e0c00024d0638002a3c3435220c36220d37220e38220f3922103a221123062212230722132308221423094d0711000e0e0c000e650202020202022910646642|@944,@786,@945,I229,@366,I255,I251,@943,@774| 943:O1|@954 944:S21|4c45585f28292e7061727365537472696e67283129 945:C20,992|00805604293b4d00d6030e0e0e0c00032928224d01c9030e0e0c0003031756272935293b28204d02b6030e0e0e0c0004502f6506d129404d01a5030e0e0c0003032e562729352a362b372c382d392e3a2f23063023073123083223094d0380030e0c000b505737294d0474033b6a641029285c4d0169030e0e0c000307d1562729352a362b372c382d392e3a2f23063023073123083223094d0344030e0c000b5644293b4d0038030e0c0003566729352a362b372c382d392e3a2f23063023073123083223094d0316030e0e0e0c000b28092c4d0509030e0e0c0003030c2b280d4d05fb020c000302013b03033c020c2b28204d01e9020e0e0c000307cf56874d06dc020202d3020e0c000229285c4d01cd020e0e0c00036403043b5006da5687569729393b2a0e0e0c000256c4293b4d00ac020e0c0003294d07a3024d089f020c00034d0998022a4d0a930202029f010c0003294d0b87024d0a83020c00034d0c7c022a6929303c220c35220d36220e37220f3822103922113a221223062213230722142308221523094d0d51020e0e0c000e501213000100feff293b4d003e020e0e0e0c000329285c4d0131020e0e0c0003654d0e27020c0002035b1213000100feff293b4d0015020202b0000e0e0c00032928224d0105020e0e0c0003654d0efb010c0002032c1213000100feff293b4d00e901020253000e0e0c0003293f4d01da010e0e0e0c0003654d0ecf010c000202013b02013b032e1213000100010029352a362b372c382d392e3a2f23063023073123083223094d03a1010e0e0c000b511eb05002023b50260a568729352a362b372c382d392e3a2f23063023073123083223094d0374010e0c000b50340e0e0e4f0f670191000264026d2b285e4d015a010e0e0e0c0003034e5684293b4d004a010e0e0e0c000356a729352a362b372c382d392e3a2f23063023073123083223094d0326010e0e0e0c000b285c220f69285e2a692d2a6929660e0e0e4f0f0b01c1000227040210285c34692c2a6929654f0ff700810002270606d7562729352a362b372c382d392e3a2f23063023073123083223094d03d2000e0e0e0c000b502a3f4d01c5000e0e0c0003030b5737294d04b7003b6a641028212b4d05ac000e0c0003030c2a287e4d059f000c000302013b03033c020c2a28204d018d000e0e0c000303102a2f6929640e0e4f0f7b0031000202705637564729393b2a0e0e0e0c00022e4d0763000c00024d105c002a4d0a57000c0003294d114f004d0a4b000c00034d1244002a69292e3c33353436220c37220d38220e39220f3a221023062211230722122308221323094d0d1b00020212000c000e50220d0e0e4f0f0b00b1000227086465420e0e0e|@947,I253,I229,I255,@786,@948,I248,@784,@704,@720,@949,@353,@950,@951,@774,I218,@945,@952,@953,@946| 946:C1,16|00802b3856172a2d7d0400020e0e0e0e|@773| 947:S33|4c45585f28292e7061727365537472696e67283129676574537472696e67283129 948:S9|456e644f664c696e65 949:S21|756e65787065637465642063686172616374657220 950:S11|20696e205c202e2e2e205c 951:C1,16|00802b3856172a2d7d0400020e0e0e0e|@773| 952:S22|756e7072696e7461626c652063686172616374657220 953:S16|20666f756e6420696e20737472696e67 954:C2,16|00802b384d0008002a2d0e0e7d040002|@773,@955| 955:S36|6e6f206d61746368696e672071756f746520666f756e64206f6e2074686973206c696e65 956:O1|@957 957:C2,16|0089313b4d0008002d0e0e0e7e0c0003|@958,I253| 958:S24|4c45585f28292e6572726f724f6363757272656428313029 959:O3|103,@382,@960 960:S22|537461746963206572726f7273202870617373203129 961:O1|@962 962:C2,8|00804d000200420e|@964,@963| 963:O6|0,0,0,0,0,0 964:S34|434f4d50494c45525f424f445928292e62617365436f6d70696c6572283329283129 965:O1|@966 966:C6,56|00813c28403b4d002e000e0e0e0c00044d0124002a694d021e002b694d0318002c694d0412002b69302d452a462b472705430e0e0e0e0e0e|@968,I11,@969,@973,@975,@967| 967:C1,16|00802b352c3656272d0e0e0e7e030003|@977| 968:S26|5554494c49544945535f28292e7365617263684c697374283229 969:C3,32|00805607293b4d0016000e0e0e0c00033b2a0e0e0e4f01070030000266420e0e|@971,I253,@970| 970:C3,56|00802b3b4d0030000e0c000303033b021f2b3529352a362e36290e0e0e4f011700410002502b2b695657300e7d070002420e0e0e0e0e0e0e|@972,I229,@970| 971:S34|5554494c49544945535f28292e7365617263684c6973742832296170706c79283129 972:S41|5554494c49544945535f28292e7365617263684c6973742832296170706c792831296170706c283129 973:C3,48|008156072d2d695627293b4d0021000e0e0c00032b2a692d3b2b4d0112000e0e0e0c0004503b2705430e0e0e0e0e0e0e|@974,I253,I255| 974:S34|5554494c49544945535f28292e7365617263684c697374283229656e746572283229 975:C4,72|00805607293b4d003e000e0e0e0c000329293b4d0131000e0e0c000303033b0224293529352a362c362b334d0219000e0e0c000303052a6801020829250526041e2f3b270466420e|@976,I253,I229,I24| 976:S35|5554494c49544945535f28292e7365617263684c6973742832296c6f6f6b7570283129 977:S34|5554494c49544945535f28292e7365617263684c697374283229656e746572283129 978:C2,40|00802b56180c0002293b4d001a000e0e0e0c0003030a2c56272d0e0e7d0400022964420e0e0e0e0e|@979,I229| 979:S24|4d6973632e6c6f6f6b757044656661756c74283229283129 980:O31|@982,@1623,@1624,@1631,@1633,@1634,@1635,@1636,@1626,@1639,@1641,@1642,@1643,@1644,@1645,@1647,@1648,@1649,@1652,@1655,@1656,@1657,@1660,@1661,@1073,@1662,@1663,@1664,@1640,@1665,@981 981:O3|@1050,@1067,@1664 982:C20,600|00822b352c364d004e022f694d01480230694d024202312b2d6b21064d0338024521054d04310245544d052b0245292b46220c472f486c502a220c46120a0001001d00472e48120a0001001e00496c502b220c462d472a482b492f4a6c504d06f601220c694d07ef01302b220f31313012110001000f001212000100100012130001000400121400010011001215000100120012160001001300121700010014001218000100150012190001000500121a0001001600121b0001001700121c0001001800121d0001001900121e0001001a00121f0001001b0012200001001c0068173b4d087101220f6934342b6a22114d096401694d0a5f010c00023b221237221323062a3b4d0b4e010e0e0e0c00032a3b4d0b42010e0e0e0c00032928444d0c35010e0e0c00034d0d2c010e0c000203032902012a121500010001002a2a4d0e15010e0e0c00032706030e56f70e0e0e4f0f0301f0000206cc22123522133622143722153822163922173a2218230622192307221a2308221b23094d10d8000e0c000b2c3b22152e330e0e0e0c0005292b4d11c2000e0e0e0c0003221537221623062a3b4d0baf000c00032a3b4d0ba6000e0e0e0c00032928444d0c99000e0e0c00034d0d90000e0c000203032902012a2928394d0c7f000c00034d0d78000e0c000227050350221537221623062a3b4d0b63000c00032a3b4d0b5a000e0e0e0c00032928444d0c4d000e0e0c00034d0d44000e0c000203032902012a293b4d0c3400020228000e0c00034d0d28000e0c0002270502013b030f283b22164d1215000e0e0c000302013b2a3b692704270f440e0e0e0e0e|@984,@985,@1034,@1040,@1183,@1201,@1218,@1220,@1226,@1467,@1472,@1045,I253,I113,I218,@762,@1474,@999,@1475,@983| 983:O2|@1612,@1611 984:S23|50415253455f44454328292e7061727365446563283329 985:C10,440|00812b352c363b563729372a23062a3b4d00a4010e0c00032a3b4d009a010e0e0e0c00032928444d018d010e0e0c00034d0284010e0c000203032902012a29283e4d0173010c00032706030e3b4f036701300002293b696406d8563729372a23062a3b4d0051010e0e0c00032a3b4d0046010e0e0e0c00032928444d0139010e0e0c00034d0230010e0c000203032902012a2928344d011f010c0003270607d156374d0412010e0e0e0c000250563729372a23062a3b4d00fe000e0e0e0c00032a3b4d00f2000e0e0e0c00032928444d01e5000e0e0c00034d02dc000e0c000203032902012a29283e4d01cb000c00034d02c4000e0c0002270603435637292306293b4d00b1000e0e0c00032928444d01a5000e0e0c00034d029c000e0c00026403054d05910010293b28344d06880002027f000e0c0004503b503b65027156373b0e0e0e4f076f00400001566729372a23062a3b4d005f000c00032a3b4d0056000e0e0e0c00032928444d01490002023f000e0e0c00034d023c000e0c000203032902012a2928354d012b000c00032705030b294d041f000c000250020e28292a4d0812000e0e0e0c0003502a270402013b66430e0e0e|@987,I253,I113,I218,@988,@765,@1017,I255,@986,@983| 986:C5,56|007f3b0e0e4f002f00010002561128384d0124002b4d021f000c000464030b0e0e4f03130001000102013b2a2a692966410e0e0e0e0e0e0e|@1020,@988,@1021,@1019,@986| 987:S37|50415253455f44454328292e70617273654465632833296765745479706556617273283229 988:C21,360|0080570729372a23062a3b4d0059010e0e0c00032a3b4d004e010e0e0e0c00032928444d0141010e0e0c00034d0238010e0c000203032902012a29283e4d0127010c00034d0220010e0c00022706032457074d0312012a4d040d010e0e0c000350294d0502010e0e0e0c0002504d06f7006406cd570729352a362b372c382d392e3a2f23063023073123083223094d07d6000e0e0e0c000b4d08cc0057372b6a56340e0e0e0c00025638035e2a4d09b7000c0002293c4d0aae000e0e0e0c00036403442a4d09a0000e0c00023c2a4d0b96000e0e0e0c00036403054d0c8900102a4d0d83000c000203032a020b2a28054d0e74000e0c00032928274d0f69000e0e0c00036402013b02013b5648031057472c2a4d1051000e0e0c00036402013b0402004d1141001b0f272d3c2e2e4d1236000e0e0e0c00075029644d13290002021d000e0e0c00022d2a6956730c00025057674d0511000e0e0c000250292706420e0e0e0e0e0e0e|@990,I253,I113,I218,@991,@983,@765,@992,@993,@996,I223,I233,I231,@61,I105,I252,I24,@1003,@214,@1012,@989| 989:O1|@1015 990:S50|50415253455f44454328292e7061727365446563283329676574547970655661727328322967657454797065566172283129 991:S17|3c74797065206964656e7469666965723e 992:O1|0 993:O1|@994 994:C2,16|0089333b4d0008000e0c000329641f0a|@995,I253| 995:S13|4c45585f28292e696428313029 996:C7,128|00802b3556182a2a4d0074000e0c00036403655617562729352a362b372c382d392e3a2f23063023073123083223094d014d000e0e0c000b2c4d0243004d033f000c00034d0438002a69292c3c30353136323733383439220c3a220d2306220e2307220f2308221023094d05120022150e0e0e7b0f09000e3b64420e0e0e0e0e|@998,I24,@999,@1002,@353,@997,@774| 997:C1,16|00802b3856172a2d7d0400020e0e0e0e|@773| 998:S55|50415253455f44454328292e7061727365446563283329676574547970655661727328322967657454797065566172283129552d283129 999:O1|@1000 1000:C1,16|00893b312c0e0e0e7d0c00020e0e0e0e|@1001| 1001:S17|4c45585f28292e6c696e656e6f28313029 1002:S23|2068617320616c7265616479206265656e20757365642e 1003:O1|@1004 1004:C11,336|00812b2309294d0046014d0142010e0e0e0c0003644d0237010c000203033c06cc2c4d032a010e0e0e0c0002293c4d041e010e0e0e0c00036403442c4d0310010e0c00023c2a4d0506010e0e0e0c00036403054d06f900102c4d07f3000c000203032c020b2c28054d08e4000e0c000329285f4d09d9000e0e0c00036402013b03033c02c32c4d03c6000e0e0e0c0002293c4d04ba000e0e0e0c00036403442c4d03ac000e0c00023c2a4d05a2000e0e0e0c00036403054d069500102c4d078f000c000203032c020b2c28054d0880000e0c00032928274d0975000e0e0c00036402013b03612c4d036500020259000e0e0c0002293d4d0456000e0e0e0c00036403412c4d0348000e0c00023d2a4d053e000e0e0e0c00036403054d063100102c4d072b000c000203032c020b2c28064d081c000e0c000329285f4d0911002e7e0500033b02013b430e0e0e0e0e0e0e|@1005,@7190,@623,I218,I223,I233,I231,@61,I105,I252,I24| 1005:S21|50415253455f44454328292e69735765616b283229 1006:O2|@1011,@7176 1007:O2|@1008,@7176 1008:C2,32|00802b3556174d0016000e0e0e0c000303033c0202020202013b420e0e0e0e0e|@617,I251| 1009:O2|@1010,@7176 1010:C1,16|008056072928452e6a64420e0e0e0e0e|@617| 1011:C3,40|00802b3556174d001e000e0e0e0c000303062b3729640202020202054d01080010420e0e0e0e0e0e|@617,I251,@621| 1012:O1|@1013 1013:C6,112|00853c2840324d0066000e0e0e0c0004304d015b000c0002030330020b304d024e000e0e0e0c0002293e4d0342000e0e0e0c00033103033f02013b2a2a4d042f000c00033203033d02013b2a2a4d041f000c000329344d0416000e0e0e0c00033331452a4627081f060e0e0e0e0e0e0e|@1014,I11,I105,I152,I245,I242| 1014:S23|5354525543545f56414c5328292e6d616b655476283629 1015:C1,16|00802b352c363e2b2b6a65420e0e0e0e|@1016| 1016:S7|54797065566172 1017:O3|@7129,@237,@1018 1018:S31|417474656d707420746f20707573682074776f20706172656e746865736573 1019:O2|@1023,@983 1020:S29|534b4950535f28292e6765744c697374283429666f724c697374283129 1021:O1|@1022 1022:C2,16|00802b283e4d0007002d0e0e7e030003|@761,I113| 1023:C10,232|00822b372c23062a3b4d00db000c00032a3b4d00d2000e0e0e0c00032928444d01c5000e0e0c00034d02bc000e0c000203032902012a29334d01ac000e0c00032705030c2b4d039f000c0002503c02922b372c23062a3b4d008d000e0e0c00032a3b4d0082000e0e0e0c00032928444d0175000e0e0c00034d026c000e0c000203032902012a29324d045c000e0c00032705034d2d3b4d054e000e0e0e0c000303033c020b2d28454d063c000e0c000303054d073200104d082d002e4d0028000e0c00032964292d56370e0e0e0c0003502c4d0312000e0e0e0c0002503c6402013b440e0e0e0e0e|@1025,I253,I113,I218,@765,@762,I234,I231,@61,@1024| 1024:O69|7,@1027,@890,@866,@931,@888,@933,@884,@876,@878,@873,@907,@868,@864,@934,@846,@871,@882,@894,@927,@915,@902,@848,@886,@862,@913,@900,@925,@844,@854,@898,@860,@919,@856,@892,@852,@911,@850,@905,@896,@880,@929,@909,35,124,61,@923,58,42,@917,@921,95,40,41,91,93,44,59,123,125,46,@1028,@991,@1029,@1030,@1031,@1032,@1033,@1026 1025:S19|534b4950535f28292e74657374666f72283329 1026:S14|756e6b6e6f776e2073796d626f6c 1027:S12|3c6964656e7469666965723e 1028:S3|2e2e2e 1029:S17|3c737472696e6720636f6e7374616e743e 1030:S18|3c696e746567657220636f6e7374616e743e 1031:S15|3c7265616c20636f6e7374616e743e 1032:S15|3c776f726420636f6e7374616e743e 1033:S15|3c6368617220636f6e7374616e743e 1034:C2,16|00824d000a0056172d6a440e0e0e0e0e|@1036,@1035| 1035:C9,144|00802b56180c0002294d0083000c00024d017c000e0c000203062935296402675617562729352a362b372c382d392e3a2f23063023073123083223094d0250000e0c000b2f4d0347004d0443000c00034d053c002a69292c3c30353136323733383439220c3a220d2306220e2307220f2308221023094d0616000e0e0e0c000e504d070b00270564420e0e0e0e0e0e0e|@1038,I105,I218,@999,@1039,@353,@1037,@774,@992| 1036:S39|50415253455f44454328292e706172736544656328332967656e54797065566172456e76283329 1037:C1,16|00802b3856172a2d7d0400020e0e0e0e|@773| 1038:S42|50415253455f44454328292e706172736544656328332967656e54797065566172456e76283329283129 1039:S42|20686173206e6f74206265656e206465636c6172656420696e2074797065206465636c61726174696f6e 1040:C19,368|00850403003b2a4d0065010e0e0c00035029352a362b372c3b2a56790e0c0003220d4d014a01694d0245010e0e0c000256774d033a012b2b4d0434010e0c00042a352b362c372d382e392f3a3023063123073223083323094d0514010e0c000b2a2c2b4d0609010e0e0c000432323256e80c0004220e034c56c729372a23062a3b4d07eb000c00032a3b4d07e2000e0e0e0c00032928444d08d5000e0e0c00034d09cc000e0c000203032902012a29282d4d08bb000c00034d09b4000e0c0002270602013b03033c0202220f03064d0a9e00028556c729372a23062a3b4d078f000c00032a3b4d0786000e0e0e0c00032928444d0879000e0e0c00034d0970000e0c000203032902012a29282d4d085f000c00032705030b294d0b53000c000250020e283d2a4d0c46000e0e0e0c00035056d74d0d390022164d0e33002c4d0f2e000e0e0e0c00055056e722162a2e4d101d000e0e0c0004662d312b22134d110e0022130e0e0e7b061500050e0e0e0e|@1042,@965,@1043,@1045,@1053,@1055,@999,@1059,I253,I113,I218,@214,@765,@983,@1067,@854,@1069,@1072,@1041| 1041:O1|@1181 1042:S37|50415253455f44454328292e70617273654465632833297479706542696e64696e67283629 1043:O1|@1044 1044:C2,16|00802b282d4d0007002d0e0e7e030003|@761,I113| 1045:O1|@1046 1046:C2,16|00802b352c364d0006002d0e7e030003|@1048,@1047| 1047:O1|@1049 1048:S14|496e745365742e706c7573283129 1049:C2,16|00814d000a002d2d6a2964430e0e0e0e|@1051,@1050| 1050:C1,24|00802b56180c000203033c02072b56172c800002420e0e0e|@1052| 1051:S14|496e745365742e706c7573283229 1052:S17|496e745365742e706c7573283229283129 1053:O1|@1054 1054:C2,16|00802b3c4d0008002d0e0e0e7e030003|@761,I113| 1055:O2|@1056,@983 1056:C9,224|00822b372c23062a3b4d00d3000c00032a3b4d00ca000e0e0e0c00032928444d01bd000e0e0c00034d02b4000e0c000203032902012a29334d03a4000e0c00032705032d2b352c362d372e382f39303a3123063223073323083423094d0480000e0c000b2c4d0577000c0002502964026a4d066b002c56270e0c0003502b372c23062a3b4d0058000e0c00032a3b4d004e000e0e0e0c00032928444d0141000e0e0c00034d0238000e0c000203032902012a29324d0328000e0c00034d0220000e0c00022705030d2b4d0513000c0002501e5402023b504d070500440e0e0e0e|@1058,I253,I113,I218,@762,@993,@765,@1057,I48| 1057:S10|4964656e746966696572 1058:S17|534b4950535f28292e6765746964283329 1059:O1|@1060 1060:C2,16|00823b3c0e4f00070010000264440e0e|@1062,@1061| 1061:C18,256|008056094d00f8000e0c00022c2a4d01ee000e0e0e0c00036403033b06ce56092c3c4d02da000e0e0e0c0003293b4d03ce000e0e0e0c000303033c02182a4d00be000e0e0e0c00022a2a4d04b2000e0e0e0c00036403054d05a500102a4d069f000c000203032a0218293f4d0791000e0e0c00032b2a4d0886000e0e0e0c00036429282e4d0978000e0c00036603555608561756294d0a67002a4d0b62000e0e0e0c0003294d0c57004d0b53000c00034d0d4c002a69292e3c3135323633373438220c39220d3a220e2306220f230722102308221123094d0e250022150e0e7b0f09000e2b3c4d0f160002020e000e0e0e0c00030e4f100700010002420e0e0e|@1064,I223,I233,I107,I234,I231,@61,I105,I239,I252,I24,@1065,@353,@1066,@1063,@774,I106,@1061| 1062:S28|5554494c49544945535f28292e636865636b466f72446f7473283329 1063:C1,16|00802b3856172a2d7d0400020e0e0e0e|@773| 1064:S36|5554494c49544945535f28292e636865636b466f72446f7473283329636865636b283129 1065:S15|7175616c6966696564206e616d6520 1066:S13|20696c6c6567616c2068657265 1067:O1|@1068 1068:C3,72|00802b283a4d003f000c000303033c022f2b28344d0030000e0c000303033c021f2b3c4d0021000e0e0c000303033c020f2b283e4d0110002d0e0e0e7e030003420e0e0e0e0e0e0e|@1052,I229,I113| 1069:O2|@1070,@983 1070:C7,192|00832b372c23062a3b4d00b3000c00032a3b4d00aa000e0e0e0c00032928444d019d000e0e0c00034d0294000e0c000203032902012a29344d0384000e0c00034d027c000e0c0002270503712c2c56270e0c0003502b372c23062a3b4d0060000e0c00032a3b4d0056000e0e0e0c00032928444d0149000e0e0c00034d0240000e0c000203032902012a3333694d042f000c00022a2a4d0326000e0e0e0c00034d021c000e0c00022706030e2b4d050f000c0002501e603b02013b02013b1f04|@1071,I253,I113,I218,@762,@1045,@765| 1071:S18|534b4950535f28292e736b69706f6e283429 1072:O3|@1074,@1174,@1073 1073:O3|@1050,@1176,@1179 1074:C9,88|00823b2e4d005000694d014b000c00020e4f02430010000228314d033a00304d0435000e0e0c000403162f2f2f2e0e0e0e0c00042a2a694d051d002f7d0800022f4d0313004d060f00314d070a000e0e0e0c000550296544|@1076,@1077,@1045,@1079,@1089,@1019,@1171,@1075,@1069| 1075:S11|456e64206f662074797065 1076:S25|50415253455f5459504528292e706172736554797065283329 1077:O1|@1078 1078:C2,16|00802b28314d0007002d0e0e7e030003|@761,I113| 1079:C8,72|00803b2c4d004000694d013b000c0002294f023300200002563828304d0328002b4d0423000c00046403193b0e4f0517003000012b2a6929664d060b002f0e0e7d0600022966420e|@1081,@1082,@1045,@1084,@1089,@1019,@1164,@1080| 1080:O1|@1166 1081:S37|50415253455f5459504528292e7061727365547970652833297475706c6554797065283129 1082:O1|@1083 1083:C2,16|00802b28304d0007002d0e0e7e030003|@761,I113| 1084:C29,1032|0080570829372a23062a3b4d00f9030e0e0c00032a3b4d00ee030e0e0e0c00032928444d01e1030e0e0c00034d02d8030e0c000203032902012a2928344d01c7030c0003270603763b57184d03b9030e0e0c00023b4f04af03200002573829372a23062a3b4d009f030c00032a3b4d0096030e0e0e0c00032928444d0189030e0e0c00034d0280030e0c000203032902012a2928354d016f030c00032705030b294d0363030c000250020e28292a4d0556030e0e0e0c0003502a270406d6570829372a23062a3b4d003d030e0e0c00032a3b4d0032030e0e0e0c00032928444d0125030e0e0c00034d021c030e0c000203032902012a29283a4d010b030c0003270603c357084d03fe020e0e0e0c0002500402005718283b4d06ec022b4d07e7020c000464030a294d08dc02080200029257183b3b4f09cf02300001575829372a23062a3b4d00bf020c00032a3b4d00b6020e0e0e0c00032928444d01a9020e0e0c00034d02a0020e0c000203032902012a29283b4d018f020c00032705030b294d0383020c0002500212287d2a4d0576020202d1010e0e0e0c0003504d0a67025778692b2a4d0b5e020e0e0e0c0003293c4d0c52020e0e0e0c0003312a453b462609296406cf570829372a23062a3b4d0034020e0c00032a3b4d002a020e0e0e0c00032928444d011d020e0e0c00034d0214020e0c000203032902012a29283e4d0103020c0003270603965707571829352a362b372c382d392e3a2f23063023073123083223094d0ddc010e0c000b642a0e0e0e0c0002293b69573829372a23062a3b4d00c0010e0c00032a3b4d00b6010e0e0e0c00032928444d01a9010e0e0c00034d02a0010e0c000203032902012a29283e4d018f010c00032705030b294d0383010c00025002124d0e79012a4d0574010202cf000e0c0003502a270402c5570829372a23062a3b4d0059010e0e0c00032a3b4d004e010e0e0e0c00032928444d0141010e0e0c00034d0238010e0c000203032902012a293c4d0128010e0c00032706035f57084d0f1a012d2b4d1014010e0c00040402004d1109014d1205010e0e0c00024d13fc000e0c000203193c28404d11ef004d14eb000c00042a4d15e300452a46510208294d16d800080200293b2c2b6a4d17cc000e0c0002293b692705022057084d18bb002a4d05b6000e0e0e0c000350294d03aa000e0e0e0c0002503b64571829372a23062a3b4d0094000e0c00032a3b4d008a000e0e0e0c00032928444d017d000e0e0c00034d0274000e0c000203032902012a293c4d0164000e0c00032706030f3b2a0e0e0e4f195300200002640245293b4d1a47000c000303064d1b3e0002342936293b4d1a34000e0c000303062a352964021f2a3557384d1820002a4d051b000c000350294d0312000e0e0e0c0002502a656464420e0e0e0e0e0e|@1086,I253,I113,I218,@765,@1087,@983,@1089,@1019,@1092,@1100,@1125,@1128,@1138,@993,@991,@1053,@1055,@1151,@1153,@1156,I11,-1,@1159,@1160,@1027,@1085,I229,@992| 1085:C14,216|0080580829352a362b372c382d392e3a2f23063023073123083223094d00b8000e0c000b0402004d01ad004d02a9000e0e0c00024d03a0000e0c000203193c28404d0193004d048f000c00042a4d058700452a46510208294d067c00080200292f2c2b6a4d0770000e0c000258584d0866000e0e0e0c000250585829372a23062a3b4d0952000e0e0e0c00032a3b4d0946000e0e0e0c00032928444d0a39000e0e0c00034d0b30000e0c000203032902012a293c4d0a20000e0c00032706030e293b690e0e4f0c0f005100020201292705420e0e0e0e0e0e|@1163,@993,@1151,@1153,@1156,I11,-1,@1159,@1160,@765,I253,I113,I218,@1085| 1086:S49|50415253455f5459504528292e7061727365547970652833297475706c6554797065283129626173696354797065283129 1087:C13,192|0080580829372a23062a3b4d00b1000e0e0c00032a3b4d00a6000e0e0e0c00032928444d0199000e0e0c00034d0290000e0c000203032902012a294d0381004d047d000e0e0c0003270603235607120200040001002a2a69654d0563000c0002581858272b2b2b58650c000466022358084d064b002a4d0746000e0e0e0c000350294d083a000e0e0e0c0002504d092f0064581828384d0326002b4d0a21000e0e0c00046403103b0e4f0b13001100022a2a6929650203293b6964420e0e0e0e|@1088,I253,I113,I218,@1067,@762,@1045,@991,@983,@765,@992,@1019,@1087| 1088:S69|50415253455f5459504528292e7061727365547970652833297475706c655479706528312962617369635479706528312974795365712d70726f636573734c697374283129 1089:O1|@1090 1090:C1,8|00803b420e0e0e0e|@1091| 1091:S16|496e745365742e656d7074792d283129 1092:O2|@1093,0 1093:O4|-3,0,@1094,@7191 1094:S4|756e6974 1095:O6|@1094,0,0,0,@1097,@1096 1096:O2|-1,@7192 1097:O2|0,@1098 1098:O3|1,@1099,0 1099:O4|-2,1,0,0 1100:C5,56|007f3b0e0e4f002f00010002561328384d0124002b4d021f000c000464030b0e0e4f03130001000102013b2a2a692966410e0e0e0e0e0e0e|@1020,@1101,@1089,@1019,@1100| 1101:C10,184|00805607294d00af0069644d01a9000e0e0c000258182a2a4d029c000e0c0003583829372a23062a3b4d038b000c00032a3b4d0382000e0e0e0c00032928444d0475000e0e0c00034d056c000e0c000203032902012a29282f4d045b000c00032705030b294d064f000c000250020e283a2a4d0742000e0e0e0c0003505647120600040002002a2a69654d012a000e0e0e0c0002585858672b2b2b58a50c00040402002f2b2b4d080e000e0e0e0c000450292709420e0e0e|@1103,@1104,@1045,@1106,I253,I113,I218,@765,@983,@1102| 1102:O1|@1114 1103:S60|50415253455f5459504528292e7061727365547970652833297475706c655479706528312962617369635479706528312974795365712d6c2d283129 1104:O1|@1105 1105:C2,16|00802b282f4d0007002d0e0e7e030003|@761,I113| 1106:O2|@1107,@1055 1107:C16,296|00812b372c23062a3b4d001b010c00032a3b4d0012010e0e0e0c00032928444d0105010e0e0c00034d02fc000e0c000203032902012a2928404d01eb000c0003270503d12b352c362d372e382f39303a3123063223073323083423094d03c8000e0c000b294d04bf000c00023b2a4d05b6000e0e0e0c00036403054d06a90010294d07a3000c0002030329020b293f4d0895000e0e0c00032d4d098b000c00025029287e4d0a80000e0c000303033c020b2928304d0a70000e0c000303512d352e362f3730383139323a332306342307220c2308220d23094d0b4c000e0c000b4d0c44002a3c3135323633373438220c39220d3a220e2306220f230722102308221123094d0d20000e0c000e5102023b502a65020f4d0e0f002d2d56372e0e7b05040004430e0e0e|@1109,I253,I113,I218,@993,I223,I231,@61,I105,I252,@765,I24,@999,@1110,@774,@1108| 1108:O1|@1113 1109:S20|534b4950535f28292e6765744c6162656c283229 1110:O1|@1111 1111:C2,16|00802b384d0008002a2d0e0e7d040002|@773,@1112| 1112:S25|4c6162656c73206d75737420626520312c322c332c2e2e2e2e 1113:C3,32|00802b28304d0017000c000303033c020b2b3c4d0109002d7e030003420e0e0e|@1052,I229,I113| 1114:C2,24|00822d4d0011000e0e0c00022c2a452e4664440e0e0e0e0e|@1116,@1115| 1115:O1|@1117 1116:S27|545950455f5452454528292e6d6b4c6162656c456e747279283329 1117:C12,160|00802b4d0099000e0e0c0002293c4d018e000e0e0e0c00036403033c024a2b4d007d000e0e0c00023b2a4d0272000e0e0e0c00036403054d036500102b4d045f000c000203032b020b2b3f4d0551000e0e0c00032928304d0645000e0e0c0003644d073b000c000203032b022f2b4d002e000e0e0e0c0002293c4d0822000e0e0e0c00032d3c2b4d0915000e0e0c0004654d0a0b002c0e0e0e800002420e0e0e|@1119,I223,I232,I231,@61,I105,I252,I24,I218,I107,@1118,@1115| 1118:O1|@1120 1119:S40|545950455f5452454528292e6d6b4c6162656c456e74727928332973747269705a65726f73283129 1120:C9,128|00822d4d0079000e0e0c00022d4d016f000c0002030c2d3b4d0264000e0c000302013b03032d02054d035400102d4d014e000e0e0e0c0002030c2d3b4d0240000e0c000302013b03032d02054d033000102a2a4d0429000e0e0c0003292d4d051e000e0e0e0c00036403054d06110010302b2b4d070900310e0e0e7b05080004|@1122,I223,I105,I231,@61,I239,I249,@61,@1121| 1121:O1|@1123 1122:S19|537472696e672e737562737472696e67283329 1123:C14,208|00822d4d00c9000e0e0c00022d3b4d01be000e0e0e0c0003030c2c2a4d02b0000e0c000302013b03032e029e2c0a01007a0080002c28084d0395000e0e0c0003293c4d048a000e0e0e0c0003293f4d057e000e0e0e0c000378760f3b2c28413b4d066c000e0c0004050800ff6d4d075f001029314d0858000e0c0003503f324d034d000e0e0c0003332a2c3f220c4d093e000e0e0e0c0006502a4d0a32000e0e0e0c0002502a270502204d0b2200021a2d3f4d031a000e0e0e0c00032f2a4d0c0e000e0e0e0c0003296564440e0e0e0e|@1124,I223,I229,I251,I239,I240,I241,I11,@87,I151,I198,I47,I48,I252| 1124:S33|4c696272617279537570706f72742e756e73616665537562737472696e67283329 1125:C4,88|00805607561729352a362b372c382d392e3a2f23063023073123083223094d0036000e0e0e0c000b4d012c002f69292b3c2f353036313732383339343a220c2306220d2307220e2308220f23094d02070022137b0f07000e|@1127,@999,@1126,@774| 1126:C1,16|00802b3856172a2d7d0400020e0e0e0e|@773| 1127:S58|50415253455f5459504528292e7061727365547970652833297475706c655479706528312962617369635479706528312974795365712d283129 1128:O1|@1129 1129:C4,56|00812c3b4d0030000e0c000303033b02212c352d363b2b352b304d011a000e0e0e0c0003292b2f0e0e4f020b007000042705430e0e0e0e0e|@1131,I229,@1128,@1130| 1130:C8,128|00822d3b4d0078000e0c000303052b3b69026c2d3529352f362f2b4d0161000e0e0c0003293b4d0056000e0e0e0c000303254d024a00314d0345000e0e0c0003294d043b004d0337000c00036456570e0e0c00025002023b50293b4d0521000e0e0c000303072f3269296402102a31310e4f060b006100042d2a692965270444|@1133,I229,@1134,@1137,@353,@1132,I232,@1130| 1131:S25|545950455f5452454528292e736f72744c6162656c73283229 1132:S25|292061707065617273206d6f7265207468616e206f6e63652e 1133:S33|545950455f5452454528292e736f72744c6162656c73283229656e746572283329 1134:O1|@1135 1135:C7,112|00812c4d0069000e0e0c00022c4d005f000c00022a2a4d0156000e0e0e0c00036503242c2c4d0247000c000303033b02142c2c4d0339000e0e0c000303064d042e0002013c02272c4d0024000e0c00022c4d001b000c00022a2a4d0512000e0e0e0c00036503064d04050002013c430e|@1136,I223,I113,I24,I27,-1,I234| 1136:S28|545950455f5452454528292e636f6d706172654c6162656c73283229 1137:S7|4c6162656c2028 1138:O1|@1139 1139:C9,136|00812b2d3b6a4d007e000e0e0e0c00022c030329026c0402004d016b001b0f273b3b3b2e4d0260000e0c00075029644d0355000e0e0c0002294d044b000c0002030e294d0541000e0e0c00023c6402013b032c294d0430000e0c0002030e294d0525000e0e0c0002296402054d06180010292c4d0711000e0e0c00036402013b2a6564430e0e0e0e|@1141,@1142,@214,@1012,@989,@1145,@1147,@621,@1140| 1140:O1|@1149 1141:S25|545950455f5452454528292e6d6b4c6162656c6c6564283229 1142:O1|@1143 1143:C2,24|00802b352c362d374d000c002c2c2c6b66420e0e0e0e0e0e|@1144,-2| 1144:S12|4c6162656c6c656454797065 1145:O1|@1146 1146:C2,16|00803e2c354d0007002d0e0e7e030003|@1016,I229| 1147:O1|@1148 1148:C1,16|00802b362c372a2a6965420e0e0e0e0e|@1016| 1149:C2,24|00812c35293b2e4d000d000e0e0c0004503b64430e0e0e0e|@1150,I255| 1150:S27|5354525543545f56414c5328292e747653657456616c7565283229 1151:O6|@1152,0,0,0,@533,@219 1152:S9|756e646566696e6564 1153:O1|@1154 1154:C1,8|00802b3a2964420e|@1155| 1155:S29|5354525543545f56414c5328292e74634964656e746966696572283129 1156:O1|@1157 1157:C2,16|00803c2c354d0007002d0e0e7e030003|@1158,I229| 1158:S26|5354525543545f56414c5328292e6973556e7365744964283129 1159:O2|0,@1151 1160:O1|@1161 1161:C2,24|00802b352c362d374d000c002c2c2c6b66420e0e0e0e0e0e|@1162,-3| 1162:S16|54797065436f6e737472756374696f6e 1163:S64|50415253455f5459504528292e7061727365547970652833297475706c6554797065283129626173696354797065283129636f6e7374727563746f7273283129 1164:C5,56|007f56030e4f002f00010002571828304d0124002b4d021f000c000464030b0e0e4f03130001000102013b2a2a692966410e0e0e0e0e0e0e|@1165,@1084,@1089,@1019,@1164| 1165:S49|50415253455f5459504528292e7061727365547970652833297475706c6554797065283129706172736552657374283129 1166:C3,32|00804d001a002c3c2b0c00033c2a3b6a654d010b002c0e0e0e8000020e0e0e0e|@1168,@1167,@1142| 1167:O1|@1169 1168:S28|545950455f5452454528292e6d6b50726f6475637454797065283129 1169:C6,72|00812c3b4d0040000e0c000303033b02312c352d362d4d012e004d022a000e0e0e0c0003292c692f3c4d031b000c00032c2a4d0412000e0e0e0c00032b2a69292707430e0e0e0e0e|@1170,I229,-1,@364,I106,@1167| 1170:S26|545950455f5452454528292e6d6170746f5265636f7264283229 1171:O1|@1172 1172:C1,16|00802b352c363c2b2b6a65420e0e0e0e|@1173| 1173:S12|46756e6374696f6e54797065 1174:O3|@1050,@1176,@1175 1175:O1|@1178 1176:O1|@1177 1177:C2,16|00802b28384d0007002d0e0e7e030003|@761,I113| 1178:C2,16|00802b28354d0007002d0e0e7e030003|@761,I113| 1179:O1|@1180 1180:C2,16|00802b283b4d0007002d0e0e7e030003|@761,I113| 1181:C1,16|00832e2d2d306b29641f040e0e0e0e0e|@1182| 1182:S29|50415253455f5452454528292e6d6b5479706542696e64696e67283429 1183:C24,552|008256074d0020020e0c00020403003b2a4d0113020c000350293c2a565b0e0e0e0c00032f4d02ff01694d03fa010e0e0e0c000256574d04ee012b2b4d05e8010e0c00042a352b362c372d382e392f3a3023063123073223083323094d06c8010e0c000b2a2c2b4d07bd010e0e0c0004569729372a23062a3b4d08ab010c00032a3b4d08a2010e0e0e0c00032928444d0995010e0e0c00034d0a8c010e0c000203032902012a29282d4d097b010c00032705030a294d006f010c0002020a283d2a4d0b63010c000356b729372a23062a3b4d0853010c00032a3b4d084a010e0e0e0c00032928444d093d010e0e0c00034d0a34010e0c000203032902012a2928074d0923010c000327060384303b4d0c16010e0e0e0c000303033b024c56b756c729352a362b372c382d392e3a2f23063023073123083223094d06eb000c000b4d0de4002a3c2e352f36303731383239333a342306220c2307220d2308220e23094d0ec3000c000e6656c74d00b9000e0e0c000256d74d04ae0022112b4d05a7000c0004312a4d0f9e0022137e140003220d4d109200694d038d000e0e0c0002294d11830069644d037d000e0e0c0002221033333122132e121300010004000e0e0c000756d73e4d125d002b4d1358000e0c000464031c220f4d104b00694d0346000e0e0e0c00023b4f143b00e000016502013b56e728274d122c002b4d1327000c000464030c3b0e4f151b00e000016402013b2b2b69292b4d160b0022140e7e1500030e0e0e0e|@1185,@765,@965,@1043,@1045,@1053,@1055,@999,@1059,I253,I113,I218,@983,I229,@1186,@774,@1189,@1192,@1194,@1089,@1019,@1196,@1198,@1184| 1184:O1|@1199 1185:S43|50415253455f44454328292e706172736544656328332964617461747970654465634f725265706c283329 1186:O1|@1187 1187:C2,16|00802b384d0008002a2d0e0e7d040002|@773,@1188| 1188:S52|4461746174797065207265706c69636174696f6e206d757374206e6f7420636f6e7461696e2074797065207661726961626c6573 1189:O1|@1190 1190:C2,16|00814d000a002d2d6a430e0e0e0e0e0e|@1191,-4| 1191:S37|50415253455f5452454528292e6d6b44617461747970655265706c69636174696f6e283229 1192:O1|@1193 1193:C2,16|00802b28274d0007002d0e0e7e030003|@761,I113| 1194:O1|@1195 1195:C2,16|00802b3e4d0008002d0e0e0e7e030003|@761,I113| 1196:C6,80|007f1201000100f1ff294d00420069644d013c000e0c000256185629292b2d57690c000457473e4d0225002b4d0320000e0c000464030b0e0e4f04130031000102013b2a2a69292706410e0e0e0e0e0e|@1197,@1194,@1045,@1089,@1019,@1196| 1197:S37|50415253455f44454328292e7061727365446563283329616e6442696e64696e6773283229 1198:C6,80|007f5607294d00470069644d0141000e0e0c0002295628355638365648373b3b57780e0e0e0c000757273e4d0221002b4d031c000e0c000464030b0e0e4f040f0011000102013b2a2a69292704410e0e|@1197,@1194,@1045,@1089,@1019,@1198| 1199:C1,8|00813e3b2e2e6b43|@1200| 1200:S37|50415253455f5452454528292e6d6b44617461747970654465636c61726174696f6e283229 1201:C6,88|0085560a56172a2e4d004c002c4d0147000c000532353336343756690e0c00043b300e0e0e4f022f005000023c28404d0325004d0421000e0e0c00043c28403b4d0414000e0c0004220c2b2d22102d68052927091f060e0e|@1203,@854,@1069,@1202,@1151,I11| 1202:C14,312|0080570729372a23062a3b4d0029010e0e0c00032a3b4d001e010e0e0e0c00032928444d0111010e0e0c00034d0208010e0c000203032902012a2928174d01f7000c000329030b57774d03eb000c000202013b2a03033c0202568c5798220c2a69644d04d2000e0e0e0c000257a756b829352a362b372d2f4d05bc00324d06b7000c000804020057e729372a23062a3b4d00a4000e0c00032a3b4d009a000e0e0e0c00032928444d018d000e0e0c00034d0284000e0c000203032902012a2928164d0173000c00032706033957e74d0366000e0e0e0c00025022104d075900694d0454000e0c000257f71211000100fbff2b2b2b4d0840000e0c00042d2f452a4626050209292b454d092c0046502957f7282c4d0a21002b4d0b1c000e0c000464030b22114f0c0f00f1000202013b2a2a69292711420e0e|@1205,I253,I113,I218,@765,@1045,@1108,@1206,@1204,@1072,@214,@1089,@1019,@1202| 1203:S38|50415253455f44454328292e7061727365446563283329646174617479706542696e64283629 1204:O1|@1217 1205:S48|50415253455f44454328292e7061727365446563283329646174617479706542696e64283629636f6e73747273283129 1206:O1|@1207 1207:C14,288|00862c2e304d0017010c00042f353036313732383339343a220c2306220d2307220e2308220f23094d01f4000e0c000b2a312b4d02e9000e0e0c00042b340e0e0e0c0002294d03d7000c00024d04d0000e0c000203332935294d05c3000c0002030e294d06b9000e0e0c00023c64021629354d07aa004d08a6000e0e0e0c000303033c02013b6402013b29030d304d048e000e0e0e0c000202013b037733353436220c37220d38220e39220f3a221023062211230722122308221323094d015f000c000b28282f4d0955000e0e0c0003294d0a4b004d0947000c00034d0b40002a69292d3b22113522123622133722143822153922163a221723062218230722192308221a23094d0c15000e0e0c000e270402013b2e27061f070e0e0e0e0e0e|@1209,@1055,@999,@1059,I105,I218,@1210,@1213,-1,I229,@353,@1215,@1208,@774| 1208:C1,16|00802b3856172a2d7d0400020e0e0e0e|@1216| 1209:S42|50415253455f44454328292e706172736544656328332967657453686f72744e6f6e496e666978283729 1210:O1|@1211 1211:C2,16|00803b2c354d0007002d0e0e7e030003|@1212,I229| 1212:S5|496e666978 1213:O1|@1214 1214:C1,8|00802b36420e0e0e|@1212| 1215:S46|292068617320696e666978207374617475732062757420776173206e6f74207072656365646564206279206f702e 1216:S27|4c45585f28292e7761726e696e674d657373616765283329283129 1217:C2,16|00802b282c4d0007002d0e0e7e030003|@761,I113| 1218:C13,216|00820403003b2a4d00cd000e0e0c000350293c2a56490e0e0e0c00032e4d01b700694d02b2000e0e0e0c000256484d03a6002b2b4d04a0000e0c00042a352b362c372d382e392f3a3023063123073223083323094d0580000e0c000b2a2c2b4d0675000e0e0c0004568829372a23062a3b4d0763000c00032a3b4d075a000e0e0e0c00032928444d084d000e0e0c00034d0944000e0c000203032902012a29282d4d0833000c00032705030a294d0a27000c0002020a283d2a4d0b1b000c0003220e323230221122111211000100010022120e7b080f0007|@1219,@965,@1043,@1045,@1053,@1055,@999,@1059,I253,I113,I218,@765,@983| 1219:S41|50415253455f44454328292e7061727365446563283329646174617479706542696e64696e67283329 1220:C4,56|00810403003b2a4d002d000e0e0c00035029352a362b374d011d002b56676a4d0215002a2c6a312e452d462c472a482706430e0e0e0e0e0e|@1222,@965,@1223,@1221| 1221:C3,48|00802b56180c0002294d0023000c00024d011c000e0c000203062935296402082c56272d7d04000264420e0e0e0e0e0e|@1225,I105,I218| 1222:S40|50415253455f44454328292e70617273654465632833296d616b6554797065566172456e76283229 1223:C12,160|00802b4d0099000e0e0c0002293c4d018e000e0e0e0c00036403442b4d0080000e0c00023c2a4d0276000e0e0e0c00036403054d036900102b4d0463000c000203032b020b2b28054d0554000e0c00032928274d0649000e0e0c00036402013b56182d2a4d0738000e0c00030402004d082d001b0f272e3c2e2e4d0922000e0e0e0c00075029644d0a15000e0e0c00022f2a6956570c00022a2705420e0e0e0e|@1224,I223,I233,I231,@61,I105,I252,I24,@1003,@214,@1012,@989| 1224:S50|50415253455f44454328292e70617273654465632833296d616b6554797065566172456e762832296c6f6f6b757054283129 1225:S43|50415253455f44454328292e70617273654465632833296d616b6554797065566172456e76283229283129 1226:C71,2248|00832e354d00c0082e2c120500010016006b4d01b2082f694d02ac082a1206000100140012070001000e0012080001000f0012090001001200220c120b000100150068084d0380083112070001000a0012080001000b0012090001000c002f120b0001000d00120c0001000e00120d0001000f00120e0001001000120f00010011001210000100120012110001001300220f220e680f3203033c024631373223062a3b4d0421080e0e0c00032a3b4d0416080e0e0e0c00032928444d0509080e0e0c00034d0600080e0c000203032902012a294d07f1074d08ed070e0e0c0003270507d531373223062a3b4d04d9070e0e0c00032a3b4d04ce070e0e0e0c00032928444d05c1070e0e0c00034d06b8070e0c000203032902012a29281e4d09a7070c0003038a220d4d0a9c070e0c00020404003b2a56e80e0e0c00035029352a372b380404003b2a121300010002000e0e0c00035029352a362b372218352219364d0b6307302d6a2b2b2b6a2f2f2f6a3c2a121b00010001000c00033b221c4d0c4507694d0d40070e0c00020e160e0036071c0000000002333269220f220f692b2b2b4d0f210722220e0e7b0523000429280d4d091107020255060e0e0c0003037e220d4d0a00070e0c00020404003b2a56e80e0e0c00035029352a372b380404003b2a121300010002000e0e0c00035029352a362b372218352219364d10c706302d6a2b2b2b6a2f2f2f6a3c2a121b00010001000c00033b3b0e0e0e161100a6061c000000000134336922102210692b2b2b4d12910622230e0e7b0524000429281d4d0981060e0e0c00030322220d4d0a74060e0c0002503b0e0e0e4f136706a00001644d145f06220d0e7d1000022928074d0951060e0e0c0003030e3b2210220e56db220f7b05100004293d4d0936060e0e0e0c000307d5220d4d0a28060e0c000256bd220e2a69644d0d19060e0e0c00023b4f150f06c0000128274d16060622134d1700060e0c0004031922104d18f405694d0def050c00023b4f19e705f000016502013b221237221323062a3b4d04d3050c00032a3b4d04ca050e0e0e0c00032928444d05bd050e0e0c00034d06b4050e0c000203032902012a29281f4d05a3050c00032705030e22124d0a96050e0e0e0c0002020e4d1a8a0522134d1b84050e0c000322124d1c7a05694d0d75050e0e0c000222162a22110c0003221537221623062a3b4d045b05020263000c00032a3b4d044e050e0e0e0c00032928444d0541050e0e0c00034d0638050e0c000203032902012a29404d0528050e0c00032705030f22154d0a1a050e0e0e0c000250020e4d1d0d0522164d1b07050c0003502d2d2b4d1efc0422170e7b0518000429280b4d09ed040e0e0c00030322220d4d0ae0040e0c00023b3b0e0e0e4f1fd304c00001644d20cb04220f0e7d1200022928144d09bd040e0e0c000307db220d4d0ab0040e0c00020403002211362212370403003b2a4d219a040e0e0e0c00035029362a374d228b042e2b6a2f2c452a462e47502f3530363137321217000100090022192a69644d0d69040e0e0c00022a2a22170e0c0003221b37221c23062a3b4d044f040c00032a3b4d0446040e0e0e0c00032928444d0539040e0e0c00034d0630040e0c000203032902012a2928104d051f040c00032705030e221b4d0a12040e0e0e0c0002020e4d230604221c4d1b00040e0c00030403004d24f503221a326a2a2a4531463047502a221e4d1ce203694d0ddd0302027d000e0e0c00022a2a221d0e0c0003222137222223062a3b4d04bf030c00032a3b4d04b6030e0e0e0c00032928444d05a9030e0e0c00034d06a0030e0c000203032902012a29404d0590030e0c00032705030f22214d0a82030e0e0e0c000250020e4d1d750322224d1b6f030c0003502f2a3c4d25640322230e7b052400042928114d2655030e0e0c000303182928124d2647030c0003030c2928154d093b030c000307d0220d4d0a30030e0c00022a28154d0925030e0e0c000303064d271a0306dc220e37220f23062a3b4d040b030c00032a3b4d0402030e0e0e0c00032928444d05f5020e0e0c00034d06ec020e0c000203032902012a2928404d05db020c0003270507cc220e35220f3622103722113822123922133a221423062215230722162308221723094d28ae020e0e0e0c000b294d29a3024d2a9f020c0003294d2b97020c00024d0690020e0c000203062935296402054d2c800210293b4d2d79020e0e0c000303033c020f2928094d2e6802020210010e0c000303ae22113522123622133722143822153922163a221723062218230722192308221a0202bb0023094d2f34020e0c000b22123522133622143722153822163922173a2218230622192307221a2308221b23094d280a02020267000e0e0e0c000b4d30fc012a4d31f7010c0003294d32ef014d31eb010c00034d33e4012a69292e3c221935221a36221b37221c38221d39221e3a221f23062220230722212308222223094d34b9010e0e0c000e260602023b5022114d0aa8010e0c000250296602013b2b28114d0997010c0003030c294d358d010e0e0c000202064d3682012a69644d377b01220f4d38750122124d396f010c00053b3b0e0e0e4f3a6301e00002292d4d3b5a0122137e15000328184d164e01220f4d1748010e0c000403823b220e37220f23062a3b4d0434010e0c00032a3b4d042a010e0e0e0c00032928444d051d010e0e0c00034d0614010e0c000203032902012a294d3705014d0801010e0e0c0003270503143b4f3cf300b000024d3dec00220e0e0e7d1100024d3ee000220f4d1bda000e0e0e0c000350220e4d0acd000e0e0c0002504d3fc3006402044d3fbc00270502b40404003b2a56880e0e0c00035029352a372b380404003b2a56c80e0e0e0c00035029352a372211352212362a2a306a22123522133622143722153822163922173a2218230622192307221a2308221b23094d2f63000c000b2a2213220d0c00033c28404d4051004d414d000e0e0c00043c28404d4241004d413d000e0e0c00044d4334004d4430002b2d6b292d2f4d4526000e0e0e0c0004293b6934346922102210692b2b2b4d0f0e00221d0e0e0e7b051e000427051f04|@1228,@1229,@1233,@1256,@1314,I253,I113,I218,@1230,@762,I229,@765,@1389,@1194,@1045,@1391,@1393,@1396,@1397,@1405,@1408,@1409,@1412,@1089,@1019,@1413,@1415,@860,@983,@1416,@873,@1418,@1421,@1424,@965,@1427,@871,@1428,@1335,I230,@219,@993,@1430,@1444,I105,@1239,I234,I233,@999,@1449,@353,@1450,@1451,@774,@1452,-1,@1338,@1454,@1069,@1455,@1457,@1460,@1461,@1027,@1289,@992,I11,@1252,-8,@1464,@1227| 1227:O1|@1465 1228:S29|50415253455f44454328292e7061727365446563283329646563283429 1229:C9,256|0081560729372a23062a3b4d00f1000e0e0c00032a3b4d00e6000e0e0e0c00032928444d01d9000e0e0c00034d02d0000e0c000203032902012a2928394d01bf000c00032706031856074d03b2000e0e0e0c0002502c2c2b2d0e0e0e7e040003560729372a23062a3b4d0093000c00032a3b4d008a000e0e0e0c00032928444d017d000e0e0c00034d0274000e0c000203032902012a294d0465004d0561000e0e0c000327060354560729352a362b372c382d392e3a2f23063023073123083223094d063a000e0e0e0c000b56292e2a69644d072a000e0e0e0c00025637303c2b2d56880e0c0005292d693232310e0e0e0c00032a2a6929270802013b430e0e|@1231,I253,I113,I218,@765,@1230,@762,@999,@1045| 1230:O1|@1232 1231:S43|50415253455f44454328292e706172736544656328332964656328342964656353657175656e6365283229 1232:C3,184|00802b28074d00af000c000303033c029f2b280d4d00a0000e0c000303033c028f2b28184d0090000e0c000303033c027f2b28154d0080000e0c000303033c026f2b28124d0070000e0c000303033c025f2b28114d0060000e0c000303033c024f2b28144d0050000e0c000303033c023f2b280b4d0040000e0c000303033c022f2b3d4d0031000e0e0c000303033c021f2b281d4d0020000e0c000303033c020f2b281e4d0110002d0e0e0e7e030003420e0e0e0e0e0e0e|@1052,I229,I113| 1233:C6,88|00864d0052002e694d014c000e0c00023b3b3b0405003b2a0e4f023b006000035029352a362b372c382d39293b4d0327000c000303032b0216282e3b2f2f2f2f2f1604001200120000000008293764270a1f070e0e0e0e0e|@1235,@1236,@1045,@1238,I234,@1234| 1234:C21,440|00860405003b2a0e0e4f00ab012100035029352a362b372c382d392e5777292309294d0192014d028e010e0e0e0c00036503033b02722a334d037c010e0c00030314220c2e4d046f010c00034d0568010e0c000202013b034e5777578729352a362b372c382d392e3a2f23063023073123083223094d063f010c000b4d0738012a3c2e352f36303731383239333a342306220c2307220d2308220e23094d0817010c000e6602013b2b344d090a010e0e0e0c000303033c0236220d03315787292309294d01f1004d02ed000e0e0c000365030f2c220c4d0ade000e0e0e0c0003020a2b344d03d0000e0c000302013b032a333c4d0bc1000e0e0c0003220e0304220c0202282e292b3333333333160c00a6001200010000086502012a3c28404d0d95004d0e91000e0e0c00043c28404d0f85004d0e81000e0e0c00044d107800220f2b2d6b2c37293b6922122a69654d1165000e0e0c00022a2a4d125a000e0e0e0c00032e382f35303931362b2a2f2f2e6805333929221c4d133c000e0c00036403033c020f333829221d4d0a29000e0e0c0003640317221b221b2e2d3232310e160c0012001b000100000802012927131f070e0e0e0e0e|@1248,@1238,@7190,@623,I113,I229,I218,@999,@1249,@774,I233,I24,I106,@1234,@992,I11,@1252,-8,@1247,@1242,I231| 1235:S42|50415253455f44454328292e70617273654465632833296465632834297061727365496e666978283729 1236:O1|@1237 1237:C2,16|00802b28174d0007002d0e0e7e030003|@761,I113| 1238:C17,304|0081560756182a2a69654d0022010e0e0e0c0002561756242a2a69654d0010010e0c0002562a0e0e0e0c0002292b0e0e0e4f01fb00310003573729372a23062a3b4d02eb000c00032a3b4d02e2000e0e0e0c00032928444d03d5000e0e0c00034d04cc000e0c000203032902012a56982a2a4d05ba000e0e0e0c0003270703135638564757572b2b2b4d06a3000c00046602044d079900294d0794004d0890000e0c000303064d098600022629565c0e0e0c0002294d0a77000c00024d0470000e0c000203062935296402054d0b60001064294d0c59000e0e0c0002030e294d0d4d000e0e0c00022964021c29354d0e3e004d0f3a000e0e0e0c000303062936296402044d0e28002a354d0e22004d0f1e000e0e0e0c000303033c02013b322c452a462e472d482b492707430e0e0e0e|@1240,@1045,@1241,I253,I113,I218,@762,@1055,I48,I24,@219,I105,@1239,@1210,@1213,-1,I229| 1239:O3|@7193,@1246,0 1240:S56|50415253455f44454328292e70617273654465632833296465632834297061727365496e666978283729726561644e6578744f7073283229 1241:C14,328|0081570729372a23062a3b4d0039010e0e0c00032a3b4d002e010e0e0e0c00032928444d0121010e0e0c00034d0218010e0c000203032902012a56692a2a4d0306010e0e0e0c0003270707cf570729372a23062a3b4d00ef000c00032a3b4d00e6000e0e0e0c00032928444d01d9000e0e0c00034d02d0000e0c000203032902012a56682a2a4d03be000e0e0e0c000327070375570729352a362b372c382d392e3a2f23063023073123083223094d0496000e0e0e0c000b64561c0e0e0c0002294d0583000c00024d027c000e0c000203332935294d066f000c0002030e294d0765000e0e0c00023c64021629354d0856004d0952000e0e0e0c000303033c02013b6402013b6402013b03032c023256092c2a69644d0a2f00020226000c0002561a0e0e0e0c00022d2a4d0b1a000e0e0e0c0003292e0e0e0e4f0c0b003100036502012c430e0e0e|@1243,I253,I113,I218,@762,@993,I105,@1210,@1213,-1,I229,@1045,@1242,@1241| 1242:O1|@1244 1243:S61|50415253455f44454328292e70617273654465632833296465632834297061727365496e66697828372970617273654170706c69636174696f6e283229 1244:C1,8|00813c2d2d6a430e|@1245| 1245:S24|50415253455f5452454528292e6d6b4170706c6963283229 1246:S6|4f7074696f6e 1247:O1|@1254 1248:S54|50415253455f44454328292e70617273654465632833296465632834297061727365496e6669782837296e6578744c6576656c283729 1249:O1|@1250 1250:C2,16|00802b384d0008002a2d0e0e7d040002|@773,@1251| 1251:S66|4d6978656420726967687420616e64206c656674206173736f63696174697665206f70657261746f7273206f66207468652073616d6520707265636564656e63652e 1252:O4|@1253,-1,@582,@992 1253:S11|3c756e646566696e65643e 1254:C1,8|0080280d2c69420e|@1255| 1255:S9|5475706c6554726565 1256:C10,128|00824d007a002a2f2f564c68054d016f002e2c315659566a2f568b569c56ad680a4d025b002e4d035600314d0451000e0e0c000556382f2a69644d0542000e0e0e0c00023135323633372e4d0231004d062d002f56b70e0e0e0c0008302a2f0e0e0c0003314d0717004d081300220c4d040d000e0e0c00052a2707440e0e0e0e|@1258,@1259,@1275,@1312,@1288,@1069,@1045,@1108,@1089,@1257| 1257:S14|456e64206f66207061747465726e 1258:S39|50415253455f44454328292e70617273654465632833296465632834297061747465726e283329 1259:C14,256|00812b4d00f9000e0e0c00022d4d01ef00694d02ea000e0e0e0c000256282e2a37565a282f4d03d7002b4d04d2000e0e0e0c00046403312c4d05c400694d02bf000c0002566a2a2a2d4d06b3000c00042d2a4d07aa000e0e0e0c000329250626051e423b270402012a65564928054d038e002b4d0489000e0e0c00046403792c4d087c000e0c000203525649565929352a362b372c382d392e3a2f23063023073123083223094d0956000e0e0e0c000b4d0a4c002a3c2e352f36303731383239333a342306220c2307220d2308220e23094d0b2b000c000e260402023b5056495658292b3456970e0e0c00042c2a4d0c0e00340e7e0b0003292704430e0e0e0e|@1261,@1262,@1265,@1045,@1089,@1019,@1104,@1072,@1267,I218,@999,@1270,@774,@1260| 1260:O1|@1273 1261:S61|50415253455f44454328292e70617273654465632833296465632834297061747465726e283329636f6e73747261696e744f724c617965726564283229 1262:O1|@1263 1263:C3,24|00802b354d0010004d010c000e0c000303033c02013b420e|@1264,-8,I229| 1264:S23|50415253455f5452454528292e69734964656e74283129 1265:O1|@1266 1266:C2,16|00802b28054d0007002d0e0e7e030003|@761,I113| 1267:O1|@1268 1268:C2,16|00814d000a002c2e6a430e0e0e0e0e0e|@1269,-3| 1269:S28|50415253455f5452454528292e6d6b436f6e73747261696e74283229 1270:O1|@1271 1271:C2,16|00802b384d0008002a2d0e0e7d040002|@773,@1272| 1272:S32|4578706563746564206964206f722069643a7479206265666f72652060617327 1273:C2,16|00814d000a002d2d6a430e0e0e0e0e0e|@1274,-9| 1274:S25|50415253455f5452454528292e6d6b4c617965726564283229 1275:C40,1592|0080560729372a23062a3b4d0029060e0e0c00032a3b4d001e060e0e0e0c00032928444d0111060e0e0c00034d0208060e0c000203032902012a2928334d03f7050c00030a03000804e10408001804566729372a23062a3b4d00dc050e0c00032a3b4d00d2050e0e0e0c00032928444d01c5050e0e0c00034d02bc050e0c000203032902012a29283a4d01ab050c0003270603af56674d049e050e0e0e0c00025677283b4d0590052b4d068b050c00046403064d07810502873b0402003b2a0e0e4f087305a000035029352a3656b729372a23062a3b4d005e050e0e0e0c00032a3b4d0052050e0e0e0c00032928444d0145050e0e0c00034d023c050e0c000203032902012a29283b4d012b050c00032705030a294d041f050c0002020a287d2a4d0913050c00033c28404d0a09054d0b05050e0e0c000428082e2b2f6b27076406cc29283f4d03ee040e0e0e0c00030a040009015801a401b0026002566729372a23062a3b4d00ce040e0e0e0c00032a3b4d00c2040e0e0e0c00032928444d01b5040e0e0c00034d02ac040e0c000203032902012a56cf2a2a4d0c9a040e0e0e0c000327070398566729372a23062a3b4d0083040c00032a3b4d007a040e0e0e0c00032928444d016d040e0e0c00034d0264040e0c000203032902012a2928174d0153040c000329030b56d74d0447040c000202013b56e756f929352a362b372d22164d0d3004324d0e2b0402023c020c00083c28404d0f1d044d0b19040e0e0c00043c28404d100d044d0b09040e0e0c00044d1100042c2b2d6b270d021a56674d05f203334d12ed032c4d13e8030e0c0005504d14df036406d5566e29352a362b372c382d392e3a2f23063023073123083223094d15be030e0e0e0c000b568e4d04b2030e0e0e0c00023c28404d0fa5034d0ba1030e0e0c00044d1698032a2d4d1792036b270406d7566e29352a362b372c382d392e3a2f23063023073123083223094d156f030c000b568e4d0466030e0e0e0c00023c28404d0f59034d0b55030e0e0c00044d164c032a2d4d1846036b270406dc5667292309294d1937034d1a33030c00036503043b5002535667567729352a362b372c382d392e3a2f23063023073123083223094d1b090302021a010e0e0c000b4d1cfc022a3c2e352f36303731383239333a342306220c2307220d2308220e23094d1ddb020c000e2604566e29352a362b372c382d392e3a2f23063023073123083223094d15b8020202c9000e0c000b568e4d04aa020e0e0e0c00023c28404d0f9d024d0b99020e0e0c00044d1690022a2d4d1e8a026b2704029a566e29352a362b372c382d392e3a2f23063023073123083223094d156702020278000c000b568e4d045a020e0e0e0c00023c28404d0f4d024d0b49020e0e0c00044d1640022a2d4d1f3a026b2704024a566e29352a362b372c382d392e3a2f23063023073123083223094d1517020c000b568e4d040e020e0e0e0c00023c28404d0f01024d0bfd010e0e0c00044d16f4012a2d4d20ee016b270406d256674d04e3010c00024d21dc016406d156674d04d3010c0002567729372a23062a3b4d00c3010c00032a3b4d00ba010e0e0e0c00032928444d01ad010e0e0c00034d02a4010e0c000203032902012a2928374d0193010c00034d028c010e0c00022706030b3b4f227f017000016402013b568729372a23062a3b4d006b010c00032a3b4d0062010e0e0e0c00032928444d0155010e0e0c00034d024c010e0c000203032902012a2928374d013b010c00032705030a294d042f010c0002020a285d2a4d0923010c00032b4d231b01220d02020c010e7d0d000256674d040a010202fd000e0e0e0c0002567729372a23062a3b4d00f3000c00032a3b4d00ea000e0e0e0c00032928444d01dd000e0e0c00034d02d4000e0c000203032902012a2928354d01c3000c00034d02bc000e0c00022706034b567b332a69644d24aa000e0e0e0c000256875699292b2d56d80c000456b728384d0590002b4d068b000c00046403173b0e4f257f00b000012b2a6929664d2673000c0002020129270402044d076500568729372a23062a3b4d0058000e0c00032a3b4d004e000e0e0e0c00032928444d0141000e0e0c00034d0238000e0c000203032902012a2928354d0127000c00032705030a294d041b000c0002020a28292a4d090f000c00032b27042706420e0e0e0e0e0e|@1277,I253,I113,I218,I107,@765,@1089,@1019,@1278,@1279,@983,@214,I11,@762,@1108,@1284,@992,@1252,-8,@1288,@1069,@1289,@993,-10,@1290,@1294,@7190,@623,@999,@1296,@774,@1299,@1301,@1303,@1305,@1306,@1308,@1045,@1276,@1247| 1276:C5,72|007f5607571b2a2a69654d003a000e0e0e0c000257175729292b2d57680c0004574728384d0120002b4d021b000c000464030b0e0e4f030f0031000102013b2a2a69292706410e0e|@1311,@1045,@1089,@1019,@1276| 1277:S55|50415253455f44454328292e70617273654465632833296465632834297061747465726e28332961746f6d69635061747465726e283129 1278:O1|14 1279:C24,488|00815707283d4d00de012b4d01d9010e0e0c000464030b2b4d02cc010802003b06d15607571d2a2a69654d03ba010e0e0e0c0002294d04af01694d03aa010e0e0e0c000257272a2a4d059c010e0c00035747282d4d0090012b4d018b010c000464031057475759292b3057980e0c00046506cc294d0670010e0c00023b2a4d0766010e0e0e0c000364038f294d0658010e0c00023b2a4d084e010e0e0e0c00036403054d09410110294d0a3b010c0002030329020b293f4d0b2d010e0e0c00032928314d0c21010e0e0c0003640348294d0614010e0c00023b2a4d080a010e0e0e0c00036403054d09fd0010294d0af7000202ec000c0002030329020b293f4d0be5000e0e0c00032928394d0dd9000e0e0c00036402013b02013b03535747575729352a362b372c382d392e3a2f23063023073123083223094d0eab00020260000c000b4d0fa0002a3c2e352f36303731383239333a342306220c2307220d2308220e23094d107f000c000e260402023b503c28404d116f004d126b000c00043c28404d1361004d125d000e0e0c00044d1454002c2b2d6b2f2a579c0e0c0003662a2a69576728384d153c002b4d0137000c000464031f0402003b2a0e4f1627008100035029352a362c2a69220c2c452a4627040209293b69323c452a46642706430e0e0e0e0e0e|@1281,@1089,@1019,@342,@1045,@1043,@1106,I223,I234,I231,@61,I105,I252,I28,I29,@999,@1280,@774,@992,I11,@1252,-8,@1108,@1279| 1280:O1|@1282 1281:S67|50415253455f44454328292e70617273654465632833296465632834297061747465726e28332961746f6d69635061747465726e2831296765744c6162656c73283229 1282:C2,16|00802b384d0008002a2d0e0e7d040002|@773,@1283| 1283:S35|203d20706174206578706563746564206166746572206e756d65726963206c6162656c 1284:O1|@1285 1285:C13,240|00862c2e304d00e7000c000429320e0e0e0c0002294d01d7000c00024d02d0000e0c000203332935294d03c3000c0002030e294d04b9000e0e0c00023c64021629354d05aa004d06a6000e0e0e0c000303033c02013b6402013b29030d2e4d028e000e0e0e0c000202013b03773135323633373438220c39220d3a220e2306220f230722102308221123094d0761000e0e0c000b28282d4d0855000e0e0c0003294d094b004d0847000c00034d0a40002a69292d3b220f3522103622113722123822133922143a221523062216230722172308221823094d0b15000e0e0c000e260502023b502b661f070e0e0e0e0e0e|@1287,@1055,I105,I218,@1210,@1213,-1,I229,@999,@353,@1215,@1286,@774| 1286:C1,16|00802b3856172a2d7d0400020e0e0e0e|@1216| 1287:S41|50415253455f44454328292e70617273654465632833296765744c6f6e674e6f6e496e666978283729 1288:S7|5061747465726e 1289:O1|-5 1290:O4|@1292,-1,@199,@1291 1291:O3|1,@544,@1293 1292:S10|636f6e76537472696e67 1293:O3|3,@7194,79992 1294:O4|@1295,-1,@199,@1291 1295:S7|636f6e76496e74 1296:O1|@1297 1297:C2,16|00802b384d0008002a2d0e0e7d040002|@773,@1298| 1298:S38|5265616c20636f6e7374616e7473206e6f7420616c6c6f77656420696e207061747465726e73 1299:O4|@1300,-1,@199,@1291 1300:S8|636f6e765265616c 1301:O4|@1302,-1,@199,@1291 1302:S8|636f6e7643686172 1303:O4|@1304,-1,@199,@1291 1304:S8|636f6e76576f7264 1305:O1|-16 1306:C5,72|007f5607571a2a2a69654d003a000e0e0e0c000257175729292b2d57680c0004574728384d0120002b4d021b000c000464030b0e0e4f030f0031000102013b2a2a69292706410e0e|@1307,@1045,@1089,@1019,@1306| 1307:S68|50415253455f44454328292e70617273654465632833296465632834297061747465726e28332961746f6d69635061747465726e283129702d766172734c697374283129 1308:O1|@1309 1309:C1,8|008028092c69420e|@1310| 1310:S4|4c697374 1311:S66|50415253455f44454328292e70617273654465632833296465632834297061747465726e28332961746f6d69635061747465726e283129702d7475706c6573283129 1312:O1|@1313 1313:C4,200|00802b28174d00bf000c000303033c02b32b283a4d00b0000e0c000303033c02a32b28364d00a0000e0c000303033c02932b28344d0090000e0c000303033c02832b28434d0180000e0c000303482b28424d0173000c0003033c2b28414d0167000c000303302b28404d015b000c000303242b283f4d014f000c000303182b28304d0143000c0003030c2b3c4d0038000e0c000303033c022b2b28304d0128000e0c0003030c2b3c4d001c000e0c000303033c020f2b28334d020c002d0e0e0e7e030003420e0e0e|@1052,I229,I230,I113| 1314:C17,296|00814d0022012a56276a3b4d01190156372d31566d567e30569f120b0001000a00120c0001000b00120d0001000c00120e0001000d00680c3b3b3b56674d02e700334d03e2002c4d04dd000e0e0c000550567729372a23062a3b4d05ca000e0e0e0c00032a3b4d05be000e0e0e0c00032928444d06b1000e0e0c00034d07a8000e0c000203032902012a294d0299004d0895000e0e0c000327060384324d098700694d0a82000e0e0e0c00020e4f0b7700700002568729372a23062a3b4d0567000c00032a3b4d055e000e0e0e0c00032928444d0651000e0e0c00034d0748000e0c000203032902012a29280e4d0637000c00032706032456874d0c2a000e0e0e0c000250330e0e0e4f0d1b008000022a2a4d0e1200220d7e0d0003296402044d0f04002707430e|@1316,@1317,@1320,@1342,@1344,@1069,I253,I113,I218,@762,@1345,@1045,@1347,@765,@1368,@1315,@1289| 1315:O1|@1387 1316:S42|50415253455f44454328292e706172736544656328332964656328342965787072657373696f6e283229 1317:C2,16|008256083b4f00070010000165440e0e|@1319,@1318| 1318:C5,104|007f040200571829352a362b372c382d392e3a2f23063023073123083223094d0045000e0e0c000b56375649292b57770e0c00032e2a452d46502e567856842a4d0124002b4d021f000c000465030b0e0e4f03130061000102013b2a2a69292709410e0e0e0e0e0e|@1020,@999,@1089,@1019,@1318| 1319:S63|50415253455f44454328292e706172736544656328332964656328342965787072657373696f6e28322965787072657373696f6e4c696e654c697374283329 1320:C45,2184|0080560729372a23062a3b4d0079080e0e0c00032a3b4d006e080e0e0e0c00032928444d0161080e0e0c00034d0258080e0c000203032902012a2928364d0147080c0003270607d356074d033a080e0e0e0c0002561729372a23062a3b4d0027080c00032a3b4d001e080e0e0e0c00032928444d0111080e0e0c00034d0208080e0c000203032902012a2928374d01f7070c00034d02f0070e0c000227060320561a2d2a69644d04de070e0e0e0c0002562956373b4f05cf07400001270402013b562729372a23062a3b4d00ba070e0e0e0c00032a3b4d00ae070e0e0e0c00032928444d01a1070e0e0c00034d0298070e0c000203032902012a2928374d0187070c00032705030a294d037b070c0002020e285d2a4d066f0702020f000c00032b4d076307300e0e7d070002560729372a23062a3b4d004f070c00032a3b4d0046070e0e0e0c00032928444d0139070e0e0c00034d0230070e0c000203032902012a2928344d011f070c0003270607d256074d0312070e0e0e0c0002561728354d0804072b4d09ff060c00046403064d0af50606d5561729352a362b372c382d392e3a2f23063023073123083223094d0bd5060e0e0c000b563e2f2a69644d04c6060e0e0e0c00025649292b56780e0e0e0c0003566728384d08ac062b4d09a7060c000464032b566b322a69644d0497060c0002567956873b4f0c8b069000012e2a692927064d0d7e060e0e0e0c00020249566728394d086e062b4d0969060e0e0c0004640333292d69567d332a69644d0454060e0c000256892928392c56cc02027a000e0c00042c2a692927054d0e36060e0e0e0c0002020129567729372a23062a3b4d00200602024f000e0c00032a3b4d0012060e0e0e0c00032928444d0105060e0e0c00034d02fc050e0c000203032902012a2928354d01eb050c00032705030a294d03df050c0002020a28292a4d06d3050c00032b27086406cd560729372a23062a3b4d00bd050e0e0c00032a3b4d00b2050e0e0e0c00032928444d01a5050e0e0c00034d029c050e0c000203032902012a29283a4d018b050c0003270603aa56074d037e050e0e0e0c00025617283b4d0870052b4d096b050c00046403064d0a6105028256173b3b4f0f57053000013c28404d104d054d1149050e0e0c000428083c2b2d6b567729372a23062a3b4d0031050e0e0c00032a3b4d0026050e0e0e0c00032928444d0119050e0e0c00034d0210050e0c000203032902012a29283b4d01ff040202f7040c00032705030a294d03ef040c0002020a287d2a4d06e3040c00032b27086406d9560729372a23062a3b4d00cd040e0e0c00032a3b4d00c2040e0e0e0c00032928444d01b5040e0e0c00034d02ac040e0c000203032902012a2928134d019b040c0003270607d556074d038e040e0e0e0c000256190403002a362b370403003b2a4d1276040e0e0e0c00035029362a374d1367042e2b6a2f2c452a462e47502f220c4d145504694d0450040e0c00022a2a120e0001000b000c000356c729372a23062a3b4d0033040c00032a3b4d002a040e0e0e0c00032928444d011d040e0e0c00034d0214040e0c000203032902012a2928104d0103040202fb030c00032705030a294d03f3030c0002020e4d15ea032a4d06e5030e0e0c0003120f0001000a0022112a69644d04d0030e0c00022e28392b12130001000600020295000e0e0c00041211000100010029372a23062a3b4d00a6030e0e0e0c00032a3b4d009a030e0e0e0c00032928444d018d030e0e0c00034d0284030e0c000203032902012a29404d0174030e0c00032705030a294d0367030c0002020e4d165e032a4d0659030e0e0c00031213000100010022154d0847034d1743032c4d183e030e0e0e0c0005312e3b4d19310322190e0e7b05170004560729372a23062a3b4d001b030c00032a3b4d0012030e0e0e0c00032928444d0105030e0e0c00034d02fc020e0c000203032902012a2928174d01eb020c000329030b56774d03df020c000202013b568729372a23062a3b4d00cc020e0c00032a3b4d00c2020e0e0e0c00032928444d01b5020e0e0c00034d02ac020e0c000203032902012a294d1a9d024d1b99020e0e0c0003034656e756f929352a362b372d22164d1a8102220f4d1c7b020c00083c28404d1d71024d116d020e0e0c00043c28404d1e61024d115d020e0e0c00044d1f54022c2b2d6b270506d129282b4d2045020e0e0c0003032656e74d0338020e0c00025056e722112a4d212a020e0e0e0c0003644d221f0222110e7d11000229283f4d2011020e0e0c0003035156e729352a362b372c382d392e3a2f23063023073123083223094d23ec010e0c000b121100010001004d03dd010e0e0c00023c28404d1dd1014d11cd010e0e0c00044d24c4012a2d4d25be016b270406cd2928404d20b2010e0e0e0c0003035556e729352a362b372c382d392e3a2f23063023073123083223094d238c010e0c000b121100010001004d037d01020273010e0e0c00023c28404d1d6d014d1169010e0e0c00044d2460012a2d4d265a016b270406cd2928414d204e010e0e0e0c0003035156e729352a362b372c382d392e3a2f23063023073123083223094d2328010e0c000b121100010001004d0319010e0e0c00023c28404d1d0d014d1109010e0e0c00044d2400012a2d4d27fa006b270406d52928424d20ee000202e4000e0e0e0c0003035156e729352a362b372c382d392e3a2f23063023073123083223094d23c4000e0c000b121100010001004d03b5000e0e0c00023c28404d1da9004d11a5000e0e0c00044d249c002a2d4d2896006b2704028b2928434d208a00020280000e0e0e0c0003035156e729352a362b372c382d392e3a2f23063023073123083223094d2360000e0c000b121100010001004d0351000e0e0c00023c28404d1d45004d1141000e0e0c00044d2438002a2d4d2932006b2704022756e74d2a27002a4d062200020218000e0e0e0c000350294d0312000e0e0e0c0002504d2b070064270e420e0e0e|@1322,I253,I113,I218,@765,@1045,@1323,@983,@1308,@1089,@1019,@1278,@999,@1324,@1247,@1325,@1328,@214,I11,@965,@1331,@1332,@871,@873,@1334,@1069,@1335,@1338,@762,@1284,@992,@1252,-8,I229,@1106,@1321,@993,-10,@1290,@1294,@1299,@1303,@1301,@1027,@1289| 1321:O1|@1340 1322:S61|50415253455f44454328292e706172736544656328332964656328342965787072657373696f6e28322961746f6d696345787072657373696f6e283129 1323:C4,56|007f56035612292b57480e0e0e0c0003563128384d0020002b4d011b000c000464030b0e0e4f020f0021000102013b2a2a69292705410e0e|@1020,@1089,@1019,@1323| 1324:C4,72|007f1201000100f8ff1202000100f7ff292b57480e0c00031204000100f6ff28384d0023002b4d011e000e0e0e0c000464030b0e0e4f020f0021000102013b2a2a69292705410e0e|@1020,@1089,@1019,@1324| 1325:O1|@1326 1326:C2,16|00804d000a002c69420e0e0e0e0e0e0e|@1327,-6| 1327:S6|457870536571 1328:C5,56|007f3b0e0e4f002f00010002561328384d0124002b4d021f000c000464030b0e0e4f03130001000102013b2a2a692966410e0e0e0e0e0e0e|@1020,@1329,@1089,@1019,@1328| 1329:C9,160|00805607294d00970069644d0191000e0e0c000257172a2a4d0284000e0c0003573729372a23062a3b4d0373000c00032a3b4d036a000e0e0e0c00032928444d045d000e0e0c00034d0554000e0c000203032902012a29282d4d0443000c00032705030b294d0637000c000250020e283d2a4d072a000e0e0e0c0003505647575f2a2a69654d0117000c00025759292b57880e0e0e0c00032d2a692707420e0e|@1330,@1043,@1045,@1106,I253,I113,I218,@765,@983| 1330:S73|50415253455f44454328292e706172736544656328332964656328342965787072657373696f6e28322961746f6d696345787072657373696f6e2831296c6162656c6c65642d283129 1331:C2,40|00802b56180c0002293b4d001a000e0e0e0c0003030a2c56272d0e0e7d0400022964420e0e0e0e0e|@979,I229| 1332:O1|@1333 1333:C2,16|00802b28104d0007002d0e0e7e030003|@761,I113| 1334:S21|456e64206f66206c65742065787072657373696f6e 1335:O1|@1336 1336:C2,32|00823c28403b4d0016000e0e0e0c0004402d2f312d680564440e0e0e0e0e0e0e|@1337,I11| 1337:S34|50415253455f5452454528292e6d6b4c6f63616c4465636c61726174696f6e283329 1338:O1|@1339 1339:C3,48|00802b282d4d0027000c000303033c021b2b28304d0018000e0c000303033c020b2b3c4d0109002d7e030003420e0e0e|@1052,I229,I113| 1340:C8,96|00800402004d0057001b0f273b3b3b2e4d014c000e0c00075029644d0241000e0e0c00020402002d2b2b4d0332000e0e0e0c00045029293b69293b4d0421000e0e0c0003292e694d0515000e0e0c00024d060c00322b2d6b2706420e0e0e0e0e|@1341,@214,@1012,@989,@1102,@1138,@1171,-13| 1341:S26|50415253455f5452454528292e6d6b53656c6563746f72283129 1342:O1|@1343 1343:C4,280|00802b282b4d000f010c000303b42b28434d0003010c000303a82b28424d00f7000c0003039c2b28414d00eb000c000303902b28404d00df000c000303842b283f4d00d3000c000303782b28304d00c7000c0003036c2b3c4d00bc000e0c000303602b282d4d00af000c000303542b28304d00a3000c000303482b3c4d0098000e0c0003033c2b283a4d008b000c000303302b28344d007f000c000303242b28364d0073000c000303182b28174d0067000c0003030c2b28134d015b000c000303033c024f2b280c4d014c000e0c000303033c023f2b28064d013c000e0c000303033c022f2b28204d012c000e0c000303033c021f2b280f4d011c000e0c000303033c020f2b281a4d020c002d0e0e0e7e030003420e0e0e|@1052,I230,I229,I113| 1344:S10|45787072657373696f6e 1345:O1|@1346 1346:C2,16|00802b280e4d0007002d0e0e7e030003|@761,I113| 1347:C10,136|00802b4d008100694d017c000e0c00020e4f027300010002571729372a23062a3b4d0363000c00032a3b4d035a000e0e0e0c00032928444d044d000e0e0c00034d0544000e0c000203032902012a2928194d0433000c00032706032457174d0626000e0e0e0c0002502c0e0e0e4f0717001100022a2a4d080e002f0e7e0500032964420e0e0e0e0e|@1349,@1350,@1045,@1352,I253,I113,I218,@765,@1347,@1348| 1348:O1|@1385 1349:S56|50415253455f44454328292e706172736544656328332964656328342965787072657373696f6e28322970617273654f72656c7365283129 1350:O1|@1351 1351:C2,16|00802b28194d0007002d0e0e7e030003|@761,I113| 1352:C10,136|00802b4d008100694d017c000e0c00020e4f027300010002571729372a23062a3b4d0363000c00032a3b4d035a000e0e0e0c00032928444d044d000e0e0c00034d0544000e0c000203032902012a293f4d0434000e0c00032706032457174d0626000e0e0e0c0002502c0e0e0e4f0717001100022a2a4d080e002f0e7e0500032964420e0e0e0e0e|@1354,@1355,@1045,@1357,I253,I113,I218,@765,@1352,@1353| 1353:O1|@1383 1354:S57|50415253455f44454328292e706172736544656328332964656328342965787072657373696f6e2832297061727365416e64616c736f283129 1355:O1|@1356 1356:C2,16|00802b3f4d0008002d0e0e0e7e030003|@761,I113| 1357:C29,1040|0080570729372a23062a3b4d0001040e0e0c00032a3b4d00f6030e0e0e0c00032928444d01e9030e0e0c00034d02e0030e0c000203032902012a29280f4d03cf030c000307d057674d04c4030e0c00025779332a69644d05b6030e0e0e0c00025688292b56b50e0e0e0c000357a729372a23062a3b4d0097030c00032a3b4d008e030e0e0e0c00032928444d0181030e0e0c00034d0278030e0c000203032902012a29281c4d0167030c00032705030a294d045b030c0002020e4d0652032a4d074d030e0e0c000357c8220f2a69644d053d030e0e0c000256d8292b1211000100ffff0e0e0c000357f729372a23062a3b4d001b030c00032a3b4d0012030e0e0e0c00032928444d0105030e0e0c00034d02fc02020254000e0c000203032902012a2928094d01e7020c00032705030a294d04db020c0002020e4d08d2022a4d07cd020e0e0c0003121200010002002922151215000100ffff0c0003322e2b4d09ad0222180e0e7b051600042928204d039d020e0e0c000303b357674d0490020e0c0002324d0a8702694d0582020e0e0e0c00025688292b56b50e0e0e0c000357a729372a23062a3b4d0063020c00032a3b4d005a020e0e0e0c00032928444d014d020e0e0c00034d0244020e0c000203032902012a2928084d0133020c00032706032457a74d0426020e0e0e0c000256b829220f56e50e0e0c00032c2a4d0b0e0222117e10000357a74d0c02022a4d07fd010e0e0c000350294d04f2010e0e0e0c0002504d0de701270506d32928064d03dc010e0c0003039a57674d04d0010e0c0002577a332a69644d05c2010e0e0e0c00025688292b56b50e0e0e0c000357a729372a23062a3b4d00a3010c00032a3b4d009a010e0e0e0c00032928444d018d010e0e0c00034d0284010e0c000203032902012a2928164d0173010c00032705030a294d0467010c0002020e4d0e5e012a4d0759010e0e0c0003220e0e0e0e4f0f4b01c100022c2a4d10420122117e10000329281a4d0335010e0e0c0003032657674d0428010e0c00025678293456a50e0e0e0c0003644d11130133020209010e0e7d0a0002576729372a23062a3b4d00fb000c00032a3b4d00f2000e0e0e0c00032928444d01e5000e0e0c00034d02dc000e0c000203032902012a29280c4d01cb000c00032706033057674d04be000e0e0e0c0002324d12b300694d05ae000e0e0e0c00020e4f0fa3007100024d139c00330e0e0e7d0a0002576c322a69644d058a000e0e0e0c00025672568829352a362b372d4d1475004d15710031121100020005000e0e0c0008220c4d165e00694d0559000e0e0c000256b82b2a3757e7282f4d1747002b4d1842000e0e0e0c00046403312c4d193400694d052f000c000257f72a2a2d4d1a23000c00042d2a4d1b1a000e0e0e0c000329250626051e423b270402012a27082706420e0e|@1359,I253,I113,I218,I229,@765,@1045,@844,@983,@878,@1360,@1363,@1365,@876,@1289,@848,@1368,@1373,@1376,@759,@1379,@1358,@1338,@1355,@1089,@1019,@1104,@1072,@1267| 1358:O1|@1382 1359:S55|50415253455f44454328292e706172736544656328332964656328342965787072657373696f6e2832296b6579576f7264457870283129 1360:O1|@1361 1361:C1,8|00823d2e2d2f6b44|@1362| 1362:S22|50415253455f5452454528292e6d6b436f6e64283329 1363:O1|@1364 1364:C2,16|00802b28084d0007002d0e0e7e030003|@761,I113| 1365:O1|@1366 1366:C1,8|0081280f2c2e6a43|@1367| 1367:S23|50415253455f5452454528292e6d6b5768696c65283229 1368:C21,432|008057074d00a8012d4d01a3012c4d029e010e0e0e0c0005572729352a362b372c382d392e3a2f23063023073123083223094d037a010e0e0e0c000b2f4d046f01694d056a010e0e0e0c000257575668292b2d120b0002000e000e0e0e0c0004578729372a23062a3b4d0643010c00032a3b4d063a010e0e0e0c00032928444d072d010e0e0c00034d0824010e0c000203032902012a29282e4d0713010c00032706030e57874d0906010e0e0e0c0002026657874d0af8002a4d0bf3000c000350579729372a23062a3b4d06e2000e0e0e0c00032a3b4d06d6000e0e0e0c00032928444d07c9000e0e0c00034d08c0000e0c000203032902012a29282d4d07af000c00032706030e57974d09a2000e0e0e0c000202013b64344d0c9300694d058e000e0e0e0c000256a8292b56d50e0e0e0c00033c28404d0d75004d0e71000e0e0c00043c28404d0d65004d0e61000e0e0c00042b34312d2d68054d0f51002a6912110002000100282c4d1042002b4d113d000e0e0c000464030f22121612002e0012000100000202013b2a2a691213000200010022154d1015004d1311002c4d020c000e0c0005502a2713420e0e0e|@1370,@1312,@622,@1069,@999,@1371,@1045,I253,I113,I218,@765,@923,@983,@1204,@992,I11,-11,@1089,@1019,@1368,@1369| 1369:S12|456e64206f66206d61746368 1370:S50|50415253455f44454328292e706172736544656328332964656328342965787072657373696f6e2832296d61746368283129 1371:O1|@1372 1372:C2,16|00802b282e4d0007002d0e0e7e030003|@761,I113| 1373:O1|@1374 1374:C2,16|00814d000a002d2d6a430e0e0e0e0e0e|@1375,-2| 1375:S22|50415253455f5452454528292e6d6b43617365283229 1376:O1|@1377 1377:C1,8|0080280c2c69420e|@1378| 1378:S5|5261697365 1379:O1|@1380 1380:C1,8|008028062c69420e|@1381| 1381:S2|466e 1382:C4,232|00802b282b4d00df000c000303033c06ca2b28434d01d0000e0c000303482b28424d01c3000c0003033c2b28414d01b7000c000303302b28404d01ab000c000303242b283f4d019f000c000303182b28304d0193000c0003030c2b3c4d0088000e0c000303033c027b2b282d4d0178000e0c000303182b28304d016b000c0003030c2b3c4d0060000e0c000303033c02532b283a4d0050000e0c000303033c02432b28344d0040000e0c000303033c02332b28364d0030000e0c000303033c02232b28174d0020000e0c000303033c02132b28134d0210002d020207000e0e0e7e030003420e0e0e|@1052,I229,I230,I113| 1383:C2,16|00814d000a002d2d6a430e0e0e0e0e0e|@1384,-1| 1384:S25|50415253455f5452454528292e6d6b416e64616c736f283229 1385:C2,16|00814d000a002d2d6a430e0e0e0e0e0e|@1386,-12| 1386:S24|50415253455f5452454528292e6d6b4f72656c7365283229 1387:C1,8|008128072d2d6a43|@1388| 1388:S28|50415253455f5452454528292e6d6b48616e646c6554726565283229 1389:C3,48|00802b56180c0002294d0023000c00024d011c000e0c000203062935296402082c56272d7d04000264420e0e0e0e0e0e|@1390,I105,I218| 1390:S39|50415253455f44454328292e70617273654465632833296465632834296e6577456e762d283129 1391:C13,416|0080560829372a23062a3b4d0091010e0e0c00032a3b4d0086010e0e0e0c00032928444d0179010e0e0c00034d0270010e0c000203032902012a29281b4d015f010c0003567829372a23062a3b4d004f010c00032a3b4d0046010e0e0e0c00032928444d0139010e0e0c00034d0230010e0c000203032902012a29281b4d011f010c00032706031156784d0312010e0e0e0c0002501e5102023b50290311320e0e4f04fb007100023b2a69296506d0567829352a362b372c382d392e3a2f23063023073123083223094d05d3000c000b344d06cb00694d07c6000e0e0e0c000256a8120c000100e8ff292b2d56f10e0e0e0c000456d829372a23062a3b4d009f000c00032a3b4d0096000e0e0e0c00032928444d0189000e0e0c00034d0280000e0c000203032902012a29282d4d016f000c00032705030a294d0363000c0002020a283d2a4d0857000c00031210000100e8ff2922131213000100faff0c00032d2a334d0939000e0e0c0004121300010002003e4d0a28002b4d0b230002021c000c000464030f2214160400120014000100000202013b2a2a6929270d270742|@1392,I253,I113,I218,@765,@1391,@999,@1043,@1045,@983,@1227,@1089,@1019| 1392:S36|50415253455f44454328292e706172736544656328332964656328342976616c42283129 1393:O1|@1394 1394:C3,32|00823c28403b4d0016000e0e0e0c00044d010c002f2f2f2d680564440e0e0e0e|@1395,I11,-15| 1395:S32|50415253455f5452454528292e6d6b56616c4465636c61726174696f6e283329 1396:C3,48|00802b56180c0002294d0023000c00024d011c000e0c000203062935296402082c56272d7d04000264420e0e0e0e0e0e|@1390,I105,I218| 1397:C7,72|007f5607294d003f0069644d0139000e0e0c00020e4f022f0001000257193e4d0325002b4d0420000e0c000464030b0e0e4f05130001000102013b2a2a692966410e0e0e0e0e0e0e|@1197,@1194,@1045,@1398,@1089,@1019,@1397| 1398:C5,88|00803b3b0e4f004f001000023c28403b4d0144000e0c00043c28404d0239004d0135000e0e0c00043c28404d0329004d0125000e0e0c00043c28404d0319004d0115000e0e0c00042a2e2d2f2d6805292707420e0e0e0e0e|@1400,@1399,I11,@1252,@992| 1399:C14,344|0080570829352a362b372c382d392e3a2f23063023073123083223094d0038010e0c000b5627294d012d0169644d0227010c000257381205000200e8ff292b2d57810e0e0e0c0004576829372a23062a3b4d0303010c00032a3b4d03fa000e0e0e0c00032928444d04ed000e0e0c00034d05e4000e0c000203032902012a29282d4d04d3000c00032706030e57684d06c6000e0e0e0c000202665768283d2a4d07b5000e0e0c000350577829372a23062a3b4d03a2000e0e0e0c00032a3b4d0396000e0e0e0c00032928444d0489000e0e0c00034d0580000e0c000203032902012a29282e4d046f000c00032706030e57784d0662000e0e0e0c000202013b645677294d08510069644d024b000c00021209000200e8ff292b57b00e0e0c00032d2a334d0931000e0e0c000457b8282c4d0a24002b4d0b1f000c000464030b3b0e4f0c1300b1000202013b2a2a6929270d420e0e0e0e0e0e|@1402,@999,@1043,@1045,I253,I113,I218,@765,@983,@1204,@1401,@1089,@1019,@1399| 1400:S36|50415253455f44454328292e706172736544656328332964656328342966756e42283129 1401:O1|@1403 1402:S47|50415253455f44454328292e706172736544656328332964656328342966756e4228312962696e64696e6773283129 1403:C1,16|00822d2d2d6a2964440e0e0e0e0e0e0e|@1404| 1404:S24|50415253455f5452454528292e6d6b436c61757365283329 1405:O1|@1406 1406:C2,16|00824d000a002e2e2e6b440e0e0e0e0e|@1407,-7| 1407:S32|50415253455f5452454528292e6d6b46756e4465636c61726174696f6e283329 1408:C6,80|007f5607294d00470069644d0141000e0e0c000229562a35563a36564a373b3b577a0e0e0e0c000757293e4d0221002b4d031c000e0c000464030b0e0e4f040f0011000102013b2a2a69292704410e0e|@1197,@1194,@1045,@1089,@1019,@1408| 1409:O1|@1410 1410:C2,16|00804d000a002c69420e0e0e0e0e0e0e|@1411,-14| 1411:S15|547970654465636c61726174696f6e 1412:C6,80|007f1201000100f3ff294d00420069644d013c000e0c0002561a3b2a2c575c0e0e0c000457393e4d0225002b4d0320000e0c000464030b0e0e4f04130021000102013b2a2a69292705410e0e0e0e0e0e|@1197,@1194,@1045,@1089,@1019,@1412| 1413:O1|@1414 1414:C2,16|00802b281f4d0007002d0e0e7e030003|@761,I113| 1415:C6,88|007f1201000100f0ff294d004a0069644d0144000e0c000229562a35563a36564a373b3b577a0e0e0e0c000757293e4d0225002b4d0320000e0c000464030b0e0e4f04130011000102013b2a2a69292704410e0e0e0e0e0e|@1197,@1194,@1045,@1089,@1019,@1415| 1416:O1|@1417 1417:C2,16|00802b404d0008002d0e0e0e7e030003|@761,I113| 1418:O1|@1419 1419:C1,8|00823b2c2f2f6b44|@1420| 1420:S36|50415253455f5452454528292e6d6b416273747970654465636c61726174696f6e283329 1421:C7,72|007f5607294d003f0069644d0139000e0e0c00020e4f022f0001000257193e4d0325002b4d0420000e0c000464030b0e0e4f05130001000102013b2a2a692966410e0e0e0e0e0e0e|@1197,@1194,@1045,@1422,@1089,@1019,@1421| 1422:C16,296|0080570e2c2a69644d001c010e0c000256184d0112012b2b4d020c010e0c00042a352b362c372d382e392f3a3023063123073223083323094d03ec000e0c000b2a2c2b4d04e1000e0e0c0004565828164d05d4002b4d06cf000c000464033a304d07c400694d00bf000c00025668567a29372c2c2b4d08af000c00043c28404d09a5004d0aa1000e0e0c0004312a2c4d0b95006b29270702885658282d4d0587002b4d0682000e0e0e0c000464035656584d017300322b4d026d000e0e0c00043c28404d0c61004d0a5d000e0e0c00043c28404d0951004d0a4d000e0e0c00044d0d44002c2b2d6b3c28404d0939004d0a35000e0e0c0004312a4d0e2a002d6b292707021c3c28404d091c004d0a18000e0c00042c2a4d0e0e004d0b0a006b29652705420e0e0e0e|@1423,@1045,@1338,@1055,@999,@1059,@1089,@1019,@1043,@1072,@1252,I11,@1289,@992,-8,@214| 1423:S48|50415253455f44454328292e7061727365446563283329646563283429657863657074696f6e42696e64696e67283129 1424:O1|@1425 1425:C1,8|008028052c69420e|@1426| 1426:S13|45784465636c61726174696f6e 1427:C2,40|00802b56180c0002293b4d001a000e0e0e0c0003030a2c56272d0e0e7d0400022964420e0e0e0e0e|@979,I229| 1428:C1,16|00802b56180c0002502b56172c800002|@1429| 1429:S35|50415253455f44454328292e6d6b4c6f63616c426f6479466978456e76283529283129 1430:O1|@1431 1431:C2,16|00804d000a002c69420e0e0e0e0e0e0e|@1433,@1432| 1432:C3,24|00802b56174d000f004d010b002e0e7b050300040e0e0e0e|@1435,-1,@1434| 1433:S14|496e742e7363616e283129283129 1434:O1|@1436 1435:S17|496e742e7363616e283129283129283129 1436:C8,256|00822b4d00f9004d01f5000e0e0c00030a02000d0011000a00281002083d020528080201403b3b3b31310e0e0e0c0002293b4d02ca000e0e0e0c000303033b02bc293529352a3628092b4d03b2000e0e0e0c0003030c2a280d4d03a3000c000302013b03033c020c2a28204d0291000e0e0c0003031229220c220c4d048100220d0e0e7b050d00042a282b4d0271000e0e0c0003030c290e0e4f056300800002025a2a282d4d0257000c000303033c020b2a287e4d0248000e0c00030335290e0e4f053b00800002293b4d0232000e0e0e0c000303033b0217293529352a362a4d061c000e0c0002292b692968012705640209220c4f05070080000266270544|@1438,-2,I107,I229,I248,@1434,@1437,I111| 1437:C6,224|008056042928104d00d5000e0e0c00036403bb2b56180e0e0e0c0002293b4d01be000e0e0e0c000303033b029e293529352a362a28304d01a6000e0e0e0c00034d029c000e0c0002030c3b3b314f038f0061000402742956580c0002293b4d017e000e0e0e0c000303093b2b69296801640256293529352a362a28784d0160000e0c000303033c020b2a28584d0150000e0c000303253b3b2b4f034300a10004293b4d013a000e0e0e0c000303093b2f692968016402012964020d3b3b220c0e0e4f031b00a1000466646664020a3b3b2d4f040b00210004420e0e0e0e0e0e0e|@1440,I113,I229,I218,@1441,@1439| 1438:S11|496e742e7363616e283329 1439:C8,160|00822b56180c0002293b4d0092000e0e0e0c0003030f2e03092d2d692968016402013b0279293529352a362a28304d016e000e0e0e0c0003031d564428302a4d025d000e0e0c00032c2a4d0352000e0e0e0c00036502013b03365644312a4d043e000e0e0e0c0003292d4d0232000e0e0e0c00032928304d0525000e0e0c00033c2a2f0e0e4f061700a100042704020d3103093030692968016402013b666444|@1443,I229,I231,I106,I234,I108,I107,@1439| 1440:S25|496e742e7363616e283329726561645f6e756d626572283129 1441:C8,328|00822b56180c0002293b4d003a010e0e0e0c0003030f2e03092d2d692968016402013b06ca293529352a362a28304d0116010e0e0e0c0003030c2a28394d0207010c000302013b03323028104d03f8000e0c0003292c4d04ee000e0e0e0c00032928304d05e1000e0e0c00033c2a2e0e0e4f06d3009100046602ca2a28414d01c6000e0e0e0c0003030c2a28464d02b7000c000302013b033f3028104d03a8000e0c0003292c4d049e000e0e0e0c00032928414d0591000e0e0c000329404d0486000e0e0e0c00033c2a2f0e0e4f067700a100042704026d2a28614d0169000e0e0c000303102a28664d025b00020255000c000302013b033f3028104d0348000e0c0003292c4d043e000e0e0e0c00032928614d0531000e0e0c000329404d0426000e0e0e0c00033c2a2f0e0e4f061700a100042704020d3103093030692968016402013b666444|@1442,I229,I231,I232,I108,I106,I107,@1441| 1442:S29|496e742e7363616e283329726561645f6865785f646967697473283329 1443:S25|496e742e7363616e283329726561645f646967697473283329 1444:O1|@1445 1445:C4,64|00812c4d0039000e0e0c00024d0130002e2b6a292e0c00023b2a0e0e0e0c000264293b4d0219000e0e0c000303033b0208293529352968016566430e0e0e0e0e|@1447,I223,@1446,I229| 1446:C5,88|008056082c2a4d004e000e0e0e0c00036403033b023a5607294d013b000c000203032902182c3f4d022d000e0e0c00032a2a4d0322000e0e0e0c0003642d3c4d0215000e0e0c00032a2a692968012704420e0e0e0e0e0e0e|@1448,I251,I105,I239,I252| 1447:S23|537472696e674376742e7363616e537472696e67283229 1448:S29|537472696e674376742e7363616e537472696e67283229726472283129 1449:S11|507265636564656e636520 1450:S37|206e6f7420616c6c6f7765642c206d757374206265206265747765656e203020616e642039 1451:C1,16|00802b3856172a2d7d0400020e0e0e0e|@773| 1452:O1|@1453 1453:C1,8|00803b2c69420e0e|@1212| 1454:S8|5661726961626c65 1455:C10,184|0080560829372a23062a3b4d00a9000e0e0c00032a3b4d009e000e0e0e0c00032928444d0191000e0e0c00034d0288000e0c000203032902012a294d0379004d0475000e0e0c000327060368560756184d0364002b2b4d055e000e0e0e0c00042a352b362c372d382e392f3a3023063123073223083323094d063c000e0c000b2a2c2b4d0731000e0e0c0004565a29351208000100f3ff2e2a69642a0e0c0002643b0e0e0e4f080f007100022e2a6929270902013b420e0e|@1456,I253,I113,I218,@1338,@762,@1055,@999,@1059,@1455| 1456:S36|50415253455f44454328292e706172736544656328332964656328342976617273283129 1457:O1|@1458 1458:C1,8|00813f2c2e6a430e|@1459| 1459:S27|50415253455f5452454528292e6d6b446972656374697665283229 1460:C9,144|0080560829372a23062a3b4d0081000e0e0c00032a3b4d0076000e0e0e0c00032928444d0169000e0e0c00034d0260000e0c000203032902012a294d0351004d044d000e0e0c00032706033c560756184d033c002b2b4d0536000e0e0e0c00040402003c28403b4d0625000e0e0c00042a2c452a46502a3b0e4f0713006100022a2a6929270802013b420e0e0e0e0e0e|@1456,I253,I113,I218,@1338,@762,@1055,I11,@1460| 1461:O1|@1462 1462:C2,24|00803c28403b4d000e000e0e0e0c0004280b2d2b6a64420e|@1463,I11| 1463:S26|50415253455f5452454528292e6d6b4f70656e54726565283129 1464:S2|6974 1465:C1,16|00822d2d2d6a2964440e0e0e0e0e0e0e|@1466| 1466:S28|50415253455f5452454528292e6d6b56616c42696e64696e67283329 1467:C7,120|00805607561729352a362b372c382d392e3a2f23063023073123083223094d0056000e0e0e0c000b4d014c002a3c2e352f36303731383239333a342306220c2307220d2308220e23094d022b000c000e0402004d0321001b0f273b3c3c2e4d0416000e0e0e0c00075029644d050900307d0700020e0e0e0e|@1469,@999,@1468,@774,@214,@1012,@989| 1468:O1|@1470 1469:S36|50415253455f44454328292e7061727365446563283329676c6f62616c456e762d283129 1470:C2,16|00802b384d0008002a2d0e0e7d040002|@773,@1471| 1471:S31|467265652074797065207661726961626c6573206e6f7420616c6c6f776564 1472:O1|@1473 1473:C4,464|00802b282b4d00c7010c000307d52b28434d00bb010c000307cb2b28424d00af010c000307d12b28414d00a3010c000307d52b28404d0097010c000307cb2b283f4d008b010c000303c82b28304d007f010c000303bc2b3c4d0074010e0c000303b02b282d4d0067010c000303a42b28304d005b010c000303982b3c4d0050010e0c0003038c2b283a4d0043010c000303802b28344d0037010c000303742b28364d002b010c000303682b28174d001f010c0003035c2b28134d0013010c000303502b280c4d0007010c000303442b28064d00fb000c000303382b28204d00ef0002042d002b000e0e0c000303242b280f4d00db00020219000c000303142b281a4d01cb000204090007000e0e0c000303033c02b72b28074d00b4000e0c000303782b280d4d00a7000c0003036c2b28184d009b000c000303602b28154d008f000c000303542b28124d0083000c000303482b28114d0077000c0003033c2b28144d006b000c000303302b280b4d005f000c000303242b3d4d0054000e0c000303182b281d4d0047000c0003030c2b281e4d013b000c000303033c022f2b28224d012c000e0c000303033c021f2b28264d011c000e0c000303033c020f2b28214d020c002d0e0e0e7e030003420e0e0e|@1052,I230,I229,I113| 1474:C20,576|0080560829372a23062a3b4d0031020e0e0c00032a3b4d0026020e0e0e0c00032928444d0119020e0e0c00034d0210020e0c000203032902012a2928394d03ff010c0003030c293b4d04f4010e0c000303033b06cc57672a2a4d05e3010c00036407dc29324d05d7010c00034d02d0010e0c000203155668292309294d06c0014d07bc010e0c00036502013b03515668567829352a362b372c382d392e3a2f23063023073123083223094d0892010e0e0e0c000b4d0988012a3b2e352f36303731383239333a342306220c2307220d2308220e23094d0a67010c000e6602013b0402002b28264d0456010e0e0e0c000303261209000100f1ff5698120b000100f2ff292b2d4f0b3701d100042d2a454d0c2d0146260506da2b28224d042101020217010e0e0c0003032a1209000100f1ff5698120b000100f2ff292b2d0202eb004f0dfb00d100042d2a454d0ef10046260502c12b28214d04e5000e0e0c000303251209000100f1ff5698120b000100f2ff292b2d4f0fc700d1000457c82e2b452a462606028e2b28144d04b2000e0e0e0c000303251209000100f1ff5698120b000100f2ff292b2d4f0f9300d1000457c82e2b452a462606025a568829352a362b372c382d392e3a2f23063023073123083223094d0867000c000b120b000100f1ff56b8120d000100f2ff293c2c2e020221001212000100f5ff0e0e0c0005292e4d103a000e0e0e0c000357f8312b452a46260929352a36290e0e0e4f111f00a100022b2a69292706020e5668283b2a4d120b000c00033b652706420e0e0e|@1476,I253,I113,I218,I230,I229,@762,@7190,@623,@999,@1477,@774,@1480,@1594,@1596,@1607,@1570,@1475,@1474,@983| 1475:O1|@1609 1476:S38|50415253455f44454328292e70617273654465632833297061727365546f7044656373283129 1477:O1|@1478 1478:C2,16|00802b384d0008002a2d0e0e7d040002|@1216,@1479| 1479:S74|4d4c205374616e6461726420726571756972657320273b27206265747765656e20646966666572656e74206b696e6473206f6620746f702d6c6576656c206465636c61726174696f6e2e 1480:C4,40|00822c4d0021000e0e0c00023b3b0e0e0e4f011300200001644d020b002e0e0e7d0700020e0e0e0e|@1482,@765,@1483,@1481| 1481:O1|@1592 1482:S36|50415253455f44454328292e706172736544656328332966756e63746f72446563283329 1483:C5,56|007f3b0e0e4f002f0001000256183e4d0125002b4d0220000e0c000464030b0e0e4f03130001000102013b2a2a692966410e0e0e0e0e0e0e|@1020,@1485,@1484,@1019,@1483| 1484:O1|@1591 1485:C25,1136|0080560829352a362b372c382d392e3a2f23063023073123083223094d0050040e0c000b562758392a2a69654d0140040e0c000256384d0236042b2b4d0330040e0c00042a352b362c372d382e392f3a3023063123073223083323094d0010040e0c000b2a2c2b4d0405040e0e0c0004567829372a23062a3b4d05f3030c00032a3b4d05ea030e0e0e0c00032928444d06dd030e0e0c00034d07d4030e0c000203032902012a2928344d06c3030c00032705030a294d08b7030c0002020a28282a4d09ab030c0003569758ab2a2a69654d019c030e0c000204040056b829372a23062a3b4d0588030e0c00032a3b4d057e030e0e0e0c00032928444d0671030e0e0c00034d0768030e0c000203032902012a2928354d0657030c0003270603243b4d0a4b030c00023c28403b4d0b40030e0c00042b3c454d0c3503462a472b48260306dc56b829372a23062a3b4d051f030c00032a3b4d0516030e0e0e0c00032928444d0609030e0e0c00034d0700030e0c000203032902012a294d0df1024d0eed020e0e0c00032706033456b856c9292b2e0e0e4f0fd702f20004654d0acf020c00023c28403b4d0bc4020e0c00042b3c454d0cb902462a472b48260306d32a4d10ab02694d01a6020e0e0e0c000256c84d029a022b2b4d0394020e0c00042a352b362c372d382e392f3a3023063123073223083323094d0074020e0c000b2a2c2b4d0469020e0e0c00041211000100020029372a23062a3b4d055202020296000e0e0e0c00032a3b4d0542020e0e0e0c00032928444d0635020e0e0c00034d072c020e0c000203032902012a29282f4d061b020c00032705030a294d080f020c0002020a283a2a4d0903020c0003314d11fb01694d01f6010e0e0e0c00021214000100020012150001000300292b2d02022300161200d6011900020000043c28403b4d0bc8010e0c0004220c3c4533462a472b48260d2956c829372a23062a3b4d05aa010e0e0e0c00032a3b4d059e010e0e0e0c00032928444d0691010e0e0c00034d0788010e0c000203032902012a2928354d0677010c00032705030a294d086b010c0002020a28292a4d095f010c000356e829372a23062a3b4d054f010c00032a3b4d0546010e0e0e0c00032928444d0639010e0e0c00034d0730010e0c000203032902012a2928324d061f010c000312160001000200282f4d130f012b4d140a010e0e0e0c00046403033c02171216000100020028324d13f1002b4d14ec000e0c000464033412160001000100294d15d90069644d01d3000c00021217000100020012180001000300292b2d161200ba001c00020000046602044d16ad001217000100020029372a23062a3b4d059b000c00032a3b4d0592000e0e0e0c00032928444d0685000e0e0c00034d077c000e0c000203032902012a29282d4d066b000c00032705030a294d085f000c0002020a283d2a4d0953000c000312190001000100121a0001000200121b0001000300292b2d0e16170032001f00020000040407003c28403b4d0b21000e0e0c00042a2213452c46221d47221a4833492a4a324b502a271e420e0e0e0e0e|@1487,@999,@1045,@1108,@1055,@1059,I253,I113,I218,@765,@983,@1488,I11,I48,@1491,@762,@1493,@1104,@1556,@1520,@1089,@1019,@1043,@992,@1486| 1486:C35,976|00823b571d4d00c7032a69644d01c0030e0c0002292e4d02b603314d03b1030e0e0c00052e4d04a703694d01a2030e0e0e0c0002294d05970369644d0191030e0e0c000228234d068603324d0781030e0e0c0004036a290e0e4f08730340000231373223062a3b4d0965030e0e0c00032a3b4d095a030e0e0e0c00032928444d0a4d030e0e0c00034d0b44030e0c000203032902012a29404d0a34030e0c00032705030a314d0c27030c0002020e4d0d1e03324d0e19030e0e0c00032a6506cc28134d060a03324d0705030e0e0c000407d030353136323733383439220c3a220d2306220e2307220f2308221023094d0fdd020e0e0c000b040300333634370403003b2a4d10c8020e0c00035029362a374d11bb022e2b6a2f2c452a462e47502f57da332a69644d01a5020e0e0c00022a22122b0e1612009602120001000004221237221323062a3b4d0983020c00032a3b4d097a020e0e0e0c00032928444d0a6d020e0e0c00034d0b64020e0c000203032902012a2928104d0a53020c00032705031222124d0c4602020233020e0e0e0c000202124d13360222134d0e3002020298000e0c0003220c4d142202694d011d020e0e0c00022d22152b0e1615000e02150001000004293b69221637221723062a3b4d09f8010e0c00032a3b4d09ee010e0e0e0c00032928444d0ae1010e0e0c00034d0bd8010e0c000203032902012a29404d0ac8010e0c00032705030e22164d0cba010e0e0e0c0002020e4d0dae0122174d0ea8010e0c00032e2b3b22124d169b010c0005271006ca294d178f01694d018a010e0e0e0c00024d1880012a334d197a010e0e0e0c000428344d066e01344d0769010e0e0c000407d832373323062a3b4d0957010c00032a3b4d094e010e0e0e0c00032928444d0a41010e0e0c00034d0b38010e0c000203032902012a2928354d0a27010c00032705031a404d1a1b010c0002294d1b13013b3b6b4d1c0c013b2b6a65026f576b2c2a69644d01fc000e0c000233373423062a3b4d09ed000e0e0c00032a3b4d09e2000e0e0e0c00032928444d0ad5000e0e0c00034d0bcc000202b9000e0c000203032902012a57cc2a2a4d1db6000e0e0e0c00032706030a294f08a700700002020a34342b4f159b009100046433373423062a3b4d098c00020263000e0c00032a3b4d097e000e0e0e0c00032928444d0a71000e0e0c00034d0b68000e0c000203032902012a2928354d0a57000c00032705030a334d0c4b000c0002020a2829344d0e3f000c00033c28403b4d1e34000e0c00044d1f2c002c2e2c6b6602153c28403b4d1e1d000e0e0c00044d2014002b2b6a64653b2a0e0e4f2107006000022706440e|@1559,@1484,@1045,@1560,@1069,@1104,@1561,@1089,@1019,@1563,I253,I113,I218,@765,@873,@983,@999,@965,@1584,@1567,@871,@1416,@1486,@1572,@1585,@1108,@1055,@1564,I48,-7,@762,I11,-2,-8,@1558| 1487:S49|50415253455f44454328292e706172736544656328332966756e63746f72446563283329646f46756e6374446563283129 1488:O1|@1489 1489:C2,16|00804d000a002c69420e0e0e0e0e0e0e|@1490,-5| 1490:S6|536967446563 1491:O1|@1492 1492:C3,136|00802b28294d007f000c000303033c026f2b28254d0070000e0c000303033c025f2b28214d0060000e0c000303033c024f2b280b4d0050000e0c000303033c023f2b281e4d0040000e0c000303033c022f2b28284d0030000e0c000303033c021f2b281d4d0020000e0c000303033c020f2b28074d0110002d0e0e0e7e030003420e0e0e0e0e0e0e|@1052,I229,I113| 1493:C2,40|00822d370404003b2a1205000100f6ff0e0c00035029383b3b4f000b004000022704440e0e0e0e0e|@1495,@1494| 1494:C29,1016|0080560712020003000b002a2a69654d00e5030e0e0c0002561756282b2b4d01d6032c4d02d1030e0e0c0005564829372a23062a3b4d03bf030c00032a3b4d03b6030e0e0e0c00032928444d04a9030e0e0c00034d05a0030e0c000203032902012a2928074d068f030c0003037156a829352a362b372c382d392e3a2f23063023073123083223094d076c030e0c000b56c7120e0003000c002a2a69654d0057030c000256d9293556f929364d08480312130001000200692c2b2b6a3c2a311217000200f9ff0e0e0e0c000429324d0926030e0e0e0c0003293b69270b06cf29281d4d0612030e0e0e0c0003036956a829352a362b372c382d392e3a2f23063023073123083223094d07ec020e0c000b56c7120e0003000c002a2a69654d00d7020c000256d84d0ace020e0e0e0c00025056d93b0e4f0bbf02e00001654d0cb7020c0002292c4d09ae020e0e0e0c0003293b69270506d62928284d069a020e0e0e0c0003036d56a829352a362b372c382d392e3a2f23063023073123083223094d0774020e0c000b56c7120e0003000c002a2a69654d005f020c000256d84d0a56020e0e0e0c00025056d93b020279010e4f0d4302e00001654d0c3b020c0002292c4d0932020e0e0e0c0003293b69270506d029281e4d061e020e0e0e0c0003031a56a84d0a10020e0c00023b56c83b0e4f0e0302d00001270406cf29280b4d06f5010e0e0c0003031a56a84d0ae8010e0c00023b56c83b0e4f0fdb01d00001270406cf2928214d06cd010202fa000e0e0c0003032456a84d0abc010e0c00023b56c83b0e4f10af01d00001654d11a7010c0002293b696602cf2928294d0697010c0003039956a84d0a8c010e0c00024d1284014d0080010e0c000256c756d82b2b4d1372012c4d026d010e0e0c000556f712110003000c002a2a69654d005701020284000c0002294d144b0169644d0045010e0e0c00021211000100020012120001000300292b2d02025c0016150026011600020000043b3b0e0e0e16160016011600000000022b2a6929654d170701020234000c0002293b69270b022a2928254d06f2000e0e0e0c0003031a56a84d0ae4000e0c00023b56c83b0e4f18d700d00001270402013b56b829372a23062a3b4d03c2000e0e0e0c00032a3b4d03b6000e0e0e0c00032928444d04a9000e0e0c00034d05a0000e0c000203032902012a2928394d048f000c00032706030e56b84d0a82000e0e0e0c000202013b56c829372a23062a3b4d036c000e0c00032a3b4d0362000e0e0e0c00032928444d0455000e0e0c00034d054c000e0c000203032902012a12130003000b002a2a4d1935000e0e0c0003270703283b4f1a2700c10002293b4d061e000e0e0e0c000303032b020c3b2c0e0e4f1b0b00e00002646402012a270c42|@1497,@1045,@1498,@1069,I253,I113,I218,I229,@999,@1499,@1475,@765,@1502,@1409,@1503,@1504,@1510,@1518,@1537,@1524,@1527,@1108,@1520,@1540,@1542,@1545,@762,@1494,@1496| 1495:S39|50415253455f44454328292e70617273654465632833297369676e617475726553706563283329 1496:C3,48|00802b3b4d0028000e0c000303091201000100f2ff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1555,I229,@1496| 1497:S57|50415253455f44454328292e70617273654465632833297369676e6174757265537065632833297061727365536967456e7472696573283129 1498:S9|5369676e6174757265 1499:C7,112|00805607561729352a362b372c382d392e3a2f23063023073123083223094d004e000e0e0e0c000b2e4d0143004d023f000c00034d0338002a69292c3c30353136323733383439220c3a220d2306220e2307220f2308221023094d0412000e0e0e0c000e504d0507002705420e0e0e0e|@1501,@999,@1039,@353,@1500,@774,@992| 1500:C1,16|00802b3856172a2d7d0400020e0e0e0e|@773| 1501:S75|50415253455f44454328292e70617273654465632833297369676e6174757265537065632833297061727365536967456e7472696573283129746869735369672d6e6577656e762d283129 1502:C6,96|007f1201000100f2ff294d00520069644d014c000e0c0002291203000100f1ff351204000100f1ff361205000100f1ff373b3c58700c000758283e4d0221002b4d031c000e0c000464030b0e0e4f040f0011000102013b2a2a69292704410e0e|@1197,@1194,@1045,@1089,@1019,@1502| 1503:C6,96|007f1201000100f2ff294d00520069644d014c000e0c0002291203000100f1ff351204000100f1ff361205000100f1ff373c3c58700c000758283e4d0221002b4d031c000e0c000464030b0e0e4f040f0011000102013b2a2a69292704410e0e|@1197,@1194,@1045,@1089,@1019,@1503| 1504:C5,56|007f3b0e0e4f002f000100021202000100f2ff3e4d0120002b4d021b000c000464030b0e0e4f030f0001000102013b2a2a692966410e0e0e|@1020,@1505,@1089,@1019,@1504| 1505:C14,256|0080570829352a362b372c382d392e3a2f23063023073123083223094d00e0000e0c000b5727294d01d50069644d02cf000c000257384d03c6002b2b4d04c0000e0c00042a352b362c372d382e392f3a3023063123073223083323094d00a0000e0c000b2a2c2b4d0595000e0e0c0004577829372a23062a3b4d0683000c00032a3b4d067a000e0e0e0c00032928444d076d000e0e0c00034d0864000e0c000203032902012a29282f4d0753000c00032705030a294d0947000c0002020a283a2a4d0a3b000c00035797120b0004000d002a2a69654d0227000c000257a857b22b2b2b4d0b19000e0e0c0004312a220d4d0c0c0022120e7b051000040e0e0e0e|@1507,@999,@1104,@1045,@1108,@1055,@1059,I253,I113,I218,@765,@983,@1072,@1506| 1506:O1|@1508 1507:S73|50415253455f44454328292e70617273654465632833297369676e6174757265537065632833297061727365536967456e7472696573283129746869735369672d646f56616c283129 1508:C1,16|008228082c2f2f6b440e0e0e0e0e0e0e|@1509| 1509:S25|535452554354555245535f28292e6d6b56616c536967283329 1510:C5,56|007f3b0e0e4f002f000100021202000100f2ff3e4d0120002b4d021b000c000464030b0e0e4f030f0001000102013b2a2a692966410e0e0e|@1020,@1511,@1089,@1019,@1510| 1511:C12,192|0080570829352a362b372c382d392e3a2f23063023073123083223094d00a0000e0c000b5727294d01950069644d028f000c000257384d0386002b2b4d0480000e0c00042a352b362c372d382e392f3a3023063123073223083323094d0060000e0c000b2a2c2b4d0555000e0e0c0004577828164d0648002b4d0743000c0004640328577712090004000d002a2a69654d022c000e0c0002578857942b2b2b4d081d000e0e0c00046602044d0911002c2a314d0a0a00220d0e0e0e7b050b0004|@1513,@999,@1514,@1045,@1338,@1055,@1059,@1089,@1019,@1072,@214,@1512| 1512:O1|@1516 1513:S72|50415253455f44454328292e70617273654465632833297369676e6174757265537065632833297061727365536967456e7472696573283129746869735369672d646f4578283129 1514:O1|@1515 1515:C2,16|00802b28164d0007002d0e0e7e030003|@761,I113| 1516:C2,16|00824d000a002c2f2f6b440e0e0e0e0e|@1517,-1| 1517:S24|535452554354555245535f28292e6d6b4578536967283329 1518:C5,56|007f3b0e0e4f002f000100021202000100f2ff3e4d0120002b4d021b000c000464030b0e0e4f030f0001000102013b2a2a692966410e0e0e|@1020,@1519,@1089,@1019,@1518| 1519:C15,264|0080570829352a362b372c382d392e3a2f23063023073123083223094d00e8000e0c000b57284d01de004d02da002b4d03d5000e0e0c00042a352b362c372d382e392f3a3023063123073223083323094d00b4000e0c000b2a2c2b4d04a9000e0e0c0004576829372a23062a3b4d0597000c00032a3b4d058e000e0e0e0c00032928444d0681000e0e0c00034d0778000e0c000203032902012a29282f4d0667000c00032705030a294d085b000c0002020a283a2a4d094f000c00035787120a0004000d002a2a69654d0a3b000c0002579857a9292b2d0e0e4f0b2b00d300040406003c28403b4d0c1d000e0e0c00042a220d4534464d0d0e00473b482a492c4a502a270e420e0e|@1521,@999,@1338,@1089,@1055,@1059,I253,I113,I218,@765,@983,@1045,@1520,I11,@992| 1520:C25,416|00824d009a014d0196010e0e0e0c0002292d4d028a01304d0385010e0e0c000528244d047a01304d0575010e0e0c000403a32d4d066901694d0164010e0c0002294d075b0169644d0155010e0e0c0002294d084b0169644d0145010e0e0c000230302b0e0e4f093701510004644d0a2f010c00022f373023062a3b4d0b21010e0e0c00032a3b4d0b16010e0e0e0c00032928444d0c09010e0e0c00034d0d00010e0c000203032902012a29404d0cf0000e0c00032705030b2f4d0ee3000c000250020e4d0fd900304d10d4000e0c000350296402a52e372f23062a3b4d0bc0000e0c00032a3b4d0bb6000e0e0e0c00032928444d0ca9000e0e0c00034d0da0000e0c000203032902012a293c4d0c90000e0c00032705035e2d4d078300694d017e000e0e0e0c00024d1174002a314d126e000e0e0e0c000430353136323733383439220c3a220d2306220e2307220f2308221023094d1347000c000b2a322b4d143d000e0e0c00042b27044d1531000e0e0c000202044d1626003b282a4d041f00324d051a000e0e0e0c0004030c2a0e0e4f170b0040000202012a2704440e0e|@1523,@1524,@1045,@1527,@1069,@1089,@1019,@1416,@1528,@759,@1493,@1488,I253,I113,I218,@765,@873,@983,@1108,@1055,@999,@1059,@1530,@992,@1522| 1521:S79|50415253455f44454328292e70617273654465632833297369676e6174757265537065632833297061727365536967456e7472696573283129746869735369672d646f537472756374757265283129 1522:C25,632|0080560829372a23062a3b4d0069020e0e0c00032a3b4d005e020e0e0e0c00032928444d0151020e0e0c00034d0248020e0c000203032902012a29281d4d0137020c00032705030a294d032b020c0002020e4d0422022a4d051d020e0e0c0003562829352a362b372c382d392e3a2f23063023073123083223094d06fa010e0e0e0c000b0403003b2a4d07eb010c00035029352a362b372c3b2a57b20e0c000356a7294d08d10169644d09cb010c000256b84d0ac2012b2b4d0bbc010e0c00043030301211000200fbff0e0e0e0c000456e829372a23062a3b4d009b010c00032a3b4d0092010e0e0e0c00032928444d0185010e0e0c00034d027c010e0c000203032902012a29282d4d016b010c00032705030a294d035f010c0002020a283d2a4d0553010c000312110001000100121200010002004d0c3e012b4d0d39012c4d0e34010e0c000512140001000100294d0f240169644d091e010e0e0e0c0002294d10130169644d090d010e0e0c0002121500010002002a2a324d11fa000e0e0e0c00042218220d342c22164d12e8000e0c000612180001000200282a4d13d7002b4d14d2000e0e0e0c000464030f290e161500c20019000100000202b6121800010002003e4d13ae002b4d14a9000e0e0c000464039c1218000100020029372a23062a3b4d008f000c00032a3b4d0086000e0e0e0c00032928444d0179000e0e0c00034d0270000e0c000203032902012a29281d4d015f000c00032706030e291615005200190001000002024312180001000200292306293b4d003a000e0e0e0c00032928444d012d000e0e0c00034d0224000e0c00026403054d16190010293b3e4d1711000e0e0c0004503b502b650201292717420e|@1534,I253,I113,I218,@765,@854,@983,@999,@965,@1043,@1045,@1053,@1055,@1067,@854,@1069,@1528,@1194,@1072,@1533,@1089,@1019,@1522,@1017,I255| 1523:S40|50415253455f44454328292e706172736544656328332970617273655369676e6174757265283329 1524:O2|@1108,@1525 1525:O1|@1526 1526:C2,16|00802b28244d0007002d0e0e7e030003|@761,I113| 1527:S18|5374617274206f66207369676e6174757265 1528:O1|@1529 1529:C2,16|00802b282a4d0007002d0e0e7e030003|@761,I113| 1530:O1|@1531 1531:C2,16|00804d000a002c69420e0e0e0e0e0e0e|@1532,-6| 1532:S14|5369676e61747572654964656e74 1533:O1|@1535 1534:S56|50415253455f44454328292e706172736544656328332970617273655369676e617475726528332967657457686572655479706573283129 1535:C2,24|00842b302f313068054d000b002a69641f050e0e0e0e0e0e|@1536,-9| 1536:S28|535452554354555245535f28292e6d6b576865726554797065283529 1537:O1|@1538 1538:C1,8|008028072c69420e|@1539| 1539:S12|537472756374757265446563 1540:C10,168|0080570829372a23062a3b4d0099000e0e0c00032a3b4d008e000e0e0e0c00032928444d0181000e0e0c00034d0278000e0c000203032902012a293c4d0168000e0c00032706035b570757184d0358002b2b4d0452000e0e0e0c00042a352b362c372d382e392f3a3023063123073223083323094d0530000e0c000b2a2c2b4d0625000e0e0c00042b27054d0719000e0e0c00023b4f080f001100022a2a69296602013b420e0e0e|@1541,I253,I113,I218,@1108,@1055,@999,@1059,@1530,@1540| 1541:S74|50415253455f44454328292e70617273654465632833297369676e6174757265537065632833297061727365536967456e7472696573283129746869735369672d736967696473283129 1542:O1|@1543 1543:C2,16|00804d000a002c69420e0e0e0e0e0e0e|@1544,-3| 1544:S10|496e636c756465536967 1545:C5,56|007f3b0e0e4f002f000100021202000100f2ff3e4d0120002b4d021b000c000464030b0e0e4f030f0001000102013b2a2a692966410e0e0e|@1020,@1546,@1108,@1019,@1545| 1546:C18,392|0080570829352a362b372c382d392e3a2f23063023073123083223094d0068010e0c000b5728281d4d015c012b4d0257010c0004574712060004000e002a2a69654d0343010c000257584d043a012b2b4d0534010e0c0004577829372a23062a3b4d0623010c00032a3b4d061a010e0e0e0c00032928444d070d010e0e0c00034d0804010e0c000203032902012a29282d4d07f3000c00032705030a294d09e7000c0002020a283d2a4d0adb000c000357983b0e0e4f0bcf00a000012e2a69322a220d4d0cc1000e0e0c000457e829372a23062a3b4d06af000c00032a3b4d06a6000e0e0e0c00032928444d0799000e0e0c00034d0890000e0c000203032902012a293e4d0780000e0c00032706031e57e8292309294d0d6e004d0e6a000e0e0e0c0003654d085f000c000202013b034f57e857f829352a362b372c382d392e3a2f23063023073123083223094d0037000c000b4d0f30002a3c2e352f36303731383239333a342306220c2307220d2308220e23094d100f000c000e260402023b5029270e420e0e|@1548,@999,@1089,@1019,@1045,@1108,@1055,I253,I113,I218,@765,@983,@1549,@1550,@7190,@623,@1547,@774| 1547:O1|@1553 1548:S77|50415253455f44454328292e70617273654465632833297369676e6174757265537065632833297061727365536967456e7472696573283129746869735369672d646f53686172696e67283129 1549:C7,88|007f580712020005000e002a2a69654d0045000e0e0c000258184d013a002b2b4d0234000e0c00041204000100f5ff282d4d0323002b4d041e000e0e0e0c000464030b0e0e4f050f0021000102013b2a2a69292705410e0e|@1020,@1045,@1108,@1055,@1053,@1019,@1549| 1550:O1|@1551 1551:C2,16|00824d000a002c2f2f6b440e0e0e0e0e|@1552,-4| 1552:S26|535452554354555245535f28292e6d6b53686172696e67283329 1553:C2,16|00802b384d0008002a2d0e0e7d040002|@773,@1554| 1554:S42|73686172696e67202e2e2e20616e64202e2e2e206973206e6f7420616c6c6f77656420696e204d4c3937 1555:S15|4c6973742e40283229617070283129 1556:O1|@1557 1557:C2,16|00802b28254d0007002d0e0e7e030003|@761,I113| 1558:C6,136|00805608282f4d007e002b4d0179000e0e0c000464032b560156185629292b2d0e4f0263005200042f2a3b4d0359000e0e0c000427040e0e0e4f044b000100020241560828324d003e002b4d0139000e0e0c000464032b560156185629292b2d0e4f0223005200042f2a3c4d0319000e0e0c000427040e0e0e4f040b0001000202012b420e0e0e0e|@1588,@1089,@1019,@1520,@1587,@1558| 1559:S35|50415253455f44454328292e706172736544656328332973747275637456616c283329 1560:S29|737472756374206f722066756e63746f72206170706c69636174696f6e 1561:O1|@1562 1562:C2,16|00802b28324d0007002d0e0e7e030003|@761,I113| 1563:C9,104|008056090403002a362b370403003b2a4d0054000e0c00035029362a374d0147002e2b6a2f2c452a462e47502f344d023600694d0331000e0e0c000256a82b2a2c4f042300d20004404d051b000c0002294d0613003b3b6b4d070c002c2b6a270e420e0e0e0e0e0e|@1565,@965,@1566,@1416,@1045,@1567,@1564,I48,-7| 1564:O1|@1581 1565:S47|50415253455f44454328292e706172736544656328332973747275637456616c283329737472756374456e64283129 1566:C2,40|00802b56180c0002293b4d001a000e0e0e0c0003030a2c56272d0e0e7d0400022964420e0e0e0e0e|@979,I229| 1567:C2,16|00823b3b0e4f00070010000264440e0e|@1569,@1568| 1568:C12,384|00805607581f2a2a69654d0072010e0e0e0c0002561829372a23062a3b4d015f010c00032a3b4d0156010e0e0e0c00032928444d0249010e0e0c00034d0340010e0c000203032902012a2928394d022f010c00032706031756184d0422010e0e0e0c00023b4f0517012100026406d1561829372a23062a3b4d0104010e0c00032a3b4d01fa000e0e0e0c00032928444d02ed000e0e0c00034d03e4000e0c000203032902012a587e2a2a4d06d2000e0e0e0c00032707032056185629292b2d0e0e4f07bb005200043b4f05b3004100022a2a6929270502a1561829372a23062a3b4d019b000c00032a3b4d0192000e0e0e0c00032928444d0285000e0e0c00034d037c000e0c000203032902012a294d086d004d0669000e0e0c000327060358561829352a362b372c382d392e3a2f23063023073123083223094d094200020237000e0e0e0c000b56385649293c2c30120a000200f5ff0e0e0c0005292d4d0a1e000e0e0e0c00033b4f0513007100022a2a6929270802013b64420e0e0e0e0e|@1571,@1045,I253,I113,I218,@765,@1568,@762,@1570,@1230,@999,@1475| 1569:S32|50415253455f44454328292e7061727365446563283329737472446563283329 1570:C21,448|00822d3528214d00b6012f4d01b1010e0e0c000403163b3b0e4f02a301200001644d039b012e0e0e7d07000228144d008e012f4d0189010e0e0c000407d02d352e362f3730383139323a332306342307220c2308220d23094d0464010e0c000b040300303631370403003b2a4d0550010e0c00035029362a374d0643012e2b6a2f2c452a462e47502f35303631373257da22102a69644d0726010e0e0e0c00022a22122b0e1608001601120001000004221237221323062a3b4d0903010c00032a3b4d09fa000e0e0e0c00032928444d0aed000e0e0c00034d0be4000e0c000203032902012a2928104d0ad3000c00032705030e22124d0cc6000e0e0e0c000202124d0dba0022134d0eb4000202a8000e0c00030403004d0fa5002211326a2a2a4531463047502a22154d109200694d078d000e0e0c00022a22182b0e1608007e00180001000004221837221923062a3b4d096b000c00032a3b4d0962000e0e0e0c00032928444d0a55000e0e0c00034d0b4c000e0c000203032902012a29404d0a3c000e0c00032705030e22184d0c2e000e0e0e0c0002020e4d11220022194d0e1c000e0c0003302b3c22174d120f00221c7b061b00054d13040064440e0e|@1573,@1089,@1019,@1574,@1537,@999,@965,@1577,@1045,@1567,I253,I113,I218,@765,@871,@983,@1578,@1416,@873,@1572,@992| 1571:S42|50415253455f44454328292e706172736544656328332973747244656328332967657444656373283129 1572:O1|@1579 1573:S38|50415253455f44454328292e7061727365446563283329737472756374757265446563283329 1574:C5,56|007f3b0e0e4f002f0001000256183e4d0125002b4d0220000e0c000464030b0e0e4f03130001000102013b2a2a692966410e0e0e0e0e0e0e|@1020,@1575,@1484,@1019,@1574| 1575:C18,432|0080560829352a362b372c382d392e3a2f23063023073123083223094d0090010e0c000b562758392a2a69654d0180010e0c000256384d0276012b2b4d0370010e0c00042a352b362c372d382e392f3a3023063123073223083323094d0050010e0c000b2a2c2b4d0445010e0e0c0004567829372a23062a3b4d0533010c00032a3b4d052a010e0e0e0c00032928444d061d010e0e0c00034d0714010e0c000203032902012a2928324d0603010c000356e8282f4d08f8002b4d09f3000c00046403033c021356e828324d08e2002b4d09dd000e0e0c000464032c56e7294d0ace0069644d01c8000e0c000256f812110001000300292b2d0e160b00b2001500020000046602044d0ca50056f829372a23062a3b4d0598000e0c00032a3b4d058e000e0e0e0c00032928444d0681000e0e0c00034d0778000e0c000203032902012a29282d4d0667000c00032705030a294d0d5b000c0002020a283d2a4d0e4f000c0003121200010001001213000100020012140001000300292b2d0e160f002e001800020000040406003c28403b4d101d000e0e0c00042a2216452213462c4733482a49324a502a2717420e0e0e0e|@1576,@999,@1045,@1108,@1055,@1059,I253,I113,I218,@1089,@1019,@1043,@1520,@992,@765,@983,@1486,I11| 1576:S49|50415253455f44454328292e7061727365446563283329737472756374757265446563283329646f537472446563283129 1577:C2,40|00802b56180c0002293b4d001a000e0e0e0c0003030a2c56272d0e0e7d0400022964420e0e0e0e0e|@979,I229| 1578:C1,16|00802b56180c0002502b56172c800002|@1429| 1579:C1,16|00833e2e302e3068051f040e0e0e0e0e|@1580| 1580:S27|535452554354555245535f28292e6d6b4c6f63616c646563283429 1581:C12,168|00807876613f3c28403b4d009a000e0e0e0c00042f3c4d018e000e0e0e0c00032928403b4d0080000e0c0004293b334d0275000e0e0c0004503c28402b4d0067000c00044d03600033693c28402b4d0056000e0e0e0c00044d044c002a302e6b2706053c0e0e00ff6d29353f4d0538000e0c000303262c4d042d004d0629000e0e0c00034d0720002a4d081b000c00034d0914004d0a10002b6a651002002910420e0e0e0e0e0e0e|@1583,I11,I106,I255,@585,-1,I229,@364,@1582,@353,@7129,@237| 1582:S16|486173685461626c652e686173683a20 1583:S21|486173685461626c652e686173684d616b65283129 1584:C2,40|00802b56180c0002293b4d001a000e0e0e0c0003030a2c56272d0e0e7d0400022964420e0e0e0e0e|@979,I229| 1585:O1|@1586 1586:C2,16|00802b28344d0007002d0e0e7e030003|@761,I113| 1587:O1|@1589 1588:S51|50415253455f44454328292e706172736544656328332973747275637456616c283329646f436f6e73747261696e7473283129 1589:C1,8|00823f2e2e2e6b44|@1590| 1590:S32|535452554354555245535f28292e6d6b536967436f6e73747261696e74283329 1591:C2,16|00802b28234d0007002d0e0e7e030003|@761,I113| 1592:C1,8|00803d2c69420e0e|@1593| 1593:S10|46756e63746f72446563 1594:O1|@1595 1595:C2,16|00802b28264d0007002d0e0e7e030003|@761,I113| 1596:C4,40|00822c4d0021000e0e0c00023b3b0e0e0e4f011300200001644d020b002e0e0e7d0700020e0e0e0e|@1598,@765,@1599,@1597| 1597:O1|@1605 1598:S38|50415253455f44454328292e70617273654465632833297369676e6174757265446563283329 1599:C5,56|007f3b0e0e4f002f0001000256183e4d0125002b4d0220000e0c000464030b0e0e4f03130001000102013b2a2a692966410e0e0e0e0e0e0e|@1020,@1600,@1089,@1019,@1599| 1600:C15,264|0080560829352a362b372c382d392e3a2f23063023073123083223094d00e8000e0c000b56284d01de004d02da002b4d03d5000e0e0c00042a352b362c372d382e392f3a3023063123073223083323094d00b4000e0c000b2a2c2b4d04a9000e0e0c0004566829372a23062a3b4d0597000c00032a3b4d058e000e0e0e0c00032928444d0681000e0e0c00034d0778000e0c000203032902012a29282d4d0667000c00032705030a294d085b000c0002020a283d2a4d094f000c00035687120a0003000a002a2a69654d0a3b000c0002569856a9292b2d0e0e4f0b2b00d200040404003c28404d0c1e004d0d1a000e0e0e0c00042a220d4534462a472c48502a270e420e0e0e0e0e|@1602,@999,@1338,@1089,@1055,@1059,I253,I113,I218,@765,@983,@1045,@1520,@1601,I11| 1601:O4|@1604,@1603,0,0 1602:S49|50415253455f44454328292e70617273654465632833297369676e6174757265446563283329646f536967446563283129 1603:S9|554e444546494e4544 1604:O3|0,@584,@466 1605:C1,8|008028052c69420e|@1606| 1606:S12|5369676e6174757265446563 1607:O1|@1608 1608:C2,16|00802b28224d0007002d0e0e7e030003|@761,I113| 1609:C2,24|00813c28403b4d000e000e0e0e0c000428062e2e2c6b6443|@1610,I11| 1610:S27|535452554354555245535f28292e6d6b546f704c6576656c283229 1611:O3|@1050,@1618,@1617 1612:C16,464|00812b372c23062a3b4d00c3010c00032a3b4d00ba010e0e0e0c00032928444d01ad010e0e0c00034d02a4010e0c000203032902012a29283f4d0193010c00032705033b2b352c362d372e382f39303a3123063223073323083423094d0370010e0c000b28222a4d0465010e0e0c00032928224d0459010e0e0c00036506cb2b372c23062a3b4d0046010e0e0e0c00032a3b4d003a010e0e0e0c00032928444d012d010e0e0c00034d0224010e0c000203032902012a56572a2a4d0512010e0e0e0c0003270603222b352c362d372e382f39303a3123063223073323083423094d03ec000e0c000b02692b372c23062a3b4d00db000c00032a3b4d00d2000e0e0e0c00032928444d01c5000e0e0c00034d02bc000e0c000203032902012a293b4d06ac000e0c000303033c020b2928454d079c000e0c000303054d089200104d098d002a4d008800020207000e0c00032927062c352d362e372f383039313a322306332307342308220c23094d0a60000e0c000b2e4d0b57004d0453000c0003292c4d044a000e0e0e0c0003294d0c3f004d043b000c00034d0d34002a69292e3c3435220c36220d37220e38220f3922103a221123062212230722132308221423094d0e0a0022150e0e0e7b0f0a000e|@1614,I253,I113,I218,@993,@353,@762,I234,I231,@61,@1024,@999,@1615,@1616,@1613,@774| 1613:C1,16|00802b3856172a2d7d0400020e0e0e0e|@773| 1614:S20|534b4950535f28292e6e6f74666f756e64283229 1615:S14|2065787065637465642062757420 1616:S10|2077617320666f756e64 1617:O1|@1622 1618:O3|@1050,@1620,@1619 1619:O1|@1621 1620:O3|@1050,@1053,@1021 1621:C2,16|00802b28404d0007002d0e0e7e030003|@761,I113| 1622:C2,16|00802b28414d0007002d0e0e7e030003|@761,I113| 1623:O3|@1050,@1625,@1624 1624:O3|@1050,@1626,@1230 1625:O3|@1050,@1594,@1607 1626:O3|@1050,@1628,@1627 1627:O1|@1630 1628:O1|@1629 1629:C2,16|00802b28214d0007002d0e0e7e030003|@761,I113| 1630:C2,16|00802b28144d0007002d0e0e7e030003|@761,I113| 1631:O3|@1050,@1632,@1043 1632:O3|@1050,@1104,@1561 1633:O3|@1050,@1332,@1416 1634:O3|@1050,@1175,@1176 1635:O3|@1050,@1230,@1628 1636:O3|@1050,@1108,@1637 1637:O1|@1638 1638:C2,16|00802b28134d0007002d0e0e7e030003|@761,I113| 1639:O3|@1050,@1640,@1628 1640:O3|@1050,@759,@1230 1641:O3|@1050,@1416,@1194 1642:O3|@1050,@1491,@759 1643:O3|@1050,@1491,@1416 1644:O3|@1050,@1643,@1194 1645:O3|@1050,@1646,@1194 1646:O3|@1050,@1175,@1043 1647:O3|@1050,@1192,@1413 1648:O3|@1050,@1514,@1043 1649:O3|@1050,@1650,@1342 1650:O1|@1651 1651:C2,16|00802b28094d0007002d0e0e7e030003|@761,I113| 1652:O3|@1050,@1653,@1342 1653:O1|@1654 1654:C2,16|00802b281c4d0007002d0e0e7e030003|@761,I113| 1655:O3|@1050,@1514,@1312 1656:O3|@1050,@1355,@1104 1657:O3|@1050,@1176,@1658 1658:O1|@1659 1659:C2,16|00802b28374d0007002d0e0e7e030003|@761,I113| 1660:O3|@1050,@1175,@759 1661:O3|@1050,@1660,@1176 1662:O3|@1050,@759,@1416 1663:O3|@1050,@1104,@1265 1664:O3|@1050,@1108,@1236 1665:O3|@1050,@1514,@1204 1666:O1|@1667 1667:C5,40|00824d0022002c694d011c002d2b6a4d0215002a6929314d030d00322f320e7b060800050e0e0e0e|@1669,@1670,@1672,@1668,I48| 1668:C1,16|00802b352c3656272d0e0e0e7e030003|@1683| 1669:S31|535452554354555245535f28292e646973706c617953747275637473283329 1670:C10,248|00832d3b4d00f0000e0c000303033b06cc2d36293b4d00df000c0003032a2e352d3b4d01d2000e0e0e0c0003030e562729384d02c2002a307d0a0002292e69312e0e0e0e7d0800022e352d3b4d01a8000e0c0003030e562729384d039a002a307d0a00022e282c4d048d000e0e0c000303033c020b2e283b4d047c000e0c00034d0574000e0c000256372923064d0667002a0e0e0e0c0002512b3069330c000250564729352c3b692a0c00025156572938332a0e0e0c000251566729373b2a0e0e0c000251567729354d072b002a0e0e0e0c000251333c4d081d00020215000e0e0c0003220e32220e2c220d220f0e7b060f00051f040e0e|@1671,I229,I232,@1028,@1028,I24,I218,@342,@338,I107| 1671:S45|535452554354555245535f28292e646973706c617953747275637473283329646973706c61794c697374283429 1672:C92,1968|00812b3b4d00a8070e0c0003030e560729384d019a072a2e7d0600022c354d028e074d038a070e0e0e0c00030a1100cd049100a100710181014904b1066d0385022400d9031503d505290719010d073700f501560729384d0455072a2e0e0e0e7d06000206ca2c364d05440756272c6a56272923064d0637072a0e0e0e0c000251563729384d0727072a0e0e0e0c000251564729354d0817072a0e0e0e0c0002514d090b072d69292f4d0a03073456a80e0c000550566729373b2a347d0c00022c36561729382b2a2f0e0e0e7d0700022c3656172923064d0bd5062a0e0c000251562729384d0cc7062a0e0e0e0c000251563729354d0db7062a0e0e0e0c0002514d0eab062e69292e4d0fa3063356980e0c000550565729354d1093062a0e0e0e0c000251566729384d1183062a02027a060e0e0e0c000251567729373b2a220c0e0e0e7d0d00022c364d12620656272c6a56272923064d1355062a0e0c000251563729384d1447062a0e0e0e0c000251564729354d1537062a0e0e0e0c0002514d162b062d69292f4d1723063456a80e0c000550566729373b2a347d0c00022c36561729382b2a2f0e0e0e7d0700022c3656172923064d18f5052a0e0c000251562729384d19e7052a0e0e0e0c000251563729354d1ad7052a0e0e0e0c0002514d1bcb052e69292e4d0fc3053356980e0c000550565729354d1cb3052a0e0e0e0c000251566729384d1da3052a0e0e0e0c000251567729373b2a220c0e0e0e7d0d00022c372d3856272923064d1e7f052a0e0e0e0c000251563729384d1f6f052a0e0e0e0c000251564729354d205f052a0e0e0e0c000251565729382f4d214e054d224a050e0e0e0c00032a0c000251566729354d2337052a0e0e0e0c000251323c4d0329050e0e0c000356873b4d241d050e0e0c0002312c2c2c3c4d250f050c00065056a729373b2a220f0e0e0e7d1000022c372d3856272923064d26ef042a0e0e0e0c000251563729384d27df042a0e0e0e0c000251564729354d28cf042a0e0e0e0c000251565729382f4d29be044d22ba040e0e0e0c00032a0c000251566729354d2aa7042a0e0e0e0c000251323c4d0399040e0e0c000356873b4d248d040e0e0c0002312c2c2c3c4d257f040c00065056a729373b2a220f0e0e0e7d1000022c364d2b660456272c6a56272923064d2c59042a0e0c000251563729384d2d4b042a0e0e0e0c000251564729354d2e3b042a0e0e0e0c0002514d2f2f042d69292f4d3027043456a80e0c000550566729373b2a347d0c00022c362d3756272923064d3107042a0e0e0e0c000251563729382c28284d22f4030e0c00032a0c000251564729354d32e3032a0e0e0e0c0002512d31300e0c000350565729354d33cb032a0e0e0e0c0002515667293828292a0e0c000251567729373b2a220c0e0e0e7d0d00022c362d3856272923064d349b032a0e0e0e0c0002512b4d0f8e034d358a030e0e0e0c000303043b500228563729382d4d3675034d2271030e0e0c00032a0c000251564729354d375f032a0e0e0e0c000226042e3c4d0350030e0c00032b2a2f0e0e0c000350564729373b2a327d0a00022c372d3856272923064d382b032a0e0e0e0c000251563729384d391b032a0e0e0e0c000251564729354d3a0b032a0e0e0e0c0002512d4d3bfe020e0e0e0c000203043b500220565729384d3cea022a0e0e0c000251566729354d3ddb022a0e0e0e0c000226044d3ece02566769292e283d3456a80e0c000550566729373b2a347d0c00022c3629362a372b382c3956572923064d3fa1022a0e0c0002512d32310e0c000350566729354d408b022a0e0e0e0c000251567729384d417b022a0e0e0e0c000251568729354d426b022a0e0e0e0c000251569729384d435b022a0e0e0e0c00025156a729354d444b022a0e0e0e0c00025156b73b4d243c020e0c00023222102b2d3c4d452e020e0e0e0c00065056d72938220c2a0e0c00025156e729354d4613022a0e0e0e0c00025156f72938283d2a0e0c0002511211000100010029354d47f2012a0e0e0c00025122133c4d03e4010e0c0003121300010001003b4d24d4010e0c0002220f2c2c2c3c4d25c6010e0e0e0c0006501215000100010029373b2a22190e0e7d1a00022c362d372e3956372923064d489d012a0e0c000251564729382c03064d498c0102044d4a86012a0e0e0c000251565729354d4b77012a0e0e0e0c000251313c4d0369010e0e0c00034d4c600131692930283b2d56c80c000550568729354d4d4b012a0e0e0e0c000251569729384d4e3b012a0e0e0e0c00025156a729354d4f2b012a0e0e0e0c000251220d3c4d031c010e0c00034d501401220d6929220d283b2d121200010002000e0c00055056d729354d51f7002a0e0e0e0c00025156e729384d52e7002a0e0e0e0c00025156f729373b2a22140e0e0e7d1500022c3656172923064d53c5002a0e0c000251562729384d54b7002a0e0e0e0c000251563729354d55a7002a0e0e0e0c0002512f3c4d0399000e0e0c00034d5690002f69292f4d0f88002d56a80e0e0c000550566729373b2a347d0c00022c362c3c4d036c000e0c000356272b2b2b4d575f00310e7b050700042c362d372e382e3c4d034c000e0c00032c2a2f0e0e0c000350564729382c03064d58340002044d592e002a0e0e0c000251565729354d5a1f002a0e0e0e0c000251313c4d0311000e0e0c00032e2a32347e0b0003430e0e0e|@1674,I232,@1028,-9,I107,@1675,@1676,@356,@856,@338,@1680,@866,@344,@852,@338,@1682,I48,@338,@873,@1684,@356,@892,@338,@1686,@866,@344,@911,@338,@1688,@338,@873,@342,@898,@344,@1673,@353,@338,@1689,@1704,@342,@907,@344,@1673,@338,@1794,@356,@905,@338,@1797,@866,@338,@342,@342,@338,I24,@1673,@1799,@356,@850,@338,I218,@854,@338,@1800,@356,@338,@909,@338,@854,@338,@1802,@338,@338,@356,@915,@927,@338,@1807,@338,@871,@338,@1808,@338,@873,@1795,@929,@338,@1809,@1810,@1679,@1673,@338| 1673:S2|203a 1674:S41|535452554354555245535f28292e646973706c617953747275637473283329646973706c6179283229 1675:S5|3c6261643e 1676:C9,200|00812c362d372e382f3a56472923064d00b5002a0e0c000251565729382f2a0e0e0c0002512b353b4d019c000e0c000303043b50023c566729382e03064d02870002044d0381002a0e0c000251567729354d0473002a0e0e0e0c000251333c4d0565000e0e0c00032e2a56b80e0c000326042d353b4d014f000c000303043b500234566729384d063e002a0e0e0c000251567729354d072f002a0e0e0e0c000251333c4d0521000e0e0c0003302a56b80e0c00032604566729373b2a340e0e0e7d0c00020e0e0e0e|@1678,@356,I229,@1679,@1673,@338,I107,@1677,@338| 1677:S2|203d 1678:S61|535452554354555245535f28292e646973706c617953747275637473283329646973706c6179283229646973706c617953747275637442696e64283229 1679:S3|203a3e 1680:C1,16|00802b352c3656272d0e0e0e7e030003|@1681| 1681:S61|535452554354555245535f28292e646973706c617953747275637473283329646973706c6179283229646973706c617953747275637442696e64283129 1682:C1,16|00802b352c3656272d0e0e0e7e030003|@1683| 1683:S41|535452554354555245535f28292e646973706c617953747275637473283329646973706c6179283129 1684:C6,96|00812c362d3856272923064d0051002a0e0c000251563729382d4d0142004d023e000e0e0e0c00032a0c000251564729354d032b002a0e0e0e0c000251303c4d041d000e0e0c00032d2a56880e0c000350566729373b2a347d0c00020e0e0e0e|@1685,@356,@1677,@353,@338,I107| 1685:S58|535452554354555245535f28292e646973706c617953747275637473283329646973706c6179283229646973706c617953696742696e64283229 1686:C1,16|00802b352c3656272d0e0e0e7e030003|@1687| 1687:S58|535452554354555245535f28292e646973706c617953747275637473283329646973706c6179283229646973706c617953696742696e64283129 1688:C1,16|00802b352c3656272d0e0e0e7e030003|@1683| 1689:O1|@1690 1690:C4,40|00803c28404d001f004d011b000c00043c28403b4d0110000e0c00044d0208002a2c6a65420e0e0e|@1692,-1,I11,@1691| 1691:C10,224|00805607293b4d00d6000e0e0e0c000329293b4d01c9000e0e0c000303033b021f29352a362a3629324d02b3000c00036403052a68010207292503511e2b3b6564293b4d0199000e0e0c0003038856385648293b4d0088000e0c0003293c4d037e000e0e0e0c00032c3b2b4d0471000e0e0c000450323533364d0563000c000303064d065a00020228275688293b4d004e000e0e0e0c0003644d0743000c00022a2a4d083a000e0e0e0c000356a72a220e6956c7293b4d0026000e0e0e0c00032b2a692d3b2b4d0416000e0e0e0c0004502e270c020629352935296566420e0e|@1694,I253,I229,@1695,I106,I255,@1698,@1701,@1693,@353| 1692:S30|545950455f5452454528292e7661724e616d6553657175656e6365283129 1693:O1|@1702 1694:S33|545950455f5452454528292e7661724e616d6553657175656e6365283129283129 1695:O1|@1696 1696:C2,24|00812c352c352a2a4d000c002f0e0e0e7e0600030e0e0e0e|@1697,I251| 1697:S23|5354525543545f56414c5328292e73616d655476283229 1698:O1|@1699 1699:C4,40|00812b3f4d0020000e0c0003293b4d0116000e0e0e0c0003644d020b002c0e0e7d0400020e0e0e0e|@1700,I243,I251,I218| 1700:S27|5354525543545f56414c5328292e7476457175616c697479283229 1701:S2|2727 1702:C13,216|00802b281a4d00cf000c000303482b3b4d00c4000e0c0003293c4d01ba000e0e0e0c000303032c020b2c28194d02a8000e0c000329281a4d039d000e0e0c0003293c4d0292000e0e0e0c0003664d0487000c000202044d057e002c281a4d0677000c0003293b4d016e000e0e0e0c000303033c0218293b4d005d000e0e0c00033c2a4d0152000e0e0e0c000364030329020a29281a4d073f000c00032928614d0735000e0e0c0003293b4d082a000e0e0e0c000303033c020b2928ff4d0918000e0c000303054d0a0e0010292d2a4d0b0600320e7e080003|@1703,I231,I229,I107,I109,@1693,I48,I110,I106,I234,I233,@370,@353| 1703:S40|545950455f5452454528292e7661724e616d6553657175656e63652831292831296e616d65283129 1704:O1|@1705 1705:C2,16|00843b30304f000700200003641f050e|@1707,@1706| 1706:C54,1304|00813b3b2e4d000f050c0002294d0107050c00020341294d02fd040e0e0c000229352a364d03f0040e0c0003294d04e7040c00020312565929382c56880c00022a330e0e7d0b000229310e0e0e4f05c7046100036506cc294d06bc040e0c000207cc294d07b1040e0e0c00022935293b4d08a4040e0c0003035a2a362b37294d0995040e0e0c0002294d0a8b040c00024d0b84040e0c00026403032a0212294d0975040e0e0c00024d0c6c040e0c00025689293856a703032b02120402002c2a4d0d54040e0c000350293629652a220d7d0e00022a362b37323b4d0e3a040e0e0e0c00030312567929384d0f2a042a220c0e0e0e7d0d00022b4d101b040c00024d1114040e0c000203062b35296402054d120404104d00ff030c00022c4d10f7030202eb030c00024d11ec0302027c010e0c000203062c36296402054d13d803102b4d09d2030e0e0e0c0002294d0ac7030c00024d0bc0030e0c00026403032c02122b4d09b1030e0e0c00024d0ca8030e0c000256a92923064d149b032a0e0e0e0c0002513b2c4d088d030e0e0c00034d1184030e0c000203033c022c2c4d1576030e0e0e0c000203033c021c2c4d1666030e0e0e0c0002030e2c4d1759030e0e0c00023c6402013b039d220d3c4d0e46030e0e0e0c0003031256b929384d1836032a0e0e0c00022603027a56b92923064d1923032a0e0e0e0c00025156c9293828282a0e0c00025156d929354d1a07032a0e0e0e0c00025122103c4d1bf8020e0c0003282c2a220c161c00ea021300000000045056f929354d1ddb022a0e0e0e0c00025112110001000300293828292a0c0002511212000100030029373b2a0e0c000226090219220d3c4d1ba9020e0e0c00032d2a0e0e0e4f059b02d100035156b929354d1e8f022a0e0e0e0c00025156c929382d2a0e0e0c00025156d929373b2a22120e0e0e7d130002294d1667020c000207d5294d175d020e0e0c000229352a36313b4d0e4e020e0e0e0c0003030e566929384d1f3e022a347d0c00022a4d0033020c000256792923064d2027022a0e0e0e0c0002512a4d161a020e0e0e0c0002030e2a4d170d020e0e0c00023c6402013b030c2a344f21fb01900003500216333c4d1bef010c00032b2a0e0e0e4f05e301a1000351568929354d22d7012a0e0e0e0c000251569929384d23c7012a0e0e0e0c00025156a929354d24b7012a0e0e0e0c000251220d3c4d1ba8010e0c00032f2a0e0e0e4f059b01d100035056c929373b2a2211020207000e0e0e7d120002294d257f010c000207ca294d2675010e0e0c000229352a36313b4d0e66010e0e0e0c0003030e566929384d2756012a347d0c00022c4d154b010c0002033656692923064d283d012a0e0c0002514d2933012b2a0e0e0c0002282a220c2b4f1c2301b0000450569929373b2a220e0e0e0e7d0f000256692923064d2a07012a0e0e0e0c00025156792938287b2a0e0c0002513b343c4d1bec000e0c0003292e0e0e0e4f2bdf00b00003502e4d11d6000e0e0e0c0002032a2d3b4d08c8000e0c000303064d2cbe0002044d2db80056b929382b2a020226000e0e0e0c0002260402023b5056a92938287d2a0c00025156b929373b2a22100e0e0e7d110002294d2e83000c0002034e294d2f79000e0e0c0002293b4d086e000e0e0e0c0003030e564929384d305e002a327d0a00023b56592923064d314e002a0e0e0c0002512b0e0e0e4f323f0060000250566929373b2a347d0c0002294d042b000c0002030e563929384d331e002a317d090002563929384d3410002a310e0e7d09000266430e0e0e0e0e0e|@1709,@1710,@1145,@1147,@1714,@1717,@1706,@1744,@1746,I229,@1748,@1153,@1156,@1751,@1754,I232,@1028,I105,I218,@1773,@1773,@342,@1775,@1778,@1780,@1028,@342,@342,I107,@1782,@342,@338,@1028,@342,@1783,@338,@917,@338,@1720,@1722,@1028,@342,@1786,@206,@1788,@1028,@1790,@1740,@1712,@1791,@342,@1792,@1791,@1708| 1707:S20|545950455f5452454528292e7444697370283529 1708:S3|626164 1709:S28|545950455f5452454528292e74446973702835296469737050283229 1710:O1|@1711 1711:C18,304|00802b4d0029010e0e0c000207d42b4d011d010e0e0c000229352a364d0210010e0c0003294d0307010c00022a2a4d04fe000e0e0e0c000303043b50020b2b2a4d05ec000e0c000350294d06e2000e0e0e0c000203032e02cc294d07d2000e0e0e0c000203a3294d08c5000e0e0c00022935293b4d09b8000e0c000303872a37294d0aab000c00024d0ba4000e0c0002036f29352c363b3b2c352d364d0290000e0c0003294d0787000c00020321294d087d000e0e0c000229352a3629300e0e0e4f0c6b00f00003292c69270402054d0d5d001029352a36292b336a4d0e5000020244000e0c0002220e2a4d0541000e0e0c0003502a0303290202221127090201316402012b65021c294d0f22000e0e0e0c0002030e294d1015000e0e0c00022f640201296602012b420e0e0e0e0e0e|@1713,@1145,@1147,@1714,@1710,I251,@1140,@1717,@1720,@1722,I229,I105,I218,@1724,@1738,@1142,@1740,@1712| 1712:O1|@1743 1713:S23|545950455f5452454528292e6576656e7475616c283129 1714:O1|@1715 1715:C2,16|00812c3b4d0008000e0c00032964430e|@1716,I253| 1716:S24|5354525543545f56414c5328292e747656616c7565283229 1717:O1|@1718 1718:C3,24|00804d0012002c354d010c002d0e0e0e7e0300030e0e0e0e|@1719,-1,I229| 1719:S9|456d70747954797065 1720:O1|@1721 1721:C3,24|00804d0012002c354d010c002d0e0e0e7e0300030e0e0e0e|@1144,-2,I229| 1722:O1|@1723 1723:C1,16|00802b362c372d382b2b2b6a66420e0e|@1144| 1724:C8,200|00812c3b4d00c0000e0c000303162b3b4d00b4000e0c000303033b02054d01a7001002a02c3529352e362e3b4d0098000e0c000303260402002c352d362b0e0e0e4f02830061000450292b3b0e4f0377006100032a2a6929270402672e352f362a352d2a4d0460000e0c0003293b4d0056000e0e0e0c000303112d2c0e4f0347008100032d2a6929650236293b4d0537000c00030326040200303531362b0e0e0e4f022300a1000450292f220c4f031700a100032a2a6929270402054d06080010270466430e0e0e|@1726,I229,@1725,@1727,@1724,@1134,I234,@1725| 1725:O3|@7129,@237,@1737 1726:S39|545950455f5452454528292e6576656e7475616c283129616464546f496e7374616e6365283229 1727:C10,160|00822c4d0099000e0e0c000203872c4d018d000e0e0c0002561429352a364d027e000e0e0e0c0003563429352a364d036e000e0e0e0c00036403033c020e2b352c364d035a000e0e0e0c00032c352d364d044c000e0c000303033c0210564429352a364d0439000e0e0c0003640402004d052c002d2d3b2e2e4d0623000c00075029644d0719000e0e0c00023134452a46270602054d08070010440e0e0e0e0e|@1729,@1145,@1147,@1730,@1698,@1733,@214,@1012,@989,@1728| 1728:O3|@7129,@237,@1736 1729:S40|545950455f5452454528292e6576656e7475616c2831296372656174654e65774669656c64283329 1730:O1|@1731 1731:C5,48|00812b3e4d0028000e0c0003293b4d011e000e0e0e0c0003030e4d0212002a4d030d002e7e0500032964430e0e0e0e0e|@1732,I216,I234,@190,I106| 1732:S24|5354525543545f56414c5328292e74764c6576656c283229 1733:O1|@1734 1734:C4,40|00812b3c4d0020000e0c0003293b4d0116000e0e0e0c0003644d020b002c0e0e7d0400020e0e0e0e|@1735,I243,I251,I218| 1735:S23|5354525543545f56414c5328292e74765765616b283229 1736:S43|6372656174654e65774669656c643a204e6577206669656c64206973206e6f742061207479706520766172 1737:S51|616464546f496e7374616e63653a20456e74727920696e20696e7374616e636520627574206e6f7420696e2067656e65726963 1738:O3|@7129,@237,@1739 1739:S35|756e6966795265636f7264733a204e6f742061206c6162656c6c6564207265636f7264 1740:O1|@1741 1741:C2,16|00803d2c354d0007002d0e0e7e030003|@1742,I229| 1742:S11|4f7665726c6f6164536574 1743:C1,8|00802b36420e0e0e|@1742| 1744:O1|@1745 1745:C3,24|00804d0012002c354d010c002d0e0e0e7e0300030e0e0e0e|@1162,-3,I229| 1746:O1|@1747 1747:C1,16|00802b362c372d382b2b2b6a66420e0e|@1162| 1748:O1|@1749 1749:C3,40|00802b353b4d001f000c000303062b362964020e2b36293b4d010c000e0c00032965420e0e0e0e0e|@1750,I229,I253| 1750:S22|5354525543545f56414c5328292e706c696e67283129 1751:O1|@1752 1752:C1,8|00802b352964420e|@1753| 1753:S23|5354525543545f56414c5328292e74634e616d65283129 1754:O1|@1755 1755:C11,176|00812c4d00a9000e0e0c00023b2a2f6a294d019b004d0297000c000329352a362a4d038b000c0002030a304d04810045324602782a4d0577000c000229352a362b373c2b4d0668000e0c000303102b3b2b6a4d075a000e0e0e0c000202162a3c4d084c000e0c00032c2a2c6a644d073f000c0002294d0537000c000229352a362b37292c2c4d0927000c0004334d051f000c000229352a362b37292c2c4d090f000c000422162f452a46270f2705430e|@1757,I223,@1758,@1761,@1769,I48,@1765,I233,@1756,I240,@1121| 1756:O1|@1772 1757:S27|5554494c49544945535f28292e73706c6974537472696e67283229 1758:O1|@1759 1759:C3,24|00802b282e4d000f000c00034d0108002c8000020e0e0e0e|@1760,I229,I218| 1760:S40|5554494c49544945535f28292e73706c6974537472696e672832293c7061747465726e3e2d283129 1761:O1|@1762 1762:C4,48|00812c4d0029000e0e0c000229352a362b373b2c2c4d0117000c00030402002a2a4f020b0080000350292707430e0e0e|@1764,@1765,I239,@1763| 1763:C8,232|008156032d2a4d00de000e0e0e0c000364032d56012d3b2b6a644d01ca000e0e0e0c00025613562256312b2b2b6a664d01b5000e0e0c00022d2b452a466502a656012d3c4d02a0000e0c00032a4d0397000c000203032a0218293f4d0489000e0e0c00032b2a4d057e000e0e0e0c0003646556170e0c000203192c3c4d0268000e0c00032c2a2a0e0e4f065b0031000365025356032d2a4d024d000e0e0c0003562356312a2c2b6a27044d013a000e0e0e0c0002561256232a2a4d042a000e0e0e0c000329314d021e000e0e0e0c00035651322b2b6a27054d010c000e0c00022d2b452a4665430e|@1768,I251,@1756,I240,I105,I239,I252,@1763| 1764:S19|537562737472696e672e73706c697472283229 1765:O1|@1766 1766:C1,8|00802b420e0e0e0e|@1767| 1767:S5|536c696365 1768:S26|537562737472696e672e73706c69747228322966696e64283229 1769:O1|@1770 1770:C2,16|00802b36293b4d0006002e0e7e040003|@1771,I251| 1771:S34|566563746f72536c6963654f7065726174696f6e7328292e6973456d707479283129 1772:C1,8|00802b420e0e0e0e|@1767| 1773:O3|@7195,@1774,0 1774:S5|456d707479 1775:O1|@1776 1776:C10,176|00802b4d00a9000e0e0c0002039d2b4d019d000e0e0c00022935293c4d0290000e0c000303812a36294d0383000c00024d047c000e0c000203692936294d036f000c00024d0468000e0c000203513c2b293b4d025a000e0e0e0c000303033c023b293529352b362d4d0544004d0640000e0c00032b2a4d0736000e0e0e0c00036403172d3c4d0827000c0003292b2506250626041e443b6402013b666502013b6402013b6402013b6502013b420e0e0e|@1777,@1720,@1722,I229,I105,I218,-1,@364,I24,I106| 1777:S28|545950455f5452454528292e697350726f6475637454797065283129 1778:O1|@1779 1779:C2,16|00803c2c354d0007002d0e0e7e030003|@1173,I229| 1780:O1|@1781 1781:C1,16|00802b362c372a2a6965420e0e0e0e0e|@1173| 1782:C16,376|00822b3b4d0070010e0c000303033b06d82b36293b4d005f010c000303612c35294d0153010c000230282a4d0249010e0e0c0003032c294d033d010e0e0c0002030e294d0431010e0e0c00023c6402013b03033c020a294d051d010e0e0c000202013b030d29300e0e4f060b01410003020a29300e4f07ff004200036506d12c352e3b4d08f1000e0e0c0003030e572929384d09e2002a307d090002294d01d7000c000257392923064d0acb002a0e0e0e0c00025131282a4d02bc000e0c000303302a4d03b1000e0e0c0002030e2a4d04a5000e0e0c00023c6402013b03033c020e2a4d059100020288000e0e0c000202013b030e2a310e0e4f067b0051000350020a2a314f076f00520003505749293533282c4d0260000e0c00034d0b58000e0c0002293b69642a0c00025157592938342a0e0e0c000251576929373b2a0e0e0c000251577929354d0c2b002a020220000e0e0e0c000251343c4d0d19000e0e0c0003220d2a330e4f0e0b00b10004270864440e0e0e0e|@1784,I229,@1710,I24,@1778,@1780,@1775,@1783,@1706,I232,@1028,@342,I218,@338,I107,@1782| 1783:C8,136|00812b3c4d0080000e0c0003030e570929384d0172002a2e7d06000257092923064d0263002a0e0e0e0c0002515719293828282a0e0c000251572929354d0347002a0e0e0e0c0002512e3c4d0439000e0e0c0003302a0e0e0e4f052b0052000350574929354d061f002a0e0e0e0c0002515759293828292a0e0c000251576929373b2a347d0c0002|@1785,I232,@1028,@342,@342,I107,@1706,@342| 1784:S41|545950455f5452454528292e744469737028352964697370502832297072657474794c697374283329 1785:S43|545950455f5452454528292e74446973702835296469737050283229706172656e74686573697365283229 1786:O1|@1787 1787:C3,40|00802b3b4d0020000e0c000303033b02152b352c362a362a4d010c000e0c00022a2a69292705420e|@445,I229,@1786| 1788:C13,280|00812b3b4d0010010e0c000303033b06cc2b3529352a362e36303b4d01f9000e0e0c0003030e574929384d02ea002a327d0a000257492923064d03db002a0e0e0e0c00025157592923064d04ca002a0e0e0c000251576929382f283a4d05b8000e0c00032a0c000251577929354d06a7002a0e0e0e0c000251343c4d0799000e0e0c00032f2a0e0e0e4f088b00a2000350579929373b2a0e0e0c0002512f3b4d0075000e0e0c000303043b50021c57a929354d0962002a0e0e0c00025157b92938282c2a0e0c0002260457a929373b2a0e0c000251303b4d003d00020234000e0e0c000303033b022857b929354d0a27002a0e0e0e0c000251220f3c4d0718000e0c000329330e0e0e4f0b0b00e1000365270b430e0e0e0e|@1789,I229,I232,@1028,@342,@342,@353,@338,I107,@1706,@342,@338,@1788| 1789:S35|545950455f5452454528292e7444697370283529646973705028322970526563283229 1790:S5|2c202e2e2e 1791:S7|6e6f2074797065 1792:C5,120|00802b3b4d0070000e0c000303033b02612b36293b4d005f000c000303162c35572929382b4d014f000c00022a300e0e7d0700022c35572929382b4d0139000e0e0c00022a0c000251573929354d0227002a0e0e0e0c00025157492938282f2a0e0c0002512d0e0e0e4f030b005100022705420e0e0e0e0e|@1793,I229,@1751,@342,@1792| 1793:S42|545950455f5452454528292e744469737028352964697370502832297072696e745443636f6e73283129 1794:C13,304|00812c352d362e382f3930230656572923064d001a012a0e0e0c000251566729382e28284d0108010e0c00032a0c000251567729354d02f7002a0e0e0e0c00025156872923064d03e6002a0e0e0c000251343c4d04d9000e0e0c0003322a56c80e0c00035056a729373b2a0e0e0c00025156b7293828292a0e0c0002513b31354d05ac000e0c00034d06a4000e0c0002034256c729383303064d07930002044d088d002a0e0c00025156d729354d097f002a0e0e0e0c00025122103c4d0470000e0c0003332a121200010002000c0003260402023b5056c729354d0a52002a0e0e0c00025156d72938283d2a0e0c00025156e729354d0b37002a0e0e0e0c00025122113c4d0428000e0c0003220e2a121300010002000e0e0e0c0003501211000100010029373b2a22150e0e7d160002|@1796,@356,@353,@338,@1795,I107,I229,I218,@1679,@1673,@338,@338,@338| 1795:O2|3,1 1796:S60|535452554354555245535f28292e646973706c617953747275637473283329646973706c6179283229646973706c617946756e637442696e64283229 1797:C1,16|00802b352c3656272d0e0e0e7e030003|@1798| 1798:S60|535452554354555245535f28292e646973706c617953747275637473283329646973706c6179283229646973706c617946756e637442696e64283129 1799:O2|1,2 1800:C1,16|00802b35561729382b2a2f0e7d060002|@1801| 1801:S44|535452554354555245535f28292e646973706c617953747275637473283329646973706c6179283229283129 1802:O1|@1803 1803:C15,248|00843b30293b4d00ee000e0e0e0c000303032a021629362b3c4d01db000c0003292b25042504511e233b6565293c4d00c6000e0e0e0c0003033e304d02b9000e0e0c00024d03b0000e0c000203063035296402054d04a0001029313032314d0596000e0e0e0c0006502e354d0689002a2f0e0e0e7d0a0002293c4d077a000e0e0e0c0003036e2f3c4d086c000e0c0003030e2d384d0960002a2e0e0e7d0900022d23064d0a51002a0e0c0002512d3828282a0e0e0e0c0002512d354d0b39002a0e0c0002513b30320e4f0c2b00300003502e3828292a0e0e0e0c0002512e373b2a0c0002512e354d0d0d002a2f0e0e0e7d0a00023b641f05|@1805,I229,I106,I105,I218,@1773,@1704,@338,I233,I232,@1028,@342,@342,@1804,@338| 1804:C14,264|00812c3b4d0000010e0c0003030e560829384d01f2002a2e7d0600023b2c4d02e6000e0e0e0c00034d03dc000e0c000203d32b4d04d1000e0e0c00024d03c8000e0c000203062b35296402054d05b800105618562956372c312d2d2d4d06a8000e0c000650564829354d079b002a0e0e0e0c000251304d048e000e0e0e0c00024d0384000e0c000203063036296402054d087400103b2a4d026d000e0e0c0003644d0363000c0002035656582938282c2a0c000251566829354d094b002a0e0e0e0c000251324d043e000e0e0e0c00024d0334000e0c000203063236296402054d0a240010343c4d0b1d000e0e0c0003292b0e0e0e4f0c0f00a10003270402013b270502013b430e|@1806,I232,@1028,I229,I218,I105,@1773,@1704,@342,@1773,@338,@1773,I107,@1804| 1805:S28|545950455f5452454528292e7072696e745479706556617273283529 1806:S36|545950455f5452454528292e7072696e7454797065566172732835297056617273283229 1807:C1,16|00802b352c3656272d0e0e0e7e030003|@1683| 1808:C1,16|00802b352c3656272d0e0e0e7e030003|@1683| 1809:C1,16|00802b352c3656272d0e0e0e7e030003|@1683| 1810:O1|@1811 1811:C172,3632|00824d002a0e2c694d01240e4d02200e694d031b0e2b692f3b4d04130e0c0003030e2e384d05080e2a300e0e7d09000230354d06fa0d4d07f60d0e0e0e0c00030a1f00e905d502c506d10df10c1d055d00ad044f002d0371094000e5073d04e50b810c65089500a9014507e509350a9105d90a610dd903f50589038d0a7102dd055d0b2e384d08a70d2a300e7d09000206ce30362f382a2a310e0e0e7d0a000230373138294d09870d0c0002294d0a7f0d4d0b7b0d0c000303142b4d0c710d6928222a69644d0d670d0c000202012b32382a2a347d0d0002303631373023064d0e4d0d2a0e0c0002512a353c4d0f400d0e0c000303102a354d10340d4d11300d0e0c00030319313c4d07240d0e0c00032b2a334d02190d0e0e0c000451024b303828282a0e0c00025130354d12010d2a0e0c000251313c4d07f50c0e0e0c00032b2a334d02e90c0e0e0c00045031354d13dd0c2a0e0c000251313828292a0202ca0c0e0e0e0c0002260330354d14c00c2a0c0002512935280d4d11b30c0c00030319313c4d07a80c0e0c00032a2a334d029d0c0e0e0c0004510247303828282a0e0c00025130354d15850c2a0e0c000251313c4d07790c0e0e0c00032a2a334d026d0c0e0e0c00045031354d16610c2a0e0c000251313828292a0e0e0e0c0002260330373b2a320e7d0b00023036313732383123064d17370c2a0e0e0e0c00025131384d18290c2a0e0c00025131354d191d0c2a0e0c000251323c4d07110c0e0e0c00032c2a344d02050c0e0e0c00045032354d1af90b2a0e0c00025132384d1bed0b2a0e0c00025132354d1ce10b2a0e0c000251333c4d07d50b0e0e0c00032b2a220c4d02c80b0e0c00045033354d1dbd0b2a0e0c00025133384d1eb10b2a0e0c00025133354d1fa50b2a0e0c000251343c4d07990b0e0e0c00032d2a220d4d028c0b0e0c00045034373b2a220d0e7d0f000230362f23064d20730b2a0e0e0e0c0002512f3828282a0e0e0e0c0002512f354d21590b2a0e0c000251303c4d074d0b0e0e0c00032a282c2b2f310e0e0e0c00055030354d22350b2a0e0c000251303828292a0e0e0e0c00025130373b2a320e0e7d0b000230364d23120b4d020e0b693023064d24060b2a0e0e0c00025130384d25f90a2a0e0c00025130354d26ed0a2a0e0c0002514d27e30a2a69323c4d07db0a0c00032c4d28d30a2b2d330e0c00055032373b2a340e0e7d0d000230364d29ba0a4d02b60a693023064d2aae0a2a0e0e0c00025130384d2ba10a2a0e0c00025130354d2c950a2a0e0c0002514d2d8b0a2e2b6a323c4d07820a0e0e0e0c00032c4d2e770a2b2d330e0c00055032373b2a340e0e7d0d000230362f23064d2f5b0a2a0e0e0e0c0002512f384d304d0a2a0e0c0002512f354d31410a2a0e0c0002514d32370a313c4d07310a0e0e0c00032b4d33270a2b2d320e0c00055031373b2a330e0e7d0c000230362f23064d340b0a2a0e0e0e0c0002512f38285b2a0e0e0e0c0002512f354d35f1092a0e0c000251303c4d07e5090e0e0c00032a282c2b2f310e0e0e0c00055030354d36cd092a0e0c0002513038285d2a0e0e0e0c00025130373b2a320e0e7d0b0002303631373023064d37a5092a0e0c000251313c4d0799090e0e0c00032a2a334d028d090e0e0c00045031354d3881092a0e0c0002513138283a2a0e0e0e0c00025131354d3969092a0e0c0002513b4d3a5e090e0e0e0c00022c34342c3c4d3b4f090c00065032373b2a340e0e7d0d0002303631373023064d3c35092a0e0c000251313c4d0729090e0e0c00032b2a334d021d090e0e0c00045031354d3d11092a0e0c00025131384d3e05092a0e0c00025131354d3ff9082a0e0c000251323c4d07ed080e0e0c00032b2a344d02e1080e0e0c00045032373b2a340e0e7d0d0002303629352a373123064d40c3082a0e0e0e0c000251323c4d07b5080e0e0c00032a2a344d02a9080e0e0c00045032354d419d082a0e0c00025132384d4291082a0e0c00025132354d4385082a0e0c000251333c4d0779080e0e0c00032c2a220c4d026c080e0c00045033373b2a220c0e7d0e000230362f23064d4453082a0e0e0e0c0002512f384d4545082a0e0c0002512f354d4639082a0e0c000251303c4d072d080e0e0c00032a287c2b2f310e0e0e0c00055030373b2a320e0e7d0b00022e384d470a082a307d0900022e38285f2a300e0e7d0900023036313732383123064d48eb072a0e0e0e0c00025131382c03064d49da0702044d4ad4072a0c00025131354d4bc9072a0e0c0002510402002a2a4d4cba070e0e0e0c0003502935343c4d07ab070c00032a283b2b33220c0e0e0c00055034354d4d95072a0e0c00025134384d4e89072a0e0c00025134354d4f7d072a0e0c0002510402002e2a4d506e070e0e0e0c0003502935220e3c4d075e070e0e0e0c00032a283b2b220d220f0e0c000550220e354d5144072a0c000251220e384d5238072a0c000251220e373b2a22107d1200023036294d5321070e0e0c00024d5418070e0c0002031d29352937293c4d1108070e0c000303064d55fe0602044d56f8066502044d56f1063023064d57ea062a0e0e0c00025130382a2a0c00025130354d58d5062a0e0c0002514d59cb06323c4d07c5060e0e0c00032c4d5abb062b2d330e0c00055032373b2a340e0e7d0d0002303731383023064d5b9d062a0e0c00025130384d5c91062a0e0c00025130354d5d85062a0e0c0002514d5e7b062c69323c4d0773060c00032c4d5f6b062b2d330e0c0005502b3b4d115d060e0e0c000303043b50024032354d604c062a0c00025132384d6141062a0e0c00025132354d6235062a0e0c0002514d632b06343c4d0725060e0e0c00032d4d641b062b2d220c0c0005260332373b2a340e7d0d0002303631373023064d65fd052a0e0c00025130384d66f1052a0e0c00025130354d67e5052a0e0c00025130382b2a0c00025130354d68d1052a0e0c0002513038283d2a0e0e0e0c00025130354d69b9052a0e0c00025130384d6aad052a0e0c00025130354d6ba1052a0e0c00025130382a2a0c00025130373b2a320e0e7d0b00023036313732383123064d6c7b052a0e0e0e0c00025131384d6d6d052a0e0c00025131354d6e61052a0e0c0002514d6f57052d69333c4d074f050c00032c4d7047052b2d340e0c00055033354d7139052a0e0c0002512b3b4d112d050e0e0c000303043b50024033384d721c052a0c00025133354d7311052a0e0c0002514d740705220c3c4d0700050e0c00032d4d75f7042b2d220d0c000550220c354d76e8042a0c0002260433384d77dc042a0c00025133354d78d1042a0e0c0002513323064d79c4042a0c0002510402002e2a4d7ab6040e0e0e0c0003502935220d3c4d07a6040e0e0e0c00032a283b2b220c220e0e0c000550220d373b2a0e0e0e0c000251220d373b2a220f7d11000230362f23064d7b73042a0e0e0e0c0002512f3828282a0e0e0e0c0002512f354d7c59042a0e0c0002510402002a2a4d7d4a040e0e0e0c0003502935323c4d073b040c00032a283b2b31330e0e0e0c00055032354d7e25042a0e0c000251323828292a0e0e0e0c00025132373b2a340e0e7d0d0002303631373023064d7ffd032a0e0c0002512a32324d80f0030e0c00045030354d81e5032a0e0c0002514d82db03323c4d07d5030e0e0c00032b4d33cb032b2d330e0c00055032373b2a340e0e7d0d000230364d83b2034d02ae03693023064d84a6032a0e0e0c00025130384d8599032a0e0c00025130354d868d032a0e0c0002514d8783032a69323c4d077b030c00032c4d8873032b2d330e0c00055032373b2a340e0e7d0d000230362f23064d8957032a0e0e0e0c0002512f384d8a49032a0e0c0002512f354d8b3d032a0e0c000251303c4d0731030e0e0c00032a2a324d0225030e0e0c00045030373b2a320e0e7d0b0002303631373023064d8c09032a0e0c000251313c4d07fd020e0e0c00032b2a334d02f1020e0e0c00045031354d8de5022a0e0c0002513123064d8ed8022a0c00025131384d8fcd022a0e0c00025131354d90c1022a0e0c000251323c4d07b5020e0e0c00032b287c2b31330e0e0e0c00055032373b2a0c00025132373b2a340e0e7d0d0002303631373023064d9185022a0e0c00025130384d9279022a0e0c00025130354d936d022a0e0c000251313c4d0761020e0e0c00032a2a334d0255020e0e0c00045031354d9449022a0e0c00025131384d953d022a0e0c00025131354d9631022a0e0c000251323c4d0725020e0e0c00032c2a344d0219020e0e0c00045032373b2a340e0e7d0d0002303631373023064d97fd012a0e0c0002513023064d98f0012a0c00025130384d99e5012a0e0c00025130354d9ad9012a0e0c000251313c4d07cd010e0e0c00032b2a334d02c1010e0e0c00045031354d9bb5012a0e0c00025131384d9ca9012a0e0c00025131373b2a0c00025131354d9d95012a0e0c000251323c4d0789010e0e0c00032b287c2b31330e0e0e0c00055032373b2a340e0e7d0d0002303631373023064d9e61012a0e0c000251313c4d0755010e0e0c00032b2a334d0249010e0e0c00045031354d9f3d012a0e0c00025131384da031012a0e0c00025131354da125012a0e0c000251323c4d0719010e0e0c00032b2a344d020d010e0e0c00045032373b2a340e0e7d0d0002303631373023064da2f1002a0e0c000251313c4d07e5000e0e0c00032b2a334d02d9000e0e0c00045031354da3cd002a0e0c00025131384da4c1002a0e0c00025131354da5b5002a0e0c000251323c4d07a9000e0e0c00032b2a344d029d000e0e0c00045032373b2a340e0e7d0d0002303631383b3123064da680002a0c0002513138287b2a0e0e0e0c000251323c4d0769000e0e0c00032b2a0e0e0e4fa75b00800003502c03043b50021d32382c3b4d1148000e0c000303064da83e0002044da938002a0c0002513238287d2a0e0e0e0c00025132373b2a340e0e7d0d000230362f3828232b4daa11000e0e0c00032a310e0e7d0a000266440e0e|@1813,@1814,@1816,@1810,@1818,I232,@1028,-16,I107,@1826,@1827,@1292,I24,@1830,@378,@342,I230,-8,I229,@342,@342,@342,@342,@342,@342,@846,@338,@338,@844,@338,@338,@878,@338,@1795,@338,@342,@1831,@1795,@898,@338,@1833,@866,@1835,@1795,@864,@338,@1837,@866,@1795,@862,@338,@1841,I48,@1795,@338,@342,@356,@338,@338,@1689,@1704,@1795,@338,@888,@338,@342,@338,@923,@338,@1795,@868,@338,@1844,@356,@915,@927,@338,@1845,@338,@871,@338,@1848,@338,@873,I105,I218,@880,@854,@1795,@338,@1850,@866,@1795,@884,@338,@1856,@866,@338,@896,@338,@1858,@866,@1795,@884,@338,@338,@338,@884,@338,@1795,@890,@338,@1860,@866,@338,@896,@338,@1861,@866,@338,@860,@338,@1795,@1863,@1795,@342,@1865,@342,@1795,@1867,@338,@1870,@1873,@1795,@907,@338,@1875,@866,@342,@900,@338,@342,@338,@1795,@934,@338,@342,@919,@338,@338,@876,@338,@1795,@342,@933,@338,@338,@848,@338,@1795,@338,@931,@338,@1795,@338,@913,@338,@206,@1812,@1028,@1790,@353| 1812:C17,368|00812b3b4d0068010e0c0003030e560729384d015a012a2e7d0600022c3b4d024e010e0e0e0c000303033b06d62c36293b4d023b010c000303662d3529352a3656472923064d0327012a0e0e0e0c000251565729382d4d0416014d0512010e0e0e0c00032a0c000251566729354d06ff002a0e0e0e0c000251323c4d07f1000e0e0c000356872e2b2b4d08e3000c000450569729373b2a220e0e0e0e7d0f00022d3529352a3656472923064d09c1002a0e0c00025156572923064d0ab2002a0e0e0c000251566729382e4d0ba2004d059e000e0e0e0c00032a0c000251567729354d0c8b002a0e0e0e0c000251333c4d077d000e0e0c000356972f2b2b4d086f00020265000c00045056a729373b2a0e0e0c00025156b729354d0d53002a0e0e0e0c00025156c72938282c2a0e0c00025156d729373b2a0e0e0c00025156e729354d0e2b002a0e0e0e0c00025122113c4d071c000e0c0003220f2a0e0e160f000e001300010000032710430e0e0e0e0e|@1877,I232,@1028,I229,@342,@1677,@353,@338,I107,@1810,@342,@342,@1677,@338,@342,@338,@1812| 1813:S25|50415253455f5452454528292e7074446973706c6179283329 1814:C10,248|00832c3b4d00f0000e0c0003030e560729384d01e2002a2e7d0800022e3b4d02d6000e0e0e0c000303033b02c32e36293b4d02c3000c000303122f3556272a302b6a642e2e0e0e0e7d0800022f3556272923064d03a1002a0e0c00025156372b312b6a642f0c0002505637293532282c4d0484000e0c000303033c021f32283b4d0474000e0c000303033c020f324d0566004d0462000e0e0e0c00034d0658000e0c0002293b69642a0c00025156472938332a0e0e0c000251565729373b2a0e0e0c000251566729354d072b002a0e0e0e0c000251333c4d081d000e0e0c000330220d2b220d220c220e0e7b060e00051f040e0e0e0e0e0e|@1815,I232,@1028,I229,@342,I24,I48,I218,@338,I107| 1815:S37|50415253455f5452454528292e7074446973706c61792833297072696e744c697374283429 1816:C1,16|00802b352c362d3756372e7b05030004|@1817| 1817:S25|50415253455f5452454528292e7074446973706c6179283129 1818:C8,128|00822d352e372f382e23064d0071002a0e0c0002513b4d0166000e0e0e0c00022a312b323c4d0257000c0006502f382d2a0c0002512f354d0345002a0e0c0002512f38283d2a0e0e0e0c0002512f354d042d002a0e0c0002514d052300313c4d061d000e0e0c00032d287c2b2d56a70e0e0c00055031373b2a330e0e7d0c0002|@1820,@1795,@1689,@1802,@338,@338,@1819,I107| 1819:O1|@1821 1820:S45|50415253455f5452454528292e7074446973706c61792833297072696e74446174617479706542696e64283329 1821:C2,24|00802b352c362d374d000c002e0e0e7b050300040e0e0e0e|@1823,@1822| 1822:O1|@1824 1823:S44|50415253455f5452454528292e7074446973706c61792833297072696e74436f6e7374727563746f72283129 1824:C8,120|00822d352e362d23064d006b002a0e0e0e0c0002512d382b2a0c000251294d0156000e0e0e0c000203043b50023b2d354d0244002a0c0002512d384d0339002a0e0c0002512d354d042d002a0e0c0002513b4d0522000e0e0e0c00022a30302c3c4d0613000c0006512d373b2a2f0e0e7d0800020e0e0e0e|@1825,@206,@1717,@338,@848,@338,@1689,@1704| 1825:S44|50415253455f5452454528292e7074446973706c61792833297072696e74436f6e7374727563746f72283329 1826:S7|3c456d7074793e 1827:O1|@1828 1828:C1,8|00802b352964420e|@1829| 1829:S24|5354525543545f56414c5328292e76616c4e616d65283129 1830:O2|34,0 1831:C8,144|00822d3b4d0088000e0c0003031a2b384d017c002a0c0002512b354d0271002a2d0e0e0e7d0600022d352e362d23064d035d002a0e0c0002512e3c4d0451000e0e0c00032b2a3056670c0004502e354d053d002a0e0c0002512e38283d2a0e0e0e0c0002512e354d0625002a0e0c0002512f3c4d0419000e0e0c00032b2a3156770c0004502f373b2a310e0e7d0a0002|@1832,I229,@925,@338,@1795,I107,@338,@338| 1832:S40|50415253455f5452454528292e7074446973706c61792833297072696e7456616c42696e64283329 1833:C1,16|00802b352c362d3756372e7b05030004|@1834| 1834:S40|50415253455f5452454528292e7074446973706c61792833297072696e7456616c42696e64283129 1835:C5,112|00822d352e362d23064d0063002a0e0e0e0c0002512e3c4d0155000e0e0c00032b2a3056670c0004502e354d0241002a0e0c0002512e38283d2a0e0e0e0c0002512e354d0329002a0e0c0002512f3c4d011d000e0e0c00032b2a3156770c0004502f373b2a310e0e7d0a00020e0e0e0e|@1836,@1795,I107,@338,@338| 1836:S39|50415253455f5452454528292e7074446973706c61792833297072696e74436c61757365283329 1837:C3,40|00802b352c362a364d001c005648692b3c4d0113000c00032b287c2b2d5697340e0e0e7b06080005|@1839,@1838,I107| 1838:C1,16|00802b352c362d3756372e7b05030004|@1840| 1839:S41|50415253455f5452454528292e7074446973706c61792833297072696e746676616c62696e64283129 1840:S39|50415253455f5452454528292e7074446973706c61792833297072696e74436c61757365283129 1841:O1|@1842 1842:C1,24|00802b352c372a352a382a2a300e0e0e7d0700020e0e0e0e|@1843| 1843:S40|50415253455f5452454528292e7074446973706c61792833297072696e745374724e616d65283129 1844:S2|2829 1845:O1|@1846 1846:C5,80|00812c4d0049000e0e0c00024d0140000e0c0002032a2c3529352a362f360402002a2a4d0229000e0e0c00035029352a362e2b692e2b69342b452a46270902092b4d030b000802003b430e0e0e0e0e0e|@1847,I105,I218,@1845,@342| 1847:S17|4c697374506169722e756e7a6970283229 1848:O1|@1849 1849:C5,80|00812c4d0049000e0e0c00024d0140000e0c0002032a2c3529352a362f360402002a2a4d0229000e0e0c00035029352a362e2b692e2b69342b452a46270902092b4d030b000802003b430e0e0e0e0e0e|@1847,I105,I218,@1848,@342| 1850:O1|@1851 1851:C2,24|00802b352c362d374d000c002e0e0e7b050300040e0e0e0e|@1853,@1852| 1852:O1|@1854 1853:S41|50415253455f5452454528292e7074446973706c61792833297072696e745479706542696e64283129 1854:C8,144|00822d352e362f382e23064d0081002a0e0c0002513b4d0176000e0e0e0c00022a312b323c4d0267000c0006502f382d2a0c0002512b4d0356000e0e0e0c000203043b50023b2f354d0444002a0c0002512f38283d2a0e0e0e0c0002512f354d052d002a0e0c0002513b4d0122000e0e0e0c00022c32322c3c4d0613000c0006512f373b2a310e0e7d0a00020e0e0e0e|@1855,@1795,@1689,@1802,@1717,@338,@338,@1704| 1855:S41|50415253455f5452454528292e7074446973706c61792833297072696e745479706542696e64283329 1856:C1,16|00802b352c362d3756372e7b05030004|@1857| 1857:S45|50415253455f5452454528292e7074446973706c61792833297072696e74446174617479706542696e64283129 1858:O1|@1859 1859:C2,24|00802b352c362d374d000c002e0e0e7b050300040e0e0e0e|@1853,@1852| 1860:C1,16|00802b352c362d3756372e7b05030004|@1857| 1861:O1|@1862 1862:C2,24|00802b352c362d374d000c002e0e0e7b050300040e0e0e0e|@1853,@1852| 1863:O1|@1864 1864:C5,80|00812c4d0049000e0e0c00024d0140000e0c0002032a2c3529352a362f360402002a2a4d0229000e0e0c00035029352a362e2b692e2b69342b452a46270902092b4d030b000802003b430e0e0e0e0e0e|@1847,I105,I218,@1863,@342| 1865:O1|@1866 1866:C5,80|00812c4d0049000e0e0c00024d0140000e0c0002032a2c3529352a362f360402002a2a4d0229000e0e0c00035029352a362e2b692e2b69342b452a46270902092b4d030b000802003b430e0e0e0e0e0e|@1847,I105,I218,@1865,@342| 1867:O1|@1868 1868:C10,176|00822d350a010059004b002d362c23064d009c002a0c0002512c384d0191002a0e0c0002512c354d0285002a0e0c0002512c382a4d0378004d0474000e0c00032a0c0002512c373b2a2e0e0e7d07000202562b384d0558002a2d0e0e7d0600022d362c23064d0647002a0e0e0e0c0002512c384d0739002a0e0c0002512c354d082d002a0e0c0002512c382a4d0320004d041c000e0c00032a0c0002512c373b2a2e0e0e7d070002440e0e0e0e0e0e0e|@1869,@342,@894,@338,-1,@364,@902,@342,@882,@338| 1869:S31|56414c55455f4f505328292e646973706c6179466978537461747573283329 1870:O1|@1871 1871:C1,16|00802b352c3729382b2a2f0e7d060002|@1872| 1872:S28|50415253455f5452454528292e7074446973706c6179283329283129 1873:C13,192|00822d352e372f382e23064d00b1002a0e0c0002512e382c2a0c0002512a4d019e000e0e0e0c000203043b50023b2e354d028c002a0c0002512e384d0381002a0e0c0002512e354d0475002a0e0c0002513b4d056a000e0e0e0c00022b31312c3c4d065b000c00065129354d0751004d084d000e0e0c000303043b5002372e354d093c002a0c0002512e38283d2a0e0e0e0c0002512e354d0a25002a0e0c0002512f3c4d0b19000e0e0c00032a2a3156770c0004512e373b2a300e0e7d090002|@1874,@342,@1717,@338,@848,@338,@1689,@1704,-5,I229,@338,@338,I107| 1874:S39|50415253455f5452454528292e7074446973706c61792833297072696e74457842696e64283329 1875:C1,16|00802b352c362d3756372e7b05030004|@1876| 1876:S39|50415253455f5452454528292e7074446973706c61792833297072696e74457842696e64283129 1877:S42|50415253455f5452454528292e7074446973706c6179283329646973706c61795265634c697374283229 1878:C2,40|00802b56180c0002293b4d001a000e0e0e0c0003030a2c56272d0e0e7d0400022964420e0e0e0e0e|@979,I229| 1879:C2,40|00802b56180c0002293b4d001a000e0e0e0c0003030a2c56272d0e0e7d0400022964420e0e0e0e0e|@979,I229| 1880:C2,40|00802b56180c0002293b4d001a000e0e0e0c0003030a2c56272d0e0e7d0400022964420e0e0e0e0e|@979,I229| 1881:C2,40|00802b56180c0002293b4d001a000e0e0e0c0003030a2c56272d0e0e7d0400022964420e0e0e0e0e|@979,I229| 1882:C2,40|00802b56180c0002293b4d001a000e0e0e0c0003030a2c56272d0e0e7d0400022964420e0e0e0e0e|@979,I229| 1883:O2|@1884,@1601 1884:C6,80|00823b3c28404d0046004d0142000e0e0e0c00042e352f36303731383239333a342306220c2307220d2308220e23094d021d000e0e0c000b302b302c4d0310000e4f040b0070000666440e0e0e0e0e0e|@1886,-1,I11,@999,I48,@1885| 1885:C4,64|00843b3b4d00380031693b3b3b3b3b3b220f293b4d0128000e0c000303033b021829352a362a0e0e0e4f021300c0000250292503511e233b65270a1f050e0e0e|@1888,@1889,I229,@1887| 1886:S29|535452554354555245535f28292e706173733253747275637473283329 1887:C7,120|00802b353d4d006f000c00030a0500200040000c00300050000f003b02532b362c2a0e0e0e4f014f002100036402422b362c2a0e0e4f023f002100036402322b362c2a0e0e4f032f002100036402222b362c37292b4f041f003100036502122b362c372d382b2a2c0e4f050b0051000466420e0e0e0e0e0e|@1898,I107,@1899,@4559,@4589,@4596,@1897| 1888:S43|535452554354555245535f28292e7061737332537472756374732833297061737332537472756374283529 1889:C7,80|00805607293b4d0046000e0e0e0c0003293b4d013a000e0e0e0c0003030a3b4d022d002e7d05000256272a3c4d0320000e0c00032a3b2b4d0415000e0e0c0004502b4d050a00300e7d0700020e0e0e0e|@1891,I253,I234,@1892,I106,I255,@1890| 1890:O1|@1895 1891:S56|535452554354555245535f28292e70617373325374727563747328332970617373325374727563742835296d616b65547970654964283129 1892:O1|@1893 1893:C3,24|00803c28403b4d000e000e0e0e0c00044d0104002a696442|@1894,I11,-1| 1894:S27|5354525543545f56414c5328292e6d616b65467265654964283129 1895:C1,8|00803b2c69420e0e|@1896| 1896:S5|426f756e64 1897:C6,160|00825609292306562929230856492939566929230b5689293a56a929230a4d007e00221056e96a4d017500221156f96a4d026c002212121100010003006a4d035e002213121200010003006a121100010003002936121300010003002923072e2c32322212220f2218302218220d22122217680c1216000100fcff1217000200020012180001000100221c2c2e2d221e2e4d040b000c00073b2719440e0e0e0e|@4610,@4611,@4614,@4616,@4609,@2640| 1898:S54|535452554354555245535f28292e70617373325374727563747328332970617373325374727563742835297061737332446563283129 1899:C5,96|00814d005a0056182e57386b0403002a2a4d014b000c00035029352a363b30293b4d023b000c000303043b50022229352a362a352b362c372d382e392f3a0e0e0e4f031b00d0000750292503511e2e51505659292309642c310e0e0e7d090002|@1901,@1902,@1924,I229,@1900| 1900:C15,360|0085570a5719572729334d005a010e0e0e0c000329282e4d004d010e0e0c000329220d2e30220e0e0e4f013b0192000631353b4d0231010e0e0c000303032906d3576a293b4d031f010c0003293b4d0416010e0e0e0c000303032902013b579957a72922124d00ff000c000329282e4d00f5000e0e0c0003220f2e2e22172d0e0e160500e200130002000006294d06d7000c00022a4d07cf000c00020402002b2b2b4d08c2000e0e0e0c000450294d09b6002e69221703252e4d06ab000c00022f4d07a3000c00020402002b2b2b4d0896000e0e0e0c000450296602012a12150001000200121600030002002210322f2d22212e4d0a70000e0c0007501217000200fcff1218000200010029221f4d005600020224000e0e0e0c000329282e4d0045000e0e0c0003220c312e322d4d0b36000e0e0e0c00062714220d2a4d0c27000c0003220e2a6956910e0e0e0c000250343b2b4d0d10000e0c0004503b27081f060e0e0e0e0e0e|@1940,@353,@1941,I229,I253,I233,@2462,@2057,@2060,@2063,@4555,@2076,@2359,@1939,I255| 1901:S63|535452554354555245535f28292e70617373325374727563747328332970617373325374727563742835297061737332537472756374757265446563283229 1902:C5,48|00805609561856274d0024002f4d011f000c0003294d0217004d0113000c00032d3c2e2e2d4d030700220c7b07080006|@1904,@1905,@353,@1906,@1903| 1903:O1|@1907 1904:S71|535452554354555245535f28292e7061737332537472756374732833297061737332537472756374283529706173733253747275637475726544656328322973456e762d283129 1905:S10|53747275637475726520 1906:S43|2068617320616c7265616479206265656e20626f756e6420696e2074686973206465636c61726174696f6e 1907:C4,40|00842e03064d001f0002044d0119004d0215002f2e336b312f2b6a642a2d0e0e7d0800020e0e0e0e|@1909,@1910,@1913,@1908| 1908:C9,128|00805609292309294d0074004d0170000e0c00032e23064d0265002a0e0c0002512e3856482a0e0e0e0c0002512e354d034d002a0e0c0002512e23064d0440002a0c0002512e384d0535002a0e0c0002512e354d0629002a0e0c0002515637293b69292c324d0717000c00045030373b2a0c00025130373b2a320e0e7d090002|@1917,@7196,@623,@342,@356,@342,@1916,@338,@1666| 1909:S26|535452554354555245535f28292e6572726f724e656172283529 1910:O1|@1911 1911:C2,56|00802b352c362d37292b3c2e352f36303731383239333a342306220c2307220d2308220e23094d000e0022120e0e0e7b0f06000e0e0e0e0e|@1912,@774| 1912:S19|4c45585f28292e6572726f7250726f63283129 1913:O1|@1914 1914:C2,56|00802b352c362d37292b3b2e352f36303731383239333a342306220c2307220d2308220e23094d000e0022120e0e0e7b0f06000e0e0e0e0e|@1915,@774| 1915:S21|4c45585f28292e7761726e696e6750726f63283129 1916:S10|466f756e64206e656172 1917:S29|535452554354555245535f28292e6572726f724e656172283529283129 1918:O2|@1923,@7172 1919:O2|@1920,@7172 1920:C2,32|00802b3556174d0016000e0e0e0c000303033c0202020202013b420e0e0e0e0e|@617,I251| 1921:O2|@1922,@7172 1922:C1,16|008056072928452e6a64420e0e0e0e0e|@617| 1923:C3,40|00802b3556174d001e000e0e0e0c000303062b3729640202020202054d01080010420e0e0e0e0e0e|@617,I251,@621| 1924:O1|@1925 1925:C6,56|00813c28403b4d002e000e0e0e0c00044d0124002a694d021e002b306a4d0317002c694d0411002b69302d452a462b472705430e0e0e0e0e|@1927,I11,@1928,@1932,@1936,@1926| 1926:C1,16|00802b352c3656272d0e0e0e7e030003|@1938| 1927:S28|5554494c49544945535f28292e6e6f4475706c696361746573283229 1928:C3,32|00805607293b4d0016000e0e0e0c00033b2a0e0e0e4f01070030000266420e0e|@1930,I253,@1929| 1929:C3,56|00802b3b4d0030000e0c000303033b021f2b3529352a362e36290e0e0e4f011700410002502b2b695657300e7d070002420e0e0e0e0e0e0e|@1931,I229,@1929| 1930:S36|5554494c49544945535f28292e6e6f4475706c6963617465732832296170706c79283129 1931:S43|5554494c49544945535f28292e6e6f4475706c6963617465732832296170706c792831296170706c283129 1932:C3,32|00813b5617293b4d0015000e0e0c0003644f010b0010000264430e0e0e0e0e0e|@1934,I253,@1933| 1933:C6,104|00802b3b4d0060000e0c0003032c5707561856272a2a695747293b4d0149000e0e0c00032b2a692f3b2b4d023a000e0e0e0c0004503b270702272b3529352d3656382b2a4d0320000e0c0003640309563857482f7d060002294f040b0031000266420e0e0e0e0e0e|@1935,I229,I253,I255,I24,@1933| 1934:S36|5554494c49544945535f28292e6e6f4475706c696361746573283229656e746572283229 1935:S43|5554494c49544945535f28292e6e6f4475706c696361746573283229656e7465722832296c6f6f6b283129 1936:C4,72|00805607293b4d003e000e0e0e0c000329293b4d0131000e0e0c000303033b0224293529352a362c362b334d0219000e0e0c000303052a6801020829250526041e2f3b270466420e|@1937,I253,I229,I24| 1937:S37|5554494c49544945535f28292e6e6f4475706c6963617465732832296c6f6f6b7570283129 1938:S36|5554494c49544945535f28292e6e6f4475706c696361746573283229656e746572283129 1939:O1|@4557 1940:S84|535452554354555245535f28292e70617373325374727563747328332970617373325374727563742835297061737332537472756374757265446563283229706173733253747275637475726542696e64283629 1941:C53,1064|00844d0022042d692c354d011a044d0216040e0e0e0c000303662c362d3730230b57484d03010434322c6b4d04f9032c2f2c4d05f2030e0e0e0c0005294d06e7030c00020304587702322d3b2b4d07d7030c000450293b4d02cd030e0e0c00030316404d08c1030e0e0c0002294d09b7033b3b6b2965020429372964270606dc2c354d0aa2034d029e030e0e0e0c000307d72c362d372e3831230a32230b57684d0b8403220d342c6b2e2d2d4d0c78034d0d74033b2f4d0e6e030e0e0e0c0008294d0f63030c00020304589702ba2e3b2b4d0753030c000450294d104a030e0e0e0c00022a4d113f030c00022a4d1237030c00022b4d132f030c00020402002b2b2b4d1422030e0e0e0c000450294d09160322152215221522110e0e0e16150006031500010000062e3b4d02fa020e0e0e0c00030316404d08ed020e0e0c0002294d09e3023b3b6b296502042e372964121200020002002b2b2e0202c7022217221b2e4d16c102020221000e0e0c0007324d17b302221430221d4d18aa02221a0e0e0e7b071a0006270806cc2c354d1996024d0292020e0e0e0c000303d02c362d37294d1a81020e0e0c00022a4d1b77020c0002404d086f020c0002292b3b3b6b294d1a62020e0e0e0c00023c28403b4d1c54020e0c00044d1d4c022b306a4d1e45022c316a4d1f3e022d326a4d2037022e2e346b4d212f022e30220c6b332306221323064d221f022a2c6a220d2308221623084d2310022a2c6a2210230b2219230b4d2401022a2c6a221b3a221c230a221d394d25f0012210220f22132d30220f2215220e221534220e680c2219221f2b222322250202cb010e0e0e162600c6012100020000062215271b06de2c353e4d02b3010c000307dc2c362d372e382b4d27a3010c00024d289c010e0c000203bc2b36293b4d028e010e0e0e0c000303a22c35404d087f010c0002294d0977013b3b6b294d1a6f010c0002292306220e23064d2961012a2c6a2c2308221123084d2a53012a2c6a2f3930230b2215230b4d2b43012a2c6a22173a2218230a220c37220d38220e2309220f36221023074d2c24012b2f2f220e34221430221334220f2212680c2218221f2b221a22250e0e1626000201210002000006222222192c2222221a161500ee00220001000006271702054d2de00010640207d7004d2ed600106602cf00002c353f4d02c9000e0e0c000303ba2c362d372e38333333332f4f15b300810006313b4d2faa000e0e0e0c0003293b4d309e000e0e0e0c000303032902013b2d2a220d220f22110e0e0e4f318300b10006294d127b000c00022a4d1373000c00020402002b2b2b4d1466000e0e0e0c000450294d325a002e693203262e4d1250000e0c00022f4d1347000c00020402002b2b2b4d143a000e0e0e0c000450296602012a57e833312e221022182e4d1620000e0c000750302c22102d22194d18100022160e7b071600064d33040010641f05|@1943,@1944,-8,I229,@1946,@1948,@1949,@2036,I255,@1564,I48,-2,@2040,@2041,@2044,@2045,@2048,@2051,@2054,@2057,@2060,@2063,@1941,@2076,@2070,@2359,-7,@1957,@2364,I11,@2437,@2439,@2440,@2441,@2450,@2451,@2452,@2453,@2454,@1885,I105,I218,@2456,@2457,@2458,@2459,@1942,@1942,I253,I233,@2462,@4552,@1942| 1942:O3|@7129,@237,@4554 1943:S57|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973747275637456616c7565283529 1944:C7,80|00805607293b4d0046000e0e0e0c0003293b4d013a000e0e0e0c0003030a3b4d022d002e7d05000256272a3c4d0320000e0c00032a3b2b4d0415000e0e0c0004502b4d050a00300e7d0700020e0e0e0e|@1945,I253,I234,@1892,I106,I255,@1890| 1945:S69|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973747275637456616c75652835296e6577547970654964283129 1946:C2,24|00805609561856272b3c2c2c324d000700330e7b07060006|@1947,@1903| 1947:S29|535452554354555245535f28292e676976654572726f72283329283129 1948:S9|537472756374757265 1949:O1|@1950 1950:C3,24|00833b4d0011002e0e4f010b00200003641f040e0e0e0e0e|@1952,@1953,@1951| 1951:C14,224|00810402002c2a4d00d5000e0e0c00035029352a362a4d01c6004d02c2000e0e0e0c000303082956490c00020234563956474d03aa002b2e2c4d04a3000c0005294d059b000c000203064d069200021129330e0e0e0c00022d2a0e0e0e0c00026466294d0779000e0e0c00024d0870000e0c0002030629352964025e564a294d095d004d0a59000e0e0c0003292d4d0a4e000e0e0e0c0003294d0b43004d0a3f000c00032f4d0137004d0233000c000303064d012a00020c4d0c2400304d0a1f000c00032a2a4d0a16000e0e0e0c0003270556570e0c0002503b2704430e0e0e|@2035,@1754,I48,I24,@1948,@1949,@2036,@992,I105,I218,@412,@353,@2039,@2034| 1952:S30|56414c55455f4f505328292e6c6f6f6b7570537472756374757265283429 1953:O1|@1954 1954:C6,64|00802b3b4d0038000e0c00030316404d012d000e0e0c0002294d0223003b3b6b296502042b372964294d0313000c000229230b4d0409002f2b6a66420e0e0e0e|@1956,I229,@1564,I48,@1957,@1955| 1955:C4,56|00802b56180c0002294d002b000c00024d0124000e0c00020314293556272a2a4d0214000e0c00032968016602013b64420e0e0e0e0e0e0e|@2031,I105,I218,@2030| 1956:S33|56414c55455f4f505328292e6c6f6f6b7570537472756374757265283429283129 1957:O7|@1958,@7198,@7200,@7202,@7203,@7205,@7197 1958:C13,168|00802b35561c4d009e002a2c6a563b4d0195002a2e6a565a4d028c002a306a56794d0383002a326a56984d047a002a346a56b74d0571002a220d6a56dc4d0667002a220f6a56fb4d075d002a22116a121200010004004d084e002a22136a121400010003004d093f002a22156a121600010002004d0a30002a22176a121800010001004d0b21002a22196a2f2c220c3422162213221c30221c220d2216221b680c29271a420e0e0e|@1960,@1961,@1966,@1967,@1968,@1969,@1970,@1971,@1990,@1991,@1992,@1993,@1959| 1959:C2,24|00802b352c36562856372a2a2e2e4d000600337b06070005|@1973,@1972| 1960:S24|5354525543545f56414c5328292e6d616b65456e76283129 1961:C2,24|0080560856172a2a2f4d000b00300e7b050500040e0e0e0e|@1963,@1962| 1962:O1|@1964 1963:S28|5354525543545f56414c5328292e6d616b654c6f6f6b283229283129 1964:C3,96|00822d2c4d0058000e0c0003293b4d014e000e0e0e0c000303033b023b293529293b4d013a000e0e0e0c000303033b022629352a3631352b2a0c000264031031372b2a0e0e0c000264296801640207292503511e333b656564440e0e0e0e0e0e|@1965,@836,I229| 1965:S28|556e6976657273616c5461626c652e756e69764c6f6f6b7570283329 1966:C2,24|0080560856172a2a2f4d000b00300e7b050500040e0e0e0e|@1963,@1962| 1967:C2,24|0080560856172a2a2f4d000b00300e7b050500040e0e0e0e|@1963,@1962| 1968:C2,24|0080560856172a2a2f4d000b00300e7b050500040e0e0e0e|@1963,@1962| 1969:C2,24|0080560856172a2a2f4d000b00300e7b050500040e0e0e0e|@1963,@1962| 1970:C2,24|0080560856172a2a2f4d000b00300e7b050500040e0e0e0e|@1963,@1962| 1971:C2,24|00802b352c36562856372a2a2e2e4d000600337b06070005|@1973,@1972| 1972:O1|@1974 1973:S29|5354525543545f56414c5328292e6d616b65456e746572283229283129 1974:C6,80|00832d362c2a0e0e0e0c0002642f2e4d003d000e0e0c0003294d0133000c00024d022c000e0c0002031129353b2a0e0e0e4f031b004000026502032a3b6931302b4d040b00310e7b050900040e0e0e0e|@1976,@836,I105,I218,@1977,@1975| 1975:O1|@1979 1976:S27|556e6976657273616c5461626c652e756e6976456e746572283429 1977:C3,64|00802b3b4d0038000e0c000303085604293b696402282b352c36562929352c2a0e0c00026503095624292b692965020d294f010b002100022b2a69296565420e|@1978,I229,@1977| 1978:S36|556e6976657273616c5461626c652e756e6976456e746572283429736561726368283129 1979:C16,328|00822d353b4d003f010c000303244d0136012d4d0231010e0e0c0003294d0327014d0223010c000328674d041a012b6a65102d362e372f38293b4d050a010e0e0e0c0003293b4d05fe000e0e0e0c00032d3b4d05f2000e0e0e0c0003322a0e0e0e0c00023333692d2b2b4d06da000e0e0e0c0004303b4d05ce000e0e0e0c0003293c4d07c2000e0e0e0c0003323b2b4d08b5000e0e0c000450323b4d05a9000e0e0c00032928054d099d000e0e0c0003313f4d0992000e0e0e0c00032a2a4d0a86000e0e0e0c00036603752f3d4d0977000c0003293c4d076e000e0e0e0c00032928403b4d0b60000e0c0004293b2d4d0855000e0e0c0004504d0c4b002c693b220d3b2d4d0840000e0c000450220f3b2c4d0833000c000450220c3b4d0528000e0c0003293c4d0d1e000e0e0e0c000364160e001200120000000002270502013b270b440e0e0e0e|@1981,I229,@1982,@353,@1983,@382,I253,@1984,I106,I255,I108,I233,I11,@186,I107,@1980| 1980:C11,168|00802b3b4d00a0000e0c000303033b029456012c3b4d008f000c000303033c0218293b4d0181000e0e0c00032d2a4d0276000e0e0e0c00036403054d036900102c3c4d0462000e0e0e0c00032a2a4d0156000e0e0e0c00032965293b4d0548000e0c000303043b50022829351204000100f1ff2a1206000100f3ff4d0629000e0e0c00032a2a2e4d071d000e0e0c000426042d3c4d0810000e0c00030e4f09070021000265420e0e|@1989,I234,I253,I231,@61,I106,I229,@187,@1984,I107,@1980| 1981:S20|486173685461626c652e68617368536574283329 1982:S34|417474656d707420746f2073657420612076616c75652077697468206e616d652028 1983:S24|2920696e20612066726f7a656e2068617368207461626c65 1984:O1|@1985 1985:C3,32|00822b3b4d0018000e0c000303033b020c2b353b2e4f01070020000265440e0e|@1987,I229,@1986| 1986:C11,320|008056092c3b4d0036010e0e0e0c000303033c0218293b4d0125010e0e0c00032d2a4d021a010e0e0e0c00036403054d030d01102c3c4d0406010e0e0e0c00032a2a4d01fa000e0e0e0c00032965293b4d05ec000e0c0003034e562956372f3b4d00dc000e0c000303033c02182a3b4d01cd000e0e0c0003302a4d02c2000e0e0e0c00036403054d03b500102f3c4d04ae000e0e0e0c00032b2a2c4d06a100330e0e0e7b05080004293556342a2a4d078e000e0e0e0c000364034d56395647303b4d007b000c000303033c02182a3b4d016d000e0e0c0003312a4d0262000e0e0e0c00036403054d03550010303c4d044e000e0e0e0c00032b2a2c4d064100340e0e0e7b050900042e3b4d0532000e0e0e0c000303125639293b4d0122000e0e0e0c0003296502012e293c4d0811000e0e0c0003644f09070031000266420e0e|@1988,I234,I253,I231,@61,I106,I229,I255,I24,I107,@1986| 1987:S31|486173685461626c652e68617368536574283329656e746572546162283329 1988:S39|486173685461626c652e68617368536574283329656e746572546162283329656e746572283129 1989:S31|486173685461626c652e68617368536574283329636f70794f766572283129 1990:C2,24|00802b352c36562856372a2a2e2e4d000600337b06070005|@1973,@1972| 1991:C2,24|00802b352c36562856372a2a2e2e4d000600337b06070005|@1973,@1972| 1992:C2,24|00802b352c36562856372a2a2e2e4d000600337b06070005|@1973,@1972| 1993:C2,24|00802b352c36562856372a2a2e2e4d000600337b06070005|@1973,@1972| 1994:O2|@1999,@7199 1995:O2|@1996,@7199 1996:C2,32|00802b3556174d0016000e0e0e0c000303033c0202020202013b420e0e0e0e0e|@617,I251| 1997:O2|@1998,@7199 1998:C1,16|008056072928452e6a64420e0e0e0e0e|@617| 1999:C3,40|00802b3556174d001e000e0e0e0c000303062b3729640202020202054d01080010420e0e0e0e0e0e|@617,I251,@621| 2000:O2|@2005,@7201 2001:O2|@2002,@7201 2002:C2,32|00802b3556174d0016000e0e0e0c000303033c0202020202013b420e0e0e0e0e|@617,I251| 2003:O2|@2004,@7201 2004:C1,16|008056072928452e6a64420e0e0e0e0e|@617| 2005:C3,40|00802b3556174d001e000e0e0e0c000303062b3729640202020202054d01080010420e0e0e0e0e0e|@617,I251,@621| 2006:O2|@2011,@7151 2007:O2|@2008,@7151 2008:C2,32|00802b3556174d0016000e0e0e0c000303033c0202020202013b420e0e0e0e0e|@617,I251| 2009:O2|@2010,@7151 2010:C1,16|008056072928452e6a64420e0e0e0e0e|@617| 2011:C3,40|00802b3556174d001e000e0e0e0c000303062b3729640202020202054d01080010420e0e0e0e0e0e|@617,I251,@621| 2012:O2|@2017,@7204 2013:O2|@2014,@7204 2014:C2,32|00802b3556174d0016000e0e0e0c000303033c0202020202013b420e0e0e0e0e|@617,I251| 2015:O2|@2016,@7204 2016:C1,16|008056072928452e6a64420e0e0e0e0e|@617| 2017:C3,40|00802b3556174d001e000e0e0e0c000303062b3729640202020202054d01080010420e0e0e0e0e0e|@617,I251,@621| 2018:O2|@2023,@7144 2019:O2|@2020,@7144 2020:C2,32|00802b3556174d0016000e0e0e0c000303033c0202020202013b420e0e0e0e0e|@617,I251| 2021:O2|@2022,@7144 2022:C1,16|008056072928452e6a64420e0e0e0e0e|@617| 2023:C3,40|00802b3556174d001e000e0e0e0c000303062b3729640202020202054d01080010420e0e0e0e0e0e|@617,I251,@621| 2024:O2|@2029,@7124 2025:O2|@2026,@7124 2026:C2,32|00802b3556174d0016000e0e0e0c000303033c0202020202013b420e0e0e0e0e|@617,I251| 2027:O2|@2028,@7124 2028:C1,16|008056072928452e6a64420e0e0e0e0e|@617| 2029:C3,40|00802b3556174d001e000e0e0e0c000303062b3729640202020202054d01080010420e0e0e0e0e0e|@617,I251,@621| 2030:O1|@2032 2031:S36|56414c55455f4f505328292e6c6f6f6b7570537472756374757265283429283129283129 2032:C5,120|00812c3b4d0070000e0c000303054d016600102c36296429353b4d005a000e0e0e0c0003034f29362e3b4d004a000e0e0e0c000303064d023e0002042e3529642f3b4d0032000e0e0e0c00030316404d0325000e0e0c0002294d021b003b3b6b296502042f3729643d2c316a2b2a2c6a29270502012d6443|@2033,I229,@621,I48,@1564| 2033:S35|5354525543545f56414c5328292e6d616b6553656c6563746564537472756374283229 2034:S14|20696e2073747275637475726520 2035:S42|56414c55455f4f505328292e6c6f6f6b75705374727563747572652834296c6f6f6b7570537472283229 2036:O1|@2037 2037:C2,16|00803b2c4d0008002d0e0e0e7e030003|@2038,I229| 2038:S34|5354525543545f56414c5328292e6973556e646566696e6564537472756374283129 2039:S23|2920686173206e6f74206265656e206465636c61726564 2040:C2,24|00805609561856272b3c2c2c324d000700330e7b07060006|@1947,@1903| 2041:O1|@2042 2042:C5,56|00802b3b4d0030000e0c00030316404d0125000e0e0c0002294d021b003b3b6b296502042b372964294d030b000c000229230a65420e0e0e|@2043,I229,@1564,I48,@1957| 2043:S67|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973747275637456616c756528352966756e6374722d283129 2044:S7|46756e63746f72 2045:O1|@2046 2046:C13,216|0086040200322a4d00cd000e0e0c00035029352a362a4d01be004d02ba000e0e0e0c0003030829340e0c0002022c4d03a600332c314d049f000c0005294d0597000c00020305306801020e29330c00022b2a0e0e0e0c00026464294d0679000e0e0c00024d0770000e0c0002030629352964025a314d085f004d095b000c0003292c4d0952000e0e0e0c0003294d0a47004d0943000c00032e4d013b004d0237000c000303064d012e00020c4d0b28002f4d0923000c00032a2a4d091a000e0e0e0c00032704300e0e0c0002503027041f070e0e0e0e0e0e|@2047,@1754,I48,I24,@1948,@1949,@2036,I105,I218,@412,@353,@2039,@2034| 2047:S24|56414c55455f4f505328292e6c6f6f6b7570416e79283729 2048:O1|@2049 2049:C2,16|00803b2c4d0008002d0e0e0e7e030003|@2050,I229| 2050:S35|5354525543545f56414c5328292e6973556e646566696e656446756e63746f72283129 2051:O1|@2052 2052:C3,24|00802b3b4d0010000e0c000303054d010600102b38296442|@2053,I229,@621| 2053:S30|5354525543545f56414c5328292e66756e63746f72526573756c74283129 2054:O1|@2055 2055:C3,24|00802b3b4d0010000e0c000303054d010600102b35296442|@2056,I229,@621| 2056:S27|5354525543545f56414c5328292e66756e63746f72417267283129 2057:O1|@2058 2058:C1,8|00802b382964420e|@2059| 2059:S28|5354525543545f56414c5328292e7369674d696e5479706573283129 2060:O1|@2061 2061:C1,8|00802b372964420e|@2062| 2062:S28|5354525543545f56414c5328292e7369674d61785479706573283129 2063:O1|@2064 2064:C9,88|00823b2d4d0050000e0c000303033b02012c293c4d0140000e0c00032928404d0235004d0331000e0e0c0004293b2d4d0425000e0e0c0004504d051b002a31336b4d0613002b32346b4d070b002a69312a452c462706440e|@2066,I233,I106,@1151,I11,I255,@2067,@2074,@2065| 2065:C1,16|00802b352c3656272d0e0e0e7e030003|@2069| 2066:S29|535452554354555245535f28292e747970654d61746368546162283329 2067:C13,416|00802b4d0099010e0e0c00024d0190010e0c000203033c02c42b29354d0280014d037c010e0c000303292936293b4d046e010e0e0e0c000329353c4d0361010e0e0c000303032b0207292503511e333b650201296429353b4d0344010e0c000303062936296402054d0534011056292a2a4d062b010c00036603033c025f2b29354d021b014d0317010c000303292936293b4d040a010e0e0e0c000329353c4d03fd000e0e0c000303032b0207292503511e323b650201296429353b4d03e0000e0c000303062936296402054d05d0001056282a2a4d07c7000c00036603033b02bc56072c29354d02b5004d03b1000e0e0c000303292936293b4d04a2000e0e0e0c000329353c4d0395000e0e0c000303032b0207292503511e343b650201296429353b4d0378000e0c000303062936296402054d05680010293b4d0661000e0e0c000303033c02182b3b4d0451000e0e0c00032a2a4d0746000e0e0e0c00036403054d08390010293c4d0932000e0e0e0c00032c2a4d0426000e0e0e0c00032965294d0a19000e0e0c00024d0b10000e0c000203033b02032968012704420e|@2069,@2070,I218,-2,I229,I253,@2068,I234,I231,@61,I106,@1153,@1156| 2068:O3|@7129,@237,@2073 2069:S32|535452554354555245535f28292e747970654d61746368546162283329283129 2070:O1|@2071 2071:C4,80|00802b29354d0047004d0143000c000303292936293b4d0236000e0e0e0c000329353c4d0129000e0e0c000303032b0207292503511e323b650201296429353b4d010c000e0c000303033c02013b6442|@2072,-2,I229,I253| 2072:S26|5354525543545f56414c5328292e6973426f756e644964283129 2073:S21|6f666673657449643a206e6f74206120426f756e64 2074:C11,384|00812c4d0079010e0e0c000203c82c29354d016b014d0267010c000303292936293b4d035a010e0e0e0c000329353c4d024d010e0e0c000303032b0207292503511e323b650201296429353b4d0230010e0c000303062936296402054d0420011056292a2a4d0517010c00036603642c29354d010a014d0206010e0e0e0c000303292936293b4d03f6000e0e0e0c000329353c4d02e9000e0e0c000303032b0207292503511e353b650201296429353b4d02cc000e0c000303062936296402054d04bc001056282a2a4d06b3000c00036602013b02013b03a356072d29354d019e004d029a000e0e0e0c000303292936293b4d038a000e0e0e0c000329353c4d027d000e0e0c000303032b0207292503511e353b650201296429353b4d0260000e0c000303062936296402054d04500010293b4d0649000e0e0c000303033c02182b3b4d0339000e0e0c00032a2a4d052e000e0e0e0c00036403054d07210010293c4d081a000e0e0e0c00032c2a314d090d00320e0e0e7b050800043b430e0e|@2075,@2070,-2,I229,I253,@2068,I231,I234,@61,I106,I255| 2075:S32|535452554354555245535f28292e747970654d61746368546162283329283229 2076:O1|@2077 2077:C3,40|00852e364d0020002e302f33680532322b0c00034d0110003032312f680534342b310e0e7e0c0003|@2079,@2080,@2078| 2078:C7,88|00812b4d0051000e0e0c00024d014800562756385649565a323068074d0238002a692b2a3b4d032f000c00042f4d0027000c00024d042000566756785689569a220d68064d0510002a692b2a3b4d0307000c00043b270843|@2213,@2083,@2214,@2346,@2081,@2348,@2212| 2079:S26|535452554354555245535f28292e6d6174636853696773283629 2080:C5,48|00812b4d0029000e0e0c00024d012000562756385649565a323068074d0210002a692b2a3b4d030700310e7b05070004|@2082,@2083,@2086,@2177,@2081| 2081:O1|@2179 2082:S39|535452554354555245535f28292e6d61746368536967732836296d617463684e616d6573283229 2083:O1|@2084 2084:C1,8|00802b352964420e|@2085| 2085:S23|5354525543545f56414c5328292e736967546162283129 2086:C33,696|00822c4d00b1020e0e0c000207d32c4d01a5020e0e0c0002561b4d029a020e0e0e0c0002294d038f02314d048a020e0e0e0c0004294d057f020c00024d0678020e0c000207d529352c4d076b020c00024d0864020e0c00024d065c020e0c000207cb564a2d2b2b4d094d020e0e0c0004502d4d0a42020e0e0e0c00022b4d0a37020c00022a2a4d0b2e020e0e0e0c0003654d0623020c00020336565956685677304d0c13020c00024d0d0c022a4d0e07020c0003294d0fff014d0efb010c00032e3c2f2f2d4d10ef0122127b071000062d4d11e3010c000203182a4d12d9010202fc000e0e0c00024d06cc010e0c000202013b033f5659566856772d4d0cb8010e0c000228282a4d0ead010e0e0c0003294d13a3014d0e9f0102028f000c00032e3c2f2f2d4d108f012212020279007b071000062d4d147f010c00023b2a4d1576010e0e0e0c0003644d066b010c000203192a4d1461010e0e0c00023b2a4d1556010e0e0e0c00036402013b03365659566856772d4d0c3f010c000228282a4d0e35010e0e0c0003294d162b014d0e27010c00032e3c2f2f2d4d101b0122127b071000063b6402013b6402305639564856574d170201344d0efd000e0e0c0003294d18f3004d0eef000c00032d3c2e2e2d4d10e300220f7b070d00066606ce2c4d19d4000e0c000203ca2c4d1ac9000e0e0c0002561b4d02be000e0e0e0c0002294d1bb300314d04ae000e0e0e0c0004294d05a3000c00024d069c000e0c0002035e2935293b4d158e000e0e0e0c00030316404d1c81000e0e0c0002294d1d77003b3b6b29650204293729642d3b4d1566000e0e0e0c00030316404d1c59000e0e0c0002294d1d4f003b3b6b296502042d3729642a2a568c330e0e0e7e0b00035639564856574d1e2e00344d0e29000e0e0c0003294d1f1f004d0e1b000c00032d3c2e2e2d4d100f00220f020206007b070d00063b440e0e|@2088,@2019,@2018,@2083,@7205,@1962,I105,I218,@1153,@1156,@2089,@2095,I113,@1751,@2098,@353,@2099,@1903,@2100,@2102,@2171,@2172,I229,@2174,@2175,@2087,@2007,@2006,@7202,@1564,I48,@2176,@2087| 2087:S23|29206d697373696e6720696e207374727563747572652e 2088:S42|535452554354555245535f28292e6d61746368536967732836296d617463684e616d6573283229283329 2089:O1|@2090 2090:C11,192|00822d4d00b9000e0e0c00022e4d01af000c00024d02a8000e0c000203152c352f4d019b000c0002293069642a0c00025102023b50294d0386000e0e0e0c0002030e294d0479000e0e0c00023c6402013b0364294d0368000e0c0002030e294d045d000e0e0c0002296402054d055000102937644d0648000e0c00022d362a4d013d000e0e0c00022a0c000264294d072e000e0e0e0c00024d0824000e0c000203033b020f2a30304d091400310e0e7b050800046502013b64440e0e0e0e0e0e|@2092,@2091,@1153,@2070,@1744,@1746,@621,@1748,I105,I218,@2089| 2091:O1|@2093 2092:S31|545950455f5452454528292e656e74657254797065436f6e73747273283329 2093:C3,48|00802b3929353b4d0025000e0e0c0003030629362964020e2936293b4d0110000e0c00032965293665420e0e0e0e0e0e|@2094,I229,I253| 2094:S7|6f283229283129 2095:O1|@2096 2096:C1,8|00802b362964420e|@2097| 2097:S24|5354525543545f56414c5328292e74634172697479283129 2098:S7|54797065732028 2099:S25|29206861766520646966666572656e7420617269746965732e 2100:O1|@2101 2101:C3,48|00802b3929353b4d0025000e0e0c0003030629362964020e2936293b4d0110000e0c00032965293565420e0e0e0e0e0e|@2094,I229,I253| 2102:O1|@2103 2103:C16,176|00802b4d00a9000e0e0c000203033c02972b4d019a000e0e0e0c0002294d028f000c00026403033b027e2b4d0381000e0e0c00022c4d0477000c00020402002e4d056c000e0c00024d0664000e0c000203193c2840304d0756000e0e0e0c00042a4d084b00452a46510206293b452f4650292b2d2b6a4d0936000e0e0e0c0002294d0a2b004d0b27004d0c23000c00044d081c002a4d0d17000c000327064d0e0e002c0e0e800002420e0e0e0e0e0e0e|@2105,@2100,@2091,@1717,@1751,@2106,@1153,@1156,I11,-1,@1160,@2109,@2112,@2104,I251,I218| 2104:O1|@2114 2105:S30|545950455f5452454528292e7065726d697473457175616c697479283129 2106:O1|@2107 2107:C1,8|00802b382964420e|@2108| 2108:S27|5354525543545f56414c5328292e74635479706556617273283129 2109:O1|@2110 2110:C2,8|00804d000200420e|@2111,-1| 2111:S33|545950455f5452454528292e7065726d697473457175616c697479283129283129 2112:O1|@2113 2113:C1,8|00803c420e0e0e0e|@2111| 2114:C36,584|00823b2e4d0040020e0c0002294d0137020c00020376294d022d020e0e0c000229352a364d0320020e0c000303033c025829352a364d040f020c0003294d0507020c00020339294d06fd010e0e0c00022b310e0e0e0c0002294d07eb014d08e7010c000303064d07de0102102b33334d09d501340e0e0e7b050b00046502092a30300e0e7d090002646406cd294d0ab7010c00020311294d0bad010e0e0c00024d07a4016406cb294d0c9c010e0c000207d5294d0d91010e0e0c000229352a37294d0e83010c0002294d0f7b010c00024d1074010e0c000203064d076a0106ca283d2a4d1161014d125d010e0e0c00044d1354012a354d084e010e0e0e0c0003644d1443010c000203033c06d0294d0f36010e0e0e0c00024d152c014d0f28010e0c00022a2a4d161e010e0e0e0c00036503064d07110102ab294d170a010e0e0e0c0002030c2b3c0e4f18fb007000030292294d19f1000202e6000e0e0c0002294d1ae3000c0002640338294d0fd8000202cd000e0c0002330c0002294d07c7004d08c30002025f000c000303064d07b600020c2c2a0e0e0e4f18ab00800003640241294d19a000020238000e0c00022a4d1b93000c0002292e4d1c8a000e0e0e0c00032b2a3c4d1d7d000e0e0c000429220e220e4d096f00220f020205007b050f000427040259294d055b000c00020326294d0651000e0e0c000229364d1e46002a2a0e0c0002293c0e0e0e4f18370070000327040229294d1f2b000c0002030f294d2021000e0e0c00024d21180010294d2212000e0e0e0c0002504d07070065440e0e0e0e0e|@2116,@1710,@1145,@1147,@1698,@1714,@1720,@1722,-1,I229,@2104,@1778,@1780,@1744,@1746,@1748,@1153,@1156,@2117,@2120,-2,I218,@2128,@2124,@2100,@2131,@2091,@1717,@2106,@2133,@2136,@2165,@1740,@1712,@2167,@2115| 2115:O1|@2169 2116:S23|545950455f5452454528292e657175616c697479283329 2117:O1|@2118 2118:C2,8|00804d000200420e|@2119,@440| 2119:S26|545950455f5452454528292e657175616c697479283329283129 2120:O2|@2121,@7206 2121:C3,32|00823b5617293b4d0015000e0e0c0003644f010b0010000264440e0e0e0e0e0e|@2123,I253,@2122| 2122:C6,104|00802b3b4d0060000e0c0003030a3b56172c0e0e0e8000022b3529352a362b372f365659292e4d013e000e0e0e0c000364032056584d022f000c00022c4d0227000c00022a2a4d031e000e0e0e0c00036502013b03032a020b290e0e0e4f0407005100022705420e|@2125,I229,I24,@1153,@2124,@2122| 2123:S28|5052494e545f5441424c4528292e6765744f7665726c6f6164283329 2124:O1|@2126 2125:S41|5052494e545f5441424c4528292e6765744f7665726c6f61642833297365617263684c697374283129 2126:C8,256|00812c29354d00f7004d01f3000c000303292936293b4d02e6000e0e0e0c000329353c4d01d9000e0e0c000303032b0207292503511e323b65020129642c29354d00bc004d01b8000e0c000303292936293b4d02aa000e0e0e0c000329353c4d019d000e0e0c000303032b0207292503511e333b65020129642a354d0081004d037d000e0e0c00030a020009002d0051003b02662a362a354d0064004d0160000e0c0003030e2a362a2a4d045200310e7e0800033b6402422a362a354d0540004d013c000e0c0003030e2a362a2a4d042e00310e7e0800033b64021e2a362a353b4d011b000c0003030e2a362a2a4d060e00310e7e0800033b6465430e0e0e0e|@2127,-2,I229,I253,I107,I251,-1,I113| 2127:S27|5354525543545f56414c5328292e73616d65547970654964283229 2128:O6|@2130,0,0,0,@533,@2129 2129:O2|-1,@7207 2130:S4|7265616c 2131:C6,88|00812c3b4d0050000e0c000303032b02452c352d36562856372c2b2b4d0138000e0c0004294d022f004d032b000c00030a01000f0015002c314f041b0061000302124d021200020c2c3b0e0e0e4f0407006100032705430e|@2132,I229,@2104,-1,I107,@2131| 2132:S35|545950455f5452454528292e657175616c6974792833296571466f724c697374283229 2133:O1|@2134 2134:C7,112|00812c4d0069000e0e0c00024d0160000e0c000203562c352d362d4d0051000e0e0c00024d0148000e0c0002033a2d352e362c4d0239000e0e0c0002030e2c4d032d000e0e0c0002296402054d042000102b2a692d2c4d0516000e0e0e0c00032a2a6929270602013b6502013b430e0e|@2135,I105,I218,@1145,@1147,@621,@2133| 2135:S23|545950455f5452454528292e636f707956617273283229 2136:O1|@2137 2137:C5,40|00822c2c4d0020000e0c00034d0118002a692f2a4d0210004d030c00300e0e7b050700040e0e0e0e|@2139,@2140,@2147,@2154,@2138| 2138:O1|@2157 2139:S30|545950455f5452454528292e67656e6572616c6973655479706573283329 2140:O1|@2141 2141:C3,32|00813c28402e4d0016000e0e0e0c00044d010c002a2e6a64430e0e0e0e0e0e0e|@2143,I11,@2142| 2142:C6,64|00802b4d0039000e0e0c0002030e2b4d012d000e0e0c0002296402054d022000103b5627293b4d0316000e0e0e0c0003644f040b0020000265420e0e0e0e0e0e|@2145,@1145,@1147,@621,I253,@2144| 2143:S27|545950455f5452454528292e7476617253657175656e6365283229 2144:C16,232|00802b3b4d00e0000e0c000303ac560429352a364d01d0000e0c0003562429352a364d02c2000e0e0e0c0003640304572802013b0402004d03ad001b0f272d3b2e2e4d04a2000e0e0e0c00075029644d0595000e0e0c0002294d068b000c0002030e294d0781000e0e0c0002296402054d08740010565429352a364d0969000e0e0c00032b2a4d0a5e000e0e0e0c000350577756842e2a6957a7293b4d0b48000e0c00032b2a692e3b2b4d0c3a000e0e0e0c00045032270d02282b3529352a362e3656442b2a4d0d1e000e0e0e0c00036403032b020a290e0e4f0e0b004100022704420e0e0e0e0e|@2146,I229,@1698,@1733,@214,@1012,@989,@1145,@1147,@621,@1714,@1140,I253,I255,@1695,@2144| 2145:S30|545950455f5452454528292e7476617253657175656e6365283229283129 2146:S41|545950455f5452454528292e7476617253657175656e63652832292831297054797065566172283129 2147:C15,224|00802b4d00d9000e0e0c000203ca2b4d01cd000e0e0c000229352a364d02c0000e0c0003291b0f274d03b4000e0c0003644d04ab000c000203032c02982c56270e0c00022a352b364d0594000e0c0003294d068b000c00020377294d0781000e0e0c000229372b2f4d0874004d0970000e0c0004294d0667000c0002034a294d075d000e0e0c000229352a36304d004f000c0002030e304d0145000e0e0c0002296402054d0a380010322f692c2c2b6a644d0b2b000c00022a2a4d0c22000e0e0e0c0003260602054d0d140010260302023b502a656402012b420e0e0e0e0e0e|@2149,@1145,@1147,@1730,I113,I218,@1714,@1720,@1722,@2150,@2138,@621,@1142,@1140,@2148| 2148:O3|@7129,@237,@2153 2149:S44|545950455f5452454528292e67656e6572616c6973655479706573283329636f707954797065566172283129 2150:O1|@2151 2151:C1,8|00802b420e0e0e0e|@2152| 2152:S47|545950455f5452454528292e67656e6572616c6973655479706573283329636f707954797065566172283129283129 2153:S48|436f7079206f66206c6162656c6c6564207265636f7264206973206e6f742061206c6162656c6c6564207265636f7264 2154:O1|@2155 2155:C1,8|00802b420e0e0e0e|@2156| 2156:S33|545950455f5452454528292e67656e6572616c6973655479706573283329283129 2157:C30,448|00823b3b2f4d00b7010c0002294d01af010c00020312294d02a5010e0e0c00022a31300e7d090002294d0393010c000203b6294d0489010e0e0c000229352a372a4f057b016000022a4d0673010c0002330c0002294d0767010c00022b2e4d085e010e0e0e0c000303312c4d0651010e0e0c00022b2a4d0846010e0e0e0c00036403152c353b4d0936010e0e0e0c000303033c02013b02013b02013b03032f02430402002b4d0a17010c00024d0b10010e0c000203193c28402d4d0c02010e0e0e0c00042a4d0df700452a46510206293b452c4650292d2c2b6a4d0ee200220e7d100002270606cb294d0fd3000c00020356294d10c9000e0e0c000229352a362a33334d11b9000e0e0c00042a34344d11ad000e0e0c00042a2d4d08a2000e0e0e0c0003030c292c4d0894000e0c000302013b03032e020c2a2a694d128100347d0d000227050275294d1373000c0002033a294d1469000e0e0c000229352a36294f155b00600002292b4d0852000e0e0e0c000303032d020f2b2a3b6a4d163f00330e0e7d0c000227040231294d172f000c000203064d1826000221294d191f000c000203064d1a16000211294d1b0f00020208000c00024d1c04001066440e|@2159,@1710,@1145,@1147,@1744,@1746,@2160,@1748,@1751,I251,I229,@1153,@1156,I11,-1,@1160,@1778,@1780,@2138,@1171,@1720,@1722,@2162,@1142,@1717,@214,@2115,@992,@1712,@2158| 2158:O3|@7129,@237,@2164 2159:S23|545950455f5452454528292e636f707954797065283329 2160:C5,88|00802b3b4d0050000e0c000303033b02422b352c36562856372c2b2b4d0138000e0c00042c4f022f005100022a2f4d0326000e0e0e0c0003030c292e4d0318000e0c000302013b03033102052a2a6929642706420e0e0e0e|@2161,I229,@2138,@2160,I251| 2161:S34|545950455f5452454528292e636f707954797065283329636f70794c697374283129 2162:C5,96|00802b3b4d0058000e0c000303033b02492b3529352a362e36564856572c2b2b4d013c000e0c00042c4f0233007100022a2f4d032a000e0e0e0c0003030c292e4d031c000e0c000302013b03033302082f2b69292b6929652708420e0e0e0e0e|@2163,I229,@2138,@2162,I251| 2163:S40|545950455f5452454528292e636f707954797065283329636f70795265636f72644c697374283129 2164:S27|636f7079547970653a204f7665726c6f616453657420666f756e64 2165:O1|@2166 2166:C3,40|00802b3b4d0020000e0c000303033b02152b352c362a362a4d010c000e0c00022a2a69292705420e|@445,I229,@2165| 2167:O3|@7129,@237,@2168 2168:S28|657175616c697479202d204f7665726c6f616473657420666f756e64 2169:C2,16|00803b2c354d0007002d0e0e7e030003|@2170,I229| 2170:S7|42616454797065 2171:S18|29206973206e6f7420616e20657174797065 2172:O1|@2173 2173:C3,48|00802b3929353b4d0025000e0e0c0003030629362964020e2936293b4d0110000e0c00032965293765420e0e0e0e0e0e|@2094,I229,I253| 2174:S19|29206973206e6f742061206461746174797065 2175:S6|547970652028 2176:S11|5374727563747572652028 2177:C1,16|00802b352c362d3756372e7b05030004|@2178| 2178:S42|535452554354555245535f28292e6d61746368536967732836296d617463684e616d6573283229283129 2179:C3,80|00822d4d0049000e0e0c00022c2a293729644d013a000e0e0e0c000203032a022c29363b2a0c000229352a362d353b2a0e0c00022c2c326a220d0e0e0e0c0002292b2509250926071e3a3b270766440e|@2181,@2180,I218| 2180:O1|@2182 2181:S26|556e6976657273616c5461626c652e756e6976466f6c64283329 2182:C4,144|00802b4d0089000e0e0c00020402002a37296403642a363b2a0c00022936293b4d016c000e0c000303452d29353b2a0e0e0c000229372964032b29363b2a0e0e0e0c00022936293b4d0144000e0c000303092c250626051e2c0206322d452a4650260302062f2a453b4650260302062c2e452a465026030206292b453b465029644d020b002d0e0e7d0400020e0e0e0e|@2184,@2185,I229,@2183| 2183:O2|@2201,@2200 2184:S26|556e6976657273616c5461626c652e756e69764f766572283129 2185:O1|@2186 2186:C10,184|00800402002c354d00ad004d01a9000e0e0c000303292c38293b4d029a000e0e0e0c0003293b4d028e000e0e0e0c00034d0384002b692d2b452a462605021a2c37294d0472000e0e0e0c00024d0568002b692c2b452a46260429352a364d0657002a2c6a4d005000293c4d074a000e0e0e0c0003292e4d083e000e0e0e0c0003030a292c320e0e0e7d090002292d0e0e0e0c0002293b4d011e000e0e0e0c000303092a2503511e3e3b02092a2d330e0e7d0a00022707420e|@2188,-1,I229,I253,@2189,I15,@2191,@2187,I106,I231| 2187:C4,48|008056082c2a4d0026000e0e0e0c00034d011c002c564756583168054d02100056475658316b2a2a2d6a292705420e0e|@2193,I234,@2194,@2192| 2188:S21|486173685461626c652e686173684f766572283129 2189:C6,80|008056072c3b4d0046000e0e0e0c000303033c0218293b4d0135000e0e0c00032d2a4d022a000e0e0e0c00036403054d031d00102c3c4d0416000e0e0e0c00032a2a4d010a000e0e0e0c00032966420e|@2190,I234,I253,I231,@61,I106| 2190:S34|486173685461626c652e686173684f7665722831293c7061747465726e3e2d283129 2191:C6,72|008056072c3b4d003e000e0e0e0c000303033c0218294d012e000e0e0e0c00022d2a4d0222000e0e0e0c00036403054d03150010292d4d040e000e0e0e0c00032965420e0e0e0e0e|@2190,I234,I15,I231,@61,I253| 2192:C5,64|0080560956182a2a4d0034000e0c00036403202956270e0e0e0c0002293b4d011e000e0e0e0c000303054d02120010296402054d0309001064420e0e0e0e0e0e|@2195,I234,I229,@2197,@2196| 2193:S32|486173685461626c652e686173684f7665722831296d616b6549746572283129 2194:C4,88|0080560a29293c4d004d000e0e0c000356392a2a4d0140000e0c00036403092956472f0e7d0600022956480e0e0c0002293b4d0222000e0e0e0c000303092a2503511e3d3b02092a5657300e7d0700022704420e0e0e0e0e|@2195,I106,I231,I229| 2195:S35|486173685461626c652e686173684f7665722831296d616b6549746572283129283129 2196:O3|@7129,@237,@2199 2197:O3|@7129,@237,@2198 2198:S31|486173685461626c652e686173684f7665722e76616c756520284e6f6e6529 2199:S39|486173685461626c652e686173684f7665722e76616c756520286c696d69742070617373656429 2200:O2|@2208,@2183 2201:C5,48|00802b363b2a4d0026000e0e0e0c00034d011c000e0c00024d02140056372f6a4d030c002f692a2a2d6a292705420e0e|@2203,I229,I218,@2204,@2202| 2202:C3,56|008056070402002a352b36293b4d0027000c000303054d011e001029352b363b2a0c000229352f2a452d4626052b2704420e0e0e0e0e0e0e|@2205,I229,@2206| 2203:S37|556e6976657273616c5461626c652e756e69764f7665722831296d616b6549746572283129 2204:C1,16|0080560829352a3656372e0e7e040003|@2205| 2205:S40|556e6976657273616c5461626c652e756e69764f7665722831296d616b6549746572283129283129 2206:O3|@7129,@237,@2207 2207:S29|556e6976657273616c5461626c652e756e69764f7665722e76616c7565 2208:C3,128|00812b3b4d0078000e0c000303054d016e00102b36293b4d0065000e0e0c000303520402002e29353b2a0e0e0e0c000229372964032b29363b2a0e0e0e0c00022936293b4d0038000e0c000303092c250626051e2d02062f2d452a4650260302062c2a453b46502603296456272d0e0e7d0500022d2a6956272d0e0e7d050002|@2210,I229,@2209| 2209:O3|@7129,@237,@2211 2210:S33|556e6976657273616c5461626c652e756e69764f7665722831296e657874283229 2211:S28|556e6976657273616c5461626c652e756e69764f7665722e6e657874 2212:C1,16|00802b352c362d3756372e7b05030004|@2358| 2213:S38|535452554354555245535f28292e6d61746368536967732836296d6174636856616c73283229 2214:C16,288|00822c4d0019010e0e0c000203662c4d010d010e0e0c0002561b4d0202010e0e0e0c0002294d03f700314d04f2000e0e0e0c0004294d05e7000c00024d06e0000e0c0002032a2935564a4d07d200566956785687569a68055669567856872e322f2f2f2f2f4d08b70022127b090e00083b6602a52c4d09a7000c0002039a2c4d0a9d000e0e0c0002561b4d0292000e0e0e0c0002294d0b8700314d0482000e0e0e0c0004294d0577000c00024d0670000e0c0002035e2935293b4d0c62000e0e0e0c00030316404d0d55000e0e0c0002294d0e4b003b3b6b29650204293729642d3b4d0c3a000e0e0e0c00030316404d0d2d000e0e0c0002294d0e23003b3b6b296502042d3729642a2a568c330e0e0e7e0b00033b6602013b440e0e0e0e0e0e|@2216,@2019,@2018,@2083,@7205,@1962,I105,I218,@2217,@2215,@2007,@2006,@7202,I229,@1564,I48| 2215:O1|@2334 2216:S65|535452554354555245535f28292e6d61746368536967732836296d6174636856616c73283229636865636b5479706573416e64537472756374757265732d283329 2217:C3,48|00802b352c362d37563a56475659566856774d001a002b302c6b31313030302e4d010c0022110e7b080c00070e0e0e0e|@2219,@2220,@2218| 2218:O1|@2224 2219:S68|535452554354555245535f28292e6d61746368536967732836296d6174636856616c73283229636865636b5479706573416e64537472756374757265732d283329283129 2220:C8,88|00805609292309294d004c004d0148000e0c00032e3856484d023c002a4d0337000c0003294d042f004d032b000c0003652a0e0e0e0c0002512e354d0519002a0e0c0002515637293b69292c324d060700330e7b05080004|@2222,@7196,@623,@2223,@353,@2221,@1799,@1666| 2221:S6|29206e656172 2222:S29|535452554354555245535f28292e666f756e644e656172283329283129 2223:S16|5768696c6520636865636b696e672028 2224:C5,48|00854d002a002f69313b3c4d0121000e0e0c00044d0218002e30326b2a332d2c4d030c00320e0e7b060b00050e0e0e0e|@2226,@2227,@2136,@2246,@2225| 2225:O1|@2255 2226:S25|545950455f5452454528292e6d617463685479706573283629 2227:C4,32|00804d001a005617692c4d0112002b4d020d002f0e0e0e7b050400040e0e0e0e|@2229,@2230,@2228,@2138| 2228:O1|@2244 2229:S38|545950455f5452454528292e6d617463685479706573283629636f7079546172676574283129 2230:C7,48|00804d002a005617694d01230056272a2a692f2d4d0218002c4d0313004d040f004d050b00220c7b080700070e0e0e0e|@2232,@2233,@2235,@1892,@2228,I48,@2231| 2231:O1|@2237 2232:S41|545950455f5452454528292e6d617463685479706573283629636f7079546172676574283129283129 2233:C3,32|00802b56170c0002294d0013000c00024d010c002d0e0e0e7d0400020e0e0e0e|@2234,I105,I218| 2234:S44|545950455f5452454528292e6d617463685479706573283629636f7079546172676574283129283129283129 2235:O1|@2236 2236:C1,8|00803b420e0e0e0e|@2234| 2237:C17,256|00852d352e36324d00f5000e0e0c0002334d01eb000c0002294d02e3000c000203032902204d03d7004d04d3003134220d220f68062a4d05c6002b4d06c1000e0e0c0004642b220c0e0c000203033c02132a2a4d07a9000e0e0c00034d08a0000e0c000203942b2d0e0c0002294d098f000c00024d0888000e0c000203062935296402732b4d0277000c00020325220d4d0a6c000e0c00020402002a2a4d0b5f000c0003502936342a4d0c53000c0003660209220d4d0a47000c0002220e4d0d3e000e0e0e0c00023b220e0e0e0c000222104d0e2a000e0e0e0c00022c2c302d2d3b4d0f1a000e0e0e0c0007312a69340e0c00022a2706640202220c27051f06|@2239,@1153,@2091,@1717,@2240,@2231,@2228,@2138,I251,I218,I105,@1751,@1754,@353,@2106,@2100,@2238| 2238:O1|@2242 2239:S29|545950455f5452454528292e636f707954797065436f6e737472283629 2240:C2,32|0080560b561a562956382f2d2d2d4d000e002e56a7220c7b080700070e0e0e0e|@2241,@2228| 2241:S44|545950455f5452454528292e636f707954797065436f6e737472283629636f7069656445717569762d283129 2242:C5,88|00853b30293b4d004e000e0e0e0c000303032a021629362b3c4d013b000c0003292b25042504511e233b65652d303b6a3c28402b4d0220000e0c00044d0318002a69342d31220d2d220d68062927051f060e0e0e0e0e0e0e|@2243,I229,I106,I11,-1| 2243:S32|5354525543545f56414c5328292e6d616b6554797065436f6e73747273283629 2244:C1,8|00802b420e0e0e0e|@2245| 2245:S22|545950455f5452454528292e747269764d6170283129 2246:C4,40|00802b352c362d375639564856574d0016002f4d01110030303030304d02080022100e7b0a090009|@2248,@2249,@2250,@2247| 2247:O1|@2251 2248:S37|545950455f5452454528292e6d61746368547970657328362963616e744d61746368283129 2249:S11|43616e2774206d61746368 2250:S2|746f 2251:C3,64|00874d003a002c303234220d220f346808292e3c3135323633373438220c39220d3a220e2306220f230722102308221123094d010a0022100e0e0e7b0f0b000e|@2253,@2252,@774| 2252:C11,192|00803b4d00b9000e0e0c0002561d292309294d01aa004d02a6000e0e0e0c00032f23064d0399002a0e0c0002512f38565c2a0e0e0e0c0002512f354d0481002a0e0c000251564b292b32303c4d0570000e0c00065030354d0665002a0e0c0002513038566a2a0e0e0e0c00025130354d074d002a0e0c0002515659292c33313c4d053c000e0c00065031354d0831002a0e0c000251313856782a0e0e0e0c00025131354d0919002a0e0c0002513156770e0c00025031373b2a330e0e7d0a0002|@2254,@1689,@7196,@623,@356,@338,@1704,@338,@338,@338,@338| 2253:S25|545950455f5452454528292e6d617463684572726f72283829 2254:S28|545950455f5452454528292e6d617463684572726f72283829283129 2255:C2,24|00833b2f2f2f0e0e0e4f000b00300004641f040e0e0e0e0e|@2257,@2256| 2256:C47,2872|00823b3b2f4d002f0b0c00022f4d00270b0c00023b3b3b2d4d011c0b0e0c000203033b06ce2d4d020e0b0e0e0e0c000207d22d4d03010b0e0e0c00022d4d01f70a0c000203033b06ce2d4d02ea0a0e0e0e0c000207d22d4d03dd0a0e0e0c00022a352b364d04d00a0e0c00032f220d0e0e0c0002294d02bf0a0c000207d4294d03b50a0e0e0c00022d2a4d05aa0a0e0e0e0c000303033b06d32d352e364d06970a0c0003030c29330e4f078b0ad0000306d129352a364d047e0a0e0e0e0c00032c4d08730a0c000203c52c4d09690a0e0e0c00022a4d085f0a0c0002036d2a4d09550a0e0e0c00022c4d0a4b0a4d0b470a0202400a0c000350304d0a3a0a4d0b360a0202e9010e0e0e0c0003502a2a302e4d0c230a0202d301160d001a0a1500000000062d2a0202b9010e0e0e160700060a13000000000350312f0e0e160700f6091300000000036502412a4d0ee80902027c010e0c0002030c2b220c4f07d709f0000302262211221102025f010e0e0e0c000222132a4d0fbd096a6456f72211020248010e0e0e7d1300026406d12c4d10a4090e0c000207c82c4d1199090e0e0c00022a4d108f090c000203962a4d1185090e0e0c00023b2a0e0e0e1612007609120000000002293b4d136a090e0e0e0c00030322221422140e0e0e0c000222162a4d1451096a641213000100010022140e0e7d1600022e4d0a3b094d0b37090c000350324d0a2e094d0b2a090e0e0e0c000350294d151e090e0e0e0c00022f2a0e0e0e1607000e091500000000035033310e0e160700fe08150000000003270402382a4d0eef080c0002030c2b220c4f07e308f0000302222211221102046a001b000e0c000222132a4d0fc9086a6456f722110e0e0e7d13000264024d2c4d0eb4080e0c0002030c2e2c0e4f07a708e000030236294d0e9d080e0e0c0002030c2a340e4f078f08e00003021e221022100e0e0e0c000222122a4d0f79086a6456e722100e0e0e7d12000264640210312a4d0c62080e0e0e4f165b08d10004660209290e4f174f088000026406ca2d4d1844080e0c000207cd2d4d1939080e0e0c000229352a372f4d012b080c000203033b06ca2f4d021e080e0e0e0c000203152f4d0311080e0e0c0002294f1a0708b000026406cc2f4d18fc070e0c000207cd2f4d19f1070e0e0c000229352a372c4d1be3070c00022a4d1bdb070c00022a4d1cd3070c00024d1dcc070e0c000203033c02142a4d1ebe070e0e0e0c0002294d0eb3070c0002644d1fab070c000203462a4d1ea1070e0e0c00022b4d2097070c000229324d218e070e0e0e0c00032b2a3c4d22810702027a070e0e0c00042922102217020243031616006a07170001000004270406cf294d1c5b07020228030c00024d1d50070e0c000203033c0218294d1e42070e0e0e0c0002294d0e3707020204030c0002644d1f2b07020258010c0002033e294d1e1d070e0e0c00022a4d2013070c0002292f4d210a070e0e0e0c00032b2a3c4d22fd060e0e0c000422102a2217161600ee06170001000004270406cd3422120e0e0c0002294d18d7060c000207de294d19cd060e0e0c000229352a37294d1bbf060c0002294d1cb7060c00024d1db0060e0c00024d1fa8060e0c00020320294d1e9d060e0e0c0002294d0e93060202bc000c0002644d1f87060c000202013b0343294d1e7a060e0e0e0c00022a4d206f060c0002292e4d2166060e0e0e0c00032b2a3c4d2259060e0e0c000422152a4d0c4d060e0e16160046061c0001000004270402502f4d1c37060c00022a4d1c2f060c00022a2a4d2326060e0e0e0c00036503183b2c220d020242000e0e1624000e0618000000000364021922112e4d25fe056a1216000100010002020a0022177d19000227040214220d2a4d0ce1050e0e161600da0514000100000464270506cf2f4d10ca050e0e0e0c000207de2f4d11bd050e0e0c00022a4d1bb3050c0002294d1cab050c00024d1da4050e0c000203033c0214294d1e96050e0e0e0c0002294d0e8b050c0002644d1f83050c0002033e294d1e79050e0e0c00022a4d206f050c0002292f4d2166050e0e0e0c00032b2a3c4d2259050e0e0c000429220d22141616004a051400010000042704027c2c3b4d133a050e0e0e0c000303502a294d262c050e0c00024d1f24050e0c0002033629352a362c4d1c15050e0e0c00022b4d1c0b050c00022a2a4d2302050202cf000e0e0e0c00036503033c0207292503511e433b6502013b64020321003b03033b021831220f0e0e0c0002332a4d27ce046a6456d7220f7d110002650292294d1bbc040e0c0002294d1cb3040c00024d1dac040e0c000203033c0214294d1e9e040e0e0e0c0002294d0e93040c0002644d1f8b040c0002033e294d1e81040e0e0c00022a4d2077040c0002292e4d216e040e0e0e0c00032b2a3c4d2261040e0e0c000429220c221316160052041300010000042704021830220e0e0e0c0002322a4d283a046a6456c7220e7d100002646606d92d4d1027040c000207d12d4d111d040e0e0c00022d4d0113040c000203033b06d02d4d0206040e0e0e0c000203152d4d03f9030e0e0c0002294f1aef039000026406cf2d4d18e4030e0c000207d62d4d19d9030e0e0c000229352a37294d1bcb030c0002294d1cc3030c00024d1dbc030e0c000203033c0214294d1eae030e0e0e0c0002294d0ea3030c0002644d1f9b030c0002033e294d1e91030e0e0c00022a4d2087030c0002292e4d217e030e0e0e0c00032b2a3c4d2271030e0e0c0004220d2a22141616006203140001000004270406ca31220f02044e0356010c0002294d1847030c000207d1294d193d0302023d010e0e0c000229352a37294d1b2b030c0002294d1c23030c00024d1d1c0302021c010e0c000203033b06dc294d1e0a030202f3000e0e0e0c0002294d0efb020c0002644d1ff3020c00020342294d1ee9020e0e0c00022a4d20df020c0002292e4d21d6020e0e0e0c00032b2a3c4d22c9020e0e0c000422122a4d0cbd020e0e161600b602190001000004270402802b3b4d13a6020e0e0e0c0003035232294d2698020e0c00024d1f9002020275000e0c0002033629352a36314d1c7d020e0e0c00022b4d1c7302020247000c00022a2a4d2366020e0e0e0c00036503033c0207292503511e473b6502013b6402013b03033b021a220e2e4d293f026a121300010001002214020205000e7d16000227040210332a4d0c22020e0e0e4f161b02f1000464270402172d340e0e0c00022f2a4d2a06026a645697340e7d0d00026406d22d4d2bf4010e0c000203b52d4d2ce9010e0e0c000229352a362f4d01db010c000203033b02972f4d02ce010e0e0e0c000203152f4d03c1010e0e0c0002294f1ab701b000026402752f4d18ac010e0c0002031d2f4d19a1010e0e0c000229352a372a2a0e0e0e4f2d8f01e0000366024d2f4d2b84010e0c000203292f4d2c79010e0e0c000229352a362d2b22110e4f166701f10004502c2a22114f165b01f100046602192f220d0e0e0e0c0002312a4d2a46016a6456b7220d7d0f00026606cf2d4d0e34010e0c000203842c4d012901020222010e0e0c000203033b026f2c4d0216010e0e0e0c000203152c4d0309010e0e0c0002294f1aff0080000264024d2c4d18f4000e0c0002031d2c4d19e9000e0e0c000229352a372a2a0e0e0e4f2dd700b000036602252c4d0ecc000e0c000203033b02172c330e0e0c00022e2a4d2ab6006a645687330e7d0c000202a72d4d09a5000e0e0c00022d4d019b000c000203033b028f2d4d028e000e0e0e0c000203152d4d0381000e0e0c0002294f1a770090000264026d2d4d186c00020265000e0c0002031d2d4d195d000e0e0c000229352a372a2a0e0e0e4f2d4b00c000036602412d4d0840000e0c0002031f2d4d0935000e0e0c00022a2a3131220f0e0e0e4f0d2300d00006503b6402172d340e0e0c00022f2a4d2a0e006a645697340e7d0d000264270744|@2259,@1710,@2115,@1145,@1147,@1714,@1695,@2260,@2263,@1720,@1722,@214,@1140,@2228,@2300,@1717,@2317,@1740,@1712,@2318,I229,@2320,@2321,@2256,@2324,@1744,@1746,@2326,@1748,@1153,@1156,@2091,I218,@2106,@2133,@2136,@2124,@2328,@2331,I105,@2332,@2317,@2332,@2317,@1778,@1780,@2258| 2257:S24|545950455f5452454528292e747970654d61746368283429 2258:C15,320|00812b4d0039010e0e0c0002294d012f010c00024d0228010e0c000203033c0214294d031a010e0e0e0c0002294d040f010c0002644d0507010c0002033a56122a4d03fb000c00022b4d06f3000c000229314d07ea000e0e0e0c00032b2a3c4d08dd000e0e0c000456672e2b2b4f09cf00920004270602c2561156270e0c0002294d0abb000c0002039e294d0bb1000e0e0c000229352a37294d00a3000c0002294d019b000c00024d0294000e0c000203033b026f294d0386000e0e0e0c0002294d047b000c0002644d0573000c0002033e56622a4d0367000c00022b4d065f000c0002292f4d0756000e0e0e0c00032b2a3c4d0849000e0e0c00042d2a4d0c3e000e0e0e4f093700d200042705021456622e2a4d0d28006a645777320e0e0e7d0a0002270402115622292b4d0c10000e4f090b00520004646464430e0e0e0e|@2333,@1748,@1153,@1156,@2091,@1717,I218,@2106,@2133,@2136,@2256,@1744,@1746,@2228,@2317| 2259:S32|545950455f5452454528292e747970654d617463682834296d61746368283329 2260:O1|@2261 2261:C4,40|00812b3d4d0020000e0c0003293b4d0116000e0e0e0c0003644d020b002c0e0e7d0400020e0e0e0e|@2262,I243,I251,I218| 2262:S31|5354525543545f56414c5328292e74764e6f6e556e69666961626c65283229 2263:C24,328|00814d0042012d562856375649575768062d352e364d012f010c0003294d0227010c0002031d294d031d010e0e0c00022a2f4d0412010e0e0e4f050b0152000451022a294d0600010e0c0002031d294d07f5000e0e0c00022a2f4d04ea000e0e0e4f05e3005200045102023b502e352f364d08d3000c000303033c02274d09c7002b694d0ac1000e0e0c00022e2a0e0e0e0c0002643c2a0e0e0c0002644d0ba7000c000203423b2e0e4f0c9b00300002290331303531364d088d000e0e0c000303064d0d820002044d0e7c005659566856770e0e0e0c00022a2a2d6a655767317d0900023b65025c2e352f364d0f58000e0c000303212d4d104d004d1149004d1245000e0e0c00044d133c002a4d1437000c00036402013b031d5629563856470e0c00022a2a4d151e006a6557370e0e0e0c00025002023b502e2e4d1609002f7e06000365430e0e|@2265,@2266,@1714,@1720,@1722,@2228,@2256,@1740,@1712,@2260,@2269,@2273,I218,@2285,@2287,@2288,@1698,@2289,@2292,@2104,-1,I251,@2264,@1140| 2264:S24|28526571756972657320657175616c697479207479706529 2265:S41|545950455f5452454528292e747970654d617463682834296d6174636828332961737369676e283229 2266:C21,432|00812c3b4d00a8010e0c000303033b06cb2b4d019a010e0e0e0c000207cd2b4d028d010e0e0c0002561729352a364d037e010e0e0e0c00032b352c364d0370010e0c00032a2a4d0466010e0e0e0c000303032a020129565729352a364d0550010e0c00036403033c020e2d352e364d053e010e0e0e0c0003032a2d352e364d062e010e0e0e0c0003294d0723010c0002030e294d0819010e0e0c00023b6402013c6402013b2e352f364d0303010c0003292c4d09fa000e0e0e0c0003644d0aef000c000203033c02272e352f364d05df000c0003292b4d00d6000202cf000e0e0e0c0003644d0ac7000202bf000c0002039e2e352f364d0bb6000e0e0e0c0003031d566a567856890e0c00022a2a4d0c9e006a65567b0e0e0e0c000250026f2e352f364d0d89000e0e0c00030402004d0e7d002d2c3b2f2e4d0f74000e0c00075029644d1069000e0e0c0002294d015f000c0002030e294d0255000e0e0c0002296402054d11480010313532364d063f000c00032a2a4d1236000e0e0e0c000350322c4d1229000e0e0c0003260502023b5056672f2a4d1316000e0e0e0c0003644d0a0b00320e0e7d0a00023c430e0e|@2268,I229,@1145,@1147,@1730,I234,@1733,@1714,@1740,@1712,I113,I218,@2260,@2267,@1698,@214,@1012,@989,@621,@1140,@1695| 2267:S44|2854797065207661726961626c65206973206672656520696e20737572726f756e64696e672073636f706529 2268:S57|545950455f5452454528292e747970654d617463682834296d6174636828332961737369676e283229636865636b466f724c6f6f7073283229 2269:C2,16|00804d000a002c56276a420e0e0e0e0e|@2271,@2270| 2270:C1,16|00802b561756282d7e0300030e0e0e0e|@2272| 2271:S57|545950455f5452454528292e747970654d617463682834296d6174636828332961737369676e283229636865636b466f724c6f6f7073283129 2272:S60|545950455f5452454528292e747970654d617463682834296d6174636828332961737369676e283229636865636b466f724c6f6f7073283129283129 2273:O1|@2274 2274:C3,16|00804d000a002c694d0104002a696442|@2276,@2277,@2275| 2275:C2,16|00804d000a002c56276a420e0e0e0e0e|@2283,@2282| 2276:S23|545950455f5452454528292e666f6c6454797065283129 2277:C16,232|00812b4d00e1000e0e0c00022956270e0e0c00022e2a0e0e0e0c0002642a4d01c6000e0e0e0c0002031e2a4d02b9000e0e0c000229352a364d03ac000e0c00032b2a2f317e0800032a4d049b000c000203192a4d0591000e0e0c000229353b2a0e4f0683005000026602772a4d0778000e0c0002031e2a4d086d000e0e0c000229352a362c2a300e0e0c0003292c31337e0a00032a4d094f000c000203192a4d0a45000e0e0c000229363b2a0e4f0b370050000266022b2a4d0c2c000e0c0002030329021d2a4d0d1e000e0e0e0c0002030329020d2a4d0e0e000e0e0e0c00022a6465430e0e0e0e|@2279,@1710,@1145,@1147,@1714,@1744,@1746,@2280,@1778,@1780,@1720,@1722,@2278,@2115,@1717,@1712| 2278:C3,48|00802b3b4d0028000e0c000303045603021a2b352c36290e0e4f0113002100022b362a2a5665310e7e070003420e0e0e|@2281,I229,@2278| 2279:S31|545950455f5452454528292e666f6c6454797065283129666f6c6454283229 2280:C3,48|00802b3b4d0028000e0c000303045603021a2b352c36290e0e4f011300210002292c5655300e0e0e7e060003420e0e0e|@2281,I229,@2280| 2281:S13|4c6973742e666f6c6472283329 2282:C1,16|00802b561756282d7e0300030e0e0e0e|@2284| 2283:S31|545950455f5452454528292e666f6c6454797065283129666f6c6454283129 2284:S34|545950455f5452454528292e666f6c6454797065283129666f6c6454283129283129 2285:C15,176|00802b4d00a9000e0e0c0002036b2b4d019d000e0e0c000229352a37294d028f000c0002294d0387000c0002294d047f000c00026403033c023b294d0371000e0e0c00022a4d0567000c0002292e4d065e000e0e0e0c00032b2a3c4d0751000e0e0c0004664d0847000c0002294f093f0051000264270402302b4d0a32000e0e0e0c000203222b4d0b25000e0e0c000256182a2a4d0c18000e0c0003644d0d0f002d0e0e7d0400023c420e0e0e0e0e0e|@2286,@1744,@1746,@1748,@2091,@1717,@2106,@2133,@2136,@1710,@2285,@1145,@1147,@1695,I218| 2286:S58|545950455f5452454528292e747970654d617463682834296d6174636828332961737369676e283229636865636b5265616c4572726f72283129 2287:S42|2843616e6e6f7420756e6966792077697468206578706c696369742074797065207661726961626c6529 2288:S44|2854797065207661726961626c6520746f20626520756e6966696564206f636375727320696e207479706529 2289:O1|@2290 2290:C2,8|00804d000200420e|@2291,-1| 2291:S44|545950455f5452454528292e747970654d617463682834296d6174636828332961737369676e283229283129 2292:O1|@2293 2293:C24,448|00802b352c364d00b6010e0e0e0c000303033c06cf2b352c364d01a3010c000303064d029a0106ce2b352c364d0390010e0c00032c352d364d0484010e0c00030402004d0579012c3c3b2e2e4d0670010e0c00075029644d0765010e0e0c00022e352f364d0858010e0c00032f2b4d094e010e0e0e0c000350294d0a42010e0e0e0c000207d3294d0b35010e0e0c00024d0c2c012a2a0e0e0e0c0002293b4d0d1e010e0e0e0c000303064d02120106cc2936293b4d0d08010e0c000303882a352f4d0efb000c0002030e2f4d0ff1000e0e0c0002296402054d10e400102a4d11de000202d3000e0e0e0c00020402002c4d12cc000202c1000e0c00024d13c0000e0c000203193c28402e4d14b2000e0e0e0c00042a4d02a700452a46510206293b452d4650293b2c2b6a4d1592000e0e0e0c00022d2a4d0986000e0e0e0c0003503c270602412e4d0e75000e0e0c000203122e4d0f6900020230000e0e0c0002296402054d105800102b4d1652000e0e0e0c00022a2a4d09460002020a000e0e0e0c0003503c656466022c2a4d0e30000e0c0002030e2a4d0f25000e0e0c0002296402054d10180010292b4d0911000e0e0c0003503c642704420e0e0e0e0e0e|@2295,@1698,@2260,-1,@1730,@1733,@214,@1012,@989,@1714,@1140,@1740,@1712,@2296,I229,@1145,@1147,@621,@1751,@1153,@1156,I11,@1160,@2294| 2294:O1|@2299 2295:S53|545950455f5452454528292e747970654d617463682834296d6174636828332961737369676e28322963616e4d6b45715476283129 2296:O1|@2297 2297:C4,72|00802b3b4d0040000e0c000303033b02302b352c362a4d012e000e0e0e0c00020311294d0221000e0e0c00022b2a692965020d294d0210002e0e0e0e7d05000265420e0e0e0e0e0e|@2298,I229,@2100,@2296| 2298:S62|545950455f5452454528292e747970654d617463682834296d6174636828332961737369676e28322963616e4d6b4571547628312966696c746572283129 2299:C1,8|00803d2c69420e0e|@1742| 2300:C10,304|00842f35303631373135323633373b3b2f2d0e0e0e4f0017019000033103702e03043b5002652c293b4d0103010c000303043b50025429352a362a352b364d02ee000e0e0e0c0003294d03e3000c0002032a294d04d9000e0e0c000229363c2a3b6a4d05ca000e0e0e0c00022e2a4d06be000e0e0e0c0003260402054d07b000102a250426031e5f260350220d029d2e03713103043b5002662f293b4d0190000e0c000303043b50025429352a362a352b364d027a000e0e0e0c0003294d036f000c0002032a294d0465000e0e0c000229363c2a3b6a4d0556000e0e0e0c00022e2a4d064a000e0e0e0c0003260402054d073c00102a250426031e60260350220c02292c3b4d0127000c000303032f020c3b300e0e4f081700a00002643b2b2b6a644d050a00220c7d10000227091f05|@2302,@2303,I229,@1714,@1720,@1722,@1142,@1140,@2315,@2301| 2301:C3,48|00802b3b4d0028000e0c000303091201000100f9ff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1555,I229,@2301| 2302:S47|545950455f5452454528292e747970654d617463682834296d61746368283329756e6966795265636f726473283529 2303:C16,656|00812c3b4d0088020e0c000303992b3b4d007c020e0c000303033b02882b352935562403325629563856470e0e0c00024d015c022c4d0257020c0003294d034f024d024b020c00032c2c2b6a270458370e0c000250024c2d293b4d0032020e0e0e0c000303043b50023829352a362a35566229293b4d0017020c000303043b50021629352a362a2e0e4f040302b1000350292503511e2251502b250526041e462604502d6506d22c3529352a362f362f3b4d00db010c0003038c564103315649565856670e0c00024d05c4012e4d02bf010c0003294d06b7014d02b3010c00032c2c2b6a270458570e0c000250025430293b4d009a010e0e0e0c000303043b50024029352a362a351209000100f9ff29293b4d007a010e0e0e0c000303043b50021629352a362a2e0e4f046301d1000350292503511e2551502b250526041e4e2604503006d52f3529352a3632362f2c4d073c010e0c0003293b4d0032010e0e0e0c000303255697302d2b0e0e4f081f01c30004502f2c02020e010e0e4f090f01b10003332a69296606d7293b4d0aff000c0003037956910333569956a856b70e0c00024d0be800334d02e3000c0003294d0cdb004d02d7000c00032c2c2b6a270458a70e0c000250220c0240120a000100f9ff29293b4d00b5000e0e0c000303043b50021629352a362a220c4f049f00e1000350292503511e2451502f220d0e4f098b00b10003332a692966027656940335569956a856b702026a000c00024d0d6c002f4d0267000c0003294d0e5f004d025b000c00032c2c2b6a270458a70e0c00025034023d569229293b4d003f000c000303043b50021a29352a362a31020221000e4f042700e1000350292503511e265150220d2c0e4f091300b100032f2a69296627052704430e0e0e0e0e0e|@2305,I229,@2306,@353,@2304,@2307,@2306,@2304,@1134,@2256,@2303,I234,@2306,@2304,@2306,@2304| 2304:S9|206d697373696e6729 2305:S63|545950455f5452454528292e747970654d617463682834296d61746368283329756e6966795265636f7264732835296d617463684c6162656c6c6564283229 2306:S7|284669656c6420 2307:C17,200|00812c352d364d00be000e0e0e0c00032d352e364d01b0000e0c00032e352f364d02a4000e0c00032f3530364d0398000e0c00030402004d048d002e2e2e2e2e4d0584000e0c00075029644d0679000e0e0c0002302a693b333534364d0768000e0c0003294d085f000c0002034e294d0955000e0e0c00022935293b4d0a48000e0c000303262a36294f0b3b00b000023b2a3b6a644d0c2f000c0002220f2a4d0d250022100e0e0e7e1000032a363b2a0e4f0e1300c00002270402054d0f0800102708430e0e0e0e|@2309,@1730,@1698,@2260,@1733,@214,@1012,@989,@1714,@1720,@1722,I229,@2310,@1142,@1140,@2312,@2308| 2308:O3|@7129,@237,@2314 2309:S67|545950455f5452454528292e747970654d617463682834296d61746368283329756e6966795265636f7264732835296164644669656c64546f47656e65726963283229 2310:C5,120|00802b3b4d0070000e0c0003030d1201000100f9ff293b696402552b3529352d3656372b2a4d014f000c0003293b4d0046000e0e0e0c000303072d2c692964022d293b4d0231000e0e0c000303112b0e0e4f0323005100022e2a692965020f1206000100f9ff2e2d692a2a6929662705420e0e0e0e0e0e0e|@2311,I229,@1134,I234,@2310| 2311:S78|545950455f5452454528292e747970654d617463682834296d61746368283329756e6966795265636f7264732835296164644669656c64546f47656e65726963283229616464456e747279283129 2312:C8,136|00802b3b4d0080000e0c000303033b02752b3529352d3656372b2a4d0169000e0e0c0003293b4d005e000e0e0e0c000303033b024f293b4d024d000e0e0c0003030c2b0e0e4f033f0051000202365759576857770e0c00024d042c002f4d0527000c0003294d061f004d051b000c00032c2c2b6a270412070004000100310e0e7d0800022705420e|@2313,I229,@1134,I234,@2312,@2306,@353,@2304| 2313:S82|545950455f5452454528292e747970654d617463682834296d61746368283329756e6966795265636f7264732835296164644669656c64546f47656e65726963283229636865636b456e7472696573283129 2314:S40|6164644669656c64546f47656e657269633a204e6f742061206c6162656c6c6564207265636f7264 2315:O3|@7129,@237,@2316 2316:S36|667265657a6547656e657269633a204e6f742061206c6162656c6c6564207265636f7264 2317:S20|28496e636f6d70617469626c6520747970657329 2318:C7,136|00802b3b4d0080000e0c000303033b02702b352c361203000100f1ff29294d0166000e0e0e0c00024d025c000e0c0002033229352a362e4d034d000e0e0c00022b4d0343000c00022a2a4d043a000e0e0e0c00036503033c0207292503511e413b6502013b65030f294f051b002100022b2a6929650209290e4f050b0021000265420e0e0e0e0e0e|@2319,I229,I105,I218,@1153,@2124,@2318| 2319:S44|545950455f5452454528292e747970654d617463682834296d61746368283329696e74657273656374283229 2320:S27|28496e636f6d70617469626c65206f7665726c6f6164696e677329 2321:O1|@2322 2322:C18,296|00802b4d0021010e0e0c00024d0118010e0c000203b82b36293b4d020a010e0e0e0c0003034e2c35294d03fb000c00020402002b4d04f0000e0c00024d05e8000e0c000203193c28402d4d06da000e0e0e0c00042a4d07cf00452a46510206293b452c4650293b2c2b6a4d08ba00310e7d0800020402004d09ad001b0f273b3b3b2e4d0aa2000e0e0e0c00075029644d0b95000e0e0c00022d4d0c8b000c00022a4d0d83000c0002030e2a4d0e79000e0e0c0002296402054d0f6c0010292b4d1065000e0e0c0003502b270402550402004d0953001b0f273b3b3b2e4d0a48000e0c00075029644d0b3d000e0e0c00022c4d0c33000c00022a4d0d2b000c0002030e2a4d0e21000e0e0c0002296402054d0f140010292b4d100d000e0e0c0003502b66420e0e0e0e|@2323,I105,I218,I229,@1751,@1153,@1156,I11,-1,@1160,@214,@1012,@989,@2294,@1145,@1147,@621,@1140| 2323:S28|545950455f5452454528292e6d6b4f7665726c6f6164536574283129 2324:C16,424|00802b352c364d009e010e0e0e0c000307cd5601294d018f010c000207ce294d0285010e0e0c000229352a37294d0377010c0002294d046f010c00024d0568010e0c000203033c0214294d065a010e0e0e0c0002294d074f010c00026403d5565156670e0e0c0002294d013b010c000203ab294d0231010e0e0c000229352a37294d0323010c0002294d041b010c00024d0514010e0c000203033c0214294d0606010e0e0e0c0002294d07fb000c000264031856a156b70e0e0c0002220d2a0e0e4f08e300c1000364024e56a22a4d06d6000e0e0e0c00022b4d09cb000202af000c0002292f4d0abe0002028b000e0e0e0c00032b2a3c4d0bad000e0e0c0004664d0ca3000c00022a2a4d0d9a000e0e0e4f0e9300e200046527040214566156770c0002322a0e0e0e4f087b008100036464024156522a4d066d000e0e0c00022b4d0963000c0002292f4d0a5a000e0e0e0c00032b2a3c4d0b4d000e0e0c0004664d0c43000c000256772b2b2b4f0e3700a200046627040214561156270c00022d2a0e0e0e4f081f0031000364640215560156170e0c00022c2a0e0e0e4f08070021000364420e0e|@2325,@2260,@1744,@1746,@1748,@1153,@1156,@2091,@1717,@2263,@2106,@2133,@2136,@1710,@2228,@2256| 2325:S34|545950455f5452454528292e747970654d617463682834296d617463682833292f34 2326:C18,384|00802b352c364d0076010e0e0e0c000307cf5602294d0167010c000203d3294d025d010e0e0c000229352a37294d034f010c0002294d0447010c00024d0540010e0c000203033c0214294d0632010e0e0e0c0002294d0727010c0002640349565156670e0e0c0002294d0813010c00020321294d0909010e0e0c0002567256870e0c00022a2a0e0e0e4f0af3009100036502125662292b4d0be5000e0e4f0cdf0092000464640245294d06d3000c00022a4d0dcb000c0002292e4d0ec2000e0e0e0c00032b2a3c4d0fb5000e0e0c0004664d10ab000c0002566156772b2b2b020256000e0e4f0c9700a200046627040245561156270c0002294d0883000c00020321294d0979000e0e0c0002563256470e0c00022a2a0e0e0e4f0a63005100036502125622292b4d0b55000e0e4f0c4f005200046464640245560156170c0002294d083b000c00020321294d0931000e0e0c0002562256370e0c00022a2a0e0e0e4f0a1b004100036502125612292b4d0b0d000e0e4f0c07004200046464420e|@2327,@2260,@1744,@1746,@1748,@1153,@1156,@2091,@1717,@1145,@1147,@2263,@2228,@2256,@2106,@2133,@2136,@1710| 2327:S34|545950455f5452454528292e747970654d617463682834296d617463682833292f35 2328:C8,144|00812b3b4d0088000e0c0003032c2c3b4d007c000e0c000303033b021b5609561856270e0e0c00022a2a4d0162006a6557172c0e7d04000202532b352c362e4d024d000e0e0c00024d0344000e0c000203212e352f362c2b4d0434000e4f052f0062000450292c0e0e4f0623005100036502195629563856470c00022a2a4d010e006a6557372e0e7d06000265430e0e|@2330,I229,@2329,I105,I218,@2228,@2256,@2328| 2329:S32|28446966666572656e74206e756d62657273206f6620617267756d656e747329 2330:S45|545950455f5452454528292e747970654d617463682834296d617463682833296d617463684c69737473283229 2331:S29|28446966666572656e74207479706520636f6e7374727563746f727329 2332:S35|284f7665726c6f6164696e6720646f6573206e6f7420696e636c756465207479706529 2333:S35|545950455f5452454528292e747970654d617463682834296d617463682833292f3130 2334:C16,320|0086314d0039010e0e0c0002314d002f010c00023b344d0126010e0e0e0c0002344d011b010c00022a2a4d0212010e0e0e0c0003654d0307010c000203033b06cf334d04fa000e0e0e0c0002040200220d4d05eb000c00024d06e4000e0c000203193c2840220f4d07d5000e0e0c00042a4d08cb00452a46510207293b45220e4650292b2f2b6a4d09b5000e0e0c0002040200220f4d05a7000c00024d06a0000e0c000203193c284022114d0791000e0e0c00042a4d088700452a46510207293b4522104650292e312b6a4d0971000e0e0c00024d0a6800220e3322116b2d2b2213221222112e4d0b55000e0e0c000722144d0c4a000e0e0e0c000222144d0c3e000e0e0e0c0002293b4d0d3200020228000e0e0e0c000303033c020b3b2b4d0d1d000e0e0c000303033b020b2a2a0e0e4f0e0b00f00003270b661f070e0e0e|@2336,@1751,@2095,I113,I218,@2106,@1153,@1156,I11,-1,@1160,@2337,@2218,@2172,I229,@2335| 2335:C13,296|00812b3b4d0020010e0c000303442c3b4d0014010e0c000303033b023356095618562756344d01ff002a4d02fa000e0e0e0c00032928294d02ed000e0e0c00032e3c2f2f2d4d03df00220d7b070a000602d02b352c362e3b4d00cc000e0c0003033256295638564756544d04ba002a4d02b5000e0e0c00032928294d02a9000e0e0c00032e3c2f2f2d4d039b00220f7b070c00062e352f362a4d058b000c00022d4d0583000c00022a2a4d067a000e0e0e0c00034d0770000e0c0002033a5669567856874d0860002d4d025b000c0003294d0953004d024f000c000329304d0246000e0e0e0c00032e3c2f2f2d4d03370022137b071000062c4d0a2b000c00022f4d0a23000c00022a2a2e6a569a0e0e0e0c00022e310e0e0e4f0b0b00a100032709430e0e0e0e0e|@2339,I229,@2340,@353,@1903,@2341,@1827,I24,I218,@2342,@2343,@2338,@2335| 2336:S33|535452554354555245535f28292e636865636b54797065436f6e73747273283729 2337:C8,88|00805609292309294d004c004d0148000e0c00032e3856484d023c002a4d0337000c0003294d042f004d032b000c0003652a0e0e0e0c0002512e354d0519002a0e0c0002515637293b69292c324d060700330e7b05080004|@2222,@7196,@623,@2223,@353,@2221,@1799,@1666| 2338:O1|@2344 2339:S48|535452554354555245535f28292e636865636b54797065436f6e73747273283729636865636b436f6e73747273283229 2340:S37|546f6f206d616e7920636f6e7374727563746f727320746f206d6174636820747970652028 2341:S39|4e6f7420656e6f75676820636f6e7374727563746f727320746f206d6174636820747970652028 2342:S24|4c6f6f6b696e6720666f7220636f6e7374727563746f7220 2343:S11|2062757420666f756e6420 2344:C1,8|00802b382964420e|@2345| 2345:S26|5354525543545f56414c5328292e76616c547970654f66283129 2346:C1,16|00802b352c362d3756372e7b05030004|@2347| 2347:S65|535452554354555245535f28292e6d61746368536967732836296d6174636856616c73283229636865636b5479706573416e64537472756374757265732d283129 2348:C22,416|00822c4d0099010e0e0c000207cd2c4d018d010e0e0c00022936294d0281010e0e0c00024d0378010e0c000203033b06ce562b4d0469010e0e0c0002294d055f01324d065a010e0e0e0c0004294d024f010c00024d0348010e0c000207cc29352d363b2a4d0738010e0c00032b363b2a4d072c010e0c0003294d0323010c000203032b02013b0330569956a856b74d080e0122114d0908010e0c0003294d0aff004d09fb000c00032d3c2e2e2d4d0bef0022157b0713000629030b2b4d03e0000e0c000202013b036b2d4d0cd2000e0e0e0c0002294d0dc7000202be000c000203064d0eba000210294d0eb300694d0fae000e0e0e0c0002334d0ca300020297000c000256ca56d956e756f8121100010003004d1089002b22172c6b30303030302e4d117a00221a02023c000e0e0e7b081700072d4d0c67000c0002324d0c5f000c000256ba56c956d756e856f94d124e002b22162c6b30303030302e4d113f0022197b081600075649565856674d132e00220c4d0928000e0c0003294d141f004d091b000c00032d3c2e2e2d4d0b0f0022107b070e00066502013b440e0e0e|@2350,@2025,@2024,I105,I218,@2083,@7197,@1962,I229,@2349,@353,@2351,@1903,@2338,@2352,@2355,@1171,@2356,@2218,@2357,@2349,@2087| 2349:S7|56616c75652028 2350:S66|535452554354555245535f28292e6d61746368536967732836296d6174636856616c73283229636865636b56616c756573416e64457863657074696f6e732d283329 2351:S46|29206d75737420626520616e20657863657074696f6e20746f206d6174636820746865207369676e61747572652e 2352:O1|@2353 2353:C3,24|00804d0012002c354d010c002d0e0e0e7e0300030e0e0e0e|@2354,-1,I229| 2354:S24|5354525543545f56414c5328292e6973456d707479283129 2355:O4|-3,0,@529,@7208 2356:C8,88|00805609292309294d004c004d0148000e0c00032e3856484d023c002a4d0337000c0003294d042f004d032b000c0003652a0e0e0e0c0002512e354d0519002a0e0c0002515637293b69292c324d060700330e7b05080004|@2222,@7196,@623,@2223,@353,@2221,@1799,@1666| 2357:C8,88|00805609292309294d004c004d0148000e0c00032e3856484d023c002a4d0337000c0003294d042f004d032b000c0003652a0e0e0e0c0002512e354d0519002a0e0c0002515637293b69292c324d060700330e7b05080004|@2222,@7196,@623,@2223,@353,@2221,@1799,@1666| 2358:S66|535452554354555245535f28292e6d61746368536967732836296d6174636856616c73283229636865636b56616c756573416e64457863657074696f6e732d283129 2359:O2|@2361,@2360 2360:O2|@2373,@2359 2361:C10,128|00842f4d0079000e0e0c0002404d016f000c0002292b3b3b6b294d0262000e0e0e0c00024d0358002a694d0452002b694d054c002c69292c2c6a3b220f2b221022102210221056f70e0c0008220f4d002e000e0e0e0c0002304d0623000c0002314d071b000c0002334d0813000c0002292d2c2e6b29270e1f050e0e0e0e0e0e|@2363,@2364,@1564,@2083,@2367,@2369,@2370,@2057,@2060,@2362| 2362:O1|@2371 2363:S24|535452554354555245535f28292e636f7079536967283529 2364:O1|@2365 2365:C1,8|00802b362964420e|@2366| 2366:S24|5354525543545f56414c5328292e7369674e616d65283129 2367:C3,32|00802b352c365627294d0013002d2d4d010d00320e0e0e7b060600050e0e0e0e|@2368,@7205,@1972| 2368:S36|535452554354555245535f28292e636f70795369672835296c617374416464722d283129 2369:C3,32|00802b352c365627294d0013002d2d4d010d00320e0e0e7b060600050e0e0e0e|@2368,@7202,@1972| 2370:C3,32|00802b352c365627294d0013002d2d4d010d00320e0e0e7b060600050e0e0e0e|@2368,@7197,@1972| 2371:C9,144|00802b354d0088004d0184000e0c000303792b362c382a3b4d0274000e0c00032a3b4d026a000e0e0e0c0003293b4d025e000e0e0e0c0003293b4d0152000e0e0e0c000303064d034600023778760f3b2c3b3b4d0439000e0e0c0004050800ff6d4d052b00102b3c2b3b2e4d0621000e0e0c000650294d0716000e0e0e0c00025029643b2d2b6a270602012b420e0e0e|@2372,-1,I229,I253,I49,I11,@87,I195,I47| 2372:S23|486173685461626c652e68617368467265657a65283129 2373:C7,72|00864d0042002c2e3032680531303030304d0133000c0006324d022b000c00024d03240033220d56673234220d220f3368094d0412002a692b2a220f4d050800330e0e7b050e0004|@2375,@2376,@2381,@2083,@2391,@2374,@2081| 2374:C1,16|00802b352c362d3756372e7b05030004|@2436| 2375:S28|535452554354555245535f28292e66756c6c436f7079536967283729 2376:C3,32|0080560a5619562856372f2d2d2d4d000e002e4d010900220c0e0e7b08070007|@2378,@2377,@2231| 2377:O1|@2379 2378:S43|535452554354555245535f28292e66756c6c436f7079536967283729636f707954797065436f6e73283129 2379:C1,8|00802b420e0e0e0e|@2380| 2380:S46|535452554354555245535f28292e66756c6c436f7079536967283729636f707954797065436f6e73283129283129 2381:O1|@2382 2382:C6,48|00842f4d0029000e0e0c00024d0120004d021c002e30323468064d0312002a692b2a3b4d040900310e0e0e7b050a0004|@2384,@2083,@2385,@2381,@2383,@2081| 2383:C1,16|00802b352c362d3756372e7b05030004|@2390| 2384:S37|535452554354555245535f28292e636f707954797065436f6e7374727563746f7273283529 2385:C11,168|00822c4d00a1000e0e0c000203622c4d0195000e0e0c0002293b4d028a000e0e0e0c00030316404d037d000e0e0c0002294d0473003b3b6b2965020429372964562b563a5649565829344d055a000e0e0e0c000329282e4d054d000e0e0c00032f2f2f2f2d56d7220f0e0e7b070d00062c4d0633000c000203272c4d0729000e0e0c0002561b562a563956482d2d2d2d4d0814002e4d090f000c00073b270602013b440e0e0e0e0e|@2387,@2007,@2006,I229,@1564,I48,@353,@2019,@2018,@2386,@2231| 2386:O1|@2388 2387:S40|535452554354555245535f28292e636f707954797065436f6e7374727563746f7273283529283329 2388:C1,8|00802b420e0e0e0e|@2389| 2389:S55|535452554354555245535f28292e636f707954797065436f6e7374727563746f7273283529636f707954797065436f6e73283129283129 2390:S40|535452554354555245535f28292e636f707954797065436f6e7374727563746f7273283529283129 2391:C38,840|00822c4d0041030e0e0c000203d52c4d0135030e0e0c0002293b4d022a030e0e0e0c00030316404d031d030e0e0c0002294d0413033b3b6b2965020429372964562d563c564b565a29344d05fa020e0e0e0c000329282e4d05ed020e0e0c00032f2f2f2f2d56d90e0e0c0006314d06d7020c00024d07d0020e0c00020321314d06c5020e0e0c00024d08bc020e0c000256a82a2a4d09b0020e0c000365020134324d0aa3020c0002292c2c4d0b99020e0e0c000456c7293722122c692a0c0002512c3c4d0981020e0e0c000322102a4d0c75020e0e0c000303042210020129270e06d02c4d0d60020e0c000207d13c28402d4d0e52020e0e0e0c00042d4d0f47020c0002562d563c564b565a2d2d2d2d4d1034022e4d112f020c0007292f4d1226020e0e0e0c00034d131c020e0c00023c28402b4d0e10020e0c0004304d1407020c00022c4d14ff010c0002292b4d15f6010e0e0e0c00034d16ec012a69344d17e5010e0e0c00023b2a0e0e0e4f18d701f00002303b4d19ce010e0e0e0c00030386324d17c1010e0e0c00023b2a4d02b6010e0e0e0c0003644d13ab010c00020342324d1aa1010e0e0c0002334d14970102028b010c0002344d1b8b0102027e000c0002220c4d1c7e010e0e0e0c00022c2c4d1d72012d2d3b4d1e6b010c00072704020132292b4d1f5d010e0e0c00035012120001000100293622172c692a0e0e0c0002260402161211000100010029362216220c692a0e0e0c00022603220f3b4d1923010c000322132a4d0c19010e0e0c000303042213020129271106d12c4d2004010e0c000207c82c4d21f9000e0e0c0002293729353b4d02eb000c0003039129362b352c362d38566e2a4d22d7002b4d23d2000e0e0e0c000456882f2a4d09c4000e0c0003302a4d24ba000e0e0e0c00034d13b0000e0c000203033c02132b2e4d12a1000e0e0c00034d1398000e0c0002030c3b2a6930302b2f6b296502013256b72935322c692a0e0e0c0002512b3c4d0971000e0e0c0003220f2a4d0c65000e0e0c00030304220f020129270b02492a352b362c38565e2a4d2248002b4d2343000c0004292c4d123a0002042e002b000e0c00034d132c000e0c000203092d2d302c6b296402012f56872935302c692a0e0c0002513427076502012b440e0e0e0e0e0e0e|@2393,@2007,@2006,I229,@1564,I48,@353,@2394,@2397,@2400,I106,@2403,@2406,I233,@2019,I11,@2018,@2377,@2231,I251,I218,@2106,@2409,@2412,@2172,@2414,I253,@1751,@1153,@2100,@214,@2238,@2429,@2025,@2024,@2392,@2138,I113| 2392:O1|@2434 2393:S31|535452554354555245535f28292e66756c6c436f7079536967283729283329 2394:O1|@2395 2395:C3,24|00802b3b4d0010000e0c000303054d010600102b36296442|@2396,I229,@621| 2396:S29|5354525543545f56414c5328292e737472756374416363657373283129 2397:O1|@2398 2398:C2,24|00802b353b4d000f000c000303033c02013b420e0e0e0e0e|@2399,I229| 2399:S25|5354525543545f56414c5328292e6973466f726d616c283129 2400:O1|@2401 2401:C3,32|00802b353b4d0017000c000303062b36296402054d01080010420e0e0e0e0e0e|@2402,I229,@621| 2402:S25|5354525543545f56414c5328292e7661466f726d616c283129 2403:O1|@2404 2404:C3,32|00802b3b4d0018000e0c000303064d010e0002042b352964420e0e0e0e0e0e0e|@2405,I229,I48| 2405:S27|5354525543545f56414c5328292e7374727563744e616d65283129 2406:O1|@2407 2407:C1,16|00823b2c692e2a2f6a2965440e0e0e0e|@2408| 2408:S33|5354525543545f56414c5328292e6d616b65466f726d616c537472756374283329 2409:O1|@2410 2410:C4,80|00812b4d0049000e0e0c00024d0140000e0c000203362b352c362e4d0031000e0e0c00024d0128000e0c0002031a2e352f362c2b692a2d4d0215000e0e0c00032a2a6929270502013b6502013b430e0e|@2411,I105,I218,@2409| 2411:S45|535452554354555245535f28292e66756c6c436f70795369672837292833297a69705479706556617273283229 2412:C5,112|0080560729293b4d0065000e0e0c000303032d0256293529352a362c36314d014e000e0e0e0c00020331314d0241000e0e0c00022c4d0137000c000203192c4d022d000e0e0c00022a2a4d0322000e0e0e0c00036402013b6402013b03032a020829250526041e613b270465420e0e0e|@2413,I229,@1145,@1147,@1695| 2413:S45|535452554354555245535f28292e66756c6c436f7079536967283729283329636f707954797065566172283129 2414:C14,320|00802b3b4d0038010e0c000303033b06cf2b352c362a352b362c372d381207000100f2ff577e2b2b2b4d0113010c0004292d4d020a010e0e0e0c00034d0300010e0c00020402002f353b4d00f2000e0e0e0c0003036b2f3657c82a2a4d04e0000e0c000356e42a3c4d04d4000e0c00031211000100feff293b4d05c3000c00032b2a4d06ba000e0e0e0c000303032b0201292d3b2b4d07a7000c0004503b2f6912150002000200293b4d0893000c0003644d038b000c0002332b452a46260b02062930453b465029352a362c03033c020129033433332c306b294d096200020258000e0e0e0c00022937294d0a51000e0e0c0002030e294d0b45000e0e0c00022b6402012b660202220c2d03033c02012a0316120f000100f6ff293b3c4d071f000c0004503b5102023b50220c4f0c0f00e100022a2a69292710420e0e0e0e0e|@445,I229,@2138,I251,I218,I106,I253,I233,I255,I113,@2416,@2425,@2415,@2414| 2415:O1|@2428 2416:O1|@2417 2417:C16,256|00802b4d00f9000e0e0c00022c4d01ef000c00022a4d02e7000c0002030e2a4d03dd000e0e0c00023c6402013b03232a4d02cc000e0c0002030e2a4d03c1000e0e0c0002296402054d04b4001029366402012a294d05a8000e0c0002030e294d069d000e0e0c0002296402054d079000102937644d0888000e0c0002294d097f000c000229293b4d0a75000e0e0c000303033b022b29352a362a4d0162000e0e0e0c000229314d0b56000e0e0e0c00036403052a68010207292503511e373b6564294d0c3a000e0e0e0c00024d0d30000e0c000203202935294d0023000c0002302a4d0e1a000e0e0e0c000364030329020132640201312706420e0e0e0e0e0e|@2419,@2338,@1827,@1778,@1780,@621,@1744,@1746,@621,@1748,@2172,I229,I24,I105,I218,@2418| 2418:O2|@2421,@2420 2419:S35|545950455f5452454528292e66696e6456616c7565436f6e7374727563746f72283129 2420:O2|@2423,@2418 2421:C18,456|00812b4d00c1010e0e0c000203ba2b4d01b5010e0e0c00022d4d00ab010c000203a22d4d01a1010e0e0c00022a374d0296010e0e0e0c00024d038c010e0c00022a374d0282010e0e0e0c00024d0378010e0c00022a2a4d046e010e0e0e0c000365035d2a352a35292b293b4d0559010e0e0c0003030e3b2b4d054c01330e0e0e7e0a000329352a362c4d063b010c00024d0734010e0c000203212c352d362a2d220c0e0e0e0c0003030d292c2506250626041e493b02013b6502013b270602013b6402013b6406d72b4d08fb000c000203422b4d09f1000e0e0c00022d4d08e7000c0002032a2d4d09dd000e0e0c00022a352a35292b2f0e0e0c000365030d2a362a36292b2f310e7e0800033b6402013b6402b12b4d0aaf000c000203412b4d0ba5000e0e0c00022d4d0a9b000c000203292d4d0b91000e0e0c00022a350317293503102a362a36292b5667310e0e0e7e0800033b02013b6402013b6402662b4d0c64000e0c0002032e2b4d0d59000e0e0c00022d4d0c4f000c000203162d4d0d45000e0e0c00022a2a4d0e3a002f0e7e0600033b64022d2b4d0f2b00020224000c0002030a2c4d0f1d002c7d0400022b4d1013000c0002030a2c4d1009002c7d0400023b430e0e|@2422,@1744,@1746,@1748,@1153,@2124,I229,I105,I218,@1778,@1780,@1720,@1722,@1145,@1147,@1695,@2115,@1717| 2422:S25|545950455f5452454528292e657175616c5479706573283229 2423:C5,112|00812b3b4d0068000e0c0003030e3b2d4d005c002d0e0e0e7e0400032b352c362e4d014b000c00024d0244000e0c000203352e352f362c352b352a2a4d0330000e0c000365031c2c362b36292b56870e0e0c0003650309292c2f310e7e0800033b02013b6502013b65430e0e0e0e0e0e|@2424,I229,I105,I218,I24| 2424:S31|545950455f5452454528292e657175616c5265636f72644c69737473283229 2425:O1|@2426 2426:C3,24|00804d0012002c354d010c002d0e0e0e7e0300030e0e0e0e|@2427,-1,I229| 2427:S6|476c6f62616c 2428:C1,8|00802b36420e0e0e|@2427| 2429:O1|@2430 2430:C6,96|00812c3929353b4d0055000e0e0c0003030629362964020e2936293b4d0140000e0c0003296529362a35292b316a2d354d022c004d0028000e0c000303132d36293b2c4d0319000e0e0c0004503b6402054d040b00102705430e0e0e0e0e0e0e|@2432,I229,I253,-1,I255,@2431| 2431:O3|103,@382,@2433 2432:S34|5354525543545f56414c5328292e7463536574436f6e7374727563746f7273283229 2433:S24|41737369676e6d656e7420746f2066726f7a656e20726566 2434:C1,8|00802b420e0e0e0e|@2435| 2435:S41|535452554354555245535f28292e66756c6c436f7079536967283729636f7079547970283129283129 2436:S31|535452554354555245535f28292e66756c6c436f7079536967283729283129 2437:C1,24|0080560829382d2a0e0c000251561729382e2a2f7d060002|@2438| 2438:S67|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973747275637456616c75652835296e6577456e762d283129 2439:C1,24|0080560829362d2a0e0c000251561729362e2a2f7d060002|@2438| 2440:C1,32|008056082923072d2a0c00025156172923072e2a2f0e0e0e7d0600020e0e0e0e|@2438| 2441:C8,144|00802b352c36562929372f2a0e0c0002512a37294d0078000e0c00020316294d016d000e0e0c000256572937322a330e7d0a00022b362c382d4d0253000c00024d034c000e0c00025678293b4d0440000e0c0003569729373b2c6934312b326b220c2a69652a0e0e0e0c00025156a82b3c4d051b000c00032a3b2b4d0611000e0e0c0004503b270c420e0e0e0e0e0e0e|@2438,@2443,@2446,@2442,I218,I253,I106,I255| 2442:O1|@2448 2443:O1|@2444 2444:C3,24|00804d0012002c354d010c002d0e0e0e7e0300030e0e0e0e|@2445,-2,I229| 2445:S10|4f7665726c6f61646564 2446:O1|@2447 2447:C1,8|00802b36420e0e0e|@2445| 2448:C4,48|00802b36294d0027000c00024d0120000e0c000203033c0211293b4d0211000e0e0c000303033c02013b64420e0e0e0e|@2449,I105,I218,I229| 2449:S30|5354525543545f56414c5328292e6973436f6e7374727563746f72283129 2450:C8,128|00802b352c3656292923092f2a0c0002642b3b4d0069000e0e0c00030316404d015d000e0e0c0002294d0253003b3b6b296502042b3729645657293b4d0340000e0c00035678292309312e2d4d0430000e0c0004322a69642a0c00025156872b3c4d051b000c00032a3b2b4d0611000e0e0c0004503b270a420e0e0e0e0e0e0e|@2438,I229,@1564,I48,I253,@2406,I106,I255| 2451:C2,40|00802b56180c0002293b4d001a000e0e0e0c0003030a2c56272d0e0e7d0400022964420e0e0e0e0e|@979,I229| 2452:C2,40|00802b56180c0002293b4d001a000e0e0e0c0003030a2c56272d0e0e7d0400022964420e0e0e0e0e|@979,I229| 2453:C2,40|00802b56180c0002293b4d001a000e0e0e0c0003030a2c56272d0e0e7d0400022964420e0e0e0e0e|@979,I229| 2454:O1|@2455 2455:C1,8|00803b420e0e0e0e|@2438| 2456:C2,40|00802b56180c0002293b4d001a000e0e0e0c0003030a2c56272d0e0e7d0400022964420e0e0e0e0e|@979,I229| 2457:C2,40|00802b56180c0002293b4d001a000e0e0e0c0003030a2c56272d0e0e7d0400022964420e0e0e0e0e|@979,I229| 2458:C2,40|00802b56180c0002293b4d001a000e0e0e0c0003030a2c56272d0e0e7d0400022964420e0e0e0e0e|@979,I229| 2459:O1|@2460 2460:C1,8|00803b420e0e0e0e|@2461| 2461:S69|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973747275637456616c75652835296c6f63616c456e762d283129 2462:C10,104|00843b30354d005f004d015b000c0003032e303657284d024e0030342c6b313a32230b58672e2c2c4d033c004d0438002e324d05320022100e0e0e7b090e0008302f2f2f0e4f061f0040000557284d07160030342c6b2b332b4d080b00320e7b050b00040e0e0e0e|@2464,-6,I229,@2465,@2466,@1498,@2045,@2469,@4532,@2463| 2463:O1|@4533 2464:S52|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c283529 2465:C2,24|00805609561856272b3c2c2c324d000700330e7b07060006|@1947,@1903| 2466:O1|@2467 2467:C5,56|00802b3b4d0030000e0c00030316404d0125000e0e0c0002294d021b003b3b6b296502042b372964294d030b000c0002293a65420e0e0e0e|@2468,I229,@1564,I48,@1957| 2468:S73|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296c6f6f6b5369672832296c6f6f6b7570466e283129 2469:C17,264|00832e354d0000014d01fc000e0c000303062e36296402044d02ec00404d03e7000c0002292b3b3b6b294d04da000e0e0e0c00024d05d000313458786b2a23062b23082c392d230b2e3a2f230a30373123064d06b2002b2b346b33383423084d07a5002b2b220e6b220d2309220e230b4d0894002b2b22116b2210352211394d0985002b2b22146b22133622143a4d0a76002b2b22176b221623072217230a4d0b65002b2b221a6b2f2d2211220f22192218221d30221e2212221c221f680c22232a2224222422243b160c003a0025000100000750221b4d0d2d000e0e0c0002221c4d0e22000e0e0e0c0002221e4d0f16000e0e0e0c00022922212c2e6b2927221f040e0e0e0e0e|@2471,-6,I229,I48,@1564,@1957,@2472,@2475,@2478,@2480,@2481,@2483,@2484,@2470,@2057,@2060,@2362| 2470:C29,560|008530354d0028024d0124020e0c00030a0400cd000a000a00110099004d020f021006d33036561b58284d030202312c2c6b5649293a566929230b12090004000100312d2c4d04e7014d05e3012e344d06dd010e0e0c0008294d07d3010c00022a4d08cb010c00020402002b2b2b4d09be010e0e0e0c00045029040300221538221623092217372c2a452c462b47502c2215332b4d0a98014d0b940133221c4d0c8d01221c0e0e7b091b000830363b2a2e2a3b4d0d79010e0e0c0003030329021b2a352b362a2c220c4f0e63018000042a2a2505250526031e273b66270406dd303629352a362b372c382d390403003b2a4d0f3b01020233010c00035029352a362b370403003b2a4d0f24010e0c00035029352a362b372214230622152308221523084d1009012a2c336b2218392219230b2219230b4d11f6002a2c336b221c3a221d230a221e37221f35222036222123072b2b2e2216220d3322133022122218220e2211680c221a2a22242224222422240e0e0e161200b6002400010000074d13ac0012200003000200221e22286b221b221622134d1496004d1592004d168e002f4d0689000e0e0c00084d178000122200030002002220222a02026d002229222b680612220003000200221c2b2b22234d185a000e0e0e0c00053b4d0b4f000c00022220222022202c3b3b4d193f000c0007122600030002004d1a31002225222f2c6b302c2b4d1b24000e0c000450222d3822200e0e0e0c000250222d2309221c0e0e0c0002503227271f060e0e|@2486,-9,I107,@2487,@2489,@2466,@1498,@2045,@2057,@2060,@2063,@2070,@2490,@2360,I229,@2493,@965,@4509,@4510,@2470,@4511,@2508,@2504,@1151,@4513,@2516,@2238,@4518,@2485| 2471:S63|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c28352973696756616c7565283429 2472:C9,128|00845609292309294d0074004d0170000e0c00036503092f2f692c2c7d0700022f2d0e0e0e0c0002294d0253000c00024d034c000e0c0002033a561956285637314d043b004d0537000c000329220c4d052d000e0e0c0003294d0623004d051f000c00032e3c2f2f2d4d071300220e7b070e00063030692d2d0e0e0e7d080002|@2474,@7190,@623,I105,I218,@412,@353,@2473,@1903| 2473:S39|2920697320616c72656164792070726573656e7420696e2074686973207369676e61747572652e 2474:S79|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c28352973696756616c7565283429636865636b416e64456e746572283529 2475:C2,24|00802b352c364d000e00563856475659300e0e7b07030006|@2477,@2476| 2476:S5|56616c7565 2477:S88|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c28352973696756616c7565283429636865636b416e64456e746572283129283129283129283129 2478:C2,24|00802b352c364d000e00563856475659300e0e7b07030006|@2477,@2479| 2479:S4|54797065 2480:C2,24|00802b352c364d000e00563856475659300e0e7b07030006|@2477,@1948| 2481:C2,24|00802b352c364d000e00563856475659300e0e7b07030006|@2477,@2482| 2482:S6|466978697479 2483:C2,24|00802b352c364d000e00563856475659300e0e7b07030006|@2477,@1498| 2484:C2,24|00802b352c364d000e00563856475659300e0e7b07030006|@2477,@2044| 2485:O1|@4519 2486:S66|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296d616b65536967496e746f283629 2487:O3|@7129,@237,@2488 2488:S40|6d616b65536967496e746f3a206e6f742061205369674964656e74206e6f72206120536967446563 2489:C2,24|00805609561856272b3c2c2c324d000700330e7b07060006|@1947,@1903| 2490:O1|@2491 2491:C4,24|00803c28404d000f004d010b000c00044d0204002a696442|@2492,@219,I11,-2| 2492:S31|5354525543545f56414c5328292e6d616b655661726961626c654964283129 2493:C49,1208|00822d354d00b0044d01ac040e0c00030a0c00ad026d021a0051011a001a001a001a001a001a007703210030004d0287041006d02d363b2e2b4f037b043000036506dc2d362e372f38120400040002004d0464042d332c6b4d055c042a567a568b6b12070004000200292309294d0647044d0743040c00036503043b5002932d4d0834044d0930040e0c000303033c024b2d4d0a22044d091e040e0e0e0c000303033c02372d4d0b0e044d090a040e0e0e0c000303033c02232d4d0cfa034d09f6030e0e0e0c000303033c020f2d4d0de6034d09e2030e0e0e0c000303324d0ed6032e4d0fd1030e0e0c0003294d10c7034d0fc3030c00032d3c220e332d4d11b6030202aa030e0e0e0c0006260302023b50120700040002002d2b2b3202028f034d1293030c000550567b29372f4d1386034d1482034d157e030e0e0e0c00043b220e69324d166f032b2d6b332a69662a0c000251343c4d175d03220c0e0e0e7e0d00032d362e372f38120400040002004d1843032d332c6b4d193b032a567a568b6b12070004000200292309294d0626034d0722030e0e0e0c00036503043b5002a32d4d1a10034d090c030e0c000303033c025f2d4d1bfe024d09fa020e0e0e0c000303033c024b2d4d1cea024d09e6020e0e0e0c000303033c02372d4d1dd6024d09d2020e0e0e0c000303033c02232d4d1ec2024d09be020e0e0e0c000303033c020f2d4d1fae024d09aa020e0e0e0c0003032e4d209e022e4d0f99020e0e0c0003294d218f024d0f8b020c00032d3c220e332d4d117e020e0e0e0c0006260302023b50120700040002002d2b2b324d1263020c000550567b29373b220d69313b2b336b322a69652a0e0e0c000251343c4d174102220c0e0e0e7e0d00032d36292e2a3b4d222e020e0e0e0c000303032902282a352b36565b566a56782d2c2c220d2d330e0e0e4f230b02d200072d2a2508250826061e343b27066606d82d362e372f382b2b2b6a12050004000200292309294d06df014d07db010c0003650391564b292306566b292308568a2923084d24c2012a2d6a56bb293956db29230b56fa29230b4d25ad012a2d6a12130001000500293a1215000100050029230a121700010005002937121900010005002938121b0001000500292309121d00010005002935121f00010005002936122100010005002923072d2c220c3422192213222230221f220f2216221b680c29271f0204564b2964565c2b2b2b4f2637018200045032270606d62d362e373c2840304d272201020216010e0e0e0c00043c28403b4d2710010e0c0004564b292306566b292308568a2923084d28f9002a2d6a56bb293956db29230b56fa29230b4d29e4002a2d6a12130001000500293a1215000100050029230a12170001000500292309121900010005002935121b00010005002936121d00010005002923074d2aa40012200001000500221d6a4d2b960012210001000500221d6a2f2e2c2c22172211222032221d221122142219680c122200040002001223000100020022224d2c63002d2d22252e4d2d5a0002024e000e0e0e0c00073b22213b4d2e48000e0c000329293b4d223d000e0e0c000303033b021c29352a362a0e0e0e162f0026002b000000000250292503511e283b656422243b4d2e0f00222b0e7e2c0003440e0e0e0e0e0e0e|@2495,-4,I107,@2496,@2498,@2502,@2503,@7190,@623,@218,I24,@393,@2511,@2512,@2513,@2514,@353,@2515,@1903,@2516,@2532,@2535,@2138,-1,I106,@2537,@2538,@218,@393,@2511,@2512,@2513,@1464,@2514,@2515,I229,@2470,@2541,@2542,@2543,I11,@2634,@2635,@2636,@2638,@2490,@2640,I253,@2494| 2494:C4,40|00802b4d0021000e0e0c00023b2a0e0e0e4f0113002000022e2a4d020a00300e7e0600030e0e0e0e|@4508,@2172,@4507,@2429| 2495:S79|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296d616b65536967496e746f28362970726f63657373536967283329 2496:O3|@7129,@237,@2497 2497:S27|70726f636573735369673a206e6f742061207369676e6174757265 2498:C9,296|00812b3b4d0020010e0c000303032c06d82b3529352a362b3a2f36575b292306577b292308579a2923084d01fa002a2d6a57cb293957eb29230b1211000200040029230b4d02e0002a2d6a12140002000500293a1216000200050029230a121800020005002937121a00020005002938121c0002000500292309121e00020005002935122000020005002936122200020005002923072d2c220c3422192213222230221f220f2216221b680c122500020002002922234d036e000e0e0e0c000329282e4d0361000e0e0c000322232d22272c0e0e0e1604004e002c0003000005222b3c4d054100020239000e0e0c00032922250e0e1606002e002c000100000322272c222f4d071f000c0004122c0002000500292309222a2c692a0e0e0c0002642c272d430e0e0e|@2500,I229,@2501,@2499,@353,@2469,I106,@2498,@2406| 2499:C2,40|00802b56180c0002293b4d001a000e0e0e0c0003030a2c56272d0e0e7d0400022964420e0e0e0e0e|@979,I229| 2500:S89|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296d616b65536967496e746f28362970726f6365737353696728332970537472756374283229 2501:C2,40|00802b56180c0002293b4d001a000e0e0e0c0003030a2c56272d0e0e7d0400022964420e0e0e0e0e|@979,I229| 2502:C2,24|00805609561856272b3c2c2c324d000700330e7b07060006|@1947,@1903| 2503:C7,72|0080560929230856282923084d0038002a2d6a565929230b567829230b4d0127002a2d6a56a7220d302c4d021a004d0316004d0412002f4d050d0022140e0e7b090e00080e0e0e0e|@2505,@2506,@2507,@2508,@2504,@1151,@2045| 2504:S16|5479706520636f6e7374727563746f72 2505:S88|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296d616b65536967496e746f28362970726f636573735369672833296c6f6f6b7570283129 2506:C2,40|00802b56180c0002293b4d001a000e0e0e0c0003030a2c56272d0e0e7d0400022964420e0e0e0e0e|@979,I229| 2507:C2,40|00802b56180c0002293b4d001a000e0e0e0c0003030a2c56272d0e0e7d0400022964420e0e0e0e0e|@979,I229| 2508:O1|@2509 2509:C5,56|00802b3b4d0030000e0c00030316404d0125000e0e0c0002294d021b003b3b6b296502042b372964294d030b000c000229230865420e0e0e|@2510,I229,@1564,I48,@1957| 2510:S27|56414c55455f4f505328292e6c6f6f6b7570547970283329283129 2511:S3|6e696c 2512:S2|3a3a 2513:S3|726566 2514:S12|53706563696679696e672022 2515:S13|2220697320696c6c6567616c2e 2516:O1|@2517 2517:C4,40|00834d0022002c2e306b4d011a002a694d0214000e0c0002302a0e0e0e0c0002643b2a2e7d080002|@2519,@2520,@2518,@2273| 2518:C2,16|00804d000a002c56276a420e0e0e0e0e|@2530,@2529| 2519:S26|545950455f5452454528292e61737369676e5479706573283429 2520:C21,328|00812b4d0041010e0e0c000207cd2b4d0135010e0e0c000229352a362b37294d0225010e0e0c0002294d031b010c00024d0414010e0c00026407dd2a56590e0e0e0c00022a2a4d05fe000e0e0e0c000350294d03f2000e0e0e0c00024d04e8000e0c00024d06e0000e0c000203ce294d07d5000e0e0c00023b2e293b4d08c8000e0c000303032a021629362b3c4d09b7000c0003292b25042504511e213b65652a2a4d0aa2000e0e0e0c00034d0698000e0c00020382567856872d4d0b89000e0e0c00022d4d0c7f004d0d7b000c00032d4d0c73004d0d6f00020268000c0003293b694d0e61002a692c2a694d0f58002a692f2a694d104f002a6927084d1147000c00024d1240002a69292c3c2f35303631373238330202260039343a220c2306220d2307220e2308220f23094d131700221a7b0f0f000e3b6502013b6402013b270402013b430e|@2522,@1744,@1746,@1748,@1153,@1156,@2523,I218,@2095,I229,I106,I113,@1751,-1,@364,@2526,@2527,@2528,@378,@2521,@774| 2521:C1,16|00802b3856172a2d7d0400020e0e0e0e|@773| 2522:S37|545950455f5452454528292e61737369676e54797065732834296173735479706573283229 2523:O1|@2524 2524:C5,48|00812c354d0028004d0124000e0c000303132c36293b2e4d0215000e0e0c0004503b6402054d03070010430e0e0e0e0e|@2525,-1,I229,I255,@2431| 2525:S25|5354525543545f56414c5328292e7570646174655052283229 2526:S13|2074797065287329206e6f7420 2527:S11|2920726571756972657320 2528:S18|5479706520636f6e7374727563746f722028 2529:C1,16|00802b561756282d7e0300030e0e0e0e|@2531| 2530:S37|545950455f5452454528292e61737369676e54797065732834296173735479706573283129 2531:S40|545950455f5452454528292e61737369676e54797065732834296173735479706573283129283129 2532:O1|@2533 2533:C1,8|00802b420e0e0e0e|@2534| 2534:S82|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296d616b65536967496e746f28362970726f63657373536967283329283129 2535:O1|@2536 2536:C1,8|00802b420e0e0e0e|@2534| 2537:C2,24|00805609561856272b3c2c2c324d000700330e7b07060006|@1947,@1903| 2538:C7,72|0080560929230856282923084d0038002a2d6a565929230b567829230b4d0127002a2d6a56a7220d302c4d021a004d0316004d0412002f4d050d0022140e0e7b090e00080e0e0e0e|@2505,@2540,@2539,@2508,@2504,@1151,@2045| 2539:C2,40|00802b56180c0002293b4d001a000e0e0e0c0003030a2c56272d0e0e7d0400022964420e0e0e0e0e|@979,I229| 2540:C2,40|00802b56180c0002293b4d001a000e0e0e0c0003030a2c56272d0e0e7d0400022964420e0e0e0e0e|@979,I229| 2541:C2,40|00802b56180c0002293b4d001a000e0e0e0c0003030a2c56272d0e0e7d0400022964420e0e0e0e0e|@979,I229| 2542:C2,40|00802b56180c0002293b4d001a000e0e0e0c0003030a2c56272d0e0e7d0400022964420e0e0e0e0e|@979,I229| 2543:C18,288|00822d352e362f373b4d00130158582e567b6b2c07dd2b4d0105010e0e0c00024d02fc000e0c000203062b35296402054d03ec001032230833230b2b2b2b4d04de004d05da004d06d600324d07d1000e0e0c0008294d08c7000c00024d09c0000e0c00024d02b8000e0c000203802f4d01ad000e0e0c00024d02a4000e0c000203062f36296402054d0a94001029293b4d0b8c000e0c000303033b024e29352a36221023082211230b2c2b2b4d0470004d056c004d06680022104d0762000e0e0e0c0008121100030002004d0c5100221122152c6b2b332b4d0d44000e0c0004502e250826071e583b27076502013b2704022700003b2c0e0e4f0e23006000024d0f1c002a2a0e0e0e0c000229320e0e0e4f100b00a0000327042705440e0e0e|@2545,@2546,I105,I218,@1773,@2508,@2504,@1151,@2045,@1153,@1156,@1773,I229,@2549,@2550,@2576,@2580,@2544| 2544:C7,72|00812c3b4d0040000e0c000303054d013600104d0231002d2a0c00023b3b2b0e0e4f0323004000024d041c00322a0e0e0e0c00023b2a0e0e0e4f050b00800002503b2708430e0e0e|@2583,I229,@2584,@2586,@2601,@2616,@2582| 2545:S77|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296170706c7953686172696e67436f6e73747261696e74283329 2546:C4,40|00805609561856272e4d001b004d0117000c00032a3c2e2e2d4d020b00340e7b070700060e0e0e0e|@2548,@2547,@353,@1903| 2547:S14|20696e207369676e61747572652e 2548:S93|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296170706c7953686172696e67436f6e73747261696e742833296c6f6f6b75704661696c757265283129 2549:C2,24|00805609561856272b3c2c2c324d000700330e7b07060006|@1947,@1903| 2550:O1|@2551 2551:C42,1272|00823b2e4d00f0040e0c00024d01e8040e0c000203033c02132d4d00da040e0e0e0c00024d01d0040e0c000203033b06d42e4d02c2040e0e0e0c00022e4d02b7040c00022a2a4d03ae040e0e0e0c0003654d04a3040c0002032a2e4d0599040e0e0c00024d0690042a4d078b040c0003294d0883044d077f040c0003652d2d0e7d0600022e4d096f040c00022e4d0967040c00022a4d0a5f040c00024d0458040e0c000203be2a4d0b4d040e0e0c0002030e2a4d0c41040e0e0c00023c6402013b03382a4d0b30040e0c0002030e2a4d0c25040e0e0c0002296402054d0d1804102935324d0e10040e0c0002292b4d0f06040e0e0e0c00036602013b033e2a4d0bf5030202ef030e0e0c0002030e2a4d0ce5030e0e0c0002296402054d0dd803102937644d10d0030e0c00022931314d11c503320e0e0e7b05090004304d05b7030c00024d12b0032a4d07ab030c0003294d13a3034d079f030c0003652f2f0e7d080002294d0a8f030c00024d0488030e0c000203ba294d0b7d030e0e0c0002030e294d0c71030e0e0c00023c6402013b0338294d0b60030e0c0002030e294d0c55030e0e0c0002296402054d0d4803102935314d0e40030e0c0002292b4d0f36030e0e0e0c00036602013b033a294d0b25030e0e0c0002030e294d0c19030e0e0c0002296402054d0d0c03102937644d1004030e0c0002312a314d11f902320e0e0e7b050900042f4d05eb020c00024d14e4022a4d07df020c0003294d15d7024d07d3020c0003652f2f0e7d080002304d00c3020c0002304d00bb020c00022a2a4d16b2020e0e0e0c00036503033b06d0304d17a1020e0e0c00023b2a4d1896020e0e0e0c0003644d048b020c0002304d1783020c00023b2a4d187a020e0e0e0c0003644d046f020c0002324d0067020c00024d1960020e0c00024d0458020e0c0002032a324d054d020e0e0c00024d1a44022a4d073f020c0003294d1b37024d0733020c00036531310e7d0a0002314d0023020c00024d191c020e0c00024d0414020e0c0002032a314d0509020e0e0c00024d1c00022a4d07fb010c0003294d1df3014d07ef010c00036531310e7d0a0002324d00df010c00024d19d8010202d1010e0c0002030c2a4d04c9010e0e0c000202013b030d31330e0e4f1eb70160000306d8314d00ad010e0e0c00024d19a4010e0c0002030c294d0499010e0e0c000202013b030d32320e0e4f1e870160000306d0324d007d010e0e0c00024d1974010e0c000203033c0213314d0066010e0e0e0c00024d195c010e0c000207cd324d1f51010e0e0c0002324d1f47010c00022a030b294d043c010e0c000202013b034f334d002e010e0e0e0c00024d1924010e0c0002030e333c4d2018010e0c0003503c022a334d050b010c00024d2104012a4d07ff000c0003294d22f7004d07f3000c000365330e0e0e0c0002503b026d29030f2a4d04dc000202d4000e0c000202013b0357344d00ca000e0e0e0c00024d19c0000e0c00020312343c4d20b4000202ac000e0c0003503c022e344d05a3000c00024d239c002a4d0797000c0003294d248f004d078b00020239000c000365330e0e0e0c0002503b02013c0321344d0070000e0c0002344d0067000c00022a2a4d255e000e0e0e0c0003260302023b503b65024a324d0549000e0e0c00024d2640002a4d073b000c0003294d2733004d072f000c0003344d0527000c00022a2a4d071e000e0e0e0c0003294d2813004d070f000c0003270531317d0a000265656444|@2553,@1153,@1156,@2095,I113,I218,@1751,@2554,@353,@2099,@2091,@1717,@1744,@1746,@621,@2106,@2555,@1748,@2550,@2558,@2559,@2558,@2559,@2124,@2172,I229,@2560,@2558,@2563,@2558,@2563,@2564,@2102,@2567,@2558,@2171,@2558,@2171,@2572,@2558,@2575,@2552| 2552:S21|292061726520646966666572656e74207479706573 2553:S35|545950455f5452454528292e6c696e6b54797065436f6e7374727563746f7273283329 2554:S21|43616e6e6f742073686172653a2054797065732028 2555:O1|@2556 2556:C8,144|00812b3b4d0088000e0c0003030e3b2d4d007c002d0e0e0e7e0400032b35294d016d000e0e0c0002035e294d0261000e0e0c00022d362f4d0355000e0e0c00024d044c000e0c0002033a2f35294d013f000c0002032a294d0235000e0e0c000231362d2b4d0528000e0c0003030e292d4d061c00330e0e0e7e0a00033b6502013b6402013b6502013b64430e0e0e0e0e|@2557,I229,@1145,@1147,I105,I218,@1695,@2555| 2557:S44|545950455f5452454528292e6c696e6b54797065436f6e7374727563746f7273283329657141726773283229 2558:S15|43616e6e6f742073686172653a2028 2559:S20|29206973206120747970652066756e6374696f6e 2560:O1|@2561 2561:C4,88|00802b29354d004f004d014b000c000303292936293b4d023e000e0e0e0c000329353c4d0131000e0e0c000303032b0207292503511e323b650201296429354d0015004d0111000e0e0c000303033c02013b64420e0e0e0e|@2562,-2,I229,I253| 2562:S29|5354525543545f56414c5328292e69735661726961626c654964283129 2563:S17|29206973206e6f7420666c657869626c65 2564:C19,240|00812c4d00e9000e0e0c00022c4d01df000c00020402002f4d02d4000e0c00024d03cc000e0c000203193c2840314d04be000e0e0e0c00042a4d05b300452a46510206293b45304650292b2d2b6a4d069e000e0e0e0c0002304d0793000c0002037d314d0289000e0e0c00024d0880000e0c00020315314d0975000e0e0c0002294d0a6b000c00026402013b030d313c4d0b5c000e0c0003500242314d0c50000e0c00024d0d48000e0c0002032d314d003d000e0e0c00024d0e34002a4d0f2f000c0003294d1027004d0f23000c00036556670e0e0c00025002023b5002023b50302a4d110900327e0900030e0e0e0e|@2566,@1751,@2106,@1153,@1156,I11,-1,@1160,@2100,@2560,@2091,@1717,@2567,@2102,I218,@2558,@353,@2171,@2565| 2565:O1|@2570 2566:S46|545950455f5452454528292e6c696e6b54797065436f6e7374727563746f72732833297365744571756976283229 2567:O1|@2568 2568:C6,96|00812c3929353b4d0055000e0e0c0003030629362964020e2936293b4d0140000e0c0003296529362a372f2b2b6a2d354d022c004d0028000e0c000303132d36293b2c4d0319000e0e0c0004503b6402054d040b00102705430e0e0e0e0e0e0e|@2569,I229,I253,-1,I255,@2431| 2569:S30|5354525543545f56414c5328292e7463536574457175616c697479283229 2570:C6,96|00812c3929353b4d0055000e0e0c0003030629362964020e2936293b4d0140000e0c0003296529372a3529302c6a2d354d022c004d0028000e0c000303132d36293b2c4d0319000e0e0c0004503b6402054d040b00102705430e0e0e0e0e0e0e|@2571,I229,I253,-1,I255,@2431| 2571:S32|5354525543545f56414c5328292e74635365744571756976616c656e74283229 2572:O1|@2573 2573:C8,384|00812c29354d0077014d0173010c000303292936293b4d0266010e0e0e0c000329353c4d0159010e0e0c000303032b0207292503511e323b65020129642c29354d003c014d0138010e0c000303292936293b4d022a010e0e0e0c000329353c4d011d010e0e0c000303032b0207292503511e333b65020129642a354d0001014d03fd000e0e0c00030a0200ab0072002d0029354d00e9004d01e5000e0e0c000303132936293b2d4d04d5000e0e0c0004503c6402013b02c32a362a353b4d01bf000c0003030e2a362a2a4d05b200310e7e0800032a354d00a6004d01a2000e0e0e0c000303132a36293b2e4d0491000e0e0c0004503c6402013b64027e2a362a354d007b004d0377000c00030a0100150007003b021d2a362a2a4d066200310e7e0800032a36293b2e4d0453000c0004503c646402452a362a354d0042004d013e000e0e0e0c000303232a362a2a4d062e000e0e0e0c000303033c020d2a3b2d4d041c000e0c0004503c64020d293b2c4d040c000e0c0004503c6465430e0e0e|@2574,-2,I229,I253,I107,I255,I113,I251| 2574:S29|5354525543545f56414c5328292e756e69667954797065496473283229 2575:S7|2920616e642028 2576:C8,104|00802b3b4d0060000e0c000303033b02552b352c36562829230b56402d2b2c4d0145004d0241003b2f4d033b000c0008293b4d0032000e0e0e0c00030316404d0425000e0e0c0002294d051b003b3b6b29650204293729642e4f060b007100022a2a69292709420e|@445,I229,@2577,@1948,@2045,@1564,I48,@2576| 2577:O1|@2578 2578:C5,56|00802b3b4d0030000e0c00030316404d0125000e0e0c0002294d021b003b3b6b296502042b372964294d030b000c000229230b65420e0e0e|@2579,I229,@1564,I48,@1957| 2579:S41|56414c55455f4f505328292e6c6f6f6b75705374727563747572654469726563746c79283429283129 2580:O1|@2581 2581:C3,40|00802b3b4d0020000e0c000303033b02152b352c362a3b692a4d010b000c00022a2a69292705420e|@445,I229,@2580| 2582:C5,64|00802b3b4d0038000e0c000303033b02292b352c3656283b2a4f01230040000258582a2a0e4f0217007200032e4f030f007100022a2a69292709420e0e0e0e0e|@445,I229,@2627,@2544,@2582| 2583:S96|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296170706c7953686172696e67436f6e73747261696e7428332973686172655669727453747275637473283229 2584:O3|@7129,@237,@2585 2585:S18|456d7074792073686172696e67206c697374 2586:O1|@2587 2587:C6,64|00802b3b4d0038000e0c000303033b02272b352c362a4d0126000e0e0e0c00022a4d021b000c0002292b4d0312004d040e00327b05070004420e0e0e0e0e0e0e|@2589,I229,@2590,@2586,@2597,@2588| 2588:O1|@2599 2589:S88|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296170706c7953686172696e67436f6e73747261696e74283329756e696f6e4d6170283329 2590:O1|@2591 2591:C8,80|00802b3b4d0048000e0c000303033b02372b352c362a4d0136000e0e0e0c00024d022c002a2a3b4d0325000e0e0c00042c4d041b000c0002292b4d0512004d060e00347b05090004420e0e0e0e0e0e0e|@2589,I229,@2083,@2593,@2081,@2590,@2592,@2588| 2592:O1|@2596 2593:O1|@2594 2594:C2,32|00802b352c362d372a4d0013000c000203072b2a69296402012966420e0e0e0e|@2595,@2019| 2595:S98|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296170706c7953686172696e67436f6e73747261696e7428332974797065436f6e7374724e616d6573283129283129 2596:C2,16|00802b352c364d0006002d0e7e030003|0,I24| 2597:O1|@2598 2598:C2,16|00802b352c364d0006002d0e7e030003|0,I24| 2599:C3,104|00822c3b4d0060000e0c000303032d02512c352d362f293b4d004c000e0c000303033b021829352a362d2b69310c000203033c0207292503511e233b656403102f2a2f4d012100300e0e0e7b050700042f2a2f4d0111000e0e0c00042b2a69292704440e0e0e0e0e|@2600,I229,@2588| 2600:S85|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296170706c7953686172696e67436f6e73747261696e74283329756e696f6e283329 2601:C4,48|00802b3b4d0028000e0c000303033b021d2b352c362a0e0e0e4f0113002100022a4f020b003100022a2a69292705420e|@445,I229,@2602,@2601| 2602:C3,32|008056082c2a4d0016000e0e0e0c00033b2a0e0e0e4f01070030000266420e0e|@2604,@2605,@2603| 2603:C5,104|00802b3b4d0060000e0c000303033b02502b352c3629293b4d004c000e0c000303033b023129352a36120600040002005867120800060002004d012b002c2c2c6b312f2b4d0220000e0c00042e250826071e3b3b2707642a0e4f030b0031000266420e0e0e0e0e0e|@2615,I229,@2614,@2550,@2603| 2604:S118|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296170706c7953686172696e67436f6e73747261696e742833297368617265566972745374727563747328322973686172655669727454797065436f6e737472283129 2605:O1|@2606 2606:C2,16|00813b2c0e4f00070010000264430e0e|@2608,@2607| 2607:C5,80|00802b3b4d0048000e0c000303033b023a2b352c36290e0e0e4f0133002100025638292d4d0228000e0c00032b3b4d001e000e0e0e0c0003030329020c3b2a0e0e4f030b00600002642705420e0e0e0e|@2281,I229,@2607,@2610,@2609| 2608:S99|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296170706c7953686172696e67436f6e73747261696e742833296c6973745669727454797065436f6e73747273283229 2609:C3,40|00802b3b4d0020000e0c00030304560202142b352c36290e0e4f010b002100022b2a69292704420e|@1555,I229,@2609| 2610:O1|@2611 2611:C2,16|00813b2c0e4f00070010000264430e0e|@2613,@2612| 2612:C8,88|00802b3b4d0050000e0c000303033b02452b352c36290e0e0e4f013b002100022b4d0233000c000256482a4d0329002b4d0424000e0c0004294d051b000c00024d0614000e0c000203092935292e69296502012c2706420e|@2281,I229,@2612,@2083,@7205,@1962,I105,I218| 2613:S98|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296170706c7953686172696e67436f6e73747261696e742833296765745669727454797065436f6e73747273283229 2614:C2,24|00805609561856272b3c2c2c324d000700330e7b07060006|@1947,@1903| 2615:S129|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296170706c7953686172696e67436f6e73747261696e742833297368617265566972745374727563747328322973686172655669727454797065436f6e7374722831297368617265416c6c283129 2616:O1|@2617 2617:C6,64|00802b3b4d0038000e0c000303033b02272b352c362a4d0126000e0e0e0c00022a4d021b000c0002292b4d0312004d040e00327b05070004420e0e0e0e0e0e0e|@2589,I229,@2619,@2616,@2618,@2588| 2618:O1|@2626 2619:O1|@2620 2620:C8,80|00802b3b4d0048000e0c000303033b02372b352c362a4d0136000e0e0e0c00024d022c002a2a3b4d0325000e0e0c00042c4d041b000c0002292b4d0512004d060e00347b05090004420e0e0e0e0e0e0e|@2589,I229,@2083,@2622,@2081,@2619,@2621,@2588| 2621:O1|@2625 2622:O1|@2623 2623:C2,32|00802b352c362d372a4d0013000c000203072b2a69296402012966420e0e0e0e|@2624,@2007| 2624:S100|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296170706c7953686172696e67436f6e73747261696e742833297375625374727563747572654e616d6573283129283129 2625:C2,16|00802b352c364d0006002d0e7e030003|0,I24| 2626:C2,16|00802b352c364d0006002d0e7e030003|0,I24| 2627:C4,56|00802b3b4d0030000e0c000303033b02212b352c36290e0e0e4f011b002100025634292d4d0210000e0c0003292c69292706420e0e0e0e0e|@2281,I229,@2627,@2628| 2628:O1|@2629 2629:C2,16|00813b3b2d4f0007002000022966430e|@2631,@2630| 2630:C4,48|00802b3b4d0028000e0c000303033b021c2b352c36290e0e0e4f0113002100022b2a0e0e0e4f02070041000366420e0e|@2281,I229,@2630,@2632| 2631:S99|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296170706c7953686172696e67436f6e73747261696e7428332967657456697274537562537472756374757265283229 2632:C9,104|00812c4d0061000e0e0c000256182a4d0155002b4d0250000e0c0004294d0347000c00024d0440000e0c000203312935293b4d0532000e0e0e0c00030316404d0625000e0e0c0002294d071b003b3b6b2965020429372964293169296602012e66430e0e0e0e0e0e|@2633,@2083,@7202,@1962,I105,I218,I229,@1564,I48| 2633:S113|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296170706c7953686172696e67436f6e73747261696e74283329676574566972745375625374727563747572652832297375627374724c6973742d283229 2634:C2,40|00802b56180c0002293b4d001a000e0e0e0c0003030a2c56272d0e0e7d0400022964420e0e0e0e0e|@979,I229| 2635:C2,40|00802b56180c0002293b4d001a000e0e0e0c0003030a2c56272d0e0e7d0400022964420e0e0e0e0e|@979,I229| 2636:C4,72|00802b352c3629362a385648293b4d0036000e0e0e0c000356682a3c4d0128000e0c00032a3b2b4d021d000e0e0c000450568729373b2e6933322b336b342a69652a220d7d0d0002|@2637,I253,I106,I255| 2637:S90|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296d616b65536967496e746f28362970726f63657373536967283329656e74657256616c283129 2638:C5,80|00802b352c36294d0045000e0e0c00024d013c000e0c0002032456285638293b4d022c000e0c00032c2a692c3b2b4d031e000e0e0e0c0004503b260502023b50562729382c2c692a300e0e0e7d070002|@2639,@2091,@2352,I253,I255| 2639:S91|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296d616b65536967496e746f28362970726f63657373536967283329656e74657254797065283129 2640:O1|@2641 2641:C4,96|00853b2f4d0058000e0c00022923062a23082b392c230b2d3a2e230a2f373038313532230933363423072c2b3030220d220c22113022123422104d0122002214680d221622172b22153b3c0e0e1602000e00160000000007270f1f060e0e0e0e|@2643,@2644,@2647,@2642| 2642:C2,16|00853b31314f000700200003641f060e|@2651,@2650| 2643:S21|50415253455f5452454528292e7061737332283629 2644:O1|@2645 2645:C1,8|00802b420e0e0e0e|@2646| 2646:S3|456e76 2647:O1|@2648 2648:C1,8|00803b420e0e0e0e|@2649| 2649:S28|50415253455f5452454528292e7061737332283629656e762d283129 2650:C114,3064|00812c354d00f00b4d01ec0b0e0c00030a1f00d30b01029e02fb01210b6c05a700d80b47001902d808400068030905750aa90a5403e3001d013f03990b22095e05d109b501ae04c7062c0273099a01c106260a4d02a10b1006cf2c362d372e38563a292306565a29230c577956894d03860b2a220d2d6b322f2e4d047a0b4d05760b4d06720b2f4d076d0b0e0e0c00083c2a4d08620b0e0e0e0c0003333b2c4d09550b0e0e0c000450323b2b4d09480b0e0c00045029270c06dd2c362d38293c4d0a340b0e0c0003573956494d0b280b5769326a2c4d0c1f0b2d2d2d4d0d180b0e0c00062f3b2b4d090d0b0e0e0c00045029270706ca2c362d372a2e0e4f0ef70a3100032a2f0e0e0e4f0eeb0a410003574956594d0fe00a5779336a2d2d2d2d2d4d0dd30a220e0202c50a7b070b00062c362d372e382b300e4f0ebb0a410003574956594d10b00a5779346a4d11a80a2a2c2e6b2d4d129f0a4d139b0a2c4d14960a0e0e0e0c00052f220d0e0e4f0e870aa1000331220e0e0e4f0e7b0ab1000357b956c94d15700a57e922126a4d16670a2a2c2e6b0202570a2e2e4d13590a2c4d14540a0e0c00052f271006dc2c363b2a4f17430a200002644d183b0a2d02022e0a0e0e7d0500022c362d372e384d19260a56493157696b3b2b0e0e0e4f1a170a500002292c4d1b0e0a0e0e0e0c000329304d1c020a0e0e0e0c00032f3b2b4d09f5090e0e0c00045029270806ca2c37296406db2c362d372e382f39292b2d2f0e4f1dd309710005270406da2c362d372e38292b2d4f1ebf095100046606cf2c362d37404d1fb0090e0c00023b2c0e0e0e4f20a3094000023b2a293b4d2198090e0c000303033b021829352a362a0e0e0e4f22830990000250292503511e233b65644d2372092e020265094d2469090e0e0c00033b2a0e0e0e0c0002642f3b2b4d0954090e0c0004504d254b09270806de2c364d26410956292f57496b0403002a2a4d2732090e0e0e0c00035029362c293b4d212209020216090e0e0e0c000303033b023a29352a362a3656890202ff084d2803092a57b9220f56da680557a92c2b2b2e0202e8084d29ec080202e0080e0c0005502d250726061e4a3b2706643b2e293b4d21d0080e0c000303033b021829352a362a0e0e0e4f2abb0890000250292503511e233b65644d25aa08270706cd2c362d372e382b2a2c3b0e4f2b97086100056606dd2c362d372e382b2a2c3c4f2b83086100056606d52c362d37562a292308564a29230c5769567902025f084d2c63082a220c2d6b302f2e4d2d57084d2e53084d2f4f082f4d074a080e0e0e0c0008040200322a4d303b080c0003502935294d3130084d322c080e0c000303033b022856ca29230c57e956f94d3316082a22152d6b4d340d082d302c4d3506080e0e0e0c0005296801270657d729220e4d36f2070e0e0e0c00032e2a2d4d37e5070e0e0c0004294d38db070202cf070c0002293b4d21ce070e0e0e0c0003033a121200020003001213000100030022110202aa074d39ae074d36aa0702029e070e0e0e0c00032b3c22192d2d4d3a96070e0e0e0c0006260402023b5029293b4d2183070c000303043b50022829352a361215000100040029372c4d3b68070e0c0002292e69642a0c0002512a250426031e3326035012120001000400293822122d692a0c0002514d253b07271206da2c36290e4f3c2f07110002293b690402004d3d22074d3e1e070e0e0e0c00024d3f14070e0c000203193c28404d3d07074d4003070c00042a4d41fb06452a46510208294d42f006080200292b4d43e7062b6a4d44e106317d0900022c362d37292e0e0e0e4f0ecf0631000356394d45c6062a576933568a680557592e2b2b2e4d29b4060e0c0005577956894d46a80657a9220e6a4d479f062a2c2e6b31344d1395062c4d1490060e0c000534270c06dc2c36290e4f3c7f061100026406dd2c3629352a362b372c382d394d4869062d3457996b0403002a2a020253064d2757060c00035029362a3756a7293c4d4947060c0003323b3b2c30220d0e0e164a00360613000100000756da2923064d4b27062a306a121100010004002923081213000100040029391215000100040029230c12170001000400293a1219000100040029230a121b000100040029230b121d00010004002937121f0001000400293812210001000400293512230001000400292309122500010004002936122700010004002923072f2c220c340202a10522182215221e30221e220d0202920522182217221e680d122a00010002002228222e2c222a2d22230e0e164c007a0531000200000722253b2b4d096c050e0c00045022263b22204d095e050e0e0e0c000450122c0001000200122d00020003004d4d4505222b22322c6b22212c2b4d4e37050c00045022212d694d4f2b0522310e7d3200024d50200506dd2c362d372e382f390403003b2a4d510d050e0e0c00035029362a370403003b2a4d51fa040e0e0e0c00035029362a370403003b2a4d51e6040e0e0e0c00035029362a37220c030456d8020c56d8293c4d49cb040c00036456ea2923064d52be042a346a121200010004002923084d53ad042a346a1215000100040029391217000100040029230c4d5493042a220d6a121a0001000400293a121c000100040029230a121e000100040029230b122000010004002936122200010004002923074d555b042c221f221d2211220d221830221722202210220f2216680d0202370422214d2539042a3b4d2133040c000303032902382a3529352a362d36122b0001000100122c00010006002d2a332f22222f0e0e0e164c0006043300020000072c2a2509250926071e413b2707654d56ee0312270001000400222122246b4d57de0312280001000400221f6a1228000100040029354d58c703122b0001000400221f6a122b00010004002936122d00010004002923072e2c3333221c22182223302222220d221b221a2221680d222d4d258d032a3b4d2187030c000303032902382a3529352a362d3612360001000100123700010006002d2a332f222d2f0e0e0e164c005a033e00020000072c2a2509250926071e413b270765222f03043b50022c1231000100020012320002000300123300010003004d5925032a22382d6b2d2d2b4d4e19030e0e0c0004260529273006cd2c36561a56282b4d2502032a3b4d21fc020e0c0003030329022c2a3529352a362d36569756ac2d2a342f220c2f0e164c00da021200020000072c2a2509250926071e363b2707270506d32c364d5abd0256292f57496b0403002a2a4d27ae020e0e0e0c00035029363b2d293b4d219d020e0e0c000303033b021829352a362a0e0e0e4f5b870280000250292503511e243b65644d257602270606dd2c36292e0e0e0e4f0e6702210003572956394d5c5c025759326a4d5d54022a2c2e6b4d5e4c022e4d1347022c4d144202020236020e0e0e0c00050402004d5f31021b0f273b3b3b2e4d6026020e0e0e0c00075029644d611902337d0b00022c362d372a2f0e0e0e4f0e07023100032a4f3cff013100024d5ef8012b694d4ff2010202e6010e0e0e0c0002575956694d62e0015789220c6a4d63d7012a2c2e6b2e2e4d13cd012c4d14c8010e0c000530270a06dd2c362d37292f0e0e4f0eb301310003573956494d64a8015769336a4d65a0012a2c2e6b2d4d12970102028b014d138f012c4d148a010e0e0e0c000530220c0e0e4f0e7b019100034d507401270906dc2c362d37294f3c67012100022b300e0e0e4f0e5b01410003574956594d6650015779346a2d2d2d2d2d4d0d4301220e7b070b00062c362d372a2f0e0e0e4f0e2f01310003573956494d6724015769336a4d681c012a2c2e6b2d4d1213014d130f012c4d140a010e0e0e0c00052f220c0e0e4f0efb00910003579956a94d69f00057c922106a4d6ae7002a2c2e0202d8006b2d4d12da004d13d6002c4d14d1000e0e0c00054d12c800270e02bc2c362d372a2f0e0e0e4f0eb700310003573956494d6bac005769336a4d6ca4002a2c2e6b2d4d129b004d1397002c02028a004d148e000e0e0e0c00052f220c0e0e4f0e7f00910003579956a94d6d740057c922106a4d6e6b002a2c2e6b2d4d1262004d135e002c4d1459000e0e0c00054d125000270e02442c362d3729293b4d2141000e0e0c000303043b50021c29352a36565a29352c30692a0e0e0e0c0002512a250426031e292603504d25150065020a4d6f0e00104d70090010430e0e0e0e0e0e0e|@2653,-16,I107,@2654,@2656,@2663,@2668,@1252,@2045,@2669,I255,@2671,@2695,@544,@2697,@2650,@2704,@2705,@2706,@200,@2228,@2225,@2707,@2708,@2709,@1080,@2710,@2712,@1128,@1138,@2713,@2901,@1564,@2946,I229,@2948,@2965,@2973,@992,@2978,@1924,@2980,@2516,@2982,@2984,@4449,@2508,@2504,@1151,@1754,I48,I24,@4450,@1948,@1949,@353,@2952,@2172,@4451,@2657,@1827,@4452,@2771,@1153,@1156,I11,-1,@2846,@2773,@1160,@4458,@4460,@4461,@4462,I106,@2733,@4464,@2642,@4465,@2887,@1171,@1093,@965,@4466,@4467,@4468,@4469,@4472,@4474,@4475,@4476,@4477,@4478,@4489,@4490,@2355,@214,@1012,@989,@4491,@4492,@4493,@4494,@4495,@4496,@4497,@4498,@4499,@4500,@4501,@4502,@4503,@4504,@2652| 2651:S36|50415253455f5452454528292e706173733228362961737369676e56616c756573283629 2652:O3|@7129,@237,@4506 2653:S48|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c756573283229 2654:O3|@7129,@237,@2655 2655:S28|61737369676e54797065733a20656d7074797472656520666f756e64 2656:C2,24|00805609561856272b3c2c2c324d000700330e7b07060006|@2658,@2657| 2657:O1|@2659 2658:S36|50415253455f5452454528292e7061737332283629676976654572726f72283329283129 2659:C4,40|00842e03064d001f0002044d0119004d0215002f2e336b312f2b6a642a2d0e0e7d0800020e0e0e0e|@2661,@1910,@1913,@2660| 2660:C9,128|00805609292309294d0074004d0170000e0c00032e23064d0265002a0e0c0002512e3856482a0e0e0e0c0002512e354d034d002a0e0c0002512e23064d0440002a0c0002512e384d0535002a0e0c0002512e354d0629002a0e0c0002515637292b314d071a000e0e0e0c0004502f373b2a0c0002512f373b2a310e0e7d080002|@2662,@7196,@623,@342,@356,@342,@1916,@338,@1810| 2661:S25|50415253455f5452454528292e6572726f724e656172283529 2662:S28|50415253455f5452454528292e6572726f724e656172283529283129 2663:O1|@2664 2664:C6,64|00802b3b4d0038000e0c00030316404d012d000e0e0c0002294d0223003b3b6b296502042b372964294d0313000c00022923064d0409002f2b6a66420e0e0e0e|@2666,I229,@1564,I48,@1957,@2665| 2665:C4,80|00802b56180c0002294d0043000c00024d013c000e0c00020332293556272a3729353b4d0229000e0e0c0003031629362c352d362e383d2d306a2c2c2b2d6b29270602012b296801270402013b64420e|@2667,I105,I218,I229| 2666:S29|56414c55455f4f505328292e6c6f6f6b757056616c7565283429283129 2667:S32|56414c55455f4f505328292e6c6f6f6b757056616c7565283429283129283129 2668:S20|56616c7565206f7220636f6e7374727563746f72 2669:O1|@2670 2670:C10,120|00812b4d0071000e0e0c00022936293b4d0164000e0c000303252a38294d0257000c000203064d034e000210294d034700694d0442002f0e7d0700026402352a37294d0532000e0e0e0c00020316294d0625000e0e0c00022f3b4d071a00310e7e0800032b38293b324d080b00320e7b0508000465430e0e|@2672,@2673,I229,@1717,@2355,@1171,@2443,@2446,@2671,@2136| 2671:O1|@2675 2672:S51|50415253455f5452454528292e706173733228362961737369676e56616c756573283629696e7374616e636554797065283229 2673:O1|@2674 2674:C1,8|00802b420e0e0e0e|@2476| 2675:C8,112|00812c37294d0067000c00020352294d015d000e0e0c0002293f4d0252000e0e0e0c0003032a2e352f382a4d0341000e0e0c00024d0438002a2a0e0e0e0c00022c2a344d052900220c0e0e7b050b00042e38293b3c4d061700310e7b050700042d38293b3c4d060700300e7b05060004|@2677,@2443,@2446,I229,@2678,@2683,@2676,@2136| 2676:O1|@2686 2677:S27|56414c55455f4f505328292e6f7665726c6f616454797065283229 2678:O2|@2679,@7206 2679:C3,32|00803b5617293b4d0015000e0e0c0003644f010b0010000264420e0e0e0e0e0e|@2681,I253,@2680| 2680:C4,80|00802b3b4d0048000e0c000303033b02392b3529352a362b372f365657292e4d012d000e0e0c00036403142b2b692a0e0e4f021b006100022a2a6929660209290e4f020b005100022705420e0e0e0e0e|@2682,I229,I24,@2680| 2681:S29|5052494e545f5441424c4528292e6765744f7665726c6f616473283129 2682:S42|5052494e545f5441424c4528292e6765744f7665726c6f6164732831297365617263684c697374283129 2683:O1|@2684 2684:C3,40|00802b3b4d0020000e0c000303033b02152b3529352d36294d010c000e0c00022b2a69292705420e|@2685,I229,@2683| 2685:S38|56414c55455f4f505328292e6f7665726c6f6164547970652832296765745479706573283129 2686:C11,120|00822b032d2d4d006e000e0e0e0c000203192d4d0161000e0e0c00022936294d0255000e0e0c00026502054d03490010020a2d4d0441000e0e0c0002294d0537000c00020326294d062d000e0e0c00022e4d0723000c0002292b69293b69322a3c4d081300330e7b050a00044d090800100e0e0e0e0e0e0e|@2688,@1778,@1780,@1710,@2689,@2691,@1145,@1147,@2321,@2136,@2687| 2687:O3|@7129,@237,@2694 2688:S33|545950455f5452454528292e67656e6572616c6973654f7665726c6f6164283329 2689:O3|@7129,@237,@2690 2690:S26|676574526573756c74202d206e6f7420612066756e6374696f6e 2691:O1|@2692 2692:C8,120|00802b4d0071000e0e0c0002035e2b4d0165000e0e0c00022935294d0259000e0e0c0002033a294d034d000e0e0c00022936294d0441000e0e0c00024d0538000e0c0002030e29352936294d062900327d0900022b4d061f00300e0e7d070002294d0613002e0e0e7d0500022b4d0607002c0e0e0e800002|@2693,@1778,@1780,@1720,@1722,I105,I218,@1710| 2693:S23|545950455f5452454528292e6669727374417267283129 2694:S42|67656e6572616c6973654f7665726c6f6164202d20617267206973206e6f742061207479706520766172 2695:C6,64|008056085617292309294d0032004d012e000e0e0e0c00032f384d0222002a0e0e0c0002512f354d0315002a0e0c0002512c2a314d040800320e0e7b05070004|@2696,@7196,@623,@1916,@338,@1810| 2696:S36|50415253455f5452454528292e7061737332283629666f756e644e656172283129283129 2697:O1|@2698 2698:C13,184|00842f4d00b1000e0e0c0002294d01a7000c0002030e294d029d000e0e0c00023c6402013b033f294d018c000e0c0002030e294d0281000e0e0c0002296402054d0374001029354d046d002f31336b2a334d0563002c4d065e000e0e0e0c00052c36270402490402004d074b001b0f273b3b3b2e4d0840000e0c00075029644d0935000e0e0c0002302a694d0a29000e0e0c00024d0b20002f31336b2c2b4d0516002c4d0611000e0e0c00052c2704641f050e0e0e0e0e0e|@2700,@1710,@1778,@1780,@621,@2701,@2228,@2225,@214,@1012,@989,@1171,@2699| 2699:C4,40|00802b352c362d375639564856574d0016002f4d01110030303030304d02080022100e7b0a090009|@2703,@2702,@860,@2247| 2700:S20|545950455f5452454528292e6170706c79283529 2701:C4,40|00802b352c362d375639564856574d0016002f4d01110030303030304d02080022100e7b0a090009|@2703,@2702,@860,@2247| 2702:S11|43616e277420756e696679 2703:S32|545950455f5452454528292e756e69667928352963616e744d61746368283129 2704:C6,64|008056085617292309294d0032004d012e000e0e0e0c00032f384d0222002a0e0e0c0002512f354d0315002a0e0c0002512c2a314d040800320e0e7b05070004|@2696,@7196,@623,@1916,@338,@1810| 2705:C6,64|008056085617292309294d0032004d012e000e0e0e0c00032f384d0222002a0e0e0c0002512f354d0315002a0e0c0002512c2a314d040800320e0e7b05070004|@2696,@7196,@623,@1916,@338,@1810| 2706:C4,40|00802b352c362d375639564856574d0016002f4d01110030303030304d02080022100e7b0a090009|@2703,@2702,@860,@2247| 2707:C6,64|008056085617292309294d0032004d012e000e0e0e0c00032f384d0222002a0e0e0c0002512f354d0315002a0e0c0002512c2a314d040800320e0e7b05070004|@2696,@7196,@623,@1916,@338,@1810| 2708:C4,40|00802b352c362d375639564856574d0016002f4d01110030303030304d02080022100e7b0a090009|@2703,@2702,@860,@2247| 2709:C4,48|00802b3b4d0028000e0c000303033b021d2b352c362a56370e4f0113003200032a4f020b003100022a2a69292705420e|@445,I229,@2650,@2709| 2710:C2,24|00805609561856272b3c2c2c324d000700330e7b07060006|@2711,@2657| 2711:S56|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c7565732832296d7367466e283129 2712:C4,64|00802b3b4d0038000e0c000303033b022d2b352c360402002b352c3656582a2a0e4f011b007200032d2d452a46502d2f0e4f020b008100022a2a6929270a420e|@445,I229,@2650,@2712| 2713:C12,168|00835607293c4d009e000e0e0e0c00032e354d0192002b692a0c00026430354d0285002c566a6a2a0e0c0002644d0377005659566c57796b0403002a2a4d0467000c00035029352a360403003b2a4d0556000e0e0e0c00035029362a373b3b220f4f064300d000033b3b3b3b22132e0e0e160700320014000000000422132e0e0e16080022001400000000034d0918002218121500010004006a220c0e0c00024d0a040027131f04|@2715,I106,@2716,@2721,@2726,@1924,@965,@2728,@2853,@2862,@2714,@992| 2714:C3,56|00802b36561829372e2a0e0e0e0c00025156275637293b4d001d000e0e0c00032d2a692c3b2b4d010e000e0e0e0c0004503b2706420e0e0e|@2718,I253,I255| 2715:S56|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c4465636c61726174696f6e283429 2716:C2,24|00802b3656172a2a4d000c002f0e0e0e7e0500030e0e0e0e|@2718,@2717| 2717:O1|@2719 2718:S61|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c4465636c61726174696f6e283429552d283129 2719:C11,112|00812c4d0069000e0e0c0002294d015f000c0002030e294d0255000e0e0c0002296402054d0348001029352a364d043f000c00032a352b364d0534000e0c00030402004d062900312d3c2e2e4d0720000e0c00075029644d0815000e0e0c00022c2a4d090a00320e7e0900030e0e0e0e|@2720,@1710,@1145,@1147,@621,@1698,@1733,@214,@1012,@989,@1140| 2720:S27|545950455f5452454528292e736574547661724c6576656c283229 2721:C5,72|00802b352c36562829230b2c2a0c000264294d0032000e0e0e0c00024d0128000e0c0002030e2935292d4d021a00320e7e08000356472c2a4d030c00320e0e0e7e0800030e0e0e0e|@2723,I105,I218,@2722,@2717| 2722:O1|@2724 2723:S69|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c4465636c61726174696f6e2834293c7061747465726e3e2d283129 2724:C8,144|00812c4d0089000e0e0c0002294d017f000c0002030e294d0275000e0e0c0002296402054d036800102d4d0062000e0e0e0c0002294d0157000c0002030e294d024d000e0e0c0002296402054d034000102b352c364d0437000c00032a352b364d042c000e0c00032a2a4d0522000e0e0e0c000365030d2b304d061300310e0e7e08000329314d060600310e7e080003|@2725,@1710,@1145,@1147,@621,@1730,I233,@1140| 2725:S27|545950455f5452454528292e6c696e6b5479706556617273283229 2726:C4,40|00805609561856272e4d001b004d0117000c00032c3c2d2d2d4d020b00340e7b070700060e0e0e0e|@2727,@1906,@353,@2657| 2727:S66|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c4465636c61726174696f6e2834296e6577456e762d283129 2728:C13,216|00812b3b4d00d0000e0c000303033b02c22b35293b4d00bf000c000303112c363c2a0e0e0e4f01af003100036402a329352a372e363c28403c4d029b000c00044d0394001207000100f5ff331209000100f7ff2d680556632d343b2c2e330e0e0e4f047300c200072c3b4d056a000e0e0e0c000303305787293c4d065a000e0e0e0c0003644d074f000c000203155889292309294d0840004d093c000e0c00036502013b02013b03165889293b32324d0a25004d0b21000e0e0c00065102023b50342e0e0e4f010f009100032a2a6929270964430e0e0e0e|@2730,I229,@2728,I11,@2731,@2733,I253,I113,I218,@7190,@623,@2729,@2657| 2729:S39|5061747465726e20646f6573206e6f74206465636c61726520616e79207661726961626c65732e 2730:S69|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c4465636c61726174696f6e2834296d617050726f63657373283229 2731:C2,48|0080560a293b3b4d0025000e0e0c0004502c56290e0c0002505618030b2c56272d0e0e0e7d0400023b64420e0e0e0e0e|@2732,I255| 2732:S81|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c4465636c61726174696f6e2834296d617050726f63657373283229656e74657256616c73283129 2733:C73,1336|00852b354d0030054d012c050e0c000307d82b362c372d380402002c2a4d0217050c00035029355759292309294d0307054d0403050c0003654d05fb040c000203033402013b03064d06ec04026c294d07e5044d08e1040e0e0c0003032d565a2923062f2a0c000264294d09ca040e0e0e0c00024d05c0040e0c000203062935296402044d06b00465022f565a292306567a29230c57994d0a9d042212220e2c6b332e2d4d0b90044d0c8c044d0688042f4d0d83040c00082706294d0e79040e0e0c000203893403165769293c3422114d0f64044d1060040e0c00065102023b502d3b2b4d115004020202010e0c000450294d1242040e0e0e0c00022936294d1335040e0e0c0002030e294d1429040e0e0c00022964020d2a38294d1519040e0e0c0002642903043b5002155799293c220e22144d1600044d10fc030e0c0006513b2d4d17f1030e0e0c000366028f0402004d18e203220c3b3b3b2e4d19d8030e0c00075029644d1acd030e0e0c00023c28403b4d1bc0030e0c00043c28403b4d1bb4030e0c0004312c2c2c4d1ca8030e0c000557a9332a22144d1d9a030e0e0e0c00045056bc57c9220c2b2b22173b4d1e84030e0c000650220c2d6922110e0e0c000250343b2e4d116c030e0c0004502c4d1f62030e0e0e0c000227072d3b2b4d1153030c00045029270706dc2b354d2044034d0140030e0c0003033c2b362c38293c4d2130030e0c000357394d2226035759316a2b4d231d032c220f2d4d2415030e0e0c00062e3b2b4d1109030e0e0c00045029270606cf2b353c4d01f7020c000307dd2b362c372a354d00e8024d01e4020e0c000303902a362b37564a292306566a29230c57894d25ca022211220d2c6b302e2d4d0bbd024d26b9024d06b5022f4d0db0020e0c0008294d0ea7020c00020318303b2b4d119b020c0004503b2a4d1791020e0e0c00030238294d2785020e0e0c000203033b022457b9324d2874024d297002020264020e0c00032a3c221122172d4d105d020e0e0c0006654d2a530264270902175729293c30220d4d2b43024d103f020c00064d2a38026533333333332f020225020e0e4f2c270281000757494d2d1e025769326a2c2c2c02020f0022102d4d240c02220d0e7b070e00062b35280d4d01fc010e0c0003031a2b363b2a0e0e0e4f2eeb01200002644d2fe3012d0e0e7d0900022b3528084d01d4010e0c000303442b362c372d383b2a0e0e0e4f30bf014000024d31b801220d3257896b2a2a4d32ac010e0c000329304d33a2010e0e0e0c00032f3b2b4d1195010e0e0c00045029270806ce2b3528094d0182010e0e0e0c0003035e2b363b2a0e0e0e4f346f01200002293b690402004d3562014d365e010e0e0e0c00024d3754010e0c000203193c28404d3547014d1b43010c00042a4d383b01452a46510208294d393001080200292b4d3a27012b6a4d3b2101327d0e00022b354d3c16014d0112010e0e0e0c0003035b2b362c3732323232322e0e4f2cfb007100074d3df40034575931567a680557492d2b2b220f4d3ee1000e0e0c000557694d3fd6005789346a4d40ce002a22112d6b2f324d41c3002c4d42be000202b2000e0e0e0c000532270a02a72b354d43a9004d01a5000e0e0c0003034b2b362c3732323c32322f0e4f2c8f0071000733333333332f0e0e0e4f2c7f0081000757494d4476005769326a4d456e002a220f2d6b2d2d4d4163002c4d425e000e0e0e0c00052e2708024b2b35280e4d014b000c000303064d46420002382b354d473a004d0136000e0e0e0c000303220402004d1827001b0f273b3b3b2e4d191c000e0c00075029644d1a11002c7d0800024d2a08001f060e0e0e0e0e0e|@2735,-8,I229,@1754,@7190,@623,I218,@1252,I48,I24,I105,@2736,@2663,@2737,@2045,@2442,@2738,@2657,I255,@2673,@2739,@2741,@1717,@2743,@2669,@214,@1012,@989,I11,@2744,@1059,@2747,@2338,-10,@2671,@2752,@544,@2697,@2753,@2737,@2754,@2757,@353,@992,@2758,@2733,@2759,@2760,@1080,@2761,@2763,@1128,@1138,@2765,@2771,@1153,@1156,-1,@2846,@2773,@1160,-3,@2847,@2516,@2850,@2851,@2228,@2225,-9,@2852,@2734,@1093,-16| 2734:C4,40|00802b352c362d375639564856574d0016002f4d01110030303030304d02080022100e7b0a090009|@2703,@2702,@860,@2247| 2735:S53|50415253455f5452454528292e706173733228362961737369676e56616c75657328362970726f636573735061747465726e283629 2736:C2,24|00805609561856272b3c2c2c324d000700330e7b07060006|@2658,@2657| 2737:S11|436f6e7374727563746f72 2738:S48|4964656e746966696572206265666f72652060617327206d757374206e6f74206265206120636f6e7374727563746f72 2739:O1|@2740 2740:C3,24|00802b4d0011000e0e0c00024d0108002c8000020e0e0e0e|@2737,I105,I218| 2741:O1|@2742 2742:C1,8|00802b35420e0e0e|@2737| 2743:S41|436f6e7374727563746f72206d757374206265206170706c69656420746f20736f6d657468696e672e 2744:O1|@2745 2745:C2,24|00833c2d2d6a2f4d000d002b316b29651f040e0e0e0e0e0e|@2746,-1| 2746:S27|5354525543545f56414c5328292e6d616b654c6f63616c56283429 2747:O1|@2748 2748:C14,192|00842d2309294d00b6004d01b2000e0e0e0c00036403033b02a32f4d02a1004d039d000e0e0c000303033c02622f4d048e004d038a000e0e0e0c000303033c024e2f4d057a004d0376000e0e0e0c000303033c023a2f4d0666004d0362000e0e0e0c000303033c02262f4d0752004d034e000e0e0e0c000303033c02122b030e2f4d083b004d0337000c000302013b032b4d092b00304d0a26000e0e0e0c0003294d0b1b004d0a17000c00032f3c32312d4d0c0b00320e7b070900063b1f050e|@2750,@7190,@623,@218,I24,@393,@2511,@2512,@2513,@1464,@2751,@353,@2749,@2657| 2749:S12|2220697320696c6c6567616c 2750:S39|50415253455f5452454528292e7061737332283629636865636b466f724275696c74496e283529 2751:S25|526562696e64696e67206f722073706563696679696e672022 2752:C6,64|008056085617292309294d0032004d012e000e0e0e0c00032f384d0222002a0e0e0c0002512f354d0315002a0e0c0002512c2a314d040800320e0e7b05070004|@2696,@7196,@623,@1916,@338,@1810| 2753:C2,24|00805609561856272b3c2c2c324d000700330e7b07060006|@2658,@2657| 2754:O1|@2755 2755:C3,24|00802b354d0010002a4d010b000c000303033c02013b6442|@2756,@1253,I24| 2756:S33|5354525543545f56414c5328292e6973556e646566696e656456616c7565283129 2757:S21|206973206e6f74206120636f6e7374727563746f72 2758:S46|436f6e7374727563746f7220696e2061207061747465726e20776173206e6f7420616e206964656e746966696572 2759:C6,64|008056085617292309294d0032004d012e000e0e0e0c00032f384d0222002a0e0e0c0002512f354d0315002a0e0c0002512c2a314d040800320e0e7b05070004|@2696,@7196,@623,@1916,@338,@1810| 2760:C4,64|00802b3b4d0038000e0c000303033b02292b352c3656285639564a565b566c292b2d2f31344f011700c200072f4f020f008100022a2a6929270a420e0e0e0e0e|@445,I229,@2733,@2760| 2761:C5,88|00802b3b4d0050000e0c000303033b02412b3529352a362e3656485659566a567b568c292b2d2f31344f012b00e20007040200322b2b4d021e000e0e0e0c00045029310e0e4f030f00c100022a2a6929270e420e0e0e0e0e|@2762,I229,@2733,@1102,@2761| 2762:S65|50415253455f5452454528292e706173733228362961737369676e56616c75657328362970726f636573735061747465726e2836296d61704c6162656c73283129 2763:C2,24|00805609561856272b3c2c2c324d000700330e7b07060006|@2764,@2657| 2764:S64|50415253455f5452454528292e706173733228362961737369676e56616c75657328362970726f636573735061747465726e283629706174547970652d283129 2765:C5,56|00800402004d002f001b0f273b3b3b2e4d0124000e0c00075029644d0219000e0e0c00023b2d0e0e0e4f030b00200002502a65420e0e0e0e|@2767,@214,@1012,@989,@2766| 2766:C8,112|00802b3b4d0068000e0c000303033b02592b352c3657285739574a575b576c292b2d2f31344f014700c300075684120a000400030057ac57b74d023300120e00040003002b6a4d0326002a2d2f6b2f2f4d041c002c4d0517000c0005220d0e0e0e4f060b00f10002270f420e0e0e0e0e|@2769,I229,@2733,@2770,@2768,@2228,@2225,@2766| 2767:S67|50415253455f5452454528292e706173733228362961737369676e56616c75657328362970726f636573735061747465726e28362970726f636573734c697374283129 2768:C4,40|00802b352c362d375639564856574d0016002f4d01110030303030304d02080022100e7b0a090009|@2703,@2702,@860,@2247| 2769:S79|50415253455f5452454528292e706173733228362961737369676e56616c75657328362970726f636573735061747465726e28362970726f636573734c6973742831296170706c794c697374283129 2770:C6,64|008056085617292309294d0032004d012e000e0e0e0c00032f384d0222002a0e0e0c0002512f354d0315002a0e0c0002512c2a314d040800320e0e7b05070004|@2696,@7196,@623,@1916,@338,@1810| 2771:O6|@2773,1,0,@2774,@2776,@2772 2772:O2|-1,@7226 2773:S4|6c697374 2774:O2|@2775,0 2775:O3|3,@7209,79992 2776:O2|-1,@7210 2777:O3|1,@214,@2778 2778:O2|@2780,@2779 2779:O2|@2827,0 2780:O4|@2512,@992,@2782,@2781 2781:O3|1,@2822,@2821 2782:O2|-1,@2783 2783:O2|5,@7211 2784:O5|0,@2786,@2817,@7219,@2785 2785:O2|10,@2818 2786:O3|@225,@2788,@2787 2787:O2|@477,@2809 2788:O2|@229,@2789 2789:O3|@232,0,@2790 2790:O10|0,@2792,@2802,@2791,0,0,0,0,0,0 2791:O1|@7217 2792:O1|@7212 2793:O5|0,@2795,@467,@7214,@2794 2794:O2|-7,@2796 2795:O2|@457,@7213 2796:O8|@2797,@2512,0,0,1,0,0,0 2797:O4|4,@2799,@2798,1 2798:O2|-3,I218 2799:O2|@2800,0 2800:O4|4,@472,@2801,1 2801:O2|-3,I105 2802:O1|@7215 2803:O5|0,@2795,@2805,@7216,@2804 2804:O2|-7,@2806 2805:O5|-5,2,1,0,0 2806:O8|@474,@2512,0,0,1,0,0,0 2807:O5|0,@2795,@2808,@7218,@2804 2808:O5|-5,3,1,0,0 2809:O4|@2811,@2813,@2812,@2810 2810:O1|@2816 2811:O3|@2813,@2812,@2810 2812:O1|@2815 2813:O1|@2814 2814:C3,24|00802b4d0011000e0e0c00024d0108002c8000020e0e0e0e|@2512,I105,I218| 2815:C1,8|00802b420e0e0e0e|@2512| 2816:C1,8|00802b420e0e0e0e|@2512| 2817:O2|-3,@2811 2818:O2|@467,@2819 2819:O2|@2805,@2820 2820:O2|@2808,0 2821:O4|-3,@2774,@2773,@7220 2822:O4|-2,1,@2823,0 2823:O2|@2825,@2824 2824:O2|@2826,0 2825:O2|49,@2775 2826:O2|50,@2821 2827:O4|@2511,@219,@2828,@2821 2828:O2|-1,@2829 2829:O2|5,@7221 2830:O5|0,@2831,@2845,@7222,@496 2831:O3|@225,@2833,@2832 2832:O2|@477,@2841 2833:O2|@229,@2834 2834:O3|@232,0,@2835 2835:O10|0,@2836,@502,0,0,0,0,0,0,0 2836:O1|@7223 2837:O5|0,@2839,@467,@7225,@2838 2838:O2|-7,@2840 2839:O2|@457,@7224 2840:O8|@508,@2511,0,0,1,0,0,0 2841:O2|@2843,@2842 2842:O1|@2844 2843:O2|@2842,0 2844:C2,16|00803b2c4d0008002d0e0e0e7e030003|@2511,I229| 2845:O2|-3,@2843 2846:O2|0,@2771 2847:C6,56|0080560a292308562a29230c5649565856674d0022002a2d2d6b33302f4d0117004d0213004d030f002f4d040a0022110e0e0e7b090b0008|@2849,@2848,@2508,@2504,@1151,@2045| 2848:C2,24|00805609561856272b3c2c2c324d000700330e7b07060006|@2658,@2657| 2849:S55|50415253455f5452454528292e706173733228362961737369676e56616c756573283629707441737369676e5479706573283329283129 2850:C6,64|008056085617292309294d0032004d012e000e0e0e0c00032f384d0222002a0e0e0c0002512f354d0315002a0e0c0002512c2a314d040800320e0e7b05070004|@2696,@7196,@623,@1916,@338,@1810| 2851:C4,40|00802b352c362d375639564856574d0016002f4d01110030303030304d02080022100e7b0a090009|@2703,@2702,@860,@2247| 2852:C6,64|008056085617292309294d0032004d012e000e0e0e0c00032f384d0222002a0e0e0c0002512f354d0315002a0e0c0002512c2a314d040800320e0e7b05070004|@2696,@7196,@623,@1916,@338,@1810| 2853:C17,496|00822c3b4d00e8010e0c000303162b3b4d00dc010e0c000303033b02054d01cf011006dd2c35293b4d00c4010e0c000303112d363c2a2f0e0e4f02b3014100046406dd29362a372f362f4d03a2010e0e0e0c00024d0498010e0c000207cf2f3530363303161207000100f4ff577a2923064d057b012a2d6a660206576a29230664577a292308579a293957ba29230c57da293a57fa29230a1212000100020029361214000100030029361216000200040029230b4d0638012a2d306b121900020004002937121b00020004002938121d00020004002935121f0002000400292309122100020004002936122300020004002923072f2c220c34221d221a22230202ec00302223220d221d22172223680d1226000100fdff122700020002000202cc00222522262d22272d2f0202b9000e0e160700ba002e000300000712290003000300122a00020006004d08a200122c00030003002b6a4d0995002a222a2e6b22272e4d0a89002c4d0b84000e0c000522310336222b29354d0c74004d0070000e0c0003030c2937292502501e163b64020e28062a354d0056000e0e0e0c0003644d044b000c000202013b0323122e0003000300122f00020006002a3c2b222f4d0d2c004d0e28000e0c0006260302023b502231222a22290e1602001200310001000004272902054d0f040010666444|@2855,I229,@2854,@2853,I105,I218,@2856,@2857,@2642,@2858,@2859,@2228,@2225,-3,@2860,@2657,@2854| 2854:O3|@7129,@237,@2861 2855:S69|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c4465636c61726174696f6e283429636865636b5479706573283329 2856:C2,40|00802b56180c0002293b4d001a000e0e0e0c0003030a2c56272d0e0e7d0400022964420e0e0e0e0e|@979,I229| 2857:C2,64|00802b56190c0002293b4d0032000e0e0e0c000303222c56280c0002293b4d001e000e0e0e0c0003030a2d56372e0e0e7d050002296402012964420e0e0e0e0e|@979,I229| 2858:C6,64|008056085617292309294d0032004d012e000e0e0e0c00032f384d0222002a0e0e0c0002512f354d0315002a0e0c0002512c2a314d040800320e0e7b05070004|@2696,@7196,@623,@1916,@338,@1810| 2859:C4,40|00802b352c362d375639564856574d0016002f4d01110030303030304d02080022100e7b0a090009|@2703,@2702,@860,@2247| 2860:S51|526563757273697665206465636c61726174696f6e206973206e6f74206f662074686520666f726d2060666e206d6174636827 2861:S35|636865636b54797065733a206261646c792d666f726d65642070617273652d74726565 2862:C11,176|00812c3b4d00a8000e0c000303033b029a2c35293b4d0097000c000303112d36292e0e0e0e4f01870031000364027b29362a372f362f4d0276000e0e0e0c00024d036c000e0c0002035a2f35303656632e4f045b007100025889579c4d05500058b92b6a2f2e2e2e220c2e4d0641000e0e0c000757c857dc58e94d073200220d2c2c6b342d2b4d0826000e0e0e0c0004220d220c0e1601001600140001000003270d02054d090800106664430e0e0e0e|@2864,I229,@2862,I105,I218,@2865,@2870,@2871,@2886,@2887,@2863| 2863:O3|@7129,@237,@2900 2864:S67|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c4465636c61726174696f6e283429616c6c6f7747656e283229 2865:C11,584|00802b3528064d003e020e0e0e0c000303033c06d22b354d012d024d0029020e0e0c000303033c06d72b3528094d0017020c000303682b36293b4d000a020e0e0e0c000303033c02525819292309294d02f5014d03f1010e0e0c0003654d04e7010c00020334293c2a3b4d00da010e0e0e0c0003030329021e2a352b362b030a2a4f05c30151000202013b2a2a2505250526031e2b3b666502013b6406ce2b354d06a4014d00a0010e0c0003030d2b37294f0593011100026406cd2b354d0787014d0083010c000303033c06d42b35280e4d0073010c000303033c06dc2b35280d4d00630102025c010c0003035c2b365819292309294d024e014d034a01020243010e0e0e0c0003654d043b010c00020334293c2a3b4d002e010e0e0e0c0003030329021e2a352b362b030a2a4f05170151000202013b2a2a2505250526031e2b3b666502013b6406d32b3528084d00f6000e0e0e0c0003036b2b385819292309294d02e2004d03de000202d7000e0e0e0c0003654d04cf000c00020343293c2a3b4d00c2000202bb000e0e0e0c000303032902292a352b362a362c0310290202a2000e0e4f059f0061000202013b2b2a2506250626041e378a003b27046502013b6402802b353c4d007c000e0c0003033f2b362c375829292309294d0268004d0364000e0c0003654d045b000c0002031b2a4d0851000e0e0c0002030c290e0e4f05430021000202013b02013b6502342b354d0931004d002d00020226000e0e0c0003031e5809292309294d0218004d0314000e0c0003654d040b002c0e0e0e8000023b420e0e|@2867,I229,-8,@7190,@623,I218,@2865,-3,-10,@2866,-13| 2866:O1|@2868 2867:S71|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c4465636c61726174696f6e2834296e6f6e457870616e73697665283129 2868:C10,112|00802b354d0068004d0164000e0c000303362b362c37293b4d0254000e0c0003294d034b000c0002031a2b4d0441004d053d000e0e0c00034d0634002f0e0e0e7d0600023b6602212b354d0722004d011e000e0e0e0c0003030e2b37294d080f002d0e0e7d0400023b420e0e0e0e0e0e|@2869,-8,I229,I253,@2442,@2513,I24,I218,-3,@2866| 2869:S78|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c4465636c61726174696f6e28342969734e6f6e526566436f6e7374727563746f72283129 2870:C6,64|008056085617292309294d0032004d012e000e0e0e0c00032f384d0222002a0e0e0c0002512f354d0315002a0e0c0002512c2a314d040800320e0e7b05070004|@2696,@7196,@623,@1916,@338,@1810| 2871:O1|@2872 2872:C5,64|00854d003a002c32303068054d0130002a30333368054d0226002a694d0320000e0c0002332a0e0e0e0c0002643c2a0e0e0c0002513b651f060e0e0e0e0e0e0e|@2874,@2875,@2879,@2873,@2273| 2873:C2,16|00804d000a002c56276a420e0e0e0e0e|@2884,@2883| 2874:S34|545950455f5452454528292e616c6c6f7747656e6572616c69736174696f6e283629 2875:C3,64|00815609561a4d00360056372f56583256796806292b3c2e352f36303731383239333a342306220c2307220d2308220e23094d010a0022120e0e0e7b0f07000e|@2877,@2876,@774| 2876:C9,144|00803b4d0089000e0e0c0002561b292309294d017a004d0276000e0e0e0c00032f23064d0369002a0e0c0002512f38565a2a0e0e0e0c0002512f354d0451002a0e0c0002515649292b32303c4d0540000e0c00065030354d0635002a0e0c000251303856682a0e0e0e0c00025130354d071d002a0e0c0002513056670e0c00025030373b2a320e0e7d0900020e0e0e0e|@2878,@1689,@7196,@623,@356,@338,@1704,@338,@338| 2877:S46|545950455f5452454528292e616c6c6f7747656e6572616c69736174696f6e283629676976654572726f72283229 2878:S49|545950455f5452454528292e616c6c6f7747656e6572616c69736174696f6e283629676976654572726f72283229283129 2879:C26,512|00812b4d00f9010e0e0c000207dc2b4d01ed010e0e0c000229352a364d02e0010e0c000356292a2a4d03d4010e0c000365032329352a364d02c5010e0e0c0003291b0f274d04b8010e0c0003644d05af010c000202013b07cb29352a364d069f010c0003294d0797010c0002030e294d088d010e0e0c00023c6402013b5638292309294d0979014d0a75010e0e0c0003566a4d056a010e0e0e0c000203202e352f364d0b5a010e0e0e0c000303033c020b294d054a010e0e0e0c000202013b03033c02012c29030f5679293c4d0c30010e0c00036402031b0f275688292309294d091c014d0a180102020e010e0c0003333534364d0d08010e0c0003030a2d0304220e02013b02013b03114d0ef1004d0fed0056d70c0003503b02422c3c4d10de000202d0000e0e0e0c0003031a220e031329030d314d05c6000e0e0e0c000202013b02013b02013b03114d11b1004d12ad0056d70c0003503b0202220e3435220c364d1399000e0e0c00032f030f220c35220d364d0d87000c000302013b220d35220e364d0b77000c00030402004d146d00322e2e2e2e4d1564000e0c00075029644d1659000e0e0c0002294d004f000c0002030e294d0145000e0e0c0002296402054d173800102210352211364d062d000e0e0c00032a2a4d1822000e0e0e0c00035022112c4d1814000e0c0003502f271102012d6402012c430e0e0e0e|@2881,@1145,@1147,@1730,I231,I113,I218,@1714,@1740,@1712,@7190,@623,@1733,I107,@2260,@2479,@2882,I229,@2479,@2880,@1698,@214,@1012,@989,@621,@1140| 2880:S40|696e636c756465732061206672656520696d70657261746976652074797065207661726961626c65 2881:S44|545950455f5452454528292e616c6c6f7747656e6572616c69736174696f6e28362967656e6572616c283229 2882:S29|696e636c75646573206120667265652074797065207661726961626c65 2883:C1,16|00802b561756282d7e0300030e0e0e0e|@2885| 2884:S44|545950455f5452454528292e616c6c6f7747656e6572616c69736174696f6e28362967656e6572616c283129 2885:S47|545950455f5452454528292e616c6c6f7747656e6572616c69736174696f6e28362967656e6572616c283129283129 2886:C2,24|00805609561856272b3c2c2c324d000700330e7b07060006|@2658,@2657| 2887:O1|@2888 2888:C4,48|00824d002a002c2e6a4d0123002a694d021d000e0e0c00022f2a0e0e0e0c0002643c2a0e0e0c0002513b64440e0e0e0e|@2890,@2891,@2889,@2273| 2889:C2,16|00804d000a002c56276a420e0e0e0e0e|@2898,@2897| 2890:S37|545950455f5452454528292e636865636b466f724c6f63616c446174617479706573283329 2891:C9,128|00812b4d0079000e0e0c0002036e2b4d016d000e0e0c000229372e0322294d025e000e0e0e0c00024d0354000e0c000256382a2a4d0448000e0c00036502013b0336294d0239000e0e0c00024d0530000e0c00024d0628002a4d0723000c00032928294d0719000e0e0c00036556370e0e0c0002503b02013c6502013c430e0e|@2893,@1744,@1746,@1748,@2894,I233,@1751,@2892,@353| 2892:S30|5479706520636f6e7461696e73206c6f63616c2064617461747970652028 2893:S50|545950455f5452454528292e636865636b466f724c6f63616c446174617479706573283329636865636b5479706573283229 2894:O1|@2895 2895:C1,8|00802b372964420e|@2896| 2896:S27|5354525543545f56414c5328292e74634c65744465707468283129 2897:C1,16|00802b561756282d7e0300030e0e0e0e|@2899| 2898:S50|545950455f5452454528292e636865636b466f724c6f63616c446174617479706573283329636865636b5479706573283129 2899:S53|545950455f5452454528292e636865636b466f724c6f63616c446174617479706573283329636865636b5479706573283129283129 2900:S33|616c6c6f7747656e3a206261646c792d666f726d65642070617273652d74726565 2901:C11,208|00825607293c4d00c6000e0e0e0c00032e354d01ba002b692a0c00026430354d02ad002c566a6a2a0e0c0002644d039f005659566c57796b0403002a2a4d048f000c00035029352a362b373b220c293b4d057c000e0c000303033b021829352a362a0e0e0e4f066700d0000250292503511e233b65643b220e293b4d0551000e0e0c000303033b021829352a362a0e0e0e4f073b00f0000250292503511e243b65644d082a0056ea56f912110002000300121200010006001213000100020022116807300e0c00024d090400270e440e|@2903,I106,@2904,@2906,@2908,@1924,I229,@2910,@2920,@2902,@992| 2902:C6,88|00802b36294d004f000c0002562c56395648565a4d01400056792b6a2e2e3c2f2f2e4d0232000e0e0e0c0007568b569a56a956b84d0320002a2d2d6b342e2b4d0415000e0e0c000456e7293722122a22130e0e0e7d130002|@2905,@2338,@2945,@2871,@2944,@2887| 2903:S56|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737346756e4465636c61726174696f6e283329 2904:C2,24|00802b3656172a2a4d000c002f0e0e0e7e0500030e0e0e0e|@2905,@2717| 2905:S61|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737346756e4465636c61726174696f6e283329552d283129 2906:C5,72|00802b352c36562829230b2c2a0c000264294d0032000e0e0e0c00024d0128000e0c0002030e2935292d4d021a00320e7e08000356472c2a4d030c00320e0e0e7e0800030e0e0e0e|@2907,I105,I218,@2722,@2717| 2907:S69|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737346756e4465636c61726174696f6e2833293c7061747465726e3e2d283129 2908:C4,40|00805609561856272e4d001b004d0117000c00032c3c2d2d2d4d020b00340e7b070700060e0e0e0e|@2909,@1906,@353,@2657| 2909:S64|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737346756e4465636c61726174696f6e2833296d7367466e283129 2910:C29,528|00802b36294d0007020c00024d0100020e0c000207db293529352a372f3730382c29354d02e9014d03e5010e0e0c0003030c2937292502501e173b64023229353c4d03cb010c0003030c2936292502501e2f3b64021a29354d04b4014d03b0010e0c000303062936296402044d05a001644d069b012e2a0e0e0c000256930402004d078b012b3b3b3b2e4d0882010e0e0e0c00075029644d0975010e0e0c00023c28403b4d0a68010e0c00043c28403b4d0a5c010e0c00042f2c2c2c4d0b50010e0c0005313b304d0c45010e0e0c0004502e3b4d0339010e0e0c0003031d58e957fc2a3c2b220f4d0d25014d0e2101020216010e0e0c00066502013b314d050f014d0f0b010c00034d0104010e0c000207d658f9322a220e4d10f4000e0c00041212000200060012130003000300220c2b2b22123b4d11d7000c000612150002000400292306220f2a0c000264294d00be000e0e0e0c00024d01b4000e0c000203062935296402044d12a40012180003000300292309294d1395004d1491000e0e0c000365030b294d1584000e0c000202013b0347121800030003001219000200060022124d1667004d1763000c00034d185c002a4d1957000c0003294d1a4f004d194b000c00032d3c2e221b2d4d0e3e000e0e0e0c0006270502013b22133b220c4d0c2a0002021a000e0e0e0c00045022113469121a000100f7ff221b0e0e7d1b00023b270e02054d1b0300106442|@2912,I105,I218,-3,I229,-8,I48,@2913,@214,@1012,@989,I11,@2744,I255,@2916,@2657,I24,@1059,@2747,@1252,@7190,@623,@2442,@704,@720,@2917,@353,@2918,@2911| 2911:O3|@7129,@237,@2919 2912:S75|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737346756e4465636c61726174696f6e28332966696e644e616d65416e645061747473283129 2913:O1|@2914 2914:C5,72|00802b354d0040004d013c000e0c0003030e2b37294d022f002d0e0e7d0400022b353c4d0121000e0e0c000303162b36294d0213000c0002293c4d030a002f0e7e0500033b420e0e|@2915,-3,I229,@2913,I106| 2915:S67|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737346756e4465636c61726174696f6e2833296765744172697479283129 2916:S46|436c617573616c2066756e6374696f6e20646f6573206e6f74206861766520616e7920706172616d65746572732e 2917:S9|5661726961626c6520 2918:S34|20616c7265616479206465636c61726564206173206120636f6e7374727563746f72 2919:S41|66696e644e616d65416e6450617474733a206261646c792d666f726d65642070617273652d74726565 2920:C4,72|00802b352c362d372e382f392b3b4d0036000e0e0e0c00033b2e293b4d0128000e0c000303033b021829352a362a0e0e0e4f021300a0000250292503511e233b652708420e0e0e0e|@2922,I253,I229,@2921| 2921:C17,472|00802b352c362d374d00cc012a2d120700040003006b0403002a2a4d01b9010e0e0c00035029362a375773293c4d02a7010c00033b56a1293b4d039b010c00030402002a220d2b0e0e4f048b01f000045029352a3656f42a3b4d057b010c000303064d06720102412a36293b4d0568010e0c000303062b352964022c2b3b2a3b4d0554010e0c000303032902132a352b362a2c692a2a2505250526031e1e3b66654d0733010c0002642a3b2b4d0828010e0c0004501212000200f6ff121300030004002923064d090e012a2d22106b12160003000400292308121800030004002939121a000300040029230c121c0003000400293a121e000300040029230a1220000200020029361222000200030029361224000300040029230b4d0ab9002a2d306b122700030004002937122900030004002938122b00030004002935122d0003000400292309122f00030004002936123100030004002923072f2c220c34221d221a2223302223220d221d22172223680d12340003000200223222332c22342d22300e160b004e003b00040000071236000100faff293b2c4d083a000e0e0e0c000450123700040003004d0c28001239000400030022386a4d0d1a002a22372d6b222b2e4d0e0e002c4d0f0900223f0e0e7b063c0005|@2924,@2925,@1924,I106,I253,@2928,I229,@992,@1080,I255,@2941,@2942,@2642,@2943,@2923,@2228,@2225| 2922:S69|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737346756e4465636c61726174696f6e28332970726f6365737346756e283129 2923:C4,40|00802b352c362d375639564856574d0016002f4d01110030303030304d02080022100e7b0a090009|@2703,@2702,@860,@2247| 2924:S85|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737346756e4465636c61726174696f6e28332970726f6365737346756e28312970726f63657373436c61757365283129 2925:C4,40|00805609561856272e4d001b004d0117000c00032c3c2d2d2d4d020b00340e7b070700060e0e0e0e|@2927,@2926,@353,@2657| 2926:S39|2068617320616c7265616479206265656e20626f756e6420696e207468697320636c617573652e 2927:S94|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737346756e4465636c61726174696f6e28332970726f6365737346756e28312970726f63657373436c617573652831296d657373466e283129 2928:C29,568|00822c354d0030024d012c020e0c0003037d2c362d37040200302b2b0e4f0217025100045029352a3656524d0309022a12090005000300220c120b0004000400680512080005000300302b2b2e4d04e7010c0005120a000500030056a256b44d05d501120e00050003002b6a4d06c8012a2d2f6b33220e4d07bd012c4d08b8010e0c00052211220c453446270f06cd2c353c4d01a2010e0e0e0c000303732c362d372f3c4d0990010e0c00030402002a2d2b0e0e0e4f027f016100045029352a361207000100f9ff1208000100f6ff5682293b3b2d2f220c0e4f0a5b01e40007120b000500030056b256c44d0b4901120f00050003002b6a322e2e2e2d4d0c37010c00062e336922122b452a46271006d12c354d0d21014d011d010e0e0c000303cf2c362d371203000200f9ff4d0e07010c00022b2a4d0ffe000e0e0e0c000303043b50024412040005000300564456524d10e3002f4d11de000202d4000e0e0e0c0003294d12cf004d11cb000c0003292f4d11c2000e0e0e0c00032e3c2f2f2d4d13b3000c00062607303b4d01a8000e0c000303043b50022812040005000300564456524d148f004d158b004d1187000c00032c3c2d2d2d4d137b000c000626051204000200f9ff2b3b2b4d1668000e0c0004501205000200f9ff4d17580002024e000e0c0002302a453b46270502412c354d1841004d013d000e0e0c0003030b2b4d1931000802003b02251201000500030056122a3c302c4d1a1a004d1316000e0e0e0c00062e4d1b0b000802003b66440e0e0e0e0e|@2930,-3,I229,@2928,@2931,@2516,@2933,@2934,@2228,@2225,I107,@2733,@2935,@2697,-8,@1827,I24,@2936,@353,@2937,@2657,@2938,@2939,I255,@2338,-5,@2929,@2940,@2929| 2929:O2|@992,0 2930:S98|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737346756e4465636c61726174696f6e28332970726f6365737346756e28312970726f63657373436c61757365283129646f5061747465726e73283329 2931:C6,56|0080560a292308562a29230c5649565856674d0022002a2d2d6b33302f4d0117004d0213004d030f002f4d040a0022110e0e0e7b090b0008|@2849,@2932,@2508,@2504,@1151,@2045| 2932:C2,24|00805609561856272b3c2c2c324d000700330e7b07060006|@2658,@2657| 2933:C6,64|008056085617292309294d0032004d012e000e0e0e0c00032f384d0222002a0e0e0c0002512f354d0315002a0e0c0002512c2a314d040800320e0e7b05070004|@2696,@7196,@623,@1916,@338,@1810| 2934:C4,40|00802b352c362d375639564856574d0016002f4d01110030303030304d02080022100e7b0a090009|@2703,@2702,@860,@2247| 2935:C6,64|008056085617292309294d0032004d012e000e0e0e0c00032f384d0222002a0e0e0c0002512f354d0315002a0e0c0002512c2a314d040800320e0e7b05070004|@2696,@7196,@623,@1916,@338,@1810| 2936:S39|496e20636c617573616c2066756e6374696f6e206f6e6520636c6175736520646566696e657320 2937:S21|20616e6420616e6f7468657220646566696e657320 2938:S39|436c617573616c2066756e6374696f6e20636f6e7461696e7320636c6175736573207769746820 2939:S29|646966666572656e74206e756d62657273206f66207061747465726e73 2940:S43|5374617274206f6620636c617573616c2066756e6374696f6e206973206e6f742061207661726961626c65 2941:C2,64|00802b56190c0002293b4d0032000e0e0e0c000303222c56280c0002293b4d001e000e0e0e0c0003030a2d56372e0e0e7d050002296402012964420e0e0e0e0e|@979,I229| 2942:C2,64|00802b56190c0002293b4d0032000e0e0e0c000303222c56280c0002293b4d001e000e0e0e0c0003030a2d56372e0e0e7d050002296402012964420e0e0e0e0e|@979,I229| 2943:C6,64|008056085617292309294d0032004d012e000e0e0e0c00032f384d0222002a0e0e0c0002512f354d0315002a0e0c0002512c2a314d040800320e0e7b05070004|@2696,@7196,@623,@1916,@338,@1810| 2944:C2,24|00805609561856272b3c2c2c324d000700330e7b07060006|@2658,@2657| 2945:C6,64|008056085617292309294d0032004d012e000e0e0e0c00032f384d0222002a0e0e0c0002512f354d0315002a0e0c0002512c2a314d040800320e0e7b05070004|@2696,@7196,@623,@1916,@338,@1810| 2946:C6,72|00802b3b4d0040000e0c000303033b02352b352c362a35573a29230c5658586957794d0122002a2d2d6b4d021a002e312c4d0313000c0005314f040b00a100022a2a6929270c420e|@445,I229,@2947,@1948,@1949,@2946| 2947:C2,24|00805609561856272b3c2c2c324d000700330e7b07060006|@2658,@2657| 2948:C9,104|00802b4d0061000e0e0c000203033b024f2b3b4d0151000e0e0c00030316404d0245000e0e0c0002294d033b003b3b6b296502042b3729644d042c002d573a56426b2a4d0521000e0e0c00024d0618002b692a2a3b4d070f00320e7b05070004420e0e0e0e0e0e0e|@2950,@2036,I229,@1564,I48,@2951,@2083,@2949,@2081| 2949:C1,16|00802b352c362d3756372e7b05030004|@2964| 2950:S62|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c756573283229636f7079456e7472696573283129 2951:C13,240|00822c4d00e9000e0e0c0002034e2c4d01dd000e0e0c0002561829382b4d02cf000c00023b2a4d03c6000e0e0e0c00036403032b021b2b4d04b5000e0e0c000256472968012e2c2b4d05a4000e0c000466312a69642a2f0e7d0800022c4d068f000c000203522c4d0785000e0e0c000256172a3729353b4d0375000e0e0c0003031629362c352d362e383d2d306a2c2c2b2d6b29270602012b564929332c4d084e000e0e0e0c00045056582937342d692a330e0e7d0c00022c4d0933000c000203262c4d0a29000e0e0c000256172a2a4d0b1c000e0c00035638292309322c692a310e0e7d0a00023b440e0e0e0e0e0e|@2953,@2019,@2018,@2172,I229,@1751,@2952,@2025,@2024,@1975,@2007,@2006,@2030| 2952:O1|@2954 2953:S74|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c756573283229636f7079456e7472696573283129636f7079456e747279283329 2954:C10,96|00822d4d0059000e0e0c00022e4d014f000c00022f4d0247000c0002304d033f000c0002302c4d0436002f2e2e4d052f000c00073b334d0626000e0e0e0c00023b2a0e0e0e4f0717008000022d2a4d080e000e0e0e0c0003502d2709440e0e0e|@2956,@1153,@2106,@2100,@2894,@214,@2238,@2172,@2955,@2429| 2955:C4,48|00802b3b4d0028000e0c000303033b021d2b352c362a0e0e0e4f0113002100022a4f020b003100022a2a69292705420e|@445,I229,@2957,@2955| 2956:S29|56414c55455f4f505328292e6d6b53656c656374656454797065283329 2957:C7,96|00802b352c362d372e384d005200565056646a2a4d0148002b4d0243000c000456672d353b4d0337000c000303212d362a4d042b000c00024d0524000e0c000203092a353d2b2b6a6402012e6402012d30302b2e6b292709420e0e0e0e0e0e0e|@2959,@2960,@2958,@2138,I229,I105,I218| 2958:O1|@2962 2959:S48|56414c55455f4f505328292e6d6b53656c656374656454797065283329636f707941436f6e7374727563746f72283129 2960:C3,40|00802b4d0021000e0e0c000256182a2a4d0114000e0c0003650304560702012b420e0e0e0e0e0e0e|@2961,@1153,@2124| 2961:S63|56414c55455f4f505328292e6d6b53656c656374656454797065283329636f707941436f6e7374727563746f72283129636f707954797065436f6e73283129 2962:C1,8|00802b420e0e0e0e|@2963| 2963:S61|56414c55455f4f505328292e6d6b53656c656374656454797065283329636f707941436f6e7374727563746f72283129636f7079547970283129283129 2964:S74|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c756573283229636f7079456e7472696573283129636f7079456e747279283129 2965:O1|@2966 2966:C2,8|00804d000200420e|@2968,@2967| 2967:O1|@2969 2968:S51|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c756573283229283129 2969:C2,16|00804d000a002c69420e0e0e0e0e0e0e|@2971,@2970| 2970:C1,16|00805607292d692965420e0e0e0e0e0e|@2972| 2971:S54|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c756573283229283129283129 2972:S57|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c756573283229283129283129283129 2973:O1|@2974 2974:C3,24|00812b4d0011000e0e0c00024d0108002e2b6a64430e0e0e|@2976,@2185,@2975| 2975:C2,88|008056082c2a293729644d004a000e0e0e0c000203032a023929363b2a0c000229352a362d353b2a0e0c00022c56a70e0e0c00022c2a0e0e0e0c000264312a0e0e0c000264292b2509250926071e473b270766420e0e0e0e|@2977,I218| 2976:S21|486173685461626c652e68617368466f6c64283229 2977:S32|486173685461626c652e68617368466f6c64283229666f6c6446283129283129 2978:C4,40|00805609561856272e4d001b004d0117000c00032c3c2d2d2d4d020b00340e7b070700060e0e0e0e|@2979,@1906,@353,@2657| 2979:S57|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c7565732832296d657373466e283129 2980:C6,56|0080560a292308562a29230c5649565856674d0022002a2d2d6b33302f4d0117004d0213004d030f002f4d040a0022110e0e0e7b090b0008|@2849,@2981,@2508,@2504,@1151,@2045| 2981:C2,24|00805609561856272b3c2c2c324d000700330e7b07060006|@2658,@2657| 2982:C4,96|00802b352c362d372e385847292e4d004e000e0e0e0c00033b587b0e0e0c00022a2d302c313b4d0136000e0e0e0c000758895799322b2b4d0225000e0e0c000450322c6956b10e0e0e0c00025057aa2938342e692a220f0e7d0f00020e0e0e0e|@2983,@353,@2238,@1059| 2983:S62|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c75657328322970726f6365737354797065283129 2984:C24,696|00834d00b2025619562c57396b0403002a2a4d01a2020e0e0e0c00035029363b3b310e0e0e4f028f0250000233293b4d0385020e0e0c000303033b023629352a362a3656ac56b94d046d022a57e92d12110001000400680557d92d2b2b2e4d0556020e0e0e0c0005502e250826071e413b2707643b220c293b4d033b020c000303033b021829352a362a0e0e0e4f062702b0000250292503511e223b65644d07160256a956bc57c96b0403002a2a4d0106020e0e0e0c00035029352a362b373b2212332a4d08f0010e0c00024d09e8010e0c0002033d2a352b362b4d08d9010e0e0c00024d09d0010e0c000203212b352c362c2b0e160a00be01180000000003502b2a2506250626041e463b6502013b6502013b65334d0b9e013b4d0c99010e0e0c000422134d098e010e0e0e0c00020310121200010004002937642f0c000206d90403003b2a4d0d6d010e0e0c00035029362a374d0e5f01121600010004002c6a121600010004002923064d0f48012a342f6b12190001000400292308121b00010004002939121d000100040029230c121f0001000400293a1221000100040029230a1223000100040029230b12250001000400293812270001000400293512290001000400292309122b00010004002936122d00010004002923072f2c221b3422162213221c30221c220d22162215221c680d1230000100020022354d10b6002a3b4d03b0000e0c0003030329023c2a3529352a362d360202900012370001000100123800010006002d2a342f220c2f0e0e0e1611007e003f00020000072c2a2509250926071e463b2707652234293b4d0362000e0e0e0c000303033b024a29352a362a36293b4d124b000c00032c392a3b4d1340000e0c0003502a4d1436000e0e0e0c00022a3b2b4d1529000e0e0c0004502b3b4d161d000e0e0c0003502d250726061e563b270627214d10070027121f040e0e0e|@2986,@2987,@1924,@2989,I229,@2992,@2516,@2994,@2996,I105,I218,@2998,@4419,@4422,@965,@4447,@2985,@992,@2642,I253,@2567,@2172,I255,@2429| 2985:C2,64|00802b56190c0002293b4d0032000e0e0e0c000303222c56280c0002293b4d001e000e0e0e0c0003030a2d56372e0e0e7d050002296402012964420e0e0e0e0e|@979,I229| 2986:S49|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737341627344617461283429 2987:C4,40|00805609561856272e4d001b004d0117000c00032c3c2d2d2d4d020b00340e7b070700060e0e0e0e|@2988,@1906,@353,@2657| 2988:S58|50415253455f5452454528292e706173733228362961737369676e56616c756573283629617373416273446174612834296d657373466e283129 2989:C4,48|00802b3b4d0028000e0c000303033b021d2b352c362a0e0e0e4f0113002100022a4f020b003100022a2a69292705420e|@445,I229,@2990,@2989| 2990:C6,112|00802b352c362d385837292d4d0060000e0c00033b586b0e0e0c000257682b2e4d014c002d3b2e4d0245000e0e0c00072f3b2b4d0339000e0e0c00045058895799322b2b4d0428000e0c000450322c6956b20e0e0e0c00025057aa2938342e692a0c0002512c270b420e0e0e0e0e0e0e|@2991,@353,@214,@2238,I255,@1059| 2991:S61|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737341627344617461283429656e74657254636f6e283129 2992:C6,56|0080560a292308562a29230c5649565856674d0022002a2d2d6b33302f4d0117004d0213004d030f002f4d040a0022110e0e0e7b090b0008|@2849,@2993,@2508,@2504,@1151,@2045| 2993:C2,24|00805609561856272b3c2c2c324d000700330e7b07060006|@2658,@2657| 2994:C4,88|00802b352c362d385837292d4d0048000e0c00033b586b0e0e0c00022a2d2f2c3b3b4d0132000e0e0e0c000758795789312b2b4d0221000e0e0c000450312c6956a20e0e0e0c000250579a2938332e692a220e0e7d0e0002|@2995,@353,@2238,@1059| 2995:S65|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737341627344617461283429656e7465725769746854797065283129 2996:C4,40|00805609561856272e4d001b004d0117000c00032c3c2d2d2d4d020b00340e7b070700060e0e0e0e|@2988,@2997,@353,@2657| 2997:S52|2068617320616c7265616479206265656e2075736564206173206120636f6e7374727563746f7220696e20746869732074797065 2998:C12,160|00812c352d372e383b2b293b4d0090000e0c000303032a021629362b3c4d017f000c0003292b25042504511e213b6565040200304d0268000e0c00024d0360000e0c000203193c2840324d0452000e0e0e0c00042a4d054700452a46510206293b45314650292c2f2b6a4d0632000e0e0e0c00024d0728002f2a4d0822000e0e0e0c00033b3b2b0e0e4f091300b00002220e2a4d0a090022100e0e0e7e100003|@3000,I229,I106,@1153,@1156,I11,-1,@1160,@3001,@3009,@2999,@2429| 2999:C7,112|00802b293b4d0067000c000303033b023a29352a362a36584c58594d0151002a120900040003002d58aa6805120800040003002d2b2b2e4d0235000e0e0c0005502e250826071e433b2707642c4d031f000c0002294d0417000c00023b2f2b0e0e4f050b005000032704420e0e0e0e0e|@3016,I229,@3017,@2516,@3019,@3077,@3015| 3000:S67|50415253455f5452454528292e706173733228362961737369676e56616c7565732836296173734162734461746128342967656e56616c7565436f6e73747273283229 3001:O1|@3002 3002:C2,16|00804d000a002c69420e0e0e0e0e0e0e|@3004,@3003| 3003:C2,24|00802b352c365627355637364d0008002f0e0e7b06030005|@3006,@3005| 3004:S73|50415253455f5452454528292e706173733228362961737369676e56616c7565732836296173734162734461746128342967656e56616c7565436f6e737472732832296c6571283129 3005:O1|@3007 3006:S76|50415253455f5452454528292e706173733228362961737369676e56616c7565732836296173734162734461746128342967656e56616c7565436f6e737472732832296c6571283129283129 3007:C2,16|00832c2f4d0008002d0e0e0e7e060003|@3008,I27| 3008:S73|50415253455f5452454528292e706173733228362961737369676e56616c7565732836296173734162734461746128342967656e56616c7565436f6e737472732832296c6571283429 3009:O1|@3010 3010:C5,128|00812c3b4d0078000e0c000303033b026b2c36293b4d0067000c000303082d35293b696402552d35292e0e0e0e0c00020402003b2d2b0e0e0e4f014300600003502a352b3629334d0235000e0e0c00032b344d022a000e0e0e0c0003302a69293b4d001b000c000303032b020c3b2c0e0e4f030b00b0000264270964430e0e0e|@3012,I229,@3013,@3009,@3011| 3011:C3,48|00802b3b4d0028000e0c000303091201000100f5ff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1555,I229,@3011| 3012:S17|4d6973632e717569636b536f7274283229 3013:C4,80|00812c3b4d0048000e0c0003030b2b4d013d000802003b02352c352d362a56320e0c00020402002b2a4f0223005100035029352a362c030b2e2b69322a452b466402092e2a69322c452a46642706430e|@3014,I229,@342,@3013| 3014:S17|4c6973742e706172746974696f6e283329 3015:C5,88|00812c4d0051000e0e0c00024d0148000e0c0002033e2c352d362d4d0039000e0e0c00024d0130000e0c000203222d352e362c2b0e4f021f005200032c2b0e0e0e4f0313006100032a2a6929270502013b6502013b430e0e|@4412,I105,I218,@4411,@3015| 3016:S77|50415253455f5452454528292e706173733228362961737369676e56616c7565732836296173734162734461746128342967656e56616c7565436f6e73747273283229646563436f6e73283129 3017:C6,56|0080560a292308562a29230c5649565856674d0022002a2d2d6b33302f4d0117004d0213004d030f002f4d040a0022110e0e0e7b090b0008|@2849,@3018,@2508,@2504,@1151,@2045| 3018:C2,24|00805609561856272b3c2c2c324d000700330e7b07060006|@2658,@2657| 3019:O1|@3020 3020:C5,88|00802b3b4d0050000e0c000303033b02452b352c360402002b352c3629354d0136004d0032000e0e0e0c000303082b3b452b46500210294d021d000e0e0c00022c2a452c46512b2d4d030c000e0c00022a2a69292708420e|@445,I229,-1,@3021,@3019| 3021:O1|@3022 3022:C23,512|00802b4d00f9010e0e0c000203ad2b4d01ed010e0e0c00022935293c4d02e0010e0c000303912a36294d03d3010c00024d04cc010e0c0002034c2936293b4d02be010e0e0e0c0003030e2a352936294d05ad01327d0900023b2b293b4d02a0010e0c000303032a021629362b3c4d068f010c0003292b25042504511e213b656529680165022e3b2a293b4d0272010e0e0e0c000303032a021629362b3c4d065f010c0003292b25042504511e233b6565296801646402013c6506cc2b4d0740010e0c000203112b4d0835010e0e0c00024d092c016406ca2b4d0a24010e0c000207cc2b4d0b19010e0e0c000229352a37294d0c0b010c0002294d0d03010c00024d09fc002a354d02f6000e0e0e0c00034d04ec000e0c000203362a4d0de1000e0e0c00022b4d0ed7000c0002292f4d0fce000e0e0e0c00032b2a3c4d10c1000e0e0c0004664d05b700310e0e7d0800022a4d11ab000c00024d12a4004d11a0000e0c00022a2a4d1396000e0e0e0c00036503033c02842a4d1485000e0e0c0002294d037b00020276000c00024d0470000e0c0002036229352936294d03610002025c000e0e0c00024d04540002024e000e0c0002033e2935293b4d0242000e0e0e0c0003032a2b382d36293b4d0230000e0c000303162a334d1524000e0c00034d051c00220e0e0e7d0e00023c6502013c6402013c6502013c64270502013c42|@3024,@1720,@1722,I229,I105,I218,@3021,I106,@1778,@1780,-1,@1744,@1746,@1748,@2091,@2106,@2133,@2136,@1153,@3025,@2124,@2172,@3023| 3023:O1|@3075 3024:S27|56414c55455f4f505328292e6765745475706c654b696e64283129 3025:O6|@2513,1,0,@3027,@3029,@3026 3026:O2|-1,@7240 3027:O2|@3028,0 3028:O3|3,@7227,79992 3029:O2|-1,@7228 3030:O3|1,@214,@3031 3031:O2|@3032,0 3032:O4|@2513,@992,@3034,@3033 3033:O3|1,@3073,@3072 3034:O2|-1,@3035 3035:O2|5,@7229 3036:O5|0,@3037,@3071,@7230,@2785 3037:O3|@225,@3039,@3038 3038:O2|@477,@3063 3039:O2|@229,@3040 3040:O3|@232,0,@3041 3041:O10|0,@3043,@3048,@3042,0,0,0,0,0,0 3042:O1|@7236 3043:O1|@7231 3044:O5|0,@3046,@467,@7233,@3045 3045:O2|-7,@3047 3046:O2|@457,@7232 3047:O8|@473,@2513,0,0,1,0,0,0 3048:O1|@7234 3049:O5|0,@3046,@2805,@7235,@3050 3050:O2|-7,@3051 3051:O8|@3052,@2513,0,0,1,0,0,0 3052:O4|4,@3054,@3053,0 3053:O2|-3,I11 3054:O2|@473,@3055 3055:O2|@3056,@472 3056:O2|-3,64 3057:O5|0,@3046,@2808,@7237,@3058 3058:O2|-7,@3059 3059:O8|@3060,@2513,0,0,1,0,0,0 3060:O4|4,@3062,@3061,0 3061:O2|-3,I253 3062:O2|@474,@518 3063:O4|@3065,@3067,@3066,@3064 3064:O1|@3070 3065:O3|@3067,@3066,@3064 3066:O1|@3069 3067:O1|@3068 3068:C1,8|00803c420e0e0e0e|@2513| 3069:C2,16|00803c28402d4d0006002e7b05030004|@2513,I11| 3070:C2,16|00802b3b4d0008002d0e0e0e7e030003|@2513,I253| 3071:O2|-3,@3065 3072:O4|-3,@3074,@2513,@7239 3073:O3|3,@7238,79993 3074:O2|@3073,0 3075:C9,96|00812c4d0059000e0e0c0002030e2c4d014d000e0e0c0002296402054d0240001029352a36294d0336000e0e0e0c0002030e294d0429000e0e0c0002296402054d051c0010293529314d0613000c00032d2a3c4d070900340e0e0e7b050a0004|@3076,@1778,@1780,@621,@1744,@1746,@621,@2133,@2136| 3076:S32|545950455f5452454528292e636f6e7374727563746f72526573756c74283229 3077:O1|@3078 3078:C11,264|00802b4d0001010e0e0c00024d01f8000e0c000207d82b352935294d02e9004d03e5000e0e0c00030a02009800380068002a362e36293b4d04cd000e0e0c000303144d05c2002b4d06bd000e0e0c0003293b6964020a2f4d07ad00307d0700026502922a362e36293b4d049b000c000303144d0892002b4d098d000e0e0c0003293b6964020a2f4d077d00307d0700026502622a362e36293b4d046b000c000303144d0562002b4d065d000e0e0c0003293b6964020a2f4d074d00307d0700026502322a362e36293b4d043b000c000303144d0532002b4d062d000e0e0c0003293b6964020e2f4d071d0030020208007d0700026565020c2b4d070b002c0e0e0e800002420e0e0e|@3080,I105,I218,-1,I107,I229,@440,@3081,@4389,@4399,@3079| 3079:O1|@4400 3080:S44|56414c55455f4f505328292e63686f6f7365436f6e7374725265707228312963686f6f736552657072283129 3081:O1|@3082 3082:C10,160|00814d009a002d4d0195000e0e0c0003292d3b3b3c3b3b3b68084d0282002a692f4d037b000c00024d0074002a0c00026429303b3b3c3b3b3b68084d0261002a694d005b00334d0456000e0e0e0c000329333b3b3c3b3b3b68084d0242002a69293b692d2a69312a69402a692a3b4d052e000e0e0e0c00030313294d0621000e0e0c00024d0718002a6964020129293b4d080c000e0c00033b2a22127d130002|@3084,@474,@3085,-7,@3106,@3132,I229,@3098,-3,@3083| 3083:O3|@3141,@3826,@3140 3084:S37|56414c55455f4f505328292e637265617465556e617279436f6e7374727563746f72283229 3085:O1|@3086 3086:C20,528|00812b354d0008024d0104020e0c00030a070016007b0010005c012f004e004800e2004d02e90106d52c3b693f2a4d03de013c6b293b693f2a4d04d3013c6b6606dc2c3b693f2a4d05c5013c6b293b693f2a4d06ba013c6b6606d34d02b10106cf2b36294d07a8010e0c000203032902054d089b01104d0996012a692f3b692a2a693f2a4d0a88013c6b270506df2b36294d077b010c000203032902054d0b6f01104d096a012a692f3528054d0c60010e0c0003030c3b304d0d54010e0c000302212f354d0948014d0c44010e0c0003030c3b304d0d38010e0c000302052806303b6a293b692b2a693f2a4d0a21013c6b270606d12b36294d07140102020b010e0c000203032902054d0e0301104d09fe002a692f3528054d0cf4000202eb000e0c000303143b304d0de4000204db00d9000e0e0e0c000302212f354d09d0004d0ccc000e0c0003030c3b304d0dc0000e0c000302052806303b6a293b692b2a693f2a4d0aa9003c6b2706029e9c002b36294d079a000e0e0e0c000203054d0f8e001029293b4d1086000e0e0e0c0003294d077b000c000203032902054d116f0010294d0769000e0e0c000203032902054d125b00104d0956002a69323528054d0c4c00020243000e0c0003030c3b334d0d3c000e0c0003022132354d0930004d0c2c000e0c0003030c3b334d0d20000e0c000302052806333b6a293b692b2a693f2a4d0a09003c6b2709430e0e0e0e|@3088,-4,I107,@473,@2801,@2798,@2801,@2798,I105,@404,-3,@470,@404,I229,@3087,@404,@407,I253,@404,@404| 3087:O1|@3089 3088:S26|56414c55455f4f505328292e636f6e7374724d61746368283229 3089:C32,888|00812b35404d006f030c000303d52b363b2a293b4d0060030e0c000303032a021629362b3c4d014f030c0003292b25042504511e213b65652e2a4d023a030e0e0e0c0003640341292e2a3b4d0029030e0e0c000303054d031e03102a352b362b3b4d0013030c000303032a02172b3c4d0405030e0e0c00032a2a2505250526031e373b64270402584d05ec02293b4d00e6020e0e0e0c000303033c021f293529354d06d3024d00cf020c0003030c2a36292503511e283b6402013b646403164d07b5024d08b1020e0e0c00024d06a8022a696402044d079f024d099b022a69646406da2b354d068f024d008b020c000307d72b360402002a4d0a7c020e0c000203033c02802a4d0a6e020e0e0e0c000203054d0b6202102a294d0c5b020c0002293e4d0d52020e0e0e0c0003293b4d0e46020e0e0e0c0003664d0f3b020c000203033c02402a4d0a2e020e0e0e0c000203054d102202102a4d111c020e0c00022f4d0a13020c000203032f020b2f4d1206020e0e0e0c00022a2a4d13fa010e0e0e0c00036503614d14ed01293b4d00e7010c000303033c021f293529354d06d7014d00d3010c0003030c2a36292503511e253b6402013b6464031e0202b1014d15b5014d08b101020257000e0e0c00024d06a4012a696402044d159b012a4d099601452a465102362a4d0a8b010c000203054d168201102a2f4d0a7b010c000203032f02054d176f01102a2a4d1868010e0c00032c4d065f01452a462604296506cd2b3528054d004e010e0e0e0c000307d72b3629354d193e014d003a010e0e0e0c0003030829362939296502044d1a26012935404d001f010c000303ce2e2a4d1b14010e0c000329354d1c0a014d0006010e0e0e0c0003033b29362a372b382c392c2c2c2c6b30354d19eb004d00e7000c0003030830362936296502044d1dd6002a3b2e6a2a0e0e0c00026428052a6927060274293528064d00bb000c0003036629362a372a354d1cac004d00a8000e0c0003034e2a362b372c382d392c2c2c2c6b32354d198f004d008b0002027f000c0003030832362936296502044d1e76002a3b2e6a2a020260000e0e0c00026428052a69302a4d1b5d0022100e0e0e7e1000032b6502012964023c2a354d1946004d0042000e0e0e0c000303082a362937296502162a353c4d002b000c000303062a37296402042a3629642f2a4d1b1600300e7e07000365020528062c2e6a430e0e0e0e0e0e0e|@3091,I229,I106,I234,@61,I107,@3092,-3,@3097,@3098,-10,I105,@407,I17,I243,I251,I218,@407,I15,I152,I248,@3092,@3097,@407,@404,I253,-1,@440,@3087,-5,@3103,@3090| 3090:O1|@3105 3091:S30|434f44455452454528292e66696e64456e747279496e426c6f636b283229 3092:O2|@3094,@3093 3093:O2|@3095,@518 3094:O2|-3,100 3095:O2|-3,@3096 3096:S4|42696e64 3097:O2|10,@3092 3098:O1|@3099 3099:C12,240|00802b354d00e8004d01e4000e0c000303062b36296402d72b35404d01d1000e0e0c000303c42b36293b4d01c2000e0e0e0c000303033b02ae3b2a293b4d01af000c000303032a021629362b3c4d029f000c0003292b25042504511e203b6565294d038b000c000203032902054d047f00102928403b4d0576000e0e0e0c00043b2d293b4d0168000e0c000303043b50024629352a362c4d0355000e0e0c000203032c02054d064700102b4d0741000e0e0c00022f2b2b4d0835000e0e0c0004502e3c4d0229000e0e0c0003292d2507250726051e52260551294d0912000e0e0e0c00025029666402054d0a02001042|@3101,-3,I229,I106,I105,@404,I11,@404,@3098,I255,I47,@3100| 3100:O3|@7129,@237,@3102 3101:S36|434f44455452454528292e6d616b65436f6e737456616c2831296d616b6556616c283129 3102:S32|6d616b6556616c202d206e6f7420636f6e7374616e74206f72207265636f7264 3103:O1|@3104 3104:C2,8|00804d000200100e|@449,@448| 3105:C2,8|00804d000200100e|@449,@448| 3106:O1|@3107 3107:C9,96|00802b354d0058004d0154000e0c00030a070016002800410010001c001000220033004d023900022f4d03330002294d042d0002234d052700021d2b364d061f002a696402122b362c374d0712002b2b6a6502044d030800420e0e0e0e0e0e0e|@3109,-4,I107,@3110,@3115,@3118,@3121,@3124,@3108| 3108:C3,32|0080560856174d0016002b2b4d0110000e0c00042e3b693f2a2c3c6b2704420e|@3127,I48,@3126| 3109:S26|56414c55455f4f505328292e636f6e7374724170706c79283129 3110:O1|@3111 3111:C2,8|00804d000200100e|@3113,@3112| 3112:O3|@7129,@237,@3114 3113:S29|56414c55455f4f505328292e636f6e7374724170706c79283129283129 3114:S25|636f6e7374616e742063616e2774206265206170706c696564 3115:O1|@3116 3116:C1,8|00802b420e0e0e0e|@3117| 3117:S32|56414c55455f4f505328292e6964656e746974794170706c79436f6465283129 3118:O1|@3119 3119:C4,80|00802b3b69402a692a293b4d0041000e0e0c000303033c021f293529354d012f004d002b000c0003030c2a36292503511e273b6402013b64640312294d0210000e0c00024d0108002a69640201296542|@3120,I229,-3,@3098| 3120:S27|56414c55455f4f505328292e626f784170706c79436f6465283129 3121:O1|@3122 3122:C4,32|00802b3b694d0017002a694d0111002a693f2a4d0209003b6b66420e0e0e0e0e|@3123,@3056,@473,@3053| 3123:S27|56414c55455f4f505328292e7265664170706c79436f6465283129 3124:C6,112|00805607294d0067000c000203032902054d015b00104d0256002a692e3b692a2a69402a692a293b4d0344000e0c000303033c021f293529354d0233004d032f000c0003030c2a36292503511e263b6402013b64640312294d0414000e0c00024d020c002a69640201292706420e0e0e|@3125,I105,@404,-3,I229,@3098| 3125:S33|56414c55455f4f505328292e746167426f784170706c79436f6465283129283129 3126:O1|@3128 3127:S38|56414c55455f4f505328292e7461675475706c654170706c79436f6465283129283129283129 3128:C8,136|00822b4d0081000e0e0c000203032b02054d017300104d026e002a693b3b0e0e0e4f0363003000022b2a69402a692a293b4d0453000c000303033c021f293529354d0243004d043f000c0003030c2a36292503511e253b6402013b64640312294d0524000e0c00024d021c002a696402012929220c3b3b3c3b3b3b68084d0607002a692708440e0e|@3130,I105,@404,-3,@3129,I229,@3098,-7| 3129:C5,56|008056082c2a4d002e000e0e0e0c000364032028064d011f002d6a2c3c4d0217000c00030e4f030f001100022a2a69296602013b420e0e0e|@3131,I234,@474,I106,@3129| 3130:S27|56414c55455f4f505328292e7461675475706c65436f6465283329 3131:S39|56414c55455f4f505328292e7461675475706c65436f64652833296765744669656c6473283129 3132:O1|@3133 3133:C10,216|00812b354d00d0004d01cc000e0c00030a070016006d00bd001000190010005c00b0004d02b10002a82c02a52c3528054d03a4000e0c0003030e3b2d4d0498002d0e0e0e7e0400032c354d058a004d0386000e0e0e0c0003030e3b2d4d0478002d0e0e0e7e04000328062d3b6a02622c4d066400693f2a4d075d003b6b6402512c3528054d0350000e0c0003030e3c2d4d0444002d0e0e0e7e0400032c354d0536004d0332000e0e0e0c0003030e3c2d4d0424002d0e0e0e7e04000328062d3c6a020e2b372d2a4d080d002e7e0500032c430e0e0e0e0e0e|@3135,-4,I107,@510,I229,@3087,-3,@518,@3061,@3134| 3134:O1|@3136 3135:S29|56414c55455f4f505328292e636f6e7374724465737472756374283229 3136:C7,120|00813b3c0e4f006f00100002402a692a293b4d0162000e0e0e0c000303033c021f293529354d024f004d014b000c0003030c2a36292503511e283b6402013b64640312294d0330000e0c00024d0228002a6964020129294d041d003b3b3c3b3b3b68084d0511002a69323b693f2a2c3c6b2707430e0e0e0e|@3138,@3137,I229,-3,@3098,I48,-7| 3137:C5,56|008056072c2a4d002e000e0e0e0c000364032028064d011f002d6a2c3c4d0217000c00030e4f030f001100022a2a69296602013b420e0e0e|@3139,I232,@474,I106,@3137| 3138:S38|56414c55455f4f505328292e7461676765645475706c654465737472756374436f6465283229 3139:S50|56414c55455f4f505328292e7461676765645475706c654465737472756374436f64652832296765744669656c6473283129 3140:O3|@4033,@4032,@3827 3141:C37,888|00812b4d0071034d016d030e0e0c00032c4d0263034d015f030c00032d4d0357034d0153030c00032e4d044b034d0147030c00032b03094d053d03302b6a02064d0634033069040200280b28403b4d0726030e0e0e0c0004293b404d0819030e0e0c0004504d090f032a693c28402b4d0705030e0e0c00042c2a453b46502c352d362e040200280b28403b4d07e9020e0e0c0004293b404d08dd020e0e0c0004504d09d3022a693c28402b4d07c9020e0e0c00042c2a453b46502c352d362e2216354d0ab2024d0bae020e0e0e0c000303072216372964020222164d0c9902322c6a4d0d92022211121800010001002214221868054d0e7f022d694d0f7902220c694d1072022d694d116c0230693c28403c4d0762020e0e0e0c0004302e2e2e2e3b2f3b220d3b3b2223122800010002000c000d221222124d123c020e0c00035034344d1231020e0e0c00035029354d0925024d0b21020e0e0c00030308293629372965021629353c4d0b0b020c00030306293729640204293629642a354d09f6014d0bf2010e0e0e0c000303082a362939296502044d13de012b354d09d8014d0bd4010e0c000303082b362935296502132b353c4d0bbf010c000303062b36296402013b2a354d14ad014d0ba9010e0e0c000303152a36293a294d099901694d1594010e0c000265020d4d1689012b354d0b83010c00032903932c3b69293b4d0b74010e0c000303032b02103b2c0e0e161700620124000000000264644d1856010e0e0e0c000229354d194a014d0b46010e0e0e0c000303033c02013b03084d1a34012a69024322200320040700284d221f2b4d1b20010e0c000450292b2a4d1c14010e0c0003260302023b50221c2a122400010001000e0c0003221d0e0e0e0c00024d1df0002a69646406cc2a3b4d0be4000e0c000303084d1eda002e6902d22a4d1fd1000e0e0c00023c2a4d20c6000e0e0e0c00032e2a69402a692a293b4d0bb3000c000303033c021f293529354d19a3004d0b9f000c0003030c2a36292503511e253b6402013b64640312294d2184000e0c00024d197c002a6964020129293b69293b4d0b6d000e0e0c000303033002103b310e0e1622005a002900000000026428092a692227031f040700284d22262b4d1b3f000c000450292b2a4d1c34000e0c0003260302023b5022232a122b0001000100020218000e0c000322240e0e0e0c00024d230c00220c220f2c6b27092720430e|@3143,@7182,@623,@7241,@7242,@7180,@3156,@3767,I11,I255,-1,-4,I229,@3768,@3770,@3783,@457,@3787,@3789,@3791,@440,-7,@3794,-2,@3800,@3801,-3,@3804,@280,@339,@3806,@3807,@3808,@3812,@3098,@3821,@3142| 3142:C13,200|00803b56190c0002294d00bb000c000203054d01b20010294d00ac000e0c000203054d02a20010294d039c002a692a3b4d0494000e0c00034d058c002a69565829354d0682004d077e000e0e0e0c0003030829362936296502044d086a004d0966002a2f6a568829354d065b004d0757000c00030308293629382965020e3c28403b4d0a42000e0e0e0c000456a73b2d312d2d68050402002b354d0b2a004d0726000e0e0e0c00030308293b453246500209294d061100452b46502928052a69270e420e0e0e0e0e|@3805,I105,@3823,@407,@477,I253,-3,-1,I229,@3822,@225,I11,-2| 3143:S21|434f44455452454528292e67656e436f6465283229 3144:O2|@3149,@7169 3145:O2|@3146,@7169 3146:C2,32|00802b3556174d0016000e0e0e0c000303033c0202020202013b420e0e0e0e0e|@617,I251| 3147:O2|@3148,@7169 3148:C1,16|008056072928452e6a64420e0e0e0e0e|@617| 3149:C3,40|00802b3556174d001e000e0e0e0c000303062b3729640202020202054d01080010420e0e0e0e0e0e|@617,I251,@621| 3150:O2|@3155,@7164 3151:O2|@3152,@7164 3152:C2,32|00802b3556174d0016000e0e0e0c000303033c0202020202013b420e0e0e0e0e|@617,I251| 3153:O2|@3154,@7164 3154:C1,16|008056072928452e6a64420e0e0e0e0e|@617| 3155:C3,40|00802b3556174d001e000e0e0e0c000303062b3729640202020202054d01080010420e0e0e0e0e0e|@617,I251,@621| 3156:C4,48|00805608040700284d2b2b4d0021000e0e0c000450292e2a4d0114000e0c00035056372f2a4d020700310e0e7e070003|@3158,@280,@339,@3157| 3157:O2|@3160,@3159 3158:S40|434f44455452454528292e67656e436f6465283229636f646547656e416e645072696e742d283129 3159:O2|@3182,@3181 3160:C9,104|00812c354d0060004d015c000e0c000303302c3629363b2a2f4d024b000c00042b354d0342002b692d392b2d2c2c220c56b70e0e0e0c00064d042c002a69270702253b4d0521002d4d021c000e0c00044d0614002e2b2b3b3156770e0e0c00064d0704002a696643|@3162,-7,I229,@3163,@3172,@3174,@3176,@3177,@3161| 3161:C2,16|00805607293b69644d0004002c800002|@3175,I204| 3162:S21|494e5447434f444528292e67656e636f6465283229 3163:O1|@3164 3164:C6,224|0082280828413b4d00d5000e0e0c00043b2a693c28402b4d00c5000e0e0c00043c28403b4d00b8000e0c00043c28403b4d00ac000e0c00043c28403b4d00a0000e0c00043c28403b4d0094000e0c00043c28403b4d0088000e0c00043c28403b4d007c000e0c00043c28404d0171004d006d000e0e0c00043c28403b4d0060000e0c00043c28403b4d0054000e0c00043c28403b4d0048000e0c0004220f4d023e004d033a000e0e0e0c000322104d042e004d032a000e0e0e0c00033431220e220d22163422193333220d22122214220c2212220f680f292710440e0e0e0e0e|@3165,I11,536870911,@7243,@623,@7180| 3165:S27|494e54434f4445434f4e5328292e636f6465437265617465283329 3166:O2|@3171,@7168 3167:O2|@3168,@7168 3168:C2,32|00802b3556174d0016000e0e0e0c000303033c0202020202013b420e0e0e0e0e|@617,I251| 3169:O2|@3170,@7168 3170:C1,16|008056072928452e6a64420e0e0e0e0e|@617| 3171:C3,40|00802b3556174d001e000e0e0e0c000303062b3729640202020202054d01080010420e0e0e0e0e0e|@617,I251,@621| 3172:C2,16|008056074d0008002a6964420e0e0e0e|@3173,-1| 3173:S35|494e5447434f444528292e67656e636f64652832296c6f61645265634c696e6b283129 3174:C1,8|00805607420e0e0e|@3175| 3175:S24|494e5447434f444528292e67656e636f6465283229283129 3176:S11|3c746f70206c6576656c3e 3177:O1|@3178 3178:C2,8|00804d000200100e|@3173,@3179| 3179:O3|@7129,@237,@3180 3180:S17|746f70206c6576656c2072656163686564 3181:O4|@3426,@3461,@3487,@3425 3182:C22,464|0084040200280628404d00c3014d01bf010c0004293b28054d02b4010e0c0004504d03ab012a693c28402b4d01a1010e0e0c00042c2a454d00950146502c3c28403c4d018a010e0e0e0c00043c28403b4d017c010e0c00044d0474012b220e6a4d056c012a2e2e22112211680621074d065d014521054d0756014521074d084f0145210e4d0948014521054d0a41014521094d0b3a014521054d0c33014521054d0d2c01452922174634472e48220c496c502a34462217472e48220c496c502b220c462217473348220d4922164a2e4b344c221524086c502c34462217472e48220c496c502d220c4622174734482c49304a220d4b22144c3224082f24092d240a31240b2a240c2b240d6c502e220c462217472212482214492e4a334b6c502f221246221447220d482216496c50303046220d472214482f49220c4a2e4b6c502214287e4d0e88000e0c000303033b02054d0f7b0010287e22164d1072000e0e0e0c00033b22194d1165000e0e0c00032a3c4d105a000e0e0e0c000329221b4d114d000e0e0c0003221c4d0342003b4d123d003b220e0e0e0e0c000622103b4d132d000e0e0c000303033b0213280d281f28413b3e221f22224d1413000c0008221d121a0001000100221b0e7d1f0002|@3184,@992,I11,I255,-1,@3185,@3262,@3285,@3296,@3309,@3335,@3378,@3380,@3394,@3413,I234,@3421,I106,@3197,@3326,I253,@3183| 3183:O1|@3423 3184:S21|494e5447434f444528292e636f646567656e283529 3185:C7,144|00812b3b4d0088000e0c000303215607293b4d017a000e0e0e0c000356282a2f312c4d026a000e0e0e0c000566022f5607293b4d0159000e0e0c0003292f4d034e000e0e0e0c000356382813282228293b280b2f2f4d0437000c0008270456175627293b4d0128000e0c0003293c4d031e000e0e0e0c00032c3b2b4d0511000e0e0c0004503b2705430e0e0e0e0e0e0e|@3187,I233,I253,@3186,I106,@3183,I255| 3186:O1|@3188 3187:S38|494e5447434f444528292e636f646567656e28352970757368537461636b56616c7565283229 3188:C11,296|00832e3b4d0020010e0c000303033c020b2d3b4d0011010e0e0c000303054d010601102e28104d00fe000e0e0e0c0003032e2d3e4d00f0000e0c0003031f4d02e6002d4d00e1000e0e0c0003030c2c28094d00d3000c000302013b02013b02013b037928562e4d03be000e0e0e0c0003293c4d04b2000e0e0e0c00032d3b3c4d05a5000e0e0c00042e4d069b000c00022b304d0792000e0e0e0c0003333c4d0486000e0e0e0c00032928104d0879000e0e0c000329344d036e000e0e0e0c00032928064d0361000e0e0c000329220c4d075500220d0e0e0e7e0f00032b3b28054d0544000e0c00042c4d063b000c000228122e4d0731000e0e0c0003313d304d0925000e0e0c0004313d314d0919000e0e0c0004313d324d090d00330e0e0e7b050b00040e0e0e0e|@3190,I232,@3191,-6,I106,I107,@3193,@3233,@3197,I108,@3189| 3189:O1|@3260 3190:S28|494e54434f4445434f4e5328292e67656e4e6f6e4c6f63616c283429 3191:O3|@7129,@237,@3192 3192:S31|67656e4e6f6e4c6f63616c3a20696e76616c696420706172616d6574657273 3193:O1|@3194 3194:C14,344|008228dc2c4d004f010c00033b2f35293b4d0143010c000331230d293b4d0137010c00032b2a4d002e010e0e0e0c000329304d0222010e0e0e0c0003270503033b06da2f230a293b4d010c010e0c000331230a293b3b4d03fe000e0e0e0c0004503103033b023b3d334d04eb000c00033b344d04e2000e0e0e0c00033435293b4d01d4000e0c0003294d05cb004d06c7000c0003220e2a4d07bd000e0e0c0003270533230d293b4d08ad004d03a9000e0e0c000450343a220c3a293b4d0198000e0c0003644f098f008000022a3b2b4d0385000e0e0c0004502c3b4d0a79000e0e0c000303033b0253220d4d0b69000e0e0c0002220e35293b4d015b000c00032f293b4d0a51000e0e0c000303033b022929352a362a3b4d013d00020231000e0e0c0003292e22164d0c2c000e0c00042b250526041e343b27042704220e230a293b324d0311000e0e0c0004503b270965440e0e0e0e0e0e|@3196,I107,I253,I232,I255,@3197,-1,I106,@3220,536870911,@3223,I229,@3233,@3195| 3195:O1|@3237 3196:S32|494e54434f4445434f4e5328292e636865636b4272616e63684c697374283329 3197:O1|@3198 3198:C9,128|00812b35293b4d0076000e0e0e0c00032d372f3b4d0168000e0c000303101b0001304d025a000e0e0e0c000302012f294d034c000e0c0002030329020b294d043e000e0e0e0c00022928ff4d0531000e0e0c00032c2e2b4d0625000e0e0c000432352f3c4d0218000e0c00032a3b2b4d070d000e0e0c0004503b2709430e0e0e|@3200,I253,I234,I106,I105,I152,I243,@3199,I255| 3199:O1|@3201 3200:S24|494e54434f4445434f4e5328292e67656e42797465283229 3201:C31,432|00822d3b4d00a8010e0c00032935294d019d014d0299010e0e0c000303054d038e01102a36294d0486010e0e0e0c0002293b4d057a010e0e0e0c000303104d066e012a4d0769010e0e0c00030201293f2a4d085b010c0003323b4d0552010e0e0e0c0003032d324d0145014d0941010e0e0c0003294d0a3701694d0b32012a69654d0c2b010c00024d0d24014d0e20012b6a10322a4d0517010c00030322324d0f0d010e0e0c000203033202054d10ff00102d2a344d11f700220c7b050c00043b2e4d12ea000e0e0e0c00034d13e0000e0c000203054d14d600103e2b4d08cf000c0003333b4d15c6000e0e0e0c0003293c4d02ba000e0e0e0c0003030334020b343e4d16a9000e0e0c0003293f4d179e000e0e0e0c0003293c4d0792000e0e0e0c00032d2a4d1886000e0e0e0c000303032d020129294d0f75000e0e0c000203032902054d19670010293c3b4d1a5f000c00043b2a693c28402b4d1a51000e0e0c000422142a220c3b4d1b42000e0e0e0c00055022134d0f35000e0e0c00020304221302054d1c2600102c2a22154d111d000e0e0c00045022153b2d4d1d0f000c0004503b2711440e0e0e0e0e0e0e|@3203,I253,-1,I229,@3204,I15,I234,@190,I106,I108,@364,@3206,@3208,@378,@7129,@237,I105,@404,I254,I251,I218,@3209,I231,I107,I109,I233,@404,I11,@3202,@404,I255| 3202:O1|@3211 3203:S19|434f44455f5345472e63736567536574283329 3204:O3|@7129,@237,@3205 3205:S42|637365675365743a2063616e2774206368616e6765206c6f636b656420636f646520736567656d656e74 3206:O2|@3207,0 3207:S25|206f7574206f662072616e676520302e2e696e66696e697479 3208:S15|637365675365743a20496e64657820 3209:O3|@7129,@237,@3210 3210:S34|637365675365743a2063616e277420657874656e6420636f6465207365676d656e74 3211:C20,408|00832e3b4d0090010e0c00032935293b4d0184010e0c000307d12a36303b4d0076010e0e0e0c00032935293b4d0168010e0c000307d42a362c4d025b010c0002293b4d0352010e0e0e0c000303104d0446012a4d0541010e0e0c00030201292b4d0234010e0c0002293b4d032a010e0e0e0c000303104d041e012a4d0519010e0e0c00030201293f2c4d060b010c00033f2b4d0602010e0e0e0c00033f220f4d06f5000e0e0c00033b2b22124d07e8000e0c000322123b4d03dd000e0e0c000303033c020b2d22134d03cc000e0c0003034922124d08c0004d09bc000e0c00032e4d08b3004d09af000202a3000c0003293b694d0aa1002a692c2a694d0b98002a6927054d0c900002027c000e0c00024d0d84004d0e80002b6a102b3b4d0377000c000303033c020b292c4d0369000e0e0c000303412b4d085d004d0959000e0e0c00032a4d084f004d094b000c0003293b694d0f41002a692c2a694d1038002a6927054d0c30000e0c00024d0d28004d0e24002b6a102b3b1611001a00120000000003270a02054d120c00106602054d12040010651f04|@3213,I253,I229,I15,I234,@190,I106,I108,I107,-1,@364,@3214,@3215,@378,@7129,@237,@3214,@3216,@3217,@3212| 3212:O3|@7129,@237,@3219 3213:S23|434f44455f5345472e63736567436f7079536567283429 3214:S17|206f7574206f662072616e676520302e2e 3215:S25|63736567436f70795365673a2042797465206c656e67746820 3216:S25|63736567436f70795365673a2042797465206f666673657420 3217:C9,128|008156082c2a4d0076000e0e0e0c00036403033b026856022c4d0163000c000203032c02054d025700102a2a4d0350000e0c00031204000100f9ff304d0140000e0c000203033002054d043300102a2a2d4d052b000c000450303c4d0621000e0e0c0003323c4d0616000e0e0e0c0003292b0e0e0e4f0707008100032707430e|@3218,I113,I105,@404,I252,@404,I254,I106,@3217| 3218:S35|434f44455f5345472e63736567436f7079536567283429636f70794279746573283229 3219:S49|63736567436f70795365673a2063616e206f6e6c7920636f7079206265747765656e206279746520736567656d656e7473 3220:O1|@3221 3221:C6,104|00814d0062002c693c28402b4d0158000e0c00042e230d293b4d024b000c00032f2a4d0342000e0e0e0c00036503122e230d293b304d042f000c0004503b6402013b2f3a303a293b4d021c000e0c00032d2a692c3b2b4d040e000e0e0e0c0004502e3b692707430e|@3222,-1,I11,I253,I234,I255| 3222:S26|494e54434f4445434f4e5328292e6d616b654c6162656c283229 3223:C18,544|00802b3b4d0018020e0c000303033b06d82b352c36290e0e0e4f0103022100022b3b4d02fa010e0e0e0c000329353b4d00ed010e0e0c000303032a06d0293656592935293b4d02d7010c000356842a2e4d03cc010e0c00032a2a4d04c2010e0e0e0c00036507d52c3c4d05b3010c00032a2a4d03aa010e0e0e0c00033b2a4d069e010e0e0e0c00030310291b00014d048e010e0e0e0c000302013b03033b02054d077c011056b9293729324d0871010e0e0c0003293b4d0066010e0e0e0c000303033b02054d09570110334d0a51014d054d010e0e0c0003121100010003002937292c4d083901020234010e0e0c0003293f4d052a010e0e0e0c00031215000100030029372b3b4d04150102020e010e0e0c000303101b00012c4d0502010e0e0e0c000302012b294d0bf4000e0c0002030329020f294d0ce6000202a1000e0e0e0c00022928ff4d0dd5000e0e0c00032c332b4d0ec9000e0e0c0004121b0001000300293722123b4d04b4000e0c000303101b000122134d05a5000e0e0c000302022212294d0b97000c0002030329020b294d0c8a000e0e0e0c00022928ff4d0d7d000e0e0c00032c221b2b4d0e70000e0c0004122100010003003b3d2b4d0f5e000e0e0e0c00043b221b6922223b2b4d104c000e0c0004502220271b023c568929230d293b4d0236000e0e0e0c00032f2a4d042a000e0e0e0c0003660316568929230d293b304d1015000e0e0c0004503b6502013b31306929652704270442|@3225,I229,@3223,I253,I107,I234,I106,I232,@3226,@3228,@3224,-1,I105,I152,I243,@3199,@3189,I255| 3224:O3|@7129,@237,@3232 3225:S48|494e54434f4445434f4e5328292e636865636b4272616e63684c697374283329636f6e766572744c6162656c73283129 3226:O3|@7129,@237,@3227 3227:S44|636865636b4272616e63684c6973743a206f666673657420746f6f206c6172676520746f20636f6e76657274 3228:O1|@3229 3229:C18,192|00812c3b4d00b8000e0c00032936294d01ad000e0e0c0002293b4d02a2000e0e0e0c000303104d0396002a4d0491000e0e0c00030201293f2a4d0583000c00033b314d067a000e0e0e0c0003030c302a4d026c000e0c000302013b0323304d075e000e0e0e0c000203033002054d084f00102d2a4d094800330e0e0e7e0a0003304d0a3b004d0b37000c00032a4d0a2f004d0b2b000c0003293b694d0c21002a692c2a694d0d18002a6927054d0e10000e0c00024d0f08004d1004002b6a100e|@3231,I253,I15,I234,@190,I106,I108,I232,I105,@404,I252,-1,@364,@3214,@3230,@378,@7129,@237| 3230:S15|637365674765743a20496e64657820 3231:S19|434f44455f5345472e63736567476574283229 3232:S46|636865636b4272616e63684c6973743a20382d626974206f666673657420616c7265616479206669786564207570 3233:O1|@3234 3234:C16,344|00802b230a293b4d004d010e0e0c0003293b4d0142010e0e0e0c00030326294d0235014d0331010e0e0c00034d0428012a4d0523010c00034d061c014d0718012b6a6510293b4d080e010e0e0e0c000303033b06d328ff2a4d09fc000e0c000303312d36293b4d00ee000e0e0e0c0003640304281902022818292f4d0ad9000e0e0c00032b3d314d0bcd000e0e0c00046502aa2d36293b4d00bd000e0e0c000364034c3e2a4d01af000c0003031928272e4d0aa3000c00032a2f4d0a9a000e0e0e0c000364022628642a4d0c8a000e0e0e0c0003293c4d0d7e000e0e0e0c000329304d0a72000e0e0e0c000365024e3d2a4d0163000c0003031928262e4d0a57000c00032a2f4d0a4e000e0e0e0c000364022a28502a4d0c3e000e0e0e0c0003293c4d0d3200020213000e0e0e0c000329304d0a22000e0e0e0c0003652e230a293b3b4d0e11000e0e0c0004503b2704420e0e0e0e0e0e0e|@3236,I253,I234,-1,@364,@3235,@353,@7129,@237,I229,I232,@3197,@3189,I106,I107,I255| 3235:S25|726573657453703a206261642072657365742076616c756520 3236:S24|494e54434f4445434f4e5328292e72657365745370283129 3237:C21,328|00822d354d0040014d013c010e0c000303c22d36293c4d022e010e0e0e0c00032e2a4d0322010e0e0e0c00033b2a4d0416010e0e0e0c00030310291b00014d0506010e0e0e0c000302013b03033b02054d06f400102f37292e4d07eb000c0003293b4d01e2000e0e0e0c000303033b02054d08d300102f334d09cc000e0c000333372f3b4d05c0000e0c000303101b0001304d02b2000e0e0e0c000302012f294d0aa4000e0c0002030329020b294d0b96000e0e0e0c00022928ff4d0c89000e0e0c00032c220c2b4d0d7c0022110e7b051100042d36293d4d026c000e0c00032e2a4d0362000e0e0e0c00034d0e58002a4d0453000c00030310294d0f49004d0545000e0e0c000302013b03033b02054d103400103d2d314d112c000e0c0004293b4d0122000e0e0e0c000303033b02054d121300102c3d30344d130a00220c0e0e0e7b060b0005|@3239,-1,I229,I106,I107,I232,I234,@3240,@3228,@3242,@3244,I105,I152,I243,@3199,-32768,32768,@3249,@3251,@3256,@3238| 3238:O1|@3258 3239:S28|494e54434f4445434f4e5328292e66697875704f6666736574283329 3240:O3|@7129,@237,@3241 3241:S40|66697875704f66667365743a206a756d7020746f6f206661722028382d626974206f666673657429 3242:O3|@7129,@237,@3243 3243:S42|66697875704f66667365743a20382d626974206272616e636820616c7265616479206669786564207570 3244:O1|@3245 3245:C5,64|00813b2c230d293b4d0034004d0130000e0c0004502d3a2e3a293b4d0221000e0e0c0003644f0317003000022a3b2b4d010d000e0e0c0004503b2704430e0e0e|@3247,536870911,I255,I253,@3246| 3246:C7,160|00802b3b4d0098000e0c000303033b028a2b35293b4d0187000c000329353b4d007d000e0e0c0003030d2d36294f026f0031000264026329362e3656482b2a4d035d000e0e0c000364030b290e4f024f004100020243564729230d293b4d013f000c00032d2a4d0436000e0e0e0c0003660316564729230d293b2e4d0521000e0e0c0004503b6502013b2a0e0e4f020f005100022e2a6929666565420e0e0e0e|@3248,I229,I253,@3246,I113,I234,I255| 3247:S28|494e54434f4445434f4e5328292e72656d6f76654c6162656c283229 3248:S42|494e54434f4445434f4e5328292e72656d6f76654c6162656c28322972656d6f7665456e747279283129 3249:O3|@7129,@237,@3250 3250:S41|66697875704f66667365743a206a756d7020746f6f20666172202831362d626974206f666673657429 3251:O1|@3252 3252:C2,24|00822b373b2f2f0e0e4f000b0030000365440e0e0e0e0e0e|@3254,@3253| 3253:C7,96|008156042c4d0057000c00032d3c4d014e000e0e0e0c0003030329023b2d3c4d023d000e0e0c00032d3c4d0332000e0e0e0c00032a2a0e0e0e4f042300410003291b00014d0518000e0c0003292e4d030e00320e7e09000364430e0e0e0e0e0e|@3255,@3228,I229,I107,I106,@3253,I108| 3254:S25|494e54434f4445434f4e5328292e6765744279746573283329 3255:S21|494e54434f4445434f4e5328292e67657442283329 3256:O3|@7129,@237,@3257 3257:S43|66697875704f66667365743a2031362d626974206272616e636820616c7265616479206669786564207570 3258:C13,272|00832e1b00014d0006010e0e0e0c0003293b4d01fa000e0e0e0c000303033c0218293b4d02e9000e0e0c00033c2a4d01de000e0e0e0c000364030329020e291b00014d03ca000e0e0e0c00032d372a3b4d04bc000e0c000303101b00012b4d03ae000e0e0e0c000302012a294d05a0000e0c0002030329020b294d0692000e0e0e0c00022928ff4d0785000e0e0c00032c332b4d0879000e0e0c0004343c4d016e000e0e0e0c000303033b025f220c3b4d025c000e0c0003293c4d0152000e0e0e0c00030304220d020e220d28ff4d093e000e0e0e0c0003291b00014d0a30000e0c0003220e3c4d0925000e0e0c0003220e3c4d0319000e0e0c00032b2b2b22114d0b0b0022127b0612000527071f04|@3259,I110,I229,I231,I106,I234,I105,I152,I243,@3199,I107,I109,@3238| 3259:S25|494e54434f4445434f4e5328292e7075744279746573283429 3260:C9,192|00822d1b00014d00b6000e0e0e0c0003293b4d01aa000e0e0e0c000303033c0218293b4d0299000e0e0c00033c2a4d018e000e0e0e0c000364030329020e291b00014d037a000e0e0e0c0003292e4d046e000e0e0e0c00032f3c4d0162000e0e0e0c000303033b024f303b4d0251000e0e0c0003293c4d0146000e0e0e0c0003030331020b3128ff4d0534000e0c0003291b00014d0628000e0c0003323c4d051e000e0e0e0c00032a2a344d071100220c0e0e7b050c000466440e0e0e0e0e0e|@3261,I110,I229,I231,I106,@3197,I107,I109,@3189| 3261:S25|494e54434f4445434f4e5328292e67656e4279746573283329 3262:C13,216|00802b352c360359293b4d00ca000e0e0e0c00030316294d01bd000e0e0c0002293b56472f0e0e0e7e0500035618292b4d02a4000e0c000329353c4d0399000e0e0c000303162936294d018b000c0002293b5677320e0e0e7e0800034d04780010293c69562b0e0e0e0c000229354d0566004d0662000e0e0e0c00030a01000b0047004d07510010024a2936563a2a2a4d0844000e0c000356595669293b4d0936000e0e0e0c0003293c4d0a2a000e0e0e0c00032c3b2b4d0b1d000e0e0c0004503b2707020e29362a372a2a5667310e7e07000365420e0e|@3264,I234,I111,@460,I229,@3265,-1,I107,@3267,@3263,I253,I106,I255| 3263:O1|@3269 3264:S31|494e5447434f444528292e636f646567656e2835296c6f6361646472283129 3265:O3|@7129,@237,@3266 3266:S26|6c6f63616464723a2062616420737461636b2061646472657373 3267:O3|@7129,@237,@3268 3268:S44|6c6f63616464723a20696c6c6567616c20757365206f66207374617469632d6c696e6b2066756e6374696f6e 3269:C9,184|00812c2c4d00b0000e0c0003291b00014d01a4000e0c0003032d2c3b3f4d0297000c00042d4d038f000c0002284d2f4d0485000e0e0c0003502b2f4d0479000e0e0c000365022e2c3b28054d0269000e0e0c00042d4d035f000c0002284e2f4d0455000e0e0c0003502b3d304d0548000e0c0004652d35293b4d063b000c00033b3d314d0531000e0e0c00043023082b2f69322308293b4d061d000e0e0c00032b2a692d3b2b4d070e000e0e0e0c0004503b270a430e0e0e|@3271,@3270,I234,@3193,@3233,@3197,@3189,I253,I255| 3270:O1|@3272 3271:S26|494e54434f4445434f4e5328292e67656e526563526566283229 3272:C11,224|00812c2307293b4d00d5000e0e0c0003294d01cb000c00024d02c4000e0c00020356294d01b9000e0e0c00024d02b0000e0c000203062935296402054d03a00010293b4d0099000e0e0c000329352a362a3b4d048a000e0e0e0c000303054d057e0010294d0678002a6929344d077000220c0e0e7e0c00032e2309293b4d005f000c000329293b4d0455000e0e0c000303033b022129352a3632230b2b230b2a2a4d083b000c00036503033c0207292503511e2d3b656403033b0213302309302b692a3b2b4d0917000c0004503b653b326929324d070800330e0e0e7e0a0003|@3274,I253,I105,I218,@621,I229,@3275,-1,@3273,I251,I255| 3273:O1|@3277 3274:S26|494e54434f4445434f4e5328292e636f6465436f6e7374283229 3275:O3|@7129,@237,@3276 3276:S28|63736567416464723a206e6f74206120636f6465207365676d656e74 3277:C3,32|00813b2c38293b4d0015000e0e0c00033b2a310e0e4f01070050000466430e0e|@3279,I253,@3278| 3278:C8,176|00822c3b4d00a8000e0c00030375560729230b562729230b293b4d0192000e0e0e0c0003293c4d0286000e0e0e0c00032d3b2b4d0379000e0e0c0004505667293856872938293b4d0165000e0e0c0003220d3b69293b4d0056000e0e0e0c000303032a020c3b2b0e0e4f044300d00002642e3b2b4d0338000e0c0004502211270d022b2c352d362d2b4d0523000c000303032f02182f3c4d0215000e0e0c0003292b300e0e4f0607005100046465440e|@3281,I229,I253,I106,I255,@3282,@3280,@3278| 3279:S30|494e54434f4445434f4e5328292e616464436f6e7374546f566563283229 3280:O1|@3283 3281:S42|494e54434f4445434f4e5328292e616464436f6e7374546f56656328322966696e64436f6e7374283329 3282:C3,48|00802b3b4d0028000e0c000303091201000100f3ff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1555,I229,@3282| 3283:C4,96|00812c354d0058004d0154000e0c000303262c362c354d0046004d0142000e0e0e0c0003030e2c362a2a4d0232002f0e7e0600033b6402262c362c353b4d011f000c000303162c362a230b2a230b2a2a4d020c00310e0e0e7e0800033b64430e|@3284,-1,I229,I251| 3284:S26|494e54434f4445434f4e5328292e73616d65436f6e7374283229 3285:C11,224|00812c3b4d00d8000e0c000303033b02cc2c3529354d01c7004d00c3000c000303b629362a372f362a354d02b2004d00ae000e0e0e0c000303622a362923074d039d000e0e0c00020336293656693c2b2b4d048b000c000456884d0582002b692a322b4d0679000e0e0c000430220e220d0c0003302e56e722100e0e7e1000034d075c002f322d569b3156b868072a3c2b3456aa220c0e7b060a00052a4d053f004d053b00323b569c0c00065658566b293b4d082a000e0e0e0c00033c2a692c312b4d061a000e0e0e0c00042f220d220c220e0e7e0e00034d09040010430e0e|@3287,I229,-4,-7,I218,@3163,-1,@3288,@3293,I253,@3286| 3286:O3|@7129,@237,@3295 3287:S37|494e5447434f444528292e636f646567656e28352967656e4d757475616c44656373283229 3288:O1|@3289 3289:C14,392|00822d35293b4d007e010e0e0e0c000329353b4d0171010e0e0c000303054d02660110293630362a3b4d005b010c0003312a4d0352010e0e0e0c0003640349303b4d0343010c000303033c02182a3b4d0035010e0e0c0003312a4d042a010e0e0e0c00036403054d051d0110303c4d0616010e0e0e0c00032b2a324d070901330e0e0e7b050a00042a3b4d00fa000e0e0e0c0003293e4d08ee000e0e0e0c0003323c4d06e2000e0e0e0c00032a2a4d09d6000e0e0e0c000303032a020129293c4d06c4000e0c0003292840304d0ab8000e0c0004293b2d4d07ad000e0e0c000450303b4d00a1000e0e0c00033b2a4d0696000e0e0e0c00032b3b4d008a000e0e0e0c00032a2a4d097e000e0e0e0c00036503054d05710010313c2c3c2d4d0b67000c0006504d0c5f002b69343b2b4d0756000e0e0e0c000450220f3b4d0348000e0c000303033c02182b3b4d0039000e0e0c000322102a4d042d000e0e0c00036403054d05210010220f3c4d0619000e0e0c00032c2a22114d070c0022120e7b051200040e0e0e0e|@3291,I253,I229,@3290,I234,I231,@61,I106,I255,I108,I233,I11,I195,-1| 3290:O3|103,@382,@3292 3291:S22|5374726574636841727261792e757064617465283329 3292:S39|417474656d707420746f207570646174652061206c6f636b656420737472657463684172726179 3293:C3,56|0080560c561b562a293b4d002a000e0e0e0c00033c2a692d2d2b4d011a000e0e0e0c0004566956782a2a56a7220c0e0e7e0b00030e0e0e0e|@3294,I253,@3288| 3294:S46|494e5447434f444528292e636f646567656e28352967656e4d757475616c44656373283229646f52657374283129 3295:S63|67656e4d757475616c446563733a206d757475616c206465636c61726174696f6e206c69737420636f6e7461696e73206e6f6e2d6465636c61726174696f6e 3296:C3,48|00812c384d0028002d5639564a2d68052e354d011a002b69303956582c322d2d2d56b70e0e0c00063b2707430e0e0e0e|@3298,@3299,@3297| 3297:C1,16|00802b352c3656272d0e0e0e7e030003|@3308| 3298:S33|494e5447434f444528292e636f646567656e28352967656e536c50726f63283229 3299:C9,176|00812c3b4d00a8000e0c0003030956073c2a2e6a640292560a292e4d0191000e0e0c000329352a360369293b4d0280000e0c00030311294d0375000e0e0c00023b2a316a64024a5638292b4d0461000e0e0c000329353c4d0055000e0e0c000303112936294d0347000c00023b2a346a65021d29354d0537004d0033000c0003030929363c2a336a6402054d062100106502152e3c4d0717000c00032a2a696456492f0e7d07000266430e0e0e0e0e0e|@3301,I229,@3302,I234,I111,@460,-1,@3300,I106| 3300:O3|@7129,@237,@3307 3301:S42|494e5447434f444528292e636f646567656e28352967656e536c50726f632832296c6f6164536c283229 3302:O1|@3303 3303:C8,136|00812c4d0081000e0e0c00024d0178000e0c000203692c3529354d026a004d0366000e0e0e0c0003033a29362a372b382c392c2c2c2c6b3236323c4d0349000e0e0c000303032a0217323c4d0439000e0e0c00032a2a4d052e00220c7e0c0003270602182d362d3c4d041c000e0c00032a2a4d051200300e7e0700036402054d06050010430e0e0e|@3305,I105,I218,-5,I229,I107,@3302,@3304| 3304:O3|@7129,@237,@3306 3305:S47|494e5447434f444528292e636f646567656e28352967656e536c50726f6328322966696e64436c6f73757265283229 3306:S24|66696e64436c6f737572653a2062616420436c6f73757265 3307:S28|6c6f6164536c3a206d697373696e672064656356656320656e747279 3308:S42|494e5447434f444528292e636f646567656e28352967656e536c50726f632832296c6f6164536c283129 3309:C19,752|00832e2307293b4d00e5020e0e0c00036403054d01d902102e383b2a4d00d0020e0c00036403722e36561a3b2b2b4d02be020e0e0e0c000431354d03b2022b693339566a2c2e2d2d2d56c90e0e0c000656882a2a4d0498020e0c000356a756b7293b4d058a020e0e0e0c0003293c4d067e020e0e0e0c00032c3b2b4d0771020e0e0c0004502212030b3b221222110e0e7d1400023b270e06da2e36561a3c2b2b4d024c020e0c000431354d0842023339566a2c2e2d2d2d56c90c0006220d383b2a293b4d0029020e0e0c000303032a021629362b3c4d0617020c0003292b25042504511e223b6565293c4d0602020e0e0e0c0003220f07cb56b82811282128523d3f2f2f4d09e8010e0c000856d756e7293b4d05da010e0e0e0c0003293c4d06ce010e0e0e0c00032c3b2b4d07c1010e0e0c00045012120001000200332a4d04ae010e0e0e0c0003121400010002002815282428453b28073b2f4d0992010e0e0e0c000812160001000100293b4d057f01020275010c00033b221b0e0e0c00022a4d0a6b010c0002293b121c00010006000c00033b222038293c0e0e0e160b004e011f0000000003121e0001000200293b3c4d0c3a010e0e0e0c00042a4d0d2f01020259000c0002286c2c4d0e21010e0e0c0003122200010002003c3b2b4d0f0e010e0e0e0c00041224000100010012250001000100293b4d05f4000e0c0003293c4d10ea000e0e0e0c00032c3b2b4d07dd000e0e0c0004503b271c02ca56b82d2a4d04ca000e0e0e0c000356d756e7293b4d05ba000e0e0e0c0003293c4d06ae000e0e0e0c00032c3b2b4d07a1000e0e0c00045022163829293b4d0091000e0e0c000303033b022429352a362a4d117e004d117a00221a3b121b00010005000e0c000650292503511e303b6564121400010002002867286828693d3f220e2f4d094c000e0c00081216000100010012170001000100293b4d0534000e0c0003220d3c4d1029000e0e0c00032a2a4d101e000e0e0e0c00032d3b2b4d0711000e0e0c0004503b270f270b1f040e0e0e0e|@3311,I229,@3312,@3163,@3314,@3316,I253,I106,I255,@3319,@3183,I111,@3325,@3193,@3233,@3197,@3310,I107,-1| 3310:O1|@3332 3311:S31|494e5447434f444528292e636f646567656e28352967656e50726f63283429 3312:O3|@7129,@237,@3313 3313:S28|737461746963206c696e6b206e6f7420616c6c6f7765642068657265 3314:C2,16|008056074d0008002a6964420e0e0e0e|@3315,-1| 3315:S45|494e5447434f444528292e636f646567656e28352967656e50726f632834296c6f61645265634c696e6b283129 3316:O1|@3317 3317:C19,496|00812c4d00e9010e0e0c000203252c4d00dd010e0e0c000203032c02054d01cf0110294d02c9014d03c5010e0e0c00036402013b07d32c4d00b5010e0e0c000203032c02054d04a70110293b4d05a0010e0c000303104d0696012a4d0791010e0e0c000302012929404d0883010c0003031e2d3b3c4d0977010c00042e4d0a6f010c00022840304d0b6501317e080003293f4d0c5a010e0e0e0c0003032a283b2a4d074b010c00032e3b3c4d0941010e0e0c00042f4d0a37010c00022b314d0b2e01320e7e090003291b00014d0520010e0c0003032a2d3b3d4d0913010c00042e4d0a0b010c00022828304d0b01010e0e0c00032c314d0bf600320e7e0900032d3b3e4d09e900020229000e0e0c00042e4d0adb000c0002281b304d0bd1000e0e0c00032c3d324d0dc500330e0e0e7b050900044d0eb8002d69292d4d0fb0000e0c0003291b00014d05a4000e0c0003032d2d3b3f4d0997000c00042e4d0a8f000c0002284d304d0b85000e0e0c0003502b304d0b79000e0e0c000365022e2d3b28054d0969000e0e0c00042e4d0a5f000c0002284e304d0b55000e0e0c0003502b3d314d0d48000e0c0004652e35293b4d103b000c00033b3d324d0d31000e0e0c00043123082b2f69332308293b4d101d000e0e0c00032b2a692d3b2b4d110e000e0e0e0c0004503b270b430e0e0e|@3318,I105,@404,32768,I250,@404,I234,@190,I106,I229,@3193,@3233,@3197,I232,@3189,-1,@3273,I253,I255| 3318:S26|494e54434f4445434f4e5328292e70757368436f6e7374283229 3319:O1|@3320 3320:C2,16|00802b352c364d0006002d0e7e030003|@3322,@3321| 3321:O1|@3323 3322:S40|494e5447434f444528292e636f646567656e28352967656e50726f632834296c6f6164536c283129 3323:C4,56|00810403002d3b4d002d000e0e0c000303172c3c4d0120000e0c00032a3b454d021500462a47510208293b452e462d47502964430e0e0e0e|@3324,I229,I107,-1| 3324:S40|494e5447434f444528292e636f646567656e28352967656e50726f632834296c6f6164536c283229 3325:C10,128|00812c3b4d0078000e0c000303033b026d2c352d362a4d0166004d0162004d025e003b577b0c000657382815282428453b2807342f4d0347000c000857575767293b4d043a000e0e0e0c0003293c4d052e000e0e0e0c00032c3b2b4d0621000e0e0c000450343c4d0715000e0e0c0003312a0e0e0e4f080700b10003270a430e|@3327,I229,-1,@3326,@3183,I253,I107,I255,I106,@3325| 3326:O1|@3328 3327:S43|494e5447434f444528292e636f646567656e28352967656e50726f632834296c6f61644974656d73283229 3328:C2,8|00804d000200100e|@3330,@3329| 3329:O3|@7129,@237,@3331 3330:S35|494e5447434f444528292e636f646567656e2835296d617463684661696c6564283129 3331:S40|636f646567656e3a20756e68616e646c6564207061747465726e2d6d61746368206661696c757265 3332:C11,120|00823b2e4d0070000e0c000303033b02272d4d0162004d025e000e0e0e0c00034d0354002a4d044f000c00034d0548004d0644002b6a65102c230a2d230a293b4d0734000e0c000329324d082a000e0e0e0c00032c3b2b4d091d000e0e0c0004503036293b344d090e000e0e0e0c0004503b2706440e0e0e|@3334,I234,-1,@364,@3333,@353,@7129,@237,I253,I106,I255| 3333:S23|7265736574537461636b3a20626164206f666673657420 3334:S27|494e54434f4445434f4e5328292e7265736574537461636b283329 3335:C46,3152|00845607293b4d00460c0e0e0e0c000331354d013a0c4d02360c0e0e0e0c00030a16006b09f10412034d0471033b0517034d028403c80af4033f00bf07bf030b0937022e0045036f073500e0035908b40a4d03fb0b1006d13b2f0e0e0e0c000206c9313632373c28403b4d04e20b0e0e0e0c00044d05d80b2a567956883056a768062c220c220c2c220c340e0e0c0006220c4d06ba0b4d07b60b0e0e0e0c0003032c56775687293b4d00a40b0e0c0003293c4d029a0b0e0e0e0c00032c3b2b4d088d0b0e0e0c0004503b270402013b5689293b4d00790b0e0e0c00032903033b020f56a83d2a4d09660b0e0e0e0c00036456b7293b4d00570b0c000329220c4d0a4d0b0e0e0c00036503033b02054d0b3e0b1056c9293b3b4d08340b0e0c000450313b4d00290b0204c509c3090c000329293b4d07190b0e0e0c000303033b027329352a36121200010002002b3b4d07fe0a0e0e0e0c000303043b50024d294d0ced0a0e0e0c00022a35293b4d00e00a0e0c00032e293b4d07d50a0e0e0c000303043b50022329352a362a3b4d00c00a0e0c0003292e324d0db50a0e0e0c00042b250526041e30260426042a250426031e7f3b666434221522152215221522140e0c0006121100010002002f3b4d077f0a0c000303033b024f294d0c720a0e0e0e0c00022a35293b4d00640a0e0c000332293b4d07590a0e0e0c000303033b022529352a362a3b4d00450a0e0e0c0003292e324d0d390a0e0e0c00042b250526041e303b270427041213000100030012140001000300293b4d00140a0e0c00036403033202013b2a3b2b4d08020a0e0e0e0c0004503b271206ce3136323733382b2b2b6a293434569a0c0004270406dc3136323729354d0ed6094d07d2090e0e0e0c000303772936292307293b4d07bf090c0003032e2a36567d3c2b2b4d0faf090c0004569c4d06a6092b692a322b4d109d090e0e0c0004302d56eb0e0c0003270602362b4d0687094d068309220c220c340e0e0e0c0006567c5687293b4d006e090e0e0e0c00033c2a692c322b4d105e090e0e0e0c00042705650235294d064e094d064a093333320c0006565c5667293b4d003a090e0e0e0c00033c2a692c302b4d102a090202c6070e0e0e0c000427056506d44d1117091031363237333834392c2c2c2c6b220c3b0202a2074d07fe080e0e0e0c000303033b020729568e0e0c0002270506ca313632372a4d06df084d06db083333320e0c000656582814282328353b2805302f4d12c3080c0008270406d03136293b4d13b40832567f0e0e0c00056406d2313656382a2a4d149f080c000356575667293b4d0092080e0e0e0c0003293c4d1586080e0e0e0c00032c3b2b4d0879080e0e0c0004503b270706d03136323733382b2b2b220d220d220d220d120d0001000a000e0e0e0c00086606d531363b2a0202e5060e0e4f163f084000026506d1313632373b3b2b0e0e0e4f172b086000025677293b4d0020080202bc060e0c00035698294d0c11080e0e0c00022a35293b4d0004080e0c0003292e316a296801220c2215221522152d221402028a060e0e0e0c0006270d06cb31362e4d18d907020275060e0e0c00024d19cc070e0c000203062e35296402054d1abc071029352a362b373b2e2b0e0e0e4f1bab079000035697293b4d00a00702023c060e0c0003292f4d0a92070e0e0e0c0003654d1987070c000203325697293b4d007a07020216060e0e0e0c0003292f4d026a07020206060e0e0e0c000356c82a3b2b4d1c57070c0004260502023b5056982e2a4d1d46070e0e0e0c0003270806d23136294d0635074d0631073232310e0e0e0c00065648293b3c4d1e1f070c00042a4d0c17070202b3050c000228102c4d1f09070e0e0c00035689293b3c4d08fb060c0004503b270706ca3136323733385658293b3c4d1ee3060c00042a4d0cdb060c000228782c4d1fd1060e0e0c0003569756a7293b4d00c2060e0e0e0c0003293c4d15b6060e0e0e0c00032c3b2b4d08a9060e0e0c000450313b2a3b4d079b060c000303032902132a352b362a2c692a2a2505250526031e1d3b66653b2a0e0e4f207706f00002293b2a3b4d076c06020208050e0c000303032902132a352b362a2c692a2a2505250526031e223b6665220e4d0645064d0641062217221722160c00061213000100020028052a4d092a060202c6040e0e0e0c000312150001000100293b22154d0811060e0e0c00045012160001000300293b3b4d08fd050e0e0c00045012170001000200293b4d21ea050e0e0e0c000330293b4d07dd050e0e0c000303033b027329352a36121c00010002002b3b4d07c2050e0e0e0c000303043b50024d294d0cb1050e0e0c00022a35293b4d00a4050e0c00032e293b4d0799050e0e0c000303043b50022329352a362a3b4d0084050e0c0003292e324d0d79050e0e0c00042b250526041e30260426042a250426031e7f3b6664121a00010002004d2254050e0c000222164d064a054d06460522202220221f0e0c0006121c0001000200313b4d072f050c000303033b024f294d0c22050e0e0e0c00022a35293b4d0014050e0c000334293b4d0709050e0e0c000303033b022529352a362a3b4d00f5040e0e0c0003292e324d0de9040e0e0c00042b250526041e303b27042704121e0001000300293b3b4d08ca040e0e0e0c0004503b271c06de5628293b3c4d1eb5040e0e0c00042a4d0cab040c0002286d2c4d1fa1040e0e0c000356675677293b4d0092040e0e0e0c0003293c4d1586040e0e0e0c00032c3b2b4d0879040e0e0c0004503b270806cf313629352a362b383b2a293b4d075e040e0e0e0c000303032a021629362b3c4d154b040c0003292b25042504511e233b65653e2a4d2336040e0e0e0c00032d2d4d022a040e0e0e0c00032928054d151d040e0e0c00032b2a4d2412040e0e0e0c00036603172d220d220d220d220d120d0001000c000e0e0c0006021a2d220d220d220d220d120d0001000d0002027e020e0e0e0c0006270506d031363b2a293b4d07ca030e0e0e0c000303032a021629362b3c4d15b7030c0003292b25042504511e233b65652a293b4d07a10302023d020e0e0c000303033b022029352a362a4d068a034d068603220d220d220c0e0c00062a250426031e303b666456582867286828693d3f302f4d1262030e0e0e0c000856775687293b4d0052030e0e0e0c00032f3c4d0246030e0e0e0c00032a2a4d023a030e0e0e0c00032d3b2b4d082d030e0e0c0004503b270a06d331365638293b3e4d1e17030c00042a4d0c0f030c00023f2c4d1f06030202a2010e0e0e0c0003502c3d2d4d25f4020e0c00045056675677293b4d00e5020e0e0c0003293c4d15da020e0e0e0c00032c3b2b4d08cd020e0e0c0004503b270806ca313632373338294d06b7024d06b3023434330e0c0006502a35404d07a4020e0c0003038b2a36293b2a3b4d0794020e0c0003030202742a352b362a4d0683024d067f0222102210220f0e0e0c00065056a82815282428453b2807312f4d1262020e0e0e0c00085056b756c7293b4d0051020202ed000e0e0c0003293c4d0242020e0e0e0c00032c3b2b4d0835020e0e0c000450303c4d1529020e0e0c00032f2a250a250a26081e7e2608513b6402972a4d060e024d060a023434330c0006505658293b3e4d1efa01020296000e0e0e0c00042a4d0ceb010c000228082c4d1fe1010e0e0c0003502e3d2d4d25d4010e0c00045056875697293b4d00c5010e0e0c0003293c4d02ba010e0e0e0c00032c3b2b4d08ad010e0e0c00045056c756d7293b4d009d010e0e0c0003293c4d0292010e0e0e0c00032c3b2b4d0885010e0e0c0004503b270b6602193136294d0672014d066e013232310c00066402054d26610110314d065b014d0757010c000303bc2a3c4d154c010e0c00035647293b4d0040010e0c0003292c4d0236010e0e0e0c00035679293b4d0028010e0c00036403033c020a293b4d0a18010e0c000303033b0264294d060a014d2406010e0e0e0c00030326294d06f9004d27f5000e0e0c00034d28ec002a4d29e7000c00034d2ae0004d2bdc002b6a6510294d06d3004d07cf000c0003031156783b2a4d14c2000e0e0e0c000364020e56782a3c2b4d1cb0000e0c0004645687293b304d08a2000e0e0e0c0004503b2706028e5637293b4d008e000e0e0e0c0003292d4d0282000e0e0e0c00035669293b4d0074000e0c00036403033c020a293b4d0a64000e0c000303033b0240293b4d2455000e0e0c00030326294d0649004d2745000e0e0c00034d2c3c002a4d2937000c00034d2a30004d2b2c002b6a651056682a3b2b4d1c1f000c0004645677293b314d0812000e0e0e0c0004503b2705661f050e0e0e0e0e|@3337,I253,-11,I107,@3338,I11,@3340,-1,I229,I255,@3341,I113,@3346,@3233,@3195,-7,@3163,@3288,@3348,@3183,@3350,@3316,I106,@3353,@3355,I105,I218,@3360,@3362,@3310,@3366,@3193,@3197,@3369,@3370,@3373,I108,I234,@3189,@3376,@364,@3336,@353,@7129,@237,@3336| 3336:S23|67656e6364653a206261642061646a7573746d656e7420 3337:S30|494e5447434f444528292e636f646567656e28352967656e636465283529 3338:O3|@7129,@237,@3339 3339:S40|67656e6364653a2063616e277420636f64652d67656e657261746520476c6f62616c2076616c7565 3340:C14,208|0080560b293b4d00c6000e0e0e0c0003562a2a2a4d01b8000e0c0003293b4d02ae000e0e0e0c00030326294d03a1004d049d000e0e0c00034d0594002a4d068f000c00034d0788004d0884002b6a65105648293b4d0078000e0c00036403033c020a293b4d0968000e0c000303033b021056492a3b2b4d0a56000e0e0e0c000464565b566a2a3b2b4d0b44000e0c00045056793d2a4d0c37000c00035698293b3c4d0b2b000c00045056a756b7293b4d001d000e0e0c00032d2a692c3b2b4d0b0e000e0e0e0c0004503b270e420e0e0e|@3342,I253,I107,I234,-1,@364,@3343,@353,@7129,@237,I113,@3310,I255,@3341| 3341:O1|@3344 3342:S49|494e5447434f444528292e636f646567656e28352967656e636465283529552d6e65774d617463684661696c466e283129 3343:S34|67656e6364652028416c744d61746368293a206261642061646a7573746d656e7420 3344:C10,192|00812c28764d00b7000c0003030c2c3e4d01ac000e0c0003034e2b3b3e4d029f000c00042c4d0397000c00022e2e4d048e000e0e0e0c00033b2f4d0482000e0e0e0c00032f35293b4d0574000e0c0003294d066b004d0767000c0003322a4d085e00340e7e0b00032b4d0353000c00022d2d4d044a000e0e0e0c00033b2e4d043e000e0e0e0c00032e35293b4d0530000e0c0003294d0627004d0723000c0003312a4d081a000e0e0e0c0003323c3b4d020d000e0e0c00042a2708430e0e0e0e|@3345,I230,I229,@3193,@3233,@3197,I253,-1,I106,@3220| 3345:S37|494e54434f4445434f4e5328292e7075744272616e6368496e737472756374696f6e283229 3346:O3|@7129,@237,@3347 3347:S23|67656e6364653a2062616420737461636b2076616c7565 3348:O3|@7129,@237,@3349 3349:S45|67656e6364653a204d757475616c44656373206f6e6c7920616c6c6f77656420696e73696465204e6577656e76 3350:O1|@3351 3351:C1,8|00803b420e0e0e0e|@3352| 3352:S35|494e5447434f444528292e636f646567656e28352967656e636465283529552d283129 3353:C6,168|00802b3b4d00a0000e0c000303033b02942b352c362a354d018d004d0089000e0e0c000303152a3656382a2a12070002000b000e0e0c000365025e2a354d0267004d0063000c00030319562856372c4d0355004d0351002d2d56950e0e0c0006650236293b4d003f000c00030316562a5639564856572e2d2d2d2d56b50c000627040215562856372c3b4d031a002d2d56950e0e0e0c0006652a0e0e0e4f04070031000266420e0e|@3354,I229,-9,-4,-1,@3353| 3354:S43|494e5447434f444528292e636f646567656e28352967656e636465283529552d636f64654c697374283129 3355:C4,48|00802b3b4d0028000e0c000303033b021d2b352c362a0e0e0e4f0113002100022a4f020b003100022a2a69292705420e|@445,I229,@3356,@3355| 3356:C7,104|00802b354d0060004d015c000e0c0003034a2b362c37562856372b4d0249004d0245002d2d56950e0e0c000650574c5757293b4d0331000e0e0c00033c2a692c312b4d0422000e0e0e0c0004505787293b4d031300220d0e7e0c00034d050800100e0e0e0e0e0e0e|@3358,-4,I229,-1,I253,@3288,@3357| 3357:O3|@7129,@237,@3359 3358:S45|494e5447434f444528292e636f646567656e28352967656e636465283529552d67656e4c6f6f70417267283129 3359:S29|67656e4c6f6f704172673a206e6f742061206465636c61726174696f6e 3360:O3|@7129,@237,@3361 3361:S27|4e6f20426567696e4c6f6f7020666f72204c6f6f7020696e737472 3362:C12,200|00812c3b4d00c0000e0c000303332b3b4d00b4000e0c000303225707293b4d01a6000e0e0e0c00031203000100f9ff2a2a4d029300300e0e7e0700034d038800102c352d362d4d047e000e0e0e0c00024d0574000e0c000203642d3656382c4d0665004d0661002c3b56950e0e0c00062c2c0e0e0e4f074f0061000357682817282528253c3b2f2f4d083c000e0c00085057775787293b4d012d000e0e0c0003293c4d0222000e0e0e0c00032c3b2b4d0915000e0e0c0004502e270902054d0a06001065430e0e0e|@3364,I229,I253,I107,@3363,I105,I218,-1,@3362,@3183,I255,@3363| 3363:O3|@7129,@237,@3365 3364:S43|494e5447434f444528292e636f646567656e28352967656e636465283529552d6c6f616441726773283229 3365:S30|6c6f6164417267733a204d69736d61746368656420617267756d656e7473 3366:O1|@3367 3367:C10,152|00812b4d0091000e0e0c00022c35293b4d0184000e0c000329304d027a000e0e0e0c0003291b00014d036c000e0c00030319281e304d045f000c00032a314d0456000e0e0e0c000364023a2806304d0446000e0e0e0c00033b314d043a000e0e0e0c00032b3f4d052e000e0e0e0c00034d0624000e0c0002293d344d0719000e0e0c000466303c3b4d080c00330e0e7b050900040e0e0e0e|@3368,@3233,I253,I107,I234,@3197,I106,I111,@3189,@3193| 3368:S25|494e54434f4445434f4e5328292e6a756d706261636b283229 3369:C8,120|00802b3b4d0070000e0c000303033b02612b352c36572828762a4d015a000e0e0e0c000357475757293b4d024a000e0e0e0c0003293c4d033e000e0e0e0c00032c3b2b4d0431000e0e0c00045056885697324d0522004d051e002d2d56f50e0e0e0c0006324f060f00b10002312a6929270d420e0e0e0e0e|@445,I229,@3341,I253,I106,I255,-1,@3369| 3370:O1|@3371 3371:C11,208|00812c230a293b4d00c5000e0e0c0003293b4d01ba000e0e0e0c0003654d02af000c00022903042817020228142e3b2b4d039c000e0c00042f4d0493000c00023035293b4d0088000e0c000329324d057e000e0e0e0c0003293f4d0672000e0e0e0c0003293b4d0766000e0e0e0c000303033c0218293b4d0855000e0e0c00033c2a4d074a000e0e0e0c000364030329020a293f4d0538000e0c0003293d4d012e000e0e0e0c000327054d0222000e0e0e0c00020310280e314d0913000c0003501e813b02013b2704430e0e0e0e0e0e|@3372,I253,I113,I218,@3193,@3233,I106,I110,I229,I231,@3197| 3372:S29|494e54434f4445434f4e5328292e616c69676e4f6666576f7264283229 3373:O1|@3374 3374:C2,32|00803b2c4d0018000e0c000328ff2d4d000d000e0e0c00033b65420e0e0e0e0e|@3375,@3197| 3375:S33|494e54434f4445434f4e5328292e67656e456e746572496e744361746368283129 3376:O3|@7129,@237,@3377 3377:S41|67656e6364653a2063616e277420636f64652d67656e657261746520436f64654e696c2076616c7565 3378:C10,616|0086314d0061024d005d022f2f56590e0e0c000656183e2a4d014c020e0c0003563a564a293b4d023e020e0e0e0c0003293c4d0332020e0e0e0c00032c3b2b4d0425020e0e0c000450220d354d0518024d0614020e0c00030380220e3b220d220d220d56c90c000656882f3b4d06f8010e0c000303033b024f294d07ea010e0e0e0c00022a35293b4d02dc010e0c000332293b4d06d1010e0e0c000303033b022529352a362a3b4d02bd010e0e0c0003292e324d08b1010e0e0c00042b250526041e303b2704270456a7293b3b4d0497010c0004503b270406dd220e220d220d220d220d56c90e0e0e0c0006220d4d0076014d0672010e0e0e0c0003032c568a569a293b4d0260010e0c0003293c4d0356010e0e0e0c00032c3b2b4d0449010e0e0c0004503b270402013b5697293b4d0235010e0e0c00032903033b020f56b83d2a4d0122010e0e0e0c00036456c8333b4d0613010c000303033b024f294d0706010e0e0e0c00022a35293b4d02f8000e0c0003220d293b4d06ec000e0c000303033b022529352a362a3b4d02d9000e0e0c0003292e324d08cd000e0e0c00042b250526041e2f3b2704270456e7293b3b4d04b3000202ab000c00045022152215221522152215121500010003000e0e0e0c000612110001000100293b4d0287000c000312130001000200303b4d0677000c000303033b024f294d076a000e0e0e0c00022a35293b4d025c000e0c000333293b4d0651000e0e0c000303033b022529352a362a3b4d023d000e0e0c0003292e324d0831000e0e0c00042b250526041e303b27042704121500010001003303032c02013b2a3b2b4d040b000c0004503b270f27071f07|@3379,-1,@3341,I253,I107,I255,-2,I229,@3233,@3195| 3379:S31|494e5447434f444528292e636f646567656e28352967656e436f6e64283729 3380:C20,848|00822d353b2a293b4d0044030e0c000303032a021629362b3c4d0133030c0003292b25042504511e213b65653b303629354d021b034d0017030c000307cf29362a372e293b4d0007030c000303033b022029352a362a4d03f6024d03f202220e3b56ec0e0e0c00062a250426031e2a3b66642a036a2b3b4d04d5020e0e0c000303112b4d05c9020e0e0c00023b2a3b6a64024a567a292d4d06b5020e0e0c000329353c4d00a9020e0e0c000303112936294d059b020c00023b2a3b6a65021d29354d038b024d0087020c0003030929363c2a3b6a6402054d077502106502092b3c69568b0e0c000229354d0362024d085e020e0e0e0c00030a01007000570029362a3756a7293b4d0945020202a3000e0e0c000356c82a2d2f2c4d0a32020e0e0e0c000556e756f7293b4d0922020e0e0e0c0003293c4d0116020e0e0e0c00032c3b2b4d0b09020e0e0c0004503b270a025c29362a372a2a56c90e0e0e0c00033b4f0ceb01b00002660243293656982a2a4d0ddb010c000356b756c7293b4d09ce010e0e0e0c0003293c4d01c2010e0e0e0c00032c3b2b4d0bb5010e0e0c0004503b0e0e0e4f0ca701f000022707270406d72c3b4d0098010e0c000303033c024731362929354d0e86014d0082010e0e0e0c000303033c022e29354d0f71014d006d010e0e0c000303033c021a293528064d005b010c0003030c2936292502501e3c3b6402013b6503452c293b4d003f010c000303033b022029352a362a4d032e014d032a01220c3b56cc0e0e0c00062a250426031e2a3b66643236294d030f014d030b01343b56bc0c000665028d3136294d03fa004d03f600333b56ac0e0e0e0c00062e293b4d00e5000e0e0c000303033b022429352a362a4d03d2004d03ce00220e3b56ec02025a000e0e0c00062a250426031e303b666456782813282228293b280b342f4d10a5000e0e0c0008569756a7293b4d0996000e0e0e0c0003293c4d018a000e0e0e0c00032c3b2b4d0b7d000e0e0c0004503b27093b4f0c6f005000026456582d287e4d0462000e0e0e0c000303033b02054d115300103b2b4d124c000e0c00032f3c4d0142000e0e0e0c0003292d4d1236000e0e0e0c000356a756b7293b4d0926000e0e0e0c000329220c4d0819000e0e0c00032c3b2b4d0b0d000e0e0c0004503b270e440e0e0e|@3382,I229,I106,-5,-1,I234,I111,@460,@3383,I107,I253,@3385,I255,@3388,@3263,-3,-7,@3183,@3381,@3197| 3381:O3|@7129,@237,@3393 3382:S31|494e5447434f444528292e636f646567656e28352967656e4576616c283329 3383:O3|@7129,@237,@3384 3384:S37|7374617469634c696e6b56616c75653a206d697373696e672064656356656320656e747279 3385:O1|@3386 3386:C14,400|00832c2c4d0088010e0c00032e280f4d017d010e0e0c0003032e3d304d0170010e0c0003031f2f28114d0163010c00030310291b00014d0256010e0e0e0c000302013b02013b02013b03a92c28054d033e010e0e0e0c0003502c3b28054d042f010c00042d4d0527010c0002284f2f4d061d010e0e0c0003502b2f4d0611010e0e0c0003502e35293b4d0703010c00033b3d324d08f9000e0e0c00043123082b3069332308293b4d07e5000e0e0c00032b2a692d3b2b4d09d6000e0e0e0c00045022103d4d0ac8000e0c00032928104d0bbd000e0e0c00032922124d0cb1000e0e0c00032922114d06a50022120e0e0e7e1400032c28094d0395000e0e0c0003502c3b28094d0487000c00042d4d057f000c000228162f4d0675000e0e0c0003502b3d304d0868000e0c0004502e35293b4d075b000c00033b3d324d0851000e0e0c00043123082b3069332308293b4d073d000e0e0c00032b2a692d3b2b4d092e000e0e0e0c00045022103d220f4d081e000e0e0e0c000450220f3d220f4d080e0022100e0e0e7b051100040e0e0e0e|@3387,@3270,I232,I234,@3370,@3193,@3233,@3197,I253,@3189,I255,I107,I108,I106| 3387:S26|494e54434f4445434f4e5328292e67656e43616c6c536c283429 3388:C12,168|00805608294d009f004d019b000c0003032e5718293c4d028e000e0e0e0c00032a3b3c4d0381000e0e0c00042b4d0477000c0002280c2d4d056d00327e0800033b3b57390e0c00035623293d4d0658000e0c00035747293b4d074c000e0c0003293c4d0842000e0e0e0c0003577e56832a2a4d0832000e0e0e0c00032c2a4d0626000e0e0e0c000357b8312b2b4d0917000c000457dd293b3c4d0a0b000c0004503b270e420e0e0e|@3390,-1,I229,@3370,@3193,@3233,@3197,I106,I253,I107,@3389,I255| 3389:O1|@3391 3390:S45|494e5447434f444528292e636f646567656e28352967656e4576616c28332963616c6c436c6f73757265283129 3391:C8,424|00822d1b00014d009e010e0e0e0c000303102c1b00014d008e010e0e0e0c000302013b07cf2d3e4d017d010e0e0c00030a01004700eb002b3e4d026b010c00032c3b3e4d0361010e0e0c00042d4d0457010c0002287b2f4d054d010e0e0c000331304d0542010e0e0e0c000331314d053601320e7e0a000306cb2c3d4d0128010e0c00030a01003b0065002b3d4d0217010c00032c3b3d4d030d010e0e0c00042d4d0403010c0002287d2f4d05f9000e0e0c000330304d05ee00310e7e090003025a2b3c4d02e0000e0c00032c3b3c4d03d5000e0e0c00042d4d04cb000c0002287f2f4d05c100307e0800032b3c4d02b600020264000e0e0e0c00032c3b3c4d03a5000e0e0c00042d4d049b000c000228802f4d059100307e080003023a2b3d4d0284000e0c00032c3b3d4d0379000e0e0c00042d4d046f000c0002287e2f4d056500020211000e0e0c000330304d055600310e7e09000302462b28054d0247000c00032c3b28054d033c000e0c00042d4d0433000c0002287c2f4d0529000e0e0c0003313d314d061d000e0e0c0004313d324d061100330e0e0e7b050a0004440e0e0e0e0e0e0e|@3392,I234,I107,@3370,@3193,@3233,@3197,@3189| 3392:S28|494e54434f4445434f4e5328292e67656e5461696c43616c6c283329 3393:S35|67656e456e746572496e7443616c6c3a20746f6f206d616e7920617267756d656e7473 3394:C21,640|00842f3929354d0076024d0172020e0e0e0c000303033b02012f3137294d025f024d025b02323256890c00063c28403b4d034c020e0c00043435220c362a2a4d043d020e0e0c0003220e36293b4d052f020c00036403033b0269220e3656982a2a4d061b020c000356b84d0412022a4d060d020e0e0c000356d8293c4d0700020e0c00032a3b3c4d08f5010e0e0c00042b4d09eb010c0002280c2d4d0ae1010e0e0c0003121300010002003b2a4d0acf010c00033e2b4d0ac6010e0e0e0c00033b270d56982b3d4d0bb5010e0e0c00033e2a4d0caa010e0e0e0c00032b3b2b4d089d010e0e0c00042c4d0993010c0002402e4d0a8a010e0e0e0c0003303d304d0d7d010e0e0c00041211000100040012120001000400293b4d0e64010e0c0003293c4d045a010e0e0e0c00032c3b2b4d0f4d010e0e0c00045012150001000200294d093b010c00022a35293b4d0e30010e0c000322103c4d0c25010e0e0c0003293d4d0b1a010e0e0e0c00033b2922144d100c010e0c000303033b0227121c00010002002b2a4d11f6000e0e0e0c0003502a3c4d0ce9000e0e0c0003292503511e333b656422213929354d00d2004d01ce000e0e0e0c000303033b021329221b222222222222122200010003000c0006121e0001000100293b3b4d0fa2000e0e0e0c0004503b2225381612009200210000000002221b3b4d0e85000e0e0c0003122200010002002a3b4d0173000c000303033b024f294d0966000e0e0e0c00022a35293b4d0e58000e0c00032d293b4d014d000e0e0c000303033b022529352a362a3b4d0e39000e0e0c0003292e324d132d000e0e0c00042b250526041e303b2704270412240001000100293b3b4d0f0e000e0e0e0c0004503b27241f050e0e|@3396,-2,I229,-1,I11,I107,I113,@3316,@3370,@3193,@3233,@3197,I108,I106,@3189,I253,I255,I233,@3397,@3395,@3195| 3395:C10,288|00802b3b4d0018010e0c000303033b06cc2b3529352a362e3656405650293b4d01fd000e0e0c00035777293b4d01f0000e0c00036403033b020f57783d2a4d02de000e0e0e0c00036457882b2b2b4d03ce000e0e0e0c00042e3b2b4d04c1000e0e0c00045056a3294d05b4004d00b0000e0c0003032c57ba57ca293b4d01a0000e0c0003293c4d0696000e0e0e0c00032c3b2b4d0489000e0e0c0004503b270402013b3b33293b4d0075000e0e0c000303033b021c29352a362a0e0e0e1607005e0012000000000250292503511e283b656457e7293b3b4d04450002023f000e0e0c00045056f312110001000300121200010002001213000100010022112d2d2d2d121900020003000c000622100e0e0e1608000a001600010000022714420e|@3401,I229,I253,@3341,@3402,I255,-1,I107,@3400,@3395| 3396:S36|494e5447434f444528292e636f646567656e28352967656e44656e736543617365283529 3397:O1|@3398 3398:C2,16|00812c3d2d4d0007002e0e7b05040004|@3399,@3189| 3399:S24|494e54434f4445434f4e5328292e67656e576f7264283229 3400:C10,144|00801201000200e7ff571b29362e2a4d007d000e0e0c0003293d4d0172000e0e0e0c00032d2a4d0266000e0e0e0c000358683d2b2b4d0357000c00041209000200e5ff2a2a4d0447000c000366033d5868294d053a000e0e0e0c00022a35293b4d062c000e0c0003120b000200e7ff2a2a4d071b000c000358c82a3d322c4d080e0022130e0e0e7b061000053b270642|@3407,I107,I108,@3408,@3251,I113,@3233,I253,@3406,@3238| 3401:S50|494e5447434f444528292e636f646567656e28352967656e44656e73654361736528352967656e4561636843617365283129 3402:O1|@3403 3403:C3,32|00822c3b4d0018000e0c000303032d020c3b2e0e0e4f01070010000264440e0e|@3405,I229,@3404| 3404:C3,40|00802b3b4d0020000e0c00030304560802142b352c36290e0e4f010b002100022b2a69292704420e|@1555,I229,@3404| 3405:S27|494e54434f4445434f4e5328292e6c696e6b4c6162656c73283329 3406:O1|@3411 3407:S65|494e5447434f444528292e636f646567656e28352967656e44656e73654361736528352967656e456163684361736528312967656e456163684d61746368283129 3408:O1|@3409 3409:C2,16|00812c2c4d0008000e0c00032964430e|@3410,I106| 3410:S25|494e54434f4445434f4e5328292e61646472506c7573283229 3411:C2,16|00812c2c4d0008002d0e0e0e7e040003|@3412,I107| 3412:S26|494e54434f4445434f4e5328292e616464724d696e7573283229 3413:C9,264|00842f3929354d00fe004d01fa000e0e0e0c000303033b02012f3c28403b4d02e6000e0e0e0c00043b3338293c4f03d7006000035668293b3b4d04cb000c000450220d3929354d00be004d01ba000e0e0e0c000303033b023b220e392931220f220f220f56e90e0e0e0c000656a856b8293b4d0592000e0e0e0c00036403032e02013b2a3b2b4d047e000e0e0e0c0004503b27042f3b4d056e000e0e0e0c000356a72a3b4d0160000e0c000303033b024f294d0652000e0e0e0c00022a35293b4d0544000e0c00032d293b4d0139000e0e0c000303033b022529352a362a3b4d0525000e0e0c0003292e324d0719000e0e0c00042b250526041e303b27042704270b1f050e0e0e0e|@3415,-2,I229,I11,@3414,I255,I253,@3233,@3195| 3414:C12,368|00812c3b4d0068010e0c000303032b06d02c3529352a362f363b2b0e0e4f014f015000025663567956885697312d2d2d2d57f90e0e0c000657b8293b4d0230010e0c000356d3294d0325014d0021010e0e0c0003032c57ea57fa293b4d0210010e0c0003293c4d0406010e0e0e0c00032c3b2b4d05f9000e0e0c0004503b270402013b56f21211000100fcff293b4d02de000e0e0e0c00032e03033b0213121300020001003d2a4d06c5000e0e0c000364121400020001002b2b2b4d07b1000e0e0c00042e3b2b4d05a5000e0e0c0004501216000200010022103b4d009100020287000e0e0c000303033b024f294d087e000e0e0e0c00022a35293b4d0270000e0c00032213293b4d0064000e0c000303033b022529352a362a3b4d0251000e0e0c0003292e324d0945000e0e0c00042b250526041e2f3b2704270412180002000200293b3b4d0526000e0e0e0c000450221a03033402013b22152a0e160a000e001c00010000032719430e0e0e0e0e|@3417,I229,@3416,I253,-1,I107,I255,@3341,@3402,@3233,@3195,@3414| 3415:S37|494e5447434f444528292e636f646567656e28352967656e53706172736543617365283529 3416:C16,368|00802b3b4d0068010e0c000303054d015e01102b352c363b2a4d0053010c0003573b2937575857672b4d0243014d023f012d2d58c90c00065887312a4d0330010e0c000330030428e5020228e64d041f010c000258b72a2a4d0314010e0c000358d7293c4d0508010e0c00032a3b3c4d06fd000e0e0c00042b4d07f3000c0002280c2d4d08e9000e0e0c0003121300030001003b2a4d08d7000c00033e2b4d08ce000e0e0e0c0003121600030001003e2a4d09bb000c00031218000300040012190003000400293b4d0aa4000e0c0003293c4d0b9a000e0e0e0c00032c3b2b4d0c8d000e0e0c000450221803032d027622190e0e0e160d0076001d0001000002121d00030001002f3b4d0063000c000303033b024f294d0756000e0e0e0c00022a35293b4d0a48000e0c000332293b4d003d000e0e0c000303033b022529352a362a3b4d0a29000e0e0c0003292e324d0e1d000e0e0c00042b250526041e303b270427042b66271b420e0e0e0e0e0e0e|@3419,I229,@3418,-1,@3316,I189,@3370,@3193,@3233,@3197,@3341,I253,I107,I255,@3416,@3195| 3417:S48|494e5447434f444528292e636f646567656e28352967656e5370617273654361736528352963617365436f6465283229 3418:O3|@7129,@237,@3420 3419:S61|494e5447434f444528292e636f646567656e28352967656e5370617273654361736528352963617365436f6465283229707574496e4361736573283129 3420:S21|707574496e43617365733a206e6f206c6162656c73 3421:O3|@7129,@237,@3422 3422:S35|67656e456e746572496e7450726f633a20746f6f206d616e7920617267756d656e7473 3423:C8,208|00862e2d4d00c8000e0c0003030c2c2e4d00bc000e0c000302013b03372f2d4d01ad000e0e0c000329304d02a2000e0e0e0c00032d3b3c4d0395000e0e0c00042e4d048b000c00022b304d058200310e7e0d00033b2d4d0076000e0e0e0c0003030c2c28fe4d0067000c000302013b032b2b3b3d4d0358000e0c00042c4d044f000c0002322e4d0546000e0e0e0c00032f2f4d053a00300e7e0c00032b3b3e4d032d000e0e0c00042c4d0423000c0002332e4d051a000e0e0e0c00032f3d304d060d00310e0e0e7b050c00040e0e0e0e|@3424,I232,I106,I107,@3193,@3233,@3197,@3189| 3424:S21|494e54434f4445434f4e5328292e67656e31283729 3425:O2|@3763,@7244 3426:C31,1072|00802b230c2c230e2d35293b4d0020040e0c00032928084d0115040e0e0c0003293b4d020a040e0e0e0c000303033c0218293b4d03f9030e0e0c00033c2a4d02ee030e0e0e0c000364030329020a2928084d04db030c0003293b4d05d2030e0e0e0c000327044d06c6030e0e0e0c00020310280e2e4d07b7030c0003501e753b02013b2e35293b4d00a5030e0e0c00033b3f324d0899030e0e0c000431230b293b4d008b030c00033335293b4d0080030e0c0003293b4d0376030e0e0e0c0003293c4d026a030e0e0e0c000303032a020b2a3e4d0959030e0e0c0003293f4d0a4e030e0e0e0c0003292f4d0442030e0e0e0c0003293f4d0436030e0e0e0c000322112308293b4d0026030e0e0e0c0003220c22144d0b18030e0c00032a293b4d020d030e0e0c000303033b021429352a362a2d0e0e0c00022a250426031e203b66642d4d0ce9020e0e0c000203032d02054d0ddb02102928413b4d0ed2020e0e0e0c00043b2a693c28402b4d0ec1020e0e0c0004221923072a68012a3b2b4d0fae020e0e0e0c000450221b37221c35293b4d009b020c00032b2f2b3b4d1090020e0c000522103f4d1185020e0e0c0003292a32122200010003000e0e0e0c000422103c4d0969020e0e0c0003293f4d115e020e0e0e0c000322193c4d0451020e0e0c0003292b220d122600010003000e0e0c000422163c4d0435020e0e0c0003293f4d112a020e0e0e0c00033b2a2210122900010003000e0e0c0004220f3b4d000d020e0e0c00032935293b4d0200020e0c000303232a362928424d12f1010e0e0c00033c2b6922143b2b4d0fe1010e0e0c0004503b6602054d13d30110222b39294d14ca014d15c6010e0e0e0c000303033b020129221e3d4d04b3010c000322152a2c4d16a8010e0c00043b223038293b4d009a010e0e0e0c00033c2a0e0e0e1617008a013300000000032233230b293b4d007a010e0e0e0c0003293b4d056e010e0e0e0c000365034a221a3b4d005e010e0e0e0c00032935293c4d0250010e0c000303272a36293d4d1242010e0e0e0c00034d1838012b69221f3b2b4d0f2e010e0e0e0c0004503b6602054d191f01106502013b2234230629640325221b3b4d000b010c000329352a362a3b4d02fe000e0e0e0c000303054d1af200102966023c221b3b4d00e6000e0e0e0c000329352a362a3b4d02d6000e0e0e0c000303054d1aca0010293c3b2b4d0ec1000e0e0c0004294d1bb7000c00022a270622352a4d1caa000e0e0e0c000322320398223639221e2a22322237123a00010002000c0005223838293b4d0083000c0003223328104d0478000e0c0003292b293b4d026c000e0c000303033b025029352a362c3c4d1d59000e0e0c0003223d0e0e0e0c00022809223e0e0c00022c223f124200010001000e0e0e0c00034022400e0e0c0002303f4d0426000e0e0e0c0003292f2509250926071e5a3b27076540223a0c0002270602013b2b2735420e0e0e|@3428,I253,I110,I229,I231,I106,I113,I218,@3197,@3189,I107,I109,@3429,I105,@404,I11,I255,@3202,I108,I200,@3440,I48,I24,@3442,@3448,-1,@3453,@3275,I47,@3427,@364| 3427:O1|@3455 3428:S25|494e54434f4445434f4e5328292e636f7079436f6465283129 3429:O1|@3430 3430:C3,24|00814d0012002c2e6a4d010b002a6964430e0e0e0e0e0e0e|@3432,@3433,@3431| 3431:C1,16|00802b352c3656272d0e0e0e7e030003|@3439| 3432:S34|494e54434f4445434f4e5328292e6669787570436f6e7374616e744c6f6164283229 3433:C11,128|008156073d2e2b4d0075000e0e0c0004293b4d016a000e0e0e0c000303033b02054d025b00105638303d4d0352000e0e0e0c00032a2a4d0446000e0e0e0c00033b2a4d053a000e0e0e0c00030310294d062d004d0729000e0e0c000302013b03033b02054d0818001056772b3d220d2c4d090c00220e0e7b060c00050e0e0e0e|@3435,@3251,I229,@3436,I106,I107,I232,65536,I234,@3434,@3238| 3434:O3|@7129,@237,@3438 3435:S37|494e54434f4445434f4e5328292e6669787570436f6e7374616e744c6f6164283229283229 3436:O3|@7129,@237,@3437 3437:S35|6669787570436f6e7374616e744c6f61643a20616c72656164792066697865642d7570 3438:S55|6669787570436f6e7374616e744c6f61643a20636f6e7374616e7420746f6f2064697374616e74202831362d626974206f666673657429 3439:S37|494e54434f4445434f4e5328292e6669787570436f6e7374616e744c6f6164283229283129 3440:O3|@7129,@237,@3441 3441:S37|63736567436f6e76657274546f436f64653a206e6f7420612062797465207365676d656e74 3442:O1|@3443 3443:C19,200|00822d3b4d00c0000e0c00032935293c4d01b4000e0c000303a62a36294d02a7000c0002293b4d039e000e0e0e0c000303104d0492002a4d058d000e0e0c0003020129313b4d037f000c000303033c020b29324d0671000e0e0c00030341314d0765004d0861000e0e0c00032a4d0757004d0853000c0003293b694d0949002a692c2a694d0a40002a6927054d0b38000e0c00024d0c30004d0d2c002b6a10314d0e24000e0c000203033102054d0f1700102c2a334d100f00340e7b050b00044d110400100e0e0e|@3445,I253,I229,I15,I234,@190,I106,I232,-1,@364,@3214,@3446,@378,@7129,@237,I105,@404,I255,@3444| 3444:O3|@7129,@237,@3447 3445:S23|434f44455f5345472e63736567507574576f7264283329 3446:S19|63736567507574576f72643a20496e64657820 3447:S41|63736567507574576f72643a206e6f7420616e20756e6c6f636b656420636f6465207365676d656e74 3448:C9,128|00812b3b4d0078000e0c000303033b026d2b352c362a354d0165004d0061000e0e0c000303402a36563729312c4d024f000c0004565729230b567729230b293b4d033c000e0c0003293c4d0432000e0e0e0c00032d3b2b4d0525000e0e0c0004503b270902013b2f3c4d0613000c0003292c0e0e0e4f0707005100032704430e|@3450,I229,-1,@3449,I253,I107,I255,I106,@3448| 3449:O1|@3451 3450:S42|494e54434f4445434f4e5328292e636f7079436f64652831297075744c6f63616c436f6e737473283229 3451:C11,152|00822d2307293b4d008d000e0e0c0003294d0183000c00024d027c000e0c000203062935296402054d036c00103035293b4d0063000c0003293b4d045a000e0e0e0c0003293c4d054e000e0e0e0c000303032a020b2a3e4d063d000e0e0c0003293f4d0732000e0e0e0c000329220c4d0825000e0e0c0003293d4d081a000e0e0e0c0003302a220e4d090c00220f0e7b050f00040e0e0e0e|@3452,I253,I105,I218,@621,I231,I229,I107,I109,I106,@3442| 3452:S28|494e54434f4445434f4e5328292e636f6e73744c6162656c73283329 3453:O3|@7129,@237,@3454 3454:S47|63736567436f6e76657274546f436f64653a206e6f7420616e20756e6c6f636b656420636f6465207365676d656e74 3455:C4,64|00813b2d2309293b4d0034000e0c000329293b4d0129000e0e0c000303033b021829352a362a0e0e0e4f0213006000022a250426031e243b662704430e0e0e0e|@3457,I253,I229,@3456| 3456:C13,224|00802b230b3b2d38293b4d00d2000e0e0e0c00033c2a293b4d01c4000e0c000303033b022829352a362c2b0e0e4f02af009000032d3c4d03a6000e0e0e0c0003292c2506250626041e323b2704652d3b4d008c000e0c0003293b4d0482000e0e0e0c000364036f302307293b4d0070000e0c0003294d0567000c00024d0660000e0c000203062935296402054d07500010293b4d0049000e0e0c00032935293c4d013c000e0c000303232a36293d4d082e000e0e0e0c00034d0924002b692e3b2b4d0a1b000c0004503b6602054d0b0f0010270502013b2705420e0e0e0e0e0e|@3459,I253,I229,@3458,I106,I113,I105,I218,@621,I200,-1,I255,@3453| 3457:S29|494e54434f4445434f4e5328292e6669784f7468657252656673283229 3458:C7,112|00812b353b4d0067000c0003035c2b3657182a230b2a230b2a2a4d0152000e0e0e0c000366033f561757272a302b4d023e000e0e0e0c000456445654293b4d032e000e0e0e0c0003293c4d0422000e0e0e0c00032c3b2b4d0515000e0e0c0004503b270702013b6402013b430e0e0e0e|@3460,I229,I251,@3449,I253,I107,I255| 3459:S38|494e54434f4445434f4e5328292e6669784f7468657252656673283229666978526566283129 3460:S57|494e54434f4445434f4e5328292e6669784f74686572526566732832296669785265662831297075744e6f6e4c6f63616c436f6e7374283229 3461:O2|@3463,@3462 3462:O2|@3481,@3480 3463:C29,560|00812c353b4d0027020c000303262c36292306296403064d01150202044d020f022d0e0e0e0c00022a3929642e2e0e0e7d0600022c36294d03f5010e0e0c0002036a294d03e9010e0e0c000203032902054d04db0110293b4d05d4010e0c000303104d06ca012a4d07c5010e0e0c00030201294d08b9012f0e0c00022a3c4d09ae010e0e0e0c0003300c00024d0aa001310c00022c4d0b97014d0993010c0003320c0002282933337d0b0002294d037f010c000203054d0c7601102928662a4d0d6d010e0e0c0003030a4d0e62012e2e7d060002294d0f57010c0002293e4d104e010e0e0e0c0003293d4d1142010e0e0e0c000365031d2956370e0e0e0c00024d122c012a4d1327010c0003642e2e0e7d060002294d0f17010c0002293e4d100e010e0e0e0c0003293c4d1102010e0e0e0c000365030d292e4d14f3002f0e0e7e060003294d0fe7000c0002293e4d10de000e0e0e0c0003293b4d11d2000e0e0e0c0003650318294d15c4000e0c00023c2a4d16ba000e0e0e0c00036402013b039e293b4d17a8000e0c0003294d039f000c00024d1898000e0c00020376294d038d000e0e0c000203054d198200102928662a4d0d79000e0e0c00034d1870000e0c00020325294d0f65000e0e0c0002293e4d105a000e0e0e0c0003293d4d114e000e0e0e0c00036502013b031a2956570c00024d1a38002a4d1333000c00036430300e7d0800022b304d1b2200310e7e0800032a2f4d1b1600300e7e070003292e4d1b0a002f0e7e0600030e0e0e0e|@3465,I229,@3466,@3467,I105,@404,I234,@190,I106,@3468,@364,@412,-1,@407,I150,@3469,I17,I243,I251,@3466,@353,@3470,I15,I248,I253,I218,@407,@3467,@3464| 3464:O1|@3476 3465:S27|494e54434f4445434f4e5328292e7072696e74436f6e7374283229 3466:S6|636f64653a09 3467:S6|636c6f733a09 3468:S7|73686f72743a09 3469:S9|52545320656e747279 3470:O1|@3471 3471:C12,112|00812c4d0069000e0e0c0002293b4d015e000e0e0e0c000303104d0252002a4d034d000e0e0c0003020129293c4d043f000c0003030a4d0536002e2e7d060002294d062b004d0727000c00034d0820002a4d091b000c0003294d0a13004d090f000c0003652e2e0e7d0600020e0e0e0e|@3473,I15,I234,@190,I106,I229,@3474,-1,@364,@3475,@353,@3472| 3472:S6|20776f726473 3473:S27|494e54434f4445434f4e5328292e7072696e744279746573283229 3474:S13|62797465733a093120776f7264 3475:S7|62797465733a09 3476:C12,112|00812c4d0069000e0e0c0002293b4d015e000e0e0e0c000303104d0252002a4d034d000e0e0c0003020129293c4d043f000c0003030a4d0536002e2e7d060002294d062b004d0727000c00034d0820002a4d091b000c0003294d0a13004d090f000c0003652e2e0e7d0600020e0e0e0e|@3478,I15,I234,@190,I106,I229,@3479,-1,@364,@3477,@353,@3472| 3477:S6|6c6f6e673a09 3478:S27|494e54434f4445434f4e5328292e7072696e74576f726473283229 3479:S12|6c6f6e673a093120776f7264 3480:O2|@3483,@7244 3481:C9,104|00802b4d0061000e0e0c0002293b4d0156000e0e0e0c000303104d024a002a4d0345000e0e0c0003020129293c4d0437000c00032e2a56570e0c00032a2a4d0426000e0e0e0c0003294d051b000c000203032902054d060f0010312a4d0708000e0c000329270742|@3482,I15,I234,@190,I106,I107,I105,@404,I253| 3482:S27|494e54434f4445434f4e5328292e6e616d654f66436f6465283129 3483:C3,32|00813f2c4d0018000e0c00033b3b3b0e0e4f010b0030000365430e0e0e0e0e0e|@3485,I108,@3484| 3484:C12,192|00812b3f4d00b8000e0c000303032c02a95707293b4d01a7000c0003294d029f000c0002290c0001664d0393000c000203295604293f4d0486000e0e0e0c0003292e4d057a000e0e0e0c0003293c4d056e000e0e0e0c000366020e5604292d4d045d000e0e0c00036456182a4d0650000e0c000203032a02054d074300102a2a4d083c000e0c0003301b00014d0930000e0c0003292b4d0426000e0e0e0c0003313c4d041a000e0e0e0c00032a2a0e0e0e4f0a0b008100032707430e0e0e0e0e|@3486,I229,I253,I189,I218,I106,I107,I105,@404,I252,I108,@3484| 3485:S31|494e54434f4445434f4e5328292e6c6f6164436f6e7374436f756e74283229 3486:S43|494e54434f4445434f4e5328292e6c6f6164436f6e7374436f756e742832296c6f61644279746573283229 3487:O3|@3488,@7246,@7245 3488:C25,1536|0083402c0e0c00022e4d00f3054d01ef050c00030308283f2d0c000202062e2d0e0c00024d02d8052e0c00023c28403b4d03cc050e0c00043c28403b4d03c0050e0c00043b3b2c3b4d04b4050e0c000329220c4d05a9050e0e0c00036407d22c3b4d049b050c0003293c4d0692050e0e0e0c0003340c00022d3b4d0482050e0e0e0c0003294d0777050c00024d0870050e0c000203112935292d4d0962050e0e0e0c00036402013b6403463d28093b0e0e4f0a4b05b000042e3b4d0442050e0e0e0c0003294d0737050c00024d0830050e0c000203132936303b2b4d0b21050e0e0c0004503b6402054d0c1305106506cf2809220c0c00022f3b4d0402050e0e0e0c000322102a4d0df5040e0e0c0003313b4d04ea040e0e0e0c0003293c4d0ede040e0e0e0c0003333b2b4d0bd1040202c7040e0e0c00045056e82c3b4d05bf040c000303033c0218293b4d04b1040e0e0c00032d2a4d0fa6040e0e0e0c00036403054d109904102c3c4d0e92040e0e0e0c00032a2a4d0486040e0e0e0c0003296622110e0c000256f72d3b4d0570040e0c000303033c0218293b4d0461040e0e0c00032e2a4d0f56040e0e0e0c00036403054d104904102d3c4d0e4204020225040e0e0e0c00032a2a4d0432040e0e0e0c00032965293c4d1124040e0c000303033b06cb2e3d4d1215040e0e0c000303302e3e4d1208040e0c000303242e28764d12fb030c000303182e28054d12ef030c0003030c2e281a4d11e3030c0003031d293c4d13d8030e0c00032928093b0e160a00ca031600000000046406d32e28064d12ba030e0e0e0c000303242e28074d12ab030c000303182e287a4d129f030c0003030c2e28094d1193030c000303143c28093c0e0e0e160a00820315000000000406da2e281e4d1173030c0003038c280922140e0e0e0c0002220e3b4d045d030e0e0c0003293c4d135203020233030e0e0e0c000322103b4d0441030e0e0c0003221a2a4d0d35030e0e0c00032b2a4d132a030e0e0e0c0003293c4d061e030e0e0e0c0003221a0e0e0e0c000222143b4d0409030e0e0c0003293c4d0efe020e0e0e0c000322163b2b4d0bf0020202d1020e0c0004503b270906dd2e28124d11db020c000303313d2809161400ce021400000000033d282c0e0e161400be021500000000033d282c0e0e161400ae021600000000036506d42e280b020283024d119a020e0e0e0c000303353d28093b0e0e0e160a0086021500000000043d282c0e0e16140076021500000000033d282c0e0e16140066021600000000036506cb2e28164d1156020e0e0e0c000303403d28091614004602140000000003503d282c3b160a003602150000000004503d282c0e1614002602140000000003503d282c0e161400160214000000000306ce2e28594d1107020202e8010c000303243d28093b0e0e0e160a00f201150000000004503c282c0e161400e20114000000000306cb2e284f4d11d3010202b4010c000303303c2809161400c201140000000003503d282c3b160a00b201150000000004503c282c0e161400a20114000000000306d72e404d119401020275010e0c00030372220d3b4d0483010c00033b3d2b0e0e16150076011600000000033d28090e0e161400660117000000000322113b4d0459010e0e0c00033b3b292e4d164c010e0c000303033b022729020223010e0e0e16170036011a000000000250293c4d0e29010e0e0c0003292502501e323b64270706d22e287c4d1111010202f2000e0e0c000303213d2809161400fe001400000000033d282c0e0e161400ee001500000000036402ca2e287b4d11de000e0e0e0c000303253c2809161400ce001400000000033c282c0202a6000e0e161400ba001500000000036402962e284d4d11aa000e0e0e0c0003032d3c28091614009a0014000000000350293c4d138d000e0e0c000329282c3b0e160a007e0016000000000464025a2e284e4d116e000e0e0e0c000303313d28091614005e0014000000000350293c4d1351000e0e0c000329282c3b020229000e160a003e0016000000000464021a293c4d132f000c00032928090e0e161400220015000000000364270840220d0e0e0e0c00022604060050fa3b6602013b3b27081f04|@3490,I48,I24,@3491,I11,I253,I234,@364,I105,I218,I113,@3492,I255,@3498,@3228,I106,I231,@61,I229,I230,I107,@3500,@3503,I233,@3489| 3489:C7,128|00804d007a0056170e0c00021202000100e9ff5621293b4d0165000e0e0c0003564a3b3d2c4f0257007000032e2a4d034e000e0e0e0c0003293c4d0442000e0e0e0c000356970e0e0e0c0002569156a1293b4d012a000e0e0e0c0003293d4d031e000e0e0e0c00032c3b2b4d0511000e0e0c0004503b270d420e0e0e0e0e0e0e|@3505,@3506,I253,@3504,I106,@364,I255| 3490:S26|494e54434f4445434f4e5328292e7072696e74436f6465283429 3491:S2|3a0a 3492:C7,192|00825601293b4d00b6000e0e0e0c0003562a3b312c4f01a7005000035651293b4d009c000e0c00032b2a4d0292000e0e0e0c000329220d4d0285000e0e0c000334032b569056a0293b4d0073000c00032c2a4d036a000e0e0e0c00032c3b2b4d045d000e0e0c0004503b270402013b220d56b70e0e0c00022b3c4d0542000e0e0e0c000356c70e0e0e0c000256c156d1293b4d002a000e0e0e0c00032922144d021d000e0e0c00032c3b2b4d0411000e0e0c0004503b2710440e0e0e0e0e0e0e|@3494,I253,@3495,I106,@3493,I255,@364| 3493:O1|@3496 3494:S38|494e54434f4445434f4e5328292e7072696e74436f64652834297072696e7444697370283329 3495:C7,96|008156022c4d0057000c00032d3c4d014e000e0e0e0c0003030329023b2d3c4d023d000e0e0c00032d3c4d0332000e0e0e0c00032a2a0e0e0e4f042300410003291b00014d0518000e0c0003292e4d030e00320e7e09000364430e0e0e0e0e0e|@3255,@3228,I229,I107,I106,@3495,I108| 3496:C5,80|00812b3b4d0048000e0c000303052c3b6902372b352c362e2b4d0133000c000303072e2e69296402202e2b4d0221000e0e0c000303032d02102e2a4d0311000e0e0c00032b2a69296565430e0e0e0e0e|@3497,I229,I234,I113,@3493| 3497:S33|494e54434f4445434f4e5328292e7072696e74436f64652834296164644c283229 3498:O3|@7129,@237,@3499 3499:S36|7072696e74436f64653a20696e646972656374696f6e206c69737420636f6e6675736564 3500:C6,104|00812b56170c00025611293b4d0058000e0c0003563a3b312c4f014b00600003293c4d0242000e0e0e0c000356770e0e0e0c000256715681293b4d002a000e0e0e0c000329220e4d031d000e0e0c00032c3b2b4d0411000e0e0c0004503b270b430e0e0e0e0e0e0e|@3502,I253,@3501,@364,I106,I255| 3501:C7,96|008156012c4d0057000c00032d3c4d014e000e0e0e0c0003030329023b2d3c4d023d000e0e0c00032d3c4d0332000e0e0e0c00032a2a0e0e0e4f042300410003291b00014d0518000e0c0003292e4d030e00320e7e09000364430e0e0e0e0e0e|@3255,@3228,I229,I107,I106,@3501,I108| 3502:S36|494e54434f4445434f4e5328292e7072696e74436f64652834297072696e744f70283229 3503:C7,96|0081560a2c4d0057000c00032d3c4d014e000e0e0e0c0003030329023b2d3c4d023d000e0e0c00032d3c4d0332000e0e0e0c00032a2a0e0e0e4f042300410003291b00014d0518000e0c0003292e4d030e00320e7e09000364430e0e0e0e0e0e|@3255,@3228,I229,I107,I106,@3503,I108| 3504:C7,96|008156002c4d0057000c00032d3c4d014e000e0e0e0c0003030329023b2d3c4d023d000e0e0c00032d3c4d0332000e0e0e0c00032a2a0e0e0e4f042300410003291b00014d0518000e0c0003292e4d030e00320e7e09000364430e0e0e0e0e0e|@3255,@3228,I229,I107,I106,@3504,I108| 3505:S43|494e54434f4445434f4e5328292e7072696e74436f6465283429552d552d7072696e74456e747279283129 3506:S2|0a09 3507:S13|3c554e4b4e4f574e203235353e 3508:S8|656e746572496e74 3509:S11|3c554e4b4e4f574e20313e 3510:S4|6a756d70 3511:S9|6a756d7046616c7365 3512:S11|3c554e4b4e4f574e20343e 3513:S10|64656c48616e646c6572 3514:S5|6a756d7049 3515:S10|6a756d704946616c7365 3516:S11|3c554e4b4e4f574e20383e 3517:S11|64656c48616e646c657249 3518:S10|63617365537769746368 3519:S6|63616c6c536c 3520:S11|63616c6c436c6f73757265 3521:S7|72657475726e57 3522:S3|706164 3523:S12|3c554e4b4e4f574e2031353e 3524:S7|72616973654578 3525:S9|67657453746f726557 3526:S8|6e6f6e4c6f63616c 3527:S6|6c6f63616c57 3528:S9|696e64697265637457 3529:S10|6d6f7665546f56656357 3530:S7|63616c6c536c58 3531:S12|736574537461636b56616c57 3532:S6|726573657457 3533:S8|7265736574525f77 3534:S9|636f6e737441646472 3535:S9|636f6e7374496e7457 3536:S10|696f566563456e747279 3537:S8|636f6e73744e696c 3538:S8|6a756d704261636b 3539:S7|72657475726e42 3540:S12|3c554e4b4e4f574e2033323e 3541:S9|67657453746f726542 3542:S6|6c6f63616c42 3543:S9|696e64697265637442 3544:S10|6d6f7665546f56656342 3545:S12|736574537461636b56616c42 3546:S6|726573657442 3547:S7|72657365745242 3548:S9|636f6e7374496e7442 3549:S7|6c6f63616c5f30 3550:S7|6c6f63616c5f31 3551:S7|6c6f63616c5f32 3552:S7|6c6f63616c5f33 3553:S7|6c6f63616c5f34 3554:S7|6c6f63616c5f35 3555:S7|6c6f63616c5f36 3556:S7|6c6f63616c5f37 3557:S7|6c6f63616c5f38 3558:S7|6c6f63616c5f39 3559:S8|6c6f63616c5f3130 3560:S8|6c6f63616c5f3131 3561:S10|696e6469726563745f30 3562:S10|696e6469726563745f31 3563:S10|696e6469726563745f32 3564:S10|696e6469726563745f33 3565:S10|696e6469726563745f34 3566:S10|696e6469726563745f35 3567:S7|636f6e73745f30 3568:S7|636f6e73745f31 3569:S7|636f6e73745f32 3570:S7|636f6e73745f33 3571:S7|636f6e73745f34 3572:S8|636f6e73745f3130 3573:S8|72657475726e5f30 3574:S8|72657475726e5f31 3575:S8|72657475726e5f32 3576:S8|72657475726e5f33 3577:S11|6d6f7665546f5665635f30 3578:S11|6d6f7665546f5665635f31 3579:S11|6d6f7665546f5665635f32 3580:S11|6d6f7665546f5665635f33 3581:S11|6d6f7665546f5665635f34 3582:S11|6d6f7665546f5665635f35 3583:S11|6d6f7665546f5665635f36 3584:S11|6d6f7665546f5665635f37 3585:S12|636f6e737441646472585f62 3586:S12|636f6e737441646472585f77 3587:S8|63616c6c536c4358 3588:S7|72657365745f31 3589:S7|72657365745f32 3590:S10|67657453746f72655f32 3591:S10|67657453746f72655f33 3592:S10|67657453746f72655f34 3593:S12|3c554e4b4e4f574e2038353e 3594:S11|6e6f6e4c6f63616c4c5f31 3595:S11|6e6f6e4c6f63616c4c5f32 3596:S11|6e6f6e4c6f63616c4c5f33 3597:S7|63616c6c536c43 3598:S7|696f5665635f35 3599:S14|6f70636f64655f696f5665635f36 3600:S12|3c554e4b4e4f574e2039323e 3601:S12|3c554e4b4e4f574e2039333e 3602:S12|3c554e4b4e4f574e2039343e 3603:S12|3c554e4b4e4f574e2039353e 3604:S12|3c554e4b4e4f574e2039363e 3605:S12|3c554e4b4e4f574e2039373e 3606:S12|3c554e4b4e4f574e2039383e 3607:S12|3c554e4b4e4f574e2039393e 3608:S8|7265736574525f31 3609:S8|7265736574525f32 3610:S8|7265736574525f33 3611:S6|7475706c6557 3612:S6|7475706c6542 3613:S7|7475706c655f32 3614:S7|7475706c655f33 3615:S7|7475706c655f34 3616:S4|6c6f636b 3617:S5|6c64657863 3618:S9|696f5665635f323235 3619:S9|696f5665635f323236 3620:S9|696f5665635f323239 3621:S9|696f5665635f323333 3622:S9|696f5665635f323336 3623:S9|696f5665635f323531 3624:S9|696f5665635f323533 3625:S9|696f5665635f323535 3626:S10|73657448616e646c6572 3627:S13|3c554e4b4e4f574e203131393e 3628:S11|7075736848616e646c6572 3629:S13|3c554e4b4e4f574e203132313e 3630:S11|73657448616e646c657249 3631:S6|7461696c6262 3632:S4|7461696c 3633:S6|7461696c3362 3634:S6|7461696c3462 3635:S7|7461696c335f32 3636:S7|7461696c335f33 3637:S13|3c554e4b4e4f574e203132393e 3638:S13|3c554e4b4e4f574e203133303e 3639:S13|3c554e4b4e4f574e203133313e 3640:S13|3c554e4b4e4f574e203133323e 3641:S13|3c554e4b4e4f574e203133333e 3642:S13|3c554e4b4e4f574e203133343e 3643:S13|3c554e4b4e4f574e203133353e 3644:S13|3c554e4b4e4f574e203133363e 3645:S13|3c554e4b4e4f574e203133373e 3646:S13|3c554e4b4e4f574e203133383e 3647:S13|3c554e4b4e4f574e203133393e 3648:S13|3c554e4b4e4f574e203134303e 3649:S13|3c554e4b4e4f574e203134313e 3650:S13|3c554e4b4e4f574e203134323e 3651:S13|3c554e4b4e4f574e203134333e 3652:S13|3c554e4b4e4f574e203134343e 3653:S13|3c554e4b4e4f574e203134353e 3654:S13|3c554e4b4e4f574e203134363e 3655:S13|3c554e4b4e4f574e203134373e 3656:S13|3c554e4b4e4f574e203134383e 3657:S13|3c554e4b4e4f574e203134393e 3658:S13|3c554e4b4e4f574e203135303e 3659:S13|3c554e4b4e4f574e203135313e 3660:S13|3c554e4b4e4f574e203135323e 3661:S13|3c554e4b4e4f574e203135333e 3662:S13|3c554e4b4e4f574e203135343e 3663:S13|3c554e4b4e4f574e203135353e 3664:S13|3c554e4b4e4f574e203135363e 3665:S13|3c554e4b4e4f574e203135373e 3666:S13|3c554e4b4e4f574e203135383e 3667:S13|3c554e4b4e4f574e203135393e 3668:S13|3c554e4b4e4f574e203136303e 3669:S13|3c554e4b4e4f574e203136313e 3670:S13|3c554e4b4e4f574e203136323e 3671:S13|3c554e4b4e4f574e203136333e 3672:S13|3c554e4b4e4f574e203136343e 3673:S13|3c554e4b4e4f574e203136353e 3674:S13|3c554e4b4e4f574e203136363e 3675:S13|3c554e4b4e4f574e203136373e 3676:S13|3c554e4b4e4f574e203136383e 3677:S13|3c554e4b4e4f574e203136393e 3678:S13|3c554e4b4e4f574e203137303e 3679:S13|3c554e4b4e4f574e203137313e 3680:S13|3c554e4b4e4f574e203137323e 3681:S13|3c554e4b4e4f574e203137333e 3682:S13|3c554e4b4e4f574e203137343e 3683:S13|3c554e4b4e4f574e203137353e 3684:S13|3c554e4b4e4f574e203137363e 3685:S13|3c554e4b4e4f574e203137373e 3686:S13|3c554e4b4e4f574e203137383e 3687:S13|3c554e4b4e4f574e203137393e 3688:S13|3c554e4b4e4f574e203138303e 3689:S13|3c554e4b4e4f574e203138313e 3690:S13|3c554e4b4e4f574e203138323e 3691:S13|3c554e4b4e4f574e203138333e 3692:S13|3c554e4b4e4f574e203138343e 3693:S13|3c554e4b4e4f574e203138353e 3694:S13|3c554e4b4e4f574e203138363e 3695:S13|3c554e4b4e4f574e203138373e 3696:S13|3c554e4b4e4f574e203138383e 3697:S13|3c554e4b4e4f574e203138393e 3698:S13|3c554e4b4e4f574e203139303e 3699:S13|3c554e4b4e4f574e203139313e 3700:S13|3c554e4b4e4f574e203139323e 3701:S13|3c554e4b4e4f574e203139333e 3702:S13|3c554e4b4e4f574e203139343e 3703:S13|3c554e4b4e4f574e203139353e 3704:S13|3c554e4b4e4f574e203139363e 3705:S13|3c554e4b4e4f574e203139373e 3706:S13|3c554e4b4e4f574e203139383e 3707:S13|3c554e4b4e4f574e203139393e 3708:S13|3c554e4b4e4f574e203230303e 3709:S13|3c554e4b4e4f574e203230313e 3710:S13|3c554e4b4e4f574e203230323e 3711:S13|3c554e4b4e4f574e203230333e 3712:S13|3c554e4b4e4f574e203230343e 3713:S13|3c554e4b4e4f574e203230353e 3714:S13|3c554e4b4e4f574e203230363e 3715:S13|3c554e4b4e4f574e203230373e 3716:S13|3c554e4b4e4f574e203230383e 3717:S13|3c554e4b4e4f574e203230393e 3718:S13|3c554e4b4e4f574e203231303e 3719:S13|3c554e4b4e4f574e203231313e 3720:S13|3c554e4b4e4f574e203231323e 3721:S13|3c554e4b4e4f574e203231333e 3722:S13|3c554e4b4e4f574e203231343e 3723:S13|3c554e4b4e4f574e203231353e 3724:S13|3c554e4b4e4f574e203231363e 3725:S13|3c554e4b4e4f574e203231373e 3726:S13|3c554e4b4e4f574e203231383e 3727:S13|3c554e4b4e4f574e203231393e 3728:S13|3c554e4b4e4f574e203232303e 3729:S13|3c554e4b4e4f574e203232313e 3730:S13|3c554e4b4e4f574e203232323e 3731:S13|3c554e4b4e4f574e203232333e 3732:S13|3c554e4b4e4f574e203232343e 3733:S13|3c554e4b4e4f574e203232353e 3734:S13|3c554e4b4e4f574e203232363e 3735:S13|3c554e4b4e4f574e203232373e 3736:S13|3c554e4b4e4f574e203232383e 3737:S13|3c554e4b4e4f574e203232393e 3738:S13|3c554e4b4e4f574e203233303e 3739:S13|3c554e4b4e4f574e203233313e 3740:S13|3c554e4b4e4f574e203233323e 3741:S13|3c554e4b4e4f574e203233333e 3742:S13|3c554e4b4e4f574e203233343e 3743:S13|3c554e4b4e4f574e203233353e 3744:S13|3c554e4b4e4f574e203233363e 3745:S13|3c554e4b4e4f574e203233373e 3746:S13|3c554e4b4e4f574e203233383e 3747:S13|3c554e4b4e4f574e203233393e 3748:S13|3c554e4b4e4f574e203234303e 3749:S13|3c554e4b4e4f574e203234313e 3750:S13|3c554e4b4e4f574e203234323e 3751:S13|3c554e4b4e4f574e203234333e 3752:S13|3c554e4b4e4f574e203234343e 3753:S13|3c554e4b4e4f574e203234353e 3754:S13|3c554e4b4e4f574e203234363e 3755:S13|3c554e4b4e4f574e203234373e 3756:S13|3c554e4b4e4f574e203234383e 3757:S13|3c554e4b4e4f574e203234393e 3758:S13|3c554e4b4e4f574e203235303e 3759:S13|3c554e4b4e4f574e203235313e 3760:S13|3c554e4b4e4f574e203235323e 3761:S13|3c554e4b4e4f574e203235333e 3762:S13|3c554e4b4e4f574e203235343e 3763:C2,24|00823b2e2e2e3b0e0e4f000b0040000564440e0e0e0e0e0e|@3765,@3764| 3764:C15,304|00832b3f4d0028010e0c000303033b06d05707293b4d0117010c0003294d020f010c0002290c0001664d0303010c0002030c2d2c4d04f8000e0c000302232d3f4d04ec000e0c0003292d4d05e2000e0e0e0c0003293c4d05d6000e0e0e0c0003652f1b00014d06c7000c0003293b4d00be000e0e0e0c000303033c0218293b4d07ad000e0e0c00033c2a4d00a2000e0e0e0c000364030329020e291b00014d048e000e0e0e0c0003294d0883000c0002030329020b294d0976000e0e0e0c00022928ff4d0a69000e0e0c0003312e2b4d0b5d000e0e0c000450333b4d07510002024b000e0e0c0003293c4d0042000e0e0e0c0003030334020b3428ff4d0530000e0c0003291b00014d0c24000e0c0003333c4d041a000e0e0e0c00032a220e220e2c0e0e0e4f0d0700c1000527091f04|@3766,I229,I253,I189,I218,I106,I107,I110,I231,I105,I152,I243,@3199,I109,@3764| 3765:S24|494e54434f4445434f4e5328292e7365744c6f6e67283329 3766:S35|494e54434f4445434f4e5328292e7365744c6f6e672833297075744279746573283429 3767:C2,16|008056072c2a4d0006002e0e7e040003|@3158,@3157| 3768:C5,112|00812b354d0068004d0164000e0c000303082b362937296502162b353c4d014f000c000303062b37296402042b36296429354d023a004d0136000e0e0e0c00030316293656282e68012a2c2b4d0320000e0c0004260402023b5056172d68012a302b4d030a00317b050700040e0e0e0e|@3769,-1,I229,-5,@3288| 3769:S45|434f44455452454528292e67656e436f6465283229696e736572746564436f64652d656e746572446563283229 3770:C4,72|0080560a03225609040700284d2b2b4d0035000e0e0c000450292e2a4d0128000e0c0003260402023b505607292d56380e0c00035627292b4d020c00300e0e0e7e0600030e0e0e0e|@3772,@280,@339,@3771| 3771:O1|@3773 3772:S41|434f44455452454528292e67656e436f6465283229696e736572746564436f64652d6576616c283129 3773:C16,352|00812b354d0058014d0154010e0c000303032b06da2b353f4d0144010e0c000307cf2b362c372e2a4d0234010e0c000329354d032a014d0126010e0e0e0c000303032906d029354d0015014d0111010e0e0c000303252936294d0403010c000203054d05fa0010294d04f4000e0c000203054d06ea0010296402054d07e100103b2d3b4d01d9000e0e0c000303337876153b2d3b694d08c7000c00024d00c0002a6964051a0e00ff6d29353c4d01b0000e0c000303054d09a600100200316402603b2e293b4d0197000c000303032a021629362b3c4d0a87000c0003292b25042504511e203b6565294d04730002046b0032000e0e0c000203032902054d0b5f00102928403b4d0c56000e0e0e0c00043b312b02020b000e0e4f0d4300a0000466656602372b2d0e0e0c00027876133b3b2d0e0e0e0c00024d0024002a6964051a0e00ff6d29353c4d0114000e0c000303054d0e0a001002002d6464430e0e0e|@3775,-3,I229,@3771,-10,I105,@3776,@407,@3778,I204,@64,I106,@404,I11,@3774,@64| 3774:C14,208|00822c3b4d00c8000e0c000303442b4d01bd000e0e0c00025078761a3b5631293069644d02a9000e0e0c00024d03a0002a6964051b0e00ff6d29353c4d0090000e0c000303054d04860010020056176402782c352d365628292c4d0572000e0e0e0c000329354d0666004d0062000e0e0e0c0003030329024f29354d0351004d004d000e0e0c000303392936324d073f000c000203033202054d08330010312a2c4d092b000c000450333c4d0a21000e0e0c0003292f340e0e4f0b13009100046602054d0c0900102704440e0e0e0e0e|@3781,I229,I47,I204,-3,@64,@3771,-10,I105,@404,I255,I106,@3774,@3780| 3775:S22|434f44455452454528292e6576616c75617465283229 3776:O3|@7129,@237,@3777 3777:S30|436f64652061646472657373206973206e6f7420616e2061646472657373 3778:O3|@7129,@237,@3779 3779:S30|436f64652061646472657373206973206e6f74206120636f6e7374616e74 3780:O3|@7129,@237,@3782 3781:S33|434f44455452454528292e6576616c756174652832296c6f616441726773283329 3782:S36|526573756c74206f66206576616c75617465206973206e6f74206120636f6e7374616e74 3783:C6,96|00802b352c362d37293b4d0052000e0e0e0c0003033d2b355647292b4d0140000e0c0003293b4d0036000e0e0e0c000303104d022a002c3c303b68053b2a6964020e29352e2a4d031600340e7e0a00036602054d0409001066420e0e0e0e0e0e|@3785,I229,@460,-5,@233,@3784| 3784:O3|@7129,@237,@3786 3785:S50|434f44455452454528292e67656e436f6465283229696e736572746564436f64652d6c6f6f6b75704e657741646472283129 3786:S36|6f75746572206c6576656c207265616368656420696e206c6f6f6b75704e657741646472 3787:C1,16|00802b352c3656272d0e0e0e7e030003|@3788| 3788:S45|434f44455452454528292e67656e436f6465283229696e736572746564436f64652d656e746572446563283129 3789:C2,24|00802b352c3656272a68012a2d2b4d000600327b05070004|@3790,@3288| 3790:S48|434f44455452454528292e67656e436f6465283229696e736572746564436f64652d656e7465724e6577446563283129 3791:O1|@3792 3792:C11,168|00812c3b4d00a0000e0c000329353b4d0195000e0e0c000303033b02832936293b4d0083000c0003293b4d017a000e0e0e0c000303064d026e00023778760f3b2c3b3b4d0361000e0e0c0004050800ff6d4d045300102b3c2b3b2e4d0549000e0e0c000650294d063e000e0e0e0c00025029643b2a69313b2b4d072b000c000450314d0822000e0e0e0c000203054d09160010314d061000310e0e0e7d09000264430e0e0e0e0e0e|@3793,I253,I229,I49,I11,@87,I195,I47,I255,I105,@407| 3793:S22|5374726574636841727261792e667265657a65283229 3794:O1|@3795 3795:C2,16|00802b352c364d0006002d0e7e030003|@3797,@3796| 3796:O1|@3798 3797:S32|537472756374757265457175616c6974792e7374727563747572654571283129 3798:C20,728|00812c2c4d00d0020e0c000303033c06d62c4d01c2020e0e0e0c000203033b06c82b4d01b2020e0e0e0c000203033b06d32c4d02a2020e0e0e0c00022c4d0297020c00022a2a4d008e020e0e0e0c00034d0384020e0c000203033b06d42e4d0476020e0e0e0c00022e4d046b020c00022a2a4d0562020e0e0e0c00032928404d0655020e0e0c0003293b4d004a020e0e0e0c0003644d033f020c000203033b06d6293c4d0631020e0e0c0003293b4d0026020e0e0e0c0003644d031b020c0002039d2d3b4d0710020e0c000303104d0806022e4d0901020e0e0c000302012d293f4d0af3010204e801e6010e0e0c0003294d01e3010c0002030329020f294d0bd6010202cb010e0e0e0c00023b292b4d00c5010e0e0c000303033c023e220c2a4d0cb4010e0c0003220c2b4d0ca90102029d010e0e0c00032a2a4d009a010e0e0e0c0003650313293c4d0d8b010c0003292502501e473b6402013b270406cd2d3c4d0e73010c00030a01008000a1002d3c4d0f6301020256010c000329293b4d1055010e0e0c000303033c0237332a4d1145010e0e0c0003332b4d113a010e0e0e0c00032a2a4d122e010e0e0e0c0003650310293c4d0f1f010c000325011e413b02013b650321313b4d110b010c0003313b4d1102010e0e0e0c00032a2a4d12f600340e7e0b00033b06ca313b4d11e7000c0003313b4d11de000e0e0e0c00032a2a4d12d200340e7e0b0003313b4d11c6000e0e0e0c0003323c4d11ba000e0e0e0c0003323b4d11ae000202a1000e0e0e0c0003333c4d119e000e0e0e0c00032c4d0193000c0002031d2c2b4d0088000e0c0003030e2b2a4d127c00220d0e0e7e0d00033b02662a4d016c000e0c000203033b02582b4d015e000e0e0e0c0002031d2b2a4d0050000e0c0003030e2c2b4d124400220d0e0e7e0d00033b022e294d0134000e0c000203033b02202c2b4d122500020218000e0e0c0003030e2b2a4d121400220d0e0e7e0d00033b27046665430e0e0e0e0e0e|@3799,I251,I105,I15,I218,I17,I242,I243,I234,@190,I106,I108,I152,I252,I239,I107,I240,I229,I253,@3796| 3799:S32|537472756374757265457175616c6974792e7374727563747572654571283229 3800:C3,48|00802b3b4d0028000e0c000303091201000100deff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1555,I229,@3800| 3801:O1|@3802 3802:C6,104|00802b4d0061000e0e0c00024d0158000e0c0002034d2b36293b4d024a000e0e0e0c000303362c3529354d033a004d0236000e0e0e0c0003030628092e69021929354d0422004d021e000e0e0e0c0003030628092e6902012964020428092d6964020428092c6942|@3803,I105,I218,I229,-4,-9| 3803:S21|434f44455452454528292e77726170456e76283129 3804:C1,8|00805607420e0e0e|@3805| 3805:S24|434f44455452454528292e67656e436f6465283229283129 3806:C2,24|00803b56170c00024d000c002a693b2a6928052a6966420e|@3805,-3| 3807:C1,16|0080560728052a6964420e0e0e0e0e0e|@3805| 3808:O1|@3809 3809:C6,144|00802b3b4d0088000e0c000303033b02782b3529354d0177004d0073000c0003033729362d362a4d0265000e0e0c00022a4d025b000c0002293b4d0052000e0e0e0c000303032a020c3b2b0e0e4f033f00600002642704022f29354d0431004d002d000e0e0c000303112c36294d021f000c00022b2a692966020d2c36294d020e002e0e7d05000264420e0e0e0e0e0e|@3811,I229,-9,@3808,@3810,-4| 3810:C3,40|00802b3b4d0020000e0c00030304560002142b352c36290e0e4f010b002100022b2a69292704420e|@1555,I229,@3810| 3811:S36|434f44455452454528292e67656e436f6465283229657870616e644d757475616c283129 3812:O1|@3813 3813:C8,120|00812b3b4d0070000e0c000303033b02612b3529354d015f004d005b000c0003034a29362d362a304d024c000e0c0003030e2f2a4d034000300e0e0e7e0700033b2f0e0e0e4f042f00400002313c4d0526000e0e0e0c000329324d031a000e0e0e0c00032b2a6929270702054d0608001064430e0e0e0e0e|@3815,I229,-4,I234,@3812,@3816,I106,@3814| 3814:O3|@7129,@237,@3820 3815:S33|434f44455452454528292e67656e436f646528322967657456616c756573283229 3816:C9,136|00802b3b4d0080000e0c000303064d01760002722b3529354d026c004d0068000e0c0003035a29362a372e3656482c2a4d0354000e0c0003644d044b000c0002030c290e0e4f053f00410002022f2a353e4d0033000c000303162a3656584d0626002a3c3b3b6805280b2a2d6a66020d56484d0612002a3c3b3b6805646602054d0704001064420e|@3818,I229,@510,-4,I113,I218,@3816,-5,@3817| 3817:O3|@7129,@237,@3819 3818:S45|434f44455452454528292e67656e436f646528322967657456616c75657328322966696e64456e747279283129 3819:S21|66696e64456e7472793a206e6f74204465636c6172 3820:S23|67657456616c7565733a206e6f742061204465636c6172 3821:C3,48|00802b3b4d0028000e0c000303091201000100d9ff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1555,I229,@3821| 3822:O1|@3825 3823:O3|@7129,@237,@3824 3824:S31|526573756c7420766563746f72206973206e6f7420616e2061646472657373 3825:C2,8|00804d000200100e|@449,@448| 3826:O2|@3828,@3827 3827:O2|@3960,@3959 3828:C6,96|00813b4d005900040200280628403b4d014d000e0e0c0004293b28054d0240000e0c0004504d0337002a693c28402b4d012d000e0e0c00042c2a453b46502c3c28403b4d0119000e0e0c000433302c2c0e4f040b00b00005292709430e0e0e0e|@3830,@3831,I11,I255,-1,@3829| 3829:C5,192|0083040200280628403b4d00b2000e0e0e0c0004293b28054d01a4000e0c0004504d029b002a693c28402b4d0091000e0e0c00042c2a453b46502c352d040200280628403b4d0077000c0004293b28054d016c000e0c0004504d0263002a693c28402b4d0059000e0e0c00042c2a453b46502c040200280628403b4d0041000e0e0c0004293b28054d0134000e0c0004504d022b002a693c28402b4d0021000e0e0c00042c2a453b46502c3b3b3b3b22191603000a0016000000000227141f04|@3837,I11,I255,-1,@3836| 3830:S21|434f44455452454528292e707265436f6465283229 3831:O1|@3832 3832:C2,8|00804d000200100e|@3834,@3833| 3833:O3|@7129,@237,@3835 3834:S37|434f44455452454528292e707265436f6465283229696e736572746564436f64652d283129 3835:S31|6f75746572206c6576656c207265616368656420696e20636f7079436f6465 3836:C31,912|00803b3b2d354d0086034d0182030e0e0e0c00030a1600020396012e007c014e029402a6002e00d5005500d8003800c902b201ff025b004103c1004b023500cc01f10125034d0247031006dc2d06db2d362e37290e4f0337034100022b4f032f035100023b2a2c6a270406d94d04200306d52d362e373b2b0e4f0513035000022b354d060a034d0706030e0e0e0c0003031a2b362c372d382e392c2c2c2c6b3b2a4f08eb02c10003270502082b4f03df026100023f2b2b3b6b270506dc2d362e372f3830392c2c2c2c6b3c2a0e4f08bf02810003270506da2d362e372a4f03af0241000228062a2c6a6606c82d06dd2d362e3729293b4d0796020e0e0e0c000303033b026c29352a362a354d0981024d077d020e0e0c0003034a2a361209000100f9ff292b3b0204630261024d0a60020e0c000450120a000100f4ff292c3b4d0a4d020204460244020c000450120b000100efff292d3b4d0a35020e0e0c0004260502054d0b280210292503511e793b65642b0e0e4f0317025100023b2c0e0e0e4f0c0b027000024d0d04022c2b6a270606da2d363b2a0202f2010e0e4f0eef014000024d0fe8012a696606dd2d36290204d901d7010e0e0e4f03d3013100024d10cc012a696506d32d0202bf01362e372f382b2b2b0e0e0e4f11b3017100046606d12d363b3b3b2c4f12a3016000023b2a0e0e0e4f139701800002294d148f01220c0e7d0c00022d363b2a0e4f157f01400002402a692a293b4d0772010e0e0e0c000303033c021f293529354d165f014d075b010c0003030c2a36292503511e283b6402013b64640312294d1740010e0c00024d1638012a6964020129270406dd2d06dc2d363c28403c02021e014d181d010e0e0c0004292b352c362d372e382f39303a312306020201013223070e0e4f19fb00c0000a3c2a0202ef000e0e0e4f1aeb006000036606d02d362e372f382a0202d7000e0e0e4f03d3005100022c4f03cb006100023b2c0e0e0e4f1bbf008000024d1cb8002c2e2c6b270702ad2d3629352a362b372c382d393b2b0e0e0e4f1d9b009000022b4f039300a100022e4f038b00b1000231312b2e2e68053c2a69270b02772d02742d362e372f38290e4f036b005100022b4f0363006100024d005c002e2b2d6b270502512d02044c004a00362e372a0e0e4f034300410002280b2a2c6a6602352d3629354d0d30004d072c000e0c00030308293629372965021a29353c4d071700020210000c00030306293729640204293629646465420e|@3839,-11,I107,@3840,@3836,@440,@3842,-5,I229,@3844,-4,@3288,@3846,@3848,-1,@3851,-8,-10,@3852,@3907,@3950,@3801,@3957,-3,@3098,I11,@3910,@3925,@3958,-6,@3838| 3837:S32|434f44455452454528292e707265436f6465283229636f7079436f6465283429 3838:C4,64|00802b3b4d0038000e0c000303033b022c2b352c36290e0e0e4f0123002100020402002c352d362a0e4f0213006200022c2a452b46502c292f69292709420e0e|@3843,I229,@3838,@3836| 3839:S41|434f44455452454528292e707265436f6465283229636f7079436f6465283429696e73657274283129 3840:O3|@7129,@237,@3841 3841:S19|756e6b6e6f776e20696e737472756374696f6e 3842:C4,48|00802b3b4d0028000e0c000303033b021d2b352c36290e0e0e4f0113002100022b4f020b00320002292b69292705420e|@3843,I229,@3842,@3836| 3843:S41|434f44455452454528292e707265436f6465283229636f7079436f64652834297265766d6170283229 3844:C9,264|00812b352c37293b4d00fc000e0c00034d01f4000e0c000203033c020b2a3b4d00e5000e0e0c0003030e2d2a306a56392e0e0e0e7d0600022a3b4d02ca000e0e0e0c0003033c2a4d03bd000e0e0c00025638292b4d04b0000e0c00035658292d3c4d05a3000c0004502a4d019a000e0e0e0c00024d069000303c3b2d68052705027f1203000100efff292c4d0479000e0e0c0003294d076f000c00024d0168000e0c000203062935296402541205000100f9ff292e4d044f000c00033203141207000100f4ff29303c4d053b000c00045102023b501207000100f9ff29303c4d0525000e0e0c0004502a4d011a000e0e0e0c00024d061000313c3b2d680527046565430e0e0e0e0e|@3845,I113,I218,I234,I111,@460,@3288,-5,I105| 3845:S42|434f44455452454528292e707265436f6465283229636f7079436f64652834296c6f6361646472283229 3846:O3|@7129,@237,@3847 3847:S29|6465636c6172654172673a206e6f742061206465636c61726174696f6e 3848:C7,112|00802b3b4d0068000e0c000303033b025a2b352c36290e0e0e4f0153002100022b354d024a004d0046000e0e0e0c0003032e2b362c371206000200f9ff292c3b4d032c000e0c0004502a0e0e0e4f041f006200024d0218002d2b3c6b270402054d050c0010292b69292705420e0e0e0e|@3843,I229,@3848,-4,@3288,@3836,@3849| 3849:O3|@7129,@237,@3850 3850:S26|636f70794465633a206e6f742061206465636c61726174696f6e 3851:C4,48|00802b3b4d0028000e0c000303033b021d2b352c36290e0e0e4f0113002100022b4f020b00320002292b69292705420e|@3843,I229,@3851,@3836| 3852:C21,744|00823b0e0e4f00df020100022d4f01d7021100023b4f00cf022100022b4f02c7023100022f4f01bf024100023b4f00b7025100020402002d2b2b4d03aa020e0e0e0c00045029352a362f0e0e0e4f049702910002220e0e0e0e4f018b02a10002294d0583020c0002293b4d067a020e0e0e0c0003031e332d4d076c020e0c0003312f4d0762020e0e0e0c00033d2d2c2c6b6506d229352a362b372c38040200220c353c4d0641020e0e0c000307dd220c3629352a362b372c382d39302c4d0827020c0003294d091f020c00024d0a18020e0c000207da2938293c4d060a020e0e0e0c000307d22a352b3722152b2b4d0bf6010e0e0e0c0004040200221a22182b4d03e4010e0c00045029352a36221c2f2f4d0cd3010c0004036c221d2a4d07c7010c0003292212693b220c0e0e160d00b6012400000000022b2a69220d304d07a6010e0e0e0c0003221722124d0e98010e0c00030304221702022211221922144d0f8401020279010e0c00030304221902022213292b22192f2f680522173c452a46260a0272221d2a020211014d0757010c0003292212693b220c0e0e16100046012400000000022b2a69220d300202b5004d073201020242000e0e0e0c0003221722124d0e20010e0c00030304221702022211221922144d0f0c010e0c00030304221902022213292b22142f2f680522173c452a46260a26060268221722114d07e4000e0c000329220c693b2f0e0e0e161100d2001e00000000022b2a693022174d07c2000e0e0e0c00032211220c4d0eb4000e0c0003030422110201342213220e4d0fa1000e0e0c0003030422130202220d292b220e2f2f680522113c452a46260a500233221622104d0779000e0e0c0003293469293b69221622144d0766000e0e0e0c0003220f220f220e2d2d6805220c3c452a46260626070240220f324d0743000c0003292d69293b69220f354d1233004d062f000c000303064d1326000202220f29220e4d071b000c00033232312e2d68052f3c452a462607292705270c440e0e0e0e|@3854,@3855,@3836,@3857,@3864,@3876,@3878,I229,@3892,@3886,I105,I218,@3897,@3902,@3905,I234,I233,@3906,@3853,-2,@510| 3853:C4,64|00802b3b4d0038000e0c000303033b022d2b352c362a352b361205000100f7ff2b2a4d011a000e0e0e0c0003292c692e0e4f020b007100022a2a69292709420e|@445,I229,@3892,@3853| 3854:S43|434f44455452454528292e707265436f6465283229636f7079436f6465283429636f7079436f6e64283329 3855:C9,360|00805600293b4d005e010e0e0e0c000329354d0152014d024e010e0e0e0c000303122936293b4d003e010e0e0e0c00032965020e2936294d032d010e0e0c0002296556382935293b4d001c010e0c000329354d0112014d020e010e0e0e0c000303122936293b4d00fe000e0e0e0c00032965020e2936294d03ed000e0e0c000229651208000100f9ff3b3b29314d04d7000c000303032a023e2b2a4d05c9000e0e0c0003031a293c4d06bc000e0c00032a2c69292b25042504511e2f3b650217293c4d06a2000e0e0e0c00032b2a25032503501e483b646556983b3b292f4d0486000e0e0e0c000303032a023e2b2a4d0575000e0e0c0003031a293c4d0668000e0c00032a2c69292b25042504511e323b650217293c4d064e000e0e0e0c00032b2a25032503501e4b3b64653c28402d4d0734000e0c00043c28402c4d0728000e0c000456d7293b4d001c000e0c00033c28402b4d0710000e0c00042c2a2f6a292711420e0e0e0e|@3856,I253,-1,I229,I15,I113,@460,I106,I11| 3856:S45|434f44455452454528292e707265436f6465283229636f7079436f646528342973617665557361676573283129 3857:C8,248|00802b35293b4d00ee000e0e0e0c00032d37293b4d00e0000e0c00032f3656582935293b4d00d0000e0c000329354d01c6004d02c2000e0e0e0c000303122936293b4d00b2000e0e0e0c00032965020e2936294d03a1000e0e0c00022965293c4d0494000e0c000356a829332c4d0587000c00045056b0293b4d007b000c000329354d0172004d026e000e0e0e0c000303122936293b4d005e000e0e0e0c00032965020e2936294d034d000e0e0c00022965293c4d0440000e0c00031210000100f9ff29220d2c4d052d000e0e0c00045012110001000100220c3b4d0019000e0e0c00032a3b2b4d060d000e0e0c0004503b2712420e0e0e|@3859,I253,-1,I229,I15,I107,@3858,I255| 3858:O1|@3860 3859:S45|434f44455452454528292e707265436f6465283229636f7079436f6465283429736574546f5361766564283129 3860:C8,192|00822b3b4d00b8000e0c000303162c3b4d01ac000e0c000303033b02054d029f001002942c3b4d0196000e0e0e0c000303262d2c3b4d0387000c0004502b3c4d047d000e0e0c00032e3b2b4d0571002f0e0e0e7b050600042c352d362a2e4d065e000e0e0e0c000303262f2e3c4d034f000c0004502d3c4d0445000e0e0c0003302b2b4d053900310e0e0e7b050800042f2e3b4d0329000e0e0c0004502d3c4d041d000e0e0c000330302b4d051100310e0e0e7b05080004440e0e0e0e0e0e0e|@3862,I234,I229,@3861,@3288,I107,@3858,I113| 3861:O3|@7129,@237,@3863 3862:S57|434f44455452454528292e707265436f6465283229636f7079436f6465283429736574546f5361766564283129636f70794172726179283329 3863:S21|736574546f53617665643a206e6f7420656d707479 3864:O1|@3865 3865:C8,224|00822d35293b4d00d6000e0e0e0c00032f37293b4d00c8000e0c000331363135293b4d00ba000e0e0e0c00033337293b4d00ac000e0c0003220c360402003b3b2f220c4d0199002e4d0294000e0c00075029352a360402002a2c30220d4d037f002e4d027a000e0e0e0c00075029352a36040200220c3b4d0065000e0e0c0003313b4d005a000e0e0e0c00032a2a4d044e000e0e0e0c0003650308292c452b46500229220c3b4d0036000e0e0e0c0003030e4d052a002c692a2a452c4651020c4d061c002b692a2d452a465129352a3622152b452a462713440e0e0e0e0e0e0e|@3867,I253,@3868,@3870,@3873,I229,@3866,@3866| 3866:O5|-5,0,0,0,1 3867:S50|434f44455452454528292e707265436f6465283229636f7079436f6465283429636f6d707574654b696c6c53657473283329 3868:O1|@3869 3869:C2,16|00802b4d0009002c0e8000020e0e0e0e|0,I111| 3870:O1|@3871 3871:C6,280|00852d3b4d0010010e0c000303442e3b4d0004010e0c000303072b30453146022f2e352f362a2f0e0e0c00024d01e8002a3c3b3c680529220c6929220c2e3b220c220c4d02d100220d0e0e7b080d000702c22d352e36303b4d00bc000e0c0003032a2a2f0e0c00024d01ac002a3c3b3c6805293469220c2a3b2f220c220c4d029600220d0e0e0e7b080d0007303531362c2b4d0382000e0e0e0c0003031234342b2e34344d027000220c0e7b080c00072c2b4d0462000e0e0e0c0003032a2a310e0c00024d0150002a3c3b3c680529220e6929220e2e220e220e220e4d023800220f0e7b080f00072c310e0e0e0c00024d0124002a3c3b3c680529220d69220e2a220e31220e220e4d020c00220f0e7b080f00071f060e0e|@3872,I229,-5,@3870,I113,I234| 3872:S61|434f44455452454528292e707265436f6465283229636f7079436f6465283429636f6d707574654b696c6c536574732833296b696c6c53657473283629 3873:O1|@3874 3874:C1,8|00802b420e0e0e0e|@3875| 3875:S63|434f44455452454528292e707265436f6465283229636f7079436f6465283429636f6d707574654b696c6c536574732833293c7061747465726e3e2d283129 3876:C5,160|00802b35293b4d0096000e0e0e0c00032d37293b4d0088000e0c00032f3656582d293b4d0179000e0e0c000303043b50021629352a362c2b3c4d0263000c000450292503511e2451501207000100f9ff2c293b4d0149000e0e0c000303043b50021629352a362c2b3c4d0233000c000450292503511e2451502b3b4d0021000e0e0c000303135677293b3c4d0311000e0e0c0004503b6402013b2707420e0e0e|@3877,I253,I229,@3288,I255| 3877:S47|434f44455452454528292e707265436f6465283229636f7079436f646528342961646446726f6d5361766564283129 3878:O1|@3879 3879:C17,608|00802b353f4d0057020c000307dc2b362c3729354d0148024d0044020e0c000307d12936294d0037024d0233020c000303033c0223294d0326024d0222020e0e0e0c000303033c020f294d0212024d020e020e0e0e0c000307d22b4d0401020e0e0c00024d05f8010e0c000207d12b36294d04eb010c00024d05e4010e0c000207cb2936293b4d00d6010e0e0e0c000307dc2a3529354d01c6014d00c2010e0e0e0c0003037829362f3529354d01b0014d00ac010e0c000303322936294d049f010c00020320294d0495010e0e0c000203032902054d06870110293b692a2b2b316b296602013b6402319c002a4d046f0102028f000c000203202a4d0461010e0e0c000203032a02054d07530110293b692a2b2b2e6b296602013b6502542e3529354d013a014d003601020252000e0e0e0c0003033a2936294d04230102023c000c00020324294d04150102022a000e0e0c000203032902054d08030110293b692a2b2b306b296602013b64020305003b646402013b6402013b6402013b02013b6402013b6502d42b353c4d00d1000e0e0c000303c52b3629352a362b372c382d39294d09b9000e0e0c00022b4d0aaf000c00022a4d04a7000c00024d05a0000e0c000203902a352b362c372d382d4d048d000e0e0c00024d0584000e0c0002036f2d35322b4d0b76000e0e0e0c0003293b4d0c6a000e0e0e0c0003644d055f000c000203472b3b4d0054000e0c0003030329020c3b2a0e0e4f0d4300e0000264342e4d0e39000e0e0c000303033402012d220d304d0f27000c00030304220d02012f292b2d306b29270402013b6402013b270402013b270802013b420e0e0e|@3881,I229,-3,I251,I113,I105,I218,@404,@404,@404,@3878,@3882,@3886,@3889,@3880,I234,I233| 3880:C3,48|00802b3b4d0028000e0c000303091201000100f4ff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1555,I229,@3880| 3881:S54|434f44455452454528292e707265436f6465283229636f7079436f6465283429636f7079436f6e6428332966696e6443617365283129 3882:O1|@3883 3883:C7,136|00802b3b4d0080000e0c000303064d017600026f2b3529352a362e362b354d0266004d0062000e0e0e0c000303112b36293c4d0352000e0e0e0c00036402013b033e294d0441000e0e0c0002293b4d0036000e0e0e0c000303033b02202935293b4d0023000c000303032c020c3b2d0e0e4f05130070000264296801656402013b2704420e0e0e0e|@3885,I229,@992,-3,I251,@3882,@3884| 3884:C3,48|00802b3b4d0028000e0c000303091201000100f9ff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1555,I229,@3884| 3885:S67|434f44455452454528292e707265436f6465283229636f7079436f6465283429636f7079436f6e6428332966696e6443617365283129636865636b4361736573283129 3886:O1|@3887 3887:C6,208|00812b354d00c8004d01c4000e0c000303652b362c372d382e392c2c2c2c6b31354d00ab004d01a7000c0003034431363237333834392c2c2c2c6b322e4d028f000c0003031b302c4d0284000e0c0003030c312d4d0178000e0c000302013b02013b03092f03032e02012902013b270502013b270502512b3528064d0151000e0e0c000303412b362c372e3528064d013e000e0e0e0c000303292e362f372b2a4d022c000e0c00034d0324000e0c000203033b020b2a2d4d041500317e0800036502013b6502013b430e0e0e0e0e0e0e|@3888,-5,I229,I113,I218,@3886| 3888:S53|434f44455452454528292e707265436f6465283229636f7079436f6465283429636f7079436f6e6428332973696d696c6172283229 3889:O1|@3890 3890:C6,144|00812b2d4d0088000e0c000303033c02782b4d017a000e0e0e0c00024d0270000e0c000203622c4d0165000e0e0c00024d025c000e0c0002034b2b352d352a2a4d034c000e0c00036503372b362d362a2a4d043b000c00036503242b372d372a2a4d032b000c00036503112b382d382a2a4d041b002f0e0e7e0600033b02013b02013b02013b02013b430e0e0e0e0e0e|@3891,I251,I105,I218,I113,I229| 3891:S27|65712d434f44455452454528292e73696d696c6172697479283229 3892:O1|@3893 3893:C4,120|00812b3b4d0070000e0c000303032c02620402002d3528094d005c000e0c000303292d36293b4d004e000e0e0e0c000303032d020c3b2e0e0e4f013b00300002642b2809452a46260302262d3b69293b4d0024000e0c000303032d020c3b2e0e0e4f021300300002642b2809452a4626032964430e0e0e0e|@3895,I229,@3896,@3894| 3894:C3,40|00802b3b4d0020000e0c00030304560302142b352c36290e0e4f010b002100022b2a69292704420e|@1555,I229,@3894| 3895:S56|434f44455452454528292e707265436f6465283229636f7079436f6465283429636f7079436f6e642833296164644b696c6c536574283229 3896:C3,40|00802b3b4d0020000e0c00030304560302142b352c36290e0e4f010b002100022b2a69292704420e|@1555,I229,@3896| 3897:O1|@3898 3898:C7,136|00822d352e362f372e3b4d007a000e0e0e0c0003030e2a3b3b4d016b000c0004503b025b2f3b4d025e000e0e0e0c000303272b3b4d0350000e0c00033b2a0e0e0e4f0443005000022e3b2b4d0139000e0e0c0004503b660226293b4d0329000e0e0c00033b2a0e0e0e4f051b005000022c3b2b4d0111000e0e0c0004503b6666440e0e0e0e0e0e0e|@3900,I233,I255,I234,I253,@3901,@3899| 3899:C5,72|00802b3b4d0040000e0c000303033b02342b352c3656282b2a4d012b000c0003644d0223000c00020311290e0e4f0317002100022b2a6929650209290e4f03070021000265420e0e|@166,I229,I113,I218,@3899| 3900:S45|434f44455452454528292e707265436f6465283229636f7079436f646528342972656d6f76654974656d283329 3901:C6,88|00802b3b4d0050000e0c000303033b02402b352c3656284d013d000e0e0c00022b2a4d0232000e0e0e0c0003644d0327000c00020311290e0e4f041b002100022b2a6929650209290e4f040b0021000265420e0e0e0e0e0e|@166,I229,I111,I113,I218,@3901| 3902:O1|@3903 3903:C7,184|00822d35293b4d00ae000e0e0e0c00032f37293b4d00a0000e0c00033136303b4d0194000e0c0003030e293b4d008800320e0e0e7e0a0003313b4d027a000e0e0e0c0003033b2c293b4d036b000c000303033b022929352a36344d045a000e0e0e0c00022b2a4d054e000e0e0e0c00036403033c0207292503511e333b6564022d2a293b4d0330000e0c000303033b021c29352a362a220c4d051c000e0c000303033c0207292503511e273b65642705440e0e0e0e0e0e0e|@3904,I253,I233,I234,I229,I111,I113| 3904:S40|434f44455452454528292e707265436f6465283229636f7079436f6465283429696e536574283329 3905:C4,64|00802b3b4d0038000e0c000303033b022d2b352c362a352b361205000100e1ff2b2a4d011a000e0e0e0c0003292c692e0e4f020b007100022a2a69292709420e|@445,I229,@3892,@3905| 3906:C4,64|00802b3b4d0038000e0c000303033b022d2b352c362a352b361205000100e1ff2b2a4d011a000e0e0e0c0003292c692e0e4f020b007100022a2a69292709420e|@445,I229,@3892,@3906| 3907:C20,616|00802b3b4d0060020e0c000303033b06db2b3529354d014f024d004b020c000307cc29362a372e361205000200f9ff292d3b4d0232020e0e0e0c00041207000200f4ff292f3b4d021e020e0e0e0c00042e354d0312024d000e020e0e0e0c000303191209000200efff2f68012a322b4d02f5010e0e0c00046502121209000200efff29313b4d02df010c0004642e0e0e0e4f04d301910002120b000200f9ff29334d05c3010c0003294d06bb010c0002031032120e00040001000e0e0e0c000202013b03032b02a432354d079a014d0096010e0e0e0c000303663236120e000200f4ff29220d4d057e010204750180000e0c00033c28402b4d086c010e0c0004292d352e362f3730383139323a3323063423070e0e1609004e011a000100000a2a3b4d0a42010e0e0e0c0003292b0e0e0e160b00320115000100000327060208324f0c2301c20002120e000200f9ff29220d3b4d0211010e0e0c0004504d010701220d2c2e6b292f69292704270b06d029354d0df2004d00ee000e0e0e0c0003039129362d363b2b293b4d00da000e0e0e0c000303033b021829352a362a0e0e0e4f0ec30070000250292503511e253b65642b0e0e4f04af005100023b3b2f0e0e4f0fa3008000023b3b3b3b2d4f109700d000040e4f118f00b00002293b4d0086000e0e0e0c000303032f02222936293b4d0073000c000303092a352932692965020b4d0d61002b69293269296564270b024f2c36290e0e0e4f044b002100022b4f0c4300320002293528094d0038000e0c0003032629362b3b4d002a00020220000e0e0e0c0003030329020c3b2a0e0e4f12130060000264640205292b6929646664420e0e0e0e|@3909,I229,-4,@3288,-3,@3907,@460,I218,-7,I11,@3910,I253,@3925,@3836,-9,@3930,@3934,@3939,@3946,@3908| 3908:C3,40|00802b3b4d0020000e0c00030304560202142b352c36290e0e4f010b002100022b2a69292704420e|@1555,I229,@3908| 3909:S60|434f44455452454528292e707265436f6465283229636f7079436f6465283429696e73657274283129636f70794465636c61726174696f6e73283129 3910:C14,360|00883c28403b4d005e010e0e0e0c00043c28403b4d0050010e0c00043c28403b4d0044010e0c00044d013c012a220f2d2f1209000200f4ff120a000200efff57a96808323c4d021f010c00030402002a3c4d0213010c00032928403b4d0008010e0c0004293b2e4d03fd000e0e0c0004504d04f3002a693c28402b4d00e9000e0e0c00042d2a453b46502d4d05d900316922152a2c220c0e0e4f06cb00f300053b3c0e0e0e4f07bf00e00002293b4d08b6000e0e0e0c000303032b02292b3b69293b4d08a2000e0e0e0c000303032a02103b2b0e0e1609008e001300000000026428092a6965220f3b4d0a7b000c00033b2a4d0872000e0e0e0c0003640335220d3b4d0a62000e0e0e0c00032a221a221a3b221a221a2f3c68084d0b4a002a6912140003000200292b4d0c3b0022180e7e1f0003220f3b4d0a2d000e0e0c0003220e3b4d0a21000e0e0c00032b221b221b2d221b221b2f3b68084d0b0a002a6927131f090e0e0e0e|@3912,I11,@3913,I106,I255,-1,@3921,@3829,@3923,I229,@3911,I253,-7,@3771| 3911:C3,48|00802b3b4d0028000e0c000303091201000100efff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1555,I229,@3911| 3912:S54|434f44455452454528292e707265436f6465283229636f7079436f6465283429696e73657274283129636f70794c616d626461283929 3913:C18,528|00822d352e363b2f3b4d0003020c0003036c2b3b4d01f8010e0c00034d02f0010e0c000203033c02012a03054d03e001103b2f03145648293b3c4d04d2010e0e0e0c0004503b6402013b5657293b4d05be010e0e0e0c00035677293b3c4d04af010c0004502a4d02a6010e0e0e0c00024d069c013b3b3b2d6805270606ce2f3c4d008c010e0c0003030c2b3b4d0780010e0c000302013b03902a4d0272010e0e0e0c000203054d086601103b564c292e4d095c010e0c0003294d0a53010c00024d024c010e0c00020306293529640256310310566b29303c4d0b34010e0c00046402013b5677293b4d0524010e0c00035697293b3c4d0417010c00045056aa293b4d050b010c000356c9293b4d0500010e0c00032e2a2d0e0e160c00f20012000000000427086606cd2f3c4d00e1000e0e0c0003030c2b3b4d0dd4000e0c000302013b03572a4d02c6000202bd000e0e0e0c000203054d0eb600103b5647293b4d05ac000e0c00035667293b3c4d049f000c000450567a293b4d0593000c00035699293b4d0588000e0c00032e2a2d0e0e4f0c7b00d000042708026f2f3c4d0f6e000e0e0e0c0003312a316a64564d0e0e0c000229354d1056004d0052000e0e0e0c000303032902415647293b4d053f000c00035667293b3c4d0433000c000450567a293b4d0527000c00035699293b4d051c00020213000e0c00032e2a2d0e0e4f0c0b00d0000427076466440e0e0e|@3915,I229,I113,I218,@3914,I255,I253,-5,I233,@3914,@460,I105,@3288,@3916,I234,@3914,I107,-3| 3914:O3|@7129,@237,@3920 3915:S61|434f44455452454528292e707265436f6465283229636f7079436f6465283429696e73657274283129636f70794c616d62646128392970726576283329 3916:C11,288|00822b3b4d0018010e0c00030378570a56145628293c4d0106010e0e0e0c000356434d02fa002d2b2d3b6805576a293b4d03ec000e0c00032b2a69313b2b4d04de000e0e0e0c0004505799293b4d03cf000c0003293c4d05c6000e0e0e0c000357c9293b2c4d04b7000c00045022114d06ad000e0e0c00024d02a4002c3b3b2d6805270e02992b3529354d0292004d008e000e0e0e0c0003037f29362a372b382f3656542d2a4d0776000e0e0e0c000364032f5658293c4d0165000e0e0c00032c2a4d075a000e0e0e0c000365031056532c2a4d0049000e0e0c00036402013b02013b0318324d0636000e0e0e0c00024d022c00333b3b2d6805640218313c4d011d000e0e0c0003332a2c0e0e4f080f0081000464270402054d090300106444|@3918,I229,I107,-5,I253,I255,I106,I218,I113,@3916,@3917| 3917:O3|@7129,@237,@3919 3918:S80|434f44455452454528292e707265436f6465283229636f7079436f6465283429696e73657274283129636f70794c616d626461283929707265762833296d616b65436c6f73757265456e747279283329 3919:S40|6d616b65436c6f73757265456e7472793a20636c6f73757265206973206e6f742045787472616374 3920:S23|707265763a206261646c792d666f726d6564206c6f6164 3921:C1,16|00802b352c362d3756372e7b05030004|@3922| 3922:S61|434f44455452454528292e707265436f6465283229636f7079436f6465283429696e73657274283129636f70794c616d62646128392970726576283129 3923:C8,120|0080560a2c2a4d006e000e0e0e0c00036403033b025e1201000100f4ff292d4d0155000e0e0c0003644d024b000c0002032e2b4d0341000e0e0c00024d0438002a3c3b3c68052d3c4d052c000e0c00030e4f0623002100022a2a6929270402142b3c4d0512000e0e0e0c00030e4f060700010002420e0e0e|@3924,I233,@460,I218,I111,-5,I106,@3923| 3924:S65|434f44455452454528292e707265436f6465283229636f7079436f6465283429696e73657274283129636f70794c616d6264612839296164644b696c6c73283129 3925:C4,104|00812b354d0060004d015c000e0c000303542b3629352a362b372c382d392e3a2f23063b2d4f023f00900002293b2a3b4d0134000e0c000303032902132a352b362a2c692a2a2505250526031e1e3b66653232322c323232221568084d0008002a69270c02012b43|@3927,-7,I229,@3926| 3926:C6,96|00802b3b4d0058000e0c000303033b02492b352c362a354d0145004d0041000e0e0c0003031e2a362b372c382d392c2c2c2c6b5678292b0e0e4f022300930003270602054d031800102a0e0e0e4f040f003100022a2a69292705420e0e0e0e0e|@445,I229,-5,@3844,@3928,@3926| 3927:S59|434f44455452454528292e707265436f6465283229636f7079436f6465283429696e73657274283129636f707950726f63436c6f73757265283229 3928:O3|@7129,@237,@3929 3929:S26|6d616b654c6f616473202d206e6f7420616e2045787472616374 3930:C6,120|00802b354d0070004d016c000e0c0003035a2b362c3729354d025c004d0158000e0c0003031a1203000300efff2a68012a2d2b4d0341000e0e0c0004260302023b501203000300f9ff292c3b4d0328000e0c0004501204000300f4ff292d3b4d031500320e0e0e7b050700044d040800100e0e0e0e0e0e0e|@3932,-4,I229,-3,@3288,@3931| 3931:O3|@7129,@237,@3933 3932:S70|434f44455452454528292e707265436f6465283229636f7079436f6465283429696e73657274283129636f70794465636c61726174696f6e732831296170706c79466e283129 3933:S21|6170706c79466e3a206e6f742061204465636c6172 3934:C4,48|00802b3b4d0028000e0c000303033b021d2b352c362a0e0e0e4f0113002100022a4f020b003100022a2a69292705420e|@445,I229,@3935,@3934| 3935:C12,224|00802b354d00d8004d01d4000e0c000303c62b362c371203000300f4ff292c4d02bd000e0e0c00033c28402b4d03b0000e0c00042c354d04a6004d01a2000e0e0e0c000303212c362a2a352b362c372d382e392f3a3023063123070e0e4f057f00e2000a6402092c0e4f06730053000229354d076a004d0166000e0e0e0c000303191207000300efff2a68012a312b4d084d000e0e0c00046502121207000300efff29303b4d0837000c0004641208000300f4ff2c3b4d0926000e0e0e0c00032a322b4d0819000e0e0c00044d001000332f3b6b270a02054d0a040010420e0e|@3937,-4,I229,@460,I11,-7,@3910,@3836,-3,@3288,I253,@3936| 3936:O3|@7129,@237,@3938 3937:S70|434f44455452454528292e707265436f6465283229636f7079436f6465283429696e73657274283129636f70794465636c61726174696f6e73283129636f7079446563283129 3938:S21|636f70794465633a206e6f742061204465636c6172 3939:C8,160|00822b3b4d0098000e0c000303252d3c4d008c000e0c0003030c3b3b2e4f017f00210004020b3b2d0e4f02730010000264026b2b3529354d0365004d0061000e0e0c0003035229362a372e361205000300f4ff292d4d0447000c00036403253c2b4f053b005200034d0334002d2b3b6b3c332d0e0e4f0127008100042a2a6929270402112c3169322a2c0e0e0e4f010f00710004646602054d0604001064440e|@3941,I229,@3939,@3942,-4,@460,@3925,@3940| 3940:O3|@7129,@237,@3945 3941:S78|434f44455452454528292e707265436f6465283229636f7079436f6465283429696e73657274283129636f70794465636c61726174696f6e7328312970726f63657373436c6f7375726573283329 3942:C6,88|00802b3b4d0050000e0c000303033b02412b352c362a354d013d004d0039000e0e0c000303192a362b373b2a0e4f0227005300034d0120002c2b3b6b6602054d031500102a4f040f003100022a2a69292705420e0e0e0e0e|@445,I229,-4,@3925,@3943,@3942| 3943:O3|@7129,@237,@3944 3944:S28|6d6b4c69676874436c6f737572653a206e6f742061204465636c6172 3945:S29|70726f63657373436c6f73757265733a206e6f742061204465636c6172 3946:C8,160|00802b3b4d0098000e0c000303033b02872b3529354d0187004d0083000c0003037029362a372e361205000300f9ff292d4d026b000c0003294d0363000c000203102c120800050001000e0e0e0c000202013b030d2b0e0e0e4f044300610002022c1207000300f9ff292f3b4d0530000e0c0004504d0127002f2f2d6b2d0e0e0e4f041b008100022a2a69292704270502054d060a001064420e0e0e0e0e0e0e|@3948,I229,-4,@460,I218,@3946,@3288,@3947| 3947:O3|@7129,@237,@3949 3948:S74|434f44455452454528292e707265436f6465283229636f7079436f6465283429696e73657274283129636f70794465636c61726174696f6e73283129636f7079456e7472696573283129 3949:S25|636f7079456e74726965733a204e6f742061204465636c6172 3950:C4,48|00802b3b4d0028000e0c000303033b021d2b352c362a0e0e0e4f0113002100022a4f020b003100022a2a69292705420e|@445,I229,@3951,@3950| 3951:C8,192|00802b354d00b8004d01b4000e0c000303722b362c372d382a35404d01a1000e0e0c0003035a2a0e0e4f02930031000229354d038a004d0186000e0e0e0c000303033c02013b03181205000200efff2a68012a2f2b4d0467000c0004260302151205000200efff292e3b4d0452000e0e0e0c0004514d0047002d2b2d6b6402012e6602342b354d0536004d0132000e0e0e0c000303172b363b2a0e0e0e4f061f002000024d0518002a6966020b2b0e0e0e4f020b00010002420e0e0e0e0e0e0e|@3953,-4,I229,@3954,-3,@3288,-9,@3952| 3952:C4,48|00802b3b4d0028000e0c000303033b021d2b352c362a0e0e0e4f0113002200022a4f020b003100022a2a69292705420e|@445,I229,@3951,@3952| 3953:S61|434f44455452454528292e707265436f6465283229636f7079436f6465283429696e736572742831297265636f70794465636c61726174696f6e283129 3954:C10,208|00802b35404d00c7000c0003035c2b363b2a0e0e0e4f01b700200002402a692a293b4d00aa000e0e0e0c000303033c021f293529354d0297004d0093000c0003030c2a36292503511e283b6402013b64640312294d0378000e0c00024d0270002a6964020129270402632b354d0460004d005c000e0c000303522b362c38293b4d004c000e0c0003030c2a3b4d0540000e0c000302013b032f1203000200efff292c4d062a000e0e0e0c0003294d071f000c00024d0818000e0c000203062935296402012f6502012d6502012b420e0e|@3956,I229,@3955,-3,@3098,-5,I233,@460,I105,I218| 3955:C4,48|00802b3b4d0028000e0c000303033b021d2b352c362a0e0e0e4f0113002200022a4f020b003100022a2a69292705420e|@445,I229,@3954,@3955| 3956:S55|434f44455452454528292e707265436f6465283229636f7079436f6465283429696e736572742831297265636f707956616c7565283129 3957:C4,48|00802b3b4d0028000e0c000303033b021d2b352c36290e0e0e4f0113002100022b4f020b00320002292b69292705420e|@3843,I229,@3957,@3836| 3958:C4,48|00802b3b4d0028000e0c000303033b021d2b352c362a0e0e0e4f0113002200022a4f020b003100022a2a69292705420e|@445,I229,@3836,@3958| 3959:O3|@3963,@3965,@3962 3960:C8,504|00802b354d00f0014d01ec010e0c00030a140025012a00300099003600390033002d002a002a002a004500d40155012a0019012a002a006c00e000d7013b06cd3c06cc3c06cb3c06ca3c06c92b37292b2d0e0e0e7d0400022b362c372d382b2d0e0c000203152a2d0e0c0002030a292d2f0e0e0e7d0600023b02013b6606d22b3629293b4d0270010e0c000303033c021829352a362a2e0e0e0c00020309292503511e203b02013b656506cc2b362c372d382b2d0e0c0002033529293b4d0237010c000303033c021829352a362a300e0e0c00020309292503511e1f3b02013b656403082a2d2f0e7d0600023b02013b6606d22b3629293b4d02fc000e0c000303033c022429352a362a2e020ae500e300e100df00dd000e0e0c00020309292503511e2c3b02013b656502c82b36292b2d0e0e0e7d0400022b3629293b4d02b7000c000303033c021c29352a362a2e0202a1000e0e0c00020309292503511e233b02013b6565028c2b362c3729354d0386004d02820002027a000e0e0e0c000303612936294d046f000c000203054d056600102928662a4d065d000e0e0c000364033c292c56570e0e0c0003032e2b293b4d0243000c000303033c021c29352a362a3002022d000e0e0c00020309292503511e233b02013b656402013b02013b6402013b65020d3c020a2b36292b2d0e7d040002420e0e0e|@3961,-9,I107,I229,-3,I105,@407,I150| 3961:S28|434f44455452454528292e7369646545666665637446726565283129 3962:O2|I15,@3969 3963:C7,272|00815608293b2a3b4d0004010e0c0003030329021f2a352b362b03033c0209312b4d01eb000c00032a2a2505250526031e2a3b666603033c02d45607293b2a3b4d00cc000e0c0003030329021f2a352b362b03033c0209312b4d01b3000c00032a2a2505250526031e2a3b6666039e2b4d029c000e0c00024d0394000e0c000203882b36294d0287000c00024d0380000e0c00020370293529354d0472004d006e000e0e0e0c0003035829362b36293b4d005c000e0c000303442a4d0251000e0e0c00024d0348000e0c000203033c022b2a4d023a000e0e0e0c000203032a02054d052b0010293b4d0124000e0c0003644d031b00300e0e7d08000202013b6502013b6402013b6402013b02013b430e|@3964,I229,I251,I105,I218,-3,@404| 3964:S35|434f44455452454528292e736964654566666563744672656552545343616c6c283229 3965:O2|I109,@3966 3966:O2|I110,@3967 3967:O2|I241,@3968 3968:O2|I246,0 3969:O2|I17,@3970 3970:O2|I24,@3971 3971:O2|I25,@3972 3972:O2|I26,@3973 3973:O2|I27,@3974 3974:O2|I28,@3975 3975:O2|I29,@3976 3976:O2|I105,@3977 3977:O2|I106,@3978 3978:O2|I107,@3979 3979:O2|I108,@3980 3980:O2|I111,@3981 3981:O2|I112,@3982 3982:O2|I113,@3983 3983:O2|I114,@3984 3984:O2|I115,@3985 3985:O2|I117,@3986 3986:O2|I118,@3987 3987:O2|I119,@3988 3988:O2|I120,@3989 3989:O2|I121,@3990 3990:O2|I122,@3991 3991:O2|I123,@3992 3992:O2|I125,@3993 3993:O2|I126,@3994 3994:O2|I127,@3995 3995:O2|I128,@3996 3996:O2|I130,@3997 3997:O2|I136,@3998 3998:O2|I137,@3999 3999:O2|I138,@4000 4000:O2|I139,@4001 4001:O2|I140,@4002 4002:O2|I141,@4003 4003:O2|I189,@4004 4004:O2|I196,@4005 4005:O2|I213,@4006 4006:O2|I214,@4007 4007:O2|I216,@4008 4008:O2|I217,@4009 4009:O2|I218,@4010 4010:O2|I223,@4011 4011:O2|I229,@4012 4012:O2|I230,@4013 4013:O2|I231,@4014 4014:O2|I232,@4015 4015:O2|I233,@4016 4016:O2|I234,@4017 4017:O2|I238,@4018 4018:O2|I239,@4019 4019:O2|I240,@4020 4020:O2|I242,@4021 4021:O2|I243,@4022 4022:O2|I244,@4023 4023:O2|I245,@4024 4024:O2|I247,@4025 4025:O2|I248,@4026 4026:O2|I249,@4027 4027:O2|I250,@4028 4028:O2|I251,@4029 4029:O2|I252,@4030 4030:O2|I253,@4031 4031:O2|I152,0 4032:O2|@4361,@3827 4033:C2,24|008b3b3b220f300e0e4f000b00300003651f0c0e0e0e0e0e|@4035,@4034| 4034:C87,6008|00812c354d0070174d016c170e0c00030a1600a2160e0b2e008e0a2106f31401062e00f7087000fc083a002e002d0b3c1576005d174413ee1435007412841241154d0233171006d13b2d6906ce2c362d372a3b0e0e4f031f173100034d0418170e0c00022a3b0e0e0e4f030b174100034d0404170e0c00023b2b2b6a3b2a69270506d94d05f11606d52c362d372e382a3b4f03e31641000329354d06da164d07d6160e0e0e0c00030308293629382965020e3c28403b4d08be160e0e0e0c00043b566829293b4d07ae160e0e0e0c000303033b021f29352a362a3629304d0997160c00036403052a68010207292503511e2c3b65642d354d067d164d0779160e0e0c000303082d362939296502044d0a66162a4d0b61160204591657160c00024d0c54160e0c0002030c2a0e0e4f0d471690000206dd29354d0e3c164d0738160e0c000307cf293629352a362b3a040200280b28403b4d081e160204161614160e0c0004293b404d0f0d160e0e0c0004504d0603162a693c28402b4d08f9150e0e0c00042c2a453b46502c352d362e040200280b28403b4d08dd150e0e0c0004293b404d0fd1150e0e0c0004504d06c7152a693c28402b4d08bd150e0e0c00042c2a453b46502c352d362e040200280b28403b4d08a1150e0e0c0004293b404d0f95150e0e0c0004504d068b152a693c28402b4d0881150e0e0c00042c2a453b46502c352d362e3b3b2223293b4d0767150204fb03f0030e0e0c000303032a021629362b3c4d104f150c0003292b25042504511e283b6565294d113b150c00022922250e0e1612002e15280000000003220d220d4d1320150e0c00034d1418152214306a4d151015122a0001000b00122b0001000700326b221c3b694d16f8140e0c000203033c020b221c3c694d16e7140c0002037a4d17de14122b000100070022172e222968054d18cc142b694d19c6142b694d1ac0142e694d1bba14220c69122f0001000700123000010006001231000100050003033c0202222d12320001000400123300010002001234000100010022293333333333333333223f34341241000100ffff0e0e0c000d270b06d33c28403b4d0860140e0c00043c28403b4d0854140e0c0004040200280b28403b4d0844140e0c0004293b404d0f39140e0e0c0004504d062f142a693c28402b4d0825140e0e0c00042c2a453b46502c12310001000600293b4d1c0c140e0c0003123300010006002a22104d10fa130e0e0e0c00032a3b2b4d0fed130e0e0c0004504d1de313221134220d31123a0001000700221368073b3b3b161e00ca133900000000023b220e3b4d1cbc130e0c00030391123a0001000600293b4d1ca9130e0e0c0003123c00010006002a3c4d1097130202a7000c00032a3b2b4d0f89130e0e0c0004504d1f7f132c3c3b3b68053c221b0e0e0e1620006e134100000000033f2a2c3b6b314d045e130e0e0e0c00024d215413302b3b6b293b693c28403b4d0845130e0e0c00042a3b4d073a130e0e0e0c000303053b2e6902043c2b2f6a270b0237220f3b4d1c1e130e0e0e0c000303272a4d0411130e0e0c00023b22170e0e16200002133d00000000034d06f8122b2b6a3b2a696602012a2710221822184d22e4120e0c00035033334d22d9120e0e0c00035029354d06cd124d07c9120e0e0c00030308293629372965021629353c4d07b3120c00030306293729640204293629642a354d069e124d079a120e0e0e0c000303082a362939296502044d0a86122b354d0680124d077c120e0c000303082b362936296502044d236a122229354d0663124d075f120c000303092229362935296502172229353c4d0749120e0e0c00030307222936296402013b2d354d0634124d0730120e0c000303082d362935296502132d353c4d071b120c000303062d36296402013b293b4d0709120e0e0c000303033202103b330e0e162400f61132000000000264293b4d07e9110e0e0c000303032b02103b2c0e0e162500d6113300000000026430354d06c9114d07c5110e0e0c00030308303629382965020e3c28403b4d08ae110e0e0e0c00042a2f322c33680530354d269b114d0797110c000303172b3b4d078c110e0c000303053b326902043c2c336a02064d0677112a69272a02093b0e4f0d6b11900002270906dc2c362d372e382f392c2c2c2c6b565d2a2a2e6a6412070001000a00317d0900022c3629352a362b392c3a565d293c4d1032110e0e0e0c0003040200280b28403b4d0820110e0c0004293b404d0f15110e0e0c0004504d060b112a693c28402b4d0801110e0e0c00042c2a453b46502c352d362e040200280b28403b4d08e5100e0e0c0004293b404d0fd9100e0e0c0004504d06cf102a693c28402b4d08c5100e0e0c00042c2a453b46502c352d362e4d27b110220f3212190001000a006b4d28a21022102c121a0001000b006b4d299310332d6a4d2a8c102b69020282104d2b82102d694d2c7c102c694d2d761030693c28403c4d086c100e0c0004121e0001000400121f000100020012200001000100221e31313131221e323b333b3434122d000100ffff0e0e0e0c000d3c28403b4d0830100e0c00044d2e28102a122500010007006a4d2f1b102a12260001000b006a2c4d040d100e0e0c00024d3004102b692a2a2221122a00020001000c000404020022230a0100fd00c20022234d06e20f694d16dd0f0e0e0c00020321122900010001002b4d31ca0f0e0e0e0c0002292b4d32be0f0e0e0e0c00036502013b03064d26ae0f02022223303b4d1ca40f0e0c00032c222822252c222a2f3b3b68084d0e8f0f2a69333b4d1c870f0c00033b2a4d077e0f0e0e0e0c000364030f29122e00010004000e0e0c00020201292f222b22283b222d323b3b68084d0e540f2a693c28403b4d084a0f0e0e0e0c000412310001000b003b2a2f2d2f6805334d06310f452a46260b029b2a222622233b22283c3b3b68084d0e190f2a693c28403b4d080f0f0c0004122c0001000b003b2a4d33ff0e2d2f68052e4d06f60e452a46260602602f3b4d1ce90e0e0e0c00032b222722242c22293b3b3b68084d0ed30e2a693c28403b4d08c90e0e0e0c0004122d0001000a003b2a2d2d223468052231354d26ae0e4d07aa0e0e0e0e0c000303082f3b452d465002092f4d06950e452a4650260629221d221d4d22860e0e0e0e0c000350221622164d22770e0c00035029272906cd3b2d6906ca2c362d373c28403b4d085d0e0e0e0c00043c28403b4d08500e0e0c00042c3b69293b4d07430e0c000303032c020c3b2d0e0e4f34330e6000026428092a6912080001000b0012090001000a00569f56ae56bd56cc56db56ea3468014d350a0e220e6929220e69121300010002002a2a6912150001000100220e220e220e220e220e220e220e220e220e220e34341222000100ffff0e0e0c000d22133b4d1cc90d0e0e0c00034d0cc00d0e0c0002034122153b69293b4d07b00d0e0c00030304221502173b221602049b0d990d0e0e163600960d1a00000000026428092a6929221c0e160300820d1c000100000366029e3b3b22160e0e1637006e0d1a0000000002121a0001000b00121b0001000a00121c0001000900121d0001000800121e0001000700121f00010006001220000100050012210001000400221d68014d38280d22206929222069122500010002002a2a69122700010001002226220e220e220e220e220e220e220e220e220e34341234000100ffff0c000d294d04eb0c0c00024d06e40c2a22126a3b2a692714271606d32c3656182d4d0bce0c0e0e0e0c00024d0cc40c0e0c0002035f2d352a4d0bb70c0c00024d0cb00c0e0c000203432a3529352a362c2a4d099e0c0e0e0e0c00034d0c940c0e0c000203054d398a0c103b2f4f3a830c700002568d2a3c2b6a662b0e0c00024d3b700c2a693b2a69270502054d3c630c106402054d3d5b0c106506db2c36293b4f034f0c2100034d04480c0e0c00024d3e400c2a693b2a696606db2c362d372e382b3b0e4f032b0c4100034d04240c0e0c000229354d3f1a0c4d07160c0e0e0e0c000303452936293b4d07060c0202fe0b0e0e0e0c000303242b354d26f40b4d07f00b0e0c000303064d40e60b020c2b310e0e0e4f03db0b610003020a2c310e4f03cf0b6100036406cc2b304f03c30b5100032b310e0e0e4f03b70b6100033b2b354d06ad0b4d07a90b0e0e0c000303082b362937296502162b353c4d07930b0c000303062b37296402042b3629642c354d067e0b0202760b4d07760b0e0e0e0c000303082c362935296502172c353c4d075f0b0202570b0c000303062c36296402013b2c354d06490b4d07450b0e0e0c000303082c362937296502162c353c4d072f0b0c000303062c37296402042c3629642d354d061a0b4d07160b0e0e0e0c000303082d362935296502172d353c4d07ff0a020206060c000303062d36296402013b2c354d3fe90a4d07e50a0e0e0c000307dd2c362c3b4d07d60a0e0e0e0c000307cf2b354d3fc80a4d07c40a0e0c000307cd2b362b3b4d07b60a0e0e0e0c000303a62a2a4d09a80a0e0c000303343257e80c00020303310227323b693c28403b4d088c0a0e0c00042a3b4d07820a0e0e0e0c000303053b316902043c2b326a6502640402002b3c4d07650a0e0e0c0003030c2a3b4d09580a0e0c000302013b0308293b45344650023b2b3b4d07410a0e0e0c0003030c2a3c4d09340a0e0c000302013b0314333b693f2a4d41220a3c6b2b3b452a462603020b3d3431306b2a3b452a465129640226314d04030a02045b003c000e0e0c0002314d04f309020210000c00023d220c2c2c6b3b2a696664021c304d04da090e0e0e0c0002304d04cf090c00023d342c2c6b3b2a6966021a304d04bc090e0c0002304d04b3090c00023d342c2c6b3b2a69666406d22c35404d079d090e0e0c000307d92c362b35404d018d090e0e0c00030a010020001201304d047c090e0c0002304d0473090c00023d342c2c6b3b2a696606d82b363b2b293b4d075b090c000303032a021629362b3c4d104b090c0003292b25042504511e203b65653b2b293b4d0734090e0c000303032a021629362b3c4d1023090c0003292b25042504511e213b65652a2a4d420e090e0e0e0c00036503713b2b293b4d07fd080e0e0c000303032a021629362b3c4d10eb080c0003292b25042504511e223b656556ec293b4d1cd4080202d9030e0c0003121100010006002a3c4d10bf08020261010c00032a3b2b4d0fb1080e0e0c0004502b3b3b3232320e0e1643009e081900000000072705021e314d048f0802022e010c0002314d0483080c00023d220c2c2c6b3b2a69666406d32b362c372a354d1f69084d0765080e0e0c000307ce2a362b372c382a3c4d0752080e0e0e0c000303a2293b4d0744080e0c000303723b2f293b4d0736080e0e0e0c000303032a021629362b3c4d1023080c0003292b25042504511e233b65652d2a4d420e080e0e0e0c00036403182b68012c3b2b323b320e164300f60719000000000764021f220c4d04e7070c0002220c4d04de070e0e0e0c00023d22102c2c6b3b2a69660222220c4d04c6070e0e0e0c0002220c4d04ba070e0e0e0c00023d22102c2c6b3b2a6966022a220c4d04a207020241000e0e0e0c0002220c4d049207020213000e0e0e0c00023d22102c2c6b3b2a696666021d324d0476070e0e0e0c0002324d046b070c00023d220d2c2c6b3b2a6966656406cd2c35280b4d0752070e0e0e0c000307ca2c362d372a354d1f40074d073c070e0c000307db2a362b372c382a3c4d072a070e0e0e0c000307c9293b4d071c070e0c000307d22f35404d010f070c00030a010021009e00344d0400070e0c0002344d04f7060c00023d220f2c2c6b3b2a696606d52f363b2a293b4d07de060e0e0e0c000303032a021629362b3c4d10cb060c0003292b25042504511e233b65652e2a4d42b6060e0e0e0c00036403182c68012d2a3b3b2e330e1643009e06190000000007640227220c4d048f06020294010c0002220c4d04820602026b010e0e0e0c00023d22102c2c6b3b2a69666406dc2f3630372a354d1f61064d075d060204260107010c000303bb2a362b372c382a3c4d0746060202d3000e0e0e0c0003037e293b4d0734060e0c0003034e312d4d4228060e0c000303213068012c68012d2b2b3b3b220f0202a0000e0e1643000a061e000000000765021f22104d04fb050c000222104d04f2050e0e0e0c00023d22142c2c6b3b2a6966022222104d04da050e0e0e0c000222104d04ce050e0e0e0c00023d22142c2c6b3b2a6966022222104d04b6050e0e0e0c000222104d04aa050e0e0e0c00023d22142c2c6b3b2a6966660225220d4d04910502021c000e0e0c0002220d4d0482050e0e0e0c00023d22112c2c6b3b2a696665021d344d046a050e0e0e0c0002344d045f050c00023d220f2c2c6b3b2a6966021a344d044b050c0002344d0443050c00023d220f2c2c6b3b2a696666021d314d042e050e0e0e0c0002314d0423050c00023d220c2c2c6b3b2a696665021c2f4d040e050e0e0e0c00022f4d0403050c00023d332c2c6b3b2a69662707270406d82c363b2a0e0e4f44e7042000026506ca2c36040200280b28403b4d08d3040c0004293b404d0fc9040e0e0c0004504d06bf042a693c28402b4d08b5040e0e0c00042c2a453b46502c352d362e3c28403c4d089d040e0e0c00043b0403003c342b0e0e4f458b04d000045029352a362b37402b692f3b4d1c78040e0c00030313294d466d040e0e0c00024d3f64042a6964020129402c6934344d1355040e0e0c00034d474c04121400010007002b6a3c28403b4d083b040c00044d4834042b69322a302d3168054d0627042a69271606cc2c362d372a3b0204130411040e0e4f030f0431000329354d0606044d0702040e0e0e0c0003030829362939296502044d0aee032a354d06e8034d07e4030e0c000303082a362937296502162a353c4d07cf030c000303062a37296402042a3629643b2b35404d07b8030e0c0003030c2b0e0e4f49ab0360000206d02a354d3fa0034d079c030e0c000303602d2b4d4a90030e0c00032d354d0686034d0782030e0e0e0c000303082d362935296502132d353c4d076b030c000303062d36296402013b3c28403b4d08570302024f030c00042a3b4d074a030e0e0e0c000303053b2c6902043c2b2d6a6602bb2c354d0630034d072c030e0c000303082c362937296502162c353c4d0717030c000303062c37296402042c362964293528054d0700030e0c0003030c2e2a4d4af4020e0c0003022529354d3fe8024d07e4020e0c000303102e2a4d4ad802020259000e0c0003020528062a306a2e354d06c3024d07bf020c000303082e362935296502132e353c4d07ab020c000303062e36296402013b3c28403b4d0897020c00042a3b4d078e020e0e0e0c000303053b2c6902043c2b2d6a2704270606d03b2d6906cd2c362d372e382b3b0e0e0e4f0363024100034d045c020e0c00023b2b0e0e0e4f4b4f025000022d320e0e0e4f0343027100034d043c020e0c00024d4c34022d2b2d6b3b2a69270806d03b2d6906cd2c362d372a3b0e0e0e4f03170231000329354d060e024d070a020e0e0e0c00030308293629372965021629353c4d07f3010c000303062937296402042936296429354d1fde014d07da010e0e0e0c000303033b02054d4dcb0110565c293b4d1cc2010e0e0e0c0003567c2a304d10b4010e0c00032a3b2b4d0fa9010204a1019f010c0004504d4e9b01302d6a312a4d4f92010e0e0e0c00034d5088012e69332a4d4f80010e0c000333354d0676014d0772010e0e0e0c00030308333629372965021e33353c4d075b010204530151010e0e0c0003030633372964020433362964280b2a220e6a402c69220d354d0634014d0730010e0c00030309220d36293529650217220d353c4d0719010e0e0c00030307220d36296402013b2f3b4d0704010e0c000303032902103b2a0e0e165100f200140000000002643c28403b4d08e3000c00044d52dc0012150001000700692b2a302d3168054d06c9002a69271502bf2c362d372e382a353d4d07b6000e0e0e0c00030319292b2d4d53a7000c0004293b0e0e0e4f039b0051000364028a2a3528094d078d000e0e0c00030319292b2d4d537f000c0004293b0e0e0e4f037300510003640262293b4f0367004100034d0460000e0c00022b3b0e0e0e4f0353005100034d044c000e0c00023b2a3b0e0e4f543f00700003293b2a3b4d0734000e0c000303032902132a352b362a2c692a2a2505250526031e1e3b66664d5513000c00023b2a6927046602042c362964430e0e0e|@4037,-11,I107,@3840,@4034,@4038,@4042,-1,I229,I11,I251,@440,I105,I218,@4043,-7,I255,I106,I111,@4125,@4142,@4145,@4147,@3794,@4149,@4155,@4157,@4159,@4161,I253,@4163,@4169,-5,@4205,-4,@3791,@4207,@4209,@4210,-2,@4211,@4213,@4215,@4217,@4219,@4221,@4223,@4225,@4229,@4231,@4233,I234,@510,@4248,@4249,@4251,@4252,@4257,@4258,@4260,-8,@4261,@4261,-10,-3,@4263,@2798,I113,@4265,@4288,@4335,@3098,@232,@229,@4340,@3087,@4349,-6,@4350,@4352,@4282,@4354,@4356,@4357,@4275,@4036,@3801| 4035:S27|434f44455452454528292e6f7074696d69736550726f6328313229 4036:C9,568|00812c353d4d002f020c000303832c362d372e382a3b0e0e0e4f011b02410003293b2a3b4d0010020e0c000303032902132a352b362a2c692a2a2505250526031e1e3b66664d02ef010c00022a3b0e0e0e4f01e301510003293b2a3b4d00d8010e0c000303032902132a352b362a2c692a2a2505250526031e1e3b66664d02b7010c00023d2e2c2c6b29326929270706cb2c3528094d009f010c0003034a2c362c2a293b4d0090010e0c000303054d038601102936293b4d007d010e0e0c000303112a35292d0e0e0e4f016b016100036402112a35292d69292c2505250526031e3e3b65270406dd2c35280b4d0048010e0c000307dc2c362d372a354d0438014d0034010e0c000307dc2a362b372c382a3c4d0022010e0e0e0c000303db293b4d0014010e0c000303b656542d2a4d0506010e0e0e0c0003640388565129354d04f5004d00f1000e0e0c0003035e29362a372b382a3c4d00de000202d8000e0e0e0c0003032f293b4d00cc000e0c0003030d3b220c4f06bf00a00002640214569456a14d07b1002b22102c6b29220f692927040214569456a14d079b002b22102c6b29220f69292704660214566456714d0784002b220d2c6b29220c6929270464021b02026f00565456614d0769002b02025000220c2c6b293469292704021756545661020227004d074c002b220c2c6b2934692927040213565456614d0737002b220c2c6b293469292704660212562456314d0721002b322c6b293169292704650212560456114d070c002b302c6b292f69292704430e|@4359,I229,@4036,@3801,@1773,-5,I113,@4358,-11| 4037:S38|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229 4038:O1|@4039 4039:C4,192|00802b354d00b8004d01b4000e0c000303082b362935296502132b353c4d019f000c000303062b36296402013b293b4d018d000e0e0c000303302c354d0080004d017c000e0c000303082c362937296502162c353c4d0167000c000303062c37296402042c36296402502c354d0050004d014c000e0c000303082c362937296502162c353c4d0137000c000303062c37296402042c362964293b69293b4d011f000c000303032b020c3b2c0e0e4f020f004000026428092a696664420e0e0e0e|@4041,-1,I229,@4040| 4040:C3,40|00802b3b4d0020000e0c00030304560202142b352c36290e0e4f010b002100022b2a69292704420e|@1555,I229,@4040| 4041:S40|434f44455452454528292e6f7074696d69736550726f632831322967657447656e6572616c283129 4042:O2|0,@440 4043:C14,520|00803c28403c4d00fe010e0e0e0c000456143b2a0e4f01ef01300002564129354d02e4014d03e0010e0c00030308293629372965021629353c4d03cb010c0003030629372964020429362964566203033c0202576b2f3b4d04ad010e0e0c000303cb567129354d029e014d039a010e0e0e0c00030308293629372965021629353c4d0383010c000303062937296402042936296429354d056e014d036a010e0e0e0c000303033c02013b65037d2903033c0275567129354d024d014d0349010e0e0c00030308293629372965021629353c4d0333010c000303062937296402042936296429354d051e014d031a010e0e0e0c000303302936294d060b010c000203054d070201102928662a4d08f9000e0e0c000364030b29304d09eb000c000302013b6402013b6502013b02013b29030d3f2e2d2d6b579a0e0c00020274334d06c5000e0e0c00024d0abc000e0c0002035b333529352a3656b7294d06a9000e0e0c00024d0aa0000e0c0002031129352b2a4d0b92000e0e0e0c00036402013b64031657bd313c2b6a642b0e0e0c00024d0c74002a6964021157bd313b2b6a642b0c00023f2a31316b646602053f2e2d2d6b569129354d024e004d034a000e0e0e0c00030308293629352965021329353c4d0333000c000303062936296402013b3c28403b4d001f000c00042a3b4d0316000e0e0e0c000303053b2d6902043c2b2e6a270c420e0e|@4045,I11,@4046,-1,I229,I253,-3,I105,@407,I150,@4044,I218,I251,-8| 4044:O1|@4047 4045:S54|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d6973652832296e6f74496e6c696e6543616c6c283129 4046:C8,112|00802b3b4d0068000e0c000303033b025d2b352c362a3b0e0e4f0153003300034d024c000e0c000229354d0342004d003e000e0e0e0c000303033c02013b4d042e000e0e0e0c000203135634293b3b4d051d000e0e0c0004503b5102023b502a0e4f060b003100022a2a69292705420e|@445,I229,@4034,@4038,-3,I218,I255,@4046| 4047:C7,192|00814d00ba003b2a3b4d01b3000c0003030329022c2a352b362b03033c02162a4d029c000e0c0002312a4d0392000e0e0e0c0003642a2a2505250526031e363b666503033c02754d0475003b2a3b4d016e000e0e0e0c0003030329022c2a352b362b03033c02162a4d0254000e0c0002312a4d034a000e0e0e0c0003642a2a2505250526031e393b6665032f2b3c2a3b4d012c000e0c0003030329021b2a352b362a2c4d0519000e0e0c00032a2a2505250526031e263b666502013b430e0e0e|@4049,@4050,I229,I189,I251,@4118,@4048| 4048:O1|@4121 4049:S26|434f44455452454528292e6561726c7952747343616c6c283229 4050:O2|15,@4051 4051:O2|24,@4052 4052:O2|25,@4053 4053:O2|26,@4054 4054:O2|27,@4055 4055:O2|28,@4056 4056:O2|29,@4057 4057:O2|105,@4058 4058:O2|106,@4059 4059:O2|107,@4060 4060:O2|108,@4061 4061:O2|109,@4062 4062:O2|110,@4063 4063:O2|111,@4064 4064:O2|112,@4065 4065:O2|113,@4066 4066:O2|114,@4067 4067:O2|115,@4068 4068:O2|117,@4069 4069:O2|118,@4070 4070:O2|119,@4071 4071:O2|120,@4072 4072:O2|121,@4073 4073:O2|122,@4074 4074:O2|123,@4075 4075:O2|125,@4076 4076:O2|126,@4077 4077:O2|127,@4078 4078:O2|128,@4079 4079:O2|130,@4080 4080:O2|133,@4081 4081:O2|134,@4082 4082:O2|135,@4083 4083:O2|136,@4084 4084:O2|137,@4085 4085:O2|138,@4086 4086:O2|139,@4087 4087:O2|140,@4088 4088:O2|141,@4089 4089:O2|189,@4090 4090:O2|196,@4091 4091:O2|213,@4092 4092:O2|214,@4093 4093:O2|216,@4094 4094:O2|217,@4095 4095:O2|218,@4096 4096:O2|223,@4097 4097:O2|229,@4098 4098:O2|230,@4099 4099:O2|231,@4100 4100:O2|232,@4101 4101:O2|233,@4102 4102:O2|234,@4103 4103:O2|238,@4104 4104:O2|239,@4105 4105:O2|240,@4106 4106:O2|241,@4107 4107:O2|242,@4108 4108:O2|243,@4109 4109:O2|244,@4110 4110:O2|245,@4111 4111:O2|246,@4112 4112:O2|247,@4113 4113:O2|248,@4114 4114:O2|249,@4115 4115:O2|250,@4116 4116:O2|251,@4117 4117:O2|152,0 4118:O2|17,@4119 4119:O2|252,@4120 4120:O2|253,0 4121:C10,112|00812c354d0068004d0164000e0c000303582c362c034f294d0254000e0c000203033c023f294d0246000e0e0e0c000203054d033a001029294d0433000c00022928404d0529000e0e0c00032928404d061d000e0e0c0003664d0713002d0e0e7d05000202013b6402054d0802001043|@4123,-3,I229,I105,@407,I17,I243,I251,I218,@4122| 4122:O3|@7129,@237,@4124 4123:S40|434f44455452454528292e6561726c7952747343616c6c2832296973496d6d757461626c65283229 4124:S29|6973496d6d757461626c653a20617267206e6f7420636f6e7374616e74 4125:C8,112|00812b3b4d0068000e0c000303033b025e2b352c364d0157001204000100e4ff692b3b0e0e4f0247004200032a2a323b0e4f033b00720005313c4d0432000e0e0e0c0003292e0e0e0e4f052300710003293b4d001a000e0e0e0c000303032b020c3b2c0e0e4f06070080000264270743|@4127,I229,@4128,@4034,@4130,I106,@4125,@4126| 4126:C3,48|00802b3b4d0028000e0c000303091201000100f8ff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1555,I229,@4126| 4127:S45|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f7079283229 4128:C3,32|00802b352c3656272b4d0013000c00022b68012b2b2b4d010600337b05080004|@4129,I111,@3288| 4129:S54|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f7079283229736574546162283129 4130:C9,360|00832d354d0060014d015c010e0c000303082d362937296502162d353c4d0147010c000303062d37296402042d3629643b2a354d0231014d012d010e0e0c000303aa2f354d0020014d011c010e0c000303082f362939296502044d030a0129354d0404014d0100010e0c0003033d2936293a294d00f1004d01ed000e0e0c0003031c303c4d01e0000e0c000303053b2e690209324d05d0000e0c0002020a324d05c5000e0e0c0002650209304d05b8000e0c0002302a69330e0c000232354d00a6004d01a2000e0e0e0c00030308323629352965021332353c4d018b000c000303063236296402013b6602782a354d0676004d0172000e0e0e0c0003035d2a38293b4d0162000e0e0e0c00030342304d0555000e0e0c0002302a69330e0c000232354d0042004d013e000e0e0e0c00030308323629352965021332353c4d0127000c000303063236296402013b6502080e4f0713002000016402090e0e4f070700100001651f040e|@4132,-1,I229,-3,@440,-7,@4133,-5,@4131| 4131:C14,392|007f570c293b4d007e010e0e0e0c0003572c2a3c4d0170010e0c00032a3b2b4d0265010e0e0c000450564929354d0357014d0453010c0003030829362939296502044d05420156672a354d063a014d0436010e0e0e0c0003032d2a36293a294d0325014d0421010e0e0c000303152b3c4d0414010e0c000303064d050a0102012c02012c6502012a4d07fc00303c3b3b6805569929354d03ee004d04ea000e0e0e0c0003030829362936296502044d08d60056b929354d03ce004d04ca000e0e0e0c00030308293629382965020e3c28403b4d09b2000e0e0e0c00043b2c2f2c32680504020030354d0a9c004d0498000e0c00030308293b453046500209294d038500452b46502912110001000200292b6964121200010004000e0e0e0c00021212000100030029354d035b004d0457000c00030308293629352965021329353c4d0443000c000303062936296402013b1214000100feff4d0b2c0022132b3b6b293b69293b4d041e000e0e0e0c000303032c02103b2d0e0e160c000a0019000000000264271641|@4139,I253,I106,I255,-1,I229,@440,-7,-5,@4140,I11,-2,-4,@4138| 4132:S37|434f44455452454528292e6f7074696d69736550726f63283132296e65774465636c283429 4133:O1|@4134 4134:C7,256|00802b354d00f8004d01f4000e0c000303082b362935296502132b353c4d01df000c000303062b36296402013b293b4d01cd000e0e0c000303032c02bd2c354d00bd004d01b9000e0e0c000303082c362937296502162c353c4d01a3000c000303062c37296402042c3629642d354d008e004d018a000e0e0e0c000303082d362939296502044d0276002e354d0070004d016c000e0c000303082e362936296502044d035a002f354d0054004d0150000e0c000303082f3629382965020e3c28403b4d043a000e0e0e0c00043b2b2e2c2f68050402002d354d0524004d0120000e0c00030308293b452f46500209294d000d00452b465029270664420e0e0e0e|@4136,-1,I229,@440,@4135,I11,-2| 4135:O1|@4137 4136:S39|434f44455452454528292e6f7074696d69736550726f6328313229737472697044656373283129 4137:C2,8|00804d000200100e|@449,@448| 4138:C3,48|00802b3b4d0028000e0c000303091201000100e9ff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1555,I229,@4138| 4139:S39|434f44455452454528292e6f7074696d69736550726f63283132296e65774465636c2834292f33 4140:O1|@4141 4141:C2,8|00804d000200100e|@449,@448| 4142:O1|@4143 4143:C9,128|00812c3b4d0078000e0c000329354d016e004d026a000e0e0e0c0003035c2936293b4d005a000e0e0e0c0003293b4d024e000e0e0e0c000303064d034200023778760f3b2c3b3b4d0435000e0e0c0004050800ff6d4d052700102b3c2b3b2e4d061d000e0e0c000650294d0712000e0e0e0c0002502964650204293629646443|@4144,I253,-1,I229,I49,I11,@87,I195,I47| 4144:S22|5374726574636841727261792e766563746f72283229 4145:C6,136|00812b354d0080004d017c000e0c000303082b362937296502162b353c4d0167000c000303062b37296402042b36296429354d0252004d014e000e0e0e0c0003032b2936293b4d033e000e0e0e0c000303043b50021456282e68012a2c2b4d0426000e0e0e0c000426035002023b5056172d68012a302b4d040d00310e0e0e7b050700040e0e0e0e|@4146,-1,I229,-5,I232,@3288| 4146:S56|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229736574546162466f72496e6c696e65283229 4147:C8,128|00822d352c3b4d0076000e0e0e0c00034d016c000e0c000203033c020b293b4d025d000e0e0c0003030e2e2e2e6a56272d0e0e0e7d0600025619292b4d0340000e0c0003294d0437000c00024d0130000e0c0002031a29355648312a4d0520000e0c0003292c4d061600330e7e0b00033030306a56472f0e7d0800020e0e0e0e|@4148,I113,I218,I232,@460,I105,I107,@233| 4148:S59|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d6973652832296c6f6f6b75704c6f63616c4e657741646472283329 4149:C19,280|00822b3b4d0010010e0c000307cf2d35293b4d0002010e0e0e0c000303054d01f60010293b4d02ef000c0003032e5618292b4d03e2000e0e0e0c0003294d04d7000c00024d05d0000e0c000203062935296402054d06c0001065026a56192a4d07b5000e0e0c0002293b4d08aa000e0e0e0c000303033c02182a4d099a000e0e0e0c00022a2a4d0a8e000e0e0e0c00036403054d0b8100102a2a4d0c7a000e0e0e0c00032964294d046d000e0e0c00024d0564000e0c000203062935296402054d0d5400106656272f2a4d0e4a000e0e0e0c0003292c4d0f3e0031020205000e7e090003560a29354d102c004d0028000e0c0003030829362936296502044d1116002d3c4d0e10000e0c000330302b6a642a2e0e7d070002|@4151,I229,@4152,I233,@460,I105,I218,@235,I111,I234,I15,I231,@61,I253,@235,I107,@233,-1,@4150| 4150:O1|@4154 4151:S61|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d6c6f6f6b7570446563283329 4152:O3|@7129,@237,@4153 4153:S35|6c6f6f6b75704465633a20496e6c696e652066756e6374696f6e207265637572736573 4154:C2,8|00804d000200100e|@449,@448| 4155:C1,16|00802b352c362d3756372e7b05030004|@4156| 4156:S59|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d6973652832296c6f6f6b75704c6f63616c4e657741646472283129 4157:C1,16|00802b352c362d3756372e7b05030004|@4158| 4158:S61|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d6c6f6f6b7570446563283129 4159:C1,16|00802b352c3656272d0e0e0e7e030003|@4160| 4160:S56|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229736574546162466f72496e6c696e65283129 4161:C2,24|00802b352c3656272a68012a2d2b4d000600327b05070004|@4162,@3288| 4162:S59|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d6973652832297365744e6577546162466f72496e6c696e65283129 4163:C7,120|00823b5619293b3c4d006c000e0c0004502e03043b50020f5628293b3c4d0057000c0004503b513b30293b4d0149000e0e0c000303032a021629362b3c4d0237000c0003292b25042504511e223b656556372a2a4d0320000e0c0003654d0417000c000203032f020c5627302a4f0507004000036465440e|@4165,I255,I229,I106,I113,I218,@4164| 4164:C21,456|00812c3b4d00c0010e0c000303162b3b4d00b4010e0c000303033b02054d01a7011006d72c352d36572c2e3b4d0298010e0c000303033c0218294d038a010e0e0e0c00022f2a4d047e010e0e0e0c00036403054d05710110292f4d066a010e0e0e0c00032964294d075d010e0e0c00024d0854010e0c000203062935296402054d0944011029354d0a3d014d0039010e0e0c00030308293629372965021629353c4d0023010c00030306293729640204293629642e354d0b0e014d000a010e0e0e0c000303292e362a354d0bfa004d00f6000e0e0e0c000303112a362a2a4d0ce6000e0e0e0c00036402013b6402812e354d0dd3004d00cf000202ca000c0003036d2e362f3730382c354d0dba004d00b6000e0e0e0c000303512c362d372e382e2c4d0ea2000e0e0e0c000303392d2b4d0094000e0c0003032a56c72a2a4d0f86000e0e0e0c000357eb2a2a4d1078000e0c0003302a4d0e6e000e0e0e0c0003270402013b02013b6602013b6602013b2903043b50020e577a29343c4d1148000e0c000451577a29344d123b000c000364031c323c4d102f000c00032f2a0e0e0e4f132300910003312a6929660216323c4d1013000c00032f2a0e0e0e4f13070091000364270743|@4167,I229,@4166,I234,I15,I231,@61,I253,I105,I218,@235,-1,-3,I251,-5,I113,I106,I107,@3288,@460,@4164| 4165:S62|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d66696c74657241726773283329 4166:O3|@7129,@237,@4168 4167:S76|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d66696c7465724172677328332966696c7465724172677327283229 4168:S33|66696c74657241726773273a2077726f6e67206e756d626572206f662061726773 4169:C15,488|00804d00e201571d56211204000100ebff1205000100dbff1206000100cdff1207000100d8ff1208000100cfff68081202000100f4ff4d01ae011204000100d6ff694d02a2012c694d039c011206000100d7ff694d0490011207000100ddff69576d577c578b03033c02025682579a56a02968014d057001120e000100caff6956d02a2a6957f82a2a6912120002000100221022102210221022102210221022102210220f3434121f000200ffff0e0e0e0c000d1214000100d4ff293b4d0627010c00036403771214000100dbff293b2a3b4d0712010e0e0e0c0003030329024e1217000100cfff292c4d08fa000e0e0e0c0003640322293c4d09eb000c00032b3c4d0ae2000e0e0e0c0003292b25042504511e433b6502162a3c4d0ac9000e0e0c0003292b25032503501e5b3b64660e160b00b20015000100000202a11214000100d5ff293b4d069d000e0e0c000364038b1214000100dbff293b2a3b4d0786000e0e0e0c0003030329024e1217000100cfff292c4d086e000e0e0e0c0003640322293c4d095f000c00032b3c4d0a56000e0e0e0c0003292b25042504511e433b6502162a3c4d0a3d000e0e0c0003292b25032503501e5b3b64652922184d0c25000e0e0c00030310290e0e160d00160017000100000202012b650201292713420e0e0e0e0e0e|@4171,@4172,@4176,@4177,@4179,@4180,@4181,I253,I229,@460,I106,I107,@4170,I233,@4169| 4170:C20,480|0080570d293c4d00d6010e0e0e0c00034d01cc0156302b1206000100ebff1207000100cfff1208000100d8ff56816807040200280b28403b4d02a4010e0c0004293b404d0399010e0e0c0004504d048f012a693c28402b4d0285010e0e0c00042c2a453b46502c4d057501302b120c0002000b006b4d066701120b000100ebff2c6a120b000100f4ff4d0753012c694d084d0133694d0947012d694d0a410130693c28403c4d0237010c00041211000200050003033c02071211000100fcff121200020004004d0b16011214000100caff691214000100faff2a2a69121600020002002a2a6912180002000100220d220d220d220d220d221b220e220e220e3b34341225000200ffff0c000d121a000100dbff293b2a3b4d0cc5000e0e0c0003030329024e121d000100cfff292c4d0dae000e0e0e0c0003640322293c4d009f000c00032b3c4d0e96000e0e0e0c0003292b25042504511e423b6502162a3c4d0e7d000e0e0c0003292b25032503501e5a3b646529221e4d0f65000e0e0c00030310290e0e16100056001d000100000202472b4d1149000e0e0c0002121d0002000700293c4d0037000c0003121f000100f3ff2c2a2c3b22254d0423003b3b68084d121b002a693c28403b4d0211000e0e0c00043b2b692707271b420e0e0e0e|@4184,I106,@4185,I11,I255,-1,@4193,@4195,@4197,@4199,@4201,@4203,@4183,I229,@460,I107,I233,@4170,@4038,-7| 4171:S70|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d636865636b466f724c6f6f70496e73747273283129 4172:C21,360|00822b3b4d0060010e0c000307ca2d35293b4d0052010e0e0e0c0003030c56184d0144010e0c000206d3293b4d0238010e0c0003032e5619292b4d032a010e0e0e0c0003294d041f010c00024d0518010e0c000203062935296402054d060801106502b6561d2a4d07fd000e0e0c00022a2a4d03f2000e0e0e0c000365032a561b562a2a2a4d08df000c0003292d4d08d6000e0e0e0c00034d09cc002a3c3b3b68053b2a6927050271561c2a4d07b8000e0c0002293b4d0aae000e0e0e0c000303033c021c2a4d0b9e000e0e0e0c00022a2a4d0c920002025a000e0e0e0c00036403054d0d8100102a2a4d0e7a000e0e0e0c00032964294d046d0002021b000e0e0c00024d0560000e0c000203062935296402054d0f5000106656272f2a4d1046000e0e0e0c0003292c4d113a00310e7e090003560829354d122c004d0028000e0c0003030829362936296502044d1316002d3c4d1010000e0c000330302b6a642a2e0e7d070002|@4174,I229,@4133,I233,@460,I105,I218,@235,I111,I106,-5,I234,I15,I231,@61,I253,@235,I107,@233,-1,@4173| 4173:O1|@4175 4174:S77|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d636865636b466f724c6f6f70496e7374727328312970726576283329 4175:C2,8|00804d000200100e|@449,@448| 4176:C1,16|00802b352c362d3756372e7b05030004|@4156| 4177:C1,16|00802b352c362d3756372e7b05030004|@4178| 4178:S77|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d636865636b466f724c6f6f70496e7374727328312970726576283129 4179:C1,16|00802b352c3656272d0e0e0e7e030003|@4160| 4180:C2,24|00802b352c3656272a68012a2d2b4d000600327b05070004|@4162,@3288| 4181:C1,16|00802b352c362d3756372e7b05030004|@4182| 4182:S62|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d66696c74657241726773283129 4183:C1,16|00802b352c362d3756372e7b05030004|@4182| 4184:S71|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d636865636b52656375727369766543616c6c73283129 4185:C22,456|00822b3b4d00c0010e0c000307d42d35293b4d00b2010e0e0e0c0003034756182e2a4d01a2010e0e0e0c00034d0298013b3b2c3b68055648312a4d018a010e0e0e0c00034d0280013b3b2c3b68054d03760156873b2b302c2f68054d0469012a69270906d7293b4d055d010e0e0c000303425619292b4d064e010e0e0e0c0003294d0743010c00024d083c010e0c000203062935296402054d092c01105648312a4d0123010c0003292c4d0a1a01330e7e0b0003561a2a4d0b0d010e0e0c00022a2a4d0602010e0e0e0c000365032a3b2a4f0cf3002000025638302a4d01e8000202a7000e0c00034d02dc002c3c2c3b68053b2a692705028f561b2a4d0bc8000e0c0002293b4d0dbe000e0e0e0c000303033c02182a4d0eae000e0e0e0c00022a2a4d0fa2000e0e0e0c00036403054d109500102a2a4d118e0002024a000e0e0e0c00032964294d077d000e0e0c00024d0874000e0c000203062935296402054d126400105658322a4d015b000c0003293c4d1352000e0e0e0c0003292d4d0a4600220c7e0d0003640235560c29354d0435004d0031000e0e0c0003030829362936296502044d141e002d3c4d0118000e0c000330302b6a642a2e0e7d070002440e0e0e0e0e0e0e|@4187,I229,I107,-5,@4188,-1,I233,@460,I105,I218,@235,@233,I111,@4190,I234,I15,I231,@61,I253,@235,I106,@4186| 4186:O1|@4192 4187:S78|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d636865636b52656375727369766543616c6c7328312970726576283329 4188:O1|@4189 4189:C2,8|00804d000200100e|@449,@448| 4190:C7,96|00802b3b4d0058000e0c000303033b024b570a2c4d0148000e0c00022a2a4d023e000e0e0e0c000365031d2b3c4d032f000c00030e4f042700010002293c4d051e002e0e7e0400032b3c4d0312000e0e0e0c00030e4f040700010002420e0e0e|@4191,I229,I111,@460,I106,@4190,I107| 4191:S84|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d636865636b52656375727369766543616c6c73283129676574506172616d4e6f283129 4192:C2,8|00804d000200100e|@449,@448| 4193:C9,200|00822b3b4d00c0000e0c0003039c2d35293b4d01b2000e0e0e0c000303595618292b4d02a2000e0e0e0c0003293b4d0096000e0e0e0c0003031e5637302a4d0386000e0e0e0c00034d047c002e3c2c3b68053b2a6966021c29355647312a4d0366000e0e0e0c0003292c4d055a00330e7e0b000365023056172e2a4d0349000e0e0c00032b3b4d063e000e0e0e0c00034d0734000e0c00024d042c002d2b2d3b68053b2a6927046402162b3c4d0318000e0c00032e2e2b6a6456192c7d050002440e0e0e0e0e0e0e|@4194,I229,I233,@460,I107,-5,@233,I113,I218| 4194:S86|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d636865636b52656375727369766543616c6c732831296c6f63616c4e657741646472283329 4195:C6,136|00812b354d0080004d017c000e0c000303082b362937296502162b353c4d0167000c000303062b37296402042b36296429354d0252004d014e000e0e0e0c0003032b2936293b4d033e000e0e0e0c000303043b50021456282e68012a2c2b4d0426000e0e0e0c000426035002023b5056172d68012a302b4d040d00310e0e0e7b050700040e0e0e0e|@4196,-1,I229,-5,I232,@3288| 4196:S80|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d636865636b52656375727369766543616c6c73283129736574546162283229 4197:C1,16|00802b352c362d3756372e7b05030004|@4198| 4198:S86|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d636865636b52656375727369766543616c6c732831296c6f63616c4e657741646472283129 4199:C1,16|00802b352c362d3756372e7b05030004|@4200| 4200:S78|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d636865636b52656375727369766543616c6c7328312970726576283129 4201:C1,16|00802b352c3656272d0e0e0e7e030003|@4202| 4202:S80|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d636865636b52656375727369766543616c6c73283129736574546162283129 4203:C2,24|00802b352c3656272a68012a2d2b4d000600327b05070004|@4204,@3288| 4204:S83|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d636865636b52656375727369766543616c6c732831297365744e6577546162283129 4205:C16,272|00812b3b4d0008010e0c000303033b06cb1201000100cfff292d4d01f2000e0e0e0c0003644d02e7000c000203192b3c4d03dc000e0c00032d2a0e0e0e4f04cf002100036402c31201000100d8ff2c3b4d05bc000e0c000303033c0218294d06ae000e0e0e0c00022d2a4d07a2000e0e0e0c00036403054d08950010292d4d098e000e0e0e0c00032964294d0a81000e0e0c00024d0278000e0c000203062935296402054d0b680010654d0c62000e0e0e0c00022d03032902341202000100cdff1203000100dbff2a2a4d0d42000e0e0e0c000329304d03360002022c000e0e0e0c00034d0e28002a2f3b6b27042d3c4d031c000e0c00032f2a0e0e0e4f040f004100032b2a69292705430e0e0e0e0e|@4206,I229,@460,I218,I107,@4205,I234,I15,I231,@61,I253,I105,@235,@4038,I106,-4| 4206:S60|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d6d616b6544656373283229 4207:O1|@4208 4208:C2,8|00804d000200100e|@449,@448| 4209:C3,48|00802b3b4d0028000e0c000303091201000100d0ff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1555,I229,@4209| 4210:C3,48|00802b3b4d0028000e0c000303091201000100cfff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1555,I229,@4210| 4211:C11,176|00822b3b4d00a8000e0c000303832d35293b4d019a000e0e0e0c000303425618292b4d028a000e0e0e0c0003294d037f000c00024d0478000e0c000203062935296402054d056800105647312a4d065f000c0003292c4d075600330e7e0b000356172e2a4d0648000e0c00032b3b4d083e000e0e0e0c00034d0434000e0c00024d092c002d2b2d3b68053b2a69270502172b3c4d0619000e0e0c00032e2e2b6a6456192c7d050002440e0e0e0e0e0e0e|@4212,I229,I233,@460,I105,I218,@235,I107,@233,I113,-5| 4212:S53|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d6973652832296c6f63616c4f6c6441646472283329 4213:C9,200|00822b3b4d00c0000e0c0003039c2d35293b4d01b2000e0e0e0c000303595618292b4d02a2000e0e0e0c0003293b4d0096000e0e0e0c0003031e5637302a4d0386000e0e0e0c00034d047c002e3c2c3b68053b2a6966021c29355647312a4d0366000e0e0e0c0003292c4d055a00330e7e0b000365023056172e2a4d0349000e0e0c00032b3b4d063e000e0e0e0c00034d0734000e0c00024d042c002d2b2d3b68053b2a6927046402162b3c4d0318000e0c00032e2e2b6a6456192c7d050002440e0e0e0e0e0e0e|@4214,I229,I233,@460,I107,-5,@233,I113,I218| 4214:S53|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d6973652832296c6f63616c4e657741646472283329 4215:C6,136|00812b354d0080004d017c000e0c000303082b362937296502162b353c4d0167000c000303062b37296402042b36296429354d0252004d014e000e0e0e0c0003032b2936293b4d033e000e0e0e0c000303043b50021456282e68012a2c2b4d0426000e0e0e0c000426035002023b5056172d68012a302b4d040d00310e0e0e7b050700040e0e0e0e|@4216,-1,I229,-5,I232,@3288| 4216:S47|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229736574546162283229 4217:C1,16|00802b352c362d3756372e7b05030004|@4218| 4218:S53|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d6973652832296c6f63616c4e657741646472283129 4219:C1,16|00802b352c362d3756372e7b05030004|@4220| 4220:S53|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d6973652832296c6f63616c4f6c6441646472283129 4221:C1,16|00802b352c3656272d0e0e0e7e030003|@4222| 4222:S47|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229736574546162283129 4223:C2,24|00802b352c3656272a68012a2d2b4d000600327b05070004|@4224,@3288| 4224:S50|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d6973652832297365744e6577546162283129 4225:C8,208|00812c352d362e3756382f2a4d00c0000e0c00032b2a4d00b6000e0e0e0c00035667293b4d01a8000e0c000329293b4d029d000e0e0c000303033b025a29352a362a354d0389004d0285000e0e0c000303332a362b372c38220d2c4d0471000e0e0c0003031b312a4d0464000e0c0003030c220c2b4d0257000c000302013b02013b6602054d0547001003033c0207292503511e663b656603033b022b56674d032d0030302d3b68055687293b4d011f000c00032b2a692d3b2b4d0612000e0e0e0c0004503b27052706430e0e0e0e0e|@4227,I107,I253,I229,-5,I113,@4226,I255| 4226:O3|@7129,@237,@4228 4227:S52|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d6973652832296164644e6f6e4c6f63616c283229 4228:S25|66696e644e6f6e4c6f63616c3a206e6f742045787472616374 4229:C4,184|00822d362e2d2f6a56280e0e0e0c000229354d00a2004d019e000e0e0e0c00030308293629372965021629353c4d0187000c000303062937296402042936296429354d0272004d016e000e0e0e0c0003036029362a372b382c392c2c2c2c6b2d3b4d0153000c0003033a2c3b4d0148000e0c00030322343b4d013c000e0c000303033002013b03043b500209293456a70e0c0003502e020a293456a70e0c0003502e020a293456a70e0c0003502e270502012966440e0e0e|@4230,-1,I229,-5| 4230:S55|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636865636b526563757273696f6e283329 4231:C1,16|00802b352c362d3756372e7b05030004|@4232| 4232:S55|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636865636b526563757273696f6e283129 4233:O2|@4235,@4234 4234:O2|@4246,@4233 4235:C16,848|00802b354d0048034d0144030e0c00030a16006c02c9012d01b101e500e001cd009900b400670089016d002e0044016902fd00f102d000dd016a00a5005102cd022b3629372a382b392b2e0e0e0c00022a2f0e0e0e0c00022a2a4d02f2020e0e0e0c00032d56870e0e0c00022a2a4d02de02220c7e0b000306cc3b06cb3c06ca2b362c372a2c0e0e0e0c00022a2d0e0e0e0c00022a2a4d02b6020e0e0e0c0003293c4d02aa02320e7e0800032b37292b2d0e0e0e7d0400022b363b2a0e4f038f022000026506cf2b36294d0482020e0e0e0c00024d0578022d0e0e0e7d0400023c06da2b36292b0e0e0c0002293c4d025e022f0e7e0500032b3629352a392a2d0e0c0002292b4d024602310e7e0700032b362c37292c0e0e0e0c00023b2c0e0e0e4f062b024000022b2a4d0222020e0e0e0c0003293d4d021602330e7e0900032b363b2a02060002fe01fc010e4f07ff012000026506d12b362c372d382b2d0e0e0c00022b2e0e0e0e0c00022a2a4d02de010e0e0e0c00032c300e0e0e0c00022a2a4d02ca010e0e0e0c0003293d4d02be01220c0202b0017e0b00032b362c372a2c0e0e0e0c00023b2b0e0e0e4f089f014000022b2a4d02960132020289010e7e0800032b363b2a0e4f098301200002293c4d027a01300e7e0600032b36292b0e0c0002293c4d0266012f0e7e0500033c06cd2b362c372d382b2d0e0e0c00022b2e0e0e0e0c00022a2a4d0242010e0e0e0c00033b2d0e0e0e4f0a33017000022b2a4d022a0102021e010e0e0e0c00033b30293b4d0b18010e0c000303032a021629362b3c4d0207010c0003292b25042504511e213b65652a2a4d02f200220e7e0d00032b363b2a0e4f0ce300200002293d4d02da00300e7e0600033c02c92b362c372d382a35404d0bc4000e0c000303222a363b2a0e0e0e4f0db3005000022c300e0e0e0c00022a2a4d02a200340e7e0a0003292d0e0e0e0c00022b2e020286000e0e0e0c00022a2a4d0282000e0e0e0c0003292f4d027600330e7e0900032b362c372a2c0e0e0e0c00022a2a4d025e000e0e0e0c0003293d4d025200310e7e0700032b3629354d0e44004d0b40000e0c0003030e29362937292d2f0e0e0e7d06000229353c4d0b25000e0e0c0003030a2937292c2e0e7d0500022936292c2e0e0e0e7d050002420e0e0e0e0e0e0e|@4237,-11,I107,I106,@4238,I105,I218,@4240,@4241,@4242,@4243,@4244,I229,@4245,@4236,-1| 4236:C4,56|00802b3b4d0030000e0c000303033b021f2b352c362a56350e0c00022a4f0117003100022a2a4d020e00310e7e070003420e0e0e0e0e0e0e|@4239,I229,@4236,I106| 4237:S30|42617365436f6465547265652e6973536d616c6c28322973697a65283129 4238:C4,56|00802b3b4d0030000e0c000303033b021f2b352c362a56350e0c00022a4f0117003100022a2a4d020e00310e7e070003420e0e0e0e0e0e0e|@4239,I229,@4238,I106| 4239:S34|42617365436f6465547265652e6973536d616c6c28322973697a654c697374283129 4240:C4,56|00802b3b4d0030000e0c000303033b021f2b352c362a56350e0c00022a4f0117003100022a2a4d020e00310e7e070003420e0e0e0e0e0e0e|@4239,I229,@4240,I106| 4241:C4,56|00802b3b4d0030000e0c000303033b021f2b352c362a56350e0c00022a4f0117003100022a2a4d020e00310e7e070003420e0e0e0e0e0e0e|@4239,I229,@4241,I106| 4242:C4,56|00802b3b4d0030000e0c000303033b021f2b352c362a56350e0c00022a4f0117003100022a2a4d020e00310e7e070003420e0e0e0e0e0e0e|@4239,I229,@4242,I106| 4243:C4,56|00802b3b4d0030000e0c000303033b021f2b352c362a56350e0c00022a4f0117003100022a2a4d020e00310e7e070003420e0e0e0e0e0e0e|@4239,I229,@4243,I106| 4244:C4,56|00802b3b4d0030000e0c000303033b021f2b352c362a56350e0c00022a4f0117003100022a2a4d020e00310e7e070003420e0e0e0e0e0e0e|@4239,I229,@4244,I106| 4245:C4,56|00802b3b4d0030000e0c000303033b021f2b352c362a56350e0c00022a4f0117003100022a2a4d020e00310e7e070003420e0e0e0e0e0e0e|@4239,I229,@4245,I106| 4246:C3,112|00802b3b4d0068000e0c000303033b02572b3529352a362e362b56570e0c00023b2c293b4d0048000e0c000303032a021629362b3c4d0137000c0003292b25042504511e213b65652a2a4d0122000e0e0e0c00032c310e0e0e0c00022a2a4d010e00220c7e0b0003420e0e0e0e0e0e0e|@4247,I229,I106| 4247:S38|42617365436f6465547265652e6973536d616c6c28322973697a65436173654c697374283129 4248:C3,40|00802b3b4d0020000e0c00030304560002142b352c36290e0e4f010b002100022b2a69292704420e|@1555,I229,@4248| 4249:C2,24|00802b355617293b3c4d000b000c0004502a65420e0e0e0e|@4250,I255| 4250:S51|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d69736528322966696c74657241726773283129 4251:C3,48|00802b3b4d0028000e0c000303091201000100e8ff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1555,I229,@4251| 4252:C4,48|00802b3b4d0028000e0c000303033b021d2b352c362a0e0e0e4f0113002100022a4f020b003100022a2a69292705420e|@445,I229,@4253,@4252| 4253:C10,128|00802b354d0078004d0174000e0c000303622b362c37293b0e4f026300320003573c293b4d0358000e0c0003575c2a3c4d044c000e0c00032a3b2b4d0541000e0e0c0004504d0637002c3c3b3b68053b2a69312a6957af0e0e0c0002502f4d071e000e0e0e0c00024d0014002f2b3b6b270a02054d08080010420e0e0e0e0e0e|@4255,-4,I229,@4034,I253,I106,I255,-5,@4038,@4254| 4254:O3|@7129,@237,@4256 4255:S48|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d6973652832296465636c417267283129 4256:S19|6465636c4172673a206e6f74204465636c6172 4257:C2,24|00802b355617293b3c4d000b000c0004502a65420e0e0e0e|@4250,I255| 4258:O3|@7129,@237,@4259 4259:S26|4c6f6f703a206d69736d61746368656420426567696e4c6f6f70 4260:C5,56|00802b3b4d0030000e0c000303033b02252b352c362a3b0e0e4f011b003200034d0214000e0c00022a4f030b003100022a2a69292705420e|@445,I229,@4034,@4038,@4260| 4261:O3|@7129,@237,@4262 4262:S30|4c6f6f703a206e6f74206174207461696c206f6620426567696e4c6f6f70 4263:O2|0,@4264 4264:O2|9,0 4265:C14,296|0085560029354d001e014d011a010e0e0e0c00030308293629352965021329353c4d0103010c000303062936296402013b1203000100f9ff29354d00ea004d01e6000e0e0e0c00030308293629352965021329353c4d01cf000c000303062936296402013b3b3b332e220e0e0e4f02b700800004332d220e0e4f02ab00900004578c293b4d03a0000e0c000357ac2a220e4d0493000c00032a3b2b4d0589000e0e0c0004504d067f0022142d6a220f2a4d0774000e0c00034d086c002e6922112a4d0763000c00034d095c0022183c3b3b6805280b2a22156a402c693e2216694d0a4400221c2b3b6b1216000100fbff3d2a221122116b2933692c2a693c28403b4d0b23000c00044d0c1c00121c0002000700692b2a342d220c68054d0008002a69271c1f060e0e|@4267,-1,I229,@4268,I253,I106,I255,@4280,@4282,@4285,-5,-4,I11,@4266| 4266:C4,56|00802b352c362a352b362c372d384d0026002d2d2d2d68053b2a695687302a4d0115000e0e0c0003292c4d020a00220e7e0d00030e0e0e0e|@4287,-5,I107,@233| 4267:S54|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f6d62696e655475706c6573283629 4268:C9,120|00822b4d0071000e0e0c00024d0168000e0c0002031a2b352d2a0e0e0e4f0257002100034d0350002d0e0e0e7d060002560c4d0442002a3c3b3b680540306956372b2b2b4d0530000e0c0004293b69293b4d0623000c0003030332020c3b330e0e4f0713007000026427064d0309002c7d0500020e0e0e0e|@4270,I105,I218,@4271,@3801,-5,@4275,I229,@4269| 4269:C3,48|00802b3b4d0028000e0c000303091201000100f9ff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1555,I229,@4269| 4270:S69|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f6d62696e655475706c65732836296372656174654272616e6368283329 4271:C7,144|00812c3b4d0088000e0c000303054d017e00102c3529354d0275004d0071000e0e0c0003035229362e362a2f4d0360000e0c00030330563c2b2a4d0352000e0e0e0c000364030329021a563c4d0440002a3c3b3b68054d0236002d2b3b6b292d69292704020f292f0e4f0523004100032c2a6929656502112d36292e0e4f050f003100032b2a69296664430e0e0e0e0e|@4273,I229,@4272,-4,I113,-5,@4271| 4272:O3|@7129,@237,@4274 4273:S76|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f6d62696e655475706c65732836297265706c616365436f6e7461696e6572446563283229 4274:S19|7265706c616365436f6e7461696e6572446563 4275:O1|@4276 4276:C6,120|00822c353d4d006f000c000303272c362d372e38302b304d015d000e0e0c0004312b314d0151000e0e0c00043d2e2c2c6b2705023c2c3528094d003b000c000303152c363b2a0e0e0e4f022b0020000228092a6966021a2c354d031b004d0017000c000303032c02084d040b002c2e306b440e0e0e0e0e0e|@4278,I229,@4275,@4277,-10,-11| 4277:C5,80|00802b3b4d0048000e0c000303054d013e00102b36293b4d0035000e0e0c000303192c35562956372a2c2b4d0221000e0e0c0004293b69270402122c352a0e0e0e4f030b002100022a2a69296664420e|@4279,I229,@1773,@4275,@4277| 4278:S28|434f44455452454528292e6d6b536574436f6e7461696e6572283329 4279:S40|434f44455452454528292e6d6b536574436f6e7461696e65722833296170706c794c617374283129 4280:C4,48|008056082c2a4d0026000e0e0e0c000356274d011a002a3c3b3b680528062a316a4d020b002d2b3b6b2705420e0e0e0e|@4281,I106,-5,-4| 4281:S69|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f6d62696e655475706c65732836297370656369616c446563732d283129 4282:O1|@4283 4283:C10,216|00812c3b4d00d0000e0c000303054d01c600102c3c4d02bf000c00032928403b4d03b4000e0c0004293b304d04a9000e0e0c00045029653b2e2a4d059a000e0e0e0c000303043b500230292e0e0c00022a3c4d0282000e0e0e0c00032c2a2c4d0475000e0e0c0004502b3c4d0269000e0e0c00032503511e3f5150293b4d0657000c00033b2a293b4d074c000e0c000303032a023f293c4d083d000e0e0c00032a3c4d0832000e0e0e0c0003293c4d0226000e0e0e0c00032f2a4d061a000e0e0e0c0003292f69292e2507250726051e493b27052704430e|@4284,I234,@87,I106,I11,I255,I232,I253,I229,I240| 4284:S16|4c6973742e746162756c617465283229 4285:C3,32|008056072c2a4d0016000e0e0e0c00034d010c002a3c3b3b680565420e0e0e0e|@4286,I106,-5| 4286:S72|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f6d62696e655475706c65732836297370656369616c456e74726965732d283129 4287:S60|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f6d62696e655475706c6573283629656e76283129 4288:C15,536|00803b3b2d3b4d000e020e0e0e0c000303064d01020206d22d3529354d02f8014d00f4010e0c0003031529362a373036292b2d0e0e4f03df018000046606cb29354d04d3014d00cf010c0003031129362f36292b0e4f05bf016000036506da2e36293b4d00b1010e0e0c0003031156472b2a0e0e0e4f069f016200036406d42a3b4f0693015200032a4f078b0151000229354d0882014d007e010e0e0e0c00030308293629372965021629353c4d0067010c00030306293729640204293629642a354d0852014d004e010e0e0e0c000303082a362939296502044d093a012b354d0834014d003001020223010e0c000303082b362936296502044d0a1a012d354d0814014d001001020202010e0c000303082d362935296502132d353c4d00f7000c000303062d36296402013b2e354d08e5004d00e1000202d3000e0e0c000303082e3629372965021a2e353c4d00c7000202b8000c000303062e37296402042e3629642e354d08ae004d00aa000e0e0e0c000303082e362935296502132e353c4d0093000c000303062e36296402013b2a2a69293b4d007e000e0e0e0c000303032c020c3b2d0e0e4f0b6b00e000026431354d0861004d005d000e0e0c00030308313629382965020e3c28403b4d0c46000e0e0e0c00042a30332c34680531354d0d33004d002f000c000303172b3b4d0024000e0c000303053b336902043c2c346a02064d080f002a69270c646465420e0e0e0e0e0e0e|@4290,I229,@4263,-4,@4291,-9,@4296,@4034,@4288,-1,@440,@4333,@4289,I11,-2| 4289:C3,48|00802b3b4d0028000e0c000303091201000100f2ff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1555,I229,@4289| 4290:S57|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70794465636c61726174696f6e73283129 4291:C11,328|0082580f2d3b0e0e0e4f003b012300032a2a2f3c0e4f012f01530005304f0227013200022a3b4d031e010e0e0e0c000303032906d329354d040d014d0309010e0e0c00030308293629372965021629353c4d03f3000c00030306293729640204293629642a354d04de004d03da000e0e0e0c000303082a362939296502044d05c6002b354d04c0004d03bc000e0c000303082b362936296502044d06aa002c354d04a4004d03a0000e0c000303082c362935296502132c353c4d038b000c000303062c36296402013b293b4d0379000e0e0c000303032e020c3b2f0e0e4f076700900002642e354d045d004d0359000e0e0c000303082e362938296502123c28403b4d08420002023b000e0e0e0c00042a2d302c3168052e354d092b004d0327000c000303172b3b4d031c000e0c000303053b306902043c2c316a02064d0407002a692707270444|@4293,@4034,@4130,@4288,I229,-1,@440,@4294,@4292,I11,-2| 4292:C3,48|00802b3b4d0028000e0c000303091201000100f7ff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1555,I229,@4292| 4293:S59|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70794465636c61726174696f6e732831292f32 4294:O1|@4295 4295:C2,8|00804d000200100e|@449,@448| 4296:C26,864|00812b4d0059032a3b4d0153030c0003030329021b2a352b362a2c4d0241030e0e0c00032a2a2505250526031e253b666529352a36583c293b4d0323030c00033b2c0e0e0e4f041703600002587c293b4d030c030e0c000330293b4d0101030e0e0c000303033b024029352a362a354d05ed024d01e9020e0e0c0003031e2a362b37293b0e4f06d702f300032b2a696458ff0e0e0e0c0002260302054d07c00210292503511e4c3b65643c28403b4d08ae020e0e0e0c00044d09a4022a2d326b3b3b3b0e0e4f0a9702e00002293c2a3b4d018c020e0c0003030329023d2a352b362a354d0579024d0175020e0e0c0003031b2a3729354d0b66024d0162020e0e0e0c000303032c02013b6402013b2a2a2505250526031e483b66652e3b4d033f020c000303033c02012903032a02d84d0c2d022b2a0c00024d0d24022d69402b692b293b4d0118020e0c000303033c021f293529354d0b07024d0103020c0003030c2a36292503511e263b6402013b64640312294d0ee8010e0c00024d0be0012a6964020129293b692c2a6928092a6929121a00030004000e0c00023b221722144d0fbb012b4d10b6010e0e0e0c00024d11ac010e0c000203462b352c362c4d109d010e0e0c00024d1194010e0c0002032a2c352d360402002d2c302c1612007e0127000000000550292d2c2b25092509250926061e503b270402012b6502012966293629270c221416130052011300020000022a3b4d0146010e0e0e0c000303033b02292a360402002a3b4d0130010e0c0003030a2c352a2a453b4651020c4d0d1c012d692a2a453b465129652a354d140c014d0108010e0c000303082a362937296502162a353c4d01f3000c000303062a37296402042a3629642b354d14de004d01da000e0e0e0c000303082b362939296502044d15c6002c354d14c0004d01bc000e0c000303082c362936296502044d16aa002d354d14a4004d01a0000e0c000303082d362935296502132d353c4d018b000c000303062d36296402013b293b4d0179000e0e0c000303032d02103b2e0e0e16170066001a0000000002642f354d1459004d0155000e0e0c000303082f3629382965020e3c28403b4d083e000e0e0e0c00042a2d302c3168052e354d182b004d0127000c000303172b3b4d011c000e0c000303053b306902043c2c316a02064d1407002a69271a430e0e|@4298,@342,I229,@4299,I253,@4302,-4,@4034,@4303,I11,@4305,@4307,-3,@4321,-9,@3098,@342,I105,I218,@4325,@4288,-1,@440,@4331,@4297,-2| 4297:C3,48|00802b3b4d0028000e0c000303091201000100e8ff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1555,I229,@4297| 4298:S59|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70794465636c61726174696f6e732831292f33 4299:O1|@4300 4300:C4,112|00812b352c360402002f354d0061004d015d000e0e0c000303472f3729354d024e004d014a000e0e0e0c000303272936293a293b4d0138000e0c0003030b322f692d2a452f46510209322e692d30452a4651510209302c692b2e452a46515002092f2b692a2d452a46512966430e0e0e|@4301,-4,I229,-7| 4301:S70|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70794465636c61726174696f6e732831293c7061747465726e3e2d283229 4302:C9,160|00802b3b4d0098000e0c000303033b028d2b352c362a354d0185004d0081000e0e0c000303642a3612040004000600293b4d026b000c00034d0364002a3c3b3b68053b2a692d2a6965120700040009000e0c0002501206000400060012070004000600293b4d0237000c0003293c4d042e000e0e0e0c00032c3b2b4d0521000e0e0c0004502d270702054d061200102a0e4f070b003100022a2a69292705420e|@445,I229,-4,I253,-5,I106,I255,@4303,@4302| 4303:O3|@7129,@237,@4304 4304:S22|6d757475616c446563733a206e6f74204465636c6172 4305:C6,168|00802b354d00a0004d019c000e0c000303842b362c372d382a3c4d018a000e0e0e0c0003035b293b4d017c000e0c0003033b56392c2a4d026e000e0e0e0c000364031056382c2a4d035d000e0e0c00036402013b03033b02125637293b3c4d0446000e0e0e0c0004503b6402125637293b3c4d0432000e0e0e0c0004503b6402125637293b3c4d041e000e0e0e0c0004503b646602115607293b3c4d0409000e0e0c0004503b6442|@4306,-5,I229,I231,I234,I255| 4306:S72|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70794465636c61726174696f6e73283129636865636b436c6f73757265283129 4307:C3,48|008056021202000100f8ff3b2b2b0e0e0e4f001b0040000329352a3629030b3b0e4f010b0061000202012a2706420e0e|@4309,@4308,@4307| 4308:C6,96|00812c4d0059000e0e0c00024d0150000e0c000203432c352d362d4d0041000e0e0c00024d0138000e0c000203242d352e362b2a0e4f0227005100030402002e2d2c2c0e0e4f0317009200055029270402044d040a006502044d040300430e0e|@4311,I105,I218,@4308,@4310,@342| 4309:S73|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70794465636c61726174696f6e7328312972657065617450726f63657373283129 4310:C16,824|00832e354d0030034d012c030e0c000307d12e362f372e352f362c3c3b3b6b120600040007002a2a3b6a6512060004000a000e0e0e0c000229354d02fa024d01f6020e0e0e0c00030308293629372965021629353c4d01df020c000303062937296402042936296429354d03ca024d01c6020e0e0e0c000303033c02013b03134d00b402342b3b6b292e69332a452e466506cb2e4d04a00269120800040009000e0c0002344d048f0269120900040008000c00022f3b0e0e0e4f057b0294000329354d0272024d016e020e0e0e0c00030308293629372965021a29353c4d01570202024b020c00030306293729640204293629642a354d023e024d013a020e0e0e0c000303082a362939296502044d0626022a354d0320024d011c020e0c000303033c02013b2b354d030c024d0108020e0c000303032b02572b354d07f9014d01f5010e0e0c000303412b362938120f000100f3ff2a293b4d01dc010202cc010e0c000303043b50021229352a362a2d0e0c000250292503511e2351504d08b70122143c3b3b68056602054d09a901103b2a6922122a6964120f00040008000e0e0c00022c354d078e014d018a010e0e0e0c0003033b2c36293a294d0279014d0175010e0e0c000303064d066a01021e30354d0262014d015e010e0e0e0c0003030830362939296502044d064a0165021d2e354d0241014d013d010e0e0c000303082e362939296502044d062a014d0a26012a354d0120010e0c00034d0b18010e0c0002032d33354d020c014d0108010e0c0003030833362939296502044d06f6004d0af2002a354d01ec000e0c00036402013b30354d02de004d01da000e0e0e0c0003030830362936296502044d0cc60031354d02c0004d01bc000e0c00030308313629352965021331353c4d01a7000c000303063136296402013b32354d0295004d0191000e0e0c00030308323629382965020e3c28403b4d0d7a000e0e0e0c00042a2c312c3168052e354d0a67004d0163000c000303172b3b4d0158000e0c000303053b316902043c2c326a02064d0243002a6922142a692705121200040009000e0c0002504d002b002215313b6b29220f69220e03033c02072f03033c02012b22152b452a46270d270602054d0e0400101f040e|@4313,-4,I229,-1,-3,@4314,@4034,@440,-7,-5,@4316,-2,I218,@4318,I11,@4312| 4311:S17|4c697374506169722e666f6c6472283429 4312:O3|@7129,@237,@4320 4313:S77|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70794465636c61726174696f6e7328312970726f636573734e6f6e496e6c696e6573283429 4314:O2|0,@4315 4315:O5|-5,0,0,-1,0 4316:O3|@7129,@237,@4317 4317:S33|70726f636573734e6f6e496e6c696e65733a204e6f7420612066756e6374696f6e 4318:O1|@4319 4319:C2,8|00804d000200100e|@449,@448| 4320:S29|70726f636573734e6f6e496e6c696e65733a206e6f74204465636c6172 4321:O1|@4322 4322:C6,80|00802b3b4d0048000e0c000303033b02392b352c362a354d0135004d0031000e0e0c0003030f2a364d0224002a3c3b3b68056402054d031700102a4d0411000e0e0c00022a2a69292705420e0e0e0e0e|@445,I229,-4,-5,@4323,@4321| 4323:O3|@7129,@237,@4324 4324:S20|65787472616374733a206e6f74204465636c6172 4325:C11,344|00832e354d0050014d014c010e0c000307ce2e362d352e362b3c3b3b6b120500040007002a2a3b6a6512050004000a000e0c00021205000100e6ff2c2a4d0217010c00033b2a69342a6964120800040008000e0e0e0c0002502b354d03f9004d01f5000e0e0c000303082b362939296502044d04e2002c354d03dc004d01d8000e0c000303082c362936296502044d05c6002d354d03c0004d01bc000e0c000303082d362935296502132d353c4d01a7000c000303062d36296402013b2e354d0395004d0191000e0e0c000303082e362938296502123c28403b4d067a0002026b000e0e0e0c00042a2c2f2c3068052d354d0763004d015f000c000303172b3b4d0154000e0c000303053b2f6902043c2c306a02064d033f002a69342a692706120800040009000e0e0c0002502d3c4d0825000e0e0c00034d001c00220c2c3b6b292f69342c452a46270902054d090700101f040e0e0e0e|@4327,-4,I229,@3087,-1,@440,@4328,I11,-2,I106,@4326| 4326:O3|@7129,@237,@4330 4327:S77|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70794465636c61726174696f6e73283129646563732d726570726f63657373446563283429 4328:O1|@4329 4329:C2,8|00804d000200100e|@449,@448| 4330:S24|726570726f636573734465633a206e6f74204465636c6172 4331:O1|@4332 4332:C2,8|00804d000200100e|@449,@448| 4333:O1|@4334 4334:C2,8|00804d000200100e|@449,@448| 4335:C19,392|00822c3b4d0080010e0c0003030b2b4d0175010803003b06cd2c352d364d0267011204000100f7ff692b3b0e0e4f0357014200032a2a333c0e4f044b017200051206000100f7ff29344d053b010c0003294d0633010c00024d072c010e0c000203062935296402054d081c0110220c3c4d0914010e0c00030403002a322b0e0e0e4f0a0301c100045029352a362b372e354d0bf3004d00ef000c000303082e362937296502162e353c4d00db000c000303062e37296402042e3629642f354d0bc6004d00c2000e0e0e0c000303082f362939296502044d0cae002a354d0da8004d00a40002029b000e0c000303033c02013b4d0792000e0e0e0c000203171210000100f6ff293b3b4d0e7c000e0c0004503b6402013b2a354d0f6c004d0068000e0c000303162b354d0d5c004d0058000e0c000303033c02013b02013b03072b2d69296402104d103e0022153c3b3b6805292e6929652c2f69303b4d0029000e0e0c00030304220d020f3b220e16110016001500000000026422152a452b462c472713440e0e0e0e|@4337,I229,@4338,@4339,@4034,@4130,@460,I105,I218,@235,I106,@4335,-1,@440,-3,I255,-2,-5,@4336| 4336:C3,48|00802b3b4d0028000e0c000303091201000100f4ff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1555,I229,@4336| 4337:S49|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d6973652832296d616b6544656373283329 4338:O3|0,0,0 4339:C2,24|00802b352c3656272a68012a2d2b4d000600327b05070004|@4222,@3288| 4340:C11,416|00805603292d4d0096010e0e0e0c00034d018c01563229354d0284014d0380010e0c0003030829362936296502044d046e01575f576e577d578c579b57aa57b857c73434333333333333333b3434121a000200ffff0c000d29354d0242014d033e010e0e0e0c00030308293629372965021629353c4d0327010c00030306293729640204293629642a354d0212014d030e010e0e0e0c000303082a362939296502044d05fa002b354d02f4004d03f0000e0c000303082b362936296502044d06de001212000100fcff29354d02d1004d03cd000e0e0c00030308293629352965021329353c4d03b7000c000303062936296402013b2e354d02a5004d03a1000e0e0c000303082e362935296502132e353c4d038b000c000303062e36296402013b293b4d0379000e0e0c000303032a02103b2b0e0e16070066001700000000026430354d0259004d0355000e0e0c00030308303629382965020e3c28403b4d083e000e0e0e0c00042a2f322c33680530354d092b004d0327000c000303172b3b4d031c000e0c000303053b326902043c2c336a02064d0207002a692717420e0e|@4342,@3087,@4343,-1,I229,@4345,@440,@4347,@4341,I11,-2| 4341:C3,48|00802b3b4d0028000e0c000303091201000100ebff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1555,I229,@4341| 4342:S40|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d6973652832292f31 4343:O1|@4344 4344:C2,8|00804d000200100e|@449,@448| 4345:O1|@4346 4346:C2,8|00804d000200100e|@449,@448| 4347:O1|@4348 4348:C2,8|00804d000200100e|@449,@448| 4349:C5,56|00802b3b4d0030000e0c000303033b02252b352c362a3b0e0e4f011b003200034d0214000e0c00022a4f030b003100022a2a69292705420e|@445,I229,@4034,@4038,@4349| 4350:O3|@7129,@237,@4351 4351:S35|6f7074696d697365202d20636f6e7461696e6572206973206e6f742045787472616374 4352:C7,136|008056082c2a4d007e000e0e0e0c0003562729354d0170004d026c000e0c00030308293629372965021629353c4d0257000c0003030629372964020429362964293528054d0240000e0c0003030c2f2a4d0334000e0c0003022129354d0428004d0224000e0c0003030c2f2a4d0318000e0c0003020528062a316a4d0509002d2b3b6b2705420e0e|@4353,I106,-1,I229,@3087,-3,-4| 4353:S53|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d6973652832297370656369616c446563732d283129 4354:C3,32|008056072c2a4d0016000e0e0e0c00034d010c002a3c3b3b680565420e0e0e0e|@4355,I106,-5| 4355:S56|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d6973652832297370656369616c456e74726965732d283129 4356:C3,48|00802b3b4d0028000e0c000303091201000100f4ff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1555,I229,@4356| 4357:C4,56|00802b352c362a352b362c372d384d0026002d2d2d2d68053b2a695687302a4d0115000e0e0c0003292c4d020a00220e7e0d00030e0e0e0e|@230,-5,I107,@233| 4358:C7,128|00802b3b4d0078000e0c000303054d016e00102b3529354d0265004d0061000e0e0c0003034629362d3656322b2a4d034e000e0e0e0c00036403211204000100f8ff4d043a002a3c3b3b68054d0230002d2b3b6b292d69292704020d294f051f003100022c2a6929656502112c36290e0e4f050b002100022b2a69296664420e|@4360,I229,@4272,-4,I113,-5,@4358| 4359:S57|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d69736528322970757368536574436f6e7461696e6572283229 4360:S79|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d69736528322970757368536574436f6e7461696e65722832297265706c616365436f6e7461696e6572446563283129 4361:C5,72|0082040200280628403b4d003a000e0e0e0c0004293b28054d012c000e0c0004504d0223002a693c28402b4d0019000e0e0c00042c2a453b46502c320e4f0307005000022705440e|@4363,I11,I255,-1,@4362| 4362:C27,808|00802b354d0020034d011c030e0c00030a1600fa0186012e007001ad00ac014d002e00e1000d034a01c2002e002201f701f9002e00e400a601bc003500e501f6024d02e3021006cd2b363b2a0e4f03d702200002294d04cf022f0e0e7d0600022b362c372d382e392c2c2c2c6b2b3b4d05b5020e0e0c000303262d3b4d06a8020e0c000303032c02013b030f5650292f3c4d0793020c00045102023b5030021c2b3c4d0182020e0e0e0c000356672b2b2b6a655668310e0e7d080002270506dd2b363b2a0e4f085f022100036406d34d09550206cf2b362c372a0e0e0e4f0a47022100022a4f0a3f023100023b2b2b6a270406d42b06d32b362c372a0e4f0a270221000228062a2c6a6606cc2b362c372d382a02020d020e0e4f0a0b023100023b2d0e0e0e4f0bff015000023f2a2d2f6b270606dd2b362c372d382b0e4f0ae7013100022b4f0adf014100022b4f0ad7015100023d2c2c2c6b270606d72b362c372a0e0e0e4f0abf012100023b2b0e0e0e4f0cb3014000024d0dac012c2b6a270506cf2b363b2a0e0e4f0e9b012000024d0f94012a696606ce2b360202850129020480017e010e0e0e4f0a7b011100024d1074012a696506d64d116b0106d22b362c372d382b02045a0158010e4f0a57013100023b2b02024a010e0e0e4f1247015000022d4f0a3f016100024d1338012d2b2d6b270706da2b363b2a0e4f142701200002402a696606ca2b06c92b362c02021001372d3829354d150b014d0507010c0003035029362a372b382a3c4d05f6000202ee000e0e0e0c00030334293b4d05e4000e0c000303252b3b4d16d8000202d0000e0c000303033c02105660292d4d17c3000202bb000c00036402013c02013c6602013c2b353d4d05aa000e0e0e0c0003031c2a2c2e4d189b000204930091000e0e0c00040e4f0a8b0041000202632b3528094d057e000e0e0e0c000303142a2c2e4d186f000c00040e4f0a6700410002023f2b354d105c004d055800020650004e004c000e0c0003030c2b0e0e4f0a4300410002021b2a0e0e4f0a37004100022c4f0a2f005100024d0028002f2b2d6b652704021b2b362c372a0e0e0e4f0a1300210002280b2a2c6a6602044d190400420e0e0e|@4365,-11,I107,@4366,@4368,@3801,I229,I231,@3288,@4371,@4383,@4362,@4384,@4385,-1,@4386,-8,-10,@4387,@4388,-6,@4364,-5,I232,@460,@4275,@440| 4363:S23|434f44455452454528292e636c65616e50726f63283329 4364:C4,48|00802b3b4d0028000e0c000303033b021d2b352c362a0e0e0e4f0113002200022a4f020b003100022a2a69292705420e|@445,I229,@4362,@4364| 4365:S35|434f44455452454528292e636c65616e50726f63283329636c65616e436f6465283129 4366:O3|@7129,@237,@4367 4367:S24|636c65616e436f64653a20756e6b6e6f776e20696e737472 4368:C14,472|00802b3b4d00d0010e0c000303033b06d62b3529354d01bf014d00bb010c0003037e29362a372b382f365750292e3b4d02a5010e0e0c00042b4f039b01710002578029314d0490010e0c00036403033c020e2e58970c00024d057c010e0c000203392e354d0670014d006c010e0c000303112e36302a0e0e0e4f075b01a200036402092e0e4f084f018200024d014801312b316b292c692966020129270706cb29354d0932014d002e010e0e0e0c0003039929362d362a293b4d001b010c000303033b023829352a362a354d0109014d0005010e0e0c000303162a365770292b3b4d02f3000202ea000c0004260302054d0ae40010292503511e423b65642a0e0e4f03d3004100023b3b3b2f0e4f0bc700800004293b4d00be000e0e0e0c000303032b02222936293b4d00ab000c000303092a35292e692965020b4d0999002b69292e6929656427060287293528094d0085000e0e0c0003033b29362d36290e0e4f0373003100022b020265004f0367004100022a3b4d005e000e0e0e0c0003030329020c3b2a0e0e4f0c4b00600002642704023d2c36290e4f033b002100022b4f0833003200022958570e0e0c000203143b2b4d0020000e0c00034d0518000e0c000202013b03032a0205292b6929646664420e0e0e0e|@4370,I229,-4,@3288,@4368,@460,I218,-7,@4371,@4362,-9,@4377,@4379,@4369| 4369:C3,40|00802b3b4d0020000e0c00030304560102142b352c36290e0e4f010b002100022b2a69292704420e|@1555,I229,@4369| 4370:S49|434f44455452454528292e636c65616e50726f63283329636c65616e436f646528312970726f6365737344656373283129 4371:C4,64|00812b352c362d372e392f3a4d0030002c567034569868054d0124002a692f2a2f56a50e0e0c00042930303b31313b3b68084d020a002a692709430e0e0e0e0e|@4373,@4374,@4372,-7| 4372:C1,16|00802b352c362d3756372e7b05030004|@4376| 4373:S37|434f44455452454528292e636c65616e50726f63283329636c65616e4c616d626461283229 4374:C7,160|00822d352e362e3b4d0094000e0c0003037304050056392c2a4d0183000c00036403032a02013b031d56372f2a4d026f000c00032b4d036700453b463b472a483b492603023b2b3b4d0454000e0c000303032a02013b030f5638292d3c4d053f000c00045102023b5030353136323733382d4d032a00452d462c472b482a492605296402172e3c4d0215000e0e0c0003302a306a64563a2e7d07000265440e0e|@4375,I229,I113,I107,-5,I231,@3288| 4375:S46|434f44455452454528292e636c65616e50726f63283329636c65616e4c616d6264612832296c6f6f6b7570283329 4376:S46|434f44455452454528292e636c65616e50726f63283329636c65616e4c616d6264612832296c6f6f6b7570283129 4377:O3|@7129,@237,@4378 4378:S23|736574456e7472793a20756e6b6e6f776e20696e737472 4379:C10,192|00822b3b4d00b8000e0c0003031b2d3c4d00ac000e0c0003030c3b3b2e4f019f0021000402013b028f2b3529354d028f004d008b000c0003037829362a372b382f365850292e4d0376000e0e0e0c0003644d046b000c000203112d3269332a2c0e4f015b008100046402432b354d054f004d004b000c000303112b362d2a0e0e0e4f063b007300036402092b0e4f072f005300024d0228002e2b2e6b3c342d0e0e4f011b009100042a2a69292704270402054d080a001064440e0e0e0e0e0e0e|@4381,I229,@4379,-4,@460,I218,-7,@4371,@4362,@4380| 4380:O3|@7129,@237,@4382 4381:S66|434f44455452454528292e636c65616e50726f63283329636c65616e436f646528312970726f636573734465637328312970726f636573734d757475616c73283329 4382:S28|70726f636573734d757475616c3a20756e6b6e6f776e20696e737472 4383:O1|8 4384:C4,48|00802b3b4d0028000e0c000303033b021d2b352c362a0e0e0e4f0113002200022a4f020b003100022a2a69292705420e|@445,I229,@4362,@4384| 4385:C6,88|00802b3b4d0050000e0c000303033b02412b352c362a354d013d004d0039000e0e0c000303192a362b37290e0e4f0227004200024d0120002c2b3b6b6602054d031500102a4f040f003100022a2a69292705420e0e0e0e0e|@445,I229,-4,@4362,@3849,@4385| 4386:C4,48|00802b3b4d0028000e0c000303033b021d2b352c362a0e0e0e4f0113002200022a4f020b003100022a2a69292705420e|@445,I229,@4362,@4386| 4387:O1|7 4388:C4,48|00802b3b4d0028000e0c000303033b021d2b352c362a0e0e0e4f0113002200022a4f020b003100022a2a69292705420e|@445,I229,@4362,@4388| 4389:O1|@4390 4390:C6,104|00802b3b2a3b4d005e000e0e0e0c0003030329022c2a352b362a35293b4d0047000c000303032c020b2c3c4d0139000e0e0c00032b2a2506250626041e383b270465293c4d0220000e0c0003030e2c3b4d0314002e0e0e0e7e0400032c3b4d0406002e0e7e040003|@4392,I229,I106,I232,@4393,@4391| 4391:O1|@4397 4392:S46|56414c55455f4f505328292e63686f6f7365436f6e7374725265707228312963686f6f7365526570722831292f35 4393:O1|@4394 4394:C12,288|00812c3b4d0018010e0c000303033b06cc2c352d362a35294d0104014d0200010e0c00030a0200d1005a00a9002935293b4d00eb000c000303222c364d03e0002a4d04db000c00032d324d05d2000e0e0e0c00032a2a6929270402222c364d06be002a4d04b9000e0e0c00032d324d05ae000e0e0e0c00032a2a692927046402992b363c3069292b4d0794000e0c0003313b4d088a000e0e0e0c0003030c314d097d000e0e0c00020212313c4d0a70000e0c00034d0968000e0c00022e2a4d055e000e0e0e0c00032b2a69292706024a2b364d034a002a4d04450002023c000e0e0c00032c314d0536000e0e0e0c00032a2a6929270402222b364d0622002a4d041d000e0e0c00032c314d0512000e0e0e0c00032a2a6929270466430e0e0e0e|@4396,I229,-1,I107,@992,@3081,@4393,@4395,@3079,I234,I111,I106| 4395:O1|-4 4396:S35|56414c55455f4f505328292e63686f6f73654f7074696d697365645265707231283229 4397:C14,240|00812c3b4d00e8000e0c000303033b06cb2c352d362a35294d01d4004d02d0000e0c00030a020070003000590029352c362a3f4d03b9000e0e0c000303063e312c6a02064d04a8003169292b4d05a0000e0c00036602522b363c3b314d0690000e0c0004294d0787000c00024d0180002b69292d4d0878000e0c0003270402292b364d046a003069292b4d0562000e0e0e0c00036502122b364d0453003069292b4d054b000c0003652f3b4d0941000e0e0c0003030c2f4d0a35000e0e0c000202122f3c4d0b28000e0c00034d0a20000e0c00022c2a4d0c160002020c000e0e0e0c00032b2a69292707430e0e0e0e0e|@4398,I229,-1,I107,I232,-3,@3081,I11,I47,@3079,I234,I111,I106,@4391| 4398:S35|56414c55455f4f505328292e63686f6f73654f7074696d697365645265707232283229 4399:O1|4 4400:C9,104|00814d0062002d4d015d000e0e0c0003292d3b3b3c3b3b3b68084d024a002a692e304d0342000e0e0e0c0003293b692b2a69402a692a3b4d042d000e0e0c00030313294d0521000e0e0c00024d0618002a6964020129293b4d070c000e0c00033b2a220c7d0d0002|@4402,@474,@3085,-7,@4401,I229,@3098,-3,@3083| 4401:O1|@4403 4402:S39|56414c55455f4f505328292e6372656174654e756c6c617279436f6e7374727563746f72283229 4403:C15,224|00812b354d00d8004d01d4000e0c00030a070016004200b4008b002c009600850055004d02b90002b24d03b3002d3b3b3c3b3b3b68084d04a6002a6964029c4d059d002d3b3b3c3b3b3b68084d0490002a696402862b36294d0684000e0c00022e2a2e0e7d0600022b362c374d0770002a2c4d086a000e0e0e0c00043f4d095f002b3c6b29313b3b3c3b3b3b68084d044e002a69270502434d0a4400023d2b364d0b3c002a696402322b36294d0c30000e0c000203032902054d0d2300104d0b1e002a696502144d0315002d3b3b3c3b3b3b68084d0408002a6964430e0e0e0e|@4405,-4,I107,@510,@474,-7,@4406,@4404,I48,@3126,@472,@3050,-3,I105,@404| 4404:O1|@4407 4405:S25|56414c55455f4f505328292e636f6e7374724d616b65283229 4406:O2|10,@472 4407:C2,16|00804d000a002c69420e0e0e0e0e0e0e|@4409,@4408| 4408:C8,128|00805607294d0077000c000203032902054d016b00104d0266002a69294d035f0069402a692a293b4d0454000e0c000303033c021f293529354d0243004d043f000c0003030c2a36292503511e263b6402013b64640312294d0524000e0c00024d021c002a696402012929323b3b3c3b3b3b68084d0608002a692707420e0e0e|@4410,I105,@404,-3,@472,I229,@3098,-7| 4409:S25|56414c55455f4f505328292e746167426f78436f6465283129 4410:S26|56414c55455f4f505328292e6162737472616374283129283129 4411:C7,152|00812c352d36294d008d000e0e0c000203211203000100f8ff2e4d017a000e0e0e0c00022c2b3c2c4d026c000e0c00056502261203000100f8ff2a2a694d0357000c00022f4d014f000c00022d2b3b2c4d0244000e0c0005661204000400030058492d2b2b4d042f000c0004586c120800040003005889312c2c2c3c4d0518000e0c0006323169120c000200f2ff0e0e0e0c000231270b43|@4414,@1717,@4415,@4413,@1171,@1059,@2747| 4412:S15|4c697374506169722e6d6170283329 4413:O1|@4417 4414:S83|50415253455f5452454528292e706173733228362961737369676e56616c7565732836296173734162734461746128342967656e56616c7565436f6e7374727328322970726f63657373436f6e737472283229 4415:O1|@4416 4416:C2,16|00804d000a002c69420e0e0e0e0e0e0e|@2427,-1| 4417:C1,16|00832c68012f2a2e316b29651f040e0e|@4418| 4418:S32|5354525543545f56414c5328292e6d616b6556616c7565436f6e737472283429 4419:O1|@4420 4420:C3,16|00804d000a004d0106002d6a100e0e0e|@4421,@7129,@237| 4421:S54|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737341627344617461283429552d283129 4422:O1|@4423 4423:C19,424|00820402004d009f012a4d019a010e0e0e0c00035029352a3621054d02890145524d03830145292b466c502a2d462a4731482c496c5032293b4d046b010c000303043b5002c429352a362a4d0559010e0e0c00022f0c0002293b4d044a010e0e0e0c000303052b3b690280293529353b4d0434010e0c000303062936296402054d062401102d2a692e4d071b010c000203033c02272a4d080e010e0e0e0c00024d0904010e0c000203062a35296402054d0af400104d07ef000c0002032929293b4d04e3000c000303043b50021629352a362a3c4d0bd0000e0c000350292503511e22515002023b5029662c4d05b8000e0c00023b2b692a2a6965320e0c0002502b250526041ecf26045032293b4d0496000e0e0e0c000303033b028629352a362a4d0582000e0e0e0c0002292f0e0e0e0c0002294d0c6f004d046b000c0003033d2c4d0761000e0e0c0002032d2c4d0d55000e0e0c00024d0e4c002a4d0f47000c0003294d103f004d0f3b000c000365220e0e0e0c00025002023b50021a2a4d11240069320e0e0e0c0002502c3c4d0b15000e0e0c0003502b250526041e923b27042706440e0e|@4425,@4426,@4429,@4438,@4442,I229,@1153,@621,@2100,I105,I218,@1773,@2567,-1,@1751,@2175,@353,@4446,@4424| 4424:O2|-1,1 4425:S35|545950455f5452454528292e67656e457175616c69747946756e6374696f6e73283329 4426:O1|@4427 4427:C2,16|00802b352c364d0006002d0e7e030003|@4428,@2124| 4428:S27|5354525543545f56414c5328292e73616d65547970654964283129 4429:O1|@4430 4430:C4,40|00813c28403b4d001e000e0e0e0c00044d0114002a2f6a4d020d002f2c6a2e2b452a4666430e0e0e|@4432,I11,@4433,@4431| 4431:C3,72|00805608293b4d003e000e0e0e0c000329293b4d0131000e0e0c000303033b0224293529352a362c362b336956870e0e0e0c000203052a6801020829250526041e2f3b270466420e|@4437,I253,I229| 4432:S24|5554494c49544945535f28292e6d61705461626c65283229 4433:C5,104|00802b355617293b4d005c000e0c000329293b4d0151000e0e0c000303033b021c29352a362a352930696456780c000203033c0207292503511e283b6564030f3b2a0e0e0e4f021f00400002640201295647302b692a3b2b4d030c000e0c0004503b2706420e0e0e|@4435,I253,I229,@4434,I255| 4434:C3,64|00802b3b4d0038000e0c000303033b02292b352c362a3556342a2a696557380e0e0c00020303290210290e0e0e4f010f002100022b2a69296565420e0e0e0e0e|@4436,I229,@4434| 4435:S32|5554494c49544945535f28292e6d61705461626c65283229656e746572283129 4436:S33|5554494c49544945535f28292e6d61705461626c6528322964656c657465283229 4437:S33|5554494c49544945535f28292e6d61705461626c652832296c6f6f6b7570283129 4438:C12,288|00802b561a0c0002294d0013010c00024d010c010e0c000203062935296402044d02fc0029354d03f6004d04f2000e0e0e0c0003031d29354d03e4004d04e0000e0c000303062936296402054d05d0001002c82d4d06c8006956370e0e0c00025029353b4d04b8000e0c000303062936296402054d07a80010293c2a3b4d049f000c000303032902702a352b362b4d038e004d048a000e0e0e0c000303064d037e00024956790329324d0873000c00024d016c000e0c000203142a4d0961000e0e0c00024d0158000e0c000202013b02013b03064d03480002132a4d0a41000e0e0c00022c2a2d56b80c0004642a2a2505250526031e7a3b6665293b4d0420000e0c000303032b02064d0313002a69302a696456570c000250296565420e0e0e|@4440,I105,I218,@4441,-1,I229,@621,@4439,@621,@2560,@2100,@2172| 4439:O2|-1,0 4440:S49|545950455f5452454528292e67656e457175616c69747946756e6374696f6e7328332967656e457175616c697479283129 4441:O2|-1,-1 4442:C10,200|00822c3b4d00c0000e0c000303032d02b12c352d362a4d01ae000e0e0e0c0002294d02a3000c0002030e294d0399000e0e0c00023c6402013b644d048a000e0e0e0c0002030a2f2a2f2e307b050700042a4d0173000c0002294d026b000c0002030e294d0361000e0e0c0002296402054d05540010293556574d064b0032692b2b2b4d0742000e0e0e0c0004294d0837004d0033000c000303064d082a000220293b4d0022000e0e0e0c000303033b0202220c2931220d220c220e7b050e00042708440e0e0e0e0e|@4444,I229,@2338,@1778,@1780,I218,@621,@4443,@2104,-1| 4443:C8,104|008056074d0060000e0c000229293b4d0155000e0e0c000303033b023d29352a362a4d0242000e0e0e0c0002030e2a4d0335000e0e0c0002296402054d0428001029314d0521000e0e0c00036403033c0207292503511e493b656503033c02044d060400420e0e0e|@4445,@2106,I229,@1145,@1147,@621,@1695,-1| 4444:S46|545950455f5452454528292e67656e457175616c69747946756e6374696f6e73283329636f6e7374724571283329 4445:S52|545950455f5452454528292e67656e457175616c69747946756e6374696f6e73283329636f6e737472457128332965712d283129 4446:S27|2920646f6573206e6f74207265737065637420657175616c697479 4447:C1,24|00802b56180c000250560729372d2a2e7d0500020e0e0e0e|@4448| 4448:S71|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737341627344617461283429552d646563456e762d656e74657256616c466e283129 4449:C2,24|00805609561856272b3c2c2c324d000700330e7b07060006|@2658,@2657| 4450:C2,24|00805609561856272b3c2c2c324d000700330e7b07060006|@2658,@2657| 4451:S18|206973206e6f742061206461746174797065 4452:C5,56|00800402004d002f001b0f273b3b3b2e4d0124000e0c00075029644d0219000e0e0c00023b2d0e0e0e4f030b00200002502a65420e0e0e0e|@4454,@214,@1012,@989,@4453| 4453:C8,88|00802b3b4d0050000e0c000303033b02412b352c36572c2b2a4f013b00420003564458595769577c4d022c0058992b6a4d0324002a2d2f6b2f2f4d041a002c4d0515000e0e0c0005324f060b00b10002270b420e0e0e0e0e|@4456,I229,@2650,@4457,@4455,@2228,@2225,@4453| 4454:S49|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737369676e4c697374283129 4455:C4,40|00802b352c362d375639564856574d0016002f4d01110030303030304d02080022100e7b0a090009|@2703,@2702,@860,@2247| 4456:S61|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737369676e4c6973742831296170706c794c697374283129 4457:C6,64|008056085617292309294d0032004d012e000e0e0e0c00032f384d0222002a0e0e0c0002512f354d0315002a0e0c0002512c2a314d040800320e0e7b05070004|@2696,@7196,@623,@1916,@338,@1810| 4458:C6,56|0080560a292308562a29230c5649565856674d0022002a2d2d6b33302f4d0117004d0213004d030f002f4d040a0022110e0e0e7b090b0008|@2849,@4459,@2508,@2504,@1151,@2045| 4459:C2,24|00805609561856272b3c2c2c324d000700330e7b07060006|@2658,@2657| 4460:C6,64|008056085617292309294d0032004d012e000e0e0e0c00032f384d0222002a0e0e0c0002512f354d0315002a0e0c0002512c2a314d040800320e0e7b05070004|@2696,@7196,@623,@1916,@338,@1810| 4461:C4,40|00802b352c362d375639564856574d0016002f4d01110030303030304d02080022100e7b0a090009|@2703,@2702,@860,@2247| 4462:C4,40|00805609561856272e4d001b004d0117000c00032c3c2d2d2d4d020b00340e7b070700060e0e0e0e|@2979,@4463,@353,@2657| 4463:S37|2068617320616c7265616479206265656e20626f756e6420696e2074686973206d61746368 4464:C2,40|00802b56180c0002293b4d001a000e0e0e0c0003030a2c56272d0e0e7d0400022964420e0e0e0e0e|@979,I229| 4465:C2,24|00805609561856272b3c2c2c324d000700330e7b07060006|@2658,@2657| 4466:C2,40|00802b56180c0002293b4d001a000e0e0e0c0003030a2c56272d0e0e7d0400022964420e0e0e0e0e|@979,I229| 4467:C2,40|00802b56180c0002293b4d001a000e0e0e0c0003030a2c56272d0e0e7d0400022964420e0e0e0e0e|@979,I229| 4468:C2,40|00802b56180c0002293b4d001a000e0e0e0c0003030a2c56272d0e0e7d0400022964420e0e0e0e0e|@979,I229| 4469:O1|@4470 4470:C1,8|00803b420e0e0e0e|@4471| 4471:S60|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c7565732832296c6f63616c456e762d283129 4472:C3,56|00802b3656195629293b4d002a000e0e0e0c00032c2a692c3b2b4d011a000e0e0e0c0004503056680e0c00025056572937322a337d0a0002|@4473,I253,I255| 4473:S59|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c756573283229626f6479456e762d283129 4474:C1,24|00802b56180c000250560729382d2a2e7d0500020e0e0e0e|@4473| 4475:C1,24|00802b56180c00025056072923092d2a2e0e0e0e7d050002|@4473| 4476:C2,24|00805609561856272b3c2c2c324d000700330e7b07060006|@2658,@2657| 4477:C4,40|00805609561856272e4d001b004d0117000c00032c3c2d2d2d4d020b00340e7b070700060e0e0e0e|@2979,@1906,@353,@2657| 4478:C29,512|00802b352c362d372e38564857594d00ee012a58892d57aa680558792e2b2b2e4d01dc010e0c00052f4d02d3010c000203033b024d0402004d03c4011b0f273b3b3c2e4d04b9010e0e0c00075029644d05ad010e0e0c000258a957b956c84d069e0158e92b6a4d0796012a2d2f6b220c2f4d088b012c4d0986010e0e0e0c000527062f354d0a78014d0b74010e0c0003032a3c28403b4d0c66010e0e0e0c00043c28403b4d0c58010e0c00043c2b2b6a220c3b2b220d6b29270406ca2f354d0d3e014d0b3a010e0e0e0c000303d92f36303757ca29230657ea29230c1211000100020012120003000300121300020003004d0e0b012a2d2d6b32302f4d0f00014d10fc004d11f8002f4d12f3000c0008294d13eb000c00022936293b4d0be0000e0c000303043b50023c1218000300030012190001000200121a0002000300282822104d14b9000e0e0c0003294d15af004d14ab000c00032d3c2e2e2d4d169f000c00062606343b2d4d1793000c0004502b4d188a000e0e0e0c00023c28403b4d0c7c00020224000e0c00043c28403b4d0c6c000e0c00043c2b2b6a221a3b2b2f6b29271202054d19550010323b2b4d174d000e0e0c000450334d0342006956c10c00025058b957c9220c2b2b4d1a2f000c00045056d858e957f9220f2c2c2c3c4d1b1b000c000650121100020004002937221131692a22150e0e0e7d150002|@4480,@4481,@2516,@1717,@214,@1012,@989,@4483,@4484,@2228,@2225,-5,I229,I11,-8,@4485,@2663,@4486,@1252,@2045,@2673,@353,@4487,@2657,I255,@2338,@4479,@1059,@2747| 4479:O3|@7129,@237,@4488 4480:S67|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c75657328322970726f63657373457863657074696f6e283129 4481:C6,56|0080560a292308562a29230c5649565856674d0022002a2d2d6b33302f4d0117004d0213004d030f002f4d040a0022110e0e0e7b090b0008|@2849,@4482,@2508,@2504,@1151,@2045| 4482:C2,24|00805609561856272b3c2c2c324d000700330e7b07060006|@2658,@2657| 4483:C6,64|008056085617292309294d0032004d012e000e0e0e0c00032f384d0222002a0e0e0c0002512f354d0315002a0e0c0002512c2a314d040800320e0e7b05070004|@2696,@7196,@623,@1916,@338,@1810| 4484:C4,40|00802b352c362d375639564856574d0016002f4d01110030303030304d02080022100e7b0a090009|@2703,@2702,@860,@2247| 4485:C2,24|00805609561856272b3c2c2c324d000700330e7b07060006|@2658,@2657| 4486:S9|457863657074696f6e 4487:S22|29206973206e6f7420616e20657863657074696f6e2e 4488:S41|70726f63657373457863657074696f6e3a206261646c792d666f726d65642070617273652d74726565 4489:C6,64|008056085617292309294d0032004d012e000e0e0e0c00032f384d0222002a0e0e0c0002512f354d0315002a0e0c0002512c2a314d040800320e0e7b05070004|@2696,@7196,@623,@1916,@338,@1810| 4490:C4,40|00802b352c362d375639564856574d0016002f4d01110030303030304d02080022100e7b0a090009|@2703,@2702,@860,@2247| 4491:C6,64|008056085617292309294d0032004d012e000e0e0e0c00032f384d0222002a0e0e0c0002512f354d0315002a0e0c0002512c2a314d040800320e0e7b05070004|@2696,@7196,@623,@1916,@338,@1810| 4492:C4,40|00802b352c362d375639564856574d0016002f4d01110030303030304d02080022100e7b0a090009|@2703,@2702,@860,@2247| 4493:C6,64|008056085617292309294d0032004d012e000e0e0e0c00032f384d0222002a0e0e0c0002512f354d0315002a0e0c0002512c2a314d040800320e0e7b05070004|@2696,@7196,@623,@1916,@338,@1810| 4494:C4,40|00802b352c362d375639564856574d0016002f4d01110030303030304d02080022100e7b0a090009|@2703,@2702,@860,@2247| 4495:C6,64|008056085617292309294d0032004d012e000e0e0e0c00032f384d0222002a0e0e0c0002512f354d0315002a0e0c0002512c2a314d040800320e0e7b05070004|@2696,@7196,@623,@1916,@338,@1810| 4496:C6,64|008056085617292309294d0032004d012e000e0e0e0c00032f384d0222002a0e0e0c0002512f354d0315002a0e0c0002512c2a314d040800320e0e7b05070004|@2696,@7196,@623,@1916,@338,@1810| 4497:C4,40|00802b352c362d375639564856574d0016002f4d01110030303030304d02080022100e7b0a090009|@2703,@2702,@860,@2247| 4498:C6,64|008056085617292309294d0032004d012e000e0e0e0c00032f384d0222002a0e0e0c0002512f354d0315002a0e0c0002512c2a314d040800320e0e7b05070004|@2696,@7196,@623,@1916,@338,@1810| 4499:C4,40|00802b352c362d375639564856574d0016002f4d01110030303030304d02080022100e7b0a090009|@2703,@2702,@860,@2247| 4500:C6,64|008056085617292309294d0032004d012e000e0e0e0c00032f384d0222002a0e0e0c0002512f354d0315002a0e0c0002512c2a314d040800320e0e7b05070004|@2696,@7196,@623,@1916,@338,@1810| 4501:C4,40|00802b352c362d375639564856574d0016002f4d01110030303030304d02080022100e7b0a090009|@2703,@2702,@860,@2247| 4502:C6,64|008056085617292309294d0032004d012e000e0e0e0c00032f384d0222002a0e0e0c0002512f354d0315002a0e0c0002512c2a314d040800320e0e7b05070004|@2696,@7196,@623,@1916,@338,@1810| 4503:C4,40|00802b352c362d375639564856574d0016002f4d01110030303030304d02080022100e7b0a090009|@2703,@2702,@860,@2247| 4504:O3|@7129,@237,@4505 4505:S27|61737369676e54797065733a2077696c646361726420666f756e64 4506:S34|61737369676e54797065733a206c617965726564207061747465726e20666f756e64 4507:C6,88|00802b3b4d0050000e0c000303033b02452b352c36582b2923062c4d0139000e0e0c00022a0c000264294d022a000e0e0e0c00024d0320000e0c000203062935296402012c2c0e0e0e4f040b005100022a2a69292707420e|@445,I229,@1827,I105,I218,@4507| 4508:S98|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296d616b65536967496e746f28362970726f63657373536967283329757064617465436f6e7374724c697374283129 4509:C2,64|00802b56190c0002293b4d0032000e0e0e0c000303222c56280c0002293b4d001e000e0e0e0c0003030a2d56372e0e0e7d050002296402012964420e0e0e0e0e|@979,I229| 4510:C2,64|00802b56190c0002293b4d0032000e0e0e0c000303222c56280c0002293b4d001e000e0e0e0c0003030a2d56372e0e0e7d050002296402012964420e0e0e0e0e|@979,I229| 4511:C4,40|00805609561856272e4d001b004d0117000c00032a3c2e2e2d4d020b00340e7b070700060e0e0e0e|@4512,@2547,@353,@1903| 4512:S82|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296d616b65536967496e746f2836296c6f6f6b75704661696c757265283129 4513:C8,80|0080560b292308562a2923084d0040002a2d6a565b29230b567a29230b4d012f002a2d6a56a956b856c74d0222002b2d2c6b2210332f4d0316004d0412004d050e002f4d06090022170e0e7b09110008|@4515,@4516,@4517,@4514,@2508,@2504,@1151,@2045| 4514:C2,24|00805609561856272b3c2c2c324d000700330e7b07060006|@1947,@1903| 4515:S81|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296d616b65536967496e746f2836296c6f6f6b7570476c6f62616c283129 4516:C2,40|00802b56180c0002293b4d001a000e0e0e0c0003030a2c56272d0e0e7d0400022964420e0e0e0e0e|@979,I229| 4517:C2,40|00802b56180c0002293b4d001a000e0e0e0c0003030a2c56272d0e0e7d0400022964420e0e0e0e0e|@979,I229| 4518:C2,24|00805609561856272b3c2c2c324d000700330e7b07060006|@1947,@1903| 4519:C37,768|00823b2e4d00f8020e0c00024d01f0020e0c000203033b06d22e4d02e2020e0e0e0c00022e4d02d7020c00022a2a4d03ce020e0e0e0c0003654d04c3020c0002032a2e4d05b9020e0e0c00024d06b0022a4d07ab020c0003294d08a3024d079f020c0003652d2d0e7d0600022e4d098f020c00022e4d0987020c00022a4d0a7f020c00024d0478020e0c0002039e2a4d0b6d020e0e0c0002036a2a4d0c61020e0e0c000229352a37334d0d53020c0002292c4d0e4a020e0e0e0c0003640319294d0f3c020e0c00022934344d103102220c0e0e7b050c0004334d0523020c00024d111c022a4d07170202020c020c0003294d120b024d0707020c00036532320e7d0b0002304d05f7010c00024d13f0012a4d07eb010c0003294d14e3014d07df010c0003652f2f0e7d080002294d0bcf010c0002030e294d0cc5010e0e0c00023c6402013b0338294d0bb4010e0c0002030e294d0ca9010e0e0c0002296402054d159c01102935314d0d94010e0c0002292b4d0e8a010e0e0e0c00036602013b033a294d0b79010e0e0c0002030e294d0c6d010e0e0c0002296402054d156001102937644d0f58010e0c0002312a314d104d01320e0e0e7b05090004304d003f010c00024d1638010e0c00024d0430010e0c0002032a304d0525010e0e0c00024d171c012a4d0717010c0003294d180f014d070b010c0003652f2f0e7d080002304d19fb000c000203142f4d1af1000e0e0c00024d04e8000e0c000202013b032b304d05da000e0e0e0c00024d1bd0002a4d07cb000c0003294d1cc3004d07bf000c0003652f2f0e7d080002304d1daf000c00023b2a4d1ea6000e0e0e0c0003644d049b000c000203832f4d1d91000e0e0c00023b2a4d1e86000e0e0e0c0003640349304d0578000e0c00024d1f70002a4d076b000c0003294d2063004d075f000c0003324d0557000c00022a2a4d074e000e0e0e0c0003294d2143004d073f000c000327052f2f7d080002304d002f000c0002304d0027000c00022a2a4d221e000e0e0e0c0003503b65020b2f310e0e4f230b004000036564440e0e0e0e0e|@4521,@1153,@1156,@2095,I113,I218,@1751,@4522,@353,@2099,@2091,@1717,@1744,@1746,@2106,@4523,@1748,@2485,@4526,@2559,@4526,@2559,@621,@2560,@4526,@4527,@2100,@2102,@4526,@4528,@2172,I229,@4526,@4529,@4530,@2572,@4520| 4520:C18,240|00812c4d00e9000e0e0c00022c4d01df000c00020402002f4d02d4000e0c00024d03cc000e0c000203193c2840314d04be000e0e0e0c00042a4d05b300452a46510206293b45304650292b2d2b6a4d069e000e0e0e0c0002304d0793000c0002037d314d0289000e0e0c00024d0880000e0c00020315314d0975000e0e0c0002294d0a6b000c00026402013b030d313c4d0b5c000e0c0003500242314d0c50000e0c00024d0d48000e0c0002032d314d003d000e0e0c000228282a4d0e31000e0e0c0003294d0f27004d0e23000c00036556670e0e0c00025002023b5002023b50302a4d100900327e0900030e0e0e0e|@4531,@1751,@2106,@1153,@1156,I11,-1,@1160,@2100,@2560,@2091,@1717,@2567,@2102,I218,@353,@2171,@2565| 4521:S27|545950455f5452454528292e736574576865726554797065283329 4522:S38|43616e6e6f74206170706c792074797065207265616c69736174696f6e3a2054797065732028 4523:O1|@4524 4524:C8,144|00812b3b4d0088000e0c0003030e3b2d4d007c002d0e0e0e7e0400032b35294d016d000e0e0c0002035e294d0261000e0e0c00022d362f4d0355000e0e0c00024d044c000e0c0002033a2f35294d013f000c0002032a294d0235000e0e0c000231362d2b4d0528000e0c0003030e292d4d061c00330e0e0e7e0a00033b6502013b6402013b6502013b64430e0e0e0e0e|@4525,I229,@1145,@1147,I105,I218,@1695,@4523| 4525:S36|545950455f5452454528292e736574576865726554797065283329657141726773283229 4526:S32|43616e6e6f74206170706c792074797065207265616c69736174696f6e3a2028 4527:S18|2920697320616c726561647920667265652e 4528:S53|2920697320616e206571747970652062757420746865207479706520646f6573206e6f74207065726d697420657175616c6974792e 4529:S21|292069732061206461746174797065206275742028 4530:S9|29206973206e6f742e 4531:S38|545950455f5452454528292e7365745768657265547970652833297365744571756976283229 4532:C2,24|00805609561856272b3c2c2c324d000700330e7b07060006|@1947,@1903| 4533:C6,80|00823c28402e4d0046000e0e0e0c00044d013c002a692f2a0e0c0002502f4d022e000e0e0e0c00022b3b4d0322000e0e0e0c00033135294d0415000e0e0c0002292d2d220c6b292707440e0e0e0e0e0e|@4535,I11,@4534,@2364,I253,@2362| 4534:C5,40|00802b4d0021000e0e0c00024d0118002b56376a4d0210002a692b2a3b4d030700310e7b05060004|@4537,@2083,@4538,@4536,@2081| 4535:S38|535452554354555245535f28292e72656e616d655661726961626c654173426f756e64283329 4536:C1,16|00802b352c362d3756372e7b05030004|@4551| 4537:S50|535452554354555245535f28292e72656e616d655661726961626c654173426f756e642833297365745374616d7073283129 4538:C20,240|00822c4d00e9000e0e0c0002033a2c4d01dd000e0e0c0002293b4d02d2000e0e0e0c00030316404d03c5000e0e0c0002294d04bb003b3b6b29650204293729646456172c7d0500022c4d05a3000c000203992c4d0699000e0e0c00024d0790005628692a4d0888000e0c00022b4d097f000c0002294d0a77000c00024d0b70000e0c0002030d292c4d0c64000e0c00035002023b502a4d0d56000e0e0e0c000203445648293b4d0e46000e0e0e0c000356682a3c4d0f38000e0c00032a3b2b4d102d000e0e0c0004502b4d1122000e0e0e0c00022f2a4d1216000e0e0e0c0003503b270502013b270402013b440e0e0e|@4540,@2007,@2006,I229,@1564,I48,@2019,@2018,@4541,@1153,@2091,@1717,I218,@4539,@2560,I253,I106,I255,@1890,@2572| 4539:O1|@4543 4540:S53|535452554354555245535f28292e72656e616d655661726961626c654173426f756e642833297365745374616d7073283129283329 4541:C5,56|00805607293b4d002e000e0e0e0c000356272a3c4d0120000e0c00032a3b2b4d0215000e0e0c0004502b4d030a00300e7d0700020e0e0e0e|@4542,I253,I106,I255,@1890| 4542:S56|535452554354555245535f28292e72656e616d655661726961626c654173426f756e642833297365745374616d7073283129283329283129 4543:C5,48|00814d002a004d0126002d6a4d0220002a694d031a000e0e0e0c00022e2a0e0e0e0c0002643b2a2e7d0600020e0e0e0e|@4545,@4546,@4539,@4544,@2273| 4544:C2,16|00804d000a002c56276a420e0e0e0e0e|@4549,@4548| 4545:S23|545950455f5452454528292e7365745479706573283229 4546:C11,168|00812b4d00a1000e0e0c0002030e2b4d0195000e0e0c00023c6402013b03872b4d0084000e0c0002030e2b4d0179000e0e0c0002296402054d026c00102937644d0364000e0c000256182a4d0459000e0e0c00022b4d054f000c0002294d0647000c00024d0740000e0c0002030d292c56670e0e0e0c00035002023b502a4d0826000e0e0e0c000203172c2c0e0c00022b2a4d0912000e0e0e0c0003503b6402013b270402013b43|@4547,@1744,@1746,@621,@1748,@1153,@2091,@1717,I218,@2560,@2572| 4547:S42|545950455f5452454528292e736574547970657328322973657454797065436f6e73747256616c283229 4548:C1,16|00802b561756282d7e0300030e0e0e0e|@4550| 4549:S42|545950455f5452454528292e736574547970657328322973657454797065436f6e73747256616c283129 4550:S45|545950455f5452454528292e736574547970657328322973657454797065436f6e73747256616c283129283129 4551:S53|535452554354555245535f28292e72656e616d655661726961626c654173426f756e642833297365745374616d7073283129283129 4552:C8,128|00802b4d0079000e0e0c0002036a2b29354d016b004d0267000c000303292936293b4d035a000e0e0e0c000329353c4d024d000e0e0c000303032b0207292503511e323b650201296429353b4d0230000e0c000303062936296402054d0420001056274d0519000e0e0c00022a2a4d060e00300e7e0600033b420e0e0e0e0e0e|@4553,@2070,-2,I229,I253,@2068,@2057,I231| 4553:S72|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973747275637456616c75652835296d757374436f707954797065283129 4554:S24|73747275637456616c75653a206e6f7420612076616c7565 4555:C8,128|00802b4d0079000e0e0c0002036a2b29354d016b004d0267000c000303292936293b4d035a000e0e0e0c000329353c4d024d000e0e0c000303032b0207292503511e323b650201296429353b4d0230000e0c000303062936296402054d0420001056274d0519000e0e0c00022a2a4d060e00300e7e0600033b420e0e0e0e0e0e|@4556,@2070,-2,I229,I253,@2068,@2057,I231| 4556:S109|535452554354555245535f28292e70617373325374727563747328332970617373325374727563742835297061737332537472756374757265446563283229706173733253747275637475726542696e64283629726573756c745369672d6d757374436f707954797065283129 4557:C2,40|00813c28403b4d001e000e0e0e0c00043c28403b4d0010000e0c00043c2b2b6a2f2a306a29270443|@4558,I11| 4558:S32|5354525543545f56414c5328292e6d616b654c6f63616c537472756374283229 4559:C5,96|00814d005a0056182e57386b0403002a2a4d014b000c00035029352a363b30293b4d023b000c000303043b50022229352a362a352b362c372d382e392f3a3023064f031b00e0000850292503511e2e51505659292307642c310e0e0e7d090002|@4561,@4562,@1924,I229,@4560| 4560:C40,792|008631353c4d000f030c000307dd313632373338404d01ff020c0002294d02f7023b3b6b294d03ef020c00022c354d04e6024d05e2020e0e0e0c00030a04001c000a000a00160019002c3b694d06c8022a696402072c02042c02012c57792a3b2b22114d02b1020e0e4f07ab02c20006312a4d08a2020e0e0e0c0003324d0297024d0993020c00034d0a8c020e0c0002030d2d2309332b692a0c00025102232a4d0b74020e0c00024d0c6c022f2c6a4d0d65022a692b2a3b4d0e5c020e0c00042604313b2b4d0f4f020c0004502d230657b92923064d103f022a2d6a31230857f92923084d1130022a020221022d6a121300020003002939220e230b1216000200030029230b4d120e022a2d6a12190002000300293a121b000200030029230a121d00020003002937121f0002000300293812210002000300292309122300020003002936122500020003002923074d13c5012c333222162211221e30221c220d22142219680c221e4d14ab010c00023c28402b4d15a0010e0c00044d1698012a69122b00020001002922314d1788010e0c0003294d187f014d177b010c0003292234313022380e0e1619006a013300020000062230353b4d005c010e0c000303032906ce22254d144d010e0e0c0002123000020001002922364d173a010e0e0e0c0003294d1a2f014d172b010c000322342d220d223b2d0e1607001a01380002000006294d1b0f010c00022a4d1407010c00020402002b2b2b4d1cfa000e0e0e0c000450294d1dee002e69223c03252e4d1be3000c00022f4d14db000c00020402002b2b2b4d1cce000e0e0e0c000450296602012a123a0001000200123b0003000200220d322f2d22452e4d1ea8000e0c000750123c00020001002922424d1795000e0e0c0003294d1f8b004d178700020215000c000334302216312d4d2076000e0e0e0c00062710294d2169000e0e0c0002303b4d225e000e0e0e0c00032b35294d2351000e0e0c0002292d2d3b6b3b4d2442000e0e0e0c0002223a222c2c2c4d2532000e0e0e0c0005223b2a691238000100fbff0e0e0c00025022393b2b4d0f13000c0004503b273602054d260600101f070e0e0e|@4566,I229,@1564,I48,@1957,-9,I107,-5,@2462,@1939,I24,I218,@2083,@4567,@4569,@2081,I255,@4571,@4572,@4573,@4574,@2060,I11,@4577,@353,@4579,@1941,@4579,@2057,@2063,@4580,@2076,@4579,@2359,@2364,I253,@2362,@4582,@4585,@4565| 4561:S61|535452554354555245535f28292e7061737332537472756374732833297061737332537472756374283529706173733246756e63746f72446563283229 4562:C5,48|00805609561856274d0024002f4d011f000c0003294d0217004d0113000c00032d3c2e2e2d4d030700220c7b07080006|@4564,@4563,@353,@1906,@1903| 4563:S8|46756e63746f7220 4564:S69|535452554354555245535f28292e7061737332537472756374732833297061737332537472756374283529706173733246756e63746f7244656328322973456e762d283129 4565:O3|@7129,@237,@4588 4566:S80|535452554354555245535f28292e7061737332537472756374732833297061737332537472756374283529706173733246756e63746f72446563283229706173733246756e63746f7242696e64283729 4567:C9,168|00822c4d00a1000e0e0c0002031a560729382e4d0191000e0e0c0002302a69642a2e0e0e7d0700022c4d027b000c00020342560729372e4d036d000e0e0c000256382a3729353b4d045d000e0e0c0003031629362c352d362e383d2d306a2c2c2b2d6b29270602012b332a6927042a2e7d0700022c4d052f000c0002032656072923092e4d0620000e0c000256382a2a4d0714000e0c0003322a69662a2e0e0e7d0700023b440e0e|@4568,@2019,@2018,@2025,@2024,I229,@2007,@2006,@2030| 4568:S83|535452554354555245535f28292e7061737332537472756374732833297061737332537472756374283529706173733246756e63746f72446563283229706173733246756e63746f7242696e64283729283329 4569:C1,16|00802b352c362d3756372e7b05030004|@4570| 4570:S83|535452554354555245535f28292e7061737332537472756374732833297061737332537472756374283529706173733246756e63746f72446563283229706173733246756e63746f7242696e64283729283129 4571:C2,40|00802b56180c0002293b4d001a000e0e0e0c0003030a2c56272d0e0e7d0400022964420e0e0e0e0e|@979,I229| 4572:C2,40|00802b56180c0002293b4d001a000e0e0e0c0003030a2c56272d0e0e7d0400022964420e0e0e0e0e|@979,I229| 4573:C2,40|00802b56180c0002293b4d001a000e0e0e0c0003030a2c56272d0e0e7d0400022964420e0e0e0e0e|@979,I229| 4574:O1|@4575 4575:C1,8|00803b420e0e0e0e|@4576| 4576:S95|535452554354555245535f28292e7061737332537472756374732833297061737332537472756374283529706173733246756e63746f72446563283229706173733246756e63746f7242696e64283729656e7657697468417267732d283129 4577:C5,56|00805607293b4d002e000e0e0e0c000356272a3c4d0120000e0c00032a3b2b4d0215000e0e0c0004502b4d030a00300e7d0700020e0e0e0e|@4578,I253,I106,I255,@1890| 4578:S92|535452554354555245535f28292e7061737332537472756374732833297061737332537472756374283529706173733246756e63746f72446563283229706173733246756e63746f7242696e642837296e6577547970654964283129 4579:S3|28292e 4580:C8,128|00802b4d0079000e0e0c0002036a2b29354d016b004d0267000c000303292936293b4d035a000e0e0e0c000329353c4d024d000e0e0c000303032b0207292503511e323b650201296429353b4d0230000e0c000303062936296402054d0420001056274d0519000e0e0c00022a2a4d060e00300e7e0600033b420e0e0e0e0e0e|@4581,@2070,-2,I229,I253,@2068,@2057,I231| 4581:S105|535452554354555245535f28292e7061737332537472756374732833297061737332537472756374283529706173733246756e63746f72446563283229706173733246756e63746f7242696e64283729726573756c745369672d6d757374436f707954797065283129 4582:O1|@4583 4583:C2,40|00803c28403b4d001e000e0e0e0c00043c28403b4d0010000e0c00043c2b2b6a65420e0e0e0e0e0e|@4584,I11| 4584:S26|5354525543545f56414c5328292e6d616b654c6f63616c283129 4585:O1|@4586 4586:C1,16|00832d2f2d2f6b29641f040e0e0e0e0e|@4587| 4587:S28|5354525543545f56414c5328292e6d616b6546756e63746f72283429 4588:S16|706173733246756e63746f7242696e64 4589:C5,88|00814d00520056182e57386b0403002a2a4d0143000c00035029352a363b30293b4d0233000c000303043b50021e29352a362a352b362c372d380e0e0e4f031700b0000550292503511e2a515056592936642c317d090002|@4591,@4592,@1924,I229,@4590| 4590:C7,112|00835709571729304d0064000e0c000329282e4d0059000e0e0c00032f3b2e220c2d0e0e0e4f014700820006294d023f000c00022a4d0337000c00022b35294d042d000e0e0c000229220e2d2f6b220d3b2b4d051a000e0e0e0c000450220e2a6956b1220d0e0e0e7d1000020e0e0e0e|@4595,@353,@2462,@2057,@2060,@2362,I255| 4591:S63|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352970617373325369676e6174757265446563283229 4592:C5,48|00805609561856274d0024002f4d011f000c0003294d0217004d0113000c00032d3c2e2e2d4d030700220c7b07080006|@4594,@4593,@353,@1906,@1903| 4593:S10|5369676e617475726520 4594:S71|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352970617373325369676e617475726544656328322973456e762d283129 4595:S84|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352970617373325369676e617475726544656328322970617373325369676e617475726542696e64283429 4596:C13,296|0081404d0021010e0e0c0002294d0117013b3b6b294d020f010c000229230656492923064d0300012a2d6a2d230856892923084d04f1002a2d6a313932230b56d929230b4d05e0002a2d6a12110001000300293a1213000100030029230a22113722123822132309221436221523074d06b5002b2f2f2211220c221830221634220f2214680c121b0001000400121c0001000200121d000100010022202c2e2d2d16070082002300020000064d08780012200001000300221d6a4d096a0012210001000300221e6a4d0a5c0012220001000300221f6a4d0b4e001223000100030022206a4d0640002a2e2e221a221522212210221f332218221d680c12240001000400122500010002001226000100010022282c2e2d2d0e0e1607000a002c00020000062726430e|@4598,@1564,I48,@1957,@4599,@4600,@4601,@4602,@1885,@4605,@4607,@4608,@4597| 4597:C1,24|0080560829362d2a0e0c000251561729362e2a2f7d060002|@4606| 4598:S59|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352970617373324c6f63616c646563283229 4599:C2,40|00802b56180c0002293b4d001a000e0e0e0c0003030a2c56272d0e0e7d0400022964420e0e0e0e0e|@979,I229| 4600:C2,40|00802b56180c0002293b4d001a000e0e0e0c0003030a2c56272d0e0e7d0400022964420e0e0e0e0e|@979,I229| 4601:C2,40|00802b56180c0002293b4d001a000e0e0e0c0003030a2c56272d0e0e7d0400022964420e0e0e0e0e|@979,I229| 4602:O1|@4603 4603:C1,8|00803b420e0e0e0e|@4604| 4604:S71|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352970617373324c6f63616c6465632832296c6f63616c456e762d283129 4605:C1,24|0080560829372d2a0e0c000251561729372e2a2f7d060002|@4606| 4606:S70|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352970617373324c6f63616c646563283229626f6479456e762d283129 4607:C1,24|0080560829382d2a0e0c000251561729382e2a2f7d060002|@4606| 4608:C1,32|008056082923092d2a0c00025156172923092e2a2f0e0e0e7d0600020e0e0e0e|@4606| 4609:C6,88|00802b3656182923092e2a0e0e0c00025156275637293b4d003d000e0e0c00034d0134002e69293b69293b4d0229000e0e0c000303032b020c3b2c0e0e4f031700800002642e3b2b4d040c000e0c0004503b2708420e0e0e|@4613,I253,-1,I229,@4618,I255| 4610:S60|535452554354555245535f28292e7061737332537472756374732833297061737332537472756374283529706173733253696e676c65746f6e283329 4611:C6,104|00802b36561829372e2a0e0e0e0c00025156275637293b4d004d000e0e0c00032d352e362f3730384d013c002d2d2d2d6805293b69293b4d022d000e0e0c000303032f020c3b300e0e4f031b00c0000264323b2b4d0410000e0c0004503b270c420e0e0e0e0e0e0e|@4613,I253,-2,I229,@4612,I255| 4612:C3,48|00802b3b4d0028000e0c000303091201000100f4ff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1555,I229,@4612| 4613:S70|535452554354555245535f28292e7061737332537472756374732833297061737332537472756374283529706173733253696e676c65746f6e2833296e6577456e762d283129 4614:C5,88|00802b36561829382e2a0e0e0e0c00025156275637293b4d003d000e0e0c00033c2e69293b69293b4d012c000e0c000303032b020c3b2c0e0e4f021b00800002642e3b2b4d0310000e0c0004503b2708420e0e0e0e0e0e0e|@4613,I253,I229,@4615,I255| 4615:C3,48|00802b3b4d0028000e0c000303091201000100f8ff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1555,I229,@4615| 4616:C5,88|0080560829352d2a0e0c00025156175627293b4d0041000e0e0c00032f3530363b2b2b6a293b69293b4d012b000c000303032d020c3b2e0e0e4f021b0090000264303b2b4d0310000e0c0004503b2709420e0e0e0e0e0e0e|@4613,I253,I229,@4617,I255| 4617:C3,48|00802b3b4d0028000e0c000303091201000100f7ff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1555,I229,@4617| 4618:C3,48|00802b3b4d0028000e0c000303091201000100f8ff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1555,I229,@4618| 4619:O1|@4620 4620:C5,48|00834d002a002c694d0124002d69300e0e0c0002504d0217002a692f0e0c0002504d030b002a692e2d0e0e0e7d070002|@4622,@4623,@4650,@4652,@4621| 4621:C4,40|00802b352c362a4d001d004d0119000e0e0c00032a4d020f000c00022a2a5667310e0e0e7e070003|@4651,@4579,@353,@2051| 4622:S37|535452554354555245535f28292e636865636b466f72467265655479706556617273283429 4623:C5,40|00814d0022002a2e56376b2c4d0118000e0c00024d0210002b692a2a3b4d030700310e7b05070004|@4625,@4626,@2083,@4624,@2081| 4624:C1,16|00802b352c362d3756372e7b05030004|@4649| 4625:S51|535452554354555245535f28292e636865636b466f72467265655479706556617273283429636865636b537472756374283229 4626:C11,160|00822c4d0099000e0e0c000203565608292f4d018a000e0e0e0c000329282e4d017d000e0e0c00032f4d0273000c0002293b4d036a000e0e0e0c00030316404d045d000e0e0c0002294d0553003b3b6b29650204293729642b2a5677320e0e0e7e0a00032c4d0637000c0002032e5608292f4d012a000e0e0e0c00032e4d071f000c0002294d0817000c000256492c2b2b4d090b00330e7b050a00043b440e0e|@4628,@2007,@353,@2006,I229,@1564,I48,@2025,@2024,@2338,@4627| 4627:O1|@4629 4628:S64|535452554354555245535f28292e636865636b466f72467265655479706556617273283429636865636b537472756374283229636865636b456e747279283329 4629:C5,64|00823c28403b4d0036000e0e0e0c00044d012c002f2e2c6b4d0224002a694d031e000e0e0e0c00022f2a0e0e0e0c0002643b2a0e0e0c0002513b65440e0e0e0e|@4631,I11,@4632,@4630,@2273| 4630:C2,16|00804d000a002c56276a420e0e0e0e0e|@4647,@4646| 4631:S40|545950455f5452454528292e636865636b466f7246726565547970655661726961626c6573283329 4632:C28,408|00812b4d0091010e0e0c000207d22b4d0185010e0e0c000229352a364d0278010e0c0003294d036f010c000264031c29352a364d0461010e0e0c0003293c4d0556010e0e0e0c00036402013b07dc5619293b4d0642010e0e0e0c0003644d0737010c0002285f2a4d082d010e0e0c000356395649293b4d061e010e0e0e0c0003293c4d0912010e0e0e0c00032c3b2b4d0a05010e0e0c0004503b4d0bfa000e0e0e0c0002303531364d0cec000e0c00032f3b4d0de2002d2d3b4d0edb000c00070402002a4d0fd0000e0c00024d10c8000e0c0002031d3c28402c4d11ba000202ae000e0e0e0c00042a4d12ab00452a46510206293b452b4650293b332b6a4d1396000e0e0e0c000256d856e829352a362b372c382d392e3a2f23063023073123083223094d147000020260000e0c000b12110001000100294d155c00694d1657002a69654d1750000e0c00024d1848002a69292c3b30353136323733383439220c3a220d2306220e2307220f2308221023094d1922000e0e0e0c000e5022112f4d1a140022160e0e7e1600033b6402013b430e0e0e0e0e0e|@4634,@1145,@1147,@1714,@1717,@1730,I113,I253,@4635,@353,I106,I255,@1892,@1698,@214,@4638,@1153,@1156,I11,-1,@1160,@999,@4641,@4645,@378,@4633,@774,@1140| 4633:C1,16|00802b3856172a2d7d0400020e0e0e0e|@1216| 4634:S53|545950455f5452454528292e636865636b466f7246726565547970655661726961626c6573283329636865636b5479706573283229 4635:O1|@4636 4636:C13,216|00802b281a4d00cf000c000303482b3b4d00c4000e0c0003293c4d01ba000e0e0e0c000303032c020b2c28194d02a8000e0c000329281a4d039d000e0e0c0003293c4d0292000e0e0e0c0003664d0487000c000202044d057e002c281a4d0677000c0003293b4d016e000e0e0e0c000303033c0218293b4d005d000e0e0c00033c2a4d0152000e0e0e0c000364030329020a29281a4d073f000c00032928614d0735000e0e0c0003293b4d082a000e0e0e0c000303033c020b2928ff4d0918000e0c000303054d0a0e0010292d2a4d0b0600320e7e080003|@4637,I231,I229,I107,I109,@4635,I48,I110,I106,I234,I233,@370,@353| 4637:S50|545950455f5452454528292e636865636b466f7246726565547970655661726961626c657328332967656e4e616d65283129 4638:O1|@4639 4639:C3,72|00853b30293b4d003e000e0e0e0c000303032a021629362b3c4d012b000c0003292b25042504511e233b65652d303b6a3b2a69332c30220c2d220c68062927041f060e0e0e0e0e0e|@4640,I229,I106| 4640:S38|5354525543545f56414c5328292e6d616b6546726f7a656e54797065436f6e73747273283629 4641:O2|@4643,@4642 4642:O2|@4644,0 4643:S33|2920636f6e7461696e73206120667265652074797065207661726961626c652e0a 4644:S32|53657474696e6720697420746f206120756e69717565206d6f6e6f747970652e 4645:S13|5468652074797065206f662028 4646:C1,16|00802b561756282d7e0300030e0e0e0e|@4648| 4647:S53|545950455f5452454528292e636865636b466f7246726565547970655661726961626c6573283329636865636b5479706573283129 4648:S56|545950455f5452454528292e636865636b466f7246726565547970655661726961626c6573283329636865636b5479706573283129283129 4649:S64|535452554354555245535f28292e636865636b466f72467265655479706556617273283429636865636b537472756374283229636865636b456e747279283129 4650:C3,32|00802b352c36294d0015000e0e0c000256372c2b2b4d010700320e7b05070004|@4651,@2338,@4627| 4651:S40|535452554354555245535f28292e636865636b466f72467265655479706556617273283429283129 4652:C5,72|00802b352c362a282e4d003b000c00032a3b4d0132000e0e0e0c00030316404d0225000e0e0c0002294d031b003b3b6b296502042a3729642a2a5667310e0e0e7e0700030e0e0e0e|@4651,@353,I229,@1564,I48| 4653:O3|103,@382,@4654 4654:S21|537461746963206572726f72732028706173733229 4655:O1|@4656 4656:C12,216|00813c28403c4d00ce000e0e0e0c00044d01c4002a693c28403b4d00ba000e0e0e0c000421054d02ae004521054d03a70045292c462b4731482d496c502a2a462c472e4831496c504d048c002b690403004d058300342c2c4d067c000e0c00055029352a36402a692a293b4d0769000e0e0c000303033c021f293529354d0857004d0753000c0003030c2a36292503511e273b6402013b64640312294d0938000e0c00024d0830002a6964020129293b69293b4d0721000e0e0c000303032d020c3b2e0e0e4f0a0f00d000026428092a69270d430e0e0e0e|@4658,I11,@4659,@4661,@5487,@5510,@5511,@4671,I229,-3,@3098,@4657| 4657:C3,48|00802b3b4d0028000e0c000303091201000100f3ff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1555,I229,@4657| 4658:S31|535452554354555245535f28292e67656e636f646553747275637473283229 4659:C4,48|00805607293b4d0026000e0e0e0c000356272a3c4d0118000e0c00032a3b2b4d020d000e0e0c0004502b2704420e0e0e|@4660,I253,I106,I255| 4660:S40|535452554354555245535f28292e67656e636f6465537472756374732832296d6b41646472283129 4661:C14,296|00832d353d4d001f010c00030a0500390061000c000c00c60015002b3b453b462d4706d52d364d01fe005627315648565968054d02f1002a692f2c2b314d03e700320e7b060900052d364d04da00562856395647565a3468064d05cb002a692f2c2b314d03c100320e0e0e7b060900052d362e374d06b0002c326a040300302c2c2c4d03a2000e0e0e0c00055029352a374d07930030220d6a0403002b312c2c4d0384000e0c00055029352a362b372b3b4d0873000c000303032f020c3b300e0e4f096300c0000264220e2a452c462b47270c02512d362e372f38563a5648293b4d0a43000c000356692f2d220c2d2d2211344d0b310002022b000e0e0c000829352a36303b4d0a1e000e0e0e0c00033b2a0e0e0e4f0c0f00c00002220f2e452a462d47270d1f04|@4663,I107,@4664,@4669,@4671,@4676,@4695,@4697,@4699,I229,@4700,I253,@4701,@4662| 4662:C10,144|00802b3b4d0088000e0c000303033b02782b352c362a354d0175004d0071000e0e0c000303352a362b372c382d392c2c2c2c6b5778293b4d0255000e0e0c00032b2a4d034a004d0446003b4d0541000e0e0c0006296801270802013b294d062f000c00024d0728000e0c0002031129352b4f081b004100022a2a69296602092a0e4f080b0031000266420e0e0e0e0e0e|@5486,I229,-2,I253,@992,@7257,@4793,I105,I218,@4662| 4663:S45|535452554354555245535f28292e67656e636f646553747275637473283229636f646553747264656373283429 4664:C12,248|00822d362e372f39563a293b4d00e8000e0c0003565a2a3c4d01dc000e0c00032a3b2b4d02d1000e0e0c0004502d3b4d00c5000e0e0c00034d03bc000e0c00024d04b4000e0c00022935293b2f4d02a7000c0004502a3656a9293b4d0099000e0e0c00032b3b2b4d028d000e0e0c00045056c829220d4d057e000e0e0e0c000329282e4d0571000e0e0c0003220c3b4d0065000e0e0c0003293b4d065a000e0e0e0c00030316404d074d000e0e0c0002294d0843003b3b6b2965020429372964220f2a2d2217121600010001000c00054d092400220e2b3b6b293b694d0a180022103c3b3b6805293b6922182c452a46221a472716440e0e|@4666,I253,I106,I255,@2394,@4665,@353,I229,@1564,I48,-4,-5| 4665:O1|@4667 4666:S65|535452554354555245535f28292e67656e636f646553747275637473283229636f646553747264656373283429636f646553747275637475726542696e64283329 4667:C3,32|00802b353c4d0017000c0003030b2b362c372a2a69296602054d01030010420e|@4668,I229,@621| 4668:S24|5354525543545f56414c5328292e76614c6f63616c283129 4669:C1,24|00800403002c352d362b56470e0c0004502964420e0e0e0e|@4670| 4670:S65|535452554354555245535f28292e67656e636f646553747275637473283229636f646553747264656373283429636f646553747275637475726542696e64283129 4671:O1|@4672 4672:C5,136|00832d3b4d0080000e0c000303092b3b453b462f4702682d352e362a31692f0e0e0c000229370403002a2d332c4d0157000c00055029352a362b372e352c3b4d0045000e0e0c0003030329020c3b2a0e0e4f023300a000026430362d3b4d0027000c0003030329020c3b2a0e0e4f031700c0000264220e2c452a462e47270c1f040e0e0e0e0e0e0e|@4674,I229,@4671,@4675,@4673| 4673:C3,48|00802b3b4d0028000e0c000303091201000100f8ff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1555,I229,@4673| 4674:S41|535452554354555245535f28292e67656e636f6465537472756374732832296d617050616972283429 4675:C3,48|00802b3b4d0028000e0c000303091201000100f9ff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1555,I229,@4675| 4676:C20,496|00822d3529353c4d00e5010e0e0c000307da29372f363038313a56575667293b4d01cc010e0c0003293c4d02c2010e0e0e0c00032c3b2b4d03b5010e0e0c0004505698293b4d01a7010c000356b8293b3c4d039b010c000450333b4d0191010e0e0c00034d0488010e0c00024d0580010e0c00022935293b4d0674014d0370010e0c0004502a3656f7293b4d0161010e0e0c00032b3b2b4d0355010e0e0c000450220c3b4d0148010e0c0003121300010005002922104d0736010e0e0e0c000312150001000400292309294d0821014d091d010e0e0c00036503064d0a110102044d0b0b012c4d0c06010202fb000e0e0e0c00022b4d0df7004d07f3000c000322142b2b221d121c00010003000c000512190001000100293b4d01d3000c00032b2a3c326b27052a0e0c0002641216000100010012170001000100293b4d01af000c0003293c4d0ea6000e0e0e0c00032c3b2b4d0399000e0e0c000450121a0001000200220f3c4d0285000e0e0c00032a3b2b4d0379000e0e0c000450324d0f6e000e0e0e0c00024d0564000e0c00022935293b22144d0356000e0e0e0c0004502a36121f0001000100293b4d0140000e0c00032b3b2b4d0335000e0e0c0004504d102b002216220d3b6b293b694d111e0022183c3b3b6805293b6922262c452a46222847272302054d120300106444|@4678,I229,I253,I106,I255,@2394,@4665,-1,@353,@7247,@623,@4685,@4688,@2051,@4579,I107,@4691,-4,-5,@4677| 4677:O3|@7129,@237,@4694 4678:S63|535452554354555245535f28292e67656e636f646553747275637473283229636f646553747264656373283429636f646546756e63746f7242696e64283329 4679:O2|@4684,@7163 4680:O2|@4681,@7163 4681:C2,32|00802b3556174d0016000e0e0e0c000303033c0202020202013b420e0e0e0e0e|@617,I251| 4682:O2|@4683,@7163 4683:C1,16|008056072928452e6a64420e0e0e0e0e|@617| 4684:C3,40|00802b3556174d001e000e0e0e0c000303062b3729640202020202054d01080010420e0e0e0e0e0e|@617,I251,@621| 4685:O1|@4686 4686:C2,32|00802b352c362d372e382c2a2d3b2e3c3b3b68084d0008002a692705420e0e0e|@4687,-7| 4687:S25|434f44455452454528292e6d6b4d6163726f50726f63283129 4688:O1|@4689 4689:C3,32|00802b352c362d372e382c2a2d3b2e4d000d003b3b68084d0105002a69270542|@4690,-1,-7| 4690:S20|434f44455452454528292e6d6b50726f63283129 4691:O1|@4692 4692:C3,24|00802b3b4d0010000e0c000303054d010600102b37296442|@4693,I229,@621| 4693:S30|5354525543545f56414c5328292e66756e63746f72416363657373283129 4694:S34|636f646546756e63746f7242696e643a206e6f7420612046756e63746f7242696e64 4695:C1,24|00800403002c352d362b56470e0c0004502964420e0e0e0e|@4696| 4696:S63|535452554354555245535f28292e67656e636f646553747275637473283229636f646553747264656373283429636f646546756e63746f7242696e64283129 4697:C1,32|00802b352c3656280403002a2d2d2c56870c000550292704420e0e0e0e0e0e0e|@4698| 4698:S47|535452554354555245535f28292e67656e636f6465537472756374732832296d617053747264656373283329283129 4699:C1,32|00802b352c3656280403002a2d2d2c56870c000550292704420e0e0e0e0e0e0e|@4698| 4700:C3,48|00802b3b4d0028000e0c000303091201000100f6ff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1555,I229,@4700| 4701:O1|@4702 4702:C28,376|00864d0072012e693c2840314d0168010e0c00043c28403b4d015c010e0c0004332309294d0250014d034c010e0c0003220c2309294d043f014d033b010c0003220e230929293b4d052d010e0e0c000303033b021e29352a362a4d061a010e0e0e0c000203052a68010207292503511e2a3b6564294d07ff000c00024d08f8000e0c0002030d2935294d09eb000c00026402044d0ae1004d0bdd003232312d68054d0cd30033220c306b4d0dca002a22102216220e3368064d0ebc00220c221134303468064d0faf002216694d10a80022172b6a4d11a0002a694d129a0022103022186b040200294d138c0008020029040200294d14800008020029040200294d157400080200294d166c0022172f326b4d1763002218220f6a4d185a002a2c302222221d221f221068084d194900221a2d2f221e221068064d1a3b002210221c221e22242213221b302226222c221b2224220d221a2219680f2225222069293b690402002a222722252c300e0c0005502927201f070e0e|@4704,@4705,I11,@7248,@623,@7249,I229,@4719,I105,I218,@4721,@4723,@4726,@4772,@4788,@5143,@5155,@5162,@5233,@5240,@5252,@5254,@5258,@5263,@5311,@5324,@5352,@4703| 4703:C29,1328|0083210c4d0028054521074d0121054521064d021a05452912050001000c00462c4712050001000a0048564c49564f4a6c502a564846564947564a48564b492a4a314b6c502b564f4656484712050001000d00482b492d4a12050001000c004b12050001000e004c5649240812050001000a00240912050001000b00240a564c240b6c50313b4d03a6040e0e0e0c000303072e3b45314606d7314d0492040e0e0e0c00024d0588040e0c000203063135296402054d067804102936565c4d056f040c000203033c022012060001000b00293b4d075a040e0e0e0c00032b2a4d084e040e0e0e0c00036503033b021231332b12090001000a000e0c0004293b6964344d042b040c00024d0524040e0c000203063435296402054d0914041029350402002a354d0a08044d0304040e0c000303bc2a363b2a293b4d03f4030e0c000303033b021829352a362a0e0e0e4f0bdf03e0000250292503511e233b65643b2c0e4f0ccb03d000024d0dc4032e2a0202b7030e0e0e0c00020402002a22162b121500010001000e0e0e0c00045029352a362e4d049a030e0e0e0c00024d0590030e0c000203332e36293b4d0382030e0e0e0c0003030f2f35292d69220d2a452d46260302114d0e67033069292d69220d2a452d4626035002114d0e53032f69292c69220c2a452c462603260a06cf2a354d0f3c034d0338030e0c0003035c2a362b39293b4d0728030e0c00033b3b2d0e0e4f101b03e000020402002d22152b121400010001000e0e0e0c00045029352a362a3b4d03f9020e0e0c000303032c02103b2d0e0e161100e60215000000000264332a452b46260b06ce2a35404d03cf020c0003039d2a372b382c39293b4d07be020e0e0e0c00030402002c221322132c22120e0e0c00055029352a36040200302b22162c22150e0e0c00055029350402002f22182b121700010001000c00045029352a362a3b4d0375020202ec010e0e0c000303032c02103b2d0e0e1612005e0218000000000264293b4d0351020e0e0c000303033002103b310e0e1613003e0219000000000264220e2a452c46260f06ce2a3528054d0325020e0e0c000303602a363b3b2b0e0e4f141302c000024d150c022d2a020281010e0e0e0c00020402002a22152b121400010001000e0e0e0c00045029352a362a3b4d03e1010e0e0c000303032e02103b2f0e0e161600ce0115000000000264332a452b46260b06db2a353b4d03b7010c0003039f2a362b3729293b4d03a7010c000303033b023229352a362a36293b4d0793010c00032c39293b4d0788010e0c00032b2a4d177e010e0e0e0c0003502d250726061e3b3b2706640402002c221222122c22110202d8000e0e0c00055029352a362d293b4d034c010e0c000303033b022629352a362a36293b4d0737010c0003293b4d172e010e0e0e0c0003502b250526041e303b270464302c452b462608028e2a353e4d030c010e0c0003034f2a373b3b2210692b2a2a3b4d03f7000c0003030329022a2a352b360402002b2d2b02025c000e0e161800da0015000000000450292b2a2506250626041e333b27046529352a362f2b452a46260702322a35280b4d03af000c0003031e2a37293b4d07a2000e0e0e0c00032922102d56e70e0e0e0c000426030207293b45220e465029352a3622104d047b000c00024d0574000e0c00020307221036296402054d196300100402002a2c22122c22110e0c00055029352a362a3b4d0349000e0e0c000303032e02103b2f0e0e161a00360012000000000264293b4d0329000e0e0c000303033302103b340e0e161b0016001300000000026422132a452c46270e661f040e0e0e0e|@5362,@5363,@5395,@5419,I229,I105,I218,@1773,I253,I113,@1773,-7,@5423,@5425,@5446,-9,-15,@5448,@5468,@5469,@5470,@5471,@5479,@5481,@2429,@5482,@1773,@5485,@5361| 4704:S23|50415253455f5452454528292e67656e636f6465283729 4705:C4,48|00805607293b4d0026000e0e0e0c000356272a3c4d0118000e0c00032a3b2b4d020d000e0e0c0004502b2704420e0e0e|@4706,I253,I106,I255| 4706:S32|50415253455f5452454528292e67656e636f64652837296d6b41646472283129 4707:O2|@4712,@7162 4708:O2|@4709,@7162 4709:C2,32|00802b3556174d0016000e0e0e0c000303033c0202020202013b420e0e0e0e0e|@617,I251| 4710:O2|@4711,@7162 4711:C1,16|008056072928452e6a64420e0e0e0e0e|@617| 4712:C3,40|00802b3556174d001e000e0e0e0c000303062b3729640202020202054d01080010420e0e0e0e0e0e|@617,I251,@621| 4713:O2|@4718,@7177 4714:O2|@4715,@7177 4715:C2,32|00802b3556174d0016000e0e0e0c000303033c0202020202013b420e0e0e0e0e|@617,I251| 4716:O2|@4717,@7177 4717:C1,16|008056072928452e6a64420e0e0e0e0e|@617| 4718:C3,40|00802b3556174d001e000e0e0e0c000303062b3729640202020202054d01080010420e0e0e0e0e0e|@617,I251,@621| 4719:O2|@4720,@7250 4720:C2,32|00802b3556174d0016000e0e0e0c000303033c0202020202013b420e0e0e0e0e|@617,I251| 4721:O2|@4722,@7250 4722:C3,40|00802b3556174d001e000e0e0e0c000303062b3729640202020202054d01080010420e0e0e0e0e0e|@617,I251,@621| 4723:O1|@4724 4724:C1,8|00803b420e0e0e0e|@4725| 4725:S24|44454255474745525f28292e6e756c6c4465627567283129 4726:C5,80|00822c352d36562a56394d00420030332c2e3168065658293b334d0132000e0e0e0c0004504d0227002b695677293b4d031d000e0e0c0003642f0e0e0e0c0002293b693f2a2d3b6b2709440e0e0e0e0e|@4728,@4727,I255,-3,I253| 4727:C3,32|00802b561b562a4d0015005649565856674d010b00320e7b090300080e0e0e0e|@4730,@440,@4729| 4728:S38|50415253455f5452454528292e67656e636f6465283729616464446562756743616c6c283329 4729:O2|@4732,@4731 4730:S34|44454255474745525f28292e646562756746756e6374696f6e283129283129283129 4731:O4|I48,-1,@582,@1093 4732:C19,440|00862c4d00b1010e0e0c00022d3b2b4d01a5010e0e0c00044d029c012a2a0e0e0e0c00022936294d038d010e0e0c0002294d0483014d057f010c00030325294d0075010e0e0c0002293d4d066a010e0e0e0c00032b3b2b4d075d010e0e0c00046502012929282d4d054d010e0e0c00030325294d0041010e0e0c0002293c4d0636010e0e0e0c00032b3b2b4d0729010e0e0c000465020129040200220e354d0816014d0612010e0e0e0c00030a020056001000320056972a3f452a46510268220e36220f374d09ef002b694d0ae9002b2b4d0be3000c00042d3c452a4626050246220e36220f374d09cd002b694d0ac7002b2b4d0bc1000e0e0c00042d3d452a4626050222220e364d09ac002a694d0aa6004d0ca2002b4d0b9d000e0e0c00042c3e452a46260429352a360412004d0d8600221522156a4d0e7d00221622166a2b4d0f7300454d0f6e00462a474d0f6700484d0f6200494d105d004a4d1058004b4d1053004c4d0f4e0024084d10480024094d114200240a4d113c00240b2b240c4d103300240d4d112d00240e4d102700240f4d11210024104d111b002411502b2e2e22132216342e680627042212220e0e0e0e7d140002|@4734,I223,@4735,@4738,@366,@1844,@4743,I107,@1118,-1,-3,I48,@4749,@2355,@4752,@4757,@4762,@4765,@4733| 4733:O1|@4770 4734:S28|44454255474745525f28292e646562756746756e6374696f6e283729 4735:O1|@4736 4736:C8,144|00822d4d0089000e0e0c000203142b3b4d017c000e0c00034d0274000e0c000202013b03052d3b69025f2b3b2a3b4d035e000e0e0e0c0003030329024b2a3c4d044d000e0e0c00032b304d0542000e0e0e0c0003293c4d0436000e0e0e0c0003293f4d052a000e0e0e0c0003332a4d061e000e0e0e0c0003292f692e2a2508250826061e573b270665440e0e0e0e0e0e|@4737,I105,I251,I218,I229,I240,I239,I252| 4737:S31|4c696272617279537570706f72742e737472696e674578706c6f6465283329 4738:O1|@4739 4739:C5,56|00802b3b4d0030000e0c000303064d01260002202b352c36294d021b000c00020402002c2b2b4d030e000e0e0e0c000450292704420e0e0e|@2281,I229,@342,@4738,@4740| 4740:O1|@4741 4741:C3,88|00822d28284d004f000c00030a010039002b002c35293c4d013d000e0e0c0003030a2d362d3c452a4664020b2d362f2a692e3b452a466564021a2c3628292a692d3c452a4665020c2c3628282a692d3b452a4665440e0e0e|@4742,I107,I229| 4742:S40|44454255474745525f28292e646562756746756e6374696f6e283729636865636b43686172283329 4743:O1|@4744 4744:C9,152|00812b4d0091000e0e0c00022d4d0087000c00022a2a4d017e000e0e0e0c000303722a3c4d0270000e0c0003034a293c4d0264000e0c0003030e2d2f4d0358002f0e0e0e7e060003293c4d044a000e0e0e0c00033f2a4d053e000e0e0e0c0003302a4d0632000e0e0e0c0003302a4d022600320e7e090003292b4d041a000e0e0e0c00032b2a3b32324d070b00330e7b070700063b65430e|@4746,I223,I232,I229,I24,I107,I239,I252,@4745| 4745:O1|@4747 4746:S18|537472696e672e6973537566666978283229 4747:C6,136|00842f3b4d0080000e0c000303033c02742d3f4d0171000e0e0c00032c2a4d0266000e0e0e0c0003303f4d015a000e0e0e0c00032f2a4d024e000e0e0e0c00032b2a4d0042000e0e0e0c0003270403342d3c4d0132000e0e0e0c00032f3c4d0126000e0e0e0c0003313c4d031a000e0e0e0c0003292b2d32324d040b00330e7b070a00063b1f050e|@4748,I229,I239,I252,I240,@4745| 4748:S12|627974654d61746368283529 4749:O1|@4750 4750:C2,24|00824d0012002c692e4d000b002b306b2965440e0e0e0e0e|@4751,-1| 4751:S28|5354525543545f56414c5328292e6d616b65476c6f62616c56283329 4752:C2,24|00802b561856274d000d002e0e0e0e7b050300040e0e0e0e|@4754,@4753| 4753:O1|@4755 4754:S42|44454255474745525f28292e6d616b6553706163652833296c6f6f6b757056616c756573283129283129 4755:C11,352|00822c4d0059010e0e0c00024d0150010e0c000207d32c3529354d0242014d033e010e0e0e0c00030a03001b0008007000cc002d362f2a2f4d042401300e0e7b0507000406d929362a372f362f4d000f010c00024d0108010e0c000203392f3530362d344d05f8000e0c000303184d06ee002b692e2e2b4d07e5000e0e0c000429680165020e332c2b4d04d300340e7b050b00046502013b6602bf29362a372f362f4d00ba000e0e0e0c00024d01b0000e0c0002033d2f3530362d344d05a0000e0c000303194d0696002b69294d088f000c00022f3b2b316b296801660211332c2b4d047a0034020272007b050b00046502013b66026329362a372b383036304d005c000e0c00024d0154000e0c00020345303531362e220c4d054300020239000c000303204d0636002b694d0830000e0c00022f2f2f2c4d0924000e0c000529680165020e342c2b4d041300220c7b050c00046502013b27046402013b440e|@4756,I105,I218,-2,I107,@4753,I24,-3,@4749,@4415,@4413| 4756:S39|44454255474745525f28292e6d616b6553706163652833296c6f6f6b757056616c756573283329 4757:C2,24|0080560856172a2a4d000c002f0e0e0e7e0500030e0e0e0e|@4759,@4758| 4758:O1|@4760 4759:S27|44454255474745525f28292e6d616b655370616365283329283129 4760:C10,304|00812c4d0029010e0e0c00024d0120010e0c000207cd2c3529354d0212014d030e010e0e0e0c00030a0300170008005d00a9002d36292e4d04f5002f7e06000306cc29362a372f362f4d00e3000c00024d01dc000e0c0002032a2f3530364d05ce002b692e2e2b4d06c5000e0e0c00042f2a692e2d4d04b7000c00032a2a6929270702013b6602a329362a372f362f4d009d000e0e0c00024d0194000e0c0002032e2f3530364d0586002b69294d077f000c00022f3b2b316b302a692f2e4d046e000e0e0e0c00032a2a6929270802013b66025729362a372b383036304d004f00020249000c00024d0144000e0c00020336303531364d0536002b694d0730000e0c00022f2f2f2c4d08240002021b000e0c0005302a692e2d4d0413000c00032a2a6929270702013b27046402013b43|@4761,I105,I218,-2,I107,@4758,-3,@4749,@4415,@4413| 4761:S36|44454255474745525f28292e6d616b655370616365283329616c6c56616c756573283229 4762:O1|@4763 4763:C1,8|00803b420e0e0e0e|@4764| 4764:S35|44454255474745525f28292e6d616b655370616365283329616c6c456d707479283129 4765:O1|@4766 4766:C2,8|00804d000200100e|@4768,@4767| 4767:O3|103,@382,@4769 4768:S34|44454255474745525f28292e6d616b6553706163652833296e6f456e746572283129 4769:S29|43616e6e6f74207570646174652074686973206e616d65207370616365 4770:C1,8|00803b420e0e0e0e|@4771| 4771:S33|44454255474745525f28292e6d616b6553706163652833296e6f4c6f6f6b283129 4772:C12,280|00832d352e3656294d000c010e0c000203092d3b452b462a4706cf5627293b4d01f5000e0e0c0003642a0e0e0e0c0002293b69302a69402a692a293b4d02d8000e0c000303033c021f293529354d03c7004d02c3000c0003030c2a36292503511e263b6402013b64640312294d04a8000e0c00024d03a0002a696402012956785687293b4d0190000e0c00030402002d2d2c2c4d0581000e0e0c00055029352a3622124d0671000e0e0c00022936293b4d0264000e0c0003030b2a352b383b2b2b6a650240294d074e000e0e0e0c00020321294d0841000e0e0c00022b352c382a2a2d6a4d093000020227000e0c00026602122a352b382a2a694d0a1a000e0e0e0c0002652922106922132f452a462e47270f651f040e0e|@4774,I218,I253,I229,-3,@3098,@4775,@2673,@2739,@2741,@4783,@4773| 4773:O1|@4786 4774:S42|50415253455f5452454528292e67656e636f64652837296372656174654465627567456e747279283429 4775:O1|@4776 4776:C8,112|00832e354d0068004d0164000e0c0003030e4d025a002f692c3b452a466402492e354d034a004d0146000e0e0e0c000303162e362f384d04360031302c2e68052e3b452a466602213b2e0e0e0e0c00024d051c002e2b6a4d0615002b323b6b293b692f2a452c4627041f040e0e0e0e0e|@4778,-3,I229,@4779,-5,@4781,@4777,-4| 4777:C3,32|0080560856172d2a4d0014000e0c00034d010c002c3c2c3b680566420e0e0e0e|@4782,I107,-5| 4778:S26|434f44455452454528292e6d756c7469706c6555736573283429 4779:C1,8|00805607420e0e0e|@4780| 4780:S29|434f44455452454528292e6d756c7469706c6555736573283429283129 4781:C5,72|008056082c2a4d003e000e0e0e0c000364030456070229560a561956282e2a4d0125000e0e0c00032b2a4d021a000e0e0e0c00034d0310002e3c2c3b68052705420e0e0e0e0e0e0e|@4782,I113,I107,I106,-5| 4782:S35|434f44455452454528292e6d756c7469706c65557365732834296c6f6164466e283129 4783:O1|@4784 4784:C1,16|00802b352c362d373c2c2c2c6b66420e|@4785| 4785:S10|456e7656436f6e737472 4786:C2,16|00802b352c364d0006002b2b6a65420e|@4787,-2| 4787:S8|456e7656616c7565 4788:C3,80|0082560b03413b3b2e692d302b2a3b4d003d000e0e0c000303032902222a352b360402002b2d2b0e0e4f012300a0000450292b2a2506250626041e2d3b2704650802003b6502052b3b452d46440e0e0e|@4790,I229,@4789| 4789:C6,112|00822c352d36572a293b4d0062000e0e0e0c0003314d0157000c000257595768342d2d2d2d4d0247000c0006040300220d312c2c57d70e0e0e0c00055029352a362b372b3b4d0327000c0003030334020c3b220c0e4f041700d00002642b2b6922102b452a46270e440e0e0e0e0e0e0e|@4792,I253,@2338,@4793,I229,@4791| 4790:S42|50415253455f5452454528292e67656e636f64652837296d616b654465627567456e7472696573283329 4791:C3,48|00802b3b4d0028000e0c000303091201000100f5ff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1555,I229,@4791| 4792:S52|50415253455f5452454528292e67656e636f64652837296d616b654465627567456e74726965732833296c6f6164566172283329 4793:O4|@4795,@4975,@4977,@4794 4794:O2|@4979,@4793 4795:C43,1336|00842f37294d002f050c0002030e294d0125050e0e0c0002296406ca29350a02000b0539049c04294d020c050e0c00020402002a4d0300054d04fc040e0c00030a070013011000870110001000af023b023d00324d05e0043333333356990e0e0e0c0007294d06cf043c3b3c4d07c8043b3b68082b4d08bf04452a46260306dd304d09b3040c0002030e304d0aa9040e0e0c00023c6402013b4d0b9b040c000203064d0c92040221304d098b040c0002030e304d0a81040e0e0c0002296402054d0d74041029352965302309294d0e67044d0f63040c0003322309294d1058044d0f5404020249040e0c00035688220c230929293b4d113f040c000303033b021a29352a362a2e0e0e0c000203052a68010207292503511e243b6564294d1217040c00024d0b10040e0c0002030d29352956d70e0e0c00026402044d13f9034d14f5032a2f32220c6805334d15e903452a46260b06cd304d09dd030202f7020e0e0c0002034e304d0acd030e0e0c00022935294d16c1030e0e0c0002032f294d17b5030e0e0c00022936294d12a9030e0e0c00024d0ba0030e0c0002030829352936296502044d0c8e036502044d0c87036502044d0c80034d187c032a692b4d157503452a46260306d3304d0969030e0e0c0002030e304d0a5d030e0e0c00023c6402013b4d0b4f030c000203064d0c46030221304d093f030c0002030e304d0a35030e0e0c0002296402054d0d28031029352965564831230929293b4d111703020231020c000303033b021a29352a362a2e0e0e0c000203052a68010207292503511e283b6564294d12eb020c00024d0be4020e0c0002030d29352956970e0e0c00026402044d13cd024d19c9022a2f6a2f4d15c102452a46260706d3304d09b5020e0e0c00020352304d0aa9020e0e0c00022935294d169d020202b7010e0e0c0002032f294d178d020e0e0c00022936294d1281020e0e0c00024d0b78020e0c0002030829352936296502044d0c66026502044d0c5f026502044d0c58024d1a54022a692b4d154d02452a46260306ca040200314d093e020e0e0e0c000207d0314d0a31020e0e0c00022935294d0925020e0e0c000207ca294d0a19020e0e0c00022936294d090d020e0e0c000207dd294d0a01020e0e0c00022936294d09f5010e0e0c000203ce294d0ae901020203010e0e0c000229352a36294d09d7010c000203a2294d0acd010e0e0c000229352929353e4d11be010e0e0e0c0003032e29362a372a2a4d1bac010e0c000329354d07a2014d119e010e0e0e0c000303032c020829250426031e373b66020129642d29353e4d117e01020298000e0e0e0c0003033629362a372a2a4d1b6801020265000e0c000329354d075a014d115601020248000e0e0e0c000303032c020829250426031e433b6602012964220d2b452a462605020c324d1c2b0102021200080200260302082f4d1d1b010802005102082d4d1e10010802005102082b4d1f0501080200510208294d20fa0008020029352a364d21ef002b2b6a2d4d15e700452a462605296502d729362a372a3b4d22d4000e0c00032a3b4d22ca000e0e0e0c0003332a4d04be000e0e0e0c00030405002c3b4d11af000c0003031b2a3c4d04a4000e0c00032a4d239b00453b463b472a483b4951020f294d238a00452d463c472b483b4950292706027429362a37294d2472000e0e0e0c000203064d2566000215294d265f000c000229334d2756000e0e0e0c000364293528054d1147000c0003030e2b2a4d283c00310e0e0e7e0b000329354d152e004d112a000e0e0e0c0003030e2b2a4d281c00310e0e0e7e0b000328062a2d6a6602054d29080010641f050e0e0e0e|@4797,@2425,@2415,@2446,-4,I107,@474,I48,-1,-7,@1778,@1780,I218,@992,@621,@7251,@623,@7252,I229,I105,@4810,@4848,-3,@1720,@1722,@4906,@4907,@4924,@1714,@4930,@4930,@4930,@4930,@4930,@4931,I253,-5,@2036,@440,@2394,@4969,@3087,@4796| 4796:O3|@7129,@237,@4974 4797:S22|56414c55455f4f505328292e636f646556616c283529 4798:O2|@4803,@7173 4799:O2|@4800,@7173 4800:C2,32|00802b3556174d0016000e0e0e0c000303033c0202020202013b420e0e0e0e0e|@617,I251| 4801:O2|@4802,@7173 4802:C1,16|008056072928452e6a64420e0e0e0e0e|@617| 4803:C3,40|00802b3556174d001e000e0e0e0c000303062b3729640202020202054d01080010420e0e0e0e0e0e|@617,I251,@621| 4804:O2|@4809,@7178 4805:O2|@4806,@7178 4806:C2,32|00802b3556174d0016000e0e0e0c000303033c0202020202013b420e0e0e0e0e|@617,I251| 4807:O2|@4808,@7178 4808:C1,16|008056072928452e6a64420e0e0e0e0e|@617| 4809:C3,40|00802b3556174d001e000e0e0e0c000303062b3729640202020202054d01080010420e0e0e0e0e0e|@617,I251,@621| 4810:O18|@4812,@4815,@4817,@4819,@4821,@4823,@4825,@4827,@4829,@4831,@4833,@4835,@4837,@4839,@4841,@4843,@4845,@4811 4811:O1|@4847 4812:O1|@4813 4813:C1,8|00803b420e0e0e0e|@4814| 4814:S31|56414c55455f4f505328292e6e756c6c456e7669726f6e6d656e742d283129 4815:O1|@4816 4816:C1,8|00803b420e0e0e0e|@4814| 4817:O1|@4818 4818:C1,8|00803b420e0e0e0e|@4814| 4819:O1|@4820 4820:C1,8|00803b420e0e0e0e|@4814| 4821:O1|@4822 4822:C1,8|00803b420e0e0e0e|@4814| 4823:O1|@4824 4824:C1,8|00803b420e0e0e0e|@4814| 4825:O1|@4826 4826:C1,8|00803b420e0e0e0e|@4814| 4827:O1|@4828 4828:C1,8|00803b420e0e0e0e|@4814| 4829:O1|@4830 4830:C1,8|00803b420e0e0e0e|@4814| 4831:O1|@4832 4832:C1,8|00803b420e0e0e0e|@4814| 4833:O1|@4834 4834:C1,8|00803b420e0e0e0e|@4814| 4835:O1|@4836 4836:C1,8|00803b420e0e0e0e|@4814| 4837:O1|@4838 4838:C1,8|00803b420e0e0e0e|@4814| 4839:O1|@4840 4840:C1,8|00803b420e0e0e0e|@4814| 4841:O1|@4842 4842:C1,8|00803b420e0e0e0e|@4814| 4843:O1|@4844 4844:C1,8|00803b420e0e0e0e|@4814| 4845:O1|@4846 4846:C1,8|00803b420e0e0e0e|@4814| 4847:C1,8|00803b420e0e0e0e|@4814| 4848:C3,56|0080560a3b56290e0e0c00025628040700284d2b2b4d001f000c000450295657312f2f2d2d4d010f000c000650312706420e0e0e0e0e0e0e|@4850,@280,@4849| 4849:O1|@4851 4850:S34|56414c55455f4f505328292e636f646556616c2835297072696e7450726f63283129 4851:C5,48|00844d002a002c692c230a4d0121002f694d021b00302d2c2e68053333334d030e003b2e340e0e7b070b00060e0e0e0e|@4853,@4854,@4873,@4852,-1| 4852:C51,1280|00843b3b2d293b4d00f5040e0e0c000303033b021c29352a36342b4d01e1040e0e0c000303033c0207292503511e283b65640310562729384d02c4042a300e0e7d0b000230353e4d00b5040e0e0c0003033e303631372a2a4d03a4040e0c000329354d049a044d0096040e0e0e0c0003030e56572938283f2a330e0e7d0e0002342a34343433220c0e0e0e7b070c0006304d056b040c000207cf304d0661040e0e0c000229352a37294d0753040c0002294d084b040c00024d0944040e0c0002030e56672938283f2a340e0e7d0f0002294d082b040c00024d0a24044d0820040e0c00022a2a4d0b16040e0e0e0c0003650311566729384d0c05042a340e0e0e7d0f0002294d08f7030c00024d0df0034d08ec030e0c00022a2a4d0be2030e0e0e0c00036503cc220c4d0ed3030c000203054d0fca0310220c293c4d10c1030e0e0c0003220e4d0eb6030e0e0e0c000203054d11aa0310220e293b4d10a1030e0e0c000364569802025c020e0e0c0002294d0e8b030c00024d1284030e0c000203622935294d1377030c000229354d046e034d006a030e0e0e0c0003030e56b729382e2a22100e0e7d14000222114d0e4e030e0e0e0c000203054d144203102211293d4d1039030e0e0c000322132210692f2d2c2c16150026031300000000052705020c569729382c2a220e7d1200026606cc2b3b4d0007030c000303064d16fe02027c2b36293b4d00f4020e0c000303172c354d17e80232220c22112d68054d18dc022a696502563b2d0e0e4f19cf02800002402a692a293b4d00c2020e0e0e0c000303033c021f293529354d18af024d00ab020c0003030c2a36292503511e283b6402013b64640312294d1a90020e0c00024d1888022a6964020129666478767f280b2d4d0876020e0e0e0c00024d1b6c023b4d1067020c000329293b4d005d020e0e0c000303054d1c520210293529352a362c362b304d0b4302020202010c000303032a020829250526041e313b270556d72a0e0e0e0c00026422112a0e0c0002642f4d1d16020e0e0e0c00022a0c00026422132a0e0c00026605c30e0e0e00ff6d2935280b4d00f3010c000303a92b4d1ee9010e0e0c00023b2a4d00de010e0e0e0c0003644d12d3010c000203192b4d1ec9010e0e0c0002292f0e0e0e4f1fbb01a0000364026e2b4d20b0010e0c00024d04a8012a354d00a2010e0e0e0c0003644d1297010c0002033e2b4d208d010e0e0c00022c4d2183010c000229304d227a010e0e0e0c00032b2a3c4d236d010e0e0c000422122a22122212221222110e0e0c00062704020d56872938283f2a0e0e0c00026502020202020229106464270406cf304d2434010e0c0002031a304d2529010e0e0c0002563729384d261c012a310e0e7d0c0002304d270f010c000207d0304d2805010e0e0c00022936313b4d29f8000e0c0003030e564729384d2aea002a327d0d0002324d2bdf000c0002035656472923064d2cd1002a0e0c0002515657293828282a0e0c0002514d2dbb0030336a293b220f2f282c4d04ad004d04a900221256f90e0e0c0009505677293828292a0e0c000251568729373b2a220d0e0e0e7d11000256472923064d2e7b002a0e0e0e0c00025156572938287b2a020260000e0c0002514d2f5f00567731346b4d3056002a69293b221030282c4d0449004d044500221312110001000300020220000e0c00095056872938287d2a0e0c000251569729373b2a220e0e0e0e7d120002562729384d3110002a300e0e7d0b0002651f050e0e0e0e0e|@4876,I229,I251,@1028,@1714,-1,@1744,@1746,@1748,@1153,@1156,@1095,@2124,@1844,@531,I105,@407,I253,@407,I218,@2338,@407,@4877,@510,@4890,-3,@4892,@3098,@7253,@61,@4861,@2172,@4894,@2091,@2106,@2133,@2136,@1778,@1780,@868,@1720,@1722,I232,@1028,@4898,@1795,@4901,@1795,@4903,@4905,@4875| 4853:S26|56414c55455f4f505328292e7072696e74537472756374283529 4854:C3,120|0080560729373b2a0e0c00026456272923083b2a0e0c0002643b2c293b4d0057000c000303032a0216293529362b362a2e69292b2506250626041e1f3b2704653b2b293b4d0030000e0c000303032a0216293529362b362a2e69292b2506250626041e203b270465312b2b4d010900340e0e0e7b05090004|@4856,I229,@4855| 4855:O1|@4857 4856:S44|56414c55455f4f505328292e7072696e74537472756374283529657863657074696f6e536561726368283129 4857:C13,240|00823b3b2e293b4d00e5000e0e0c000303033b022929352a362a3b0e0e4f01cf00600003293b4d00c6000e0e0e0c0003030a2a250426031e323b0201296664294d02ac000e0c00024d03a4000e0c000203032902972e293b4d0094000e0c000303033b028629352a362a4d0482000e0e0e0c0002294d0577000c00020351294d066d000e0e0c00022c3b4d0062000e0e0e0c00030316404d0755000e0e0c0002294d084b003b3b6b296502042c3729644d093c000e0c00022a4d0a33000c00022a2a0e0e0e4f0b2700b000036602013b293b4d001a000e0e0e0c0003030a2b250526041e8d3b02012927046466440e0e|@4859,I229,@4860,I105,I218,@2394,@2425,@2415,@1564,I48,@2083,@4861,@4858| 4858:C5,88|00812c4d0051000e0e0c00024d0148002a2a0e0e0e0c00023b2a293b4d0238000e0c000303033b022929352a362a352b364f032300800003293b4d021a000e0e0e0c0003030a2a250426031e313b020129662705430e0e0e|@4868,@2180,@4869,I229,@4867| 4859:S28|56414c55455f4f505328292e66696e64457863657074696f6e283329 4860:C10,168|00812c36293b4d009e000e0e0e0c0003038f2d37294d018f000c0002032a294d0285000e0e0c0002294d037b000c000256492a2a4d0470000e0c00036503052f680102013b64025629353b4d0059000e0e0c0003034729362e4d054b000c000203054d064200102e2a4d053b000c000203032a02054d072f00102a2a4d0828000e0c000356692a2a4d041c000e0c0003270403052f680102013b6402013b6402013b64430e0e0e0e|@4862,I229,@2425,@2415,@4861,I251,I105,@407,@404,I253| 4861:O1|@4863 4862:S40|56414c55455f4f505328292e66696e64457863657074696f6e2833297465737456616c7565283229 4863:C6,112|00802b354d0068004d0164000e0c000303062b36296402512b3528054d0150000e0c0003033e2b3629354d0242004d013e000e0e0e0c00030308293629372965021629353c4d0127000c00030306293729640204293629644d0314002d0e0e0e7d0400024d04080010420e0e0e0e0e0e|@4865,-3,I229,-1,@4861,@4864| 4864:O3|@7129,@237,@4866 4865:S20|434f44455452454528292e6576616c7565283129 4866:S22|6576616c75653a204e6f74206120636f6e7374616e74 4867:C19,304|00812b4d0029010e0e0c0002031956072c4d011b010c0002292b0e0e0e4f020f013200036506d42b4d0304010e0c000207cb2b4d04f9000e0e0c0002294d05ef000c0002294d06e7000c00020351294d07dd000e0e0c00022b3b4d08d2000e0e0e0c00030316404d09c5000e0e0c0002294d0abb003b3b6b296502042b3729644d0bac000e0c00022a4d0ca3000c00022a2a0e0e0e4f0d970062000366028a29353b4d088a000e0e0e0c0003037a29362b3b4d087a000e0e0e0c00030316404d096d000e0e0c0002294d0a63003b3b6b296502042b3729644d0b54000e0c00025647294d0e49000e0e0c000203054d0f3e0010292c4d0e3700020430002d000e0e0c000203032c02054d102300102a2a4d111c000e0c00032d2a0e0e0e4f0d0f00920003270602013b6502013b430e0e|@4872,@2025,@2024,@4860,@2007,@2006,@2394,@2425,@2415,I229,@1564,I48,@2083,@4861,@4858,I105,@407,@404,I253| 4868:S42|56414c55455f4f505328292e66696e64457863657074696f6e2833297365617263685370616365283229 4869:O1|@4870 4870:C2,48|00802b37296403202b363b2a0e0c00022d353b2a0e0c0002644d0013000c00022a2a6929270402013b420e0e0e0e0e0e|@4871,@4869| 4871:S16|4d6973632e697465724c697374283129 4872:S53|56414c55455f4f505328292e66696e64457863657074696f6e283329736561726368537061636528322966696e644974656d283229 4873:C16,328|00872f3b4d0040010e0c000303033b06d82f36293b4d002f010c000303563035333b4d0022010e0e0e0c0003030e322a2f316b220c2e0e0e7d0c0002324d0107010c000203054d02fe001032344d01f7000c000203033402054d03eb00102a2a4d04e4000e0c0003292d32346b220f317d0f000230352d3b4d05cc000e0c0003030e562729384d06be002a307d0e0002324d01b3000c000203054d07aa001032344d01a3000c000203033402054d089700102a2a4d0490000e0c0003292d32220c6b220f0e0c00025033282c4d0978000e0c00034d0a70000e0c00020316565729354d0b62002a020255000e0e0c0002260302023b5056572938220c2a0c000251566729354d0c3f002a0e0e0e0c000251220f3c4d0d30000e0c0003333c4d0e26000e0e0e0c000322122b22123422122212221230221122130e0e7b0a1300091f080e0e0e0e0e0e|@4874,I229,I105,@407,@404,I253,I232,@1028,@407,@404,I24,I218,@338,@338,I106,I107| 4874:S33|56414c55455f4f505328292e7072696e7453747275637428352970566563283829 4875:S7|3c656d7074793e 4876:S35|56414c55455f4f505328292e7072696e745374727563742835297072696e7473283529 4877:C16,616|00832e571a0c0002294d005b020c00024d0154020e0c000203062935296402044d0244023b57372923064d033a022a0e0e0c0002513b2c354d042c024d0528020e0c00030a0100110110000e0e4f0617024000015006cb2c36334d070a020e0e0e0c000207cc334d08fd010e0e0c00022936294d00f1010e0e0c00024d01e8010e0c000203ba2935293528312a4d09d7010c0003039a2b36294d00cb010c00024d01c4010e0c000203762935293528322a4d09b3010c0003035a2b36293b4d0aa6010e0e0e0c0003033e56e8322a4d0b96010e0e0e0c00034d0c8c01121200020003001213000100ffff2215220e221a220e221a6808292b0e160d006a01140000000003260402090e4f065b01d00001505002090e4f064f01c000015051020d020232010e4f063f01a000015050020d020218000e4f062f01900001505102090e4f062301700001505102090e4f061701500001505006ca2c36334d0709010e0e0c000207cc334d08fd000e0e0c00022936294d00f1000e0e0c00024d01e8000e0c000203ba2935293528312a4d09d7000c0003039a2b36294d00cb000c00024d01c4000e0c000203762935293528322a4d09b3000c0003035a2b36293b4d0aa6000e0e0e0c0003033e56e8322a4d0b96000e0e0e0c00034d0e8c00121200020003001213000100ffff2215220e221a220e221a6808292b0e160d006a00140000000003260402090e4f065b00d00001505002090e4f064f00c000015051020d020232000e4f063f00a000015050020d020218000e4f062f00900001505102090e4f062300700001505102090e4f0617005000015050575729373b2a330e0e0e7d0d00020e0e0e0e|@4879,I105,I218,@219,@356,-1,I107,@4880,@1720,@1722,I24,I229,I234,@4886,@4881,@4878| 4878:C3,56|0080560d561c562b563a293c4d0028000e0c0003565a4d011e00567856896a293b3131313030221056f722110e0e0e7b0a0a00090e0e0e0e|@4884,I106,@4889| 4879:S50|56414c55455f4f505328292e7072696e745374727563742835297072696e74732835297072696e74496e6669786564283429 4880:C4,56|007f5708291be7034d002c000e0c00034d01240057355647565956685877568a56936808292b0e0e0e4f020b0041000366410e0e0e0e0e0e|@4882,I113,@4883,@4881| 4881:C5,104|00812b3c4d0060000e0c000303525709293c4d0152000e0e0e0c0003640311580729384d0241002a2e0e0e0e7d0600025807293828282a0e0e0c0002515719293c4d0323000c0003642e0e0e0e0c0002505817293828292a2f0e0e0e7d07000257092d2c7d040002|@4885,I229,I232,@1028,I107| 4882:S52|56414c55455f4f505328292e7072696e745374727563742835297072696e74732835297072696e74496e66697865642834292f33 4883:C5,104|0080560d29353c4d005d000e0e0c000303043b500220561b29384d014a002a0e0e0c000251562b29354d023b002a0e0e0e0c00022604561b2938563c2a0c000251562b29354d031f002a0e0e0e0c000251563a564956582b2b331be7032d56b7220d0e7b07090006|@4884,I229,@886,@338,@338| 4884:S53|56414c55455f4f505328292e7072696e745374727563742835297072696e74732835297072696e74496e6669786564283429283129 4885:S68|56414c55455f4f505328292e7072696e745374727563742835297072696e74732835297072696e74496e66697865642834296d6179506172656e74686573697365283229 4886:C3,56|0080560d561c562b563a564a293c4d0026000e0e0e0c00034d011c00567856896a293b3131313130221056f722110e7b0a0a00090e0e0e0e|@4884,I106,@4887| 4887:C1,32|00802b352c362d372e382b3656582e2b2e2e2d56b7220d7b070900060e0e0e0e|@4888| 4888:S56|56414c55455f4f505328292e7072696e745374727563742835297072696e74732835297072696e74496e6669786564283429283129283129 4889:C1,32|00802b352c362d372e382b3656582e2b2e2e2d56b7220d7b070900060e0e0e0e|@4888| 4890:C2,32|00802b352c36562a563956482a2a692e2d2f4d000a002d56b7220d7b07090006|@4891,-1| 4891:S56|56414c55455f4f505328292e7072696e745374727563742835297072696e74732835296d616b654172672831297072696e74417267283129 4892:C5,56|00802b3b4d0030000e0c000303033b02252b352c364d011f0056355647565b2e68054d0212002a692b4f030b004100022a2a69292706420e|@445,I229,@4893,-3,@4892| 4893:C2,32|00802b352c36562a563956482a2a692e2d2f4d000a002d56b7220d7b07090006|@4891,-1| 4894:C16,320|00812c3b4d0038010e0c000303054d012e01102c352936294d0224010e0c00024d031c010e0c000207dd29352b37294d040d010e0e0c000207cf294d0501010e0e0c00022d352e3833362c4d06f1000e0e0c0002294d02e7000c000203054d07de001029293b4d08d6000e0e0e0c000356bb2a0e0e0c0002294d03c3000c0002030c2d220f4f09b700d10003028c32030f57c72938312a22110e0e0e7d12000256c9293b4d0a98000e0c000364031157c729384d0b89002a22110e0e7d1200022b3d4d087a000e0e0e0c000356db2a0e0e0c00023022114d0c65000e0e0c000356fb2b2a4d0d58000e0c000364030456f7020e56fb121100010001002a2a692966332b2d2c0204260013000e0e160e002e0015000100000527042708020e57472938283f2a320e0e7d0a000265020d57272938283f2a300e7d08000265430e0e|@4896,I229,@4895,I105,I218,@2425,@2415,@4861,@407,I253,@4894,I232,@1028,@3023,I251,@4877| 4895:O3|@7129,@237,@4897 4896:S55|56414c55455f4f505328292e7072696e745374727563742835297072696e74732835297072696e74436f6e737472756374696f6e283229 4897:S12|6e6f6e65206d617463686573 4898:O1|@4899 4899:C8,128|00802b4d0079000e0e0c0002036d2b4d016d000e0e0c00022935293c4d0260000e0c000303512a363c2a293b4d0250000e0c000303033c023b293529352b362d4d033c004d0438000e0c00032b2a4d052e000e0e0e0c00036403172d3c4d061f000c0003292b2506250626041e423b6402013b666602013b6502013b420e0e0e|@4900,@1720,@1722,I229,-1,@364,I24,I106| 4900:S28|56414c55455f4f505328292e697350726f6475637454797065283129 4901:C1,32|00802b352c362d372e382b3656582e2b2e2e2d56b7220d7b070900060e0e0e0e|@4902| 4902:S38|56414c55455f4f505328292e7072696e745374727563742835297072696e7473283529283129 4903:C7,104|00832d352e3656272923064d0059002a0e0c000251563729382d4d014a004d0246000e0e0e0c00032a0c000251564729354d0333002a0e0e0e0c000251313c4d0425000e0e0c00035669220c2f2c4d0516002d56c80c000650567729373b2a220c0e0e0e7d0f0002|@4904,@342,@1677,@353,@338,I107,-1| 4904:S38|56414c55455f4f505328292e7072696e745374727563742835297072696e7473283529283429 4905:C1,24|00802b352c362d372e3856472f0e0e7b060300050e0e0e0e|@4902| 4906:C3,48|00802b352c362d372e385647040700284d2d2b4d0019000e0e0c000450292f2c2e2c324d010900220e0e0e7b070a0006|@4850,@280,@4849| 4907:C12,96|00803c28404d0057004d0153000c00044d024c002a690407004d0343004d043f002d692b2a454d053600464d063100472d484d072a00494d0825004a2b4b502b56685677332b1b10272e2d4d0911000e0e0c0006313b4d0a0600220d7e0c0003|@4909,I48,I11,@4910,@4912,@4915,@4917,@4919,@4921,@4908,@4849,I253| 4908:O1|@4923 4909:S35|56414c55455f4f505328292e636f646556616c2835296d616b65537472696e67283129 4910:C4,48|008056075617293b4d0024000e0c0003292f4d011a000e0e0e0c00032c3b2b4d020d000e0e0c0004503b2704420e0e0e|@4911,I253,@353,I255| 4911:S41|56414c55455f4f505328292e636f646556616c2835296d616b65537472696e6728312970702d283129 4912:O1|@4913 4913:C1,8|00803b420e0e0e0e|@4914| 4914:S29|5072657474795072696e7465722e75676c795072696e74283229283129 4915:C6,88|00802b3529293b4d004d000e0e0c000303033b023d56275637293b4d0139000e0e0c00032928204d022d000e0e0c00032c3b2b4d0321000e0e0c0004502d3c4d0415000e0e0c000329250626051e483b270565420e0e0e0e|@4916,I232,I253,@353,I255,I107| 4916:S34|5072657474795072696e7465722e75676c795072696e74283229627265616b283129 4917:O1|@4918 4918:C1,8|00803c420e0e0e0e|@4914| 4919:O1|@4920 4920:C1,8|00803b420e0e0e0e|@4914| 4921:O1|@4922 4922:C1,8|00803b420e0e0e0e|@4914| 4923:C1,8|00803b420e0e0e0e|@4914| 4924:C12,96|00802b352c363c28404d0053004d014f000c00044d0248002a690407004d033f004d043b002d692b2a454d053200464d062d00472d484d072600494d0821004a2b4b502b5687312a1b10272d344d090f000c0006303b4d0a0600220e7e0d0003|@4850,I48,I11,@4926,@4928,@4925,@4917,@4919,@4921,@4908,@4849,I253| 4925:C6,88|00802b3529293b4d004d000e0e0c000303033b023d56275637293b4d0139000e0e0c00032928204d022d000e0e0c00032c3b2b4d0321000e0e0c0004502d3c4d0415000e0e0c000329250626051e483b270565420e0e0e0e|@4916,I232,I253,@353,I255,I107| 4926:C4,48|008056075617293b4d0024000e0c0003292f4d011a000e0e0e0c00032c3b2b4d020d000e0e0c0004503b2704420e0e0e|@4927,I253,@353,I255| 4927:S40|56414c55455f4f505328292e636f646556616c2835297072696e7450726f6328332970702d283129 4928:O1|@4929 4929:C1,8|00803b420e0e0e0e|@4914| 4930:O2|@992,@992 4931:C4,32|00803b4d0019002d6956270e0e4f010f00200002292b4d020600300e7e060003|@4933,@4934,@4936,@4932| 4932:O2|@4965,@7253 4933:S34|56414c55455f4f505328292e636f646556616c283529696e7374616c6c5070283129 4934:C1,24|00802b382c23062d352e372c2c2c2c6b5657300e7d070002|@4935| 4935:S42|56414c55455f4f505328292e636f646556616c283529696e7374616c6c50702831297070726f63283129 4936:C22,296|00802b4d0021010e0e0c000207da2b4d0115010e0e0c000229352a37294d0207010c0002294d03ff000c00024d04f8002a354d05f2000e0e0e0c00036403a2294d06e4000e0c00022c3b4d05da000e0e0e0c000303043b50026a2c36293b4d05c6000e0e0e0c000303122d3557782a2a4d07b4000e0c00032603024757684d08a6000e0e0e0c00024d099c000e0c000203054d0a9200105768294d0b8a000e0e0e0c0002031a294d0c7d000e0e0c00022936302a4d0d70000e0c0003260302023b505050294d0e5f000c00024d0958000e0c000203054d0f4e00103b5029640237294d034200020232000e0e0e0c00022a4d1033000c0002292e4d112a000e0e0e0c00032b2a3c4d121d000e0e0c0004664f131300410002270402054d14080010420e0e0e0e0e0e|@4938,@1744,@1746,@1748,@2091,-1,I229,@1153,@4939,@4898,I218,@4952,@1720,@1722,@4954,@4959,@4962,@2106,@2133,@2136,@4936,@4937| 4937:O3|103,@382,@4964 4938:S48|56414c55455f4f505328292e636f646556616c283529696e7374616c6c5070283129666f6c6c6f775479706573283129 4939:O1|@4940 4940:C25,680|00812b4d00a1020e0e0c000207d72b4d0195020e0e0c000229352929353e4d0286020e0e0e0c0003032e29362a372a2a4d0374020e0c000329354d046a024d0266020e0e0e0c000303032c020829250426031e373b6602012964294d0549020e0e0c000207d4294d063d020e0e0c00022935293c4d0230020e0c000307ce2a36294d0723020c00024d081c020e0c000207db2935293528312a4d090b020c000307cd2a362c36294d07fd010e0e0c00024d08f4010e0c000207cd2935293528322a4d09e3010c000307cb2a362c36293b4d02d4010e0c000307ca221129353e4d02c5010202ba010e0e0c0003032e29362a372a2a4d03b0010e0c000329354d04a6014d02a2010e0e0e0c000303032c020829250426031e3a3b66020129642f29353e4d0282010e0e0e0c0003033629362a372a2a4d03700102025d010e0c000329354d0462014d025e01020243010e0e0e0c000303032c020829250426031e3f3b66020129642a4d0a3d0102041a0110010c0002033d2a4d0b2d010e0e0c00022a4d0a23010202f0000c000203212a4d0b15010202da000e0e0c00022a2a4d0c06010202c3000e0e0e0c00036402013b6402013b6503ab2a29353e4d02e9000e0e0c0003032e29362a372a2a4d03d8000e0c000329354d04ce004d02ca000e0e0e0c000303032c020829250426031e363b6602012964294d0dad000e0e0c00020358294d0ea1000e0e0c00022935293b4d0294000e0c000303382a37294d0f87000c00024d1080000e0c00024d1178004d1074000e0c00022a2a4d126a000e0e0e0c00036503033b02054d135a00106402054d145200106502054d144a00106402054d1542001002054d163b00106502054d163300106502054d162b00106502054d162300106502054d161b00106402054d161300106502054d160b00106602054d17030010430e|@4942,@1778,@1780,I229,@1714,-1,@1720,@1722,I105,I218,I24,@1145,@1147,@1695,@1744,@1746,@1748,@1153,@547,@2124,@4943,@4945,@4947,@4949,@4941| 4941:O3|103,@382,@4951 4942:S59|56414c55455f4f505328292e636f646556616c283529696e7374616c6c5070283129666f6c6c6f775479706573283129636865636b46756e283229 4943:O3|103,@382,@4944 4944:S65|417267756d656e74207072696e746572206d757374206861766520747970652027612a696e742d3e756e697420287365636f6e6420617267206e6f7420696e7429 4945:O3|103,@382,@4946 4946:S70|417267756d656e74207072696e746572206d757374206861766520747970652027612a696e742d3e756e697420287365636f6e6420617267206e6f74207479706520696e7429 4947:O3|103,@382,@4948 4948:S60|417267756d656e74207072696e746572206d757374206861766520747970652027612a696e742d3e756e697420286d69736d61746368656420276129 4949:O3|103,@382,@4950 4950:S55|417267756d656e74207072696e746572206d757374206861766520747970652027612a696e742d3e756e697420286e6f74207061697229 4951:S59|417267756d656e74207072696e746572206d757374206861766520747970652027612a696e742d3e756e697420286e6f742066756e6374696f6e29 4952:O3|103,@382,@4953 4953:S24|417267756d656e74206d7573742062652061207475706c65 4954:O1|@4955 4955:C7,96|00812c3b4d0058000e0c000303162b3b4d004c000e0c000303033b02054d013f001002392c352d362d4d0233000c00024d032c000e0c0002031e2d3529362f362d2b4d041a000e0e0e0c0003502c2a4d050d00327e0900034d01040010430e0e|@4957,I229,@4956,I105,I218,@4939,@4954| 4956:O3|103,@382,@4958 4957:S60|56414c55455f4f505328292e636f646556616c283529696e7374616c6c5070283129666f6c6c6f775479706573283129636865636b46756e73283229 4958:S30|5475706c652073697a6520646f6573206e6f74206d617463682074797065 4959:O1|@4960 4960:C5,88|00802b29354d004f004d014b000c000303292936293b4d023e000e0e0e0c000329353c4d0131000e0e0c000303032b0207292503511e323b650201296429354d0315004d0111000e0e0c000303033c02013b64420e0e0e0e|@4961,-2,I229,I253,-1| 4961:S25|5354525543545f56414c5328292e6973467265654964283129 4962:O3|103,@382,@4963 4963:S36|496e76616c6964207479706520286e6f74206672656520617420746f702d6c6576656c29 4964:S38|496e76616c6964207479706520286e6f742061207479706520636f6e737472756374696f6e29 4965:C4,56|008156072d2d695627293b4d0029000e0e0c00033b2a0e0e0e4f011b005000022d2a692f3b2b4d020e000e0e0e0c0004503b2707430e0e0e|@4967,I253,@4966,I255| 4966:C4,72|00802b3b4d0040000e0c000303033b02312b3529352d3656382b2a4d0129000e0e0c000364030b290e4f021b00310002020f290e0e4f020f003100022c2a69296566420e0e0e0e0e|@4968,I229,@2124,@4966| 4967:S22|5052494e545f5441424c4528292e6164645070283229 4968:S31|5052494e545f5441424c4528292e616464507028322966696c746572283129 4969:O1|@4970 4970:C14,272|00812c4d0009010e0e0c0002030e2c4d01fd000e0e0c0002296406d02c353c4d02ed000e0e0c00030a01000b006e004d03dd001002d42c362d372a3b4d04d0000e0c00032a3b4d04c6000e0e0e0c00032f2a4d02ba000e0e0e0c00030405002c3b4d05ab000c0003031b2a3c4d02a0000e0c00032a4d069700453b463b472a483b4951020f294d068600452d463c472b483b495029270602712c362d37294d076e000e0e0e0c000203064d0862000215294d095b000c0002292f4d0a52000e0e0e0c000364293528054d0543000c0003030e2b2a4d0b3800300e0e0e7e07000329354d0c2a004d05260002021c000e0e0e0c0003030e2b2a4d0b1400300e0e0e7e07000328062a2d6a66430e0e0e0e0e|@4972,@2425,@2415,I107,@4971,I253,I229,-5,@2036,@440,@2394,@4969,@3087,-3| 4971:O3|@7129,@237,@4973 4972:S25|56414c55455f4f505328292e636f6465416363657373283229 4973:S9|4e6f20616363657373 4974:S16|636f646556616c202d20466f726d616c 4975:O2|@4976,@7254 4976:C3,40|00802b3556174d001e000e0e0e0c000303062b3729640202020202054d01080010420e0e0e0e0e0e|@617,I251,@621| 4977:O2|@4978,@7254 4978:C2,32|00802b3556174d0016000e0e0e0c000303033c0202020202013b420e0e0e0e0e|@617,I251| 4979:C28,888|00853036293b4d006e030e0e0e0c0003036c313030303056670c0006324d0157030c00024d0250032a69333b692a2a692d2a69402a692a293b4d003b030c000303033c021f293529354d022b034d0027030c0003030c2a36292503511e253b6402013b64640312294d030c030e0c00024d0204032a6964020129270706d5294d04f5020e0e0c00024d05ec020e0c00020350313030303056670c0006293528054d00d4020e0c0003030c3c2a4d06c8020e0c0003022129354d02bc024d00b8020e0c0003030c3c2a4d06ac020e0c0003020528062a3c6a323b693f2a2c3b6b6606cf3137294d078f020c000207d8294d0885020e0e0c000233352a4d0979024d0075020e0e0c0003031531334d0a68020e0c0003343b693f2a2c3c6b6506d02a4d0b54020e0c0002032131334d0a48020e0c0003343b693f2a2c3c6b293b693f2a4d0c33023c6b270406d42a3f4d002702020219020c000303210402002a333b34342e4d0d11020e0e0c0007502935220c3b693f2a2c3c6b6606d12a4d0ef8010e0c000207c8314d0fed010e0e0c000207d0314d10e1010e0e0c00022935294d0fd5010e0e0c000207d3294d10c9010202bb010e0e0c000229352a362a29353e4d00b401020290010e0c0003031729362a372a2a4d11a0010e0c00032503511e223b65020129643b2a4d128b01020264010c000207cc2a4d137d010e0e0c00022936294d0471010e0e0c00024d0568010e0c000203a92936294d045b01020234010c00024d0550010e0c000203852936293b4d0042010e0e0e0c000303682b3529362929353e4d002e0102040701f1000e0c0003031b29362a372a2a4d11180102027f000e0c00032503511e283b65020129643229353e4d00fd0002025d000e0e0c0003031729362a372a2a4d11e8000e0c00032503511e233b65020129642a2a692704020a2e0e0e4f14cb00f000026402092d0e4f14bf00e0000264020d2c02020b000e4f14af00d000026502092a0e4f14a300b00002270502044d1598006502044d16910029352a364d1789002a2c6a7876213b22114d187c000e0c0002504d1973002e3022146b4d026a002a6964052a0e0e0e00ff6d29353c4d0058000e0c000303054d1a4e001002004d0247002b6922103b693f2a2c3b6b6627040214343333333356970e0c0006343b693f2a2c3b6b65650215323131313156770e0e0c0006323b693f2a2c3b6b6564641f060e0e0e0e0e0e0e|@4981,I229,@1827,-3,@3098,I105,I218,@3087,@2443,@2446,-1,@4982,@5091,@2798,@5094,@5125,@1778,@1780,@1714,@1720,@1722,@5128,@4930,@4930,@5130,@4861,@4980,@64| 4980:C8,88|008056092c4d004f000c0002293f4d0146000e0e0e0c000364031c2c3b3f4d0236000e0e0e0c0004294d032b004d0427000c00036402013b0304561702025618294d0513000c00022e2a2d4d060900310e0e0e7b05060004|@5134,I223,I233,@1118,@5135,I24,@5136,@5133| 4981:S28|56414c55455f4f505328292e6170706c7946756e6374696f6e283629 4982:O1|@4983 4983:C15,240|00812b3c4d00e8000e0c00033c28403b4d01dc000e0c00043c28403b4d01d0000e0c00043c28403b4d01c4000e0c00044d02bc002c694d03b6002a2c302f316806324d04aa000e0e0e0c0002293b4d059e002d0e0e0c000429353b4d0691000e0e0c0003030e2936313b692a220c0e0e7d0d00022936313b692a0e0e0e0c0002303b4d076a000e0e0e0c0003294d085f000c00024d0958000e0c0002031f2936293b4d064a000e0e0e0c000303062a35296402064d0a38002b696402064d0a2f002a693f4d0b28002d3c6b293b692b2a6928092a69294d0c160022113b3c3b3b3b68084d0d09002a692711430e0e0e0e|@4985,I106,I11,@4986,@4998,@2691,@5084,I229,I253,I105,I218,-9,@5087,@4984,-7| 4984:S8|657175616c697479 4985:S34|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e283229 4986:C7,80|00810402002c4d0046000e0e0e0c00024d013c000e0c000203152c352d364d022e002a2c326b2c3b452a46260402184d031d002e56376a4d0415002a692b4d050e00452a4626032964430e0e0e0e0e0e|@4988,I105,I218,@4989,@4991,@4987,-1| 4987:C1,16|00802b352c3656272d0e0e0e7e030003|@4997| 4988:S47|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e28322972657475726e436f6465283229 4989:C1,24|0080560856172a2a2f6a6556192c0e0e0e8000020e0e0e0e|@4990| 4990:S50|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e28322972657475726e436f6465283229283129 4991:C9,120|008156085618293b4d006c000e0c0003293c4d0162000e0e0e0c00032c3b2b4d0255000e0e0c0004505648293b4d0047000c0003323c4d013e000e0e0e0c00034d0334002a694d042e002b692b2d692b2b2b6a6656870e0e0e0c0002294d0517002c3b3d4d0610003b3b68084d0708002a692709430e0e0e|@4993,I253,I106,I255,@4994,@4996,@4992,-1,-7| 4992:S10|65717b2e2e2e7d283229 4993:S61|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e28322972657475726e436f646528322977726170706564436f6465283229 4994:C4,32|00802b3556172a2a4d0014000e0c00034d010c004d0208003c2c3b680566420e|@4995,I107,-5,-1| 4995:S69|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e28322972657475726e436f646528322977726170706564436f6465283229636f64652d283129 4996:C4,32|00802b3556172a2a4d0014000e0c00034d010c004d0208003c2c3b680566420e|@4995,I107,-5,-2| 4997:S61|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e28322972657475726e436f646528322977726170706564436f6465283129 4998:C28,560|00823b3b3b30353e4d0024020e0c00030346303631372a2a692b2b4d0111020e0e0c000329354d0206024d0002020e0e0e0c000303162a330e0c000229220c4d03ed01220c0e0e0e7e0d000329343433220c0e7b050c0004304d04d3010c000207cb304d05c9010e0e0c000229352a37294d06bb010c0002294d07b3010c0002283d2b4d08a9014d09a5010e0e0c00044d0a9c012a354d0096010e0e0e0c00034d0b8c010e0c000203164d0c82012a693b2a6929220f4d037601220f7e1000034d0d6c014d0768010e0c00022b2a4d0e5e010e0e0e0c00036403114d0f5101220d56b7220d0e0e0e7e0e00032b4d103f010c0002293b4d0036010e0e0e0c000303722c4d1129010e0e0c00024d0220012a354d001a010e0e0e0c0003644d0b0f010c0002033e2c4d110501020285000e0e0c00022d4d12f7000c000229314d13ee000e0e0e0c00032b2a3c4d14e1000e0e0c00042922122212221122130e0e7b051300044d15c800220e4d03c200220e7e0f00032935293729353b4d00b1000e0e0c000303124d15a60022104d03a00022100e0e7e1100032e312d0e0e4f168f00e000042922114d03850022110e0e0e7e120003304d1777000c00020359304d186d000e0e0c00022936294d1961000e0e0c00024d0b58000e0c0002032d2936293b4d004a000e0e0e0c000303122a35293629220c220c34220d0e7b050d00042a4f1a2b00600002640209290e4f1a1f005000026502114d151500304d031000300e0e0e7e08000366440e0e0e0e0e0e|@5000,I229,@1714,-1,@5001,@1744,@1746,@1748,@1153,@5007,@2120,-2,I218,@5010,@1095,@2124,@5012,@2172,@2091,@2106,@2133,@2136,@5014,@5023,@1720,@1722,I105,@4999| 4999:C3,32|00804d001a002c562556376b4d0110002a6956282a2a5757300e0e0e7e060003|@5075,@5076,@5074| 5000:S43|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329 5001:O1|@5002 5002:C5,88|00812b3b4d0050000e0c000303032c023f2b352c360402002f354d013a004d0036000e0e0e0c000303132f364d0228002c2e2c6b2b3b452a46260302112f364d0315002c2e2c6b2b3b452a4626032966430e0e0e0e0e0e0e|@5004,I229,-1,@5005,@5003| 5003:C4,120|00802b56190c00022c56280e0e0c00022d56370e0e0c0002293b692b2a69402a692a293b4d0050000e0c000303033c021f293529354d013f004d003b000c0003030c2a36292503511e263b6402013b64640312294d0220000e0c00024d0118002a6964020129293b693f2a323c6b2708420e0e0e0e0e0e0e|@5006,I229,-3,@3098| 5004:S46|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e28322972657475726e46756e283229 5005:C1,40|00802b56190c00022c56280e0e0c00022d56370e0e0c0002293b692b2a693f2a2f3c6b2705420e0e|@5006| 5006:S49|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e28322972657475726e46756e283229283129 5007:O1|@5008 5008:C2,8|00804d000200420e|@5009,@440| 5009:S54|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b6545712833297370656369616c2d283129 5010:C1,8|00805607420e0e0e|@5011| 5011:S46|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329283129 5012:O1|@5013 5013:C2,8|00804d000200420e|@5011,@473| 5014:O2|0,@5015 5015:O1|@5016 5016:C2,8|00804d000200420e|@5018,@5017| 5017:O2|-3,@5019 5018:S45|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e28322964656661756c742d283129 5019:O1|@5020 5020:C2,16|00802b352c364d0006002d0e7e030003|@3797,@5021| 5021:O1|@5022 5022:C20,728|00812c2c4d00d0020e0c000303033c06d62c4d01c2020e0e0e0c000203033b06c82b4d01b2020e0e0e0c000203033b06d32c4d02a2020e0e0e0c00022c4d0297020c00022a2a4d008e020e0e0e0c00034d0384020e0c000203033b06d42e4d0476020e0e0e0c00022e4d046b020c00022a2a4d0562020e0e0e0c00032928404d0655020e0e0c0003293b4d004a020e0e0e0c0003644d033f020c000203033b06d6293c4d0631020e0e0c0003293b4d0026020e0e0e0c0003644d031b020c0002039d2d3b4d0710020e0c000303104d0806022e4d0901020e0e0c000302012d293f4d0af3010204e801e6010e0e0c0003294d01e3010c0002030329020f294d0bd6010202cb010e0e0e0c00023b292b4d00c5010e0e0c000303033c023e220c2a4d0cb4010e0c0003220c2b4d0ca90102029d010e0e0c00032a2a4d009a010e0e0e0c0003650313293c4d0d8b010c0003292502501e473b6402013b270406cd2d3c4d0e73010c00030a01008000a1002d3c4d0f6301020256010c000329293b4d1055010e0e0c000303033c0237332a4d1145010e0e0c0003332b4d113a010e0e0e0c00032a2a4d122e010e0e0e0c0003650310293c4d0f1f010c000325011e413b02013b650321313b4d110b010c0003313b4d1102010e0e0e0c00032a2a4d12f600340e7e0b00033b06ca313b4d11e7000c0003313b4d11de000e0e0e0c00032a2a4d12d200340e7e0b0003313b4d11c6000e0e0e0c0003323c4d11ba000e0e0e0c0003323b4d11ae000202a1000e0e0e0c0003333c4d119e000e0e0e0c00032c4d0193000c0002031d2c2b4d0088000e0c0003030e2b2a4d127c00220d0e0e7e0d00033b02662a4d016c000e0c000203033b02582b4d015e000e0e0e0c0002031d2b2a4d0050000e0c0003030e2c2b4d124400220d0e0e7e0d00033b022e294d0134000e0c000203033b02202c2b4d122500020218000e0e0c0003030e2b2a4d121400220d0e0e7e0d00033b27046665430e0e0e0e0e0e|@3799,I251,I105,I15,I218,I17,I242,I243,I234,@190,I106,I108,I152,I252,I239,I107,I240,I229,I253,@5021| 5023:C14,280|00822d4d0011010e0e0c00022e4d0107010c00025728293b4d02fc000e0c000329293b4d03f1000e0e0c000303033b0224293529352a362c362a324d04d9000e0e0c000303052b6801020829250526041e2f3b2704644d05be002d567556876b4d06b40057792b220c220e68055778293b4d02a3000c000329293b4d0399000e0e0c000303033b0224293529352a362c362a220e4d0480000e0c000303052b6801020829250526041e2f3b2704640402002a4d0762000e0e0e0c00024d0858000e0c000203172a354d094c0022102b316b2b4d0a4200452a4626030237220f220e4f0b3300c10003220f3b4d0329000e0e0c0003030b2a4d0a1d00452a465002124d0c13003022112c6b2b4d0a0900452a46515029270b44|@5025,@1153,@1751,I253,I229,@2124,@5026,@5035,I105,I218,@5039,-1,@5041,@5024| 5024:C2,32|00802b56190c000256183b2a0e4f000f003000023f2a2e3c6b2704420e0e0e0e|@5073,@5072| 5025:S69|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329657175616c697479466f72436f6e737472756374696f6e283329 5026:C8,136|00812b352c3656292f3b2b56680c000429353b4d0071000e0e0c0003035a29362d3c4d0162000e0e0e0c0003292e69642a0c00023f4d024f002b3c6b2f3c4d0146000e0e0e0c000356874d033a002a4d0435000e0e0c0003294d052b004d0427000c00032d2a2e3b3d3b3b3b68084d0616002a692708020c2936302a310e0e0e7d0900022704430e|@5028,I229,I106,@5029,@5034,@353,@5027,-7| 5027:S5|282e2e2e29 5028:S78|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329657175616c697479466f72436f6e737472756374696f6e283329676574417267283229 5029:O2|@5030,0 5030:O2|10,@5031 5031:O2|@474,@5032 5032:O2|@5033,0 5033:O5|-5,-2,1,0,0 5034:S3|65712d 5035:C11,440|00832e2e692c3b4d00ad010e0e0c0003035e0405002e304d019d010e0e0c0003032c5627312a4d028e010e0e0e0c0003293c4d0282010e0e0e0c00032c4d037701453b463b472a483b492604021e5627312a4d0262010e0e0e0c00032b4d0357014531463c472a483b492603296406db2d2f4d0142010e0e0e0c00034d0438010e0c0002032f5617302a4d022a010e0e0e0c00034d032001303c2c3b680556493b2a0e0e0e4f050f016000023f2a2e3c6b270606ca5619562a4d06fb000c00022a2a3c2b4d07f0000e0c00024d04e8000e0c000203722b352c362c4d07d9000e0e0c00024d04d0000e0c000203562c352d362d033d2c353e4d00bc000e0c0003032d2c362d372a2a692d353e4d00a8000e0c000303152d362e372a2a692c2a4d0895000e0e0c00036602013b6602013b02013b2c2b2b25082508250826051e7b3b6602012b6502012902026200270503245617302a4d025f000c0003293d4d0256000e0e0e0c00034d034c003b3b2c3b680566023a5617302a4d023b0002022e000c0003293c4d022e000e0e0e0c00034d0324003b3b2c3b680556593b2a0e0e0e4f0913007000023f2a2e3c6b2707641f040e0e0e0e0e0e|@5037,I229,I113,I107,-5,I218,@5038,@2106,I105,@1695,@5036| 5036:C3,48|00802b3b4d0028000e0c000303033b021d2b352c362a563457480e0e0e0c00032a4f010b003100022a2a69292705420e|@445,I229,@5036| 5037:S83|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329657175616c697479466f72436f6e737472756374696f6e2833297265637572736976654571283429 5038:C3,48|00802b3b4d0028000e0c000303033b021d2b352c362a563457480e0e0e0c00032a4f010b003100022a2a69292705420e|@445,I229,@5038| 5039:C1,24|00802b352c365628563756492f0e0e7b060300050e0e0e0e|@5040| 5040:S86|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329657175616c697479466f72436f6e737472756374696f6e2833297265637572736976654571283129283129 5041:C26,560|00812c4d0029020e0e0c00022d4d011f020c0002572b573b293b4d0212020e0e0e0c0003293c4d0306020e0e0e0c00032c3b2b4d04f9010e0e0c000450576b293b4d02eb010c000357882a326957a8293b4d02db010c00032b2a692d3b2b4d04ce010e0e0e0c00045022104d05c1010e0e0c00023b2a293b4d06b4010e0c000303032a021629362b3c4d03a3010c0003292b25042504511e213b656557f9293c4d038c010e0c00032b3b4d0682010e0e0e0c0003030329020b293c4d0371010e0e0c00034d0768012d2f121600010001002e68053b22164d0855010e0e0c00024d094c010e0c00020355221636293b4d063d010e0e0c00030329221735294d0a2e010e0e0e0c000203064d0b2201021022180e0e0e160c0016011800000000026402192217160c0006011700000000023d4d0dfb004d0bf7002c6b646402192216160c00ea001600000000023d4d0edf004d0bdb002c6b644d0fd40022144d10ce000e0e0e0c0003294d11c3004d10bf000c00032b2a303b3d4d12b3003b3b68084d13ab002a69333b4d06a3000c000303032902314d14970022184d1091000e0e0c0003294d1587004d1083000c00032b2a220c3b22104d1275003b3b68084d136d002a6966121b0002000400121c0002000400293b4d0256000e0e0e0c00034d164c0022162e3b6b293b69293b4d063e000e0e0e0c000303032b02103b2c0e0e1617002a00220000000002642e3b2b4d041c000e0c0004504d18130012220002000300221a6a2720430e0e0e0e0e0e|@5043,@1153,@1751,I253,I106,I255,@2106,I229,@5044,I105,I218,@5052,@473,@5055,@5066,@5066,@5034,@353,@5068,-1,-7,@5034,@5069,-4,@5070,@5042| 5042:C3,40|00802b35561856272b2a4d001a000e0e0e0c00034d0110002c3c2c3b68052704420e0e0e0e0e0e0e|@5071,I107,-5| 5043:S65|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329657175616c697479466f724461746174797065283229 5044:C3,32|00803b561856274d0015000e0e0c0002292b0e0e0e4f01070040000366420e0e|@5046,I111,@5045| 5045:C8,120|00812b3b4d0070000e0c0003030a560757192c0e7d0400022b3529353e4d0057000c0003034729362a372a2a692f365657292c4d0141000e0e0c00036403114d023500576a336a4d032d002a69640219313c4d0422000e0e0e0c0003292b0e0e0e4f05130071000364270402054d0607001064430e0e0e0e|@5048,I229,@1695,@5049,-1,I106,@5045,@5047| 5046:S76|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329657175616c697479466f7244617461747970652832296e6577547646756e283129 5047:O3|@7129,@237,@5051 5048:S85|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329657175616c697479466f7244617461747970652832296e6577547646756e28312966696e645476283229 5049:C3,40|00802b35561856272b2a4d001a000e0e0e0c00034d0110002c3c2c3b68052704420e0e0e0e0e0e0e|@5050,I107,-5| 5050:S88|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329657175616c697479466f7244617461747970652832296e6577547646756e28312966696e645476283229283129 5051:S27|66696e6454763a206e6f7420612074797065207661726961626c65 5052:O1|@5053 5053:C9,120|00802b36294d006f000c00024d0168000e0c0002035e2935293c4d025a000e0e0e0c0003034a2d37294d034b000c0002033a294d0441000e0e0c0002294d0537000c0002294d002f000c000203054d0626001029293c4d071e000e0e0e0c0003294d001300330e0e7d0a00023b6402013b6402013b64420e|@5054,I105,I218,I229,@2425,@2415,@4861,@407,I253| 5054:S74|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329657175616c697479466f7244617461747970652832296973456e756d283129 5055:C13,296|00802b3b4d0020010e0c000303064d01160106d22b3529362a372b382f362d4d0205010e0e0c0002030c290e0e4f03f70051000206d91206000100edff2c2a4d04e5000e0e0c00033b2f4d05da000e0e0e0c00024d06d0000e0c000203bd2f35293c4d00c2000e0e0e0c0003039f2b3528054d00b2000e0e0e0c0003030c3b2c4d07a4000e0c000302212b354d0898004d0094000e0c0003030c3b2c4d0788000e0c0003020528062c3b6a3f4d0978002b3c6b2d3528054d006d000e0e0c0003030c3b2e4d0760000e0c000302252d354d0854004d0050000e0c000303103b2e4d07440002023f000e0c0003020528062e3b6a3f4d0a30002b3c6b310e4f032700d100023d2d2c2c6b2705020b020214004f0b13008000016402090e0e4f0b070070000166270542|@5057,I229,@510,@5052,@5055,@4969,I105,I218,@3087,-3,@472,@5032,@5056| 5056:C13,304|007f56011202000200f1ff2a2a4d001f010c00034d0118011205000200edff56526a4d020a012a694d0304012b691207000200edff1208000200f7ff2a2a69120a000200ecff2e2e69312a2c58e50e0e0e0c000429353b4d04d5000e0e0c0003030d29362d2a0e0e0e0c00026402054d05bd0010120e000100f8ff293528054d04ad000e0e0c0003030c3b2a4d06a0000e0c0003022129354d0794004d0490000e0c0003030c3b2a4d0684000e0c0003020528062a3b6a3f4d0874002b3c6b1211000100f8ff293528054d0462000e0e0e0c0003030c3b2a4d0654000e0c0003022129354d0748004d0444000e0c0003030c3b2a4d0638000e0c0003020528062a3b6a3f4d0928002b3c6b3d2a314d0a1e006b1215000100faff0e0e0e160b000e001600020000023d2f2c2c6b271541|@5059,@3023,@5060,@5062,@5064,I229,@5058,@3087,-3,@472,@5032,@510,@5055| 5057:S82|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329657175616c697479466f72446174617479706528322970726f63657373436f6e73747273283129 5058:O3|@7129,@237,@5065 5059:S84|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329657175616c697479466f72446174617479706528322970726f63657373436f6e737472732831292f32 5060:C7,112|00825608292f4d0066000e0e0e0c0003293528054d0158000e0c0003030c3d2a4d024c000e0c0003022129354d0340004d013c000e0c0003030c3d2a4d0230000e0c0003020528062a3d6a5637312a4d041d000e0e0c00034d051400313c2c3b6805293b693f2a2f3c6b2707440e0e0e|@5061,@4969,I229,@3087,-3,I107,-5| 5061:S93|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329657175616c697479466f72446174617479706528322970726f63657373436f6e737472732831296465737472756374283329 5062:C2,24|00802b352c364d000e0056372e0e0e7b050300040e0e0e0e|@5063,-1| 5063:S96|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329657175616c697479466f72446174617479706528322970726f63657373436f6e737472732831296465737472756374283129283129 5064:C2,24|00802b352c364d000e0056372e0e0e7b050300040e0e0e0e|@5063,-2| 5065:S21|6170706c7945713a2077726f6e6720726573756c74 5066:O4|4,@5031,@5067,1 5067:O2|-3,I251 5068:S3|283229 5069:S3|283129 5070:C3,48|00802b3b4d0028000e0c000303091201000100e0ff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1555,I229,@5070| 5071:S68|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329657175616c697479466f724461746174797065283229283129 5072:C3,48|00802b3b4d0028000e0c000303033b021d2b352c362a563757470e0e0e0c00032a4f010b003100022a2a69292705420e|@445,I229,@5072| 5073:S72|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329657175616c697479466f72436f6e737472756374696f6e283329283129 5074:C1,16|00802b352c362d3756372e7b05030004|@5083| 5075:S45|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b6545712833292f34 5076:C2,24|00823b5617293b0e0e4f000b0030000365440e0e0e0e0e0e|@5078,@5077| 5077:C9,128|00812c3b4d0078000e0c000303064d016e00026a2c3529362e364d0262005649306a4d035a005658316a565757692c2c692f2a2c57b80e0e0e0c000429353b4d003d000e0e0c0003030d29362d2a0e0e0e0c00026402054d04250010220c3c4d051d000e0e0c0003312a0e0e0e4f060f00c100033d2c2b4d0705006b270c430e|@5080,I229,@473,@5081,@5079,@5058,I106,@5077,@510| 5078:S53|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b65457128332965715475706c65283329 5079:C4,80|008056082c56270e0e0c0002293528054d003c000e0c0003030e2a2a4d0130002f0e0e0e7e05000329354d0222004d001e000e0e0e0c0003030e2a2a4d0110002f0e0e0e7e05000328062a2c6a65420e|@5082,I229,@3087,-3| 5080:S70|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b65457128332965715475706c65283329636f6d62696e65456e7472696573283229 5081:C4,80|008056082c56270e0e0c0002293528054d003c000e0c0003030e2a2a4d0130002f0e0e0e7e05000329354d0222004d001e000e0e0e0c0003030e2a2a4d0110002f0e0e0e7e05000328062a2c6a65420e|@5082,I229,@3087,-3| 5082:S73|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b65457128332965715475706c65283329636f6d62696e65456e7472696573283229283129 5083:S53|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b65457128332965715475706c65283129 5084:O1|@5085 5085:C2,8|00804d000200420e|@5086,@5014| 5086:S48|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e283229726573756c74436f64652d283129 5087:O2|@5089,@5088 5088:O2|@5090,0 5089:O3|6,@474,0 5090:O3|6,@474,1 5091:O1|@5092 5092:C3,16|00804d000a002c4d0105002d7e030003|@5093,-3,I229| 5093:S8|4e6f74457175616c 5094:O1|@5095 5095:C6,64|00852f4d0039000e0e0c00024d0130000e0c00024d0228002e3034346805322b2b4d031b000c00042b4d0413000c00022f2b452a4627041f060e0e0e0e0e0e0e|@5097,@2691,@5098,@5096,@2120,@1751| 5096:C7,72|0080560929283d4d003d000e0e0c00036403064d013100022e56094d0229000e0e0c0002294d031f000c0002562a5639564856572c2c2f2d2d4d040b000c0006504d050300270642|@5113,I24,@5017,@2678,@5114,@5112,@440| 5097:S34|56414c55455f4f505328292e6765744f7665726c6f6164496e7374616e6365283629 5098:O1|@5099 5099:C36,1136|00802b4d0069040e0e0c000207cc2b4d015d040e0e0c000229352a364d0250040e0c0003294d0347040c000207cf294d043d040e0e0c000229294d0532040e0e0e0c00024d0628040e0c0002033629352a364d071a044d0816040e0e0e0c00022b4d080b040c00022a2a4d0902040e0e0e0c00036503033c0207292503511e453b6502013b64036d4d07e4034d0ae0030e0c00020402004d07d5034d08d1030e0e0c00024d0bc8030e0c000203193c28404d07bb034d0cb7030c00042a4d0daf03452a46510208294d0ea403080200293b2c2b6a4d0f9803020217030e0c00022f2a4d108a030e0e0e0c0003504d077f03270406cd29294d0575030202ed020e0e0c00024d0668030e0c0002033629352a364d115a034d0856030e0e0e0c00022b4d084b030c00022a2a4d0942030e0e0e0c00036503033c0207292503511e483b6502013b6403694d1124034d0a20030e0c00020402004d1115034d0811030e0e0c00024d0b08030e0c000203193c28404d11fb024d0cf7020c00042a4d0def02452a46510208294d12e402080200293b2c2b6a4d0fd8020e0c00022f2a4d10ce020e0e0e0c0003504d11c302270406cd29294d05b9020e0e0c00024d06b002020225020e0c0002033629352a364d139e024d089a020e0e0e0c00022b4d088f020c00022a2a4d0986020e0e0e0c00036503033c0207292503511e483b6502013b6403694d1368024d0a64020e0c00020402004d1359024d0855020e0e0c00024d0b4c020e0c000203193c28404d133f024d0c3b020c00042a4d0d3302452a46510208294d142802080200293b2c2b6a4d0f1c020e0c00022f2a4d1012020e0e0e0c0003504d130702270406cd29294d05fd010e0e0c00024d06f401020269010e0c0002033629352a364d15e2014d08de010e0e0e0c00022b4d08d3010c00022a2a4d09ca010e0e0e0c00036503033c0207292503511e483b6502013b6403694d15ac014d0aa8010e0c00020402004d159d014d0899010e0e0c00024d0b90010e0c000203193c28404d1583014d0c7f010c00042a4d0d7701452a46510208294d166c01080200293b2c2b6a4d0f60010e0c00022f2a4d1056010e0e0e0c0003504d154b01270402c029294d0541010e0e0c00024d0638010202ad000e0c0002033629352a364d1726014d0822010e0e0e0c00022b4d0817010c00022a2a4d090e010e0e0e0c00036503033c0207292503511e483b6502013b6403694d17f0004d0aec000e0c00020402004d17e1004d08dd000e0e0c00024d0bd4000e0c000203193c28404d17c7004d0cc3000c00042a4d0dbb00452a46510208294d18b000080200293b2c2b6a4d0fa4000e0c00022f2a4d109a000e0e0e0c0003504d178f00270402044d1987006402044d1980006502752b4d1a78000e0c000203662b4d1b6d000e0e0c000229352a37294d1c5f000c0002294d1d57000c0002294d1e4f000c0002640303290236294d1d41000e0e0c00022a4d1f37000c0002292e4d202e000e0e0e0c00032b2a3c4d2121000e0e0c0004664d221700300e0e7d070002270402044d190800420e0e0e0e0e0e0e|@5101,@1145,@1147,@1714,@1740,@1712,I105,I218,@547,@1153,@2124,@1751,@1156,I11,-1,@5102,@1160,@1140,@2128,@5103,@5104,@5107,@5108,@5111,@552,@5100,@1151,@1744,@1746,@1748,@2091,@1717,@2106,@2133,@2136,@5098| 5100:O2|0,@552 5101:S48|545950455f5452454528292e74797065436f6e73747246726f6d4f7665726c6f61642832297072656654797065283129 5102:O2|0,@547 5103:O2|0,@2128 5104:O6|@5106,0,0,0,@549,@5105 5105:O2|-1,@7255 5106:S4|776f7264 5107:O2|0,@5104 5108:O6|@5110,0,0,0,@549,@5109 5109:O2|-1,@7256 5110:S4|63686172 5111:O2|0,@5108 5112:O1|@5117 5113:S45|56414c55455f4f505328292e6765744f7665726c6f6164496e7374616e63652836296e6f74466f756e64283129 5114:O1|@5115 5115:C6,96|00802b3b4d0058000e0c000303064d014e0002482b36293b4d0044000e0c0003030e2c352935294d0235002f7d0600022c352935294d0227000c000229282f4d031d000e0e0c00032d4d0413000c00022a2a4d030a00330e7e090003420e0e0e|@5116,I229,I48,@1751,@353,@5114| 5116:S64|56414c55455f4f505328292e6765744f7665726c6f6164496e7374616e63652836296e6f74466f756e642831296d616b654f7665726c6f61644c697374283129 5117:C11,184|00842f4d00b1000e0e0c00022d2309294d01a4004d02a0000e0c00032b4d0397000c0002030e2b4d048d000e0e0c00023c6402013b03454d057d00324d0678000e0c00034d0770002a6929313c3435220c36220d37220e38220f3922103a221123062212230722132308221423094d08460022140e0e0e7b0f0c000e4d0938002a2d33220c680529303c33353436220c37220d38220e39220f3a221023062211230722122308221323094d080a0022130e0e0e7b0f0b000e|@5119,@2691,@7196,@623,@1145,@1147,@5120,@353,@5121,@774,@5118| 5118:C7,112|00802b23064d0067002a0e0e0e0c0002512b38561a294d0156004d0252000e0e0e0c000356392a2a4d0244000e0c0003294d033b004d0237000c000327042a0e0e0c000251560856173b4d0422000e0e0e0c00022b2b302c3c4d0513000c0006502e373b2a300e0e7d0700020e0e0e0e|@5123,@1795,@5124,@353,@5122,@1689,@1704| 5119:S28|545950455f5452454528292e6f7665726c6f61644572726f72283529 5120:S34|556e61626c6520746f207265736f6c7665206f7665726c6f6164696e6720666f7220 5121:C1,16|00802b3856172a2d7d0400020e0e0e0e|@773| 5122:S9|20627574206e6f7420 5123:S31|545950455f5452454528292e6f7665726c6f61644572726f72283529283129 5124:S18|206973206f7665726c6f61646564206f6e20 5125:O1|@5126 5126:C2,16|00803b2c4d0008002d0e0e0e7e030003|@5127,I229| 5127:S11|4164644f7665726c6f6164 5128:C3,96|00802b29353e4d0056000e0e0e0c0003031729362a372a2a4d0144000e0c00032503511e203b65020129641202000100f6ff2929353e4d0026000e0e0e0c0003031729362a372a2a4d0114000e0c00032503511e203b65020129642b2a696642|@5129,I229,@1714| 5129:S40|56414c55455f4f505328292e6170706c7946756e6374696f6e2836293c7061747465726e3e2d2f32 5130:C3,24|00804d0012002c694d010c00562756382c6b64420e0e0e0e|@5132,-3,@5131| 5131:C8,88|008056092c4d004f000c0002293f4d0146000e0e0e0c000364031c2c3b3f4d0236000e0e0e0c0004294d032b004d0427000c00036402013b0304561702025618294d0513000c00022e2a2d4d060900310e0e0e7b05060004|@5134,I223,I233,@1118,@5135,I24,@5136,@5133| 5132:S49|56414c55455f4f505328292e6170706c7946756e6374696f6e2836296164644f7665726c6f616447656e6572616c283129 5133:O2|@5139,@7206 5134:S48|56414c55455f4f505328292e6170706c7946756e6374696f6e2836296164644f7665726c6f6164696e67283129283129 5135:S4|636f6e76 5136:O1|@5137 5137:C12,136|00802b4d0081000e0e0c0002036e2b4d0175000e0e0c000229352a37294d0267000c0002294d035f000c00024d0458002a354d0552000e0e0e0c0003640303290236294d0341000e0e0c00022a4d0637000c0002292e4d072e000e0e0e0c00032b2a3c4d0821000e0e0c0004664d091700300e0e7d070002270402054d0a080010420e0e0e0e0e0e|@5138,@1744,@1746,@1748,@2091,-1,I229,@2106,@2133,@2136,@5136,@4937| 5138:S42|56414c55455f4f505328292e6170706c7946756e6374696f6e283629666f6c6c6f775479706573283129 5139:C4,56|00823b56172f2f2f6a5637293b4d0027000c0003644f011f003000022a2a692c3b2b4d0212000e0e0e0c0004503b2705440e0e0e0e0e0e0e|@5141,I253,@5140,I255| 5140:C6,104|00802b3b4d0060000e0c000303033b02562b3529352a362e3656492c2a4d0147000c000364032056484d023b000c00022b4d0233000c00022a2a4d032a000e0e0e0c00036502013b030c290e0e4f041700410002020f290e0e4f040b004100022d2a692965270442|@5142,I229,I24,@1153,@2124,@5140| 5141:S28|5052494e545f5441424c4528292e6164644f7665726c6f6164283329 5142:S37|5052494e545f5441424c4528292e6164644f7665726c6f616428332966696c746572283129 5143:C12,448|00852b352c36562b4d00b4010e0c000203033206cc4d01a7012b564834566934568a68074d0298012c5658220c567934569a68074d0388012d5668220d5689569a68064d0479012c695667293b4d056f010c0003642e0e0e0e0c0002220c3b692a2a69402a692a293b4d0653010c000303033c021f293529354d0443014d063f010c0003030c2a36292503511e253b6402013b64640312294d0724010e0c00024d041c012a6964020129293b693f2a313b6b4d040a01336956e7293b4d0500010e0c000364220d0e0e0c00024d04f000346912110001000100293b4d05e1000202d5000e0e0c000364220f0e0e0c0002294d08cb0069402a692a293b4d06c0000e0c000303033c021f293529354d04af004d06ab000c0003030c2a36292503511e263b6402013b64640312294d0790000e0c00024d0488002a6964020129293b693f2a303b6b4d097600221e2b4d0a6f006b293b69322a69402a692a293b4d065e000e0e0e0c000303033c021f293529354d044b004d0647000c0003030c2a36292503511e283b6402013b64640312294d072c000e0c00024d0424002a6964020129293b693f2a22103b6b293b6922112a6928092a69271d651f060e0e0e0e0e|@5145,I218,@5146,@5151,@5153,-3,I253,I229,@3098,@5144,-6,@518| 5144:O2|@4387,0 5145:S45|50415253455f5452454528292e67656e636f64652837297772617046756e6374696f6e496e4465627567283629 5146:C3,56|00802b352c36562c563b2b2a69644d0026000e0e0e0c0002564a565956685677302a30303030304d010d0022110e0e7b090b00080e0e0e0e|@5148,@5147,@4729| 5147:O1|@5149 5148:S61|50415253455f5452454528292e67656e636f64652837297772617046756e6374696f6e496e4465627567283629656e74657246756e6374696f6e283129 5149:C1,16|00802b352c363b2b2b6a65420e0e0e0e|@5150| 5150:S10|4465627567456e746572 5151:C2,48|00802b352c36562c563b3c2c2b6a565a566956785687312a31303030304d000f000c000850302709420e0e0e0e0e0e0e|@5152,@4729| 5152:S61|50415253455f5452454528292e67656e636f64652837297772617046756e6374696f6e496e44656275672836296c6561766546756e6374696f6e283129 5153:C3,40|00802b352c36562b4d001c002b69564a565956685677302a30303030304d0107000c0008502f100e|@5154,-1,@4729| 5154:S65|50415253455f5452454528292e67656e636f64652837297772617046756e6374696f6e496e4465627567283629657863657074696f6e46756e6374696f6e283129 5155:C14,360|00842f4d0061010e0e0c000256170402002b313c2d332e4d014d010e0e0c00075029352a3678761a3b2d4d023a010e0e0e0c0002220e2a0e0e0c00022968016509dc00ff6d293528654d031b010c000303033b0202020206cf293528084d0307010c00030358293756774d04fa002b4d05f5000e0e0c0003294d06eb004d05e7000c00032922104d05dd000e0e0c0003294d07d3004d05cf000c000329314d05c6000e0e0e0c00032e3c221122132d4d08b5000e0e0c0006503b270702020202029a293528054d039e000e0e0e0c0003034056674d099000220d4d058a000e0e0e0c0003294d0a7f004d057b000c0003292e4d0572000e0e0e0c00032c3c220e22102d4d0861000e0e0c0006503b270402020202024656674d0b4c0002023d00220d4d054200020232000e0e0e0c0003294d0c33004d052f000c0003292e4d0526000e0e0e0c00032c3c220e22102d4d0815000e0e0c0006503b27046427051f050e0e0e0e0e0e0e|@5157,@1827,@5094,@4861,I229,@5158,@353,@5159,@5156,@2657,@5160,@5156,@5161,@5156| 5156:S4|20746f20 5157:S41|50415253455f5452454528292e67656e636f64652837296765744c69746572616c56616c7565283529 5158:S22|436f6e76657273696f6e20657863657074696f6e2028 5159:S26|2920726169736564207768696c6520636f6e76657274696e6720 5160:S43|4f766572666c6f7720657863657074696f6e20726169736564207768696c6520636f6e76657274696e6720 5161:S34|457863657074696f6e20726169736564207768696c6520636f6e76657274696e6720 5162:C37,1072|00832c352d362e383b2f354d0021044d011d040e0e0c000303912f37293b4d020e040e0e0e0c0003294d0303040c00022936294d04f9030e0e0c00020326294d05ed030e0e0c00024d06e40333221022106b220e220e2b304d07d40322100e7b06100005293b4d01c6030e0e0e0c00030314220c220c4d08b6032e0e0e4f09af03b000050221220c220c4d0aa2030e0e0e0c000329352a362b372c38302d69292d2d2d6b292707270406ce2f35280d4d017d030e0e0c000303622f362c353d4d016d030e0e0c0003031a3b2a0e4f0b5f036000024d0c58032a69302a3b316b29270402352c354d0c46034d0142030e0e0e0c0003031e2c363b2a2c0e0e4f0d2f038000034d0c28032a69312a3b326b29270502054d0e1803106406d12f3528084d010c030e0c000307d22f3730382a3b4d02fc020e0c000329294d0ff2020e0e0e0c0002031f294d10e5020e0e0c000229352a364d11d8020e0c00032502501e263b64022b294d12c6020e0e0e0c0002031d294d13b9020202ae020e0e0c00022935294d14a9020e0e0c00026502013b6503185667293c34220f4d1592024d168e020e0e0e0c00066402013b2b3b4d027e020e0e0e0c00034d1774020e0c00024d186c022a2a0e0e0e0c00022d2a2a3b4d015c020e0c000303032902402a352b362a352b36343b4d02450202023a020e0e0c00032b2a4d193602020236000e0e0e0c00032b2a314d1a25020e0e0c00042e2a2509250926071e4a3b270765280d2a692211221122112c221022120e0e7b061200052f353c4d01f5010e0e0c0003038a2f3630372a354d00e4014d01e0010e0c000303722a37293b4d02d2010e0e0e0c0003294d03c7010c00022936294d04bd010e0e0c0002032a294d05b1010e0e0c00024d1ba801220c22122212326805221022102b304d07950122120e0e7b06120005293b4d0186010e0e0e0c00030310220e220e2f2e0e4f097301d000050202220d27040201326506cc2f35280e4d015c010e0c0003030e31314d0a5001310e0e0e7e0a00032f354d1c42014d013e010e0e0e0c0003030e31314d0a3001310e0e0e7e0a00032f3528094d0120010e0c000303162f364d1d14013330220d6b322b2b330e0e0e7e0c00032f354d1efe004d01fa000e0e0e0c0003034e2f36303731382b3b4d02e6000e0e0e0c00035687040200283d2c3b2d22132e4d1fcf000c00075029352d2f2e22132211121100010002000c0006221022102b2d4d20ae0022120e0e0e7b061200052f354d219e004d019a0002028f000e0e0e0c0003030e2f373333332c32340e7b060b00052f354d227a004d0176000e0e0e0c000303662f3630373434342c330e0e0c00052b29354d0059004d0155000e0e0c000303112937293b4d0246000e0e0e0c000364021f29354d2137004d0133000c0003030c2937292502501e373b6402044d231e00642a352b362c372d382d2d69292d2d2d6b29270a02013027041f040e0e0e|@5164,-8,I229,I253,@2673,@2739,@2741,@5165,@5167,@1305,@5181,@5188,@5194,-2,@5195,@5199,@1145,@1147,@1714,@1720,@1722,I218,@5201,@2657,@5202,@5207,@5210,@5213,@5218,-16,@5219,-10,@5094,@5163,-3,-9,@1252| 5163:O1|@5227 5164:S34|50415253455f5452454528292e67656e636f64652837296275696c64416f74283429 5165:C2,24|008056095618292b2f4d000b005667310e0e0e7b06050005|@5166,@1305| 5166:S37|50415253455f5452454528292e67656e636f64652837296275696c64416f74283429283129 5167:O1|@5168 5168:C9,200|00832d352e362f3730382f4d00b9000e0e0c00022c353d4d01ad000e0e0c00030371304d02a1000e0e0c00024d0398000e0c00023b2a293b4d018c000e0c000303032a021629362b3c4d047b000c0003292b25042504511e213b6565220c3b69220c383b4d0560003b2c6b2965220c0e0e0c0002040300292c452b46220d475029293b693b2a69220c2a31220c6b292709022f2c353b4d012e000e0e0e0c0003031b2c363b2a0e0e0e4f061b007000023b2a69312a31316b29270502054d0707001027051f040e0e|@5170,@1827,I229,@2338,@5171,I106,@5174,@5175,@5169| 5169:O3|@7129,@237,@5180 5170:S46|50415253455f5452454528292e67656e636f64652837296275696c64416f74283429616464436f6e737472283429 5171:O1|@5172 5172:C15,192|00802b4d00b9000e0e0c000203872b4d01ad000e0e0c000229352a37294d029f000c0002294d0397000c0002293b4d048e000e0e0e0c0003031c2a4d0581000e0e0c0002294d0677000c0002644d076f000c000202013b03372a4d0562000e0e0e0c00022b4d0857000c0002292f4d094e000e0e0e0c00032b2a3c4d0a41000e0e0c0004664d0b3700310e0e7d08000229270502242b4d0c26000e0e0e0c000203162b4d0d19000e0e0c00022936294d0b0d002e7d0500023b420e0e0e0e0e0e|@5173,@1744,@1746,@1748,@2172,I229,@2091,@1717,I218,@2106,@2133,@2136,@5171,@1778,@1780| 5173:S28|545950455f5452454528292e676574436f6e7374724c697374283129 5174:O1|2 5175:C7,152|00802b3b4d0090000e0c0003032d5607561a293b69563929383b4d017a003b2c6b296656480c0002040300292c452b462e475029293b692706025b2b352c362a374d0253000c000256302a2a4d0348000e0c00036503315627563a293b692d352a2a4d0432000e0e0e0c00032f3656880e0c0002040300292c452b4630475029293269292709020d294f050b002100022b2a69296565420e|@5177,I229,@5174,@1827,I24,@5176,@5175| 5176:O1|@5178 5177:S57|50415253455f5452454528292e67656e636f64652837296275696c64416f74283429616464436f6e737472283429616464436c697374283129 5178:C9,472|00812c3b4d00d0010e0c000303032b06d62b3b4d00c1010e0e0c000303032c06c82c4d01b2010e0e0e0c00024d02a8010e0c000203062c35296402054d039801102c4d0192010e0e0e0c00024d0288010e0c000203062c35296402054d037801102a2a4d0471010e0e0c00036503712c4d0164010e0c00024d025c010e0c000203062c35296402054d034c01102d4d0146010e0e0e0c00024d023c010e0c000203062d36296402054d052c01102d4d0126010e0e0e0c00024d021c010e0c000203062d36296402054d050c01102a2a4d0605010e0e0c00032c2a6929270506d22c4d01f3000204ed00eb000e0e0c00024d02e4000e0c000203062c35296402054d03d400102c4d01ce000e0e0e0c00024d02c4000e0c000203062c35296402054d03b400102a2a4d07ad000e0e0c00036503512c4d01a0000e0c00024d0298000e0c000203062c35296402054d038800102d4d0182000e0e0e0c00024d0278000e0c000203062d36296402054d05680010292e4d0661000e0e0c00032b2a6929270402522b4d014f000c00024d0248000e0c000203062b35296402054d033800102c4d0132000e0e0e0c00024d022800020222000e0c000203062c36296402054d051400102e2a4d060d000e0e0c00032b2a69292704430e|@5179,I229,I105,I218,@1773,I113,@1773,@5176,I234| 5179:S30|50415253455f5452454528292e67656e636f6465283729706c7573283229 5180:S35|616464436f6e7374723a206261646c792d666f726d656420616e642d6f722074726565 5181:C11,296|00832d352e362f382e4d001b010c00022b353d4d0111010e0e0c00030340323b69565829383b4d02fe003b2c6b568a29220f2c220f56d50e0e0c00050403002930452b46220e475029293b694d03d8002a69220d2a3b220e6b29270b02c62b354d03c4004d01c0000e0c000303b12b36294d04b3000c00024d05ac000e0c0002039529352a362a3729344d069a000e0e0e0c000364033a220c3b692b352a2a4d0785000e0e0c00032d3656ba2922122c22121211000100ffff0c0005040300292e452b4622114750292932692927090236220c3b69568829383b4d024a003b2c6b56ba2922122c22121211000100ffff0e0c00050403002930452b4622114750292934692927094d031d002a69312a3b326b29270502054d080d00106402054d0905001027041f04|@5183,@1827,I229,@5174,-1,I105,I218,@5184,@5176,@5182,@5182| 5182:O3|@7129,@237,@5187 5183:S48|50415253455f5452454528292e67656e636f64652837296275696c64416f742834296164644578636f6e737472283429 5184:O1|@5185 5185:C8,208|00812c37294d00c7000c00020342294d01bd000e0e0c00022d37294d00b1000e0e0c00020326294d01a5000e0e0c00022b4d029b000c00022a4d0293000c00022a2a4d038a00330e7e0a00033b65027729353c4d0479000e0e0c0003036829362a372a3b4d0568000e0c00032a3b4d055e000e0e0e0c0003303729353c4d044f000c0003033b29362a372a3b4d0540000e0c00032a3b4d0536000e0e0e0c00032f2b4d062a000e0e0e0c0003030e2e2a4d061c00220e0e0e7e0e00033b270402013b270502013b64430e0e0e0e0e0e0e|@5186,@2425,@2415,@4861,I251,I229,I253,I113| 5186:S33|56414c55455f4f505328292e697354686553616d65457863657074696f6e283229 5187:S37|6164644578636f6e7374723a206261646c792d666f726d656420616e642d6f722074726565 5188:O1|@5189 5189:C8,120|00812b352c362d372e382b354d0068004d0164000e0c00030a020009002f001e002b023b2b363b2a0e4f024b006000024d0044002a696602262b363b2a4f0337006000023b2a696602152b363b2a0e0e0e4f0423006000024d051c002a6966313b692b2a4d0610000e0c00032f2c2f2c6b292708430e0e0e|@5191,-2,I107,@5192,@5193,@5190,-1,@5176| 5190:C4,72|00802b3b4d0040000e0c000303033b02312b352c362a352b362c375658292c4d0125000e0e0c0003040300292f452b462d475029304f020f009100022a2a6929270b420e0e0e0e0e|@445,I229,@5188,@5190| 5191:S47|50415253455f5452454528292e67656e636f64652837296275696c64416f7428342961646444656661756c74283229 5192:C4,48|00802b3b4d0028000e0c000303033b021d2b352c365628292c4d0113000c00032b4f020b004100022a2a69292706420e|@445,I229,@5188,@5192| 5193:C4,72|00802b3b4d0040000e0c000303033b02312b352c362a352b362c375658292c4d0125000e0e0c0003040300292f452b462d475029304f020f009100022a2a6929270b420e0e0e0e0e|@445,I229,@5188,@5193| 5194:C4,64|00802b3b4d0038000e0c000303033b022d2b352c36562829383b4d0122003b2c6b5659566a292b2d3256b50e0e0c00052f4f020b008100022a2a6929270a420e|@445,I229,@5174,@5194| 5195:C7,104|00812b3b4d0060000e0c000303162c3b4d0054000e0c000303033b02054d0147001002422b352c362e4d023b000c00024d0334000e0c000203262e352f365649565a292b2e3156a50e0c00052c2f0e0e0e4f0413008100032a2a6929270702054d0504001065430e|@5197,I229,@5196,I105,I218,@5195,@5196| 5196:O3|@7129,@237,@5198 5197:S43|50415253455f5452454528292e67656e636f64652837296275696c64416f742834296d657267656c283229 5198:S6|6d657267656c 5199:O3|@7129,@237,@5200 5200:S31|7061747465726e206973206e6f742061207475706c6520696e20612d6f2d74 5201:S31|43616e27742066696e642061206669786564207265636f726420747970652e 5202:O1|@5203 5203:C14,176|00802b4d00a9000e0e0c000203392b4d019d000e0e0c000229363b2a293b4d028e000e0e0e0c000303032a021629362b3c4d037b000c0003292b25042504511e233b65270402662b4d0464000e0c000203222b4d0559000e0e0c000229352a364d064c000e0c00034d0744002d0e0e0e7d0400022b4d0837000c0002032a2b4d092d000e0e0c00022937294d0a21000e0e0c00024d0b18000e0c00024d0710002e0e0e0e7d0500024d0c040010420e0e|@5205,@1720,@1722,I229,I106,@1145,@1147,@1714,@5202,@1744,@1746,@1748,@2091,@5204| 5204:O3|@7129,@237,@5206 5205:S26|545950455f5452454528292e7265636f72645769647468283129 5206:S26|656e7472794e756d626572202d206e6f742061207265636f7264 5207:O1|@5208 5208:C5,48|00802b3b4d0028000e0c000303033b021b2b3c4d0119000e0e0c00034d0210000e0c00024d0308002a692965420e0e0e|@5209,I229,I107,@5207,@1305| 5209:S43|50415253455f5452454528292e67656e636f64652837296275696c64416f742834296275696c646c283129 5210:O1|@5211 5211:C17,208|00812b4d00c9000e0e0c0002035a2b4d01bd000e0e0c000229363b2a294d02af000c00024d03a8000e0c00020331293529352b362a344d0496000e0e0e0c000303032d02172d3c4d0585000e0e0c0003292b2506250626041e3c3b646602054d066d0010270402652b4d0763000c000203222b4d0859000e0e0c000229352a364d094c000e0c00032e2a4d0a42002f0e7e0600032b4d0b37000c0002032a2b4d0c2d000e0e0c00022937294d0d21000e0e0c00024d0e18000e0c00022f2a4d0a0e00300e7e0700034d0f040010430e0e|@5212,@1720,@1722,I105,I218,I24,I106,@621,@1145,@1147,@1714,@5210,@1744,@1746,@1748,@2091,@5204| 5212:S26|545950455f5452454528292e656e7472794e756d626572283229 5213:O1|@5214 5214:C7,88|00822b4d0051000e0e0c00024d0148000e0c000203362b352c362e3b4d0238000e0c000303072f2a692964021c2e3c4d0325000e0e0c0003302a2c4d0419000e0e0c00042c2a6929666502054d05080010440e0e0e0e0e0e|@5216,I105,I218,I229,I107,@5213,@5215| 5215:O3|@7129,@237,@5217 5216:S43|50415253455f5452454528292e67656e636f64652837296275696c64416f742834296d657267656e283329 5217:S6|6d657267656e 5218:C1,24|0080560a56195628292b302e5677327b060600050e0e0e0e|@5166| 5219:C7,88|00812b3b4d0050000e0c0003031e4d0146005618562956376b5617292f2c4d0236004d033200317b060600052b352c364d0424002c2b565856695677306807563729312c4d0510004d030c00330e0e7b060800050e0e0e0e|@5221,I229,@5222,@2827,@5167,@5220,@2780| 5220:C10,264|00802b3629354d00fe004d01fa000e0e0e0c0003038d2936294d02eb000c00024d03e4000e0c000203712936294d02d7000c00024d03d0000e0c000203552936293b4d01c2000e0e0e0c0003033d2a352c3531353238568c569b56aa292b302e56f90e0e0e0c000556c8312a56f70e0e0e0c0003293b692c2a694d008a002a69332a3b220c6b29270e02054d047900106402054d057100106402054d0669001064026229353d4d015e000e0e0e0c0003034e2c352d382e383b4d074b003b2c6b30383b4d0741003b2c6b567c568b569a292b302e56e90e0e0e0c000556b82e2a56e70e0e0e0c0003293b692c2a694d0016002a69220e2a3b22106b29271002054d0804001064420e|@5225,-2,I229,I105,I218,@5224,@5224,@5224,@5174,@5224| 5221:S48|50415253455f5452454528292e67656e636f64652837296275696c64416f7428342970726f636573734c697374283229 5222:C2,24|008056095618292b2f4d000b005667310e0e0e7b06050005|@5223,@1305| 5223:S51|50415253455f5452454528292e67656e636f64652837296275696c64416f7428342970726f636573734c697374283229283129 5224:O3|@7129,@237,@5226 5225:S60|50415253455f5452454528292e67656e636f64652837296275696c64416f7428342970726f636573734c6973742832296d6b436f6e73506174283129 5226:S34|6d6b436f6e735061743a206261646c792d666f726d65642070617273652d74726565 5227:C4,96|00832d352e362f382a353c4d0051000e0e0c00030a01002a000b004d014100100235313b690403002931452b4632475029293b693c2a69302a3b316b29270602162a363b2a4f0217005000023c2a692f2a3b306b292705661f040e0e0e0e0e0e|@5229,I107,@5230,@5228| 5228:C7,176|00802b3b4d00a8000e0c0003031c56075618562a293b69040300292e452b462d475029293b69270602802b352c3656282b372a4d0179000e0e0c00024d0270000e0c000203292a352a4d0163000c00024d025c000e0c000203112a352a2a4d034e000e0e0e0c00036402013b6402013b65032956275638564a293b692e362a2a4d042c000e0c00030403002930452b462f475029293269292709020d294f050f002100022b2a69296565420e0e0e0e0e|@5232,I229,I105,I218,@5021,@5176,@5228| 5229:S47|50415253455f5452454528292e67656e636f64652837296275696c64416f7428342961646453636f6e737472283429 5230:O3|@7129,@237,@5231 5231:S36|61646453636f6e7374723a206261646c792d666f726d656420616e642d6f722074726565 5232:S58|50415253455f5452454528292e67656e636f64652837296275696c64416f7428342961646453636f6e737472283429616464436c697374283129 5233:C3,24|00803b4d0011003c2e4f010b0030000464420e0e0e0e0e0e|@5235,@5236,@5234| 5234:C6,88|00822b3b4d0050000e0c000303032d02452b3529354d013f004d003b000c0003032e293629362a372f36313c4d0228000e0c00032c33220c2e57a70e0e0c0005292b2d0e0e4f030f00910004270602054d0404001064440e|@5238,I229,-11,I106,@5234,@5237| 5235:S35|50415253455f5452454528292e67656e636f64652837296275696c6454726565283129 5236:O4|0,@5174,0,0 5237:O3|@7129,@237,@5239 5238:S43|50415253455f5452454528292e67656e636f64652837296275696c64547265652831296d616b6574283329 5239:S30|6d616b6574202d206261646c7920666f726d656420706172736574726565 5240:C8,144|00835609293b4d0086000e0e0e0c000356292a3c4d0178000e0c00032a3b2b4d026d000e0e0c0004504d0363002c333b6b4d045b002d3c3b3b68053b3b3469220d35292b2a3b4d0546000e0e0e0c000303032902262a352b360402002b2d2b0e0e1606002a0012000000000450292b2a2506250626041e323b27046529352a36302b69220f2b452a463147270d1f040e|@5242,I253,I106,I255,-4,-5,I229,@5241| 5241:C9,168|00822d4d00a1000e0e0c00022937294d0195000e0e0c00020380294d0289000e0e0c000229352a36313532361208000100f9ff040300220d2c2c2c57d80c00055029352a362b3756c3323b2b4d0358000e0c00045057d7293b4d044b000c0003333b2b4d0341000e0e0c0004502e3b4d0535000e0e0c000303033202103b330e0e1606002200120000000002642e2e6922132b452a46270f02054d070a001065440e0e0e0e0e0e0e|@5244,@2673,@5245,@5248,I255,I253,I229,@5250,@5243| 5242:S37|50415253455f5452454528292e67656e636f64652837296465636c61726556617273283429 5243:O3|@7129,@237,@5251 5244:S47|50415253455f5452454528292e67656e636f64652837296465636c6172655661727328342973657441646472283329 5245:O1|@5246 5246:C2,16|00803c2c354d0007002d0e0e7e030003|@5247,I229| 5247:S5|4c6f63616c 5248:O1|@5249 5249:C1,16|00802b362c372a2a6965420e0e0e0e0e|@5247| 5250:C3,48|00802b3b4d0028000e0c000303091201000100f5ff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1555,I229,@5250| 5251:S7|73657441646472 5252:O2|0,@5253 5253:O2|@4383,0 5254:O2|0,@5255 5255:O2|@5256,0 5256:O2|-10,@5257 5257:O2|-3,@621 5258:O2|0,@5259 5259:O2|@5260,0 5260:O2|-10,@5261 5261:O2|-3,@5262 5262:O3|100,@3096,0 5263:C13,344|00862b362c372d380403002f31220e2c56890e0e0e0c00055029352a362b372d220c4d0032010e0e0e0c00033b3b220e3b4d0123010c000303033c020b220e2c4d0114010e0c00030310220e2211306a22100e0e0e0c000202cc3b33354d02f7004d03f3000c00030a030017007c006c00ac002c2212316a22110e0e0e0c000202a33336294d04cf000c00024d05c8000e0c000203352936293b4d06ba000e0e0e0c000303192a35322216221622162216220c2f22150e0e0e0c00086402092a0e4f079300d00002640209290e4f078700c0000264024e3336332a0e0e4f087700d0000364023e3336293b2a3b4d0667000c000303032902132a352b362a2c692a2a2505250526031e1d3b66654f094700c0000264020e33363b2a0e0e4f0a3700d0000265642936293b4d062a000e0e0e0c000303032f020c3b300e0e4f0b1700d00002642b35040200292b452c465029270f1f070e0e0e|@5265,@5266,@5269,-2,I107,I105,I218,I229,@5272,@5290,@5305,@5309,@5264| 5264:C3,48|00802b3b4d0028000e0c000303091201000100f3ff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1555,I229,@5264| 5265:S34|50415253455f5452454528292e67656e636f6465283729636f646550617474283729 5266:O1|@5267 5267:C9,392|00812c3b4d0080010e0c000303033c020b3b2c4d0071010e0e0c000303033b06cd2c4d0162010e0e0e0c00024d0258010e0c000203062c35296402054d034801102c4d0142010e0e0e0c00024d0238010e0c000203062c35296402054d032801102a2a4d0421010e0e0c00036503712c4d0114010e0c00024d020c010e0c000203062c35296402054d03fc00102d4d01f6000e0e0e0c00024d02ec000e0c000203062d36296402054d05dc00102d4d01d6000e0e0e0c00024d02cc000e0c000203062d36296402054d05bc00102a2a4d06b5000e0e0c00032c2a6929270502a02c4d01a3000c00024d029c00020290000e0c000203062c35296402054d038800102c4d0182000e0e0e0c00024d0278000e0c000203062c35296402054d036800102a2a4d0761000e0e0c00036503292c4d0154000e0c00024d024c000e0c000203062c36296402054d053c0010292d4d0635002e7e0500032b4d012b000c00024d0224000e0c000203062b36296402054d051400102d2a4d060d002e7e050003430e0e0e0e0e0e0e|@5268,I229,I105,I218,@1773,I113,@1773,@5266,I234| 5268:S35|50415253455f5452454528292e67656e636f6465283729696e74657273656374283229 5269:O1|@5270 5270:C8,200|00812c3b4d00c0000e0c0003030e3b2c4d00b4002d0e0e0e7e0400032b3b4d00a6000e0e0e0c000303033b02982c4d0196000e0e0e0c00024d028c000e0c000203062c35296402054d037c00102c4d0176000e0e0e0c00024d026c000e0c000203062c35296402054d035c00102a2a4d0455000e0e0c00036503492c4d0148000e0c00024d0240000e0c000203062c36296402054d053000102c4d012a000e0e0e0c00024d0220000e0c000203062c36296402054d051000102a2a4d0609002f7e0600033b430e0e|@5271,I229,I105,I218,@1773,I113,@1773,@5269| 5271:S28|50415253455f5452454528292e67656e636f64652837296571283229 5272:C6,112|00803b2c293b4d0066000e0e0e0c000303032a021629362b3c4d0153000c0003292b25042504511e233b65654d024000562a5635564c1206000100f8ff312f68072a3c4d0329000e0e0c00033b3b0e0e0e4f041b004000025659566b56702b2b2b2f33220e0e0e7b060b00050e0e0e0e|@5274,I229,I106,@5275,I107,@5273| 5273:C4,48|00802b56124d0027000c000303033b02182b3c4d0119000e0e0c0003294f020f001100022d2a692966420e0e0e0e0e0e|@5289,I233,I106,@5273| 5274:S45|50415253455f5452454528292e67656e636f6465283729636f64655061747428372970617474436f64652d2f32 5275:C10,240|00833b3b2d3b4d00e6000e0e0e0c000303033c020b303b4d00d5000e0e0c0003030e3030306a56372e0e0e0e7d0800023b3b3b0e0e4f01b700400004563b292b2a3b4d02aa000e0e0e0c000303054d039e00102a352b362b3b4d0293000c000303032a02172b3c4d0485000e0e0c00032a2a2505250526031e383b642704565a293528054d0268000e0c0003030c2c2a4d055c000e0c0003022129354d0650004d024c000e0c0003030c2c2a4d0540000e0c0003020528062a2e6a2d3b69332a4d072c000e0c00034d0824002a346a56a9220e2a22112d221432220c1213000100020022140e0e7b091100080e0e0e0e|@5277,@5269,@5278,I229,@61,I107,@3087,-3,@5285,@5276| 5276:C1,24|00802b352c362d37563756482f0e0e7b060300050e0e0e0e|@5288| 5277:S54|50415253455f5452454528292e67656e636f6465283729636f64655061747428372970617474436f64652d6465737061746368283429 5278:C10,208|0082570c2c2a4d00c6000e0e0e0c00036403032c02b356072c2a4d01b2000e0e0e0c0003640389570b292d2a3b4d029f000c000303054d039600102a352b362b3b4d028b000c000303032a02172b3c4d047d000e0e0c00032a2a2505250526031e353b6427050e0e0e4f056300010002292f4d065a000e0e0e0c000303192c3c4d074c000e0c00032a2e2b0e0e4f083f004100046402162c3c4d0733000c00032f2f2b0e0e4f082700410004646402192b3c4d071a000e0e0e0c00032e2e2b0e0e4f080b0031000464440e0e0e0e0e0e|@5280,I113,@5281,I229,@61,I107,@5279,I233,I106,@5278| 5279:C13,352|00802b362c382a354d0054014d0150010e0c000303442a36293b2a3b4d0140010e0c0003030329022e2a352b362a0e0e0e4f022b01710002292d4d0322010e0e0e0c000303032902012c2b2a2506250626041e383b27046606db562a2a2a4d04fe000e0e0e0c0003293b4d05f2000e0e0e0c000303c82c354d06e4004d07e0000e0c00030a02004100090079003b02ac2c363b2a293b4d01c6000e0e0e0c000303032a021629362b3c4d08b3000c0003292b25042504511e233b6565293c4d089e00330e7e0900032c363b2a293b4d018e000e0e0e0c000303032a021629362b3c4d087b000c0003292b25042504511e233b6565293c4d086600330e7e0900032c363b2a293b4d0156000e0e0e0c000303032a021629362b3c4d0843000c0003292b25042504511e233b6565293c4d082e0033020227000e7e090003021f294d091d000e0e0c00024d0a14000e0c000203062935296402054d0b040010656542|@5284,-2,I229,@5279,I233,@5266,@5269,-1,I107,I106,I105,I218,@1773| 5280:S68|50415253455f5452454528292e67656e636f6465283729636f64655061747428372970617474436f64652d646573706174636828342966696e6444656570657374283329 5281:O1|@5282 5282:C9,160|00812b3b4d0098000e0c000303033b028b2b4d018a000e0e0e0c00024d0280000e0c000203062b35296402054d037000102d2a4d0469000e0e0c00036403033c025a2b4d0159000e0e0c00024d0250000e0c000203062b35296402054d034000102d2a4d0539000e0e0c00036403033b022a2b4d0129000e0e0c00024d0220000e0c000203062b36296402054d061000102d2a4d0709002e7e050003430e0e0e|@5283,I229,I105,I218,@1773,I113,I234,@1773,@5281| 5283:S32|50415253455f5452454528292e67656e636f6465283729696e73696465283229 5284:S66|50415253455f5452454528292e67656e636f6465283729636f64655061747428372970617474436f64652d6465737061746368283429706174744465707468283129 5285:O1|@5286 5286:C9,392|00812c3b4d0080010e0c000303033b06cb2b3b4d0071010e0e0c000303032c06dc2c4d0162010e0e0e0c00024d0258010e0c000203062c35296402054d034801102c4d0142010e0e0e0c00024d0238010e0c000203062c35296402054d032801102a2a4d0421010e0e0c00036503492c4d0114010e0c00024d020c010e0c000203062c36296402054d05fc00102c4d01f6000e0e0e0c00024d02ec000e0c000203062c36296402054d05dc00102a2a4d06d5002f7e0600032c4d01cb000c00024d02c4000e0c000203062c35296402054d03b400102c4d01ae000202a6000e0e0e0c00024d02a0000e0c000203062c35296402054d039000102a2a020285004d0785000e0e0c00036503512c4d0178000e0c00024d0270000e0c000203062c35296402054d036000102d4d015a000e0e0e0c00024d0250000e0c000203062d36296402054d05400010292e4d0639000e0e0c00032b2a6929270402282b4d0127000c00024d0220000e0c000203062b36296402054d051000102d2a4d0609002e7e050003430e0e0e|@5287,I229,I105,I218,@1773,I113,@1773,@5285,I234| 5287:S30|50415253455f5452454528292e67656e636f646528372964696666283229 5288:S57|50415253455f5452454528292e67656e636f6465283729636f64655061747428372970617474436f64652d6465737061746368283129283129 5289:S30|50415253455f5452454528292e67656e636f646528372966726f6d283229 5290:C18,608|00812b3b4d0058020e0c0003031a1201000100f7ff561b56202b2b2b6a66561a2c0e0e0e7d0400022b352c362a3556392a2a4d012a020e0e0e0c0003293b4d021e020e0e0e0c0003030c312d0e4f030f0261000306dd313c4d0004020e0c000303562d362e371208000100f8ff5787293b4d04eb010c00032c2c2b4d05e1010e0e0c0004120c000100f7ff302a4d06cf010c000356da56eb56fc1211000100faff292b2d2f313422111219000100ffff221a0e7b091500082d371207000100f8ff5777293b4d0497010c00032c2c2b4d078d010e0e0c000432363337120d000100f8ff57d7293b4d0475010e0e0c00032c2c2b4d0569010e0e0c00041211000100f7ff220c2a4d0656010e0e0e0c00031213000100040012140001000500121500010006001216000100faff292b2d2f3102022201342211121e000100ffff0e0e0c0008221a3c4d0815010e0e0c00032922170e0e16030006011b0001000003121a00010006000356220f3b693f2a4d09ed003c6b2b36293b4d00e3000c000303064d0ada0002192936293b4d00d0000e0c000303062a352964020428092b69643d2c2b4d0bb8006b30362a2a69040200294d0caa00452b465029270802962b352a352a2a4d0d97000c00036503102b35293b4d0e89000e0e0c00036402013b03032902702b36293b4d0073000c000303064d0f6a0002192936293b4d0060000e0c000303062a352964020428092b69642b36293b4d0047000c000303064d103e0002192936293b4d0034000e0c000303062a352964020428092b69643d22142d2c6b293b69040200294d0c1200452b465029270727142705430e0e0e0e0e0e|@5292,I229,@5266,@5269,@5290,I253,@5293,@5176,@5291,I107,@2798,@4264,@440,-1,I113,I231,@4264,@4264| 5291:O2|@5301,@4793 5292:S47|50415253455f5452454528292e67656e636f6465283729636f64655061747428372967656e436f6e73747273283229 5293:O2|@5294,@4793 5294:C10,224|00822d36294d00d7000c00024d01d0000e0c0002036f2935293b4d02c2000e0e0e0c000303582f2e4d03b4004d04b0003b56770e0e0c0006293528054d02a0000e0c0003030c3d2a4d0594000e0c0003022129354d0688004d0284000e0c0003030c3d2a4d0578000e0c0003020528062a3d6a303b693f2a2c3b6b6602044d075e00640257293b4d0255000e0e0c000303452d3528054d0246000e0e0e0c0003030e3d2e4d0538002e0e0e0e7e0600032d354d062a004d0226000e0e0e0c0003030e3d2e4d0518002e0e0e0e7e06000328062e3d6a02054d0805001064440e0e|@5296,I105,I218,I229,@214,@7257,@3087,-3,@510,@5295| 5295:O3|@7129,@237,@5300 5296:S26|56414c55455f4f505328292e6d616b65496e7665727365283329 5297:O1|@5298 5298:C1,8|00803b420e0e0e0e|@5299| 5299:S18|4c45585f28292e6e756c6c4c65782d283129 5300:S11|6d616b65496e7665727365 5301:C10,232|00822d36294d00df000c00024d01d8000e0c000203582e2d4d02cc004d03c8003b56670e0e0c0006293528054d04b8000e0c0003030c3b2a4d05ac000e0c0003022129354d06a0004d049c000e0c0003030c3b2a4d0590000e0c0003020528062a3b6a2f3b693f2a2c3c6b660271293b4d0474000e0c000303602d3528054d0466000e0e0e0c0003030c3b2e4d0558000e0c000302212d354d064c004d0448000e0c0003030c3b2e4d053c000e0c0003020528062e3b6a2f2e4d022b004d0327003b56770e0c0006293b692b2a693f2a4d0714003c6b270402054d080a001064440e0e0e0e0e0e0e|@5303,I105,I218,@214,@7257,I229,@3087,-3,@5067,@5302| 5302:O3|@7129,@237,@5304 5303:S24|56414c55455f4f505328292e6d616b654775617264283329 5304:S9|6d616b654775617264 5305:C18,488|00802b3b4d00e0010e0c000303161201000100f7ff561b56202b2b2b6a66561a2c8000022b352c362a3556392a2a4d01b6010e0e0e0c0003293b4d02aa010e0e0e0c0003030c2c0e0e4f039b0151000206da2c0e0e4f038f015100024d0488012a5788569c6b2f371209000100f8ff5797293b4d0571010e0e0c00032c2c2b4d0665010e0e0c00043436220c37120f000100f8ff57f7293b4d054c010e0c00032c2c2b4d0741010e0e0c000412130001000400121400010006001215000100faff292b22102e221431220e121d000100ffff0e0e0e0c000812170001000600035a333b693f2a4d08fe003c6b221236293b4d00f3000c000303064d09ea0002192936293b4d00e0000e0c000303062a352964020428092b69643d2c2b4d0ac8006b2e362a2a69040200290202b7004d0bb600452b465029270802a829352211352a2a4d0ca2000e0e0e0c00036503102935293b4d0d91000e0e0c00036402013b03042210027d2936293b4d007a000e0e0e0c000303064d0e6e0002192936293b4d0064000e0c000303062a352964020428092b69643d220d2b4d0f4b006b221336293b4d0041000e0e0c000303064d10360002192936293b4d002c000e0c000303062a352964020428092b69643b2c2b6a293b69040200294d0b0c00452b46502927082711270542|@5307,I229,@5266,@5269,@5305,@5306,I253,@5291,@5293,@2798,@4264,@440,-1,I113,I231,@4264,@4383,@4264| 5306:C1,16|008056090304560702025608420e0e0e|@5308| 5307:S50|50415253455f5452454528292e67656e636f6465283729636f64655061747428372967656e45786e436f6e73747273283129 5308:S64|50415253455f5452454528292e67656e636f6465283729636f64655061747428372967656e45786e436f6e73747273283129636f646544656661756c74283129 5309:C17,536|00802b3b4d0010020e0c000303161201000100f7ff561b56202b2b2b6a66561a2c8000022b352c362a3656392a2a4d01e6010e0e0e0c0003293b4d02da010e0e0e0c0003030c2c0e0e4f03cb0151000206dc2d37293b4d00be010e0e0e0c000303064d04b201020929354d05aa012a69642f351209000100f8ff293b692c2a69402a692a293b4d008e010e0e0e0c000303033c021f293529354d057b014d0077010c0003030c2a36292503511e283b6402013b64640312294d065c010e0c00024d0554012a6964020129293b693f2a313c6b1210000100f7ff342a4d0739010e0e0c0003121200010005001213000100faff2b2b2b6a2704121100010004000e0e0c0002220e0e0e0e1603000a0112000100000212120001000600035a2b3b693f2a4d08f2003c6b2b36293b0202de004d00e4000e0c000303064d09da0002192936293b4d00d0000e0c000303062a352964020428092b69643d2c2b4d0ab8006b2f362a2a69040200294d0baa00452b465029270802952a352a352a2a4d0c97000c00036503102a35293b4d0d89000e0e0c00036402013b030329026f2a36293b4d0073000c000303064d0e6a0002192936293b4d0060000e0c000303062a352964020428092b69642b36293b4d0047000c000303064d0f3e0002192936293b4d0034000e0c000303062a352964020428092b69643d302d2c6b293b69040200294d0b1300452b4650292707270c2705420e0e0e0e0e0e0e|@5310,I229,@5266,@5269,@5309,@510,-3,@3098,@5176,@2798,@4264,@440,-1,I113,I231,@4264,@4264| 5310:S57|50415253455f5452454528292e67656e636f6465283729636f64655061747428372970617474436f64652d666f6c64436f6e73747273283129 5311:C25,664|00892b3b4d0090020e0c000303033b06d62b3529354d017f024d007b020c000307d5293629352a362f36314d0269020e0e0c00024d0360020e0c000207cc313532363b2b293b4d004e020e0e0e0c000303032a021629362b3c4d043b020c0003292b25042504511e233b6565220d3c4d0525020e0e0c0003293b4d061a020e0e0e0c000303033c0218220f3b4d0708020e0c00032a2a4d08fe010e0e0e0c00036403054d09f10110293c4d04ea010e0e0e0c000322102a4d07dd010e0e0c00032965293b4d00d0010e0c00030345220f4d0ac4014d0bc0010e0c00034d0cb8012a4d0db3010202a6010c0003294d0ea7014d0da301020290010c000322173b221a220c2d4d0f9001020274010e0c00066602013b56b756c7293b4d077a010e0e0e0c0003293c4d046e010e0e0e0c00032c3b2b4d1061010e0e0c0004503b313b221a6a342a2a3b4d004d010e0e0c000303032902262a352b360403002b2d2b0e0e16110032011a000000000450292b2a2506250626041e313b27046529362a3722112a221d22136b221e0e0e0e0c0002293b69293b4d00ff000c000303032c02103b2d0e0e161200ee001900000000026428092a6912190001000100121a0001000100293b4d07cf000c0003293c4d05c6000e0e0e0c00032c3b2b4d10b9000e0e0c00045022123c4d00ac000e0c000303064d13a20002044d149c00121e0001000100293b4d078f000c00032226282f4d0d84000e0c000322254d0a7a004d0b76000e0e0e0c00032a2a4d0d6a000e0e0e0c0003332d221c2c6b27052a0c000264222122154d044f000c00034d1548002a2c3b6b22243c4d043d000e0e0c0003222b222b222b222b222b222b2f222b22212224222a0c000b2b2a6929271d02054d16140010270402054d170b0010641f0a0e0e0e0e0e0e0e|@5313,I229,-11,I105,I218,I106,I107,I234,I253,I231,@61,-1,@364,@5314,@353,@5315,@2657,I255,@5316,@5319,@5320,@4688,-4,@5312,@5312| 5312:O3|@7129,@237,@5323 5313:S33|50415253455f5452454528292e67656e636f646528372963674578707328313029 5314:S8|5061747465726e20 5315:S14|20697320726564756e64616e742e 5316:C12,200|00822d4d00c1000e0e0c00022937294d01b5000e0e0c000203a6294d02a9000e0e0c000229352a363135323633372b4d0395000e0e0c00024d048c002a3c3b3b6805040300220f2d2c2c57f80e0c00055029352a362b37314d036c000e0c0002343b2b4d0561000e0e0c00045057f7293b4d0653000c0003220c3b2b4d0548000e0c000450343c4d073d000e0e0c00032f3b4d0832000e0e0e0c000303033402103b220c0e1609001e00150000000002642f2f6922162c452b462a47271202054d0a04001065440e|@5318,@2673,@5245,@5248,I111,-5,I255,I253,I107,I229,@5317,@5243| 5317:C3,48|00802b3b4d0028000e0c000303091201000100f3ff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1555,I229,@5317| 5318:S43|50415253455f5452454528292e67656e636f64652837296367457870732831302973657441646472283329 5319:C3,48|00802b3b4d0028000e0c000303091201000100e9ff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1555,I229,@5319| 5320:O1|@5321 5321:C2,32|00802b352c362d372e382c2a2d3b2e3b3b3b68084d0008002a692705420e0e0e|@5322,-7| 5322:S23|434f44455452454528292e6d6b496e6c70726f63283129 5323:S6|636745787073 5324:C24,640|00873b32293b4d0076020e0e0e0c000303032a021629362b3c4d0163020c0003292b25042504511e233b656532562d0e0e0c00024d024802342a0e0e0e0c0002220c4d033a020e0e0e0c00024d0430020e0c00020324220c3529354d0521024d001d020e0e0c0003030829362936296502054d060a02106402054d06020210565c566b293b4d07f7010c000304020022102d2c2c4d08e8010e0c00055029352a3656bb293b4d07d7010c0003642a0e0e0e0c000256ca293b4d07c4010e0c000356ea2a220f4d01b7010c00032a3b2b4d09ad010e0e0c000450220f3c4d01a0010e0c00032928403b4d0a94010e0c0004293b22134d0988010e0c0004503c28403c4d0a7b010c0004221503084d0b70013169020d4d0c6801121500010003002b6a3b3c0e0e160d0056011700000000024d0e4c01221c221b2221220c2217221b3468084d0f39012a69221c3b2f2c2f2211221c122000010002000e0e0e0c00082f3b4d071a010e0e0e0c00034d0410010e0c00020314221f3b222422174d10ff004d11fb000c000602013b22193c4d00ee000e0e0e0c000303522a36293b4d00de000e0e0e0c000303042211020f3b2212161200ca001e000000000264293b4d00bd000e0e0c000303064d13b20002192936293b4d00a8000e0c000303062a352964020428092b696465028f22232221221f22212223220d3c2213221e222b122500010001000e0e0e0c000b2b36293b4d006c000e0c000303032a02103b2b0e0e1614005a001f000000000264293b4d004d000e0e0c000303042213020f3b22141615003a0020000000000264293b4d002d000e0e0c000303064d16220002192936293b4d0018000e0c000303062a352964020428092b69642704271a1f080e|@5326,I229,I106,@5327,I105,I218,-11,@621,I253,@4775,I255,I11,@5334,@5336,@5337,@5338,@5347,@5349,@2657,@5350,@4264,@5351,@5325,@4264| 5325:C3,48|00802b3b4d0028000e0c000303091201000100e2ff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1555,I229,@5325| 5326:S35|50415253455f5452454528292e67656e636f6465283729636f64654d61746368283829 5327:O1|@5328 5328:C6,80|00802b3b4d0048000e0c000303033b02392b352c362a354d0135004d0031000e0e0c000303112a3629373b2a4d0220000e0c00036502054d031500102a4d040f000c00022a2a69292705420e0e0e0e0e|@445,I229,-11,@5330,@5329,@5327| 5329:O3|@7129,@237,@5333 5330:O1|@5331 5331:C8,360|00812b354d0060014d015c010e0c000303232b37293b4d024e010e0e0e0c0003294d0343010c000203032e0205292f6929646506dd2b35280d4d012b010c000303312b36292e2a3b4d011c010e0c0003030329021b2a352b362b2b4d0409010e0e0c00032a2a2505250526031e263b666606db2b3528084d01ed000e0e0c000303322b38292e2a3b4d01dc000e0c0003030329021c2a352b362a362c2a4d04c7000c00032b2a2506250626041e263b27046602ad2b353c4d01ad000e0e0c0003030e2b372d2a4d049e002e0e7e0500032b3528094d0190000e0c000303312b36292e2a3b4d0180000e0c0003030329021b2a352b362b2b4d046d000e0e0c00032a2a2505250526031e263b666602522b02024d00354d054f004d014b000c0003030e2b372d2a4d043e002e0e7e0500032b354d0632004d012e000e0e0e0c0003031e2b362c372e2b4d041c00020211000e0c0003292b4d040e00300e7e0700032c430e0e0e0e0e0e|@5332,-8,I229,I253,@2442,@5330,-3,-9| 5332:S34|50415253455f5452454528292e67656e636f646528372966696e6456617273283229 5333:S36|66696e64416c6c56617273202d206261646c7920666f726d656420706172736574726565 5334:C2,32|008056074d0018002a69293b69040200293b452b4650292704420e0e0e0e0e0e|@5335,-10| 5335:S50|50415253455f5452454528292e67656e636f6465283729636f64654d61746368283829636f646544656661756c742d283129 5336:C2,24|00805608293b3b4d000d000e0e0c000450561764420e0e0e|@5335,I255| 5337:C4,48|00802b56144d0027000c000303033b02182b3c4d0119000e0e0c0003294f020f001100022d2a692966420e0e0e0e0e0e|@5289,I233,I106,@5337| 5338:C19,504|00822d3b4d00f0010e0c0003030a3b2d2c0e0e0e7d0500022d4d01db010c00024d02d4010e0c000203062d35296402054d03c40110293c4d04bd010e0e0c0003562d563d2b3b4d05ae010e0e0e0c000303033c0218293b4d069d010e0e0c00032c2a4d0792010e0e0e0c00036403054d088501102b3c4d097e010e0e0e0c00032a2a4d0672010e0e0e0c00032965293c4d0964010e0c00032d3b4d055a010e0e0e0c000303033c02182c3b4d0649010e0e0c00032e2a4d073e010e0e0e0c00036403054d083101102d3c4d092a010e0e0e0c00032d2a2c4d0a1d010e0e0c000451566c293c4d0b0f010c00036403635669294d0102010e0e0e0c00024d02f8000e0c00020344293529354d0cea004d0de6000e0e0e0c00030328293629352a3656b72b220f2b2d6b6456c80e0e0c0002293b6904020029220e452b465029270602054d0eb200106402054d0faa00106402a1566b292f2a3b4d0d9c000e0c000303054d089200102a352b362b3b4d0d87000c000303032a02172b3c4d0479000e0e0c00032a2a2505250526031e363b6427043b2a293b4d0d5e000e0e0e0c000303032a021629362b3c4d094b000c0003292b25042504511e233b6565292b4d1036000e0e0e0c000356aa29334d0928000e0c00034d1120002a3c3b3b68053f2d2b3b6b293b69040200292210452b465029270a2706440e0e|@5340,@5269,I105,I218,@1773,I107,I234,I253,I231,@61,I106,I255,I113,-11,I229,@5341,@5341,@5339,-5| 5339:O1|@5343 5340:S43|50415253455f5452454528292e67656e636f6465283729636f64654d61746368283829636f64652d283329 5341:O3|@7129,@237,@5342 5342:S34|636f64654d61746368202d206261646c7920666f726d656420706172736574726565 5343:C10,120|00812b3b4d0070000e0c000303033b02612b35294d0160000e0c00022937294d0255000e0e0c00020342294d0349000e0e0c00022935293b4d043c000e0c000331364d0532002b3c3b3b6805343c4d0626000e0e0e0c0003292c4d071a000e0e0e0c00032b2a6929270802054d0808001066430e0e0e0e0e|@5345,I229,@2673,@5245,@5248,I253,-5,I107,@5339,@5344| 5344:O3|@7129,@237,@5346 5345:S37|50415253455f5452454528292e67656e636f64652837296d616b654172676c697374283229 5346:S11|6d616b654172674c697374 5347:C1,16|00802b352c362d3756372e7b05030004|@5348| 5348:S43|50415253455f5452454528292e67656e636f6465283729636f64654d61746368283829636f64652d283129 5349:S27|4d61746368657320617265206e6f7420657868617573746976652e 5350:C3,48|00802b3b4d0028000e0c000303091201000100e4ff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1555,I229,@5350| 5351:C3,48|00802b3b4d0028000e0c000303091201000100e3ff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1555,I229,@5351| 5352:C14,232|00852f3c4d00e0002f564b0e0e0c0005561a5627293b4d01ce000e0e0e0c0003040200322d2c2c4d02bd000e0e0c00055029352a365677293b4d01ab000c0003642a0e0e0e0c00023c28403c4d0398000e0c00044d04900056a92b6a4d05880022123c2c2c4d067f00312210121300010002000e0e0c00082c3b4d016a000e0e0e0c00034d0760000e0c0002031d56c7293b4d0152000e0e0e0c0003293b4d0846000e0e0e0c00036502013b031422113b221022154d092f004d0a2b000c000602013b2a36293b4d0b1d000e0e0c0003030331020c3b320e0e4f0c0b00f0000264270e1f060e0e0e|@5354,@5236,I253,@4775,I11,@5355,@5357,@338,I218,I233,@5360,@2657,I229,@5353| 5353:C3,48|00802b3b4d0028000e0c000303091201000100f1ff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1555,I229,@5353| 5354:S34|50415253455f5452454528292e67656e636f6465283729636f646542696e64283629 5355:C2,24|00805608293b3b4d000d000e0e0c000450561764420e0e0e|@5356,I255| 5356:S48|50415253455f5452454528292e67656e636f6465283729636f646542696e64283629636f646544656661756c74283129 5357:O1|@5358 5358:C3,48|00802b352c362a3b4d0024000e0c0003030a3b2a2e0e0e0e7d050002040200294d010c000802002966420e0e0e0e0e0e|@5359,@5269,@4439| 5359:S42|50415253455f5452454528292e67656e636f6465283729636f646542696e64283629636f64652d283129 5360:S26|5061747465726e206973206e6f7420657868617573746976652e 5361:C3,48|00802b3b4d0028000e0c000303091201000100efff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1555,I229,@5361| 5362:S38|50415253455f5452454528292e67656e636f6465283729636f646553657175656e6365283429 5363:C53,1608|00833b3b3b31354d003d064d0139060e0e0c00030a1c00d4020d063a0045013a0040003a009e043a003a00dc03b205ed053a008601f5013a003a003a00e903fa047802cb0331043a00e5042a02c50381054d02f30506dc313732382a3b4d03e7050c0003294d04df050c00022936293b4d05d4050e0c0003032e5688293b4d03c6050e0e0e0c00032e3b4d03ba050e0e0e0c000356b72f2c2c2c22124d06a80522130e7b07120006294d079b050c00020377294d0891050e0e0c00025698293b4d0384050e0c00032f3b4d037a050e0e0e0c000356c7302c2c2c22134d0968050e0c0006293528054d055c050e0c0003030e3c2a4d0a500522120e0e7e14000329354d0b42054d053e050e0e0e0c0003030e3c2a4d0a300522120e0e7e14000328062a3c6a2706022f5688293b4d03170502020d050c00032e3b4d030a050e0e0e0c000356b72f2c2c2c22124d09f80422130e7b07120006270506ca3136323733382b3b4d03e0040e0c00032a2c2b220c221056c90c0006294d0ccb040c00024d0dc4040e0c0002030b29354d0bb8042a696402044d02af04270506d43136323729333333320e0e0e0c00052b354d0e96044d0592040e0e0e0c0003033a2b372c382a3b4d0380040e0c00032a3b4d0376040e0e0e0c000356a8293b4d0368040e0c000356c72d312c2f2d22144d0f570422157b081300072b343434330c00052a3b693f2a2c3b6b270506d33136323733382b343434330e0e0c00052a220c220c220c3402021a040e0c00052c220d220d220d220c0c00053d2c2c2c6b270606cd3136294d0c00040e0c00024d0df8030e0c0002032d2936293b4d05ea030e0e0e0c000303122a352934343433220c0202cf037b060c00052a4f10cb03500002640209290e4f10bf034000026406d831373238294d0cb0030e0c00024d0da8030e0c000203352936293b4d059a030e0e0e0c000303162a35293629220d220d220d220c220e0e0e7b060e00052b2b0e0e0e4f11730370000364020d2a2a020261034f1163036000036506cb3136323829294d1253030c00020323294d1349030e0e0c000229352a364d143c03020232030e0c00032502501e273b640227294d1526030e0e0e0c00020319294d1619030e0e0c00022935294d0d0d030e0e0c00026502013b6403185657293c220d344d17f6024d18f2020e0e0e0c00066402013b2a4d19e3020202d9020c0002293c4d1ad6020e0e0e0c00036403064d1bc90202142b2b4d1cc1020e0e0c000328064d1bb6022b6a645678293b4d03ab020c0003293c4d1da2020e0e0e0c0003220d28234d1e940202028a020e0c000329314d1e86020e0e0e0c00032e2a2d3b3c3b3b3b68084d1f72022a69270a06dd4d20680206dd31363b2a0e0e0e4f215b025000026506ce31372932323231337b060a00053c28403b4d2240020e0c0004293b32220c568a0e0e0c0005293b4d052a020e0e0e0c000303064d231e0202192936293b4d0514020e0c000303062a352964020428092b69646506d4313732380402002a34342c56ab0c00055029352a362d2a0e0e4f24e301900003293b4d05da010e0e0e0c000303032b020c3b2c0e0e4f25c701a0000264293b4d05bd010e0e0c000303064d26b20102192936293b4d05a8010e0c000303062a352964020428092b6964270706d03136020287012932020481017f010e0e4f247f01500003293b4d0576010e0e0e0c000303064d276a0102192936293b4d0560010e0c000303062a352964020428092b69646506d8313629323232310e0e0c00054d283c012a696506dc313632372a33333332020224010e0e0e0c00052a567d0e0e0c0002293629354d2914014d0510010e0c0003032429362b38293b4d2a00010e0c0003030d3b2b0e4f2bf300b000026402044d2ce9006502044d2de20056974d2edc0034692210304d2fd3002d221222142f3c121400010006000202bb000e0e0c00094d30b800302b2f6b270902aa3136323729333333320c00052b343434330c0005294d3197006928092a693d2d2b4d208b006b4d2986002a3b6a27070279313632372a3333333202026c000e0e0e0c000556674d3266003169220d2d2d2d220f0202530022112f3b1211000100060022120e0e0e7b0a0e0009313632372a333333320c00052a343434330c00053d2b2b4d2029006b2704021e313632372a333333320c00052a343434330c00053d2b4d330a002c6b2704661f040e0e0e|@5365,-13,I107,@440,I253,@2673,I229,@5366,@2739,@2741,@4793,@3087,-3,I105,I218,-8,@4794,@5369,@5372,@1145,@1147,@1714,@1720,@1722,@5201,@2657,@5202,I113,@474,@5210,I106,@353,-7,@510,@5384,I11,@4264,@5386,@5389,@4264,@4264,-10,-1,@5269,@5390,@518,@518,@5391,@4387,-6,@5393,@5364,@473| 5364:C1,24|00802b352c362d372e3856472f0e0e7b060300050e0e0e0e|@5392| 5365:S48|50415253455f5452454528292e67656e636f6465283729636f646553657175656e6365283429636f646567656e283429 5366:O2|@5367,@4794 5367:C9,104|00842f4d0061000e0e0c00024d0158002a354d0252000e0e0e0c00036403112f4d034400303030305667317b080700072e3c4d0432000e0e0e0c0003304d0527002b31313156770e0e0c0007294d0617003c3b3c4d0110003b3b68084d0708002a69661f050e0e0e|@5368,@2338,-1,I229,@510,I106,@474,I48,-7| 5368:S29|56414c55455f4f505328292e636f6465457846756e6374696f6e283529 5369:C5,88|00803b2c0e4f004f00100002402a692a293b4d0142000e0e0e0c000303033c021f293529354d022f004d012b000c0003030c2a36292503511e283b6402013b64640312294d0310000e0c00024d0208002a69640201296642|@5371,@5370,I229,-3,@3098| 5370:C3,56|00802b3b4d0030000e0c000303033b02212b352c365729573857472d2c2c2c57950c00052d4f010f006100022a2a69292708420e0e0e0e0e|@445,I229,@5370| 5371:S50|50415253455f5452454528292e67656e636f6465283729636f646553657175656e6365283429636f646567656e2834292f36 5372:C5,72|00813b2c293b4d003e000e0e0e0c000303032a021629362b3c4d012b000c0003292b25042504511e233b65653b4d0217002e0e0e0e4f030f0030000328092a6966430e0e0e0e0e0e|@5374,I229,I106,@5375,@5373| 5373:C11,264|00812b3b4d0000010e0c0003035f5604292e4d01f2000e0e0e0c0003402a692a293b4d00e2000e0e0e0c000303033c021f293529354d02cf004d00cb000c0003030c2a36292503511e283b6402013b64640312294d03b0000e0c00024d02a8002a6964020129293b69270402962b3529352a362e365749575857672d2c2c2c57b50c0005588e5898293b4d047a000e0e0e0c00030402002d2d2c2c4d0569000e0e0c00055029352a3656e8293b4d0457000c0003220e2a4d064d000e0e0c00034d074400121300030002002e22172d680529220f0e1608002e00150001000003293b4d0022000e0e0e0c000303032f02103b300e0e1609000e00160000000002642713430e0e0e0e|@5381,I229,@4282,-3,@3098,I253,@4775,@5210,@5382,@5373,@5380| 5374:S50|50415253455f5452454528292e67656e636f6465283729636f646553657175656e6365283429636f646567656e2834292f38 5375:O1|@5376 5376:C2,8|00804d000200100e|@5378,@5377| 5377:O3|@7129,@237,@5379 5378:S51|50415253455f5452454528292e67656e636f6465283729636f646553657175656e6365283429636f646567656e283429283129 5379:S17|6d697373696e6720696e207265636f7264 5380:C3,48|00802b3b4d0028000e0c000303091201000100ecff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1555,I229,@5380| 5381:S58|50415253455f5452454528292e67656e636f6465283729636f646553657175656e6365283429636f646567656e2834296465636c697374283229 5382:C3,48|0080560a2c2a4d0026000e0e0e0c00036403155607293b4d0115000e0e0c00036456182c0e8000022b56192c0e800002|@5383,I113,I253| 5383:S67|50415253455f5452454528292e67656e636f6465283729636f646553657175656e6365283429636f646567656e2834296465636c6973742832296c6f6f6b466e283129 5384:C6,136|00802b3b4d0080000e0c000303064d017600026c2b352c365629563856472d2c2c2c56950e0c00052d4f025b00610002293b692b2a69402a692a293b4d0048000e0c000303033c021f293529354d0337004d0033000c0003030c2a36292503511e263b6402013b64640312294d0418000e0c00024d0310002a6964020129270a420e0e0e0e0e0e0e|@5385,I229,@510,@5384,-3,@3098| 5385:S59|50415253455f5452454528292e67656e636f6465283729636f646553657175656e6365283429636f646567656e283429636f6e734c697374283129 5386:C7,160|00812c3b4d0098000e0c000303033b028a2c3529352a362f36564812060002000b004d017a000e0e0e0c000203033c022012060002000a00293b4d0262000e0e0e0c00032d2a4d0356000e0e0e0c00036503033b020e29312d578f0e0e0c0004293b696456682e332b3056b50e0c00052d340e0e0e4f0427009100032a2a69293b4d001b000c000303032d020c3b2e0e0e4f050b00b0000264270a430e0e0e0e|@5388,I229,I218,I253,I113,@5386,@5387| 5387:C3,48|00802b3b4d0028000e0c000303091201000100f5ff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1555,I229,@5387| 5388:S59|50415253455f5452454528292e67656e636f6465283729636f646553657175656e6365283429636f646567656e283429636f64654c697374283229 5389:C3,48|00802b3b4d0028000e0c000303091201000100f6ff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1555,I229,@5389| 5390:C6,72|00802b3b4d0040000e0c000303033b02352b352c362a375738293b4d0129000e0e0c0003575756672d2c4d021a002d2d4d0314000e0c00062f4f040b008100022a2a6929270a420e|@445,I229,I253,@214,@4793,@5390| 5391:C1,24|00802b352c362d372e3856472f0e0e7b060300050e0e0e0e|@5392| 5392:S48|50415253455f5452454528292e67656e636f6465283729636f646553657175656e6365283429636f646567656e283129 5393:O2|@5394,0 5394:O2|-8,0 5395:C30,992|00832b29354d00d7034d01d3030c0003030c2937292502501e153b64021b293528064d01ba030e0e0e0c000303062936296402054d02a803106456175627293b4d039c030e0c0003293c4d0492030e0e0e0c00032c3b2b4d0585030e0e0c0004505659293b4d0377030c00035679293b3c4d056b030c000450304d0662030e0e0e0c00024d0758030e0c00020340303529354d084a034d0146030e0e0e0c0003032429362938293b4d0334030e0c00032b39293b4d0328030e0c00032d37292b2e6a270602054d091603106402054d0a0e031029352a362b372b4d0b02030e0e0e0c0002293c4d0cf6020e0e0e0c00034d07ec020e0c000207cf221028284d0dde020e0e0e0c00032a4d0ed3024d0fcf020c00032a2a4d0dc6020e0e0e0c00032928294d0db9020e0e0c0003121200010006000402002a352b364d10a2022b692c2a452b46502c3c344d1193020c0003221a22182b332e121e00010005000e0e0e0c000629322c2210221230122000010004000e0e0c0007121b0001000100293b4d035b020c00032b220c2b3b22134d0e4d023b3b68084d1245022a69121f000100010012200001000100293b4d032f020c0003293c4d1326020e0e0e0c00032c3b2b4d051902020202010e0e0c00045012230001000300293b221e4d0500020e0c0004501224000100020012250001000100293b4d03e7010c0003040200322d2c2c4d14d9010e0e0c00055029352a36122a0001000100293b4d03c2010e0e0e0c0003293c4d04b6010e0e0e0c0003652a0e0e0e0c00024d15a401221e4d169e010e0e0e0c00033f2a2c3b6b122d0001000100293b4d0386010e0e0e0c0003293c4d047a010e0e0e0c000322324d176e014d0d6a010e0e0e0c00032d2a2c3b3c3b3b3b68084d1256012a692236031722373b4d0349010e0e0c00034d1840012a2c3b6b64020129293b69293b4d012f010c00030304220c020f3b220d1619001e0137000000000264272706cb22123b4d030c010e0c000322133b3b4d0500010e0c00045022114d1af5004d0df1000e0e0c000356fc0402002a352b364d10df002b692c2a452b46502c221722154d1bce00322d121b00010005000e0e0c000629314d1cba00220d220f2f121d00010004000e0e0e0c0007221c3b344d05a0000e0c0004501218000100010012190001000100293b4d0387000c0003293c4d137e000e0e0e0c00032c3b2b4d0571000e0e0c000450121c0001000300293b22174d055c000e0c000450121d0001000100293b4d034a0002023b000e0e0e0c0003293c4d043a000e0e0e0c00033122112b3b3c4d0e2a003b3b68084d1222002a692225030b4d18180022142b3b6b020129293b692715270d1f040e0e0e0e0e0e0e|@5397,-3,I229,@5398,I253,I106,I255,I105,I218,-11,@5400,@5400,@5402,I113,@353,-1,@364,@214,@5409,-7,I107,@4775,@474,@5414,@5069,-4,@5396,@5069,@474,@474| 5396:C3,48|00802b3b4d0028000e0c000303091201000100cbff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1555,I229,@5396| 5397:S49|50415253455f5452454528292e67656e636f6465283729636f646553657175656e6365283429636f646550726f63283429 5398:O3|@7129,@237,@5399 5399:S42|676574466e426f64793a206e6f74206120636f6e73747261696e656420666e2d65787072657373696f6e 5400:O3|@7129,@237,@5401 5401:S41|636f646550726f633a20626f6479206f6620666e206973206e6f74206120636c61757365206c697374 5402:O1|@5403 5403:C18,488|00802b354d00e0014d01dc010e0c00030a100001016d01220022002200d40022002200220022000d015300220019012200220025003c06d22b363b2a293b4d02a6010e0e0e0c000303032a021629362b3c4d0393010c0003292b25042504511e233b656606d02b37293b4d047a010e0e0e0c000329294d056e010e0e0e0c0002031f294d0661010e0e0c000229352a364d0754010e0c00032502501e263b640227294d0842010e0e0e0c00020319294d0935010e0e0c00022935294d0a29010e0e0c00026502013b6503033c0216293b4d0414010e0c00034d0b0c012d0e0e0e7d0400026406cb2b372c38294d0cf8000e0c0002293c4d02ee000e0e0e0c0003030e2b4d0ce1002f0202d4007d060002296602cc2b37294d0ccd002d7d0400022b36294d0cc1002d7d0400022b37293b4d02b4000202a8000e0c000303054d0da6001029293b4d029e000e0e0e0c000303054d0e9200102936293b4d0289000e0e0c000303062a3529640207292502501e2c3b652935644d0c6d002d7d0400022b37293c2a3b4d025e000e0e0e0c0003030329024a2a352b362b3c4d0249000e0e0c0003032c2a354d0f3c004d02380002022c000e0c000303112a362935294d0c25000e0e0c00026502054d1019001002012b2a2a2505250526031e573b6666420e0e0e0e0e0e0e|@5405,-3,I107,I229,I106,I253,@1145,@1147,@1714,@1720,@1722,I218,@5202,@5402,@5406,@1773,-11,@5404| 5404:O3|@7129,@237,@5408 5405:S26|50415253455f5452454528292e7475706c655769647468283129 5406:O3|@7129,@237,@5407 5407:S26|7475706c6557696474683a20656d707479206c6f63616c646563 5408:S8|6765745769647468 5409:O1|@5410 5410:C8,128|00812b2d4d0078000e0c000303172b4d016d000e0e0c00024d0264002a3c3b3b68056402563b2c0e0e4f035300100002402a692a293b4d0446000e0e0e0c000303033c021f293529354d0533004d042f000c0003030c2a36292503511e283b6402013b64640312294d0614000e0c00024d050c002a696402012966430e0e0e0e|@5412,I113,I111,-5,@5411,I229,-3,@3098| 5411:C6,72|008056082c2a4d003e000e0e0e0c00036403033b022c2b4d012d000e0e0c00024d0224002a3c3b3b68052d3c4d0318000e0c00030e4f040f002100022a2a69292704420e0e0e0e0e|@5413,I234,I111,-5,I107,@5411| 5412:S26|50415253455f5452454528292e6d6b4172675475706c65283229 5413:S38|50415253455f5452454528292e6d6b4172675475706c652832296d6b4172674c697374283129 5414:O1|@5415 5415:C3,32|00812b3c4d0018000e0c000303052c3b69020a3b3b4f01070010000264430e0e|@5417,I229,@5416| 5416:C7,112|008056072c2a4d0066000e0e0e0c00036403033b02545608293528054d0150000e0c0003030c2c2a4d0244000e0c0003022129354d0338004d0134000e0c0003030c2c2a4d0228000e0c0003020528062a2e6a2d3c4d0417000c00030e4f050f002100022a2a69292704420e0e0e0e0e|@5418,I113,I229,@3087,-3,I106,@5416| 5417:S24|50415253455f5452454528292e6c6f616441726773283229 5418:S33|50415253455f5452454528292e6c6f6164417267732832296d6b61726773283129 5419:C2,32|0084560b4d00180056285639564a6b3131312d32322f3b56a7220c7b0a090009|@5421,@5420| 5420:C1,72|00802b352c362d372e38564903242a2c2b56780e0e0c00042d2d2d2d56970e0e0e0c0005293b692b2a6928092a692704020e2c2c2c2c5687330e0e7b060700052704420e0e0e0e0e|@5422| 5421:S48|50415253455f5452454528292e67656e636f6465283729636f646553657175656e6365283429636f6465416c74283529 5422:S56|50415253455f5452454528292e67656e636f6465283729636f646553657175656e6365283429636f6465416c742835296367457870283129 5423:C8,176|00802b37293b4d00a6000e0e0e0c0003294d019b000c00022937294d0291000e0e0c00020380294d0385000e0e0c000229352a36577a293b4d0074000e0c0003579a2a3c4d0468000e0c00032a3b2b4d055d000e0e0c00045057ba293b4d004f000c000357da2a3c4d0444000e0c00032a3b2b4d0539000e0e0c000450323b314d052c000e0c00045057f8293b4d001f000c0003333b2b4d0515000e0e0c0004503b270d02054d060600102704420e0e|@5424,I253,@2673,@5245,@5248,I106,I255,@5243| 5424:S58|50415253455f5452454528292e67656e636f6465283729636f646553657175656e63652834293c7061747465726e3e2d73657441646472283129 5425:C34,1048|00802b3b4d0010040e0c000303033b06d42b352935293b4d01fd030e0e0c00032b362c37293b4d01ee030e0e0e0c00032e38293b4d01e0030e0c00033039293b4d01d4030e0c0003220c362e4d02c8030e0c00022937294d03bd030e0e0c00020310294d04b1030e0e0c00022935296502054d05a20310293b4d019b030c000356f8334d0691030e0e0c00022a2a4d0786030e0e0e0c0003220e4d087a030e0e0e0c00024d0970030e0c00020315220e3529353b4d0a60032b4d0b5b030c00046502054d0c510310220f3c2a3b4d0047030c0003030329022f2a352b362b3c4d00350302022c030e0e0c0003030d2a36294d0a23030c00026402012b2a2a2505250526031e393b66651215000200060003033c020129293c4d0dfc020e0c00034d09f4020e0c00022c2a2a3b4d00e8020e0c0003030329021b2a352b362a2c4d0ed5020e0e0c00032a2a2505250526031e263b6665220f3c4d00bc020e0c0003030c293c4d0db0020e0c000302013b29030e333b3b4d0f9f020c0004503b02013b121a0002000200121b0002000200293b4d0183020c0003293c4d0e7a020e0e0e0c00032c3b2b4d0f6d020e0e0c000450121e0002000400293b4d015a020e0e0e0c000312200002000400293b3c4d0f46020e0e0e0c0004503b221d0e1610003602230000000002221a3c4d0029020e0e0c00030319220c3c4d0e1b020c000329220d4d1111020e0e0c00036402584d120502220d22112b0e0c0003402a692a293b4d00f2010e0e0e0c000303033c021f293529354d13df014d00db010c0003030c2a36292503511e283b6402013b64640312294d14c0010e0c00024d13b8012a696402012966220c4d15ab014d16a7010c0003294d179f016928282a6922142a69664d1891010e0e0c00021225000100f7ff122600010003000402002a352b364d1973012b692c2a452b46502c2f3333332d1231000100fcff0e0e0e0c000622173c4d0051010e0e0c0003030329020f4d1a43012a22194d1b3c010e0c0004122e00010003000402002a352b364d1926012b692c2a452b46502c2f222222122233222d2e123a00020005000e0c00071235000200020012360002000200293b4d01f4000e0c0003293c4d1cea000e0e0e0c00032c3b2b4d0fdd000e0e0c00045012390002000400293b221c4d0fc8000e0c000450123a0002000200293b4d01b6000e0e0e0c0003293c4d0eaa000e0e0e0c00033122192b3b22294d1599003b3b68084d1d91002a693b22313b22324d0f85000e0e0c0004502227031e4d1e770022312c3b6b22350e161f006a004200010000022a2a692966025622303c4d0e56000e0e0e0c00034d1e4c002a2d3b6b22393c4d1c41000e0e0c00033b22303b22332d0e0e1620002e004800000000064d1e240022352b3b6b22390e0e161f0016004600010000022a2a692e2a69292708273f420e0e0e0e|@5427,I229,I253,@2673,@5245,@5248,@5428,@1827,@353,I105,I218,@5402,@5430,@5433,I113,I106,I255,@5435,@5409,@5439,-3,@3098,-1,@364,@384,@378,@214,@474,@4275,I107,-7,-4,@5425,@5426| 5426:C18,584|00842e3b4d0040020e0c000307dd1201000100eaff293c4d012d020e0e0c000364032b1201000100f0ff293c4d0218020e0c00031203000100f7ff4d0309022b3c2c3b68053f322b3b6b270402c51201000100eaff3e2a6958295838293b4d04e6010e0e0e0c00030402002d2d2c2c4d05d5010e0e0c00055029352a365888293b4d04c3010c0003642a0e0e0e0c0002120a000100f0ff293c4d02ab010c0003120c000100f7ff4d039d012b3c2c3b68052d3b69293b4d008e010e0e0e0c000303042212020b3b22134f067b01f00002643f2a2d3b6b1211000100eaff280b322b6a293b692c2a6929020228003b4d0056010e0e0e0c00030304220d020f3b220e16070042011700000000026428092a69271506d32e352f3658285838293b4d0425010e0e0c0003293c4d021a010e0e0e0c00032c3b2b4d080d010e0e0c000450586a293b4d04ff000c0003588a293b3c4d08f3000c000450220c4d09e9004d0ae5000e0e0c00034d03dc004d0bd8003c220f3b680529344d0ccc000e0c000322103b4d00c1000e0e0c0003030329020c3b2a0e0e4f0daf00d0000264220f3c4d0ea4000e0c00032214220e4d0298000e0c000329220e2d312e0e0e0e160f0086001500010000061211000300020012120003000200293b4d046c000e0c0003293c4d0e6200020259000e0e0e0c00032c3b2b4d0851000e0e0c00045012150003000400293b220f4d083c000e0c00045012160003000200293b4d042a000e0e0e0c0003293c4d021e000e0e0e0c000331220f2b3b3c3b3b3b68084d1009002a6927191f050e0e0e|@5443,I229,I113,I106,-5,I253,@4775,@5444,@5445,I255,@5069,@353,-1,@5414,@5442,I107,@5426,-7| 5427:S62|50415253455f5452454528292e67656e636f6465283729636f646553657175656e63652834293c7061747465726e3e2d6c6f616446756e44656373283129 5428:O3|@7129,@237,@5429 5429:S6|6c7641646472 5430:O1|@5431 5431:C4,80|00822b354d0048004d0144000e0c000303122b372e2e2b4d0235002f0e0e0e7b050600042b353c4d0125000e0e0c0003031a2b362c37292f0e0c000229316929312e4d020a00327b050900042d440e0e|@5432,-3,I229,@5430| 5432:S73|50415253455f5452454528292e67656e636f6465283729636f646553657175656e63652834293c7061747465726e3e2d6c6f616446756e446563732831296765745061747473283329 5433:O3|@7129,@237,@5434 5434:S23|6261646c7920666f726d65642070617273652074726565 5435:C12,160|00802b3b4d0098000e0c000303033b028d2b352c362a352b362c373b4d0180002d4d027b000c00041207000100f7ff293c4d036b000c0003640320294d0460000e0c00024d0558000e0c000203062935296402054d064800100204280d2a693c28404d073a004d0836000e0e0e0c00043c28404d0729004d0825000e0e0c00042e2e2d2d2d68054d0915002a69320e0e0e4f0a0b00b100022a2a6929270d420e|@445,I229,@5436,@5430,I113,I105,I218,@1773,@992,I11,-11,@5435| 5436:O1|@5437 5437:C1,8|00802b420e0e0e0e|@5438| 5438:S84|50415253455f5452454528292e67656e636f6465283729636f646553657175656e63652834293c7061747465726e3e2d6c6f616446756e446563732831296d6174636865732d2831297061744c6973742d283129 5439:O1|@5440 5440:C5,88|00812b3b4d0050000e0c000303033b02452b352c362e2b4d013d000e0e0c00032f3c4d0132000e0e0e0c0003292b4d0226000e0e0e0c0003312e4d011a000e0e0e0c0003292e4d030e000e0e0e0c00032b2a69292708430e|@5441,I229,I106,@5409,@5439| 5441:S73|50415253455f5452454528292e67656e636f6465283729636f646553657175656e63652834293c7061747465726e3e2d6c6f616446756e446563732831296d616b6541726773283229 5442:C3,40|00802b3b4d0020000e0c00030304560902142b352c36290e0e4f010b002100022b2a69292704420e|@1555,I229,@5442| 5443:S73|50415253455f5452454528292e67656e636f6465283729636f646553657175656e63652834293c7061747465726e3e2d6c6f616446756e446563732831296d616b6546756e73283529 5444:C3,48|00802b3b4d0028000e0c000303091201000100f1ff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1555,I229,@5444| 5445:C3,48|00802b3b4d0028000e0c000303091201000100ebff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1555,I229,@5445| 5446:O1|@5447 5447:C4,48|00802b3b4d0028000e0c000303033b021d2b352c362a37293b4d0113000c00032b4d020b000c00022a2a69292706420e|@445,I229,I253,@5446| 5448:C11,264|00802b3b4d0000010e0c000303033b06d32b35293b4d00ef000c000303592c36294f01e300210002293b4d00da000e0e0e0c000303033c022c294d02ca000e0e0e0c00024d03c0000e0c000203062936296402054d04b000103b2a4d00a9000e0e0c000364030329020a4d059a002a69293b696465028c29352a362e3656482c4d0684000e0c00022a2a4d077a000e0e0e0c000329282d4d076d000e0e0c00031209000100f7ff569957ae312b2e2c56f40c000557cf57de56e9292b2d2f221134121600020007000e0c0007220c0e0e0e1608003200120001000002293b4d00260002021e000e0e0e0c000303032a02103b2b0e0e1609000e0014000000000264271064420e0e0e|@5450,I229,@5451,I105,I218,@1773,-9,@5464,@353,@5448,@5449| 5449:C3,48|00802b3b4d0028000e0c000303091201000100eeff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1555,I229,@5449| 5450:S59|50415253455f5452454528292e67656e636f6465283729636f646553657175656e63652834293c7061747465726e3e2d636f646544656373283129 5451:C15,312|00802b3b4d0030010e0c000303033b06d02b35293b4d001f010c0003030d2c36294f0113012100026406d629352a362e362b4d0202010e0e0e0c0002575a293b4d03f4000e0c0003577a2a3c4d04e8000e0c00032a3b2b4d05dd000e0e0c0004503b2e293b4d00cf000c000303033b021829352a362a0e0e0e4f06bb00d0000250292503511e223b6564300e0e4f01a700b10002303b4d009e000e0e0e0c0003030329028e303529354d078b004d0087000c0003037729362a37293b4d0378000e0c0003294d086f000c00022937294d0965000e0e0c00020314294d0a5900020253000e0e0c00022935296502054d0b460010293c3022131218000100fdff020232000e0e0c0005313b4d002a000e0e0e0c000303032902103b2a0e0e160c00160017000000000264270702054d0d07001064270b64420e|@5453,I229,@5451,@5454,I253,I106,I255,@5458,-8,@2673,@5245,@5248,@5428,@5462,@5452| 5452:O3|@7129,@237,@5463 5453:S64|50415253455f5452454528292e67656e636f6465283729636f646553657175656e63652834293c7061747465726e3e2d636f6465526563757273697665283129 5454:O1|@5455 5455:C7,136|00802b354d0080004d017c000e0c0003030e2b37294d026f002d0e0e7d0400022b354d0362004d015e000e0e0e0c000303372b362c372a4d024d000e0e0c00022a4d0243000c0002293b4d013a000e0e0e0c000303032a020c3b2b0e0e4f04270050000264270402172b354d0519004d0115000e0e0c000303052b3b6902013b420e0e0e0e0e0e0e|@5457,-3,I229,@5454,-9,@5456,-8| 5456:C3,40|00802b3b4d0020000e0c00030304560102142b352c36290e0e4f010b002100022b2a69292704420e|@1555,I229,@5456| 5457:S74|50415253455f5452454528292e67656e636f6465283729636f646553657175656e63652834293c7061747465726e3e2d636f646552656375727369766528312967657456617273283129 5458:C10,136|00802b354d0080004d017c000e0c0003036d2b37293b4d026e000e0e0e0c0003294d0363000c00022937294d0459000e0e0c00020340294d054d000e0e0c000229352a361208000100f8ff2b3b2b4d0636000e0e0e0c0004505888293b4d0227000c00032c3b2b4d061d000e0e0c0004503b270602054d070e0010270402054d08050010420e0e0e|@5460,-8,I229,I253,@2673,@5245,@5248,I255,@5459,@5459| 5459:O3|@7129,@237,@5461 5460:S77|50415253455f5452454528292e67656e636f6465283729636f646553657175656e63652834293c7061747465726e3e2d636f646552656375727369766528312973657441646472657373283129 5461:S36|7365744164647265737320202d206261646c7920666f726d656420706172736574726565 5462:C3,48|00802b3b4d0028000e0c000303091201000100f3ff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1555,I229,@5462| 5463:S31|56616c4465636c61726174696f6e202d206e6f742061207661726961626c65 5464:O1|@5465 5465:C7,120|00802b354d0070004d016c000e0c000303062b362964025f2b354d025a004d0156000e0e0e0c0003030e2b37294d0347002d0e0e7d0400022b354d043a004d0136000e0e0e0c000303292b362c372a354d0024004d0120000e0c000303062a362964020c294d030f002e0e0e7d0500026502044d05010042|@5467,-8,I229,-3,@5464,-9,@5466| 5466:S9|3c7061747465726e3e 5467:S69|50415253455f5452454528292e67656e636f6465283729636f646553657175656e63652834293c7061747465726e3e2d636f6465446563732831296765744e616d65283129 5468:C3,48|00802b3b4d0028000e0c000303091201000100eeff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1555,I229,@5468| 5469:C3,48|00802b3b4d0028000e0c000303091201000100ebff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1555,I229,@5469| 5470:C3,48|00802b3b4d0028000e0c000303091201000100e9ff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1555,I229,@5470| 5471:C4,48|00802b3b4d0028000e0c000303033b021d2b352c362a0e0e0e4f0113002100022a4f020b003100022a2a69292705420e|@445,I229,@5472,@5471| 5472:C16,280|00802b36293b4d000e010e0e0e0c00032d382a4d0101010e0e0c00022937294d02f5000e0e0c00020314294d03e9000e0e0c000229352a362a2a696602054d04d6001029352a36578a293b4d00c9000e0e0c000357aa2a3c4d05bc000e0c00032a3b2b4d06b1000e0e0c0004502e3b2d4d06a4000e0c00045057c8293b4d0097000c00032f3b2b4d068d000e0e0c000450303b4d0081000e0e0c0003220c354d0775004d0871000e0e0c000303064d0966000259220c354d0a5d004d0859000e0e0c00030342220c37293b4d0049000e0e0c000312120002000200293b4d0037000c000312140002000900121500020008002d2c4d0b20002d2d4d0c1a000e0e0e0c0006270602054d0d0c00104d0e07002b2b3b6b271042|@5474,I253,@2673,@5245,@5248,@5428,I106,I255,-5,I229,@5475,-8,@214,@4793,@5473,-4| 5473:O3|@7129,@237,@5478 5474:S57|50415253455f5452454528292e67656e636f6465283729636f646553657175656e63652834293c7061747465726e3e2d636f64654578283129 5475:O4|4,@5476,@3053,0 5476:O2|@473,@5477 5477:O2|@3056,@518 5478:S6|636f64654578 5479:O1|@5480 5480:C4,48|00802b3b4d0028000e0c000303033b021d2b352c362a36293b4d0113000c00032b4d020b000c00022a2a69292706420e|@445,I229,I253,@5479| 5481:C3,48|00802b3b4d0028000e0c000303091201000100eeff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1555,I229,@5481| 5482:C5,88|00822d36293b4d004e000e0e0e0c00032e352f362b4d013f000c00020402002a2c2b57970e0c00045029352a362a3b4d0225000e0e0c000303032e020c3b2f0e0e4f03130090000264342a452b462709440e0e0e0e0e0e0e|@5484,I253,@2172,I229,@5483| 5483:C3,48|00802b3b4d0028000e0c000303091201000100f8ff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1555,I229,@5483| 5484:S61|50415253455f5452454528292e67656e636f6465283729636f646553657175656e63652834293c7061747465726e3e2d676574436f6e73747273283329 5485:C3,48|00802b3b4d0028000e0c000303091201000100f1ff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1555,I229,@5485| 5486:S18|4c6973742e6d61705061727469616c283229 5487:C28,688|00834d00aa0256175629563a6b2f354d019d024d0299020e0e0c000303922f363038293b4d0388020e0c0003294d047f020c00025657293b4d0374020e0c00032b2a4d056a020e0e0e0c00032d4d065f020c0002293b4d0256020e0e0e0c00030316404d0749020e0e0c0002294d083f023b3b6b2965020429372964312a220f220f220e0e0c0005293b693f2a2f3b6b324d091b020c00020402002b2b22152c22120e0e0e0c000550293529270f06d92f354d0afa014d02f6010e0e0e0c0003037a2f37293b4d03e6010e0e0e0c00035637293b4d03d8010e0c00032b4d0bcf010c000203064d0cc60102152b4d0dbf010c0002292b4d05b6010e0e0e0c0003642c3b4d02a9010e0e0c00030316404d079d010e0e0c0002294d0893013b3b6b296502042c3729640402002b2b220e2c340c000550293529270806d52f353e4d026d010e0e0c0003038b2f3630372a4d0e5d010e0e0c00024d0f54010e0c0002036b2a36293b4d0246010e0e0e0c000303532b354d1038015668336a040300322e2c2c4d112901020222010e0e0c00055029352a372d220e220e2c220d0c0005293b69293b4d0207010c000303032c020c3b2d0e0e4f12f700c000026428092a69270802054d13e700106402054d14df00106506cb2f354d15d5004d02d1000e0e0c000303a32f3630374d16c2005648316a040300302d2c2c4d11b3000c00055029352a36402a692a293b4d02a10002029a000e0e0c000303033c021f293529354d178b004d0287000c0003030c2a36292503511e2b3b6402013b64640312294d186c000e0c00024d1764002a69640201290402002a3122102c220d0e0c0005502935293b69293b4d0244000e0c000303032f020c3b300e0e4f193300d000026428092a69270c02242f353f4d0220000e0c000303122f36293030302f3102020b000e7b060800054d1a040010641f04|@5489,@5490,-2,I229,I253,@4691,@4969,@2054,@1564,I48,@2051,-8,@2036,@440,@2394,I105,I218,@5504,@4671,@5506,@5488,@5488,-7,@5507,-3,@3098,@5508,@5488| 5488:O3|@7129,@237,@5509 5489:S47|535452554354555245535f28292e67656e636f646553747275637473283229737472756374757265436f6465283429 5490:C17,384|008356095617293b4d0074010e0c0003040200322d2c2c4d0165010e0e0c00055029352a365667293b4d0053010c0003642a0e0e0e0c00023c28403c4d0240010e0c0004040200280b28404d0331014d022d010e0e0c0004293b404d0421010e0e0c0004504d0517012a693c28402b4d020d010e0e0c00042c2a454d03010146502c3c28403b4d02f6000e0e0e0c000422114d06ea000e0e0e0c00024d07e0002b2d332213220d12160001000100221a221112190001000200680a4d08c1002a692b2a3b4d09b8000e0c0004333b4d00ae000e0e0e0c0003030922142218453c4602922d3b4d0097000c00034d0a900030692a2a4d0b88000e0c0003402a692a293b4d0c7a000e0e0e0c000303033c021f293529354d0d67004d0c63000c0003030c2a36292503511e283b6402013b64640312294d0e48000e0c00024d0d40002a6964020129293b69293b4d0c31000e0e0c000303042213020f3b2214160f001e001b00000000026428092a69221c2a453b46270827121f040e0e0e0e0e0e0e|@5492,I253,@4775,I11,@510,I255,-1,@2083,@5493,@5500,@2081,@5502,@4282,I229,-3,@3098,@5491| 5491:C3,48|00802b3b4d0028000e0c000303091201000100e7ff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1555,I229,@5491| 5492:S64|535452554354555245535f28292e67656e636f646553747275637473283229737472756374757265436f64652834296d61746368537472756374757265283429 5493:C47,1832|00822c4d0021070e0e0c000207d42c4d0115070e0e0c0002294d020b070c00024d0304070e0c000207cc294d02f9060e0e0c00024d04f0060e0c0002562d4d05e6060e0e0e0c0002294d06db06324d07d6060e0e0e0c0004294d08cb060c00024d09c4060e0c000203062935296402054d0ab40610294d02ae060e0e0e0c0002294d03a3060c00020388294d0499060e0e0c0002292f4d0b8e060e0e0e0c0003644d0983060c000203135669293b3b4d0c75060e0e0c0004503b6402013b2a4d0465060e0e0c0002568b293528054d0d56060e0e0e0c000303102a2a4d0e480602023e010e0c0003022529354d0f38064d0d3406020226010e0c0003030c2a2a4d0e24060e0c0003020528062a2c6a6602405669293b3b4d0c0d060e0e0c000450567c293b4d10ff050c00032d4d11f7050c000203064d12ee0502152d4d02e7050c0002292b4d13de050e0e0e0c000364662b3b4d0dd0050e0c00030316404d14c5050e0e0c0002294d15bb053b3b6b296502042b372964303b4d0daa050e0e0e0c00030316404d149d050e0e0c0002294d1593053b3b6b29650204303729640402002c2c2c2c56ea0c00055029352a36294d0972050e0e0e0c0002031356c9293b3b4d0c61050e0e0c0004503b6402013b56d829220d2e4d164c050e0c00045056e7293b4d103f050c0003220e2a4d1735050e0e0c000365031e56e7220d3c4d1824050e0c00032a3b2b4d0c19050e0e0c0004503b6502013b270d02013b6406cc2c4d1901050e0e0c000207db2c4d1af5040e0e0c0002293729353b4d0de7040c000307cb2936563d4d05da040e0e0e0c0002294d1bcf04334d07ca040e0e0e0c0004294d08bf040c00024d09b8040e0c000203062935296402054d1ca804102e36294d1da0040e0c000203112a363b2a4d0d92040e0e0e0c00036402013b3036294d1d81040e0e0c0002031b2c36294d0873040c00024d096c040e0c000203033c02013b6402013b2d3729353b4d0d55040e0e0c000307d1293629334d0b46040e0e0e0c00034d093c04020235040e0c000203033c02072d03033c02012b031b56c9293b3b020263034d0c1904020257030e0e0c0004503b6402013b2e07cf220c4d1e01040e0e0c00024d1ff8030e0c000203a456db293528054d0de8030e0c0003030c2b2a4d0edc030e0c0003022129354d0fd0034d0dcc030e0c0003030c2b2a4d0ec0030e0c0003020528062a2d6a220e4d20af030c00024d0fa8032a69294d21a103692c2a69402a692a293b4d0d93030c000303033c0223293529354d0f83034d0d7f030202c6010c0003030c2a36292503511e293b6402013b64640312294d2260030e0c00024d0f58032a6964020129270702d856dc293b4d1046030e0e0e0c0003293c4d183a030202c2000e0e0e0c00036556ee0e0e0c0002293528054d0d20030e0c0003030c2b2a4d0e14030e0c0003022129354d0f08034d0d04030e0c0003030c2b2a4d0ef8020e0c0003020528062a2d6a220e4d20e7020c00024d0fe0022a69294d23d902692c2a69402a692a293b4d0dcb020c000303033c021f293529354d0fbb024d0db7020c0003030c2a36292503511e253b6402013b64640312294d229c020e0c00024d0f94022a6964020129294d1589023c3b3c4d2482023b3b68084d257a022a69270902bc2c037b56db293528054d0d67020c0003030c2b2a4d0e5c020e0c0003022129354d0f50024d0d4c020e0c0003030c2b2a4d0e40020e0c0003020528062a2d6a293528054d0d2d020e0e0c0003030c3c2a4d0e20020e0c0003022129354d0f14024d0d10020e0c0003030c3c2a4d0e04020e0c0003020528062a3c6a65023e56db293528054d0dec010e0c0003030c2b2a4d0ee0010e0c0003022129354d0fd4014d0dd0010e0c0003030c2b2a4d0ec4010e0c0003020528062a2d6a646502aa56b9293b3b4d0cac010e0c0004502d032c56cc293b4d109c010e0c0003220d4d1e92010e0e0e0c000256ff332c2c2c3b4d2681010e0e0c00062704026c56cc293b4d1070010e0c0003220d4d1e66010e0e0e0c000256ff332c2c2c3b4d2755010e0e0c000630033e293528054d0d45010e0e0c0003030c3c2a4d0e38010e0c0003022129354d0f2c014d0d28010e0c0003030c3c2a4d0e1c010e0c0003020528062a3c6a02012927056456c829342c4d1602010e0e0e0c00045056d7293b4d10f3000c0003220c2a4d17e9000e0e0c000365031e56d7343c4d18d9000e0e0c00032a3b2b4d0ccd000e0e0c0004503b6502013b270b02013b6502b72c4d28b5000e0e0c000203aa2c4d29a9000e0e0c0002561d4d059e000e0e0e0c0002294d2a9300314d078e000e0e0e0c0004294d0883000c00024d097c000e0c000203062935296402054d2b6c00103b2d4d2c65000e0e0c00022b4d2c5b000c00022a2a2a4d0851000e0e0c00024d0948000e0c000203392a352b362b4d0839000e0e0c00024d0930000e0c0002031d2b352c362c2b0e4f2d1f00e00003502b2a2506250626041e433b6502013b6502013b270902013b440e0e|@5495,@2007,@2006,@2394,@2397,@2400,@2083,@7202,@1962,I105,I218,@1239,I113,I255,I229,@3087,-3,I253,@2036,@440,@4969,@1564,I48,@3288,I231,I106,@2025,@2024,@7197,@1239,@5496,@2338,@2352,@1827,@518,@3098,@472,-1,-7,@5366,@4793,@2019,@2018,@7205,@1239,@2172,@5494| 5494:C12,344|00812c3729353b4d004d010e0e0c000307d329362e382e3729353b4d0039010e0e0c000303b42936292d4d012a010e0e0e0c00034d0220010e0c000203135759293b3b4d0311010e0e0c0004503b5102023b50575b293528054d00fb000c0003030c2a2a4d04f0000e0c0003022129354d05e4004d00e0000e0c0003030c2a2a4d04d4000e0c0003020528062a2c6a577829302c4d06c0000e0c0004505787293b4d07b3000c0003312a4d08aa000e0e0e0c000365031e5787303c4d0999000e0e0c00032a3b2b4d038d000e0e0c0004503b6502013b270402765749293b3b4d03750002026c000e0e0c000450575c293b4d0763000c0003577f332b302c3b4d0a55000e0e0c0006579829322c4d0647000c00045057a7293b4d073b000c0003332a4d0832000e0e0e0c000365031e57a7323c4d0921000e0e0c00032a3b2b4d0315000e0e0c0004503b6502013b27066602013b64430e0e|@5499,I229,I113,I218,I255,@3087,-3,@3288,I253,I231,I106,@4793| 5495:S69|535452554354555245535f28292e67656e636f646553747275637473283229737472756374757265436f64652834296d61746368537472756374757265283429552d283329 5496:O1|@5497 5497:C3,16|00804d000a002c4d0105002d7e030003|@5498,-1,I229| 5498:S11|53696d706c6556616c7565 5499:S90|535452554354555245535f28292e67656e636f646553747275637473283229737472756374757265436f64652834296d61746368537472756374757265283429552d28332970726f63657373436f6e7374727563746f72283229 5500:C1,16|00802b352c362d3756372e7b05030004|@5501| 5501:S69|535452554354555245535f28292e67656e636f646553747275637473283229737472756374757265436f64652834296d61746368537472756374757265283429552d283129 5502:C2,16|00805607292d4d0006002e0e7e040003|@5503,@460| 5503:S76|535452554354555245535f28292e67656e636f646553747275637473283229737472756374757265436f64652834296d61746368537472756374757265283429636f64654c6973742d283129 5504:C1,32|00802b352c3656280403002a2d2d2c56870c000550292704420e0e0e0e0e0e0e|@5505| 5505:S56|535452554354555245535f28292e67656e636f646553747275637473283229737472756374757265436f6465283429636f6465642d283129 5506:C3,48|00802b3b4d0028000e0c000303091201000100f4ff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1555,I229,@5506| 5507:C1,32|00802b352c3656280403002a2d2d2c56870c000550292704420e0e0e0e0e0e0e|@4698| 5508:C3,48|00802b3b4d0028000e0c000303091201000100f3ff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1555,I229,@5508| 5509:S30|737472756374757265436f64653a206e6f74206120737472756374757265 5510:C2,32|00802b352c360403004d0013002c2c2c56770e0e0e0c0005502966420e0e0e0e|@4698,I48| 5511:O2|0,@5512 5512:O1|@5513 5513:C2,8|00804d000200420e|@5514,@510| 5514:S40|535452554354555245535f28292e67656e636f646553747275637473283229636f6465642d283129 5515:O3|103,@382,@5516 5516:S21|537461746963206572726f72732028706173733329 5517:O1|@5593 5518:O1|@5519 5519:C8,184|00854d00b2002c0e0e0c000250303c4d01a5000e0e0c00032c0c0002504d0297002c0e0e0e0c0002502f314d0389000e0e0c0003293c4d017e000e0e0e0c00032d0c0002504d046f002d0e0e0e0c0002502f314d0361000e0e0c0003293c4d0156000e0e0e0c00032e0c0002504d0547002e0e0e0e0c0002502f314d0339000e0e0c0003293c4d012e000e0e0e0c00032f0c0002504d061f002f0e0e0e0c0002502f3c4d0111000e0e0c00032f0c000250402f2f7d0b0002|@5521,@5522,@5523,@5590,I107,@5591,@5592,@5520| 5520:S6|2c2072756e3a 5521:S29|434f4d50494c45525f424f445928292e7072696e7454696d6573283629 5522:S15|54696d696e67202d2070617273653a 5523:O2|@5525,@5524 5524:B8|0000000080842e41 5525:C6,64|00812b3b4d0038000e0c000303032b02013b2968014d0127002a694d022100302a0c000256572a2a4d0314000e0c0003292e4d040a00340e7e0b00030e0e0e0e|@5527,I233,-1,@5528,I128,@5526| 5526:O2|@5533,@5532 5527:S11|54696d652e666d74283229 5528:O1|@5529 5529:C10,88|00802b4d0051000e0e0c0002030a2b4d0145002c0e8000022b4d023b004d0337000c00034d0430000e0c00024d0528002a4d0623000c00032d4d021b004d0717000c00034d0110000e0c00022a2a4d080600300e7e060003|@5531,I105,I135,32768,I109,@5528,@5530,I127,I110,I125| 5530:B8|000000000000e040 5531:S15|5265616c2e66726f6d496e74283129 5532:O2|@5582,@5581 5533:C13,304|00812b354d0028014d0124010e0c00030a03002f007d000800c9000404002d2a56370e0e0e0c00035029352a362b372c382c2c2c2c4d02f700340e7b0609000506d02b36293b4d03e6000e0e0e0c0003030e2d28064d04d7002e0e0e7e0500032935293b4d05c8000e0c000303033c020b2928c84d06b8000e0c000303054d07ae00102e2a4d04a7002f0e0e7e0600032b36293b4d0398000e0c0003030e2d28064d088b002e0e0e7e0500032935293b4d057c000e0c000303033c020b2928c84d066c000e0c000303054d096200102e2a4d085b002f0e0e7e0600032b36293b4d034c000e0c0003030e2d280c4d0a3f002e0e0e7e0500032935293c4d0530000e0c000303033c020f2928c84d062000020218000e0c000303054d0b1200102e2a4d0a0b002f0e0e7e060003430e0e0e|@5535,-2,I107,@5536,I229,@5548,I234,I233,@87,@5560,@87,@5534,@87| 5534:O1|@5574 5535:S11|5265616c2e666d74283229 5536:O1|@5537 5537:C14,192|00832d3c4d00b8000e0c0003031a2e3b2e2e4d01aa000e0e0e0c0005287e2a4d029d002e7e0700032c4d0393004d048f000c00030a03005700790008007f004d057d002c2a0c00024d0674002a4d026f000c0003313b4d0066000e0e0e0c000303064d075a000219314d0353004d084f000c000328452a4d0245000e0e0c0003642a2a4d023900317e0a0003022c4d092e002c2a0e0c00024d0a24002a4d021f000c00032928294d021500307e0900034d0b0c0002044d0c06001f040e0e0e0e|@5539,I229,@5536,@353,-1,I107,@5540,@5543,I48,@364,@5544,@5546,@5547,@5538| 5538:S3|302e30 5539:S20|494545455265616c2e746f537472696e67283429 5540:O1|@5541 5541:C7,64|00802b3b4d0038000e0c000303064d012e0002242b352c362a4d0223004d031f000c00032a4d0417000c00022a2a4d050e00310e7e070003420e0e0e0e0e0e0e|@5542,I229,I48,-1,@364,@5540,@353| 5542:S20|494545455265616c2e646f646967697473283129 5543:S2|302e 5544:O1|@5545 5545:C7,64|00802b3b4d0038000e0c000303064d012e0002242b352c362a4d0223004d031f000c00032a4d0417000c00022a2a4d050e00310e7e070003420e0e0e0e0e0e0e|@5542,I229,I48,-1,@364,@5544,@353| 5546:S4|6e616e28 5547:S3|696e66 5548:O1|@5549 5549:C20,472|0081280f2d4d00cf010c00034d01c8010e0c0002033628112d4d00bb010c00030304287e02044d02ae0128102e4d00a7010c000303064d039e0102044d0498012a2a4d0592012f0e7e0600032b3c4d0686010e0e0e0c00032d3d2b4d0779010e0e0c000429352a362b372b4d0869010e0e0c0002293b4d095e010e0e0e0c00030345313b4d0950010e0c000303064d02460102194d0a4001322a0e0e0e0c0002282e2a4d0531010e0e0c00036528302a4d0524010e0c0003294d0b1b014d0517010c00036506d4293c4d090b010c00030339313b4d0900010e0c000303064d02f60002194d0cf000322a0e0e0e0c0002282e2a4d05e1000e0e0c0003652d2a4d05d5000e0e0c000364026f2c3b3c4d0dc6000e0e0e0c000429282e4d05b9000e0e0c00032b3c4d0eae000e0e0e0c00032f3c2b4d0da1000e0e0c00042b2a4d0596000e0e0e0c0003220d2f4d0e89000e0e0c0003293c4d067e000e0e0e0c00034d0f74002a2a0e0e0e0c00022d2a4d0566000e0e0e0c000327092928454d0557000c00032d3c4d0e4e000e0e0e0c0003294d1043004d113f00020211000c00032b2a4d0532000e0e0e0c000327042b3b4d1224000e0c00034d011c000e0c0002030e287e2a4d050f00340e0e7e0b0003292707430e0e0e0e|@5551,I124,I218,I48,@5552,@5547,@353,I106,I117,I223,I229,@5553,@5556,@5557,@1118,I107,@5550,-1,@364,I113| 5550:O1|@5559 5551:S14|5265616c2e736369466d74283229 5552:S3|6e616e 5553:O1|@5554 5554:C6,56|00802b3b4d0030000e0c000303064d01260002202b3c4d021e000e0e0e0c00034d0314000e0c000228302a4d0409002e7e040003420e0e0e|@5555,I232,I48,I107,@5553,@353| 5555:S25|5265616c2e736369466d742832296164645a65726f73283129 5556:S2|4530 5557:O1|@5558 5558:C6,56|00802b3b4d0030000e0c000303064d01260002202b3c4d021e000e0e0e0c00034d0314000e0c000228302a4d0409002e7e040003420e0e0e|@5555,I232,I48,I107,@5557,@353| 5559:C6,56|00802b3b4d0030000e0c000303064d01260002202b3c4d021e000e0e0e0c00034d0314000e0c000228302a4d0409002e7e040003420e0e0e|@5555,I232,I48,I107,@5550,@353| 5560:O1|@5561 5561:C22,496|0081280f2d4d00e7010c00034d01e0010e0c0002033628112d4d00d3010c00030304287e02044d02c60128102e4d00bf010c000303064d03b60102044d04b0012a2a4d05aa012f0e7e0600032c3e2d4d069d010e0e0c000429352a362b372b4d078d010e0e0c00022b3b4d0882010e0e0e0c00030372303b4d0974010e0c00030304283002602b4d0a65010e0e0c00024d0b5c012a2a0e0e0e0c00024d0c50012a4d054b010c000329314d0542010e0e0e0c0003220c2f4d0d35010e0e0c000329324d0e2a010e0e0e0c00034d0f20012a2a0e0e0e0c00022d2a4d0512010e0e0e0c0003270906d4292c4d0802010e0e0e0c0003035e2b2a4d0df4000e0c00034d10ec002a2a0e0e0e0c00022f2a4d05de000e0e0e0c0003343b4d09d2000e0e0e0c000303064d02c60002194d11c000220c2a0e0e0c0002282e2a4d05b1000e0e0c0003652a2a4d05a5000e0e0c0003270502722c3b2d4d1295000e0e0c000429282e4d0589000e0e0c00032b2e4d0d7e000e0e0e0c00032f2f2b4d1271000e0e0c00042b2a4d0566000e0e0e0c0003220c2f4d0d59000e0e0c000329324d0e4e000e0e0e0c00034d1344002a2a0e0e0e0c00022d2a4d053600020208000e0e0e0c000327092b3b4d1424000e0c00034d011c000e0c0002030e287e2a4d050f00330e0e7e0a0003292706430e0e0e0e|@5563,I124,I218,I48,@5552,@5547,@353,I117,I223,I232,I229,I111,@5564,@5543,I107,I106,@5567,@5569,@5571,@1118,@5562,I113| 5562:O1|@5573 5563:S14|5265616c2e666978466d74283229 5564:O1|@5565 5565:C6,56|00802b3b4d0030000e0c000303064d01260002202b3c4d021e000e0e0e0c00034d0314000e0c000228302a4d0409002e7e040003420e0e0e|@5566,I232,I48,I107,@5564,@353| 5566:S16|5265616c2e6164645a65726f73283129 5567:O1|@5568 5568:C6,56|00802b3b4d0030000e0c000303064d01260002202b3c4d021e000e0e0e0c00034d0314000e0c000228302a4d0409002e7e040003420e0e0e|@5566,I232,I48,I107,@5567,@353| 5569:O1|@5570 5570:C6,56|00802b3b4d0030000e0c000303064d01260002202b3c4d021e000e0e0e0c00034d0314000e0c000228302a4d0409002e7e040003420e0e0e|@5566,I232,I48,I107,@5569,@353| 5571:O1|@5572 5572:C6,56|00802b3b4d0030000e0c000303064d01260002202b3c4d021e000e0e0e0c00034d0314000e0c000228302a4d0409002e7e040003420e0e0e|@5566,I232,I48,I107,@5571,@353| 5573:C6,56|00802b3b4d0030000e0c000303064d01260002202b3c4d021e000e0e0e0c00034d0314000e0c000228302a4d0409002e7e040003420e0e0e|@5566,I232,I48,I107,@5562,@353| 5574:C24,496|0081280f2d4d00e7010c00034d01e0010e0c0002033628112d4d00d3010c00030304287e02044d02c60128102e4d00bf010c000303064d03b60102044d04b0012a2a4d05aa012f0e7e0600032c3d2d4d069d010e0e0c000429352a362b372b4d078d010e0e0c00022b314d0882010e0e0e0c000303033c020f2b4d0972014d0a6e010e0e0e0c0003037e293c4d0b60010e0c000303032c023d2c3b3c4d0c50010e0c000429282e4d0545010e0e0c00032b3c4d0d3a010e0e0e0c00032f3c2b4d0c2d010e0e0c00042b2a4d0522010e0e0e0c000327042928454d0513010c00032d3c4d0d0a010e0e0e0c0003294d0eff004d0ffb000c00032b2a4d05f2000e0e0e0c0003270402be2b3b4d10e2000e0e0e0c000303322b4d11d5000e0e0c00024d12cc002a2a0e0e0e0c00024d13c0002a4d05bb000c000329314d05b2000e0e0e0c00032704027e292c4d10a2000e0e0e0c000303322b2a4d0d94000e0c00034d148c002a2a0e0e0e0c00022f2a4d057e000e0e0e0c0003294d1573004d056f000c00032704023e2c3b2d4d0c61000e0e0c000429282e4d0555000e0e0c00032b2e4d0d4a000e0e0e0c00032f2f2b4d0c3d000e0e0c00042b2a4d0532000e0e0e0c000327042b3b4d1624000e0c00034d011c000e0c0002030e287e2a4d050f00330e0e7e0a0003292706430e0e0e0e|@5576,I124,I218,I48,@5552,@5547,@353,I117,I223,I233,-5,I234,I229,@1118,I107,-1,@364,I232,I111,@5577,@5543,@5579,@5575,I113| 5575:S2|2e30 5576:S14|5265616c2e67656e466d74283229 5577:O1|@5578 5578:C6,56|00802b3b4d0030000e0c000303064d01260002202b3c4d021e000e0e0e0c00034d0314000e0c000228302a4d0409002e7e040003420e0e0e|@5566,I232,I48,I107,@5577,@353| 5579:O1|@5580 5580:C6,56|00802b3b4d0030000e0c000303064d01260002202b3c4d021e000e0e0e0c00034d0314000e0c000228302a4d0409002e7e040003420e0e0e|@5566,I232,I48,I107,@5579,@353| 5581:B8|0000000000001000 5582:C14,248|008128112d4d00ef000c0003280f2e4d00e5000e0e0c0003034a2d4d01d9004d02d5000e0e0c000303033d02352d4d03c6004d04c2000e0e0e0c000303032d020b2d4d05b2000e0e0e0c000256272a2a4d04a4000e0c00036503033c02044d069600021528102e4d008d000e0e0c000303064d07820002013b294d077a004d0876000e0e0e0c00030a03005c005100080046002e3b3b4d095e000e0e0e0c000429352a362b372b4d0a4d000e0e0c00022a3b4d0b42000e0e0e0c00034d0c38000e0c0002332d452a4630472b48270602222d3b452b463d473b4802172d3b452b463b473b48020c2d3b452b464d070800473b4865430e0e0e|@5584,I124,@5585,I122,@5585,I118,I130,-2,-1,I107,I117,@5583,I113,I218| 5583:O1|@5586 5584:S17|5265616c2e746f446563696d616c283229 5585:B8|0000000000000000 5586:C4,40|00803b2c4d0020000e0c0002293c4d0116000e0e0e0c00033b2a0e0e0e4f02070040000366420e0e|@5588,I223,I107,@5587| 5587:C10,144|00812b3b4d0088000e0c000303032c02792b3c4d0179000e0e0c000356172d3b4d006c000e0c000303033c0218294d025e000e0e0e0c00022e2a4d0352000e0e0e0c00036403054d04450010294d053f000c000203032902182d3f4d0631000e0e0c00032a2a4d0726000e0e0e0c0003642928304d0118000e0c0003293169292e4f080b006100032705430e0e0e0e0e|@5589,I234,I107,I223,I231,@61,I105,I239,I252,@5587| 5588:S22|5265616c2e737472546f44696769744c697374283129 5589:S32|5265616c2e737472546f44696769744c69737428312967657444696773283229 5590:S12|2c2073656d616e746963733a 5591:S12|2c207472616e736c6174653a 5592:S11|2c2067656e65726174653a 5593:C5,160|00823b2d4d0098002a3b4d0192000e0e0e0c000303032902222a352b360402002b2d2b0e0e4f02770080000450292b2a2506250626041e2e3b27046529362935293b4d035a000e0e0e0c00032b37293b4d034c000e0c00032d3a293b4d0340000e0c00032f38293b4d0334000e0c00033136293b4d0328000e0c00033339293b4d031c000e0c0003221134452c4632472e482a49304a270f440e0e0e0e0e0e0e|@5595,@5596,I229,@5597,@5594| 5594:O1|@5623 5595:S29|535452554354555245535f28292e706173733453747275637473283329 5596:O2|0,@963 5597:C10,448|00822c352d3629352a362b372c382d392e3a220c353d4d00a6010e0e0e0c00030a05001500bf000c005c0108016b0033220c0802003b06cd220c363b322e692b2a2a3b4d0179010e0e0c000303032902262a352b360402002b2d2b0e0e1602005e0114000000000450292b2a2506250626041e313b27046529352a363434342c3434680622112c452a46270706cb220c363b322c692b2a2a3b4d0123010c000303032902262a352b360402002b2d2b0e0e1603000a0114000000000450292b2a2506250626041e2f3b27046529352a3634343434342e680622112c452a46270702d8220c36342a220e2a3b4d01d1000e0e0c0003030329022a2a352b360402002b2d2b0202b3000e0e160400b20013000100000450292b2a2506250626041e353b2704650802003b64028f220c383b2a3b4d058b000c0003220d2a22102a3b4d017d000e0e0c0003030329022a2a352b360402002b2d2b02025f000e0e1606005e0015000000000450292b2a2506250626041e353b2704650802003b66023b220c364d073a002a2a0e0c00022d3b4d012e000e0e0e0c0003030329020c3b2a0e0e4f081b00c0000264323232322d326806220f220d452a4627052708440e0e0e|@5599,I107,I229,@5600,@5605,@5597,I253,@5619,@5621,@5598| 5598:C3,48|00802b3b4d0028000e0c000303091201000100f8ff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1555,I229,@5598| 5599:S45|535452554354555245535f28292e70617373345374727563747328332965787472616374537472756374283329 5600:C11,152|00822d382e3a2e352f365749293528054d0084000e0c0003030c2b2a4d0178000e0c0003022129354d026c004d0068000e0c0003030c2b2a4d015c000e0c0003020528062a2d6a2d3b4d034b000c0003294d0443000c00022a4d053b000c00022b4d0633000c00022d4d072b000c00022c2c2c2c4d0820000e0c0005323c4d0916000e0e0e0c0003220c2b6929346922112c452a46270f44|@5602,I229,@3087,-3,I253,@5601,@2054,@2051,@4415,@4585,I106| 5601:O1|@5603 5602:S66|535452554354555245535f28292e706173733453747275637473283329657874726163745374727563742833296578747261637446756e63746f7242696e64283329 5603:C3,24|00802b3b4d0010000e0c000303054d010600102b36296442|@5604,I229,@621| 5604:S28|5354525543545f56414c5328292e66756e63746f724e616d65283129 5605:C11,200|00822d362e392e352f362b3b4d00b8000e0c0003293b4d01ae000e0e0e0c00030316404d02a1000e0e0c0002294d0397003b3b6b29650204293729645769293528054d0182000e0e0e0c0003030c2d2a4d0474000e0c0003022129354d0568004d0164000e0c0003030c2d2a4d0458000e0c0003020528062a2f6a292c4d0647000c0003502e3c4d073d000e0e0c00032c382d372e35294d082d000e0e0c0002294d0323002d2f6b4d091c003069220e2a2c6a220f2a6929220e69221433452a462712440e0e0e0e|@5607,I253,I229,@1564,I48,@3087,-3,@5606,I106,@2362,-1| 5606:O1|@5608 5607:S68|535452554354555245535f28292e706173733453747275637473283329657874726163745374727563742833296578747261637453747275637475726542696e64283329 5608:C6,48|00812b4d0029000e0e0c00024d0120004d021c002f6a4d0316002a692b2a3b4d040d00310e0e0e7b050700040e0e0e0e|@5610,@2083,@5611,@5606,@5609,@2081| 5609:C1,16|00802b352c362d3756372e7b05030004|@5618| 5610:S48|535452554354555245535f28292e7061737334537472756374732833296578747261637456616c73546f536967283229 5611:C17,256|00822c4d00f9000e0e0c000203b62c4d01ed000e0e0c0002294d02e3000c000229353b4d03d9000e0e0c0003034429365638293528054d03c6000e0e0e0c0003030c2a2a4d04b8000e0c0003022129354d05ac004d03a8000e0c0003030c2a2a4d049c000e0c0003020528062a2c6a65021f294d0689000e0e0c0002030e294d077d000e0e0c0002296402054d087000102b3b4d0369000e0e0c00030316404d095d000e0e0c0002294d0a53003b3b6b296502042b3729642a2a5667310e0e0e7e0900032c4d0b37000c0002032e2c4d0c2d000e0e0c00023b2a4d0d22000e0e0e0c00023b2a0e0e0e4f0e13004000022d2a4d0f0a00320e7e0a00033b440e0e|@5613,@2007,@2006,@2394,I229,@3087,-3,@2425,@2415,@5614,@1564,I48,@2019,@2018,@2172,@5612,@2429| 5612:C4,48|00802b3b4d0028000e0c000303033b021d2b352c362a0e0e0e4f0113002100022a4f020b003100022a2a69292705420e|@445,I229,@5616,@5612| 5613:S51|535452554354555245535f28292e7061737334537472756374732833296578747261637456616c73546f536967283229283329 5614:O3|@7129,@237,@5615 5615:S28|6578747261637456616c73546f5369673a2062616420616363657373 5616:C5,112|00802b3729353b4d0065000e0e0c0003035829362d352e362f385758293528054d004c000e0c0003030c2d2a4d0140000e0c0003022129354d0234004d0030000e0c0003030c2d2a4d0124000e0c0003020528062a2f6a644d0314000e0c00022c2c2b2d6b29270602012c64420e0e0e|@5617,I229,@3087,-3,@4415| 5617:S70|535452554354555245535f28292e7061737334537472756374732833296578747261637456616c73546f536967283229283329636f707941436f6e7374727563746f72283129 5618:S51|535452554354555245535f28292e7061737334537472756374732833296578747261637456616c73546f536967283229283129 5619:C14,424|00822d354d00a0014d019c010e0c00030a02004a00300166012d362d352e3629352a362b372c382d392e3a314d0278010e0c00020402002a2a4d036b010c000350293629220c69293269332a3333333368062211220e452a46270f06dd2d362e372f3830392c2c2c2c6b3135323629352a362b372c382d392e3a334d0429010e0e0c00020337334d051d010e0e0c0002313c4d0612010e0e0e0c0003334d0707010c000229220c6929316933332b333333680622152e452a462706028257d9293528054d08e1000e0e0c0003030c312a4d09d4000e0c0003022129354d0ac8004d08c4000e0c0003030c312a4d09b8000e0c0003020528062a336a334d07a8000e0c00022a4d0b9f000c00022a22102b22106b220c3c4d068e000e0e0e0c00032c2b69293469220d220d2b220d220d220d680622182d452a02026700462709270d02602d362d352e3629352a362b372c382d392e3a314d0c4e000e0e0e0c0002293369292c6931313131312e6806220f220c452a46270d022a2d362e372a2a692f35303629352a362b372c382d392e3a312f69292f2f2f2f2f6806220f33452a46270d440e0e0e0e|@5620,-2,I107,@1751,@1754,@2443,@2446,I106,@1827,I229,@3087,-3,@4415,@2403| 5620:S56|535452554354555245535f28292e706173733453747275637473283329657874726163745374727563742833296d616b6544656373283329 5621:O1|@5622 5622:C4,56|00802b3b4d0030000e0c000303033b02252b352c362a362b37293b4d0119000e0e0c00032b2a692d4d020c000e0c00022a2a69292708420e|@445,I229,I253,@5621| 5623:C4,56|00812c3b4d0030000e0c000303032b021f2c3529352e363b2a4f011b004000022d31692a2a4d020f00330e0e7e0a0003430e0e0e0e0e0e0e|@5625,I229,@5624,@5594| 5624:C5,80|00802b3b4d0048000e0c000303033b02382b352c362a355633292b69644d012f000c00024d0228000e0c0002640310290e4f031b002100022b2a6929650209290e4f030b0021000265420e0e0e0e0e0e|@166,I229,@3794,I218,@5624| 5625:S41|535452554354555245535f28292e70617373345374727563747328332972657646696c746572283229 5626:O1|@5627 5627:C2,16|00802b3b4d0008002d0e0e0e7e030003|@761,I113| 5628:O3|1,@1093,@5850 5629:O4|-2,1,@5630,0 5630:O2|@5632,@5631 5631:O2|@5837,@5836 5632:O2|49,@5633 5633:O4|-3,0,@5634,@7264 5634:S9|6e616d655370616365 5635:O6|@5634,0,0,0,@5637,@5636 5636:O2|-1,@7332 5637:O2|-1,@7265 5638:O3|0,@5639,0 5639:O4|-2,1,@5640,0 5640:O2|@7266,@5641 5641:O2|@7271,@5656 5642:O3|1,@1093,@5644 5643:S6|616c6c466978 5644:O4|-3,@5645,@2773,@7267 5645:O2|@5646,0 5646:O4|-2,1,@5647,0 5647:O2|@5649,@5648 5648:O2|@5650,0 5649:O2|49,@544 5650:O2|50,@5651 5651:O4|-3,0,@5652,@7268 5652:S9|66697869747956616c 5653:O6|@5652,0,0,0,@5655,@5654 5654:O2|-1,@7270 5655:O2|-1,@7269 5656:O2|@7276,@5670 5657:O3|1,@1093,@5659 5658:S6|616c6c536967 5659:O4|-3,@5660,@2773,@7272 5660:O2|@5661,0 5661:O4|-2,1,@5662,0 5662:O2|@5649,@5663 5663:O2|@5664,0 5664:O2|50,@5665 5665:O4|-3,0,@5666,@7273 5666:S12|7369676e617475726556616c 5667:O6|@5666,0,0,0,@5669,@5668 5668:O2|-1,@7275 5669:O2|-1,@7274 5670:O2|@7281,@5684 5671:O3|1,@1093,@5673 5672:S6|616c6c56616c 5673:O4|-3,@5674,@2773,@7277 5674:O2|@5675,0 5675:O4|-2,1,@5676,0 5676:O2|@5649,@5677 5677:O2|@5678,0 5678:O2|50,@5679 5679:O4|-3,0,@5680,@7278 5680:S8|76616c756556616c 5681:O6|@5680,0,0,0,@5683,@5682 5682:O2|-1,@7280 5683:O2|-1,@7279 5684:O2|@7286,@5698 5685:O3|1,@1093,@5687 5686:S7|616c6c54797065 5687:O4|-3,@5688,@2773,@7282 5688:O2|@5689,0 5689:O4|-2,1,@5690,0 5690:O2|@5649,@5691 5691:O2|@5692,0 5692:O2|50,@5693 5693:O4|-3,0,@5694,@7283 5694:S7|7479706556616c 5695:O6|@5694,0,0,0,@5697,@5696 5696:O2|-1,@7285 5697:O2|-1,@7284 5698:O2|@7291,@5712 5699:O3|1,@1093,@5701 5700:S8|616c6c46756e6374 5701:O4|-3,@5702,@2773,@7287 5702:O2|@5703,0 5703:O4|-2,1,@5704,0 5704:O2|@5649,@5705 5705:O2|@5706,0 5706:O2|50,@5707 5707:O4|-3,0,@5708,@7288 5708:S10|66756e63746f7256616c 5709:O6|@5708,0,0,0,@5711,@5710 5710:O2|-1,@7290 5711:O2|-1,@7289 5712:O2|@7292,@5715 5713:O3|1,@5646,@1093 5714:S8|656e746572466978 5715:O2|@7293,@5718 5716:O3|1,@5661,@1093 5717:S8|656e746572536967 5718:O2|@7294,@5721 5719:O3|1,@5675,@1093 5720:S8|656e74657256616c 5721:O2|@7299,@5735 5722:O3|1,@1093,@5724 5723:S9|616c6c537472756374 5724:O4|-3,@5725,@2773,@7295 5725:O2|@5726,0 5726:O4|-2,1,@5727,0 5727:O2|@5649,@5728 5728:O2|@5729,0 5729:O2|50,@5730 5730:O4|-3,0,@5731,@7296 5731:S12|73747275637475726556616c 5732:O6|@5731,0,0,0,@5734,@5733 5733:O2|-1,@7298 5734:O2|-1,@7297 5735:O2|@7300,@5738 5736:O3|1,@5689,@1093 5737:S9|656e74657254797065 5738:O2|@7320,@5806 5739:O3|1,@544,@5741 5740:S9|6c6f6f6b7570466978 5741:O4|-3,@5742,@5743,@7301 5742:O2|@5651,0 5743:S6|6f7074696f6e 5744:O6|@5743,1,0,@5746,@5748,@5745 5745:O2|-1,@7319 5746:O2|@5747,0 5747:O3|3,@7302,79992 5748:O2|-1,@7303 5749:O3|1,@214,@5750 5750:O2|@5752,@5751 5751:O2|@5773,0 5752:O4|@5754,@219,@5755,@5753 5753:O4|-3,@5746,@5743,@7309 5754:S4|4e4f4e45 5755:O2|-1,@5756 5756:O2|5,@7304 5757:O5|0,@5758,@5772,@7305,@496 5758:O3|@225,@5760,@5759 5759:O2|@477,@5768 5760:O2|@229,@5761 5761:O3|@232,0,@5762 5762:O10|0,@5763,@502,0,0,0,0,0,0,0 5763:O1|@7306 5764:O5|0,@5766,@467,@7308,@5765 5765:O2|-7,@5767 5766:O2|@457,@7307 5767:O8|@508,@5754,0,0,1,0,0,0 5768:O2|@5770,@5769 5769:O1|@5771 5770:O2|@5769,0 5771:C2,16|00803b2c4d0008002d0e0e0e7e030003|@5754,I229| 5772:O2|-3,@5770 5773:O4|@5775,@992,@5776,@5774 5774:O3|1,@5747,@5753 5775:S4|534f4d45 5776:O2|-1,@5777 5777:O2|5,@7310 5778:O5|0,@5779,@5805,@7311,@2785 5779:O3|@225,@5781,@5780 5780:O2|@477,@5797 5781:O2|@229,@5782 5782:O3|@232,0,@5783 5783:O10|0,@5785,@5790,@5784,0,0,0,0,0,0 5784:O1|@7317 5785:O1|@7312 5786:O5|0,@5788,@467,@7314,@5787 5787:O2|-7,@5789 5788:O2|@457,@7313 5789:O8|@2797,@5775,0,0,1,0,0,0 5790:O1|@7315 5791:O5|0,@5788,@2805,@7316,@5792 5792:O2|-7,@5793 5793:O8|@4406,@5775,0,0,1,0,0,0 5794:O5|0,@5788,@2808,@7318,@5795 5795:O2|-7,@5796 5796:O8|@5089,@5775,0,0,1,0,0,0 5797:O4|@5799,@5801,@5800,@5798 5798:O1|@5804 5799:O3|@5801,@5800,@5798 5800:O1|@5803 5801:O1|@5802 5802:C3,24|00802b4d0011000e0e0c00024d0108002c8000020e0e0e0e|@5775,I105,I218| 5803:C1,8|00802b6801420e0e|@5775| 5804:C1,8|00802b35420e0e0e|@5775| 5805:O2|-3,@5799 5806:O2|@7322,@5811 5807:O3|1,@544,@5809 5808:S9|6c6f6f6b7570536967 5809:O4|-3,@5810,@5743,@7321 5810:O2|@5665,0 5811:O2|@7324,@5816 5812:O3|1,@544,@5814 5813:S9|6c6f6f6b757056616c 5814:O4|-3,@5815,@5743,@7323 5815:O2|@5679,0 5816:O2|@7325,@5819 5817:O3|1,@5703,@1093 5818:S10|656e74657246756e6374 5819:O2|@7327,@5824 5820:O3|1,@544,@5822 5821:S10|6c6f6f6b757054797065 5822:O4|-3,@5823,@5743,@7326 5823:O2|@5693,0 5824:O2|@7328,@5827 5825:O3|1,@5726,@1093 5826:S11|656e746572537472756374 5827:O2|@7330,0 5828:O3|1,@544,@5830 5829:S11|6c6f6f6b757046756e6374 5830:O4|-3,@5831,@5743,@7329 5831:O2|@5707,0 5832:O3|1,@544,@5834 5833:S12|6c6f6f6b7570537472756374 5834:O4|-3,@5835,@5743,@7331 5835:O2|@5730,0 5836:O2|@5842,0 5837:O2|50,@5838 5838:O3|1,@1093,@5839 5839:O4|-3,@5840,@5743,@7333 5840:O2|@5841,0 5841:O4|-3,0,@5110,@7334 5842:O2|51,@5843 5843:O4|-3,@5844,@2773,@7335 5844:O2|@5845,0 5845:O4|-3,0,@5846,@7336 5846:S9|756e6976657273616c 5847:O6|@5846,0,0,0,@5849,@5848 5848:O2|-1,@7338 5849:O2|-1,@7337 5850:O4|-2,1,@5851,0 5851:O2|@7339,@5852 5852:O2|@7341,@5855 5853:O4|-3,@5645,@2773,@7340 5854:S5|6669786573 5855:O2|@7343,@5858 5856:O4|-3,@5688,@2773,@7342 5857:S5|7479706573 5858:O2|@7345,@5861 5859:O4|-3,@5674,@2773,@7344 5860:S6|76616c756573 5861:O2|@7347,@5864 5862:O4|-3,@5702,@2773,@7346 5863:S8|66756e63746f7273 5864:O2|@7349,0 5865:O4|-3,@5660,@2773,@7348 5866:S10|7369676e617475726573 5867:O4|-3,@5725,@2773,@7350 5868:S10|73747275637475726573 5869:O2|@5871,@5870 5870:O2|@5872,0 5871:S21|6d616b65737472696e67496e4e616d655370616365 5872:O3|@7124,69,@5873 5873:O4|@5871,-1,@5875,@5874 5874:O3|1,@5876,@544 5875:O2|-2,2 5876:O4|-2,1,@5877,0 5877:O2|@5879,@5878 5878:O2|@5881,0 5879:O2|49,@5880 5880:O3|3,@7351,79992 5881:O2|50,@5633 5882:O2|@5884,@5883 5883:O2|@5885,0 5884:S16|7072696e74496e4e616d655370616365 5885:O3|@7124,69,@5886 5886:O4|@5884,-1,@5888,@5887 5887:O3|1,@5889,@1093 5888:O2|-2,-4 5889:O4|-2,1,@5890,0 5890:O2|@5892,@5891 5891:O2|@5881,@5894 5892:O2|49,@5893 5893:O3|3,@7352,79992 5894:O2|@5896,@5895 5895:O2|@5898,0 5896:O2|51,@5897 5897:O3|1,@544,@1093 5898:O2|52,@545 5899:O2|@5901,@5900 5900:O2|@5902,0 5901:S10|6d616b65737472696e67 5902:O3|@7124,69,@5903 5903:O4|@5901,-1,@5905,@5904 5904:O3|1,@5906,@544 5905:O2|-2,-2 5906:O3|3,@7353,79992 5907:O2|@5909,@5908 5908:O2|@5910,0 5909:S10|696e7374616c6c5f7070 5910:O3|@7124,69,@5911 5911:O4|@5909,-1,@5913,@5912 5912:O3|1,@5914,@1093 5913:O2|-2,1 5914:O3|1,@5916,@5915 5915:O3|1,@545,@5937 5916:O4|-2,1,@5917,0 5917:O2|@5919,@5918 5918:O2|@5921,@5920 5919:O2|49,@5897 5920:O2|@5929,@5928 5921:O2|50,@5922 5922:O3|1,@5923,@1093 5923:O4|-2,1,@5924,0 5924:O2|@5926,@5925 5925:O2|@5927,0 5926:O2|49,@545 5927:O2|50,@200 5928:O2|@5935,0 5929:O2|51,@5930 5930:O3|1,@5931,@1093 5931:O4|-2,1,@5932,0 5932:O2|@5926,@5933 5933:O2|@5934,0 5934:O2|50,@545 5935:O2|52,@5936 5936:O3|1,@1093,@1093 5937:O3|1,@5939,@5938 5938:O3|1,@5940,@1093 5939:O3|3,@7354,79992 5940:O3|3,@7355,79992 5941:O2|@5943,0 5942:S9|4e616d655370616365 5943:O3|@7151,69,@5944 5944:O3|@5942,@582,@5945 5945:O4|@5946,I48,0,0 5946:O4|-1,@7357,@7358,@7356 5947:O2|@5666,@5966 5948:O2|@5680,@5949 5949:O2|@5950,0 5950:O3|@7144,69,@5681 5951:O2|@5694,@5952 5952:O2|@5953,0 5953:O3|@7144,69,@5695 5954:O2|@5708,@5955 5955:O2|@5956,0 5956:O3|@7144,69,@5709 5957:O2|@5634,@5958 5958:O2|@5959,0 5959:O3|@7144,69,@5635 5960:O2|@5731,@5961 5961:O2|@5962,0 5962:O3|@7144,69,@5732 5963:O2|@5652,@5964 5964:O2|@5965,0 5965:O3|@7144,69,@5653 5966:O2|@5967,0 5967:O3|@7144,69,@5667 5968:O2|@5970,@5969 5969:O2|@5971,0 5970:S3|6d6f64 5971:O3|@7124,69,@5972 5972:O4|@5970,-1,@199,@5973 5973:O3|1,@201,@205 5974:O2|@2773,@5975 5975:O2|@5976,0 5976:O3|@7144,69,@2771 5977:O2|33,@5978 5978:O2|@5979,0 5979:O3|@7124,69,@5980 5980:O4|33,-1,@5982,@5981 5981:O3|1,@5987,@5986 5982:O2|-1,@5983 5983:O2|-7,@5984 5984:O8|@3060,@5985,0,0,1,0,0,0 5985:S4|21283129 5986:O3|3,@7361,79992 5987:O4|-3,@5988,@2513,@7360 5988:O2|@5986,0 5989:O2|@5743,@5990 5990:O2|@5991,0 5991:O3|@7144,69,@5744 5992:O2|@5754,@5993 5993:O2|@5994,0 5994:O3|@7124,69,@5752 5995:O2|42,@5996 5996:O2|@5997,0 5997:O3|@7124,69,@5998 5998:O4|42,-1,@199,@5973 5999:O2|@5110,@6000 6000:O2|@6001,0 6001:O3|@7144,69,@5108 6002:O2|43,@6003 6003:O2|@6004,0 6004:O3|@7124,69,@6005 6005:O4|43,-1,@199,@5973 6006:O2|126,@6007 6007:O2|@6008,0 6008:O3|@7124,69,@6009 6009:O4|126,-1,@199,@572 6010:O2|45,@6011 6011:O2|@6012,0 6012:O3|@7124,69,@6013 6013:O4|45,-1,@199,@5973 6014:O2|@6016,@6015 6015:O2|@6017,0 6016:S9|426f6f747374726170 6017:O3|@7151,69,@6018 6018:O3|@6016,@582,@6019 6019:O4|@6020,I48,0,0 6020:O4|-1,@7363,@7364,@7362 6021:O2|@6800,@6799 6022:O2|@6024,@6023 6023:O2|@6025,0 6024:S12|646973706c617946756e6374 6025:O3|@7124,69,@6026 6026:O4|@6024,-1,@6028,@6027 6027:O3|1,@6075,@1093 6028:O2|-1,@6029 6029:O2|-3,@6030 6030:O1|@6031 6031:C3,48|00802b352c362d372e382f39040700284d2b2b4d0019000e0e0c000450292f2f2b30304d010900220e0e0e7b070a0006|@6033,@280,@6032| 6032:O1|@6034 6033:S45|494e495449414c4953455f28292e696e6974476c6f62616c456e76283129646973706c617946756e6374283129 6034:C23,352|00842e3b4d0058010e0c0003030e2d384d014c012a2d0e0e7d0800022d23064d023d012a0e0c0002512d38304d0330010e0c00024d0428012a4d0523010c0003294d061b014d0517010c0003652a0e0e0e0c0002512d354d0705012a0e0c0002512f4d08fa000e0e0e0c00024d09f0000e0c0002294d0ae7004d0be3000c0003644d0cdb000c000203352d38304d08cf000c00024d09c8000e0c0002294d0dbf004d05bb000c0003642a0e0e0e0c0002512d354d0ea9002a0e0c00025102023b502f4d089a000e0e0e0c0002293b4d0f8e000e0e0e0c00030316404d1081000e0e0c0002294d0a77003b3b6b2965020429372964303c4d1166000e0e0e0c00032a2a323b33334d1256000e0e0e0c00075030384d1349002a0e0c00025130354d143d002a0e0c000251324d1532000e0e0e0c0002323c4d1126000e0e0e0c00032a2a343c220c220c4d1214000e0c00075032373b2a320e0e7d0d00020e0e0e0e|@6036,I232,@1028,@342,@5601,@6037,@353,@412,@342,@2054,@2403,I48,I24,I218,@1673,@6035,I229,@1564,I107,@6038,@6074,@6035,@2051| 6035:O2|1,3 6036:S30|56414c55455f4f505328292e646973706c617946756e63746f7273283529 6037:S8|66756e63746f7220 6038:O3|@6040,@6067,@6039 6039:O2|@6071,@6038 6040:C17,272|00853b2f23064d0006012a0e0e0c0002512f384d01f9002a0e0c000251303c4d02ed000e0e0c000303192f354d03e0002a0c0002512f384d04d5002a0e0c00025102a73c28403b4d05c5000e0e0c0004324d06bb000c00024d07b4000e0c00022929372964033829363b2a0e0e0c00022d3b4d089a000e0e0e0c00032a2a692f3b2b4d098a000e0e0e0c0004502d353b2a0c000229250726061e38260602023b50504d0a6a002b3b4d0864000e0c0003292b4d0b5a000e0e0e0c000329293b4d0c4d000e0e0c000303043b50021a29352a362a352b360e0e0e4f0d3300a0000350292503511e285126062f354d0e20002a0c0002512f384d0f15002a0e0c0002512f373b2a2e0e0e7d0a00020e0e0e0e|@6042,@6043,@911,I232,@338,@1028,I11,@2083,@2180,I253,I255,@6044,@3009,I229,@6041,@338,@873| 6041:C18,352|00812b4d0059010e0e0c0002033a560a29354d014a012a0e0e0c0002512c4d023e010e0e0e0c0002562b293c4d0330010e0c0003564a565856672e2d2d2d2d57c7220e7b070b00062b4d0413010c0002033a560a29354d0106012a0e0e0c0002512c4d05fa000e0e0e0c0002562b293c4d03ec000e0c0003564a565856672e2d2d2d2d57c8220e7b070b00062b4d06cf000c0002032e560a29354d01c2002a0e0e0c0002512c4d07b6000e0e0e0c0002562b563a56472c2c2c2c4d08a200347b060900052b4d0997000c000203512b4d0a8d000e0e0c00022936294d0b81000e0e0c00024d0c78000e0c000203033b022b562a29354d0167002a0e0e0e0c000251563b564a565856672f2d2d2d2d4d0d4e00220e0e0e0e7b070b000665023a2b4d0e3c000e0c0002032e560a29354d012e002a0e0e0c0002512c4d0f22000e0e0e0c0002562b563a2b2b2b4d101100320e0e0e7b050800043b430e0e0e0e0e0e|@6053,@2001,@1799,@2000,I107,@2007,@2006,@2019,@2018,@6054,@2025,@2024,I105,I218,@6052,@2013,@2012,@1867| 6042:S25|56414c55455f4f505328292e646973706c6179536967283629 6043:O2|0,1 6044:O1|@6045 6045:C2,16|00804d000a002c69420e0e0e0e0e0e0e|@6047,@6046| 6046:C2,24|00802b352c365627355637364d0008002f0e0e7b06030005|@6049,@6048| 6047:S33|56414c55455f4f505328292e646973706c61795369672836296f72646572283129 6048:O1|@6050 6049:S36|56414c55455f4f505328292e646973706c61795369672836296f72646572283129283129 6050:C2,16|00832c2f4d0008002d0e0e0e7e060003|@6051,I29| 6051:S33|56414c55455f4f505328292e646973706c61795369672836296f72646572283429 6052:O1|@6064 6053:S39|56414c55455f4f505328292e646973706c6179536967283629646973706c617953706563283229 6054:O1|@6055 6055:C23,352|00833b4d0059010e0e0c00022e3b4d014e010e0e0e0c0003030e2d384d0240012a2e0e0e7d0800022f4d0333010c00023b2a4d042a010e0e0e0c0003644d051f010c0002039e3b3b314d0613010c00020402002a2a4d0707010c00035029363223064d08fa002a0e0e0c00025132384d09ed002a0e0c00025132354d0ae1002a0e0c000251344d0bd6000e0e0e0c000229220c31220d220d4d0cc4000e0c00065033382b4d0db8004d0eb4000e0c00032a0c000251220c4d03a5000e0e0c0002220c3c4d0f99000e0e0c00032a2a0e0e0e4f108b00a0000350220c373b2a220d7d1000022f4d0677000c00020402002a2a4d076b000c00035029363023064d115e002a0e0e0c0002513038334d1250000e0c000203064d13460002044d1440002a0c00025130354d1535002a0e0c000251324d0b2a000e0e0e0c000229332f34344d0c1b000c00065031382b2a0c00025131373b2a320e0e7d0c00020e0e0e0e|@6057,@1689,I232,@1028,@2172,I229,I218,@1751,@1754,@342,@884,@1799,@2106,@1802,@1677,@353,I107,@6056,@356,@2100,@880,@854,@338| 6056:C8,192|00812c3b4d00b8000e0c000303033b02ab2c352d3656282923064d01a2002a0e0e0c0002512b4d0296000e0e0e0c00022c4d038b000c00023c2b2b330e4f047f0081000550303c4d0575000e0e0c00032d2a2a3b4d0068000e0c000303043b50024b2a352b362b3b4d0654000e0c000303043b5002362a4d0245000e0e0c00022b4d033b000c00023b2b2b300e4f042f00f10005502d3c4d0525000e0e0c00032c2a2507250726051e5626035151566829373b2a340e0e0e7d0c0002430e0e0e|@6059,I229,@6060,@1827,@2338,@6058,I107,I234| 6057:S33|545950455f5452454528292e646973706c617954797065436f6e73747273283429 6058:C19,408|00832e0312560829354d008b012a0e0e0e0c000265020e560829354d0179012a0e0c00026556182923064d026a012a0e0e0c00025156282923064d035a012a0e0e0c000251310310563829354d0448012a0c00022603023a56382923064d0537012a0e0e0e0c00025156482938287c2a0e0c000251565829354d061b012a0e0e0e0c000251566829373b2a0e0e0c000226062e3b4d0700010e0c00030312563829384d08f2002a0e0e0c00022603024f56382938322a0e0e0e0c000251304d09d6000e0e0e0c0002030e304d0ac9000e0e0c00023c6402013b0321564829354d0bb5002a0e0c000251565829384d0ca7002a0e0e0e0c0002260402023b5050563829373b2a0c000251304d098a000e0e0e0c0002030e304d0a7d000e0e0c00023c6402013b030b2f3b4d0d6b000c000302013b0353564829354d0e5b002a0e0e0e0c000251314d094e000e0e0e0c0002030e314d0a41000e0e0c0002296402054d0f3400102935323c4d102b000c00035688569456a72d2d2d2d2d4d1119000e0e0c0006260802023b50564829373b2a320e0e0e7d0c0002|@6062,@1799,@338,@342,@342,@6063,@342,@1799,I232,@1028,@1778,@1780,@6061,@848,I233,@6061,@621,I107,@1704| 6059:S50|545950455f5452454528292e646973706c617954797065436f6e737472732834297056616c436f6e7374724c697374283229 6060:O2|2,1 6061:O2|1,4 6062:S46|545950455f5452454528292e646973706c617954797065436f6e737472732834297056616c436f6e737472283429 6063:O2|0,2 6064:C34,576|00842f35303631373238323b4d0030020e0c0003030e31384d0124022a310e0e7d0c00022b4d0217020c000207d02a4d030d020e0e0c000207d22a4d0401020e0e0c00023223064d05f5012a0e0c00025132384d06e9012a0e0c00025132354d07dd012a0e0c00025132382e4d08d0014d09cc010e0c00032a0c00025132354d0abd012a0e0c0002517876223b2c4d0bae010e0e0e0c0002292f2210221022104d0c9c010e0c00066405260e0e0e00ff6d29353c4d0d88010e0c000303054d0e7e0110020033384d0f75012a0e0c0002655032354d1068012a0c0002513223064d115c012a0c0002513238283a2a0e0e0e0c00025132354d1245012a020298000e0c0002513b4d13360102022a000e0e0e0c00022b220c220c2c220c4d1420010e0c00065033373b2a0c00025133373b2a330e0e7d0e00023123064d1501012a0e0c00025131384d16f5002e4d09f0000e0c0003294d17e7004d09e3000c0003642a0e0e0e0c00025131354d18d1002a0e0c0002513b4d13c6000e0e0e0c00022a34342c344d14b7000c00065032373b2a320e0e7d0d00022b3b4d0da2000e0e0e0c000303923123064d1993002a0e0e0e0c00025131384d1a85002a0e0c00025131354d1b79002a0e0c00025131382d2a0c0002514d1c67002a354d0d61000e0e0c00034d1d58000e0c0002033d31354d1e4c002a0c00025131384d1f41002a0e0c00025131354d2035002a0e0c0002513b4d132a000e0e0e0c00022a34342c344d141b000c00065102023b5031373b2a310e0e7d0c00023b27041f050e0e0e|@6066,I232,@1028,@5496,@2425,@2415,@342,@898,@338,@1677,@353,@6035,@4861,@4849,I229,@64,@1253,@338,@342,@6035,@1689,@1704,@342,@6065,@1673,@6035,@342,@907,@344,-1,I218,@344,@848,@6035| 6065:S4|76616c20 6066:S28|56414c55455f4f505328292e646973706c617956616c756573283529 6067:O2|@6068,@6038 6068:C9,120|00842e3b4d0070000e0c0003030e2d384d0164002a2d0e0e7d0800022d23064d0255002a0e0c0002512d38304d0348000e0c00024d0440002a4d053b000c0003294d0633004d052f000c0003652a0e0e0e0c0002512d354d071d002a0e0c0002512f2f2f3c303056670c0007502d373b2a2d0e0e7d080002|@6070,I232,@1028,@342,@2364,@6069,@353,@1677,@1799| 6069:S10|7369676e617475726520 6070:S32|56414c55455f4f505328292e646973706c61795369676e617475726573283529 6071:C18,280|00842e3b4d0010010e0c0003030e2d384d0104012a2d0e0e7d0800022f4d02f7000c0002030e2d384d03ec002a2d0e0e7d0800022f4d04df000c0002303b4d05d6000e0e0e0c00030316404d06c9000e0e0c0002294d07bf003b3b6b29650204303729644d08b0000e0c00022f23064d09a5002a0e0c0002512f384d0a99002c4d0b94000e0c0003294d0c8b004d0b87000c0003642a0e0e0e0c0002512f354d0d75002a0e0c000251294d076a004d0e66000e0e0e0c00034d0f5c000e0c0002030d2f382a2a0e0e0e0c000251023f313b4d0543000c00030316404d0639000e0e0c0002294d072f003b3b6b2965020431372964313c4d101e000e0e0e0c00032a2a333c343456a70e0c000726032f373b2a2f0e7d0a0002|@6073,I232,@1028,@2036,@1675,@2403,I229,@1564,I48,@2364,@342,@6072,@353,@1673,@1799,I24,I218,I107| 6072:S10|73747275637475726520 6073:S32|56414c55455f4f505328292e646973706c617953747275637475726573283529 6074:S3|29203a 6075:O4|-2,1,@6076,0 6076:O2|@6078,@6077 6077:O2|@5934,@6079 6078:O2|49,@5707 6079:O2|@6081,@6080 6080:O2|@6083,@6082 6081:O2|51,@5633 6082:O2|@6084,0 6083:O2|52,@200 6084:O2|53,@5897 6085:O2|@6087,@6086 6086:O2|@6088,0 6087:S10|646973706c6179536967 6088:O3|@7124,69,@6089 6089:O4|@6087,-1,@6091,@6090 6090:O3|1,@6096,@1093 6091:O2|-1,@6092 6092:O2|-3,@6093 6093:O1|@6094 6094:C3,48|00802b352c362d372e382f39040700284d2b2b4d0019000e0e0c000450292f2f2b30304d010900220e0e0e7b070a0006|@6095,@280,@6067| 6095:S43|494e495449414c4953455f28292e696e6974476c6f62616c456e76283129646973706c6179536967283129 6096:O4|-2,1,@6097,0 6097:O2|@6098,@6077 6098:O2|49,@5665 6099:O2|@6101,@6100 6100:O2|@6102,0 6101:S17|636f6d70696c65724f7574707574546167 6102:O3|@7124,69,@6103 6103:O4|@6101,-1,@6105,@6104 6104:O4|-3,@6107,@6108,@7366 6105:O2|-1,@6106 6106:O2|-3,@7180 6107:O2|@5897,0 6108:S3|746167 6109:O6|@6108,1,0,@6111,@6113,@6110 6110:O2|-1,@7369 6111:O2|@6112,0 6112:O3|3,@7367,79992 6113:O2|-1,@7368 6114:O2|@6116,@6115 6115:O2|@6117,0 6116:S16|6d6178496e6c696e6553697a65546167 6117:O3|@7124,69,@6118 6118:O4|@6116,-1,@6120,@6119 6119:O4|-3,@6122,@6108,@7370 6120:O2|-1,@6121 6121:O2|-3,@7242 6122:O2|@545,0 6123:O2|@6125,@6124 6124:O2|@6126,0 6125:S15|617373656d626c79436f6465546167 6126:O3|@7124,69,@6127 6127:O4|@6125,-1,@6129,@6128 6128:O4|-3,@6131,@6108,@7371 6129:O2|-1,@6130 6130:O2|-3,@7243 6131:O2|@200,0 6132:O2|@6134,@6133 6133:O2|@6135,0 6134:S14|636f6e76537472696e674e616d65 6135:O3|@7124,69,@6136 6136:O4|@6134,-1,@6137,@544 6137:O2|-1,@6138 6138:O2|-3,@1292 6139:O2|@6141,@6140 6140:O2|@6142,0 6141:S17|696e6c696e6546756e63746f7273546167 6142:O3|@7124,69,@6143 6143:O4|@6141,-1,@6145,@6144 6144:O4|-3,@6131,@6108,@7372 6145:O2|-1,@6146 6146:O2|-3,@7247 6147:O2|@6149,@6148 6148:O2|@6150,0 6149:S7|6d6c3930546167 6150:O3|@7124,69,@6151 6151:O4|@6149,-1,@6153,@6152 6152:O4|-3,@6131,@6108,@7373 6153:O2|-1,@6154 6154:O2|-3,@7190 6155:O2|@6157,@6156 6156:O2|@6158,0 6157:S11|636f646574726565546167 6158:O3|@7124,69,@6159 6159:O4|@6157,-1,@6161,@6160 6160:O4|-3,@6131,@6108,@7374 6161:O2|-1,@6162 6162:O2|-3,@7182 6163:O2|@6165,@6164 6164:O2|@6166,0 6165:S10|646973706c617956616c 6166:O3|@7124,69,@6167 6167:O4|@6165,-1,@6169,@6168 6168:O3|1,@6174,@1093 6169:O2|-1,@6170 6170:O2|-3,@6171 6171:O1|@6172 6172:C3,48|00802b352c362d372e382f39040700284d2b2b4d0019000e0e0c000450292f2f2b30304d010900220e0e0e7b070a0006|@6173,@280,@6052| 6173:S43|494e495449414c4953455f28292e696e6974476c6f62616c456e76283129646973706c617956616c283129 6174:O4|-2,1,@6175,0 6175:O2|@6176,@6077 6176:O2|49,@5679 6177:O2|@6179,@6178 6178:O2|@6180,0 6179:S14|7072696e74537472696e67546167 6180:O3|@7124,69,@6181 6181:O4|@6179,-1,@6183,@6182 6182:O4|-3,@6107,@6108,@7375 6183:O2|-1,@6184 6184:O2|-3,@7252 6185:O2|@6187,@6186 6186:O2|@6188,0 6187:S13|646973706c6179537472756374 6188:O3|@7124,69,@6189 6189:O4|@6187,-1,@6191,@6190 6190:O3|1,@6196,@1093 6191:O2|-1,@6192 6192:O2|-3,@6193 6193:O1|@6194 6194:C3,48|00802b352c362d372e382f39040700284d2b2b4d0019000e0e0c000450292f2f2b30304d010900220e0e0e7b070a0006|@6195,@280,@6039| 6195:S46|494e495449414c4953455f28292e696e6974476c6f62616c456e76283129646973706c6179537472756374283129 6196:O4|-2,1,@6197,0 6197:O2|@6198,@6077 6198:O2|49,@5730 6199:O2|@6201,@6200 6200:O2|@6202,0 6201:S12|706172736574726565546167 6202:O3|@7124,69,@6203 6203:O4|@6201,-1,@6205,@6204 6204:O4|-3,@6131,@6108,@7376 6205:O2|-1,@6206 6206:O2|-3,@7183 6207:O2|@6209,@6208 6208:O2|@6210,0 6209:S13|6c696e654c656e677468546167 6210:O3|@7124,69,@6211 6211:O4|@6209,-1,@6213,@6212 6212:O4|-3,@6122,@6108,@7378 6213:O2|-1,@6214 6214:O2|-3,@7377 6215:O2|@6220,@7174 6216:O2|@6217,@7174 6217:C2,32|00802b3556174d0016000e0e0e0c000303033c0202020202013b420e0e0e0e0e|@617,I251| 6218:O2|@6219,@7174 6219:C1,16|008056072928452e6a64420e0e0e0e0e|@617| 6220:C3,40|00802b3556174d001e000e0e0e0c000303062b3729640202020202054d01080010420e0e0e0e0e0e|@617,I251,@621| 6221:O2|@6223,@6222 6222:O2|@6224,0 6223:S11|6465627567676572546167 6224:O3|@7124,69,@6225 6225:O4|@6223,-1,@6227,@6226 6226:O4|-3,@6231,@6108,@7380 6227:O2|-1,@6228 6228:O2|-3,@7379 6229:O2|@6230,@7250 6230:C1,16|008056072928452e6a64420e0e0e0e0e|@617| 6231:O2|@6232,0 6232:O3|1,@6233,@1093 6233:O4|-2,1,@6234,0 6234:O2|@5926,@6235 6235:O2|@5678,@6236 6236:O2|@6238,@6237 6237:O2|@6240,@6239 6238:O2|51,@545 6239:O2|@6242,@6241 6240:O2|52,@544 6241:O2|@6243,0 6242:O2|53,@544 6243:O2|54,@5633 6244:O2|@6246,@6245 6245:O2|@6247,0 6246:S14|70737461636b5472616365546167 6247:O3|@7124,69,@6248 6248:O4|@6246,-1,@6250,@6249 6249:O4|-3,@6131,@6108,@7382 6250:O2|-1,@6251 6251:O2|-3,@7381 6252:O2|@6257,@7167 6253:O2|@6254,@7167 6254:C2,32|00802b3556174d0016000e0e0e0c000303033c0202020202013b420e0e0e0e0e|@617,I251| 6255:O2|@6256,@7167 6256:C1,16|008056072928452e6a64420e0e0e0e0e|@617| 6257:C3,40|00802b3556174d001e000e0e0e0c000303062b3729640202020202054d01080010420e0e0e0e0e0e|@617,I251,@621| 6258:O2|@6260,@6259 6259:O2|@6261,0 6260:S11|676c6f62616c5370616365 6261:O3|@7124,69,@6262 6262:O4|@6260,-1,@6263,@5633 6263:O2|-1,@6264 6264:O2|-3,@7383 6265:O2|@6347,@183 6266:O2|@6267,@183 6267:C3,32|0080560729352a364d0014002a69292c4d010c00310e0e0e7e0700030e0e0e0e|@6269,@6270,@6268| 6268:O1|@6282 6269:S25|4d414b455f28292e6462456e76416c6c283129283129283129 6270:C4,32|00805607294d0017004d0113000c00034d020c002a2a2f0e7d0600020e0e0e0e|@6272,@7203,@6273,@6271| 6271:O1|@6281 6272:S22|4d414b455f28292e6462456e76416c6c283329283129 6273:O1|@6274 6274:C3,80|00814d004a002c692d4d0143000c00022929372964032d2e352a363b2a0c0002293629662a0c0002640309292c2f0e0e7d07000229353b2a0e0c00026425011e2e3b0208292c2f0e7d07000266430e0e|@6276,@6275,@2180| 6275:C3,80|00802b29372964032b561729352b363b2a0c0002293629662a0c00026503033c021029353b2a0e0e0e0c00026425011e2c3b02013b644d0016002b56372f6b4d010d0056372f6a2a2a2d6a292704420e|@6278,@6279,@6277| 6276:S34|556e6976657273616c5461626c652e756e69764f7665725370656369666963283229 6277:C1,40|0080560829363b2a0e0c000229352a36565729372b2a0e0e0e0c0002642c2a692707420e0e0e0e0e|@6280| 6278:S45|556e6976657273616c5461626c652e756e69764f76657253706563696669632832296d616b6549746572283129 6279:C1,80|0080560929353b2a0e0c000229293729640331564829352b363b2a0e0e0c0002293629662a0c0002650309295657300e7d07000229353b2a0e0c00026425011e323b0208295657307d0700022704420e|@6280| 6280:S48|556e6976657273616c5461626c652e756e69764f76657253706563696669632832296d616b6549746572283129283129 6281:C2,48|00802b37296403202b363b2a0e0c00022d353b2a0e0c0002644d0013000c00022a2a6929270402013b420e0e0e0e0e0e|@4871,@6271| 6282:C12,288|00813b4d0019010e0e0c00024d0110014d020c010e0c00023b2e3b4d0301010e0e0c0003293c4d04f6000e0e0e0c00036403033b0226291b204e4d05e2000e0e0e0c000303033b0213293c4d06d1000e0e0c0003292502501e3f3b64642e4d07be000e0e0e0c0002293b4d05b2000e0e0e0c000303033b02103c304d08a1000e0e0c000326031e6e3b657876093b3b330e0c0002054500ff6d2f4d0982000e0e0e0c0002293c4d0576000e0e0e0c000303043b500217303b3c4d0a63000c0004503d314d0859000e0e0c0003502d4d024e000e0e0e0c0002502a102f4d0940000e0c0002293c4d0536000e0e0e0c000303043b500217303b3c4d0a23000c0004503d314d0819000e0e0c0003502d4d020e000e0e0e0c0002502a2705430e0e0e|@6284,@71,@6283,@74,I253,I251,I229,I106,I71,I73,I70,I255| 6283:O2|@4424,0 6284:S18|4d414b455f28292e70726f74656374283229 6285:O2|@6286,@183 6286:C3,32|0080560729352a364d0014002a69292c4d010c00310e0e0e7e0700030e0e0e0e|@6269,@6287,@6268| 6287:C4,32|00805607294d0017004d0113000c00034d020c002a2a2f0e7d0600020e0e0e0e|@6272,@7200,@6273,@6288| 6288:O1|@6289 6289:C2,48|00802b37296403202b363b2a0e0c00022d353b2a0e0c0002644d0013000c00022a2a6929270402013b420e0e0e0e0e0e|@4871,@6288| 6290:O2|@6291,@183 6291:C3,32|0080560729352a364d0014002a69292c4d010c00310e0e0e7e0700030e0e0e0e|@6269,@6292,@6268| 6292:C4,32|00805607294d0017004d0113000c00034d020c002a2a2f0e7d0600020e0e0e0e|@6272,@7197,@6273,@6293| 6293:O1|@6294 6294:C2,48|00802b37296403202b363b2a0e0c00022d353b2a0e0c0002644d0013000c00022a2a6929270402013b420e0e0e0e0e0e|@4871,@6293| 6295:O2|@6296,@183 6296:C3,32|0080560729352a364d0014002a69292c4d010c00310e0e0e7e0700030e0e0e0e|@6269,@6297,@6268| 6297:C4,32|00805607294d0017004d0113000c00034d020c002a2a2f0e7d0600020e0e0e0e|@6272,@7205,@6273,@6298| 6298:O1|@6299 6299:C2,48|00802b37296403202b363b2a0e0c00022d353b2a0e0c0002644d0013000c00022a2a6929270402013b420e0e0e0e0e0e|@4871,@6298| 6300:O2|@6301,@183 6301:C3,32|0080560729352a364d0014002a69292c4d010c00310e0e0e7e0700030e0e0e0e|@6269,@6302,@6268| 6302:C4,32|00805607294d0017004d0113000c00034d020c002a2a2f0e7d0600020e0e0e0e|@6272,@7198,@6273,@6303| 6303:O1|@6304 6304:C2,48|00802b37296403202b363b2a0e0c00022d353b2a0e0c0002644d0013000c00022a2a6929270402013b420e0e0e0e0e0e|@4871,@6303| 6305:O2|@6306,@183 6306:C3,32|00802b352c36562729352a364d0010002d2f2c6b292c4d010600330e7e090003|@6308,@6307,@6268| 6307:C3,32|00805609561856272b4d0013002c2c4d010d00320e0e0e7b060600050e0e0e0e|@6309,@7203,@1972| 6308:S27|4d414b455f28292e6462456e76456e746572283129283129283129 6309:S24|4d414b455f28292e6462456e76456e746572283429283129 6310:O2|@6311,@183 6311:C3,32|00802b352c36562729352a364d0010002d2f2c6b292c4d010600330e7e090003|@6308,@6312,@6268| 6312:C3,32|00805609561856272b4d0013002c2c4d010d00320e0e0e7b060600050e0e0e0e|@6309,@7200,@1972| 6313:O2|@6314,@183 6314:C3,32|00802b352c36562729352a364d0010002d2f2c6b292c4d010600330e7e090003|@6308,@6315,@6268| 6315:C3,32|00805609561856272b4d0013002c2c4d010d00320e0e0e7b060600050e0e0e0e|@6309,@7197,@1972| 6316:O2|@6317,@183 6317:C3,32|0080560729352a364d0014002a69292c4d010c00310e0e0e7e0700030e0e0e0e|@6269,@6318,@6268| 6318:C4,32|00805607294d0017004d0113000c00034d020c002a2a2f0e7d0600020e0e0e0e|@6272,@7202,@6273,@6319| 6319:O1|@6320 6320:C2,48|00802b37296403202b363b2a0e0c00022d353b2a0e0c0002644d0013000c00022a2a6929270402013b420e0e0e0e0e0e|@4871,@6319| 6321:O2|@6322,@183 6322:C3,32|00802b352c36562729352a364d0010002d2f2c6b292c4d010600330e7e090003|@6308,@6323,@6268| 6323:C3,32|00805609561856272b4d0013002c2c4d010d00320e0e0e7b060600050e0e0e0e|@6309,@7205,@1972| 6324:O2|@6325,@183 6325:C3,32|0080560729352a364d0014002f2b6a292c4d010b00310e0e7e0700030e0e0e0e|@6327,@6326,@6268| 6326:C3,24|0080560856172a4d000d002b4d010800300e0e7b05050004|@6328,@7203,@1962| 6327:S28|4d414b455f28292e6462456e764c6f6f6b7570283129283129283129 6328:S25|4d414b455f28292e6462456e764c6f6f6b7570283329283129 6329:O2|@6330,@183 6330:C3,32|0080560729352a364d0014002f2b6a292c4d010b00310e0e7e0700030e0e0e0e|@6327,@6331,@6268| 6331:C3,24|0080560856172a4d000d002b4d010800300e0e7b05050004|@6328,@7200,@1962| 6332:O2|@6333,@183 6333:C3,32|0080560729352a364d0014002f2b6a292c4d010b00310e0e7e0700030e0e0e0e|@6327,@6334,@6268| 6334:C3,24|0080560856172a4d000d002b4d010800300e0e7b05050004|@6328,@7197,@1962| 6335:O2|@6336,@183 6336:C3,32|00802b352c36562729352a364d0010002d2f2c6b292c4d010600330e7e090003|@6308,@6337,@6268| 6337:C3,32|00805609561856272b4d0013002c2c4d010d00320e0e0e7b060600050e0e0e0e|@6309,@7198,@1972| 6338:O2|@6339,@183 6339:C3,32|0080560729352a364d0014002f2b6a292c4d010b00310e0e7e0700030e0e0e0e|@6327,@6340,@6268| 6340:C3,24|0080560856172a4d000d002b4d010800300e0e7b05050004|@6328,@7205,@1962| 6341:O2|@6342,@183 6342:C3,32|00802b352c36562729352a364d0010002d2f2c6b292c4d010600330e7e090003|@6308,@6343,@6268| 6343:C3,32|00805609561856272b4d0013002c2c4d010d00320e0e0e7b060600050e0e0e0e|@6309,@7202,@1972| 6344:O2|@6345,@183 6345:C3,32|0080560729352a364d0014002f2b6a292c4d010b00310e0e7e0700030e0e0e0e|@6327,@6346,@6268| 6346:C3,24|0080560856172a4d000d002b4d010800300e0e7b05050004|@6328,@7198,@1962| 6347:C3,32|0080560729352a364d0014002f2b6a292c4d010b00310e0e7e0700030e0e0e0e|@6327,@6348,@6268| 6348:C3,24|0080560856172a4d000d002b4d010800300e0e7b05050004|@6328,@7202,@1962| 6349:O2|@6351,@6350 6350:O2|@6352,0 6351:S11|646973706c617954797065 6352:O3|@7124,69,@6353 6353:O4|@6351,-1,@6355,@6354 6354:O3|1,@6360,@1093 6355:O2|-1,@6356 6356:O2|-3,@6357 6357:O1|@6358 6358:C3,48|00802b352c362d372e38040700284d2b2b4d001b000c000450292e2e2b2f4d010e00220c0e0e0e7b060900050e0e0e0e|@6359,@280,@6054| 6359:S44|494e495449414c4953455f28292e696e6974476c6f62616c456e76283129646973706c617954797065283129 6360:O4|-2,1,@6361,0 6361:O2|@6363,@6362 6362:O2|@5934,@6364 6363:O2|49,@5693 6364:O2|@6366,@6365 6365:O2|@6367,0 6366:O2|51,@200 6367:O2|52,@5897 6368:O2|@6370,@6369 6369:O2|@6371,0 6370:S13|6c696e654e756d626572546167 6371:O3|@7124,69,@6372 6372:O4|@6370,-1,@6374,@6373 6373:O4|-3,@6376,@6108,@7384 6374:O2|-1,@6375 6375:O2|-3,@7157 6376:O2|@6377,0 6377:O3|1,@1093,@545 6378:O2|@6380,@6379 6379:O2|@6381,0 6380:S3|757365 6381:O3|@7124,69,@6382 6382:O4|@6380,-1,@6383,@5897 6383:O2|-1,@6384 6384:O2|-3,@6385 6385:O3|@6387,@183,@6386 6386:O18|@6468,@6473,@6478,@6483,@6488,@6493,@6496,@6499,@6502,@6507,@6510,@6513,@6516,@6519,@6522,@6525,@6528,@6467 6387:C36,800|00802b4d0019034d0115030e0e0c000303064d020a0302082b4d0303030c00023c28403c4d04f8020e0c00043c28403b4d04ec020e0c00044d05e4022b2b2e6b4d06dc023069787adb3b2e3b4d07d0020e0c00034d08c8020e0c000207dd56884d09bc024d0ab8020e0c00024d0bb00232694d0caa020e0e0e0c00024d0da00230694d0e9a020e0e0e0c000228324d0f8e020e0e0e0c0002293b692b2a692d2a692f2a6931220e2b4d1074020e0c00043b2a0e0e0e0c000229352a362b372c382d392e3a2e293b4d1155020e0e0c000303043b50023029352a362a352b36121f000100010029352a364d1233022d2f2c6b292c4d1329020e0e0c0003502f250926081e3d2608502c293b4d1112020e0e0e0c000303043b50023829352a362a352b3602024c01121f000100010029352a364d14eb012d2f2c6b02023001292c4d13dd010e0e0c0003502f250926081e4626085029293b4d11c6010e0e0e0c000303043b50023029352a362a352b36121f000100010029352a364d15a3012d2f2c6b292c4d1399010e0e0c0003502f250926081e3e2608502a293b4d1182010e0e0e0c000303043b50023029352a362a352b36121f000100010029352a364d165f012d2f2c6b292c4d1355010e0e0c0003502f250926081e3e2608502b293b4d113e010e0e0e0c000303043b50023029352a362a352b36121f000100010029352a364d171b012d2f2c6b292c4d1311010e0e0c0003502f250926081e3e2608502d293b4d11fa000e0e0e0c000303043b50023029352a362a352b36121f000100010029352a364d18d7002d2f2c6b292c4d13cd000e0e0c0003502f250926081e3e260826120600e2fd3b271102013b059b0e0e00ff6d293528674d11a3000c0003031829372f4d1997004d1a93000c00035028674d1b89002b6a100200293c4d077e000e0e0e0c00034d1c74002a4d1d6f000c0003294d1e67004d1d63000c00034d1f5c003b4d0757000c0003292b4d204e000e0e0e0c0003504d1f43003b4d073e000e0e0e0c000329392a4d2131002b4d222c000e0c000450344d1922004d1a1e000e0e0e0c0003502f10502d4d190f004d1a0b00320e0e7e0800030e0e0e0e|@6389,I48,I24,@6390,@6391,I11,@6398,@6441,I253,I218,@6448,@698,@6451,@686,@6453,@618,@3153,@604,I229,@6455,@6268,@6456,@6457,@6458,@6459,@6460,@6461,@6399,@382,@727,@353,@6388,@7130,@248,@102,@50| 6388:S8|207261697365640a 6389:S27|4d414b455f28292e757365496e746f456e76283129757365283129 6390:O2|@7108,@8 6391:O1|@6392 6392:C11,200|008078760d3b3e3b304d00bb000c0004054500ff6d29354d01ad004d02a9000e0e0c000303032902020202022929353c4d0394000e0c000303064d048a000202020202122c2a4d057e006a4d0179004d0675002b6a64107876103b280f2d3b4d0065000e0e0c0004050700ff6d1b0004642928204d0750000e0c00033c28403b4d0844000e0c00043c28404d0939004d0835000e0e0c00042a312f2e2d68053b2a693c28402b4d081e000e0e0e0c00043c28483c4d0810000e0c00042a2a6929270a420e0e0e0e0e|@6394,I61,@7106,I251,I229,@64,@6395,@54,@6393,I11,-1| 6393:O1|@6396 6394:S16|54657874494f2e6f70656e496e283129 6395:S13|54657874494f2e6f70656e496e 6396:C14,176|00812c4d00a9000e0e0c0002030c2c3b4d019c000e0c000302013b03032c02054d028c0010293b4d0385000e0e0c000303033c0238294d0476004d0572000e0e0e0c000303054d06660010293f4d075f000c0003293c4d0856000e0e0e0c0003293f4d094a000e0e0e0c0003652928413b4d0a3b000c00043b2c2a4d0b31000e0e0c000303043b50021a2a2a314d0c1f000c000450293c4d0715000e0e0c000325011e29502b2a69292704430e0e0e0e|@6397,I105,I231,@87,I229,67108856,I249,@87,I239,I240,I241,I11,I248,I254| 6397:S18|4368617241727261792e6172726179283229 6398:C9,120|00805609294d006f004d016b000c0003294d0263000c00024d035c000e0c00020340293529404d044e000e0e0e0c0003032c56375647293b4d053c000e0c0003293c4d0632000e0e0e0c00032c3b2b4d0725000e0e0c0004502e270402012a6402115628293b3c4d070d000e0e0c0004503b6465420e0e0e|@6400,@6401,@6399,I105,I218,I229,I253,I106,I255| 6399:O1|@6439 6400:S37|4d414b455f28292e757365496e746f456e7628312975736528312967657443686172283129 6401:O2|@6403,@6402 6402:O2|@6412,@6411 6403:C19,480|00802b3b4d00d8010e0c000329354d01ce014d02ca010e0e0e0c000303a22936293b4d00ba010e0e0e0c00030402004d03ad015657692b382c2b2b4d04a1010e0e0c000429352a362a4d0593010c00022f2a452b46502f353036333b2b4d067f010c0004502a4d0776010e0e0e0c0002293b4d086a010e0e0e0c00036403033b023a2a4d0759010e0e0c00023b2a4d094e010e0e0e0c00036403054d0a4101102a4d0b3b010c000203032a020b2a3f4d0c2d010e0e0c000329680164270b06d5293629352a382b39293b4d0012010e0e0e0c0003293b4d0806010e0e0e0c0003640311293b4d01f7004d06f3000c0004503b06cc2b3b4d00e6000e0e0e0c00032a3b4d00da000e0e0e0c00032a2a4d09ce000e0e0e0c00036503142c352d362e372f3830394d0db7000c00065002023b50293b4d00a9000e0e0c0003293b4d089e000e0e0e0c0003640311293b4d018f004d068b000c0004503b027e2b3b4d007e000e0e0e0c00032b352c362b4d0b6f000c0002030c2b3b4d0964000e0c000302013b03032b02054d0e540010292c4d0f4d00020245000e0e0c000303054d103e00102a2a4d0c37000c0003303b4d002e000e0e0e0c0003293c4d112200020218000e0e0e0c0003323b2b4d0611000e0e0c0004502b68012707270464420e0e|@6405,I253,-1,I229,@6406,@50,@378,I255,I223,I113,I231,@61,I105,I252,@6404,@61,I247,@61,I106| 6404:O1|@6408 6405:S17|54657874494f2e696e7075743127283129 6406:C1,24|00800402002c3c2b56470e0e0e0c0004502964420e0e0e0e|@6407| 6407:S32|426173696353747265616d494f28292e696e7075744e4c697374283129283129 6408:C10,144|00842c352d36313b3b4d0083000c0004502d3b4d0179004d0075000e0e0c0004507876223b2c3b2f6a2808342b4d025f000c0004323b2b4d0055000e0e0c0004503b6505460e00ff6d29354d0341004d043d000e0e0c000303032902020202022929353c4d0528000e0c000303064d061e00020202020212312a4d0712006a4d030d004d0809002b6a6410651f050e0e|@6410,I255,-1,I61,@7106,I251,I229,@64,@6409,@54| 6409:S17|54657874494f2e66696c6c427566666572 6410:S20|54657874494f2e66696c6c427566666572283529 6411:O2|@6415,I48 6412:C15,448|00822d36293b4d00b6010e0e0e0c00032f35303731382c4d01a5014d02a1010e0e0c00030307303b45334606cc2c4d038e010e0e0e0c00024d0484010e0c000207d22c352d362e372f382f2c30306b2a3b4d026b010c00030308220c3b452a4606da2a220e4d0557010c0003033b2a68012e2d2b4d0648010e0c00040403002a2a4d073b010c00035029352a362b372b2b2b4d082a010e0e0e0c0004293b6922142a453246270806d72a220e4d0910010e0c00030378220d68012e2d2b4d06ff000c00040403002a2a4d07f3000c00035029352a362b372b2b2b4d08e2000e0e0e0c00043222154d0ad5000e0e0c00033222164d0bc9000202bc000e0e0c0003220d220d2c2c6b2c3b693c28402c4d0cae00020281000e0e0e0c000422132a221422146b22192c452a46270d0265302d31316b220e2c4d0b8600020255000e0e0e0c00030402002b2b2b22100e0c00045029352a362f680133322b4d0661000e0e0c00040403002a2a4d0753000c00035029352a362b372b2b2b4d084200020211000e0e0e0c000429326922192a453246270d27050220040300333c344d0d1f002d56b70e0c00065029352a362a3b69342a452b4627042705440e0e0e0e0e0e|@6414,I253,-1,I229,I105,I218,I113,@271,@89,@1121,I233,I106,I107,I11,@6413| 6413:S6|696e7075744e 6414:S29|426173696353747265616d494f28292e696e7075744e4c697374283329 6415:C21,1096|00842f3530370402002a3b4d0039040e0e0c000303803103382b31314d0128040e0c00044d0220040e0c0002294d0317040c000229334d040e040e0e0e0c0003644d0503040c00022b2b452a46260302432b31314d06f0030e0c0004293b4d00e6030e0e0e0c0003030a56472b2a453b4651021f2935294d03cd030e0e0c0002293b4d04c2030e0e0e0c00032d2c452a4626045006ce2a352b362c37293b4d07a6030e0e0e0c00032b3b4d079a030e0e0e0c00032a2a4d088e030e0e0e0c000329220e4d0981030e0e0c000366034f2a3b4d0773030c00033468012d2b2b4d0a66030e0e0e0c0004644d0b5b030c00022c3b4d0752030e0e0e0c000329220e4d0c45030e0e0c00032e3b2b4d0d39030e0e0c000450302c453b46260506d4293b4d0724030e0c00032b3b4d071a030e0e0e0c00032a2a4d080e030e0e0e0c0003220d2a4d0801030e0e0c00032f352a2a4d0ef4020e0c0003270507d3293b4d07e602020243020e0e0e0c00032b3b4d07d6020e0e0e0c00032a2a4d08ca020e0e0e0c00032d3b4d07be020e0e0e0c00032a6801302b2b4d0aae020e0e0e0c0004644d0ba3020c0002220f2c4d0899020e0e0c00032f3b4d078e020e0e0e0c0003313b2b4d0d81020e0e0c00045022120315220c332c22134d0f6d020e0e0c0005296801640212220c332c22134d1058020202b3010e0c0005293b4d004a020e0e0e0c00030308342d453b465002862935293b4d0032020e0e0e0c00030309220c2e453c4650026c2c2a4d111b02020267000c000303032c020129296801220d3b2b4d0a03020c0004644d0bfb010c0002343b2d4d0df1010e0e0c000450220c3b2c4d0de3010c000450293b69302a69644d02d4010e0c00022217030e2c304d11c6010e0e0e0c000302013b22102b452a46260550260806d7293b4d07aa010e0e0e0c00032b3b4d079e010e0e0e0c00032a2a4d0892010e0e0e0c00032d3b4d0786010e0e0e0c00032a6801302b2b4d0a76010e0e0e0c0004644d0b6b010c0002220f2c4d0861010e0e0c00032f3b4d0756010e0e0e0c0003313b2b4d0d49010e0e0c00045022120339220c2b22124d0136010e0e0e0c00042c2a6929644d0227010c0002294d031f010c00022922154d1115010e0e0c0003220e2c452a4626050263220c2b22124d06fd000e0e0c0004293b4d00f2000e0e0e0c00030308342d453b4650023e2935294d03db00020236000c0002293b4d04ce000e0e0e0c0003640309220c2e453c46500217293b692e2a69644d02b1000e0e0c0002220d2a453b465150502607260329352a362a4d0396000e0e0e0c0002293b4d128a000e0e0e0c0003033c2b4d037d000e0e0c0002220d35220e36220f372210383c28403b4d1364000e0c00042d2a2d2d6b322b3b326b2e3b2b4d0d4f000c0004502a27080202220c2b032f56772a352b362c372d383c28403b4d132f000c00042d2a2d2d6b2f2b3b3b6b2e3b2b4d0d1b000c0004502a2708020129332e452a462d4727081f050e0e0e0e0e0e|@6417,I229,@6418,@378,I223,I113,I218,@6426,I253,I107,I231,@83,@85,I106,I255,I232,@6431,@6416,I234,I233,I11| 6416:O1|@6436 6417:S33|426173696353747265616d494f28292e7265616446726f6d526561646572283529 6418:O1|@6419 6419:C8,80|00822d4d0049000e0e0c0002292309294d013c000e0c00024d0234000e0c0002031129352b353b310e4f0323005000026602152a35294d041600306a4d0510004d060c002b6a641065440e0e0e0e0e0e|@6421,@6422,I105,I218,@6420,@66,@7106,@54| 6420:C10,160|00807876093b2e56420c0002054700ff6d561156272b354d0085004d0181000e0e0c000303032b0202020202262b353c4d026c000e0c000303064d03620002020202020f2a2c2b6a4d0054004d0450002b6a646510294d0546000e0e0e0c0002293b4d023a000e0e0e0c000303033b0228292e4d0629000e0e0c000303052a3b6902162d2a4d0717000c00030e4f080f002100022b2a69296565420e0e0e0e0e|@6425,@7106,I251,I229,@64,@54,I223,I231,I107,@6420| 6421:S32|426173696353747265616d494f28292e72656164566563466f72636564283329 6422:O1|@6423 6423:C1,8|00802b420e0e0e0e|@6424| 6424:S2|5244 6425:S41|426173696353747265616d494f28292e72656164566563466f72636564283329646f52656164283129 6426:O1|@6427 6427:C11,152|00822d4d0091000e0e0c000229230d294d0184000e0c00024d027c000e0c0002035529352b357876093b332e0e0c0002054200ff6d29354d035d004d0459000e0e0c000303032902020202022629353c4d0544000e0c000303064d063a0002020202020f2a2a326a4d032c004d0728002b6a64106502182a35294d081a004d0916006a4d0311004d070d002b6a641065440e0e0e0e0e0e0e|@6429,@6422,I105,I218,@7106,I251,I229,@64,@54,@6428,@6413| 6428:O3|@7385,@6430,0 6429:S28|426173696353747265616d494f28292e726561645665634e42283329 6430:S23|4e6f6e626c6f636b696e674e6f74537570706f72746564 6431:O1|@6432 6432:C8,80|00832e4d0049000e0e0c0002292308294d013c000e0c00024d0234000e0c0002031129352b353b3b0e4f0323005000026602152a35294d041600306a4d0510004d060c002b6a6410651f040e0e0e0e0e|@6434,@6422,I105,I218,@6433,@66,@7106,@54| 6433:C10,184|00807876193b563929303b4d00a9000e0e0c00046456420e0e0c0002054700ff6d561156272b354d018d004d0289000e0e0c000303032b0202020202262b353c4d0374000e0c000303064d046a0002020202020f2a2c2b6a4d015c004d0558002b6a646510293b4d034d000e0e0c000303033c0218292d4d063d000e0e0c000356282a2a4d0730000e0c000365030d292d4d0623002e0e0e7e040003292d4d0616000e0e0e0c00030e4f080b0011000264420e0e0e0e0e0e|@6435,@83,@7106,I251,I229,@64,@54,I106,I231,@6433| 6434:S29|426173696353747265616d494f28292e66696c6c427566666572283429 6435:S38|426173696353747265616d494f28292e66696c6c427566666572283429646f52656164283129 6436:C11,160|00832e4d0099000e0e0c000229230c294d018c000e0c00024d0284000e0c0002035d29352b357876113b34353b2a220e6a29652e0e0c0002054200ff6d29354d035d004d0459000e0e0c000303032902020202022629353c4d0544000e0c000303064d063a0002020202020f2a2a326a4d032c004d0728002b6a64106502182a35294d081a004d0916006a4d0311004d070d002b6a6410651f040e0e0e0e0e0e|@6438,@6422,I105,I218,@7106,I251,I229,@64,@54,@6428,@6437| 6437:S8|63616e496e707574 6438:S31|426173696353747265616d494f28292e66696c6c4275666665724e42283429 6439:C15,432|00812c352d363b4d00a5010e0e0c000229293b4d0199010e0e0c000303033b022229352a362a354d0285014d0181010e0e0c000303052a68010207292503511e2e3b6564294d0367010c00024d0460010e0c00020345293529354d0252014d014e010e0e0e0c000303212936293c4d013e010e0e0e0c000303033b020b4d052f014d062b010c000264020d4d0521014d061d010e0e0c000264020d4d0511014d060d010e0e0c00023b2d3b4d0701010e0e0c0003293c4d08f6000e0e0e0c00036403033b0226291b204e4d01e2000e0e0e0c000303033b0213293c4d09d1000e0e0c0003292502501e3f3b64642d4d0abe000e0e0e0c0002293b4d01b2000e0e0e0c000303033b02103c2f4d0ba1000e0e0c000326031e6e3b657876093b31220c0c0002054500ff6d2e4d0c82000e0e0e0c0002293c4d0176000e0e0e0c000303043b5002172f3b3c4d0d63000c0004503d304d0b59000e0e0c0003502e4d064e000e0e0e0c0002502a102e4d0c40000e0c0002293c4d0136000e0e0e0c000303043b5002172f3b3c4d0d23000c0004503d304d0b19000e0e0c0003502e4d060e000e0e0e0c0002502a2708430e0e0e|@6440,@71,I229,-1,I105,I218,@69,@74,I253,I251,I106,I71,I73,I70,I255| 6440:S17|54657874494f2e70726f74656374283229 6441:C14,136|00822c03064d007f0002044d01790056172d4d0272004d036e000e0e0e0c0003303b694d0461002a692b2a694d0558002a692e2a694d064f002a69312a6927094d0744000e0c00024d083c003b4d0937000c0003292b4d0a2e000e0e0e0c0003504d0823003b4d091e000e0e0e0c000329392a4d0b11002b4d0c0c00320e0e7b050900040e0e0e0e|@6443,@6444,@6445,-1,@364,@6446,@6447,@6442,@378,@7130,I253,@248,@102,@50| 6442:S5|20696e2027 6443:S39|4d414b455f28292e757365496e746f456e762831297573652831296572726f7250726f63283329 6444:S6|4572726f722d 6445:S8|5761726e696e672d 6446:S2|2e0a 6447:S8|272c206c696e6520 6448:O2|@6449,@7130 6449:C5,64|00805607293b4d0036000e0e0e0c0003292e4d012a000e0e0e0c0003505627293b4d001b000c000329392a4d0211002b4d030c00330e0e7b050800040e0e0e0e|@6450,I253,@248,@102,@50| 6450:S15|54657874494f2e7072696e74283129 6451:C2,16|00805607293b4d0006002e0e7e040003|@6452,I253| 6452:S35|4d414b455f28292e757365496e746f456e76283129757365283129636f64652d283129 6453:C1,16|00802b352c362d3756372e7b05030004|@6454| 6454:S39|4d414b455f28292e757365496e746f456e762831297573652831296572726f7250726f63283129 6455:C3,32|00805609561856272b4d0013002c2c4d010d00320e0e0e7b060600050e0e0e0e|@6309,@7203,@1972| 6456:C3,32|00805609561856272b4d0013002c2c4d010d00320e0e0e7b060600050e0e0e0e|@6309,@7197,@1972| 6457:C3,32|00805609561856272b4d0013002c2c4d010d00320e0e0e7b060600050e0e0e0e|@6309,@7202,@1972| 6458:C3,32|00805609561856272b4d0013002c2c4d010d00320e0e0e7b060600050e0e0e0e|@6309,@7200,@1972| 6459:C3,32|00805609561856272b4d0013002c2c4d010d00320e0e0e7b060600050e0e0e0e|@6309,@7198,@1972| 6460:C3,32|00805609561856272b4d0013002c2c4d010d00320e0e0e7b060600050e0e0e0e|@6309,@7205,@1972| 6461:O1|@6462 6462:C7,88|00802b3b4d0050000e0c000329354d0146004d0242000e0e0e0c000303222936293b4d0032000e0e0e0c000329382a4d0325002b4d042000320e0e7b050700042936293728072a3b4d050c00310e0e7b050600040e0e0e0e|@6464,I253,-1,I229,@6463,@50,I61| 6463:O1|@6465 6464:S18|54657874494f2e636c6f7365496e27283129 6465:C8,104|00802b35294d005f000c000229382e3629293b4d0151000e0e0c0003294d0247004d0343000c000303043b500231294d0435000e0e0c00024d052c000e0c0002030b2936292503511e375002122a3b4d0215004d0611000e0e0c0004503b50513b2b300e7d070002|@6466,@6422,I253,-1,I229,I105,I218,I255| 6466:S27|426173696353747265616d494f28292e636c6f7365496e27283129 6467:O2|@6531,@183 6468:O2|@6469,@183 6469:C3,32|0080560729352a364d0014002a69292c4d010c00310e0e0e7e0700030e0e0e0e|@6269,@6470,@6268| 6470:C4,32|00805607294d0017004d0113000c00034d020c002a2a2f0e7d0600020e0e0e0e|@6272,@7203,@6273,@6471| 6471:O1|@6472 6472:C2,48|00802b37296403202b363b2a0e0c00022d353b2a0e0c0002644d0013000c00022a2a6929270402013b420e0e0e0e0e0e|@4871,@6471| 6473:O2|@6474,@183 6474:C3,32|0080560729352a364d0014002a69292c4d010c00310e0e0e7e0700030e0e0e0e|@6269,@6475,@6268| 6475:C4,32|00805607294d0017004d0113000c00034d020c002a2a2f0e7d0600020e0e0e0e|@6272,@7200,@6273,@6476| 6476:O1|@6477 6477:C2,48|00802b37296403202b363b2a0e0c00022d353b2a0e0c0002644d0013000c00022a2a6929270402013b420e0e0e0e0e0e|@4871,@6476| 6478:O2|@6479,@183 6479:C3,32|0080560729352a364d0014002a69292c4d010c00310e0e0e7e0700030e0e0e0e|@6269,@6480,@6268| 6480:C4,32|00805607294d0017004d0113000c00034d020c002a2a2f0e7d0600020e0e0e0e|@6272,@7197,@6273,@6481| 6481:O1|@6482 6482:C2,48|00802b37296403202b363b2a0e0c00022d353b2a0e0c0002644d0013000c00022a2a6929270402013b420e0e0e0e0e0e|@4871,@6481| 6483:O2|@6484,@183 6484:C3,32|0080560729352a364d0014002a69292c4d010c00310e0e0e7e0700030e0e0e0e|@6269,@6485,@6268| 6485:C4,32|00805607294d0017004d0113000c00034d020c002a2a2f0e7d0600020e0e0e0e|@6272,@7205,@6273,@6486| 6486:O1|@6487 6487:C2,48|00802b37296403202b363b2a0e0c00022d353b2a0e0c0002644d0013000c00022a2a6929270402013b420e0e0e0e0e0e|@4871,@6486| 6488:O2|@6489,@183 6489:C3,32|0080560729352a364d0014002a69292c4d010c00310e0e0e7e0700030e0e0e0e|@6269,@6490,@6268| 6490:C4,32|00805607294d0017004d0113000c00034d020c002a2a2f0e7d0600020e0e0e0e|@6272,@7198,@6273,@6491| 6491:O1|@6492 6492:C2,48|00802b37296403202b363b2a0e0c00022d353b2a0e0c0002644d0013000c00022a2a6929270402013b420e0e0e0e0e0e|@4871,@6491| 6493:O2|@6494,@183 6494:C3,32|00802b352c36562729352a364d0010002d2f2c6b292c4d010600330e7e090003|@6308,@6495,@6268| 6495:C3,32|00805609561856272b4d0013002c2c4d010d00320e0e0e7b060600050e0e0e0e|@6309,@7203,@1972| 6496:O2|@6497,@183 6497:C3,32|00802b352c36562729352a364d0010002d2f2c6b292c4d010600330e7e090003|@6308,@6498,@6268| 6498:C3,32|00805609561856272b4d0013002c2c4d010d00320e0e0e7b060600050e0e0e0e|@6309,@7200,@1972| 6499:O2|@6500,@183 6500:C3,32|00802b352c36562729352a364d0010002d2f2c6b292c4d010600330e7e090003|@6308,@6501,@6268| 6501:C3,32|00805609561856272b4d0013002c2c4d010d00320e0e0e7b060600050e0e0e0e|@6309,@7197,@1972| 6502:O2|@6503,@183 6503:C3,32|0080560729352a364d0014002a69292c4d010c00310e0e0e7e0700030e0e0e0e|@6269,@6504,@6268| 6504:C4,32|00805607294d0017004d0113000c00034d020c002a2a2f0e7d0600020e0e0e0e|@6272,@7202,@6273,@6505| 6505:O1|@6506 6506:C2,48|00802b37296403202b363b2a0e0c00022d353b2a0e0c0002644d0013000c00022a2a6929270402013b420e0e0e0e0e0e|@4871,@6505| 6507:O2|@6508,@183 6508:C3,32|00802b352c36562729352a364d0010002d2f2c6b292c4d010600330e7e090003|@6308,@6509,@6268| 6509:C3,32|00805609561856272b4d0013002c2c4d010d00320e0e0e7b060600050e0e0e0e|@6309,@7205,@1972| 6510:O2|@6511,@183 6511:C3,32|0080560729352a364d0014002f2b6a292c4d010b00310e0e7e0700030e0e0e0e|@6327,@6512,@6268| 6512:C3,24|0080560856172a4d000d002b4d010800300e0e7b05050004|@6328,@7203,@1962| 6513:O2|@6514,@183 6514:C3,32|0080560729352a364d0014002f2b6a292c4d010b00310e0e7e0700030e0e0e0e|@6327,@6515,@6268| 6515:C3,24|0080560856172a4d000d002b4d010800300e0e7b05050004|@6328,@7200,@1962| 6516:O2|@6517,@183 6517:C3,32|0080560729352a364d0014002f2b6a292c4d010b00310e0e7e0700030e0e0e0e|@6327,@6518,@6268| 6518:C3,24|0080560856172a4d000d002b4d010800300e0e7b05050004|@6328,@7197,@1962| 6519:O2|@6520,@183 6520:C3,32|00802b352c36562729352a364d0010002d2f2c6b292c4d010600330e7e090003|@6308,@6521,@6268| 6521:C3,32|00805609561856272b4d0013002c2c4d010d00320e0e0e7b060600050e0e0e0e|@6309,@7198,@1972| 6522:O2|@6523,@183 6523:C3,32|0080560729352a364d0014002f2b6a292c4d010b00310e0e7e0700030e0e0e0e|@6327,@6524,@6268| 6524:C3,24|0080560856172a4d000d002b4d010800300e0e7b05050004|@6328,@7205,@1962| 6525:O2|@6526,@183 6526:C3,32|00802b352c36562729352a364d0010002d2f2c6b292c4d010600330e7e090003|@6308,@6527,@6268| 6527:C3,32|00805609561856272b4d0013002c2c4d010d00320e0e0e7b060600050e0e0e0e|@6309,@7202,@1972| 6528:O2|@6529,@183 6529:C3,32|0080560729352a364d0014002f2b6a292c4d010b00310e0e7e0700030e0e0e0e|@6327,@6530,@6268| 6530:C3,24|0080560856172a4d000d002b4d010800300e0e7b05050004|@6328,@7198,@1962| 6531:C3,32|0080560729352a364d0014002f2b6a292c4d010b00310e0e7e0700030e0e0e0e|@6327,@6532,@6268| 6532:C3,24|0080560856172a4d000d002b4d010800300e0e7b05050004|@6328,@7202,@1962| 6533:O2|@6535,@6534 6534:O2|@6536,0 6535:S8|6465627567546167 6536:O3|@7124,69,@6537 6537:O4|@6535,-1,@6539,@6538 6538:O4|-3,@6131,@6108,@7386 6539:O2|-1,@6540 6540:O2|-3,@7249 6541:O2|@6543,@6542 6542:O2|@6544,0 6543:S10|45786e4d657373616765 6544:O3|@7151,69,@6545 6545:O3|@6543,@582,@6546 6546:O4|@6547,I48,0,0 6547:O4|-1,@7388,@7389,@7387 6548:O2|@6550,@6549 6549:O2|@6551,0 6550:S10|65786e4d657373616765 6551:O3|@7124,69,@6552 6552:O4|@6550,-1,@5905,@6553 6553:O3|1,@2355,@544 6554:O2|@6556,@6555 6555:O2|@6557,0 6556:S11|66696c654e616d65546167 6557:O3|@7124,69,@6558 6558:O4|@6556,-1,@6560,@6559 6559:O4|-3,@6562,@6108,@7391 6560:O2|-1,@6561 6561:O2|-3,@7248 6562:O2|@544,0 6563:O2|@6565,@6564 6564:O2|@6566,0 6565:S16|7072696e74446570746846756e546167 6566:O3|@7124,69,@6567 6567:O4|@6565,-1,@6569,@6568 6568:O4|-3,@6376,@6108,@7392 6569:O2|-1,@6570 6570:O2|-3,@7251 6571:O2|@6573,@6572 6572:O2|@6574,0 6573:S9|74696d696e67546167 6574:O3|@7124,69,@6575 6575:O4|@6573,-1,@6577,@6576 6576:O4|-3,@6131,@6108,@7393 6577:O2|-1,@6578 6578:O2|-3,@7181 6579:O2|@6581,@6580 6580:O2|@6582,0 6581:S15|7072696e74456e7669726f6e546167 6582:O3|@7124,69,@6583 6583:O4|@6581,-1,@6585,@6584 6584:O4|-3,@6589,@6108,@7395 6585:O2|-1,@6586 6586:O2|-3,@7394 6587:O2|@6588,@7254 6588:C1,16|008056072928452e6a64420e0e0e0e0e|@617| 6589:O2|@5633,0 6590:O2|@1304,@6591 6591:O2|@6592,0 6592:O3|@7124,69,@6593 6593:O4|@1304,-1,@6595,@6594 6594:O3|1,@544,@6617 6595:O2|-1,@6596 6596:O2|-3,@6597 6597:O1|@6598 6598:C12,152|00802b4d0091000e0e0c0002293d4d0186000e0e0e0c00036403442b4d0078000e0c00023d2a4d026e000e0e0e0c00036403054d036100102b4d045b000c000203032b020b2b28064d054c000e0c00032928784d0641000e0e0c00036402013b03033c02044d072f004d082b002a692d2a4d0923000c0003293b4d061a000e0e0e0c000303054d0a0e00102935292704420e0e0e0e0e0e0e|@6600,I223,I233,I231,@61,I105,I252,I229,-1,@6601,@1444,@6599| 6599:O3|8,@6616,@6615 6600:S45|494e495449414c4953455f28292e696e6974476c6f62616c456e76283129776f72644f66537472696e67283129 6601:C2,16|00804d000a0056172d6a420e0e0e0e0e|@6603,@6602| 6602:C8,96|0080560856172d2b2b4d0053000c0004293b4d014a000e0e0e0c000303033b023b293529352a362a4d0234004d0330000e0c000303054d042600102a4d0520000e0c000203032a020b2a4d0612000e0e0e0c0002292b69296801270566420e0e|@6605,@6606,I229,@6613,I233,@6604,I105,I152| 6603:S21|576f7264732e576f72642e7363616e283129283129 6604:O3|5,@6614,0 6605:S24|576f7264732e576f72642e7363616e283129283129283129 6606:O1|@6607 6607:C9,592|00822b4d0049024d0145020e0e0c00030a02000d0011000a00281002083d020528080201403b3b30300c0002293b4d021e020e0e0e0c000303033b06ce293529352928304d0208020e0c000307d92a3629340e0e0e0c0002293b4d02f2010e0e0e0c000303033b06d4293529352a362a28774d02da010e0e0e0c000303cc220d3c4d01cb010c00030a00000f003b3b2b0e4f03bb01d0000402ae29220f0c0002293b4d02aa010e0e0e0c000303033b0284293529352a362a28784d0292010e0e0e0c000303033c020b2a28584d0280010e0c0003032c22113c4d0273010c000303103b3b2b1604006601130000000004020e3b3b2b1603005601130000000004023222113c4d02470102023d010c000303103b3b2f160400360113000000000402123b3b2f0202b6001603002201130000000004666402103b3b2b020286000e0e4f040b01d00004027a2a28784d02ff000c000303033c020b2a28584d02f0000e0c0003030c3c220e4d05e3000c000302013b0325220d3c4d02d4000e0c0003030c3b3b2b4f04c700d00004020a3b3b2b4f03bb00d00004022a220d3c4d02af000c000303103b3b22110e0e0e4f049f00d00004020e3b3b22110e0e0e4f038f00d0000466293b4d0285000e0e0c000303093b2c692968016402012966026a2a3628092b4d0668000e0c0003030c2a280d4d065b000c000302013b03033c020c2a28204d0249000e0e0c0003030e2934344d073b00220c7b050c0004323c4d022e000e0e0e0c000303103b3b220d0e0e0e4f041b00900004020e3b3b220d0e0e0e4f030b0090000464652704440e0e0e|@6609,-2,I107,I229,@6610,@6608,I251,I248,@6606| 6608:C8,328|00822b56180c0002293b4d003a010e0e0e0c0003030f2e03092d2d692968016402013b06ca293529352a362a28304d0116010e0e0e0c0003030c2a28394d0207010c000302013b03323028104d03f8000e0c0003292c4d04ee000e0e0e0c00032928304d05e1000e0e0c00033c2a2e0e0e4f06d3009100046602ca2a28414d01c6000e0e0e0c0003030c2a28464d02b7000c000302013b033f3028104d03a8000e0c0003292c4d049e000e0e0e0c00032928414d0591000e0e0c000329404d0486000e0e0e0c00033c2a2f0e0e4f067700a100042704026d2a28614d0169000e0e0c000303102a28664d025b00020255000c000302013b033f3028104d0348000e0c0003292c4d043e000e0e0e0c00032928614d0531000e0e0c000329404d0426000e0e0e0c00033c2a2f0e0e4f061700a100042704020d3103093030692968016402013b666444|@6612,I229,I231,I232,I108,I106,I107,@6608| 6609:S11|7363616e576f7264283329 6610:C8,160|00822b56180c0002293b4d0092000e0e0e0c0003030f2e03092d2d692968016402013b0279293529352a362a28304d016e000e0e0e0c0003031d564428302a4d025d000e0e0c00032c2a4d0352000e0e0e0c00036502013b03365644312a4d043e000e0e0e0c0003292d4d0232000e0e0e0c00032928304d0525000e0e0c00033c2a2f0e0e4f061700a100042704020d3103093030692968016402013b666444|@6611,I229,I231,I106,I234,I108,I107,@6610| 6611:S25|7363616e576f7264283329726561645f646967697473283329 6612:S29|7363616e576f7264283329726561645f6865785f646967697473283329 6613:B8|ffffff7f00000000 6614:S8|4f766572666c6f77 6615:S21|496e76616c696420776f726420636f6e7374616e74 6616:S10|436f6e76657273696f6e 6617:O4|-3,0,@5106,@7396 6618:O2|@1292,@6619 6619:O2|@6620,0 6620:O3|@7124,69,@6621 6621:O4|@1292,-1,@6623,@6622 6622:O3|1,@544,@544 6623:O2|-1,@6624 6624:O2|-3,@6625 6625:O1|@6626 6626:C5,40|00802b4d0021000e0e0c00024d0118002d2b6a3b3b4f020f003000024d0308002f0e0e0e7d060002|@6628,I223,@6629,@6627,@366| 6627:C8,168|008056042c2a4d009e000e0e0e0c00036403033b028c56032c292b4d0189000e0e0c0003293b4d027e000e0e0e0c000303033b0245293529354d036b002a4d0466000e0e0e0c000303262a36292f0e0e0e0c0002293b4d024e000e0e0e0c000303033b02082a250626051e513b6502092a362a2a69296801656565293b4d0227000c000303054d051e0010293529352a36290e0e0e4f060f005100022b2a69292707420e0e0e0e0e|@6632,I113,@6633,I229,I48,I24,@6631,@6627| 6628:S22|4d6973632e756e657363617065537472696e67283129 6629:C10,136|008056082c2a4d007e000e0e0e0c00036403033b026a56072c3b4d016a000e0e0e0c000303033c0218294d025a000e0e0e0c00022d2a4d034e000e0e0e0c00036403054d04410010294d053b000c000203032902182c3f4d062d000e0e0c00032a2a4d0722000e0e0e0c0003642d3c4d0815000e0e0c00032a2a692968012704420e0e0e0e0e0e0e|@6630,I113,I234,I223,I231,@61,I105,I239,I252,I106| 6630:S28|4d6973632e756e657363617065537472696e67283129726472283129 6631:O3|8,@6616,@6642 6632:S34|4d6973632e756e657363617065537472696e67283129636f6e764368617273283129 6633:O1|@6634 6634:C13,896|00812c2c0e0c0002293b4d0072030e0e0e0c0003030c4d0166032e692968016406d1293529352a362a28204d0251030e0e0c000303033c020b287e2b4d0240030e0c000303033b06da2a285c4d0030030e0c000307d529300e0c0002293b4d001e030e0e0e0c000303033b06da293529352928614d0008030e0c0003030c2a3628072a692968016506d92928624d00ef020c0003030c2a3628082a692968016506ce2928744d00d7020c0003030c2a3628092a692968016506da29286e4d00bf020c0003030b2a36402a692968016506cb2928764d00a8020e0c0003030c2a36280b2a692968016506d42928664d008f02020283020c0003030c2a36280c2a692968016506d82928724d0073020c0003030c2a36280d2a692968016506dc29285c020252024d005702020243020c0003030c2a36285c2a692968016506d92928224d003b02020224020c0003030c2a3628222a692968016506ca29285e4d001f02020207020c000303922a3629340202fa010e0e0e0c0002293b4d0002020e0e0e0c000303033b026e293529352a362a28400202d6014d03e6010202ce010e0e0e0c0003030c285f2b4d03d3010c000302013b03402a28404d04c4010202ac010e0c0003293b4d05b6010e0e0e0c000303033c020f2928ff4d06a40102028c010e0c000303054d0796011029292c692968016602013b666506d870012928754d007d010e0e0c000303382a363b3f2b220d4d086b01020253010c0005293b4d005e01020246010e0e0e0c000303033b020e293529352a362a2a6929680127046506da2a3628092b4d0935010e0e0c0003030c2a280d4d0927010c000302013b03033c020c2a28204d0015010e0e0c000303a52929220c0e0e0e0c0002293b4d00fe000e0e0e0c000303032a0241293529352a3628092b4d09e6000e0e0e0c0003030c2a280d4d09d7000c000302013b03033c020c2a28204d00c5000e0e0c0003030a29250526041e543b02012d666534020298000e0c0002293b4d00a2000e0e0e0c000303033b022b293529352a362a285c4d008a000e0e0e0c00034d0a80000e0c000203033b020a4d0173002a69296801646664025428302b02024e004d095e000e0e0e0c0003030c2a28324d094f000c000302013b03313b3e2f220d4d0b3e000e0e0e0c0005293b4d0032000e0e0e0c000303033b020e293529352a362a2a6929680127046402013b64656402072a2a69296801646664430e0e0e0e0e0e|@6636,I229,I48,I250,I231,I107,I234,I233,@370,@6637,I248,I218,@6635| 6635:O1|@6640 6636:S16|436861722e7363616e42617365283229 6637:O1|@6638 6638:C12,568|00832d3b4d0030020e0c0003033b2e28ff4d0123020c000303033b022a2e3b4d0215020e0e0c000303033c020b2e28ff4d0104020e0c000303054d03fa01102e292e692968016506d02c2c0e0e0c0002293b4d00e2010e0e0e0c0003034f2e4d04d5014d05d1010e0e0c000303033c020b2f28ff4d01c0010e0c000303033b022a2f3b4d02b1010e0e0c000303033c020b2f28ff4d01a0010e0c000303054d039601102f292f692968016506cc293529352a3628302b4d067e010e0e0e0c0003030c2a28394d066f010c000302013b033f313c4d0761010e0e0c00033328104d0855010e0e0c0003292d4d094a010e0e0e0c00032928304d073d010e0e0c0003292d2f220d4d0a2f01220e7b060e000528612b4d06210102021a010e0e0c0003030c2a28664d060f010c000302013b034f313c4d0701010e0e0c00033328104d08f5000e0e0c0003292d4d09ea000e0e0e0c00032928614d07dd000e0e0c000329404d09d2000e0e0e0c0003292e30220e4d0ac300220f0202b9007b060f000528412b4d06b1000e0e0c0003030c2a28464d06a3000c000302013b034b313c4d0795000e0e0c00033328104d0889000e0e0c0003292d4d097e000e0e0e0c00032928414d0771000e0e0c000329404d0966000e0e0e0c0003292e30220e4d0a5700220f7b060f0005314d044b004d0547000c000303033c020b3228ff4d0138000e0c000303033b022a323b4d0229000e0e0c000303033c020b3228ff4d0118000e0c000303054d030e0010322932692968016566641f040e|@6639,I229,I233,I234,@370,-1,I231,I248,I107,I108,I106,@6637| 6639:S16|436861722e7265616448657827283429 6640:C11,280|00832d3b4d0010010e0c0003033b2e28ff4d0103010c000303033b022a2e3b4d02f5000e0e0c000303033c020b2e28ff4d01e4000e0c000303054d03da00102e292e692968016502c62c2c0e0e0c0002293b4d00c2000e0e0e0c0003034b2f28ff4d01b3000c000303033c020b2e3b4d01a5000e0e0c000303033b022a2f3b4d0295000e0e0c000303033c020b2f28ff4d0184000e0c000303054d037a00102f292f69296801650265293529352a3628302b4d0462000e0e0e0c0003030c28392b4d0553000c000302013b033f313c4d0645000e0e0c000333404d073a000e0e0e0c0003292d4d082e000e0e0e0c00032928304d0621000e0e0c0003292d2f220d4d091300220e7b060e00053b66641f040e0e0e0e0e0e0e|@6641,I229,I233,I234,@370,I248,I231,I107,I108,I106,@6635| 6641:S15|436861722e72656164446563283429 6642:S23|496e76616c696420737472696e6720636f6e7374616e74 6643:O2|@6645,@6644 6644:O2|@6646,0 6645:S12|70726f66696c696e67546167 6646:O3|@7124,69,@6647 6647:O4|@6645,-1,@6649,@6648 6648:O4|-3,@6122,@6108,@7397 6649:O2|-1,@6650 6650:O2|-3,@7184 6651:O2|@6653,@6652 6652:O2|@6654,0 6653:S15|636f6d70696c657256657273696f6e 6654:O3|@7124,69,@6655 6655:O4|@6653,-1,@6656,@544 6656:O2|-1,@6657 6657:O2|-3,@6658 6658:S11|352e322052656c65617365 6659:O2|@6661,@6660 6660:O2|@6662,0 6661:S16|7472616365436f6d70696c6572546167 6662:O3|@7124,69,@6663 6663:O4|@6661,-1,@6665,@6664 6664:O4|-3,@6131,@6108,@7398 6665:O2|-1,@6666 6666:O2|-3,@7179 6667:O2|@6669,@6668 6668:O2|@6670,0 6669:S8|7072696e7456616c 6670:O3|@7124,69,@6671 6671:O4|@6669,-1,@6673,@6672 6672:O3|1,@6681,@1093 6673:O2|-1,@6674 6674:O2|-3,@6675 6675:O1|@6676 6676:C12,128|00802b352c362d372e380407004d006f004d016b002c692b2a454d026200464d035d00472d484d045600494d0551004a2b4b502b3036313732382b4d0641000e0e0c000203352a4d0735000e0e0c000203262a4d0829000e0e0c0002294d091f000c0002292c220d31220e4d0a110022140e0e7b071000063b02013b270b420e|@6678,@6679,@6677,@4917,@4919,@4921,@4908,@5496,@2425,@2415,@4861,@4849| 6677:C3,56|00802b3529293b4d002d000e0e0c000303033b021b282056370c000250293c4d0115000e0e0c0003292502501e273b6465420e0e0e0e0e0e|@4916,I232,I107| 6678:S41|494e495449414c4953455f28292e696e6974476c6f62616c456e762831297072696e7456616c283129 6679:O1|@6680 6680:C1,8|00803b420e0e0e0e|@4914| 6681:O4|-2,1,@6682,0 6682:O2|@6176,@6683 6683:O2|@5934,@6684 6684:O2|@6081,@6365 6685:O2|@6687,@6686 6686:O2|@6688,0 6687:S10|646973706c6179466978 6688:O3|@7124,69,@6689 6689:O4|@6687,-1,@6691,@6690 6690:O3|1,@6699,@1093 6691:O2|-1,@6692 6692:O2|-3,@6693 6693:O1|@6694 6694:C2,16|00802b352c364d0006002d0e7e030003|@6696,@6695| 6695:O1|@6697 6696:S43|494e495449414c4953455f28292e696e6974476c6f62616c456e76283129646973706c6179466978283129 6697:C5,88|00812c352d36040700284d2f2b4d0047000c00045029352a372b382c23062d4d0135002b0e0c0002502f1be7032b4d0226000e0e0e0c0004504d031b002e0e0e0e0c000250302c0e0e0c0002503b2d347d0c00020e0e0e0e|@6698,@280,@342,@1867,@338| 6698:S43|494e495449414c4953455f28292e696e6974476c6f62616c456e76283129646973706c6179466978283229 6699:O4|-2,1,@6700,0 6700:O2|@6702,@6701 6701:O2|@6703,0 6702:O2|49,@5646 6703:O2|50,@5897 6704:O2|@6706,@6705 6705:O2|@6707,0 6706:S19|6572726f724d65737361676550726f63546167 6707:O3|@7124,69,@6708 6708:O4|@6706,-1,@6710,@6709 6709:O4|-3,@6712,@6108,@7399 6710:O2|-1,@6711 6711:O2|-3,@7158 6712:O2|@6713,0 6713:O3|1,@6714,@1093 6714:O4|-2,1,@6715,0 6715:O2|@5649,@6716 6716:O2|@5927,@6717 6717:O2|@6238,0 6718:O2|@6720,@6719 6719:O2|@6721,0 6720:S9|556e6976657273616c 6721:O3|@7151,69,@6722 6722:O3|@6720,@582,@6723 6723:O4|@6724,I48,0,0 6724:O4|-1,@7401,@7402,@7400 6725:O2|@5846,@6774 6726:O2|@6108,@6727 6727:O2|@6728,0 6728:O3|@7144,69,@6109 6729:O2|@6731,@6730 6730:O2|@6732,0 6731:S10|74616750726f6a656374 6732:O3|@7124,69,@6733 6733:O4|@6731,-1,@6735,@6734 6734:O3|1,@6741,@6740 6735:O2|-1,@6736 6736:O2|-3,@6737 6737:O1|@6738 6738:C1,8|00802b37420e0e0e|@6739| 6739:S29|556e6976657273616c2e74616750726f6a6563742d2370726f6a656374 6740:O3|1,@5845,@6743 6741:O4|-3,@6742,@6108,@7404 6742:O2|@6743,0 6743:O3|3,@7405,79992 6744:O2|@6746,@6745 6745:O2|@6747,0 6746:S9|746167496e6a656374 6747:O3|@7124,69,@6748 6748:O4|@6746,-1,@6750,@6749 6749:O3|1,@6756,@6755 6750:O2|-1,@6751 6751:O2|-3,@6752 6752:O1|@6753 6753:C1,8|00802b36420e0e0e|@6754| 6754:S27|556e6976657273616c2e746167496e6a6563742d23696e6a656374 6755:O3|1,@6758,@5845 6756:O4|-3,@6757,@6108,@7406 6757:O2|@6758,0 6758:O3|3,@7407,79992 6759:O2|@6761,@6760 6760:O2|@6762,0 6761:S5|7461674973 6762:O3|@7124,69,@6763 6763:O4|@6761,-1,@6765,@6764 6764:O3|1,@6771,@6770 6765:O2|-1,@6766 6766:O2|-3,@6767 6767:O1|@6768 6768:C1,8|00802b35420e0e0e|@6769| 6769:S19|556e6976657273616c2e74616749732d236973 6770:O3|1,@5845,@200 6771:O4|-3,@6772,@6108,@7408 6772:O2|@6773,0 6773:O3|3,@7409,79992 6774:O2|@6775,0 6775:O3|@7144,69,@5847 6776:O2|@1295,@6777 6777:O2|@6778,0 6778:O3|@7124,69,@6779 6779:O4|@1295,-1,@6781,@6780 6780:O3|1,@544,@545 6781:O2|-1,@6782 6782:O2|-3,@6783 6783:O1|@6784 6784:C12,168|00802b4d00a1000e0e0c0002293e4d0196000e0e0e0c000364031c2b3b3d4d0286000e0e0e0c0004294d037b004d0477000c00036402013b03033c02372b4d0066000e0e0e0c0002293f4d015a000e0e0e0c000364031c2b3b3e4d024a000e0e0e0c0004294d053f004d043b000c00036402013b03033c02044d062b004d0727002a692d2a4d081f000c0003293b4d0916000e0e0e0c000303054d0a0a00102935292704420e0e0e|@6786,I223,I231,@1118,@810,I24,@6787,-1,@6788,@1444,I229,@6785| 6785:O3|8,@6616,@6790 6786:S44|494e495449414c4953455f28292e696e6974476c6f62616c456e76283129696e744f66537472696e67283129 6787:S3|7e3078 6788:C2,16|00804d000a0056172d6a420e0e0e0e0e|@1433,@6789| 6789:C2,24|00802b561856274d000d002e0e0e0e7b050300040e0e0e0e|@1435,@1434| 6790:S24|496e76616c696420696e746567657220636f6e7374616e74 6791:O2|@6793,@6792 6792:O2|@6794,0 6793:S19|636f64657472656541667465724f7074546167 6794:O3|@7124,69,@6795 6795:O4|@6793,-1,@6797,@6796 6796:O4|-3,@6131,@6108,@7410 6797:O2|-1,@6798 6798:O2|-3,@7241 6799:O2|@6801,0 6800:S13|6572726f724465707468546167 6801:O3|@7124,69,@6802 6802:O4|@6800,-1,@6804,@6803 6803:O4|-3,@6122,@6108,@7411 6804:O2|-1,@6805 6805:O2|-3,@7196 6806:O2|47,@6807 6807:O2|@6808,0 6808:O3|@7124,69,@6809 6809:O4|47,-1,@199,@5973 6810:O2|@6812,@6811 6811:O2|@6813,0 6812:S3|646976 6813:O3|@7124,69,@6814 6814:O4|@6812,-1,@199,@5973 6815:O2|@6817,@6816 6816:O2|@6818,0 6817:S6|766563746f72 6818:O3|@7144,69,@6819 6819:O6|@6817,1,0,@6821,@549,@6820 6820:O2|-1,@7413 6821:O2|@6822,0 6822:O3|3,@7412,79992 6823:O2|60,@6824 6824:O2|@6825,0 6825:O3|@7124,69,@6826 6826:O4|60,-1,@199,@198 6827:O2|62,@6828 6828:O2|@6829,0 6829:O3|@7124,69,@6830 6830:O4|62,-1,@199,@198 6831:O2|@6833,@6832 6832:O2|@6834,0 6833:S7|52756e43616c6c 6834:O3|@7151,69,@6835 6835:O3|@6833,@582,@6836 6836:O4|@6837,I48,0,0 6837:O4|-1,@7415,@7416,@7414 6838:O2|@186,20 6839:O2|@7049,@7048 6840:O2|@6842,@6841 6841:O2|@6843,0 6842:S14|52756e5f657863657074696f6e31 6843:O3|@7199,69,@6844 6844:O4|@6846,@6842,@6861,@6845 6845:O4|@6864,I48,1,0 6846:O3|I48,@6848,@6847 6847:O4|@6849,I48,1,0 6848:O3|1,@7419,@7418 6849:O3|0,@584,@6850 6850:O10|0,0,0,0,0,0,0,@6852,@6851,0 6851:O2|@6858,@6857 6852:O2|@6854,@6853 6853:O2|@6855,0 6854:S7|65785f6964656e 6855:O3|@7124,69,@6856 6856:O4|@6854,-1,@342,@545 6857:O2|@6859,0 6858:S7|65785f74797065 6859:O3|@7144,69,@6860 6860:O6|@6858,0,0,0,@533,@342 6861:O2|-1,@6862 6862:O2|-7,@6863 6863:O8|@474,@6842,0,0,1,0,0,0 6864:O3|0,@584,@6865 6865:O10|0,@6866,0,0,0,0,0,0,0,0 6866:O2|@6868,@6867 6867:O2|@6869,0 6868:S2|6578 6869:O3|@7124,69,@6870 6870:O4|@6868,0,@342,@6871 6871:O4|-3,0,@6858,@7420 6872:O2|@6874,@6873 6873:O2|@6875,0 6874:S10|756e7361666543617374 6875:O3|@7124,69,@6876 6876:O4|@6874,-1,@6878,@6877 6877:O3|1,@6883,@6882 6878:O2|-1,@6879 6879:O2|-7,@6880 6880:O8|@474,@6881,1,0,1,0,0,0 6881:S13|756e7361666543617374283129 6882:O3|3,@7422,79992 6883:O3|3,@7421,79992 6884:O2|@6886,@6885 6885:O2|@6887,0 6886:S9|72756e5f63616c6c30 6887:O3|@7124,69,@6888 6888:O4|@6886,-1,@6890,@6889 6889:O3|1,@545,@6904 6890:O2|-1,@6891 6891:O2|-7,@6892 6892:O8|@6893,@6886,1,0,1,0,0,0 6893:O2|9,@6894 6894:O2|@6896,@6895 6895:O2|@6899,0 6896:O4|-4,1,@6897,0 6897:O4|4,@472,@6898,1 6898:O2|-3,I189 6899:O2|-7,@6900 6900:O8|@6902,@6901,2,0,1,0,0,0 6901:S12|72756e5f63616c6c30283129 6902:O4|4,0,@6903,0 6903:O5|-5,1,1,1,0 6904:O3|1,@1093,@6905 6905:O3|3,@7423,79992 6906:O2|@6908,@6907 6907:O2|@6909,0 6908:S9|72756e5f63616c6c31 6909:O3|@7124,69,@6910 6910:O4|@6908,-1,@6912,@6911 6911:O3|1,@545,@6916 6912:O2|-1,@6913 6913:O2|-7,@6914 6914:O8|@6897,@6915,1,0,1,0,0,0 6915:S12|72756e5f63616c6c31283129 6916:O3|1,@6905,@6917 6917:O3|3,@7424,79992 6918:O2|@6920,@6919 6919:O2|@6921,0 6920:S9|72756e5f63616c6c32 6921:O3|@7124,69,@6922 6922:O4|@6920,-1,@6924,@6923 6923:O3|1,@545,@6934 6924:O2|-1,@6925 6925:O2|-7,@6926 6926:O8|@6927,@6920,1,0,1,0,0,0 6927:O2|9,@6928 6928:O2|@6896,@6929 6929:O2|@6930,0 6930:O2|-7,@6931 6931:O8|@6933,@6932,2,0,1,0,0,0 6932:S12|72756e5f63616c6c32283129 6933:O4|4,@5087,@6903,0 6934:O3|1,@6936,@6935 6935:O3|3,@7425,79992 6936:O4|-2,1,@6937,0 6937:O2|@6939,@6938 6938:O2|@6940,0 6939:O2|49,@6905 6940:O2|50,@6917 6941:O2|@6943,@6942 6942:O2|@6944,0 6943:S9|72756e5f63616c6c33 6944:O3|@7124,69,@6945 6945:O4|@6943,-1,@6947,@6946 6946:O3|1,@545,@6961 6947:O2|-1,@6948 6948:O2|-7,@6949 6949:O8|@6950,@6943,1,0,1,0,0,0 6950:O2|9,@6951 6951:O2|@6896,@6952 6952:O2|@6953,0 6953:O2|-7,@6954 6954:O8|@6956,@6955,2,0,1,0,0,0 6955:S12|72756e5f63616c6c33283129 6956:O4|4,@6957,@6903,0 6957:O2|@5089,@6958 6958:O2|@5090,@6959 6959:O2|@6960,0 6960:O3|6,@474,2 6961:O3|1,@6963,@6962 6962:O3|3,@7426,79992 6963:O4|-2,1,@6964,0 6964:O2|@6939,@6965 6965:O2|@6940,@6966 6966:O2|@6967,0 6967:O2|51,@6935 6968:O2|@6970,@6969 6969:O2|@6971,0 6970:S9|72756e5f63616c6c34 6971:O3|@7124,69,@6972 6972:O4|@6970,-1,@6974,@6973 6973:O3|1,@545,@6989 6974:O2|-1,@6975 6975:O2|-7,@6976 6976:O8|@6977,@6970,1,0,1,0,0,0 6977:O2|9,@6978 6978:O2|@6896,@6979 6979:O2|@6980,0 6980:O2|-7,@6981 6981:O8|@6983,@6982,2,0,1,0,0,0 6982:S12|72756e5f63616c6c34283129 6983:O4|4,@6984,@6903,0 6984:O2|@5089,@6985 6985:O2|@5090,@6986 6986:O2|@6960,@6987 6987:O2|@6988,0 6988:O3|6,@474,3 6989:O3|1,@6991,@6990 6990:O3|3,@7427,79992 6991:O4|-2,1,@6992,0 6992:O2|@6939,@6993 6993:O2|@6940,@6994 6994:O2|@6967,@6995 6995:O2|@6996,0 6996:O2|52,@6962 6997:O2|@6999,@6998 6998:O2|@7000,0 6999:S9|72756e5f63616c6c35 7000:O3|@7124,69,@7001 7001:O4|@6999,-1,@7003,@7002 7002:O3|1,@545,@7019 7003:O2|-1,@7004 7004:O2|-7,@7005 7005:O8|@7006,@6999,1,0,1,0,0,0 7006:O2|9,@7007 7007:O2|@6896,@7008 7008:O2|@7009,0 7009:O2|-7,@7010 7010:O8|@7012,@7011,2,0,1,0,0,0 7011:S12|72756e5f63616c6c35283129 7012:O4|4,@7013,@6903,0 7013:O2|@5089,@7014 7014:O2|@5090,@7015 7015:O2|@6960,@7016 7016:O2|@6988,@7017 7017:O2|@7018,0 7018:O3|6,@474,4 7019:O3|1,@7021,@7020 7020:O3|3,@7428,79992 7021:O4|-2,1,@7022,0 7022:O2|@6939,@7023 7023:O2|@6940,@7024 7024:O2|@6967,@7025 7025:O2|@6996,@7026 7026:O2|@7027,0 7027:O2|53,@6990 7028:O2|@7030,@7029 7029:O2|@7031,0 7030:S14|52756e5f657863657074696f6e30 7031:O3|@7199,69,@7032 7032:O4|@7034,@7030,@7039,@7033 7033:O4|@7042,I48,0,0 7034:O3|I48,@7036,@7035 7035:O4|@7037,I48,0,0 7036:O3|1,@7430,@7429 7037:O3|0,@584,@7038 7038:O10|0,0,0,0,0,0,0,0,@6852,0 7039:O2|-1,@7040 7040:O2|-7,@7041 7041:O8|@474,@7030,0,0,1,0,0,0 7042:O3|0,@584,@7043 7043:O10|0,@7044,0,0,0,0,0,0,0,0 7044:O2|@6868,@7045 7045:O2|@7046,0 7046:O3|@7124,69,@7047 7047:O4|@6868,0,@342,@214 7048:O2|@7050,0 7049:S11|6164644f7665726c6f6164 7050:O3|@7124,69,@7051 7051:O4|@7049,-1,@7053,@7052 7052:O3|1,@7054,@5897 7053:O2|-2,0 7054:O3|1,@7056,@7055 7055:O3|3,@7432,79992 7056:O3|3,@7431,79992 7057:O2|@2511,@7058 7058:O2|@7059,0 7059:O3|@7124,69,@2827 7060:O2|@2130,@7061 7061:O2|@7062,0 7062:O3|@7144,69,@2128 7063:O2|@2513,@7064 7064:O2|@7066,@7065 7065:O2|@7067,0 7066:O3|@7144,69,@3025 7067:O3|@7124,69,@3032 7068:O2|@1094,@7069 7069:O2|@7070,0 7070:O3|@7144,69,@1095 7071:O2|61,@7072 7072:O2|@7073,0 7073:O3|@7124,69,@7074 7074:O4|61,-1,@7076,@7075 7075:O3|1,@7077,@200 7076:O2|-2,-1 7077:O4|-2,1,@7078,0 7078:O2|@7080,@7079 7079:O2|@7082,0 7080:O2|49,@7081 7081:O3|3,@7433,79996 7082:O2|50,@7081 7083:O2|@5106,@7084 7084:O2|@7085,0 7085:O3|@7144,69,@5104 7086:O2|@2512,@7087 7087:O2|@7088,0 7088:O3|@7124,69,@2780 7089:O2|@5775,@7090 7090:O2|@7091,0 7091:O3|@7124,69,@5773 7092:O2|@551,@7093 7093:O2|@7094,0 7094:O3|@7144,69,@552 7095:O2|@208,@7096 7096:O2|@7097,0 7097:O3|@7144,69,@209 7098:O2|@7099,0 7099:O3|@7144,69,@547 7100:C20,168|00804d00a2002c694d019c002d694d0296002e694d0390002f694d048a0030694d05840031694d067e0032694d07780033694d08720034694d096c00220c694d0a6500220d694d0b5e00220e694d0c5700220f694d0d50002210694d0e49002211694d0f42002212694d103b002213694d1134002214692e2c2f2f2d2210220d2211322212221b2219221c2213221d2217221c221e68124d120d0022162b6a292714420e0e0e0e0e|@7101,@6511,@6517,@6523,@6514,@6531,@6529,@6494,@6500,@6508,@6526,@6497,@6520,@6469,@6479,@6484,@6474,@6503,@6489,@6387| 7101:S21|4d414b455f28292e757365496e746f456e76283129 7102:MO1|@16 7103:MO2|@2,@1 7104:MO1|0 7105:MO1|@46 7106:MO1|0 7107:MO1|0 7108:MO1|@95 7109:MO1|1209 7110:MO1|1208 7111:MB4096|282a0a09436f707972696768742028632920323030362d372020446176696420432e204a2e204d617474686577730a0a0954686973206c696272617279206973206672656520736f6674776172653b20796f752063616e2072656469737472696275746520697420616e642f6f720a096d6f6469667920697420756e64657220746865207465726d73206f662074686520474e55204c65737365722047656e6572616c205075626c69630a094c6963656e7365206173207075626c697368656420627920746865204672656520536f66747761726520466f756e646174696f6e3b206569746865720a0976657273696f6e20322e31206f6620746865204c6963656e73652c206f722028617420796f7572206f7074696f6e2920616e79206c617465722076657273696f6e2e0a090a0954686973206c69627261727920697320646973747269627574656420696e2074686520686f706520746861742069742077696c6c2062652075736566756c2c0a0962757420574954484f555420414e592057415252414e54593b20776974686f7574206576656e2074686520696d706c6965642077617272616e7479206f660a094d45524348414e544142494c495459206f72204649544e45535320464f52204120504152544943554c415220505552504f53452e20205365652074686520474e550a094c65737365722047656e6572616c205075626c6963204c6963656e736520666f72206d6f72652064657461696c732e0a090a09596f752073686f756c642068617665207265636569766564206120636f7079206f662074686520474e55204c65737365722047656e6572616c205075626c69630a094c6963656e736520616c6f6e6720776974682074686973206c6962726172793b206966206e6f742c20777269746520746f20746865204672656520536f6674776172650a09466f756e646174696f6e2c20496e632e2c203531204672616e6b6c696e2053742c20466966746820466c6f6f722c20426f73746f6e2c204d41202030323131302d3133303120205553410a2a290a0a282a20436f6d70696c65722074686520636f6d70696c657220616e64206578706f7274206974206173206120706f727461626c652066696c652e20205468652072657374206f66207468650a202020626f6f7473747261702070726f63657373206973207468656e20646f6e65207768656e2074686520706f727461626c652066696c6520697320696d706f727465642e202a290a0a506f6c794d4c2e7072696e745f646570746820303b0a0a506f6c794d4c2e6d616b6520226d6c736f757263652f4d4c436f6d70696c65722f426f6f74223b0a506f6c794d4c2e6d616b6520226d6c736f757263652f4d4c436f6d70696c6572223b0a0a506f6c794d4c2e7368617265436f6d6d6f6e44617461204d4c436f6d70696c65722e7368656c6c3b0a0a506f6c794d4c2e6578706f7274506f727461626c652822706f6c7974656d70222c0a20202020666e202829203d3e20284d4c436f6d70696c65722e7368656c6c28293b204f532e50726f636573732e65786974204f532e50726f636573732e73756363657373292068616e646c65205f203d3e204f532e50726f636573732e65786974204f532e50726f636573732e6661696c757265293b0a20202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020 7112:MO1|@105 7113:MO1|1 7114:MO1|0 7115:MO1|0 7116:MO1|-1 7117:MB4096|23206561746564207369676e6174757265204d4c436f6d70696c65720a73696f6e0a790a730a0a6d706f72740a20202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020 7118:MO1|0 7119:MO1|0 7120:MO1|@7123 7121:MO1|@185 7122:MO1|38 7123:MO81|80,0,0,0,0,0,0,0,@193,0,@519,@524,@527,0,@535,@554,0,0,0,@567,@573,0,@576,0,0,0,@5968,@5974,0,0,0,0,0,0,@5977,0,@5989,0,0,0,0,@5992,@5995,@5999,@6002,@6006,@6010,@6014,@6806,0,0,0,0,@6810,@6815,@6823,@6827,@6831,@7057,@7060,@7063,@7068,@7071,@7083,0,@7086,0,0,0,0,0,0,0,0,0,0,0,@7089,@7092,@7095,@192 7124:MO1|0 7125:MO1|@206 7126:MO2|0,@209 7127:MO1|@212 7128:MO2|-1,@221 7129:MO1|0 7130:MO1|@136 7131:MO1|0 7132:MO1|0 7133:MO1|0 7134:MO2|-1,@454 7135:MO2|@464,0 7136:MO1|0 7137:MO1|0 7138:MO2|-1,@495 7139:MO2|-1,@504 7140:MO2|@464,0 7141:MO1|0 7142:MO1|0 7143:MO1|0 7144:MO1|0 7145:MO1|0 7146:MO2|0,@547 7147:MO1|0 7148:MO2|0,@552 7149:MO1|0 7150:MO1|@214 7151:MO1|0 7152:MO1|@7155 7153:MO1|@584 7154:MO1|7 7155:MO11|10,0,@587,0,@595,@5869,@5882,0,@5899,@5907,@586 7156:MO1|@214 7157:MO3|@684,@686,@683 7158:MO3|@615,@618,@614 7159:MO1|0 7160:MO1|0 7161:MO1|0 7162:MO1|0 7163:MO1|0 7164:MO1|0 7165:MO1|0 7166:MO1|0 7167:MO1|0 7168:MO1|0 7169:MO1|0 7170:MO1|0 7171:MO1|0 7172:MO1|0 7173:MO1|0 7174:MO1|0 7175:MO1|0 7176:MO1|0 7177:MO1|0 7178:MO1|0 7179:MO3|@690,@692,@689 7180:MO3|@696,@698,@695 7181:MO3|@733,@735,@732 7182:MO3|@739,@741,@738 7183:MO3|@745,@747,@744 7184:MO3|@751,@753,@750 7185:MO1|@7188 7186:MO1|@841 7187:MO1|49 7188:MO273|272,0,0,@843,@845,0,0,0,0,0,@847,0,0,@849,0,0,0,0,0,0,@851,0,0,@853,0,0,0,0,@855,0,0,0,0,0,0,0,@857,0,0,0,0,0,0,@858,0,0,0,0,0,0,0,@859,0,0,@861,@863,@865,@867,@869,@870,@872,@874,@875,0,@877,0,0,@879,0,0,0,0,0,@881,0,0,0,@883,0,0,@885,0,0,0,0,0,0,@887,0,0,0,0,0,@889,0,0,0,@891,0,0,0,0,0,@893,0,@895,@897,0,0,@899,0,0,0,@901,0,0,0,0,0,0,0,0,0,0,0,@903,0,0,0,0,0,0,0,0,0,0,0,0,0,0,@904,0,0,0,@906,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,@908,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,@910,0,0,@912,0,0,0,0,0,0,0,0,0,0,0,0,0,0,@914,0,0,0,@916,0,@918,0,0,0,0,0,0,0,0,0,0,@920,0,0,@922,0,0,0,0,0,0,0,0,@924,0,0,0,0,0,0,0,0,0,0,@926,0,0,0,0,@928,0,0,0,0,0,@930,0,@932,0,0,0,0,0,0,0,@842,0,0,0,0,0,0,0 7189:MO1|0 7190:MO3|@1007,@1009,@1006 7191:MO2|0,@1095 7192:MO1|0 7193:MO1|0 7194:MO1|@206 7195:MO1|0 7196:MO3|@1919,@1921,@1918 7197:MO3|@2025,@2027,@2024 7198:MO3|@1995,@1997,@1994 7199:MO1|0 7200:MO3|@2001,@2003,@2000 7201:MO1|0 7202:MO3|@2007,@2009,@2006 7203:MO3|@2013,@2015,@2012 7204:MO1|0 7205:MO3|@2019,@2021,@2018 7206:MO1|0 7207:MO1|0 7208:MO2|0,@531 7209:MO1|@214 7210:MO1|@2777 7211:MO2|-1,@2784 7212:MO2|-1,@2793 7213:MO2|@464,0 7214:MO1|0 7215:MO2|-1,@2803 7216:MO1|0 7217:MO2|-1,@2807 7218:MO1|0 7219:MO1|0 7220:MO2|0,@2771 7221:MO2|-1,@2830 7222:MO1|0 7223:MO2|-1,@2837 7224:MO2|@464,0 7225:MO1|0 7226:MO1|0 7227:MO1|@214 7228:MO1|@3030 7229:MO2|-1,@3036 7230:MO1|0 7231:MO2|-1,@3044 7232:MO2|@464,0 7233:MO1|0 7234:MO2|-1,@3049 7235:MO1|0 7236:MO2|-1,@3057 7237:MO1|0 7238:MO1|@214 7239:MO2|0,@3025 7240:MO1|0 7241:MO3|@3145,@3147,@3144 7242:MO3|@3151,@3153,@3150 7243:MO3|@3167,@3169,@3166 7244:MO1|213 7245:MO257|256,@3508,@3509,@3510,@3511,@3512,@3513,@3514,@3515,@3516,@3517,@3518,@3519,@3520,@3521,@3522,@3523,@3524,@3525,@3526,@3527,@3528,@3529,@3530,@3531,@3532,@3533,@3534,@3535,@3536,@3537,@3538,@3539,@3540,@3541,@3542,@3543,@3544,@3545,@3546,@3547,@3548,@3549,@3550,@3551,@3552,@3553,@3554,@3555,@3556,@3557,@3558,@3559,@3560,@3561,@3562,@3563,@3564,@3565,@3566,@3567,@3568,@3569,@3570,@3571,@3572,@3573,@3574,@3575,@3576,@3577,@3578,@3579,@3580,@3581,@3582,@3583,@3584,@3585,@3586,@3587,@3588,@3589,@3590,@3591,@3592,@3593,@3594,@3595,@3596,@3597,@3598,@3599,@3600,@3601,@3602,@3603,@3604,@3605,@3606,@3607,@3608,@3609,@3610,@3611,@3612,@3613,@3614,@3615,@3616,@3617,@3618,@3619,@3620,@3621,@3622,@3623,@3624,@3625,@3626,@3627,@3628,@3629,@3630,@3631,@3632,@3633,@3634,@3635,@3636,@3637,@3638,@3639,@3640,@3641,@3642,@3643,@3644,@3645,@3646,@3647,@3648,@3649,@3650,@3651,@3652,@3653,@3654,@3655,@3656,@3657,@3658,@3659,@3660,@3661,@3662,@3663,@3664,@3665,@3666,@3667,@3668,@3669,@3670,@3671,@3672,@3673,@3674,@3675,@3676,@3677,@3678,@3679,@3680,@3681,@3682,@3683,@3684,@3685,@3686,@3687,@3688,@3689,@3690,@3691,@3692,@3693,@3694,@3695,@3696,@3697,@3698,@3699,@3700,@3701,@3702,@3703,@3704,@3705,@3706,@3707,@3708,@3709,@3710,@3711,@3712,@3713,@3714,@3715,@3716,@3717,@3718,@3719,@3720,@3721,@3722,@3723,@3724,@3725,@3726,@3727,@3728,@3729,@3730,@3731,@3732,@3733,@3734,@3735,@3736,@3737,@3738,@3739,@3740,@3741,@3742,@3743,@3744,@3745,@3746,@3747,@3748,@3749,@3750,@3751,@3752,@3753,@3754,@3755,@3756,@3757,@3758,@3759,@3760,@3761,@3762,@3507 7246:MO257|256,2,1,2,2,1,2,2,2,1,2,3,7,1,3,1,1,1,3,7,3,3,3,9,3,3,3,3,3,2,1,2,2,1,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,4,5,5,1,1,1,1,1,1,2,2,2,4,1,1,1,1,1,1,1,1,1,1,1,1,1,3,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,2,3,5,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 7247:MO3|@4680,@4682,@4679 7248:MO3|@4708,@4710,@4707 7249:MO3|@4714,@4716,@4713 7250:MO1|0 7251:MO3|@4799,@4801,@4798 7252:MO3|@4805,@4807,@4804 7253:MO1|0 7254:MO1|0 7255:MO1|0 7256:MO1|0 7257:MO10|@7259,@7260,@7261,@7262,@642,@5297,@7263,@7258,@631,0 7258:MO1|0 7259:MO1|32 7260:MO1|I48 7261:MO1|57 7262:MO1|0 7263:MO1|68 7264:MO2|0,@5635 7265:MO1|@5638 7266:MO2|@5643,@5642 7267:MO2|0,@2771 7268:MO2|0,@5653 7269:MO1|@534 7270:MO1|0 7271:MO2|@5658,@5657 7272:MO2|0,@2771 7273:MO2|0,@5667 7274:MO1|@534 7275:MO1|0 7276:MO2|@5672,@5671 7277:MO2|0,@2771 7278:MO2|0,@5681 7279:MO1|@534 7280:MO1|0 7281:MO2|@5686,@5685 7282:MO2|0,@2771 7283:MO2|0,@5695 7284:MO1|@534 7285:MO1|0 7286:MO2|@5700,@5699 7287:MO2|0,@2771 7288:MO2|0,@5709 7289:MO1|@534 7290:MO1|0 7291:MO2|@5714,@5713 7292:MO2|@5717,@5716 7293:MO2|@5720,@5719 7294:MO2|@5723,@5722 7295:MO2|0,@2771 7296:MO2|0,@5732 7297:MO1|@534 7298:MO1|0 7299:MO2|@5737,@5736 7300:MO2|@5740,@5739 7301:MO2|0,@5744 7302:MO1|@214 7303:MO1|@5749 7304:MO2|-1,@5757 7305:MO1|0 7306:MO2|-1,@5764 7307:MO2|@464,0 7308:MO1|0 7309:MO2|0,@5744 7310:MO2|-1,@5778 7311:MO1|0 7312:MO2|-1,@5786 7313:MO2|@464,0 7314:MO1|0 7315:MO2|-1,@5791 7316:MO1|0 7317:MO2|-1,@5794 7318:MO1|0 7319:MO1|0 7320:MO2|@5808,@5807 7321:MO2|0,@5744 7322:MO2|@5813,@5812 7323:MO2|0,@5744 7324:MO2|@5818,@5817 7325:MO2|@5821,@5820 7326:MO2|0,@5744 7327:MO2|@5826,@5825 7328:MO2|@5829,@5828 7329:MO2|0,@5744 7330:MO2|@5833,@5832 7331:MO2|0,@5744 7332:MO1|0 7333:MO2|0,@5744 7334:MO2|0,@5108 7335:MO2|0,@2771 7336:MO2|0,@5847 7337:MO1|@534 7338:MO1|0 7339:MO2|@5854,@5853 7340:MO2|0,@2771 7341:MO2|@5857,@5856 7342:MO2|0,@2771 7343:MO2|@5860,@5859 7344:MO2|0,@2771 7345:MO2|@5863,@5862 7346:MO2|0,@2771 7347:MO2|@5866,@5865 7348:MO2|0,@2771 7349:MO2|@5868,@5867 7350:MO2|0,@2771 7351:MO1|@214 7352:MO1|@214 7353:MO1|@214 7354:MO1|@214 7355:MO1|@214 7356:MO1|@7359 7357:MO1|@584 7358:MO1|7 7359:MO11|10,@5948,@5951,@5954,0,0,0,@5957,@5960,@5963,@5947 7360:MO2|0,@3025 7361:MO1|@214 7362:MO1|@7365 7363:MO1|@185 7364:MO1|38 7365:MO81|80,@6022,@6085,@6099,0,@6114,0,0,@6123,@6132,@6139,0,0,@6147,0,0,@6155,0,@6163,0,0,@6177,0,@6185,@6199,@6207,@6221,@6244,@6258,@6349,@6368,0,@6378,0,@6533,0,0,@6541,0,0,0,0,0,0,@6554,0,0,0,@6563,@6571,@6579,@6590,@6618,@6643,0,0,0,0,@6651,@6659,@6667,@6685,@6704,0,0,0,0,@6718,@6776,0,0,0,0,@6791,0,0,0,0,0,0,@6021 7366:MO2|0,@6109 7367:MO1|@214 7368:MO1|@534 7369:MO1|0 7370:MO2|0,@6109 7371:MO2|0,@6109 7372:MO2|0,@6109 7373:MO2|0,@6109 7374:MO2|0,@6109 7375:MO2|0,@6109 7376:MO2|0,@6109 7377:MO3|@6216,@6218,@6215 7378:MO2|0,@6109 7379:MO3|@4719,@6229,@4721 7380:MO2|0,@6109 7381:MO3|@6253,@6255,@6252 7382:MO2|0,@6109 7383:MO18|@6266,@6285,@6290,@6295,@6300,@6305,@6310,@6313,@6316,@6321,@6324,@6329,@6332,@6335,@6338,@6341,@6344,@6265 7384:MO2|0,@6109 7385:MO1|0 7386:MO2|0,@6109 7387:MO1|@7390 7388:MO1|@584 7389:MO1|1 7390:MO11|10,0,0,0,0,0,0,0,0,@6548,0 7391:MO2|0,@6109 7392:MO2|0,@6109 7393:MO2|0,@6109 7394:MO3|@4977,@6587,@4975 7395:MO2|0,@6109 7396:MO2|0,@5104 7397:MO2|0,@6109 7398:MO2|0,@6109 7399:MO2|0,@6109 7400:MO1|@7403 7401:MO1|@584 7402:MO1|5 7403:MO11|10,0,0,@6726,0,@6729,@6744,@6759,0,0,@6725 7404:MO2|0,@6109 7405:MO1|@214 7406:MO2|0,@6109 7407:MO1|@214 7408:MO2|0,@6109 7409:MO1|@214 7410:MO2|0,@6109 7411:MO2|0,@6109 7412:MO1|@214 7413:MO1|0 7414:MO1|@7417 7415:MO1|@6838 7416:MO1|10 7417:MO21|20,0,0,@6840,0,0,0,0,@6872,0,@6884,@6906,@6918,@6941,@6968,@6997,@7028,0,0,0,@6839 7418:MO1|0 7419:MO1|0 7420:MO2|0,@6860 7421:MO1|@214 7422:MO1|@214 7423:MO1|@214 7424:MO1|@214 7425:MO1|@214 7426:MO1|@214 7427:MO1|@214 7428:MO1|@214 7429:MO1|0 7430:MO1|0 7431:MO1|@214 7432:MO1|@214 7433:MO1|@214 0:MVO1|1 1:MVO1|0 2:MVO1|1 3:MVO1|1 4:MVO1|1 5:MVO1|1 6:MVO1|1 7:MVO1|1 8:MVO1|1 polyml.5.2.1/imports/polymlint64.txt0000644000175000017500000335003411020453521016434 0ustar daviddavidObjects 7455 Root 0 0:O3|@2,@7114,@1 1:O1|@171 2:C5,96|008056085617293b4d0054000e0c00034d014c002a2a0e0e0e0c0002503b2d0e0e0c00025078760e3b28133b4d0230000e0c0003050f00ff6d3b4d0322000e0e0e0c00026478760a3b3b2d0e0e0c0002050500ff6d3b64511e333b2705420e0e|@4,I253,@3,I150,I1| 3:O1|@5 4:S24|506f6c794d4c2e72756e46756e6374696f6e283129283129 5:C3,56|00802b3b4d0030000e0c000303033b02232b352c36294d011e000e0e0e0c00025078760a3b3b2e0e0e0c0002050500ff6d3b6465420e0e0e|@6,I229,@3| 6:S20|506f6c794d4c2e72756e4f6e456e747279283129 7:O2|@9,@8 8:O2|@34,@33 9:O1|@10 10:C8,88|00800402003b3b3b2c4d004b000c00055029352a364d013f002a4d023a000e0e0e0c0003293d4d032e000e0e0e0c00032c2a4d0422000e0e0e0c00034d0518002a6928072a4d060f000c0003503b2707420e0e0e0e0e0e0e|@12,@13,4611686018427387903,I244,I243,I242,@11,I73| 11:O1|@19 12:S20|5369676e616c2e666f726b546872656164283129 13:O1|@14 14:C10,320|00832e3b4d0038010e0c000303072b2e452d4606dd2e3529353b4d0022010e0e0e0c0003039e2936293c4d0012010e0e0e0c0003034e3036303c4d0102010e0e0e0c0003303c4d02f6000e0e0e0c0003293b4d03ea000e0e0e0c0003644d04df000c000203054d05d60010303c4d01cf000c0003302c2c2c2c4d06c300220c7b060c000530362f3c4d02b4000e0c0003293b4d03aa000e0e0e0c0003644d049f000c000203054d059600102f3c4d018f000c00032f2b332c2c4d068300340e7b060b0005293630362a4d0773004d086f000c00030a03000f00080012000c00280602073b02043d02013f29324d015000020248000e0c00033128064d0241000e0e0c0003293b4d0336000e0e0e0c0003644d042b000c000203054d052200103128064d011a000e0e0e0c0003312d2c2c2c4d060b00220d7b060d00051f040e0e|@16,I229,I242,I243,I251,I218,@15,@13,-2,I107| 15:O3|12,@18,@17 16:S38|5468726561642e5468726561642e6174747273546f576f7264283129636f6e76657274283429 17:S53|5468652073616d65206174747269627574652061707065617273206d6f7265207468616e206f6e636520696e20746865206c697374 18:S6|546872656164 19:C17,224|00803c3b4d00d8000e0c0003294d01cf000c00024d02c8000e0c0002031929352a367876093b2c2e0e0c0002050500ff6d3b642603029d4d03a5003b4d04a0000e0c0003293c4d0596000e0e0e0c000364031c4d0389004d0685000e0e0c0002293b4d057a000e0e0e0c00036402013b030d3b3c4d0768000e0c00035002554d085d000402003b3b3b2c4d0952000e0e0e0c00055029352a364d0a43002a4d0b3e000e0e0e0c0003293d4d0c32000e0e0e0c00032c2a4d0d26000e0e0e0c00032f2a6928072a4d0e16000e0e0e0c0003503b26093b4d0f07002d0e0e7d040002|@21,I62,I105,I218,@7446,I253,I251,I71,@22,@20,@13,4611686018427387903,I244,I243,I242,I73,@11| 20:O1|@31 21:S19|5369676e616c2e736967546872656164283129 22:O1|@23 23:C13,208|00812b03043b5002783b4d00c2003b4d01bd000e0e0c0003293c4d02b2000e0e0e0c00036403033b0226291b204e4d039e000e0e0e0c000303033b0213293c4d048d000e0e0c0003292502501e423b64644d007b004d0577000c0002293b4d036e000e0e0e0c000303043b5002123c4d005d004d0659000e0e0c000326031e75514d074b004d0847004d0943000c0003504d003b004d0a37000c0002293c4d032e000e0e0e0c000303033b021f4d001f003b3c4d0b19000e0e0c0004503d4d000e004d060a002e0e7e05000364430e0e|@25,@7446,I253,I251,I229,I106,I71,I73,@7115,@26,@24,I70,I255| 24:O1|@29 25:S35|5369676e616c2e73696754687265616428312962726f6164436173745765616b283229 26:O1|@27 27:C4,48|00802b3b4d0028000e0c000303033b021b2b352c363f2b4d0115000e0e0c000350294d020a002e0e7d050002420e0e0e|@28,I229,I73,@26| 28:S30|5468726561642e436f6e646974696f6e5661722e77616b65416c6c283129 29:C18,544|00812c352d364d0016020e0e0e0c0001293c4d010a020e0e0e0c00032928064d02fd010e0e0c0003290a040010000a0013000a0019004d03e601020a3c02074d04dd0102013b293c4d05d4010e0c000303043b5002444d00c6010e0e0e0c00014d00bc010e0c0001293c4d01b2010e0e0e0c00034d06a8012a4d02a3010c00033d2a4d079a010e0e0e0c00032d3c2b4d088d010e0e0c000426063b2f3b4d017f010c0003293c4d0976010e0e0e0c00036403033b0226291b204e4d0562010e0e0e0c000303033b0213293c4d0a51010e0e0c0003292502501e3d3b64642f4d0b3e010e0e0e0c0002293b4d0532010e0e0e0c000303043b50020e3c314d0c20010e0c000326031e6c512d3b4d0111010e0e0c0003320c00022e3b2b4d0801010e0e0c0004502f4d0df6000e0e0e0c0002293c4d05ea000e0e0e0c000303043b500217303b3c4d08d7000c0004503d314d0ccd000e0e0c0003504d00c3000c00012c4d04bb004d0eb7000c00030a03000f00080012000c00280602073b02043d02013f4d009a000e0e0e0c0001293c4d018e000e0e0e0c00034d0684002a4d027f000c00032c2a4d0776000e0e0e0c00032e3c2b4d0869000e0e0c000450313b4d055d000e0e0c000303033c020f4d034f00324d094a000e0e0e0c0003033d4d003e000e0e0e0c0001293e4d0132000e0e0e0c0003293b4d0f26000e0e0e0c0003654d101b000c0002030e280b3b4d0c0f0022120e7e1200033b02013b270e430e|@30,I72,I253,I243,-1,-2,I229,4611686018427387897,I242,I255,I251,I106,I71,I73,I70,I107,I113,I218| 30:S40|5468726561642e436f6e646974696f6e5661722e7369676e616c4f7242726f616463617374283229 31:C2,16|00802b3b4d0008002d0e0e0e7e030003|@32,@22| 32:S38|5369676e616c2e73696754687265616428312962726f6164436173745765616b283129283129 33:O2|@159,@158 34:O4|@35,@147,@39,@7116 35:C6,112|00805609293b4d0066000e0e0e0c000329293b4d0159000e0e0c000303043b50021c29352a362a36293b3b4d0241000e0e0c0004502a250426031e2926035056284d032b003b4d0026000e0e0e0c00032a2a694d0319003b2b4d0213000c000450565728122a4d040600330e7e090003|@36,I253,I229,I255,@7117,I150| 36:S28|426173696353747265616d494f28292e646f4f6e456e747279283129 37:O2|@39,@38 38:O2|@70,@69 39:O2|@40,@7116 40:C6,152|00805607293b4d008e000e0e0e0c000329293b4d0181000e0e0c000303043b50022029352a362a392b4d026b002b4d0366000e0e0e0c0004502a250426031e2d2603503b2e0c0002505627293b2c4d0446000e0e0e0c0004505637293b4d0037000c000329293b4d012d000e0e0c000303033b021d29352a362a36293b3b4d0416000e0e0e0c0004502a250426031e293b662706420e0e0e|@42,I253,I229,@43,@41,I255| 41:O1|@59 42:S27|426173696353747265616d494f28292e646f4f6e4c6f6164283129 43:O1|@44 44:C11,120|00802b36293b4d006e000e0e0e0c00032d3729352f352c3b4d015c000e0c000303033b02492b2307294d024b000c00024d0344000e0c0002031d29353b303b3b4d0434000e0c0004503b0e0e0e4f0527008000026502162b4d061c004d0718006a4d0813004d090f002b6a6410642705420e0e0e0e0e0e0e|@46,I253,I229,I105,I218,I255,@47,@57,@48,@7118,@45| 45:S2|496f 46:S28|426173696353747265616d494f28292e666c7573684f757427283129 47:C12,176|008078762d3b5630564329314d00a0000e0c00032968012c332b4d0192000e0e0e0c000427041205000100f8ff0c0002054600ff6d56112a354d0273004d036f000c000303032a0202020202292a353c4d045c000e0c000303064d055200020202020212292b4d0646006a4d0241004d073d002b6a646410292d4d0832000e0e0e0c000356232a2a4d0924000e0c00036503033b0212292d4d0814000e0c00030e4f0a0b0011000264420e0e0e0e0e0e|@49,I107,@50,@7118,I251,I229,@55,@48,@45,I106,I113,@47| 48:S8|666c7573684f7574 49:S40|426173696353747265616d494f28292e666c7573684f757427283129666c75736842756666283129 50:O1|@51 51:C10,208|00822b3b4d00c8000e0c0003034a2c4d01bd000e0e0c0002030c2c3b4d02b0000e0c000302013b03032c02054d03a000102e352a2a4d0497000c00030312292b4d058c000e0c00032b2a326a296502054d067c00106502722b352e352e4d016f000c0002030c2e3b4d0264000e0c000302013b03032e02054d035400102b4d014e000e0e0e0c0002030c2b3b4d0240000e0c000302013b03032b02054d033000102a2a4d0729000e0e0c0003292d4d041e000e0e0e0c00036403082a2a336a296402054d080900102704440e0e0e0e0e|@53,I229,I105,I231,@52,I248,I240,@52,I239,@52| 52:O3|11,@54,0 53:S32|566563746f72536c6963654f7065726174696f6e7328292e736c696365283329 54:S9|537562736372697074 55:O3|1,@56,0 56:S9|496e74657272757074 57:O3|@7119,@58,0 58:S20|426c6f636b696e674e6f74537570706f72746564 59:C16,448|00823b4d00b9010e0e0c000229293b4d01ad010e0e0c000303033b022229352a362a354d0299014d0195010e0e0c000303052a68010207292503511e2e3b6564294d037b010c00024d0474010e0c00020345293529354d0266014d0162010e0e0e0c000303212936293c4d0152010e0e0e0c000303033b020b4d0543014d063f010c000264020d4d0535014d0631010e0e0c000264020d4d0525014d0621010e0e0c00024d0718014d0614010e0c00023b303b4d0809010e0e0c0003293c4d09fe000e0e0e0c00036403033b0226291b204e4d01ea000e0e0e0c000303033b0213293c4d0ad9000e0e0c0003292502501e3f3b6464304d0bc6000e0e0e0c0002293b4d01ba000e0e0e0c000303033b02103c324d0ca9000e0e0c000326031e6e3b6578760d3b220c220c0e0e0e0c0002054500ff6d314d0d86000e0e0e0c0002293c4d017a000e0e0e0c000303043b500217323b3c4d0e67000c0004503d334d0c5d000e0e0c0003502f4d0652000e0e0e0c0002502a10314d0d44000e0c0002293c4d013a000e0e0e0c000303043b500217323b3c4d0e27000c0004503d334d0c1d000e0e0c0003502f4d0612000e0e0e0c0002502a2707440e0e0e0e0e0e0e|@61,@62,I229,-1,I105,I218,@60,@65,@60,I253,I251,I106,I71,I73,I70,I255| 60:O2|@68,0 61:S26|426173696353747265616d494f28292e70726f74656374283329 62:O1|@63 63:C7,112|00804d006a000e0e0e0c0001293c4d015e000e0e0e0c0003293c4d0252000e0e0e0c0003293c4d0346000e0e0e0c00033b2a692c28064d0236000e0e0e0c0003290a040010000a0013000a0019004d041e00020a3c02074d05150002013b4d040e002a69293b692d2a692709420e0e0e|@64,I72,I253,I243,I251,-1,-2| 64:S30|5468726561642e5468726561642e67657441747472696275746573283129 65:O1|@66 66:C13,192|00804d00ba000e0e0e0c0001293c4d01ae000e0e0e0c00030402002e3b3b2c4d029d000e0e0c00055029352a364d008f000c00014d0388002b4d0483000c0003292f4d057a000e0e0e0c00032d2a4d066e000e0e0e0c00032c3c2b4d0761000e0e0c0004502e3f4d0555000e0e0c0003293f4d084a000e0e0e0c000364033c4d003d000e0e0c0001293e4d0132000e0e0e0c0003293b4d0926000e0e0e0c0003654d0a1b000c0002030e280b3b4d0b0f00220d0e7e0c00033b02013b2709420e|@67,I72,I253,@13,4611686018427387903,I244,I243,I242,I255,I251,I113,I218,I73| 67:S30|5468726561642e5468726561642e73657441747472696275746573283129 68:O2|-1,-2 69:O2|@91,@90 70:O2|@71,@7120 71:C8,160|00805607293b4d0096000e0e0e0c000329353b4d0189000e0e0c0003037029362935293b4d0078000e0c00032b39293b4d006c000e0c00032d382a2d4d0260000e0c00032968012b2f2b4d0352000e0e0e0c0004654d0447000c00023b220c0e0e0c0002502d2b2b4d0534000e0c0004502e3b2f4d0628000e0c0004502c3b2d4d061c000e0c0004503b2707020a3b2e2e0e0e0e7d05000265420e0e0e0e0e0e|@73,I253,I229,I107,@74,@76,@72,I255| 72:O1|@84 73:S16|54657874494f2e6f6e4c6f6164283129 74:O1|@75 75:C10,208|00822b3b4d00c8000e0c0003034a2c4d01bd000e0e0c0002030c2c3b4d02b0000e0c000302013b03032c02054d03a000102e352a2a4d0497000c00030312292b4d058c000e0c00032b2a326a296502054d067c00106502722b352e352e4d016f000c0002030c2e3b4d0264000e0c000302013b03032e02054d035400102b4d014e000e0e0e0c0002030c2b3b4d0240000e0c000302013b03032b02054d033000102a2a4d0729000e0e0c0003292d4d041e000e0e0e0c00036403082a2a336a296402054d080900102704440e0e0e0e0e|@53,I229,I105,I231,@52,I248,I240,@52,I239,@52| 76:O1|@77 77:C12,168|00800403002c2a4d009d000e0e0c00035029352a362b372b362a0a01006d0073002a28104d0180000e0c0003293c4d0276000e0e0e0c00032928084d0369000e0e0c000378760f3b2c28413b4d0458000e0c0004050800ff6d4d054b0010292f4d0644000e0c0003502d302b2808324d0735000e0e0c000650294d082a000e0e0e0c00025029270402144d091a00020e292c4d0a12000e0e0e0c000329642705420e0e0e0e0e0e0e|@79,@80,I239,I240,I241,I11,@78,I151,I198,I47,I48,I252| 78:O3|4,@83,0 79:S24|436861724172726179536c6963652e766563746f72283129 80:O1|@81 81:C1,24|00812c352d362e372e2a452c462b4766430e0e0e0e0e0e0e|@82| 82:S31|566563746f72536c6963654f7065726174696f6e7328292e62617365283229 83:S4|53697a65 84:C10,120|00822c352d362d4d006d000e0e0c0002304d0163000c0002030c303b4d0258000e0c000302013b03033002054d03480010292b4d0441000e0e0c0003292e4d0536000e0e0e0c00036403054d062900102f4d0123000c0002030e2b2a314d071700320e7b050900042f28082d2c2e4d080600347b07090006|@85,I223,I105,I231,@52,I239,I249,@52,I254,I198| 85:S20|4368617241727261792e636f7079566563283329 86:O2|0,@87 87:O5|@7122,@88,I148,@89,@7121 88:S5|737464496e 89:O2|4096,@7123 90:O2|@39,@145 91:O2|@92,@7124 92:C6,152|00805607293b4d008e000e0e0e0c000329293b4d0181000e0e0c000303043b50022029352a362a392b4d026b002b4d0366000e0e0e0c0004502a250426031e2d2603503b2e0c0002505627293b2c4d0446000e0e0e0c0004505637293b4d0037000c000329293b4d012d000e0e0c000303033b021d29352a362a36293b3b4d0416000e0e0e0c0004502a250426031e293b662706420e0e0e|@42,I253,I229,@93,@41,I255| 93:O1|@94 94:C11,120|00802b36293b4d006e000e0e0e0c00032d3729352f352c3b4d015c000e0c000303033b02492b2307294d024b000c00024d0344000e0c0002031d29353b303b3b4d0434000e0c0004503b0e0e0e4f0527008000026502162b4d061c004d0718006a4d0813004d090f002b6a6410642705420e0e0e0e0e0e0e|@46,I253,I229,I105,I218,I255,@95,@57,@48,@7118,@45| 95:C12,176|008078762d3b5630564329314d00a0000e0c00032968012c332b4d0192000e0e0e0c000427041205000100f8ff0c0002054600ff6d56112a354d0273004d036f000c000303032a0202020202292a353c4d045c000e0c000303064d055200020202020212292b4d0646006a4d0241004d073d002b6a646410292d4d0832000e0e0e0c000356232a2a4d0924000e0c00036503033b0212292d4d0814000e0c00030e4f0a0b0011000264420e0e0e0e0e0e|@49,I107,@74,@7118,I251,I229,@55,@48,@45,I106,I113,@95| 96:O2|@98,@97 97:O2|@127,0 98:O6|@89,@7126,@99,@7127,@7449,@7125 99:O14|@101,@102,@106,0,0,@108,0,@109,@113,@117,4096,0,@120,@100 100:O1|@124 101:S6|737464457272 102:O1|@103 103:O2|@104,I202 104:C2,24|00805607281d2a3b4d000c002f0e0e7b050400040e0e0e0e|@105,I61| 105:S50|4c696272617279494f537570706f72742e777261704f757446696c654465736372283529746578745072696d57722d283129 106:O2|@107,I202 107:C2,24|0080560728072a3b4d000c002f0e0e7b050400040e0e0e0e|@105,I61| 108:O1|I202 109:O1|@110 110:O2|@111,I202 111:C6,120|00800403002c2a4d006d000e0e0c00035029352a362b372b362b4d015a000e0e0e0c0002030c2b3b4d024c000e0c000302013b03032b02054d033c00102b4d0136000e0e0e0c0002030c2b3b4d0228000e0c000302013b03032b02054d0318001056772c2c2c6a280b2b2b4d040900220e0e0e7b050c0004|@112,@80,I105,I231,@52,I61| 112:S49|4c696272617279494f537570706f72742e777261704f757446696c65446573637228352977726974654172726179283129 113:O1|@114 114:O2|@115,I202 115:C7,128|00800403002c2a4d0075000e0e0c00035029352a362b372a4d0164000e0c0002030c2a3b4d0258000e0c000302013b03032a02054d034800102a4d0142000e0e0e0c0002030c2a3b4d0234000e0c000302013b03032a02054d0324001056672b28084d041a000e0e0e0c00032f2a2d6a280b2c2b4d050800220e0e7b050c0004|@116,@80,I105,I231,@52,I239,I61| 116:S50|4c696272617279494f537570706f72742e777261704f757446696c6544657363722835297772697465566563746f72283129 117:O1|@118 118:O2|@119,I202 119:C3,32|00805607281c2a3b4d0014000e0c0004293b4d010a002f0e7e0500030e0e0e0e|@105,I61,I233| 120:O1|@121 121:O3|@122,@110,@118 122:C1,24|00803b56180c0002030c2b56170c00022968016402013b42|@123| 123:S40|5072696d494f28292e6175676d656e7457726974657228312977726974654172724e42272d283129 124:O3|@125,@114,@118 125:C1,24|00803b56180c0002030c2b56170c00022968016402013b42|@126| 126:S40|5072696d494f28292e6175676d656e7457726974657228312977726974655665634e42272d283129 127:O6|@128,@7130,@129,@7131,@7450,@7128 128:O2|4096,@7129 129:O14|@131,@132,@134,0,0,@135,0,@136,@138,@140,4096,0,@142,@130 130:O1|@144 131:S6|7374644f7574 132:O1|@133 133:O2|@104,I149 134:O2|@107,I149 135:O1|I149 136:O1|@137 137:O2|@111,I149 138:O1|@139 139:O2|@115,I149 140:O1|@141 141:O2|@119,I149 142:O1|@143 143:O3|@122,@137,@141 144:O3|@125,@139,@141 145:O2|@70,@146 146:O2|@91,0 147:O3|@149,@148,@7116 148:O2|@152,@151 149:C4,88|00805608293b4d004e000e0e0e0c0003293b2a3b4d0140000e0c0003030329022e2a352b367876163b56972e392f2b2b4d0224000e0c00046505080e0e0e00ff6d3b642a2a2505250526031e393b662704420e0e0e0e0e0e|@150,I253,I229,@41| 150:S27|426173696353747265616d494f28292e636c6f7365416c6c283129 151:O3|@154,@7451,@7116 152:C1,24|00802b3729372d56370c0002503b2a2e7d0500020e0e0e0e|@153| 153:S28|426173696353747265616d494f28292e636c6f73654f757427283129 154:C11,280|00802b38293b4d000e010e0e0e0c0003293c4d0102010e0e0e0c000303033b06ce2a3b3c4d02f0000e0c00045056273b2a3b4d00e2000e0e0e0c0003293c4d03d6000e0e0e0c00036403033b0226291b204e4d01c2000e0e0e0c000303033b0213293c4d04b1000e0e0c0003292502501e403b64642a4d059e000e0e0e0c0002293b4d0192000e0e0e0c000303043b50020e3c2c4d0680000e0c000326031e6f5156385648293b4d006d000e0e0c00033b2a0e0e0e4f075f007000022d3b2b4d0255000e0e0c0004505687294d0848000e0c0002293c4d013e000e0e0e0c000303043b50021b2a3b3c4d022b0002021f000c0004503d2b4d061d000e0e0c000350220c4d091100220d0e0e0e7d0d000265420e0e0e0e0e0e|@156,I253,I229,I255,I251,I106,I71,I73,@155,I70,@43| 155:C5,80|00802b3b4d0048000e0c000303033b02382b352c362a3856342a2a4d0131000e0e0c0003644d0227000c0002640310290e4f031b002100022b2a6929650209290e4f030b0021000265420e0e0e0e0e0e|@157,I229,I251,I218,@155| 156:S35|426173696353747265616d494f28292e7465726d696e61746553747265616d27283129 157:S14|4c6973742e66696c746572283229 158:O2|@162,0 159:O2|@160,@70 160:C4,40|008056074d0020003b4d011b000c00032a2a694d0011003b2b4d020b000c0004503b66420e0e0e0e|@161,@7117,I253,I255| 161:S20|54657874494f2e3c7061747465726e3e2d283129 162:O4|@164,@163,@91,@7124 163:O3|@166,@165,@7124 164:C6,112|00805609293b4d0066000e0e0e0c000329293b4d0159000e0e0c000303043b50021c29352a362a36293b3b4d0241000e0e0c0004502a250426031e2926035056284d032b003b4d0026000e0e0e0c00032a2a694d0319003b2b4d0213000c000450565728122a4d040600330e7e090003|@36,I253,I229,I255,@7117,I150| 165:O2|@168,@167 166:C4,88|00805608293b4d004e000e0e0e0c0003293b2a3b4d0140000e0c0003030329022e2a352b367876163b56972e392f2b2b4d0224000e0c00046505080e0e0e00ff6d3b642a2a2505250526031e393b662704420e0e0e0e0e0e|@150,I253,I229,@41| 167:O3|@169,@7452,@7124 168:C1,24|00802b3729372d56370c0002503b2a2e7d0500020e0e0e0e|@153| 169:C11,280|00802b38293b4d000e010e0e0e0c0003293c4d0102010e0e0e0c000303033b06ce2a3b3c4d02f0000e0c00045056273b2a3b4d00e2000e0e0e0c0003293c4d03d6000e0e0e0c00036403033b0226291b204e4d01c2000e0e0e0c000303033b0213293c4d04b1000e0e0c0003292502501e403b64642a4d059e000e0e0e0c0002293b4d0192000e0e0e0c000303043b50020e3c2c4d0680000e0c000326031e6f5156385648293b4d006d000e0e0c00033b2a0e0e0e4f075f007000022d3b2b4d0255000e0e0c0004505687294d0848000e0c0002293c4d013e000e0e0e0c000303043b50021b2a3b3c4d022b0002021f000c0004503d2b4d061d000e0e0c000350220c4d091100220d0e0e0e7d0d000265420e0e0e0e0e0e|@156,I253,I229,I255,I251,I106,I71,I73,@170,I70,@93| 170:C5,80|00802b3b4d0048000e0c000303033b02382b352c362a3856342a2a4d0131000e0e0c0003644d0227000c0002640310290e4f031b002100022b2a6929650209290e4f030b0021000265420e0e0e0e0e0e|@157,I229,I251,I218,@170| 171:C6,152|00807876513b4d008e004d018a000e0e0e0c00024d0280002a0c00025178760e3b28133b4d0370000e0c0003050f00ff6d3b4d0462000e0e0e0c00026478760a3b3b2d0e0e0c0002050500ff6d3b64511e333b64053a00ff6d78760e3b28133b4d0334000e0c0003050f00ff6d3c4d0426000e0e0e0c00026478760a3b3b2d0e0e0c0002050500ff6d3b64511e333b65420e0e0e0e0e0e0e|@173,@174,@172,I48,I150,I1| 172:O1|@7112 173:S6|69742d283129 174:O2|@7453,@175 175:O4|-1,@7133,@7134,@7132 176:O2|@177,80 177:C2,16|00802b56174d0007002d0e0e7e030003|@179,@178| 178:O1|@180 179:S25|486173685461626c652e6861736856616c7565283129283129 180:C13,224|00812c4d00d9000e0e0c00023b2a293b4d01cc000e0c000303032a027c293c4d02bd000e0e0c00032a3c4d02b2000e0e0e0c0003314d03a7000c000203033102182928084d0498000e0c0003322a4d058e000e0e0e0c000364294d0382000e0e0e0c0002030329020b294d0672000e0e0e0c000228072f4d0765000e0e0c00032a2a4d045a000e0e0e0c0003292f2508250826061e863b2706652d4d0341000e0e0c000203032d020b2d4d0632000e0e0e0c00022a2a4d0826000e0e0e0c0003293b4d091a000e0e0e0c0003030e4d0a0e002a4d0b0900317e08000329270443|@182,I223,I229,I240,I105,I239,I252,I152,I238,I246,I234,@181,I106| 181:B16|00000000000000400000000000000000 182:S22|486173685461626c652e6861736856616c7565283229 183:O2|@537,@7110 184:O2|@186,@185 185:O2|@187,0 186:S2|3c3d 187:O3|@7136,69,@188 188:O4|@186,-1,@190,@189 189:O3|1,@192,@191 190:O2|-2,4 191:O4|-3,0,@199,@7138 192:O4|-2,1,@193,0 193:O2|@195,@194 194:O2|@198,0 195:O2|49,@196 196:O3|3,@7137,79992 197:O2|2,0 198:O2|50,@196 199:S4|626f6f6c 200:O6|@199,0,0,0,@202,@201 201:O2|-1,@7155 202:O2|-1,@7139 203:O3|1,@205,@204 204:O2|@207,@206 205:O1|-1 206:O2|@483,0 207:O4|@209,@210,@208,@191 208:O2|-1,@211 209:S4|74727565 210:O1|1 211:O2|5,@7140 212:O5|0,@214,@480,@7149,@213 213:O2|10,@481 214:O3|@216,@218,@215 215:O2|@468,@467 216:C1,24|00802b352c362d37563756482f0e0e7b060300050e0e0e0e|@217| 217:S40|434f44455452454528292e67656e436f64652832292831296e6577456e7669726f6e283129283129 218:O2|@220,@219 219:O3|@223,0,@222 220:C1,16|00802b352c362d3756372e7b05030004|@221| 221:S44|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229656e76283129 222:O10|0,@444,@443,0,0,0,0,0,0,0 223:C11,120|00822d3556182a3b4d006c000e0c000303033c0218294d015e000e0e0e0c00022b2a4d0252000e0e0e0c00036403054d03450010292b4d043e000e0e0e0c00032964294d0531000e0e0c00024d0628000e0c000203062935296402054d071800105647312a4d080f000c0003292c4d090600330e7e0b0003|@225,I234,I15,I231,@52,I253,I105,I218,@226,I107,@224| 224:O1|@229 225:S44|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229656e76283329 226:O3|@7141,@228,@227 227:S7|676574536f6d65 228:S13|496e7465726e616c4572726f72 229:C12,424|00812c3b4d00a0010e0c000303032b06d53b2c354d0190014d008c010e0c000303082c362937296502162c353c4d0077010c000303062c37296402042c36296429354d0262014d035e010e0e0e0c00030a0400b4000a0011000a00b1004d0447011006d6293b0e0e0e4f053b013000032e354d0132014d002e010e0e0e0c000303082e362939296502044d061a012f354d0114014d0010010e0c000303082f362936296502044d07fe0030354d01f8004d00f4000e0c00030308303629382965020e3c28403b4d08de000e0e0e0c00043b2b2e2c2f68050402002d354d09c8004d00c4000202bb000e0c00030308293b452f46500209294d01ad00452b4650292706029e2d029b293b4f059b003000032e354d0192004d008e000e0e0e0c000303082e362939296502044d067a002f354d0174004d007000020266000e0c000303082f362936296502044d0a5a0030354d0154004d0050000e0c00030308303629382965020e3c28403b4d083a000e0e0e0c00043b2b2e2c2f68050402002d354d0924004d0020000e0c00030308293b452f46500209294d010d00452b465029270665430e0e0e0e|@231,I229,-1,-7,I107,@232,@234,@431,@437,I11,-2,@230| 230:O1|@442 231:S25|434f44455452454528292e6368616e67654c6576656c283229 232:O3|@7141,@228,@233 233:S26|6368616e67654c6576656c3a20556e6b6e6f776e20656e747279 234:C16,392|00812c354d0080014d017c010e0c00030a1200a3002600650029012600260026002600260026005c01ed002600120126002600480126005f01040700284d4d0246012b4d0341010e0e0c00045029372a23062b4d0431012b0e0c000250302a4d0525010e0e0c0003503b2c0e0e0c0002504d0613011006cc2c362d372e38293b4d0704010e0c0003030c292f4d08f8000e0c000302013b03032f021756382a2a4d09e4000e0c00034d0adc002e2e2c3b6805656602d02c3629352a362b372c382d392e3a2f2306302307343c4d09b8000e0c0003312a0e0e0e4f0bab00b1000356b8312a4d09a0000e0c00032b342b343434343468084d008e002a69270e02862c362d372e382a2f0e4f0b7b004100033b2d0e0e0e4f0c6f005000023f2a2d2f6b270602612c362d372a2e0e0e4f0b570031000328062a2c6a66024a2c362d37292e020240000e0e0e4f0b3b003100034d0d34002c2b3b6b66022b2c363b2a0e0e4f0e230020000228092a696602172c02142c362d372a2e0e4f0b0b00310003280b2a2c6a66430e|@236,-7,I107,@237,@271,@329,@330,@433,I231,I234,I106,-5,@234,@435,-4,@235| 235:C4,48|00802b3b4d0028000e0c000303033b021d2b352c3656272b2a4f0113004200032b4f020b004100022a2a69292706420e|@436,I229,@234,@235| 236:S35|434f44455452454528292e6368616e67654c6576656c2832296368616e67654c283229 237:O1|@238 238:C4,32|00804d001a003b4d0115000e0e0c0003292d4d020a002e0e7e0400030e0e0e0e|@240,@7142,I253,@239| 239:O1|@241 240:S45|434f44455452454528292e6368616e67654c6576656c2832296368616e67654c283229707072696e742d283129 241:C14,280|00812c4d0011010e0e0c0002294d0107014d0203010c000307d22c4d03f9000e0e0c00023b2a0e0e0e4f04eb00300002293b4d02e2000e0e0e0c000303262f4d03d5000e0e0c0002303b2b6a4d05c8002a693339342b2b4d06bd00220d0e0e7b050c0004296801303b2b4d07aa000e0e0e0c00040403002a2a4d089b000c00035029352a362b372b2b2b6a4d0989002a69220f3922102b2b4d067c000e0c00045022103922114d0a6e002b4d0669000e0e0c0004502210343b4d075b000c00040403002a2a4d084f000c00035029352a362b372b2b2b6a4d0b3d002a6922183922192b2b4d063000221b020206000e7b051a00042c4d031f000c00022d3b2b6a4d0c14002a693039312b2b4d060900330e0e0e7b05090004|@243,@244,-1,I229,I223,@247,@249,@41,@262,@80,@269,@93,@270,@242| 242:C2,16|00802b56174d0007002d0e0e7e030003|@251,@250| 243:S29|54657874494f2e5465787453747265616d494f2e6f7574707574283229 244:O1|@245 245:C2,24|00802b3a293b4d000e000e0e0e0c00032965420e0e0e0e0e|@246,I253| 246:S32|426173696353747265616d494f28292e6765744275666665724d6f6465283129 247:C11,152|00802b3b4d0090000e0c000303033b028356072c3c4d017f000c0003293b4d0276000e0e0e0c000303033c02182a4d0366000e0e0e0c00022a2a4d045a000e0e0e0c00036403054d054d00102a4d0647000c000203032a02182928084d0738000e0c00032b2a4d082e000e0e0e0c00036429404d0021000e0e0c00036603032b02122b3c4d0110000e0c00030e4f090700010002420e0e0e|@248,I229,I107,I234,I223,I231,@52,I105,I239,I252,@247| 248:S43|54657874494f2e5465787453747265616d494f2e6f75747075742832296c6173744e65776c696e65283129 249:C2,16|00802b56174d0007002d0e0e7e030003|@251,@250| 250:O1|@252 251:S34|426173696353747265616d494f28292e6f7574707574566563746f72283129283129 252:C12,168|00812c3729352e38293b4d009a000e0e0e0c0003293c4d018e000e0e0e0c000303162b4d0281004d037d006a4d0478004d0574002b6a641030353136323a3235333634372e353b2b2b4d065b000c0003031e220f4d0750000e0c000250220f2e2e2e4d08420022120e0e0e7b061000052e3b4d0032000e0e0e0c00033c2a4d0926000e0e0e0c0003640311220f2e2e2e4d08140022120e7b061000053b4f0a0700c00002270c430e|@254,I253,I229,@255,@257,@7118,@45,I233,@93,@258,I251,@253| 253:C9,472|00801201000100f5ff1202000100f4ff1203000100f9ff293b4d00bb010c00032b2a4d01b2010e0e0e0c00032d2a4d02a6010e0e0e0c00032705037a1201000100f9ff293b4d008f010c00031203000100f6ff56301205000100f5ff1206000100f7ff2a68012a2e2b4d036b010c00042f2e2b4d0461010e0e0c0004501209000100f9ff120a000100f9ff293b4d0047010c0003120c000100f5ff2a2a4d0537010c00032d3b2b4d062d010e0e0c0004503b270d06dc1201000100f4ff1202000100f9ff293b4d000e010e0e0e0c00032b2a4d0102010e0e0e0c00031205000100f9ff293b4d00ef000c00031207000100f6ff56701209000100f7ff2e68012a2d2b4d03d2000e0e0e0c00042e2d2b4d04c5000e0e0c000450120c000100f9ff120d000100f9ff293b4d00ab000c000329344d05a2000e0e0e0c00032c3b2b4d0695000e0e0c00045056f84d0789000e0e0c0002501210000100f6ff29220d4d0575000e0e0c00031212000100f5ff29220f4d0162000e0e0e0c00031214000100faff1215000100f7ff2b68012a2f2b020240004d0340000e0c00043b2d2b4d0435000e0e0c0004501218000100f9ff1219000100f5ff2922164d011a000e0e0e0c00032b3b2b4d060d000e0e0c0004503b271a420e0e0e|@266,I253,I107,I234,@262,@265,I106,I255,@93| 254:S31|426173696353747265616d494f28292e6f7574707574566563746f72283229 255:O3|@7143,@256,0 256:S12|436c6f73656453747265616d 257:S6|6f7574707574 258:O1|@259 259:C8,72|00832e37292308294d003c000e0c00024d0134000e0c0002031129352b353b3b0e4f0223005000026602182a35294d0316004d0412006a4d050d004d0609002b6a6410651f040e0e|@261,I105,I218,@260,@57,@257,@7118,@45| 260:C12,184|00807876353b56395648302a4d00a8000e0c0003566729334d019c000e0c00032968012e2d2b4d028e000e0e0e0c0004270656420e0c0002054600ff6d56112a354d0373004d046f000c000303032a0202020202292a353c4d055c000e0c000303064d065200020202020212292b4d0746006a4d0341004d083d002b6a646410292d4d0032000e0e0e0c000356272a2a4d0924000e0c00036503033b0212292d4d0014000e0c00030e4f0a0b0011000264420e0e0e0e0e0e|@263,I106,I107,@262,@7118,I251,I229,@55,@257,@45,I113,@260| 261:S27|426173696353747265616d494f28292e7772697465566563283429 262:O1|@264 263:S38|426173696353747265616d494f28292e7772697465566563283429666f7263654f7574283129 264:C11,224|00822b3b4d00d8000e0c000303562c4d01cd000e0e0c0002030c2c3b4d02c0000e0c000302013b03032c02054d03b000102e4d04aa000e0e0e0c00022a2a4d059e000e0e0e0c00030312292b4d0690000e0c00032b2a326a296502054d0780001065027a2b352e4d0475000e0e0c00022e4d016b000c0002030c2e3b4d0260000e0c000302013b03032e02054d035000102b4d014a000e0e0e0c0002030c2b3b4d023c000e0c000302013b03032b02054d032c00102a2a4d0825000e0e0c0003292d4d051a000e0e0e0c00036403082a2a336a296402054d090500102704440e|@53,I229,I105,I231,@52,I223,I248,I240,@52,I239,@52| 265:O1|@267 266:S46|426173696353747265616d494f28292e6f7574707574566563746f72283229616464566563546f42756666283129 267:C10,160|00822c352d360403002e2a4d0091000e0e0c00035029352a362b37334d0180000e0c0002030c333b4d0274000e0c000302013b03033302054d03640010292b4d045d000e0e0c000329314d0552000e0e0e0c00036403054d064500102c4d013f000c0002031a292c4d0434000e0c00032f2a2f4d072900220d0e0e7b050d00042b28084d0419000e0e0c00032d2a312d2f4d080b00220f7b070d00060e0e0e0e|@268,@80,I105,I231,@52,I239,I249,@52,I254,I198| 268:S25|436861724172726179536c6963652e636f7079566563283329 269:C2,16|00802b56174d0007002d0e0e7e030003|@251,@250| 270:C2,16|00802b56174d0007002d0e0e7e030003|@251,@250| 271:O1|@272 272:C23,472|00823c28402f4d00ce010e0e0e0c00043c28403b4d00c0010e0c00043c28403b4d00b4010e0c00044d01ac01302d2d2d220c68063e324d029e010e0e0e0c00033c28403b4d0090010e0c00043c28403b4d0084010e0c00043c28403b4d0078010e0c00043c28403b4d006c010e0c00042d3c4d0362010e0e0e0c00032928404d0455014d0051010e0e0c0004293b314d0545010e0e0c0004504d063b012e2b31333168064d0730012d3332322f220d68073e22124d0220010e0c0003293c4d0316010e0e0e0c00032928403b4d0008010e0c0004293b2d4d05fd000e0e0c0004503c28403b4d00ef000c00043c28403b4d00e4000e0c00044d08dc002b2d2c6b4d09d4002c2e2d3268054d0aca00302e302f68054d0bc0002d30333168054d0cb6002b2f31220f31221468074d0da8002214220c220f2e33220c221d22162218221b221b2217680d4d0e8c0022122f220f22142f22152219220e2210680a4d0f76002a221f6a4d106e00220e2e2d222268053c28403b4d005e000e0e0e0c00044d115400221633221322182218221c2211221332680a4d123e002211313022252f221f221d2211221a22152217680c4d1325002f694d141f002c6922222b454d151500462c4732482f49304a2a4b2720440e0e0e0e0e0e0e|@274,I11,@275,I108,I106,@281,I255,@282,@286,@288,@292,@296,@300,@304,@311,@313,@315,@317,@319,@321,@323,@325,@273| 273:O1|@327 274:S28|5072657474795072696e7465722e7072657474795072696e74283329 275:C13,648|00812c354d0080024d017c020e0c00030a02000b023b0067015609293b4d0267020c0003293b4d035e020e0e0e0c000303054d0452021029365639293b2c4d0546020e0e0e0c0004503b270406cd2c362d373b5639293b4d022d020e0e0c0003293b4d0322020e0e0e0c0003030c3b0e0e4f06130250000206d5293529354d0706024d0102020e0e0e0c00030a01008000da0029365678293b4d02eb010c0003342a4d08e2010e0e0e0c000365035256785688293b4d02cf010c000329334d01c6010e0e0e0c00032c3b2b4d05b9010e0e0c00045033293b4d08ac010e0c000303033b0218282056d70c000250293c4d0195010e0e0c000325011e243b2705020b290e0e0e4f067f0170000264026656685678293b4d026f01020267010c000329324d0162010e0e0e0c00032c3b2b4d0555010e0e0c00045032293b4d0848010e0c000303033b021c282056c7020225000c000250293c4d012d010e0e0c000325011e283b2705020c2936290e4f0617017000026464270506cc2c362d375628293b4d0202010e0e0e0c00032f2a4d08f6000e0e0e0c00036503064d09e9000259562a563a293b4d02dd000e0e0c0003292e4d0ad2000e0e0e0c00032c3b2b4d05c5000e0e0c0004500402002e0316567a293b4d02b1000e0e0c00032b3b452a4626030212567a293b4d029b000c00032b3c452a46260329270556395649293b4d0284000e0c00032c2a692c3b2b4d0576000e0e0e0c0004503b270702662c365618293b4d0260000e0c00032e2a4d0b56000e0e0e0c00036503165618293b3b4d05440002023c000e0c0004503b51022b56185628293b4d022d000e0e0c000329304d0122000e0e0e0c00032c3b2b4d0515000e0e0c0004503b26052956272d7d050002430e0e0e|@277,-2,I107,I253,I229,@278,I255,@276,-1,I232,@205,I106,I233| 276:C6,136|0080570a5613292e4d007c000e0c00032b3b2b4d0171000e0e0c0004505738574b575a293b4d025f000c00032b2a4d0356000e0e0e0c00032d3b2b4d0149000e0e0c0004504057970e0c000250578a293b4d0233000c000329293b4d0429000e0e0c000303033b0218282057c70c000250293c4d0311000e0e0c000325011e253b270b420e0e0e0e|@280,I106,I255,I253,I107,I232| 277:S39|5072657474795072696e7465722e7072657474795072696e742833297072696e744f7574283229 278:O3|@7141,@228,@279 279:S32|706f705072696e74537461636b3a207072696e7420737461636b20656d707479 280:S52|5072657474795072696e7465722e7072657474795072696e742833297072696e744f75742832297573654e65774c696e65283129 281:O2|@210,0 282:C11,304|0082560b561b293b4d0024010e0c0003292f4d011a010e0e0e0c00032c3b2b4d020d010e0e0c00045056475657293b4d00fd000e0e0c0003293c4d01f2000e0e0e0c0003568a2a2a4d03e4000e0c0003293b4d04da000e0e0e0c000303033c02242a3b4d05c9000e0e0c00032a3b4d05be000e0e0e0c00032a2a4d04b2000e0e0e0c000365030329020a292b4d01a0000e0c00032f3b2b4d0295000e0e0c00045056b7293b4d0087000c000356d9293b4d007c000e0c00032b2a4d0672000e0e0e0c0003270403054d0764001056b856c7293b4d0059000e0e0c000322122212692a3b4d0849000e0e0c000303033c02182c3b4d0039000e0e0c00032b2a4d052e000e0e0e0c00036403054d092100102a3c4d011a000e0e0e0c00032d2a2c4d020d0022150e0e7b051500040e0e0e0e|@284,I253,I106,I255,I110,I229,I231,I113,@283,I234,@52| 283:O3|@7141,@228,@285 284:S38|5072657474795072696e7465722e7072657474795072696e74283329656e5175657565283329 285:S16|746f6b656e2071756575652066756c6c 286:C13,408|00805609293b4d008e010e0e0e0c0003293c4d0182010e0e0e0c0003563c2a2a4d0274010e0c0003293b4d036a010e0e0e0c000303033c02242a3b4d0459010e0e0c00032a3b4d044e010e0e0e0c00032a2a4d0342010e0e0e0c000365030329020a292b4d0130010e0c0003566b2a3b4d0524010e0c000303033c0218293b4d0015010e0e0c00032b2a4d040a010e0e0e0c00036403054d06fd00102a3c4d01f6000e0e0e0c00032a2a4d00ea000e0e0e0c0003296529352a36293b4d04d8000e0c0003033456aa293b4d00ca000e0e0e0c000356c9293b4d00bc000e0c00032b2a4d07b2000e0e0e0c000327044d08a6000e0e0e0c000202013b039756a9293b304d0992000e0e0e0c0004502b2b56d80c0003502b354d0a7d004d0b79000e0e0c00030a0100370008003b5002592b3656c756d7293b4d005d000e0e0c0003292d4d0152000e0e0e0c00032c3b2b4d0945000e0e0c0004503b2606022a56b756c7293b4d0030000e0c0003292e4d0126000e0e0e0c00032c3b2b4d0919000e0e0c0004503b26053b220c220e0e0e0e7d0e00023b270a42|@287,I253,I106,I110,I229,I231,I234,@52,I113,I218,I255,-2,I107| 287:S38|5072657474795072696e7465722e7072657474795072696e7428332964655175657565283129 288:C8,144|00805607293b4d0086000e0e0e0c00035629293b4d0078000e0c00032b2a4d016e000e0e0e0c0003270403054d0260001056085617293b4d0055000e0e0c0003293b4d034a000e0e0e0c000303033c02182b3b4d0039000e0e0c00032a2a4d042e000e0e0e0c00036403054d05210010293c4d061a000e0e0e0c00032c2a4d000e000e0e0e0c0003292705420e0e0e0e|@290,I253,I113,@289,I234,I231,@52,I106| 289:O3|@7141,@228,@291 290:S38|5072657474795072696e7465722e7072657474795072696e742833297363616e546f70283129 291:S34|5072657474795072696e7465722e7363616e546f703a20737461636b20656d707479 292:C11,256|008056075617293b4d00f4000e0c0003293c4d01ea000e0e0e0c0003564a2a2a4d02dc000e0c0003293b4d03d2000e0e0e0c000303033c02242a3b4d04c1000e0e0c00032a3b4d04b6000e0e0e0c00032a2a4d03aa000e0e0e0c000365030329020a292b4d0198000e0c00032f3b2b4d058d000e0e0c0004505677293b4d007f000c00035699293b4d0074000e0c00032b2a4d066a000e0e0e0c0003270403054d075c001056785687293b4d0051000e0e0c0003293b4d0846000e0e0e0c000303033c02182b3b4d0035000e0e0c00032a2a4d042a000e0e0e0c00036403054d091d0010293c4d0116000e0e0e0c00032c2a220f4d05080022100e7b050e0004|@294,I253,I106,I110,I229,I231,I255,I113,@293,I234,@52| 293:O3|@7141,@228,@295 294:S39|5072657474795072696e7465722e7072657474795072696e742833297363616e50757368283129 295:S34|5072657474795072696e7465722e7363616e507573683a20737461636b2066756c6c 296:C12,264|00805608293b4d00fe000e0e0e0c0003562a293b4d00f0000e0c00032b2a4d01e6000e0e0e0c0003270403054d02d8001056095618293b4d00cd000e0e0c0003293b4d03c2000e0e0e0c000303033c02182b3b4d00b1000e0e0c00032a2a4d04a6000e0e0e0c00036403054d05990010293c4d0692000e0e0e0c00032c2a4d0086000e0e0e0c0003296556485658293b4d0074000e0c0003293c4d076a000e0e0e0c000356872a2a4d085c000e0c0003293b4d0952000e0e0e0c000303033c02242a3b4d0441000e0e0c00032a3b4d0436000e0e0e0c00032a2a4d092a000e0e0e0c000365030329020a292b4d0618000e0c00032f3b2b4d0a0d000e0e0c00045030270b420e0e0e|@298,I253,I113,@297,I234,I231,@52,I106,I107,I110,I229,I255| 297:O3|@7141,@228,@299 298:S38|5072657474795072696e7465722e7072657474795072696e742833297363616e506f70283129 299:S20|7363616e506f703a20737461636b20656d707479 300:C11,264|0080560a293b4d00fe000e0e0e0c00035627293b4d00f0000e0c00032b2a4d01e6000e0e0e0c0003270403054d02d8001056075617293b4d00cd000e0e0c0003293c4d03c2000e0e0e0c000356492a2a4d04b4000e0c0003293b4d05aa000e0e0e0c000303033c02242a3b4d0699000e0e0c00032a3b4d068e000e0e0e0c00032a2a4d0582000e0e0e0c000365030329020a292b4d0370000e0c00032f3b2b4d0765000e0e0c00045056785687293b4d0055000e0e0c0003293b4d084a000e0e0e0c000303033c02182b3b4d0039000e0e0c00032a2a4d062e000e0e0e0c00036403054d09210010293c4d031a000e0e0e0c00032c2a4d000e000e0e0e0c000329270c420e0e0e0e|@302,I253,I113,@301,I106,I110,I229,I231,I255,I234,@52| 301:O3|@7141,@228,@303 302:S44|5072657474795072696e7465722e7072657474795072696e742833297363616e506f70426f74746f6d283129 303:S40|5072657474795072696e7465722e7363616e506f70426f74746f6d3a20737461636b20656d707479 304:C13,312|00803b3b3b4f002f0120000207d33b56370c0002563a2a3b4d011c010e0c000303033c0218293b4d020d010e0e0c00032b2a4d0302010e0e0e0c00036403054d04f500102a3c4d05ee000e0e0e0c00032a2a4d02e2000e0e0e0c00032965293529353c4d06d1000e0e0c000303ba566a2d3b4d01c2000e0e0e0c000303033c0218293b4d02b1000e0e0c00032e2a4d03a6000e0e0e0c00036403054d049900102d3c4d0592000e0e0e0c00032a2a4d0786004d0882000e0e0e0c0004513b0e0e0e4f007300700002030b3b310e0c0002501e1402023b505679293b4d025900020251000e0e0c00035698293b4d0248000e0c00032b2a4d093e000e0e0e0c000327044d0a32000e0e0e0c000203113b56870c00020e4f0b1f007000025002023b503b31337d0a00022c4f0b0b00600002270402013b65420e|@306,@307,I234,I253,I231,@52,I106,I229,@309,I255,I113,I218,@305| 305:C7,192|0080570a2c3b4d00b6000e0e0e0c000303033c0218293b4d01a5000e0e0c00032d2a4d029a000e0e0e0c00036403054d038d00102c3c4d0486000e0e0e0c00032a2a4d017a000e0e0e0c0003296529352a36574c293b4d0166000e0e0e0c00032b2a4d045a000e0e0e0c0003577a2e2b69343b4d0049000e0e0c000303033c02182a3b4d0139000e0e0c0003220c2a4d022d000e0e0c00036403054d03210010343c4d041a000e0e0e0c00032b2a2c4d050d00220f0e0e7b050d00040e0e0e0e|@310,I234,I253,I231,@52,I106,I255| 306:S43|5072657474795072696e7465722e7072657474795072696e74283329736574546f6b656e53697a65283129 307:C9,160|00805709293b4d0096000e0e0e0c00035728293b4d0088000e0c00032b2a4d017e000e0e0e0c0003270403033b026d570a3b572b0e0c0002293b4d0262000e0e0e0c000303033c02182a3b4d0051000e0e0c00032a2a4d0346000e0e0e0c00036403054d04390010293c4d0532000e0e0e0c00032b2a4d0026000e0e0e0c0003296529353b2a354d0615000e0e0c000327044d070a002c0e0e800002420e0e0e|@308,I253,I113,I234,I231,@52,I106,I229,I218| 308:S57|5072657474795072696e7465722e7072657474795072696e74283329736574546f6b656e53697a65283129746f704e6f74426567696e283129 309:O2|@210,1 310:S56|5072657474795072696e7465722e7072657474795072696e74283329736574546f6b656e53697a6528312961646a75737453697a65283129 311:C13,456|00802b4d00c1010e0e0c0002561c293b4d01b4010e0c0003563b293b4d01a8010e0c00032b2a4d029e010e0e0e0c0003270403104d0390012d69292b56472f0e7e0500034d0380012d69292b2c12060001000c000e0c00045012030001000b00293b4d0162010e0e0e0c000312050001000a00293b4d014f010c00032b2a4d0246010e0e0e0c000327044d043a010e0e0e0c00020377562f293b4d012a010e0e0e0c0003564e293b4d011c010e0c00032b2a4d0512010e0e0e0c0003567d293b4d0104010e0c00032b2a4d06fa000e0e0e0c000327070332562c293b4d01e8000e0c0003564b293b4d01dc000e0c00032b2a4d02d2000e0e0e0c000327044d04c6000e0e0e0c000202013b02013b03b33b563a0e0e0c000256392a3b4d07a8000e0c000303033c0218293b4d0199000e0e0c00032b2a4d088e000e0e0e0c00036403054d098100102a3c4d0a7a000e0e0e0c00032a2a4d016e000e0e0e0c00032965293556692a1be703692e3b4d0757000c000303033c02182a3b4d0149000e0e0c00032f2a4d083e000e0e0e0c00036403054d093100102e3c4d0a2a000e0e0e0c00032b2a2c4d0b1d000e0e0c0004513b56980e0c0002260706009bfe3b270602013b65420e0e|@312,I223,I253,I113,-2,I218,I107,I233,I234,I231,@52,I106,I255| 312:S40|5072657474795072696e7465722e7072657474795072696e74283329616464537472696e67283129 313:C6,176|0081560f293b4d00a6000e0e0e0c0003562e293b4d0098000e0c00032b2a4d018e000e0e0e0c000327040342560d293b3b4d027b000c0004505617293b3b4d026e000e0e0e0c000450562c293b3b4d025e000e0e0e0c000450563a293b3b4d024e000e0e0e0c0004503b260502023b503b561b0e0e0c0002504d0333002d2d6a561a293b4d0028000e0c0003644d041f000c00022a2a3056590c0004505627293b4d000b000c00036456382e7d060002|@314,I253,I113,I255,-1,I111| 314:S36|5072657474795072696e7465722e7072657474795072696e74283329627265616b283229 315:C2,32|00805608293c4d0016000e0e0e0c0003293b56472f0e0e0e7e0500030e0e0e0e|@316,I106| 316:S40|5072657474795072696e7465722e7072657474795072696e742833296c696e65427265616b283129 317:C2,48|0080560a293c4d0026000e0e0e0c0003293b56490e0c0003503b56380e0c0002503b56372e0e0e0e7d0500020e0e0e0e|@318,I106| 318:S40|5072657474795072696e7465722e7072657474795072696e74283329656e6453747265616d283129 319:C6,200|0081560f561f293b4d00bc000e0c0003293c4d01b2000e0e0e0c00032c3b2b4d02a5000e0e0c000450564e293b4d0097000c0003566d293b4d008c000e0c00032b2a4d0382000e0e0e0c000327040342564c293b3b4d026f000c0004505657293b3b4d0262000e0e0e0c000450566b293b3b4d0252000e0e0e0c000450567a293b3b4d0242000e0e0e0c0004503b260502023b503b31316a565a293b4d0028000e0c0003644d041f000c00022a2a3b56990c0004505667293b4d000b000c0003645678327d0a0002|@320,I253,I106,I255,I113,I111| 320:S41|5072657474795072696e7465722e7072657474795072696e74283329626567696e426c6f636b283229 321:C8,216|008012010001000b00293b4d00c9000e0e0c000312030001000a00293b4d00b7000c00032b2a4d01ae000e0e0e0c00032704030f4d02a0003b562c0e0e0c00035002264d0291004d038d003b563f0e0e0e0c000450560d293b4d007b000c000364561e0e0e0c000250560b561b293b4d0065000e0e0c0003293c4d045a000e0e0e0c00032c3b2b4d054d000e0e0c000450564b293b4d003f000c0003293b4d0136000e0e0e0c0003650329564a293c4d0625000e0e0c0003293b56890e0c0003503b56780e0c0002503b5677320e0e0e7d0900023b270442|@322,I253,I113,@210,-1,I107,I255,I106| 322:S39|5072657474795072696e7465722e7072657474795072696e74283329656e64426c6f636b283129 323:C1,16|00802b352c3656272d0e0e0e7e030003|@324| 324:S36|5072657474795072696e7465722e7072657474795072696e74283329627265616b283129 325:C1,16|00802b352c3656272d0e0e0e7e030003|@326| 326:S41|5072657474795072696e7465722e7072657474795072696e74283329626567696e426c6f636b283129 327:C1,8|00803b420e0e0e0e|@328| 328:S38|5072657474795072696e7465722e7072657474795072696e74283329656c6964696e67283129 329:O2|1,0 330:O2|@332,@331 331:O2|@430,@330 332:C103,2184|00813b3b3b3b30354d007c084d0178080e0c00030a16005107f0040107dd04ad0245057501fd0021046b006c048500ad0541042c079c002e006902a105790058041807f10730363023064d023a082a0e0e0c00025130384d032d082a0e0c000251293156770c00035030384d0419082a0e0c00025130373b2a320e0e7d0a000206dd2f384d0500082a310e0e7d0900022f384d06f2072a317d090002303631372a2a4d07e2070e0e0e4f08db078000046506d13036313732383223064d09c8072a0c0002512a33320e0c00035032354d0ab5072a0e0c00025129031b32384d0ba6072a0e0e0c00025132354d0c99072a0e0c00025102023b50282c2c28240e0e0e4f0d83079000045032373b2a340e0e7d0c00023036313732383223064d0e67072a0e0e0e0c00025132382c4d0f58074d1054070e0c00032b4d0f4b074d1047070c0003294d113f0769287b2a692c2a694d1233072a6927054d132b07020223070c00022a0c00025132354d1419072a0e0c0002512a33320e0c00035032373b2a340202fe060e0e7d0c000230363137323833392903064d15ed0602044d16e7062c4d17e2060e0e0e0c0002033c2b4d0fd5064d10d1060e0e0c00032e4d0fc7064d10c3060c00032b4d18bb06692a2a69282c2a692d2a694d19ac062a6927064d13a4060e0c0002028a2d3b4d1a98060e0c000303442b4d0f8d064d1089060e0e0c00032e4d1b7f060c0002294d0f77064d1073060c00032c4d1c6b06692a2a69282c2a692e2a694d1d5c062a6927074d1354060e0c0002023a2b4d0f49064d1045060e0e0c00032e4d0f3b064d1037060c00032b4d1e2f06692a2a69282c2a692d2a694d1f20062a6927064d1318060e0c0002220c382a2a220e0e7d0f000230363137294d0fff054d10fb050c00034d20f4052a4d21ef050c0003294d22e7054d21e3050c000334382a2a0e0c0002512d220c340c000350343828292a220d7d0e0002303629352a362b372c382d392e3a2f23063023072b4d23ab054d01a7050c00030a020018000c0012004d24970502104d169105020a4d258b0502044d268505221023064d277d052a0e0c0002512210384d2870052b4d216b050c00032928284d2161050e0e0c0003642a0e0e0e0c0002512210354d294c052a0c000251221038312a0e0e0e0c0002512210354d2a34052a0c0002512210382b3c4d2b26050e0e0e0c000303064d2c1a0502044d2d14054d2e10052a4d210b050c0003642a0e0e0e0c0002512210382c4d0ff7044d10f3040c00034d2fec042a4d21e7040c0003642a0e0e0e0c000251221038304d0fd3044d10cf040c00034d30c8042a4d21c3040c0003642a0e0e0e0c0002512210382e4d0faf044d10ab040c00034d31a4042a4d219f040c0003642a0e0e0e0c000251282c2f4d328c040e160d008604120000000004502210354d3378042a0c00025131221122100e0e0e0c0003502210384d3460042a0c0002512210373b2a22127d130002303630382a4d3547040c00024d3640042a4d213b040c0003642a320e7d0a00023036313732382b2b2b4d3723044f381f04a000056606cb3036283b2a4d3910040e4f0d0b047000046406d1303631373123064d3afa032a0e0e0c000251282c2a4d3bec030e4f0de7038000045031354d3cdd032a0e0c000251313828282a0e0e0e0c00025131354d3dc5032a0e0c0002512a32310e0c00035031354d3eb1032a0e0c000251313828292a0e0e0e0c00025131373b2a330e0e7d0b00023036282c2a4d3f8b034f0d87037000046406d430363023064d4078032a0c00025130384d416d0328284d2167030c00032a0c0002512931300e0c00035030354d4251032a020248030e0c000251303828292a0e0e0e0c00025130373b2a3202022e030e0e7d0a0002303631373123064d4321032a0e0c00025131384d4415032a0e0c0002512a32310e0c00035031384d4501032a0e0c00025131354d46f5022a0e0c0002512932310e0c000350313828292a0e0e0e0c00025131373b2a330e0e7d0b00022f384d47ca022a317d090002303629352a362b372c382d39220c23064d48b0022a0202a7020c000251220c382d4d0f9f024d109b020c00032f4d0f93024d108f020c0003294d49870269282d2a692c2a694d4a7b022a6927054d1373020c00022a0c0002512b220d220c0e0e0e0c000350220c3828292a0e0e0c000251220c354d4b4c022a0c000251220c3828282a0e0e0c000251220c354d4c34022a0c0002514d4d2b02220d220c6a4d4e22022a6929282c2e0e4f4f1702e00004502b354d230d024d2b09020e0e0c000303043b50024f220e354d50f7012a0e0e0e0c000251220e23064d51e7012a0e0e0e0c000251220e384d52d8012a0c000251220e354d53cc012a0c0002512b220f220e0e0e0e0c000350220e373b2a0e0e0e0c000251220e354d54a8012a0c000251220e384d559c014d5698014d2194010e0c000329287d4d2189010e0e0c0003642a0e0e0e0c000251220e373b2a22107d11000230364d576a012a4d5865010e0e4f0d5f017000046406d13036282c2a4d5950010e4f0d4b017000046406d3303630382a4d0f3c014d1038010e0c00034d5a30012a4d212b010c0003642a320e7d0a00023036313732383223064d5b13012a0e0e0e0c00025132382c4d0f04014d1000010e0c00034d5cf8002a4d21f3000c0003294d5deb004d21e7000c0003652a0e0e0e0c0002512933320e0c00035032354d5ecd002a0e0c0002513238282c2a0e0e0e0c00025132354d5fb5002a0e0c0002512a33320e0c00035032354d60a1002a0e0c000251323828292a0e0e0e0c00025132373b2a34020282000e0e7d0c0002303631373123064d6175002a02026c000e0c00025131382a4d0f64004d1060000e0c00034d6258002a4d2153000c0003294d634b004d2147000c0003652a0e0e0e0c00025131354d6435002a0e0c0002512a32310e0c00035031354d6521002a0e0c000251313828292a0e0e0e0c00025131373b2a330e0e7d0b00022704430e|@334,-11,I107,@335,@336,@337,@338,@339,@340,@341,@347,@333,@348,@333,@349,@329,-1,@355,@366,@368,@369,@329,@374,I48,I218,@375,@376,I234,I111,@375,@377,@375,@378,@379,@344,@342,-2,@380,@381,@382,@335,@383,@329,@329,I229,@209,@384,@385,@386,@387,@388,@389,@329,@390,@391,@404,@405,@406,@408,@347,@409,@333,@333,@333,@410,@335,@411,@333,@347,@412,@413,@329,@414,@335,@415,@416,@329,@329,@417,@419,@350,@329,@329,@421,@329,@329,@422,@423,@424,@425,@426,@427,@347,@428,@342,@333,@329,@333,@347,@429,@342,@333,@333| 333:O2|0,0 334:S22|42617365436f6465547265652e707265747479283229 335:O2|1,1 336:S7|474c4f42414c20 337:S11|20282a474c4f42414c2a29 338:S3|4e494c 339:S9|4d415443484641494c 340:S8|414c544d41544348 341:C6,136|008256072923064d007d002a0e0c000251561729382e28284d016c000e0c00032a0c0002515627302a56550e0e0c000350563729384d024f002a0e0e0e0c000251564729354d033f002a0e0e0e0c0002515657322a56850e0e0c000350566729354d0423002a0e0e0e0c0002515677293828292a0e0c000251568729373b2a220d0e0e0e7d0f0002|@343,@335,@344,@342,@333,@333| 342:S2|2c20 343:S34|42617365436f6465547265652e7072657474792832297072696e7444696164283329 344:O1|@345 345:C12,280|00812c4d0011010e0e0c00022c4d0007010c00022a3b4d01fe000e0e0e0c000303032d06d3293b4d01ed000e0e0c000303032e06d32a2a4d02dd000e0e0c00032928104d02d1000e0e0c0003293c4d03c6000e0e0e0c00032928084d04b9000e0e0c000378760f3b2c28413b4d05a8000e0c0004050800ff6d4d069b0010292e4d0794000e0c0003502f3c4d0189000e0e0c00030311292808220c4d0879000e0e0c00045002123328082b2808334d0966000e0e0e0c0006502e3c4d0159000e0e0c000303192808304d024b000c00032a2a220c4d0840000e0c00045102222808304d0232000e0e0e0c00033328082c2c334d09220002021a000e0e0e0c000651294d0a120002020a000e0e0e0c00025029270565430e0e|@346,I223,I229,I239,I240,I241,I11,@78,I151,I254,I198,I47| 346:S4|5e283229 347:O2|3,0 348:S7|7b6561726c797d 349:C6,96|008256072923064d0055002a0e0c000251561729382e28284d0144000e0c00032a0c0002514d023700563556476a2931314f032b0051000450563729354d041f002a0e0e0e0c0002515647293828292a0e0c000251565729373b2a337d0c0002|@351,@335,@344,@352,@350,@333| 350:C6,136|00822b3b4d0080000e0c000303033b02752b36293b4d006f000c0003030a2c3529302e0e7d0700022c3556272923064d0155002a0e0c0002512a310e0e0c000250563729354d023f002a0e0e0e0c00025156472938322a0e0e0c000251565729373b2a0e0e0c000251566729354d0317002a0e0e0e0c0002513434310e4f0407009100042707440e|@354,I229,@333,@333,@329,@350| 351:S34|42617365436f6465547265652e7072657474792832297072696e744c697374283329 352:C1,16|008056082c2a56372e0e0e0e7e040003|@353| 353:S37|42617365436f6465547265652e7072657474792832297072696e744c697374283329283129 354:S30|42617365436f6465547265652e707265747479283229704c697374283329 355:O1|@356 356:C7,144|00812c3b4d0088000e0c0003034a2b4d017d004d0279000e0e0c00030a02000d0011000a00281002083d020528080201402d4d035a000e0e0e0c00023b2a2c4d044d000e0e0c0004287e2a692927044d053d002c7d0400022b4d0133004d022f000c00030a02000d0011000a00281002083d020528080201403b2e2b4d0410000e0c0004644d0507002c0e0e7d040002|@358,I234,-2,I107,I111,@359,@357| 357:O1|@364 358:S10|496e742e666d74283229 359:O1|@360 360:C9,192|00822c2c4d00b8000e0c000329404d01ae000e0e0e0c0003033128302a4d029f000c0003293b4d0196000e0e0e0c000303033c020b2928ff4d0384000e0c000303054d047a00102964023e28412a4d026e000e0e0e0c000329404d0562000e0e0e0c0003293b4d0156000e0e0e0c000303033c020b2928ff4d0344000e0c000303054d043a001029652e2e4d0131000e0e0c000303072930692964021b2e2e4d061d000e0e0c00032a3169292b314d070e00327b0509000465440e0e0e0e0e0e|@362,I110,I234,I106,I233,@361,I107,I109,@359| 361:O3|@7144,@363,0 362:S14|496e742e746f4368617273283329 363:S3|436872 364:C15,272|00802b3b4d0008010e0c000303064d01fe0006d12b353b2d293b4d00f2000e0e0e0c000303032a021629362b3c4d02df000c0003292b25042504511e233b6565294d03cb000c0002030c293b4d04c0000e0c000302013b03032902054d05b00010293c4d00a9000e0e0c000303032b02972928104d0698000e0c0003293c4d078e000e0e0e0c00032928084d0881000e0e0c000378760f3b2c28413b4d0970000e0c0004050800ff6d4d0a630010292e4d0b5c000e0c000350280833293b4d004e000e0e0e0c000303043b50022a29352a362d2d2c4d0c37000c0004502c3c4d062d00020222000e0e0c0003292b2505250526031e38260351294d0d12000e0e0e0c00025029270466420e0e0e0e0e0e|@365,I229,I48,I106,I105,I231,@78,I239,I240,I241,I11,@78,I151,I254,I47| 365:S31|4c696272617279537570706f72742e737472696e67496d706c6f6465283129 366:O2|@367,0 367:S8|20757365737d203d 368:S6|4445434c2023 369:O1|@370 370:C19,400|00802b3b4d0088010e0c000303064d017e0106cc2b36293b4d0074010e0c000303062c35296406d12c3b2a3b4d0060010e0c000303032902282a352b362a4d024e010e0e0e0c00022c2a4d0342010e0e0e0c00032b2a2506250626041e323b270465290a0100ec00f200294d0421010e0e0c0002030c293b4d0514010e0c000302013b03032902054d060401102928104d07fc000e0c0003293c4d08f2000e0e0e0c00032928084d09e5000e0e0c000378760f3b2c28413b4d0ad4000e0c0004050800ff6d4d0bc70010292e4d0cc0000e0c000350280833293b4d00b2000202ac000e0e0e0c000303043b50025229352a362a4d029900020292000e0e0c0002293c4d008a000e0e0e0c0003030d2e2e2d4d0d7b000c000450020e2b280830302d4d0e6b000c0006502d2a4d0761000e0e0c0003292c2506250626041e64260451294d0f4a000e0e0e0c000250292705023a4d013a0002342d293b4d0031000e0e0c000303054d1026001029354d011f002a4d111a000e0e0e0c0003030c2a36292503511e2b3b64020129656464420e|@372,I229,I48,I223,I106,I105,I231,@78,I239,I240,I241,I11,@78,I151,I254,I198,I47,@371,I24| 371:O3|103,@373,I48 372:S16|537472696e672e636f6e636174283129 373:S4|4661696c 374:S6|2c206c617374 375:O2|41,0 376:S5|434c4f5328 377:S6|504152414d28 378:S6|4c4f43414c28 379:S9|494e44495245435428 380:S10|4f4e4c59494e4c494e45 381:S6|494e4c494e45 382:S5|534d414c4c 383:S6|4c414d424441 384:S5|66616c7365 385:S3|434c3d 386:S4|2043523d 387:S5|204c45563d 388:S6|20415247533d 389:S6|20434c4f533d 390:S9|297b4c414d4244417d 391:O1|@392 392:C29,480|00802b4d00d9010e0e0c0002033e2b4d00cd010e0e0c000203032b02054d01bf0110293b4d02b8010e0c000303104d03ae012a4d04a9010e0e0c0003020129293c4d059b012f0e0e7e0500032b4d008f010c000203054d068601102b28662a4d077d010e0e0c000364035d3b291b00014d086c010e0c000303054d09620110294d0a5c010e0c00022d2a4d0b52010e0e0e0c000364031d294d0c44014d0540010e0c00034d0d38012a4d0e33012f0e0e7e050003293c4d0426010e0e0e0c000325011e563b6406cc2b4d0013010c000203054d0f0a01102b294d1003010c0002293e4d11fa000e0e0e0c0003293b4d0bee000e0e0e0c00036603442b4d00e0000e0c000203054d12d600102b4d13d0000e0c0002293b4d02c6000e0e0e0c000303104d03ba002a4d04b5000e0e0c0003020129293c4d14a7000c00036502013b03952b4d0099000e0e0c000203054d158e00102b293b4d1686000e0e0e0c0003294d007b000c00024d1774000e0c00020339294d0069000e0e0c000203054d185e001029294d1057000c0002293e4d114e00020245000e0e0e0c0003293d4d0b3e000e0e0e0c00036602013b032228692a4d072b000c00034d1924002a4d0e1f000c00032928294d0e1500317e0700034d1a0c006502044d1b0500420e0e0e0e|@394,I105,@395,I234,@181,I106,@355,@398,I150,I229,@400,I189,I251,-1,@402,@344,@398,I17,I243,@398,I15,I231,@398,I253,I218,@398,@403,@393,@393| 393:S6|3c6c6f6e673e 394:S28|42617365436f6465547265652e737472696e674f66576f7264283129 395:O3|@7145,@397,@396 396:S7|746f53686f7274 397:S4|43617374 398:O3|@7145,@397,@399 399:S9|746f41646472657373 400:O3|@7141,@228,@401 401:S17|556e6b6e6f776e2052545320656e747279 402:S4|20525453 403:S2|2028 404:S3|4c4954 405:S2|4946 406:C8,184|008356072923064d00ad002a0e0c000251561729382e28284d019c000e0c00032a0c0002515627312a56550e0e0c000350563729384d027f002a0e0e0e0c000251564729354d036f002a0e0e0e0c0002515657332a56850e0e0c000350566729384d0453002a0e0e0e0c000251567729354d0543002a0e0e0e0c0002515687220c2a56b50e0c000350569729354d0627002a0e0e0e0c00025156a7293828292a0e0c00025156b729373b2a22100e0e0e7d1300020e0e0e0e|@407,@335,@344,@342,@333,@342,@333,@333| 407:S35|42617365436f6465547265652e7072657474792832297072696e745472696164283429 408:S5|424c4f434b 409:S9|424547494e4c4f4f50 410:S4|4c4f4f50 411:S5|5241495345 412:S7|48414e444c4528 413:S4|57495448 414:S5|4c44455843 415:O2|40,0 416:S5|4341534520 417:C7,128|008156072923064d0075002a0e0c0002512c293b4d0168000e0c000303043b50024429352a36564729382c4d0251004d034d000e0e0c000329283a4d0441000e0e0c0003642a0e0e0e0c000251565729354d052b002a0e0e0e0c0002512b250526041e5026045056172e2a56480c000350562729373b2a307d0800020e0e0e0e|@418,@335,I229,-1,@355,@344,@329| 418:S25|42617365436f6465547265652e707265747479283229283229 419:C1,16|00802b352c3656272d0e0e0e7e030003|@420| 420:S25|42617365436f6465547265652e707265747479283229283129 421:S5|454c53453a 422:S3|29207b 423:S4|43415345 424:S5|20414e4420 425:S6|4d555455414c 426:S9|524543434f4e535452 427:S10|434f4e5441494e455220 428:S13|534554434f4e5441494e455228 429:S15|5455504c45434f4e5441494e455228 430:C7,160|00812b3828282a0e0e0c0002512c354d008d004d0189000e0e0c000303082c362937296502162c353c4d0173000c000303062c37296402042c362964292d56370e0c0003502c384d0255002a0e0c0002512c354d0349002a0e0c0002512d354d003d004d0139000e0e0c000303082d362939296502044d042600292e56470e0e0e0c0003502d354d0515002a0e0c0002512d3828292a2f0e7d0700020e0e0e0e|@432,-1,I229,@342,@329,@431,@329| 431:O1|-2 432:S28|42617365436f6465547265652e7072657474794f707456616c283229 433:O3|@7141,@228,@434 434:S21|6368616e67654c3a20556e6b6e6f776e20636f6465 435:C4,48|00802b3b4d0028000e0c000303033b021d2b352c3656272b2a4f0113004200032b4f020b004100022a2a69292706420e|@436,I229,@234,@435| 436:S11|4c6973742e6d6170283229 437:O1|@438 438:C2,8|00804d000200100e|@440,@439| 439:O3|@7141,@228,@441 440:S22|434f44455452454528292e6572726f72456e76283129 441:S9|6572726f7220656e76 442:C2,8|00804d000200100e|@440,@439| 443:O1|@466 444:O1|@7146 445:O5|0,@447,@458,@7148,@446 446:O2|-7,@459 447:O2|@448,@7147 448:C8,88|00802b352c362d37293b4d004a000e0e0e0c000303362b355647292b4d0138000e0c0003294d022f000c00024d0328000e0c000203062935296402054d041800102e2a4d051100347e0a00034d060800100e0e0e0e0e0e0e|@450,I229,@451,I105,I218,@226,@224,@449| 449:O3|@7141,@228,@454 450:S50|434f44455452454528292e67656e436f6465283229696e736572746564436f64652d6c6f6f6b75704f6c6441646472283129 451:O1|@452 452:C9,232|00812c35293b4d00de000e0e0e0c000329354d01d2004d02ce000e0e0e0c0003036a29362f362a3b4d00bc000e0c0003302a4d03b2000e0e0e0c00036403492f3b4d03a3000c000303033c02182a3b4d0095000e0e0c0003302a4d048a000e0e0e0c00036403054d057d00102f3c4d0676000e0e0e0c00032b2a4d006a000e0e0e0c0003296502012965025a29362f362a4d0753000c0002302a4d034a000e0e0e0c000364033d2f3b4d033b000c000303033c02182a4d072e000e0e0e0c0002302a4d0422000e0e0e0c00036403054d051500102a304d000e000e0e0e0c00032964020129656543|@453,I253,-1,I229,I234,I231,@52,I106,I15| 453:S19|5374726574636841727261792e737562283229 454:S36|6f75746572206c6576656c207265616368656420696e206c6f6f6b75704f6c6441646472 455:O1|@456 456:O2|0,@457 457:O10|0,0,0,0,0,0,0,0,0,0 458:O5|-5,1,1,0,0 459:O8|@460,@209,0,0,1,0,0,0 460:O4|4,@462,@461,1 461:O2|-3,I229 462:O2|@464,@463 463:O2|@465,0 464:O2|-3,1 465:O5|-5,-1,1,0,0 466:O2|0,@464 467:O2|@478,@477 468:C10,296|00832e2e2e6a2c0e0e0c00023b2a354d0015014d0111010e0e0c000303082a362939296502044d02fe0029354d03f8004d01f4000e0c000303064d04ea0002262b354d00e2004d01de000e0e0e0c000303082b362936296502044d05ca004d06c6002a2f6a642c354d00bc004d01b8000e0c000303082c362937296502162c353c4d01a3000c000303062c37296402042c3629640e4f078f004000022d354d0086004d0182000e0e0e0c000303082d362935296502132d353c4d016b000c000303062d36296402013b2e354d0059004d0155000e0e0c000303082e3629382965020e3c28403b4d083e000e0e0e0c00042a2d2d2c3168052e354d032b004d0127000c000303172b3b4d011c000e0c000303053b2d6902043c2c2e6a02064d0007002a6927081f040e|@470,-1,I229,@431,-2,@471,@473,@475,@469,I11| 469:C10,176|00802b354d00a8004d01a4000e0c0003032c2b3657172a4d0295000e0e0c000203032a02054d038700102a2a4d0480000e0c00034d0578002a692704026d2b3528064d016a000e0e0e0c0003035c2b362c372a0e0e4f06570021000229354d054e004d014a000e0e0e0c000303382936294d023b000c000203054d07320010292c4d022b000c000203032c02054d081f00102a2a4d0418000e0c00034d0510002a69270402012e6602012b420e0e0e0e|@476,-5,I229,I105,@395,I253,-3,@469,@398,@395| 470:S37|434f44455452454528292e67656e436f64652832292831296e6577456e7669726f6e283429 471:O1|@472 472:C2,8|00804d000200100e|@440,@439| 473:O1|@474 474:C2,8|00804d000200100e|@440,@439| 475:C1,24|00802b352c362d37563756482f0e0e7b060300050e0e0e0e|@217| 476:S44|434f44455452454528292e67656e436f64652832292831296e6577456e7669726f6e2834296c6f6f6b283129 477:O1|@479 478:O2|@477,1 479:C2,16|00803c2c4d0008002d0e0e0e7e030003|@209,I229| 480:O2|-3,@478 481:O2|@458,@482 482:O2|@464,0 483:O4|@384,@210,@484,@191 484:O2|-1,@485 485:O2|5,@7150 486:O5|0,@488,@507,@7154,@487 487:O2|10,@508 488:O3|@216,@490,@489 489:O2|@468,@503 490:O2|@220,@491 491:O3|@223,0,@492 492:O10|0,@494,@493,0,0,0,0,0,0,0 493:O1|@502 494:O1|@7151 495:O5|0,@497,@458,@7153,@496 496:O2|-7,@498 497:O2|@448,@7152 498:O8|@499,@384,0,0,1,0,0,0 499:O4|4,@500,@461,1 500:O2|@501,@463 501:O2|-3,0 502:O2|0,@501 503:O2|@505,@504 504:O1|@506 505:O2|@504,0 506:C2,16|00803b2c4d0008002d0e0e0e7e030003|@384,I229| 507:O2|-3,@505 508:O2|@458,@509 509:O2|@501,0 510:O2|@512,@511 511:O2|@513,0 512:S2|3e3d 513:O3|@7136,69,@514 514:O4|@512,-1,@190,@189 515:O2|@209,@516 516:O2|@517,0 517:O3|@7136,69,@207 518:O2|@520,@519 519:O2|@521,0 520:S3|65786e 521:O3|@7156,69,@522 522:O6|@520,0,0,0,@524,@523 523:O2|-1,@7157 524:O2|0,@525 525:O3|0,@205,0 526:O2|@528,@527 527:O2|@529,0 528:S3|636872 529:O3|@7136,69,@530 530:O4|@528,-1,@532,@531 531:O3|1,@536,@535 532:O2|-1,@533 533:O2|-7,@534 534:O8|@465,@528,0,0,1,0,0,0 535:O4|-3,0,@542,@7160 536:O4|-3,0,@537,@7158 537:S3|696e74 538:O6|@537,0,0,0,@540,@539 539:O2|-1,@7159 540:O2|0,@541 541:O3|1,@205,0 542:S6|737472696e67 543:O6|@542,0,0,0,@540,@544 544:O2|-1,@7161 545:O2|@547,@546 546:O2|@548,0 547:S2|3c3e 548:O3|@7136,69,@549 549:O4|@547,-1,@551,@550 550:O3|1,@552,@191 551:O2|-2,-3 552:O4|-2,1,@553,0 553:O2|@555,@554 554:O2|@557,0 555:O2|49,@556 556:O3|3,@7162,79996 557:O2|50,@556 558:O2|@560,@559 559:O2|@561,0 560:S3|616273 561:O3|@7136,69,@562 562:O4|@560,-1,@190,@563 563:O3|1,@196,@196 564:O2|@384,@565 565:O2|@566,0 566:O3|@7136,69,@483 567:O2|@569,@568 568:O2|@570,0 569:S6|506f6c794d4c 570:O3|@7163,69,@571 571:O3|@569,@573,@572 572:O4|@574,I48,0,0 573:O2|-1,@501 574:O4|-1,@7165,@7166,@7164 575:O2|@576,10 576:C2,16|00802b56174d0007002d0e0e7e030003|@179,@178| 577:O2|@5955,@5954 578:O2|@580,@579 579:O2|@581,0 580:S21|6d616b65737472696e67496e4e616d655370616365 581:O3|@7136,69,@582 582:O4|@580,-1,@584,@583 583:O3|1,@585,@535 584:O2|-2,2 585:O4|-2,1,@586,0 586:O2|@588,@587 587:O2|@590,0 588:O2|49,@589 589:O3|3,@7168,79992 590:O2|50,@591 591:O4|-3,0,@592,@7169 592:S9|6e616d655370616365 593:O6|@592,0,0,0,@595,@594 594:O2|-1,@7257 595:O2|-1,@7170 596:O3|0,@597,0 597:O4|-2,1,@598,0 598:O2|@7171,@599 599:O2|@7196,@699 600:O3|1,@603,@602 601:S6|616c6c466978 602:O4|-3,@610,@621,@7174 603:O4|-3,0,@604,@7172 604:S4|756e6974 605:O6|@604,0,0,0,@607,@606 606:O2|-1,@7173 607:O2|0,@608 608:O3|1,@609,0 609:O4|-2,1,0,0 610:O2|@611,0 611:O4|-2,1,@612,0 612:O2|@614,@613 613:O2|@615,0 614:O2|49,@535 615:O2|50,@616 616:O4|-3,0,@617,@7175 617:S9|66697869747956616c 618:O6|@617,0,0,0,@620,@619 619:O2|-1,@7177 620:O2|-1,@7176 621:S4|6c697374 622:O6|@621,1,0,@624,@626,@623 623:O2|-1,@7195 624:O2|@625,0 625:O3|3,@7178,79992 626:O2|-1,@7179 627:O3|1,@205,@628 628:O2|@630,@629 629:O2|@679,0 630:O4|@632,@633,@634,@631 631:O3|1,@674,@673 632:S2|3a3a 633:O1|0 634:O2|-1,@635 635:O2|5,@7180 636:O5|0,@638,@669,@7188,@637 637:O2|10,@670 638:O3|@216,@640,@639 639:O2|@468,@661 640:O2|@220,@641 641:O3|@223,0,@642 642:O10|0,@644,@654,@643,0,0,0,0,0,0 643:O1|@7186 644:O1|@7181 645:O5|0,@647,@458,@7183,@646 646:O2|-7,@648 647:O2|@448,@7182 648:O8|@649,@632,0,0,1,0,0,0 649:O4|4,@651,@650,1 650:O2|-3,I218 651:O2|@652,0 652:O4|4,@463,@653,1 653:O2|-3,I105 654:O1|@7184 655:O5|0,@647,@657,@7185,@656 656:O2|-7,@658 657:O5|-5,2,1,0,0 658:O8|@465,@632,0,0,1,0,0,0 659:O5|0,@647,@660,@7187,@656 660:O5|-5,3,1,0,0 661:O4|@663,@665,@664,@662 662:O1|@668 663:O3|@665,@664,@662 664:O1|@667 665:O1|@666 666:C3,24|00802b4d0011000e0e0c00024d0108002c8000020e0e0e0e|@632,I105,I218| 667:C1,8|00802b420e0e0e0e|@632| 668:C1,8|00802b420e0e0e0e|@632| 669:O2|-3,@663 670:O2|@458,@671 671:O2|@657,@672 672:O2|@660,0 673:O4|-3,@624,@621,@7189 674:O4|-2,1,@675,0 675:O2|@677,@676 676:O2|@678,0 677:O2|49,@625 678:O2|50,@673 679:O4|@681,@210,@680,@673 680:O2|-1,@682 681:S3|6e696c 682:O2|5,@7190 683:O5|0,@684,@698,@7191,@487 684:O3|@216,@686,@685 685:O2|@468,@694 686:O2|@220,@687 687:O3|@223,0,@688 688:O10|0,@689,@493,0,0,0,0,0,0,0 689:O1|@7192 690:O5|0,@692,@458,@7194,@691 691:O2|-7,@693 692:O2|@448,@7193 693:O8|@499,@681,0,0,1,0,0,0 694:O2|@696,@695 695:O1|@697 696:O2|@695,0 697:C2,16|00803b2c4d0008002d0e0e0e7e030003|@681,I229| 698:O2|-3,@696 699:O2|@7201,@713 700:O3|1,@603,@702 701:S6|616c6c536967 702:O4|-3,@703,@621,@7197 703:O2|@704,0 704:O4|-2,1,@705,0 705:O2|@614,@706 706:O2|@707,0 707:O2|50,@708 708:O4|-3,0,@709,@7198 709:S12|7369676e617475726556616c 710:O6|@709,0,0,0,@712,@711 711:O2|-1,@7200 712:O2|-1,@7199 713:O2|@7206,@727 714:O3|1,@603,@716 715:S6|616c6c56616c 716:O4|-3,@717,@621,@7202 717:O2|@718,0 718:O4|-2,1,@719,0 719:O2|@614,@720 720:O2|@721,0 721:O2|50,@722 722:O4|-3,0,@723,@7203 723:S8|76616c756556616c 724:O6|@723,0,0,0,@726,@725 725:O2|-1,@7205 726:O2|-1,@7204 727:O2|@7211,@741 728:O3|1,@603,@730 729:S7|616c6c54797065 730:O4|-3,@731,@621,@7207 731:O2|@732,0 732:O4|-2,1,@733,0 733:O2|@614,@734 734:O2|@735,0 735:O2|50,@736 736:O4|-3,0,@737,@7208 737:S7|7479706556616c 738:O6|@737,0,0,0,@740,@739 739:O2|-1,@7210 740:O2|-1,@7209 741:O2|@7216,@755 742:O3|1,@603,@744 743:S8|616c6c46756e6374 744:O4|-3,@745,@621,@7212 745:O2|@746,0 746:O4|-2,1,@747,0 747:O2|@614,@748 748:O2|@749,0 749:O2|50,@750 750:O4|-3,0,@751,@7213 751:S10|66756e63746f7256616c 752:O6|@751,0,0,0,@754,@753 753:O2|-1,@7215 754:O2|-1,@7214 755:O2|@7217,@758 756:O3|1,@611,@603 757:S8|656e746572466978 758:O2|@7218,@761 759:O3|1,@704,@603 760:S8|656e746572536967 761:O2|@7219,@764 762:O3|1,@718,@603 763:S8|656e74657256616c 764:O2|@7224,@778 765:O3|1,@603,@767 766:S9|616c6c537472756374 767:O4|-3,@768,@621,@7220 768:O2|@769,0 769:O4|-2,1,@770,0 770:O2|@614,@771 771:O2|@772,0 772:O2|50,@773 773:O4|-3,0,@774,@7221 774:S12|73747275637475726556616c 775:O6|@774,0,0,0,@777,@776 776:O2|-1,@7223 777:O2|-1,@7222 778:O2|@7225,@781 779:O3|1,@732,@603 780:S9|656e74657254797065 781:O2|@7245,@851 782:O3|1,@535,@784 783:S9|6c6f6f6b7570466978 784:O4|-3,@785,@786,@7226 785:O2|@616,0 786:S6|6f7074696f6e 787:O6|@786,1,0,@789,@791,@788 788:O2|-1,@7244 789:O2|@790,0 790:O3|3,@7227,79992 791:O2|-1,@7228 792:O3|1,@205,@793 793:O2|@795,@794 794:O2|@816,0 795:O4|@797,@210,@798,@796 796:O4|-3,@789,@786,@7234 797:S4|4e4f4e45 798:O2|-1,@799 799:O2|5,@7229 800:O5|0,@801,@815,@7230,@487 801:O3|@216,@803,@802 802:O2|@468,@811 803:O2|@220,@804 804:O3|@223,0,@805 805:O10|0,@806,@493,0,0,0,0,0,0,0 806:O1|@7231 807:O5|0,@809,@458,@7233,@808 808:O2|-7,@810 809:O2|@448,@7232 810:O8|@499,@797,0,0,1,0,0,0 811:O2|@813,@812 812:O1|@814 813:O2|@812,0 814:C2,16|00803b2c4d0008002d0e0e0e7e030003|@797,I229| 815:O2|-3,@813 816:O4|@818,@633,@819,@817 817:O3|1,@790,@796 818:S4|534f4d45 819:O2|-1,@820 820:O2|5,@7235 821:O5|0,@822,@850,@7236,@637 822:O3|@216,@824,@823 823:O2|@468,@842 824:O2|@220,@825 825:O3|@223,0,@826 826:O10|0,@828,@833,@827,0,0,0,0,0,0 827:O1|@7242 828:O1|@7237 829:O5|0,@831,@458,@7239,@830 830:O2|-7,@832 831:O2|@448,@7238 832:O8|@649,@818,0,0,1,0,0,0 833:O1|@7240 834:O5|0,@831,@657,@7241,@835 835:O2|-7,@836 836:O8|@837,@818,0,0,1,0,0,0 837:O2|10,@463 838:O5|0,@831,@660,@7243,@839 839:O2|-7,@840 840:O8|@841,@818,0,0,1,0,0,0 841:O3|6,@465,0 842:O4|@844,@846,@845,@843 843:O1|@849 844:O3|@846,@845,@843 845:O1|@848 846:O1|@847 847:C3,24|00802b4d0011000e0e0c00024d0108002c8000020e0e0e0e|@818,I105,I218| 848:C1,8|00802b6801420e0e|@818| 849:C1,8|00802b35420e0e0e|@818| 850:O2|-3,@844 851:O2|@7247,@856 852:O3|1,@535,@854 853:S9|6c6f6f6b7570536967 854:O4|-3,@855,@786,@7246 855:O2|@708,0 856:O2|@7249,@861 857:O3|1,@535,@859 858:S9|6c6f6f6b757056616c 859:O4|-3,@860,@786,@7248 860:O2|@722,0 861:O2|@7250,@864 862:O3|1,@746,@603 863:S10|656e74657246756e6374 864:O2|@7252,@869 865:O3|1,@535,@867 866:S10|6c6f6f6b757054797065 867:O4|-3,@868,@786,@7251 868:O2|@736,0 869:O2|@7253,@872 870:O3|1,@769,@603 871:S11|656e746572537472756374 872:O2|@7255,0 873:O3|1,@535,@875 874:S11|6c6f6f6b757046756e6374 875:O4|-3,@876,@786,@7254 876:O2|@750,0 877:O3|1,@535,@879 878:S12|6c6f6f6b7570537472756374 879:O4|-3,@880,@786,@7256 880:O2|@773,0 881:O2|@883,@882 882:O2|@884,0 883:S5|7072696e74 884:O3|@7136,69,@885 885:O4|@883,-1,@887,@886 886:O3|1,@888,@888 887:O2|-2,3 888:O3|3,@7258,79992 889:O2|@891,@890 890:O2|@892,0 891:S10|6d616b65737472696e67 892:O3|@7136,69,@893 893:O4|@891,-1,@895,@894 894:O3|1,@896,@535 895:O2|-2,-2 896:O3|3,@7259,79992 897:O2|@899,@898 898:O2|@900,0 899:S10|696e7374616c6c5f7070 900:O3|@7136,69,@901 901:O4|@899,-1,@903,@902 902:O3|1,@904,@603 903:O2|-2,1 904:O3|1,@906,@905 905:O3|1,@536,@928 906:O4|-2,1,@907,0 907:O2|@909,@908 908:O2|@912,@911 909:O2|49,@910 910:O3|1,@535,@603 911:O2|@920,@919 912:O2|50,@913 913:O3|1,@914,@603 914:O4|-2,1,@915,0 915:O2|@917,@916 916:O2|@918,0 917:O2|49,@536 918:O2|50,@191 919:O2|@926,0 920:O2|51,@921 921:O3|1,@922,@603 922:O4|-2,1,@923,0 923:O2|@917,@924 924:O2|@925,0 925:O2|50,@536 926:O2|52,@927 927:O3|1,@603,@603 928:O3|1,@930,@929 929:O3|1,@931,@603 930:O3|3,@7260,79992 931:O3|3,@7261,79992 932:O2|@934,@933 933:O2|@935,0 934:S8|636f6d70696c6572 935:O3|@7136,69,@936 936:O4|@934,-1,@938,@937 937:O3|1,@5901,@5900 938:O2|-1,@939 939:O2|-3,@940 940:O2|@942,@941 941:O2|@945,@944 942:C1,16|00802b352c362d3756372e7b05030004|@943| 943:S27|434f4d50494c45525f424f445928292e636f6d70696c6572283129 944:O2|@1066,@1065 945:C24,392|0082040a002d2d2b4d007c010e0c00045029352a372b382c23062d23072e324d0165014d0261010e0e0c0003334d0357014d0253010c000378762b3b2d03184d04450156d722102213326805294d0537010c000264020d2e2211221056f70e0e0e0c000409d100ff6d29353c4d0618010e0c0003034c2f3b3b4d070b010c000450313b28204d07ff000c000450303b28394d07f3000c0004502e3b28444d07e7000c0004502d3b3b4d07dc000e0c0004504d08d3002b0e0e0e0c0002504d09c700100200293528674d06bc000e0c0003030b293728674d0aae002b6a10020029354d0ba3004d0c9f000c000303402937294d0d93004d0e8f000c00034d0f88002a4d1083000c0003294d117b004d1077000c000329404d106e000e0e0e0c00032f0c00025028674d0a5d002b6a100200294d125300020249000c000203054d1346001029293c4d143e000e0e0e0c00034d1534002a4d102f000c0003294d1627004d1023000c000329404d101a000e0e0e0c00032f0c00025028674d0a09002b6a102709440e0e0e|@947,@948,@7284,@960,@7285,@1038,I30,I229,I255,@1040,@55,@373,@7141,I251,@1041,@1057,@1062,@344,@1063,I105,@398,I253,@1064,@946| 946:S36|20756e65787065637465646c7920726169736564207768696c6520636f6d70696c696e67 947:S27|434f4d50494c45525f424f445928292e636f6d70696c6572283329 948:O1|@949 949:C6,136|00822c4d0081004d017d000e0e0c00032d4d0273004d016f000c00033c284028204d0363000c00043c284028394d0357000c00043c28404d044d004d0349000e0e0c00043c28403b4d033c000e0c00043c284028444d032f000c00043c28403b4d0324000e0c0004332f452d462e472c483049220d4a2b4b2a4c312408220c24092708440e0e0e0e|@950,@7263,@960,@7262,I11,I48| 950:S17|4c45585f28292e696e697469616c283329 951:O2|@957,@7264 952:O2|@953,@7264 953:C2,32|00802b3556174d0016000e0e0e0c000303033c0202020202013b420e0e0e0e0e|@954,I251| 954:S19|556e6976657273616c2e746167283229283129 955:O2|@956,@7264 956:C1,16|008056072928452e6a64420e0e0e0e0e|@954| 957:C3,40|00802b3556174d001e000e0e0e0c000303062b3729640202020202054d01080010420e0e0e0e0e0e|@954,I251,@958| 958:O3|101,@959,0 959:S5|4d61746368 960:O2|@962,@961 961:O2|@967,@966 962:C5,168|00812b352d293b4d009d000e0e0c000303033b021a29352a362a2d0e0e0c000203052a68010207292503511e263b6564294d0173000c00024d026c000e0c0002030e29352e372a2a300e0e0e7d0800022d35563729293b4d004d000e0e0c000303033b021a29352a362a2e0e0e0c000203052a68010207292503511e263b6564294d0123000c00024d021c000e0c0002030e293531372a2a330e0e0e7d0b00024d030400100e0e0e|@964,I229,I105,I218,@963| 963:O3|@7141,@228,@965 964:S21|44656275672e676574506172616d65746572283229 965:S11|746167206d697373696e67 966:O2|@974,@973 967:O3|@7264,69,@968 968:O1|@969 969:C2,8|00804d000200100e|@971,@970| 970:O3|103,@373,@972 971:S18|44656275672e64656661756c74732d283129 972:S16|6572726f7220696e2070726f6772616d 973:O2|@978,@977 974:O3|@7265,69,@975 975:O1|@976 976:C1,8|00803b420e0e0e0e|@971| 977:O2|@982,@981 978:O3|@7266,69,@979 979:O1|@980 980:C1,8|00803b420e0e0e0e|@971| 981:O2|@984,@983 982:O3|@7267,69,I48 983:O2|@986,@985 984:O3|@7268,69,1 985:O2|@988,@987 986:O3|@7269,69,40 987:O2|@990,@989 988:O3|@7270,69,0 989:O2|@992,@991 990:O3|@7271,69,0 991:O2|@994,@993 992:O3|@7272,69,0 993:O2|@996,@995 994:O3|@7273,69,0 995:O2|@998,@997 996:O3|@7274,69,0 997:O2|@1000,@999 998:O3|@7275,69,0 999:O2|@1002,@1001 1000:O3|@7276,69,0 1001:O2|@1004,@1003 1002:O3|@7277,69,6 1003:O2|@1008,@1007 1004:O3|@7278,69,@1005 1005:O1|@1006 1006:C1,8|00803b420e0e0e0e|@971| 1007:O2|@1010,@1009 1008:O3|@7279,69,77 1009:O2|@1012,@1011 1010:O3|@7280,69,0 1011:O2|@1014,@1013 1012:O3|@7281,69,0 1013:O2|@1015,0 1014:O3|@7282,69,0 1015:O3|@7283,69,@1016 1016:O1|@1017 1017:C2,8|00804d000200100e|@971,@1018| 1018:O3|103,@373,@1019 1019:S9|4e6f2073747265616d 1020:O2|@1025,@7266 1021:O2|@1022,@7266 1022:C2,32|00802b3556174d0016000e0e0e0c000303033c0202020202013b420e0e0e0e0e|@954,I251| 1023:O2|@1024,@7266 1024:C1,16|008056072928452e6a64420e0e0e0e0e|@954| 1025:C3,40|00802b3556174d001e000e0e0e0c000303062b3729640202020202054d01080010420e0e0e0e0e0e|@954,I251,@958| 1026:O2|@1031,@7280 1027:O2|@1028,@7280 1028:C2,32|00802b3556174d0016000e0e0e0c000303033c0202020202013b420e0e0e0e0e|@954,I251| 1029:O2|@1030,@7280 1030:C1,16|008056072928452e6a64420e0e0e0e0e|@954| 1031:C3,40|00802b3556174d001e000e0e0e0c000303062b3729640202020202054d01080010420e0e0e0e0e0e|@954,I251,@958| 1032:O2|@1037,@7265 1033:O2|@1034,@7265 1034:C2,32|00802b3556174d0016000e0e0e0c000303033c0202020202013b420e0e0e0e0e|@954,I251| 1035:O2|@1036,@7265 1036:C1,16|008056072928452e6a64420e0e0e0e0e|@954| 1037:C3,40|00802b3556174d001e000e0e0e0c000303062b3729640202020202054d01080010420e0e0e0e0e0e|@954,I251,@958| 1038:C1,24|0080560a561956282b2b2b5667310e7b050600040e0e0e0e|@1039| 1039:S30|434f4d50494c45525f424f445928292e636f6d70696c6572283329283129 1040:S24|436f6d70696c6174696f6e20696e7465727275707465640a 1041:O1|@1042 1042:C21,272|00802b285c4d0007010c000303064d01fe0006da2b28224d00f5000e0e0c000303064d02ea0006dc28212c4d03e1000e0e0c0003030c2b287e4d03d3000c000302013b03033c020c2b28204d00c1000e0e0c000303032b02b12b28074d04b0000e0c00030a0600730079007f0085008f0095009b002b28204d0594000e0c0003033e2b28404d0687000c0003293b4d077e000e0e0e0c000303033c020b2928ff4d086c000e0c000303054d09620010294d0a5c002a4d0b57002f0e0e7e0500032b3e404d0c49000e0e0c0004285c2a4d0b3d002e7e04000302304d0d3200022a4d0e2c0002244d0f2600021e02021a004d101c0002144d111600020e4d1210000208020204004d130600420e0e0e0e0e|@1044,I229,@1045,@1046,I248,I107,I250,I106,I234,I233,@361,@1047,@344,@1048,@1051,@1052,@1053,@1054,@1055,@1056,@1043| 1043:S2|5c72 1044:S16|436861722e746f537472696e67283129 1045:S2|5c5c 1046:S2|5c22 1047:S2|5c5e 1048:O1|@1049 1049:C13,296|00822c3b4d0020010e0c000303064d01160106ce2c3c4d020e010e0e0e0c00032e3b4d0302010e0e0e0c00032d3b4d03f6000e0e0e0c00032a2a4d00ea000e0e0e0c0003030330023429031b2e3c4d02d6000e0e0e0c0003312a4d02ca000e0e0e0c00036402162e3c4d04bb000c0003312a4d02b2000e0e0e0c00036429304d05a5000e0e0c0003292e324d0699000e0e0c000433324d078e000e0e0e0c0003293b4d0082000e0e0e0c000303033c0224323b4d0371000e0e0c00032a3b4d0366000e0e0e0c00032a2a4d005a000e0e0e0c000365030329020e29334d044800020240000e0c00032928304d0439000e0e0c0003293b4d082e000e0e0e0c000303033c020b2928ff4d091c000e0c000303054d0a120010292d2a4d0b0a00220e7e0f0003440e0e0e|@1050,I229,I48,I107,I231,I106,I109,@1048,I110,I234,I233,@361,@344| 1050:S18|436861722e6f6374496e7452657072283329 1051:S2|5c61 1052:S2|5c62 1053:S2|5c74 1054:S2|5c6e 1055:S2|5c76 1056:S2|5c66 1057:O1|@1058 1058:C17,288|00812c4d0019010e0e0c0002293c4d010e010e0e0e0c0003030a2d2d2d0e0e0e7d0500023b3b292c4d02f4000e0c000303032a024b293c4d03e5000e0e0c00032a28084d03d9000e0e0c0003312a4d04ce000e0e0e0c000364300e0e0e0c00024d00bc000e0c00022c2a4d05b2000e0e0e0c0003292c2505250526031e563b6665294d069a000e0e0e0c0002030c293b4d078c000e0c000302013b03032902054d087c0010292c4d0275000e0e0c000303032f02632928104d0364000e0c0003293c4d095a000e0e0e0c00032928084d0a4d000e0e0c000378760f3b2c28413b4d0b3c000e0c0004050800ff6d4d0c2f0010292e4d0d28000e0c0003503b28083b4f0e1b00900003502a4d0f12000e0e0e0c0002502a270566430e0e0e0e0e0e|@1060,I223,I229,I251,I239,I252,I106,I105,I231,@78,I240,I241,I11,@78,I151,@1059,I47| 1059:C9,160|008156042c2a4d0096000e0e0e0c00036403033b028856082c28084d0181000e0e0c00032a2a4d0276000e0e0e0c00036556170e0e0c0002294d0363000c0002293c4d045a000e0e0e0c000303151203000100f8ff29302d4d0544000e0c00045102161203000100f8ff2b28082b322e4d062c000e0c0006512d3c4d0121000e0e0c00032f2b4d0116000e0e0e0c0003292b0e0e0e4f0707005100032704430e|@1061,I251,I239,I252,I223,I229,I254,I198,@1059| 1060:S19|537472696e672e746f537472696e6773283229 1061:S31|537472696e672e746f537472696e6773283229636f7079546f4f7574283229 1062:S26|457863657074696f6e2d20496e7465726e616c4572726f723a20 1063:S23|20726169736564207768696c6520636f6d70696c696e67 1064:S11|457863657074696f6e2d20 1065:O3|@1386,@5898,@1096 1066:C41,1504|00822b4d00d9054d01d5050e0e0c00032c4d02cb054d01c7050c00032d4d03bf054d01bb050c00032e4d04b3054d01af050c00032f4d05a7054d01a3050c000331230a32230c33230e34230b220c2311220d231004040028073b4d0682050e0e0e0c000328083b4d0675050e0e0c000328093b4d0669050e0e0c0003280d3b4d065d050e0e0c00032d2a452b462c472d48502d372e38221635221736221837221938221a39221b3a221c2306221d2307221e2308221f23094d0724050e0c000b221737221823062a3b4d0813050c00032a3b4d080a050e0e0e0c00032928444d09fd040e0e0c00034d0af4040e0c000203032902012a294d0be5044d0ce1040e0e0c00032705030e22174d0dd2040e0e0e0c000202013b221837221923062a3b4d08bc040e0c00032a3b4d08b2040e0e0e0c00032928444d09a5040e0e0c00034d0a9c040e0c000203032902012a121a00010001002a2a4d0c85040e0e0c000327060364221835221936221a37221b38221c39221d3a221e2306221f230722202308222123094d0e56040e0e0e0c000b0330221835221936221a37221b38221c39221d3a221e2306221f230722202308222123094d0728040e0c000b504d0f1f04104d101a0406dd0403003b2a4d110f040c00035029362a374d12030422122b6a121900010001002c2b692a221f2b4d13ed030e0e0c000404020028073b4d06de030e0e0e0c000329220c4d14d1030e0e0c000328083b4d06c5030e0e0c000329220f4d14b9030e0e0c00032d2a452c46502d352e36292b4d15a4030e0c0003221f033c040700284d22242b4d1690030e0c00045029372a23062b4d1781032b0e0c000250220c1b10272b4d1871030e0e0c0004503b2c0e0e0c0002270402013b222835222936222a37222b38222c39222d3a222e2306222f23072230230822312309020232034d0e35030e0e0c000b0330222835222936222a37222b38222c39222d3a222e2306222f230722302308223123094d0708030e0c000b504d19ff02103b0403003b2a4d11f4020e0c00035029352a362b370403003b2a4d11e0020e0c00035029362a370403003b2a4d11ce020e0e0e0c00035029352a362b370403003b2a4d11b8020e0c00035029362a370403003b2a4d11a6020e0e0e0c00035029352a362b374d1a9502223122106a4d1b8c022231220e6a4d1c83022230346a4d1d7b022232326a4d1e730222312f6a2226342216221422282f33220d34221633220d680c222222422b4d1f51020e0e0c000422423522433622443722453822463922473a2248230622492307224a2308224b23094d0e26020e0e0e0c000b03033b020f221722113422454d2010020e0c000504020028073b4d0602020e0e0e0c00032922304d14f5010e0e0c000328083b4d06e9010e0e0c00032922334d14dd010e0e0c00032d2a452c46502d352e36292b4d15c8010e0c0003224b35224c36224d37224e38224f3922503a225123062252230722532308225423094d0e9e010e0e0e0c000b0330224b35224c36224d37224e38224f3922503a225123062252230722532308225423094d0770010e0c000b504d216701103b222d224d4d225d010e0e0c000304020028073b4d064e010e0e0e0c000329223a4d1441010e0e0c000328083b4d0635010e0e0c000329223d4d1429010e0e0c00032d2a452c46502d352e36292b4d1514010e0c0003225535225636225737225838225939225a3a225b2306225c2307225d2308225e23094d0eea000e0e0e0c000b0330225535225636225737225838225939225a3a225b2306225c2307225d2308225e23094d07bc000e0c000b504d23b300103b224f0339040700284d22532b4d16a1000e0e0c00045029372a23062b4d2491002b0e0c000250220d2a4d2584000e0c0003503b2c0e0e0c0002270402013b3322564d266c000e0c000304020028073b4d065e000e0e0e0c00032922454d1451000e0e0c000328083b4d0645000e0e0c00032922484d1439000e0e0c00032d2a452c46502d352e36292b4d1524000e0c00034d271c002a220d2218223d22602260224822102260680a27482714440e0e0e0e|@1068,@7285,@960,@7286,@7287,@7288,@7289,I94,@1093,I253,I113,I218,@1096,@1099,@1102,@1293,@1296,@1298,@1302,@1315,@1317,I107,I106,@271,@333,@1995,@1296,@2207,@2208,@2209,@2210,@2211,@2212,@4873,@4907,@4909,@5787,@333,@330,@3338,@1067| 1067:C9,520|0080560f04040028073b4d00fa010e0e0e0c000328083b4d00ed010e0e0c000328093b4d00e1010e0e0c0003280d3b4d00d5010e0e0c00032d2a452b462c472d48502d372e38303b4d01bc010e0c00034d02b4010e0c0002030c304d03a9010e0e0c000202013b78760c3b3b56de0e0e0e0c000205ce00ff6d323b4d0189010e0e0c00034d0280010e0c0002030c3b4d0375010e0e0c000202013b04020028073b4d0063010c0003292f4d045a010e0e0e0c000328083b4d004d010e0e0c000329324d0442010e0e0e0c00032d2a452c46502d352e36292b4d052c010e0c000322123b4d0121010e0e0c00034d0218010e0c0002030c3b4d030d010e0e0c000202013b12150001000600033412150001000500121600010004001217000100030012180001000200121900010001002c2c2c2c33324d06cf000c0007260602023b503310323b4d01be000e0e0e0c00034d02b4000e0c0002030c3b4d03a9000e0e0c000202013b04020028073b4d0097000c0003292f4d048e000e0e0e0c000328083b4d0081000e0e0c000329324d0476000e0e0e0c00032d2a452c46502d352e36292b4d0560000e0c000312140001000700040600342b2b4d074b000c00045029121700010006000335121700010005001218000100040012190001000300121a0001000200121b00010001002c2c2c2c220c324d060f000c0007260602023b50292716420e0e|@1301,I94,I113,I218,I88,I107,I106,@5790,@5789| 1068:S31|434f4d50494c45525f424f445928292e62617365436f6d70696c6572283329 1069:O2|@1074,@7275 1070:O2|@1071,@7275 1071:C2,32|00802b3556174d0016000e0e0e0c000303033c0202020202013b420e0e0e0e0e|@954,I251| 1072:O2|@1073,@7275 1073:C1,16|008056072928452e6a64420e0e0e0e0e|@954| 1074:C3,40|00802b3556174d001e000e0e0e0c000303062b3729640202020202054d01080010420e0e0e0e0e0e|@954,I251,@958| 1075:O2|@1080,@7271 1076:O2|@1077,@7271 1077:C2,32|00802b3556174d0016000e0e0e0c000303033c0202020202013b420e0e0e0e0e|@954,I251| 1078:O2|@1079,@7271 1079:C1,16|008056072928452e6a64420e0e0e0e0e|@954| 1080:C3,40|00802b3556174d001e000e0e0e0c000303062b3729640202020202054d01080010420e0e0e0e0e0e|@954,I251,@958| 1081:O2|@1086,@7270 1082:O2|@1083,@7270 1083:C2,32|00802b3556174d0016000e0e0e0c000303033c0202020202013b420e0e0e0e0e|@954,I251| 1084:O2|@1085,@7270 1085:C1,16|008056072928452e6a64420e0e0e0e0e|@954| 1086:C3,40|00802b3556174d001e000e0e0e0c000303062b3729640202020202054d01080010420e0e0e0e0e0e|@954,I251,@958| 1087:O2|@1092,@7276 1088:O2|@1089,@7276 1089:C2,32|00802b3556174d0016000e0e0e0c000303033c0202020202013b420e0e0e0e0e|@954,I251| 1090:O2|@1091,@7276 1091:C1,16|008056072928452e6a64420e0e0e0e0e|@954| 1092:C3,40|00802b3556174d001e000e0e0e0c000303062b3729640202020202054d01080010420e0e0e0e0e0e|@954,I251,@958| 1093:O1|@1094 1094:C2,16|0089313b3b4d0007000c0004503b1f0a|@1095,I255| 1095:S21|4c45585f28292e72657365744c6578616e28313029 1096:O1|@1097 1097:C2,16|00802b28394d0007002d0e0e7e030003|@1098,I113| 1098:S15|496e745365742e6d6b283129283129 1099:O1|@1100 1100:C1,16|00812c2c2c0e0e0e7d0400020e0e0e0e|@1101| 1101:S19|53594d5f53455428292e696e73696465283229 1102:O2|@1104,@1103 1103:O4|@1118,@1170,@1171,@1117 1104:C8,176|00802b372c2306293b4d00a3000c00032928444d0199000e0e0c00034d0290000e0c0002640311293b28444d0381000e0e0c0004503b02702a3b4d0072000e0e0e0c0003293b4d0166000e0e0e0c000364033b2d393b2a0e0e0c00024d0450002a3c323533363437220c38220d39220e3a220f23062210230722112308221223094d052b000c000e504d062300103b502a3b28444d0318000e0c0004502d56372e0e0e0e7d05000265420e0e0e0e0e0e|@1106,I253,I113,I218,I255,@1107,@1111,@1105| 1105:O3|@7141,@228,@1116 1106:S18|4c45585f28292e696e73796d626f6c283129 1107:O1|@1108 1108:C2,16|00802b384d0008002a2d0e0e7d040002|@1110,@1109| 1109:S34|756e657870656374656420656e64206f662066696c6520656e636f756e7465726564 1110:S25|4c45585f28292e6572726f724d657373616765283329283129 1111:O1|@1112 1112:C9,168|008c3c28403b4d009e000e0e0e0c00044d0194002a69040700284d2b2b4d0287000c00045029372a23062b22120312220e3b3c4d0371000e0e0c0004503b5002023b504d0461002b0e0c0002502922150e0c0002503b2c0e0e0c0002502e3b4d0545000e0e0c0003293b2a3b4d0638000e0c000303032902132a352b362a2c692a2a2505250526031e1e3b66664d0717000c000229221422166a6433320e0e0e7d1500020e0e0e0e|@1114,I11,@1113,@271,I255,@333,I253,I229,@369| 1113:C3,40|008056075617293b4d001c000e0c00032e2a692c3b2b4d010e000e0e0e0c0004503b2704420e0e0e|@1115,I253,I255| 1114:S17|4c45585f28292e657750726f6328313329 1115:S27|4c45585f28292e657750726f6328313329707072696e742d283129 1116:S11|656e64206f662066696c65 1117:O2|@1279,@7294 1118:C26,1704|00802b352c362d372e4d009b060c000229287e4d0191060e0e0c000303952f353036313732383339343a220c2306220d2307220e2308220f23094d026a060e0e0e0c000b502c3b4d035d060e0e0c000328302a4d0451060e0e0c0003030c2928394d0443060c000302013b6403342f4d0535060e0e0c0002502b3b4d0329060e0e0c0003287e2a4d061d060e0e0c00032d3b2b4d0711060e0e0c0004503b2603020f5648287e2a3256870e0e0e0c00045106d72928234d01ee050e0e0e0c000303692f353036313732383339343a220c2306220d2307220e2308220f23094d02c6050e0e0e0c000b502c3b4d03b9050e0e0c00032928224d01ad050e0e0c000364031a2f56590e0e0e0c0002502a3b28434d0793050c0004503b50020c564828232a3256870c00045106d22928224d0176050e0e0e0c000303172f56590c0002502a3b283f4d075f050c0004503b5006d729283b4d0150050e0c000303232a3b28394d0742050e0e0e0c0004502f35293b28204d0731050e0e0c0004503b5106cb29282c4d0120050202f4040e0c000303232a3b28384d070e050e0e0e0c0004502f35293b28204d07fd040e0e0c0004503b5106cb2928284d01ec040e0c000303712f353036313732383339343a220c2306220d2307220e2308220f23094d02c6040e0e0e0c000b502c3b4d03b9040e0e0c000329282a4d01ad04020281040e0e0c0003644d089f040c000203132a3b28344d0792040e0e0e0c0004503b5002102f4d098204020256040e0e0e0c00025006d32928294d016e040e0e0e0c000303272a3b28354d075e04020232040e0e0e0c0004502f35293b28204d0749040e0e0c0004503b5106d129285b4d0138040e0c000303272a3b28364d072a040202fe030e0e0e0c0004502f35293b28204d0715040e0e0c0004503b5106d129285d4d0104040e0c000303232a3b28374d07f6030e0e0e0c0004502f35293b28204d07e5030e0e0c0004503b5106cb29285f4d01d4030e0c000303232a3b28334d07c6030e0e0e0c0004502f35293b28204d07b5030e0e0c0004503b5106cb29287b4d01a403020278030e0c000303232a3b283a4d0792030e0e0e0c0004502f35293b28204d0781030e0e0c0004503b5106dc29287d4d017003020244030e0c000303232a3b283b4d075e030e0e0e0c0004502f35293b28204d074d030e0e0c0004503b5106dd29282e4d013c03020210030e0c000307d42f353036313732383339343a220c2306220d2307220e2308220f23094d0212030202e6020e0e0e0c000b502c3b4d0301030e0e0c000329282e4d01f5020e0e0c0003644d08eb020c000203622f393b2a0202b6020e0e0e0c00022e3b4d03d2020e0e0e0c00034d0ac8022a4d06c3020c00034d0bbc022a69292d3c220e35220f3622103722113822123922133a22142306221523070202710222162308221723094d0c8d020e0e0c000e260602c72f353036313732383339343a220c2306220d2307220e2308220f230902023c024d0260020202a1000e0c000b502c3b4d0351020e0e0c000329282e4d0145020e0e0c0003644d083b020c0002035a2f393b2a0e0e0e0c00022e3b4d0326020e0e0e0c00034d0d1c022a4d0617020c00034d0e10022a69292d3c220e35220f3622103722113822123922133a221423062215230722162308221723094d0ce5010e0e0c000e2606021f2a3b283d4d07d4010e0c0004502f35293b28204d07c5010e0e0c0004503b5106cc293f4d01b5010e0e0c0003030f2a3b3b4d07a7010c0004503b5006cb28302a4d0498010e0c0003030c2928394d048b010c000302013b030e2f4d057e010e0e0e0c00025006d028412a4d046e010e0e0e0c0003030c29285a4d045f010c000302013b03033c021b28612a4d044d010e0e0c0003030c29287a4d043f010c000302013b03033c020c2928274d012d010e0e0c000303114d0f22014d101e013156770c00045006d22814293b4d010d010e0e0c000303033b024f293c4d11fd000e0e0c00032928084d12f1000202c5000e0e0c00034d13e4002a4d14df000c0003292e4d01d6000202aa000e0e0e0c00036603033c0212293c4d11c0000e0c0003292502501e5b3b6464031456484d0fab002a32568702027b000c0004510275294d1598000e0c000230393b2a0e0c00024d1688002c4d0683000c00032928224d0679000e0e0c00034d1770002a69292d3c220f3522103622113722123822133922143a221523062216230722172308221823094d0c4500020219000e0e0c000e50220c35293b28204d0730000e0c0004503b26082a3b4d0322000e0e0e0c00032928444d1815000e0e0c00036403092f2e300e0e7d0700023b270442|@1120,@1121,I229,@1123,I253,I248,@1127,@344,I255,I218,@1152,@1161,@1162,@1111,@1163,@1164,I48,@1165,I240,I239,@1168,I252,@1041,@1169,@1119,I113| 1119:C1,16|00802b3856172a2d7d0400020e0e0e0e|@1110| 1120:S20|4c45585f28292e7061727365546f6b656e283129 1121:O1|@1122 1122:C6,112|00802b35293b4d0066000e0e0e0c000328092a4d0159000e0e0c0003030c29280d4d014b000c000302013b03033c020c2928204d0239000e0e0c0003032e2d352e362f3730383139323a332306342307220c2308220d23094d0314000e0c000b502d4d040a002e0e7d0500022965420e|@1124,I253,I248,I229,@1123,@1121| 1123:O1|@1125 1124:S24|4c45585f28292e736b697057686974655370616365283129 1125:C6,112|00892d3b4d0068000e0c0003293b4d015e000e0e0e0c0003032f3b310e0c0002294d024b000c00024d0344000e0c000203062935296402013f220e3b2b4d042f000c0004503b65021e29352a36303b2b4d041c000e0c000450220e3b2c4d040f000c0004503b65641f0a0e0e0e0e0e0e|@1126,I253,I229,I105,I218,I255| 1126:S17|4c45585f28292e6e657874436828313029 1127:O1|@1128 1128:C26,1952|00802b352c362d372e23072a3b28404d008d070e0e0c0004504d0183074d027f07314d037a070e0e0e0c00042c3b2b4d006d070e0e0c0004502d3b4d0461070e0e0c00032928774d0555070e0e0c00036403182c3b4d0447070c00032928304d063d070e0e0c00036402013b07cb2b3b28424d002a070e0e0e0c00045030353136323733383439220c3a220d2306220e2307220f2308221023094d0702070e0e0e0c000b502d3b4d04f5060e0e0c00032928784d05e9060e0e0c00036407d430353136323733383439220c3a220d2306220e2307220f2308221023094d07c0060e0c000b502d3b4d04b5060e0e0c000328302a4d08a9060e0e0c0003030c2928394d089b060c000302013b03033c023f28612a4d0889060e0e0c0003030c2928664d087b060c000302013b03033c021f28412a4d08690602026b010e0e0c0003030c2928464d0857060c000302013b6403234d094a064d0a4606324d0341060e0e0c00042d3b2b4d0035060e0e0c0004503b64027330393b2a0c00022e3b4d041e060e0e0e0c00034d0b14062a4d0c0f06020255000c0003313b4d0402060e0e0e0c00032a2a4d0cf6050e0e0e0c00034d0dec052a69292f3c22113522123622133722143822153922163a221723062218230722192308221a23094d0ec105221b0e0e7b0f0f000e02ba2d3b4d04b0050e0c000328302a4d08a5050e0e0c0003030c2928394d0897050c000302013b6403234d0f8a054d028605324d0381050e0e0c00042d3b2b4d0075050e0e0c0004503b64026f30393b2a0c00022e3b4d045e050e0e0e0c00034d1054052a4d0c4f050c0003313b4d0446050e0e0e0c00032a2a4d0c3a050e0e0e0c00034d1130052a69292f3c22113522123622133722143822153922163a221723062218230722192308221a23094d0e0505221b0e0e7b0f0f000e06d32d3b4d04f4040e0c00032928784d05e9040e0e0c00036403182c3b4d04db040c00032928304d06d1040e0e0c00036402013b07d530353136323733383439220c3a220d2306220e2307220f2308221023094d07a5040e0e0c000b502d3b4d0499040e0e0c000328302a4d088d040e0e0c0003030c2928394d087f040c000302013b03033c023b28612a4d086d040e0e0c0003030c2928664d085f040c000302013b03033c021b28412a4d084d040e0e0c0003030c2928464d083f040c000302013b6403274d1232044d0a2e04324d03290402021b040e0e0c00042d3b2b4d0019040e0e0c0004503b64027330393b2a0c00022e3b4d0402040e0e0e0c00034d13f8032a4d0cf303020255000c0003313b4d04e6030e0e0e0c00032a2a4d0cda030e0e0e0c00034d14d0032a69292f3c22113522123622133722143822153922163a221723062218230722192308221a23094d0ea503221b0e0e7b0f0f000e06cb2d3b4d0494030e0c000329282e4d0589030e0e0c00036403033c02332d3b4d0478030e0c00032928454d056d030e0e0c00036403033c02172d3b4d045c030e0c00032928654d0551030e0e0c00036407d12d3b4d0443030c000329282e4d0539030e0e0c00036407dd2b3b28414d0029030e0e0c0004502c3b4d041d030e0e0c000329282e4d0c11030e0e0c00032e3b2b4d0005030e0e0c000450323533363437220c38220d39220e3a220f23062210230722112308221223094d07dc020e0c000b502f3b4d04d1020202c3020e0e0c000328302a4d08c1020e0e0c0003030c2928394d08b3020c000302013b644d15a8020e0c0002037a32393b2a0e0e0e0c0002303b4d0492020e0e0e0c00034d1688022a4d0c83020c0003333b4d047a0202026b020e0e0e0c00032a2a4d0c6a020e0e0e0c00034d1760022a69292f3c2213352214020259003622153722163822173922183a22192306221a2307221b2308221c23094d0e31020e0e0c000e2608022c2e3b4d0422020e0e0e0c0003294d021702220c4d0311020e0e0c0004303b2b4d0005020e0e0c0004503b26035102023b502d3b4d04f1010e0e0c00032928454d05e5010e0e0c00036403033c02172d3b4d04d4010e0c00032928654d05c9010e0e0c00036407ce2d3b4d04bb010c00033135323633373438220c39220d3a220e2306220f230722102308221123094d0796010e0e0e0c000b502e3b4d0489010e0e0c000329287e4d057d010e0e0c00036403ca3135323633373438220c39220d3a220e2306220f230722102308221123094d0753010c000b502e3b4d0449010e0e0c000328302a4d083d010e0e0c0003030c2928394d082f010c000302013b64034b2c3b28414d001e010e0e0e0c0004502d3b4d0411010e0e0c0003294d1807014d0c03010c0003294d02fb00220c4d03f5000202e3000e0e0c0004303b2b4d00e5000e0e0c0004503b66022e2e3b4d04d5000e0e0c0003293b69287e2a692e3b2b4d00c2000e0e0e0c000450313b2e4d00b4000e0c0004503b66029a2e3b4d04a5000e0e0c000328302a4d0899000e0e0c0003030c2928394d088b000c000302013b6403472c3b28414d007a000e0e0e0c0004502d3b4d046d000e0e0c00032928454d0c61000e0e0c0003294d025700220c4d0351000e0e0c0004303b2b4d0045000e0e0c0004503b66022a2e3b4d0435000e0e0c0003293b692d3b2b4d0026000e0e0e0c000450303b2d4d0018000e0c0004503b656402013b02013b2705420e0e0e0e0e0e0e|@1130,I255,I48,@1131,@1134,I253,I229,I24,@1123,I248,@1139,@1140,@1143,@344,@1144,@1111,@1145,@1143,@1146,@1147,@1148,@1149,I218,@1150,@1151,@1129| 1129:S2|457e 1130:S21|4c45585f28292e70617273654e756d626572283129 1131:O1|@1132 1132:C2,32|008028302c4d0017000c0003030e2b28394d000b002d0e0e7e0300033b420e0e|@1133,I248| 1133:S15|436861722e69734469676974283129 1134:O1|@1135 1135:C3,32|00822b353b3b0e0e0e4f001300200002302a6929654d0107002e0e0e7d070002|@1137,@1136,@369| 1136:C4,88|00805604293b4d004e000e0e0e0c00032956380e0e0c00020335562729352a362b372c382d392e3a2f23063023073123083223094d0120000e0c000b503b0e0e0e4f0213003100022b2a69296602013b65420e0e0e0e0e0e|@1138,I253,@1123,@1136| 1137:S19|4c45585f28292e726561644368617273283329 1138:S26|4c45585f28292e7265616443686172732833296c6f6f70283129 1139:S3|307778 1140:O1|@1141 1141:C2,96|008028302c4d0057000c0003030c2b28394d004b000c000302013b03033c023d28612c4d0039000e0e0c0003030c2b28664d002b000c000302013b03033c021d28412c4d0019000e0e0c0003030e2b28464d000b002d0e0e7e0300033b420e0e|@1142,I248| 1142:S18|436861722e69734865784469676974283129 1143:S25|6d616c666f726d656420776f726420636f6e7374616e743a20 1144:C1,16|00802b3856172a2d7d0400020e0e0e0e|@1110| 1145:S2|3077 1146:C1,16|00802b3856172a2d7d0400020e0e0e0e|@1110| 1147:S2|3078 1148:S28|6d616c666f726d656420696e746567657220636f6e7374616e743a20 1149:C1,16|00802b3856172a2d7d0400020e0e0e0e|@1110| 1150:S23|6d616c666f726d6564207265616c206e756d6265723a20 1151:C1,16|00802b3856172a2d7d0400020e0e0e0e|@1110| 1152:O1|@1153 1153:C3,40|00802b352c3a3b3b0e4f001b003000022c3b2b4d0111000e0e0c0004503b2704420e0e0e0e0e0e0e|@1155,@1154,I255| 1154:C4,64|0080560729393b2a0e0c00023b3b56530e0c0002294d0027000c00024d0120000e0c000203062935296402013f640e0e0e4f020b004000022704420e0e0e0e0e|@1157,I105,I218,@1156| 1155:S22|4c45585f28292e7061727365436f6d6d656e74283129 1156:C12,296|00802b3f4d0020010e0c000303705707571729393b2a0e0e0e0c00025642294d0105014d0201010e0e0c00034d03f8002a4d04f3000c00032928294d04e9000e0e0c00034d05e0002a69292f3c3435220c36220d37220e38220f3922103a221123062212230722132308221423094d06b6000e0e0e0c000e5034270902a73b57130c0002294d079f000c00024d0898000e0c000203062935296402013f2d282a4d0084000e0c000303382928294d0077000c000303223b57330c0002294d0767000c00024d0860000e0c000203062935296402013f640208294f094b0021000202422d28284d003f000c0003032c29282a4d0033000c000303143b0e0e4f0a27002200020e4f091f00210002020a290e0e4f091300210002020a290e0e4f09070021000265420e0e|@1159,I229,-1,@355,@1160,@344,@1158,@1111,I105,I218,@1156,@1154| 1157:S36|4c45585f28292e7061727365436f6d6d656e74283129736b6970436f6d6d656e74283129 1158:C1,16|00802b3856172a2d7d0400020e0e0e0e|@1110| 1159:S54|4c45585f28292e7061727365436f6d6d656e74283129736b6970436f6d6d656e74283129736b6970436f6d6d656e74426f6479283129 1160:S45|656e64206f662066696c6520666f756e6420696e20636f6d6d656e742028737461727473206174206c696e6520 1161:S16|756e6b6e6f776e2073796d626f6c202e 1162:C1,16|00802b3856172a2d7d0400020e0e0e0e|@1110| 1163:S17|756e6b6e6f776e2073796d626f6c202e2e 1164:C1,16|00802b3856172a2d7d0400020e0e0e0e|@1110| 1165:O1|@1166 1166:C3,136|008028412c4d007f000c0003030c2b285a4d0073000c000302013b03033c021b28612c4d0061000e0e0c0003030c2b287a4d0053000c000302013b03033c021b28302c4d0041000e0e0c0003030c2b28394d0033000c000302013b03033c02202b28274d0121000e0e0c000303033c020f2b285f4d0110002d0e0e0e7e030003420e0e0e0e0e0e0e|@1167,I248,I229| 1167:S24|4c45585f28292e6973416c7068614e756d65726963283129 1168:S20|3a3d3c3e2b2a215e2f7c26257e2d3f60405c2423 1169:S19|756e6b6e6f776e206368617261637465722022 1170:O2|@1172,@1171 1171:O1|@1277 1172:C25,576|00822b352c362d373030304d0031020e0e0c00042c3b4d0126020e0e0e0c000329282e4d0219020e0e0c00036407d72f353036313732383339343a220c2306220d2307220e2308220f23094d03f1010e0e0c000b2d3b4d01e6010e0e0e0c000328412a4d04d9010e0e0c0003030c29285a4d04cb010c000302013b03033c021b28612a4d04b9010e0e0c0003030c29287a4d04ab010c000302013b031b2b282e4d059c010e0c0003294d0693013433220c0e0e7b050c00042814293b4d0280010e0c000303033b024b293c4d0771010e0e0c00032928084d0865010e0e0c00034d095c012a4d0a57010c0003292e4d024e010e0e0e0c00036603033c0216293c4d073c0102028c000e0c0003292502501e563b6464031956672c282e4d0520010e0c0003292b220c34220d7b050d000431393b2a0e0c00024d0b04012e4d05ff000c000329282e4d05f5000e0e0c0003292e4d05ea000e0e0e0c00034d0ce0002a69292e3c22113522123622133722143822153922163a221723062218230722192308221a23094d0db500221b0e0e7b0f11000e2b3b2b4d0ea5000e0e0c000450294d0f9a000e0e0e0c00023b2a4d108e000e0e0e0c0003640344294d0f80000e0c00023b2a4d1176000e0e0e0c00036403054d12690010294d1363000c0002030329020b2928084d0a54000e0c00032928274d1449000e0e0c00036402013b0304283e02284d1536002a4d1631000e0e0c0003294d1327000c00024d1720000e0c000203062935296402013c642b3b2b4d0e0b000c0004503b2705440e0e0e|@1174,@1134,I253,I229,@1123,I248,@344,@1165,I240,I239,@1168,I252,@1175,@1176,@1111,I255,I223,I234,I231,@52,I105,I24,@1177,@1173,I218| 1173:O1|@1272 1174:S20|4c45585f28292e70617273654964656e74283329 1175:S20|696e76616c6964206964656e7469666572202d20 1176:C1,16|00802b3856172a2d7d0400020e0e0e0e|@1110| 1177:O4|-1,@7291,@7292,@7290 1178:O2|@576,272 1179:O2|@1271,14 1180:O2|@1181,28 1181:S4|7468656e 1182:O2|@1183,15 1183:S2|6966 1184:O2|@1185,22 1185:S2|6f66 1186:O2|@1187,37 1187:S7|73686172696e67 1188:O2|@1189,35 1189:S6|737472756374 1190:O2|@1191,29 1191:S4|74797065 1192:O2|@1193,33 1193:S9|737472756374757265 1194:O2|35,43 1195:O2|42,48 1196:O2|@1197,31 1197:S4|77697468 1198:O2|@1199,24 1199:S4|6f70656e 1200:O2|@1201,13 1201:S3|66756e 1202:O2|@1203,3 1203:S3|616e64 1204:O2|@1205,12 1205:S2|666e 1206:O2|58,47 1207:O2|@1208,16 1208:S2|696e 1209:O2|@1210,10 1210:S3|656e64 1211:O2|61,45 1212:O2|@1213,8 1213:S2|646f 1214:O2|@1215,9 1215:S4|656c7365 1216:O2|@1217,40 1217:S6|657174797065 1218:O2|@1219,17 1219:S5|696e666978 1220:O2|@1221,7 1221:S8|6461746174797065 1222:O2|@1223,23 1223:S2|6f70 1224:O2|@1225,5 1225:S2|6173 1226:O2|@1227,2 1227:S7|61627374797065 1228:O2|@1229,34 1229:S9|7369676e6174757265 1230:O2|@1231,18 1231:S6|696e66697872 1232:O2|@1233,39 1233:S8|7769746874797065 1234:O2|@1235,30 1235:S3|76616c 1236:O2|@1237,26 1237:S5|7261697365 1238:O2|@1239,21 1239:S6|6e6f6e666978 1240:O2|124,44 1241:O2|@1242,38 1242:S7|66756e63746f72 1243:O2|@1244,11 1244:S9|657863657074696f6e 1245:O2|@1246,42 1246:S5|7768657265 1247:O2|@1248,36 1248:S3|736967 1249:O2|@1250,25 1250:S6|6f72656c7365 1251:O2|@1252,20 1252:S5|6c6f63616c 1253:O2|@1254,49 1254:S2|2d3e 1255:O2|@1256,32 1256:S5|7768696c65 1257:O2|@1258,50 1258:S2|3a3e 1259:O2|@1260,46 1260:S2|3d3e 1261:O2|@1262,27 1262:S3|726563 1263:O2|@1264,19 1264:S3|6c6574 1265:O2|@1266,41 1266:S7|696e636c756465 1267:O2|@1268,4 1268:S7|616e64616c736f 1269:O2|@1270,6 1270:S4|63617365 1271:S6|68616e646c65 1272:C6,88|00812c354d0050004d014c000e0c0003032e2c362d382a3b4d023c000e0c00032a3b4d0232000e0e0e0c00033b302c0e0e0c00020e4f031f00500002270502152c362d373b2e2c0e0e0c00020e4f04070030000266430e0e|@1274,-1,I229,I253,@1275,@1273| 1273:C10,160|008056032c3b4d0096000e0e0e0c000303033c0218294d0186000e0e0e0c00022d2a4d027a000e0e0e0c00036403054d036d0010292d4d0466000e0e0e0c00032964293b4d0558000e0c000303033b024829352a365647292c4d0643000c000364030529680102302f3b4d0532000e0e0e0c0003030e5643294d0123000c0002296502012f293c4d0715000e0e0c0003644f080b004100026565420e0e0e0e0e|@1276,I234,I15,I231,@52,I253,I229,I24,I107,@1273| 1274:S20|486173685461626c652e68617368537562283229 1275:C10,176|008056012c3b4d00a6000e0e0e0c000303033c0218293b4d0195000e0e0c00032d2a4d028a000e0e0e0c00036403054d037d00102c3c4d0476000e0e0e0c00032a2a4d016a000e0e0e0c00032965293b4d055c000e0c000303033b024c29352a365647292c4d0647000c000364030529680102342f3b4d0536000e0e0e0c000303125641293b4d0126000e0e0e0c0003296502012f293c4d0715000e0e0c0003644f080b004100026565420e0e0e0e0e|@1276,I234,I253,I231,@52,I106,I229,I24,I107,@1275| 1276:S27|486173685461626c652e6861736853756228322966696e64283129 1277:C6,96|00802814293b4d0056000e0e0e0c000303033b0247293c4d0145000e0e0c00032928084d0239000e0e0c00034d0330002a4d042b000c000329304d0022000e0e0e0c00036603033c0212293c4d0110000e0c0003292502501e543b6464420e0e|@1278,I229,I240,I239,@1168,I252| 1278:S27|436861722e636f6e7461696e732831296d61746368283129283129 1279:C9,208|00802b352c363b2e352f36303731383239333a342306220c2307220d2308220e23094d00aa000e0e0e0c000b5078764a56573b0e0e4f019700600002293b2a3b4d028c000e0c000303032902132a352b362a2c692a2a2505250526031e1e3b66664d036b000c00022e3b2b4d0461000e0e0c0004503b6405550e00ff6d293556574d054b000c0003033d2f393b2a0e0e0e0c00024d0638002a3c3435220c36220d37220e38220f3922103a221123062212230722132308221423094d0711000e0e0c000e650202020202022910646642|@1281,@1123,@1282,I229,@357,I255,I251,@1280,@1111| 1280:O1|@1291 1281:S21|4c45585f28292e7061727365537472696e67283129 1282:C20,992|00805604293b4d00d6030e0e0e0c00032928224d01c9030e0e0c0003031756272935293b28204d02b6030e0e0e0c0004502f6506d129404d01a5030e0e0c0003032e562729352a362b372c382d392e3a2f23063023073123083223094d0380030e0c000b505737294d0474033b6a641029285c4d0169030e0e0c000307d1562729352a362b372c382d392e3a2f23063023073123083223094d0344030e0c000b5644293b4d0038030e0c0003566729352a362b372c382d392e3a2f23063023073123083223094d0316030e0e0e0c000b28092c4d0509030e0e0c0003030c2b280d4d05fb020c000302013b03033c020c2b28204d01e9020e0e0c000307cf56874d06dc020202d3020e0c000229285c4d01cd020e0e0c00036403043b5006da5687569729393b2a0e0e0c000256c4293b4d00ac020e0c0003294d07a3024d089f020c00034d0998022a4d0a930202029f010c0003294d0b87024d0a83020c00034d0c7c022a6929303c220c35220d36220e37220f3822103922113a221223062213230722142308221523094d0d51020e0e0c000e501213000100feff293b4d003e020e0e0e0c000329285c4d0131020e0e0c0003654d0e27020c0002035b1213000100feff293b4d0015020202b0000e0e0c00032928224d0105020e0e0c0003654d0efb010c0002032c1213000100feff293b4d00e901020253000e0e0c0003293f4d01da010e0e0e0c0003654d0ecf010c000202013b02013b032e1213000100010029352a362b372c382d392e3a2f23063023073123083223094d03a1010e0e0c000b511eb05002023b50260a568729352a362b372c382d392e3a2f23063023073123083223094d0374010e0c000b50340e0e0e4f0f670191000264026d2b285e4d015a010e0e0e0c0003034e5684293b4d004a010e0e0e0c000356a729352a362b372c382d392e3a2f23063023073123083223094d0326010e0e0e0c000b285c220f69285e2a692d2a6929660e0e0e4f0f0b01c1000227040210285c34692c2a6929654f0ff700810002270606d7562729352a362b372c382d392e3a2f23063023073123083223094d03d2000e0e0e0c000b502a3f4d01c5000e0e0c0003030b5737294d04b7003b6a641028212b4d05ac000e0c0003030c2a287e4d059f000c000302013b03033c020c2a28204d018d000e0e0c000303102a2f6929640e0e4f0f7b0031000202705637564729393b2a0e0e0e0c00022e4d0763000c00024d105c002a4d0a57000c0003294d114f004d0a4b000c00034d1244002a69292e3c33353436220c37220d38220e39220f3a221023062211230722122308221323094d0d1b00020212000c000e50220d0e0e4f0f0b00b1000227086465420e0e0e|@1284,I253,I229,I255,@1123,@1285,I248,@1121,@1041,@1057,@1286,@344,@1287,@1288,@1111,I218,@1282,@1289,@1290,@1283| 1283:C1,16|00802b3856172a2d7d0400020e0e0e0e|@1110| 1284:S33|4c45585f28292e7061727365537472696e67283129676574537472696e67283129 1285:S9|456e644f664c696e65 1286:S21|756e65787065637465642063686172616374657220 1287:S11|20696e205c202e2e2e205c 1288:C1,16|00802b3856172a2d7d0400020e0e0e0e|@1110| 1289:S22|756e7072696e7461626c652063686172616374657220 1290:S16|20666f756e6420696e20737472696e67 1291:C2,16|00802b384d0008002a2d0e0e7d040002|@1110,@1292| 1292:S36|6e6f206d61746368696e672071756f746520666f756e64206f6e2074686973206c696e65 1293:O1|@1294 1294:C2,16|0089313b4d0008002d0e0e0e7e0c0003|@1295,I253| 1295:S24|4c45585f28292e6572726f724f6363757272656428313029 1296:O3|103,@373,@1297 1297:S22|537461746963206572726f7273202870617373203129 1298:O1|@1299 1299:C2,8|00804d000200420e|@1301,@1300| 1300:O6|0,0,0,0,0,0 1301:S34|434f4d50494c45525f424f445928292e62617365436f6d70696c6572283329283129 1302:O1|@1303 1303:C6,56|00813c28403b4d002e000e0e0e0c00044d0124002a694d021e002b694d0318002c694d0412002b69302d452a462b472705430e0e0e0e0e0e|@1305,I11,@1306,@1310,@1312,@1304| 1304:C1,16|00802b352c3656272d0e0e0e7e030003|@1314| 1305:S26|5554494c49544945535f28292e7365617263684c697374283229 1306:C3,32|00805607293b4d0016000e0e0e0c00033b2a0e0e0e4f01070030000266420e0e|@1308,I253,@1307| 1307:C3,56|00802b3b4d0030000e0c000303033b021f2b3529352a362e36290e0e0e4f011700410002502b2b695657300e7d070002420e0e0e0e0e0e0e|@1309,I229,@1307| 1308:S34|5554494c49544945535f28292e7365617263684c6973742832296170706c79283129 1309:S41|5554494c49544945535f28292e7365617263684c6973742832296170706c792831296170706c283129 1310:C3,48|008156072d2d695627293b4d0021000e0e0c00032b2a692d3b2b4d0112000e0e0e0c0004503b2705430e0e0e0e0e0e0e|@1311,I253,I255| 1311:S34|5554494c49544945535f28292e7365617263684c697374283229656e746572283229 1312:C4,72|00805607293b4d003e000e0e0e0c000329293b4d0131000e0e0c000303033b0224293529352a362c362b334d0219000e0e0c000303052a6801020829250526041e2f3b270466420e|@1313,I253,I229,I24| 1313:S35|5554494c49544945535f28292e7365617263684c6973742832296c6f6f6b7570283129 1314:S34|5554494c49544945535f28292e7365617263684c697374283229656e746572283129 1315:C2,40|00802b56180c0002293b4d001a000e0e0e0c0003030a2c56272d0e0e7d0400022964420e0e0e0e0e|@1316,I229| 1316:S24|4d6973632e6c6f6f6b757044656661756c74283229283129 1317:O31|@1319,@1952,@1953,@1960,@1962,@1963,@1964,@1965,@1955,@1968,@1970,@1971,@1972,@1973,@1974,@1976,@1977,@1978,@1981,@1984,@1985,@1986,@1989,@1990,@1409,@1991,@1992,@1993,@1969,@1994,@1318 1318:O3|@1386,@1403,@1993 1319:C20,600|00822b352c364d004e022f694d01480230694d024202312b2d6b21064d0338024521054d04310245544d052b0245292b46220c472f486c502a220c46120a0001001d00472e48120a0001001e00496c502b220c462d472a482b492f4a6c504d06f601220c694d07ef01302b220f31313012110001000f001212000100100012130001000400121400010011001215000100120012160001001300121700010014001218000100150012190001000500121a0001001600121b0001001700121c0001001800121d0001001900121e0001001a00121f0001001b0012200001001c0068173b4d087101220f6934342b6a22114d096401694d0a5f010c00023b221237221323062a3b4d0b4e010e0e0e0c00032a3b4d0b42010e0e0e0c00032928444d0c35010e0e0c00034d0d2c010e0c000203032902012a121500010001002a2a4d0e15010e0e0c00032706030e56f70e0e0e4f0f0301f0000206cc22123522133622143722153822163922173a2218230622192307221a2308221b23094d10d8000e0c000b2c3b22152e330e0e0e0c0005292b4d11c2000e0e0e0c0003221537221623062a3b4d0baf000c00032a3b4d0ba6000e0e0e0c00032928444d0c99000e0e0c00034d0d90000e0c000203032902012a2928394d0c7f000c00034d0d78000e0c000227050350221537221623062a3b4d0b63000c00032a3b4d0b5a000e0e0e0c00032928444d0c4d000e0e0c00034d0d44000e0c000203032902012a293b4d0c3400020228000e0c00034d0d28000e0c0002270502013b030f283b22164d1215000e0e0c000302013b2a3b692704270f440e0e0e0e0e|@1321,@1322,@1370,@1376,@1512,@1530,@1547,@1549,@1555,@1796,@1801,@1381,I253,I113,I218,@1099,@1803,@1335,@1804,@1320| 1320:O2|@1941,@1940 1321:S23|50415253455f44454328292e7061727365446563283329 1322:C10,440|00812b352c363b563729372a23062a3b4d00a4010e0c00032a3b4d009a010e0e0e0c00032928444d018d010e0e0c00034d0284010e0c000203032902012a29283e4d0173010c00032706030e3b4f036701300002293b696406d8563729372a23062a3b4d0051010e0e0c00032a3b4d0046010e0e0e0c00032928444d0139010e0e0c00034d0230010e0c000203032902012a2928344d011f010c0003270607d156374d0412010e0e0e0c000250563729372a23062a3b4d00fe000e0e0e0c00032a3b4d00f2000e0e0e0c00032928444d01e5000e0e0c00034d02dc000e0c000203032902012a29283e4d01cb000c00034d02c4000e0c0002270603435637292306293b4d00b1000e0e0c00032928444d01a5000e0e0c00034d029c000e0c00026403054d05910010293b28344d06880002027f000e0c0004503b503b65027156373b0e0e0e4f076f00400001566729372a23062a3b4d005f000c00032a3b4d0056000e0e0e0c00032928444d01490002023f000e0e0c00034d023c000e0c000203032902012a2928354d012b000c00032705030b294d041f000c000250020e28292a4d0812000e0e0e0c0003502a270402013b66430e0e0e|@1324,I253,I113,I218,@1325,@1102,@1353,I255,@1323,@1320| 1323:C5,56|007f3b0e0e4f002f00010002561128384d0124002b4d021f000c000464030b0e0e4f03130001000102013b2a2a692966410e0e0e0e0e0e0e|@1356,@1325,@1357,@1355,@1323| 1324:S37|50415253455f44454328292e70617273654465632833296765745479706556617273283229 1325:C21,360|0080570729372a23062a3b4d0059010e0e0c00032a3b4d004e010e0e0e0c00032928444d0141010e0e0c00034d0238010e0c000203032902012a29283e4d0127010c00034d0220010e0c00022706032457074d0312012a4d040d010e0e0c000350294d0502010e0e0e0c0002504d06f7006406cd570729352a362b372c382d392e3a2f23063023073123083223094d07d6000e0e0e0c000b4d08cc0057372b6a56340e0e0e0c00025638035e2a4d09b7000c0002293c4d0aae000e0e0e0c00036403442a4d09a0000e0c00023c2a4d0b96000e0e0e0c00036403054d0c8900102a4d0d83000c000203032a020b2a28094d0e74000e0c00032928274d0f69000e0e0c00036402013b02013b5648031057472c2a4d1051000e0e0c00036402013b0402004d1141001b0f272d3c2e2e4d1236000e0e0e0c00075029644d13290002021d000e0e0c00022d2a6956730c00025057674d0511000e0e0c000250292706420e0e0e0e0e0e0e|@1327,I253,I113,I218,@1328,@1320,@1102,@633,@1329,@1332,I223,I233,I231,@52,I105,I252,I24,@1339,@205,@1348,@1326| 1326:O1|@1351 1327:S50|50415253455f44454328292e7061727365446563283329676574547970655661727328322967657454797065566172283129 1328:S17|3c74797065206964656e7469666965723e 1329:O1|@1330 1330:C2,16|0089333b4d0008000e0c000329641f0a|@1331,I253| 1331:S13|4c45585f28292e696428313029 1332:C7,128|00802b3556182a2a4d0074000e0c00036403655617562729352a362b372c382d392e3a2f23063023073123083223094d014d000e0e0c000b2c4d0243004d033f000c00034d0438002a69292c3c30353136323733383439220c3a220d2306220e2307220f2308221023094d05120022150e0e0e7b0f09000e3b64420e0e0e0e0e|@1334,I24,@1335,@1338,@344,@1333,@1111| 1333:C1,16|00802b3856172a2d7d0400020e0e0e0e|@1110| 1334:S55|50415253455f44454328292e7061727365446563283329676574547970655661727328322967657454797065566172283129552d283129 1335:O1|@1336 1336:C1,16|00893b312c0e0e0e7d0c00020e0e0e0e|@1337| 1337:S17|4c45585f28292e6c696e656e6f28313029 1338:S23|2068617320616c7265616479206265656e20757365642e 1339:O1|@1340 1340:C11,336|00812b2309294d0046014d0142010e0e0e0c0003644d0237010c000203033c06cc2c4d032a010e0e0e0c0002293c4d041e010e0e0e0c00036403442c4d0310010e0c00023c2a4d0506010e0e0e0c00036403054d06f900102c4d07f3000c000203032c020b2c28094d08e4000e0c000329285f4d09d9000e0e0c00036402013b03033c02c32c4d03c6000e0e0e0c0002293c4d04ba000e0e0e0c00036403442c4d03ac000e0c00023c2a4d05a2000e0e0e0c00036403054d069500102c4d078f000c000203032c020b2c28094d0880000e0c00032928274d0975000e0e0c00036402013b03612c4d036500020259000e0e0c0002293d4d0456000e0e0e0c00036403412c4d0348000e0c00023d2a4d053e000e0e0e0c00036403054d063100102c4d072b000c000203032c020b2c404d081d000e0e0c000329285f4d0911002e7e0500033b02013b430e0e0e0e0e0e0e|@1341,@7295,@960,I218,I223,I233,I231,@52,I105,I252,I24| 1341:S21|50415253455f44454328292e69735765616b283229 1342:O2|@1347,@7281 1343:O2|@1344,@7281 1344:C2,32|00802b3556174d0016000e0e0e0c000303033c0202020202013b420e0e0e0e0e|@954,I251| 1345:O2|@1346,@7281 1346:C1,16|008056072928452e6a64420e0e0e0e0e|@954| 1347:C3,40|00802b3556174d001e000e0e0e0c000303062b3729640202020202054d01080010420e0e0e0e0e0e|@954,I251,@958| 1348:O1|@1349 1349:C6,112|00853c2840324d0066000e0e0e0c0004304d015b000c0002030330020b304d024e000e0e0e0c0002293e4d0342000e0e0e0c00033103033f02013b2a2a4d042f000c00033203033d02013b2a2a4d041f000c000329344d0416000e0e0e0c00033331452a4627081f060e0e0e0e0e0e0e|@1350,I11,I105,I152,I245,I242| 1350:S23|5354525543545f56414c5328292e6d616b655476283629 1351:C1,16|00802b352c363e2b2b6a65420e0e0e0e|@1352| 1352:S7|54797065566172 1353:O3|@7141,@228,@1354 1354:S31|417474656d707420746f20707573682074776f20706172656e746865736573 1355:O2|@1359,@1320 1356:S29|534b4950535f28292e6765744c697374283429666f724c697374283129 1357:O1|@1358 1358:C2,16|00802b283e4d0007002d0e0e7e030003|@1098,I113| 1359:C10,232|00822b372c23062a3b4d00db000c00032a3b4d00d2000e0e0e0c00032928444d01c5000e0e0c00034d02bc000e0c000203032902012a29334d01ac000e0c00032705030c2b4d039f000c0002503c02922b372c23062a3b4d008d000e0e0c00032a3b4d0082000e0e0e0c00032928444d0175000e0e0c00034d026c000e0c000203032902012a29324d045c000e0c00032705034d2d3b4d054e000e0e0e0c000303033c020b2d28454d063c000e0c000303054d073200104d082d002e4d0028000e0c00032964292d56370e0e0e0c0003502c4d0312000e0e0e0c0002503c6402013b440e0e0e0e0e|@1361,I253,I113,I218,@1102,@1099,I234,I231,@52,@1360| 1360:O69|7,@1363,@1227,@1203,@1268,@1225,@1270,@1221,@1213,@1215,@1210,@1244,@1205,@1201,@1271,@1183,@1208,@1219,@1231,@1264,@1252,@1239,@1185,@1223,@1199,@1250,@1237,@1262,@1181,@1191,@1235,@1197,@1256,@1193,@1229,@1189,@1248,@1187,@1242,@1233,@1217,@1266,@1246,35,124,61,@1260,58,42,@1254,@1258,95,40,41,91,93,44,59,123,125,46,@1364,@1328,@1365,@1366,@1367,@1368,@1369,@1362 1361:S19|534b4950535f28292e74657374666f72283329 1362:S14|756e6b6e6f776e2073796d626f6c 1363:S12|3c6964656e7469666965723e 1364:S3|2e2e2e 1365:S17|3c737472696e6720636f6e7374616e743e 1366:S18|3c696e746567657220636f6e7374616e743e 1367:S15|3c7265616c20636f6e7374616e743e 1368:S15|3c776f726420636f6e7374616e743e 1369:S15|3c6368617220636f6e7374616e743e 1370:C2,16|00824d000a0056172d6a440e0e0e0e0e|@1372,@1371| 1371:C9,144|00802b56180c0002294d0083000c00024d017c000e0c000203062935296402675617562729352a362b372c382d392e3a2f23063023073123083223094d0250000e0c000b2f4d0347004d0443000c00034d053c002a69292c3c30353136323733383439220c3a220d2306220e2307220f2308221023094d0616000e0e0e0c000e504d070b00270564420e0e0e0e0e0e0e|@1374,I105,I218,@1335,@1375,@344,@1373,@1111,@633| 1372:S39|50415253455f44454328292e706172736544656328332967656e54797065566172456e76283329 1373:C1,16|00802b3856172a2d7d0400020e0e0e0e|@1110| 1374:S42|50415253455f44454328292e706172736544656328332967656e54797065566172456e76283329283129 1375:S42|20686173206e6f74206265656e206465636c6172656420696e2074797065206465636c61726174696f6e 1376:C19,368|00850403003b2a4d0065010e0e0c00035029352a362b372c3b2a56790e0c0003220d4d014a01694d0245010e0e0c000256774d033a012b2b4d0434010e0c00042a352b362c372d382e392f3a3023063123073223083323094d0514010e0c000b2a2c2b4d0609010e0e0c000432323256e80c0004220e034c56c729372a23062a3b4d07eb000c00032a3b4d07e2000e0e0e0c00032928444d08d5000e0e0c00034d09cc000e0c000203032902012a29282d4d08bb000c00034d09b4000e0c0002270602013b03033c0202220f03064d0a9e00028556c729372a23062a3b4d078f000c00032a3b4d0786000e0e0e0c00032928444d0879000e0e0c00034d0970000e0c000203032902012a29282d4d085f000c00032705030b294d0b53000c000250020e283d2a4d0c46000e0e0e0c00035056d74d0d390022164d0e33002c4d0f2e000e0e0e0c00055056e722162a2e4d101d000e0e0c0004662d312b22134d110e0022130e0e0e7b061500050e0e0e0e|@1378,@1302,@1379,@1381,@1389,@1391,@1335,@1395,I253,I113,I218,@205,@1102,@1320,@1403,@1191,@1405,@1408,@1377| 1377:O1|@1510 1378:S37|50415253455f44454328292e70617273654465632833297479706542696e64696e67283629 1379:O1|@1380 1380:C2,16|00802b282d4d0007002d0e0e7e030003|@1098,I113| 1381:O1|@1382 1382:C2,16|00802b352c364d0006002d0e7e030003|@1384,@1383| 1383:O1|@1385 1384:S14|496e745365742e706c7573283129 1385:C2,16|00814d000a002d2d6a2964430e0e0e0e|@1387,@1386| 1386:C1,24|00802b56180c000203033c02072b56172c800002420e0e0e|@1388| 1387:S14|496e745365742e706c7573283229 1388:S17|496e745365742e706c7573283229283129 1389:O1|@1390 1390:C2,16|00802b3c4d0008002d0e0e0e7e030003|@1098,I113| 1391:O2|@1392,@1320 1392:C9,224|00822b372c23062a3b4d00d3000c00032a3b4d00ca000e0e0e0c00032928444d01bd000e0e0c00034d02b4000e0c000203032902012a29334d03a4000e0c00032705032d2b352c362d372e382f39303a3123063223073323083423094d0480000e0c000b2c4d0577000c0002502964026a4d066b002c56270e0c0003502b372c23062a3b4d0058000e0c00032a3b4d004e000e0e0e0c00032928444d0141000e0e0c00034d0238000e0c000203032902012a29324d0328000e0c00034d0220000e0c00022705030d2b4d0513000c0002501e5402023b504d070500440e0e0e0e|@1394,I253,I113,I218,@1099,@1329,@1102,@1393,I48| 1393:S10|4964656e746966696572 1394:S17|534b4950535f28292e6765746964283329 1395:O1|@1396 1396:C2,16|00823b3c0e4f00070010000264440e0e|@1398,@1397| 1397:C18,256|008056094d00f8000e0c00022c2a4d01ee000e0e0e0c00036403033b06ce56092c3c4d02da000e0e0e0c0003293b4d03ce000e0e0e0c000303033c02182a4d00be000e0e0e0c00022a2a4d04b2000e0e0e0c00036403054d05a500102a4d069f000c000203032a02182928084d0790000e0c00032b2a4d0886000e0e0e0c00036429282e4d0978000e0c00036603555608561756294d0a67002a4d0b62000e0e0e0c0003294d0c57004d0b53000c00034d0d4c002a69292e3c3135323633373438220c39220d3a220e2306220f230722102308221123094d0e250022150e0e7b0f09000e2b3c4d0f160002020e000e0e0e0c00030e4f100700010002420e0e0e|@1400,I223,I233,I107,I234,I231,@52,I105,I239,I252,I24,@1401,@344,@1402,@1399,@1111,I106,@1397| 1398:S28|5554494c49544945535f28292e636865636b466f72446f7473283329 1399:C1,16|00802b3856172a2d7d0400020e0e0e0e|@1110| 1400:S36|5554494c49544945535f28292e636865636b466f72446f7473283329636865636b283129 1401:S15|7175616c6966696564206e616d6520 1402:S13|20696c6c6567616c2068657265 1403:O1|@1404 1404:C3,72|00802b283a4d003f000c000303033c022f2b28344d0030000e0c000303033c021f2b3c4d0021000e0e0c000303033c020f2b283e4d0110002d0e0e0e7e030003420e0e0e0e0e0e0e|@1388,I229,I113| 1405:O2|@1406,@1320 1406:C7,192|00832b372c23062a3b4d00b3000c00032a3b4d00aa000e0e0e0c00032928444d019d000e0e0c00034d0294000e0c000203032902012a29344d0384000e0c00034d027c000e0c0002270503712c2c56270e0c0003502b372c23062a3b4d0060000e0c00032a3b4d0056000e0e0e0c00032928444d0149000e0e0c00034d0240000e0c000203032902012a3333694d042f000c00022a2a4d0326000e0e0e0c00034d021c000e0c00022706030e2b4d050f000c0002501e603b02013b02013b1f04|@1407,I253,I113,I218,@1099,@1381,@1102| 1407:S18|534b4950535f28292e736b69706f6e283429 1408:O3|@1410,@1503,@1409 1409:O3|@1386,@1505,@1508 1410:C9,88|00823b2e4d005000694d014b000c00020e4f02430010000228314d033a00304d0435000e0e0c000403162f2f2f2e0e0e0e0c00042a2a694d051d002f7d0800022f4d0313004d060f00314d070a000e0e0e0c000550296544|@1412,@1413,@1381,@1415,@1425,@1355,@1500,@1411,@1405| 1411:S11|456e64206f662074797065 1412:S25|50415253455f5459504528292e706172736554797065283329 1413:O1|@1414 1414:C2,16|00802b28314d0007002d0e0e7e030003|@1098,I113| 1415:C8,72|00803b2c4d004000694d013b000c0002294f023300200002563828304d0328002b4d0423000c00046403193b0e4f0517003000012b2a6929664d060b002f0e0e7d0600022966420e|@1417,@1418,@1381,@1420,@1425,@1355,@1493,@1416| 1416:O1|@1495 1417:S37|50415253455f5459504528292e7061727365547970652833297475706c6554797065283129 1418:O1|@1419 1419:C2,16|00802b28304d0007002d0e0e7e030003|@1098,I113| 1420:C29,1032|0080570829372a23062a3b4d00f9030e0e0c00032a3b4d00ee030e0e0e0c00032928444d01e1030e0e0c00034d02d8030e0c000203032902012a2928344d01c7030c0003270603763b57184d03b9030e0e0c00023b4f04af03200002573829372a23062a3b4d009f030c00032a3b4d0096030e0e0e0c00032928444d0189030e0e0c00034d0280030e0c000203032902012a2928354d016f030c00032705030b294d0363030c000250020e28292a4d0556030e0e0e0c0003502a270406d6570829372a23062a3b4d003d030e0e0c00032a3b4d0032030e0e0e0c00032928444d0125030e0e0c00034d021c030e0c000203032902012a29283a4d010b030c0003270603c357084d03fe020e0e0e0c0002500402005718283b4d06ec022b4d07e7020c000464030a294d08dc02080200029257183b3b4f09cf02300001575829372a23062a3b4d00bf020c00032a3b4d00b6020e0e0e0c00032928444d01a9020e0e0c00034d02a0020e0c000203032902012a29283b4d018f020c00032705030b294d0383020c0002500212287d2a4d0576020202d1010e0e0e0c0003504d0a67025778692b2a4d0b5e020e0e0e0c0003293c4d0c52020e0e0e0c0003312a453b462609296406cf570829372a23062a3b4d0034020e0c00032a3b4d002a020e0e0e0c00032928444d011d020e0e0c00034d0214020e0c000203032902012a29283e4d0103020c0003270603965707571829352a362b372c382d392e3a2f23063023073123083223094d0ddc010e0c000b642a0e0e0e0c0002293b69573829372a23062a3b4d00c0010e0c00032a3b4d00b6010e0e0e0c00032928444d01a9010e0e0c00034d02a0010e0c000203032902012a29283e4d018f010c00032705030b294d0383010c00025002124d0e79012a4d0574010202cf000e0c0003502a270402c5570829372a23062a3b4d0059010e0e0c00032a3b4d004e010e0e0e0c00032928444d0141010e0e0c00034d0238010e0c000203032902012a293c4d0128010e0c00032706035f57084d0f1a012d2b4d1014010e0c00040402004d1109014d1205010e0e0c00024d13fc000e0c000203193c28404d11ef004d14eb000c00042a4d15e300452a46510208294d16d800080200293b2c2b6a4d17cc000e0c0002293b692705022057084d18bb002a4d05b6000e0e0e0c000350294d03aa000e0e0e0c0002503b64571829372a23062a3b4d0094000e0c00032a3b4d008a000e0e0e0c00032928444d017d000e0e0c00034d0274000e0c000203032902012a293c4d0164000e0c00032706030f3b2a0e0e0e4f195300200002640245293b4d1a47000c000303064d1b3e0002342936293b4d1a34000e0c000303062a352964021f2a3557384d1820002a4d051b000c000350294d0312000e0e0e0c0002502a656464420e0e0e0e0e0e|@1422,I253,I113,I218,@1102,@1423,@1320,@1425,@1355,@1428,@1429,@1454,@1457,@1467,@1329,@1328,@1389,@1391,@1480,@1482,@1485,I11,-1,@1488,@1489,@1363,@1421,I229,@633| 1421:C14,216|0080580829352a362b372c382d392e3a2f23063023073123083223094d00b8000e0c000b0402004d01ad004d02a9000e0e0c00024d03a0000e0c000203193c28404d0193004d048f000c00042a4d058700452a46510208294d067c00080200292f2c2b6a4d0770000e0c000258584d0866000e0e0e0c000250585829372a23062a3b4d0952000e0e0e0c00032a3b4d0946000e0e0e0c00032928444d0a39000e0e0c00034d0b30000e0c000203032902012a293c4d0a20000e0c00032706030e293b690e0e4f0c0f005100020201292705420e0e0e0e0e0e|@1492,@1329,@1480,@1482,@1485,I11,-1,@1488,@1489,@1102,I253,I113,I218,@1421| 1422:S49|50415253455f5459504528292e7061727365547970652833297475706c6554797065283129626173696354797065283129 1423:C13,192|0080580829372a23062a3b4d00b1000e0e0c00032a3b4d00a6000e0e0e0c00032928444d0199000e0e0c00034d0290000e0c000203032902012a294d0381004d047d000e0e0c0003270603235607120200040001002a2a69654d0563000c0002581858272b2b2b58650c000466022358084d064b002a4d0746000e0e0e0c000350294d083a000e0e0e0c0002504d092f0064581828384d0326002b4d0a21000e0e0c00046403103b0e4f0b13001100022a2a6929650203293b6964420e0e0e0e|@1424,I253,I113,I218,@1403,@1099,@1381,@1328,@1320,@1102,@633,@1355,@1423| 1424:S69|50415253455f5459504528292e7061727365547970652833297475706c655479706528312962617369635479706528312974795365712d70726f636573734c697374283129 1425:O1|@1426 1426:C1,8|00803b420e0e0e0e|@1427| 1427:S16|496e745365742e656d7074792d283129 1428:O2|@603,0 1429:C5,56|007f3b0e0e4f002f00010002561328384d0124002b4d021f000c000464030b0e0e4f03130001000102013b2a2a692966410e0e0e0e0e0e0e|@1356,@1430,@1425,@1355,@1429| 1430:C10,184|00805607294d00af0069644d01a9000e0e0c000258182a2a4d029c000e0c0003583829372a23062a3b4d038b000c00032a3b4d0382000e0e0e0c00032928444d0475000e0e0c00034d056c000e0c000203032902012a29282f4d045b000c00032705030b294d064f000c000250020e283a2a4d0742000e0e0e0c0003505647120600040002002a2a69654d012a000e0e0e0c0002585858672b2b2b58a50c00040402002f2b2b4d080e000e0e0e0c000450292709420e0e0e|@1432,@1433,@1381,@1435,I253,I113,I218,@1102,@1320,@1431| 1431:O1|@1443 1432:S60|50415253455f5459504528292e7061727365547970652833297475706c655479706528312962617369635479706528312974795365712d6c2d283129 1433:O1|@1434 1434:C2,16|00802b282f4d0007002d0e0e7e030003|@1098,I113| 1435:O2|@1436,@1391 1436:C16,296|00812b372c23062a3b4d001b010c00032a3b4d0012010e0e0e0c00032928444d0105010e0e0c00034d02fc000e0c000203032902012a2928404d01eb000c0003270503d12b352c362d372e382f39303a3123063223073323083423094d03c8000e0c000b294d04bf000c00023b2a4d05b6000e0e0e0c00036403054d06a90010294d07a3000c0002030329020b2928084d0894000e0c00032d4d098b000c00025029287e4d0a80000e0c000303033c020b2928304d0a70000e0c000303512d352e362f3730383139323a332306342307220c2308220d23094d0b4c000e0c000b4d0c44002a3c3135323633373438220c39220d3a220e2306220f230722102308221123094d0d20000e0c000e5102023b502a65020f4d0e0f002d2d56372e0e7b05040004430e0e0e|@1438,I253,I113,I218,@1329,I223,I231,@52,I105,I252,@1102,I24,@1335,@1439,@1111,@1437| 1437:O1|@1442 1438:S20|534b4950535f28292e6765744c6162656c283229 1439:O1|@1440 1440:C2,16|00802b384d0008002a2d0e0e7d040002|@1110,@1441| 1441:S25|4c6162656c73206d75737420626520312c322c332c2e2e2e2e 1442:C3,32|00802b28304d0017000c000303033c020b2b3c4d0109002d7e030003420e0e0e|@1388,I229,I113| 1443:C2,24|00822d4d0011000e0e0c00022c2a452e4664440e0e0e0e0e|@1445,@1444| 1444:O1|@1446 1445:S27|545950455f5452454528292e6d6b4c6162656c456e747279283329 1446:C12,160|00802b4d0099000e0e0c0002293c4d018e000e0e0e0c00036403033c024a2b4d007d000e0e0c00023b2a4d0272000e0e0e0c00036403054d036500102b4d045f000c000203032b020b2b28084d0550000e0c00032928304d0645000e0e0c0003644d073b000c000203032b022f2b4d002e000e0e0e0c0002293c4d0822000e0e0e0c00032d3c2b4d0915000e0e0c0004654d0a0b002c0e0e0e800002420e0e0e|@1448,I223,I232,I231,@52,I105,I252,I24,I218,I107,@1447,@1444| 1447:O1|@1449 1448:S40|545950455f5452454528292e6d6b4c6162656c456e74727928332973747269705a65726f73283129 1449:C9,128|00822d4d0079000e0e0c00022d4d016f000c0002030c2d3b4d0264000e0c000302013b03032d02054d035400102d4d014e000e0e0e0c0002030c2d3b4d0240000e0c000302013b03032d02054d033000102a2a4d0429000e0e0c0003292d4d051e000e0e0e0c00036403054d06110010302b2b4d070900310e0e0e7b05080004|@1451,I223,I105,I231,@52,I239,I249,@52,@1450| 1450:O1|@1452 1451:S19|537472696e672e737562737472696e67283329 1452:C14,208|00822d4d00c9000e0e0c00022d3b4d01be000e0e0e0c0003030c2c2a4d02b0000e0c000302013b03032e029e2c0a01007a0080002c28104d0395000e0e0c0003293c4d048a000e0e0e0c00032928084d057d000e0e0c000378760f3b2c28413b4d066c000e0c0004050800ff6d4d075f001029314d0858000e0c0003502808324d034c000e0c0003332a2c2808220c4d093d000e0e0c0006502a4d0a32000e0e0e0c0002502a270502204d0b2200021a2d28084d0319000e0e0c00032f2a4d0c0e000e0e0e0c0003296564440e0e0e0e|@1453,I223,I229,I251,I239,I240,I241,I11,@78,I151,I198,I47,I48,I252| 1453:S33|4c696272617279537570706f72742e756e73616665537562737472696e67283329 1454:C4,88|00805607561729352a362b372c382d392e3a2f23063023073123083223094d0036000e0e0e0c000b4d012c002f69292b3c2f353036313732383339343a220c2306220d2307220e2308220f23094d02070022137b0f07000e|@1456,@1335,@1455,@1111| 1455:C1,16|00802b3856172a2d7d0400020e0e0e0e|@1110| 1456:S58|50415253455f5459504528292e7061727365547970652833297475706c655479706528312962617369635479706528312974795365712d283129 1457:O1|@1458 1458:C4,56|00812c3b4d0030000e0c000303033b02212c352d363b2b352b304d011a000e0e0e0c0003292b2f0e0e4f020b007000042705430e0e0e0e0e|@1460,I229,@1457,@1459| 1459:C8,128|00822d3b4d0078000e0c000303052b3b69026c2d3529352f362f2b4d0161000e0e0c0003293b4d0056000e0e0e0c000303254d024a00314d0345000e0e0c0003294d043b004d0337000c00036456570e0e0c00025002023b50293b4d0521000e0e0c000303072f3269296402102a31310e4f060b006100042d2a692965270444|@1462,I229,@1463,@1466,@344,@1461,I232,@1459| 1460:S25|545950455f5452454528292e736f72744c6162656c73283229 1461:S25|292061707065617273206d6f7265207468616e206f6e63652e 1462:S33|545950455f5452454528292e736f72744c6162656c73283229656e746572283329 1463:O1|@1464 1464:C7,112|00812c4d0069000e0e0c00022c4d005f000c00022a2a4d0156000e0e0e0c00036503242c2c4d0247000c000303033b02142c2c4d0339000e0e0c000303064d042e0002013c02272c4d0024000e0c00022c4d001b000c00022a2a4d0512000e0e0e0c00036503064d04050002013c430e|@1465,I223,I113,I24,I27,-1,I234| 1465:S28|545950455f5452454528292e636f6d706172654c6162656c73283229 1466:S7|4c6162656c2028 1467:O1|@1468 1468:C9,136|00812b2d3b6a4d007e000e0e0e0c00022c030329026c0402004d016b001b0f273b3b3b2e4d0260000e0c00075029644d0355000e0e0c0002294d044b000c0002030e294d0541000e0e0c00023c6402013b032c294d0430000e0c0002030e294d0525000e0e0c0002296402054d06180010292c4d0711000e0e0c00036402013b2a6564430e0e0e0e|@1470,@1471,@205,@1348,@1326,@1474,@1476,@958,@1469| 1469:O1|@1478 1470:S25|545950455f5452454528292e6d6b4c6162656c6c6564283229 1471:O1|@1472 1472:C2,24|00802b352c362d374d000c002c2c2c6b66420e0e0e0e0e0e|@1473,-2| 1473:S12|4c6162656c6c656454797065 1474:O1|@1475 1475:C2,16|00803e2c354d0007002d0e0e7e030003|@1352,I229| 1476:O1|@1477 1477:C1,16|00802b362c372a2a6965420e0e0e0e0e|@1352| 1478:C2,24|00812c35293b2e4d000d000e0e0c0004503b64430e0e0e0e|@1479,I255| 1479:S27|5354525543545f56414c5328292e747653657456616c7565283229 1480:O6|@1481,0,0,0,@524,@210 1481:S9|756e646566696e6564 1482:O1|@1483 1483:C1,8|00802b3a2964420e|@1484| 1484:S29|5354525543545f56414c5328292e74634964656e746966696572283129 1485:O1|@1486 1486:C2,16|00803c2c354d0007002d0e0e7e030003|@1487,I229| 1487:S26|5354525543545f56414c5328292e6973556e7365744964283129 1488:O2|0,@1480 1489:O1|@1490 1490:C2,24|00802b352c362d374d000c002c2c2c6b66420e0e0e0e0e0e|@1491,-3| 1491:S16|54797065436f6e737472756374696f6e 1492:S64|50415253455f5459504528292e7061727365547970652833297475706c6554797065283129626173696354797065283129636f6e7374727563746f7273283129 1493:C5,56|007f56030e4f002f00010002571828304d0124002b4d021f000c000464030b0e0e4f03130001000102013b2a2a692966410e0e0e0e0e0e0e|@1494,@1420,@1425,@1355,@1493| 1494:S49|50415253455f5459504528292e7061727365547970652833297475706c6554797065283129706172736552657374283129 1495:C3,32|00804d001a002c3c2b0c00033c2a3b6a654d010b002c0e0e0e8000020e0e0e0e|@1497,@1496,@1471| 1496:O1|@1498 1497:S28|545950455f5452454528292e6d6b50726f6475637454797065283129 1498:C6,72|00812c3b4d0040000e0c000303033b02312c352d362d4d012e004d022a000e0e0e0c0003292c692f3c4d031b000c00032c2a4d0412000e0e0e0c00032b2a69292707430e0e0e0e0e|@1499,I229,-1,@355,I106,@1496| 1499:S26|545950455f5452454528292e6d6170746f5265636f7264283229 1500:O1|@1501 1501:C1,16|00802b352c363c2b2b6a65420e0e0e0e|@1502| 1502:S12|46756e6374696f6e54797065 1503:O3|@1386,@1505,@1504 1504:O1|@1507 1505:O1|@1506 1506:C2,16|00802b28384d0007002d0e0e7e030003|@1098,I113| 1507:C2,16|00802b28354d0007002d0e0e7e030003|@1098,I113| 1508:O1|@1509 1509:C2,16|00802b283b4d0007002d0e0e7e030003|@1098,I113| 1510:C1,16|00832e2d2d306b29641f040e0e0e0e0e|@1511| 1511:S29|50415253455f5452454528292e6d6b5479706542696e64696e67283429 1512:C24,552|008256074d0020020e0c00020403003b2a4d0113020c000350293c2a565b0e0e0e0c00032f4d02ff01694d03fa010e0e0e0c000256574d04ee012b2b4d05e8010e0c00042a352b362c372d382e392f3a3023063123073223083323094d06c8010e0c000b2a2c2b4d07bd010e0e0c0004569729372a23062a3b4d08ab010c00032a3b4d08a2010e0e0e0c00032928444d0995010e0e0c00034d0a8c010e0c000203032902012a29282d4d097b010c00032705030a294d006f010c0002020a283d2a4d0b63010c000356b729372a23062a3b4d0853010c00032a3b4d084a010e0e0e0c00032928444d093d010e0e0c00034d0a34010e0c000203032902012a2928074d0923010c000327060384303b4d0c16010e0e0e0c000303033b024c56b756c729352a362b372c382d392e3a2f23063023073123083223094d06eb000c000b4d0de4002a3c2e352f36303731383239333a342306220c2307220d2308220e23094d0ec3000c000e6656c74d00b9000e0e0c000256d74d04ae0022112b4d05a7000c0004312a4d0f9e0022137e140003220d4d109200694d038d000e0e0c0002294d11830069644d037d000e0e0c0002221033333122132e121300010004000e0e0c000756d73e4d125d002b4d1358000e0c000464031c220f4d104b00694d0346000e0e0e0c00023b4f143b00e000016502013b56e728274d122c002b4d1327000c000464030c3b0e4f151b00e000016402013b2b2b69292b4d160b0022140e7e1500030e0e0e0e|@1514,@1102,@1302,@1379,@1381,@1389,@1391,@1335,@1395,I253,I113,I218,@1320,I229,@1515,@1111,@1518,@1521,@1523,@1425,@1355,@1525,@1527,@1513| 1513:O1|@1528 1514:S43|50415253455f44454328292e706172736544656328332964617461747970654465634f725265706c283329 1515:O1|@1516 1516:C2,16|00802b384d0008002a2d0e0e7d040002|@1110,@1517| 1517:S52|4461746174797065207265706c69636174696f6e206d757374206e6f7420636f6e7461696e2074797065207661726961626c6573 1518:O1|@1519 1519:C2,16|00814d000a002d2d6a430e0e0e0e0e0e|@1520,-4| 1520:S37|50415253455f5452454528292e6d6b44617461747970655265706c69636174696f6e283229 1521:O1|@1522 1522:C2,16|00802b28274d0007002d0e0e7e030003|@1098,I113| 1523:O1|@1524 1524:C2,16|00802b3e4d0008002d0e0e0e7e030003|@1098,I113| 1525:C6,80|007f1201000100f1ff294d00420069644d013c000e0c000256185629292b2d57690c000457473e4d0225002b4d0320000e0c000464030b0e0e4f04130031000102013b2a2a69292706410e0e0e0e0e0e|@1526,@1523,@1381,@1425,@1355,@1525| 1526:S37|50415253455f44454328292e7061727365446563283329616e6442696e64696e6773283229 1527:C6,80|007f5607294d00470069644d0141000e0e0c0002295628355638365648373b3b57780e0e0e0c000757273e4d0221002b4d031c000e0c000464030b0e0e4f040f0011000102013b2a2a69292704410e0e|@1526,@1523,@1381,@1425,@1355,@1527| 1528:C1,8|00813e3b2e2e6b43|@1529| 1529:S37|50415253455f5452454528292e6d6b44617461747970654465636c61726174696f6e283229 1530:C6,88|0085560a56172a2e4d004c002c4d0147000c000532353336343756690e0c00043b300e0e0e4f022f005000023c28404d0325004d0421000e0e0c00043c28403b4d0414000e0c0004220c2b2d22102d68052927091f060e0e|@1532,@1191,@1405,@1531,@1480,I11| 1531:C14,312|0080570729372a23062a3b4d0029010e0e0c00032a3b4d001e010e0e0e0c00032928444d0111010e0e0c00034d0208010e0c000203032902012a2928174d01f7000c000329030b57774d03eb000c000202013b2a03033c0202568c5798220c2a69644d04d2000e0e0e0c000257a756b829352a362b372d2f4d05bc00324d06b7000c000804020057e729372a23062a3b4d00a4000e0c00032a3b4d009a000e0e0e0c00032928444d018d000e0e0c00034d0284000e0c000203032902012a2928164d0173000c00032706033957e74d0366000e0e0e0c00025022104d075900694d0454000e0c000257f71211000100fbff2b2b2b4d0840000e0c00042d2f452a4626050209292b454d092c0046502957f7282c4d0a21002b4d0b1c000e0c000464030b22114f0c0f00f1000202013b2a2a69292711420e0e|@1534,I253,I113,I218,@1102,@1381,@1437,@1535,@1533,@1408,@205,@1425,@1355,@1531| 1532:S38|50415253455f44454328292e7061727365446563283329646174617479706542696e64283629 1533:O1|@1546 1534:S48|50415253455f44454328292e7061727365446563283329646174617479706542696e64283629636f6e73747273283129 1535:O1|@1536 1536:C14,288|00862c2e304d0017010c00042f353036313732383339343a220c2306220d2307220e2308220f23094d01f4000e0c000b2a312b4d02e9000e0e0c00042b340e0e0e0c0002294d03d7000c00024d04d0000e0c000203332935294d05c3000c0002030e294d06b9000e0e0c00023c64021629354d07aa004d08a6000e0e0e0c000303033c02013b6402013b29030d304d048e000e0e0e0c000202013b037733353436220c37220d38220e39220f3a221023062211230722122308221323094d015f000c000b28282f4d0955000e0e0c0003294d0a4b004d0947000c00034d0b40002a69292d3b22113522123622133722143822153922163a221723062218230722192308221a23094d0c15000e0e0c000e270402013b2e27061f070e0e0e0e0e0e|@1538,@1391,@1335,@1395,I105,I218,@1539,@1542,-1,I229,@344,@1544,@1537,@1111| 1537:C1,16|00802b3856172a2d7d0400020e0e0e0e|@1545| 1538:S42|50415253455f44454328292e706172736544656328332967657453686f72744e6f6e496e666978283729 1539:O1|@1540 1540:C2,16|00803b2c354d0007002d0e0e7e030003|@1541,I229| 1541:S5|496e666978 1542:O1|@1543 1543:C1,8|00802b36420e0e0e|@1541| 1544:S46|292068617320696e666978207374617475732062757420776173206e6f74207072656365646564206279206f702e 1545:S27|4c45585f28292e7761726e696e674d657373616765283329283129 1546:C2,16|00802b282c4d0007002d0e0e7e030003|@1098,I113| 1547:C13,216|00820403003b2a4d00cd000e0e0c000350293c2a56490e0e0e0c00032e4d01b700694d02b2000e0e0e0c000256484d03a6002b2b4d04a0000e0c00042a352b362c372d382e392f3a3023063123073223083323094d0580000e0c000b2a2c2b4d0675000e0e0c0004568829372a23062a3b4d0763000c00032a3b4d075a000e0e0e0c00032928444d084d000e0e0c00034d0944000e0c000203032902012a29282d4d0833000c00032705030a294d0a27000c0002020a283d2a4d0b1b000c0003220e323230221122111211000100010022120e7b080f0007|@1548,@1302,@1379,@1381,@1389,@1391,@1335,@1395,I253,I113,I218,@1102,@1320| 1548:S41|50415253455f44454328292e7061727365446563283329646174617479706542696e64696e67283329 1549:C4,56|00810403003b2a4d002d000e0e0c00035029352a362b374d011d002b56676a4d0215002a2c6a312e452d462c472a482706430e0e0e0e0e0e|@1551,@1302,@1552,@1550| 1550:C3,48|00802b56180c0002294d0023000c00024d011c000e0c000203062935296402082c56272d7d04000264420e0e0e0e0e0e|@1554,I105,I218| 1551:S40|50415253455f44454328292e70617273654465632833296d616b6554797065566172456e76283229 1552:C12,160|00802b4d0099000e0e0c0002293c4d018e000e0e0e0c00036403442b4d0080000e0c00023c2a4d0276000e0e0e0c00036403054d036900102b4d0463000c000203032b020b2b28094d0554000e0c00032928274d0649000e0e0c00036402013b56182d2a4d0738000e0c00030402004d082d001b0f272e3c2e2e4d0922000e0e0e0c00075029644d0a15000e0e0c00022f2a6956570c00022a2705420e0e0e0e|@1553,I223,I233,I231,@52,I105,I252,I24,@1339,@205,@1348,@1326| 1553:S50|50415253455f44454328292e70617273654465632833296d616b6554797065566172456e762832296c6f6f6b757054283129 1554:S43|50415253455f44454328292e70617273654465632833296d616b6554797065566172456e76283229283129 1555:C71,2248|00832e354d00c0082e2c120500010016006b4d01b2082f694d02ac082a1206000100140012070001000e0012080001000f0012090001001200220c120b000100150068084d0380083112070001000a0012080001000b0012090001000c002f120b0001000d00120c0001000e00120d0001000f00120e0001001000120f00010011001210000100120012110001001300220f220e680f3203033c024631373223062a3b4d0421080e0e0c00032a3b4d0416080e0e0e0c00032928444d0509080e0e0c00034d0600080e0c000203032902012a294d07f1074d08ed070e0e0c0003270507d531373223062a3b4d04d9070e0e0c00032a3b4d04ce070e0e0e0c00032928444d05c1070e0e0c00034d06b8070e0c000203032902012a29281e4d09a7070c0003038a220d4d0a9c070e0c00020404003b2a56e80e0e0c00035029352a372b380404003b2a121300010002000e0e0c00035029352a362b372218352219364d0b6307302d6a2b2b2b6a2f2f2f6a3c2a121b00010001000c00033b221c4d0c4507694d0d40070e0c00020e160e0036071c0000000002333269220f220f692b2b2b4d0f210722220e0e7b0523000429280d4d091107020255060e0e0c0003037e220d4d0a00070e0c00020404003b2a56e80e0e0c00035029352a372b380404003b2a121300010002000e0e0c00035029352a362b372218352219364d10c706302d6a2b2b2b6a2f2f2f6a3c2a121b00010001000c00033b3b0e0e0e161100a6061c000000000134336922102210692b2b2b4d12910622230e0e7b0524000429281d4d0981060e0e0c00030322220d4d0a74060e0c0002503b0e0e0e4f136706a00001644d145f06220d0e7d1000022928074d0951060e0e0c0003030e3b2210220e56db220f7b05100004293d4d0936060e0e0e0c000307d5220d4d0a28060e0c000256bd220e2a69644d0d19060e0e0c00023b4f150f06c0000128274d16060622134d1700060e0c0004031922104d18f405694d0def050c00023b4f19e705f000016502013b221237221323062a3b4d04d3050c00032a3b4d04ca050e0e0e0c00032928444d05bd050e0e0c00034d06b4050e0c000203032902012a29281f4d05a3050c00032705030e22124d0a96050e0e0e0c0002020e4d1a8a0522134d1b84050e0c000322124d1c7a05694d0d75050e0e0c000222162a22110c0003221537221623062a3b4d045b05020263000c00032a3b4d044e050e0e0e0c00032928444d0541050e0e0c00034d0638050e0c000203032902012a29404d0528050e0c00032705030f22154d0a1a050e0e0e0c000250020e4d1d0d0522164d1b07050c0003502d2d2b4d1efc0422170e7b0518000429280b4d09ed040e0e0c00030322220d4d0ae0040e0c00023b3b0e0e0e4f1fd304c00001644d20cb04220f0e7d1200022928144d09bd040e0e0c000307db220d4d0ab0040e0c00020403002211362212370403003b2a4d219a040e0e0e0c00035029362a374d228b042e2b6a2f2c452a462e47502f3530363137321217000100090022192a69644d0d69040e0e0c00022a2a22170e0c0003221b37221c23062a3b4d044f040c00032a3b4d0446040e0e0e0c00032928444d0539040e0e0c00034d0630040e0c000203032902012a2928104d051f040c00032705030e221b4d0a12040e0e0e0c0002020e4d230604221c4d1b00040e0c00030403004d24f503221a326a2a2a4531463047502a221e4d1ce203694d0ddd0302027d000e0e0c00022a2a221d0e0c0003222137222223062a3b4d04bf030c00032a3b4d04b6030e0e0e0c00032928444d05a9030e0e0c00034d06a0030e0c000203032902012a29404d0590030e0c00032705030f22214d0a82030e0e0e0c000250020e4d1d750322224d1b6f030c0003502f2a3c4d25640322230e7b052400042928114d2655030e0e0c000303182928124d2647030c0003030c2928154d093b030c000307d0220d4d0a30030e0c00022a28154d0925030e0e0c000303064d271a0306dc220e37220f23062a3b4d040b030c00032a3b4d0402030e0e0e0c00032928444d05f5020e0e0c00034d06ec020e0c000203032902012a2928404d05db020c0003270507cc220e35220f3622103722113822123922133a221423062215230722162308221723094d28ae020e0e0e0c000b294d29a3024d2a9f020c0003294d2b97020c00024d0690020e0c000203062935296402054d2c800210293b4d2d79020e0e0c000303033c020f2928094d2e6802020210010e0c000303ae22113522123622133722143822153922163a221723062218230722192308221a0202bb0023094d2f34020e0c000b22123522133622143722153822163922173a2218230622192307221a2308221b23094d280a02020267000e0e0e0c000b4d30fc012a4d31f7010c0003294d32ef014d31eb010c00034d33e4012a69292e3c221935221a36221b37221c38221d39221e3a221f23062220230722212308222223094d34b9010e0e0c000e260602023b5022114d0aa8010e0c000250296602013b2b28114d0997010c0003030c294d358d010e0e0c000202064d3682012a69644d377b01220f4d38750122124d396f010c00053b3b0e0e0e4f3a6301e00002292d4d3b5a0122137e15000328184d164e01220f4d1748010e0c000403823b220e37220f23062a3b4d0434010e0c00032a3b4d042a010e0e0e0c00032928444d051d010e0e0c00034d0614010e0c000203032902012a294d3705014d0801010e0e0c0003270503143b4f3cf300b000024d3dec00220e0e0e7d1100024d3ee000220f4d1bda000e0e0e0c000350220e4d0acd000e0e0c0002504d3fc3006402044d3fbc00270502b40404003b2a56880e0e0c00035029352a372b380404003b2a56c80e0e0e0c00035029352a372211352212362a2a306a22123522133622143722153822163922173a2218230622192307221a2308221b23094d2f63000c000b2a2213220d0c00033c28404d4051004d414d000e0e0c00043c28404d4241004d413d000e0e0c00044d4334004d4430002b2d6b292d2f4d4526000e0e0e0c0004293b6934346922102210692b2b2b4d0f0e00221d0e0e0e7b051e000427051f04|@1557,@1558,@1562,@1585,@1643,I253,I113,I218,@1559,@1099,I229,@1102,@1718,@1523,@1381,@1720,@1722,@1725,@1726,@1734,@1737,@1738,@1741,@1425,@1355,@1742,@1744,@1197,@1320,@1745,@1210,@1747,@1750,@1753,@1302,@1756,@1208,@1757,@1664,I230,@210,@1329,@1759,@1773,I105,@1568,I234,I233,@1335,@1778,@344,@1779,@1780,@1111,@1781,-1,@1667,@1783,@1405,@1784,@1786,@1789,@1790,@1363,@1618,@633,I11,@1581,-8,@1793,@1556| 1556:O1|@1794 1557:S29|50415253455f44454328292e7061727365446563283329646563283429 1558:C9,256|0081560729372a23062a3b4d00f1000e0e0c00032a3b4d00e6000e0e0e0c00032928444d01d9000e0e0c00034d02d0000e0c000203032902012a2928394d01bf000c00032706031856074d03b2000e0e0e0c0002502c2c2b2d0e0e0e7e040003560729372a23062a3b4d0093000c00032a3b4d008a000e0e0e0c00032928444d017d000e0e0c00034d0274000e0c000203032902012a294d0465004d0561000e0e0c000327060354560729352a362b372c382d392e3a2f23063023073123083223094d063a000e0e0e0c000b56292e2a69644d072a000e0e0e0c00025637303c2b2d56880e0c0005292d693232310e0e0e0c00032a2a6929270802013b430e0e|@1560,I253,I113,I218,@1102,@1559,@1099,@1335,@1381| 1559:O1|@1561 1560:S43|50415253455f44454328292e706172736544656328332964656328342964656353657175656e6365283229 1561:C3,184|00802b28074d00af000c000303033c029f2b280d4d00a0000e0c000303033c028f2b28184d0090000e0c000303033c027f2b28154d0080000e0c000303033c026f2b28124d0070000e0c000303033c025f2b28114d0060000e0c000303033c024f2b28144d0050000e0c000303033c023f2b280b4d0040000e0c000303033c022f2b3d4d0031000e0e0c000303033c021f2b281d4d0020000e0c000303033c020f2b281e4d0110002d0e0e0e7e030003420e0e0e0e0e0e0e|@1388,I229,I113| 1562:C6,88|00864d0052002e694d014c000e0c00023b3b3b0405003b2a0e4f023b006000035029352a362b372c382d39293b4d0327000c000303032b0216282e3b2f2f2f2f2f1604001200120000000008293764270a1f070e0e0e0e0e|@1564,@1565,@1381,@1567,I234,@1563| 1563:C21,440|00860405003b2a0e0e4f00ab012100035029352a362b372c382d392e5777292309294d0192014d028e010e0e0e0c00036503033b02722a334d037c010e0c00030314220c2e4d046f010c00034d0568010e0c000202013b034e5777578729352a362b372c382d392e3a2f23063023073123083223094d063f010c000b4d0738012a3c2e352f36303731383239333a342306220c2307220d2308220e23094d0817010c000e6602013b2b344d090a010e0e0e0c000303033c0236220d03315787292309294d01f1004d02ed000e0e0c000365030f2c220c4d0ade000e0e0e0c0003020a2b344d03d0000e0c000302013b032a333c4d0bc1000e0e0c0003220e0304220c0202282e292b3333333333160c00a6001200010000086502012a3c28404d0d95004d0e91000e0e0c00043c28404d0f85004d0e81000e0e0c00044d107800220f2b2d6b2c37293b6922122a69654d1165000e0e0c00022a2a4d125a000e0e0e0c00032e382f35303931362b2a2f2f2e6805333929221c4d133c000e0c00036403033c020f333829221d4d0a29000e0e0c0003640317221b221b2e2d3232310e160c0012001b000100000802012927131f070e0e0e0e0e|@1577,@1567,@7295,@960,I113,I229,I218,@1335,@1578,@1111,I233,I24,I106,@1563,@633,I11,@1581,-8,@1576,@1571,I231| 1564:S42|50415253455f44454328292e70617273654465632833296465632834297061727365496e666978283729 1565:O1|@1566 1566:C2,16|00802b28174d0007002d0e0e7e030003|@1098,I113| 1567:C17,304|0081560756182a2a69654d0022010e0e0e0c0002561756242a2a69654d0010010e0c0002562a0e0e0e0c0002292b0e0e0e4f01fb00310003573729372a23062a3b4d02eb000c00032a3b4d02e2000e0e0e0c00032928444d03d5000e0e0c00034d04cc000e0c000203032902012a56982a2a4d05ba000e0e0e0c0003270703135638564757572b2b2b4d06a3000c00046602044d079900294d0794004d0890000e0c000303064d098600022629565c0e0e0c0002294d0a77000c00024d0470000e0c000203062935296402054d0b60001064294d0c59000e0e0c0002030e294d0d4d000e0e0c00022964021c29354d0e3e004d0f3a000e0e0e0c000303062936296402044d0e28002a354d0e22004d0f1e000e0e0e0c000303033c02013b322c452a462e472d482b492707430e0e0e0e|@1569,@1381,@1570,I253,I113,I218,@1099,@1391,I48,I24,@210,I105,@1568,@1539,@1542,-1,I229| 1568:O3|@7296,@1575,0 1569:S56|50415253455f44454328292e70617273654465632833296465632834297061727365496e666978283729726561644e6578744f7073283229 1570:C14,328|0081570729372a23062a3b4d0039010e0e0c00032a3b4d002e010e0e0e0c00032928444d0121010e0e0c00034d0218010e0c000203032902012a56692a2a4d0306010e0e0e0c0003270707cf570729372a23062a3b4d00ef000c00032a3b4d00e6000e0e0e0c00032928444d01d9000e0e0c00034d02d0000e0c000203032902012a56682a2a4d03be000e0e0e0c000327070375570729352a362b372c382d392e3a2f23063023073123083223094d0496000e0e0e0c000b64561c0e0e0c0002294d0583000c00024d027c000e0c000203332935294d066f000c0002030e294d0765000e0e0c00023c64021629354d0856004d0952000e0e0e0c000303033c02013b6402013b6402013b03032c023256092c2a69644d0a2f00020226000c0002561a0e0e0e0c00022d2a4d0b1a000e0e0e0c0003292e0e0e0e4f0c0b003100036502012c430e0e0e|@1572,I253,I113,I218,@1099,@1329,I105,@1539,@1542,-1,I229,@1381,@1571,@1570| 1571:O1|@1573 1572:S61|50415253455f44454328292e70617273654465632833296465632834297061727365496e66697828372970617273654170706c69636174696f6e283229 1573:C1,8|00813c2d2d6a430e|@1574| 1574:S24|50415253455f5452454528292e6d6b4170706c6963283229 1575:S6|4f7074696f6e 1576:O1|@1583 1577:S54|50415253455f44454328292e70617273654465632833296465632834297061727365496e6669782837296e6578744c6576656c283729 1578:O1|@1579 1579:C2,16|00802b384d0008002a2d0e0e7d040002|@1110,@1580| 1580:S66|4d6978656420726967687420616e64206c656674206173736f63696174697665206f70657261746f7273206f66207468652073616d6520707265636564656e63652e 1581:O4|@1582,-1,@573,@633 1582:S11|3c756e646566696e65643e 1583:C1,8|0080280d2c69420e|@1584| 1584:S9|5475706c6554726565 1585:C10,128|00824d007a002a2f2f564c68054d016f002e2c315659566a2f568b569c56ad680a4d025b002e4d035600314d0451000e0e0c000556382f2a69644d0542000e0e0e0c00023135323633372e4d0231004d062d002f56b70e0e0e0c0008302a2f0e0e0c0003314d0717004d081300220c4d040d000e0e0c00052a2707440e0e0e0e|@1587,@1588,@1604,@1641,@1617,@1405,@1381,@1437,@1425,@1586| 1586:S14|456e64206f66207061747465726e 1587:S39|50415253455f44454328292e70617273654465632833296465632834297061747465726e283329 1588:C14,256|00812b4d00f9000e0e0c00022d4d01ef00694d02ea000e0e0e0c000256282e2a37565a282f4d03d7002b4d04d2000e0e0e0c00046403312c4d05c400694d02bf000c0002566a2a2a2d4d06b3000c00042d2a4d07aa000e0e0e0c000329250626051e423b270402012a65564928054d038e002b4d0489000e0e0c00046403792c4d087c000e0c000203525649565929352a362b372c382d392e3a2f23063023073123083223094d0956000e0e0e0c000b4d0a4c002a3c2e352f36303731383239333a342306220c2307220d2308220e23094d0b2b000c000e260402023b5056495658292b3456970e0e0c00042c2a4d0c0e00340e7e0b0003292704430e0e0e0e|@1590,@1591,@1594,@1381,@1425,@1355,@1433,@1408,@1596,I218,@1335,@1599,@1111,@1589| 1589:O1|@1602 1590:S61|50415253455f44454328292e70617273654465632833296465632834297061747465726e283329636f6e73747261696e744f724c617965726564283229 1591:O1|@1592 1592:C3,24|00802b354d0010004d010c000e0c000303033c02013b420e|@1593,-8,I229| 1593:S23|50415253455f5452454528292e69734964656e74283129 1594:O1|@1595 1595:C2,16|00802b28054d0007002d0e0e7e030003|@1098,I113| 1596:O1|@1597 1597:C2,16|00814d000a002c2e6a430e0e0e0e0e0e|@1598,-3| 1598:S28|50415253455f5452454528292e6d6b436f6e73747261696e74283229 1599:O1|@1600 1600:C2,16|00802b384d0008002a2d0e0e7d040002|@1110,@1601| 1601:S32|4578706563746564206964206f722069643a7479206265666f72652060617327 1602:C2,16|00814d000a002d2d6a430e0e0e0e0e0e|@1603,-9| 1603:S25|50415253455f5452454528292e6d6b4c617965726564283229 1604:C40,1592|0080560729372a23062a3b4d0029060e0e0c00032a3b4d001e060e0e0e0c00032928444d0111060e0e0c00034d0208060e0c000203032902012a2928334d03f7050c00030a03000804e10408001804566729372a23062a3b4d00dc050e0c00032a3b4d00d2050e0e0e0c00032928444d01c5050e0e0c00034d02bc050e0c000203032902012a29283a4d01ab050c0003270603af56674d049e050e0e0e0c00025677283b4d0590052b4d068b050c00046403064d07810502873b0402003b2a0e0e4f087305a000035029352a3656b729372a23062a3b4d005e050e0e0e0c00032a3b4d0052050e0e0e0c00032928444d0145050e0e0c00034d023c050e0c000203032902012a29283b4d012b050c00032705030a294d041f050c0002020a287d2a4d0913050c00033c28404d0a09054d0b05050e0e0c000428082e2b2f6b27076406cc29283f4d03ee040e0e0e0c00030a040009015801a401b0026002566729372a23062a3b4d00ce040e0e0e0c00032a3b4d00c2040e0e0e0c00032928444d01b5040e0e0c00034d02ac040e0c000203032902012a56cf2a2a4d0c9a040e0e0e0c000327070398566729372a23062a3b4d0083040c00032a3b4d007a040e0e0e0c00032928444d016d040e0e0c00034d0264040e0c000203032902012a2928174d0153040c000329030b56d74d0447040c000202013b56e756f929352a362b372d22164d0d3004324d0e2b0402023c020c00083c28404d0f1d044d0b19040e0e0c00043c28404d100d044d0b09040e0e0c00044d1100042c2b2d6b270d021a56674d05f203334d12ed032c4d13e8030e0c0005504d14df036406d5566e29352a362b372c382d392e3a2f23063023073123083223094d15be030e0e0e0c000b568e4d04b2030e0e0e0c00023c28404d0fa5034d0ba1030e0e0c00044d1698032a2d4d1792036b270406d7566e29352a362b372c382d392e3a2f23063023073123083223094d156f030c000b568e4d0466030e0e0e0c00023c28404d0f59034d0b55030e0e0c00044d164c032a2d4d1846036b270406dc5667292309294d1937034d1a33030c00036503043b5002535667567729352a362b372c382d392e3a2f23063023073123083223094d1b090302021a010e0e0c000b4d1cfc022a3c2e352f36303731383239333a342306220c2307220d2308220e23094d1ddb020c000e2604566e29352a362b372c382d392e3a2f23063023073123083223094d15b8020202c9000e0c000b568e4d04aa020e0e0e0c00023c28404d0f9d024d0b99020e0e0c00044d1690022a2d4d1e8a026b2704029a566e29352a362b372c382d392e3a2f23063023073123083223094d156702020278000c000b568e4d045a020e0e0e0c00023c28404d0f4d024d0b49020e0e0c00044d1640022a2d4d1f3a026b2704024a566e29352a362b372c382d392e3a2f23063023073123083223094d1517020c000b568e4d040e020e0e0e0c00023c28404d0f01024d0bfd010e0e0c00044d16f4012a2d4d20ee016b270406d256674d04e3010c00024d21dc016406d156674d04d3010c0002567729372a23062a3b4d00c3010c00032a3b4d00ba010e0e0e0c00032928444d01ad010e0e0c00034d02a4010e0c000203032902012a2928374d0193010c00034d028c010e0c00022706030b3b4f227f017000016402013b568729372a23062a3b4d006b010c00032a3b4d0062010e0e0e0c00032928444d0155010e0e0c00034d024c010e0c000203032902012a2928374d013b010c00032705030a294d042f010c0002020a285d2a4d0923010c00032b4d231b01220d02020c010e7d0d000256674d040a010202fd000e0e0e0c0002567729372a23062a3b4d00f3000c00032a3b4d00ea000e0e0e0c00032928444d01dd000e0e0c00034d02d4000e0c000203032902012a2928354d01c3000c00034d02bc000e0c00022706034b567b332a69644d24aa000e0e0e0c000256875699292b2d56d80c000456b728384d0590002b4d068b000c00046403173b0e4f257f00b000012b2a6929664d2673000c0002020129270402044d076500568729372a23062a3b4d0058000e0c00032a3b4d004e000e0e0e0c00032928444d0141000e0e0c00034d0238000e0c000203032902012a2928354d0127000c00032705030a294d041b000c0002020a28292a4d090f000c00032b27042706420e0e0e0e0e0e|@1606,I253,I113,I218,I107,@1102,@1425,@1355,@1607,@1608,@1320,@205,I11,@1099,@1437,@1613,@633,@1581,-8,@1617,@1405,@1618,@1329,-10,@1619,@1623,@7295,@960,@1335,@1625,@1111,@1628,@1630,@1632,@1634,@1635,@1637,@1381,@1605,@1576| 1605:C5,72|007f5607571b2a2a69654d003a000e0e0e0c000257175729292b2d57680c0004574728384d0120002b4d021b000c000464030b0e0e4f030f0031000102013b2a2a69292706410e0e|@1640,@1381,@1425,@1355,@1605| 1606:S55|50415253455f44454328292e70617273654465632833296465632834297061747465726e28332961746f6d69635061747465726e283129 1607:O1|14 1608:C24,488|00815707283d4d00de012b4d01d9010e0e0c000464030b2b4d02cc010802003b06d15607571d2a2a69654d03ba010e0e0e0c0002294d04af01694d03aa010e0e0e0c000257272a2a4d059c010e0c00035747282d4d0090012b4d018b010c000464031057475759292b3057980e0c00046506cc294d0670010e0c00023b2a4d0766010e0e0e0c000364038f294d0658010e0c00023b2a4d084e010e0e0e0c00036403054d09410110294d0a3b010c0002030329020b2928084d0b2c010e0c00032928314d0c21010e0e0c0003640348294d0614010e0c00023b2a4d080a010e0e0e0c00036403054d09fd0010294d0af7000202ec000c0002030329020b2928084d0be4000e0c00032928394d0dd9000e0e0c00036402013b02013b03535747575729352a362b372c382d392e3a2f23063023073123083223094d0eab00020260000c000b4d0fa0002a3c2e352f36303731383239333a342306220c2307220d2308220e23094d107f000c000e260402023b503c28404d116f004d126b000c00043c28404d1361004d125d000e0e0c00044d1454002c2b2d6b2f2a579c0e0c0003662a2a69576728384d153c002b4d0137000c000464031f0402003b2a0e4f1627008100035029352a362c2a69220c2c452a4627040209293b69323c452a46642706430e0e0e0e0e0e|@1610,@1425,@1355,@333,@1381,@1379,@1435,I223,I234,I231,@52,I105,I252,I28,I29,@1335,@1609,@1111,@633,I11,@1581,-8,@1437,@1608| 1609:O1|@1611 1610:S67|50415253455f44454328292e70617273654465632833296465632834297061747465726e28332961746f6d69635061747465726e2831296765744c6162656c73283229 1611:C2,16|00802b384d0008002a2d0e0e7d040002|@1110,@1612| 1612:S35|203d20706174206578706563746564206166746572206e756d65726963206c6162656c 1613:O1|@1614 1614:C13,240|00862c2e304d00e7000c000429320e0e0e0c0002294d01d7000c00024d02d0000e0c000203332935294d03c3000c0002030e294d04b9000e0e0c00023c64021629354d05aa004d06a6000e0e0e0c000303033c02013b6402013b29030d2e4d028e000e0e0e0c000202013b03773135323633373438220c39220d3a220e2306220f230722102308221123094d0761000e0e0c000b28282d4d0855000e0e0c0003294d094b004d0847000c00034d0a40002a69292d3b220f3522103622113722123822133922143a221523062216230722172308221823094d0b15000e0e0c000e260502023b502b661f070e0e0e0e0e0e|@1616,@1391,I105,I218,@1539,@1542,-1,I229,@1335,@344,@1544,@1615,@1111| 1615:C1,16|00802b3856172a2d7d0400020e0e0e0e|@1545| 1616:S41|50415253455f44454328292e70617273654465632833296765744c6f6e674e6f6e496e666978283729 1617:S7|5061747465726e 1618:O1|-5 1619:O4|@1621,-1,@190,@1620 1620:O3|1,@535,@1622 1621:S10|636f6e76537472696e67 1622:O3|3,@7297,79992 1623:O4|@1624,-1,@190,@1620 1624:S7|636f6e76496e74 1625:O1|@1626 1626:C2,16|00802b384d0008002a2d0e0e7d040002|@1110,@1627| 1627:S38|5265616c20636f6e7374616e7473206e6f7420616c6c6f77656420696e207061747465726e73 1628:O4|@1629,-1,@190,@1620 1629:S8|636f6e765265616c 1630:O4|@1631,-1,@190,@1620 1631:S8|636f6e7643686172 1632:O4|@1633,-1,@190,@1620 1633:S8|636f6e76576f7264 1634:O1|-16 1635:C5,72|007f5607571a2a2a69654d003a000e0e0e0c000257175729292b2d57680c0004574728384d0120002b4d021b000c000464030b0e0e4f030f0031000102013b2a2a69292706410e0e|@1636,@1381,@1425,@1355,@1635| 1636:S68|50415253455f44454328292e70617273654465632833296465632834297061747465726e28332961746f6d69635061747465726e283129702d766172734c697374283129 1637:O1|@1638 1638:C1,8|008028092c69420e|@1639| 1639:S4|4c697374 1640:S66|50415253455f44454328292e70617273654465632833296465632834297061747465726e28332961746f6d69635061747465726e283129702d7475706c6573283129 1641:O1|@1642 1642:C4,200|00802b28174d00bf000c000303033c02b32b283a4d00b0000e0c000303033c02a32b28364d00a0000e0c000303033c02932b28344d0090000e0c000303033c02832b28434d0180000e0c000303482b28424d0173000c0003033c2b28414d0167000c000303302b28404d015b000c000303242b283f4d014f000c000303182b28304d0143000c0003030c2b3c4d0038000e0c000303033c022b2b28304d0128000e0c0003030c2b3c4d001c000e0c000303033c020f2b28334d020c002d0e0e0e7e030003420e0e0e|@1388,I229,I230,I113| 1643:C17,296|00814d0022012a56276a3b4d01190156372d31566d567e30569f120b0001000a00120c0001000b00120d0001000c00120e0001000d00680c3b3b3b56674d02e700334d03e2002c4d04dd000e0e0c000550567729372a23062a3b4d05ca000e0e0e0c00032a3b4d05be000e0e0e0c00032928444d06b1000e0e0c00034d07a8000e0c000203032902012a294d0299004d0895000e0e0c000327060384324d098700694d0a82000e0e0e0c00020e4f0b7700700002568729372a23062a3b4d0567000c00032a3b4d055e000e0e0e0c00032928444d0651000e0e0c00034d0748000e0c000203032902012a29280e4d0637000c00032706032456874d0c2a000e0e0e0c000250330e0e0e4f0d1b008000022a2a4d0e1200220d7e0d0003296402044d0f04002707430e|@1645,@1646,@1649,@1671,@1673,@1405,I253,I113,I218,@1099,@1674,@1381,@1676,@1102,@1697,@1644,@1618| 1644:O1|@1716 1645:S42|50415253455f44454328292e706172736544656328332964656328342965787072657373696f6e283229 1646:C2,16|008256083b4f00070010000165440e0e|@1648,@1647| 1647:C5,104|007f040200571829352a362b372c382d392e3a2f23063023073123083223094d0045000e0e0c000b56375649292b57770e0c00032e2a452d46502e567856842a4d0124002b4d021f000c000465030b0e0e4f03130061000102013b2a2a69292709410e0e0e0e0e0e|@1356,@1335,@1425,@1355,@1647| 1648:S63|50415253455f44454328292e706172736544656328332964656328342965787072657373696f6e28322965787072657373696f6e4c696e654c697374283329 1649:C45,2184|0080560729372a23062a3b4d0079080e0e0c00032a3b4d006e080e0e0e0c00032928444d0161080e0e0c00034d0258080e0c000203032902012a2928364d0147080c0003270607d356074d033a080e0e0e0c0002561729372a23062a3b4d0027080c00032a3b4d001e080e0e0e0c00032928444d0111080e0e0c00034d0208080e0c000203032902012a2928374d01f7070c00034d02f0070e0c000227060320561a2d2a69644d04de070e0e0e0c0002562956373b4f05cf07400001270402013b562729372a23062a3b4d00ba070e0e0e0c00032a3b4d00ae070e0e0e0c00032928444d01a1070e0e0c00034d0298070e0c000203032902012a2928374d0187070c00032705030a294d037b070c0002020e285d2a4d066f0702020f000c00032b4d076307300e0e7d070002560729372a23062a3b4d004f070c00032a3b4d0046070e0e0e0c00032928444d0139070e0e0c00034d0230070e0c000203032902012a2928344d011f070c0003270607d256074d0312070e0e0e0c0002561728354d0804072b4d09ff060c00046403064d0af50606d5561729352a362b372c382d392e3a2f23063023073123083223094d0bd5060e0e0c000b563e2f2a69644d04c6060e0e0e0c00025649292b56780e0e0e0c0003566728384d08ac062b4d09a7060c000464032b566b322a69644d0497060c0002567956873b4f0c8b069000012e2a692927064d0d7e060e0e0e0c00020249566728394d086e062b4d0969060e0e0c0004640333292d69567d332a69644d0454060e0c000256892928392c56cc02027a000e0c00042c2a692927054d0e36060e0e0e0c0002020129567729372a23062a3b4d00200602024f000e0c00032a3b4d0012060e0e0e0c00032928444d0105060e0e0c00034d02fc050e0c000203032902012a2928354d01eb050c00032705030a294d03df050c0002020a28292a4d06d3050c00032b27086406cd560729372a23062a3b4d00bd050e0e0c00032a3b4d00b2050e0e0e0c00032928444d01a5050e0e0c00034d029c050e0c000203032902012a29283a4d018b050c0003270603aa56074d037e050e0e0e0c00025617283b4d0870052b4d096b050c00046403064d0a6105028256173b3b4f0f57053000013c28404d104d054d1149050e0e0c000428083c2b2d6b567729372a23062a3b4d0031050e0e0c00032a3b4d0026050e0e0e0c00032928444d0119050e0e0c00034d0210050e0c000203032902012a29283b4d01ff040202f7040c00032705030a294d03ef040c0002020a287d2a4d06e3040c00032b27086406d9560729372a23062a3b4d00cd040e0e0c00032a3b4d00c2040e0e0e0c00032928444d01b5040e0e0c00034d02ac040e0c000203032902012a2928134d019b040c0003270607d556074d038e040e0e0e0c000256190403002a362b370403003b2a4d1276040e0e0e0c00035029362a374d1367042e2b6a2f2c452a462e47502f220c4d145504694d0450040e0c00022a2a120e0001000b000c000356c729372a23062a3b4d0033040c00032a3b4d002a040e0e0e0c00032928444d011d040e0e0c00034d0214040e0c000203032902012a2928104d0103040202fb030c00032705030a294d03f3030c0002020e4d15ea032a4d06e5030e0e0c0003120f0001000a0022112a69644d04d0030e0c00022e28392b12130001000600020295000e0e0c00041211000100010029372a23062a3b4d00a6030e0e0e0c00032a3b4d009a030e0e0e0c00032928444d018d030e0e0c00034d0284030e0c000203032902012a29404d0174030e0c00032705030a294d0367030c0002020e4d165e032a4d0659030e0e0c00031213000100010022154d0847034d1743032c4d183e030e0e0e0c0005312e3b4d19310322190e0e7b05170004560729372a23062a3b4d001b030c00032a3b4d0012030e0e0e0c00032928444d0105030e0e0c00034d02fc020e0c000203032902012a2928174d01eb020c000329030b56774d03df020c000202013b568729372a23062a3b4d00cc020e0c00032a3b4d00c2020e0e0e0c00032928444d01b5020e0e0c00034d02ac020e0c000203032902012a294d1a9d024d1b99020e0e0c0003034656e756f929352a362b372d22164d1a8102220f4d1c7b020c00083c28404d1d71024d116d020e0e0c00043c28404d1e61024d115d020e0e0c00044d1f54022c2b2d6b270506d129282b4d2045020e0e0c0003032656e74d0338020e0c00025056e722112a4d212a020e0e0e0c0003644d221f0222110e7d11000229283f4d2011020e0e0c0003035156e729352a362b372c382d392e3a2f23063023073123083223094d23ec010e0c000b121100010001004d03dd010e0e0c00023c28404d1dd1014d11cd010e0e0c00044d24c4012a2d4d25be016b270406cd2928404d20b2010e0e0e0c0003035556e729352a362b372c382d392e3a2f23063023073123083223094d238c010e0c000b121100010001004d037d01020273010e0e0c00023c28404d1d6d014d1169010e0e0c00044d2460012a2d4d265a016b270406cd2928414d204e010e0e0e0c0003035156e729352a362b372c382d392e3a2f23063023073123083223094d2328010e0c000b121100010001004d0319010e0e0c00023c28404d1d0d014d1109010e0e0c00044d2400012a2d4d27fa006b270406d52928424d20ee000202e4000e0e0e0c0003035156e729352a362b372c382d392e3a2f23063023073123083223094d23c4000e0c000b121100010001004d03b5000e0e0c00023c28404d1da9004d11a5000e0e0c00044d249c002a2d4d2896006b2704028b2928434d208a00020280000e0e0e0c0003035156e729352a362b372c382d392e3a2f23063023073123083223094d2360000e0c000b121100010001004d0351000e0e0c00023c28404d1d45004d1141000e0e0c00044d2438002a2d4d2932006b2704022756e74d2a27002a4d062200020218000e0e0e0c000350294d0312000e0e0e0c0002504d2b070064270e420e0e0e|@1651,I253,I113,I218,@1102,@1381,@1652,@1320,@1637,@1425,@1355,@1607,@1335,@1653,@1576,@1654,@1657,@205,I11,@1302,@1660,@1661,@1208,@1210,@1663,@1405,@1664,@1667,@1099,@1613,@633,@1581,-8,I229,@1435,@1650,@1329,-10,@1619,@1623,@1628,@1632,@1630,@1363,@1618| 1650:O1|@1669 1651:S61|50415253455f44454328292e706172736544656328332964656328342965787072657373696f6e28322961746f6d696345787072657373696f6e283129 1652:C4,56|007f56035612292b57480e0e0e0c0003563128384d0020002b4d011b000c000464030b0e0e4f020f0021000102013b2a2a69292705410e0e|@1356,@1425,@1355,@1652| 1653:C4,72|007f1201000100f8ff1202000100f7ff292b57480e0c00031204000100f6ff28384d0023002b4d011e000e0e0e0c000464030b0e0e4f020f0021000102013b2a2a69292705410e0e|@1356,@1425,@1355,@1653| 1654:O1|@1655 1655:C2,16|00804d000a002c69420e0e0e0e0e0e0e|@1656,-6| 1656:S6|457870536571 1657:C5,56|007f3b0e0e4f002f00010002561328384d0124002b4d021f000c000464030b0e0e4f03130001000102013b2a2a692966410e0e0e0e0e0e0e|@1356,@1658,@1425,@1355,@1657| 1658:C9,160|00805607294d00970069644d0191000e0e0c000257172a2a4d0284000e0c0003573729372a23062a3b4d0373000c00032a3b4d036a000e0e0e0c00032928444d045d000e0e0c00034d0554000e0c000203032902012a29282d4d0443000c00032705030b294d0637000c000250020e283d2a4d072a000e0e0e0c0003505647575f2a2a69654d0117000c00025759292b57880e0e0e0c00032d2a692707420e0e|@1659,@1379,@1381,@1435,I253,I113,I218,@1102,@1320| 1659:S73|50415253455f44454328292e706172736544656328332964656328342965787072657373696f6e28322961746f6d696345787072657373696f6e2831296c6162656c6c65642d283129 1660:C2,40|00802b56180c0002293b4d001a000e0e0e0c0003030a2c56272d0e0e7d0400022964420e0e0e0e0e|@1316,I229| 1661:O1|@1662 1662:C2,16|00802b28104d0007002d0e0e7e030003|@1098,I113| 1663:S21|456e64206f66206c65742065787072657373696f6e 1664:O1|@1665 1665:C2,32|00823c28403b4d0016000e0e0e0c0004402d2f312d680564440e0e0e0e0e0e0e|@1666,I11| 1666:S34|50415253455f5452454528292e6d6b4c6f63616c4465636c61726174696f6e283329 1667:O1|@1668 1668:C3,48|00802b282d4d0027000c000303033c021b2b28304d0018000e0c000303033c020b2b3c4d0109002d7e030003420e0e0e|@1388,I229,I113| 1669:C8,96|00800402004d0057001b0f273b3b3b2e4d014c000e0c00075029644d0241000e0e0c00020402002d2b2b4d0332000e0e0e0c00045029293b69293b4d0421000e0e0c0003292e694d0515000e0e0c00024d060c00322b2d6b2706420e0e0e0e0e|@1670,@205,@1348,@1326,@1431,@1467,@1500,-13| 1670:S26|50415253455f5452454528292e6d6b53656c6563746f72283129 1671:O1|@1672 1672:C4,280|00802b282b4d000f010c000303b42b28434d0003010c000303a82b28424d00f7000c0003039c2b28414d00eb000c000303902b28404d00df000c000303842b283f4d00d3000c000303782b28304d00c7000c0003036c2b3c4d00bc000e0c000303602b282d4d00af000c000303542b28304d00a3000c000303482b3c4d0098000e0c0003033c2b283a4d008b000c000303302b28344d007f000c000303242b28364d0073000c000303182b28174d0067000c0003030c2b28134d015b000c000303033c024f2b280c4d014c000e0c000303033c023f2b28064d013c000e0c000303033c022f2b28204d012c000e0c000303033c021f2b280f4d011c000e0c000303033c020f2b281a4d020c002d0e0e0e7e030003420e0e0e|@1388,I230,I229,I113| 1673:S10|45787072657373696f6e 1674:O1|@1675 1675:C2,16|00802b280e4d0007002d0e0e7e030003|@1098,I113| 1676:C10,136|00802b4d008100694d017c000e0c00020e4f027300010002571729372a23062a3b4d0363000c00032a3b4d035a000e0e0e0c00032928444d044d000e0e0c00034d0544000e0c000203032902012a2928194d0433000c00032706032457174d0626000e0e0e0c0002502c0e0e0e4f0717001100022a2a4d080e002f0e7e0500032964420e0e0e0e0e|@1678,@1679,@1381,@1681,I253,I113,I218,@1102,@1676,@1677| 1677:O1|@1714 1678:S56|50415253455f44454328292e706172736544656328332964656328342965787072657373696f6e28322970617273654f72656c7365283129 1679:O1|@1680 1680:C2,16|00802b28194d0007002d0e0e7e030003|@1098,I113| 1681:C10,136|00802b4d008100694d017c000e0c00020e4f027300010002571729372a23062a3b4d0363000c00032a3b4d035a000e0e0e0c00032928444d044d000e0e0c00034d0544000e0c000203032902012a293f4d0434000e0c00032706032457174d0626000e0e0e0c0002502c0e0e0e4f0717001100022a2a4d080e002f0e7e0500032964420e0e0e0e0e|@1683,@1684,@1381,@1686,I253,I113,I218,@1102,@1681,@1682| 1682:O1|@1712 1683:S57|50415253455f44454328292e706172736544656328332964656328342965787072657373696f6e2832297061727365416e64616c736f283129 1684:O1|@1685 1685:C2,16|00802b3f4d0008002d0e0e0e7e030003|@1098,I113| 1686:C29,1040|0080570729372a23062a3b4d0001040e0e0c00032a3b4d00f6030e0e0e0c00032928444d01e9030e0e0c00034d02e0030e0c000203032902012a29280f4d03cf030c000307d057674d04c4030e0c00025779332a69644d05b6030e0e0e0c00025688292b56b50e0e0e0c000357a729372a23062a3b4d0097030c00032a3b4d008e030e0e0e0c00032928444d0181030e0e0c00034d0278030e0c000203032902012a29281c4d0167030c00032705030a294d045b030c0002020e4d0652032a4d074d030e0e0c000357c8220f2a69644d053d030e0e0c000256d8292b1211000100ffff0e0e0c000357f729372a23062a3b4d001b030c00032a3b4d0012030e0e0e0c00032928444d0105030e0e0c00034d02fc02020254000e0c000203032902012a2928094d01e7020c00032705030a294d04db020c0002020e4d08d2022a4d07cd020e0e0c0003121200010002002922151215000100ffff0c0003322e2b4d09ad0222180e0e7b051600042928204d039d020e0e0c000303b357674d0490020e0c0002324d0a8702694d0582020e0e0e0c00025688292b56b50e0e0e0c000357a729372a23062a3b4d0063020c00032a3b4d005a020e0e0e0c00032928444d014d020e0e0c00034d0244020e0c000203032902012a2928084d0133020c00032706032457a74d0426020e0e0e0c000256b829220f56e50e0e0c00032c2a4d0b0e0222117e10000357a74d0c02022a4d07fd010e0e0c000350294d04f2010e0e0e0c0002504d0de701270506d32928064d03dc010e0c0003039a57674d04d0010e0c0002577a332a69644d05c2010e0e0e0c00025688292b56b50e0e0e0c000357a729372a23062a3b4d00a3010c00032a3b4d009a010e0e0e0c00032928444d018d010e0e0c00034d0284010e0c000203032902012a2928164d0173010c00032705030a294d0467010c0002020e4d0e5e012a4d0759010e0e0c0003220e0e0e0e4f0f4b01c100022c2a4d10420122117e10000329281a4d0335010e0e0c0003032657674d0428010e0c00025678293456a50e0e0e0c0003644d11130133020209010e0e7d0a0002576729372a23062a3b4d00fb000c00032a3b4d00f2000e0e0e0c00032928444d01e5000e0e0c00034d02dc000e0c000203032902012a29280c4d01cb000c00032706033057674d04be000e0e0e0c0002324d12b300694d05ae000e0e0e0c00020e4f0fa3007100024d139c00330e0e0e7d0a0002576c322a69644d058a000e0e0e0c00025672568829352a362b372d4d1475004d15710031121100020005000e0e0c0008220c4d165e00694d0559000e0e0c000256b82b2a3757e7282f4d1747002b4d1842000e0e0e0c00046403312c4d193400694d052f000c000257f72a2a2d4d1a23000c00042d2a4d1b1a000e0e0e0c000329250626051e423b270402012a27082706420e0e|@1688,I253,I113,I218,I229,@1102,@1381,@1181,@1320,@1215,@1689,@1692,@1694,@1213,@1618,@1185,@1697,@1702,@1705,@1096,@1708,@1687,@1667,@1684,@1425,@1355,@1433,@1408,@1596| 1687:O1|@1711 1688:S55|50415253455f44454328292e706172736544656328332964656328342965787072657373696f6e2832296b6579576f7264457870283129 1689:O1|@1690 1690:C1,8|00823d2e2d2f6b44|@1691| 1691:S22|50415253455f5452454528292e6d6b436f6e64283329 1692:O1|@1693 1693:C2,16|00802b28084d0007002d0e0e7e030003|@1098,I113| 1694:O1|@1695 1695:C1,8|0081280f2c2e6a43|@1696| 1696:S23|50415253455f5452454528292e6d6b5768696c65283229 1697:C21,432|008057074d00a8012d4d01a3012c4d029e010e0e0e0c0005572729352a362b372c382d392e3a2f23063023073123083223094d037a010e0e0e0c000b2f4d046f01694d056a010e0e0e0c000257575668292b2d120b0002000e000e0e0e0c0004578729372a23062a3b4d0643010c00032a3b4d063a010e0e0e0c00032928444d072d010e0e0c00034d0824010e0c000203032902012a29282e4d0713010c00032706030e57874d0906010e0e0e0c0002026657874d0af8002a4d0bf3000c000350579729372a23062a3b4d06e2000e0e0e0c00032a3b4d06d6000e0e0e0c00032928444d07c9000e0e0c00034d08c0000e0c000203032902012a29282d4d07af000c00032706030e57974d09a2000e0e0e0c000202013b64344d0c9300694d058e000e0e0e0c000256a8292b56d50e0e0e0c00033c28404d0d75004d0e71000e0e0c00043c28404d0d65004d0e61000e0e0c00042b34312d2d68054d0f51002a6912110002000100282c4d1042002b4d113d000e0e0c000464030f22121612002e0012000100000202013b2a2a691213000200010022154d1015004d1311002c4d020c000e0c0005502a2713420e0e0e|@1699,@1641,@959,@1405,@1335,@1700,@1381,I253,I113,I218,@1102,@1260,@1320,@1533,@633,I11,-11,@1425,@1355,@1697,@1698| 1698:S12|456e64206f66206d61746368 1699:S50|50415253455f44454328292e706172736544656328332964656328342965787072657373696f6e2832296d61746368283129 1700:O1|@1701 1701:C2,16|00802b282e4d0007002d0e0e7e030003|@1098,I113| 1702:O1|@1703 1703:C2,16|00814d000a002d2d6a430e0e0e0e0e0e|@1704,-2| 1704:S22|50415253455f5452454528292e6d6b43617365283229 1705:O1|@1706 1706:C1,8|0080280c2c69420e|@1707| 1707:S5|5261697365 1708:O1|@1709 1709:C1,8|008028062c69420e|@1710| 1710:S2|466e 1711:C4,232|00802b282b4d00df000c000303033c06ca2b28434d01d0000e0c000303482b28424d01c3000c0003033c2b28414d01b7000c000303302b28404d01ab000c000303242b283f4d019f000c000303182b28304d0193000c0003030c2b3c4d0088000e0c000303033c027b2b282d4d0178000e0c000303182b28304d016b000c0003030c2b3c4d0060000e0c000303033c02532b283a4d0050000e0c000303033c02432b28344d0040000e0c000303033c02332b28364d0030000e0c000303033c02232b28174d0020000e0c000303033c02132b28134d0210002d020207000e0e0e7e030003420e0e0e|@1388,I229,I230,I113| 1712:C2,16|00814d000a002d2d6a430e0e0e0e0e0e|@1713,-1| 1713:S25|50415253455f5452454528292e6d6b416e64616c736f283229 1714:C2,16|00814d000a002d2d6a430e0e0e0e0e0e|@1715,-12| 1715:S24|50415253455f5452454528292e6d6b4f72656c7365283229 1716:C1,8|008128072d2d6a43|@1717| 1717:S28|50415253455f5452454528292e6d6b48616e646c6554726565283229 1718:C3,48|00802b56180c0002294d0023000c00024d011c000e0c000203062935296402082c56272d7d04000264420e0e0e0e0e0e|@1719,I105,I218| 1719:S39|50415253455f44454328292e70617273654465632833296465632834296e6577456e762d283129 1720:C13,416|0080560829372a23062a3b4d0091010e0e0c00032a3b4d0086010e0e0e0c00032928444d0179010e0e0c00034d0270010e0c000203032902012a29281b4d015f010c0003567829372a23062a3b4d004f010c00032a3b4d0046010e0e0e0c00032928444d0139010e0e0c00034d0230010e0c000203032902012a29281b4d011f010c00032706031156784d0312010e0e0e0c0002501e5102023b50290311320e0e4f04fb007100023b2a69296506d0567829352a362b372c382d392e3a2f23063023073123083223094d05d3000c000b344d06cb00694d07c6000e0e0e0c000256a8120c000100e8ff292b2d56f10e0e0e0c000456d829372a23062a3b4d009f000c00032a3b4d0096000e0e0e0c00032928444d0189000e0e0c00034d0280000e0c000203032902012a29282d4d016f000c00032705030a294d0363000c0002020a283d2a4d0857000c00031210000100e8ff2922131213000100faff0c00032d2a334d0939000e0e0c0004121300010002003e4d0a28002b4d0b230002021c000c000464030f2214160400120014000100000202013b2a2a6929270d270742|@1721,I253,I113,I218,@1102,@1720,@1335,@1379,@1381,@1320,@1556,@1425,@1355| 1721:S36|50415253455f44454328292e706172736544656328332964656328342976616c42283129 1722:O1|@1723 1723:C3,32|00823c28403b4d0016000e0e0e0c00044d010c002f2f2f2d680564440e0e0e0e|@1724,I11,-15| 1724:S32|50415253455f5452454528292e6d6b56616c4465636c61726174696f6e283329 1725:C3,48|00802b56180c0002294d0023000c00024d011c000e0c000203062935296402082c56272d7d04000264420e0e0e0e0e0e|@1719,I105,I218| 1726:C7,72|007f5607294d003f0069644d0139000e0e0c00020e4f022f0001000257193e4d0325002b4d0420000e0c000464030b0e0e4f05130001000102013b2a2a692966410e0e0e0e0e0e0e|@1526,@1523,@1381,@1727,@1425,@1355,@1726| 1727:C5,88|00803b3b0e4f004f001000023c28403b4d0144000e0c00043c28404d0239004d0135000e0e0c00043c28404d0329004d0125000e0e0c00043c28404d0319004d0115000e0e0c00042a2e2d2f2d6805292707420e0e0e0e0e|@1729,@1728,I11,@1581,@633| 1728:C14,344|0080570829352a362b372c382d392e3a2f23063023073123083223094d0038010e0c000b5627294d012d0169644d0227010c000257381205000200e8ff292b2d57810e0e0e0c0004576829372a23062a3b4d0303010c00032a3b4d03fa000e0e0e0c00032928444d04ed000e0e0c00034d05e4000e0c000203032902012a29282d4d04d3000c00032706030e57684d06c6000e0e0e0c000202665768283d2a4d07b5000e0e0c000350577829372a23062a3b4d03a2000e0e0e0c00032a3b4d0396000e0e0e0c00032928444d0489000e0e0c00034d0580000e0c000203032902012a29282e4d046f000c00032706030e57784d0662000e0e0e0c000202013b645677294d08510069644d024b000c00021209000200e8ff292b57b00e0e0c00032d2a334d0931000e0e0c000457b8282c4d0a24002b4d0b1f000c000464030b3b0e4f0c1300b1000202013b2a2a6929270d420e0e0e0e0e0e|@1731,@1335,@1379,@1381,I253,I113,I218,@1102,@1320,@1533,@1730,@1425,@1355,@1728| 1729:S36|50415253455f44454328292e706172736544656328332964656328342966756e42283129 1730:O1|@1732 1731:S47|50415253455f44454328292e706172736544656328332964656328342966756e4228312962696e64696e6773283129 1732:C1,16|00822d2d2d6a2964440e0e0e0e0e0e0e|@1733| 1733:S24|50415253455f5452454528292e6d6b436c61757365283329 1734:O1|@1735 1735:C2,16|00824d000a002e2e2e6b440e0e0e0e0e|@1736,-7| 1736:S32|50415253455f5452454528292e6d6b46756e4465636c61726174696f6e283329 1737:C6,80|007f5607294d00470069644d0141000e0e0c000229562a35563a36564a373b3b577a0e0e0e0c000757293e4d0221002b4d031c000e0c000464030b0e0e4f040f0011000102013b2a2a69292704410e0e|@1526,@1523,@1381,@1425,@1355,@1737| 1738:O1|@1739 1739:C2,16|00804d000a002c69420e0e0e0e0e0e0e|@1740,-14| 1740:S15|547970654465636c61726174696f6e 1741:C6,80|007f1201000100f3ff294d00420069644d013c000e0c0002561a3b2a2c575c0e0e0c000457393e4d0225002b4d0320000e0c000464030b0e0e4f04130021000102013b2a2a69292705410e0e0e0e0e0e|@1526,@1523,@1381,@1425,@1355,@1741| 1742:O1|@1743 1743:C2,16|00802b281f4d0007002d0e0e7e030003|@1098,I113| 1744:C6,88|007f1201000100f0ff294d004a0069644d0144000e0c000229562a35563a36564a373b3b577a0e0e0e0c000757293e4d0225002b4d0320000e0c000464030b0e0e4f04130011000102013b2a2a69292704410e0e0e0e0e0e|@1526,@1523,@1381,@1425,@1355,@1744| 1745:O1|@1746 1746:C2,16|00802b404d0008002d0e0e0e7e030003|@1098,I113| 1747:O1|@1748 1748:C1,8|00823b2c2f2f6b44|@1749| 1749:S36|50415253455f5452454528292e6d6b416273747970654465636c61726174696f6e283329 1750:C7,72|007f5607294d003f0069644d0139000e0e0c00020e4f022f0001000257193e4d0325002b4d0420000e0c000464030b0e0e4f05130001000102013b2a2a692966410e0e0e0e0e0e0e|@1526,@1523,@1381,@1751,@1425,@1355,@1750| 1751:C16,296|0080570e2c2a69644d001c010e0c000256184d0112012b2b4d020c010e0c00042a352b362c372d382e392f3a3023063123073223083323094d03ec000e0c000b2a2c2b4d04e1000e0e0c0004565828164d05d4002b4d06cf000c000464033a304d07c400694d00bf000c00025668567a29372c2c2b4d08af000c00043c28404d09a5004d0aa1000e0e0c0004312a2c4d0b95006b29270702885658282d4d0587002b4d0682000e0e0e0c000464035656584d017300322b4d026d000e0e0c00043c28404d0c61004d0a5d000e0e0c00043c28404d0951004d0a4d000e0e0c00044d0d44002c2b2d6b3c28404d0939004d0a35000e0e0c0004312a4d0e2a002d6b292707021c3c28404d091c004d0a18000e0c00042c2a4d0e0e004d0b0a006b29652705420e0e0e0e|@1752,@1381,@1667,@1391,@1335,@1395,@1425,@1355,@1379,@1408,@1581,I11,@1618,@633,-8,@205| 1752:S48|50415253455f44454328292e7061727365446563283329646563283429657863657074696f6e42696e64696e67283129 1753:O1|@1754 1754:C1,8|008028052c69420e|@1755| 1755:S13|45784465636c61726174696f6e 1756:C2,40|00802b56180c0002293b4d001a000e0e0e0c0003030a2c56272d0e0e7d0400022964420e0e0e0e0e|@1316,I229| 1757:C1,16|00802b56180c0002502b56172c800002|@1758| 1758:S35|50415253455f44454328292e6d6b4c6f63616c426f6479466978456e76283529283129 1759:O1|@1760 1760:C2,16|00804d000a002c69420e0e0e0e0e0e0e|@1762,@1761| 1761:C3,24|00802b56174d000f004d010b002e0e7b050300040e0e0e0e|@1764,-1,@1763| 1762:S14|496e742e7363616e283129283129 1763:O1|@1765 1764:S17|496e742e7363616e283129283129283129 1765:C8,256|00822b4d00f9004d01f5000e0e0c00030a02000d0011000a00281002083d020528080201403b3b3b31310e0e0e0c0002293b4d02ca000e0e0e0c000303033b02bc293529352a3628092b4d03b2000e0e0e0c0003030c2a280d4d03a3000c000302013b03033c020c2a28204d0291000e0e0c0003031229220c220c4d048100220d0e0e7b050d00042a282b4d0271000e0e0c0003030c290e0e4f056300800002025a2a282d4d0257000c000303033c020b2a287e4d0248000e0c00030335290e0e4f053b00800002293b4d0232000e0e0e0c000303033b0217293529352a362a4d061c000e0c0002292b692968012705640209220c4f05070080000266270544|@1767,-2,I107,I229,I248,@1763,@1766,I111| 1766:C6,224|008056042928104d00d5000e0e0c00036403bb2b56180e0e0e0c0002293b4d01be000e0e0e0c000303033b029e293529352a362a28304d01a6000e0e0e0c00034d029c000e0c0002030c3b3b314f038f0061000402742956580c0002293b4d017e000e0e0e0c000303093b2b69296801640256293529352a362a28784d0160000e0c000303033c020b2a28584d0150000e0c000303253b3b2b4f034300a10004293b4d013a000e0e0e0c000303093b2f692968016402012964020d3b3b220c0e0e4f031b00a1000466646664020a3b3b2d4f040b00210004420e0e0e0e0e0e0e|@1769,I113,I229,I218,@1770,@1768| 1767:S11|496e742e7363616e283329 1768:C8,160|00822b56180c0002293b4d0092000e0e0e0c0003030f2e03092d2d692968016402013b0279293529352a362a28304d016e000e0e0e0c0003031d564428302a4d025d000e0e0c00032c2a4d0352000e0e0e0c00036502013b03365644312a4d043e000e0e0e0c0003292d4d0232000e0e0e0c00032928304d0525000e0e0c00033c2a2f0e0e4f061700a100042704020d3103093030692968016402013b666444|@1772,I229,I231,I106,I234,I108,I107,@1768| 1769:S25|496e742e7363616e283329726561645f6e756d626572283129 1770:C8,328|00822b56180c0002293b4d003a010e0e0e0c0003030f2e03092d2d692968016402013b06ca293529352a362a28304d0116010e0e0e0c0003030c2a28394d0207010c000302013b03323028104d03f8000e0c0003292c4d04ee000e0e0e0c00032928304d05e1000e0e0c00033c2a2e0e0e4f06d3009100046602ca2a28414d01c6000e0e0e0c0003030c2a28464d02b7000c000302013b033f3028104d03a8000e0c0003292c4d049e000e0e0e0c00032928414d0591000e0e0c000329404d0486000e0e0e0c00033c2a2f0e0e4f067700a100042704026d2a28614d0169000e0e0c000303102a28664d025b00020255000c000302013b033f3028104d0348000e0c0003292c4d043e000e0e0e0c00032928614d0531000e0e0c000329404d0426000e0e0e0c00033c2a2f0e0e4f061700a100042704020d3103093030692968016402013b666444|@1771,I229,I231,I232,I108,I106,I107,@1770| 1771:S29|496e742e7363616e283329726561645f6865785f646967697473283329 1772:S25|496e742e7363616e283329726561645f646967697473283329 1773:O1|@1774 1774:C4,64|00812c4d0039000e0e0c00024d0130002e2b6a292e0c00023b2a0e0e0e0c000264293b4d0219000e0e0c000303033b0208293529352968016566430e0e0e0e0e|@1776,I223,@1775,I229| 1775:C5,88|008056082c2a4d004e000e0e0e0c00036403033b023a5607294d013b000c000203032902182c28084d022c000e0c00032a2a4d0322000e0e0e0c0003642d3c4d0215000e0e0c00032a2a692968012704420e0e0e0e0e0e0e|@1777,I251,I105,I239,I252| 1776:S23|537472696e674376742e7363616e537472696e67283229 1777:S29|537472696e674376742e7363616e537472696e67283229726472283129 1778:S11|507265636564656e636520 1779:S37|206e6f7420616c6c6f7765642c206d757374206265206265747765656e203020616e642039 1780:C1,16|00802b3856172a2d7d0400020e0e0e0e|@1110| 1781:O1|@1782 1782:C1,8|00803b2c69420e0e|@1541| 1783:S8|5661726961626c65 1784:C10,184|0080560829372a23062a3b4d00a9000e0e0c00032a3b4d009e000e0e0e0c00032928444d0191000e0e0c00034d0288000e0c000203032902012a294d0379004d0475000e0e0c000327060368560756184d0364002b2b4d055e000e0e0e0c00042a352b362c372d382e392f3a3023063123073223083323094d063c000e0c000b2a2c2b4d0731000e0e0c0004565a29351208000100f3ff2e2a69642a0e0c0002643b0e0e0e4f080f007100022e2a6929270902013b420e0e|@1785,I253,I113,I218,@1667,@1099,@1391,@1335,@1395,@1784| 1785:S36|50415253455f44454328292e706172736544656328332964656328342976617273283129 1786:O1|@1787 1787:C1,8|00813f2c2e6a430e|@1788| 1788:S27|50415253455f5452454528292e6d6b446972656374697665283229 1789:C9,144|0080560829372a23062a3b4d0081000e0e0c00032a3b4d0076000e0e0e0c00032928444d0169000e0e0c00034d0260000e0c000203032902012a294d0351004d044d000e0e0c00032706033c560756184d033c002b2b4d0536000e0e0e0c00040402003c28403b4d0625000e0e0c00042a2c452a46502a3b0e4f0713006100022a2a6929270802013b420e0e0e0e0e0e|@1785,I253,I113,I218,@1667,@1099,@1391,I11,@1789| 1790:O1|@1791 1791:C2,24|00803c28403b4d000e000e0e0e0c0004280b2d2b6a64420e|@1792,I11| 1792:S26|50415253455f5452454528292e6d6b4f70656e54726565283129 1793:S2|6974 1794:C1,16|00822d2d2d6a2964440e0e0e0e0e0e0e|@1795| 1795:S28|50415253455f5452454528292e6d6b56616c42696e64696e67283329 1796:C7,120|00805607561729352a362b372c382d392e3a2f23063023073123083223094d0056000e0e0e0c000b4d014c002a3c2e352f36303731383239333a342306220c2307220d2308220e23094d022b000c000e0402004d0321001b0f273b3c3c2e4d0416000e0e0e0c00075029644d050900307d0700020e0e0e0e|@1798,@1335,@1797,@1111,@205,@1348,@1326| 1797:O1|@1799 1798:S36|50415253455f44454328292e7061727365446563283329676c6f62616c456e762d283129 1799:C2,16|00802b384d0008002a2d0e0e7d040002|@1110,@1800| 1800:S31|467265652074797065207661726961626c6573206e6f7420616c6c6f776564 1801:O1|@1802 1802:C4,464|00802b282b4d00c7010c000307d52b28434d00bb010c000307cb2b28424d00af010c000307d12b28414d00a3010c000307d52b28404d0097010c000307cb2b283f4d008b010c000303c82b28304d007f010c000303bc2b3c4d0074010e0c000303b02b282d4d0067010c000303a42b28304d005b010c000303982b3c4d0050010e0c0003038c2b283a4d0043010c000303802b28344d0037010c000303742b28364d002b010c000303682b28174d001f010c0003035c2b28134d0013010c000303502b280c4d0007010c000303442b28064d00fb000c000303382b28204d00ef0002042d002b000e0e0c000303242b280f4d00db00020219000c000303142b281a4d01cb000204090007000e0e0c000303033c02b72b28074d00b4000e0c000303782b280d4d00a7000c0003036c2b28184d009b000c000303602b28154d008f000c000303542b28124d0083000c000303482b28114d0077000c0003033c2b28144d006b000c000303302b280b4d005f000c000303242b3d4d0054000e0c000303182b281d4d0047000c0003030c2b281e4d013b000c000303033c022f2b28224d012c000e0c000303033c021f2b28264d011c000e0c000303033c020f2b28214d020c002d0e0e0e7e030003420e0e0e|@1388,I230,I229,I113| 1803:C20,576|0080560829372a23062a3b4d0031020e0e0c00032a3b4d0026020e0e0e0c00032928444d0119020e0e0c00034d0210020e0c000203032902012a2928394d03ff010c0003030c293b4d04f4010e0c000303033b06cc57672a2a4d05e3010c00036407dc29324d05d7010c00034d02d0010e0c000203155668292309294d06c0014d07bc010e0c00036502013b03515668567829352a362b372c382d392e3a2f23063023073123083223094d0892010e0e0e0c000b4d0988012a3b2e352f36303731383239333a342306220c2307220d2308220e23094d0a67010c000e6602013b0402002b28264d0456010e0e0e0c000303261209000100f1ff5698120b000100f2ff292b2d4f0b3701d100042d2a454d0c2d0146260506da2b28224d042101020217010e0e0c0003032a1209000100f1ff5698120b000100f2ff292b2d0202eb004f0dfb00d100042d2a454d0ef10046260502c12b28214d04e5000e0e0c000303251209000100f1ff5698120b000100f2ff292b2d4f0fc700d1000457c82e2b452a462606028e2b28144d04b2000e0e0e0c000303251209000100f1ff5698120b000100f2ff292b2d4f0f9300d1000457c82e2b452a462606025a568829352a362b372c382d392e3a2f23063023073123083223094d0867000c000b120b000100f1ff56b8120d000100f2ff293c2c2e020221001212000100f5ff0e0e0c0005292e4d103a000e0e0e0c000357f8312b452a46260929352a36290e0e0e4f111f00a100022b2a69292706020e5668283b2a4d120b000c00033b652706420e0e0e|@1805,I253,I113,I218,I230,I229,@1099,@7295,@960,@1335,@1806,@1111,@1809,@1923,@1925,@1936,@1899,@1804,@1803,@1320| 1804:O1|@1938 1805:S38|50415253455f44454328292e70617273654465632833297061727365546f7044656373283129 1806:O1|@1807 1807:C2,16|00802b384d0008002a2d0e0e7d040002|@1545,@1808| 1808:S74|4d4c205374616e6461726420726571756972657320273b27206265747765656e20646966666572656e74206b696e6473206f6620746f702d6c6576656c206465636c61726174696f6e2e 1809:C4,40|00822c4d0021000e0e0c00023b3b0e0e0e4f011300200001644d020b002e0e0e7d0700020e0e0e0e|@1811,@1102,@1812,@1810| 1810:O1|@1921 1811:S36|50415253455f44454328292e706172736544656328332966756e63746f72446563283329 1812:C5,56|007f3b0e0e4f002f0001000256183e4d0125002b4d0220000e0c000464030b0e0e4f03130001000102013b2a2a692966410e0e0e0e0e0e0e|@1356,@1814,@1813,@1355,@1812| 1813:O1|@1920 1814:C25,1136|0080560829352a362b372c382d392e3a2f23063023073123083223094d0050040e0c000b562758392a2a69654d0140040e0c000256384d0236042b2b4d0330040e0c00042a352b362c372d382e392f3a3023063123073223083323094d0010040e0c000b2a2c2b4d0405040e0e0c0004567829372a23062a3b4d05f3030c00032a3b4d05ea030e0e0e0c00032928444d06dd030e0e0c00034d07d4030e0c000203032902012a2928344d06c3030c00032705030a294d08b7030c0002020a28282a4d09ab030c0003569758ab2a2a69654d019c030e0c000204040056b829372a23062a3b4d0588030e0c00032a3b4d057e030e0e0e0c00032928444d0671030e0e0c00034d0768030e0c000203032902012a2928354d0657030c0003270603243b4d0a4b030c00023c28403b4d0b40030e0c00042b3c454d0c3503462a472b48260306dc56b829372a23062a3b4d051f030c00032a3b4d0516030e0e0e0c00032928444d0609030e0e0c00034d0700030e0c000203032902012a294d0df1024d0eed020e0e0c00032706033456b856c9292b2e0e0e4f0fd702f20004654d0acf020c00023c28403b4d0bc4020e0c00042b3c454d0cb902462a472b48260306d32a4d10ab02694d01a6020e0e0e0c000256c84d029a022b2b4d0394020e0c00042a352b362c372d382e392f3a3023063123073223083323094d0074020e0c000b2a2c2b4d0469020e0e0c00041211000100020029372a23062a3b4d055202020296000e0e0e0c00032a3b4d0542020e0e0e0c00032928444d0635020e0e0c00034d072c020e0c000203032902012a29282f4d061b020c00032705030a294d080f020c0002020a283a2a4d0903020c0003314d11fb01694d01f6010e0e0e0c00021214000100020012150001000300292b2d02022300161200d6011900020000043c28403b4d0bc8010e0c0004220c3c4533462a472b48260d2956c829372a23062a3b4d05aa010e0e0e0c00032a3b4d059e010e0e0e0c00032928444d0691010e0e0c00034d0788010e0c000203032902012a2928354d0677010c00032705030a294d086b010c0002020a28292a4d095f010c000356e829372a23062a3b4d054f010c00032a3b4d0546010e0e0e0c00032928444d0639010e0e0c00034d0730010e0c000203032902012a2928324d061f010c000312160001000200282f4d130f012b4d140a010e0e0e0c00046403033c02171216000100020028324d13f1002b4d14ec000e0c000464033412160001000100294d15d90069644d01d3000c00021217000100020012180001000300292b2d161200ba001c00020000046602044d16ad001217000100020029372a23062a3b4d059b000c00032a3b4d0592000e0e0e0c00032928444d0685000e0e0c00034d077c000e0c000203032902012a29282d4d066b000c00032705030a294d085f000c0002020a283d2a4d0953000c000312190001000100121a0001000200121b0001000300292b2d0e16170032001f00020000040407003c28403b4d0b21000e0e0c00042a2213452c46221d47221a4833492a4a324b502a271e420e0e0e0e0e|@1816,@1335,@1381,@1437,@1391,@1395,I253,I113,I218,@1102,@1320,@1817,I11,I48,@1820,@1099,@1822,@1433,@1885,@1849,@1425,@1355,@1379,@633,@1815| 1815:C35,976|00823b571d4d00c7032a69644d01c0030e0c0002292e4d02b603314d03b1030e0e0c00052e4d04a703694d01a2030e0e0e0c0002294d05970369644d0191030e0e0c000228234d068603324d0781030e0e0c0004036a290e0e4f08730340000231373223062a3b4d0965030e0e0c00032a3b4d095a030e0e0e0c00032928444d0a4d030e0e0c00034d0b44030e0c000203032902012a29404d0a34030e0c00032705030a314d0c27030c0002020e4d0d1e03324d0e19030e0e0c00032a6506cc28134d060a03324d0705030e0e0c000407d030353136323733383439220c3a220d2306220e2307220f2308221023094d0fdd020e0e0c000b040300333634370403003b2a4d10c8020e0c00035029362a374d11bb022e2b6a2f2c452a462e47502f57da332a69644d01a5020e0e0c00022a22122b0e1612009602120001000004221237221323062a3b4d0983020c00032a3b4d097a020e0e0e0c00032928444d0a6d020e0e0c00034d0b64020e0c000203032902012a2928104d0a53020c00032705031222124d0c4602020233020e0e0e0c000202124d13360222134d0e3002020298000e0c0003220c4d142202694d011d020e0e0c00022d22152b0e1615000e02150001000004293b69221637221723062a3b4d09f8010e0c00032a3b4d09ee010e0e0e0c00032928444d0ae1010e0e0c00034d0bd8010e0c000203032902012a29404d0ac8010e0c00032705030e22164d0cba010e0e0e0c0002020e4d0dae0122174d0ea8010e0c00032e2b3b22124d169b010c0005271006ca294d178f01694d018a010e0e0e0c00024d1880012a334d197a010e0e0e0c000428344d066e01344d0769010e0e0c000407d832373323062a3b4d0957010c00032a3b4d094e010e0e0e0c00032928444d0a41010e0e0c00034d0b38010e0c000203032902012a2928354d0a27010c00032705031a404d1a1b010c0002294d1b13013b3b6b4d1c0c013b2b6a65026f576b2c2a69644d01fc000e0c000233373423062a3b4d09ed000e0e0c00032a3b4d09e2000e0e0e0c00032928444d0ad5000e0e0c00034d0bcc000202b9000e0c000203032902012a57cc2a2a4d1db6000e0e0e0c00032706030a294f08a700700002020a34342b4f159b009100046433373423062a3b4d098c00020263000e0c00032a3b4d097e000e0e0e0c00032928444d0a71000e0e0c00034d0b68000e0c000203032902012a2928354d0a57000c00032705030a334d0c4b000c0002020a2829344d0e3f000c00033c28403b4d1e34000e0c00044d1f2c002c2e2c6b6602153c28403b4d1e1d000e0e0c00044d2014002b2b6a64653b2a0e0e4f2107006000022706440e|@1888,@1813,@1381,@1889,@1405,@1433,@1890,@1425,@1355,@1892,I253,I113,I218,@1102,@1210,@1320,@1335,@1302,@1913,@1896,@1208,@1745,@1815,@1901,@1914,@1437,@1391,@1893,I48,-7,@1099,I11,-2,-8,@1887| 1816:S49|50415253455f44454328292e706172736544656328332966756e63746f72446563283329646f46756e6374446563283129 1817:O1|@1818 1818:C2,16|00804d000a002c69420e0e0e0e0e0e0e|@1819,-5| 1819:S6|536967446563 1820:O1|@1821 1821:C3,136|00802b28294d007f000c000303033c026f2b28254d0070000e0c000303033c025f2b28214d0060000e0c000303033c024f2b280b4d0050000e0c000303033c023f2b281e4d0040000e0c000303033c022f2b28284d0030000e0c000303033c021f2b281d4d0020000e0c000303033c020f2b28074d0110002d0e0e0e7e030003420e0e0e0e0e0e0e|@1388,I229,I113| 1822:C2,40|00822d370404003b2a1205000100f6ff0e0c00035029383b3b4f000b004000022704440e0e0e0e0e|@1824,@1823| 1823:C29,1016|0080560712020003000b002a2a69654d00e5030e0e0c0002561756282b2b4d01d6032c4d02d1030e0e0c0005564829372a23062a3b4d03bf030c00032a3b4d03b6030e0e0e0c00032928444d04a9030e0e0c00034d05a0030e0c000203032902012a2928074d068f030c0003037156a829352a362b372c382d392e3a2f23063023073123083223094d076c030e0c000b56c7120e0003000c002a2a69654d0057030c000256d9293556f929364d08480312130001000200692c2b2b6a3c2a311217000200f9ff0e0e0e0c000429324d0926030e0e0e0c0003293b69270b06cf29281d4d0612030e0e0e0c0003036956a829352a362b372c382d392e3a2f23063023073123083223094d07ec020e0c000b56c7120e0003000c002a2a69654d00d7020c000256d84d0ace020e0e0e0c00025056d93b0e4f0bbf02e00001654d0cb7020c0002292c4d09ae020e0e0e0c0003293b69270506d62928284d069a020e0e0e0c0003036d56a829352a362b372c382d392e3a2f23063023073123083223094d0774020e0c000b56c7120e0003000c002a2a69654d005f020c000256d84d0a56020e0e0e0c00025056d93b020279010e4f0d4302e00001654d0c3b020c0002292c4d0932020e0e0e0c0003293b69270506d029281e4d061e020e0e0e0c0003031a56a84d0a10020e0c00023b56c83b0e4f0e0302d00001270406cf29280b4d06f5010e0e0c0003031a56a84d0ae8010e0c00023b56c83b0e4f0fdb01d00001270406cf2928214d06cd010202fa000e0e0c0003032456a84d0abc010e0c00023b56c83b0e4f10af01d00001654d11a7010c0002293b696602cf2928294d0697010c0003039956a84d0a8c010e0c00024d1284014d0080010e0c000256c756d82b2b4d1372012c4d026d010e0e0c000556f712110003000c002a2a69654d005701020284000c0002294d144b0169644d0045010e0e0c00021211000100020012120001000300292b2d02025c0016150026011600020000043b3b0e0e0e16160016011600000000022b2a6929654d170701020234000c0002293b69270b022a2928254d06f2000e0e0e0c0003031a56a84d0ae4000e0c00023b56c83b0e4f18d700d00001270402013b56b829372a23062a3b4d03c2000e0e0e0c00032a3b4d03b6000e0e0e0c00032928444d04a9000e0e0c00034d05a0000e0c000203032902012a2928394d048f000c00032706030e56b84d0a82000e0e0e0c000202013b56c829372a23062a3b4d036c000e0c00032a3b4d0362000e0e0e0c00032928444d0455000e0e0c00034d054c000e0c000203032902012a12130003000b002a2a4d1935000e0e0c0003270703283b4f1a2700c10002293b4d061e000e0e0e0c000303032b020c3b2c0e0e4f1b0b00e00002646402012a270c42|@1826,@1381,@1827,@1405,I253,I113,I218,I229,@1335,@1828,@1804,@1102,@1831,@1738,@1832,@1833,@1839,@1847,@1866,@1853,@1856,@1437,@1849,@1869,@1871,@1874,@1099,@1823,@1825| 1824:S39|50415253455f44454328292e70617273654465632833297369676e617475726553706563283329 1825:C3,48|00802b3b4d0028000e0c000303091201000100f2ff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1884,I229,@1825| 1826:S57|50415253455f44454328292e70617273654465632833297369676e6174757265537065632833297061727365536967456e7472696573283129 1827:S9|5369676e6174757265 1828:C7,112|00805607561729352a362b372c382d392e3a2f23063023073123083223094d004e000e0e0e0c000b2e4d0143004d023f000c00034d0338002a69292c3c30353136323733383439220c3a220d2306220e2307220f2308221023094d0412000e0e0e0c000e504d0507002705420e0e0e0e|@1830,@1335,@1375,@344,@1829,@1111,@633| 1829:C1,16|00802b3856172a2d7d0400020e0e0e0e|@1110| 1830:S75|50415253455f44454328292e70617273654465632833297369676e6174757265537065632833297061727365536967456e7472696573283129746869735369672d6e6577656e762d283129 1831:C6,96|007f1201000100f2ff294d00520069644d014c000e0c0002291203000100f1ff351204000100f1ff361205000100f1ff373b3c58700c000758283e4d0221002b4d031c000e0c000464030b0e0e4f040f0011000102013b2a2a69292704410e0e|@1526,@1523,@1381,@1425,@1355,@1831| 1832:C6,96|007f1201000100f2ff294d00520069644d014c000e0c0002291203000100f1ff351204000100f1ff361205000100f1ff373c3c58700c000758283e4d0221002b4d031c000e0c000464030b0e0e4f040f0011000102013b2a2a69292704410e0e|@1526,@1523,@1381,@1425,@1355,@1832| 1833:C5,56|007f3b0e0e4f002f000100021202000100f2ff3e4d0120002b4d021b000c000464030b0e0e4f030f0001000102013b2a2a692966410e0e0e|@1356,@1834,@1425,@1355,@1833| 1834:C14,256|0080570829352a362b372c382d392e3a2f23063023073123083223094d00e0000e0c000b5727294d01d50069644d02cf000c000257384d03c6002b2b4d04c0000e0c00042a352b362c372d382e392f3a3023063123073223083323094d00a0000e0c000b2a2c2b4d0595000e0e0c0004577829372a23062a3b4d0683000c00032a3b4d067a000e0e0e0c00032928444d076d000e0e0c00034d0864000e0c000203032902012a29282f4d0753000c00032705030a294d0947000c0002020a283a2a4d0a3b000c00035797120b0004000d002a2a69654d0227000c000257a857b22b2b2b4d0b19000e0e0c0004312a220d4d0c0c0022120e7b051000040e0e0e0e|@1836,@1335,@1433,@1381,@1437,@1391,@1395,I253,I113,I218,@1102,@1320,@1408,@1835| 1835:O1|@1837 1836:S73|50415253455f44454328292e70617273654465632833297369676e6174757265537065632833297061727365536967456e7472696573283129746869735369672d646f56616c283129 1837:C1,16|008228082c2f2f6b440e0e0e0e0e0e0e|@1838| 1838:S25|535452554354555245535f28292e6d6b56616c536967283329 1839:C5,56|007f3b0e0e4f002f000100021202000100f2ff3e4d0120002b4d021b000c000464030b0e0e4f030f0001000102013b2a2a692966410e0e0e|@1356,@1840,@1425,@1355,@1839| 1840:C12,192|0080570829352a362b372c382d392e3a2f23063023073123083223094d00a0000e0c000b5727294d01950069644d028f000c000257384d0386002b2b4d0480000e0c00042a352b362c372d382e392f3a3023063123073223083323094d0060000e0c000b2a2c2b4d0555000e0e0c0004577828164d0648002b4d0743000c0004640328577712090004000d002a2a69654d022c000e0c0002578857942b2b2b4d081d000e0e0c00046602044d0911002c2a314d0a0a00220d0e0e0e7b050b0004|@1842,@1335,@1843,@1381,@1667,@1391,@1395,@1425,@1355,@1408,@205,@1841| 1841:O1|@1845 1842:S72|50415253455f44454328292e70617273654465632833297369676e6174757265537065632833297061727365536967456e7472696573283129746869735369672d646f4578283129 1843:O1|@1844 1844:C2,16|00802b28164d0007002d0e0e7e030003|@1098,I113| 1845:C2,16|00824d000a002c2f2f6b440e0e0e0e0e|@1846,-1| 1846:S24|535452554354555245535f28292e6d6b4578536967283329 1847:C5,56|007f3b0e0e4f002f000100021202000100f2ff3e4d0120002b4d021b000c000464030b0e0e4f030f0001000102013b2a2a692966410e0e0e|@1356,@1848,@1425,@1355,@1847| 1848:C15,264|0080570829352a362b372c382d392e3a2f23063023073123083223094d00e8000e0c000b57284d01de004d02da002b4d03d5000e0e0c00042a352b362c372d382e392f3a3023063123073223083323094d00b4000e0c000b2a2c2b4d04a9000e0e0c0004576829372a23062a3b4d0597000c00032a3b4d058e000e0e0e0c00032928444d0681000e0e0c00034d0778000e0c000203032902012a29282f4d0667000c00032705030a294d085b000c0002020a283a2a4d094f000c00035787120a0004000d002a2a69654d0a3b000c0002579857a9292b2d0e0e4f0b2b00d300040406003c28403b4d0c1d000e0e0c00042a220d4534464d0d0e00473b482a492c4a502a270e420e0e|@1850,@1335,@1667,@1425,@1391,@1395,I253,I113,I218,@1102,@1320,@1381,@1849,I11,@633| 1849:C25,416|00824d009a014d0196010e0e0e0c0002292d4d028a01304d0385010e0e0c000528244d047a01304d0575010e0e0c000403a32d4d066901694d0164010e0c0002294d075b0169644d0155010e0e0c0002294d084b0169644d0145010e0e0c000230302b0e0e4f093701510004644d0a2f010c00022f373023062a3b4d0b21010e0e0c00032a3b4d0b16010e0e0e0c00032928444d0c09010e0e0c00034d0d00010e0c000203032902012a29404d0cf0000e0c00032705030b2f4d0ee3000c000250020e4d0fd900304d10d4000e0c000350296402a52e372f23062a3b4d0bc0000e0c00032a3b4d0bb6000e0e0e0c00032928444d0ca9000e0e0c00034d0da0000e0c000203032902012a293c4d0c90000e0c00032705035e2d4d078300694d017e000e0e0e0c00024d1174002a314d126e000e0e0e0c000430353136323733383439220c3a220d2306220e2307220f2308221023094d1347000c000b2a322b4d143d000e0e0c00042b27044d1531000e0e0c000202044d1626003b282a4d041f00324d051a000e0e0e0c0004030c2a0e0e4f170b0040000202012a2704440e0e|@1852,@1853,@1381,@1856,@1405,@1425,@1355,@1745,@1857,@1096,@1822,@1817,I253,I113,I218,@1102,@1210,@1320,@1437,@1391,@1335,@1395,@1859,@633,@1851| 1850:S79|50415253455f44454328292e70617273654465632833297369676e6174757265537065632833297061727365536967456e7472696573283129746869735369672d646f537472756374757265283129 1851:C25,632|0080560829372a23062a3b4d0069020e0e0c00032a3b4d005e020e0e0e0c00032928444d0151020e0e0c00034d0248020e0c000203032902012a29281d4d0137020c00032705030a294d032b020c0002020e4d0422022a4d051d020e0e0c0003562829352a362b372c382d392e3a2f23063023073123083223094d06fa010e0e0e0c000b0403003b2a4d07eb010c00035029352a362b372c3b2a57b20e0c000356a7294d08d10169644d09cb010c000256b84d0ac2012b2b4d0bbc010e0c00043030301211000200fbff0e0e0e0c000456e829372a23062a3b4d009b010c00032a3b4d0092010e0e0e0c00032928444d0185010e0e0c00034d027c010e0c000203032902012a29282d4d016b010c00032705030a294d035f010c0002020a283d2a4d0553010c000312110001000100121200010002004d0c3e012b4d0d39012c4d0e34010e0c000512140001000100294d0f240169644d091e010e0e0e0c0002294d10130169644d090d010e0e0c0002121500010002002a2a324d11fa000e0e0e0c00042218220d342c22164d12e8000e0c000612180001000200282a4d13d7002b4d14d2000e0e0e0c000464030f290e161500c20019000100000202b6121800010002003e4d13ae002b4d14a9000e0e0c000464039c1218000100020029372a23062a3b4d008f000c00032a3b4d0086000e0e0e0c00032928444d0179000e0e0c00034d0270000e0c000203032902012a29281d4d015f000c00032706030e291615005200190001000002024312180001000200292306293b4d003a000e0e0e0c00032928444d012d000e0e0c00034d0224000e0c00026403054d16190010293b3e4d1711000e0e0c0004503b502b650201292717420e|@1863,I253,I113,I218,@1102,@1191,@1320,@1335,@1302,@1379,@1381,@1389,@1391,@1403,@1191,@1405,@1857,@1523,@1408,@1862,@1425,@1355,@1851,@1353,I255| 1852:S40|50415253455f44454328292e706172736544656328332970617273655369676e6174757265283329 1853:O2|@1437,@1854 1854:O1|@1855 1855:C2,16|00802b28244d0007002d0e0e7e030003|@1098,I113| 1856:S18|5374617274206f66207369676e6174757265 1857:O1|@1858 1858:C2,16|00802b282a4d0007002d0e0e7e030003|@1098,I113| 1859:O1|@1860 1860:C2,16|00804d000a002c69420e0e0e0e0e0e0e|@1861,-6| 1861:S14|5369676e61747572654964656e74 1862:O1|@1864 1863:S56|50415253455f44454328292e706172736544656328332970617273655369676e617475726528332967657457686572655479706573283129 1864:C2,24|00842b302f313068054d000b002a69641f050e0e0e0e0e0e|@1865,-9| 1865:S28|535452554354555245535f28292e6d6b576865726554797065283529 1866:O1|@1867 1867:C1,8|008028072c69420e|@1868| 1868:S12|537472756374757265446563 1869:C10,168|0080570829372a23062a3b4d0099000e0e0c00032a3b4d008e000e0e0e0c00032928444d0181000e0e0c00034d0278000e0c000203032902012a293c4d0168000e0c00032706035b570757184d0358002b2b4d0452000e0e0e0c00042a352b362c372d382e392f3a3023063123073223083323094d0530000e0c000b2a2c2b4d0625000e0e0c00042b27054d0719000e0e0c00023b4f080f001100022a2a69296602013b420e0e0e|@1870,I253,I113,I218,@1437,@1391,@1335,@1395,@1859,@1869| 1870:S74|50415253455f44454328292e70617273654465632833297369676e6174757265537065632833297061727365536967456e7472696573283129746869735369672d736967696473283129 1871:O1|@1872 1872:C2,16|00804d000a002c69420e0e0e0e0e0e0e|@1873,-3| 1873:S10|496e636c756465536967 1874:C5,56|007f3b0e0e4f002f000100021202000100f2ff3e4d0120002b4d021b000c000464030b0e0e4f030f0001000102013b2a2a692966410e0e0e|@1356,@1875,@1437,@1355,@1874| 1875:C18,392|0080570829352a362b372c382d392e3a2f23063023073123083223094d0068010e0c000b5728281d4d015c012b4d0257010c0004574712060004000e002a2a69654d0343010c000257584d043a012b2b4d0534010e0c0004577829372a23062a3b4d0623010c00032a3b4d061a010e0e0e0c00032928444d070d010e0e0c00034d0804010e0c000203032902012a29282d4d07f3000c00032705030a294d09e7000c0002020a283d2a4d0adb000c000357983b0e0e4f0bcf00a000012e2a69322a220d4d0cc1000e0e0c000457e829372a23062a3b4d06af000c00032a3b4d06a6000e0e0e0c00032928444d0799000e0e0c00034d0890000e0c000203032902012a293e4d0780000e0c00032706031e57e8292309294d0d6e004d0e6a000e0e0e0c0003654d085f000c000202013b034f57e857f829352a362b372c382d392e3a2f23063023073123083223094d0037000c000b4d0f30002a3c2e352f36303731383239333a342306220c2307220d2308220e23094d100f000c000e260402023b5029270e420e0e|@1877,@1335,@1425,@1355,@1381,@1437,@1391,I253,I113,I218,@1102,@1320,@1878,@1879,@7295,@960,@1876,@1111| 1876:O1|@1882 1877:S77|50415253455f44454328292e70617273654465632833297369676e6174757265537065632833297061727365536967456e7472696573283129746869735369672d646f53686172696e67283129 1878:C7,88|007f580712020005000e002a2a69654d0045000e0e0c000258184d013a002b2b4d0234000e0c00041204000100f5ff282d4d0323002b4d041e000e0e0e0c000464030b0e0e4f050f0021000102013b2a2a69292705410e0e|@1356,@1381,@1437,@1391,@1389,@1355,@1878| 1879:O1|@1880 1880:C2,16|00824d000a002c2f2f6b440e0e0e0e0e|@1881,-4| 1881:S26|535452554354555245535f28292e6d6b53686172696e67283329 1882:C2,16|00802b384d0008002a2d0e0e7d040002|@1110,@1883| 1883:S42|73686172696e67202e2e2e20616e64202e2e2e206973206e6f7420616c6c6f77656420696e204d4c3937 1884:S15|4c6973742e40283229617070283129 1885:O1|@1886 1886:C2,16|00802b28254d0007002d0e0e7e030003|@1098,I113| 1887:C6,136|00805608282f4d007e002b4d0179000e0e0c000464032b560156185629292b2d0e4f0263005200042f2a3b4d0359000e0e0c000427040e0e0e4f044b000100020241560828324d003e002b4d0139000e0e0c000464032b560156185629292b2d0e4f0223005200042f2a3c4d0319000e0e0c000427040e0e0e4f040b0001000202012b420e0e0e0e|@1917,@1425,@1355,@1849,@1916,@1887| 1888:S35|50415253455f44454328292e706172736544656328332973747275637456616c283329 1889:S29|737472756374206f722066756e63746f72206170706c69636174696f6e 1890:O1|@1891 1891:C2,16|00802b28324d0007002d0e0e7e030003|@1098,I113| 1892:C9,104|008056090403002a362b370403003b2a4d0054000e0c00035029362a374d0147002e2b6a2f2c452a462e47502f344d023600694d0331000e0e0c000256a82b2a2c4f042300d20004404d051b000c0002294d0613003b3b6b4d070c002c2b6a270e420e0e0e0e0e0e|@1894,@1302,@1895,@1745,@1381,@1896,@1893,I48,-7| 1893:O1|@1910 1894:S47|50415253455f44454328292e706172736544656328332973747275637456616c283329737472756374456e64283129 1895:C2,40|00802b56180c0002293b4d001a000e0e0e0c0003030a2c56272d0e0e7d0400022964420e0e0e0e0e|@1316,I229| 1896:C2,16|00823b3b0e4f00070010000264440e0e|@1898,@1897| 1897:C12,384|00805607581f2a2a69654d0072010e0e0e0c0002561829372a23062a3b4d015f010c00032a3b4d0156010e0e0e0c00032928444d0249010e0e0c00034d0340010e0c000203032902012a2928394d022f010c00032706031756184d0422010e0e0e0c00023b4f0517012100026406d1561829372a23062a3b4d0104010e0c00032a3b4d01fa000e0e0e0c00032928444d02ed000e0e0c00034d03e4000e0c000203032902012a587e2a2a4d06d2000e0e0e0c00032707032056185629292b2d0e0e4f07bb005200043b4f05b3004100022a2a6929270502a1561829372a23062a3b4d019b000c00032a3b4d0192000e0e0e0c00032928444d0285000e0e0c00034d037c000e0c000203032902012a294d086d004d0669000e0e0c000327060358561829352a362b372c382d392e3a2f23063023073123083223094d094200020237000e0e0e0c000b56385649293c2c30120a000200f5ff0e0e0c0005292d4d0a1e000e0e0e0c00033b4f0513007100022a2a6929270802013b64420e0e0e0e0e|@1900,@1381,I253,I113,I218,@1102,@1897,@1099,@1899,@1559,@1335,@1804| 1898:S32|50415253455f44454328292e7061727365446563283329737472446563283329 1899:C21,448|00822d3528214d00b6012f4d01b1010e0e0c000403163b3b0e4f02a301200001644d039b012e0e0e7d07000228144d008e012f4d0189010e0e0c000407d02d352e362f3730383139323a332306342307220c2308220d23094d0464010e0c000b040300303631370403003b2a4d0550010e0c00035029362a374d0643012e2b6a2f2c452a462e47502f35303631373257da22102a69644d0726010e0e0e0c00022a22122b0e1608001601120001000004221237221323062a3b4d0903010c00032a3b4d09fa000e0e0e0c00032928444d0aed000e0e0c00034d0be4000e0c000203032902012a2928104d0ad3000c00032705030e22124d0cc6000e0e0e0c000202124d0dba0022134d0eb4000202a8000e0c00030403004d0fa5002211326a2a2a4531463047502a22154d109200694d078d000e0e0c00022a22182b0e1608007e00180001000004221837221923062a3b4d096b000c00032a3b4d0962000e0e0e0c00032928444d0a55000e0e0c00034d0b4c000e0c000203032902012a29404d0a3c000e0c00032705030e22184d0c2e000e0e0e0c0002020e4d11220022194d0e1c000e0c0003302b3c22174d120f00221c7b061b00054d13040064440e0e|@1902,@1425,@1355,@1903,@1866,@1335,@1302,@1906,@1381,@1896,I253,I113,I218,@1102,@1208,@1320,@1907,@1745,@1210,@1901,@633| 1900:S42|50415253455f44454328292e706172736544656328332973747244656328332967657444656373283129 1901:O1|@1908 1902:S38|50415253455f44454328292e7061727365446563283329737472756374757265446563283329 1903:C5,56|007f3b0e0e4f002f0001000256183e4d0125002b4d0220000e0c000464030b0e0e4f03130001000102013b2a2a692966410e0e0e0e0e0e0e|@1356,@1904,@1813,@1355,@1903| 1904:C18,432|0080560829352a362b372c382d392e3a2f23063023073123083223094d0090010e0c000b562758392a2a69654d0180010e0c000256384d0276012b2b4d0370010e0c00042a352b362c372d382e392f3a3023063123073223083323094d0050010e0c000b2a2c2b4d0445010e0e0c0004567829372a23062a3b4d0533010c00032a3b4d052a010e0e0e0c00032928444d061d010e0e0c00034d0714010e0c000203032902012a2928324d0603010c000356e8282f4d08f8002b4d09f3000c00046403033c021356e828324d08e2002b4d09dd000e0e0c000464032c56e7294d0ace0069644d01c8000e0c000256f812110001000300292b2d0e160b00b2001500020000046602044d0ca50056f829372a23062a3b4d0598000e0c00032a3b4d058e000e0e0e0c00032928444d0681000e0e0c00034d0778000e0c000203032902012a29282d4d0667000c00032705030a294d0d5b000c0002020a283d2a4d0e4f000c0003121200010001001213000100020012140001000300292b2d0e160f002e001800020000040406003c28403b4d101d000e0e0c00042a2216452213462c4733482a49324a502a2717420e0e0e0e|@1905,@1335,@1381,@1437,@1391,@1395,I253,I113,I218,@1425,@1355,@1379,@1849,@633,@1102,@1320,@1815,I11| 1905:S49|50415253455f44454328292e7061727365446563283329737472756374757265446563283329646f537472446563283129 1906:C2,40|00802b56180c0002293b4d001a000e0e0e0c0003030a2c56272d0e0e7d0400022964420e0e0e0e0e|@1316,I229| 1907:C1,16|00802b56180c0002502b56172c800002|@1758| 1908:C1,16|00833e2e302e3068051f040e0e0e0e0e|@1909| 1909:S27|535452554354555245535f28292e6d6b4c6f63616c646563283429 1910:C12,168|00807876613f3c28403b4d009a000e0e0e0c00042f3c4d018e000e0e0e0c00032928403b4d0080000e0c0004293b334d0275000e0e0c0004503c28402b4d0067000c00044d03600033693c28402b4d0056000e0e0e0c00044d044c002a302e6b2706053c0e0e00ff6d29353f4d0538000e0c000303262c4d042d004d0629000e0e0c00034d0720002a4d081b000c00034d0914004d0a10002b6a651002002910420e0e0e0e0e0e0e|@1912,I11,I106,I255,@576,-1,I229,@355,@1911,@344,@7141,@228| 1911:S16|486173685461626c652e686173683a20 1912:S21|486173685461626c652e686173684d616b65283129 1913:C2,40|00802b56180c0002293b4d001a000e0e0e0c0003030a2c56272d0e0e7d0400022964420e0e0e0e0e|@1316,I229| 1914:O1|@1915 1915:C2,16|00802b28344d0007002d0e0e7e030003|@1098,I113| 1916:O1|@1918 1917:S51|50415253455f44454328292e706172736544656328332973747275637456616c283329646f436f6e73747261696e7473283129 1918:C1,8|00823f2e2e2e6b44|@1919| 1919:S32|535452554354555245535f28292e6d6b536967436f6e73747261696e74283329 1920:C2,16|00802b28234d0007002d0e0e7e030003|@1098,I113| 1921:C1,8|00803d2c69420e0e|@1922| 1922:S10|46756e63746f72446563 1923:O1|@1924 1924:C2,16|00802b28264d0007002d0e0e7e030003|@1098,I113| 1925:C4,40|00822c4d0021000e0e0c00023b3b0e0e0e4f011300200001644d020b002e0e0e7d0700020e0e0e0e|@1927,@1102,@1928,@1926| 1926:O1|@1934 1927:S38|50415253455f44454328292e70617273654465632833297369676e6174757265446563283329 1928:C5,56|007f3b0e0e4f002f0001000256183e4d0125002b4d0220000e0c000464030b0e0e4f03130001000102013b2a2a692966410e0e0e0e0e0e0e|@1356,@1929,@1425,@1355,@1928| 1929:C15,264|0080560829352a362b372c382d392e3a2f23063023073123083223094d00e8000e0c000b56284d01de004d02da002b4d03d5000e0e0c00042a352b362c372d382e392f3a3023063123073223083323094d00b4000e0c000b2a2c2b4d04a9000e0e0c0004566829372a23062a3b4d0597000c00032a3b4d058e000e0e0e0c00032928444d0681000e0e0c00034d0778000e0c000203032902012a29282d4d0667000c00032705030a294d085b000c0002020a283d2a4d094f000c00035687120a0003000a002a2a69654d0a3b000c0002569856a9292b2d0e0e4f0b2b00d200040404003c28404d0c1e004d0d1a000e0e0e0c00042a220d4534462a472c48502a270e420e0e0e0e0e|@1931,@1335,@1667,@1425,@1391,@1395,I253,I113,I218,@1102,@1320,@1381,@1849,@1930,I11| 1930:O4|@1933,@1932,0,0 1931:S49|50415253455f44454328292e70617273654465632833297369676e6174757265446563283329646f536967446563283129 1932:S9|554e444546494e4544 1933:O3|0,@575,@457 1934:C1,8|008028052c69420e|@1935| 1935:S12|5369676e6174757265446563 1936:O1|@1937 1937:C2,16|00802b28224d0007002d0e0e7e030003|@1098,I113| 1938:C2,24|00813c28403b4d000e000e0e0e0c000428062e2e2c6b6443|@1939,I11| 1939:S27|535452554354555245535f28292e6d6b546f704c6576656c283229 1940:O3|@1386,@1947,@1946 1941:C16,464|00812b372c23062a3b4d00c3010c00032a3b4d00ba010e0e0e0c00032928444d01ad010e0e0c00034d02a4010e0c000203032902012a29283f4d0193010c00032705033b2b352c362d372e382f39303a3123063223073323083423094d0370010e0c000b28222a4d0465010e0e0c00032928224d0459010e0e0c00036506cb2b372c23062a3b4d0046010e0e0e0c00032a3b4d003a010e0e0e0c00032928444d012d010e0e0c00034d0224010e0c000203032902012a56572a2a4d0512010e0e0e0c0003270603222b352c362d372e382f39303a3123063223073323083423094d03ec000e0c000b02692b372c23062a3b4d00db000c00032a3b4d00d2000e0e0e0c00032928444d01c5000e0e0c00034d02bc000e0c000203032902012a293b4d06ac000e0c000303033c020b2928454d079c000e0c000303054d089200104d098d002a4d008800020207000e0c00032927062c352d362e372f383039313a322306332307342308220c23094d0a60000e0c000b2e4d0b57004d0453000c0003292c4d044a000e0e0e0c0003294d0c3f004d043b000c00034d0d34002a69292e3c3435220c36220d37220e38220f3922103a221123062212230722132308221423094d0e0a0022150e0e0e7b0f0a000e|@1943,I253,I113,I218,@1329,@344,@1099,I234,I231,@52,@1360,@1335,@1944,@1945,@1942,@1111| 1942:C1,16|00802b3856172a2d7d0400020e0e0e0e|@1110| 1943:S20|534b4950535f28292e6e6f74666f756e64283229 1944:S14|2065787065637465642062757420 1945:S10|2077617320666f756e64 1946:O1|@1951 1947:O3|@1386,@1949,@1948 1948:O1|@1950 1949:O3|@1386,@1389,@1357 1950:C2,16|00802b28404d0007002d0e0e7e030003|@1098,I113| 1951:C2,16|00802b28414d0007002d0e0e7e030003|@1098,I113| 1952:O3|@1386,@1954,@1953 1953:O3|@1386,@1955,@1559 1954:O3|@1386,@1923,@1936 1955:O3|@1386,@1957,@1956 1956:O1|@1959 1957:O1|@1958 1958:C2,16|00802b28214d0007002d0e0e7e030003|@1098,I113| 1959:C2,16|00802b28144d0007002d0e0e7e030003|@1098,I113| 1960:O3|@1386,@1961,@1379 1961:O3|@1386,@1433,@1890 1962:O3|@1386,@1661,@1745 1963:O3|@1386,@1504,@1505 1964:O3|@1386,@1559,@1957 1965:O3|@1386,@1437,@1966 1966:O1|@1967 1967:C2,16|00802b28134d0007002d0e0e7e030003|@1098,I113| 1968:O3|@1386,@1969,@1957 1969:O3|@1386,@1096,@1559 1970:O3|@1386,@1745,@1523 1971:O3|@1386,@1820,@1096 1972:O3|@1386,@1820,@1745 1973:O3|@1386,@1972,@1523 1974:O3|@1386,@1975,@1523 1975:O3|@1386,@1504,@1379 1976:O3|@1386,@1521,@1742 1977:O3|@1386,@1843,@1379 1978:O3|@1386,@1979,@1671 1979:O1|@1980 1980:C2,16|00802b28094d0007002d0e0e7e030003|@1098,I113| 1981:O3|@1386,@1982,@1671 1982:O1|@1983 1983:C2,16|00802b281c4d0007002d0e0e7e030003|@1098,I113| 1984:O3|@1386,@1843,@1641 1985:O3|@1386,@1684,@1433 1986:O3|@1386,@1505,@1987 1987:O1|@1988 1988:C2,16|00802b28374d0007002d0e0e7e030003|@1098,I113| 1989:O3|@1386,@1504,@1096 1990:O3|@1386,@1989,@1505 1991:O3|@1386,@1096,@1745 1992:O3|@1386,@1433,@1594 1993:O3|@1386,@1437,@1565 1994:O3|@1386,@1843,@1533 1995:O1|@1996 1996:C5,40|00824d0022002c694d011c002d2b6a4d0215002a6929314d030d00322f320e7b060800050e0e0e0e|@1998,@1999,@2001,@1997,I48| 1997:C1,16|00802b352c3656272d0e0e0e7e030003|@2012| 1998:S31|535452554354555245535f28292e646973706c617953747275637473283329 1999:C10,248|00832d3b4d00f0000e0c000303033b06cc2d36293b4d00df000c0003032a2e352d3b4d01d2000e0e0e0c0003030e562729384d02c2002a307d0a0002292e69312e0e0e0e7d0800022e352d3b4d01a8000e0c0003030e562729384d039a002a307d0a00022e282c4d048d000e0e0c000303033c020b2e283b4d047c000e0c00034d0574000e0c000256372923064d0667002a0e0e0e0c0002512b3069330c000250564729352c3b692a0c00025156572938332a0e0e0c000251566729373b2a0e0e0c000251567729354d072b002a0e0e0e0c000251333c4d081d00020215000e0e0c0003220e32220e2c220d220f0e7b060f00051f040e0e|@2000,I229,I232,@1364,@1364,I24,I218,@333,@329,I107| 2000:S45|535452554354555245535f28292e646973706c617953747275637473283329646973706c61794c697374283429 2001:C92,1968|00812b3b4d00a8070e0c0003030e560729384d019a072a2e7d0600022c354d028e074d038a070e0e0e0c00030a1100cd049100a100710181014904b1066d0385022400d9031503d505290719010d073700f501560729384d0455072a2e0e0e0e7d06000206ca2c364d05440756272c6a56272923064d0637072a0e0e0e0c000251563729384d0727072a0e0e0e0c000251564729354d0817072a0e0e0e0c0002514d090b072d69292f4d0a03073456a80e0c000550566729373b2a347d0c00022c36561729382b2a2f0e0e0e7d0700022c3656172923064d0bd5062a0e0c000251562729384d0cc7062a0e0e0e0c000251563729354d0db7062a0e0e0e0c0002514d0eab062e69292e4d0fa3063356980e0c000550565729354d1093062a0e0e0e0c000251566729384d1183062a02027a060e0e0e0c000251567729373b2a220c0e0e0e7d0d00022c364d12620656272c6a56272923064d1355062a0e0c000251563729384d1447062a0e0e0e0c000251564729354d1537062a0e0e0e0c0002514d162b062d69292f4d1723063456a80e0c000550566729373b2a347d0c00022c36561729382b2a2f0e0e0e7d0700022c3656172923064d18f5052a0e0c000251562729384d19e7052a0e0e0e0c000251563729354d1ad7052a0e0e0e0c0002514d1bcb052e69292e4d0fc3053356980e0c000550565729354d1cb3052a0e0e0e0c000251566729384d1da3052a0e0e0e0c000251567729373b2a220c0e0e0e7d0d00022c372d3856272923064d1e7f052a0e0e0e0c000251563729384d1f6f052a0e0e0e0c000251564729354d205f052a0e0e0e0c000251565729382f4d214e054d224a050e0e0e0c00032a0c000251566729354d2337052a0e0e0e0c000251323c4d0329050e0e0c000356873b4d241d050e0e0c0002312c2c2c3c4d250f050c00065056a729373b2a220f0e0e0e7d1000022c372d3856272923064d26ef042a0e0e0e0c000251563729384d27df042a0e0e0e0c000251564729354d28cf042a0e0e0e0c000251565729382f4d29be044d22ba040e0e0e0c00032a0c000251566729354d2aa7042a0e0e0e0c000251323c4d0399040e0e0c000356873b4d248d040e0e0c0002312c2c2c3c4d257f040c00065056a729373b2a220f0e0e0e7d1000022c364d2b660456272c6a56272923064d2c59042a0e0c000251563729384d2d4b042a0e0e0e0c000251564729354d2e3b042a0e0e0e0c0002514d2f2f042d69292f4d3027043456a80e0c000550566729373b2a347d0c00022c362d3756272923064d3107042a0e0e0e0c000251563729382c28284d22f4030e0c00032a0c000251564729354d32e3032a0e0e0e0c0002512d31300e0c000350565729354d33cb032a0e0e0e0c0002515667293828292a0e0c000251567729373b2a220c0e0e0e7d0d00022c362d3856272923064d349b032a0e0e0e0c0002512b4d0f8e034d358a030e0e0e0c000303043b500228563729382d4d3675034d2271030e0e0c00032a0c000251564729354d375f032a0e0e0e0c000226042e3c4d0350030e0c00032b2a2f0e0e0c000350564729373b2a327d0a00022c372d3856272923064d382b032a0e0e0e0c000251563729384d391b032a0e0e0e0c000251564729354d3a0b032a0e0e0e0c0002512d4d3bfe020e0e0e0c000203043b500220565729384d3cea022a0e0e0c000251566729354d3ddb022a0e0e0e0c000226044d3ece02566769292e283d3456a80e0c000550566729373b2a347d0c00022c3629362a372b382c3956572923064d3fa1022a0e0c0002512d32310e0c000350566729354d408b022a0e0e0e0c000251567729384d417b022a0e0e0e0c000251568729354d426b022a0e0e0e0c000251569729384d435b022a0e0e0e0c00025156a729354d444b022a0e0e0e0c00025156b73b4d243c020e0c00023222102b2d3c4d452e020e0e0e0c00065056d72938220c2a0e0c00025156e729354d4613022a0e0e0e0c00025156f72938283d2a0e0c0002511211000100010029354d47f2012a0e0e0c00025122133c4d03e4010e0c0003121300010001003b4d24d4010e0c0002220f2c2c2c3c4d25c6010e0e0e0c0006501215000100010029373b2a22190e0e7d1a00022c362d372e3956372923064d489d012a0e0c000251564729382c03064d498c0102044d4a86012a0e0e0c000251565729354d4b77012a0e0e0e0c000251313c4d0369010e0e0c00034d4c600131692930283b2d56c80c000550568729354d4d4b012a0e0e0e0c000251569729384d4e3b012a0e0e0e0c00025156a729354d4f2b012a0e0e0e0c000251220d3c4d031c010e0c00034d501401220d6929220d283b2d121200010002000e0c00055056d729354d51f7002a0e0e0e0c00025156e729384d52e7002a0e0e0e0c00025156f729373b2a22140e0e0e7d1500022c3656172923064d53c5002a0e0c000251562729384d54b7002a0e0e0e0c000251563729354d55a7002a0e0e0e0c0002512f3c4d0399000e0e0c00034d5690002f69292f4d0f88002d56a80e0e0c000550566729373b2a347d0c00022c362c3c4d036c000e0c000356272b2b2b4d575f00310e7b050700042c362d372e382e3c4d034c000e0c00032c2a2f0e0e0c000350564729382c03064d58340002044d592e002a0e0e0c000251565729354d5a1f002a0e0e0e0c000251313c4d0311000e0e0c00032e2a32347e0b0003430e0e0e|@2003,I232,@1364,-9,I107,@2004,@2005,@347,@1193,@329,@2009,@1203,@335,@1189,@329,@2011,I48,@329,@1210,@2013,@347,@1229,@329,@2015,@1203,@335,@1248,@329,@2017,@329,@1210,@333,@1235,@335,@2002,@344,@329,@2018,@2033,@333,@1244,@335,@2002,@329,@2123,@347,@1242,@329,@2126,@1203,@329,@333,@333,@329,I24,@2002,@2128,@347,@1187,@329,I218,@1191,@329,@2129,@347,@329,@1246,@329,@1191,@329,@2131,@329,@329,@347,@1252,@1264,@329,@2136,@329,@1208,@329,@2137,@329,@1210,@2124,@1266,@329,@2138,@2139,@2008,@2002,@329| 2002:S2|203a 2003:S41|535452554354555245535f28292e646973706c617953747275637473283329646973706c6179283229 2004:S5|3c6261643e 2005:C9,200|00812c362d372e382f3a56472923064d00b5002a0e0c000251565729382f2a0e0e0c0002512b353b4d019c000e0c000303043b50023c566729382e03064d02870002044d0381002a0e0c000251567729354d0473002a0e0e0e0c000251333c4d0565000e0e0c00032e2a56b80e0c000326042d353b4d014f000c000303043b500234566729384d063e002a0e0e0c000251567729354d072f002a0e0e0e0c000251333c4d0521000e0e0c0003302a56b80e0c00032604566729373b2a340e0e0e7d0c00020e0e0e0e|@2007,@347,I229,@2008,@2002,@329,I107,@2006,@329| 2006:S2|203d 2007:S61|535452554354555245535f28292e646973706c617953747275637473283329646973706c6179283229646973706c617953747275637442696e64283229 2008:S3|203a3e 2009:C1,16|00802b352c3656272d0e0e0e7e030003|@2010| 2010:S61|535452554354555245535f28292e646973706c617953747275637473283329646973706c6179283229646973706c617953747275637442696e64283129 2011:C1,16|00802b352c3656272d0e0e0e7e030003|@2012| 2012:S41|535452554354555245535f28292e646973706c617953747275637473283329646973706c6179283129 2013:C6,96|00812c362d3856272923064d0051002a0e0c000251563729382d4d0142004d023e000e0e0e0c00032a0c000251564729354d032b002a0e0e0e0c000251303c4d041d000e0e0c00032d2a56880e0c000350566729373b2a347d0c00020e0e0e0e|@2014,@347,@2006,@344,@329,I107| 2014:S58|535452554354555245535f28292e646973706c617953747275637473283329646973706c6179283229646973706c617953696742696e64283229 2015:C1,16|00802b352c3656272d0e0e0e7e030003|@2016| 2016:S58|535452554354555245535f28292e646973706c617953747275637473283329646973706c6179283229646973706c617953696742696e64283129 2017:C1,16|00802b352c3656272d0e0e0e7e030003|@2012| 2018:O1|@2019 2019:C4,40|00803c28404d001f004d011b000c00043c28403b4d0110000e0c00044d0208002a2c6a65420e0e0e|@2021,-1,I11,@2020| 2020:C10,224|00805607293b4d00d6000e0e0e0c000329293b4d01c9000e0e0c000303033b021f29352a362a3629324d02b3000c00036403052a68010207292503511e2b3b6564293b4d0199000e0e0c0003038856385648293b4d0088000e0c0003293c4d037e000e0e0e0c00032c3b2b4d0471000e0e0c000450323533364d0563000c000303064d065a00020228275688293b4d004e000e0e0e0c0003644d0743000c00022a2a4d083a000e0e0e0c000356a72a220e6956c7293b4d0026000e0e0e0c00032b2a692d3b2b4d0416000e0e0e0c0004502e270c020629352935296566420e0e|@2023,I253,I229,@2024,I106,I255,@2027,@2030,@2022,@344| 2021:S30|545950455f5452454528292e7661724e616d6553657175656e6365283129 2022:O1|@2031 2023:S33|545950455f5452454528292e7661724e616d6553657175656e6365283129283129 2024:O1|@2025 2025:C2,24|00812c352c352a2a4d000c002f0e0e0e7e0600030e0e0e0e|@2026,I251| 2026:S23|5354525543545f56414c5328292e73616d655476283229 2027:O1|@2028 2028:C4,40|00812b3f4d0020000e0c0003293b4d0116000e0e0e0c0003644d020b002c0e0e7d0400020e0e0e0e|@2029,I243,I251,I218| 2029:S27|5354525543545f56414c5328292e7476457175616c697479283229 2030:S2|2727 2031:C13,216|00802b281a4d00cf000c000303482b3b4d00c4000e0c0003293c4d01ba000e0e0e0c000303032c020b2c28194d02a8000e0c000329281a4d039d000e0e0c0003293c4d0292000e0e0e0c0003664d0487000c000202044d057e002c281a4d0677000c0003293b4d016e000e0e0e0c000303033c0218293b4d005d000e0e0c00033c2a4d0152000e0e0e0c000364030329020a29281a4d073f000c00032928614d0735000e0e0c0003293b4d082a000e0e0e0c000303033c020b2928ff4d0918000e0c000303054d0a0e0010292d2a4d0b0600320e7e080003|@2032,I231,I229,I107,I109,@2022,I48,I110,I106,I234,I233,@361,@344| 2032:S40|545950455f5452454528292e7661724e616d6553657175656e63652831292831296e616d65283129 2033:O1|@2034 2034:C2,16|00843b30304f000700200003641f050e|@2036,@2035| 2035:C54,1304|00813b3b2e4d000f050c0002294d0107050c00020341294d02fd040e0e0c000229352a364d03f0040e0c0003294d04e7040c00020312565929382c56880c00022a330e0e7d0b000229310e0e0e4f05c7046100036506cc294d06bc040e0c000207cc294d07b1040e0e0c00022935293b4d08a4040e0c0003035a2a362b37294d0995040e0e0c0002294d0a8b040c00024d0b84040e0c00026403032a0212294d0975040e0e0c00024d0c6c040e0c00025689293856a703032b02120402002c2a4d0d54040e0c000350293629652a220d7d0e00022a362b37323b4d0e3a040e0e0e0c00030312567929384d0f2a042a220c0e0e0e7d0d00022b4d101b040c00024d1114040e0c000203062b35296402054d120404104d00ff030c00022c4d10f7030202eb030c00024d11ec0302027c010e0c000203062c36296402054d13d803102b4d09d2030e0e0e0c0002294d0ac7030c00024d0bc0030e0c00026403032c02122b4d09b1030e0e0c00024d0ca8030e0c000256a92923064d149b032a0e0e0e0c0002513b2c4d088d030e0e0c00034d1184030e0c000203033c022c2c4d1576030e0e0e0c000203033c021c2c4d1666030e0e0e0c0002030e2c4d1759030e0e0c00023c6402013b039d220d3c4d0e46030e0e0e0c0003031256b929384d1836032a0e0e0c00022603027a56b92923064d1923032a0e0e0e0c00025156c9293828282a0e0c00025156d929354d1a07032a0e0e0e0c00025122103c4d1bf8020e0c0003282c2a220c161c00ea021300000000045056f929354d1ddb022a0e0e0e0c00025112110001000300293828292a0c0002511212000100030029373b2a0e0c000226090219220d3c4d1ba9020e0e0c00032d2a0e0e0e4f059b02d100035156b929354d1e8f022a0e0e0e0c00025156c929382d2a0e0e0c00025156d929373b2a22120e0e0e7d130002294d1667020c000207d5294d175d020e0e0c000229352a36313b4d0e4e020e0e0e0c0003030e566929384d1f3e022a347d0c00022a4d0033020c000256792923064d2027022a0e0e0e0c0002512a4d161a020e0e0e0c0002030e2a4d170d020e0e0c00023c6402013b030c2a344f21fb01900003500216333c4d1bef010c00032b2a0e0e0e4f05e301a1000351568929354d22d7012a0e0e0e0c000251569929384d23c7012a0e0e0e0c00025156a929354d24b7012a0e0e0e0c000251220d3c4d1ba8010e0c00032f2a0e0e0e4f059b01d100035056c929373b2a2211020207000e0e0e7d120002294d257f010c000207ca294d2675010e0e0c000229352a36313b4d0e66010e0e0e0c0003030e566929384d2756012a347d0c00022c4d154b010c0002033656692923064d283d012a0e0c0002514d2933012b2a0e0e0c0002282a220c2b4f1c2301b0000450569929373b2a220e0e0e0e7d0f000256692923064d2a07012a0e0e0e0c00025156792938287b2a0e0c0002513b343c4d1bec000e0c0003292e0e0e0e4f2bdf00b00003502e4d11d6000e0e0e0c0002032a2d3b4d08c8000e0c000303064d2cbe0002044d2db80056b929382b2a020226000e0e0e0c0002260402023b5056a92938287d2a0c00025156b929373b2a22100e0e0e7d110002294d2e83000c0002034e294d2f79000e0e0c0002293b4d086e000e0e0e0c0003030e564929384d305e002a327d0a00023b56592923064d314e002a0e0e0c0002512b0e0e0e4f323f0060000250566929373b2a347d0c0002294d042b000c0002030e563929384d331e002a317d090002563929384d3410002a310e0e7d09000266430e0e0e0e0e0e|@2038,@2039,@1474,@1476,@2043,@2046,@2035,@2073,@2075,I229,@2077,@1482,@1485,@2080,@2083,I232,@1364,I105,I218,@2102,@2102,@333,@2104,@2107,@2109,@1364,@333,@333,I107,@2111,@333,@329,@1364,@333,@2112,@329,@1254,@329,@2049,@2051,@1364,@333,@2115,@197,@2117,@1364,@2119,@2069,@2041,@2120,@333,@2121,@2120,@2037| 2036:S20|545950455f5452454528292e7444697370283529 2037:S3|626164 2038:S28|545950455f5452454528292e74446973702835296469737050283229 2039:O1|@2040 2040:C18,304|00802b4d0029010e0e0c000207d42b4d011d010e0e0c000229352a364d0210010e0c0003294d0307010c00022a2a4d04fe000e0e0e0c000303043b50020b2b2a4d05ec000e0c000350294d06e2000e0e0e0c000203032e02cc294d07d2000e0e0e0c000203a3294d08c5000e0e0c00022935293b4d09b8000e0c000303872a37294d0aab000c00024d0ba4000e0c0002036f29352c363b3b2c352d364d0290000e0c0003294d0787000c00020321294d087d000e0e0c000229352a3629300e0e0e4f0c6b00f00003292c69270402054d0d5d001029352a36292b336a4d0e5000020244000e0c0002220e2a4d0541000e0e0c0003502a0303290202221127090201316402012b65021c294d0f22000e0e0e0c0002030e294d1015000e0e0c00022f640201296602012b420e0e0e0e0e0e|@2042,@1474,@1476,@2043,@2039,I251,@1469,@2046,@2049,@2051,I229,I105,I218,@2053,@2067,@1471,@2069,@2041| 2041:O1|@2072 2042:S23|545950455f5452454528292e6576656e7475616c283129 2043:O1|@2044 2044:C2,16|00812c3b4d0008000e0c00032964430e|@2045,I253| 2045:S24|5354525543545f56414c5328292e747656616c7565283229 2046:O1|@2047 2047:C3,24|00804d0012002c354d010c002d0e0e0e7e0300030e0e0e0e|@2048,-1,I229| 2048:S9|456d70747954797065 2049:O1|@2050 2050:C3,24|00804d0012002c354d010c002d0e0e0e7e0300030e0e0e0e|@1473,-2,I229| 2051:O1|@2052 2052:C1,16|00802b362c372d382b2b2b6a66420e0e|@1473| 2053:C8,200|00812c3b4d00c0000e0c000303162b3b4d00b4000e0c000303033b02054d01a7001002a02c3529352e362e3b4d0098000e0c000303260402002c352d362b0e0e0e4f02830061000450292b3b0e4f0377006100032a2a6929270402672e352f362a352d2a4d0460000e0c0003293b4d0056000e0e0e0c000303112d2c0e4f0347008100032d2a6929650236293b4d0537000c00030326040200303531362b0e0e0e4f022300a1000450292f220c4f031700a100032a2a6929270402054d06080010270466430e0e0e|@2055,I229,@2054,@2056,@2053,@1463,I234,@2054| 2054:O3|@7141,@228,@2066 2055:S39|545950455f5452454528292e6576656e7475616c283129616464546f496e7374616e6365283229 2056:C10,160|00822c4d0099000e0e0c000203872c4d018d000e0e0c0002561429352a364d027e000e0e0e0c0003563429352a364d036e000e0e0e0c00036403033c020e2b352c364d035a000e0e0e0c00032c352d364d044c000e0c000303033c0210564429352a364d0439000e0e0c0003640402004d052c002d2d3b2e2e4d0623000c00075029644d0719000e0e0c00023134452a46270602054d08070010440e0e0e0e0e|@2058,@1474,@1476,@2059,@2027,@2062,@205,@1348,@1326,@2057| 2057:O3|@7141,@228,@2065 2058:S40|545950455f5452454528292e6576656e7475616c2831296372656174654e65774669656c64283329 2059:O1|@2060 2060:C5,48|00812b3e4d0028000e0c0003293b4d011e000e0e0e0c0003030e4d0212002a4d030d002e7e0500032964430e0e0e0e0e|@2061,I216,I234,@181,I106| 2061:S24|5354525543545f56414c5328292e74764c6576656c283229 2062:O1|@2063 2063:C4,40|00812b3c4d0020000e0c0003293b4d0116000e0e0e0c0003644d020b002c0e0e7d0400020e0e0e0e|@2064,I243,I251,I218| 2064:S23|5354525543545f56414c5328292e74765765616b283229 2065:S43|6372656174654e65774669656c643a204e6577206669656c64206973206e6f742061207479706520766172 2066:S51|616464546f496e7374616e63653a20456e74727920696e20696e7374616e636520627574206e6f7420696e2067656e65726963 2067:O3|@7141,@228,@2068 2068:S35|756e6966795265636f7264733a204e6f742061206c6162656c6c6564207265636f7264 2069:O1|@2070 2070:C2,16|00803d2c354d0007002d0e0e7e030003|@2071,I229| 2071:S11|4f7665726c6f6164536574 2072:C1,8|00802b36420e0e0e|@2071| 2073:O1|@2074 2074:C3,24|00804d0012002c354d010c002d0e0e0e7e0300030e0e0e0e|@1491,-3,I229| 2075:O1|@2076 2076:C1,16|00802b362c372d382b2b2b6a66420e0e|@1491| 2077:O1|@2078 2078:C3,40|00802b353b4d001f000c000303062b362964020e2b36293b4d010c000e0c00032965420e0e0e0e0e|@2079,I229,I253| 2079:S22|5354525543545f56414c5328292e706c696e67283129 2080:O1|@2081 2081:C1,8|00802b352964420e|@2082| 2082:S23|5354525543545f56414c5328292e74634e616d65283129 2083:O1|@2084 2084:C11,176|00812c4d00a9000e0e0c00023b2a2f6a294d019b004d0297000c000329352a362a4d038b000c0002030a304d04810045324602782a4d0577000c000229352a362b373c2b4d0668000e0c000303102b3b2b6a4d075a000e0e0e0c000202162a3c4d084c000e0c00032c2a2c6a644d073f000c0002294d0537000c000229352a362b37292c2c4d0927000c0004334d051f000c000229352a362b37292c2c4d090f000c000422162f452a46270f2705430e|@2086,I223,@2087,@2090,@2098,I48,@2094,I233,@2085,I240,@1450| 2085:O1|@2101 2086:S27|5554494c49544945535f28292e73706c6974537472696e67283229 2087:O1|@2088 2088:C3,24|00802b282e4d000f000c00034d0108002c8000020e0e0e0e|@2089,I229,I218| 2089:S40|5554494c49544945535f28292e73706c6974537472696e672832293c7061747465726e3e2d283129 2090:O1|@2091 2091:C4,48|00812c4d0029000e0e0c000229352a362b373b2c2c4d0117000c00030402002a2a4f020b0080000350292707430e0e0e|@2093,@2094,I239,@2092| 2092:C8,232|008156032d2a4d00de000e0e0e0c000364032d56012d3b2b6a644d01ca000e0e0e0c00025613562256312b2b2b6a664d01b5000e0e0c00022d2b452a466502a656012d3c4d02a0000e0c00032a4d0397000c000203032a02182928084d0488000e0c00032b2a4d057e000e0e0e0c0003646556170e0c000203192c3c4d0268000e0c00032c2a2a0e0e4f065b0031000365025356032d2a4d024d000e0e0c0003562356312a2c2b6a27044d013a000e0e0e0c0002561256232a2a4d042a000e0e0e0c000329314d021e000e0e0e0c00035651322b2b6a27054d010c000e0c00022d2b452a4665430e|@2097,I251,@2085,I240,I105,I239,I252,@2092| 2093:S19|537562737472696e672e73706c697472283229 2094:O1|@2095 2095:C1,8|00802b420e0e0e0e|@2096| 2096:S5|536c696365 2097:S26|537562737472696e672e73706c69747228322966696e64283229 2098:O1|@2099 2099:C2,16|00802b36293b4d0006002e0e7e040003|@2100,I251| 2100:S34|566563746f72536c6963654f7065726174696f6e7328292e6973456d707479283129 2101:C1,8|00802b420e0e0e0e|@2096| 2102:O3|@7298,@2103,0 2103:S5|456d707479 2104:O1|@2105 2105:C10,176|00802b4d00a9000e0e0c0002039d2b4d019d000e0e0c00022935293c4d0290000e0c000303812a36294d0383000c00024d047c000e0c000203692936294d036f000c00024d0468000e0c000203513c2b293b4d025a000e0e0e0c000303033c023b293529352b362d4d0544004d0640000e0c00032b2a4d0736000e0e0e0c00036403172d3c4d0827000c0003292b2506250626041e443b6402013b666502013b6402013b6402013b6502013b420e0e0e|@2106,@2049,@2051,I229,I105,I218,-1,@355,I24,I106| 2106:S28|545950455f5452454528292e697350726f6475637454797065283129 2107:O1|@2108 2108:C2,16|00803c2c354d0007002d0e0e7e030003|@1502,I229| 2109:O1|@2110 2110:C1,16|00802b362c372a2a6965420e0e0e0e0e|@1502| 2111:C16,376|00822b3b4d0070010e0c000303033b06d82b36293b4d005f010c000303612c35294d0153010c000230282a4d0249010e0e0c0003032c294d033d010e0e0c0002030e294d0431010e0e0c00023c6402013b03033c020a294d051d010e0e0c000202013b030d29300e0e4f060b01410003020a29300e4f07ff004200036506d12c352e3b4d08f1000e0e0c0003030e572929384d09e2002a307d090002294d01d7000c000257392923064d0acb002a0e0e0e0c00025131282a4d02bc000e0c000303302a4d03b1000e0e0c0002030e2a4d04a5000e0e0c00023c6402013b03033c020e2a4d059100020288000e0e0c000202013b030e2a310e0e4f067b0051000350020a2a314f076f00520003505749293533282c4d0260000e0c00034d0b58000e0c0002293b69642a0c00025157592938342a0e0e0c000251576929373b2a0e0e0c000251577929354d0c2b002a020220000e0e0e0c000251343c4d0d19000e0e0c0003220d2a330e4f0e0b00b10004270864440e0e0e0e|@2113,I229,@2039,I24,@2107,@2109,@2104,@2112,@2035,I232,@1364,@333,I218,@329,I107,@2111| 2112:C8,136|00812b3c4d0080000e0c0003030e570929384d0172002a2e7d06000257092923064d0263002a0e0e0e0c0002515719293828282a0e0c000251572929354d0347002a0e0e0e0c0002512e3c4d0439000e0e0c0003302a0e0e0e4f052b0052000350574929354d061f002a0e0e0e0c0002515759293828292a0e0c000251576929373b2a347d0c0002|@2114,I232,@1364,@333,@333,I107,@2035,@333| 2113:S41|545950455f5452454528292e744469737028352964697370502832297072657474794c697374283329 2114:S43|545950455f5452454528292e74446973702835296469737050283229706172656e74686573697365283229 2115:O1|@2116 2116:C3,40|00802b3b4d0020000e0c000303033b02152b352c362a362a4d010c000e0c00022a2a69292705420e|@436,I229,@2115| 2117:C13,280|00812b3b4d0010010e0c000303033b06cc2b3529352a362e36303b4d01f9000e0e0c0003030e574929384d02ea002a327d0a000257492923064d03db002a0e0e0e0c00025157592923064d04ca002a0e0e0c000251576929382f283a4d05b8000e0c00032a0c000251577929354d06a7002a0e0e0e0c000251343c4d0799000e0e0c00032f2a0e0e0e4f088b00a2000350579929373b2a0e0e0c0002512f3b4d0075000e0e0c000303043b50021c57a929354d0962002a0e0e0c00025157b92938282c2a0e0c0002260457a929373b2a0e0c000251303b4d003d00020234000e0e0c000303033b022857b929354d0a27002a0e0e0e0c000251220f3c4d0718000e0c000329330e0e0e4f0b0b00e1000365270b430e0e0e0e|@2118,I229,I232,@1364,@333,@333,@344,@329,I107,@2035,@333,@329,@2117| 2118:S35|545950455f5452454528292e7444697370283529646973705028322970526563283229 2119:S5|2c202e2e2e 2120:S7|6e6f2074797065 2121:C5,120|00802b3b4d0070000e0c000303033b02612b36293b4d005f000c000303162c35572929382b4d014f000c00022a300e0e7d0700022c35572929382b4d0139000e0e0c00022a0c000251573929354d0227002a0e0e0e0c00025157492938282f2a0e0c0002512d0e0e0e4f030b005100022705420e0e0e0e0e|@2122,I229,@2080,@333,@2121| 2122:S42|545950455f5452454528292e744469737028352964697370502832297072696e745443636f6e73283129 2123:C13,304|00812c352d362e382f3930230656572923064d001a012a0e0e0c000251566729382e28284d0108010e0c00032a0c000251567729354d02f7002a0e0e0e0c00025156872923064d03e6002a0e0e0c000251343c4d04d9000e0e0c0003322a56c80e0c00035056a729373b2a0e0e0c00025156b7293828292a0e0c0002513b31354d05ac000e0c00034d06a4000e0c0002034256c729383303064d07930002044d088d002a0e0c00025156d729354d097f002a0e0e0e0c00025122103c4d0470000e0c0003332a121200010002000c0003260402023b5056c729354d0a52002a0e0e0c00025156d72938283d2a0e0c00025156e729354d0b37002a0e0e0e0c00025122113c4d0428000e0c0003220e2a121300010002000e0e0e0c0003501211000100010029373b2a22150e0e7d160002|@2125,@347,@344,@329,@2124,I107,I229,I218,@2008,@2002,@329,@329,@329| 2124:O2|3,1 2125:S60|535452554354555245535f28292e646973706c617953747275637473283329646973706c6179283229646973706c617946756e637442696e64283229 2126:C1,16|00802b352c3656272d0e0e0e7e030003|@2127| 2127:S60|535452554354555245535f28292e646973706c617953747275637473283329646973706c6179283229646973706c617946756e637442696e64283129 2128:O2|1,2 2129:C1,16|00802b35561729382b2a2f0e7d060002|@2130| 2130:S44|535452554354555245535f28292e646973706c617953747275637473283329646973706c6179283229283129 2131:O1|@2132 2132:C15,248|00843b30293b4d00ee000e0e0e0c000303032a021629362b3c4d01db000c0003292b25042504511e233b6565293c4d00c6000e0e0e0c0003033e304d02b9000e0e0c00024d03b0000e0c000203063035296402054d04a0001029313032314d0596000e0e0e0c0006502e354d0689002a2f0e0e0e7d0a0002293c4d077a000e0e0e0c0003036e2f3c4d086c000e0c0003030e2d384d0960002a2e0e0e7d0900022d23064d0a51002a0e0c0002512d3828282a0e0e0e0c0002512d354d0b39002a0e0c0002513b30320e4f0c2b00300003502e3828292a0e0e0e0c0002512e373b2a0c0002512e354d0d0d002a2f0e0e0e7d0a00023b641f05|@2134,I229,I106,I105,I218,@2102,@2033,@329,I233,I232,@1364,@333,@333,@2133,@329| 2133:C14,264|00812c3b4d0000010e0c0003030e560829384d01f2002a2e7d0600023b2c4d02e6000e0e0e0c00034d03dc000e0c000203d32b4d04d1000e0e0c00024d03c8000e0c000203062b35296402054d05b800105618562956372c312d2d2d4d06a8000e0c000650564829354d079b002a0e0e0e0c000251304d048e000e0e0e0c00024d0384000e0c000203063036296402054d087400103b2a4d026d000e0e0c0003644d0363000c0002035656582938282c2a0c000251566829354d094b002a0e0e0e0c000251324d043e000e0e0e0c00024d0334000e0c000203063236296402054d0a240010343c4d0b1d000e0e0c0003292b0e0e0e4f0c0f00a10003270402013b270502013b430e|@2135,I232,@1364,I229,I218,I105,@2102,@2033,@333,@2102,@329,@2102,I107,@2133| 2134:S28|545950455f5452454528292e7072696e745479706556617273283529 2135:S36|545950455f5452454528292e7072696e7454797065566172732835297056617273283229 2136:C1,16|00802b352c3656272d0e0e0e7e030003|@2012| 2137:C1,16|00802b352c3656272d0e0e0e7e030003|@2012| 2138:C1,16|00802b352c3656272d0e0e0e7e030003|@2012| 2139:O1|@2140 2140:C172,3632|00824d002a0e2c694d01240e4d02200e694d031b0e2b692f3b4d04130e0c0003030e2e384d05080e2a300e0e7d09000230354d06fa0d4d07f60d0e0e0e0c00030a1f00e905d502c506d10df10c1d055d00ad044f002d0371094000e5073d04e50b810c65089500a9014507e509350a9105d90a610dd903f50589038d0a7102dd055d0b2e384d08a70d2a300e7d09000206ce30362f382a2a310e0e0e7d0a000230373138294d09870d0c0002294d0a7f0d4d0b7b0d0c000303142b4d0c710d6928222a69644d0d670d0c000202012b32382a2a347d0d0002303631373023064d0e4d0d2a0e0c0002512a353c4d0f400d0e0c000303102a354d10340d4d11300d0e0c00030319313c4d07240d0e0c00032b2a334d02190d0e0e0c000451024b303828282a0e0c00025130354d12010d2a0e0c000251313c4d07f50c0e0e0c00032b2a334d02e90c0e0e0c00045031354d13dd0c2a0e0c000251313828292a0202ca0c0e0e0e0c0002260330354d14c00c2a0c0002512935280d4d11b30c0c00030319313c4d07a80c0e0c00032a2a334d029d0c0e0e0c0004510247303828282a0e0c00025130354d15850c2a0e0c000251313c4d07790c0e0e0c00032a2a334d026d0c0e0e0c00045031354d16610c2a0e0c000251313828292a0e0e0e0c0002260330373b2a320e7d0b00023036313732383123064d17370c2a0e0e0e0c00025131384d18290c2a0e0c00025131354d191d0c2a0e0c000251323c4d07110c0e0e0c00032c2a344d02050c0e0e0c00045032354d1af90b2a0e0c00025132384d1bed0b2a0e0c00025132354d1ce10b2a0e0c000251333c4d07d50b0e0e0c00032b2a220c4d02c80b0e0c00045033354d1dbd0b2a0e0c00025133384d1eb10b2a0e0c00025133354d1fa50b2a0e0c000251343c4d07990b0e0e0c00032d2a220d4d028c0b0e0c00045034373b2a220d0e7d0f000230362f23064d20730b2a0e0e0e0c0002512f3828282a0e0e0e0c0002512f354d21590b2a0e0c000251303c4d074d0b0e0e0c00032a282c2b2f310e0e0e0c00055030354d22350b2a0e0c000251303828292a0e0e0e0c00025130373b2a320e0e7d0b000230364d23120b4d020e0b693023064d24060b2a0e0e0c00025130384d25f90a2a0e0c00025130354d26ed0a2a0e0c0002514d27e30a2a69323c4d07db0a0c00032c4d28d30a2b2d330e0c00055032373b2a340e0e7d0d000230364d29ba0a4d02b60a693023064d2aae0a2a0e0e0c00025130384d2ba10a2a0e0c00025130354d2c950a2a0e0c0002514d2d8b0a2e2b6a323c4d07820a0e0e0e0c00032c4d2e770a2b2d330e0c00055032373b2a340e0e7d0d000230362f23064d2f5b0a2a0e0e0e0c0002512f384d304d0a2a0e0c0002512f354d31410a2a0e0c0002514d32370a313c4d07310a0e0e0c00032b4d33270a2b2d320e0c00055031373b2a330e0e7d0c000230362f23064d340b0a2a0e0e0e0c0002512f38285b2a0e0e0e0c0002512f354d35f1092a0e0c000251303c4d07e5090e0e0c00032a282c2b2f310e0e0e0c00055030354d36cd092a0e0c0002513038285d2a0e0e0e0c00025130373b2a320e0e7d0b0002303631373023064d37a5092a0e0c000251313c4d0799090e0e0c00032a2a334d028d090e0e0c00045031354d3881092a0e0c0002513138283a2a0e0e0e0c00025131354d3969092a0e0c0002513b4d3a5e090e0e0e0c00022c34342c3c4d3b4f090c00065032373b2a340e0e7d0d0002303631373023064d3c35092a0e0c000251313c4d0729090e0e0c00032b2a334d021d090e0e0c00045031354d3d11092a0e0c00025131384d3e05092a0e0c00025131354d3ff9082a0e0c000251323c4d07ed080e0e0c00032b2a344d02e1080e0e0c00045032373b2a340e0e7d0d0002303629352a373123064d40c3082a0e0e0e0c000251323c4d07b5080e0e0c00032a2a344d02a9080e0e0c00045032354d419d082a0e0c00025132384d4291082a0e0c00025132354d4385082a0e0c000251333c4d0779080e0e0c00032c2a220c4d026c080e0c00045033373b2a220c0e7d0e000230362f23064d4453082a0e0e0e0c0002512f384d4545082a0e0c0002512f354d4639082a0e0c000251303c4d072d080e0e0c00032a287c2b2f310e0e0e0c00055030373b2a320e0e7d0b00022e384d470a082a307d0900022e38285f2a300e0e7d0900023036313732383123064d48eb072a0e0e0e0c00025131382c03064d49da0702044d4ad4072a0c00025131354d4bc9072a0e0c0002510402002a2a4d4cba070e0e0e0c0003502935343c4d07ab070c00032a283b2b33220c0e0e0c00055034354d4d95072a0e0c00025134384d4e89072a0e0c00025134354d4f7d072a0e0c0002510402002e2a4d506e070e0e0e0c0003502935220e3c4d075e070e0e0e0c00032a283b2b220d220f0e0c000550220e354d5144072a0c000251220e384d5238072a0c000251220e373b2a22107d1200023036294d5321070e0e0c00024d5418070e0c0002031d29352937293c4d1108070e0c000303064d55fe0602044d56f8066502044d56f1063023064d57ea062a0e0e0c00025130382a2a0c00025130354d58d5062a0e0c0002514d59cb06323c4d07c5060e0e0c00032c4d5abb062b2d330e0c00055032373b2a340e0e7d0d0002303731383023064d5b9d062a0e0c00025130384d5c91062a0e0c00025130354d5d85062a0e0c0002514d5e7b062c69323c4d0773060c00032c4d5f6b062b2d330e0c0005502b3b4d115d060e0e0c000303043b50024032354d604c062a0c00025132384d6141062a0e0c00025132354d6235062a0e0c0002514d632b06343c4d0725060e0e0c00032d4d641b062b2d220c0c0005260332373b2a340e7d0d0002303631373023064d65fd052a0e0c00025130384d66f1052a0e0c00025130354d67e5052a0e0c00025130382b2a0c00025130354d68d1052a0e0c0002513038283d2a0e0e0e0c00025130354d69b9052a0e0c00025130384d6aad052a0e0c00025130354d6ba1052a0e0c00025130382a2a0c00025130373b2a320e0e7d0b00023036313732383123064d6c7b052a0e0e0e0c00025131384d6d6d052a0e0c00025131354d6e61052a0e0c0002514d6f57052d69333c4d074f050c00032c4d7047052b2d340e0c00055033354d7139052a0e0c0002512b3b4d112d050e0e0c000303043b50024033384d721c052a0c00025133354d7311052a0e0c0002514d740705220c3c4d0700050e0c00032d4d75f7042b2d220d0c000550220c354d76e8042a0c0002260433384d77dc042a0c00025133354d78d1042a0e0c0002513323064d79c4042a0c0002510402002e2a4d7ab6040e0e0e0c0003502935220d3c4d07a6040e0e0e0c00032a283b2b220c220e0e0c000550220d373b2a0e0e0e0c000251220d373b2a220f7d11000230362f23064d7b73042a0e0e0e0c0002512f3828282a0e0e0e0c0002512f354d7c59042a0e0c0002510402002a2a4d7d4a040e0e0e0c0003502935323c4d073b040c00032a283b2b31330e0e0e0c00055032354d7e25042a0e0c000251323828292a0e0e0e0c00025132373b2a340e0e7d0d0002303631373023064d7ffd032a0e0c0002512a32324d80f0030e0c00045030354d81e5032a0e0c0002514d82db03323c4d07d5030e0e0c00032b4d33cb032b2d330e0c00055032373b2a340e0e7d0d000230364d83b2034d02ae03693023064d84a6032a0e0e0c00025130384d8599032a0e0c00025130354d868d032a0e0c0002514d8783032a69323c4d077b030c00032c4d8873032b2d330e0c00055032373b2a340e0e7d0d000230362f23064d8957032a0e0e0e0c0002512f384d8a49032a0e0c0002512f354d8b3d032a0e0c000251303c4d0731030e0e0c00032a2a324d0225030e0e0c00045030373b2a320e0e7d0b0002303631373023064d8c09032a0e0c000251313c4d07fd020e0e0c00032b2a334d02f1020e0e0c00045031354d8de5022a0e0c0002513123064d8ed8022a0c00025131384d8fcd022a0e0c00025131354d90c1022a0e0c000251323c4d07b5020e0e0c00032b287c2b31330e0e0e0c00055032373b2a0c00025132373b2a340e0e7d0d0002303631373023064d9185022a0e0c00025130384d9279022a0e0c00025130354d936d022a0e0c000251313c4d0761020e0e0c00032a2a334d0255020e0e0c00045031354d9449022a0e0c00025131384d953d022a0e0c00025131354d9631022a0e0c000251323c4d0725020e0e0c00032c2a344d0219020e0e0c00045032373b2a340e0e7d0d0002303631373023064d97fd012a0e0c0002513023064d98f0012a0c00025130384d99e5012a0e0c00025130354d9ad9012a0e0c000251313c4d07cd010e0e0c00032b2a334d02c1010e0e0c00045031354d9bb5012a0e0c00025131384d9ca9012a0e0c00025131373b2a0c00025131354d9d95012a0e0c000251323c4d0789010e0e0c00032b287c2b31330e0e0e0c00055032373b2a340e0e7d0d0002303631373023064d9e61012a0e0c000251313c4d0755010e0e0c00032b2a334d0249010e0e0c00045031354d9f3d012a0e0c00025131384da031012a0e0c00025131354da125012a0e0c000251323c4d0719010e0e0c00032b2a344d020d010e0e0c00045032373b2a340e0e7d0d0002303631373023064da2f1002a0e0c000251313c4d07e5000e0e0c00032b2a334d02d9000e0e0c00045031354da3cd002a0e0c00025131384da4c1002a0e0c00025131354da5b5002a0e0c000251323c4d07a9000e0e0c00032b2a344d029d000e0e0c00045032373b2a340e0e7d0d0002303631383b3123064da680002a0c0002513138287b2a0e0e0e0c000251323c4d0769000e0e0c00032b2a0e0e0e4fa75b00800003502c03043b50021d32382c3b4d1148000e0c000303064da83e0002044da938002a0c0002513238287d2a0e0e0e0c00025132373b2a340e0e7d0d000230362f3828232b4daa11000e0e0c00032a310e0e7d0a000266440e0e|@2142,@2143,@2145,@2139,@2147,I232,@1364,-16,I107,@2155,@2156,@1621,I24,@2159,@369,@333,I230,-8,I229,@333,@333,@333,@333,@333,@333,@1183,@329,@329,@1181,@329,@329,@1215,@329,@2124,@329,@333,@2160,@2124,@1235,@329,@2162,@1203,@2164,@2124,@1201,@329,@2166,@1203,@2124,@1199,@329,@2170,I48,@2124,@329,@333,@347,@329,@329,@2018,@2033,@2124,@329,@1225,@329,@333,@329,@1260,@329,@2124,@1205,@329,@2173,@347,@1252,@1264,@329,@2174,@329,@1208,@329,@2177,@329,@1210,I105,I218,@1217,@1191,@2124,@329,@2179,@1203,@2124,@1221,@329,@2185,@1203,@329,@1233,@329,@2187,@1203,@2124,@1221,@329,@329,@329,@1221,@329,@2124,@1227,@329,@2189,@1203,@329,@1233,@329,@2190,@1203,@329,@1197,@329,@2124,@2192,@2124,@333,@2194,@333,@2124,@2196,@329,@2199,@2202,@2124,@1244,@329,@2204,@1203,@333,@1237,@329,@333,@329,@2124,@1271,@329,@333,@1256,@329,@329,@1213,@329,@2124,@333,@1270,@329,@329,@1185,@329,@2124,@329,@1268,@329,@2124,@329,@1250,@329,@197,@2141,@1364,@2119,@344| 2141:C17,368|00812b3b4d0068010e0c0003030e560729384d015a012a2e7d0600022c3b4d024e010e0e0e0c000303033b06d62c36293b4d023b010c000303662d3529352a3656472923064d0327012a0e0e0e0c000251565729382d4d0416014d0512010e0e0e0c00032a0c000251566729354d06ff002a0e0e0e0c000251323c4d07f1000e0e0c000356872e2b2b4d08e3000c000450569729373b2a220e0e0e0e7d0f00022d3529352a3656472923064d09c1002a0e0c00025156572923064d0ab2002a0e0e0c000251566729382e4d0ba2004d059e000e0e0e0c00032a0c000251567729354d0c8b002a0e0e0e0c000251333c4d077d000e0e0c000356972f2b2b4d086f00020265000c00045056a729373b2a0e0e0c00025156b729354d0d53002a0e0e0e0c00025156c72938282c2a0e0c00025156d729373b2a0e0e0c00025156e729354d0e2b002a0e0e0e0c00025122113c4d071c000e0c0003220f2a0e0e160f000e001300010000032710430e0e0e0e0e|@2206,I232,@1364,I229,@333,@2006,@344,@329,I107,@2139,@333,@333,@2006,@329,@333,@329,@2141| 2142:S25|50415253455f5452454528292e7074446973706c6179283329 2143:C10,248|00832c3b4d00f0000e0c0003030e560729384d01e2002a2e7d0800022e3b4d02d6000e0e0e0c000303033b02c32e36293b4d02c3000c000303122f3556272a302b6a642e2e0e0e0e7d0800022f3556272923064d03a1002a0e0c00025156372b312b6a642f0c0002505637293532282c4d0484000e0c000303033c021f32283b4d0474000e0c000303033c020f324d0566004d0462000e0e0e0c00034d0658000e0c0002293b69642a0c00025156472938332a0e0e0c000251565729373b2a0e0e0c000251566729354d072b002a0e0e0e0c000251333c4d081d000e0e0c000330220d2b220d220c220e0e7b060e00051f040e0e0e0e0e0e|@2144,I232,@1364,I229,@333,I24,I48,I218,@329,I107| 2144:S37|50415253455f5452454528292e7074446973706c61792833297072696e744c697374283429 2145:C1,16|00802b352c362d3756372e7b05030004|@2146| 2146:S25|50415253455f5452454528292e7074446973706c6179283129 2147:C8,128|00822d352e372f382e23064d0071002a0e0c0002513b4d0166000e0e0e0c00022a312b323c4d0257000c0006502f382d2a0c0002512f354d0345002a0e0c0002512f38283d2a0e0e0e0c0002512f354d042d002a0e0c0002514d052300313c4d061d000e0e0c00032d287c2b2d56a70e0e0c00055031373b2a330e0e7d0c0002|@2149,@2124,@2018,@2131,@329,@329,@2148,I107| 2148:O1|@2150 2149:S45|50415253455f5452454528292e7074446973706c61792833297072696e74446174617479706542696e64283329 2150:C2,24|00802b352c362d374d000c002e0e0e7b050300040e0e0e0e|@2152,@2151| 2151:O1|@2153 2152:S44|50415253455f5452454528292e7074446973706c61792833297072696e74436f6e7374727563746f72283129 2153:C8,120|00822d352e362d23064d006b002a0e0e0e0c0002512d382b2a0c000251294d0156000e0e0e0c000203043b50023b2d354d0244002a0c0002512d384d0339002a0e0c0002512d354d042d002a0e0c0002513b4d0522000e0e0e0c00022a30302c3c4d0613000c0006512d373b2a2f0e0e7d0800020e0e0e0e|@2154,@197,@2046,@329,@1185,@329,@2018,@2033| 2154:S44|50415253455f5452454528292e7074446973706c61792833297072696e74436f6e7374727563746f72283329 2155:S7|3c456d7074793e 2156:O1|@2157 2157:C1,8|00802b352964420e|@2158| 2158:S24|5354525543545f56414c5328292e76616c4e616d65283129 2159:O2|34,0 2160:C8,144|00822d3b4d0088000e0c0003031a2b384d017c002a0c0002512b354d0271002a2d0e0e0e7d0600022d352e362d23064d035d002a0e0c0002512e3c4d0451000e0e0c00032b2a3056670c0004502e354d053d002a0e0c0002512e38283d2a0e0e0e0c0002512e354d0625002a0e0c0002512f3c4d0419000e0e0c00032b2a3156770c0004502f373b2a310e0e7d0a0002|@2161,I229,@1262,@329,@2124,I107,@329,@329| 2161:S40|50415253455f5452454528292e7074446973706c61792833297072696e7456616c42696e64283329 2162:C1,16|00802b352c362d3756372e7b05030004|@2163| 2163:S40|50415253455f5452454528292e7074446973706c61792833297072696e7456616c42696e64283129 2164:C5,112|00822d352e362d23064d0063002a0e0e0e0c0002512e3c4d0155000e0e0c00032b2a3056670c0004502e354d0241002a0e0c0002512e38283d2a0e0e0e0c0002512e354d0329002a0e0c0002512f3c4d011d000e0e0c00032b2a3156770c0004502f373b2a310e0e7d0a00020e0e0e0e|@2165,@2124,I107,@329,@329| 2165:S39|50415253455f5452454528292e7074446973706c61792833297072696e74436c61757365283329 2166:C3,40|00802b352c362a364d001c005648692b3c4d0113000c00032b287c2b2d5697340e0e0e7b06080005|@2168,@2167,I107| 2167:C1,16|00802b352c362d3756372e7b05030004|@2169| 2168:S41|50415253455f5452454528292e7074446973706c61792833297072696e746676616c62696e64283129 2169:S39|50415253455f5452454528292e7074446973706c61792833297072696e74436c61757365283129 2170:O1|@2171 2171:C1,24|00802b352c372a352a382a2a300e0e0e7d0700020e0e0e0e|@2172| 2172:S40|50415253455f5452454528292e7074446973706c61792833297072696e745374724e616d65283129 2173:S2|2829 2174:O1|@2175 2175:C5,80|00812c4d0049000e0e0c00024d0140000e0c0002032a2c3529352a362f360402002a2a4d0229000e0e0c00035029352a362e2b692e2b69342b452a46270902092b4d030b000802003b430e0e0e0e0e0e|@2176,I105,I218,@2174,@333| 2176:S17|4c697374506169722e756e7a6970283229 2177:O1|@2178 2178:C5,80|00812c4d0049000e0e0c00024d0140000e0c0002032a2c3529352a362f360402002a2a4d0229000e0e0c00035029352a362e2b692e2b69342b452a46270902092b4d030b000802003b430e0e0e0e0e0e|@2176,I105,I218,@2177,@333| 2179:O1|@2180 2180:C2,24|00802b352c362d374d000c002e0e0e7b050300040e0e0e0e|@2182,@2181| 2181:O1|@2183 2182:S41|50415253455f5452454528292e7074446973706c61792833297072696e745479706542696e64283129 2183:C8,144|00822d352e362f382e23064d0081002a0e0c0002513b4d0176000e0e0e0c00022a312b323c4d0267000c0006502f382d2a0c0002512b4d0356000e0e0e0c000203043b50023b2f354d0444002a0c0002512f38283d2a0e0e0e0c0002512f354d052d002a0e0c0002513b4d0122000e0e0e0c00022c32322c3c4d0613000c0006512f373b2a310e0e7d0a00020e0e0e0e|@2184,@2124,@2018,@2131,@2046,@329,@329,@2033| 2184:S41|50415253455f5452454528292e7074446973706c61792833297072696e745479706542696e64283329 2185:C1,16|00802b352c362d3756372e7b05030004|@2186| 2186:S45|50415253455f5452454528292e7074446973706c61792833297072696e74446174617479706542696e64283129 2187:O1|@2188 2188:C2,24|00802b352c362d374d000c002e0e0e7b050300040e0e0e0e|@2182,@2181| 2189:C1,16|00802b352c362d3756372e7b05030004|@2186| 2190:O1|@2191 2191:C2,24|00802b352c362d374d000c002e0e0e7b050300040e0e0e0e|@2182,@2181| 2192:O1|@2193 2193:C5,80|00812c4d0049000e0e0c00024d0140000e0c0002032a2c3529352a362f360402002a2a4d0229000e0e0c00035029352a362e2b692e2b69342b452a46270902092b4d030b000802003b430e0e0e0e0e0e|@2176,I105,I218,@2192,@333| 2194:O1|@2195 2195:C5,80|00812c4d0049000e0e0c00024d0140000e0c0002032a2c3529352a362f360402002a2a4d0229000e0e0c00035029352a362e2b692e2b69342b452a46270902092b4d030b000802003b430e0e0e0e0e0e|@2176,I105,I218,@2194,@333| 2196:O1|@2197 2197:C10,176|00822d350a010059004b002d362c23064d009c002a0c0002512c384d0191002a0e0c0002512c354d0285002a0e0c0002512c382a4d0378004d0474000e0c00032a0c0002512c373b2a2e0e0e7d07000202562b384d0558002a2d0e0e7d0600022d362c23064d0647002a0e0e0e0c0002512c384d0739002a0e0c0002512c354d082d002a0e0c0002512c382a4d0320004d041c000e0c00032a0c0002512c373b2a2e0e0e7d070002440e0e0e0e0e0e0e|@2198,@333,@1231,@329,-1,@355,@1239,@333,@1219,@329| 2198:S31|56414c55455f4f505328292e646973706c6179466978537461747573283329 2199:O1|@2200 2200:C1,16|00802b352c3729382b2a2f0e7d060002|@2201| 2201:S28|50415253455f5452454528292e7074446973706c6179283329283129 2202:C13,192|00822d352e372f382e23064d00b1002a0e0c0002512e382c2a0c0002512a4d019e000e0e0e0c000203043b50023b2e354d028c002a0c0002512e384d0381002a0e0c0002512e354d0475002a0e0c0002513b4d056a000e0e0e0c00022b31312c3c4d065b000c00065129354d0751004d084d000e0e0c000303043b5002372e354d093c002a0c0002512e38283d2a0e0e0e0c0002512e354d0a25002a0e0c0002512f3c4d0b19000e0e0c00032a2a3156770c0004512e373b2a300e0e7d090002|@2203,@333,@2046,@329,@1185,@329,@2018,@2033,-5,I229,@329,@329,I107| 2203:S39|50415253455f5452454528292e7074446973706c61792833297072696e74457842696e64283329 2204:C1,16|00802b352c362d3756372e7b05030004|@2205| 2205:S39|50415253455f5452454528292e7074446973706c61792833297072696e74457842696e64283129 2206:S42|50415253455f5452454528292e7074446973706c6179283329646973706c61795265634c697374283229 2207:C2,40|00802b56180c0002293b4d001a000e0e0e0c0003030a2c56272d0e0e7d0400022964420e0e0e0e0e|@1316,I229| 2208:C2,40|00802b56180c0002293b4d001a000e0e0e0c0003030a2c56272d0e0e7d0400022964420e0e0e0e0e|@1316,I229| 2209:C2,40|00802b56180c0002293b4d001a000e0e0e0c0003030a2c56272d0e0e7d0400022964420e0e0e0e0e|@1316,I229| 2210:C2,40|00802b56180c0002293b4d001a000e0e0e0c0003030a2c56272d0e0e7d0400022964420e0e0e0e0e|@1316,I229| 2211:C2,40|00802b56180c0002293b4d001a000e0e0e0c0003030a2c56272d0e0e7d0400022964420e0e0e0e0e|@1316,I229| 2212:O2|@2213,@1930 2213:C6,80|00823b3c28404d0046004d0142000e0e0e0c00042e352f36303731383239333a342306220c2307220d2308220e23094d021d000e0e0c000b302b302c4d0310000e4f040b0070000666440e0e0e0e0e0e|@2215,-1,I11,@1335,I48,@2214| 2214:C4,64|00843b3b4d00380031693b3b3b3b3b3b220f293b4d0128000e0c000303033b021829352a362a0e0e0e4f021300c0000250292503511e233b65270a1f050e0e0e|@2217,@2218,I229,@2216| 2215:S29|535452554354555245535f28292e706173733253747275637473283329 2216:C7,120|00802b353d4d006f000c00030a0500200040000c00300050000f003b02532b362c2a0e0e0e4f014f002100036402422b362c2a0e0e4f023f002100036402322b362c2a0e0e4f032f002100036402222b362c37292b4f041f003100036502122b362c372d382b2a2c0e4f050b0051000466420e0e0e0e0e0e|@2227,I107,@2228,@4813,@4843,@4850,@2226| 2217:S43|535452554354555245535f28292e7061737332537472756374732833297061737332537472756374283529 2218:C7,80|00805607293b4d0046000e0e0e0c0003293b4d013a000e0e0e0c0003030a3b4d022d002e7d05000256272a3c4d0320000e0c00032a3b2b4d0415000e0e0c0004502b4d050a00300e7d0700020e0e0e0e|@2220,I253,I234,@2221,I106,I255,@2219| 2219:O1|@2224 2220:S56|535452554354555245535f28292e70617373325374727563747328332970617373325374727563742835296d616b65547970654964283129 2221:O1|@2222 2222:C3,24|00803c28403b4d000e000e0e0e0c00044d0104002a696442|@2223,I11,-1| 2223:S27|5354525543545f56414c5328292e6d616b65467265654964283129 2224:C1,8|00803b2c69420e0e|@2225| 2225:S5|426f756e64 2226:C6,160|00825609292306562929230856492939566929230b5689293a56a929230a4d007e00221056e96a4d017500221156f96a4d026c002212121100010003006a4d035e002213121200010003006a121100010003002936121300010003002923072e2c32322212220f2218302218220d22122217680c1216000100fcff1217000200020012180001000100221c2c2e2d221e2e4d040b000c00073b2719440e0e0e0e|@4864,@4865,@4868,@4870,@4863,@2972| 2227:S54|535452554354555245535f28292e70617373325374727563747328332970617373325374727563742835297061737332446563283129 2228:C5,96|00814d005a0056182e57386b0403002a2a4d014b000c00035029352a363b30293b4d023b000c000303043b50022229352a362a352b362c372d382e392f3a0e0e0e4f031b00d0000750292503511e2e51505659292309642c310e0e0e7d090002|@2230,@2231,@2253,I229,@2229| 2229:C15,360|0085570a5719572729334d005a010e0e0e0c000329282e4d004d010e0e0c000329220d2e30220e0e0e4f013b0192000631353b4d0231010e0e0c000303032906d3576a293b4d031f010c0003293b4d0416010e0e0e0c000303032902013b579957a72922124d00ff000c000329282e4d00f5000e0e0c0003220f2e2e22172d0e0e160500e200130002000006294d06d7000c00022a4d07cf000c00020402002b2b2b4d08c2000e0e0e0c000450294d09b6002e69221703252e4d06ab000c00022f4d07a3000c00020402002b2b2b4d0896000e0e0e0c000450296602012a12150001000200121600030002002210322f2d22212e4d0a70000e0c0007501217000200fcff1218000200010029221f4d005600020224000e0e0e0c000329282e4d0045000e0e0c0003220c312e322d4d0b36000e0e0e0c00062714220d2a4d0c27000c0003220e2a6956910e0e0e0c000250343b2b4d0d10000e0c0004503b27081f060e0e0e0e0e0e|@2269,@344,@2270,I229,I253,I233,@2796,@2386,@2389,@2392,@4809,@2405,@2693,@2268,I255| 2230:S63|535452554354555245535f28292e70617373325374727563747328332970617373325374727563742835297061737332537472756374757265446563283229 2231:C5,48|00805609561856274d0024002f4d011f000c0003294d0217004d0113000c00032d3c2e2e2d4d030700220c7b07080006|@2233,@2234,@344,@2235,@2232| 2232:O1|@2236 2233:S71|535452554354555245535f28292e7061737332537472756374732833297061737332537472756374283529706173733253747275637475726544656328322973456e762d283129 2234:S10|53747275637475726520 2235:S43|2068617320616c7265616479206265656e20626f756e6420696e2074686973206465636c61726174696f6e 2236:C4,40|00842e03064d001f0002044d0119004d0215002f2e336b312f2b6a642a2d0e0e7d0800020e0e0e0e|@2238,@2239,@2242,@2237| 2237:C9,128|00805609292309294d0074004d0170000e0c00032e23064d0265002a0e0c0002512e3856482a0e0e0e0c0002512e354d034d002a0e0c0002512e23064d0440002a0c0002512e384d0535002a0e0c0002512e354d0629002a0e0c0002515637293b69292c324d0717000c00045030373b2a0c00025130373b2a320e0e7d090002|@2246,@7299,@960,@333,@347,@333,@2245,@329,@1995| 2238:S26|535452554354555245535f28292e6572726f724e656172283529 2239:O1|@2240 2240:C2,56|00802b352c362d37292b3c2e352f36303731383239333a342306220c2307220d2308220e23094d000e0022120e0e0e7b0f06000e0e0e0e0e|@2241,@1111| 2241:S19|4c45585f28292e6572726f7250726f63283129 2242:O1|@2243 2243:C2,56|00802b352c362d37292b3b2e352f36303731383239333a342306220c2307220d2308220e23094d000e0022120e0e0e7b0f06000e0e0e0e0e|@2244,@1111| 2244:S21|4c45585f28292e7761726e696e6750726f63283129 2245:S10|466f756e64206e656172 2246:S29|535452554354555245535f28292e6572726f724e656172283529283129 2247:O2|@2252,@7277 2248:O2|@2249,@7277 2249:C2,32|00802b3556174d0016000e0e0e0c000303033c0202020202013b420e0e0e0e0e|@954,I251| 2250:O2|@2251,@7277 2251:C1,16|008056072928452e6a64420e0e0e0e0e|@954| 2252:C3,40|00802b3556174d001e000e0e0e0c000303062b3729640202020202054d01080010420e0e0e0e0e0e|@954,I251,@958| 2253:O1|@2254 2254:C6,56|00813c28403b4d002e000e0e0e0c00044d0124002a694d021e002b306a4d0317002c694d0411002b69302d452a462b472705430e0e0e0e0e|@2256,I11,@2257,@2261,@2265,@2255| 2255:C1,16|00802b352c3656272d0e0e0e7e030003|@2267| 2256:S28|5554494c49544945535f28292e6e6f4475706c696361746573283229 2257:C3,32|00805607293b4d0016000e0e0e0c00033b2a0e0e0e4f01070030000266420e0e|@2259,I253,@2258| 2258:C3,56|00802b3b4d0030000e0c000303033b021f2b3529352a362e36290e0e0e4f011700410002502b2b695657300e7d070002420e0e0e0e0e0e0e|@2260,I229,@2258| 2259:S36|5554494c49544945535f28292e6e6f4475706c6963617465732832296170706c79283129 2260:S43|5554494c49544945535f28292e6e6f4475706c6963617465732832296170706c792831296170706c283129 2261:C3,32|00813b5617293b4d0015000e0e0c0003644f010b0010000264430e0e0e0e0e0e|@2263,I253,@2262| 2262:C6,104|00802b3b4d0060000e0c0003032c5707561856272a2a695747293b4d0149000e0e0c00032b2a692f3b2b4d023a000e0e0e0c0004503b270702272b3529352d3656382b2a4d0320000e0c0003640309563857482f7d060002294f040b0031000266420e0e0e0e0e0e|@2264,I229,I253,I255,I24,@2262| 2263:S36|5554494c49544945535f28292e6e6f4475706c696361746573283229656e746572283229 2264:S43|5554494c49544945535f28292e6e6f4475706c696361746573283229656e7465722832296c6f6f6b283129 2265:C4,72|00805607293b4d003e000e0e0e0c000329293b4d0131000e0e0c000303033b0224293529352a362c362b334d0219000e0e0c000303052a6801020829250526041e2f3b270466420e|@2266,I253,I229,I24| 2266:S37|5554494c49544945535f28292e6e6f4475706c6963617465732832296c6f6f6b7570283129 2267:S36|5554494c49544945535f28292e6e6f4475706c696361746573283229656e746572283129 2268:O1|@4811 2269:S84|535452554354555245535f28292e70617373325374727563747328332970617373325374727563742835297061737332537472756374757265446563283229706173733253747275637475726542696e64283629 2270:C53,1064|00844d0022042d692c354d011a044d0216040e0e0e0c000303662c362d3730230b57484d03010434322c6b4d04f9032c2f2c4d05f2030e0e0e0c0005294d06e7030c00020304587702322d3b2b4d07d7030c000450293b4d02cd030e0e0c00030316404d08c1030e0e0c0002294d09b7033b3b6b2965020429372964270606dc2c354d0aa2034d029e030e0e0e0c000307d72c362d372e3831230a32230b57684d0b8403220d342c6b2e2d2d4d0c78034d0d74033b2f4d0e6e030e0e0e0c0008294d0f63030c00020304589702ba2e3b2b4d0753030c000450294d104a030e0e0e0c00022a4d113f030c00022a4d1237030c00022b4d132f030c00020402002b2b2b4d1422030e0e0e0c000450294d09160322152215221522110e0e0e16150006031500010000062e3b4d02fa020e0e0e0c00030316404d08ed020e0e0c0002294d09e3023b3b6b296502042e372964121200020002002b2b2e0202c7022217221b2e4d16c102020221000e0e0c0007324d17b302221430221d4d18aa02221a0e0e0e7b071a0006270806cc2c354d1996024d0292020e0e0e0c000303d02c362d37294d1a81020e0e0c00022a4d1b77020c0002404d086f020c0002292b3b3b6b294d1a62020e0e0e0c00023c28403b4d1c54020e0c00044d1d4c022b306a4d1e45022c316a4d1f3e022d326a4d2037022e2e346b4d212f022e30220c6b332306221323064d221f022a2c6a220d2308221623084d2310022a2c6a2210230b2219230b4d2401022a2c6a221b3a221c230a221d394d25f0012210220f22132d30220f2215220e221534220e680c2219221f2b222322250202cb010e0e0e162600c6012100020000062215271b06de2c353e4d02b3010c000307dc2c362d372e382b4d27a3010c00024d289c010e0c000203bc2b36293b4d028e010e0e0e0c000303a22c35404d087f010c0002294d0977013b3b6b294d1a6f010c0002292306220e23064d2961012a2c6a2c2308221123084d2a53012a2c6a2f3930230b2215230b4d2b43012a2c6a22173a2218230a220c37220d38220e2309220f36221023074d2c24012b2f2f220e34221430221334220f2212680c2218221f2b221a22250e0e1626000201210002000006222222192c2222221a161500ee00220001000006271702054d2de00010640207d7004d2ed600106602cf00002c353f4d02c9000e0e0c000303ba2c362d372e38333333332f4f15b300810006313b4d2faa000e0e0e0c0003293b4d309e000e0e0e0c000303032902013b2d2a220d220f22110e0e0e4f318300b10006294d127b000c00022a4d1373000c00020402002b2b2b4d1466000e0e0e0c000450294d325a002e693203262e4d1250000e0c00022f4d1347000c00020402002b2b2b4d143a000e0e0e0c000450296602012a57e833312e221022182e4d1620000e0c000750302c22102d22194d18100022160e7b071600064d33040010641f05|@2272,@2273,-8,I229,@2275,@2277,@2278,@2365,I255,@1893,I48,-2,@2369,@2370,@2373,@2374,@2377,@2380,@2383,@2386,@2389,@2392,@2270,@2405,@2399,@2693,-7,@2286,@2698,I11,@2771,@2773,@2774,@2775,@2784,@2785,@2786,@2787,@2788,@2214,I105,I218,@2790,@2791,@2792,@2793,@2271,@2271,I253,I233,@2796,@4806,@2271| 2271:O3|@7141,@228,@4808 2272:S57|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973747275637456616c7565283529 2273:C7,80|00805607293b4d0046000e0e0e0c0003293b4d013a000e0e0e0c0003030a3b4d022d002e7d05000256272a3c4d0320000e0c00032a3b2b4d0415000e0e0c0004502b4d050a00300e7d0700020e0e0e0e|@2274,I253,I234,@2221,I106,I255,@2219| 2274:S69|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973747275637456616c75652835296e6577547970654964283129 2275:C2,24|00805609561856272b3c2c2c324d000700330e7b07060006|@2276,@2232| 2276:S29|535452554354555245535f28292e676976654572726f72283329283129 2277:S9|537472756374757265 2278:O1|@2279 2279:C3,24|00833b4d0011002e0e4f010b00200003641f040e0e0e0e0e|@2281,@2282,@2280| 2280:C14,224|00810402002c2a4d00d5000e0e0c00035029352a362a4d01c6004d02c2000e0e0e0c000303082956490c00020234563956474d03aa002b2e2c4d04a3000c0005294d059b000c000203064d069200021129330e0e0e0c00022d2a0e0e0e0c00026466294d0779000e0e0c00024d0870000e0c0002030629352964025e564a294d095d004d0a59000e0e0c0003292d4d0a4e000e0e0e0c0003294d0b43004d0a3f000c00032f4d0137004d0233000c000303064d012a00020c4d0c2400304d0a1f000c00032a2a4d0a16000e0e0e0c0003270556570e0c0002503b2704430e0e0e|@2364,@2083,I48,I24,@2277,@2278,@2365,@633,I105,I218,@403,@344,@2368,@2363| 2281:S30|56414c55455f4f505328292e6c6f6f6b7570537472756374757265283429 2282:O1|@2283 2283:C6,64|00802b3b4d0038000e0c00030316404d012d000e0e0c0002294d0223003b3b6b296502042b372964294d0313000c000229230b4d0409002f2b6a66420e0e0e0e|@2285,I229,@1893,I48,@2286,@2284| 2284:C4,56|00802b56180c0002294d002b000c00024d0124000e0c00020314293556272a2a4d0214000e0c00032968016602013b64420e0e0e0e0e0e0e|@2360,I105,I218,@2359| 2285:S33|56414c55455f4f505328292e6c6f6f6b7570537472756374757265283429283129 2286:O7|@2287,@7301,@7303,@7305,@7306,@7308,@7300 2287:C13,168|00802b35561c4d009e002a2c6a563b4d0195002a2e6a565a4d028c002a306a56794d0383002a326a56984d047a002a346a56b74d0571002a220d6a56dc4d0667002a220f6a56fb4d075d002a22116a121200010004004d084e002a22136a121400010003004d093f002a22156a121600010002004d0a30002a22176a121800010001004d0b21002a22196a2f2c220c3422162213221c30221c220d2216221b680c29271a420e0e0e|@2289,@2290,@2295,@2296,@2297,@2298,@2299,@2300,@2319,@2320,@2321,@2322,@2288| 2288:C2,24|00802b352c36562856372a2a2e2e4d000600337b06070005|@2302,@2301| 2289:S24|5354525543545f56414c5328292e6d616b65456e76283129 2290:C2,24|0080560856172a2a2f4d000b00300e7b050500040e0e0e0e|@2292,@2291| 2291:O1|@2293 2292:S28|5354525543545f56414c5328292e6d616b654c6f6f6b283229283129 2293:C3,96|00822d2c4d0058000e0c0003293b4d014e000e0e0e0c000303033b023b293529293b4d013a000e0e0e0c000303033b022629352a3631352b2a0c000264031031372b2a0e0e0c000264296801640207292503511e333b656564440e0e0e0e0e0e|@2294,@1173,I229| 2294:S28|556e6976657273616c5461626c652e756e69764c6f6f6b7570283329 2295:C2,24|0080560856172a2a2f4d000b00300e7b050500040e0e0e0e|@2292,@2291| 2296:C2,24|0080560856172a2a2f4d000b00300e7b050500040e0e0e0e|@2292,@2291| 2297:C2,24|0080560856172a2a2f4d000b00300e7b050500040e0e0e0e|@2292,@2291| 2298:C2,24|0080560856172a2a2f4d000b00300e7b050500040e0e0e0e|@2292,@2291| 2299:C2,24|0080560856172a2a2f4d000b00300e7b050500040e0e0e0e|@2292,@2291| 2300:C2,24|00802b352c36562856372a2a2e2e4d000600337b06070005|@2302,@2301| 2301:O1|@2303 2302:S29|5354525543545f56414c5328292e6d616b65456e746572283229283129 2303:C6,80|00832d362c2a0e0e0e0c0002642f2e4d003d000e0e0c0003294d0133000c00024d022c000e0c0002031129353b2a0e0e0e4f031b004000026502032a3b6931302b4d040b00310e7b050900040e0e0e0e|@2305,@1173,I105,I218,@2306,@2304| 2304:O1|@2308 2305:S27|556e6976657273616c5461626c652e756e6976456e746572283429 2306:C3,64|00802b3b4d0038000e0c000303085604293b696402282b352c36562929352c2a0e0c00026503095624292b692965020d294f010b002100022b2a69296565420e|@2307,I229,@2306| 2307:S36|556e6976657273616c5461626c652e756e6976456e746572283429736561726368283129 2308:C16,328|00822d353b4d003f010c000303244d0136012d4d0231010e0e0c0003294d0327014d0223010c000328674d041a012b6a65102d362e372f38293b4d050a010e0e0e0c0003293b4d05fe000e0e0e0c00032d3b4d05f2000e0e0e0c0003322a0e0e0e0c00023333692d2b2b4d06da000e0e0e0c0004303b4d05ce000e0e0e0c0003293c4d07c2000e0e0e0c0003323b2b4d08b5000e0e0c000450323b4d05a9000e0e0c00032928054d099d000e0e0c0003313f4d0992000e0e0e0c00032a2a4d0a86000e0e0e0c00036603752f3d4d0977000c0003293c4d076e000e0e0e0c00032928403b4d0b60000e0c0004293b2d4d0855000e0e0c0004504d0c4b002c693b220d3b2d4d0840000e0c000450220f3b2c4d0833000c000450220c3b4d0528000e0c0003293c4d0d1e000e0e0e0c000364160e001200120000000002270502013b270b440e0e0e0e|@2310,I229,@2311,@344,@2312,@373,I253,@2313,I106,I255,I108,I233,I11,@177,I107,@2309| 2309:C11,168|00802b3b4d00a0000e0c000303033b029456012c3b4d008f000c000303033c0218293b4d0181000e0e0c00032d2a4d0276000e0e0e0c00036403054d036900102c3c4d0462000e0e0e0c00032a2a4d0156000e0e0e0c00032965293b4d0548000e0c000303043b50022829351204000100f1ff2a1206000100f3ff4d0629000e0e0c00032a2a2e4d071d000e0e0c000426042d3c4d0810000e0c00030e4f09070021000265420e0e|@2318,I234,I253,I231,@52,I106,I229,@178,@2313,I107,@2309| 2310:S20|486173685461626c652e68617368536574283329 2311:S34|417474656d707420746f2073657420612076616c75652077697468206e616d652028 2312:S24|2920696e20612066726f7a656e2068617368207461626c65 2313:O1|@2314 2314:C3,32|00822b3b4d0018000e0c000303033b020c2b353b2e4f01070020000265440e0e|@2316,I229,@2315| 2315:C11,320|008056092c3b4d0036010e0e0e0c000303033c0218293b4d0125010e0e0c00032d2a4d021a010e0e0e0c00036403054d030d01102c3c4d0406010e0e0e0c00032a2a4d01fa000e0e0e0c00032965293b4d05ec000e0c0003034e562956372f3b4d00dc000e0c000303033c02182a3b4d01cd000e0e0c0003302a4d02c2000e0e0e0c00036403054d03b500102f3c4d04ae000e0e0e0c00032b2a2c4d06a100330e0e0e7b05080004293556342a2a4d078e000e0e0e0c000364034d56395647303b4d007b000c000303033c02182a3b4d016d000e0e0c0003312a4d0262000e0e0e0c00036403054d03550010303c4d044e000e0e0e0c00032b2a2c4d064100340e0e0e7b050900042e3b4d0532000e0e0e0c000303125639293b4d0122000e0e0e0c0003296502012e293c4d0811000e0e0c0003644f09070031000266420e0e|@2317,I234,I253,I231,@52,I106,I229,I255,I24,I107,@2315| 2316:S31|486173685461626c652e68617368536574283329656e746572546162283329 2317:S39|486173685461626c652e68617368536574283329656e746572546162283329656e746572283129 2318:S31|486173685461626c652e68617368536574283329636f70794f766572283129 2319:C2,24|00802b352c36562856372a2a2e2e4d000600337b06070005|@2302,@2301| 2320:C2,24|00802b352c36562856372a2a2e2e4d000600337b06070005|@2302,@2301| 2321:C2,24|00802b352c36562856372a2a2e2e4d000600337b06070005|@2302,@2301| 2322:C2,24|00802b352c36562856372a2a2e2e4d000600337b06070005|@2302,@2301| 2323:O2|@2328,@7302 2324:O2|@2325,@7302 2325:C2,32|00802b3556174d0016000e0e0e0c000303033c0202020202013b420e0e0e0e0e|@954,I251| 2326:O2|@2327,@7302 2327:C1,16|008056072928452e6a64420e0e0e0e0e|@954| 2328:C3,40|00802b3556174d001e000e0e0e0c000303062b3729640202020202054d01080010420e0e0e0e0e0e|@954,I251,@958| 2329:O2|@2334,@7304 2330:O2|@2331,@7304 2331:C2,32|00802b3556174d0016000e0e0e0c000303033c0202020202013b420e0e0e0e0e|@954,I251| 2332:O2|@2333,@7304 2333:C1,16|008056072928452e6a64420e0e0e0e0e|@954| 2334:C3,40|00802b3556174d001e000e0e0e0c000303062b3729640202020202054d01080010420e0e0e0e0e0e|@954,I251,@958| 2335:O2|@2340,@7163 2336:O2|@2337,@7163 2337:C2,32|00802b3556174d0016000e0e0e0c000303033c0202020202013b420e0e0e0e0e|@954,I251| 2338:O2|@2339,@7163 2339:C1,16|008056072928452e6a64420e0e0e0e0e|@954| 2340:C3,40|00802b3556174d001e000e0e0e0c000303062b3729640202020202054d01080010420e0e0e0e0e0e|@954,I251,@958| 2341:O2|@2346,@7307 2342:O2|@2343,@7307 2343:C2,32|00802b3556174d0016000e0e0e0c000303033c0202020202013b420e0e0e0e0e|@954,I251| 2344:O2|@2345,@7307 2345:C1,16|008056072928452e6a64420e0e0e0e0e|@954| 2346:C3,40|00802b3556174d001e000e0e0e0c000303062b3729640202020202054d01080010420e0e0e0e0e0e|@954,I251,@958| 2347:O2|@2352,@7156 2348:O2|@2349,@7156 2349:C2,32|00802b3556174d0016000e0e0e0c000303033c0202020202013b420e0e0e0e0e|@954,I251| 2350:O2|@2351,@7156 2351:C1,16|008056072928452e6a64420e0e0e0e0e|@954| 2352:C3,40|00802b3556174d001e000e0e0e0c000303062b3729640202020202054d01080010420e0e0e0e0e0e|@954,I251,@958| 2353:O2|@2358,@7136 2354:O2|@2355,@7136 2355:C2,32|00802b3556174d0016000e0e0e0c000303033c0202020202013b420e0e0e0e0e|@954,I251| 2356:O2|@2357,@7136 2357:C1,16|008056072928452e6a64420e0e0e0e0e|@954| 2358:C3,40|00802b3556174d001e000e0e0e0c000303062b3729640202020202054d01080010420e0e0e0e0e0e|@954,I251,@958| 2359:O1|@2361 2360:S36|56414c55455f4f505328292e6c6f6f6b7570537472756374757265283429283129283129 2361:C5,120|00812c3b4d0070000e0c000303054d016600102c36296429353b4d005a000e0e0e0c0003034f29362e3b4d004a000e0e0e0c000303064d023e0002042e3529642f3b4d0032000e0e0e0c00030316404d0325000e0e0c0002294d021b003b3b6b296502042f3729643d2c316a2b2a2c6a29270502012d6443|@2362,I229,@958,I48,@1893| 2362:S35|5354525543545f56414c5328292e6d616b6553656c6563746564537472756374283229 2363:S14|20696e2073747275637475726520 2364:S42|56414c55455f4f505328292e6c6f6f6b75705374727563747572652834296c6f6f6b7570537472283229 2365:O1|@2366 2366:C2,16|00803b2c4d0008002d0e0e0e7e030003|@2367,I229| 2367:S34|5354525543545f56414c5328292e6973556e646566696e6564537472756374283129 2368:S23|2920686173206e6f74206265656e206465636c61726564 2369:C2,24|00805609561856272b3c2c2c324d000700330e7b07060006|@2276,@2232| 2370:O1|@2371 2371:C5,56|00802b3b4d0030000e0c00030316404d0125000e0e0c0002294d021b003b3b6b296502042b372964294d030b000c000229230a65420e0e0e|@2372,I229,@1893,I48,@2286| 2372:S67|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973747275637456616c756528352966756e6374722d283129 2373:S7|46756e63746f72 2374:O1|@2375 2375:C13,216|0086040200322a4d00cd000e0e0c00035029352a362a4d01be004d02ba000e0e0e0c0003030829340e0c0002022c4d03a600332c314d049f000c0005294d0597000c00020305306801020e29330c00022b2a0e0e0e0c00026464294d0679000e0e0c00024d0770000e0c0002030629352964025a314d085f004d095b000c0003292c4d0952000e0e0e0c0003294d0a47004d0943000c00032e4d013b004d0237000c000303064d012e00020c4d0b28002f4d0923000c00032a2a4d091a000e0e0e0c00032704300e0e0c0002503027041f070e0e0e0e0e0e|@2376,@2083,I48,I24,@2277,@2278,@2365,I105,I218,@403,@344,@2368,@2363| 2376:S24|56414c55455f4f505328292e6c6f6f6b7570416e79283729 2377:O1|@2378 2378:C2,16|00803b2c4d0008002d0e0e0e7e030003|@2379,I229| 2379:S35|5354525543545f56414c5328292e6973556e646566696e656446756e63746f72283129 2380:O1|@2381 2381:C3,24|00802b3b4d0010000e0c000303054d010600102b38296442|@2382,I229,@958| 2382:S30|5354525543545f56414c5328292e66756e63746f72526573756c74283129 2383:O1|@2384 2384:C3,24|00802b3b4d0010000e0c000303054d010600102b35296442|@2385,I229,@958| 2385:S27|5354525543545f56414c5328292e66756e63746f72417267283129 2386:O1|@2387 2387:C1,8|00802b382964420e|@2388| 2388:S28|5354525543545f56414c5328292e7369674d696e5479706573283129 2389:O1|@2390 2390:C1,8|00802b372964420e|@2391| 2391:S28|5354525543545f56414c5328292e7369674d61785479706573283129 2392:O1|@2393 2393:C9,88|00823b2d4d0050000e0c000303033b02012c293c4d0140000e0c00032928404d0235004d0331000e0e0c0004293b2d4d0425000e0e0c0004504d051b002a31336b4d0613002b32346b4d070b002a69312a452c462706440e|@2395,I233,I106,@1480,I11,I255,@2396,@2403,@2394| 2394:C1,16|00802b352c3656272d0e0e0e7e030003|@2398| 2395:S29|535452554354555245535f28292e747970654d61746368546162283329 2396:C13,416|00802b4d0099010e0e0c00024d0190010e0c000203033c02c42b29354d0280014d037c010e0c000303292936293b4d046e010e0e0e0c000329353c4d0361010e0e0c000303032b0207292503511e333b650201296429353b4d0344010e0c000303062936296402054d0534011056292a2a4d062b010c00036603033c025f2b29354d021b014d0317010c000303292936293b4d040a010e0e0e0c000329353c4d03fd000e0e0c000303032b0207292503511e323b650201296429353b4d03e0000e0c000303062936296402054d05d0001056282a2a4d07c7000c00036603033b02bc56072c29354d02b5004d03b1000e0e0c000303292936293b4d04a2000e0e0e0c000329353c4d0395000e0e0c000303032b0207292503511e343b650201296429353b4d0378000e0c000303062936296402054d05680010293b4d0661000e0e0c000303033c02182b3b4d0451000e0e0c00032a2a4d0746000e0e0e0c00036403054d08390010293c4d0932000e0e0e0c00032c2a4d0426000e0e0e0c00032965294d0a19000e0e0c00024d0b10000e0c000203033b02032968012704420e|@2398,@2399,I218,-2,I229,I253,@2397,I234,I231,@52,I106,@1482,@1485| 2397:O3|@7141,@228,@2402 2398:S32|535452554354555245535f28292e747970654d61746368546162283329283129 2399:O1|@2400 2400:C4,80|00802b29354d0047004d0143000c000303292936293b4d0236000e0e0e0c000329353c4d0129000e0e0c000303032b0207292503511e323b650201296429353b4d010c000e0c000303033c02013b6442|@2401,-2,I229,I253| 2401:S26|5354525543545f56414c5328292e6973426f756e644964283129 2402:S21|6f666673657449643a206e6f74206120426f756e64 2403:C11,384|00812c4d0079010e0e0c000203c82c29354d016b014d0267010c000303292936293b4d035a010e0e0e0c000329353c4d024d010e0e0c000303032b0207292503511e323b650201296429353b4d0230010e0c000303062936296402054d0420011056292a2a4d0517010c00036603642c29354d010a014d0206010e0e0e0c000303292936293b4d03f6000e0e0e0c000329353c4d02e9000e0e0c000303032b0207292503511e353b650201296429353b4d02cc000e0c000303062936296402054d04bc001056282a2a4d06b3000c00036602013b02013b03a356072d29354d019e004d029a000e0e0e0c000303292936293b4d038a000e0e0e0c000329353c4d027d000e0e0c000303032b0207292503511e353b650201296429353b4d0260000e0c000303062936296402054d04500010293b4d0649000e0e0c000303033c02182b3b4d0339000e0e0c00032a2a4d052e000e0e0e0c00036403054d07210010293c4d081a000e0e0e0c00032c2a314d090d00320e0e0e7b050800043b430e0e|@2404,@2399,-2,I229,I253,@2397,I231,I234,@52,I106,I255| 2404:S32|535452554354555245535f28292e747970654d61746368546162283329283229 2405:O1|@2406 2406:C3,40|00852e364d0020002e302f33680532322b0c00034d0110003032312f680534342b310e0e7e0c0003|@2408,@2409,@2407| 2407:C7,88|00812b4d0051000e0e0c00024d014800562756385649565a323068074d0238002a692b2a3b4d032f000c00042f4d0027000c00024d042000566756785689569a220d68064d0510002a692b2a3b4d0307000c00043b270843|@2542,@2412,@2543,@2675,@2410,@2677,@2541| 2408:S26|535452554354555245535f28292e6d6174636853696773283629 2409:C5,48|00812b4d0029000e0e0c00024d012000562756385649565a323068074d0210002a692b2a3b4d030700310e7b05070004|@2411,@2412,@2415,@2506,@2410| 2410:O1|@2508 2411:S39|535452554354555245535f28292e6d61746368536967732836296d617463684e616d6573283229 2412:O1|@2413 2413:C1,8|00802b352964420e|@2414| 2414:S23|5354525543545f56414c5328292e736967546162283129 2415:C33,696|00822c4d00b1020e0e0c000207d32c4d01a5020e0e0c0002561b4d029a020e0e0e0c0002294d038f02314d048a020e0e0e0c0004294d057f020c00024d0678020e0c000207d529352c4d076b020c00024d0864020e0c00024d065c020e0c000207cb564a2d2b2b4d094d020e0e0c0004502d4d0a42020e0e0e0c00022b4d0a37020c00022a2a4d0b2e020e0e0e0c0003654d0623020c00020336565956685677304d0c13020c00024d0d0c022a4d0e07020c0003294d0fff014d0efb010c00032e3c2f2f2d4d10ef0122127b071000062d4d11e3010c000203182a4d12d9010202fc000e0e0c00024d06cc010e0c000202013b033f5659566856772d4d0cb8010e0c000228282a4d0ead010e0e0c0003294d13a3014d0e9f0102028f000c00032e3c2f2f2d4d108f012212020279007b071000062d4d147f010c00023b2a4d1576010e0e0e0c0003644d066b010c000203192a4d1461010e0e0c00023b2a4d1556010e0e0e0c00036402013b03365659566856772d4d0c3f010c000228282a4d0e35010e0e0c0003294d162b014d0e27010c00032e3c2f2f2d4d101b0122127b071000063b6402013b6402305639564856574d170201344d0efd000e0e0c0003294d18f3004d0eef000c00032d3c2e2e2d4d10e300220f7b070d00066606ce2c4d19d4000e0c000203ca2c4d1ac9000e0e0c0002561b4d02be000e0e0e0c0002294d1bb300314d04ae000e0e0e0c0004294d05a3000c00024d069c000e0c0002035e2935293b4d158e000e0e0e0c00030316404d1c81000e0e0c0002294d1d77003b3b6b29650204293729642d3b4d1566000e0e0e0c00030316404d1c59000e0e0c0002294d1d4f003b3b6b296502042d3729642a2a568c330e0e0e7e0b00035639564856574d1e2e00344d0e29000e0e0c0003294d1f1f004d0e1b000c00032d3c2e2e2d4d100f00220f020206007b070d00063b440e0e|@2417,@2348,@2347,@2412,@7308,@2291,I105,I218,@1482,@1485,@2418,@2424,I113,@2080,@2427,@344,@2428,@2232,@2429,@2431,@2500,@2501,I229,@2503,@2504,@2416,@2336,@2335,@7305,@1893,I48,@2505,@2416| 2416:S23|29206d697373696e6720696e207374727563747572652e 2417:S42|535452554354555245535f28292e6d61746368536967732836296d617463684e616d6573283229283329 2418:O1|@2419 2419:C11,192|00822d4d00b9000e0e0c00022e4d01af000c00024d02a8000e0c000203152c352f4d019b000c0002293069642a0c00025102023b50294d0386000e0e0e0c0002030e294d0479000e0e0c00023c6402013b0364294d0368000e0c0002030e294d045d000e0e0c0002296402054d055000102937644d0648000e0c00022d362a4d013d000e0e0c00022a0c000264294d072e000e0e0e0c00024d0824000e0c000203033b020f2a30304d091400310e0e7b050800046502013b64440e0e0e0e0e0e|@2421,@2420,@1482,@2399,@2073,@2075,@958,@2077,I105,I218,@2418| 2420:O1|@2422 2421:S31|545950455f5452454528292e656e74657254797065436f6e73747273283329 2422:C3,48|00802b3929353b4d0025000e0e0c0003030629362964020e2936293b4d0110000e0c00032965293665420e0e0e0e0e0e|@2423,I229,I253| 2423:S7|6f283229283129 2424:O1|@2425 2425:C1,8|00802b362964420e|@2426| 2426:S24|5354525543545f56414c5328292e74634172697479283129 2427:S7|54797065732028 2428:S25|29206861766520646966666572656e7420617269746965732e 2429:O1|@2430 2430:C3,48|00802b3929353b4d0025000e0e0c0003030629362964020e2936293b4d0110000e0c00032965293565420e0e0e0e0e0e|@2423,I229,I253| 2431:O1|@2432 2432:C16,176|00802b4d00a9000e0e0c000203033c02972b4d019a000e0e0e0c0002294d028f000c00026403033b027e2b4d0381000e0e0c00022c4d0477000c00020402002e4d056c000e0c00024d0664000e0c000203193c2840304d0756000e0e0e0c00042a4d084b00452a46510206293b452f4650292b2d2b6a4d0936000e0e0e0c0002294d0a2b004d0b27004d0c23000c00044d081c002a4d0d17000c000327064d0e0e002c0e0e800002420e0e0e0e0e0e0e|@2434,@2429,@2420,@2046,@2080,@2435,@1482,@1485,I11,-1,@1489,@2438,@2441,@2433,I251,I218| 2433:O1|@2443 2434:S30|545950455f5452454528292e7065726d697473457175616c697479283129 2435:O1|@2436 2436:C1,8|00802b382964420e|@2437| 2437:S27|5354525543545f56414c5328292e74635479706556617273283129 2438:O1|@2439 2439:C2,8|00804d000200420e|@2440,-1| 2440:S33|545950455f5452454528292e7065726d697473457175616c697479283129283129 2441:O1|@2442 2442:C1,8|00803c420e0e0e0e|@2440| 2443:C36,584|00823b2e4d0040020e0c0002294d0137020c00020376294d022d020e0e0c000229352a364d0320020e0c000303033c025829352a364d040f020c0003294d0507020c00020339294d06fd010e0e0c00022b310e0e0e0c0002294d07eb014d08e7010c000303064d07de0102102b33334d09d501340e0e0e7b050b00046502092a30300e0e7d090002646406cd294d0ab7010c00020311294d0bad010e0e0c00024d07a4016406cb294d0c9c010e0c000207d5294d0d91010e0e0c000229352a37294d0e83010c0002294d0f7b010c00024d1074010e0c000203064d076a0106ca283d2a4d1161014d125d010e0e0c00044d1354012a354d084e010e0e0e0c0003644d1443010c000203033c06d0294d0f36010e0e0e0c00024d152c014d0f28010e0c00022a2a4d161e010e0e0e0c00036503064d07110102ab294d170a010e0e0e0c0002030c2b3c0e4f18fb007000030292294d19f1000202e6000e0e0c0002294d1ae3000c0002640338294d0fd8000202cd000e0c0002330c0002294d07c7004d08c30002025f000c000303064d07b600020c2c2a0e0e0e4f18ab00800003640241294d19a000020238000e0c00022a4d1b93000c0002292e4d1c8a000e0e0e0c00032b2a3c4d1d7d000e0e0c000429220e220e4d096f00220f020205007b050f000427040259294d055b000c00020326294d0651000e0e0c000229364d1e46002a2a0e0c0002293c0e0e0e4f18370070000327040229294d1f2b000c0002030f294d2021000e0e0c00024d21180010294d2212000e0e0e0c0002504d07070065440e0e0e0e0e|@2445,@2039,@1474,@1476,@2027,@2043,@2049,@2051,-1,I229,@2433,@2107,@2109,@2073,@2075,@2077,@1482,@1485,@2446,@2449,-2,I218,@2457,@2453,@2429,@2460,@2420,@2046,@2435,@2462,@2465,@2494,@2069,@2041,@2496,@2444| 2444:O1|@2498 2445:S23|545950455f5452454528292e657175616c697479283329 2446:O1|@2447 2447:C2,8|00804d000200420e|@2448,@431| 2448:S26|545950455f5452454528292e657175616c697479283329283129 2449:O2|@2450,@7309 2450:C3,32|00823b5617293b4d0015000e0e0c0003644f010b0010000264440e0e0e0e0e0e|@2452,I253,@2451| 2451:C6,104|00802b3b4d0060000e0c0003030a3b56172c0e0e0e8000022b3529352a362b372f365659292e4d013e000e0e0e0c000364032056584d022f000c00022c4d0227000c00022a2a4d031e000e0e0e0c00036502013b03032a020b290e0e0e4f0407005100022705420e|@2454,I229,I24,@1482,@2453,@2451| 2452:S28|5052494e545f5441424c4528292e6765744f7665726c6f6164283329 2453:O1|@2455 2454:S41|5052494e545f5441424c4528292e6765744f7665726c6f61642833297365617263684c697374283129 2455:C8,256|00812c29354d00f7004d01f3000c000303292936293b4d02e6000e0e0e0c000329353c4d01d9000e0e0c000303032b0207292503511e323b65020129642c29354d00bc004d01b8000e0c000303292936293b4d02aa000e0e0e0c000329353c4d019d000e0e0c000303032b0207292503511e333b65020129642a354d0081004d037d000e0e0c00030a020009002d0051003b02662a362a354d0064004d0160000e0c0003030e2a362a2a4d045200310e7e0800033b6402422a362a354d0540004d013c000e0c0003030e2a362a2a4d042e00310e7e0800033b64021e2a362a353b4d011b000c0003030e2a362a2a4d060e00310e7e0800033b6465430e0e0e0e|@2456,-2,I229,I253,I107,I251,-1,I113| 2456:S27|5354525543545f56414c5328292e73616d65547970654964283229 2457:O6|@2459,0,0,0,@524,@2458 2458:O2|-1,@7310 2459:S4|7265616c 2460:C6,88|00812c3b4d0050000e0c000303032b02452c352d36562856372c2b2b4d0138000e0c0004294d022f004d032b000c00030a01000f0015002c314f041b0061000302124d021200020c2c3b0e0e0e4f0407006100032705430e|@2461,I229,@2433,-1,I107,@2460| 2461:S35|545950455f5452454528292e657175616c6974792833296571466f724c697374283229 2462:O1|@2463 2463:C7,112|00812c4d0069000e0e0c00024d0160000e0c000203562c352d362d4d0051000e0e0c00024d0148000e0c0002033a2d352e362c4d0239000e0e0c0002030e2c4d032d000e0e0c0002296402054d042000102b2a692d2c4d0516000e0e0e0c00032a2a6929270602013b6502013b430e0e|@2464,I105,I218,@1474,@1476,@958,@2462| 2464:S23|545950455f5452454528292e636f707956617273283229 2465:O1|@2466 2466:C5,40|00822c2c4d0020000e0c00034d0118002a692f2a4d0210004d030c00300e0e7b050700040e0e0e0e|@2468,@2469,@2476,@2483,@2467| 2467:O1|@2486 2468:S30|545950455f5452454528292e67656e6572616c6973655479706573283329 2469:O1|@2470 2470:C3,32|00813c28402e4d0016000e0e0e0c00044d010c002a2e6a64430e0e0e0e0e0e0e|@2472,I11,@2471| 2471:C6,64|00802b4d0039000e0e0c0002030e2b4d012d000e0e0c0002296402054d022000103b5627293b4d0316000e0e0e0c0003644f040b0020000265420e0e0e0e0e0e|@2474,@1474,@1476,@958,I253,@2473| 2472:S27|545950455f5452454528292e7476617253657175656e6365283229 2473:C16,232|00802b3b4d00e0000e0c000303ac560429352a364d01d0000e0c0003562429352a364d02c2000e0e0e0c0003640304572802013b0402004d03ad001b0f272d3b2e2e4d04a2000e0e0e0c00075029644d0595000e0e0c0002294d068b000c0002030e294d0781000e0e0c0002296402054d08740010565429352a364d0969000e0e0c00032b2a4d0a5e000e0e0e0c000350577756842e2a6957a7293b4d0b48000e0c00032b2a692e3b2b4d0c3a000e0e0e0c00045032270d02282b3529352a362e3656442b2a4d0d1e000e0e0e0c00036403032b020a290e0e4f0e0b004100022704420e0e0e0e0e|@2475,I229,@2027,@2062,@205,@1348,@1326,@1474,@1476,@958,@2043,@1469,I253,I255,@2024,@2473| 2474:S30|545950455f5452454528292e7476617253657175656e6365283229283129 2475:S41|545950455f5452454528292e7476617253657175656e63652832292831297054797065566172283129 2476:C15,224|00802b4d00d9000e0e0c000203ca2b4d01cd000e0e0c000229352a364d02c0000e0c0003291b0f274d03b4000e0c0003644d04ab000c000203032c02982c56270e0c00022a352b364d0594000e0c0003294d068b000c00020377294d0781000e0e0c000229372b2f4d0874004d0970000e0c0004294d0667000c0002034a294d075d000e0e0c000229352a36304d004f000c0002030e304d0145000e0e0c0002296402054d0a380010322f692c2c2b6a644d0b2b000c00022a2a4d0c22000e0e0e0c0003260602054d0d140010260302023b502a656402012b420e0e0e0e0e0e|@2478,@1474,@1476,@2059,I113,I218,@2043,@2049,@2051,@2479,@2467,@958,@1471,@1469,@2477| 2477:O3|@7141,@228,@2482 2478:S44|545950455f5452454528292e67656e6572616c6973655479706573283329636f707954797065566172283129 2479:O1|@2480 2480:C1,8|00802b420e0e0e0e|@2481| 2481:S47|545950455f5452454528292e67656e6572616c6973655479706573283329636f707954797065566172283129283129 2482:S48|436f7079206f66206c6162656c6c6564207265636f7264206973206e6f742061206c6162656c6c6564207265636f7264 2483:O1|@2484 2484:C1,8|00802b420e0e0e0e|@2485| 2485:S33|545950455f5452454528292e67656e6572616c6973655479706573283329283129 2486:C30,448|00823b3b2f4d00b7010c0002294d01af010c00020312294d02a5010e0e0c00022a31300e7d090002294d0393010c000203b6294d0489010e0e0c000229352a372a4f057b016000022a4d0673010c0002330c0002294d0767010c00022b2e4d085e010e0e0e0c000303312c4d0651010e0e0c00022b2a4d0846010e0e0e0c00036403152c353b4d0936010e0e0e0c000303033c02013b02013b02013b03032f02430402002b4d0a17010c00024d0b10010e0c000203193c28402d4d0c02010e0e0e0c00042a4d0df700452a46510206293b452c4650292d2c2b6a4d0ee200220e7d100002270606cb294d0fd3000c00020356294d10c9000e0e0c000229352a362a33334d11b9000e0e0c00042a34344d11ad000e0e0c00042a2d4d08a2000e0e0e0c0003030c292c4d0894000e0c000302013b03032e020c2a2a694d128100347d0d000227050275294d1373000c0002033a294d1469000e0e0c000229352a36294f155b00600002292b4d0852000e0e0e0c000303032d020f2b2a3b6a4d163f00330e0e7d0c000227040231294d172f000c000203064d1826000221294d191f000c000203064d1a16000211294d1b0f00020208000c00024d1c04001066440e|@2488,@2039,@1474,@1476,@2073,@2075,@2489,@2077,@2080,I251,I229,@1482,@1485,I11,-1,@1489,@2107,@2109,@2467,@1500,@2049,@2051,@2491,@1471,@2046,@205,@2444,@633,@2041,@2487| 2487:O3|@7141,@228,@2493 2488:S23|545950455f5452454528292e636f707954797065283329 2489:C5,88|00802b3b4d0050000e0c000303033b02422b352c36562856372c2b2b4d0138000e0c00042c4f022f005100022a2f4d0326000e0e0e0c0003030c292e4d0318000e0c000302013b03033102052a2a6929642706420e0e0e0e|@2490,I229,@2467,@2489,I251| 2490:S34|545950455f5452454528292e636f707954797065283329636f70794c697374283129 2491:C5,96|00802b3b4d0058000e0c000303033b02492b3529352a362e36564856572c2b2b4d013c000e0c00042c4f0233007100022a2f4d032a000e0e0e0c0003030c292e4d031c000e0c000302013b03033302082f2b69292b6929652708420e0e0e0e0e|@2492,I229,@2467,@2491,I251| 2492:S40|545950455f5452454528292e636f707954797065283329636f70795265636f72644c697374283129 2493:S27|636f7079547970653a204f7665726c6f616453657420666f756e64 2494:O1|@2495 2495:C3,40|00802b3b4d0020000e0c000303033b02152b352c362a362a4d010c000e0c00022a2a69292705420e|@436,I229,@2494| 2496:O3|@7141,@228,@2497 2497:S28|657175616c697479202d204f7665726c6f616473657420666f756e64 2498:C2,16|00803b2c354d0007002d0e0e7e030003|@2499,I229| 2499:S7|42616454797065 2500:S18|29206973206e6f7420616e20657174797065 2501:O1|@2502 2502:C3,48|00802b3929353b4d0025000e0e0c0003030629362964020e2936293b4d0110000e0c00032965293765420e0e0e0e0e0e|@2423,I229,I253| 2503:S19|29206973206e6f742061206461746174797065 2504:S6|547970652028 2505:S11|5374727563747572652028 2506:C1,16|00802b352c362d3756372e7b05030004|@2507| 2507:S42|535452554354555245535f28292e6d61746368536967732836296d617463684e616d6573283229283129 2508:C3,80|00822d4d0049000e0e0c00022c2a293729644d013a000e0e0e0c000203032a022c29363b2a0c000229352a362d353b2a0e0c00022c2c326a220d0e0e0e0c0002292b2509250926071e3a3b270766440e|@2510,@2509,I218| 2509:O1|@2511 2510:S26|556e6976657273616c5461626c652e756e6976466f6c64283329 2511:C4,144|00802b4d0089000e0e0c00020402002a37296403642a363b2a0c00022936293b4d016c000e0c000303452d29353b2a0e0e0c000229372964032b29363b2a0e0e0e0c00022936293b4d0144000e0c000303092c250626051e2c0206322d452a4650260302062f2a453b4650260302062c2e452a465026030206292b453b465029644d020b002d0e0e7d0400020e0e0e0e|@2513,@2514,I229,@2512| 2512:O2|@2530,@2529 2513:S26|556e6976657273616c5461626c652e756e69764f766572283129 2514:O1|@2515 2515:C10,184|00800402002c354d00ad004d01a9000e0e0c000303292c38293b4d029a000e0e0e0c0003293b4d028e000e0e0e0c00034d0384002b692d2b452a462605021a2c37294d0472000e0e0e0c00024d0568002b692c2b452a46260429352a364d0657002a2c6a4d005000293c4d074a000e0e0e0c0003292e4d083e000e0e0e0c0003030a292c320e0e0e7d090002292d0e0e0e0c0002293b4d011e000e0e0e0c000303092a2503511e3e3b02092a2d330e0e7d0a00022707420e|@2517,-1,I229,I253,@2518,I15,@2520,@2516,I106,I231| 2516:C4,48|008056082c2a4d0026000e0e0e0c00034d011c002c564756583168054d02100056475658316b2a2a2d6a292705420e0e|@2522,I234,@2523,@2521| 2517:S21|486173685461626c652e686173684f766572283129 2518:C6,80|008056072c3b4d0046000e0e0e0c000303033c0218293b4d0135000e0e0c00032d2a4d022a000e0e0e0c00036403054d031d00102c3c4d0416000e0e0e0c00032a2a4d010a000e0e0e0c00032966420e|@2519,I234,I253,I231,@52,I106| 2519:S34|486173685461626c652e686173684f7665722831293c7061747465726e3e2d283129 2520:C6,72|008056072c3b4d003e000e0e0e0c000303033c0218294d012e000e0e0e0c00022d2a4d0222000e0e0e0c00036403054d03150010292d4d040e000e0e0e0c00032965420e0e0e0e0e|@2519,I234,I15,I231,@52,I253| 2521:C5,64|0080560956182a2a4d0034000e0c00036403202956270e0e0e0c0002293b4d011e000e0e0e0c000303054d02120010296402054d0309001064420e0e0e0e0e0e|@2524,I234,I229,@2526,@2525| 2522:S32|486173685461626c652e686173684f7665722831296d616b6549746572283129 2523:C4,88|0080560a29293c4d004d000e0e0c000356392a2a4d0140000e0c00036403092956472f0e7d0600022956480e0e0c0002293b4d0222000e0e0e0c000303092a2503511e3d3b02092a5657300e7d0700022704420e0e0e0e0e|@2524,I106,I231,I229| 2524:S35|486173685461626c652e686173684f7665722831296d616b6549746572283129283129 2525:O3|@7141,@228,@2528 2526:O3|@7141,@228,@2527 2527:S31|486173685461626c652e686173684f7665722e76616c756520284e6f6e6529 2528:S39|486173685461626c652e686173684f7665722e76616c756520286c696d69742070617373656429 2529:O2|@2537,@2512 2530:C5,48|00802b363b2a4d0026000e0e0e0c00034d011c000e0c00024d02140056372f6a4d030c002f692a2a2d6a292705420e0e|@2532,I229,I218,@2533,@2531| 2531:C3,56|008056070402002a352b36293b4d0027000c000303054d011e001029352b363b2a0c000229352f2a452d4626052b2704420e0e0e0e0e0e0e|@2534,I229,@2535| 2532:S37|556e6976657273616c5461626c652e756e69764f7665722831296d616b6549746572283129 2533:C1,16|0080560829352a3656372e0e7e040003|@2534| 2534:S40|556e6976657273616c5461626c652e756e69764f7665722831296d616b6549746572283129283129 2535:O3|@7141,@228,@2536 2536:S29|556e6976657273616c5461626c652e756e69764f7665722e76616c7565 2537:C3,128|00812b3b4d0078000e0c000303054d016e00102b36293b4d0065000e0e0c000303520402002e29353b2a0e0e0e0c000229372964032b29363b2a0e0e0e0c00022936293b4d0038000e0c000303092c250626051e2d02062f2d452a4650260302062c2a453b46502603296456272d0e0e7d0500022d2a6956272d0e0e7d050002|@2539,I229,@2538| 2538:O3|@7141,@228,@2540 2539:S33|556e6976657273616c5461626c652e756e69764f7665722831296e657874283229 2540:S28|556e6976657273616c5461626c652e756e69764f7665722e6e657874 2541:C1,16|00802b352c362d3756372e7b05030004|@2692| 2542:S38|535452554354555245535f28292e6d61746368536967732836296d6174636856616c73283229 2543:C16,288|00822c4d0019010e0e0c000203662c4d010d010e0e0c0002561b4d0202010e0e0e0c0002294d03f700314d04f2000e0e0e0c0004294d05e7000c00024d06e0000e0c0002032a2935564a4d07d200566956785687569a68055669567856872e322f2f2f2f2f4d08b70022127b090e00083b6602a52c4d09a7000c0002039a2c4d0a9d000e0e0c0002561b4d0292000e0e0e0c0002294d0b8700314d0482000e0e0e0c0004294d0577000c00024d0670000e0c0002035e2935293b4d0c62000e0e0e0c00030316404d0d55000e0e0c0002294d0e4b003b3b6b29650204293729642d3b4d0c3a000e0e0e0c00030316404d0d2d000e0e0c0002294d0e23003b3b6b296502042d3729642a2a568c330e0e0e7e0b00033b6602013b440e0e0e0e0e0e|@2545,@2348,@2347,@2412,@7308,@2291,I105,I218,@2546,@2544,@2336,@2335,@7305,I229,@1893,I48| 2544:O1|@2663 2545:S65|535452554354555245535f28292e6d61746368536967732836296d6174636856616c73283229636865636b5479706573416e64537472756374757265732d283329 2546:C3,48|00802b352c362d37563a56475659566856774d001a002b302c6b31313030302e4d010c0022110e7b080c00070e0e0e0e|@2548,@2549,@2547| 2547:O1|@2553 2548:S68|535452554354555245535f28292e6d61746368536967732836296d6174636856616c73283229636865636b5479706573416e64537472756374757265732d283329283129 2549:C8,88|00805609292309294d004c004d0148000e0c00032e3856484d023c002a4d0337000c0003294d042f004d032b000c0003652a0e0e0e0c0002512e354d0519002a0e0c0002515637293b69292c324d060700330e7b05080004|@2551,@7299,@960,@2552,@344,@2550,@2128,@1995| 2550:S6|29206e656172 2551:S29|535452554354555245535f28292e666f756e644e656172283329283129 2552:S16|5768696c6520636865636b696e672028 2553:C5,48|00854d002a002f69313b3c4d0121000e0e0c00044d0218002e30326b2a332d2c4d030c00320e0e7b060b00050e0e0e0e|@2555,@2556,@2465,@2575,@2554| 2554:O1|@2584 2555:S25|545950455f5452454528292e6d617463685479706573283629 2556:C4,32|00804d001a005617692c4d0112002b4d020d002f0e0e0e7b050400040e0e0e0e|@2558,@2559,@2557,@2467| 2557:O1|@2573 2558:S38|545950455f5452454528292e6d617463685479706573283629636f7079546172676574283129 2559:C7,48|00804d002a005617694d01230056272a2a692f2d4d0218002c4d0313004d040f004d050b00220c7b080700070e0e0e0e|@2561,@2562,@2564,@2221,@2557,I48,@2560| 2560:O1|@2566 2561:S41|545950455f5452454528292e6d617463685479706573283629636f7079546172676574283129283129 2562:C3,32|00802b56170c0002294d0013000c00024d010c002d0e0e0e7d0400020e0e0e0e|@2563,I105,I218| 2563:S44|545950455f5452454528292e6d617463685479706573283629636f7079546172676574283129283129283129 2564:O1|@2565 2565:C1,8|00803b420e0e0e0e|@2563| 2566:C17,256|00852d352e36324d00f5000e0e0c0002334d01eb000c0002294d02e3000c000203032902204d03d7004d04d3003134220d220f68062a4d05c6002b4d06c1000e0e0c0004642b220c0e0c000203033c02132a2a4d07a9000e0e0c00034d08a0000e0c000203942b2d0e0c0002294d098f000c00024d0888000e0c000203062935296402732b4d0277000c00020325220d4d0a6c000e0c00020402002a2a4d0b5f000c0003502936342a4d0c53000c0003660209220d4d0a47000c0002220e4d0d3e000e0e0e0c00023b220e0e0e0c000222104d0e2a000e0e0e0c00022c2c302d2d3b4d0f1a000e0e0e0c0007312a69340e0c00022a2706640202220c27051f06|@2568,@1482,@2420,@2046,@2569,@2560,@2557,@2467,I251,I218,I105,@2080,@2083,@344,@2435,@2429,@2567| 2567:O1|@2571 2568:S29|545950455f5452454528292e636f707954797065436f6e737472283629 2569:C2,32|0080560b561a562956382f2d2d2d4d000e002e56a7220c7b080700070e0e0e0e|@2570,@2557| 2570:S44|545950455f5452454528292e636f707954797065436f6e737472283629636f7069656445717569762d283129 2571:C5,88|00853b30293b4d004e000e0e0e0c000303032a021629362b3c4d013b000c0003292b25042504511e233b65652d303b6a3c28402b4d0220000e0c00044d0318002a69342d31220d2d220d68062927051f060e0e0e0e0e0e0e|@2572,I229,I106,I11,-1| 2572:S32|5354525543545f56414c5328292e6d616b6554797065436f6e73747273283629 2573:C1,8|00802b420e0e0e0e|@2574| 2574:S22|545950455f5452454528292e747269764d6170283129 2575:C4,40|00802b352c362d375639564856574d0016002f4d01110030303030304d02080022100e7b0a090009|@2577,@2578,@2579,@2576| 2576:O1|@2580 2577:S37|545950455f5452454528292e6d61746368547970657328362963616e744d61746368283129 2578:S11|43616e2774206d61746368 2579:S2|746f 2580:C3,64|00874d003a002c303234220d220f346808292e3c3135323633373438220c39220d3a220e2306220f230722102308221123094d010a0022100e0e0e7b0f0b000e|@2582,@2581,@1111| 2581:C11,192|00803b4d00b9000e0e0c0002561d292309294d01aa004d02a6000e0e0e0c00032f23064d0399002a0e0c0002512f38565c2a0e0e0e0c0002512f354d0481002a0e0c000251564b292b32303c4d0570000e0c00065030354d0665002a0e0c0002513038566a2a0e0e0e0c00025130354d074d002a0e0c0002515659292c33313c4d053c000e0c00065031354d0831002a0e0c000251313856782a0e0e0e0c00025131354d0919002a0e0c0002513156770e0c00025031373b2a330e0e7d0a0002|@2583,@2018,@7299,@960,@347,@329,@2033,@329,@329,@329,@329| 2582:S25|545950455f5452454528292e6d617463684572726f72283829 2583:S28|545950455f5452454528292e6d617463684572726f72283829283129 2584:C2,24|00833b2f2f2f0e0e0e4f000b00300004641f040e0e0e0e0e|@2586,@2585| 2585:C47,2872|00823b3b2f4d002f0b0c00022f4d00270b0c00023b3b3b2d4d011c0b0e0c000203033b06ce2d4d020e0b0e0e0e0c000207d22d4d03010b0e0e0c00022d4d01f70a0c000203033b06ce2d4d02ea0a0e0e0e0c000207d22d4d03dd0a0e0e0c00022a352b364d04d00a0e0c00032f220d0e0e0c0002294d02bf0a0c000207d4294d03b50a0e0e0c00022d2a4d05aa0a0e0e0e0c000303033b06d32d352e364d06970a0c0003030c29330e4f078b0ad0000306d129352a364d047e0a0e0e0e0c00032c4d08730a0c000203c52c4d09690a0e0e0c00022a4d085f0a0c0002036d2a4d09550a0e0e0c00022c4d0a4b0a4d0b470a0202400a0c000350304d0a3a0a4d0b360a0202e9010e0e0e0c0003502a2a302e4d0c230a0202d301160d001a0a1500000000062d2a0202b9010e0e0e160700060a13000000000350312f0e0e160700f6091300000000036502412a4d0ee80902027c010e0c0002030c2b220c4f07d709f0000302262211221102025f010e0e0e0c000222132a4d0fbd096a6456f72211020248010e0e0e7d1300026406d12c4d10a4090e0c000207c82c4d1199090e0e0c00022a4d108f090c000203962a4d1185090e0e0c00023b2a0e0e0e1612007609120000000002293b4d136a090e0e0e0c00030322221422140e0e0e0c000222162a4d1451096a641213000100010022140e0e7d1600022e4d0a3b094d0b37090c000350324d0a2e094d0b2a090e0e0e0c000350294d151e090e0e0e0c00022f2a0e0e0e1607000e091500000000035033310e0e160700fe08150000000003270402382a4d0eef080c0002030c2b220c4f07e308f0000302222211221102046a001b000e0c000222132a4d0fc9086a6456f722110e0e0e7d13000264024d2c4d0eb4080e0c0002030c2e2c0e4f07a708e000030236294d0e9d080e0e0c0002030c2a340e4f078f08e00003021e221022100e0e0e0c000222122a4d0f79086a6456e722100e0e0e7d12000264640210312a4d0c62080e0e0e4f165b08d10004660209290e4f174f088000026406ca2d4d1844080e0c000207cd2d4d1939080e0e0c000229352a372f4d012b080c000203033b06ca2f4d021e080e0e0e0c000203152f4d0311080e0e0c0002294f1a0708b000026406cc2f4d18fc070e0c000207cd2f4d19f1070e0e0c000229352a372c4d1be3070c00022a4d1bdb070c00022a4d1cd3070c00024d1dcc070e0c000203033c02142a4d1ebe070e0e0e0c0002294d0eb3070c0002644d1fab070c000203462a4d1ea1070e0e0c00022b4d2097070c000229324d218e070e0e0e0c00032b2a3c4d22810702027a070e0e0c00042922102217020243031616006a07170001000004270406cf294d1c5b07020228030c00024d1d50070e0c000203033c0218294d1e42070e0e0e0c0002294d0e3707020204030c0002644d1f2b07020258010c0002033e294d1e1d070e0e0c00022a4d2013070c0002292f4d210a070e0e0e0c00032b2a3c4d22fd060e0e0c000422102a2217161600ee06170001000004270406cd3422120e0e0c0002294d18d7060c000207de294d19cd060e0e0c000229352a37294d1bbf060c0002294d1cb7060c00024d1db0060e0c00024d1fa8060e0c00020320294d1e9d060e0e0c0002294d0e93060202bc000c0002644d1f87060c000202013b0343294d1e7a060e0e0e0c00022a4d206f060c0002292e4d2166060e0e0e0c00032b2a3c4d2259060e0e0c000422152a4d0c4d060e0e16160046061c0001000004270402502f4d1c37060c00022a4d1c2f060c00022a2a4d2326060e0e0e0c00036503183b2c220d020242000e0e1624000e0618000000000364021922112e4d25fe056a1216000100010002020a0022177d19000227040214220d2a4d0ce1050e0e161600da0514000100000464270506cf2f4d10ca050e0e0e0c000207de2f4d11bd050e0e0c00022a4d1bb3050c0002294d1cab050c00024d1da4050e0c000203033c0214294d1e96050e0e0e0c0002294d0e8b050c0002644d1f83050c0002033e294d1e79050e0e0c00022a4d206f050c0002292f4d2166050e0e0e0c00032b2a3c4d2259050e0e0c000429220d22141616004a051400010000042704027c2c3b4d133a050e0e0e0c000303502a294d262c050e0c00024d1f24050e0c0002033629352a362c4d1c15050e0e0c00022b4d1c0b050c00022a2a4d2302050202cf000e0e0e0c00036503033c0207292503511e433b6502013b64020321003b03033b021831220f0e0e0c0002332a4d27ce046a6456d7220f7d110002650292294d1bbc040e0c0002294d1cb3040c00024d1dac040e0c000203033c0214294d1e9e040e0e0e0c0002294d0e93040c0002644d1f8b040c0002033e294d1e81040e0e0c00022a4d2077040c0002292e4d216e040e0e0e0c00032b2a3c4d2261040e0e0c000429220c221316160052041300010000042704021830220e0e0e0c0002322a4d283a046a6456c7220e7d100002646606d92d4d1027040c000207d12d4d111d040e0e0c00022d4d0113040c000203033b06d02d4d0206040e0e0e0c000203152d4d03f9030e0e0c0002294f1aef039000026406cf2d4d18e4030e0c000207d62d4d19d9030e0e0c000229352a37294d1bcb030c0002294d1cc3030c00024d1dbc030e0c000203033c0214294d1eae030e0e0e0c0002294d0ea3030c0002644d1f9b030c0002033e294d1e91030e0e0c00022a4d2087030c0002292e4d217e030e0e0e0c00032b2a3c4d2271030e0e0c0004220d2a22141616006203140001000004270406ca31220f02044e0356010c0002294d1847030c000207d1294d193d0302023d010e0e0c000229352a37294d1b2b030c0002294d1c23030c00024d1d1c0302021c010e0c000203033b06dc294d1e0a030202f3000e0e0e0c0002294d0efb020c0002644d1ff3020c00020342294d1ee9020e0e0c00022a4d20df020c0002292e4d21d6020e0e0e0c00032b2a3c4d22c9020e0e0c000422122a4d0cbd020e0e161600b602190001000004270402802b3b4d13a6020e0e0e0c0003035232294d2698020e0c00024d1f9002020275000e0c0002033629352a36314d1c7d020e0e0c00022b4d1c7302020247000c00022a2a4d2366020e0e0e0c00036503033c0207292503511e473b6502013b6402013b03033b021a220e2e4d293f026a121300010001002214020205000e7d16000227040210332a4d0c22020e0e0e4f161b02f1000464270402172d340e0e0c00022f2a4d2a06026a645697340e7d0d00026406d22d4d2bf4010e0c000203b52d4d2ce9010e0e0c000229352a362f4d01db010c000203033b02972f4d02ce010e0e0e0c000203152f4d03c1010e0e0c0002294f1ab701b000026402752f4d18ac010e0c0002031d2f4d19a1010e0e0c000229352a372a2a0e0e0e4f2d8f01e0000366024d2f4d2b84010e0c000203292f4d2c79010e0e0c000229352a362d2b22110e4f166701f10004502c2a22114f165b01f100046602192f220d0e0e0e0c0002312a4d2a46016a6456b7220d7d0f00026606cf2d4d0e34010e0c000203842c4d012901020222010e0e0c000203033b026f2c4d0216010e0e0e0c000203152c4d0309010e0e0c0002294f1aff0080000264024d2c4d18f4000e0c0002031d2c4d19e9000e0e0c000229352a372a2a0e0e0e4f2dd700b000036602252c4d0ecc000e0c000203033b02172c330e0e0c00022e2a4d2ab6006a645687330e7d0c000202a72d4d09a5000e0e0c00022d4d019b000c000203033b028f2d4d028e000e0e0e0c000203152d4d0381000e0e0c0002294f1a770090000264026d2d4d186c00020265000e0c0002031d2d4d195d000e0e0c000229352a372a2a0e0e0e4f2d4b00c000036602412d4d0840000e0c0002031f2d4d0935000e0e0c00022a2a3131220f0e0e0e4f0d2300d00006503b6402172d340e0e0c00022f2a4d2a0e006a645697340e7d0d000264270744|@2588,@2039,@2444,@1474,@1476,@2043,@2024,@2589,@2592,@2049,@2051,@205,@1469,@2557,@2629,@2046,@2646,@2069,@2041,@2647,I229,@2649,@2650,@2585,@2653,@2073,@2075,@2655,@2077,@1482,@1485,@2420,I218,@2435,@2462,@2465,@2453,@2657,@2660,I105,@2661,@2646,@2661,@2646,@2107,@2109,@2587| 2586:S24|545950455f5452454528292e747970654d61746368283429 2587:C15,320|00812b4d0039010e0e0c0002294d012f010c00024d0228010e0c000203033c0214294d031a010e0e0e0c0002294d040f010c0002644d0507010c0002033a56122a4d03fb000c00022b4d06f3000c000229314d07ea000e0e0e0c00032b2a3c4d08dd000e0e0c000456672e2b2b4f09cf00920004270602c2561156270e0c0002294d0abb000c0002039e294d0bb1000e0e0c000229352a37294d00a3000c0002294d019b000c00024d0294000e0c000203033b026f294d0386000e0e0e0c0002294d047b000c0002644d0573000c0002033e56622a4d0367000c00022b4d065f000c0002292f4d0756000e0e0e0c00032b2a3c4d0849000e0e0c00042d2a4d0c3e000e0e0e4f093700d200042705021456622e2a4d0d28006a645777320e0e0e7d0a0002270402115622292b4d0c10000e4f090b00520004646464430e0e0e0e|@2662,@2077,@1482,@1485,@2420,@2046,I218,@2435,@2462,@2465,@2585,@2073,@2075,@2557,@2646| 2588:S32|545950455f5452454528292e747970654d617463682834296d61746368283329 2589:O1|@2590 2590:C4,40|00812b3d4d0020000e0c0003293b4d0116000e0e0e0c0003644d020b002c0e0e7d0400020e0e0e0e|@2591,I243,I251,I218| 2591:S31|5354525543545f56414c5328292e74764e6f6e556e69666961626c65283229 2592:C24,328|00814d0042012d562856375649575768062d352e364d012f010c0003294d0227010c0002031d294d031d010e0e0c00022a2f4d0412010e0e0e4f050b0152000451022a294d0600010e0c0002031d294d07f5000e0e0c00022a2f4d04ea000e0e0e4f05e3005200045102023b502e352f364d08d3000c000303033c02274d09c7002b694d0ac1000e0e0c00022e2a0e0e0e0c0002643c2a0e0e0c0002644d0ba7000c000203423b2e0e4f0c9b00300002290331303531364d088d000e0e0c000303064d0d820002044d0e7c005659566856770e0e0e0c00022a2a2d6a655767317d0900023b65025c2e352f364d0f58000e0c000303212d4d104d004d1149004d1245000e0e0c00044d133c002a4d1437000c00036402013b031d5629563856470e0c00022a2a4d151e006a6557370e0e0e0c00025002023b502e2e4d1609002f7e06000365430e0e|@2594,@2595,@2043,@2049,@2051,@2557,@2585,@2069,@2041,@2589,@2598,@2602,I218,@2614,@2616,@2617,@2027,@2618,@2621,@2433,-1,I251,@2593,@1469| 2593:S24|28526571756972657320657175616c697479207479706529 2594:S41|545950455f5452454528292e747970654d617463682834296d6174636828332961737369676e283229 2595:C21,432|00812c3b4d00a8010e0c000303033b06cb2b4d019a010e0e0e0c000207cd2b4d028d010e0e0c0002561729352a364d037e010e0e0e0c00032b352c364d0370010e0c00032a2a4d0466010e0e0e0c000303032a020129565729352a364d0550010e0c00036403033c020e2d352e364d053e010e0e0e0c0003032a2d352e364d062e010e0e0e0c0003294d0723010c0002030e294d0819010e0e0c00023b6402013c6402013b2e352f364d0303010c0003292c4d09fa000e0e0e0c0003644d0aef000c000203033c02272e352f364d05df000c0003292b4d00d6000202cf000e0e0e0c0003644d0ac7000202bf000c0002039e2e352f364d0bb6000e0e0e0c0003031d566a567856890e0c00022a2a4d0c9e006a65567b0e0e0e0c000250026f2e352f364d0d89000e0e0c00030402004d0e7d002d2c3b2f2e4d0f74000e0c00075029644d1069000e0e0c0002294d015f000c0002030e294d0255000e0e0c0002296402054d11480010313532364d063f000c00032a2a4d1236000e0e0e0c000350322c4d1229000e0e0c0003260502023b5056672f2a4d1316000e0e0e0c0003644d0a0b00320e0e7d0a00023c430e0e|@2597,I229,@1474,@1476,@2059,I234,@2062,@2043,@2069,@2041,I113,I218,@2589,@2596,@2027,@205,@1348,@1326,@958,@1469,@2024| 2596:S44|2854797065207661726961626c65206973206672656520696e20737572726f756e64696e672073636f706529 2597:S57|545950455f5452454528292e747970654d617463682834296d6174636828332961737369676e283229636865636b466f724c6f6f7073283229 2598:C2,16|00804d000a002c56276a420e0e0e0e0e|@2600,@2599| 2599:C1,16|00802b561756282d7e0300030e0e0e0e|@2601| 2600:S57|545950455f5452454528292e747970654d617463682834296d6174636828332961737369676e283229636865636b466f724c6f6f7073283129 2601:S60|545950455f5452454528292e747970654d617463682834296d6174636828332961737369676e283229636865636b466f724c6f6f7073283129283129 2602:O1|@2603 2603:C3,16|00804d000a002c694d0104002a696442|@2605,@2606,@2604| 2604:C2,16|00804d000a002c56276a420e0e0e0e0e|@2612,@2611| 2605:S23|545950455f5452454528292e666f6c6454797065283129 2606:C16,232|00812b4d00e1000e0e0c00022956270e0e0c00022e2a0e0e0e0c0002642a4d01c6000e0e0e0c0002031e2a4d02b9000e0e0c000229352a364d03ac000e0c00032b2a2f317e0800032a4d049b000c000203192a4d0591000e0e0c000229353b2a0e4f0683005000026602772a4d0778000e0c0002031e2a4d086d000e0e0c000229352a362c2a300e0e0c0003292c31337e0a00032a4d094f000c000203192a4d0a45000e0e0c000229363b2a0e4f0b370050000266022b2a4d0c2c000e0c0002030329021d2a4d0d1e000e0e0e0c0002030329020d2a4d0e0e000e0e0e0c00022a6465430e0e0e0e|@2608,@2039,@1474,@1476,@2043,@2073,@2075,@2609,@2107,@2109,@2049,@2051,@2607,@2444,@2046,@2041| 2607:C3,48|00802b3b4d0028000e0c000303045603021a2b352c36290e0e4f0113002100022b362a2a5665310e7e070003420e0e0e|@2610,I229,@2607| 2608:S31|545950455f5452454528292e666f6c6454797065283129666f6c6454283229 2609:C3,48|00802b3b4d0028000e0c000303045603021a2b352c36290e0e4f011300210002292c5655300e0e0e7e060003420e0e0e|@2610,I229,@2609| 2610:S13|4c6973742e666f6c6472283329 2611:C1,16|00802b561756282d7e0300030e0e0e0e|@2613| 2612:S31|545950455f5452454528292e666f6c6454797065283129666f6c6454283129 2613:S34|545950455f5452454528292e666f6c6454797065283129666f6c6454283129283129 2614:C15,176|00802b4d00a9000e0e0c0002036b2b4d019d000e0e0c000229352a37294d028f000c0002294d0387000c0002294d047f000c00026403033c023b294d0371000e0e0c00022a4d0567000c0002292e4d065e000e0e0e0c00032b2a3c4d0751000e0e0c0004664d0847000c0002294f093f0051000264270402302b4d0a32000e0e0e0c000203222b4d0b25000e0e0c000256182a2a4d0c18000e0c0003644d0d0f002d0e0e7d0400023c420e0e0e0e0e0e|@2615,@2073,@2075,@2077,@2420,@2046,@2435,@2462,@2465,@2039,@2614,@1474,@1476,@2024,I218| 2615:S58|545950455f5452454528292e747970654d617463682834296d6174636828332961737369676e283229636865636b5265616c4572726f72283129 2616:S42|2843616e6e6f7420756e6966792077697468206578706c696369742074797065207661726961626c6529 2617:S44|2854797065207661726961626c6520746f20626520756e6966696564206f636375727320696e207479706529 2618:O1|@2619 2619:C2,8|00804d000200420e|@2620,-1| 2620:S44|545950455f5452454528292e747970654d617463682834296d6174636828332961737369676e283229283129 2621:O1|@2622 2622:C24,448|00802b352c364d00b6010e0e0e0c000303033c06cf2b352c364d01a3010c000303064d029a0106ce2b352c364d0390010e0c00032c352d364d0484010e0c00030402004d0579012c3c3b2e2e4d0670010e0c00075029644d0765010e0e0c00022e352f364d0858010e0c00032f2b4d094e010e0e0e0c000350294d0a42010e0e0e0c000207d3294d0b35010e0e0c00024d0c2c012a2a0e0e0e0c0002293b4d0d1e010e0e0e0c000303064d02120106cc2936293b4d0d08010e0c000303882a352f4d0efb000c0002030e2f4d0ff1000e0e0c0002296402054d10e400102a4d11de000202d3000e0e0e0c00020402002c4d12cc000202c1000e0c00024d13c0000e0c000203193c28402e4d14b2000e0e0e0c00042a4d02a700452a46510206293b452d4650293b2c2b6a4d1592000e0e0e0c00022d2a4d0986000e0e0e0c0003503c270602412e4d0e75000e0e0c000203122e4d0f6900020230000e0e0c0002296402054d105800102b4d1652000e0e0e0c00022a2a4d09460002020a000e0e0e0c0003503c656466022c2a4d0e30000e0c0002030e2a4d0f25000e0e0c0002296402054d10180010292b4d0911000e0e0c0003503c642704420e0e0e0e0e0e|@2624,@2027,@2589,-1,@2059,@2062,@205,@1348,@1326,@2043,@1469,@2069,@2041,@2625,I229,@1474,@1476,@958,@2080,@1482,@1485,I11,@1489,@2623| 2623:O1|@2628 2624:S53|545950455f5452454528292e747970654d617463682834296d6174636828332961737369676e28322963616e4d6b45715476283129 2625:O1|@2626 2626:C4,72|00802b3b4d0040000e0c000303033b02302b352c362a4d012e000e0e0e0c00020311294d0221000e0e0c00022b2a692965020d294d0210002e0e0e0e7d05000265420e0e0e0e0e0e|@2627,I229,@2429,@2625| 2627:S62|545950455f5452454528292e747970654d617463682834296d6174636828332961737369676e28322963616e4d6b4571547628312966696c746572283129 2628:C1,8|00803d2c69420e0e|@2071| 2629:C10,304|00842f35303631373135323633373b3b2f2d0e0e0e4f0017019000033103702e03043b5002652c293b4d0103010c000303043b50025429352a362a352b364d02ee000e0e0e0c0003294d03e3000c0002032a294d04d9000e0e0c000229363c2a3b6a4d05ca000e0e0e0c00022e2a4d06be000e0e0e0c0003260402054d07b000102a250426031e5f260350220d029d2e03713103043b5002662f293b4d0190000e0c000303043b50025429352a362a352b364d027a000e0e0e0c0003294d036f000c0002032a294d0465000e0e0c000229363c2a3b6a4d0556000e0e0e0c00022e2a4d064a000e0e0e0c0003260402054d073c00102a250426031e60260350220c02292c3b4d0127000c000303032f020c3b300e0e4f081700a00002643b2b2b6a644d050a00220c7d10000227091f05|@2631,@2632,I229,@2043,@2049,@2051,@1471,@1469,@2644,@2630| 2630:C3,48|00802b3b4d0028000e0c000303091201000100f9ff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1884,I229,@2630| 2631:S47|545950455f5452454528292e747970654d617463682834296d61746368283329756e6966795265636f726473283529 2632:C16,656|00812c3b4d0088020e0c000303992b3b4d007c020e0c000303033b02882b352935562403325629563856470e0e0c00024d015c022c4d0257020c0003294d034f024d024b020c00032c2c2b6a270458370e0c000250024c2d293b4d0032020e0e0e0c000303043b50023829352a362a35566229293b4d0017020c000303043b50021629352a362a2e0e4f040302b1000350292503511e2251502b250526041e462604502d6506d22c3529352a362f362f3b4d00db010c0003038c564103315649565856670e0c00024d05c4012e4d02bf010c0003294d06b7014d02b3010c00032c2c2b6a270458570e0c000250025430293b4d009a010e0e0e0c000303043b50024029352a362a351209000100f9ff29293b4d007a010e0e0e0c000303043b50021629352a362a2e0e4f046301d1000350292503511e2551502b250526041e4e2604503006d52f3529352a3632362f2c4d073c010e0c0003293b4d0032010e0e0e0c000303255697302d2b0e0e4f081f01c30004502f2c02020e010e0e4f090f01b10003332a69296606d7293b4d0aff000c0003037956910333569956a856b70e0c00024d0be800334d02e3000c0003294d0cdb004d02d7000c00032c2c2b6a270458a70e0c000250220c0240120a000100f9ff29293b4d00b5000e0e0c000303043b50021629352a362a220c4f049f00e1000350292503511e2451502f220d0e4f098b00b10003332a692966027656940335569956a856b702026a000c00024d0d6c002f4d0267000c0003294d0e5f004d025b000c00032c2c2b6a270458a70e0c00025034023d569229293b4d003f000c000303043b50021a29352a362a31020221000e4f042700e1000350292503511e265150220d2c0e4f091300b100032f2a69296627052704430e0e0e0e0e0e|@2634,I229,@2635,@344,@2633,@2636,@2635,@2633,@1463,@2585,@2632,I234,@2635,@2633,@2635,@2633| 2633:S9|206d697373696e6729 2634:S63|545950455f5452454528292e747970654d617463682834296d61746368283329756e6966795265636f7264732835296d617463684c6162656c6c6564283229 2635:S7|284669656c6420 2636:C17,200|00812c352d364d00be000e0e0e0c00032d352e364d01b0000e0c00032e352f364d02a4000e0c00032f3530364d0398000e0c00030402004d048d002e2e2e2e2e4d0584000e0c00075029644d0679000e0e0c0002302a693b333534364d0768000e0c0003294d085f000c0002034e294d0955000e0e0c00022935293b4d0a48000e0c000303262a36294f0b3b00b000023b2a3b6a644d0c2f000c0002220f2a4d0d250022100e0e0e7e1000032a363b2a0e4f0e1300c00002270402054d0f0800102708430e0e0e0e|@2638,@2059,@2027,@2589,@2062,@205,@1348,@1326,@2043,@2049,@2051,I229,@2639,@1471,@1469,@2641,@2637| 2637:O3|@7141,@228,@2643 2638:S67|545950455f5452454528292e747970654d617463682834296d61746368283329756e6966795265636f7264732835296164644669656c64546f47656e65726963283229 2639:C5,120|00802b3b4d0070000e0c0003030d1201000100f9ff293b696402552b3529352d3656372b2a4d014f000c0003293b4d0046000e0e0e0c000303072d2c692964022d293b4d0231000e0e0c000303112b0e0e4f0323005100022e2a692965020f1206000100f9ff2e2d692a2a6929662705420e0e0e0e0e0e0e|@2640,I229,@1463,I234,@2639| 2640:S78|545950455f5452454528292e747970654d617463682834296d61746368283329756e6966795265636f7264732835296164644669656c64546f47656e65726963283229616464456e747279283129 2641:C8,136|00802b3b4d0080000e0c000303033b02752b3529352d3656372b2a4d0169000e0e0c0003293b4d005e000e0e0e0c000303033b024f293b4d024d000e0e0c0003030c2b0e0e4f033f0051000202365759576857770e0c00024d042c002f4d0527000c0003294d061f004d051b000c00032c2c2b6a270412070004000100310e0e7d0800022705420e|@2642,I229,@1463,I234,@2641,@2635,@344,@2633| 2642:S82|545950455f5452454528292e747970654d617463682834296d61746368283329756e6966795265636f7264732835296164644669656c64546f47656e65726963283229636865636b456e7472696573283129 2643:S40|6164644669656c64546f47656e657269633a204e6f742061206c6162656c6c6564207265636f7264 2644:O3|@7141,@228,@2645 2645:S36|667265657a6547656e657269633a204e6f742061206c6162656c6c6564207265636f7264 2646:S20|28496e636f6d70617469626c6520747970657329 2647:C7,136|00802b3b4d0080000e0c000303033b02702b352c361203000100f1ff29294d0166000e0e0e0c00024d025c000e0c0002033229352a362e4d034d000e0e0c00022b4d0343000c00022a2a4d043a000e0e0e0c00036503033c0207292503511e413b6502013b65030f294f051b002100022b2a6929650209290e4f050b0021000265420e0e0e0e0e0e|@2648,I229,I105,I218,@1482,@2453,@2647| 2648:S44|545950455f5452454528292e747970654d617463682834296d61746368283329696e74657273656374283229 2649:S27|28496e636f6d70617469626c65206f7665726c6f6164696e677329 2650:O1|@2651 2651:C18,296|00802b4d0021010e0e0c00024d0118010e0c000203b82b36293b4d020a010e0e0e0c0003034e2c35294d03fb000c00020402002b4d04f0000e0c00024d05e8000e0c000203193c28402d4d06da000e0e0e0c00042a4d07cf00452a46510206293b452c4650293b2c2b6a4d08ba00310e7d0800020402004d09ad001b0f273b3b3b2e4d0aa2000e0e0e0c00075029644d0b95000e0e0c00022d4d0c8b000c00022a4d0d83000c0002030e2a4d0e79000e0e0c0002296402054d0f6c0010292b4d1065000e0e0c0003502b270402550402004d0953001b0f273b3b3b2e4d0a48000e0c00075029644d0b3d000e0e0c00022c4d0c33000c00022a4d0d2b000c0002030e2a4d0e21000e0e0c0002296402054d0f140010292b4d100d000e0e0c0003502b66420e0e0e0e|@2652,I105,I218,I229,@2080,@1482,@1485,I11,-1,@1489,@205,@1348,@1326,@2623,@1474,@1476,@958,@1469| 2652:S28|545950455f5452454528292e6d6b4f7665726c6f6164536574283129 2653:C16,424|00802b352c364d009e010e0e0e0c000307cd5601294d018f010c000207ce294d0285010e0e0c000229352a37294d0377010c0002294d046f010c00024d0568010e0c000203033c0214294d065a010e0e0e0c0002294d074f010c00026403d5565156670e0e0c0002294d013b010c000203ab294d0231010e0e0c000229352a37294d0323010c0002294d041b010c00024d0514010e0c000203033c0214294d0606010e0e0e0c0002294d07fb000c000264031856a156b70e0e0c0002220d2a0e0e4f08e300c1000364024e56a22a4d06d6000e0e0e0c00022b4d09cb000202af000c0002292f4d0abe0002028b000e0e0e0c00032b2a3c4d0bad000e0e0c0004664d0ca3000c00022a2a4d0d9a000e0e0e4f0e9300e200046527040214566156770c0002322a0e0e0e4f087b008100036464024156522a4d066d000e0e0c00022b4d0963000c0002292f4d0a5a000e0e0e0c00032b2a3c4d0b4d000e0e0c0004664d0c43000c000256772b2b2b4f0e3700a200046627040214561156270c00022d2a0e0e0e4f081f0031000364640215560156170e0c00022c2a0e0e0e4f08070021000364420e0e|@2654,@2589,@2073,@2075,@2077,@1482,@1485,@2420,@2046,@2592,@2435,@2462,@2465,@2039,@2557,@2585| 2654:S34|545950455f5452454528292e747970654d617463682834296d617463682833292f34 2655:C18,384|00802b352c364d0076010e0e0e0c000307cf5602294d0167010c000203d3294d025d010e0e0c000229352a37294d034f010c0002294d0447010c00024d0540010e0c000203033c0214294d0632010e0e0e0c0002294d0727010c0002640349565156670e0e0c0002294d0813010c00020321294d0909010e0e0c0002567256870e0c00022a2a0e0e0e4f0af3009100036502125662292b4d0be5000e0e4f0cdf0092000464640245294d06d3000c00022a4d0dcb000c0002292e4d0ec2000e0e0e0c00032b2a3c4d0fb5000e0e0c0004664d10ab000c0002566156772b2b2b020256000e0e4f0c9700a200046627040245561156270c0002294d0883000c00020321294d0979000e0e0c0002563256470e0c00022a2a0e0e0e4f0a63005100036502125622292b4d0b55000e0e4f0c4f005200046464640245560156170c0002294d083b000c00020321294d0931000e0e0c0002562256370e0c00022a2a0e0e0e4f0a1b004100036502125612292b4d0b0d000e0e4f0c07004200046464420e|@2656,@2589,@2073,@2075,@2077,@1482,@1485,@2420,@2046,@1474,@1476,@2592,@2557,@2585,@2435,@2462,@2465,@2039| 2656:S34|545950455f5452454528292e747970654d617463682834296d617463682833292f35 2657:C8,144|00812b3b4d0088000e0c0003032c2c3b4d007c000e0c000303033b021b5609561856270e0e0c00022a2a4d0162006a6557172c0e7d04000202532b352c362e4d024d000e0e0c00024d0344000e0c000203212e352f362c2b4d0434000e4f052f0062000450292c0e0e4f0623005100036502195629563856470c00022a2a4d010e006a6557372e0e7d06000265430e0e|@2659,I229,@2658,I105,I218,@2557,@2585,@2657| 2658:S32|28446966666572656e74206e756d62657273206f6620617267756d656e747329 2659:S45|545950455f5452454528292e747970654d617463682834296d617463682833296d617463684c69737473283229 2660:S29|28446966666572656e74207479706520636f6e7374727563746f727329 2661:S35|284f7665726c6f6164696e6720646f6573206e6f7420696e636c756465207479706529 2662:S35|545950455f5452454528292e747970654d617463682834296d617463682833292f3130 2663:C16,320|0086314d0039010e0e0c0002314d002f010c00023b344d0126010e0e0e0c0002344d011b010c00022a2a4d0212010e0e0e0c0003654d0307010c000203033b06cf334d04fa000e0e0e0c0002040200220d4d05eb000c00024d06e4000e0c000203193c2840220f4d07d5000e0e0c00042a4d08cb00452a46510207293b45220e4650292b2f2b6a4d09b5000e0e0c0002040200220f4d05a7000c00024d06a0000e0c000203193c284022114d0791000e0e0c00042a4d088700452a46510207293b4522104650292e312b6a4d0971000e0e0c00024d0a6800220e3322116b2d2b2213221222112e4d0b55000e0e0c000722144d0c4a000e0e0e0c000222144d0c3e000e0e0e0c0002293b4d0d3200020228000e0e0e0c000303033c020b3b2b4d0d1d000e0e0c000303033b020b2a2a0e0e4f0e0b00f00003270b661f070e0e0e|@2665,@2080,@2424,I113,I218,@2435,@1482,@1485,I11,-1,@1489,@2666,@2547,@2501,I229,@2664| 2664:C13,296|00812b3b4d0020010e0c000303442c3b4d0014010e0c000303033b023356095618562756344d01ff002a4d02fa000e0e0e0c00032928294d02ed000e0e0c00032e3c2f2f2d4d03df00220d7b070a000602d02b352c362e3b4d00cc000e0c0003033256295638564756544d04ba002a4d02b5000e0e0c00032928294d02a9000e0e0c00032e3c2f2f2d4d039b00220f7b070c00062e352f362a4d058b000c00022d4d0583000c00022a2a4d067a000e0e0e0c00034d0770000e0c0002033a5669567856874d0860002d4d025b000c0003294d0953004d024f000c000329304d0246000e0e0e0c00032e3c2f2f2d4d03370022137b071000062c4d0a2b000c00022f4d0a23000c00022a2a2e6a569a0e0e0e0c00022e310e0e0e4f0b0b00a100032709430e0e0e0e0e|@2668,I229,@2669,@344,@2232,@2670,@2156,I24,I218,@2671,@2672,@2667,@2664| 2665:S33|535452554354555245535f28292e636865636b54797065436f6e73747273283729 2666:C8,88|00805609292309294d004c004d0148000e0c00032e3856484d023c002a4d0337000c0003294d042f004d032b000c0003652a0e0e0e0c0002512e354d0519002a0e0c0002515637293b69292c324d060700330e7b05080004|@2551,@7299,@960,@2552,@344,@2550,@2128,@1995| 2667:O1|@2673 2668:S48|535452554354555245535f28292e636865636b54797065436f6e73747273283729636865636b436f6e73747273283229 2669:S37|546f6f206d616e7920636f6e7374727563746f727320746f206d6174636820747970652028 2670:S39|4e6f7420656e6f75676820636f6e7374727563746f727320746f206d6174636820747970652028 2671:S24|4c6f6f6b696e6720666f7220636f6e7374727563746f7220 2672:S11|2062757420666f756e6420 2673:C1,8|00802b382964420e|@2674| 2674:S26|5354525543545f56414c5328292e76616c547970654f66283129 2675:C1,16|00802b352c362d3756372e7b05030004|@2676| 2676:S65|535452554354555245535f28292e6d61746368536967732836296d6174636856616c73283229636865636b5479706573416e64537472756374757265732d283129 2677:C24,424|00822c4d00a1010e0e0c000207d12c4d0195010e0e0c00022936294d0289010e0e0c0002030e294d037d010e0e0c00023b6406cf562b4d046e010e0e0e0c0002294d056301324d065e010e0e0e0c0004294d0753010c00024d084c010e0c000207cc29352d363b2a4d093c010e0c00032b363b2a4d0930010e0c0003294d0827010c000203032b02013b0330569956a856b74d0a120122114d0b0c010e0c0003294d0c03014d0bff000c00032d3c2e2e2d4d0df30022157b0713000629030b2b4d08e4000e0c000202013b036b2d4d0ed6000e0e0e0c0002294d0fcb000202be000c000203064d10be000210294d10b700694d11b2000e0e0e0c0002334d0ea700020297000c000256ca56d956e756f8121100010003004d128d002b22172c6b30303030302e4d137e00221a02023c000e0e0e7b081700072d4d0e6b000c0002324d0e63000c000256ba56c956d756e856f94d1452002b22162c6b30303030302e4d13430022197b081600075649565856674d153200220c4d0b2c000e0c0003294d1623004d0b1f000c00032d3c2e2e2d4d0d130022107b070e00066502013b440e0e0e0e0e0e0e|@2679,@2354,@2353,@2680,@2683,@2412,@7300,@2291,I105,I218,I229,@2678,@344,@2685,@2232,@2667,@2686,@2689,@1500,@2690,@2547,@2691,@2678,@2416| 2678:S7|56616c75652028 2679:S66|535452554354555245535f28292e6d61746368536967732836296d6174636856616c73283229636865636b56616c756573416e64457863657074696f6e732d283329 2680:O1|@2681 2681:C3,24|00802b4d0011000e0e0c00024d0108002c8000020e0e0e0e|@2682,I105,I218| 2682:S11|436f6e7374727563746f72 2683:O1|@2684 2684:C1,8|00802b35420e0e0e|@2682| 2685:S46|29206d75737420626520616e20657863657074696f6e20746f206d6174636820746865207369676e61747572652e 2686:O1|@2687 2687:C3,24|00804d0012002c354d010c002d0e0e0e7e0300030e0e0e0e|@2688,-1,I229| 2688:S24|5354525543545f56414c5328292e6973456d707479283129 2689:O4|-3,0,@520,@7311 2690:C8,88|00805609292309294d004c004d0148000e0c00032e3856484d023c002a4d0337000c0003294d042f004d032b000c0003652a0e0e0e0c0002512e354d0519002a0e0c0002515637293b69292c324d060700330e7b05080004|@2551,@7299,@960,@2552,@344,@2550,@2128,@1995| 2691:C8,88|00805609292309294d004c004d0148000e0c00032e3856484d023c002a4d0337000c0003294d042f004d032b000c0003652a0e0e0e0c0002512e354d0519002a0e0c0002515637293b69292c324d060700330e7b05080004|@2551,@7299,@960,@2552,@344,@2550,@2128,@1995| 2692:S66|535452554354555245535f28292e6d61746368536967732836296d6174636856616c73283229636865636b56616c756573416e64457863657074696f6e732d283129 2693:O2|@2695,@2694 2694:O2|@2707,@2693 2695:C10,128|00842f4d0079000e0e0c0002404d016f000c0002292b3b3b6b294d0262000e0e0e0c00024d0358002a694d0452002b694d054c002c69292c2c6a3b220f2b221022102210221056f70e0c0008220f4d002e000e0e0e0c0002304d0623000c0002314d071b000c0002334d0813000c0002292d2c2e6b29270e1f050e0e0e0e0e0e|@2697,@2698,@1893,@2412,@2701,@2703,@2704,@2386,@2389,@2696| 2696:O1|@2705 2697:S24|535452554354555245535f28292e636f7079536967283529 2698:O1|@2699 2699:C1,8|00802b362964420e|@2700| 2700:S24|5354525543545f56414c5328292e7369674e616d65283129 2701:C3,32|00802b352c365627294d0013002d2d4d010d00320e0e0e7b060600050e0e0e0e|@2702,@7308,@2301| 2702:S36|535452554354555245535f28292e636f70795369672835296c617374416464722d283129 2703:C3,32|00802b352c365627294d0013002d2d4d010d00320e0e0e7b060600050e0e0e0e|@2702,@7305,@2301| 2704:C3,32|00802b352c365627294d0013002d2d4d010d00320e0e0e7b060600050e0e0e0e|@2702,@7300,@2301| 2705:C9,144|00802b354d0088004d0184000e0c000303792b362c382a3b4d0274000e0c00032a3b4d026a000e0e0e0c0003293b4d025e000e0e0e0c0003293b4d0152000e0e0e0c000303064d034600023778760f3b2c3b3b4d0439000e0e0c0004050800ff6d4d052b00102b3c2b3b2e4d0621000e0e0c000650294d0716000e0e0e0c00025029643b2d2b6a270602012b420e0e0e|@2706,-1,I229,I253,I49,I11,@78,I195,I47| 2706:S23|486173685461626c652e68617368467265657a65283129 2707:C7,72|00864d0042002c2e3032680531303030304d0133000c0006324d022b000c00024d03240033220d56673234220d220f3368094d0412002a692b2a220f4d050800330e0e7b050e0004|@2709,@2710,@2715,@2412,@2725,@2708,@2410| 2708:C1,16|00802b352c362d3756372e7b05030004|@2770| 2709:S28|535452554354555245535f28292e66756c6c436f7079536967283729 2710:C3,32|0080560a5619562856372f2d2d2d4d000e002e4d010900220c0e0e7b08070007|@2712,@2711,@2560| 2711:O1|@2713 2712:S43|535452554354555245535f28292e66756c6c436f7079536967283729636f707954797065436f6e73283129 2713:C1,8|00802b420e0e0e0e|@2714| 2714:S46|535452554354555245535f28292e66756c6c436f7079536967283729636f707954797065436f6e73283129283129 2715:O1|@2716 2716:C6,48|00842f4d0029000e0e0c00024d0120004d021c002e30323468064d0312002a692b2a3b4d040900310e0e0e7b050a0004|@2718,@2412,@2719,@2715,@2717,@2410| 2717:C1,16|00802b352c362d3756372e7b05030004|@2724| 2718:S37|535452554354555245535f28292e636f707954797065436f6e7374727563746f7273283529 2719:C11,168|00822c4d00a1000e0e0c000203622c4d0195000e0e0c0002293b4d028a000e0e0e0c00030316404d037d000e0e0c0002294d0473003b3b6b2965020429372964562b563a5649565829344d055a000e0e0e0c000329282e4d054d000e0e0c00032f2f2f2f2d56d7220f0e0e7b070d00062c4d0633000c000203272c4d0729000e0e0c0002561b562a563956482d2d2d2d4d0814002e4d090f000c00073b270602013b440e0e0e0e0e|@2721,@2336,@2335,I229,@1893,I48,@344,@2348,@2347,@2720,@2560| 2720:O1|@2722 2721:S40|535452554354555245535f28292e636f707954797065436f6e7374727563746f7273283529283329 2722:C1,8|00802b420e0e0e0e|@2723| 2723:S55|535452554354555245535f28292e636f707954797065436f6e7374727563746f7273283529636f707954797065436f6e73283129283129 2724:S40|535452554354555245535f28292e636f707954797065436f6e7374727563746f7273283529283129 2725:C38,840|00822c4d0041030e0e0c000203d52c4d0135030e0e0c0002293b4d022a030e0e0e0c00030316404d031d030e0e0c0002294d0413033b3b6b2965020429372964562d563c564b565a29344d05fa020e0e0e0c000329282e4d05ed020e0e0c00032f2f2f2f2d56d90e0e0c0006314d06d7020c00024d07d0020e0c00020321314d06c5020e0e0c00024d08bc020e0c000256a82a2a4d09b0020e0c000365020134324d0aa3020c0002292c2c4d0b99020e0e0c000456c7293722122c692a0c0002512c3c4d0981020e0e0c000322102a4d0c75020e0e0c000303042210020129270e06d02c4d0d60020e0c000207d13c28402d4d0e52020e0e0e0c00042d4d0f47020c0002562d563c564b565a2d2d2d2d4d1034022e4d112f020c0007292f4d1226020e0e0e0c00034d131c020e0c00023c28402b4d0e10020e0c0004304d1407020c00022c4d14ff010c0002292b4d15f6010e0e0e0c00034d16ec012a69344d17e5010e0e0c00023b2a0e0e0e4f18d701f00002303b4d19ce010e0e0e0c00030386324d17c1010e0e0c00023b2a4d02b6010e0e0e0c0003644d13ab010c00020342324d1aa1010e0e0c0002334d14970102028b010c0002344d1b8b0102027e000c0002220c4d1c7e010e0e0e0c00022c2c4d1d72012d2d3b4d1e6b010c00072704020132292b4d1f5d010e0e0c00035012120001000100293622172c692a0e0e0c0002260402161211000100010029362216220c692a0e0e0c00022603220f3b4d1923010c000322132a4d0c19010e0e0c000303042213020129271106d12c4d2004010e0c000207c82c4d21f9000e0e0c0002293729353b4d02eb000c0003039129362b352c362d38566e2a4d22d7002b4d23d2000e0e0e0c000456882f2a4d09c4000e0c0003302a4d24ba000e0e0e0c00034d13b0000e0c000203033c02132b2e4d12a1000e0e0c00034d1398000e0c0002030c3b2a6930302b2f6b296502013256b72935322c692a0e0e0c0002512b3c4d0971000e0e0c0003220f2a4d0c65000e0e0c00030304220f020129270b02492a352b362c38565e2a4d2248002b4d2343000c0004292c4d123a0002042e002b000e0c00034d132c000e0c000203092d2d302c6b296402012f56872935302c692a0e0c0002513427076502012b440e0e0e0e0e0e0e|@2727,@2336,@2335,I229,@1893,I48,@344,@2728,@2731,@2734,I106,@2737,@2740,I233,@2348,I11,@2347,@2711,@2560,I251,I218,@2435,@2743,@2746,@2501,@2748,I253,@2080,@1482,@2429,@205,@2567,@2763,@2354,@2353,@2726,@2467,I113| 2726:O1|@2768 2727:S31|535452554354555245535f28292e66756c6c436f7079536967283729283329 2728:O1|@2729 2729:C3,24|00802b3b4d0010000e0c000303054d010600102b36296442|@2730,I229,@958| 2730:S29|5354525543545f56414c5328292e737472756374416363657373283129 2731:O1|@2732 2732:C2,24|00802b353b4d000f000c000303033c02013b420e0e0e0e0e|@2733,I229| 2733:S25|5354525543545f56414c5328292e6973466f726d616c283129 2734:O1|@2735 2735:C3,32|00802b353b4d0017000c000303062b36296402054d01080010420e0e0e0e0e0e|@2736,I229,@958| 2736:S25|5354525543545f56414c5328292e7661466f726d616c283129 2737:O1|@2738 2738:C3,32|00802b3b4d0018000e0c000303064d010e0002042b352964420e0e0e0e0e0e0e|@2739,I229,I48| 2739:S27|5354525543545f56414c5328292e7374727563744e616d65283129 2740:O1|@2741 2741:C1,16|00823b2c692e2a2f6a2965440e0e0e0e|@2742| 2742:S33|5354525543545f56414c5328292e6d616b65466f726d616c537472756374283329 2743:O1|@2744 2744:C4,80|00812b4d0049000e0e0c00024d0140000e0c000203362b352c362e4d0031000e0e0c00024d0128000e0c0002031a2e352f362c2b692a2d4d0215000e0e0c00032a2a6929270502013b6502013b430e0e|@2745,I105,I218,@2743| 2745:S45|535452554354555245535f28292e66756c6c436f70795369672837292833297a69705479706556617273283229 2746:C5,112|0080560729293b4d0065000e0e0c000303032d0256293529352a362c36314d014e000e0e0e0c00020331314d0241000e0e0c00022c4d0137000c000203192c4d022d000e0e0c00022a2a4d0322000e0e0e0c00036402013b6402013b03032a020829250526041e613b270465420e0e0e|@2747,I229,@1474,@1476,@2024| 2747:S45|535452554354555245535f28292e66756c6c436f7079536967283729283329636f707954797065566172283129 2748:C14,320|00802b3b4d0038010e0c000303033b06cf2b352c362a352b362c372d381207000100f2ff577e2b2b2b4d0113010c0004292d4d020a010e0e0e0c00034d0300010e0c00020402002f353b4d00f2000e0e0e0c0003036b2f3657c82a2a4d04e0000e0c000356e42a3c4d04d4000e0c00031211000100feff293b4d05c3000c00032b2a4d06ba000e0e0e0c000303032b0201292d3b2b4d07a7000c0004503b2f6912150002000200293b4d0893000c0003644d038b000c0002332b452a46260b02062930453b465029352a362c03033c020129033433332c306b294d096200020258000e0e0e0c00022937294d0a51000e0e0c0002030e294d0b45000e0e0c00022b6402012b660202220c2d03033c02012a0316120f000100f6ff293b3c4d071f000c0004503b5102023b50220c4f0c0f00e100022a2a69292710420e0e0e0e0e|@436,I229,@2467,I251,I218,I106,I253,I233,I255,I113,@2750,@2759,@2749,@2748| 2749:O1|@2762 2750:O1|@2751 2751:C16,256|00802b4d00f9000e0e0c00022c4d01ef000c00022a4d02e7000c0002030e2a4d03dd000e0e0c00023c6402013b03232a4d02cc000e0c0002030e2a4d03c1000e0e0c0002296402054d04b4001029366402012a294d05a8000e0c0002030e294d069d000e0e0c0002296402054d079000102937644d0888000e0c0002294d097f000c000229293b4d0a75000e0e0c000303033b022b29352a362a4d0162000e0e0e0c000229314d0b56000e0e0e0c00036403052a68010207292503511e373b6564294d0c3a000e0e0e0c00024d0d30000e0c000203202935294d0023000c0002302a4d0e1a000e0e0e0c000364030329020132640201312706420e0e0e0e0e0e|@2753,@2667,@2156,@2107,@2109,@958,@2073,@2075,@958,@2077,@2501,I229,I24,I105,I218,@2752| 2752:O2|@2755,@2754 2753:S35|545950455f5452454528292e66696e6456616c7565436f6e7374727563746f72283129 2754:O2|@2757,@2752 2755:C18,456|00812b4d00c1010e0e0c000203ba2b4d01b5010e0e0c00022d4d00ab010c000203a22d4d01a1010e0e0c00022a374d0296010e0e0e0c00024d038c010e0c00022a374d0282010e0e0e0c00024d0378010e0c00022a2a4d046e010e0e0e0c000365035d2a352a35292b293b4d0559010e0e0c0003030e3b2b4d054c01330e0e0e7e0a000329352a362c4d063b010c00024d0734010e0c000203212c352d362a2d220c0e0e0e0c0003030d292c2506250626041e493b02013b6502013b270602013b6402013b6406d72b4d08fb000c000203422b4d09f1000e0e0c00022d4d08e7000c0002032a2d4d09dd000e0e0c00022a352a35292b2f0e0e0c000365030d2a362a36292b2f310e7e0800033b6402013b6402b12b4d0aaf000c000203412b4d0ba5000e0e0c00022d4d0a9b000c000203292d4d0b91000e0e0c00022a350317293503102a362a36292b5667310e0e0e7e0800033b02013b6402013b6402662b4d0c64000e0c0002032e2b4d0d59000e0e0c00022d4d0c4f000c000203162d4d0d45000e0e0c00022a2a4d0e3a002f0e7e0600033b64022d2b4d0f2b00020224000c0002030a2c4d0f1d002c7d0400022b4d1013000c0002030a2c4d1009002c7d0400023b430e0e|@2756,@2073,@2075,@2077,@1482,@2453,I229,I105,I218,@2107,@2109,@2049,@2051,@1474,@1476,@2024,@2444,@2046| 2756:S25|545950455f5452454528292e657175616c5479706573283229 2757:C5,112|00812b3b4d0068000e0c0003030e3b2d4d005c002d0e0e0e7e0400032b352c362e4d014b000c00024d0244000e0c000203352e352f362c352b352a2a4d0330000e0c000365031c2c362b36292b56870e0e0c0003650309292c2f310e7e0800033b02013b6502013b65430e0e0e0e0e0e|@2758,I229,I105,I218,I24| 2758:S31|545950455f5452454528292e657175616c5265636f72644c69737473283229 2759:O1|@2760 2760:C3,24|00804d0012002c354d010c002d0e0e0e7e0300030e0e0e0e|@2761,-1,I229| 2761:S6|476c6f62616c 2762:C1,8|00802b36420e0e0e|@2761| 2763:O1|@2764 2764:C6,96|00812c3929353b4d0055000e0e0c0003030629362964020e2936293b4d0140000e0c0003296529362a35292b316a2d354d022c004d0028000e0c000303132d36293b2c4d0319000e0e0c0004503b6402054d040b00102705430e0e0e0e0e0e0e|@2766,I229,I253,-1,I255,@2765| 2765:O3|103,@373,@2767 2766:S34|5354525543545f56414c5328292e7463536574436f6e7374727563746f7273283229 2767:S24|41737369676e6d656e7420746f2066726f7a656e20726566 2768:C1,8|00802b420e0e0e0e|@2769| 2769:S41|535452554354555245535f28292e66756c6c436f7079536967283729636f7079547970283129283129 2770:S31|535452554354555245535f28292e66756c6c436f7079536967283729283129 2771:C1,24|0080560829382d2a0e0c000251561729382e2a2f7d060002|@2772| 2772:S67|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973747275637456616c75652835296e6577456e762d283129 2773:C1,24|0080560829362d2a0e0c000251561729362e2a2f7d060002|@2772| 2774:C1,32|008056082923072d2a0c00025156172923072e2a2f0e0e0e7d0600020e0e0e0e|@2772| 2775:C8,144|00802b352c36562929372f2a0e0c0002512a37294d0078000e0c00020316294d016d000e0e0c000256572937322a330e7d0a00022b362c382d4d0253000c00024d034c000e0c00025678293b4d0440000e0c0003569729373b2c6934312b326b220c2a69652a0e0e0e0c00025156a82b3c4d051b000c00032a3b2b4d0611000e0e0c0004503b270c420e0e0e0e0e0e0e|@2772,@2777,@2780,@2776,I218,I253,I106,I255| 2776:O1|@2782 2777:O1|@2778 2778:C3,24|00804d0012002c354d010c002d0e0e0e7e0300030e0e0e0e|@2779,-2,I229| 2779:S10|4f7665726c6f61646564 2780:O1|@2781 2781:C1,8|00802b36420e0e0e|@2779| 2782:C4,48|00802b36294d0027000c00024d0120000e0c000203033c0211293b4d0211000e0e0c000303033c02013b64420e0e0e0e|@2783,I105,I218,I229| 2783:S30|5354525543545f56414c5328292e6973436f6e7374727563746f72283129 2784:C8,128|00802b352c3656292923092f2a0c0002642b3b4d0069000e0e0c00030316404d015d000e0e0c0002294d0253003b3b6b296502042b3729645657293b4d0340000e0c00035678292309312e2d4d0430000e0c0004322a69642a0c00025156872b3c4d051b000c00032a3b2b4d0611000e0e0c0004503b270a420e0e0e0e0e0e0e|@2772,I229,@1893,I48,I253,@2740,I106,I255| 2785:C2,40|00802b56180c0002293b4d001a000e0e0e0c0003030a2c56272d0e0e7d0400022964420e0e0e0e0e|@1316,I229| 2786:C2,40|00802b56180c0002293b4d001a000e0e0e0c0003030a2c56272d0e0e7d0400022964420e0e0e0e0e|@1316,I229| 2787:C2,40|00802b56180c0002293b4d001a000e0e0e0c0003030a2c56272d0e0e7d0400022964420e0e0e0e0e|@1316,I229| 2788:O1|@2789 2789:C1,8|00803b420e0e0e0e|@2772| 2790:C2,40|00802b56180c0002293b4d001a000e0e0e0c0003030a2c56272d0e0e7d0400022964420e0e0e0e0e|@1316,I229| 2791:C2,40|00802b56180c0002293b4d001a000e0e0e0c0003030a2c56272d0e0e7d0400022964420e0e0e0e0e|@1316,I229| 2792:C2,40|00802b56180c0002293b4d001a000e0e0e0c0003030a2c56272d0e0e7d0400022964420e0e0e0e0e|@1316,I229| 2793:O1|@2794 2794:C1,8|00803b420e0e0e0e|@2795| 2795:S69|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973747275637456616c75652835296c6f63616c456e762d283129 2796:C10,104|00843b30354d005f004d015b000c0003032e303657284d024e0030342c6b313a32230b58672e2c2c4d033c004d0438002e324d05320022100e0e0e7b090e0008302f2f2f0e4f061f0040000557284d07160030342c6b2b332b4d080b00320e7b050b00040e0e0e0e|@2798,-6,I229,@2799,@2800,@1827,@2374,@2803,@4786,@2797| 2797:O1|@4787 2798:S52|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c283529 2799:C2,24|00805609561856272b3c2c2c324d000700330e7b07060006|@2276,@2232| 2800:O1|@2801 2801:C5,56|00802b3b4d0030000e0c00030316404d0125000e0e0c0002294d021b003b3b6b296502042b372964294d030b000c0002293a65420e0e0e0e|@2802,I229,@1893,I48,@2286| 2802:S73|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296c6f6f6b5369672832296c6f6f6b7570466e283129 2803:C17,264|00832e354d0000014d01fc000e0c000303062e36296402044d02ec00404d03e7000c0002292b3b3b6b294d04da000e0e0e0c00024d05d000313458786b2a23062b23082c392d230b2e3a2f230a30373123064d06b2002b2b346b33383423084d07a5002b2b220e6b220d2309220e230b4d0894002b2b22116b2210352211394d0985002b2b22146b22133622143a4d0a76002b2b22176b221623072217230a4d0b65002b2b221a6b2f2d2211220f22192218221d30221e2212221c221f680c22232a2224222422243b160c003a0025000100000750221b4d0d2d000e0e0c0002221c4d0e22000e0e0e0c0002221e4d0f16000e0e0e0c00022922212c2e6b2927221f040e0e0e0e0e|@2805,-6,I229,I48,@1893,@2286,@2806,@2809,@2812,@2814,@2815,@2817,@2818,@2804,@2386,@2389,@2696| 2804:C29,560|008530354d0028024d0124020e0c00030a0400cd000a000a00110099004d020f021006d33036561b58284d030202312c2c6b5649293a566929230b12090004000100312d2c4d04e7014d05e3012e344d06dd010e0e0c0008294d07d3010c00022a4d08cb010c00020402002b2b2b4d09be010e0e0e0c00045029040300221538221623092217372c2a452c462b47502c2215332b4d0a98014d0b940133221c4d0c8d01221c0e0e7b091b000830363b2a2e2a3b4d0d79010e0e0c0003030329021b2a352b362a2c220c4f0e63018000042a2a2505250526031e273b66270406dd303629352a362b372c382d390403003b2a4d0f3b01020233010c00035029352a362b370403003b2a4d0f24010e0c00035029352a362b372214230622152308221523084d1009012a2c336b2218392219230b2219230b4d11f6002a2c336b221c3a221d230a221e37221f35222036222123072b2b2e2216220d3322133022122218220e2211680c221a2a22242224222422240e0e0e161200b6002400010000074d13ac0012200003000200221e22286b221b221622134d1496004d1592004d168e002f4d0689000e0e0c00084d178000122200030002002220222a02026d002229222b680612220003000200221c2b2b22234d185a000e0e0e0c00053b4d0b4f000c00022220222022202c3b3b4d193f000c0007122600030002004d1a31002225222f2c6b302c2b4d1b24000e0c000450222d3822200e0e0e0c000250222d2309221c0e0e0c0002503227271f060e0e|@2820,-9,I107,@2821,@2823,@2800,@1827,@2374,@2386,@2389,@2392,@2399,@2824,@2694,I229,@2827,@1302,@4763,@4764,@2804,@4765,@2842,@2838,@1480,@4767,@2848,@2567,@4772,@2819| 2805:S63|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c28352973696756616c7565283429 2806:C9,128|00845609292309294d0074004d0170000e0c00036503092f2f692c2c7d0700022f2d0e0e0e0c0002294d0253000c00024d034c000e0c0002033a561956285637314d043b004d0537000c000329220c4d052d000e0e0c0003294d0623004d051f000c00032e3c2f2f2d4d071300220e7b070e00063030692d2d0e0e0e7d080002|@2808,@7295,@960,I105,I218,@403,@344,@2807,@2232| 2807:S39|2920697320616c72656164792070726573656e7420696e2074686973207369676e61747572652e 2808:S79|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c28352973696756616c7565283429636865636b416e64456e746572283529 2809:C2,24|00802b352c364d000e00563856475659300e0e7b07030006|@2811,@2810| 2810:S5|56616c7565 2811:S88|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c28352973696756616c7565283429636865636b416e64456e746572283129283129283129283129 2812:C2,24|00802b352c364d000e00563856475659300e0e7b07030006|@2811,@2813| 2813:S4|54797065 2814:C2,24|00802b352c364d000e00563856475659300e0e7b07030006|@2811,@2277| 2815:C2,24|00802b352c364d000e00563856475659300e0e7b07030006|@2811,@2816| 2816:S6|466978697479 2817:C2,24|00802b352c364d000e00563856475659300e0e7b07030006|@2811,@1827| 2818:C2,24|00802b352c364d000e00563856475659300e0e7b07030006|@2811,@2373| 2819:O1|@4773 2820:S66|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296d616b65536967496e746f283629 2821:O3|@7141,@228,@2822 2822:S40|6d616b65536967496e746f3a206e6f742061205369674964656e74206e6f72206120536967446563 2823:C2,24|00805609561856272b3c2c2c324d000700330e7b07060006|@2276,@2232| 2824:O1|@2825 2825:C4,24|00803c28404d000f004d010b000c00044d0204002a696442|@2826,@210,I11,-2| 2826:S31|5354525543545f56414c5328292e6d616b655661726961626c654964283129 2827:C49,1208|00822d354d00b0044d01ac040e0c00030a0c00ad026d021a0051011a001a001a001a001a001a007703210030004d0287041006d02d363b2e2b4f037b043000036506dc2d362e372f38120400040002004d0464042d332c6b4d055c042a567a568b6b12070004000200292309294d0647044d0743040c00036503043b5002932d4d0834044d0930040e0c000303033c024b2d4d0a22044d091e040e0e0e0c000303033c02372d4d0b0e044d090a040e0e0e0c000303033c02232d4d0cfa034d09f6030e0e0e0c000303033c020f2d4d0de6034d09e2030e0e0e0c000303324d0ed6032e4d0fd1030e0e0c0003294d10c7034d0fc3030c00032d3c220e332d4d11b6030202aa030e0e0e0c0006260302023b50120700040002002d2b2b3202028f034d1293030c000550567b29372f4d1386034d1482034d157e030e0e0e0c00043b220e69324d166f032b2d6b332a69662a0c000251343c4d175d03220c0e0e0e7e0d00032d362e372f38120400040002004d1843032d332c6b4d193b032a567a568b6b12070004000200292309294d0626034d0722030e0e0e0c00036503043b5002a32d4d1a10034d090c030e0c000303033c025f2d4d1bfe024d09fa020e0e0e0c000303033c024b2d4d1cea024d09e6020e0e0e0c000303033c02372d4d1dd6024d09d2020e0e0e0c000303033c02232d4d1ec2024d09be020e0e0e0c000303033c020f2d4d1fae024d09aa020e0e0e0c0003032e4d209e022e4d0f99020e0e0c0003294d218f024d0f8b020c00032d3c220e332d4d117e020e0e0e0c0006260302023b50120700040002002d2b2b324d1263020c000550567b29373b220d69313b2b336b322a69652a0e0e0c000251343c4d174102220c0e0e0e7e0d00032d36292e2a3b4d222e020e0e0e0c000303032902282a352b36565b566a56782d2c2c220d2d330e0e0e4f230b02d200072d2a2508250826061e343b27066606d82d362e372f382b2b2b6a12050004000200292309294d06df014d07db010c0003650391564b292306566b292308568a2923084d24c2012a2d6a56bb293956db29230b56fa29230b4d25ad012a2d6a12130001000500293a1215000100050029230a121700010005002937121900010005002938121b0001000500292309121d00010005002935121f00010005002936122100010005002923072d2c220c3422192213222230221f220f2216221b680c29271f0204564b2964565c2b2b2b4f2637018200045032270606d62d362e373c2840304d272201020216010e0e0e0c00043c28403b4d2710010e0c0004564b292306566b292308568a2923084d28f9002a2d6a56bb293956db29230b56fa29230b4d29e4002a2d6a12130001000500293a1215000100050029230a12170001000500292309121900010005002935121b00010005002936121d00010005002923074d2aa40012200001000500221d6a4d2b960012210001000500221d6a2f2e2c2c22172211222032221d221122142219680c122200040002001223000100020022224d2c63002d2d22252e4d2d5a0002024e000e0e0e0c00073b22213b4d2e48000e0c000329293b4d223d000e0e0c000303033b021c29352a362a0e0e0e162f0026002b000000000250292503511e283b656422243b4d2e0f00222b0e7e2c0003440e0e0e0e0e0e0e|@2829,-4,I107,@2830,@2832,@2836,@2837,@7295,@960,@209,I24,@384,@681,@632,@2845,@2846,@344,@2847,@2232,@2848,@2864,@2867,@2467,-1,I106,@2869,@2870,@209,@384,@681,@632,@2845,@1793,@2846,@2847,I229,@2804,@2873,@2874,@2875,I11,@2966,@2967,@2968,@2970,@2824,@2972,I253,@2828| 2828:C4,40|00802b4d0021000e0e0c00023b2a0e0e0e4f0113002000022e2a4d020a00300e7e0600030e0e0e0e|@4762,@2501,@4761,@2763| 2829:S79|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296d616b65536967496e746f28362970726f63657373536967283329 2830:O3|@7141,@228,@2831 2831:S27|70726f636573735369673a206e6f742061207369676e6174757265 2832:C9,296|00812b3b4d0020010e0c000303032c06d82b3529352a362b3a2f36575b292306577b292308579a2923084d01fa002a2d6a57cb293957eb29230b1211000200040029230b4d02e0002a2d6a12140002000500293a1216000200050029230a121800020005002937121a00020005002938121c0002000500292309121e00020005002935122000020005002936122200020005002923072d2c220c3422192213222230221f220f2216221b680c122500020002002922234d036e000e0e0e0c000329282e4d0361000e0e0c000322232d22272c0e0e0e1604004e002c0003000005222b3c4d054100020239000e0e0c00032922250e0e1606002e002c000100000322272c222f4d071f000c0004122c0002000500292309222a2c692a0e0e0c0002642c272d430e0e0e|@2834,I229,@2835,@2833,@344,@2803,I106,@2832,@2740| 2833:C2,40|00802b56180c0002293b4d001a000e0e0e0c0003030a2c56272d0e0e7d0400022964420e0e0e0e0e|@1316,I229| 2834:S89|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296d616b65536967496e746f28362970726f6365737353696728332970537472756374283229 2835:C2,40|00802b56180c0002293b4d001a000e0e0e0c0003030a2c56272d0e0e7d0400022964420e0e0e0e0e|@1316,I229| 2836:C2,24|00805609561856272b3c2c2c324d000700330e7b07060006|@2276,@2232| 2837:C7,72|0080560929230856282923084d0038002a2d6a565929230b567829230b4d0127002a2d6a56a7220d302c4d021a004d0316004d0412002f4d050d0022140e0e7b090e00080e0e0e0e|@2839,@2840,@2841,@2842,@2838,@1480,@2374| 2838:S16|5479706520636f6e7374727563746f72 2839:S88|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296d616b65536967496e746f28362970726f636573735369672833296c6f6f6b7570283129 2840:C2,40|00802b56180c0002293b4d001a000e0e0e0c0003030a2c56272d0e0e7d0400022964420e0e0e0e0e|@1316,I229| 2841:C2,40|00802b56180c0002293b4d001a000e0e0e0c0003030a2c56272d0e0e7d0400022964420e0e0e0e0e|@1316,I229| 2842:O1|@2843 2843:C5,56|00802b3b4d0030000e0c00030316404d0125000e0e0c0002294d021b003b3b6b296502042b372964294d030b000c000229230865420e0e0e|@2844,I229,@1893,I48,@2286| 2844:S27|56414c55455f4f505328292e6c6f6f6b7570547970283329283129 2845:S3|726566 2846:S12|53706563696679696e672022 2847:S13|2220697320696c6c6567616c2e 2848:O1|@2849 2849:C4,40|00834d0022002c2e306b4d011a002a694d0214000e0c0002302a0e0e0e0c0002643b2a2e7d080002|@2851,@2852,@2850,@2602| 2850:C2,16|00804d000a002c56276a420e0e0e0e0e|@2862,@2861| 2851:S26|545950455f5452454528292e61737369676e5479706573283429 2852:C21,328|00812b4d0041010e0e0c000207cd2b4d0135010e0e0c000229352a362b37294d0225010e0e0c0002294d031b010c00024d0414010e0c00026407dd2a56590e0e0e0c00022a2a4d05fe000e0e0e0c000350294d03f2000e0e0e0c00024d04e8000e0c00024d06e0000e0c000203ce294d07d5000e0e0c00023b2e293b4d08c8000e0c000303032a021629362b3c4d09b7000c0003292b25042504511e213b65652a2a4d0aa2000e0e0e0c00034d0698000e0c00020382567856872d4d0b89000e0e0c00022d4d0c7f004d0d7b000c00032d4d0c73004d0d6f00020268000c0003293b694d0e61002a692c2a694d0f58002a692f2a694d104f002a6927084d1147000c00024d1240002a69292c3c2f35303631373238330202260039343a220c2306220d2307220e2308220f23094d131700221a7b0f0f000e3b6502013b6402013b270402013b430e|@2854,@2073,@2075,@2077,@1482,@1485,@2855,I218,@2424,I229,I106,I113,@2080,-1,@355,@2858,@2859,@2860,@369,@2853,@1111| 2853:C1,16|00802b3856172a2d7d0400020e0e0e0e|@1110| 2854:S37|545950455f5452454528292e61737369676e54797065732834296173735479706573283229 2855:O1|@2856 2856:C5,48|00812c354d0028004d0124000e0c000303132c36293b2e4d0215000e0e0c0004503b6402054d03070010430e0e0e0e0e|@2857,-1,I229,I255,@2765| 2857:S25|5354525543545f56414c5328292e7570646174655052283229 2858:S13|2074797065287329206e6f7420 2859:S11|2920726571756972657320 2860:S18|5479706520636f6e7374727563746f722028 2861:C1,16|00802b561756282d7e0300030e0e0e0e|@2863| 2862:S37|545950455f5452454528292e61737369676e54797065732834296173735479706573283129 2863:S40|545950455f5452454528292e61737369676e54797065732834296173735479706573283129283129 2864:O1|@2865 2865:C1,8|00802b420e0e0e0e|@2866| 2866:S82|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296d616b65536967496e746f28362970726f63657373536967283329283129 2867:O1|@2868 2868:C1,8|00802b420e0e0e0e|@2866| 2869:C2,24|00805609561856272b3c2c2c324d000700330e7b07060006|@2276,@2232| 2870:C7,72|0080560929230856282923084d0038002a2d6a565929230b567829230b4d0127002a2d6a56a7220d302c4d021a004d0316004d0412002f4d050d0022140e0e7b090e00080e0e0e0e|@2839,@2872,@2871,@2842,@2838,@1480,@2374| 2871:C2,40|00802b56180c0002293b4d001a000e0e0e0c0003030a2c56272d0e0e7d0400022964420e0e0e0e0e|@1316,I229| 2872:C2,40|00802b56180c0002293b4d001a000e0e0e0c0003030a2c56272d0e0e7d0400022964420e0e0e0e0e|@1316,I229| 2873:C2,40|00802b56180c0002293b4d001a000e0e0e0c0003030a2c56272d0e0e7d0400022964420e0e0e0e0e|@1316,I229| 2874:C2,40|00802b56180c0002293b4d001a000e0e0e0c0003030a2c56272d0e0e7d0400022964420e0e0e0e0e|@1316,I229| 2875:C18,288|00822d352e362f373b4d00130158582e567b6b2c07dd2b4d0105010e0e0c00024d02fc000e0c000203062b35296402054d03ec001032230833230b2b2b2b4d04de004d05da004d06d600324d07d1000e0e0c0008294d08c7000c00024d09c0000e0c00024d02b8000e0c000203802f4d01ad000e0e0c00024d02a4000e0c000203062f36296402054d0a94001029293b4d0b8c000e0c000303033b024e29352a36221023082211230b2c2b2b4d0470004d056c004d06680022104d0762000e0e0e0c0008121100030002004d0c5100221122152c6b2b332b4d0d44000e0c0004502e250826071e583b27076502013b2704022700003b2c0e0e4f0e23006000024d0f1c002a2a0e0e0e0c000229320e0e0e4f100b00a0000327042705440e0e0e|@2877,@2878,I105,I218,@2102,@2842,@2838,@1480,@2374,@1482,@1485,@2102,I229,@2881,@2882,@2908,@2912,@2876| 2876:C7,72|00812c3b4d0040000e0c000303054d013600104d0231002d2a0c00023b3b2b0e0e4f0323004000024d041c00322a0e0e0e0c00023b2a0e0e0e4f050b00800002503b2708430e0e0e|@2915,I229,@2916,@2918,@2933,@2948,@2914| 2877:S77|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296170706c7953686172696e67436f6e73747261696e74283329 2878:C4,40|00805609561856272e4d001b004d0117000c00032a3c2e2e2d4d020b00340e7b070700060e0e0e0e|@2880,@2879,@344,@2232| 2879:S14|20696e207369676e61747572652e 2880:S93|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296170706c7953686172696e67436f6e73747261696e742833296c6f6f6b75704661696c757265283129 2881:C2,24|00805609561856272b3c2c2c324d000700330e7b07060006|@2276,@2232| 2882:O1|@2883 2883:C42,1272|00823b2e4d00f0040e0c00024d01e8040e0c000203033c02132d4d00da040e0e0e0c00024d01d0040e0c000203033b06d42e4d02c2040e0e0e0c00022e4d02b7040c00022a2a4d03ae040e0e0e0c0003654d04a3040c0002032a2e4d0599040e0e0c00024d0690042a4d078b040c0003294d0883044d077f040c0003652d2d0e7d0600022e4d096f040c00022e4d0967040c00022a4d0a5f040c00024d0458040e0c000203be2a4d0b4d040e0e0c0002030e2a4d0c41040e0e0c00023c6402013b03382a4d0b30040e0c0002030e2a4d0c25040e0e0c0002296402054d0d1804102935324d0e10040e0c0002292b4d0f06040e0e0e0c00036602013b033e2a4d0bf5030202ef030e0e0c0002030e2a4d0ce5030e0e0c0002296402054d0dd803102937644d10d0030e0c00022931314d11c503320e0e0e7b05090004304d05b7030c00024d12b0032a4d07ab030c0003294d13a3034d079f030c0003652f2f0e7d080002294d0a8f030c00024d0488030e0c000203ba294d0b7d030e0e0c0002030e294d0c71030e0e0c00023c6402013b0338294d0b60030e0c0002030e294d0c55030e0e0c0002296402054d0d4803102935314d0e40030e0c0002292b4d0f36030e0e0e0c00036602013b033a294d0b25030e0e0c0002030e294d0c19030e0e0c0002296402054d0d0c03102937644d1004030e0c0002312a314d11f902320e0e0e7b050900042f4d05eb020c00024d14e4022a4d07df020c0003294d15d7024d07d3020c0003652f2f0e7d080002304d00c3020c0002304d00bb020c00022a2a4d16b2020e0e0e0c00036503033b06d0304d17a1020e0e0c00023b2a4d1896020e0e0e0c0003644d048b020c0002304d1783020c00023b2a4d187a020e0e0e0c0003644d046f020c0002324d0067020c00024d1960020e0c00024d0458020e0c0002032a324d054d020e0e0c00024d1a44022a4d073f020c0003294d1b37024d0733020c00036531310e7d0a0002314d0023020c00024d191c020e0c00024d0414020e0c0002032a314d0509020e0e0c00024d1c00022a4d07fb010c0003294d1df3014d07ef010c00036531310e7d0a0002324d00df010c00024d19d8010202d1010e0c0002030c2a4d04c9010e0e0c000202013b030d31330e0e4f1eb70160000306d8314d00ad010e0e0c00024d19a4010e0c0002030c294d0499010e0e0c000202013b030d32320e0e4f1e870160000306d0324d007d010e0e0c00024d1974010e0c000203033c0213314d0066010e0e0e0c00024d195c010e0c000207cd324d1f51010e0e0c0002324d1f47010c00022a030b294d043c010e0c000202013b034f334d002e010e0e0e0c00024d1924010e0c0002030e333c4d2018010e0c0003503c022a334d050b010c00024d2104012a4d07ff000c0003294d22f7004d07f3000c000365330e0e0e0c0002503b026d29030f2a4d04dc000202d4000e0c000202013b0357344d00ca000e0e0e0c00024d19c0000e0c00020312343c4d20b4000202ac000e0c0003503c022e344d05a3000c00024d239c002a4d0797000c0003294d248f004d078b00020239000c000365330e0e0e0c0002503b02013c0321344d0070000e0c0002344d0067000c00022a2a4d255e000e0e0e0c0003260302023b503b65024a324d0549000e0e0c00024d2640002a4d073b000c0003294d2733004d072f000c0003344d0527000c00022a2a4d071e000e0e0e0c0003294d2813004d070f000c0003270531317d0a000265656444|@2885,@1482,@1485,@2424,I113,I218,@2080,@2886,@344,@2428,@2420,@2046,@2073,@2075,@958,@2435,@2887,@2077,@2882,@2890,@2891,@2890,@2891,@2453,@2501,I229,@2892,@2890,@2895,@2890,@2895,@2896,@2431,@2899,@2890,@2500,@2890,@2500,@2904,@2890,@2907,@2884| 2884:S21|292061726520646966666572656e74207479706573 2885:S35|545950455f5452454528292e6c696e6b54797065436f6e7374727563746f7273283329 2886:S21|43616e6e6f742073686172653a2054797065732028 2887:O1|@2888 2888:C8,144|00812b3b4d0088000e0c0003030e3b2d4d007c002d0e0e0e7e0400032b35294d016d000e0e0c0002035e294d0261000e0e0c00022d362f4d0355000e0e0c00024d044c000e0c0002033a2f35294d013f000c0002032a294d0235000e0e0c000231362d2b4d0528000e0c0003030e292d4d061c00330e0e0e7e0a00033b6502013b6402013b6502013b64430e0e0e0e0e|@2889,I229,@1474,@1476,I105,I218,@2024,@2887| 2889:S44|545950455f5452454528292e6c696e6b54797065436f6e7374727563746f7273283329657141726773283229 2890:S15|43616e6e6f742073686172653a2028 2891:S20|29206973206120747970652066756e6374696f6e 2892:O1|@2893 2893:C4,88|00802b29354d004f004d014b000c000303292936293b4d023e000e0e0e0c000329353c4d0131000e0e0c000303032b0207292503511e323b650201296429354d0015004d0111000e0e0c000303033c02013b64420e0e0e0e|@2894,-2,I229,I253| 2894:S29|5354525543545f56414c5328292e69735661726961626c654964283129 2895:S17|29206973206e6f7420666c657869626c65 2896:C19,240|00812c4d00e9000e0e0c00022c4d01df000c00020402002f4d02d4000e0c00024d03cc000e0c000203193c2840314d04be000e0e0e0c00042a4d05b300452a46510206293b45304650292b2d2b6a4d069e000e0e0e0c0002304d0793000c0002037d314d0289000e0e0c00024d0880000e0c00020315314d0975000e0e0c0002294d0a6b000c00026402013b030d313c4d0b5c000e0c0003500242314d0c50000e0c00024d0d48000e0c0002032d314d003d000e0e0c00024d0e34002a4d0f2f000c0003294d1027004d0f23000c00036556670e0e0c00025002023b5002023b50302a4d110900327e0900030e0e0e0e|@2898,@2080,@2435,@1482,@1485,I11,-1,@1489,@2429,@2892,@2420,@2046,@2899,@2431,I218,@2890,@344,@2500,@2897| 2897:O1|@2902 2898:S46|545950455f5452454528292e6c696e6b54797065436f6e7374727563746f72732833297365744571756976283229 2899:O1|@2900 2900:C6,96|00812c3929353b4d0055000e0e0c0003030629362964020e2936293b4d0140000e0c0003296529362a372f2b2b6a2d354d022c004d0028000e0c000303132d36293b2c4d0319000e0e0c0004503b6402054d040b00102705430e0e0e0e0e0e0e|@2901,I229,I253,-1,I255,@2765| 2901:S30|5354525543545f56414c5328292e7463536574457175616c697479283229 2902:C6,96|00812c3929353b4d0055000e0e0c0003030629362964020e2936293b4d0140000e0c0003296529372a3529302c6a2d354d022c004d0028000e0c000303132d36293b2c4d0319000e0e0c0004503b6402054d040b00102705430e0e0e0e0e0e0e|@2903,I229,I253,-1,I255,@2765| 2903:S32|5354525543545f56414c5328292e74635365744571756976616c656e74283229 2904:O1|@2905 2905:C8,384|00812c29354d0077014d0173010c000303292936293b4d0266010e0e0e0c000329353c4d0159010e0e0c000303032b0207292503511e323b65020129642c29354d003c014d0138010e0c000303292936293b4d022a010e0e0e0c000329353c4d011d010e0e0c000303032b0207292503511e333b65020129642a354d0001014d03fd000e0e0c00030a0200ab0072002d0029354d00e9004d01e5000e0e0c000303132936293b2d4d04d5000e0e0c0004503c6402013b02c32a362a353b4d01bf000c0003030e2a362a2a4d05b200310e7e0800032a354d00a6004d01a2000e0e0e0c000303132a36293b2e4d0491000e0e0c0004503c6402013b64027e2a362a354d007b004d0377000c00030a0100150007003b021d2a362a2a4d066200310e7e0800032a36293b2e4d0453000c0004503c646402452a362a354d0042004d013e000e0e0e0c000303232a362a2a4d062e000e0e0e0c000303033c020d2a3b2d4d041c000e0c0004503c64020d293b2c4d040c000e0c0004503c6465430e0e0e|@2906,-2,I229,I253,I107,I255,I113,I251| 2906:S29|5354525543545f56414c5328292e756e69667954797065496473283229 2907:S7|2920616e642028 2908:C8,104|00802b3b4d0060000e0c000303033b02552b352c36562829230b56402d2b2c4d0145004d0241003b2f4d033b000c0008293b4d0032000e0e0e0c00030316404d0425000e0e0c0002294d051b003b3b6b29650204293729642e4f060b007100022a2a69292709420e|@436,I229,@2909,@2277,@2374,@1893,I48,@2908| 2909:O1|@2910 2910:C5,56|00802b3b4d0030000e0c00030316404d0125000e0e0c0002294d021b003b3b6b296502042b372964294d030b000c000229230b65420e0e0e|@2911,I229,@1893,I48,@2286| 2911:S41|56414c55455f4f505328292e6c6f6f6b75705374727563747572654469726563746c79283429283129 2912:O1|@2913 2913:C3,40|00802b3b4d0020000e0c000303033b02152b352c362a3b692a4d010b000c00022a2a69292705420e|@436,I229,@2912| 2914:C5,64|00802b3b4d0038000e0c000303033b02292b352c3656283b2a4f01230040000258582a2a0e4f0217007200032e4f030f007100022a2a69292709420e0e0e0e0e|@436,I229,@2959,@2876,@2914| 2915:S96|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296170706c7953686172696e67436f6e73747261696e7428332973686172655669727453747275637473283229 2916:O3|@7141,@228,@2917 2917:S18|456d7074792073686172696e67206c697374 2918:O1|@2919 2919:C6,64|00802b3b4d0038000e0c000303033b02272b352c362a4d0126000e0e0e0c00022a4d021b000c0002292b4d0312004d040e00327b05070004420e0e0e0e0e0e0e|@2921,I229,@2922,@2918,@2929,@2920| 2920:O1|@2931 2921:S88|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296170706c7953686172696e67436f6e73747261696e74283329756e696f6e4d6170283329 2922:O1|@2923 2923:C8,80|00802b3b4d0048000e0c000303033b02372b352c362a4d0136000e0e0e0c00024d022c002a2a3b4d0325000e0e0c00042c4d041b000c0002292b4d0512004d060e00347b05090004420e0e0e0e0e0e0e|@2921,I229,@2412,@2925,@2410,@2922,@2924,@2920| 2924:O1|@2928 2925:O1|@2926 2926:C2,32|00802b352c362d372a4d0013000c000203072b2a69296402012966420e0e0e0e|@2927,@2348| 2927:S98|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296170706c7953686172696e67436f6e73747261696e7428332974797065436f6e7374724e616d6573283129283129 2928:C2,16|00802b352c364d0006002d0e7e030003|0,I24| 2929:O1|@2930 2930:C2,16|00802b352c364d0006002d0e7e030003|0,I24| 2931:C3,104|00822c3b4d0060000e0c000303032d02512c352d362f293b4d004c000e0c000303033b021829352a362d2b69310c000203033c0207292503511e233b656403102f2a2f4d012100300e0e0e7b050700042f2a2f4d0111000e0e0c00042b2a69292704440e0e0e0e0e|@2932,I229,@2920| 2932:S85|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296170706c7953686172696e67436f6e73747261696e74283329756e696f6e283329 2933:C4,48|00802b3b4d0028000e0c000303033b021d2b352c362a0e0e0e4f0113002100022a4f020b003100022a2a69292705420e|@436,I229,@2934,@2933| 2934:C3,32|008056082c2a4d0016000e0e0e0c00033b2a0e0e0e4f01070030000266420e0e|@2936,@2937,@2935| 2935:C5,104|00802b3b4d0060000e0c000303033b02502b352c3629293b4d004c000e0c000303033b023129352a36120600040002005867120800060002004d012b002c2c2c6b312f2b4d0220000e0c00042e250826071e3b3b2707642a0e4f030b0031000266420e0e0e0e0e0e|@2947,I229,@2946,@2882,@2935| 2936:S118|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296170706c7953686172696e67436f6e73747261696e742833297368617265566972745374727563747328322973686172655669727454797065436f6e737472283129 2937:O1|@2938 2938:C2,16|00813b2c0e4f00070010000264430e0e|@2940,@2939| 2939:C5,80|00802b3b4d0048000e0c000303033b023a2b352c36290e0e0e4f0133002100025638292d4d0228000e0c00032b3b4d001e000e0e0e0c0003030329020c3b2a0e0e4f030b00600002642705420e0e0e0e|@2610,I229,@2939,@2942,@2941| 2940:S99|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296170706c7953686172696e67436f6e73747261696e742833296c6973745669727454797065436f6e73747273283229 2941:C3,40|00802b3b4d0020000e0c00030304560202142b352c36290e0e4f010b002100022b2a69292704420e|@1884,I229,@2941| 2942:O1|@2943 2943:C2,16|00813b2c0e4f00070010000264430e0e|@2945,@2944| 2944:C8,88|00802b3b4d0050000e0c000303033b02452b352c36290e0e0e4f013b002100022b4d0233000c000256482a4d0329002b4d0424000e0c0004294d051b000c00024d0614000e0c000203092935292e69296502012c2706420e|@2610,I229,@2944,@2412,@7308,@2291,I105,I218| 2945:S98|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296170706c7953686172696e67436f6e73747261696e742833296765745669727454797065436f6e73747273283229 2946:C2,24|00805609561856272b3c2c2c324d000700330e7b07060006|@2276,@2232| 2947:S129|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296170706c7953686172696e67436f6e73747261696e742833297368617265566972745374727563747328322973686172655669727454797065436f6e7374722831297368617265416c6c283129 2948:O1|@2949 2949:C6,64|00802b3b4d0038000e0c000303033b02272b352c362a4d0126000e0e0e0c00022a4d021b000c0002292b4d0312004d040e00327b05070004420e0e0e0e0e0e0e|@2921,I229,@2951,@2948,@2950,@2920| 2950:O1|@2958 2951:O1|@2952 2952:C8,80|00802b3b4d0048000e0c000303033b02372b352c362a4d0136000e0e0e0c00024d022c002a2a3b4d0325000e0e0c00042c4d041b000c0002292b4d0512004d060e00347b05090004420e0e0e0e0e0e0e|@2921,I229,@2412,@2954,@2410,@2951,@2953,@2920| 2953:O1|@2957 2954:O1|@2955 2955:C2,32|00802b352c362d372a4d0013000c000203072b2a69296402012966420e0e0e0e|@2956,@2336| 2956:S100|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296170706c7953686172696e67436f6e73747261696e742833297375625374727563747572654e616d6573283129283129 2957:C2,16|00802b352c364d0006002d0e7e030003|0,I24| 2958:C2,16|00802b352c364d0006002d0e7e030003|0,I24| 2959:C4,56|00802b3b4d0030000e0c000303033b02212b352c36290e0e0e4f011b002100025634292d4d0210000e0c0003292c69292706420e0e0e0e0e|@2610,I229,@2959,@2960| 2960:O1|@2961 2961:C2,16|00813b3b2d4f0007002000022966430e|@2963,@2962| 2962:C4,48|00802b3b4d0028000e0c000303033b021c2b352c36290e0e0e4f0113002100022b2a0e0e0e4f02070041000366420e0e|@2610,I229,@2962,@2964| 2963:S99|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296170706c7953686172696e67436f6e73747261696e7428332967657456697274537562537472756374757265283229 2964:C9,104|00812c4d0061000e0e0c000256182a4d0155002b4d0250000e0c0004294d0347000c00024d0440000e0c000203312935293b4d0532000e0e0e0c00030316404d0625000e0e0c0002294d071b003b3b6b2965020429372964293169296602012e66430e0e0e0e0e0e|@2965,@2412,@7305,@2291,I105,I218,I229,@1893,I48| 2965:S113|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296170706c7953686172696e67436f6e73747261696e74283329676574566972745375625374727563747572652832297375627374724c6973742d283229 2966:C2,40|00802b56180c0002293b4d001a000e0e0e0c0003030a2c56272d0e0e7d0400022964420e0e0e0e0e|@1316,I229| 2967:C2,40|00802b56180c0002293b4d001a000e0e0e0c0003030a2c56272d0e0e7d0400022964420e0e0e0e0e|@1316,I229| 2968:C4,72|00802b352c3629362a385648293b4d0036000e0e0e0c000356682a3c4d0128000e0c00032a3b2b4d021d000e0e0c000450568729373b2e6933322b336b342a69652a220d7d0d0002|@2969,I253,I106,I255| 2969:S90|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296d616b65536967496e746f28362970726f63657373536967283329656e74657256616c283129 2970:C5,80|00802b352c36294d0045000e0e0c00024d013c000e0c0002032456285638293b4d022c000e0c00032c2a692c3b2b4d031e000e0e0e0c0004503b260502023b50562729382c2c692a300e0e0e7d070002|@2971,@2420,@2686,I253,I255| 2971:S91|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296d616b65536967496e746f28362970726f63657373536967283329656e74657254797065283129 2972:O1|@2973 2973:C3,88|00853b2f2306302308313932230b333a34230a220c37220d38220e35220f2309221036221123072c2b3030220d220c22113022123422104d001d002214680d221522162b22143b3c0e1601000a00150000000007270e1f06|@2975,@2976,@2974| 2974:C2,16|00853b31314f000700200003641f060e|@2980,@2979| 2975:S21|50415253455f5452454528292e7061737332283629 2976:O1|@2977 2977:C1,8|00803b420e0e0e0e|@2978| 2978:S28|50415253455f5452454528292e7061737332283629656e762d283129 2979:C114,3064|00812c354d00f00b4d01ec0b0e0c00030a1f00d30b01029e02fb01210b6c05a700d80b47001902d808400068030905750aa90a5403e3001d013f03990b22095e05d109b501ae04c7062c0273099a01c106260a4d02a10b1006cf2c362d372e38563a292306565a29230c577956894d03860b2a220d2d6b322f2e4d047a0b4d05760b4d06720b2f4d076d0b0e0e0c00083c2a4d08620b0e0e0e0c0003333b2c4d09550b0e0e0c000450323b2b4d09480b0e0c00045029270c06dd2c362d38293c4d0a340b0e0c0003573956494d0b280b5769326a2c4d0c1f0b2d2d2d4d0d180b0e0c00062f3b2b4d090d0b0e0e0c00045029270706ca2c362d372a2e0e4f0ef70a3100032a2f0e0e0e4f0eeb0a410003574956594d0fe00a5779336a2d2d2d2d2d4d0dd30a220e0202c50a7b070b00062c362d372e382b300e4f0ebb0a410003574956594d10b00a5779346a4d11a80a2a2c2e6b2d4d129f0a4d139b0a2c4d14960a0e0e0e0c00052f220d0e0e4f0e870aa1000331220e0e0e4f0e7b0ab1000357b956c94d15700a57e922126a4d16670a2a2c2e6b0202570a2e2e4d13590a2c4d14540a0e0c00052f271006dc2c363b2a4f17430a200002644d183b0a2d02022e0a0e0e7d0500022c362d372e384d19260a56493157696b3b2b0e0e0e4f1a170a500002292c4d1b0e0a0e0e0e0c000329304d1c020a0e0e0e0c00032f3b2b4d09f5090e0e0c00045029270806ca2c37296406db2c362d372e382f39292b2d2f0e4f1dd309710005270406da2c362d372e38292b2d4f1ebf095100046606cf2c362d37404d1fb0090e0c00023b2c0e0e0e4f20a3094000023b2a293b4d2198090e0c000303033b021829352a362a0e0e0e4f22830990000250292503511e233b65644d2372092e020265094d2469090e0e0c00033b2a0e0e0e0c0002642f3b2b4d0954090e0c0004504d254b09270806de2c364d26410956292f57496b0403002a2a4d2732090e0e0e0c00035029362c293b4d212209020216090e0e0e0c000303033b023a29352a362a3656890202ff084d2803092a57b9220f56da680557a92c2b2b2e0202e8084d29ec080202e0080e0c0005502d250726061e4a3b2706643b2e293b4d21d0080e0c000303033b021829352a362a0e0e0e4f2abb0890000250292503511e233b65644d25aa08270706cd2c362d372e382b2a2c3b0e4f2b97086100056606dd2c362d372e382b2a2c3c4f2b83086100056606d52c362d37562a292308564a29230c5769567902025f084d2c63082a220c2d6b302f2e4d2d57084d2e53084d2f4f082f4d074a080e0e0e0c0008040200322a4d303b080c0003502935294d3130084d322c080e0c000303033b022856ca29230c57e956f94d3316082a22152d6b4d340d082d302c4d3506080e0e0e0c0005296801270657d729220e4d36f2070e0e0e0c00032e2a2d4d37e5070e0e0c0004294d38db070202cf070c0002293b4d21ce070e0e0e0c0003033a121200020003001213000100030022110202aa074d39ae074d36aa0702029e070e0e0e0c00032b3c22192d2d4d3a96070e0e0e0c0006260402023b5029293b4d2183070c000303043b50022829352a361215000100040029372c4d3b68070e0c0002292e69642a0c0002512a250426031e3326035012120001000400293822122d692a0c0002514d253b07271206da2c36290e4f3c2f07110002293b690402004d3d22074d3e1e070e0e0e0c00024d3f14070e0c000203193c28404d3d07074d4003070c00042a4d41fb06452a46510208294d42f006080200292b4d43e7062b6a4d44e106317d0900022c362d37292e0e0e0e4f0ecf0631000356394d45c6062a576933568a680557592e2b2b2e4d29b4060e0c0005577956894d46a80657a9220e6a4d479f062a2c2e6b31344d1395062c4d1490060e0c000534270c06dc2c36290e4f3c7f061100026406dd2c3629352a362b372c382d394d4869062d3457996b0403002a2a020253064d2757060c00035029362a3756a7293c4d4947060c0003323b3b2c30220d0e0e164a00360613000100000756da2923064d4b27062a306a121100010004002923081213000100040029391215000100040029230c12170001000400293a1219000100040029230a121b000100040029230b121d00010004002937121f0001000400293812210001000400293512230001000400292309122500010004002936122700010004002923072f2c220c340202a10522182215221e30221e220d0202920522182217221e680d122a00010002002228222e2c222a2d22230e0e164c007a0531000200000722253b2b4d096c050e0c00045022263b22204d095e050e0e0e0c000450122c0001000200122d00020003004d4d4505222b22322c6b22212c2b4d4e37050c00045022212d694d4f2b0522310e7d3200024d50200506dd2c362d372e382f390403003b2a4d510d050e0e0c00035029362a370403003b2a4d51fa040e0e0e0c00035029362a370403003b2a4d51e6040e0e0e0c00035029362a37220c030456d8020c56d8293c4d49cb040c00036456ea2923064d52be042a346a121200010004002923084d53ad042a346a1215000100040029391217000100040029230c4d5493042a220d6a121a0001000400293a121c000100040029230a121e000100040029230b122000010004002936122200010004002923074d555b042c221f221d2211220d221830221722202210220f2216680d0202370422214d2539042a3b4d2133040c000303032902382a3529352a362d36122b0001000100122c00010006002d2a332f22222f0e0e0e164c0006043300020000072c2a2509250926071e413b2707654d56ee0312270001000400222122246b4d57de0312280001000400221f6a1228000100040029354d58c703122b0001000400221f6a122b00010004002936122d00010004002923072e2c3333221c22182223302222220d221b221a2221680d222d4d258d032a3b4d2187030c000303032902382a3529352a362d3612360001000100123700010006002d2a332f222d2f0e0e0e164c005a033e00020000072c2a2509250926071e413b270765222f03043b50022c1231000100020012320002000300123300010003004d5925032a22382d6b2d2d2b4d4e19030e0e0c0004260529273006cd2c36561a56282b4d2502032a3b4d21fc020e0c0003030329022c2a3529352a362d36569756ac2d2a342f220c2f0e164c00da021200020000072c2a2509250926071e363b2707270506d32c364d5abd0256292f57496b0403002a2a4d27ae020e0e0e0c00035029363b2d293b4d219d020e0e0c000303033b021829352a362a0e0e0e4f5b870280000250292503511e243b65644d257602270606dd2c36292e0e0e0e4f0e6702210003572956394d5c5c025759326a4d5d54022a2c2e6b4d5e4c022e4d1347022c4d144202020236020e0e0e0c00050402004d5f31021b0f273b3b3b2e4d6026020e0e0e0c00075029644d611902337d0b00022c362d372a2f0e0e0e4f0e07023100032a4f3cff013100024d5ef8012b694d4ff2010202e6010e0e0e0c0002575956694d62e0015789220c6a4d63d7012a2c2e6b2e2e4d13cd012c4d14c8010e0c000530270a06dd2c362d37292f0e0e4f0eb301310003573956494d64a8015769336a4d65a0012a2c2e6b2d4d12970102028b014d138f012c4d148a010e0e0e0c000530220c0e0e4f0e7b019100034d507401270906dc2c362d37294f3c67012100022b300e0e0e4f0e5b01410003574956594d6650015779346a2d2d2d2d2d4d0d4301220e7b070b00062c362d372a2f0e0e0e4f0e2f01310003573956494d6724015769336a4d681c012a2c2e6b2d4d1213014d130f012c4d140a010e0e0e0c00052f220c0e0e4f0efb00910003579956a94d69f00057c922106a4d6ae7002a2c2e0202d8006b2d4d12da004d13d6002c4d14d1000e0e0c00054d12c800270e02bc2c362d372a2f0e0e0e4f0eb700310003573956494d6bac005769336a4d6ca4002a2c2e6b2d4d129b004d1397002c02028a004d148e000e0e0e0c00052f220c0e0e4f0e7f00910003579956a94d6d740057c922106a4d6e6b002a2c2e6b2d4d1262004d135e002c4d1459000e0e0c00054d125000270e02442c362d3729293b4d2141000e0e0c000303043b50021c29352a36565a29352c30692a0e0e0e0c0002512a250426031e292603504d25150065020a4d6f0e00104d70090010430e0e0e0e0e0e0e|@2982,-16,I107,@2983,@2985,@2992,@3000,@1581,@2374,@3001,I255,@3003,@3030,@535,@3032,@2979,@3039,@3040,@3041,@191,@2557,@2554,@3042,@3043,@3044,@1416,@3045,@3047,@1457,@1467,@3048,@3156,@1893,@3201,I229,@3203,@3220,@3228,@633,@3233,@2253,@3235,@2848,@3237,@3239,@4703,@2842,@2838,@1480,@2083,I48,I24,@4704,@2277,@2278,@344,@3207,@2501,@4705,@2986,@2156,@4706,@622,@1482,@1485,I11,-1,@3101,@621,@1489,@4712,@4714,@4715,@4716,I106,@3068,@4718,@2974,@4719,@3142,@1500,@603,@1302,@4720,@4721,@4722,@4723,@4726,@4728,@4729,@4730,@4731,@4732,@4743,@4744,@2689,@205,@1348,@1326,@4745,@4746,@4747,@4748,@4749,@4750,@4751,@4752,@4753,@4754,@4755,@4756,@4757,@4758,@2981| 2980:S36|50415253455f5452454528292e706173733228362961737369676e56616c756573283629 2981:O3|@7141,@228,@4760 2982:S48|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c756573283229 2983:O3|@7141,@228,@2984 2984:S28|61737369676e54797065733a20656d7074797472656520666f756e64 2985:C2,24|00805609561856272b3c2c2c324d000700330e7b07060006|@2987,@2986| 2986:O1|@2988 2987:S36|50415253455f5452454528292e7061737332283629676976654572726f72283329283129 2988:C4,40|00842e03064d001f0002044d0119004d0215002f2e336b312f2b6a642a2d0e0e7d0800020e0e0e0e|@2990,@2239,@2242,@2989| 2989:C9,128|00805609292309294d0074004d0170000e0c00032e23064d0265002a0e0c0002512e3856482a0e0e0e0c0002512e354d034d002a0e0c0002512e23064d0440002a0c0002512e384d0535002a0e0c0002512e354d0629002a0e0c0002515637292b314d071a000e0e0e0c0004502f373b2a0c0002512f373b2a310e0e7d080002|@2991,@7299,@960,@333,@347,@333,@2245,@329,@2139| 2990:S25|50415253455f5452454528292e6572726f724e656172283529 2991:S28|50415253455f5452454528292e6572726f724e656172283529283129 2992:O1|@2993 2993:C6,64|00802b3b4d0038000e0c00030316404d012d000e0e0c0002294d0223003b3b6b296502042b372964294d0313000c00022923064d0409002f2b6a66420e0e0e0e|@2995,I229,@1893,I48,@2286,@2994| 2994:C5,88|00802b56180c0002294d004b000c00024d0144000e0c00020338293556272a3729353b4d0231000e0e0c0003031c29362c352d362e382c2f694d031b000c00022c2c2b2d6b29270602012b296801270402013b64420e0e0e|@2997,I105,I218,I229,@2996| 2995:S29|56414c55455f4f505328292e6c6f6f6b757056616c7565283429283129 2996:O1|@2998 2997:S32|56414c55455f4f505328292e6c6f6f6b757056616c7565283429283129283129 2998:C1,16|00802b352c363d2b2b6a65420e0e0e0e|@2999| 2999:S8|53656c6563746564 3000:S20|56616c7565206f7220636f6e7374727563746f72 3001:O1|@3002 3002:C10,120|00812b4d0071000e0e0c00022936293b4d0164000e0c000303252a38294d0257000c000203064d034e000210294d034700694d0442002f0e7d0700026402352a37294d0532000e0e0e0c00020316294d0625000e0e0c00022f3b4d071a00310e7e0800032b38293b324d080b00320e7b0508000465430e0e|@3004,@3005,I229,@2046,@2689,@1500,@2777,@2780,@3003,@2465| 3003:O1|@3007 3004:S51|50415253455f5452454528292e706173733228362961737369676e56616c756573283629696e7374616e636554797065283229 3005:O1|@3006 3006:C1,8|00802b420e0e0e0e|@2810| 3007:C8,112|00812c37294d0067000c0002034e294d015d000e0e0c0002294d0253000c0002032a2e352f382a4d0345000e0e0c00024d043c002a2a0e0e0e0c00022c2a344d052d00220c0e0e7b050b00042e38293b3c4d061b00310e7b050700042d38293b3c4d060b00300e7b050600040e0e0e0e|@3009,@2777,@2780,@3010,@3013,@3018,@3008,@2465| 3008:O1|@3021 3009:S27|56414c55455f4f505328292e6f7665726c6f616454797065283229 3010:O1|@3011 3011:C2,16|00803f2c4d0008002d0e0e0e7e030003|@3012,I229| 3012:S7|54797065446570 3013:O2|@3014,@7309 3014:C3,32|00803b5617293b4d0015000e0e0c0003644f010b0010000264420e0e0e0e0e0e|@3016,I253,@3015| 3015:C4,80|00802b3b4d0048000e0c000303033b02392b3529352a362b372f365657292e4d012d000e0e0c00036403142b2b692a0e0e4f021b006100022a2a6929660209290e4f020b005100022705420e0e0e0e0e|@3017,I229,I24,@3015| 3016:S29|5052494e545f5441424c4528292e6765744f7665726c6f616473283129 3017:S42|5052494e545f5441424c4528292e6765744f7665726c6f6164732831297365617263684c697374283129 3018:O1|@3019 3019:C3,40|00802b3b4d0020000e0c000303033b02152b3529352d36294d010c000e0c00022b2a69292705420e|@3020,I229,@3018| 3020:S38|56414c55455f4f505328292e6f7665726c6f6164547970652832296765745479706573283129 3021:C11,120|00822b032d2d4d006e000e0e0e0c000203192d4d0161000e0e0c00022936294d0255000e0e0c00026502054d03490010020a2d4d0441000e0e0c0002294d0537000c00020326294d062d000e0e0c00022e4d0723000c0002292b69293b69322a3c4d081300330e7b050a00044d090800100e0e0e0e0e0e0e|@3023,@2107,@2109,@2039,@3024,@3026,@1474,@1476,@2650,@2465,@3022| 3022:O3|@7141,@228,@3029 3023:S33|545950455f5452454528292e67656e6572616c6973654f7665726c6f6164283329 3024:O3|@7141,@228,@3025 3025:S26|676574526573756c74202d206e6f7420612066756e6374696f6e 3026:O1|@3027 3027:C8,120|00802b4d0071000e0e0c0002035e2b4d0165000e0e0c00022935294d0259000e0e0c0002033a294d034d000e0e0c00022936294d0441000e0e0c00024d0538000e0c0002030e29352936294d062900327d0900022b4d061f00300e0e7d070002294d0613002e0e0e7d0500022b4d0607002c0e0e0e800002|@3028,@2107,@2109,@2049,@2051,I105,I218,@2039| 3028:S23|545950455f5452454528292e6669727374417267283129 3029:S42|67656e6572616c6973654f7665726c6f6164202d20617267206973206e6f742061207479706520766172 3030:C6,64|008056085617292309294d0032004d012e000e0e0e0c00032f384d0222002a0e0e0c0002512f354d0315002a0e0c0002512c2a314d040800320e0e7b05070004|@3031,@7299,@960,@2245,@329,@2139| 3031:S36|50415253455f5452454528292e7061737332283629666f756e644e656172283129283129 3032:O1|@3033 3033:C13,184|00842f4d00b1000e0e0c0002294d01a7000c0002030e294d029d000e0e0c00023c6402013b033f294d018c000e0c0002030e294d0281000e0e0c0002296402054d0374001029354d046d002f31336b2a334d0563002c4d065e000e0e0e0c00052c36270402490402004d074b001b0f273b3b3b2e4d0840000e0c00075029644d0935000e0e0c0002302a694d0a29000e0e0c00024d0b20002f31336b2c2b4d0516002c4d0611000e0e0c00052c2704641f050e0e0e0e0e0e|@3035,@2039,@2107,@2109,@958,@3036,@2557,@2554,@205,@1348,@1326,@1500,@3034| 3034:C4,40|00802b352c362d375639564856574d0016002f4d01110030303030304d02080022100e7b0a090009|@3038,@3037,@1197,@2576| 3035:S20|545950455f5452454528292e6170706c79283529 3036:C4,40|00802b352c362d375639564856574d0016002f4d01110030303030304d02080022100e7b0a090009|@3038,@3037,@1197,@2576| 3037:S11|43616e277420756e696679 3038:S32|545950455f5452454528292e756e69667928352963616e744d61746368283129 3039:C6,64|008056085617292309294d0032004d012e000e0e0e0c00032f384d0222002a0e0e0c0002512f354d0315002a0e0c0002512c2a314d040800320e0e7b05070004|@3031,@7299,@960,@2245,@329,@2139| 3040:C6,64|008056085617292309294d0032004d012e000e0e0e0c00032f384d0222002a0e0e0c0002512f354d0315002a0e0c0002512c2a314d040800320e0e7b05070004|@3031,@7299,@960,@2245,@329,@2139| 3041:C4,40|00802b352c362d375639564856574d0016002f4d01110030303030304d02080022100e7b0a090009|@3038,@3037,@1197,@2576| 3042:C6,64|008056085617292309294d0032004d012e000e0e0e0c00032f384d0222002a0e0e0c0002512f354d0315002a0e0c0002512c2a314d040800320e0e7b05070004|@3031,@7299,@960,@2245,@329,@2139| 3043:C4,40|00802b352c362d375639564856574d0016002f4d01110030303030304d02080022100e7b0a090009|@3038,@3037,@1197,@2576| 3044:C4,48|00802b3b4d0028000e0c000303033b021d2b352c362a56370e4f0113003200032a4f020b003100022a2a69292705420e|@436,I229,@2979,@3044| 3045:C2,24|00805609561856272b3c2c2c324d000700330e7b07060006|@3046,@2986| 3046:S56|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c7565732832296d7367466e283129 3047:C4,64|00802b3b4d0038000e0c000303033b022d2b352c360402002b352c3656582a2a0e4f011b007200032d2d452a46502d2f0e4f020b008100022a2a6929270a420e|@436,I229,@2979,@3047| 3048:C12,168|00835607293c4d009e000e0e0e0c00032e354d0192002b692a0c00026430354d0285002c566a6a2a0e0c0002644d0377005659566c57796b0403002a2a4d0467000c00035029352a360403003b2a4d0556000e0e0e0c00035029362a373b3b220f4f064300d000033b3b3b3b22132e0e0e160700320014000000000422132e0e0e16080022001400000000034d0918002218121500010004006a220c0e0c00024d0a040027131f04|@3050,I106,@3051,@3056,@3061,@2253,@1302,@3063,@3108,@3117,@3049,@633| 3049:C3,56|00802b36561829372e2a0e0e0e0c00025156275637293b4d001d000e0e0c00032d2a692c3b2b4d010e000e0e0e0c0004503b2706420e0e0e|@3053,I253,I255| 3050:S56|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c4465636c61726174696f6e283429 3051:C2,24|00802b3656172a2a4d000c002f0e0e0e7e0500030e0e0e0e|@3053,@3052| 3052:O1|@3054 3053:S61|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c4465636c61726174696f6e283429552d283129 3054:C11,112|00812c4d0069000e0e0c0002294d015f000c0002030e294d0255000e0e0c0002296402054d0348001029352a364d043f000c00032a352b364d0534000e0c00030402004d062900312d3c2e2e4d0720000e0c00075029644d0815000e0e0c00022c2a4d090a00320e7e0900030e0e0e0e|@3055,@2039,@1474,@1476,@958,@2027,@2062,@205,@1348,@1326,@1469| 3055:S27|545950455f5452454528292e736574547661724c6576656c283229 3056:C5,72|00802b352c36562829230b2c2a0c000264294d0032000e0e0e0c00024d0128000e0c0002030e2935292d4d021a00320e7e08000356472c2a4d030c00320e0e0e7e0800030e0e0e0e|@3058,I105,I218,@3057,@3052| 3057:O1|@3059 3058:S69|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c4465636c61726174696f6e2834293c7061747465726e3e2d283129 3059:C8,144|00812c4d0089000e0e0c0002294d017f000c0002030e294d0275000e0e0c0002296402054d036800102d4d0062000e0e0e0c0002294d0157000c0002030e294d024d000e0e0c0002296402054d034000102b352c364d0437000c00032a352b364d042c000e0c00032a2a4d0522000e0e0e0c000365030d2b304d061300310e0e7e08000329314d060600310e7e080003|@3060,@2039,@1474,@1476,@958,@2059,I233,@1469| 3060:S27|545950455f5452454528292e6c696e6b5479706556617273283229 3061:C4,40|00805609561856272e4d001b004d0117000c00032c3c2d2d2d4d020b00340e7b070700060e0e0e0e|@3062,@2235,@344,@2986| 3062:S66|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c4465636c61726174696f6e2834296e6577456e762d283129 3063:C13,216|00812b3b4d00d0000e0c000303033b02c22b35293b4d00bf000c000303112c363c2a0e0e0e4f01af003100036402a329352a372e363c28403c4d029b000c00044d0394001207000100f5ff331209000100f7ff2d680556632d343b2c2e330e0e0e4f047300c200072c3b4d056a000e0e0e0c000303305787293c4d065a000e0e0e0c0003644d074f000c000203155889292309294d0840004d093c000e0c00036502013b02013b03165889293b32324d0a25004d0b21000e0e0c00065102023b50342e0e0e4f010f009100032a2a6929270964430e0e0e0e|@3065,I229,@3063,I11,@3066,@3068,I253,I113,I218,@7295,@960,@3064,@2986| 3064:S39|5061747465726e20646f6573206e6f74206465636c61726520616e79207661726961626c65732e 3065:S69|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c4465636c61726174696f6e2834296d617050726f63657373283229 3066:C2,48|0080560a293b3b4d0025000e0e0c0004502c56290e0c0002505618030b2c56272d0e0e0e7d0400023b64420e0e0e0e0e|@3067,I255| 3067:S81|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c4465636c61726174696f6e2834296d617050726f63657373283229656e74657256616c73283129 3068:C73,1336|00852b354d0030054d012c050e0c000307d82b362c372d380402002c2a4d0217050c00035029355759292309294d0307054d0403050c0003654d05fb040c000203033402013b03064d06ec04026c294d07e5044d08e1040e0e0c0003032d565a2923062f2a0c000264294d09ca040e0e0e0c00024d05c0040e0c000203062935296402044d06b00465022f565a292306567a29230c57994d0a9d042212220e2c6b332e2d4d0b90044d0c8c044d0688042f4d0d83040c00082706294d0e79040e0e0c000203893403165769293c3422114d0f64044d1060040e0c00065102023b502d3b2b4d115004020202010e0c000450294d1242040e0e0e0c00022936294d1335040e0e0c0002030e294d1429040e0e0c00022964020d2a38294d1519040e0e0c0002642903043b5002155799293c220e22144d1600044d10fc030e0c0006513b2d4d17f1030e0e0c000366028f0402004d18e203220c3b3b3b2e4d19d8030e0c00075029644d1acd030e0e0c00023c28403b4d1bc0030e0c00043c28403b4d1bb4030e0c0004312c2c2c4d1ca8030e0c000557a9332a22144d1d9a030e0e0e0c00045056bc57c9220c2b2b22173b4d1e84030e0c000650220c2d6922110e0e0c000250343b2e4d116c030e0c0004502c4d1f62030e0e0e0c000227072d3b2b4d1153030c00045029270706dc2b354d2044034d0140030e0c0003033c2b362c38293c4d2130030e0c000357394d2226035759316a2b4d231d032c220f2d4d2415030e0e0c00062e3b2b4d1109030e0e0c00045029270606cf2b353c4d01f7020c000307dd2b362c372a354d00e8024d01e4020e0c000303902a362b37564a292306566a29230c57894d25ca022211220d2c6b302e2d4d0bbd024d26b9024d06b5022f4d0db0020e0c0008294d0ea7020c00020318303b2b4d119b020c0004503b2a4d1791020e0e0c00030238294d2785020e0e0c000203033b022457b9324d2874024d297002020264020e0c00032a3c221122172d4d105d020e0e0c0006654d2a530264270902175729293c30220d4d2b43024d103f020c00064d2a38026533333333332f020225020e0e4f2c270281000757494d2d1e025769326a2c2c2c02020f0022102d4d240c02220d0e7b070e00062b35280d4d01fc010e0c0003031a2b363b2a0e0e0e4f2eeb01200002644d2fe3012d0e0e7d0900022b3528084d01d4010e0c000303442b362c372d383b2a0e0e0e4f30bf014000024d31b801220d3257896b2a2a4d32ac010e0c000329304d33a2010e0e0e0c00032f3b2b4d1195010e0e0c00045029270806ce2b3528094d0182010e0e0e0c0003035e2b363b2a0e0e0e4f346f01200002293b690402004d3562014d365e010e0e0e0c00024d3754010e0c000203193c28404d3547014d1b43010c00042a4d383b01452a46510208294d393001080200292b4d3a27012b6a4d3b2101327d0e00022b354d3c16014d0112010e0e0e0c0003035b2b362c3732323232322e0e4f2cfb007100074d3df40034575931567a680557492d2b2b220f4d3ee1000e0e0c000557694d3fd6005789346a4d40ce002a22112d6b2f324d41c3002c4d42be000202b2000e0e0e0c000532270a02a72b354d43a9004d01a5000e0e0c0003034b2b362c3732323c32322f0e4f2c8f0071000733333333332f0e0e0e4f2c7f0081000757494d4476005769326a4d456e002a220f2d6b2d2d4d4163002c4d425e000e0e0e0c00052e2708024b2b35280e4d014b000c000303064d46420002382b354d473a004d0136000e0e0e0c000303220402004d1827001b0f273b3b3b2e4d191c000e0c00075029644d1a11002c7d0800024d2a08001f060e0e0e0e0e0e|@3070,-8,I229,@2083,@7295,@960,I218,@1581,I48,I24,I105,@3071,@2992,@2682,@2374,@2776,@3072,@2986,I255,@3005,@2680,@2683,@2046,@3073,@3001,@205,@1348,@1326,I11,@3074,@1395,@3077,@2667,-10,@3003,@3082,@535,@3032,@3083,@2682,@3084,@3087,@344,@633,@3088,@3068,@3089,@3090,@1416,@3091,@3093,@1457,@1467,@3095,@622,@1482,@1485,-1,@3101,@621,@1489,-3,@3102,@2848,@3105,@3106,@2557,@2554,-9,@3107,@3069,@603,-16| 3069:C4,40|00802b352c362d375639564856574d0016002f4d01110030303030304d02080022100e7b0a090009|@3038,@3037,@1197,@2576| 3070:S53|50415253455f5452454528292e706173733228362961737369676e56616c75657328362970726f636573735061747465726e283629 3071:C2,24|00805609561856272b3c2c2c324d000700330e7b07060006|@2987,@2986| 3072:S48|4964656e746966696572206265666f72652060617327206d757374206e6f74206265206120636f6e7374727563746f72 3073:S41|436f6e7374727563746f72206d757374206265206170706c69656420746f20736f6d657468696e672e 3074:O1|@3075 3075:C2,24|00833c2d2d6a2f4d000d002b316b29651f040e0e0e0e0e0e|@3076,-1| 3076:S27|5354525543545f56414c5328292e6d616b654c6f63616c56283429 3077:O1|@3078 3078:C14,192|00842d2309294d00b6004d01b2000e0e0e0c00036403033b02a32f4d02a1004d039d000e0e0c000303033c02622f4d048e004d038a000e0e0e0c000303033c024e2f4d057a004d0376000e0e0e0c000303033c023a2f4d0666004d0362000e0e0e0c000303033c02262f4d0752004d034e000e0e0e0c000303033c02122b030e2f4d083b004d0337000c000302013b032b4d092b00304d0a26000e0e0e0c0003294d0b1b004d0a17000c00032f3c32312d4d0c0b00320e7b070900063b1f050e|@3080,@7295,@960,@209,I24,@384,@681,@632,@2845,@1793,@3081,@344,@3079,@2986| 3079:S12|2220697320696c6c6567616c 3080:S39|50415253455f5452454528292e7061737332283629636865636b466f724275696c74496e283529 3081:S25|526562696e64696e67206f722073706563696679696e672022 3082:C6,64|008056085617292309294d0032004d012e000e0e0e0c00032f384d0222002a0e0e0c0002512f354d0315002a0e0c0002512c2a314d040800320e0e7b05070004|@3031,@7299,@960,@2245,@329,@2139| 3083:C2,24|00805609561856272b3c2c2c324d000700330e7b07060006|@2987,@2986| 3084:O1|@3085 3085:C3,24|00802b354d0010002a4d010b000c000303033c02013b6442|@3086,@1582,I24| 3086:S33|5354525543545f56414c5328292e6973556e646566696e656456616c7565283129 3087:S21|206973206e6f74206120636f6e7374727563746f72 3088:S46|436f6e7374727563746f7220696e2061207061747465726e20776173206e6f7420616e206964656e746966696572 3089:C6,64|008056085617292309294d0032004d012e000e0e0e0c00032f384d0222002a0e0e0c0002512f354d0315002a0e0c0002512c2a314d040800320e0e7b05070004|@3031,@7299,@960,@2245,@329,@2139| 3090:C4,64|00802b3b4d0038000e0c000303033b02292b352c3656285639564a565b566c292b2d2f31344f011700c200072f4f020f008100022a2a6929270a420e0e0e0e0e|@436,I229,@3068,@3090| 3091:C5,88|00802b3b4d0050000e0c000303033b02412b3529352a362e3656485659566a567b568c292b2d2f31344f012b00e20007040200322b2b4d021e000e0e0e0c00045029310e0e4f030f00c100022a2a6929270e420e0e0e0e0e|@3092,I229,@3068,@1431,@3091| 3092:S65|50415253455f5452454528292e706173733228362961737369676e56616c75657328362970726f636573735061747465726e2836296d61704c6162656c73283129 3093:C2,24|00805609561856272b3c2c2c324d000700330e7b07060006|@3094,@2986| 3094:S64|50415253455f5452454528292e706173733228362961737369676e56616c75657328362970726f636573735061747465726e283629706174547970652d283129 3095:C5,56|00800402004d002f001b0f273b3b3b2e4d0124000e0c00075029644d0219000e0e0c00023b2d0e0e0e4f030b00200002502a65420e0e0e0e|@3097,@205,@1348,@1326,@3096| 3096:C8,112|00802b3b4d0068000e0c000303033b02592b352c3657285739574a575b576c292b2d2f31344f014700c300075684120a000400030057ac57b74d023300120e00040003002b6a4d0326002a2d2f6b2f2f4d041c002c4d0517000c0005220d0e0e0e4f060b00f10002270f420e0e0e0e0e|@3099,I229,@3068,@3100,@3098,@2557,@2554,@3096| 3097:S67|50415253455f5452454528292e706173733228362961737369676e56616c75657328362970726f636573735061747465726e28362970726f636573734c697374283129 3098:C4,40|00802b352c362d375639564856574d0016002f4d01110030303030304d02080022100e7b0a090009|@3038,@3037,@1197,@2576| 3099:S79|50415253455f5452454528292e706173733228362961737369676e56616c75657328362970726f636573735061747465726e28362970726f636573734c6973742831296170706c794c697374283129 3100:C6,64|008056085617292309294d0032004d012e000e0e0e0c00032f384d0222002a0e0e0c0002512f354d0315002a0e0c0002512c2a314d040800320e0e7b05070004|@3031,@7299,@960,@2245,@329,@2139| 3101:O2|0,@622 3102:C6,56|0080560a292308562a29230c5649565856674d0022002a2d2d6b33302f4d0117004d0213004d030f002f4d040a0022110e0e0e7b090b0008|@3104,@3103,@2842,@2838,@1480,@2374| 3103:C2,24|00805609561856272b3c2c2c324d000700330e7b07060006|@2987,@2986| 3104:S55|50415253455f5452454528292e706173733228362961737369676e56616c756573283629707441737369676e5479706573283329283129 3105:C6,64|008056085617292309294d0032004d012e000e0e0e0c00032f384d0222002a0e0e0c0002512f354d0315002a0e0c0002512c2a314d040800320e0e7b05070004|@3031,@7299,@960,@2245,@329,@2139| 3106:C4,40|00802b352c362d375639564856574d0016002f4d01110030303030304d02080022100e7b0a090009|@3038,@3037,@1197,@2576| 3107:C6,64|008056085617292309294d0032004d012e000e0e0e0c00032f384d0222002a0e0e0c0002512f354d0315002a0e0c0002512c2a314d040800320e0e7b05070004|@3031,@7299,@960,@2245,@329,@2139| 3108:C17,496|00822c3b4d00e8010e0c000303162b3b4d00dc010e0c000303033b02054d01cf011006dd2c35293b4d00c4010e0c000303112d363c2a2f0e0e4f02b3014100046406dd29362a372f362f4d03a2010e0e0e0c00024d0498010e0c000207cf2f3530363303161207000100f4ff577a2923064d057b012a2d6a660206576a29230664577a292308579a293957ba29230c57da293a57fa29230a1212000100020029361214000100030029361216000200040029230b4d0638012a2d306b121900020004002937121b00020004002938121d00020004002935121f0002000400292309122100020004002936122300020004002923072f2c220c34221d221a22230202ec00302223220d221d22172223680d1226000100fdff122700020002000202cc00222522262d22272d2f0202b9000e0e160700ba002e000300000712290003000300122a00020006004d08a200122c00030003002b6a4d0995002a222a2e6b22272e4d0a89002c4d0b84000e0c000522310336222b29354d0c74004d0070000e0c0003030c2937292502501e163b64020e28062a354d0056000e0e0e0c0003644d044b000c000202013b0323122e0003000300122f00020006002a3c2b222f4d0d2c004d0e28000e0c0006260302023b502231222a22290e1602001200310001000004272902054d0f040010666444|@3110,I229,@3109,@3108,I105,I218,@3111,@3112,@2974,@3113,@3114,@2557,@2554,-3,@3115,@2986,@3109| 3109:O3|@7141,@228,@3116 3110:S69|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c4465636c61726174696f6e283429636865636b5479706573283329 3111:C2,40|00802b56180c0002293b4d001a000e0e0e0c0003030a2c56272d0e0e7d0400022964420e0e0e0e0e|@1316,I229| 3112:C2,64|00802b56190c0002293b4d0032000e0e0e0c000303222c56280c0002293b4d001e000e0e0e0c0003030a2d56372e0e0e7d050002296402012964420e0e0e0e0e|@1316,I229| 3113:C6,64|008056085617292309294d0032004d012e000e0e0e0c00032f384d0222002a0e0e0c0002512f354d0315002a0e0c0002512c2a314d040800320e0e7b05070004|@3031,@7299,@960,@2245,@329,@2139| 3114:C4,40|00802b352c362d375639564856574d0016002f4d01110030303030304d02080022100e7b0a090009|@3038,@3037,@1197,@2576| 3115:S51|526563757273697665206465636c61726174696f6e206973206e6f74206f662074686520666f726d2060666e206d6174636827 3116:S35|636865636b54797065733a206261646c792d666f726d65642070617273652d74726565 3117:C11,176|00812c3b4d00a8000e0c000303033b029a2c35293b4d0097000c000303112d36292e0e0e0e4f01870031000364027b29362a372f362f4d0276000e0e0e0c00024d036c000e0c0002035a2f35303656632e4f045b007100025889579c4d05500058b92b6a2f2e2e2e220c2e4d0641000e0e0c000757c857dc58e94d073200220d2c2c6b342d2b4d0826000e0e0e0c0004220d220c0e1601001600140001000003270d02054d090800106664430e0e0e0e|@3119,I229,@3117,I105,I218,@3120,@3125,@3126,@3141,@3142,@3118| 3118:O3|@7141,@228,@3155 3119:S67|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c4465636c61726174696f6e283429616c6c6f7747656e283229 3120:C11,584|00802b3528064d003e020e0e0e0c000303033c06d22b354d012d024d0029020e0e0c000303033c06d72b3528094d0017020c000303682b36293b4d000a020e0e0e0c000303033c02525819292309294d02f5014d03f1010e0e0c0003654d04e7010c00020334293c2a3b4d00da010e0e0e0c0003030329021e2a352b362b030a2a4f05c30151000202013b2a2a2505250526031e2b3b666502013b6406ce2b354d06a4014d00a0010e0c0003030d2b37294f0593011100026406cd2b354d0787014d0083010c000303033c06d42b35280e4d0073010c000303033c06dc2b35280d4d00630102025c010c0003035c2b365819292309294d024e014d034a01020243010e0e0e0c0003654d043b010c00020334293c2a3b4d002e010e0e0e0c0003030329021e2a352b362b030a2a4f05170151000202013b2a2a2505250526031e2b3b666502013b6406d32b3528084d00f6000e0e0e0c0003036b2b385819292309294d02e2004d03de000202d7000e0e0e0c0003654d04cf000c00020343293c2a3b4d00c2000202bb000e0e0e0c000303032902292a352b362a362c0310290202a2000e0e4f059f0061000202013b2b2a2506250626041e378a003b27046502013b6402802b353c4d007c000e0c0003033f2b362c375829292309294d0268004d0364000e0c0003654d045b000c0002031b2a4d0851000e0e0c0002030c290e0e4f05430021000202013b02013b6502342b354d0931004d002d00020226000e0e0c0003031e5809292309294d0218004d0314000e0c0003654d040b002c0e0e0e8000023b420e0e|@3122,I229,-8,@7295,@960,I218,@3120,-3,-10,@3121,-13| 3121:O1|@3123 3122:S71|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c4465636c61726174696f6e2834296e6f6e457870616e73697665283129 3123:C10,112|00802b354d0068004d0164000e0c000303362b362c37293b4d0254000e0c0003294d034b000c0002031a2b4d0441004d053d000e0e0c00034d0634002f0e0e0e7d0600023b6602212b354d0722004d011e000e0e0e0c0003030e2b37294d080f002d0e0e7d0400023b420e0e0e0e0e0e|@3124,-8,I229,I253,@2776,@2845,I24,I218,-3,@3121| 3124:S78|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c4465636c61726174696f6e28342969734e6f6e526566436f6e7374727563746f72283129 3125:C6,64|008056085617292309294d0032004d012e000e0e0e0c00032f384d0222002a0e0e0c0002512f354d0315002a0e0c0002512c2a314d040800320e0e7b05070004|@3031,@7299,@960,@2245,@329,@2139| 3126:O1|@3127 3127:C5,64|00854d003a002c32303068054d0130002a30333368054d0226002a694d0320000e0c0002332a0e0e0e0c0002643c2a0e0e0c0002513b651f060e0e0e0e0e0e0e|@3129,@3130,@3134,@3128,@2602| 3128:C2,16|00804d000a002c56276a420e0e0e0e0e|@3139,@3138| 3129:S34|545950455f5452454528292e616c6c6f7747656e6572616c69736174696f6e283629 3130:C3,64|00815609561a4d00360056372f56583256796806292b3c2e352f36303731383239333a342306220c2307220d2308220e23094d010a0022120e0e0e7b0f07000e|@3132,@3131,@1111| 3131:C9,144|00803b4d0089000e0e0c0002561b292309294d017a004d0276000e0e0e0c00032f23064d0369002a0e0c0002512f38565a2a0e0e0e0c0002512f354d0451002a0e0c0002515649292b32303c4d0540000e0c00065030354d0635002a0e0c000251303856682a0e0e0e0c00025130354d071d002a0e0c0002513056670e0c00025030373b2a320e0e7d0900020e0e0e0e|@3133,@2018,@7299,@960,@347,@329,@2033,@329,@329| 3132:S46|545950455f5452454528292e616c6c6f7747656e6572616c69736174696f6e283629676976654572726f72283229 3133:S49|545950455f5452454528292e616c6c6f7747656e6572616c69736174696f6e283629676976654572726f72283229283129 3134:C26,512|00812b4d00f9010e0e0c000207dc2b4d01ed010e0e0c000229352a364d02e0010e0c000356292a2a4d03d4010e0c000365032329352a364d02c5010e0e0c0003291b0f274d04b8010e0c0003644d05af010c000202013b07cb29352a364d069f010c0003294d0797010c0002030e294d088d010e0e0c00023c6402013b5638292309294d0979014d0a75010e0e0c0003566a4d056a010e0e0e0c000203202e352f364d0b5a010e0e0e0c000303033c020b294d054a010e0e0e0c000202013b03033c02012c29030f5679293c4d0c30010e0c00036402031b0f275688292309294d091c014d0a180102020e010e0c0003333534364d0d08010e0c0003030a2d0304220e02013b02013b03114d0ef1004d0fed0056d70c0003503b02422c3c4d10de000202d0000e0e0e0c0003031a220e031329030d314d05c6000e0e0e0c000202013b02013b02013b03114d11b1004d12ad0056d70c0003503b0202220e3435220c364d1399000e0e0c00032f030f220c35220d364d0d87000c000302013b220d35220e364d0b77000c00030402004d146d00322e2e2e2e4d1564000e0c00075029644d1659000e0e0c0002294d004f000c0002030e294d0145000e0e0c0002296402054d173800102210352211364d062d000e0e0c00032a2a4d1822000e0e0e0c00035022112c4d1814000e0c0003502f271102012d6402012c430e0e0e0e|@3136,@1474,@1476,@2059,I231,I113,I218,@2043,@2069,@2041,@7295,@960,@2062,I107,@2589,@2813,@3137,I229,@2813,@3135,@2027,@205,@1348,@1326,@958,@1469| 3135:S40|696e636c756465732061206672656520696d70657261746976652074797065207661726961626c65 3136:S44|545950455f5452454528292e616c6c6f7747656e6572616c69736174696f6e28362967656e6572616c283229 3137:S29|696e636c75646573206120667265652074797065207661726961626c65 3138:C1,16|00802b561756282d7e0300030e0e0e0e|@3140| 3139:S44|545950455f5452454528292e616c6c6f7747656e6572616c69736174696f6e28362967656e6572616c283129 3140:S47|545950455f5452454528292e616c6c6f7747656e6572616c69736174696f6e28362967656e6572616c283129283129 3141:C2,24|00805609561856272b3c2c2c324d000700330e7b07060006|@2987,@2986| 3142:O1|@3143 3143:C4,48|00824d002a002c2e6a4d0123002a694d021d000e0e0c00022f2a0e0e0e0c0002643c2a0e0e0c0002513b64440e0e0e0e|@3145,@3146,@3144,@2602| 3144:C2,16|00804d000a002c56276a420e0e0e0e0e|@3153,@3152| 3145:S37|545950455f5452454528292e636865636b466f724c6f63616c446174617479706573283329 3146:C9,128|00812b4d0079000e0e0c0002036e2b4d016d000e0e0c000229372e0322294d025e000e0e0e0c00024d0354000e0c000256382a2a4d0448000e0c00036502013b0336294d0239000e0e0c00024d0530000e0c00024d0628002a4d0723000c00032928294d0719000e0e0c00036556370e0e0c0002503b02013c6502013c430e0e|@3148,@2073,@2075,@2077,@3149,I233,@2080,@3147,@344| 3147:S30|5479706520636f6e7461696e73206c6f63616c2064617461747970652028 3148:S50|545950455f5452454528292e636865636b466f724c6f63616c446174617479706573283329636865636b5479706573283229 3149:O1|@3150 3150:C1,8|00802b372964420e|@3151| 3151:S27|5354525543545f56414c5328292e74634c65744465707468283129 3152:C1,16|00802b561756282d7e0300030e0e0e0e|@3154| 3153:S50|545950455f5452454528292e636865636b466f724c6f63616c446174617479706573283329636865636b5479706573283129 3154:S53|545950455f5452454528292e636865636b466f724c6f63616c446174617479706573283329636865636b5479706573283129283129 3155:S33|616c6c6f7747656e3a206261646c792d666f726d65642070617273652d74726565 3156:C11,208|00825607293c4d00c6000e0e0e0c00032e354d01ba002b692a0c00026430354d02ad002c566a6a2a0e0c0002644d039f005659566c57796b0403002a2a4d048f000c00035029352a362b373b220c293b4d057c000e0c000303033b021829352a362a0e0e0e4f066700d0000250292503511e233b65643b220e293b4d0551000e0e0c000303033b021829352a362a0e0e0e4f073b00f0000250292503511e243b65644d082a0056ea56f912110002000300121200010006001213000100020022116807300e0c00024d090400270e440e|@3158,I106,@3159,@3161,@3163,@2253,I229,@3165,@3175,@3157,@633| 3157:C6,88|00802b36294d004f000c0002562c56395648565a4d01400056792b6a2e2e3c2f2f2e4d0232000e0e0e0c0007568b569a56a956b84d0320002a2d2d6b342e2b4d0415000e0e0c000456e7293722122a22130e0e0e7d130002|@3160,@2667,@3200,@3126,@3199,@3142| 3158:S56|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737346756e4465636c61726174696f6e283329 3159:C2,24|00802b3656172a2a4d000c002f0e0e0e7e0500030e0e0e0e|@3160,@3052| 3160:S61|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737346756e4465636c61726174696f6e283329552d283129 3161:C5,72|00802b352c36562829230b2c2a0c000264294d0032000e0e0e0c00024d0128000e0c0002030e2935292d4d021a00320e7e08000356472c2a4d030c00320e0e0e7e0800030e0e0e0e|@3162,I105,I218,@3057,@3052| 3162:S69|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737346756e4465636c61726174696f6e2833293c7061747465726e3e2d283129 3163:C4,40|00805609561856272e4d001b004d0117000c00032c3c2d2d2d4d020b00340e7b070700060e0e0e0e|@3164,@2235,@344,@2986| 3164:S64|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737346756e4465636c61726174696f6e2833296d7367466e283129 3165:C29,528|00802b36294d0007020c00024d0100020e0c000207db293529352a372f3730382c29354d02e9014d03e5010e0e0c0003030c2937292502501e173b64023229353c4d03cb010c0003030c2936292502501e2f3b64021a29354d04b4014d03b0010e0c000303062936296402044d05a001644d069b012e2a0e0e0c000256930402004d078b012b3b3b3b2e4d0882010e0e0e0c00075029644d0975010e0e0c00023c28403b4d0a68010e0c00043c28403b4d0a5c010e0c00042f2c2c2c4d0b50010e0c0005313b304d0c45010e0e0c0004502e3b4d0339010e0e0c0003031d58e957fc2a3c2b220f4d0d25014d0e2101020216010e0e0c00066502013b314d050f014d0f0b010c00034d0104010e0c000207d658f9322a220e4d10f4000e0c00041212000200060012130003000300220c2b2b22123b4d11d7000c000612150002000400292306220f2a0c000264294d00be000e0e0e0c00024d01b4000e0c000203062935296402044d12a40012180003000300292309294d1395004d1491000e0e0c000365030b294d1584000e0c000202013b0347121800030003001219000200060022124d1667004d1763000c00034d185c002a4d1957000c0003294d1a4f004d194b000c00032d3c2e221b2d4d0e3e000e0e0e0c0006270502013b22133b220c4d0c2a0002021a000e0e0e0c00045022113469121a000100f7ff221b0e0e7d1b00023b270e02054d1b0300106442|@3167,I105,I218,-3,I229,-8,I48,@3168,@205,@1348,@1326,I11,@3074,I255,@3171,@2986,I24,@1395,@3077,@1581,@7295,@960,@2776,@1041,@1057,@3172,@344,@3173,@3166| 3166:O3|@7141,@228,@3174 3167:S75|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737346756e4465636c61726174696f6e28332966696e644e616d65416e645061747473283129 3168:O1|@3169 3169:C5,72|00802b354d0040004d013c000e0c0003030e2b37294d022f002d0e0e7d0400022b353c4d0121000e0e0c000303162b36294d0213000c0002293c4d030a002f0e7e0500033b420e0e|@3170,-3,I229,@3168,I106| 3170:S67|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737346756e4465636c61726174696f6e2833296765744172697479283129 3171:S46|436c617573616c2066756e6374696f6e20646f6573206e6f74206861766520616e7920706172616d65746572732e 3172:S9|5661726961626c6520 3173:S34|20616c7265616479206465636c61726564206173206120636f6e7374727563746f72 3174:S41|66696e644e616d65416e6450617474733a206261646c792d666f726d65642070617273652d74726565 3175:C4,72|00802b352c362d372e382f392b3b4d0036000e0e0e0c00033b2e293b4d0128000e0c000303033b021829352a362a0e0e0e4f021300a0000250292503511e233b652708420e0e0e0e|@3177,I253,I229,@3176| 3176:C17,472|00802b352c362d374d00cc012a2d120700040003006b0403002a2a4d01b9010e0e0c00035029362a375773293c4d02a7010c00033b56a1293b4d039b010c00030402002a220d2b0e0e4f048b01f000045029352a3656f42a3b4d057b010c000303064d06720102412a36293b4d0568010e0c000303062b352964022c2b3b2a3b4d0554010e0c000303032902132a352b362a2c692a2a2505250526031e1e3b66654d0733010c0002642a3b2b4d0828010e0c0004501212000200f6ff121300030004002923064d090e012a2d22106b12160003000400292308121800030004002939121a000300040029230c121c0003000400293a121e000300040029230a1220000200020029361222000200030029361224000300040029230b4d0ab9002a2d306b122700030004002937122900030004002938122b00030004002935122d0003000400292309122f00030004002936123100030004002923072f2c220c34221d221a2223302223220d221d22172223680d12340003000200223222332c22342d22300e160b004e003b00040000071236000100faff293b2c4d083a000e0e0e0c000450123700040003004d0c28001239000400030022386a4d0d1a002a22372d6b222b2e4d0e0e002c4d0f0900223f0e0e7b063c0005|@3179,@3180,@2253,I106,I253,@3183,I229,@633,@1416,I255,@3196,@3197,@2974,@3198,@3178,@2557,@2554| 3177:S69|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737346756e4465636c61726174696f6e28332970726f6365737346756e283129 3178:C4,40|00802b352c362d375639564856574d0016002f4d01110030303030304d02080022100e7b0a090009|@3038,@3037,@1197,@2576| 3179:S85|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737346756e4465636c61726174696f6e28332970726f6365737346756e28312970726f63657373436c61757365283129 3180:C4,40|00805609561856272e4d001b004d0117000c00032c3c2d2d2d4d020b00340e7b070700060e0e0e0e|@3182,@3181,@344,@2986| 3181:S39|2068617320616c7265616479206265656e20626f756e6420696e207468697320636c617573652e 3182:S94|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737346756e4465636c61726174696f6e28332970726f6365737346756e28312970726f63657373436c617573652831296d657373466e283129 3183:C29,568|00822c354d0030024d012c020e0c0003037d2c362d37040200302b2b0e4f0217025100045029352a3656524d0309022a12090005000300220c120b0004000400680512080005000300302b2b2e4d04e7010c0005120a000500030056a256b44d05d501120e00050003002b6a4d06c8012a2d2f6b33220e4d07bd012c4d08b8010e0c00052211220c453446270f06cd2c353c4d01a2010e0e0e0c000303732c362d372f3c4d0990010e0c00030402002a2d2b0e0e0e4f027f016100045029352a361207000100f9ff1208000100f6ff5682293b3b2d2f220c0e4f0a5b01e40007120b000500030056b256c44d0b4901120f00050003002b6a322e2e2e2d4d0c37010c00062e336922122b452a46271006d12c354d0d21014d011d010e0e0c000303cf2c362d371203000200f9ff4d0e07010c00022b2a4d0ffe000e0e0e0c000303043b50024412040005000300564456524d10e3002f4d11de000202d4000e0e0e0c0003294d12cf004d11cb000c0003292f4d11c2000e0e0e0c00032e3c2f2f2d4d13b3000c00062607303b4d01a8000e0c000303043b50022812040005000300564456524d148f004d158b004d1187000c00032c3c2d2d2d4d137b000c000626051204000200f9ff2b3b2b4d1668000e0c0004501205000200f9ff4d17580002024e000e0c0002302a453b46270502412c354d1841004d013d000e0e0c0003030b2b4d1931000802003b02251201000500030056122a3c302c4d1a1a004d1316000e0e0e0c00062e4d1b0b000802003b66440e0e0e0e0e|@3185,-3,I229,@3183,@3186,@2848,@3188,@3189,@2557,@2554,I107,@3068,@3190,@3032,-8,@2156,I24,@3191,@344,@3192,@2986,@3193,@3194,I255,@2667,-5,@3184,@3195,@3184| 3184:O2|@633,0 3185:S98|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737346756e4465636c61726174696f6e28332970726f6365737346756e28312970726f63657373436c61757365283129646f5061747465726e73283329 3186:C6,56|0080560a292308562a29230c5649565856674d0022002a2d2d6b33302f4d0117004d0213004d030f002f4d040a0022110e0e0e7b090b0008|@3104,@3187,@2842,@2838,@1480,@2374| 3187:C2,24|00805609561856272b3c2c2c324d000700330e7b07060006|@2987,@2986| 3188:C6,64|008056085617292309294d0032004d012e000e0e0e0c00032f384d0222002a0e0e0c0002512f354d0315002a0e0c0002512c2a314d040800320e0e7b05070004|@3031,@7299,@960,@2245,@329,@2139| 3189:C4,40|00802b352c362d375639564856574d0016002f4d01110030303030304d02080022100e7b0a090009|@3038,@3037,@1197,@2576| 3190:C6,64|008056085617292309294d0032004d012e000e0e0e0c00032f384d0222002a0e0e0c0002512f354d0315002a0e0c0002512c2a314d040800320e0e7b05070004|@3031,@7299,@960,@2245,@329,@2139| 3191:S39|496e20636c617573616c2066756e6374696f6e206f6e6520636c6175736520646566696e657320 3192:S21|20616e6420616e6f7468657220646566696e657320 3193:S39|436c617573616c2066756e6374696f6e20636f6e7461696e7320636c6175736573207769746820 3194:S29|646966666572656e74206e756d62657273206f66207061747465726e73 3195:S43|5374617274206f6620636c617573616c2066756e6374696f6e206973206e6f742061207661726961626c65 3196:C2,64|00802b56190c0002293b4d0032000e0e0e0c000303222c56280c0002293b4d001e000e0e0e0c0003030a2d56372e0e0e7d050002296402012964420e0e0e0e0e|@1316,I229| 3197:C2,64|00802b56190c0002293b4d0032000e0e0e0c000303222c56280c0002293b4d001e000e0e0e0c0003030a2d56372e0e0e7d050002296402012964420e0e0e0e0e|@1316,I229| 3198:C6,64|008056085617292309294d0032004d012e000e0e0e0c00032f384d0222002a0e0e0c0002512f354d0315002a0e0c0002512c2a314d040800320e0e7b05070004|@3031,@7299,@960,@2245,@329,@2139| 3199:C2,24|00805609561856272b3c2c2c324d000700330e7b07060006|@2987,@2986| 3200:C6,64|008056085617292309294d0032004d012e000e0e0e0c00032f384d0222002a0e0e0c0002512f354d0315002a0e0c0002512c2a314d040800320e0e7b05070004|@3031,@7299,@960,@2245,@329,@2139| 3201:C6,72|00802b3b4d0040000e0c000303033b02352b352c362a35573a29230c5658586957794d0122002a2d2d6b4d021a002e312c4d0313000c0005314f040b00a100022a2a6929270c420e|@436,I229,@3202,@2277,@2278,@3201| 3202:C2,24|00805609561856272b3c2c2c324d000700330e7b07060006|@2987,@2986| 3203:C9,104|00802b4d0061000e0e0c000203033b024f2b3b4d0151000e0e0c00030316404d0245000e0e0c0002294d033b003b3b6b296502042b3729644d042c002d573a56426b2a4d0521000e0e0c00024d0618002b692a2a3b4d070f00320e7b05070004420e0e0e0e0e0e0e|@3205,@2365,I229,@1893,I48,@3206,@2412,@3204,@2410| 3204:C1,16|00802b352c362d3756372e7b05030004|@3219| 3205:S62|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c756573283229636f7079456e7472696573283129 3206:C14,240|00822c4d00e9000e0e0c0002034e2c4d01dd000e0e0c0002561829382b4d02cf000c00023b2a4d03c6000e0e0e0c00036403032b021b2b4d04b5000e0e0c000256472968012e2c2b4d05a4000e0c000466312a69642a2f0e7d0800022c4d068f000c000203562c4d0785000e0e0c000256172a3729353b4d0375000e0e0c0003031c29362c352d362e382c2f694d085f000c00022c2c2b2d6b29270602012b564929332c4d0948000e0c00045056582937342d692a330e0e7d0c00022c4d0a2f000c000203262c4d0b25000e0e0c000256172a2a4d0c18000e0c00035638292309322c692a310e0e7d0a00023b440e0e|@3208,@2348,@2347,@2501,I229,@2080,@3207,@2354,@2353,@2996,@2304,@2336,@2335,@2359| 3207:O1|@3209 3208:S74|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c756573283229636f7079456e7472696573283129636f7079456e747279283329 3209:C10,96|00822d4d0059000e0e0c00022e4d014f000c00022f4d0247000c0002304d033f000c0002302c4d0436002f2e2e4d052f000c00073b334d0626000e0e0e0c00023b2a0e0e0e4f0717008000022d2a4d080e000e0e0e0c0003502d2709440e0e0e|@3211,@1482,@2435,@2429,@3149,@205,@2567,@2501,@3210,@2763| 3210:C4,48|00802b3b4d0028000e0c000303033b021d2b352c362a0e0e0e4f0113002100022a4f020b003100022a2a69292705420e|@436,I229,@3212,@3210| 3211:S29|56414c55455f4f505328292e6d6b53656c656374656454797065283329 3212:C8,104|00802b352c362d372e384d005a00565056646a2a4d0150002b4d024b000c000456672d353b4d033f000c000303292d362a4d0433000c00024d052c000e0c000203112a352a2a694d061d000e0e0c00026402012e6402012d30302b2e6b292709420e0e0e0e0e0e0e|@3214,@3215,@3213,@2467,I229,I105,I218,@2996| 3213:O1|@3217 3214:S48|56414c55455f4f505328292e6d6b53656c656374656454797065283329636f707941436f6e7374727563746f72283129 3215:C3,40|00802b4d0021000e0e0c000256182a2a4d0114000e0c0003650304560702012b420e0e0e0e0e0e0e|@3216,@1482,@2453| 3216:S63|56414c55455f4f505328292e6d6b53656c656374656454797065283329636f707941436f6e7374727563746f72283129636f707954797065436f6e73283129 3217:C1,8|00802b420e0e0e0e|@3218| 3218:S61|56414c55455f4f505328292e6d6b53656c656374656454797065283329636f707941436f6e7374727563746f72283129636f7079547970283129283129 3219:S74|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c756573283229636f7079456e7472696573283129636f7079456e747279283129 3220:O1|@3221 3221:C2,8|00804d000200420e|@3223,@3222| 3222:O1|@3224 3223:S51|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c756573283229283129 3224:C2,16|00804d000a002c69420e0e0e0e0e0e0e|@3226,@3225| 3225:C1,16|00805607292d692965420e0e0e0e0e0e|@3227| 3226:S54|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c756573283229283129283129 3227:S57|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c756573283229283129283129283129 3228:O1|@3229 3229:C3,24|00812b4d0011000e0e0c00024d0108002e2b6a64430e0e0e|@3231,@2514,@3230| 3230:C2,88|008056082c2a293729644d004a000e0e0e0c000203032a023929363b2a0c000229352a362d353b2a0e0c00022c56a70e0e0c00022c2a0e0e0e0c000264312a0e0e0c000264292b2509250926071e473b270766420e0e0e0e|@3232,I218| 3231:S21|486173685461626c652e68617368466f6c64283229 3232:S32|486173685461626c652e68617368466f6c64283229666f6c6446283129283129 3233:C4,40|00805609561856272e4d001b004d0117000c00032c3c2d2d2d4d020b00340e7b070700060e0e0e0e|@3234,@2235,@344,@2986| 3234:S57|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c7565732832296d657373466e283129 3235:C6,56|0080560a292308562a29230c5649565856674d0022002a2d2d6b33302f4d0117004d0213004d030f002f4d040a0022110e0e0e7b090b0008|@3104,@3236,@2842,@2838,@1480,@2374| 3236:C2,24|00805609561856272b3c2c2c324d000700330e7b07060006|@2987,@2986| 3237:C4,96|00802b352c362d372e385847292e4d004e000e0e0e0c00033b587b0e0e0c00022a2d302c313b4d0136000e0e0e0c000758895799322b2b4d0225000e0e0c000450322c6956b10e0e0e0c00025057aa2938342e692a220f0e7d0f00020e0e0e0e|@3238,@344,@2567,@1395| 3238:S62|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c75657328322970726f6365737354797065283129 3239:C24,696|00834d00b2025619562c57396b0403002a2a4d01a2020e0e0e0c00035029363b3b310e0e0e4f028f0250000233293b4d0385020e0e0c000303033b023629352a362a3656ac56b94d046d022a57e92d12110001000400680557d92d2b2b2e4d0556020e0e0e0c0005502e250826071e413b2707643b220c293b4d033b020c000303033b021829352a362a0e0e0e4f062702b0000250292503511e223b65644d07160256a956bc57c96b0403002a2a4d0106020e0e0e0c00035029352a362b373b2212332a4d08f0010e0c00024d09e8010e0c0002033d2a352b362b4d08d9010e0e0c00024d09d0010e0c000203212b352c362c2b0e160a00be01180000000003502b2a2506250626041e463b6502013b6502013b65334d0b9e013b4d0c99010e0e0c000422134d098e010e0e0e0c00020310121200010004002937642f0c000206d90403003b2a4d0d6d010e0e0c00035029362a374d0e5f01121600010004002c6a121600010004002923064d0f48012a342f6b12190001000400292308121b00010004002939121d000100040029230c121f0001000400293a1221000100040029230a1223000100040029230b12250001000400293812270001000400293512290001000400292309122b00010004002936122d00010004002923072f2c221b3422162213221c30221c220d22162215221c680d1230000100020022354d10b6002a3b4d03b0000e0c0003030329023c2a3529352a362d360202900012370001000100123800010006002d2a342f220c2f0e0e0e1611007e003f00020000072c2a2509250926071e463b2707652234293b4d0362000e0e0e0c000303033b024a29352a362a36293b4d124b000c00032c392a3b4d1340000e0c0003502a4d1436000e0e0e0c00022a3b2b4d1529000e0e0c0004502b3b4d161d000e0e0c0003502d250726061e563b270627214d10070027121f040e0e0e|@3241,@3242,@2253,@3244,I229,@3247,@2848,@3249,@3251,I105,I218,@3253,@4673,@4676,@1302,@4701,@3240,@633,@2974,I253,@2899,@2501,I255,@2763| 3240:C2,64|00802b56190c0002293b4d0032000e0e0e0c000303222c56280c0002293b4d001e000e0e0e0c0003030a2d56372e0e0e7d050002296402012964420e0e0e0e0e|@1316,I229| 3241:S49|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737341627344617461283429 3242:C4,40|00805609561856272e4d001b004d0117000c00032c3c2d2d2d4d020b00340e7b070700060e0e0e0e|@3243,@2235,@344,@2986| 3243:S58|50415253455f5452454528292e706173733228362961737369676e56616c756573283629617373416273446174612834296d657373466e283129 3244:C4,48|00802b3b4d0028000e0c000303033b021d2b352c362a0e0e0e4f0113002100022a4f020b003100022a2a69292705420e|@436,I229,@3245,@3244| 3245:C6,112|00802b352c362d385837292d4d0060000e0c00033b586b0e0e0c000257682b2e4d014c002d3b2e4d0245000e0e0c00072f3b2b4d0339000e0e0c00045058895799322b2b4d0428000e0c000450322c6956b20e0e0e0c00025057aa2938342e692a0c0002512c270b420e0e0e0e0e0e0e|@3246,@344,@205,@2567,I255,@1395| 3246:S61|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737341627344617461283429656e74657254636f6e283129 3247:C6,56|0080560a292308562a29230c5649565856674d0022002a2d2d6b33302f4d0117004d0213004d030f002f4d040a0022110e0e0e7b090b0008|@3104,@3248,@2842,@2838,@1480,@2374| 3248:C2,24|00805609561856272b3c2c2c324d000700330e7b07060006|@2987,@2986| 3249:C4,88|00802b352c362d385837292d4d0048000e0c00033b586b0e0e0c00022a2d2f2c3b3b4d0132000e0e0e0c000758795789312b2b4d0221000e0e0c000450312c6956a20e0e0e0c000250579a2938332e692a220e0e7d0e0002|@3250,@344,@2567,@1395| 3250:S65|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737341627344617461283429656e7465725769746854797065283129 3251:C4,40|00805609561856272e4d001b004d0117000c00032c3c2d2d2d4d020b00340e7b070700060e0e0e0e|@3243,@3252,@344,@2986| 3252:S52|2068617320616c7265616479206265656e2075736564206173206120636f6e7374727563746f7220696e20746869732074797065 3253:C12,160|00812c352d372e383b2b293b4d0090000e0c000303032a021629362b3c4d017f000c0003292b25042504511e213b6565040200304d0268000e0c00024d0360000e0c000203193c2840324d0452000e0e0e0c00042a4d054700452a46510206293b45314650292c2f2b6a4d0632000e0e0e0c00024d0728002f2a4d0822000e0e0e0c00033b3b2b0e0e4f091300b00002220e2a4d0a090022100e0e0e7e100003|@3255,I229,I106,@1482,@1485,I11,-1,@1489,@3256,@3264,@3254,@2763| 3254:C7,112|00802b293b4d0067000c000303033b023a29352a362a36584c58594d0151002a120900040003002d58aa6805120800040003002d2b2b2e4d0235000e0e0c0005502e250826071e433b2707642c4d031f000c0002294d0417000c00023b2f2b0e0e4f050b005000032704420e0e0e0e0e|@3271,I229,@3272,@2848,@3274,@3332,@3270| 3255:S67|50415253455f5452454528292e706173733228362961737369676e56616c7565732836296173734162734461746128342967656e56616c7565436f6e73747273283229 3256:O1|@3257 3257:C2,16|00804d000a002c69420e0e0e0e0e0e0e|@3259,@3258| 3258:C2,24|00802b352c365627355637364d0008002f0e0e7b06030005|@3261,@3260| 3259:S73|50415253455f5452454528292e706173733228362961737369676e56616c7565732836296173734162734461746128342967656e56616c7565436f6e737472732832296c6571283129 3260:O1|@3262 3261:S76|50415253455f5452454528292e706173733228362961737369676e56616c7565732836296173734162734461746128342967656e56616c7565436f6e737472732832296c6571283129283129 3262:C2,16|00832c2f4d0008002d0e0e0e7e060003|@3263,I27| 3263:S73|50415253455f5452454528292e706173733228362961737369676e56616c7565732836296173734162734461746128342967656e56616c7565436f6e737472732832296c6571283429 3264:O1|@3265 3265:C5,128|00812c3b4d0078000e0c000303033b026b2c36293b4d0067000c000303082d35293b696402552d35292e0e0e0e0c00020402003b2d2b0e0e0e4f014300600003502a352b3629334d0235000e0e0c00032b344d022a000e0e0e0c0003302a69293b4d001b000c000303032b020c3b2c0e0e4f030b00b0000264270964430e0e0e|@3267,I229,@3268,@3264,@3266| 3266:C3,48|00802b3b4d0028000e0c000303091201000100f5ff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1884,I229,@3266| 3267:S17|4d6973632e717569636b536f7274283229 3268:C4,80|00812c3b4d0048000e0c0003030b2b4d013d000802003b02352c352d362a56320e0c00020402002b2a4f0223005100035029352a362c030b2e2b69322a452b466402092e2a69322c452a46642706430e|@3269,I229,@333,@3268| 3269:S17|4c6973742e706172746974696f6e283329 3270:C5,88|00812c4d0051000e0e0c00024d0148000e0c0002033e2c352d362d4d0039000e0e0c00024d0130000e0c000203222d352e362c2b0e4f021f005200032c2b0e0e0e4f0313006100032a2a6929270502013b6502013b430e0e|@4666,I105,I218,@4665,@3270| 3271:S77|50415253455f5452454528292e706173733228362961737369676e56616c7565732836296173734162734461746128342967656e56616c7565436f6e73747273283229646563436f6e73283129 3272:C6,56|0080560a292308562a29230c5649565856674d0022002a2d2d6b33302f4d0117004d0213004d030f002f4d040a0022110e0e0e7b090b0008|@3104,@3273,@2842,@2838,@1480,@2374| 3273:C2,24|00805609561856272b3c2c2c324d000700330e7b07060006|@2987,@2986| 3274:O1|@3275 3275:C5,88|00802b3b4d0050000e0c000303033b02452b352c360402002b352c3629354d0136004d0032000e0e0e0c000303082b3b452b46500210294d021d000e0e0c00022c2a452c46512b2d4d030c000e0c00022a2a69292708420e|@436,I229,-1,@3276,@3274| 3276:O1|@3277 3277:C25,512|00802b4d00f9010e0e0c000203ad2b4d01ed010e0e0c00022935293c4d02e0010e0c000303912a36294d03d3010c00024d04cc010e0c0002034c2936293b4d02be010e0e0e0c0003030e2a352936294d05ad01327d0900023b2b293b4d02a0010e0c000303032a021629362b3c4d068f010c0003292b25042504511e213b656529680165022e3b2a293b4d0272010e0e0e0c000303032a021629362b3c4d065f010c0003292b25042504511e233b6565296801646402013c6506cc2b4d0740010e0c000203112b4d0835010e0e0c00024d092c016406ca2b4d0a24010e0c000207cf2b4d0b19010e0e0c000229352a37294d0c0b010c0002294d0d03010c00024d09fc002a354d02f6000e0e0e0c00034d04ec000e0c000203362a4d0de1000e0e0c00022b4d0ed7000c0002292f4d0fce000e0e0e0c00032b2a3c4d10c1000e0e0c0004664d05b700310e0e7d0800022a4d11ab000c00024d12a4004d11a0000e0c00022a2a4d1396000e0e0e0c00036503033c02842a4d1485000e0e0c0002294d037b00020276000c00024d0470000e0c0002036229352936294d15610002025c000e0e0c0002034a294d16510002024b000e0e0c0002293b4d0242000e0e0e0c0003032a2b382d36293b4d0230000e0c000303162a334d1724000e0c00034d051c00220e0e0e7d0e00023c6502013c6402013c6502013c64270502013c42|@3279,@2049,@2051,I229,I105,I218,@3276,I106,@2107,@2109,-1,@2073,@2075,@2077,@2420,@2435,@2462,@2465,@1482,@3280,@2453,@2501,@2680,@2683,@3278| 3278:O1|@3330 3279:S27|56414c55455f4f505328292e6765745475706c654b696e64283129 3280:O6|@2845,1,0,@3282,@3284,@3281 3281:O2|-1,@7325 3282:O2|@3283,0 3283:O3|3,@7312,79992 3284:O2|-1,@7313 3285:O3|1,@205,@3286 3286:O2|@3287,0 3287:O4|@2845,@633,@3289,@3288 3288:O3|1,@3328,@3327 3289:O2|-1,@3290 3290:O2|5,@7314 3291:O5|0,@3292,@3326,@7315,@637 3292:O3|@216,@3294,@3293 3293:O2|@468,@3318 3294:O2|@220,@3295 3295:O3|@223,0,@3296 3296:O10|0,@3298,@3303,@3297,0,0,0,0,0,0 3297:O1|@7321 3298:O1|@7316 3299:O5|0,@3301,@458,@7318,@3300 3300:O2|-7,@3302 3301:O2|@448,@7317 3302:O8|@464,@2845,0,0,1,0,0,0 3303:O1|@7319 3304:O5|0,@3301,@657,@7320,@3305 3305:O2|-7,@3306 3306:O8|@3307,@2845,0,0,1,0,0,0 3307:O4|4,@3309,@3308,0 3308:O2|-3,I11 3309:O2|@464,@3310 3310:O2|@3311,@463 3311:O2|-3,64 3312:O5|0,@3301,@660,@7322,@3313 3313:O2|-7,@3314 3314:O8|@3315,@2845,0,0,1,0,0,0 3315:O4|4,@3317,@3316,0 3316:O2|-3,I253 3317:O2|@465,@509 3318:O4|@3320,@3322,@3321,@3319 3319:O1|@3325 3320:O3|@3322,@3321,@3319 3321:O1|@3324 3322:O1|@3323 3323:C1,8|00803c420e0e0e0e|@2845| 3324:C2,16|00803c28402d4d0006002e7b05030004|@2845,I11| 3325:C2,16|00802b3b4d0008002d0e0e0e7e030003|@2845,I253| 3326:O2|-3,@3320 3327:O4|-3,@3329,@2845,@7324 3328:O3|3,@7323,79993 3329:O2|@3328,0 3330:C9,96|00812c4d0059000e0e0c0002030e2c4d014d000e0e0c0002296402054d0240001029352a36294d0336000e0e0e0c0002030e294d0429000e0e0c0002296402054d051c0010293529314d0613000c00032d2a3c4d070900340e0e0e7b050a0004|@3331,@2107,@2109,@958,@2073,@2075,@958,@2462,@2465| 3331:S32|545950455f5452454528292e636f6e7374727563746f72526573756c74283229 3332:O1|@3333 3333:C11,264|00802b4d0001010e0e0c00024d01f8000e0c000207d82b352935294d02e9004d03e5000e0e0c00030a02009800380068002a362e36293b4d04cd000e0e0c000303144d05c2002b4d06bd000e0e0c0003293b6964020a2f4d07ad00307d0700026502922a362e36293b4d049b000c000303144d0892002b4d098d000e0e0c0003293b6964020a2f4d077d00307d0700026502622a362e36293b4d046b000c000303144d0562002b4d065d000e0e0c0003293b6964020a2f4d074d00307d0700026502322a362e36293b4d043b000c000303144d0532002b4d062d000e0e0c0003293b6964020e2f4d071d0030020208007d0700026565020c2b4d070b002c0e0e0e800002420e0e0e|@3335,I105,I218,-1,I107,I229,@431,@3336,@4644,@4654,@3334| 3334:O1|@4655 3335:S44|56414c55455f4f505328292e63686f6f7365436f6e7374725265707228312963686f6f736552657072283129 3336:O1|@3337 3337:C10,160|00814d009a002d4d0195000e0e0c0003292d3b3b3c3b3b3b68084d0282002a692f4d037b000c00024d0074002a0c00026429303b3b3c3b3b3b68084d0261002a694d005b00334d0456000e0e0e0c000329333b3b3c3b3b3b68084d0242002a69293b692d2a69312a69402a692a3b4d052e000e0e0e0c00030313294d0621000e0e0c00024d0718002a6964020129293b4d080c000e0c00033b2a22127d130002|@3339,@465,@3340,-7,@3361,@3387,I229,@3353,-3,@3338| 3338:O3|@3396,@4081,@3395 3339:S37|56414c55455f4f505328292e637265617465556e617279436f6e7374727563746f72283229 3340:O1|@3341 3341:C20,528|00812b354d0008024d0104020e0c00030a070016007b0010005c012f004e004800e2004d02e90106d52c3b693f2a4d03de013c6b293b693f2a4d04d3013c6b6606dc2c3b693f2a4d05c5013c6b293b693f2a4d06ba013c6b6606d34d02b10106cf2b36294d07a8010e0c000203032902054d089b01104d0996012a692f3b692a2a693f2a4d0a88013c6b270506df2b36294d077b010c000203032902054d0b6f01104d096a012a692f3528054d0c60010e0c0003030c3b304d0d54010e0c000302212f354d0948014d0c44010e0c0003030c3b304d0d38010e0c000302052806303b6a293b692b2a693f2a4d0a21013c6b270606d12b36294d07140102020b010e0c000203032902054d0e0301104d09fe002a692f3528054d0cf4000202eb000e0c000303143b304d0de4000204db00d9000e0e0e0c000302212f354d09d0004d0ccc000e0c0003030c3b304d0dc0000e0c000302052806303b6a293b692b2a693f2a4d0aa9003c6b2706029e9c002b36294d079a000e0e0e0c000203054d0f8e001029293b4d1086000e0e0e0c0003294d077b000c000203032902054d116f0010294d0769000e0e0c000203032902054d125b00104d0956002a69323528054d0c4c00020243000e0c0003030c3b334d0d3c000e0c0003022132354d0930004d0c2c000e0c0003030c3b334d0d20000e0c000302052806333b6a293b692b2a693f2a4d0a09003c6b2709430e0e0e0e|@3343,-4,I107,@464,@653,@650,@653,@650,I105,@395,-3,@461,@395,I229,@3342,@395,@398,I253,@395,@395| 3342:O1|@3344 3343:S26|56414c55455f4f505328292e636f6e7374724d61746368283229 3344:C32,888|00812b35404d006f030c000303d52b363b2a293b4d0060030e0c000303032a021629362b3c4d014f030c0003292b25042504511e213b65652e2a4d023a030e0e0e0c0003640341292e2a3b4d0029030e0e0c000303054d031e03102a352b362b3b4d0013030c000303032a02172b3c4d0405030e0e0c00032a2a2505250526031e373b64270402584d05ec02293b4d00e6020e0e0e0c000303033c021f293529354d06d3024d00cf020c0003030c2a36292503511e283b6402013b646403164d07b5024d08b1020e0e0c00024d06a8022a696402044d079f024d099b022a69646406da2b354d068f024d008b020c000307d72b360402002a4d0a7c020e0c000203033c02802a4d0a6e020e0e0e0c000203054d0b6202102a294d0c5b020c0002293e4d0d52020e0e0e0c0003293b4d0e46020e0e0e0c0003664d0f3b020c000203033c02402a4d0a2e020e0e0e0c000203054d102202102a4d111c020e0c00022f4d0a13020c000203032f020b2f4d1206020e0e0e0c00022a2a4d13fa010e0e0e0c00036503614d14ed01293b4d00e7010c000303033c021f293529354d06d7014d00d3010c0003030c2a36292503511e253b6402013b6464031e0202b1014d15b5014d08b101020257000e0e0c00024d06a4012a696402044d159b012a4d099601452a465102362a4d0a8b010c000203054d168201102a2f4d0a7b010c000203032f02054d176f01102a2a4d1868010e0c00032c4d065f01452a462604296506cd2b3528054d004e010e0e0e0c000307d72b3629354d193e014d003a010e0e0e0c0003030829362939296502044d1a26012935404d001f010c000303ce2e2a4d1b14010e0c000329354d1c0a014d0006010e0e0e0c0003033b29362a372b382c392c2c2c2c6b30354d19eb004d00e7000c0003030830362936296502044d1dd6002a3b2e6a2a0e0e0c00026428052a6927060274293528064d00bb000c0003036629362a372a354d1cac004d00a8000e0c0003034e2a362b372c382d392c2c2c2c6b32354d198f004d008b0002027f000c0003030832362936296502044d1e76002a3b2e6a2a020260000e0e0c00026428052a69302a4d1b5d0022100e0e0e7e1000032b6502012964023c2a354d1946004d0042000e0e0e0c000303082a362937296502162a353c4d002b000c000303062a37296402042a3629642f2a4d1b1600300e7e07000365020528062c2e6a430e0e0e0e0e0e0e|@3346,I229,I106,I234,@52,I107,@3347,-3,@3352,@3353,-10,I105,@398,I17,I243,I251,I218,@398,I15,I152,I248,@3347,@3352,@398,@395,I253,-1,@431,@3342,-5,@3358,@3345| 3345:O1|@3360 3346:S30|434f44455452454528292e66696e64456e747279496e426c6f636b283229 3347:O2|@3349,@3348 3348:O2|@3350,@509 3349:O2|-3,100 3350:O2|-3,@3351 3351:S4|42696e64 3352:O2|10,@3347 3353:O1|@3354 3354:C12,240|00802b354d00e8004d01e4000e0c000303062b36296402d72b35404d01d1000e0e0c000303c42b36293b4d01c2000e0e0e0c000303033b02ae3b2a293b4d01af000c000303032a021629362b3c4d029f000c0003292b25042504511e203b6565294d038b000c000203032902054d047f00102928403b4d0576000e0e0e0c00043b2d293b4d0168000e0c000303043b50024629352a362c4d0355000e0e0c000203032c02054d064700102b4d0741000e0e0c00022f2b2b4d0835000e0e0c0004502e3c4d0229000e0e0c0003292d2507250726051e52260551294d0912000e0e0e0c00025029666402054d0a02001042|@3356,-3,I229,I106,I105,@395,I11,@395,@3353,I255,I47,@3355| 3355:O3|@7141,@228,@3357 3356:S36|434f44455452454528292e6d616b65436f6e737456616c2831296d616b6556616c283129 3357:S32|6d616b6556616c202d206e6f7420636f6e7374616e74206f72207265636f7264 3358:O1|@3359 3359:C2,8|00804d000200100e|@440,@439| 3360:C2,8|00804d000200100e|@440,@439| 3361:O1|@3362 3362:C9,96|00802b354d0058004d0154000e0c00030a070016002800410010001c001000220033004d023900022f4d03330002294d042d0002234d052700021d2b364d061f002a696402122b362c374d0712002b2b6a6502044d030800420e0e0e0e0e0e0e|@3364,-4,I107,@3365,@3370,@3373,@3376,@3379,@3363| 3363:C3,32|0080560856174d0016002b2b4d0110000e0c00042e3b693f2a2c3c6b2704420e|@3382,I48,@3381| 3364:S26|56414c55455f4f505328292e636f6e7374724170706c79283129 3365:O1|@3366 3366:C2,8|00804d000200100e|@3368,@3367| 3367:O3|@7141,@228,@3369 3368:S29|56414c55455f4f505328292e636f6e7374724170706c79283129283129 3369:S25|636f6e7374616e742063616e2774206265206170706c696564 3370:O1|@3371 3371:C1,8|00802b420e0e0e0e|@3372| 3372:S32|56414c55455f4f505328292e6964656e746974794170706c79436f6465283129 3373:O1|@3374 3374:C4,80|00802b3b69402a692a293b4d0041000e0e0c000303033c021f293529354d012f004d002b000c0003030c2a36292503511e273b6402013b64640312294d0210000e0c00024d0108002a69640201296542|@3375,I229,-3,@3353| 3375:S27|56414c55455f4f505328292e626f784170706c79436f6465283129 3376:O1|@3377 3377:C4,32|00802b3b694d0017002a694d0111002a693f2a4d0209003b6b66420e0e0e0e0e|@3378,@3311,@464,@3308| 3378:S27|56414c55455f4f505328292e7265664170706c79436f6465283129 3379:C6,112|00805607294d0067000c000203032902054d015b00104d0256002a692e3b692a2a69402a692a293b4d0344000e0c000303033c021f293529354d0233004d032f000c0003030c2a36292503511e263b6402013b64640312294d0414000e0c00024d020c002a69640201292706420e0e0e|@3380,I105,@395,-3,I229,@3353| 3380:S33|56414c55455f4f505328292e746167426f784170706c79436f6465283129283129 3381:O1|@3383 3382:S38|56414c55455f4f505328292e7461675475706c654170706c79436f6465283129283129283129 3383:C8,136|00822b4d0081000e0e0c000203032b02054d017300104d026e002a693b3b0e0e0e4f0363003000022b2a69402a692a293b4d0453000c000303033c021f293529354d0243004d043f000c0003030c2a36292503511e253b6402013b64640312294d0524000e0c00024d021c002a696402012929220c3b3b3c3b3b3b68084d0607002a692708440e0e|@3385,I105,@395,-3,@3384,I229,@3353,-7| 3384:C5,56|008056082c2a4d002e000e0e0e0c000364032028064d011f002d6a2c3c4d0217000c00030e4f030f001100022a2a69296602013b420e0e0e|@3386,I234,@465,I106,@3384| 3385:S27|56414c55455f4f505328292e7461675475706c65436f6465283329 3386:S39|56414c55455f4f505328292e7461675475706c65436f64652833296765744669656c6473283129 3387:O1|@3388 3388:C10,216|00812b354d00d0004d01cc000e0c00030a070016006d00bd001000190010005c00b0004d02b10002a82c02a52c3528054d03a4000e0c0003030e3b2d4d0498002d0e0e0e7e0400032c354d058a004d0386000e0e0e0c0003030e3b2d4d0478002d0e0e0e7e04000328062d3b6a02622c4d066400693f2a4d075d003b6b6402512c3528054d0350000e0c0003030e3c2d4d0444002d0e0e0e7e0400032c354d0536004d0332000e0e0e0c0003030e3c2d4d0424002d0e0e0e7e04000328062d3c6a020e2b372d2a4d080d002e7e0500032c430e0e0e0e0e0e|@3390,-4,I107,@501,I229,@3342,-3,@509,@3316,@3389| 3389:O1|@3391 3390:S29|56414c55455f4f505328292e636f6e7374724465737472756374283229 3391:C7,120|00813b3c0e4f006f00100002402a692a293b4d0162000e0e0e0c000303033c021f293529354d024f004d014b000c0003030c2a36292503511e283b6402013b64640312294d0330000e0c00024d0228002a6964020129294d041d003b3b3c3b3b3b68084d0511002a69323b693f2a2c3c6b2707430e0e0e0e|@3393,@3392,I229,-3,@3353,I48,-7| 3392:C5,56|008056072c2a4d002e000e0e0e0c000364032028064d011f002d6a2c3c4d0217000c00030e4f030f001100022a2a69296602013b420e0e0e|@3394,I232,@465,I106,@3392| 3393:S38|56414c55455f4f505328292e7461676765645475706c654465737472756374436f6465283229 3394:S50|56414c55455f4f505328292e7461676765645475706c654465737472756374436f64652832296765744669656c6473283129 3395:O3|@4288,@4287,@4082 3396:C37,888|00812b4d0071034d016d030e0e0c00032c4d0263034d015f030c00032d4d0357034d0153030c00032e4d044b034d0147030c00032b03094d053d03302b6a02064d0634033069040200280b28403b4d0726030e0e0e0c0004293b404d0819030e0e0c0004504d090f032a693c28402b4d0705030e0e0c00042c2a453b46502c352d362e040200280b28403b4d07e9020e0e0c0004293b404d08dd020e0e0c0004504d09d3022a693c28402b4d07c9020e0e0c00042c2a453b46502c352d362e2216354d0ab2024d0bae020e0e0e0c000303072216372964020222164d0c9902322c6a4d0d92022211121800010001002214221868054d0e7f022d694d0f7902220c694d1072022d694d116c0230693c28403c4d0762020e0e0e0c0004302e2e2e2e3b2f3b220d3b3b2223122800010002000c000d221222124d123c020e0c00035034344d1231020e0e0c00035029354d0925024d0b21020e0e0c00030308293629372965021629353c4d0b0b020c00030306293729640204293629642a354d09f6014d0bf2010e0e0e0c000303082a362939296502044d13de012b354d09d8014d0bd4010e0c000303082b362935296502132b353c4d0bbf010c000303062b36296402013b2a354d14ad014d0ba9010e0e0c000303152a36293a294d099901694d1594010e0c000265020d4d1689012b354d0b83010c00032903932c3b69293b4d0b74010e0c000303032b02103b2c0e0e161700620124000000000264644d1856010e0e0e0c000229354d194a014d0b46010e0e0e0c000303033c02013b03084d1a34012a69024322200320040700284d221f2b4d1b20010e0c000450292b2a4d1c14010e0c0003260302023b50221c2a122400010001000e0c0003221d0e0e0e0c00024d1df0002a69646406cc2a3b4d0be4000e0c000303084d1eda002e6902d22a4d1fd1000e0e0c00023c2a4d20c6000e0e0e0c00032e2a69402a692a293b4d0bb3000c000303033c021f293529354d19a3004d0b9f000c0003030c2a36292503511e253b6402013b64640312294d2184000e0c00024d197c002a6964020129293b69293b4d0b6d000e0e0c000303033002103b310e0e1622005a002900000000026428092a692227031f040700284d22262b4d1b3f000c000450292b2a4d1c34000e0c0003260302023b5022232a122b0001000100020218000e0c000322240e0e0e0c00024d230c00220c220f2c6b27092720430e|@3398,@7287,@960,@7326,@7327,@7285,@3411,@4022,I11,I255,-1,-4,I229,@4023,@4025,@4038,@448,@4042,@4044,@4046,@431,-7,@4049,-2,@4055,@4056,-3,@4059,@271,@330,@4061,@4062,@4063,@4067,@3353,@4076,@3397| 3397:C13,200|00803b56190c0002294d00bb000c000203054d01b20010294d00ac000e0c000203054d02a20010294d039c002a692a3b4d0494000e0c00034d058c002a69565829354d0682004d077e000e0e0e0c0003030829362936296502044d086a004d0966002a2f6a568829354d065b004d0757000c00030308293629382965020e3c28403b4d0a42000e0e0e0c000456a73b2d312d2d68050402002b354d0b2a004d0726000e0e0e0c00030308293b453246500209294d061100452b46502928052a69270e420e0e0e0e0e|@4060,I105,@4078,@398,@468,I253,-3,-1,I229,@4077,@216,I11,-2| 3398:S21|434f44455452454528292e67656e436f6465283229 3399:O2|@3404,@7274 3400:O2|@3401,@7274 3401:C2,32|00802b3556174d0016000e0e0e0c000303033c0202020202013b420e0e0e0e0e|@954,I251| 3402:O2|@3403,@7274 3403:C1,16|008056072928452e6a64420e0e0e0e0e|@954| 3404:C3,40|00802b3556174d001e000e0e0e0c000303062b3729640202020202054d01080010420e0e0e0e0e0e|@954,I251,@958| 3405:O2|@3410,@7269 3406:O2|@3407,@7269 3407:C2,32|00802b3556174d0016000e0e0e0c000303033c0202020202013b420e0e0e0e0e|@954,I251| 3408:O2|@3409,@7269 3409:C1,16|008056072928452e6a64420e0e0e0e0e|@954| 3410:C3,40|00802b3556174d001e000e0e0e0c000303062b3729640202020202054d01080010420e0e0e0e0e0e|@954,I251,@958| 3411:C4,48|00805608040700284d2b2b4d0021000e0e0c000450292e2a4d0114000e0c00035056372f2a4d020700310e0e7e070003|@3413,@271,@330,@3412| 3412:O2|@3415,@3414 3413:S40|434f44455452454528292e67656e436f6465283229636f646547656e416e645072696e742d283129 3414:O2|@3437,@3436 3415:C9,104|00812c354d0060004d015c000e0c000303302c3629363b2a2f4d024b000c00042b354d0342002b692d392b2d2c2c220c56b70e0e0e0c00064d042c002a69270702253b4d0521002d4d021c000e0c00044d0614002e2b2b3b3156770e0e0c00064d0704002a696643|@3417,-7,I229,@3418,@3427,@3429,@3431,@3432,@3416| 3416:C2,16|00805607293b69644d0004002c800002|@3430,I204| 3417:S21|494e5447434f444528292e67656e636f6465283229 3418:O1|@3419 3419:C6,224|00823f28413b4d00d6000e0e0e0c00043b2a693c28402b4d00c5000e0e0c00043c28403b4d00b8000e0c00043c28403b4d00ac000e0c00043c28403b4d00a0000e0c00043c28403b4d0094000e0c00043c28403b4d0088000e0c00043c28403b4d007c000e0c00043c28404d0171004d006d000e0e0c00043c28403b4d0060000e0c00043c28403b4d0054000e0c00043c28403b4d0048000e0c0004220f4d023e004d033a000e0e0e0c000322104d042e004d032a000e0e0e0c00033431220e220d22163422193333220d22122214220c2212220f680f292710440e0e0e0e0e|@3420,I11,536870911,@7328,@960,@7285| 3420:S27|494e54434f4445434f4e5328292e636f6465437265617465283329 3421:O2|@3426,@7273 3422:O2|@3423,@7273 3423:C2,32|00802b3556174d0016000e0e0e0c000303033c0202020202013b420e0e0e0e0e|@954,I251| 3424:O2|@3425,@7273 3425:C1,16|008056072928452e6a64420e0e0e0e0e|@954| 3426:C3,40|00802b3556174d001e000e0e0e0c000303062b3729640202020202054d01080010420e0e0e0e0e0e|@954,I251,@958| 3427:C2,16|008056074d0008002a6964420e0e0e0e|@3428,-1| 3428:S35|494e5447434f444528292e67656e636f64652832296c6f61645265634c696e6b283129 3429:C1,8|00805607420e0e0e|@3430| 3430:S24|494e5447434f444528292e67656e636f6465283229283129 3431:S11|3c746f70206c6576656c3e 3432:O1|@3433 3433:C2,8|00804d000200100e|@3428,@3434| 3434:O3|@7141,@228,@3435 3435:S17|746f70206c6576656c2072656163686564 3436:O4|@3681,@3716,@3742,@3680 3437:C22,464|0084040200280628404d00c3014d01bf010c0004293b28054d02b4010e0c0004504d03ab012a693c28402b4d01a1010e0e0c00042c2a454d00950146502c3c28403c4d018a010e0e0e0c00043c28403b4d017c010e0c00044d0474012b220e6a4d056c012a2e2e22112211680621074d065d014521054d0756014521074d084f0145210e4d0948014521054d0a41014521094d0b3a014521054d0c33014521054d0d2c01452922174634472e48220c496c502a34462217472e48220c496c502b220c462217473348220d4922164a2e4b344c221524086c502c34462217472e48220c496c502d220c4622174734482c49304a220d4b22144c3224082f24092d240a31240b2a240c2b240d6c502e220c462217472212482214492e4a334b6c502f221246221447220d482216496c50303046220d472214482f49220c4a2e4b6c502214287e4d0e88000e0c000303033b02054d0f7b0010287e22164d1072000e0e0e0c00033b22194d1165000e0e0c00032a3c4d105a000e0e0e0c000329221b4d114d000e0e0c0003221c4d0342003b4d123d003b220e0e0e0e0c000622103b4d132d000e0e0c000303033b0213280d281f28413b3e221f22224d1413000c0008221d121a0001000100221b0e7d1f0002|@3439,@633,I11,I255,-1,@3440,@3517,@3540,@3551,@3564,@3590,@3633,@3635,@3649,@3668,I234,@3676,I106,@3452,@3581,I253,@3438| 3438:O1|@3678 3439:S21|494e5447434f444528292e636f646567656e283529 3440:C7,144|00812b3b4d0088000e0c000303215607293b4d017a000e0e0e0c000356282a2f312c4d026a000e0e0e0c000566022f5607293b4d0159000e0e0c0003292f4d034e000e0e0e0c000356382813282228293b280b2f2f4d0437000c0008270456175627293b4d0128000e0c0003293c4d031e000e0e0e0c00032c3b2b4d0511000e0e0c0004503b2705430e0e0e0e0e0e0e|@3442,I233,I253,@3441,I106,@3438,I255| 3441:O1|@3443 3442:S38|494e5447434f444528292e636f646567656e28352970757368537461636b56616c7565283229 3443:C11,296|00832e3b4d0020010e0c000303033c020b2d3b4d0011010e0e0c000303054d010601102e28104d00fe000e0e0e0c0003032e2d3e4d00f0000e0c0003031f4d02e6002d4d00e1000e0e0c0003030c2c28094d00d3000c000302013b02013b02013b037928562e4d03be000e0e0e0c0003293c4d04b2000e0e0e0c00032d3b3c4d05a5000e0e0c00042e4d069b000c00022b304d0792000e0e0e0c0003333c4d0486000e0e0e0c00032928104d0879000e0e0c000329344d036e000e0e0e0c00032928064d0361000e0e0c000329220c4d075500220d0e0e0e7e0f00032b3b28054d0544000e0c00042c4d063b000c000228122e4d0731000e0e0c0003313d304d0925000e0e0c0004313d314d0919000e0e0c0004313d324d090d00330e0e0e7b050b00040e0e0e0e|@3445,I232,@3446,-6,I106,I107,@3448,@3488,@3452,I108,@3444| 3444:O1|@3515 3445:S28|494e54434f4445434f4e5328292e67656e4e6f6e4c6f63616c283429 3446:O3|@7141,@228,@3447 3447:S31|67656e4e6f6e4c6f63616c3a20696e76616c696420706172616d6574657273 3448:O1|@3449 3449:C14,344|008228dc2c4d004f010c00033b2f35293b4d0143010c000331230d293b4d0137010c00032b2a4d002e010e0e0e0c000329304d0222010e0e0e0c0003270503033b06da2f230a293b4d010c010e0c000331230a293b3b4d03fe000e0e0e0c0004503103033b023b3d334d04eb000c00033b344d04e2000e0e0e0c00033435293b4d01d4000e0c0003294d05cb004d06c7000c0003220e2a4d07bd000e0e0c0003270533230d293b4d08ad004d03a9000e0e0c000450343a220c3a293b4d0198000e0c0003644f098f008000022a3b2b4d0385000e0e0c0004502c3b4d0a79000e0e0c000303033b0253220d4d0b69000e0e0c0002220e35293b4d015b000c00032f293b4d0a51000e0e0c000303033b022929352a362a3b4d013d00020231000e0e0c0003292e22164d0c2c000e0c00042b250526041e343b27042704220e230a293b324d0311000e0e0c0004503b270965440e0e0e0e0e0e|@3451,I107,I253,I232,I255,@3452,-1,I106,@3475,536870911,@3478,I229,@3488,@3450| 3450:O1|@3492 3451:S32|494e54434f4445434f4e5328292e636865636b4272616e63684c697374283329 3452:O1|@3453 3453:C9,128|00812b35293b4d0076000e0e0e0c00032d372f3b4d0168000e0c000303101b0001304d025a000e0e0e0c000302012f294d034c000e0c0002030329020b294d043e000e0e0e0c00022928ff4d0531000e0e0c00032c2e2b4d0625000e0e0c000432352f3c4d0218000e0c00032a3b2b4d070d000e0e0c0004503b2709430e0e0e|@3455,I253,I234,I106,I105,I152,I243,@3454,I255| 3454:O1|@3456 3455:S24|494e54434f4445434f4e5328292e67656e42797465283229 3456:C31,432|00822d3b4d00a8010e0c00032935294d019d014d0299010e0e0c000303054d038e01102a36294d0486010e0e0e0c0002293b4d057a010e0e0e0c000303104d066e012a4d0769010e0e0c000302012928082a4d085a010e0e0e0c0003323b4d054e010e0e0e0c0003032d324d0141014d093d010e0e0c0003294d0a3301694d0b2e012a69654d0c27010c00024d0d20014d0e1c012b6a10322a4d0513010c00030322324d0f09010e0e0c000203033202054d10fb00102d2a344d11f300220c7b050c00043b2e4d12e6000e0e0e0c00034d13dc000e0c000203054d14d200103e2b4d08cb000c0003333b4d15c2000e0e0e0c0003293c4d02b6000e0e0e0c0003030334020b3428074d16a4000e0c00032928084d1799000e0e0c0003293c4d078e000e0e0e0c00032d2a4d1882000e0e0e0c000303032d020129294d0f71000e0e0c000203032902054d19630010293c3b4d1a5b000c00043b2a693c28402b4d1a4d000e0e0c000422142a220c3b4d1b3e000e0e0e0c00055022134d0f31000e0e0c00020304221302054d1c2200102c2a22154d1119000e0e0c00045022153b2d4d1d0b000c0004503b2711440e0e0e|@3458,I253,-1,I229,@3459,I15,I234,@181,I106,I108,@355,@3461,@3463,@369,@7141,@228,I105,@395,I254,I251,I218,@3464,I231,I107,I109,I233,@395,I11,@3457,@395,I255| 3457:O1|@3466 3458:S19|434f44455f5345472e63736567536574283329 3459:O3|@7141,@228,@3460 3460:S42|637365675365743a2063616e2774206368616e6765206c6f636b656420636f646520736567656d656e74 3461:O2|@3462,0 3462:S25|206f7574206f662072616e676520302e2e696e66696e697479 3463:S15|637365675365743a20496e64657820 3464:O3|@7141,@228,@3465 3465:S34|637365675365743a2063616e277420657874656e6420636f6465207365676d656e74 3466:C20,416|00832e3b4d0098010e0c00032935293b4d018c010e0c000307d52a36303b4d007e010e0e0e0c00032935293b4d0170010e0c000307d82a362c4d0263010c0002293b4d035a010e0e0e0c000303104d044e012a4d0549010e0e0c00030201292b4d023c010e0c0002293b4d0332010e0e0e0c000303104d0426012a4d0521010e0e0c000302012928082c4d0612010e0e0e0c000328082b4d0605010e0e0c00032808220f4d06f8000e0c00033b2b22124d07ec000e0c000322123b4d03e1000e0e0c000303033c020b2d22134d03d0000e0c0003034922124d08c4004d09c0000e0c00032e4d08b7004d09b3000202a3000c0003293b694d0aa5002a692c2a694d0b9c002a6927054d0c940002027c000e0c00024d0d88004d0e84002b6a102b3b4d037b000c000303033c020b292c4d036d000e0e0c000303412b4d0861004d095d000e0e0c00032a4d0853004d094f000c0003293b694d0f45002a692c2a694d103c002a6927054d0c34000e0c00024d0d2c004d0e28002b6a102b3b1611001e00120000000003270a02054d121000106602054d12080010651f040e0e0e0e|@3468,I253,I229,I15,I234,@181,I106,I108,I107,-1,@355,@3469,@3470,@369,@7141,@228,@3469,@3471,@3472,@3467| 3467:O3|@7141,@228,@3474 3468:S23|434f44455f5345472e63736567436f7079536567283429 3469:S17|206f7574206f662072616e676520302e2e 3470:S25|63736567436f70795365673a2042797465206c656e67746820 3471:S25|63736567436f70795365673a2042797465206f666673657420 3472:C9,128|008156082c2a4d0076000e0e0e0c00036403033b026856022c4d0163000c000203032c02054d025700102a2a4d0350000e0c00031204000100f9ff304d0140000e0c000203033002054d043300102a2a2d4d052b000c000450303c4d0621000e0e0c0003323c4d0616000e0e0e0c0003292b0e0e0e4f0707008100032707430e|@3473,I113,I105,@395,I252,@395,I254,I106,@3472| 3473:S35|434f44455f5345472e63736567436f7079536567283429636f70794279746573283229 3474:S49|63736567436f70795365673a2063616e206f6e6c7920636f7079206265747765656e206279746520736567656d656e7473 3475:O1|@3476 3476:C6,104|00814d0062002c693c28402b4d0158000e0c00042e230d293b4d024b000c00032f2a4d0342000e0e0e0c00036503122e230d293b304d042f000c0004503b6402013b2f3a303a293b4d021c000e0c00032d2a692c3b2b4d040e000e0e0e0c0004502e3b692707430e|@3477,-1,I11,I253,I234,I255| 3477:S26|494e54434f4445434f4e5328292e6d616b654c6162656c283229 3478:C18,544|00802b3b4d0018020e0c000303033b06d82b352c36290e0e0e4f0103022100022b3b4d02fa010e0e0e0c000329353b4d00ed010e0e0c000303032a06d0293656592935293b4d02d7010c000356842a2e4d03cc010e0c00032a2a4d04c2010e0e0e0c00036507d52c3c4d05b3010c00032a2a4d03aa010e0e0e0c00033b2a4d069e010e0e0e0c00030310291b00014d048e010e0e0e0c000302013b03033b02054d077c011056b9293729324d0871010e0e0c0003293b4d0066010e0e0e0c000303033b02054d09570110334d0a51014d054d010e0e0c0003121100010003002937292c4d083901020234010e0e0c0003293f4d052a010e0e0e0c00031215000100030029372b3b4d04150102020e010e0e0c000303101b00012c4d0502010e0e0e0c000302012b294d0bf4000e0c0002030329020f294d0ce6000202a1000e0e0e0c00022928ff4d0dd5000e0e0c00032c332b4d0ec9000e0e0c0004121b0001000300293722123b4d04b4000e0c000303101b000122134d05a5000e0e0c000302022212294d0b97000c0002030329020b294d0c8a000e0e0e0c00022928ff4d0d7d000e0e0c00032c221b2b4d0e70000e0c0004122100010003003b3d2b4d0f5e000e0e0e0c00043b221b6922223b2b4d104c000e0c0004502220271b023c568929230d293b4d0236000e0e0e0c00032f2a4d042a000e0e0e0c0003660316568929230d293b304d1015000e0e0c0004503b6502013b31306929652704270442|@3480,I229,@3478,I253,I107,I234,I106,I232,@3481,@3483,@3479,-1,I105,I152,I243,@3454,@3444,I255| 3479:O3|@7141,@228,@3487 3480:S48|494e54434f4445434f4e5328292e636865636b4272616e63684c697374283329636f6e766572744c6162656c73283129 3481:O3|@7141,@228,@3482 3482:S44|636865636b4272616e63684c6973743a206f666673657420746f6f206c6172676520746f20636f6e76657274 3483:O1|@3484 3484:C18,200|00812c3b4d00c0000e0c00032936294d01b5000e0e0c0002293b4d02aa000e0e0e0c000303104d039e002a4d0499000e0e0c000302012928082a4d058a000e0e0e0c00033b314d067e000e0e0e0c0003030c302a4d0270000e0c000302013b0323304d0762000e0e0e0c000203033002054d085300102d2a4d094c00330e0e0e7e0a0003304d0a3f004d0b3b000c00032a4d0a33004d0b2f000c0003293b694d0c25002a692c2a694d0d1c002a6927054d0e14000e0c00024d0f0c004d1008002b6a100e0e0e0e0e|@3486,I253,I15,I234,@181,I106,I108,I232,I105,@395,I252,-1,@355,@3469,@3485,@369,@7141,@228| 3485:S15|637365674765743a20496e64657820 3486:S19|434f44455f5345472e63736567476574283229 3487:S46|636865636b4272616e63684c6973743a20382d626974206f666673657420616c7265616479206669786564207570 3488:O1|@3489 3489:C16,344|00802b230a293b4d004d010e0e0c0003293b4d0142010e0e0e0c00030326294d0235014d0331010e0e0c00034d0428012a4d0523010c00034d061c014d0718012b6a6510293b4d080e010e0e0e0c000303033b06d328ff2a4d09fc000e0c000303312d36293b4d00ee000e0e0e0c0003640304281902022818292f4d0ad9000e0e0c00032b3d314d0bcd000e0e0c00046502aa2d36293b4d00bd000e0e0c000364034c3e2a4d01af000c0003031928272e4d0aa3000c00032a2f4d0a9a000e0e0e0c000364022628642a4d0c8a000e0e0e0c0003293c4d0d7e000e0e0e0c000329304d0a72000e0e0e0c000365024e3d2a4d0163000c0003031928262e4d0a57000c00032a2f4d0a4e000e0e0e0c000364022a28502a4d0c3e000e0e0e0c0003293c4d0d3200020213000e0e0e0c000329304d0a22000e0e0e0c0003652e230a293b3b4d0e11000e0e0c0004503b2704420e0e0e0e0e0e0e|@3491,I253,I234,-1,@355,@3490,@344,@7141,@228,I229,I232,@3452,@3444,I106,I107,I255| 3490:S25|726573657453703a206261642072657365742076616c756520 3491:S24|494e54434f4445434f4e5328292e72657365745370283129 3492:C21,328|00822d354d0040014d013c010e0c000303c22d36293c4d022e010e0e0e0c00032e2a4d0322010e0e0e0c00033b2a4d0416010e0e0e0c00030310291b00014d0506010e0e0e0c000302013b03033b02054d06f400102f37292e4d07eb000c0003293b4d01e2000e0e0e0c000303033b02054d08d300102f334d09cc000e0c000333372f3b4d05c0000e0c000303101b0001304d02b2000e0e0e0c000302012f294d0aa4000e0c0002030329020b294d0b96000e0e0e0c00022928ff4d0c89000e0e0c00032c220c2b4d0d7c0022110e7b051100042d36293d4d026c000e0c00032e2a4d0362000e0e0e0c00034d0e58002a4d0453000c00030310294d0f49004d0545000e0e0c000302013b03033b02054d103400103d2d314d112c000e0c0004293b4d0122000e0e0e0c000303033b02054d121300102c3d30344d130a00220c0e0e0e7b060b0005|@3494,-1,I229,I106,I107,I232,I234,@3495,@3483,@3497,@3499,I105,I152,I243,@3454,-32768,32768,@3504,@3506,@3511,@3493| 3493:O1|@3513 3494:S28|494e54434f4445434f4e5328292e66697875704f6666736574283329 3495:O3|@7141,@228,@3496 3496:S40|66697875704f66667365743a206a756d7020746f6f206661722028382d626974206f666673657429 3497:O3|@7141,@228,@3498 3498:S42|66697875704f66667365743a20382d626974206272616e636820616c7265616479206669786564207570 3499:O1|@3500 3500:C5,64|00813b2c230d293b4d0034004d0130000e0c0004502d3a2e3a293b4d0221000e0e0c0003644f0317003000022a3b2b4d010d000e0e0c0004503b2704430e0e0e|@3502,536870911,I255,I253,@3501| 3501:C7,160|00802b3b4d0098000e0c000303033b028a2b35293b4d0187000c000329353b4d007d000e0e0c0003030d2d36294f026f0031000264026329362e3656482b2a4d035d000e0e0c000364030b290e4f024f004100020243564729230d293b4d013f000c00032d2a4d0436000e0e0e0c0003660316564729230d293b2e4d0521000e0e0c0004503b6502013b2a0e0e4f020f005100022e2a6929666565420e0e0e0e|@3503,I229,I253,@3501,I113,I234,I255| 3502:S28|494e54434f4445434f4e5328292e72656d6f76654c6162656c283229 3503:S42|494e54434f4445434f4e5328292e72656d6f76654c6162656c28322972656d6f7665456e747279283129 3504:O3|@7141,@228,@3505 3505:S41|66697875704f66667365743a206a756d7020746f6f20666172202831362d626974206f666673657429 3506:O1|@3507 3507:C2,24|00822b373b2f2f0e0e4f000b0030000365440e0e0e0e0e0e|@3509,@3508| 3508:C7,96|008156042c4d0057000c00032d3c4d014e000e0e0e0c0003030329023b2d3c4d023d000e0e0c00032d3c4d0332000e0e0e0c00032a2a0e0e0e4f042300410003291b00014d0518000e0c0003292e4d030e00320e7e09000364430e0e0e0e0e0e|@3510,@3483,I229,I107,I106,@3508,I108| 3509:S25|494e54434f4445434f4e5328292e6765744279746573283329 3510:S21|494e54434f4445434f4e5328292e67657442283329 3511:O3|@7141,@228,@3512 3512:S43|66697875704f66667365743a2031362d626974206272616e636820616c7265616479206669786564207570 3513:C13,272|00832e1b00014d0006010e0e0e0c0003293b4d01fa000e0e0e0c000303033c0218293b4d02e9000e0e0c00033c2a4d01de000e0e0e0c000364030329020e291b00014d03ca000e0e0e0c00032d372a3b4d04bc000e0c000303101b00012b4d03ae000e0e0e0c000302012a294d05a0000e0c0002030329020b294d0692000e0e0e0c00022928ff4d0785000e0e0c00032c332b4d0879000e0e0c0004343c4d016e000e0e0e0c000303033b025f220c3b4d025c000e0c0003293c4d0152000e0e0e0c00030304220d020e220d28ff4d093e000e0e0e0c0003291b00014d0a30000e0c0003220e3c4d0925000e0e0c0003220e3c4d0319000e0e0c00032b2b2b22114d0b0b0022127b0612000527071f04|@3514,I110,I229,I231,I106,I234,I105,I152,I243,@3454,I107,I109,@3493| 3514:S25|494e54434f4445434f4e5328292e7075744279746573283429 3515:C9,192|00822d1b00014d00b6000e0e0e0c0003293b4d01aa000e0e0e0c000303033c0218293b4d0299000e0e0c00033c2a4d018e000e0e0e0c000364030329020e291b00014d037a000e0e0e0c0003292e4d046e000e0e0e0c00032f3c4d0162000e0e0e0c000303033b024f303b4d0251000e0e0c0003293c4d0146000e0e0e0c0003030331020b3128ff4d0534000e0c0003291b00014d0628000e0c0003323c4d051e000e0e0e0c00032a2a344d071100220c0e0e7b050c000466440e0e0e0e0e0e|@3516,I110,I229,I231,I106,@3452,I107,I109,@3444| 3516:S25|494e54434f4445434f4e5328292e67656e4279746573283329 3517:C13,216|00802b352c360359293b4d00ca000e0e0e0c00030316294d01bd000e0e0c0002293b56472f0e0e0e7e0500035618292b4d02a4000e0c000329353c4d0399000e0e0c000303162936294d018b000c0002293b5677320e0e0e7e0800034d04780010293c69562b0e0e0e0c000229354d0566004d0662000e0e0e0c00030a01000b0047004d07510010024a2936563a2a2a4d0844000e0c000356595669293b4d0936000e0e0e0c0003293c4d0a2a000e0e0e0c00032c3b2b4d0b1d000e0e0c0004503b2707020e29362a372a2a5667310e7e07000365420e0e|@3519,I234,I111,@451,I229,@3520,-1,I107,@3522,@3518,I253,I106,I255| 3518:O1|@3524 3519:S31|494e5447434f444528292e636f646567656e2835296c6f6361646472283129 3520:O3|@7141,@228,@3521 3521:S26|6c6f63616464723a2062616420737461636b2061646472657373 3522:O3|@7141,@228,@3523 3523:S44|6c6f63616464723a20696c6c6567616c20757365206f66207374617469632d6c696e6b2066756e6374696f6e 3524:C9,184|00812c2c4d00b0000e0c0003291b00014d01a4000e0c0003032d2c3b3f4d0297000c00042d4d038f000c0002284d2f4d0485000e0e0c0003502b2f4d0479000e0e0c000365022e2c3b28054d0269000e0e0c00042d4d035f000c0002284e2f4d0455000e0e0c0003502b3d304d0548000e0c0004652d35293b4d063b000c00033b3d314d0531000e0e0c00043023082b2f69322308293b4d061d000e0e0c00032b2a692d3b2b4d070e000e0e0e0c0004503b270a430e0e0e|@3526,@3525,I234,@3448,@3488,@3452,@3444,I253,I255| 3525:O1|@3527 3526:S26|494e54434f4445434f4e5328292e67656e526563526566283229 3527:C11,224|00812c2307293b4d00d5000e0e0c0003294d01cb000c00024d02c4000e0c00020356294d01b9000e0e0c00024d02b0000e0c000203062935296402054d03a00010293b4d0099000e0e0c000329352a362a3b4d048a000e0e0e0c000303054d057e0010294d0678002a6929344d077000220c0e0e7e0c00032e2309293b4d005f000c000329293b4d0455000e0e0c000303033b022129352a3632230b2b230b2a2a4d083b000c00036503033c0207292503511e2d3b656403033b0213302309302b692a3b2b4d0917000c0004503b653b326929324d070800330e0e0e7e0a0003|@3529,I253,I105,I218,@958,I229,@3530,-1,@3528,I251,I255| 3528:O1|@3532 3529:S26|494e54434f4445434f4e5328292e636f6465436f6e7374283229 3530:O3|@7141,@228,@3531 3531:S28|63736567416464723a206e6f74206120636f6465207365676d656e74 3532:C3,32|00813b2c38293b4d0015000e0e0c00033b2a310e0e4f01070050000466430e0e|@3534,I253,@3533| 3533:C8,176|00822c3b4d00a8000e0c00030375560729230b562729230b293b4d0192000e0e0e0c0003293c4d0286000e0e0e0c00032d3b2b4d0379000e0e0c0004505667293856872938293b4d0165000e0e0c0003220d3b69293b4d0056000e0e0e0c000303032a020c3b2b0e0e4f044300d00002642e3b2b4d0338000e0c0004502211270d022b2c352d362d2b4d0523000c000303032f02182f3c4d0215000e0e0c0003292b300e0e4f0607005100046465440e|@3536,I229,I253,I106,I255,@3537,@3535,@3533| 3534:S30|494e54434f4445434f4e5328292e616464436f6e7374546f566563283229 3535:O1|@3538 3536:S42|494e54434f4445434f4e5328292e616464436f6e7374546f56656328322966696e64436f6e7374283329 3537:C3,48|00802b3b4d0028000e0c000303091201000100f3ff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1884,I229,@3537| 3538:C4,96|00812c354d0058004d0154000e0c000303262c362c354d0046004d0142000e0e0e0c0003030e2c362a2a4d0232002f0e7e0600033b6402262c362c353b4d011f000c000303162c362a230b2a230b2a2a4d020c00310e0e0e7e0800033b64430e|@3539,-1,I229,I251| 3539:S26|494e54434f4445434f4e5328292e73616d65436f6e7374283229 3540:C11,224|00812c3b4d00d8000e0c000303033b02cc2c3529354d01c7004d00c3000c000303b629362a372f362a354d02b2004d00ae000e0e0e0c000303622a362923074d039d000e0e0c00020336293656693c2b2b4d048b000c000456884d0582002b692a322b4d0679000e0e0c000430220e220d0c0003302e56e722100e0e7e1000034d075c002f322d569b3156b868072a3c2b3456aa220c0e7b060a00052a4d053f004d053b00323b569c0c00065658566b293b4d082a000e0e0e0c00033c2a692c312b4d061a000e0e0e0c00042f220d220c220e0e7e0e00034d09040010430e0e|@3542,I229,-4,-7,I218,@3418,-1,@3543,@3548,I253,@3541| 3541:O3|@7141,@228,@3550 3542:S37|494e5447434f444528292e636f646567656e28352967656e4d757475616c44656373283229 3543:O1|@3544 3544:C14,392|00822d35293b4d007e010e0e0e0c000329353b4d0171010e0e0c000303054d02660110293630362a3b4d005b010c0003312a4d0352010e0e0e0c0003640349303b4d0343010c000303033c02182a3b4d0035010e0e0c0003312a4d042a010e0e0e0c00036403054d051d0110303c4d0616010e0e0e0c00032b2a324d070901330e0e0e7b050a00042a3b4d00fa000e0e0e0c0003293e4d08ee000e0e0e0c0003323c4d06e2000e0e0e0c00032a2a4d09d6000e0e0e0c000303032a020129293c4d06c4000e0c0003292840304d0ab8000e0c0004293b2d4d07ad000e0e0c000450303b4d00a1000e0e0c00033b2a4d0696000e0e0e0c00032b3b4d008a000e0e0e0c00032a2a4d097e000e0e0e0c00036503054d05710010313c2c3c2d4d0b67000c0006504d0c5f002b69343b2b4d0756000e0e0e0c000450220f3b4d0348000e0c000303033c02182b3b4d0039000e0e0c000322102a4d042d000e0e0c00036403054d05210010220f3c4d0619000e0e0c00032c2a22114d070c0022120e7b051200040e0e0e0e|@3546,I253,I229,@3545,I234,I231,@52,I106,I255,I108,I233,I11,I195,-1| 3545:O3|103,@373,@3547 3546:S22|5374726574636841727261792e757064617465283329 3547:S39|417474656d707420746f207570646174652061206c6f636b656420737472657463684172726179 3548:C3,56|0080560c561b562a293b4d002a000e0e0e0c00033c2a692d2d2b4d011a000e0e0e0c0004566956782a2a56a7220c0e0e7e0b00030e0e0e0e|@3549,I253,@3543| 3549:S46|494e5447434f444528292e636f646567656e28352967656e4d757475616c44656373283229646f52657374283129 3550:S63|67656e4d757475616c446563733a206d757475616c206465636c61726174696f6e206c69737420636f6e7461696e73206e6f6e2d6465636c61726174696f6e 3551:C3,48|00812c384d0028002d5639564a2d68052e354d011a002b69303956582c322d2d2d56b70e0e0c00063b2707430e0e0e0e|@3553,@3554,@3552| 3552:C1,16|00802b352c3656272d0e0e0e7e030003|@3563| 3553:S33|494e5447434f444528292e636f646567656e28352967656e536c50726f63283229 3554:C9,176|00812c3b4d00a8000e0c0003030956073c2a2e6a640292560a292e4d0191000e0e0c000329352a360369293b4d0280000e0c00030311294d0375000e0e0c00023b2a316a64024a5638292b4d0461000e0e0c000329353c4d0055000e0e0c000303112936294d0347000c00023b2a346a65021d29354d0537004d0033000c0003030929363c2a336a6402054d062100106502152e3c4d0717000c00032a2a696456492f0e7d07000266430e0e0e0e0e0e|@3556,I229,@3557,I234,I111,@451,-1,@3555,I106| 3555:O3|@7141,@228,@3562 3556:S42|494e5447434f444528292e636f646567656e28352967656e536c50726f632832296c6f6164536c283229 3557:O1|@3558 3558:C8,136|00812c4d0081000e0e0c00024d0178000e0c000203692c3529354d026a004d0366000e0e0e0c0003033a29362a372b382c392c2c2c2c6b3236323c4d0349000e0e0c000303032a0217323c4d0439000e0e0c00032a2a4d052e00220c7e0c0003270602182d362d3c4d041c000e0c00032a2a4d051200300e7e0700036402054d06050010430e0e0e|@3560,I105,I218,-5,I229,I107,@3557,@3559| 3559:O3|@7141,@228,@3561 3560:S47|494e5447434f444528292e636f646567656e28352967656e536c50726f6328322966696e64436c6f73757265283229 3561:S24|66696e64436c6f737572653a2062616420436c6f73757265 3562:S28|6c6f6164536c3a206d697373696e672064656356656320656e747279 3563:S42|494e5447434f444528292e636f646567656e28352967656e536c50726f632832296c6f6164536c283129 3564:C19,752|00832e2307293b4d00e5020e0e0c00036403054d01d902102e383b2a4d00d0020e0c00036403722e36561a3b2b2b4d02be020e0e0e0c000431354d03b2022b693339566a2c2e2d2d2d56c90e0e0c000656882a2a4d0498020e0c000356a756b7293b4d058a020e0e0e0c0003293c4d067e020e0e0e0c00032c3b2b4d0771020e0e0c0004502212030b3b221222110e0e7d1400023b270e06da2e36561a3c2b2b4d024c020e0c000431354d0842023339566a2c2e2d2d2d56c90c0006220d383b2a293b4d0029020e0e0c000303032a021629362b3c4d0617020c0003292b25042504511e223b6565293c4d0602020e0e0e0c0003220f07cb56b82811282128523d3f2f2f4d09e8010e0c000856d756e7293b4d05da010e0e0e0c0003293c4d06ce010e0e0e0c00032c3b2b4d07c1010e0e0c00045012120001000200332a4d04ae010e0e0e0c0003121400010002002815282428453b28073b2f4d0992010e0e0e0c000812160001000100293b4d057f01020275010c00033b221b0e0e0c00022a4d0a6b010c0002293b121c00010006000c00033b222038293c0e0e0e160b004e011f0000000003121e0001000200293b3c4d0c3a010e0e0e0c00042a4d0d2f01020259000c0002286c2c4d0e21010e0e0c0003122200010002003c3b2b4d0f0e010e0e0e0c00041224000100010012250001000100293b4d05f4000e0c0003293c4d10ea000e0e0e0c00032c3b2b4d07dd000e0e0c0004503b271c02ca56b82d2a4d04ca000e0e0e0c000356d756e7293b4d05ba000e0e0e0c0003293c4d06ae000e0e0e0c00032c3b2b4d07a1000e0e0c00045022163829293b4d0091000e0e0c000303033b022429352a362a4d117e004d117a00221a3b121b00010005000e0c000650292503511e303b6564121400010002002867286828693d3f220e2f4d094c000e0c00081216000100010012170001000100293b4d0534000e0c0003220d3c4d1029000e0e0c00032a2a4d101e000e0e0e0c00032d3b2b4d0711000e0e0c0004503b270f270b1f040e0e0e0e|@3566,I229,@3567,@3418,@3569,@3571,I253,I106,I255,@3574,@3438,I111,@3580,@3448,@3488,@3452,@3565,I107,-1| 3565:O1|@3587 3566:S31|494e5447434f444528292e636f646567656e28352967656e50726f63283429 3567:O3|@7141,@228,@3568 3568:S28|737461746963206c696e6b206e6f7420616c6c6f7765642068657265 3569:C2,16|008056074d0008002a6964420e0e0e0e|@3570,-1| 3570:S45|494e5447434f444528292e636f646567656e28352967656e50726f632834296c6f61645265634c696e6b283129 3571:O1|@3572 3572:C19,496|00812c4d00e9010e0e0c000203252c4d00dd010e0e0c000203032c02054d01cf0110294d02c9014d03c5010e0e0c00036402013b07d32c4d00b5010e0e0c000203032c02054d04a70110293b4d05a0010e0c000303104d0696012a4d0791010e0e0c000302012929404d0883010c0003031e2d3b3c4d0977010c00042e4d0a6f010c00022840304d0b6501317e080003293f4d0c5a010e0e0e0c0003032a283b2a4d074b010c00032e3b3c4d0941010e0e0c00042f4d0a37010c00022b314d0b2e01320e7e090003291b00014d0520010e0c0003032a2d3b3d4d0913010c00042e4d0a0b010c00022828304d0b01010e0e0c00032c314d0bf600320e7e0900032d3b3e4d09e900020229000e0e0c00042e4d0adb000c0002281b304d0bd1000e0e0c00032c3d324d0dc500330e0e0e7b050900044d0eb8002d69292d4d0fb0000e0c0003291b00014d05a4000e0c0003032d2d3b3f4d0997000c00042e4d0a8f000c0002284d304d0b85000e0e0c0003502b304d0b79000e0e0c000365022e2d3b28054d0969000e0e0c00042e4d0a5f000c0002284e304d0b55000e0e0c0003502b3d314d0d48000e0c0004652e35293b4d103b000c00033b3d324d0d31000e0e0c00043123082b2f69332308293b4d101d000e0e0c00032b2a692d3b2b4d110e000e0e0e0c0004503b270b430e0e0e|@3573,I105,@395,32768,I250,@395,I234,@181,I106,I229,@3448,@3488,@3452,I232,@3444,-1,@3528,I253,I255| 3573:S26|494e54434f4445434f4e5328292e70757368436f6e7374283229 3574:O1|@3575 3575:C2,16|00802b352c364d0006002d0e7e030003|@3577,@3576| 3576:O1|@3578 3577:S40|494e5447434f444528292e636f646567656e28352967656e50726f632834296c6f6164536c283129 3578:C4,56|00810403002d3b4d002d000e0e0c000303172c3c4d0120000e0c00032a3b454d021500462a47510208293b452e462d47502964430e0e0e0e|@3579,I229,I107,-1| 3579:S40|494e5447434f444528292e636f646567656e28352967656e50726f632834296c6f6164536c283229 3580:C10,128|00812c3b4d0078000e0c000303033b026d2c352d362a4d0166004d0162004d025e003b577b0c000657382815282428453b2807342f4d0347000c000857575767293b4d043a000e0e0e0c0003293c4d052e000e0e0e0c00032c3b2b4d0621000e0e0c000450343c4d0715000e0e0c0003312a0e0e0e4f080700b10003270a430e|@3582,I229,-1,@3581,@3438,I253,I107,I255,I106,@3580| 3581:O1|@3583 3582:S43|494e5447434f444528292e636f646567656e28352967656e50726f632834296c6f61644974656d73283229 3583:C2,8|00804d000200100e|@3585,@3584| 3584:O3|@7141,@228,@3586 3585:S35|494e5447434f444528292e636f646567656e2835296d617463684661696c6564283129 3586:S40|636f646567656e3a20756e68616e646c6564207061747465726e2d6d61746368206661696c757265 3587:C11,120|00823b2e4d0070000e0c000303033b02272d4d0162004d025e000e0e0e0c00034d0354002a4d044f000c00034d0548004d0644002b6a65102c230a2d230a293b4d0734000e0c000329324d082a000e0e0e0c00032c3b2b4d091d000e0e0c0004503036293b344d090e000e0e0e0c0004503b2706440e0e0e|@3589,I234,-1,@355,@3588,@344,@7141,@228,I253,I106,I255| 3588:S23|7265736574537461636b3a20626164206f666673657420 3589:S27|494e54434f4445434f4e5328292e7265736574537461636b283329 3590:C46,3152|00845607293b4d00460c0e0e0e0c000331354d013a0c4d02360c0e0e0e0c00030a16006b09f10412034d0471033b0517034d028403c80af4033f00bf07bf030b0937022e0045036f073500e0035908b40a4d03fb0b1006d13b2f0e0e0e0c000206c9313632373c28403b4d04e20b0e0e0e0c00044d05d80b2a567956883056a768062c220c220c2c220c340e0e0c0006220c4d06ba0b4d07b60b0e0e0e0c0003032c56775687293b4d00a40b0e0c0003293c4d029a0b0e0e0e0c00032c3b2b4d088d0b0e0e0c0004503b270402013b5689293b4d00790b0e0e0c00032903033b020f56a83d2a4d09660b0e0e0e0c00036456b7293b4d00570b0c000329220c4d0a4d0b0e0e0c00036503033b02054d0b3e0b1056c9293b3b4d08340b0e0c000450313b4d00290b0204c509c3090c000329293b4d07190b0e0e0c000303033b027329352a36121200010002002b3b4d07fe0a0e0e0e0c000303043b50024d294d0ced0a0e0e0c00022a35293b4d00e00a0e0c00032e293b4d07d50a0e0e0c000303043b50022329352a362a3b4d00c00a0e0c0003292e324d0db50a0e0e0c00042b250526041e30260426042a250426031e7f3b666434221522152215221522140e0c0006121100010002002f3b4d077f0a0c000303033b024f294d0c720a0e0e0e0c00022a35293b4d00640a0e0c000332293b4d07590a0e0e0c000303033b022529352a362a3b4d00450a0e0e0c0003292e324d0d390a0e0e0c00042b250526041e303b270427041213000100030012140001000300293b4d00140a0e0c00036403033202013b2a3b2b4d08020a0e0e0e0c0004503b271206ce3136323733382b2b2b6a293434569a0c0004270406dc3136323729354d0ed6094d07d2090e0e0e0c000303772936292307293b4d07bf090c0003032e2a36567d3c2b2b4d0faf090c0004569c4d06a6092b692a322b4d109d090e0e0c0004302d56eb0e0c0003270602362b4d0687094d068309220c220c340e0e0e0c0006567c5687293b4d006e090e0e0e0c00033c2a692c322b4d105e090e0e0e0c00042705650235294d064e094d064a093333320c0006565c5667293b4d003a090e0e0e0c00033c2a692c302b4d102a090202c6070e0e0e0c000427056506d44d1117091031363237333834392c2c2c2c6b220c3b0202a2074d07fe080e0e0e0c000303033b020729568e0e0c0002270506ca313632372a4d06df084d06db083333320e0c000656582814282328353b2805302f4d12c3080c0008270406d03136293b4d13b40832567f0e0e0c00056406d2313656382a2a4d149f080c000356575667293b4d0092080e0e0e0c0003293c4d1586080e0e0e0c00032c3b2b4d0879080e0e0c0004503b270706d03136323733382b2b2b220d220d220d220d120d0001000a000e0e0e0c00086606d531363b2a0202e5060e0e4f163f084000026506d1313632373b3b2b0e0e0e4f172b086000025677293b4d0020080202bc060e0c00035698294d0c11080e0e0c00022a35293b4d0004080e0c0003292e316a296801220c2215221522152d221402028a060e0e0e0c0006270d06cb31362e4d18d907020275060e0e0c00024d19cc070e0c000203062e35296402054d1abc071029352a362b373b2e2b0e0e0e4f1bab079000035697293b4d00a00702023c060e0c0003292f4d0a92070e0e0e0c0003654d1987070c000203325697293b4d007a07020216060e0e0e0c0003292f4d026a07020206060e0e0e0c000356c82a3b2b4d1c57070c0004260502023b5056982e2a4d1d46070e0e0e0c0003270806d23136294d0635074d0631073232310e0e0e0c00065648293b3c4d1e1f070c00042a4d0c17070202b3050c000228102c4d1f09070e0e0c00035689293b3c4d08fb060c0004503b270706ca3136323733385658293b3c4d1ee3060c00042a4d0cdb060c000228782c4d1fd1060e0e0c0003569756a7293b4d00c2060e0e0e0c0003293c4d15b6060e0e0e0c00032c3b2b4d08a9060e0e0c000450313b2a3b4d079b060c000303032902132a352b362a2c692a2a2505250526031e1d3b66653b2a0e0e4f207706f00002293b2a3b4d076c06020208050e0c000303032902132a352b362a2c692a2a2505250526031e223b6665220e4d0645064d0641062217221722160c00061213000100020028052a4d092a060202c6040e0e0e0c000312150001000100293b22154d0811060e0e0c00045012160001000300293b3b4d08fd050e0e0c00045012170001000200293b4d21ea050e0e0e0c000330293b4d07dd050e0e0c000303033b027329352a36121c00010002002b3b4d07c2050e0e0e0c000303043b50024d294d0cb1050e0e0c00022a35293b4d00a4050e0c00032e293b4d0799050e0e0c000303043b50022329352a362a3b4d0084050e0c0003292e324d0d79050e0e0c00042b250526041e30260426042a250426031e7f3b6664121a00010002004d2254050e0c000222164d064a054d06460522202220221f0e0c0006121c0001000200313b4d072f050c000303033b024f294d0c22050e0e0e0c00022a35293b4d0014050e0c000334293b4d0709050e0e0c000303033b022529352a362a3b4d00f5040e0e0c0003292e324d0de9040e0e0c00042b250526041e303b27042704121e0001000300293b3b4d08ca040e0e0e0c0004503b271c06de5628293b3c4d1eb5040e0e0c00042a4d0cab040c0002286d2c4d1fa1040e0e0c000356675677293b4d0092040e0e0e0c0003293c4d1586040e0e0e0c00032c3b2b4d0879040e0e0c0004503b270806cf313629352a362b383b2a293b4d075e040e0e0e0c000303032a021629362b3c4d154b040c0003292b25042504511e233b65653e2a4d2336040e0e0e0c00032d2d4d022a040e0e0e0c00032928054d151d040e0e0c00032b2a4d2412040e0e0e0c00036603172d220d220d220d220d120d0001000c000e0e0c0006021a2d220d220d220d220d120d0001000d0002027e020e0e0e0c0006270506d031363b2a293b4d07ca030e0e0e0c000303032a021629362b3c4d15b7030c0003292b25042504511e233b65652a293b4d07a10302023d020e0e0c000303033b022029352a362a4d068a034d068603220d220d220c0e0c00062a250426031e303b666456582867286828693d3f302f4d1262030e0e0e0c000856775687293b4d0052030e0e0e0c00032f3c4d0246030e0e0e0c00032a2a4d023a030e0e0e0c00032d3b2b4d082d030e0e0c0004503b270a06d331365638293b3e4d1e17030c00042a4d0c0f030c00023f2c4d1f06030202a2010e0e0e0c0003502c3d2d4d25f4020e0c00045056675677293b4d00e5020e0e0c0003293c4d15da020e0e0e0c00032c3b2b4d08cd020e0e0c0004503b270806ca313632373338294d06b7024d06b3023434330e0c0006502a35404d07a4020e0c0003038b2a36293b2a3b4d0794020e0c0003030202742a352b362a4d0683024d067f0222102210220f0e0e0c00065056a82815282428453b2807312f4d1262020e0e0e0c00085056b756c7293b4d0051020202ed000e0e0c0003293c4d0242020e0e0e0c00032c3b2b4d0835020e0e0c000450303c4d1529020e0e0c00032f2a250a250a26081e7e2608513b6402972a4d060e024d060a023434330c0006505658293b3e4d1efa01020296000e0e0e0c00042a4d0ceb010c000228082c4d1fe1010e0e0c0003502e3d2d4d25d4010e0c00045056875697293b4d00c5010e0e0c0003293c4d02ba010e0e0e0c00032c3b2b4d08ad010e0e0c00045056c756d7293b4d009d010e0e0c0003293c4d0292010e0e0e0c00032c3b2b4d0885010e0e0c0004503b270b6602193136294d0672014d066e013232310c00066402054d26610110314d065b014d0757010c000303bc2a3c4d154c010e0c00035647293b4d0040010e0c0003292c4d0236010e0e0e0c00035679293b4d0028010e0c00036403033c020a293b4d0a18010e0c000303033b0264294d060a014d2406010e0e0e0c00030326294d06f9004d27f5000e0e0c00034d28ec002a4d29e7000c00034d2ae0004d2bdc002b6a6510294d06d3004d07cf000c0003031156783b2a4d14c2000e0e0e0c000364020e56782a3c2b4d1cb0000e0c0004645687293b304d08a2000e0e0e0c0004503b2706028e5637293b4d008e000e0e0e0c0003292d4d0282000e0e0e0c00035669293b4d0074000e0c00036403033c020a293b4d0a64000e0c000303033b0240293b4d2455000e0e0c00030326294d0649004d2745000e0e0c00034d2c3c002a4d2937000c00034d2a30004d2b2c002b6a651056682a3b2b4d1c1f000c0004645677293b314d0812000e0e0e0c0004503b2705661f050e0e0e0e0e|@3592,I253,-11,I107,@3593,I11,@3595,-1,I229,I255,@3596,I113,@3601,@3488,@3450,-7,@3418,@3543,@3603,@3438,@3605,@3571,I106,@3608,@3610,I105,I218,@3615,@3617,@3565,@3621,@3448,@3452,@3624,@3625,@3628,I108,I234,@3444,@3631,@355,@3591,@344,@7141,@228,@3591| 3591:S23|67656e6364653a206261642061646a7573746d656e7420 3592:S30|494e5447434f444528292e636f646567656e28352967656e636465283529 3593:O3|@7141,@228,@3594 3594:S40|67656e6364653a2063616e277420636f64652d67656e657261746520476c6f62616c2076616c7565 3595:C14,208|0080560b293b4d00c6000e0e0e0c0003562a2a2a4d01b8000e0c0003293b4d02ae000e0e0e0c00030326294d03a1004d049d000e0e0c00034d0594002a4d068f000c00034d0788004d0884002b6a65105648293b4d0078000e0c00036403033c020a293b4d0968000e0c000303033b021056492a3b2b4d0a56000e0e0e0c000464565b566a2a3b2b4d0b44000e0c00045056793d2a4d0c37000c00035698293b3c4d0b2b000c00045056a756b7293b4d001d000e0e0c00032d2a692c3b2b4d0b0e000e0e0e0c0004503b270e420e0e0e|@3597,I253,I107,I234,-1,@355,@3598,@344,@7141,@228,I113,@3565,I255,@3596| 3596:O1|@3599 3597:S49|494e5447434f444528292e636f646567656e28352967656e636465283529552d6e65774d617463684661696c466e283129 3598:S34|67656e6364652028416c744d61746368293a206261642061646a7573746d656e7420 3599:C10,192|00812c28764d00b7000c0003030c2c3e4d01ac000e0c0003034e2b3b3e4d029f000c00042c4d0397000c00022e2e4d048e000e0e0e0c00033b2f4d0482000e0e0e0c00032f35293b4d0574000e0c0003294d066b004d0767000c0003322a4d085e00340e7e0b00032b4d0353000c00022d2d4d044a000e0e0e0c00033b2e4d043e000e0e0e0c00032e35293b4d0530000e0c0003294d0627004d0723000c0003312a4d081a000e0e0e0c0003323c3b4d020d000e0e0c00042a2708430e0e0e0e|@3600,I230,I229,@3448,@3488,@3452,I253,-1,I106,@3475| 3600:S37|494e54434f4445434f4e5328292e7075744272616e6368496e737472756374696f6e283229 3601:O3|@7141,@228,@3602 3602:S23|67656e6364653a2062616420737461636b2076616c7565 3603:O3|@7141,@228,@3604 3604:S45|67656e6364653a204d757475616c44656373206f6e6c7920616c6c6f77656420696e73696465204e6577656e76 3605:O1|@3606 3606:C1,8|00803b420e0e0e0e|@3607| 3607:S35|494e5447434f444528292e636f646567656e28352967656e636465283529552d283129 3608:C6,168|00802b3b4d00a0000e0c000303033b02942b352c362a354d018d004d0089000e0e0c000303152a3656382a2a12070002000b000e0e0c000365025e2a354d0267004d0063000c00030319562856372c4d0355004d0351002d2d56950e0e0c0006650236293b4d003f000c00030316562a5639564856572e2d2d2d2d56b50c000627040215562856372c3b4d031a002d2d56950e0e0e0c0006652a0e0e0e4f04070031000266420e0e|@3609,I229,-9,-4,-1,@3608| 3609:S43|494e5447434f444528292e636f646567656e28352967656e636465283529552d636f64654c697374283129 3610:C4,48|00802b3b4d0028000e0c000303033b021d2b352c362a0e0e0e4f0113002100022a4f020b003100022a2a69292705420e|@436,I229,@3611,@3610| 3611:C7,104|00802b354d0060004d015c000e0c0003034a2b362c37562856372b4d0249004d0245002d2d56950e0e0c000650574c5757293b4d0331000e0e0c00033c2a692c312b4d0422000e0e0e0c0004505787293b4d031300220d0e7e0c00034d050800100e0e0e0e0e0e0e|@3613,-4,I229,-1,I253,@3543,@3612| 3612:O3|@7141,@228,@3614 3613:S45|494e5447434f444528292e636f646567656e28352967656e636465283529552d67656e4c6f6f70417267283129 3614:S29|67656e4c6f6f704172673a206e6f742061206465636c61726174696f6e 3615:O3|@7141,@228,@3616 3616:S27|4e6f20426567696e4c6f6f7020666f72204c6f6f7020696e737472 3617:C12,200|00812c3b4d00c0000e0c000303332b3b4d00b4000e0c000303225707293b4d01a6000e0e0e0c00031203000100f9ff2a2a4d029300300e0e7e0700034d038800102c352d362d4d047e000e0e0e0c00024d0574000e0c000203642d3656382c4d0665004d0661002c3b56950e0e0c00062c2c0e0e0e4f074f0061000357682817282528253c3b2f2f4d083c000e0c00085057775787293b4d012d000e0e0c0003293c4d0222000e0e0e0c00032c3b2b4d0915000e0e0c0004502e270902054d0a06001065430e0e0e|@3619,I229,I253,I107,@3618,I105,I218,-1,@3617,@3438,I255,@3618| 3618:O3|@7141,@228,@3620 3619:S43|494e5447434f444528292e636f646567656e28352967656e636465283529552d6c6f616441726773283229 3620:S30|6c6f6164417267733a204d69736d61746368656420617267756d656e7473 3621:O1|@3622 3622:C10,152|00812b4d0091000e0e0c00022c35293b4d0184000e0c000329304d027a000e0e0e0c0003291b00014d036c000e0c00030319281e304d045f000c00032a314d0456000e0e0e0c000364023a2806304d0446000e0e0e0c00033b314d043a000e0e0e0c00032b3f4d052e000e0e0e0c00034d0624000e0c0002293d344d0719000e0e0c000466303c3b4d080c00330e0e7b050900040e0e0e0e|@3623,@3488,I253,I107,I234,@3452,I106,I111,@3444,@3448| 3623:S25|494e54434f4445434f4e5328292e6a756d706261636b283229 3624:C8,120|00802b3b4d0070000e0c000303033b02612b352c36572828762a4d015a000e0e0e0c000357475757293b4d024a000e0e0e0c0003293c4d033e000e0e0e0c00032c3b2b4d0431000e0e0c00045056885697324d0522004d051e002d2d56f50e0e0e0c0006324f060f00b10002312a6929270d420e0e0e0e0e|@436,I229,@3596,I253,I106,I255,-1,@3624| 3625:O1|@3626 3626:C11,208|00812c230a293b4d00c5000e0e0c0003293b4d01ba000e0e0e0c0003654d02af000c00022903042817020228142e3b2b4d039c000e0c00042f4d0493000c00023035293b4d0088000e0c000329324d057e000e0e0e0c0003293f4d0672000e0e0e0c0003293b4d0766000e0e0e0c000303033c0218293b4d0855000e0e0c00033c2a4d074a000e0e0e0c000364030329020a293f4d0538000e0c0003293d4d012e000e0e0e0c000327054d0222000e0e0e0c00020310280e314d0913000c0003501e813b02013b2704430e0e0e0e0e0e|@3627,I253,I113,I218,@3448,@3488,I106,I110,I229,I231,@3452| 3627:S29|494e54434f4445434f4e5328292e616c69676e4f6666576f7264283229 3628:O1|@3629 3629:C2,32|00803b2c4d0018000e0c000328ff2d4d000d000e0e0c00033b65420e0e0e0e0e|@3630,@3452| 3630:S33|494e54434f4445434f4e5328292e67656e456e746572496e744361746368283129 3631:O3|@7141,@228,@3632 3632:S41|67656e6364653a2063616e277420636f64652d67656e657261746520436f64654e696c2076616c7565 3633:C10,616|0086314d0061024d005d022f2f56590e0e0c000656183e2a4d014c020e0c0003563a564a293b4d023e020e0e0e0c0003293c4d0332020e0e0e0c00032c3b2b4d0425020e0e0c000450220d354d0518024d0614020e0c00030380220e3b220d220d220d56c90c000656882f3b4d06f8010e0c000303033b024f294d07ea010e0e0e0c00022a35293b4d02dc010e0c000332293b4d06d1010e0e0c000303033b022529352a362a3b4d02bd010e0e0c0003292e324d08b1010e0e0c00042b250526041e303b2704270456a7293b3b4d0497010c0004503b270406dd220e220d220d220d220d56c90e0e0e0c0006220d4d0076014d0672010e0e0e0c0003032c568a569a293b4d0260010e0c0003293c4d0356010e0e0e0c00032c3b2b4d0449010e0e0c0004503b270402013b5697293b4d0235010e0e0c00032903033b020f56b83d2a4d0122010e0e0e0c00036456c8333b4d0613010c000303033b024f294d0706010e0e0e0c00022a35293b4d02f8000e0c0003220d293b4d06ec000e0c000303033b022529352a362a3b4d02d9000e0e0c0003292e324d08cd000e0e0c00042b250526041e2f3b2704270456e7293b3b4d04b3000202ab000c00045022152215221522152215121500010003000e0e0e0c000612110001000100293b4d0287000c000312130001000200303b4d0677000c000303033b024f294d076a000e0e0e0c00022a35293b4d025c000e0c000333293b4d0651000e0e0c000303033b022529352a362a3b4d023d000e0e0c0003292e324d0831000e0e0c00042b250526041e303b27042704121500010001003303032c02013b2a3b2b4d040b000c0004503b270f27071f07|@3634,-1,@3596,I253,I107,I255,-2,I229,@3488,@3450| 3634:S31|494e5447434f444528292e636f646567656e28352967656e436f6e64283729 3635:C20,848|00822d353b2a293b4d0044030e0c000303032a021629362b3c4d0133030c0003292b25042504511e213b65653b303629354d021b034d0017030c000307cf29362a372e293b4d0007030c000303033b022029352a362a4d03f6024d03f202220e3b56ec0e0e0c00062a250426031e2a3b66642a036a2b3b4d04d5020e0e0c000303112b4d05c9020e0e0c00023b2a3b6a64024a567a292d4d06b5020e0e0c000329353c4d00a9020e0e0c000303112936294d059b020c00023b2a3b6a65021d29354d038b024d0087020c0003030929363c2a3b6a6402054d077502106502092b3c69568b0e0c000229354d0362024d085e020e0e0e0c00030a01007000570029362a3756a7293b4d0945020202a3000e0e0c000356c82a2d2f2c4d0a32020e0e0e0c000556e756f7293b4d0922020e0e0e0c0003293c4d0116020e0e0e0c00032c3b2b4d0b09020e0e0c0004503b270a025c29362a372a2a56c90e0e0e0c00033b4f0ceb01b00002660243293656982a2a4d0ddb010c000356b756c7293b4d09ce010e0e0e0c0003293c4d01c2010e0e0e0c00032c3b2b4d0bb5010e0e0c0004503b0e0e0e4f0ca701f000022707270406d72c3b4d0098010e0c000303033c024731362929354d0e86014d0082010e0e0e0c000303033c022e29354d0f71014d006d010e0e0c000303033c021a293528064d005b010c0003030c2936292502501e3c3b6402013b6503452c293b4d003f010c000303033b022029352a362a4d032e014d032a01220c3b56cc0e0e0c00062a250426031e2a3b66643236294d030f014d030b01343b56bc0c000665028d3136294d03fa004d03f600333b56ac0e0e0e0c00062e293b4d00e5000e0e0c000303033b022429352a362a4d03d2004d03ce00220e3b56ec02025a000e0e0c00062a250426031e303b666456782813282228293b280b342f4d10a5000e0e0c0008569756a7293b4d0996000e0e0e0c0003293c4d018a000e0e0e0c00032c3b2b4d0b7d000e0e0c0004503b27093b4f0c6f005000026456582d287e4d0462000e0e0e0c000303033b02054d115300103b2b4d124c000e0c00032f3c4d0142000e0e0e0c0003292d4d1236000e0e0e0c000356a756b7293b4d0926000e0e0e0c000329220c4d0819000e0e0c00032c3b2b4d0b0d000e0e0c0004503b270e440e0e0e|@3637,I229,I106,-5,-1,I234,I111,@451,@3638,I107,I253,@3640,I255,@3643,@3518,-3,-7,@3438,@3636,@3452| 3636:O3|@7141,@228,@3648 3637:S31|494e5447434f444528292e636f646567656e28352967656e4576616c283329 3638:O3|@7141,@228,@3639 3639:S37|7374617469634c696e6b56616c75653a206d697373696e672064656356656320656e747279 3640:O1|@3641 3641:C14,400|00832c2c4d0088010e0c00032e280f4d017d010e0e0c0003032e3d304d0170010e0c0003031f2f28114d0163010c00030310291b00014d0256010e0e0e0c000302013b02013b02013b03a92c28054d033e010e0e0e0c0003502c3b28054d042f010c00042d4d0527010c0002284f2f4d061d010e0e0c0003502b2f4d0611010e0e0c0003502e35293b4d0703010c00033b3d324d08f9000e0e0c00043123082b3069332308293b4d07e5000e0e0c00032b2a692d3b2b4d09d6000e0e0e0c00045022103d4d0ac8000e0c00032928104d0bbd000e0e0c00032922124d0cb1000e0e0c00032922114d06a50022120e0e0e7e1400032c28094d0395000e0e0c0003502c3b28094d0487000c00042d4d057f000c000228162f4d0675000e0e0c0003502b3d304d0868000e0c0004502e35293b4d075b000c00033b3d324d0851000e0e0c00043123082b3069332308293b4d073d000e0e0c00032b2a692d3b2b4d092e000e0e0e0c00045022103d220f4d081e000e0e0e0c000450220f3d220f4d080e0022100e0e0e7b051100040e0e0e0e|@3642,@3525,I232,I234,@3625,@3448,@3488,@3452,I253,@3444,I255,I107,I108,I106| 3642:S26|494e54434f4445434f4e5328292e67656e43616c6c536c283429 3643:C12,168|00805608294d009f004d019b000c0003032e5718293c4d028e000e0e0e0c00032a3b3c4d0381000e0e0c00042b4d0477000c0002280c2d4d056d00327e0800033b3b57390e0c00035623293d4d0658000e0c00035747293b4d074c000e0c0003293c4d0842000e0e0e0c0003577e56832a2a4d0832000e0e0e0c00032c2a4d0626000e0e0e0c000357b8312b2b4d0917000c000457dd293b3c4d0a0b000c0004503b270e420e0e0e|@3645,-1,I229,@3625,@3448,@3488,@3452,I106,I253,I107,@3644,I255| 3644:O1|@3646 3645:S45|494e5447434f444528292e636f646567656e28352967656e4576616c28332963616c6c436c6f73757265283129 3646:C8,424|00822d1b00014d009e010e0e0e0c000303102c1b00014d008e010e0e0e0c000302013b07cf2d3e4d017d010e0e0c00030a01004700eb002b3e4d026b010c00032c3b3e4d0361010e0e0c00042d4d0457010c0002287b2f4d054d010e0e0c000331304d0542010e0e0e0c000331314d053601320e7e0a000306cb2c3d4d0128010e0c00030a01003b0065002b3d4d0217010c00032c3b3d4d030d010e0e0c00042d4d0403010c0002287d2f4d05f9000e0e0c000330304d05ee00310e7e090003025a2b3c4d02e0000e0c00032c3b3c4d03d5000e0e0c00042d4d04cb000c0002287f2f4d05c100307e0800032b3c4d02b600020264000e0e0e0c00032c3b3c4d03a5000e0e0c00042d4d049b000c000228802f4d059100307e080003023a2b3d4d0284000e0c00032c3b3d4d0379000e0e0c00042d4d046f000c0002287e2f4d056500020211000e0e0c000330304d055600310e7e09000302462b28054d0247000c00032c3b28054d033c000e0c00042d4d0433000c0002287c2f4d0529000e0e0c0003313d314d061d000e0e0c0004313d324d061100330e0e0e7b050a0004440e0e0e0e0e0e0e|@3647,I234,I107,@3625,@3448,@3488,@3452,@3444| 3647:S28|494e54434f4445434f4e5328292e67656e5461696c43616c6c283329 3648:S35|67656e456e746572496e7443616c6c3a20746f6f206d616e7920617267756d656e7473 3649:C21,640|00842f3929354d0076024d0172020e0e0e0c000303033b02012f3137294d025f024d025b02323256890c00063c28403b4d034c020e0c00043435220c362a2a4d043d020e0e0c0003220e36293b4d052f020c00036403033b0269220e3656982a2a4d061b020c000356b84d0412022a4d060d020e0e0c000356d8293c4d0700020e0c00032a3b3c4d08f5010e0e0c00042b4d09eb010c0002280c2d4d0ae1010e0e0c0003121300010002003b2a4d0acf010c00033e2b4d0ac6010e0e0e0c00033b270d56982b3d4d0bb5010e0e0c00033e2a4d0caa010e0e0e0c00032b3b2b4d089d010e0e0c00042c4d0993010c0002402e4d0a8a010e0e0e0c0003303d304d0d7d010e0e0c00041211000100040012120001000400293b4d0e64010e0c0003293c4d045a010e0e0e0c00032c3b2b4d0f4d010e0e0c00045012150001000200294d093b010c00022a35293b4d0e30010e0c000322103c4d0c25010e0e0c0003293d4d0b1a010e0e0e0c00033b2922144d100c010e0c000303033b0227121c00010002002b2a4d11f6000e0e0e0c0003502a3c4d0ce9000e0e0c0003292503511e333b656422213929354d00d2004d01ce000e0e0e0c000303033b021329221b222222222222122200010003000c0006121e0001000100293b3b4d0fa2000e0e0e0c0004503b2225381612009200210000000002221b3b4d0e85000e0e0c0003122200010002002a3b4d0173000c000303033b024f294d0966000e0e0e0c00022a35293b4d0e58000e0c00032d293b4d014d000e0e0c000303033b022529352a362a3b4d0e39000e0e0c0003292e324d132d000e0e0c00042b250526041e303b2704270412240001000100293b3b4d0f0e000e0e0e0c0004503b27241f050e0e|@3651,-2,I229,-1,I11,I107,I113,@3571,@3625,@3448,@3488,@3452,I108,I106,@3444,I253,I255,I233,@3652,@3650,@3450| 3650:C10,288|00802b3b4d0018010e0c000303033b06cc2b3529352a362e3656405650293b4d01fd000e0e0c00035777293b4d01f0000e0c00036403033b020f57783d2a4d02de000e0e0e0c00036457882b2b2b4d03ce000e0e0e0c00042e3b2b4d04c1000e0e0c00045056a3294d05b4004d00b0000e0c0003032c57ba57ca293b4d01a0000e0c0003293c4d0696000e0e0e0c00032c3b2b4d0489000e0e0c0004503b270402013b3b33293b4d0075000e0e0c000303033b021c29352a362a0e0e0e1607005e0012000000000250292503511e283b656457e7293b3b4d04450002023f000e0e0c00045056f312110001000300121200010002001213000100010022112d2d2d2d121900020003000c000622100e0e0e1608000a001600010000022714420e|@3656,I229,I253,@3596,@3657,I255,-1,I107,@3655,@3650| 3651:S36|494e5447434f444528292e636f646567656e28352967656e44656e736543617365283529 3652:O1|@3653 3653:C2,16|00812c3d2d4d0007002e0e7b05040004|@3654,@3444| 3654:S24|494e54434f4445434f4e5328292e67656e576f7264283229 3655:C10,144|00801201000200e7ff571b29362e2a4d007d000e0e0c0003293d4d0172000e0e0e0c00032d2a4d0266000e0e0e0c000358683d2b2b4d0357000c00041209000200e5ff2a2a4d0447000c000366033d5868294d053a000e0e0e0c00022a35293b4d062c000e0c0003120b000200e7ff2a2a4d071b000c000358c82a3d322c4d080e0022130e0e0e7b061000053b270642|@3662,I107,I108,@3663,@3506,I113,@3488,I253,@3661,@3493| 3656:S50|494e5447434f444528292e636f646567656e28352967656e44656e73654361736528352967656e4561636843617365283129 3657:O1|@3658 3658:C3,32|00822c3b4d0018000e0c000303032d020c3b2e0e0e4f01070010000264440e0e|@3660,I229,@3659| 3659:C3,40|00802b3b4d0020000e0c00030304560802142b352c36290e0e4f010b002100022b2a69292704420e|@1884,I229,@3659| 3660:S27|494e54434f4445434f4e5328292e6c696e6b4c6162656c73283329 3661:O1|@3666 3662:S65|494e5447434f444528292e636f646567656e28352967656e44656e73654361736528352967656e456163684361736528312967656e456163684d61746368283129 3663:O1|@3664 3664:C2,16|00812c2c4d0008000e0c00032964430e|@3665,I106| 3665:S25|494e54434f4445434f4e5328292e61646472506c7573283229 3666:C2,16|00812c2c4d0008002d0e0e0e7e040003|@3667,I107| 3667:S26|494e54434f4445434f4e5328292e616464724d696e7573283229 3668:C9,264|00842f3929354d00fe004d01fa000e0e0e0c000303033b02012f3c28403b4d02e6000e0e0e0c00043b3338293c4f03d7006000035668293b3b4d04cb000c000450220d3929354d00be004d01ba000e0e0e0c000303033b023b220e392931220f220f220f56e90e0e0e0c000656a856b8293b4d0592000e0e0e0c00036403032e02013b2a3b2b4d047e000e0e0e0c0004503b27042f3b4d056e000e0e0e0c000356a72a3b4d0160000e0c000303033b024f294d0652000e0e0e0c00022a35293b4d0544000e0c00032d293b4d0139000e0e0c000303033b022529352a362a3b4d0525000e0e0c0003292e324d0719000e0e0c00042b250526041e303b27042704270b1f050e0e0e0e|@3670,-2,I229,I11,@3669,I255,I253,@3488,@3450| 3669:C12,368|00812c3b4d0068010e0c000303032b06d02c3529352a362f363b2b0e0e4f014f015000025663567956885697312d2d2d2d57f90e0e0c000657b8293b4d0230010e0c000356d3294d0325014d0021010e0e0c0003032c57ea57fa293b4d0210010e0c0003293c4d0406010e0e0e0c00032c3b2b4d05f9000e0e0c0004503b270402013b56f21211000100fcff293b4d02de000e0e0e0c00032e03033b0213121300020001003d2a4d06c5000e0e0c000364121400020001002b2b2b4d07b1000e0e0c00042e3b2b4d05a5000e0e0c0004501216000200010022103b4d009100020287000e0e0c000303033b024f294d087e000e0e0e0c00022a35293b4d0270000e0c00032213293b4d0064000e0c000303033b022529352a362a3b4d0251000e0e0c0003292e324d0945000e0e0c00042b250526041e2f3b2704270412180002000200293b3b4d0526000e0e0e0c000450221a03033402013b22152a0e160a000e001c00010000032719430e0e0e0e0e|@3672,I229,@3671,I253,-1,I107,I255,@3596,@3657,@3488,@3450,@3669| 3670:S37|494e5447434f444528292e636f646567656e28352967656e53706172736543617365283529 3671:C16,368|00802b3b4d0068010e0c000303054d015e01102b352c363b2a4d0053010c0003573b2937575857672b4d0243014d023f012d2d58c90c00065887312a4d0330010e0c000330030428e5020228e64d041f010c000258b72a2a4d0314010e0c000358d7293c4d0508010e0c00032a3b3c4d06fd000e0e0c00042b4d07f3000c0002280c2d4d08e9000e0e0c0003121300030001003b2a4d08d7000c00033e2b4d08ce000e0e0e0c0003121600030001003e2a4d09bb000c00031218000300040012190003000400293b4d0aa4000e0c0003293c4d0b9a000e0e0e0c00032c3b2b4d0c8d000e0e0c000450221803032d027622190e0e0e160d0076001d0001000002121d00030001002f3b4d0063000c000303033b024f294d0756000e0e0e0c00022a35293b4d0a48000e0c000332293b4d003d000e0e0c000303033b022529352a362a3b4d0a29000e0e0c0003292e324d0e1d000e0e0c00042b250526041e303b270427042b66271b420e0e0e0e0e0e0e|@3674,I229,@3673,-1,@3571,I189,@3625,@3448,@3488,@3452,@3596,I253,I107,I255,@3671,@3450| 3672:S48|494e5447434f444528292e636f646567656e28352967656e5370617273654361736528352963617365436f6465283229 3673:O3|@7141,@228,@3675 3674:S61|494e5447434f444528292e636f646567656e28352967656e5370617273654361736528352963617365436f6465283229707574496e4361736573283129 3675:S21|707574496e43617365733a206e6f206c6162656c73 3676:O3|@7141,@228,@3677 3677:S35|67656e456e746572496e7450726f633a20746f6f206d616e7920617267756d656e7473 3678:C8,208|00862e2d4d00c8000e0c0003030c2c2e4d00bc000e0c000302013b03372f2d4d01ad000e0e0c000329304d02a2000e0e0e0c00032d3b3c4d0395000e0e0c00042e4d048b000c00022b304d058200310e7e0d00033b2d4d0076000e0e0e0c0003030c2c28fe4d0067000c000302013b032b2b3b3d4d0358000e0c00042c4d044f000c0002322e4d0546000e0e0e0c00032f2f4d053a00300e7e0c00032b3b3e4d032d000e0e0c00042c4d0423000c0002332e4d051a000e0e0e0c00032f3d304d060d00310e0e0e7b050c00040e0e0e0e|@3679,I232,I106,I107,@3448,@3488,@3452,@3444| 3679:S21|494e54434f4445434f4e5328292e67656e31283729 3680:O2|@4018,@7329 3681:C31,1072|00802b230c2c230e2d35293b4d0020040e0c00032928084d0115040e0e0c0003293b4d020a040e0e0e0c000303033c0218293b4d03f9030e0e0c00033c2a4d02ee030e0e0e0c000364030329020a2928084d04db030c0003293b4d05d2030e0e0e0c000327044d06c6030e0e0e0c00020310280e2e4d07b7030c0003501e753b02013b2e35293b4d00a5030e0e0c00033b2808324d0898030e0c000431230b293b4d008b030c00033335293b4d0080030e0c0003293b4d0376030e0e0e0c0003293c4d026a030e0e0e0c000303032a020b2a28074d0958030e0c00032928084d0a4d030e0e0c0003292f4d0442030e0e0e0c0003293f4d0436030e0e0e0c000322112308293b4d0026030e0e0e0c0003220c22144d0b18030e0c00032a293b4d020d030e0e0c000303033b021429352a362a2d0e0e0c00022a250426031e203b66642d4d0ce9020e0e0c000203032d02054d0ddb02102928413b4d0ed2020e0e0e0c00043b2a693c28402b4d0ec1020e0e0c0004221923072a68012a3b2b4d0fae020e0e0e0c000450221b37221c35293b4d009b020c00032b2f2b3b4d1090020e0c0005221028084d1184020e0c0003292a32122200010003000e0e0e0c000422103c4d0969020e0e0c00032928084d115d020e0e0c000322193c4d0451020e0e0c0003292b220d122600010003000e0e0c000422163c4d0435020e0e0c00032928084d1129020e0e0c00033b2a2210122900010003000e0e0c0004220f3b4d000d020e0e0c00032935293b4d0200020e0c000303232a362928424d12f1010e0e0c00033c2b6922143b2b4d0fe1010e0e0c0004503b6602054d13d30110222b39294d14ca014d15c6010e0e0e0c000303033b020129221e3d4d04b3010c000322152a2c4d16a8010e0c00043b223038293b4d009a010e0e0e0c00033c2a0e0e0e1617008a013300000000032233230b293b4d007a010e0e0e0c0003293b4d056e010e0e0e0c000365034a221a3b4d005e010e0e0e0c00032935293c4d0250010e0c000303272a36293d4d1242010e0e0e0c00034d1838012b69221f3b2b4d0f2e010e0e0e0c0004503b6602054d191f01106502013b2234230629640325221b3b4d000b010c000329352a362a3b4d02fe000e0e0e0c000303054d1af200102966023c221b3b4d00e6000e0e0e0c000329352a362a3b4d02d6000e0e0e0c000303054d1aca0010293c3b2b4d0ec1000e0e0c0004294d1bb7000c00022a270622352a4d1caa000e0e0e0c000322320398223639221e2a22322237123a00010002000c0005223838293b4d0083000c0003223328204d0478000e0c0003292b293b4d026c000e0c000303033b025029352a362c3c4d1d59000e0e0c0003223d0e0e0e0c00022809223e0e0c00022c223f124200010001000e0e0e0c00034022400e0e0c00023028084d0425000e0e0c0003292f2509250926071e5a3b27076540223a0c0002270602013b2b2735420e0e0e|@3683,I253,I110,I229,I231,I106,I113,I218,@3452,@3444,I107,I109,@3684,I105,@395,I11,I255,@3457,I108,I200,@3695,I48,I24,@3697,@3703,-1,@3708,@3530,I47,@3682,@355| 3682:O1|@3710 3683:S25|494e54434f4445434f4e5328292e636f7079436f6465283129 3684:O1|@3685 3685:C3,24|00814d0012002c2e6a4d010b002a6964430e0e0e0e0e0e0e|@3687,@3688,@3686| 3686:C1,16|00802b352c3656272d0e0e0e7e030003|@3694| 3687:S34|494e54434f4445434f4e5328292e6669787570436f6e7374616e744c6f6164283229 3688:C11,128|008156073d2e2b4d0075000e0e0c0004293b4d016a000e0e0e0c000303033b02054d025b00105638303d4d0352000e0e0e0c00032a2a4d0446000e0e0e0c00033b2a4d053a000e0e0e0c00030310294d062d004d0729000e0e0c000302013b03033b02054d0818001056772b3d220d2c4d090c00220e0e7b060c00050e0e0e0e|@3690,@3506,I229,@3691,I106,I107,I232,65536,I234,@3689,@3493| 3689:O3|@7141,@228,@3693 3690:S37|494e54434f4445434f4e5328292e6669787570436f6e7374616e744c6f6164283229283229 3691:O3|@7141,@228,@3692 3692:S35|6669787570436f6e7374616e744c6f61643a20616c72656164792066697865642d7570 3693:S55|6669787570436f6e7374616e744c6f61643a20636f6e7374616e7420746f6f2064697374616e74202831362d626974206f666673657429 3694:S37|494e54434f4445434f4e5328292e6669787570436f6e7374616e744c6f6164283229283129 3695:O3|@7141,@228,@3696 3696:S37|63736567436f6e76657274546f436f64653a206e6f7420612062797465207365676d656e74 3697:O1|@3698 3698:C19,200|00822d3b4d00c0000e0c00032935293c4d01b4000e0c000303a62a36294d02a7000c0002293b4d039e000e0e0e0c000303104d0492002a4d058d000e0e0c0003020129313b4d037f000c000303033c020b29324d0671000e0e0c00030341314d0765004d0861000e0e0c00032a4d0757004d0853000c0003293b694d0949002a692c2a694d0a40002a6927054d0b38000e0c00024d0c30004d0d2c002b6a10314d0e24000e0c000203033102054d0f1700102c2a334d100f00340e7b050b00044d110400100e0e0e|@3700,I253,I229,I15,I234,@181,I106,I232,-1,@355,@3469,@3701,@369,@7141,@228,I105,@395,I255,@3699| 3699:O3|@7141,@228,@3702 3700:S23|434f44455f5345472e63736567507574576f7264283329 3701:S19|63736567507574576f72643a20496e64657820 3702:S41|63736567507574576f72643a206e6f7420616e20756e6c6f636b656420636f6465207365676d656e74 3703:C9,128|00812b3b4d0078000e0c000303033b026d2b352c362a354d0165004d0061000e0e0c000303402a36563729312c4d024f000c0004565729230b567729230b293b4d033c000e0c0003293c4d0432000e0e0e0c00032d3b2b4d0525000e0e0c0004503b270902013b2f3c4d0613000c0003292c0e0e0e4f0707005100032704430e|@3705,I229,-1,@3704,I253,I107,I255,I106,@3703| 3704:O1|@3706 3705:S42|494e54434f4445434f4e5328292e636f7079436f64652831297075744c6f63616c436f6e737473283229 3706:C11,152|00822d2307293b4d008d000e0e0c0003294d0183000c00024d027c000e0c000203062935296402054d036c00103035293b4d0063000c0003293b4d045a000e0e0e0c0003293c4d054e000e0e0e0c000303032a020b2a28074d063c000e0c00032928084d0731000e0e0c000329220c4d0825000e0e0c0003293d4d081a000e0e0e0c0003302a220e4d090c00220f0e7b050f00040e0e0e0e|@3707,I253,I105,I218,@958,I231,I229,I107,I109,I106,@3697| 3707:S28|494e54434f4445434f4e5328292e636f6e73744c6162656c73283329 3708:O3|@7141,@228,@3709 3709:S47|63736567436f6e76657274546f436f64653a206e6f7420616e20756e6c6f636b656420636f6465207365676d656e74 3710:C4,64|00813b2d2309293b4d0034000e0c000329293b4d0129000e0e0c000303033b021829352a362a0e0e0e4f0213006000022a250426031e243b662704430e0e0e0e|@3712,I253,I229,@3711| 3711:C13,224|00802b230b3b2d38293b4d00d2000e0e0e0c00033c2a293b4d01c4000e0c000303033b022829352a362c2b0e0e4f02af009000032d3c4d03a6000e0e0e0c0003292c2506250626041e323b2704652d3b4d008c000e0c0003293b4d0482000e0e0e0c000364036f302307293b4d0070000e0c0003294d0567000c00024d0660000e0c000203062935296402054d07500010293b4d0049000e0e0c00032935293c4d013c000e0c000303232a36293d4d082e000e0e0e0c00034d0924002b692e3b2b4d0a1b000c0004503b6602054d0b0f0010270502013b2705420e0e0e0e0e0e|@3714,I253,I229,@3713,I106,I113,I105,I218,@958,I200,-1,I255,@3708| 3712:S29|494e54434f4445434f4e5328292e6669784f7468657252656673283229 3713:C7,112|00812b353b4d0067000c0003035c2b3657182a230b2a230b2a2a4d0152000e0e0e0c000366033f561757272a302b4d023e000e0e0e0c000456445654293b4d032e000e0e0e0c0003293c4d0422000e0e0e0c00032c3b2b4d0515000e0e0c0004503b270702013b6402013b430e0e0e0e|@3715,I229,I251,@3704,I253,I107,I255| 3714:S38|494e54434f4445434f4e5328292e6669784f7468657252656673283229666978526566283129 3715:S57|494e54434f4445434f4e5328292e6669784f74686572526566732832296669785265662831297075744e6f6e4c6f63616c436f6e7374283229 3716:O2|@3718,@3717 3717:O2|@3736,@3735 3718:C29,560|00812c353b4d0027020c000303262c36292306296403064d01150202044d020f022d0e0e0e0c00022a3929642e2e0e0e7d0600022c36294d03f5010e0e0c0002036a294d03e9010e0e0c000203032902054d04db0110293b4d05d4010e0c000303104d06ca012a4d07c5010e0e0c00030201294d08b9012f0e0c00022a3c4d09ae010e0e0e0c0003300c00024d0aa001310c00022c4d0b97014d0993010c0003320c0002282933337d0b0002294d037f010c000203054d0c7601102928662a4d0d6d010e0e0c0003030a4d0e62012e2e7d060002294d0f57010c0002293e4d104e010e0e0e0c0003293d4d1142010e0e0e0c000365031d2956370e0e0e0c00024d122c012a4d1327010c0003642e2e0e7d060002294d0f17010c0002293e4d100e010e0e0e0c0003293c4d1102010e0e0e0c000365030d292e4d14f3002f0e0e7e060003294d0fe7000c0002293e4d10de000e0e0e0c0003293b4d11d2000e0e0e0c0003650318294d15c4000e0c00023c2a4d16ba000e0e0e0c00036402013b039e293b4d17a8000e0c0003294d039f000c00024d1898000e0c00020376294d038d000e0e0c000203054d198200102928662a4d0d79000e0e0c00034d1870000e0c00020325294d0f65000e0e0c0002293e4d105a000e0e0e0c0003293d4d114e000e0e0e0c00036502013b031a2956570c00024d1a38002a4d1333000c00036430300e7d0800022b304d1b2200310e7e0800032a2f4d1b1600300e7e070003292e4d1b0a002f0e7e0600030e0e0e0e|@3720,I229,@3721,@3722,I105,@395,I234,@181,I106,@3723,@355,@403,-1,@398,I150,@3724,I17,I243,I251,@3721,@344,@3725,I15,I248,I253,I218,@398,@3722,@3719| 3719:O1|@3731 3720:S27|494e54434f4445434f4e5328292e7072696e74436f6e7374283229 3721:S6|636f64653a09 3722:S6|636c6f733a09 3723:S7|73686f72743a09 3724:S9|52545320656e747279 3725:O1|@3726 3726:C12,112|00812c4d0069000e0e0c0002293b4d015e000e0e0e0c000303104d0252002a4d034d000e0e0c0003020129293c4d043f000c0003030a4d0536002e2e7d060002294d062b004d0727000c00034d0820002a4d091b000c0003294d0a13004d090f000c0003652e2e0e7d0600020e0e0e0e|@3728,I15,I234,@181,I106,I229,@3729,-1,@355,@3730,@344,@3727| 3727:S6|20776f726473 3728:S27|494e54434f4445434f4e5328292e7072696e744279746573283229 3729:S13|62797465733a093120776f7264 3730:S7|62797465733a09 3731:C12,112|00812c4d0069000e0e0c0002293b4d015e000e0e0e0c000303104d0252002a4d034d000e0e0c0003020129293c4d043f000c0003030a4d0536002e2e7d060002294d062b004d0727000c00034d0820002a4d091b000c0003294d0a13004d090f000c0003652e2e0e7d0600020e0e0e0e|@3733,I15,I234,@181,I106,I229,@3734,-1,@355,@3732,@344,@3727| 3732:S6|6c6f6e673a09 3733:S27|494e54434f4445434f4e5328292e7072696e74576f726473283229 3734:S12|6c6f6e673a093120776f7264 3735:O2|@3738,@7329 3736:C9,104|00802b4d0061000e0e0c0002293b4d0156000e0e0e0c000303104d024a002a4d0345000e0e0c0003020129293c4d0437000c00032e2a56570e0c00032a2a4d0426000e0e0e0c0003294d051b000c000203032902054d060f0010312a4d0708000e0c000329270742|@3737,I15,I234,@181,I106,I107,I105,@395,I253| 3737:S27|494e54434f4445434f4e5328292e6e616d654f66436f6465283129 3738:C3,32|008128082c4d0017000c00033b3b3b0e0e4f010b0030000365430e0e0e0e0e0e|@3740,I108,@3739| 3739:C12,192|00812b28084d00b7000c000303032c02a95707293b4d01a7000c0003294d029f000c0002290c0001664d0393000c0002032956042928084d0485000e0e0c0003292e4d057a000e0e0e0c0003293c4d056e000e0e0e0c000366020e5604292d4d045d000e0e0c00036456182a4d0650000e0c000203032a02054d074300102a2a4d083c000e0c0003301b00014d0930000e0c0003292b4d0426000e0e0e0c0003313c4d041a000e0e0e0c00032a2a0e0e0e4f0a0b008100032707430e0e0e0e0e|@3741,I229,I253,I189,I218,I106,I107,I105,@395,I252,I108,@3739| 3740:S31|494e54434f4445434f4e5328292e6c6f6164436f6e7374436f756e74283229 3741:S43|494e54434f4445434f4e5328292e6c6f6164436f6e7374436f756e742832296c6f61644279746573283229 3742:O3|@3743,@7331,@7330 3743:C25,1536|0083402c0e0c00022e4d00f3054d01ef050c00030308283f2d0c000202062e2d0e0c00024d02d8052e0c00023c28403b4d03cc050e0c00043c28403b4d03c0050e0c00043b3b2c3b4d04b4050e0c000329220c4d05a9050e0e0c00036407d22c3b4d049b050c0003293c4d0692050e0e0e0c0003340c00022d3b4d0482050e0e0e0c0003294d0777050c00024d0870050e0c000203112935292d4d0962050e0e0e0c00036402013b6403463d28093b0e0e4f0a4b05b000042e3b4d0442050e0e0e0c0003294d0737050c00024d0830050e0c000203132936303b2b4d0b21050e0e0c0004503b6402054d0c1305106506cf2809220c0c00022f3b4d0402050e0e0e0c000322102a4d0df5040e0e0c0003313b4d04ea040e0e0e0c0003293c4d0ede040e0e0e0c0003333b2b4d0bd1040202c7040e0e0c00045056e82c3b4d05bf040c000303033c0218293b4d04b1040e0e0c00032d2a4d0fa6040e0e0e0c00036403054d109904102c3c4d0e92040e0e0e0c00032a2a4d0486040e0e0e0c0003296622110e0c000256f72d3b4d0570040e0c000303033c0218293b4d0461040e0e0c00032e2a4d0f56040e0e0e0c00036403054d104904102d3c4d0e4204020225040e0e0e0c00032a2a4d0432040e0e0e0c00032965293c4d1124040e0c000303033b06cb2e3d4d1215040e0e0c000303302e3e4d1208040e0c000303242e28764d12fb030c000303182e28054d12ef030c0003030c2e281a4d11e3030c0003031d293c4d13d8030e0c00032928093b0e160a00ca031600000000046406d32e28064d12ba030e0e0e0c000303242e28074d12ab030c000303182e287a4d129f030c0003030c2e28094d1193030c000303143c28093c0e0e0e160a00820315000000000406da2e281e4d1173030c0003038c280922140e0e0e0c0002220e3b4d045d030e0e0c0003293c4d135203020233030e0e0e0c000322103b4d0441030e0e0c0003221a2a4d0d35030e0e0c00032b2a4d132a030e0e0e0c0003293c4d061e030e0e0e0c0003221a0e0e0e0c000222143b4d0409030e0e0c0003293c4d0efe020e0e0e0c000322163b2b4d0bf0020202d1020e0c0004503b270906dd2e28124d11db020c000303313d2809161400ce021400000000033d282c0e0e161400be021500000000033d282c0e0e161400ae021600000000036506d42e280b020283024d119a020e0e0e0c000303353d28093b0e0e0e160a0086021500000000043d282c0e0e16140076021500000000033d282c0e0e16140066021600000000036506cb2e28164d1156020e0e0e0c000303403d28091614004602140000000003503d282c3b160a003602150000000004503d282c0e1614002602140000000003503d282c0e161400160214000000000306ce2e28594d1107020202e8010c000303243d28093b0e0e0e160a00f201150000000004503c282c0e161400e20114000000000306cb2e284f4d11d3010202b4010c000303303c2809161400c201140000000003503d282c3b160a00b201150000000004503c282c0e161400a20114000000000306d72e404d119401020275010e0c00030372220d3b4d0483010c00033b3d2b0e0e16150076011600000000033d28090e0e161400660117000000000322113b4d0459010e0e0c00033b3b292e4d164c010e0c000303033b022729020223010e0e0e16170036011a000000000250293c4d0e29010e0e0c0003292502501e323b64270706d22e287c4d1111010202f2000e0e0c000303213d2809161400fe001400000000033d282c0e0e161400ee001500000000036402ca2e287b4d11de000e0e0e0c000303253c2809161400ce001400000000033c282c0202a6000e0e161400ba001500000000036402962e284d4d11aa000e0e0e0c0003032d3c28091614009a0014000000000350293c4d138d000e0e0c000329282c3b0e160a007e0016000000000464025a2e284e4d116e000e0e0e0c000303313d28091614005e0014000000000350293c4d1351000e0e0c000329282c3b020229000e160a003e0016000000000464021a293c4d132f000c00032928090e0e161400220015000000000364270840220d0e0e0e0c00022604060050fa3b6602013b3b27081f04|@3745,I48,I24,@3746,I11,I253,I234,@355,I105,I218,I113,@3747,I255,@3753,@3483,I106,I231,@52,I229,I230,I107,@3755,@3758,I233,@3744| 3744:C7,128|00804d007a0056170e0c00021202000100e9ff5621293b4d0165000e0e0c0003564a3b3d2c4f0257007000032e2a4d034e000e0e0e0c0003293c4d0442000e0e0e0c000356970e0e0e0c0002569156a1293b4d012a000e0e0e0c0003293d4d031e000e0e0e0c00032c3b2b4d0511000e0e0c0004503b270d420e0e0e0e0e0e0e|@3760,@3761,I253,@3759,I106,@355,I255| 3745:S26|494e54434f4445434f4e5328292e7072696e74436f6465283429 3746:S2|3a0a 3747:C7,192|00825601293b4d00b6000e0e0e0c0003562a3b312c4f01a7005000035651293b4d009c000e0c00032b2a4d0292000e0e0e0c000329220d4d0285000e0e0c000334032b569056a0293b4d0073000c00032c2a4d036a000e0e0e0c00032c3b2b4d045d000e0e0c0004503b270402013b220d56b70e0e0c00022b3c4d0542000e0e0e0c000356c70e0e0e0c000256c156d1293b4d002a000e0e0e0c00032922144d021d000e0e0c00032c3b2b4d0411000e0e0c0004503b2710440e0e0e0e0e0e0e|@3749,I253,@3750,I106,@3748,I255,@355| 3748:O1|@3751 3749:S38|494e54434f4445434f4e5328292e7072696e74436f64652834297072696e7444697370283329 3750:C7,96|008156022c4d0057000c00032d3c4d014e000e0e0e0c0003030329023b2d3c4d023d000e0e0c00032d3c4d0332000e0e0e0c00032a2a0e0e0e4f042300410003291b00014d0518000e0c0003292e4d030e00320e7e09000364430e0e0e0e0e0e|@3510,@3483,I229,I107,I106,@3750,I108| 3751:C5,80|00812b3b4d0048000e0c000303052c3b6902372b352c362e2b4d0133000c000303072e2e69296402202e2b4d0221000e0e0c000303032d02102e2a4d0311000e0e0c00032b2a69296565430e0e0e0e0e|@3752,I229,I234,I113,@3748| 3752:S33|494e54434f4445434f4e5328292e7072696e74436f64652834296164644c283229 3753:O3|@7141,@228,@3754 3754:S36|7072696e74436f64653a20696e646972656374696f6e206c69737420636f6e6675736564 3755:C6,104|00812b56170c00025611293b4d0058000e0c0003563a3b312c4f014b00600003293c4d0242000e0e0e0c000356770e0e0e0c000256715681293b4d002a000e0e0e0c000329220e4d031d000e0e0c00032c3b2b4d0411000e0e0c0004503b270b430e0e0e0e0e0e0e|@3757,I253,@3756,@355,I106,I255| 3756:C7,96|008156012c4d0057000c00032d3c4d014e000e0e0e0c0003030329023b2d3c4d023d000e0e0c00032d3c4d0332000e0e0e0c00032a2a0e0e0e4f042300410003291b00014d0518000e0c0003292e4d030e00320e7e09000364430e0e0e0e0e0e|@3510,@3483,I229,I107,I106,@3756,I108| 3757:S36|494e54434f4445434f4e5328292e7072696e74436f64652834297072696e744f70283229 3758:C7,96|0081560a2c4d0057000c00032d3c4d014e000e0e0e0c0003030329023b2d3c4d023d000e0e0c00032d3c4d0332000e0e0e0c00032a2a0e0e0e4f042300410003291b00014d0518000e0c0003292e4d030e00320e7e09000364430e0e0e0e0e0e|@3510,@3483,I229,I107,I106,@3758,I108| 3759:C7,96|008156002c4d0057000c00032d3c4d014e000e0e0e0c0003030329023b2d3c4d023d000e0e0c00032d3c4d0332000e0e0e0c00032a2a0e0e0e4f042300410003291b00014d0518000e0c0003292e4d030e00320e7e09000364430e0e0e0e0e0e|@3510,@3483,I229,I107,I106,@3759,I108| 3760:S43|494e54434f4445434f4e5328292e7072696e74436f6465283429552d552d7072696e74456e747279283129 3761:S2|0a09 3762:S13|3c554e4b4e4f574e203235353e 3763:S8|656e746572496e74 3764:S11|3c554e4b4e4f574e20313e 3765:S4|6a756d70 3766:S9|6a756d7046616c7365 3767:S11|3c554e4b4e4f574e20343e 3768:S10|64656c48616e646c6572 3769:S5|6a756d7049 3770:S10|6a756d704946616c7365 3771:S11|3c554e4b4e4f574e20383e 3772:S11|64656c48616e646c657249 3773:S10|63617365537769746368 3774:S6|63616c6c536c 3775:S11|63616c6c436c6f73757265 3776:S7|72657475726e57 3777:S3|706164 3778:S12|3c554e4b4e4f574e2031353e 3779:S7|72616973654578 3780:S9|67657453746f726557 3781:S8|6e6f6e4c6f63616c 3782:S6|6c6f63616c57 3783:S9|696e64697265637457 3784:S10|6d6f7665546f56656357 3785:S7|63616c6c536c58 3786:S12|736574537461636b56616c57 3787:S6|726573657457 3788:S8|7265736574525f77 3789:S9|636f6e737441646472 3790:S9|636f6e7374496e7457 3791:S10|696f566563456e747279 3792:S8|636f6e73744e696c 3793:S8|6a756d704261636b 3794:S7|72657475726e42 3795:S12|3c554e4b4e4f574e2033323e 3796:S9|67657453746f726542 3797:S6|6c6f63616c42 3798:S9|696e64697265637442 3799:S10|6d6f7665546f56656342 3800:S12|736574537461636b56616c42 3801:S6|726573657442 3802:S7|72657365745242 3803:S9|636f6e7374496e7442 3804:S7|6c6f63616c5f30 3805:S7|6c6f63616c5f31 3806:S7|6c6f63616c5f32 3807:S7|6c6f63616c5f33 3808:S7|6c6f63616c5f34 3809:S7|6c6f63616c5f35 3810:S7|6c6f63616c5f36 3811:S7|6c6f63616c5f37 3812:S7|6c6f63616c5f38 3813:S7|6c6f63616c5f39 3814:S8|6c6f63616c5f3130 3815:S8|6c6f63616c5f3131 3816:S10|696e6469726563745f30 3817:S10|696e6469726563745f31 3818:S10|696e6469726563745f32 3819:S10|696e6469726563745f33 3820:S10|696e6469726563745f34 3821:S10|696e6469726563745f35 3822:S7|636f6e73745f30 3823:S7|636f6e73745f31 3824:S7|636f6e73745f32 3825:S7|636f6e73745f33 3826:S7|636f6e73745f34 3827:S8|636f6e73745f3130 3828:S8|72657475726e5f30 3829:S8|72657475726e5f31 3830:S8|72657475726e5f32 3831:S8|72657475726e5f33 3832:S11|6d6f7665546f5665635f30 3833:S11|6d6f7665546f5665635f31 3834:S11|6d6f7665546f5665635f32 3835:S11|6d6f7665546f5665635f33 3836:S11|6d6f7665546f5665635f34 3837:S11|6d6f7665546f5665635f35 3838:S11|6d6f7665546f5665635f36 3839:S11|6d6f7665546f5665635f37 3840:S12|636f6e737441646472585f62 3841:S12|636f6e737441646472585f77 3842:S8|63616c6c536c4358 3843:S7|72657365745f31 3844:S7|72657365745f32 3845:S10|67657453746f72655f32 3846:S10|67657453746f72655f33 3847:S10|67657453746f72655f34 3848:S12|3c554e4b4e4f574e2038353e 3849:S11|6e6f6e4c6f63616c4c5f31 3850:S11|6e6f6e4c6f63616c4c5f32 3851:S11|6e6f6e4c6f63616c4c5f33 3852:S7|63616c6c536c43 3853:S7|696f5665635f35 3854:S14|6f70636f64655f696f5665635f36 3855:S12|3c554e4b4e4f574e2039323e 3856:S12|3c554e4b4e4f574e2039333e 3857:S12|3c554e4b4e4f574e2039343e 3858:S12|3c554e4b4e4f574e2039353e 3859:S12|3c554e4b4e4f574e2039363e 3860:S12|3c554e4b4e4f574e2039373e 3861:S12|3c554e4b4e4f574e2039383e 3862:S12|3c554e4b4e4f574e2039393e 3863:S8|7265736574525f31 3864:S8|7265736574525f32 3865:S8|7265736574525f33 3866:S6|7475706c6557 3867:S6|7475706c6542 3868:S7|7475706c655f32 3869:S7|7475706c655f33 3870:S7|7475706c655f34 3871:S4|6c6f636b 3872:S5|6c64657863 3873:S9|696f5665635f323235 3874:S9|696f5665635f323236 3875:S9|696f5665635f323239 3876:S9|696f5665635f323333 3877:S9|696f5665635f323336 3878:S9|696f5665635f323531 3879:S9|696f5665635f323533 3880:S9|696f5665635f323535 3881:S10|73657448616e646c6572 3882:S13|3c554e4b4e4f574e203131393e 3883:S11|7075736848616e646c6572 3884:S13|3c554e4b4e4f574e203132313e 3885:S11|73657448616e646c657249 3886:S6|7461696c6262 3887:S4|7461696c 3888:S6|7461696c3362 3889:S6|7461696c3462 3890:S7|7461696c335f32 3891:S7|7461696c335f33 3892:S13|3c554e4b4e4f574e203132393e 3893:S13|3c554e4b4e4f574e203133303e 3894:S13|3c554e4b4e4f574e203133313e 3895:S13|3c554e4b4e4f574e203133323e 3896:S13|3c554e4b4e4f574e203133333e 3897:S13|3c554e4b4e4f574e203133343e 3898:S13|3c554e4b4e4f574e203133353e 3899:S13|3c554e4b4e4f574e203133363e 3900:S13|3c554e4b4e4f574e203133373e 3901:S13|3c554e4b4e4f574e203133383e 3902:S13|3c554e4b4e4f574e203133393e 3903:S13|3c554e4b4e4f574e203134303e 3904:S13|3c554e4b4e4f574e203134313e 3905:S13|3c554e4b4e4f574e203134323e 3906:S13|3c554e4b4e4f574e203134333e 3907:S13|3c554e4b4e4f574e203134343e 3908:S13|3c554e4b4e4f574e203134353e 3909:S13|3c554e4b4e4f574e203134363e 3910:S13|3c554e4b4e4f574e203134373e 3911:S13|3c554e4b4e4f574e203134383e 3912:S13|3c554e4b4e4f574e203134393e 3913:S13|3c554e4b4e4f574e203135303e 3914:S13|3c554e4b4e4f574e203135313e 3915:S13|3c554e4b4e4f574e203135323e 3916:S13|3c554e4b4e4f574e203135333e 3917:S13|3c554e4b4e4f574e203135343e 3918:S13|3c554e4b4e4f574e203135353e 3919:S13|3c554e4b4e4f574e203135363e 3920:S13|3c554e4b4e4f574e203135373e 3921:S13|3c554e4b4e4f574e203135383e 3922:S13|3c554e4b4e4f574e203135393e 3923:S13|3c554e4b4e4f574e203136303e 3924:S13|3c554e4b4e4f574e203136313e 3925:S13|3c554e4b4e4f574e203136323e 3926:S13|3c554e4b4e4f574e203136333e 3927:S13|3c554e4b4e4f574e203136343e 3928:S13|3c554e4b4e4f574e203136353e 3929:S13|3c554e4b4e4f574e203136363e 3930:S13|3c554e4b4e4f574e203136373e 3931:S13|3c554e4b4e4f574e203136383e 3932:S13|3c554e4b4e4f574e203136393e 3933:S13|3c554e4b4e4f574e203137303e 3934:S13|3c554e4b4e4f574e203137313e 3935:S13|3c554e4b4e4f574e203137323e 3936:S13|3c554e4b4e4f574e203137333e 3937:S13|3c554e4b4e4f574e203137343e 3938:S13|3c554e4b4e4f574e203137353e 3939:S13|3c554e4b4e4f574e203137363e 3940:S13|3c554e4b4e4f574e203137373e 3941:S13|3c554e4b4e4f574e203137383e 3942:S13|3c554e4b4e4f574e203137393e 3943:S13|3c554e4b4e4f574e203138303e 3944:S13|3c554e4b4e4f574e203138313e 3945:S13|3c554e4b4e4f574e203138323e 3946:S13|3c554e4b4e4f574e203138333e 3947:S13|3c554e4b4e4f574e203138343e 3948:S13|3c554e4b4e4f574e203138353e 3949:S13|3c554e4b4e4f574e203138363e 3950:S13|3c554e4b4e4f574e203138373e 3951:S13|3c554e4b4e4f574e203138383e 3952:S13|3c554e4b4e4f574e203138393e 3953:S13|3c554e4b4e4f574e203139303e 3954:S13|3c554e4b4e4f574e203139313e 3955:S13|3c554e4b4e4f574e203139323e 3956:S13|3c554e4b4e4f574e203139333e 3957:S13|3c554e4b4e4f574e203139343e 3958:S13|3c554e4b4e4f574e203139353e 3959:S13|3c554e4b4e4f574e203139363e 3960:S13|3c554e4b4e4f574e203139373e 3961:S13|3c554e4b4e4f574e203139383e 3962:S13|3c554e4b4e4f574e203139393e 3963:S13|3c554e4b4e4f574e203230303e 3964:S13|3c554e4b4e4f574e203230313e 3965:S13|3c554e4b4e4f574e203230323e 3966:S13|3c554e4b4e4f574e203230333e 3967:S13|3c554e4b4e4f574e203230343e 3968:S13|3c554e4b4e4f574e203230353e 3969:S13|3c554e4b4e4f574e203230363e 3970:S13|3c554e4b4e4f574e203230373e 3971:S13|3c554e4b4e4f574e203230383e 3972:S13|3c554e4b4e4f574e203230393e 3973:S13|3c554e4b4e4f574e203231303e 3974:S13|3c554e4b4e4f574e203231313e 3975:S13|3c554e4b4e4f574e203231323e 3976:S13|3c554e4b4e4f574e203231333e 3977:S13|3c554e4b4e4f574e203231343e 3978:S13|3c554e4b4e4f574e203231353e 3979:S13|3c554e4b4e4f574e203231363e 3980:S13|3c554e4b4e4f574e203231373e 3981:S13|3c554e4b4e4f574e203231383e 3982:S13|3c554e4b4e4f574e203231393e 3983:S13|3c554e4b4e4f574e203232303e 3984:S13|3c554e4b4e4f574e203232313e 3985:S13|3c554e4b4e4f574e203232323e 3986:S13|3c554e4b4e4f574e203232333e 3987:S13|3c554e4b4e4f574e203232343e 3988:S13|3c554e4b4e4f574e203232353e 3989:S13|3c554e4b4e4f574e203232363e 3990:S13|3c554e4b4e4f574e203232373e 3991:S13|3c554e4b4e4f574e203232383e 3992:S13|3c554e4b4e4f574e203232393e 3993:S13|3c554e4b4e4f574e203233303e 3994:S13|3c554e4b4e4f574e203233313e 3995:S13|3c554e4b4e4f574e203233323e 3996:S13|3c554e4b4e4f574e203233333e 3997:S13|3c554e4b4e4f574e203233343e 3998:S13|3c554e4b4e4f574e203233353e 3999:S13|3c554e4b4e4f574e203233363e 4000:S13|3c554e4b4e4f574e203233373e 4001:S13|3c554e4b4e4f574e203233383e 4002:S13|3c554e4b4e4f574e203233393e 4003:S13|3c554e4b4e4f574e203234303e 4004:S13|3c554e4b4e4f574e203234313e 4005:S13|3c554e4b4e4f574e203234323e 4006:S13|3c554e4b4e4f574e203234333e 4007:S13|3c554e4b4e4f574e203234343e 4008:S13|3c554e4b4e4f574e203234353e 4009:S13|3c554e4b4e4f574e203234363e 4010:S13|3c554e4b4e4f574e203234373e 4011:S13|3c554e4b4e4f574e203234383e 4012:S13|3c554e4b4e4f574e203234393e 4013:S13|3c554e4b4e4f574e203235303e 4014:S13|3c554e4b4e4f574e203235313e 4015:S13|3c554e4b4e4f574e203235323e 4016:S13|3c554e4b4e4f574e203235333e 4017:S13|3c554e4b4e4f574e203235343e 4018:C2,24|00823b2e2e2e3b0e0e4f000b0040000564440e0e0e0e0e0e|@4020,@4019| 4019:C15,304|00832b28084d0027010c000303033b06d05707293b4d0117010c0003294d020f010c0002290c0001664d0303010c0002030c2d2c4d04f8000e0c000302232d28084d04eb000c0003292d4d05e2000e0e0e0c0003293c4d05d6000e0e0e0c0003652f1b00014d06c7000c0003293b4d00be000e0e0e0c000303033c0218293b4d07ad000e0e0c00033c2a4d00a2000e0e0e0c000364030329020e291b00014d048e000e0e0e0c0003294d0883000c0002030329020b294d0976000e0e0e0c00022928ff4d0a69000e0e0c0003312e2b4d0b5d000e0e0c000450333b4d07510002024b000e0e0c0003293c4d0042000e0e0e0c0003030334020b3428ff4d0530000e0c0003291b00014d0c24000e0c0003333c4d041a000e0e0e0c00032a220e220e2c0e0e0e4f0d0700c1000527091f04|@4021,I229,I253,I189,I218,I106,I107,I110,I231,I105,I152,I243,@3454,I109,@4019| 4020:S24|494e54434f4445434f4e5328292e7365744c6f6e67283329 4021:S35|494e54434f4445434f4e5328292e7365744c6f6e672833297075744279746573283429 4022:C2,16|008056072c2a4d0006002e0e7e040003|@3413,@3412| 4023:C5,112|00812b354d0068004d0164000e0c000303082b362937296502162b353c4d014f000c000303062b37296402042b36296429354d023a004d0136000e0e0e0c00030316293656282e68012a2c2b4d0320000e0c0004260402023b5056172d68012a302b4d030a00317b050700040e0e0e0e|@4024,-1,I229,-5,@3543| 4024:S45|434f44455452454528292e67656e436f6465283229696e736572746564436f64652d656e746572446563283229 4025:C4,72|0080560a03225609040700284d2b2b4d0035000e0e0c000450292e2a4d0128000e0c0003260402023b505607292d56380e0c00035627292b4d020c00300e0e0e7e0600030e0e0e0e|@4027,@271,@330,@4026| 4026:O1|@4028 4027:S41|434f44455452454528292e67656e436f6465283229696e736572746564436f64652d6576616c283129 4028:C16,352|00812b354d0058014d0154010e0c000303032b06da2b353f4d0144010e0c000307cf2b362c372e2a4d0234010e0c000329354d032a014d0126010e0e0e0c000303032906d029354d0015014d0111010e0e0c000303252936294d0403010c000203054d05fa0010294d04f4000e0c000203054d06ea0010296402054d07e100103b2d3b4d01d9000e0e0c000303337876153b2d3b694d08c7000c00024d00c0002a6964051a0e00ff6d29353c4d01b0000e0c000303054d09a600100200316402603b2e293b4d0197000c000303032a021629362b3c4d0a87000c0003292b25042504511e203b6565294d04730002046b0032000e0e0c000203032902054d0b5f00102928403b4d0c56000e0e0e0c00043b312b02020b000e0e4f0d4300a0000466656602372b2d0e0e0c00027876133b3b2d0e0e0e0c00024d0024002a6964051a0e00ff6d29353c4d0114000e0c000303054d0e0a001002002d6464430e0e0e|@4030,-3,I229,@4026,-10,I105,@4031,@398,@4033,I204,@55,I106,@395,I11,@4029,@55| 4029:C14,208|00822c3b4d00c8000e0c000303442b4d01bd000e0e0c00025078761a3b5631293069644d02a9000e0e0c00024d03a0002a6964051b0e00ff6d29353c4d0090000e0c000303054d04860010020056176402782c352d365628292c4d0572000e0e0e0c000329354d0666004d0062000e0e0e0c0003030329024f29354d0351004d004d000e0e0c000303392936324d073f000c000203033202054d08330010312a2c4d092b000c000450333c4d0a21000e0e0c0003292f340e0e4f0b13009100046602054d0c0900102704440e0e0e0e0e|@4036,I229,I47,I204,-3,@55,@4026,-10,I105,@395,I255,I106,@4029,@4035| 4030:S22|434f44455452454528292e6576616c75617465283229 4031:O3|@7141,@228,@4032 4032:S30|436f64652061646472657373206973206e6f7420616e2061646472657373 4033:O3|@7141,@228,@4034 4034:S30|436f64652061646472657373206973206e6f74206120636f6e7374616e74 4035:O3|@7141,@228,@4037 4036:S33|434f44455452454528292e6576616c756174652832296c6f616441726773283329 4037:S36|526573756c74206f66206576616c75617465206973206e6f74206120636f6e7374616e74 4038:C6,96|00802b352c362d37293b4d0052000e0e0e0c0003033d2b355647292b4d0140000e0c0003293b4d0036000e0e0e0c000303104d022a002c3c303b68053b2a6964020e29352e2a4d031600340e7e0a00036602054d0409001066420e0e0e0e0e0e|@4040,I229,@451,-5,@224,@4039| 4039:O3|@7141,@228,@4041 4040:S50|434f44455452454528292e67656e436f6465283229696e736572746564436f64652d6c6f6f6b75704e657741646472283129 4041:S36|6f75746572206c6576656c207265616368656420696e206c6f6f6b75704e657741646472 4042:C1,16|00802b352c3656272d0e0e0e7e030003|@4043| 4043:S45|434f44455452454528292e67656e436f6465283229696e736572746564436f64652d656e746572446563283129 4044:C2,24|00802b352c3656272a68012a2d2b4d000600327b05070004|@4045,@3543| 4045:S48|434f44455452454528292e67656e436f6465283229696e736572746564436f64652d656e7465724e6577446563283129 4046:O1|@4047 4047:C11,168|00812c3b4d00a0000e0c000329353b4d0195000e0e0c000303033b02832936293b4d0083000c0003293b4d017a000e0e0e0c000303064d026e00023778760f3b2c3b3b4d0361000e0e0c0004050800ff6d4d045300102b3c2b3b2e4d0549000e0e0c000650294d063e000e0e0e0c00025029643b2a69313b2b4d072b000c000450314d0822000e0e0e0c000203054d09160010314d061000310e0e0e7d09000264430e0e0e0e0e0e|@4048,I253,I229,I49,I11,@78,I195,I47,I255,I105,@398| 4048:S22|5374726574636841727261792e667265657a65283229 4049:O1|@4050 4050:C2,16|00802b352c364d0006002d0e7e030003|@4052,@4051| 4051:O1|@4053 4052:S32|537472756374757265457175616c6974792e7374727563747572654571283129 4053:C20,728|00812c2c4d00d0020e0c000303033c06d72c4d01c2020e0e0e0c000203033b06c92b4d01b2020e0e0e0c000203033b06d32c4d02a2020e0e0e0c00022c4d0297020c00022a2a4d008e020e0e0e0c00034d0384020e0c000203033b06d42e4d0476020e0e0e0c00022e4d046b020c00022a2a4d0562020e0e0e0c00032928404d0655020e0e0c0003293b4d004a020e0e0e0c0003644d033f020c000203033b06d6293c4d0631020e0e0c0003293b4d0026020e0e0e0c0003644d031b020c0002039d2d3b4d0710020e0c000303104d0806022e4d0901020e0e0c000302012d2928084d0af2010204e701e5010e0c0003294d01e3010c0002030329020f294d0bd6010202cb010e0e0e0c00023b292b4d00c5010e0e0c000303033c023e220c2a4d0cb4010e0c0003220c2b4d0ca90102029d010e0e0c00032a2a4d009a010e0e0e0c0003650313293c4d0d8b010c0003292502501e473b6402013b270406cd2d3c4d0e73010c00030a01008000a1002d3c4d0f6301020256010c000329293b4d1055010e0e0c000303033c0237332a4d1145010e0e0c0003332b4d113a010e0e0e0c00032a2a4d122e010e0e0e0c0003650310293c4d0f1f010c000325011e413b02013b650321313b4d110b010c0003313b4d1102010e0e0e0c00032a2a4d12f600340e7e0b00033b06ca313b4d11e7000c0003313b4d11de000e0e0e0c00032a2a4d12d200340e7e0b0003313b4d11c6000e0e0e0c0003323c4d11ba000e0e0e0c0003323b4d11ae000202a1000e0e0e0c0003333c4d119e000e0e0e0c00032c4d0193000c0002031d2c2b4d0088000e0c0003030e2b2a4d127c00220d0e0e7e0d00033b02662a4d016c000e0c000203033b02582b4d015e000e0e0e0c0002031d2b2a4d0050000e0c0003030e2c2b4d124400220d0e0e7e0d00033b022e294d0134000e0c000203033b02202c2b4d122500020218000e0e0c0003030e2b2a4d121400220d0e0e7e0d00033b27046665430e0e0e0e0e0e|@4054,I251,I105,I15,I218,I17,I242,I243,I234,@181,I106,I108,I152,I252,I239,I107,I240,I229,I253,@4051| 4054:S32|537472756374757265457175616c6974792e7374727563747572654571283229 4055:C3,48|00802b3b4d0028000e0c000303091201000100deff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1884,I229,@4055| 4056:O1|@4057 4057:C6,104|00802b4d0061000e0e0c00024d0158000e0c0002034d2b36293b4d024a000e0e0e0c000303362c3529354d033a004d0236000e0e0e0c0003030628092e69021929354d0422004d021e000e0e0e0c0003030628092e6902012964020428092d6964020428092c6942|@4058,I105,I218,I229,-4,-9| 4058:S21|434f44455452454528292e77726170456e76283129 4059:C1,8|00805607420e0e0e|@4060| 4060:S24|434f44455452454528292e67656e436f6465283229283129 4061:C2,24|00803b56170c00024d000c002a693b2a6928052a6966420e|@4060,-3| 4062:C1,16|0080560728052a6964420e0e0e0e0e0e|@4060| 4063:O1|@4064 4064:C6,144|00802b3b4d0088000e0c000303033b02782b3529354d0177004d0073000c0003033729362d362a4d0265000e0e0c00022a4d025b000c0002293b4d0052000e0e0e0c000303032a020c3b2b0e0e4f033f00600002642704022f29354d0431004d002d000e0e0c000303112c36294d021f000c00022b2a692966020d2c36294d020e002e0e7d05000264420e0e0e0e0e0e|@4066,I229,-9,@4063,@4065,-4| 4065:C3,40|00802b3b4d0020000e0c00030304560002142b352c36290e0e4f010b002100022b2a69292704420e|@1884,I229,@4065| 4066:S36|434f44455452454528292e67656e436f6465283229657870616e644d757475616c283129 4067:O1|@4068 4068:C8,120|00812b3b4d0070000e0c000303033b02612b3529354d015f004d005b000c0003034a29362d362a304d024c000e0c0003030e2f2a4d034000300e0e0e7e0700033b2f0e0e0e4f042f00400002313c4d0526000e0e0e0c000329324d031a000e0e0e0c00032b2a6929270702054d0608001064430e0e0e0e0e|@4070,I229,-4,I234,@4067,@4071,I106,@4069| 4069:O3|@7141,@228,@4075 4070:S33|434f44455452454528292e67656e436f646528322967657456616c756573283229 4071:C9,136|00802b3b4d0080000e0c000303064d01760002722b3529354d026c004d0068000e0c0003035a29362a372e3656482c2a4d0354000e0c0003644d044b000c0002030c290e0e4f053f00410002022f2a353e4d0033000c000303162a3656584d0626002a3c3b3b6805280b2a2d6a66020d56484d0612002a3c3b3b6805646602054d0704001064420e|@4073,I229,@501,-4,I113,I218,@4071,-5,@4072| 4072:O3|@7141,@228,@4074 4073:S45|434f44455452454528292e67656e436f646528322967657456616c75657328322966696e64456e747279283129 4074:S21|66696e64456e7472793a206e6f74204465636c6172 4075:S23|67657456616c7565733a206e6f742061204465636c6172 4076:C3,48|00802b3b4d0028000e0c000303091201000100d9ff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1884,I229,@4076| 4077:O1|@4080 4078:O3|@7141,@228,@4079 4079:S31|526573756c7420766563746f72206973206e6f7420616e2061646472657373 4080:C2,8|00804d000200100e|@440,@439| 4081:O2|@4083,@4082 4082:O2|@4215,@4214 4083:C6,96|00813b4d005900040200280628403b4d014d000e0e0c0004293b28054d0240000e0c0004504d0337002a693c28402b4d012d000e0e0c00042c2a453b46502c3c28403b4d0119000e0e0c000433302c2c0e4f040b00b00005292709430e0e0e0e|@4085,@4086,I11,I255,-1,@4084| 4084:C5,192|0083040200280628403b4d00b2000e0e0e0c0004293b28054d01a4000e0c0004504d029b002a693c28402b4d0091000e0e0c00042c2a453b46502c352d040200280628403b4d0077000c0004293b28054d016c000e0c0004504d0263002a693c28402b4d0059000e0e0c00042c2a453b46502c040200280628403b4d0041000e0e0c0004293b28054d0134000e0c0004504d022b002a693c28402b4d0021000e0e0c00042c2a453b46502c3b3b3b3b22191603000a0016000000000227141f04|@4092,I11,I255,-1,@4091| 4085:S21|434f44455452454528292e707265436f6465283229 4086:O1|@4087 4087:C2,8|00804d000200100e|@4089,@4088| 4088:O3|@7141,@228,@4090 4089:S37|434f44455452454528292e707265436f6465283229696e736572746564436f64652d283129 4090:S31|6f75746572206c6576656c207265616368656420696e20636f7079436f6465 4091:C31,912|00803b3b2d354d0086034d0182030e0e0e0c00030a1600020396012e007c014e029402a6002e00d5005500d8003800c902b201ff025b004103c1004b023500cc01f10125034d0247031006dc2d06db2d362e37290e4f0337034100022b4f032f035100023b2a2c6a270406d94d04200306d52d362e373b2b0e4f0513035000022b354d060a034d0706030e0e0e0c0003031a2b362c372d382e392c2c2c2c6b3b2a4f08eb02c10003270502082b4f03df026100023f2b2b3b6b270506dc2d362e372f3830392c2c2c2c6b3c2a0e4f08bf02810003270506da2d362e372a4f03af0241000228062a2c6a6606c82d06dd2d362e3729293b4d0796020e0e0e0c000303033b026c29352a362a354d0981024d077d020e0e0c0003034a2a361209000100f9ff292b3b0204630261024d0a60020e0c000450120a000100f4ff292c3b4d0a4d020204460244020c000450120b000100efff292d3b4d0a35020e0e0c0004260502054d0b280210292503511e793b65642b0e0e4f0317025100023b2c0e0e0e4f0c0b027000024d0d04022c2b6a270606da2d363b2a0202f2010e0e4f0eef014000024d0fe8012a696606dd2d36290204d901d7010e0e0e4f03d3013100024d10cc012a696506d32d0202bf01362e372f382b2b2b0e0e0e4f11b3017100046606d12d363b3b3b2c4f12a3016000023b2a0e0e0e4f139701800002294d148f01220c0e7d0c00022d363b2a0e4f157f01400002402a692a293b4d0772010e0e0e0c000303033c021f293529354d165f014d075b010c0003030c2a36292503511e283b6402013b64640312294d1740010e0c00024d1638012a6964020129270406dd2d06dc2d363c28403c02021e014d181d010e0e0c0004292b352c362d372e382f39303a312306020201013223070e0e4f19fb00c0000a3c2a0202ef000e0e0e4f1aeb006000036606d02d362e372f382a0202d7000e0e0e4f03d3005100022c4f03cb006100023b2c0e0e0e4f1bbf008000024d1cb8002c2e2c6b270702ad2d3629352a362b372c382d393b2b0e0e0e4f1d9b009000022b4f039300a100022e4f038b00b1000231312b2e2e68053c2a69270b02772d02742d362e372f38290e4f036b005100022b4f0363006100024d005c002e2b2d6b270502512d02044c004a00362e372a0e0e4f034300410002280b2a2c6a6602352d3629354d0d30004d072c000e0c00030308293629372965021a29353c4d071700020210000c00030306293729640204293629646465420e|@4094,-11,I107,@4095,@4091,@431,@4097,-5,I229,@4099,-4,@3543,@4101,@4103,-1,@4106,-8,-10,@4107,@4162,@4205,@4056,@4212,-3,@3353,I11,@4165,@4180,@4213,-6,@4093| 4092:S32|434f44455452454528292e707265436f6465283229636f7079436f6465283429 4093:C4,64|00802b3b4d0038000e0c000303033b022c2b352c36290e0e0e4f0123002100020402002c352d362a0e4f0213006200022c2a452b46502c292f69292709420e0e|@4098,I229,@4093,@4091| 4094:S41|434f44455452454528292e707265436f6465283229636f7079436f6465283429696e73657274283129 4095:O3|@7141,@228,@4096 4096:S19|756e6b6e6f776e20696e737472756374696f6e 4097:C4,48|00802b3b4d0028000e0c000303033b021d2b352c36290e0e0e4f0113002100022b4f020b00320002292b69292705420e|@4098,I229,@4097,@4091| 4098:S41|434f44455452454528292e707265436f6465283229636f7079436f64652834297265766d6170283229 4099:C9,264|00812b352c37293b4d00fc000e0c00034d01f4000e0c000203033c020b2a3b4d00e5000e0e0c0003030e2d2a306a56392e0e0e0e7d0600022a3b4d02ca000e0e0e0c0003033c2a4d03bd000e0e0c00025638292b4d04b0000e0c00035658292d3c4d05a3000c0004502a4d019a000e0e0e0c00024d069000303c3b2d68052705027f1203000100efff292c4d0479000e0e0c0003294d076f000c00024d0168000e0c000203062935296402541205000100f9ff292e4d044f000c00033203141207000100f4ff29303c4d053b000c00045102023b501207000100f9ff29303c4d0525000e0e0c0004502a4d011a000e0e0e0c00024d061000313c3b2d680527046565430e0e0e0e0e|@4100,I113,I218,I234,I111,@451,@3543,-5,I105| 4100:S42|434f44455452454528292e707265436f6465283229636f7079436f64652834296c6f6361646472283229 4101:O3|@7141,@228,@4102 4102:S29|6465636c6172654172673a206e6f742061206465636c61726174696f6e 4103:C7,112|00802b3b4d0068000e0c000303033b025a2b352c36290e0e0e4f0153002100022b354d024a004d0046000e0e0e0c0003032e2b362c371206000200f9ff292c3b4d032c000e0c0004502a0e0e0e4f041f006200024d0218002d2b3c6b270402054d050c0010292b69292705420e0e0e0e|@4098,I229,@4103,-4,@3543,@4091,@4104| 4104:O3|@7141,@228,@4105 4105:S26|636f70794465633a206e6f742061206465636c61726174696f6e 4106:C4,48|00802b3b4d0028000e0c000303033b021d2b352c36290e0e0e4f0113002100022b4f020b00320002292b69292705420e|@4098,I229,@4106,@4091| 4107:C21,744|00823b0e0e4f00df020100022d4f01d7021100023b4f00cf022100022b4f02c7023100022f4f01bf024100023b4f00b7025100020402002d2b2b4d03aa020e0e0e0c00045029352a362f0e0e0e4f049702910002220e0e0e0e4f018b02a10002294d0583020c0002293b4d067a020e0e0e0c0003031e332d4d076c020e0c0003312f4d0762020e0e0e0c00033d2d2c2c6b6506d229352a362b372c38040200220c353c4d0641020e0e0c000307dd220c3629352a362b372c382d39302c4d0827020c0003294d091f020c00024d0a18020e0c000207da2938293c4d060a020e0e0e0c000307d22a352b3722152b2b4d0bf6010e0e0e0c0004040200221a22182b4d03e4010e0c00045029352a36221c2f2f4d0cd3010c0004036c221d2a4d07c7010c0003292212693b220c0e0e160d00b6012400000000022b2a69220d304d07a6010e0e0e0c0003221722124d0e98010e0c00030304221702022211221922144d0f8401020279010e0c00030304221902022213292b22192f2f680522173c452a46260a0272221d2a020211014d0757010c0003292212693b220c0e0e16100046012400000000022b2a69220d300202b5004d073201020242000e0e0e0c0003221722124d0e20010e0c00030304221702022211221922144d0f0c010e0c00030304221902022213292b22142f2f680522173c452a46260a26060268221722114d07e4000e0c000329220c693b2f0e0e0e161100d2001e00000000022b2a693022174d07c2000e0e0e0c00032211220c4d0eb4000e0c0003030422110201342213220e4d0fa1000e0e0c0003030422130202220d292b220e2f2f680522113c452a46260a500233221622104d0779000e0e0c0003293469293b69221622144d0766000e0e0e0c0003220f220f220e2d2d6805220c3c452a46260626070240220f324d0743000c0003292d69293b69220f354d1233004d062f000c000303064d1326000202220f29220e4d071b000c00033232312e2d68052f3c452a462607292705270c440e0e0e0e|@4109,@4110,@4091,@4112,@4119,@4131,@4133,I229,@4147,@4141,I105,I218,@4152,@4157,@4160,I234,I233,@4161,@4108,-2,@501| 4108:C4,64|00802b3b4d0038000e0c000303033b022d2b352c362a352b361205000100f7ff2b2a4d011a000e0e0e0c0003292c692e0e4f020b007100022a2a69292709420e|@436,I229,@4147,@4108| 4109:S43|434f44455452454528292e707265436f6465283229636f7079436f6465283429636f7079436f6e64283329 4110:C9,360|00805600293b4d005e010e0e0e0c000329354d0152014d024e010e0e0e0c000303122936293b4d003e010e0e0e0c00032965020e2936294d032d010e0e0c0002296556382935293b4d001c010e0c000329354d0112014d020e010e0e0e0c000303122936293b4d00fe000e0e0e0c00032965020e2936294d03ed000e0e0c000229651208000100f9ff3b3b29314d04d7000c000303032a023e2b2a4d05c9000e0e0c0003031a293c4d06bc000e0c00032a2c69292b25042504511e2f3b650217293c4d06a2000e0e0e0c00032b2a25032503501e483b646556983b3b292f4d0486000e0e0e0c000303032a023e2b2a4d0575000e0e0c0003031a293c4d0668000e0c00032a2c69292b25042504511e323b650217293c4d064e000e0e0e0c00032b2a25032503501e4b3b64653c28402d4d0734000e0c00043c28402c4d0728000e0c000456d7293b4d001c000e0c00033c28402b4d0710000e0c00042c2a2f6a292711420e0e0e0e|@4111,I253,-1,I229,I15,I113,@451,I106,I11| 4111:S45|434f44455452454528292e707265436f6465283229636f7079436f646528342973617665557361676573283129 4112:C8,248|00802b35293b4d00ee000e0e0e0c00032d37293b4d00e0000e0c00032f3656582935293b4d00d0000e0c000329354d01c6004d02c2000e0e0e0c000303122936293b4d00b2000e0e0e0c00032965020e2936294d03a1000e0e0c00022965293c4d0494000e0c000356a829332c4d0587000c00045056b0293b4d007b000c000329354d0172004d026e000e0e0e0c000303122936293b4d005e000e0e0e0c00032965020e2936294d034d000e0e0c00022965293c4d0440000e0c00031210000100f9ff29220d2c4d052d000e0e0c00045012110001000100220c3b4d0019000e0e0c00032a3b2b4d060d000e0e0c0004503b2712420e0e0e|@4114,I253,-1,I229,I15,I107,@4113,I255| 4113:O1|@4115 4114:S45|434f44455452454528292e707265436f6465283229636f7079436f6465283429736574546f5361766564283129 4115:C8,192|00822b3b4d00b8000e0c000303162c3b4d01ac000e0c000303033b02054d029f001002942c3b4d0196000e0e0e0c000303262d2c3b4d0387000c0004502b3c4d047d000e0e0c00032e3b2b4d0571002f0e0e0e7b050600042c352d362a2e4d065e000e0e0e0c000303262f2e3c4d034f000c0004502d3c4d0445000e0e0c0003302b2b4d053900310e0e0e7b050800042f2e3b4d0329000e0e0c0004502d3c4d041d000e0e0c000330302b4d051100310e0e0e7b05080004440e0e0e0e0e0e0e|@4117,I234,I229,@4116,@3543,I107,@4113,I113| 4116:O3|@7141,@228,@4118 4117:S57|434f44455452454528292e707265436f6465283229636f7079436f6465283429736574546f5361766564283129636f70794172726179283329 4118:S21|736574546f53617665643a206e6f7420656d707479 4119:O1|@4120 4120:C8,224|00822d35293b4d00d6000e0e0e0c00032f37293b4d00c8000e0c000331363135293b4d00ba000e0e0e0c00033337293b4d00ac000e0c0003220c360402003b3b2f220c4d0199002e4d0294000e0c00075029352a360402002a2c30220d4d037f002e4d027a000e0e0e0c00075029352a36040200220c3b4d0065000e0e0c0003313b4d005a000e0e0e0c00032a2a4d044e000e0e0e0c0003650308292c452b46500229220c3b4d0036000e0e0e0c0003030e4d052a002c692a2a452c4651020c4d061c002b692a2d452a465129352a3622152b452a462713440e0e0e0e0e0e0e|@4122,I253,@4123,@4125,@4128,I229,@4121,@4121| 4121:O5|-5,0,0,0,1 4122:S50|434f44455452454528292e707265436f6465283229636f7079436f6465283429636f6d707574654b696c6c53657473283329 4123:O1|@4124 4124:C2,16|00802b4d0009002c0e8000020e0e0e0e|0,I111| 4125:O1|@4126 4126:C6,280|00852d3b4d0010010e0c000303442e3b4d0004010e0c000303072b30453146022f2e352f362a2f0e0e0c00024d01e8002a3c3b3c680529220c6929220c2e3b220c220c4d02d100220d0e0e7b080d000702c22d352e36303b4d00bc000e0c0003032a2a2f0e0c00024d01ac002a3c3b3c6805293469220c2a3b2f220c220c4d029600220d0e0e0e7b080d0007303531362c2b4d0382000e0e0e0c0003031234342b2e34344d027000220c0e7b080c00072c2b4d0462000e0e0e0c0003032a2a310e0c00024d0150002a3c3b3c680529220e6929220e2e220e220e220e4d023800220f0e7b080f00072c310e0e0e0c00024d0124002a3c3b3c680529220d69220e2a220e31220e220e4d020c00220f0e7b080f00071f060e0e|@4127,I229,-5,@4125,I113,I234| 4127:S61|434f44455452454528292e707265436f6465283229636f7079436f6465283429636f6d707574654b696c6c536574732833296b696c6c53657473283629 4128:O1|@4129 4129:C1,8|00802b420e0e0e0e|@4130| 4130:S63|434f44455452454528292e707265436f6465283229636f7079436f6465283429636f6d707574654b696c6c536574732833293c7061747465726e3e2d283129 4131:C5,160|00802b35293b4d0096000e0e0e0c00032d37293b4d0088000e0c00032f3656582d293b4d0179000e0e0c000303043b50021629352a362c2b3c4d0263000c000450292503511e2451501207000100f9ff2c293b4d0149000e0e0c000303043b50021629352a362c2b3c4d0233000c000450292503511e2451502b3b4d0021000e0e0c000303135677293b3c4d0311000e0e0c0004503b6402013b2707420e0e0e|@4132,I253,I229,@3543,I255| 4132:S47|434f44455452454528292e707265436f6465283229636f7079436f646528342961646446726f6d5361766564283129 4133:O1|@4134 4134:C17,608|00802b353f4d0057020c000307dc2b362c3729354d0148024d0044020e0c000307d12936294d0037024d0233020c000303033c0223294d0326024d0222020e0e0e0c000303033c020f294d0212024d020e020e0e0e0c000307d22b4d0401020e0e0c00024d05f8010e0c000207d12b36294d04eb010c00024d05e4010e0c000207cb2936293b4d00d6010e0e0e0c000307dc2a3529354d01c6014d00c2010e0e0e0c0003037829362f3529354d01b0014d00ac010e0c000303322936294d049f010c00020320294d0495010e0e0c000203032902054d06870110293b692a2b2b316b296602013b6402319c002a4d046f0102028f000c000203202a4d0461010e0e0c000203032a02054d07530110293b692a2b2b2e6b296602013b6502542e3529354d013a014d003601020252000e0e0e0c0003033a2936294d04230102023c000c00020324294d04150102022a000e0e0c000203032902054d08030110293b692a2b2b306b296602013b64020305003b646402013b6402013b6402013b02013b6402013b6502d42b353c4d00d1000e0e0c000303c52b3629352a362b372c382d39294d09b9000e0e0c00022b4d0aaf000c00022a4d04a7000c00024d05a0000e0c000203902a352b362c372d382d4d048d000e0e0c00024d0584000e0c0002036f2d35322b4d0b76000e0e0e0c0003293b4d0c6a000e0e0e0c0003644d055f000c000203472b3b4d0054000e0c0003030329020c3b2a0e0e4f0d4300e0000264342e4d0e39000e0e0c000303033402012d220d304d0f27000c00030304220d02012f292b2d306b29270402013b6402013b270402013b270802013b420e0e0e|@4136,I229,-3,I251,I113,I105,I218,@395,@395,@395,@4133,@4137,@4141,@4144,@4135,I234,I233| 4135:C3,48|00802b3b4d0028000e0c000303091201000100f4ff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1884,I229,@4135| 4136:S54|434f44455452454528292e707265436f6465283229636f7079436f6465283429636f7079436f6e6428332966696e6443617365283129 4137:O1|@4138 4138:C7,136|00802b3b4d0080000e0c000303064d017600026f2b3529352a362e362b354d0266004d0062000e0e0e0c000303112b36293c4d0352000e0e0e0c00036402013b033e294d0441000e0e0c0002293b4d0036000e0e0e0c000303033b02202935293b4d0023000c000303032c020c3b2d0e0e4f05130070000264296801656402013b2704420e0e0e0e|@4140,I229,@633,-3,I251,@4137,@4139| 4139:C3,48|00802b3b4d0028000e0c000303091201000100f9ff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1884,I229,@4139| 4140:S67|434f44455452454528292e707265436f6465283229636f7079436f6465283429636f7079436f6e6428332966696e6443617365283129636865636b4361736573283129 4141:O1|@4142 4142:C6,208|00812b354d00c8004d01c4000e0c000303652b362c372d382e392c2c2c2c6b31354d00ab004d01a7000c0003034431363237333834392c2c2c2c6b322e4d028f000c0003031b302c4d0284000e0c0003030c312d4d0178000e0c000302013b02013b03092f03032e02012902013b270502013b270502512b3528064d0151000e0e0c000303412b362c372e3528064d013e000e0e0e0c000303292e362f372b2a4d022c000e0c00034d0324000e0c000203033b020b2a2d4d041500317e0800036502013b6502013b430e0e0e0e0e0e0e|@4143,-5,I229,I113,I218,@4141| 4143:S53|434f44455452454528292e707265436f6465283229636f7079436f6465283429636f7079436f6e6428332973696d696c6172283229 4144:O1|@4145 4145:C6,144|00812b2d4d0088000e0c000303033c02782b4d017a000e0e0e0c00024d0270000e0c000203622c4d0165000e0e0c00024d025c000e0c0002034b2b352d352a2a4d034c000e0c00036503372b362d362a2a4d043b000c00036503242b372d372a2a4d032b000c00036503112b382d382a2a4d041b002f0e0e7e0600033b02013b02013b02013b02013b430e0e0e0e0e0e|@4146,I251,I105,I218,I113,I229| 4146:S27|65712d434f44455452454528292e73696d696c6172697479283229 4147:O1|@4148 4148:C4,120|00812b3b4d0070000e0c000303032c02620402002d3528094d005c000e0c000303292d36293b4d004e000e0e0e0c000303032d020c3b2e0e0e4f013b00300002642b2809452a46260302262d3b69293b4d0024000e0c000303032d020c3b2e0e0e4f021300300002642b2809452a4626032964430e0e0e0e|@4150,I229,@4151,@4149| 4149:C3,40|00802b3b4d0020000e0c00030304560302142b352c36290e0e4f010b002100022b2a69292704420e|@1884,I229,@4149| 4150:S56|434f44455452454528292e707265436f6465283229636f7079436f6465283429636f7079436f6e642833296164644b696c6c536574283229 4151:C3,40|00802b3b4d0020000e0c00030304560302142b352c36290e0e4f010b002100022b2a69292704420e|@1884,I229,@4151| 4152:O1|@4153 4153:C7,136|00822d352e362f372e3b4d007a000e0e0e0c0003030e2a3b3b4d016b000c0004503b025b2f3b4d025e000e0e0e0c000303272b3b4d0350000e0c00033b2a0e0e0e4f0443005000022e3b2b4d0139000e0e0c0004503b660226293b4d0329000e0e0c00033b2a0e0e0e4f051b005000022c3b2b4d0111000e0e0c0004503b6666440e0e0e0e0e0e0e|@4155,I233,I255,I234,I253,@4156,@4154| 4154:C5,72|00802b3b4d0040000e0c000303033b02342b352c3656282b2a4d012b000c0003644d0223000c00020311290e0e4f0317002100022b2a6929650209290e4f03070021000265420e0e|@157,I229,I113,I218,@4154| 4155:S45|434f44455452454528292e707265436f6465283229636f7079436f646528342972656d6f76654974656d283329 4156:C6,88|00802b3b4d0050000e0c000303033b02402b352c3656284d013d000e0e0c00022b2a4d0232000e0e0e0c0003644d0327000c00020311290e0e4f041b002100022b2a6929650209290e4f040b0021000265420e0e0e0e0e0e|@157,I229,I111,I113,I218,@4156| 4157:O1|@4158 4158:C7,184|00822d35293b4d00ae000e0e0e0c00032f37293b4d00a0000e0c00033136303b4d0194000e0c0003030e293b4d008800320e0e0e7e0a0003313b4d027a000e0e0e0c0003033b2c293b4d036b000c000303033b022929352a36344d045a000e0e0e0c00022b2a4d054e000e0e0e0c00036403033c0207292503511e333b6564022d2a293b4d0330000e0c000303033b021c29352a362a220c4d051c000e0c000303033c0207292503511e273b65642705440e0e0e0e0e0e0e|@4159,I253,I233,I234,I229,I111,I113| 4159:S40|434f44455452454528292e707265436f6465283229636f7079436f6465283429696e536574283329 4160:C4,64|00802b3b4d0038000e0c000303033b022d2b352c362a352b361205000100e1ff2b2a4d011a000e0e0e0c0003292c692e0e4f020b007100022a2a69292709420e|@436,I229,@4147,@4160| 4161:C4,64|00802b3b4d0038000e0c000303033b022d2b352c362a352b361205000100e1ff2b2a4d011a000e0e0e0c0003292c692e0e4f020b007100022a2a69292709420e|@436,I229,@4147,@4161| 4162:C20,616|00802b3b4d0060020e0c000303033b06db2b3529354d014f024d004b020c000307cc29362a372e361205000200f9ff292d3b4d0232020e0e0e0c00041207000200f4ff292f3b4d021e020e0e0e0c00042e354d0312024d000e020e0e0e0c000303191209000200efff2f68012a322b4d02f5010e0e0c00046502121209000200efff29313b4d02df010c0004642e0e0e0e4f04d301910002120b000200f9ff29334d05c3010c0003294d06bb010c0002031032120e00040001000e0e0e0c000202013b03032b02a432354d079a014d0096010e0e0e0c000303663236120e000200f4ff29220d4d057e010204750180000e0c00033c28402b4d086c010e0c0004292d352e362f3730383139323a3323063423070e0e1609004e011a000100000a2a3b4d0a42010e0e0e0c0003292b0e0e0e160b00320115000100000327060208324f0c2301c20002120e000200f9ff29220d3b4d0211010e0e0c0004504d010701220d2c2e6b292f69292704270b06d029354d0df2004d00ee000e0e0e0c0003039129362d363b2b293b4d00da000e0e0e0c000303033b021829352a362a0e0e0e4f0ec30070000250292503511e253b65642b0e0e4f04af005100023b3b2f0e0e4f0fa3008000023b3b3b3b2d4f109700d000040e4f118f00b00002293b4d0086000e0e0e0c000303032f02222936293b4d0073000c000303092a352932692965020b4d0d61002b69293269296564270b024f2c36290e0e0e4f044b002100022b4f0c4300320002293528094d0038000e0c0003032629362b3b4d002a00020220000e0e0e0c0003030329020c3b2a0e0e4f12130060000264640205292b6929646664420e0e0e0e|@4164,I229,-4,@3543,-3,@4162,@451,I218,-7,I11,@4165,I253,@4180,@4091,-9,@4185,@4189,@4194,@4201,@4163| 4163:C3,40|00802b3b4d0020000e0c00030304560202142b352c36290e0e4f010b002100022b2a69292704420e|@1884,I229,@4163| 4164:S60|434f44455452454528292e707265436f6465283229636f7079436f6465283429696e73657274283129636f70794465636c61726174696f6e73283129 4165:C14,360|00883c28403b4d005e010e0e0e0c00043c28403b4d0050010e0c00043c28403b4d0044010e0c00044d013c012a220f2d2f1209000200f4ff120a000200efff57a96808323c4d021f010c00030402002a3c4d0213010c00032928403b4d0008010e0c0004293b2e4d03fd000e0e0c0004504d04f3002a693c28402b4d00e9000e0e0c00042d2a453b46502d4d05d900316922152a2c220c0e0e4f06cb00f300053b3c0e0e0e4f07bf00e00002293b4d08b6000e0e0e0c000303032b02292b3b69293b4d08a2000e0e0e0c000303032a02103b2b0e0e1609008e001300000000026428092a6965220f3b4d0a7b000c00033b2a4d0872000e0e0e0c0003640335220d3b4d0a62000e0e0e0c00032a221a221a3b221a221a2f3c68084d0b4a002a6912140003000200292b4d0c3b0022180e7e1f0003220f3b4d0a2d000e0e0c0003220e3b4d0a21000e0e0c00032b221b221b2d221b221b2f3b68084d0b0a002a6927131f090e0e0e0e|@4167,I11,@4168,I106,I255,-1,@4176,@4084,@4178,I229,@4166,I253,-7,@4026| 4166:C3,48|00802b3b4d0028000e0c000303091201000100efff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1884,I229,@4166| 4167:S54|434f44455452454528292e707265436f6465283229636f7079436f6465283429696e73657274283129636f70794c616d626461283929 4168:C18,528|00822d352e363b2f3b4d0003020c0003036c2b3b4d01f8010e0c00034d02f0010e0c000203033c02012a03054d03e001103b2f03145648293b3c4d04d2010e0e0e0c0004503b6402013b5657293b4d05be010e0e0e0c00035677293b3c4d04af010c0004502a4d02a6010e0e0e0c00024d069c013b3b3b2d6805270606ce2f3c4d008c010e0c0003030c2b3b4d0780010e0c000302013b03902a4d0272010e0e0e0c000203054d086601103b564c292e4d095c010e0c0003294d0a53010c00024d024c010e0c00020306293529640256310310566b29303c4d0b34010e0c00046402013b5677293b4d0524010e0c00035697293b3c4d0417010c00045056aa293b4d050b010c000356c9293b4d0500010e0c00032e2a2d0e0e160c00f20012000000000427086606cd2f3c4d00e1000e0e0c0003030c2b3b4d0dd4000e0c000302013b03572a4d02c6000202bd000e0e0e0c000203054d0eb600103b5647293b4d05ac000e0c00035667293b3c4d049f000c000450567a293b4d0593000c00035699293b4d0588000e0c00032e2a2d0e0e4f0c7b00d000042708026f2f3c4d0f6e000e0e0e0c0003312a316a64564d0e0e0c000229354d1056004d0052000e0e0e0c000303032902415647293b4d053f000c00035667293b3c4d0433000c000450567a293b4d0527000c00035699293b4d051c00020213000e0c00032e2a2d0e0e4f0c0b00d0000427076466440e0e0e|@4170,I229,I113,I218,@4169,I255,I253,-5,I233,@4169,@451,I105,@3543,@4171,I234,@4169,I107,-3| 4169:O3|@7141,@228,@4175 4170:S61|434f44455452454528292e707265436f6465283229636f7079436f6465283429696e73657274283129636f70794c616d62646128392970726576283329 4171:C11,288|00822b3b4d0018010e0c00030378570a56145628293c4d0106010e0e0e0c000356434d02fa002d2b2d3b6805576a293b4d03ec000e0c00032b2a69313b2b4d04de000e0e0e0c0004505799293b4d03cf000c0003293c4d05c6000e0e0e0c000357c9293b2c4d04b7000c00045022114d06ad000e0e0c00024d02a4002c3b3b2d6805270e02992b3529354d0292004d008e000e0e0e0c0003037f29362a372b382f3656542d2a4d0776000e0e0e0c000364032f5658293c4d0165000e0e0c00032c2a4d075a000e0e0e0c000365031056532c2a4d0049000e0e0c00036402013b02013b0318324d0636000e0e0e0c00024d022c00333b3b2d6805640218313c4d011d000e0e0c0003332a2c0e0e4f080f0081000464270402054d090300106444|@4173,I229,I107,-5,I253,I255,I106,I218,I113,@4171,@4172| 4172:O3|@7141,@228,@4174 4173:S80|434f44455452454528292e707265436f6465283229636f7079436f6465283429696e73657274283129636f70794c616d626461283929707265762833296d616b65436c6f73757265456e747279283329 4174:S40|6d616b65436c6f73757265456e7472793a20636c6f73757265206973206e6f742045787472616374 4175:S23|707265763a206261646c792d666f726d6564206c6f6164 4176:C1,16|00802b352c362d3756372e7b05030004|@4177| 4177:S61|434f44455452454528292e707265436f6465283229636f7079436f6465283429696e73657274283129636f70794c616d62646128392970726576283129 4178:C8,120|0080560a2c2a4d006e000e0e0e0c00036403033b025e1201000100f4ff292d4d0155000e0e0c0003644d024b000c0002032e2b4d0341000e0e0c00024d0438002a3c3b3c68052d3c4d052c000e0c00030e4f0623002100022a2a6929270402142b3c4d0512000e0e0e0c00030e4f060700010002420e0e0e|@4179,I233,@451,I218,I111,-5,I106,@4178| 4179:S65|434f44455452454528292e707265436f6465283229636f7079436f6465283429696e73657274283129636f70794c616d6264612839296164644b696c6c73283129 4180:C4,104|00812b354d0060004d015c000e0c000303542b3629352a362b372c382d392e3a2f23063b2d4f023f00900002293b2a3b4d0134000e0c000303032902132a352b362a2c692a2a2505250526031e1e3b66653232322c323232221568084d0008002a69270c02012b43|@4182,-7,I229,@4181| 4181:C6,96|00802b3b4d0058000e0c000303033b02492b352c362a354d0145004d0041000e0e0c0003031e2a362b372c382d392c2c2c2c6b5678292b0e0e4f022300930003270602054d031800102a0e0e0e4f040f003100022a2a69292705420e0e0e0e0e|@436,I229,-5,@4099,@4183,@4181| 4182:S59|434f44455452454528292e707265436f6465283229636f7079436f6465283429696e73657274283129636f707950726f63436c6f73757265283229 4183:O3|@7141,@228,@4184 4184:S26|6d616b654c6f616473202d206e6f7420616e2045787472616374 4185:C6,120|00802b354d0070004d016c000e0c0003035a2b362c3729354d025c004d0158000e0c0003031a1203000300efff2a68012a2d2b4d0341000e0e0c0004260302023b501203000300f9ff292c3b4d0328000e0c0004501204000300f4ff292d3b4d031500320e0e0e7b050700044d040800100e0e0e0e0e0e0e|@4187,-4,I229,-3,@3543,@4186| 4186:O3|@7141,@228,@4188 4187:S70|434f44455452454528292e707265436f6465283229636f7079436f6465283429696e73657274283129636f70794465636c61726174696f6e732831296170706c79466e283129 4188:S21|6170706c79466e3a206e6f742061204465636c6172 4189:C4,48|00802b3b4d0028000e0c000303033b021d2b352c362a0e0e0e4f0113002100022a4f020b003100022a2a69292705420e|@436,I229,@4190,@4189| 4190:C12,224|00802b354d00d8004d01d4000e0c000303c62b362c371203000300f4ff292c4d02bd000e0e0c00033c28402b4d03b0000e0c00042c354d04a6004d01a2000e0e0e0c000303212c362a2a352b362c372d382e392f3a3023063123070e0e4f057f00e2000a6402092c0e4f06730053000229354d076a004d0166000e0e0e0c000303191207000300efff2a68012a312b4d084d000e0e0c00046502121207000300efff29303b4d0837000c0004641208000300f4ff2c3b4d0926000e0e0e0c00032a322b4d0819000e0e0c00044d001000332f3b6b270a02054d0a040010420e0e|@4192,-4,I229,@451,I11,-7,@4165,@4091,-3,@3543,I253,@4191| 4191:O3|@7141,@228,@4193 4192:S70|434f44455452454528292e707265436f6465283229636f7079436f6465283429696e73657274283129636f70794465636c61726174696f6e73283129636f7079446563283129 4193:S21|636f70794465633a206e6f742061204465636c6172 4194:C8,160|00822b3b4d0098000e0c000303252d3c4d008c000e0c0003030c3b3b2e4f017f00210004020b3b2d0e4f02730010000264026b2b3529354d0365004d0061000e0e0c0003035229362a372e361205000300f4ff292d4d0447000c00036403253c2b4f053b005200034d0334002d2b3b6b3c332d0e0e4f0127008100042a2a6929270402112c3169322a2c0e0e0e4f010f00710004646602054d0604001064440e|@4196,I229,@4194,@4197,-4,@451,@4180,@4195| 4195:O3|@7141,@228,@4200 4196:S78|434f44455452454528292e707265436f6465283229636f7079436f6465283429696e73657274283129636f70794465636c61726174696f6e7328312970726f63657373436c6f7375726573283329 4197:C6,88|00802b3b4d0050000e0c000303033b02412b352c362a354d013d004d0039000e0e0c000303192a362b373b2a0e4f0227005300034d0120002c2b3b6b6602054d031500102a4f040f003100022a2a69292705420e0e0e0e0e|@436,I229,-4,@4180,@4198,@4197| 4198:O3|@7141,@228,@4199 4199:S28|6d6b4c69676874436c6f737572653a206e6f742061204465636c6172 4200:S29|70726f63657373436c6f73757265733a206e6f742061204465636c6172 4201:C8,160|00802b3b4d0098000e0c000303033b02872b3529354d0187004d0083000c0003037029362a372e361205000300f9ff292d4d026b000c0003294d0363000c000203102c120800050001000e0e0e0c000202013b030d2b0e0e0e4f044300610002022c1207000300f9ff292f3b4d0530000e0c0004504d0127002f2f2d6b2d0e0e0e4f041b008100022a2a69292704270502054d060a001064420e0e0e0e0e0e0e|@4203,I229,-4,@451,I218,@4201,@3543,@4202| 4202:O3|@7141,@228,@4204 4203:S74|434f44455452454528292e707265436f6465283229636f7079436f6465283429696e73657274283129636f70794465636c61726174696f6e73283129636f7079456e7472696573283129 4204:S25|636f7079456e74726965733a204e6f742061204465636c6172 4205:C4,48|00802b3b4d0028000e0c000303033b021d2b352c362a0e0e0e4f0113002100022a4f020b003100022a2a69292705420e|@436,I229,@4206,@4205| 4206:C8,192|00802b354d00b8004d01b4000e0c000303722b362c372d382a35404d01a1000e0e0c0003035a2a0e0e4f02930031000229354d038a004d0186000e0e0e0c000303033c02013b03181205000200efff2a68012a2f2b4d0467000c0004260302151205000200efff292e3b4d0452000e0e0e0c0004514d0047002d2b2d6b6402012e6602342b354d0536004d0132000e0e0e0c000303172b363b2a0e0e0e4f061f002000024d0518002a6966020b2b0e0e0e4f020b00010002420e0e0e0e0e0e0e|@4208,-4,I229,@4209,-3,@3543,-9,@4207| 4207:C4,48|00802b3b4d0028000e0c000303033b021d2b352c362a0e0e0e4f0113002200022a4f020b003100022a2a69292705420e|@436,I229,@4206,@4207| 4208:S61|434f44455452454528292e707265436f6465283229636f7079436f6465283429696e736572742831297265636f70794465636c61726174696f6e283129 4209:C10,208|00802b35404d00c7000c0003035c2b363b2a0e0e0e4f01b700200002402a692a293b4d00aa000e0e0e0c000303033c021f293529354d0297004d0093000c0003030c2a36292503511e283b6402013b64640312294d0378000e0c00024d0270002a6964020129270402632b354d0460004d005c000e0c000303522b362c38293b4d004c000e0c0003030c2a3b4d0540000e0c000302013b032f1203000200efff292c4d062a000e0e0e0c0003294d071f000c00024d0818000e0c000203062935296402012f6502012d6502012b420e0e|@4211,I229,@4210,-3,@3353,-5,I233,@451,I105,I218| 4210:C4,48|00802b3b4d0028000e0c000303033b021d2b352c362a0e0e0e4f0113002200022a4f020b003100022a2a69292705420e|@436,I229,@4209,@4210| 4211:S55|434f44455452454528292e707265436f6465283229636f7079436f6465283429696e736572742831297265636f707956616c7565283129 4212:C4,48|00802b3b4d0028000e0c000303033b021d2b352c36290e0e0e4f0113002100022b4f020b00320002292b69292705420e|@4098,I229,@4212,@4091| 4213:C4,48|00802b3b4d0028000e0c000303033b021d2b352c362a0e0e0e4f0113002200022a4f020b003100022a2a69292705420e|@436,I229,@4091,@4213| 4214:O3|@4218,@4220,@4217 4215:C8,504|00802b354d00f0014d01ec010e0c00030a140025012a00300099003600390033002d002a002a002a004500d40155012a0019012a002a006c00e000d7013b06cd3c06cc3c06cb3c06ca3c06c92b37292b2d0e0e0e7d0400022b362c372d382b2d0e0c000203152a2d0e0c0002030a292d2f0e0e0e7d0600023b02013b6606d22b3629293b4d0270010e0c000303033c021829352a362a2e0e0e0c00020309292503511e203b02013b656506cc2b362c372d382b2d0e0c0002033529293b4d0237010c000303033c021829352a362a300e0e0c00020309292503511e1f3b02013b656403082a2d2f0e7d0600023b02013b6606d22b3629293b4d02fc000e0c000303033c022429352a362a2e020ae500e300e100df00dd000e0e0c00020309292503511e2c3b02013b656502c82b36292b2d0e0e0e7d0400022b3629293b4d02b7000c000303033c021c29352a362a2e0202a1000e0e0c00020309292503511e233b02013b6565028c2b362c3729354d0386004d02820002027a000e0e0e0c000303612936294d046f000c000203054d056600102928662a4d065d000e0e0c000364033c292c56570e0e0c0003032e2b293b4d0243000c000303033c021c29352a362a3002022d000e0e0c00020309292503511e233b02013b656402013b02013b6402013b65020d3c020a2b36292b2d0e7d040002420e0e0e|@4216,-9,I107,I229,-3,I105,@398,I150| 4216:S28|434f44455452454528292e7369646545666665637446726565283129 4217:O2|I15,@4224 4218:C7,272|00815608293b2a3b4d0004010e0c0003030329021f2a352b362b03033c0209312b4d01eb000c00032a2a2505250526031e2a3b666603033c02d45607293b2a3b4d00cc000e0c0003030329021f2a352b362b03033c0209312b4d01b3000c00032a2a2505250526031e2a3b6666039e2b4d029c000e0c00024d0394000e0c000203882b36294d0287000c00024d0380000e0c00020370293529354d0472004d006e000e0e0e0c0003035829362b36293b4d005c000e0c000303442a4d0251000e0e0c00024d0348000e0c000203033c022b2a4d023a000e0e0e0c000203032a02054d052b0010293b4d0124000e0c0003644d031b00300e0e7d08000202013b6502013b6402013b6402013b02013b430e|@4219,I229,I251,I105,I218,-3,@395| 4219:S35|434f44455452454528292e736964654566666563744672656552545343616c6c283229 4220:O2|I109,@4221 4221:O2|I110,@4222 4222:O2|I241,@4223 4223:O2|I246,0 4224:O2|I17,@4225 4225:O2|I24,@4226 4226:O2|I25,@4227 4227:O2|I26,@4228 4228:O2|I27,@4229 4229:O2|I28,@4230 4230:O2|I29,@4231 4231:O2|I105,@4232 4232:O2|I106,@4233 4233:O2|I107,@4234 4234:O2|I108,@4235 4235:O2|I111,@4236 4236:O2|I112,@4237 4237:O2|I113,@4238 4238:O2|I114,@4239 4239:O2|I115,@4240 4240:O2|I117,@4241 4241:O2|I118,@4242 4242:O2|I119,@4243 4243:O2|I120,@4244 4244:O2|I121,@4245 4245:O2|I122,@4246 4246:O2|I123,@4247 4247:O2|I125,@4248 4248:O2|I126,@4249 4249:O2|I127,@4250 4250:O2|I128,@4251 4251:O2|I130,@4252 4252:O2|I136,@4253 4253:O2|I137,@4254 4254:O2|I138,@4255 4255:O2|I139,@4256 4256:O2|I140,@4257 4257:O2|I141,@4258 4258:O2|I189,@4259 4259:O2|I196,@4260 4260:O2|I213,@4261 4261:O2|I214,@4262 4262:O2|I216,@4263 4263:O2|I217,@4264 4264:O2|I218,@4265 4265:O2|I223,@4266 4266:O2|I229,@4267 4267:O2|I230,@4268 4268:O2|I231,@4269 4269:O2|I232,@4270 4270:O2|I233,@4271 4271:O2|I234,@4272 4272:O2|I238,@4273 4273:O2|I239,@4274 4274:O2|I240,@4275 4275:O2|I242,@4276 4276:O2|I243,@4277 4277:O2|I244,@4278 4278:O2|I245,@4279 4279:O2|I247,@4280 4280:O2|I248,@4281 4281:O2|I249,@4282 4282:O2|I250,@4283 4283:O2|I251,@4284 4284:O2|I252,@4285 4285:O2|I253,@4286 4286:O2|I152,0 4287:O2|@4616,@4082 4288:C2,24|008b3b3b220f300e0e4f000b00300003651f0c0e0e0e0e0e|@4290,@4289| 4289:C87,6008|00812c354d0070174d016c170e0c00030a1600a2160e0b2e008e0a2106f31401062e00f7087000fc083a002e002d0b3c1576005d174413ee1435007412841241154d0233171006d13b2d6906ce2c362d372a3b0e0e4f031f173100034d0418170e0c00022a3b0e0e0e4f030b174100034d0404170e0c00023b2b2b6a3b2a69270506d94d05f11606d52c362d372e382a3b4f03e31641000329354d06da164d07d6160e0e0e0c00030308293629382965020e3c28403b4d08be160e0e0e0c00043b566829293b4d07ae160e0e0e0c000303033b021f29352a362a3629304d0997160c00036403052a68010207292503511e2c3b65642d354d067d164d0779160e0e0c000303082d362939296502044d0a66162a4d0b61160204591657160c00024d0c54160e0c0002030c2a0e0e4f0d471690000206dd29354d0e3c164d0738160e0c000307cf293629352a362b3a040200280b28403b4d081e160204161614160e0c0004293b404d0f0d160e0e0c0004504d0603162a693c28402b4d08f9150e0e0c00042c2a453b46502c352d362e040200280b28403b4d08dd150e0e0c0004293b404d0fd1150e0e0c0004504d06c7152a693c28402b4d08bd150e0e0c00042c2a453b46502c352d362e040200280b28403b4d08a1150e0e0c0004293b404d0f95150e0e0c0004504d068b152a693c28402b4d0881150e0e0c00042c2a453b46502c352d362e3b3b2223293b4d0767150204fb03f0030e0e0c000303032a021629362b3c4d104f150c0003292b25042504511e283b6565294d113b150c00022922250e0e1612002e15280000000003220d220d4d1320150e0c00034d1418152214306a4d151015122a0001000b00122b0001000700326b221c3b694d16f8140e0c000203033c020b221c3c694d16e7140c0002037a4d17de14122b000100070022172e222968054d18cc142b694d19c6142b694d1ac0142e694d1bba14220c69122f0001000700123000010006001231000100050003033c0202222d12320001000400123300010002001234000100010022293333333333333333223f34341241000100ffff0e0e0c000d270b06d33c28403b4d0860140e0c00043c28403b4d0854140e0c0004040200280b28403b4d0844140e0c0004293b404d0f39140e0e0c0004504d062f142a693c28402b4d0825140e0e0c00042c2a453b46502c12310001000600293b4d1c0c140e0c0003123300010006002a22104d10fa130e0e0e0c00032a3b2b4d0fed130e0e0c0004504d1de313221134220d31123a0001000700221368073b3b3b161e00ca133900000000023b220e3b4d1cbc130e0c00030391123a0001000600293b4d1ca9130e0e0c0003123c00010006002a3c4d1097130202a7000c00032a3b2b4d0f89130e0e0c0004504d1f7f132c3c3b3b68053c221b0e0e0e1620006e134100000000033f2a2c3b6b314d045e130e0e0e0c00024d215413302b3b6b293b693c28403b4d0845130e0e0c00042a3b4d073a130e0e0e0c000303053b2e6902043c2b2f6a270b0237220f3b4d1c1e130e0e0e0c000303272a4d0411130e0e0c00023b22170e0e16200002133d00000000034d06f8122b2b6a3b2a696602012a2710221822184d22e4120e0c00035033334d22d9120e0e0c00035029354d06cd124d07c9120e0e0c00030308293629372965021629353c4d07b3120c00030306293729640204293629642a354d069e124d079a120e0e0e0c000303082a362939296502044d0a86122b354d0680124d077c120e0c000303082b362936296502044d236a122229354d0663124d075f120c000303092229362935296502172229353c4d0749120e0e0c00030307222936296402013b2d354d0634124d0730120e0c000303082d362935296502132d353c4d071b120c000303062d36296402013b293b4d0709120e0e0c000303033202103b330e0e162400f61132000000000264293b4d07e9110e0e0c000303032b02103b2c0e0e162500d6113300000000026430354d06c9114d07c5110e0e0c00030308303629382965020e3c28403b4d08ae110e0e0e0c00042a2f322c33680530354d269b114d0797110c000303172b3b4d078c110e0c000303053b326902043c2c336a02064d0677112a69272a02093b0e4f0d6b11900002270906dc2c362d372e382f392c2c2c2c6b565d2a2a2e6a6412070001000a00317d0900022c3629352a362b392c3a565d293c4d1032110e0e0e0c0003040200280b28403b4d0820110e0c0004293b404d0f15110e0e0c0004504d060b112a693c28402b4d0801110e0e0c00042c2a453b46502c352d362e040200280b28403b4d08e5100e0e0c0004293b404d0fd9100e0e0c0004504d06cf102a693c28402b4d08c5100e0e0c00042c2a453b46502c352d362e4d27b110220f3212190001000a006b4d28a21022102c121a0001000b006b4d299310332d6a4d2a8c102b69020282104d2b82102d694d2c7c102c694d2d761030693c28403c4d086c100e0c0004121e0001000400121f000100020012200001000100221e31313131221e323b333b3434122d000100ffff0e0e0e0c000d3c28403b4d0830100e0c00044d2e28102a122500010007006a4d2f1b102a12260001000b006a2c4d040d100e0e0c00024d3004102b692a2a2221122a00020001000c000404020022230a0100fd00c20022234d06e20f694d16dd0f0e0e0c00020321122900010001002b4d31ca0f0e0e0e0c0002292b4d32be0f0e0e0e0c00036502013b03064d26ae0f02022223303b4d1ca40f0e0c00032c222822252c222a2f3b3b68084d0e8f0f2a69333b4d1c870f0c00033b2a4d077e0f0e0e0e0c000364030f29122e00010004000e0e0c00020201292f222b22283b222d323b3b68084d0e540f2a693c28403b4d084a0f0e0e0e0c000412310001000b003b2a2f2d2f6805334d06310f452a46260b029b2a222622233b22283c3b3b68084d0e190f2a693c28403b4d080f0f0c0004122c0001000b003b2a4d33ff0e2d2f68052e4d06f60e452a46260602602f3b4d1ce90e0e0e0c00032b222722242c22293b3b3b68084d0ed30e2a693c28403b4d08c90e0e0e0c0004122d0001000a003b2a2d2d223468052231354d26ae0e4d07aa0e0e0e0e0c000303082f3b452d465002092f4d06950e452a4650260629221d221d4d22860e0e0e0e0c000350221622164d22770e0c00035029272906cd3b2d6906ca2c362d373c28403b4d085d0e0e0e0c00043c28403b4d08500e0e0c00042c3b69293b4d07430e0c000303032c020c3b2d0e0e4f34330e6000026428092a6912080001000b0012090001000a00569f56ae56bd56cc56db56ea3468014d350a0e220e6929220e69121300010002002a2a6912150001000100220e220e220e220e220e220e220e220e220e220e34341222000100ffff0e0e0c000d22133b4d1cc90d0e0e0c00034d0cc00d0e0c0002034122153b69293b4d07b00d0e0c00030304221502173b221602049b0d990d0e0e163600960d1a00000000026428092a6929221c0e160300820d1c000100000366029e3b3b22160e0e1637006e0d1a0000000002121a0001000b00121b0001000a00121c0001000900121d0001000800121e0001000700121f00010006001220000100050012210001000400221d68014d38280d22206929222069122500010002002a2a69122700010001002226220e220e220e220e220e220e220e220e220e34341234000100ffff0c000d294d04eb0c0c00024d06e40c2a22126a3b2a692714271606d32c3656182d4d0bce0c0e0e0e0c00024d0cc40c0e0c0002035f2d352a4d0bb70c0c00024d0cb00c0e0c000203432a3529352a362c2a4d099e0c0e0e0e0c00034d0c940c0e0c000203054d398a0c103b2f4f3a830c700002568d2a3c2b6a662b0e0c00024d3b700c2a693b2a69270502054d3c630c106402054d3d5b0c106506db2c36293b4f034f0c2100034d04480c0e0c00024d3e400c2a693b2a696606db2c362d372e382b3b0e4f032b0c4100034d04240c0e0c000229354d3f1a0c4d07160c0e0e0e0c000303452936293b4d07060c0202fe0b0e0e0e0c000303242b354d26f40b4d07f00b0e0c000303064d40e60b020c2b310e0e0e4f03db0b610003020a2c310e4f03cf0b6100036406cc2b304f03c30b5100032b310e0e0e4f03b70b6100033b2b354d06ad0b4d07a90b0e0e0c000303082b362937296502162b353c4d07930b0c000303062b37296402042b3629642c354d067e0b0202760b4d07760b0e0e0e0c000303082c362935296502172c353c4d075f0b0202570b0c000303062c36296402013b2c354d06490b4d07450b0e0e0c000303082c362937296502162c353c4d072f0b0c000303062c37296402042c3629642d354d061a0b4d07160b0e0e0e0c000303082d362935296502172d353c4d07ff0a020206060c000303062d36296402013b2c354d3fe90a4d07e50a0e0e0c000307dd2c362c3b4d07d60a0e0e0e0c000307cf2b354d3fc80a4d07c40a0e0c000307cd2b362b3b4d07b60a0e0e0e0c000303a62a2a4d09a80a0e0c000303343257e80c00020303310227323b693c28403b4d088c0a0e0c00042a3b4d07820a0e0e0e0c000303053b316902043c2b326a6502640402002b3c4d07650a0e0e0c0003030c2a3b4d09580a0e0c000302013b0308293b45344650023b2b3b4d07410a0e0e0c0003030c2a3c4d09340a0e0c000302013b0314333b693f2a4d41220a3c6b2b3b452a462603020b3d3431306b2a3b452a465129640226314d04030a02045b003c000e0e0c0002314d04f309020210000c00023d220c2c2c6b3b2a696664021c304d04da090e0e0e0c0002304d04cf090c00023d342c2c6b3b2a6966021a304d04bc090e0c0002304d04b3090c00023d342c2c6b3b2a69666406d22c35404d079d090e0e0c000307d92c362b35404d018d090e0e0c00030a010020001201304d047c090e0c0002304d0473090c00023d342c2c6b3b2a696606d82b363b2b293b4d075b090c000303032a021629362b3c4d104b090c0003292b25042504511e203b65653b2b293b4d0734090e0c000303032a021629362b3c4d1023090c0003292b25042504511e213b65652a2a4d420e090e0e0e0c00036503713b2b293b4d07fd080e0e0c000303032a021629362b3c4d10eb080c0003292b25042504511e223b656556ec293b4d1cd4080202d9030e0c0003121100010006002a3c4d10bf08020261010c00032a3b2b4d0fb1080e0e0c0004502b3b3b3232320e0e1643009e081900000000072705021e314d048f0802022e010c0002314d0483080c00023d220c2c2c6b3b2a69666406d32b362c372a354d1f69084d0765080e0e0c000307ce2a362b372c382a3c4d0752080e0e0e0c000303a2293b4d0744080e0c000303723b2f293b4d0736080e0e0e0c000303032a021629362b3c4d1023080c0003292b25042504511e233b65652d2a4d420e080e0e0e0c00036403182b68012c3b2b323b320e164300f60719000000000764021f220c4d04e7070c0002220c4d04de070e0e0e0c00023d22102c2c6b3b2a69660222220c4d04c6070e0e0e0c0002220c4d04ba070e0e0e0c00023d22102c2c6b3b2a6966022a220c4d04a207020241000e0e0e0c0002220c4d049207020213000e0e0e0c00023d22102c2c6b3b2a696666021d324d0476070e0e0e0c0002324d046b070c00023d220d2c2c6b3b2a6966656406cd2c35280b4d0752070e0e0e0c000307ca2c362d372a354d1f40074d073c070e0c000307db2a362b372c382a3c4d072a070e0e0e0c000307c9293b4d071c070e0c000307d22f35404d010f070c00030a010021009e00344d0400070e0c0002344d04f7060c00023d220f2c2c6b3b2a696606d52f363b2a293b4d07de060e0e0e0c000303032a021629362b3c4d10cb060c0003292b25042504511e233b65652e2a4d42b6060e0e0e0c00036403182c68012d2a3b3b2e330e1643009e06190000000007640227220c4d048f06020294010c0002220c4d04820602026b010e0e0e0c00023d22102c2c6b3b2a69666406dc2f3630372a354d1f61064d075d060204260107010c000303bb2a362b372c382a3c4d0746060202d3000e0e0e0c0003037e293b4d0734060e0c0003034e312d4d4228060e0c000303213068012c68012d2b2b3b3b220f0202a0000e0e1643000a061e000000000765021f22104d04fb050c000222104d04f2050e0e0e0c00023d22142c2c6b3b2a6966022222104d04da050e0e0e0c000222104d04ce050e0e0e0c00023d22142c2c6b3b2a6966022222104d04b6050e0e0e0c000222104d04aa050e0e0e0c00023d22142c2c6b3b2a6966660225220d4d04910502021c000e0e0c0002220d4d0482050e0e0e0c00023d22112c2c6b3b2a696665021d344d046a050e0e0e0c0002344d045f050c00023d220f2c2c6b3b2a6966021a344d044b050c0002344d0443050c00023d220f2c2c6b3b2a696666021d314d042e050e0e0e0c0002314d0423050c00023d220c2c2c6b3b2a696665021c2f4d040e050e0e0e0c00022f4d0403050c00023d332c2c6b3b2a69662707270406d82c363b2a0e0e4f44e7042000026506ca2c36040200280b28403b4d08d3040c0004293b404d0fc9040e0e0c0004504d06bf042a693c28402b4d08b5040e0e0c00042c2a453b46502c352d362e3c28403c4d089d040e0e0c00043b0403003c342b0e0e4f458b04d000045029352a362b37402b692f3b4d1c78040e0c00030313294d466d040e0e0c00024d3f64042a6964020129402c6934344d1355040e0e0c00034d474c04121400010007002b6a3c28403b4d083b040c00044d4834042b69322a302d3168054d0627042a69271606cc2c362d372a3b0204130411040e0e4f030f0431000329354d0606044d0702040e0e0e0c0003030829362939296502044d0aee032a354d06e8034d07e4030e0c000303082a362937296502162a353c4d07cf030c000303062a37296402042a3629643b2b35404d07b8030e0c0003030c2b0e0e4f49ab0360000206d02a354d3fa0034d079c030e0c000303602d2b4d4a90030e0c00032d354d0686034d0782030e0e0e0c000303082d362935296502132d353c4d076b030c000303062d36296402013b3c28403b4d08570302024f030c00042a3b4d074a030e0e0e0c000303053b2c6902043c2b2d6a6602bb2c354d0630034d072c030e0c000303082c362937296502162c353c4d0717030c000303062c37296402042c362964293528054d0700030e0c0003030c2e2a4d4af4020e0c0003022529354d3fe8024d07e4020e0c000303102e2a4d4ad802020259000e0c0003020528062a306a2e354d06c3024d07bf020c000303082e362935296502132e353c4d07ab020c000303062e36296402013b3c28403b4d0897020c00042a3b4d078e020e0e0e0c000303053b2c6902043c2b2d6a2704270606d03b2d6906cd2c362d372e382b3b0e0e0e4f0363024100034d045c020e0c00023b2b0e0e0e4f4b4f025000022d320e0e0e4f0343027100034d043c020e0c00024d4c34022d2b2d6b3b2a69270806d03b2d6906cd2c362d372a3b0e0e0e4f03170231000329354d060e024d070a020e0e0e0c00030308293629372965021629353c4d07f3010c000303062937296402042936296429354d1fde014d07da010e0e0e0c000303033b02054d4dcb0110565c293b4d1cc2010e0e0e0c0003567c2a304d10b4010e0c00032a3b2b4d0fa9010204a1019f010c0004504d4e9b01302d6a312a4d4f92010e0e0e0c00034d5088012e69332a4d4f80010e0c000333354d0676014d0772010e0e0e0c00030308333629372965021e33353c4d075b010204530151010e0e0c0003030633372964020433362964280b2a220e6a402c69220d354d0634014d0730010e0c00030309220d36293529650217220d353c4d0719010e0e0c00030307220d36296402013b2f3b4d0704010e0c000303032902103b2a0e0e165100f200140000000002643c28403b4d08e3000c00044d52dc0012150001000700692b2a302d3168054d06c9002a69271502bf2c362d372e382a353d4d07b6000e0e0e0c00030319292b2d4d53a7000c0004293b0e0e0e4f039b0051000364028a2a3528094d078d000e0e0c00030319292b2d4d537f000c0004293b0e0e0e4f037300510003640262293b4f0367004100034d0460000e0c00022b3b0e0e0e4f0353005100034d044c000e0c00023b2a3b0e0e4f543f00700003293b2a3b4d0734000e0c000303032902132a352b362a2c692a2a2505250526031e1e3b66664d5513000c00023b2a6927046602042c362964430e0e0e|@4292,-11,I107,@4095,@4289,@4293,@4297,-1,I229,I11,I251,@431,I105,I218,@4298,-7,I255,I106,I111,@4380,@4397,@4400,@4402,@4049,@4404,@4410,@4412,@4414,@4416,I253,@4418,@4424,-5,@4460,-4,@4046,@4462,@4464,@4465,-2,@4466,@4468,@4470,@4472,@4474,@4476,@4478,@4480,@4484,@4486,@4488,I234,@501,@4503,@4504,@4506,@4507,@4512,@4513,@4515,-8,@4516,@4516,-10,-3,@4518,@650,I113,@4520,@4543,@4590,@3353,@223,@220,@4595,@3342,@4604,-6,@4605,@4607,@4537,@4609,@4611,@4612,@4530,@4291,@4056| 4290:S27|434f44455452454528292e6f7074696d69736550726f6328313229 4291:C9,568|00812c353d4d002f020c000303832c362d372e382a3b0e0e0e4f011b02410003293b2a3b4d0010020e0c000303032902132a352b362a2c692a2a2505250526031e1e3b66664d02ef010c00022a3b0e0e0e4f01e301510003293b2a3b4d00d8010e0c000303032902132a352b362a2c692a2a2505250526031e1e3b66664d02b7010c00023d2e2c2c6b29326929270706cb2c3528094d009f010c0003034a2c362c2a293b4d0090010e0c000303054d038601102936293b4d007d010e0e0c000303112a35292d0e0e0e4f016b016100036402112a35292d69292c2505250526031e3e3b65270406dd2c35280b4d0048010e0c000307dc2c362d372a354d0438014d0034010e0c000307dc2a362b372c382a3c4d0022010e0e0e0c000303db293b4d0014010e0c000303b656542d2a4d0506010e0e0e0c0003640388565129354d04f5004d00f1000e0e0c0003035e29362a372b382a3c4d00de000202d8000e0e0e0c0003032f293b4d00cc000e0c0003030d3b220c4f06bf00a00002640214569456a14d07b1002b22102c6b29220f692927040214569456a14d079b002b22102c6b29220f69292704660214566456714d0784002b220d2c6b29220c6929270464021b02026f00565456614d0769002b02025000220c2c6b293469292704021756545661020227004d074c002b220c2c6b2934692927040213565456614d0737002b220c2c6b293469292704660212562456314d0721002b322c6b293169292704650212560456114d070c002b302c6b292f69292704430e|@4614,I229,@4291,@4056,@2102,-5,I113,@4613,-11| 4292:S38|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229 4293:O1|@4294 4294:C4,192|00802b354d00b8004d01b4000e0c000303082b362935296502132b353c4d019f000c000303062b36296402013b293b4d018d000e0e0c000303302c354d0080004d017c000e0c000303082c362937296502162c353c4d0167000c000303062c37296402042c36296402502c354d0050004d014c000e0c000303082c362937296502162c353c4d0137000c000303062c37296402042c362964293b69293b4d011f000c000303032b020c3b2c0e0e4f020f004000026428092a696664420e0e0e0e|@4296,-1,I229,@4295| 4295:C3,40|00802b3b4d0020000e0c00030304560202142b352c36290e0e4f010b002100022b2a69292704420e|@1884,I229,@4295| 4296:S40|434f44455452454528292e6f7074696d69736550726f632831322967657447656e6572616c283129 4297:O2|0,@431 4298:C14,520|00803c28403c4d00fe010e0e0e0c000456143b2a0e4f01ef01300002564129354d02e4014d03e0010e0c00030308293629372965021629353c4d03cb010c0003030629372964020429362964566203033c0202576b2f3b4d04ad010e0e0c000303cb567129354d029e014d039a010e0e0e0c00030308293629372965021629353c4d0383010c000303062937296402042936296429354d056e014d036a010e0e0e0c000303033c02013b65037d2903033c0275567129354d024d014d0349010e0e0c00030308293629372965021629353c4d0333010c000303062937296402042936296429354d051e014d031a010e0e0e0c000303302936294d060b010c000203054d070201102928662a4d08f9000e0e0c000364030b29304d09eb000c000302013b6402013b6502013b02013b29030d3f2e2d2d6b579a0e0c00020274334d06c5000e0e0c00024d0abc000e0c0002035b333529352a3656b7294d06a9000e0e0c00024d0aa0000e0c0002031129352b2a4d0b92000e0e0e0c00036402013b64031657bd313c2b6a642b0e0e0c00024d0c74002a6964021157bd313b2b6a642b0c00023f2a31316b646602053f2e2d2d6b569129354d024e004d034a000e0e0e0c00030308293629352965021329353c4d0333000c000303062936296402013b3c28403b4d001f000c00042a3b4d0316000e0e0e0c000303053b2d6902043c2b2e6a270c420e0e|@4300,I11,@4301,-1,I229,I253,-3,I105,@398,I150,@4299,I218,I251,-8| 4299:O1|@4302 4300:S54|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d6973652832296e6f74496e6c696e6543616c6c283129 4301:C8,112|00802b3b4d0068000e0c000303033b025d2b352c362a3b0e0e4f0153003300034d024c000e0c000229354d0342004d003e000e0e0e0c000303033c02013b4d042e000e0e0e0c000203135634293b3b4d051d000e0e0c0004503b5102023b502a0e4f060b003100022a2a69292705420e|@436,I229,@4289,@4293,-3,I218,I255,@4301| 4302:C7,192|00814d00ba003b2a3b4d01b3000c0003030329022c2a352b362b03033c02162a4d029c000e0c0002312a4d0392000e0e0e0c0003642a2a2505250526031e363b666503033c02754d0475003b2a3b4d016e000e0e0e0c0003030329022c2a352b362b03033c02162a4d0254000e0c0002312a4d034a000e0e0e0c0003642a2a2505250526031e393b6665032f2b3c2a3b4d012c000e0c0003030329021b2a352b362a2c4d0519000e0e0c00032a2a2505250526031e263b666502013b430e0e0e|@4304,@4305,I229,I189,I251,@4373,@4303| 4303:O1|@4376 4304:S26|434f44455452454528292e6561726c7952747343616c6c283229 4305:O2|15,@4306 4306:O2|24,@4307 4307:O2|25,@4308 4308:O2|26,@4309 4309:O2|27,@4310 4310:O2|28,@4311 4311:O2|29,@4312 4312:O2|105,@4313 4313:O2|106,@4314 4314:O2|107,@4315 4315:O2|108,@4316 4316:O2|109,@4317 4317:O2|110,@4318 4318:O2|111,@4319 4319:O2|112,@4320 4320:O2|113,@4321 4321:O2|114,@4322 4322:O2|115,@4323 4323:O2|117,@4324 4324:O2|118,@4325 4325:O2|119,@4326 4326:O2|120,@4327 4327:O2|121,@4328 4328:O2|122,@4329 4329:O2|123,@4330 4330:O2|125,@4331 4331:O2|126,@4332 4332:O2|127,@4333 4333:O2|128,@4334 4334:O2|130,@4335 4335:O2|133,@4336 4336:O2|134,@4337 4337:O2|135,@4338 4338:O2|136,@4339 4339:O2|137,@4340 4340:O2|138,@4341 4341:O2|139,@4342 4342:O2|140,@4343 4343:O2|141,@4344 4344:O2|189,@4345 4345:O2|196,@4346 4346:O2|213,@4347 4347:O2|214,@4348 4348:O2|216,@4349 4349:O2|217,@4350 4350:O2|218,@4351 4351:O2|223,@4352 4352:O2|229,@4353 4353:O2|230,@4354 4354:O2|231,@4355 4355:O2|232,@4356 4356:O2|233,@4357 4357:O2|234,@4358 4358:O2|238,@4359 4359:O2|239,@4360 4360:O2|240,@4361 4361:O2|241,@4362 4362:O2|242,@4363 4363:O2|243,@4364 4364:O2|244,@4365 4365:O2|245,@4366 4366:O2|246,@4367 4367:O2|247,@4368 4368:O2|248,@4369 4369:O2|249,@4370 4370:O2|250,@4371 4371:O2|251,@4372 4372:O2|152,0 4373:O2|17,@4374 4374:O2|252,@4375 4375:O2|253,0 4376:C10,112|00812c354d0068004d0164000e0c000303582c362c034f294d0254000e0c000203033c023f294d0246000e0e0e0c000203054d033a001029294d0433000c00022928404d0529000e0e0c00032928404d061d000e0e0c0003664d0713002d0e0e7d05000202013b6402054d0802001043|@4378,-3,I229,I105,@398,I17,I243,I251,I218,@4377| 4377:O3|@7141,@228,@4379 4378:S40|434f44455452454528292e6561726c7952747343616c6c2832296973496d6d757461626c65283229 4379:S29|6973496d6d757461626c653a20617267206e6f7420636f6e7374616e74 4380:C8,112|00812b3b4d0068000e0c000303033b025e2b352c364d0157001204000100e4ff692b3b0e0e4f0247004200032a2a323b0e4f033b00720005313c4d0432000e0e0e0c0003292e0e0e0e4f052300710003293b4d001a000e0e0e0c000303032b020c3b2c0e0e4f06070080000264270743|@4382,I229,@4383,@4289,@4385,I106,@4380,@4381| 4381:C3,48|00802b3b4d0028000e0c000303091201000100f8ff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1884,I229,@4381| 4382:S45|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f7079283229 4383:C3,32|00802b352c3656272b4d0013000c00022b68012b2b2b4d010600337b05080004|@4384,I111,@3543| 4384:S54|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f7079283229736574546162283129 4385:C9,360|00832d354d0060014d015c010e0c000303082d362937296502162d353c4d0147010c000303062d37296402042d3629643b2a354d0231014d012d010e0e0c000303aa2f354d0020014d011c010e0c000303082f362939296502044d030a0129354d0404014d0100010e0c0003033d2936293a294d00f1004d01ed000e0e0c0003031c303c4d01e0000e0c000303053b2e690209324d05d0000e0c0002020a324d05c5000e0e0c0002650209304d05b8000e0c0002302a69330e0c000232354d00a6004d01a2000e0e0e0c00030308323629352965021332353c4d018b000c000303063236296402013b6602782a354d0676004d0172000e0e0e0c0003035d2a38293b4d0162000e0e0e0c00030342304d0555000e0e0c0002302a69330e0c000232354d0042004d013e000e0e0e0c00030308323629352965021332353c4d0127000c000303063236296402013b6502080e4f0713002000016402090e0e4f070700100001651f040e|@4387,-1,I229,-3,@431,-7,@4388,-5,@4386| 4386:C14,392|007f570c293b4d007e010e0e0e0c0003572c2a3c4d0170010e0c00032a3b2b4d0265010e0e0c000450564929354d0357014d0453010c0003030829362939296502044d05420156672a354d063a014d0436010e0e0e0c0003032d2a36293a294d0325014d0421010e0e0c000303152b3c4d0414010e0c000303064d050a0102012c02012c6502012a4d07fc00303c3b3b6805569929354d03ee004d04ea000e0e0e0c0003030829362936296502044d08d60056b929354d03ce004d04ca000e0e0e0c00030308293629382965020e3c28403b4d09b2000e0e0e0c00043b2c2f2c32680504020030354d0a9c004d0498000e0c00030308293b453046500209294d038500452b46502912110001000200292b6964121200010004000e0e0e0c00021212000100030029354d035b004d0457000c00030308293629352965021329353c4d0443000c000303062936296402013b1214000100feff4d0b2c0022132b3b6b293b69293b4d041e000e0e0e0c000303032c02103b2d0e0e160c000a0019000000000264271641|@4394,I253,I106,I255,-1,I229,@431,-7,-5,@4395,I11,-2,-4,@4393| 4387:S37|434f44455452454528292e6f7074696d69736550726f63283132296e65774465636c283429 4388:O1|@4389 4389:C7,256|00802b354d00f8004d01f4000e0c000303082b362935296502132b353c4d01df000c000303062b36296402013b293b4d01cd000e0e0c000303032c02bd2c354d00bd004d01b9000e0e0c000303082c362937296502162c353c4d01a3000c000303062c37296402042c3629642d354d008e004d018a000e0e0e0c000303082d362939296502044d0276002e354d0070004d016c000e0c000303082e362936296502044d035a002f354d0054004d0150000e0c000303082f3629382965020e3c28403b4d043a000e0e0e0c00043b2b2e2c2f68050402002d354d0524004d0120000e0c00030308293b452f46500209294d000d00452b465029270664420e0e0e0e|@4391,-1,I229,@431,@4390,I11,-2| 4390:O1|@4392 4391:S39|434f44455452454528292e6f7074696d69736550726f6328313229737472697044656373283129 4392:C2,8|00804d000200100e|@440,@439| 4393:C3,48|00802b3b4d0028000e0c000303091201000100e9ff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1884,I229,@4393| 4394:S39|434f44455452454528292e6f7074696d69736550726f63283132296e65774465636c2834292f33 4395:O1|@4396 4396:C2,8|00804d000200100e|@440,@439| 4397:O1|@4398 4398:C9,128|00812c3b4d0078000e0c000329354d016e004d026a000e0e0e0c0003035c2936293b4d005a000e0e0e0c0003293b4d024e000e0e0e0c000303064d034200023778760f3b2c3b3b4d0435000e0e0c0004050800ff6d4d052700102b3c2b3b2e4d061d000e0e0c000650294d0712000e0e0e0c0002502964650204293629646443|@4399,I253,-1,I229,I49,I11,@78,I195,I47| 4399:S22|5374726574636841727261792e766563746f72283229 4400:C6,136|00812b354d0080004d017c000e0c000303082b362937296502162b353c4d0167000c000303062b37296402042b36296429354d0252004d014e000e0e0e0c0003032b2936293b4d033e000e0e0e0c000303043b50021456282e68012a2c2b4d0426000e0e0e0c000426035002023b5056172d68012a302b4d040d00310e0e0e7b050700040e0e0e0e|@4401,-1,I229,-5,I232,@3543| 4401:S56|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229736574546162466f72496e6c696e65283229 4402:C8,128|00822d352c3b4d0076000e0e0e0c00034d016c000e0c000203033c020b293b4d025d000e0e0c0003030e2e2e2e6a56272d0e0e0e7d0600025619292b4d0340000e0c0003294d0437000c00024d0130000e0c0002031a29355648312a4d0520000e0c0003292c4d061600330e7e0b00033030306a56472f0e7d0800020e0e0e0e|@4403,I113,I218,I232,@451,I105,I107,@224| 4403:S59|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d6973652832296c6f6f6b75704c6f63616c4e657741646472283329 4404:C19,280|00822b3b4d0010010e0c000307cf2d35293b4d0002010e0e0e0c000303054d01f60010293b4d02ef000c0003032e5618292b4d03e2000e0e0e0c0003294d04d7000c00024d05d0000e0c000203062935296402054d06c0001065026a56192a4d07b5000e0e0c0002293b4d08aa000e0e0e0c000303033c02182a4d099a000e0e0e0c00022a2a4d0a8e000e0e0e0c00036403054d0b8100102a2a4d0c7a000e0e0e0c00032964294d046d000e0e0c00024d0564000e0c000203062935296402054d0d5400106656272f2a4d0e4a000e0e0e0c0003292c4d0f3e0031020205000e7e090003560a29354d102c004d0028000e0c0003030829362936296502044d1116002d3c4d0e10000e0c000330302b6a642a2e0e7d070002|@4406,I229,@4407,I233,@451,I105,I218,@226,I111,I234,I15,I231,@52,I253,@226,I107,@224,-1,@4405| 4405:O1|@4409 4406:S61|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d6c6f6f6b7570446563283329 4407:O3|@7141,@228,@4408 4408:S35|6c6f6f6b75704465633a20496e6c696e652066756e6374696f6e207265637572736573 4409:C2,8|00804d000200100e|@440,@439| 4410:C1,16|00802b352c362d3756372e7b05030004|@4411| 4411:S59|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d6973652832296c6f6f6b75704c6f63616c4e657741646472283129 4412:C1,16|00802b352c362d3756372e7b05030004|@4413| 4413:S61|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d6c6f6f6b7570446563283129 4414:C1,16|00802b352c3656272d0e0e0e7e030003|@4415| 4415:S56|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229736574546162466f72496e6c696e65283129 4416:C2,24|00802b352c3656272a68012a2d2b4d000600327b05070004|@4417,@3543| 4417:S59|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d6973652832297365744e6577546162466f72496e6c696e65283129 4418:C7,120|00823b5619293b3c4d006c000e0c0004502e03043b50020f5628293b3c4d0057000c0004503b513b30293b4d0149000e0e0c000303032a021629362b3c4d0237000c0003292b25042504511e223b656556372a2a4d0320000e0c0003654d0417000c000203032f020c5627302a4f0507004000036465440e|@4420,I255,I229,I106,I113,I218,@4419| 4419:C21,456|00812c3b4d00c0010e0c000303162b3b4d00b4010e0c000303033b02054d01a7011006d72c352d36572c2e3b4d0298010e0c000303033c0218294d038a010e0e0e0c00022f2a4d047e010e0e0e0c00036403054d05710110292f4d066a010e0e0e0c00032964294d075d010e0e0c00024d0854010e0c000203062935296402054d0944011029354d0a3d014d0039010e0e0c00030308293629372965021629353c4d0023010c00030306293729640204293629642e354d0b0e014d000a010e0e0e0c000303292e362a354d0bfa004d00f6000e0e0e0c000303112a362a2a4d0ce6000e0e0e0c00036402013b6402812e354d0dd3004d00cf000202ca000c0003036d2e362f3730382c354d0dba004d00b6000e0e0e0c000303512c362d372e382e2c4d0ea2000e0e0e0c000303392d2b4d0094000e0c0003032a56c72a2a4d0f86000e0e0e0c000357eb2a2a4d1078000e0c0003302a4d0e6e000e0e0e0c0003270402013b02013b6602013b6602013b2903043b50020e577a29343c4d1148000e0c000451577a29344d123b000c000364031c323c4d102f000c00032f2a0e0e0e4f132300910003312a6929660216323c4d1013000c00032f2a0e0e0e4f13070091000364270743|@4422,I229,@4421,I234,I15,I231,@52,I253,I105,I218,@226,-1,-3,I251,-5,I113,I106,I107,@3543,@451,@4419| 4420:S62|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d66696c74657241726773283329 4421:O3|@7141,@228,@4423 4422:S76|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d66696c7465724172677328332966696c7465724172677327283229 4423:S33|66696c74657241726773273a2077726f6e67206e756d626572206f662061726773 4424:C15,488|00804d00e201571d56211204000100ebff1205000100dbff1206000100cdff1207000100d8ff1208000100cfff68081202000100f4ff4d01ae011204000100d6ff694d02a2012c694d039c011206000100d7ff694d0490011207000100ddff69576d577c578b03033c02025682579a56a02968014d057001120e000100caff6956d02a2a6957f82a2a6912120002000100221022102210221022102210221022102210220f3434121f000200ffff0e0e0e0c000d1214000100d4ff293b4d0627010c00036403771214000100dbff293b2a3b4d0712010e0e0e0c0003030329024e1217000100cfff292c4d08fa000e0e0e0c0003640322293c4d09eb000c00032b3c4d0ae2000e0e0e0c0003292b25042504511e433b6502162a3c4d0ac9000e0e0c0003292b25032503501e5b3b64660e160b00b20015000100000202a11214000100d5ff293b4d069d000e0e0c000364038b1214000100dbff293b2a3b4d0786000e0e0e0c0003030329024e1217000100cfff292c4d086e000e0e0e0c0003640322293c4d095f000c00032b3c4d0a56000e0e0e0c0003292b25042504511e433b6502162a3c4d0a3d000e0e0c0003292b25032503501e5b3b64652922184d0c25000e0e0c00030310290e0e160d00160017000100000202012b650201292713420e0e0e0e0e0e|@4426,@4427,@4431,@4432,@4434,@4435,@4436,I253,I229,@451,I106,I107,@4425,I233,@4424| 4425:C20,480|0080570d293c4d00d6010e0e0e0c00034d01cc0156302b1206000100ebff1207000100cfff1208000100d8ff56816807040200280b28403b4d02a4010e0c0004293b404d0399010e0e0c0004504d048f012a693c28402b4d0285010e0e0c00042c2a453b46502c4d057501302b120c0002000b006b4d066701120b000100ebff2c6a120b000100f4ff4d0753012c694d084d0133694d0947012d694d0a410130693c28403c4d0237010c00041211000200050003033c02071211000100fcff121200020004004d0b16011214000100caff691214000100faff2a2a69121600020002002a2a6912180002000100220d220d220d220d220d221b220e220e220e3b34341225000200ffff0c000d121a000100dbff293b2a3b4d0cc5000e0e0c0003030329024e121d000100cfff292c4d0dae000e0e0e0c0003640322293c4d009f000c00032b3c4d0e96000e0e0e0c0003292b25042504511e423b6502162a3c4d0e7d000e0e0c0003292b25032503501e5a3b646529221e4d0f65000e0e0c00030310290e0e16100056001d000100000202472b4d1149000e0e0c0002121d0002000700293c4d0037000c0003121f000100f3ff2c2a2c3b22254d0423003b3b68084d121b002a693c28403b4d0211000e0e0c00043b2b692707271b420e0e0e0e|@4439,I106,@4440,I11,I255,-1,@4448,@4450,@4452,@4454,@4456,@4458,@4438,I229,@451,I107,I233,@4425,@4293,-7| 4426:S70|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d636865636b466f724c6f6f70496e73747273283129 4427:C21,360|00822b3b4d0060010e0c000307ca2d35293b4d0052010e0e0e0c0003030c56184d0144010e0c000206d3293b4d0238010e0c0003032e5619292b4d032a010e0e0e0c0003294d041f010c00024d0518010e0c000203062935296402054d060801106502b6561d2a4d07fd000e0e0c00022a2a4d03f2000e0e0e0c000365032a561b562a2a2a4d08df000c0003292d4d08d6000e0e0e0c00034d09cc002a3c3b3b68053b2a6927050271561c2a4d07b8000e0c0002293b4d0aae000e0e0e0c000303033c021c2a4d0b9e000e0e0e0c00022a2a4d0c920002025a000e0e0e0c00036403054d0d8100102a2a4d0e7a000e0e0e0c00032964294d046d0002021b000e0e0c00024d0560000e0c000203062935296402054d0f5000106656272f2a4d1046000e0e0e0c0003292c4d113a00310e7e090003560829354d122c004d0028000e0c0003030829362936296502044d1316002d3c4d1010000e0c000330302b6a642a2e0e7d070002|@4429,I229,@4388,I233,@451,I105,I218,@226,I111,I106,-5,I234,I15,I231,@52,I253,@226,I107,@224,-1,@4428| 4428:O1|@4430 4429:S77|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d636865636b466f724c6f6f70496e7374727328312970726576283329 4430:C2,8|00804d000200100e|@440,@439| 4431:C1,16|00802b352c362d3756372e7b05030004|@4411| 4432:C1,16|00802b352c362d3756372e7b05030004|@4433| 4433:S77|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d636865636b466f724c6f6f70496e7374727328312970726576283129 4434:C1,16|00802b352c3656272d0e0e0e7e030003|@4415| 4435:C2,24|00802b352c3656272a68012a2d2b4d000600327b05070004|@4417,@3543| 4436:C1,16|00802b352c362d3756372e7b05030004|@4437| 4437:S62|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d66696c74657241726773283129 4438:C1,16|00802b352c362d3756372e7b05030004|@4437| 4439:S71|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d636865636b52656375727369766543616c6c73283129 4440:C22,456|00822b3b4d00c0010e0c000307d42d35293b4d00b2010e0e0e0c0003034756182e2a4d01a2010e0e0e0c00034d0298013b3b2c3b68055648312a4d018a010e0e0e0c00034d0280013b3b2c3b68054d03760156873b2b302c2f68054d0469012a69270906d7293b4d055d010e0e0c000303425619292b4d064e010e0e0e0c0003294d0743010c00024d083c010e0c000203062935296402054d092c01105648312a4d0123010c0003292c4d0a1a01330e7e0b0003561a2a4d0b0d010e0e0c00022a2a4d0602010e0e0e0c000365032a3b2a4f0cf3002000025638302a4d01e8000202a7000e0c00034d02dc002c3c2c3b68053b2a692705028f561b2a4d0bc8000e0c0002293b4d0dbe000e0e0e0c000303033c02182a4d0eae000e0e0e0c00022a2a4d0fa2000e0e0e0c00036403054d109500102a2a4d118e0002024a000e0e0e0c00032964294d077d000e0e0c00024d0874000e0c000203062935296402054d126400105658322a4d015b000c0003293c4d1352000e0e0e0c0003292d4d0a4600220c7e0d0003640235560c29354d0435004d0031000e0e0c0003030829362936296502044d141e002d3c4d0118000e0c000330302b6a642a2e0e7d070002440e0e0e0e0e0e0e|@4442,I229,I107,-5,@4443,-1,I233,@451,I105,I218,@226,@224,I111,@4445,I234,I15,I231,@52,I253,@226,I106,@4441| 4441:O1|@4447 4442:S78|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d636865636b52656375727369766543616c6c7328312970726576283329 4443:O1|@4444 4444:C2,8|00804d000200100e|@440,@439| 4445:C7,96|00802b3b4d0058000e0c000303033b024b570a2c4d0148000e0c00022a2a4d023e000e0e0e0c000365031d2b3c4d032f000c00030e4f042700010002293c4d051e002e0e7e0400032b3c4d0312000e0e0e0c00030e4f040700010002420e0e0e|@4446,I229,I111,@451,I106,@4445,I107| 4446:S84|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d636865636b52656375727369766543616c6c73283129676574506172616d4e6f283129 4447:C2,8|00804d000200100e|@440,@439| 4448:C9,200|00822b3b4d00c0000e0c0003039c2d35293b4d01b2000e0e0e0c000303595618292b4d02a2000e0e0e0c0003293b4d0096000e0e0e0c0003031e5637302a4d0386000e0e0e0c00034d047c002e3c2c3b68053b2a6966021c29355647312a4d0366000e0e0e0c0003292c4d055a00330e7e0b000365023056172e2a4d0349000e0e0c00032b3b4d063e000e0e0e0c00034d0734000e0c00024d042c002d2b2d3b68053b2a6927046402162b3c4d0318000e0c00032e2e2b6a6456192c7d050002440e0e0e0e0e0e0e|@4449,I229,I233,@451,I107,-5,@224,I113,I218| 4449:S86|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d636865636b52656375727369766543616c6c732831296c6f63616c4e657741646472283329 4450:C6,136|00812b354d0080004d017c000e0c000303082b362937296502162b353c4d0167000c000303062b37296402042b36296429354d0252004d014e000e0e0e0c0003032b2936293b4d033e000e0e0e0c000303043b50021456282e68012a2c2b4d0426000e0e0e0c000426035002023b5056172d68012a302b4d040d00310e0e0e7b050700040e0e0e0e|@4451,-1,I229,-5,I232,@3543| 4451:S80|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d636865636b52656375727369766543616c6c73283129736574546162283229 4452:C1,16|00802b352c362d3756372e7b05030004|@4453| 4453:S86|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d636865636b52656375727369766543616c6c732831296c6f63616c4e657741646472283129 4454:C1,16|00802b352c362d3756372e7b05030004|@4455| 4455:S78|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d636865636b52656375727369766543616c6c7328312970726576283129 4456:C1,16|00802b352c3656272d0e0e0e7e030003|@4457| 4457:S80|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d636865636b52656375727369766543616c6c73283129736574546162283129 4458:C2,24|00802b352c3656272a68012a2d2b4d000600327b05070004|@4459,@3543| 4459:S83|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d636865636b52656375727369766543616c6c732831297365744e6577546162283129 4460:C16,272|00812b3b4d0008010e0c000303033b06cb1201000100cfff292d4d01f2000e0e0e0c0003644d02e7000c000203192b3c4d03dc000e0c00032d2a0e0e0e4f04cf002100036402c31201000100d8ff2c3b4d05bc000e0c000303033c0218294d06ae000e0e0e0c00022d2a4d07a2000e0e0e0c00036403054d08950010292d4d098e000e0e0e0c00032964294d0a81000e0e0c00024d0278000e0c000203062935296402054d0b680010654d0c62000e0e0e0c00022d03032902341202000100cdff1203000100dbff2a2a4d0d42000e0e0e0c000329304d03360002022c000e0e0e0c00034d0e28002a2f3b6b27042d3c4d031c000e0c00032f2a0e0e0e4f040f004100032b2a69292705430e0e0e0e0e|@4461,I229,@451,I218,I107,@4460,I234,I15,I231,@52,I253,I105,@226,@4293,I106,-4| 4461:S60|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d6d616b6544656373283229 4462:O1|@4463 4463:C2,8|00804d000200100e|@440,@439| 4464:C3,48|00802b3b4d0028000e0c000303091201000100d0ff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1884,I229,@4464| 4465:C3,48|00802b3b4d0028000e0c000303091201000100cfff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1884,I229,@4465| 4466:C11,176|00822b3b4d00a8000e0c000303832d35293b4d019a000e0e0e0c000303425618292b4d028a000e0e0e0c0003294d037f000c00024d0478000e0c000203062935296402054d056800105647312a4d065f000c0003292c4d075600330e7e0b000356172e2a4d0648000e0c00032b3b4d083e000e0e0e0c00034d0434000e0c00024d092c002d2b2d3b68053b2a69270502172b3c4d0619000e0e0c00032e2e2b6a6456192c7d050002440e0e0e0e0e0e0e|@4467,I229,I233,@451,I105,I218,@226,I107,@224,I113,-5| 4467:S53|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d6973652832296c6f63616c4f6c6441646472283329 4468:C9,200|00822b3b4d00c0000e0c0003039c2d35293b4d01b2000e0e0e0c000303595618292b4d02a2000e0e0e0c0003293b4d0096000e0e0e0c0003031e5637302a4d0386000e0e0e0c00034d047c002e3c2c3b68053b2a6966021c29355647312a4d0366000e0e0e0c0003292c4d055a00330e7e0b000365023056172e2a4d0349000e0e0c00032b3b4d063e000e0e0e0c00034d0734000e0c00024d042c002d2b2d3b68053b2a6927046402162b3c4d0318000e0c00032e2e2b6a6456192c7d050002440e0e0e0e0e0e0e|@4469,I229,I233,@451,I107,-5,@224,I113,I218| 4469:S53|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d6973652832296c6f63616c4e657741646472283329 4470:C6,136|00812b354d0080004d017c000e0c000303082b362937296502162b353c4d0167000c000303062b37296402042b36296429354d0252004d014e000e0e0e0c0003032b2936293b4d033e000e0e0e0c000303043b50021456282e68012a2c2b4d0426000e0e0e0c000426035002023b5056172d68012a302b4d040d00310e0e0e7b050700040e0e0e0e|@4471,-1,I229,-5,I232,@3543| 4471:S47|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229736574546162283229 4472:C1,16|00802b352c362d3756372e7b05030004|@4473| 4473:S53|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d6973652832296c6f63616c4e657741646472283129 4474:C1,16|00802b352c362d3756372e7b05030004|@4475| 4475:S53|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d6973652832296c6f63616c4f6c6441646472283129 4476:C1,16|00802b352c3656272d0e0e0e7e030003|@4477| 4477:S47|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229736574546162283129 4478:C2,24|00802b352c3656272a68012a2d2b4d000600327b05070004|@4479,@3543| 4479:S50|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d6973652832297365744e6577546162283129 4480:C8,208|00812c352d362e3756382f2a4d00c0000e0c00032b2a4d00b6000e0e0e0c00035667293b4d01a8000e0c000329293b4d029d000e0e0c000303033b025a29352a362a354d0389004d0285000e0e0c000303332a362b372c38220d2c4d0471000e0e0c0003031b312a4d0464000e0c0003030c220c2b4d0257000c000302013b02013b6602054d0547001003033c0207292503511e663b656603033b022b56674d032d0030302d3b68055687293b4d011f000c00032b2a692d3b2b4d0612000e0e0e0c0004503b27052706430e0e0e0e0e|@4482,I107,I253,I229,-5,I113,@4481,I255| 4481:O3|@7141,@228,@4483 4482:S52|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d6973652832296164644e6f6e4c6f63616c283229 4483:S25|66696e644e6f6e4c6f63616c3a206e6f742045787472616374 4484:C4,184|00822d362e2d2f6a56280e0e0e0c000229354d00a2004d019e000e0e0e0c00030308293629372965021629353c4d0187000c000303062937296402042936296429354d0272004d016e000e0e0e0c0003036029362a372b382c392c2c2c2c6b2d3b4d0153000c0003033a2c3b4d0148000e0c00030322343b4d013c000e0c000303033002013b03043b500209293456a70e0c0003502e020a293456a70e0c0003502e020a293456a70e0c0003502e270502012966440e0e0e|@4485,-1,I229,-5| 4485:S55|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636865636b526563757273696f6e283329 4486:C1,16|00802b352c362d3756372e7b05030004|@4487| 4487:S55|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636865636b526563757273696f6e283129 4488:O2|@4490,@4489 4489:O2|@4501,@4488 4490:C16,848|00802b354d0048034d0144030e0c00030a16006c02c9012d01b101e500e001cd009900b400670089016d002e0044016902fd00f102d000dd016a00a5005102cd022b3629372a382b392b2e0e0e0c00022a2f0e0e0e0c00022a2a4d02f2020e0e0e0c00032d56870e0e0c00022a2a4d02de02220c7e0b000306cc3b06cb3c06ca2b362c372a2c0e0e0e0c00022a2d0e0e0e0c00022a2a4d02b6020e0e0e0c0003293c4d02aa02320e7e0800032b37292b2d0e0e0e7d0400022b363b2a0e4f038f022000026506cf2b36294d0482020e0e0e0c00024d0578022d0e0e0e7d0400023c06da2b36292b0e0e0c0002293c4d025e022f0e7e0500032b3629352a392a2d0e0c0002292b4d024602310e7e0700032b362c37292c0e0e0e0c00023b2c0e0e0e4f062b024000022b2a4d0222020e0e0e0c0003293d4d021602330e7e0900032b363b2a02060002fe01fc010e4f07ff012000026506d12b362c372d382b2d0e0e0c00022b2e0e0e0e0c00022a2a4d02de010e0e0e0c00032c300e0e0e0c00022a2a4d02ca010e0e0e0c0003293d4d02be01220c0202b0017e0b00032b362c372a2c0e0e0e0c00023b2b0e0e0e4f089f014000022b2a4d02960132020289010e7e0800032b363b2a0e4f098301200002293c4d027a01300e7e0600032b36292b0e0c0002293c4d0266012f0e7e0500033c06cd2b362c372d382b2d0e0e0c00022b2e0e0e0e0c00022a2a4d0242010e0e0e0c00033b2d0e0e0e4f0a33017000022b2a4d022a0102021e010e0e0e0c00033b30293b4d0b18010e0c000303032a021629362b3c4d0207010c0003292b25042504511e213b65652a2a4d02f200220e7e0d00032b363b2a0e4f0ce300200002293d4d02da00300e7e0600033c02c92b362c372d382a35404d0bc4000e0c000303222a363b2a0e0e0e4f0db3005000022c300e0e0e0c00022a2a4d02a200340e7e0a0003292d0e0e0e0c00022b2e020286000e0e0e0c00022a2a4d0282000e0e0e0c0003292f4d027600330e7e0900032b362c372a2c0e0e0e0c00022a2a4d025e000e0e0e0c0003293d4d025200310e7e0700032b3629354d0e44004d0b40000e0c0003030e29362937292d2f0e0e0e7d06000229353c4d0b25000e0e0c0003030a2937292c2e0e7d0500022936292c2e0e0e0e7d050002420e0e0e0e0e0e0e|@4492,-11,I107,I106,@4493,I105,I218,@4495,@4496,@4497,@4498,@4499,I229,@4500,@4491,-1| 4491:C4,56|00802b3b4d0030000e0c000303033b021f2b352c362a56350e0c00022a4f0117003100022a2a4d020e00310e7e070003420e0e0e0e0e0e0e|@4494,I229,@4491,I106| 4492:S30|42617365436f6465547265652e6973536d616c6c28322973697a65283129 4493:C4,56|00802b3b4d0030000e0c000303033b021f2b352c362a56350e0c00022a4f0117003100022a2a4d020e00310e7e070003420e0e0e0e0e0e0e|@4494,I229,@4493,I106| 4494:S34|42617365436f6465547265652e6973536d616c6c28322973697a654c697374283129 4495:C4,56|00802b3b4d0030000e0c000303033b021f2b352c362a56350e0c00022a4f0117003100022a2a4d020e00310e7e070003420e0e0e0e0e0e0e|@4494,I229,@4495,I106| 4496:C4,56|00802b3b4d0030000e0c000303033b021f2b352c362a56350e0c00022a4f0117003100022a2a4d020e00310e7e070003420e0e0e0e0e0e0e|@4494,I229,@4496,I106| 4497:C4,56|00802b3b4d0030000e0c000303033b021f2b352c362a56350e0c00022a4f0117003100022a2a4d020e00310e7e070003420e0e0e0e0e0e0e|@4494,I229,@4497,I106| 4498:C4,56|00802b3b4d0030000e0c000303033b021f2b352c362a56350e0c00022a4f0117003100022a2a4d020e00310e7e070003420e0e0e0e0e0e0e|@4494,I229,@4498,I106| 4499:C4,56|00802b3b4d0030000e0c000303033b021f2b352c362a56350e0c00022a4f0117003100022a2a4d020e00310e7e070003420e0e0e0e0e0e0e|@4494,I229,@4499,I106| 4500:C4,56|00802b3b4d0030000e0c000303033b021f2b352c362a56350e0c00022a4f0117003100022a2a4d020e00310e7e070003420e0e0e0e0e0e0e|@4494,I229,@4500,I106| 4501:C3,112|00802b3b4d0068000e0c000303033b02572b3529352a362e362b56570e0c00023b2c293b4d0048000e0c000303032a021629362b3c4d0137000c0003292b25042504511e213b65652a2a4d0122000e0e0e0c00032c310e0e0e0c00022a2a4d010e00220c7e0b0003420e0e0e0e0e0e0e|@4502,I229,I106| 4502:S38|42617365436f6465547265652e6973536d616c6c28322973697a65436173654c697374283129 4503:C3,40|00802b3b4d0020000e0c00030304560002142b352c36290e0e4f010b002100022b2a69292704420e|@1884,I229,@4503| 4504:C2,24|00802b355617293b3c4d000b000c0004502a65420e0e0e0e|@4505,I255| 4505:S51|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d69736528322966696c74657241726773283129 4506:C3,48|00802b3b4d0028000e0c000303091201000100e8ff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1884,I229,@4506| 4507:C4,48|00802b3b4d0028000e0c000303033b021d2b352c362a0e0e0e4f0113002100022a4f020b003100022a2a69292705420e|@436,I229,@4508,@4507| 4508:C10,128|00802b354d0078004d0174000e0c000303622b362c37293b0e4f026300320003573c293b4d0358000e0c0003575c2a3c4d044c000e0c00032a3b2b4d0541000e0e0c0004504d0637002c3c3b3b68053b2a69312a6957af0e0e0c0002502f4d071e000e0e0e0c00024d0014002f2b3b6b270a02054d08080010420e0e0e0e0e0e|@4510,-4,I229,@4289,I253,I106,I255,-5,@4293,@4509| 4509:O3|@7141,@228,@4511 4510:S48|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d6973652832296465636c417267283129 4511:S19|6465636c4172673a206e6f74204465636c6172 4512:C2,24|00802b355617293b3c4d000b000c0004502a65420e0e0e0e|@4505,I255| 4513:O3|@7141,@228,@4514 4514:S26|4c6f6f703a206d69736d61746368656420426567696e4c6f6f70 4515:C5,56|00802b3b4d0030000e0c000303033b02252b352c362a3b0e0e4f011b003200034d0214000e0c00022a4f030b003100022a2a69292705420e|@436,I229,@4289,@4293,@4515| 4516:O3|@7141,@228,@4517 4517:S30|4c6f6f703a206e6f74206174207461696c206f6620426567696e4c6f6f70 4518:O2|0,@4519 4519:O2|9,0 4520:C14,296|0085560029354d001e014d011a010e0e0e0c00030308293629352965021329353c4d0103010c000303062936296402013b1203000100f9ff29354d00ea004d01e6000e0e0e0c00030308293629352965021329353c4d01cf000c000303062936296402013b3b3b332e220e0e0e4f02b700800004332d220e0e4f02ab00900004578c293b4d03a0000e0c000357ac2a220e4d0493000c00032a3b2b4d0589000e0e0c0004504d067f0022142d6a220f2a4d0774000e0c00034d086c002e6922112a4d0763000c00034d095c0022183c3b3b6805280b2a22156a402c693e2216694d0a4400221c2b3b6b1216000100fbff3d2a221122116b2933692c2a693c28403b4d0b23000c00044d0c1c00121c0002000700692b2a342d220c68054d0008002a69271c1f060e0e|@4522,-1,I229,@4523,I253,I106,I255,@4535,@4537,@4540,-5,-4,I11,@4521| 4521:C4,56|00802b352c362a352b362c372d384d0026002d2d2d2d68053b2a695687302a4d0115000e0e0c0003292c4d020a00220e7e0d00030e0e0e0e|@4542,-5,I107,@224| 4522:S54|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f6d62696e655475706c6573283629 4523:C9,120|00822b4d0071000e0e0c00024d0168000e0c0002031a2b352d2a0e0e0e4f0257002100034d0350002d0e0e0e7d060002560c4d0442002a3c3b3b680540306956372b2b2b4d0530000e0c0004293b69293b4d0623000c0003030332020c3b330e0e4f0713007000026427064d0309002c7d0500020e0e0e0e|@4525,I105,I218,@4526,@4056,-5,@4530,I229,@4524| 4524:C3,48|00802b3b4d0028000e0c000303091201000100f9ff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1884,I229,@4524| 4525:S69|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f6d62696e655475706c65732836296372656174654272616e6368283329 4526:C7,144|00812c3b4d0088000e0c000303054d017e00102c3529354d0275004d0071000e0e0c0003035229362e362a2f4d0360000e0c00030330563c2b2a4d0352000e0e0e0c000364030329021a563c4d0440002a3c3b3b68054d0236002d2b3b6b292d69292704020f292f0e4f0523004100032c2a6929656502112d36292e0e4f050f003100032b2a69296664430e0e0e0e0e|@4528,I229,@4527,-4,I113,-5,@4526| 4527:O3|@7141,@228,@4529 4528:S76|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f6d62696e655475706c65732836297265706c616365436f6e7461696e6572446563283229 4529:S19|7265706c616365436f6e7461696e6572446563 4530:O1|@4531 4531:C6,120|00822c353d4d006f000c000303272c362d372e38302b304d015d000e0e0c0004312b314d0151000e0e0c00043d2e2c2c6b2705023c2c3528094d003b000c000303152c363b2a0e0e0e4f022b0020000228092a6966021a2c354d031b004d0017000c000303032c02084d040b002c2e306b440e0e0e0e0e0e|@4533,I229,@4530,@4532,-10,-11| 4532:C5,80|00802b3b4d0048000e0c000303054d013e00102b36293b4d0035000e0e0c000303192c35562956372a2c2b4d0221000e0e0c0004293b69270402122c352a0e0e0e4f030b002100022a2a69296664420e|@4534,I229,@2102,@4530,@4532| 4533:S28|434f44455452454528292e6d6b536574436f6e7461696e6572283329 4534:S40|434f44455452454528292e6d6b536574436f6e7461696e65722833296170706c794c617374283129 4535:C4,48|008056082c2a4d0026000e0e0e0c000356274d011a002a3c3b3b680528062a316a4d020b002d2b3b6b2705420e0e0e0e|@4536,I106,-5,-4| 4536:S69|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f6d62696e655475706c65732836297370656369616c446563732d283129 4537:O1|@4538 4538:C10,216|00812c3b4d00d0000e0c000303054d01c600102c3c4d02bf000c00032928403b4d03b4000e0c0004293b304d04a9000e0e0c00045029653b2e2a4d059a000e0e0e0c000303043b500230292e0e0c00022a3c4d0282000e0e0e0c00032c2a2c4d0475000e0e0c0004502b3c4d0269000e0e0c00032503511e3f5150293b4d0657000c00033b2a293b4d074c000e0c000303032a023f293c4d083d000e0e0c00032a3c4d0832000e0e0e0c0003293c4d0226000e0e0e0c00032f2a4d061a000e0e0e0c0003292f69292e2507250726051e493b27052704430e|@4539,I234,@78,I106,I11,I255,I232,I253,I229,I240| 4539:S16|4c6973742e746162756c617465283229 4540:C3,32|008056072c2a4d0016000e0e0e0c00034d010c002a3c3b3b680565420e0e0e0e|@4541,I106,-5| 4541:S72|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f6d62696e655475706c65732836297370656369616c456e74726965732d283129 4542:S60|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f6d62696e655475706c6573283629656e76283129 4543:C15,536|00803b3b2d3b4d000e020e0e0e0c000303064d01020206d22d3529354d02f8014d00f4010e0c0003031529362a373036292b2d0e0e4f03df018000046606cb29354d04d3014d00cf010c0003031129362f36292b0e4f05bf016000036506da2e36293b4d00b1010e0e0c0003031156472b2a0e0e0e4f069f016200036406d42a3b4f0693015200032a4f078b0151000229354d0882014d007e010e0e0e0c00030308293629372965021629353c4d0067010c00030306293729640204293629642a354d0852014d004e010e0e0e0c000303082a362939296502044d093a012b354d0834014d003001020223010e0c000303082b362936296502044d0a1a012d354d0814014d001001020202010e0c000303082d362935296502132d353c4d00f7000c000303062d36296402013b2e354d08e5004d00e1000202d3000e0e0c000303082e3629372965021a2e353c4d00c7000202b8000c000303062e37296402042e3629642e354d08ae004d00aa000e0e0e0c000303082e362935296502132e353c4d0093000c000303062e36296402013b2a2a69293b4d007e000e0e0e0c000303032c020c3b2d0e0e4f0b6b00e000026431354d0861004d005d000e0e0c00030308313629382965020e3c28403b4d0c46000e0e0e0c00042a30332c34680531354d0d33004d002f000c000303172b3b4d0024000e0c000303053b336902043c2c346a02064d080f002a69270c646465420e0e0e0e0e0e0e|@4545,I229,@4518,-4,@4546,-9,@4551,@4289,@4543,-1,@431,@4588,@4544,I11,-2| 4544:C3,48|00802b3b4d0028000e0c000303091201000100f2ff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1884,I229,@4544| 4545:S57|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70794465636c61726174696f6e73283129 4546:C11,328|0082580f2d3b0e0e0e4f003b012300032a2a2f3c0e4f012f01530005304f0227013200022a3b4d031e010e0e0e0c000303032906d329354d040d014d0309010e0e0c00030308293629372965021629353c4d03f3000c00030306293729640204293629642a354d04de004d03da000e0e0e0c000303082a362939296502044d05c6002b354d04c0004d03bc000e0c000303082b362936296502044d06aa002c354d04a4004d03a0000e0c000303082c362935296502132c353c4d038b000c000303062c36296402013b293b4d0379000e0e0c000303032e020c3b2f0e0e4f076700900002642e354d045d004d0359000e0e0c000303082e362938296502123c28403b4d08420002023b000e0e0e0c00042a2d302c3168052e354d092b004d0327000c000303172b3b4d031c000e0c000303053b306902043c2c316a02064d0407002a692707270444|@4548,@4289,@4385,@4543,I229,-1,@431,@4549,@4547,I11,-2| 4547:C3,48|00802b3b4d0028000e0c000303091201000100f7ff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1884,I229,@4547| 4548:S59|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70794465636c61726174696f6e732831292f32 4549:O1|@4550 4550:C2,8|00804d000200100e|@440,@439| 4551:C26,864|00812b4d0059032a3b4d0153030c0003030329021b2a352b362a2c4d0241030e0e0c00032a2a2505250526031e253b666529352a36583c293b4d0323030c00033b2c0e0e0e4f041703600002587c293b4d030c030e0c000330293b4d0101030e0e0c000303033b024029352a362a354d05ed024d01e9020e0e0c0003031e2a362b37293b0e4f06d702f300032b2a696458ff0e0e0e0c0002260302054d07c00210292503511e4c3b65643c28403b4d08ae020e0e0e0c00044d09a4022a2d326b3b3b3b0e0e4f0a9702e00002293c2a3b4d018c020e0c0003030329023d2a352b362a354d0579024d0175020e0e0c0003031b2a3729354d0b66024d0162020e0e0e0c000303032c02013b6402013b2a2a2505250526031e483b66652e3b4d033f020c000303033c02012903032a02d84d0c2d022b2a0c00024d0d24022d69402b692b293b4d0118020e0c000303033c021f293529354d0b07024d0103020c0003030c2a36292503511e263b6402013b64640312294d0ee8010e0c00024d0be0012a6964020129293b692c2a6928092a6929121a00030004000e0c00023b221722144d0fbb012b4d10b6010e0e0e0c00024d11ac010e0c000203462b352c362c4d109d010e0e0c00024d1194010e0c0002032a2c352d360402002d2c302c1612007e0127000000000550292d2c2b25092509250926061e503b270402012b6502012966293629270c221416130052011300020000022a3b4d0146010e0e0e0c000303033b02292a360402002a3b4d0130010e0c0003030a2c352a2a453b4651020c4d0d1c012d692a2a453b465129652a354d140c014d0108010e0c000303082a362937296502162a353c4d01f3000c000303062a37296402042a3629642b354d14de004d01da000e0e0e0c000303082b362939296502044d15c6002c354d14c0004d01bc000e0c000303082c362936296502044d16aa002d354d14a4004d01a0000e0c000303082d362935296502132d353c4d018b000c000303062d36296402013b293b4d0179000e0e0c000303032d02103b2e0e0e16170066001a0000000002642f354d1459004d0155000e0e0c000303082f3629382965020e3c28403b4d083e000e0e0e0c00042a2d302c3168052e354d182b004d0127000c000303172b3b4d011c000e0c000303053b306902043c2c316a02064d1407002a69271a430e0e|@4553,@333,I229,@4554,I253,@4557,-4,@4289,@4558,I11,@4560,@4562,-3,@4576,-9,@3353,@333,I105,I218,@4580,@4543,-1,@431,@4586,@4552,-2| 4552:C3,48|00802b3b4d0028000e0c000303091201000100e8ff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1884,I229,@4552| 4553:S59|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70794465636c61726174696f6e732831292f33 4554:O1|@4555 4555:C4,112|00812b352c360402002f354d0061004d015d000e0e0c000303472f3729354d024e004d014a000e0e0e0c000303272936293a293b4d0138000e0c0003030b322f692d2a452f46510209322e692d30452a4651510209302c692b2e452a46515002092f2b692a2d452a46512966430e0e0e|@4556,-4,I229,-7| 4556:S70|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70794465636c61726174696f6e732831293c7061747465726e3e2d283229 4557:C9,160|00802b3b4d0098000e0c000303033b028d2b352c362a354d0185004d0081000e0e0c000303642a3612040004000600293b4d026b000c00034d0364002a3c3b3b68053b2a692d2a6965120700040009000e0c0002501206000400060012070004000600293b4d0237000c0003293c4d042e000e0e0e0c00032c3b2b4d0521000e0e0c0004502d270702054d061200102a0e4f070b003100022a2a69292705420e|@436,I229,-4,I253,-5,I106,I255,@4558,@4557| 4558:O3|@7141,@228,@4559 4559:S22|6d757475616c446563733a206e6f74204465636c6172 4560:C6,168|00802b354d00a0004d019c000e0c000303842b362c372d382a3c4d018a000e0e0e0c0003035b293b4d017c000e0c0003033b56392c2a4d026e000e0e0e0c000364031056382c2a4d035d000e0e0c00036402013b03033b02125637293b3c4d0446000e0e0e0c0004503b6402125637293b3c4d0432000e0e0e0c0004503b6402125637293b3c4d041e000e0e0e0c0004503b646602115607293b3c4d0409000e0e0c0004503b6442|@4561,-5,I229,I231,I234,I255| 4561:S72|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70794465636c61726174696f6e73283129636865636b436c6f73757265283129 4562:C3,48|008056021202000100f8ff3b2b2b0e0e0e4f001b0040000329352a3629030b3b0e4f010b0061000202012a2706420e0e|@4564,@4563,@4562| 4563:C6,96|00812c4d0059000e0e0c00024d0150000e0c000203432c352d362d4d0041000e0e0c00024d0138000e0c000203242d352e362b2a0e4f0227005100030402002e2d2c2c0e0e4f0317009200055029270402044d040a006502044d040300430e0e|@4566,I105,I218,@4563,@4565,@333| 4564:S73|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70794465636c61726174696f6e7328312972657065617450726f63657373283129 4565:C16,824|00832e354d0030034d012c030e0c000307d12e362f372e352f362c3c3b3b6b120600040007002a2a3b6a6512060004000a000e0e0e0c000229354d02fa024d01f6020e0e0e0c00030308293629372965021629353c4d01df020c000303062937296402042936296429354d03ca024d01c6020e0e0e0c000303033c02013b03134d00b402342b3b6b292e69332a452e466506cb2e4d04a00269120800040009000e0c0002344d048f0269120900040008000c00022f3b0e0e0e4f057b0294000329354d0272024d016e020e0e0e0c00030308293629372965021a29353c4d01570202024b020c00030306293729640204293629642a354d023e024d013a020e0e0e0c000303082a362939296502044d0626022a354d0320024d011c020e0c000303033c02013b2b354d030c024d0108020e0c000303032b02572b354d07f9014d01f5010e0e0c000303412b362938120f000100f3ff2a293b4d01dc010202cc010e0c000303043b50021229352a362a2d0e0c000250292503511e2351504d08b70122143c3b3b68056602054d09a901103b2a6922122a6964120f00040008000e0e0c00022c354d078e014d018a010e0e0e0c0003033b2c36293a294d0279014d0175010e0e0c000303064d066a01021e30354d0262014d015e010e0e0e0c0003030830362939296502044d064a0165021d2e354d0241014d013d010e0e0c000303082e362939296502044d062a014d0a26012a354d0120010e0c00034d0b18010e0c0002032d33354d020c014d0108010e0c0003030833362939296502044d06f6004d0af2002a354d01ec000e0c00036402013b30354d02de004d01da000e0e0e0c0003030830362936296502044d0cc60031354d02c0004d01bc000e0c00030308313629352965021331353c4d01a7000c000303063136296402013b32354d0295004d0191000e0e0c00030308323629382965020e3c28403b4d0d7a000e0e0e0c00042a2c312c3168052e354d0a67004d0163000c000303172b3b4d0158000e0c000303053b316902043c2c326a02064d0243002a6922142a692705121200040009000e0c0002504d002b002215313b6b29220f69220e03033c02072f03033c02012b22152b452a46270d270602054d0e0400101f040e|@4568,-4,I229,-1,-3,@4569,@4289,@431,-7,-5,@4571,-2,I218,@4573,I11,@4567| 4566:S17|4c697374506169722e666f6c6472283429 4567:O3|@7141,@228,@4575 4568:S77|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70794465636c61726174696f6e7328312970726f636573734e6f6e496e6c696e6573283429 4569:O2|0,@4570 4570:O5|-5,0,0,-1,0 4571:O3|@7141,@228,@4572 4572:S33|70726f636573734e6f6e496e6c696e65733a204e6f7420612066756e6374696f6e 4573:O1|@4574 4574:C2,8|00804d000200100e|@440,@439| 4575:S29|70726f636573734e6f6e496e6c696e65733a206e6f74204465636c6172 4576:O1|@4577 4577:C6,80|00802b3b4d0048000e0c000303033b02392b352c362a354d0135004d0031000e0e0c0003030f2a364d0224002a3c3b3b68056402054d031700102a4d0411000e0e0c00022a2a69292705420e0e0e0e0e|@436,I229,-4,-5,@4578,@4576| 4578:O3|@7141,@228,@4579 4579:S20|65787472616374733a206e6f74204465636c6172 4580:C11,344|00832e354d0050014d014c010e0c000307ce2e362d352e362b3c3b3b6b120500040007002a2a3b6a6512050004000a000e0c00021205000100e6ff2c2a4d0217010c00033b2a69342a6964120800040008000e0e0e0c0002502b354d03f9004d01f5000e0e0c000303082b362939296502044d04e2002c354d03dc004d01d8000e0c000303082c362936296502044d05c6002d354d03c0004d01bc000e0c000303082d362935296502132d353c4d01a7000c000303062d36296402013b2e354d0395004d0191000e0e0c000303082e362938296502123c28403b4d067a0002026b000e0e0e0c00042a2c2f2c3068052d354d0763004d015f000c000303172b3b4d0154000e0c000303053b2f6902043c2c306a02064d033f002a69342a692706120800040009000e0e0c0002502d3c4d0825000e0e0c00034d001c00220c2c3b6b292f69342c452a46270902054d090700101f040e0e0e0e|@4582,-4,I229,@3342,-1,@431,@4583,I11,-2,I106,@4581| 4581:O3|@7141,@228,@4585 4582:S77|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70794465636c61726174696f6e73283129646563732d726570726f63657373446563283429 4583:O1|@4584 4584:C2,8|00804d000200100e|@440,@439| 4585:S24|726570726f636573734465633a206e6f74204465636c6172 4586:O1|@4587 4587:C2,8|00804d000200100e|@440,@439| 4588:O1|@4589 4589:C2,8|00804d000200100e|@440,@439| 4590:C19,392|00822c3b4d0080010e0c0003030b2b4d0175010803003b06cd2c352d364d0267011204000100f7ff692b3b0e0e4f0357014200032a2a333c0e4f044b017200051206000100f7ff29344d053b010c0003294d0633010c00024d072c010e0c000203062935296402054d081c0110220c3c4d0914010e0c00030403002a322b0e0e0e4f0a0301c100045029352a362b372e354d0bf3004d00ef000c000303082e362937296502162e353c4d00db000c000303062e37296402042e3629642f354d0bc6004d00c2000e0e0e0c000303082f362939296502044d0cae002a354d0da8004d00a40002029b000e0c000303033c02013b4d0792000e0e0e0c000203171210000100f6ff293b3b4d0e7c000e0c0004503b6402013b2a354d0f6c004d0068000e0c000303162b354d0d5c004d0058000e0c000303033c02013b02013b03072b2d69296402104d103e0022153c3b3b6805292e6929652c2f69303b4d0029000e0e0c00030304220d020f3b220e16110016001500000000026422152a452b462c472713440e0e0e0e|@4592,I229,@4593,@4594,@4289,@4385,@451,I105,I218,@226,I106,@4590,-1,@431,-3,I255,-2,-5,@4591| 4591:C3,48|00802b3b4d0028000e0c000303091201000100f4ff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1884,I229,@4591| 4592:S49|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d6973652832296d616b6544656373283329 4593:O3|0,0,0 4594:C2,24|00802b352c3656272a68012a2d2b4d000600327b05070004|@4477,@3543| 4595:C11,416|00805603292d4d0096010e0e0e0c00034d018c01563229354d0284014d0380010e0c0003030829362936296502044d046e01575f576e577d578c579b57aa57b857c73434333333333333333b3434121a000200ffff0c000d29354d0242014d033e010e0e0e0c00030308293629372965021629353c4d0327010c00030306293729640204293629642a354d0212014d030e010e0e0e0c000303082a362939296502044d05fa002b354d02f4004d03f0000e0c000303082b362936296502044d06de001212000100fcff29354d02d1004d03cd000e0e0c00030308293629352965021329353c4d03b7000c000303062936296402013b2e354d02a5004d03a1000e0e0c000303082e362935296502132e353c4d038b000c000303062e36296402013b293b4d0379000e0e0c000303032a02103b2b0e0e16070066001700000000026430354d0259004d0355000e0e0c00030308303629382965020e3c28403b4d083e000e0e0e0c00042a2f322c33680530354d092b004d0327000c000303172b3b4d031c000e0c000303053b326902043c2c336a02064d0207002a692717420e0e|@4597,@3342,@4598,-1,I229,@4600,@431,@4602,@4596,I11,-2| 4596:C3,48|00802b3b4d0028000e0c000303091201000100ebff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1884,I229,@4596| 4597:S40|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d6973652832292f31 4598:O1|@4599 4599:C2,8|00804d000200100e|@440,@439| 4600:O1|@4601 4601:C2,8|00804d000200100e|@440,@439| 4602:O1|@4603 4603:C2,8|00804d000200100e|@440,@439| 4604:C5,56|00802b3b4d0030000e0c000303033b02252b352c362a3b0e0e4f011b003200034d0214000e0c00022a4f030b003100022a2a69292705420e|@436,I229,@4289,@4293,@4604| 4605:O3|@7141,@228,@4606 4606:S35|6f7074696d697365202d20636f6e7461696e6572206973206e6f742045787472616374 4607:C7,136|008056082c2a4d007e000e0e0e0c0003562729354d0170004d026c000e0c00030308293629372965021629353c4d0257000c0003030629372964020429362964293528054d0240000e0c0003030c2f2a4d0334000e0c0003022129354d0428004d0224000e0c0003030c2f2a4d0318000e0c0003020528062a316a4d0509002d2b3b6b2705420e0e|@4608,I106,-1,I229,@3342,-3,-4| 4608:S53|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d6973652832297370656369616c446563732d283129 4609:C3,32|008056072c2a4d0016000e0e0e0c00034d010c002a3c3b3b680565420e0e0e0e|@4610,I106,-5| 4610:S56|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d6973652832297370656369616c456e74726965732d283129 4611:C3,48|00802b3b4d0028000e0c000303091201000100f4ff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1884,I229,@4611| 4612:C4,56|00802b352c362a352b362c372d384d0026002d2d2d2d68053b2a695687302a4d0115000e0e0c0003292c4d020a00220e7e0d00030e0e0e0e|@221,-5,I107,@224| 4613:C7,128|00802b3b4d0078000e0c000303054d016e00102b3529354d0265004d0061000e0e0c0003034629362d3656322b2a4d034e000e0e0e0c00036403211204000100f8ff4d043a002a3c3b3b68054d0230002d2b3b6b292d69292704020d294f051f003100022c2a6929656502112c36290e0e4f050b002100022b2a69296664420e|@4615,I229,@4527,-4,I113,-5,@4613| 4614:S57|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d69736528322970757368536574436f6e7461696e6572283229 4615:S79|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d69736528322970757368536574436f6e7461696e65722832297265706c616365436f6e7461696e6572446563283129 4616:C5,72|0082040200280628403b4d003a000e0e0e0c0004293b28054d012c000e0c0004504d0223002a693c28402b4d0019000e0e0c00042c2a453b46502c320e4f0307005000022705440e|@4618,I11,I255,-1,@4617| 4617:C27,808|00802b354d0020034d011c030e0c00030a1600fa0186012e007001ad00ac014d002e00e1000d034a01c2002e002201f701f9002e00e400a601bc003500e501f6024d02e3021006cd2b363b2a0e4f03d702200002294d04cf022f0e0e7d0600022b362c372d382e392c2c2c2c6b2b3b4d05b5020e0e0c000303262d3b4d06a8020e0c000303032c02013b030f5650292f3c4d0793020c00045102023b5030021c2b3c4d0182020e0e0e0c000356672b2b2b6a655668310e0e7d080002270506dd2b363b2a0e4f085f022100036406d34d09550206cf2b362c372a0e0e0e4f0a47022100022a4f0a3f023100023b2b2b6a270406d42b06d32b362c372a0e4f0a270221000228062a2c6a6606cc2b362c372d382a02020d020e0e4f0a0b023100023b2d0e0e0e4f0bff015000023f2a2d2f6b270606dd2b362c372d382b0e4f0ae7013100022b4f0adf014100022b4f0ad7015100023d2c2c2c6b270606d72b362c372a0e0e0e4f0abf012100023b2b0e0e0e4f0cb3014000024d0dac012c2b6a270506cf2b363b2a0e0e4f0e9b012000024d0f94012a696606ce2b360202850129020480017e010e0e0e4f0a7b011100024d1074012a696506d64d116b0106d22b362c372d382b02045a0158010e4f0a57013100023b2b02024a010e0e0e4f1247015000022d4f0a3f016100024d1338012d2b2d6b270706da2b363b2a0e4f142701200002402a696606ca2b06c92b362c02021001372d3829354d150b014d0507010c0003035029362a372b382a3c4d05f6000202ee000e0e0e0c00030334293b4d05e4000e0c000303252b3b4d16d8000202d0000e0c000303033c02105660292d4d17c3000202bb000c00036402013c02013c6602013c2b353d4d05aa000e0e0e0c0003031c2a2c2e4d189b000204930091000e0e0c00040e4f0a8b0041000202632b3528094d057e000e0e0e0c000303142a2c2e4d186f000c00040e4f0a6700410002023f2b354d105c004d055800020650004e004c000e0c0003030c2b0e0e4f0a4300410002021b2a0e0e4f0a37004100022c4f0a2f005100024d0028002f2b2d6b652704021b2b362c372a0e0e0e4f0a1300210002280b2a2c6a6602044d190400420e0e0e|@4620,-11,I107,@4621,@4623,@4056,I229,I231,@3543,@4626,@4638,@4617,@4639,@4640,-1,@4641,-8,-10,@4642,@4643,-6,@4619,-5,I232,@451,@4530,@431| 4618:S23|434f44455452454528292e636c65616e50726f63283329 4619:C4,48|00802b3b4d0028000e0c000303033b021d2b352c362a0e0e0e4f0113002200022a4f020b003100022a2a69292705420e|@436,I229,@4617,@4619| 4620:S35|434f44455452454528292e636c65616e50726f63283329636c65616e436f6465283129 4621:O3|@7141,@228,@4622 4622:S24|636c65616e436f64653a20756e6b6e6f776e20696e737472 4623:C14,472|00802b3b4d00d0010e0c000303033b06d62b3529354d01bf014d00bb010c0003037e29362a372b382f365750292e3b4d02a5010e0e0c00042b4f039b01710002578029314d0490010e0c00036403033c020e2e58970c00024d057c010e0c000203392e354d0670014d006c010e0c000303112e36302a0e0e0e4f075b01a200036402092e0e4f084f018200024d014801312b316b292c692966020129270706cb29354d0932014d002e010e0e0e0c0003039929362d362a293b4d001b010c000303033b023829352a362a354d0109014d0005010e0e0c000303162a365770292b3b4d02f3000202ea000c0004260302054d0ae40010292503511e423b65642a0e0e4f03d3004100023b3b3b2f0e4f0bc700800004293b4d00be000e0e0e0c000303032b02222936293b4d00ab000c000303092a35292e692965020b4d0999002b69292e6929656427060287293528094d0085000e0e0c0003033b29362d36290e0e4f0373003100022b020265004f0367004100022a3b4d005e000e0e0e0c0003030329020c3b2a0e0e4f0c4b00600002642704023d2c36290e4f033b002100022b4f0833003200022958570e0e0c000203143b2b4d0020000e0c00034d0518000e0c000202013b03032a0205292b6929646664420e0e0e0e|@4625,I229,-4,@3543,@4623,@451,I218,-7,@4626,@4617,-9,@4632,@4634,@4624| 4624:C3,40|00802b3b4d0020000e0c00030304560102142b352c36290e0e4f010b002100022b2a69292704420e|@1884,I229,@4624| 4625:S49|434f44455452454528292e636c65616e50726f63283329636c65616e436f646528312970726f6365737344656373283129 4626:C4,64|00812b352c362d372e392f3a4d0030002c567034569868054d0124002a692f2a2f56a50e0e0c00042930303b31313b3b68084d020a002a692709430e0e0e0e0e|@4628,@4629,@4627,-7| 4627:C1,16|00802b352c362d3756372e7b05030004|@4631| 4628:S37|434f44455452454528292e636c65616e50726f63283329636c65616e4c616d626461283229 4629:C7,160|00822d352e362e3b4d0094000e0c0003037304050056392c2a4d0183000c00036403032a02013b031d56372f2a4d026f000c00032b4d036700453b463b472a483b492603023b2b3b4d0454000e0c000303032a02013b030f5638292d3c4d053f000c00045102023b5030353136323733382d4d032a00452d462c472b482a492605296402172e3c4d0215000e0e0c0003302a306a64563a2e7d07000265440e0e|@4630,I229,I113,I107,-5,I231,@3543| 4630:S46|434f44455452454528292e636c65616e50726f63283329636c65616e4c616d6264612832296c6f6f6b7570283329 4631:S46|434f44455452454528292e636c65616e50726f63283329636c65616e4c616d6264612832296c6f6f6b7570283129 4632:O3|@7141,@228,@4633 4633:S23|736574456e7472793a20756e6b6e6f776e20696e737472 4634:C10,192|00822b3b4d00b8000e0c0003031b2d3c4d00ac000e0c0003030c3b3b2e4f019f0021000402013b028f2b3529354d028f004d008b000c0003037829362a372b382f365850292e4d0376000e0e0e0c0003644d046b000c000203112d3269332a2c0e4f015b008100046402432b354d054f004d004b000c000303112b362d2a0e0e0e4f063b007300036402092b0e4f072f005300024d0228002e2b2e6b3c342d0e0e4f011b009100042a2a69292704270402054d080a001064440e0e0e0e0e0e0e|@4636,I229,@4634,-4,@451,I218,-7,@4626,@4617,@4635| 4635:O3|@7141,@228,@4637 4636:S66|434f44455452454528292e636c65616e50726f63283329636c65616e436f646528312970726f636573734465637328312970726f636573734d757475616c73283329 4637:S28|70726f636573734d757475616c3a20756e6b6e6f776e20696e737472 4638:O1|8 4639:C4,48|00802b3b4d0028000e0c000303033b021d2b352c362a0e0e0e4f0113002200022a4f020b003100022a2a69292705420e|@436,I229,@4617,@4639| 4640:C6,88|00802b3b4d0050000e0c000303033b02412b352c362a354d013d004d0039000e0e0c000303192a362b37290e0e4f0227004200024d0120002c2b3b6b6602054d031500102a4f040f003100022a2a69292705420e0e0e0e0e|@436,I229,-4,@4617,@4104,@4640| 4641:C4,48|00802b3b4d0028000e0c000303033b021d2b352c362a0e0e0e4f0113002200022a4f020b003100022a2a69292705420e|@436,I229,@4617,@4641| 4642:O1|7 4643:C4,48|00802b3b4d0028000e0c000303033b021d2b352c362a0e0e0e4f0113002200022a4f020b003100022a2a69292705420e|@436,I229,@4617,@4643| 4644:O1|@4645 4645:C6,104|00802b3b2a3b4d005e000e0e0e0c0003030329022c2a352b362a35293b4d0047000c000303032c020b2c3c4d0139000e0e0c00032b2a2506250626041e383b270465293c4d0220000e0c0003030e2c3b4d0314002e0e0e0e7e0400032c3b4d0406002e0e7e040003|@4647,I229,I106,I232,@4648,@4646| 4646:O1|@4652 4647:S46|56414c55455f4f505328292e63686f6f7365436f6e7374725265707228312963686f6f7365526570722831292f35 4648:O1|@4649 4649:C12,288|00812c3b4d0018010e0c000303033b06cc2c352d362a35294d0104014d0200010e0c00030a0200d1005a00a9002935293b4d00eb000c000303222c364d03e0002a4d04db000c00032d324d05d2000e0e0e0c00032a2a6929270402222c364d06be002a4d04b9000e0e0c00032d324d05ae000e0e0e0c00032a2a692927046402992b363c3069292b4d0794000e0c0003313b4d088a000e0e0e0c0003030c314d097d000e0e0c00020212313c4d0a70000e0c00034d0968000e0c00022e2a4d055e000e0e0e0c00032b2a69292706024a2b364d034a002a4d04450002023c000e0e0c00032c314d0536000e0e0e0c00032a2a6929270402222b364d0622002a4d041d000e0e0c00032c314d0512000e0e0e0c00032a2a6929270466430e0e0e0e|@4651,I229,-1,I107,@633,@3336,@4648,@4650,@3334,I234,I111,I106| 4650:O1|-4 4651:S35|56414c55455f4f505328292e63686f6f73654f7074696d697365645265707231283229 4652:C14,240|00812c3b4d00e8000e0c000303033b06cb2c352d362a35294d01d4004d02d0000e0c00030a020070003000590029352c362a3f4d03b9000e0e0c000303063e312c6a02064d04a8003169292b4d05a0000e0c00036602522b363c3b314d0690000e0c0004294d0787000c00024d0180002b69292d4d0878000e0c0003270402292b364d046a003069292b4d0562000e0e0e0c00036502122b364d0453003069292b4d054b000c0003652f3b4d0941000e0e0c0003030c2f4d0a35000e0e0c000202122f3c4d0b28000e0c00034d0a20000e0c00022c2a4d0c160002020c000e0e0e0c00032b2a69292707430e0e0e0e0e|@4653,I229,-1,I107,I232,-3,@3336,I11,I47,@3334,I234,I111,I106,@4646| 4653:S35|56414c55455f4f505328292e63686f6f73654f7074696d697365645265707232283229 4654:O1|4 4655:C9,104|00814d0062002d4d015d000e0e0c0003292d3b3b3c3b3b3b68084d024a002a692e304d0342000e0e0e0c0003293b692b2a69402a692a3b4d042d000e0e0c00030313294d0521000e0e0c00024d0618002a6964020129293b4d070c000e0c00033b2a220c7d0d0002|@4657,@465,@3340,-7,@4656,I229,@3353,-3,@3338| 4656:O1|@4658 4657:S39|56414c55455f4f505328292e6372656174654e756c6c617279436f6e7374727563746f72283229 4658:C15,224|00812b354d00d8004d01d4000e0c00030a070016004200b4008b002c009600850055004d02b90002b24d03b3002d3b3b3c3b3b3b68084d04a6002a6964029c4d059d002d3b3b3c3b3b3b68084d0490002a696402862b36294d0684000e0c00022e2a2e0e7d0600022b362c374d0770002a2c4d086a000e0e0e0c00043f4d095f002b3c6b29313b3b3c3b3b3b68084d044e002a69270502434d0a4400023d2b364d0b3c002a696402322b36294d0c30000e0c000203032902054d0d2300104d0b1e002a696502144d0315002d3b3b3c3b3b3b68084d0408002a6964430e0e0e0e|@4660,-4,I107,@501,@465,-7,@837,@4659,I48,@3381,@463,@3305,-3,I105,@395| 4659:O1|@4661 4660:S25|56414c55455f4f505328292e636f6e7374724d616b65283229 4661:C2,16|00804d000a002c69420e0e0e0e0e0e0e|@4663,@4662| 4662:C8,128|00805607294d0077000c000203032902054d016b00104d0266002a69294d035f0069402a692a293b4d0454000e0c000303033c021f293529354d0243004d043f000c0003030c2a36292503511e263b6402013b64640312294d0524000e0c00024d021c002a696402012929323b3b3c3b3b3b68084d0608002a692707420e0e0e|@4664,I105,@395,-3,@463,I229,@3353,-7| 4663:S25|56414c55455f4f505328292e746167426f78436f6465283129 4664:S26|56414c55455f4f505328292e6162737472616374283129283129 4665:C7,152|00812c352d36294d008d000e0e0c000203211203000100f8ff2e4d017a000e0e0e0c00022c2b3c2c4d026c000e0c00056502261203000100f8ff2a2a694d0357000c00022f4d014f000c00022d2b3b2c4d0244000e0c0005661204000400030058492d2b2b4d042f000c0004586c120800040003005889312c2c2c3c4d0518000e0c0006323169120c000200f2ff0e0e0e0c000231270b43|@4668,@2046,@4669,@4667,@1500,@1395,@3077| 4666:S15|4c697374506169722e6d6170283329 4667:O1|@4671 4668:S83|50415253455f5452454528292e706173733228362961737369676e56616c7565732836296173734162734461746128342967656e56616c7565436f6e7374727328322970726f63657373436f6e737472283229 4669:O1|@4670 4670:C2,16|00804d000a002c69420e0e0e0e0e0e0e|@2761,-1| 4671:C1,16|00832c68012f2a2e316b29651f040e0e|@4672| 4672:S32|5354525543545f56414c5328292e6d616b6556616c7565436f6e737472283429 4673:O1|@4674 4674:C3,16|00804d000a004d0106002d6a100e0e0e|@4675,@7141,@228| 4675:S54|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737341627344617461283429552d283129 4676:O1|@4677 4677:C19,424|00820402004d009f012a4d019a010e0e0e0c00035029352a3621054d02890145524d03830145292b466c502a2d462a4731482c496c5032293b4d046b010c000303043b5002c429352a362a4d0559010e0e0c00022f0c0002293b4d044a010e0e0e0c000303052b3b690280293529353b4d0434010e0c000303062936296402054d062401102d2a692e4d071b010c000203033c02272a4d080e010e0e0e0c00024d0904010e0c000203062a35296402054d0af400104d07ef000c0002032929293b4d04e3000c000303043b50021629352a362a3c4d0bd0000e0c000350292503511e22515002023b5029662c4d05b8000e0c00023b2b692a2a6965320e0c0002502b250526041ecf26045032293b4d0496000e0e0e0c000303033b028629352a362a4d0582000e0e0e0c0002292f0e0e0e0c0002294d0c6f004d046b000c0003033d2c4d0761000e0e0c0002032d2c4d0d55000e0e0c00024d0e4c002a4d0f47000c0003294d103f004d0f3b000c000365220e0e0e0c00025002023b50021a2a4d11240069320e0e0e0c0002502c3c4d0b15000e0e0c0003502b250526041e923b27042706440e0e|@4679,@4680,@4683,@4692,@4696,I229,@1482,@958,@2429,I105,I218,@2102,@2899,-1,@2080,@2504,@344,@4700,@4678| 4678:O2|-1,1 4679:S35|545950455f5452454528292e67656e457175616c69747946756e6374696f6e73283329 4680:O1|@4681 4681:C2,16|00802b352c364d0006002d0e7e030003|@4682,@2453| 4682:S27|5354525543545f56414c5328292e73616d65547970654964283129 4683:O1|@4684 4684:C4,40|00813c28403b4d001e000e0e0e0c00044d0114002a2f6a4d020d002f2c6a2e2b452a4666430e0e0e|@4686,I11,@4687,@4685| 4685:C3,72|00805608293b4d003e000e0e0e0c000329293b4d0131000e0e0c000303033b0224293529352a362c362b336956870e0e0e0c000203052a6801020829250526041e2f3b270466420e|@4691,I253,I229| 4686:S24|5554494c49544945535f28292e6d61705461626c65283229 4687:C5,104|00802b355617293b4d005c000e0c000329293b4d0151000e0e0c000303033b021c29352a362a352930696456780c000203033c0207292503511e283b6564030f3b2a0e0e0e4f021f00400002640201295647302b692a3b2b4d030c000e0c0004503b2706420e0e0e|@4689,I253,I229,@4688,I255| 4688:C3,64|00802b3b4d0038000e0c000303033b02292b352c362a3556342a2a696557380e0e0c00020303290210290e0e0e4f010f002100022b2a69296565420e0e0e0e0e|@4690,I229,@4688| 4689:S32|5554494c49544945535f28292e6d61705461626c65283229656e746572283129 4690:S33|5554494c49544945535f28292e6d61705461626c6528322964656c657465283229 4691:S33|5554494c49544945535f28292e6d61705461626c652832296c6f6f6b7570283129 4692:C12,288|00802b561a0c0002294d0013010c00024d010c010e0c000203062935296402044d02fc0029354d03f6004d04f2000e0e0e0c0003031d29354d03e4004d04e0000e0c000303062936296402054d05d0001002c82d4d06c8006956370e0e0c00025029353b4d04b8000e0c000303062936296402054d07a80010293c2a3b4d049f000c000303032902702a352b362b4d038e004d048a000e0e0e0c000303064d037e00024956790329324d0873000c00024d016c000e0c000203142a4d0961000e0e0c00024d0158000e0c000202013b02013b03064d03480002132a4d0a41000e0e0c00022c2a2d56b80c0004642a2a2505250526031e7a3b6665293b4d0420000e0c000303032b02064d0313002a69302a696456570c000250296565420e0e0e|@4694,I105,I218,@4695,-1,I229,@958,@4693,@958,@2892,@2429,@2501| 4693:O2|-1,0 4694:S49|545950455f5452454528292e67656e457175616c69747946756e6374696f6e7328332967656e457175616c697479283129 4695:O2|-1,-1 4696:C10,200|00822c3b4d00c0000e0c000303032d02b12c352d362a4d01ae000e0e0e0c0002294d02a3000c0002030e294d0399000e0e0c00023c6402013b644d048a000e0e0e0c0002030a2f2a2f2e307b050700042a4d0173000c0002294d026b000c0002030e294d0361000e0e0c0002296402054d05540010293556574d064b0032692b2b2b4d0742000e0e0e0c0004294d0837004d0033000c000303064d082a000220293b4d0022000e0e0e0c000303033b0202220c2931220d220c220e7b050e00042708440e0e0e0e0e|@4698,I229,@2667,@2107,@2109,I218,@958,@4697,@2433,-1| 4697:C8,104|008056074d0060000e0c000229293b4d0155000e0e0c000303033b023d29352a362a4d0242000e0e0e0c0002030e2a4d0335000e0e0c0002296402054d0428001029314d0521000e0e0c00036403033c0207292503511e493b656503033c02044d060400420e0e0e|@4699,@2435,I229,@1474,@1476,@958,@2024,-1| 4698:S46|545950455f5452454528292e67656e457175616c69747946756e6374696f6e73283329636f6e7374724571283329 4699:S52|545950455f5452454528292e67656e457175616c69747946756e6374696f6e73283329636f6e737472457128332965712d283129 4700:S27|2920646f6573206e6f74207265737065637420657175616c697479 4701:C1,24|00802b56180c000250560729372d2a2e7d0500020e0e0e0e|@4702| 4702:S71|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737341627344617461283429552d646563456e762d656e74657256616c466e283129 4703:C2,24|00805609561856272b3c2c2c324d000700330e7b07060006|@2987,@2986| 4704:C2,24|00805609561856272b3c2c2c324d000700330e7b07060006|@2987,@2986| 4705:S18|206973206e6f742061206461746174797065 4706:C5,56|00800402004d002f001b0f273b3b3b2e4d0124000e0c00075029644d0219000e0e0c00023b2d0e0e0e4f030b00200002502a65420e0e0e0e|@4708,@205,@1348,@1326,@4707| 4707:C8,88|00802b3b4d0050000e0c000303033b02412b352c36572c2b2a4f013b00420003564458595769577c4d022c0058992b6a4d0324002a2d2f6b2f2f4d041a002c4d0515000e0e0c0005324f060b00b10002270b420e0e0e0e0e|@4710,I229,@2979,@4711,@4709,@2557,@2554,@4707| 4708:S49|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737369676e4c697374283129 4709:C4,40|00802b352c362d375639564856574d0016002f4d01110030303030304d02080022100e7b0a090009|@3038,@3037,@1197,@2576| 4710:S61|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737369676e4c6973742831296170706c794c697374283129 4711:C6,64|008056085617292309294d0032004d012e000e0e0e0c00032f384d0222002a0e0e0c0002512f354d0315002a0e0c0002512c2a314d040800320e0e7b05070004|@3031,@7299,@960,@2245,@329,@2139| 4712:C6,56|0080560a292308562a29230c5649565856674d0022002a2d2d6b33302f4d0117004d0213004d030f002f4d040a0022110e0e0e7b090b0008|@3104,@4713,@2842,@2838,@1480,@2374| 4713:C2,24|00805609561856272b3c2c2c324d000700330e7b07060006|@2987,@2986| 4714:C6,64|008056085617292309294d0032004d012e000e0e0e0c00032f384d0222002a0e0e0c0002512f354d0315002a0e0c0002512c2a314d040800320e0e7b05070004|@3031,@7299,@960,@2245,@329,@2139| 4715:C4,40|00802b352c362d375639564856574d0016002f4d01110030303030304d02080022100e7b0a090009|@3038,@3037,@1197,@2576| 4716:C4,40|00805609561856272e4d001b004d0117000c00032c3c2d2d2d4d020b00340e7b070700060e0e0e0e|@3234,@4717,@344,@2986| 4717:S37|2068617320616c7265616479206265656e20626f756e6420696e2074686973206d61746368 4718:C2,40|00802b56180c0002293b4d001a000e0e0e0c0003030a2c56272d0e0e7d0400022964420e0e0e0e0e|@1316,I229| 4719:C2,24|00805609561856272b3c2c2c324d000700330e7b07060006|@2987,@2986| 4720:C2,40|00802b56180c0002293b4d001a000e0e0e0c0003030a2c56272d0e0e7d0400022964420e0e0e0e0e|@1316,I229| 4721:C2,40|00802b56180c0002293b4d001a000e0e0e0c0003030a2c56272d0e0e7d0400022964420e0e0e0e0e|@1316,I229| 4722:C2,40|00802b56180c0002293b4d001a000e0e0e0c0003030a2c56272d0e0e7d0400022964420e0e0e0e0e|@1316,I229| 4723:O1|@4724 4724:C1,8|00803b420e0e0e0e|@4725| 4725:S60|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c7565732832296c6f63616c456e762d283129 4726:C3,56|00802b3656195629293b4d002a000e0e0e0c00032c2a692c3b2b4d011a000e0e0e0c0004503056680e0c00025056572937322a337d0a0002|@4727,I253,I255| 4727:S59|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c756573283229626f6479456e762d283129 4728:C1,24|00802b56180c000250560729382d2a2e7d0500020e0e0e0e|@4727| 4729:C1,24|00802b56180c00025056072923092d2a2e0e0e0e7d050002|@4727| 4730:C2,24|00805609561856272b3c2c2c324d000700330e7b07060006|@2987,@2986| 4731:C4,40|00805609561856272e4d001b004d0117000c00032c3c2d2d2d4d020b00340e7b070700060e0e0e0e|@3234,@2235,@344,@2986| 4732:C29,512|00802b352c362d372e38564857594d00ee012a58892d57aa680558792e2b2b2e4d01dc010e0c00052f4d02d3010c000203033b024d0402004d03c4011b0f273b3b3c2e4d04b9010e0e0c00075029644d05ad010e0e0c000258a957b956c84d069e0158e92b6a4d0796012a2d2f6b220c2f4d088b012c4d0986010e0e0e0c000527062f354d0a78014d0b74010e0c0003032a3c28403b4d0c66010e0e0e0c00043c28403b4d0c58010e0c00043c2b2b6a220c3b2b220d6b29270406ca2f354d0d3e014d0b3a010e0e0e0c000303d92f36303757ca29230657ea29230c1211000100020012120003000300121300020003004d0e0b012a2d2d6b32302f4d0f00014d10fc004d11f8002f4d12f3000c0008294d13eb000c00022936293b4d0be0000e0c000303043b50023c1218000300030012190001000200121a0002000300282822104d14b9000e0e0c0003294d15af004d14ab000c00032d3c2e2e2d4d169f000c00062606343b2d4d1793000c0004502b4d188a000e0e0e0c00023c28403b4d0c7c00020224000e0c00043c28403b4d0c6c000e0c00043c2b2b6a221a3b2b2f6b29271202054d19550010323b2b4d174d000e0e0c000450334d0342006956c10c00025058b957c9220c2b2b4d1a2f000c00045056d858e957f9220f2c2c2c3c4d1b1b000c000650121100020004002937221131692a22150e0e0e7d150002|@4734,@4735,@2848,@2046,@205,@1348,@1326,@4737,@4738,@2557,@2554,-5,I229,I11,-8,@4739,@2992,@4740,@1581,@2374,@3005,@344,@4741,@2986,I255,@2667,@4733,@1395,@3077| 4733:O3|@7141,@228,@4742 4734:S67|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c75657328322970726f63657373457863657074696f6e283129 4735:C6,56|0080560a292308562a29230c5649565856674d0022002a2d2d6b33302f4d0117004d0213004d030f002f4d040a0022110e0e0e7b090b0008|@3104,@4736,@2842,@2838,@1480,@2374| 4736:C2,24|00805609561856272b3c2c2c324d000700330e7b07060006|@2987,@2986| 4737:C6,64|008056085617292309294d0032004d012e000e0e0e0c00032f384d0222002a0e0e0c0002512f354d0315002a0e0c0002512c2a314d040800320e0e7b05070004|@3031,@7299,@960,@2245,@329,@2139| 4738:C4,40|00802b352c362d375639564856574d0016002f4d01110030303030304d02080022100e7b0a090009|@3038,@3037,@1197,@2576| 4739:C2,24|00805609561856272b3c2c2c324d000700330e7b07060006|@2987,@2986| 4740:S9|457863657074696f6e 4741:S22|29206973206e6f7420616e20657863657074696f6e2e 4742:S41|70726f63657373457863657074696f6e3a206261646c792d666f726d65642070617273652d74726565 4743:C6,64|008056085617292309294d0032004d012e000e0e0e0c00032f384d0222002a0e0e0c0002512f354d0315002a0e0c0002512c2a314d040800320e0e7b05070004|@3031,@7299,@960,@2245,@329,@2139| 4744:C4,40|00802b352c362d375639564856574d0016002f4d01110030303030304d02080022100e7b0a090009|@3038,@3037,@1197,@2576| 4745:C6,64|008056085617292309294d0032004d012e000e0e0e0c00032f384d0222002a0e0e0c0002512f354d0315002a0e0c0002512c2a314d040800320e0e7b05070004|@3031,@7299,@960,@2245,@329,@2139| 4746:C4,40|00802b352c362d375639564856574d0016002f4d01110030303030304d02080022100e7b0a090009|@3038,@3037,@1197,@2576| 4747:C6,64|008056085617292309294d0032004d012e000e0e0e0c00032f384d0222002a0e0e0c0002512f354d0315002a0e0c0002512c2a314d040800320e0e7b05070004|@3031,@7299,@960,@2245,@329,@2139| 4748:C4,40|00802b352c362d375639564856574d0016002f4d01110030303030304d02080022100e7b0a090009|@3038,@3037,@1197,@2576| 4749:C6,64|008056085617292309294d0032004d012e000e0e0e0c00032f384d0222002a0e0e0c0002512f354d0315002a0e0c0002512c2a314d040800320e0e7b05070004|@3031,@7299,@960,@2245,@329,@2139| 4750:C6,64|008056085617292309294d0032004d012e000e0e0e0c00032f384d0222002a0e0e0c0002512f354d0315002a0e0c0002512c2a314d040800320e0e7b05070004|@3031,@7299,@960,@2245,@329,@2139| 4751:C4,40|00802b352c362d375639564856574d0016002f4d01110030303030304d02080022100e7b0a090009|@3038,@3037,@1197,@2576| 4752:C6,64|008056085617292309294d0032004d012e000e0e0e0c00032f384d0222002a0e0e0c0002512f354d0315002a0e0c0002512c2a314d040800320e0e7b05070004|@3031,@7299,@960,@2245,@329,@2139| 4753:C4,40|00802b352c362d375639564856574d0016002f4d01110030303030304d02080022100e7b0a090009|@3038,@3037,@1197,@2576| 4754:C6,64|008056085617292309294d0032004d012e000e0e0e0c00032f384d0222002a0e0e0c0002512f354d0315002a0e0c0002512c2a314d040800320e0e7b05070004|@3031,@7299,@960,@2245,@329,@2139| 4755:C4,40|00802b352c362d375639564856574d0016002f4d01110030303030304d02080022100e7b0a090009|@3038,@3037,@1197,@2576| 4756:C6,64|008056085617292309294d0032004d012e000e0e0e0c00032f384d0222002a0e0e0c0002512f354d0315002a0e0c0002512c2a314d040800320e0e7b05070004|@3031,@7299,@960,@2245,@329,@2139| 4757:C4,40|00802b352c362d375639564856574d0016002f4d01110030303030304d02080022100e7b0a090009|@3038,@3037,@1197,@2576| 4758:O3|@7141,@228,@4759 4759:S27|61737369676e54797065733a2077696c646361726420666f756e64 4760:S34|61737369676e54797065733a206c617965726564207061747465726e20666f756e64 4761:C6,88|00802b3b4d0050000e0c000303033b02452b352c36582b2923062c4d0139000e0e0c00022a0c000264294d022a000e0e0e0c00024d0320000e0c000203062935296402012c2c0e0e0e4f040b005100022a2a69292707420e|@436,I229,@2156,I105,I218,@4761| 4762:S98|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296d616b65536967496e746f28362970726f63657373536967283329757064617465436f6e7374724c697374283129 4763:C2,64|00802b56190c0002293b4d0032000e0e0e0c000303222c56280c0002293b4d001e000e0e0e0c0003030a2d56372e0e0e7d050002296402012964420e0e0e0e0e|@1316,I229| 4764:C2,64|00802b56190c0002293b4d0032000e0e0e0c000303222c56280c0002293b4d001e000e0e0e0c0003030a2d56372e0e0e7d050002296402012964420e0e0e0e0e|@1316,I229| 4765:C4,40|00805609561856272e4d001b004d0117000c00032a3c2e2e2d4d020b00340e7b070700060e0e0e0e|@4766,@2879,@344,@2232| 4766:S82|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296d616b65536967496e746f2836296c6f6f6b75704661696c757265283129 4767:C8,80|0080560b292308562a2923084d0040002a2d6a565b29230b567a29230b4d012f002a2d6a56a956b856c74d0222002b2d2c6b2210332f4d0316004d0412004d050e002f4d06090022170e0e7b09110008|@4769,@4770,@4771,@4768,@2842,@2838,@1480,@2374| 4768:C2,24|00805609561856272b3c2c2c324d000700330e7b07060006|@2276,@2232| 4769:S81|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296d616b65536967496e746f2836296c6f6f6b7570476c6f62616c283129 4770:C2,40|00802b56180c0002293b4d001a000e0e0e0c0003030a2c56272d0e0e7d0400022964420e0e0e0e0e|@1316,I229| 4771:C2,40|00802b56180c0002293b4d001a000e0e0e0c0003030a2c56272d0e0e7d0400022964420e0e0e0e0e|@1316,I229| 4772:C2,24|00805609561856272b3c2c2c324d000700330e7b07060006|@2276,@2232| 4773:C37,768|00823b2e4d00f8020e0c00024d01f0020e0c000203033b06d22e4d02e2020e0e0e0c00022e4d02d7020c00022a2a4d03ce020e0e0e0c0003654d04c3020c0002032a2e4d05b9020e0e0c00024d06b0022a4d07ab020c0003294d08a3024d079f020c0003652d2d0e7d0600022e4d098f020c00022e4d0987020c00022a4d0a7f020c00024d0478020e0c0002039e2a4d0b6d020e0e0c0002036a2a4d0c61020e0e0c000229352a37334d0d53020c0002292c4d0e4a020e0e0e0c0003640319294d0f3c020e0c00022934344d103102220c0e0e7b050c0004334d0523020c00024d111c022a4d07170202020c020c0003294d120b024d0707020c00036532320e7d0b0002304d05f7010c00024d13f0012a4d07eb010c0003294d14e3014d07df010c0003652f2f0e7d080002294d0bcf010c0002030e294d0cc5010e0e0c00023c6402013b0338294d0bb4010e0c0002030e294d0ca9010e0e0c0002296402054d159c01102935314d0d94010e0c0002292b4d0e8a010e0e0e0c00036602013b033a294d0b79010e0e0c0002030e294d0c6d010e0e0c0002296402054d156001102937644d0f58010e0c0002312a314d104d01320e0e0e7b05090004304d003f010c00024d1638010e0c00024d0430010e0c0002032a304d0525010e0e0c00024d171c012a4d0717010c0003294d180f014d070b010c0003652f2f0e7d080002304d19fb000c000203142f4d1af1000e0e0c00024d04e8000e0c000202013b032b304d05da000e0e0e0c00024d1bd0002a4d07cb000c0003294d1cc3004d07bf000c0003652f2f0e7d080002304d1daf000c00023b2a4d1ea6000e0e0e0c0003644d049b000c000203832f4d1d91000e0e0c00023b2a4d1e86000e0e0e0c0003640349304d0578000e0c00024d1f70002a4d076b000c0003294d2063004d075f000c0003324d0557000c00022a2a4d074e000e0e0e0c0003294d2143004d073f000c000327052f2f7d080002304d002f000c0002304d0027000c00022a2a4d221e000e0e0e0c0003503b65020b2f310e0e4f230b004000036564440e0e0e0e0e|@4775,@1482,@1485,@2424,I113,I218,@2080,@4776,@344,@2428,@2420,@2046,@2073,@2075,@2435,@4777,@2077,@2819,@4780,@2891,@4780,@2891,@958,@2892,@4780,@4781,@2429,@2431,@4780,@4782,@2501,I229,@4780,@4783,@4784,@2904,@4774| 4774:C18,240|00812c4d00e9000e0e0c00022c4d01df000c00020402002f4d02d4000e0c00024d03cc000e0c000203193c2840314d04be000e0e0e0c00042a4d05b300452a46510206293b45304650292b2d2b6a4d069e000e0e0e0c0002304d0793000c0002037d314d0289000e0e0c00024d0880000e0c00020315314d0975000e0e0c0002294d0a6b000c00026402013b030d313c4d0b5c000e0c0003500242314d0c50000e0c00024d0d48000e0c0002032d314d003d000e0e0c000228282a4d0e31000e0e0c0003294d0f27004d0e23000c00036556670e0e0c00025002023b5002023b50302a4d100900327e0900030e0e0e0e|@4785,@2080,@2435,@1482,@1485,I11,-1,@1489,@2429,@2892,@2420,@2046,@2899,@2431,I218,@344,@2500,@2897| 4775:S27|545950455f5452454528292e736574576865726554797065283329 4776:S38|43616e6e6f74206170706c792074797065207265616c69736174696f6e3a2054797065732028 4777:O1|@4778 4778:C8,144|00812b3b4d0088000e0c0003030e3b2d4d007c002d0e0e0e7e0400032b35294d016d000e0e0c0002035e294d0261000e0e0c00022d362f4d0355000e0e0c00024d044c000e0c0002033a2f35294d013f000c0002032a294d0235000e0e0c000231362d2b4d0528000e0c0003030e292d4d061c00330e0e0e7e0a00033b6502013b6402013b6502013b64430e0e0e0e0e|@4779,I229,@1474,@1476,I105,I218,@2024,@4777| 4779:S36|545950455f5452454528292e736574576865726554797065283329657141726773283229 4780:S32|43616e6e6f74206170706c792074797065207265616c69736174696f6e3a2028 4781:S18|2920697320616c726561647920667265652e 4782:S53|2920697320616e206571747970652062757420746865207479706520646f6573206e6f74207065726d697420657175616c6974792e 4783:S21|292069732061206461746174797065206275742028 4784:S9|29206973206e6f742e 4785:S38|545950455f5452454528292e7365745768657265547970652833297365744571756976283229 4786:C2,24|00805609561856272b3c2c2c324d000700330e7b07060006|@2276,@2232| 4787:C6,80|00823c28402e4d0046000e0e0e0c00044d013c002a692f2a0e0c0002502f4d022e000e0e0e0c00022b3b4d0322000e0e0e0c00033135294d0415000e0e0c0002292d2d220c6b292707440e0e0e0e0e0e|@4789,I11,@4788,@2698,I253,@2696| 4788:C5,40|00802b4d0021000e0e0c00024d0118002b56376a4d0210002a692b2a3b4d030700310e7b05060004|@4791,@2412,@4792,@4790,@2410| 4789:S38|535452554354555245535f28292e72656e616d655661726961626c654173426f756e64283329 4790:C1,16|00802b352c362d3756372e7b05030004|@4805| 4791:S50|535452554354555245535f28292e72656e616d655661726961626c654173426f756e642833297365745374616d7073283129 4792:C20,240|00822c4d00e9000e0e0c0002033a2c4d01dd000e0e0c0002293b4d02d2000e0e0e0c00030316404d03c5000e0e0c0002294d04bb003b3b6b29650204293729646456172c7d0500022c4d05a3000c000203992c4d0699000e0e0c00024d0790005628692a4d0888000e0c00022b4d097f000c0002294d0a77000c00024d0b70000e0c0002030d292c4d0c64000e0c00035002023b502a4d0d56000e0e0e0c000203445648293b4d0e46000e0e0e0c000356682a3c4d0f38000e0c00032a3b2b4d102d000e0e0c0004502b4d1122000e0e0e0c00022f2a4d1216000e0e0e0c0003503b270502013b270402013b440e0e0e|@4794,@2336,@2335,I229,@1893,I48,@2348,@2347,@4795,@1482,@2420,@2046,I218,@4793,@2892,I253,I106,I255,@2219,@2904| 4793:O1|@4797 4794:S53|535452554354555245535f28292e72656e616d655661726961626c654173426f756e642833297365745374616d7073283129283329 4795:C5,56|00805607293b4d002e000e0e0e0c000356272a3c4d0120000e0c00032a3b2b4d0215000e0e0c0004502b4d030a00300e7d0700020e0e0e0e|@4796,I253,I106,I255,@2219| 4796:S56|535452554354555245535f28292e72656e616d655661726961626c654173426f756e642833297365745374616d7073283129283329283129 4797:C5,48|00814d002a004d0126002d6a4d0220002a694d031a000e0e0e0c00022e2a0e0e0e0c0002643b2a2e7d0600020e0e0e0e|@4799,@4800,@4793,@4798,@2602| 4798:C2,16|00804d000a002c56276a420e0e0e0e0e|@4803,@4802| 4799:S23|545950455f5452454528292e7365745479706573283229 4800:C11,168|00812b4d00a1000e0e0c0002030e2b4d0195000e0e0c00023c6402013b03872b4d0084000e0c0002030e2b4d0179000e0e0c0002296402054d026c00102937644d0364000e0c000256182a4d0459000e0e0c00022b4d054f000c0002294d0647000c00024d0740000e0c0002030d292c56670e0e0e0c00035002023b502a4d0826000e0e0e0c000203172c2c0e0c00022b2a4d0912000e0e0e0c0003503b6402013b270402013b43|@4801,@2073,@2075,@958,@2077,@1482,@2420,@2046,I218,@2892,@2904| 4801:S42|545950455f5452454528292e736574547970657328322973657454797065436f6e73747256616c283229 4802:C1,16|00802b561756282d7e0300030e0e0e0e|@4804| 4803:S42|545950455f5452454528292e736574547970657328322973657454797065436f6e73747256616c283129 4804:S45|545950455f5452454528292e736574547970657328322973657454797065436f6e73747256616c283129283129 4805:S53|535452554354555245535f28292e72656e616d655661726961626c654173426f756e642833297365745374616d7073283129283129 4806:C8,128|00802b4d0079000e0e0c0002036a2b29354d016b004d0267000c000303292936293b4d035a000e0e0e0c000329353c4d024d000e0e0c000303032b0207292503511e323b650201296429353b4d0230000e0c000303062936296402054d0420001056274d0519000e0e0c00022a2a4d060e00300e7e0600033b420e0e0e0e0e0e|@4807,@2399,-2,I229,I253,@2397,@2386,I231| 4807:S72|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973747275637456616c75652835296d757374436f707954797065283129 4808:S24|73747275637456616c75653a206e6f7420612076616c7565 4809:C8,128|00802b4d0079000e0e0c0002036a2b29354d016b004d0267000c000303292936293b4d035a000e0e0e0c000329353c4d024d000e0e0c000303032b0207292503511e323b650201296429353b4d0230000e0c000303062936296402054d0420001056274d0519000e0e0c00022a2a4d060e00300e7e0600033b420e0e0e0e0e0e|@4810,@2399,-2,I229,I253,@2397,@2386,I231| 4810:S109|535452554354555245535f28292e70617373325374727563747328332970617373325374727563742835297061737332537472756374757265446563283229706173733253747275637475726542696e64283629726573756c745369672d6d757374436f707954797065283129 4811:C2,40|00813c28403b4d001e000e0e0e0c00043c28403b4d0010000e0c00043c2b2b6a2f2a306a29270443|@4812,I11| 4812:S32|5354525543545f56414c5328292e6d616b654c6f63616c537472756374283229 4813:C5,96|00814d005a0056182e57386b0403002a2a4d014b000c00035029352a363b30293b4d023b000c000303043b50022229352a362a352b362c372d382e392f3a3023064f031b00e0000850292503511e2e51505659292307642c310e0e0e7d090002|@4815,@4816,@2253,I229,@4814| 4814:C40,792|008631353c4d000f030c000307dd313632373338404d01ff020c0002294d02f7023b3b6b294d03ef020c00022c354d04e6024d05e2020e0e0e0c00030a04001c000a000a00160019002c3b694d06c8022a696402072c02042c02012c57792a3b2b22114d02b1020e0e4f07ab02c20006312a4d08a2020e0e0e0c0003324d0297024d0993020c00034d0a8c020e0c0002030d2d2309332b692a0c00025102232a4d0b74020e0c00024d0c6c022f2c6a4d0d65022a692b2a3b4d0e5c020e0c00042604313b2b4d0f4f020c0004502d230657b92923064d103f022a2d6a31230857f92923084d1130022a020221022d6a121300020003002939220e230b1216000200030029230b4d120e022a2d6a12190002000300293a121b000200030029230a121d00020003002937121f0002000300293812210002000300292309122300020003002936122500020003002923074d13c5012c333222162211221e30221c220d22142219680c221e4d14ab010c00023c28402b4d15a0010e0c00044d1698012a69122b00020001002922314d1788010e0c0003294d187f014d177b010c0003292234313022380e0e1619006a013300020000062230353b4d005c010e0c000303032906ce22254d144d010e0e0c0002123000020001002922364d173a010e0e0e0c0003294d1a2f014d172b010c000322342d220d223b2d0e1607001a01380002000006294d1b0f010c00022a4d1407010c00020402002b2b2b4d1cfa000e0e0e0c000450294d1dee002e69223c03252e4d1be3000c00022f4d14db000c00020402002b2b2b4d1cce000e0e0e0c000450296602012a123a0001000200123b0003000200220d322f2d22452e4d1ea8000e0c000750123c00020001002922424d1795000e0e0c0003294d1f8b004d178700020215000c000334302216312d4d2076000e0e0e0c00062710294d2169000e0e0c0002303b4d225e000e0e0e0c00032b35294d2351000e0e0c0002292d2d3b6b3b4d2442000e0e0e0c0002223a222c2c2c4d2532000e0e0e0c0005223b2a691238000100fbff0e0e0c00025022393b2b4d0f13000c0004503b273602054d260600101f070e0e0e|@4820,I229,@1893,I48,@2286,-9,I107,-5,@2796,@2268,I24,I218,@2412,@4821,@4823,@2410,I255,@4825,@4826,@4827,@4828,@2389,I11,@4831,@344,@4833,@2270,@4833,@2386,@2392,@4834,@2405,@4833,@2693,@2698,I253,@2696,@4836,@4839,@4819| 4815:S61|535452554354555245535f28292e7061737332537472756374732833297061737332537472756374283529706173733246756e63746f72446563283229 4816:C5,48|00805609561856274d0024002f4d011f000c0003294d0217004d0113000c00032d3c2e2e2d4d030700220c7b07080006|@4818,@4817,@344,@2235,@2232| 4817:S8|46756e63746f7220 4818:S69|535452554354555245535f28292e7061737332537472756374732833297061737332537472756374283529706173733246756e63746f7244656328322973456e762d283129 4819:O3|@7141,@228,@4842 4820:S80|535452554354555245535f28292e7061737332537472756374732833297061737332537472756374283529706173733246756e63746f72446563283229706173733246756e63746f7242696e64283729 4821:C10,176|00822c4d00a9000e0e0c0002031a560729382e4d0199000e0e0c0002302a69642a2e0e0e7d0700022c4d0283000c0002034a560729372e4d0375000e0e0c000256382a3729353b4d0465000e0e0c0003031c29362c352d362e382c2f694d054f000c00022c2c2b2d6b29270602012b332a6927042a2e0e0e7d0700022c4d062f000c0002032656072923092e4d0720000e0c000256382a2a4d0814000e0c0003322a69662a2e0e0e7d0700023b440e0e|@4822,@2348,@2347,@2354,@2353,I229,@2996,@2336,@2335,@2359| 4822:S83|535452554354555245535f28292e7061737332537472756374732833297061737332537472756374283529706173733246756e63746f72446563283229706173733246756e63746f7242696e64283729283329 4823:C1,16|00802b352c362d3756372e7b05030004|@4824| 4824:S83|535452554354555245535f28292e7061737332537472756374732833297061737332537472756374283529706173733246756e63746f72446563283229706173733246756e63746f7242696e64283729283129 4825:C2,40|00802b56180c0002293b4d001a000e0e0e0c0003030a2c56272d0e0e7d0400022964420e0e0e0e0e|@1316,I229| 4826:C2,40|00802b56180c0002293b4d001a000e0e0e0c0003030a2c56272d0e0e7d0400022964420e0e0e0e0e|@1316,I229| 4827:C2,40|00802b56180c0002293b4d001a000e0e0e0c0003030a2c56272d0e0e7d0400022964420e0e0e0e0e|@1316,I229| 4828:O1|@4829 4829:C1,8|00803b420e0e0e0e|@4830| 4830:S95|535452554354555245535f28292e7061737332537472756374732833297061737332537472756374283529706173733246756e63746f72446563283229706173733246756e63746f7242696e64283729656e7657697468417267732d283129 4831:C5,56|00805607293b4d002e000e0e0e0c000356272a3c4d0120000e0c00032a3b2b4d0215000e0e0c0004502b4d030a00300e7d0700020e0e0e0e|@4832,I253,I106,I255,@2219| 4832:S92|535452554354555245535f28292e7061737332537472756374732833297061737332537472756374283529706173733246756e63746f72446563283229706173733246756e63746f7242696e642837296e6577547970654964283129 4833:S3|28292e 4834:C8,128|00802b4d0079000e0e0c0002036a2b29354d016b004d0267000c000303292936293b4d035a000e0e0e0c000329353c4d024d000e0e0c000303032b0207292503511e323b650201296429353b4d0230000e0c000303062936296402054d0420001056274d0519000e0e0c00022a2a4d060e00300e7e0600033b420e0e0e0e0e0e|@4835,@2399,-2,I229,I253,@2397,@2386,I231| 4835:S105|535452554354555245535f28292e7061737332537472756374732833297061737332537472756374283529706173733246756e63746f72446563283229706173733246756e63746f7242696e64283729726573756c745369672d6d757374436f707954797065283129 4836:O1|@4837 4837:C2,40|00803c28403b4d001e000e0e0e0c00043c28403b4d0010000e0c00043c2b2b6a65420e0e0e0e0e0e|@4838,I11| 4838:S26|5354525543545f56414c5328292e6d616b654c6f63616c283129 4839:O1|@4840 4840:C1,16|00832d2f2d2f6b29641f040e0e0e0e0e|@4841| 4841:S28|5354525543545f56414c5328292e6d616b6546756e63746f72283429 4842:S16|706173733246756e63746f7242696e64 4843:C5,88|00814d00520056182e57386b0403002a2a4d0143000c00035029352a363b30293b4d0233000c000303043b50021e29352a362a352b362c372d380e0e0e4f031700b0000550292503511e2a515056592936642c317d090002|@4845,@4846,@2253,I229,@4844| 4844:C7,112|00835709571729304d0064000e0c000329282e4d0059000e0e0c00032f3b2e220c2d0e0e0e4f014700820006294d023f000c00022a4d0337000c00022b35294d042d000e0e0c000229220e2d2f6b220d3b2b4d051a000e0e0e0c000450220e2a6956b1220d0e0e0e7d1000020e0e0e0e|@4849,@344,@2796,@2386,@2389,@2696,I255| 4845:S63|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352970617373325369676e6174757265446563283229 4846:C5,48|00805609561856274d0024002f4d011f000c0003294d0217004d0113000c00032d3c2e2e2d4d030700220c7b07080006|@4848,@4847,@344,@2235,@2232| 4847:S10|5369676e617475726520 4848:S71|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352970617373325369676e617475726544656328322973456e762d283129 4849:S84|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352970617373325369676e617475726544656328322970617373325369676e617475726542696e64283429 4850:C13,296|0081404d0021010e0e0c0002294d0117013b3b6b294d020f010c000229230656492923064d0300012a2d6a2d230856892923084d04f1002a2d6a313932230b56d929230b4d05e0002a2d6a12110001000300293a1213000100030029230a22113722123822132309221436221523074d06b5002b2f2f2211220c221830221634220f2214680c121b0001000400121c0001000200121d000100010022202c2e2d2d16070082002300020000064d08780012200001000300221d6a4d096a0012210001000300221e6a4d0a5c0012220001000300221f6a4d0b4e001223000100030022206a4d0640002a2e2e221a221522212210221f332218221d680c12240001000400122500010002001226000100010022282c2e2d2d0e0e1607000a002c00020000062726430e|@4852,@1893,I48,@2286,@4853,@4854,@4855,@4856,@2214,@4859,@4861,@4862,@4851| 4851:C1,24|0080560829362d2a0e0c000251561729362e2a2f7d060002|@4860| 4852:S59|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352970617373324c6f63616c646563283229 4853:C2,40|00802b56180c0002293b4d001a000e0e0e0c0003030a2c56272d0e0e7d0400022964420e0e0e0e0e|@1316,I229| 4854:C2,40|00802b56180c0002293b4d001a000e0e0e0c0003030a2c56272d0e0e7d0400022964420e0e0e0e0e|@1316,I229| 4855:C2,40|00802b56180c0002293b4d001a000e0e0e0c0003030a2c56272d0e0e7d0400022964420e0e0e0e0e|@1316,I229| 4856:O1|@4857 4857:C1,8|00803b420e0e0e0e|@4858| 4858:S71|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352970617373324c6f63616c6465632832296c6f63616c456e762d283129 4859:C1,24|0080560829372d2a0e0c000251561729372e2a2f7d060002|@4860| 4860:S70|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352970617373324c6f63616c646563283229626f6479456e762d283129 4861:C1,24|0080560829382d2a0e0c000251561729382e2a2f7d060002|@4860| 4862:C1,32|008056082923092d2a0c00025156172923092e2a2f0e0e0e7d0600020e0e0e0e|@4860| 4863:C6,88|00802b3656182923092e2a0e0e0c00025156275637293b4d003d000e0e0c00034d0134002e69293b69293b4d0229000e0e0c000303032b020c3b2c0e0e4f031700800002642e3b2b4d040c000e0c0004503b2708420e0e0e|@4867,I253,-1,I229,@4872,I255| 4864:S60|535452554354555245535f28292e7061737332537472756374732833297061737332537472756374283529706173733253696e676c65746f6e283329 4865:C6,104|00802b36561829372e2a0e0e0e0c00025156275637293b4d004d000e0e0c00032d352e362f3730384d013c002d2d2d2d6805293b69293b4d022d000e0e0c000303032f020c3b300e0e4f031b00c0000264323b2b4d0410000e0c0004503b270c420e0e0e0e0e0e0e|@4867,I253,-2,I229,@4866,I255| 4866:C3,48|00802b3b4d0028000e0c000303091201000100f4ff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1884,I229,@4866| 4867:S70|535452554354555245535f28292e7061737332537472756374732833297061737332537472756374283529706173733253696e676c65746f6e2833296e6577456e762d283129 4868:C5,88|00802b36561829382e2a0e0e0e0c00025156275637293b4d003d000e0e0c00033c2e69293b69293b4d012c000e0c000303032b020c3b2c0e0e4f021b00800002642e3b2b4d0310000e0c0004503b2708420e0e0e0e0e0e0e|@4867,I253,I229,@4869,I255| 4869:C3,48|00802b3b4d0028000e0c000303091201000100f8ff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1884,I229,@4869| 4870:C5,88|0080560829352d2a0e0c00025156175627293b4d0041000e0e0c00032f3530363b2b2b6a293b69293b4d012b000c000303032d020c3b2e0e0e4f021b0090000264303b2b4d0310000e0c0004503b2709420e0e0e0e0e0e0e|@4867,I253,I229,@4871,I255| 4871:C3,48|00802b3b4d0028000e0c000303091201000100f7ff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1884,I229,@4871| 4872:C3,48|00802b3b4d0028000e0c000303091201000100f8ff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1884,I229,@4872| 4873:O1|@4874 4874:C5,48|00834d002a002c694d0124002d69300e0e0c0002504d0217002a692f0e0c0002504d030b002a692e2d0e0e0e7d070002|@4876,@4877,@4904,@4906,@4875| 4875:C4,40|00802b352c362a4d001d004d0119000e0e0c00032a4d020f000c00022a2a5667310e0e0e7e070003|@4905,@4833,@344,@2380| 4876:S37|535452554354555245535f28292e636865636b466f72467265655479706556617273283429 4877:C5,40|00814d0022002a2e56376b2c4d0118000e0c00024d0210002b692a2a3b4d030700310e7b05070004|@4879,@4880,@2412,@4878,@2410| 4878:C1,16|00802b352c362d3756372e7b05030004|@4903| 4879:S51|535452554354555245535f28292e636865636b466f72467265655479706556617273283429636865636b537472756374283229 4880:C11,160|00822c4d0099000e0e0c000203565608292f4d018a000e0e0e0c000329282e4d017d000e0e0c00032f4d0273000c0002293b4d036a000e0e0e0c00030316404d045d000e0e0c0002294d0553003b3b6b29650204293729642b2a5677320e0e0e7e0a00032c4d0637000c0002032e5608292f4d012a000e0e0e0c00032e4d071f000c0002294d0817000c000256492c2b2b4d090b00330e7b050a00043b440e0e|@4882,@2336,@344,@2335,I229,@1893,I48,@2354,@2353,@2667,@4881| 4881:O1|@4883 4882:S64|535452554354555245535f28292e636865636b466f72467265655479706556617273283429636865636b537472756374283229636865636b456e747279283329 4883:C5,64|00823c28403b4d0036000e0e0e0c00044d012c002f2e2c6b4d0224002a694d031e000e0e0e0c00022f2a0e0e0e0c0002643b2a0e0e0c0002513b65440e0e0e0e|@4885,I11,@4886,@4884,@2602| 4884:C2,16|00804d000a002c56276a420e0e0e0e0e|@4901,@4900| 4885:S40|545950455f5452454528292e636865636b466f7246726565547970655661726961626c6573283329 4886:C28,408|00812b4d0091010e0e0c000207d22b4d0185010e0e0c000229352a364d0278010e0c0003294d036f010c000264031c29352a364d0461010e0e0c0003293c4d0556010e0e0e0c00036402013b07dc5619293b4d0642010e0e0e0c0003644d0737010c0002285f2a4d082d010e0e0c000356395649293b4d061e010e0e0e0c0003293c4d0912010e0e0e0c00032c3b2b4d0a05010e0e0c0004503b4d0bfa000e0e0e0c0002303531364d0cec000e0c00032f3b4d0de2002d2d3b4d0edb000c00070402002a4d0fd0000e0c00024d10c8000e0c0002031d3c28402c4d11ba000202ae000e0e0e0c00042a4d12ab00452a46510206293b452b4650293b332b6a4d1396000e0e0e0c000256d856e829352a362b372c382d392e3a2f23063023073123083223094d147000020260000e0c000b12110001000100294d155c00694d1657002a69654d1750000e0c00024d1848002a69292c3b30353136323733383439220c3a220d2306220e2307220f2308221023094d1922000e0e0e0c000e5022112f4d1a140022160e0e7e1600033b6402013b430e0e0e0e0e0e|@4888,@1474,@1476,@2043,@2046,@2059,I113,I253,@4889,@344,I106,I255,@2221,@2027,@205,@4892,@1482,@1485,I11,-1,@1489,@1335,@4895,@4899,@369,@4887,@1111,@1469| 4887:C1,16|00802b3856172a2d7d0400020e0e0e0e|@1545| 4888:S53|545950455f5452454528292e636865636b466f7246726565547970655661726961626c6573283329636865636b5479706573283229 4889:O1|@4890 4890:C13,216|00802b281a4d00cf000c000303482b3b4d00c4000e0c0003293c4d01ba000e0e0e0c000303032c020b2c28194d02a8000e0c000329281a4d039d000e0e0c0003293c4d0292000e0e0e0c0003664d0487000c000202044d057e002c281a4d0677000c0003293b4d016e000e0e0e0c000303033c0218293b4d005d000e0e0c00033c2a4d0152000e0e0e0c000364030329020a29281a4d073f000c00032928614d0735000e0e0c0003293b4d082a000e0e0e0c000303033c020b2928ff4d0918000e0c000303054d0a0e0010292d2a4d0b0600320e7e080003|@4891,I231,I229,I107,I109,@4889,I48,I110,I106,I234,I233,@361,@344| 4891:S50|545950455f5452454528292e636865636b466f7246726565547970655661726961626c657328332967656e4e616d65283129 4892:O1|@4893 4893:C3,72|00853b30293b4d003e000e0e0e0c000303032a021629362b3c4d012b000c0003292b25042504511e233b65652d303b6a3b2a69332c30220c2d220c68062927041f060e0e0e0e0e0e|@4894,I229,I106| 4894:S38|5354525543545f56414c5328292e6d616b6546726f7a656e54797065436f6e73747273283629 4895:O2|@4897,@4896 4896:O2|@4898,0 4897:S33|2920636f6e7461696e73206120667265652074797065207661726961626c652e0a 4898:S32|53657474696e6720697420746f206120756e69717565206d6f6e6f747970652e 4899:S13|5468652074797065206f662028 4900:C1,16|00802b561756282d7e0300030e0e0e0e|@4902| 4901:S53|545950455f5452454528292e636865636b466f7246726565547970655661726961626c6573283329636865636b5479706573283129 4902:S56|545950455f5452454528292e636865636b466f7246726565547970655661726961626c6573283329636865636b5479706573283129283129 4903:S64|535452554354555245535f28292e636865636b466f72467265655479706556617273283429636865636b537472756374283229636865636b456e747279283129 4904:C3,32|00802b352c36294d0015000e0e0c000256372c2b2b4d010700320e7b05070004|@4905,@2667,@4881| 4905:S40|535452554354555245535f28292e636865636b466f72467265655479706556617273283429283129 4906:C5,72|00802b352c362a282e4d003b000c00032a3b4d0132000e0e0e0c00030316404d0225000e0e0c0002294d031b003b3b6b296502042a3729642a2a5667310e0e0e7e0700030e0e0e0e|@4905,@344,I229,@1893,I48| 4907:O3|103,@373,@4908 4908:S21|537461746963206572726f72732028706173733229 4909:O1|@4910 4910:C12,216|00813c28403c4d00ce000e0e0e0c00044d01c4002a693c28403b4d00ba000e0e0e0c000421054d02ae004521054d03a70045292c462b4731482d496c502a2a462c472e4831496c504d048c002b690403004d058300342c2c4d067c000e0c00055029352a36402a692a293b4d0769000e0e0c000303033c021f293529354d0857004d0753000c0003030c2a36292503511e273b6402013b64640312294d0938000e0c00024d0830002a6964020129293b69293b4d0721000e0e0c000303032d020c3b2e0e0e4f0a0f00d000026428092a69270d430e0e0e0e|@4912,I11,@4913,@4915,@5759,@5782,@5783,@4925,I229,-3,@3353,@4911| 4911:C3,48|00802b3b4d0028000e0c000303091201000100f3ff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1884,I229,@4911| 4912:S31|535452554354555245535f28292e67656e636f646553747275637473283229 4913:C4,48|00805607293b4d0026000e0e0e0c000356272a3c4d0118000e0c00032a3b2b4d020d000e0e0c0004502b2704420e0e0e|@4914,I253,I106,I255| 4914:S40|535452554354555245535f28292e67656e636f6465537472756374732832296d6b41646472283129 4915:C14,296|00832d353d4d001f010c00030a0500390061000c000c00c60015002b3b453b462d4706d52d364d01fe005627315648565968054d02f1002a692f2c2b314d03e700320e7b060900052d364d04da00562856395647565a3468064d05cb002a692f2c2b314d03c100320e0e0e7b060900052d362e374d06b0002c326a040300302c2c2c4d03a2000e0e0e0c00055029352a374d07930030220d6a0403002b312c2c4d0384000e0c00055029352a362b372b3b4d0873000c000303032f020c3b300e0e4f096300c0000264220e2a452c462b47270c02512d362e372f38563a5648293b4d0a43000c000356692f2d220c2d2d2211344d0b310002022b000e0e0c000829352a36303b4d0a1e000e0e0e0c00033b2a0e0e0e4f0c0f00c00002220f2e452a462d47270d1f04|@4917,I107,@4918,@4923,@4925,@4930,@4949,@4951,@4953,I229,@4954,I253,@4955,@4916| 4916:C10,144|00802b3b4d0088000e0c000303033b02782b352c362a354d0175004d0071000e0e0c000303352a362b372c382d392c2c2c2c6b5778293b4d0255000e0e0c00032b2a4d034a004d0446003b4d0541000e0e0c0006296801270802013b294d062f000c00024d0728000e0c0002031129352b4f081b004100022a2a69296602092a0e4f080b0031000266420e0e0e0e0e0e|@5758,I229,-2,I253,@633,@7342,@5047,I105,I218,@4916| 4917:S45|535452554354555245535f28292e67656e636f646553747275637473283229636f646553747264656373283429 4918:C12,248|00822d362e372f39563a293b4d00e8000e0c0003565a2a3c4d01dc000e0c00032a3b2b4d02d1000e0e0c0004502d3b4d00c5000e0e0c00034d03bc000e0c00024d04b4000e0c00022935293b2f4d02a7000c0004502a3656a9293b4d0099000e0e0c00032b3b2b4d028d000e0e0c00045056c829220d4d057e000e0e0e0c000329282e4d0571000e0e0c0003220c3b4d0065000e0e0c0003293b4d065a000e0e0e0c00030316404d074d000e0e0c0002294d0843003b3b6b2965020429372964220f2a2d2217121600010001000c00054d092400220e2b3b6b293b694d0a180022103c3b3b6805293b6922182c452a46221a472716440e0e|@4920,I253,I106,I255,@2728,@4919,@344,I229,@1893,I48,-4,-5| 4919:O1|@4921 4920:S65|535452554354555245535f28292e67656e636f646553747275637473283229636f646553747264656373283429636f646553747275637475726542696e64283329 4921:C3,32|00802b353c4d0017000c0003030b2b362c372a2a69296602054d01030010420e|@4922,I229,@958| 4922:S24|5354525543545f56414c5328292e76614c6f63616c283129 4923:C1,24|00800403002c352d362b56470e0c0004502964420e0e0e0e|@4924| 4924:S65|535452554354555245535f28292e67656e636f646553747275637473283229636f646553747264656373283429636f646553747275637475726542696e64283129 4925:O1|@4926 4926:C5,136|00832d3b4d0080000e0c000303092b3b453b462f4702682d352e362a31692f0e0e0c000229370403002a2d332c4d0157000c00055029352a362b372e352c3b4d0045000e0e0c0003030329020c3b2a0e0e4f023300a000026430362d3b4d0027000c0003030329020c3b2a0e0e4f031700c0000264220e2c452a462e47270c1f040e0e0e0e0e0e0e|@4928,I229,@4925,@4929,@4927| 4927:C3,48|00802b3b4d0028000e0c000303091201000100f8ff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1884,I229,@4927| 4928:S41|535452554354555245535f28292e67656e636f6465537472756374732832296d617050616972283429 4929:C3,48|00802b3b4d0028000e0c000303091201000100f9ff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1884,I229,@4929| 4930:C20,496|00822d3529353c4d00e5010e0e0c000307da29372f363038313a56575667293b4d01cc010e0c0003293c4d02c2010e0e0e0c00032c3b2b4d03b5010e0e0c0004505698293b4d01a7010c000356b8293b3c4d039b010c000450333b4d0191010e0e0c00034d0488010e0c00024d0580010e0c00022935293b4d0674014d0370010e0c0004502a3656f7293b4d0161010e0e0c00032b3b2b4d0355010e0e0c000450220c3b4d0148010e0c0003121300010005002922104d0736010e0e0e0c000312150001000400292309294d0821014d091d010e0e0c00036503064d0a110102044d0b0b012c4d0c06010202fb000e0e0e0c00022b4d0df7004d07f3000c000322142b2b221d121c00010003000c000512190001000100293b4d01d3000c00032b2a3c326b27052a0e0c0002641216000100010012170001000100293b4d01af000c0003293c4d0ea6000e0e0e0c00032c3b2b4d0399000e0e0c000450121a0001000200220f3c4d0285000e0e0c00032a3b2b4d0379000e0e0c000450324d0f6e000e0e0e0c00024d0564000e0c00022935293b22144d0356000e0e0e0c0004502a36121f0001000100293b4d0140000e0c00032b3b2b4d0335000e0e0c0004504d102b002216220d3b6b293b694d111e0022183c3b3b6805293b6922262c452a46222847272302054d120300106444|@4932,I229,I253,I106,I255,@2728,@4919,-1,@344,@7332,@960,@4939,@4942,@2380,@4833,I107,@4945,-4,-5,@4931| 4931:O3|@7141,@228,@4948 4932:S63|535452554354555245535f28292e67656e636f646553747275637473283229636f646553747264656373283429636f646546756e63746f7242696e64283329 4933:O2|@4938,@7268 4934:O2|@4935,@7268 4935:C2,32|00802b3556174d0016000e0e0e0c000303033c0202020202013b420e0e0e0e0e|@954,I251| 4936:O2|@4937,@7268 4937:C1,16|008056072928452e6a64420e0e0e0e0e|@954| 4938:C3,40|00802b3556174d001e000e0e0e0c000303062b3729640202020202054d01080010420e0e0e0e0e0e|@954,I251,@958| 4939:O1|@4940 4940:C2,32|00802b352c362d372e382c2a2d3b2e3c3b3b68084d0008002a692705420e0e0e|@4941,-7| 4941:S25|434f44455452454528292e6d6b4d6163726f50726f63283129 4942:O1|@4943 4943:C3,32|00802b352c362d372e382c2a2d3b2e4d000d003b3b68084d0105002a69270542|@4944,-1,-7| 4944:S20|434f44455452454528292e6d6b50726f63283129 4945:O1|@4946 4946:C3,24|00802b3b4d0010000e0c000303054d010600102b37296442|@4947,I229,@958| 4947:S30|5354525543545f56414c5328292e66756e63746f72416363657373283129 4948:S34|636f646546756e63746f7242696e643a206e6f7420612046756e63746f7242696e64 4949:C1,24|00800403002c352d362b56470e0c0004502964420e0e0e0e|@4950| 4950:S63|535452554354555245535f28292e67656e636f646553747275637473283229636f646553747264656373283429636f646546756e63746f7242696e64283129 4951:C1,32|00802b352c3656280403002a2d2d2c56870c000550292704420e0e0e0e0e0e0e|@4952| 4952:S47|535452554354555245535f28292e67656e636f6465537472756374732832296d617053747264656373283329283129 4953:C1,32|00802b352c3656280403002a2d2d2c56870c000550292704420e0e0e0e0e0e0e|@4952| 4954:C3,48|00802b3b4d0028000e0c000303091201000100f6ff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1884,I229,@4954| 4955:O1|@4956 4956:C28,376|00864d0072012e693c2840314d0168010e0c00043c28403b4d015c010e0c0004332309294d0250014d034c010e0c0003220c2309294d043f014d033b010c0003220e230929293b4d052d010e0e0c000303033b021e29352a362a4d061a010e0e0e0c000203052a68010207292503511e2a3b6564294d07ff000c00024d08f8000e0c0002030d2935294d09eb000c00026402044d0ae1004d0bdd003232312d68054d0cd30033220c306b4d0dca002a22102216220e3368064d0ebc00220c221134303468064d0faf002216694d10a80022172b6a4d11a0002a694d129a0022103022186b040200294d138c0008020029040200294d14800008020029040200294d157400080200294d166c0022172f326b4d1763002218220f6a4d185a002a2c302222221d221f221068084d194900221a2d2f221e221068064d1a3b002210221c221e22242213221b302226222c221b2224220d221a2219680f2225222069293b690402002a222722252c300e0c0005502927201f070e0e|@4958,@4959,I11,@7333,@960,@7334,I229,@4973,I105,I218,@4975,@4977,@4980,@5026,@5042,@5418,@5427,@5434,@5505,@5512,@5524,@5526,@5530,@5535,@5583,@5596,@5624,@4957| 4957:C29,1328|0083210c4d0028054521074d0121054521064d021a05452912050001000c00462c4712050001000a0048564c49564f4a6c502a564846564947564a48564b492a4a314b6c502b564f4656484712050001000d00482b492d4a12050001000c004b12050001000e004c5649240812050001000a00240912050001000b00240a564c240b6c50313b4d03a6040e0e0e0c000303072e3b45314606d7314d0492040e0e0e0c00024d0588040e0c000203063135296402054d067804102936565c4d056f040c000203033c022012060001000b00293b4d075a040e0e0e0c00032b2a4d084e040e0e0e0c00036503033b021231332b12090001000a000e0c0004293b6964344d042b040c00024d0524040e0c000203063435296402054d0914041029350402002a354d0a08044d0304040e0c000303bc2a363b2a293b4d03f4030e0c000303033b021829352a362a0e0e0e4f0bdf03e0000250292503511e233b65643b2c0e4f0ccb03d000024d0dc4032e2a0202b7030e0e0e0c00020402002a22162b121500010001000e0e0e0c00045029352a362e4d049a030e0e0e0c00024d0590030e0c000203332e36293b4d0382030e0e0e0c0003030f2f35292d69220d2a452d46260302114d0e67033069292d69220d2a452d4626035002114d0e53032f69292c69220c2a452c462603260a06cf2a354d0f3c034d0338030e0c0003035c2a362b39293b4d0728030e0c00033b3b2d0e0e4f101b03e000020402002d22152b121400010001000e0e0e0c00045029352a362a3b4d03f9020e0e0c000303032c02103b2d0e0e161100e60215000000000264332a452b46260b06ce2a35404d03cf020c0003039d2a372b382c39293b4d07be020e0e0e0c00030402002c221322132c22120e0e0c00055029352a36040200302b22162c22150e0e0c00055029350402002f22182b121700010001000c00045029352a362a3b4d0375020202ec010e0e0c000303032c02103b2d0e0e1612005e0218000000000264293b4d0351020e0e0c000303033002103b310e0e1613003e0219000000000264220e2a452c46260f06ce2a3528054d0325020e0e0c000303602a363b3b2b0e0e4f141302c000024d150c022d2a020281010e0e0e0c00020402002a22152b121400010001000e0e0e0c00045029352a362a3b4d03e1010e0e0c000303032e02103b2f0e0e161600ce0115000000000264332a452b46260b06db2a353b4d03b7010c0003039f2a362b3729293b4d03a7010c000303033b023229352a362a36293b4d0793010c00032c39293b4d0788010e0c00032b2a4d177e010e0e0e0c0003502d250726061e3b3b2706640402002c221222122c22110202d8000e0e0c00055029352a362d293b4d034c010e0c000303033b022629352a362a36293b4d0737010c0003293b4d172e010e0e0e0c0003502b250526041e303b270464302c452b462608028e2a353e4d030c010e0c0003034f2a373b3b2210692b2a2a3b4d03f7000c0003030329022a2a352b360402002b2d2b02025c000e0e161800da0015000000000450292b2a2506250626041e333b27046529352a362f2b452a46260702322a35280b4d03af000c0003031e2a37293b4d07a2000e0e0e0c00032922102d56e70e0e0e0c000426030207293b45220e465029352a3622104d047b000c00024d0574000e0c00020307221036296402054d196300100402002a2c22122c22110e0c00055029352a362a3b4d0349000e0e0c000303032e02103b2f0e0e161a00360012000000000264293b4d0329000e0e0c000303033302103b340e0e161b0016001300000000026422132a452c46270e661f040e0e0e0e|@5634,@5635,@5667,@5691,I229,I105,I218,@2102,I253,I113,@2102,-7,@5695,@5697,@5718,-9,-15,@5720,@5740,@5741,@5742,@5743,@5751,@5753,@2763,@5754,@2102,@5757,@5633| 4958:S23|50415253455f5452454528292e67656e636f6465283729 4959:C4,48|00805607293b4d0026000e0e0e0c000356272a3c4d0118000e0c00032a3b2b4d020d000e0e0c0004502b2704420e0e0e|@4960,I253,I106,I255| 4960:S32|50415253455f5452454528292e67656e636f64652837296d6b41646472283129 4961:O2|@4966,@7267 4962:O2|@4963,@7267 4963:C2,32|00802b3556174d0016000e0e0e0c000303033c0202020202013b420e0e0e0e0e|@954,I251| 4964:O2|@4965,@7267 4965:C1,16|008056072928452e6a64420e0e0e0e0e|@954| 4966:C3,40|00802b3556174d001e000e0e0e0c000303062b3729640202020202054d01080010420e0e0e0e0e0e|@954,I251,@958| 4967:O2|@4972,@7282 4968:O2|@4969,@7282 4969:C2,32|00802b3556174d0016000e0e0e0c000303033c0202020202013b420e0e0e0e0e|@954,I251| 4970:O2|@4971,@7282 4971:C1,16|008056072928452e6a64420e0e0e0e0e|@954| 4972:C3,40|00802b3556174d001e000e0e0e0c000303062b3729640202020202054d01080010420e0e0e0e0e0e|@954,I251,@958| 4973:O2|@4974,@7335 4974:C2,32|00802b3556174d0016000e0e0e0c000303033c0202020202013b420e0e0e0e0e|@954,I251| 4975:O2|@4976,@7335 4976:C3,40|00802b3556174d001e000e0e0e0c000303062b3729640202020202054d01080010420e0e0e0e0e0e|@954,I251,@958| 4977:O1|@4978 4978:C1,8|00803b420e0e0e0e|@4979| 4979:S24|44454255474745525f28292e6e756c6c4465627567283129 4980:C5,80|00822c352d36562a56394d00420030332c2e3168065658293b334d0132000e0e0e0c0004504d0227002b695677293b4d031d000e0e0c0003642f0e0e0e0c0002293b693f2a2d3b6b2709440e0e0e0e0e|@4982,@4981,I255,-3,I253| 4981:C3,32|00802b561b562a4d0015005649565856674d010b00320e7b090300080e0e0e0e|@4984,@431,@4983| 4982:S38|50415253455f5452454528292e67656e636f6465283729616464446562756743616c6c283329 4983:O2|@4986,@4985 4984:S34|44454255474745525f28292e646562756746756e6374696f6e283129283129283129 4985:O4|I48,-1,@573,@603 4986:C19,440|00862c4d00b1010e0e0c00022d3b2b4d01a5010e0e0c00044d029c012a2a0e0e0e0c00022936294d038d010e0e0c0002294d0483014d057f010c00030325294d0075010e0e0c0002293d4d066a010e0e0e0c00032b3b2b4d075d010e0e0c00046502012929282d4d054d010e0e0c00030325294d0041010e0e0c0002293c4d0636010e0e0e0c00032b3b2b4d0729010e0e0c000465020129040200220e354d0816014d0612010e0e0e0c00030a020056001000320056972a3f452a46510268220e36220f374d09ef002b694d0ae9002b2b4d0be3000c00042d3c452a4626050246220e36220f374d09cd002b694d0ac7002b2b4d0bc1000e0e0c00042d3d452a4626050222220e364d09ac002a694d0aa6004d0ca2002b4d0b9d000e0e0c00042c3e452a46260429352a360412004d0d8600221522156a4d0e7d00221622166a2b4d0f7300454d0f6e00462a474d0f6700484d0f6200494d105d004a4d1058004b4d1053004c4d0f4e0024084d10480024094d114200240a4d113c00240b2b240c4d103300240d4d112d00240e4d102700240f4d11210024104d111b002411502b2e2e22132216342e680627042212220e0e0e0e7d140002|@4988,I223,@4989,@4992,@357,@2173,@4997,I107,@1447,-1,-3,I48,@5003,@2689,@5006,@5011,@5016,@5019,@4987| 4987:O1|@5024 4988:S28|44454255474745525f28292e646562756746756e6374696f6e283729 4989:O1|@4990 4990:C8,144|00822d4d0089000e0e0c000203142b3b4d017c000e0c00034d0274000e0c000202013b03052d3b69025f2b3b2a3b4d035e000e0e0e0c0003030329024b2a3c4d044d000e0e0c00032b304d0542000e0e0e0c0003293c4d0436000e0e0e0c00032928084d0529000e0e0c0003332a4d061e000e0e0e0c0003292f692e2a2508250826061e573b270665440e0e0e0e0e0e|@4991,I105,I251,I218,I229,I240,I239,I252| 4991:S31|4c696272617279537570706f72742e737472696e674578706c6f6465283329 4992:O1|@4993 4993:C5,56|00802b3b4d0030000e0c000303064d01260002202b352c36294d021b000c00020402002c2b2b4d030e000e0e0e0c000450292704420e0e0e|@2610,I229,@333,@4992,@4994| 4994:O1|@4995 4995:C3,88|00822d28284d004f000c00030a010039002b002c35293c4d013d000e0e0c0003030a2d362d3c452a4664020b2d362f2a692e3b452a466564021a2c3628292a692d3c452a4665020c2c3628282a692d3b452a4665440e0e0e|@4996,I107,I229| 4996:S40|44454255474745525f28292e646562756746756e6374696f6e283729636865636b43686172283329 4997:O1|@4998 4998:C9,152|00812b4d0091000e0e0c00022d4d0087000c00022a2a4d017e000e0e0e0c000303722a3c4d0270000e0c0003034a293c4d0264000e0c0003030e2d2f4d0358002f0e0e0e7e060003293c4d044a000e0e0e0c000328082a4d053d000e0e0c0003302a4d0632000e0e0e0c0003302a4d022600320e7e090003292b4d041a000e0e0e0c00032b2a3b32324d070b00330e7b070700063b65430e|@5000,I223,I232,I229,I24,I107,I239,I252,@4999| 4999:O1|@5001 5000:S18|537472696e672e6973537566666978283229 5001:C6,136|00842f3b4d0080000e0c000303033c02742d28084d0170000e0c00032c2a4d0266000e0e0e0c00033028084d0159000e0e0c00032f2a4d024e000e0e0e0c00032b2a4d0042000e0e0e0c0003270403342d3c4d0132000e0e0e0c00032f3c4d0126000e0e0e0c0003313c4d031a000e0e0e0c0003292b2d32324d040b00330e7b070a00063b1f050e|@5002,I229,I239,I252,I240,@4999| 5002:S12|627974654d61746368283529 5003:O1|@5004 5004:C2,24|00824d0012002c692e4d000b002b306b2965440e0e0e0e0e|@5005,-1| 5005:S28|5354525543545f56414c5328292e6d616b65476c6f62616c56283329 5006:C2,24|00802b561856274d000d002e0e0e0e7b050300040e0e0e0e|@5008,@5007| 5007:O1|@5009 5008:S42|44454255474745525f28292e6d616b6553706163652833296c6f6f6b757056616c756573283129283129 5009:C11,352|00822c4d0059010e0e0c00024d0150010e0c000207d32c3529354d0242014d033e010e0e0e0c00030a03001b0008007000cc002d362f2a2f4d042401300e0e7b0507000406d929362a372f362f4d000f010c00024d0108010e0c000203392f3530362d344d05f8000e0c000303184d06ee002b692e2e2b4d07e5000e0e0c000429680165020e332c2b4d04d300340e7b050b00046502013b6602bf29362a372f362f4d00ba000e0e0e0c00024d01b0000e0c0002033d2f3530362d344d05a0000e0c000303194d0696002b69294d088f000c00022f3b2b316b296801660211332c2b4d047a0034020272007b050b00046502013b66026329362a372b383036304d005c000e0c00024d0154000e0c00020345303531362e220c4d054300020239000c000303204d0636002b694d0830000e0c00022f2f2f2c4d0924000e0c000529680165020e342c2b4d041300220c7b050c00046502013b27046402013b440e|@5010,I105,I218,-2,I107,@5007,I24,-3,@5003,@4669,@4667| 5010:S39|44454255474745525f28292e6d616b6553706163652833296c6f6f6b757056616c756573283329 5011:C2,24|0080560856172a2a4d000c002f0e0e0e7e0500030e0e0e0e|@5013,@5012| 5012:O1|@5014 5013:S27|44454255474745525f28292e6d616b655370616365283329283129 5014:C10,304|00812c4d0029010e0e0c00024d0120010e0c000207cd2c3529354d0212014d030e010e0e0e0c00030a0300170008005d00a9002d36292e4d04f5002f7e06000306cc29362a372f362f4d00e3000c00024d01dc000e0c0002032a2f3530364d05ce002b692e2e2b4d06c5000e0e0c00042f2a692e2d4d04b7000c00032a2a6929270702013b6602a329362a372f362f4d009d000e0e0c00024d0194000e0c0002032e2f3530364d0586002b69294d077f000c00022f3b2b316b302a692f2e4d046e000e0e0e0c00032a2a6929270802013b66025729362a372b383036304d004f00020249000c00024d0144000e0c00020336303531364d0536002b694d0730000e0c00022f2f2f2c4d08240002021b000e0c0005302a692e2d4d0413000c00032a2a6929270702013b27046402013b43|@5015,I105,I218,-2,I107,@5012,-3,@5003,@4669,@4667| 5015:S36|44454255474745525f28292e6d616b655370616365283329616c6c56616c756573283229 5016:O1|@5017 5017:C1,8|00803b420e0e0e0e|@5018| 5018:S35|44454255474745525f28292e6d616b655370616365283329616c6c456d707479283129 5019:O1|@5020 5020:C2,8|00804d000200100e|@5022,@5021| 5021:O3|103,@373,@5023 5022:S34|44454255474745525f28292e6d616b6553706163652833296e6f456e746572283129 5023:S29|43616e6e6f74207570646174652074686973206e616d65207370616365 5024:C1,8|00803b420e0e0e0e|@5025| 5025:S33|44454255474745525f28292e6d616b6553706163652833296e6f4c6f6f6b283129 5026:C12,280|00832d352e3656294d000c010e0c000203092d3b452b462a4706cf5627293b4d01f5000e0e0c0003642a0e0e0e0c0002293b69302a69402a692a293b4d02d8000e0c000303033c021f293529354d03c7004d02c3000c0003030c2a36292503511e263b6402013b64640312294d04a8000e0c00024d03a0002a696402012956785687293b4d0190000e0c00030402002d2d2c2c4d0581000e0e0c00055029352a3622124d0671000e0e0c00022936293b4d0264000e0c0003030b2a352b383b2b2b6a650240294d074e000e0e0e0c00020321294d0841000e0e0c00022b352c382a2a2d6a4d093000020227000e0c00026602122a352b382a2a694d0a1a000e0e0e0c0002652922106922132f452a462e47270f651f040e0e|@5028,I218,I253,I229,-3,@3353,@5029,@3005,@2680,@2683,@5037,@5027| 5027:O1|@5040 5028:S42|50415253455f5452454528292e67656e636f64652837296372656174654465627567456e747279283429 5029:O1|@5030 5030:C8,112|00832e354d0068004d0164000e0c0003030e4d025a002f692c3b452a466402492e354d034a004d0146000e0e0e0c000303162e362f384d04360031302c2e68052e3b452a466602213b2e0e0e0e0c00024d051c002e2b6a4d0615002b323b6b293b692f2a452c4627041f040e0e0e0e0e|@5032,-3,I229,@5033,-5,@5035,@5031,-4| 5031:C3,32|0080560856172d2a4d0014000e0c00034d010c002c3c2c3b680566420e0e0e0e|@5036,I107,-5| 5032:S26|434f44455452454528292e6d756c7469706c6555736573283429 5033:C1,8|00805607420e0e0e|@5034| 5034:S29|434f44455452454528292e6d756c7469706c6555736573283429283129 5035:C5,72|008056082c2a4d003e000e0e0e0c000364030456070229560a561956282e2a4d0125000e0e0c00032b2a4d021a000e0e0e0c00034d0310002e3c2c3b68052705420e0e0e0e0e0e0e|@5036,I113,I107,I106,-5| 5036:S35|434f44455452454528292e6d756c7469706c65557365732834296c6f6164466e283129 5037:O1|@5038 5038:C1,16|00802b352c362d373c2c2c2c6b66420e|@5039| 5039:S10|456e7656436f6e737472 5040:C2,16|00802b352c364d0006002b2b6a65420e|@5041,-2| 5041:S8|456e7656616c7565 5042:C3,80|0082560b03413b3b2e692d302b2a3b4d003d000e0e0c000303032902222a352b360402002b2d2b0e0e4f012300a0000450292b2a2506250626041e2d3b2704650802003b6502052b3b452d46440e0e0e|@5044,I229,@5043| 5043:C6,112|00822c352d36572a293b4d0062000e0e0e0c0003314d0157000c000257595768342d2d2d2d4d0247000c0006040300220d312c2c57d70e0e0e0c00055029352a362b372b3b4d0327000c0003030334020c3b220c0e4f041700d00002642b2b6922102b452a46270e440e0e0e0e0e0e0e|@5046,I253,@2667,@5047,I229,@5045| 5044:S42|50415253455f5452454528292e67656e636f64652837296d616b654465627567456e7472696573283329 5045:C3,48|00802b3b4d0028000e0c000303091201000100f5ff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1884,I229,@5045| 5046:S52|50415253455f5452454528292e67656e636f64652837296d616b654465627567456e74726965732833296c6f6164566172283329 5047:O4|@5049,@5248,@5250,@5048 5048:O2|@5252,@5047 5049:C49,1400|00842f37294d006f050c0002030e294d0165050e0e0c0002296406d829353c4d0255050e0e0c0003036329362a372a3b4d0344050e0c00032a3b4d033a050e0e0e0c0003332a4d042e050e0e0e0c00030405002c3b4d021f050c0003031b2a3c4d0414050e0c00032a4d050b05453b463b472a483b4951020f294d05fa04452d463c472b483b495029270606d2294d06e6040e0e0e0c0002037b294d07d9040e0e0c000229352a36294d08cb040c000203064d09c2040215294d0abb040c000229344d0bb2040e0e0e0c000364293528054d02a3040c0003030e2b2a4d0c9804320e0e0e7e0c000329354d0d8a044d02860402027e040e0e0e0c0003030e2b2a4d0c7404320e0e0e7e0c000328062a2d6a270406ce29353b4d025c040e0c000303054d0e520410294d0f4c040e0c00020402002a4d1040040e0c000207dc304d1135040e0e0c0002030e304d1229040e0e0c00023c6402013b4d131b04020213040c000203064d140e040221304d1107040c0002030e304d12fd030e0e0c0002296402054d15f0031029352965302309294d16e3034d17df030c0003322309294d18d4034d17d0030e0c00035688220c230929293b4d02bf030c000303033b021a29352a362a2e0e0e0c000203052a68010207292503511e243b6564294d19970302028f030c00024d138c030e0c0002030d29352956d70e0e0c00026402044d1a75034d1b71032a2f32220c6805334d0d6503452a46260b06dd00002a4d1c57030c00020370304d114d030e0e0c0002034e304d1241030e0e0c00022935294d1d35030e0e0c0002032f294d1e29030e0e0c00022936294d191d030e0e0c00024d1314030e0c0002030829352936296502044d1402036502044d14fb026502044d14f4024d1ff0022a692b4d0de902452a46260306d32a4d20dd020e0e0c000203b4304d11d1020e0e0c0002030e304d12c5020e0e0c00023c6402013b4d13b7020c000203064d14ae020221304d11a7020c0002030e304d129d020e0e0c0002296402054d1590021029352965564831230929293b020279024d027b020c000303033b021a29352a362a2e0e0e0c000203052a68010207292503511e283b6564294d1953020c00024d134c020e0c0002030d29352956970e0e0c00026402044d1a35024d2131022a2f6a2f4d0d2902452a46260706d32a4d221d020e0e0c00020374304d111102020207020e0e0c0002034e304d1201020e0e0c00022935294d1df5010e0e0c0002032f294d1ee9010e0e0c00022936294d19dd010e0e0c00024d13d4010e0c0002030829352936296502044d14c2016502044d14bb016502044d14b4014d23b0012a692b4d0da901452a46260306d62a4d249d010e0e0c000207cc040200314d118e010e0e0e0c000207d0314d1281010e0e0c00022935294d1175010e0e0c000207ca294d1269010e0e0c00022936294d115d010e0e0c000207dd294d125101020247010e0e0c00022936294d1141010e0e0c000203ca294d1235010e0e0c000229352a36294d1127010c000203a2294d121d010e0e0c000229352929353e4d020e010e0e0e0c0003032e29362a372a2a4d25fc000e0c000329354d26f2004d02ee000e0e0e0c000303032c020829250426031e373b66020129642d29353e4d02ce000204c40098000e0c0003033629362a372a2a4d25b800020265000e0c000329354d26aa004d02a600020248000e0e0e0c000303032c020829250426031e433b6602012964220d2b452a462605020c324d277b0002021200080200260302082f4d286b000802005102082d4d2960000802005102082b4d2a5500080200510208294d2b4a0008020029352a364d2c3f002b2b6a2d4d0d3700452a462605022a324d2d2b003333333356990e0e0c0007294d2e1b003c3b3c4d2614003b3b68082b4d2f0b00452a4626032965641f050e|@5051,@2759,@2749,I229,I253,I107,-5,@5052,@5054,@2365,@431,@2728,@5056,@3342,-3,@5061,@2780,@5063,@2107,@2109,I218,@633,@958,@7336,@960,@7337,I105,@5078,@5116,@5174,@2049,@2051,@5177,@5178,@5181,@5198,@5201,@5207,@2043,-1,@5210,@5210,@5210,@5210,@5210,@5050,@465,I48,-7| 5050:C4,32|00803b4d0019002d6956270e0e4f010f00200002292b4d020600300e7e060003|@5212,@5213,@5215,@5211| 5051:S22|56414c55455f4f505328292e636f646556616c283529 5052:O1|@5053 5053:C2,16|00803d2c354d0007002d0e0e7e030003|@2999,I229| 5054:O1|@5055 5055:C1,16|00802b362c372a2a6965420e0e0e0e0e|@2999| 5056:O1|@5057 5057:C16,288|00812c4d0019010e0e0c0002030e2c4d010d010e0e0c0002296406d82c353c4d02fd000e0e0c000303632c362d372a3b4d03ec000e0c00032a3b4d03e2000e0e0e0c00032f2a4d04d6000e0e0e0c00030405002c3b4d02c7000c0003031b2a3c4d04bc000e0c00032a4d05b300453b463b472a483b4951020f294d05a200452d463c472b483b4950292706028d2c4d068e000e0e0e0c0002037b2c4d0781000e0e0c000229352a36294d0873000c000203064d096a000215294d0a63000c000229304d0b5a000e0e0e0c000364293528054d024b000c0003030e2b2a4d0c4000310e0e0e7e08000329354d0d32004d022e00020224000e0e0e0c0003030e2b2a4d0c1c00310e0e0e7e08000328062a2d6a270402054d0e070010430e0e0e0e0e|@5059,@2759,@2749,I229,I253,I107,-5,@5052,@5054,@2365,@431,@2728,@5056,@3342,-3,@5058| 5058:O3|@7141,@228,@5060 5059:S25|56414c55455f4f505328292e636f6465416363657373283229 5060:S9|4e6f20616363657373 5061:O3|@7141,@228,@5062 5062:S16|636f646556616c202d20466f726d616c 5063:O1|@5064 5064:C2,16|00803e2c4d0008002d0e0e0e7e030003|@5065,I229| 5065:S5|5072696e74 5066:O2|@5071,@7278 5067:O2|@5068,@7278 5068:C2,32|00802b3556174d0016000e0e0e0c000303033c0202020202013b420e0e0e0e0e|@954,I251| 5069:O2|@5070,@7278 5070:C1,16|008056072928452e6a64420e0e0e0e0e|@954| 5071:C3,40|00802b3556174d001e000e0e0e0c000303062b3729640202020202054d01080010420e0e0e0e0e0e|@954,I251,@958| 5072:O2|@5077,@7283 5073:O2|@5074,@7283 5074:C2,32|00802b3556174d0016000e0e0e0c000303033c0202020202013b420e0e0e0e0e|@954,I251| 5075:O2|@5076,@7283 5076:C1,16|008056072928452e6a64420e0e0e0e0e|@954| 5077:C3,40|00802b3556174d001e000e0e0e0c000303062b3729640202020202054d01080010420e0e0e0e0e0e|@954,I251,@958| 5078:O18|@5080,@5083,@5085,@5087,@5089,@5091,@5093,@5095,@5097,@5099,@5101,@5103,@5105,@5107,@5109,@5111,@5113,@5079 5079:O1|@5115 5080:O1|@5081 5081:C1,8|00803b420e0e0e0e|@5082| 5082:S31|56414c55455f4f505328292e6e756c6c456e7669726f6e6d656e742d283129 5083:O1|@5084 5084:C1,8|00803b420e0e0e0e|@5082| 5085:O1|@5086 5086:C1,8|00803b420e0e0e0e|@5082| 5087:O1|@5088 5088:C1,8|00803b420e0e0e0e|@5082| 5089:O1|@5090 5090:C1,8|00803b420e0e0e0e|@5082| 5091:O1|@5092 5092:C1,8|00803b420e0e0e0e|@5082| 5093:O1|@5094 5094:C1,8|00803b420e0e0e0e|@5082| 5095:O1|@5096 5096:C1,8|00803b420e0e0e0e|@5082| 5097:O1|@5098 5098:C1,8|00803b420e0e0e0e|@5082| 5099:O1|@5100 5100:C1,8|00803b420e0e0e0e|@5082| 5101:O1|@5102 5102:C1,8|00803b420e0e0e0e|@5082| 5103:O1|@5104 5104:C1,8|00803b420e0e0e0e|@5082| 5105:O1|@5106 5106:C1,8|00803b420e0e0e0e|@5082| 5107:O1|@5108 5108:C1,8|00803b420e0e0e0e|@5082| 5109:O1|@5110 5110:C1,8|00803b420e0e0e0e|@5082| 5111:O1|@5112 5112:C1,8|00803b420e0e0e0e|@5082| 5113:O1|@5114 5114:C1,8|00803b420e0e0e0e|@5082| 5115:C1,8|00803b420e0e0e0e|@5082| 5116:C3,56|0080560a3b56290e0e0c00025628040700284d2b2b4d001f000c000450295657312f2f2d2d4d010f000c000650312706420e0e0e0e0e0e0e|@5118,@271,@5117| 5117:O1|@5119 5118:S34|56414c55455f4f505328292e636f646556616c2835297072696e7450726f63283129 5119:C5,48|00844d002a002c692c230a4d0121002f694d021b00302d2c2e68053333334d030e003b2e340e0e7b070b00060e0e0e0e|@5121,@5122,@5141,@5120,-1| 5120:C51,1280|00843b3b2d293b4d00f5040e0e0c000303033b021c29352a36342b4d01e1040e0e0c000303033c0207292503511e283b65640310562729384d02c4042a300e0e7d0b000230353e4d00b5040e0e0c0003033e303631372a2a4d03a4040e0c000329354d049a044d0096040e0e0e0c0003030e56572938283f2a330e0e7d0e0002342a34343433220c0e0e0e7b070c0006304d056b040c000207cf304d0661040e0e0c000229352a37294d0753040c0002294d084b040c00024d0944040e0c0002030e56672938283f2a340e0e7d0f0002294d082b040c00024d0a24044d0820040e0c00022a2a4d0b16040e0e0e0c0003650311566729384d0c05042a340e0e0e7d0f0002294d08f7030c00024d0df0034d08ec030e0c00022a2a4d0be2030e0e0e0c00036503cc220c4d0ed3030c000203054d0fca0310220c293c4d10c1030e0e0c0003220e4d0eb6030e0e0e0c000203054d11aa0310220e293b4d10a1030e0e0c000364569802025c020e0e0c0002294d0e8b030c00024d1284030e0c000203622935294d1377030c000229354d046e034d006a030e0e0e0c0003030e56b729382e2a22100e0e7d14000222114d0e4e030e0e0e0c000203054d144203102211293d4d1039030e0e0c000322132210692f2d2c2c16150026031300000000052705020c569729382c2a220e7d1200026606cc2b3b4d0007030c000303064d16fe02027c2b36293b4d00f4020e0c000303172c354d17e80232220c22112d68054d18dc022a696502563b2d0e0e4f19cf02800002402a692a293b4d00c2020e0e0e0c000303033c021f293529354d18af024d00ab020c0003030c2a36292503511e283b6402013b64640312294d1a90020e0c00024d1888022a6964020129666478767f280b2d4d0876020e0e0e0c00024d1b6c023b4d1067020c000329293b4d005d020e0e0c000303054d1c520210293529352a362c362b304d0b4302020202010c000303032a020829250526041e313b270556d72a0e0e0e0c00026422112a0e0c0002642f4d1d16020e0e0e0c00022a0c00026422132a0e0c00026605c30e0e0e00ff6d2935280b4d00f3010c000303a92b4d1ee9010e0e0c00023b2a4d00de010e0e0e0c0003644d12d3010c000203192b4d1ec9010e0e0c0002292f0e0e0e4f1fbb01a0000364026e2b4d20b0010e0c00024d04a8012a354d00a2010e0e0e0c0003644d1297010c0002033e2b4d208d010e0e0c00022c4d2183010c000229304d227a010e0e0e0c00032b2a3c4d236d010e0e0c000422122a22122212221222110e0e0c00062704020d56872938283f2a0e0e0c00026502020202020229106464270406cf304d2434010e0c0002031a304d2529010e0e0c0002563729384d261c012a310e0e7d0c0002304d270f010c000207d0304d2805010e0e0c00022936313b4d29f8000e0c0003030e564729384d2aea002a327d0d0002324d2bdf000c0002035656472923064d2cd1002a0e0c0002515657293828282a0e0c0002514d2dbb0030336a293b220f2f282c4d04ad004d04a900221256f90e0e0c0009505677293828292a0e0c000251568729373b2a220d0e0e0e7d11000256472923064d2e7b002a0e0e0e0c00025156572938287b2a020260000e0c0002514d2f5f00567731346b4d3056002a69293b221030282c4d0449004d044500221312110001000300020220000e0c00095056872938287d2a0e0c000251569729373b2a220e0e0e0e7d120002562729384d3110002a300e0e7d0b0002651f050e0e0e0e0e|@5144,I229,I251,@1364,@2043,-1,@2073,@2075,@2077,@1482,@1485,@605,@2453,@2173,@522,I105,@398,I253,@398,I218,@2667,@398,@5145,@501,@5158,-3,@5160,@3353,@7338,@52,@5129,@2501,@5162,@2420,@2435,@2462,@2465,@2107,@2109,@1205,@2049,@2051,I232,@1364,@5166,@2124,@5169,@2124,@5171,@5173,@5143| 5121:S26|56414c55455f4f505328292e7072696e74537472756374283529 5122:C3,120|0080560729373b2a0e0c00026456272923083b2a0e0c0002643b2c293b4d0057000c000303032a0216293529362b362a2e69292b2506250626041e1f3b2704653b2b293b4d0030000e0c000303032a0216293529362b362a2e69292b2506250626041e203b270465312b2b4d010900340e0e0e7b05090004|@5124,I229,@5123| 5123:O1|@5125 5124:S44|56414c55455f4f505328292e7072696e74537472756374283529657863657074696f6e536561726368283129 5125:C13,240|00823b3b2e293b4d00e5000e0e0c000303033b022929352a362a3b0e0e4f01cf00600003293b4d00c6000e0e0e0c0003030a2a250426031e323b0201296664294d02ac000e0c00024d03a4000e0c000203032902972e293b4d0094000e0c000303033b028629352a362a4d0482000e0e0e0c0002294d0577000c00020351294d066d000e0e0c00022c3b4d0062000e0e0e0c00030316404d0755000e0e0c0002294d084b003b3b6b296502042c3729644d093c000e0c00022a4d0a33000c00022a2a0e0e0e4f0b2700b000036602013b293b4d001a000e0e0e0c0003030a2b250526041e8d3b02012927046466440e0e|@5127,I229,@5128,I105,I218,@2728,@2759,@2749,@1893,I48,@2412,@5129,@5126| 5126:C5,88|00812c4d0051000e0e0c00024d0148002a2a0e0e0e0c00023b2a293b4d0238000e0c000303033b022929352a362a352b364f032300800003293b4d021a000e0e0e0c0003030a2a250426031e313b020129662705430e0e0e|@5136,@2509,@5137,I229,@5135| 5127:S28|56414c55455f4f505328292e66696e64457863657074696f6e283329 5128:C10,168|00812c36293b4d009e000e0e0e0c0003038f2d37294d018f000c0002032a294d0285000e0e0c0002294d037b000c000256492a2a4d0470000e0c00036503052f680102013b64025629353b4d0059000e0e0c0003034729362e4d054b000c000203054d064200102e2a4d053b000c000203032a02054d072f00102a2a4d0828000e0c000356692a2a4d041c000e0c0003270403052f680102013b6402013b6402013b64430e0e0e0e|@5130,I229,@2759,@2749,@5129,I251,I105,@398,@395,I253| 5129:O1|@5131 5130:S40|56414c55455f4f505328292e66696e64457863657074696f6e2833297465737456616c7565283229 5131:C6,112|00802b354d0068004d0164000e0c000303062b36296402512b3528054d0150000e0c0003033e2b3629354d0242004d013e000e0e0e0c00030308293629372965021629353c4d0127000c00030306293729640204293629644d0314002d0e0e0e7d0400024d04080010420e0e0e0e0e0e|@5133,-3,I229,-1,@5129,@5132| 5132:O3|@7141,@228,@5134 5133:S20|434f44455452454528292e6576616c7565283129 5134:S22|6576616c75653a204e6f74206120636f6e7374616e74 5135:C19,304|00812b4d0029010e0e0c0002031956072c4d011b010c0002292b0e0e0e4f020f013200036506d42b4d0304010e0c000207cb2b4d04f9000e0e0c0002294d05ef000c0002294d06e7000c00020351294d07dd000e0e0c00022b3b4d08d2000e0e0e0c00030316404d09c5000e0e0c0002294d0abb003b3b6b296502042b3729644d0bac000e0c00022a4d0ca3000c00022a2a0e0e0e4f0d970062000366028a29353b4d088a000e0e0e0c0003037a29362b3b4d087a000e0e0e0c00030316404d096d000e0e0c0002294d0a63003b3b6b296502042b3729644d0b54000e0c00025647294d0e49000e0e0c000203054d0f3e0010292c4d0e3700020430002d000e0e0c000203032c02054d102300102a2a4d111c000e0c00032d2a0e0e0e4f0d0f00920003270602013b6502013b430e0e|@5140,@2354,@2353,@5128,@2336,@2335,@2728,@2759,@2749,I229,@1893,I48,@2412,@5129,@5126,I105,@398,@395,I253| 5136:S42|56414c55455f4f505328292e66696e64457863657074696f6e2833297365617263685370616365283229 5137:O1|@5138 5138:C2,48|00802b37296403202b363b2a0e0c00022d353b2a0e0c0002644d0013000c00022a2a6929270402013b420e0e0e0e0e0e|@5139,@5137| 5139:S16|4d6973632e697465724c697374283129 5140:S53|56414c55455f4f505328292e66696e64457863657074696f6e283329736561726368537061636528322966696e644974656d283229 5141:C16,328|00872f3b4d0040010e0c000303033b06d82f36293b4d002f010c000303563035333b4d0022010e0e0e0c0003030e322a2f316b220c2e0e0e7d0c0002324d0107010c000203054d02fe001032344d01f7000c000203033402054d03eb00102a2a4d04e4000e0c0003292d32346b220f317d0f000230352d3b4d05cc000e0c0003030e562729384d06be002a307d0e0002324d01b3000c000203054d07aa001032344d01a3000c000203033402054d089700102a2a4d0490000e0c0003292d32220c6b220f0e0c00025033282c4d0978000e0c00034d0a70000e0c00020316565729354d0b62002a020255000e0e0c0002260302023b5056572938220c2a0c000251566729354d0c3f002a0e0e0e0c000251220f3c4d0d30000e0c0003333c4d0e26000e0e0e0c000322122b22123422122212221230221122130e0e7b0a1300091f080e0e0e0e0e0e|@5142,I229,I105,@398,@395,I253,I232,@1364,@398,@395,I24,I218,@329,@329,I106,I107| 5142:S33|56414c55455f4f505328292e7072696e7453747275637428352970566563283829 5143:S7|3c656d7074793e 5144:S35|56414c55455f4f505328292e7072696e745374727563742835297072696e7473283529 5145:C16,616|00832e571a0c0002294d005b020c00024d0154020e0c000203062935296402044d0244023b57372923064d033a022a0e0e0c0002513b2c354d042c024d0528020e0c00030a0100110110000e0e4f0617024000015006cb2c36334d070a020e0e0e0c000207cc334d08fd010e0e0c00022936294d00f1010e0e0c00024d01e8010e0c000203ba2935293528312a4d09d7010c0003039a2b36294d00cb010c00024d01c4010e0c000203762935293528322a4d09b3010c0003035a2b36293b4d0aa6010e0e0e0c0003033e56e8322a4d0b96010e0e0e0c00034d0c8c01121200020003001213000100ffff2215220e221a220e221a6808292b0e160d006a01140000000003260402090e4f065b01d00001505002090e4f064f01c000015051020d020232010e4f063f01a000015050020d020218000e4f062f01900001505102090e4f062301700001505102090e4f061701500001505006ca2c36334d0709010e0e0c000207cc334d08fd000e0e0c00022936294d00f1000e0e0c00024d01e8000e0c000203ba2935293528312a4d09d7000c0003039a2b36294d00cb000c00024d01c4000e0c000203762935293528322a4d09b3000c0003035a2b36293b4d0aa6000e0e0e0c0003033e56e8322a4d0b96000e0e0e0c00034d0e8c00121200020003001213000100ffff2215220e221a220e221a6808292b0e160d006a00140000000003260402090e4f065b00d00001505002090e4f064f00c000015051020d020232000e4f063f00a000015050020d020218000e4f062f00900001505102090e4f062300700001505102090e4f0617005000015050575729373b2a330e0e0e7d0d00020e0e0e0e|@5147,I105,I218,@210,@347,-1,I107,@5148,@2049,@2051,I24,I229,I234,@5154,@5149,@5146| 5146:C3,56|0080560d561c562b563a293c4d0028000e0c0003565a4d011e00567856896a293b3131313030221056f722110e0e0e7b0a0a00090e0e0e0e|@5152,I106,@5157| 5147:S50|56414c55455f4f505328292e7072696e745374727563742835297072696e74732835297072696e74496e6669786564283429 5148:C4,56|007f5708291be7034d002c000e0c00034d01240057355647565956685877568a56936808292b0e0e0e4f020b0041000366410e0e0e0e0e0e|@5150,I113,@5151,@5149| 5149:C5,104|00812b3c4d0060000e0c000303525709293c4d0152000e0e0e0c0003640311580729384d0241002a2e0e0e0e7d0600025807293828282a0e0e0c0002515719293c4d0323000c0003642e0e0e0e0c0002505817293828292a2f0e0e0e7d07000257092d2c7d040002|@5153,I229,I232,@1364,I107| 5150:S52|56414c55455f4f505328292e7072696e745374727563742835297072696e74732835297072696e74496e66697865642834292f33 5151:C5,104|0080560d29353c4d005d000e0e0c000303043b500220561b29384d014a002a0e0e0c000251562b29354d023b002a0e0e0e0c00022604561b2938563c2a0c000251562b29354d031f002a0e0e0e0c000251563a564956582b2b331be7032d56b7220d0e7b07090006|@5152,I229,@1223,@329,@329| 5152:S53|56414c55455f4f505328292e7072696e745374727563742835297072696e74732835297072696e74496e6669786564283429283129 5153:S68|56414c55455f4f505328292e7072696e745374727563742835297072696e74732835297072696e74496e66697865642834296d6179506172656e74686573697365283229 5154:C3,56|0080560d561c562b563a564a293c4d0026000e0e0e0c00034d011c00567856896a293b3131313130221056f722110e7b0a0a00090e0e0e0e|@5152,I106,@5155| 5155:C1,32|00802b352c362d372e382b3656582e2b2e2e2d56b7220d7b070900060e0e0e0e|@5156| 5156:S56|56414c55455f4f505328292e7072696e745374727563742835297072696e74732835297072696e74496e6669786564283429283129283129 5157:C1,32|00802b352c362d372e382b3656582e2b2e2e2d56b7220d7b070900060e0e0e0e|@5156| 5158:C2,32|00802b352c36562a563956482a2a692e2d2f4d000a002d56b7220d7b07090006|@5159,-1| 5159:S56|56414c55455f4f505328292e7072696e745374727563742835297072696e74732835296d616b654172672831297072696e74417267283129 5160:C5,56|00802b3b4d0030000e0c000303033b02252b352c364d011f0056355647565b2e68054d0212002a692b4f030b004100022a2a69292706420e|@436,I229,@5161,-3,@5160| 5161:C2,32|00802b352c36562a563956482a2a692e2d2f4d000a002d56b7220d7b07090006|@5159,-1| 5162:C18,320|00812c3b4d0038010e0c000303054d012e01102c352936294d0224010e0c000207dd294d0319010e0e0c00022b37294d040d010e0e0c000207d1294d0501010e0e0c00022d352e3833362c4d06f1000e0e0c0002294d07e7000c000203054d08de001029293b4d09d6000e0e0e0c000356bb2a0e0e0c0002294d0ac3000c0002030c2d220f4f0bb700d10003028c32030f57c72938312a22110e0e0e7d12000256c9293b4d0c98000e0c000364031157c729384d0d89002a22110e0e7d1200022b3d4d097a000e0e0e0c000356db2a0e0e0c00023022114d0e65000e0e0c000356fb2b2a4d0f58000e0c000364030456f7021256fb121100010001002a02022e002a692966332b2d2c020211001610002e0015000100000527042708020e57472938283f2a320e0e7d0a000265020d57272938283f2a300e7d08000265430e0e|@5164,I229,@5163,@2680,@2683,@2759,@2749,@5129,I105,@398,I253,I218,@5162,I232,@1364,@3278,I251,@5145| 5163:O3|@7141,@228,@5165 5164:S55|56414c55455f4f505328292e7072696e745374727563742835297072696e74732835297072696e74436f6e737472756374696f6e283229 5165:S12|6e6f6e65206d617463686573 5166:O1|@5167 5167:C8,128|00802b4d0079000e0e0c0002036d2b4d016d000e0e0c00022935293c4d0260000e0c000303512a363c2a293b4d0250000e0c000303033c023b293529352b362d4d033c004d0438000e0c00032b2a4d052e000e0e0e0c00036403172d3c4d061f000c0003292b2506250626041e423b6402013b666602013b6502013b420e0e0e|@5168,@2049,@2051,I229,-1,@355,I24,I106| 5168:S28|56414c55455f4f505328292e697350726f6475637454797065283129 5169:C1,32|00802b352c362d372e382b3656582e2b2e2e2d56b7220d7b070900060e0e0e0e|@5170| 5170:S38|56414c55455f4f505328292e7072696e745374727563742835297072696e7473283529283129 5171:C7,104|00832d352e3656272923064d0059002a0e0c000251563729382d4d014a004d0246000e0e0e0c00032a0c000251564729354d0333002a0e0e0e0c000251313c4d0425000e0e0c00035669220c2f2c4d0516002d56c80c000650567729373b2a220c0e0e0e7d0f0002|@5172,@333,@2006,@344,@329,I107,-1| 5172:S38|56414c55455f4f505328292e7072696e745374727563742835297072696e7473283529283429 5173:C1,24|00802b352c362d372e3856472f0e0e7b060300050e0e0e0e|@5170| 5174:O1|@5175 5175:C3,16|00804d000a002c4d0105002d7e030003|@5176,-4,I229| 5176:S10|5072696e745370616365 5177:C3,48|00802b352c362d372e385647040700284d2d2b4d0019000e0e0c000450292f2c2e2c324d010900220e0e0e7b070a0006|@5118,@271,@5117| 5178:O1|@5179 5179:C3,16|00804d000a002c4d0105002d7e030003|@5180,-2,I229| 5180:S10|4d616b65537472696e67 5181:C12,96|00803c28404d0057004d0153000c00044d024c002a690407004d0343004d043f002d692b2a454d053600464d063100472d484d072a00494d0825004a2b4b502b56685677332b1b10272e2d4d0911000e0e0c0006313b4d0a0600220d7e0c0003|@5183,I48,I11,@5184,@5186,@5189,@5191,@5193,@5195,@5182,@5117,I253| 5182:O1|@5197 5183:S35|56414c55455f4f505328292e636f646556616c2835296d616b65537472696e67283129 5184:C4,48|008056075617293b4d0024000e0c0003292f4d011a000e0e0e0c00032c3b2b4d020d000e0e0c0004503b2704420e0e0e|@5185,I253,@344,I255| 5185:S41|56414c55455f4f505328292e636f646556616c2835296d616b65537472696e6728312970702d283129 5186:O1|@5187 5187:C1,8|00803b420e0e0e0e|@5188| 5188:S29|5072657474795072696e7465722e75676c795072696e74283229283129 5189:C6,88|00802b3529293b4d004d000e0e0c000303033b023d56275637293b4d0139000e0e0c00032928204d022d000e0e0c00032c3b2b4d0321000e0e0c0004502d3c4d0415000e0e0c000329250626051e483b270565420e0e0e0e|@5190,I232,I253,@344,I255,I107| 5190:S34|5072657474795072696e7465722e75676c795072696e74283229627265616b283129 5191:O1|@5192 5192:C1,8|00803c420e0e0e0e|@5188| 5193:O1|@5194 5194:C1,8|00803b420e0e0e0e|@5188| 5195:O1|@5196 5196:C1,8|00803b420e0e0e0e|@5188| 5197:C1,8|00803b420e0e0e0e|@5188| 5198:O1|@5199 5199:C2,16|00803d2c4d0008002d0e0e0e7e030003|@5200,I229| 5200:S15|4d616b65537472696e675370616365 5201:C12,96|00802b352c363c28404d0053004d014f000c00044d0248002a690407004d033f004d043b002d692b2a454d053200464d062d00472d484d072600494d0821004a2b4b502b5687312a1b10272d344d090f000c0006303b4d0a0600220e7e0d0003|@5118,I48,I11,@5203,@5205,@5202,@5191,@5193,@5195,@5182,@5117,I253| 5202:C6,88|00802b3529293b4d004d000e0e0c000303033b023d56275637293b4d0139000e0e0c00032928204d022d000e0e0c00032c3b2b4d0321000e0e0c0004502d3c4d0415000e0e0c000329250626051e483b270565420e0e0e0e|@5190,I232,I253,@344,I255,I107| 5203:C4,48|008056075617293b4d0024000e0c0003292f4d011a000e0e0e0c00032c3b2b4d020d000e0e0c0004503b2704420e0e0e|@5204,I253,@344,I255| 5204:S40|56414c55455f4f505328292e636f646556616c2835297072696e7450726f6328332970702d283129 5205:O1|@5206 5206:C1,8|00803b420e0e0e0e|@5188| 5207:O1|@5208 5208:C2,16|00803c2c4d0008002d0e0e0e7e030003|@5209,I229| 5209:S9|496e7374616c6c5050 5210:O2|@633,@633 5211:O2|@5244,@7338 5212:S34|56414c55455f4f505328292e636f646556616c283529696e7374616c6c5070283129 5213:C1,24|00802b382c23062d352e372c2c2c2c6b5657300e7d070002|@5214| 5214:S42|56414c55455f4f505328292e636f646556616c283529696e7374616c6c50702831297070726f63283129 5215:C22,296|00802b4d0021010e0e0c000207da2b4d0115010e0e0c000229352a37294d0207010c0002294d03ff000c00024d04f8002a354d05f2000e0e0e0c00036403a2294d06e4000e0c00022c3b4d05da000e0e0e0c000303043b50026a2c36293b4d05c6000e0e0e0c000303122d3557782a2a4d07b4000e0c00032603024757684d08a6000e0e0e0c00024d099c000e0c000203054d0a9200105768294d0b8a000e0e0e0c0002031a294d0c7d000e0e0c00022936302a4d0d70000e0c0003260302023b505050294d0e5f000c00024d0958000e0c000203054d0f4e00103b5029640237294d034200020232000e0e0e0c00022a4d1033000c0002292e4d112a000e0e0e0c00032b2a3c4d121d000e0e0c0004664f131300410002270402054d14080010420e0e0e0e0e0e|@5217,@2073,@2075,@2077,@2420,-1,I229,@1482,@5218,@5166,I218,@5231,@2049,@2051,@5233,@5238,@5241,@2435,@2462,@2465,@5215,@5216| 5216:O3|103,@373,@5243 5217:S48|56414c55455f4f505328292e636f646556616c283529696e7374616c6c5070283129666f6c6c6f775479706573283129 5218:O1|@5219 5219:C25,680|00812b4d00a1020e0e0c000207d72b4d0195020e0e0c000229352929353e4d0286020e0e0e0c0003032e29362a372a2a4d0374020e0c000329354d046a024d0266020e0e0e0c000303032c020829250426031e373b6602012964294d0549020e0e0c000207d4294d063d020e0e0c00022935293c4d0230020e0c000307ce2a36294d0723020c00024d081c020e0c000207db2935293528312a4d090b020c000307cd2a362c36294d07fd010e0e0c00024d08f4010e0c000207cd2935293528322a4d09e3010c000307cb2a362c36293b4d02d4010e0c000307ca221129353e4d02c5010202ba010e0e0c0003032e29362a372a2a4d03b0010e0c000329354d04a6014d02a2010e0e0e0c000303032c020829250426031e3a3b66020129642f29353e4d0282010e0e0e0c0003033629362a372a2a4d03700102025d010e0c000329354d0462014d025e01020243010e0e0e0c000303032c020829250426031e3f3b66020129642a4d0a3d0102041a0110010c0002033d2a4d0b2d010e0e0c00022a4d0a23010202f0000c000203212a4d0b15010202da000e0e0c00022a2a4d0c06010202c3000e0e0e0c00036402013b6402013b6503ab2a29353e4d02e9000e0e0c0003032e29362a372a2a4d03d8000e0c000329354d04ce004d02ca000e0e0e0c000303032c020829250426031e363b6602012964294d0dad000e0e0c00020358294d0ea1000e0e0c00022935293b4d0294000e0c000303382a37294d0f87000c00024d1080000e0c00024d1178004d1074000e0c00022a2a4d126a000e0e0e0c00036503033b02054d135a00106402054d145200106502054d144a00106402054d1542001002054d163b00106502054d163300106502054d162b00106502054d162300106502054d161b00106402054d161300106502054d160b00106602054d17030010430e|@5221,@2107,@2109,I229,@2043,-1,@2049,@2051,I105,I218,I24,@1474,@1476,@2024,@2073,@2075,@2077,@1482,@538,@2453,@5222,@5224,@5226,@5228,@5220| 5220:O3|103,@373,@5230 5221:S59|56414c55455f4f505328292e636f646556616c283529696e7374616c6c5070283129666f6c6c6f775479706573283129636865636b46756e283229 5222:O3|103,@373,@5223 5223:S65|417267756d656e74207072696e746572206d757374206861766520747970652027612a696e742d3e756e697420287365636f6e6420617267206e6f7420696e7429 5224:O3|103,@373,@5225 5225:S70|417267756d656e74207072696e746572206d757374206861766520747970652027612a696e742d3e756e697420287365636f6e6420617267206e6f74207479706520696e7429 5226:O3|103,@373,@5227 5227:S60|417267756d656e74207072696e746572206d757374206861766520747970652027612a696e742d3e756e697420286d69736d61746368656420276129 5228:O3|103,@373,@5229 5229:S55|417267756d656e74207072696e746572206d757374206861766520747970652027612a696e742d3e756e697420286e6f74207061697229 5230:S59|417267756d656e74207072696e746572206d757374206861766520747970652027612a696e742d3e756e697420286e6f742066756e6374696f6e29 5231:O3|103,@373,@5232 5232:S24|417267756d656e74206d7573742062652061207475706c65 5233:O1|@5234 5234:C7,96|00812c3b4d0058000e0c000303162b3b4d004c000e0c000303033b02054d013f001002392c352d362d4d0233000c00024d032c000e0c0002031e2d3529362f362d2b4d041a000e0e0e0c0003502c2a4d050d00327e0900034d01040010430e0e|@5236,I229,@5235,I105,I218,@5218,@5233| 5235:O3|103,@373,@5237 5236:S60|56414c55455f4f505328292e636f646556616c283529696e7374616c6c5070283129666f6c6c6f775479706573283129636865636b46756e73283229 5237:S30|5475706c652073697a6520646f6573206e6f74206d617463682074797065 5238:O1|@5239 5239:C5,88|00802b29354d004f004d014b000c000303292936293b4d023e000e0e0e0c000329353c4d0131000e0e0c000303032b0207292503511e323b650201296429354d0315004d0111000e0e0c000303033c02013b64420e0e0e0e|@5240,-2,I229,I253,-1| 5240:S25|5354525543545f56414c5328292e6973467265654964283129 5241:O3|103,@373,@5242 5242:S36|496e76616c6964207479706520286e6f74206672656520617420746f702d6c6576656c29 5243:S38|496e76616c6964207479706520286e6f742061207479706520636f6e737472756374696f6e29 5244:C4,56|008156072d2d695627293b4d0029000e0e0c00033b2a0e0e0e4f011b005000022d2a692f3b2b4d020e000e0e0e0c0004503b2707430e0e0e|@5246,I253,@5245,I255| 5245:C4,72|00802b3b4d0040000e0c000303033b02312b3529352d3656382b2a4d0129000e0e0c000364030b290e4f021b00310002020f290e0e4f020f003100022c2a69296566420e0e0e0e0e|@5247,I229,@2453,@5245| 5246:S22|5052494e545f5441424c4528292e6164645070283229 5247:S31|5052494e545f5441424c4528292e616464507028322966696c746572283129 5248:O2|@5249,@7339 5249:C3,40|00802b3556174d001e000e0e0e0c000303062b3729640202020202054d01080010420e0e0e0e0e0e|@954,I251,@958| 5250:O2|@5251,@7339 5251:C2,32|00802b3556174d0016000e0e0e0c000303033c0202020202013b420e0e0e0e0e|@954,I251| 5252:C31,888|00853036293b4d006e030e0e0e0c0003036c313030303056670c0006324d0157030c00024d0250032a69333b692a2a692d2a69402a692a293b4d003b030c000303033c021f293529354d022b034d0027030c0003030c2a36292503511e253b6402013b64640312294d030c030e0c00024d0204032a6964020129270706d8294d04f5020e0e0c0002035d294d05e9020e0e0c0002323131313156770e0e0c0006293528054d00d0020e0c0003030c3c2a4d06c4020e0c0003022129354d02b8024d00b4020e0c0003030c3c2a4d06a8020e0c0003020528062a3c6a333b693f2a2c3b6b270406ce3137294d078a020e0e0e0c000207d4294d087d020e0e0c000233352a4d0971020e0e0c0002031531334d0a64020e0c0003343b693f2a2c3c6b6506d02a4d0b50020e0c0002032131334d0a44020e0c0003343b693f2a2c3c6b293b693f2a4d0c2f023c6b270406d42a4d0d240202021a020e0c000203210402002a333b34342e4d0e0d020e0e0c0007502935220c3b693f2a2c3c6b6606d12a4d0ff4010e0c000207c8314d10e9010e0e0c000207d0314d11dd010e0e0c00022935294d10d1010e0e0c000207d3294d11c5010202bb010e0e0c000229352a362a29353e4d00b001020290010e0c0003031729362a372a2a4d129c010e0c00032503511e223b65020129643b2a4d138701020264010c000207cc2a4d1479010e0e0c00022936294d156d010e0e0c00024d1664010e0c000203a92936294d155701020234010c00024d164c010e0c000203852936293b4d003e010e0e0e0c000303682b3529362929353e4d002a0102040701f1000e0c0003031b29362a372a2a4d12140102027f000e0c00032503511e283b65020129643229353e4d00f90002025d000e0e0c0003031729362a372a2a4d12e4000e0c00032503511e233b65020129642a2a692704020a2e0e0e4f17c700f000026402092d0e4f17bb00e0000264020d2c02020b000e4f17ab00d000026502092a0e4f179f00b00002270502044d1894006502044d198d0029352a364d1a85002a2c6a7876213b22114d1b78000e0c0002504d1c6f002e3022146b4d0266002a6964052a0e0e0e00ff6d29353c4d0054000e0c000303054d1d4a001002004d0243002b6922103b693f2a2c3b6b6627040214343333333356970e0c0006343b693f2a2c3b6b65650215323131313156770e0e0c0006323b693f2a2c3b6b6564641f060e0e0e|@5254,I229,@2156,-3,@3353,@2680,@2683,@3342,@2777,@2780,@5255,@5258,@5366,@650,@3010,@5369,@5400,@2107,@2109,@2043,@2049,@2051,I105,I218,@5403,@5210,@5210,@5405,@5129,@5253,@55| 5253:C8,88|008056092c4d004f000c0002293f4d0146000e0e0e0c000364031c2c3b3f4d0236000e0e0e0c0004294d032b004d0427000c00036402013b0304561702025618294d0513000c00022e2a2d4d060900310e0e0e7b05060004|@5409,I223,I233,@1447,@5410,I24,@5411,@5408| 5254:S28|56414c55455f4f505328292e6170706c7946756e6374696f6e283629 5255:O1|@5256 5256:C3,16|00804d000a002c4d0105002d7e030003|@5257,-1,I229| 5257:S5|457175616c 5258:O1|@5259 5259:C15,240|00812b3c4d00e8000e0c00033c28403b4d01dc000e0c00043c28403b4d01d0000e0c00043c28403b4d01c4000e0c00044d02bc002c694d03b6002a2c302f316806324d04aa000e0e0e0c0002293b4d059e002d0e0e0c000429353b4d0691000e0e0c0003030e2936313b692a220c0e0e7d0d00022936313b692a0e0e0e0c0002303b4d076a000e0e0e0c0003294d085f000c00024d0958000e0c0002031f2936293b4d064a000e0e0e0c000303062a35296402064d0a38002b696402064d0a2f002a693f4d0b28002d3c6b293b692b2a6928092a69294d0c160022113b3c3b3b3b68084d0d09002a692711430e0e0e0e|@5261,I106,I11,@5262,@5274,@3026,@5360,I229,I253,I105,I218,-9,@5363,@5260,-7| 5260:S8|657175616c697479 5261:S34|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e283229 5262:C7,80|00810402002c4d0046000e0e0e0c00024d013c000e0c000203152c352d364d022e002a2c326b2c3b452a46260402184d031d002e56376a4d0415002a692b4d050e00452a4626032964430e0e0e0e0e0e|@5264,I105,I218,@5265,@5267,@5263,-1| 5263:C1,16|00802b352c3656272d0e0e0e7e030003|@5273| 5264:S47|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e28322972657475726e436f6465283229 5265:C1,24|0080560856172a2a2f6a6556192c0e0e0e8000020e0e0e0e|@5266| 5266:S50|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e28322972657475726e436f6465283229283129 5267:C9,120|008156085618293b4d006c000e0c0003293c4d0162000e0e0e0c00032c3b2b4d0255000e0e0c0004505648293b4d0047000c0003323c4d013e000e0e0e0c00034d0334002a694d042e002b692b2d692b2b2b6a6656870e0e0e0c0002294d0517002c3b3d4d0610003b3b68084d0708002a692709430e0e0e|@5269,I253,I106,I255,@5270,@5272,@5268,-1,-7| 5268:S10|65717b2e2e2e7d283229 5269:S61|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e28322972657475726e436f646528322977726170706564436f6465283229 5270:C4,32|00802b3556172a2a4d0014000e0c00034d010c004d0208003c2c3b680566420e|@5271,I107,-5,-1| 5271:S69|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e28322972657475726e436f646528322977726170706564436f6465283229636f64652d283129 5272:C4,32|00802b3556172a2a4d0014000e0c00034d010c004d0208003c2c3b680566420e|@5271,I107,-5,-2| 5273:S61|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e28322972657475726e436f646528322977726170706564436f6465283129 5274:C28,560|00823b3b3b30353e4d0024020e0c00030346303631372a2a692b2b4d0111020e0e0c000329354d0206024d0002020e0e0e0c000303162a330e0c000229220c4d03ed01220c0e0e0e7e0d000329343433220c0e7b050c0004304d04d3010c000207cb304d05c9010e0e0c000229352a37294d06bb010c0002294d07b3010c0002283d2b4d08a9014d09a5010e0e0c00044d0a9c012a354d0096010e0e0e0c00034d0b8c010e0c000203164d0c82012a693b2a6929220f4d037601220f7e1000034d0d6c014d0768010e0c00022b2a4d0e5e010e0e0e0c00036403114d0f5101220d56b7220d0e0e0e7e0e00032b4d103f010c0002293b4d0036010e0e0e0c000303722c4d1129010e0e0c00024d0220012a354d001a010e0e0e0c0003644d0b0f010c0002033e2c4d110501020285000e0e0c00022d4d12f7000c000229314d13ee000e0e0e0c00032b2a3c4d14e1000e0e0c00042922122212221122130e0e7b051300044d15c800220e4d03c200220e7e0f00032935293729353b4d00b1000e0e0c000303124d15a60022104d03a00022100e0e7e1100032e312d0e0e4f168f00e000042922114d03850022110e0e0e7e120003304d1777000c00020359304d186d000e0e0c00022936294d1961000e0e0c00024d0b58000e0c0002032d2936293b4d004a000e0e0e0c000303122a35293629220c220c34220d0e7b050d00042a4f1a2b00600002640209290e4f1a1f005000026502114d151500304d031000300e0e0e7e08000366440e0e0e0e0e0e|@5276,I229,@2043,-1,@5277,@2073,@2075,@2077,@1482,@5283,@2449,-2,I218,@5286,@605,@2453,@5288,@2501,@2420,@2435,@2462,@2465,@5290,@5299,@2049,@2051,I105,@5275| 5275:C3,32|00804d001a002c562556376b4d0110002a6956282a2a5757300e0e0e7e060003|@5351,@5352,@5350| 5276:S43|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329 5277:O1|@5278 5278:C5,88|00812b3b4d0050000e0c000303032c023f2b352c360402002f354d013a004d0036000e0e0e0c000303132f364d0228002c2e2c6b2b3b452a46260302112f364d0315002c2e2c6b2b3b452a4626032966430e0e0e0e0e0e0e|@5280,I229,-1,@5281,@5279| 5279:C4,120|00802b56190c00022c56280e0e0c00022d56370e0e0c0002293b692b2a69402a692a293b4d0050000e0c000303033c021f293529354d013f004d003b000c0003030c2a36292503511e263b6402013b64640312294d0220000e0c00024d0118002a6964020129293b693f2a323c6b2708420e0e0e0e0e0e0e|@5282,I229,-3,@3353| 5280:S46|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e28322972657475726e46756e283229 5281:C1,40|00802b56190c00022c56280e0e0c00022d56370e0e0c0002293b692b2a693f2a2f3c6b2705420e0e|@5282| 5282:S49|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e28322972657475726e46756e283229283129 5283:O1|@5284 5284:C2,8|00804d000200420e|@5285,@431| 5285:S54|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b6545712833297370656369616c2d283129 5286:C1,8|00805607420e0e0e|@5287| 5287:S46|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329283129 5288:O1|@5289 5289:C2,8|00804d000200420e|@5287,@464| 5290:O2|0,@5291 5291:O1|@5292 5292:C2,8|00804d000200420e|@5294,@5293| 5293:O2|-3,@5295 5294:S45|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e28322964656661756c742d283129 5295:O1|@5296 5296:C2,16|00802b352c364d0006002d0e7e030003|@4052,@5297| 5297:O1|@5298 5298:C20,728|00812c2c4d00d0020e0c000303033c06d72c4d01c2020e0e0e0c000203033b06c92b4d01b2020e0e0e0c000203033b06d32c4d02a2020e0e0e0c00022c4d0297020c00022a2a4d008e020e0e0e0c00034d0384020e0c000203033b06d42e4d0476020e0e0e0c00022e4d046b020c00022a2a4d0562020e0e0e0c00032928404d0655020e0e0c0003293b4d004a020e0e0e0c0003644d033f020c000203033b06d6293c4d0631020e0e0c0003293b4d0026020e0e0e0c0003644d031b020c0002039d2d3b4d0710020e0c000303104d0806022e4d0901020e0e0c000302012d2928084d0af2010204e701e5010e0c0003294d01e3010c0002030329020f294d0bd6010202cb010e0e0e0c00023b292b4d00c5010e0e0c000303033c023e220c2a4d0cb4010e0c0003220c2b4d0ca90102029d010e0e0c00032a2a4d009a010e0e0e0c0003650313293c4d0d8b010c0003292502501e473b6402013b270406cd2d3c4d0e73010c00030a01008000a1002d3c4d0f6301020256010c000329293b4d1055010e0e0c000303033c0237332a4d1145010e0e0c0003332b4d113a010e0e0e0c00032a2a4d122e010e0e0e0c0003650310293c4d0f1f010c000325011e413b02013b650321313b4d110b010c0003313b4d1102010e0e0e0c00032a2a4d12f600340e7e0b00033b06ca313b4d11e7000c0003313b4d11de000e0e0e0c00032a2a4d12d200340e7e0b0003313b4d11c6000e0e0e0c0003323c4d11ba000e0e0e0c0003323b4d11ae000202a1000e0e0e0c0003333c4d119e000e0e0e0c00032c4d0193000c0002031d2c2b4d0088000e0c0003030e2b2a4d127c00220d0e0e7e0d00033b02662a4d016c000e0c000203033b02582b4d015e000e0e0e0c0002031d2b2a4d0050000e0c0003030e2c2b4d124400220d0e0e7e0d00033b022e294d0134000e0c000203033b02202c2b4d122500020218000e0e0c0003030e2b2a4d121400220d0e0e7e0d00033b27046665430e0e0e0e0e0e|@4054,I251,I105,I15,I218,I17,I242,I243,I234,@181,I106,I108,I152,I252,I239,I107,I240,I229,I253,@5297| 5299:C14,280|00822d4d0011010e0e0c00022e4d0107010c00025728293b4d02fc000e0c000329293b4d03f1000e0e0c000303033b0224293529352a362c362a324d04d9000e0e0c000303052b6801020829250526041e2f3b2704644d05be002d567556876b4d06b40057792b220c220e68055778293b4d02a3000c000329293b4d0399000e0e0c000303033b0224293529352a362c362a220e4d0480000e0c000303052b6801020829250526041e2f3b2704640402002a4d0762000e0e0e0c00024d0858000e0c000203172a354d094c0022102b316b2b4d0a4200452a4626030237220f220e4f0b3300c10003220f3b4d0329000e0e0c0003030b2a4d0a1d00452a465002124d0c13003022112c6b2b4d0a0900452a46515029270b44|@5301,@1482,@2080,I253,I229,@2453,@5302,@5311,I105,I218,@5315,-1,@5317,@5300| 5300:C2,32|00802b56190c000256183b2a0e4f000f003000023f2a2e3c6b2704420e0e0e0e|@5349,@5348| 5301:S69|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329657175616c697479466f72436f6e737472756374696f6e283329 5302:C8,136|00812b352c3656292f3b2b56680c000429353b4d0071000e0e0c0003035a29362d3c4d0162000e0e0e0c0003292e69642a0c00023f4d024f002b3c6b2f3c4d0146000e0e0e0c000356874d033a002a4d0435000e0e0c0003294d052b004d0427000c00032d2a2e3b3d3b3b3b68084d0616002a692708020c2936302a310e0e0e7d0900022704430e|@5304,I229,I106,@5305,@5310,@344,@5303,-7| 5303:S5|282e2e2e29 5304:S78|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329657175616c697479466f72436f6e737472756374696f6e283329676574417267283229 5305:O2|@5306,0 5306:O2|10,@5307 5307:O2|@465,@5308 5308:O2|@5309,0 5309:O5|-5,-2,1,0,0 5310:S3|65712d 5311:C11,440|00832e2e692c3b4d00ad010e0e0c0003035e0405002e304d019d010e0e0c0003032c5627312a4d028e010e0e0e0c0003293c4d0282010e0e0e0c00032c4d037701453b463b472a483b492604021e5627312a4d0262010e0e0e0c00032b4d0357014531463c472a483b492603296406db2d2f4d0142010e0e0e0c00034d0438010e0c0002032f5617302a4d022a010e0e0e0c00034d032001303c2c3b680556493b2a0e0e0e4f050f016000023f2a2e3c6b270606ca5619562a4d06fb000c00022a2a3c2b4d07f0000e0c00024d04e8000e0c000203722b352c362c4d07d9000e0e0c00024d04d0000e0c000203562c352d362d033d2c353e4d00bc000e0c0003032d2c362d372a2a692d353e4d00a8000e0c000303152d362e372a2a692c2a4d0895000e0e0c00036602013b6602013b02013b2c2b2b25082508250826051e7b3b6602012b6502012902026200270503245617302a4d025f000c0003293d4d0256000e0e0e0c00034d034c003b3b2c3b680566023a5617302a4d023b0002022e000c0003293c4d022e000e0e0e0c00034d0324003b3b2c3b680556593b2a0e0e0e4f0913007000023f2a2e3c6b2707641f040e0e0e0e0e0e|@5313,I229,I113,I107,-5,I218,@5314,@2435,I105,@2024,@5312| 5312:C3,48|00802b3b4d0028000e0c000303033b021d2b352c362a563457480e0e0e0c00032a4f010b003100022a2a69292705420e|@436,I229,@5312| 5313:S83|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329657175616c697479466f72436f6e737472756374696f6e2833297265637572736976654571283429 5314:C3,48|00802b3b4d0028000e0c000303033b021d2b352c362a563457480e0e0e0c00032a4f010b003100022a2a69292705420e|@436,I229,@5314| 5315:C1,24|00802b352c365628563756492f0e0e7b060300050e0e0e0e|@5316| 5316:S86|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329657175616c697479466f72436f6e737472756374696f6e2833297265637572736976654571283129283129 5317:C26,560|00812c4d0029020e0e0c00022d4d011f020c0002572b573b293b4d0212020e0e0e0c0003293c4d0306020e0e0e0c00032c3b2b4d04f9010e0e0c000450576b293b4d02eb010c000357882a326957a8293b4d02db010c00032b2a692d3b2b4d04ce010e0e0e0c00045022104d05c1010e0e0c00023b2a293b4d06b4010e0c000303032a021629362b3c4d03a3010c0003292b25042504511e213b656557f9293c4d038c010e0c00032b3b4d0682010e0e0e0c0003030329020b293c4d0371010e0e0c00034d0768012d2f121600010001002e68053b22164d0855010e0e0c00024d094c010e0c00020355221636293b4d063d010e0e0c00030329221735294d0a2e010e0e0e0c000203064d0b2201021022180e0e0e160c0016011800000000026402192217160c0006011700000000023d4d0dfb004d0bf7002c6b646402192216160c00ea001600000000023d4d0edf004d0bdb002c6b644d0fd40022144d10ce000e0e0e0c0003294d11c3004d10bf000c00032b2a303b3d4d12b3003b3b68084d13ab002a69333b4d06a3000c000303032902314d14970022184d1091000e0e0c0003294d1587004d1083000c00032b2a220c3b22104d1275003b3b68084d136d002a6966121b0002000400121c0002000400293b4d0256000e0e0e0c00034d164c0022162e3b6b293b69293b4d063e000e0e0e0c000303032b02103b2c0e0e1617002a00220000000002642e3b2b4d041c000e0c0004504d18130012220002000300221a6a2720430e0e0e0e0e0e|@5319,@1482,@2080,I253,I106,I255,@2435,I229,@5320,I105,I218,@5328,@464,@5331,@5342,@5342,@5310,@344,@5344,-1,-7,@5310,@5345,-4,@5346,@5318| 5318:C3,40|00802b35561856272b2a4d001a000e0e0e0c00034d0110002c3c2c3b68052704420e0e0e0e0e0e0e|@5347,I107,-5| 5319:S65|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329657175616c697479466f724461746174797065283229 5320:C3,32|00803b561856274d0015000e0e0c0002292b0e0e0e4f01070040000366420e0e|@5322,I111,@5321| 5321:C8,120|00812b3b4d0070000e0c0003030a560757192c0e7d0400022b3529353e4d0057000c0003034729362a372a2a692f365657292c4d0141000e0e0c00036403114d023500576a336a4d032d002a69640219313c4d0422000e0e0e0c0003292b0e0e0e4f05130071000364270402054d0607001064430e0e0e0e|@5324,I229,@2024,@5325,-1,I106,@5321,@5323| 5322:S76|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329657175616c697479466f7244617461747970652832296e6577547646756e283129 5323:O3|@7141,@228,@5327 5324:S85|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329657175616c697479466f7244617461747970652832296e6577547646756e28312966696e645476283229 5325:C3,40|00802b35561856272b2a4d001a000e0e0e0c00034d0110002c3c2c3b68052704420e0e0e0e0e0e0e|@5326,I107,-5| 5326:S88|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329657175616c697479466f7244617461747970652832296e6577547646756e28312966696e645476283229283129 5327:S27|66696e6454763a206e6f7420612074797065207661726961626c65 5328:O1|@5329 5329:C10,120|00802b36294d006f000c00020366294d0165000e0e0c0002293c4d025a000e0e0e0c0003034a2d37294d034b000c0002033a294d0441000e0e0c0002294d0537000c0002294d062f000c000203054d0726001029293c4d081e000e0e0e0c0003294d061300330e0e7d0a00023b6402013b6402013b64420e|@5330,@2680,@2683,I229,@2759,@2749,@5129,I105,@398,I253| 5330:S74|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329657175616c697479466f7244617461747970652832296973456e756d283129 5331:C13,296|00802b3b4d0020010e0c000303064d01160106d22b3529362a372b382f362d4d0205010e0e0c0002030c290e0e4f03f70051000206d91206000100edff2c2a4d04e5000e0e0c00033b2f4d05da000e0e0e0c000203c52f4d06cd000e0e0c0002293c4d00c2000e0e0e0c0003039f2b3528054d00b2000e0e0e0c0003030c3b2c4d07a4000e0c000302212b354d0898004d0094000e0c0003030c3b2c4d0788000e0c0003020528062c3b6a3f4d0978002b3c6b2d3528054d006d000e0e0c0003030c3b2e4d0760000e0c000302252d354d0854004d0050000e0c000303103b2e4d07440002023f000e0c0003020528062e3b6a3f4d0a30002b3c6b310e4f032700d100023d2d2c2c6b2705020b020214004f0b13008000016402090e0e4f0b070070000166270542|@5333,I229,@501,@5328,@5331,@5056,@2680,@2683,@3342,-3,@463,@5308,@5332| 5332:C13,304|007f56011202000200f1ff2a2a4d001f010c00034d0118011205000200edff56526a4d020a012a694d0304012b691207000200edff1208000200f7ff2a2a69120a000200ecff2e2e69312a2c58e50e0e0e0c000429353b4d04d5000e0e0c0003030d29362d2a0e0e0e0c00026402054d05bd0010120e000100f8ff293528054d04ad000e0e0c0003030c3b2a4d06a0000e0c0003022129354d0794004d0490000e0c0003030c3b2a4d0684000e0c0003020528062a3b6a3f4d0874002b3c6b1211000100f8ff293528054d0462000e0e0e0c0003030c3b2a4d0654000e0c0003022129354d0748004d0444000e0c0003030c3b2a4d0638000e0c0003020528062a3b6a3f4d0928002b3c6b3d2a314d0a1e006b1215000100faff0e0e0e160b000e001600020000023d2f2c2c6b271541|@5335,@3278,@5336,@5338,@5340,I229,@5334,@3342,-3,@463,@5308,@501,@5331| 5333:S82|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329657175616c697479466f72446174617479706528322970726f63657373436f6e73747273283129 5334:O3|@7141,@228,@5341 5335:S84|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329657175616c697479466f72446174617479706528322970726f63657373436f6e737472732831292f32 5336:C7,112|00825608292f4d0066000e0e0e0c0003293528054d0158000e0c0003030c3d2a4d024c000e0c0003022129354d0340004d013c000e0c0003030c3d2a4d0230000e0c0003020528062a3d6a5637312a4d041d000e0e0c00034d051400313c2c3b6805293b693f2a2f3c6b2707440e0e0e|@5337,@5056,I229,@3342,-3,I107,-5| 5337:S93|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329657175616c697479466f72446174617479706528322970726f63657373436f6e737472732831296465737472756374283329 5338:C2,24|00802b352c364d000e0056372e0e0e7b050300040e0e0e0e|@5339,-1| 5339:S96|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329657175616c697479466f72446174617479706528322970726f63657373436f6e737472732831296465737472756374283129283129 5340:C2,24|00802b352c364d000e0056372e0e0e7b050300040e0e0e0e|@5339,-2| 5341:S21|6170706c7945713a2077726f6e6720726573756c74 5342:O4|4,@5307,@5343,1 5343:O2|-3,I251 5344:S3|283229 5345:S3|283129 5346:C3,48|00802b3b4d0028000e0c000303091201000100e0ff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1884,I229,@5346| 5347:S68|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329657175616c697479466f724461746174797065283229283129 5348:C3,48|00802b3b4d0028000e0c000303033b021d2b352c362a563757470e0e0e0c00032a4f010b003100022a2a69292705420e|@436,I229,@5348| 5349:S72|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329657175616c697479466f72436f6e737472756374696f6e283329283129 5350:C1,16|00802b352c362d3756372e7b05030004|@5359| 5351:S45|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b6545712833292f34 5352:C2,24|00823b5617293b0e0e4f000b0030000365440e0e0e0e0e0e|@5354,@5353| 5353:C9,128|00812c3b4d0078000e0c000303064d016e00026a2c3529362e364d0262005649306a4d035a005658316a565757692c2c692f2a2c57b80e0e0e0c000429353b4d003d000e0e0c0003030d29362d2a0e0e0e0c00026402054d04250010220c3c4d051d000e0e0c0003312a0e0e0e4f060f00c100033d2c2b4d0705006b270c430e|@5356,I229,@464,@5357,@5355,@5334,I106,@5353,@501| 5354:S53|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b65457128332965715475706c65283329 5355:C4,80|008056082c56270e0e0c0002293528054d003c000e0c0003030e2a2a4d0130002f0e0e0e7e05000329354d0222004d001e000e0e0e0c0003030e2a2a4d0110002f0e0e0e7e05000328062a2c6a65420e|@5358,I229,@3342,-3| 5356:S70|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b65457128332965715475706c65283329636f6d62696e65456e7472696573283229 5357:C4,80|008056082c56270e0e0c0002293528054d003c000e0c0003030e2a2a4d0130002f0e0e0e7e05000329354d0222004d001e000e0e0e0c0003030e2a2a4d0110002f0e0e0e7e05000328062a2c6a65420e|@5358,I229,@3342,-3| 5358:S73|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b65457128332965715475706c65283329636f6d62696e65456e7472696573283229283129 5359:S53|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b65457128332965715475706c65283129 5360:O1|@5361 5361:C2,8|00804d000200420e|@5362,@5290| 5362:S48|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e283229726573756c74436f64652d283129 5363:O2|@841,@5364 5364:O2|@5365,0 5365:O3|6,@465,1 5366:O1|@5367 5367:C3,16|00804d000a002c4d0105002d7e030003|@5368,-3,I229| 5368:S8|4e6f74457175616c 5369:O1|@5370 5370:C6,64|00852f4d0039000e0e0c00024d0130000e0c00024d0228002e3034346805322b2b4d031b000c00042b4d0413000c00022f2b452a4627041f060e0e0e0e0e0e0e|@5372,@3026,@5373,@5371,@2449,@2080| 5371:C7,72|0080560929283d4d003d000e0e0c00036403064d013100022e56094d0229000e0e0c0002294d031f000c0002562a5639564856572c2c2f2d2d4d040b000c0006504d050300270642|@5388,I24,@5293,@3013,@5389,@5387,@431| 5372:S34|56414c55455f4f505328292e6765744f7665726c6f6164496e7374616e6365283629 5373:O1|@5374 5374:C36,1136|00802b4d0069040e0e0c000207cc2b4d015d040e0e0c000229352a364d0250040e0c0003294d0347040c000207cf294d043d040e0e0c000229294d0532040e0e0e0c00024d0628040e0c0002033629352a364d071a044d0816040e0e0e0c00022b4d080b040c00022a2a4d0902040e0e0e0c00036503033c0207292503511e453b6502013b64036d4d07e4034d0ae0030e0c00020402004d07d5034d08d1030e0e0c00024d0bc8030e0c000203193c28404d07bb034d0cb7030c00042a4d0daf03452a46510208294d0ea403080200293b2c2b6a4d0f9803020217030e0c00022f2a4d108a030e0e0e0c0003504d077f03270406cd29294d0575030202ed020e0e0c00024d0668030e0c0002033629352a364d115a034d0856030e0e0e0c00022b4d084b030c00022a2a4d0942030e0e0e0c00036503033c0207292503511e483b6502013b6403694d1124034d0a20030e0c00020402004d1115034d0811030e0e0c00024d0b08030e0c000203193c28404d11fb024d0cf7020c00042a4d0def02452a46510208294d12e402080200293b2c2b6a4d0fd8020e0c00022f2a4d10ce020e0e0e0c0003504d11c302270406cd29294d05b9020e0e0c00024d06b002020225020e0c0002033629352a364d139e024d089a020e0e0e0c00022b4d088f020c00022a2a4d0986020e0e0e0c00036503033c0207292503511e483b6502013b6403694d1368024d0a64020e0c00020402004d1359024d0855020e0e0c00024d0b4c020e0c000203193c28404d133f024d0c3b020c00042a4d0d3302452a46510208294d142802080200293b2c2b6a4d0f1c020e0c00022f2a4d1012020e0e0e0c0003504d130702270406cd29294d05fd010e0e0c00024d06f401020269010e0c0002033629352a364d15e2014d08de010e0e0e0c00022b4d08d3010c00022a2a4d09ca010e0e0e0c00036503033c0207292503511e483b6502013b6403694d15ac014d0aa8010e0c00020402004d159d014d0899010e0e0c00024d0b90010e0c000203193c28404d1583014d0c7f010c00042a4d0d7701452a46510208294d166c01080200293b2c2b6a4d0f60010e0c00022f2a4d1056010e0e0e0c0003504d154b01270402c029294d0541010e0e0c00024d0638010202ad000e0c0002033629352a364d1726014d0822010e0e0e0c00022b4d0817010c00022a2a4d090e010e0e0e0c00036503033c0207292503511e483b6502013b6403694d17f0004d0aec000e0c00020402004d17e1004d08dd000e0e0c00024d0bd4000e0c000203193c28404d17c7004d0cc3000c00042a4d0dbb00452a46510208294d18b000080200293b2c2b6a4d0fa4000e0c00022f2a4d109a000e0e0e0c0003504d178f00270402044d1987006402044d1980006502752b4d1a78000e0c000203662b4d1b6d000e0e0c000229352a37294d1c5f000c0002294d1d57000c0002294d1e4f000c0002640303290236294d1d41000e0e0c00022a4d1f37000c0002292e4d202e000e0e0e0c00032b2a3c4d2121000e0e0c0004664d221700300e0e7d070002270402044d190800420e0e0e0e0e0e0e|@5376,@1474,@1476,@2043,@2069,@2041,I105,I218,@538,@1482,@2453,@2080,@1485,I11,-1,@5377,@1489,@1469,@2457,@5378,@5379,@5382,@5383,@5386,@543,@5375,@1480,@2073,@2075,@2077,@2420,@2046,@2435,@2462,@2465,@5373| 5375:O2|0,@543 5376:S48|545950455f5452454528292e74797065436f6e73747246726f6d4f7665726c6f61642832297072656654797065283129 5377:O2|0,@538 5378:O2|0,@2457 5379:O6|@5381,0,0,0,@540,@5380 5380:O2|-1,@7340 5381:S4|776f7264 5382:O2|0,@5379 5383:O6|@5385,0,0,0,@540,@5384 5384:O2|-1,@7341 5385:S4|63686172 5386:O2|0,@5383 5387:O1|@5392 5388:S45|56414c55455f4f505328292e6765744f7665726c6f6164496e7374616e63652836296e6f74466f756e64283129 5389:O1|@5390 5390:C6,96|00802b3b4d0058000e0c000303064d014e0002482b36293b4d0044000e0c0003030e2c352935294d0235002f7d0600022c352935294d0227000c000229282f4d031d000e0e0c00032d4d0413000c00022a2a4d030a00330e7e090003420e0e0e|@5391,I229,I48,@2080,@344,@5389| 5391:S64|56414c55455f4f505328292e6765744f7665726c6f6164496e7374616e63652836296e6f74466f756e642831296d616b654f7665726c6f61644c697374283129 5392:C11,184|00842f4d00b1000e0e0c00022d2309294d01a4004d02a0000e0c00032b4d0397000c0002030e2b4d048d000e0e0c00023c6402013b03454d057d00324d0678000e0c00034d0770002a6929313c3435220c36220d37220e38220f3922103a221123062212230722132308221423094d08460022140e0e0e7b0f0c000e4d0938002a2d33220c680529303c33353436220c37220d38220e39220f3a221023062211230722122308221323094d080a0022130e0e0e7b0f0b000e|@5394,@3026,@7299,@960,@1474,@1476,@5395,@344,@5396,@1111,@5393| 5393:C7,112|00802b23064d0067002a0e0e0e0c0002512b38561a294d0156004d0252000e0e0e0c000356392a2a4d0244000e0c0003294d033b004d0237000c000327042a0e0e0c000251560856173b4d0422000e0e0e0c00022b2b302c3c4d0513000c0006502e373b2a300e0e7d0700020e0e0e0e|@5398,@2124,@5399,@344,@5397,@2018,@2033| 5394:S28|545950455f5452454528292e6f7665726c6f61644572726f72283529 5395:S34|556e61626c6520746f207265736f6c7665206f7665726c6f6164696e6720666f7220 5396:C1,16|00802b3856172a2d7d0400020e0e0e0e|@1110| 5397:S9|20627574206e6f7420 5398:S31|545950455f5452454528292e6f7665726c6f61644572726f72283529283129 5399:S18|206973206f7665726c6f61646564206f6e20 5400:O1|@5401 5401:C2,16|00803b2c4d0008002d0e0e0e7e030003|@5402,I229| 5402:S11|4164644f7665726c6f6164 5403:C3,96|00802b29353e4d0056000e0e0e0c0003031729362a372a2a4d0144000e0c00032503511e203b65020129641202000100f6ff2929353e4d0026000e0e0e0c0003031729362a372a2a4d0114000e0c00032503511e203b65020129642b2a696642|@5404,I229,@2043| 5404:S40|56414c55455f4f505328292e6170706c7946756e6374696f6e2836293c7061747465726e3e2d2f32 5405:C3,24|00804d0012002c694d010c00562756382c6b64420e0e0e0e|@5407,-3,@5406| 5406:C8,88|008056092c4d004f000c0002293f4d0146000e0e0e0c000364031c2c3b3f4d0236000e0e0e0c0004294d032b004d0427000c00036402013b0304561702025618294d0513000c00022e2a2d4d060900310e0e0e7b05060004|@5409,I223,I233,@1447,@5410,I24,@5411,@5408| 5407:S49|56414c55455f4f505328292e6170706c7946756e6374696f6e2836296164644f7665726c6f616447656e6572616c283129 5408:O2|@5414,@7309 5409:S48|56414c55455f4f505328292e6170706c7946756e6374696f6e2836296164644f7665726c6f6164696e67283129283129 5410:S4|636f6e76 5411:O1|@5412 5412:C12,136|00802b4d0081000e0e0c0002036e2b4d0175000e0e0c000229352a37294d0267000c0002294d035f000c00024d0458002a354d0552000e0e0e0c0003640303290236294d0341000e0e0c00022a4d0637000c0002292e4d072e000e0e0e0c00032b2a3c4d0821000e0e0c0004664d091700300e0e7d070002270402054d0a080010420e0e0e0e0e0e|@5413,@2073,@2075,@2077,@2420,-1,I229,@2435,@2462,@2465,@5411,@5216| 5413:S42|56414c55455f4f505328292e6170706c7946756e6374696f6e283629666f6c6c6f775479706573283129 5414:C4,56|00823b56172f2f2f6a5637293b4d0027000c0003644f011f003000022a2a692c3b2b4d0212000e0e0e0c0004503b2705440e0e0e0e0e0e0e|@5416,I253,@5415,I255| 5415:C6,104|00802b3b4d0060000e0c000303033b02562b3529352a362e3656492c2a4d0147000c000364032056484d023b000c00022b4d0233000c00022a2a4d032a000e0e0e0c00036502013b030c290e0e4f041700410002020f290e0e4f040b004100022d2a692965270442|@5417,I229,I24,@1482,@2453,@5415| 5416:S28|5052494e545f5441424c4528292e6164644f7665726c6f6164283329 5417:S37|5052494e545f5441424c4528292e6164644f7665726c6f616428332966696c746572283129 5418:C12,448|00852b352c36562b4d00b4010e0c000203033206cc4d01a7012b564834566934568a68074d0298012c5658220c567934569a68074d0388012d5668220d5689569a68064d0479012c695667293b4d056f010c0003642e0e0e0e0c0002220c3b692a2a69402a692a293b4d0653010c000303033c021f293529354d0443014d063f010c0003030c2a36292503511e253b6402013b64640312294d0724010e0c00024d041c012a6964020129293b693f2a313b6b4d040a01336956e7293b4d0500010e0c000364220d0e0e0c00024d04f000346912110001000100293b4d05e1000202d5000e0e0c000364220f0e0e0c0002294d08cb0069402a692a293b4d06c0000e0c000303033c021f293529354d04af004d06ab000c0003030c2a36292503511e263b6402013b64640312294d0790000e0c00024d0488002a6964020129293b693f2a303b6b4d097600221e2b4d0a6f006b293b69322a69402a692a293b4d065e000e0e0e0c000303033c021f293529354d044b004d0647000c0003030c2a36292503511e283b6402013b64640312294d072c000e0c00024d0424002a6964020129293b693f2a22103b6b293b6922112a6928092a69271d651f060e0e0e0e0e|@5420,I218,@5421,@5423,@5425,-3,I253,I229,@3353,@5419,-6,@509| 5419:O2|@4642,0 5420:S45|50415253455f5452454528292e67656e636f64652837297772617046756e6374696f6e496e4465627567283629 5421:C2,40|00802b352c36562c563b3b2c2b6a565a566956785687312a31303030304d00070022127b090c0008|@5422,@4983| 5422:S61|50415253455f5452454528292e67656e636f64652837297772617046756e6374696f6e496e4465627567283629656e74657246756e6374696f6e283129 5423:C2,48|00802b352c36562c563b3c2c2b6a565a566956785687312a31303030304d000f000c000850302709420e0e0e0e0e0e0e|@5424,@4983| 5424:S61|50415253455f5452454528292e67656e636f64652837297772617046756e6374696f6e496e44656275672836296c6561766546756e6374696f6e283129 5425:C3,40|00802b352c36562b4d001c002b69564a565956685677302a30303030304d0107000c0008502f100e|@5426,-1,@4983| 5426:S65|50415253455f5452454528292e67656e636f64652837297772617046756e6374696f6e496e4465627567283629657863657074696f6e46756e6374696f6e283129 5427:C14,360|00842f4d0061010e0e0c000256170402002b313c2d332e4d014d010e0e0c00075029352a3678761a3b2d4d023a010e0e0e0c0002220e2a0e0e0c00022968016509dc00ff6d293528654d031b010c000303033b0202020206cf293528084d0307010c00030358293756774d04fa002b4d05f5000e0e0c0003294d06eb004d05e7000c00032922104d05dd000e0e0c0003294d07d3004d05cf000c000329314d05c6000e0e0e0c00032e3c221122132d4d08b5000e0e0c0006503b270702020202029a293528054d039e000e0e0e0c0003034056674d099000220d4d058a000e0e0e0c0003294d0a7f004d057b000c0003292e4d0572000e0e0e0c00032c3c220e22102d4d0861000e0e0c0006503b270402020202024656674d0b4c0002023d00220d4d054200020232000e0e0e0c0003294d0c33004d052f000c0003292e4d0526000e0e0e0c00032c3c220e22102d4d0815000e0e0c0006503b27046427051f050e0e0e0e0e0e0e|@5429,@2156,@5369,@5129,I229,@5430,@344,@5431,@5428,@2986,@5432,@5428,@5433,@5428| 5428:S4|20746f20 5429:S41|50415253455f5452454528292e67656e636f64652837296765744c69746572616c56616c7565283529 5430:S22|436f6e76657273696f6e20657863657074696f6e2028 5431:S26|2920726169736564207768696c6520636f6e76657274696e6720 5432:S43|4f766572666c6f7720657863657074696f6e20726169736564207768696c6520636f6e76657274696e6720 5433:S34|457863657074696f6e20726169736564207768696c6520636f6e76657274696e6720 5434:C37,1072|00832c352d362e383b2f354d0021044d011d040e0e0c000303912f37293b4d020e040e0e0e0c0003294d0303040c00022936294d04f9030e0e0c00020326294d05ed030e0e0c00024d06e40333221022106b220e220e2b304d07d40322100e7b06100005293b4d01c6030e0e0e0c00030314220c220c4d08b6032e0e0e4f09af03b000050221220c220c4d0aa2030e0e0e0c000329352a362b372c38302d69292d2d2d6b292707270406ce2f35280d4d017d030e0e0c000303622f362c353d4d016d030e0e0c0003031a3b2a0e4f0b5f036000024d0c58032a69302a3b316b29270402352c354d0c46034d0142030e0e0e0c0003031e2c363b2a2c0e0e4f0d2f038000034d0c28032a69312a3b326b29270502054d0e1803106406d12f3528084d010c030e0c000307d22f3730382a3b4d02fc020e0c000329294d0ff2020e0e0e0c0002031f294d10e5020e0e0c000229352a364d11d8020e0c00032502501e263b64022b294d12c6020e0e0e0c0002031d294d13b9020202ae020e0e0c00022935294d14a9020e0e0c00026502013b6503185667293c34220f4d1592024d168e020e0e0e0c00066402013b2b3b4d027e020e0e0e0c00034d1774020e0c00024d186c022a2a0e0e0e0c00022d2a2a3b4d015c020e0c000303032902402a352b362a352b36343b4d02450202023a020e0e0c00032b2a4d193602020236000e0e0e0c00032b2a314d1a25020e0e0c00042e2a2509250926071e4a3b270765280d2a692211221122112c221022120e0e7b061200052f353c4d01f5010e0e0c0003038a2f3630372a354d00e4014d01e0010e0c000303722a37293b4d02d2010e0e0e0c0003294d03c7010c00022936294d04bd010e0e0c0002032a294d05b1010e0e0c00024d1ba801220c22122212326805221022102b304d07950122120e0e7b06120005293b4d0186010e0e0e0c00030310220e220e2f2e0e4f097301d000050202220d27040201326506cc2f35280e4d015c010e0c0003030e31314d0a5001310e0e0e7e0a00032f354d1c42014d013e010e0e0e0c0003030e31314d0a3001310e0e0e7e0a00032f3528094d0120010e0c000303162f364d1d14013330220d6b322b2b330e0e0e7e0c00032f354d1efe004d01fa000e0e0e0c0003034e2f36303731382b3b4d02e6000e0e0e0c00035687040200283d2c3b2d22132e4d1fcf000c00075029352d2f2e22132211121100010002000c0006221022102b2d4d20ae0022120e0e0e7b061200052f354d219e004d019a0002028f000e0e0e0c0003030e2f373333332c32340e7b060b00052f354d227a004d0176000e0e0e0c000303662f3630373434342c330e0e0c00052b29354d0059004d0155000e0e0c000303112937293b4d0246000e0e0e0c000364021f29354d2137004d0133000c0003030c2937292502501e373b6402044d231e00642a352b362c372d382d2d69292d2d2d6b29270a02013027041f040e0e0e|@5436,-8,I229,I253,@3005,@2680,@2683,@5437,@5439,@1634,@5453,@5460,@5466,-2,@5467,@5471,@1474,@1476,@2043,@2049,@2051,I218,@5473,@2986,@5474,@5479,@5482,@5485,@5490,-16,@5491,-10,@5369,@5435,-3,-9,@1581| 5435:O1|@5499 5436:S34|50415253455f5452454528292e67656e636f64652837296275696c64416f74283429 5437:C2,24|008056095618292b2f4d000b005667310e0e0e7b06050005|@5438,@1634| 5438:S37|50415253455f5452454528292e67656e636f64652837296275696c64416f74283429283129 5439:O1|@5440 5440:C9,200|00832d352e362f3730382f4d00b9000e0e0c00022c353d4d01ad000e0e0c00030371304d02a1000e0e0c00024d0398000e0c00023b2a293b4d018c000e0c000303032a021629362b3c4d047b000c0003292b25042504511e213b6565220c3b69220c383b4d0560003b2c6b2965220c0e0e0c0002040300292c452b46220d475029293b693b2a69220c2a31220c6b292709022f2c353b4d012e000e0e0e0c0003031b2c363b2a0e0e0e4f061b007000023b2a69312a31316b29270502054d0707001027051f040e0e|@5442,@2156,I229,@2667,@5443,I106,@5446,@5447,@5441| 5441:O3|@7141,@228,@5452 5442:S46|50415253455f5452454528292e67656e636f64652837296275696c64416f74283429616464436f6e737472283429 5443:O1|@5444 5444:C15,192|00802b4d00b9000e0e0c000203872b4d01ad000e0e0c000229352a37294d029f000c0002294d0397000c0002293b4d048e000e0e0e0c0003031c2a4d0581000e0e0c0002294d0677000c0002644d076f000c000202013b03372a4d0562000e0e0e0c00022b4d0857000c0002292f4d094e000e0e0e0c00032b2a3c4d0a41000e0e0c0004664d0b3700310e0e7d08000229270502242b4d0c26000e0e0e0c000203162b4d0d19000e0e0c00022936294d0b0d002e7d0500023b420e0e0e0e0e0e|@5445,@2073,@2075,@2077,@2501,I229,@2420,@2046,I218,@2435,@2462,@2465,@5443,@2107,@2109| 5445:S28|545950455f5452454528292e676574436f6e7374724c697374283129 5446:O1|2 5447:C7,152|00802b3b4d0090000e0c0003032d5607561a293b69563929383b4d017a003b2c6b296656480c0002040300292c452b462e475029293b692706025b2b352c362a374d0253000c000256302a2a4d0348000e0c00036503315627563a293b692d352a2a4d0432000e0e0e0c00032f3656880e0c0002040300292c452b4630475029293269292709020d294f050b002100022b2a69296565420e|@5449,I229,@5446,@2156,I24,@5448,@5447| 5448:O1|@5450 5449:S57|50415253455f5452454528292e67656e636f64652837296275696c64416f74283429616464436f6e737472283429616464436c697374283129 5450:C9,472|00812c3b4d00d0010e0c000303032b06d62b3b4d00c1010e0e0c000303032c06c82c4d01b2010e0e0e0c00024d02a8010e0c000203062c35296402054d039801102c4d0192010e0e0e0c00024d0288010e0c000203062c35296402054d037801102a2a4d0471010e0e0c00036503712c4d0164010e0c00024d025c010e0c000203062c35296402054d034c01102d4d0146010e0e0e0c00024d023c010e0c000203062d36296402054d052c01102d4d0126010e0e0e0c00024d021c010e0c000203062d36296402054d050c01102a2a4d0605010e0e0c00032c2a6929270506d22c4d01f3000204ed00eb000e0e0c00024d02e4000e0c000203062c35296402054d03d400102c4d01ce000e0e0e0c00024d02c4000e0c000203062c35296402054d03b400102a2a4d07ad000e0e0c00036503512c4d01a0000e0c00024d0298000e0c000203062c35296402054d038800102d4d0182000e0e0e0c00024d0278000e0c000203062d36296402054d05680010292e4d0661000e0e0c00032b2a6929270402522b4d014f000c00024d0248000e0c000203062b35296402054d033800102c4d0132000e0e0e0c00024d022800020222000e0c000203062c36296402054d051400102e2a4d060d000e0e0c00032b2a69292704430e|@5451,I229,I105,I218,@2102,I113,@2102,@5448,I234| 5451:S30|50415253455f5452454528292e67656e636f6465283729706c7573283229 5452:S35|616464436f6e7374723a206261646c792d666f726d656420616e642d6f722074726565 5453:C11,296|00832d352e362f382e4d001b010c00022b353d4d0111010e0e0c00030340323b69565829383b4d02fe003b2c6b568a29220f2c220f56d50e0e0c00050403002930452b46220e475029293b694d03d8002a69220d2a3b220e6b29270b02c62b354d03c4004d01c0000e0c000303b12b36294d04b3000c00024d05ac000e0c0002039529352a362a3729344d069a000e0e0e0c000364033a220c3b692b352a2a4d0785000e0e0c00032d3656ba2922122c22121211000100ffff0c0005040300292e452b4622114750292932692927090236220c3b69568829383b4d024a003b2c6b56ba2922122c22121211000100ffff0e0c00050403002930452b4622114750292934692927094d031d002a69312a3b326b29270502054d080d00106402054d0905001027041f04|@5455,@2156,I229,@5446,-1,I105,I218,@5456,@5448,@5454,@5454| 5454:O3|@7141,@228,@5459 5455:S48|50415253455f5452454528292e67656e636f64652837296275696c64416f742834296164644578636f6e737472283429 5456:O1|@5457 5457:C8,208|00812c37294d00c7000c00020342294d01bd000e0e0c00022d37294d00b1000e0e0c00020326294d01a5000e0e0c00022b4d029b000c00022a4d0293000c00022a2a4d038a00330e7e0a00033b65027729353c4d0479000e0e0c0003036829362a372a3b4d0568000e0c00032a3b4d055e000e0e0e0c0003303729353c4d044f000c0003033b29362a372a3b4d0540000e0c00032a3b4d0536000e0e0e0c00032f2b4d062a000e0e0e0c0003030e2e2a4d061c00220e0e0e7e0e00033b270402013b270502013b64430e0e0e0e0e0e0e|@5458,@2759,@2749,@5129,I251,I229,I253,I113| 5458:S33|56414c55455f4f505328292e697354686553616d65457863657074696f6e283229 5459:S37|6164644578636f6e7374723a206261646c792d666f726d656420616e642d6f722074726565 5460:O1|@5461 5461:C8,120|00812b352c362d372e382b354d0068004d0164000e0c00030a020009002f001e002b023b2b363b2a0e4f024b006000024d0044002a696602262b363b2a4f0337006000023b2a696602152b363b2a0e0e0e4f0423006000024d051c002a6966313b692b2a4d0610000e0c00032f2c2f2c6b292708430e0e0e|@5463,-2,I107,@5464,@5465,@5462,-1,@5448| 5462:C4,72|00802b3b4d0040000e0c000303033b02312b352c362a352b362c375658292c4d0125000e0e0c0003040300292f452b462d475029304f020f009100022a2a6929270b420e0e0e0e0e|@436,I229,@5460,@5462| 5463:S47|50415253455f5452454528292e67656e636f64652837296275696c64416f7428342961646444656661756c74283229 5464:C4,48|00802b3b4d0028000e0c000303033b021d2b352c365628292c4d0113000c00032b4f020b004100022a2a69292706420e|@436,I229,@5460,@5464| 5465:C4,72|00802b3b4d0040000e0c000303033b02312b352c362a352b362c375658292c4d0125000e0e0c0003040300292f452b462d475029304f020f009100022a2a6929270b420e0e0e0e0e|@436,I229,@5460,@5465| 5466:C4,64|00802b3b4d0038000e0c000303033b022d2b352c36562829383b4d0122003b2c6b5659566a292b2d3256b50e0e0c00052f4f020b008100022a2a6929270a420e|@436,I229,@5446,@5466| 5467:C7,104|00812b3b4d0060000e0c000303162c3b4d0054000e0c000303033b02054d0147001002422b352c362e4d023b000c00024d0334000e0c000203262e352f365649565a292b2e3156a50e0c00052c2f0e0e0e4f0413008100032a2a6929270702054d0504001065430e|@5469,I229,@5468,I105,I218,@5467,@5468| 5468:O3|@7141,@228,@5470 5469:S43|50415253455f5452454528292e67656e636f64652837296275696c64416f742834296d657267656c283229 5470:S6|6d657267656c 5471:O3|@7141,@228,@5472 5472:S31|7061747465726e206973206e6f742061207475706c6520696e20612d6f2d74 5473:S31|43616e27742066696e642061206669786564207265636f726420747970652e 5474:O1|@5475 5475:C14,176|00802b4d00a9000e0e0c000203392b4d019d000e0e0c000229363b2a293b4d028e000e0e0e0c000303032a021629362b3c4d037b000c0003292b25042504511e233b65270402662b4d0464000e0c000203222b4d0559000e0e0c000229352a364d064c000e0c00034d0744002d0e0e0e7d0400022b4d0837000c0002032a2b4d092d000e0e0c00022937294d0a21000e0e0c00024d0b18000e0c00024d0710002e0e0e0e7d0500024d0c040010420e0e|@5477,@2049,@2051,I229,I106,@1474,@1476,@2043,@5474,@2073,@2075,@2077,@2420,@5476| 5476:O3|@7141,@228,@5478 5477:S26|545950455f5452454528292e7265636f72645769647468283129 5478:S26|656e7472794e756d626572202d206e6f742061207265636f7264 5479:O1|@5480 5480:C5,48|00802b3b4d0028000e0c000303033b021b2b3c4d0119000e0e0c00034d0210000e0c00024d0308002a692965420e0e0e|@5481,I229,I107,@5479,@1634| 5481:S43|50415253455f5452454528292e67656e636f64652837296275696c64416f742834296275696c646c283129 5482:O1|@5483 5483:C17,208|00812b4d00c9000e0e0c0002035a2b4d01bd000e0e0c000229363b2a294d02af000c00024d03a8000e0c00020331293529352b362a344d0496000e0e0e0c000303032d02172d3c4d0585000e0e0c0003292b2506250626041e3c3b646602054d066d0010270402652b4d0763000c000203222b4d0859000e0e0c000229352a364d094c000e0c00032e2a4d0a42002f0e7e0600032b4d0b37000c0002032a2b4d0c2d000e0e0c00022937294d0d21000e0e0c00024d0e18000e0c00022f2a4d0a0e00300e7e0700034d0f040010430e0e|@5484,@2049,@2051,I105,I218,I24,I106,@958,@1474,@1476,@2043,@5482,@2073,@2075,@2077,@2420,@5476| 5484:S26|545950455f5452454528292e656e7472794e756d626572283229 5485:O1|@5486 5486:C7,88|00822b4d0051000e0e0c00024d0148000e0c000203362b352c362e3b4d0238000e0c000303072f2a692964021c2e3c4d0325000e0e0c0003302a2c4d0419000e0e0c00042c2a6929666502054d05080010440e0e0e0e0e0e|@5488,I105,I218,I229,I107,@5485,@5487| 5487:O3|@7141,@228,@5489 5488:S43|50415253455f5452454528292e67656e636f64652837296275696c64416f742834296d657267656e283329 5489:S6|6d657267656e 5490:C1,24|0080560a56195628292b302e5677327b060600050e0e0e0e|@5438| 5491:C7,88|00812b3b4d0050000e0c0003031e4d0146005618562956376b5617292f2c4d0236004d033200317b060600052b352c364d0424002c2b565856695677306807563729312c4d0510004d030c00330e0e7b060800050e0e0e0e|@5493,I229,@5494,@679,@5439,@5492,@630| 5492:C10,264|00802b3629354d00fe004d01fa000e0e0e0c0003038d2936294d02eb000c00024d03e4000e0c000203712936294d02d7000c00024d03d0000e0c000203552936293b4d01c2000e0e0e0c0003033d2a352c3531353238568c569b56aa292b302e56f90e0e0e0c000556c8312a56f70e0e0e0c0003293b692c2a694d008a002a69332a3b220c6b29270e02054d047900106402054d057100106402054d0669001064026229353d4d015e000e0e0e0c0003034e2c352d382e383b4d074b003b2c6b30383b4d0741003b2c6b567c568b569a292b302e56e90e0e0e0c000556b82e2a56e70e0e0e0c0003293b692c2a694d0016002a69220e2a3b22106b29271002054d0804001064420e|@5497,-2,I229,I105,I218,@5496,@5496,@5496,@5446,@5496| 5493:S48|50415253455f5452454528292e67656e636f64652837296275696c64416f7428342970726f636573734c697374283229 5494:C2,24|008056095618292b2f4d000b005667310e0e0e7b06050005|@5495,@1634| 5495:S51|50415253455f5452454528292e67656e636f64652837296275696c64416f7428342970726f636573734c697374283229283129 5496:O3|@7141,@228,@5498 5497:S60|50415253455f5452454528292e67656e636f64652837296275696c64416f7428342970726f636573734c6973742832296d6b436f6e73506174283129 5498:S34|6d6b436f6e735061743a206261646c792d666f726d65642070617273652d74726565 5499:C4,96|00832d352e362f382a353c4d0051000e0e0c00030a01002a000b004d014100100235313b690403002931452b4632475029293b693c2a69302a3b316b29270602162a363b2a4f0217005000023c2a692f2a3b306b292705661f040e0e0e0e0e0e|@5501,I107,@5502,@5500| 5500:C7,176|00802b3b4d00a8000e0c0003031c56075618562a293b69040300292e452b462d475029293b69270602802b352c3656282b372a4d0179000e0e0c00024d0270000e0c000203292a352a4d0163000c00024d025c000e0c000203112a352a2a4d034e000e0e0e0c00036402013b6402013b65032956275638564a293b692e362a2a4d042c000e0c00030403002930452b462f475029293269292709020d294f050f002100022b2a69296565420e0e0e0e0e|@5504,I229,I105,I218,@5297,@5448,@5500| 5501:S47|50415253455f5452454528292e67656e636f64652837296275696c64416f7428342961646453636f6e737472283429 5502:O3|@7141,@228,@5503 5503:S36|61646453636f6e7374723a206261646c792d666f726d656420616e642d6f722074726565 5504:S58|50415253455f5452454528292e67656e636f64652837296275696c64416f7428342961646453636f6e737472283429616464436c697374283129 5505:C3,24|00803b4d0011003c2e4f010b0030000464420e0e0e0e0e0e|@5507,@5508,@5506| 5506:C6,88|00822b3b4d0050000e0c000303032d02452b3529354d013f004d003b000c0003032e293629362a372f36313c4d0228000e0c00032c33220c2e57a70e0e0c0005292b2d0e0e4f030f00910004270602054d0404001064440e|@5510,I229,-11,I106,@5506,@5509| 5507:S35|50415253455f5452454528292e67656e636f64652837296275696c6454726565283129 5508:O4|0,@5446,0,0 5509:O3|@7141,@228,@5511 5510:S43|50415253455f5452454528292e67656e636f64652837296275696c64547265652831296d616b6574283329 5511:S30|6d616b6574202d206261646c7920666f726d656420706172736574726565 5512:C8,144|00835609293b4d0086000e0e0e0c000356292a3c4d0178000e0c00032a3b2b4d026d000e0e0c0004504d0363002c333b6b4d045b002d3c3b3b68053b3b3469220d35292b2a3b4d0546000e0e0e0c000303032902262a352b360402002b2d2b0e0e1606002a0012000000000450292b2a2506250626041e323b27046529352a36302b69220f2b452a463147270d1f040e|@5514,I253,I106,I255,-4,-5,I229,@5513| 5513:C9,168|00822d4d00a1000e0e0c00022937294d0195000e0e0c00020380294d0289000e0e0c000229352a36313532361208000100f9ff040300220d2c2c2c57d80c00055029352a362b3756c3323b2b4d0358000e0c00045057d7293b4d044b000c0003333b2b4d0341000e0e0c0004502e3b4d0535000e0e0c000303033202103b330e0e1606002200120000000002642e2e6922132b452a46270f02054d070a001065440e0e0e0e0e0e0e|@5516,@3005,@5517,@5520,I255,I253,I229,@5522,@5515| 5514:S37|50415253455f5452454528292e67656e636f64652837296465636c61726556617273283429 5515:O3|@7141,@228,@5523 5516:S47|50415253455f5452454528292e67656e636f64652837296465636c6172655661727328342973657441646472283329 5517:O1|@5518 5518:C2,16|00803c2c354d0007002d0e0e7e030003|@5519,I229| 5519:S5|4c6f63616c 5520:O1|@5521 5521:C1,16|00802b362c372a2a6965420e0e0e0e0e|@5519| 5522:C3,48|00802b3b4d0028000e0c000303091201000100f5ff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1884,I229,@5522| 5523:S7|73657441646472 5524:O2|0,@5525 5525:O2|@4638,0 5526:O2|0,@5527 5527:O2|@5528,0 5528:O2|-10,@5529 5529:O2|-3,@958 5530:O2|0,@5531 5531:O2|@5532,0 5532:O2|-10,@5533 5533:O2|-3,@5534 5534:O3|100,@3351,0 5535:C13,344|00862b362c372d380403002f31220e2c56890e0e0e0c00055029352a362b372d220c4d0032010e0e0e0c00033b3b220e3b4d0123010c000303033c020b220e2c4d0114010e0c00030310220e2211306a22100e0e0e0c000202cc3b33354d02f7004d03f3000c00030a030017007c006c00ac002c2212316a22110e0e0e0c000202a33336294d04cf000c00024d05c8000e0c000203352936293b4d06ba000e0e0e0c000303192a35322216221622162216220c2f22150e0e0e0c00086402092a0e4f079300d00002640209290e4f078700c0000264024e3336332a0e0e4f087700d0000364023e3336293b2a3b4d0667000c000303032902132a352b362a2c692a2a2505250526031e1d3b66654f094700c0000264020e33363b2a0e0e4f0a3700d0000265642936293b4d062a000e0e0e0c000303032f020c3b300e0e4f0b1700d00002642b35040200292b452c465029270f1f070e0e0e|@5537,@5538,@5541,-2,I107,I105,I218,I229,@5544,@5562,@5577,@5581,@5536| 5536:C3,48|00802b3b4d0028000e0c000303091201000100f3ff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1884,I229,@5536| 5537:S34|50415253455f5452454528292e67656e636f6465283729636f646550617474283729 5538:O1|@5539 5539:C9,392|00812c3b4d0080010e0c000303033c020b3b2c4d0071010e0e0c000303033b06cd2c4d0162010e0e0e0c00024d0258010e0c000203062c35296402054d034801102c4d0142010e0e0e0c00024d0238010e0c000203062c35296402054d032801102a2a4d0421010e0e0c00036503712c4d0114010e0c00024d020c010e0c000203062c35296402054d03fc00102d4d01f6000e0e0e0c00024d02ec000e0c000203062d36296402054d05dc00102d4d01d6000e0e0e0c00024d02cc000e0c000203062d36296402054d05bc00102a2a4d06b5000e0e0c00032c2a6929270502a02c4d01a3000c00024d029c00020290000e0c000203062c35296402054d038800102c4d0182000e0e0e0c00024d0278000e0c000203062c35296402054d036800102a2a4d0761000e0e0c00036503292c4d0154000e0c00024d024c000e0c000203062c36296402054d053c0010292d4d0635002e7e0500032b4d012b000c00024d0224000e0c000203062b36296402054d051400102d2a4d060d002e7e050003430e0e0e0e0e0e0e|@5540,I229,I105,I218,@2102,I113,@2102,@5538,I234| 5540:S35|50415253455f5452454528292e67656e636f6465283729696e74657273656374283229 5541:O1|@5542 5542:C8,200|00812c3b4d00c0000e0c0003030e3b2c4d00b4002d0e0e0e7e0400032b3b4d00a6000e0e0e0c000303033b02982c4d0196000e0e0e0c00024d028c000e0c000203062c35296402054d037c00102c4d0176000e0e0e0c00024d026c000e0c000203062c35296402054d035c00102a2a4d0455000e0e0c00036503492c4d0148000e0c00024d0240000e0c000203062c36296402054d053000102c4d012a000e0e0e0c00024d0220000e0c000203062c36296402054d051000102a2a4d0609002f7e0600033b430e0e|@5543,I229,I105,I218,@2102,I113,@2102,@5541| 5543:S28|50415253455f5452454528292e67656e636f64652837296571283229 5544:C6,112|00803b2c293b4d0066000e0e0e0c000303032a021629362b3c4d0153000c0003292b25042504511e233b65654d024000562a5635564c1206000100f8ff312f68072a3c4d0329000e0e0c00033b3b0e0e0e4f041b004000025659566b56702b2b2b2f33220e0e0e7b060b00050e0e0e0e|@5546,I229,I106,@5547,I107,@5545| 5545:C4,48|00802b56124d0027000c000303033b02182b3c4d0119000e0e0c0003294f020f001100022d2a692966420e0e0e0e0e0e|@5561,I233,I106,@5545| 5546:S45|50415253455f5452454528292e67656e636f6465283729636f64655061747428372970617474436f64652d2f32 5547:C10,240|00833b3b2d3b4d00e6000e0e0e0c000303033c020b303b4d00d5000e0e0c0003030e3030306a56372e0e0e0e7d0800023b3b3b0e0e4f01b700400004563b292b2a3b4d02aa000e0e0e0c000303054d039e00102a352b362b3b4d0293000c000303032a02172b3c4d0485000e0e0c00032a2a2505250526031e383b642704565a293528054d0268000e0c0003030c2c2a4d055c000e0c0003022129354d0650004d024c000e0c0003030c2c2a4d0540000e0c0003020528062a2e6a2d3b69332a4d072c000e0c00034d0824002a346a56a9220e2a22112d221432220c1213000100020022140e0e7b091100080e0e0e0e|@5549,@5541,@5550,I229,@52,I107,@3342,-3,@5557,@5548| 5548:C1,24|00802b352c362d37563756482f0e0e7b060300050e0e0e0e|@5560| 5549:S54|50415253455f5452454528292e67656e636f6465283729636f64655061747428372970617474436f64652d6465737061746368283429 5550:C10,208|0082570c2c2a4d00c6000e0e0e0c00036403032c02b356072c2a4d01b2000e0e0e0c0003640389570b292d2a3b4d029f000c000303054d039600102a352b362b3b4d028b000c000303032a02172b3c4d047d000e0e0c00032a2a2505250526031e353b6427050e0e0e4f056300010002292f4d065a000e0e0e0c000303192c3c4d074c000e0c00032a2e2b0e0e4f083f004100046402162c3c4d0733000c00032f2f2b0e0e4f082700410004646402192b3c4d071a000e0e0e0c00032e2e2b0e0e4f080b0031000464440e0e0e0e0e0e|@5552,I113,@5553,I229,@52,I107,@5551,I233,I106,@5550| 5551:C13,352|00802b362c382a354d0054014d0150010e0c000303442a36293b2a3b4d0140010e0c0003030329022e2a352b362a0e0e0e4f022b01710002292d4d0322010e0e0e0c000303032902012c2b2a2506250626041e383b27046606db562a2a2a4d04fe000e0e0e0c0003293b4d05f2000e0e0e0c000303c82c354d06e4004d07e0000e0c00030a02004100090079003b02ac2c363b2a293b4d01c6000e0e0e0c000303032a021629362b3c4d08b3000c0003292b25042504511e233b6565293c4d089e00330e7e0900032c363b2a293b4d018e000e0e0e0c000303032a021629362b3c4d087b000c0003292b25042504511e233b6565293c4d086600330e7e0900032c363b2a293b4d0156000e0e0e0c000303032a021629362b3c4d0843000c0003292b25042504511e233b6565293c4d082e0033020227000e7e090003021f294d091d000e0e0c00024d0a14000e0c000203062935296402054d0b040010656542|@5556,-2,I229,@5551,I233,@5538,@5541,-1,I107,I106,I105,I218,@2102| 5552:S68|50415253455f5452454528292e67656e636f6465283729636f64655061747428372970617474436f64652d646573706174636828342966696e6444656570657374283329 5553:O1|@5554 5554:C9,160|00812b3b4d0098000e0c000303033b028b2b4d018a000e0e0e0c00024d0280000e0c000203062b35296402054d037000102d2a4d0469000e0e0c00036403033c025a2b4d0159000e0e0c00024d0250000e0c000203062b35296402054d034000102d2a4d0539000e0e0c00036403033b022a2b4d0129000e0e0c00024d0220000e0c000203062b36296402054d061000102d2a4d0709002e7e050003430e0e0e|@5555,I229,I105,I218,@2102,I113,I234,@2102,@5553| 5555:S32|50415253455f5452454528292e67656e636f6465283729696e73696465283229 5556:S66|50415253455f5452454528292e67656e636f6465283729636f64655061747428372970617474436f64652d6465737061746368283429706174744465707468283129 5557:O1|@5558 5558:C9,392|00812c3b4d0080010e0c000303033b06cb2b3b4d0071010e0e0c000303032c06dc2c4d0162010e0e0e0c00024d0258010e0c000203062c35296402054d034801102c4d0142010e0e0e0c00024d0238010e0c000203062c35296402054d032801102a2a4d0421010e0e0c00036503492c4d0114010e0c00024d020c010e0c000203062c36296402054d05fc00102c4d01f6000e0e0e0c00024d02ec000e0c000203062c36296402054d05dc00102a2a4d06d5002f7e0600032c4d01cb000c00024d02c4000e0c000203062c35296402054d03b400102c4d01ae000202a6000e0e0e0c00024d02a0000e0c000203062c35296402054d039000102a2a020285004d0785000e0e0c00036503512c4d0178000e0c00024d0270000e0c000203062c35296402054d036000102d4d015a000e0e0e0c00024d0250000e0c000203062d36296402054d05400010292e4d0639000e0e0c00032b2a6929270402282b4d0127000c00024d0220000e0c000203062b36296402054d051000102d2a4d0609002e7e050003430e0e0e|@5559,I229,I105,I218,@2102,I113,@2102,@5557,I234| 5559:S30|50415253455f5452454528292e67656e636f646528372964696666283229 5560:S57|50415253455f5452454528292e67656e636f6465283729636f64655061747428372970617474436f64652d6465737061746368283129283129 5561:S30|50415253455f5452454528292e67656e636f646528372966726f6d283229 5562:C18,608|00812b3b4d0058020e0c0003031a1201000100f7ff561b56202b2b2b6a66561a2c0e0e0e7d0400022b352c362a3556392a2a4d012a020e0e0e0c0003293b4d021e020e0e0e0c0003030c312d0e4f030f0261000306dd313c4d0004020e0c000303562d362e371208000100f8ff5787293b4d04eb010c00032c2c2b4d05e1010e0e0c0004120c000100f7ff302a4d06cf010c000356da56eb56fc1211000100faff292b2d2f313422111219000100ffff221a0e7b091500082d371207000100f8ff5777293b4d0497010c00032c2c2b4d078d010e0e0c000432363337120d000100f8ff57d7293b4d0475010e0e0c00032c2c2b4d0569010e0e0c00041211000100f7ff220c2a4d0656010e0e0e0c00031213000100040012140001000500121500010006001216000100faff292b2d2f3102022201342211121e000100ffff0e0e0c0008221a3c4d0815010e0e0c00032922170e0e16030006011b0001000003121a00010006000356220f3b693f2a4d09ed003c6b2b36293b4d00e3000c000303064d0ada0002192936293b4d00d0000e0c000303062a352964020428092b69643d2c2b4d0bb8006b30362a2a69040200294d0caa00452b465029270802962b352a352a2a4d0d97000c00036503102b35293b4d0e89000e0e0c00036402013b03032902702b36293b4d0073000c000303064d0f6a0002192936293b4d0060000e0c000303062a352964020428092b69642b36293b4d0047000c000303064d103e0002192936293b4d0034000e0c000303062a352964020428092b69643d22142d2c6b293b69040200294d0c1200452b465029270727142705430e0e0e0e0e0e|@5564,I229,@5538,@5541,@5562,I253,@5565,@5448,@5563,I107,@650,@4519,@431,-1,I113,I231,@4519,@4519| 5563:O2|@5573,@5047 5564:S47|50415253455f5452454528292e67656e636f6465283729636f64655061747428372967656e436f6e73747273283229 5565:O2|@5566,@5047 5566:C10,224|00822d36294d00d7000c00020377294d01cd000e0e0c0002293b4d02c2000e0e0e0c000303582f2e4d03b4004d04b0003b56770e0e0c0006293528054d02a0000e0c0003030c3d2a4d0594000e0c0003022129354d0688004d0284000e0c0003030c3d2a4d0578000e0c0003020528062a3d6a303b693f2a2c3b6b6602044d075e00640257293b4d0255000e0e0c000303452d3528054d0246000e0e0e0c0003030e3d2e4d0538002e0e0e0e7e0600032d354d062a004d0226000e0e0e0c0003030e3d2e4d0518002e0e0e0e7e06000328062e3d6a02054d0805001064440e0e|@5568,@2680,@2683,I229,@205,@7342,@3342,-3,@501,@5567| 5567:O3|@7141,@228,@5572 5568:S26|56414c55455f4f505328292e6d616b65496e7665727365283329 5569:O1|@5570 5570:C1,8|00803b420e0e0e0e|@5571| 5571:S18|4c45585f28292e6e756c6c4c65782d283129 5572:S11|6d616b65496e7665727365 5573:C10,232|00822d36294d00df000c00020361294d01d5000e0e0c00022f2e4d02ca004d03c6003b56770c0006293528054d04b8000e0c0003030c3b2a4d05ac000e0c0003022129354d06a0004d049c000e0c0003030c3b2a4d0590000e0c0003020528062a3b6a303b693f2a2c3c6b27040270293b4d0473000c000303602d3528054d0466000e0e0e0c0003030c3b2e4d0558000e0c000302212d354d064c004d0448000e0c0003030c3b2e4d053c000e0c0003020528062e3b6a2f2e4d022b004d0327003b56770e0c0006293b692b2a693f2a4d0714003c6b270402054d080a001064440e0e0e0e0e0e0e|@5575,@2680,@2683,@205,@7342,I229,@3342,-3,@5343,@5574| 5574:O3|@7141,@228,@5576 5575:S24|56414c55455f4f505328292e6d616b654775617264283329 5576:S9|6d616b654775617264 5577:C18,488|00802b3b4d00e0010e0c000303161201000100f7ff561b56202b2b2b6a66561a2c8000022b352c362a3556392a2a4d01b6010e0e0e0c0003293b4d02aa010e0e0e0c0003030c2c0e0e4f039b0151000206da2c0e0e4f038f015100024d0488012a5788569c6b2f371209000100f8ff5797293b4d0571010e0e0c00032c2c2b4d0665010e0e0c00043436220c37120f000100f8ff57f7293b4d054c010e0c00032c2c2b4d0741010e0e0c000412130001000400121400010006001215000100faff292b22102e221431220e121d000100ffff0e0e0e0c000812170001000600035a333b693f2a4d08fe003c6b221236293b4d00f3000c000303064d09ea0002192936293b4d00e0000e0c000303062a352964020428092b69643d2c2b4d0ac8006b2e362a2a69040200290202b7004d0bb600452b465029270802a829352211352a2a4d0ca2000e0e0e0c00036503102935293b4d0d91000e0e0c00036402013b03042210027d2936293b4d007a000e0e0e0c000303064d0e6e0002192936293b4d0064000e0c000303062a352964020428092b69643d220d2b4d0f4b006b221336293b4d0041000e0e0c000303064d10360002192936293b4d002c000e0c000303062a352964020428092b69643b2c2b6a293b69040200294d0b0c00452b46502927082711270542|@5579,I229,@5538,@5541,@5577,@5578,I253,@5563,@5565,@650,@4519,@431,-1,I113,I231,@4519,@4638,@4519| 5578:C1,16|008056090304560702025608420e0e0e|@5580| 5579:S50|50415253455f5452454528292e67656e636f6465283729636f64655061747428372967656e45786e436f6e73747273283129 5580:S64|50415253455f5452454528292e67656e636f6465283729636f64655061747428372967656e45786e436f6e73747273283129636f646544656661756c74283129 5581:C17,536|00802b3b4d0010020e0c000303161201000100f7ff561b56202b2b2b6a66561a2c8000022b352c362a3656392a2a4d01e6010e0e0e0c0003293b4d02da010e0e0e0c0003030c2c0e0e4f03cb0151000206dc2d37293b4d00be010e0e0e0c000303064d04b201020929354d05aa012a69642f351209000100f8ff293b692c2a69402a692a293b4d008e010e0e0e0c000303033c021f293529354d057b014d0077010c0003030c2a36292503511e283b6402013b64640312294d065c010e0c00024d0554012a6964020129293b693f2a313c6b1210000100f7ff342a4d0739010e0e0c0003121200010005001213000100faff2b2b2b6a2704121100010004000e0e0c0002220e0e0e0e1603000a0112000100000212120001000600035a2b3b693f2a4d08f2003c6b2b36293b0202de004d00e4000e0c000303064d09da0002192936293b4d00d0000e0c000303062a352964020428092b69643d2c2b4d0ab8006b2f362a2a69040200294d0baa00452b465029270802952a352a352a2a4d0c97000c00036503102a35293b4d0d89000e0e0c00036402013b030329026f2a36293b4d0073000c000303064d0e6a0002192936293b4d0060000e0c000303062a352964020428092b69642b36293b4d0047000c000303064d0f3e0002192936293b4d0034000e0c000303062a352964020428092b69643d302d2c6b293b69040200294d0b1300452b4650292707270c2705420e0e0e0e0e0e0e|@5582,I229,@5538,@5541,@5581,@501,-3,@3353,@5448,@650,@4519,@431,-1,I113,I231,@4519,@4519| 5582:S57|50415253455f5452454528292e67656e636f6465283729636f64655061747428372970617474436f64652d666f6c64436f6e73747273283129 5583:C25,664|00892b3b4d0090020e0c000303033b06d62b3529354d017f024d007b020c000307d5293629352a362f36314d0269020e0e0c00024d0360020e0c000207cc313532363b2b293b4d004e020e0e0e0c000303032a021629362b3c4d043b020c0003292b25042504511e233b6565220d3c4d0525020e0e0c0003293b4d061a020e0e0e0c000303033c0218220f3b4d0708020e0c00032a2a4d08fe010e0e0e0c00036403054d09f10110293c4d04ea010e0e0e0c000322102a4d07dd010e0e0c00032965293b4d00d0010e0c00030345220f4d0ac4014d0bc0010e0c00034d0cb8012a4d0db3010202a6010c0003294d0ea7014d0da301020290010c000322173b221a220c2d4d0f9001020274010e0c00066602013b56b756c7293b4d077a010e0e0e0c0003293c4d046e010e0e0e0c00032c3b2b4d1061010e0e0c0004503b313b221a6a342a2a3b4d004d010e0e0c000303032902262a352b360403002b2d2b0e0e16110032011a000000000450292b2a2506250626041e313b27046529362a3722112a221d22136b221e0e0e0e0c0002293b69293b4d00ff000c000303032c02103b2d0e0e161200ee001900000000026428092a6912190001000100121a0001000100293b4d07cf000c0003293c4d05c6000e0e0e0c00032c3b2b4d10b9000e0e0c00045022123c4d00ac000e0c000303064d13a20002044d149c00121e0001000100293b4d078f000c00032226282f4d0d84000e0c000322254d0a7a004d0b76000e0e0e0c00032a2a4d0d6a000e0e0e0c0003332d221c2c6b27052a0c000264222122154d044f000c00034d1548002a2c3b6b22243c4d043d000e0e0c0003222b222b222b222b222b222b2f222b22212224222a0c000b2b2a6929271d02054d16140010270402054d170b0010641f0a0e0e0e0e0e0e0e|@5585,I229,-11,I105,I218,I106,I107,I234,I253,I231,@52,-1,@355,@5586,@344,@5587,@2986,I255,@5588,@5591,@5592,@4942,-4,@5584,@5584| 5584:O3|@7141,@228,@5595 5585:S33|50415253455f5452454528292e67656e636f646528372963674578707328313029 5586:S8|5061747465726e20 5587:S14|20697320726564756e64616e742e 5588:C12,200|00822d4d00c1000e0e0c00022937294d01b5000e0e0c000203a6294d02a9000e0e0c000229352a363135323633372b4d0395000e0e0c00024d048c002a3c3b3b6805040300220f2d2c2c57f80e0c00055029352a362b37314d036c000e0c0002343b2b4d0561000e0e0c00045057f7293b4d0653000c0003220c3b2b4d0548000e0c000450343c4d073d000e0e0c00032f3b4d0832000e0e0e0c000303033402103b220c0e1609001e00150000000002642f2f6922162c452b462a47271202054d0a04001065440e|@5590,@3005,@5517,@5520,I111,-5,I255,I253,I107,I229,@5589,@5515| 5589:C3,48|00802b3b4d0028000e0c000303091201000100f3ff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1884,I229,@5589| 5590:S43|50415253455f5452454528292e67656e636f64652837296367457870732831302973657441646472283329 5591:C3,48|00802b3b4d0028000e0c000303091201000100e9ff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1884,I229,@5591| 5592:O1|@5593 5593:C2,32|00802b352c362d372e382c2a2d3b2e3b3b3b68084d0008002a692705420e0e0e|@5594,-7| 5594:S23|434f44455452454528292e6d6b496e6c70726f63283129 5595:S6|636745787073 5596:C24,640|00873b32293b4d0076020e0e0e0c000303032a021629362b3c4d0163020c0003292b25042504511e233b656532562d0e0e0c00024d024802342a0e0e0e0c0002220c4d033a020e0e0e0c00024d0430020e0c00020324220c3529354d0521024d001d020e0e0c0003030829362936296502054d060a02106402054d06020210565c566b293b4d07f7010c000304020022102d2c2c4d08e8010e0c00055029352a3656bb293b4d07d7010c0003642a0e0e0e0c000256ca293b4d07c4010e0c000356ea2a220f4d01b7010c00032a3b2b4d09ad010e0e0c000450220f3c4d01a0010e0c00032928403b4d0a94010e0c0004293b22134d0988010e0c0004503c28403c4d0a7b010c0004221503084d0b70013169020d4d0c6801121500010003002b6a3b3c0e0e160d0056011700000000024d0e4c01221c221b2221220c2217221b3468084d0f39012a69221c3b2f2c2f2211221c122000010002000e0e0e0c00082f3b4d071a010e0e0e0c00034d0410010e0c00020314221f3b222422174d10ff004d11fb000c000602013b22193c4d00ee000e0e0e0c000303522a36293b4d00de000e0e0e0c000303042211020f3b2212161200ca001e000000000264293b4d00bd000e0e0c000303064d13b20002192936293b4d00a8000e0c000303062a352964020428092b696465028f22232221221f22212223220d3c2213221e222b122500010001000e0e0e0c000b2b36293b4d006c000e0c000303032a02103b2b0e0e1614005a001f000000000264293b4d004d000e0e0c000303042213020f3b22141615003a0020000000000264293b4d002d000e0e0c000303064d16220002192936293b4d0018000e0c000303062a352964020428092b69642704271a1f080e|@5598,I229,I106,@5599,I105,I218,-11,@958,I253,@5029,I255,I11,@5606,@5608,@5609,@5610,@5619,@5621,@2986,@5622,@4519,@5623,@5597,@4519| 5597:C3,48|00802b3b4d0028000e0c000303091201000100e2ff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1884,I229,@5597| 5598:S35|50415253455f5452454528292e67656e636f6465283729636f64654d61746368283829 5599:O1|@5600 5600:C6,80|00802b3b4d0048000e0c000303033b02392b352c362a354d0135004d0031000e0e0c000303112a3629373b2a4d0220000e0c00036502054d031500102a4d040f000c00022a2a69292705420e0e0e0e0e|@436,I229,-11,@5602,@5601,@5599| 5601:O3|@7141,@228,@5605 5602:O1|@5603 5603:C8,360|00812b354d0060014d015c010e0c000303232b37293b4d024e010e0e0e0c0003294d0343010c000203032e0205292f6929646506dd2b35280d4d012b010c000303312b36292e2a3b4d011c010e0c0003030329021b2a352b362b2b4d0409010e0e0c00032a2a2505250526031e263b666606db2b3528084d01ed000e0e0c000303322b38292e2a3b4d01dc000e0c0003030329021c2a352b362a362c2a4d04c7000c00032b2a2506250626041e263b27046602ad2b353c4d01ad000e0e0c0003030e2b372d2a4d049e002e0e7e0500032b3528094d0190000e0c000303312b36292e2a3b4d0180000e0c0003030329021b2a352b362b2b4d046d000e0e0c00032a2a2505250526031e263b666602522b02024d00354d054f004d014b000c0003030e2b372d2a4d043e002e0e7e0500032b354d0632004d012e000e0e0e0c0003031e2b362c372e2b4d041c00020211000e0c0003292b4d040e00300e7e0700032c430e0e0e0e0e0e|@5604,-8,I229,I253,@2776,@5602,-3,-9| 5604:S34|50415253455f5452454528292e67656e636f646528372966696e6456617273283229 5605:S36|66696e64416c6c56617273202d206261646c7920666f726d656420706172736574726565 5606:C2,32|008056074d0018002a69293b69040200293b452b4650292704420e0e0e0e0e0e|@5607,-10| 5607:S50|50415253455f5452454528292e67656e636f6465283729636f64654d61746368283829636f646544656661756c742d283129 5608:C2,24|00805608293b3b4d000d000e0e0c000450561764420e0e0e|@5607,I255| 5609:C4,48|00802b56144d0027000c000303033b02182b3c4d0119000e0e0c0003294f020f001100022d2a692966420e0e0e0e0e0e|@5561,I233,I106,@5609| 5610:C19,504|00822d3b4d00f0010e0c0003030a3b2d2c0e0e0e7d0500022d4d01db010c00024d02d4010e0c000203062d35296402054d03c40110293c4d04bd010e0e0c0003562d563d2b3b4d05ae010e0e0e0c000303033c0218293b4d069d010e0e0c00032c2a4d0792010e0e0e0c00036403054d088501102b3c4d097e010e0e0e0c00032a2a4d0672010e0e0e0c00032965293c4d0964010e0c00032d3b4d055a010e0e0e0c000303033c02182c3b4d0649010e0e0c00032e2a4d073e010e0e0e0c00036403054d083101102d3c4d092a010e0e0e0c00032d2a2c4d0a1d010e0e0c000451566c293c4d0b0f010c00036403635669294d0102010e0e0e0c00024d02f8000e0c00020344293529354d0cea004d0de6000e0e0e0c00030328293629352a3656b72b220f2b2d6b6456c80e0e0c0002293b6904020029220e452b465029270602054d0eb200106402054d0faa00106402a1566b292f2a3b4d0d9c000e0c000303054d089200102a352b362b3b4d0d87000c000303032a02172b3c4d0479000e0e0c00032a2a2505250526031e363b6427043b2a293b4d0d5e000e0e0e0c000303032a021629362b3c4d094b000c0003292b25042504511e233b6565292b4d1036000e0e0e0c000356aa29334d0928000e0c00034d1120002a3c3b3b68053f2d2b3b6b293b69040200292210452b465029270a2706440e0e|@5612,@5541,I105,I218,@2102,I107,I234,I253,I231,@52,I106,I255,I113,-11,I229,@5613,@5613,@5611,-5| 5611:O1|@5615 5612:S43|50415253455f5452454528292e67656e636f6465283729636f64654d61746368283829636f64652d283329 5613:O3|@7141,@228,@5614 5614:S34|636f64654d61746368202d206261646c7920666f726d656420706172736574726565 5615:C10,120|00812b3b4d0070000e0c000303033b02612b35294d0160000e0c00022937294d0255000e0e0c00020342294d0349000e0e0c00022935293b4d043c000e0c000331364d0532002b3c3b3b6805343c4d0626000e0e0e0c0003292c4d071a000e0e0e0c00032b2a6929270802054d0808001066430e0e0e0e0e|@5617,I229,@3005,@5517,@5520,I253,-5,I107,@5611,@5616| 5616:O3|@7141,@228,@5618 5617:S37|50415253455f5452454528292e67656e636f64652837296d616b654172676c697374283229 5618:S11|6d616b654172674c697374 5619:C1,16|00802b352c362d3756372e7b05030004|@5620| 5620:S43|50415253455f5452454528292e67656e636f6465283729636f64654d61746368283829636f64652d283129 5621:S27|4d61746368657320617265206e6f7420657868617573746976652e 5622:C3,48|00802b3b4d0028000e0c000303091201000100e4ff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1884,I229,@5622| 5623:C3,48|00802b3b4d0028000e0c000303091201000100e3ff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1884,I229,@5623| 5624:C14,232|00852f3c4d00e0002f564b0e0e0c0005561a5627293b4d01ce000e0e0e0c0003040200322d2c2c4d02bd000e0e0c00055029352a365677293b4d01ab000c0003642a0e0e0e0c00023c28403c4d0398000e0c00044d04900056a92b6a4d05880022123c2c2c4d067f00312210121300010002000e0e0c00082c3b4d016a000e0e0e0c00034d0760000e0c0002031d56c7293b4d0152000e0e0e0c0003293b4d0846000e0e0e0c00036502013b031422113b221022154d092f004d0a2b000c000602013b2a36293b4d0b1d000e0e0c0003030331020c3b320e0e4f0c0b00f0000264270e1f060e0e0e|@5626,@5508,I253,@5029,I11,@5627,@5629,@329,I218,I233,@5632,@2986,I229,@5625| 5625:C3,48|00802b3b4d0028000e0c000303091201000100f1ff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1884,I229,@5625| 5626:S34|50415253455f5452454528292e67656e636f6465283729636f646542696e64283629 5627:C2,24|00805608293b3b4d000d000e0e0c000450561764420e0e0e|@5628,I255| 5628:S48|50415253455f5452454528292e67656e636f6465283729636f646542696e64283629636f646544656661756c74283129 5629:O1|@5630 5630:C3,48|00802b352c362a3b4d0024000e0c0003030a3b2a2e0e0e0e7d050002040200294d010c000802002966420e0e0e0e0e0e|@5631,@5541,@4693| 5631:S42|50415253455f5452454528292e67656e636f6465283729636f646542696e64283629636f64652d283129 5632:S26|5061747465726e206973206e6f7420657868617573746976652e 5633:C3,48|00802b3b4d0028000e0c000303091201000100efff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1884,I229,@5633| 5634:S38|50415253455f5452454528292e67656e636f6465283729636f646553657175656e6365283429 5635:C53,1608|00833b3b3b31354d003d064d0139060e0e0c00030a1c00d4020d063a0045013a0040003a009e043a003a00dc03b205ed053a008601f5013a003a003a00e903fa047802cb0331043a00e5042a02c50381054d02f30506dc313732382a3b4d03e7050c0003294d04df050c00022936293b4d05d4050e0c0003032e5688293b4d03c6050e0e0e0c00032e3b4d03ba050e0e0e0c000356b72f2c2c2c22124d06a80522130e7b07120006294d079b050c00020377294d0891050e0e0c00025698293b4d0384050e0c00032f3b4d037a050e0e0e0c000356c7302c2c2c22134d0968050e0c0006293528054d055c050e0c0003030e3c2a4d0a500522120e0e7e14000329354d0b42054d053e050e0e0e0c0003030e3c2a4d0a300522120e0e7e14000328062a3c6a2706022f5688293b4d03170502020d050c00032e3b4d030a050e0e0e0c000356b72f2c2c2c22124d09f80422130e7b07120006270506ca3136323733382b3b4d03e0040e0c00032a2c2b220c221056c90c0006294d0ccb040c00024d0dc4040e0c0002030b29354d0bb8042a696402044d02af04270506d43136323729333333320e0e0e0c00052b354d0e96044d0592040e0e0e0c0003033a2b372c382a3b4d0380040e0c00032a3b4d0376040e0e0e0c000356a8293b4d0368040e0c000356c72d312c2f2d22144d0f570422157b081300072b343434330c00052a3b693f2a2c3b6b270506d33136323733382b343434330e0e0c00052a220c220c220c3402021a040e0c00052c220d220d220d220c0c00053d2c2c2c6b270606cd3136294d0c00040e0c00024d0df8030e0c0002032d2936293b4d05ea030e0e0e0c000303122a352934343433220c0202cf037b060c00052a4f10cb03500002640209290e4f10bf034000026406d831373238294d0cb0030e0c00024d0da8030e0c000203352936293b4d059a030e0e0e0c000303162a35293629220d220d220d220c220e0e0e7b060e00052b2b0e0e0e4f11730370000364020d2a2a020261034f1163036000036506cb3136323829294d1253030c00020323294d1349030e0e0c000229352a364d143c03020232030e0c00032502501e273b640227294d1526030e0e0e0c00020319294d1619030e0e0c00022935294d0d0d030e0e0c00026502013b6403185657293c220d344d17f6024d18f2020e0e0e0c00066402013b2a4d19e3020202d9020c0002293c4d1ad6020e0e0e0c00036403064d1bc90202142b2b4d1cc1020e0e0c000328064d1bb6022b6a645678293b4d03ab020c0003293c4d1da2020e0e0e0c0003220d28234d1e940202028a020e0c000329314d1e86020e0e0e0c00032e2a2d3b3c3b3b3b68084d1f72022a69270a06dd4d20680206dd31363b2a0e0e0e4f215b025000026506ce31372932323231337b060a00053c28403b4d2240020e0c0004293b32220c568a0e0e0c0005293b4d052a020e0e0e0c000303064d231e0202192936293b4d0514020e0c000303062a352964020428092b69646506d4313732380402002a34342c56ab0c00055029352a362d2a0e0e4f24e301900003293b4d05da010e0e0e0c000303032b020c3b2c0e0e4f25c701a0000264293b4d05bd010e0e0c000303064d26b20102192936293b4d05a8010e0c000303062a352964020428092b6964270706d03136020287012932020481017f010e0e4f247f01500003293b4d0576010e0e0e0c000303064d276a0102192936293b4d0560010e0c000303062a352964020428092b69646506d8313629323232310e0e0c00054d283c012a696506dc313632372a33333332020224010e0e0e0c00052a567d0e0e0c0002293629354d2914014d0510010e0c0003032429362b38293b4d2a00010e0c0003030d3b2b0e4f2bf300b000026402044d2ce9006502044d2de20056974d2edc0034692210304d2fd3002d221222142f3c121400010006000202bb000e0e0c00094d30b800302b2f6b270902aa3136323729333333320c00052b343434330c0005294d3197006928092a693d2d2b4d208b006b4d2986002a3b6a27070279313632372a3333333202026c000e0e0e0c000556674d3266003169220d2d2d2d220f0202530022112f3b1211000100060022120e0e0e7b0a0e0009313632372a333333320c00052a343434330c00053d2b2b4d2029006b2704021e313632372a333333320c00052a343434330c00053d2b4d330a002c6b2704661f040e0e0e|@5637,-13,I107,@431,I253,@3005,I229,@5638,@2680,@2683,@5047,@3342,-3,I105,I218,-8,@5048,@5641,@5644,@1474,@1476,@2043,@2049,@2051,@5473,@2986,@5474,I113,@465,@5482,I106,@344,-7,@501,@5656,I11,@4519,@5658,@5661,@4519,@4519,-10,-1,@5541,@5662,@509,@509,@5663,@4642,-6,@5665,@5636,@464| 5636:C1,24|00802b352c362d372e3856472f0e0e7b060300050e0e0e0e|@5664| 5637:S48|50415253455f5452454528292e67656e636f6465283729636f646553657175656e6365283429636f646567656e283429 5638:O2|@5639,@5048 5639:C9,104|00842f4d0061000e0e0c00024d0158002a354d0252000e0e0e0c00036403112f4d034400303030305667317b080700072e3c4d0432000e0e0e0c0003304d0527002b31313156770e0e0c0007294d0617003c3b3c4d0110003b3b68084d0708002a69661f050e0e0e|@5640,@2667,-1,I229,@501,I106,@465,I48,-7| 5640:S29|56414c55455f4f505328292e636f6465457846756e6374696f6e283529 5641:C5,88|00803b2c0e4f004f00100002402a692a293b4d0142000e0e0e0c000303033c021f293529354d022f004d012b000c0003030c2a36292503511e283b6402013b64640312294d0310000e0c00024d0208002a69640201296642|@5643,@5642,I229,-3,@3353| 5642:C3,56|00802b3b4d0030000e0c000303033b02212b352c365729573857472d2c2c2c57950c00052d4f010f006100022a2a69292708420e0e0e0e0e|@436,I229,@5642| 5643:S50|50415253455f5452454528292e67656e636f6465283729636f646553657175656e6365283429636f646567656e2834292f36 5644:C5,72|00813b2c293b4d003e000e0e0e0c000303032a021629362b3c4d012b000c0003292b25042504511e233b65653b4d0217002e0e0e0e4f030f0030000328092a6966430e0e0e0e0e0e|@5646,I229,I106,@5647,@5645| 5645:C11,264|00812b3b4d0000010e0c0003035f5604292e4d01f2000e0e0e0c0003402a692a293b4d00e2000e0e0e0c000303033c021f293529354d02cf004d00cb000c0003030c2a36292503511e283b6402013b64640312294d03b0000e0c00024d02a8002a6964020129293b69270402962b3529352a362e365749575857672d2c2c2c57b50c0005588e5898293b4d047a000e0e0e0c00030402002d2d2c2c4d0569000e0e0c00055029352a3656e8293b4d0457000c0003220e2a4d064d000e0e0c00034d074400121300030002002e22172d680529220f0e1608002e00150001000003293b4d0022000e0e0e0c000303032f02103b300e0e1609000e00160000000002642713430e0e0e0e|@5653,I229,@4537,-3,@3353,I253,@5029,@5482,@5654,@5645,@5652| 5646:S50|50415253455f5452454528292e67656e636f6465283729636f646553657175656e6365283429636f646567656e2834292f38 5647:O1|@5648 5648:C2,8|00804d000200100e|@5650,@5649| 5649:O3|@7141,@228,@5651 5650:S51|50415253455f5452454528292e67656e636f6465283729636f646553657175656e6365283429636f646567656e283429283129 5651:S17|6d697373696e6720696e207265636f7264 5652:C3,48|00802b3b4d0028000e0c000303091201000100ecff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1884,I229,@5652| 5653:S58|50415253455f5452454528292e67656e636f6465283729636f646553657175656e6365283429636f646567656e2834296465636c697374283229 5654:C3,48|0080560a2c2a4d0026000e0e0e0c00036403155607293b4d0115000e0e0c00036456182c0e8000022b56192c0e800002|@5655,I113,I253| 5655:S67|50415253455f5452454528292e67656e636f6465283729636f646553657175656e6365283429636f646567656e2834296465636c6973742832296c6f6f6b466e283129 5656:C6,136|00802b3b4d0080000e0c000303064d017600026c2b352c365629563856472d2c2c2c56950e0c00052d4f025b00610002293b692b2a69402a692a293b4d0048000e0c000303033c021f293529354d0337004d0033000c0003030c2a36292503511e263b6402013b64640312294d0418000e0c00024d0310002a6964020129270a420e0e0e0e0e0e0e|@5657,I229,@501,@5656,-3,@3353| 5657:S59|50415253455f5452454528292e67656e636f6465283729636f646553657175656e6365283429636f646567656e283429636f6e734c697374283129 5658:C7,160|00812c3b4d0098000e0c000303033b028a2c3529352a362f36564812060002000b004d017a000e0e0e0c000203033c022012060002000a00293b4d0262000e0e0e0c00032d2a4d0356000e0e0e0c00036503033b020e29312d578f0e0e0c0004293b696456682e332b3056b50e0c00052d340e0e0e4f0427009100032a2a69293b4d001b000c000303032d020c3b2e0e0e4f050b00b0000264270a430e0e0e0e|@5660,I229,I218,I253,I113,@5658,@5659| 5659:C3,48|00802b3b4d0028000e0c000303091201000100f5ff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1884,I229,@5659| 5660:S59|50415253455f5452454528292e67656e636f6465283729636f646553657175656e6365283429636f646567656e283429636f64654c697374283229 5661:C3,48|00802b3b4d0028000e0c000303091201000100f6ff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1884,I229,@5661| 5662:C6,72|00802b3b4d0040000e0c000303033b02352b352c362a375738293b4d0129000e0e0c0003575756672d2c4d021a002d2d4d0314000e0c00062f4f040b008100022a2a6929270a420e|@436,I229,I253,@205,@5047,@5662| 5663:C1,24|00802b352c362d372e3856472f0e0e7b060300050e0e0e0e|@5664| 5664:S48|50415253455f5452454528292e67656e636f6465283729636f646553657175656e6365283429636f646567656e283129 5665:O2|@5666,0 5666:O2|-8,0 5667:C30,992|00832b29354d00d7034d01d3030c0003030c2937292502501e153b64021b293528064d01ba030e0e0e0c000303062936296402054d02a803106456175627293b4d039c030e0c0003293c4d0492030e0e0e0c00032c3b2b4d0585030e0e0c0004505659293b4d0377030c00035679293b3c4d056b030c000450304d0662030e0e0e0c00024d0758030e0c00020340303529354d084a034d0146030e0e0e0c0003032429362938293b4d0334030e0c00032b39293b4d0328030e0c00032d37292b2e6a270602054d091603106402054d0a0e031029352a362b372b4d0b02030e0e0e0c0002293c4d0cf6020e0e0e0c00034d07ec020e0c000207cf221028284d0dde020e0e0e0c00032a4d0ed3024d0fcf020c00032a2a4d0dc6020e0e0e0c00032928294d0db9020e0e0c0003121200010006000402002a352b364d10a2022b692c2a452b46502c3c344d1193020c0003221a22182b332e121e00010005000e0e0e0c000629322c2210221230122000010004000e0e0c0007121b0001000100293b4d035b020c00032b220c2b3b22134d0e4d023b3b68084d1245022a69121f000100010012200001000100293b4d032f020c0003293c4d1326020e0e0e0c00032c3b2b4d051902020202010e0e0c00045012230001000300293b221e4d0500020e0c0004501224000100020012250001000100293b4d03e7010c0003040200322d2c2c4d14d9010e0e0c00055029352a36122a0001000100293b4d03c2010e0e0e0c0003293c4d04b6010e0e0e0c0003652a0e0e0e0c00024d15a401221e4d169e010e0e0e0c00033f2a2c3b6b122d0001000100293b4d0386010e0e0e0c0003293c4d047a010e0e0e0c000322324d176e014d0d6a010e0e0e0c00032d2a2c3b3c3b3b3b68084d1256012a692236031722373b4d0349010e0e0c00034d1840012a2c3b6b64020129293b69293b4d012f010c00030304220c020f3b220d1619001e0137000000000264272706cb22123b4d030c010e0c000322133b3b4d0500010e0c00045022114d1af5004d0df1000e0e0c000356fc0402002a352b364d10df002b692c2a452b46502c221722154d1bce00322d121b00010005000e0e0c000629314d1cba00220d220f2f121d00010004000e0e0e0c0007221c3b344d05a0000e0c0004501218000100010012190001000100293b4d0387000c0003293c4d137e000e0e0e0c00032c3b2b4d0571000e0e0c000450121c0001000300293b22174d055c000e0c000450121d0001000100293b4d034a0002023b000e0e0e0c0003293c4d043a000e0e0e0c00033122112b3b3c4d0e2a003b3b68084d1222002a692225030b4d18180022142b3b6b020129293b692715270d1f040e0e0e0e0e0e0e|@5669,-3,I229,@5670,I253,I106,I255,I105,I218,-11,@5672,@5672,@5674,I113,@344,-1,@355,@205,@5681,-7,I107,@5029,@465,@5686,@5345,-4,@5668,@5345,@465,@465| 5668:C3,48|00802b3b4d0028000e0c000303091201000100cbff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1884,I229,@5668| 5669:S49|50415253455f5452454528292e67656e636f6465283729636f646553657175656e6365283429636f646550726f63283429 5670:O3|@7141,@228,@5671 5671:S42|676574466e426f64793a206e6f74206120636f6e73747261696e656420666e2d65787072657373696f6e 5672:O3|@7141,@228,@5673 5673:S41|636f646550726f633a20626f6479206f6620666e206973206e6f74206120636c61757365206c697374 5674:O1|@5675 5675:C18,488|00802b354d00e0014d01dc010e0c00030a100001016d01220022002200d40022002200220022000d015300220019012200220025003c06d22b363b2a293b4d02a6010e0e0e0c000303032a021629362b3c4d0393010c0003292b25042504511e233b656606d02b37293b4d047a010e0e0e0c000329294d056e010e0e0e0c0002031f294d0661010e0e0c000229352a364d0754010e0c00032502501e263b640227294d0842010e0e0e0c00020319294d0935010e0e0c00022935294d0a29010e0e0c00026502013b6503033c0216293b4d0414010e0c00034d0b0c012d0e0e0e7d0400026406cb2b372c38294d0cf8000e0c0002293c4d02ee000e0e0e0c0003030e2b4d0ce1002f0202d4007d060002296602cc2b37294d0ccd002d7d0400022b36294d0cc1002d7d0400022b37293b4d02b4000202a8000e0c000303054d0da6001029293b4d029e000e0e0e0c000303054d0e9200102936293b4d0289000e0e0c000303062a3529640207292502501e2c3b652935644d0c6d002d7d0400022b37293c2a3b4d025e000e0e0e0c0003030329024a2a352b362b3c4d0249000e0e0c0003032c2a354d0f3c004d02380002022c000e0c000303112a362935294d0c25000e0e0c00026502054d1019001002012b2a2a2505250526031e573b6666420e0e0e0e0e0e0e|@5677,-3,I107,I229,I106,I253,@1474,@1476,@2043,@2049,@2051,I218,@5474,@5674,@5678,@2102,-11,@5676| 5676:O3|@7141,@228,@5680 5677:S26|50415253455f5452454528292e7475706c655769647468283129 5678:O3|@7141,@228,@5679 5679:S26|7475706c6557696474683a20656d707479206c6f63616c646563 5680:S8|6765745769647468 5681:O1|@5682 5682:C8,128|00812b2d4d0078000e0c000303172b4d016d000e0e0c00024d0264002a3c3b3b68056402563b2c0e0e4f035300100002402a692a293b4d0446000e0e0e0c000303033c021f293529354d0533004d042f000c0003030c2a36292503511e283b6402013b64640312294d0614000e0c00024d050c002a696402012966430e0e0e0e|@5684,I113,I111,-5,@5683,I229,-3,@3353| 5683:C6,72|008056082c2a4d003e000e0e0e0c00036403033b022c2b4d012d000e0e0c00024d0224002a3c3b3b68052d3c4d0318000e0c00030e4f040f002100022a2a69292704420e0e0e0e0e|@5685,I234,I111,-5,I107,@5683| 5684:S26|50415253455f5452454528292e6d6b4172675475706c65283229 5685:S38|50415253455f5452454528292e6d6b4172675475706c652832296d6b4172674c697374283129 5686:O1|@5687 5687:C3,32|00812b3c4d0018000e0c000303052c3b69020a3b3b4f01070010000264430e0e|@5689,I229,@5688| 5688:C7,112|008056072c2a4d0066000e0e0e0c00036403033b02545608293528054d0150000e0c0003030c2c2a4d0244000e0c0003022129354d0338004d0134000e0c0003030c2c2a4d0228000e0c0003020528062a2e6a2d3c4d0417000c00030e4f050f002100022a2a69292704420e0e0e0e0e|@5690,I113,I229,@3342,-3,I106,@5688| 5689:S24|50415253455f5452454528292e6c6f616441726773283229 5690:S33|50415253455f5452454528292e6c6f6164417267732832296d6b61726773283129 5691:C2,32|0084560b4d00180056285639564a6b3131312d32322f3b56a7220c7b0a090009|@5693,@5692| 5692:C1,72|00802b352c362d372e38564903242a2c2b56780e0e0c00042d2d2d2d56970e0e0e0c0005293b692b2a6928092a692704020e2c2c2c2c5687330e0e7b060700052704420e0e0e0e0e|@5694| 5693:S48|50415253455f5452454528292e67656e636f6465283729636f646553657175656e6365283429636f6465416c74283529 5694:S56|50415253455f5452454528292e67656e636f6465283729636f646553657175656e6365283429636f6465416c742835296367457870283129 5695:C8,176|00802b37293b4d00a6000e0e0e0c0003294d019b000c00022937294d0291000e0e0c00020380294d0385000e0e0c000229352a36577a293b4d0074000e0c0003579a2a3c4d0468000e0c00032a3b2b4d055d000e0e0c00045057ba293b4d004f000c000357da2a3c4d0444000e0c00032a3b2b4d0539000e0e0c000450323b314d052c000e0c00045057f8293b4d001f000c0003333b2b4d0515000e0e0c0004503b270d02054d060600102704420e0e|@5696,I253,@3005,@5517,@5520,I106,I255,@5515| 5696:S58|50415253455f5452454528292e67656e636f6465283729636f646553657175656e63652834293c7061747465726e3e2d73657441646472283129 5697:C34,1048|00802b3b4d0010040e0c000303033b06d42b352935293b4d01fd030e0e0c00032b362c37293b4d01ee030e0e0e0c00032e38293b4d01e0030e0c00033039293b4d01d4030e0c0003220c362e4d02c8030e0c00022937294d03bd030e0e0c00020310294d04b1030e0e0c00022935296502054d05a20310293b4d019b030c000356f8334d0691030e0e0c00022a2a4d0786030e0e0e0c0003220e4d087a030e0e0e0c00024d0970030e0c00020315220e3529353b4d0a60032b4d0b5b030c00046502054d0c510310220f3c2a3b4d0047030c0003030329022f2a352b362b3c4d00350302022c030e0e0c0003030d2a36294d0a23030c00026402012b2a2a2505250526031e393b66651215000200060003033c020129293c4d0dfc020e0c00034d09f4020e0c00022c2a2a3b4d00e8020e0c0003030329021b2a352b362a2c4d0ed5020e0e0c00032a2a2505250526031e263b6665220f3c4d00bc020e0c0003030c293c4d0db0020e0c000302013b29030e333b3b4d0f9f020c0004503b02013b121a0002000200121b0002000200293b4d0183020c0003293c4d0e7a020e0e0e0c00032c3b2b4d0f6d020e0e0c000450121e0002000400293b4d015a020e0e0e0c000312200002000400293b3c4d0f46020e0e0e0c0004503b221d0e1610003602230000000002221a3c4d0029020e0e0c00030319220c3c4d0e1b020c000329220d4d1111020e0e0c00036402584d120502220d22112b0e0c0003402a692a293b4d00f2010e0e0e0c000303033c021f293529354d13df014d00db010c0003030c2a36292503511e283b6402013b64640312294d14c0010e0c00024d13b8012a696402012966220c4d15ab014d16a7010c0003294d179f016928282a6922142a69664d1891010e0e0c00021225000100f7ff122600010003000402002a352b364d1973012b692c2a452b46502c2f3333332d1231000100fcff0e0e0e0c000622173c4d0051010e0e0c0003030329020f4d1a43012a22194d1b3c010e0c0004122e00010003000402002a352b364d1926012b692c2a452b46502c2f222222122233222d2e123a00020005000e0c00071235000200020012360002000200293b4d01f4000e0c0003293c4d1cea000e0e0e0c00032c3b2b4d0fdd000e0e0c00045012390002000400293b221c4d0fc8000e0c000450123a0002000200293b4d01b6000e0e0e0c0003293c4d0eaa000e0e0e0c00033122192b3b22294d1599003b3b68084d1d91002a693b22313b22324d0f85000e0e0c0004502227031e4d1e770022312c3b6b22350e161f006a004200010000022a2a692966025622303c4d0e56000e0e0e0c00034d1e4c002a2d3b6b22393c4d1c41000e0e0c00033b22303b22332d0e0e1620002e004800000000064d1e240022352b3b6b22390e0e161f0016004600010000022a2a692e2a69292708273f420e0e0e0e|@5699,I229,I253,@3005,@5517,@5520,@5700,@2156,@344,I105,I218,@5674,@5702,@5705,I113,I106,I255,@5707,@5681,@5711,-3,@3353,-1,@355,@375,@369,@205,@465,@4530,I107,-7,-4,@5697,@5698| 5698:C18,584|00842e3b4d0040020e0c000307dd1201000100eaff293c4d012d020e0e0c000364032b1201000100f0ff293c4d0218020e0c00031203000100f7ff4d0309022b3c2c3b68053f322b3b6b270402c51201000100eaff3e2a6958295838293b4d04e6010e0e0e0c00030402002d2d2c2c4d05d5010e0e0c00055029352a365888293b4d04c3010c0003642a0e0e0e0c0002120a000100f0ff293c4d02ab010c0003120c000100f7ff4d039d012b3c2c3b68052d3b69293b4d008e010e0e0e0c000303042212020b3b22134f067b01f00002643f2a2d3b6b1211000100eaff280b322b6a293b692c2a6929020228003b4d0056010e0e0e0c00030304220d020f3b220e16070042011700000000026428092a69271506d32e352f3658285838293b4d0425010e0e0c0003293c4d021a010e0e0e0c00032c3b2b4d080d010e0e0c000450586a293b4d04ff000c0003588a293b3c4d08f3000c000450220c4d09e9004d0ae5000e0e0c00034d03dc004d0bd8003c220f3b680529344d0ccc000e0c000322103b4d00c1000e0e0c0003030329020c3b2a0e0e4f0daf00d0000264220f3c4d0ea4000e0c00032214220e4d0298000e0c000329220e2d312e0e0e0e160f0086001500010000061211000300020012120003000200293b4d046c000e0c0003293c4d0e6200020259000e0e0e0c00032c3b2b4d0851000e0e0c00045012150003000400293b220f4d083c000e0c00045012160003000200293b4d042a000e0e0e0c0003293c4d021e000e0e0e0c000331220f2b3b3c3b3b3b68084d1009002a6927191f050e0e0e|@5715,I229,I113,I106,-5,I253,@5029,@5716,@5717,I255,@5345,@344,-1,@5686,@5714,I107,@5698,-7| 5699:S62|50415253455f5452454528292e67656e636f6465283729636f646553657175656e63652834293c7061747465726e3e2d6c6f616446756e44656373283129 5700:O3|@7141,@228,@5701 5701:S6|6c7641646472 5702:O1|@5703 5703:C4,80|00822b354d0048004d0144000e0c000303122b372e2e2b4d0235002f0e0e0e7b050600042b353c4d0125000e0e0c0003031a2b362c37292f0e0c000229316929312e4d020a00327b050900042d440e0e|@5704,-3,I229,@5702| 5704:S73|50415253455f5452454528292e67656e636f6465283729636f646553657175656e63652834293c7061747465726e3e2d6c6f616446756e446563732831296765745061747473283329 5705:O3|@7141,@228,@5706 5706:S23|6261646c7920666f726d65642070617273652074726565 5707:C12,160|00802b3b4d0098000e0c000303033b028d2b352c362a352b362c373b4d0180002d4d027b000c00041207000100f7ff293c4d036b000c0003640320294d0460000e0c00024d0558000e0c000203062935296402054d064800100204280d2a693c28404d073a004d0836000e0e0e0c00043c28404d0729004d0825000e0e0c00042e2e2d2d2d68054d0915002a69320e0e0e4f0a0b00b100022a2a6929270d420e|@436,I229,@5708,@5702,I113,I105,I218,@2102,@633,I11,-11,@5707| 5708:O1|@5709 5709:C1,8|00802b420e0e0e0e|@5710| 5710:S84|50415253455f5452454528292e67656e636f6465283729636f646553657175656e63652834293c7061747465726e3e2d6c6f616446756e446563732831296d6174636865732d2831297061744c6973742d283129 5711:O1|@5712 5712:C5,88|00812b3b4d0050000e0c000303033b02452b352c362e2b4d013d000e0e0c00032f3c4d0132000e0e0e0c0003292b4d0226000e0e0e0c0003312e4d011a000e0e0e0c0003292e4d030e000e0e0e0c00032b2a69292708430e|@5713,I229,I106,@5681,@5711| 5713:S73|50415253455f5452454528292e67656e636f6465283729636f646553657175656e63652834293c7061747465726e3e2d6c6f616446756e446563732831296d616b6541726773283229 5714:C3,40|00802b3b4d0020000e0c00030304560902142b352c36290e0e4f010b002100022b2a69292704420e|@1884,I229,@5714| 5715:S73|50415253455f5452454528292e67656e636f6465283729636f646553657175656e63652834293c7061747465726e3e2d6c6f616446756e446563732831296d616b6546756e73283529 5716:C3,48|00802b3b4d0028000e0c000303091201000100f1ff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1884,I229,@5716| 5717:C3,48|00802b3b4d0028000e0c000303091201000100ebff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1884,I229,@5717| 5718:O1|@5719 5719:C4,48|00802b3b4d0028000e0c000303033b021d2b352c362a37293b4d0113000c00032b4d020b000c00022a2a69292706420e|@436,I229,I253,@5718| 5720:C11,264|00802b3b4d0000010e0c000303033b06d32b35293b4d00ef000c000303592c36294f01e300210002293b4d00da000e0e0e0c000303033c022c294d02ca000e0e0e0c00024d03c0000e0c000203062936296402054d04b000103b2a4d00a9000e0e0c000364030329020a4d059a002a69293b696465028c29352a362e3656482c4d0684000e0c00022a2a4d077a000e0e0e0c000329282d4d076d000e0e0c00031209000100f7ff569957ae312b2e2c56f40c000557cf57de56e9292b2d2f221134121600020007000e0c0007220c0e0e0e1608003200120001000002293b4d00260002021e000e0e0e0c000303032a02103b2b0e0e1609000e0014000000000264271064420e0e0e|@5722,I229,@5723,I105,I218,@2102,-9,@5736,@344,@5720,@5721| 5721:C3,48|00802b3b4d0028000e0c000303091201000100eeff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1884,I229,@5721| 5722:S59|50415253455f5452454528292e67656e636f6465283729636f646553657175656e63652834293c7061747465726e3e2d636f646544656373283129 5723:C15,312|00802b3b4d0030010e0c000303033b06d02b35293b4d001f010c0003030d2c36294f0113012100026406d629352a362e362b4d0202010e0e0e0c0002575a293b4d03f4000e0c0003577a2a3c4d04e8000e0c00032a3b2b4d05dd000e0e0c0004503b2e293b4d00cf000c000303033b021829352a362a0e0e0e4f06bb00d0000250292503511e223b6564300e0e4f01a700b10002303b4d009e000e0e0e0c0003030329028e303529354d078b004d0087000c0003037729362a37293b4d0378000e0c0003294d086f000c00022937294d0965000e0e0c00020314294d0a5900020253000e0e0c00022935296502054d0b460010293c3022131218000100fdff020232000e0e0c0005313b4d002a000e0e0e0c000303032902103b2a0e0e160c00160017000000000264270702054d0d07001064270b64420e|@5725,I229,@5723,@5726,I253,I106,I255,@5730,-8,@3005,@5517,@5520,@5700,@5734,@5724| 5724:O3|@7141,@228,@5735 5725:S64|50415253455f5452454528292e67656e636f6465283729636f646553657175656e63652834293c7061747465726e3e2d636f6465526563757273697665283129 5726:O1|@5727 5727:C7,136|00802b354d0080004d017c000e0c0003030e2b37294d026f002d0e0e7d0400022b354d0362004d015e000e0e0e0c000303372b362c372a4d024d000e0e0c00022a4d0243000c0002293b4d013a000e0e0e0c000303032a020c3b2b0e0e4f04270050000264270402172b354d0519004d0115000e0e0c000303052b3b6902013b420e0e0e0e0e0e0e|@5729,-3,I229,@5726,-9,@5728,-8| 5728:C3,40|00802b3b4d0020000e0c00030304560102142b352c36290e0e4f010b002100022b2a69292704420e|@1884,I229,@5728| 5729:S74|50415253455f5452454528292e67656e636f6465283729636f646553657175656e63652834293c7061747465726e3e2d636f646552656375727369766528312967657456617273283129 5730:C10,136|00802b354d0080004d017c000e0c0003036d2b37293b4d026e000e0e0e0c0003294d0363000c00022937294d0459000e0e0c00020340294d054d000e0e0c000229352a361208000100f8ff2b3b2b4d0636000e0e0e0c0004505888293b4d0227000c00032c3b2b4d061d000e0e0c0004503b270602054d070e0010270402054d08050010420e0e0e|@5732,-8,I229,I253,@3005,@5517,@5520,I255,@5731,@5731| 5731:O3|@7141,@228,@5733 5732:S77|50415253455f5452454528292e67656e636f6465283729636f646553657175656e63652834293c7061747465726e3e2d636f646552656375727369766528312973657441646472657373283129 5733:S36|7365744164647265737320202d206261646c7920666f726d656420706172736574726565 5734:C3,48|00802b3b4d0028000e0c000303091201000100f3ff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1884,I229,@5734| 5735:S31|56616c4465636c61726174696f6e202d206e6f742061207661726961626c65 5736:O1|@5737 5737:C7,120|00802b354d0070004d016c000e0c000303062b362964025f2b354d025a004d0156000e0e0e0c0003030e2b37294d0347002d0e0e7d0400022b354d043a004d0136000e0e0e0c000303292b362c372a354d0024004d0120000e0c000303062a362964020c294d030f002e0e0e7d0500026502044d05010042|@5739,-8,I229,-3,@5736,-9,@5738| 5738:S9|3c7061747465726e3e 5739:S69|50415253455f5452454528292e67656e636f6465283729636f646553657175656e63652834293c7061747465726e3e2d636f6465446563732831296765744e616d65283129 5740:C3,48|00802b3b4d0028000e0c000303091201000100eeff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1884,I229,@5740| 5741:C3,48|00802b3b4d0028000e0c000303091201000100ebff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1884,I229,@5741| 5742:C3,48|00802b3b4d0028000e0c000303091201000100e9ff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1884,I229,@5742| 5743:C4,48|00802b3b4d0028000e0c000303033b021d2b352c362a0e0e0e4f0113002100022a4f020b003100022a2a69292705420e|@436,I229,@5744,@5743| 5744:C16,280|00802b36293b4d000e010e0e0e0c00032d382a4d0101010e0e0c00022937294d02f5000e0e0c00020314294d03e9000e0e0c000229352a362a2a696602054d04d6001029352a36578a293b4d00c9000e0e0c000357aa2a3c4d05bc000e0c00032a3b2b4d06b1000e0e0c0004502e3b2d4d06a4000e0c00045057c8293b4d0097000c00032f3b2b4d068d000e0e0c000450303b4d0081000e0e0c0003220c354d0775004d0871000e0e0c000303064d0966000259220c354d0a5d004d0859000e0e0c00030342220c37293b4d0049000e0e0c000312120002000200293b4d0037000c000312140002000900121500020008002d2c4d0b20002d2d4d0c1a000e0e0e0c0006270602054d0d0c00104d0e07002b2b3b6b271042|@5746,I253,@3005,@5517,@5520,@5700,I106,I255,-5,I229,@5747,-8,@205,@5047,@5745,-4| 5745:O3|@7141,@228,@5750 5746:S57|50415253455f5452454528292e67656e636f6465283729636f646553657175656e63652834293c7061747465726e3e2d636f64654578283129 5747:O4|4,@5748,@3308,0 5748:O2|@464,@5749 5749:O2|@3311,@509 5750:S6|636f64654578 5751:O1|@5752 5752:C4,48|00802b3b4d0028000e0c000303033b021d2b352c362a36293b4d0113000c00032b4d020b000c00022a2a69292706420e|@436,I229,I253,@5751| 5753:C3,48|00802b3b4d0028000e0c000303091201000100eeff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1884,I229,@5753| 5754:C5,88|00822d36293b4d004e000e0e0e0c00032e352f362b4d013f000c00020402002a2c2b57970e0c00045029352a362a3b4d0225000e0e0c000303032e020c3b2f0e0e4f03130090000264342a452b462709440e0e0e0e0e0e0e|@5756,I253,@2501,I229,@5755| 5755:C3,48|00802b3b4d0028000e0c000303091201000100f8ff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1884,I229,@5755| 5756:S61|50415253455f5452454528292e67656e636f6465283729636f646553657175656e63652834293c7061747465726e3e2d676574436f6e73747273283329 5757:C3,48|00802b3b4d0028000e0c000303091201000100f1ff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1884,I229,@5757| 5758:S18|4c6973742e6d61705061727469616c283229 5759:C28,688|00834d00aa0256175629563a6b2f354d019d024d0299020e0e0c000303922f363038293b4d0388020e0c0003294d047f020c00025657293b4d0374020e0c00032b2a4d056a020e0e0e0c00032d4d065f020c0002293b4d0256020e0e0e0c00030316404d0749020e0e0c0002294d083f023b3b6b2965020429372964312a220f220f220e0e0c0005293b693f2a2f3b6b324d091b020c00020402002b2b22152c22120e0e0e0c000550293529270f06d92f354d0afa014d02f6010e0e0e0c0003037a2f37293b4d03e6010e0e0e0c00035637293b4d03d8010e0c00032b4d0bcf010c000203064d0cc60102152b4d0dbf010c0002292b4d05b6010e0e0e0c0003642c3b4d02a9010e0e0c00030316404d079d010e0e0c0002294d0893013b3b6b296502042c3729640402002b2b220e2c340c000550293529270806d52f353e4d026d010e0e0c0003038b2f3630372a4d0e5d010e0e0c00024d0f54010e0c0002036b2a36293b4d0246010e0e0e0c000303532b354d1038015668336a040300322e2c2c4d112901020222010e0e0c00055029352a372d220e220e2c220d0c0005293b69293b4d0207010c000303032c020c3b2d0e0e4f12f700c000026428092a69270802054d13e700106402054d14df00106506cb2f354d15d5004d02d1000e0e0c000303a32f3630374d16c2005648316a040300302d2c2c4d11b3000c00055029352a36402a692a293b4d02a10002029a000e0e0c000303033c021f293529354d178b004d0287000c0003030c2a36292503511e2b3b6402013b64640312294d186c000e0c00024d1764002a69640201290402002a3122102c220d0e0c0005502935293b69293b4d0244000e0c000303032f020c3b300e0e4f193300d000026428092a69270c02242f353f4d0220000e0c000303122f36293030302f3102020b000e7b060800054d1a040010641f04|@5761,@5762,-2,I229,I253,@4945,@5056,@2383,@1893,I48,@2380,-8,@2365,@431,@2728,I105,I218,@5776,@4925,@5778,@5760,@5760,-7,@5779,-3,@3353,@5780,@5760| 5760:O3|@7141,@228,@5781 5761:S47|535452554354555245535f28292e67656e636f646553747275637473283229737472756374757265436f6465283429 5762:C17,384|008356095617293b4d0074010e0c0003040200322d2c2c4d0165010e0e0c00055029352a365667293b4d0053010c0003642a0e0e0e0c00023c28403c4d0240010e0c0004040200280b28404d0331014d022d010e0e0c0004293b404d0421010e0e0c0004504d0517012a693c28402b4d020d010e0e0c00042c2a454d03010146502c3c28403b4d02f6000e0e0e0c000422114d06ea000e0e0e0c00024d07e0002b2d332213220d12160001000100221a221112190001000200680a4d08c1002a692b2a3b4d09b8000e0c0004333b4d00ae000e0e0e0c0003030922142218453c4602922d3b4d0097000c00034d0a900030692a2a4d0b88000e0c0003402a692a293b4d0c7a000e0e0e0c000303033c021f293529354d0d67004d0c63000c0003030c2a36292503511e283b6402013b64640312294d0e48000e0c00024d0d40002a6964020129293b69293b4d0c31000e0e0c000303042213020f3b2214160f001e001b00000000026428092a69221c2a453b46270827121f040e0e0e0e0e0e0e|@5764,I253,@5029,I11,@501,I255,-1,@2412,@5765,@5772,@2410,@5774,@4537,I229,-3,@3353,@5763| 5763:C3,48|00802b3b4d0028000e0c000303091201000100e7ff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1884,I229,@5763| 5764:S64|535452554354555245535f28292e67656e636f646553747275637473283229737472756374757265436f64652834296d61746368537472756374757265283429 5765:C49,1840|00822c4d0029070e0e0c000207d42c4d011d070e0e0c0002294d0213070c00024d030c070e0c000207cc294d0201070e0e0c00024d04f8060e0c0002562d4d05ee060e0e0e0c0002294d06e306324d07de060e0e0e0c0004294d08d3060c00024d09cc060e0c000203062935296402054d0abc0610294d02b6060e0e0e0c0002294d03ab060c00020388294d04a1060e0e0c0002292f4d0b96060e0e0e0c0003644d098b060c000203135669293b3b4d0c7d060e0e0c0004503b6402013b2a4d046d060e0e0c0002568b293528054d0d5e060e0e0e0c000303102a2a4d0e500602023e010e0c0003022529354d0f40064d0d3c06020226010e0c0003030c2a2a4d0e2c060e0c0003020528062a2c6a6602405669293b3b4d0c15060e0e0c000450567c293b4d1007060c00032d4d11ff050c000203064d12f60502152d4d02ef050c0002292b4d13e6050e0e0e0c000364662b3b4d0dd8050e0c00030316404d14cd050e0e0c0002294d15c3053b3b6b296502042b372964303b4d0db2050e0e0e0c00030316404d14a5050e0e0c0002294d159b053b3b6b29650204303729640402002c2c2c2c56ea0c00055029352a36294d097a050e0e0e0c0002031356c9293b3b4d0c69050e0e0c0004503b6402013b56d829220d2e4d1654050e0c00045056e7293b4d1047050c0003220e2a4d173d050e0e0c000365031e56e7220d3c4d182c050e0c00032a3b2b4d0c21050e0e0c0004503b6502013b270d02013b6406d02c4d1909050e0e0c000207dd2c4d1afd040e0e0c0002293729353b4d0def040c000307cf2936563d4d05e2040e0e0e0c0002294d1bd704334d07d2040e0e0e0c0004294d08c7040c00024d09c0040e0c000203062935296402054d1cb004102e36294d1da8040e0c000203112a363b2a4d0d9a040e0e0e0c00036402013b3036294d1d89040e0e0c0002031e2c36294d1e7b040c0002030e294d1f71040e0e0c00023c6402013b6402013b2d3729353b4d0d5a040e0e0e0c000307d1293629334d0b4a040e0e0e0c00034d094004020235040e0c000203033c02072d03033c02012b031b56c929020265033b3b4d0c1d04020257030e0e0c0004503b6402013b2e07cf220c4d2005040e0e0c00024d21fc030e0c000203a456db293528054d0dec030e0c0003030c2b2a4d0ee0030e0c0003022129354d0fd4034d0dd0030e0c0003030c2b2a4d0ec4030e0c0003020528062a2d6a220e4d22b3030c00024d0fac032a69294d23a503692c2a69402a692a293b4d0d97030c000303033c0223293529354d0f87034d0d83030202c6010c0003030c2a36292503511e293b6402013b64640312294d2464030e0c00024d0f5c032a6964020129270702d856dc293b4d104a030e0e0e0c0003293c4d183e030202c2000e0e0e0c00036556ee0e0e0c0002293528054d0d24030e0c0003030c2b2a4d0e18030e0c0003022129354d0f0c034d0d08030e0c0003030c2b2a4d0efc020e0c0003020528062a2d6a220e4d22eb020c00024d0fe4022a69294d25dd02692c2a69402a692a293b4d0dcf020c000303033c021f293529354d0fbf024d0dbb020c0003030c2a36292503511e253b6402013b64640312294d24a0020e0c00024d0f98022a6964020129294d158d023c3b3c4d2686023b3b68084d277e022a69270902bc2c037b56db293528054d0d6b020c0003030c2b2a4d0e60020e0c0003022129354d0f54024d0d50020e0c0003030c2b2a4d0e44020e0c0003020528062a2d6a293528054d0d31020e0e0c0003030c3c2a4d0e24020e0c0003022129354d0f18024d0d14020e0c0003030c3c2a4d0e08020e0c0003020528062a3c6a65023e56db293528054d0df0010e0c0003030c2b2a4d0ee4010e0c0003022129354d0fd8014d0dd4010e0c0003030c2b2a4d0ec8010e0c0003020528062a2d6a646502aa56b9293b3b4d0cb0010e0c0004502d032c56cc293b4d10a0010e0c0003220d4d2096010e0e0e0c000256ff332c2c2c3b4d2885010e0e0c00062704026c56cc293b4d1074010e0c0003220d4d206a010e0e0e0c000256ff332c2c2c3b4d2959010e0e0c000630033e293528054d0d49010e0e0c0003030c3c2a4d0e3c010e0c0003022129354d0f30014d0d2c010e0c0003030c3c2a4d0e20010e0c0003020528062a3c6a02012927056456c829342c4d1606010e0e0e0c00045056d7293b4d10f7000c0003220c2a4d17ed000e0e0c000365031e56d7343c4d18dd000e0e0c00032a3b2b4d0cd1000e0e0c0004503b6502013b270b02013b6502b72c4d2ab9000e0e0c000203aa2c4d2bad000e0e0c0002561d4d05a2000e0e0e0c0002294d2c9700314d0792000e0e0e0c0004294d0887000c00024d0980000e0c000203062935296402054d2d7000103b2d4d2e69000e0e0c00022b4d2e5f000c00022a2a2a4d0855000e0e0c00024d094c000e0c000203392a352b362b4d083d000e0e0c00024d0934000e0c0002031d2b352c362c2b0e4f2f2300e00003502b2a2506250626041e433b6502013b6502013b270902013b440e0e0e0e0e0e|@5767,@2336,@2335,@2728,@2731,@2734,@2412,@7305,@2291,I105,I218,@1568,I113,I255,I229,@3342,-3,I253,@2365,@431,@5056,@1893,I48,@3543,I231,I106,@2354,@2353,@7300,@1568,@5768,@2680,@2683,@2667,@2686,@2156,@509,@3353,@463,-1,-7,@5638,@5047,@2348,@2347,@7308,@1568,@2501,@5766| 5766:C12,344|00812c3729353b4d004d010e0e0c000307d329362e382e3729353b4d0039010e0e0c000303b42936292d4d012a010e0e0e0c00034d0220010e0c000203135759293b3b4d0311010e0e0c0004503b5102023b50575b293528054d00fb000c0003030c2a2a4d04f0000e0c0003022129354d05e4004d00e0000e0c0003030c2a2a4d04d4000e0c0003020528062a2c6a577829302c4d06c0000e0c0004505787293b4d07b3000c0003312a4d08aa000e0e0e0c000365031e5787303c4d0999000e0e0c00032a3b2b4d038d000e0e0c0004503b6502013b270402765749293b3b4d03750002026c000e0e0c000450575c293b4d0763000c0003577f332b302c3b4d0a55000e0e0c0006579829322c4d0647000c00045057a7293b4d073b000c0003332a4d0832000e0e0e0c000365031e57a7323c4d0921000e0e0c00032a3b2b4d0315000e0e0c0004503b6502013b27066602013b64430e0e|@5771,I229,I113,I218,I255,@3342,-3,@3543,I253,I231,I106,@5047| 5767:S69|535452554354555245535f28292e67656e636f646553747275637473283229737472756374757265436f64652834296d61746368537472756374757265283429552d283329 5768:O1|@5769 5769:C3,16|00804d000a002c4d0105002d7e030003|@5770,-1,I229| 5770:S11|53696d706c6556616c7565 5771:S90|535452554354555245535f28292e67656e636f646553747275637473283229737472756374757265436f64652834296d61746368537472756374757265283429552d28332970726f63657373436f6e7374727563746f72283229 5772:C1,16|00802b352c362d3756372e7b05030004|@5773| 5773:S69|535452554354555245535f28292e67656e636f646553747275637473283229737472756374757265436f64652834296d61746368537472756374757265283429552d283129 5774:C2,16|00805607292d4d0006002e0e7e040003|@5775,@451| 5775:S76|535452554354555245535f28292e67656e636f646553747275637473283229737472756374757265436f64652834296d61746368537472756374757265283429636f64654c6973742d283129 5776:C1,32|00802b352c3656280403002a2d2d2c56870c000550292704420e0e0e0e0e0e0e|@5777| 5777:S56|535452554354555245535f28292e67656e636f646553747275637473283229737472756374757265436f6465283429636f6465642d283129 5778:C3,48|00802b3b4d0028000e0c000303091201000100f4ff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1884,I229,@5778| 5779:C1,32|00802b352c3656280403002a2d2d2c56870c000550292704420e0e0e0e0e0e0e|@4952| 5780:C3,48|00802b3b4d0028000e0c000303091201000100f3ff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1884,I229,@5780| 5781:S30|737472756374757265436f64653a206e6f74206120737472756374757265 5782:C2,32|00802b352c360403004d0013002c2c2c56770e0e0e0c0005502966420e0e0e0e|@4952,I48| 5783:O2|0,@5784 5784:O1|@5785 5785:C2,8|00804d000200420e|@5786,@501| 5786:S40|535452554354555245535f28292e67656e636f646553747275637473283229636f6465642d283129 5787:O3|103,@373,@5788 5788:S21|537461746963206572726f72732028706173733329 5789:O1|@5865 5790:O1|@5791 5791:C8,184|00854d00b2002c0e0e0c000250303c4d01a5000e0e0c00032c0c0002504d0297002c0e0e0e0c0002502f314d0389000e0e0c0003293c4d017e000e0e0e0c00032d0c0002504d046f002d0e0e0e0c0002502f314d0361000e0e0c0003293c4d0156000e0e0e0c00032e0c0002504d0547002e0e0e0e0c0002502f314d0339000e0e0c0003293c4d012e000e0e0e0c00032f0c0002504d061f002f0e0e0e0c0002502f3c4d0111000e0e0c00032f0c000250402f2f7d0b0002|@5793,@5794,@5795,@5862,I107,@5863,@5864,@5792| 5792:S6|2c2072756e3a 5793:S29|434f4d50494c45525f424f445928292e7072696e7454696d6573283629 5794:S15|54696d696e67202d2070617273653a 5795:O2|@5797,@5796 5796:B8|0000000080842e41 5797:C6,64|00812b3b4d0038000e0c000303032b02013b2968014d0127002a694d022100302a0c000256572a2a4d0314000e0c0003292e4d040a00340e7e0b00030e0e0e0e|@5799,I233,-1,@5800,I128,@5798| 5798:O2|@5805,@5804 5799:S11|54696d652e666d74283229 5800:O1|@5801 5801:C10,88|00802b4d0051000e0e0c0002030a2b4d0145002c0e8000022b4d023b004d0337000c00034d0430000e0c00024d0528002a4d0623000c00032d4d021b004d0717000c00034d0110000e0c00022a2a4d080600300e7e060003|@5803,I105,I135,32768,I109,@5800,@5802,I127,I110,I125| 5802:B8|000000000000e040 5803:S15|5265616c2e66726f6d496e74283129 5804:O2|@5854,@5853 5805:C13,304|00812b354d0028014d0124010e0c00030a03002f007d000800c9000404002d2a56370e0e0e0c00035029352a362b372c382c2c2c2c4d02f700340e7b0609000506d02b36293b4d03e6000e0e0e0c0003030e2d28064d04d7002e0e0e7e0500032935293b4d05c8000e0c000303033c020b2928c84d06b8000e0c000303054d07ae00102e2a4d04a7002f0e0e7e0600032b36293b4d0398000e0c0003030e2d28064d088b002e0e0e7e0500032935293b4d057c000e0c000303033c020b2928c84d066c000e0c000303054d096200102e2a4d085b002f0e0e7e0600032b36293b4d034c000e0c0003030e2d280c4d0a3f002e0e0e7e0500032935293c4d0530000e0c000303033c020f2928c84d062000020218000e0c000303054d0b1200102e2a4d0a0b002f0e0e7e060003430e0e0e|@5807,-2,I107,@5808,I229,@5820,I234,I233,@78,@5832,@78,@5806,@78| 5806:O1|@5846 5807:S11|5265616c2e666d74283229 5808:O1|@5809 5809:C14,192|00832d3c4d00b8000e0c0003031a2e3b2e2e4d01aa000e0e0e0c0005287e2a4d029d002e7e0700032c4d0393004d048f000c00030a03005700790008007f004d057d002c2a0c00024d0674002a4d026f000c0003313b4d0066000e0e0e0c000303064d075a000219314d0353004d084f000c000328452a4d0245000e0e0c0003642a2a4d023900317e0a0003022c4d092e002c2a0e0c00024d0a24002a4d021f000c00032928294d021500307e0900034d0b0c0002044d0c06001f040e0e0e0e|@5811,I229,@5808,@344,-1,I107,@5812,@5815,I48,@355,@5816,@5818,@5819,@5810| 5810:S3|302e30 5811:S20|494545455265616c2e746f537472696e67283429 5812:O1|@5813 5813:C7,64|00802b3b4d0038000e0c000303064d012e0002242b352c362a4d0223004d031f000c00032a4d0417000c00022a2a4d050e00310e7e070003420e0e0e0e0e0e0e|@5814,I229,I48,-1,@355,@5812,@344| 5814:S20|494545455265616c2e646f646967697473283129 5815:S2|302e 5816:O1|@5817 5817:C7,64|00802b3b4d0038000e0c000303064d012e0002242b352c362a4d0223004d031f000c00032a4d0417000c00022a2a4d050e00310e7e070003420e0e0e0e0e0e0e|@5814,I229,I48,-1,@355,@5816,@344| 5818:S4|6e616e28 5819:S3|696e66 5820:O1|@5821 5821:C20,472|0081280f2d4d00cf010c00034d01c8010e0c0002033628112d4d00bb010c00030304287e02044d02ae0128102e4d00a7010c000303064d039e0102044d0498012a2a4d0592012f0e7e0600032b3c4d0686010e0e0e0c00032d3d2b4d0779010e0e0c000429352a362b372b4d0869010e0e0c0002293b4d095e010e0e0e0c00030345313b4d0950010e0c000303064d02460102194d0a4001322a0e0e0e0c0002282e2a4d0531010e0e0c00036528302a4d0524010e0c0003294d0b1b014d0517010c00036506d4293c4d090b010c00030339313b4d0900010e0c000303064d02f60002194d0cf000322a0e0e0e0c0002282e2a4d05e1000e0e0c0003652d2a4d05d5000e0e0c000364026f2c3b3c4d0dc6000e0e0e0c000429282e4d05b9000e0e0c00032b3c4d0eae000e0e0e0c00032f3c2b4d0da1000e0e0c00042b2a4d0596000e0e0e0c0003220d2f4d0e89000e0e0c0003293c4d067e000e0e0e0c00034d0f74002a2a0e0e0e0c00022d2a4d0566000e0e0e0c000327092928454d0557000c00032d3c4d0e4e000e0e0e0c0003294d1043004d113f00020211000c00032b2a4d0532000e0e0e0c000327042b3b4d1224000e0c00034d011c000e0c0002030e287e2a4d050f00340e0e7e0b0003292707430e0e0e0e|@5823,I124,I218,I48,@5824,@5819,@344,I106,I117,I223,I229,@5825,@5828,@5829,@1447,I107,@5822,-1,@355,I113| 5822:O1|@5831 5823:S14|5265616c2e736369466d74283229 5824:S3|6e616e 5825:O1|@5826 5826:C6,56|00802b3b4d0030000e0c000303064d01260002202b3c4d021e000e0e0e0c00034d0314000e0c000228302a4d0409002e7e040003420e0e0e|@5827,I232,I48,I107,@5825,@344| 5827:S25|5265616c2e736369466d742832296164645a65726f73283129 5828:S2|4530 5829:O1|@5830 5830:C6,56|00802b3b4d0030000e0c000303064d01260002202b3c4d021e000e0e0e0c00034d0314000e0c000228302a4d0409002e7e040003420e0e0e|@5827,I232,I48,I107,@5829,@344| 5831:C6,56|00802b3b4d0030000e0c000303064d01260002202b3c4d021e000e0e0e0c00034d0314000e0c000228302a4d0409002e7e040003420e0e0e|@5827,I232,I48,I107,@5822,@344| 5832:O1|@5833 5833:C22,496|0081280f2d4d00e7010c00034d01e0010e0c0002033628112d4d00d3010c00030304287e02044d02c60128102e4d00bf010c000303064d03b60102044d04b0012a2a4d05aa012f0e7e0600032c3e2d4d069d010e0e0c000429352a362b372b4d078d010e0e0c00022b3b4d0882010e0e0e0c00030372303b4d0974010e0c00030304283002602b4d0a65010e0e0c00024d0b5c012a2a0e0e0e0c00024d0c50012a4d054b010c000329314d0542010e0e0e0c0003220c2f4d0d35010e0e0c000329324d0e2a010e0e0e0c00034d0f20012a2a0e0e0e0c00022d2a4d0512010e0e0e0c0003270906d4292c4d0802010e0e0e0c0003035e2b2a4d0df4000e0c00034d10ec002a2a0e0e0e0c00022f2a4d05de000e0e0e0c0003343b4d09d2000e0e0e0c000303064d02c60002194d11c000220c2a0e0e0c0002282e2a4d05b1000e0e0c0003652a2a4d05a5000e0e0c0003270502722c3b2d4d1295000e0e0c000429282e4d0589000e0e0c00032b2e4d0d7e000e0e0e0c00032f2f2b4d1271000e0e0c00042b2a4d0566000e0e0e0c0003220c2f4d0d59000e0e0c000329324d0e4e000e0e0e0c00034d1344002a2a0e0e0e0c00022d2a4d053600020208000e0e0e0c000327092b3b4d1424000e0c00034d011c000e0c0002030e287e2a4d050f00330e0e7e0a0003292706430e0e0e0e|@5835,I124,I218,I48,@5824,@5819,@344,I117,I223,I232,I229,I111,@5836,@5815,I107,I106,@5839,@5841,@5843,@1447,@5834,I113| 5834:O1|@5845 5835:S14|5265616c2e666978466d74283229 5836:O1|@5837 5837:C6,56|00802b3b4d0030000e0c000303064d01260002202b3c4d021e000e0e0e0c00034d0314000e0c000228302a4d0409002e7e040003420e0e0e|@5838,I232,I48,I107,@5836,@344| 5838:S16|5265616c2e6164645a65726f73283129 5839:O1|@5840 5840:C6,56|00802b3b4d0030000e0c000303064d01260002202b3c4d021e000e0e0e0c00034d0314000e0c000228302a4d0409002e7e040003420e0e0e|@5838,I232,I48,I107,@5839,@344| 5841:O1|@5842 5842:C6,56|00802b3b4d0030000e0c000303064d01260002202b3c4d021e000e0e0e0c00034d0314000e0c000228302a4d0409002e7e040003420e0e0e|@5838,I232,I48,I107,@5841,@344| 5843:O1|@5844 5844:C6,56|00802b3b4d0030000e0c000303064d01260002202b3c4d021e000e0e0e0c00034d0314000e0c000228302a4d0409002e7e040003420e0e0e|@5838,I232,I48,I107,@5843,@344| 5845:C6,56|00802b3b4d0030000e0c000303064d01260002202b3c4d021e000e0e0e0c00034d0314000e0c000228302a4d0409002e7e040003420e0e0e|@5838,I232,I48,I107,@5834,@344| 5846:C24,496|0081280f2d4d00e7010c00034d01e0010e0c0002033628112d4d00d3010c00030304287e02044d02c60128102e4d00bf010c000303064d03b60102044d04b0012a2a4d05aa012f0e7e0600032c3d2d4d069d010e0e0c000429352a362b372b4d078d010e0e0c00022b314d0882010e0e0e0c000303033c020f2b4d0972014d0a6e010e0e0e0c0003037e293c4d0b60010e0c000303032c023d2c3b3c4d0c50010e0c000429282e4d0545010e0e0c00032b3c4d0d3a010e0e0e0c00032f3c2b4d0c2d010e0e0c00042b2a4d0522010e0e0e0c000327042928454d0513010c00032d3c4d0d0a010e0e0e0c0003294d0eff004d0ffb000c00032b2a4d05f2000e0e0e0c0003270402be2b3b4d10e2000e0e0e0c000303322b4d11d5000e0e0c00024d12cc002a2a0e0e0e0c00024d13c0002a4d05bb000c000329314d05b2000e0e0e0c00032704027e292c4d10a2000e0e0e0c000303322b2a4d0d94000e0c00034d148c002a2a0e0e0e0c00022f2a4d057e000e0e0e0c0003294d1573004d056f000c00032704023e2c3b2d4d0c61000e0e0c000429282e4d0555000e0e0c00032b2e4d0d4a000e0e0e0c00032f2f2b4d0c3d000e0e0c00042b2a4d0532000e0e0e0c000327042b3b4d1624000e0c00034d011c000e0c0002030e287e2a4d050f00330e0e7e0a0003292706430e0e0e0e|@5848,I124,I218,I48,@5824,@5819,@344,I117,I223,I233,-5,I234,I229,@1447,I107,-1,@355,I232,I111,@5849,@5815,@5851,@5847,I113| 5847:S2|2e30 5848:S14|5265616c2e67656e466d74283229 5849:O1|@5850 5850:C6,56|00802b3b4d0030000e0c000303064d01260002202b3c4d021e000e0e0e0c00034d0314000e0c000228302a4d0409002e7e040003420e0e0e|@5838,I232,I48,I107,@5849,@344| 5851:O1|@5852 5852:C6,56|00802b3b4d0030000e0c000303064d01260002202b3c4d021e000e0e0e0c00034d0314000e0c000228302a4d0409002e7e040003420e0e0e|@5838,I232,I48,I107,@5851,@344| 5853:B8|0000000000001000 5854:C14,248|008128112d4d00ef000c0003280f2e4d00e5000e0e0c0003034a2d4d01d9004d02d5000e0e0c000303033d02352d4d03c6004d04c2000e0e0e0c000303032d020b2d4d05b2000e0e0e0c000256272a2a4d04a4000e0c00036503033c02044d069600021528102e4d008d000e0e0c000303064d07820002013b294d077a004d0876000e0e0e0c00030a03005c005100080046002e3b3b4d095e000e0e0e0c000429352a362b372b4d0a4d000e0e0c00022a3b4d0b42000e0e0e0c00034d0c38000e0c0002332d452a4630472b48270602222d3b452b463d473b4802172d3b452b463b473b48020c2d3b452b464d070800473b4865430e0e0e|@5856,I124,@5857,I122,@5857,I118,I130,-2,-1,I107,I117,@5855,I113,I218| 5855:O1|@5858 5856:S17|5265616c2e746f446563696d616c283229 5857:B8|0000000000000000 5858:C4,40|00803b2c4d0020000e0c0002293c4d0116000e0e0e0c00033b2a0e0e0e4f02070040000366420e0e|@5860,I223,I107,@5859| 5859:C10,144|00812b3b4d0088000e0c000303032c02792b3c4d0179000e0e0c000356172d3b4d006c000e0c000303033c0218294d025e000e0e0e0c00022e2a4d0352000e0e0e0c00036403054d04450010294d053f000c000203032902182d28084d0630000e0c00032a2a4d0726000e0e0e0c0003642928304d0118000e0c0003293169292e4f080b006100032705430e0e0e0e0e|@5861,I234,I107,I223,I231,@52,I105,I239,I252,@5859| 5860:S22|5265616c2e737472546f44696769744c697374283129 5861:S32|5265616c2e737472546f44696769744c69737428312967657444696773283229 5862:S12|2c2073656d616e746963733a 5863:S12|2c207472616e736c6174653a 5864:S11|2c2067656e65726174653a 5865:C5,160|00823b2d4d0098002a3b4d0192000e0e0e0c000303032902222a352b360402002b2d2b0e0e4f02770080000450292b2a2506250626041e2e3b27046529362935293b4d035a000e0e0e0c00032b37293b4d034c000e0c00032d3a293b4d0340000e0c00032f38293b4d0334000e0c00033136293b4d0328000e0c00033339293b4d031c000e0c0003221134452c4632472e482a49304a270f440e0e0e0e0e0e0e|@5867,@5868,I229,@5869,@5866| 5866:O1|@5895 5867:S29|535452554354555245535f28292e706173733453747275637473283329 5868:O2|0,@1300 5869:C10,448|00822c352d3629352a362b372c382d392e3a220c353d4d00a6010e0e0e0c00030a05001500bf000c005c0108016b0033220c0802003b06cd220c363b322e692b2a2a3b4d0179010e0e0c000303032902262a352b360402002b2d2b0e0e1602005e0114000000000450292b2a2506250626041e313b27046529352a363434342c3434680622112c452a46270706cb220c363b322c692b2a2a3b4d0123010c000303032902262a352b360402002b2d2b0e0e1603000a0114000000000450292b2a2506250626041e2f3b27046529352a3634343434342e680622112c452a46270702d8220c36342a220e2a3b4d01d1000e0e0c0003030329022a2a352b360402002b2d2b0202b3000e0e160400b20013000100000450292b2a2506250626041e353b2704650802003b64028f220c383b2a3b4d058b000c0003220d2a22102a3b4d017d000e0e0c0003030329022a2a352b360402002b2d2b02025f000e0e1606005e0015000000000450292b2a2506250626041e353b2704650802003b66023b220c364d073a002a2a0e0c00022d3b4d012e000e0e0e0c0003030329020c3b2a0e0e4f081b00c0000264323232322d326806220f220d452a4627052708440e0e0e|@5871,I107,I229,@5872,@5877,@5869,I253,@5891,@5893,@5870| 5870:C3,48|00802b3b4d0028000e0c000303091201000100f8ff02132b352c36290e4f010f002100022b2a69292704420e0e0e0e0e|@1884,I229,@5870| 5871:S45|535452554354555245535f28292e70617373345374727563747328332965787472616374537472756374283329 5872:C11,152|00822d382e3a2e352f365749293528054d0084000e0c0003030c2b2a4d0178000e0c0003022129354d026c004d0068000e0c0003030c2b2a4d015c000e0c0003020528062a2d6a2d3b4d034b000c0003294d0443000c00022a4d053b000c00022b4d0633000c00022d4d072b000c00022c2c2c2c4d0820000e0c0005323c4d0916000e0e0e0c0003220c2b6929346922112c452a46270f44|@5874,I229,@3342,-3,I253,@5873,@2383,@2380,@4669,@4839,I106| 5873:O1|@5875 5874:S66|535452554354555245535f28292e706173733453747275637473283329657874726163745374727563742833296578747261637446756e63746f7242696e64283329 5875:C3,24|00802b3b4d0010000e0c000303054d010600102b36296442|@5876,I229,@958| 5876:S28|5354525543545f56414c5328292e66756e63746f724e616d65283129 5877:C11,200|00822d362e392e352f362b3b4d00b8000e0c0003293b4d01ae000e0e0e0c00030316404d02a1000e0e0c0002294d0397003b3b6b29650204293729645769293528054d0182000e0e0e0c0003030c2d2a4d0474000e0c0003022129354d0568004d0164000e0c0003030c2d2a4d0458000e0c0003020528062a2f6a292c4d0647000c0003502e3c4d073d000e0e0c00032c382d372e35294d082d000e0e0c0002294d0323002d2f6b4d091c003069220e2a2c6a220f2a6929220e69221433452a462712440e0e0e0e|@5879,I253,I229,@1893,I48,@3342,-3,@5878,I106,@2696,-1| 5878:O1|@5880 5879:S68|535452554354555245535f28292e706173733453747275637473283329657874726163745374727563742833296578747261637453747275637475726542696e64283329 5880:C6,48|00812b4d0029000e0e0c00024d0120004d021c002f6a4d0316002a692b2a3b4d040d00310e0e0e7b050700040e0e0e0e|@5882,@2412,@5883,@5878,@5881,@2410| 5881:C1,16|00802b352c362d3756372e7b05030004|@5890| 5882:S48|535452554354555245535f28292e7061737334537472756374732833296578747261637456616c73546f536967283229 5883:C17,256|00822c4d00f9000e0e0c000203b62c4d01ed000e0e0c0002294d02e3000c000229353b4d03d9000e0e0c0003034429365638293528054d03c6000e0e0e0c0003030c2a2a4d04b8000e0c0003022129354d05ac004d03a8000e0c0003030c2a2a4d049c000e0c0003020528062a2c6a65021f294d0689000e0e0c0002030e294d077d000e0e0c0002296402054d087000102b3b4d0369000e0e0c00030316404d095d000e0e0c0002294d0a53003b3b6b296502042b3729642a2a5667310e0e0e7e0900032c4d0b37000c0002032e2c4d0c2d000e0e0c00023b2a4d0d22000e0e0e0c00023b2a0e0e0e4f0e13004000022d2a4d0f0a00320e7e0a00033b440e0e|@5885,@2336,@2335,@2728,I229,@3342,-3,@2759,@2749,@5886,@1893,I48,@2348,@2347,@2501,@5884,@2763| 5884:C4,48|00802b3b4d0028000e0c000303033b021d2b352c362a0e0e0e4f0113002100022a4f020b003100022a2a69292705420e|@436,I229,@5888,@5884| 5885:S51|535452554354555245535f28292e7061737334537472756374732833296578747261637456616c73546f536967283229283329 5886:O3|@7141,@228,@5887 5887:S28|6578747261637456616c73546f5369673a2062616420616363657373 5888:C5,112|00802b3729353b4d0065000e0e0c0003035829362d352e362f385758293528054d004c000e0c0003030c2d2a4d0140000e0c0003022129354d0234004d0030000e0c0003030c2d2a4d0124000e0c0003020528062a2f6a644d0314000e0c00022c2c2b2d6b29270602012c64420e0e0e|@5889,I229,@3342,-3,@4669| 5889:S70|535452554354555245535f28292e7061737334537472756374732833296578747261637456616c73546f536967283229283329636f707941436f6e7374727563746f72283129 5890:S51|535452554354555245535f28292e7061737334537472756374732833296578747261637456616c73546f536967283229283129 5891:C14,424|00822d354d00a0014d019c010e0c00030a02004a00300166012d362d352e3629352a362b372c382d392e3a314d0278010e0c00020402002a2a4d036b010c000350293629220c69293269332a3333333368062211220e452a46270f06dd2d362e372f3830392c2c2c2c6b3135323629352a362b372c382d392e3a334d0429010e0e0c00020337334d051d010e0e0c0002313c4d0612010e0e0e0c0003334d0707010c000229220c6929316933332b333333680622152e452a462706028257d9293528054d08e1000e0e0c0003030c312a4d09d4000e0c0003022129354d0ac8004d08c4000e0c0003030c312a4d09b8000e0c0003020528062a336a334d07a8000e0c00022a4d0b9f000c00022a22102b22106b220c3c4d068e000e0e0e0c00032c2b69293469220d220d2b220d220d220d680622182d452a02026700462709270d02602d362d352e3629352a362b372c382d392e3a314d0c4e000e0e0e0c0002293369292c6931313131312e6806220f220c452a46270d022a2d362e372a2a692f35303629352a362b372c382d392e3a312f69292f2f2f2f2f6806220f33452a46270d440e0e0e0e|@5892,-2,I107,@2080,@2083,@2777,@2780,I106,@2156,I229,@3342,-3,@4669,@2737| 5892:S56|535452554354555245535f28292e706173733453747275637473283329657874726163745374727563742833296d616b6544656373283329 5893:O1|@5894 5894:C4,56|00802b3b4d0030000e0c000303033b02252b352c362a362b37293b4d0119000e0e0c00032b2a692d4d020c000e0c00022a2a69292708420e|@436,I229,I253,@5893| 5895:C4,56|00812c3b4d0030000e0c000303032b021f2c3529352e363b2a4f011b004000022d31692a2a4d020f00330e0e7e0a0003430e0e0e0e0e0e0e|@5897,I229,@5896,@5866| 5896:C5,80|00802b3b4d0048000e0c000303033b02382b352c362a355633292b69644d012f000c00024d0228000e0c0002640310290e4f031b002100022b2a6929650209290e4f030b0021000265420e0e0e0e0e0e|@157,I229,@4049,I218,@5896| 5897:S41|535452554354555245535f28292e70617373345374727563747328332972657646696c746572283229 5898:O1|@5899 5899:C2,16|00802b3b4d0008002d0e0e0e7e030003|@1098,I113| 5900:O3|1,@603,@5919 5901:O4|-2,1,@5902,0 5902:O2|@5904,@5903 5903:O2|@5906,@5905 5904:O2|49,@591 5905:O2|@5911,0 5906:O2|50,@5907 5907:O3|1,@603,@5908 5908:O4|-3,@5909,@786,@7349 5909:O2|@5910,0 5910:O4|-3,0,@5385,@7350 5911:O2|51,@5912 5912:O4|-3,@5913,@621,@7351 5913:O2|@5914,0 5914:O4|-3,0,@5915,@7352 5915:S9|756e6976657273616c 5916:O6|@5915,0,0,0,@5918,@5917 5917:O2|-1,@7354 5918:O2|-1,@7353 5919:O4|-2,1,@5920,0 5920:O2|@7355,@5921 5921:O2|@7357,@5924 5922:O4|-3,@610,@621,@7356 5923:S5|6669786573 5924:O2|@7359,@5927 5925:O4|-3,@731,@621,@7358 5926:S5|7479706573 5927:O2|@7361,@5930 5928:O4|-3,@717,@621,@7360 5929:S6|76616c756573 5930:O2|@7363,@5933 5931:O4|-3,@745,@621,@7362 5932:S8|66756e63746f7273 5933:O2|@7365,0 5934:O4|-3,@703,@621,@7364 5935:S10|7369676e617475726573 5936:O4|-3,@768,@621,@7366 5937:S10|73747275637475726573 5938:O2|@5940,@5939 5939:O2|@5941,0 5940:S16|7072696e74496e4e616d655370616365 5941:O3|@7136,69,@5942 5942:O4|@5940,-1,@5944,@5943 5943:O3|1,@5945,@603 5944:O2|-2,-4 5945:O4|-2,1,@5946,0 5946:O2|@5948,@5947 5947:O2|@590,@5950 5948:O2|49,@5949 5949:O3|3,@7367,79992 5950:O2|@5952,@5951 5951:O2|@5953,0 5952:O2|51,@910 5953:O2|52,@536 5954:O2|@5956,0 5955:S9|4e616d655370616365 5956:O3|@7163,69,@5957 5957:O3|@5955,@573,@5958 5958:O4|@5959,I48,0,0 5959:O4|-1,@7369,@7370,@7368 5960:O2|@709,@5979 5961:O2|@723,@5962 5962:O2|@5963,0 5963:O3|@7156,69,@724 5964:O2|@737,@5965 5965:O2|@5966,0 5966:O3|@7156,69,@738 5967:O2|@592,@5968 5968:O2|@5969,0 5969:O3|@7156,69,@593 5970:O2|@751,@5971 5971:O2|@5972,0 5972:O3|@7156,69,@752 5973:O2|@774,@5974 5974:O2|@5975,0 5975:O3|@7156,69,@775 5976:O2|@617,@5977 5977:O2|@5978,0 5978:O3|@7156,69,@618 5979:O2|@5980,0 5980:O3|@7156,69,@710 5981:O2|@5983,@5982 5982:O2|@5984,0 5983:S3|6d6f64 5984:O3|@7136,69,@5985 5985:O4|@5983,-1,@190,@5986 5986:O3|1,@192,@196 5987:O2|@621,@5988 5988:O2|@5989,0 5989:O3|@7156,69,@622 5990:O2|33,@5991 5991:O2|@5992,0 5992:O3|@7136,69,@5993 5993:O4|33,-1,@5995,@5994 5994:O3|1,@6000,@5999 5995:O2|-1,@5996 5996:O2|-7,@5997 5997:O8|@3315,@5998,0,0,1,0,0,0 5998:S4|21283129 5999:O3|3,@7373,79992 6000:O4|-3,@6001,@2845,@7372 6001:O2|@5999,0 6002:O2|@786,@6003 6003:O2|@6004,0 6004:O3|@7156,69,@787 6005:O2|@797,@6006 6006:O2|@6007,0 6007:O3|@7136,69,@795 6008:O2|42,@6009 6009:O2|@6010,0 6010:O3|@7136,69,@6011 6011:O4|42,-1,@190,@5986 6012:O2|@5385,@6013 6013:O2|@6014,0 6014:O3|@7156,69,@5383 6015:O2|43,@6016 6016:O2|@6017,0 6017:O3|@7136,69,@6018 6018:O4|43,-1,@190,@5986 6019:O2|126,@6020 6020:O2|@6021,0 6021:O3|@7136,69,@6022 6022:O4|126,-1,@190,@563 6023:O2|45,@6024 6024:O2|@6025,0 6025:O3|@7136,69,@6026 6026:O4|45,-1,@190,@5986 6027:O2|@6029,@6028 6028:O2|@6030,0 6029:S9|426f6f747374726170 6030:O3|@7163,69,@6031 6031:O3|@6029,@573,@6032 6032:O4|@6033,I48,0,0 6033:O4|-1,@7375,@7376,@7374 6034:O2|@6812,@6811 6035:O2|@6037,@6036 6036:O2|@6038,0 6037:S17|636f6d70696c65724f7574707574546167 6038:O3|@7136,69,@6039 6039:O4|@6037,-1,@6041,@6040 6040:O4|-3,@6043,@6044,@7378 6041:O2|-1,@6042 6042:O2|-3,@7285 6043:O2|@910,0 6044:S3|746167 6045:O6|@6044,1,0,@6047,@6049,@6046 6046:O2|-1,@7381 6047:O2|@6048,0 6048:O3|3,@7379,79992 6049:O2|-1,@7380 6050:O2|@6052,@6051 6051:O2|@6053,0 6052:S12|70726f66696c696e67546167 6053:O3|@7136,69,@6054 6054:O4|@6052,-1,@6056,@6055 6055:O4|-3,@6058,@6044,@7382 6056:O2|-1,@6057 6057:O2|-3,@7289 6058:O2|@536,0 6059:O2|@6061,@6060 6060:O2|@6062,0 6061:S15|617373656d626c79436f6465546167 6062:O3|@7136,69,@6063 6063:O4|@6061,-1,@6065,@6064 6064:O4|-3,@6067,@6044,@7383 6065:O2|-1,@6066 6066:O2|-3,@7328 6067:O2|@191,0 6068:O2|@6070,@6069 6069:O2|@6071,0 6070:S17|696e6c696e6546756e63746f7273546167 6071:O3|@7136,69,@6072 6072:O4|@6070,-1,@6074,@6073 6073:O4|-3,@6067,@6044,@7384 6074:O2|-1,@6075 6075:O2|-3,@7332 6076:O2|@6078,@6077 6077:O2|@6079,0 6078:S7|6d6c3930546167 6079:O3|@7136,69,@6080 6080:O4|@6078,-1,@6082,@6081 6081:O4|-3,@6067,@6044,@7385 6082:O2|-1,@6083 6083:O2|-3,@7295 6084:O2|@6086,@6085 6085:O2|@6087,0 6086:S19|6572726f724d65737361676550726f63546167 6087:O3|@7136,69,@6088 6088:O4|@6086,-1,@6090,@6089 6089:O4|-3,@6092,@6044,@7386 6090:O2|-1,@6091 6091:O2|-3,@7263 6092:O2|@6093,0 6093:O3|1,@6094,@603 6094:O4|-2,1,@6095,0 6095:O2|@614,@6096 6096:O2|@918,@6097 6097:O2|@6098,0 6098:O2|51,@536 6099:O2|@6101,@6100 6100:O2|@6102,0 6101:S11|636f646574726565546167 6102:O3|@7136,69,@6103 6103:O4|@6101,-1,@6105,@6104 6104:O4|-3,@6067,@6044,@7387 6105:O2|-1,@6106 6106:O2|-3,@7287 6107:O2|@6109,@6108 6108:O2|@6110,0 6109:S10|646973706c6179536967 6110:O3|@7136,69,@6111 6111:O4|@6109,-1,@6113,@6112 6112:O3|1,@6155,@603 6113:O2|-1,@6114 6114:O2|-3,@6115 6115:O1|@6116 6116:C3,48|00802b352c362d372e382f39040700284d2b2b4d0019000e0e0c000450292f2f2b30304d010900220e0e0e7b070a0006|@6118,@271,@6117| 6117:O2|@6120,@6119 6118:S43|494e495449414c4953455f28292e696e6974476c6f62616c456e76283129646973706c6179536967283129 6119:O3|@6124,@6117,@6123 6120:C9,120|00842e3b4d0070000e0c0003030e2d384d0164002a2d0e0e7d0800022d23064d0255002a0e0c0002512d38304d0348000e0c00024d0440002a4d053b000c0003294d0633004d052f000c0003652a0e0e0e0c0002512d354d071d002a0e0c0002512f2f2f3c303056670c0007502d373b2a2d0e0e7d080002|@6122,I232,@1364,@333,@2698,@6121,@344,@2006,@2128| 6121:S10|7369676e617475726520 6122:S32|56414c55455f4f505328292e646973706c61795369676e617475726573283529 6123:O2|@6152,@6119 6124:C17,272|00853b2f23064d0006012a0e0e0c0002512f384d01f9002a0e0c000251303c4d02ed000e0e0c000303192f354d03e0002a0c0002512f384d04d5002a0e0c00025102a73c28403b4d05c5000e0e0c0004324d06bb000c00024d07b4000e0c00022929372964033829363b2a0e0e0c00022d3b4d089a000e0e0e0c00032a2a692f3b2b4d098a000e0e0e0c0004502d353b2a0c000229250726061e38260602023b50504d0a6a002b3b4d0864000e0c0003292b4d0b5a000e0e0e0c000329293b4d0c4d000e0e0c000303043b50021a29352a362a352b360e0e0e4f0d3300a0000350292503511e285126062f354d0e20002a0c0002512f384d0f15002a0e0c0002512f373b2a2e0e0e7d0a00020e0e0e0e|@6126,@6127,@1248,I232,@329,@1364,I11,@2412,@2509,I253,I255,@6128,@3264,I229,@6125,@329,@1210| 6125:C18,352|00812b4d0059010e0e0c0002033a560a29354d014a012a0e0e0c0002512c4d023e010e0e0e0c0002562b293c4d0330010e0c0003564a565856672e2d2d2d2d57c7220e7b070b00062b4d0413010c0002033a560a29354d0106012a0e0e0c0002512c4d05fa000e0e0e0c0002562b293c4d03ec000e0c0003564a565856672e2d2d2d2d57c8220e7b070b00062b4d06cf000c0002032e560a29354d01c2002a0e0e0c0002512c4d07b6000e0e0e0c0002562b563a56472c2c2c2c4d08a200347b060900052b4d0997000c000203512b4d0a8d000e0e0c00022936294d0b81000e0e0c0002030e294d0c75000e0e0c00023b640228562a29354d0164002a0c000251563b564a565856672f2d2d2d2d4d0d4e00220e0e0e0e7b070b000665023a2b4d0e3c000e0c0002032e560a29354d012e002a0e0e0c0002512c4d0f22000e0e0e0c0002562b563a2b2b2b4d101100320e0e0e7b050800043b430e0e0e0e0e0e|@6137,@2330,@2128,@2329,I107,@2336,@2335,@2348,@2347,@6138,@2354,@2353,@2680,@2683,@6136,@2342,@2341,@2196| 6126:S25|56414c55455f4f505328292e646973706c6179536967283629 6127:O2|0,1 6128:O1|@6129 6129:C2,16|00804d000a002c69420e0e0e0e0e0e0e|@6131,@6130| 6130:C2,24|00802b352c365627355637364d0008002f0e0e7b06030005|@6133,@6132| 6131:S33|56414c55455f4f505328292e646973706c61795369672836296f72646572283129 6132:O1|@6134 6133:S36|56414c55455f4f505328292e646973706c61795369672836296f72646572283129283129 6134:C2,16|00832c2f4d0008002d0e0e0e7e060003|@6135,I29| 6135:S33|56414c55455f4f505328292e646973706c61795369672836296f72646572283429 6136:O1|@6148 6137:S39|56414c55455f4f505328292e646973706c6179536967283629646973706c617953706563283229 6138:O1|@6139 6139:C23,352|00833b4d0059010e0e0c00022e3b4d014e010e0e0e0c0003030e2d384d0240012a2e0e0e7d0800022f4d0333010c00023b2a4d042a010e0e0e0c0003644d051f010c0002039e3b3b314d0613010c00020402002a2a4d0707010c00035029363223064d08fa002a0e0e0c00025132384d09ed002a0e0c00025132354d0ae1002a0e0c000251344d0bd6000e0e0e0c000229220c31220d220d4d0cc4000e0c00065033382b4d0db8004d0eb4000e0c00032a0c000251220c4d03a5000e0e0c0002220c3c4d0f99000e0e0c00032a2a0e0e0e4f108b00a0000350220c373b2a220d7d1000022f4d0677000c00020402002a2a4d076b000c00035029363023064d115e002a0e0e0c0002513038334d1250000e0c000203064d13460002044d1440002a0c00025130354d1535002a0e0c000251324d0b2a000e0e0e0c000229332f34344d0c1b000c00065031382b2a0c00025131373b2a320e0e7d0c00020e0e0e0e|@6141,@2018,I232,@1364,@2501,I229,I218,@2080,@2083,@333,@1221,@2128,@2435,@2131,@2006,@344,I107,@6140,@347,@2429,@1217,@1191,@329| 6140:C8,192|00812c3b4d00b8000e0c000303033b02ab2c352d3656282923064d01a2002a0e0e0c0002512b4d0296000e0e0e0c00022c4d038b000c00023c2b2b330e4f047f0081000550303c4d0575000e0e0c00032d2a2a3b4d0068000e0c000303043b50024b2a352b362b3b4d0654000e0c000303043b5002362a4d0245000e0e0c00022b4d033b000c00023b2b2b300e4f042f00f10005502d3c4d0525000e0e0c00032c2a2507250726051e5626035151566829373b2a340e0e0e7d0c0002430e0e0e|@6143,I229,@6144,@2156,@2667,@6142,I107,I234| 6141:S33|545950455f5452454528292e646973706c617954797065436f6e73747273283429 6142:C19,408|00832e0312560829354d008b012a0e0e0e0c000265020e560829354d0179012a0e0c00026556182923064d026a012a0e0e0c00025156282923064d035a012a0e0e0c000251310310563829354d0448012a0c00022603023a56382923064d0537012a0e0e0e0c00025156482938287c2a0e0c000251565829354d061b012a0e0e0e0c000251566829373b2a0e0e0c000226062e3b4d0700010e0c00030312563829384d08f2002a0e0e0c00022603024f56382938322a0e0e0e0c000251304d09d6000e0e0e0c0002030e304d0ac9000e0e0c00023c6402013b0321564829354d0bb5002a0e0c000251565829384d0ca7002a0e0e0e0c0002260402023b5050563829373b2a0c000251304d098a000e0e0e0c0002030e304d0a7d000e0e0c00023c6402013b030b2f3b4d0d6b000c000302013b0353564829354d0e5b002a0e0e0e0c000251314d094e000e0e0e0c0002030e314d0a41000e0e0c0002296402054d0f3400102935323c4d102b000c00035688569456a72d2d2d2d2d4d1119000e0e0c0006260802023b50564829373b2a320e0e0e7d0c0002|@6146,@2128,@329,@333,@333,@6147,@333,@2128,I232,@1364,@2107,@2109,@6145,@1185,I233,@6145,@958,I107,@2033| 6143:S50|545950455f5452454528292e646973706c617954797065436f6e737472732834297056616c436f6e7374724c697374283229 6144:O2|2,1 6145:O2|1,4 6146:S46|545950455f5452454528292e646973706c617954797065436f6e737472732834297056616c436f6e737472283429 6147:O2|0,2 6148:C34,576|00842f35303631373238323b4d0030020e0c0003030e31384d0124022a310e0e7d0c00022b4d0217020c000207d02a4d030d020e0e0c000207d22a4d0401020e0e0c00023223064d05f5012a0e0c00025132384d06e9012a0e0c00025132354d07dd012a0e0c00025132382e4d08d0014d09cc010e0c00032a0c00025132354d0abd012a0e0c0002517876223b2c4d0bae010e0e0e0c0002292f2210221022104d0c9c010e0c00066405260e0e0e00ff6d29353c4d0d88010e0c000303054d0e7e0110020033384d0f75012a0e0c0002655032354d1068012a0c0002513223064d115c012a0c0002513238283a2a0e0e0e0c00025132354d1245012a020298000e0c0002513b4d13360102022a000e0e0e0c00022b220c220c2c220c4d1420010e0c00065033373b2a0c00025133373b2a330e0e7d0e00023123064d1501012a0e0c00025131384d16f5002e4d09f0000e0c0003294d17e7004d09e3000c0003642a0e0e0e0c00025131354d18d1002a0e0c0002513b4d13c6000e0e0e0c00022a34342c344d14b7000c00065032373b2a320e0e7d0d00022b3b4d0da2000e0e0e0c000303923123064d1993002a0e0e0e0c00025131384d1a85002a0e0c00025131354d1b79002a0e0c00025131382d2a0c0002514d1c67002a354d0d61000e0e0c00034d1d58000e0c0002033d31354d1e4c002a0c00025131384d1f41002a0e0c00025131354d2035002a0e0c0002513b4d132a000e0e0e0c00022a34342c344d141b000c00065102023b5031373b2a310e0e7d0c00023b27041f050e0e0e|@6150,I232,@1364,@5768,@2759,@2749,@333,@1235,@329,@2006,@344,@6149,@5129,@5117,I229,@55,@1582,@329,@333,@6149,@2018,@2033,@333,@6151,@2002,@6149,@333,@1244,@335,-1,I218,@335,@1185,@6149| 6149:O2|1,3 6150:S28|56414c55455f4f505328292e646973706c617956616c756573283529 6151:S4|76616c20 6152:C18,280|00842e3b4d0010010e0c0003030e2d384d0104012a2d0e0e7d0800022f4d02f7000c0002030e2d384d03ec002a2d0e0e7d0800022f4d04df000c0002303b4d05d6000e0e0e0c00030316404d06c9000e0e0c0002294d07bf003b3b6b29650204303729644d08b0000e0c00022f23064d09a5002a0e0c0002512f384d0a99002c4d0b94000e0c0003294d0c8b004d0b87000c0003642a0e0e0e0c0002512f354d0d75002a0e0c000251294d076a004d0e66000e0e0e0c00034d0f5c000e0c0002030d2f382a2a0e0e0e0c000251023f313b4d0543000c00030316404d0639000e0e0c0002294d072f003b3b6b2965020431372964313c4d101e000e0e0e0c00032a2a333c343456a70e0c000726032f373b2a2f0e7d0a0002|@6154,I232,@1364,@2365,@2004,@2737,I229,@1893,I48,@2698,@333,@6153,@344,@2002,@2128,I24,I218,I107| 6153:S10|73747275637475726520 6154:S32|56414c55455f4f505328292e646973706c617953747275637475726573283529 6155:O4|-2,1,@6156,0 6156:O2|@6158,@6157 6157:O2|@925,@6159 6158:O2|49,@708 6159:O2|@6161,@6160 6160:O2|@6163,@6162 6161:O2|51,@591 6162:O2|@6164,0 6163:O2|52,@191 6164:O2|53,@910 6165:O2|@6167,@6166 6166:O2|@6168,0 6167:S12|646973706c617946756e6374 6168:O3|@7136,69,@6169 6169:O4|@6167,-1,@6171,@6170 6170:O3|1,@6181,@603 6171:O2|-1,@6172 6172:O2|-3,@6173 6173:O1|@6174 6174:C3,48|00802b352c362d372e382f39040700284d2b2b4d0019000e0e0c000450292f2f2b30304d010900220e0e0e7b070a0006|@6176,@271,@6175| 6175:O1|@6177 6176:S45|494e495449414c4953455f28292e696e6974476c6f62616c456e76283129646973706c617946756e6374283129 6177:C23,352|00842e3b4d0058010e0c0003030e2d384d014c012a2d0e0e7d0800022d23064d023d012a0e0c0002512d38304d0330010e0c00024d0428012a4d0523010c0003294d061b014d0517010c0003652a0e0e0e0c0002512d354d0705012a0e0c0002512f4d08fa000e0e0e0c00024d09f0000e0c0002294d0ae7004d0be3000c0003644d0cdb000c000203352d38304d08cf000c00024d09c8000e0c0002294d0dbf004d05bb000c0003642a0e0e0e0c0002512d354d0ea9002a0e0c00025102023b502f4d089a000e0e0e0c0002293b4d0f8e000e0e0e0c00030316404d1081000e0e0c0002294d0a77003b3b6b2965020429372964303c4d1166000e0e0e0c00032a2a323b33334d1256000e0e0e0c00075030384d1349002a0e0c00025130354d143d002a0e0c000251324d1532000e0e0e0c0002323c4d1126000e0e0e0c00032a2a343c220c220c4d1214000e0c00075032373b2a320e0e7d0d00020e0e0e0e|@6179,I232,@1364,@333,@5873,@6180,@344,@403,@333,@2383,@2737,I48,I24,I218,@2002,@6149,I229,@1893,I107,@6119,@6178,@6149,@2380| 6178:S3|29203a 6179:S30|56414c55455f4f505328292e646973706c617946756e63746f7273283529 6180:S8|66756e63746f7220 6181:O4|-2,1,@6182,0 6182:O2|@6183,@6157 6183:O2|49,@750 6184:O2|@6186,@6185 6185:O2|@6187,0 6186:S14|7072696e74537472696e67546167 6187:O3|@7136,69,@6188 6188:O4|@6186,-1,@6190,@6189 6189:O4|-3,@6043,@6044,@7388 6190:O2|-1,@6191 6191:O2|-3,@7337 6192:O2|@6194,@6193 6193:O2|@6195,0 6194:S11|6465627567676572546167 6195:O3|@7136,69,@6196 6196:O4|@6194,-1,@6198,@6197 6197:O4|-3,@6202,@6044,@7390 6198:O2|-1,@6199 6199:O2|-3,@7389 6200:O2|@6201,@7335 6201:C1,16|008056072928452e6a64420e0e0e0e0e|@954| 6202:O2|@6203,0 6203:O3|1,@6204,@603 6204:O4|-2,1,@6205,0 6205:O2|@917,@6206 6206:O2|@721,@6207 6207:O2|@6098,@6208 6208:O2|@6210,@6209 6209:O2|@6212,@6211 6210:O2|52,@535 6211:O2|@6213,0 6212:O2|53,@535 6213:O2|54,@591 6214:O2|@6216,@6215 6215:O2|@6217,0 6216:S19|636f64657472656541667465724f7074546167 6217:O3|@7136,69,@6218 6218:O4|@6216,-1,@6220,@6219 6219:O4|-3,@6067,@6044,@7391 6220:O2|-1,@6221 6221:O2|-3,@7326 6222:O2|@6224,@6223 6223:O2|@6225,0 6224:S16|7472616365436f6d70696c6572546167 6225:O3|@7136,69,@6226 6226:O4|@6224,-1,@6228,@6227 6227:O4|-3,@6067,@6044,@7392 6228:O2|-1,@6229 6229:O2|-3,@7284 6230:O2|@6232,@6231 6231:O2|@6233,0 6232:S14|70737461636b5472616365546167 6233:O3|@7136,69,@6234 6234:O4|@6232,-1,@6236,@6235 6235:O4|-3,@6067,@6044,@7394 6236:O2|-1,@6237 6237:O2|-3,@7393 6238:O2|@6243,@7272 6239:O2|@6240,@7272 6240:C2,32|00802b3556174d0016000e0e0e0c000303033c0202020202013b420e0e0e0e0e|@954,I251| 6241:O2|@6242,@7272 6242:C1,16|008056072928452e6a64420e0e0e0e0e|@954| 6243:C3,40|00802b3556174d001e000e0e0e0c000303062b3729640202020202054d01080010420e0e0e0e0e0e|@954,I251,@958| 6244:O2|@6246,@6245 6245:O2|@6247,0 6246:S11|676c6f62616c5370616365 6247:O3|@7136,69,@6248 6248:O4|@6246,-1,@6249,@591 6249:O2|-1,@6250 6250:O2|-3,@7395 6251:O2|@6333,@174 6252:O2|@6253,@174 6253:C3,32|0080560729352a364d0014002a69292c4d010c00310e0e0e7e0700030e0e0e0e|@6255,@6256,@6254| 6254:O1|@6268 6255:S25|4d414b455f28292e6462456e76416c6c283129283129283129 6256:C4,32|00805607294d0017004d0113000c00034d020c002a2a2f0e7d0600020e0e0e0e|@6258,@7306,@6259,@6257| 6257:O1|@6267 6258:S22|4d414b455f28292e6462456e76416c6c283329283129 6259:O1|@6260 6260:C3,80|00814d004a002c692d4d0143000c00022929372964032d2e352a363b2a0c0002293629662a0c0002640309292c2f0e0e7d07000229353b2a0e0c00026425011e2e3b0208292c2f0e7d07000266430e0e|@6262,@6261,@2509| 6261:C3,80|00802b29372964032b561729352b363b2a0c0002293629662a0c00026503033c021029353b2a0e0e0e0c00026425011e2c3b02013b644d0016002b56372f6b4d010d0056372f6a2a2a2d6a292704420e|@6264,@6265,@6263| 6262:S34|556e6976657273616c5461626c652e756e69764f7665725370656369666963283229 6263:C1,40|0080560829363b2a0e0c000229352a36565729372b2a0e0e0e0c0002642c2a692707420e0e0e0e0e|@6266| 6264:S45|556e6976657273616c5461626c652e756e69764f76657253706563696669632832296d616b6549746572283129 6265:C1,80|0080560929353b2a0e0c000229293729640331564829352b363b2a0e0e0c0002293629662a0c0002650309295657300e7d07000229353b2a0e0c00026425011e323b0208295657307d0700022704420e|@6266| 6266:S48|556e6976657273616c5461626c652e756e69764f76657253706563696669632832296d616b6549746572283129283129 6267:C2,48|00802b37296403202b363b2a0e0c00022d353b2a0e0c0002644d0013000c00022a2a6929270402013b420e0e0e0e0e0e|@5139,@6257| 6268:C12,288|00813b4d0019010e0e0c00024d0110014d020c010e0c00023b2e3b4d0301010e0e0c0003293c4d04f6000e0e0e0c00036403033b0226291b204e4d05e2000e0e0e0c000303033b0213293c4d06d1000e0e0c0003292502501e3f3b64642e4d07be000e0e0e0c0002293b4d05b2000e0e0e0c000303033b02103c304d08a1000e0e0c000326031e6e3b657876093b3b330e0c0002054500ff6d2f4d0982000e0e0e0c0002293c4d0576000e0e0e0c000303043b500217303b3c4d0a63000c0004503d314d0859000e0e0c0003502d4d024e000e0e0e0c0002502a102f4d0940000e0c0002293c4d0536000e0e0e0c000303043b500217303b3c4d0a23000c0004503d314d0819000e0e0c0003502d4d020e000e0e0e0c0002502a2705430e0e0e|@6270,@62,@6269,@65,I253,I251,I229,I106,I71,I73,I70,I255| 6269:O2|@4678,0 6270:S18|4d414b455f28292e70726f74656374283229 6271:O2|@6272,@174 6272:C3,32|0080560729352a364d0014002a69292c4d010c00310e0e0e7e0700030e0e0e0e|@6255,@6273,@6254| 6273:C4,32|00805607294d0017004d0113000c00034d020c002a2a2f0e7d0600020e0e0e0e|@6258,@7303,@6259,@6274| 6274:O1|@6275 6275:C2,48|00802b37296403202b363b2a0e0c00022d353b2a0e0c0002644d0013000c00022a2a6929270402013b420e0e0e0e0e0e|@5139,@6274| 6276:O2|@6277,@174 6277:C3,32|0080560729352a364d0014002a69292c4d010c00310e0e0e7e0700030e0e0e0e|@6255,@6278,@6254| 6278:C4,32|00805607294d0017004d0113000c00034d020c002a2a2f0e7d0600020e0e0e0e|@6258,@7300,@6259,@6279| 6279:O1|@6280 6280:C2,48|00802b37296403202b363b2a0e0c00022d353b2a0e0c0002644d0013000c00022a2a6929270402013b420e0e0e0e0e0e|@5139,@6279| 6281:O2|@6282,@174 6282:C3,32|0080560729352a364d0014002a69292c4d010c00310e0e0e7e0700030e0e0e0e|@6255,@6283,@6254| 6283:C4,32|00805607294d0017004d0113000c00034d020c002a2a2f0e7d0600020e0e0e0e|@6258,@7308,@6259,@6284| 6284:O1|@6285 6285:C2,48|00802b37296403202b363b2a0e0c00022d353b2a0e0c0002644d0013000c00022a2a6929270402013b420e0e0e0e0e0e|@5139,@6284| 6286:O2|@6287,@174 6287:C3,32|0080560729352a364d0014002a69292c4d010c00310e0e0e7e0700030e0e0e0e|@6255,@6288,@6254| 6288:C4,32|00805607294d0017004d0113000c00034d020c002a2a2f0e7d0600020e0e0e0e|@6258,@7301,@6259,@6289| 6289:O1|@6290 6290:C2,48|00802b37296403202b363b2a0e0c00022d353b2a0e0c0002644d0013000c00022a2a6929270402013b420e0e0e0e0e0e|@5139,@6289| 6291:O2|@6292,@174 6292:C3,32|00802b352c36562729352a364d0010002d2f2c6b292c4d010600330e7e090003|@6294,@6293,@6254| 6293:C3,32|00805609561856272b4d0013002c2c4d010d00320e0e0e7b060600050e0e0e0e|@6295,@7306,@2301| 6294:S27|4d414b455f28292e6462456e76456e746572283129283129283129 6295:S24|4d414b455f28292e6462456e76456e746572283429283129 6296:O2|@6297,@174 6297:C3,32|00802b352c36562729352a364d0010002d2f2c6b292c4d010600330e7e090003|@6294,@6298,@6254| 6298:C3,32|00805609561856272b4d0013002c2c4d010d00320e0e0e7b060600050e0e0e0e|@6295,@7303,@2301| 6299:O2|@6300,@174 6300:C3,32|00802b352c36562729352a364d0010002d2f2c6b292c4d010600330e7e090003|@6294,@6301,@6254| 6301:C3,32|00805609561856272b4d0013002c2c4d010d00320e0e0e7b060600050e0e0e0e|@6295,@7300,@2301| 6302:O2|@6303,@174 6303:C3,32|0080560729352a364d0014002a69292c4d010c00310e0e0e7e0700030e0e0e0e|@6255,@6304,@6254| 6304:C4,32|00805607294d0017004d0113000c00034d020c002a2a2f0e7d0600020e0e0e0e|@6258,@7305,@6259,@6305| 6305:O1|@6306 6306:C2,48|00802b37296403202b363b2a0e0c00022d353b2a0e0c0002644d0013000c00022a2a6929270402013b420e0e0e0e0e0e|@5139,@6305| 6307:O2|@6308,@174 6308:C3,32|00802b352c36562729352a364d0010002d2f2c6b292c4d010600330e7e090003|@6294,@6309,@6254| 6309:C3,32|00805609561856272b4d0013002c2c4d010d00320e0e0e7b060600050e0e0e0e|@6295,@7308,@2301| 6310:O2|@6311,@174 6311:C3,32|0080560729352a364d0014002f2b6a292c4d010b00310e0e7e0700030e0e0e0e|@6313,@6312,@6254| 6312:C3,24|0080560856172a4d000d002b4d010800300e0e7b05050004|@6314,@7306,@2291| 6313:S28|4d414b455f28292e6462456e764c6f6f6b7570283129283129283129 6314:S25|4d414b455f28292e6462456e764c6f6f6b7570283329283129 6315:O2|@6316,@174 6316:C3,32|0080560729352a364d0014002f2b6a292c4d010b00310e0e7e0700030e0e0e0e|@6313,@6317,@6254| 6317:C3,24|0080560856172a4d000d002b4d010800300e0e7b05050004|@6314,@7303,@2291| 6318:O2|@6319,@174 6319:C3,32|0080560729352a364d0014002f2b6a292c4d010b00310e0e7e0700030e0e0e0e|@6313,@6320,@6254| 6320:C3,24|0080560856172a4d000d002b4d010800300e0e7b05050004|@6314,@7300,@2291| 6321:O2|@6322,@174 6322:C3,32|00802b352c36562729352a364d0010002d2f2c6b292c4d010600330e7e090003|@6294,@6323,@6254| 6323:C3,32|00805609561856272b4d0013002c2c4d010d00320e0e0e7b060600050e0e0e0e|@6295,@7301,@2301| 6324:O2|@6325,@174 6325:C3,32|0080560729352a364d0014002f2b6a292c4d010b00310e0e7e0700030e0e0e0e|@6313,@6326,@6254| 6326:C3,24|0080560856172a4d000d002b4d010800300e0e7b05050004|@6314,@7308,@2291| 6327:O2|@6328,@174 6328:C3,32|00802b352c36562729352a364d0010002d2f2c6b292c4d010600330e7e090003|@6294,@6329,@6254| 6329:C3,32|00805609561856272b4d0013002c2c4d010d00320e0e0e7b060600050e0e0e0e|@6295,@7305,@2301| 6330:O2|@6331,@174 6331:C3,32|0080560729352a364d0014002f2b6a292c4d010b00310e0e7e0700030e0e0e0e|@6313,@6332,@6254| 6332:C3,24|0080560856172a4d000d002b4d010800300e0e7b05050004|@6314,@7301,@2291| 6333:C3,32|0080560729352a364d0014002f2b6a292c4d010b00310e0e7e0700030e0e0e0e|@6313,@6334,@6254| 6334:C3,24|0080560856172a4d000d002b4d010800300e0e7b05050004|@6314,@7305,@2291| 6335:O2|@6337,@6336 6336:O2|@6338,0 6337:S11|646973706c617954797065 6338:O3|@7136,69,@6339 6339:O4|@6337,-1,@6341,@6340 6340:O3|1,@6346,@603 6341:O2|-1,@6342 6342:O2|-3,@6343 6343:O1|@6344 6344:C3,48|00802b352c362d372e38040700284d2b2b4d001b000c000450292e2e2b2f4d010e00220c0e0e0e7b060900050e0e0e0e|@6345,@271,@6138| 6345:S44|494e495449414c4953455f28292e696e6974476c6f62616c456e76283129646973706c617954797065283129 6346:O4|-2,1,@6347,0 6347:O2|@6349,@6348 6348:O2|@925,@6350 6349:O2|49,@736 6350:O2|@6352,@6351 6351:O2|@6353,0 6352:O2|51,@191 6353:O2|52,@910 6354:O2|@6356,@6355 6355:O2|@6357,0 6356:S3|757365 6357:O3|@7136,69,@6358 6358:O4|@6356,-1,@6359,@910 6359:O2|-1,@6360 6360:O2|-3,@6361 6361:O3|@6363,@174,@6362 6362:O18|@6444,@6449,@6454,@6459,@6464,@6469,@6472,@6475,@6478,@6483,@6486,@6489,@6492,@6495,@6498,@6501,@6504,@6443 6363:C36,800|00802b4d0019034d0115030e0e0c000303064d020a0302082b4d0303030c00023c28403c4d04f8020e0c00043c28403b4d04ec020e0c00044d05e4022b2b2e6b4d06dc023069787adb3b2e3b4d07d0020e0c00034d08c8020e0c000207dd56884d09bc024d0ab8020e0c00024d0bb00232694d0caa020e0e0e0c00024d0da00230694d0e9a020e0e0e0c000228324d0f8e020e0e0e0c0002293b692b2a692d2a692f2a6931220e2b4d1074020e0c00043b2a0e0e0e0c000229352a362b372c382d392e3a2e293b4d1155020e0e0c000303043b50023029352a362a352b36121f000100010029352a364d1233022d2f2c6b292c4d1329020e0e0c0003502f250926081e3d2608502c293b4d1112020e0e0e0c000303043b50023829352a362a352b3602024c01121f000100010029352a364d14eb012d2f2c6b02023001292c4d13dd010e0e0c0003502f250926081e4626085029293b4d11c6010e0e0e0c000303043b50023029352a362a352b36121f000100010029352a364d15a3012d2f2c6b292c4d1399010e0e0c0003502f250926081e3e2608502a293b4d1182010e0e0e0c000303043b50023029352a362a352b36121f000100010029352a364d165f012d2f2c6b292c4d1355010e0e0c0003502f250926081e3e2608502b293b4d113e010e0e0e0c000303043b50023029352a362a352b36121f000100010029352a364d171b012d2f2c6b292c4d1311010e0e0c0003502f250926081e3e2608502d293b4d11fa000e0e0e0c000303043b50023029352a362a352b36121f000100010029352a364d18d7002d2f2c6b292c4d13cd000e0e0c0003502f250926081e3e260826120600e2fd3b271102013b059b0e0e00ff6d293528674d11a3000c0003031829372f4d1997004d1a93000c00035028674d1b89002b6a100200293c4d077e000e0e0e0c00034d1c74002a4d1d6f000c0003294d1e67004d1d63000c00034d1f5c003b4d0757000c0003292b4d204e000e0e0e0c0003504d1f43003b4d073e000e0e0e0c000329392a4d2131002b4d222c000e0c000450344d1922004d1a1e000e0e0e0c0003502f10502d4d190f004d1a0b00320e0e7e0800030e0e0e0e|@6365,I48,I24,@6366,@6367,I11,@6374,@6417,I253,I218,@6424,@1035,@6427,@1023,@6429,@955,@3408,@941,I229,@6431,@6254,@6432,@6433,@6434,@6435,@6436,@6437,@6375,@373,@1064,@344,@6364,@7142,@239,@93,@41| 6364:S8|207261697365640a 6365:S27|4d414b455f28292e757365496e746f456e76283129757365283129 6366:O2|@7120,@7454 6367:O1|@6368 6368:C11,200|008078760d3b3e3b304d00bb000c0004054500ff6d29354d01ad004d02a9000e0e0c000303032902020202022929353c4d0394000e0c000303064d048a000202020202122c2a4d057e006a4d0179004d0675002b6a64107876103b280f2d3b4d0065000e0e0c0004050700ff6d1b0004642928204d0750000e0c00033c28403b4d0844000e0c00043c28404d0939004d0835000e0e0c00042a312f2e2d68053b2a693c28402b4d081e000e0e0e0c00043c28483c4d0810000e0c00042a2a6929270a420e0e0e0e0e|@6370,I61,@7118,I251,I229,@55,@6371,@45,@6369,I11,-1| 6369:O1|@6372 6370:S16|54657874494f2e6f70656e496e283129 6371:S13|54657874494f2e6f70656e496e 6372:C14,176|00812c4d00a9000e0e0c0002030c2c3b4d019c000e0c000302013b03032c02054d028c0010293b4d0385000e0e0c000303033c023c294d0476004d0572000e0e0e0c000303054d066600102928084d075e000e0e0e0c0003293c4d0852000e0e0e0c00032928084d0945000e0e0c0003652928413b4d0a37000c00043b2c2a4d0b2d000e0e0c000303043b50021a2a2a314d0c1b000c000450293c4d0711000e0e0c000325011e29502b2a6929270443|@6373,I105,I231,@78,I229,576460752303423472,I249,@78,I239,I240,I241,I11,I248,I254| 6373:S18|4368617241727261792e6172726179283229 6374:C9,120|00805609294d006f004d016b000c0003294d0263000c00024d035c000e0c00020340293529404d044e000e0e0e0c0003032c56375647293b4d053c000e0c0003293c4d0632000e0e0e0c00032c3b2b4d0725000e0e0c0004502e270402012a6402115628293b3c4d070d000e0e0c0004503b6465420e0e0e|@6376,@6377,@6375,I105,I218,I229,I253,I106,I255| 6375:O1|@6415 6376:S37|4d414b455f28292e757365496e746f456e7628312975736528312967657443686172283129 6377:O2|@6379,@6378 6378:O2|@6388,@6387 6379:C19,480|00802b3b4d00d8010e0c000329354d01ce014d02ca010e0e0e0c000303a22936293b4d00ba010e0e0e0c00030402004d03ad015657692b382c2b2b4d04a1010e0e0c000429352a362a4d0593010c00022f2a452b46502f353036333b2b4d067f010c0004502a4d0776010e0e0e0c0002293b4d086a010e0e0e0c00036403033b023a2a4d0759010e0e0c00023b2a4d094e010e0e0e0c00036403054d0a4101102a4d0b3b010c000203032a020b2a28084d0c2c010e0c000329680164270b06d5293629352a382b39293b4d0012010e0e0e0c0003293b4d0806010e0e0e0c0003640311293b4d01f7004d06f3000c0004503b06cc2b3b4d00e6000e0e0e0c00032a3b4d00da000e0e0e0c00032a2a4d09ce000e0e0e0c00036503142c352d362e372f3830394d0db7000c00065002023b50293b4d00a9000e0e0c0003293b4d089e000e0e0e0c0003640311293b4d018f004d068b000c0004503b027e2b3b4d007e000e0e0e0c00032b352c362b4d0b6f000c0002030c2b3b4d0964000e0c000302013b03032b02054d0e540010292c4d0f4d00020245000e0e0c000303054d103e00102a2a4d0c37000c0003303b4d002e000e0e0e0c0003293c4d112200020218000e0e0e0c0003323b2b4d0611000e0e0c0004502b68012707270464420e0e|@6381,I253,-1,I229,@6382,@41,@369,I255,I223,I113,I231,@52,I105,I252,@6380,@52,I247,@52,I106| 6380:O1|@6384 6381:S17|54657874494f2e696e7075743127283129 6382:C1,24|00800402002c3c2b56470e0e0e0c0004502964420e0e0e0e|@6383| 6383:S32|426173696353747265616d494f28292e696e7075744e4c697374283129283129 6384:C10,144|00842c352d36313b3b4d0083000c0004502d3b4d0179004d0075000e0e0c0004507876223b2c3b2f6a2808342b4d025f000c0004323b2b4d0055000e0e0c0004503b6505460e00ff6d29354d0341004d043d000e0e0c000303032902020202022929353c4d0528000e0c000303064d061e00020202020212312a4d0712006a4d030d004d0809002b6a6410651f050e0e|@6386,I255,-1,I61,@7118,I251,I229,@55,@6385,@45| 6385:S17|54657874494f2e66696c6c427566666572 6386:S20|54657874494f2e66696c6c427566666572283529 6387:O2|@6391,I48 6388:C15,448|00822d36293b4d00b6010e0e0e0c00032f35303731382c4d01a5014d02a1010e0e0c00030307303b45334606cc2c4d038e010e0e0e0c00024d0484010e0c000207d22c352d362e372f382f2c30306b2a3b4d026b010c00030308220c3b452a4606da2a220e4d0557010c0003033b2a68012e2d2b4d0648010e0c00040403002a2a4d073b010c00035029352a362b372b2b2b4d082a010e0e0e0c0004293b6922142a453246270806d72a220e4d0910010e0c00030378220d68012e2d2b4d06ff000c00040403002a2a4d07f3000c00035029352a362b372b2b2b4d08e2000e0e0e0c00043222154d0ad5000e0e0c00033222164d0bc9000202bc000e0e0c0003220d220d2c2c6b2c3b693c28402c4d0cae00020281000e0e0e0c000422132a221422146b22192c452a46270d0265302d31316b220e2c4d0b8600020255000e0e0e0c00030402002b2b2b22100e0c00045029352a362f680133322b4d0661000e0e0c00040403002a2a4d0753000c00035029352a362b372b2b2b4d084200020211000e0e0e0c000429326922192a453246270d27050220040300333c344d0d1f002d56b70e0c00065029352a362a3b69342a452b4627042705440e0e0e0e0e0e|@6390,I253,-1,I229,I105,I218,I113,@262,@80,@1450,I233,I106,I107,I11,@6389| 6389:S6|696e7075744e 6390:S29|426173696353747265616d494f28292e696e7075744e4c697374283329 6391:C21,1096|00842f3530370402002a3b4d0039040e0e0c000303803103382b31314d0128040e0c00044d0220040e0c0002294d0317040c000229334d040e040e0e0e0c0003644d0503040c00022b2b452a46260302432b31314d06f0030e0c0004293b4d00e6030e0e0e0c0003030a56472b2a453b4651021f2935294d03cd030e0e0c0002293b4d04c2030e0e0e0c00032d2c452a4626045006ce2a352b362c37293b4d07a6030e0e0e0c00032b3b4d079a030e0e0e0c00032a2a4d088e030e0e0e0c000329220e4d0981030e0e0c000366034f2a3b4d0773030c00033468012d2b2b4d0a66030e0e0e0c0004644d0b5b030c00022c3b4d0752030e0e0e0c000329220e4d0c45030e0e0c00032e3b2b4d0d39030e0e0c000450302c453b46260506d4293b4d0724030e0c00032b3b4d071a030e0e0e0c00032a2a4d080e030e0e0e0c0003220d2a4d0801030e0e0c00032f352a2a4d0ef4020e0c0003270507d3293b4d07e602020243020e0e0e0c00032b3b4d07d6020e0e0e0c00032a2a4d08ca020e0e0e0c00032d3b4d07be020e0e0e0c00032a6801302b2b4d0aae020e0e0e0c0004644d0ba3020c0002220f2c4d0899020e0e0c00032f3b4d078e020e0e0e0c0003313b2b4d0d81020e0e0c00045022120315220c332c22134d0f6d020e0e0c0005296801640212220c332c22134d1058020202b3010e0c0005293b4d004a020e0e0e0c00030308342d453b465002862935293b4d0032020e0e0e0c00030309220c2e453c4650026c2c2a4d111b02020267000c000303032c020129296801220d3b2b4d0a03020c0004644d0bfb010c0002343b2d4d0df1010e0e0c000450220c3b2c4d0de3010c000450293b69302a69644d02d4010e0c00022217030e2c304d11c6010e0e0e0c000302013b22102b452a46260550260806d7293b4d07aa010e0e0e0c00032b3b4d079e010e0e0e0c00032a2a4d0892010e0e0e0c00032d3b4d0786010e0e0e0c00032a6801302b2b4d0a76010e0e0e0c0004644d0b6b010c0002220f2c4d0861010e0e0c00032f3b4d0756010e0e0e0c0003313b2b4d0d49010e0e0c00045022120339220c2b22124d0136010e0e0e0c00042c2a6929644d0227010c0002294d031f010c00022922154d1115010e0e0c0003220e2c452a4626050263220c2b22124d06fd000e0e0c0004293b4d00f2000e0e0e0c00030308342d453b4650023e2935294d03db00020236000c0002293b4d04ce000e0e0e0c0003640309220c2e453c46500217293b692e2a69644d02b1000e0e0c0002220d2a453b465150502607260329352a362a4d0396000e0e0e0c0002293b4d128a000e0e0e0c0003033c2b4d037d000e0e0c0002220d35220e36220f372210383c28403b4d1364000e0c00042d2a2d2d6b322b3b326b2e3b2b4d0d4f000c0004502a27080202220c2b032f56772a352b362c372d383c28403b4d132f000c00042d2a2d2d6b2f2b3b3b6b2e3b2b4d0d1b000c0004502a2708020129332e452a462d4727081f050e0e0e0e0e0e|@6393,I229,@6394,@369,I223,I113,I218,@6402,I253,I107,I231,@74,@76,I106,I255,I232,@6407,@6392,I234,I233,I11| 6392:O1|@6412 6393:S33|426173696353747265616d494f28292e7265616446726f6d526561646572283529 6394:O1|@6395 6395:C8,80|00822d4d0049000e0e0c0002292309294d013c000e0c00024d0234000e0c0002031129352b353b310e4f0323005000026602152a35294d041600306a4d0510004d060c002b6a641065440e0e0e0e0e0e|@6397,@6398,I105,I218,@6396,@57,@7118,@45| 6396:C10,160|00807876093b2e56420c0002054700ff6d561156272b354d0085004d0181000e0e0c000303032b0202020202262b353c4d026c000e0c000303064d03620002020202020f2a2c2b6a4d0054004d0450002b6a646510294d0546000e0e0e0c0002293b4d023a000e0e0e0c000303033b0228292e4d0629000e0e0c000303052a3b6902162d2a4d0717000c00030e4f080f002100022b2a69296565420e0e0e0e0e|@6401,@7118,I251,I229,@55,@45,I223,I231,I107,@6396| 6397:S32|426173696353747265616d494f28292e72656164566563466f72636564283329 6398:O1|@6399 6399:C1,8|00802b420e0e0e0e|@6400| 6400:S2|5244 6401:S41|426173696353747265616d494f28292e72656164566563466f72636564283329646f52656164283129 6402:O1|@6403 6403:C11,152|00822d4d0091000e0e0c000229230d294d0184000e0c00024d027c000e0c0002035529352b357876093b332e0e0c0002054200ff6d29354d035d004d0459000e0e0c000303032902020202022629353c4d0544000e0c000303064d063a0002020202020f2a2a326a4d032c004d0728002b6a64106502182a35294d081a004d0916006a4d0311004d070d002b6a641065440e0e0e0e0e0e0e|@6405,@6398,I105,I218,@7118,I251,I229,@55,@45,@6404,@6389| 6404:O3|@7396,@6406,0 6405:S28|426173696353747265616d494f28292e726561645665634e42283329 6406:S23|4e6f6e626c6f636b696e674e6f74537570706f72746564 6407:O1|@6408 6408:C8,80|00832e4d0049000e0e0c0002292308294d013c000e0c00024d0234000e0c0002031129352b353b3b0e4f0323005000026602152a35294d041600306a4d0510004d060c002b6a6410651f040e0e0e0e0e|@6410,@6398,I105,I218,@6409,@57,@7118,@45| 6409:C10,184|00807876193b563929303b4d00a9000e0e0c00046456420e0e0c0002054700ff6d561156272b354d018d004d0289000e0e0c000303032b0202020202262b353c4d0374000e0c000303064d046a0002020202020f2a2c2b6a4d015c004d0558002b6a646510293b4d034d000e0e0c000303033c0218292d4d063d000e0e0c000356282a2a4d0730000e0c000365030d292d4d0623002e0e0e7e040003292d4d0616000e0e0e0c00030e4f080b0011000264420e0e0e0e0e0e|@6411,@74,@7118,I251,I229,@55,@45,I106,I231,@6409| 6410:S29|426173696353747265616d494f28292e66696c6c427566666572283429 6411:S38|426173696353747265616d494f28292e66696c6c427566666572283429646f52656164283129 6412:C11,160|00832e4d0099000e0e0c000229230c294d018c000e0c00024d0284000e0c0002035d29352b357876113b34353b2a220e6a29652e0e0c0002054200ff6d29354d035d004d0459000e0e0c000303032902020202022629353c4d0544000e0c000303064d063a0002020202020f2a2a326a4d032c004d0728002b6a64106502182a35294d081a004d0916006a4d0311004d070d002b6a6410651f040e0e0e0e0e0e|@6414,@6398,I105,I218,@7118,I251,I229,@55,@45,@6404,@6413| 6413:S8|63616e496e707574 6414:S31|426173696353747265616d494f28292e66696c6c4275666665724e42283429 6415:C15,432|00812c352d363b4d00a5010e0e0c000229293b4d0199010e0e0c000303033b022229352a362a354d0285014d0181010e0e0c000303052a68010207292503511e2e3b6564294d0367010c00024d0460010e0c00020345293529354d0252014d014e010e0e0e0c000303212936293c4d013e010e0e0e0c000303033b020b4d052f014d062b010c000264020d4d0521014d061d010e0e0c000264020d4d0511014d060d010e0e0c00023b2d3b4d0701010e0e0c0003293c4d08f6000e0e0e0c00036403033b0226291b204e4d01e2000e0e0e0c000303033b0213293c4d09d1000e0e0c0003292502501e3f3b64642d4d0abe000e0e0e0c0002293b4d01b2000e0e0e0c000303033b02103c2f4d0ba1000e0e0c000326031e6e3b657876093b31220c0c0002054500ff6d2e4d0c82000e0e0e0c0002293c4d0176000e0e0e0c000303043b5002172f3b3c4d0d63000c0004503d304d0b59000e0e0c0003502e4d064e000e0e0e0c0002502a102e4d0c40000e0c0002293c4d0136000e0e0e0c000303043b5002172f3b3c4d0d23000c0004503d304d0b19000e0e0c0003502e4d060e000e0e0e0c0002502a2708430e0e0e|@6416,@62,I229,-1,I105,I218,@60,@65,I253,I251,I106,I71,I73,I70,I255| 6416:S17|54657874494f2e70726f74656374283229 6417:C14,136|00822c03064d007f0002044d01790056172d4d0272004d036e000e0e0e0c0003303b694d0461002a692b2a694d0558002a692e2a694d064f002a69312a6927094d0744000e0c00024d083c003b4d0937000c0003292b4d0a2e000e0e0e0c0003504d0823003b4d091e000e0e0e0c000329392a4d0b11002b4d0c0c00320e0e7b050900040e0e0e0e|@6419,@6420,@6421,-1,@355,@6422,@6423,@6418,@369,@7142,I253,@239,@93,@41| 6418:S5|20696e2027 6419:S39|4d414b455f28292e757365496e746f456e762831297573652831296572726f7250726f63283329 6420:S6|4572726f722d 6421:S8|5761726e696e672d 6422:S2|2e0a 6423:S8|272c206c696e6520 6424:O2|@6425,@7142 6425:C5,64|00805607293b4d0036000e0e0e0c0003292e4d012a000e0e0e0c0003505627293b4d001b000c000329392a4d0211002b4d030c00330e0e7b050800040e0e0e0e|@6426,I253,@239,@93,@41| 6426:S15|54657874494f2e7072696e74283129 6427:C2,16|00805607293b4d0006002e0e7e040003|@6428,I253| 6428:S35|4d414b455f28292e757365496e746f456e76283129757365283129636f64652d283129 6429:C1,16|00802b352c362d3756372e7b05030004|@6430| 6430:S39|4d414b455f28292e757365496e746f456e762831297573652831296572726f7250726f63283129 6431:C3,32|00805609561856272b4d0013002c2c4d010d00320e0e0e7b060600050e0e0e0e|@6295,@7306,@2301| 6432:C3,32|00805609561856272b4d0013002c2c4d010d00320e0e0e7b060600050e0e0e0e|@6295,@7300,@2301| 6433:C3,32|00805609561856272b4d0013002c2c4d010d00320e0e0e7b060600050e0e0e0e|@6295,@7305,@2301| 6434:C3,32|00805609561856272b4d0013002c2c4d010d00320e0e0e7b060600050e0e0e0e|@6295,@7303,@2301| 6435:C3,32|00805609561856272b4d0013002c2c4d010d00320e0e0e7b060600050e0e0e0e|@6295,@7301,@2301| 6436:C3,32|00805609561856272b4d0013002c2c4d010d00320e0e0e7b060600050e0e0e0e|@6295,@7308,@2301| 6437:O1|@6438 6438:C7,88|00802b3b4d0050000e0c000329354d0146004d0242000e0e0e0c000303222936293b4d0032000e0e0e0c000329382a4d0325002b4d042000320e0e7b050700042936293728072a3b4d050c00310e0e7b050600040e0e0e0e|@6440,I253,-1,I229,@6439,@41,I61| 6439:O1|@6441 6440:S18|54657874494f2e636c6f7365496e27283129 6441:C8,104|00802b35294d005f000c000229382e3629293b4d0151000e0e0c0003294d0247004d0343000c000303043b500231294d0435000e0e0c00024d052c000e0c0002030b2936292503511e375002122a3b4d0215004d0611000e0e0c0004503b50513b2b300e7d070002|@6442,@6398,I253,-1,I229,I105,I218,I255| 6442:S27|426173696353747265616d494f28292e636c6f7365496e27283129 6443:O2|@6507,@174 6444:O2|@6445,@174 6445:C3,32|0080560729352a364d0014002a69292c4d010c00310e0e0e7e0700030e0e0e0e|@6255,@6446,@6254| 6446:C4,32|00805607294d0017004d0113000c00034d020c002a2a2f0e7d0600020e0e0e0e|@6258,@7306,@6259,@6447| 6447:O1|@6448 6448:C2,48|00802b37296403202b363b2a0e0c00022d353b2a0e0c0002644d0013000c00022a2a6929270402013b420e0e0e0e0e0e|@5139,@6447| 6449:O2|@6450,@174 6450:C3,32|0080560729352a364d0014002a69292c4d010c00310e0e0e7e0700030e0e0e0e|@6255,@6451,@6254| 6451:C4,32|00805607294d0017004d0113000c00034d020c002a2a2f0e7d0600020e0e0e0e|@6258,@7303,@6259,@6452| 6452:O1|@6453 6453:C2,48|00802b37296403202b363b2a0e0c00022d353b2a0e0c0002644d0013000c00022a2a6929270402013b420e0e0e0e0e0e|@5139,@6452| 6454:O2|@6455,@174 6455:C3,32|0080560729352a364d0014002a69292c4d010c00310e0e0e7e0700030e0e0e0e|@6255,@6456,@6254| 6456:C4,32|00805607294d0017004d0113000c00034d020c002a2a2f0e7d0600020e0e0e0e|@6258,@7300,@6259,@6457| 6457:O1|@6458 6458:C2,48|00802b37296403202b363b2a0e0c00022d353b2a0e0c0002644d0013000c00022a2a6929270402013b420e0e0e0e0e0e|@5139,@6457| 6459:O2|@6460,@174 6460:C3,32|0080560729352a364d0014002a69292c4d010c00310e0e0e7e0700030e0e0e0e|@6255,@6461,@6254| 6461:C4,32|00805607294d0017004d0113000c00034d020c002a2a2f0e7d0600020e0e0e0e|@6258,@7308,@6259,@6462| 6462:O1|@6463 6463:C2,48|00802b37296403202b363b2a0e0c00022d353b2a0e0c0002644d0013000c00022a2a6929270402013b420e0e0e0e0e0e|@5139,@6462| 6464:O2|@6465,@174 6465:C3,32|0080560729352a364d0014002a69292c4d010c00310e0e0e7e0700030e0e0e0e|@6255,@6466,@6254| 6466:C4,32|00805607294d0017004d0113000c00034d020c002a2a2f0e7d0600020e0e0e0e|@6258,@7301,@6259,@6467| 6467:O1|@6468 6468:C2,48|00802b37296403202b363b2a0e0c00022d353b2a0e0c0002644d0013000c00022a2a6929270402013b420e0e0e0e0e0e|@5139,@6467| 6469:O2|@6470,@174 6470:C3,32|00802b352c36562729352a364d0010002d2f2c6b292c4d010600330e7e090003|@6294,@6471,@6254| 6471:C3,32|00805609561856272b4d0013002c2c4d010d00320e0e0e7b060600050e0e0e0e|@6295,@7306,@2301| 6472:O2|@6473,@174 6473:C3,32|00802b352c36562729352a364d0010002d2f2c6b292c4d010600330e7e090003|@6294,@6474,@6254| 6474:C3,32|00805609561856272b4d0013002c2c4d010d00320e0e0e7b060600050e0e0e0e|@6295,@7303,@2301| 6475:O2|@6476,@174 6476:C3,32|00802b352c36562729352a364d0010002d2f2c6b292c4d010600330e7e090003|@6294,@6477,@6254| 6477:C3,32|00805609561856272b4d0013002c2c4d010d00320e0e0e7b060600050e0e0e0e|@6295,@7300,@2301| 6478:O2|@6479,@174 6479:C3,32|0080560729352a364d0014002a69292c4d010c00310e0e0e7e0700030e0e0e0e|@6255,@6480,@6254| 6480:C4,32|00805607294d0017004d0113000c00034d020c002a2a2f0e7d0600020e0e0e0e|@6258,@7305,@6259,@6481| 6481:O1|@6482 6482:C2,48|00802b37296403202b363b2a0e0c00022d353b2a0e0c0002644d0013000c00022a2a6929270402013b420e0e0e0e0e0e|@5139,@6481| 6483:O2|@6484,@174 6484:C3,32|00802b352c36562729352a364d0010002d2f2c6b292c4d010600330e7e090003|@6294,@6485,@6254| 6485:C3,32|00805609561856272b4d0013002c2c4d010d00320e0e0e7b060600050e0e0e0e|@6295,@7308,@2301| 6486:O2|@6487,@174 6487:C3,32|0080560729352a364d0014002f2b6a292c4d010b00310e0e7e0700030e0e0e0e|@6313,@6488,@6254| 6488:C3,24|0080560856172a4d000d002b4d010800300e0e7b05050004|@6314,@7306,@2291| 6489:O2|@6490,@174 6490:C3,32|0080560729352a364d0014002f2b6a292c4d010b00310e0e7e0700030e0e0e0e|@6313,@6491,@6254| 6491:C3,24|0080560856172a4d000d002b4d010800300e0e7b05050004|@6314,@7303,@2291| 6492:O2|@6493,@174 6493:C3,32|0080560729352a364d0014002f2b6a292c4d010b00310e0e7e0700030e0e0e0e|@6313,@6494,@6254| 6494:C3,24|0080560856172a4d000d002b4d010800300e0e7b05050004|@6314,@7300,@2291| 6495:O2|@6496,@174 6496:C3,32|00802b352c36562729352a364d0010002d2f2c6b292c4d010600330e7e090003|@6294,@6497,@6254| 6497:C3,32|00805609561856272b4d0013002c2c4d010d00320e0e0e7b060600050e0e0e0e|@6295,@7301,@2301| 6498:O2|@6499,@174 6499:C3,32|0080560729352a364d0014002f2b6a292c4d010b00310e0e7e0700030e0e0e0e|@6313,@6500,@6254| 6500:C3,24|0080560856172a4d000d002b4d010800300e0e7b05050004|@6314,@7308,@2291| 6501:O2|@6502,@174 6502:C3,32|00802b352c36562729352a364d0010002d2f2c6b292c4d010600330e7e090003|@6294,@6503,@6254| 6503:C3,32|00805609561856272b4d0013002c2c4d010d00320e0e0e7b060600050e0e0e0e|@6295,@7305,@2301| 6504:O2|@6505,@174 6505:C3,32|0080560729352a364d0014002f2b6a292c4d010b00310e0e7e0700030e0e0e0e|@6313,@6506,@6254| 6506:C3,24|0080560856172a4d000d002b4d010800300e0e7b05050004|@6314,@7301,@2291| 6507:C3,32|0080560729352a364d0014002f2b6a292c4d010b00310e0e7e0700030e0e0e0e|@6313,@6508,@6254| 6508:C3,24|0080560856172a4d000d002b4d010800300e0e7b05050004|@6314,@7305,@2291| 6509:O2|@6511,@6510 6510:O2|@6512,0 6511:S10|646973706c617956616c 6512:O3|@7136,69,@6513 6513:O4|@6511,-1,@6515,@6514 6514:O3|1,@6520,@603 6515:O2|-1,@6516 6516:O2|-3,@6517 6517:O1|@6518 6518:C3,48|00802b352c362d372e382f39040700284d2b2b4d0019000e0e0c000450292f2f2b30304d010900220e0e0e7b070a0006|@6519,@271,@6136| 6519:S43|494e495449414c4953455f28292e696e6974476c6f62616c456e76283129646973706c617956616c283129 6520:O4|-2,1,@6521,0 6521:O2|@6522,@6157 6522:O2|49,@722 6523:O2|@6525,@6524 6524:O2|@6526,0 6525:S8|6465627567546167 6526:O3|@7136,69,@6527 6527:O4|@6525,-1,@6529,@6528 6528:O4|-3,@6067,@6044,@7397 6529:O2|-1,@6530 6530:O2|-3,@7334 6531:O2|@6533,@6532 6532:O2|@6534,0 6533:S15|636f6d70696c657256657273696f6e 6534:O3|@7136,69,@6535 6535:O4|@6533,-1,@6536,@535 6536:O2|-1,@6537 6537:O2|-3,@6538 6538:S11|352e322052656c65617365 6539:O2|@6541,@6540 6540:O2|@6542,0 6541:S11|66696c654e616d65546167 6542:O3|@7136,69,@6543 6543:O4|@6541,-1,@6545,@6544 6544:O4|-3,@6547,@6044,@7398 6545:O2|-1,@6546 6546:O2|-3,@7333 6547:O2|@535,0 6548:O2|@6550,@6549 6549:O2|@6551,0 6550:S13|6572726f724465707468546167 6551:O3|@7136,69,@6552 6552:O4|@6550,-1,@6554,@6553 6553:O4|-3,@6058,@6044,@7399 6554:O2|-1,@6555 6555:O2|-3,@7299 6556:O2|@6558,@6557 6557:O2|@6559,0 6558:S16|7072696e74446570746846756e546167 6559:O3|@7136,69,@6560 6560:O4|@6558,-1,@6562,@6561 6561:O4|-3,@6564,@6044,@7400 6562:O2|-1,@6563 6563:O2|-3,@7336 6564:O2|@6565,0 6565:O3|1,@603,@536 6566:O2|@6568,@6567 6567:O2|@6569,0 6568:S9|74696d696e67546167 6569:O3|@7136,69,@6570 6570:O4|@6568,-1,@6572,@6571 6571:O4|-3,@6067,@6044,@7401 6572:O2|-1,@6573 6573:O2|-3,@7286 6574:O2|@1633,@6575 6575:O2|@6576,0 6576:O3|@7136,69,@6577 6577:O4|@1633,-1,@6579,@6578 6578:O3|1,@535,@6600 6579:O2|-1,@6580 6580:O2|-3,@6581 6581:O1|@6582 6582:C12,152|00802b4d0091000e0e0c0002293d4d0186000e0e0e0c00036403442b4d0078000e0c00023d2a4d026e000e0e0e0c00036403054d036100102b4d045b000c000203032b020b2b404d054d000e0e0c00032928784d0641000e0e0c00036402013b03033c02044d072f004d082b002a692d2a4d0923000c0003293b4d061a000e0e0e0c000303054d0a0e00102935292704420e0e0e0e0e0e0e|@6584,I223,I233,I231,@52,I105,I252,I229,-1,@6585,@1773,@6583| 6583:O3|8,@6599,@6598 6584:S45|494e495449414c4953455f28292e696e6974476c6f62616c456e76283129776f72644f66537472696e67283129 6585:C2,16|00804d000a0056172d6a420e0e0e0e0e|@6587,@6586| 6586:C8,96|0080560856172d2b2b4d0053000c0004293b4d014a000e0e0e0c000303033b023b293529352a362a4d0234004d0330000e0c000303054d042600102a4d0520000e0c000203032a020b2a4d0612000e0e0e0c0002292b69296801270566420e0e|@6589,@6590,I229,4611686018427387903,I233,@6588,I105,I152| 6587:S21|576f7264732e576f72642e7363616e283129283129 6588:O3|5,@6597,0 6589:S24|576f7264732e576f72642e7363616e283129283129283129 6590:O1|@6591 6591:C9,592|00822b4d0049024d0145020e0e0c00030a02000d0011000a00281002083d020528080201403b3b30300c0002293b4d021e020e0e0e0c000303033b06ce293529352928304d0208020e0c000307d92a3629340e0e0e0c0002293b4d02f2010e0e0e0c000303033b06d4293529352a362a28774d02da010e0e0e0c000303cc220d3c4d01cb010c00030a00000f003b3b2b0e4f03bb01d0000402ae29220f0c0002293b4d02aa010e0e0e0c000303033b0284293529352a362a28784d0292010e0e0e0c000303033c020b2a28584d0280010e0c0003032c22113c4d0273010c000303103b3b2b1604006601130000000004020e3b3b2b1603005601130000000004023222113c4d02470102023d010c000303103b3b2f160400360113000000000402123b3b2f0202b6001603002201130000000004666402103b3b2b020286000e0e4f040b01d00004027a2a28784d02ff000c000303033c020b2a28584d02f0000e0c0003030c3c220e4d05e3000c000302013b0325220d3c4d02d4000e0c0003030c3b3b2b4f04c700d00004020a3b3b2b4f03bb00d00004022a220d3c4d02af000c000303103b3b22110e0e0e4f049f00d00004020e3b3b22110e0e0e4f038f00d0000466293b4d0285000e0e0c000303093b2c692968016402012966026a2a3628092b4d0668000e0c0003030c2a280d4d065b000c000302013b03033c020c2a28204d0249000e0e0c0003030e2934344d073b00220c7b050c0004323c4d022e000e0e0e0c000303103b3b220d0e0e0e4f041b00900004020e3b3b220d0e0e0e4f030b0090000464652704440e0e0e|@6593,-2,I107,I229,@6594,@6592,I251,I248,@6590| 6592:C8,328|00822b56180c0002293b4d003a010e0e0e0c0003030f2e03092d2d692968016402013b06ca293529352a362a28304d0116010e0e0e0c0003030c2a28394d0207010c000302013b03323028104d03f8000e0c0003292c4d04ee000e0e0e0c00032928304d05e1000e0e0c00033c2a2e0e0e4f06d3009100046602ca2a28414d01c6000e0e0e0c0003030c2a28464d02b7000c000302013b033f3028104d03a8000e0c0003292c4d049e000e0e0e0c00032928414d0591000e0e0c000329404d0486000e0e0e0c00033c2a2f0e0e4f067700a100042704026d2a28614d0169000e0e0c000303102a28664d025b00020255000c000302013b033f3028104d0348000e0c0003292c4d043e000e0e0e0c00032928614d0531000e0e0c000329404d0426000e0e0e0c00033c2a2f0e0e4f061700a100042704020d3103093030692968016402013b666444|@6596,I229,I231,I232,I108,I106,I107,@6592| 6593:S11|7363616e576f7264283329 6594:C8,160|00822b56180c0002293b4d0092000e0e0e0c0003030f2e03092d2d692968016402013b0279293529352a362a28304d016e000e0e0e0c0003031d564428302a4d025d000e0e0c00032c2a4d0352000e0e0e0c00036502013b03365644312a4d043e000e0e0e0c0003292d4d0232000e0e0e0c00032928304d0525000e0e0c00033c2a2f0e0e4f061700a100042704020d3103093030692968016402013b666444|@6595,I229,I231,I106,I234,I108,I107,@6594| 6595:S25|7363616e576f7264283329726561645f646967697473283329 6596:S29|7363616e576f7264283329726561645f6865785f646967697473283329 6597:S8|4f766572666c6f77 6598:S21|496e76616c696420776f726420636f6e7374616e74 6599:S10|436f6e76657273696f6e 6600:O4|-3,0,@5381,@7402 6601:O2|@6603,@6602 6602:O2|@6604,0 6603:S15|7072696e74456e7669726f6e546167 6604:O3|@7136,69,@6605 6605:O4|@6603,-1,@6607,@6606 6606:O4|-3,@6611,@6044,@7404 6607:O2|-1,@6608 6608:O2|-3,@7403 6609:O2|@6610,@7339 6610:C1,16|008056072928452e6a64420e0e0e0e0e|@954| 6611:O2|@591,0 6612:O2|@6614,@6613 6613:O2|@6615,0 6614:S16|6d6178496e6c696e6553697a65546167 6615:O3|@7136,69,@6616 6616:O4|@6614,-1,@6618,@6617 6617:O4|-3,@6058,@6044,@7405 6618:O2|-1,@6619 6619:O2|-3,@7327 6620:O2|@6622,@6621 6621:O2|@6623,0 6622:S10|45786e4d657373616765 6623:O3|@7163,69,@6624 6624:O3|@6622,@573,@6625 6625:O4|@6626,I48,0,0 6626:O4|-1,@7407,@7408,@7406 6627:O2|@6629,@6628 6628:O2|@6630,0 6629:S10|65786e4d657373616765 6630:O3|@7136,69,@6631 6631:O4|@6629,-1,@895,@6632 6632:O3|1,@2689,@535 6633:O2|@6635,@6634 6634:O2|@6636,0 6635:S12|706172736574726565546167 6636:O3|@7136,69,@6637 6637:O4|@6635,-1,@6639,@6638 6638:O4|-3,@6067,@6044,@7410 6639:O2|-1,@6640 6640:O2|-3,@7288 6641:O2|@6643,@6642 6642:O2|@6644,0 6643:S14|636f6e76537472696e674e616d65 6644:O3|@7136,69,@6645 6645:O4|@6643,-1,@6646,@535 6646:O2|-1,@6647 6647:O2|-3,@1621 6648:O2|@6650,@6649 6649:O2|@6651,0 6650:S8|7072696e7456616c 6651:O3|@7136,69,@6652 6652:O4|@6650,-1,@6654,@6653 6653:O3|1,@6662,@603 6654:O2|-1,@6655 6655:O2|-3,@6656 6656:O1|@6657 6657:C12,128|00802b352c362d372e380407004d006f004d016b002c692b2a454d026200464d035d00472d484d045600494d0551004a2b4b502b3036313732382b4d0641000e0e0c000203352a4d0735000e0e0c000203262a4d0829000e0e0c0002294d091f000c0002292c220d31220e4d0a110022140e0e7b071000063b02013b270b420e|@6659,@6660,@6658,@5191,@5193,@5195,@5182,@5768,@2759,@2749,@5129,@5117| 6658:C3,56|00802b3529293b4d002d000e0e0c000303033b021b282056370c000250293c4d0115000e0e0c0003292502501e273b6465420e0e0e0e0e0e|@5190,I232,I107| 6659:S41|494e495449414c4953455f28292e696e6974476c6f62616c456e762831297072696e7456616c283129 6660:O1|@6661 6661:C1,8|00803b420e0e0e0e|@5188| 6662:O4|-2,1,@6663,0 6663:O2|@6522,@6664 6664:O2|@925,@6665 6665:O2|@6161,@6351 6666:O2|@6668,@6667 6667:O2|@6669,0 6668:S9|556e6976657273616c 6669:O3|@7163,69,@6670 6670:O3|@6668,@573,@6671 6671:O4|@6672,I48,0,0 6672:O4|-1,@7412,@7413,@7411 6673:O2|@5915,@6722 6674:O2|@6676,@6675 6675:O2|@6677,0 6676:S10|74616750726f6a656374 6677:O3|@7136,69,@6678 6678:O4|@6676,-1,@6680,@6679 6679:O3|1,@6686,@6685 6680:O2|-1,@6681 6681:O2|-3,@6682 6682:O1|@6683 6683:C1,8|00802b37420e0e0e|@6684| 6684:S29|556e6976657273616c2e74616750726f6a6563742d2370726f6a656374 6685:O3|1,@5914,@6688 6686:O4|-3,@6687,@6044,@7415 6687:O2|@6688,0 6688:O3|3,@7416,79992 6689:O2|@6044,@6690 6690:O2|@6691,0 6691:O3|@7156,69,@6045 6692:O2|@6694,@6693 6693:O2|@6695,0 6694:S9|746167496e6a656374 6695:O3|@7136,69,@6696 6696:O4|@6694,-1,@6698,@6697 6697:O3|1,@6704,@6703 6698:O2|-1,@6699 6699:O2|-3,@6700 6700:O1|@6701 6701:C1,8|00802b36420e0e0e|@6702| 6702:S27|556e6976657273616c2e746167496e6a6563742d23696e6a656374 6703:O3|1,@6706,@5914 6704:O4|-3,@6705,@6044,@7417 6705:O2|@6706,0 6706:O3|3,@7418,79992 6707:O2|@6709,@6708 6708:O2|@6710,0 6709:S5|7461674973 6710:O3|@7136,69,@6711 6711:O4|@6709,-1,@6713,@6712 6712:O3|1,@6719,@6718 6713:O2|-1,@6714 6714:O2|-3,@6715 6715:O1|@6716 6716:C1,8|00802b35420e0e0e|@6717| 6717:S19|556e6976657273616c2e74616749732d236973 6718:O3|1,@5914,@191 6719:O4|-3,@6720,@6044,@7419 6720:O2|@6721,0 6721:O3|3,@7420,79992 6722:O2|@6723,0 6723:O3|@7156,69,@5916 6724:O2|@1621,@6725 6725:O2|@6726,0 6726:O3|@7136,69,@6727 6727:O4|@1621,-1,@6729,@6728 6728:O3|1,@535,@535 6729:O2|-1,@6730 6730:O2|-3,@6731 6731:O1|@6732 6732:C5,40|00802b4d0021000e0e0c00024d0118002d2b6a3b3b4f020f003000024d0308002f0e0e0e7d060002|@6734,I223,@6735,@6733,@357| 6733:C8,168|008056042c2a4d009e000e0e0e0c00036403033b028c56032c292b4d0189000e0e0c0003293b4d027e000e0e0e0c000303033b0245293529354d036b002a4d0466000e0e0e0c000303262a36292f0e0e0e0c0002293b4d024e000e0e0e0c000303033b02082a250626051e513b6502092a362a2a69296801656565293b4d0227000c000303054d051e0010293529352a36290e0e0e4f060f005100022b2a69292707420e0e0e0e0e|@6738,I113,@6739,I229,I48,I24,@6737,@6733| 6734:S22|4d6973632e756e657363617065537472696e67283129 6735:C10,136|008056082c2a4d007e000e0e0e0c00036403033b026a56072c3b4d016a000e0e0e0c000303033c0218294d025a000e0e0e0c00022d2a4d034e000e0e0e0c00036403054d04410010294d053b000c000203032902182c28084d062c000e0c00032a2a4d0722000e0e0e0c0003642d3c4d0815000e0e0c00032a2a692968012704420e0e0e0e0e0e0e|@6736,I113,I234,I223,I231,@52,I105,I239,I252,I106| 6736:S28|4d6973632e756e657363617065537472696e67283129726472283129 6737:O3|8,@6599,@6748 6738:S34|4d6973632e756e657363617065537472696e67283129636f6e764368617273283129 6739:O1|@6740 6740:C13,896|00812c2c0e0c0002293b4d0072030e0e0e0c0003030c4d0166032e692968016406d1293529352a362a28204d0251030e0e0c000303033c020b287e2b4d0240030e0c000303033b06da2a285c4d0030030e0c000307d529300e0c0002293b4d001e030e0e0e0c000303033b06da293529352928614d0008030e0c0003030c2a3628072a692968016506d92928624d00ef020c0003030c2a3628082a692968016506ce2928744d00d7020c0003030c2a3628092a692968016506da29286e4d00bf020c0003030b2a36402a692968016506cb2928764d00a8020e0c0003030c2a36280b2a692968016506d42928664d008f02020283020c0003030c2a36280c2a692968016506d82928724d0073020c0003030c2a36280d2a692968016506dc29285c020252024d005702020243020c0003030c2a36285c2a692968016506d92928224d003b02020224020c0003030c2a3628222a692968016506ca29285e4d001f02020207020c000303922a3629340202fa010e0e0e0c0002293b4d0002020e0e0e0c000303033b026e293529352a362a28400202d6014d03e6010202ce010e0e0e0c0003030c285f2b4d03d3010c000302013b03402a28404d04c4010202ac010e0c0003293b4d05b6010e0e0e0c000303033c020f2928ff4d06a40102028c010e0c000303054d0796011029292c692968016602013b666506d870012928754d007d010e0e0c000303382a363b3f2b220d4d086b01020253010c0005293b4d005e01020246010e0e0e0c000303033b020e293529352a362a2a6929680127046506da2a3628092b4d0935010e0e0c0003030c2a280d4d0927010c000302013b03033c020c2a28204d0015010e0e0c000303a52929220c0e0e0e0c0002293b4d00fe000e0e0e0c000303032a0241293529352a3628092b4d09e6000e0e0e0c0003030c2a280d4d09d7000c000302013b03033c020c2a28204d00c5000e0e0c0003030a29250526041e543b02012d666534020298000e0c0002293b4d00a2000e0e0e0c000303033b022b293529352a362a285c4d008a000e0e0e0c00034d0a80000e0c000203033b020a4d0173002a69296801646664025428302b02024e004d095e000e0e0e0c0003030c2a28324d094f000c000302013b03313b3e2f220d4d0b3e000e0e0e0c0005293b4d0032000e0e0e0c000303033b020e293529352a362a2a6929680127046402013b64656402072a2a69296801646664430e0e0e0e0e0e|@6742,I229,I48,I250,I231,I107,I234,I233,@361,@6743,I248,I218,@6741| 6741:O1|@6746 6742:S16|436861722e7363616e42617365283229 6743:O1|@6744 6744:C12,568|00832d3b4d0030020e0c0003033b2e28ff4d0123020c000303033b022a2e3b4d0215020e0e0c000303033c020b2e28ff4d0104020e0c000303054d03fa01102e292e692968016506d02c2c0e0e0c0002293b4d00e2010e0e0e0c0003034f2e4d04d5014d05d1010e0e0c000303033c020b2f28ff4d01c0010e0c000303033b022a2f3b4d02b1010e0e0c000303033c020b2f28ff4d01a0010e0c000303054d039601102f292f692968016506cc293529352a3628302b4d067e010e0e0e0c0003030c2a28394d066f010c000302013b033f313c4d0761010e0e0c00033328104d0855010e0e0c0003292d4d094a010e0e0e0c00032928304d073d010e0e0c0003292d2f220d4d0a2f01220e7b060e000528612b4d06210102021a010e0e0c0003030c2a28664d060f010c000302013b034f313c4d0701010e0e0c00033328104d08f5000e0e0c0003292d4d09ea000e0e0e0c00032928614d07dd000e0e0c000329404d09d2000e0e0e0c0003292e30220e4d0ac300220f0202b9007b060f000528412b4d06b1000e0e0c0003030c2a28464d06a3000c000302013b034b313c4d0795000e0e0c00033328104d0889000e0e0c0003292d4d097e000e0e0e0c00032928414d0771000e0e0c000329404d0966000e0e0e0c0003292e30220e4d0a5700220f7b060f0005314d044b004d0547000c000303033c020b3228ff4d0138000e0c000303033b022a323b4d0229000e0e0c000303033c020b3228ff4d0118000e0c000303054d030e0010322932692968016566641f040e|@6745,I229,I233,I234,@361,-1,I231,I248,I107,I108,I106,@6743| 6745:S16|436861722e7265616448657827283429 6746:C11,280|00832d3b4d0010010e0c0003033b2e28ff4d0103010c000303033b022a2e3b4d02f5000e0e0c000303033c020b2e28ff4d01e4000e0c000303054d03da00102e292e692968016502c62c2c0e0e0c0002293b4d00c2000e0e0e0c0003034b2f28ff4d01b3000c000303033c020b2e3b4d01a5000e0e0c000303033b022a2f3b4d0295000e0e0c000303033c020b2f28ff4d0184000e0c000303054d037a00102f292f69296801650265293529352a3628302b4d0462000e0e0e0c0003030c28392b4d0553000c000302013b033f313c4d0645000e0e0c000333404d073a000e0e0e0c0003292d4d082e000e0e0e0c00032928304d0621000e0e0c0003292d2f220d4d091300220e7b060e00053b66641f040e0e0e0e0e0e0e|@6747,I229,I233,I234,@361,I248,I231,I107,I108,I106,@6741| 6747:S15|436861722e72656164446563283429 6748:S23|496e76616c696420737472696e6720636f6e7374616e74 6749:O2|@1624,@6750 6750:O2|@6751,0 6751:O3|@7136,69,@6752 6752:O4|@1624,-1,@6754,@6753 6753:O3|1,@535,@536 6754:O2|-1,@6755 6755:O2|-3,@6756 6756:O1|@6757 6757:C12,168|00802b4d00a1000e0e0c0002293e4d0196000e0e0e0c000364031c2b3b3d4d0286000e0e0e0c0004294d037b004d0477000c00036402013b03033c02372b4d0066000e0e0e0c0002293f4d015a000e0e0e0c000364031c2b3b3e4d024a000e0e0e0c0004294d053f004d043b000c00036402013b03033c02044d062b004d0727002a692d2a4d081f000c0003293b4d0916000e0e0e0c000303054d0a0a00102935292704420e0e0e|@6759,I223,I231,@1447,@1147,I24,@6760,-1,@6761,@1773,I229,@6758| 6758:O3|8,@6599,@6763 6759:S44|494e495449414c4953455f28292e696e6974476c6f62616c456e76283129696e744f66537472696e67283129 6760:S3|7e3078 6761:C2,16|00804d000a0056172d6a420e0e0e0e0e|@1762,@6762| 6762:C2,24|00802b561856274d000d002e0e0e0e7b050300040e0e0e0e|@1764,@1763| 6763:S24|496e76616c696420696e746567657220636f6e7374616e74 6764:O2|@6766,@6765 6765:O2|@6767,0 6766:S13|646973706c6179537472756374 6767:O3|@7136,69,@6768 6768:O4|@6766,-1,@6770,@6769 6769:O3|1,@6775,@603 6770:O2|-1,@6771 6771:O2|-3,@6772 6772:O1|@6773 6773:C3,48|00802b352c362d372e382f39040700284d2b2b4d0019000e0e0c000450292f2f2b30304d010900220e0e0e7b070a0006|@6774,@271,@6123| 6774:S46|494e495449414c4953455f28292e696e6974476c6f62616c456e76283129646973706c6179537472756374283129 6775:O4|-2,1,@6776,0 6776:O2|@6777,@6157 6777:O2|49,@773 6778:O2|@6780,@6779 6779:O2|@6781,0 6780:S13|6c696e654c656e677468546167 6781:O3|@7136,69,@6782 6782:O4|@6780,-1,@6784,@6783 6783:O4|-3,@6058,@6044,@7422 6784:O2|-1,@6785 6785:O2|-3,@7421 6786:O2|@6791,@7279 6787:O2|@6788,@7279 6788:C2,32|00802b3556174d0016000e0e0e0c000303033c0202020202013b420e0e0e0e0e|@954,I251| 6789:O2|@6790,@7279 6790:C1,16|008056072928452e6a64420e0e0e0e0e|@954| 6791:C3,40|00802b3556174d001e000e0e0e0c000303062b3729640202020202054d01080010420e0e0e0e0e0e|@954,I251,@958| 6792:O2|@6794,@6793 6793:O2|@6795,0 6794:S10|646973706c6179466978 6795:O3|@7136,69,@6796 6796:O4|@6794,-1,@6798,@6797 6797:O3|1,@6806,@603 6798:O2|-1,@6799 6799:O2|-3,@6800 6800:O1|@6801 6801:C2,16|00802b352c364d0006002d0e7e030003|@6803,@6802| 6802:O1|@6804 6803:S43|494e495449414c4953455f28292e696e6974476c6f62616c456e76283129646973706c6179466978283129 6804:C5,88|00812c352d36040700284d2f2b4d0047000c00045029352a372b382c23062d4d0135002b0e0c0002502f1be7032b4d0226000e0e0e0c0004504d031b002e0e0e0e0c000250302c0e0e0c0002503b2d347d0c00020e0e0e0e|@6805,@271,@333,@2196,@329| 6805:S43|494e495449414c4953455f28292e696e6974476c6f62616c456e76283129646973706c6179466978283229 6806:O4|-2,1,@6807,0 6807:O2|@6809,@6808 6808:O2|@6810,0 6809:O2|49,@611 6810:O2|50,@910 6811:O2|@6813,0 6812:S13|6c696e654e756d626572546167 6813:O3|@7136,69,@6814 6814:O4|@6812,-1,@6816,@6815 6815:O4|-3,@6564,@6044,@7423 6816:O2|-1,@6817 6817:O2|-3,@7262 6818:O2|47,@6819 6819:O2|@6820,0 6820:O3|@7136,69,@6821 6821:O4|47,-1,@190,@5986 6822:O2|@6824,@6823 6823:O2|@6825,0 6824:S3|646976 6825:O3|@7136,69,@6826 6826:O4|@6824,-1,@190,@5986 6827:O2|@6829,@6828 6828:O2|@6830,0 6829:S6|766563746f72 6830:O3|@7156,69,@6831 6831:O6|@6829,1,0,@6833,@540,@6832 6832:O2|-1,@7425 6833:O2|@6834,0 6834:O3|3,@7424,79992 6835:O2|60,@6836 6836:O2|@6837,0 6837:O3|@7136,69,@6838 6838:O4|60,-1,@190,@189 6839:O2|62,@6840 6840:O2|@6841,0 6841:O3|@7136,69,@6842 6842:O4|62,-1,@190,@189 6843:O2|@6845,@6844 6844:O2|@6846,0 6845:S7|52756e43616c6c 6846:O3|@7163,69,@6847 6847:O3|@6845,@573,@6848 6848:O4|@6849,I48,0,0 6849:O4|-1,@7427,@7428,@7426 6850:O2|@177,20 6851:O2|@7061,@7060 6852:O2|@6854,@6853 6853:O2|@6855,0 6854:S10|756e7361666543617374 6855:O3|@7136,69,@6856 6856:O4|@6854,-1,@6858,@6857 6857:O3|1,@6863,@6862 6858:O2|-1,@6859 6859:O2|-7,@6860 6860:O8|@465,@6861,1,0,1,0,0,0 6861:S13|756e7361666543617374283129 6862:O3|3,@7431,79992 6863:O3|3,@7430,79992 6864:O2|@6866,@6865 6865:O2|@6867,0 6866:S14|52756e5f657863657074696f6e31 6867:O3|@7302,69,@6868 6868:O4|@6870,@6866,@6885,@6869 6869:O4|@6888,I48,1,0 6870:O3|I48,@6872,@6871 6871:O4|@6873,I48,1,0 6872:O3|1,@7433,@7432 6873:O3|0,@575,@6874 6874:O10|0,0,0,0,0,0,0,@6876,@6875,0 6875:O2|@6882,@6881 6876:O2|@6878,@6877 6877:O2|@6879,0 6878:S7|65785f6964656e 6879:O3|@7136,69,@6880 6880:O4|@6878,-1,@333,@536 6881:O2|@6883,0 6882:S7|65785f74797065 6883:O3|@7156,69,@6884 6884:O6|@6882,0,0,0,@524,@333 6885:O2|-1,@6886 6886:O2|-7,@6887 6887:O8|@465,@6866,0,0,1,0,0,0 6888:O3|0,@575,@6889 6889:O10|0,@6890,0,0,0,0,0,0,0,0 6890:O2|@6892,@6891 6891:O2|@6893,0 6892:S2|6578 6893:O3|@7136,69,@6894 6894:O4|@6892,0,@333,@6895 6895:O4|-3,0,@6882,@7434 6896:O2|@6898,@6897 6897:O2|@6899,0 6898:S9|72756e5f63616c6c30 6899:O3|@7136,69,@6900 6900:O4|@6898,-1,@6902,@6901 6901:O3|1,@536,@6916 6902:O2|-1,@6903 6903:O2|-7,@6904 6904:O8|@6905,@6898,1,0,1,0,0,0 6905:O2|9,@6906 6906:O2|@6908,@6907 6907:O2|@6911,0 6908:O4|-4,1,@6909,0 6909:O4|4,@463,@6910,1 6910:O2|-3,I189 6911:O2|-7,@6912 6912:O8|@6914,@6913,2,0,1,0,0,0 6913:S12|72756e5f63616c6c30283129 6914:O4|4,0,@6915,0 6915:O5|-5,1,1,1,0 6916:O3|1,@603,@6917 6917:O3|3,@7435,79992 6918:O2|@6920,@6919 6919:O2|@6921,0 6920:S9|72756e5f63616c6c31 6921:O3|@7136,69,@6922 6922:O4|@6920,-1,@6924,@6923 6923:O3|1,@536,@6928 6924:O2|-1,@6925 6925:O2|-7,@6926 6926:O8|@6909,@6927,1,0,1,0,0,0 6927:S12|72756e5f63616c6c31283129 6928:O3|1,@6917,@6929 6929:O3|3,@7436,79992 6930:O2|@6932,@6931 6931:O2|@6933,0 6932:S9|72756e5f63616c6c32 6933:O3|@7136,69,@6934 6934:O4|@6932,-1,@6936,@6935 6935:O3|1,@536,@6946 6936:O2|-1,@6937 6937:O2|-7,@6938 6938:O8|@6939,@6932,1,0,1,0,0,0 6939:O2|9,@6940 6940:O2|@6908,@6941 6941:O2|@6942,0 6942:O2|-7,@6943 6943:O8|@6945,@6944,2,0,1,0,0,0 6944:S12|72756e5f63616c6c32283129 6945:O4|4,@5363,@6915,0 6946:O3|1,@6948,@6947 6947:O3|3,@7437,79992 6948:O4|-2,1,@6949,0 6949:O2|@6951,@6950 6950:O2|@6952,0 6951:O2|49,@6917 6952:O2|50,@6929 6953:O2|@6955,@6954 6954:O2|@6956,0 6955:S9|72756e5f63616c6c33 6956:O3|@7136,69,@6957 6957:O4|@6955,-1,@6959,@6958 6958:O3|1,@536,@6973 6959:O2|-1,@6960 6960:O2|-7,@6961 6961:O8|@6962,@6955,1,0,1,0,0,0 6962:O2|9,@6963 6963:O2|@6908,@6964 6964:O2|@6965,0 6965:O2|-7,@6966 6966:O8|@6968,@6967,2,0,1,0,0,0 6967:S12|72756e5f63616c6c33283129 6968:O4|4,@6969,@6915,0 6969:O2|@841,@6970 6970:O2|@5365,@6971 6971:O2|@6972,0 6972:O3|6,@465,2 6973:O3|1,@6975,@6974 6974:O3|3,@7438,79992 6975:O4|-2,1,@6976,0 6976:O2|@6951,@6977 6977:O2|@6952,@6978 6978:O2|@6979,0 6979:O2|51,@6947 6980:O2|@6982,@6981 6981:O2|@6983,0 6982:S9|72756e5f63616c6c34 6983:O3|@7136,69,@6984 6984:O4|@6982,-1,@6986,@6985 6985:O3|1,@536,@7001 6986:O2|-1,@6987 6987:O2|-7,@6988 6988:O8|@6989,@6982,1,0,1,0,0,0 6989:O2|9,@6990 6990:O2|@6908,@6991 6991:O2|@6992,0 6992:O2|-7,@6993 6993:O8|@6995,@6994,2,0,1,0,0,0 6994:S12|72756e5f63616c6c34283129 6995:O4|4,@6996,@6915,0 6996:O2|@841,@6997 6997:O2|@5365,@6998 6998:O2|@6972,@6999 6999:O2|@7000,0 7000:O3|6,@465,3 7001:O3|1,@7003,@7002 7002:O3|3,@7439,79992 7003:O4|-2,1,@7004,0 7004:O2|@6951,@7005 7005:O2|@6952,@7006 7006:O2|@6979,@7007 7007:O2|@7008,0 7008:O2|52,@6974 7009:O2|@7011,@7010 7010:O2|@7012,0 7011:S9|72756e5f63616c6c35 7012:O3|@7136,69,@7013 7013:O4|@7011,-1,@7015,@7014 7014:O3|1,@536,@7031 7015:O2|-1,@7016 7016:O2|-7,@7017 7017:O8|@7018,@7011,1,0,1,0,0,0 7018:O2|9,@7019 7019:O2|@6908,@7020 7020:O2|@7021,0 7021:O2|-7,@7022 7022:O8|@7024,@7023,2,0,1,0,0,0 7023:S12|72756e5f63616c6c35283129 7024:O4|4,@7025,@6915,0 7025:O2|@841,@7026 7026:O2|@5365,@7027 7027:O2|@6972,@7028 7028:O2|@7000,@7029 7029:O2|@7030,0 7030:O3|6,@465,4 7031:O3|1,@7033,@7032 7032:O3|3,@7440,79992 7033:O4|-2,1,@7034,0 7034:O2|@6951,@7035 7035:O2|@6952,@7036 7036:O2|@6979,@7037 7037:O2|@7008,@7038 7038:O2|@7039,0 7039:O2|53,@7002 7040:O2|@7042,@7041 7041:O2|@7043,0 7042:S14|52756e5f657863657074696f6e30 7043:O3|@7302,69,@7044 7044:O4|@7046,@7042,@7051,@7045 7045:O4|@7054,I48,0,0 7046:O3|I48,@7048,@7047 7047:O4|@7049,I48,0,0 7048:O3|1,@7442,@7441 7049:O3|0,@575,@7050 7050:O10|0,0,0,0,0,0,0,0,@6876,0 7051:O2|-1,@7052 7052:O2|-7,@7053 7053:O8|@465,@7042,0,0,1,0,0,0 7054:O3|0,@575,@7055 7055:O10|0,@7056,0,0,0,0,0,0,0,0 7056:O2|@6892,@7057 7057:O2|@7058,0 7058:O3|@7136,69,@7059 7059:O4|@6892,0,@333,@205 7060:O2|@7062,0 7061:S11|6164644f7665726c6f6164 7062:O3|@7136,69,@7063 7063:O4|@7061,-1,@7065,@7064 7064:O3|1,@7066,@910 7065:O2|-2,0 7066:O3|1,@7068,@7067 7067:O3|3,@7444,79992 7068:O3|3,@7443,79992 7069:O2|@681,@7070 7070:O2|@7071,0 7071:O3|@7136,69,@679 7072:O2|@2459,@7073 7073:O2|@7074,0 7074:O3|@7156,69,@2457 7075:O2|@2845,@7076 7076:O2|@7078,@7077 7077:O2|@7079,0 7078:O3|@7156,69,@3280 7079:O3|@7136,69,@3287 7080:O2|@604,@7081 7081:O2|@7082,0 7082:O3|@7156,69,@605 7083:O2|61,@7084 7084:O2|@7085,0 7085:O3|@7136,69,@7086 7086:O4|61,-1,@7088,@7087 7087:O3|1,@7089,@191 7088:O2|-2,-1 7089:O4|-2,1,@7090,0 7090:O2|@7092,@7091 7091:O2|@7094,0 7092:O2|49,@7093 7093:O3|3,@7445,79996 7094:O2|50,@7093 7095:O2|@5381,@7096 7096:O2|@7097,0 7097:O3|@7156,69,@5379 7098:O2|@632,@7099 7099:O2|@7100,0 7100:O3|@7136,69,@630 7101:O2|@818,@7102 7102:O2|@7103,0 7103:O3|@7136,69,@816 7104:O2|@542,@7105 7105:O2|@7106,0 7106:O3|@7156,69,@543 7107:O2|@199,@7108 7108:O2|@7109,0 7109:O3|@7156,69,@200 7110:O2|@7111,0 7111:O3|@7156,69,@538 7112:C20,168|00804d00a2002c694d019c002d694d0296002e694d0390002f694d048a0030694d05840031694d067e0032694d07780033694d08720034694d096c00220c694d0a6500220d694d0b5e00220e694d0c5700220f694d0d50002210694d0e49002211694d0f42002212694d103b002213694d1134002214692e2c2f2f2d2210220d2211322212221b2219221c2213221d2217221c221e68124d120d0022162b6a292714420e0e0e0e0e|@7113,@6487,@6493,@6499,@6490,@6507,@6505,@6470,@6476,@6484,@6502,@6473,@6496,@6445,@6455,@6460,@6450,@6479,@6465,@6363| 7113:S21|4d414b455f28292e757365496e746f456e76283129 7114:MO1|@7 7115:MO2|@7448,@7447 7116:MO1|0 7117:MO1|@37 7118:MO1|0 7119:MO1|0 7120:MO1|@86 7121:MO1|1209 7122:MO1|1208 7123:MB4096|282a0a09436f707972696768742028632920323030362d372020446176696420432e204a2e204d617474686577730a0a0954686973206c696272617279206973206672656520736f6674776172653b20796f752063616e2072656469737472696275746520697420616e642f6f720a096d6f6469667920697420756e64657220746865207465726d73206f662074686520474e55204c65737365722047656e6572616c205075626c69630a094c6963656e7365206173207075626c697368656420627920746865204672656520536f66747761726520466f756e646174696f6e3b206569746865720a0976657273696f6e20322e31206f6620746865204c6963656e73652c206f722028617420796f7572206f7074696f6e2920616e79206c617465722076657273696f6e2e0a090a0954686973206c69627261727920697320646973747269627574656420696e2074686520686f706520746861742069742077696c6c2062652075736566756c2c0a0962757420574954484f555420414e592057415252414e54593b20776974686f7574206576656e2074686520696d706c6965642077617272616e7479206f660a094d45524348414e544142494c495459206f72204649544e45535320464f52204120504152544943554c415220505552504f53452e20205365652074686520474e550a094c65737365722047656e6572616c205075626c6963204c6963656e736520666f72206d6f72652064657461696c732e0a090a09596f752073686f756c642068617665207265636569766564206120636f7079206f662074686520474e55204c65737365722047656e6572616c205075626c69630a094c6963656e736520616c6f6e6720776974682074686973206c6962726172793b206966206e6f742c20777269746520746f20746865204672656520536f6674776172650a09466f756e646174696f6e2c20496e632e2c203531204672616e6b6c696e2053742c20466966746820466c6f6f722c20426f73746f6e2c204d41202030323131302d3133303120205553410a2a290a0a282a20436f6d70696c65722074686520636f6d70696c657220616e64206578706f7274206974206173206120706f727461626c652066696c652e20205468652072657374206f66207468650a202020626f6f7473747261702070726f63657373206973207468656e20646f6e65207768656e2074686520706f727461626c652066696c6520697320696d706f727465642e202a290a0a506f6c794d4c2e7072696e745f646570746820303b0a0a506f6c794d4c2e6d616b6520226d6c736f757263652f4d4c436f6d70696c65722f426f6f74223b0a506f6c794d4c2e6d616b6520226d6c736f757263652f4d4c436f6d70696c6572223b0a0a506f6c794d4c2e7368617265436f6d6d6f6e44617461204d4c436f6d70696c65722e7368656c6c3b0a0a506f6c794d4c2e6578706f7274506f727461626c652822706f6c7974656d70222c0a20202020666e202829203d3e20284d4c436f6d70696c65722e7368656c6c28293b204f532e50726f636573732e65786974204f532e50726f636573732e73756363657373292068616e646c65205f203d3e204f532e50726f636573732e65786974204f532e50726f636573732e6661696c757265293b0a20202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020 7124:MO1|@96 7125:MO1|1 7126:MO1|0 7127:MO1|0 7128:MO1|-1 7129:MB4096|23206561746564207369676e6174757265204d4c436f6d70696c65720a73696f6e0a790a730a0a6d706f72740a20202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020 7130:MO1|0 7131:MO1|0 7132:MO1|@7135 7133:MO1|@176 7134:MO1|38 7135:MO81|80,0,0,0,0,0,0,0,@184,0,@510,@515,@518,0,@526,@545,0,0,0,@558,@564,0,@567,0,0,0,@5981,@5987,0,0,0,0,0,0,@5990,0,@6002,0,0,0,0,@6005,@6008,@6012,@6015,@6019,@6023,@6027,@6818,0,0,0,0,@6822,@6827,@6835,@6839,@6843,@7069,@7072,@7075,@7080,@7083,@7095,0,@7098,0,0,0,0,0,0,0,0,0,0,0,@7101,@7104,@7107,@183 7136:MO1|0 7137:MO1|@197 7138:MO2|0,@200 7139:MO1|@203 7140:MO2|-1,@212 7141:MO1|0 7142:MO1|@127 7143:MO1|0 7144:MO1|0 7145:MO1|0 7146:MO2|-1,@445 7147:MO2|@455,0 7148:MO1|0 7149:MO1|0 7150:MO2|-1,@486 7151:MO2|-1,@495 7152:MO2|@455,0 7153:MO1|0 7154:MO1|0 7155:MO1|0 7156:MO1|0 7157:MO1|0 7158:MO2|0,@538 7159:MO1|0 7160:MO2|0,@543 7161:MO1|0 7162:MO1|@205 7163:MO1|0 7164:MO1|@7167 7165:MO1|@575 7166:MO1|7 7167:MO11|10,@578,@881,0,@889,@897,@932,0,0,@5938,@577 7168:MO1|@205 7169:MO2|0,@593 7170:MO1|@596 7171:MO2|@601,@600 7172:MO2|0,@605 7173:MO1|0 7174:MO2|0,@622 7175:MO2|0,@618 7176:MO1|@525 7177:MO1|0 7178:MO1|@205 7179:MO1|@627 7180:MO2|-1,@636 7181:MO2|-1,@645 7182:MO2|@455,0 7183:MO1|0 7184:MO2|-1,@655 7185:MO1|0 7186:MO2|-1,@659 7187:MO1|0 7188:MO1|0 7189:MO2|0,@622 7190:MO2|-1,@683 7191:MO1|0 7192:MO2|-1,@690 7193:MO2|@455,0 7194:MO1|0 7195:MO1|0 7196:MO2|@701,@700 7197:MO2|0,@622 7198:MO2|0,@710 7199:MO1|@525 7200:MO1|0 7201:MO2|@715,@714 7202:MO2|0,@622 7203:MO2|0,@724 7204:MO1|@525 7205:MO1|0 7206:MO2|@729,@728 7207:MO2|0,@622 7208:MO2|0,@738 7209:MO1|@525 7210:MO1|0 7211:MO2|@743,@742 7212:MO2|0,@622 7213:MO2|0,@752 7214:MO1|@525 7215:MO1|0 7216:MO2|@757,@756 7217:MO2|@760,@759 7218:MO2|@763,@762 7219:MO2|@766,@765 7220:MO2|0,@622 7221:MO2|0,@775 7222:MO1|@525 7223:MO1|0 7224:MO2|@780,@779 7225:MO2|@783,@782 7226:MO2|0,@787 7227:MO1|@205 7228:MO1|@792 7229:MO2|-1,@800 7230:MO1|0 7231:MO2|-1,@807 7232:MO2|@455,0 7233:MO1|0 7234:MO2|0,@787 7235:MO2|-1,@821 7236:MO1|0 7237:MO2|-1,@829 7238:MO2|@455,0 7239:MO1|0 7240:MO2|-1,@834 7241:MO1|0 7242:MO2|-1,@838 7243:MO1|0 7244:MO1|0 7245:MO2|@853,@852 7246:MO2|0,@787 7247:MO2|@858,@857 7248:MO2|0,@787 7249:MO2|@863,@862 7250:MO2|@866,@865 7251:MO2|0,@787 7252:MO2|@871,@870 7253:MO2|@874,@873 7254:MO2|0,@787 7255:MO2|@878,@877 7256:MO2|0,@787 7257:MO1|0 7258:MO1|@205 7259:MO1|@205 7260:MO1|@205 7261:MO1|@205 7262:MO3|@1021,@1023,@1020 7263:MO3|@952,@955,@951 7264:MO1|0 7265:MO1|0 7266:MO1|0 7267:MO1|0 7268:MO1|0 7269:MO1|0 7270:MO1|0 7271:MO1|0 7272:MO1|0 7273:MO1|0 7274:MO1|0 7275:MO1|0 7276:MO1|0 7277:MO1|0 7278:MO1|0 7279:MO1|0 7280:MO1|0 7281:MO1|0 7282:MO1|0 7283:MO1|0 7284:MO3|@1027,@1029,@1026 7285:MO3|@1033,@1035,@1032 7286:MO3|@1070,@1072,@1069 7287:MO3|@1076,@1078,@1075 7288:MO3|@1082,@1084,@1081 7289:MO3|@1088,@1090,@1087 7290:MO1|@7293 7291:MO1|@1178 7292:MO1|49 7293:MO273|272,0,0,@1180,@1182,0,0,0,0,0,@1184,0,0,@1186,0,0,0,0,0,0,@1188,0,0,@1190,0,0,0,0,@1192,0,0,0,0,0,0,0,@1194,0,0,0,0,0,0,@1195,0,0,0,0,0,0,0,@1196,0,0,@1198,@1200,@1202,@1204,@1206,@1207,@1209,@1211,@1212,0,@1214,0,0,@1216,0,0,0,0,0,@1218,0,0,0,@1220,0,0,@1222,0,0,0,0,0,0,@1224,0,0,0,0,0,@1226,0,0,0,@1228,0,0,0,0,0,@1230,0,@1232,@1234,0,0,@1236,0,0,0,@1238,0,0,0,0,0,0,0,0,0,0,0,@1240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,@1241,0,0,0,@1243,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,@1245,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,@1247,0,0,@1249,0,0,0,0,0,0,0,0,0,0,0,0,0,0,@1251,0,0,0,@1253,0,@1255,0,0,0,0,0,0,0,0,0,0,@1257,0,0,@1259,0,0,0,0,0,0,0,0,@1261,0,0,0,0,0,0,0,0,0,0,@1263,0,0,0,0,@1265,0,0,0,0,0,@1267,0,@1269,0,0,0,0,0,0,0,@1179,0,0,0,0,0,0,0 7294:MO1|0 7295:MO3|@1343,@1345,@1342 7296:MO1|0 7297:MO1|@197 7298:MO1|0 7299:MO3|@2248,@2250,@2247 7300:MO3|@2354,@2356,@2353 7301:MO3|@2324,@2326,@2323 7302:MO1|0 7303:MO3|@2330,@2332,@2329 7304:MO1|0 7305:MO3|@2336,@2338,@2335 7306:MO3|@2342,@2344,@2341 7307:MO1|0 7308:MO3|@2348,@2350,@2347 7309:MO1|0 7310:MO1|0 7311:MO2|0,@522 7312:MO1|@205 7313:MO1|@3285 7314:MO2|-1,@3291 7315:MO1|0 7316:MO2|-1,@3299 7317:MO2|@455,0 7318:MO1|0 7319:MO2|-1,@3304 7320:MO1|0 7321:MO2|-1,@3312 7322:MO1|0 7323:MO1|@205 7324:MO2|0,@3280 7325:MO1|0 7326:MO3|@3400,@3402,@3399 7327:MO3|@3406,@3408,@3405 7328:MO3|@3422,@3424,@3421 7329:MO1|213 7330:MO257|256,@3763,@3764,@3765,@3766,@3767,@3768,@3769,@3770,@3771,@3772,@3773,@3774,@3775,@3776,@3777,@3778,@3779,@3780,@3781,@3782,@3783,@3784,@3785,@3786,@3787,@3788,@3789,@3790,@3791,@3792,@3793,@3794,@3795,@3796,@3797,@3798,@3799,@3800,@3801,@3802,@3803,@3804,@3805,@3806,@3807,@3808,@3809,@3810,@3811,@3812,@3813,@3814,@3815,@3816,@3817,@3818,@3819,@3820,@3821,@3822,@3823,@3824,@3825,@3826,@3827,@3828,@3829,@3830,@3831,@3832,@3833,@3834,@3835,@3836,@3837,@3838,@3839,@3840,@3841,@3842,@3843,@3844,@3845,@3846,@3847,@3848,@3849,@3850,@3851,@3852,@3853,@3854,@3855,@3856,@3857,@3858,@3859,@3860,@3861,@3862,@3863,@3864,@3865,@3866,@3867,@3868,@3869,@3870,@3871,@3872,@3873,@3874,@3875,@3876,@3877,@3878,@3879,@3880,@3881,@3882,@3883,@3884,@3885,@3886,@3887,@3888,@3889,@3890,@3891,@3892,@3893,@3894,@3895,@3896,@3897,@3898,@3899,@3900,@3901,@3902,@3903,@3904,@3905,@3906,@3907,@3908,@3909,@3910,@3911,@3912,@3913,@3914,@3915,@3916,@3917,@3918,@3919,@3920,@3921,@3922,@3923,@3924,@3925,@3926,@3927,@3928,@3929,@3930,@3931,@3932,@3933,@3934,@3935,@3936,@3937,@3938,@3939,@3940,@3941,@3942,@3943,@3944,@3945,@3946,@3947,@3948,@3949,@3950,@3951,@3952,@3953,@3954,@3955,@3956,@3957,@3958,@3959,@3960,@3961,@3962,@3963,@3964,@3965,@3966,@3967,@3968,@3969,@3970,@3971,@3972,@3973,@3974,@3975,@3976,@3977,@3978,@3979,@3980,@3981,@3982,@3983,@3984,@3985,@3986,@3987,@3988,@3989,@3990,@3991,@3992,@3993,@3994,@3995,@3996,@3997,@3998,@3999,@4000,@4001,@4002,@4003,@4004,@4005,@4006,@4007,@4008,@4009,@4010,@4011,@4012,@4013,@4014,@4015,@4016,@4017,@3762 7331:MO257|256,2,1,2,2,1,2,2,2,1,2,3,7,1,3,1,1,1,3,7,3,3,3,9,3,3,3,3,3,2,1,2,2,1,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,4,5,5,1,1,1,1,1,1,2,2,2,4,1,1,1,1,1,1,1,1,1,1,1,1,1,3,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,2,3,5,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 7332:MO3|@4934,@4936,@4933 7333:MO3|@4962,@4964,@4961 7334:MO3|@4968,@4970,@4967 7335:MO1|0 7336:MO3|@5067,@5069,@5066 7337:MO3|@5073,@5075,@5072 7338:MO1|0 7339:MO1|0 7340:MO1|0 7341:MO1|0 7342:MO10|@7344,@7345,@7346,@7347,@979,@5569,@7348,@7343,@968,0 7343:MO1|0 7344:MO1|32 7345:MO1|I48 7346:MO1|57 7347:MO1|0 7348:MO1|68 7349:MO2|0,@787 7350:MO2|0,@5383 7351:MO2|0,@622 7352:MO2|0,@5916 7353:MO1|@525 7354:MO1|0 7355:MO2|@5923,@5922 7356:MO2|0,@622 7357:MO2|@5926,@5925 7358:MO2|0,@622 7359:MO2|@5929,@5928 7360:MO2|0,@622 7361:MO2|@5932,@5931 7362:MO2|0,@622 7363:MO2|@5935,@5934 7364:MO2|0,@622 7365:MO2|@5937,@5936 7366:MO2|0,@622 7367:MO1|@205 7368:MO1|@7371 7369:MO1|@575 7370:MO1|7 7371:MO11|10,@5961,@5964,0,0,0,@5967,@5970,@5973,@5976,@5960 7372:MO2|0,@3280 7373:MO1|@205 7374:MO1|@7377 7375:MO1|@176 7376:MO1|38 7377:MO81|80,0,0,@6035,0,@6050,0,0,@6059,0,@6068,0,0,@6076,@6084,0,@6099,0,@6107,@6165,0,@6184,0,0,@6192,@6214,@6222,@6230,@6244,@6335,0,0,@6354,@6509,@6523,0,0,0,0,0,0,0,@6531,0,@6539,0,0,@6548,@6556,@6566,@6574,@6601,@6612,@6620,0,0,@6633,@6641,0,0,0,@6648,0,0,0,0,@6666,@6724,@6749,0,0,0,@6764,@6778,0,0,0,@6792,@6034,0,0 7378:MO2|0,@6045 7379:MO1|@205 7380:MO1|@525 7381:MO1|0 7382:MO2|0,@6045 7383:MO2|0,@6045 7384:MO2|0,@6045 7385:MO2|0,@6045 7386:MO2|0,@6045 7387:MO2|0,@6045 7388:MO2|0,@6045 7389:MO3|@4973,@6200,@4975 7390:MO2|0,@6045 7391:MO2|0,@6045 7392:MO2|0,@6045 7393:MO3|@6239,@6241,@6238 7394:MO2|0,@6045 7395:MO18|@6252,@6271,@6276,@6281,@6286,@6291,@6296,@6299,@6302,@6307,@6310,@6315,@6318,@6321,@6324,@6327,@6330,@6251 7396:MO1|0 7397:MO2|0,@6045 7398:MO2|0,@6045 7399:MO2|0,@6045 7400:MO2|0,@6045 7401:MO2|0,@6045 7402:MO2|0,@5379 7403:MO3|@5250,@6609,@5248 7404:MO2|0,@6045 7405:MO2|0,@6045 7406:MO1|@7409 7407:MO1|@575 7408:MO1|1 7409:MO11|10,0,0,0,0,@6627,0,0,0,0,0 7410:MO2|0,@6045 7411:MO1|@7414 7412:MO1|@575 7413:MO1|5 7414:MO11|10,0,@6674,@6689,0,0,@6692,@6707,0,0,@6673 7415:MO2|0,@6045 7416:MO1|@205 7417:MO2|0,@6045 7418:MO1|@205 7419:MO2|0,@6045 7420:MO1|@205 7421:MO3|@6787,@6789,@6786 7422:MO2|0,@6045 7423:MO2|0,@6045 7424:MO1|@205 7425:MO1|0 7426:MO1|@7429 7427:MO1|@6850 7428:MO1|10 7429:MO21|20,0,0,0,@6852,0,0,@6864,0,0,0,@6896,@6918,@6930,@6953,@6980,@7009,0,0,@7040,@6851 7430:MO1|@205 7431:MO1|@205 7432:MO1|0 7433:MO1|0 7434:MO2|0,@6884 7435:MO1|@205 7436:MO1|@205 7437:MO1|@205 7438:MO1|@205 7439:MO1|@205 7440:MO1|@205 7441:MO1|0 7442:MO1|0 7443:MO1|@205 7444:MO1|@205 7445:MO1|@205 7446:MVO1|1 7447:MVO1|0 7448:MVO1|1 7449:MVO1|1 7450:MVO1|1 7451:MVO1|1 7452:MVO1|1 7453:MVO1|1 7454:MVO1|1 polyml.5.2.1/imports/polymlppc.txt0000644000175000017500001244350511020711342016256 0ustar daviddavidObjects 9530 Root 9 9:O3|@11,@9348,@10 10:O1|@170 11:C2,304|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000218078000482e30000973bfffc80180008941bfffc387700003f0002a063188168801800007c0803a64e80002138600001831b0000801800007c0803a64e80002197fbfffc3ec002a062d680c296dbfffc3aa0000196bbfffc3bfb000038800001386000273f00000063185328801800007c0803a64e8000213a83000083fb00084800002c386000013f00000063184088801800007c0803a64e8000213a830000947bfffc947bfffc947bfffc97fbfffc3e6002a062738122967bfffc3a400001965bfffc3bfb0000386000013b140000801800007c0803a64e80002183fb000848000010947bfffc947bfffc947bfffc3b7b0018800d00187c1b004040a00010800d00207c0803a64e8000214bffff34|@15,1048575|56,3,@12 100,3,$11+166 132,3,I150 168,3,I1 208,3,$11+262 12:O1|@13 13:C2,156|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e800020973bfffc80030000941bfffc806300044bffffc197fbfffc3f2002a0633981fa973bfffc3b000001971bfffc3bfb000038600001831b000c801800007c0803a64e80002183fb000882fb00107ee803a63b7b00144e8000203860000182db00047ec803a63b7b00084e800020|@14,1048575|72,3,$13+138 14:S20|506f6c794d4c2e72756e4f6e456e747279283129 15:S24|506f6c794d4c2e72756e46756e6374696f6e283129283129 16:O2|@18,@17 17:O2|@41,@40 18:O1|@19 19:C2,204|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc947bfffc3a79000038db000038a0000138800001386000013c0002a06000836c7c0803a64e80002180db00046cc5ffff68a5fffe70a40005807b00007c792378398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b1d0004919d0000933800043ee002a062f7855092f80000967bfffc389800003860000f3f00000063184988801800007c0803a64e8000213860000182db00007ec803a63b7b000c4e800020|@39,1048575|60,3,@20 140,3,@25 164,3,I73 20:C2,312|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c030001408200149086000090a60004386000014e8000208303000082f800002c1700014082008082d800042c160003408200406095000370a40003280400014182001c973bfffc3c6002a0606384c0800d00287c0803a64e80002160a4000338a4000038950000806300044bffff7c70b50003281500014182001c973bfffc3c6002a0606384c0800d00287c0803a64e80002160b5000338b50000806300044bffff4882b800042c1500034082000c3ac00001480000282c15fffd4082000c3ac00005480000182c1500014082000c3ac00009480000083ac0000d7ed4237870a4000d280400014182001c973bfffc3c6002a0606384c0800d00287c0803a64e80002160b6000d38b6000038940000806300044bfffed4|@24,1032207|104,3,@21 160,3,@21 272,3,@21 21:O3|12,@23,@22 22:S53|5468652073616d65206174747269627574652061707065617273206d6f7265207468616e206f6e636520696e20746865206c697374 23:S6|546872656164 24:S38|5468726561642e5468726561642e6174747273546f576f7264283129636f6e76657274283429 25:O1|@26 26:C2,416|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc38800001386000033f00000063184828801800007c0803a64e800021706b00014082005497fbfffc3f2002a0633985e2973bfffc3b000001971bfffc3bfb000082e3000082c30004387600003b170000801800007c0803a64e80002183fb000848000108947bfffc947bfffc947bfffc480000f83f20004f633920048319000028180003408200443c60004f606320043f00000063184948801800007c0803a64e800021280300014082002038800003386000013c0002a0600087147c0803a64e80002148000098947bfffc947bfffc38db000038a0000138800001386000013c0002a06000836c7c0803a64e80002182fb00046ef6ffff6ad6fffe72d50005829b00007e93ab78398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a5d0004919d0000927200043e2002a062318d6092320000389200003860000f3f00000063184988801800007c0803a64e8000213b7b0008947bfffc947bfffc947bfffc38600001833b000c7f2803a63b7b00104bfffe6c|@38,1048575|44,3,I62 76,3,$26+138 152,3,@0 172,3,@0 180,3,I71 216,3,@27 260,3,@20 340,3,@35 360,3,I73 27:C2,444|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212804000141820008480000fc973bfffc3b2000013c80004f6084200480640000280300034082000c3b000001480000743f0000013b189c417f2bc378556bf80140a20010800d00347c0803a64e8000217c19c0004082000c3b00000148000044398000025720f80140a20010800d00347c0803a64e8000217c99661541a3fff03b240000800d00187c1b004040a00010800d00207c0803a64e8000214bffff783c60004f606320043f00000063184948801800007c0803a64e8000212c03000140820008480000443c80004f60842004386000033f00000063184988801800007c0803a64e800021800d00187c1b004040a00010800d00207c0803a64e8000214bffff10973bfffc3c8002a0608488ec3c6002a0606389a43c0002a0600089b07c0803a64e8000213c60004f606320043f00000063184928801800007c0803a64e8000212c0300034082001838600001833b00007f2803a63b7b00044e8000203f20004f633920043b000003931900003c80004f6084200438600005833b00003f00000063184988801800007c0903a67f2803a63b7b00044e800420|@34,1048575|52,3,@0 80,2,20000 192,3,@0 200,3,I71 232,3,@0 244,3,I73 296,3,@28 304,3,@31 312,3,@32 328,3,@0 336,3,I70 384,3,@0 400,3,@0 416,3,I73 28:O1|@29 29:C2,108|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e800020973bfffc80030004941bfffc80830000386000093f00000063184988801800007c0803a64e800021807b0000833b00047f2803a63b7b00084bffffa0|@30,1048575|68,3,I73 30:S30|5468726561642e436f6e646974696f6e5661722e77616b65416c6c283129 31:O2|@2,@1 32:C2,824|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182c3000082a300043f00000063184968801800007c0803a64e800021830300047317000d2c1700014082000c3a800003480000282c1700054082000c3a80fffd480000182c1700094082000c3a800001480000083a80ffff2c14000340820008480000483f00000063184968801800007c0803a64e8000213a6300003f00000063184968801800007c0803a64e800021830300043c00ffff6000fff37f17003862e3000590730004973bfffc949bfffc96dbfffc96bbfffc969bfffc3b200001831b000882f80000281700034082000c3ac00001480000743ec000013ad69c417f2bb378556bf80140a20010800d00347c0803a64e8000217c19b0004082000c3ac0000148000044398000025720f80140a20010800d00347c0803a64e8000217eb9661541a3fff03b350000800d00187c1b004040a00010800d00207c0803a64e8000214bffff7c387800003f00000063184948801800007c0803a64e8000212c030001408200084800003c809b0008386000033f00000063184988801800007c0803a64e800021800d00187c1b004040a00010800d00207c0803a64e8000214bffff1c82bb000480750000831b000c801800007c0803a64e800021829b000490740000807b00083f00000063184928801800007c0803a64e8000212c030003408200084800002c827b00083a4000039253000038930000386000053f00000063184988801800007c0803a64e8000213f00000063184968801800007c0803a64e800021821b00002c1000034082000c3a200001480000282c10fffd4082000c3a200005480000182c1000014082000c3a200009480000083a20000d39e300003f00000063184968801800007c0803a64e80002181c300043c00ffff6000fff37dca00387e295378912f00042c10000140820008480000143900ffff7c08804041820008480000603f00000063184968801800007c0803a64e8000218103000c2c0800014182002c3880000138600017833b00103f00000063184988801800007c0903a67f2803a63b7b00144e8004203860000180fb00107ce803a63b7b00144e8000203860000180fb00107ce803a63b7b00144e800020|@33,1048575|40,3,I72 132,3,I72 156,3,I72 180,3,-7 248,2,20000 364,3,I71 404,3,I73 488,3,I70 540,3,I73 560,3,I72 640,3,I72 664,3,-7 712,3,I72 756,3,I73 33:S40|5468726561642e436f6e646974696f6e5661722e7369676e616c4f7242726f616463617374283229 34:S35|5369676e616c2e73696754687265616428312962726f6164436173745765616b283229 35:O1|@36 36:C2,52|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021388000013c0002a0600087147c0903a64e800420|@37,1048575|36,3,@27 37:S38|5369676e616c2e73696754687265616428312962726f6164436173745765616b283129283129 38:S19|5369676e616c2e736967546872656164283129 39:S20|5369676e616c2e666f726b546872656164283129 40:O2|@158,@157 41:O4|@42,@146,@45,@9349 42:C2,200|7f2802a6633900028078000c82e30000973bfffc971bfffc2c170001408200084800003480770000832300043b0000019319000082f70004800d00187c1b004040a00010800d00207c0803a64e8000214bffffc8807b00003f2002e06339801483190000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213afd0004919d00009317000483230008933700003f0002e06318801492f800008083000438600025833b00043f00000063185328801800007c0903a67f2803a63b7b00084e800420|@145,1048575|88,3,@9350 148,3,@9350 172,3,I150 43:O2|@45,@44 44:O2|@72,@71 45:O2|@46,@9349 46:C2,260|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d70000973bfffc971bfffc947bfffc96dbfffc2c16000140820008480000508076000080160004941bfffc80a300103c8002a0608490683c0002a0600096ec7c0803a64e80002182db00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffffac38600001831b0004801800007c0803a64e80002182bb000882950004827b000092740000825400002c1200014082001838600001823b000c7e2803a63b7b00104e800020823200008211000439e0000191f0000082520004800d00187c1b004040a00010800d00207c0803a64e8000214bffffb8|@70,1048575|84,3,@47 92,3,@62 47:O1|@48 48:C2,304|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000218303000482f8000082c300082c1700014082000c386000014e80002082b6001c72ab00014082005496fbfffc80160000941bfffc80030000941bfffc80150000941bfffc3a80000192980000973bfffc386000013b1b00103c0002a0600091bc7c0803a64e800021827b00007e6803a63b7b00144e800020973bfffc398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a9d0004919d00003e6002a062739650927400083e4002a06252969c925400048236000092340000398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a1d0004919d0000929000083de002a061ef966091f000043dc002e061ce801c91d0000038700000800d00287c0803a64e800021|@61,1048575|120,3,@49 192,3,@56 204,3,@59 264,3,@57 276,3,@9351 49:C2,560|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc947bfffc97fbfffc3ee002a062f7929296fbfffc3ac0000196dbfffc3bfb0000829800003983ffff7e8b18385560f80140a20010800d00347c0803a64e8000217e6ca41141a3fff0398000013bbdfff87c1df04040a00010800d001c7c0803a64e8000213a5d0004919d0000927200008238fff438b20000388300008078fff83c0002a0600094087c0803a64e8000213b110000801800007c0803a64e8000213aa3000083fb0008480000c4821b000481c300003d4002e0614a801c7c0e50404082000c39e30000480000942c0e0003408200103de002a061ef962c48000080398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021393d0004919d00003d0002a061089650910900089069000480f0fffc90e90000398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002139fd0004919d0000912f00083cc002a060c6966090cf00043ca002e060a5801c90af0000386f0000800d00287c0803a64e800021821b000c3990ffff7eab80385560f80140a20010800d00347c0803a64e8000217df5661541a3fff081db0010814e00007deb5378556bf80140a20010800d00347c0803a64e8000217c0f50004082001838600001813b00147d2803a63b7b00184e8000203990ffff7eab80385560f80140a20010800d00347c0803a64e8000217c75661541a3fff03b0e0000833b00147f2803a63b7b00184bfffddc|@58,1048575|48,3,$49+214 168,3,@50 220,3,@9351 252,3,@54 300,3,@56 364,3,@57 376,3,@9351 50:C2,444|7f2802a6633900022c050001408200b4708b000141820028548bf80140a20010800d00347c0803a64e8000212c0400014180000c3b04000048000020973bfffc3b0300003c6002a0606395e0800d00287c0803a64e80002180a300007c182840418100487d982810388c0001398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213afd0004919d0000907700089097000493170000387700007f2803a64e800020973bfffc3c6002a0606395e0800d00287c0803a64e800021708b000141820028548bf80140a20010800d00347c0803a64e8000212c0400014180000c3b04000048000020973bfffc3b0300003c6002a0606395e0800d00287c0803a64e80002182e5000072eb00014182002856ebf80140a20010800d00347c0803a64e8000212c1700014180000c3ad7000048000020973bfffc3ac300003c6002a0606395e0800d00287c0803a64e8000217d98b214388cffff82a300007c04a84041810040398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021389d0004919d00009064000892c4000493040000386400007f2803a64e800020973bfffc3c6002a0606395e0800d00287c0803a64e800021|@53,1015815|68,3,@51 172,3,@51 244,3,@51 320,3,@51 424,3,@51 51:O3|11,@52,0 52:S9|537562736372697074 53:S32|566563746f72536c6963654f7065726174696f6e7328292e736c696365283329 54:O3|1,@55,0 55:S9|496e74657272757074 56:S8|666c7573684f7574 57:S2|496f 58:S40|426173696353747265616d494f28292e666c7573684f757427283129666c75736842756666283129 59:O3|@9352,@60,0 60:S20|426c6f636b696e674e6f74537570706f72746564 61:S28|426173696353747265616d494f28292e666c7573684f757427283129 62:C2,888|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000213a9900003a630000386000013c0002a060009a807c0803a64e800021969bfffc967bfffc949bfffc94bbfffc947bfffc2c0300014082000c3a4000014800006080a30000808500002c04ffff40820030398000013bbdfff87c1df04040a00010800d001c7c0803a64e8000213a5d0004919d000090b200004800002480630004800d00187c1b004040a00010800d00207c0803a64e8000214bffff98724b00014082006083320000831900002c18ffff4082003482f900042c1700034082000c38600001480000543c6002a060639c143c0002a060009c2c7c0803a64e800021480000383c6002a060639c143c0002a060009c2c7c0803a64e8000214800001c3c6002a060639c143c0002a060009c2c7c0803a64e8000213c6002a060639c143c0002a060009c2c7c0803a64e80002138600001833b000483190000281800034082000c3ae00001480000743ee000013af79c417c6bbb78556bf80140a20010800d00347c0803a64e8000217c03b8004082000c3ae0000148000044398000025460f80140a20010800d00347c0803a64e8000217ec3661541a3fff038760000800d00187c1b004040a00010800d00207c0803a64e8000214bffff7c387900003f00000063184948801800007c0803a64e8000212c0300014082000c3ac000014800003c38990000386000033f00000063184988801800007c0803a64e800021800d00187c1b004040a00010800d00207c0803a64e8000214bffff1897fbfffc3ea002a062b5996696bbfffc3a800001969bfffc3bfb0000807b0018831b0014801800007c0803a64e8000213a63000083fb0008480000843a430000807b00043f00000063184928801800007c0803a64e8000212c0300034082000848000034823b00043a00000392110000965bfffc38910000386000053f00000063184988801800007c0803a64e80002148000008965bfffc807b00043c0002a060009c2c7c0803a64e800021807b0000800d00287c0803a64e800021807b00103f00000063184928801800007c0803a64e8000212c0300034082000848000034825b00103a20000392320000967bfffc38920000386000053f00000063184988801800007c0803a64e80002148000008967bfffc807b00103c0002a060009c2c7c0803a64e800021807b0000825b00207e4803a63b7b00244e800020|@69,1048575|44,3,@63 232,3,@65 240,3,@67 260,3,@65 268,3,@67 288,3,@65 296,3,@67 312,3,@65 320,3,@67 364,2,20000 480,3,I71 524,3,I73 576,3,$62+634 640,3,I70 696,3,I73 728,3,@67 764,3,I70 820,3,I73 852,3,@67 63:C2,336|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000213f00000063184968801800007c0803a64e8000218303000473170003281700034082000c3ac00003480000083ac00001398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092c300043ae0000192e300007316000d2c1600014082000c3aa00003480000282c1600054082000c3aa0fffd480000182c1600094082000c3aa00001480000083aa0ffff398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b1d0004919d000092b800043ae0ffff92f80000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213add0004919d00003aa0000192b60004931600003b030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092c30004930300007f2803a64e800020|@64,1015809|32,3,I72 64:S30|5468726561642e5468726561642e67657441747472696275746573283129 65:O2|@66,0 66:O2|-1,-2 67:C2,272|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000213ac300003f00000063184968801800007c0803a64e80002183030004947bfffc947bfffc3a7900003a58000038db000038a0000138800001387600003c0002a06000836c7c0803a64e8000213f00000063184968801800007c0803a64e80002180db00046cc5ffff68a5fffe7ca49038833b00007f3823789303000473370009281700094082005c3f00000063184968801800007c0803a64e80002182c3000c2c1600014182002c38800001386000173b3300003f00000063184988801800007c0903a67f2803a63b7b00084e800420386000017e6803a63b7b00084e800020386000017e6803a63b7b00084e800020|@68,1048575|36,3,I72 92,3,@20 108,3,I72 168,3,I72 212,3,I73 68:S30|5468726561642e5468726561642e73657441747472696275746573283129 69:S26|426173696353747265616d494f28292e70726f74656374283329 70:S27|426173696353747265616d494f28292e646f4f6e4c6f6164283129 71:O2|@89,@88 72:O2|@73,@9353 73:C2,352|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7000082b600002c1500014082011882960004827400008253000082340010821100003992ffff7e0b90385560f80140a20010800d00347c0803a64e8000217dec841141a3fff0398000013bbdfff87c1df04040a00010800d001c7c0803a64e80002139dd0004919d000091ee0000395900003923000038ae0000389200008074000c3c0002a060009f5c7c0803a64e800021955bfffc953bfffc967bfffc965bfffc963bfffc961bfffc8014000c941bfffc3c0002a06000a1347c0803a64e800021947bfffc38600001831b0018801800007c0803a64e80002180bb0000809b0004807b00103c0002a06000a3807c0803a64e800021811b001480fb001090e8000080db000c80bb000890a6000038600001809b001c7c8803a63b7b00204e8000203a830000386000013b140000801800007c0903a64e800420|@83,1048575|168,3,@74 216,3,@75 268,3,@81 74:C2,444|7f2802a6633900022c050001408200b4708b000141820028548bf80140a20010800d00347c0803a64e8000212c0400014180000c3b04000048000020973bfffc3b0300003c6002a0606395e0800d00287c0803a64e80002180a300007c182840418100487d982810388c0001398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213afd0004919d0000907700089097000493170000387700007f2803a64e800020973bfffc3c6002a0606395e0800d00287c0803a64e800021708b000141820028548bf80140a20010800d00347c0803a64e8000212c0400014180000c3b04000048000020973bfffc3b0300003c6002a0606395e0800d00287c0803a64e80002182e5000072eb00014182002856ebf80140a20010800d00347c0803a64e8000212c1700014180000c3ad7000048000020973bfffc3ac300003c6002a0606395e0800d00287c0803a64e8000217d98b214388cffff82a300007c04a84041810040398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021389d0004919d00009064000892c4000493040000386400007f2803a64e800020973bfffc3c6002a0606395e0800d00287c0803a64e800021|@53,1015815|68,3,@51 172,3,@51 244,3,@51 320,3,@51 424,3,@51 75:C2,400|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc947bfffc947bfffc3ab90000389b00003c0002a06000a2e07c0803a64e800021809b0000807b00082c030001408200183c600000606346687ea803a63b7b000c4e8000202c0300034082002c83240004831b00047f0c0e707d7960ae556b083c61770001387700007ea803a63b7b000c4e8000203b2300103b19fffe3ae000092c17000140a20010800d00307c0803a64e8000213997ffff3978ffff7d6b6396556b083c6176000196bbfffc80040004941bfffc97fbfffc3e8002a06294a256969bfffc3a600001967bfffc3bfb000038a0000138800083387600003f000000631841c8801800007c0803a64e8000213a43000083fb0008480000183c6002a06063a344800d00287c0803a64e800021823b001c7e2c0e7091920000963bfffc38c0000938b20000809b001c807b00103f00000063185928801800007c0803a64e800021387200003f00000063184648801800007c0803a64e800021387200007ea803a63b7b00204e800020|@80,1048575|52,3,@76 84,3,I48 220,3,$75+290 256,3,I11 288,3,@78 340,3,I198 364,3,I47 76:C2,32|830300089304000082e3000092e4000482c3000492c40008386000014e800020|@77,983043| 77:S31|566563746f72536c6963654f7065726174696f6e7328292e62617365283229 78:O3|4,@79,0 79:S4|53697a65 80:S24|436861724172726179536c6963652e766563746f72283129 81:C2,228|7f2802a66339000270ab00014182000c3b0000034800001081850000558c083c61980001706b000141820028546bf80140a20010800d00347c0803a64e8000212c0300014180000c3ae300004800001c973bfffc3c6002a0606395e0800d00287c0803a64e8000217d97c214386cffff82c400007c03b0404081001c973bfffc3c6002a0606395e0800d00287c0803a64e80002170ab000141820020806400047cac0e707eeb0e707d8359ae386000017f2803a64e800020971bfffc38d700003865000080a40004388000093f00000063185928801800007c0903a67f2803a64e800420|@82,983055|84,3,@51 128,3,@51 204,3,I198 82:S20|4368617241727261792e636f7079566563283329 83:S16|54657874494f2e6f6e4c6f6164283129 84:O2|0,@85 85:O5|@9355,@86,I148,@87,@9354 86:S5|737464496e 87:O2|4096,@9356 88:O2|@45,@143 89:O2|@90,@9357 90:C2,260|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d70000973bfffc971bfffc947bfffc96dbfffc2c16000140820008480000508076000080160004941bfffc80a300103c8002a06084a62c3c0002a0600096ec7c0803a64e80002182db00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffffac38600001831b0004801800007c0803a64e80002182bb000882950004827b000092740000825400002c1200014082001838600001823b000c7e2803a63b7b00104e800020823200008211000439e0000191f0000082520004800d00187c1b004040a00010800d00207c0803a64e8000214bffffb8|@70,1048575|84,3,@91 92,3,@62 91:O1|@92 92:C2,304|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000218303000482f8000082c300082c1700014082000c386000014e80002082b6001c72ab00014082005496fbfffc80160000941bfffc80030000941bfffc80150000941bfffc3a80000192980000973bfffc386000013b1b00103c0002a06000a7807c0803a64e800021827b00007e6803a63b7b00144e800020973bfffc398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a9d0004919d00003e6002a062739650927400083e4002a06252969c925400048236000092340000398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a1d0004919d0000929000083de002a061ef966091f000043dc002e061ce801c91d0000038700000800d00287c0803a64e800021|@61,1048575|120,3,@93 192,3,@56 204,3,@59 264,3,@57 276,3,@9351 93:C2,560|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc947bfffc97fbfffc3ee002a062f7a85696fbfffc3ac0000196dbfffc3bfb0000829800003983ffff7e8b18385560f80140a20010800d00347c0803a64e8000217e6ca41141a3fff0398000013bbdfff87c1df04040a00010800d001c7c0803a64e8000213a5d0004919d0000927200008238fff438b20000388300008078fff83c0002a060009f5c7c0803a64e8000213b110000801800007c0803a64e8000213aa3000083fb0008480000c4821b000481c300003d4002e0614a801c7c0e50404082000c39e30000480000942c0e0003408200103de002a061ef962c48000080398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021393d0004919d00003d0002a061089650910900089069000480f0fffc90e90000398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002139fd0004919d0000912f00083cc002a060c6966090cf00043ca002e060a5801c90af0000386f0000800d00287c0803a64e800021821b000c3990ffff7eab80385560f80140a20010800d00347c0803a64e8000217df5661541a3fff081db0010814e00007deb5378556bf80140a20010800d00347c0803a64e8000217c0f50004082001838600001813b00147d2803a63b7b00184e8000203990ffff7eab80385560f80140a20010800d00347c0803a64e8000217c75661541a3fff03b0e0000833b00147f2803a63b7b00184bfffddc|@58,1048575|48,3,$93+214 168,3,@74 220,3,@9351 252,3,@54 300,3,@56 364,3,@57 376,3,@9351 94:O2|@96,@95 95:O2|@125,0 96:O6|@87,@9359,@97,@9360,@3,@9358 97:O14|@99,@100,@104,0,0,@106,0,@107,@111,@115,4096,0,@118,@98 98:O1|@122 99:S6|737464457272 100:O1|@101 101:O2|@102,I202 102:C2,32|38a00001809800043860003b3f00000063184808801800007c0903a64e800420|@103,1048575|12,3,I61 103:S50|4c696272617279494f537570706f72742e777261704f757446696c654465736372283529746578745072696d57722d283129 104:O2|@105,I202 105:C2,32|38a00001809800043860000f3f00000063184808801800007c0903a64e800420|@103,1048575|12,3,I61 106:O1|I202 107:O1|@108 108:O2|@109,I202 109:C2,316|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc947bfffc947bfffc3ab900003a980000389b00003c0002a06000a2e07c0803a64e800021809b0000807b0004706b000141820028546bf80140a20010800d00347c0803a64e8000212c0300014180000c3b2300004800001c96bbfffc3c6002a0606395e0800d00287c0803a64e800021831b0008730b000141820028570bf80140a20010800d00347c0803a64e8000212c1800014180000c3af800004800001c96bbfffc3c6002a0606395e0800d00287c0803a64e800021398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213add0004919d000092f6000893360004806400049076000038b6000080940004386000173b3500003f00000063184808801800007c0903a67f2803a63b7b000c4e800420|@110,1048575|56,3,@76 128,3,@51 200,3,@51 288,3,I61 110:S49|4c696272617279494f537570706f72742e777261704f757446696c65446573637228352977726974654172726179283129 111:O1|@112 112:O2|@113,I202 113:C2,320|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc947bfffc947bfffc3ab900003a980000389b00003c0002a06000a2e07c0803a64e800021809b0004708b000141820028548bf80140a20010800d00347c0803a64e8000212c0400014180000c386400004800001c96bbfffc3c6002a0606395e0800d00287c0803a64e800021833b0008732b000141820028572bf80140a20010800d00347c0803a64e8000212c1900014180000c3b1900004800002096bbfffc3b0300003c6002a0606395e0800d00287c0803a64e8000213ae30008398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213add0004919d00009316000892f60004809b00009096000038b6000080940004386000173b3500003f00000063184808801800007c0903a67f2803a63b7b000c4e800420|@114,1048575|56,3,@76 124,3,@51 200,3,@51 292,3,I61 114:S50|4c696272617279494f537570706f72742e777261704f757446696c6544657363722835297772697465566563746f72283129 115:O1|@116 116:O2|@117,I202 117:C2,136|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc38a0000180980004386000393f00000063184808801800007c0803a64e800021546bf80140a20010800d00347c0803a64e8000212c0300014081001838600003833b00007f2803a63b7b00044e80002038600001833b00007f2803a63b7b00044e800020|@103,1048575|48,3,I61 118:O1|@119 119:O3|@120,@108,@116 120:C2,176|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc947bfffc3860000183180008801800007c0803a64e8000212803000141820058833b0004807b000083190004801800007c0803a64e8000213b030000398000013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d00009303000082fb00087ee803a63b7b000c4e80002038600001833b00087f2803a63b7b000c4e800020|@121,1048575| 121:S40|5072696d494f28292e6175676d656e7457726974657228312977726974654172724e42272d283129 122:O3|@123,@112,@116 123:C2,176|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc947bfffc3860000183180008801800007c0803a64e8000212803000141820058833b0004807b000083190004801800007c0803a64e8000213b030000398000013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d00009303000082fb00087ee803a63b7b000c4e80002038600001833b00087f2803a63b7b000c4e800020|@124,1048575| 124:S40|5072696d494f28292e6175676d656e7457726974657228312977726974655665634e42272d283129 125:O6|@126,@9363,@127,@9364,@4,@9361 126:O2|4096,@9362 127:O14|@129,@130,@132,0,0,@133,0,@134,@136,@138,4096,0,@140,@128 128:O1|@142 129:S6|7374644f7574 130:O1|@131 131:O2|@102,I149 132:O2|@105,I149 133:O1|I149 134:O1|@135 135:O2|@109,I149 136:O1|@137 137:O2|@113,I149 138:O1|@139 139:O2|@117,I149 140:O1|@141 141:O3|@120,@135,@139 142:O3|@123,@137,@139 143:O2|@72,@144 144:O2|@89,0 145:S28|426173696353747265616d494f28292e646f4f6e456e747279283129 146:O3|@148,@147,@9349 147:O2|@151,@150 148:C2,220|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000218078000882e30000973bfffc971bfffc3ac000012c1700014082001838760000833b00047f2803a63b7b00084e80002080170004941bfffc97fbfffc3ea002a062b5b36296bbfffc3a800001969bfffc3bfb0000825b00108237000080b1001080920004387100003c0002a0600096ec7c0803a64e8000213a63000083fb0008480000143a600001947bfffc947bfffc947bfffc3ad3000082fb000c3b7b0010800d00187c1b004040a00010800d00207c0803a64e8000214bffff5c|@149,1048575|92,3,$148+166 136,3,@62 149:S27|426173696353747265616d494f28292e636c6f7365416c6c283129 150:O3|@153,@5,@9349 151:C2,96|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e30008973bfffc80170008941bfffc83180004801800007c0803a64e80002138600001831b0000833b0004801800007c0903a67f2803a63b7b00084e800420|@152,1048575| 152:S28|426173696353747265616d494f28292e636c6f73654f757427283129 153:C2,476|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e3000c82d700002c1600034082000c386000014e8000203ac0000392d70000973bfffc971bfffc947bfffc96fbfffc80180004941bfffc38600001833b000083190000281800034082000c3ae00001480000743ee000013af79c417c6bbb78556bf80140a20010800d00347c0803a64e8000217c03b8004082000c3ae0000148000044398000025460f80140a20010800d00347c0803a64e8000217ec3661541a3fff038760000800d00187c1b004040a00010800d00207c0803a64e8000214bffff7c387900003f00000063184948801800007c0803a64e8000212c030001408200084800003c38990000386000033f00000063184988801800007c0803a64e800021800d00187c1b004040a00010800d00207c0803a64e8000214bffff1c82db000c82b60008829500003a750000387400003b1b00103c0002a06000b6807c0803a64e80002190730000825b000c807200043f00000063184928801800007c0803a64e8000212c030003408200084800002c823200043a0000039211000038910000386000053f00000063184988801800007c0803a64e800021807b0008833b00103c0002a0600090707c0903a67f2803a63b7b00144e800420|@156,1048575|116,2,20000 232,3,I71 272,3,I73 344,3,@154 372,3,I70 424,3,I73 452,3,@48 154:C2,164|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e80002082e3000082d7000c82b8fff47c16a8404182005c973bfffc971bfffc96fbfffc806300044bffffad398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b0000931900003879000082fb00087ee803a63b7b000c4e800020806300044bffff68|@155,1015809| 155:S14|4c6973742e66696c746572283229 156:S35|426173696353747265616d494f28292e7465726d696e61746553747265616d27283129 157:O2|@161,0 158:O2|@159,@72 159:C2,92|7f2802a6633900023c6002e06063801482e30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092e3000482f8000492e300003ec002e062d6801490760000386000017f2803a64e800020|@160,983041|8,3,@9350 68,3,@9350 160:S20|54657874494f2e3c7061747465726e3e2d283129 161:O4|@163,@162,@89,@9357 162:O3|@165,@164,@9357 163:C2,200|7f2802a6633900028078000c82e30000973bfffc971bfffc2c170001408200084800003480770000832300043b0000019319000082f70004800d00187c1b004040a00010800d00207c0803a64e8000214bffffc8807b00003f2002e06339801483190000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213afd0004919d00009317000483230008933700003f0002e06318801492f800008083000438600025833b00043f00000063185328801800007c0903a67f2803a63b7b00084e800420|@145,1048575|88,3,@9350 148,3,@9350 172,3,I150 164:O2|@167,@166 165:C2,220|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000218078000882e30000973bfffc971bfffc3ac000012c1700014082001838760000833b00047f2803a63b7b00084e80002080170004941bfffc97fbfffc3ea002a062b5b9ea96bbfffc3a800001969bfffc3bfb0000825b00108237000080b1001080920004387100003c0002a0600096ec7c0803a64e8000213a63000083fb0008480000143a600001947bfffc947bfffc947bfffc3ad3000082fb000c3b7b0010800d00187c1b004040a00010800d00207c0803a64e8000214bffff5c|@149,1048575|92,3,$165+166 136,3,@62 166:O3|@168,@6,@9357 167:C2,96|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e30008973bfffc80170008941bfffc83180004801800007c0803a64e80002138600001831b0000833b0004801800007c0903a67f2803a63b7b00084e800420|@152,1048575| 168:C2,476|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e3000c82d700002c1600034082000c386000014e8000203ac0000392d70000973bfffc971bfffc947bfffc96fbfffc80180004941bfffc38600001833b000083190000281800034082000c3ae00001480000743ee000013af79c417c6bbb78556bf80140a20010800d00347c0803a64e8000217c03b8004082000c3ae0000148000044398000025460f80140a20010800d00347c0803a64e8000217ec3661541a3fff038760000800d00187c1b004040a00010800d00207c0803a64e8000214bffff7c387900003f00000063184948801800007c0803a64e8000212c030001408200084800003c38990000386000033f00000063184988801800007c0803a64e800021800d00187c1b004040a00010800d00207c0803a64e8000214bffff1c82db000c82b60008829500003a750000387400003b1b00103c0002a06000bcc07c0803a64e80002190730000825b000c807200043f00000063184928801800007c0803a64e8000212c030003408200084800002c823200043a0000039211000038910000386000053f00000063184988801800007c0803a64e800021807b0008833b00103c0002a06000a6347c0903a67f2803a63b7b00144e800420|@156,1048575|116,2,20000 232,3,I71 272,3,I73 344,3,@169 372,3,I70 424,3,I73 452,3,@92 169:C2,164|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e80002082e3000082d7000c82b8fff47c16a8404182005c973bfffc971bfffc96fbfffc806300044bffffad398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b0000931900003879000082fb00087ee803a63b7b000c4e800020806300044bffff68|@155,1015809| 170:C2,508|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc97fbfffc3f0002a06318beae971bfffc3ae0000196fbfffc3bfb0000386000013f0002a06318bf983c0002a06000bfb47c0803a64e80002197fbfffc3ec002a062d6be2296dbfffc3aa0000196bbfffc3bfb000038800001386000273f00000063185328801800007c0803a64e8000213a83000083fb00084800002c386000013f00000063184088801800007c0803a64e8000213a830000947bfffc947bfffc947bfffc97fbfffc3e6002a06273be82967bfffc3a400001965bfffc3bfb0000386000013b140000801800007c0803a64e80002183fb000848000010947bfffc947bfffc947bfffc3b7b0018800d00187c1b004040a00010800d00207c0803a64e8000214bffff3497fbfffc3e0002a06210bef2961bfffc39e0000195fbfffc3bfb000038800001386000273f00000063185328801800007c0803a64e80002139c3000083fb00084800002c386000033f00000063184088801800007c0803a64e80002139c30000947bfffc947bfffc947bfffc97fbfffc3d4002a0614abf52955bfffc39200001953bfffc3bfb0000386000013b0e0000801800007c0803a64e80002183fb000848000010947bfffc947bfffc947bfffc3b7b0018800d00187c1b004040a00010800d00207c0803a64e8000214bffff34|@9347,1048575|40,3,$170+302 68,3,@171 76,3,@173 96,3,$170+162 128,3,I150 164,3,I1 204,3,$170+258 304,3,$170+370 336,3,I150 372,3,I1 412,3,$170+466 171:O3|@173,@175,@172 172:O2|@9345,@8287 173:C2,52|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000218098000483180008801800007c0903a64e800420|@174,1048575| 174:S23|4d414b455f28292e7368656c6c50726f63283129283129 175:O2|@7,@176 176:O4|-1,@9366,@9367,@9365 177:O2|@178,80 178:C2,52|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021809800043c0002a06000c0a07c0903a64e800420|@182,983043|36,3,@179 179:C2,440|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021706b00014182000c3b0000034800001081830000558c083c61980001973bfffc947bfffc949bfffc3ae000012c1800014082000c3ad70000480000a03898fffe3878fffe833b0004732b00014182000c3b190000480000183b0300087f0c0e707d7960ae556b083c61780001730b00014182000c3ad800004800002c3ad70000387800003f00000063185368801800007c0803a64e8000213b3600003ac300003af900003977ffff1d6b00073b0b00017d96c2143aecffff3b040000800d00187c1b004040a00010800d00207c0803a64e8000214bffff58809b0000708b00014182000c386400004800001c386400003f00000063185368801800007c0803a64e8000212c03000140a20010800d00307c0803a64e8000213976ffff3983ffff7d6b63967d6b61d67f2bb010572bf80140a20010800d00347c0803a64e8000212c190001408000403f0002a06318c2743999ffff7f0bc8385560f80140a20010800d00347c0803a64e8000217c78661541a3fff082fb00087ee803a63b7b000c4e80002038790000831b00087f0803a63b7b000c4e800020|@181,983043|164,3,I152 272,3,I152 360,3,@180 180:B8|0000008000000000 181:S22|486173685461626c652e6861736856616c7565283229 182:S25|486173685461626c652e6861736856616c7565283129283129 183:O2|@2609,@9343 184:O2|@186,@185 185:O2|@187,0 186:S2|3c3d 187:O3|@9369,69,@188 188:O4|@186,-1,@190,@189 189:O3|1,@192,@191 190:O2|-2,4 191:O4|-3,0,@200,@199 192:O4|-2,1,@193,0 193:O2|@195,@194 194:O2|@198,0 195:O2|49,@196 196:O3|3,@9370,79992 197:O2|2,0 198:O2|50,@196 199:O2|0,@201 200:S4|626f6f6c 201:O6|@200,0,0,0,@203,@202 202:O2|-1,@9402 203:O2|-1,@9371 204:O3|1,@206,@205 205:O2|@208,@207 206:O1|-1 207:O2|@2554,0 208:O4|@210,@211,@209,@191 209:O2|-1,@212 210:S4|74727565 211:O1|1 212:O2|5,@213 213:O2|-1,@214 214:O5|0,@216,@2551,@9399,@215 215:O2|10,@2552 216:O3|@218,@220,@217 217:O8|@2535,@274,@2542,@230,@2505,@2545,@2250,@2534 218:C2,64|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180d8000480a30008808300048063000083180008801800007c0903a64e800420|@219,1048575| 219:S40|434f44455452454528292e67656e436f64652832292831296e6577456e7669726f6e283129283129 220:O2|@222,@221 221:O5|@225,@229,0,@274,@224 222:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@223,1048575| 223:S44|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229656e76283129 224:O10|0,@2511,@2510,0,0,0,0,0,0,0 225:C2,336|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a3000054abf80140a20010800d00347c0803a64e8000212c050001408000084800003882f800108197fffc558c09fc619600017cabb038556bf80140a20010800d00347c0803a64e8000217c05b000408000084800001c973bfffc3c6002a0606395e0800d00287c0803a64e80002154ac083a7ed7602e3af6000072eb00014082000c82b7000048000064973bfffc82b8000c82f5000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213add0004919d00003e8002a06294c79c929600083e8002a06294c7ac92960004829700009296000038760000800d00287c0803a64e800021829800083994ffff7c8ba0385560f80140a20010800d00347c0803a64e8000217eec241141a3fff0389500003877000083180004801800007c0903a67f2803a64e800420|@228,1048575|124,3,@51 220,3,@226 232,3,@227 226:S7|676574536f6d65 227:S13|496e7465726e616c4572726f72 228:S44|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229656e76283329 229:O4|@231,@274,@2505,@230 230:O2|@2508,@274 231:C2,1528|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386400004e800020971bfffc947bfffc973bfffc949bfffc386400008318000c801800007c0803a64e800021833b000c8319000482f8001882d70034947bfffc83160000801800007c0803a64e800021280300014182024882bb0010829500048274001882530034807b000083120008801800007c0803a64e800021823b001080110008941bfffc38800001807b00043b1b00143c0002a06000ce2c7c0803a64e800021821b001481f0000481cf0018814e0070947bfffc807b000c830a0000801800007c0803a64e8000212803000141820030811b001880e8000480c7001880a60070807b000c83050008801800007c0803a64e8000218123001048000018813b00188109000480e8001880c7001c8126000480bb0018808500048064001883230070953bfffc807b001083190000801800007c0803a64e800021280300014182003082fb001c82d7000482b6001882950070807b001083140008801800007c0803a64e8000218303000448000040831b001c82f80004398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b1d0004919d00003ec002a062d6ee6c92d8000092f8000482bb001c829500048274001882530070971bfffc807b001483120000801800007c0803a64e8000212803000141820030821b002081f0000481cf0018814e0070807b0014830a0008801800007c0803a64e8000218223000c480000343d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213a3d0004919d00003a00000192110000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d000081fb000491e300109223000c81db000891c30008815b0000914300043920000191230000831b000c833b0018801800007c0903a67f2803a63b7b00244e80042082bb0010829500048274001882530024807b000083120000801800007c0803a64e800021280300014182003c823b00108211000481f0001881cf0024807b0000830e0008801800007c0803a64e800021807b0004815b00087d4803a63b7b00144e800020823b00108211000481f0001881cf0044807b0000830e0000801800007c0803a64e8000212803000141820248815b0010812a00048109001880e80044807b000083070008801800007c0803a64e80002180db001080060008941bfffc38800001807b00043b1b00143c0002a06000ce2c7c0803a64e80002180bb0014808500048324001883190070947bfffc807b000c83180000801800007c0803a64e800021280300014182003082db001882b600048295001882740070807b000c83130008801800007c0803a64e80002182e300104800001882fb001882d7000482b600188295001c82f40004827b001882530004823200188211007096fbfffc807b001083100000801800007c0803a64e800021280300014182003081db001c814e0004812a001881090070807b001083080008801800007c0803a64e80002181e300044800004081fb001c81cf0004398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002139fd0004919d00003d4002a0614aef24914f000091cf0004813b001c8109000480e8001880c7007095fbfffc807b001483060000801800007c0803a64e8000212803000141820030809b0020806400048323001883190070807b001483180008801800007c0803a64e80002180a3000c480000343d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e80002138bd0004919d00003880000190850000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d0000833b00049323001090a3000c831b00089303000882fb000092e300043ac0000192c30000831b000c833b0018801800007c0903a67f2803a63b7b00244e800420815b0010812a00048109000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002138fd0004919d00003cc002a060c6efa890c700083ca002a060a5c7ac90a70004808800009087000038670000800d00287c0803a64e800021|@273,1048575|188,3,@232 452,3,@268 912,3,@232 1176,3,@271 1480,3,@272 1492,3,@227 232:C2,2304|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000082d7000482b6001882950034973bfffc971bfffc947bfffc949bfffc83140000801800007c0803a64e800021280300014182011c827b000882530000823200048211001881f00034807b0004830f0008801800007c0803a64e80002181c3000855cbf80140a20010800d00347c0803a64e8000212c0e00014180003c815b00007dcb5038556bf80140a20010800d00347c0803a64e8000217c0e500040800018807b0004813b000c7d2803a63b7b00104e800020815b0008812afffc3989ffff7dcb48385560f80140a20010800d00347c0803a64e8000217d0e661541a3fff080ea000080c7000480a60018808500348323000083030004398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00003ae0000192e3000c91030008930300049323000083040004833b000c801800007c0903a67f2803a63b7b00104e800420827b000882530000823200048211001881f00044807b0004830f0000801800007c0803a64e800021280300014182016081db0008814e0000812a00048109001880e80044807b000483070008801800007c0803a64e80002180db000880a6000080850004832400188319004482fb00003980000256e0f80140a20010800d00347c0803a64e8000217ed7661541a3fff080030004941bfffc80030008941bfffc8003000c941bfffc80030010941bfffc80030014941bfffc80030018941bfffc8003001c941bfffc80180004941bfffc38960000806300003b0600004bfffdb582bb0028829b00188275fffc3993ffff7e8b98385560f80140a20010800d00347c0803a64e8000217e54661541a3fff03a230000398000083bbdffdc7c1df04040a00010800d001c7c0803a64e800021387d0004919d0000821b00049203001c81fb000891e3001881db000c91c30014815b001091430010813b00149123000c92430008811b001c9103000492230000831b0000833b002c801800007c0903a67f2803a63b7b00304e80042081db0008814e0000812a00048109001880e80030807b000483070000801800007c0803a64e80002128030001418200d880db000880a60000808500048064001883230030807b000483190008801800007c0803a64e800021831b000882f8000082d7000482b600188295003080030000941bfffc80030008941bfffc80140004941bfffc809b000c806300044bfffc79947bfffc807b000c3b1b001c3c0002a06000d7487c0803a64e8000213a630000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000825b000892430008823b00009223000492630000831b0004833b001c801800007c0903a67f2803a63b7b00204e80042080db000880a60000808500048064001883230040807b000483190000801800007c0803a64e80002128030001418200b0831b000882f8000082d7000482b6001882950040807b000483140008801800007c0803a64e800021827b000882530000823200048211001881f0004080030004941bfffc800f0004941bfffc809b0008806300003b1300004bfffb7939c30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000815b00049143000491c30000831b0000833b0014801800007c0903a67f2803a63b7b00184e800420831b000882f8000082d7000482b600188295002c807b000483140000801800007c0803a64e80002128030001418200b0827b000882530000823200048211001881f0002c807b0004830f0008801800007c0803a64e80002180030000941bfffc809b000480630004831b000c4bfffab981db000c814e0000812a00048109001880e8002c38c30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000038a0000190a3000890c30004809b00009083000083070004833b0010801800007c0903a67f2803a63b7b00144e800420827b000882530000823200048211001881f00058807b0004830f0000801800007c0803a64e800021280300014182007881db0008814e0000812a00048109001880e80058807b000483070008801800007c0803a64e80002180db000880a6000080850004832400188319005880180004941bfffc3b1b00103c0002a06000d8287c0803a64e800021831b0000833b0010801800007c0903a67f2803a63b7b00144e80042081db0008814e0000812a00048109001880e80028807b000483070000801800007c0803a64e800021280300014182004080db000880a60000808500048064001883230028807b000483190008801800007c0803a64e800021807b0004831b000c7f0803a63b7b00104e80002080db000880a60000808500048064001883230068807b000483190000801800007c0803a64e80002128030001418200b0831b000882f8000082d7000482b6001882950068807b000483140008801800007c0803a64e800021827b000882530000823200048211001881f0006880030004941bfffc800f0004941bfffc809b0008806300003b1300004bfff8b139c30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000815b00049143000491c30000831b0000833b0014801800007c0903a67f2803a63b7b00184e800420831b000882f8000082d7000482b600083c6002a06063d8f483150010801800007c0803a64e800021829b0008827400008253000482320008947bfffc83110004801800007c0803a64e8000213a0300003c6002a06063ee143b100000801800007c0803a64e80002181fb000c81cf0000814e0004812a0018398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000811b00009103000480fb000890e3000083090078801800007c0803a64e80002180db000c80a60000808500048064000883230008807b00003b190000801800007c0803a64e8000213b03000038600001801800007c0803a64e80002182fb000c82d7000082b600048295000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a7d0004919d00003e4002a06252ee20925300083e2002a06231c7ac92330004821400009213000038730000800d00287c0803a64e800021|@267,1048575|920,3,@233 1584,3,@235 1972,3,@236 2036,3,@265 2256,3,@266 2268,3,@227 233:C2,176|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e800020973bfffc971bfffc80030004941bfffc8098fff4806300008318fffc3c0002a06000ce2c7c0803a64e800021947bfffc807b0004831b00084bffff99398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b0000931900003879000082fb000c7ee803a63b7b00104e800020|@234,1048575|76,3,@232 234:S11|4c6973742e6d6170283229 235:C2,176|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e800020973bfffc971bfffc80030004941bfffc8098fff4806300008318fffc3c0002a06000ce2c7c0803a64e800021947bfffc807b0004831b00084bffff99398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b0000931900003879000082fb000c7ee803a63b7b00104e800020|@234,1048575|76,3,@232 236:O2|77,@237 237:O1|@238 238:C2,68|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000213f0002e06318a1fc82f8000038830000387700003c0002a06000d9687c0903a64e800420|@264,1048575|32,3,@9372 52,3,@239 239:C2,984|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000213ad900003aa30000387500003c0002a06000dd5c7c0803a64e8000212c03ffff408202f0708b00014182000c386000034800001081840000558c083c61830001949bfffc3a9600003a7500003b1b00003c0002a06000ddb07c0803a64e8000212c030001408200b0708b00014182000c386000034800001081840000558c083c61830001398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213b3d0004919d0000907900083b0000019319000490990000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002a062d6df2892d700009337000480b3001038970000387300003b3400003c0002a0600096ec7c0903a67f2803a63b7b00044e800420398000013bbdfff87c1df04040a00010800d001c7c0803a64e8000213a5d0004919d0000907200003a23000038b2000038800001807b00003c0002a06000e5307c0803a64e800021947bfffc947bfffc947bfffc389b00003c0002a06000a2e07c0803a64e800021398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a1d0004919d000081fb000891f0000881db000491d00004815b000091500000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021393d0004919d00003d0002a06108ecc49109000092090004969bfffc967bfffc963bfffc80b3001038890000387300003c0002a0600096ec7c0803a64e80002180fb000480a700103c8002a06084a62c386700003c0002a0600096ec7c0803a64e80002138a00001809b0000807b00183c0002a06000e5307c0803a64e800021947bfffc947bfffc947bfffc389b00003c0002a06000a2e07c0803a64e800021398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002138dd0004919d000080bb000890a60008809b000490860004807b000090660000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d00003f0002a06318ed149319000090d9000482fb001080b700103899000038770000833b00143c0002a0600096ec7c0903a67f2803a63b7b00284e800420708b00014182000c3a8000034800001081840000558c083c61940001398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a7d0004919d0000929300083a4000019253000490930000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a3d0004919d00003e0002a06210ed64921100009271000480b5001038910000387500003b3600003c0002a0600096ec7c0903a67f2803a64e800420|@263,1048575|44,3,@240 112,3,@242 252,3,@244 284,3,@62 364,3,@251 396,3,@76 508,3,@260 548,3,@62 572,3,@91 584,3,@62 612,3,@251 644,3,@76 756,3,@261 792,3,@62 932,3,@262 964,3,@62 240:C2,16|8303001482f80000387700004e800020|@241,917505| 241:S32|426173696353747265616d494f28292e6765744275666665724d6f6465283129 242:C2,296|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e800020398000025460f80140a20010800d00347c0803a64e8000217eec1c1141a3fff056ebf80140a20010800d00347c0803a64e8000212c170001408000084800004882d8000072cb00014182000c3aa000034800001081960000558c083c619500017eeba838556bf80140a20010800d00347c0803a64e8000217c17a8004080000848000020973bfffc3aa300003c6002a0606395e0800d00287c0803a64e80002172cb000141820008480000183ab700087eac0e707d7660ae556b083c61760001281600154082000c7f2803a64e800020398000025460f80140a20010800d00347c0803a64e8000217c6c1c1141a3fff07f2803a64bfffee4|@243,1015809|188,3,@51 243:S43|54657874494f2e5465787453747265616d494f2e6f75747075742832296c6173744e65776c696e65283129 244:C2,52|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021809800043c0002a06000df787c0903a64e800420|@259,1048575|36,3,@245 245:C2,456|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000218303000882e3000c82d700002c1600034082009c973bfffc398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021389d0004919d00003ec002a062d6e15c92c400083ec002a062d6e16c92c4000482d8000092c40000398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213abd0004919d0000909500083c8002a060849660909500043c8002e06084801c9095000038750000800d00287c0803a64e80002182a3000080040008941bfffc80030004941bfffc80040000941bfffc96bbfffc80040004941bfffc947bfffc80150000941bfffc809b001882db00007c8bb038556bf80140a20010800d00347c0803a64e8000217c04b00040810044973bfffc3c0002a06000a6347c0803a64e80002180db001c80bb000c809b0014807b0008833b00003c0002a06000e1907c0903a67f2803a63b7b00204e8004208283001482740000281300034082002838c4000080bb0008809b00103c0002a06000e1907c0903a67f2803a63b7b001c4e800420973bfffc386000013b1b001c3c0002a06000e78c7c0803a64e800021825b00007e4803a63b7b00204e800020|@258,1048575|92,3,@246 104,3,@247 164,3,@57 176,3,@9351 300,3,@92 336,3,@249 388,3,@249 424,3,@254 246:S6|6f7574707574 247:O3|@9373,@248,0 248:S12|436c6f73656453747265616d 249:C2,272|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000218303000882f8002072eb00014082004c94dbfffc80180000941bfffc94bbfffc949bfffc80170000941bfffc973bfffc386000013b1b00143c0002a06000e2bc7c0803a64e80002182db00007ec803a63b7b00184e800020973bfffc398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002a062b5e15c92b600083e8002a06294969c929600048278000092760000398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a5d0004919d000092d200083e2002a062319660923200043e0002e06210801c9212000038720000800d00287c0803a64e800021|@253,1048575|88,3,@250 160,3,@246 172,3,@59 232,3,@57 244,3,@9351 250:C2,600|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc947bfffc97fbfffc3ee002a062f7e3ba96fbfffc3ac0000196dbfffc3bfb00008298fff83994ffff7c6ba0385560f80140a20010800d00347c0803a64e8000217e63661541a3fff0825800003983ffff7e4b18385560f80140a20010800d00347c0803a64e8000217e2c941141a3fff0398000013bbdfff87c1df04040a00010800d001c7c0803a64e8000213a1d0004919d00009230000081f8fff038b00000389300008078fff43c0002a06000e5307c0803a64e8000213b0f0000801800007c0803a64e8000213aa3000083fb0008480000c481db0004812300003d0002e06108801c7c0940404082000c39430000480000942c090003408200103d4002a0614a962c48000080398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002138fd0004919d00003cc002a060c6e15c90c700089067000480aefffc90a70000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021395d0004919d000090ea00083c8002a060849660908a00043f2002e06339801c932a0000386a0000800d00287c0803a64e80002181db000c398effff7eab70385560f80140a20010800d00347c0803a64e8000217d55661541a3fff0813b0010810900007d4b4378556bf80140a20010800d00347c0803a64e8000217c0a4000408200183860000180fb00147ce803a63b7b00184e800020398effff7eab70385560f80140a20010800d00347c0803a64e8000217c75661541a3fff03b090000833b00147f2803a63b7b00184bfffdb4|@252,1048575|48,3,$250+254 208,3,@251 260,3,@9351 292,3,@54 340,3,@246 404,3,@57 416,3,@9351 251:C2,492|7f2802a6633900022c050001408200cc708b000141820028548bf80140a20010800d00347c0803a64e8000212c0400014180000c3b04000048000020973bfffc3b0300003c6002a0606395e0800d00287c0803a64e800021706b00014182000c38a000034800001081830000558c083c618500017c182840418100487d982810388c0001398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002138bd0004919d0000906500089085000493050000386500007f2803a64e800020973bfffc3c6002a0606395e0800d00287c0803a64e800021706b00014182000c3b0000034800001081830000558c083c61980001708b000141820028548bf80140a20010800d00347c0803a64e8000212c0400014180000c3ae4000048000020973bfffc3ae300003c6002a0606395e0800d00287c0803a64e80002180850000708b000141820028548bf80140a20010800d00347c0803a64e8000212c0400014180000c3ac4000048000020973bfffc3ac300003c6002a0606395e0800d00287c0803a64e8000217d97b2143aacffff7c15c04041810040398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213b1d0004919d00009078000892d8000492f80000387800007f2803a64e800020973bfffc3c6002a0606395e0800d00287c0803a64e800021|@53,1015815|68,3,@51 196,3,@51 296,3,@51 372,3,@51 472,3,@51 252:S38|426173696353747265616d494f28292e7772697465566563283429666f7263654f7574283129 253:S27|426173696353747265616d494f28292e7772697465566563283429 254:C2,800|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000218078fffc82e3000082d8ffe83997ffff7ecbb8385560f80140a20010800d00347c0803a64e8000217eacb41141a3fff082f800007eeba838556bf80140a20010800d00347c0803a64e8000217c17a800408000bc82a30000398000013bbdfff87c1df04040a00010800d001c7c0803a64e8000213a9d0004919d000092f400003a7900003a5800003a35000038b400008092fff08072fff83c0002a06000e5307c0803a64e8000213a13000039f2000038a30000808ffff4387100003c0002a06000eac87c0803a64e80002180cffffc80a60000808f00003984ffff7cab20385560f80140a20010800d00347c0803a64e8000217c65661541a3fff090660000386000017e0803a64e80002082a300003995ffff7ecba8385560f80140a20010800d00347c0803a64e8000217e8cb41141a3fff082630000398000013bbdfff87c1df04040a00010800d001c7c0803a64e8000213a5d0004919d0000929200003a3900003a18000038b200008090fff08070fff83c0002a06000e5307c0803a64e80002139f1000039d4000038a300008090fff4387300003c0002a06000eac87c0803a64e80002180d0fffc80a60000398effff7cab70385560f80140a20010800d00347c0803a64e8000217c85661541a3fff09086000095fbfffc961bfffc95dbfffc8070ffec3c0002a06000a6347c0803a64e800021807b00048323fff0831b00003998ffff7f2bc0385560f80140a20010800d00347c0803a64e8000217ef9661541a3fff082c300003998ffff7ecbc0385560f80140a20010800d00347c0803a64e8000217eacb41141a3fff0398000013bbdfff87c1df04040a00010800d001c7c0803a64e8000213a9d0004919d000092b400008263fff438b40000389700008063fff83c0002a06000e5307c0803a64e80002138a3000038930000386000013c0002a06000eac87c0803a64e800021825b000482320000821b00003990ffff7e2b80385560f80140a20010800d00347c0803a64e8000217dec8c1141a3fff081d2fffc91ee000038600001815b00087d4803a63b7b000c4e800020|@257,1048575|184,3,@251 220,3,@255 404,3,@251 440,3,@255 520,3,@92 680,3,@251 708,3,@255 255:C2,304|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc947bfffc947bfffc3ab900003a8300008264000082440004389b0000386500003c0002a06000a2e07c0803a64e800021728b000141820028568bf80140a20010800d00347c0803a64e8000212c1400014180000c3a3400004800001c96bbfffc3c6002a0606395e0800d00287c0803a64e80002180bb00087d912a14388cffff7c0498404081001c96bbfffc3c6002a0606395e0800d00287c0803a64e800021807b0000706b00014182002c833b00047d91ca143b0cffff7c6c0e707f0b0e707d9259ae386000017ea803a63b7b000c4e800020833b00043b19000890bb000838d1000038b20000389800003b3500003f00000063185928801800007c0903a67f2803a63b7b00084e800420|@256,1046543|68,3,@76 132,3,@51 176,3,@51 276,3,I198 256:S25|436861724172726179536c6963652e636f7079566563283329 257:S46|426173696353747265616d494f28292e6f7574707574566563746f72283229616464566563546f42756666283129 258:S31|426173696353747265616d494f28292e6f7574707574566563746f72283229 259:S34|426173696353747265616d494f28292e6f7574707574566563746f72283129283129 260:C2,52|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021809800043c0002a06000df787c0903a64e800420|@259,1048575|36,3,@245 261:C2,52|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021809800043c0002a06000df787c0903a64e800420|@259,1048575|36,3,@245 262:C2,52|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021809800043c0002a06000df787c0903a64e800420|@259,1048575|36,3,@245 263:S29|54657874494f2e5465787453747265616d494f2e6f7574707574283229 264:S45|434f44455452454528292e6368616e67654c6576656c2832296368616e67654c283229707072696e742d283129 265:O2|1,0 266:S21|6368616e67654c3a20556e6b6e6f776e20636f6465 267:S35|434f44455452454528292e6368616e67654c6576656c2832296368616e67654c283229 268:C2,104|7f2802a663390002973bfffc8078000482e3000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002a062b5eef092b600083ea002a062b5c7ac92b6000482b7000092b6000038760000800d00287c0803a64e800021|@270,1015809|56,3,@269 68,3,@227 269:S9|6572726f7220656e76 270:S22|434f44455452454528292e6572726f72456e76283129 271:C2,104|7f2802a663390002973bfffc8078000482e3000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002a062b5eef092b600083ea002a062b5c7ac92b6000482b7000092b6000038760000800d00287c0803a64e800021|@270,1015809|56,3,@269 68,3,@227 272:S26|6368616e67654c6576656c3a20556e6b6e6f776e20656e747279 273:S25|434f44455452454528292e6368616e67654c6576656c283229 274:O7|@276,@2087,@2109,@330,@2182,@2188,@275 275:O32|@2193,@2197,@2201,@2205,@2209,@2217,@2225,@2233,@2237,@2245,@2253,@2261,@2269,@2277,@2285,@2293,@2301,@2309,@2317,@2322,@2330,@2335,@2343,@2351,@2359,@2367,@2375,@2383,@2391,@2399,@2407,@2192 276:O1|@277 277:O2|@279,@278 278:O3|@282,@301,@281 279:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@280,1048575| 280:S19|475f434f444528292e67656e636f6465283129 281:O9|@1880,@301,0,@2083,64,1,@2086,@1879,I15 282:C2,996|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7001082b60044973bfffc971bfffc947bfffc949bfffc83150000801800007c0803a64e80002128030001418201f4829b0008827400048253001082320044807b000483110008801800007c0803a64e800021821b000881f0000481cf000081430000812300048103001080e30018398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000080db000090c300089123000438a0000190a30000955bfffc951bfffc94fbfffc830e0030801800007c0803a64e800021809b0014398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213b3d0004919d00003f0002a06318f5509319000082e4000492f9000890790004398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002a062b5f60892b6000092f60004398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a9d0004919d00003e6002a06273f6a49274000092f4000496dbfffc969bfffc3a400003965bfffc823b0010963bfffc821b0010961bfffc81fb002095fbfffc3cc002a060c6f72838b9000081c4000838830000807b00203b0e0000801800007c0803a64e800021815b0014812a00048109000c8308000c801800007c0803a64e80002138e30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003cc002a060c6f75490c3000090e3000480bb00187ca803a63b7b001c4e800020829b00088274000482530000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000823b0000922300083e0002a06210f7989203000439e0000191e3000083120030801800007c0803a64e80002181db0008398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021395d0004919d00003d2002a06129f7ac912a0000810e0004910a0004398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138fd0004919d00003cc002a060c6f84c90c7000091070004398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138bd0004919d00003c8002a06084f8d0908500009105000494fbfffc94bbfffc3b200003973bfffc3b000001971bfffc3ae0000196fbfffc82db001496dbfffc3cc002a060c6f95438aa000038830000807b001c830e0008801800007c0803a64e80002182bb00083a830000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003e6002a06273f98092630000928300088255000492430004823b000c7e2803a63b7b00104e800020|@300,1048575|272,3,@283 332,3,@285 384,3,@287 440,3,@288 548,3,@290 636,3,@292 712,3,@293 768,3,@295 820,3,@296 876,3,@297 956,3,@299 283:C2,112|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000882d7000482a30008398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000829800049283000492a3000083160028801800007c0903a67f2803a64e800420|@284,1048575| 284:S34|475f434f444528292e67656e636f6465283229636c6f73757265416464722d283129 285:C2,104|7f2802a663390002973bfffc8078000482e30008398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002a062b5f68c92b600083ea002a062b5c7ac92b6000482b7000092b6000038760000800d00287c0803a64e800021|@284,1015809|56,3,@286 68,3,@227 286:S15|4e6f7420737461746963206c696e6b 287:C2,104|7f2802a663390002973bfffc8078000482e30008398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002a062b5f68c92b600083ea002a062b5c7ac92b6000482b7000092b6000038760000800d00287c0803a64e800021|@284,1015809|56,3,@286 68,3,@227 288:O1|@289 289:C2,8|386000014e800020|@284,524289| 290:C2,8|807800044e800020|@291,786433| 291:S22|475f434f444528292e67656e636f6465283229283129 292:S11|3c746f70206c6576656c3e 293:C2,104|7f2802a663390002973bfffc8078000482e30008398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002a062b5f83092b600083ea002a062b5c7ac92b6000482b7000092b6000038760000800d00287c0803a64e800021|@284,1015809|56,3,@294 68,3,@227 294:S17|746f70206c6576656c2072656163686564 295:C2,104|7f2802a663390002973bfffc8078000482e30008398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002a062b5f68c92b600083ea002a062b5c7ac92b6000482b7000092b6000038760000800d00287c0803a64e800021|@284,1015809|56,3,@286 68,3,@227 296:C2,104|7f2802a663390002973bfffc8078000482e30008398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002a062b5f68c92b600083ea002a062b5c7ac92b6000482b7000092b6000038760000800d00287c0803a64e800021|@284,1015809|56,3,@286 68,3,@227 297:O1|@298 298:C2,8|386000014e800020|@284,524289| 299:C2,160|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7000c973bfffc80160040941bfffc80180008941bfffc386000018316000c801800007c0803a64e8000213aa30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a30004829b000092830000831b0004833b0008801800007c0903a67f2803a63b7b000c4e800420|@291,1048575| 300:S19|475f434f444528292e67656e636f6465283229 301:O5|@303,@961,@330,@302,@275 302:O19|@1111,@1112,@1118,@1118,@1115,@1121,@1867,@1125,I17,I15,0,1,64,@1869,@1872,@1875,I204,4,@1866 303:O81|@305,@309,-1,3,24,27,31,25,@313,4,@414,@419,@424,@430,@699,@704,@705,@706,@707,@708,@709,@710,@711,@712,@713,@714,@715,@211,@206,@716,@719,-6,0,10,8,6,7,1,-13,-1,-11,-9,-7,2,5,4,-5,12,-12,11,3,-3,-4,-10,9,-2,@724,@727,@732,@826,@829,@835,@842,@859,@862,@865,@873,@881,@885,@890,@902,@916,@923,@929,@932,@937,@942,@949,1,@956,@304 304:O1|@959 305:O2|@306,0 306:O1|@307 307:C2,24|280300014082000c386000034e800020386000014e800020|@308,524289| 308:S10|53544f52455f42595445 309:O2|@310,-1 310:O1|@311 311:C2,28|3b00ffff7c1818404082000c386000034e800020386000014e800020|@312,786433| 312:S10|53544f52455f574f5244 313:O2|@315,@314 314:O2|@331,@330 315:C2,364|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021546bf80140a20010800d00347c0803a64e8000212c0300014180004c546bf80140a20010800d00347c0803a64e8000212c03000940800030398000065460f80140a20010800d00347c0803a64e8000217f03661541a3fff0387800007f2803a64e800020973bfffc971bfffc3880ffff3c0002a06000fe6c7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d00003b0000019319000490790000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000932300043ee002a162f7051092e300003c0002a1600005347c0803a64e80002182db000082b6000482950004398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a7d0004919d0000907300083e4002a06252c7ac92530004823400009233000038730000800d00287c0803a64e800021|@329,1048575|144,3,@316 248,3,@324 260,3,@325 328,3,@227 316:C2,368|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021546bf80140a20010800d00347c0803a64e8000212c030001408000c82c0400014082000c3b000005480000282c04fffd4082000c3b000011480000182c04ffff4082000c3b000015480000083b000021398000025460f80140a20010800d00347c0803a64e8000217ee3641141a3fff0973bfffc38b8000038970000386000013c0002a06000fff87c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213add0004919d0000907600043aa000fd92b6000038760000833b00003c0002a1600002a07c0903a67f2803a63b7b00044e8004202c0400014082000c3b000005480000282c04fffd4082000c3b000011480000182c04ffff4082000c3b000015480000083b000021973bfffc38b8000038830000386000013c0002a06000fff87c0803a64e800021833b00003c0002a1600002a07c0903a67f2803a63b7b00044e800420|@323,1048575|160,3,@317 232,3,@321 324,3,@317 344,3,@321 317:C2,600|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc947bfffc949bfffc94bbfffc38850000807b00043f00000063184e28801800007c0803a64e800021546bf80140a20010800d00347c0803a64e8000212c03001540800080398000605460f80140a20010800d00347c0803a64e8000217f03661541a3fff0570bf80140a20010800d00347c0803a64e8000212c1800014080000848000024570bf80140a20010800d00347c0803a64e8000212c1801ff41810008480000183c6002a16063026c800d00287c0803a64e8000213b3800004800009c398000825460f80140a20010800d00347c0803a64e8000217f23661541a3fff0398000145720f80140a20010800d00347c0803a64e8000217f0ccc1141a3fff0570bf80140a20010800d00347c0803a64e8000212c1800014080000848000024570bf80140a20010800d00347c0803a64e8000212c1801ff41810008480000183c6002a16063026c800d00287c0803a64e8000213b38000082fb000482db00007eebb038556bf80140a20010800d00347c0803a64e8000217c17b00040800048398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d0000829b0008929500049335000038750000827b000c7e6803a63b7b00104e800020973bfffc38960000387700003f00000063184e08801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d0000829b000c92950004827b00009275000080bb00043883000038750000833b00107f2803a63b7b00144bfffdb4|@320,1048575|56,3,I110 200,3,@318 356,3,@318 500,3,I109 318:O3|@9374,@319,0 319:S3|436872 320:S14|496e742e746f4368617273283329 321:C2,536|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c030001408200103c600000606346684e800020973bfffc947bfffc80030000941bfffc3b0000012c0300014082000c3af8000048000048398000025700f80140a20010800d00347c0803a64e8000217f38661541a3fff0806300043b190000800d00187c1b004040a00010800d00207c0803a64e8000214bffffb072eb00014182002856ebf80140a20010800d00347c0803a64e8000212c1700014180000c3ad70000480000183c6002a06063a344800d00287c0803a64e8000212c16000340820018807b0000833b00087f2803a63b7b000c4e800020387600103b23fffe3b0000092c18000140a20010800d00307c0803a64e8000213998ffff3979ffff7d6b6396556b083c6177000196dbfffc97fbfffc3ea002a162b5041a96bbfffc3a800001969bfffc3bfb000038a0000138800083387700003f000000631841c8801800007c0803a64e8000213a63000083fb0008480000183c6002a06063a344800d00287c0803a64e8000217ecc0e7091930000967bfffc965bfffc3a200009821b001c2c100001408200084800004081fb000481d000007dcc0e707e2b0e707d8f59ae39510002821000043a2a0000800d00187c1b004040a00010800d00207c0803a64e8000214bffffbc807b00043f00000063184648801800007c0803a64e800021807b000481fb00207de803a63b7b00244e800020|@322,1048575|40,3,I48 200,3,@78 308,3,$321+378 344,3,I11 376,3,@78 496,3,I47 322:S31|4c696272617279537570706f72742e737472696e67496d706c6f6465283129 323:S10|496e742e666d74283229 324:S28|6172675265673a20626164207265676973746572206e756d62657220 325:C2,808|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c030001408200103c600000606346684e800020830300042c1800014082000c806300004e800020973bfffc947bfffc3ae000012c0300014082000c3ad700004800006c83230000732b00014182000c3b0000034800001081990000558c083c619800013998ffff7eebc0385560f80140a20010800d00347c0803a64e8000217ed7661541a3fff03af6000080630004800d00187c1b004040a00010800d00207c0803a64e8000214bffff8c2c1600014082001c3c60000060634668833b00047f2803a63b7b00084e8000202c16000340820084807b00002c030001408200183c6002a160630878800d00287c0803a64e8000213ac30000809600003c600000606346683f00000063184368801800007c0803a64e800021280300014182002480760004800d00187c1b004040a00010800d00207c0803a64e8000214bffff9c80760000809b00047c8803a63b7b00084e80002072cb00014182002856cbf80140a20010800d00347c0803a64e8000212c1600014180000c3ab60000480000183c6002a06063a344800d00287c0803a64e800021389500103864fffe3b2000092c19000140a20010800d00307c0803a64e8000213999ffff3963ffff7d6b6396556b083c6178000196bbfffc97fbfffc3ee002a162f7076a96fbfffc3ac0000196dbfffc3bfb000038a0000138800083387800003f000000631841c8801800007c0803a64e8000213a83000083fb0008480000183c6002a06063a344800d00287c0803a64e8000217eac0e7091940000969bfffc967bfffc3a400009823b00182c110001408200084800009482110000720b00014182000c39e000034800001081900000558c083c618f00012c0f00034082001881db00047e0c0e707e4b0e707d8e59ae4800002c95fbfffc38d2000080bb000838800009387000003f00000063185928801800007c0803a64e8000217d927a1439ccffff823100043a4e0000800d00187c1b004040a00010800d00207c0803a64e8000214bffff68807b00043f00000063184648801800007c0803a64e800021807b0004821b001c7e0803a63b7b00204e800020|@328,1048575|40,3,I48 212,3,I48 256,3,@326 284,3,I48 292,3,I24 416,3,@78 496,3,$325+566 532,3,I11 564,3,@78 700,3,I198 768,3,I47 326:O3|103,@327,I48 327:S4|4661696c 328:S16|537472696e672e636f6e636174283129 329:S23|505043434f4445434f4e5328292e617267526567283129 330:O1|@9377 331:O3|@333,@343,@332 332:O2|@351,@350 333:O3|@335,@338,@334 334:O2|@340,@9375 335:O2|@336,@9375 336:C2,32|82e3000082d800047c17b0404082000c386000034e800020386000014e800020|@337,983041| 337:S19|556e6976657273616c2e746167283229283129 338:O2|@339,@9375 339:C2,76|7f2802a6633900023ae30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092e300083ae0008b92e3000482f8000492e300007f2803a64e800020|@337,917505| 340:C2,48|82e3000082d800047c17b0404082000c806300084e800020973bfffc3c6002a160630a30800d00287c0803a64e800021|@337,983041|28,3,@341 341:O3|101,@342,0 342:S5|4d61746368 343:O3|@345,@347,@344 344:O2|@349,@9376 345:O2|@346,@9376 346:C2,32|82e3000082d800047c17b0404082000c386000034e800020386000014e800020|@337,983041| 347:O2|@348,@9376 348:C2,76|7f2802a6633900023ae30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092e300083ae0008b92e3000482f8000492e300007f2803a64e800020|@337,917505| 349:C2,48|82e3000082d800047c17b0404082000c806300084e800020973bfffc3c6002a160630a30800d00287c0803a64e800021|@337,983041|28,3,@341 350:O2|@356,@355 351:C2,80|7f2802a6633900023ae30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003ec002a162d60bec92c3000082d8000492c3000892e300047f2803a64e800020|@354,983041|48,3,@352 352:C2,52|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000218098000483180008801800007c0903a64e800420|@353,1048575| 353:S24|44656275672e676574506172616d65746572283129283129 354:S21|44656275672e676574506172616d65746572283129 355:O2|@361,@360 356:C2,476|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc949bfffc80040000941bfffc2c0300014082000c3b2000014800008880030000941bfffc80030004941bfffc807b0004831b0008801800007c0803a64e8000212803000141820034398000013bbdfff87c1df04040a00010800d001c7c0803a64e8000213b3d0004919d0000831b00049319000048000028807b00003b7b0008800d00187c1b004040a00010800d00207c0803a64e8000214bffff743b7b0008732b00014082002882fb00048079000083170008833b000c801800007c0903a67f2803a63b7b00104e80042082fb000482db000880170000941bfffc82b600042c1500014082000c3a8000014800008880150000941bfffc80150004941bfffc807b0004831b0008801800007c0803a64e8000212803000141820034398000013bbdfff87c1df04040a00010800d001c7c0803a64e8000213a9d0004919d0000827b0004927400004800002882bb00003b7b0008800d00187c1b004040a00010800d00207c0803a64e8000214bffff743b7b0008728b000140820028825b00088074000083120008833b0010801800007c0903a67f2803a63b7b00144e8004203c6002a160630e80800d00287c0803a64e800021|@359,1048575|456,3,@357 357:O3|@9377,@227,@358 358:S11|746167206d697373696e67 359:S21|44656275672e676574506172616d65746572283229 360:O2|@368,@367 361:O3|@9378,69,@362 362:O1|@363 363:C2,24|973bfffc3c6002a160630f1c800d00287c0803a64e800021|@366,524289|4,3,@364 364:O3|103,@327,@365 365:S16|6572726f7220696e2070726f6772616d 366:S18|44656275672e64656661756c74732d283129 367:O2|@372,@371 368:O3|@9376,69,@369 369:O1|@370 370:C2,8|386000014e800020|@366,524289| 371:O2|@376,@375 372:O3|@9379,69,@373 373:O1|@374 374:C2,8|386000014e800020|@366,524289| 375:O2|@378,@377 376:O3|@9380,69,I48 377:O2|@380,@379 378:O3|@9381,69,1 379:O2|@382,@381 380:O3|@9382,69,40 381:O2|@384,@383 382:O3|@9383,69,0 383:O2|@386,@385 384:O3|@9384,69,0 385:O2|@388,@387 386:O3|@9385,69,0 387:O2|@390,@389 388:O3|@9375,69,0 389:O2|@392,@391 390:O3|@9386,69,0 391:O2|@394,@393 392:O3|@9387,69,0 393:O2|@396,@395 394:O3|@9388,69,0 395:O2|@398,@397 396:O3|@9389,69,6 397:O2|@402,@401 398:O3|@9390,69,@399 399:O1|@400 400:C2,8|386000014e800020|@366,524289| 401:O2|@404,@403 402:O3|@9391,69,77 403:O2|@406,@405 404:O3|@9392,69,0 405:O2|@408,@407 406:O3|@9393,69,0 407:O2|@409,0 408:O3|@9394,69,0 409:O3|@9395,69,@410 410:O1|@411 411:C2,24|973bfffc3c6002a160631228800d00287c0803a64e800021|@366,524289|4,3,@412 412:O3|103,@327,@413 413:S9|4e6f2073747265616d 414:O1|@415 415:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180830004806300003c0002a1600012a87c0903a64e800420|@418,786435|40,3,@416 416:C2,64|7f2802a6633900027c6b2378556bf80140a20010800d00347c0803a64e8000217c03200040820010386000037f2803a64e800020386000017f2803a64e800020|@417,524291| 417:S22|505043434f4445434f4e5328292e7265674571283229 418:S22|505043434f4445434f4e5328292e7265674571283129 419:O1|@420 420:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180830004806300003c0002a1600013a07c0903a64e800420|@423,786435|40,3,@421 421:C2,64|7f2802a6633900027c6b2378556bf80140a20010800d00347c0803a64e8000217c0320004082000c3b000003480000083b0000016b0300027f2803a64e800020|@422,786435| 422:S23|505043434f4445434f4e5328292e7265674e6571283229 423:S23|505043434f4445434f4e5328292e7265674e6571283129 424:O2|@426,@425 425:O2|@428,@314 426:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@427,1048575| 427:S27|505043434f4445434f4e5328292e636f6465437265617465283129 428:C2,1336|7f2802a66339000239600058800d00187d6bd8107c0b004040a00010800d00247c0803a64e8000213ad900003ab800003a8300003a6400003a45000038a0000138800083386000113f000000631841c8801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138bd0004919d00009065000438800001908500003d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d000090a300003d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213b3d0004919d00003b000001931900003d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213afd0004919d000038a0000190b700003d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e800021389d0004919d00003b000001930400003d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e80002138bd0004919d00003b000001930500003d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213b1d0004919d00003a200001923800003d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213a3d0004919d00003a000001921100003d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213a1d0004919d00003de0400039efffff91f000003d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e80002139fd0004919d000039c0000191cf00003d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e80002139dd0004919d000039400001914e00003d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e800021395d0004919d000039200001912a00003d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e800021393d0004919d000039000001910900003d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e800021391d0004919d000038e0000190e800003d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e80002138fd0004919d000038c0000190c700003d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e80002138dd0004919d000096dbfffc96bbfffc969bfffc967bfffc965bfffc947bfffc973bfffc96fbfffc949bfffc94bbfffc971bfffc963bfffc961bfffc95fbfffc95dbfffc955bfffc953bfffc951bfffc94fbfffc94dbfffc3ea002a062b5c45092a600003d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003a80000192950000829b00488274000482530000807b00488323000482f9000096bbfffc8077000083120008801800007c0803a64e8000213ac30000807b00403b160000801800007c0803a64e80002182bb004c8295000482740000947bfffc8073000483130008801800007c0803a64e8000213a430000807b00443b120000801800007c0803a64e800021398000143bbdffac7c1df04040a00010800d001c7c0803a64e8000213a3d0004919d0000821b00009211004c81fb001891f1004881db002491d10044815b0014915100409071003c813b003491310038811b00309111003480fb002090f1003080db000490d1002c80bb000890b10028809b000c90910024807b001090710020833b001c9331001c831b004c9311001882fb002892f1001482db004892d1001082bb002c92b1000c829b003892910008827b004092710004825b003c9251000038710000823b00547e2803a63b7b00584e800020|@429,1048575|72,3,I11 512,2,536870911 932,3,@211 429:S27|505043434f4445434f4e5328292e636f6465437265617465283329 430:O2|@432,@431 431:O14|@435,@604,@608,@642,@650,@651,@658,@663,@625,@669,@672,@675,@694,@434 432:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@433,1048575| 433:S25|505043434f4445434f4e5328292e636f7079436f6465283129 434:O2|@697,@314 435:C2,5000|7f2802a663390002396000b8800d00187d6bd8107c0b004040a00010800d00247c0803a64e80002182e3000882d7000082a30020829500008263002482530000822300488211000081e3000081cf0000973bfffc971bfffc947bfffc949bfffc94bbfffc96dbfffc969bfffc965bfffc95fbfffc80030004941bfffc8003000c941bfffc80030010941bfffc80030018941bfffc8003001c941bfffc8003002c941bfffc80030038941bfffc8003003c941bfffc8003004c941bfffc961bfffc95dbfffc386000013c0002a160002ebc7c0803a64e800021815b0044812a000081090000951bfffc80aa0004388800003c0002a1600031087c0803a64e80002180fb004880db00003980000254c0f80140a20010800d00347c0803a64e8000217ca6661541a3fff08087000090a40000807b001883230000281900014182000848000034831b0044570bf80140a20010800d00347c0803a64e8000212c180029418000084800001082fb000828170001418200a482fb004c3860003383170034801800007c0803a64e80002182db004c947bfffc38a00005388000333860003383160030801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003a8000019295000490750000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b1d0004919d000092b80004827b0000927800004800000c3b000001947bfffc82db004856cbf80140a20010800d00347c0803a64e8000212c160029418003383a8000093994ffff7ecba0385560f80140a20010800d00347c0803a64e8000217ecb0e707e6c5dd741a3ffec3a730001825b0050971bfffc38b3000038800001386000178312002c801800007c0803a64e800021823b0054947bfffc386000318311001c801800007c0803a64e800021821b005838a300003880001b3860000183100018801800007c0803a64e80002181fb0058947bfffc38a000173880003738600017830f0028801800007c0803a64e80002181db005c947bfffc3880000138600017830e0024801800007c0803a64e800021815b0060947bfffc38600009830a0020801800007c0803a64e800021947bfffc947bfffc39230000389b00003860fffd3c0002a16000408c7c0803a64e80002139000001951bfffc38e0000194fbfffc38c9000080bb000c809b00083860fffb3c0002a1600042087c0803a64e80002180db006c947bfffc386000498306001c801800007c0803a64e80002180bb00708085001838a30000386400003880001b3b230000386000013b190000801800007c0803a64e800021831b0070947bfffc3860000183180014801800007c0803a64e80002182fb0074398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213add0004919d00003aa0000192b600048297001092960000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a7d0004919d000092d3000490730000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a5d0004919d000092720004823b000092320000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a1d0004919d00009250000481fb000491f00000398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002139dd0004919d0000920e0004815b0010914e0000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021393d0004919d000091c90004811b001491090000398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138fd0004919d00009127000480db001890c700002c0700014082000c82bb001c480002ac94fbfffc807b00203b1b007c3c0002a1600045387c0803a64e8000213aa300003b7b00044800028482bb000c2815000141820250829b0050971bfffc386000318314001c801800007c0803a64e800021827b005438a300003880001b3860000183130018801800007c0803a64e800021825b0054947bfffc388000013860003783120024801800007c0803a64e800021823b0058947bfffc3860000983110020801800007c0803a64e800021947bfffc947bfffc3a030000389b00003860fffd3c0002a16000408c7c0803a64e80002139e0000195fbfffc39c0000195dbfffc38d0000080bb000c809b00083860fffb3c0002a1600042087c0803a64e800021815b0064947bfffc38600041830a001c801800007c0803a64e800021813b006838a300003880001b3860000183090018801800007c0803a64e800021811b0068947bfffc3860000183080014801800007c0803a64e80002180fb006c398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138dd0004919d000038a0000190a600048087001090860000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090d9000490790000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b1d0004919d00009338000482fb000092f80000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213add0004919d00009316000482bb000492b60000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a9d0004919d000092d40004827b001092740000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d000092950004825b001492550000480000243aa00001971bfffc947bfffc947bfffc947bfffc947bfffc947bfffc947bfffc947bfffc947bfffc96bbfffc3a800001827b00242c1300014082000c3a54000048000048398000025680f80140a20010800d00347c0803a64e8000217e34661541a3fff0827300043a910000800d00187c1b004040a00010800d00207c0803a64e8000214bffffb0965bfffc3a200001821b00042c1000014082000c39f1000048000048398000025620f80140a20010800d00347c0803a64e8000217dd1661541a3fff0821000043a2e0000800d00187c1b004040a00010800d00207c0803a64e8000214bffffb081db0000398fffff7dcb78385560f80140a20010800d00347c0803a64e8000217d4e661541a3fff0947bfffc947bfffc947bfffc389b0000386a00003b1b008c3c0002a1600045f87c0803a64e80002139200001811b00102c0800014082000c38e9000048000048398000025520f80140a20010800d00347c0803a64e8000217cc9661541a3fff08108000439260000800d00187c1b004040a00010800d00207c0803a64e8000214bffffb03980000254e0f80140a20010800d00347c0803a64e8000217cc7641141a3fff094dbfffc38a00001809b00382c0400014082000c38650000480000483980000254a0f80140a20010800d00347c0803a64e8000217f25661541a3fff08084000438b90000800d00187c1b004040a00010800d00207c0803a64e8000214bffffb0947bfffc3b200001831b00182c1800014082000c3af9000048000048398000025720f80140a20010800d00347c0803a64e8000217ed9661541a3fff0831800043b360000800d00187c1b004040a00010800d00207c0803a64e8000214bffffb082db00003997ffff7ecbb8385560f80140a20010800d00347c0803a64e8000217eb6661541a3fff03980000256a0f80140a20010800d00347c0803a64e8000217e95641141a3fff0969bfffc827b00802c1300014082000c3a40000148000050823b009480130004941bfffc80bb0094809b0004807300008311000c801800007c0803a64e800021827b00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffffa8823b007c2c1100014082000c3a0000014800005881f1000081cf0000815b009480110004941bfffc80bb0094809b000c386e0000830a0008801800007c0803a64e800021823b00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffffa081fb001071eb00014182000c39cf0000480000183c6002a1606330bc800d00287c0803a64e80002138a0000138800083386e00003f000000631841c8801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021395d0004919d0000906a000439200001912a00003d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e800021391d0004919d000091480000398000013bbdfff87c1df04040a00010800d001c7c0803a64e80002138fd0004919d00009107000080db006490e6000080bb0070809b000c90850000807b0078832300003b0000093998ffff7f2bc0385560f80140a20010800d00347c0803a64e8000217f2b0e707eec5dd741a3ffec3af70001951bfffc38c4000038b7000038880000807b00783c0002a1600038947c0803a64e8000213ac0000182bb00182c1500014082000c3a8000014800007896dbfffc80150004941bfffc80bb000838960000807500003c0002a1600031087c0803a64e800021827b0004398000025660f80140a20010800d00347c0803a64e8000217e53661541a3fff082bb00003ad200003b7b0008800d00187c1b004040a00010800d00207c0803a64e8000214bffff80827b007c82530000823b00103991ffff7e4b88385560f80140a20010800d00347c0803a64e8000217e12661541a3fff039e00009398fffff7e0b78385560f80140a20010800d00347c0803a64e8000217e0b0e707c6c5dd741a3ffec38630001961bfffc3c0002a160002ebc7c0803a64e80002180bb0004809b00003c0002a1600031087c0803a64e800021386000053c0002a160002ebc7c0803a64e80002181db00003980000855c0f80140a20010800d00347c0803a64e8000217d4e661541a3fff080bb0004388a00003c0002a1600031087c0803a64e800021386000013c0002a160002ebc7c0803a64e800021813b0000398000025520f80140a20010800d00347c0803a64e8000217d09661541a3fff080bb0004388800003c0002a1600031087c0803a64e80002180fb000480c70000808600002c0400014082006c80060004941bfffc38800085807b00003f00000063185968801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000833b0000932300043b0000039303000082fb00089077000038a00001480000183c6002a1606348a8800d00287c0803a64e8000213c80000060844668807b00783f00000063184368801800007c0803a64e800021280300014182000c3ac000014800000882db007882bb00043980000456a0f80140a20010800d00347c0803a64e8000217e95661541a3fff038b6000038940000807b00083c0002a1600048e87c0803a64e800021827b00943a4000012c1300014082000c3a3200004800009c821b00a0965bfffc80130004941bfffc8073000083100004801800007c0803a64e800021706b00014182000c39e300004800001c3f00000063185368801800007c0803a64e80002139e30000388f0000386000033f00000063185f08801800007c0803a64e80002181fb00047c6e7b783a4e0000827b00003b7b0008800d00187c1b004040a00010800d00207c0803a64e8000214bffff5c821b0004398000065600f80140a20010800d00347c0803a64e8000217df0661541a3fff038b10000388f0000807b00083c0002a1600048e87c0803a64e80002181db00902c0e00014082000c3940000148000050812e0000800e0004941bfffc80890004806900003b1b00a83c0002a160004c147c0803a64e80002181db00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffffa8813b0068810900002c0800014082009480db000880a60000808500002c0400034082006c80050004941bfffc38800005807b00003f00000063185968801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000833b0000932300043b00ffff9303000082fb000c9077000038e00001480000203c6002a160635314800d00287c0803a64e80002138e00001947bfffc80fb0078280700014182003480bb000c80850000806400002c030001408200183c6002a1606352b4800d00287c0803a64e80002180c400044800007880db000c80a60000806500002c030001408200183c6002a1606352b4800d00287c0803a64e800021808500043d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090990000387900003f00000063184648801800007c0803a64e80002138d9000094dbfffc38860000807b00a43c0002a16000535c7c0803a64e800021831b0068281800014182015c82db006082bb00203995ffff7ecba8385560f80140a20010800d00347c0803a64e8000217e96661541a3fff080db006c38b40000809b0080807b00103c0002a16000571c7c0803a64e8000213c6002a16063a99c831b006c801800007c0803a64e800021827b009c2c13000140820008480000c83e4002e06252a1fc8232000080130000941bfffc80130004941bfffc38800041387100003c0002a06000d9687c0803a64e8000213e0002e06210a1fc81f0000080af00103c8002a06084a62c386f00003c0002a0600096ec7c0803a64e8000213880ffff807b00043c0002a06000fe6c7c0803a64e80002138830000386000e53c0002a1600074a87c0803a64e800021831b0074801800007c0803a64e800021827b00003b7b0008800d00187c1b004040a00010800d00207c0803a64e8000214bffff343c6002a16063a9b4831b006c801800007c0803a64e8000213ae30000480000083ae00001807b000082fb00ac7ee803a63b7b00b04e800020|@603,1048575|200,3,@436 240,3,@441 832,3,@461 880,3,@463 1364,3,@467 1544,3,@461 1592,3,@463 2288,3,@469 2916,3,@437 2948,3,I11 3196,3,@450 3260,3,@441 3452,3,@436 3476,3,@441 3496,3,@436 3556,3,@441 3576,3,@436 3636,3,@441 3688,3,I200 3776,3,@472 3796,3,I48 3808,3,I24 3896,3,@474 3988,3,I152 4020,3,I245 4136,3,@474 4196,3,@479 4300,3,I200 4388,3,@490 4448,3,@487 4496,3,@487 4568,3,I47 4604,3,@492 4692,3,@498 4708,3,@601 4748,3,@9372 4784,3,@239 4800,3,@9372 4816,3,@91 4828,3,@62 4852,3,@316 4876,3,@511 4944,3,@602 436:C2,484|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021546bf80140a20010800d00347c0803a64e8000212c0300014180000c3b000003480000083b0000012c1800034082000c3ae30000480000283d800002398cfffe5460f80140a20010800d00347c0803a64e8000217eec1c1141a3fff0973bfffc947bfffc3c80000238840001387700003f00000063184e08801800007c0803a64e800021706b00014182000c3ac30000480000183c6002a1606330bc800d00287c0803a64e80002196dbfffc3c80000238840001807b00043f00000063184e28801800007c0803a64e8000212c0300014082000848000038546bf80140a20010800d00347c0803a64e8000212c0300014180000c3aa00003480000083aa0000128150003418200084800000c3aa30000480000243d8000025460f80140a20010800d00347c0803a64e8000217ea3661541a3fff072ab00014182000c3a950000480000183c6002a1606330bc800d00287c0803a64e800021827b0000566cc23e558c003c61920001727101ff568cc23e558c003c61900001728f01ff398000043bbdffec7c1df04040a00010800d001c7c0803a64e80002139dd0004919d000091ee000c920e0008922e0004924e0000386e0000815b00087d4803a63b7b000c4e800020|@440,1048575|132,2,65536 144,3,I109 180,3,@437 204,2,65536 216,3,I110 356,3,@437 437:O3|@9396,@439,@438 438:S7|746f53686f7274 439:S4|43617374 440:S23|505043434f4445434f4e5328292e746f51756164283129 441:C2,508|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000213b0000093998ffff7c8bc0385560f80140a20010800d00347c0803a64e8000217c8b0e707eec5dd741a3ffec3af70001947bfffc947bfffc389b00003b00000193040000389b00008303000093040004809b0004709601ff973bfffc94bbfffc80030004941bfffc80030008941bfffc8003000c941bfffc96fbfffc38b6000038970000807b00103c0002a1600033207c0803a64e80002182bb00003980000256a0f80140a20010800d00347c0803a64e8000217e95661541a3fff0947bfffc947bfffc3a7b00003a400001925300003a3b0000821b00149211000481fb000471ee01ff38ae000038940000807b00183c0002a1600033207c0803a64e800021815b0008398000045540f80140a20010800d00347c0803a64e8000217d2a661541a3fff0947bfffc947bfffc391b000038e0000190e8000038db000080bb001890a60004809b0004708301ff38a3000038890000807b00203c0002a1600033207c0803a64e800021833b0010398000065720f80140a20010800d00347c0803a64e8000217f19661541a3fff0947bfffc947bfffc3afb00003ac0000192d700003abb0000829b001c92950004827b0004727201ff38b2000038980000807b0028833b002c3c0002a1600033207c0903a67f2803a63b7b00384e800420|@460,1048575|168,3,@442 272,3,@442 376,3,@442 484,3,@442 442:C2,1168|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000218303000082f800002c17ffff4082001c973bfffc3c6002a1606337cc800d00287c0803a64e80002182d800048196fffc558c09fc6195000156abf80140a20010800d00347c0803a64e8000212c150001408000343e6002a06273c2743995ffff7e6ba8385560f80140a20010800d00347c0803a64e8000217e93661541a3fff0480000083a9500003a6000093994ffff7e6ba0385560f80140a20010800d00347c0803a64e8000217e6b0e707eac5dd741a3ffec3ab50001548bf80140a20010800d00347c0803a64e8000212c040001408000ec973bfffc3a8400003880ffff387400003c0002a06000fe6c7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a7d0004919d00003e4002a1625238109253000490730000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000926300043e2002a162313840922300003c0002a1600005347c0803a64e800021398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a1d0004919d0000907000083de002a061efc7ac91f000043dc002e061cea22491d0000038700000800d00287c0803a64e8000217c8ba838556bf80140a20010800d00347c0803a64e8000217c04a80040800044708b00014182000c3a8400004800001c973bfffc3c6002a1606330bc800d00287c0803a64e8000217cac0e707e8b0e707d9659ae386000017f2803a64e800020281700014182001c973bfffc3c6002a160633858800d00287c0803a64e8000213a6000073994ffff7e6ba0385560f80140a20010800d00347c0803a64e8000217e6b0e707e4c5dd741a3ffec3a520001548bf80140a20010800d00347c0803a64e8000212c0400014180000c3a200003480000083a2000012c1100034082000c3a04000048000024398000065480f80140a20010800d00347c0803a64e8000217e0c241141a3fff0973bfffc947bfffc949bfffc94bbfffc96bbfffc965bfffc38800009387000003f00000063184e08801800007c0803a64e800021398000025460f80140a20010800d00347c0803a64e8000217de3661541a3fff081db00007dcb7838556bf80140a20010800d00347c0803a64e8000217c0e78004081000c394e000048000008394f0000714b00014182000c392a0000480000183c6002a1606330bc800d00287c0803a64e80002138a0000138800003386900003f000000631841c8801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021391d0004919d00009068000438e0000190e800003d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e80002138dd0004919d000091060000947bfffc951bfffc38a6000038c000013885000080bb000c807b00183c0002a1600038947c0803a64e800021807b0014706b00014182000c3b230000480000183c6002a1606330bc800d00287c0803a64e800021831b000482fb00107eec0e707f2b0e707d9859ae82db001882bb000092b6000038600001829b001c7e8803a63b7b00204e800020|@459,1048575|52,3,@443 116,3,@180 260,3,@316 312,3,@445 368,3,@447 380,3,@325 436,3,@227 448,3,@9377 528,3,@437 584,3,@448 772,3,I109 888,3,@437 920,3,I11 1060,3,@450 1096,3,@437 443:O3|@9377,@227,@444 444:S42|637365675365743a2063616e2774206368616e6765206c6f636b656420636f646520736567656d656e74 445:O2|@446,0 446:S25|206f7574206f662072616e676520302e2e696e66696e697479 447:S15|637365675365743a20496e64657820 448:O3|@9377,@227,@449 449:S34|637365675365743a2063616e277420657874656e6420636f6465207365676d656e74 450:C2,1388|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002183030000807800002c0300014082052882e40000809700002c0400014082050082d800048196fffc558c09fc6195000156abf80140a20010800d00347c0803a64e8000212c150001408000343e6002a06273c2743995ffff7e6ba8385560f80140a20010800d00347c0803a64e8000217e93661541a3fff0480000083a950000827700048193fffc558c09fc6195000156abf80140a20010800d00347c0803a64e8000212c150001408000343e2002a06231c2743995ffff7e2ba8385560f80140a20010800d00347c0803a64e8000217e51661541a3fff0480000083a5500003a2000093994ffff7e2ba0385560f80140a20010800d00347c0803a64e8000217e2b0e707eac5dd741a3ffec3ab500013a8000093992ffff7e8b90385560f80140a20010800d00347c0803a64e8000217e8b0e707e2c5dd741a3ffec3a3100013a8000093986ffff7e8b30385560f80140a20010800d00347c0803a64e8000217e8b0e707e4c5dd741a3ffec3a520001967bfffc96dbfffc94bbfffc3985ffff7e2b28385560f80140a20010800d00347c0803a64e8000217ccc8c1141a3fff054abf80140a20010800d00347c0803a64e8000212c05000140800008480000287eab2838556bf80140a20010800d00347c0803a64e8000217c1528004180000848000168973bfffc96bbfffc3880ffff386500003c0002a06000fe6c7c0803a64e800021947bfffc3880ffff807b00043c0002a06000fe6c7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138bd0004919d0000388000019085000490650000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000090a300043f2002a163393e1c93230000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b1d0004919d00009078000482fb000092f80000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000930300043ec002a162d63e3892c300003c0002a1600005347c0803a64e800021398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213abd0004919d0000907500083e8002a06294c7ac929500043e6002e06273a2249275000038750000800d00287c0803a64e800021564bf80140a20010800d00347c0803a64e8000212c12000140800008480000287ccb9038556bf80140a20010800d00347c0803a64e8000217c0690004180000848000168973bfffc94dbfffc3880ffff387200003c0002a06000fe6c7c0803a64e800021947bfffc3880ffff807b00043c0002a06000fe6c7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138bd0004919d0000388000019085000490650000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000090a300043f2002a163393e1c93230000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b1d0004919d00009078000482fb000092f80000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000930300043ec002a162d63e5c92c300003c0002a1600005347c0803a64e800021398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213abd0004919d0000907500083e8002a06294c7ac929500043e6002e06273a2249275000038750000800d00287c0803a64e80002138b9000038800001387200003b1b00083c0002a160003e807c0803a64e8000217ca803a63b7b000c4e800020973bfffc3c6002a160633fe4800d00287c0803a64e800021973bfffc3c6002a160633fe4800d00287c0803a64e800021|@458,1048575|108,3,@180 204,3,@180 532,3,@316 560,3,@316 664,3,@451 764,3,@452 776,3,@325 832,3,@227 844,3,@9377 956,3,@316 984,3,@316 1088,3,@451 1188,3,@453 1200,3,@325 1256,3,@227 1268,3,@9377 1312,3,@454 1344,3,@456 1368,3,@456 451:S17|206f7574206f662072616e676520302e2e 452:S25|63736567436f70795365673a2042797465206c656e67746820 453:S25|63736567436f70795365673a2042797465206f666673657420 454:C2,284|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8fff87c8bbb78556bf80140a20010800d00347c0803a64e8000217c04b80040820010386000017f2803a64e800020708b00014182000c3ac4000048000020973bfffc3ac300003c6002a1606330bc800d00287c0803a64e80002182b8fffc7ecc0e707d7560ae556b083c61740001706b00014182000c3a63000048000020973bfffc3a6300003c6002a1606330bc800d00287c0803a64e80002182d800007e8c0e707e6b0e707d9659ae398000025480f80140a20010800d00347c0803a64e8000217e84661541a3fff0398000025460f80140a20010800d00347c0803a64e8000217e63661541a3fff038940000387300007f2803a64bfffef0|@455,1040387|104,3,@437 168,3,@437 455:S35|434f44455f5345472e63736567436f7079536567283429636f70794279746573283229 456:O3|@9377,@227,@457 457:S49|63736567436f70795365673a2063616e206f6e6c7920636f7079206265747765656e206279746520736567656d656e7473 458:S23|434f44455f5345472e63736567436f7079536567283429 459:S19|434f44455f5345472e63736567536574283329 460:S24|505043434f4445434f4e5328292e73657451756164283329 461:C2,312|2c0300074082001c38600019906400003860000190640004386000014e8000202c0300054082001c38600019906400003860000390640004386000014e8000202c0300014082001c38600019906400003860000590640004386000014e8000202c0300034082001c38600009906400003860000190640004386000014e8000202c03fffb4082001c38600009906400003860000390640004386000014e8000202c03fff94082001c38600009906400003860000590640004386000014e8000202c03fff74082001c3860001b906400003860000790640004386000014e8000202c0300094082001c3860000b906400003860000590640004386000014e8000202c03fffd4082001c3860000b906400003860000190640004386000014e8000203860001b906400003860000590640004386000014e800020|@462,524291| 462:S31|505043434f4445434f4e5328292e74657374546f4269426f50616972283229 463:C2,344|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000213af900003c0002a16000437c7c0803a64e800021708b00014182000c3ac400004800002096fbfffc3ac300003c6002a1606330bc800d00287c0803a64e80002170ab00014182000c3aa500004800002096fbfffc3aa300003c6002a1606330bc800d00287c0803a64e80002170cb00014182000c3a8600004800002096fbfffc3a8300003c6002a1606330bc800d00287c0803a64e800021546c10386186000156cce8fe558c003c618500017ca4337872c3000f546c2832619900017eb8cb78568cd1be558c003c6196000172d501ff7286007f54cc103861850001807b0004546c083a619900017f362b78829b00007e86b378398000043bbdffec7c1df04040a00010800d001c7c0803a64e80002138bd0004919d000090c5000c92a500089305000490850000386500007ee803a63b7b00084e800020|@466,1032207|36,3,@464 76,3,@437 120,3,@437 164,3,@437 464:C2,344|2c03ffed4082000c386000074e8000202c03000d4082000c3860000f4e8000202c03fff94082000c386000154e8000202c0300074082000c386000174e8000202c0300014082000c3860001d4e8000202c03ffff4082000c3860001f4e8000202c03fffb4082000c386000214e8000202c0300054082000c386000254e8000202c0300094082000c386000274e8000202c03fff14082000c3860002b4e8000202c03fff34082000c386000314e8000202c03000f4082000c386000334e8000202c0300154082000c386000354e8000202c03ffeb4082000c386000374e8000202c0300034082000c386000394e8000202c03fffd4082000c3860003b4e8000202c03fff74082000c3860003f4e8000202c03fff54082000c386000414e8000202c03000b4082000c386000454e8000202c03ffef4082000c386000494e8000202c0300134082000c3860004b4e8000203860004d4e800020|@465,524289| 465:S26|505043434f4445434f4e5328292e6f70546f53686f7274283129 466:S26|505043434f4445434f4e5328292e42666f726d51756164283629 467:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c8078ff844e800020973bfffc971bfffc80030000941bfffc806300044bffffbd398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b00009319000038790000833b00087f2803a63b7b000c4e800020|@468,786433| 468:S15|4c6973742e40283229617070283129 469:C2,440|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8ffe082d700003983ffff7ecb18385560f80140a20010800d00347c0803a64e8000217eb6661541a3fff03980000a56a0f80140a20010800d00347c0803a64e8000217ed5661541a3fff082b8ff842c1500014082000c82b8ffa84800004096bbfffc3a9900003a7800003a4300008073ffa83b1b00003c0002a1600047cc7c0803a64e8000213aa30000387200003b1300003b3400003b7b0004973bfffc971bfffc947bfffc949bfffc96dbfffc96bbfffc3ae000012c1500014082000c3ad70000480000483980000256e0f80140a20010800d00347c0803a64e8000217e97661541a3fff082b500043af40000800d00187c1b004040a00010800d00207c0803a64e8000214bffffb082bb000c7ecbab78556bf80140a20010800d00347c0803a64e8000217c16a80040820030829b000892b40000827b000492740004825b00009254000838600001809b00147c8803a63b7b00184e8000203980000256a0f80140a20010800d00347c0803a64e8000217e95661541a3fff0809b000838740000831b0010833b00147f2803a63b7b00184bfffe54|@471,1044483|152,3,@470 470:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c807800004e800020973bfffc971bfffc80030000941bfffc806300044bffffbd398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b00009319000038790000833b00087f2803a63b7b000c4e800020|@468,786433| 471:S42|505043434f4445434f4e5328292e636f7079436f64652833296765745072656c756465436f6465283229 472:O3|@9377,@227,@473 473:S37|63736567436f6e76657274546f436f64653a206e6f7420612062797465207365676d656e74 474:C2,656|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002183030000807800002c0300034082024c82f800048197fffc558c09fc6196000156cbf80140a20010800d00347c0803a64e8000212c160001408000343e8002a06294c2743996ffff7e8bb0385560f80140a20010800d00347c0803a64e8000217eb4661541a3fff0480000083ab60000548bf80140a20010800d00347c0803a64e8000212c04000140800008480000287eab2038556bf80140a20010800d00347c0803a64e8000217c152000408100084800016c973bfffc96bbfffc3a8400003880ffff387400003c0002a06000fe6c7c0803a64e800021947bfffc3880ffff807b00043c0002a06000fe6c7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a7d0004919d00003a4000019253000490730000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a3d0004919d0000927100043e0002a162103e1c92110000398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002139fd0004919d0000922f000481db000091cf0000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000091e300043d4002a1614a4b94914300003c0002a1600005347c0803a64e800021398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021393d0004919d0000906900083d0002a06108c7ac910900043ce002e060e7a22490e9000038690000800d00287c0803a64e800021708b00014182000c3aa400004800001c973bfffc3c6002a1606330bc800d00287c0803a64e80002156ab083a7cb7592e386000017f2803a64e800020973bfffc3c6002a160634bb0800d00287c0803a64e800021|@478,1048575|92,3,@180 232,3,@316 260,3,@316 364,3,@451 464,3,@475 476,3,@325 532,3,@227 544,3,@9377 592,3,@437 636,3,@476 475:S19|63736567507574576f72643a20496e64657820 476:O3|@9377,@227,@477 477:S41|63736567507574576f72643a206e6f7420616e20756e6c6f636b656420636f6465207365676d656e74 478:S23|434f44455f5345472e63736567507574576f7264283329 479:C2,516|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e300002c17000340820068973bfffc971bfffc80a300048078fff83c0002a160004e347c0803a64e80002182db000082b6ffc482950000398000025680f80140a20010800d00347c0803a64e8000217e6ca41141a3fff09275000038600001825b00047e4803a63b7b00084e8000202c17ffff4082016882c3000482b600008298ff743994ffff7eaba0385560f80140a20010800d00347c0803a64e8000217e75661541a3fff03a4000093992ffff7e6b90385560f80140a20010800d00347c0803a64e8000217e6b0e707e2c5dd741a3ffec3a3100018218ff6481f00000814f00002c0a00014082001c973bfffc3c6002a1606352b4800d00287c0803a64e80002181cf0004398000045620f80140a20010800d00347c0803a64e8000217d31661541a3fff0712b00014182000c390900004800001c973bfffc3c6002a1606330bc800d00287c0803a64e80002138f8000038c4000038880000386e00003f00000063185b48801800007c0803a64e800021973bfffc94fbfffc38a30000388600008067fff83c0002a160004e347c0803a64e80002180bb00008085ffc480640000398000025460f80140a20010800d00347c0803a64e8000217f2c1c1141a3fff09324000038600001831b00047f0803a63b7b00084e800020386000014e800020|@489,1048575|60,3,@480 272,3,@487 348,3,@437 384,3,I215 424,3,@480 480:C2,204|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000218303000c82f8000082c3001c82b6000072ab00014082000c829500004800001c973bfffc3c6002a160630a30800d00287c0803a64e8000213997ffff7c8bb8385560f80140a20010800d00347c0803a64e8000217ea4661541a3fff0388000093984ffff7eab20385560f80140a20010800d00347c0803a64e8000217eab0e707eec5dd741a3ffec3af7000138c0000138970000387400003c0002a160004f1c7c0903a67f2803a64e800420|@486,1048575|68,3,@341 184,3,@481 481:C2,716|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002183030000807800002c0300034082028882f800048197fffc558c09fc6196000156cbf80140a20010800d00347c0803a64e8000212c160001408000343e8002a06294c2743996ffff7e8bb0385560f80140a20010800d00347c0803a64e8000217eb4661541a3fff0480000083ab600003a8000093995ffff7e8ba8385560f80140a20010800d00347c0803a64e8000217e8b0e707ecc5dd741a3ffec3ad60001548bf80140a20010800d00347c0803a64e8000212c04000140800008480000287ecb2038556bf80140a20010800d00347c0803a64e8000217c162000408100084800016c973bfffc96bbfffc3a8400003880ffff387400003c0002a06000fe6c7c0803a64e800021947bfffc3880ffff807b00043c0002a06000fe6c7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a7d0004919d00003a4000019253000490730000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a3d0004919d0000927100043e0002a162103e1c92110000398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002139fd0004919d0000922f000481db000091cf0000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000091e300043d4002a1614a5204914300003c0002a1600005347c0803a64e800021398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021393d0004919d0000906900083d0002a06108c7ac910900043ce002e060e7a22490e9000038690000800d00287c0803a64e800021708b00014182000c3aa400004800001c973bfffc3c6002a1606330bc800d00287c0803a64e80002138950000387700003f000000631858a8801800007c0903a67f2803a64e800420973bfffc3c6002a160635224800d00287c0803a64e800021|@485,1048575|92,3,@180 280,3,@316 308,3,@316 412,3,@451 512,3,@482 524,3,@325 580,3,@227 592,3,@9377 640,3,@437 668,3,I194 696,3,@483 482:S23|63736567507574436f6e7374616e743a20496e64657820 483:O3|@9377,@227,@484 484:S45|63736567507574436f6e7374616e743a206e6f7420616e20756e6c6f636b656420636f6465207365676d656e74 485:S27|434f44455f5345472e63736567507574436f6e7374616e74283429 486:S28|505043434f4445434f4e5328292e636f6e73744c6162656c73283329 487:O3|@9377,@227,@488 488:S28|63736567416464723a206e6f74206120636f6465207365676d656e74 489:S36|505043434f4445434f4e5328292e636f7079436f6465283329707574436f6e7374283229 490:O3|@9377,@227,@491 491:S47|63736567436f6e76657274546f436f64653a206e6f7420616e20756e6c6f636b656420636f6465207365676d656e74 492:C2,148|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000218303003082f80000949bfffc947bfffc973bfffc2c1700014082001838600001809b00007c8803a63b7b000c4e80002080170004941bfffc807700003b1b000c3c0002a16000540c7c0803a64e80002182fb00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffffa4|@497,1048575|96,3,@493 493:C2,392|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e3000882d7000082a3001c8295000080030038941bfffc971bfffc947bfffc973bfffc969bfffc2c16000140820008480000508276000080160004941bfffc80930004807300003b1b00143c0002a1600055b07c0803a64e80002182db00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffffac827b0010825300002c120001408200c8823b0000722b00014082000c82110000480000183c6002a160630a30800d00287c0803a64e80002181f0000081cf00002c0e00034082007c961bfffc800f0004941bfffc38800005807b00003f00000063185968801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021395d0004919d0000813b0000912a00043900ffff910a000080fb0004914700003860000180db000c7cc803a63b7b001c4e8000203c6002a160635314800d00287c0803a64e80002138600001823b00047e2803a63b7b00144e800020|@496,1048575|108,3,@494 196,3,@341 252,3,I200 352,3,@490 494:C2,188|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e300002c1700014082008c82d8fffc82a300048296fffc8275000c8254000c7c13904040820068973bfffc971bfffc80b600008078fff83c0002a160004e347c0803a64e800021823b00008211000081f000003980000255e0f80140a20010800d00347c0803a64e8000217dcc7c1141a3fff091d0000038600001815b00047d4803a63b7b00084e800020386000014e800020386000014e800020|@495,1048575|88,3,@480 495:S49|505043434f4445434f4e5328292e6669784f7468657252656673283229666978526566283129707574436f6e7374283229 496:S38|505043434f4445434f4e5328292e6669784f7468657252656673283229666978526566283129 497:S29|505043434f4445434f4e5328292e6669784f7468657252656673283229 498:C2,780|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000213d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213b1d0004919d00003ae0000192f800003ad900003aa300003a8400003a7800003c80000060844668387400003f00000063184368801800007c0803a64e800021280300014182003096dbfffc96bbfffc94bbfffc94dbfffc967bfffc3860007f3b060000801800007c0803a64e8000214800002c96dbfffc96bbfffc94bbfffc94dbfffc967bfffc387400003b060000801800007c0803a64e8000213c6002a160635a44831b0004801800007c0803a64e800021825b000082320000821b00087e2b8038556bf80140a20010800d00347c0803a64e8000217c118000408001dc81f200003980000255e0f80140a20010800d00347c0803a64e8000217dcf661541a3fff091d2000039400009398affff7deb50385560f80140a20010800d00347c0803a64e8000217deb0e707d2c5dd741a3ffec39290001953bfffc809b0010386f00003c0002a160005a507c0803a64e80002181030000550c402c6187000180c300047ce5337880830008548c402c619900018303000c7f37c3783ec000023ad600013996ffff7cabb0385560f80140a20010800d00347c0803a64e8000217cab0e707eac5dd741a3ffec3ab500013997ffff7eabb8385560f80140a20010800d00347c0803a64e8000217e95661541a3fff0969bfffc38800003807b00043c0002a06000fe6c7c0803a64e800021831b000c801800007c0803a64e80002138600013831b000c801800007c0803a64e80002138800003807b00003c0002a06000fe6c7c0803a64e80002138a00061388000113c0002a160005f647c0803a64e800021831b000c801800007c0803a64e80002138600013831b000c801800007c0803a64e80002180bb000c809b0000807b00043c0002a1600061f87c0803a64e80002138600015831b000c801800007c0803a64e8000213b7b0008800d00187c1b004040a00010800d00207c0803a64e8000214bfffe003860000181fb00107de803a63b7b00144e800020|@600,1048575|96,3,I48 108,3,I24 220,3,@499 388,3,@500 444,2,65536 544,3,@316 604,3,@316 628,3,@505 692,3,@507 499:S2|3a0a 500:C2,496|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000213b0000093998ffff7c6bc0385560f80140a20010800d00347c0803a64e8000217c6b0e707eec5dd741a3ffec3af70001973bfffc949bfffc96fbfffc38970000807b00043c0002a160005c5c7c0803a64e800021947bfffc947bfffc3adb00003aa0000192b600003a9b000090740004827b0008398000025660f80140a20010800d00347c0803a64e8000217e53661541a3fff038920000807b000c3c0002a160005c5c7c0803a64e800021947bfffc947bfffc3a3b00003a0000019211000039fb0000906f000481db00103980000455c0f80140a20010800d00347c0803a64e8000217d4e661541a3fff0388a0000807b00143c0002a160005c5c7c0803a64e800021947bfffc947bfffc393b0000390000019109000038fb00009067000480db00183980000654c0f80140a20010800d00347c0803a64e8000217ca6661541a3fff038850000807b001c3c0002a160005c5c7c0803a64e800021947bfffc947bfffc389b00003b200001932400003b1b000090780004398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213afd0004919d000082db000492d7000c82bb000c92b70008829b001492970004827b001c9277000038770000825b00287e4803a63b7b002c4e800020|@504,1048575|100,3,@501 188,3,@501 276,3,@501 364,3,@501 501:C2,664|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002183030000807800048183fffc558c09fc6197000156ebf80140a20010800d00347c0803a64e8000212c170001408000343ea002a062b5c2743997ffff7eabb8385560f80140a20010800d00347c0803a64e8000217ed5661541a3fff0480000083ad700003aa000093996ffff7eabb0385560f80140a20010800d00347c0803a64e8000217eab0e707eec5dd741a3ffec3af70001548bf80140a20010800d00347c0803a64e8000212c040001418000647c8bb838556bf80140a20010800d00347c0803a64e8000217c04b80040800044708b00014182000c3ac400004800001c973bfffc3c6002a1606330bc800d00287c0803a64e8000217ecc0e707d6360ae556b083c616300017f2803a64e800020973bfffc96fbfffc3ac400003880ffff387600003c0002a06000fe6c7c0803a64e800021947bfffc3880ffff807b00043c0002a06000fe6c7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003a8000019295000490750000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a7d0004919d000092b300043e4002a162523e1c92530000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a3d0004919d000092710004821b000092110000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000922300043de002a161ef5f1091e300003c0002a1600005347c0803a64e800021398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002139dd0004919d0000906e00083d4002a0614ac7ac914e00043d2002e06129a224912e0000386e0000800d00287c0803a64e800021|@503,1048575|80,3,@180 260,3,@437 324,3,@316 352,3,@316 456,3,@451 556,3,@502 568,3,@325 624,3,@227 636,3,@9377 502:S15|637365674765743a20496e64657820 503:S19|434f44455f5345472e63736567476574283229 504:S24|505043434f4445434f4e5328292e67657451756164283229 505:C2,604|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021548bf80140a20010800d00347c0803a64e8000212c0400014181000c7f2803a64e800020706b00014182000c3b0000034800001081830000558c083c61980001708b000141820028548bf80140a20010800d00347c0803a64e8000212c0400014180000c3ae4000048000020973bfffc3ae300003c6002a06063a344800d00287c0803a64e8000217c18b8404180000c7f2803a64e8000202c17000340820010386500007f2803a64e8000207d98b810388c00013ad700103ab6fffe3ac000092c16000140a20010800d00307c0803a64e8000213996ffff3975ffff7d6b6396556b083c61740001973bfffc947bfffc94bbfffc971bfffc96fbfffc949bfffc97fbfffc3e6002a1627360ce967bfffc3a400001965bfffc3bfb000038a0000138800083387400003f000000631841c8801800007c0803a64e8000213a23000083fb0008480000183c6002a06063a344800d00287c0803a64e800021821b00107e0c0e7091910000963bfffc95fbfffc39c00001815b00147c0e5040408200084800003c392e0008811b000480fb00207cec0e707d2b0e707d8859ae39ce0002800d00187c1b004040a00010800d00207c0803a64e8000214bffffbc813b001c2c09000340820020390a000880fb000480db00247ccc0e707d0b0e707d8759ae48000030390a0008953bfffc38c8000080bb000838800009807b00283f00000063185928801800007c0803a64e800021807b00043f00000063184648801800007c0803a64e800021807b000480fb00287ce803a63b7b002c4e800020|@506,1048575|148,3,@78 292,3,$505+362 328,3,I11 360,3,@78 540,3,I198 564,3,I47 506:S20|537472696e674376742e7061644c656674283329 507:C2,3920|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021548bf80140a20010800d00347c0803a64e8000212c0400014180000c3b000003480000083b0000012c1800034082000c3ae40000480000283d800800398cfffe5480f80140a20010800d00347c0803a64e8000217eec241141a3fff0973bfffc947bfffc949bfffc94bbfffc3c80080038840001387700003f00000063184e08801800007c0803a64e8000212c03000740820134947bfffc947bfffc947bfffc389b0000807b00103c0002a1600071647c0803a64e8000213c6002a16063749c831b000c801800007c0803a64e80002138800003807b00003c0002a06000fe6c7c0803a64e80002138a00061388000053c0002a160005f647c0803a64e800021831b000c801800007c0803a64e80002138600059831b000c801800007c0803a64e8000213880ffff807b00043c0002a06000fe6c7c0803a64e80002138830000386000e53c0002a1600074a87c0803a64e800021831b000c801800007c0803a64e80002138600059831b000c801800007c0803a64e80002138800003807b00083c0002a06000fe6c7c0803a64e80002138a00061388000093c0002a160005f647c0803a64e800021831b000c833b0018801800007c0903a67f2803a63b7b001c4e8004202c03000f40820134947bfffc947bfffc947bfffc389b0000807b00103c0002a1600071647c0803a64e8000213c6002a1606376bc831b000c801800007c0803a64e80002138800003807b00003c0002a06000fe6c7c0803a64e80002138a00061388000053c0002a160005f647c0803a64e800021831b000c801800007c0803a64e80002138600059831b000c801800007c0803a64e8000213880ffff807b00043c0002a06000fe6c7c0803a64e80002138830000386000e53c0002a1600074a87c0803a64e800021831b000c801800007c0803a64e80002138600059831b000c801800007c0803a64e80002138800003807b00083c0002a06000fe6c7c0803a64e80002138a00061388000093c0002a160005f647c0803a64e800021831b000c833b0018801800007c0903a67f2803a63b7b001c4e8004202c03001540820134947bfffc947bfffc947bfffc389b0000807b00103c0002a1600071647c0803a64e8000213c6002a1606376cc831b000c801800007c0803a64e80002138800003807b00003c0002a06000fe6c7c0803a64e80002138a00061388000053c0002a160005f647c0803a64e800021831b000c801800007c0803a64e80002138600059831b000c801800007c0803a64e8000213880ffff807b00043c0002a06000fe6c7c0803a64e80002138830000386000e53c0002a1600074a87c0803a64e800021831b000c801800007c0803a64e80002138600059831b000c801800007c0803a64e80002138800003807b00083c0002a06000fe6c7c0803a64e80002138a00061388000093c0002a160005f647c0803a64e800021831b000c833b0018801800007c0903a67f2803a63b7b001c4e8004202c03001740820134947bfffc947bfffc947bfffc389b0000807b00103c0002a1600071647c0803a64e8000213c6002a1606376dc831b000c801800007c0803a64e80002138800003807b00003c0002a06000fe6c7c0803a64e80002138a00061388000053c0002a160005f647c0803a64e800021831b000c801800007c0803a64e80002138600059831b000c801800007c0803a64e8000213880ffff807b00043c0002a06000fe6c7c0803a64e80002138830000386000e53c0002a1600074a87c0803a64e800021831b000c801800007c0803a64e80002138600059831b000c801800007c0803a64e80002138800003807b00083c0002a06000fe6c7c0803a64e80002138a00061388000093c0002a160005f647c0803a64e800021831b000c833b0018801800007c0903a67f2803a63b7b001c4e8004202c03001d4082003080bb0000809b00043c6002a1606376ec833b000c3c0002a1600076f87c0903a67f2803a63b7b00104e8004202c03001f4082003080bb0000809b00043c6002a1606378b4833b000c3c0002a1600076f87c0903a67f2803a63b7b00104e8004202c030021408202a0947bfffc947bfffc947bfffc947bfffc947bfffc389b0000807b00183c0002a1600078c47c0803a64e80002182db000856cbf80140a20010800d00347c0803a64e8000212c1640014080000c3ab60000480000283d800001398c800056c0f80140a20010800d00347c0803a64e8000217eacb41141a3fff0829b000c2c14000140820028827b00102c130001408200103c6002a160637e40480000303c6002a160637e4c48000024827b00102c130001408200103c6002a160637e584800000c3c6002a160637e6496bbfffc831b0018801800007c0803a64e80002138800003807b00043c0002a06000fe6c7c0803a64e80002138a00061388000053c0002a160005f647c0803a64e800021831b0018801800007c0803a64e80002138600059831b0018801800007c0803a64e80002138800003807b00083c0002a06000fe6c7c0803a64e80002138a00061388000053c0002a160005f647c0803a64e800021831b0018801800007c0803a64e80002138600059831b0018801800007c0803a64e80002138800003807b000c3c0002a06000fe6c7c0803a64e80002138a00061388000093c0002a160005f647c0803a64e800021831b0018801800007c0803a64e800021825b001028120001418200283c6002a160637e74831b0018833b0024801800007c0903a67f2803a63b7b00284e8004203c6002a160637e9c831b0018801800007c0803a64e8000213a200009821b00003990ffff7e2b80385560f80140a20010800d00347c0803a64e8000217e2b0e707dec5dd741a3ffec39ef000181db0020398fffff7dcb78385560f80140a20010800d00347c0803a64e8000217d4e661541a3fff038800003386a00003c0002a06000fe6c7c0803a64e800021831b0018833b0024801800007c0903a67f2803a63b7b00284e8004202c030025408201f8947bfffc947bfffc947bfffc389b0000807b00103c0002a160007eac7c0803a64e80002182db00003ea001003ab500017ecba838556bf80140a20010800d00347c0803a64e8000217c16a8004080000c3a960000480000243d80020056c0f80140a20010800d00347c0803a64e8000217e8cb41141a3fff0827b00042c13000140820028825b00082c120001408200103c6002a1606381f4480000303c6002a16063820048000024825b00082c120001408200103c6002a16063820c4800000c3c6002a160638218969bfffc831b0010801800007c0803a64e80002138800003807b00043c0002a06000fe6c7c0803a64e80002138a000613880000d3c0002a160005f647c0803a64e800021831b0010801800007c0803a64e800021823b000828110001418200283c6002a160638224831b0010833b001c801800007c0903a67f2803a63b7b00204e8004203c6002a16063824c831b0010801800007c0803a64e8000213a00000981fb0000398fffff7e0b78385560f80140a20010800d00347c0803a64e8000217e0b0e707dcc5dd741a3ffec39ce0001815b0018398effff7d4b70385560f80140a20010800d00347c0803a64e8000217d2a661541a3fff038800003386900003c0002a06000fe6c7c0803a64e800021831b0010833b001c801800007c0903a67f2803a63b7b00204e8004202c03002740820028809b0000807b0004833b000c3c0002a16000825c7c0903a67f2803a63b7b00104e8004202c03002b40820200947bfffc947bfffc947bfffc947bfffc947bfffc947bfffc389b0000807b001c3c0002a160008a787c0803a64e80002182db001428160001418200103c6002a1606390e84800000c3c6002a1606390f8831b0018801800007c0803a64e8000213880ffff807b00043c0002a06000fe6c7c0803a64e80002138830000386000e53c0002a1600074a87c0803a64e800021831b0018801800007c0803a64e80002138600059831b0018801800007c0803a64e8000213880ffff807b00003c0002a06000fe6c7c0803a64e80002138830000386000e53c0002a1600074a87c0803a64e800021831b0018801800007c0803a64e80002138600059831b0018801800007c0803a64e80002138800003807b00083c0002a06000fe6c7c0803a64e80002138a00061388000053c0002a160005f647c0803a64e800021831b0018801800007c0803a64e80002138600059831b0018801800007c0803a64e80002138800003807b000c3c0002a06000fe6c7c0803a64e80002138a00061388000053c0002a160005f647c0803a64e800021831b0018801800007c0803a64e80002138600059831b0018801800007c0803a64e80002138800003807b00103c0002a06000fe6c7c0803a64e80002138a00061388000053c0002a160005f647c0803a64e800021831b0018833b0024801800007c0903a67f2803a63b7b00284e8004202c0300314082003080bb0000809b00043c6002a160639108833b000c3c0002a1600091147c0903a67f2803a63b7b00104e8004202c0300334082003080bb0000809b00043c6002a1606392cc833b000c3c0002a1600091147c0903a67f2803a63b7b00104e8004202c0300354082003080bb0000809b00043c6002a1606392d8833b000c3c0002a1600091147c0903a67f2803a63b7b00104e8004202c0300374082003080bb0000809b00043c6002a1606392e4833b000c3c0002a1600091147c0903a67f2803a63b7b00104e8004202c0300394082003080bb0000809b00043c6002a1606392f4833b000c3c0002a1600091147c0903a67f2803a63b7b00104e8004202c03003b4082003080bb0000809b00043c6002a160639304833b000c3c0002a1600091147c0903a67f2803a63b7b00104e8004202c03003f40820028809b0000807b0004833b000c3c0002a1600093147c0903a67f2803a63b7b00104e8004202c0300414082003080bb0000809b00043c6002a16063a760833b000c3c0002a16000a76c7c0903a67f2803a63b7b00104e8004202c0300454082003080bb0000809b00043c6002a16063a924833b000c3c0002a16000a76c7c0903a67f2803a63b7b00104e8004202c0300494082003080bb0000809b00043c6002a16063a930833b000c3c0002a16000a76c7c0903a67f2803a63b7b00104e8004202c03004b4082003080bb0000809b00043c6002a16063a93c833b000c3c0002a16000a76c7c0903a67f2803a63b7b00104e8004202c03004d4082003080bb0000809b00043c6002a16063a948833b000c3c0002a16000a76c7c0903a67f2803a63b7b00104e8004203c6002a160638a44831b0000833b000c801800007c0903a67f2803a63b7b00104e800420|@599,1048575|140,2,67108864 152,3,I109 200,3,@508 216,3,@510 248,3,@316 272,3,@505 332,3,@316 356,3,@511 416,3,@316 440,3,@505 512,3,@508 528,3,@513 560,3,@316 584,3,@505 644,3,@316 668,3,@511 728,3,@316 752,3,@505 824,3,@508 840,3,@514 872,3,@316 896,3,@505 956,3,@316 980,3,@511 1040,3,@316 1064,3,@505 1136,3,@508 1152,3,@515 1184,3,@316 1208,3,@505 1268,3,@316 1292,3,@511 1352,3,@316 1376,3,@505 1436,3,@516 1448,3,@517 1488,3,@519 1500,3,@517 1560,3,@520 1676,3,@522 1688,3,@523 1712,3,@524 1724,3,@525 1760,3,@316 1784,3,@505 1844,3,@316 1868,3,@505 1928,3,@316 1952,3,@505 1996,3,@526 2032,3,@527 2156,3,@316 2228,3,@528 2248,2,8388608 2352,3,@530 2364,3,@531 2388,3,@532 2400,3,@533 2436,3,@316 2460,3,@505 2504,3,@534 2540,3,@535 2664,3,@316 2728,3,@536 2792,3,@545 2820,3,@547 2832,3,@548 2864,3,@316 2888,3,@511 2948,3,@316 2972,3,@511 3032,3,@316 3056,3,@505 3116,3,@316 3140,3,@505 3200,3,@316 3224,3,@505 3284,3,@549 3296,3,@550 3336,3,@552 3348,3,@550 3388,3,@553 3400,3,@550 3440,3,@554 3452,3,@550 3492,3,@555 3504,3,@550 3544,3,@556 3556,3,@550 3600,3,@557 3640,3,@592 3652,3,@593 3692,3,@595 3704,3,@593 3744,3,@596 3756,3,@593 3796,3,@597 3808,3,@593 3848,3,@598 3860,3,@593 3884,3,@543 508:C2,760|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc949bfffc3c800800388400013f00000063184e28801800007c0803a64e8000212c0300014082000848000038546bf80140a20010800d00347c0803a64e8000212c0300014180000c3b200003480000083b20000128190003418200084800000c3b230000480000243d8008005460f80140a20010800d00347c0803a64e8000217f23661541a3fff0973bfffc3c80004038840001387900003f00000063184e28801800007c0803a64e8000212c0300014082000848000038546bf80140a20010800d00347c0803a64e8000212c0300014180000c3b200003480000083b20000128190003418200084800000c3b230000480000243d8000405460f80140a20010800d00347c0803a64e8000217f23661541a3fff0973bfffc3c80000238840001387900003f00000063184e28801800007c0803a64e8000212c0300014082000848000038546bf80140a20010800d00347c0803a64e8000212c0300014180000c3b200003480000083b20000128190003418200084800000c3b230000480000243d8000025460f80140a20010800d00347c0803a64e8000217f23661541a3fff0831b0004570bf80140a20010800d00347c0803a64e8000212c1800014180000c3ae00003480000083ae000012c1700034082000c3ad80000480000283d800040398cfffe5700f80140a20010800d00347c0803a64e8000217eccc41141a3fff0973bfffc3c80004038840001387600003f00000063184e08801800007c0803a64e80002182bb000456abf80140a20010800d00347c0803a64e8000212c1500014180000c3a800003480000083a8000012c1400034082000c3a750000480000283d800002398cfffe56a0f80140a20010800d00347c0803a64e8000217e6cac1141a3fff0947bfffc3c80000238840001387300003f00000063184e08801800007c0803a64e800021825b0010823b00009232000090720004821b0004921200083860000181fb00147de803a63b7b00184e800020|@509,1048575|40,2,67108864 48,3,I110 176,2,2097152 188,3,I110 316,2,65536 328,3,I110 552,2,2097152 564,3,I109 684,2,65536 696,3,I109 509:S27|505043434f4445434f4e5328292e73706c697444666f726d283229 510:S4|74776909 511:C2,492|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021706b00014182000c3b0000034800001081830000558c083c61980001708b00014182000c3ae000034800001081840000558c083c619700012c1800014082000c386400004e8000202c170001408200084e8000207d98ba143accffff3ab600103a95fffe3aa000092c15000140a20010800d00307c0803a64e8000213995ffff3974ffff7d6b6396556b083c61730001973bfffc947bfffc949bfffc971bfffc96fbfffc96dbfffc97fbfffc3e4002a1625275ba965bfffc3a200001963bfffc3bfb000038a0000138800083387300003f000000631841c8801800007c0803a64e8000213a03000083fb0008480000183c6002a06063a344800d00287c0803a64e8000217ecc0e709190000081db00142c0e000340820014815b001c7d4c0e70999000044800002c95dbfffc38c0000938b0000038800009807b00203f00000063185928801800007c0803a64e800021815b00102c0a00034082001c392e0008811b00187d0c0e707d2b0e707d9059ae48000030392e0008955bfffc38c9000038b0000038800009807b001c3f00000063185928801800007c0803a64e800021387000003f00000063184648801800007c0803a64e80002138700000811b00207d0803a63b7b00244e800020|@512,1048575|204,3,$511+274 240,3,I11 272,3,@78 348,3,I198 428,3,I198 452,3,I47 512:S4|5e283229 513:S6|6d756c6c6909 514:S6|636d706c6909 515:S5|636d706909 516:S4|61646469 517:C2,368|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc947bfffc947bfffc973bfffc947bfffc94bbfffc3b040000389b000c387800003c0002a1600071647c0803a64e800021807b0004831b0000801800007c0803a64e80002138600013831b0000801800007c0803a64e8000213880ffff807b000c3c0002a06000fe6c7c0803a64e80002138830000386000e53c0002a1600074a87c0803a64e800021831b0000801800007c0803a64e80002138600059831b0000801800007c0803a64e8000213880ffff807b00103c0002a06000fe6c7c0803a64e80002138830000386000e53c0002a1600074a87c0803a64e800021831b0000801800007c0803a64e80002138600059831b0000801800007c0803a64e80002138800003807b00143c0002a06000fe6c7c0803a64e80002138a00061388000093c0002a160005f647c0803a64e800021831b0000833b0008801800007c0903a67f2803a63b7b00184e800420|@518,1048575|68,3,@508 132,3,@316 156,3,@511 216,3,@316 240,3,@511 300,3,@316 324,3,@505 518:S37|505043434f4445434f4e5328292e7072696e7441726974686d6574696344666f726d283329 519:S5|6164646973 520:C2,1340|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc947bfffc949bfffc3c800800388400013f00000063184e28801800007c0803a64e8000212c0300014082000848000038546bf80140a20010800d00347c0803a64e8000212c0300014180000c3b200003480000083b20000128190003418200084800000c3b230000480000243d8008005460f80140a20010800d00347c0803a64e8000217f23661541a3fff0973bfffc3c80004038840001807b00083f00000063184e28801800007c0803a64e8000212c0300014082000848000038546bf80140a20010800d00347c0803a64e8000212c0300014180000c3b200003480000083b20000128190003418200084800000c3b230000480000243d8000405460f80140a20010800d00347c0803a64e8000217f23661541a3fff0973bfffc3c80000238840001387900003f00000063184e28801800007c0803a64e8000212c0300014082000848000038546bf80140a20010800d00347c0803a64e8000212c0300014180000c3b200003480000083b20000128190003418200084800000c3b230000480000243d8000025460f80140a20010800d00347c0803a64e8000217f23661541a3fff0973bfffc38800009807b00103f00000063184e28801800007c0803a64e8000212c0300014082000848000038546bf80140a20010800d00347c0803a64e8000212c0300014180000c3b200003480000083b20000128190003418200084800000c3b23000048000024398000085460f80140a20010800d00347c0803a64e8000217f23661541a3fff0973bfffc38800005387900003f00000063184e28801800007c0803a64e8000212c0300014082000848000038546bf80140a20010800d00347c0803a64e8000212c0300014180000c3b200003480000083b20000128190003418200084800000c3b23000048000024398000045460f80140a20010800d00347c0803a64e8000217f23661541a3fff0831b000c570bf80140a20010800d00347c0803a64e8000212c1800014180000c3ae00003480000083ae000012c1700034082000c3ad80000480000283d800040398cfffe5700f80140a20010800d00347c0803a64e8000217eccc41141a3fff0973bfffc3c80004038840001387600003f00000063184e08801800007c0803a64e80002182bb000c56abf80140a20010800d00347c0803a64e8000212c1500014180000c3a800003480000083a8000012c1400034082000c3a750000480000283d800002398cfffe56a0f80140a20010800d00347c0803a64e8000217e6cac1141a3fff0947bfffc3c80000238840001387300003f00000063184e08801800007c0803a64e800021825b000c564bf80140a20010800d00347c0803a64e8000212c1200014180000c3a200003480000083a2000012c1100034082000c3a12000048000024398000065640f80140a20010800d00347c0803a64e8000217e0c941141a3fff0947bfffc38800009387000003f00000063184e08801800007c0803a64e80002181fb000c55ebf80140a20010800d00347c0803a64e8000212c0f00014180000c39c000034800000839c000012c0e00034082000c394f0000480000243980000255e0f80140a20010800d00347c0803a64e8000217d4c7c1141a3fff0947bfffc38800005386a00003f00000063184e08801800007c0803a64e8000212c0300034082000c392000034800000839200001811b000c2c0800034082000c38e000034800000838e0000180db002080bb000890a60000809b000490860004807b0000906600089126000c90e6001038600001833b00287f2803a63b7b002c4e800020|@521,1048575|44,2,67108864 52,3,I110 180,2,2097152 192,3,I110 320,2,65536 332,3,I110 468,3,I110 604,3,I110 828,2,2097152 840,3,I109 960,2,65536 972,3,I109 1096,3,I109 1220,3,I109 521:S27|505043434f4445434f4e5328292e73706c697442666f726d283229 522:S3|626309 523:S4|62636c09 524:S4|62636109 525:S5|62636c6109 526:S29|093b212121206162736f6c7574652061646472657373696e67203f3f3f 527:S5|093b746f20 528:C2,776|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc949bfffc3c800800388400013f00000063184e28801800007c0803a64e8000212c0300014082000848000038546bf80140a20010800d00347c0803a64e8000212c0300014180000c3b200003480000083b20000128190003418200084800000c3b230000480000243d8008005460f80140a20010800d00347c0803a64e8000217f23661541a3fff0973bfffc38800009387900003f00000063184e28801800007c0803a64e8000212c0300014082000848000038546bf80140a20010800d00347c0803a64e8000212c0300014180000c3b200003480000083b20000128190003418200084800000c3b23000048000024398000085460f80140a20010800d00347c0803a64e8000217f23661541a3fff0973bfffc38800005387900003f00000063184e28801800007c0803a64e8000212c0300014082000848000038546bf80140a20010800d00347c0803a64e8000212c0300014180000c3b200003480000083b20000128190003418200084800000c3b23000048000024398000045460f80140a20010800d00347c0803a64e8000217f23661541a3fff0831b0004570bf80140a20010800d00347c0803a64e8000212c1800014180000c3ae00003480000083ae000012c1700034082000c3ad8000048000024398000065700f80140a20010800d00347c0803a64e8000217eccc41141a3fff0973bfffc38800009387600003f00000063184e08801800007c0803a64e80002182bb000456abf80140a20010800d00347c0803a64e8000212c1500014180000c3a800003480000083a8000012c1400034082000c3a750000480000243980000256a0f80140a20010800d00347c0803a64e8000217e6cac1141a3fff0947bfffc38800005387300003f00000063184e08801800007c0803a64e8000212c0300034082000c3a400003480000083a400001823b00042c1100034082000c3a000003480000083a00000181fb001081db000091cf0000924f0004920f000838600001815b00147d4803a63b7b00184e800020|@529,1048575|40,2,67108864 48,3,I110 184,3,I110 320,3,I110 548,3,I109 672,3,I109 529:S27|505043434f4445434f4e5328292e73706c697449666f726d283229 530:S2|6209 531:S3|626c09 532:S3|626109 533:S4|626c6109 534:S30|09093b212121206162736f6c7574652061646472657373696e67203f3f3f 535:S6|09093b746f20 536:C2,552|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc947bfffc947bfffc947bfffc947bfffc973bfffc949bfffc389b00083c0002a1600084a07c0803a64e800021833b00142c190021408200d4831b001828180001418200103c6002a160638a044800000c3c6002a160638a14831b0000801800007c0803a64e80002138800003807b00083c0002a06000fe6c7c0803a64e80002138a00061388000053c0002a160005f647c0803a64e800021831b0000801800007c0803a64e80002138600059831b0000801800007c0803a64e80002138800003807b000c3c0002a06000fe6c7c0803a64e80002138a00061388000053c0002a160005f647c0803a64e800021831b0000833b0004801800007c0903a67f2803a63b7b001c4e8004202c190421408200d4831b001828180001418200103c6002a160638a244800000c3c6002a160638a34831b0000801800007c0803a64e80002138800003807b00083c0002a06000fe6c7c0803a64e80002138a00061388000053c0002a160005f647c0803a64e800021831b0000801800007c0803a64e80002138600059831b0000801800007c0803a64e80002138800003807b000c3c0002a06000fe6c7c0803a64e80002138a00061388000053c0002a160005f647c0803a64e800021831b0000833b0004801800007c0903a67f2803a63b7b001c4e8004203c6002a160638a44831b0000833b0004801800007c0903a67f2803a63b7b001c4e800420|@544,1048575|64,3,@537 104,3,@539 116,3,@540 148,3,@316 172,3,@505 232,3,@316 256,3,@505 320,3,@541 332,3,@542 364,3,@316 388,3,@505 448,3,@316 472,3,@505 516,3,@543 537:C2,1316|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc949bfffc3c800800388400013f00000063184e28801800007c0803a64e8000212c0300014082000848000038546bf80140a20010800d00347c0803a64e8000212c0300014180000c3b200003480000083b20000128190003418200084800000c3b230000480000243d8008005460f80140a20010800d00347c0803a64e8000217f23661541a3fff0973bfffc3c80004038840001387900003f00000063184e28801800007c0803a64e8000212c0300014082000848000038546bf80140a20010800d00347c0803a64e8000212c0300014180000c3b200003480000083b20000128190003418200084800000c3b230000480000243d8000405460f80140a20010800d00347c0803a64e8000217f23661541a3fff0973bfffc3c80000238840001387900003f00000063184e28801800007c0803a64e8000212c0300014082000848000038546bf80140a20010800d00347c0803a64e8000212c0300014180000c3b200003480000083b20000128190003418200084800000c3b230000480000243d8000025460f80140a20010800d00347c0803a64e8000217f23661541a3fff0973bfffc38801001387900003f00000063184e28801800007c0803a64e8000212c0300014082000848000038546bf80140a20010800d00347c0803a64e8000212c0300014180000c3b200003480000083b20000128190003418200084800000c3b23000048000024398010005460f80140a20010800d00347c0803a64e8000217f23661541a3fff0973bfffc38800005387900003f00000063184e28801800007c0803a64e8000212c0300014082000848000038546bf80140a20010800d00347c0803a64e8000212c0300014180000c3b200003480000083b20000128190003418200084800000c3b23000048000024398000045460f80140a20010800d00347c0803a64e8000217f23661541a3fff0831b000c570bf80140a20010800d00347c0803a64e8000212c1800014180000c3ae00003480000083ae000012c1700034082000c3ad80000480000283d800040398cfffe5700f80140a20010800d00347c0803a64e8000217eccc41141a3fff0973bfffc3c80004038840001387600003f00000063184e08801800007c0803a64e80002182bb000c56abf80140a20010800d00347c0803a64e8000212c1500014180000c3a800003480000083a8000012c1400034082000c3a750000480000283d800002398cfffe56a0f80140a20010800d00347c0803a64e8000217e6cac1141a3fff0947bfffc3c80000238840001387300003f00000063184e08801800007c0803a64e800021825b000c564bf80140a20010800d00347c0803a64e8000212c1200014180000c3a200003480000083a2000012c1100034082000c3a1200004800002439800ffe5640f80140a20010800d00347c0803a64e8000217e0c941141a3fff0947bfffc38801001387000003f00000063184e08801800007c0803a64e80002181fb000c55ebf80140a20010800d00347c0803a64e8000212c0f00014180000c39c000034800000839c000012c0e00034082000c394f0000480000243980000255e0f80140a20010800d00347c0803a64e8000217d4c7c1141a3fff0947bfffc38800005386a00003f00000063184e08801800007c0803a64e800021813b000c2c0900034082000c39000003480000083900000180fb002080db000890c7000080bb000490a70004809b0000908700089067000c9107001038600001833b00247f2803a63b7b00284e800020|@538,1048575|40,2,67108864 48,3,I110 176,2,2097152 188,3,I110 316,2,65536 328,3,I110 464,3,I110 600,3,I110 824,2,2097152 836,3,I109 956,2,65536 968,3,I109 1092,3,I109 1216,3,I109 538:S27|505043434f4445434f4e5328292e73706c697458666f726d283229 539:S6|62636c726c09 540:S5|62636c7209 541:S7|62636374726c09 542:S6|626363747209 543:S7|3f3f3f3f3f3f09 544:S27|505043434f4445434f4e5328292e7072696e744578743139283229 545:C2,1584|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc949bfffc3c800800388400013f00000063184e28801800007c0803a64e8000212c0300014082000848000038546bf80140a20010800d00347c0803a64e8000212c0300014180000c3b200003480000083b20000128190003418200084800000c3b230000480000243d8008005460f80140a20010800d00347c0803a64e8000217f23661541a3fff0973bfffc3c80004038840001387900003f00000063184e28801800007c0803a64e8000212c0300014082000848000038546bf80140a20010800d00347c0803a64e8000212c0300014180000c3b200003480000083b20000128190003418200084800000c3b230000480000243d8000405460f80140a20010800d00347c0803a64e8000217f23661541a3fff0973bfffc3c80000238840001387900003f00000063184e28801800007c0803a64e8000212c0300014082000848000038546bf80140a20010800d00347c0803a64e8000212c0300014180000c3b200003480000083b20000128190003418200084800000c3b230000480000243d8000025460f80140a20010800d00347c0803a64e8000217f23661541a3fff0973bfffc38801001387900003f00000063184e28801800007c0803a64e8000212c0300014082000848000038546bf80140a20010800d00347c0803a64e8000212c0300014180000c3b200003480000083b20000128190003418200084800000c3b23000048000024398010005460f80140a20010800d00347c0803a64e8000217f23661541a3fff0973bfffc38800081387900003f00000063184e28801800007c0803a64e8000212c0300014082000848000038546bf80140a20010800d00347c0803a64e8000212c0300014180000c3b200003480000083b20000128190003418200084800000c3b23000048000024398000805460f80140a20010800d00347c0803a64e8000217f23661541a3fff0973bfffc38800005387900003f00000063184e28801800007c0803a64e8000212c0300014082000848000038546bf80140a20010800d00347c0803a64e8000212c0300014180000c3b200003480000083b20000128190003418200084800000c3b23000048000024398000045460f80140a20010800d00347c0803a64e8000217f23661541a3fff0831b0010570bf80140a20010800d00347c0803a64e8000212c1800014180000c3ae00003480000083ae000012c1700034082000c3ad80000480000283d800040398cfffe5700f80140a20010800d00347c0803a64e8000217eccc41141a3fff0973bfffc3c80004038840001387600003f00000063184e08801800007c0803a64e80002182bb001056abf80140a20010800d00347c0803a64e8000212c1500014180000c3a800003480000083a8000012c1400034082000c3a750000480000283d800002398cfffe56a0f80140a20010800d00347c0803a64e8000217e6cac1141a3fff0947bfffc3c80000238840001387300003f00000063184e08801800007c0803a64e800021825b0010564bf80140a20010800d00347c0803a64e8000212c1200014180000c3a200003480000083a2000012c1100034082000c3a1200004800002439800ffe5640f80140a20010800d00347c0803a64e8000217e0c941141a3fff0947bfffc38801001387000003f00000063184e08801800007c0803a64e80002181fb001055ebf80140a20010800d00347c0803a64e8000212c0f00014180000c39c000034800000839c000012c0e00034082000c394f0000480000243980007e55e0f80140a20010800d00347c0803a64e8000217d4c7c1141a3fff0947bfffc38800081386a00003f00000063184e08801800007c0803a64e800021813b0010552bf80140a20010800d00347c0803a64e8000212c0900014180000c3900000348000008390000012c0800034082000c38e9000048000024398000025520f80140a20010800d00347c0803a64e8000217cec4c1141a3fff0947bfffc38800005386700003f00000063184e08801800007c0803a64e80002180db00102c0600034082000c38a000034800000838a00001809b0028833b000c93240000831b00089304000482fb000492e4000882db000092c4000c9064001090a400143860000182bb002c7ea803a63b7b00304e800020|@546,1048575|40,2,67108864 48,3,I110 176,2,2097152 188,3,I110 316,2,65536 328,3,I110 464,3,I110 600,3,I110 736,3,I110 960,2,2097152 972,3,I109 1092,2,65536 1104,3,I109 1228,3,I109 1352,3,I109 1476,3,I109 546:S27|505043434f4445434f4e5328292e73706c69744d666f726d283229 547:S8|726c77696e6d2e09 548:S7|726c77696e6d09 549:S3|6f7269 550:C2,368|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc947bfffc947bfffc973bfffc947bfffc94bbfffc3b040000389b000c387800003c0002a1600071647c0803a64e800021807b0004831b0000801800007c0803a64e80002138600013831b0000801800007c0803a64e8000213880ffff807b00103c0002a06000fe6c7c0803a64e80002138830000386000e53c0002a1600074a87c0803a64e800021831b0000801800007c0803a64e80002138600059831b0000801800007c0803a64e8000213880ffff807b000c3c0002a06000fe6c7c0803a64e80002138830000386000e53c0002a1600074a87c0803a64e800021831b0000801800007c0803a64e80002138600059831b0000801800007c0803a64e80002138800003807b00143c0002a06000fe6c7c0803a64e80002138a00061388000093c0002a160005f647c0803a64e800021831b0000833b0008801800007c0903a67f2803a63b7b00184e800420|@551,1048575|68,3,@508 132,3,@316 156,3,@511 216,3,@316 240,3,@511 300,3,@316 324,3,@505 551:S34|505043434f4445434f4e5328292e7072696e744c6f676963616c44666f726d283329 552:S4|6f726973 553:S4|786f7269 554:S5|786f726973 555:S5|616e64692e 556:S6|616e6469732e 557:C2,2580|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc947bfffc947bfffc947bfffc947bfffc973bfffc947bfffc949bfffc389b000c3c0002a1600084a07c0803a64e800021833b00182c190001408201103c6002a160639d44831b0000801800007c0803a64e80002138800003807b000c3c0002a06000fe6c7c0803a64e80002138a00061388000053c0002a160005f647c0803a64e800021831b0000801800007c0803a64e80002138600059831b0000801800007c0803a64e8000213880ffff807b00103c0002a06000fe6c7c0803a64e80002138830000386000e53c0002a1600074a87c0803a64e800021831b0000801800007c0803a64e80002138600059831b0000801800007c0803a64e8000213880ffff807b00143c0002a06000fe6c7c0803a64e80002138830000386000e53c0002a1600074a87c0803a64e800021831b0000833b0008801800007c0903a67f2803a63b7b00204e8004202c190009408201103c6002a160639d50831b0000801800007c0803a64e80002138800003807b000c3c0002a06000fe6c7c0803a64e80002138a00061388000053c0002a160005f647c0803a64e800021831b0000801800007c0803a64e80002138600059831b0000801800007c0803a64e8000213880ffff807b00103c0002a06000fe6c7c0803a64e80002138830000386000e53c0002a1600074a87c0803a64e800021831b0000801800007c0803a64e80002138600059831b0000801800007c0803a64e8000213880ffff807b00143c0002a06000fe6c7c0803a64e80002138830000386000e53c0002a1600074a87c0803a64e800021831b0000833b0008801800007c0903a67f2803a63b7b00204e8004202c1900114082003080bb0000809b00043c6002a160639d5c833b00083c0002a160009d6c7c0903a67f2803a63b7b00204e8004202c19002f4082003080bb0000809b00043c6002a160639f50833b00083c0002a160009f5c7c0903a67f2803a63b7b00204e8004202c1900394082003080bb0000809b00043c6002a16063a11c833b00083c0002a16000a1287c0903a67f2803a63b7b00204e8004202c190041408201103c6002a16063a308831b0000801800007c0803a64e80002138800003807b000c3c0002a06000fe6c7c0803a64e80002138a00061388000053c0002a160005f647c0803a64e800021831b0000801800007c0803a64e80002138600059831b0000801800007c0803a64e8000213880ffff807b00103c0002a06000fe6c7c0803a64e80002138830000386000e53c0002a1600074a87c0803a64e800021831b0000801800007c0803a64e80002138600059831b0000801800007c0803a64e8000213880ffff807b00143c0002a06000fe6c7c0803a64e80002138830000386000e53c0002a1600074a87c0803a64e800021831b0000833b0008801800007c0903a67f2803a63b7b00204e8004202c1900af4082003080bb0000809b00043c6002a16063a318833b00083c0002a160009f5c7c0903a67f2803a63b7b00204e8004202c19012f4082003080bb0000809b00043c6002a16063a324833b00083c0002a160009f5c7c0903a67f2803a63b7b00204e8004202c1901af4082003080bb0000809b00043c6002a16063a330833b00083c0002a160009f5c7c0903a67f2803a63b7b00204e8004202c1902154082003080bb0000809b00043c6002a16063a33c833b00083c0002a160009d6c7c0903a67f2803a63b7b00204e8004202c1902794082003080bb0000809b00043c6002a16063a348833b00083c0002a16000a1287c0903a67f2803a63b7b00204e8004202c1902a740820134831b00142c1800014082010482fb00102c170011408200683c6002a16063a354831b0000801800007c0803a64e8000213880ffff807b000c3c0002a06000fe6c7c0803a64e80002138830000386000e53c0002a1600074a87c0803a64e800021831b0000833b0008801800007c0903a67f2803a63b7b00204e8004202c170013408200683c6002a16063a364831b0000801800007c0803a64e8000213880ffff807b000c3c0002a06000fe6c7c0803a64e80002138830000386000e53c0002a1600074a87c0803a64e800021831b0000833b0008801800007c0903a67f2803a63b7b00204e8004203b1b001c3c0002a16000a3747c0803a64e80002182db00087ec803a63b7b00204e8000203b1b001c3c0002a16000a3747c0803a64e80002182fb00087ee803a63b7b00204e8000202c1903794082003080bb0000809b00043c6002a16063a528833b00083c0002a16000a1287c0903a67f2803a63b7b00204e8004202c1903a740820134831b00142c1800014082010482fb00102c170011408200683c6002a16063a534831b0000801800007c0803a64e8000213880ffff807b000c3c0002a06000fe6c7c0803a64e80002138830000386000e53c0002a1600074a87c0803a64e800021831b0000833b0008801800007c0903a67f2803a63b7b00204e8004202c170013408200683c6002a16063a544831b0000801800007c0803a64e8000213880ffff807b000c3c0002a06000fe6c7c0803a64e80002138830000386000e53c0002a1600074a87c0803a64e800021831b0000833b0008801800007c0903a67f2803a63b7b00204e8004203b1b001c3c0002a16000a5547c0803a64e80002182db00087ec803a63b7b00204e8000203b1b001c3c0002a16000a5547c0803a64e80002182fb00087ee803a63b7b00204e8000202c1904114082003080bb0000809b00043c6002a16063a6e0833b00083c0002a160009d6c7c0903a67f2803a63b7b00204e8004202c1906154082003080bb0000809b00043c6002a16063a6f0833b00083c0002a160009d6c7c0903a67f2803a63b7b00204e8004202c190671408201103c6002a16063a6fc831b0000801800007c0803a64e8000213880ffff807b00103c0002a06000fe6c7c0803a64e80002138830000386000e53c0002a1600074a87c0803a64e800021831b0000801800007c0803a64e80002138600059831b0000801800007c0803a64e8000213880ffff807b000c3c0002a06000fe6c7c0803a64e80002138830000386000e53c0002a1600074a87c0803a64e800021831b0000801800007c0803a64e80002138600059831b0000801800007c0803a64e80002138800003807b00143c0002a06000fe6c7c0803a64e80002138a00061388000053c0002a160005f647c0803a64e800021831b0000833b0008801800007c0903a67f2803a63b7b00204e8004202c1901d74082003080bb0000809b00043c6002a16063a70c833b00083c0002a160009d6c7c0903a67f2803a63b7b00204e8004202c1905d74082003080bb0000809b00043c6002a16063a71c833b00083c0002a160009d6c7c0903a67f2803a63b7b00204e8004202c1903974082003080bb0000809b00043c6002a16063a72c833b00083c0002a160009d6c7c0903a67f2803a63b7b00204e8004203c6002a160638a44831b0000833b0008801800007c0903a67f2803a63b7b00204e800420|@591,1048575|68,3,@537 96,3,@558 128,3,@316 152,3,@505 212,3,@316 236,3,@511 296,3,@316 320,3,@511 372,3,@559 404,3,@316 428,3,@505 488,3,@316 512,3,@511 572,3,@316 596,3,@511 656,3,@560 668,3,@561 708,3,@563 720,3,@564 760,3,@566 772,3,@567 804,3,@569 836,3,@316 860,3,@505 920,3,@316 944,3,@511 1004,3,@316 1028,3,@511 1088,3,@570 1100,3,@564 1140,3,@571 1152,3,@564 1192,3,@572 1204,3,@564 1244,3,@573 1256,3,@561 1296,3,@574 1308,3,@567 1364,3,@575 1396,3,@316 1420,3,@511 1472,3,@576 1504,3,@316 1528,3,@511 1576,3,@577 1612,3,@577 1660,3,@580 1672,3,@567 1728,3,@581 1760,3,@316 1784,3,@511 1836,3,@582 1868,3,@316 1892,3,@511 1940,3,@583 1976,3,@583 2024,3,@585 2036,3,@561 2076,3,@586 2088,3,@561 2120,3,@587 2152,3,@316 2176,3,@511 2236,3,@316 2260,3,@511 2320,3,@316 2344,3,@505 2404,3,@588 2416,3,@561 2456,3,@589 2468,3,@561 2508,3,@590 2520,3,@561 2544,3,@543 558:S4|636d7009 559:S3|747709 560:S5|7375626663 561:C2,408|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc947bfffc947bfffc947bfffc947bfffc973bfffc947bfffc94bbfffc3b040000389b000c387800003c0002a1600084a07c0803a64e800021807b0004831b0000801800007c0803a64e80002182fb001c28170001418200183860005d831b0000801800007c0803a64e80002138600013831b0000801800007c0803a64e8000213880ffff807b000c3c0002a06000fe6c7c0803a64e80002138830000386000e53c0002a1600074a87c0803a64e800021831b0000801800007c0803a64e80002138600059831b0000801800007c0803a64e8000213880ffff807b00103c0002a06000fe6c7c0803a64e80002138830000386000e53c0002a1600074a87c0803a64e800021831b0000801800007c0803a64e80002138600059831b0000801800007c0803a64e8000213880ffff807b00143c0002a06000fe6c7c0803a64e80002138830000386000e53c0002a1600074a87c0803a64e800021831b0000833b0008801800007c0903a67f2803a63b7b00204e800420|@562,1048575|76,3,@537 172,3,@316 196,3,@511 256,3,@316 280,3,@511 340,3,@316 364,3,@511 562:S37|505043434f4445434f4e5328292e7072696e7441726974686d6574696358666f726d283329 563:S4|6c777a78 564:C2,376|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc947bfffc947bfffc947bfffc947bfffc973bfffc947bfffc94bbfffc3b040000389b000c387800003c0002a1600084a07c0803a64e800021807b0004831b0000801800007c0803a64e80002138600013831b0000801800007c0803a64e8000213880ffff807b000c3c0002a06000fe6c7c0803a64e80002138830000386000e53c0002a1600074a87c0803a64e800021831b0000801800007c0803a64e80002138600059831b0000801800007c0803a64e8000213880ffff807b00103c0002a06000fe6c7c0803a64e80002138830000386000e53c0002a1600074a87c0803a64e800021831b0000801800007c0803a64e80002138600059831b0000801800007c0803a64e8000213880ffff807b00143c0002a06000fe6c7c0803a64e80002138830000386000e53c0002a1600074a87c0803a64e800021831b0000833b0008801800007c0903a67f2803a63b7b00204e800420|@565,1048575|76,3,@537 140,3,@316 164,3,@511 224,3,@316 248,3,@511 308,3,@316 332,3,@511 565:S34|505043434f4445434f4e5328292e7072696e7453746f7261676558666f726d283329 566:S3|616e64 567:C2,408|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc947bfffc947bfffc947bfffc947bfffc973bfffc947bfffc94bbfffc3b040000389b000c387800003c0002a1600084a07c0803a64e800021807b0004831b0000801800007c0803a64e80002182fb001c28170001418200183860005d831b0000801800007c0803a64e80002138600013831b0000801800007c0803a64e8000213880ffff807b00103c0002a06000fe6c7c0803a64e80002138830000386000e53c0002a1600074a87c0803a64e800021831b0000801800007c0803a64e80002138600059831b0000801800007c0803a64e8000213880ffff807b000c3c0002a06000fe6c7c0803a64e80002138830000386000e53c0002a1600074a87c0803a64e800021831b0000801800007c0803a64e80002138600059831b0000801800007c0803a64e8000213880ffff807b00143c0002a06000fe6c7c0803a64e80002138830000386000e53c0002a1600074a87c0803a64e800021831b0000833b0008801800007c0903a67f2803a63b7b00204e800420|@568,1048575|76,3,@537 172,3,@316 196,3,@511 256,3,@316 280,3,@511 340,3,@316 364,3,@511 568:S34|505043434f4445434f4e5328292e7072696e744c6f676963616c58666f726d283329 569:S5|636d706c09 570:S4|6c627a78 571:S4|73747778 572:S4|73746278 573:S3|616464 574:S3|786f72 575:S5|6d666c7209 576:S6|6d6663747209 577:C2,352|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc3c6002a16063a4f08318ffe4801800007c0803a64e800021833b00008019ffe4941bfffc3880ffff8079fff03c0002a06000fe6c7c0803a64e80002138830000386000e53c0002a1600074a87c0803a64e800021831b0000801800007c0803a64e800021831b0004386000598318ffe4801800007c0803a64e80002182fb00048017ffe4941bfffc388000038077fff43c0002a06000fe6c7c0803a64e80002138a00061388000053c0002a160005f647c0803a64e800021831b0000801800007c0803a64e80002182db0008386000598316ffe4801800007c0803a64e80002182bb00088015ffe4941bfffc388000038075fff83c0002a06000fe6c7c0803a64e80002138a00061388000053c0002a160005f647c0803a64e800021831b0000833b0010801800007c0903a67f2803a63b7b00144e800420|@579,1048575|40,3,@578 84,3,@316 108,3,@511 184,3,@316 208,3,@505 284,3,@316 308,3,@505 578:S6|6d6673707209 579:S29|505043434f4445434f4e5328292e7072696e7445787433312832292f33 580:S2|6f72 581:S5|6d746c7209 582:S6|6d7463747209 583:C2,352|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc3c6002a16063a6d08318ffe4801800007c0803a64e800021833b00008019ffe4941bfffc3880ffff8079fff03c0002a06000fe6c7c0803a64e80002138830000386000e53c0002a1600074a87c0803a64e800021831b0000801800007c0803a64e800021831b0004386000598318ffe4801800007c0803a64e80002182fb00048017ffe4941bfffc388000038077fff43c0002a06000fe6c7c0803a64e80002138a00061388000053c0002a160005f647c0803a64e800021831b0000801800007c0803a64e80002182db0008386000598316ffe4801800007c0803a64e80002182bb00088015ffe4941bfffc388000038075fff83c0002a06000fe6c7c0803a64e80002138a00061388000053c0002a160005f647c0803a64e800021831b0000833b0010801800007c0903a67f2803a63b7b00144e800420|@579,1048575|40,3,@584 84,3,@316 108,3,@511 184,3,@316 208,3,@505 284,3,@316 308,3,@505 584:S6|6d7473707209 585:S6|73756266636f 586:S4|6164646f 587:S6|737261776909 588:S5|6d756c6c77 589:S6|6d756c6c776f 590:S5|6469767775 591:S27|505043434f4445434f4e5328292e7072696e744578743331283229 592:S3|6c777a 593:C2,368|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc947bfffc947bfffc973bfffc947bfffc94bbfffc3b040000389b000c387800003c0002a1600071647c0803a64e800021807b0004831b0000801800007c0803a64e80002138600013831b0000801800007c0803a64e8000213880ffff807b000c3c0002a06000fe6c7c0803a64e80002138830000386000e53c0002a1600074a87c0803a64e800021831b0000801800007c0803a64e80002138600059831b0000801800007c0803a64e8000213880ffff807b00103c0002a06000fe6c7c0803a64e80002138830000386000e53c0002a1600074a87c0803a64e800021831b0000801800007c0803a64e80002138600059831b0000801800007c0803a64e80002138800003807b00143c0002a06000fe6c7c0803a64e80002138a00061388000093c0002a160005f647c0803a64e800021831b0000833b0008801800007c0903a67f2803a63b7b00184e800420|@594,1048575|68,3,@508 132,3,@316 156,3,@511 216,3,@316 240,3,@511 300,3,@316 324,3,@505 594:S34|505043434f4445434f4e5328292e7072696e7453746f7261676544666f726d283329 595:S3|6c627a 596:S3|737477 597:S4|73747775 598:S3|737462 599:S27|505043434f4445434f4e5328292e7072696e74496e737472283329 600:S26|505043434f4445434f4e5328292e7072696e74436f6465283429 601:S16|526567697374657220736574203d205b 602:S3|5d0a0a 603:S25|505043434f4445434f4e5328292e636f7079436f6465283329 604:O2|@605,@314 605:C2,456|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021546bf80140a20010800d00347c0803a64e8000212c03000741800048546bf80140a20010800d00347c0803a64e8000212c0300154181002c398000065460f80140a20010800d00347c0803a64e8000217c6c1c1141a3fff07f2803a64e800020546bf80140a20010800d00347c0803a64e8000212c03001d41800048546bf80140a20010800d00347c0803a64e8000212c0300334181002c3980000c5460f80140a20010800d00347c0803a64e8000217c6c1c1141a3fff07f2803a64e800020973bfffc971bfffc3880ffff3c0002a06000fe6c7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d00003b0000019319000490790000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000932300043ee002a162f7abd492e300003c0002a1600005347c0803a64e80002182db000082b6000482950004398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a7d0004919d0000907300083e4002a06252c7ac92530004823400009233000038730000800d00287c0803a64e800021|@607,1048575|236,3,@316 340,3,@606 352,3,@325 420,3,@227 606:S26|6e5265673a20426164207265676973746572206e756d62657220 607:S21|505043434f4445434f4e5328292e6e526567283129 608:O6|@610,@618,@625,@314,@631,@609 609:O2|@637,@314 610:C2,768|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e300002c1700014082017082c300043996ffff7c8bb0385560f80140a20010800d00347c0803a64e8000217eac241141a3fff056abf80140a20010800d00347c0803a64e8000212c15c0014180004c56abf80140a20010800d00347c0803a64e8000212c15400140800030973bfffc971bfffc94bbfffc96dbfffc3875000083180008801800007c0803a64e8000213a83000048000068973bfffc8298000c82740004398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a5d0004919d00003e2002a16231af5c923200083e0002a06210c7ac9212000481f3000091f2000081c3000438720000800d00287c0803a64e80002139540000809b0004807b00003c0002a16000af807c0803a64e800021813b0004955bfffc80890004807b00043c0002a160005a507c0803a64e800021811b000c809b000083080004801800007c0803a64e80002180fb000880a70004809b0004833b00103c0002a1600031087c0903a67f2803a63b7b00144e80042082c300043996ffff7c8bb0385560f80140a20010800d00347c0803a64e8000217eac241141a3fff03e80ff003a9400017e8ba838556bf80140a20010800d00347c0803a64e8000217c14a800418100583e6001003a7300017eab9838556bf80140a20010800d00347c0803a64e8000217c15980040800030973bfffc971bfffc94bbfffc96dbfffc3875000083180014801800007c0803a64e8000213a43000048000068973bfffc8278000c82530004398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a3d0004919d00003e0002a16210b194921100083de002a061efc7ac91f1000481d2000091d100008143000438710000800d00287c0803a64e800021823b0004965bfffc80910004807b00043c0002a160005a507c0803a64e800021821b000c809b000083100010801800007c0803a64e80002181fb000880af0004809b0004833b00103c0002a1600031087c0903a67f2803a63b7b00144e800420|@617,1048575|232,3,@611 244,3,@227 296,3,@612 328,3,@500 384,3,@441 448,2,-8388608 488,2,8388608 620,3,@616 632,3,@227 688,3,@500 744,3,@441 611:S28|6a756d7020746f6f20666172202831342d626974206f666673657429 612:C2,112|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021949bfffc947bfffc830400443ee040003af7ffff92f8000082c400148076000039d900003b1b00043c0002a16000b00c7c0803a64e8000218324001490790000386000017dc803a63b7b00084e800020|@615,1048323|44,2,536870911 72,3,@613 613:C2,276|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e80002082e3000082d7000082b600002c15ffff4082000c806300044bffffc08298fffc827600047e8b9b78556bf80140a20010800d00347c0803a64e8000217c14980040820010806300047f2803a64bffff8c8258000082320044821100007e6b8038556bf80140a20010800d00347c0803a64e8000217c138000408000109271000039e000014800000839e00001973bfffc971bfffc96fbfffc806300044bffff35398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002139fd0004919d0000906f0004807b0000906f0000386f0000833b00087f2803a63b7b000c4e800020|@614,1048065| 614:S42|505043434f4445434f4e5328292e72656d6f76654c6162656c28322972656d6f7665456e747279283129 615:S28|505043434f4445434f4e5328292e72656d6f76654c6162656c283229 616:S28|6a756d7020746f6f20666172202832342d626974206f666673657429 617:S34|505043434f4445434f4e5328292e7265616c6c7946697875704272616e6368283329 618:O2|@619,@314 619:C2,2056|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e3000056ebf80140a20010800d00347c0803a64e8000212c1700014180000c3ac00003480000083ac000012c1600034082000c3ab70000480000243980000656e0f80140a20010800d00347c0803a64e8000217eacbc1141a3fff0973bfffc971bfffc947bfffc949bfffc96fbfffc80030004941bfffc80030008941bfffc8003000c941bfffc38800009387500003f00000063184e08801800007c0803a64e800021947bfffc38800009807b00103f00000063184e28801800007c0803a64e8000212c0300014082000848000038546bf80140a20010800d00347c0803a64e8000212c0300014180000c3a800003480000083a80000128140003418200084800000c3a83000048000024398000085460f80140a20010800d00347c0803a64e8000217e83661541a3fff03a6000113993ffff7e8b98385560f80140a20010800d00347c0803a64e8000217e8b0e707e4c5dd741a3ffec3a520001823b000c562bf80140a20010800d00347c0803a64e8000212c1100014180000c3a000003480000083a0000012c1000034082000c39f10000480000243980003e5620f80140a20010800d00347c0803a64e8000217dec8c1141a3fff0965bfffc38800041386f00003f00000063184e08801800007c0803a64e80002181db00003983ffff7dcb18385560f80140a20010800d00347c0803a64e8000217d4e661541a3fff0955bfffc38800041807b00143f00000063184e28801800007c0803a64e8000212c0300014082000848000038546bf80140a20010800d00347c0803a64e8000212c0300014180000c39200003480000083920000128090003418200084800000c3923000048000024398000405460f80140a20010800d00347c0803a64e8000217d23661541a3fff0811b001038e000813987ffff7d0b38385560f80140a20010800d00347c0803a64e8000217d0b0e707ccc5dd741a3ffec38c6000180bb000c54abf80140a20010800d00347c0803a64e8000212c0500014180000c3880000348000008388000012c0400034082000c38650000480000243980000654a0f80140a20010800d00347c0803a64e8000217c6c2c1141a3fff0953bfffc94dbfffc388000093f00000063184e08801800007c0803a64e800021833b00003983ffff7f2b18385560f80140a20010800d00347c0803a64e8000217f19661541a3fff0971bfffc38800009807b00183f00000063184e28801800007c0803a64e8000212c0300014082000848000038546bf80140a20010800d00347c0803a64e8000212c0300014180000c3ae00003480000083ae0000128170003418200084800000c3ae3000048000024398000085460f80140a20010800d00347c0803a64e8000217ee3661541a3fff03860fffb3c0002a16000437c7c0803a64e80002182db00147ecb1b78556bf80140a20010800d00347c0803a64e8000217c161800408202b482bb00002c150001408202a82c170001408202a0829b000c568bf80140a20010800d00347c0803a64e8000212c14000141800028568bf80140a20010800d00347c0803a64e8000212c1400414080000c3a740000480000ec3880ffff387400003c0002a06000fe6c7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a7d0004919d00003e4002a16252ba149253000490730000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000926300043e2002a16231ba48922300003c0002a1600005347c0803a64e800021821b003081f0000481cf0004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021395d0004919d0000906a00083d2002a06129c7ac912a0004810e0000910a0000386a0000800d00287c0803a64e800021825b0008564bf80140a20010800d00347c0803a64e8000212c12000141800028564bf80140a20010800d00347c0803a64e8000212c1200414080000c3a320000480000f0967bfffc3880ffff387200003c0002a06000fe6c7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a3d0004919d00003e0002a16210ba149211000490710000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000922300043de002a161efba4891e300003c0002a1600005347c0803a64e80002181db0034814e0004812a0004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021391d0004919d0000906800083ce002a060e7c7ac90e8000480c9000090c8000038680000800d00287c0803a64e8000213a00000181fb0034921b003439c0000191db003080db002838b10000389300003860fffb3b2f00003c0002a1600042087c0903a67f2803a63b7b00304e80042082bb00308295000482740004825b002c82320000562c402c6190000181f200047e0e7b7881520008554c402c618900018112000c7d2743783cc0000238c600013986ffff7dcb30385560f80140a20010800d00347c0803a64e8000217dcb0e707cac5dd741a3ffec38a500013987ffff7cab38385560f80140a20010800d00347c0803a64e8000217c85661541a3fff080130000941bfffc386400003880ffff3c0002a06000fe6c7c0803a64e800021388300003c6002a16063ba643c0002a1600074a87c0803a64e800021398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213b3d0004919d0000907900083f0002a06318c7ac9319000482fb000092f9000038790000800d00287c0803a64e800021|@624,1048575|176,3,I109 208,3,I110 484,3,I109 556,3,I110 836,3,I109 908,3,I110 1036,3,@464 1184,3,@316 1236,3,@620 1292,3,@622 1304,3,@325 1372,3,@227 1488,3,@316 1540,3,@620 1596,3,@622 1608,3,@325 1676,3,@227 1752,3,@463 1832,2,65536 1936,3,@316 1956,3,@623 1964,3,@511 2020,3,@227 620:O2|@621,0 621:S32|20696e746f206120352d62697420756e7369676e656420696d6d656469617465 622:S20|696e74353a2063616e277420636f6e7665727420 623:S29|6669787570436f6e644272616e63683a2063616e277420666978757020 624:S32|505043434f4445434f4e5328292e6669787570436f6e644272616e6368283229 625:O2|@626,@314 626:C2,408|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021546bf80140a20010800d00347c0803a64e8000212c03c00141800074546bf80140a20010800d00347c0803a64e8000212c03400140800058546bf80140a20010800d00347c0803a64e8000212c030001408000343d800001398c80005460f80140a20010800d00347c0803a64e8000217f03661541a3fff0387800007f2803a64e8000207f2803a64e800020973bfffc971bfffc3880ffff3c0002a06000fe6c7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d00003f0002a16318bc749319000490790000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000932300043ee002a162f7bca892e300003c0002a1600005347c0803a64e80002182db000082b6000482950004398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a7d0004919d0000907300083e4002a06252c7ac92530004823400009233000038730000800d00287c0803a64e800021|@630,1048575|184,3,@316 236,3,@627 292,3,@629 304,3,@325 372,3,@227 627:O2|@628,0 628:S31|20696e746f20612031342d626974207369676e656420696d6d656469617465 629:S21|696e7431343a2063616e277420636f6e7665727420 630:S22|505043434f4445434f4e5328292e696e743134283129 631:O2|@632,@314 632:C2,1264|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e3000056ebf80140a20010800d00347c0803a64e8000212c1700014180000c3ac00003480000083ac000012c1600034082000c3ab70000480000243980000656e0f80140a20010800d00347c0803a64e8000217eacbc1141a3fff0973bfffc971bfffc947bfffc949bfffc96fbfffc80030004941bfffc80030008941bfffc8003000c941bfffc38800009387500003f00000063184e08801800007c0803a64e800021947bfffc38800009807b00103f00000063184e28801800007c0803a64e8000212c0300014082000848000038546bf80140a20010800d00347c0803a64e8000212c0300014180000c3a800003480000083a80000128140003418200084800000c3a83000048000024398000085460f80140a20010800d00347c0803a64e8000217e83661541a3fff03e6000803a7300013993ffff7e8b98385560f80140a20010800d00347c0803a64e8000217e8b0e707e4c5dd741a3ffec3a520001823b000c3e0000013a1080013990ffff7e2b80385560f80140a20010800d00347c0803a64e8000217e2b0e707dec5dd741a3ffec39ef0001398fffff7e4b78385560f80140a20010800d00347c0803a64e8000217dd2661541a3fff0815b0008392000813989ffff7d4b48385560f80140a20010800d00347c0803a64e8000217d4b0e707d0c5dd741a3ffec390800013988ffff7dcb40385560f80140a20010800d00347c0803a64e8000217cee661541a3fff080db000454cbf80140a20010800d00347c0803a64e8000212c0600014180000c38a000034800000838a000012c0500034082000c38860000480000243980000654c0f80140a20010800d00347c0803a64e8000217c8c341141a3fff094fbfffc38640000388000093f00000063184e08801800007c0803a64e800021833b00003983ffff7f2b18385560f80140a20010800d00347c0803a64e8000217f19661541a3fff0971bfffc38800009807b000c3f00000063184e28801800007c0803a64e8000212c0300014082000848000038546bf80140a20010800d00347c0803a64e8000212c0300014180000c3ae00003480000083ae0000128170003418200084800000c3ae3000048000024398000085460f80140a20010800d00347c0803a64e8000217ee3661541a3fff0386000053c0002a16000437c7c0803a64e80002182db00087ecb1b78556bf80140a20010800d00347c0803a64e8000217c1618004082004482bb00002c150001408200382c1700014082003038c0000138a00001809b001c38600005833b00283c0002a16000c2007c0903a67f2803a63b7b002c4e80042082bb00248295000482740004825b002082320000562c402c6190000181f200047e0e7b7881520008554c402c618900018112000c7d2743783cc0000238c600013986ffff7dcb30385560f80140a20010800d00347c0803a64e8000217dcb0e707cac5dd741a3ffec38a500013987ffff7cab38385560f80140a20010800d00347c0803a64e8000217c85661541a3fff080130000941bfffc386400003880ffff3c0002a06000fe6c7c0803a64e800021388300003c6002a16063c3343c0002a1600074a87c0803a64e800021398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213b3d0004919d0000907900083f0002a06318c7ac9319000482fb000092f9000038790000800d00287c0803a64e800021|@636,1048575|176,3,I109 208,3,I110 332,2,4194304 388,2,16384 668,3,I109 740,3,I110 868,3,@464 960,3,@633 1040,2,65536 1144,3,@316 1164,3,@635 1172,3,@511 1228,3,@227 633:C2,244|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000213af900003c0002a16000437c7c0803a64e800021708b00014182000c3ac400004800002096fbfffc3ac300003c6002a1606330bc800d00287c0803a64e800021546c10386184000156cc55be558c003c618300017c79237856cc93be558c003c61980001730401ff56ccd1be558c003c61830001707801ff72c3007f546c10386196000154ac083a618300017c65b3787cc32b78398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213add0004919d00009076000c931600089096000493360000387600007ee803a64e800020|@634,983055|36,3,@464 76,3,@437 634:S26|505043434f4445434f4e5328292e49666f726d51756164283429 635:S31|6669787570556e636f6e644272616e63683a2063616e277420666978757020 636:S34|505043434f4445434f4e5328292e6669787570556e636f6e644272616e6368283229 637:C2,428|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000213ee0ff003af700017eeb1838556bf80140a20010800d00347c0803a64e8000217c1718004181007c3ee001003af700017c6bb838556bf80140a20010800d00347c0803a64e8000217c03b80040800054546bf80140a20010800d00347c0803a64e8000212c030001408000303d8002005460f80140a20010800d00347c0803a64e8000217f03661541a3fff0387800007f2803a64e8000207f2803a64e800020973bfffc971bfffc3880ffff3c0002a06000fe6c7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002a162b5c55092b6000490760000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092c300043e8002a16294c584928300003c0002a1600005347c0803a64e800021827b00008253000482320004398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a1d0004919d0000907000083de002a061efc7ac91f0000481d1000091d0000038700000800d00287c0803a64e800021|@641,1048575|32,2,-8388608 72,2,8388608 204,3,@316 256,3,@638 312,3,@640 324,3,@325 392,3,@227 638:O2|@639,0 639:S31|20696e746f20612032342d626974207369676e656420696d6d656469617465 640:S21|696e7432343a2063616e277420636f6e7665727420 641:S22|505043434f4445434f4e5328292e696e743234283129 642:O4|@644,@643,@609,@314 643:O2|@647,@314 644:C2,388|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000213983ffff7c8b18385560f80140a20010800d00347c0803a64e8000217eec241141a3fff03c80ff00388400017c8bb838556bf80140a20010800d00347c0803a64e8000217c04b800418100583c800100388400017eeb2038556bf80140a20010800d00347c0803a64e8000217c17200040800030973bfffc971bfffc947bfffc94bbfffc3877000083180008801800007c0803a64e8000213ac3000048000068973bfffc82f8000c82d70004398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003e8002a16294c784929500083e6002a06273c7ac9275000482560000925500003a23000038750000800d00287c0803a64e80002182bb000096dbfffc80950004807b00083c0002a160005a507c0803a64e800021829b000c809b000083140004801800007c0803a64e800021827b000480b30004809b0008833b00103c0002a1600031087c0903a67f2803a63b7b00144e800420|@646,1048575|68,2,-8388608 108,2,8388608 240,3,@645 252,3,@227 308,3,@500 364,3,@441 645:S28|63616c6c20746f6f20666172202832342d626974206f666673657429 646:S30|505043434f4445434f4e5328292e7265616c6c7946697843616c6c283329 647:C2,1264|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e3000056ebf80140a20010800d00347c0803a64e8000212c1700014180000c3ac00003480000083ac000012c1600034082000c3ab70000480000243980000656e0f80140a20010800d00347c0803a64e8000217eacbc1141a3fff0973bfffc971bfffc947bfffc949bfffc96fbfffc80030004941bfffc80030008941bfffc8003000c941bfffc38800009387500003f00000063184e08801800007c0803a64e800021947bfffc38800009807b00103f00000063184e28801800007c0803a64e8000212c0300014082000848000038546bf80140a20010800d00347c0803a64e8000212c0300014180000c3a800003480000083a80000128140003418200084800000c3a83000048000024398000085460f80140a20010800d00347c0803a64e8000217e83661541a3fff03e6000803a7300013993ffff7e8b98385560f80140a20010800d00347c0803a64e8000217e8b0e707e4c5dd741a3ffec3a520001823b000c3e0000013a1080013990ffff7e2b80385560f80140a20010800d00347c0803a64e8000217e2b0e707dec5dd741a3ffec39ef0001398fffff7e4b78385560f80140a20010800d00347c0803a64e8000217dd2661541a3fff0815b0008392000813989ffff7d4b48385560f80140a20010800d00347c0803a64e8000217d4b0e707d0c5dd741a3ffec390800013988ffff7dcb40385560f80140a20010800d00347c0803a64e8000217cee661541a3fff080db000454cbf80140a20010800d00347c0803a64e8000212c0600014180000c38a000034800000838a000012c0500034082000c38860000480000243980000654c0f80140a20010800d00347c0803a64e8000217c8c341141a3fff094fbfffc38640000388000093f00000063184e08801800007c0803a64e800021833b00003983ffff7f2b18385560f80140a20010800d00347c0803a64e8000217f19661541a3fff0971bfffc38800009807b000c3f00000063184e28801800007c0803a64e8000212c0300014082000848000038546bf80140a20010800d00347c0803a64e8000212c0300014180000c3ae00003480000083ae0000128170003418200084800000c3ae3000048000024398000085460f80140a20010800d00347c0803a64e8000217ee3661541a3fff0386000053c0002a16000437c7c0803a64e80002182db00087ecb1b78556bf80140a20010800d00347c0803a64e8000217c1618004082004482bb00002c150001408200382c1700034082003038c0000338a00001809b001c38600005833b00283c0002a16000c2007c0903a67f2803a63b7b002c4e80042082bb00248295000482740004825b002082320000562c402c6190000181f200047e0e7b7881520008554c402c618900018112000c7d2743783cc0000238c600013986ffff7dcb30385560f80140a20010800d00347c0803a64e8000217dcb0e707cac5dd741a3ffec38a500013987ffff7cab38385560f80140a20010800d00347c0803a64e8000217c85661541a3fff080130000941bfffc386400003880ffff3c0002a06000fe6c7c0803a64e800021388300003c6002a16063ccdc3c0002a1600074a87c0803a64e800021398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213b3d0004919d0000907900083f0002a06318c7ac9319000482fb000092f9000038790000800d00287c0803a64e800021|@649,1048575|176,3,I109 208,3,I110 332,2,4194304 388,2,16384 668,3,I109 740,3,I110 868,3,@464 960,3,@633 1040,2,65536 1144,3,@316 1164,3,@648 1172,3,@511 1228,3,@227 648:S29|6669787570556e636f6e6443616c6c3a2063616e277420666978757020 649:S32|505043434f4445434f4e5328292e6669787570556e636f6e6443616c6c283229 650:O4|78,128,0,33 651:O2|@652,@314 652:C2,408|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021546bf80140a20010800d00347c0803a64e8000212c03000141800028546bf80140a20010800d00347c0803a64e8000212c0300414080000c3ae30000480000f0973bfffc971bfffc3880ffff3c0002a06000fe6c7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d00003f0002a16318ba149319000490790000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000932300043ee002a162f7ba4892e300003c0002a1600005347c0803a64e80002182db000082b6000482950004398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a7d0004919d0000907300083e4002a06252c7ac92530004823400009233000038730000800d00287c0803a64e8000213ad900003860fff73c0002a16000cf007c0803a64e800021947bfffc3aa0000196bbfffc38c0000138a00011389700003860fff73b3600003c0002a16000d0787c0903a67f2803a64e800420|@657,1048575|108,3,@316 160,3,@620 216,3,@622 228,3,@325 296,3,@227 340,3,@653 388,3,@655 653:C2,312|2c03fffd4082000c386000014e8000202c0300134082000c386000094e8000202c0300114082000c386000114e8000202c03fff94082000c3860002f4e8000202c0300034082000c386000394e8000202c0300054082000c386000414e8000202c0300074082000c386000af4e8000202c03fff14082000c3860012f4e8000202c03000f4082000c386001af4e8000202c0300014082000c386002154e8000202c03ffed4082000c386002794e8000202c0300094082000c386002a74e8000202c03000d4082000c386003794e8000202c03fff74082000c386003a74e8000202c03ffef4082000c386004114e8000202c03ffff4082000c386006154e8000202c03fff34082000c386006714e8000202c03000b4082000c386001d74e8000202c03fffb4082000c386003974e800020386005d74e800020|@654,524289| 654:S28|505043434f4445434f4e5328292e6f703331546f496e743130283129 655:C2,384|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000213af900003c0002a16000437c7c0803a64e800021708b00014182000c3ac400004800002096fbfffc3ac300003c6002a1606330bc800d00287c0803a64e80002170ab00014182000c3aa500004800002096fbfffc3aa300003c6002a1606330bc800d00287c0803a64e80002170cb00014182000c3a8600004800002096fbfffc3a8300003c6002a1606330bc800d00287c0803a64e80002180db000470cb00014182000c38a600004800002096fbfffc38a300003c6002a1606330bc800d00287c0803a64e800021546c10386184000156cce8fe558c003c618300017c79237872d8000f570c2832619600017ea4b378568c18366183000154acc9fe558c003c619800017f161b7870b500ff56ac083a6194000180bb00007ca3a378398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213b1d0004919d00009078000c92d800089098000493380000387800007ee803a63b7b00084e800020|@656,1032207|36,3,@464 76,3,@437 120,3,@437 164,3,@437 212,3,@437 656:S26|505043434f4445434f4e5328292e58666f726d51756164283629 657:S21|505043434f4445434f4e5328292e6d746c72283129 658:O2|@659,@314 659:C2,692|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021546bf80140a20010800d00347c0803a64e8000212c03000141800028546bf80140a20010800d00347c0803a64e8000212c0300414080000c3ae30000480000f8973bfffc971bfffc949bfffc94bbfffc3880ffff3c0002a06000fe6c7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d00003f0002a16318ba149319000490790000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000932300043ee002a162f7ba4892e300003c0002a1600005347c0803a64e80002182db000882b6000482950004398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a7d0004919d0000907300083e4002a06252c7ac92530004823400009233000038730000800d00287c0803a64e800021548bf80140a20010800d00347c0803a64e8000212c04000141800028548bf80140a20010800d00347c0803a64e8000212c0400414080000c3ac4000048000100973bfffc971bfffc94bbfffc96fbfffc3ac400003880ffff387600003c0002a06000fe6c7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003e8002a16294ba149295000490750000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a300043e6002a16273ba48926300003c0002a1600005347c0803a64e800021825b00088232000482110004398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002139fd0004919d0000906f00083dc002a061cec7ac91cf000481500000914f0000386f0000800d00287c0803a64e80002138c5000038b60000389700003860fff53c0002a16000d5347c0903a67f2803a64e800420|@662,1048575|116,3,@316 168,3,@620 224,3,@622 236,3,@325 304,3,@227 432,3,@316 484,3,@620 540,3,@622 552,3,@325 620,3,@227 672,3,@660 660:C2,304|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000213af900003c0002a16000437c7c0803a64e800021708b00014182000c3ac400004800002096fbfffc3ac300003c6002a1606330bc800d00287c0803a64e80002170ab00014182000c3aa500004800002096fbfffc3aa300003c6002a1606330bc800d00287c0803a64e80002170cb00014182000c3a8600004800002096fbfffc3a8300003c6002a1606330bc800d00287c0803a64e800021546c10386186000156cce8fe558c003c618500017ca4337872c3000f546c2832619900017eb8cb78568cc23e558c003c61960001729501ff398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213a9d0004919d000092b4000c92d400089314000490940000387400007ee803a64e800020|@661,1032207|36,3,@464 76,3,@437 120,3,@437 164,3,@437 661:S26|505043434f4445434f4e5328292e44666f726d51756164283429 662:S20|505043434f4445434f4e5328292e6c777a283329 663:O2|@664,@314 664:C2,428|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000213ee0ffff3af700017eeb1838556bf80140a20010800d00347c0803a64e8000217c1718004181007c3ee000013af700017c6bb838556bf80140a20010800d00347c0803a64e8000217c03b80040800054546bf80140a20010800d00347c0803a64e8000212c030001408000303d8000025460f80140a20010800d00347c0803a64e8000217f03661541a3fff0387800007f2803a64e8000207f2803a64e800020973bfffc971bfffc3880ffff3c0002a06000fe6c7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002a162b5d89492b6000490760000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092c300043e8002a16294d8c8928300003c0002a1600005347c0803a64e800021827b00008253000482320004398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a1d0004919d0000907000083de002a061efc7ac91f0000481d1000091d0000038700000800d00287c0803a64e800021|@668,1048575|32,2,-32768 72,2,32768 204,3,@316 256,3,@665 312,3,@667 324,3,@325 392,3,@227 665:O2|@666,0 666:S31|20696e746f20612031362d626974207369676e656420696d6d656469617465 667:S21|696e7431363a2063616e277420636f6e7665727420 668:S22|505043434f4445434f4e5328292e696e743136283129 669:O2|@670,@314 670:C2,724|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021546bf80140a20010800d00347c0803a64e8000212c03000141800028546bf80140a20010800d00347c0803a64e8000212c0300414080000c3ae30000480000f4973bfffc971bfffc949bfffc3880ffff3c0002a06000fe6c7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d00003f0002a16318ba149319000490790000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000932300043ee002a162f7ba4892e300003c0002a1600005347c0803a64e80002182db000482b6000482950004398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a7d0004919d0000907300083e4002a06252c7ac92530004823400009233000038730000800d00287c0803a64e800021548bf80140a20010800d00347c0803a64e8000212c04000141800028548bf80140a20010800d00347c0803a64e8000212c0400414080000c3ac40000480000fc973bfffc971bfffc96fbfffc3ac400003880ffff387600003c0002a06000fe6c7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003e8002a16294ba149295000490750000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a300043e6002a16273ba48926300003c0002a1600005347c0803a64e800021825b00048232000482110004398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002139fd0004919d0000906f00083dc002a061cec7ac91cf000481500000914f0000386f0000800d00287c0803a64e8000213ab90000386000053c0002a16000cf007c0803a64e800021947bfffc3a800001969bfffc38d6000038b70000388000013860fff73b3500003c0002a16000d0787c0903a67f2803a64e800420|@671,1048575|112,3,@316 164,3,@620 220,3,@622 232,3,@325 300,3,@227 424,3,@316 476,3,@620 532,3,@622 544,3,@325 612,3,@227 656,3,@653 704,3,@655 671:S21|505043434f4445434f4e5328292e636d706c283229 672:O2|@673,@314 673:C2,1044|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021546bf80140a20010800d00347c0803a64e8000212c03000141800028546bf80140a20010800d00347c0803a64e8000212c0300414080000c3ae30000480000f8973bfffc971bfffc949bfffc94bbfffc3880ffff3c0002a06000fe6c7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d00003f0002a16318ba149319000490790000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000932300043ee002a162f7ba4892e300003c0002a1600005347c0803a64e80002182db000882b6000482950004398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a7d0004919d0000907300083e4002a06252c7ac92530004823400009233000038730000800d00287c0803a64e800021548bf80140a20010800d00347c0803a64e8000212c04000141800028548bf80140a20010800d00347c0803a64e8000212c0400414080000c3ac4000048000100973bfffc971bfffc94bbfffc96fbfffc3ac400003880ffff387600003c0002a06000fe6c7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003e8002a16294ba149295000490750000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a300043e6002a16273ba48926300003c0002a1600005347c0803a64e800021825b00088232000482110004398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002139fd0004919d0000906f00083dc002a061cec7ac91cf000481500000914f0000386f0000800d00287c0803a64e80002154abf80140a20010800d00347c0803a64e8000212c0500014180002854abf80140a20010800d00347c0803a64e8000212c0500414080000c3aa50000480000fc973bfffc971bfffc96fbfffc96dbfffc3880ffff386500003c0002a06000fe6c7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003e8002a16294ba149295000490750000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a300043e6002a16273ba48926300003c0002a1600005347c0803a64e800021825b00088232000482110004398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002139fd0004919d0000906f00083dc002a061cec7ac91cf000481500000914f0000386f0000800d00287c0803a64e8000213a990000386000113c0002a16000cf007c0803a64e800021947bfffc3a600001967bfffc38d6000038b50000389700003860fff73b3400003c0002a16000d0787c0903a67f2803a64e800420|@674,1048575|116,3,@316 168,3,@620 224,3,@622 236,3,@325 304,3,@227 432,3,@316 484,3,@620 540,3,@622 552,3,@325 620,3,@227 744,3,@316 796,3,@620 852,3,@622 864,3,@325 932,3,@227 976,3,@653 1024,3,@655 674:S20|505043434f4445434f4e5328292e737562283329 675:O5|@677,@314,@680,@683,@676 676:O2|@686,@314 677:C2,576|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c03000140820060973bfffc80b8000480850004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003ee002a162f7e2fc92e300083ee002a062f7c7ac92e3000482e4000092e30000800d00287c0803a64e800021947bfffc947bfffc973bfffc971bfffc947bfffc949bfffc389b00103865000083180010801800007c0803a64e800021833b00142c190001408200b0831b00102c1800014082004082fb000482db00007eebb378556bf80140a20010800d00347c0803a64e8000217c17b000408200183860000182bb000c7ea803a63b7b00184e80002082fb000838b80000809b0000807b000483170008801800007c0803a64e8000213ac30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003aa0000192a3000492c30000829b000c7e8803a63b7b00184e800020831b000838b90000809b0000807b00048318000c801800007c0803a64e80002182db00102c1600014082000c3ae000014800005c82bb0008947bfffc38b60000809b0008807b000883150008801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003a800001929700049077000048000008947bfffc398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d000092f50004829b00009295000038750000827b00107e6803a63b7b001c4e800020|@679,1048575|88,3,@678 100,3,@227 678:S40|616464496d6d65643a2063616e27742075736520723020666f722061646420696d6d656469617465 679:S25|505043434f4445434f4e5328292e616464496d6d6564283329 680:O2|@681,@314 681:C2,692|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021546bf80140a20010800d00347c0803a64e8000212c03000141800028546bf80140a20010800d00347c0803a64e8000212c0300414080000c3ae30000480000f8973bfffc971bfffc949bfffc94bbfffc3880ffff3c0002a06000fe6c7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d00003f0002a16318ba149319000490790000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000932300043ee002a162f7ba4892e300003c0002a1600005347c0803a64e80002182db000882b6000482950004398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a7d0004919d0000907300083e4002a06252c7ac92530004823400009233000038730000800d00287c0803a64e800021548bf80140a20010800d00347c0803a64e8000212c04000141800028548bf80140a20010800d00347c0803a64e8000212c0400414080000c3ac4000048000100973bfffc971bfffc94bbfffc96fbfffc3ac400003880ffff387600003c0002a06000fe6c7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003e8002a16294ba149295000490750000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a300043e6002a16273ba48926300003c0002a1600005347c0803a64e800021825b00088232000482110004398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002139fd0004919d0000906f00083dc002a061cec7ac91cf000481500000914f0000386f0000800d00287c0803a64e80002138c5000038b6000038970000386000013c0002a16000d5347c0903a67f2803a64e800420|@682,1048575|116,3,@316 168,3,@620 224,3,@622 236,3,@325 304,3,@227 432,3,@316 484,3,@620 540,3,@622 552,3,@325 620,3,@227 672,3,@660 682:S21|505043434f4445434f4e5328292e61646469283329 683:O2|@684,@314 684:C2,692|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021546bf80140a20010800d00347c0803a64e8000212c03000141800028546bf80140a20010800d00347c0803a64e8000212c0300414080000c3ae30000480000f8973bfffc971bfffc949bfffc94bbfffc3880ffff3c0002a06000fe6c7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d00003f0002a16318ba149319000490790000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000932300043ee002a162f7ba4892e300003c0002a1600005347c0803a64e80002182db000882b6000482950004398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a7d0004919d0000907300083e4002a06252c7ac92530004823400009233000038730000800d00287c0803a64e800021548bf80140a20010800d00347c0803a64e8000212c04000141800028548bf80140a20010800d00347c0803a64e8000212c0400414080000c3ac4000048000100973bfffc971bfffc94bbfffc96fbfffc3ac400003880ffff387600003c0002a06000fe6c7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003e8002a16294ba149295000490750000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a300043e6002a16273ba48926300003c0002a1600005347c0803a64e800021825b00088232000482110004398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002139fd0004919d0000906f00083dc002a061cec7ac91cf000481500000914f0000386f0000800d00287c0803a64e80002138c5000038b60000389700003860ffff3c0002a16000d5347c0903a67f2803a64e800420|@685,1048575|116,3,@316 168,3,@620 224,3,@622 236,3,@325 304,3,@227 432,3,@316 484,3,@620 540,3,@622 552,3,@325 620,3,@227 672,3,@660 685:S22|505043434f4445434f4e5328292e6164646973283329 686:C2,1516|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc947bfffc949bfffc3c800002388400013f00000063184e28801800007c0803a64e8000212c0300014082000848000038546bf80140a20010800d00347c0803a64e8000212c0300014180000c3b200003480000083b20000128190003418200084800000c3b230000480000243d8000025460f80140a20010800d00347c0803a64e8000217f23661541a3fff0831b0004570bf80140a20010800d00347c0803a64e8000212c1800014180000c3ae00003480000083ae000012c1700034082000c3ad80000480000283d800002398cfffe5700f80140a20010800d00347c0803a64e8000217eccc41141a3fff0973bfffc3c80000238840001387600003f00000063184e08801800007c0803a64e8000213ea0ffff3ab500017eab1838556bf80140a20010800d00347c0803a64e8000217c151800418100343e8000013a9400017c6ba038556bf80140a20010800d00347c0803a64e8000217c03a0004080000c3a600001480000f0947bfffc3880ffff807b000c3c0002a06000fe6c7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a9d0004919d00003e6002a16273ef509274000490740000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000928300043e4002a16252ef84924300003c0002a1600005347c0803a64e800021823b00108211000481f00004398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002139dd0004919d0000906e00083d4002a0614ac7ac914e0004812f0000912e0000386e0000800d00287c0803a64e800021825b00003e2000013a3100017e4b8838556bf80140a20010800d00347c0803a64e8000217c1288004080000c3a03000048000024398000025460f80140a20010800d00347c0803a64e8000217e03661541a3fff03c80000238840001387000003f00000063184e28801800007c0803a64e8000212c0300014082000848000038546bf80140a20010800d00347c0803a64e8000212c0300014180000c3a000003480000083a00000128100003418200084800000c3a030000480000243d8000025460f80140a20010800d00347c0803a64e8000217e03661541a3fff081fb000055ebf80140a20010800d00347c0803a64e8000212c0f0001418000343dc0000239ce00017deb7038556bf80140a20010800d00347c0803a64e8000217c0f70004080000c394f0000480000f0961bfffc3880ffff386f00003c0002a06000fe6c7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002139dd0004919d00003d4002a1614aefac914e0004906e0000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000091c300043d2002a16129efe4912300003c0002a1600005347c0803a64e800021811b001080e8000480c70004398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002138bd0004919d0000906500083c8002a06084c7ac90850004806600009065000038650000800d00287c0803a64e800021560bf80140a20010800d00347c0803a64e8000212c100001418000343d200002392900017e0b4838556bf80140a20010800d00347c0803a64e8000217c1048004080000c39100000480000f0955bfffc3880ffff387000003c0002a06000fe6c7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021393d0004919d00003d0002a16108efac9109000490690000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000912300043ce002a160e7efe490e300003c0002a1600005347c0803a64e80002180db001080a6000480850004398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213b3d0004919d0000907900083f0002a06318c7ac9319000482e4000092f9000038790000800d00287c0803a64e80002180fb000491470000910700043860000180db00107cc803a63b7b00144e800020|@693,1048575|48,2,65536 56,3,I110 280,2,65536 292,3,I109 312,2,-32768 352,2,32768 412,3,@316 464,3,@687 520,3,@689 532,3,@325 600,3,@227 640,2,32768 720,2,65536 732,3,I110 888,2,65536 948,3,@316 1000,3,@690 1056,3,@692 1068,3,@325 1136,3,@227 1200,2,65536 1260,3,@316 1312,3,@690 1368,3,@692 1380,3,@325 1448,3,@227 687:O2|@688,0 688:S31|20696e746f20612033322d626974207369676e656420696d6d656469617465 689:S30|73706c69745369676e6564496e743a2063616e277420636f6e7665727420 690:O2|@691,0 691:S33|20696e746f20612031362d62697420756e7369676e656420696d6d656469617465 692:S29|756e7369676e6564496e7431363a2063616e277420636f6e7665727420 693:S31|505043434f4445434f4e5328292e73706c69745369676e6564496e74283229 694:O2|@695,@314 695:C2,692|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021546bf80140a20010800d00347c0803a64e8000212c03000141800028546bf80140a20010800d00347c0803a64e8000212c0300414080000c3ae30000480000f8973bfffc971bfffc949bfffc94bbfffc3880ffff3c0002a06000fe6c7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d00003f0002a16318ba149319000490790000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000932300043ee002a162f7ba4892e300003c0002a1600005347c0803a64e80002182db000882b6000482950004398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a7d0004919d0000907300083e4002a06252c7ac92530004823400009233000038730000800d00287c0803a64e800021548bf80140a20010800d00347c0803a64e8000212c04000141800028548bf80140a20010800d00347c0803a64e8000212c0400414080000c3ac4000048000100973bfffc971bfffc94bbfffc96fbfffc3ac400003880ffff387600003c0002a06000fe6c7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003e8002a16294ba149295000490750000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a300043e6002a16273ba48926300003c0002a1600005347c0803a64e800021825b00088232000482110004398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002139fd0004919d0000906f00083dc002a061cec7ac91cf000481500000914f0000386f0000800d00287c0803a64e80002138c5000038b70000389600003860fff33c0002a16000d5347c0903a67f2803a64e800420|@696,1048575|116,3,@316 168,3,@620 224,3,@622 236,3,@325 304,3,@227 432,3,@316 484,3,@620 540,3,@622 552,3,@325 620,3,@227 672,3,@660 696:S20|505043434f4445434f4e5328292e6f7269283329 697:C2,408|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021546bf80140a20010800d00347c0803a64e8000212c03000141800028546bf80140a20010800d00347c0803a64e8000212c0300414080000c3ae30000480000f0973bfffc971bfffc3880ffff3c0002a06000fe6c7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d00003f0002a16318ba149319000490790000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000932300043ee002a162f7ba4892e300003c0002a1600005347c0803a64e80002182db000082b6000482950004398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a7d0004919d0000907300083e4002a06252c7ac92530004823400009233000038730000800d00287c0803a64e8000213ad90000386000093c0002a16000cf007c0803a64e800021947bfffc3aa0000196bbfffc38c0000138a00011389700003860fff73b3600003c0002a16000d0787c0903a67f2803a64e800420|@698,1048575|108,3,@316 160,3,@620 216,3,@622 228,3,@325 296,3,@227 340,3,@653 388,3,@655 698:S21|505043434f4445434f4e5328292e6d666c72283129 699:O1|@700 700:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180830004806300003c0002a16000f55c7c0903a64e800420|@703,983043|40,3,@701 701:C2,68|7f2802a6633900028304003482f800003983ffff7eeb18385560f80140a20010800d00347c0803a64e8000217ed7661541a3fff092d80000386000017f2803a64e800020|@702,983043| 702:S27|505043434f4445434f4e5328292e7265736574537461636b283229 703:S27|505043434f4445434f4e5328292e7265736574537461636b283129 704:O2|-2,-4 705:O2|-2,0 706:O2|-2,1 707:O2|-2,2 708:O2|-2,-3 709:O2|-2,3 710:O2|0,-4 711:O2|0,0 712:O2|0,1 713:O2|0,2 714:O2|0,-3 715:O2|0,3 716:O1|@717 717:C2,8|386000034e800020|@718,524289| 718:S25|505043434f4445434f4e5328292e6973436f6d705252283129 719:O1|@720 720:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180830004806300003c0002a16000f7407c0903a64e800420|@723,917507|40,3,@721 721:C2,372|7f2802a663390002830300002c1800034082000c386000034e8000202c18ffff4082000c386000034e8000202c180001408200a4708b000141820094708b00014182000c3ae400004800001c973bfffc3c6002a1606330bc800d00287c0803a64e80002156ebf80140a20010800d00347c0803a64e8000212c178001418000443c800001388480017eeb2038556bf80140a20010800d00347c0803a64e8000217c17200040800010386000037f2803a64e800020386000017f2803a64e800020386000017f2803a64e800020386000014e800020708b000141820094708b00014182000c3ae400004800001c973bfffc3c6002a1606330bc800d00287c0803a64e80002156ebf80140a20010800d00347c0803a64e8000212c170001418000443c800001388400017eeb2038556bf80140a20010800d00347c0803a64e8000217c17200040800010386000037f2803a64e800020386000017f2803a64e800020386000017f2803a64e800020386000014e800020|@722,917507|80,3,@437 128,2,16384 240,3,@437 288,2,32768 722:S25|505043434f4445434f4e5328292e6973436f6d705249283229 723:S25|505043434f4445434f4e5328292e6973436f6d705249283129 724:O1|@725 725:C2,412|2c03fff54082000c386000034e8000202c0300014082000c386000034e8000202c0300154082000c386000034e8000202c0300114082000c386000034e8000202c03000d4082000c386000034e8000202c03ffff4082000c386000034e8000202c03ffeb4082000c386000034e8000202c03ffef4082000c386000034e8000202c03fff34082000c386000034e8000202c0300054082000c386000034e8000202c03000b4082000c386000034e8000202c03000f4082000c386000034e8000202c0300034082000c386000034e8000202c03ffe74082000c386000034e8000202c0300094082000c386000034e8000202c03fff74082000c386000034e8000202c0300194082000c386000014e8000202c03ffe94082000c386000014e8000202c0300174082000c386000014e8000202c0300074082000c386000014e8000202c03fffb4082000c386000014e8000202c03fff94082000c386000014e8000202c03ffed4082000c386000014e8000202c0300134082000c386000034e8000203b00fff17c1818404082000c386000034e800020386000014e800020|@726,786433| 726:S26|505043434f4445434f4e5328292e696e73747249735252283129 727:O1|@728 728:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180830004806300003c0002a16000fb587c0903a64e800420|@731,917507|40,3,@729 729:C2,2116|7f2802a6633900022c03fff54082000c386000034e8000202c0300014082001c386400003f00000063184d88801800007c0903a64e8004202c0300154082001c386400003f00000063184d88801800007c0903a64e8004202c0300114082001c386400003f00000063184d88801800007c0903a64e8004202c03000d408200c0708b0001418200b0708b00014182000c3b0400004800001c973bfffc3c6002a1606330bc800d00287c0803a64e800021570bf80140a20010800d00347c0803a64e8000212c18ffff41800060708b00014182000c3ae400004800001c973bfffc3c6002a1606330bc800d00287c0803a64e80002156ebf80140a20010800d00347c0803a64e8000212c17000541810010386000037f2803a64e800020386000017f2803a64e800020386000017f2803a64e800020386000014e8000202c03ffff408200c4708b0001418200b4708b00014182000c3b0400004800001c973bfffc3c6002a1606330bc800d00287c0803a64e800021398000025700f80140a20010800d00347c0803a64e8000217eecc41141a3fff056ebf80140a20010800d00347c0803a64e8000212c178001418000443c800001388480017eeb2038556bf80140a20010800d00347c0803a64e8000217c17200040800010386000037f2803a64e800020386000017f2803a64e800020386000017f2803a64e800020386000014e8000202c03ffeb408200c4708b0001418200b4708b00014182000c3b0400004800001c973bfffc3c6002a1606330bc800d00287c0803a64e800021398000045700f80140a20010800d00347c0803a64e8000217ef8641141a3fff056ebf80140a20010800d00347c0803a64e8000212c178001418000443c800001388480017eeb2038556bf80140a20010800d00347c0803a64e8000217c17200040800010386000037f2803a64e800020386000017f2803a64e800020386000017f2803a64e800020386000014e8000202c03ffef408200b4708b0001418200a4708b00014182000c3b0400004800001c973bfffc3c6002a1606330bc800d00287c0803a64e8000213998ffff5700f80140a20010800d00347c0803a64e8000217ef8661541a3fff03980000256e0f80140a20010800d00347c0803a64e8000217c97661541a3fff0398000025480f80140a20010800d00347c0803a64e8000217c64661541a3fff03f00000063184d88801800007c0903a67f2803a64e800420386000014e8000202c03fff3408200b0708b0001418200a0708b00014182000c3b0400004800001c973bfffc3c6002a1606330bc800d00287c0803a64e8000213ee0ffff3af700017eebc038556bf80140a20010800d00347c0803a64e8000217c17c000418100443c800001388400017f0b2038556bf80140a20010800d00347c0803a64e8000217c18200040800010386000037f2803a64e800020386000017f2803a64e800020386000017f2803a64e800020386000014e8000202c0300054082000c386000014e8000202c03000b4082000c386000014e8000202c03000f4082001c386400003f00000063184d88801800007c0903a64e8004202c0300034082001c386400003f00000063184d88801800007c0903a64e8004202c03ffe74082001c386400003f00000063184d88801800007c0903a64e8004202c030009408200a4708b000141820094708b00014182000c3b0400004800001c973bfffc3c6002a1606330bc800d00287c0803a64e800021570bf80140a20010800d00347c0803a64e8000212c188001418000443ee000013af780017f0bb838556bf80140a20010800d00347c0803a64e8000217c18b80040800010386000037f2803a64e800020386000017f2803a64e800020386000017f2803a64e800020386000014e8000202c03fff7408200b0708b0001418200a0708b00014182000c3b0400004800001c973bfffc3c6002a1606330bc800d00287c0803a64e8000213ee0ffff3af700017eebc038556bf80140a20010800d00347c0803a64e8000217c17c000418100443c800001388400017f0b2038556bf80140a20010800d00347c0803a64e8000217c18200040800010386000037f2803a64e800020386000017f2803a64e800020386000017f2803a64e800020386000014e8000202c0300194082000c386000034e8000202c03ffe94082000c386000034e8000202c03001740820098708b000141820088708b00014182000c3b0400004800001c973bfffc3c6002a1606330bc800d00287c0803a64e800021570bf80140a20010800d00347c0803a64e8000212c18000140810038570bf80140a20010800d00347c0803a64e8000212c18003f40800010386000037f2803a64e800020386000017f2803a64e800020386000017f2803a64e800020386000014e8000202c03000740820098708b000141820088708b00014182000c3b0400004800001c973bfffc3c6002a1606330bc800d00287c0803a64e800021570bf80140a20010800d00347c0803a64e8000212c18000140810038570bf80140a20010800d00347c0803a64e8000212c18003f40800010386000037f2803a64e800020386000017f2803a64e800020386000017f2803a64e800020386000014e8000202c03fffb40820098708b000141820088708b00014182000c3b0400004800001c973bfffc3c6002a1606330bc800d00287c0803a64e800021570bf80140a20010800d00347c0803a64e8000212c18000140810038570bf80140a20010800d00347c0803a64e8000212c18003f40800010386000037f2803a64e800020386000017f2803a64e800020386000017f2803a64e800020386000014e8000202c03fff14082000c386000014e8000202c03fff94082000c386000014e8000203b00ffed7c1818404082000c386000034e800020386000014e800020|@730,917507|36,3,I105 68,3,I105 100,3,I105 156,3,@437 224,3,@437 352,3,@437 432,2,16384 552,3,@437 632,2,16384 752,3,@437 868,3,I105 936,3,@437 956,2,-32768 996,2,32768 1124,3,I105 1156,3,I105 1188,3,I105 1244,3,@437 1292,2,16384 1412,3,@437 1432,2,-32768 1472,2,32768 1624,3,@437 1780,3,@437 1936,3,@437 730:S26|505043434f4445434f4e5328292e696e73747249735249283229 731:S26|505043434f4445434f4e5328292e696e73747249735249283129 732:O2|@734,@733 733:O22|@737,@740,@744,@741,@625,@767,@770,@675,@791,@794,@771,@761,@650,@651,@775,@782,@807,@776,@810,@813,@736,@314 734:C2,72|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e3001096fbfffc80c3000c80a30008808300048063000083180004801800007c0903a64e800420|@735,1048575| 735:S22|505043434f4445434f4e5328292e67656e5252283129 736:O2|@824,@314 737:C2,7512|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c06003740820008480000182c040037408200084800000c2c050037408200d482db000082b60034829500003a6000093993ffff7e8b98385560f80140a20010800d00347c0803a64e8000217e8b0e707e4c5dd741a3ffec3a5200013a80000192950000973bfffc971bfffc947bfffc949bfffc94bbfffc94dbfffc38b2000038800037386000378318001c801800007c0803a64e8000212c0300014082000c3ae0000148000068827b001080030004941bfffc809b001c8063000083130008801800007c0803a64e800021807b00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffffac3ae00001973bfffc971bfffc947bfffc949bfffc94bbfffc94dbfffc833b000c2c19fff540820034831b001082fb001838b70000809b0008807b000083180004833b0014801800007c0903a67f2803a63b7b001c4e8004202c19000140820264831b001038a0ffff809b0004386000198318001c801800007c0803a64e8000212c0300014082000c3ae000014800007082db001080030000941bfffc80030004941bfffc809b0020386000018316000c801800007c0803a64e80002182bb0018809b0020807b000483150008801800007c0803a64e800021807b00003b7b0008800d00187c1b004040a00010800d00207c0803a64e8000214bffff8882db000882bb00047ecbab78556bf80140a20010800d00347c0803a64e8000217c16a80040820028827b0010809b00183876000083130018801800007c0803a64e8000213a83000048000058829b00103a600001967bfffc825b001c965bfffc38c0000338b50000388000173876000083140014801800007c0803a64e800021823b0010809b00183860001783110018801800007c0803a64e8000213a830000821b0010969bfffc39e0000395fbfffc81db002095dbfffc38c0ffff38a00019809b0014807b000c83100014801800007c0803a64e800021815b001c812a00008109000080fb00003988ffff7ceb40385560f80140a20010800d00347c0803a64e8000217ccc3c1141a3fff080bb00143866000083050010801800007c0803a64e800021947bfffc947bfffc3ae30000389b00003860fff73c0002a16000408c7c0803a64e8000213ac0000196dbfffc3aa0000196bbfffc38d7000080bb000c809b00083860fffb3c0002a1600042087c0803a64e800021829b001c947bfffc809b0028386000018314000c801800007c0803a64e800021827b0020825b002838920000807b000083130008833b0024801800007c0903a67f2803a63b7b002c4e8004202c19001540820264831b001038a0ffff809b0004386000198318001c801800007c0803a64e8000212c0300014082000c3ae000014800007082db001080030000941bfffc80030004941bfffc809b0020386000018316000c801800007c0803a64e80002182bb0018809b0020807b000483150008801800007c0803a64e800021807b00003b7b0008800d00187c1b004040a00010800d00207c0803a64e8000214bffff8882db000882bb00047ecbab78556bf80140a20010800d00347c0803a64e8000217c16a80040820028827b0010809b00183876000083130018801800007c0803a64e8000213a83000048000058829b00103a600001967bfffc825b001c965bfffc38c0000338b50000388000173876000083140014801800007c0803a64e800021823b0010809b00183860001783110018801800007c0803a64e8000213a830000821b0010969bfffc39e0000395fbfffc81db002095dbfffc38c0ffef80bb001438800019807b000c83100014801800007c0803a64e800021815b001c812a00008109000080fb00003988ffff7ceb40385560f80140a20010800d00347c0803a64e8000217ccc3c1141a3fff080bb00143866000083050010801800007c0803a64e800021947bfffc947bfffc3ae30000389b00003860fff73c0002a16000408c7c0803a64e8000213ac0000196dbfffc3aa0000196bbfffc38d7000080bb000c809b00083860fffb3c0002a1600042087c0803a64e800021829b001c947bfffc809b0028386000018314000c801800007c0803a64e800021827b0020825b002838920000807b000083130008833b0024801800007c0903a67f2803a63b7b002c4e8004202c19001140820264831b001038a0ffff809b0008386000198318001c801800007c0803a64e8000212c0300014082000c3ae000014800007082db001080030000941bfffc80030004941bfffc809b0020386000018316000c801800007c0803a64e80002182bb0018809b0020807b000483150008801800007c0803a64e800021807b00003b7b0008800d00187c1b004040a00010800d00207c0803a64e8000214bffff8882db000882bb00047ecbab78556bf80140a20010800d00347c0803a64e8000217c16a80040820028827b0010809b00183876000083130018801800007c0803a64e8000213a83000048000058829b00103a600001967bfffc825b001c965bfffc38c0000338b50000388000173876000083140014801800007c0803a64e800021823b0010809b00183860001783110018801800007c0803a64e8000213a830000821b0010969bfffc39e0000395fbfffc81db002095dbfffc38c0ffef80bb001038800019807b000c83100014801800007c0803a64e800021815b001c812a00008109000080fb00003988ffff7ceb40385560f80140a20010800d00347c0803a64e8000217ccc3c1141a3fff080bb00143866000083050010801800007c0803a64e800021947bfffc947bfffc3ae30000389b00003860fff73c0002a16000408c7c0803a64e8000213ac0000196dbfffc3aa0000196bbfffc38d7000080bb000c809b00083860fffb3c0002a1600042087c0803a64e800021829b001c947bfffc809b0028386000018314000c801800007c0803a64e800021827b0020825b002838920000807b000083130008833b0024801800007c0903a67f2803a63b7b002c4e8004202c19000d40820354831b001038a0ffff809b0004386000198318001c801800007c0803a64e8000212c0300014082000c3ae000014800007082db001080030000941bfffc80030004941bfffc809b0020386000018316000c801800007c0803a64e80002182bb0018809b0020807b000483150008801800007c0803a64e800021807b00003b7b0008800d00187c1b004040a00010800d00207c0803a64e8000214bffff8882db000882bb00047ecbab78556bf80140a20010800d00347c0803a64e8000217c16a80040820028827b0010809b00183876000083130018801800007c0803a64e8000213a83000048000058829b00103a600001967bfffc825b001c965bfffc38c0000338b50000388000173876000083140014801800007c0803a64e800021823b0010809b00183860001783110018801800007c0803a64e8000213a830000821b0010969bfffc38a00003809b000c3860001783100020801800007c0803a64e80002181fb0014947bfffc809b002038600001830f000c801800007c0803a64e80002181db0018809b0020807b0000830e0008801800007c0803a64e800021815b001839200003953bfffc811b0024951bfffc38c0fff538a0001738800019807b0010830a0014801800007c0803a64e80002180fb002080c7000080a60000809b00043985ffff7c8b28385560f80140a20010800d00347c0803a64e8000217c6c241141a3fff0833b001883190010801800007c0803a64e800021947bfffc947bfffc3ae30000389b00003860fff73c0002a16000408c7c0803a64e8000213ac0000196dbfffc3aa0000196bbfffc38d7000080bb000c809b00083860fffb3c0002a1600042087c0803a64e800021829b0020947bfffc809b002c386000018314000c801800007c0803a64e800021827b0024809b002c807b000083130008801800007c0803a64e800021825b002438a00003809b0014807b00148312001c801800007c0803a64e8000212c0300014082001838600001823b00287e2803a63b7b00304e800020823b002480030000941bfffc80030004941bfffc809b0034386000018311000c801800007c0803a64e800021821b002c809b0034807b000483100008801800007c0803a64e800021807b00003b7b0008800d00187c1b004040a00010800d00207c0803a64e8000214bffff7c2c19ffff408200e0831b00103ae0000196fbfffc82db001c96dbfffc38c0000180bb000c809b00103860001983180014801800007c0803a64e80002182bb001038a0ffff38800019807b00008315001c801800007c0803a64e8000212c0300014082001838600001829b00147e8803a63b7b001c4e800020829b001080030000941bfffc80030004941bfffc809b0020386000018314000c801800007c0803a64e800021827b0018809b0020807b000483130008801800007c0803a64e800021807b00003b7b0008800d00187c1b004040a00010800d00207c0803a64e8000214bffff7c2c19ffeb408200e0831b00103ae0000196fbfffc82db001c96dbfffc38c0001180bb0010809b000c3860001983180014801800007c0803a64e80002182bb001038a0000338800019807b00008315001c801800007c0803a64e8000212c0300014082001838600001829b00147e8803a63b7b001c4e800020829b001080030000941bfffc80030004941bfffc809b0020386000018314000c801800007c0803a64e800021827b0018809b0020807b000483130008801800007c0803a64e800021807b00003b7b0008800d00187c1b004040a00010800d00207c0803a64e8000214bffff7c2c19ffef408200e0831b00103ae0000196fbfffc82db001c96dbfffc38c0001180bb000c809b00103860001983180014801800007c0803a64e80002182bb001038a0000338800019807b00008315001c801800007c0803a64e8000212c0300014082001838600001829b00147e8803a63b7b001c4e800020829b001080030000941bfffc80030004941bfffc809b0020386000018314000c801800007c0803a64e800021827b0018809b0020807b000483130008801800007c0803a64e800021807b00003b7b0008800d00187c1b004040a00010800d00207c0803a64e8000214bffff7c2c19fff3408201d4831b001038a00003809b00083860001983180020801800007c0803a64e80002182fb0010947bfffc809b001c386000018317000c801800007c0803a64e80002182db0014809b001c807b000083160008801800007c0803a64e80002182bb001438a0ffff809b0008807b00048315001c801800007c0803a64e8000212c0300014082000848000070829b001480030000941bfffc80030004941bfffc809b0024386000018314000c801800007c0803a64e800021827b001c809b0024807b000483130008801800007c0803a64e800021807b00003b7b0008800d00187c1b004040a00010800d00207c0803a64e8000214bffff8c829b00143a600001967bfffc825b0020965bfffc38c0000b38a00019809b000c807b000c83140014801800007c0803a64e800021823b001438a00003809b0004807b00048311001c801800007c0803a64e8000212c0300014082001838600001821b00187e0803a63b7b00204e800020821b001480030000941bfffc80030004941bfffc809b0024386000018310000c801800007c0803a64e80002181fb001c809b0024807b0004830f0008801800007c0803a64e800021807b00003b7b0008800d00187c1b004040a00010800d00207c0803a64e8000214bffff7c2c190005408203d0831b001038800003807b000483180040801800007c0803a64e80002182fb0010947bfffc809b001c386000018317000c801800007c0803a64e80002182db0014809b001c807b000083160008801800007c0803a64e80002182bb0014809b001c386000098315003c801800007c0803a64e800021829b0014947bfffc80db002038a000013880001b3860006183140038801800007c0803a64e800021827b00183860000183130034801800007c0803a64e800021825b0018947bfffc809b0024386000018312000c801800007c0803a64e800021823b001c809b0024807b000083110008801800007c0803a64e800021821b001c80100030941bfffc809b0028386000018310000c801800007c0803a64e80002181fb0020809b0028807b0000830f0008801800007c0803a64e80002181db0020809b0028807b0008830e002c801800007c0803a64e800021815b002038a0ffff809b001438600019830a001c801800007c0803a64e8000212c0300014082000848000070813b002080030000941bfffc80030004941bfffc809b0030386000018309000c801800007c0803a64e800021811b0028809b0030807b000483080008801800007c0803a64e800021807b00003b7b0008800d00187c1b004040a00010800d00207c0803a64e8000214bffff8c813b002038a0ffff809b0018386000178309001c801800007c0803a64e8000212c0300014082000848000070811b002080030000941bfffc80030004941bfffc809b0030386000018308000c801800007c0803a64e80002180fb0028809b0030807b000483070008801800007c0803a64e800021807b00003b7b0008800d00187c1b004040a00010800d00207c0803a64e8000214bffff8c811b002038e0000194fbfffc80db002c94dbfffc38c0fffb38a00019388000173860001783080014801800007c0803a64e80002180bb00203880003d949bfffc38600001947bfffc38c000018325002838a0000338800017386000173b190000801800007c0803a64e800021831b0020947bfffc809b002c386000018318000c801800007c0803a64e80002182fb0024809b002c807b000083170008801800007c0803a64e80002182db002438a0000338800017807b001483160024801800007c0803a64e8000212c030001408200183860000182bb00287ea803a63b7b00304e80002082bb002480030000941bfffc80030004941bfffc809b0034386000018315000c801800007c0803a64e800021829b002c809b0034807b000483140008801800007c0803a64e800021807b00003b7b0008800d00187c1b004040a00010800d00207c0803a64e8000214bffff7c2c19000b40820330831b001038800003807b000483180040801800007c0803a64e80002182fb0010947bfffc809b001c386000018317000c801800007c0803a64e80002182db0014809b001c807b000083160008801800007c0803a64e80002182bb0014809b001c386000098315003c801800007c0803a64e800021829b0014947bfffc80db002038a000013880001b3860006183140038801800007c0803a64e800021827b00183860000183130034801800007c0803a64e800021825b0018947bfffc809b0024386000018312000c801800007c0803a64e800021823b001c809b0024807b000083110008801800007c0803a64e800021821b001c80100030941bfffc809b0028386000018310000c801800007c0803a64e80002181fb0020809b0028807b0000830f0008801800007c0803a64e80002181db0020809b0028807b0008830e002c801800007c0803a64e800021815b002038a0ffff809b001838600017830a001c801800007c0803a64e8000212c0300014082000848000070813b002080030000941bfffc80030004941bfffc809b0030386000018309000c801800007c0803a64e800021811b0028809b0030807b000483080008801800007c0803a64e800021807b00003b7b0008800d00187c1b004040a00010800d00207c0803a64e8000214bffff8c813b002038a0ffff809b0014386000198309001c801800007c0803a64e8000212c0300014082000848000070811b002080030000941bfffc80030004941bfffc809b0030386000018308000c801800007c0803a64e80002180fb0028809b0030807b000483070008801800007c0803a64e800021807b00003b7b0008800d00187c1b004040a00010800d00207c0803a64e8000214bffff8c811b002038e0000194fbfffc80db002c94dbfffc38c0fffb38a00019388000173860001783080014801800007c0803a64e80002180bb002038800001949bfffc807b002c947bfffc38c0000b8325001438a0001938800017386000173b190000801800007c0803a64e800021831b002082fb00283ac0000192db002882bb002492fb002438c0001180bb001838800017807b0010831800143b350000801800007c0903a67f2803a63b7b00244e8004202c19000f40820048831b001082fb00183ac0000192db001882bb001492fb001438c0000d80bb0004809b0000807b0008831800143b350000801800007c0903a67f2803a63b7b00144e8004202c19000340820048831b001082fb00183ac0000192db001882bb001492fb001438c0000380bb0004809b0000807b0008831800143b350000801800007c0903a67f2803a63b7b00144e8004202c19ffe7408200e0831b00103ae0000196fbfffc82db001c96dbfffc38c0ffed80bb000c38800019807b001083180014801800007c0803a64e80002182bb001038a0000338800019807b000083150024801800007c0803a64e8000212c0300014082001838600001829b00147e8803a63b7b001c4e800020829b001080030000941bfffc80030004941bfffc809b0020386000018314000c801800007c0803a64e800021827b0018809b0020807b000483130008801800007c0803a64e800021807b00003b7b0008800d00187c1b004040a00010800d00207c0803a64e8000214bffff7c2c190009408200e0831b00103ae0003b96fbfffc3ac0000196dbfffc38c0000138a00003809b000c3860001983180028801800007c0803a64e80002182bb0010947bfffc38a00019809b000c807b000483150044801800007c0803a64e800021829b0014947bfffc809b0020386000018314000c801800007c0803a64e800021827b0018809b0020807b000483130008801800007c0803a64e800021825b0018809b0020386000018312000c801800007c0803a64e800021823b0018821b002038900000807b000083110008833b001c801800007c0903a67f2803a63b7b00244e8004202c19fff7408201d4831b001038a00003809b00043860001983180020801800007c0803a64e80002182fb0010947bfffc809b001c386000018317000c801800007c0803a64e80002182db0014809b001c807b000083160008801800007c0803a64e80002182bb001438a00019809b000c3860001783150048801800007c0803a64e800021829b0014947bfffc809b0020386000018314000c801800007c0803a64e800021827b0018809b0020807b000083130008801800007c0803a64e800021825b00183a20003d963bfffc3a000001961bfffc38c0000138a00003388000173860001783120028801800007c0803a64e80002181fb0018947bfffc809b002438600001830f000c801800007c0803a64e80002181db001c809b0024807b0000830e0008801800007c0803a64e800021815b001c38a0000338800017807b000c830a0024801800007c0803a64e8000212c0300014082001838600001813b00207d2803a63b7b00284e800020813b001c80030000941bfffc80030004941bfffc809b002c386000018309000c801800007c0803a64e800021811b0024809b002c807b000483080008801800007c0803a64e800021807b00003b7b0008800d00187c1b004040a00010800d00207c0803a64e8000214bffff7c2c19fff140820068831b001882f8003482d700003980000256c0f80140a20010800d00347c0803a64e8000217eacb41141a3fff092b70000829b0010931b001838c0ffff38a0003738800001807b00088314004c833b0014801800007c0903a67f2803a63b7b00184e8004202c190013408200cc831b001038a00003809b00043860001983180020801800007c0803a64e80002182fb0010947bfffc809b001c386000018317000c801800007c0803a64e80002182db0014809b001c807b000083160008801800007c0803a64e80002182bb001438a00001809b000c3860001983150050801800007c0803a64e800021829b0014947bfffc809b0020386000018314000c801800007c0803a64e800021827b0018825b002038920000807b000083130008833b001c801800007c0903a67f2803a63b7b00244e800420831b001082f8005482d70004398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003e8002a26294226c929500083e6002a06273c7ac92750004825600009255000038750000800d00287c0803a64e800021|@739,1048575|836,3,@461 884,3,@463 1452,3,@461 1500,3,@463 2068,3,@461 2116,3,@463 2772,3,@461 2820,3,@463 7464,3,@738 7476,3,@227 738:S32|67656e52523a20556e696d706c656d656e74656420696e737472756374696f6e 739:S22|505043434f4445434f4e5328292e67656e5252283529 740:O4|@742,@744,@741,@675 741:O5|@753,@761,@744,@752,@608 742:C2,304|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0400374082004082c5003482b600003a8000093995ffff7e8ba8385560f80140a20010800d00347c0803a64e8000217e8b0e707eec5dd741a3ffec3af70001480000083ae000012c0300374082001882a500343a800001929500003ac00001480000083ac00001973bfffc971bfffc94bbfffc38b700008318000c801800007c0803a64e8000212c030001408200183860000182bb00087ea803a63b7b000c4e80002082bb000480030000941bfffc80030004941bfffc809b00083860000183150008801800007c0803a64e800021829b000c809b0008807b000483140004801800007c0803a64e800021807b00003b7b0008800d00187c1b004040a00010800d00207c0803a64e8000214bffff7c|@743,1048575| 743:S24|505043434f4445434f4e5328292e67656e4d6f7665283329 744:O2|@746,@745 745:O2|@748,@608 746:C2,216|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e4004082d700002c1600014082001c82c4002882b60000281500014082000c386000014e800020973bfffc947bfffc949bfffc3864000083180004801800007c0803a64e80002182bb00008295000082740000967bfffc80b5000438930000807b00083c0002a1600031087c0803a64e800021825b0004823b0000398000025620f80140a20010800d00347c0803a64e8000217e11661541a3fff081f20000920f00003860000181db000c7dc803a63b7b00104e800020|@747,1048575|132,3,@441 747:S34|505043434f4445434f4e5328292e67656e526177496e737472756374696f6e283229 748:C2,280|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e3000082d7000082a30040829500002c1400014082000c386000014e8000208263002882530000823500003a19000039f8000039c30000395600003934000038910000387200003c0002a2600026b87c0803a64e800021808e002890640000961bfffc95fbfffc95dbfffc800e0040941bfffc955bfffc2c09000140820008480000588069000083230000831b000c80090004941bfffc80bb000c809b00043879000083180004801800007c0803a64e800021813b00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffffa4807b00043b2000019323000038600001831b00107f0803a63b7b00144e800020|@751,1048575|104,3,@749 749:C2,296|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c040001408200084e8000208304000082f8000082d700002c160001408200782c0300014082000c82b700084800005882b7000872ab00014082004882830000281400014182000c82750000480000083a600001398000013bbdfff87c1df04040a00010800d001c7c0803a64e8000213abd0004919d000092750000480000083aa3000080840004387500007f2803a64bffff582c0300014082000c82b700084800005882970008728b00014082004882630000281300014182000c82540000480000083a400001398000013bbdfff87c1df04040a00010800d001c7c0803a64e8000213abd0004919d000092550000480000083aa3000080840004387500007f2803a64bfffee4|@750,1044483| 750:S36|505043434f4445434f4e5328292e6d65726765436163686553746174654c697374283229 751:S28|505043434f4445434f4e5328292e7265616c6c794669787570283129 752:O4|72,0,0,0 753:C2,608|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021398038325460f80140a20010800d00347c0803a64e8000217ee3641141a3fff0949bfffc971bfffc96fbfffc8064000082c3000082a40044829500003994ffff7ecba0385560f80140a20010800d00347c0803a64e8000217e6cb41141a3fff07e6bb838556bf80140a20010800d00347c0803a64e8000217c13b800408101b482e4003482d700003a8000019297000082640040829300002c1400014082001c8284002882540000281200014082000c3a200001480000f4973bfffc96dbfffc8078000c83180008801800007c0803a64e800021827b001082530000823200003980fffe5620f80140a20010800d00347c0803a64e8000217e11661541a3fff081f3002881cf0000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021395d0004919d000091ca0008920a00043920ffff912a00003d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e800021391d0004919d000091480000398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138fd0004919d000038c0000190c700049107000038a0000190af00003a2700004800000c973bfffc96dbfffc821b001081f000443dc0400039ceffff91cf000081500014806a0000963bfffc955bfffc3b1b00183c0002a260002adc7c0803a64e800021813b000090690000811b0014809b0018807b000483080004801800007c0803a64e80002180fb001880c7003480bb000890a6000038600001809b000c7c8803a63b7b001c4e800020386000017f2803a63b7b000c4e800020|@760,1048575|472,2,536870911 504,3,@754 754:C2,900|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e80002082f8000082d7004082b60000973bfffc971bfffc80030000941bfffc80030004941bfffc2c1500014082000c3a8000014800007c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008095000090830004833b000493230000827500043c0002a260002e7c7c0803a64e800021280300014182000c3a800003480000243ab30000800d00187c1b004040a00010800d00207c0803a64e8000214bffff7c2814000141820054807b0000831b00084bffff15398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021389d0004919d000090640004807b00049064000038640000833b000c7f2803a63b7b00104e800020807b0000831b00084bfffec5809b000483240000831900002c18ffff4082001482fb000c7ee803a63b7b00104e80002082fb000882d7000082b6000082950000827900043993ffff7e8b98385560f80140a20010800d00347c0803a64e8000217e4ca41141a3fff08237fff87e4b8838556bf80140a20010800d00347c0803a64e8000217c1288004081014c825600288212000081f6004081cf000039430000813900083914000038f20000388e0000387000003c0002a2600026b87c0803a64e80002190670000809b000480640000833b00088319fffc955bfffc953bfffc80b900003888000083180010801800007c0803a64e80002182fb001082d7000082b60000829500008277fffc8255000096dbfffc969bfffc965bfffc80b60004389200008073000c3c0002a1600031087c0803a64e800021823b0008821b0000398000025600f80140a20010800d00347c0803a64e8000217df0661541a3fff081d1000091ee0000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021395d0004919d0000813b000c912a0008811b0004910a000438e0ffff90ea000080db00189146000080bb001c80850000806400283b20000193230000807b0010831b00207f0803a63b7b00244e8000208217000081f0004481cf00007e6b7038556bf80140a20010800d00347c0803a64e8000217c13700040800010926f0000394000014800000839400001398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021395d0004919d0000906a0004908a0000386a0000813b000c7d2803a63b7b00104e800020|@759,1048575|156,3,@755 488,3,@749 604,3,@441 755:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180830004806300003c0002a260002ed07c0903a64e800420|@758,1032195|40,3,@756 756:C2,944|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000217c0320404082000c386000034e800020706b00014182000c386000014e800020708b00014182000c386000014e8000208183fffc558c09fc619800018184fffc558c09fc619700017c18b8404182000c386000014e8000208983fffc558c083c619700018984fffc558c083c619600017ef5b37872b70081281700014182000c386000014e80002072b600032816000141820158570bf80140a20010800d00347c0803a64e8000212c180001408000343ee002a062f7c2743998ffff7eebc0385560f80140a20010800d00347c0803a64e8000217eb7661541a3fff0480000083ab800003b0000093998ffff7eabc0385560f80140a20010800d00347c0803a64e8000217eab0e707eec5dd741a3ffec3af7000172eb00014182000c3ad700004800002c3ac30000387700003f00000063185368801800007c0803a64e8000213ab600003ac3000038750000973bfffc947bfffc949bfffc96dbfffc3b00000182fb00007c18b840408200183860000382db000c7ec803a63b7b00104e80002082db00087f0c0e707d7660ae556b083c61750001809b00047f0c0e707d6460ae556b083c616300017c151840408200283b3800023b190000800d00187c1b004040a00010800d00207c0803a64e8000214bffff9038600001833b000c7f2803a63b7b00104e8000202c1800034082001882a300008064000038830000387500004bfffde82c180005408200c882a300008303000482e4000082c4000472ab0001418200207c15b8404082001038960000387800004bfffdb4386000014e80002072eb00014182000c386000014e800020730b0001418200207c18b0404082001038970000387500004bfffd80386000014e80002072cb00014182000c386000014e800020973bfffc971bfffc96dbfffc38970000387500004bfffd49280300014182001c809b0000807b0004833b00087f2803a63b7b000c4bfffd303860000182bb00087ea803a63b7b000c4e8000203ab8fffe973bfffc947bfffc949bfffc2c1500014082000c3a80000348000060809b000456ac083a7c64602e833b000056ac083a7f19602e96bbfffc389800004bfffcd1280300014182002c82fb00003ab7fffe3b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffffa03a8000013b7b0004281400014182002c82fb000482d7000082bb0000829500003894000038760000833b00087f2803a63b7b000c4bfffc703860000182fb00087ee803a63b7b000c4e800020|@757,1032195|208,3,@180 332,3,I152 757:S32|537472756374757265457175616c6974792e7374727563747572654571283229 758:S32|537472756374757265457175616c6974792e7374727563747572654571283129 759:S48|505043434f4445434f4e5328292e636865636b4272616e63684c697374283229636f6e766572744c6162656c73283129 760:S32|505043434f4445434f4e5328292e636865636b4272616e63684c697374283229 761:O3|@762,@744,@675 762:C2,400|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021949bfffc2c03000140820010386000013b7b00044e80002082e4003482d700003aa000093995ffff7ecba8385560f80140a20010800d00347c0803a64e8000217ecb0e707e8c5dd741a3ffec3a9400013ac0000192d70000973bfffc971bfffc947bfffc38b40000388000373860003783180008801800007c0803a64e8000212c0300014082000c3aa000014800004c829b000480030004941bfffc809b00108063000083140004801800007c0803a64e800021807b00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffffac829b000c82740028825300002c1200014082002880b40040807b00003b1b000c3c0002a2600035087c0803a64e8000213a2300004800000c823b000080b40040821b000c81f0004081cf00002c0e00014082000c395100004800002895dbfffc387100003b1b00103c0002a2600037e47c0803a64e800021394300003b7b00049145000038600001813b00087d2803a63b7b00104e800020|@766,1048575|280,3,@763 352,3,@765 763:C2,660|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e80002082f8000082c3000082b60000829500002c1400014082013c8277000082530000823500043991ffff7e4b88385560f80140a20010800d00347c0803a64e8000217e0c941141a3fff02c100003408200ac9233000039590000393800008103000480f5000838970000387100003c0002a16000af807c0803a64e8000218089000080640028832300002c1900014082000c3b0700004800005470eb00014082004882f90000281700014182000c82c70000480000083ac00001398000013bbdfff87c1df04040a00010800d001c7c0803a64e8000213b1d0004919d000092d80000480000083b19000093030000386800007d4803a64e800020973bfffc971bfffc96dbfffc806300044bfffec9398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002139fd0004919d0000906f000481db000091cf0000386f0000815b00087d4803a63b7b000c4e8000208277000082530000823500043991ffff7e4b88385560f80140a20010800d00347c0803a64e8000217e0c941141a3fff02c100003408200889233000081f8000081cf0028814e00002c0a00014082000c813500084800005881150008710b00014082004880ea0000280700014182000c80c800004800000838c00001398000013bbdfff87c1df04040a00010800d001c7c0803a64e800021393d0004919d000090c9000048000008392a0000912e0000806300047f2803a64e800020973bfffc971bfffc96dbfffc806300044bfffdb5398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002139fd0004919d0000906f000481db000091cf0000386f0000815b00087d4803a63b7b000c4e800020|@764,1048571|156,3,@612 764:S34|505043434f4445434f4e5328292e6669787570283229636865636b4c616273283129 765:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c8078fff04e800020973bfffc971bfffc80030000941bfffc806300044bffffbd398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b00009319000038790000833b00087f2803a63b7b000c4e800020|@468,786433| 766:S22|505043434f4445434f4e5328292e6669787570283229 767:O5|@768,@744,@741,@314,@675 768:C2,1356|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c03003740820008480000182c040037408200084800000c2c050037408200d482db000082b60034829500003a6000093993ffff7e8b98385560f80140a20010800d00347c0803a64e8000217e8b0e707e4c5dd741a3ffec3a5200013a80000192950000973bfffc971bfffc947bfffc949bfffc94bbfffc94dbfffc38b20000388000373860003783180010801800007c0803a64e8000212c0300014082000c3ae0000148000068827b001080030004941bfffc809b001c8063000083130004801800007c0803a64e800021807b00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffffac3ae00001973bfffc971bfffc947bfffc949bfffc94bbfffc94dbfffc833b000c572bf80140a20010800d00347c0803a64e8000212c19000141800028572bf80140a20010800d00347c0803a64e8000212c1900414080000c3b190000480000ec3880ffff387900003c0002a06000fe6c7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b1d0004919d00003ee002a162f7ba1492f8000490780000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000930300043ec002a162d6ba4892c300003c0002a1600005347c0803a64e80002182bb00108295000c82740004398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a5d0004919d0000907200083e2002a06231c7ac92320004821300009212000038720000800d00287c0803a64e80002182fb000856ebf80140a20010800d00347c0803a64e8000212c1700014180002856ebf80140a20010800d00347c0803a64e8000212c1700414080000c3ad70000480000f0971bfffc3880ffff387700003c0002a06000fe6c7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002a162b5ba1492b6000490760000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092c300043e8002a16294ba48928300003c0002a1600005347c0803a64e800021827b00148253000c82320004398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a1d0004919d0000907000083de002a061efc7ac91f0000481d1000091d0000038700000800d00287c0803a64e80002182bb000456abf80140a20010800d00347c0803a64e8000212c1500014180002856abf80140a20010800d00347c0803a64e8000212c1500414080000c3a950000480000f4971bfffc96dbfffc3880ffff387500003c0002a06000fe6c7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a9d0004919d00003e6002a16273ba149274000490740000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000928300043e4002a16252ba48924300003c0002a1600005347c0803a64e800021823b00188211000c81f00004398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002139dd0004919d0000906e00083d4002a0614ac7ac914e0004812f0000912e0000386e0000800d00287c0803a64e8000213a780000807b00003c0002a16000cf007c0803a64e800021947bfffc825b0020965bfffc38d4000038b60000389300003860fff73c0002a16000d0787c0803a64e800021823b0010947bfffc809b001c3860000183110008801800007c0803a64e800021821b001481fb001c388f0000807b000083100004833b0018801800007c0903a67f2803a63b7b00244e800420|@769,1048575|376,3,@316 428,3,@620 484,3,@622 496,3,@325 564,3,@227 680,3,@316 732,3,@620 788,3,@622 800,3,@325 868,3,@227 988,3,@316 1040,3,@620 1096,3,@622 1108,3,@325 1176,3,@227 1220,3,@653 1264,3,@655 769:S23|505043434f4445434f4e5328292e67656e583331283629 770:O10|@772,@761,@744,@741,@650,@651,@775,@675,@782,@771 771:O2|@787,@314 772:C2,660|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc949bfffc3ae0000196fbfffc3ac0000396dbfffc38c0000138a0003f388300003860000183180024801800007c0803a64e80002182bb0004947bfffc809b0004386000018315000c801800007c0803a64e800021829b0008809b0004807b000083140008801800007c0803a64e800021827b0008809b00043860000983130020801800007c0803a64e800021825b0004823200348211000039e00009398fffff7e0b78385560f80140a20010800d00347c0803a64e8000217e0b0e707dcc5dd741a3ffec39ce00013940000191510000813b0008947bfffc38ae000038800037386000378309001c801800007c0803a64e8000212c0300014082000c390000014800004c80fb000c80030004941bfffc809b000c8063000083070008801800007c0803a64e800021807b00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffffac80fb000880c7000080a60000809b000c94bbfffc38c7000038a00001806400183880001b3b230000386000693b190000801800007c0803a64e800021831b00103860000183180014801800007c0803a64e80002182fb0010947bfffc809b0010386000018317000c801800007c0803a64e80002182db0014809b0010807b000083160008801800007c0803a64e80002182bb001480150010941bfffc809b0014386000018315000c801800007c0803a64e800021829b0018809b0014807b000083140008801800007c0803a64e800021827b0018809b0014807b000c83130004801800007c0803a64e800021825b0014823200283e0002a2621041349211000081f2002c39c0000391cf0000807b0008815b001c7d4803a63b7b00204e800020|@774,1048575|616,3,@773 773:O1|0 774:S28|505043434f4445434f4e5328292e67656e5461675465737431283229 775:O8|@777,@314,@744,@741,@658,@663,@776,@675 776:O2|@780,@314 777:C2,1052|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c05001740820008480000102c04001741820008480000b0973bfffc80d8000480a6000480050000941bfffc3880ffff386000173c0002a06000fe6c7c0803a64e80002138830000386000e53c0002a1600074a87c0803a64e800021388300003c6002a2606345c83c0002a1600074a87c0803a64e800021398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021389d0004919d0000906400083c6002a06063c7ac90640004833b00009324000038640000800d00287c0803a64e8000212c050037408200d082c6003482b600003a8000093994ffff7eaba0385560f80140a20010800d00347c0803a64e8000217eab0e707e6c5dd741a3ffec3a7300013a40000192560000973bfffc971bfffc947bfffc949bfffc94bbfffc94dbfffc38b3000038800037386000378318001c801800007c0803a64e8000212c0300014082000c3ae0000148000068823b001080030004941bfffc809b00048063000083110008801800007c0803a64e800021807b00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffffac3ae00001973bfffc971bfffc947bfffc949bfffc94bbfffc94dbfffc82bb00082c1500374082006c829b000082740034825300003a2000093992ffff7e2b90385560f80140a20010800d00347c0803a64e8000217e2b0e707e0c5dd741a3ffec3a10000181fb000c3990ffff7deb80385560f80140a20010800d00347c0803a64e8000217ecf661541a3fff04800000882db000c3e80ffff3a9400017e8bb038556bf80140a20010800d00347c0803a64e8000217c14b000418100ac3e6000013a7300017ecb9838556bf80140a20010800d00347c0803a64e8000217c16980040800084825b00103876000083120014801800007c0803a64e800021823b001038a30000809b0008807b000483110010801800007c0803a64e800021821b0010947bfffc809b0004386000018310000c801800007c0803a64e80002181fb0014809b0004807b0000830f0008833b0018801800007c0903a67f2803a63b7b001c4e800420827b001038b6000038800001386000178313001c801800007c0803a64e8000212c0300014082000848000070825b001080030000941bfffc80030004941bfffc809b0008386000018312000c801800007c0803a64e800021823b0018809b0008807b000483110008801800007c0803a64e800021807b00003b7b0008800d00187c1b004040a00010800d00207c0803a64e8000214bffff8c825b001038a00017809b0008807b000483120018801800007c0803a64e800021823b0010947bfffc809b0004386000018311000c801800007c0803a64e800021821b0014809b0004807b000083100008833b0018801800007c0903a67f2803a63b7b001c4e800420|@779,1048575|84,3,@316 108,3,@511 128,3,@778 136,3,@511 192,3,@227 588,2,-32768 628,2,32768 778:S19|67656e4c6f61643a2063616e27742075736520 779:S24|505043434f4445434f4e5328292e67656e4c6f6164283429 780:C2,1044|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021546bf80140a20010800d00347c0803a64e8000212c03000141800028546bf80140a20010800d00347c0803a64e8000212c0300414080000c3ae30000480000f8973bfffc971bfffc949bfffc94bbfffc3880ffff3c0002a06000fe6c7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d00003f0002a16318ba149319000490790000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000932300043ee002a162f7ba4892e300003c0002a1600005347c0803a64e80002182db000882b6000482950004398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a7d0004919d0000907300083e4002a06252c7ac92530004823400009233000038730000800d00287c0803a64e800021548bf80140a20010800d00347c0803a64e8000212c04000141800028548bf80140a20010800d00347c0803a64e8000212c0400414080000c3ac4000048000100973bfffc971bfffc94bbfffc96fbfffc3ac400003880ffff387600003c0002a06000fe6c7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003e8002a16294ba149295000490750000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a300043e6002a16273ba48926300003c0002a1600005347c0803a64e800021825b00088232000482110004398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002139fd0004919d0000906f00083dc002a061cec7ac91cf000481500000914f0000386f0000800d00287c0803a64e80002154abf80140a20010800d00347c0803a64e8000212c0500014180002854abf80140a20010800d00347c0803a64e8000212c0500414080000c3aa50000480000fc973bfffc971bfffc96fbfffc96dbfffc3880ffff386500003c0002a06000fe6c7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003e8002a16294ba149295000490750000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a300043e6002a16273ba48926300003c0002a1600005347c0803a64e800021825b00088232000482110004398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002139fd0004919d0000906f00083dc002a061cec7ac91cf000481500000914f0000386f0000800d00287c0803a64e8000213a9900003860fff93c0002a16000cf007c0803a64e800021947bfffc3a600001967bfffc38d5000038b60000389700003860fff73b3400003c0002a16000d0787c0903a67f2803a64e800420|@781,1048575|116,3,@316 168,3,@620 224,3,@622 236,3,@325 304,3,@227 432,3,@316 484,3,@620 540,3,@622 552,3,@325 620,3,@227 744,3,@316 796,3,@620 852,3,@622 864,3,@325 932,3,@227 976,3,@653 1024,3,@655 781:S21|505043434f4445434f4e5328292e6c777a78283329 782:O4|@783,@744,@741,@675 783:C2,496|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e4004082d700002c1600014082001c82c4002882b60000281500014082000c386000014e80002082a4003482d500003a8000093994ffff7ecba0385560f80140a20010800d00347c0803a64e8000217ecb0e707e6c5dd741a3ffec3a7300013ac0000192d50000973bfffc971bfffc947bfffc949bfffc38b3000038800037386000378318000c801800007c0803a64e8000212c0300014082000c3aa000014800004c829b000880030004941bfffc809b00048063000083140004801800007c0803a64e800021807b00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffffac947bfffc947bfffc389b0000807b000c3c0002a16000408c7c0803a64e8000213a800001969bfffc3a600001967bfffc38c0000180bb000c809b00083860fffb3c0002a1600042087c0803a64e800021825b0010947bfffc809b000c3860000183120008801800007c0803a64e800021823b0014809b000c807b000083110004801800007c0803a64e800021807b000c3c0002a260004c747c0803a64e8000213a030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000039e0000191e300049203000081db00187dc803a63b7b001c4e800020|@786,1048575|284,3,@461 332,3,@463 412,3,@784 784:C2,264|7f2802a6633900028303000082f800003980fffe56e0f80140a20010800d00347c0803a64e8000217ed7661541a3fff082e3002882b70000398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a9d0004919d000092b4000892d400043aa0000192b400003d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213abd0004919d00009295000082830044827400007ecb9838556bf80140a20010800d00347c0803a64e8000217c1698004080000892d4000082c3001482760000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a5d0004919d00009272000492b2000092560000387500007f2803a64e800020|@785,1044481| 785:S31|505043434f4445434f4e5328292e6d616b6553686f72744c6162656c283129 786:S31|505043434f4445434f4e5328292e707574436f6e646974696f6e616c283229 787:C2,1672|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021546bf80140a20010800d00347c0803a64e8000212c03000141800028546bf80140a20010800d00347c0803a64e8000212c0300414080000c3ae30000480000fc973bfffc971bfffc949bfffc94bbfffc94dbfffc3880ffff3c0002a06000fe6c7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d00003f0002a16318ba149319000490790000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000932300043ee002a162f7ba4892e300003c0002a1600005347c0803a64e80002182db000c82b6000482950004398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a7d0004919d0000907300083e4002a06252c7ac92530004823400009233000038730000800d00287c0803a64e800021548bf80140a20010800d00347c0803a64e8000212c04000141800028548bf80140a20010800d00347c0803a64e8000212c0400414080000c3ac4000048000104973bfffc971bfffc94bbfffc94dbfffc96fbfffc3ac400003880ffff387600003c0002a06000fe6c7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003e8002a16294ba149295000490750000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a300043e6002a16273ba48926300003c0002a1600005347c0803a64e800021825b000c8232000482110004398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002139fd0004919d0000906f00083dc002a061cec7ac91cf000481500000914f0000386f0000800d00287c0803a64e80002154abf80140a20010800d00347c0803a64e8000212c0500014180002854abf80140a20010800d00347c0803a64e8000212c0500414080000c3aa5000048000100973bfffc971bfffc94dbfffc96fbfffc96dbfffc3880ffff386500003c0002a06000fe6c7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003e8002a16294ba149295000490750000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a300043e6002a16273ba48926300003c0002a1600005347c0803a64e800021825b000c8232000482110004398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002139fd0004919d0000906f00083dc002a061cec7ac91cf000481500000914f0000386f0000800d00287c0803a64e80002154cbf80140a20010800d00347c0803a64e8000212c0600014180002854cbf80140a20010800d00347c0803a64e8000212c0600414080000c3a86000048000100973bfffc971bfffc96fbfffc96dbfffc96bbfffc3880ffff386600003c0002a06000fe6c7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a9d0004919d00003e6002a16273ba149274000490740000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000928300043e4002a16252ba48924300003c0002a1600005347c0803a64e800021823b000c8211000481f00004398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002139dd0004919d0000906e00083d4002a0614ac7ac914e0004812f0000912e0000386e0000800d00287c0803a64e800021827b0004566bf80140a20010800d00347c0803a64e8000212c13000141800028566bf80140a20010800d00347c0803a64e8000212c1300414080000c3a53000048000104973bfffc971bfffc96fbfffc96dbfffc96bbfffc969bfffc3880ffff387300003c0002a06000fe6c7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a5d0004919d00003e2002a16231ba149232000490720000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000924300043e0002a16210ba48920300003c0002a1600005347c0803a64e80002181fb001081cf0004814e0004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021393d0004919d0000906900083d0002a06108c7ac9109000480ea000090e9000038690000800d00287c0803a64e800021823b0000929b0004965b0000963bfffc38d5000038b70000389600003860fff13c0002a26000548c7c0903a67f2803a64e800420|@790,1048575|120,3,@316 172,3,@620 228,3,@622 240,3,@325 308,3,@227 440,3,@316 492,3,@620 548,3,@622 560,3,@325 628,3,@227 756,3,@316 808,3,@620 864,3,@622 876,3,@325 944,3,@227 1072,3,@316 1124,3,@620 1180,3,@622 1192,3,@325 1260,3,@227 1396,3,@316 1448,3,@620 1504,3,@622 1516,3,@325 1584,3,@227 1652,3,@788 788:C2,444|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000213af900003c0002a16000437c7c0803a64e800021708b00014182000c3ac400004800002096fbfffc3ac300003c6002a1606330bc800d00287c0803a64e80002170ab00014182000c3aa500004800002096fbfffc3aa300003c6002a1606330bc800d00287c0803a64e80002170cb00014182000c3a8600004800002096fbfffc3a8300003c6002a1606330bc800d00287c0803a64e80002180db000870cb00014182000c38a600004800002096fbfffc38a300003c6002a1606330bc800d00287c0803a64e800021809b0004708b00014182000c3b2400004800002096fbfffc3b2300003c6002a1606330bc800d00287c0803a64e800021546c10386198000156cce8fe558c003c618300017c73c37872c3000f546c2832619800017eb6c378568c18366195000154acf0be558c003c619400017e83ab7870b80007570c303061950001572c083a619400017e85ab78833b00007f382b78398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213abd0004919d00009315000c9075000892d5000492750000387500007ee803a63b7b000c4e800020|@789,1040399|36,3,@464 76,3,@437 120,3,@437 164,3,@437 212,3,@437 260,3,@437 789:S26|505043434f4445434f4e5328292e4d666f726d51756164283729 790:S25|505043434f4445434f4e5328292e726c77696e6d5263283629 791:O2|@792,@314 792:C2,1044|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021546bf80140a20010800d00347c0803a64e8000212c03000141800028546bf80140a20010800d00347c0803a64e8000212c0300414080000c3ae30000480000f8973bfffc971bfffc949bfffc94bbfffc3880ffff3c0002a06000fe6c7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d00003f0002a16318ba149319000490790000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000932300043ee002a162f7ba4892e300003c0002a1600005347c0803a64e80002182db000882b6000482950004398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a7d0004919d0000907300083e4002a06252c7ac92530004823400009233000038730000800d00287c0803a64e800021548bf80140a20010800d00347c0803a64e8000212c04000141800028548bf80140a20010800d00347c0803a64e8000212c0400414080000c3ac4000048000100973bfffc971bfffc94bbfffc96fbfffc3ac400003880ffff387600003c0002a06000fe6c7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003e8002a16294ba149295000490750000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a300043e6002a16273ba48926300003c0002a1600005347c0803a64e800021825b00088232000482110004398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002139fd0004919d0000906f00083dc002a061cec7ac91cf000481500000914f0000386f0000800d00287c0803a64e80002154abf80140a20010800d00347c0803a64e8000212c0500014180002854abf80140a20010800d00347c0803a64e8000212c0500414080000c3aa50000480000fc973bfffc971bfffc96fbfffc96dbfffc3880ffff386500003c0002a06000fe6c7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003e8002a16294ba149295000490750000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a300043e6002a16273ba48926300003c0002a1600005347c0803a64e800021825b00088232000482110004398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002139fd0004919d0000906f00083dc002a061cec7ac91cf000481500000914f0000386f0000800d00287c0803a64e8000213a9900003860fff33c0002a16000cf007c0803a64e800021947bfffc3a600001967bfffc38d5000038b70000389600003860fff73b3400003c0002a16000d0787c0903a67f2803a64e800420|@793,1048575|116,3,@316 168,3,@620 224,3,@622 236,3,@325 304,3,@227 432,3,@316 484,3,@620 540,3,@622 552,3,@325 620,3,@227 744,3,@316 796,3,@620 852,3,@622 864,3,@325 932,3,@227 976,3,@653 1024,3,@655 793:S22|505043434f4445434f4e5328292e7372617769283329 794:O4|@796,@694,@798,@795 795:O2|@801,@314 796:C2,364|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc947bfffc973bfffc971bfffc947bfffc949bfffc389b0010386500008318000c801800007c0803a64e800021947bfffc947bfffc833b001c2c1900014082003c831b001080bb0018809b0008807b000c83180004801800007c0803a64e8000213afb0000907700003adb00003aa0000192b6000448000090831b001038b90000809b0008807b000c83180008801800007c0803a64e80002182fb0010947bfffc80bb001c809b0010807b001083170004801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213add0004919d00003aa0000192b60004907600003a9b0004827b0000927400003a5b000492d200043b7b0004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000823b000092230000821b00049203000481fb00147de803a63b7b00204e800020|@797,1048575| 797:S24|505043434f4445434f4e5328292e6f72496d6d6564283329 798:O2|@799,@314 799:C2,692|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021546bf80140a20010800d00347c0803a64e8000212c03000141800028546bf80140a20010800d00347c0803a64e8000212c0300414080000c3ae30000480000f8973bfffc971bfffc949bfffc94bbfffc3880ffff3c0002a06000fe6c7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d00003f0002a16318ba149319000490790000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000932300043ee002a162f7ba4892e300003c0002a1600005347c0803a64e80002182db000882b6000482950004398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a7d0004919d0000907300083e4002a06252c7ac92530004823400009233000038730000800d00287c0803a64e800021548bf80140a20010800d00347c0803a64e8000212c04000141800028548bf80140a20010800d00347c0803a64e8000212c0400414080000c3ac4000048000100973bfffc971bfffc94bbfffc96fbfffc3ac400003880ffff387600003c0002a06000fe6c7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003e8002a16294ba149295000490750000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a300043e6002a16273ba48926300003c0002a1600005347c0803a64e800021825b00088232000482110004398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002139fd0004919d0000906f00083dc002a061cec7ac91cf000481500000914f0000386f0000800d00287c0803a64e80002138c5000038b70000389600003860000f3c0002a16000d5347c0903a67f2803a64e800420|@800,1048575|116,3,@316 168,3,@620 224,3,@622 236,3,@325 304,3,@227 432,3,@316 484,3,@620 540,3,@622 552,3,@325 620,3,@227 672,3,@660 800:S21|505043434f4445434f4e5328292e6f726973283329 801:C2,1368|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021546bf80140a20010800d00347c0803a64e8000212c030001408000343ec002a262d665403983ffff7ecb18385560f80140a20010800d00347c0803a64e8000217ef6661541a3fff0480000083ae30000973bfffc971bfffc947bfffc949bfffc96fbfffc3c80000238840001387700003f00000063184e28801800007c0803a64e8000212c0300014082000848000038546bf80140a20010800d00347c0803a64e8000212c0300014180000c3b200003480000083b20000128190003418200084800000c3b230000480000243d8000025460f80140a20010800d00347c0803a64e8000217f23661541a3fff0831b0000570bf80140a20010800d00347c0803a64e8000212c1800014180000c3ae00003480000083ae000012c1700034082000c3ad80000480000283d800002398cfffe5700f80140a20010800d00347c0803a64e8000217eccc41141a3fff0973bfffc3c80000238840001387600003f00000063184e08801800007c0803a64e800021546bf80140a20010800d00347c0803a64e8000212c030001418000343ea000023ab500017c6ba838556bf80140a20010800d00347c0803a64e8000217c03a8004080000c3a800001480000f0947bfffc3880ffff807b00103c0002a06000fe6c7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003e8002a26294654c9295000490750000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a300043e6002a262736584926300003c0002a1600005347c0803a64e800021825b00148232000482110004398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002139fd0004919d0000906f00083dc002a061cec7ac91cf000481500000914f0000386f0000800d00287c0803a64e800021827b0000566bf80140a20010800d00347c0803a64e8000212c130001418000343e4000023a5200017e6b9038556bf80140a20010800d00347c0803a64e8000217c1390004080000c3a330000480000f0947bfffc3880ffff387300003c0002a06000fe6c7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a5d0004919d00003e2002a16231efac9232000490720000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000924300043e0002a16210efe4920300003c0002a1600005347c0803a64e80002181fb001481cf0004814e0004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021393d0004919d0000906900083d0002a06108c7ac9109000480ea000090e9000038690000800d00287c0803a64e800021546bf80140a20010800d00347c0803a64e8000212c030001418000343e0000023a1000017c6b8038556bf80140a20010800d00347c0803a64e8000217c0380004080000c39e30000480000ec963bfffc3880ffff3c0002a06000fe6c7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a1d0004919d00003de002a161efefac91f0000490700000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000920300043dc002a161ceefe491c300003c0002a1600005347c0803a64e800021815b0014812a000481090004398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002138fd0004919d0000906700083cc002a060c6c7ac90c7000480a8000090a7000038670000800d00287c0803a64e80002181db0008922e000091ee000438600001815b00147d4803a63b7b00184e800020|@806,1048575|60,3,@802 132,2,65536 144,3,I110 368,2,65536 380,3,I109 428,2,65536 488,3,@316 540,3,@803 596,3,@805 608,3,@325 676,3,@227 744,2,65536 804,3,@316 856,3,@690 912,3,@692 924,3,@325 992,3,@227 1056,2,65536 1112,3,@316 1164,3,@690 1220,3,@692 1232,3,@325 1300,3,@227 802:B8|0000000001000000 803:O2|@804,0 804:S33|20696e746f20612033322d62697420756e7369676e656420696d6d656469617465 805:S32|73706c6974556e7369676e6564496e743a2063616e277420636f6e7665727420 806:S33|505043434f4445434f4e5328292e73706c6974556e7369676e6564496e74283229 807:O2|@808,@314 808:C2,372|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021546bf80140a20010800d00347c0803a64e8000212c03000141800028546bf80140a20010800d00347c0803a64e8000212c0300414080000c3ae30000480000f4973bfffc971bfffc949bfffc3880ffff3c0002a06000fe6c7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d00003f0002a16318ba149319000490790000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000932300043ee002a162f7ba4892e300003c0002a1600005347c0803a64e80002182db000482b6000482950004398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a7d0004919d0000907300083e4002a06252c7ac92530004823400009233000038730000800d00287c0803a64e80002138c4000038b7000038800001386000073c0002a16000d5347c0903a67f2803a64e800420|@809,1048575|112,3,@316 164,3,@620 220,3,@622 232,3,@325 300,3,@227 352,3,@660 809:S21|505043434f4445434f4e5328292e636d7069283229 810:O2|@811,@314 811:C2,1044|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021546bf80140a20010800d00347c0803a64e8000212c03000141800028546bf80140a20010800d00347c0803a64e8000212c0300414080000c3ae30000480000f8973bfffc971bfffc949bfffc94bbfffc3880ffff3c0002a06000fe6c7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d00003f0002a16318ba149319000490790000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000932300043ee002a162f7ba4892e300003c0002a1600005347c0803a64e80002182db000882b6000482950004398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a7d0004919d0000907300083e4002a06252c7ac92530004823400009233000038730000800d00287c0803a64e800021548bf80140a20010800d00347c0803a64e8000212c04000141800028548bf80140a20010800d00347c0803a64e8000212c0400414080000c3ac4000048000100973bfffc971bfffc94bbfffc96fbfffc3ac400003880ffff387600003c0002a06000fe6c7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003e8002a16294ba149295000490750000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a300043e6002a16273ba48926300003c0002a1600005347c0803a64e800021825b00088232000482110004398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002139fd0004919d0000906f00083dc002a061cec7ac91cf000481500000914f0000386f0000800d00287c0803a64e80002154abf80140a20010800d00347c0803a64e8000212c0500014180002854abf80140a20010800d00347c0803a64e8000212c0500414080000c3aa50000480000fc973bfffc971bfffc96fbfffc96dbfffc3880ffff386500003c0002a06000fe6c7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003e8002a16294ba149295000490750000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a300043e6002a16273ba48926300003c0002a1600005347c0803a64e800021825b00088232000482110004398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002139fd0004919d0000906f00083dc002a061cec7ac91cf000481500000914f0000386f0000800d00287c0803a64e8000213a990000386000073c0002a16000cf007c0803a64e800021947bfffc3a600001967bfffc38d5000038b60000389700003860fff73b3400003c0002a16000d0787c0903a67f2803a64e800420|@812,1048575|116,3,@316 168,3,@620 224,3,@622 236,3,@325 304,3,@227 432,3,@316 484,3,@620 540,3,@622 552,3,@325 620,3,@227 744,3,@316 796,3,@620 852,3,@622 864,3,@325 932,3,@227 976,3,@653 1024,3,@655 812:S21|505043434f4445434f4e5328292e6c627a78283329 813:O10|@815,@314,@744,@741,@819,@771,@814,@663,@736,@675 814:O2|@822,@314 815:C2,1580|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c03001740820008480000102c05001741820008480000b0973bfffc80d8000480a6000480050000941bfffc3880ffff386000173c0002a06000fe6c7c0803a64e80002138830000386000e53c0002a1600074a87c0803a64e800021388300003c6002a2606372703c0002a1600074a87c0803a64e800021398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021389d0004919d0000906400083c6002a06063c7ac90640004833b00009324000038640000800d00287c0803a64e8000212c030037408200d482db000082b60034829500003a6000093993ffff7e8b98385560f80140a20010800d00347c0803a64e8000217e8b0e707e4c5dd741a3ffec3a5200013a20000192350000973bfffc971bfffc947bfffc949bfffc94bbfffc94dbfffc38b20000388000373860003783180024801800007c0803a64e8000212c0300014082000c3ae0000148000068821b001080030004941bfffc809b001c8063000083100008801800007c0803a64e800021807b00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffffac3ae00001973bfffc971bfffc947bfffc949bfffc94bbfffc94dbfffc82bb00042c1500374082006c829b001882740034825300003a2000093992ffff7e2b90385560f80140a20010800d00347c0803a64e8000217e2b0e707e0c5dd741a3ffec3a10000181fb00083990ffff7deb80385560f80140a20010800d00347c0803a64e8000217ecf661541a3fff04800000882db0008829b00002c14ffff418201482c16000141820064827b00108253000482320004398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a1d0004919d00003de002a261ef728c91f000083dc002a061cec7ac91d00004815100009150000038700000800d00287c0803a64e800021827b00103a40003b965bfffc3a200001963bfffc38c0000138a00003389400003860001783130014801800007c0803a64e800021821b0010947bfffc809b001c386000018310000c801800007c0803a64e80002181fb0014809b001c807b0000830f0008801800007c0803a64e80002181db001438a00017809b0008807b0010830e0010801800007c0803a64e800021815b0014947bfffc809b002038600001830a000c801800007c0803a64e800021813b0018811b002038880000807b000083090008833b001c801800007c0903a67f2803a63b7b00244e8004203e60ffff3a7300017e6bb038556bf80140a20010800d00347c0803a64e8000217c13b000418101643e4000013a5200017ecb9038556bf80140a20010800d00347c0803a64e8000217c1690004080013c2c150037408200b0823b00082c110001408200a42c14ffff4082009c821b0010387600008310001c801800007c0803a64e80002181fb001038a30000809b0004807b000c830f0018801800007c0803a64e80002181db0010947bfffc809b001c38600001830e000c801800007c0803a64e800021815b0014809b001c807b0000830a0008801800007c0803a64e800021813b001c8109003438e0000190e800003860000180db00187cc803a63b7b00204e800020823b0010387600008311001c801800007c0803a64e800021821b001038a30000809b0004807b000c83100020801800007c0803a64e80002181fb0010947bfffc809b001c38600001830f000c801800007c0803a64e80002181db0014815b001c388a0000807b0000830e0008833b0018801800007c0903a67f2803a63b7b00204e800420825b001038b60000388000013860001783120024801800007c0803a64e8000212c0300014082000848000070823b001080030000941bfffc80030004941bfffc809b0020386000018311000c801800007c0803a64e800021821b0018809b0020807b000483100008801800007c0803a64e800021807b00003b7b0008800d00187c1b004040a00010800d00207c0803a64e8000214bffff8c823b001038a00017809b0004807b000c83110010801800007c0803a64e800021821b0010947bfffc809b001c386000018310000c801800007c0803a64e80002181fb001481db001c388e0000807b0000830f0008833b0018801800007c0903a67f2803a63b7b00204e800420|@818,1048575|84,3,@316 108,3,@511 128,3,@816 136,3,@511 192,3,@227 660,3,@817 672,3,@227 928,2,-32768 968,2,32768 816:S20|67656e53746f72653a2063616e27742075736520 817:S36|67656e53746f72653a20696e6465782077697468206e6f6e2d7a65726f206f6666736574 818:S29|505043434f4445434f4e5328292e67656e53746f7265576f7264283529 819:O2|@820,@314 820:C2,1044|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021546bf80140a20010800d00347c0803a64e8000212c03000141800028546bf80140a20010800d00347c0803a64e8000212c0300414080000c3ae30000480000f8973bfffc971bfffc949bfffc94bbfffc3880ffff3c0002a06000fe6c7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d00003f0002a16318ba149319000490790000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000932300043ee002a162f7ba4892e300003c0002a1600005347c0803a64e80002182db000882b6000482950004398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a7d0004919d0000907300083e4002a06252c7ac92530004823400009233000038730000800d00287c0803a64e800021548bf80140a20010800d00347c0803a64e8000212c04000141800028548bf80140a20010800d00347c0803a64e8000212c0400414080000c3ac4000048000100973bfffc971bfffc94bbfffc96fbfffc3ac400003880ffff387600003c0002a06000fe6c7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003e8002a16294ba149295000490750000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a300043e6002a16273ba48926300003c0002a1600005347c0803a64e800021825b00088232000482110004398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002139fd0004919d0000906f00083dc002a061cec7ac91cf000481500000914f0000386f0000800d00287c0803a64e80002154abf80140a20010800d00347c0803a64e8000212c0500014180002854abf80140a20010800d00347c0803a64e8000212c0500414080000c3aa50000480000fc973bfffc971bfffc96fbfffc96dbfffc3880ffff386500003c0002a06000fe6c7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003e8002a16294ba149295000490750000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a300043e6002a16273ba48926300003c0002a1600005347c0803a64e800021825b00088232000482110004398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002139fd0004919d0000906f00083dc002a061cec7ac91cf000481500000914f0000386f0000800d00287c0803a64e8000213a9900003860fff13c0002a16000cf007c0803a64e800021947bfffc3a600001967bfffc38d5000038b60000389700003860fff73b3400003c0002a16000d0787c0903a67f2803a64e800420|@821,1048575|116,3,@316 168,3,@620 224,3,@622 236,3,@325 304,3,@227 432,3,@316 484,3,@620 540,3,@622 552,3,@325 620,3,@227 744,3,@316 796,3,@620 852,3,@622 864,3,@325 932,3,@227 976,3,@653 1024,3,@655 821:S21|505043434f4445434f4e5328292e73747778283329 822:C2,692|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021546bf80140a20010800d00347c0803a64e8000212c03000141800028546bf80140a20010800d00347c0803a64e8000212c0300414080000c3ae30000480000f8973bfffc971bfffc949bfffc94bbfffc3880ffff3c0002a06000fe6c7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d00003f0002a16318ba149319000490790000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000932300043ee002a162f7ba4892e300003c0002a1600005347c0803a64e80002182db000882b6000482950004398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a7d0004919d0000907300083e4002a06252c7ac92530004823400009233000038730000800d00287c0803a64e800021548bf80140a20010800d00347c0803a64e8000212c04000141800028548bf80140a20010800d00347c0803a64e8000212c0400414080000c3ac4000048000100973bfffc971bfffc94bbfffc96fbfffc3ac400003880ffff387600003c0002a06000fe6c7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003e8002a16294ba149295000490750000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a300043e6002a16273ba48926300003c0002a1600005347c0803a64e800021825b00088232000482110004398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002139fd0004919d0000906f00083dc002a061cec7ac91cf000481500000914f0000386f0000800d00287c0803a64e80002138c5000038b6000038970000386000133c0002a16000d5347c0903a67f2803a64e800420|@823,1048575|116,3,@316 168,3,@620 224,3,@622 236,3,@325 304,3,@227 432,3,@316 484,3,@620 540,3,@622 552,3,@325 620,3,@227 672,3,@660 823:S21|505043434f4445434f4e5328292e73747775283329 824:C2,692|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021546bf80140a20010800d00347c0803a64e8000212c03000141800028546bf80140a20010800d00347c0803a64e8000212c0300414080000c3ae30000480000f8973bfffc971bfffc949bfffc94bbfffc3880ffff3c0002a06000fe6c7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d00003f0002a16318ba149319000490790000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000932300043ee002a162f7ba4892e300003c0002a1600005347c0803a64e80002182db000882b6000482950004398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a7d0004919d0000907300083e4002a06252c7ac92530004823400009233000038730000800d00287c0803a64e800021548bf80140a20010800d00347c0803a64e8000212c04000141800028548bf80140a20010800d00347c0803a64e8000212c0400414080000c3ac4000048000100973bfffc971bfffc94bbfffc96fbfffc3ac400003880ffff387600003c0002a06000fe6c7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003e8002a16294ba149295000490750000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a300043e6002a16273ba48926300003c0002a1600005347c0803a64e800021825b00088232000482110004398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002139fd0004919d0000906f00083dc002a061cec7ac91cf000481500000914f0000386f0000800d00287c0803a64e80002138c5000038b60000389700003860ffef3c0002a16000d5347c0903a67f2803a64e800420|@825,1048575|116,3,@316 168,3,@620 224,3,@622 236,3,@325 304,3,@227 432,3,@316 484,3,@620 540,3,@622 552,3,@325 620,3,@227 672,3,@660 825:S20|505043434f4445434f4e5328292e737477283329 826:O2|@827,@775 827:C2,64|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180c3000c80a30008808300048063000083180004801800007c0903a64e800420|@828,1048575| 828:S24|505043434f4445434f4e5328292e67656e4c6f6164283129 829:O2|@831,@830 830:O2|@833,@813 831:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@832,1048575| 832:S24|505043434f4445434f4e5328292e67656e50757368283129 833:C2,112|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e4003482d700003980000256c0f80140a20010800d00347c0803a64e8000217eacb41141a3fff092b70000949bfffc38c0ffff38a000373880000183180004801800007c0903a67f2803a64e800420|@834,1048575| 834:S24|505043434f4445434f4e5328292e67656e50757368283229 835:O2|@837,@836 836:O12|@839,@314,@744,@741,@736,@675,@761,@650,@651,@775,@782,@767 837:C2,64|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180c3000c80a30008808300048063000083180004801800007c0903a64e800420|@838,1048575| 838:S27|505043434f4445434f4e5328292e616c6c6f6353746f7265283129 839:C2,1516|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021546bf80140a20010800d00347c0803a64e8000212c03000340800008480000303ee002003af700017eeb1838556bf80140a20010800d00347c0803a64e8000217c1718004081000848000064973bfffc82f8000480d70004398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002138bd0004919d00003c8002a2608485a0908500083c6002a06063c7ac90650004808600009085000038650000800d00287c0803a64e800021398000025460f80140a20010800d00347c0803a64e8000217ee3661541a3fff03ac000093996ffff7eebb0385560f80140a20010800d00347c0803a64e8000217eeb0e707eac5dd741a3ffec3ab500013ee002003af700013997ffff7c8bb8385560f80140a20010800d00347c0803a64e8000217c8b0e707ecc5dd741a3ffec3ad600013996ffff7c6bb0385560f80140a20010800d00347c0803a64e8000217c83661541a3fff08066003482e300003ac000093996ffff7eebb0385560f80140a20010800d00347c0803a64e8000217eeb0e707e8c5dd741a3ffec3a9400013ae0000192e30000973bfffc971bfffc94bbfffc94dbfffc96bbfffc949bfffc38b40000388000373860003783180014801800007c0803a64e8000212c0300014082000c3ac000014800004c82bb001080030004941bfffc809b000c8063000083150008801800007c0803a64e800021807b00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffffac82bb001080bb0000388000013860001983150014801800007c0803a64e8000212c0300014082000c3a80000148000070827b001080030000941bfffc80030004941bfffc809b0010386000018313000c801800007c0803a64e800021825b0018809b0010807b000483120008801800007c0803a64e800021807b00003b7b0008800d00187c1b004040a00010800d00207c0803a64e8000214bffff88827b0004398000025660f80140a20010800d00347c0803a64e8000217e53641141a3fff0823b001038b200003880003b3860003b83110014801800007c0803a64e8000212c0300014082000c3a0000014800007081fb001080030000941bfffc80030004941bfffc809b001038600001830f000c801800007c0803a64e80002181db0018809b0010807b0004830e0008801800007c0803a64e800021807b00003b7b0008800d00187c1b004040a00010800d00207c0803a64e8000214bffff8881fb001039c0000195dbfffc815b000c955bfffc38c0000538a0003d3880003b38600001830f002c801800007c0803a64e800021813b0010809b00083860fffd83090028801800007c0803a64e800021811b0010947bfffc80db000c38a000013880001b3860003983080024801800007c0803a64e80002180fb00143860000183070020801800007c0803a64e80002180db0014947bfffc809b0010386000018306000c801800007c0803a64e80002180bb0018809b0010807b000083050008801800007c0803a64e800021809b00188004001c941bfffc8064000c809b00143b230000386000013b190000801800007c0803a64e800021831b001c809b0014807b000083180008801800007c0803a64e80002182fb001c809b0014807b000883170018801800007c0803a64e80002182db001482b600283e8002a262944134929500008276002c3a40000392530000823b001c38a000093880003b807b001883110014801800007c0803a64e8000212c0300014082000848000070821b001c80030000941bfffc80030004941bfffc809b001c386000018310000c801800007c0803a64e80002181fb0024809b001c807b0004830f0008801800007c0803a64e800021807b00003b7b0008800d00187c1b004040a00010800d00207c0803a64e8000214bffff8c821b001c38a000013880003b3860001983100010801800007c0803a64e80002181fb001c947bfffc809b001838600001830f000c801800007c0803a64e80002181db0020809b0018807b0000830e0008833b0024801800007c0903a67f2803a63b7b00284e800420|@841,1048575|64,2,16777216 156,3,@840 168,3,@227 284,2,16777216 1236,3,@773 840:S22|616c6c6f6353746f72653a20626164206c656e677468 841:S27|505043434f4445434f4e5328292e616c6c6f6353746f7265283429 842:O2|@844,@843 843:O5|@847,@846,@744,@741,@675 844:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@845,1048575| 845:S24|505043434f4445434f4e5328292e736574466c6167283129 846:O9|@850,@314,@744,@741,@854,@791,@849,@663,@675 847:C2,252|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc947bfffc949bfffc388000013860001983180010801800007c0803a64e8000212c0300014082000848000070833b000880030000941bfffc80030004941bfffc809b0008386000018319000c801800007c0803a64e800021831b0010809b0008807b000483180008801800007c0803a64e800021807b00003b7b0008800d00187c1b004040a00010800d00207c0803a64e8000214bffff8c833b0008831b000082fb000c931b000c38c0ffff38a0fff9809b000438600019831900043b370000801800007c0903a67f2803a63b7b000c4e800420|@848,1048575| 848:S24|505043434f4445434f4e5328292e736574466c6167283329 849:O2|@857,@314 850:C2,1484|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c03001740820008480000102c04001741820008480000b0973bfffc80d8000480a6000480050000941bfffc3880ffff386000173c0002a06000fe6c7c0803a64e80002138830000386000e53c0002a1600074a87c0803a64e800021388300003c6002a260638dd43c0002a1600074a87c0803a64e800021398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021389d0004919d0000906400083c6002a06063c7ac90640004833b00009324000038640000800d00287c0803a64e8000212c030037408200d482db000082b60034829500003a6000093993ffff7e8b98385560f80140a20010800d00347c0803a64e8000217e8b0e707e4c5dd741a3ffec3a5200013a20000192350000973bfffc971bfffc947bfffc949bfffc94bbfffc94dbfffc38b20000388000373860003783180020801800007c0803a64e8000212c0300014082000c3ae0000148000068821b001080030004941bfffc809b001c8063000083100008801800007c0803a64e800021807b00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffffac3ae00001973bfffc971bfffc947bfffc949bfffc94bbfffc94dbfffc82bb00082c1500374082006c829b001882740034825300003a2000093992ffff7e2b90385560f80140a20010800d00347c0803a64e8000217e2b0e707e0c5dd741a3ffec3a10000181fb00043990ffff7deb80385560f80140a20010800d00347c0803a64e8000217ecf661541a3fff04800000882db0004829b001096dbfffc38a00003809b00103860001983140014801800007c0803a64e800021827b0014947bfffc809b0020386000018313000c801800007c0803a64e800021825b0018809b0020807b000083120008801800007c0803a64e800021823b00082c11ffff41820138821b00042c1000014182006481fb001881cf0004814e0004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021393d0004919d00003d0002a261088df4910900083ce002a060e7c7ac90e9000480ca000090c9000038690000800d00287c0803a64e80002181fb001838a000033891000038600017830f0014801800007c0803a64e80002181db0018947bfffc809b002438600001830e000c801800007c0803a64e800021815b001c809b0024807b0000830a0008801800007c0803a64e800021813b001c38a00017809b00143860001983090010801800007c0803a64e800021811b001c947bfffc809b0028386000018308000c801800007c0803a64e80002180fb002080db002838860000807b000083070008833b0024801800007c0903a67f2803a63b7b002c4e8004203e00ffff3a10000181fb00047e0b7838556bf80140a20010800d00347c0803a64e8000217c107800418100b03dc0000139ce00017deb7038556bf80140a20010800d00347c0803a64e8000217c0f700040800088815b0018386f0000830a001c801800007c0803a64e800021813b001838a30000809b00103860001983090018801800007c0803a64e800021811b0018947bfffc809b0024386000018308000c801800007c0803a64e80002180fb001c80db002438860000807b000083070008833b0020801800007c0903a67f2803a63b7b00284e80042081db001838af00003880000138600017830e0020801800007c0803a64e8000212c0300014082000848000070815b001880030000941bfffc80030004941bfffc809b002838600001830a000c801800007c0803a64e800021813b0020809b0028807b000483090008801800007c0803a64e800021807b00003b7b0008800d00187c1b004040a00010800d00207c0803a64e8000214bffff8c815b001838a00017809b0010807b0014830a0010801800007c0803a64e800021813b0018947bfffc809b0024386000018309000c801800007c0803a64e800021811b001c80fb002438870000807b000083080008833b0020801800007c0903a67f2803a63b7b00284e800420|@853,1048575|84,3,@316 108,3,@511 128,3,@851 136,3,@511 192,3,@227 760,3,@852 772,3,@227 1008,2,-32768 1052,2,32768 851:S24|67656e53746f7265427974653a2063616e27742075736520 852:S40|67656e53746f7265427974653a20696e6465782077697468206e6f6e2d7a65726f206f6666736574 853:S29|505043434f4445434f4e5328292e67656e53746f726542797465283529 854:O2|@855,@314 855:C2,1044|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021546bf80140a20010800d00347c0803a64e8000212c03000141800028546bf80140a20010800d00347c0803a64e8000212c0300414080000c3ae30000480000f8973bfffc971bfffc949bfffc94bbfffc3880ffff3c0002a06000fe6c7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d00003f0002a16318ba149319000490790000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000932300043ee002a162f7ba4892e300003c0002a1600005347c0803a64e80002182db000882b6000482950004398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a7d0004919d0000907300083e4002a06252c7ac92530004823400009233000038730000800d00287c0803a64e800021548bf80140a20010800d00347c0803a64e8000212c04000141800028548bf80140a20010800d00347c0803a64e8000212c0400414080000c3ac4000048000100973bfffc971bfffc94bbfffc96fbfffc3ac400003880ffff387600003c0002a06000fe6c7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003e8002a16294ba149295000490750000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a300043e6002a16273ba48926300003c0002a1600005347c0803a64e800021825b00088232000482110004398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002139fd0004919d0000906f00083dc002a061cec7ac91cf000481500000914f0000386f0000800d00287c0803a64e80002154abf80140a20010800d00347c0803a64e8000212c0500014180002854abf80140a20010800d00347c0803a64e8000212c0500414080000c3aa50000480000fc973bfffc971bfffc96fbfffc96dbfffc3880ffff386500003c0002a06000fe6c7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003e8002a16294ba149295000490750000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a300043e6002a16273ba48926300003c0002a1600005347c0803a64e800021825b00088232000482110004398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002139fd0004919d0000906f00083dc002a061cec7ac91cf000481500000914f0000386f0000800d00287c0803a64e8000213a9900003860000f3c0002a16000cf007c0803a64e800021947bfffc3a600001967bfffc38d5000038b60000389700003860fff73b3400003c0002a16000d0787c0903a67f2803a64e800420|@856,1048575|116,3,@316 168,3,@620 224,3,@622 236,3,@325 304,3,@227 432,3,@316 484,3,@620 540,3,@622 552,3,@325 620,3,@227 744,3,@316 796,3,@620 852,3,@622 864,3,@325 932,3,@227 976,3,@653 1024,3,@655 856:S21|505043434f4445434f4e5328292e73746278283329 857:C2,692|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021546bf80140a20010800d00347c0803a64e8000212c03000141800028546bf80140a20010800d00347c0803a64e8000212c0300414080000c3ae30000480000f8973bfffc971bfffc949bfffc94bbfffc3880ffff3c0002a06000fe6c7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d00003f0002a16318ba149319000490790000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000932300043ee002a162f7ba4892e300003c0002a1600005347c0803a64e80002182db000882b6000482950004398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a7d0004919d0000907300083e4002a06252c7ac92530004823400009233000038730000800d00287c0803a64e800021548bf80140a20010800d00347c0803a64e8000212c04000141800028548bf80140a20010800d00347c0803a64e8000212c0400414080000c3ac4000048000100973bfffc971bfffc94bbfffc96fbfffc3ac400003880ffff387600003c0002a06000fe6c7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003e8002a16294ba149295000490750000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a300043e6002a16273ba48926300003c0002a1600005347c0803a64e800021825b00088232000482110004398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002139fd0004919d0000906f00083dc002a061cec7ac91cf000481500000914f0000386f0000800d00287c0803a64e80002138c5000038b6000038970000386000113c0002a16000d5347c0903a67f2803a64e800420|@858,1048575|116,3,@316 168,3,@620 224,3,@622 236,3,@325 304,3,@227 432,3,@316 484,3,@620 540,3,@622 552,3,@325 620,3,@227 672,3,@660 858:S20|505043434f4445434f4e5328292e737462283329 859:O1|@860 860:C2,8|386000014e800020|@861,524289| 861:S33|505043434f4445434f4e5328292e636f6d706c6574655365676d656e742d283129 862:O4|@863,@745,@744,@675 863:C2,300|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e3003482d700003aa000093995ffff7ecba8385560f80140a20010800d00347c0803a64e8000217ecb0e707e8c5dd741a3ffec3a9400013ac0000192d70000973bfffc971bfffc947bfffc38b4000038800037386000378318000c801800007c0803a64e8000212c030001408200084800004c82bb000480030004941bfffc809b00048063000083150008801800007c0803a64e800021807b00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffffb082bb0004807b000083150004801800007c0803a64e800021829b0000827400283e4002a262524134925300008234002c3a0000039211000081f40000806f000081db00087dc803a63b7b000c4e800020|@864,1048575|252,3,@773 864:S20|505043434f4445434f4e5328292e69632d283129 865:O3|@867,@870,@866 866:O1|@872 867:O1|@868 868:C2,28|83030000281800014082000c386000034e800020386000014e800020|@869,786433| 869:S7|436f646546756e 870:O1|@871 871:C2,68|7f2802a6633900023b030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000930300043b000001930300007f2803a64e800020|@869,786433| 872:C2,8|806300044e800020|@869,524289| 873:O3|@875,@878,@874 874:O1|@880 875:O1|@876 876:C2,32|3b00ffff82e300007c18b8404082000c386000034e800020386000014e800020|@877,917505| 877:S11|436f6e7374616e7446756e 878:O1|@879 879:C2,76|7f2802a6633900028303000082e30004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092e30008930300043b00ffff930300007f2803a64e800020|@877,917505| 880:C2,68|7f2802a6633900028303000482e30008398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092e30004930300007f2803a64e800020|@877,917505| 881:O2|@882,@211 882:O1|@883 883:C2,28|83030000281800034082000c386000034e800020386000014e800020|@884,786433| 884:S8|46756c6c43616c6c 885:O2|@887,@886 886:O1|-2 887:O1|@888 888:C2,32|3b00fffd82e300007c18b8404082000c386000034e800020386000014e800020|@889,917505| 889:S9|526563757273697665 890:O2|@892,@891 891:O9|@895,@744,@741,@899,@675,@650,@651,@775,@894 892:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@893,1048575| 893:S29|505043434f4445434f4e5328292e63616c6c46756e6374696f6e283129 894:O7|@900,@744,@741,@694,@683,@676,@745 895:C2,2376|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e4004082d700002c1600014082001c82c4002882b60000281500014082000c386000014e80002082a300002c15fffd4082017882c40034829600003a6000093993ffff7e8b98385560f80140a20010800d00347c0803a64e8000217e8b0e707e4c5dd741a3ffec3a5200013a80000192960000973bfffc971bfffc949bfffc80040020941bfffc80040048941bfffc38b20000388000373860003783180010801800007c0803a64e8000212c030001408200084800004c827b000c80030004941bfffc809b000c8063000083130004801800007c0803a64e800021807b00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffffb0827b000c8013000c941bfffc809b000c3860000183130008801800007c0803a64e800021825b0010809b000c807b000083120004801800007c0803a64e800021823b000c8211000081f000003980fffe55e0f80140a20010800d00347c0803a64e8000217dcf661541a3fff0815b0008812a0000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021391d0004919d00009128000491c80000910a0000480007442c15000340820190973bfffc947bfffc949bfffc947bfffc80040048941bfffc971bfffc38c4000038a0000138800031386000018318001c801800007c0803a64e800021829b00003860000183140018801800007c0803a64e800021827b0000947bfffc809b00103860000183130008801800007c0803a64e800021825b0004809b0010807b000083120004801800007c0803a64e800021823b00108211003481f0000039c00009398effff7deb70385560f80140a20010800d00347c0803a64e8000217deb0e707d4c5dd741a3ffec394a00013920000191300000811b000438aa0000388000373860003783080010801800007c0803a64e8000212c030001408200084800004c80fb000480030004941bfffc809b00148063000083070004801800007c0803a64e800021807b00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffffb080fb000480070014941bfffc809b00143860000183070008801800007c0803a64e80002180db0008809b0014807b000083060004801800007c0803a64e800021480005ac2c15ffff408203b4828300082c140001408201c8398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a7d0004919d000082430004925300043a20000392330000973bfffc947bfffc949bfffc947bfffc80040048941bfffc971bfffc38a40000388000013873000083180020801800007c0803a64e800021821b00003860000183100018801800007c0803a64e80002181fb0000947bfffc809b001038600001830f0008801800007c0803a64e80002181db0004809b0010807b0000830e0004801800007c0803a64e800021815b0010812a00348109000038e000093987ffff7d0b38385560f80140a20010800d00347c0803a64e8000217d0b0e707ccc5dd741a3ffec38c6000138a0000190a90000809b000438a6000080640010388000373b230000386000373b190000801800007c0803a64e8000212c030001408200084800004c831b000480030004941bfffc809b00148063000083180004801800007c0803a64e800021807b00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffffb0831b000480180014941bfffc809b00143860000183180008801800007c0803a64e80002182fb0008809b0014807b000083170004801800007c0803a64e800021480003d4398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a7d0004919d000082430004925300043a20000392330000973bfffc947bfffc949bfffc947bfffc80040048941bfffc971bfffc38a40000388000313873000083180020801800007c0803a64e800021821b000080db000c38a0000138800031386000018310001c801800007c0803a64e80002181fb000038600001830f0018801800007c0803a64e80002181db0000947bfffc809b001038600001830e0008801800007c0803a64e800021815b0004809b0010807b0000830a0004801800007c0803a64e800021813b00108109003480e8000038c000093986ffff7ceb30385560f80140a20010800d00347c0803a64e8000217ceb0e707cac5dd741a3ffec38a500013880000190880000807b00043880003783230010386000373b190000801800007c0803a64e8000212c030001408200084800004c831b000480030004941bfffc809b00148063000083180004801800007c0803a64e800021807b00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffffb0831b000480180014941bfffc809b00143860000183180008801800007c0803a64e80002182fb0008809b0014807b000083170004801800007c0803a64e800021480001f482840040827400002c1300014082001882440028823200002811000140820008480000603a3900003a18000039e40000388f0000806300043c0002a26000a4947c0803a64e800021963bfffc947bfffc95fbfffc947bfffc800f0048941bfffc961bfffc38af00003880000183100020801800007c0803a64e80002148000020973bfffc947bfffc949bfffc947bfffc80040048941bfffc971bfffc821b00003860000183100018801800007c0803a64e80002181fb0000947bfffc809b001038600001830f0008801800007c0803a64e80002181db0004809b0010807b0000830e0004801800007c0803a64e800021815b0010812a00348109000038e000093987ffff7d0b38385560f80140a20010800d00347c0803a64e8000217d0b0e707ccc5dd741a3ffec38c6000138a0000190a90000809b000438a6000080640010388000373b230000386000373b190000801800007c0803a64e8000212c030001408200084800004c831b000480030004941bfffc809b00148063000083180004801800007c0803a64e800021807b00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffffb0831b000480180014941bfffc809b00143860000183180008801800007c0803a64e80002182fb0008809b0014807b000083170004801800007c0803a64e8000213b7b000882db000c82b600283e8002a262944134929500008276002c3a40000392530000823b00043a000003921100003860000181fb00147de803a63b7b00184e800020|@898,1048575|1868,3,@896 2320,3,@773 896:C2,388|7f2802a6633900028303001c82f80000947bfffc947bfffc72eb00014082004c8097000082c40000829600002c1400014082001c973bfffc3c6002a1606352b4800d00287c0803a64e80002182b600043a7b00003a400003925300003a7b000092b30004480000d882c3003082b60000973bfffc947bfffc949bfffc96bbfffc2c1500014082000c3a80000148000044827b0004825500008093000c8072000c7c0418404082000c3a8000034800002482b50004800d00187c1b004040a00010800d00207c0803a64e8000214bffffb4281400014182000848000044833b0008398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b1d0004919d000082fb000092f8000482db000492d8000082b90030931500003a9b00103a600001927400003a5b0010809b0008909200043b7b000c48000008973bfffc398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000825b000492430000809b000890830004833b00007f2803a63b7b000c4e800020|@897,1044483|56,3,@487 897:S26|505043434f4445434f4e5328292e636f6465436f6e7374283229 898:S29|505043434f4445434f4e5328292e63616c6c46756e6374696f6e283229 899:O4|72,0,0,1 900:C2,560|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e5004082d700002c1600014082001c82c5002882b60000281500014082000c386000014e800020973bfffc971bfffc947bfffc949bfffc94bbfffc80050000941bfffc80050008941bfffc80050038941bfffc3865000083180018801800007c0803a64e80002182bb000082950000398000025680f80140a20010800d00347c0803a64e8000217e74661541a3fff092750000947bfffc947bfffc825b0020389b00003860000383120014801800007c0803a64e800021823b0020809b00143860000583110008801800007c0803a64e800021821b001081f00000398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002139dd0004919d000091ee0004815b001c914e0000813b000c81090000398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138fd0004919d00009107000491c7000090e9000080db002080bb000438800001807b001883060010801800007c0803a64e80002180bb0020947bfffc809b00183860000183050008801800007c0803a64e800021809b002480640004809b00183b230000807b00003b190000801800007c0803a64e800021831b002480bb0004809b001c807b001c8318000c801800007c0803a64e80002182fb0024947bfffc809b001c3860000183170008801800007c0803a64e80002182db0028809b001c807b000083160004833b002c801800007c0903a67f2803a63b7b00304e800420|@901,1048575| 901:S32|505043434f4445434f4e5328292e67656e4c6f6164436f6e7374616e74283329 902:O2|@904,@903 903:O11|@907,@910,@744,@675,@741,@651,@740,@913,@906,@775,@894 904:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@905,1048575| 905:S31|505043434f4445434f4e5328292e6a756d70546f46756e6374696f6e283129 906:O2|@914,@314 907:C2,3112|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e5004082d700002c1600014082001c82c5002882b60000281500014082000c386000014e80002082a300002c15fffd4082021082c500483a800003929600002c0400334082000848000034973bfffc971bfffc949bfffc94bbfffc80050024941bfffc3860003383180018801800007c0803a64e8000214800001c973bfffc971bfffc949bfffc94bbfffc80050024941bfffc827b000482530028823200008213004081f00000388f0000387100003c0002a2600026b87c0803a64e8000212c030001408200084800006881c30000280e00014082005c815b000c807b0008830a0014801800007c0803a64e800021813b000c947bfffc809b00083860000183090010801800007c0803a64e800021811b0010809b0008807b000083080008801800007c0803a64e8000213b7b000480fb000480c7003480a60000388000093984ffff7cab20385560f80140a20010800d00347c0803a64e8000217cab0e707c6c5dd741a3ffec386300013b20000193260000831b000c38a3000038800037386000378318000c801800007c0803a64e8000212c030001408200084800004c82fb000c80030004941bfffc809b00088063000083170008801800007c0803a64e800021807b00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffffb082fb000c807b000483170004801800007c0803a64e80002182db000082b600002c1500014082000c3a8300004800002496bbfffc3b1b00143c0002a26000b6147c0803a64e8000213a8300003b7b000492960000480009a82c1500034082023c828500483a60000392740000973bfffc947bfffc947bfffc94bbfffc971bfffc949bfffc38c5000038a00001388000313860000183180024801800007c0803a64e800021825b00043860000183120020801800007c0803a64e800021823b0004947bfffc809b000c3860000183110010801800007c0803a64e800021821b0008809b000c807b000083100008801800007c0803a64e80002181fb000c81cf0028814e0000812f00408109000038880000386a00003c0002a2600026b87c0803a64e8000212c030001408200084800007080e30000280700014082006480db0008807b000483060014801800007c0803a64e80002180bb0008947bfffc809b00103860000183050010801800007c0803a64e800021809b000c80640008809b00103b230000807b00003b190000801800007c0803a64e8000213b7b0004831b000c82f8003482d700003aa000093995ffff7ecba8385560f80140a20010800d00347c0803a64e8000217ecb0e707e8c5dd741a3ffec3a9400013a60000192770000825b000838b4000038800037386000378312000c801800007c0803a64e8000212c030001408200084800004c823b000880030004941bfffc809b00108063000083110008801800007c0803a64e800021807b00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffffb0823b00088011001c941bfffc809b00103860000183110010801800007c0803a64e800021821b000c809b0010807b000083100008801800007c0803a64e800021480007642c15ffff408204dc828300082c1400014082025c826500483a40000392530000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a3d0004919d0000820300049211000439e0000391f10000973bfffc947bfffc947bfffc94bbfffc971bfffc949bfffc388000013871000083180028801800007c0803a64e80002181db000438600001830e0020801800007c0803a64e800021815b0004947bfffc809b000c38600001830a0010801800007c0803a64e800021813b0008809b000c807b000083090008801800007c0803a64e800021811b000c80e8002880c7000080a8004080850000386600003c0002a2600026b87c0803a64e8000212c030001408200084800006883230000281900014082005c831b0008807b000483180014801800007c0803a64e80002182fb0008947bfffc809b00103860000183170010801800007c0803a64e80002182db000c809b0010807b000083160008801800007c0803a64e8000213b7b000482bb000c82950034827400003a4000093992ffff7e6b90385560f80140a20010800d00347c0803a64e8000217e6b0e707e2c5dd741a3ffec3a3100013a0000019214000081fb000838b100003880003738600037830f000c801800007c0803a64e8000212c030001408200084800004c81db000880030004941bfffc809b001080630000830e0008801800007c0803a64e800021807b00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffffb081db0008800e001c941bfffc809b001038600001830e0010801800007c0803a64e800021815b000c809b0010807b0000830a0008801800007c0803a64e800021480004f8398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a7d0004919d000082430004925300043a20000392330000973bfffc947bfffc947bfffc94bbfffc971bfffc949bfffc388000313873000083180028801800007c0803a64e800021821b000480db000838a00001388000313860000183100024801800007c0803a64e80002181fb000438600001830f0020801800007c0803a64e80002181db0004947bfffc809b000c38600001830e0010801800007c0803a64e800021815b0008809b000c807b0000830a0008801800007c0803a64e800021813b000c8109002880e8000080c9004080a6000038850000386700003c0002a2600026b87c0803a64e8000212c030001408200084800006880830000280400014082005c833b0008807b000483190014801800007c0803a64e800021831b0008947bfffc809b00103860000183180010801800007c0803a64e80002182fb000c809b0010807b000083170008801800007c0803a64e8000213b7b000482db000c82b60034829500003a6000093993ffff7e8b98385560f80140a20010800d00347c0803a64e8000217e8b0e707e4c5dd741a3ffec3a5200013a20000192350000821b000838b2000038800037386000378310000c801800007c0803a64e8000212c030001408200084800004c81fb000880030004941bfffc809b001080630000830f0008801800007c0803a64e800021807b00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffffb081fb0008800f001c941bfffc809b001038600001830f0010801800007c0803a64e80002181db000c809b0010807b0000830e0008801800007c0803a64e80002148000284828500483a6000039274000082450040823200002c110001408200188205002881f00000280f000140820008480000583a19000039f8000039c4000038850000806300043c0002a26000a4947c0803a64e800021961bfffc947bfffc947bfffc94bbfffc95fbfffc95dbfffc38800001830f0028801800007c0803a64e8000214800001c973bfffc947bfffc947bfffc94bbfffc971bfffc949bfffc81db000438600001830e0020801800007c0803a64e800021815b0004947bfffc809b000c38600001830a0010801800007c0803a64e800021813b0008809b000c807b000083090008801800007c0803a64e800021811b000c80e8002880c7000080a8004080850000386600003c0002a2600026b87c0803a64e8000212c030001408200084800006883230000281900014082005c831b0008807b000483180014801800007c0803a64e80002182fb0008947bfffc809b00103860000183170010801800007c0803a64e80002182db000c809b0010807b000083160008801800007c0803a64e8000213b7b000482bb000c82950034827400003a4000093992ffff7e6b90385560f80140a20010800d00347c0803a64e8000217e6b0e707e2c5dd741a3ffec3a3100013a0000019214000081fb000838b100003880003738600037830f000c801800007c0803a64e8000212c030001408200084800004c81db000880030004941bfffc809b001080630000830e0008801800007c0803a64e800021807b00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffffb081db0008800e001c941bfffc809b001038600001830e0010801800007c0803a64e800021815b000c809b0010807b0000830a0008801800007c0803a64e8000213b7b000c813b00048109002838e0000190e800003860000180db00107cc803a63b7b00144e800020|@909,1048575|208,3,@749 576,3,@908 796,3,@749 1424,3,@749 2052,3,@749 2500,3,@896 2696,3,@749 908:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c8078ffec4e800020973bfffc971bfffc80030000941bfffc806300044bffffbd398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b00009319000038790000833b00087f2803a63b7b000c4e800020|@468,786433| 909:S31|505043434f4445434f4e5328292e6a756d70546f46756e6374696f6e283329 910:O5|@911,@744,@741,@752,@675 911:C2,628|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e3004082d700002c1600014082001c82c3002882b60000281500014082000c386000014e80002082a3003482d500003a8000093994ffff7ecba0385560f80140a20010800d00347c0803a64e8000217ecb0e707e6c5dd741a3ffec3a7300013ac0000192d50000973bfffc971bfffc947bfffc38b30000388000373860003783180010801800007c0803a64e8000212c0300014082000c3aa000014800004c829b000480030004941bfffc809b00048063000083140004801800007c0803a64e800021807b00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffffac829b000082740040825300003a20000192330000821300002c1000014082001c81f4002881cf0000280e00014082000c395200004800011481fb0004965bfffc800f000c941bfffc3894000038600001830f0008801800007c0803a64e80002181db000c809b0008807b0000830e0004801800007c0803a64e800021815b0008812a0000810900003980fffe5500f80140a20010800d00347c0803a64e8000217ce8661541a3fff080ca002880a60000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021389d0004919d000090a4000890e400043860ffff906400003d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090990000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b1d0004919d000082fb000492f8000493380000395800003b7b000882db000082b600283a80000192950000386a0000827b00087e6803a63b7b000c4e800020|@912,1048575| 912:S36|505043434f4445434f4e5328292e756e636f6e646974696f6e616c4272616e6368283129 913:O4|78,128,4,32 914:C2,408|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021546bf80140a20010800d00347c0803a64e8000212c03000141800028546bf80140a20010800d00347c0803a64e8000212c0300414080000c3ae30000480000f0973bfffc971bfffc3880ffff3c0002a06000fe6c7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d00003f0002a16318ba149319000490790000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000932300043ee002a162f7ba4892e300003c0002a1600005347c0803a64e80002182db000082b6000482950004398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a7d0004919d0000907300083e4002a06252c7ac92530004823400009233000038730000800d00287c0803a64e8000213ad900003860fff73c0002a16000cf007c0803a64e800021947bfffc3aa0000196bbfffc38c0000138a00013389700003860fff73b3600003c0002a16000d0787c0903a67f2803a64e800420|@915,1048575|108,3,@316 160,3,@620 216,3,@622 228,3,@325 296,3,@227 340,3,@653 388,3,@655 915:S22|505043434f4445434f4e5328292e6d74637472283129 916:O2|@918,@917 917:O6|@921,@744,@741,@920,@675,@651 918:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@919,1048575| 919:S35|505043434f4445434f4e5328292e72657475726e46726f6d46756e6374696f6e283129 920:O4|78,128,0,32 921:C2,580|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e5003482d700003984ffff7ecb20385560f80140a20010800d00347c0803a64e8000217eb6661541a3fff092b700008085002882c4000082a50040829500003a3900003a18000039e3000038940000387600003c0002a2600026b87c0803a64e8000212c03000140820008480000148083000028040001408200084800000c39c000014800006c963bfffc961bfffc94bbfffc386f000083100014801800007c0803a64e800021833b0004947bfffc809b00043860000183190008801800007c0803a64e800021831b0008809b0004807b000083180004801800007c0803a64e80002139c300003b7b000448000010963bfffc961bfffc94bbfffc815b0000812a00348109000038e000093987ffff7d0b38385560f80140a20010800d00347c0803a64e8000217d0b0e707ccc5dd741a3ffec38c6000138a0000190a90000809b000438a6000080640010388000373b230000386000373b190000801800007c0803a64e8000212c0300014082000c3b0000014800004c82fb000480030004941bfffc809b00048063000083170004801800007c0803a64e800021807b00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffffac82fb00048017000c941bfffc809b00043860000183170008801800007c0803a64e80002182db0008809b0004807b000083160004801800007c0803a64e80002182bb0004829500283a6000019274000038600001825b000c7e4803a63b7b00104e800020|@922,1048575|116,3,@749 922:S35|505043434f4445434f4e5328292e72657475726e46726f6d46756e6374696f6e283329 923:O2|@925,@924 924:O4|@927,@744,@741,@675 925:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@926,1048575| 926:S31|505043434f4445434f4e5328292e67656e537461636b4f6666736574283129 927:C2,296|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e5003482d700003aa000093995ffff7ecba8385560f80140a20010800d00347c0803a64e8000217ecb0e707e8c5dd741a3ffec3a9400013994ffff7c8ba0385560f80140a20010800d00347c0803a64e8000217ec4661541a3fff0973bfffc971bfffc94bbfffc38b60000388000378318000c801800007c0803a64e8000212c030001408200183860000182bb00087ea803a63b7b000c4e80002082bb000480030000941bfffc80030004941bfffc809b00083860000183150008801800007c0803a64e800021829b000c809b0008807b000483140004801800007c0803a64e800021807b00003b7b0008800d00187c1b004040a00010800d00207c0803a64e8000214bffff7c|@928,1048575| 928:S31|505043434f4445434f4e5328292e67656e537461636b4f6666736574283329 929:O6|@930,@744,@741,@650,@651,@775 930:C2,260|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc947bfffc38c3000038a000013880001b3860005183180014801800007c0803a64e800021833b00043860000183190010801800007c0803a64e800021831b0004947bfffc809b00043860000183180008801800007c0803a64e80002182fb0008809b0004807b000083170004801800007c0803a64e80002182db00088016000c941bfffc809b00083860000183160008801800007c0803a64e80002182bb000c809b0008807b000083150004801800007c0803a64e800021829b0008827400283a4000019253000038600001823b00107e2803a63b7b00144e800020|@931,1048575| 931:S31|505043434f4445434f4e5328292e7261697365457863657074696f6e283129 932:O1|@933 933:C2,136|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc947bfffc3af9000038bb000080830004806300003c0002a26000c3087c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080bb000090a30000809b0004908300047ee803a63b7b00084e800020|@936,917511|56,3,@934 934:C2,16|9065000090850004386000014e800020|@935,524295| 935:S28|505043434f4445434f4e5328292e636f6e7374724361736573283329 936:S28|505043434f4445434f4e5328292e636f6e7374724361736573283129 937:O1|@938 938:C2,64|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180c3000c80a3000880830004806300003c0002a26000c3e07c0903a64e800420|@941,786447|48,3,@939 939:C2,8|386000014e800020|@940,524303| 940:S31|505043434f4445434f4e5328292e757365496e646578656443617365283429 941:S31|505043434f4445434f4e5328292e757365496e646578656443617365283129 942:O2|@944,@943 943:O2|@946,@314 944:C2,80|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e3001096fbfffc82c3001496dbfffc80c3000c80a30008808300048063000083180004801800007c0903a64e800420|@945,1048575| 945:S28|505043434f4445434f4e5328292e696e646578656443617365283129 946:C2,104|7f2802a663390002973bfffc80d8000480a60004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021389d0004919d00003c6002a26063c580906400083c6002a06063c7ac90640004806500009064000038640000800d00287c0803a64e800021|@948,786447|56,3,@947 68,3,@227 947:S28|4e6f7420696d706c656d656e7465643a20696e646578656443617365 948:S28|505043434f4445434f4e5328292e696e646578656443617365283629 949:O2|@951,@950 950:O2|@953,@314 951:C2,80|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e3001096fbfffc82c3001496dbfffc80c3000c80a30008808300048063000083180004801800007c0903a64e800420|@952,1048575| 952:S30|505043434f4445434f4e5328292e6d616b654a756d705461626c65283129 953:C2,104|7f2802a663390002973bfffc80d8000480a60004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021389d0004919d00003c6002a26063c6f8906400083c6002a06063c7ac90640004806500009064000038640000800d00287c0803a64e800021|@955,786447|56,3,@954 68,3,@227 954:S30|4e6f7420696d706c656d656e7465643a206d616b654a756d705461626c65 955:S30|505043434f4445434f4e5328292e6d616b654a756d705461626c65283629 956:O1|@957 957:C2,8|386000034e800020|@958,524289| 958:S31|505043434f4445434f4e5328292e6973496e646578656453746f7265283129 959:C2,188|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000218303000082f80000973bfffc96fbfffc38800075806300103c0002a1600074a87c0803a64e80002182db00003aa000093995ffff7ecba8385560f80140a20010800d00347c0803a64e8000217ecb0e707e8c5dd741a3ffec3a940001947bfffc38800003387400003c0002a06000fe6c7c0803a64e80002138830000807b0000833b00083c0002a1600074a87c0903a67f2803a63b7b000c4e800420|@960,1048575|56,3,@511 136,3,@316 164,3,@511 960:S29|505043434f4445434f4e5328292e7472616365436f6e74657874283129 961:O73|@963,@1132,@1289,@1302,@1308,@1314,-1,@1323,@1333,@1342,@1349,@1356,@1391,@1395,@1402,@1408,@1418,@1430,@1438,@1447,@1455,@1460,@1463,@1469,@1476,@1482,@1485,@1493,@1499,@1509,@1527,@1530,@1535,@1540,@1543,@1545,@1554,@1557,@1560,0,@1565,@1568,@1576,@1580,@1600,@1606,@1630,@1699,@1705,@1711,@1722,@1725,@1727,@1731,@1739,@1752,@1762,@1775,@1778,@1784,@1791,@1797,0,@1802,@1382,@1805,@1811,@1817,@1822,@1830,@1838,@1849,@962 962:O2|@1859,@1858 963:O3|@965,@964,20 964:O4|@968,@1083,@1091,@967 965:C2,1732|7f2802a66339000239600064800d00187d6bd8107c0b004040a00010800d00247c0803a64e800021947bfffc947bfffc3ad900003ab800003a83000038a0ffff388000813860000d3f000000631841c8801800007c0803a64e80002138a0000b90a30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021389d0004919d0000906400043860ffff906400003d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213b3d0004919d0000909900003b1b0000933800003afb000038a0ffff90b70004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021389d0004919d0000807b000090640000833b000493240004947bfffc947bfffc3a64000038a00001388000813860000d3f000000631841c8801800007c0803a64e80002138a0000b90a30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021389d0004919d0000906400043860ffff906400003d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213b3d0004919d0000909900003b1b0000933800003afb000038a0000190b70004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021389d0004919d0000807b000090640000833b000493240004947bfffc947bfffc947bfffc947bfffc83150008398000025700f80140a20010800d00347c0803a64e8000217ef8661541a3fff03a44000038a0000138800081387700003f000000631841c8801800007c0803a64e80002180b5000890a300003980000254a0f80140a20010800d00347c0803a64e8000217c8c2c1141a3fff03d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213b3d0004919d0000909900003d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213b1d0004919d00003ee002a262f7413492f800008095000482e400003d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213a3d0004919d0000821700189211000039fb0000906f0000387b0000932300043b3b0000931900083b1b00009238000c398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213a3d0004919d000081fb000091f10000807b000490710004833b000893310008831b000c9311000c947bfffc947bfffc38a0000138800081386000173f000000631841c8801800007c0803a64e8000213ae0001592e30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a1d0004919d00009070000439e0ffff91f000003d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e80002138bd0004919d000092050000389b000090a40000387b00003b20000193230004398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b1d0004919d000082fb000092f80000821b0004921800043d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e80002139fd0004919d000038a0000190af00003d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e800021389d0004919d000038600001906400003d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213b3d0004919d00003ae0000392f900003d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213a1d0004919d000038a0000190b000003d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d00003ae0000192e300003d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e80002138bd0004919d00003ae0000192e500003d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213afd0004919d000039c0000191d7000081550004812a000496dbfffc96bbfffc969bfffc967bfffc965bfffc963bfffc971bfffc95fbfffc949bfffc973bfffc961bfffc947bfffc94bbfffc96fbfffc8069000083090008801800007c0803a64e80002139030000807b002c3b080000801800007c0803a64e80002180fb003080c7000480a60004947bfffc8065000483050008801800007c0803a64e80002138830000807b00303b040000801800007c0803a64e8000213980000d3bbdffc87c1df04040a00010800d001c7c0803a64e8000213b3d0004919d0000831b00189319003082fb000492f9002c82db000092d900289079002482bb002c92b90020829b001c9299001c827b001492790018825b000c92590014823b002492390010821b00209219000c81fb000891f9000881db002891d90004815b00109159000038790000813b00387d2803a63b7b00644e800020|@966,1048575|72,3,I11 288,3,I11 548,3,I11 692,3,@773 880,3,I11 966:S25|5452414e535f54414228292e74746162437265617465283129 967:O8|@1112,@1115,@1118,@1121,@1125,@1111,4,I15 968:O46|@305,@309,1,-1,27,24,20,@970,@604,@414,@419,@974,@826,@977,@983,@988,@995,@1001,@829,0,@923,-6,-8,@727,@732,@1007,@719,@699,@1047,0,@1050,@1057,@910,@1060,@1066,@1069,@1075,@862,@969,@865,@873,@881,@885,@890,@902,@304 969:O1|@1081 970:O2|@971,@314 971:C2,444|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021546bf80140a20010800d00347c0803a64e8000212c0300014080000848000024546bf80140a20010800d00347c0803a64e8000212c03002940800008480000ec973bfffc971bfffc3880ffff3c0002a06000fe6c7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d00003b0000019319000490790000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000932300043ee002a262f7d3c492e300003c0002a1600005347c0803a64e80002182db000082b6000482950004398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a7d0004919d0000907300083e4002a06252c7ac92530004823400009233000038730000800d00287c0803a64e800021546bf80140a20010800d00347c0803a64e8000212c03001140800030398000065460f80140a20010800d00347c0803a64e8000217f03661541a3fff0387800007f2803a64e8000203980000c5460f80140a20010800d00347c0803a64e8000217f03661541a3fff0387800007f2803a64e800020|@973,1048575|108,3,@316 212,3,@972 224,3,@325 292,3,@227 972:S26|7265674e3a20426164207265676973746572206e756d62657220 973:S21|505043434f4445434f4e5328292e7265674e283129 974:O1|@975 975:C2,92|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc3880ffff3c0002a06000fe6c7c0803a64e80002138830000386000e5833b00003c0002a1600074a87c0903a67f2803a63b7b00044e800420|@976,1048575|40,3,@316 68,3,@511 976:S24|505043434f4445434f4e5328292e72656752657072283129 977:O2|@979,@978 978:O3|@981,@813,@846 979:C2,80|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e3001096fbfffc82c3001496dbfffc80c3000c80a30008808300048063000083180004801800007c0903a64e800420|@980,1048575| 980:S25|505043434f4445434f4e5328292e67656e53746f7265283129 981:C2,124|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c06ffff4082002882fb000482db000092db000438d7000083180004801800007c0903a63b7b00044e80042082fb000482db000092db000438d700003aa5000038a400003895000083180008801800007c0903a63b7b00044e800420|@982,1048575| 982:S25|505043434f4445434f4e5328292e67656e53746f7265283629 983:O1|@984 984:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a3000880830004806300003c0002a26000d6707c0903a64e800420|@987,786439|44,3,@985 985:C2,8|386000014e800020|@986,524295| 986:S25|505043434f4445434f4e5328292e697353746f726549283329 987:S25|505043434f4445434f4e5328292e697353746f726549283129 988:O2|@990,@989 989:O2|@992,@314 990:C2,80|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e3001096fbfffc82c3001496dbfffc80c3000c80a30008808300048063000083180004801800007c0903a64e800420|@991,1048575| 991:S26|505043434f4445434f4e5328292e67656e53746f726549283129 992:C2,104|7f2802a663390002973bfffc80d8000480a60004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021389d0004919d00003c6002a26063d808906400083c6002a06063c7ac90640004806500009064000038640000800d00287c0803a64e800021|@994,786447|56,3,@993 68,3,@227 993:S26|4e6f7420696d706c656d656e7465643a2067656e53746f726549 994:S26|505043434f4445434f4e5328292e67656e53746f726549283629 995:O2|@997,@996 996:O2|@999,@894 997:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@998,1048575| 998:S31|505043434f4445434f4e5328292e67656e4c6f6164436f6465726566283129 999:C2,132|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e5004082d700002c1600014082001c82c5002882b60000281500014082000c386000014e8000203a3900003a18000039e40000388500003c0002a26000a4947c0803a64e800021388f0000831000043b310000801800007c0903a67f2803a64e800420|@1000,1048575|88,3,@896 1000:S31|505043434f4445434f4e5328292e67656e4c6f6164436f6465726566283329 1001:O2|@1003,@1002 1002:O3|@1005,@813,@775 1003:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@1004,1048575| 1004:S28|505043434f4445434f4e5328292e67656e4c6f616450757368283129 1005:C2,172|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc94bbfffc38c5000038a0000183180008801800007c0803a64e800021833b00008319003482f800003980000256e0f80140a20010800d00347c0803a64e8000217eccbc1141a3fff092d8000082bb0004829b0008933b000838c0ffff38a000373880000138600001831500043b340000801800007c0903a67f2803a63b7b00084e800420|@1006,1048575| 1006:S28|505043434f4445434f4e5328292e67656e4c6f616450757368283329 1007:O2|@1009,@1008 1008:O24|@1012,@744,@741,@675,@894,@625,@767,@770,@733,@314,@1018,@663,@794,@1021,@1030,@658,@694,@771,@1039,@775,@791,@761,@910,@1011 1009:C2,72|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e3001096fbfffc80c3000c80a30008808300048063000083180004801800007c0903a64e800420|@1010,1048575| 1010:S22|505043434f4445434f4e5328292e67656e5249283129 1011:O15|@1043,@782,@744,@741,@1025,@1042,@314,@807,@761,@650,@651,@775,@675,@771,@663 1012:C2,8488|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c06003740820008480000102c04003741820008480000d482db000082b60034829500003a6000093993ffff7e8b98385560f80140a20010800d00347c0803a64e8000217e8b0e707e4c5dd741a3ffec3a5200013a80000192950000973bfffc971bfffc947bfffc949bfffc94bbfffc94dbfffc38b2000038800037386000378318000c801800007c0803a64e8000212c0300014082000c3ae0000148000068827b001080030004941bfffc809b001c8063000083130004801800007c0803a64e800021807b00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffffac3ae00001973bfffc971bfffc947bfffc949bfffc94bbfffc94dbfffc833b000c2c19fff54082017c831b0004730b000141820110730b00014182000c3af80000480000183c6002a1606330bc800d00287c0803a64e8000213997ffff56e0f80140a20010800d00347c0803a64e8000217ed7661541a3fff03980000256c0f80140a20010800d00347c0803a64e8000217eb6661541a3fff0829b001038b5000038800001807b00008314000c801800007c0803a64e8000212c0300014082001838600001827b00147e6803a63b7b001c4e800020827b001080030000941bfffc80030004941bfffc809b00203860000183130008801800007c0803a64e800021825b0018809b0020807b000483120004801800007c0803a64e800021807b00003b7b0008800d00187c1b004040a00010800d00207c0803a64e8000214bffff7c398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213afd0004919d0000931700043ac0000392d7000082bb0010829b001838b40000809b00003877000083150010833b0014801800007c0903a67f2803a63b7b001c4e8004202c19000140820268831b0004730b00014182000c3af80000480000183c6002a1606330bc800d00287c0803a64e8000213997ffff56e0f80140a20010800d00347c0803a64e8000217ed7661541a3fff03980000256c0f80140a20010800d00347c0803a64e8000217eb6661541a3fff03980000256a0f80140a20010800d00347c0803a64e8000217e8cac1141a3fff0827b001038b4000038800001386000198313000c801800007c0803a64e8000212c0300014082000c3a40000148000070823b001080030000941bfffc80030004941bfffc809b00203860000183110008801800007c0803a64e800021821b0018809b0020807b000483100004801800007c0803a64e800021807b00003b7b0008800d00187c1b004040a00010800d00207c0803a64e8000214bffff88823b0010809b0018807b00088311001c801800007c0803a64e800021821b0010947bfffc39e0000395fbfffc81db002095dbfffc38c0ffff38a00019809b0014807b000c83100018801800007c0803a64e800021815b001c812a00008109000080fb00003988ffff7ceb40385560f80140a20010800d00347c0803a64e8000217ccc3c1141a3fff080bb00143866000083050014801800007c0803a64e800021947bfffc947bfffc3ae30000389b00003860fff73c0002a16000408c7c0803a64e8000213ac0000196dbfffc3aa0000196bbfffc38d7000080bb000c809b00083860fffb3c0002a1600042087c0803a64e800021829b001c947bfffc809b00283860000183140008801800007c0803a64e800021827b0020825b002838920000807b000083130004833b0024801800007c0903a67f2803a63b7b002c4e8004202c19001540820268831b0004730b00014182000c3af80000480000183c6002a1606330bc800d00287c0803a64e8000213997ffff56e0f80140a20010800d00347c0803a64e8000217ed7661541a3fff03980000256c0f80140a20010800d00347c0803a64e8000217eb6661541a3fff03980000256a0f80140a20010800d00347c0803a64e8000217e8cac1141a3fff0827b001038b4000038800001386000198313000c801800007c0803a64e8000212c0300014082000c3a40000148000070823b001080030000941bfffc80030004941bfffc809b00203860000183110008801800007c0803a64e800021821b0018809b0020807b000483100004801800007c0803a64e800021807b00003b7b0008800d00187c1b004040a00010800d00207c0803a64e8000214bffff88823b0010809b0018807b00088311001c801800007c0803a64e800021821b0010947bfffc39e0000395fbfffc81db002095dbfffc38c0ffef80bb001438800019807b000c83100018801800007c0803a64e800021815b001c812a00008109000080fb00003988ffff7ceb40385560f80140a20010800d00347c0803a64e8000217ccc3c1141a3fff080bb00143866000083050014801800007c0803a64e800021947bfffc947bfffc3ae30000389b00003860fff73c0002a16000408c7c0803a64e8000213ac0000196dbfffc3aa0000196bbfffc38d7000080bb000c809b00083860fffb3c0002a1600042087c0803a64e800021829b001c947bfffc809b00283860000183140008801800007c0803a64e800021827b0020825b002838920000807b000083130004833b0024801800007c0903a67f2803a63b7b002c4e8004202c19001140820268831b0004730b00014182000c3af80000480000183c6002a1606330bc800d00287c0803a64e8000213997ffff56e0f80140a20010800d00347c0803a64e8000217ed7661541a3fff03980000256c0f80140a20010800d00347c0803a64e8000217eb6661541a3fff03980000256a0f80140a20010800d00347c0803a64e8000217e95661541a3fff0827b001038b4000038800001386000198313000c801800007c0803a64e8000212c0300014082000c3a40000148000070823b001080030000941bfffc80030004941bfffc809b00203860000183110008801800007c0803a64e800021821b0018809b0020807b000483100004801800007c0803a64e800021807b00003b7b0008800d00187c1b004040a00010800d00207c0803a64e8000214bffff88823b0010809b0018807b00088311001c801800007c0803a64e800021821b0010947bfffc39e0000395fbfffc81db002095dbfffc38c0ffef38a00019809b0014807b000c83100018801800007c0803a64e800021815b001c812a00008109000080fb00003988ffff7ceb40385560f80140a20010800d00347c0803a64e8000217ccc3c1141a3fff080bb00143866000083050014801800007c0803a64e800021947bfffc947bfffc3ae30000389b00003860fff73c0002a16000408c7c0803a64e8000213ac0000196dbfffc3aa0000196bbfffc38d7000080bb000c809b00083860fffb3c0002a1600042087c0803a64e800021829b001c947bfffc809b00283860000183140008801800007c0803a64e800021827b0020825b002838920000807b000083130004833b0024801800007c0903a67f2803a63b7b002c4e8004202c19000d408201a8831b0004730b00014182000c3af80000480000183c6002a1606330bc800d00287c0803a64e8000212c17ffff4082003082db001892db001880db000038a00001809b000838600011831b0010833b00147f2803a63b7b00184bfff5bc2c1700014082003082db001892db001880db000038a00001388000013860fff5831b0010833b00147f2803a63b7b00184bfff5882c1700034082003c82db001082bb001892bb001880db000038a00001809b00083860fff583160020833b0014801800007c0903a67f2803a63b7b00184e8004202c1700054082003c82db001082bb001892bb001880db000080bb0008809b00083860000183160020833b0014801800007c0903a67f2803a63b7b00184e80042082db001082b600248295000480140000941bfffc3880ffff387700003c0002a06000fe6c7c0803a64e800021388300003c6002a26063fdac3c0002a1600074a87c0803a64e800021398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a7d0004919d0000907300083e4002a06252c7ac92530004823b00009233000038730000800d00287c0803a64e8000212c19ffff40820134831b0004730b00014182000c3af80000480000183c6002a1606330bc800d00287c0803a64e8000213997ffff56e0f80140a20010800d00347c0803a64e8000217ed7661541a3fff03980000256c0f80140a20010800d00347c0803a64e8000217eb6661541a3fff03980000256a0f80140a20010800d00347c0803a64e8000217e8cac1141a3fff0827b001038b40000809b0008807b00008313000c801800007c0803a64e8000212c0300014082001838600001825b00147e4803a63b7b001c4e800020825b001080030000941bfffc80030004941bfffc809b00203860000183120008801800007c0803a64e800021823b0018809b0020807b000483110004801800007c0803a64e800021807b00003b7b0008800d00187c1b004040a00010800d00207c0803a64e8000214bffff7c2c19ffeb40820154831b0004730b00014182000c3af80000480000183c6002a1606330bc800d00287c0803a64e8000213997ffff56e0f80140a20010800d00347c0803a64e8000217ed7661541a3fff03980000256c0f80140a20010800d00347c0803a64e8000217eb6661541a3fff03980000256a0f80140a20010800d00347c0803a64e8000217e8cac1141a3fff0398000025680f80140a20010800d00347c0803a64e8000217e74641141a3fff0825b001038b30000809b0008807b00008312000c801800007c0803a64e8000212c0300014082001838600001823b00147e2803a63b7b001c4e800020823b001080030000941bfffc80030004941bfffc809b00203860000183110008801800007c0803a64e800021821b0018809b0020807b000483100004801800007c0803a64e800021807b00003b7b0008800d00187c1b004040a00010800d00207c0803a64e8000214bffff7c2c19ffef40820168831b0004730b00014182000c3af80000480000183c6002a1606330bc800d00287c0803a64e8000213997ffff56e0f80140a20010800d00347c0803a64e8000217ed7661541a3fff03980000256c0f80140a20010800d00347c0803a64e8000217eb6661541a3fff03980000256a0f80140a20010800d00347c0803a64e8000217e95661541a3fff0827b001038b4000038800001386000178313000c801800007c0803a64e8000212c0300014082000848000070825b001080030000941bfffc80030004941bfffc809b00203860000183120008801800007c0803a64e800021823b0018809b0020807b000483110004801800007c0803a64e800021807b00003b7b0008800d00187c1b004040a00010800d00207c0803a64e8000214bffff8c825b0010823b00183a000001921b001881fb0014923b001438c0001138a00017809b0008807b0000831200183b2f0000801800007c0903a67f2803a63b7b00144e8004202c19fff3408201e4831b0004730b00014182000c3af80000480000183c6002a1606330bc800d00287c0803a64e80002182db001096fbfffc38a0ffff809b000c386000178316000c801800007c0803a64e8000212c030001408200084800007082bb001480030000941bfffc80030004941bfffc809b00243860000183150008801800007c0803a64e800021829b001c809b0024807b000483140004801800007c0803a64e800021807b00003b7b0008800d00187c1b004040a00010800d00207c0803a64e8000214bffff8c82bb0014807b00008315002c801800007c0803a64e800021829b001438a30000388000173860001783140028801800007c0803a64e800021827b0014947bfffc809b00203860000183130008801800007c0803a64e800021825b0018809b0020807b000083120004801800007c0803a64e800021823b001838a0000338800017807b00088311000c801800007c0803a64e8000212c0300014082001838600001821b001c7e0803a63b7b00244e800020821b001880030000941bfffc80030004941bfffc809b00283860000183100008801800007c0803a64e80002181fb0020809b0028807b0004830f0004801800007c0803a64e800021807b00003b7b0008800d00187c1b004040a00010800d00207c0803a64e8000214bffff7c2c19000540820064831b001082f8002482d70004398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003e8002a26294fdcc929500083e6002a06273c7ac92750004825600009255000038750000800d00287c0803a64e8000212c19000b40820064831b001082f8002482d70004398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003e8002a26294fe00929500083e6002a06273c7ac92750004825600009255000038750000800d00287c0803a64e8000212c19000f40820114831b0004730b00014182000c3af80000480000183c6002a1606330bc800d00287c0803a64e8000213997ffff56e0f80140a20010800d00347c0803a64e8000217ed7661541a3fff03980000256c0f80140a20010800d00347c0803a64e8000217eb6661541a3fff0829b001038b50000809b0008807b000083140030801800007c0803a64e8000212c0300014082001838600001827b00147e6803a63b7b001c4e800020827b001080030000941bfffc80030004941bfffc809b00203860000183130008801800007c0803a64e800021825b0018809b0020807b000483120004801800007c0803a64e800021807b00003b7b0008800d00187c1b004040a00010800d00207c0803a64e8000214bffff7c2c19000340820114831b0004730b00014182000c3af80000480000183c6002a1606330bc800d00287c0803a64e8000213997ffff56e0f80140a20010800d00347c0803a64e8000217ed7661541a3fff03980000256c0f80140a20010800d00347c0803a64e8000217eb6661541a3fff0829b001038b50000809b0008807b000083140034801800007c0803a64e8000212c0300014082001838600001827b00147e6803a63b7b001c4e800020827b001080030000941bfffc80030004941bfffc809b00203860000183130008801800007c0803a64e800021825b0018809b0020807b000483120004801800007c0803a64e800021807b00003b7b0008800d00187c1b004040a00010800d00207c0803a64e8000214bffff7c2c19ffe7408200f4831b0004730b00014182000c3af80000480000183c6002a1606330bc800d00287c0803a64e8000213997ffff56e0f80140a20010800d00347c0803a64e8000217ed7661541a3fff082bb001038b60000809b0008807b000083150038801800007c0803a64e8000212c0300014082001838600001829b00147e8803a63b7b001c4e800020829b001080030000941bfffc80030004941bfffc809b00203860000183140008801800007c0803a64e800021827b0018809b0020807b000483130004801800007c0803a64e800021807b00003b7b0008800d00187c1b004040a00010800d00207c0803a64e8000214bffff7c2c190009408200dc831b0004730b00014182000c3af80000480000183c6002a1606330bc800d00287c0803a64e80002182db00103aa000093997ffff7eabb8385560f80140a20010800d00347c0803a64e8000217eab0e707c6c5dd741a3ffec386300018316002c801800007c0803a64e800021829b001038a30000809b0008807b00008314003c801800007c0803a64e800021827b0010947bfffc809b001c3860000183130008801800007c0803a64e800021825b0014823b001c38910000807b000083120004833b0018801800007c0903a67f2803a63b7b00204e8004202c19fff74082017c831b0004730b00014182000c3af80000480000183c6002a1606330bc800d00287c0803a64e80002182db0010387700008316002c801800007c0803a64e80002182bb001038a30000809b00083860001983150048801800007c0803a64e800021829b0010947bfffc809b001c3860000183140008801800007c0803a64e800021827b0014809b001c807b000083130004801800007c0803a64e800021825b00143a20003d963bfffc3a000001961bfffc38c0000138a00003388000193860001983120044801800007c0803a64e80002181fb0014947bfffc809b002038600001830f0008801800007c0803a64e80002181db0018809b0020807b0000830e0004801800007c0803a64e800021815b001838a0000338800019807b0008830a0040801800007c0803a64e800021813b0018947bfffc809b00243860000183090008801800007c0803a64e800021811b001c80fb002438870000807b000083080004833b0020801800007c0903a67f2803a63b7b00284e8004202c19001940820104831b00103ae0003d96fbfffc3ac0000196dbfffc38c0000f38a00003388000193860001983180044801800007c0803a64e80002182bb0010947bfffc80db001c38a00019809b000c3860fff98315004c801800007c0803a64e800021829b0014809b001c3860000183140008801800007c0803a64e800021827b0014809b001c807b000083130004801800007c0803a64e800021825b001438a0000338800019807b000483120040801800007c0803a64e800021823b0014947bfffc809b00203860000183110008801800007c0803a64e800021821b001881fb0020388f0000807b000083100004833b001c801800007c0903a67f2803a63b7b00244e8004202c19ffe940820154831b00103860fff98318002c801800007c0803a64e80002182fb001038a30000809b00083860001983170048801800007c0803a64e80002182db0010947bfffc809b001c3860000183160008801800007c0803a64e80002182bb0014809b001c807b000083150004801800007c0803a64e800021829b00143a60003d967bfffc3a400001965bfffc38c0000138a00003388000193860001983140044801800007c0803a64e800021823b0014947bfffc809b00203860000183110008801800007c0803a64e800021821b0018809b0020807b000083100004801800007c0803a64e80002181fb001838a0000338800019807b0008830f0040801800007c0803a64e80002181db0018947bfffc809b002438600001830e0008801800007c0803a64e800021815b001c813b002438890000807b0000830a0004833b0020801800007c0903a67f2803a63b7b00284e8004202c19001740820124831b0004730b00014182000c3af80000480000183c6002a1606330bc800d00287c0803a64e8000213980003e56e0f80140a20010800d00347c0803a64e8000217ed7641141a3fff082bb001096dbfffc3a800001969bfffc38c0000138b70000809b00103860001983150044801800007c0803a64e800021827b0010947bfffc809b001c3860000183130008801800007c0803a64e800021825b0014809b001c807b000083120004801800007c0803a64e800021823b001438a0000338800019807b000483110040801800007c0803a64e800021821b0014947bfffc809b00203860000183100008801800007c0803a64e80002181fb001881db0020388e0000807b0000830f0004833b001c801800007c0903a67f2803a63b7b00244e8004202c190007408201a8831b0004730b00014182000c3af80000480000183c6002a1606330bc800d00287c0803a64e8000212c1700014082000c3ac00001480000243980004256e0f80140a20010800d00347c0803a64e8000217ed7641141a3fff082bb00103a80003f969bfffc3a600001967bfffc38d7000038b60000809b00103860001983150044801800007c0803a64e800021825b0010947bfffc3a20003d963bfffc3a000001961bfffc38c0000138a00001388000193860001983120044801800007c0803a64e80002181fb0014947bfffc809b002038600001830f0008801800007c0803a64e80002181db0018809b0020807b0004830e0004801800007c0803a64e800021815b0018809b002038600001830a0008801800007c0803a64e800021813b0018809b0020807b000083090004801800007c0803a64e800021811b001838a0000338800019807b000883080040801800007c0803a64e80002180fb0018947bfffc809b00243860000183070008801800007c0803a64e80002180db001c80bb002438850000807b000083060004833b0020801800007c0903a67f2803a63b7b00284e8004202c19fffb40820164831b0004730b00014182000c3af80000480000183c6002a1606330bc800d00287c0803a64e80002182db001038b70000809b00083860001983160050801800007c0803a64e80002182bb0010947bfffc3a80003d969bfffc3a600001967bfffc38c0000138a00001388000193860001983150044801800007c0803a64e800021825b0014947bfffc809b00203860000183120008801800007c0803a64e800021823b0018809b0020807b000483110004801800007c0803a64e800021821b0018809b00203860000183100008801800007c0803a64e80002181fb0018809b0020807b0000830f0004801800007c0803a64e80002181db001838a0000338800019807b0008830e0040801800007c0803a64e800021815b0018947bfffc809b002438600001830a0008801800007c0803a64e800021813b001c811b002438880000807b000083090004833b0020801800007c0903a67f2803a63b7b00284e8004202c19ffed40820254831b001080db00183ca002a060a5c41038800001807b00088318005c801800007c0803a64e80002182fb0010947bfffc38a0000738800001807b00048317000c801800007c0803a64e8000212c0300014082000c3ac000014800007082bb001480030000941bfffc80030004941bfffc809b00243860000183150008801800007c0803a64e800021829b001c809b0024807b000483140004801800007c0803a64e800021807b00003b7b0008800d00187c1b004040a00010800d00207c0803a64e8000214bffff8882bb0014807b001c83150058801800007c0803a64e800021829b0014947bfffc809b0020807b000483140054801800007c0803a64e800021827b001838a00001809b0010386000198313003c801800007c0803a64e800021825b0018947bfffc809b00243860000183120008801800007c0803a64e800021823b001c809b0024807b000083110004801800007c0803a64e800021821b001c39e0003d95fbfffc39c0000195dbfffc38c0000138a00003388000193860001983100044801800007c0803a64e800021815b001c947bfffc809b002838600001830a0008801800007c0803a64e800021813b0020809b0028807b000083090004801800007c0803a64e800021811b002038a0000338800019807b001083080040801800007c0803a64e80002180fb0020947bfffc809b002c3860000183070008801800007c0803a64e80002180db0024809b002c807b000083060004801800007c0803a64e80002180bb0024809b002c807b000c83050054833b0028801800007c0903a67f2803a63b7b00304e800420831b001082f8002482d70004398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003e8002a26294fe34929500083e6002a06273c7ac92750004825600009255000038750000800d00287c0803a64e800021|@1017,1048575|332,3,@437 708,3,@437 1160,3,@461 1208,3,@463 1328,3,@437 1780,3,@461 1828,3,@463 1948,3,@437 2400,3,@461 2448,3,@463 2568,3,@437 2848,3,@316 2868,3,@1013 2876,3,@511 2932,3,@227 2996,3,@437 3308,3,@437 3652,3,@437 4016,3,@437 4532,3,@1014 4544,3,@227 4636,3,@1015 4648,3,@227 4712,3,@437 4992,3,@437 5272,3,@437 5520,3,@437 5744,3,@437 6736,3,@437 7032,3,@437 7460,3,@437 7808,3,@206 8440,3,@1016 8452,3,@227 1013:S24|67656e52493a204d756c41202d206261642076616c756520 1014:S44|67656e52493a20556e696d706c656d656e74656420696e737472756374696f6e2028496e7374724469765729 1015:S44|67656e52493a20556e696d706c656d656e74656420696e737472756374696f6e2028496e7374724d6f645729 1016:S32|67656e52493a20556e696d706c656d656e74656420696e737472756374696f6e 1017:S22|505043434f4445434f4e5328292e67656e5249283529 1018:O2|@1019,@314 1019:C2,692|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021546bf80140a20010800d00347c0803a64e8000212c03000141800028546bf80140a20010800d00347c0803a64e8000212c0300414080000c3ae30000480000f8973bfffc971bfffc949bfffc94bbfffc3880ffff3c0002a06000fe6c7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d00003f0002a16318ba149319000490790000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000932300043ee002a162f7ba4892e300003c0002a1600005347c0803a64e80002182db000882b6000482950004398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a7d0004919d0000907300083e4002a06252c7ac92530004823400009233000038730000800d00287c0803a64e800021548bf80140a20010800d00347c0803a64e8000212c04000141800028548bf80140a20010800d00347c0803a64e8000212c0400414080000c3ac4000048000100973bfffc971bfffc94bbfffc96fbfffc3ac400003880ffff387600003c0002a06000fe6c7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003e8002a16294ba149295000490750000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a300043e6002a16273ba48926300003c0002a1600005347c0803a64e800021825b00088232000482110004398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002139fd0004919d0000906f00083dc002a061cec7ac91cf000481500000914f0000386f0000800d00287c0803a64e80002138c5000038b60000389700003860000d3c0002a16000d5347c0903a67f2803a64e800420|@1020,1048575|116,3,@316 168,3,@620 224,3,@622 236,3,@325 304,3,@227 432,3,@316 484,3,@620 540,3,@622 552,3,@325 620,3,@227 672,3,@660 1020:S22|505043434f4445434f4e5328292e6d756c6c69283329 1021:O6|@1023,@1025,@1022,@694,@683,@795 1022:O2|@1028,@314 1023:C2,448|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc947bfffc973bfffc971bfffc947bfffc949bfffc389b00103865000083180014801800007c0803a64e800021947bfffc947bfffc833b001c2c1900014082003c831b001080bb0018809b0008807b000c83180004801800007c0803a64e8000213afb0000907700003adb00003aa0000192b60004480000e4831b001038b90000388000013860000183180010801800007c0803a64e80002182fb0010947bfffc80bb001c38800001386000018317000c801800007c0803a64e80002182db0014947bfffc38a00001809b0010807b001483160008801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003a8000019295000490750000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a7d0004919d000092b30004825b0000925300003a3b0008821b00049211000039fb0008926f00043b7b0008398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000081db000091c30000815b000491430004813b00147d2803a63b7b00204e800020|@1024,1048575| 1024:S25|505043434f4445434f4e5328292e616e64496d6d6564283329 1025:O2|@1026,@314 1026:C2,692|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021546bf80140a20010800d00347c0803a64e8000212c03000141800028546bf80140a20010800d00347c0803a64e8000212c0300414080000c3ae30000480000f8973bfffc971bfffc949bfffc94bbfffc3880ffff3c0002a06000fe6c7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d00003f0002a16318ba149319000490790000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000932300043ee002a162f7ba4892e300003c0002a1600005347c0803a64e80002182db000882b6000482950004398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a7d0004919d0000907300083e4002a06252c7ac92530004823400009233000038730000800d00287c0803a64e800021548bf80140a20010800d00347c0803a64e8000212c04000141800028548bf80140a20010800d00347c0803a64e8000212c0400414080000c3ac4000048000100973bfffc971bfffc94bbfffc96fbfffc3ac400003880ffff387600003c0002a06000fe6c7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003e8002a16294ba149295000490750000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a300043e6002a16273ba48926300003c0002a1600005347c0803a64e800021825b00088232000482110004398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002139fd0004919d0000906f00083dc002a061cec7ac91cf000481500000914f0000386f0000800d00287c0803a64e80002138c5000038b7000038960000386000033c0002a16000d5347c0903a67f2803a64e800420|@1027,1048575|116,3,@316 168,3,@620 224,3,@622 236,3,@325 304,3,@227 432,3,@316 484,3,@620 540,3,@622 552,3,@325 620,3,@227 672,3,@660 1027:S24|505043434f4445434f4e5328292e616e6469446f74283329 1028:C2,1044|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021546bf80140a20010800d00347c0803a64e8000212c03000141800028546bf80140a20010800d00347c0803a64e8000212c0300414080000c3ae30000480000f8973bfffc971bfffc949bfffc94bbfffc3880ffff3c0002a06000fe6c7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d00003f0002a16318ba149319000490790000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000932300043ee002a162f7ba4892e300003c0002a1600005347c0803a64e80002182db000882b6000482950004398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a7d0004919d0000907300083e4002a06252c7ac92530004823400009233000038730000800d00287c0803a64e800021548bf80140a20010800d00347c0803a64e8000212c04000141800028548bf80140a20010800d00347c0803a64e8000212c0400414080000c3ac4000048000100973bfffc971bfffc94bbfffc96fbfffc3ac400003880ffff387600003c0002a06000fe6c7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003e8002a16294ba149295000490750000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a300043e6002a16273ba48926300003c0002a1600005347c0803a64e800021825b00088232000482110004398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002139fd0004919d0000906f00083dc002a061cec7ac91cf000481500000914f0000386f0000800d00287c0803a64e80002154abf80140a20010800d00347c0803a64e8000212c0500014180002854abf80140a20010800d00347c0803a64e8000212c0500414080000c3aa50000480000fc973bfffc971bfffc96fbfffc96dbfffc3880ffff386500003c0002a06000fe6c7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003e8002a16294ba149295000490750000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a300043e6002a16273ba48926300003c0002a1600005347c0803a64e800021825b00088232000482110004398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002139fd0004919d0000906f00083dc002a061cec7ac91cf000481500000914f0000386f0000800d00287c0803a64e8000213a990000386000033c0002a16000cf007c0803a64e800021947bfffc3a600001967bfffc38d5000038b70000389600003860fff73b3400003c0002a16000d0787c0903a67f2803a64e800420|@1029,1048575|116,3,@316 168,3,@620 224,3,@622 236,3,@325 304,3,@227 432,3,@316 484,3,@620 540,3,@622 552,3,@325 620,3,@227 744,3,@316 796,3,@620 852,3,@622 864,3,@325 932,3,@227 976,3,@653 1024,3,@655 1029:S21|505043434f4445434f4e5328292e616e645f283329 1030:O4|@1032,@1034,@1031,@795 1031:O2|@1037,@314 1032:C2,476|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc947bfffc973bfffc971bfffc947bfffc949bfffc389b0010386500008318000c801800007c0803a64e800021833b00142c190001408200b0831b00102c1800014082004082fb000482db00007eebb378556bf80140a20010800d00347c0803a64e8000217c17b000408200183860000182bb000c7ea803a63b7b00184e80002082fb000838b80000809b0000807b000483170004801800007c0803a64e8000213ac30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003aa0000192a3000492c30000829b000c7e8803a63b7b00184e800020831b000838b90000809b0000807b000483180008801800007c0803a64e80002182db00102c1600014082000c3ae000014800005c82bb0008947bfffc38b60000809b0008807b000883150004801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003a800001929700049077000048000008947bfffc398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d000092f50004829b00009295000038750000827b00107e6803a63b7b001c4e800020|@1033,1048575| 1033:S25|505043434f4445434f4e5328292e786f72496d6d6564283329 1034:O2|@1035,@314 1035:C2,692|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021546bf80140a20010800d00347c0803a64e8000212c03000141800028546bf80140a20010800d00347c0803a64e8000212c0300414080000c3ae30000480000f8973bfffc971bfffc949bfffc94bbfffc3880ffff3c0002a06000fe6c7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d00003f0002a16318ba149319000490790000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000932300043ee002a162f7ba4892e300003c0002a1600005347c0803a64e80002182db000882b6000482950004398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a7d0004919d0000907300083e4002a06252c7ac92530004823400009233000038730000800d00287c0803a64e800021548bf80140a20010800d00347c0803a64e8000212c04000141800028548bf80140a20010800d00347c0803a64e8000212c0400414080000c3ac4000048000100973bfffc971bfffc94bbfffc96fbfffc3ac400003880ffff387600003c0002a06000fe6c7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003e8002a16294ba149295000490750000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a300043e6002a16273ba48926300003c0002a1600005347c0803a64e800021825b00088232000482110004398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002139fd0004919d0000906f00083dc002a061cec7ac91cf000481500000914f0000386f0000800d00287c0803a64e80002138c5000038b7000038960000386000153c0002a16000d5347c0903a67f2803a64e800420|@1036,1048575|116,3,@316 168,3,@620 224,3,@622 236,3,@325 304,3,@227 432,3,@316 484,3,@620 540,3,@622 552,3,@325 620,3,@227 672,3,@660 1036:S21|505043434f4445434f4e5328292e786f7269283329 1037:C2,692|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021546bf80140a20010800d00347c0803a64e8000212c03000141800028546bf80140a20010800d00347c0803a64e8000212c0300414080000c3ae30000480000f8973bfffc971bfffc949bfffc94bbfffc3880ffff3c0002a06000fe6c7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d00003f0002a16318ba149319000490790000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000932300043ee002a162f7ba4892e300003c0002a1600005347c0803a64e80002182db000882b6000482950004398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a7d0004919d0000907300083e4002a06252c7ac92530004823400009233000038730000800d00287c0803a64e800021548bf80140a20010800d00347c0803a64e8000212c04000141800028548bf80140a20010800d00347c0803a64e8000212c0400414080000c3ac4000048000100973bfffc971bfffc94bbfffc96fbfffc3ac400003880ffff387600003c0002a06000fe6c7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003e8002a16294ba149295000490750000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a300043e6002a16273ba48926300003c0002a1600005347c0803a64e800021825b00088232000482110004398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002139fd0004919d0000906f00083dc002a061cec7ac91cf000481500000914f0000386f0000800d00287c0803a64e80002138c5000038b70000389600003860ffeb3c0002a16000d5347c0903a67f2803a64e800420|@1038,1048575|116,3,@316 168,3,@620 224,3,@622 236,3,@325 304,3,@227 432,3,@316 484,3,@620 540,3,@622 552,3,@325 620,3,@227 672,3,@660 1038:S22|505043434f4445434f4e5328292e786f726973283329 1039:O2|@1040,@314 1040:C2,692|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021546bf80140a20010800d00347c0803a64e8000212c03000141800028546bf80140a20010800d00347c0803a64e8000212c0300414080000c3ae30000480000f8973bfffc971bfffc949bfffc94bbfffc3880ffff3c0002a06000fe6c7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d00003f0002a16318ba149319000490790000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000932300043ee002a162f7ba4892e300003c0002a1600005347c0803a64e80002182db000882b6000482950004398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a7d0004919d0000907300083e4002a06252c7ac92530004823400009233000038730000800d00287c0803a64e800021548bf80140a20010800d00347c0803a64e8000212c04000141800028548bf80140a20010800d00347c0803a64e8000212c0400414080000c3ac4000048000100973bfffc971bfffc94bbfffc96fbfffc3ac400003880ffff387600003c0002a06000fe6c7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003e8002a16294ba149295000490750000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a300043e6002a16273ba48926300003c0002a1600005347c0803a64e800021825b00088232000482110004398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002139fd0004919d0000906f00083dc002a061cec7ac91cf000481500000914f0000386f0000800d00287c0803a64e80002138c5000038b60000389700003860000b3c0002a16000d5347c0903a67f2803a64e800420|@1041,1048575|116,3,@316 168,3,@620 224,3,@622 236,3,@325 304,3,@227 432,3,@316 484,3,@620 540,3,@622 552,3,@325 620,3,@227 672,3,@660 1041:S20|505043434f4445434f4e5328292e6c627a283329 1042:O2|@1045,@314 1043:C2,2072|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e500002c17000340820090973bfffc971bfffc94dbfffc38a00003388300003860001783180010801800007c0803a64e80002182db0004947bfffc809b0004386000018316000c801800007c0803a64e80002182bb0008809b0004807b000083150008801800007c0803a64e800021829b0008809b00043860fff983140004833b000c801800007c0903a67f2803a63b7b00104e8004202c17ffff40820090973bfffc971bfffc94dbfffc38a00003388300003860001783180010801800007c0803a64e80002182db0004947bfffc809b0004386000018316000c801800007c0803a64e80002182bb0008809b0004807b000083150008801800007c0803a64e800021829b0008809b00043860000183140004833b000c801800007c0903a67f2803a63b7b00104e8004202c17fffd40820248708b00014182000c3ac4000048000020973bfffc3ac300003c6002a1606330bc800d00287c0803a64e8000213996ffff56c0f80140a20010800d00347c0803a64e8000217eb6661541a3fff03980000256a0f80140a20010800d00347c0803a64e8000217e95661541a3fff0568bf80140a20010800d00347c0803a64e8000212c140001418000343e6000023a7300017e8b9838556bf80140a20010800d00347c0803a64e8000217c1498004080000c3a54000048000104973bfffc971bfffc947bfffc94dbfffc80050004941bfffc3880ffff387400003c0002a06000fe6c7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a7d0004919d00003e4002a16252efac9253000490730000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000926300043e2002a16231efe4922300003c0002a1600005347c0803a64e800021821b000c81f0001881cf0004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021395d0004919d0000906a00083d2002a06129c7ac912a0004810e0000910a0000386a0000800d00287c0803a64e800021973bfffc971bfffc94dbfffc80050004941bfffc3892000083180014801800007c0803a64e800021823b0008947bfffc809b0008386000018311000c801800007c0803a64e800021821b000c809b0008807b000083100008801800007c0803a64e80002181fb000c809b0008807b0004830f0004833b0010801800007c0903a67f2803a63b7b00144e800420708b00014182000c3ac4000048000020973bfffc3ac300003c6002a1606330bc800d00287c0803a64e8000213996ffff56c0f80140a20010800d00347c0803a64e8000217eb6661541a3fff03a8300003980000256a0f80140a20010800d00347c0803a64e8000217c75661541a3fff0973bfffc971bfffc969bfffc94dbfffc80050004941bfffc83180038801800007c0803a64e800021827b00002c13000140820084825b000c38830000807b00088312001c801800007c0803a64e800021823b000c947bfffc809b0008386000018311000c801800007c0803a64e800021821b0010809b0008807b000083100008801800007c0803a64e80002181fb0010809b0008807b0004830f0004833b0014801800007c0903a67f2803a63b7b00184e8004202c13fff940820084825b000c38830000807b00088312001c801800007c0803a64e800021823b000c947bfffc809b0008386000018311000c801800007c0803a64e800021821b0010809b0008807b000083100008801800007c0803a64e80002181fb0010809b0008807b0004830f0004833b0014801800007c0903a67f2803a63b7b00184e800420825b000c947bfffc3a200001963bfffc3a000003961bfffc38c0000138a0003f809b00143860001783120034801800007c0803a64e80002181fb0010947bfffc809b000c38600001830f000c801800007c0803a64e80002181db0014809b000c807b0000830e0008801800007c0803a64e800021815b000c812a00348109000038e000093987ffff7d0b38385560f80140a20010800d00347c0803a64e8000217d0b0e707ccc5dd741a3ffec38c6000138a0000190a90000809b001438a6000080640030388000373b230000386000373b190000801800007c0803a64e8000212c0300014082000c3b0000014800004c82fb001480030004941bfffc809b00108063000083170008801800007c0803a64e800021807b00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffffac82fb0014809b000c3860000983170004801800007c0803a64e80002182db0014947bfffc80db001038a000013880001b386000698316002c801800007c0803a64e80002182bb00183860000183150028801800007c0803a64e800021829b0018947bfffc809b0014386000018314000c801800007c0803a64e800021827b001c809b0014807b000083130008801800007c0803a64e800021825b001c80120024941bfffc809b0018386000018312000c801800007c0803a64e800021823b0020809b0018807b000083110008801800007c0803a64e800021821b0020809b0018807b000883100020801800007c0803a64e80002181fb0020809b0010807b001c830f001c801800007c0803a64e80002181db0020947bfffc809b001c38600001830e000c801800007c0803a64e800021815b0024809b001c807b0000830a0008801800007c0803a64e800021813b001c810900283ce002a260e7413490e8000080c9002c38a0000390a60000809b002480640004388900003b230000807b00183b190000833b0028801800007c0903a67f2803a63b7b002c4e800420|@1044,1048575|364,3,@437 476,2,65536 556,3,@316 608,3,@690 664,3,@692 676,3,@325 744,3,@227 944,3,@437 2000,3,@773 1044:S35|505043434f4445434f4e5328292e636f6d70617265416e644272616e63685249283429 1045:C2,372|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021546bf80140a20010800d00347c0803a64e8000212c03000141800028546bf80140a20010800d00347c0803a64e8000212c0300414080000c3ae30000480000f4973bfffc971bfffc949bfffc3880ffff3c0002a06000fe6c7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d00003f0002a16318ba149319000490790000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000932300043ee002a162f7ba4892e300003c0002a1600005347c0803a64e80002182db000482b6000482950004398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a7d0004919d0000907300083e4002a06252c7ac92530004823400009233000038730000800d00287c0803a64e80002138c4000038b70000388000013860fff93c0002a16000d5347c0903a67f2803a64e800420|@1046,1048575|112,3,@316 164,3,@620 220,3,@622 232,3,@325 300,3,@227 352,3,@660 1046:S22|505043434f4445434f4e5328292e636d706c69283229 1047:O1|@1048 1048:C2,8|806300104e800020|@1049,524289| 1049:S25|505043434f4445434f4e5328292e70726f634e616d65283129 1050:O2|@1052,@1051 1051:O12|@1054,@782,@767,@761,@744,@741,@650,@651,@775,@675,@771,@314 1052:C2,64|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180c3000c80a30008808300048063000083180004801800007c0903a64e800420|@1053,1048575| 1053:S35|505043434f4445434f4e5328292e636f6d70617265416e644272616e63685252283129 1054:C2,1172|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e500002c17fffd4082006c973bfffc971bfffc94dbfffc80050004941bfffc3ac0000196dbfffc94dbfffc38c0000538a40000388300003860000183180008801800007c0803a64e80002182bb0008809b0004807b000083150004833b000c801800007c0903a67f2803a63b7b00104e8004202c1700014082039c82a500042c1500014082004c973bfffc971bfffc947bfffc949bfffc94dbfffc96bbfffc3a800001969bfffc94dbfffc38c0000d38a400003880001783180008801800007c0803a64e8000213ac30000480000982c15fff94082004c973bfffc971bfffc947bfffc949bfffc94dbfffc96bbfffc3a800001969bfffc94dbfffc38c0000d38a400003880001783180008801800007c0803a64e8000213ac3000048000048973bfffc971bfffc947bfffc949bfffc94dbfffc96bbfffc3a800001969bfffc94dbfffc38c0000338a400003880001783180008801800007c0803a64e8000213ac30000827b00103a400001965bfffc3a200003963bfffc38c0000138a0003f388000173860001783130028801800007c0803a64e800021821b0010947bfffc809b00083860000183100014801800007c0803a64e80002181fb0014809b0008807b0000830f0010801800007c0803a64e80002181db0008814e0034812a0000390000093988ffff7d2b40385560f80140a20010800d00347c0803a64e8000217d2b0e707cec5dd741a3ffec38e7000138c0000190ca000080bb00148085002438a7000038640000388000373b230000386000373b190000801800007c0803a64e8000212c0300014082000c3b0000014800004c82fb001480030004941bfffc809b000c8063000083170010801800007c0803a64e800021807b00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffffac82fb0014809b00083860000983170004801800007c0803a64e80002182db0014947bfffc80db000c38a000013880001b3860006983160020801800007c0803a64e80002182bb0018386000018315001c801800007c0803a64e800021829b0018947bfffc809b00103860000183140014801800007c0803a64e800021827b001c809b0010807b000083130010801800007c0803a64e800021825b001c80120018941bfffc809b00143860000183120014801800007c0803a64e800021823b0020809b0014807b000083110010801800007c0803a64e800021821b0020809b0014807b00088310000c801800007c0803a64e80002181fb002039c0000195dbfffc815b0018955bfffc38c0fffd80bb0020809b002438600001830f0008801800007c0803a64e800021813b0014810900283ce002a260e7413490e8000080c9002c38a0000390a60000809b002080640004388900003b230000807b00103b190000833b0024801800007c0903a67f2803a63b7b00284e800420973bfffc82d8002c82b60004398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a9d0004919d00003e6002a3627325f0927400083e4002a06252c7ac92540004823500009234000038740000800d00287c0803a64e800021|@1056,1048575|1004,3,@773 1124,3,@1055 1136,3,@227 1055:S38|636f6d70617265416e644272616e636852523a20556e696d706c656d656e7465642074657374 1056:S35|505043434f4445434f4e5328292e636f6d70617265416e644272616e63685252283429 1057:O2|@1058,@1011 1058:C2,64|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180c3000c80a30008808300048063000083180004801800007c0903a64e800420|@1059,1048575| 1059:S35|505043434f4445434f4e5328292e636f6d70617265416e644272616e63685249283129 1060:O2|@1062,@1061 1061:O12|@1064,@744,@741,@609,@745,@761,@650,@651,@775,@782,@767,@675 1062:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@1063,1048575| 1063:S25|505043434f4445434f4e5328292e6a756d706261636b283129 1064:C2,868|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e5003482d700003aa000093995ffff7ecba8385560f80140a20010800d00347c0803a64e8000217ecb0e707e8c5dd741a3ffec3a9400013ac0000192d70000973bfffc971bfffc947bfffc949bfffc94bbfffc38b4000038800037386000378318002c801800007c0803a64e8000212c0300014082000c3aa000014800004c829b000c80030004941bfffc809b00048063000083140004801800007c0803a64e800021807b00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffffac829b00042814000141820180825b000c80db000038a000013880001b3860003183120020801800007c0803a64e800021823b000c3a000001961bfffc81fb000495fbfffc38c0000538a00001388000373860000183110028801800007c0803a64e80002181db000c809b00003860fffd830e0024801800007c0803a64e800021815b000c947bfffc80db000438a000013880001b38600041830a0020801800007c0803a64e800021813b0010386000018309001c801800007c0803a64e800021811b0010947bfffc809b00083860000183080008801800007c0803a64e80002180fb0014809b0008807b000083070004801800007c0803a64e80002180db001480060018941bfffc809b000c3860000183060008801800007c0803a64e80002180bb0018809b000c807b000083050004801800007c0803a64e800021809b001880640014809b000c3b230000807b00083b190000801800007c0803a64e800021831b000c82f800283ec002a262d6413492d7000082b8002c3a800003929500003a600001480000143a600001947bfffc947bfffc947bfffc827b0018807b000c83130010801800007c0803a64e800021825b000c823200008211000081fb00143990ffff7deb80385560f80140a20010800d00347c0803a64e8000217dcc7c1141a3fff0815b0018386e0000830a000c801800007c0803a64e80002138c0000138a0000138830000386000053c0002a16000c2007c0803a64e800021813b0018947bfffc809b00103860000183090008801800007c0803a64e800021811b001c809b0010807b000083080004801800007c0803a64e80002180fb001080c7002838a0000190a6000038600001809b00207c8803a63b7b00244e800020|@1065,1048575|592,3,@773 756,3,@633 1065:S25|505043434f4445434f4e5328292e6a756d706261636b283329 1066:O2|@1067,@761 1067:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@1068,1048575| 1068:S22|505043434f4445434f4e5328292e6669787570283129 1069:O2|@1071,@1070 1070:O2|@1073,@894 1071:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@1072,1048575| 1072:S35|505043434f4445434f4e5328292e6c6f616448616e646c657241646472657373283129 1073:C2,184|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000213d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ac0000192d70000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213add0004919d000092f600043aa0ffff92b60000973bfffc96fbfffc38a40000388300003876000083180004801800007c0803a64e800021807b0000829b00047e8803a63b7b00084e800020|@1074,1048575| 1074:S35|505043434f4445434f4e5328292e6c6f616448616e646c657241646472657373283229 1075:O2|@1077,@1076 1076:O4|@1079,@745,@744,@675 1077:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@1078,1048575| 1078:S29|505043434f4445434f4e5328292e666978757048616e646c6572283129 1079:C2,320|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e4003482d700003aa000093995ffff7ecba8385560f80140a20010800d00347c0803a64e8000217ecb0e707e8c5dd741a3ffec3a9400013ac0000192d70000973bfffc971bfffc947bfffc949bfffc38b4000038800037386000378318000c801800007c0803a64e8000212c030001408200084800004c82bb000880030004941bfffc809b00048063000083150008801800007c0803a64e800021807b00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffffb082bb0000829500283e6002a262734134927400008255002c3a20000392320000821b00083875000083100004801800007c0803a64e80002181fb000081cf0000814e0000813b00049149000038600001811b000c7d0803a63b7b00104e800020|@1080,1048575|232,3,@773 1080:S29|505043434f4445434f4e5328292e666978757048616e646c6572283229 1081:C2,128|7f2802a6633900028303001c82f8000072eb00014082006482d7000082b60000827500002c1300014082001c973bfffc3c6002a1606352b4800d00287c0803a64e80002182950004398000013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d0000928300007f2803a64e800020386000014e800020|@1082,1040385|48,3,@487 1082:S28|505043434f4445434f4e5328292e636f646541646472657373283129 1083:O3|@1084,@343,@332 1084:O3|@1086,@1088,@1085 1085:O2|@1090,@9385 1086:O2|@1087,@9385 1087:C2,32|82e3000082d800047c17b0404082000c386000034e800020386000014e800020|@337,983041| 1088:O2|@1089,@9385 1089:C2,76|7f2802a6633900023ae30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092e300083ae0008b92e3000482f8000492e300007f2803a64e800020|@337,917505| 1090:C2,48|82e3000082d800047c17b0404082000c806300084e800020973bfffc3c6002a160630a30800d00287c0803a64e800021|@337,983041|28,3,@341 1091:O4|@9377,@1093,@1096,@1092 1092:O1|@1103 1093:O1|@1094 1094:C2,4|4e800020|@1095,524289| 1095:S4|49746572 1096:O1|@1097 1097:C2,72|7f2802a6633900023b030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003ee002a362f7322892e30000930300047f2803a64e800020|@1102,917505|48,3,@1098 1098:C2,52|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021809800043c0002a3600032787c0903a64e800420|@1101,1048575|36,3,@1099 1099:C2,148|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021830400082818000141820064973bfffc947bfffc949bfffc3860000183040004801800007c0803a64e800021831b0004801800007c0803a64e80002182fb00003860000183170000801800007c0803a64e80002138830000807b0004833b00087f2803a63b7b000c4bffff80386000014e800020|@1100,1048575| 1100:S11|4d6973632e666f72283229 1101:S14|4d6973632e666f72283129283129 1102:S11|4d6973632e666f72283129 1103:C2,72|7f2802a6633900023b030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003ee002a362f733cc92e30000930300047f2803a64e800020|@1110,917505|48,3,@1104 1104:C2,80|7f2802a6633900023ae30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003ec002a362d6343892c3000092e3000882f8000492e300047f2803a64e800020|@1109,983041|48,3,@1105 1105:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180b80004809800083c0002a36000348c7c0903a64e800420|@1108,1048575|40,3,@1106 1106:C2,184|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021830300082818000141820088973bfffc947bfffc949bfffc94bbfffc82e30004386000013b170000801800007c0803a64e800021831b0000801800007c0803a64e8000213ac30000807b00043b160000801800007c0803a64e80002182bb0008947bfffc3860000183150000801800007c0803a64e80002180bb0004809b0000833b00107f2803a63b7b00144bffff5c386400004e800020|@1107,1048575| 1107:S23|4d6973632e726576666f6c644974657261746f72283329 1108:S29|4d6973632e726576666f6c644974657261746f72283129283129283129 1109:S26|4d6973632e726576666f6c644974657261746f72283129283129 1110:S23|4d6973632e726576666f6c644974657261746f72283129 1111:O1|@1128 1112:O1|@1113 1113:C2,20|3f00000063184d88801800007c0903a64e800420|@1114,917505|0,3,I105 1114:S18|416464726573732e697353686f7274283129 1115:O2|@1116,@9396 1116:C2,104|7f2802a663390002706b0001418200084e800020973bfffc398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003ee002a162f730cc92e300083ee002a162f730dc92e3000482f8000492e30000800d00287c0803a64e800021|@1117,917505|60,3,@438 72,3,@439 1117:S18|416464726573732e746f53686f7274283129 1118:O1|@1119 1119:C2,4|4e800020|@1120,524289| 1120:S13|756e7361666543617374283129 1121:O2|@1122,@9396 1122:C2,104|7f2802a663390002706b000141820058973bfffc398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003ee002a362f737c492e300083ee002a162f730dc92e3000482f8000492e30000800d00287c0803a64e8000214e800020|@1124,917505|56,3,@1123 68,3,@439 1123:S9|746f41646472657373 1124:S20|416464726573732e746f41646472657373283129 1125:O1|@1126 1126:C2,20|8303000082e3000456ec083a7c78602e4e800020|@1127,917505| 1127:S12|72756e5f63616c6c32283129 1128:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180830004806300003c0002a3600038947c0903a64e800420|@1131,786435|40,3,@1129 1129:C2,24|7c0320404082000c386000034e800020386000014e800020|@1130,524291| 1130:S19|506f6c794d4c2e706f696e7465724571283229 1131:S19|506f6c794d4c2e706f696e7465724571283129 1132:O2|@1134,@1133 1133:O6|@1137,@1145,@964,@1184,@1194,@1136 1134:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@1135,1048575| 1135:S26|5452414e535f54414228292e6765745265676973746572283129 1136:O9|@1217,@1145,@1204,@964,@1232,@1239,@1195,@1264,@1216 1137:C2,452|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002a362d63bac92d700009077000c90b7000882d8000892d70004398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003a8000019295000490b50000398000013bbdfff87c1df04040a00010800d001c7c0803a64e8000213a9d0004919d000092b40000973bfffc971bfffc947bfffc949bfffc94bbfffc80030028941bfffc96fbfffc969bfffc947bfffc38c4000038b400003c8002a360843d143860000383180014801800007c0803a64e800021827b001880bb0014809b0000807b000483130010801800007c0803a64e800021825b0014823b00188212001081f0000c95fbfffc80d0000880b0000480900000807b00108311000c801800007c0803a64e80002181db0008280e000141820050815b0018812a000881090000807b0010830800b4801800007c0803a64e80002180fb001880bb00143c8002a360843d6883070004833b001c801800007c0903a67f2803a63b7b00204e80042038600001815b001c7d4803a63b7b00204e800020|@1144,1048575|68,3,@1138 232,3,@1140 396,3,@1143 1138:C2,288|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000218078000c82f8000482d70000973bfffc80030010941bfffc8078000883160020801800007c0803a64e80002182bb0000546bf80140a20010800d00347c0803a64e8000212c030001408000084800003082950000827400007c6b9838556bf80140a20010800d00347c0803a64e8000217c03980040800008480000183c6002a0606395e0800d00287c0803a64e800021398000025460f80140a20010800d00347c0803a64e8000217e43661541a3fff0564c083a7e34602e3a910000568bf80140a20010800d00347c0803a64e8000212c1400014081001838600003821b00047e0803a63b7b00084e80002038600001821b00047e0803a63b7b00084e800020|@1139,1048575|156,3,@51 1139:S34|5452414e535f54414228292e6765745265676973746572283329696e557365283129 1140:O1|@1141 1141:C2,8|386000034e800020|@1142,524289| 1142:S29|5452414e535f54414228292e6765745265676973746572283329283129 1143:S11|6765745265676973746572 1144:S26|5452414e535f54414228292e6765745265676973746572283329 1145:O5|@1147,@1159,@1169,@964,@1146 1146:O3|@1180,20,@964 1147:C2,652|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc947bfffc94bbfffc80050024941bfffc386000153c0002a1600074a87c0803a64e8000213c8002a3608440703c0002a1600074a87c0803a64e800021809b00083c0002a1600074a87c0803a64e8000213c8002a36084407c3c0002a1600074a87c0803a64e800021831b0000801800007c0803a64e8000213c6002a360634088831b0000801800007c0803a64e800021833b00048319001c82f800003880ffff387700003c0002a06000fe6c7c0803a64e800021831b0000801800007c0803a64e8000213c6002a360634094831b0000801800007c0803a64e80002182db000482b60008829500003880ffff387400003c0002a06000fe6c7c0803a64e800021831b0000801800007c0803a64e8000213c6002a3606340a4831b0000801800007c0803a64e800021827b000482530030823200003880ffff387100003c0002a06000fe6c7c0803a64e800021831b0000801800007c0803a64e80002138600015831b0000801800007c0803a64e8000213c6002a3606340b4831b0000801800007c0803a64e800021821b000481fb000c809b000080700010830f0010801800007c0803a64e80002138600015831b0000801800007c0803a64e80002181db000c814e000c812a000880090008941bfffc809b000838600003830e0008801800007c0803a64e800021831b0000801800007c0803a64e800021811b001038e30000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00003cc002a360c640c490c3000080bb000490a3000c809b00089083000883280004932300043b070000833b0014801800007c0903a67f2803a63b7b00184e800420|@1158,1048575|60,3,@511 76,3,@1148 84,3,@511 104,3,@511 120,3,@1149 128,3,@511 160,3,@1150 204,3,@316 236,3,@1151 280,3,@316 312,3,@1152 356,3,@316 408,3,@1153 588,3,@1154 1148:S2|2028 1149:S2|290a 1150:S4|7073703d 1151:S5|206c696d3d 1152:S5|207273703d 1153:S5|726567733d 1154:C2,108|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f800083a7900003a5800003a230000389100008077000c3c0002a36000414c7c0803a64e80002180b2000c3883000038710000831200043b330000801800007c0903a67f2803a64e800420|@1157,1048575|56,3,@1155 1155:C2,412|7f2802a6633900028303000082f8000082d700002c16ffff408200cc82b70004829500007c8ba038556bf80140a20010800d00347c0803a64e8000217c04a00040800098548bf80140a20010800d00347c0803a64e8000212c040001408000084800002c829500007c8ba038556bf80140a20010800d00347c0803a64e8000217c04a000408000084800001c973bfffc3c6002a0606395e0800d00287c0803a64e800021398000025480f80140a20010800d00347c0803a64e8000217e84661541a3fff0568c083a7c95602e386400007f2803a64e800020806300047f2803a64e80002082b700048195fffc558c09fc619400017c8ba038556bf80140a20010800d00347c0803a64e8000217c04a00040800080548bf80140a20010800d00347c0803a64e8000212c04000140800008480000348195fffc558c09fc619400017c8ba038556bf80140a20010800d00347c0803a64e8000217c04a000408000084800001c973bfffc3c6002a0606395e0800d00287c0803a64e800021548c083a7e95602e387400007f2803a64e800020806300047f2803a64e800020|@1156,1032195|144,3,@51 360,3,@51 1156:S19|5374726574636841727261792e737562283229 1157:S28|5452414e535f54414228292e7072696e74537461636b283329283129 1158:S25|5452414e535f54414228292e7072696e74537461636b283329 1159:O3|@1161,@964,@1160 1160:O2|@1165,@964 1161:C2,624|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0400014082000c386000014e800020973bfffc971bfffc94bbfffc80040000941bfffc80040004941bfffc80040008941bfffc8004000c941bfffc3880ffff3c0002a06000fe6c7c0803a64e800021831b0010801800007c0803a64e80002138600041831b0010801800007c0803a64e8000213880ffff807b00083c0002a06000fe6c7c0803a64e800021831b0010801800007c0803a64e80002138600041831b0010801800007c0803a64e800021833b0014809b0010807b000c83190008801800007c0803a64e800021831b001482f8000482d70000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082b6000c92a30004829b00049283000083160028801800007c0803a64e800021280300014182004c3c6002a360634610831b0010801800007c0803a64e800021827b00148253000482320000807b00048311002c801800007c0803a64e800021831b0010801800007c0803a64e800021827b00002c13ffff40820008480000b83c6002a36063461c831b0010801800007c0803a64e800021825b0014823200048211000c81f000183980000255e0f80140a20010800d00347c0803a64e8000217dcf641141a3fff0815b0000398effff7d4b70385560f80140a20010800d00347c0803a64e8000217d4b0e707d2c5dd741a3ffec392900013880ffff386900003c0002a06000fe6c7c0803a64e800021831b0010801800007c0803a64e80002138600053831b0010801800007c0803a64e80002138600015831b0010833b0018801800007c0903a67f2803a63b7b001c4e800420|@1164,1048575|96,3,@316 156,3,@316 324,3,@1162 412,3,@1163 540,3,@316 1162:S4|20696e20 1163:S10|20746f20626173654028 1164:S25|5452414e535f54414228292e7072696e74456e747279283329 1165:C2,884|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e300002c1700054082004482d8000482b60000973bfffc949bfffc806300048315002c801800007c0803a64e800021831b0000833b0004801800007c0903a67f2803a63b7b00084e8004202c17fffd408200ac82d8000482b6000c973bfffc971bfffc949bfffc80030004941bfffc807b000083150000801800007c0803a64e8000212803000141820054829b0008827400048253000c807b000083120004801800007c0803a64e8000213880ffff3c0002a06000fe6c7c0803a64e800021831b0004833b000c801800007c0903a67f2803a63b7b00104e8004203860007f831b0004833b000c801800007c0903a67f2803a63b7b00104e8004202c1700014082007c973bfffc971bfffc949bfffc80030004941bfffc386000513b040000801800007c0803a64e80002182db000882b6000482950000807b000083140070801800007c0803a64e800021831b0004801800007c0803a64e80002138600053831b0004833b000c801800007c0903a67f2803a63b7b00104e8004202c170003408200a082d8000482b60000973bfffc949bfffc80030008941bfffc806300048315002c801800007c0803a64e800021831b0004801800007c0803a64e8000213c6002a3606349e4831b0004801800007c0803a64e8000213880ffff807b00003c0002a06000fe6c7c0803a64e800021831b0004801800007c0803a64e80002138600053831b0004833b0008801800007c0903a67f2803a63b7b000c4e8004202c17fffb40820074973bfffc949bfffc80030004941bfffc3c6002a3606349f03b040000801800007c0803a64e8000213880ffff807b00003c0002a06000fe6c7c0803a64e800021831b0004801800007c0803a64e80002138600053831b0004833b0008801800007c0903a67f2803a63b7b000c4e800420973bfffc949bfffc80030004941bfffc386000b73b040000801800007c0803a64e80002182db00002c160001408200084800006c80160004941bfffc3880ffff807600003c0002a06000fe6c7c0803a64e800021831b0008801800007c0803a64e80002138600041831b0008801800007c0803a64e80002182db00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffff90386000bb831b0004833b0008801800007c0903a67f2803a63b7b000c4e800420|@1168,1048575|208,3,@316 480,3,@1166 512,3,@316 600,3,@1167 632,3,@316 764,3,@316 1166:S2|4028 1167:S6|626173654028 1168:S30|5452414e535f54414228292e7072696e74537461636b556e696f6e283229 1169:O2|@1170,@964 1170:C2,556|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212803000141820104398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003ee002a362f74c7c92e3000082f8000492e300089083000482c4001c82b60000973bfffc971bfffc949bfffc947bfffc3980000256a0f80140a20010800d00347c0803a64e8000217e8cac1141a3fff0568bf80140a20010800d00347c0803a64e8000212c1400014080000c3874000048000050827b00043a540000389200008073000c3c0002a36000414c7c0803a64e8000212c030001408200243ab20000800d00187c1b004040a00010800d00207c0803a64e8000214bffff7838720000831b0000833b000c801800007c0903a67f2803a63b7b00104e800420398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002a362d64f2092d7000082b8000492b7000890970004973bfffc971bfffc949bfffc96fbfffc3a80ffff398000025680f80140a20010800d00347c0803a64e8000217e74661541a3fff0825b00048232001c821100007e6b8038556bf80140a20010800d00347c0803a64e8000217c1380004180000c3873000048000048389300008072000c3c0002a36000414c7c0803a64e8000212c030001408200243a930000800d00187c1b004040a00010800d00207c0803a64e8000214bffff7038730000831b0000833b000c801800007c0903a67f2803a63b7b00104e800420|@1179,1048575|76,3,@1171 208,3,@1155 332,3,@1176 468,3,@1155 1171:C2,268|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000882d70008546bf80140a20010800d00347c0803a64e8000212c0300014180000c3aa00003480000083aa00001398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a9d0004919d00003e6002a362734da49274000090740004398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213a5d0004919d00003e2002a362314df4923200009312000c907200088218000492120004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a30008928300049243000039f8000083160004801800007c0903a67f2803a64e800420|@1175,1048575|116,3,@1172 168,3,@1174 1172:C2,8|807800044e800020|@1173,786433| 1173:S36|5452414e535f54414228292e6f766572537461636b2832296d6b49746572283129283129 1174:C2,228|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc8018000c941bfffc82f800083980000256e0f80140a20010800d00347c0803a64e8000217eccbc1141a3fff056cbf80140a20010800d00347c0803a64e8000212c1600014080000c387600004800005482bb0004829500043a760000389300008074000c3c0002a36000414c7c0803a64e8000212c030001408200243af30000800d00187c1b004040a00010800d00207c0803a64e8000214bffff7438730000831b0000833b0008801800007c0903a67f2803a63b7b000c4e800420|@1173,1048575|140,3,@1155 1175:S33|5452414e535f54414228292e6f766572537461636b2832296d6b49746572283129 1176:C2,280|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000882d7000882b800048295001c827400007c6b9838556bf80140a20010800d00347c0803a64e8000217c0398004080000c3a400003480000083a400001398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a3d0004919d00003e0002a3621050549211000090710004398000043bbdffec7c1df04040a00010800d001c7c0803a64e80002139fd0004919d00003dc002a361ce507891cf0000930f000c906f000892af0004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000924300089223000491e300003958000083160004801800007c0903a67f2803a64e800420|@1175,1048575|132,3,@1177 184,3,@1178 1177:C2,8|807800044e800020|@1173,786433| 1178:C2,240|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc8018000c941bfffc82f800083980000256e0f80140a20010800d00347c0803a64e8000217ed7661541a3fff082bb0004829500048274001c825300007ecb9038556bf80140a20010800d00347c0803a64e8000217c1690004180000c387600004800004c3a360000389100008074000c3c0002a36000414c7c0803a64e8000212c030001408200243af10000800d00187c1b004040a00010800d00207c0803a64e8000214bffff6838710000831b0000833b0008801800007c0903a67f2803a63b7b000c4e800420|@1173,1048575|152,3,@1155 1179:S24|5452414e535f54414228292e6f766572537461636b283229 1180:C2,248|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021949bfffc971bfffc947bfffc82f800043980000256e0f80140a20010800d00347c0803a64e8000217eccbc1141a3fff0973bfffc96dbfffc3aa00001809b00007eab2038556bf80140a20010800d00347c0803a64e8000217c1520004081001838600001833b00047f2803a63b7b00144e80002096bbfffc387500003b1b00143c0002a3600052b87c0803a64e800021807b0000398000025460f80140a20010800d00347c0803a64e8000217f23661541a3fff03ab900003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffff68|@1183,1048575|160,3,@1181 1181:C2,440|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8fff8546bf80140a20010800d00347c0803a64e8000212c030001408000084800003082d7000082b600007c6ba838556bf80140a20010800d00347c0803a64e8000217c03a8004080000848000020973bfffc3aa300003c6002a0606395e0800d00287c0803a64e800021398000025460f80140a20010800d00347c0803a64e8000217ea3661541a3fff056ac083a7e96602e3ad4000056cbf80140a20010800d00347c0803a64e8000212c160001408100dc973bfffc971bfffc947bfffc96dbfffc3860004183180000801800007c0803a64e800021827b00088253fffc823200088211000080130000941bfffc8010002c941bfffc807b000c8310001c801800007c0803a64e800021831b0000801800007c0803a64e800021831b0004801800007c0803a64e80002181fb00103860007b830f0000801800007c0803a64e80002181db0010800e0000941bfffc3880ffff807b000c3c0002a06000fe6c7c0803a64e800021831b0000801800007c0803a64e80002138600001815b00187d4803a63b7b001c4e800020386000017f2803a64e800020|@1182,1048575|120,3,@51 376,3,@316 1182:S35|5452414e535f54414228292e7072696e74526567732832297072696e74526567283129 1183:S24|5452414e535f54414228292e7072696e7452656773283229 1184:O3|@1186,@1185,@964 1185:O3|@1190,@964,@1189 1186:C2,720|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000882d70000973bfffc971bfffc947bfffc949bfffc94dbfffc83160020801800007c0803a64e800021546bf80140a20010800d00347c0803a64e8000212c030001408000084800003082bb0004829500007c6ba038556bf80140a20010800d00347c0803a64e8000217c03a000408000084800001c3a8300003c6002a0606395e0800d00287c0803a64e800021398000025460f80140a20010800d00347c0803a64e8000217e63661541a3fff0566c083a7e55602e3ab200002c15000140820160546bf80140a20010800d00347c0803a64e8000212c0300014080000848000030823b0004821100007c6b8038556bf80140a20010800d00347c0803a64e8000217c03800040800008480000183c6002a0606395e0800d00287c0803a64e800021398000025460f80140a20010800d00347c0803a64e8000217de3661541a3fff039c0000355eb083a7dd1592e398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021395d0004919d000039200001912a0004811b0008910a0000398000013bbdfff87c1df04040a00010800d001c7c0803a64e80002138fd0004919d00009147000080db000080a60000809b000c80640004388500003b230000386700003b190000801800007c0803a64e800021831b00009078000082fb001482d700003980000256c0f80140a20010800d00347c0803a64e8000217eacb41141a3fff092b7000038600001829b00107e8803a63b7b00184e800020823b000c8211000881f00008800f0000941bfffc3880ffff3c0002a06000fe6c7c0803a64e800021388300003c6002a3606357e43c0002a1600074a87c0803a64e800021398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002139dd0004919d0000906e00083d4002a0614ac7ac914e0004813b0000912e0000386e0000800d00287c0803a64e800021|@1188,1048575|156,3,@51 304,3,@51 600,3,@316 620,3,@1187 628,3,@511 684,3,@227 1187:S29|676574527365743a2063616e2774206765742072656769737465722023 1188:S22|5452414e535f54414228292e67657452736574283529 1189:O2|@1192,@964 1190:C2,316|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e8000202c0400014082000c386000014e800020973bfffc971bfffc808400008063000083180008801800007c0803a64e800021947bfffc3b2000012c0300014082000c3b19000048000048398000025720f80140a20010800d00347c0803a64e8000217ef9661541a3fff0806300043b370000800d00187c1b004040a00010800d00207c0803a64e8000214bffffb082fb000482d7000482b60000829500187f0ba378556bf80140a20010800d00347c0803a64e8000217c18a0004082001838600001827b00087e6803a63b7b000c4e800020398000013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d0000827b000092630000825b00087e4803a63b7b000c4e800020|@1191,1048575| 1191:S26|5452414e535f54414228292e726567536574556e696f6e283229 1192:C2,544|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c040001408200084e8000202c0300014082000c386400004e80002082f8000482d700003aa30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082840000928300048275000092630000973bfffc971bfffc96bbfffc949bfffc969bfffc80040004941bfffc967bfffc80150004941bfffc83160024801800007c0803a64e8000212803000141820058809b0008807b0000831b00184bffff39398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a5d0004919d000090720004823b00049232000038720000821b001c7e0803a63b7b00204e800020825b00188232000482110000807b000483100020801800007c0803a64e80002181fb001881cf0004814e0000947bfffc807b0010830a0020801800007c0803a64e800021813b00007d2b1838556bf80140a20010800d00347c0803a64e8000217c09180040800058809b0014807b0004831b001c4bfffe7d398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021391d0004919d00009068000480fb000890e800003868000080db00207cc803a63b7b00244e800020809b000c807b0018831b001c4bfffe29398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021391d0004919d00009068000480fb001090e800003868000080db00207cc803a63b7b00244e800020|@1193,1048575| 1193:S20|5452414e535f54414228292e6d65726765283229 1194:O4|@1196,@1204,@964,@1195 1195:O2|@1213,@964 1196:C2,188|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc971bfffc94bbfffc8005000c941bfffc949bfffc82e5001c82d70000973bfffc38800003387600003b1b00143c0002a360005d047c0803a64e80002138600001831b0014801800007c0803a64e800021280300014182003038800001386000033b1b00143c0002a360005d047c0803a64e80002182bb00007ea803a63b7b00184e8000203860000182bb00007ea803a63b7b00184e800020|@1203,1048575|80,3,@1197 136,3,@1197 1197:C2,1260|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000217c8b1838556bf80140a20010800d00347c0803a64e8000217c041800408004a482f8fff83a7900003a5800003a2300003a040000389000008077000c3c0002a36000414c7c0803a64e8000212c03000140820008480003e881f2fffc81cf0008814e0000812300008103000480e3000880c3000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080aa000c90a3000490e30000967bfffc965bfffc963bfffc961bfffc953bfffc951bfffc94fbfffc94dbfffc830a0024801800007c0803a64e800021280300014182000848000358809b00188064fff02c030001408200084800027c832300002c1900014082000c3b0000014800009882fb001882d7fffc82b6000882950000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000827b000492630004825900009243000080190004941bfffc83140024801800007c0803a64e800021280300014182000c3b00000348000028833b00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffff643b7b000428180001408201cc823b000c81f100002c0f0005408200d481db0018814efff02c0a00014082000c3a0000034800019880110004941bfffc812a00002c0900014082000c3a00000148000098811b001c80e8fffc80c7000880a60000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000809b000090830004832900009323000080090004941bfffc83050024801800007c0803a64e800021280300014182000c3a00000348000028813b00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffff643b7b00043b7b0004480000e02c0f0003408200d481db0018814efff02c0a00014082000c3a000003480000c080110004941bfffc812a00002c0900014082000c3a00000148000098811b001c80e8fffc80c7000880a60000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000809b000090830004832900009323000080090004941bfffc83050024801800007c0803a64e800021280300014182000c3a00000348000028813b00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffff643b7b00043b7b0004480000083a0000012810000140820008480000cc833b00082c1900014082002c831b001882f8fffc80b8fff8809b00103860000183170004801800007c0803a64e80002148000098831b001882f8fff882d8fffc80970010807b00048316000c801800007c0803a64e80002182bb00188295fffc8274000882530000398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213a3d0004919d0000821b00009211000c81f2000c91f1000881db000891d10004815b000c9151000038b10000809b00108075fff43c0002a36000620c7c0803a64e8000213b7b001048000014967bfffc965bfffc963bfffc961bfffc81fb000838600001830f0000801800007c0803a64e800021280300014182004481db00003980000255c0f80140a20010800d00347c0803a64e8000217d4e661541a3fff0388a0000807b0004831b0008833b000c7f2803a63b7b00104bfffb403860000181db000c7dc803a63b7b00104e800020386000017f2803a64e800020|@1202,1048575|92,3,@1155 1092,3,@1198 1198:C2,820|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000218303000082f8000082d700002c1600014082001c973bfffc3c6002a36063655c800d00287c0803a64e80002182b70004829500007c8ba038556bf80140a20010800d00347c0803a64e8000217c04a00040800098548bf80140a20010800d00347c0803a64e8000212c040001408000084800002c829500007c8ba038556bf80140a20010800d00347c0803a64e8000217c04a000408000084800001c973bfffc3c6002a0606395e0800d00287c0803a64e800021398000025480f80140a20010800d00347c0803a64e8000217e84661541a3fff0568b083a7cb5592e386000017f2803a64e800020829500003a6000073993ffff7e8b98385560f80140a20010800d00347c0803a64e8000217e8b0e707e4c5dd741a3ffec3a520001398000025480f80140a20010800d00347c0803a64e8000217e84661541a3fff07e4ba038556bf80140a20010800d00347c0803a64e8000217c12a0004081000c3a720000480000083a740000398000025660f80140a20010800d00347c0803a64e8000217e53661541a3fff03a9900003a2400003a05000039f8000080a3000438800081387200003f000000631841c8801800007c0803a64e8000219263000080b500003980000054a0f80140a20010800d00347c0803a64e8000217c85661541a3fff0832300007c8bc838556bf80140a20010800d00347c0803a64e8000217c04c80040810020969bfffc3b0300003c6002a0606395e0800d00287c0803a64e8000213ac3000094bbfffc38c0000338b6000038800003387500003f000000631858c8801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d000092d500043a60ffff9275000092af0000562bf80140a20010800d00347c0803a64e8000212c110001408000084800002c825600007e2b9038556bf80140a20010800d00347c0803a64e8000217c119000408000084800001c969bfffc3c6002a0606395e0800d00287c0803a64e800021398000025620f80140a20010800d00347c0803a64e8000217df1661541a3fff055eb083a7e16592e386000017e8803a64e800020|@1201,1048079|56,3,@1199 192,3,@51 452,3,I11 556,3,@51 600,3,I195 748,3,@51 1199:O3|103,@327,@1200 1200:S39|417474656d707420746f207570646174652061206c6f636b656420737472657463684172726179 1201:S22|5374726574636841727261792e757064617465283329 1202:S38|5452414e535f54414228292e72656d6f766546726f6d4361636865283329636c656172283229 1203:S30|5452414e535f54414228292e72656d6f766546726f6d4361636865283329 1204:O4|@1206,@1195,@1205,@964 1205:O3|@1210,@964,@1204 1206:C2,856|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000213a7900003a5800003a2300003a040000389000008065000c3c0002a36000414c7c0803a64e8000212c03000140820010386000017e6803a64e80002081f2000c81cf00008143000081230008398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000810e000c9103000491230000967bfffc965bfffc963bfffc961bfffc94bbfffc8005000c941bfffc955bfffc953bfffc830e0024801800007c0803a64e800021280300014182001880db001880a6000c8085000080e4000c480000ac80fb001428070001408200084800006480db0004808600002c0400054082000c38a00003480000402c04fffb4082003480660004546bf80140a20010800d00347c0803a64e8000212c0300014080000c38a000034800001038a000014800000838a0000128050001408200084800003880db000c80bb001880860010807b000083050004801800007c0803a64e800021809b00188064000c8323000080f9000c4800000880fb0000807b00188323000c83190000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082f8000c92e3000490e3000094fbfffc83180024801800007c0803a64e800021280300014182010438a00001809b0014807b000c3c0002a36000620c7c0803a64e80002182db000882b600002c15000540820028829b0010827b001c809400108076000483130004801800007c0803a64e800021480000942c15000340820028829b0010827b001c809400108076000483130004801800007c0803a64e800021480000682c15ffff40820060829600042c1400014082000848000050827b001c80140004941bfffc38a0ffff80940000807b001483130008801800007c0803a64e800021829b00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffffac807b0010833b00203c0002a3600069ac7c0903a67f2803a63b7b00244e800420398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213add0004919d00003aa0ffff92b6000c829b0000929600083a60000192760004825b00089256000038b60000809b0014807b000c833b00203c0002a36000620c7c0903a67f2803a63b7b00244e800420|@1209,1048575|56,3,@1155 504,3,@1198 724,3,@1207 832,3,@1198 1207:C2,204|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000218303001c82f800003980000256e0f80140a20010800d00347c0803a64e8000217eccbc1141a3fff082e3000882b700007ecba838556bf80140a20010800d00347c0803a64e8000217c16a800418000543a7900003a4300003a360000389100008072000c3c0002a36000414c7c0803a64e8000212c0300014082001c8092001c92240000387200003b3300007f2803a64bffff58386000017e6803a64e800020386000017f2803a64e800020|@1208,1046531|132,3,@1155 1208:S23|5452414e535f54414228292e636c6561724f6666283129 1209:S26|5452414e535f54414228292e72656d6f7665456e747279283329 1210:C2,432|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000213a7900003a5800003a2300003a040000389000008071000c3c0002a36000414c7c0803a64e8000212c03000140820098967bfffc80b200048085000880040000941bfffc3880ffff387000003c0002a06000fe6c7c0803a64e800021388300003c6002a360636ca43c0002a1600074a87c0803a64e800021398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213b3d0004919d0000907900083f0002a06318c7ac9319000482fb000092f9000038790000800d00287c0803a64e80002181e300043985ffff7deb28385560f80140a20010800d00347c0803a64e8000217dcf661541a3fff055cbf80140a20010800d00347c0803a64e8000212c0e00014181002838b100003890000038600003831200083b330000801800007c0903a67f2803a64e800420398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021395d0004919d00008123000c912a000c81030008910a000891ca000480e3000090ea000038aa0000389000008071000c3b3300003c0002a36000620c7c0903a67f2803a64e800420|@1212,1048575|56,3,@1155 108,3,@316 128,3,@1211 136,3,@511 192,3,@227 412,3,@1198 1211:S23|696e6372557365436f756e743a206e6f20656e74727920 1212:S27|5452414e535f54414228292e696e6372557365436f756e74283329 1213:C2,616|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d70000973bfffc971bfffc949bfffc8004000c941bfffc83160020801800007c0803a64e80002182bb0004546bf80140a20010800d00347c0803a64e8000212c030001408000084800003082950000827400007c6b9838556bf80140a20010800d00347c0803a64e8000217c039800408000084800001c3a6300003c6002a0606395e0800d00287c0803a64e800021398000025460f80140a20010800d00347c0803a64e8000217e43661541a3fff0564c083a7e34602e3a9100002c14000140820094821b000881f0000481cf0008800e0000941bfffc3880ffff3c0002a06000fe6c7c0803a64e800021388300003c6002a360636f6c3c0002a1600074a87c0803a64e800021398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021395d0004919d0000906a00083d2002a06129c7ac912a0004811b0000910a0000386a0000800d00287c0803a64e8000212c14000340820030821b000081f000003980000255e0f80140a20010800d00347c0803a64e8000217dcf661541a3fff091d00000398000025680f80140a20010800d00347c0803a64e8000217e0ca41141a3fff0546bf80140a20010800d00347c0803a64e8000212c030001408000084800003081f5000081cf00007c6b7038556bf80140a20010800d00347c0803a64e8000217c03700040800008480000183c6002a0606395e0800d00287c0803a64e800021398000025460f80140a20010800d00347c0803a64e8000217d43661541a3fff0554b083a7e0f592e38600001813b000c7d2803a63b7b00104e800020|@1215,1048575|160,3,@51 256,3,@316 276,3,@1214 284,3,@511 340,3,@227 536,3,@51 1214:S29|667265653a20726567697374657220616c726561647920667265652023 1215:S19|5452414e535f54414228292e66726565283229 1216:O2|@1287,@964 1217:C2,188|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182fb0000971bfffc94bbfffc947bfffc8017000c941bfffc94dbfffc949bfffc973bfffc80170028941bfffc386000013b1b001c3c0002a3600070947c0803a64e80002182db0000281600014182003c82bb001c829b002038b400003c8002a3608488a03c6000006063466883150004833b0004801800007c0903a67f2803a63b7b00244e8004203860000182bb00047ea803a63b7b00244e800020|@1231,1048575|84,3,@1218 124,3,@1230 132,3,I48 1218:C2,2180|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7001c82b600007c6ba838556bf80140a20010800d00347c0803a64e8000217c03a800408008303a7900003a5800003a230000389100008077000c3c0002a36000414c7c0803a64e800021706b0001408207a880830000832400002c190003408203dc830300042c1800014082000848000054967bfffc965bfffc963bfffc80040004941bfffc80040008941bfffc971bfffc80030008941bfffc8003000c941bfffc387100008312ffec801800007c0803a64e800021280300014182075c48000038967bfffc965bfffc963bfffc80040004941bfffc80040008941bfffc971bfffc80030008941bfffc8003000c941bfffc4800072482fb001882d7fffc2c16000140820008480000b482b600002c1500014082000c3a80000148000098827b0018825300008232000c82110000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000081fb001091e3000481d5000091c3000080150004941bfffc83100024801800007c0803a64e800021280300014182000c3a8000034800002882bb00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffff643b7b00042814000141820660815b00082c0a00014082002c813b00188109000080a90004809b00143860000183080008801800007c0803a64e8000214800062c813b00188109fff82808000140820020386000013b1b001c3c0002a3600079347c0803a64e8000214800060080e9000080c7000c80a60000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008085000c90830004833b00049323000083050028801800007c0803a64e80002128030001418200e8831b001882f8fffc2c17000140820008480000d482d700002c1600014082000c3aa0000148000098829b0018827400008253000c82320000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000821b00049203000481f6000091e3000080160004941bfffc83110024801800007c0803a64e800021280300014182000c3aa000034800002882db00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffff643b7b0004281500014182000848000020807b00043b1b001c3c0002a360007cb87c0803a64e800021480004c4831b001882f8000482d8000080170010941bfffc8078fffc83160014801800007c0803a64e80002182bb001c8295000038830000807b000083140010801800007c0803a64e800021827b001c825300008232000c8211000039e30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000081d0000c91c3000491e3000095fbfffc83100028801800007c0803a64e8000212803000141820020807b00003b1b00243c0002a360007cb87c0803a64e8000214800001c386000013b1b00243c0002a3600079347c0803a64e8000213b7b0008480003e02c19000540820394967bfffc965bfffc963bfffc80040004941bfffc80030004941bfffc80030008941bfffc8003000c941bfffc387100008312ffec801800007c0803a64e800021280300014082000848000364831b001482f8fffc2c17000140820008480000b482d700002c1600014082000c3aa0000148000098829b0014827400008253000c82320000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000821b000c9203000481f6000091e3000080160004941bfffc83110024801800007c0803a64e800021280300014182000c3aa000034800002882db00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffff643b7b000428150001418202a081db00082c0e00014082002c815b0014812a000080aa0004809b00103860000183090008801800007c0803a64e8000214800026c815b0014812afff82809000140820020386000013b1b00183c0002a360007fe07c0803a64e80002148000240810a000080e8000c80c70000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080a6000c90a30004809b00049083000083060028801800007c0803a64e80002128030001418200e8807b00148323fffc2c19000140820008480000d4831900002c1800014082000c3ae000014800009882db001482b600008295000c82740000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000825b000492430004823800009223000080180004941bfffc83130024801800007c0803a64e800021280300014182000c3ae0000348000028831b00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffff643b7b0004281700014182000848000020807b00043b1b00183c0002a3600083087c0803a64e80002148000104807b0014832300048303000080190010941bfffc8063fffc83180014801800007c0803a64e80002182fb001882d7000038830000807b000083160010801800007c0803a64e80002182bb0018829500008274000c825300003a230000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008212000c9203000492230000963bfffc83120028801800007c0803a64e8000212803000141820020807b00003b1b00203c0002a3600083087c0803a64e8000214800001c386000013b1b00203c0002a360007fe07c0803a64e8000213b7b000848000020967bfffc965bfffc963bfffc947bfffc947bfffc947bfffc947bfffc947bfffc48000024967bfffc965bfffc963bfffc947bfffc947bfffc947bfffc947bfffc947bfffc821b0014398000025600f80140a20010800d00347c0803a64e8000217df0661541a3fff0386f0000831b0018833b001c7f2803a63b7b00204bfff794386000017f2803a64e800020|@1229,1048575|96,3,@1155 556,3,@1219 872,3,@1221 1068,3,@1221 1096,3,@1219 1476,3,@1223 1792,3,@1225 1988,3,@1225 2016,3,@1223 1219:C2,800|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000218078fffc82e30000973bfffc971bfffc80b8ffe48083fff0806300048317001c801800007c0803a64e80002182db000082b6fffc829500008274000c82530000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008232000c922300048216ffe89203000083120028801800007c0803a64e800021280300014182006081fb000081cffffc814e0000812a000c81090000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080eefff090e3000480cfffe890c3000083080048801800007c0803a64e8000214800006481fb000081cffffc814e0000812a000c81090000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000080eefff090e3000880cffff490c3000480affff090a3000083080044801800007c0803a64e800021809b00008064fffc832300048303000082e4fff4809900103877000083180018801800007c0803a64e80002182db000082b6fffc829500048274003082530000823500008211000c81f0000c81cf00183980000255c0f80140a20010800d00347c0803a64e8000217d4e641141a3fff0398affff7e4b50385560f80140a20010800d00347c0803a64e8000217e4b0e707d2c5dd741a3ffec39290001398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021391d0004919d00009128000438e0fffb90e80000398000043bbdffec7c1df04040a00010800d001c7c0803a64e80002138dd0004919d00009246000c80b6ffe890a600088096ffec908600049106000038a600008096fff88075fff43c0002a36000620c7c0803a64e800021807b00008323fffc8319000482f8003082d700003980000256c0f80140a20010800d00347c0803a64e8000217eb6661541a3fff092b700008297000082780018825300007e8b9038556bf80140a20010800d00347c0803a64e8000217c14900040810020823700009233000038600001821b00047e0803a63b7b00084e80002038600001823b00047e2803a63b7b00084e800020|@1220,1048575|636,3,@1198 1220:S62|5452414e535f54414228292e7075736852656769737465727328352970757368456e7472696573283129736176654469726563744f6e537461636b283129 1221:C2,712|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8fffc82d7000482b70000973bfffc971bfffc947bfffc809600108078fff483150018801800007c0803a64e800021829b00048274fffc825300008232000c82110000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000081fb000091e3000481d4ffe891c3000083100024801800007c0803a64e800021280300014182000848000168815b0004812afffc8109000080e8000c80c70000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080a6000c90a30004808affe89083000083060024801800007c0803a64e8000212803000141820070807b00048323fffc8319000082f8000c82d7000082a3fff08283fff4398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00008279fff09263000c825b0000924300089283000492a3000083160030801800007c0803a64e8000214800009c807b00048323fffc8319000082f8000c82d7000082a3ffe8398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d00008299fff092830010827b00009263000c8256000c9243000892a30004823600549223000083160060801800007c0803a64e800021821b000481f0fffc81cf0004814f0000808e00108070ffe8830a0018801800007c0803a64e800021813b00048109fffc398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138fd0004919d000080db000090c7000438a0000590a70000808800008064000c83230000398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213b1d0004919d000082e9ffe492f8000c82d9000c92d8000882a9ffec92b8000490f8000038b800008089fff88068fff4833b00083c0002a36000620c7c0903a67f2803a63b7b000c4e800420|@1222,1048575|688,3,@1198 1222:S60|5452414e535f54414228292e7075736852656769737465727328352970757368456e747269657328312973617665446972656374496e526567283129 1223:C2,712|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000218078fffc82e30000973bfffc971bfffc80b8ffe88083fff0806300048317001c801800007c0803a64e80002182db000082b6fffc829500008274000c82530000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008235fff0922300048216fff49203000083120048801800007c0803a64e80002181fb000081cffffc814e0000812a000c81090000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080e8000c90e3000480cfffec90c3000083080024801800007c0803a64e8000212803000141820010809b000080a4fff44800003480bb00008085fffc8064000483240000808300108065fff483190018801800007c0803a64e800021831b000080b8ffec82fb000082d7fffc82b600048295003082740000825600008232000c8211000c81f000183980000255e0f80140a20010800d00347c0803a64e8000217dcf641141a3fff0398effff7e6b70385560f80140a20010800d00347c0803a64e8000217e6b0e707d4c5dd741a3ffec394a0001398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021393d0004919d0000914900043900fffb91090000398000043bbdffec7c1df04040a00010800d001c7c0803a64e80002138fd0004919d00009267000c90a7000880d7fff090c700049127000038a700008097fff88076fff43c0002a36000620c7c0803a64e80002180bb00008085fffc806400048323003083190000398000025700f80140a20010800d00347c0803a64e8000217ef8661541a3fff092f9000082d9000082a30018829500007ecba038556bf80140a20010800d00347c0803a64e8000217c16a00040810020827900009275000038600001825b00047e4803a63b7b00084e80002038600001827b00047e6803a63b7b00084e800020|@1224,1048575|548,3,@1198 1224:S59|5452414e535f54414228292e7075736852656769737465727328352970757368456e7472696573283129736176655265674f6e537461636b283129 1225:C2,496|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc971bfffc82f8fffc82d7000482b70000973bfffc809600108078fff483150018801800007c0803a64e800021829b00048274fffc825300008232000c82110000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000081fb000891e3000481d4ffec91c3000083100024801800007c0803a64e800021280300014182000848000074815b0004812afffc8109000080e8000c80c70000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d000080a9fff090a30010809b00089083000c8326000c93230008830afff49303000482e6005492e3000083060060801800007c0803a64e80002182db00048076fff83b1b00083c0002a3600085147c0803a64e80002182bb00048295fffc398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a7d0004919d0000825b0008925300043a200005923300008214000081f0000c81cf0000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021395d0004919d00008135ffe8912a000c810e000c910a000880f5fff090ea0004926a000038aa00008095fff88074fff4833b00003c0002a36000620c7c0903a67f2803a63b7b000c4e800420|@1228,1048575|304,3,@1226 472,3,@1198 1226:C2,680|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8fffc82d7fffc82b600048295001c827400007c6b9838556bf80140a20010800d00347c0803a64e8000217c0398004080024c3a7900003a5800003a230000389100008075000c3c0002a36000414c7c0803a64e800021706b0001408201c880830000832400002c190003408201988312fffc82f8fffc82d7000082b6000c829500008203000481e3000881c3000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008158fff4914300048124000491230000967bfffc965bfffc963bfffc80040008941bfffc961bfffc95fbfffc95dbfffc83140024801800007c0803a64e8000212803000141820148811b001480e8fffc80c7fffc80a600048086000080640018808500103b2300008067fff43b190000801800007c0803a64e800021831b001482f8fffc82d7fffc82b6000482960000809500108078000083140020801800007c0803a64e800021827b00148253fffc8232fffc398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a1d0004919d000081fb000c91f0000881d3000091d000043940000391500000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021393d0004919d0000811b00009109000c80fb000490e9000880db000890c900049209000038a90000809b00108071fff43c0002a36000620c7c0803a64e80002148000040967bfffc965bfffc963bfffc947bfffc947bfffc947bfffc947bfffc48000020967bfffc965bfffc963bfffc947bfffc947bfffc947bfffc947bfffc821b0010398000025600f80140a20010800d00347c0803a64e8000217df0661541a3fff0386f0000831b0014833b00187f2803a63b7b001c4bfffd70386000017f2803a64e800020|@1227,1048575|104,3,@1155 528,3,@1198 1227:S70|5452414e535f54414228292e7075736852656769737465727328352970757368456e747269657328312973617665526567496e5265672831297265674368616e676564283129 1228:S57|5452414e535f54414228292e7075736852656769737465727328352970757368456e747269657328312973617665526567496e526567283129 1229:S42|5452414e535f54414228292e7075736852656769737465727328352970757368456e7472696573283129 1230:S13|70757368526567697374657273 1231:S28|5452414e535f54414228292e70757368526567697374657273283529 1232:O4|@1233,@964,20,@1185 1233:C2,172|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e3000482d700008003000c941bfffc971bfffc96fbfffc80030008941bfffc80030000941bfffc96dbfffc949bfffc807b001882a300002c1500014082001882d8000482b600008075000c3b7b001c4e80002082b8000482950000973bfffc8094000c387600003b1b001c3c0002a3600089b87c0803a64e800021827b00007e6803a63b7b00204e800020|@1238,1048575|140,3,@1234 1234:C2,1272|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021546bf80140a20010800d00347c0803a64e8000212c030001408000084800003082f8fff082d700007c6bb038556bf80140a20010800d00347c0803a64e8000217c03b0004080000848000020973bfffc3ac300003c6002a0606395e0800d00287c0803a64e800021398000025460f80140a20010800d00347c0803a64e8000217ec3661541a3fff056cc083a7eb7602e3af500008298fffc8274000482530000973bfffc971bfffc947bfffc949bfffc96fbfffc8312001c801800007c0803a64e800021823b000c8211fff481f000002c0f00014082000c39c00003480000b4947bfffc814f00002c0a00014082000c39c0000148000098813b00108109fffc80e8000480c70000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080bb000090a30004808a000090830000800a0004941bfffc83060024801800007c0803a64e800021280300014182000c39c0000348000028815b00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffff643b7b00043b7b0004807b000c8323fffc8319000482f8000095dbfffc807b000c8317001c801800007c0803a64e80002182db00108296ffe82c1400014082000c3aa00003480000b4947bfffc827400002c1300014082000c3aa0000148000098825b00148232fffc8211000481f00000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000081db000091c30004815300009143000080130004941bfffc830f0024801800007c0803a64e800021280300014182000c3aa0000348000028827b00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffff643b7b00043b7b0004813b00042c0900014082005c811b00002808000141820050281500014182004880fb001080c7fffc80a6000480850000807b000c8304001c801800007c0803a64e800021831b0010833b00143c0002a360008ecc7c0903a67f2803a63b7b00184e80042080fb000c2c0700014082003480db001080a6fffc80850008398000025480f80140a20010800d00347c0803a64e8000217d0c241141a3fff0480000243980000254e0f80140a20010800d00347c0803a64e8000217d0c3c1141a3fff080db001080a6fffc8085000480640000832300248303000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00009303000482fb000892e3000096bbfffc951bfffc3b190000801800007c0803a64e800021280300014182004882db000c2c1600014082003c82bb00042815000141820030827b00188253fffc8232000482110000807b00148310001c801800007c0803a64e8000213a83000048000008829b001082db001882bb00008276ffec7eab9b78556bf80140a20010800d00347c0803a64e8000217c159800408200a48256fffc8232000482110000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000081f0000c91e3000492830000969bfffc83100024801800007c0803a64e800021280300014182002881db001c814efffc812a0004810900008068000c80fb00207ce803a63b7b00244e800020807b0000831b001c833b00203c0002a360008ecc7c0903a67f2803a63b7b00244e80042038940000387500003b160000833b001c7f2803a63b7b00204bfffb14|@1237,1048575|116,3,@51 748,3,@1235 1220,3,@1235 1235:C2,528|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8fffc82d7000482b60000973bfffc971bfffc947bfffc83150020801800007c0803a64e800021829b0004546bf80140a20010800d00347c0803a64e8000212c03000140800008480000308274fff0825300007c6b9038556bf80140a20010800d00347c0803a64e8000217c039000408000084800001c3a6300003c6002a0606395e0800d00287c0803a64e800021398000025460f80140a20010800d00347c0803a64e8000217e23661541a3fff03a000003562b083a7e13592e398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002139fd0004919d000039c0000191cf0004815b0000914f0000398000013bbdfff87c1df04040a00010800d001c7c0803a64e800021393d0004919d000091e900008114fff480e8000080d4fffc947bfffc951bfffc38870000386900008306000c801800007c0803a64e80002180bb000090650000809b000c833b00042c190001408200308304fffc82f800083980000256e0f80140a20010800d00347c0803a64e8000217c6cbc1141a3fff048000024398000025720f80140a20010800d00347c0803a64e8000217c6ccc1141a3fff08304fff89078000082e4000082d700003980000256c0f80140a20010800d00347c0803a64e8000217eacb41141a3fff092b70000807b0008829b00107e8803a63b7b00144e800020|@1236,1048575|156,3,@51 1236:S47|5452414e535f54414228292e67657441636365707461626c655265676973746572283229616c6c6f63526567283129 1237:S47|5452414e535f54414228292e67657441636365707461626c65526567697374657228322966696e6446726565283229 1238:S36|5452414e535f54414228292e67657441636365707461626c655265676973746572283229 1239:O3|@1241,@1240,@964 1240:O2|3,@1245 1241:C2,168|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c030001408200103c6002a2606341344e80002082e300002c1700014082000c386000014e800020971bfffc973bfffc38970000807800043b1b00043c0002a3600092747c0803a64e8000213ac30000398000013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d000092c3000082bb00007ea803a63b7b00084e800020|@1244,1048575|40,3,@773 92,3,@1242 1242:C2,440|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021706b000140820190708b00014082018482f8000082d7000882b600003a830000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082640000926300048254000092430000973bfffc971bfffc969bfffc949bfffc965bfffc80140004941bfffc967bfffc80040004941bfffc83150024801800007c0803a64e8000212803000141820020809b0000807b0008831b0018833b001c7f2803a63b7b00204bffff3c823b00188211000081f0000881cf0000807b000c830e0020801800007c0803a64e800021815b0018812a00008109000880e80000947bfffc807b000883070020801800007c0803a64e80002180db00007ccb1838556bf80140a20010800d00347c0803a64e8000217c06180040800058809b0014807b000c831b001c4bfffeb5398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138bd0004919d000090650004809b00109085000038650000833b00207f2803a63b7b00244e800020809b0004807b0018831b001c833b00207f2803a63b7b00244bfffe5c4e8000204e800020|@1243,1048575| 1243:S32|5452414e535f54414228292e696e766572736553657428312964696666283229 1244:S25|5452414e535f54414228292e696e7665727365536574283129 1245:O2|4,@1246 1246:O2|5,@1247 1247:O2|6,@1248 1248:O2|7,@1249 1249:O2|8,@1250 1250:O2|9,@1251 1251:O2|10,@1252 1252:O2|14,@1253 1253:O2|15,@1254 1254:O2|16,@1255 1255:O2|17,@1256 1256:O2|18,@1257 1257:O2|19,@1258 1258:O2|20,@1259 1259:O2|21,@1260 1260:O2|22,@1261 1261:O2|23,@1262 1262:O2|24,@1263 1263:O2|25,0 1264:O3|@1266,@964,@1265 1265:O3|@1280,@1136,@964 1266:C2,844|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002154abf80140a20010800d00347c0803a64e8000212c05000140800168398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138bd0004919d00003ee002a362f7990092e500009065000482d8000482b600083a830000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003e6002a3627399fc9263000090a30004973bfffc971bfffc969bfffc949bfffc8315000c801800007c0803a64e800021825b0004823200303a030000807100003b100000801800007c0803a64e80002181fb000481cf001c814e0000398000025540f80140a20010800d00347c0803a64e8000217d2c541141a3fff0811b0008398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138fd0004919d00003cc002a360c69b1c90c7000080a8000490a70004947bfffc386900003b070000801800007c0803a64e800021831b0000801800007c0803a64e80002138a30000809b0004807b0008831b000c833b00107f2803a63b7b00144bfffe6c82e3003082d700007cabb038556bf80140a20010800d00347c0803a64e8000217c05b00040800068973bfffc82b8000482950008398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a7d0004919d00003e4002a362529d2c925300083e2002a06231c7ac92330004821400009213000039e3000038730000800d00287c0803a64e80002182b700007cabab78556bf80140a20010800d00347c0803a64e8000217c05a80040820010386000017f2803a64e800020973bfffc971bfffc947bfffc949bfffc94bbfffc83180008801800007c0803a64e8000212803000141820008480000a4829b000c827400048253000080120048941bfffc386000018312001c801800007c0803a64e8000213a230000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000821b00089203000492230000831b0000801800007c0803a64e80002181fb000c81cf0030814e0000398000025540f80140a20010800d00347c0803a64e8000217d2a661541a3fff0912e00003b7b000480bb0000809b0004807b0008831b000c833b00107f2803a63b7b00144bfffcc0|@1279,1048575|96,3,@1267 160,3,@1269 324,3,@1273 504,3,@1278 516,3,@227 1267:C2,176|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f800043a7900003a4300008077000c3c0002a36000414c7c0803a64e800021706b0001408200608083000c398000025480f80140a20010800d00347c0803a64e8000217f24661541a3fff07f2b9038556bf80140a20010800d00347c0803a64e8000217c19900040810010387900007e6803a64e800020387200007e6803a64e800020387200007e6803a64e800020|@1268,1044483|48,3,@1155 1268:S39|5452414e535f54414228292e616c69676e537461636b2833296d696e5265736572766564283229 1269:C2,80|7f2802a6633900023ae30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003ec002a362d69a6892c3000082d8000492c3000892e300047f2803a64e800020|@1272,983041|48,3,@1270 1270:C2,52|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000218098000483180008801800007c0903a64e800420|@1271,1048575| 1271:S42|5452414e535f54414228292e616c69676e537461636b2833296d696e5265736572766564283129283129 1272:S39|5452414e535f54414228292e616c69676e537461636b2833296d696e5265736572766564283129 1273:C2,260|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d70008546bf80140a20010800d00347c0803a64e8000212c0300014180000c3aa00003480000083aa00001398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a9d0004919d00003e6002a362739c3c927400009314000890740004398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a5d0004919d00003e2002a362319ce09232000090720004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a3000892430004928300003a18000083160004801800007c0903a67f2803a64e800420|@1277,1048575|116,3,@1274 172,3,@1276 1274:C2,92|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f800043980000256e0f80140a20010800d00347c0803a64e8000217eccbc1141a3fff03876000083180008801800007c0903a67f2803a64e800420|@1275,1048575| 1275:S34|5452414e535f54414228292e696e64446f776e746f28322970726576283129283129 1276:C2,8|807800044e800020|@1275,786433| 1277:S31|5452414e535f54414228292e696e64446f776e746f28322970726576283129 1278:S32|707573685265676973746572733a20756e707573686564207265676973746572 1279:S25|5452414e535f54414228292e616c69676e537461636b283329 1280:C2,232|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e3003082d70000398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003e8002a362949e7c929500009075000c92d500088298000892950004973bfffc947bfffc96dbfffc947bfffc38c4000038a00001389500003860000183180004801800007c0803a64e800021827b00048253003082320000821b00007e2b8378556bf80140a20010800d00347c0803a64e8000217c1180004082000c39e000034800000839e0000169e3000281fb00087de803a63b7b000c4e800020|@1286,1048575|76,3,@1281 1281:C2,560|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000c3a7900003a580000388300008077000c3c0002a36000414c7c0803a64e8000212c03000140820064967bfffc8092000480640008398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213b3d0004919d00003f0002a36318a0c8931900083ee002a062f7c7ac92f9000482c3000092d9000038790000800d00287c0803a64e80002180830000832400002c19fffb408200988304000482f200087f0bb838556bf80140a20010800d00347c0803a64e8000217c18b80040810064967bfffc82d2000482b60008398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a9d0004919d00003e2002a36231a0f4923400083e2002a06231c7ac92340004823500009234000038740000800d00287c0803a64e800021386000017e6803a64e8000208303000c570bf80140a20010800d00347c0803a64e8000212c1800014180008882f200087f0bb838556bf80140a20010800d00347c0803a64e8000217c18b80040800064967bfffc82d2000482b60008398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a9d0004919d00003e2002a36231a124923400083e2002a06231c7ac92340004823500009234000038740000800d00287c0803a64e80002182f200087f0bbb78556bf80140a20010800d00347c0803a64e8000217c18b80040820010386000037e6803a64e800020386000017e6803a64e800020|@1285,1046531|52,3,@1155 124,3,@1282 136,3,@227 276,3,@1283 288,3,@227 452,3,@1284 464,3,@227 1282:S33|70757368416e79456e747279417443757272656e7453503a206e6f20656e747279 1283:S40|70757368416e79456e747279417443757272656e7453503a20656e7472792061626f766520727370 1284:S39|70757368416e79456e747279417443757272656e7453503a20756e70757368656420656e747279 1285:S52|5452414e535f54414228292e70757368416e79456e747279417443757272656e74535028322973656c656374456e747279283129 1286:S38|5452414e535f54414228292e70757368416e79456e747279417443757272656e745350283229 1287:C2,460|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d70000973bfffc949bfffc8004000c941bfffc83160020801800007c0803a64e80002182bb0004546bf80140a20010800d00347c0803a64e8000212c030001408000084800003082950000827400007c6b9838556bf80140a20010800d00347c0803a64e8000217c039800408000084800001c3a6300003c6002a0606395e0800d00287c0803a64e800021398000025460f80140a20010800d00347c0803a64e8000217e43661541a3fff0564c083a7e34602e3a9100002c14000140820030821b000081f000003980000255e0f80140a20010800d00347c0803a64e8000217dcc7c1141a3fff091d00000398000025680f80140a20010800d00347c0803a64e8000217e14661541a3fff0546bf80140a20010800d00347c0803a64e8000212c030001408000084800003081f5000081cf00007c6b7038556bf80140a20010800d00347c0803a64e8000217c03700040800008480000183c6002a0606395e0800d00287c0803a64e800021398000025460f80140a20010800d00347c0803a64e8000217d43661541a3fff0554b083a7e0f592e38600001813b00087d2803a63b7b000c4e800020|@1288,1048575|156,3,@51 380,3,@51 1288:S19|5452414e535f54414228292e696e6372283229 1289:O2|@1291,@1290 1290:O7|@1293,@1145,@964,@1232,@1194,@1136,@1195 1291:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@1292,1048575| 1292:S29|5452414e535f54414228292e676574416e795265676973746572283129 1293:C2,1008|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc947bfffc949bfffc80030028941bfffc97fbfffc3ee002a362f7a7e696fbfffc3ac0000196dbfffc3bfb000038800001806300108318000c801800007c0803a64e80002182bb001882950008827400003a430000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008233000c9223000492430000965bfffc83130028801800007c0803a64e800021280300014182000c821b000048000238821b001c398000053bbdffe87c1df04040a00010800d001c7c0803a64e80002139fd0004919d00003dc002a361cea87891cf0000815b0018914f00108130000c912f000c81100018910f000880f0000890ef000495fbfffc38aa000038800001386f000083100010801800007c0803a64e80002180db001c80bb002038800001806600108305000c801800007c0803a64e800021809b002083240008831900003ae30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082d8000c92c3000492e3000096fbfffc83180028801800007c0803a64e800021280300014182000c821b00004800013c82bb0024829b0020969bfffc80db002038a000013c8002a36084a9fc3860000183150014801800007c0803a64e800021827b002480bb002038800001807b000483130010801800007c0803a64e800021825b0020823b002438800001807200108311000c801800007c0803a64e800021821b002481f0000881cf000039430000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000812e000c9123000491430000955bfffc830e0028801800007c0803a64e800021280300014182000c821b000048000064811b002880e8000880c70008398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002138bd0004919d00003c8002a36084aa4c908500083c6002a06063c7ac90650004832600009325000038650000800d00287c0803a64e8000213b7b00043b7b0008811b0010280800014182005080fb001c80c7000880a60000961bfffc807b0018830500b4801800007c0803a64e800021809b002080bb001c832400043c8002a36084aa683b190000801800007c0803a64e80002148000008961bfffc807b000083fb001080fb00247ce803a63b7b00284e80002080c300002c0600034082001c38a300003c6002a06063962c800d00287c0803a64e80002180bb000c8085000883240000947bfffc807b0008831900b4801800007c0803a64e800021831b001080bb000c3c8002a36084aa6883180004801800007c0803a64e800021807b0000800d00287c0803a64e800021|@1301,1048575|60,3,$1293+890 248,3,@1294 476,3,@1296 716,3,@1299 728,3,@227 832,3,@1300 904,3,@54 968,3,@1300 1294:C2,300|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180780010973bfffc971bfffc80030010941bfffc38800001807b00008318000c801800007c0803a64e800021833b00048319000482f800003ac30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082b7000c92a3000492c3000096dbfffc83170028801800007c0803a64e8000212803000141820028827b0008809b0004807b000083130008801800007c0803a64e8000213a830000480000083a800001829b00088274000482530000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008232000c92230004821b00009203000083120024833b000c801800007c0903a67f2803a63b7b00104e800420|@1295,1048575| 1295:S52|5452414e535f54414228292e676574416e795265676973746572283229722d756e74696c536f6d657468696e6746726565283129 1296:O1|@1297 1297:C2,8|386000034e800020|@1298,524289| 1298:S25|5452414e535f54414228292e70757368416c6c283229283129 1299:S17|4e6f206672656520726567697374657273 1300:S14|676574416e795265676973746572 1301:S29|5452414e535f54414228292e676574416e795265676973746572283229 1302:O2|@1304,@1303 1303:O2|@1306,@1195 1304:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@1305,1048575| 1305:S27|5452414e535f54414228292e667265655265676973746572283129 1306:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000213ae40000808300103877000083180004801800007c0903a64e800420|@1307,1048575| 1307:S27|5452414e535f54414228292e667265655265676973746572283229 1308:O2|@1309,@1194 1309:C2,64|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002138a30000388000013c6002a36063ac1c83180004801800007c0903a64e800420|@1313,1048575|40,3,@1310 1310:O1|@1311 1311:C2,8|386000034e800020|@1312,524289| 1312:S28|5452414e535f54414228292e636c6561724361636865283129283129 1313:S25|5452414e535f54414228292e636c6561724361636865283129 1314:O2|@1316,@1315 1315:O2|@1318,@1194 1316:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@1317,1048575| 1317:S39|5452414e535f54414228292e72656d6f766552656769737465727346726f6d4361636865283129 1318:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002138a300003c6002a36063ad8483180004801800007c0903a64e800420|@1322,1048575|36,3,@1319 1319:O1|@1320 1320:C2,8|386000034e800020|@1321,524289| 1321:S42|5452414e535f54414228292e72656d6f766552656769737465727346726f6d4361636865283229283129 1322:S39|5452414e535f54414228292e72656d6f766552656769737465727346726f6d4361636865283229 1323:O2|@1325,@1324 1324:O2|@1328,@1327 1325:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@1326,1048575| 1326:S22|5452414e535f54414228292e70757368526567283129 1327:O3|@1331,@1145,@964 1328:C2,116|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213afd0004919d000090970004388000059097000038a30000389700003c6002a36063af4083180004801800007c0903a67f2803a64e800420|@1330,1048575|88,3,@1329 1329:S7|70757368526567 1330:S22|5452414e535f54414228292e70757368526567283229 1331:C2,692|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e5001c82d70000828400002c14fffb40820174827800088253000c82320018398000025620f80140a20010800d00347c0803a64e8000217e11641141a3fff081e4000455ebf80140a20010800d00347c0803a64e8000212c0f00014180000c39c000034800000839c00001560bf80140a20010800d00347c0803a64e8000212c1000014180000c3940000348000008394000017c0e50404082000c39cf000048000098280a00014182004c398000025600f80140a20010800d00347c0803a64e8000217dcc841141a3fff0398effff7deb70385560f80140a20010800d00347c0803a64e8000217dcc7c1141a3fff048000048398000025600f80140a20010800d00347c0803a64e8000217dd0661541a3fff0398effff7deb70385560f80140a20010800d00347c0803a64e8000217dcc7c1141a3fff0973bfffc971bfffc947bfffc949bfffc94bbfffc8005000c941bfffc80050028941bfffc96dbfffc38900000386e00003f00000063184e08801800007c0803a64e8000213aa30000480000303aa0ffff973bfffc971bfffc947bfffc949bfffc94bbfffc8005000c941bfffc80050028941bfffc96dbfffc827b00188253000882320000398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213a1d0004919d000092b0000c81f1000c91f0000839c0000391d00004815b00109150000038b00000809b0000807b00083c0002a36000620c7c0803a64e800021813b000c811b0000398000025500f80140a20010800d00347c0803a64e8000217ce8661541a3fff080c9001c90e6000080bb00042805000141820030809b001838a9000080640004809b00143b2300003c600000606346683b190000801800007c0803a64e800021807b0000809b001c7c8803a63b7b00204e800020|@1332,1048575|392,3,I109 552,3,@1198 648,3,I48 1332:S25|5452414e535f54414228292e7075736850737461636b283329 1333:O2|@1335,@1334 1334:O3|@1337,@1327,@1205 1335:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@1336,1048575| 1336:S24|5452414e535f54414228292e70757368537461636b283129 1337:C2,88|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021971bfffc949bfffc947bfffc973bfffc386000013b1b000c3c0002a36000b3687c0803a64e800021833b00007f2803a63b7b00104e800020|@1341,1048575|56,3,@1338 1338:C2,484|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8fff882d7001c82b600007c6ba838556bf80140a20010800d00347c0803a64e8000217c03a80041800060398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082b8fffc92a300043a80fffb928300008278000038b70000388300003c6002a36063b56883130004801800007c0903a67f2803a64e8004203a7900003a5800003a230000389100008077000c3c0002a36000414c7c0803a64e800021706b0001408200e08203000081f000002c0ffffb4082009c81d000048152fffc7dcb5378556bf80140a20010800d00347c0803a64e8000217c0e50004082004081320000967bfffc963bfffc38a00003389100008072fff883090008801800007c0803a64e800021807b0000811b00047d0803a63b7b00084e800020398000025620f80140a20010800d00347c0803a64e8000217d31661541a3fff0386900003b1200003b3300007f2803a64bfffe90398000025620f80140a20010800d00347c0803a64e8000217dd1661541a3fff0386e00003b1200003b3300007f2803a64bfffe5c398000025620f80140a20010800d00347c0803a64e8000217e11661541a3fff0387000003b1200003b3300007f2803a64bfffe28|@1340,1048575|140,3,@1339 188,3,@1155 1339:S9|70757368537461636b 1340:S33|5452414e535f54414228292e70757368537461636b283229736561726368283129 1341:S24|5452414e535f54414228292e70757368537461636b283229 1342:O2|@1344,@1343 1343:O2|@1346,@1327 1344:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@1345,1048575| 1345:S24|5452414e535f54414228292e70757368436f6e7374283129 1346:C2,116|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213afd0004919d0000909700043880fffd9097000038a30000389700003c6002a36063b6e483180004801800007c0903a67f2803a64e800420|@1348,1048575|88,3,@1347 1347:S9|70757368436f6e7374 1348:S24|5452414e535f54414228292e70757368436f6e7374283229 1349:O2|@1351,@1350 1350:O2|@1353,@1327 1351:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@1352,1048575| 1352:S26|5452414e535f54414228292e70757368436f6465526566283129 1353:C2,116|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213afd0004919d000090970004388000019097000038a30000389700003c6002a36063b83883180004801800007c0903a67f2803a64e800420|@1355,1048575|88,3,@1354 1354:S11|70757368436f6465526566 1355:S26|5452414e535f54414228292e70757368436f6465526566283229 1356:O2|@1358,@1357 1357:O4|@1361,@1327,@1360,@964 1358:C2,72|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e3001096fbfffc80c3000c80a30008808300048063000083180004801800007c0903a64e800420|@1359,1048575| 1359:S27|5452414e535f54414228292e707573684e6f6e4c6f63616c283129 1360:O6|@1367,@1205,@964,@1327,@1216,@1366 1361:C2,804|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc947bfffc3a7900003a5800003a240000388500008063000c3c0002a36000414c7c0803a64e8000212c030001408200a4967bfffc8092000c80640008965bfffc963bfffc94dbfffc80030000941bfffc3880ffff386500003c0002a06000fe6c7c0803a64e800021388300003c6002a36063bc743c0002a1600074a87c0803a64e800021398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213b3d0004919d0000907900083f0002a06318c7ac9319000482fb000092f9000038790000800d00287c0803a64e8000213a1b000090b0000039fb0000906f000481db0004814e0004554bf80140a20010800d00347c0803a64e8000212c0a000141810064967bfffc8132000c81090008398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002138fd0004919d00003ca002a360a5bc9890a700083c8002a06084c7ac90870004806800009067000038670000800d00287c0803a64e800021812e0000810900002c08fffd40820064398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138fd0004919d000080c9000490c7000438a0fffd90a7000038b10000388700003c6002a36063b6e4831200043b330000801800007c0903a67f2803a63b7b000c4e8004202c08000140820064398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138fd0004919d000080c9000490c7000438a0000190a7000038b10000388700003c6002a36063b838831200043b330000801800007c0903a67f2803a63b7b000c4e8004202c08fffb40820060967bfffc965bfffc963bfffc80090004941bfffc386000013b060000801800007c0803a64e80002180fb000880db001838a6000080db000438830000807b000083070008833b000c801800007c0903a67f2803a63b7b001c4e800420967bfffc80f2000c80c70008398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002138bd0004919d00003c8002a36084bcbc908500083c6002a06063c7ac90650004832600009325000038650000800d00287c0803a64e800021|@1365,1048575|60,3,@1155 124,3,@316 144,3,@1362 152,3,@511 208,3,@227 344,3,@1363 356,3,@227 468,3,@1347 572,3,@1354 756,3,@1364 768,3,@227 1362:S28|70737461636b5265616c456e7472793a206e6f7420656e7472793a20 1363:S28|707573684e6f6e4c6f63616c3a207a65726f2075736520636f756e74 1364:S43|707573684e6f6e4c6f63616c3a206e6f74204c69746572616c2c20436f6465526566206f7220537461636b 1365:S27|5452414e535f54414228292e707573684e6f6e4c6f63616c283529 1366:O10|@1374,@1194,@1382,@964,@1205,@1216,@1195,@1327,@1373,@1290 1367:C2,2324|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc947bfffc3a7900003a5800003a2300003a040000389000008066000c3c0002a36000414c7c0803a64e8000212c030001408200ac967bfffc8092000880640008965bfffc963bfffc961bfffc94bbfffc94dbfffc80030000941bfffc3880ffff387000003c0002a06000fe6c7c0803a64e800021388300003c6002a36063bc743c0002a1600074a87c0803a64e800021398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213b3d0004919d0000907900083f0002a06318c7ac9319000482fb000092f9000038790000800d00287c0803a64e80002139fb0000920f000039db0000906e0004815b0004812a0000810900002c08ffff4082020480f2000880a7000c562bf80140a20010800d00347c0803a64e8000212c1100014180000c38800003480000083880000180650018546bf80140a20010800d00347c0803a64e8000212c0300014180000c3b200003480000083b2000017c04c8404082000c3b11000048000098281900014182004c398000025460f80140a20010800d00347c0803a64e8000217f2c1c1141a3fff03999ffff7e2bc8385560f80140a20010800d00347c0803a64e8000217f0c8c1141a3fff048000048398000025460f80140a20010800d00347c0803a64e8000217f23661541a3fff03999ffff7e2bc8385560f80140a20010800d00347c0803a64e8000217f0c8c1141a3fff0967bfffc965bfffc961bfffc94dbfffc80090004941bfffc38830000387800003f00000063184e08801800007c0803a64e800021831b00002c180001408200183c6002a0606395e0800d00287c0803a64e8000212c0300014082000c82f8000048000048398000025460f80140a20010800d00347c0803a64e8000217ecc1c1141a3fff03876000083180004800d00187c1b004040a00010800d00207c0803a64e8000214bffff9482db000c96fbfffc38a0000338970000807b000883160004801800007c0803a64e80002182bb001038a0ffff809b000c807b000883150004801800007c0803a64e800021807b0000829b00147e8803a63b7b00204e8000202c08fffd4082054480f2000880a7000c967bfffc965bfffc963bfffc961bfffc94dbfffc80090004941bfffc807b000083050000801800007c0803a64e80002128030001418200ac809b0010806400088323000c807b000083190004801800007c0803a64e8000212803000140820084831b001082f8000882d7000c3860000183160008801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d0000907500043a80fffd92950000827b001080bb0004389500003c6002a36063b6e48313000c833b0014801800007c0903a67f2803a63b7b00204e800420809b0010806400088323000c807b000083190000801800007c0803a64e80002128030001418200084800019c831b001082f8000882d7000c8016001c941bfffc807b00048316000c801800007c0803a64e800021831b0000801800007c0803a64e80002182bb0014829500088274000c825b0010564bf80140a20010800d00347c0803a64e8000212c1200014180000c3a200003480000083a20000182130018560bf80140a20010800d00347c0803a64e8000212c1000014180000c39e000034800000839e000017c1178404082000c39d2000048000098280f00014182004c398000025600f80140a20010800d00347c0803a64e8000217dec841141a3fff0398fffff7e4b78385560f80140a20010800d00347c0803a64e8000217dcc941141a3fff048000048398000025600f80140a20010800d00347c0803a64e8000217df0661541a3fff0398fffff7e4b78385560f80140a20010800d00347c0803a64e8000217dcc941141a3fff0947bfffc38900000386e00003f00000063184e08801800007c0803a64e800021706b00014182000c39c300004800001c3f00000063185368801800007c0803a64e80002139c30000815b00007c0a7040408100104800006c947bfffc947bfffc831b001882f8000882d70008398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003e8002a36294c670929500083e6002a06273c7ac92750004825600009255000038750000800d00287c0803a64e800021813b001838a0ffff809b0010807b000c83090004801800007c0803a64e800021811b001880e8000880c7000c80060010941bfffc807b000c8306000c801800007c0803a64e80002180bb001c808500088324000c831b0018570bf80140a20010800d00347c0803a64e8000212c1800014180000c3ae00003480000083ae0000182d9001856cbf80140a20010800d00347c0803a64e8000212c1600014180000c3aa00003480000083aa000017c17a8404082000c3a98000048000098281500014182004c3980000256c0f80140a20010800d00347c0803a64e8000217eacb41141a3fff03995ffff7f0ba8385560f80140a20010800d00347c0803a64e8000217e8cc41141a3fff0480000483980000256c0f80140a20010800d00347c0803a64e8000217eb6661541a3fff03995ffff7f0ba8385560f80140a20010800d00347c0803a64e8000217e8cc41141a3fff0947bfffc80190004941bfffc38960000387400003f00000063184e08801800007c0803a64e800021831b0000801800007c0803a64e8000213a830000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092830004827b000492630000831b0008801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a5d0004919d0000907200043a20fffd92320000821b002480bb0018389200003c6002a36063b6e48310000c833b0028801800007c0903a67f2803a63b7b00344e800420947bfffc947bfffc967bfffc965bfffc963bfffc94dbfffc38fb001094fbfffc38c000013885000038b0000038640000809b000483120014801800007c0803a64e800021833b000838a0ffff809b0014807b000083190004801800007c0803a64e800021831b000082f8002c82d7000082b8001c8295000038b6000038940000386000013b1b001c3c0002a36000c69c7c0803a64e800021827b000c7e6803a63b7b00204e800020|@1372,1048575|64,3,@1155 136,3,@316 156,3,@1362 164,3,@511 220,3,@227 580,3,I109 612,3,@51 1008,3,@1347 1420,3,I109 1456,3,I152 1552,3,@1368 1564,3,@227 1956,3,I109 2120,3,@1347 2292,3,@1369 1368:S35|696e646972656374202d20696e76616c696420636f6e7374616e742061646472657373 1369:C2,772|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000217cab2038556bf80140a20010800d00347c0803a64e8000217c052000418000e080b8ffe48098ffec973bfffc971bfffc80640010808500103ae300008078fff43b170000801800007c0803a64e80002182db000082b6ffe48295002c827400008255001c823200007e6b8838556bf80140a20010800d00347c0803a64e8000217c1388004081000c8212000092140000398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a1d0004919d000081f6ffe891f0000881d6fff491d0000439400003915000008136ffec38b50000389000003c6002a36063c9bc8309000c833b0004801800007c0903a67f2803a63b7b00084e80042082f8ffe43a7900003a5800003a2300003a040000388500008077000c3c0002a36000414c7c0803a64e800021706b00014082017c81e3000081cf00002c0e00034082013028110001408200108152ffe4812a002c90a900008152ffec812a000881090000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080f2fff490e3000480cf000490c30000967bfffc965bfffc961bfffc94bbfffc800f0008941bfffc83080024801800007c0803a64e800021280300014182006880bb000c809b00008065ffe87c8b1b78556bf80140a20010800d00347c0803a64e8000217c0418004082003c8325ffec8305ffe438a00003809b00043878000083190004801800007c0803a64e800021807b000482fb00107ee803a63b7b00144e80002080bb00043980000254a0f80140a20010800d00347c0803a64e8000217c85661541a3fff038a40000809b000838600003831b000c833b00107f2803a63b7b00144bfffd803980000254a0f80140a20010800d00347c0803a64e8000217d45661541a3fff038aa000038900000387100003b1200003b3300007f2803a64bfffd443980000254a0f80140a20010800d00347c0803a64e8000217de5661541a3fff038af000038900000387100003b1200003b3300007f2803a64bfffd08|@1371,1048575|248,3,@1370 312,3,@1155 1370:S8|696e646972656374 1371:S32|5452414e535f54414228292e696e646972656374283429736561726368283329 1372:S23|5452414e535f54414228292e696e646972656374283429 1373:O4|@1385,@1145,@964,@1205 1374:C2,1068|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc947bfffc3a7900003a5800003a2300003a040000388500008070000c3c0002a36000414c7c0803a64e8000212c030001408200b4967bfffc8092000c80640008965bfffc963bfffc961bfffc94bbfffc94dbfffc8010000c941bfffc80030000941bfffc3880ffff386500003c0002a06000fe6c7c0803a64e800021388300003c6002a36063bc743c0002a1600074a87c0803a64e800021398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213b3d0004919d0000907900083f0002a06318c7ac9319000482fb000092f9000038790000800d00287c0803a64e80002139fb000090af000039db0000906e0004815b0004388500008070000c3c0002a36000414c7c0803a64e8000212c03000140820064967bfffc8112000c80e80008398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021389d0004919d00003c6002a36063ce70906400083f2002a06339c7ac93240004830700009304000038640000800d00287c0803a64e800021810300042c0800034082000c392000034800000839200001800a0008941bfffc965bfffc94bbfffc961bfffc800a000c941bfffc800a0004941bfffc800a0000941bfffc8010000c941bfffc94dbfffc963bfffc953bfffc80fb0010808700002c0400054082017c2806000140820024833b0034830700049319000090b90004386000017e6803a63b7b00384e800020280900014182009c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003b200001932300048307000493030000967bfffc971bfffc83120008801800007c0803a64e80002182fb002c80bb0024388300003c6002a36063ad8483170004801800007c0803a64e80002182db003c82bb000092b60000829b00289296000438600001827b00047e6803a63b7b00404e8000208332000c83190000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082f8000c92e3000482db002892c30000967bfffc83180028801800007c0803a64e8000212803000141820030809b0038386000013b1b00343c0002a36000ce907c0803a64e80002182bb00007ea803a63b7b003c4e800020809b0038386000013b1b00343c0002a36000d0847c0803a64e80002182bb00007ea803a63b7b003c4e8000208332000c83190000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082f8000c92e3000482db002892c30000967bfffc83180028801800007c0803a64e8000212803000141820030809b0038386000013b1b00343c0002a36000ce907c0803a64e80002182bb00007ea803a63b7b003c4e800020809b0038386000013b1b00343c0002a36000d0847c0803a64e80002182bb00007ea803a63b7b003c4e800020|@1381,1048575|64,3,@1155 144,3,@316 164,3,@1362 172,3,@511 228,3,@227 292,3,@1155 364,3,@1375 376,3,@227 652,3,@1319 816,3,@1376 860,3,@1378 992,3,@1376 1036,3,@1378 1375:S23|6c6173745265666572656e63653a206e6f20656e747279 1376:C2,420|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000218078ffd8280300014182008482d8fff482b6000c82950000398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213a7d0004919d00008258ffe89253000c8234000c923300088218ffe49213000481f8ffe091f3000039d90000395800003924000038b30000808afffc806affdc3c0002a36000620c7c0803a64e8000213ae300004800003882f8ffec82d8fff4973bfffc971bfffc949bfffc809700108078fff883160014801800007c0803a64e8000213ae300004800001095dbfffc955bfffc953bfffc811b0004398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138fd0004919d000080c8fff890c7000438a0000590a700008088fff480a8ffec8064001c388700003b2300003c6002a36063af403b190000801800007c0803a64e800021831b000482f8fff4947bfffc38a0ffff8098fff08078ffec83170010801800007c0803a64e80002182db000882bb00048296fff892950000827b00009275000438600001825b000c7e4803a63b7b00104e800020|@1377,1048575|148,3,@1198 312,3,@1329 1377:S43|5452414e535f54414228292e6c6f6164456e74727928352975736543616368655265676973746572283229 1378:C2,1060|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8fff4973bfffc971bfffc949bfffc8098ffd48078ffec83170024801800007c0803a64e80002182db000482b6ffec3a6300008096fffc8075000c3c0002a36000414c7c0803a64e8000212c03000140820068825b00048232fff48211000c81f00008398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002139dd0004919d00003d4002a3614ad4c4914e00083d2002a06129c7ac912e0004810f0000910e0000386e0000800d00287c0803a64e800021825b00048232ffd828110001408200e481f2fff481cf000c814e0000812300008103000480e3000880c3000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080aa000c90a3000490e30000967bfffc953bfffc951bfffc94fbfffc94dbfffc830a0024801800007c0803a64e8000212803000141820064809b000c806400002c0300034082000c3a0000034800007c2c03fffb4082003c83240004572bf80140a20010800d00347c0803a64e8000212c1900014180000c3a0000034800004c831b001882f8ffd06af000024800003c3a000001480000343a0000014800002c3a000001967bfffc80030000941bfffc80030004941bfffc80030008941bfffc8003000c941bfffc281000014182003481db0018814efff4961bfffc38a00003808efff0806effec830a0010801800007c0803a64e80002139e300004800000c39e00001961bfffc821b001c81f0fff480d0ffec80b0fff0809b00148070ffd4830f0020801800007c0803a64e80002181db001c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021395d0004919d0000813b0014912a000439000005910a000080eefff480aeffec388a00003c6002a36063af408307001c801800007c0803a64e80002180db0000280600014182013c80bb001c8085fff48324000c831900003ae30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082d8000c92c3000482bb000892a3000096fbfffc83180028801800007c0803a64e8000212803000141820028829b00208274ffec8254fff480930010807b000c83120018801800007c0803a64e800021829b0020398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213a7d0004919d0000825b00089253000c823b001892330008821b00109213000481fb001491f3000038b300008094fffc8074ffdc3c0002a36000620c7c0803a64e80002181db0020814effec812efff4808a0010807b001883090014801800007c0803a64e800021811b002080e8fff438a0ffff8088fff08068ffec83070010801800007c0803a64e80002148000008947bfffc80bb001c809b001890850000807b00009065000438600001833b00247f2803a63b7b00284e800020|@1380,1048575|92,3,@1155 168,3,@1379 180,3,@227 668,3,@1329 924,3,@1198 1379:S24|6c6f6164456e7472793a20656e7472792064656c65746564 1380:S41|5452414e535f54414228292e6c6f6164456e7472792835297573654e65775265676973746572283229 1381:S24|5452414e535f54414228292e6c6f6164456e747279283529 1382:O3|@1383,@964,@1189 1383:C2,408|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc3ae000012c0300014082000c3ad7000048000084398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d00003b0000019319000482c3000092d9000082bb000080030004941bfffc389700003879000083150008801800007c0803a64e8000213ae30000807b00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffff7496dbfffc3aa000012c1600014082000c3a950000480000483980000256a0f80140a20010800d00347c0803a64e8000217e75661541a3fff082d600043ab30000800d00187c1b004040a00010800d00207c0803a64e8000214bffffb0827b00048253000482320000821100187e8b8378556bf80140a20010800d00347c0803a64e8000217c148000408200183860000181fb00087de803a63b7b000c4e800020398000013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d000081fb000091e3000081db00087dc803a63b7b000c4e800020|@1384,1048575| 1384:S24|5452414e535f54414228292e6c697374546f536574283129 1385:C2,2196|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc947bfffc3a7900003a5800003a2300003a040000388500008066000c3c0002a36000414c7c0803a64e8000212c030001408200b4967bfffc8092000880640008965bfffc963bfffc961bfffc94bbfffc94dbfffc80060028941bfffc80030000941bfffc3880ffff386500003c0002a06000fe6c7c0803a64e800021388300003c6002a36063bc743c0002a1600074a87c0803a64e800021398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213b3d0004919d0000907900083f0002a06318c7ac9319000482fb000092f9000038790000800d00287c0803a64e80002139fb000090af000039db0000906e0004815b00048132000881090000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080e8000c90e30004808a000890830000967bfffc965bfffc963bfffc961bfffc94bbfffc94dbfffc80060028941bfffc800a0000941bfffc949bfffc83080028801800007c0803a64e80002128030001418200c8807b001c8323000883190000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082fb001492e3000482db000092c3000083180028801800007c0803a64e800021280300014182061882bb001c8295000882740000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d0000825b001892430010823b00149223000c8213000c9203000881fb000091e3000481d3005491c3000083130060801800007c0803a64e800021480005ac807b0004832300002c190005408200cc831b001c82f8000882d7000082a30004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000829b00149283000492a3000096bbfffc83160028801800007c0803a64e800021280300014182053c827b00208253000882320000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d0000821b001c9203001081fb001891e3000c81d1000c91c30008815b000091430004813100549123000083110060801800007c0803a64e800021480004d02c19fffd40820070831b001c82f8000882d7000082a30004398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d0000829b001892830010827b00149263000c92a300088256000c92430004823600549223000083160064801800007c0803a64e800021480004582c19000140820060831b001c82f8000882d7000082a30004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000829b001892830008827b00149263000492a3000083160040801800007c0803a64e800021480003f42c19000340820068831b001c82f8000882d7000082a3000482830008398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d0000827b00189263000c825b00149243000892a300049283000083160030801800007c0803a64e800021480003882c19fffb4082010c831b000c82f8003082d700003980000256c0f80140a20010800d00347c0803a64e8000217eacb41141a3fff0829b001c827400088253000c82320018398000025620f80140a20010800d00347c0803a64e8000217e11641141a3fff03990ffff7eab80385560f80140a20010800d00347c0803a64e8000217eab0e707dec5dd741a3ffec39ef000181d3000081430004398fffff7d4b78385560f80140a20010800d00347c0803a64e8000217d2c541141a3fff0398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d0000811b00189103000c80fb001490e3000880ce001090c3000491230000830e0030801800007c0803a64e8000214800027883030004730b00014082000c82f80000480000183c6002a36063dfcc800d00287c0803a64e800021947bfffc947bfffc82db00143a770000389300008076000c3c0002a36000414c7c0803a64e8000212c03000140820098825b0024823200088211000880100000941bfffc3880ffff387300003c0002a06000fe6c7c0803a64e800021388300003c6002a36063bc743c0002a1600074a87c0803a64e800021398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002139fd0004919d0000906f00083dc002a061cec7ac91cf0004815b0000914f0000386f0000800d00287c0803a64e8000213a5b0000927200003a3b000090710004821b000481f0000081cf00002c0efffb40820104815b0014812a003081090000398000025500f80140a20010800d00347c0803a64e8000217cec441141a3fff080db002480a600088085000c80640018398000025460f80140a20010800d00347c0803a64e8000217f23641141a3fff03999ffff7cebc8385560f80140a20010800d00347c0803a64e8000217ceb0e707f0c5dd741a3ffec3b18000182e5000082cf00043998ffff7ecbc0385560f80140a20010800d00347c0803a64e8000217eacb41141a3fff0398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000829b00209283000892a30004827b001c9263000083170050801800007c0803a64e80002148000064815b0024812a000881090008398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002138fd0004919d00003cc002a360c6dfec90c700083ca002a060a5c7ac90a70004808800009087000038670000800d00287c0803a64e8000213b7b0008947bfffc3b7b0004825b001c38a0ffff809b0010807b000c8312000c801800007c0803a64e800021823b00082811000141820050821b001c81f0000881cf0000807b0018830e00b4801800007c0803a64e800021815b001c80bb000c3c8002a36084e024830a0004833b0020801800007c0903a67f2803a63b7b002c4e80042038600001821b00207e0803a63b7b002c4e800020|@1390,1048575|64,3,@1155 144,3,@316 164,3,@1362 172,3,@511 228,3,@227 1440,3,@1386 1484,3,@1155 1536,3,@316 1556,3,@1362 1564,3,@511 1620,3,@227 1996,3,@1388 2008,3,@227 2140,3,@1389 1386:O3|@9397,@1387,0 1387:S5|456d707479 1388:S48|6c6f616450737461636b456e7472793a20636f6e7461696e657220656e747279206973206e6f74206f6e20737461636b 1389:S15|6c6f616450737461636b456e747279 1390:S30|5452414e535f54414228292e6c6f616450737461636b456e747279283429 1391:O3|@1392,@1327,@964 1392:C2,304|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e3003082d7000082b800088295000c82740018398000025660f80140a20010800d00347c0803a64e8000217e53641141a3fff03992ffff7ecb90385560f80140a20010800d00347c0803a64e8000217ecb0e707e2c5dd741a3ffec3a31000182d700003980000256c0f80140a20010800d00347c0803a64e8000217e56661541a3fff09257000082d7000082430018821200007ecb8038556bf80140a20010800d00347c0803a64e8000217c1680004081000c82d7000092d20000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213add0004919d0000923600043a20fffb9236000038a30000389600003c6002a36063e1c083180004801800007c0903a67f2803a64e800420|@1394,1048575|276,3,@1393 1393:S5|696e637370 1394:S20|5452414e535f54414228292e696e637370283129 1395:O2|@1397,@1396 1396:O2|@1399,@1145 1397:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@1398,1048575| 1398:S20|5452414e535f54414228292e6465637370283129 1399:C2,144|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e3003082d700003984ffff7ecb20385560f80140a20010800d00347c0803a64e8000217eacb41141a3fff092b7000080830028280400014182002c38a300003c8002a36084e3203c6000006063466883180004801800007c0903a67f2803a64e800420386000017f2803a64e800020|@1401,1048575|96,3,@1400 104,3,I48 1400:S5|6465637370 1401:S20|5452414e535f54414228292e6465637370283229 1402:O2|@1404,@1403 1403:O2|@1406,@1136 1404:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@1405,1048575| 1405:S22|5452414e535f54414228292e70757368416c6c283129 1406:C2,72|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc38c4000038a000013c8002a36084a9fc3860000183180004801800007c0903a64e800420|@1407,1048575|44,3,@1296 1407:S22|5452414e535f54414228292e70757368416c6c283229 1408:O2|@1410,@1409 1409:O3|@1412,@1136,@964 1410:C2,64|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180c3000c80a30008808300048063000083180004801800007c0903a64e800420|@1411,1048575| 1411:S25|5452414e535f54414228292e70757368416c6c427574283129 1412:C2,508|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc947bfffc3ad900003ab800003a8300003a6400003a45000038a0000138800081386000173f000000631841c8801800007c0803a64e80002138a0001590a30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021389d0004919d0000906400043860ffff906400003d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213b3d0004919d0000909900003b1b0000933800003afb000038a0000190b70004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021389d0004919d0000807b000090640000833b000493240004398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00003f0002a36318e710930300009283000c82f5000892e300089083000496dbfffc96bbfffc969bfffc967bfffc94dbfffc8014000c941bfffc949bfffc3b120000801800007c0803a64e80002182db0014398000053bbdffe87c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003e8002a36294e8b092950000827b001092750010825b00009255000c823b0004923500088216000892150004927b002080db000c80bb0008389500003860000183160004833b0018801800007c0903a67f2803a63b7b00204e800420|@1417,1048575|72,3,I11 300,3,@1413 416,3,@1415 1413:C2,352|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc947bfffc82f8000c3a7900003a5800003a230000389100008077000c3c0002a36000414c7c0803a64e8000212c0300014082009c967bfffc8092000880640008965bfffc80030000941bfffc3880ffff387100003c0002a06000fe6c7c0803a64e800021388300003c6002a36063bc743c0002a1600074a87c0803a64e800021398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213b3d0004919d0000907900083f0002a06318c7ac9319000482fb000092f9000038790000800d00287c0803a64e8000213a1b00009230000039fb0000906f0004809b0000807200043c0002a36000414c7c0803a64e800021398000025460f80140a20010800d00347c0803a64e8000217dc3661541a3fff038ae0000809b0000807200043b3300003c0002a36000620c7c0903a67f2803a63b7b00084e800420|@1414,1048575|64,3,@1155 120,3,@316 140,3,@1362 148,3,@511 204,3,@227 264,3,@1155 328,3,@1198 1414:S28|5452414e535f54414228292e70757368416c6c427574283429283129 1415:C2,396|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f800103a7900003a5800003a230000389100008077000c3c0002a36000414c7c0803a64e8000212c03000140820064967bfffc8092000480640008398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213b3d0004919d00003f0002a36318ea58931900083ee002a062f7c7ac92f9000482c3000092d9000038790000800d00287c0803a64e8000218203000081e3000481c300088143000c389100008072000c3c0002a36000414c7c0803a64e8000217deb1838556bf80140a20010800d00347c0803a64e8000217c0f180040810010386000037e6803a64e800020554bf80140a20010800d00347c0803a64e8000212c0a00014181000848000060398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021389d0004919d00003860ffff9064000c91c4000891e400049204000039d3000038a4000038910000807200083c0002a36000620c7c0803a64e8000213a6e0000386000017e6803a64e800020|@1414,1048463|56,3,@1155 128,3,@1416 140,3,@227 200,3,@1155 364,3,@1198 1416:S20|70757368416c6c4275743a206e6f20656e747279 1417:S25|5452414e535f54414228292e70757368416c6c427574283429 1418:O2|@1420,@1419 1419:O5|@1422,@1136,@964,@1145,@1216 1420:C2,64|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180c3000c80a30008808300048063000083180004801800007c0903a64e800420|@1421,1048575| 1421:S31|5452414e535f54414228292e707573684e6f6e417267756d656e7473283129 1422:C2,228|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021971bfffc947bfffc94bbfffc398000053bbdffe87c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002a362d6ec4092d700009077001090b7000c80a3000c90b7000882d8000892d70004280600014082000c3aa00003480000083aa000016ab40002973bfffc947bfffc3a66000038c4000038b30000389700003874000083180004801800007c0803a64e80002138800001386000013b1b000c3c0002a36000eef07c0803a64e800021825b00007e4803a63b7b00104e800020|@1429,1048575|80,3,@1423 196,3,@1426 1423:C2,580|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f800103a7900003a5800003a230000389100008077000c3c0002a36000414c7c0803a64e8000212c03000140820064967bfffc8092000480640008398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213b3d0004919d00003f0002a36318eea0931900083ee002a062f7c7ac92f9000482c3000092d9000038790000800d00287c0803a64e80002180830004548bf80140a20010800d00347c0803a64e8000212c040003408100084800009c967bfffc965bfffc963bfffc80030000941bfffc949bfffc80030008941bfffc8003000c941bfffc8072000c2c0300014082000c3b200001480000548303000082fb00107f0bbb78556bf80140a20010800d00347c0803a64e8000217c18b8004082000c3b2000034800002480630004800d00187c1b004040a00010800d00207c0803a64e8000214bffffa4281900014182003048000040967bfffc965bfffc963bfffc80030000941bfffc949bfffc80030008941bfffc8003000c941bfffc38600003833b00187f2803a63b7b001c4e80002082db000056cbf80140a20010800d00347c0803a64e8000212c160001418100084800006882bb0014398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213a9d0004919d00003a60ffff9274000c825b000492540008823b000892340004809b000c9094000038b40000809b0010807500083c0002a36000620c7c0803a64e80002138600001833b00187f2803a63b7b001c4e800020|@1425,1048079|56,3,@1155 128,3,@1424 140,3,@227 544,3,@1198 1424:S26|707573684e6f6e417267756d656e74733a206e6f20656e747279 1425:S34|5452414e535f54414228292e707573684e6f6e417267756d656e7473283429283129 1426:C2,804|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8fffc82d7001c82b600007c8ba838556bf80140a20010800d00347c0803a64e8000217c04a800408002d4973bfffc971bfffc947bfffc949bfffc82b8fff82c1500014082000c3a8000014800005480950000807b00007c8b1b78556bf80140a20010800d00347c0803a64e8000217c0418004082000c3a8000034800002482b50004800d00187c1b004040a00010800d00207c0803a64e8000214bffffa42814000141820044833b0000398000025720f80140a20010800d00347c0803a64e8000217f19661541a3fff038980000807b0004831b0008833b000c7f2803a63b7b00104bffff04833b00088319fffc809b00008078000c3c0002a36000414c7c0803a64e800021706b0001408201ac82c3000082b600002c150003408200c8828300042c1400014082000c82fb00044800018c809b00088324fffc8304000080160004941bfffc973bfffc80190028941bfffc80990010807b000883180010801800007c0803a64e80002182fb0000281700014182003082db001482b6000080bb00043c8002a36084f2303c600000606346688315000c801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213add0004919d000082bb001092b60004829b0008929600003af600003b7b000c480000dc2c150005408200c8828300042c1400014082000c82fb0004480000c0827b00088253fffc8233000080160004941bfffc965bfffc80120028941bfffc80920010807b000883110010801800007c0803a64e800021821b0000281000014182003081fb001481cf000080bb00043c8002a36084f2303c60000060634668830e000c801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002139fd0004919d000081db001091cf0004815b0008914f00003aef00003b7b000c4800001082fb00044800000882fb000482db00003980000256c0f80140a20010800d00347c0803a64e8000217eb6661541a3fff03895000038770000831b0008833b000c7f2803a63b7b00104bfffcf07f2803a64e800020|@1428,1048575|280,3,@1155 420,3,@1427 428,3,I48 624,3,@1427 632,3,I48 1427:S12|6c6f636b5265676973746572 1428:S49|5452414e535f54414228292e707573684e6f6e417267756d656e747328342967657452656769737465724c697374283229 1429:S31|5452414e535f54414228292e707573684e6f6e417267756d656e7473283429 1430:O2|@1432,@1431 1431:O2|@1434,@1136 1432:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@1433,1048575| 1433:S32|5452414e535f54414228292e707573685370656369666963456e747279283129 1434:C2,124|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002a362d6f3d892d7000090b70004947bfffc38c4000038a00001389700003860000183180004801800007c0903a67f2803a64e800420|@1437,1048575|68,3,@1435 1435:C2,68|7f2802a66339000282f800047c6bbb78556bf80140a20010800d00347c0803a64e8000217c03b80040820010386000037f2803a64e800020386000017f2803a64e800020|@1436,917505| 1436:S35|5452414e535f54414228292e707573685370656369666963456e747279283329283129 1437:S32|5452414e535f54414228292e707573685370656369666963456e747279283329 1438:O2|@1440,@1439 1439:O5|@1442,@1327,@1391,@964,@1264 1440:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@1441,1048575| 1441:S32|5452414e535f54414228292e72657365727665537461636b5370616365283129 1442:C2,192|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc947bfffc949bfffc94bbfffc38a0ffff83180010801800007c0803a64e800021807b00003b1b00103c0002a36000f60c7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d0000907900043b00ffff9319000082fb000c80bb0008389900003c6002a36063f79483170004833b0010801800007c0903a67f2803a63b7b00144e800420|@1446,1048575|80,3,@1443 156,3,@1445 1443:C2,308|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e800020398000025460f80140a20010800d00347c0803a64e8000217c6c1c1141a3fff0973bfffc971bfffc4bffffa9833b00008319fffc82f8000c82d70000947bfffc80160048941bfffc386000018316001c801800007c0803a64e80002182bb00083a830000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008275fff49263000492830000831b0000801800007c0803a64e800021825b00088232fffc8072fff883110008801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a1d0004919d000081fb000491f00004907000003870000081db000c7dc803a63b7b00104e800020|@1444,1048575| 1444:S46|5452414e535f54414228292e72657365727665537461636b537061636528332970757368456e7472696573283129 1445:S17|72657365727665537461636b5370616365 1446:S32|5452414e535f54414228292e72657365727665537461636b5370616365283329 1447:O2|@1449,@1448 1448:O8|@1451,@1205,@1327,@1133,@1216,@1373,@964,@1194 1449:C2,72|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e3001096fbfffc80c3000c80a30008808300048063000083180004801800007c0903a64e800420|@1450,1048575| 1450:S32|5452414e535f54414228292e6c6f6164546f5370656369666963526567283129 1451:C2,1880|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc947bfffc3a7900003a5800003a2300003a040000388600008070000c3c0002a36000414c7c0803a64e8000212c030001408200ac967bfffc8092001880640008965bfffc963bfffc961bfffc94bbfffc94dbfffc80030000941bfffc3880ffff386600003c0002a06000fe6c7c0803a64e800021388300003c6002a36063bc743c0002a1600074a87c0803a64e800021398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213b3d0004919d0000907900083f0002a06318c7ac9319000482fb000092f9000038790000800d00287c0803a64e80002139fb000090cf000039db0000906e0004815b0004388600008070000c3c0002a36000414c7c0803a64e8000212c03000140820064967bfffc8112001880e80008398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021389d0004919d00003c6002a36063ce70906400083f2002a06339c7ac93240004830700009304000038640000800d00287c0803a64e800021810300042c0800034082000c39200003480000083920000180ea0000808700002c040005408200808332001883190000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000090a3000482e7000492e30000967bfffc965bfffc963bfffc961bfffc94bbfffc94dbfffc94fbfffc800a0008941bfffc953bfffc83180024801800007c0803a64e800021280300014182011048000030967bfffc965bfffc963bfffc961bfffc94bbfffc94dbfffc94fbfffc800a0008941bfffc953bfffc480000e082db002c28160001418200c082bb000028150001408200b4829b001c80bb0010809b0018807b00148314000c801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a7d0004919d0000825b0010925300043a20000592330000821b001c80bb0014389300003c6002a36063af4083100008801800007c0803a64e80002181fb001c947bfffc38a0ffff809b0010807b0018830f0004801800007c0803a64e800021807b000081db00247dc803a63b7b00344e800020807b000c82bb00207ea803a63b7b00304e800020807b001c8323001883190000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082fb001092e3000482db000492c3000083180024801800007c0803a64e80002128030001418200f082bb002c2815000141820034829b00002814000140820028827b001c80bb0010809b0018807b00148313000c801800007c0803a64e80002148000024829b0014827b001c80940010807b001083130010801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a5d0004919d0000823b0010923200043a0000059212000081fb001c80bb0014389200003c6002a36063af40830f0008801800007c0803a64e80002181db001c947bfffc38a0ffff809b0010807b0018830e0004801800007c0803a64e800021807b0000815b00247d4803a63b7b00344e800020398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003a80000192950004827b001092750000398000013bbdfff87c1df04040a00010800d001c7c0803a64e8000213a5d0004919d000092b20000823b001c398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213a1d0004919d00003de002a461ef000891f0000081db001491d0000c92700008815100189150000438ae000038920000387000008311001c801800007c0803a64e800021813b00002809000141820134811b001480fb001c80c7001880a6000080080010941bfffc807b001483050020801800007c0803a64e800021809b0000546bf80140a20010800d00347c0803a64e8000212c030001408000084800003083240000831900007c6bc038556bf80140a20010800d00347c0803a64e8000217c03c00040800008480000183c6002a0606395e0800d00287c0803a64e800021398000025460f80140a20010800d00347c0803a64e8000217ee3661541a3fff056ec083a7ed9602e3b3600002c1900034082009c82bb000c829500002c1400034082008c827b00208253001882320000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000821b00149203000481f5000491e3000083110024801800007c0803a64e80002128030001418200344800000c947bfffc4800002881db0018815b0020808e0010807b0014830a0010801800007c0803a64e80002148000024811b002080bb0014809b001c807b00188308000c801800007c0803a64e80002180fb002080db001880bb0010809b0014807b001c83070014801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138dd0004919d000080bb001490a600043880000590860000807b002080bb001838860000832300083c6002a36063af403b190000833b0024801800007c0903a67f2803a63b7b00344e800420|@1454,1048575|64,3,@1155 136,3,@316 156,3,@1362 164,3,@511 220,3,@227 284,3,@1155 356,3,@1375 368,3,@227 732,3,@1329 1076,3,@1329 1288,3,@1452 1484,3,@51 1844,3,@1329 1452:C2,288|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000218078000c82f8000482d70000973bfffc80030010941bfffc8078000883160020801800007c0803a64e80002182bb0000546bf80140a20010800d00347c0803a64e8000212c030001408000084800003082950000827400007c6b9838556bf80140a20010800d00347c0803a64e8000217c03980040800008480000183c6002a0606395e0800d00287c0803a64e800021398000025460f80140a20010800d00347c0803a64e8000217e43661541a3fff0564c083a7e34602e3a910000568bf80140a20010800d00347c0803a64e8000212c1400014081001838600003821b00047e0803a63b7b00084e80002038600001821b00047e0803a63b7b00084e800020|@1453,1048575|156,3,@51 1453:S35|5452414e535f54414228292e6c6f6164546f5370656369666963526567283529283129 1454:S32|5452414e535f54414228292e6c6f6164546f5370656369666963526567283529 1455:O1|@1456 1456:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180830004806300003c0002a4600001f47c0903a64e800420|@1459,786435|40,3,@1457 1457:C2,8|386000014e800020|@1458,524291| 1458:S28|5452414e535f54414228292e636f6e7461696e734c6f63616c283229 1459:S28|5452414e535f54414228292e636f6e7461696e734c6f63616c283129 1460:O2|@1461,@1366 1461:C2,152|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc947bfffc973bfffc3afb000496fbfffc80c3000c80a30008808300048063000083180004801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082db000492c3000082bb000892a30004829b00007e8803a63b7b000c4e800020|@1462,1048575| 1462:S24|5452414e535f54414228292e6c6f6164456e747279283129 1463:O2|@1465,@1464 1464:O3|@1467,@1145,@1216 1465:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@1466,1048575| 1466:S27|5452414e535f54414228292e6c6f636b5265676973746572283129 1467:C2,164|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc947bfffc80030028941bfffc3ae40000808300103877000083180008801800007c0803a64e80002182db0000281600014182003882bb000880bb00043c8002a36084f2303c6000006063466883150004833b000c801800007c0903a67f2803a63b7b00104e8004203860000182bb000c7ea803a63b7b00104e800020|@1468,1048575|100,3,@1427 108,3,I48 1468:S27|5452414e535f54414228292e6c6f636b5265676973746572283229 1469:O2|@1471,@1470 1470:O3|@1473,@1145,@1195 1471:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@1472,1048575| 1472:S29|5452414e535f54414228292e756e6c6f636b5265676973746572283129 1473:C2,164|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc947bfffc80030028941bfffc3ae40000808300103877000083180008801800007c0803a64e80002182db0000281600014182003882bb000880bb00043c8002a4608406103c6000006063466883150004833b000c801800007c0903a67f2803a63b7b00104e8004203860000182bb000c7ea803a63b7b00104e800020|@1475,1048575|100,3,@1474 108,3,I48 1474:S14|756e6c6f636b5265676973746572 1475:S29|5452414e535f54414228292e756e6c6f636b5265676973746572283229 1476:O2|@1478,@1477 1477:O3|@1480,@1366,@964 1478:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@1479,1048575| 1479:S24|5452414e535f54414228292e6c6f61644966417267283129 1480:C2,640|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc947bfffc3a7900003a5800003a2300003a040000388500008070000c3c0002a36000414c7c0803a64e8000212c030001408200a8967bfffc8092000880640008965bfffc963bfffc961bfffc94bbfffc80030000941bfffc3880ffff386500003c0002a06000fe6c7c0803a64e800021388300003c6002a36063bc743c0002a1600074a87c0803a64e800021398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213b3d0004919d0000907900083f0002a06318c7ac9319000482fb000092f9000038790000800d00287c0803a64e80002139fb000090af000039db0000906e0004947bfffc947bfffc388500008070000c3c0002a36000414c7c0803a64e8000212c030001408200a8967bfffc81520008812a0008965bfffc963bfffc961bfffc94bbfffc80090000941bfffc3880ffff386500003c0002a06000fe6c7c0803a64e800021388300003c6002a36063bc743c0002a1600074a87c0803a64e800021398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021391d0004919d0000906800083ce002a060e7c7ac90e8000480db000090c8000038680000800d00287c0803a64e800021395b000090aa0000393b000090690004811b000480e8000080c700002c06fffb4082007880870004548bf80140a20010800d00347c0803a64e8000212c04000140810048947bfffc947bfffc967bfffc387b0004947bfffc38c00001389000003871000083120004801800007c0803a64e800021807b0008833b00007f2803a63b7b001c4e800020386500007e6803a63b7b00104e800020386500007e6803a63b7b00104e800020|@1481,1048575|64,3,@1155 132,3,@316 152,3,@1362 160,3,@511 216,3,@227 284,3,@1155 352,3,@316 372,3,@1362 380,3,@511 436,3,@227 1481:S24|5452414e535f54414228292e6c6f61644966417267283329 1482:O2|@1483,@1360 1483:C2,64|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180c3000c80a30008808300048063000083180004801800007c0903a64e800420|@1484,1048575| 1484:S23|5452414e535f54414228292e696e646972656374283129 1485:O2|@1487,@1486 1486:O7|@1489,@1205,@1145,@1195,@964,@1366,@1216 1487:C2,80|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e3001096fbfffc82c3001496dbfffc80c3000c80a30008808300048063000083180004801800007c0903a64e800420|@1488,1048575| 1488:S24|5452414e535f54414228292e6d6f7665546f566563283129 1489:C2,916|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc947bfffc949bfffc94bbfffc94dbfffc38a0000338830000807b001883180004801800007c0803a64e800021947bfffc947bfffc833b00183b1b0000971bfffc38c0000180bb0018809b0024807b002883190014801800007c0803a64e80002182fb002082db001880170028941bfffc80970010807b000483160018801800007c0803a64e80002182bb00002815000141820034827b001c80bb00243c8002a36084f2303c6000006063466883130008801800007c0803a64e8000213a830000480000083a800001947bfffc947bfffc829b002c809b001c8074000c3c0002a36000414c7c0803a64e8000212c03000140820098827b0024825300108232000880110000941bfffc3880ffff807b00203c0002a06000fe6c7c0803a64e800021388300003c6002a36063bc743c0002a1600074a87c0803a64e800021398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a1d0004919d0000907000083de002a061efc7ac91f0000481db000091d0000038700000800d00287c0803a64e8000213a7b0000825b001c925300003a3b000090710004821b000481f0000081cf00002c0efffd40820118815b0024812a001081090000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000038e0000190e3000880db001490c3000480af000490a3000094bbfffc83080038801800007c0803a64e8000212803000141820098809b00288064001083230000398000063bbdffe47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000831b00349303001482f9000c92e3001082db001892c3000c82bb001092a30008829b001c92830004827b0000926300008319003c801800007c0803a64e800021825b002838a0ffff809b0020807b003083120004801800007c0803a64e8000214800003c386000013b1b002c3c0002a460000e907c0803a64e80002148000020386000013b1b00283c0002a460000e907c0803a64e800021947bfffc815b0030813b0028800a0028941bfffc808a0010807b00148309000c801800007c0803a64e800021811b0000280800014182002c80fb002c80bb00343c8002a4608406103c6000006063466883070008801800007c0803a64e80002180fb002c80db003438a0ffff809b00183866000083070004833b0030801800007c0903a67f2803a63b7b003c4e800420|@1492,1048575|196,3,@1427 204,3,I48 260,3,@1155 312,3,@316 332,3,@1362 340,3,@511 396,3,@227 728,3,@1490 756,3,@1490 836,3,@1474 844,3,I48 1490:C2,256|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc947bfffc82f8fffc973bfffc971bfffc3adb000896dbfffc38c0000180b8fff4809800048078000883170014801800007c0803a64e80002182bb00008295fffc8274001082530000398000063bbdffe47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082350008922300148212000c9203001081f5ffec91e3000c81d5ffe491c300088155fff091430004813b00089123000083120034801800007c0803a64e800021811b000080e8fffc38a0ffff809b000c8068000483070004833b0004801800007c0903a67f2803a63b7b00104e800420|@1491,1048575| 1491:S43|5452414e535f54414228292e6d6f7665546f56656328362973746f72655669615265676973746572283129 1492:S24|5452414e535f54414228292e6d6f7665546f566563283629 1493:O2|@1495,@1494 1494:O2|@1497,@1205 1495:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@1496,1048575| 1496:S31|5452414e535f54414228292e72656d6f7665537461636b456e747279283129 1497:C2,52|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002138a0ffff83180004801800007c0903a64e800420|@1498,1048575| 1498:S31|5452414e535f54414228292e72656d6f7665537461636b456e747279283229 1499:O2|@1501,@1500 1500:O4|@1503,@1145,@964,@1290 1501:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@1502,1048575| 1502:S29|5452414e535f54414228292e726573657442757452656c6f6164283129 1503:C2,532|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e4003082d70000971bfffc8004000c941bfffc947bfffc949bfffc94bbfffc82a4001c82950000398000025680f80140a20010800d00347c0803a64e8000217e6ca41141a3fff0973bfffc80040028941bfffc96dbfffc387300003b1b001c3c0002a4600013dc7c0803a64e800021825b0010823200308211000081fb00007e0b7b78556bf80140a20010800d00347c0803a64e8000217c1078004182006481db001c814e0008812a0008398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021391d0004919d00003ce002a460e7182c90e800083cc002a060c6c7ac90c8000480a9000090a8000038680000800d00287c0803a64e80002181db001c814e0008812a00008111000080fb000c3987ffff7d0b38385560f80140a20010800d00347c0803a64e8000217ccc441141a3fff0398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080bb001490a3000490c300008309006c801800007c0803a64e800021809b001080640030833b000c93230000831b0004281800014182005082fb001c82d7000882b60000807b0014831500b4801800007c0803a64e800021829b001c80bb00103c8002a46084186483140004833b0008801800007c0903a67f2803a63b7b00204e8004203860000182fb00087ee803a63b7b00204e800020|@1508,1048575|128,3,@1504 240,3,@1506 252,3,@227 476,3,@1507 1504:C2,1024|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021546bf80140a20010800d00347c0803a64e8000212c03000140800010386000017f2803a64e80002082f8fff43a7900003a5800003a230000389100008077000c3c0002a36000414c7c0803a64e800021706b00014082033880830000832400002c19fffb4082030c8312fff0398000025700f80140a20010800d00347c0803a64e8000217eecc41141a3fff082d2000082b600088295000c82140018398000025600f80140a20010800d00347c0803a64e8000217df0641141a3fff0398fffff7eeb78385560f80140a20010800d00347c0803a64e8000217eeb0e707dcc5dd741a3ffec39ce000182e400047eeb7038556bf80140a20010800d00347c0803a64e8000217c1770004080024c81f5000081c3000481430008398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000812f000c9123000491430000967bfffc965bfffc963bfffc96fbfffc95dbfffc955bfffc830f0028801800007c0803a64e800021280300014182000c811b000048000138811b001080e800008088fff88068fff48307000c801800007c0803a64e80002180db001080a6fff48085003083240000398000025720f80140a20010800d00347c0803a64e8000217f0ccc1141a3fff082e6000082d7000882b6000c82950018398000025680f80140a20010800d00347c0803a64e8000217e74641141a3fff03993ffff7f0b98385560f80140a20010800d00347c0803a64e8000217f0b0e707e4c5dd741a3ffec3a52000182360000821b00083992ffff7e0b90385560f80140a20010800d00347c0803a64e8000217dec841141a3fff039c30000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00008146fff89143000c91c30008813100109123000491e3000095dbfffc83110030801800007c0803a64e800021811b00003b7b000480fb0010398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138dd0004919d00009106000438a0000590a60000808700008064000883230000398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213b1d0004919d00003ae0ffff92f8000c82d9000c92d8000882bb000492b8000490d8000038b80000809b000c8067fffc3c0002a36000620c7c0803a64e80002148000054967bfffc965bfffc963bfffc947bfffc947bfffc947bfffc48000038967bfffc965bfffc963bfffc947bfffc947bfffc947bfffc4800001c967bfffc965bfffc963bfffc947bfffc947bfffc947bfffc821b000c398000025600f80140a20010800d00347c0803a64e8000217dec841141a3fff0386f0000831b0010833b00147f2803a63b7b00184bfffc0c|@1505,1048575|96,3,@1155 864,3,@1198 1505:S43|5452414e535f54414228292e726573657442757452656c6f61642833296c6f6164456e7472696573283129 1506:S47|726573657442757452656c6f61643a206d75737420686176652070757368656420736f6d657468696e67206d6f7265 1507:S14|726573657442757452656c6f6164 1508:S29|5452414e535f54414228292e726573657442757452656c6f6164283329 1509:O2|@1511,@1510 1510:O5|@1514,@964,@1327,@1500,@1513 1511:C2,64|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180c3000c80a30008808300048063000083180004801800007c0903a64e800420|@1512,1048575| 1512:S31|5452414e535f54414228292e7075736856616c7565546f537461636b283129 1513:O8|@1519,@1205,@964,@1518,@1145,@1195,@1216,@1366 1514:C2,568|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000213980000254c0f80140a20010800d00347c0803a64e8000217eec341141a3fff0973bfffc971bfffc947bfffc949bfffc94dbfffc38d7000083180010801800007c0803a64e80002182db000482b6003082950000827b00007e8b9838556bf80140a20010800d00347c0803a64e8000217c1498004081002c823b000c38b3000038960000807b00088311000c801800007c0803a64e8000213a430000480000083a400001825b0000398000025640f80140a20010800d00347c0803a64e8000217e2c941141a3fff0821b000c81f0000481cf000c814e0018398000025540f80140a20010800d00347c0803a64e8000217d2a641141a3fff03989ffff7e2b48385560f80140a20010800d00347c0803a64e8000217e2b0e707d0c5dd741a3ffec39080001398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138fd0004919d00009107000438c0fffb90c7000080bb0004388700003c6002a460631bc483100008801800007c0803a64e80002180bb00048085003083240000831b00007f2bc378556bf80140a20010800d00347c0803a64e8000217c19c0004182006882fb000c82d7000482b60008398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a9d0004919d00003e6002a462731bdc927400083e4002a06252c7ac9254000482350000923400003a03000038740000800d00287c0803a64e80002182fb00107ee803a63b7b00144e800020|@1517,1048575|380,3,@1515 500,3,@1516 512,3,@227 1515:S16|7075736856616c7565546f537461636b 1516:S40|7075736856616c7565546f537461636b3a20436f756c646e2774207075736820746f20737461636b 1517:S31|5452414e535f54414228292e7075736856616c7565546f537461636b283429 1518:O3|@1523,@964,@1290 1519:C2,2220|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021971bfffc949bfffc947bfffc94dbfffc94bbfffc82e4003082d700007ecb3378556bf80140a20010800d00347c0803a64e8000217c1630004082000c3aa00003480000083aa00001947bfffc947bfffc3a7900003a5500008324000c38850000387900003c0002a36000414c7c0803a64e8000212c030001408200a0967bfffc831b001c82f8000882d70008965bfffc80160000941bfffc3880ffff386500003c0002a06000fe6c7c0803a64e800021388300003c6002a36063bc743c0002a1600074a87c0803a64e800021398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213abd0004919d0000907500083e8002a06294c7ac92950004827b00009275000038750000800d00287c0803a64e8000213b1b000090b800003afb00009077000482db000482b60000829500002c14fffd408203142812000141820068825b00188232000882110000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000081f5000491e3000481d0005891c30000967bfffc95fbfffc8310005c801800007c0803a64e80002128030001418200f048000014967bfffc80150004941bfffc480000dc815b002080bb0018809b001c807b0014830a000c801800007c0803a64e800021813b00208109000880e80000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d000080db001890c3001080a7000c90a3000c809b00009083000890a30004832700589323000083070064801800007c0803a64e800021831b002038a0ffff809b0010807b001c83180004801800007c0803a64e80002182fb001c82d7003082b600003980000256a0f80140a20010800d00347c0803a64e8000217e95661541a3fff0929600004800059c827b0020825300088232000082110004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000039e0000191e3000881d0000491c30004815b00009143000083110038801800007c0803a64e8000212803000141820140813b002080bb0018809b001c807b00148309000c801800007c0803a64e800021811b001c80e8003080c7000080bb00143985ffff7ccb28385560f80140a20010800d00347c0803a64e8000217c8c341141a3fff0398000025480f80140a20010800d00347c0803a64e8000217c6c241141a3fff0833b00208319000882f8000c82d700183996ffff7c6bb0385560f80140a20010800d00347c0803a64e8000217c6b0e707eac5dd741a3ffec3ab500018298000082740004398000063bbdffe47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000825b0018924300148234000c92230010821300049203000c81f4001091e3000892a3000481db000091c300008314003c801800007c0803a64e800021815b002038a0ffff809b0010807b001c830a0004801800007c0803a64e800021480003fc386000013b1b00203c0002a46000250c7c0803a64e800021480003e02c140003408201a0823b00188211000881f0000081cf004c280e0001418200882812000141820068398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000814f000c914300048136000891230000967bfffc80150004941bfffc80150008941bfffc830f0024801800007c0803a64e800021280300014182010448000034967bfffc80150004941bfffc80150008941bfffc480000e8967bfffc80150004941bfffc80150008941bfffc480000d0811b002480bb001c809b0020807b00188308000c801800007c0803a64e80002180fb002480c7000880a60000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000809b001c90830008833b000493230004831b00009303000083050044801800007c0803a64e80002182fb002438a0ffff809b0014807b002083170004801800007c0803a64e80002182db002082b6003082950000398000025680f80140a20010800d00347c0803a64e8000217e74661541a3fff09275000048000254386000013b1b00243c0002a46000250c7c0803a64e800021480002382c14fffb4082020c823b00188211000881f0000081cf004c280e0001418200782812000141820060398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000814f000c914300048136000891230000967bfffc80150004941bfffc830f0024801800007c0803a64e800021280300014182017848000024967bfffc80150004941bfffc48000164967bfffc80150004941bfffc48000154811b002080bb0018809b001c807b00148308000c801800007c0803a64e80002180fb001c80c7003080a600003980000254a0f80140a20010800d00347c0803a64e8000217c8c2c1141a3fff0807b0020832300088319000c82f800183997ffff7c8bb8385560f80140a20010800d00347c0803a64e8000217c8b0e707ecc5dd741a3ffec3ad6000182bb00003996ffff7eabb0385560f80140a20010800d00347c0803a64e8000217e95661541a3fff082790000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000825b00189243000882330010922300049283000083130044801800007c0803a64e800021821b002038a0ffff809b0010807b001c83100004801800007c0803a64e80002181fb001c81cf0030814e0000398000025540f80140a20010800d00347c0803a64e8000217d2a661541a3fff0912e000048000040386000013b1b00203c0002a46000250c7c0803a64e80002148000024967bfffc386000013b1b001c3c0002a46000250c7c0803a64e800021947bfffc947bfffc3b7b0004827b001c82530030823200008213001881f000007e2b7838556bf80140a20010800d00347c0803a64e8000217c1178004081002081d2000091d0000038600001815b00047d4803a63b7b00244e8000203860000181db00047dc803a63b7b00244e800020|@1522,1048575|132,3,@1155 192,3,@316 212,3,@1362 220,3,@511 276,3,@227 1112,3,@1520 1532,3,@1520 2060,3,@1520 2092,3,@1520 1520:C2,808|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc947bfffc82f80000973bfffc971bfffc3adb000896dbfffc38c0000180b8fff08098fffc8078fff88317001c801800007c0803a64e80002182bb00008295fffc82750000969bfffc80140028941bfffc80940010807b001083130018801800007c0803a64e800021825b00002812000141820030823b00088211000080bb00043c8002a36084f2303c6000006063466883100010801800007c0803a64e800021823b00088211000080b1fff88091fffc8071fff48310000c801800007c0803a64e80002181fb000881cffffc814e0030812a0000810ffff47d2b4378556bf80140a20010800d00347c0803a64e8000217c0940004082008c80ef000080c7000880a60000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000808ffff890830004833b00109323000083050048801800007c0803a64e800021831b000882f8fffc82d7003082b600003980000256a0f80140a20010800d00347c0803a64e8000217e95661541a3fff092960000480000f080ea00003988ffff7ceb40385560f80140a20010800d00347c0803a64e8000217ccc3c1141a3fff03980000254c0f80140a20010800d00347c0803a64e8000217cac341141a3fff0808f0000806400088323000c831900183998ffff7cabc0385560f80140a20010800d00347c0803a64e8000217cab0e707eec5dd741a3ffec3af7000182c3000082b60004398000063bbdffe47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000828ffff8928300148276000c92630010825500049243000c823600109223000892e30004821b00109203000083160034801800007c0803a64e80002181fb000881cffffc814f000095dbfffc800e0028941bfffc808e0010807b0018830a0014801800007c0803a64e800021813b00002809000141820030811b001080e8000080bb00043c8002a4608406103c6000006063466883070010801800007c0803a64e800021811b001080e8000038a0ffff809b001c8068fffc83070004833b0014801800007c0903a67f2803a63b7b00204e800420|@1521,1048575|164,3,@1427 172,3,I48 728,3,@1474 736,3,I48 1521:S49|5452414e535f54414228292e73746f7265496e537461636b28342967656e6572616c53746f7265496e537461636b283129 1522:S27|5452414e535f54414228292e73746f7265496e537461636b283429 1523:C2,220|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021546bf80140a20010800d00347c0803a64e8000212c0300014180009882e4003082d700007c6bb038556bf80140a20010800d00347c0803a64e8000217c03b000408000708004000c941bfffc971bfffc94bbfffc949bfffc947bfffc82a4001c82950000398000025680f80140a20010800d00347c0803a64e8000217e6ca41141a3fff0973bfffc387300003b1b00143c0002a4600029a87c0803a64e800021825b00007e4803a63b7b00184e800020386000017f2803a64e800020|@1526,1048575|176,3,@1524 1524:C2,960|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021546bf80140a20010800d00347c0803a64e8000212c03000140800010386000017f2803a64e80002082f8fff43a7900003a5800003a230000389100008077000c3c0002a36000414c7c0803a64e800021706b0001408202f880830000832400002c19fffb408202cc8312fffc82f8000482d7000c82b600183980000256a0f80140a20010800d00347c0803a64e8000217e95641141a3fff08212fff03994ffff7e0ba0385560f80140a20010800d00347c0803a64e8000217e0b0e707dec5dd741a3ffec39ef0001828400047e8b7b78556bf80140a20010800d00347c0803a64e8000217c1478004082022c81f7000081c3000481430008398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000812f000c9123000491430000967bfffc965bfffc963bfffc969bfffc95dbfffc955bfffc830f0028801800007c0803a64e800021280300014182000c811b000048000118811b001080e8fffc8088fff88068fff483070008801800007c0803a64e80002180db001080a6fff48085003083240000398000025720f80140a20010800d00347c0803a64e8000217f0ccc1141a3fff082e6fffc82d7000482b6000c829500183994ffff7f0ba0385560f80140a20010800d00347c0803a64e8000217f0b0e707e6c5dd741a3ffec3a73000182560000823b00083993ffff7e2b98385560f80140a20010800d00347c0803a64e8000217e11661541a3fff039e30000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d000081c6fff891c3000c91e3000881520010914300049203000095fbfffc83120030801800007c0803a64e800021811b00003b7b0004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021393d0004919d000091090004390000059109000080fb001080c7fffc80a6000480850000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00003b20ffff9323000c8304000c9303000882fb000492e300049123000038a30000809b000c806700003c0002a36000620c7c0803a64e80002148000054967bfffc965bfffc963bfffc947bfffc947bfffc947bfffc48000038967bfffc965bfffc963bfffc947bfffc947bfffc947bfffc4800001c967bfffc965bfffc963bfffc947bfffc947bfffc947bfffc821b000c398000025600f80140a20010800d00347c0803a64e8000217dec841141a3fff0386f0000831b0010833b00147f2803a63b7b00184bfffc4c|@1525,1048575|96,3,@1155 800,3,@1198 1525:S56|5452414e535f54414228292e6c6f6164456e7472794265666f72654f76657277726974696e6728332966696e64546865456e747279283129 1526:S41|5452414e535f54414228292e6c6f6164456e7472794265666f72654f76657277726974696e67283329 1527:O2|@1528,@1513 1528:C2,64|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180c3000c80a30008808300048063000083180004801800007c0903a64e800420|@1529,1048575| 1529:S27|5452414e535f54414228292e73746f7265496e537461636b283129 1530:O1|@1531 1531:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180830004806300003c0002a460002ee07c0903a64e800420|@1534,1032195|40,3,@1532 1532:C2,52|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021806300043c0002a36000414c7c0903a64e800420|@1533,1032195|36,3,@1155 1533:S22|5452414e535f54414228292e697350726f6342283229 1534:S22|5452414e535f54414228292e697350726f6342283129 1535:O1|@1536 1536:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180830004806300003c0002a460002fcc7c0903a64e800420|@1539,1032195|40,3,@1537 1537:C2,52|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021806300203c0002a36000414c7c0903a64e800420|@1538,1032195|36,3,@1155 1538:S27|5452414e535f54414228292e70737461636b466f72446563283229 1539:S27|5452414e535f54414228292e70737461636b466f72446563283129 1540:O1|@1541 1541:C2,12|83030030807800004e800020|@1542,786433| 1542:S7|6f283229283129 1543:O1|@1544 1544:C2,12|83030018807800004e800020|@1542,786433| 1545:O2|@1547,@1546 1546:O2|@1549,@1205 1547:C2,80|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e3001096fbfffc82c3001496dbfffc80c3000c80a30008808300048063000083180004801800007c0903a64e800420|@1548,1048575| 1548:S24|5452414e535f54414228292e6d616b65456e747279283129 1549:C2,452|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002139d9000039580000392300003905000038e6000080bb000038870000806900043c0002a36000620c7c0803a64e80002138a8000038870000806900203c0002a36000620c7c0803a64e80002180db00043980000254c0f80140a20010800d00347c0803a64e8000217cac341141a3fff095dbfffc951bfffc94fbfffc80090024941bfffc80090028941bfffc3888000038690000830a0004801800007c0803a64e800021809b000028040001418200e43c6002a460633358831b0004801800007c0803a64e8000213880ffff807b000c3c0002a06000fe6c7c0803a64e800021831b0004801800007c0803a64e8000213c6002a460633374831b0004801800007c0803a64e8000213880ffff807b00083c0002a06000fe6c7c0803a64e800021831b0004801800007c0803a64e8000213c6002a460633384831b0004801800007c0803a64e8000213880ffff807b00183c0002a06000fe6c7c0803a64e800021831b0004801800007c0803a64e80002138600015831b0004833b0010801800007c0903a67f2803a63b7b001c4e80042038600001833b00107f2803a63b7b001c4e800020|@1553,1048575|64,3,@1198 92,3,@1198 208,3,@1550 240,3,@316 272,3,@1551 304,3,@316 336,3,@1552 368,3,@316 1550:S17|6d616b65456e7472793a20696e6465783d 1551:S6|206c6f636e3d 1552:S5|207573653d 1553:S24|5452414e535f54414228292e6d616b65456e747279283629 1554:O2|@1555,@1205 1555:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@1556,1048575| 1556:S27|5452414e535f54414228292e696e6372557365436f756e74283129 1557:O1|@1558 1558:C2,116|7f2802a6633900028303000882f8000082c3001c82b6000092b80000947bfffc947bfffc3a9b000092b400003abb000092f50004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000829b000092830000831b0004930300047f2803a63b7b00084e800020|@1559,1032193| 1559:S24|5452414e535f54414228292e6d61726b537461636b283129 1560:O1|@1561 1561:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180830004806300003c0002a4600035507c0903a64e800420|@1564,917507|40,3,@1562 1562:C2,20|8303000882e4000492f80000386000014e800020|@1563,917507| 1563:S26|5452414e535f54414228292e756e6d61726b537461636b283229 1564:S26|5452414e535f54414228292e756e6d61726b537461636b283129 1565:O1|@1566 1566:C2,24|280300014082000c386000034e800020386000014e800020|@1567,524289| 1567:S27|5452414e535f54414228292e6973456d7074794c6162656c283129 1568:O3|@1570,@1573,@1569 1569:O1|@1575 1570:O1|@1571 1571:C2,64|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000213f00000063184d88801800007c0803a64e800021686300027f2803a64e800020|@1572,917505|32,3,I105 1572:S10|4d65726765496e646578 1573:O1|@1574 1574:C2,60|7f2802a6633900023b030000398000013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d0000930300007f2803a64e800020|@1572,786433| 1575:C2,8|806300004e800020|@1572,524289| 1576:O2|@1577,0 1577:O1|@1578 1578:C2,24|280300014082000c386000034e800020386000014e800020|@1579,524289| 1579:S7|4e6f4d65726765 1580:O2|@1582,@1581 1581:O3|@1585,@964,@1584 1582:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@1583,1048575| 1583:S34|5452414e535f54414228292e756e636f6e646974696f6e616c4272616e6368283129 1584:O3|@1588,@1587,@964 1585:C2,228|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e4001482d70000281600014182000c386000014e800020973bfffc971bfffc947bfffc949bfffc94bbfffc38850000807b000483180008801800007c0803a64e80002182bb0004829500143a60000392740000825b000c8232000482110000947bfffc807b000483100080801800007c0803a64e800021398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002139fd0004919d000081db000c91cf0008815b0000914f0004906f0000386f0000813b00147d2803a63b7b00184e800020|@1586,1048575| 1586:S34|5452414e535f54414228292e756e636f6e646974696f6e616c4272616e6368283329 1587:O3|@1591,@1159,@964 1588:C2,712|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e3001c82d70000947bfffc947bfffc3980000256c0f80140a20010800d00347c0803a64e8000217eb6661541a3fff03a9900003a7800003a4300003a24000038a0000138800081387500003f000000631841c8801800007c0803a64e80002192c30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138bd0004919d0000906500043880ffff908500003d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d000090a300003b3b0000907900003b1b00003ae0000192f80004398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213add0004919d000082bb000092b6000080bb000490b600048092001c80640000833200308319000082f2001082b700048215000081f3000881cf0000969bfffc967bfffc965bfffc80120024941bfffc80120028941bfffc96dbfffc947bfffc971bfffc961bfffc38710000830e00b4801800007c0803a64e800021398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021395d0004919d0000813b0004912a0010811b0008910a000c80fb000090ea0008906a000480db000c90ca0000955bfffc38a00001809b001c8064001c832300007cabc838556bf80140a20010800d00347c0803a64e8000217c05c800408000808304000c38850000387800003c0002a36000414c7c0803a64e80002139c5000038a30000388e0000807b00103c0002a36000620c7c0803a64e8000213980000255c0f80140a20010800d00347c0803a64e8000217d4e661541a3fff038aa0000800d00187c1b004040a00010800d00207c0803a64e8000214bffff5c831b0014281800014182002882fb002080bb0018809b00003c6002a460633c6483170004801800007c0803a64e800021807b000082fb00247ee803a63b7b00304e800020|@1590,1048575|108,3,I11 532,3,@1155 564,3,@1198 668,3,@1589 1589:S9|736176655374617465 1590:S24|5452414e535f54414228292e736176655374617465283229 1591:C2,516|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc949bfffc94bbfffc80040004941bfffc8004000c941bfffc80040010941bfffc3b050000801800007c0803a64e80002138600015831b000c801800007c0803a64e8000213c6002a460633eb8831b000c801800007c0803a64e800021807b0008831b000c801800007c0803a64e8000213c6002a460633ec8831b000c801800007c0803a64e8000213880ffff807b00043c0002a06000fe6c7c0803a64e800021831b000c801800007c0803a64e8000213c6002a3606340a4831b000c801800007c0803a64e8000213880ffff807b00003c0002a06000fe6c7c0803a64e800021831b000c801800007c0803a64e80002138600015831b000c801800007c0803a64e800021833b00148319000882f80008398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002a462b53ed892b600009316000480170008941bfffc807b00083b160000801800007c0803a64e800021831b0000801800007c0803a64e800021829b00183a630000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00003e4002a46252409492430000823b00109223000c821b00149203000881f4000491e300043b130000833b001c801800007c0903a67f2803a63b7b00204e800420|@1599,1048575|108,3,@1592 152,3,@1593 184,3,@316 216,3,@1152 248,3,@316 348,3,@1594 452,3,@1597 1592:S8|636f6e746578743d 1593:S5|207073703d 1594:C2,260|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d70008546bf80140a20010800d00347c0803a64e8000212c0300014180000c3aa00003480000083aa00001398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a9d0004919d00003e6002a462733ff8927400009314000890740004398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a5d0004919d00003e2002a4623140709232000090720004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a3000892430004928300003a18000083160004801800007c0903a67f2803a64e800420|@1277,1048575|116,3,@1595 172,3,@1596 1595:C2,92|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f800043980000256e0f80140a20010800d00347c0803a64e8000217eccbc1141a3fff03876000083180008801800007c0903a67f2803a64e800420|@1275,1048575| 1596:C2,8|807800044e800020|@1275,786433| 1597:C2,108|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f800083a7900003a5800003a23000038910000807700003c0002a36000414c7c0803a64e80002180b2000c3883000038710000831200043b330000801800007c0903a67f2803a64e800420|@1598,1048575|56,3,@1155 1598:S28|5452414e535f54414228292e7072696e745374617465283329283129 1599:S25|5452414e535f54414228292e7072696e745374617465283329 1600:O2|@1602,@1601 1601:O2|@1604,@964 1602:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@1603,1048575| 1603:S23|5452414e535f54414228292e6a756d704261636b283129 1604:C2,156|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d700003aa30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000090a300083a8000039283000492a30000973bfffc949bfffc83160084801800007c0803a64e800021827b0000825300143a2000039232000038600001821b00047e0803a63b7b00084e800020|@1605,1048575| 1605:S23|5452414e535f54414228292e6a756d704261636b283329 1606:O2|@1608,@1607 1607:O4|@1611,@964,@1066,@1610 1608:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@1609,1048575| 1609:S20|5452414e535f54414228292e6669787570283129 1610:O10|@1614,@1145,@964,@1327,@1133,@1205,@1216,@1195,@1204,@1587 1611:C2,416|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e4001482d700002816000140820064973bfffc80b8000480650008398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002a462b5454892b600083ea002a062b5c7ac92b6000482a3000092b6000038760000800d00287c0803a64e8000212c0300014082000c386000014e800020706b00014082000c82a3000448000020973bfffc3aa300003c6002a160630a30800d00287c0803a64e80002182c4001c82960000973bfffc971bfffc947bfffc949bfffc94bbfffc969bfffc3a600001967bfffc38c00001387500008318000c801800007c0803a64e800021825b0004823200143a0000019211000081f2000039c0000191cf0000815b000c813b0008712b00014082000c81090000480000183c6002a160630a30800d00287c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080fb000090e3000491030000830a0008833b0010801800007c0903a67f2803a63b7b00144e800420|@1613,1048575|96,3,@1612 108,3,@227 184,3,@341 320,3,@341 1612:S12|4e6f74206272616e63686564 1613:S20|5452414e535f54414228292e6669787570283329 1614:C2,1232|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e400282817000141820050973bfffc971bfffc947bfffc949bfffc94bbfffc94dbfffc8004000c941bfffc96fbfffc80a40024388300003c6002a460634a6483180024801800007c0803a64e8000213ac300004800002c3ac00001973bfffc971bfffc947bfffc949bfffc94bbfffc94dbfffc8004000c941bfffc96fbfffc82db001082bb001482960010827400048255000892530000821b00082c1000014082001881fb001881cf0008814e0000822a000c48000188947bfffc947bfffc80900000807500003c0002a36000414c7c0803a64e8000212c0300014082006481fb002081cf0008814e0008398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021393d0004919d00003d0002a461084a74910900083ce002a060e7c7ac90e9000480ca000090c9000038690000800d00287c0803a64e80002139fb000081d0000091cf0000395b0000906a0004813b00048109000080e800002c0700054082000c82280004480000cc80db002080a6000880850000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008324000c932300048309000893030000971bfffc83040028801800007c0803a64e800021280300014182000c823b00004800006482fb002482d7000882b60008398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a9d0004919d00003e6002a462734a98927400083e4002a06252c7ac92540004823500009234000038740000800d00287c0803a64e8000213b7b00043b7b000882fb001882d7000882b60008829b00108274001c82530000398000025640f80140a20010800d00347c0803a64e8000217e0c941141a3fff0398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002139fd0004919d00003dc002a461ce4ab891cf000092cf0008815b0024914f0004963bfffc80150008941bfffc387000003b0f0000801800007c0803a64e800021831b0000801800007c0803a64e800021813b002039030000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003ce002a460e74c7c90e3000080db001890c3000880a9002090a300043b080000801800007c0803a64e800021386000013b1b00243c0002a460004cf87c0803a64e800021809b0018807b001c83240030830300109319000082e4001c82d7000082a3000c92b7000096dbfffc386000013b1b00283c0002a460004f387c0803a64e800021829b0014728b0001408200a8825b002480bb0008809b0018807b001c83120010801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a3d0004919d0000821b00089211000439e0000591f1000081db002480bb001c389100003c6002a36063af40830e000c801800007c0803a64e800021398000013bbdfff87c1df04040a00010800d001c7c0803a64e8000213a7d0004919d000090730000480000083a600001825b000c281200014182004c823b00248211000881f00000967bfffc807b001c830f00b4801800007c0803a64e80002181db002880bb00203c8002a460844a64830e0004801800007c0803a64e80002148000008967bfffc807b0000823b002c7e2803a63b7b00384e800020|@1629,1048575|88,3,@1615 232,3,@1155 304,3,@1616 316,3,@227 548,3,@1617 560,3,@227 696,3,@1618 812,3,@1621 864,3,@1623 928,3,@1625 1052,3,@1329 1180,3,@1615 1615:S8|7365745374617465 1616:S25|70537461636b5265616c456e7472793a206e6f20656e747279 1617:S24|73657453746174653a206e6f742061207265676973746572 1618:C2,268|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000882d7000882b800047c6ba838556bf80140a20010800d00347c0803a64e8000217c03a8004180000c3a800003480000083a800001398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a7d0004919d00003e4002a462524be0925300009313000890730004398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a3d0004919d00003e0002a462104c589211000090710004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092830008922300049263000039f8000083160004801800007c0903a67f2803a64e800420|@1277,1048575|124,3,@1619 180,3,@1620 1619:C2,92|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f800043980000256e0f80140a20010800d00347c0803a64e8000217eccbc1141a3fff03876000083180008801800007c0903a67f2803a64e800420|@1275,1048575| 1620:C2,8|807800044e800020|@1275,786433| 1621:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180b80008388300003860000383180004801800007c0903a64e800420|@1622,1048575| 1622:S26|5452414e535f54414228292e7365745374617465283629283129 1623:C2,508|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8fff482d7001c82b600007c6ba838556bf80140a20010800d00347c0803a64e8000217c03a80041800010386000017f2803a64e8000203a7900003a5800003a230000389100008077000c3c0002a36000414c7c0803a64e8000212c030001408200084800013080830000832400002c190005408200408312fff482f2fffc967bfffc965bfffc963bfffc80030008941bfffc82c4000480980010387600008317001c801800007c0803a64e8000214800005c2c190003408200408312fff482f2fffc967bfffc965bfffc963bfffc80030008941bfffc82c4000480980010387600008317001c801800007c0803a64e80002148000018967bfffc965bfffc963bfffc80030008941bfffc831b000882f8fffc82d7000882b60000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008295000c92830004827b00009263000083150028801800007c0803a64e8000212803000141820028825b00088232fff48212fffc80910010807b00008310001c801800007c0803a64e8000213b7b000448000010967bfffc965bfffc963bfffc821b0000398000025600f80140a20010800d00347c0803a64e8000217df0661541a3fff0386f0000831b0004833b00087f2803a63b7b000c4bfffe10|@1624,1048575|108,3,@1155 1624:S31|5452414e535f54414228292e73657453746174652836296672656573283129 1625:C2,1400|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8fff882d7000c7c6bb038556bf80140a20010800d00347c0803a64e8000217c03b00041800010386000017f2803a64e8000203a7900003a5800003a23000038910000807700003c0002a36000414c7c0803a64e8000218092ffd87e2b2038556bf80140a20010800d00347c0803a64e8000217c112000418000103f2002a4633954cc4800008c8332fff43a030000389100008079000c3c0002a36000414c7c0803a64e8000212c030001408200103f2002a4633954cc480000548092fff48324000083190000281800014182000c3ae0ffff4800000882e3000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000092f9000482e3000492f900003870000039d3000039520000393100003903000080f9000080190004941bfffc38a8000038890000806affe83c0002a36000620c7c0803a64e8000212c0800014082003c398000025520f80140a20010800d00347c0803a64e8000217cc9661541a3fff0386600003b0a00003b2e00007f2803a63b7b00044bfffe6480c8000080a600002c05000540820058808afff4806afffc95dbfffc955bfffc953bfffc94fbfffc94dbfffc80080004941bfffc80080008941bfffc8008000c941bfffc8084001083230018806600043b190000801800007c0803a64e8000214800008c2c05000340820058808afff4806afffc95dbfffc955bfffc953bfffc94fbfffc94dbfffc80080004941bfffc80080008941bfffc8008000c941bfffc8084001083230018806600043b190000801800007c0803a64e8000214800003095dbfffc955bfffc953bfffc94fbfffc94dbfffc80080004941bfffc80080008941bfffc8008000c941bfffc809b00188064fffc8323000883190000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082f8000c92e3000482db000492c3000083180028801800007c0803a64e800021280300014182002882bb00188295fff48275fffc80940010807b000483130018801800007c0803a64e80002182bb002056abf80140a20010800d00347c0803a64e8000212c1500014080000848000108829b0000568bf80140a20010800d00347c0803a64e8000212c140001418000887e8bab78556bf80140a20010800d00347c0803a64e8000217c14a800418200c8827b00188253fffc8232000882110008398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002139fd0004919d00003dc002a461ce54d891cf00083d4002a0614ac7ac914f000481300000912f0000386f0000800d00287c0803a64e800021827b0018398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213a5d0004919d000092b2000c823b000492320008821b00089212000481fb000c91f2000038b20000809b00148073ffe83c0002a36000620c7c0803a64e80002181db00143980000255c0f80140a20010800d00347c0803a64e8000217d4e661541a3fff0386a0000831b00184bfffb99813b00188109000428080001418200ec80e9fff480c7001c80a60000809b00147c8b2838556bf80140a20010800d00347c0803a64e8000217c0428004180000c386000014800002c8067000c3c0002a36000414c7c0803a64e8000212c0300014082000c386000014800000880630004833b00107f2b1838556bf80140a20010800d00347c0803a64e8000217c191800408000543983ffff7f2b18385560f80140a20010800d00347c0803a64e8000217f0ccc1141a3fff082e9fffc38b80000809b00143867000083170014833b001c801800007c0903a67f2803a63b7b00244e80042038600001831b001c7f0803a63b7b00244e8000203860000180fb001c7ce803a63b7b00244e800020|@1628,1048575|104,3,@1155 156,3,@1626 184,3,@1155 208,3,@1626 344,3,@1198 940,3,@1627 952,3,@227 1068,3,@1198 1208,3,@1155 1626:O2|0,-1 1627:S28|446966666572656e7420737461636b2064657374696e6174696f6e73 1628:S38|5452414e535f54414228292e73657453746174652836297075744f6e456e7472696573283129 1629:S23|5452414e535f54414228292e7365745374617465283629 1630:O2|@1632,@1631 1631:O2|@1635,@1634 1632:C2,72|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e3001096fbfffc80c3000c80a30008808300048063000083180004801800007c0903a64e800420|@1633,1048575| 1633:S20|5452414e535f54414228292e6d65726765283129 1634:O6|@1638,@1066,@1610,@964,@1584,@1637 1635:C2,100|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc949bfffc82fb000896fbfffc83180004801800007c0803a64e80002182db000082bb0008829600088275000492740000825b00047e4803a63b7b000c4e800020|@1636,1048575| 1636:S20|5452414e535f54414228292e6d65726765283529 1637:O15|@1640,@1587,@1145,@964,@1327,@1265,@1195,@1204,@1373,@1290,@1216,@1133,@1136,@1205,@1448 1638:C2,1192|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c03000140820010386600003b7b00044e80002082e4001482d700002816000141820144706b00014082000c82a3000448000020973bfffc3aa300003c6002a160630a30800d00287c0803a64e800021706b00014082000c8283000848000020973bfffc3a8300003c6002a160630a30800d00287c0803a64e80002180db0000973bfffc971bfffc947bfffc949bfffc94bbfffc82c6000096dbfffc3a600003967bfffc38d400003875000083180008801800007c0803a64e800021825b0004823200143a0000019211000081f2000039c0000191cf0000815b000c813b0008712b00014082000c810900004800001c390300003c6002a160630a30800d00287c0803a64e80002138e30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080db000090c300049103000094fbfffc830a0004801800007c0803a64e800021807b000080bb00147ca803a63b7b001c4e800020706b00014082000c82a3000448000020973bfffc3aa300003c6002a160630a30800d00287c0803a64e800021706b00014082000c8283000848000020973bfffc3a8300003c6002a160630a30800d00287c0803a64e800021947bfffc947bfffc973bfffc971bfffc947bfffc949bfffc94bbfffc94bbfffc827b0020967bfffc3a5b001c965bfffc38a40000389400003875000083180014801800007c0803a64e800021823b001428110001418201f8821b000481f0001481cf0000280e00014182000c3940000148000094815b000c809b000038700000830a0010801800007c0803a64e800021813b00048109001438e0000390e8000080db000c80a6000c80850000947bfffc807b000483040080801800007c0803a64e800021398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213b3d0004919d0000831b001c9319000882fb000092f9000490790000395900003b7b000482db000872cb00014082000c82b60004480000183c6002a160630a30800d00287c0803a64e80002172cb00014082000c82960008480000183c6002a160630a30800d00287c0803a64e800021827b001c825b000c955bfffc82330000963bfffc3a000003961bfffc38d4000080bb000c809b00103875000083120008801800007c0803a64e80002181fb000881cf000039400001914e0000812f0014390000019109000080fb001080db000c70cb00014082000c80a600004800001c38a300003c6002a160630a30800d00287c0803a64e80002138830000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000833b00049323000490a30000949bfffc83070004801800007c0803a64e800021831b0024931b002480db000080bb0008809b000c807b0004831b0014833b00187f2803a63b7b00244bfffbe4821b000c81fb000871eb00014082000c81cf0000480000183c6002a160630a30800d00287c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000815b00009143000491c3000083100004801800007c0803a64e800021807b0018813b00107d2803a63b7b00204e800020|@1639,1048575|92,3,@341 136,3,@341 276,3,@341 412,3,@341 456,3,@341 756,3,@341 792,3,@341 928,3,@341 1088,3,@341 1639:S23|5452414e535f54414228292e6d657267654c6162283529 1640:C2,4220|7f2802a66339000239600074800d00187d6bd8107c0b004040a00010800d00247c0803a64e800021973bfffc971bfffc947bfffc949bfffc94bbfffc94dbfffc8005000c941bfffc80050024941bfffc80050028941bfffc97fbfffc3ee002a462f76b7a96fbfffc3ac0000196dbfffc3bfb00003d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213a9d0004919d00003a60000192740000825b000c281200014182006c8238000c82110000969bfffc807b003c831000b4801800007c0803a64e80002181fb002c80bb00203c8002a460846c58830f0008801800007c0803a64e80002181db002c80bb0014809b00283c6002a460636c6c830e0004801800007c0803a64e80002148000008969bfffc823b00208211000881f0000081db0038814e00007deb5378556bf80140a20010800d00347c0803a64e8000217c0f500041820064813b002c8109000c80e80008398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002138dd0004919d00003ca002a460a56c8090a600083c8002a06084c7ac90860004806700009066000038660000800d00287c0803a64e800021813b0024712b00014082027c80fb001c70eb000140820214947bfffc947bfffc80db003080890000806600003c0002a36000414c7c0803a64e8000212c0300014082006480bb00348085000c80640008398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213b3d0004919d00003f0002a463184a74931900083ee002a062f7c7ac92f9000482c3000092d9000038790000800d00287c0803a64e80002138bb000080890000908500003b3b000090790004831b000482f8000082b700002c1500054082000c82d70004480000d8829b00348274000c82530000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000081f2000c91e30004811800089103000080070000941bfffc951bfffc83120028801800007c0803a64e800021280300014182000c82db00004800006480fb003c80c7000c80a60008398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021389d0004919d00003c6002a460636c90906400083f2002a06339c7ac93240004830500009304000038640000800d00287c0803a64e8000213b7b00044800000c80070000941bfffc829b003896dbfffc3a600003967bfffc80db000838b60000809b0034807b005083140038801800007c0803a64e800021825b003c38a0ffff38830000807b003083120034801800007c0803a64e800021823b003c80bb0000809b004c807b00308311002c801800007c0803a64e800021811b0000480000f080db002c80a6000c80850008398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003f2002a463396ca8932300083f0002a06318c7ac9303000482e4000092e30000800d00287c0803a64e800021811b001c2c0800014082001880fb002c80c7000c80a600008105000c4800006480fb002c80c7000c80a60008398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021389d0004919d00003c6002a460636ca8906400083f2002a06339c7ac93240004830500009304000038640000800d00287c0803a64e800021947bfffc947bfffc947bfffc947bfffc809b003c8064000c83230008831b003082f8001c82d700003980000256c0f80140a20010800d00347c0803a64e8000217eacb41141a3fff0829b0048398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a7d0004919d00003e4002a462526cd892530000907300088234000092330004951bfffc80190008941bfffc387500003b130000801800007c0803a64e800021831b0000801800007c0803a64e800021821b004439e30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003dc002a461ce6e9c91c30000815b0038914300088130001c912300043b0f0000801800007c0803a64e800021811b004480e8000c80c7000880bb00388085001c80640000398000025460f80140a20010800d00347c0803a64e8000217f2c1c1141a3fff0398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b1d0004919d00003ee002a462f76f1892f8000090f8000480060008941bfffc38790000801800007c0803a64e800021831b0000801800007c0803a64e80002182db00483aa30000398000063bbdffe47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003e8002a4629470d492830000827b004492630014825b0034924300108236000c9223000c821b003c9203000881f6001c91e300043b150000801800007c0803a64e80002181db0048398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021395d0004919d00003d2002a4612975dc912a0000811b003c910a000880ee000c90ea000480c70008398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003ca002a460a5784c90a30000914300048306000c801800007c0803a64e80002138830000386000013b040000801800007c0803a64e800021833b003c8319001c82f800003980000256e0f80140a20010800d00347c0803a64e8000217eccbc1141a3fff082bb0048398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a9d0004919d00003e6002a462737964927400008255000c92540004947bfffc387600003b140000801800007c0803a64e800021831b0000801800007c0803a64e800021823b004c398000053bbdffe87c1df04040a00010800d001c7c0803a64e8000213a1d0004919d00003de002a461ef7b2091f0000081db004091d00010815b00489150000c907000088131000c913000048109000838e30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003cc002a460c67e6890c300009203000494fbfffc8308000c801800007c0803a64e80002180bb004c38830000806500103b040000801800007c0803a64e800021833b00448319001c82f800003980000256e0f80140a20010800d00347c0803a64e8000217eccbc1141a3fff082bb0050398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a9d0004919d00003e6002a462737f88927400008255000c92540004947bfffc387600003b140000801800007c0803a64e800021831b0000801800007c0803a64e800021823b00047e2b1838556bf80140a20010800d00347c0803a64e8000217c1118004081000c3a110000480000083a03000081fb004881cf0030814e00007e0b5038556bf80140a20010800d00347c0803a64e8000217c10500040800090813b00548109000c80e8000080ce00003990ffff7ccb80385560f80140a20010800d00347c0803a64e8000217cac341141a3fff0398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000809b00649083000490a30000961bfffc8307006c801800007c0803a64e800021807b004c83230030831b00009319000048000008947bfffc398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021393d0004919d00003d0002a4610881449109000080fb004c90e9000880db005490c9000480bb005894fbfffc80db006c8085003038a0000138640000388900003b230000386000013b190000801800007c0803a64e800021831b00583980000a3bbdffd47c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002a462d6829092d7000082b8002c92b700248298002892970020827800249277001c825b0068925700188238002092370014821b004c9217001081f8001c91f7000c81db004491d700088158000c91570004398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021393d0004919d00003d0002a4610885f0910900009209001080fb005490e9000c9149000892e9000480ca000880b0001c80850000398000025480f80140a20010800d00347c0803a64e8000217c6c241141a3fff0398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d00003ee002a462f78a1092f9000091590004953bfffc80060008941bfffc3b190000801800007c0803a64e800021831b0000801800007c0803a64e8000213ac30000807b00043b160000801800007c0803a64e80002182bb0060398000073bbdffe07c1df04040a00010800d001c7c0803a64e8000213a9d0004919d00003e6002a462738bcc92740000825b005c92540018823b005492340014821500189214001081fb004c91f4000c81d5000c91d40008815b003491540004812e00088111001c80e800003980000254e0f80140a20010800d00347c0803a64e8000217ccc3c1141a3fff0398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138bd0004919d00003c8002a4608495849085000091c50004969bfffc80090008941bfffc386600003b050000801800007c0803a64e800021831b0000801800007c0803a64e8000213b230000807b00043b190000801800007c0803a64e800021831b006482fb005c82d7003082b60000829800107e8ba838556bf80140a20010800d00347c0803a64e8000217c14a80040800010827b003c3a40000392530000827b003c8253000028120001418200084800011c823b0064821b005c81f0003081cf0000815100107d4b7038556bf80140a20010800d00347c0803a64e8000217c0a7000408100e8813b0068809b00783870000083090014801800007c0803a64e8000212803000141820008480000a4811b006880e8000c80c7000080060048941bfffc386000018306001c801800007c0803a64e80002138a30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000809b007c9083000490a30000831b0000801800007c0803a64e800021807b00608323003083190000398000025700f80140a20010800d00347c0803a64e8000217ef8661541a3fff092f900003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bfffeec813b0058712b000140820090398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138fd0004919d000080db002890c7000438a0000590a70000809b006880bb005c80640010388700003b2300003c6002a36063af403b190000801800007c0803a64e800021398000013bbdfff87c1df04040a00010800d001c7c0803a64e800021391d0004919d000090680000480000083900000180fb004c280700014182004c80db006880a6000c80850000951bfffc807b007c830400b4801800007c0803a64e800021833b006c80bb00603c8002a460846c5883190008801800007c0803a64e80002148000008951bfffc80db004080a60000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d0000809b00009095000490b5000083fb004c480000a0832300002c1900034082001c3b0300003c6002a06063962c800d00287c0803a64e800021831b001c82f8000c82d70000947bfffc807b0030831600b4801800007c0803a64e80002182bb002080bb00143c8002a460846c5883150008801800007c0803a64e800021829b002080bb0008809b001c3c6002a460636c6c83140004801800007c0803a64e800021807b0000800d00287c0803a64e800021807b0074833500009323000083150004930300043860000182fb00707ee803a63b7b00804e800020|@1698,1048575|92,3,$1640+4026 216,3,@1641 252,3,@1642 384,3,@1643 396,3,@227 476,3,@1155 548,3,@1616 560,3,@227 800,3,@1644 812,3,@227 1032,3,@1645 1044,3,@227 1156,3,@1645 1168,3,@227 1316,3,@1646 1432,3,@1649 1568,3,@1651 1668,3,@1654 1776,3,@1656 1844,3,@1658 1984,3,@1662 2084,3,@1665 2168,3,@1668 2316,3,@1672 2648,3,@1675 2768,3,@1677 2888,3,@1679 3000,3,@1682 3124,3,@1685 3264,3,@1695 3800,3,@1329 3928,3,@1641 4040,3,@54 4104,3,@1641 4140,3,@1642 1641:S10|6d657267655374617465 1642:S11|7361766564207374617465 1643:S6|4d61726b6572 1644:S14|4e6f742061207265676973746572 1645:S37|6d657267655374617465202d204d69736d61746368656420726573756c7420737461746573 1646:C2,268|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000882d7000882b800047c6ba838556bf80140a20010800d00347c0803a64e8000217c03a8004180000c3a800003480000083a800001398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a7d0004919d00003e4002a462526e00925300009313000890730004398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a3d0004919d00003e0002a462106e789211000090710004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092830008922300049263000039f8000083160004801800007c0903a67f2803a64e800420|@1277,1048575|124,3,@1647 180,3,@1648 1647:C2,92|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f800043980000256e0f80140a20010800d00347c0803a64e8000217eccbc1141a3fff03876000083180008801800007c0903a67f2803a64e800420|@1275,1048575| 1648:C2,8|807800044e800020|@1275,786433| 1649:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180b80008388300003860000383180004801800007c0903a64e800420|@1650,1048575| 1650:S28|5452414e535f54414228292e6d657267655374617465283729283129 1651:C2,260|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d70008546bf80140a20010800d00347c0803a64e8000212c0300014180000c3aa00003480000083aa00001398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a9d0004919d00003e6002a462737038927400009314000890740004398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a5d0004919d00003e2002a4623170b09232000090720004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a3000892430004928300003a18000083160004801800007c0903a67f2803a64e800420|@1277,1048575|116,3,@1652 172,3,@1653 1652:C2,92|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f800043980000256e0f80140a20010800d00347c0803a64e8000217eccbc1141a3fff03876000083180008801800007c0903a67f2803a64e800420|@1275,1048575| 1653:C2,8|807800044e800020|@1275,786433| 1654:C2,1220|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f800083a7900003a5800003a230000389100008077000c3c0002a36000414c7c0803a64e800021809200143a03000080640000389100003c0002a36000414c7c0803a64e8000212c10000140820010386000017e6803a64e8000202c0300014082002880b200083891000038600001831200043b330000801800007c0903a67f2803a64e8004208330000c572bf80140a20010800d00347c0803a64e8000212c190001418000b882e3000c56ebf80140a20010800d00347c0803a64e8000212c170001418000907f2bbb78556bf80140a20010800d00347c0803a64e8000217c19b80041820070967bfffc82d2000c82b60008398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a9d0004919d00003de002a461ef75b491f400083dc002a061cec7ac91d400048155000091540000812300008103000480e3000838740000800d00287c0803a64e8000213b190000480000088303000c82f000042c170001408200084800001482c300042c160001418200084800029c82d2000c82b600008283000081e30008398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000091e3000481d0000891c30000967bfffc965bfffc963bfffc80100000941bfffc969bfffc83150028801800007c0803a64e8000212803000141820030815b000c80aa0008809b000838600001830a0004833b0010801800007c0903a67f2803a63b7b00144e800420815b0004812a00002c09000340820110811b000080e800002c070003408200d480db000c80a6000c80850000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008328000493230004830a000493030000800a0008941bfffc80080008941bfffc83040024801800007c0803a64e800021280300014182004082fb000482db00007eebb378556bf80140a20010800d00347c0803a64e8000217c17b000408200183860000182bb00187ea803a63b7b001c4e80002082fb001480b70008809b00103860000183170004833b0018801800007c0903a67f2803a63b7b001c4e80042080db000c80a60008809b00083860000183060004833b0010801800007c0903a67f2803a63b7b00144e8004202c09fffb408200b0811b000080e800002c07fffb4082007480ca000480a800047ccb2b78556bf80140a20010800d00347c0803a64e8000217c0628004082001838600001809b00107c8803a63b7b00144e800020809b000c80a4000880640004809b00083b230000386000013b190000833b0010801800007c0903a67f2803a63b7b00144e80042080db000c80a60008809b00083860000183060004833b0010801800007c0903a67f2803a63b7b00144e800420811b000c80a80008809b00083860000183080004833b0010801800007c0903a67f2803a63b7b00144e8004207f2bc378556bf80140a20010800d00347c0803a64e8000217c19c00041820064398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213abd0004919d00009315000c829000089295000892f5000481f0000091f5000038b5000038910000807200103b3300003c0002a36000620c7c0903a67f2803a64e800420386000017e6803a64e800020|@1650,1048575|56,3,@1155 88,3,@1155 312,3,@1655 324,3,@227 1188,3,@1198 1655:S29|6d657267653a206d69736d6174636865642064657374696e6174696f6e 1656:C2,552|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f800083a7900003a5800003a2300008077000c3c0002a36000414c7c0803a64e800021706b0001408201d480830000832400002c19fffb408201b88312000482f8000c82d700183980000256c0f80140a20010800d00347c0803a64e8000217eb6641141a3fff082840004568bf80140a20010800d00347c0803a64e8000212c1400014180000c3a000003480000083a00000156abf80140a20010800d00347c0803a64e8000212c1500014180000c39e000034800000839e000017c1078404082000c3a14000048000098280f00014182004c3980000256a0f80140a20010800d00347c0803a64e8000217e0cac1141a3fff03990ffff7e8b80385560f80140a20010800d00347c0803a64e8000217e0ca41141a3fff0480000483980000256a0f80140a20010800d00347c0803a64e8000217e15661541a3fff03990ffff7e8b80385560f80140a20010800d00347c0803a64e8000217e0ca41141a3fff0967bfffc963bfffc38950000387000003f00000063184e08801800007c0803a64e800021398000025460f80140a20010800d00347c0803a64e8000217de3661541a3fff081db00007deb7038556bf80140a20010800d00347c0803a64e8000217c0f700040810018386f0000815b00047d4803a63b7b00084e800020386e0000815b00047d4803a63b7b00084e800020387100007e6803a64e800020387100007e6803a64e800020|@1657,1048575|52,3,@1155 400,3,I109 1657:S36|5452414e535f54414228292e6d657267655374617465283729676574496e557365283229 1658:C2,80|7f2802a6633900023ae30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003ec002a462d678b892c3000082d8000492c3000892e300047f2803a64e800020|@1661,983041|48,3,@1659 1659:C2,52|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000218098000483180008801800007c0903a64e800420|@1660,1048575| 1660:S39|5452414e535f54414228292e6d657267655374617465283729676574496e557365283129283129 1661:S36|5452414e535f54414228292e6d657267655374617465283729676574496e557365283129 1662:C2,260|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d70008546bf80140a20010800d00347c0803a64e8000212c0300014180000c3aa00003480000083aa00001398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a9d0004919d00003e6002a462737a84927400009314000890740004398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a5d0004919d00003e2002a462317afc9232000090720004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a3000892430004928300003a18000083160004801800007c0903a67f2803a64e800420|@1277,1048575|116,3,@1663 172,3,@1664 1663:C2,92|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f800043980000256e0f80140a20010800d00347c0803a64e8000217eccbc1141a3fff03876000083180008801800007c0903a67f2803a64e800420|@1275,1048575| 1664:C2,8|807800044e800020|@1275,786433| 1665:C2,728|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f800103a7900003a5800003a2300003a040000389000008077000c3c0002a36000414c7c0803a64e8000218092000c39e3000080640000389000003c0002a36000414c7c0803a64e80002171eb00014082025c832f0000831900002c18fffb40820010387100007e6803a64e800020706b00014082022c82e3000082d700002c16fffb4082021082b200048295000c82140018398000025600f80140a20010800d00347c0803a64e8000217c90641141a3fff081d7000455cbf80140a20010800d00347c0803a64e8000212c0e00014180000c394000034800000839400001548bf80140a20010800d00347c0803a64e8000212c0400014180000c3920000348000008392000017c0a48404082000c394e000048000098280900014182004c398000025480f80140a20010800d00347c0803a64e8000217d4c241141a3fff0398affff7dcb50385560f80140a20010800d00347c0803a64e8000217d4c741141a3fff048000048398000025480f80140a20010800d00347c0803a64e8000217d44661541a3fff0398affff7dcb50385560f80140a20010800d00347c0803a64e8000217d4c741141a3fff0967bfffc965bfffc963bfffc386a00003f00000063184e08801800007c0803a64e800021813b00007c6b4838556bf80140a20010800d00347c0803a64e8000217c0348004080000c39030000480000083909000080fb000480c700087d0b3038556bf80140a20010800d00347c0803a64e8000217c0830004080005c80a7000480850008398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003f2002a463397e14932300083f0002a06318c7ac9303000482e4000092e30000800d00287c0803a64e8000213868000080bb00087ca803a63b7b000c4e800020387100007e6803a64e800020387100007e6803a64e800020387100007e6803a64e800020|@1667,1048575|60,3,@1155 92,3,@1155 476,3,I109 628,3,@1666 640,3,@227 1666:S28|6d6572676553746174653a20756e70757368656420656e7472696573 1667:S39|5452414e535f54414228292e6d6572676553746174652837296765744d696e537461636b283229 1668:C2,80|7f2802a6633900023ae30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003ec002a462d67ed492c3000082d8000492c3000892e300047f2803a64e800020|@1671,983041|48,3,@1669 1669:C2,52|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000218098000483180008801800007c0903a64e800420|@1670,1048575| 1670:S42|5452414e535f54414228292e6d6572676553746174652837296765744d696e537461636b283129283129 1671:S39|5452414e535f54414228292e6d6572676553746174652837296765744d696e537461636b283129 1672:C2,260|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d70008546bf80140a20010800d00347c0803a64e8000212c0300014180000c3aa00003480000083aa00001398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a9d0004919d00003e6002a4627380a8927400009314000890740004398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a5d0004919d00003e2002a4623181209232000090720004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a3000892430004928300003a18000083160004801800007c0903a67f2803a64e800420|@1277,1048575|116,3,@1673 172,3,@1674 1673:C2,92|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f800043980000256e0f80140a20010800d00347c0803a64e8000217eccbc1141a3fff03876000083180008801800007c0903a67f2803a64e800420|@1275,1048575| 1674:C2,8|807800044e800020|@1275,786433| 1675:C2,260|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f800083a7900003a5800003a230000389100008077000c3c0002a36000414c7c0803a64e800021809200043a03000080640000389100003c0002a36000414c7c0803a64e800021720b00014082008c83300000831900002c18fffb40820040706b00014082002c82e3000082d700002c16fffb40820010386000017e6803a64e800020386000017e6803a64e800020386000017e6803a64e800020706b00014082002c82e3000082d700002c16fffb40820010386000037e6803a64e800020386000017e6803a64e800020386000017e6803a64e800020386000017e6803a64e800020|@1676,1047555|56,3,@1155 88,3,@1155 1676:S36|5452414e535f54414228292e6d6572676553746174652837296d75737450757368283129 1677:C2,788|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d700003aa30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000829600109283000490830000973bfffc971bfffc96bbfffc949bfffc94bbfffc94dbfffc83160024801800007c0803a64e8000212803000141820050825b001080920018807200108312001c801800007c0803a64e800021823b0010947bfffc80d1001080bb0010388300008071001883110014801800007c0803a64e800021827b000048000140827b0004825300002c12000540820060823b00108211000481f00000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000081db000891c300048153000491430000830f0024801800007c0803a64e800021280300014182000848000060823b00108211000481f00000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000081db000891c30004815b000091430000830f0024801800007c0803a64e80002128030001408200084800002c813b00108109001080880010807b000883090020801800007c0803a64e800021827b00084800004c813b001080bb0008808900188069001083090024801800007c0803a64e800021811b001080c8001080bb000c809b00088068001883080014801800007c0803a64e800021827b0008947bfffc80fb001480c70010809b00108066000c3c0002a36000414c7c0803a64e8000212c0300014082000848000028967bfffc38a60000809b0014386000018307000c801800007c0803a64e80002148000008967bfffc80bb0018398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021389d0004919d0000807b0000906400043b200005932400008305000482f80000398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213add0004919d000082bb002092b6000c8297000c92960008827b002492760004909600008245000838b60000809b001438720000833b001c3c0002a36000620c7c0903a67f2803a63b7b00284e800420|@1678,1048575|548,3,@1155 764,3,@1198 1678:S37|5452414e535f54414228292e6d6572676553746174652837296c6f6164546f526567283629 1679:C2,944|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f800103a7900003a5800003a230000389100008077000c3c0002a36000414c7c0803a64e8000218092000c3a03000080640000389100003c0002a36000414c7c0803a64e800021720b00014082033883300000831900002c18fffb40820010386000017e6803a64e8000202c180003408202ac706b00014082029882e3000082d700002c1600054082003c82b0000496bbfffc8290000c969bfffc80d0000838b900008097000438710000831200043b330000801800007c0903a67f2803a64e8004202c1600034082023c82b90008829700087eaba378556bf80140a20010800d00347c0803a64e8000217c15a00041820068967bfffc81f2000881cf0008398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021395d0004919d00003d2002a4612989bc912a00083d0002a06108c7ac910a000480ee000090ea000080c30008386a0000800d00287c0803a64e80002181f2000881cf000081430008398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000081370004912300048119000491030000967bfffc965bfffc963bfffc973bfffc80100004941bfffc80100008941bfffc8010000c941bfffc955bfffc830e0028801800007c0803a64e800021280300014182011880fb001880c7000880a60000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008085000c90830004833b00009323000083050028801800007c0803a64e800021280300014182000c831b000048000074831b001882f8000882d70000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082b6000c92a30004829b00089283000083160028801800007c0803a64e800021280300014182000c831b000848000014827b0018825300088232000083110010821b001881fb000c81db001c91fb001c815b0004915b001880db000880bb001038980000807b0014831000043b2e0000801800007c0903a67f2803a63b7b00184e8004203860000180fb001c7ce803a63b7b00204e800020386000017e6803a64e800020386000017e6803a64e800020706b00014082005882e3000082d700002c1600054082003c82b0000496bbfffc8290000c969bfffc80d0000838b900008097000438710000831200043b330000801800007c0903a67f2803a64e800420386000017e6803a64e800020386000017e6803a64e800020386000017e6803a64e800020|@1681,1048575|56,3,@1155 88,3,@1155 324,3,@1680 336,3,@227 1680:S25|6d657267653a206d69736d617463686564206f666673657473 1681:S39|5452414e535f54414228292e6d6572676553746174652837296c6f6164456e7472696573283129 1682:C2,260|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d70008546bf80140a20010800d00347c0803a64e8000212c0300014180000c3aa00003480000083aa00001398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a9d0004919d00003e6002a462738b30927400009314000890740004398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a5d0004919d00003e2002a462318ba89232000090720004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a3000892430004928300003a18000083160004801800007c0903a67f2803a64e800420|@1277,1048575|116,3,@1683 172,3,@1684 1683:C2,92|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f800043980000256e0f80140a20010800d00347c0803a64e8000217eccbc1141a3fff03876000083180008801800007c0903a67f2803a64e800420|@1275,1048575| 1684:C2,8|807800044e800020|@1275,786433| 1685:C2,1728|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f800143a7900003a5800003a230000389100008077000c3c0002a36000414c7c0803a64e800021809200183a03000080640000389100003c0002a36000414c7c0803a64e800021720b000140820648706b0001408206348010000c941bfffc80100004941bfffc965bfffc80100000941bfffc963bfffc80100008941bfffc80030008941bfffc833b000c831900002c180005408201a882f2000882d7000082a30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008299000492830004821b000092030000967bfffc96bbfffc969bfffc83160024801800007c0803a64e80002128030001418200183860000181fb00087de803a63b7b00284e80002081fb000481cf00002c0e000540820094815b001c812a000881090000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080ef000490e3000480db000090c3000083080028801800007c0803a64e800021280300014182002880bb001c80850004386000039064000038600001833b00087f2803a63b7b00284e8000203860000180bb00087ca803a63b7b00284e8000202c0efffb40820064815b001c812a000881090008398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002138fd0004919d00003cc002a460c692a890c700083ca002a060a5c7ac90a70004808800009087000038670000800d00287c0803a64e800021815b001c812a000439000003910900003860000180fb00087ce803a63b7b00284e8000202c18fffd408200a082e3000082d700002c16fffd40820030967bfffc386000013b1b001c3c0002a4600092c87c0803a64e80002182bb00007ea803a63b7b00204e800020967bfffc82b2000882950008398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a1d0004919d00003de002a461ef94b891f000083dc002a061cec7ac91d00004815400009150000038700000800d00287c0803a64e8000212c180001408200a082e3000082d700002c16000140820030967bfffc386000013b1b001c3c0002a4600092c87c0803a64e80002182bb00007ea803a63b7b00204e800020967bfffc82b2000882950008398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a1d0004919d00003de002a461ef94d091f000083dc002a061cec7ac91d00004815400009150000038700000800d00287c0803a64e8000212c1800034082019482f2000882d7000082a30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000829b000492830004821b000092030000967bfffc96bbfffc80190004941bfffc83160024801800007c0803a64e80002128030001418200183860000181fb00087de803a63b7b00284e80002081fb000481cf00002c0e0003408200a8815b001c812a000881090000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080ef000490e3000480db000090c3000083080024801800007c0803a64e800021280300014182002c386000013b1b00243c0002a4600092c87c0803a64e80002180bb00087ca803a63b7b00284e80002080bb001c80850004386000039064000038600001833b00087f2803a63b7b00284e800020815b001c812a000881090008398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002138fd0004919d00003cc002a460c694e890c700083ca002a060a5c7ac90a70004808800009087000038670000800d00287c0803a64e8000212c18fffb408200e882e3000082d700002c16fffb408200bc82b90004829700047eaba378556bf80140a20010800d00347c0803a64e8000217c15a0004082000848000064967bfffc8212000881f00008398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002139dd0004919d00003d4002a4614a9508914e00083d2002a06129c7ac912e0004810f0000910e0000386e0000800d00287c0803a64e800021967bfffc386000013b1b001c3c0002a4600092c87c0803a64e800021827b00007e6803a63b7b00204e80002082b200043a80000392950000386000017e6803a63b7b001c4e80002082e3000082d700002c16ffff40820014386000017e6803a63b7b001c4e800020967bfffc82b2000882950008398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a1d0004919d00003de002a461ef953091f000083dc002a061cec7ac91d00004815400009150000038700000800d00287c0803a64e800021386000017e6803a64e800020386000017e6803a64e800020|@1694,1048575|56,3,@1155 88,3,@1155 520,3,@1686 532,3,@227 640,3,@1687 720,3,@1689 732,3,@227 804,3,@1687 884,3,@1690 896,3,@227 1176,3,@1687 1292,3,@1691 1304,3,@227 1456,3,@1692 1468,3,@227 1516,3,@1687 1656,3,@1693 1668,3,@227 1686:S21|6d657267653a20756e70757368656420656e747279 1687:C2,404|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8fff882d7000882b60000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008295000c928300048278ffec92630000973bfffc971bfffc83150028801800007c0803a64e8000212803000141820104825b00008232fff88211000881f00000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000081d2ffe891c300048152ffec91430000830f0028801800007c0803a64e80002128030001418200a8813b00008109fff880e80014808700108069ffec83080010801800007c0803a64e80002180db000080a6fff88085000880640000398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213b3d0004919d0000830600009319000c82e3000c92f9000882c6fffc92d9000482a6fff492b900008285000c38b900008086fff038740000833b00043c0002a36000620c7c0903a67f2803a63b7b00084e80042038600001825b00047e4803a63b7b00084e800020|@1688,1048575|360,3,@1198 1688:S53|5452414e535f54414228292e6d657267655374617465283729636865636b456e7472696573283129666c7573684361636865283129 1689:S16|4c69746572616c206d69736d61746368 1690:S16|436f6465726566206d69736d61746368 1691:S24|6d657267653a206d69736d61746368656420446972656374 1692:S31|6d657267653a206d69736d61746368656420737461636b20656e7472696573 1693:S27|6d657267653a206d69736d61746368656420436f6e7461696e6572 1694:S40|5452414e535f54414228292e6d657267655374617465283729636865636b456e7472696573283129 1695:C2,260|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d70008546bf80140a20010800d00347c0803a64e8000212c0300014180000c3aa00003480000083aa00001398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a9d0004919d00003e6002a4627396a4927400009314000890740004398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a5d0004919d00003e2002a46231971c9232000090720004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a3000892430004928300003a18000083160004801800007c0903a67f2803a64e800420|@1277,1048575|116,3,@1696 172,3,@1697 1696:C2,92|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f800043980000256e0f80140a20010800d00347c0803a64e8000217eccbc1141a3fff03876000083180008801800007c0903a67f2803a64e800420|@1275,1048575| 1697:C2,8|807800044e800020|@1275,786433| 1698:S25|5452414e535f54414228292e6d657267655374617465283729 1699:O2|@1701,@1700 1700:O2|@1703,@1634 1701:C2,72|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e3001096fbfffc80c3000c80a30008808300048063000083180004801800007c0903a64e800420|@1702,1048575| 1702:S24|5452414e535f54414228292e6d657267654c697374283129 1703:C2,192|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc949bfffc94bbfffc2c0300014082000c3b2600004800005c831b000880030004941bfffc82fb001496fbfffc80bb0008809b000c8063000083180004801800007c0803a64e80002138c30000807b00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffff9c831b000482fb001082d8000882b7000492b6000038790000829b000c7e8803a63b7b00144e800020|@1704,1048575| 1704:S24|5452414e535f54414228292e6d657267654c697374283529 1705:O2|@1707,@1706 1706:O6|@1709,@1205,@1510,@1327,@964,@1290 1707:C2,144|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc947bfffc973bfffc38db000480a30008808300048063000083180004801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000833b000493230000831b00089303000482fb00007ee803a63b7b000c4e800020|@1708,1048575| 1708:S26|5452414e535f54414228292e7075736841646472657373283129 1709:C2,372|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc947bfffc949bfffc94bbfffc94dbfffc83180014801800007c0803a64e800021833b000c8319001c82f8000082db001082b60010829500003a630000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000825b00089243000492630000967bfffc96fbfffc8314008c801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a3d0004919d0000821b00049211000439e0000591f1000081db0018947bfffc80bb0018389100003c6002a36063af40830e000c801800007c0803a64e800021815b001c80db001038a30000809b0018807b0014830a0008801800007c0803a64e800021813b001c38a0ffff38830000807b001883090004801800007c0803a64e800021811b000c80fb000090e8000080db000490c800043860000180bb00207ca803a63b7b00244e800020|@1710,1048575|240,3,@1329 1710:S26|5452414e535f54414228292e7075736841646472657373283429 1711:O2|@1713,@1712 1712:O5|@1715,@1075,@1204,@964,@1194 1713:C2,64|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180c3000c80a30008808300048063000083180004801800007c0903a64e800420|@1714,1048575| 1714:S21|5452414e535f54414228292e666978757048283129 1715:C2,464|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc949bfffc94bbfffc94dbfffc80030000941bfffc80030004941bfffc388000013c6002a36063ac1c83180010801800007c0803a64e800021833b000c8319003082fb001092f8000082d900003aa0000192b60000829900143a60000192740000825b00148232000c8211000881f9001c81cf00003980000255c0f80140a20010800d00347c0803a64e8000217d4c741141a3fff0398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021393d0004919d00003d0002a461089e34910900009229000880fb000090e9000480100008941bfffc386a00003b090000801800007c0803a64e800021831b0000801800007c0803a64e80002180db001838a30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003c8002a460849ff890830000833b00109323000883060008930300043b050000801800007c0803a64e80002182fb0018398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082db000c92c3000482bb000892a3000083170004833b001c801800007c0903a67f2803a63b7b00204e800420|@1721,1048575|72,3,@1310 224,3,@1716 336,3,@1719 1716:C2,268|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000882d7000882b800047c6ba838556bf80140a20010800d00347c0803a64e8000217c03a8004180000c3a800003480000083a800001398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a7d0004919d00003e4002a462529f5c925300009313000890730004398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a3d0004919d00003e0002a462109fd49211000090710004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092830008922300049263000039f8000083160004801800007c0903a67f2803a64e800420|@1277,1048575|124,3,@1717 180,3,@1718 1717:C2,92|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f800043980000256e0f80140a20010800d00347c0803a64e8000217eccbc1141a3fff03876000083180008801800007c0903a67f2803a64e800420|@1275,1048575| 1718:C2,8|807800044e800020|@1275,786433| 1719:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180b80008388300003860000183180004801800007c0903a64e800420|@1720,1048575| 1720:S24|5452414e535f54414228292e666978757048283429283129 1721:S21|5452414e535f54414228292e666978757048283429 1722:O1|@1723 1723:C2,32|830300143ae0000392f8000082e300003ac0000392d70000386000014e800020|@1724,983041| 1724:S22|5452414e535f54414228292e65786974696e67283129 1725:O1|@1726 1726:C2,12|83030000807800004e800020|@1542,786433| 1727:O2|@1728,0 1728:O1|@1729 1729:C2,24|280300014082000c386000034e800020386000014e800020|@1730,524289| 1730:S6|4e6f48696e74 1731:O3|@1733,@1736,@1732 1732:O1|@1738 1733:O1|@1734 1734:C2,64|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000213f00000063184d88801800007c0803a64e800021686300027f2803a64e800020|@1735,917505|32,3,I105 1735:S6|557365526567 1736:O1|@1737 1737:C2,60|7f2802a6633900023b030000398000013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d0000930300007f2803a64e800020|@1735,786433| 1738:C2,8|806300004e800020|@1735,524289| 1739:O2|@1741,@1740 1740:O10|@1743,@1145,@964,@1205,@1195,@1327,@1290,@1216,@1366,@1133 1741:C2,88|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e3001096fbfffc82c3001496dbfffc82a3001896bbfffc80c3000c80a30008808300048063000083180004801800007c0903a64e800420|@1742,1048575| 1742:S23|5452414e535f54414228292e62696e6172794f70283129 1743:C2,1336|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182fb0008947bfffc947bfffc3a7900003a5800003a2300003a04000081f70028389100008077000c3c0002a36000414c7c0803a64e8000212c030001408200b0967bfffc8092000880640008965bfffc963bfffc961bfffc94bbfffc94dbfffc95fbfffc80030000941bfffc3880ffff387100003c0002a06000fe6c7c0803a64e800021388300003c6002a36063bc743c0002a1600074a87c0803a64e800021398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213b3d0004919d0000907900083f0002a06318c7ac9319000482fb000092f9000038790000800d00287c0803a64e80002139db0000922e0000395b0000906a0004813b0004947bfffc947bfffc811b0018389000008068000c3c0002a36000414c7c0803a64e8000212c030001408200b8967bfffc80f2000880870008965bfffc963bfffc961bfffc94bbfffc94dbfffc95fbfffc80090000941bfffc80040000941bfffc3880ffff387000003c0002a06000fe6c7c0803a64e800021388300003c6002a36063bc743c0002a1600074a87c0803a64e800021398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213b3d0004919d0000907900083f0002a06318c7ac9319000482fb000092f9000038790000800d00287c0803a64e80002138fb000092070000389b000090640004807b0004965bfffc963bfffc94dbfffc961bfffc94bbfffc8329000082f900002c17fffd408201d082c3000082b600002c15fffd408201208292000881d40000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000815900049143000490c30000967bfffc95fbfffc955bfffc80160004941bfffc830e005c801800007c0803a64e8000212803000141820024807b00043b1b00303c0002a46000a8ac7c0803a64e8000213b03000048000214813b00208109000880e80000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080db000090c3000480bb001090a300008307005c801800007c0803a64e8000212803000141820024807b00003b1b00303c0002a46000ae587c0803a64e8000213b0300004800019c386000013b1b00303c0002a46000b4047c0803a64e8000213b0300004800017c8292000881d40000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000815900049143000490c30000967bfffc95fbfffc955bfffc830e005c801800007c0803a64e8000212803000141820024807b00003b1b002c3c0002a46000a8ac7c0803a64e8000213b03000048000020386000013b1b002c3c0002a46000b4047c0803a64e8000213b030000947bfffc480000dc82c3000082b600002c15fffd408200a08292000881d40000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000815600049143000490a30000967bfffc95fbfffc955bfffc830e005c801800007c0803a64e8000212803000141820024807b00003b1b002c3c0002a46000ae587c0803a64e8000213b0300004800004c386000013b1b002c3c0002a46000b4047c0803a64e8000213b0300004800002c967bfffc95fbfffc386000013b1b00283c0002a46000b4047c0803a64e8000213b030000947bfffc947bfffc829b00082814000141820038825b0020971bfffc80bb00403c8002a46084bdbc3c6000006063466883120004801800007c0803a64e8000213a6300004800000c3a600001971bfffc807b0000827b00107e6803a63b7b00444e800020|@1751,1048575|72,3,@1155 148,3,@316 168,3,@1362 176,3,@511 232,3,@227 308,3,@1155 392,3,@316 412,3,@1362 420,3,@511 476,3,@227 692,3,@1744 812,3,@1746 844,3,@1748 968,3,@1744 1000,3,@1748 1144,3,@1746 1176,3,@1748 1216,3,@1748 1268,3,@1750 1276,3,I48 1744:C2,1376|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc947bfffc82f8fff0973bfffc971bfffc947bfffc3adb000c96dbfffc38c0000180b8ffe48098000c8078000883170020801800007c0803a64e80002182bb00048295000c8275fff0969bfffc80140028941bfffc80940010807b00148313001c801800007c0803a64e800021825b00002812000141820038821b000c81f0fff080bb00043c8002a36084f2303c60000060634668830f0004801800007c0803a64e8000213a230000480000083a200001823b000c947bfffc947bfffc947bfffc821100042c1000014082004481f1fff0809100088071000c830f0018801800007c0803a64e80002139db0000815b0020914e0000393b0000811b00249109000438fb0000906700084800029881f1fff081cf0008814e0000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000813b0020912300048110000091030000951bfffc830a0024801800007c0803a64e80002128030001418201d880fb001c80c7fff080a60008808500008064000828030001418201648327000c973bfffc80190028941bfffc80990010807b002c83060010801800007c0803a64e800021831b0000281800014182003882db002482b6fff080bb00043c8002a4608406103c6000006063466883150004801800007c0803a64e8000213ae30000480000083ae0000182fb0024947bfffc947bfffc82d7fff03abb000096bbfffc38c0000380bb003c8097000c8077000883160020801800007c0803a64e800021829b002c8274000c8254fff080930010807b00008312001c801800007c0803a64e800021823b002c8211000c81f1fff0961bfffc80100028941bfffc80900010807b0008830f001c801800007c0803a64e80002181db0000280e000141820038813b00348109fff080bb00043c8002a36084f2303c6000006063466883080004801800007c0803a64e800021394300004800000839400001395b001c813b0008912a0000391b001c80fb000c90e8000438db001c91260008480000bc8327fff0808700088067000c83190018801800007c0803a64e8000213b1b000482fb002492f800003adb000482bb002892b600043a9b000490740008947bfffc947bfffc947bfffc947bfffc947bfffc947bfffc4800006480fb001c80c7fff080bb0000808700088067000c83060024801800007c0803a64e80002138bb0004809b002490850000387b0004833b0028932300043b1b000482fb000092f80008947bfffc947bfffc947bfffc947bfffc947bfffc947bfffc3b7b001c82db001882b6fff08295000882740000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d00008256000892430010823b00089223000c821b00149203000881fb000091e3000481d6ffe891c3000083130064801800007c0803a64e800021815b0018398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021393d0004919d0000811b00089109000438e0000590e9000080cafff080aa000c388900003c6002a36063af4083060014801800007c0803a64e80002180bb00188085000c8325fff0947bfffc949bfffc80040028941bfffc80840010807b000c83190010801800007c0803a64e800021831b0000281800014182003882db002482b6fff080bb00043c8002a4608406103c6000006063466883150004801800007c0803a64e8000213ae30000480000083ae0000182fb002482d7fff038a0ffff809b00108077000c8316000c801800007c0803a64e80002182bb00248295fff038a0ffff8095ffec8075000c8314000c801800007c0803a64e800021807b0008827b00287e6803a63b7b00344e800020|@1745,1048575|168,3,@1427 176,3,I48 488,3,@1474 496,3,I48 696,3,@1427 704,3,I48 1140,3,@1329 1240,3,@1474 1248,3,I48 1745:S37|5452414e535f54414228292e62696e6172794f7028372967656e42696e6172794952283129 1746:C2,1376|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc947bfffc82f8fff0973bfffc971bfffc947bfffc3adb000c96dbfffc38c0000180b8ffec8098000c8078000883170020801800007c0803a64e80002182bb00048295000c8275fff0969bfffc80140028941bfffc80940010807b00148313001c801800007c0803a64e800021825b00002812000141820038821b000c81f0fff080bb00043c8002a36084f2303c60000060634668830f0004801800007c0803a64e8000213a230000480000083a200001823b000c947bfffc947bfffc947bfffc821100042c1000014082004481f1fff0809100088071000c830f0018801800007c0803a64e80002139db0000815b0020914e0000393b0000811b00249109000438fb0000906700084800029881f1fff081cf0008814e0000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000813b0020912300048110000091030000951bfffc830a0024801800007c0803a64e80002128030001418201d880fb001c80c7fff080a60008808500008064000828030001418201648327000c973bfffc80190028941bfffc80990010807b002c83060010801800007c0803a64e800021831b0000281800014182003882db002482b6fff080bb00043c8002a4608406103c6000006063466883150004801800007c0803a64e8000213ae30000480000083ae0000182fb0024947bfffc947bfffc82d7fff03abb000096bbfffc38c0000380bb003c8097000c8077000883160020801800007c0803a64e800021829b002c8274000c8254fff080930010807b00008312001c801800007c0803a64e800021823b002c8211000c81f1fff0961bfffc80100028941bfffc80900010807b0008830f001c801800007c0803a64e80002181db0000280e000141820038813b00348109fff080bb00043c8002a36084f2303c6000006063466883080004801800007c0803a64e800021394300004800000839400001395b001c813b0008912a0000391b001c80fb000c90e8000438db001c91260008480000bc8327fff0808700088067000c83190018801800007c0803a64e8000213b1b000482fb002492f800003adb000482bb002892b600043a9b000490740008947bfffc947bfffc947bfffc947bfffc947bfffc947bfffc4800006480fb001c80c7fff080bb0000808700088067000c83060024801800007c0803a64e80002138bb0004809b002490850000387b0004833b0028932300043b1b000482fb000092f80008947bfffc947bfffc947bfffc947bfffc947bfffc947bfffc3b7b001c82db001882b6fff08295000882740000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d00008256000892430010823b00089223000c821b00149203000881fb000091e3000481d6ffe091c3000083130064801800007c0803a64e800021815b0018398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021393d0004919d0000811b00089109000438e0000590e9000080cafff080aa000c388900003c6002a36063af4083060014801800007c0803a64e80002180bb00188085000c8325fff0947bfffc949bfffc80040028941bfffc80840010807b000c83190010801800007c0803a64e800021831b0000281800014182003882db002482b6fff080bb00043c8002a4608406103c6000006063466883150004801800007c0803a64e8000213ae30000480000083ae0000182fb002482d7fff038a0ffff809b00108077000c8316000c801800007c0803a64e80002182bb00248295fff038a0ffff8095ffe48075000c8314000c801800007c0803a64e800021807b0008827b00287e6803a63b7b00344e800020|@1747,1048575|168,3,@1427 176,3,I48 488,3,@1474 496,3,I48 696,3,@1427 704,3,I48 1140,3,@1329 1240,3,@1474 1248,3,I48 1747:S37|5452414e535f54414228292e62696e6172794f7028372967656e42696e6172795249283129 1748:C2,2412|7f2802a66339000239600058800d00187d6bd8107c0b004040a00010800d00247c0803a64e800021947bfffc947bfffc82f8fff0973bfffc971bfffc3adb000896dbfffc38c0000180b8ffec8098000c8078000883170020801800007c0803a64e80002182bb00008295000c8275fff0969bfffc80140028941bfffc80940010807b00108313001c801800007c0803a64e800021825b00002812000141820038821b000881f0fff080bb00043c8002a36084f2303c60000060634668830f0004801800007c0803a64e8000213a230000480000083a200001823b0008947bfffc947bfffc8211fff039fb000095fbfffc38c0000180b1ffe48091000c8071000883100020801800007c0803a64e80002181db0010814e000c812efff0955bfffc800a0028941bfffc808a0010807b00088309001c801800007c0803a64e800021811b0000280800014182004480db001880a6fff08085000480bb0004386400003c8002a36084f2303b2300003c600000606346683b190000801800007c0803a64e80002138e300004800000838e0000180fb0018947bfffc947bfffc947bfffc947bfffc947bfffc80c700042c0600014082005c80a7fff0808700088067000c83050018801800007c0803a64e800021389b0000833b0034932400003b1b000082fb003892f800043adb000082bb001c92b600083a9b0000827b00209274000c3a5b0000907200104800055880a7fff0808500088064000083230024398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000831b00349303000482e6000092e3000096fbfffc3b190000801800007c0803a64e800021280300014182021082db003082b6fff082950008827400008253000828120001418201848236000c963bfffc80110028941bfffc80910010807b004083150010801800007c0803a64e800021821b0000281000014182003881db0038814efff080bb00043c8002a4608406103c60000060634668830a0004801800007c0803a64e80002139e300004800000839e0000181fb0038947bfffc947bfffc81cffff0395b0000955bfffc38c0000380bb0050808f000c806f0008830e0020801800007c0803a64e800021813b00408109000c80e9fff080880010807b00008307001c801800007c0803a64e80002180db004080a6000c8086fff094bbfffc80050028941bfffc8064001c808500103b230000807b00083b190000801800007c0803a64e800021831b0000281800014182003882db004882b6fff080bb00043c8002a36084f2303c6000006063466883150004801800007c0803a64e8000213ae30000480000083ae000013afb001c82db000892d700003abb001c829b000c929500043a7b001c825b0038925300083a3b001c821b003c9211000c39fb001c92cf0010480003588236fff0809600088076000c83110018801800007c0803a64e8000213a1b000481fb003891f0000039db0004815b003c914e0004393b0004811b00209109000838fb000480db002490c7000c38bb000490650010947bfffc947bfffc947bfffc947bfffc947bfffc947bfffc480002e882db003082b6fff08295000882740000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000825b002092430004823b00009223000083130024801800007c0803a64e8000212803000141820214821b003081f0fff081cf0008814e0000812a000828090001418201888110000c951bfffc80080028941bfffc80880010807b0028830f0010801800007c0803a64e80002180fb0000280700014182004080bb00388085fff080bb0004806400043c8002a4608406103b2300003c600000606346683b190000801800007c0803a64e80002138c300004800000838c0000180db0038947bfffc947bfffc80a6fff0389b0000949bfffc806600088326000c38c000038305002080bb003838990000801800007c0803a64e80002182fb004082d7000c82b7fff080960010807b00008315001c801800007c0803a64e800021829b00408274000c8254fff0967bfffc80130028941bfffc80930010807b00088312001c801800007c0803a64e800021823b0000281100014182003881fb004881cffff080bb00043c8002a36084f2303c60000060634668830e0004801800007c0803a64e8000213a030000480000083a0000013a1b001c81fb005091f0000039db001c815b0054914e0004393b001c811b00089109000838fb001c80db000c90c7000c38bb001c91050010480000ec8110fff0809000088070000c83080018801800007c0803a64e80002138fb000480db003890c7000038bb0004809b003c908500043b3b0004831b0020931900083afb000482db002492d7000c3abb000490750010947bfffc947bfffc947bfffc947bfffc947bfffc947bfffc4800007c821b003081f0fff080bb0000809000088070000c830f0024801800007c0803a64e80002139db0004815b0038914e0000393b0004811b003c9109000438fb000480db002090c7000838bb0004809b00249085000c387b0004833b000093230010947bfffc947bfffc947bfffc947bfffc947bfffc947bfffc3b7b001c831b002c82f8fff082d7000882b60000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d00008298000892830010827b00109263000c825b000892430008823b0000922300048218ffe09203000083150060801800007c0803a64e80002181fb002c398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002139dd0004919d0000815b0010914e000439200005912e0000810ffff080af000c388e00003c6002a36063af4083080014801800007c0803a64e80002180fb002c80c7000c80a7fff0947bfffc94dbfffc80060028941bfffc80860010807b000c83050010801800007c0803a64e800021809b00002804000141820034833b00388319fff080bb00043c8002a4608406103c6000006063466883180004801800007c0803a64e8000214800000838600001807b00388323000c8303fff0973bfffc80190028941bfffc80990010807b001c83180010801800007c0803a64e80002182fb0000281700014182003882bb00408295fff080bb00043c8002a4608406103c6000006063466883140004801800007c0803a64e8000213ac30000480000083ac0000182db004082b6fff038a0ffff809b00208076000c8315000c801800007c0803a64e800021829b00408274fff038a0ffff809b00188074000c8313000c801800007c0803a64e800021807b0010825b00447e4803a63b7b00504e800020|@1749,1048575|172,3,@1427 180,3,I48 352,3,@1427 364,3,I48 712,3,@1474 720,3,I48 928,3,@1427 936,3,I48 1332,3,@1474 1344,3,I48 1548,3,@1427 1556,3,I48 2064,3,@1329 2164,3,@1474 2172,3,I48 2276,3,@1474 2284,3,I48 1749:S37|5452414e535f54414228292e62696e6172794f7028372967656e42696e6172795252283129 1750:S8|62696e6172794f70 1751:S23|5452414e535f54414228292e62696e6172794f70283729 1752:O2|@1754,@1753 1753:O7|@1756,@1205,@1145,@1195,@964,@1366,@1216 1754:C2,80|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e3001096fbfffc82c3001496dbfffc80c3000c80a30008808300048063000083180004801800007c0903a64e800420|@1755,1048575| 1755:S23|5452414e535f54414228292e61737369676e4f70283129 1756:C2,2092|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc947bfffc82fb000c3a7900003a5800003a2300003a040000389000008077000c3c0002a36000414c7c0803a64e8000212c030001408200ac967bfffc8092001080640008965bfffc963bfffc961bfffc94bbfffc94dbfffc80030000941bfffc3880ffff387000003c0002a06000fe6c7c0803a64e800021388300003c6002a36063bc743c0002a1600074a87c0803a64e800021398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213b3d0004919d0000907900083f0002a06318c7ac9319000482fb000092f9000038790000800d00287c0803a64e80002139fb0000920f000039db0000906e0004815b0004947bfffc947bfffc813b0014388500008069000c3c0002a36000414c7c0803a64e8000212c030001408200b4967bfffc8112001080e80008965bfffc963bfffc961bfffc94bbfffc94dbfffc800a0000941bfffc80070000941bfffc3880ffff386500003c0002a06000fe6c7c0803a64e800021388300003c6002a36063bc743c0002a1600074a87c0803a64e800021398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002138dd0004919d0000906600083ca002a060a5c7ac90a60004809b00009086000038660000800d00287c0803a64e800021391b000090a8000038fb000090670004809b0004947bfffc947bfffc967bfffc965bfffc961bfffc94bbfffc94dbfffc800a0000941bfffc80040000941bfffc387b001c947bfffc38c0000138b1000038890000807b003883120014801800007c0803a64e800021833b0038831b001480190028941bfffc80990010807b002083180018801800007c0803a64e80002182fb0000281700014182003482bb001880bb003c3c8002a36084f2303c6000006063466883150008801800007c0803a64e8000213ac30000480000083ac0000182db001882b600108295000082740004807b000c83130000801800007c0803a64e8000212803000141820018823b00188211001081f0000c824f0018480000083a400003823b0008821100002c10fffd408202e481fb000481cf00002c0efffd408201e4815b0018812a00108109000c965bfffc800f0004941bfffc8071000483080004801800007c0803a64e800021546bf80140a20010800d00347c0803a64e8000212c030001408000343cc002a060c6c2743983ffff7ccb18385560f80140a20010800d00347c0803a64e8000217ce6661541a3fff04800000838e3000080db00043986ffff7ceb30385560f80140a20010800d00347c0803a64e8000217ceb0e707cac5dd741a3ffec38a50001809b00208064001083230000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003b0000019303000882fb001492e3000482db000092c3000094bbfffc83190038801800007c0803a64e800021280300014182009882bb00248295001082740000398000063bbdffe47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000825b0044924300148233000c92230010821b00189203000c81fb002c91e3000881db000091c30004815b0004914300008313003c801800007c0803a64e800021813b002438a0ffff809b001c807b004883090004801800007c0803a64e8000214800001c807b00003b1b00403c0002a46000c6ec7c0803a64e80002182bb002438a0ffff809b0020807b004883150004801800007c0803a64e8000214800029c815b0018812a00108109000c965bfffc8071000483080004801800007c0803a64e800021546bf80140a20010800d00347c0803a64e8000212c030001408000343cc002a060c6c2743983ffff7ccb18385560f80140a20010800d00347c0803a64e8000217ce6661541a3fff04800000838e3000080db00003986ffff7ceb30385560f80140a20010800d00347c0803a64e8000217ceb0e707cac5dd741a3ffec38a50001386500003b1b00383c0002a46000c6ec7c0803a64e800021809b001c38a0ffff80640004809b00183b230000807b00403b190000801800007c0803a64e800021947bfffc947bfffc480001ac81fb000481cf00002c0efffd40820178815b0018812a00108109000080e80004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000038c0000390c3000880a7000490a30004808f000490830000949bfffc83080038801800007c0803a64e80002128030001418200ec947bfffc947bfffc807b00243b3b0000973bfffc38c0000180bb0024809b004c83030014807b0048801800007c0803a64e80002182fb002482d7001082b60000398000063bbdffe47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000829b004492830014827b000092630010825b00189243000c823b002c922300083a0000019203000481fb000891e300008315003c801800007c0803a64e80002181db002438a0ffff809b001c807b0048830e0004801800007c0803a64e800021815b002438a0ffff809b0004807b0048830a0004801800007c0803a64e8000214800004c386000013b1b00383c0002a46000c8407c0803a64e800021947bfffc947bfffc48000028386000013b1b00343c0002a46000c8407c0803a64e800021947bfffc947bfffc947bfffc815b0048813b0024800a0028941bfffc808a0010807b00308309000c801800007c0803a64e800021811b0000280800014182002c80fb002880bb004c3c8002a4608406103c6000006063466883070008801800007c0803a64e80002180fb002880db004c38a0ffff809b00343866000083070004833b002c801800007c0903a67f2803a63b7b00504e800420|@1761,1048575|68,3,@1155 140,3,@316 160,3,@1362 168,3,@511 224,3,@227 300,3,@1155 380,3,@316 400,3,@1362 408,3,@511 464,3,@227 664,3,@1427 672,3,I48 880,3,@180 1236,3,@1757 1352,3,@180 1460,3,@1757 1888,3,@1759 1924,3,@1759 2012,3,@1474 2020,3,I48 1757:C2,260|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc947bfffc82f8ffe4973bfffc971bfffc947bfffc3adb000c96dbfffc38c0000180b8ffdc809800088078000483170014801800007c0803a64e80002182bb00048295ffe48274001082530000398000063bbdffe47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082350004922300148212000c9203001081f5ffd891e3000c81d5ffec91c30008815b000091430004813b000c9123000083120034801800007c0803a64e800021811b000480e8ffe438a0ffff809b00108068000883070004833b0008801800007c0903a67f2803a63b7b00144e800420|@1758,1048575| 1758:S42|5452414e535f54414228292e61737369676e4f7028362973746f72655669615265676973746572283129 1759:C2,568|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc947bfffc82f8ffe4973bfffc971bfffc3adb000896dbfffc38c0000180b8ffe0809800088078000483170014801800007c0803a64e80002182bb0000829500088275ffe4969bfffc80140028941bfffc80940010807b001083130018801800007c0803a64e800021825b00002812000141820038821b000881f0ffe480bb00043c8002a36084f2303c60000060634668830f0008801800007c0803a64e8000213a230000480000083a200001823b0008947bfffc947bfffc8211ffe439fb000095fbfffc38c0000180b1ffdc809100088071000483100014801800007c0803a64e80002181db0010814effe4812a001081090000398000063bbdffe47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080ee000490e3001480db001890c3001080aeffd890a3000c808effec908300083b20000193230004831b00009303000083080034801800007c0803a64e80002182fb001082d7ffe438a0ffff809b00048077000883160004801800007c0803a64e80002182bb0010829500088275ffe4969bfffc80140028941bfffc80940010807b00208313000c801800007c0803a64e800021825b00002812000141820030823b00188211ffe480bb00043c8002a4608406103c6000006063466883100008801800007c0803a64e800021823b00188211ffe438a0ffff809b00248071000883100004833b001c801800007c0903a67f2803a63b7b00284e800420|@1760,1048575|164,3,@1427 172,3,I48 488,3,@1474 496,3,I48 1760:S49|5452414e535f54414228292e61737369676e4f7028362973746f7265496e64657865645669615265676973746572283129 1761:S23|5452414e535f54414228292e61737369676e4f70283629 1762:O2|@1764,@1763 1763:O8|@1766,@1584,@1145,@964,@1205,@1195,@1366,@1216 1764:C2,80|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e3001096fbfffc82c3001496dbfffc80c3000c80a30008808300048063000083180004801800007c0903a64e800420|@1765,1048575| 1765:S31|5452414e535f54414228292e636f6d70617265416e644272616e6368283129 1766:C2,1464|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182fb0004947bfffc947bfffc3a7900003a5800003a2300003a04000081f70028389100008077000c3c0002a36000414c7c0803a64e8000212c030001408200b0967bfffc8092000c80640008965bfffc963bfffc961bfffc94bbfffc94dbfffc95fbfffc80030000941bfffc3880ffff387100003c0002a06000fe6c7c0803a64e800021388300003c6002a36063bc743c0002a1600074a87c0803a64e800021398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213b3d0004919d0000907900083f0002a06318c7ac9319000482fb000092f9000038790000800d00287c0803a64e80002139db0000922e0000395b0000906a0004813b0004947bfffc947bfffc811b0014389000008068000c3c0002a36000414c7c0803a64e8000212c030001408200b8967bfffc80f2000c80870008965bfffc963bfffc961bfffc94bbfffc94dbfffc95fbfffc80090000941bfffc80040000941bfffc3880ffff387000003c0002a06000fe6c7c0803a64e800021388300003c6002a36063bc743c0002a1600074a87c0803a64e800021398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213b3d0004919d0000907900083f0002a06318c7ac9319000482fb000092f9000038790000800d00287c0803a64e80002138fb000092070000389b000090640004807b0004965bfffc963bfffc961bfffc8329000082f900002c17fffd408201f482c3000082b600002c15fffd408201308292000c81d40000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000815900049143000490c30000967bfffc94bbfffc94dbfffc95fbfffc955bfffc80160004941bfffc830e0068801800007c0803a64e8000212803000141820028809b000c807b00043b1b00303c0002a46000d1887c0803a64e8000213b03000048000244813b00208109000c80e80000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080db000090c3000480bb001090a3000083070068801800007c0803a64e8000212803000141820028809b0010807b00003b1b00303c0002a46000d2f47c0803a64e8000213b030000480001c8807b00103b1b00303c0002a46000d4607c0803a64e8000213b030000480001a88292000c81d40000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000815900049143000490c30000967bfffc947bfffc947bfffc95fbfffc94bbfffc94dbfffc955bfffc830e0068801800007c0803a64e8000212803000141820028809b0004807b00003b1b00343c0002a46000d1887c0803a64e8000213b03000048000020807b00083b1b00343c0002a46000d4607c0803a64e8000213b0300003b7b0004480000f482c3000082b600002c15fffd408200b08292000c81d40000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000815600049143000490a30000967bfffc947bfffc947bfffc95fbfffc94bbfffc955bfffc830e0068801800007c0803a64e8000212803000141820028809b0004807b00003b1b00303c0002a46000d2f47c0803a64e8000213b03000048000058807b00043b1b00303c0002a46000d4607c0803a64e8000213b03000048000038967bfffc947bfffc947bfffc95fbfffc386500003b1b00283c0002a46000d4607c0803a64e8000213b030000947bfffc947bfffc829b00082814000141820034827b0020971bfffc80bb003c3c8002a46084d6f83c6000006063466883130008801800007c0803a64e80002148000008971bfffc827b0024809b0038807b003c83130004801800007c0803a64e800021398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a5d0004919d00003a2000019232000890720004821b0000921200003872000081fb00187de803a63b7b00404e800020|@1774,1048575|72,3,@1155 148,3,@316 168,3,@1362 176,3,@511 232,3,@227 308,3,@1155 392,3,@316 412,3,@1362 420,3,@511 476,3,@227 696,3,@1767 820,3,@1769 852,3,@1771 996,3,@1767 1028,3,@1771 1188,3,@1769 1220,3,@1771 1268,3,@1771 1320,3,@1773 1328,3,I48 1767:C2,284|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc947bfffc82f8fff0973bfffc971bfffc947bfffc949bfffc3adb001096dbfffc38c0000180b8ffe8809800088078000483170018801800007c0803a64e80002182bb00088295fff038a0ffff809b00148075000883140010801800007c0803a64e800021827b00088253fff038a0ffff8093ffec8073000883120010801800007c0803a64e800021823b00088211fff081f0000c81cf0000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d0000815100049143000c813b000091230008811b00049103000480fb001090e30000830e007c833b000c801800007c0903a67f2803a63b7b00184e800420|@1768,1048575| 1768:S43|5452414e535f54414228292e636f6d70617265416e644272616e636828362967656e436f6d704952283229 1769:C2,284|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc947bfffc82f8fff0973bfffc971bfffc947bfffc949bfffc3adb001096dbfffc38c0000180b8ffec809800088078000483170018801800007c0803a64e80002182bb00088295fff038a0ffff809b00148075000883140010801800007c0803a64e800021827b00088253fff038a0ffff8093ffe88073000883120010801800007c0803a64e800021823b00088211fff081f0000c81cf0000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d0000815100049143000c813b000091230008811b00049103000480fb001090e30000830e007c833b000c801800007c0903a67f2803a63b7b00184e800420|@1770,1048575| 1770:S43|5452414e535f54414228292e636f6d70617265416e644272616e636828362967656e436f6d705249283229 1771:C2,584|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc947bfffc82f8fff0973bfffc971bfffc947bfffc3adb000c96dbfffc38c0000180b8ffec809800088078000483170018801800007c0803a64e80002182bb0004829500088275fff0969bfffc80140028941bfffc80940010807b00148313001c801800007c0803a64e800021825b00002812000141820038821b000c81f0fff080bb00043c8002a36084f2303c60000060634668830f0008801800007c0803a64e8000213a230000480000083a200001823b000c947bfffc947bfffc8211fff039fb000095fbfffc38c0000180b1ffe8809100088071000483100018801800007c0803a64e80002181db0014814e0008812efff0955bfffc800a0028941bfffc808a0010807b002483090014801800007c0803a64e800021811b0000280800014182004480db001c80a6fff08085000880bb0004386400003c8002a4608406103b2300003c600000606346683b190000801800007c0803a64e80002138e300004800000838e0000180fb001c80c7fff038a0ffff809b00288067000883060010801800007c0803a64e80002180bb001c8085fff08065000838a0ffff83240010809b000c3b190000801800007c0803a64e800021831b001c82f8fff082d7000c82b60000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d0000829800049283000c827b001892630008825b000892430004823b00249223000083150078833b0020801800007c0903a67f2803a63b7b002c4e800420|@1772,1048575|168,3,@1427 176,3,I48 348,3,@1474 360,3,I48 1772:S43|5452414e535f54414228292e636f6d70617265416e644272616e636828362967656e436f6d705252283129 1773:S16|636f6d70617265416e644272616e6368 1774:S31|5452414e535f54414228292e636f6d70617265416e644272616e6368283629 1775:O2|@1776,@1584 1776:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@1777,1048575| 1777:S24|5452414e535f54414228292e736176655374617465283129 1778:O2|@1780,@1779 1779:O3|@1782,@964,@1610 1780:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@1781,1048575| 1781:S24|5452414e535f54414228292e737461727443617365283129 1782:C2,176|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e3001c82d70000973bfffc971bfffc947bfffc949bfffc96dbfffc3aa0000196bbfffc38c000013a85000038a40000388300003874000083180008801800007c0803a64e800021827b0004825300003a200001923200008213001439e0000191f0000081db0008814e0004812a0000807b000083090094833b000c801800007c0903a67f2803a63b7b00104e800420|@1783,1048575| 1783:S24|5452414e535f54414228292e737461727443617365283329 1784:O3|@1785,@964,20 1785:C2,96|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021971bfffc82e30010973bfffc80d7000c80b7000880970004807700003b1b00043c0002a46000d9c47c0803a64e80002182db00007ec803a63b7b00084e800020|@1790,1048575|64,3,@1786 1786:C2,96|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180c40000971bfffc949bfffc94dbfffc947bfffc973bfffc386600003b1b00103c0002a46000da407c0803a64e80002180bb00007ca803a63b7b00144e800020|@1789,1048575|64,3,@1787 1787:C2,484|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021546bf80140a20010800d00347c0803a64e8000212c030001408000084800003082f8fff482d700007c6bb038556bf80140a20010800d00347c0803a64e8000217c03b0004080000848000020973bfffc3ac300003c6002a0606395e0800d00287c0803a64e800021398000025460f80140a20010800d00347c0803a64e8000217ec3661541a3fff056cc083a7eb7602e3af500002c170001408200882c0300014082003482f8000082d7000082b600083980000256a0f80140a20010800d00347c0803a64e8000217e8cac1141a3fff048000024398000025460f80140a20010800d00347c0803a64e8000217e8c1c1141a3fff082f8fffc9297000082d8000082b6000082950004827400008313001c801800007c0903a67f2803a64e8004202c03000140820034827800008253000082320008398000025620f80140a20010800d00347c0803a64e8000217e8c8c1141a3fff048000024398000025460f80140a20010800d00347c0803a64e8000217e8c1c1141a3fff08278fff87e8b9b78556bf80140a20010800d00347c0803a64e8000217c1498004082002082580000823200008211000481f00000806f000c7f2803a64e800020387400007f2803a64bfffe28|@1788,1048575|116,3,@51 1788:S52|5452414e535f54414228292e63686f6f7365526567697374657228312963686f6f736552656728342966696e6446726565283129 1789:S41|5452414e535f54414228292e63686f6f7365526567697374657228312963686f6f7365526567283429 1790:S29|5452414e535f54414228292e63686f6f73655265676973746572283129 1791:O2|@1793,@1792 1792:O2|@1795,@1216 1793:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@1794,1048575| 1794:S24|5452414e535f54414228292e616464526567557365283129 1795:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000213ae40000808300103877000083180004801800007c0903a64e800420|@1796,1048575| 1796:S24|5452414e535f54414228292e616464526567557365283229 1797:O3|@1798,@1382,@964 1798:C2,180|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc38830000386000cf3f00000063185328801800007c0803a64e800021947bfffc833b00048319000882f8000082d700183980000256c0f80140a20010800d00347c0803a64e8000217eacb41141a3fff038950000386000013b1b00083c0002a46000debc7c0803a64e800021829b000483140004833b0008801800007c0903a67f2803a63b7b000c4e800420|@1801,1048575|48,3,I150 132,3,@1799 1799:C2,408|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021548bf80140a20010800d00347c0803a64e8000212c0400014080000c7f2803a64e800020708b00014182000c3ae40000480000403ad800003aa30000386400003f00000063185368801800007c0803a64e8000213ae300008076fff83b030000387500003ab800003b1600004800000882b8fff83ad800003a8300003a64000038970000386000033f00000063185f08801800007c0803a64e8000217ea4183828040001418200a0398000025660f80140a20010800d00347c0803a64e8000217c6c9c1141a3fff08316fffc82f8000882b70000973bfffc96dbfffc969bfffc947bfffc387300008315001c801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a9d0004919d0000827b00049274000490740000809b000038740000831b0008833b000c7f2803a63b7b00104bfffea8398000025660f80140a20010800d00347c0803a64e8000217c6c9c1141a3fff038830000387400003b1600007f2803a64bfffe74|@1800,1048575|96,3,I152 168,3,I245 1800:S42|5452414e535f54414228292e67657452656769737465725365742831296465636f646542697473283229 1801:S29|5452414e535f54414228292e6765745265676973746572536574283129 1802:O2|@1803,@1185 1803:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@1804,1048575| 1804:S26|5452414e535f54414228292e726567536574556e696f6e283129 1805:O2|@1807,@1806 1806:O3|@1809,@1797,@964 1807:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@1808,1048575| 1808:S32|5452414e535f54414228292e67657446756e6374696f6e526567536574283129 1809:C2,460|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc947bfffc3a7900003a5800003a2300008064000c389100003c0002a36000414c7c0803a64e8000212c0300014082009c967bfffc8332000883190008965bfffc80180000941bfffc3880ffff387100003c0002a06000fe6c7c0803a64e800021388300003c6002a36063bc743c0002a1600074a87c0803a64e800021398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213afd0004919d0000907700083ec002a062d6c7ac92d7000482bb000092b7000038770000800d00287c0803a64e8000213b3b0000923900003b1b00009078000482fb000482d7000082b600002c15fffd4082002480760004831200043b330000801800007c0903a67f2803a63b7b00084e8004202c150001408200888292000882340000967bfffc965bfffc8076000483110098801800007c0803a64e800021706b000140820048821b000081f0000881cf000c80100004941bfffc80630000830e0008801800007c0803a64e800021831b0000833b0008801800007c0903a67f2803a63b7b00144e80042038600001821b00047e0803a63b7b00104e800020386000017e6803a63b7b00084e800020|@1810,1048575|60,3,@1155 116,3,@316 136,3,@1362 144,3,@511 200,3,@227 1810:S32|5452414e535f54414228292e67657446756e6374696f6e526567536574283229 1811:O2|@1813,@1812 1812:O2|@1815,@1185 1813:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@1814,1048575| 1814:S32|5452414e535f54414228292e6164644d6f646966696564526567536574283129 1815:C2,100|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e3001082d7000882b60000973bfffc96dbfffc3875000083180004801800007c0803a64e800021829b00009074000038600001827b00047e6803a63b7b00084e800020|@1816,1048575| 1816:S32|5452414e535f54414228292e6164644d6f646966696564526567536574283229 1817:O2|@1818,@964 1818:C2,144|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e3001082d7000882b60000971bfffc96bbfffc829800048274000082530018398000025640f80140a20010800d00347c0803a64e8000217e2c941141a3fff0973bfffc38800001387100003b1b00083c0002a46000e5ec7c0803a64e800021821b00007e0803a63b7b000c4e800020|@1821,1048575|112,3,@1819 1819:C2,540|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021546bf80140a20010800d00347c0803a64e8000212c03000140800010386400007f2803a64e80002082f8000082d7000482b60000973bfffc971bfffc947bfffc949bfffc8315001c801800007c0803a64e800021829b00088274fffc2c13000140820008480000bc947bfffc825300002c1200014082000c3a20000148000098821b000c81f0000081cf0004814e0000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000813b000091230004811200009103000080120004941bfffc830a0024801800007c0803a64e800021280300014182000c3a20000348000028825b00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffff643b7b0004281100014082000c480000a0947bfffc825b0008398000025640f80140a20010800d00347c0803a64e8000217e2c941141a3fff0821b000c81f0000081cf0004814e0000963bfffc38720000830a001c801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021393d0004919d0000811b0008910900049069000038890000807b0000831b0010833b00147f2803a63b7b00184bfffe3080fb00083980000254e0f80140a20010800d00347c0803a64e8000217ccc3c1141a3fff0809b000438660000831b000c833b00107f2803a63b7b00144bfffdf0|@1820,1048575| 1820:S41|5452414e535f54414228292e6765744d6f646966656452656753657428312967657452656773283229 1821:S31|5452414e535f54414228292e6765744d6f6469666564526567536574283129 1822:O3|@1824,@1827,@1823 1823:O1|@1829 1824:O1|@1825 1825:C2,28|83030000281800014082000c386000034e800020386000014e800020|@1826,786433| 1826:S13|417267546f5265676973746572 1827:O1|@1828 1828:C2,68|7f2802a6633900023b030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000930300043b000001930300007f2803a64e800020|@1826,786433| 1829:C2,8|806300044e800020|@1826,524289| 1830:O3|@1832,@1835,@1831 1831:O1|@1837 1832:O1|@1833 1833:C2,32|3b00ffff82e300007c18b8404082000c386000034e800020386000014e800020|@1834,917505| 1834:S10|417267546f537461636b 1835:O1|@1836 1836:C2,68|7f2802a6633900023b030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000930300043b00ffff930300007f2803a64e800020|@1834,786433| 1837:C2,8|806300044e800020|@1834,524289| 1838:O2|@1840,@1839 1839:O2|@1842,@964 1840:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@1841,1048575| 1841:S34|5452414e535f54414228292e6765744c6f6f7044657374696e6174696f6e73283129 1842:C2,76|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021971bfffc949bfffc39d900003b1b00043c0002a46000eb787c0803a64e8000217dc803a63b7b00084e800020|@1848,1048323|48,3,@1843 1843:C2,176|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e8000203a3900003a18000081e30004806300003b1000003c0002a46000ec447c0803a64e800021963bfffc961bfffc947bfffc386f00003b1000004bffff99398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021389d0004919d000090640004807b00009064000038640000833b00087f2803a63b7b000c4e800020|@234,1048067|68,3,@1844 1844:C2,420|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8fffc3a7900003a580000388300008077000c3c0002a36000414c7c0803a64e8000212c03000140820068967bfffc809200008064000483230008398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213b1d0004919d00003ee002a462f7ee0492f800083ec002a062d6c7ac92d8000482b9000092b8000038780000800d00287c0803a64e80002180830000832400002c19fffb40820040398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000083040004930300043ae0ffff92e300007e6803a64e8000202c19000540820040398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000083040004930300043ae0000192e300007e6803a64e800020967bfffc8312000082f8000482d70008398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003e8002a46294ee24929500083e8002a06294c7ac92950004829600009295000038750000800d00287c0803a64e800021|@1847,1044483|52,3,@1155 128,3,@1845 140,3,@227 372,3,@1846 384,3,@227 1845:S21|6765744c6f6f70446573743a206e6f20656e747279 1846:S29|6765744c6f6f70446573743a2077726f6e6720656e7472792074797065 1847:S48|5452414e535f54414228292e6765744c6f6f7044657374696e6174696f6e732832296765744c6f6f7044657374283129 1848:S34|5452414e535f54414228292e6765744c6f6f7044657374696e6174696f6e73283229 1849:O2|@1851,@1850 1850:O3|@1853,@1205,@964 1851:C2,64|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180c3000c80a30008808300048063000083180004801800007c0903a64e800420|@1852,1048575| 1852:S23|5452414e535f54414228292e63616c6c436f6465283129 1853:C2,1196|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc947bfffc3a7900003a5800003a2300003a040000389100008065000c3c0002a36000414c7c0803a64e8000212c030001408200ac967bfffc8092000880640008965bfffc963bfffc961bfffc94bbfffc94dbfffc80030000941bfffc3880ffff387100003c0002a06000fe6c7c0803a64e800021388300003c6002a36063bc743c0002a1600074a87c0803a64e800021398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213b3d0004919d0000907900083f0002a06318c7ac9319000482fb000092f9000038790000800d00287c0803a64e80002139fb0000922f000039db0000906e0004815b0004812a0000810900002c08fffd408200b880f2000880870000806400a083230004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000920300048309000493030000967bfffc965bfffc963bfffc94bbfffc94dbfffc800400ac941bfffc3b190000801800007c0803a64e8000213ae30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082db000492c3000492e30000831b0000801800007c0803a64e800021480002ac2c080001408200f42810000141820064967bfffc80f2000880c70008398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021389d0004919d00003c6002a46063f410906400083f2002a06339c7ac93240004830600009304000038640000800d00287c0803a64e80002180f20008808700008064009c967bfffc965bfffc963bfffc94bbfffc94dbfffc800400ac941bfffc83230004806900043b190000801800007c0803a64e8000213b030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082fb000492e3000493030000831b0000801800007c0803a64e800021480001b42c08000540820148281000014182007080f2000880870000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000083240014932300048309000493030000967bfffc965bfffc963bfffc94bbfffc94dbfffc83040024801800007c0803a64e80002128030001418200784800001c967bfffc965bfffc963bfffc94bbfffc94dbfffc4800005c82fb000c82d7000882b60000829500a4398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000827b0000926300048254000492430000831500ac801800007c0803a64e800021480000c480fb000c80c7000880a60008398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021389d0004919d00003c6002a46063f43c906400083f2002a06339c7ac93240004830500009304000038640000800d00287c0803a64e800021967bfffc80f2000880c70008398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021389d0004919d00003c6002a46063f474906400083f2002a06339c7ac93240004830600009304000038640000800d00287c0803a64e800021947bfffc823b001038a0ffff809b000c807b000883110004833b0014801800007c0903a67f2803a63b7b00204e800420|@1857,1048575|64,3,@1155 136,3,@316 156,3,@1362 164,3,@511 220,3,@227 536,3,@1854 548,3,@227 1004,3,@1855 1016,3,@227 1100,3,@1856 1112,3,@227 1854:S34|63616c6c436f64653a20696e6469726563742063616c6c20746f20636f6465526566 1855:S45|63616c6c436f64653a204e6f7420696e646972656374696f6e207468726f75676820636c6f7375726520726567 1856:S36|63616c6c436f64653a204e6f74206120636f6e7374616e74206f72207265676973746572 1857:S23|5452414e535f54414228292e63616c6c436f6465283429 1858:O3|@1861,@1205,@964 1859:C2,72|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e3001096fbfffc80c3000c80a30008808300048063000083180004801800007c0903a64e800420|@1860,1048575| 1860:S25|5452414e535f54414228292e6a756d70546f436f6465283129 1861:C2,1236|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc947bfffc3a7900003a5800003a2300003a040000389100008066000c3c0002a36000414c7c0803a64e8000212c030001408200ac967bfffc8092000880640008965bfffc963bfffc961bfffc94bbfffc94dbfffc80030000941bfffc3880ffff387100003c0002a06000fe6c7c0803a64e800021388300003c6002a36063bc743c0002a1600074a87c0803a64e800021398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213b3d0004919d0000907900083f0002a06318c7ac9319000482fb000092f9000038790000800d00287c0803a64e80002139fb0000922f000039db0000906e0004815b0004812a0000810900002c08fffd408200c080f2000880870000806400a083230004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000920300048309000493030000967bfffc965bfffc963bfffc94bbfffc94dbfffc800400b0941bfffc3b190000801800007c0803a64e8000213ae30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000082db002092c3000882bb000892a3000492e30000831b0000801800007c0803a64e800021480002cc2c080001408201002810000141820064967bfffc80f2000880a70008398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021389d0004919d00003c6002a46063fa48906400083f2002a06339c7ac93240004830500009304000038640000800d00287c0803a64e80002180f20008808700008064009c967bfffc965bfffc963bfffc947bfffc94dbfffc94bbfffc800400b0941bfffc83230004806900043b190000801800007c0803a64e8000213b030000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000082fb002492e3000882db000492c3000493030000831b0000801800007c0803a64e800021480001c42c08000540820158281000014182007480f2000880870000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000083240014932300048309000493030000967bfffc965bfffc963bfffc947bfffc94dbfffc94bbfffc83040024801800007c0803a64e800021280300014182008448000020967bfffc965bfffc963bfffc947bfffc94dbfffc94bbfffc4800006482fb001082d7000882b60000829500a4398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000827b002092630008825b0000924300048234000492230000831500b0801800007c0803a64e800021480000c480fb001080c7000880a60008398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021389d0004919d00003c6002a46063fa74906400083f2002a06339c7ac93240004830500009304000038640000800d00287c0803a64e800021967bfffc80f2000880a70008398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021389d0004919d00003c6002a46063faac906400083f2002a06339c7ac93240004830500009304000038640000800d00287c0803a64e800021947bfffc3b7b0004821b001038a0ffff809b000c807b000483100004833b0014801800007c0903a67f2803a63b7b00244e800420|@1865,1048575|64,3,@1155 136,3,@316 156,3,@1362 164,3,@511 220,3,@227 544,3,@1862 556,3,@227 1040,3,@1863 1052,3,@227 1136,3,@1864 1148,3,@227 1862:S36|6a756d70546f436f64653a20696e6469726563742063616c6c20746f20636f6465526566 1863:S47|6a756d70546f436f64653a204e6f7420696e646972656374696f6e207468726f75676820636c6f7375726520726567 1864:S38|6a756d70546f436f64653a204e6f74206120636f6e7374616e74206f72207265676973746572 1865:S25|5452414e535f54414228292e6a756d70546f436f6465283529 1866:O1|@1877 1867:O1|@1868 1868:C2,28|8303000082e300047eec0e707d7860ae556b083c616300014e800020|@1127,917505| 1869:O1|@1870 1870:C2,32|80a3000880830004806300003f000000631841c8801800007c0903a64e800420|@1871,917511|12,3,I11 1871:S12|72756e5f63616c6c33283129 1872:O1|@1873 1873:C2,40|8983fffc558c083c6198000173030007280300054082000c386000034e800020386000014e800020|@1874,786433| 1874:S20|416464726573732e697354797065283129283129 1875:O1|@1876 1876:C2,40|8983fffc558c083c6198000173030007280300014082000c386000034e800020386000014e800020|@1874,786433| 1877:C2,28|38830000386000cd3f00000063185328801800007c0903a64e800420|@1878,1048575|8,3,I150 1878:S22|416464726573732e6973496f41646472657373283129 1879:O2|-3,1 1880:C2,2920|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002a562d6083c92d7000082d8000492d7000482b60004973bfffc971bfffc947bfffc949bfffc94bbfffc94dbfffc96fbfffc807b001c83150000801800007c0803a64e800021947bfffc829b00188274000482530000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082320008922300048212001c9203000083120028801800007c0803a64e800021280300014182008c81db0018814e0004812a0004807b000083090030801800007c0803a64e800021811b001880e8000480c7000438a30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003c80001f388484819083000890a30004833b00009323000094bbfffc83060090801800007c0803a64e80002181fb00004800003881fb001881cf0004814e0000808a001c3c60001f386384813b1b001c3c0002a56000091c7c0803a64e80002139e30000947bfffc813b001c8109000480e8000080db003068c5000295fbfffc80870010386500003b1b00243c0002a56000091c7c0803a64e800021809b0020832400048319000082f9000482d800243980000256c0f80140a20010800d00347c0803a64e8000217eb6661541a3fff03a83000080b7001838800081387500003f000000631841c8801800007c0803a64e80002192c30000947bfffc969bfffc386000013b1b002c3c0002a560000b087c0803a64e800021827b0028398000063bbdffe47c1df04040a00010800d001c7c0803a64e8000213a5d0004919d00003e2002a562310cd492320000821b00389212001481fb000891f2001081db002091d2000c8153000491520008813b001091320004398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021391d0004919d00003ce002a560e7108890e8000091c8000c9148000891280004398000043bbdffec7c1df04040a00010800d001c7c0803a64e80002138dd0004919d00003ca002a560a512f090a6000091c6000c9146000891260004398000093bbdffd87c1df04040a00010800d001c7c0803a64e800021389d0004919d00003c6002a5606314d890640000833b001c9324002091c4001c831b003c9304001882fb000092e400149204001082db000492c4000c9144000891240004398000063bbdffe47c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003e8002a562941a54929500009315001492f500109215000c92d50008915500043d804000398c000f3bbdffc07c1df04040a00010800d001c7c0803a64e8000213a3d0004919d00003ce002a560e7283090f1000038a0000190b1000438600001907100083a8000019291000c38e0000190f1001038a0000190b1001438600001907100183a8000019291001c38e0000190f1002038a0000190b1002438600001907100283a8000019291002c38e0000190f1003038a0000190b1003438600001907100383d804000398c00143bbdffac7c1df04040a00010800d001c7c0803a64e8000213a9d0004919d00003ce002a560e792cc90f4000038a0000190b40004386000019074000838e0000190f4000c38a0000190b40010386000019074001438e0000190f4001838a0000190b4001c386000019074002038e0000190f4002438a0000190b40028386000019074002c38e0000190f4003038a0000190b40034386000019074003838e0000190f4003c38a0000190b40040386000019074004438e0000190f4004838a0000190b4004c3d804000398c000a3bbdffd47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003ce002a560e7ce9090e3000038a0000190a3000438e0000190e3000838a0000190a3000c38e0000190e3001038a0000190a3001438e0000190e3001838a0000190a3001c38e0000190e3002038a0000190a300243d804000398c00153bbdffa87c1df04040a00010800d001c7c0803a64e80002138fd0004919d00003ca002a560a5d57890a7000038a0000190a7000438a0000190a7000838a0000190a7000c38a0000190a7001038a0000190a7001438a0000190a7001838a0000190a7001c38a0000190a7002038a0000190a7002438a0000190a7002838a0000190a7002c38a0000190a7003038a0000190a7003438a0000190a7003838a0000190a7003c38a0000190a7004038a0000190a7004438a0000190a7004838a0000190a7004c38a0000190a700503d804000398c00093bbdffd87c1df04040a00010800d001c7c0803a64e80002138bd0004919d00003dc002a661ce500c91c5000039c0000191c5000439c0000191c5000839c0000191c5000c39c0000191c5001039c0000191c5001439c0000191c5001839c0000191c5001c39c0000191c500203d804000398c00033bbdfff07c1df04040a00010800d001c7c0803a64e80002139dd0004919d00003f2002a663397198932e00003b200001932e00043b200001932e0008833b0028398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021393d0004919d00003de002a661ef739891e900009229001081fb002091e9000c81fb001091e9000881f9000491e9000482fb002882d7000492ce0004922e0008398000007d8c0e70998efffc827b001092650004815b0028826a000492650008821b00209205000c821b002883100014930500109225001481fb0028832f001c9325001882ef001892e5001c82db00288276000892650020398000007d8c0e709985fffc815b0028830a000893070004821b0028833000049327000882fb002881f7001491e7000c9067001082d7001892c70014827b00288153001c91470018831b00109307001c831b00209307002092270024831b002882180010920700289107002c833b000093270030833b00409327003481fb004491e7003882fb003c92e7003c82db001892c7004082db00288276002092670044815b003891470048831b00089307004c91c70050398000007d8c0e709987fffc821b002881d0000891c30004831b001093030008831b0028833800049323000c81fb002091e3001091230014922300189243001c81fb002882ef000c92e3002090a30024398000007d8c0e709983fffc80bb002890b4000480bb003090b4000882db001092d4000c827b002882d3000492d40010815b000491540014815b002091540018815b00389154001c821b00009214002081db003c91d40024821b004092140028833b00449334002c831b001893140030831b001c93140034911400389234003c90d4004080db001490d40044831b002880d8000890d4004882fb002881f7001091f4004c398000007d8c0e709994fffc80b7000890b1000482db001092d10008827b002882d3000492d1000c815b0020915100109131001492510018815b002881ca000c91d1001c90f1002090910024929100289071002c92b1003080fb000890f1003491110038398000007d8c0e709991fffc809b00288064000482a30000398000013bbdfff87c1df04040a00010800d001c7c0803a64e8000213a9d0004919d00008235000c92340000965bfffc39000001951bfffc80db001c38a0000138940000807b002c3b090000801800007c0803a64e80002180fb002c80c7000480a60004807b0014830500cc801800007c0803a64e800021280300014082002038600001831b0000801800007c0803a64e800021388300004800000838800001809b002c80640004832300008303000480190034941bfffc807b001883180088801800007c0803a64e80002182fb003082d7000482b60004947bfffc807b001c8315010c801800007c0803a64e8000213a830000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092830008827b000092630004825b002c92430000831b0004833b0038801800007c0903a67f2803a63b7b00544e800420|@2082,1048575|68,3,@1881 316,2,1000000 384,2,1000000 396,3,@1884 456,3,@1884 540,3,I11 580,3,@1886 636,3,@1888 724,3,@1890 784,3,@1892 844,3,@1894 940,3,@1898 1012,3,@1905 1176,3,@1961 1380,3,@2011 1504,3,@2013 1716,3,@2068 1832,3,@2075 1900,3,@2078 1881:C2,104|7f2802a663390002973bfffc8078000482e30008398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002a562b508c092b600083ea002a062b5c7ac92b6000482b7000092b6000038760000800d00287c0803a64e800021|@1883,1015809|56,3,@1882 68,3,@227 1882:S40|636f646567656e3a20756e68616e646c6564207061747465726e2d6d61746368206661696c757265 1883:S34|475f434f444528292e636f646567656e283130296d617463684661696c6564283129 1884:C2,420|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021546bf80140a20010800d00347c0803a64e8000212c0300014081015482f8fffc82d7000482b600043a830000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000908300088278fff4926300048258ffe492430000973bfffc971bfffc969bfffc949bfffc83150004801800007c0803a64e800021823b00088211fffc81f0000481cf0004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000815b0000914300048131ffe491230000830e001c801800007c0803a64e800021811b000880e8fffc80c7000480a60004809b0004398000025480f80140a20010800d00347c0803a64e8000217f2c241141a3fff03b030000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000932300089303000482e8ffe492e30000971bfffc83050090801800007c0803a64e800021807b000082db00107ec803a63b7b00144e80002082f8fffc82d7000482b60004807500187f2803a64e800020|@1885,1048575| 1885:S34|475f434f444528292e636f646567656e283130297265676973746572417267283229 1886:C2,388|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000c7c6bb838556bf80140a20010800d00347c0803a64e8000217c03b8004080013882d8fffc82b6000482950000827400247c6b9838556bf80140a20010800d00347c0803a64e8000217c03980040800108973bfffc971bfffc947bfffc8018ffd8941bfffc83140020801800007c0803a64e8000213883000038600003831b00083c0002a56000091c7c0803a64e800021825b0004564bf80140a20010800d00347c0803a64e8000212c1200014080000848000030823b0000821100007e4b8038556bf80140a20010800d00347c0803a64e8000217c12800040800008480000183c6002a0606395e0800d00287c0803a64e800021398000025640f80140a20010800d00347c0803a64e8000217df2661541a3fff055eb083a7c71592e3a200001398000025640f80140a20010800d00347c0803a64e8000217c72661541a3fff0831b0008833b000c7f2803a63b7b00104bfffe94386000017f2803a64e800020|@1887,1048575|164,3,@1884 260,3,@51 1887:S34|475f434f444528292e636f646567656e283130297075736841726752656773283129 1888:C2,884|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000218078000882e3000082d8001482b700247ecba838556bf80140a20010800d00347c0803a64e8000217c16a8004080000c3a800001480000283995ffff7ecba8385560f80140a20010800d00347c0803a64e8000217e8cb41141a3fff0398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082770008926300048257001c92430000973bfffc971bfffc969bfffc83170028801800007c0803a64e80002128030001418200f0823b00048211000881f0000081d00004800f0038941bfffc80710004830e0084801800007c0803a64e800021398000025460f80140a20010800d00347c0803a64e8000217d4c1c1141a3fff0813b0008398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008109000c9103000491430000831b0000801800007c0803a64e80002180fb000880c7000880a60000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00008087000c90830008833b00049323000483050008930300008305011c801800007c0803a64e8000214800018c823b00048211000881f00004398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d000039c0000191c3000c815100109143000881310004912300048111000c91030000830f0054801800007c0803a64e80002180fb000480c7000880a600048083000083230004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000932300048307000493030000949bfffc8305006c801800007c0803a64e80002182fb000882d7000882b600008296000480150038941bfffc8077000483140084801800007c0803a64e800021827b000c3a430000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008233000c9223000492430000831b0000801800007c0803a64e800021821b000c81f0000881cf0000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00008150000c91430008813b000891230004811b000491030000830e011c801800007c0803a64e8000213b7b000480fb000880c7000880a6000480670004830500c8833b000c801800007c0903a67f2803a63b7b00104e800420|@1889,1048575| 1889:S27|475f434f444528292e636f646567656e2831302965786974283129 1890:C2,544|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002170ab00014082007882d8000882b600043a830000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000082650000926300088258000c924300048238000492230000973bfffc971bfffc969bfffc949bfffc967bfffc83150004801800007c0803a64e80002182fb00004800006c82f8000882d700043aa30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008298000c928300048278000492630000973bfffc971bfffc96bbfffc949bfffc83160008801800007c0803a64e8000213ae30000947bfffc825b000c8232000882110000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d000081f2000c91e3000c92e3000881db000491c30004815b00089143000096fbfffc831000f4801800007c0803a64e800021813b00108109000880e80004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080db000090c3000480a9000490a300008307001c801800007c0803a64e800021809b001083240008831900043ae30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082db000092c3000482a4000492a3000096fbfffc83180050801800007c0803a64e800021807b0000829b00187e8803a63b7b001c4e800020|@1891,1048575| 1891:S33|475f434f444528292e636f646567656e2831302963616c6c676574766563283329 1892:C2,416|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000882d700043aa30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003a8000039283000892a300048278000492630000973bfffc971bfffc96bbfffc949bfffc83160090801800007c0803a64e800021825b00088232000882110004398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d000039e0000191e3000c81db000491c3000881520004914300048132000c9123000083100054801800007c0803a64e800021811b000880e8000880c7000080a3000080830004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000833b0000932300088308000c9303000490a30000949bfffc830600f8801800007c0803a64e80002182fb000c82d7000882b60004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000829b00009283000482770004926300008315006c833b0010801800007c0903a67f2803a63b7b00144e800420|@1893,1048575| 1893:S34|475f434f444528292e636f646567656e283130296c6f636b5365676d656e74283229 1894:C2,1112|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212804000141820300546bf80140a20010800d00347c0803a64e8000212c0300014080020480b800103983ffff7cab18385560f80140a20010800d00347c0803a64e8000217c85661541a3fff082f8000882d7000082b600247c8ba838556bf80140a20010800d00347c0803a64e8000217c04a80040800114548bf80140a20010800d00347c0803a64e8000212c04000140800008480000308078000c828300007c8ba038556bf80140a20010800d00347c0803a64e8000217c04a000408000084800001c973bfffc3c6002a0606395e0800d00287c0803a64e800021398000025480f80140a20010800d00347c0803a64e8000217e84661541a3fff0568c083a7c83602e3a84000028060001418200084800005c82770004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003a40000392430008928300048238000492230000973bfffc969bfffc83130090801800007c0803a64e8000214800000c973bfffc969bfffc807b0000833b00047f2803a63b7b00084e800020829700048277000c82530044398000025640f80140a20010800d00347c0803a64e8000217e32641141a3fff03991ffff7c6b88385560f80140a20010800d00347c0803a64e8000217c6b0e707e0c5dd741a3ffec3a100001398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00009203000481f8000491e3000083140020801800007c0903a67f2803a64e80042082f8000882d700043aa30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a300048298000492830000973bfffc971bfffc94dbfffc83160080801800007c0803a64e800021827b0000281300014182000848000064825b0004823200088211000439e30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000039c0000391c3000891e30004815200049143000095fbfffc83100090801800007c0803a64e80002148000008947bfffc807b0000825b000c7e4803a63b7b00104e800020398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002a562d6194c92d7000082b8000892b7000c829800049297000882780014927700043a430000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00008238001c9223000c9283000892e3000492430000973bfffc971bfffc94dbfffc83180020801800007c0803a64e800021821b0000281000014182007481fb000481cf0018280e000140820064814f0008812a000439030000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000038e0ffff90e3000880cf001490c3000480af000490a30000951bfffc83090090801800007c0803a64e80002148000008947bfffc807b000081fb000c7de803a63b7b00104e800020|@1897,1048575|232,3,@51 840,3,@1895 1895:C2,148|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000c82d70004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003aa0000392a3000882980004928300048278000892630000973bfffc971bfffc83160090801800007c0803a64e800021825b000080720004823b00047e2803a63b7b00084e800020|@1896,1048575| 1896:S37|475f434f444528292e636f646567656e283130296c6f63616464722834296465632d283129 1897:S30|475f434f444528292e636f646567656e283130296c6f6361646472283429 1898:C2,116|7f2802a6633900023ae30000398000083bbdffdc7c1df04040a00010800d001c7c0803a64e800021387d0004919d00003ec002a562d61ae492c3000082d8001492c3001c82b8001092a30018908300148098000c90830010829800089283000c827800049263000892e300047f2803a64e800020|@1904,1040387|48,3,@1899 1899:C2,372|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc947bfffc3ad900003ab800003a83000038a00001388000813860000b3f000000631841c8801800007c0803a64e80002138a0000990a30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021389d0004919d0000906400043860ffff906400003d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213b3d0004919d0000909900003b1b0000933800003afb000038a0000190b70004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021389d0004919d0000807b000090640000833b00049324000496bbfffc969bfffc949bfffc96dbfffc831500042c180001408200183860000182fb00007ee803a63b7b00184e80002080180004941bfffc807800003b1b00183c0002a560001c747c0803a64e800021831b00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffffa4|@1903,1048575|64,3,I11 320,3,@1900 1900:C2,2796|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8fff882d7000882b6001082950050973bfffc971bfffc947bfffc83140000801800007c0803a64e800021280300014182001838600001827b00087e6803a63b7b000c4e800020827b00048253fff8823200088211001081f00010807b0000830f0000801800007c0803a64e800021280300014182005881db0004814efff8812a00088109001080e80010807b000083070008801800007c0803a64e80002180030004941bfffc80630000831b00084bffff31807b0000831b0008833b000c7f2803a63b7b00104bffff2081db0004814efff8812a00088109001080e80034807b000083070000801800007c0803a64e800021280300014182028c80db000480a6fff8808500088064001083230034807b000083190008801800007c0803a64e800021830300042c1800034082020482e3000056ebf80140a20010800d00347c0803a64e8000212c1700014080012882db000482b6fff8829500103997ffff7e8bb8385560f80140a20010800d00347c0803a64e8000217e74661541a3fff08255000882320000821100247e6b8038556bf80140a20010800d00347c0803a64e8000217c138000408000b881e3000c280f0001418200ac566bf80140a20010800d00347c0803a64e8000212c130001408000084800003081d5000c814e00007e6b5038556bf80140a20010800d00347c0803a64e8000217c13500040800008480000183c6002a0606395e0800d00287c0803a64e800021398000025660f80140a20010800d00347c0803a64e8000217d33661541a3fff0552c083a7d0e602e386800008316fff4833b0008801800007c0903a67f2803a63b7b000c4e8004203860000181fb00087de803a63b7b000c4e80002082db00043a7700008243000c389300008076fff03c0002a36000414c7c0803a64e80002128030001408200802812000141820078823b00048211fff881f0000881cf0004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00009263000481500014914300008011fff4941bfffc830e0080801800007c0803a64e800021831b0000833b000c801800007c0903a67f2803a63b7b00104e80042038600001823b00087e2803a63b7b000c4e80002082fb000482d7fff882b6001c28150001408200308283000c2814000141820024807600188317fff4833b0008801800007c0903a67f2803a63b7b000c4e80042038600001829b00087e8803a63b7b000c4e80002080db000480a6fff8808500088064001083230030807b000083190000801800007c0803a64e8000212803000141820098831b000482f8fff882d7000882b6001082950030807b000083140008801800007c0803a64e80002180030000941bfffc80630004831b00084bfffbf5827b00002c1300014082001838600001825b000c7e4803a63b7b00104e80002080130004941bfffc80730000831b000c4bfffbc1827b00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffffb0831b000482f8fff882d7000882b600108295002c807b000083140000801800007c0803a64e8000212803000141820068827b00048253fff8823200088211001081f0002c807b0000830f0008801800007c0803a64e80002181db00048143000438a0000380830000806efff03c0002a36000620c7c0803a64e800021386a00003b0e0000833b00087f2803a63b7b000c4bfffb10827b00048253fff8823200088211001081f00040807b0000830f0000801800007c0803a64e800021280300014182004481db0004814efff8812a00088109001080e80040807b000083070008801800007c0803a64e80002180630000831b0004833b00087f2803a63b7b000c4bfffaa081db0004814efff8812a00088109001080e80058807b000083070000801800007c0803a64e800021280300014182008080db000480a6fff8808500088064001083230058807b000083190008801800007c0803a64e8000212c0300014082001838600001831b00087f0803a63b7b000c4e80002080030004941bfffc80630000831b00084bfffa11807b00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffffb080db000480a6fff8808500088064001083230060807b000083190000801800007c0803a64e8000212803000141820080831b000482f8fff882d7000882b6001082950060807b000083140008801800007c0803a64e8000212c0300014082001838600001827b00087e6803a63b7b000c4e80002080030004941bfffc80630000831b00084bfff965807b00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffffb0831b000482f8fff882d7000882b6001082950014807b000083140000801800007c0803a64e8000212803000141820094827b00048253fff8823200088211001081f00014807b0000830f0008801800007c0803a64e80002180030000941bfffc81c300042c0e0001408200084800003c800e0004941bfffc806e0000831b000c4bfff8bd81db00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffffc0807b0000831b0008833b000c7f2803a63b7b00104bfff888827b00048253fff8823200088211001081f0004c807b0000830f0000801800007c0803a64e800021280300014182008081db0004814efff8812a00088109001080e8004c807b000083070008801800007c0803a64e8000212c030001408200183860000180db00087cc803a63b7b000c4e80002080030004941bfffc80630000831b00084bfff7f9807b00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffffb081db0004814efff8812a00088109001080e8003c807b000083070000801800007c0803a64e80002128030001418200a880db000480a6fff880850008806400108323003c807b000083190008801800007c0803a64e80002180030000941bfffc80030004941bfffc830300082c180001408200084800003c80180004941bfffc80780000831b00104bfff749831b00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffffc0807b0004831b000c4bfff719807b0000831b000c833b00107f2803a63b7b00144bfff70880db000480a6fff8808500088064001083230054807b000083190000801800007c0803a64e80002128030001418201a8831b000482f8fff882d7000882b6001082950054807b000083140008801800007c0803a64e800021947bfffc2c0300014082000848000118827b00088253fff8823200088211001081f0002c80030000941bfffc80030004941bfffc807b0004830f0000801800007c0803a64e800021280300014182005081db0010814efff8812a00088109001080e8002c807b000483070008801800007c0803a64e80002180db001038a00003808300008066fff03c0002a36000620c7c0803a64e8000214800006881db0010814efff8812a000881090008398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002138fd0004919d00003cc002a560c6277c90c700083ca002a060a5c7ac90a70004808800009087000038670000800d00287c0803a64e800021807b00003b7b0008800d00187c1b004040a00010800d00207c0803a64e8000214bfffee4827b00002c1300014082001838600001825b000c7e4803a63b7b00104e80002080130004941bfffc80730000831b000c4bfff551827b00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffffb038600001831b00087f0803a63b7b000c4e800020|@1902,1048575|548,3,@51 680,3,@1155 1236,3,@1198 2532,3,@1198 2604,3,@1901 2616,3,@227 1901:S22|4d757475616c446563733a206e6f74204465636c6172 1902:S47|475f434f444528292e636f646567656e283130296964656e746966794c6f6164732832292831296c6f616473283129 1903:S39|475f434f444528292e636f646567656e283130296964656e746966794c6f616473283229283129 1904:S36|475f434f444528292e636f646567656e283130296964656e746966794c6f616473283229 1905:C2,11268|7f2802a66339000239600054800d00187d6bd8107c0b004040a00010800d00247c0803a64e800021280500014082000c3ae00003480000083ae000016af6000282b8000c8295001082740050973bfffc971bfffc947bfffc949bfffc94bbfffc94dbfffc96dbfffc83130000801800007c0803a64e80002128030001418200b438600001831b0020801800007c0803a64e800021823b00002811000141820078821b001481f0000c81cf0004814e00a4398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000081300004912300048110000891030000800a0004941bfffc830e0024801800007c0803a64e800021831b0000801800007c0803a64e8000213a43000048002ae0821b001481f0000c81cf0004814e00a8824a0004947bfffc48002ac4825b00148232000c8211001081f00010807b0010830f0000801800007c0803a64e800021280300014182032881db0014814e000c812a001081090010807b001083080008801800007c0803a64e80002180fb001480c7000c80a6000480030000941bfffc80030004941bfffc8067000883050094801800007c0803a64e800021809b001c8324000c83190004947bfffc8064000883180094801800007c0803a64e8000213d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ac0000192d7000082bb0020398000053bbdffe87c1df04040a00010800d001c7c0803a64e8000213a9d0004919d00003e6002a562735450927400008255000c92540010823500089234000c821500109214000892f40004947bfffc96fbfffc969bfffc80bb001c809b0020387100008315001c801800007c0803a64e80002181fb002c947bfffc81db003895dbfffc80db000880bb002438830000807b001c830f0014801800007c0803a64e800021815b00202c0a000140820034813b00308109000c80e80004947bfffc80690008830700cc801800007c0803a64e80002128030001408200304800000c947bfffc4800002480bb00343860000183050018801800007c0803a64e80002138c300004800000838c00001813b00348109000c80e80004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000080c9001090c3000880a9000890a30004809b000090830000830700ac801800007c0803a64e800021833b00348319000c82f8000482db000c82b60000829700a83a630000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d0000825b001092430010823400049223000c821900109203000881f9000891e3000492a30000967bfffc831700bc801800007c0803a64e80002181db0038815b0040955bfffc80db004880bb002c809b000c807b0020830e0014801800007c0803a64e800021813b00388109000c80e8000438c30000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d000080bb001890a3001090c3000c80890010908300088329000893230004831b000093030000830700b8801800007c0803a64e8000213a4300004800277081db0014814e000c812a001081090030807b001083080000801800007c0803a64e800021280300014182006480fb001480c7000c80a6001080850030807b001083040008801800007c0803a64e800021833b0014831b0004971bfffc82fb002496fbfffc80db001080bb0014808300008063000483190020801800007c0803a64e8000213a430000480026c080fb001480c7000c80a600108085002c807b001083040000801800007c0803a64e8000212803000141820244807b00148323000c8319001082f8002c807b001083170008801800007c0803a64e80002180030000941bfffc80030004941bfffc80030008941bfffc82db002c96dbfffc3aa0000196bbfffc38c0ffff38a0ffff38800003807b000c831b00284bfffa69829b00208274000c82530004823200a4947bfffc83110000801800007c0803a64e800021280300014182003081fb002481cf000c814e0004812a00a4807b000083090008801800007c0803a64e8000213a03000048000064821b002481f0000c81cf0008398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021395d0004919d00003d2002a56129557c912a00083d0002a06108c7ac910a000480ee000090ea0000386a0000800d00287c0803a64e800021811b002480e8000c80c7001080a60044961bfffc807b000c83050000801800007c0803a64e8000212803000141820044807b00288323000c8319001082f80044807b000c83170008801800007c0803a64e80002182c3001c2c1600014082000c3880000348000010388000014800000838800001807b00288323000c8319000482fb00082c1700014082000c3ac00003480000083ac000016ad500028283000882630010398000063bbdffe47c1df04040a00010800d001c7c0803a64e800021387d0004919d00009083001492a30010825b00109243000c823b00009223000892630004928300008318008c801800007c0803a64e800021821b002881f0000c81cf0004814e00a4807b0000830a0004801800007c0803a64e8000213a43000048002450807b00148323000c8319001082f80034807b001083170000801800007c0803a64e80002128030001418200e882db001482b6000c8295001082740034807b001083130008801800007c0803a64e800021825b001480c3000c80a30008808300048063000083120024801800007c0803a64e800021823b0000281100014182002c821b001481f0000c81cf0004814e00a4830a0004801800007c0803a64e8000213a43000048002394821b001481f0000c81cf000439430000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000914300048130000891230000830e006c801800007c0803a64e800021811b001480e8000c80c7000480a600a8824500044800232c82db001482b6000c8295001082740040807b001083130000801800007c0803a64e80002128030001418201cc825b00148232000c8211001081f00040807b0010830f0008801800007c0803a64e80002181db0014814e000c812a000c8103000480e900443987ffff7d0b38385560f80140a20010800d00347c0803a64e8000217d0b0e707ccc5dd741a3ffec38c6000194dbfffc80bb002494bbfffc38800001949bfffc38c0ffff38a0ffff38800003806300003b0e00004bfff6c1833b00188319000c82f8000482d700a4947bfffc83160000801800007c0803a64e8000212803000141820030829b001c8274000c82530004823200a4807b000083110008801800007c0803a64e8000213aa300004800006482bb001c8295000c82740008398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a5d0004919d00003e2002a56231557c923200083e0002a06210c7ac9212000481f3000091f2000038720000800d00287c0803a64e800021821b001c81f0000c81cf0004814e00a4398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d0000813000089123000c811000109103000892a3000480fb000490e30000800a0004941bfffc830e0064801800007c0803a64e800021831b0000801800007c0803a64e8000213a43000048002134825b00148232000c8211001081f00044807b0010830f0000801800007c0803a64e800021280300014182008081db0014814e000c812a001081090044807b001083080008801800007c0803a64e80002180fb001480c7000c80a60004808500a480040004941bfffc833b0024973bfffc80db001038a000033c8002a56084559c83070028801800007c0803a64e800021831b0000801800007c0803a64e8000213a4300004800208481db0014814e000c812a001081090024807b001083080000801800007c0803a64e800021280300014182009c80fb001480c7000c80a6001080850024807b001083040008801800007c0803a64e800021833b00148319000c82f8000482d700a43aa30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a30004829900089283000080160004941bfffc83170024801800007c0803a64e800021831b0000801800007c0803a64e8000213a43000048001fc080fb001480c7000c80a6001080850020807b001083040000801800007c0803a64e800021280300014182006c807b00148323000c8319001082f80020807b001083170008801800007c0803a64e80002182db001482bb000496bbfffc829b0024969bfffc827b0024967bfffc80db001480a3000880830004806300008316002c801800007c0803a64e8000213a43000048001f28807b00148323000c8319001082f80058807b001083170000801800007c0803a64e800021280300014182004c82db001482b6000c8295001082740058807b001083130008801800007c0803a64e80002138830000807b00083b1b00183c0002a5600055f87c0803a64e8000213a43000048001eb482db001482b6000c8295001082740014807b001083130000801800007c0803a64e8000212803000141820234825b00148232000c8211001081f00014807b0010830f0008801800007c0803a64e80002181db0014814e000c812a000480030000941bfffc80030004941bfffc8009003c941bfffc800e0008941bfffc800e0010941bfffc809b0004807b000c830e0030801800007c0803a64e800021811b002880e8000c80c7000438a30000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d0000808600f89083000c90a30008833b000093230004831b000493030000831b0008801800007c0803a64e800021807b000c3b1b002c3c0002a5600058847c0803a64e80002182fb002882d7000c82b60004947bfffc8077000883150010801800007c0803a64e800021829b002c8274000c82530004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008234000892230004821b00009203000083120118801800007c0803a64e80002181fb002c81cf000c814e0000947bfffc806f0010830a0100801800007c0803a64e800021813b00308109000c80e80004947bfffc8069000883070084801800007c0803a64e800021398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002138dd0004919d000080bb000490a6000890660004809b000090860000398000013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d000090c30000833b0040973bfffc947bfffc80db002c80bb003038800003807b0024831b003c4bfff0c13a43000048001c54825b00148232000c8211001081f0004c807b0010830f0000801800007c0803a64e80002128030001418203e881db0014814e000c812a00108109004c807b001083080008801800007c0803a64e80002180fb001c70eb00014082000c80c700004800006880db001480a6000c80850008398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213b3d0004919d00003f0002a563185dbc931900083ee002a062f7c7ac92f9000482c4000092d900003aa3000038790000800d00287c0803a64e80002180060000941bfffc80060004941bfffc80060008941bfffc809b00003b1b00243c0002a560005de07c0803a64e800021809b00003b1b00243c0002a5600061287c0803a64e800021947bfffc80bb00042c05000140820008480000d8809b00248064000c832300048319011080050000941bfffc80050004941bfffc807b000483180000801800007c0803a64e800021280300014182007882fb002c82d7000c82b6000482950110807b000483140008801800007c0803a64e800021827b002c8253000c823200043a030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00009203000481f3000891e300008311005c801800007c0803a64e80002180bb00003b7b0008800d00187c1b004040a00010800d00207c0803a64e8000214bffff24809b00002c0400014082000848000080807b00248323000c8319000482e30008398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082c4000092c3000492e3000080040004941bfffc8318006c801800007c0803a64e800021809b00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffff7c807b00248323000c8319000082f9000480180038941bfffc8063000883170084801800007c0803a64e80002182db000c3996ffff7c6bb0385560f80140a20010800d00347c0803a64e8000217eac1c1141a3fff0829b0028398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000827400109263000492a30000831b0000801800007c0803a64e800021825b00288232000c82110004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000081f2001091e3000881d2000891c30004815b001091430000831000b0801800007c0803a64e800021813b00142809000141820078811b002880e8000c80c7000480a600a4398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008088000490830004832800089323000080050004941bfffc83060024801800007c0803a64e800021831b0000801800007c0803a64e8000213a43000048001858811b002880e8000c80c7000480a600a882450004947bfffc4800183c81db0014814e000c812a00108109005c807b001083080000801800007c0803a64e800021280300014182030080fb001480c7000c80a600108085005c807b001083040008801800007c0803a64e800021833b00148319000c82f800043ac30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000082b9003492a300088299001092830004827900089263000096dbfffc83170044801800007c0803a64e800021825b0024965bfffc3a200001963bfffc38c0ffff38a0ffff38800003807b0008831b00204bffebd1821b001881f0000c81cf0004814e00a4947bfffc830a0000801800007c0803a64e8000212803000141820030811b001c80e8000c80c7000480a600a4807b000083050008801800007c0803a64e8000213923000048000064813b001c8109000c80e80008398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002138dd0004919d00003ca002a560a5557c90a600083c8002a06084c7ac90860004806700009066000038660000800d00287c0803a64e800021809b001c8064000c8323000483030000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d00003ae0000392e300109123000c82d8000c92c3000882a4000892a3000482840010928300008319004c801800007c0803a64e800021827b001c8253000c82320000947bfffc8073001083110124801800007c0803a64e800021821b002081f0000c81cf0004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000815b0000914300048130000891230000830e006c801800007c0803a64e800021811b002080e8000c80c7000480680008830600c8801800007c0803a64e80002180bb000c2805000141820078809b00208064000c83230004831900a4398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082e4000492e3000482c4000892c3000080180004941bfffc83190024801800007c0803a64e800021831b0000801800007c0803a64e8000213a43000048001528809b00208064000c83230004831900a882580004947bfffc4800150c80fb001480c7000c80a600108085003c807b001083040000801800007c0803a64e800021280300014182072c807b00148323000c8319001082f8003c807b001083170008801800007c0803a64e80002182db001482b6000c82950004398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a7d0004919d000082430008925300048223000092330000963bfffc80030004941bfffc965bfffc8014003c941bfffc80160008941bfffc80160010941bfffc809b00043873000083160030801800007c0803a64e800021821b002c81f0000c81cf000439430000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d0000812e00f89123000c91430008811b00009103000480fb000490e30000831b0008801800007c0803a64e80002180db002c80a6000c80850004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000832400f893230004830600089303000083040108801800007c0803a64e80002182fb002c82d7000c82b600048077000883150084801800007c0803a64e800021829b002c8274000c82530004947bfffc8074000883120094801800007c0803a64e800021823b00308211000c81f0000039c30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008151001091430004812f00189123000095dbfffc830f00f0801800007c0803a64e800021811b003480e8000c80c700048068000883060030801800007c0803a64e80002180bb00348085000c832400043b030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00009303000482e5000892e300008319006c801800007c0803a64e80002182db00143aa000012c1600014082000c3a95000048000058398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a7d0004919d000092b3000482560000925300003ab3000082d60004800d00187c1b004040a00010800d00207c0803a64e8000214bffffa0387400003b1b00383c0002a5600065087c0803a64e8000213a6000012c0300014082000c3a53000048000058398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a3d0004919d00009271000482030000921100003a71000080630004800d00187c1b004040a00010800d00207c0803a64e8000214bffffa0823b00348211000c81f00000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d000081d1001091c30010814f00189143000c812f000891230008810f00149103000480ef007c90e30000965bfffc830f00e8801800007c0803a64e80002180db003880bb0028809b002c806600088306001c801800007c0803a64e80002180bb0038947bfffc809b0044949bfffc80db004c8325001438a0ffff38830000807b00283b190000801800007c0803a64e800021831b003c82f8000c82d7000082b70004947bfffc801600ec941bfffc8078000883150084801800007c0803a64e800021829b00143994ffff7c6ba0385560f80140a20010800d00347c0803a64e8000217e6c1c1141a3fff0398000025660f80140a20010800d00347c0803a64e8000217e4c9c1141a3fff0823b00448211000c81f0000c81cf0044398effff7e4b70385560f80140a20010800d00347c0803a64e8000217e4b0e707d4c5dd741a3ffec394a000181300000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d0000811100109103000c80e9001890e3000880c9001490c3000491430000831b0000801800007c0803a64e80002180bb00342c0500014082004c809b00448064000c8323000480640008831900cc801800007c0803a64e800021280300014082002482fb00443860000183170018801800007c0803a64e8000213b030000480000083b000001809b00448064000c83230004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000830400109303000882e4000892e3000482db000492c30000831900ac801800007c0803a64e80002182bb00448295000c82740004825300a4947bfffc807b000883120000801800007c0803a64e8000212803000141820080821b004881f0000c81cf0004814e00a4807b0008830a0008801800007c0803a64e800021813b00488109000c80e8000438c30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000090c3000480a9000890a300008307006c801800007c0803a64e8000213a230000480000083a200001807b00103b1b004c3c0002a5600068d07c0803a64e800021823b0048821b0050961bfffc80db005880bb003c809b0010807b003083110014801800007c0803a64e80002181fb004881cf000c814e000439230000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d0000811b0014910300109123000c80ef001090e3000880cf000890c3000480bb000090a30000830a00b8801800007c0803a64e8000213a43000048000db4807b00148323000c8319001082f80048807b001083170000801800007c0803a64e80002128030001418200d882db001482b6000c8295000482750000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00008253000c924300088236001092230004821600089203000083140004801800007c0803a64e80002181fb001481cf000c814e0004812a00a4810e0000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080e8000c90e3000480cf000890c3000080090004941bfffc830a001c801800007c0803a64e800021831b0000801800007c0803a64e8000213a43000048000c8482db001482b6000c8295001082740018807b001083130000801800007c0803a64e8000212803000141820248825b00148232000c8211001081f00018807b0010830f0008801800007c0803a64e80002181db0014814e000c812a00108109001c80030000941bfffc80030004941bfffc80030008941bfffc8003000c941bfffc80030010941bfffc807b000083080000801800007c0803a64e80002168670002280300014182007480db00142806000141820068809b00288324000c83190008398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002a562d669e092d700083ea002a062b5c7ac92b7000482980000929700003a63000038770000800d00287c0803a64e80002138a00001947bfffc94fbfffc80db003c94dbfffc38a0000194bbfffc38c0ffff38a0ffff38800003807b0018831b00384bffdfe1809b00308324000c8319000482f800a4947bfffc83170000801800007c0803a64e800021280300014182003082bb00348295000c82740004825300a4807b000083120008801800007c0803a64e8000213ac300004800006482db003482b6000c82950008398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a7d0004919d00003e4002a56252557c925300083e2002a06231c7ac92330004821400009213000038730000800d00287c0803a64e800021823b003496dbfffc80bb0028809b002c807100088311001c801800007c0803a64e800021947bfffc807b00183f0002a5631869fc801800007c0803a64e80002180db002080bb002438830000807b00183b1b00403c0002a560006b3c7c0803a64e8000213a43000048000a10825b00148232000c8211001081f00054807b0010830f0000801800007c0803a64e80002128030001418200b081db0014814e000c812a001081090054807b001083080008801800007c0803a64e80002180fb0014398000073bbdffe07c1df04040a00010800d001c7c0803a64e80002138dd0004919d00003ca002a560a582e490a6000090e600188087000c908600148327000893260010830700109306000c82fb002092e6000882c7002892c600043b060000801800007c0803a64e80002182bb00148295000c82740004825300a8825200044800091081db0014814e000c812a001081090060807b001083080000801800007c0803a64e800021280300014182017480fb001480c7000c80a6001080850060807b001083040008801800007c0803a64e800021947bfffc3b2000012c0300014082000c3b19000048000048398000025720f80140a20010800d00347c0803a64e8000217ef9661541a3fff0806300043b370000800d00187c1b004040a00010800d00207c0803a64e8000214bffffb02c1800014082007882fb001882d7000c82b60004829500a4398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008277000492630004825700089243000080140004941bfffc83150024801800007c0803a64e800021831b0000801800007c0803a64e8000213a430000480007e4971bfffc809b0004386000013b1b00203c0002a5600088307c0803a64e80002182fb001c82d7000c82b60000947bfffc80770010831500fc801800007c0803a64e800021829b00208274000c82530004823200a4807b000083110004801800007c0803a64e8000213a4300003b7b00044800077080fb001480c7000c80a6001080850028807b001083040000801800007c0803a64e80002128030001418200a4807b00148323000c8319001082f80028807b001083170008801800007c0803a64e80002182db001482b6000c82950004827400a43a430000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000924300088236001092230004821600089203000080130004941bfffc83140048801800007c0803a64e800021831b0000801800007c0803a64e8000213a430000480006a0807b00148323000c8319001082f80064807b001083170000801800007c0803a64e80002128030001418203b482db001482b6000c8295001082740064807b001083130008801800007c0803a64e80002180030000941bfffc80030004941bfffc825b0028965bfffc3a200001963bfffc38c0ffff38a0ffff3880000380630008831b00244bffdaf5821b001c81f0000c81cf0004814e00a4947bfffc830a0000801800007c0803a64e8000212803000141820030811b002080e8000c80c7000480a600a4807b000083050008801800007c0803a64e8000213923000048000064813b00208109000c80e80008398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002138dd0004919d00003ca002a560a5557c90a600083c8002a06084c7ac90860004806700009066000038660000800d00287c0803a64e800021809b00208064000c8323001083190060953bfffc807b000883180000801800007c0803a64e800021280300014182008482fb002482d7000c82b6001082950060807b000883140008801800007c0803a64e8000213a6000012c030001408200084800015080030004941bfffc38930000806300003b1b002c3c0002a560008ad07c0803a64e8000213a630000807b00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffffac82fb003096fbfffc3ac0000196dbfffc38c0ffff38a0ffff38800003807b0010831b002c4bffd96582bb00248295000c82740004825300a4947bfffc83120000801800007c0803a64e8000212803000141820030821b002881f0000c81cf0004814e00a4807b0000830a0008801800007c0803a64e8000213a23000048000064823b00288211000c81f00008398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002139dd0004919d00003d4002a5614a557c914e00083d2002a06129c7ac912e0004810f0000910e0000386e0000800d00287c0803a64e800021963bfffc386000013b1b00303c0002a560008d047c0803a64e8000213b7b0008813b00248109000c80e80004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080db000090c3000480a9000890a300008307006c801800007c0803a64e800021809b00182c0400014082001c807b00248323000c8319000482f800a88257000448000338807b00248323000c8319000482f800a482c3000882a30004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a3000492c3000080170004941bfffc83180024801800007c0803a64e800021831b0000801800007c0803a64e8000213a4300003b7b0004480002c082db001482b6000c8295001082740068807b001083130000801800007c0803a64e8000212803000141820184825b00148232000c8211001081f00068807b0010830f0008801800007c0803a64e80002180030004941bfffc81db002495dbfffc39400001955bfffc38c0ffff38a0ffff3880000380630000831b00204bffd721813b00188109000c80e8000480c700a4947bfffc83060000801800007c0803a64e8000212803000141820030809b001c8064000c83230004831900a4807b000083180008801800007c0803a64e80002138a300004800006480bb001c8085000c80640008398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213b3d0004919d00003f0002a56318557c931900083ee002a062f7c7ac92f9000482c3000092d9000038790000800d00287c0803a64e80002182fb001c82d7000c82b6000c94bbfffc80bb001480950028807b000883170038801800007c0803a64e800021947bfffc386000013b1b00283c0002a560008fbc7c0803a64e800021829b00248274000c82530004823200a4807b000083110004801800007c0803a64e8000213a43000048000114825b00148232000c8211001081f0001c807b0010830f0000801800007c0803a64e800021280300014182006481db0014814e000c812a0008398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021391d0004919d00003ce002a560e7924090e800083cc002a060c6c7ac90c8000480a9000090a8000038680000800d00287c0803a64e80002181db0014814e000c812a001081090038807b001083080008801800007c0803a64e80002180fb001480c7000c80a60008398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021389d0004919d00003c6002a560639274906400083f2002a06339c7ac93240004830500009304000038640000800d00287c0803a64e8000213b7b000c947bfffc3b7b0008947bfffc947bfffc947bfffc947bfffc947bfffc947bfffc947bfffc947bfffc947bfffc947bfffc3b7b0024947bfffc947bfffc947bfffc947bfffc947bfffc947bfffc947bfffc947bfffc947bfffc947bfffc947bfffc947bfffc3b7b0024947bfffc947bfffc947bfffc947bfffc3b7b0020947bfffc947bfffc947bfffc3b7b000c947bfffc947bfffc947bfffc947bfffc947bfffc3b7b0014947bfffc947bfffc947bfffc947bfffc947bfffc947bfffc947bfffc947bfffc947bfffc3b7b002038720000821b001c7e0803a63b7b00284e800020|@1960,1048575|556,3,@1906 1572,3,@1908 1584,3,@227 2508,3,@1908 2520,3,@227 2804,3,@1909 3288,3,@1912 3572,3,@1914 4064,3,@1919 4076,3,@227 4148,3,@1920 4172,3,@1925 5308,3,@1908 5320,3,@227 6532,3,@1928 7468,3,@1931 8124,3,@1932 8136,3,@227 8364,3,@1908 8376,3,@227 8456,3,@1933 8496,3,@1936 8640,3,@1946 9048,3,@1951 9624,3,@1908 9636,3,@227 9792,3,@1953 10024,3,@1908 10036,3,@227 10084,3,@1955 10604,3,@1908 10616,3,@227 10708,3,@1957 10860,3,@1958 10872,3,@227 10992,3,@1959 11004,3,@227 1906:C2,208|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8001082d7000482b600a8398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000082980008928300088278000c926300048255000492430000973bfffc971bfffc831600ac801800007c0803a64e800021823b00008211000481f00000398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002139dd0004919d000091ee0004906e000091d0000038600001815b00047d4803a63b7b00084e800020|@1907,1048575| 1907:S53|475f434f444528292e636f646567656e2831302967656e636465283629726573756c742d6e65774d617463684661696c466e283129 1908:S21|67656e546f537461636b3a206e6f20726573756c74 1909:O1|@1910 1910:C2,8|386000014e800020|@1911,524289| 1911:S39|475f434f444528292e636f646567656e2831302967656e636465283629726573756c742d283129 1912:C2,568|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c040001408200a48098ffe828040001418200808078fffc82e3000c82d7000482b600a48283000882630004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00009263000492830000973bfffc80150004941bfffc83160024801800007c0803a64e800021831b0000833b0004801800007c0903a67f2803a63b7b00084e8004208078fffc82e3000c82d7000482b600a8807500044e80002082f8fffc82d7000c82b600108295002c973bfffc971bfffc947bfffc949bfffc80040000941bfffc807b000083140000801800007c0803a64e8000212803000141820088827b000c8253fffc8232000c8211001081f0002c807b0000830f0008801800007c0803a64e80002181db0004815b000c800e0004941bfffc812a0008953bfffc810a0004951bfffc38c0ffff38a0000138800003807b000c830afffc801800007c0803a64e800021809b0000807b000c831b0010833b00147f2803a63b7b00184bfffe7c827b0004825300042c12000140820048823b000c8211000881fb0010921b001081d1000491db000c80d1ffec80bb000838800003807b00008311fffc3b2f0000801800007c0903a67f2803a63b7b000c4e800420823b000c965bfffc82110008961bfffc81f1000495fbfffc38c0ffff38a0000138800003807b000c8311fffc801800007c0803a64e800021809b0000807b000c831b0010833b00147f2803a63b7b00184bfffdd4|@1913,1048575| 1913:S47|475f434f444528292e636f646567656e2831302967656e636465283629726573756c742d636f64654c697374283229 1914:C2,168|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e800020973bfffc971bfffc80030004941bfffc806300003c0002a5600059487c0803a64e800021947bfffc807b0004831b00084bffffa1398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b0000931900003879000082fb000c7ee803a63b7b00104e800020|@234,1048575|68,3,@1915 1915:C2,972|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8fffc82d7000c82b600108295002c973bfffc971bfffc947bfffc83140000801800007c0803a64e8000212803000141820318827b00048253fffc8232000c8211001081f0002c807b0000830f0008801800007c0803a64e80002181db000480030000941bfffc80030004941bfffc80030008941bfffc814e0008955bfffc39200001953bfffc38c0ffff38a0ffff38800003807b000c830efffc801800007c0803a64e800021811b001080e8fffc80c7000c80a60004808500a4947bfffc83040000801800007c0803a64e8000212803000141820030833b00148319fffc82f8000c82d7000482b600a4807b000083150008801800007c0803a64e80002148000068807b00148323fffc8319000c82f80008398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002a562b5557c92b600083e8002a06294c7ac92960004827700009276000038760000800d00287c0803a64e800021829b00148274fffc8253000c823200043a030000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d000039e0000391e3000c9203000881d3000891c30004815300109143000083110054801800007c0803a64e800021813b00148109fffc80e8000c80c7001080a6004480030004941bfffc807b000c83050000801800007c0803a64e80002128030001418200a4807b00188323fffc8319000c82f8001082d70044807b000c83160008801800007c0803a64e80002182a3001c2c15000140820068829b00188274fffc8253000c82320008398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a1d0004919d00003de002a561ef5d3091f000083dc002a061cec7ac91d00004815100009150000038700000800d00287c0803a64e800021388000014800000838800001809b00188064fffc8323000c8319000482fb00082c1700014082000c3ac00003480000083ac000016ad500028283000882630010398000063bbdffe47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003a4000019243001492a30010823b00109223000c821b00009203000892630004928300008318008c801800007c0803a64e800021807b000081fb001c7de803a63b7b00204e800020827b00048253fffc8232000c82110008398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002139fd0004919d00003dc002a561ce5d5891cf00083d4002a0614ac7ac914f000481300000912f0000386f0000800d00287c0803a64e800021|@1918,1048575|344,3,@1908 356,3,@227 652,3,@1916 664,3,@227 924,3,@1917 936,3,@227 1916:S29|4c6f6f704172673a20737461746963206c696e6b2066756e6374696f6e 1917:S29|67656e4c6f6f704172673a206e6f742061206465636c61726174696f6e 1918:S49|475f434f444528292e636f646567656e2831302967656e636465283629726573756c742d67656e4c6f6f70417267283129 1919:S27|4e6f20426567696e4c6f6f7020666f72204c6f6f7020696e737472 1920:C2,200|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021706b00014082009c708b00014082008c973bfffc971bfffc80030004941bfffc80040004941bfffc80840000806300003c0002a560005ec47c0803a64e800021947bfffc809b0004807b0008831b000c4bffff91398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b0000931900003879000082fb00107ee803a63b7b00144e800020386000014e800020386000014e800020|@1924,1048575|80,3,@1921 1921:C2,476|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8fffc82d7000c82b6000482950110973bfffc971bfffc947bfffc949bfffc3864000083140000801800007c0803a64e8000212803000141820058825b00088232fffc8211000c81f0000481cf0110807b0000830e0008801800007c0803a64e800021398000013bbdfff87c1df04040a00010800d001c7c0803a64e8000213a7d0004919d00009073000048000030827b00088253fffc8232000c8211000481f00114807b0000830f0008801800007c0803a64e8000213a60ffff81db0008814e0008955bfffc39200001953bfffc38c0ffff38b3000038800003807b000c830efffc801800007c0803a64e800021811b000880e8fffc80c7000c80a60004808500a4947bfffc83040000801800007c0803a64e800021280300014182003c807b000c8323fffc8319000c82f8000482d700a4807b000083160008801800007c0803a64e80002182bb00107ea803a63b7b00144e800020807b000c8323fffc8319000c82f80008398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002a562b560bc92b600083e8002a06294c7ac92960004827700009276000038760000800d00287c0803a64e800021|@1923,1048575|428,3,@1922 440,3,@227 1922:S18|6576616c4172673a206e6f20726573756c74 1923:S46|475f434f444528292e636f646567656e2831302967656e636465283629726573756c742d6576616c417267283229 1924:S15|4c697374506169722e6d6170283329 1925:C2,868|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c030001408200782c0400014082000c386000014e800020973bfffc8098fffc8064000c82e30008398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002a562b564a892b600083ea002a062b5c7ac92b6000482b7000092b6000038760000800d00287c0803a64e800021708b00014082026082f8fffc82d7000c82b6000482950110973bfffc971bfffc949bfffc80030000941bfffc80030004941bfffc80040000941bfffc807b000083140000801800007c0803a64e800021280300014182015c827b00108253fffc8232000c8211000481f00110807b0000830f0008801800007c0803a64e80002181db000c947bfffc808e0004807b0008831b00144bfffed1815b0014812afffc8109000c80e8000438c30000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d000038a0000190a30010809b000c9083000c833b000093230008830900089303000482e9001092e3000094dbfffc8307004c801800007c0803a64e80002182db001882b6fffc8295000c827400043a430000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000823b0004922300048215000892030000965bfffc83130058801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002139fd0004919d000081db000491cf0004815b0000914f0000386f0000813b00207d2803a63b7b00244e800020827b00108253fffc8232000c8211000481f00114807b0000830f0008801800007c0803a64e80002181db000c815b0010812afffc8109000c80e8000438c30000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d000090c3000c80bb000890a3000880890008908300048329001093230000800e0004941bfffc83070078801800007c0803a64e800021809b0000807b0008831b0014833b00187f2803a63b7b001c4bfffd0c973bfffc82f8fffc82d7000c82b60008398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a9d0004919d00003e6002a5627364a8927400083e4002a06252c7ac92540004823500009234000038740000800d00287c0803a64e800021|@1927,1048575|108,3,@1926 120,3,@227 820,3,@1926 832,3,@227 1926:S30|6d6f7665417267733a204d69736d61746368656420617267756d656e7473 1927:S47|475f434f444528292e636f646567656e2831302967656e636465283629726573756c742d6d6f766541726773283229 1928:C2,168|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e800020973bfffc971bfffc80030004941bfffc806300003c0002a5600065cc7c0803a64e800021947bfffc807b0004831b00084bffffa1398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b0000931900003879000082fb000c7ee803a63b7b00104e800020|@234,1048575|68,3,@1929 1929:C2,688|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8fffc82d7000c82b60004973bfffc971bfffc947bfffc8077000883150084801800007c0803a64e800021829b00048274fffc8253000c82320004398000025460f80140a20010800d00347c0803a64e8000217e03661541a3fff039e30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00009203000881d3001091c30004815300089143000095fbfffc831100c0801800007c0803a64e800021813b0008947bfffc81090008951bfffc38e0000194fbfffc38c0ffff38a0ffff38800003807b00108309fffc801800007c0803a64e80002180db000c80a6fffc8085000c83240004831900a4947bfffc83180000801800007c0803a64e800021280300014182003482db001082b6fffc8295000c82740004825300a4807b000083120008801800007c0803a64e8000213ae300004800006882fb001082d7fffc82b6000c82950008398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a7d0004919d00003e4002a56252557c925300083e2002a06231c7ac92330004821400009213000038730000800d00287c0803a64e800021823b00108211fffc81f0000c81cf0004815b0008398000045540f80140a20010800d00347c0803a64e8000217d2a661541a3fff0398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00009123000c92e30008811000089103000480f0001090e30000830e0074801800007c0803a64e80002180db001080a6fffc8085000c832400043b030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00009303000482e5000892e300008319006c801800007c0803a64e800021807b000482db00147ec803a63b7b00184e800020|@1930,1048575|408,3,@1908 420,3,@227 1930:S45|475f434f444528292e636f646567656e2831302967656e636465283629726573756c742d67656e546167283129 1931:C2,244|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e80002082f8fffc82d7000c82b600048283000082630004398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d0000825700109243000c82370008922300088218ffcc9203000492830000973bfffc971bfffc967bfffc831500c4801800007c0803a64e800021947bfffc807b0004831b00084bffff55398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002139fd0004919d0000906f000481db000091cf0000386f0000815b000c7d4803a63b7b00104e800020|@234,1048575| 1932:S17|43617365202d206e6f2064656661756c74 1933:O1|@1934 1934:C2,224|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e80002083030000973bfffc80030004941bfffc3ae0000182d800042c1600014082000c3ab70000480000483980000256e0f80140a20010800d00347c0803a64e8000217c77661541a3fff082d600043ae30000800d00187c1b004040a00010800d00207c0803a64e8000214bffffb096bbfffc807b00044bffff5d833b00003983ffff7f2b18385560f80140a20010800d00347c0803a64e8000217c79661541a3fff0831b00087f0803a63b7b000c4e800020|@1935,1015809| 1935:S49|475f434f444528292e636f646567656e2831302967656e636465283629726573756c742d636f756e744361736573283129 1936:C2,3136|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082005c80d8ffcc280600014182003880b8fffc80980004949bfffc80d800088065001480b8ffec8098ffc03ae300008078ffd43b170000801800007c0903a64e80042080b8fffc8085000c8064000482e300a8807700044e80002082f8fffc82d7000c82b600008283000082630004398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00008258ffd09243000c9083000890a3000490c30000973bfffc971bfffc949bfffc94bbfffc94dbfffc969bfffc967bfffc8315012c801800007c0803a64e800021280300014182067c823b00148211fffc81f0000c81cf000480700008830e0094801800007c0803a64e800021815b0014812afffc8109000c80e8000438c30000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d000038a0000390a3000c808affc4908300088329000893230004830900109303000094dbfffc83070054801800007c0803a64e80002182fb001882d7fffc82b6000c829500048263000082430004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000924300048236000892230000967bfffc8314006c801800007c0803a64e800021821b001c81f0fffc81cf000c814e0004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000813b000091230004810f000891030000830a0058801800007c0803a64e80002180fb001c80c7fffc80a6000c80850004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008326001093230004830600089303000083040008801800007c0803a64e80002182fb001c82d7fffc82b6000c829500043a630000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000926300048256000892430000967bfffc8314000c801800007c0803a64e800021823b00208211fffc81f0000c81cf0004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000815b0004914300048130000891230000830e005c801800007c0803a64e800021811b002080e8fffc80c7000c80a60000398000063bbdffe47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080870010908300148328ffd093230010831b00189303000c82fb001492e3000882db000092c3000482bb000492a3000083050130801800007c0803a64e800021829b00208274fffc8253000c823200043a030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000081f3001091e3000481d3000891c30000961bfffc831100e4801800007c0803a64e800021815b0024812afffc8109000c80e8000438c30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000090c3000880a9001090a30004808900089083000094dbfffc830700e8801800007c0803a64e800021833b00288319ffcc28180001418201c082d9fffc947bfffc82b9000496bbfffc80d9000880b9ffec8099ffc08079ffd483160014801800007c0803a64e800021829b002c8274ffec28130001408200348254fffc8232000c82110004947bfffc80720008831000cc801800007c0803a64e80002128030001408200344800000c947bfffc4800002881db0030814efffc38600001830a0018801800007c0803a64e80002139e300004800000839e00001825b00308232fffc8211000c81f00004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000081d1001091c300088151000891430004813b000091230000830f00ac801800007c0803a64e800021811b003080e8fffc80c7000c80a60004808500a4947bfffc807b000483040000801800007c0803a64e8000212803000141820084833b00348319fffc82f8000c82d7000482b600a4807b000483150008801800007c0803a64e800021829b00348274fffc8253000c823200043a030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00009203000481f3000891e300008311006c801800007c0803a64e800021480000083860000182fb00004800007482f9fffc82d7000c82b60004829500a83a630000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000825700109243000882370008922300048214000492030000967bfffc831500ac801800007c0803a64e8000213ae30000947bfffc947bfffc398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002139fd0004919d000081db002091cf0004815b0024914f000096fbfffc388f0000386000013b1b003c3c0002a5600077987c0803a64e800021813b00388109fffc80e8000c80c7000438a30000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d0000809b00209083001090a3000c8328001093230008830800089303000482fb000092e30000830600b8833b003c801800007c0903a67f2803a63b7b00404e800420823b00148211fffc81f0000c81cf000480700008830e0094801800007c0803a64e800021815b0014813b0000280900014082000c390000034800000839000001280800014082007880cafffc80a6000c808500043b230000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003b0000039303000882eaffc492e3000482c6000892c30000973bfffc800affd0941bfffc951bfffc83040090801800007c0803a64e80002138e300004800001838e00001947bfffc800affd0941bfffc951bfffc811b001080080000941bfffc80080004941bfffc807b00003b1b002c3c0002a560007e507c0803a64e80002180fb0008280700014082007080bb00288085fffc8324000c831900043ae30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003ac0ffff92c3000882a5ffc492a30004828400089283000096fbfffc83180090801800007c0803a64e80002138c300004800000c38c00001947bfffc80db002c80a6fffc80860004949bfffc8066ffc08326ffec8306000838d8000082e5001438b9000038830000807b000c3b170000801800007c0803a64e80002182db002c82b6ffec28150001408200348296fffc8274000c82530004947bfffc80740008831200cc801800007c0803a64e80002128030001408200344800000c947bfffc48000028821b003081f0fffc38600001830f0018801800007c0803a64e8000213a230000480000083a200001829b00308274fffc8253000c82320004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000821300109203000881f3000891e3000481db000091c30000831100ac801800007c0803a64e800021815b0030812afffc8109000c80e8000480c700a4947bfffc807b000483060000801800007c0803a64e8000212803000141820088809b00348064fffc8323000c8319000482f800a4807b000483170008801800007c0803a64e80002182db003482b6fffc8295000c827400043a430000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00009243000482350008922300008313006c801800007c0803a64e80002138a300004800000838a0000180bb00348085fffc8064000c83230004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000830400109303000882e4000892e3000482db000892c30000831900b4801800007c0803a64e80002182bb0018281500014182000c829b0004480000a43a800001827b000c2c1300014082000c3a54000048000048398000025680f80140a20010800d00347c0803a64e8000217e34661541a3fff0827300043a910000800d00187c1b004040a00010800d00207c0803a64e8000214bffffb0823b00303992ffff7e2b90385560f80140a20010800d00347c0803a64e8000217e0c8c1141a3fff080db002880bb002c38900000807b0020831b00344bfff43d3a83000081fb003481cffffc814e000c812a0004398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d0000811b001c910300109283000c80ee001090e3000880ce000890c3000480bb000090a30000830900b8833b0038801800007c0903a67f2803a63b7b003c4e800420|@1945,1048575|1776,3,@1937 2148,3,@1942 1937:C2,1160|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021708b0001408203fc82e4000082d8fffc82b6fffc8295000c827400043a430000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00008238ffd492230008821500109203000481f5000891e30000973bfffc971bfffc965bfffc80170000941bfffc80170004941bfffc80040004941bfffc831300e8801800007c0803a64e80002181db0010814efffc812afffc8109000c80e80004947bfffc8069000883070094801800007c0803a64e800021947bfffc807b000c3b1b001c3c0002a560007c3c7c0803a64e80002180bb00142c0500014082000c38c300004800001c3b1b001c3c0002a560007d447c0803a64e80002138c30000809b00188064fffc8323fffc94dbfffc83030004971bfffc80c3000880a3ffec8083ffc0807b001883190014801800007c0803a64e80002182fb001c82d7fffc82b6ffec28150001408200348296fffc8274000c82530004947bfffc80740008831200cc801800007c0803a64e80002128030001408200384800000c947bfffc4800002c821b002081f0fffc81cffffc38600001830e0018801800007c0803a64e8000213a230000480000083a200001829b00102c14000140820090827b00208253fffc8232fffc8211000c81f00000398000063bbdffe47c1df04040a00010800d001c7c0803a64e800021387d0004919d000081d1001091c300148153fff4914300108133fff09123000c8113ffd09103000880fb000490e3000480d3ffd890c30000830f0134801800007c0803a64e800021807b000080bb00247ca803a63b7b00284e800020827b00208253fffc8232fffc8211000c81f00004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000081d1001091c300088151000891430004813b000091230000830f00ac801800007c0803a64e800021811b002080e8fffc80c7fffc80a6000c80850004832400a4947bfffc807b000483190000801800007c0803a64e800021280300014182009082fb002482d7fffc82b6fffc8295000c82740004825300a4807b000483120008801800007c0803a64e800021823b00248211fffc81f0fffc81cf000c814e000439230000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000091230004810f000891030000830a006c801800007c0803a64e8000213b030000480000083b000001809b0014807b0008831b00244bfffc61831b002482f8fffc82d7fffc82b6000c829500043a630000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d0000825b000c924300109263000c8236001092230008821600089203000481fb000091e30000831400b8833b0028801800007c0903a67f2803a63b7b002c4e800420973bfffc82f8fffc82d7fffc82b6000c82950008398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a7d0004919d00003e4002a562527dec925300083e2002a06231c7ac92330004821400009213000038730000800d00287c0803a64e800021|@1941,1048575|232,3,@1938 272,3,@1939 1112,3,@1940 1124,3,@227 1938:C2,236|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e80002082f8fffc82d7fffc82b6fffc8295000c827400008243000082230004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008218ffe89203000492430000973bfffc971bfffc963bfffc83130128801800007c0803a64e800021947bfffc807b0004831b00084bffff5d398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002139fd0004919d0000906f000481db000091cf0000386f0000815b000c7d4803a63b7b00104e800020|@234,1048575| 1939:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c8078fff84e800020973bfffc971bfffc80030000941bfffc806300044bffffbd398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b00009319000038790000833b00087f2803a63b7b000c4e800020|@468,786433| 1940:S24|67656e43617365202d206e756c6c2063617365206c697374 1941:S58|475f434f444528292e636f646567656e2831302967656e636465283629726573756c742d63617365436f646528342967656e4361736573283229 1942:C2,988|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082006c973bfffc8078fffc82e3fffc82d7000c82b60008398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a9d0004919d00003e6002a562738248927400083e6002a06273c7ac92740004827500009274000038740000800d00287c0803a64e80002182e300042c1700014082010c82d8fffc82b6fffc8295000c827400048254000c973bfffc971bfffc80130024941bfffc80150008941bfffc806300008312000c801800007c0803a64e8000213a230000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092230004821b000092030000831b0004801800007c0803a64e80002181fb000881cffffc814efffc812a000c8109000480e9000038c30000398000063bbdffe47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080aa001090a30014808a000890830010832700549323000c9323000890c30004830effc493030000830800e0833b000c801800007c0903a67f2803a63b7b00104e80042082d8fffc82b6fffc8295000c82740004973bfffc971bfffc96fbfffc80030000941bfffc8075000883130094801800007c0803a64e800021825b00088232fffc8211fffc81f0000c81cf000439430000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000039200003912300088111ffc49103000480f0000890e30000955bfffc830e0090801800007c0803a64e80002180db000c80a6fffc8085fffc8064000c832300048303000c80190024941bfffc80040008941bfffc807b000c8318000c801800007c0803a64e8000213ae30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092e3000482db000092c30000831b0004801800007c0803a64e80002182bb00148295fffc8274fffc8253000c823200048212000039e30000398000063bbdffe47c1df04040a00010800d001c7c0803a64e800021387d0004919d000081d3001091c300148153000891430010813000589123000c9123000891e300048114ffc491030000831100e0801800007c0803a64e800021947bfffc807b0014831b00184bfffcb980fb001880c7fffc80a6fffc8085000c83240004831900a83ae30000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d000082db000c92c3001082b8000492a3000c82850010928300088265000892630004825b00009243000096fbfffc831900b8801800007c0803a64e800021807b0000823b00207e2803a63b7b00244e800020|@1944,1048575|96,3,@1943 108,3,@227 1943:S23|707574496e436173657320686173206e6f206361736573 1944:S60|475f434f444528292e636f646567656e2831302967656e636465283629726573756c742d63617365436f6465283429707574496e4361736573283129 1945:S47|475f434f444528292e636f646567656e2831302967656e636465283629726573756c742d63617365436f6465283429 1946:C2,936|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e80002082f8001482d7001082b6002c973bfffc971bfffc947bfffc80030000941bfffc807b000083150000801800007c0803a64e80002128030001418202e0829b000882740014825300108232002c807b000083110008801800007c0803a64e800021821b000481fb000881cf0014814e0010812a004480030000941bfffc80030004941bfffc80030008941bfffc80100004941bfffc807b000883090000801800007c0803a64e80002128030001418200e8811b001880e8001480c7001080a60044807b000883050008801800007c0803a64e800021809b0018398000093bbdffd87c1df04040a00010800d001c7c0803a64e8000213b3d0004919d00003f0002a5631886a89319000082e4001492f9002082c4001092d9001c82a4000c92b90018829b000c92990014827b0004927900108243001c9259000c90990008823b000092390004281100014082000c3a000003480000083a00000181e4000895fbfffc38c0ffff38b0000081c40004389900003b0e0000801800007c0803a64e80002138600001815b001c7d4803a63b7b00204e800020811b001880e8001480c700048006008c941bfffc80080010941bfffc8008000c941bfffc80a8000894bbfffc38800001949bfffc38c0ffff38a0ffff38800003807b001c83080018801800007c0803a64e800021833b00248319001482f8000482d700a4947bfffc83160000801800007c0803a64e8000212803000141820030829b00288274001482530004823200a4807b000083110008801800007c0803a64e8000213aa300004800006482bb00288295001482740008398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a5d0004919d00003e2002a56231557c923200083e0002a06210c7ac9212000481f3000091f2000038720000800d00287c0803a64e800021398000063bbdffe47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003a0000019203001481fb001491e3001081db001c91c3000c92a30008815b000491430004813b000891230000831b000c801800007c0803a64e800021807b0010831b0028833b002c7f2803a63b7b00304bfffcc4829b00088274001482530008398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a3d0004919d00003e0002a5621087c8921100083de002a061efc7ac91f1000481d2000091d1000038710000800d00287c0803a64e800021|@1950,1048575|300,3,@1947 672,3,@1908 684,3,@227 888,3,@1949 900,3,@227 1947:C2,188|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8002082d7000482b8000c6ab400023a630000398000063bbdffe47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000928300148258001092430010823800149223000c92630008821800189203000481f8001c91e30000973bfffc971bfffc8316008c801800007c0803a64e80002181db0000806e0004830e0008833b0004801800007c0903a67f2803a63b7b00084e800420|@1948,1048575| 1948:S63|475f434f444528292e636f646567656e2831302967656e636465283629726573756c742d67656e4d757475616c44656373283129646973636172642d283129 1949:S33|67656e4d757475616c44656373202d204e6f742061206465636c61726174696f6e 1950:S52|475f434f444528292e636f646567656e2831302967656e636465283629726573756c742d67656e4d757475616c44656373283129 1951:C2,580|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c040001408200308098fffc8064000c82e3000c80b8fff082c40038809700288078ffe03b160000801800007c0903a64e800420973bfffc971bfffc947bfffc80040004941bfffc82f8000896fbfffc3ac0000196dbfffc38c0ffff38a0ffff82a4000038800003387500008318fffc801800007c0803a64e800021829b00088274fffc8253000c82320004821100a4947bfffc83100000801800007c0803a64e800021280300014182003481db000c814efffc812a000c8109000480e800a4807b000083070008801800007c0803a64e80002139e300004800006881fb000c81cffffc814e000c812a0008398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021391d0004919d00003ce002a560e7557c90e800083cc002a060c6c7ac90c8000480a9000090a8000038680000800d00287c0803a64e80002180db000c80a6fffc8085000c8064000c833b0008830300443998ffff7f2bc0385560f80140a20010800d00347c0803a64e8000217ef9661541a3fff095fbfffc809b0008387700003b0600004bfffe5582db001082b6fffc8295000c8274000482540000823200043a030000398000063bbdffe47c1df04040a00010800d001c7c0803a64e800021387d0004919d000081f5000891e3001481d5001091c30010815100049143000c813b000c91230008811b00009103000492030000961bfffc83130068801800007c0803a64e800021807b000080fb00187ce803a63b7b001c4e800020|@1952,1048575|304,3,@1908 316,3,@227 1952:S54|475f434f444528292e636f646567656e2831302967656e636465283629726573756c742d6c6f6164536d616c6c566563746f72283229 1953:C2,480|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc949bfffc82f8000896fbfffc3ac0000196dbfffc38c0ffff38a0ffff388000038318fffc801800007c0803a64e80002182bb00048295fffc8274000c82530004823200a4947bfffc83110000801800007c0803a64e800021280300014182003481fb000881cffffc814e000c812a0004810900a4807b000083080008801800007c0803a64e8000213a03000048000068821b000881f0fffc81cf000c814e0008398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021393d0004919d00003d0002a56108557c910900083ce002a060e7c7ac90e9000480ca000090c9000038690000800d00287c0803a64e80002180fb000880c7fffc80a6000c808500048065000083230004398000063bbdffe47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000830600089303001482e6001092e3001082d9000492c3000c82bb000492a30008920300048287ffd89283000083040068801800007c0803a64e800021827b00088253fffc8232000c8211000c81fb000481d00044398effff7deb70385560f80140a20010800d00347c0803a64e8000217c6f661541a3fff0815b000c7d4803a63b7b00104e800020|@1954,1048575|236,3,@1908 248,3,@227 1954:S47|475f434f444528292e636f646567656e2831302967656e636465283629726573756c742d73657456616c7565283229 1955:C2,616|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8ffe47c6bbb78556bf80140a20010800d00347c0803a64e8000217c03b80040820010386000017f2803a64e80002082d8fffc82b6000c8295000c827400443993ffff7c6b98385560f80140a20010800d00347c0803a64e8000217c6b0e707e4c5dd741a3ffec3a5200013980000256e0f80140a20010800d00347c0803a64e8000217e2cbc1141a3fff07c6b8b78556bf80140a20010800d00347c0803a64e8000217c0388004082000c3a000001480000708215000439e30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000039c0000391c300088158ffd0914300048136000891230000973bfffc971bfffc95fbfffc965bfffc83100090801800007c0803a64e8000213a03000048000014973bfffc971bfffc947bfffc965bfffc81fb000881cffffc814e000c812a0004398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d0000810e00089103000c80ee001090e3000880cfffd090c3000480bb000090a3000083090064801800007c0803a64e800021809b00088324fffc8319000c82f8000482d8000082b600043a830000398000063bbdffe47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082790008926300148259001092430010823500049223000c821b0000920300089283000481e4ffd891e3000083170068801800007c0803a64e80002181db00043980000255c0f80140a20010800d00347c0803a64e8000217c6e661541a3fff0831b0008833b000c7f2803a63b7b00104bfffda4|@1956,1048575| 1956:S43|475f434f444528292e636f646567656e2831302967656e636465283629726573756c742d636f7079283129 1957:C2,616|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8ffe47c6bbb78556bf80140a20010800d00347c0803a64e8000217c03b80040820010386000017f2803a64e80002082d8fffc82b6000c8295000c827400443993ffff7c6b98385560f80140a20010800d00347c0803a64e8000217c6b0e707e4c5dd741a3ffec3a5200013980000256e0f80140a20010800d00347c0803a64e8000217e2cbc1141a3fff07c6b8b78556bf80140a20010800d00347c0803a64e8000217c0388004082000c3a000001480000708215000439e30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000039c0000391c300088158ffdc914300048136000891230000973bfffc971bfffc95fbfffc965bfffc83100090801800007c0803a64e8000213a03000048000014973bfffc971bfffc947bfffc965bfffc81fb000881cffffc814e000c812a0004398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d0000810e00089103000c80ee001090e3000880cfffdc90c3000480bb000090a3000083090064801800007c0803a64e800021809b00088324fffc8319000c82f8000482d8000082b600043a830000398000063bbdffe47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082790008926300148259001092430010823500049223000c821b0000920300089283000481e4ffd891e3000083170068801800007c0803a64e80002181db00043980000255c0f80140a20010800d00347c0803a64e8000217c6e661541a3fff0831b0008833b000c7f2803a63b7b00104bfffda4|@1956,1048575| 1958:S41|67656e6364653a2063616e277420636f64652d67656e657261746520436f64654e696c2076616c7565 1959:S40|67656e6364653a2063616e277420636f64652d67656e657261746520476c6f62616c2076616c7565 1960:S29|475f434f444528292e636f646567656e2831302967656e636465283629 1961:C2,3420|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e3001c281700014082036882d8001082b6000082830000826300048243000c8223001082030018398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000081f8000891e300089263000439c0000391c30000973bfffc971bfffc949bfffc969bfffc965bfffc963bfffc961bfffc83150030801800007c0803a64e800021815b0014398000083bbdffdc7c1df04040a00010800d001c7c0803a64e800021393d0004919d00003d0002a56108a0449109000080fb000890e9001c80ca003490c9001880aa002090a90014808a001c90890010832a000c9329000c830a00149309000882ea001092e90004398000053bbdffe87c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002a562b5a7e492b6000090f60010828a00309296000c9336000892f60004398000083bbdffdc7c1df04040a00010800d001c7c0803a64e8000213a7d0004919d00003e4002a56252ab589253000090f3001c822a002c923300189333001490b300109133000c92f3000890730004398000053bbdffe87c1df04040a00010800d001c7c0803a64e8000213a1d0004919d00003de002a561efb11c91f0000090f0001081ca002891d0000c9330000892f00004947bfffc953bfffc96dbfffc967bfffc961bfffc2c0700014082000c394000014800004880070004941bfffc806700003b1b00303c0002a56000b5407c0803a64e80002180fb00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffffb0813b00288109001080e80004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080db001090c3000480a9000c90a3000083070028801800007c0803a64e800021947bfffc831b0028801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021389d0004919d00003c6002a56063b8e490640000833b001093240004398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b1d0004919d00003ee002a562f7b97492f8000082db000892d8000482bb002c971bfffc829b0008969bfffc3a600001967bfffc825b0028965bfffc823b0028963bfffc82150008961bfffc80db002438a40000809b002c807b003c83150004801800007c0803a64e800021807b000081fb00307de803a63b7b00384e800020973bfffc971bfffc949bfffc94bbfffc94dbfffc80030000941bfffc80030004941bfffc8003000c941bfffc80030010941bfffc80030018941bfffc82db00082c1600014082000c3aa0000348000090829b002082740010825300108232002496dbfffc80160000941bfffc807b000083110000801800007c0803a64e8000212803000141820050821b002881f0001081cf0010814e0024807b0000830a0008801800007c0803a64e800021813b000482c900043b7b0008800d00187c1b004040a00010800d00207c0803a64e8000214bffff703aa000013b7b00082815000141820228821b002081f0001081cf0000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00008150000891430008813b000c912300043900000191030000830e0030801800007c0803a64e80002180fb0020398000043bbdffec7c1df04040a00010800d001c7c0803a64e80002138dd0004919d00003ca002a560a5ba5890a60000809b00089086000c832700109326000890660004398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b1d0004919d00003ee002a562f7bcec92f8000090d80004398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002a562b5bd4892b6000093360004398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a9d0004919d00003e6002a56273be04927400009334000496dbfffc969bfffc3a400003965bfffc823b0010963bfffc821b0010961bfffc81e7000895fbfffc3cc002a560c6be8838b8000038830000807b002883070004801800007c0803a64e80002181db0020814e0010812a0004810a000c80090024941bfffc800e000c941bfffc8308000c801800007c0803a64e80002138e30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000090e3000480db000090c30000831b0004801800007c0803a64e800021947bfffc831b0028801800007c0803a64e800021807b000080bb00307ca803a63b7b00384e800020821b0020398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002139fd0004919d00003dc002a561cebeb491cf000081500010914f0004398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021393d0004919d00003d0002a56108c1b89109000080fb000890e9000c91e900089149000480ca0000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000080b0000890a30008809b000c908300043b20000393230000953bfffc83060030801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b1d0004919d00003ee002a562f7c46c92f8000082db000092d8000482bb0024398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a9d0004919d00003e6002a56273c4c8927400008255001092540004398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a3d0004919d00003e0002a56210c5809211000092510004969bfffc963bfffc39e0000195fbfffc81db001495dbfffc815b0014955bfffc81350008953bfffc3cc002a560c6c60438b8000038830000807b002c83150004801800007c0803a64e800021811b002480e8001080c7000c8306000c801800007c0803a64e80002180bb001c2805000141820070947bfffc809b0010386000033b1b002c3c0002a56000c6307c0803a64e800021809b00288324001083190000947bfffc80640018831800fc801800007c0803a64e800021807b0000831b0028801800007c0803a64e800021807b000082fb00307ee803a63b7b00384e800020947bfffc807b00103b1b002c3c0002a56000ca5c7c0803a64e800021398000025460f80140a20010800d00347c0803a64e8000217c83661541a3fff0807b0028949bfffc80bb00208083004c83230038807b00003b190000801800007c0803a64e800021831b002c82f8001082d700043aa30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000829b0004928300048278000c9263000096bbfffc83160024801800007c0803a64e800021825b0030823200108211000481f1000081cf000439430000398000063bbdffe47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008132000c91230014811200189103001080ee000490e3000c38c0000190c300089143000480bb000090a3000083100068801800007c0803a64e800021809b00308064001083230004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000830400489303000482e4000c92e3000083190024801800007c0803a64e80002182db00043980000256c0f80140a20010800d00347c0803a64e8000217eacb41141a3fff0829b003082740010825300043980000256a0f80140a20010800d00347c0803a64e8000217e2cac1141a3fff03a030000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000922300089203000481f4000c91e30000961bfffc96bbfffc83120090801800007c0803a64e80002139c00003815b00007dcb5038556bf80140a20010800d00347c0803a64e8000217c0e50004081000c39200001480000f8813b00388109001080e8000480c8000c80a600443985ffff7dcb28385560f80140a20010800d00347c0803a64e8000217dcb0e707c8c5dd741a3ffec388400018068000083230004398000063bbdffe47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008309000c9303001482e9001892e3001082d9000492c3000c9083000882bb000492a30004829b00089283000095dbfffc83070068801800007c0803a64e800021827b0000398000025660f80140a20010800d00347c0803a64e8000217e53661541a3fff039d200003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bfffee4811b003880e8001080c70004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000038a0000390a30008809b0008908300048328000c9323000083060090801800007c0803a64e800021807b0008831b0034801800007c0803a64e800021831b003882f8001082d7000c809b0020807600443b1b003c3c0002a56000cba47c0803a64e80002182bb0038829500108274000c80930028807b000883150040801800007c0803a64e800021825b00388232001082110004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000039e0ffff91e3000881db000891c300048152000c9143000083100090801800007c0803a64e800021807b0008813b003c7d2803a63b7b00444e800020|@2010,1048575|212,3,@1962 316,3,@1968 384,3,@1971 464,3,@1976 548,3,@1980 736,3,@1982 792,3,@1984 1268,3,@1986 1336,3,@1988 1388,3,@1989 1440,3,@1991 1496,3,@1992 1728,3,@1994 1784,3,@1998 1932,3,@1999 1992,3,@2000 2048,3,@2002 2104,3,@2003 2196,3,@2005 2300,3,@2007 3260,3,@2009 1962:C2,1592|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c03000140820018386000013b040000801800007c0903a64e800420973bfffc971bfffc949bfffc94bbfffc94dbfffc82f8001c72eb0001408200582c0300034082000c82d70000480000a8398000025460f80140a20010800d00347c0803a64e8000217eac1c1141a3fff082f7000438750000800d00187c1b004040a00010800d00207c0803a64e8000214bffffa882db000c82b6000482950008398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a7d0004919d00003e4002a56252a698925300083e2002a06231c7ac92330004821400009213000038730000800d00287c0803a64e80002182bb000c82950004827400108253002496dbfffc3876000083120000801800007c0803a64e8000212803000141820084823b00108211000481f0001081cf0024807b0000830e0008801800007c0803a64e800021815b0010812a00048109000438e30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000090e3000480db000890c3000083080024833b0014801800007c0903a67f2803a63b7b00184e800420823b00108211000481f0001081cf0034807b0000830e0000801800007c0803a64e80002128030001418203f0815b0010812a00048109001080e80034807b000083070008801800007c0803a64e80002180c300042c0600034082030880a3000054abf80140a20010800d00347c0803a64e8000212c05000140800228809b0010832400103985ffff7f2b28385560f80140a20010800d00347c0803a64e8000217f19661541a3fff082e4000482d7000082b600247f0ba838556bf80140a20010800d00347c0803a64e8000217c18a800408000f882970004570bf80140a20010800d00347c0803a64e8000212c180001408000084800003082640008825300007f0b9038556bf80140a20010800d00347c0803a64e8000217c18900040800008480000183c6002a0606395e0800d00287c0803a64e800021398000025700f80140a20010800d00347c0803a64e8000217e38661541a3fff0562c083a7e13602e3a700000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d000081fb000491e3001081db000c91c3000c92630008815b0008914300048124000c912300008314002c833b0014801800007c0903a67f2803a63b7b00184e800420829700043980000254a0f80140a20010800d00347c0803a64e8000217e65641141a3fff08257000c823200443991ffff7e6b88385560f80140a20010800d00347c0803a64e8000217e6b0e707e0c5dd741a3ffec3a10000180140064941bfffc961bfffc38600001831b0014801800007c0803a64e80002139e30000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d000081db001091c3000c815b000c9143000891e30004813b000091230000831b0004833b001c801800007c0903a67f2803a63b7b00204e800420809b00108324000483190004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000090a3000482e4000c92e300008018002c941bfffc96fbfffc83180080801800007c0803a64e8000213ac30000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d000082bb000c92a30010829b00149283000c92c30008827b001092630004825b000092430000831b0004833b001c801800007c0903a67f2803a63b7b00204e80042080bb0010398000073bbdffe07c1df04040a00010800d001c7c0803a64e800021389d0004919d00003f2002a56339a6ac93240000830500049304001882e5000c92e4001482db000892c4001082a5001492a4000c829b000c92840008827b00049264000482430000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00009263000c92c30008908300049243000083050018833b0014801800007c0903a67f2803a63b7b00184e800420815b0010812a000481090008398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002138fd0004919d00003cc002a560c6a78490c700083ca002a060a5c7ac90a70004808800009087000038670000800d00287c0803a64e800021|@1967,1048575|224,3,@1963 236,3,@227 740,3,@51 1352,3,@1964 1544,3,@1966 1556,3,@227 1963:S11|66696e64436c6f73757265 1964:C2,136|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8001882d70004398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d000082b8000492a30010829800089283000c8278000c92630008825800109243000482380014922300008316002c801800007c0903a67f2803a64e800420|@1965,1048575| 1965:S44|475f434f444528292e636f646567656e2831302967656e50726f6328352970726576696f7573283429283129 1966:S33|70726576696f75733a2062616420636f64657472656520696e20636c6f73757265 1967:S41|475f434f444528292e636f646567656e2831302967656e50726f6328352970726576696f7573283429 1968:C2,760|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000034e800020973bfffc971bfffc82f8001072eb0001408200582c0300034082000c82d70000480000a8398000025460f80140a20010800d00347c0803a64e8000217f2c1c1141a3fff082f7000438790000800d00187c1b004040a00010800d00207c0803a64e8000214bffffa882db00008076000483230008398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213b1d0004919d00003ee002a562f7a69892f800083ee002a062f7c7ac92f8000482f9000092f8000038780000800d00287c0803a64e80002182bb000082950004827400108253002496dbfffc3876000083120000801800007c0803a64e8000212803000141820068823b00048211000481f0001081cf0024807b0000830e0008801800007c0803a64e800021815b0004812a00048109000c80080038941bfffc83080014801800007c0803a64e800021831b0000833b000c801800007c0903a67f2803a63b7b00104e800420823b00048211000481f0001081cf0034807b0000830e0000801800007c0803a64e80002128030001418200e4815b0004812a00048109001080e80034807b000083070008801800007c0803a64e80002180c300042c0600034082009080a3000054abf80140a20010800d00347c0803a64e8000212c0500014081005c809b00048324000483190004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000090a3000482e4000892e300008318007c833b0008801800007c0903a67f2803a63b7b000c4e80042038600001809b00087c8803a63b7b000c4e80002080bb0004806300008305000c833b0008801800007c0903a67f2803a63b7b000c4e800420815b0004812a000481090008398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002138fd0004919d00003cc002a560c6aaf890c700083ca002a060a5c7ac90a70004808800009087000038670000800d00287c0803a64e800021|@1970,1048575|200,3,@1963 212,3,@227 712,3,@1969 724,3,@227 1969:S38|6973536c3a2062616420636f64657472656520696e2066756e6374696f6e20636c6f73757265 1970:S37|475f434f444528292e636f646567656e2831302967656e50726f632835296973536c283129 1971:C2,1148|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c03000140820110973bfffc971bfffc94bbfffc94dbfffc386000013b040000801800007c0803a64e800021833b00088319000882f8000482d800003aa30000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d00003a8000019283001092a3000c8276001092630008825b000492430004823b0000922300008317004c801800007c0803a64e800021821b000881f0000881cf000439430000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008130000491230004811b000491030000955bfffc830e0028801800007c0803a64e80002180fb00149067000080db000090c700043860000180bb00107ca803a63b7b00184e800020973bfffc971bfffc947bfffc949bfffc94bbfffc94dbfffc82f8001c72eb0001408200582c0300034082000c82d70000480000a8398000025460f80140a20010800d00347c0803a64e8000217eac1c1141a3fff082f7000438750000800d00187c1b004040a00010800d00207c0803a64e8000214bffffa882db001082b6000882950008398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a7d0004919d00003e4002a56252a698925300083e2002a06231c7ac92330004821400009213000038730000800d00287c0803a64e80002182bb001082950008827400108253003496dbfffc3876000083120000801800007c0803a64e80002128030001418201e4823b00148211000881f0001081cf0034807b0000830e0008801800007c0803a64e80002181430004280a0001418200e0813b00148109000880e8000480c800008007004c941bfffc80060010941bfffc38600001831b0014801800007c0803a64e80002138a30000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d0000388000019083001090a3000c833b000093230008831b00109303000482fb000c92e30000831b0004801800007c0803a64e80002182db001c947bfffc80db001080bb0014809b0018807b001c8316000c801800007c0803a64e80002182bb002890750000829b00009295000438600001827b00247e6803a63b7b002c4e800020813b0014398000073bbdffe07c1df04040a00010800d001c7c0803a64e800021391d0004919d00003ce002a560e7aff090e8000080c9000890c8001880a9001490a80014809b000890880010832900109328000c831b000c9308000882fb000492e8000482c30000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d000092e3000c908300089103000492c3000083090018801800007c0803a64e80002182bb001c8283000092950000826300049275000438600001825b00187e4803a63b7b00204e800020823b00148211000881f00008398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002139dd0004919d00003d4002a5614ab0c8914e00083d2002a06129c7ac912e0004810f0000910e0000386e0000800d00287c0803a64e800021|@1975,1048575|476,3,@1963 488,3,@227 880,3,@1972 1100,3,@1974 1112,3,@227 1972:C2,136|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8001882d70004398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d000082b8000492a30010829800089283000c8278000c92630008825800109243000482380014922300008316002c801800007c0903a67f2803a64e800420|@1973,1048575| 1973:S42|475f434f444528292e636f646567656e2831302967656e50726f632835296c6f6164536c283529283129 1974:S28|6c6f6164536c202d20636c6f73757265206e6f742065787472616374 1975:S39|475f434f444528292e636f646567656e2831302967656e50726f632835296c6f6164536c283529 1976:C2,900|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c030001408200148078000482e30004807700f84e800020973bfffc971bfffc82f8001072eb0001408200582c0300034082000c82d70000480000a8398000025460f80140a20010800d00347c0803a64e8000217f2c1c1141a3fff082f7000438790000800d00187c1b004040a00010800d00207c0803a64e8000214bffffa882db00008076000483230008398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213b1d0004919d00003ee002a562f7a69892f800083ee002a062f7c7ac92f8000482f9000092f8000038780000800d00287c0803a64e80002182bb000082950004827400108253002496dbfffc3876000083120000801800007c0803a64e8000212803000141820050823b00048211000481f0001081cf0024807b0000830e0008801800007c0803a64e800021815b0004812a000481090004830800f4833b0008801800007c0903a67f2803a63b7b000c4e800420823b00048211000481f0001081cf0034807b0000830e0000801800007c0803a64e8000212803000141820180815b0004812a00048109001080e80034807b000083070008801800007c0803a64e80002180c300042c0600034082012c80a3000054abf80140a20010800d00347c0803a64e8000212c050001408100ac809b00048324000483190004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000090a3000482e4000892e3000080180104941bfffc83180080801800007c0803a64e80002182db00083aa30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000829600089283000492a30000831b0000833b000c801800007c0903a67f2803a63b7b00104e800420809b00048324000483190008398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002a562d6b4bc92d700083ea002a062b5c7ac92b70004829800009297000038770000800d00287c0803a64e80002180bb0004806300008305000c833b0008801800007c0903a67f2803a63b7b000c4e800420815b0004812a000481090008398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002138fd0004919d00003cc002a560c6b4d890c700083ca002a060a5c7ac90a70004808800009087000038670000800d00287c0803a64e800021|@1979,1048575|208,3,@1963 220,3,@227 720,3,@1977 732,3,@227 852,3,@1978 864,3,@227 1977:S18|736c5265675365743a20617267756d656e74 1978:S42|736c5265675365743a2062616420636f64657472656520696e2066756e6374696f6e20636c6f73757265 1979:S41|475f434f444528292e636f646567656e2831302967656e50726f63283529736c526567536574283129 1980:C2,852|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8fffc82d7001082b6001082950034973bfffc971bfffc947bfffc83140000801800007c0803a64e80002128030001418202f0827b00048253fffc823200108211001081f00034807b0000830f0008801800007c0803a64e80002181c300042c0e00034082023481430000554bf80140a20010800d00347c0803a64e8000212c0a000140800158813b00048109fffc80e8001c398affff7ceb50385560f80140a20010800d00347c0803a64e8000217cc7661541a3fff080a8001080850000832400247ccbc838556bf80140a20010800d00347c0803a64e8000217c06c800408000e88305000454cbf80140a20010800d00347c0803a64e8000212c060001408000084800003082e8001482d700007ccbb038556bf80140a20010800d00347c0803a64e8000217c06b00040800008480000183c6002a0606395e0800d00287c0803a64e8000213980000254c0f80140a20010800d00347c0803a64e8000217ea6661541a3fff056ac083a7e97602e3af40000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092e3000882680018926300048248000c9243000083180044833b0008801800007c0903a67f2803a63b7b000c4e80042038600001831b00087f0803a63b7b000c4e800020813b00048109fffc80e8001080c70004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00009143000480a8000c90a3000080060044941bfffc94bbfffc80080018941bfffc83060080801800007c0803a64e80002138830000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000090830008833b000093230004831b000493030000831b0008833b0014801800007c0903a67f2803a63b7b00184e800420815b0004812afffc8109002428080001418200183860000180fb00087ce803a63b7b000c4e80002080e9001080c70004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000080a9002090a3000880890018908300048329000c9323000083060044833b0008801800007c0903a67f2803a63b7b000c4e80042038600001827b00087e6803a63b7b000c4e800020|@1981,1048575|340,3,@51 1981:S44|475f434f444528292e636f646567656e2831302967656e50726f6328352970757368436c6f73757265283129 1982:C2,64|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180c3000c80a30008808300048063000083180004801800007c0903a64e800420|@1983,1048575| 1983:S41|475f434f444528292e636f646567656e2831302967656e50726f6328352970726576696f7573283129 1984:C2,152|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc947bfffc973bfffc3afb000496fbfffc80c3000c80a30008808300048063000083180004801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082db000492c3000082bb000892a30004829b00007e8803a63b7b000c4e800020|@1985,1048575| 1985:S39|475f434f444528292e636f646567656e2831302967656e50726f632835296c6f6164536c283129 1986:C2,592|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082005082f8000882d70004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082b8000492a3000490a3000083160028801800007c0903a67f2803a64e800420973bfffc971bfffc94bbfffc82f8000c72eb0001408200582c0300034082000c82d70000480000a8398000025460f80140a20010800d00347c0803a64e8000217eac1c1141a3fff082f7000438750000800d00187c1b004040a00010800d00207c0803a64e8000214bffffa882db000482b6000882950008398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a7d0004919d00003e4002a56252a698925300083e2002a06231c7ac92330004821400009213000038730000800d00287c0803a64e80002182bb000482950008827400108253002496dbfffc3876000083120000801800007c0803a64e8000212803000141820084823b00088211000881f0001081cf0024807b0000830e0008801800007c0803a64e800021815b0008812a00088109000438e30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000090e3000480db000490c3000083080024833b000c801800007c0903a67f2803a63b7b00104e800420823b00088211000881f00008398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002139dd0004919d00003d4002a5614abcc4914e00083d2002a06129c7ac912e0004810f0000910e0000386e0000800d00287c0803a64e800021|@1967,1048575|272,3,@1963 284,3,@227 544,3,@1987 556,3,@227 1987:S30|70726576696f75733a20636c6f73757265206e6f7420636f6e7374616e74 1988:C2,64|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180c3000c80a30008808300048063000083180004801800007c0903a64e800420|@1983,1048575| 1989:C2,104|7f2802a663390002973bfffc8078000482e30008398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002a062b5f68c92b600083ea002a062b5c7ac92b6000482b7000092b6000038760000800d00287c0803a64e800021|@1990,1015809|56,3,@286 68,3,@227 1990:S45|475f434f444528292e636f646567656e2831302967656e50726f63283529636c6f73757265416464722d283129 1991:C2,104|7f2802a663390002973bfffc8078000482e30008398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002a062b5f68c92b600083ea002a062b5c7ac92b6000482b7000092b6000038760000800d00287c0803a64e800021|@1990,1015809|56,3,@286 68,3,@227 1992:O1|@1993 1993:C2,8|386000014e800020|@1990,524289| 1994:C2,540|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021708b00014082019882f8000482d7001082b60024973bfffc971bfffc947bfffc949bfffc80040000941bfffc807b000083150000801800007c0803a64e80002128030001418200d4829b000c827400048253001082320024807b000083110008801800007c0803a64e800021821b000481fb00082c0f00034082006481db000c814e0004812a0008398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021391d0004919d00003ce002a560e7c0ec90e800083cc002a060c6c7ac90c8000480a9000090a8000038680000800d00287c0803a64e8000213980000255e0f80140a20010800d00347c0803a64e8000217dcc7c1141a3fff080900004386e0000831b000c833b00107f2803a63b7b00144bfffed4829b0004827b00082c1300034082001838600003825b00107e4803a63b7b00144e800020398000025660f80140a20010800d00347c0803a64e8000217e4c9c1141a3fff08094000438720000831b000c4bfffe79398000025460f80140a20010800d00347c0803a64e8000217c63661541a3fff0823b00107e2803a63b7b00144e800020973bfffc82f8000482d70008398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003e8002a56294c138929500083e6002a06273c7ac92750004825600009255000038750000800d00287c0803a64e800021|@1997,1048575|204,3,@1995 216,3,@227 492,3,@1996 504,3,@227 1995:S65|7472616e736c617465436c6f73757265496e6465783a20636f6e7374616e747320646f6e27742062656c6f6e6720696e20706879736963616c20636c6f73757265 1996:S53|7472616e736c617465436c6f73757265496e6465783a2062616420696e64657820696e746f206c6f676963616c20636c6f73757265 1997:S54|475f434f444528292e636f646567656e2831302967656e50726f632835297472616e736c617465436c6f73757265496e646578283229 1998:C2,664|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c03000140820018386000013b040000801800007c0903a64e800420973bfffc971bfffc947bfffc949bfffc94bbfffc94dbfffc82f8000c72eb0001408200582c0300034082000c82d70000480000a8398000025460f80140a20010800d00347c0803a64e8000217eac1c1141a3fff082f7000438750000800d00187c1b004040a00010800d00207c0803a64e8000214bffffa882db001082b6000482950008398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a7d0004919d00003e4002a56252a698925300083e2002a06231c7ac92330004821400009213000038730000800d00287c0803a64e80002182bb001082950004827400108253002496dbfffc3876000083120000801800007c0803a64e8000212803000141820084823b00148211000481f0001081cf0024807b0000830e0008801800007c0803a64e800021815b0014812a00048109000438e30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000090e3000480db000890c3000083080024833b0018801800007c0903a67f2803a63b7b001c4e800420823b00148091000c807b001083110008801800007c0803a64e800021947bfffc38600001831b0010801800007c0803a64e800021821b001881f0000481cf0004814f000c813b0000810a00443988ffff7d2b40385560f80140a20010800d00347c0803a64e8000217d2b0e707cec5dd741a3ffec38e7000138c30000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d000080bb000c90a3000c809b00089083000890c3000490e30000830e0064833b001c801800007c0903a67f2803a63b7b00204e800420|@1967,1048575|228,3,@1963 240,3,@227 1999:C2,64|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180c3000c80a30008808300048063000083180004801800007c0903a64e800420|@1983,1048575| 2000:C2,104|7f2802a663390002973bfffc8078000482e30008398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002a062b5f68c92b600083ea002a062b5c7ac92b6000482b7000092b6000038760000800d00287c0803a64e800021|@2001,1015809|56,3,@286 68,3,@227 2001:S42|475f434f444528292e636f646567656e2831302967656e50726f63283529636f6465416464722d283129 2002:C2,104|7f2802a663390002973bfffc8078000482e30008398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002a062b5f68c92b600083ea002a062b5c7ac92b6000482b7000092b6000038760000800d00287c0803a64e800021|@2001,1015809|56,3,@286 68,3,@227 2003:O1|@2004 2004:C2,8|386000014e800020|@2001,524289| 2005:C2,988|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c040001408201248098fffc82e4001082d7000c973bfffc971bfffc80b8fff082a40038809600283b150000801800007c0803a64e800021829b00008274fffc82530010823200043a030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000081f4ffd491e3000481d3000c91c30000961bfffc80110068941bfffc83110024801800007c0803a64e800021815b0008812afffc8109001080e8000080c7000438a30000398000063bbdffe47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008089000c908300148329001893230010830600049303000c3ae0000192e3000890a3000482db000492c30000831b0000801800007c0803a64e800021807b000482bb000c7ea803a63b7b00104e80002082f8fffc82d7001082b6001082950024973bfffc971bfffc947bfffc949bfffc80040000941bfffc807b000083140000801800007c0803a64e800021280300014182004c827b000c8253fffc823200108211001081f00024807b0000830f0008801800007c0803a64e80002181db0004808e0004807b0008831b000c833b00107f2803a63b7b00144bfffe38827b0004825b000c8232fffc80130004941bfffc82120004961bfffc39e0000195fbfffc38c0ffff38a0ffff38800003807b000c8311003c801800007c0803a64e80002181db0010814efffc812a00108109000480e800a4947bfffc83070000801800007c0803a64e800021280300014182003480bb00148085fffc8064001083230004831900a4807b000083180008801800007c0803a64e80002138c300004800006880db001480a6fffc8085001080640008398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213b3d0004919d00003f0002a56318557c931900083ee002a062f7c7ac92f9000482c3000092d9000038790000800d00287c0803a64e80002182fb00103980000256e0f80140a20010800d00347c0803a64e8000217ed7661541a3fff094dbfffc809b000838760000831b00184bfffcf182bb00188295fffc82740010825300048233000c821b001481f10044398fffff7e0b78385560f80140a20010800d00347c0803a64e8000217e0b0e707dcc5dd741a3ffec39ce000181530000812a000439030000398000063bbdffe47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080f4000c90e3001480d4001890c3001080a9000490a3000c91c30008809b00009083000491030000951bfffc83120068801800007c0803a64e800021807b0000833b00207f2803a63b7b00244e800020|@2006,1048575|684,3,@1908 696,3,@227 2006:S42|475f434f444528292e636f646567656e2831302967656e50726f632835296c6f61644974656d73283229 2007:C2,244|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e80002082f8fffc82d7001082b6001082950024973bfffc971bfffc947bfffc80030000941bfffc807b000083140000801800007c0803a64e8000212803000141820048827b00088253fffc823200108211001081f00024807b0000830f0008801800007c0803a64e80002181db0004806e0004831b0008833b000c7f2803a63b7b00104bffff58827b000480730004831b00084bffff41398000025460f80140a20010800d00347c0803a64e8000217c63661541a3fff0825b000c7e4803a63b7b00104e800020|@2008,1048575| 2008:S48|475f434f444528292e636f646567656e2831302967656e50726f632835296e6f6e436f6e73746e74436f756e74283129 2009:C2,680|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0400014082000c386000014e80002082f8fffc82d7001082b6001082950024973bfffc971bfffc947bfffc949bfffc80040000941bfffc807b000083140000801800007c0803a64e800021280300014182004c827b000c8253fffc823200108211001081f00024807b0000830f0008801800007c0803a64e80002181db0004808e0004807b0008831b000c833b00107f2803a63b7b00144bffff50827b0004825b000c8232fffc8211001081f0000480130004941bfffc800f0068941bfffc8012ffcc941bfffc81d1004495dbfffc39400001955bfffc38c0ffff38a0ffff38800003807b00148311003c801800007c0803a64e800021813b00188109fffc80e8001080c7000480a600a4947bfffc83050000801800007c0803a64e8000212803000141820034807b001c8323fffc8319001082f8000482d700a4807b000083160008801800007c0803a64e8000213883000048000068809b001c8064fffc8323001083190008398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002a562d6557c92d700083ea002a062b5c7ac92b70004829800009297000038770000800d00287c0803a64e80002182bb001c8295fffc827400108253000082320004398000063bbdffe47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008214000c9203001481f4001891e3001081d1000491c3000c815b00189143000890830004813b000491230000831b0008801800007c0803a64e800021811b001c80e8fffc80c7001080a6000c809b0018806500443983ffff7c8b18385560f80140a20010800d00347c0803a64e8000217f24661541a3fff0809b000c387900003b080000833b00207f2803a63b7b00244bfffd64|@2006,1048575|428,3,@1908 440,3,@227 2010:S30|475f434f444528292e636f646567656e2831302967656e50726f63283529 2011:C2,1700|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021280600014082000c3ae00003480000083ae000016af6000282b8000c82950004973bfffc971bfffc947bfffc949bfffc94bbfffc94dbfffc96dbfffc8078000883140094801800007c0803a64e800021827b0014947bfffc80bb002438800001807b001483130024801800007c0803a64e800021825b00188232000c8211001081f0001c947bfffc807b0010830f0000801800007c0803a64e800021280300014182014481db001c815b0024955bfffc80db002c80bb003038800001807b0018830e0014801800007c0803a64e800021813b001c8109000c80e8000480c700a8398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d000080bb000490a30010808600049083000c8329001093230008830900089303000482fb000092e30000830700b8801800007c0803a64e80002182db0008281600014182007c82bb001c8295000c82740004825300a4398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008235000492230004821500089203000080120004941bfffc83130024801800007c0803a64e800021831b0000833b0024801800007c0903a67f2803a63b7b00344e80042082bb001c8295000c82740004825300a880720004823b00207e2803a63b7b00304e80002081db001c814e000c812a0004807b0000830900a0801800007c0803a64e800021280300014182009c811b001c80e8000c80c70004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080bb000490a30004808800089083000083060098801800007c0803a64e800021807b001c833b002c831b002882fb0024931b002c92fb002838d9000080bb000c3880000382c30018807b00143b160000833b0020801800007c0903a67f2803a63b7b00284e800420811b001c80e8000c80c7000480680008830600cc801800007c0803a64e80002128030001418200f480bb001c8085000c8064000483230098398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000831b00049303000482e5000892e300003b190000801800007c0803a64e80002182db001c82b6000c82950004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000082760010926300088256000892430004823b000092230000831400b4801800007c0803a64e800021821b001c81fb002c81db0028815b002491db002c915b002838cf000080bb000c38800003807b001083100018833b0020801800007c0903a67f2803a63b7b00284e80042080bb001c808500088065002080bb002c3b240000809b000c3b03000038790000801800007c0803a64e80002182fb001c947bfffc82db002896dbfffc80db003080bb003438830000807b001c83170014801800007c0803a64e80002182bb00302c15000140820034829b00208274000c82530004947bfffc80740008831200cc801800007c0803a64e80002128030001408200304800000c947bfffc48000024821b0024386000018310001c801800007c0803a64e8000213a230000480000083a200001829b00248274000c82530004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00008234001092230008821400089203000481fb000091e30000831200ac801800007c0803a64e80002181db0024814e000c812a0004810900a4947bfffc807b000483080000801800007c0803a64e800021280300014182008480db002880a6000c80850004806400a483230008807b00043b190000801800007c0803a64e800021831b002882f8000c82d700043aa30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a3000482980008928300008316006c801800007c0803a64e80002138e300004800000838e0000180fb002880c7000c80a60004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000080870010908300088327000893230004831b000c93030000830500b4801800007c0803a64e80002182fb002882db003096dbfffc80db003880bb003c809b000c807b002083170014801800007c0803a64e80002182bb00288295000c827400043a430000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d0000823b0010922300109243000c821500109203000881f5000891e3000481db000091c30000831300b8833b002c801800007c0903a67f2803a63b7b003c4e800420|@2012,1048575| 2012:S30|475f434f444528292e636f646567656e2831302967656e436f6e64283729 2013:C2,8124|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021280600014082000c3ae00003480000083ae000016af60002973bfffc971bfffc947bfffc949bfffc94bbfffc94dbfffc96dbfffc3ae000012c0400014082000c3ad70000480000483980000256e0f80140a20010800d00347c0803a64e8000217cd7661541a3fff0808400043ae60000800d00187c1b004040a00010800d00207c0803a64e8000214bffffb096dbfffc82bb0018829500088274001082530024807b001483120000801800007c0803a64e80002128030001418216a0823b00188211000881f0001081cf0024807b0014830e0008801800007c0803a64e800021815b0018812a00088109000c947bfffc83080014801800007c0803a64e80002180fb001c80c7000880a6000c83050048801800007c0803a64e80002128030001418215e8809b001c806400088323000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003f000000631842489303000482fb000092e3000083190000801800007c0803a64e800021280300014182004082db001c82b600088295000080b400bc809400dc807600043b1b00203c0002a56000f5507c0803a64e800021827b00207e6803a63b7b002c4e80002082db001c82b600088295000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003e6000006273428892630004825b00009243000083140000801800007c0803a64e8000212803000141820040823b001c8211000881f0000080af00c0808f00dc807100043b1b00203c0002a56000f5507c0803a64e80002181db00207dc803a63b7b002c4e800020823b001c8211000881f0000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003dc0000061ce536891c30004815b000091430000830f0000801800007c0803a64e8000212803000141820040813b001c8109000880e8000080a700d0808700dc806900043b1b00203c0002a56000f5507c0803a64e80002180db00207cc803a63b7b002c4e800020813b001c8109000880e8000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003cc0000060c65c4890c3000480bb000090a3000083070000801800007c0803a64e8000212803000141820044809b001c806400088323000080b900d483040004809900dc387800003b1b00203c0002a56000f5507c0803a64e80002182fb00207ee803a63b7b002c4e800020809b001c806400088323000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003f000000631853489303000482fb000092e3000083190000801800007c0803a64e800021280300014182003c82db001c82b6000882950000809400d8807400dc3b1b00203c0002a660002d647c0803a64e800021827b00207e6803a63b7b002c4e80002082db001c82b600088295000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003e60000062734da892630004825b00009243000083140000801800007c0803a64e8000212803000141820044823b001c8211000881f00000800f0080941bfffc809b0000807b00003b1b00243c0002a660002d647c0803a64e80002181db00247dc803a63b7b00304e800020823b001c8211000881f0000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003dc0000061ce4dc891c30004815b000091430000830f0000801800007c0803a64e800021280300014182003c813b001c8109000880e8000080870084806700883b1b00203c0002a660002d647c0803a64e80002180db00207cc803a63b7b002c4e800020813b001c8109000880e8000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003cc0000060c64de890c3000480bb000090a3000083070000801800007c0803a64e8000212803000141820044809b001c80640008832300008019008c941bfffc809b0000807b00003b1b00243c0002a660002d647c0803a64e800021831b00247f0803a63b7b00304e800020809b001c806400088323000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003f00000063184e489303000482fb000092e3000083190000801800007c0803a64e800021280300014182004082db001c82b600088295000080b4008880940084807600043b1b00203c0002a56000f5507c0803a64e800021827b00207e6803a63b7b002c4e80002082db001c82b600088295000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003e60000062735ba892630004825b00009243000083140000801800007c0803a64e8000212803000141820048823b001c8211000881f00000800f0098941bfffc80bb0000809b00008071000c3b1b00243c0002a56000f5507c0803a64e80002181db00247dc803a63b7b00304e800020823b001c8211000881f0000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003dc0000061ce5ea891c30004815b000091430000830f0000801800007c0803a64e8000212803000141820044813b001c8109000880e8000080070090941bfffc809b0000807b00003b1b00243c0002a660002d647c0803a64e80002180db00247cc803a63b7b00304e800020813b001c8109000880e8000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003cc0000060c65ec890c3000480bb000090a3000083070000801800007c0803a64e8000212803000141820044809b001c806400088323000080190094941bfffc809b0000807b00003b1b00243c0002a660002d647c0803a64e800021831b00247f0803a63b7b00304e800020809b001c806400088323000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003f00000063185ee89303000482fb000092e3000083190000801800007c0803a64e800021280300014182004482db001c82b600088295000080140098941bfffc809b0000807b00003b1b00243c0002a660002d647c0803a64e800021827b00247e6803a63b7b00304e80002082db001c82b600088295000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003e60000062735f0892630004825b00009243000083140000801800007c0803a64e800021280300014182003c823b001c8211000881f00000808f00c4806f00dc3b1b00203c0002a660002d647c0803a64e80002181db00207dc803a63b7b002c4e800020823b001c8211000881f0000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003dc0000061ce5b6891c30004815b000091430000830f0000801800007c0803a64e800021280300014182003c813b001c8109000880e80000808700c8806700dc3b1b00203c0002a660002d647c0803a64e80002180db00207cc803a63b7b002c4e800020813b001c8109000880e8000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003cc0000060c658e890c3000480bb000090a3000083070000801800007c0803a64e800021280300014182003c809b001c8064000883230000809900cc807900dc3b1b00203c0002a660002d647c0803a64e800021831b00207f0803a63b7b002c4e800020809b001c806400088323000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003f00000063185ee89303000482fb000092e3000083190000801800007c0803a64e800021280300014182004482db001c82b600088295000080140098941bfffc809b0000807b00003b1b00243c0002a660002d647c0803a64e800021827b00247e6803a63b7b00304e80002082db001c82b600088295000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003e60000062735e2892630004825b00009243000083140000801800007c0803a64e8000212803000141820044823b001c8211000881f00000800f00a8941bfffc809b0000807b00003b1b00243c0002a660002d647c0803a64e80002181db00247dc803a63b7b00304e800020823b001c8211000881f0000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003dc0000061ce5e4891c30004815b000091430000830f0000801800007c0803a64e8000212803000141820044813b001c8109000880e800008007009c941bfffc809b0000807b00003b1b00243c0002a660002d647c0803a64e80002180db00247cc803a63b7b00304e800020813b001c8109000880e8000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003cc0000060c65e6890c3000480bb000090a3000083070000801800007c0803a64e800021280300014182003c809b001c8064000883230000809900a0807900a43b1b00203c0002a660002d647c0803a64e800021831b00207f0803a63b7b002c4e800020809b001c806400088323000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003f00000063185e889303000482fb000092e3000083190000801800007c0803a64e800021280300014182003c82db001c82b6000882950000809400ac807400dc3b1b00203c0002a660002d647c0803a64e800021827b00207e6803a63b7b002c4e80002082db001c82b600088295000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003e60000062735f2892630004825b00009243000083140000801800007c0803a64e800021280300014182003c823b001c8211000881f00000808f00b0806f00dc3b1b00203c0002a660002d647c0803a64e80002181db00207dc803a63b7b002c4e800020823b001c8211000881f0000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003dc0000061ce5fe891c30004815b000091430000830f0000801800007c0803a64e800021280300014182003c813b001c8109000880e80000808700b8806700dc3b1b00203c0002a660002d647c0803a64e80002180db00207cc803a63b7b002c4e800020813b001c8109000880e8000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003cc0000060c6600890c3000480bb000090a3000083070000801800007c0803a64e800021280300014182003c809b001c8064000883230000809900b4807900dc3b1b00203c0002a660002d647c0803a64e800021831b00207f0803a63b7b002c4e800020809b001c806400088323000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003f000000631841c89303000482fb000092e3000083190000801800007c0803a64e800021280300014182002c386000013b1b00203c0002a6600034547c0803a64e80002182db00207ec803a63b7b002c4e80002082db001c82b600088295000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003e6000006273604892630004825b00009243000083140000801800007c0803a64e8000212803000141820048823b001c8211000881f0000081cf0138280e000141820030814f0004806a00043b1b00203c0002a660003dd47c0803a64e800021813b00207d2803a63b7b002c4e800020823b001c8211000881f0000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003dc0000061ce602891c30004815b000091430000830f0000801800007c0803a64e8000212803000141820048813b001c8109000880e8000080c70138280600014182003080a70000806500043b1b00203c0002a660003dd47c0803a64e800021809b00207c8803a63b7b002c4e800020813b00102809000141820584811b001c80e8000880c7000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003ca0000060a55d0890a30004809b00009083000083060000801800007c0803a64e800021280300014182000848000480807b001c832300088319000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003ee0000062f75d2892e3000482db000092c3000083180000801800007c0803a64e80002128030001418200084800042082bb001c829500088274000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003e40000062525fc892430004823b00009223000083130000801800007c0803a64e8000212803000141820008480003c0821b001c81f0000881cf000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003d400000614a5b8891430004813b000091230000830e0000801800007c0803a64e800021280300014182000848000360811b001c80e8000880c7000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003ca0000060a54e8890a30004809b00009083000083060000801800007c0803a64e800021280300014182000848000300807b001c832300088319000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003ee0000062f75d4892e3000482db000092c3000083180000801800007c0803a64e8000212803000141820008480002a082bb001c829500088274000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003e40000062525d6892430004823b00009223000083130000801800007c0803a64e800021280300014182000848000240821b001c81f0000881cf000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003d400000614a5d8891430004813b000091230000830e0000801800007c0803a64e8000212803000141820008480001e0811b001c80e8000880c7000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003ca0000060a55da890a30004809b00009083000083060000801800007c0803a64e800021280300014182000848000180807b001c832300088319000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003ee0000062f75f4892e3000482db000092c3000083180000801800007c0803a64e80002128030001418200084800012082bb001c829500088274000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003e40000062525f6892430004823b00009223000083130000801800007c0803a64e8000212803000141820008480000c0821b001c81f0000881cf000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003d400000614a5f8891430004813b000091230000830e0000801800007c0803a64e800021280300014182000848000060811b001c80e8000880c7000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003ca0000060a55fa890a30004809b00009083000083060000801800007c0803a64e80002128030001418200a8807b001c832300088319001082f80030398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003ac0000192c3000882bb001892a30004829b00149283000083170004801800007c0803a64e800021827b001c825b0028823b0024925b0028923b00243a00000181fb0020921b002080db000c80b3001480930018831300103b2f0000801800007c0903a67f2803a63b7b00204e800420398000013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d0000811b0018910300003b1b00203c0002a56000f9b07c0803a64e80002180fb00207ce803a63b7b002c4e800020398000013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d0000809b0018908300003b1b00203c0002a56000f9b07c0803a64e800021833b00207f2803a63b7b002c4e800020823b00188211000881f0001081cf0034807b0014830e0000801800007c0803a64e80002128030001418207cc815b0018812a00088109001080e80034807b001483070008801800007c0803a64e80002180c300042806000140820034808300082c04000140820020832300002c1900014082000c38a000034800001838a000014800001038a000014800000838a0000128060001418200a883230000572bf80140a20010800d00347c0803a64e8000212c1900014081006c831b001882f8000882d7000482a3000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000932300048298001c92830000973bfffc94dbfffc96bbfffc94bbfffc8316007c801800007c0803a64e800021388300004800005438800001973bfffc94dbfffc8003000c941bfffc94bbfffc48000038809b001880030000941bfffc94dbfffc8003000c941bfffc94bbfffc807b000c83040040801800007c0803a64e8000213883000028040001418205a0833b00342c19000140820010831b00086b0300024800000838600001831b0028398000093bbdffd87c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002a662d6456092d7000082bb000092b70020829b00089297001c8278003892770018825b000c925700148238003092370010821800209217000c81f8001c91f7000881d8000891d70004814e0004812e0000947bfffc96fbfffc800a0100941bfffc80090010941bfffc386000013b1b003c3c0002a660004ca07c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021391d0004919d00009068000480fb000090e8000038680000831b0004801800007c0803a64e80002180db00102806000141820018809b0038806400088323000480b900f84800020480bb0018280500014182017c809b001c548bf80140a20010800d00347c0803a64e8000212c04000140800064807b00388323000883190008398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002a662d64e0c92d700083ea002a062b5c7ac92b70004829800009297000038770000800d00287c0803a64e800021833b00388319000882f800043ac30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00009083000482b9001c92a3000096dbfffc801700fc941bfffc80170104941bfffc83170080801800007c0803a64e800021829b00443a630000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008254001c9243000492630000831b0000801800007c0803a64e8000213a230000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092230004821b000892030000831b0004801800007c0803a64e80002138a300004800007c809b00388324000883190004947bfffc801800fc941bfffc807b002483040034801800007c0803a64e8000213ae30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092e3000482db000492c30000831b0000801800007c0803a64e80002138a30000947bfffc3b7b000c82bb0010281500014182000848000058829b00388274000882530004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000090a300048234001c9223000094bbfffc83120108801800007c0803a64e8000214800000894bbfffc829b0018281400014182000848000120827b001c28130001418200b0825b003c8232000882110004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000081fb002091e3000481d2001c91c3000080100090941bfffc95dbfffc83100080801800007c0803a64e80002139430000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000392000039123000891430004811b000091030000831b0004801800007c0803a64e80002148000064825b003c8232000882110004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000039e0000391e3000881d2003091c300048152001c9143000083100090801800007c0803a64e800021947bfffc947bfffc3b7b0008813b00102809000141820068398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021391d0004919d00003ce002a660e74e3890e8000080db000c90c8000438880000807b00343b1b00403c0002a6600009cc7c0803a64e80002180bb00407ca803a63b7b004c4e800020398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021391d0004919d00003ce002a660e74f2c90e8000080db000c90c8000438c8000080bb000038800001807b00343b1b00403c0002a660001bb87c0803a64e80002180bb00407ca803a63b7b004c4e800020807b00002803000141820074833b00042819000140820068831b002882f8003c281700014082005882d8000882b60004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003a8000039283000882780030926300048258001c9243000083150090801800007c0803a64e800021833b0000281900014182000c3860000148000030398000013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d0000831b0024930300003b1b002c3c0002a56000f9b07c0803a64e80002182fb002c7ee803a63b7b00384e800020398000013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d0000815b0014914300003b1b001c3c0002a56000f9b07c0803a64e800021813b001c7d2803a63b7b00284e800020|@2067,1048575|372,3,I15 444,3,@2014 524,3,I17 596,3,@2014 676,3,I152 748,3,@2014 828,3,I223 904,3,@2014 984,3,I151 1052,3,@2049 1132,3,I106 1208,3,@2049 1288,3,I107 1356,3,@2049 1436,3,I108 1512,3,@2049 1592,3,I111 1664,3,@2014 1744,3,I218 1824,3,@2014 1904,3,I242 1980,3,@2049 2060,3,I243 2136,3,@2049 2216,3,I244 2292,3,@2049 2372,3,I245 2440,3,@2049 2520,3,I216 2588,3,@2049 2668,3,I196 2736,3,@2049 2816,3,I244 2892,3,@2049 2972,3,I238 3048,3,@2049 3128,3,I239 3204,3,@2049 3284,3,I240 3352,3,@2049 3432,3,I241 3500,3,@2049 3580,3,I246 3648,3,@2049 3728,3,I252 3796,3,@2049 3876,3,I253 3944,3,@2049 4024,3,I11 4076,3,@2052 4156,3,I255 4236,3,@2054 4316,3,I254 4396,3,@2054 4488,3,I229 4584,3,I230 4680,3,I251 4776,3,I217 4872,3,I113 4968,3,I231 5064,3,I232 5160,3,I233 5256,3,I234 5352,3,I247 5448,3,I248 5544,3,I249 5640,3,I250 5896,3,@2015 5976,3,@2015 6452,3,@2057 6568,3,@2061 6776,3,@2063 6788,3,@227 7648,3,@2064 7680,3,@2022 7748,3,@2066 7788,3,@2032 8012,3,@2015 8092,3,@2015 2014:C2,1092|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8fff472eb0001408203b882d700042c1600014082034882b8fffc8295000882740000973bfffc971bfffc947bfffc949bfffc94bbfffc80170000941bfffc38650000831300e0801800007c0803a64e800021280300014182000848000064825b00108232fffc8211000881f00000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000081db000c91c30004815b000491430000830f00e4801800007c0803a64e800021280300014082000848000250825b00108232fffc82120004961bfffc39e0000195fbfffc38c0ffff38a0ffff38800003807b000883110024801800007c0803a64e80002181db0010814efffc812a00088109000480e800a4947bfffc83070000801800007c0803a64e800021280300014182003480bb00148085fffc8064000883230004831900a4807b000083180008801800007c0803a64e80002138c300004800006880db001480a6fffc8085000880640008398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213b3d0004919d00003f0002a56318557c931900083ee002a062f7c7ac92f9000482c3000092d9000038790000800d00287c0803a64e80002182fb001482d7fffc82b6000882950004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000827b0010926300048256001c9243000094dbfffc83140024801800007c0803a64e800021823b00188211ffec720b00014082003481d1fffc814e0008812a0004810900d4947bfffc8070000083080004801800007c0803a64e80002139e300004800001c81f1fffc81cf0008814e0004812a00d081e90004947bfffc811b001c80e8fffc80c7000880a60004808500a4398000073bbdffe07c1df04040a00010800d001c7c0803a64e800021387d0004919d000091e3001883270020932300148307001c9303001082fb001492e3000c82db001092c3000882bb000092a30004829b00049283000080040004941bfffc830500d8801800007c0803a64e800021831b0000833b0024801800007c0903a67f2803a63b7b00284e800420813b0010398000013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d00008109fff8910300003b090000833b00143c0002a56000f9b07c0903a67f2803a63b7b00184e800420973bfffc82b8fffc8295000882740008398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a5d0004919d00003e2002a662312cfc923200083e0002a06210c7ac9212000481f3000091f2000038720000800d00287c0803a64e800021973bfffc82d8fffc82b6000882950008398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a7d0004919d00003e4002a662522cfc925300083e2002a06231c7ac92330004821400009213000038730000800d00287c0803a64e800021|@2048,1048575|428,3,@1908 440,3,@227 868,3,@2015 944,3,@2047 956,3,@227 1044,3,@2047 1056,3,@227 2015:C2,1404|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f80008281700014082000c3ac00003480000083ac00001971bfffc973bfffc947bfffc96dbfffc386000013b1b000c3c0002a56000ff487c0803a64e80002182db000472cb000140820168829b000c8274fffc825300088232001082110024947bfffc80160000941bfffc807b000083100000801800007c0803a64e800021280300014182010881fb001481cffffc814e0008812a001081090024807b000083080008801800007c0803a64e80002180fb001480c7fffc80a600088085000483250000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b1d0004919d000082fb000492f8000482d9001092d80000947bfffc800400fc941bfffc3878000083040100801800007c0803a64e80002182bb001c8295fffc8274000882530004947bfffc807b0008831200f4801800007c0803a64e8000213a230000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092230004821b000092030000831b0004801800007c0803a64e8000213aa300004800005081fb001481cffffc814e0008812a000482a900f8947bfffc947bfffc947bfffc4800002c82bb000c8295fffc827400088253000482b200f8947bfffc947bfffc947bfffc947bfffc947bfffc821b00182c1000014082000c3a2000014800006081fb002081cffffc814e0008812a0004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a30004810e001c9103000096bbfffc83090108801800007c0803a64e8000213a2300004800000896bbfffc81fb001c71eb000140820180815b0024812afffc8109000880e8001080c70024800f0000941bfffc807b000083060000801800007c0803a64e800021280300014182004480bb00288085fffc806400088323001083190024807b000083180008801800007c0803a64e80002182fb002882d7fffc82b600088295000481d400184800012080bb00288085fffc80650004947bfffc3b200001973bfffc38c0ffff38a0ffff8304002438800003807b0008801800007c0803a64e80002182fb002882d7fffc82b6000882950004827400a4947bfffc83130000801800007c0803a64e8000212803000141820034825b002c8232fffc8211000881f0000481cf00a4807b0000830e0008801800007c0803a64e80002139c3000048000068825b002c8232fffc8211000881f00008398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002139dd0004919d00003d4002a5614a557c914e00083d2002a06129c7ac912e0004810f0000910e0000386e0000800d00287c0803a64e8000213b7b00044800001c81db0024814efffc812a00088109000481c80018947bfffc80fb002880c7fffc398000093bbdffd87c1df04040a00010800d001c7c0803a64e80002138bd0004919d00003c8002a6608400c890850000807b0020906500208326003c9325001c830600309305001891c5001482e6004492e5001082c6002092c5000c82a6000892a500088286001c92850004827b001c2813000141820060398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a5d0004919d00003e2002a6623108cc9232000090b20004389200008067fff43b070000833b00243c0002a6600009cc7c0903a67f2803a63b7b002c4e800420398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a5d0004919d00003a2000019232000491d20000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a1d0004919d00003de002a661ef1b0091f0000090b0000438d0000080bb0004389200008067fff43b070000833b00243c0002a660001bb87c0903a67f2803a63b7b002c4e800420|@2046,1048575|80,3,@2016 956,3,@1908 968,3,@227 1080,3,@2018 1200,3,@2020 1232,3,@2022 1340,3,@2031 1380,3,@2032 2016:C2,288|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000082d7fffc82b6000882950000827400247c6b9838556bf80140a20010800d00347c0803a64e8000217c039800418000084800002c8257ffe47c6b9038556bf80140a20010800d00347c0803a64e8000217c0390004080000848000010386000017f2803a64e800020973bfffc971bfffc947bfffc83140020801800007c0803a64e800021823b00003a030000398000025620f80140a20010800d00347c0803a64e8000217c71661541a3fff0961bfffc831b00084bffff29398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002139fd0004919d0000906f000481db000091cf0000386f0000815b000c7d4803a63b7b00104e800020|@2017,1048575| 2017:S57|475f434f444528292e636f646567656e2831302967656e4576616c28362963616c6c436c6f7375726528312967657441726752656773283129 2018:C2,1952|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180780020706b0001408205d082f8000882d7001082b60024973bfffc971bfffc949bfffc80030000941bfffc807b000083150000801800007c0803a64e8000212803000141820430829b0008827400088253001082320024807b000083110008801800007c0803a64e800021821b000881f0000881cf000c947bfffc830e0014801800007c0803a64e800021815b000c812a00088109000c947bfffc83080048801800007c0803a64e80002128030001418200b080fb001080c7000880a60004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000809b000490830004832700049323000083050024801800007c0803a64e800021398000013bbdfff87c1df04040a00010800d001c7c0803a64e8000213b1d0004919d00009078000082fb000c931700003ac0000392d700043aa0000192b700083a8000019297000c38600001827b00147e6803a63b7b00184e80002080fb001080c7000880a6000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003880000190830004833b0000932300008305001c801800007c0803a64e800021831b001082f8000882d700043aa30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a30004829800049283000083160024801800007c0803a64e800021827b0010947bfffc807b000483130010801800007c0803a64e8000212803000340820064398000013bbdfff87c1df04040a00010800d001c7c0803a64e8000213a5d0004919d0000823b000092320000821b00109250000039e0000191f0000439c0000191d00008394000019150000c38600001813b00187d2803a63b7b001c4e800020398000013bbdfff87c1df04040a00010800d001c7c0803a64e8000213a5d0004919d0000823b000092320000821b001481f0000881cf0000814f0004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000813b0008912300048110000491030000965bfffc800e0010941bfffc830a0024801800007c0803a64e80002180fb001c80c7000880a6000438830000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d00003b200001932300109083000c831b00009303000882e7000492e3000482c7000c92c300008305004c801800007c0803a64e80002182bb001c82950008827400043a430000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000823b0000922300048215000492030000965bfffc83130058801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002139fd0004919d000039c0000191cf0004815b0000914f0000813b00208109000880e80000398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138dd0004919d000038a0000190a600048087001090860000807b001c833b0008932300003b0000019303000491e3000890c3000c3860000182fb00247ee803a63b7b00284e800020829b0008827400088253000082330004398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d00003a0000019203001081f4001491e3000c81d2001091c3000881540004914300048134000c9123000095dbfffc8311004c801800007c0803a64e800021811b000c80e8000880c7000438a30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000809b000090830004832800049323000094bbfffc83060058801800007c0803a64e800021398000013bbdfff87c1df04040a00010800d001c7c0803a64e8000213b1d0004919d000082fb000092f8000082db001082b6000882950000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a7d0004919d00003a400001925300048234001092330000821b000c9310000039e0000391f0000439c0000191d000089270000c38600001815b00147d4803a63b7b00184e80002082f8001c281700014182002c3ac0000192c400003aa0000192a400043a800001928400083a6000019264000c386000014e80002082d8000882b6000082960004398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d00003a60000192630010825800189243000c8235001092230008821800049203000481f8000c91e30000973bfffc971bfffc949bfffc963bfffc8314004c801800007c0803a64e80002181db0008814e0008812a000439030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080fb000090e3000480ce000490c30000951bfffc83090058801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138bd0004919d00003880000190850004807b000090650000833b000c8319000882f80000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213add0004919d00003aa0000192b600048297001092960000827b00083a400001925300003a2000019233000490b3000892d3000c38600001821b00107e0803a63b7b00144e800020|@2019,1048575| 2019:S62|475f434f444528292e636f646567656e2831302967656e4576616c28362963616c6c436c6f737572652831296c6f6164436c6f7375726550726f63283229 2020:C2,156|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc947bfffc947bfffc947bfffc973bfffc389b000483180004801800007c0803a64e800021398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d0000833b000493230000831b00089303000482fb000c92e3000882db001092c3000c82bb00007ea803a63b7b00144e800020|@2021,1048575| 2021:S62|475f434f444528292e636f646567656e2831302967656e4576616c28362963616c6c436c6f737572652831296c6f6164436c6f7375726550726f63283129 2022:C2,1900|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021971bfffc973bfffc949bfffc388000013b1b00083c0002a6600011547c0803a64e80002138830000386000013b1b00083c0002a6600012f47c0803a64e800021947bfffc38600001831b0004801800007c0803a64e800021833b000c8319fffc82f8000882d7000082a3000082830004826300088243000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082360008922300048216001c9203000096bbfffc969bfffc967bfffc965bfffc83160028801800007c0803a64e800021280300014182015881db001c814efffc812effe4810a00487d2b4378556bf80140a20010800d00347c0803a64e8000217c094000408200084800005480ea000880c7000080a600247d0b2838556bf80140a20010800d00347c0803a64e8000217c082800418100387d2b2838556bf80140a20010800d00347c0803a64e8000217c092800408100084800001480ea000880c7000081e600084800019c80870004398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00003b2000019323000c830a004c9303000882ea001c92e3000482ca002092c3000083040054801800007c0803a64e80002182bb001c8295fffc82740008825300048223000082030004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00009203000481f4001c91e30000963bfffc8312006c801800007c0803a64e80002181fb00003b7b0004480000dc81fb001c81cffffc814e0008812a0004810a0000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d000038e0000190e3001080ce004c90c3000c80a8001c90a30008808e001c90830004832e0020932300008309004c801800007c0803a64e800021831b001c82f8fffc82d7000882b600043a830000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000928300048277001c926300008315006c801800007c0803a64e800021825b001c8232fffc8211000881f0000081ef001c81db001c814efffc812a00088109000080ea004880c800247ceb3038556bf80140a20010800d00347c0803a64e8000217c0730004181000c38a00001480000283986ffff7ceb30385560f80140a20010800d00347c0803a64e8000217cac3c1141a3fff0808effe47c8b3038556bf80140a20010800d00347c0803a64e8000217c0430004181000c38600001480000283986ffff7c8b30385560f80140a20010800d00347c0803a64e8000217c6c241141a3fff03983ffff7cab18385560f80140a20010800d00347c0803a64e8000217f2c2c1141a3fff0398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000830800089303000491e3000095fbfffc973bfffc83080028801800007c0803a64e80002182fb002482d7fffc82b6000882950004947bfffc8076001c83140084801800007c0803a64e800021827b00043993ffff7c6b98385560f80140a20010800d00347c0803a64e8000217e43661541a3fff0823b00003991ffff7e4b88385560f80140a20010800d00347c0803a64e8000217e0c941141a3fff081fb002881cffffc814e0008812a0000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000810e0020910300049203000083090038801800007c0803a64e80002180fb00182c0700014082006880db002880a6fffc80850008806400008323011083030118398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000082e5002092e3000882db000892c3000482b9000492a30000801800007c0803a64e8000214800007480db002880a6fffc808500088064000483230120398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d0000830500209303001082e5001c92e3000c82db000892c3000882bb001492a3000482870000928300003b190000801800007c0803a64e800021827b000c2c1300014082000848000084825b00288232fffc8211000881f00004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000081d3000091c300048151001c9143000080130004941bfffc830f005c801800007c0803a64e800021827b00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffff78823b00102c1100014082000c825b001c48000020807b001c3b1b00283c0002a6600016747c0803a64e8000213a4300002c1200014082000848000084821b002881f0fffc81cf0008814e0004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008132000091230004810f001c9103000080120004941bfffc830a006c801800007c0803a64e800021825b00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffff78821b002881f0fffc80cf001c38a000038090ffe88070ffe43b100000833b00243c0002a66000171c7c0903a67f2803a63b7b002c4e800420|@2030,1048575|52,3,@2023 80,3,@2025 1684,3,@2027 1876,3,@2028 2023:C2,324|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e80002082f8000082d7fffc973bfffc971bfffc949bfffc80030004941bfffc80b7000480830000807b000483160050801800007c0803a64e80002182bb0008829500008274fffc82530008823200043a030000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00009203000881f3001c91e3000481d3002091c3000083110060801800007c0803a64e800021815b0004398000025540f80140a20010800d00347c0803a64e8000217d2a661541a3fff0947bfffc38890000807b0004831b000c4bffff05398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021391d0004919d00009068000480fb000090e800003868000080db00107cc803a63b7b00144e800020|@2024,1048575| 2024:S56|475f434f444528292e636f646567656e2831302967656e4576616c2836296a756d70546f50726f6328322967656e4172674c697374283229 2025:C2,804|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0400014082000c386000014e80002082f8000082d7fffc82b6000882950000827400247c6b9838556bf80140a20010800d00347c0803a64e8000217c0398004080018c398000025460f80140a20010800d00347c0803a64e8000217e43661541a3fff0973bfffc971bfffc947bfffc80040000941bfffc80840004387200004bffff61823b00088211000081f0fffc81cf0008814e0000947bfffc807b0008830a0020801800007c0803a64e800021813b000c8109000080e8fffc80c7000880a6000438830000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d00003b20000193230010831b00049303000c9083000882e7001c92e3000482c7002092c30000949bfffc8305004c801800007c0803a64e80002182bb0010829500008274fffc82530008823200043a030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000081fb000091e3000481d3001c91c30000961bfffc83110058801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021395d0004919d0000813b0008912a0004811b0000910a0000386a000080fb00187ce803a63b7b001c4e800020825800008232fffc8211000881f0000081d10048814f00247dcb5038556bf80140a20010800d00347c0803a64e8000217c0e50004080002c398affff7c6b50385560f80140a20010800d00347c0803a64e8000217d2c1c1141a3fff048000028398effff7c6b70385560f80140a20010800d00347c0803a64e8000217d2c1c1141a3fff08110000438e30000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00009123000c80c4000090c3000880b1001c90a300048131002091230000973bfffc971bfffc94fbfffc80040004941bfffc83080078801800007c0803a64e800021811b0004398000025500f80140a20010800d00347c0803a64e8000217ce8661541a3fff0809b000038670000831b00084bfffcf53860000180db000c7cc803a63b7b00104e800020|@2026,1048575| 2026:S54|475f434f444528292e636f646567656e2831302967656e4576616c2836296a756d70546f50726f632832296d6f766541726773283229 2027:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c8078ffe84e800020973bfffc971bfffc80030000941bfffc806300044bffffbd398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b00009319000038790000833b00087f2803a63b7b000c4e800020|@468,786433| 2028:C2,864|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8fffc82d7000882b60000829500247c6ba038556bf80140a20010800d00347c0803a64e8000217c03a0004080000c3a630000480000083a740000398000025660f80140a20010800d00347c0803a64e8000217e4c9c1141a3fff0973bfffc971bfffc947bfffc949bfffc94bbfffc94dbfffc967bfffc965bfffc3a20000180db00007e2b3038556bf80140a20010800d00347c0803a64e8000217c11300040810008480000c480bb00188085fffc806400088323000483030000963bfffc8019005c941bfffc3871000083180020801800007c0803a64e8000213ae30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092e3000482db001092c30000831b0000801800007c0803a64e80002182bb00043980000256a0f80140a20010800d00347c0803a64e8000217e95661541a3fff03a3400003b7b0008800d00187c1b004040a00010800d00207c0803a64e8000214bffff1c80bb000c2805000141820028809b00188064fffc8323000883190004807b0008831800c8801800007c0803a64e800021809b0014807b00047c8b1838556bf80140a20010800d00347c0803a64e8000217c04180040810078833b00188319fffc82f8000882d700043983ffff7c8b18385560f80140a20010800d00347c0803a64e8000217eac241141a3fff0398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a30004829b00089283000083160034801800007c0803a64e800021833b0010281900014082002c831b001882f8fffc82d7000882b60004829500a880740004827b001c7e6803a63b7b00204e800020831b001882f8fffc82d7000882b6000482960000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008274000c92630004825b000892430000831500f0801800007c0803a64e800021823b00188211fffc81f0000881cf0004814e00a4812f0000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008109000c9103000480fb000890e30000800a0004941bfffc830e001c801800007c0803a64e800021831b0000833b0020801800007c0903a67f2803a63b7b00244e800420|@2029,1048575| 2029:S44|475f434f444528292e636f646567656e2831302967656e4576616c2836297365747570526573756c74283429 2030:S43|475f434f444528292e636f646567656e2831302967656e4576616c2836296a756d70546f50726f63283229 2031:C2,156|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc947bfffc947bfffc947bfffc973bfffc389b000483180004801800007c0803a64e800021398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d0000833b000493230000831b00089303000482fb000c92e3000882db001092c3000c82bb00007ea803a63b7b00144e800020|@2021,1048575| 2032:C2,1200|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc949bfffc94bbfffc94dbfffc3c0002a6600020847c0803a64e800021833b000c8319fffc82f8000882d700042c0300014082000c82bb000848000030947bfffc8298001c82780020807b000c3b1b00143c0002a6600025747c0803a64e8000213aa3000048000010947bfffc827800208298001c398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d0000825b00089243000c92a30008926300049283000083160040801800007c0803a64e800021947bfffc807b0004831b00143c0002a66000261c7c0803a64e80002180030000941bfffc80030004941bfffc38600001831b0010801800007c0803a64e800021823b0004562bf80140a20010800d00347c0803a64e8000212c11000141800080821b001c81f0fffc81cf0008814e0004812300008103000480e3000880c3000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00009223000880af001c90a30004808f002090830000953bfffc951bfffc94fbfffc94dbfffc830a0070801800007c0803a64e8000214800002480030000941bfffc80030004941bfffc80030008941bfffc8003000c941bfffc821b000c2c1000014082006081fb002c81cffffc814e0008812a000081090110398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080ee002090e3000480c8000490c3000083090114801800007c0803a64e8000214800006881fb002c81cffffc814e0008812a0004398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d0000810e00209103000c80ee001c90e3000880db000890c3000480b0000090a300008309011c801800007c0803a64e800021807b00002c0300014082000c809b001848000020807b00183b1b00303c0002a660002b447c0803a64e800021388300002c0400014082000848000084833b002c8319fffc82f8000882d70004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082a4000092a300048298001c9283000080040004941bfffc8316005c801800007c0803a64e800021809b00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffff78831b00102c1800014082000c833b000448000020807b00043b1b00303c0002a660002bec7c0803a64e8000213b2300002c190001408200084800008482fb002c82d7fffc82b6000882950004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082790000926300048256001c9243000080190004941bfffc8314006c801800007c0803a64e800021833b00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffff7882fb002c82d7fffc82b6000882950004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000827b0024926300048256001c9243000083140014801800007c0803a64e800021823b002c8211fffc80d0001c38a000018091ffe88071ffe43b110000833b00303c0002a66000171c7c0903a67f2803a63b7b00344e800420|@2045,1048575|52,3,@2033 120,3,@2038 240,3,@2039 712,3,@2043 900,3,@2044 1176,3,@2028 2033:C2,84|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021971bfffc973bfffc38830000386000013b1b00043c0002a6600020f47c0803a64e800021833b00007f2803a63b7b00084e800020|@2037,1048575|52,3,@2034 2034:C2,984|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0400014082000c386000014e80002082f8000082d7fffc82b6000882950000827400247c6b9838556bf80140a20010800d00347c0803a64e8000217c039800408001d4973bfffc971bfffc947bfffc80040000941bfffc80040004941bfffc83140020801800007c0803a64e800021823b000c8211000081f0fffc81cf0008814e0010812a0024947bfffc807b000883090000801800007c0803a64e800021280300014182003880fb001080c7000080a6fffc808500088064001083230024807b000883190008801800007c0803a64e8000213900ffff48000030398000013bbdfff87c1df04040a00010800d001c7c0803a64e800021391d0004919d000080fb000090e8000080db001080a600008085fffc80650004947bfffc3b200001973bfffc38c0ffff38a800008304002438800003807b0010801800007c0803a64e80002182fb001082d7000082b6fffc8295000882740004825300a4947bfffc83120000801800007c0803a64e8000212803000141820038823b00148211000081f0fffc81cf0008814e0004812a00a4807b000083090008801800007c0803a64e8000213a43000048000194823b00148211000081f0fffc81cf0008814e0008398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021393d0004919d00003d0002a6610824e8910900083ce002a060e7c7ac90e9000480ca000090c9000038690000800d00287c0803a64e800021825800008232fffc973bfffc971bfffc947bfffc947bfffc80040004941bfffc82120004961bfffc39e0000195fbfffc38c0ffff38a0ffff81c4000038800003386e000083110024801800007c0803a64e800021815b000c812a00008109fffc80e8000880c7000480a600a4947bfffc83050000801800007c0803a64e8000212803000141820038809b0010806400008323fffc8319000882f8000482d700a4807b000083160008801800007c0803a64e8000213a4300004800006c809b0010806400008323fffc8319000882f80008398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002a562b5557c92b600083e8002a06294c7ac92960004827700009276000038760000800d00287c0803a64e800021947bfffc82bb00103980000256a0f80140a20010800d00347c0803a64e8000217e95661541a3fff0965bfffc809b000c38740000831b00184bfffc71398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a7d0004919d000090730004825b00009253000038730000823b001c7e2803a63b7b00204e800020|@2036,1048575|516,3,@2035 528,3,@227 808,3,@1908 820,3,@227 2035:S17|6c64417267733a204e6f20726573756c74 2036:S50|475f434f444528292e636f646567656e2831302967656e4576616c2836296576616c417267732831296c6441726773283229 2037:S41|475f434f444528292e636f646567656e2831302967656e4576616c2836296576616c41726773283129 2038:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c8078ffec4e800020973bfffc971bfffc80030000941bfffc806300044bffffbd398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b00009319000038790000833b00087f2803a63b7b000c4e800020|@468,786433| 2039:C2,152|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021971bfffc947bfffc947bfffc973bfffc38db000438a300003880ffff386000013b1b000c3c0002a6600026d07c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000833b000493230000831b00089303000482fb00007ee803a63b7b00104e800020|@2042,1048575|68,3,@2040 2040:C2,1000|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c05000140820018908600003b00000193060004386000014e80002082f8000082d7fffc82b6000882950000827400247c6b9838556bf80140a20010800d00347c0803a64e8000217c039800408001a8973bfffc971bfffc947bfffc949bfffc94dbfffc80050000941bfffc80050004941bfffc83140020801800007c0803a64e800021825b0010398000025640f80140a20010800d00347c0803a64e8000217e32661541a3fff0947bfffc947bfffc947bfffc38db000480bb000c809b001838710000831b00204bffff19821b002081f0000081cffffc814e0008812a0004398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d0000390000019103001080fb001090e3000c80db000090c3000880ae001c90a30004808e0020908300008309004c801800007c0803a64e800021833b00208319000082f8fffc82d7000882b600043a830000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000827b0000926300048257001c92430000969bfffc83150058801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a3d0004919d0000821b000c9211000481fb000091f1000081db0018815b0008914e0000922e000438600001813b00287d2803a63b7b002c4e800020548bf80140a20010800d00347c0803a64e8000212c04000140800050823800008211fffc81f0000881cf0004973bfffc971bfffc947bfffc94dbfffc80050000941bfffc80050004941bfffc8070001c830e0084801800007c0803a64e8000213a430000480000283a440000973bfffc971bfffc947bfffc94dbfffc80050000941bfffc80050004941bfffc823b00108211000081f0fffc81cf0008814e0004398000025640f80140a20010800d00347c0803a64e8000217d32661541a3fff0398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00009123000c811b00049103000880ef001c90e3000480cf002090c30000965bfffc830a0074801800007c0803a64e80002180bb00003980000254a0f80140a20010800d00347c0803a64e8000217c85661541a3fff0833b0010398000025720f80140a20010800d00347c0803a64e8000217f19661541a3fff0947bfffc947bfffc947bfffc38db000480bb001038780000831b00204bfffc75398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213afd0004919d000082db000892d7000482bb000092b70000829b0018827b00049274000092f4000438600001825b00247e4803a63b7b00284e800020|@2041,1048575| 2041:S50|475f434f444528292e636f646567656e2831302967656e4576616c28362970757368417267732831296c6441726773283429 2042:S41|475f434f444528292e636f646567656e2831302967656e4576616c2836297075736841726773283129 2043:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c8078ffd04e800020973bfffc971bfffc80030000941bfffc806300044bffffbd398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b00009319000038790000833b00087f2803a63b7b000c4e800020|@468,786433| 2044:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c8078ffe04e800020973bfffc971bfffc80030000941bfffc806300044bffffbd398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b00009319000038790000833b00087f2803a63b7b000c4e800020|@468,786433| 2045:S41|475f434f444528292e636f646567656e2831302967656e4576616c28362963616c6c50726f63283429 2046:S44|475f434f444528292e636f646567656e2831302967656e4576616c28362963616c6c436c6f73757265283129 2047:S46|67656e553a20636f6d70696c696e6720756e617279206f70657261746f722028617267636f756e74203c3e203129 2048:S37|475f434f444528292e636f646567656e2831302967656e4576616c28362967656e55283329 2049:C2,1644|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8fff472eb0001408205e082d7000472cb00014082057082b600042c150001408205008298fffc8274000882530000973bfffc971bfffc947bfffc949bfffc80160000941bfffc80170000941bfffc38640000831200e0801800007c0803a64e800021280300014182000848000170823b00108211fffc81f0000881cf0010814e0024807b0000830a0000801800007c0803a64e800021280300014182008c813b00108109fffc80e8000880c7001080a60024807b000083050008801800007c0803a64e800021809b00108324fffc8319000882f800003ac30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092c3000482bb000c92a30000831700e4801800007c0803a64e8000212803000141820008480000b8813b00108109fffc80e8000880c7001080a60024807b000483050000801800007c0803a64e800021280300014182037c809b00108064fffc832300088319001082f80024807b000483170008801800007c0803a64e80002182db001082b6fffc82950008827400003a430000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092430004823b000892230000831300e4801800007c0803a64e80002128030001418202f8823b00108211fffc81f1000495fbfffc39c0000195dbfffc38c0ffff38a0ffff38800003807b000883100024801800007c0803a64e800021815b0010812afffc8109000880e8000480c700a4947bfffc83060000801800007c0803a64e8000212803000141820034809b00148064fffc832300088319000482f800a4807b000083170008801800007c0803a64e80002138a300004800006880bb00148085fffc8064000883230008398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213b1d0004919d00003ee002a562f7557c92f800083ec002a062d6c7ac92d8000482b9000092b8000038780000800d00287c0803a64e80002182db001482b6fffc94bbfffc82960004969bfffc3a600001967bfffc38c0ffff38a0ffff38800003807b001483150024801800007c0803a64e800021825b00188232fffc8211000881f0000481cf00a4947bfffc830e0000801800007c0803a64e8000212803000141820034813b001c8109fffc80e8000880c7000480a600a4807b000083050008801800007c0803a64e8000213943000048000068815b001c812afffc8109000880e80008398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002138dd0004919d00003ca002a560a5557c90a600083c8002a06084c7ac90860004806700009066000038660000800d00287c0803a64e800021809b001c8064ffec706b0001408200348304fffc82f8000882d7000482b600d4955bfffc8063000083150004801800007c0803a64e8000213b2300004800001c8324fffc8319000882f8000482d700d083360004955bfffc82bb00208295fffc8274000882530004823200a4398000073bbdffe07c1df04040a00010800d001c7c0803a64e800021387d0004919d000093230018821400209203001481f4001c91e3001081db001c91c3000c815b001891430008813b000091230004811b00089103000080110004941bfffc831200d8801800007c0803a64e800021831b0000833b0028801800007c0903a67f2803a63b7b002c4e800420809b0010398000013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d00008324fff8932300003b040000833b00143c0002a56000f9b07c0903a67f2803a63b7b00184e800420973bfffc8298fffc8274000882530008398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a3d0004919d00003e0002a6621033ec921100083de002a061efc7ac91f1000481d2000091d1000038710000800d00287c0803a64e800021973bfffc82b8fffc8295000882740008398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a5d0004919d00003e2002a6623133ec923200083e0002a06210c7ac9212000481f3000091f2000038720000800d00287c0803a64e800021973bfffc82d8fffc82b6000882950008398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a7d0004919d00003e4002a6625233ec925300083e2002a06231c7ac92330004821400009213000038730000800d00287c0803a64e800021|@2051,1048575|712,3,@1908 724,3,@227 968,3,@1908 980,3,@227 1320,3,@2015 1396,3,@2050 1408,3,@227 1496,3,@2050 1508,3,@227 1596,3,@2050 1608,3,@227 2050:S47|67656e423a20636f6d70696c696e672062696e617279206f70657261746f722028617267636f756e74203c3e203229 2051:S37|475f434f444528292e636f646567656e2831302967656e4576616c28362967656e42283229 2052:C2,2348|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000218078fff4706b0001408208c482f8fffc82d7000882b6001082950024973bfffc971bfffc947bfffc80030000941bfffc807b000083140000801800007c0803a64e8000212803000141820834827b00088253fffc823200088211001081f00024807b0000830f0008801800007c0803a64e80002181db0004814e0004714b0001408207ac813b00088109fffc80e8000880c7001080a60024947bfffc955bfffc800a0000941bfffc807b000083050000801800007c0803a64e800021280300014182071c809b00148064fffc832300088319001082f80024807b000083170008801800007c0803a64e80002182db000482b6000472ab000140820694829500042c14000140820638827b00148253fffc823200088211000c947bfffc80150000941bfffc807b001083100004801800007c0803a64e80002128030001418205b081fb001c81cffffc814e0008812a000c807b000483090004801800007c0803a64e8000212803000141820584811b001c80e8fffc80c7000880a6000c807b000483050010801800007c0803a64e800021947bfffc947bfffc389b00003b200001932400003b1b00009078000482fb000472f601ff82bb00248295fffc827400088253000c823200307ed08b7881f400287c107840408204cc961bfffc807b001c83120010801800007c0803a64e800021546bf80140a20010800d00347c0803a64e8000212c030001408000343d4002a0614ac2743983ffff7d4b18385560f80140a20010800d00347c0803a64e8000217dca661541a3fff04800000839c3000055cbf80140a20010800d00347c0803a64e8000212c0e0001408103f855cbf80140a20010800d00347c0803a64e8000212c0e000b408003dc815b0028812afffc95dbfffc810a0004951bfffc38e0000194fbfffc38c0ffff38a0ffff38800003807b001883090024801800007c0803a64e80002180db002c80a6fffc8085000883240004831900a4947bfffc83180000801800007c0803a64e800021280300014182003482db003082b6fffc8295000882740004825300a4807b000083120008801800007c0803a64e8000213ae300004800006882fb003082d7fffc82b6000882950008398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a7d0004919d00003e4002a56252557c925300083e2002a06231c7ac92330004821400009213000038730000800d00287c0803a64e800021823b00308211fffc81f0000881cf0004815b0004398000025540f80140a20010800d00347c0803a64e8000217d2c541141a3fff0398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00009123000892e300048110001c9103000096fbfffc830e0090801800007c0803a64e80002180fb003480c7fffc80a7ffec809b000c807b00088306002c801800007c0803a64e800021947bfffc947bfffc80bb003c8085fffc832400088319000c3ae30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082c4002892c3000482bb001492a3000096fbfffc83180000801800007c0803a64e8000212803000141820038829b00408274fffc82530008823200008211000481f2000c39db000481500004914e0000393b0004810f00449109000448000030829b00408274fffc82530008823200008211000039fb000481d0000491cf0000395b000439200003912a0004811b0014398000025500f80140a20010800d00347c0803a64e8000217cec441141a3fff080d2000c80a600443985ffff7ceb28385560f80140a20010800d00347c0803a64e8000217ceb0e707c8c5dd741a3ffec38840001548bf80140a20010800d00347c0803a64e8000212c04000140800008480000c4807b00408323fffc8319000882f80004398000063bbdffe47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082d9001c92c3001482b9002092a30010829b00049283000c90830008827b000c92630004825b000092430000949bfffc83170068801800007c0803a64e800021823b0000821b000c3990ffff7e2b80385560f80140a20010800d00347c0803a64e8000217c8c8c1141a3fff03b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffff24807b00408323fffc8319000882f8000482d700a4807b000083160004833b0044801800007c0903a67f2803a63b7b00484e80042081db0028398000013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d0000814efff8914300003b0e0000833b002c3c0002a56000f9b07c0903a67f2803a63b7b00304e800420398000013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d000081d5fff891c300003b150000833b00283c0002a56000f9b07c0903a67f2803a63b7b002c4e80042081fb001c398000013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d000081cffff891c300003b0f0000833b00203c0002a56000f9b07c0903a67f2803a63b7b00244e800420827b0014398000013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d00008253fff8924300003b130000833b00183c0002a56000f9b07c0903a67f2803a63b7b001c4e800420829b0014398000013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d00008274fff8926300003b140000833b00183c0002a56000f9b07c0903a67f2803a63b7b001c4e800420809b0014398000013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d00008324fff8932300003b040000833b00183c0002a56000f9b07c0903a67f2803a63b7b001c4e800420813b0008398000013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d00008109fff8910300003b090000833b000c3c0002a56000f9b07c0903a67f2803a63b7b00104e800420827b0008398000013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d00008253fff8924300003b130000833b000c3c0002a56000f9b07c0903a67f2803a63b7b00104e800420398000013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d000082f8fff892e300003c0002a56000f9b07c0903a67f2803a64e800420|@2053,1048575|556,3,@180 872,3,@1908 884,3,@227 1704,3,@2015 1780,3,@2015 1860,3,@2015 1940,3,@2015 2020,3,@2015 2100,3,@2015 2180,3,@2015 2260,3,@2015 2328,3,@2015 2053:S46|475f434f444528292e636f646567656e2831302967656e4576616c28362967656e416c6c6f6353746f7265283129 2054:C2,1816|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8fff472eb00014082068c82d7000472cb00014082061c82b6000472ab0001408205ac829500042c1400014082053c8278fffc8253000882320000973bfffc971bfffc947bfffc80150000941bfffc80160000941bfffc80170000941bfffc8311013c801800007c0803a64e800021280300014182000848000088821b001081f0fffc81cf0008814e0010812a0024807b000483090000801800007c0803a64e8000212803000141820470811b001080e8fffc80c7000880a6001080850024807b000483040008801800007c0803a64e800021833b00108319fffc82f8000882d7000c83160004801800007c0803a64e80002128030001408200084800041c821b001081f0fffc81d0000495dbfffc39400001955bfffc38c0ffff38a0ffff38800003807b0008830f0024801800007c0803a64e800021813b00108109fffc80e8000880c7000480a600a4947bfffc83050000801800007c0803a64e8000212803000141820034807b00148323fffc8319000882f8000482d700a4807b000083160008801800007c0803a64e8000213883000048000068809b00148064fffc8323000883190008398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002a562d6557c92d700083ea002a062b5c7ac92b70004829800009297000038770000800d00287c0803a64e80002182bb00148295fffc949bfffc82750004967bfffc3a400001965bfffc38c0ffff38a0ffff38800003807b001483140024801800007c0803a64e800021823b00188211fffc81f0000881cf0004814e00a4947bfffc830a0000801800007c0803a64e8000212803000141820034811b001c80e8fffc80c7000880a60004808500a4807b000083040008801800007c0803a64e8000213923000048000068813b001c8109fffc80e8000880c70008398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002138bd0004919d00003c8002a56084557c908500083c6002a06063c7ac90650004832600009325000038650000800d00287c0803a64e800021807b001c8323fffc953bfffc83030004971bfffc3ae0000196fbfffc38c0ffff38a0ffff38800003807b002083190024801800007c0803a64e80002182db002082b6fffc8295000882740004825300a4947bfffc83120000801800007c0803a64e8000212803000141820034821b002481f0fffc81cf0008814e0004812a00a4807b000083090008801800007c0803a64e8000213a23000048000068823b00248211fffc81f0000881cf0008398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021395d0004919d00003d2002a56129557c912a00083d0002a06108c7ac910a000480ee000090ea0000386a0000800d00287c0803a64e800021811b002480e8fffc80c7000880a60004398000063bbdffe47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080870020908300148327001c93230010831b00209303000c9223000882fb000492e3000482db000c92c30000830500dc801800007c0803a64e80002182bb00248295ffe8281400014182007c8275fffc8253000882320004821100a4398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000081f3000491e3000481d3001c91c3000080100004941bfffc83110024801800007c0803a64e800021831b0000833b002c801800007c0903a67f2803a63b7b00304e8004208275fffc8253000882320004821100a88070000481fb00287de803a63b7b002c4e80002082bb0010398000013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d00008295fff8928300003b150000833b00143c0002a56000f9b07c0903a67f2803a63b7b00184e800420973bfffc8278fffc8253000882320008398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a1d0004919d00003de002a661ef450891f000083dc002a061cec7ac91d00004815100009150000038700000800d00287c0803a64e800021973bfffc8298fffc8274000882530008398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a3d0004919d00003e0002a662104508921100083de002a061efc7ac91f1000481d2000091d1000038710000800d00287c0803a64e800021973bfffc82b8fffc8295000882740008398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a5d0004919d00003e2002a662314508923200083e0002a06210c7ac9212000481f3000091f2000038720000800d00287c0803a64e800021973bfffc82d8fffc82b6000882950008398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a7d0004919d00003e4002a662524508925300083e2002a06231c7ac92330004821400009213000038730000800d00287c0803a64e800021|@2056,1048575|492,3,@1908 504,3,@227 748,3,@1908 760,3,@227 1004,3,@1908 1016,3,@227 1392,3,@2015 1468,3,@2055 1480,3,@227 1568,3,@2055 1580,3,@227 1668,3,@2055 1680,3,@227 1768,3,@2055 1780,3,@227 2055:S25|67656e41737369676e3a20617267636f756e74203c3e203329 2056:S42|475f434f444528292e636f646567656e2831302967656e4576616c28362967656e41737369676e283129 2057:C2,1664|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180780020280300014182017882f8000482d7000482b70000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d00003a80000192830010827800109263000c825500109243000882380008922300048218000c92030000973bfffc971bfffc949bfffc8316004c801800007c0803a64e80002181fb000481cf0004814e0004812e000039030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080e9001090e3000480cf000890c30000951bfffc830a0058801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138bd0004919d00003880000190850004807b000090650000833b00088319000482f80000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213add0004919d00003aa0000192b600048297001092960000827b00043a400001925300003a2000019233000490b3000892d3000c38600001821b000c7e0803a63b7b00104e80002082f8001c281700014182031482d8000482b60004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082980014928300048278000892630000973bfffc971bfffc949bfffc83150080801800007c0803a64e800021825b0004823200048211000481f1000039c30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000814f0010914300088132000c91230004811200089103000095dbfffc83100004801800007c0803a64e80002180fb000880c7000480a6000480860000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000832400109323000483070008930300008305001c801800007c0803a64e80002182fb000882d7000482b60004829600003a630000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082540010924300048237000892230000967bfffc83150058801800007c0803a64e800021821b000c81f0000481cf0000814f0004800e0120941bfffc800e0010941bfffc80700008830a0084801800007c0803a64e800021398000025460f80140a20010800d00347c0803a64e8000217d2c1c1141a3fff0811b001480e8000480c7000c80a600443985ffff7d2b28385560f80140a20010800d00347c0803a64e8000217d2b0e707c8c5dd741a3ffec38840001398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00008328000c9323000890830004831b000093030000831b0004801800007c0803a64e800021398000013bbdfff87c1df04040a00010800d001c7c0803a64e8000213afd0004919d000082db000c92d70000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003a80000192950004827b000892750000825b00148232000482110000398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002139fd0004919d000039c0000191cf000481500010914f0000813b001092e90000390000019109000492a9000891e9000c3860000180fb00187ce803a63b7b001c4e800020398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002a662b54bfc92b600008298001092960004398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00008278000c9263000c825800089243000892c300048238001492230000973bfffc971bfffc949bfffc83180018801800007c0803a64e800021821b000481f0000481cf0004814f00008123000081030004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080ea001090e3000480d0000890c30000953bfffc951bfffc830e0058801800007c0803a64e800021398000013bbdfff87c1df04040a00010800d001c7c0803a64e80002138bd0004919d0000809b000490850000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003b20000193230004831b00009303000082fb000c82d7000482b60000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a9d0004919d00003a600001927400048255001092540000823b000890b100003a00000192110004907100089291000c3860000181fb00107de803a63b7b00144e800020|@2060,1048575|1248,3,@2058 2058:C2,8|807800044e800020|@2059,786433| 2059:S60|475f434f444528292e636f646567656e2831302967656e4576616c2836296c6f61645374617469634c696e6b50726f63283229707573684974283129 2060:S51|475f434f444528292e636f646567656e2831302967656e4576616c2836296c6f61645374617469634c696e6b50726f63283229 2061:C2,284|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8fffc82d7000882b60000829500247c6ba038556bf80140a20010800d00347c0803a64e8000217c03a000418000084800002c8278ffe47c6b9838556bf80140a20010800d00347c0803a64e8000217c0398004080000848000010386000017f2803a64e800020973bfffc971bfffc947bfffc83150020801800007c0803a64e800021825b00003a230000398000025640f80140a20010800d00347c0803a64e8000217c72661541a3fff0963bfffc831b00084bffff2d398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a1d0004919d00009070000481fb000091f000003870000081db000c7dc803a63b7b00104e800020|@2062,1048575| 2062:S43|475f434f444528292e636f646567656e2831302967656e4576616c28362967657441726752656773283129 2063:S35|737461746963206c696e6b2066756e6374696f6e20697320616e20617267756d656e74 2064:C2,156|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc947bfffc947bfffc947bfffc973bfffc389b000483180004801800007c0803a64e800021398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d0000833b000493230000831b00089303000482fb000c92e3000882db001092c3000c82bb00007ea803a63b7b00144e800020|@2065,1048575| 2065:S51|475f434f444528292e636f646567656e2831302967656e4576616c2836296c6f61645374617469634c696e6b50726f63283129 2066:C2,156|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc947bfffc947bfffc947bfffc973bfffc389b000483180004801800007c0803a64e800021398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d0000833b000493230000831b00089303000482fb000c92e3000882db001092c3000c82bb00007ea803a63b7b00144e800020|@2065,1048575| 2067:S30|475f434f444528292e636f646567656e2831302967656e4576616c283629 2068:C2,6600|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021971bfffc949bfffc94bbfffc947bfffc82f8000882d7001082b60020973bfffc83150000801800007c0803a64e8000212803000141820568829b0010827400088253001082320020807b000483110008801800007c0803a64e800021821b001081f0000881cf000480030000941bfffc80030004941bfffc80030008941bfffc80700004830e0094801800007c0803a64e800021815b001c812a000881090004947bfffc806a000483080094801800007c0803a64e800021947bfffc80bb001c38800001807b0010831b00244bffff1580fb002480c7000880a60004947bfffc830500a0801800007c0803a64e80002128030001418200c4809b00288064000883230004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000831b00049303000482e4000492e3000083190098801800007c0803a64e80002182db002882b6000882950004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000827b000892630004825600049243000083140098801800007c0803a64e80002180bb0020809b0024807b0010831b0028833b00187f2803a63b7b002c4bfffe34809b0028806400088323000480640004831900cc801800007c0803a64e800021280300014182011c831b002882f8000882d70004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082bb000492a30004829800049283000083160098801800007c0803a64e800021827b00288253000882320004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000821b00089203000481f3000491e3000083110098801800007c0803a64e80002181db0028814e0008812a0004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000810e000c9103000880ee000490e3000480db000090c30000830900b4801800007c0803a64e80002180bb0020809b0024807b000c831b0028833b00187f2803a63b7b002c4bfffcf480bb0020809b0024807b0010831b00284bfffcd9831b002882f8000882d7000482b600a83a830000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00008278000c9263000882580004924300048235000492230000969bfffc831600ac801800007c0803a64e800021821b002c81f0000881cf000439430000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00008130000c91230008811000049103000480fb000490e30000955bfffc830e00b4801800007c0803a64e80002180db002c68c500023885000080bb0028807b0014831b00304bfffbf9833b00308319000882f8000482d700a83aa30000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d0000829b000c92830010827600049263000c8259000c924300088239000492230004821b00049203000096bbfffc831700b8801800007c0803a64e80002181fb003481cf0008814e0004812a00a8398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000810f000c9103000880ef000490e3000480c9000490c30000830a00ac801800007c0803a64e80002180bb003480850008832400043b030000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000082e5000c92e3000882c5000492c3000482bb000492a30000971bfffc831900b4801800007c0803a64e800021829b00388274000882530004823200a8398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d0000821b00189203001081f1000491e3000c81d4000c91c300088154000491430004813b000491230000831200b8801800007c0803a64e800021807b0000811b00287d0803a63b7b003c4e800020829b0010827400088253001082320018807b000483110000801800007c0803a64e80002128030001418202b8821b001081f0000881cf0010814e0018807b0004830a0008801800007c0803a64e8000218123000c712b0001408202608109000080e8000470eb00014082022880c700042c060001408201f480a900042c050001408201c0809b0010832400088319001082f8002480070000941bfffc80080000941bfffc80030008941bfffc80030010941bfffc3c60000060634e8883170004801800007c0803a64e80002182db002082b6000882950010827400248255000c947bfffc80130004941bfffc807b00148312000c801800007c0803a64e800021831b0000801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a3d0004919d00003a0000019211000490710000398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002139fd0004919d0000922f000481db000c91cf0000815b0028812a00088109001080e80030398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000038c0000390c3000880bb000490a3000491e3000083070004801800007c0803a64e800021809b0028832400088319001082f800203ac30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000082bb000892a30008829b00109283000492c3000083170004801800007c0803a64e80002180bb0020809b0024831b0028833b00187f2803a63b7b002c4bfff810386000013b1b00103c0002a6600069f07c0803a64e800021809b00007c8803a63b7b00144e800020386000013b1b00103c0002a6600069f07c0803a64e80002180bb00007ca803a63b7b00144e800020386000013b1b00103c0002a6600069f07c0803a64e80002180db00007cc803a63b7b00144e800020386000013b1b00103c0002a6600069f07c0803a64e800021811b00007d0803a63b7b00144e800020821b001081f0000881cf0010814e0024807b0004830a0000801800007c0803a64e800021280300014182010c813b00108109000880e8001080c70024807b000483060008801800007c0803a64e80002180bb0010808500088324000c3b030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082e5001092e300049303000083190000801800007c0803a64e80002182db000c7c03b0404082006c82bb00108295000882740004825300a8398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00008235000c92230008821500049203000481f2000491e30000831300ac833b0000801800007c0903a67f2803a63b7b00144e80042082bb001082950008827400048073009c825b00007e4803a63b7b00144e800020813b00108109000880e8001080c70058807b000483060000801800007c0803a64e80002128030001418200d880bb0010808500088064001083230058807b000483190008801800007c0803a64e8000212c03000140820024831b001082f8000882d700048076009c82bb00007ea803a63b7b00144e800020830300042c1800014082002480bb0008809b000c80630000831b0010833b00007f2803a63b7b00144bfff59882fb0010971bfffc82db000c96dbfffc3aa0000196bbfffc38c0ffff38a00001388000038063000083170014801800007c0803a64e800021807b00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffff5480bb0010808500088064001083230030807b000483190000801800007c0803a64e8000212803000141820ea8831b001082f8000882d7001082b60030807b000483150008801800007c0803a64e800021829b0010827400088253001082320024947bfffc80030004941bfffc807b000083110000801800007c0803a64e8000212803000141820e24821b001881f0000881cf0010814e0024807b0000830a0008801800007c0803a64e800021813b0004810900002c0800014082002c386000013b1b00183c0002a6600069f07c0803a64e80002180fb00087ce803a63b7b001c4e80002080e800042c0700014082044080db001880a600088085000c3b230000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003f00000063185ba89303000493230000973bfffc80080000941bfffc83040000801800007c0803a64e800021280300014182002c82fb001c6af6000280bb001838960000807b0000831b0020833b00107f2803a63b7b00244bfff3bc82fb002082d7000882b6000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003e80000062944d8892830004827b00049263000083150000801800007c0803a64e800021280300014182032c825b0020823200088211001081f00024807b0000830f0000801800007c0803a64e800021280300014182009481db0020814e0008812a001081090024807b000083080008801800007c0803a64e80002180fb002080c7000880a6000c83050004801800007c0803a64e8000212803000141820028809b002080bb001880640018809b001c831b0020833b00107f2803a63b7b00244bfff2c8809b002080bb00188064001c809b001c831b0020833b00107f2803a63b7b00244bfff2a481db0020814e0008812a0000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000810e00209103000480e9006c90e3000083090078801800007c0803a64e80002128030001418201f080db002080bb001894bbfffc38800001949bfffc8066001438c0ffff38a0ffff388000033b230000807b00083b190000801800007c0803a64e800021831b002082f8000882d7000482b600a4947bfffc83150000801800007c0803a64e8000212803000141820030827b00248253000882320004821100a4807b000083100008801800007c0803a64e8000213a83000048000064829b00248274000882530008398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a3d0004919d00003e0002a56210557c921100083de002a061efc7ac91f1000481d2000091d1000038710000800d00287c0803a64e80002181fb002481cf0008814e0004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000812f002091230004810f000491030000969bfffc830a0024801800007c0803a64e80002180fb0024280700014182001880bb0028808500088324000080d9006c4800001480db002880a600088085000080c40070833b00288319000882f800043ac30000398000063bbdffe47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082b9000c92a30014829900049283001090c3000c90c3000892c30004827b000092630000831700e0833b0018801800007c0903a67f2803a63b7b002c4e800420386000013b1b00203c0002a6600069f07c0803a64e80002180db00107cc803a63b7b00244e800020386000013b1b00203c0002a6600069f07c0803a64e800021825b00107e4803a63b7b00244e80002080c700042c0600014082094c80bb0018808500088324000c3b030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003ee0000062f75d0892e3000493030000971bfffc80070000941bfffc80080000941bfffc83190000801800007c0803a64e800021280300014182006482db002482b600088295000080140040941bfffc8014003c941bfffc827b0004967bfffc825b0004965bfffc38d2000038b30000809b0014807b00103b1b00343c0002a660006c887c0803a64e800021823b001c7e2803a63b7b00304e80002082db002482b600088295000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003e60000062735d2892630004825b00089243000083140000801800007c0803a64e8000212803000141820064823b00248211000881f00000800f003c941bfffc800f0040941bfffc81db000495dbfffc815b0004955bfffc38ca000038ae0000809b0014807b00103b1b00343c0002a660006c887c0803a64e800021813b001c7d2803a63b7b00304e800020823b00248211000881f0000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003dc0000061ce5fc891c30004815b000891430000830f0000801800007c0803a64e8000212803000141820064813b00248109000880e8000080070040941bfffc8007003c941bfffc80db000494dbfffc80bb000494bbfffc38c5000080bb000c809b0014807b00103b1b00343c0002a660006c887c0803a64e800021809b001c7c8803a63b7b00304e800020813b00248109000880e8000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003cc0000060c65b8890c3000480bb000890a3000083070000801800007c0803a64e8000212803000141820064809b002480640008832300008019003c941bfffc80190040941bfffc831b0004971bfffc82fb000496fbfffc38d7000038b80000809b0014807b00103b1b00343c0002a660006c887c0803a64e80002182db001c7ec803a63b7b00304e800020809b0024806400088323000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003f00000063184e889303000482fb000892e3000083190000801800007c0803a64e800021280300014182006482db002482b600088295000080140058941bfffc80140054941bfffc827b0004967bfffc825b0004965bfffc38d2000038b30000809b0014807b00103b1b00343c0002a660006c887c0803a64e800021823b001c7e2803a63b7b00304e80002082db002482b600088295000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003e60000062735d4892630004825b00089243000083140000801800007c0803a64e8000212803000141820054823b00248211000881f0000081cf006495dbfffc814f0060955bfffc80cf006880af005c809b000c807b00083b1b002c3c0002a660006c887c0803a64e800021813b00147d2803a63b7b00284e800020823b00248211000881f0000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003dc0000061ce5d6891c30004815b000891430000830f0000801800007c0803a64e8000212803000141820054813b00248109000880e8000080c7005c94dbfffc80a7006894bbfffc80c7006080a70064809b000c807b00083b1b002c3c0002a660006c887c0803a64e800021809b00147c8803a63b7b00284e800020813b00248109000880e8000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003cc0000060c65d8890c3000480bb000890a3000083070000801800007c0803a64e8000212803000141820054809b0024806400088323000083190068971bfffc82f9005c96fbfffc80d9006480b90060809b000c807b00083b1b002c3c0002a660006c887c0803a64e80002182db00147ec803a63b7b00284e800020809b0024806400088323000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003f00000063185da89303000482fb000892e3000083190000801800007c0803a64e800021280300014182005482db002482b600088295000082740060967bfffc82540064965bfffc80d4005c80b40068809b000c807b00083b1b002c3c0002a660006c887c0803a64e800021823b00147e2803a63b7b00284e80002082db002482b600088295000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003e60000062735f4892630004825b00089243000083140000801800007c0803a64e8000212803000141820054823b00248211000881f0000081cf004c95dbfffc814f0048955bfffc80cf005080af0044809b000c807b00083b1b002c3c0002a660006c887c0803a64e800021813b00147d2803a63b7b00284e800020823b00248211000881f0000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003dc0000061ce5f6891c30004815b000891430000830f0000801800007c0803a64e8000212803000141820054813b00248109000880e8000080c7004494dbfffc80a7005094bbfffc80c7004880a7004c809b000c807b00083b1b002c3c0002a660006c887c0803a64e800021809b00147c8803a63b7b00284e800020813b00248109000880e8000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003cc0000060c65f8890c3000480bb000890a3000083070000801800007c0803a64e8000212803000141820054809b0024806400088323000083190050971bfffc82f9004496fbfffc80d9004c80b90048809b000c807b00083b1b002c3c0002a660006c887c0803a64e80002182db00147ec803a63b7b00284e800020809b0024806400088323000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003f00000063185fa89303000482fb000892e3000083190000801800007c0803a64e800021280300014182005482db002482b600088295000082740048967bfffc8254004c965bfffc80d4004480b40050809b000c807b00083b1b002c3c0002a660006c887c0803a64e800021823b00147e2803a63b7b00284e800020386000013b1b00243c0002a6600069f07c0803a64e80002182db00147ec803a63b7b00284e800020386000013b1b00183c0002a6600069f07c0803a64e80002180bb00087ca803a63b7b001c4e800020386000013b1b00183c0002a6600069f07c0803a64e800021821b00087e0803a63b7b001c4e800020386000013b1b00103c0002a6600069f07c0803a64e800021831b00007f0803a63b7b00144e800020|@2074,1048575|1648,3,I113 2052,3,@2069 2092,3,@2069 2132,3,@2069 2172,3,@2069 2964,3,@2069 3060,3,I218 3200,3,I105 3716,3,@1908 3728,3,@227 4020,3,@2069 4060,3,@2069 4156,3,I229 4280,3,@2072 4360,3,I230 4468,3,@2072 4548,3,I251 4656,3,@2072 4736,3,I217 4844,3,@2072 4924,3,I113 5032,3,@2072 5112,3,I231 5204,3,@2072 5284,3,I232 5376,3,@2072 5456,3,I233 5548,3,@2072 5628,3,I234 5720,3,@2072 5800,3,I247 5892,3,@2072 5972,3,I248 6064,3,@2072 6144,3,I249 6236,3,@2072 6316,3,I250 6408,3,@2072 6448,3,@2069 6488,3,@2069 6528,3,@2069 6568,3,@2069 2069:C2,552|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f80000973bfffc971bfffc82d8fff896dbfffc3aa0000196bbfffc38c0ffff38a0ffff388000018078fff483170014801800007c0803a64e800021829b00008274fffc2813000141820018823400008211000881f00000824f003c480000148254000082320008821100008250004081f4000081cf0008814e000439230000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000810f00209103000480ef000490e30000953bfffc965bfffc830a0024801800007c0803a64e80002180db000880a600008085000883240004831900a4947bfffc807b000883180000801800007c0803a64e80002128030001418200a882fb000c82d7000082b6000882950004827400a4807b000883130008801800007c0803a64e800021825b000c823200008211000881f0000439c30000398000063bbdffe47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008151000c914300148131000491230010811b00049103000c9103000880fb000090e3000491c30000830f00e0833b0010801800007c0903a67f2803a63b7b00144e80042082fb000c82d7000082b6000882950008398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a7d0004919d00003e4002a662526c34925300083e2002a06231c7ac92330004821400009213000038730000800d00287c0803a64e800021|@2071,1048575|504,3,@2070 516,3,@227 2070:S18|67656e546573743a204e6f20726573756c74 2071:S46|475f434f444528292e636f646567656e2831302967656e5465737428332967656e4f746865725465737473283129 2072:C2,1176|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8fffc281700014182000c3ac50000480000083ac60000281700014182000c82bb00044800000882bb0000829800008274000882530000973bfffc971bfffc947bfffc949bfffc96dbfffc96bbfffc3876000083120074801800007c0803a64e800021280300014182000848000170823b00108211000081f0000881cf0010814e0024807b000c830a0000801800007c0803a64e800021280300014182008c813b00108109000080e8000880c7001080a60024807b000c83050008801800007c0803a64e800021809b0010832400008319000882f800003ac30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092c3000482bb000092a3000083170078801800007c0803a64e8000212803000141820008480000b8813b00108109000080e8000880c7001080a60024807b000883050000801800007c0803a64e8000212803000141820300809b001080640000832300088319001082f80024807b000883170008801800007c0803a64e80002182db001082b6000082950008827400003a430000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092430004823b00049223000083130078801800007c0803a64e800021280300014182027c823b00108211000081f1fff895fbfffc39c0000195dbfffc38c0ffff38a0ffff38800003807b001483100014801800007c0803a64e800021815b0010812a00008109000880e8000480c700a4947bfffc83060000801800007c0803a64e8000212803000141820034809b001480640000832300088319000482f800a4807b000083170008801800007c0803a64e80002138a300004800006880bb0014808500008064000883230008398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213b1d0004919d00003ee002a562f7557c92f800083ec002a062d6c7ac92d8000482b9000092b8000038780000800d00287c0803a64e80002182db001482b6000094bbfffc8296fff8969bfffc3a600001967bfffc38c0ffff38a0ffff38800003807b001883150014801800007c0803a64e800021825b0018823200008211000881f0000481cf00a4947bfffc830e0000801800007c0803a64e8000212803000141820034813b001c8109000080e8000880c7000480a600a4807b000083050008801800007c0803a64e8000213943000048000068815b001c812a00008109000880e80008398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002138dd0004919d00003ca002a560a5557c90a600083c8002a06084c7ac90860004806700009066000038660000800d00287c0803a64e800021809b001c80640000832300088319000482e3000482c3000c398000063bbdffe47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092c3001492e3001082bb000c92a3000c829b00109283000891430004827b000492630000831800e0833b0020801800007c0903a67f2803a63b7b002c4e80042038600001831b0010833b00143c0002a6600069f07c0903a67f2803a63b7b00204e800420|@2073,1048575|712,3,@1908 724,3,@227 968,3,@1908 980,3,@227 1152,3,@2069 2073:S43|475f434f444528292e636f646567656e2831302967656e5465737428332967656e436f6d70617265283629 2074:S30|475f434f444528292e636f646567656e2831302967656e54657374283329 2075:C2,416|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7000082b600247c6ba838556bf80140a20010800d00347c0803a64e8000217c03a80040800050973bfffc971bfffc949bfffc94bbfffc83160020801800007c0803a64e800021398000013bbdfff87c1df04040a00010800d001c7c0803a64e8000213a9d0004919d000090740000480000183a80ffff973bfffc971bfffc949bfffc94bbfffc827b0008825b0000965bfffc3a200001963bfffc38c0ffff38b4000038800003807b000c83130008801800007c0803a64e800021821b000881f0000481cf0004814e00a4947bfffc830a0000801800007c0803a64e8000212803000141820038813b000c8109000480e8000480c700a4807b000083060008801800007c0803a64e80002180bb00107ca803a63b7b00144e800020813b000c8109000480e80008398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002138dd0004919d00003ca002a660a5735490a600083c8002a06084c7ac90860004806700009066000038660000800d00287c0803a64e800021|@2077,1048575|368,3,@2076 380,3,@227 2076:S17|67656e4172673a206e6f20726573756c74 2077:S29|475f434f444528292e636f646567656e2831302967656e417267283329 2078:C2,564|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc949bfffc94dbfffc82fb001096fbfffc38c5000038a400003880000383180010801800007c0803a64e80002182db00002c1600014082002882bb00048295000482740004825300a880720004823b00087e2803a63b7b00104e80002072cb00014082014c82bb00048295000482740004825300a4947bfffc80160000941bfffc83120000801800007c0803a64e80002128030001418200b8823b000c8211000481f0000481cf00a4807b0004830e0008801800007c0803a64e800021815b000c812a00048109000480e800a438c30000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d000038a0000390a3001090c3000c809b000090830008832a000893230004830a000c9303000080070004941bfffc8308004c801800007c0803a64e800021831b0000833b0014801800007c0903a67f2803a63b7b001c4e800420823b000c8211000481f00008398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002139dd0004919d00003d4002a6614a75e8914e00083d2002a06129c7ac912e0004810f0000910e0000386e0000800d00287c0803a64e80002182bb00048295000482740008398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a5d0004919d00003e2002a662317608923200083e0002a06210c7ac9212000481f3000091f2000038720000800d00287c0803a64e800021|@2081,1048575|420,3,@2079 432,3,@227 516,3,@2080 528,3,@227 2079:S24|67656e546f52656769737465723a206e6f20726573756c74 2080:S29|67656e546f52656769737465723a206e6f742061207265676973746572 2081:S36|475f434f444528292e636f646567656e2831302967656e546f5265676973746572283529 2082:S20|475f434f444528292e636f646567656e28313029 2083:O2|@2084,@301 2084:C2,344|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0500014082004080b8000480850000398000013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d000082e4000c92e300007f2803a64e8000202c04ffff408200e882f8000482d70004973bfffc971bfffc831600ec801800007c0803a64e800021947bfffc82bb000482950004827400003a430000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000823300089223000492430000965bfffc83130028801800007c0803a64e8000212803000141820020821b000881f0000481cf0000395b0004812e000c912a0000480000103a1b000481fb000091f00000398000013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d000081db000491c30000815b000c7d4803a63b7b00104e800020386400004e800020|@2085,1048575| 2085:S31|475f434f444528292e63686f6f73654d657267655265676973746572283329 2086:O2|-3,0 2087:O5|@2089,@2096,@2088,@343,@332 2088:O3|@2104,@2106,@2103 2089:O3|@2091,@2093,@2090 2090:O2|@2095,@9384 2091:O2|@2092,@9384 2092:C2,32|82e3000082d800047c17b0404082000c386000034e800020386000014e800020|@337,983041| 2093:O2|@2094,@9384 2094:C2,76|7f2802a6633900023ae30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092e300083ae0008b92e3000482f8000492e300007f2803a64e800020|@337,917505| 2095:C2,48|82e3000082d800047c17b0404082000c806300084e800020973bfffc3c6002a160630a30800d00287c0803a64e800021|@337,983041|28,3,@341 2096:O3|@2098,@2100,@2097 2097:O2|@2102,@9386 2098:O2|@2099,@9386 2099:C2,32|82e3000082d800047c17b0404082000c386000034e800020386000014e800020|@337,983041| 2100:O2|@2101,@9386 2101:C2,76|7f2802a6633900023ae30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092e300083ae0008b92e3000482f8000492e300007f2803a64e800020|@337,917505| 2102:C2,48|82e3000082d800047c17b0404082000c806300084e800020973bfffc3c6002a160630a30800d00287c0803a64e800021|@337,983041|28,3,@341 2103:O2|@2108,@9382 2104:O2|@2105,@9382 2105:C2,32|82e3000082d800047c17b0404082000c386000034e800020386000014e800020|@337,983041| 2106:O2|@2107,@9382 2107:C2,76|7f2802a6633900023ae30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092e300083ae0008b92e3000482f8000492e300007f2803a64e800020|@337,917505| 2108:C2,48|82e3000082d800047c17b0404082000c806300084e800020973bfffc3c6002a160630a30800d00287c0803a64e800021|@337,983041|28,3,@341 2109:O5|@2111,@2114,@2117,@2120,@2110 2110:O1|@2123 2111:O1|@2112 2112:C2,8|8063000c4e800020|@2113,524289| 2113:S36|5072657474795072696e7465722e7070416464537472696e672d23616464537472696e67 2114:O1|@2115 2115:C2,8|806300184e800020|@2116,524289| 2116:S38|5072657474795072696e7465722e7070426567696e426c6f636b2d23626567696e426c6f636b 2117:O1|@2118 2118:C2,8|806300084e800020|@2119,524289| 2119:S34|5072657474795072696e7465722e7070456e64426c6f636b2d23656e64426c6f636b 2120:O1|@2121 2121:C2,8|806300004e800020|@2122,524289| 2122:S28|5072657474795072696e7465722e7070427265616b2d23627265616b 2123:C2,200|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc947bfffc947bfffc947bfffc947bfffc947bfffc947bfffc973bfffc38bb000480830004806300003c0002a660007e107c0803a64e800021398000073bbdffe07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000833b000493230000831b00089303000482fb000c92e3000882db001092c3000c82bb001492a30010829b001892830014827b001c92630018825b00007e4803a63b7b00204e800020|@2181,1048575|76,3,@2124 2124:C2,2040|7f2802a66339000239600050800d00187d6bd8107c0b004040a00010800d00247c0803a64e8000213d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213b1d0004919d0000907800003d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ac0000192d700003d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213add0004919d00003aa0000192b60000398000063bbdffe47c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003e8002a662948624929500009075001492d5001092f5000c9315000890950004388000073983ffff7c8b18385560f80140a20010800d00347c0803a64e8000217c8b0e707eec5dd741a3ffec3af700013d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213add0004919d00003a800001929600003d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e800021389d0004919d00003a800001928400003d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213a9d0004919d00003a600001927400003d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213a7d0004919d00003a400001925300003980000256e0f80140a20010800d00347c0803a64e8000217e57661541a3fff03a3900003a03000039e5000039d8000039570000392400003ca002a660a58ccc38800081387200003f000000631841c8801800007c0803a64e80002191430000398000063bbdffe47c1df04040a00010800d001c7c0803a64e80002138bd0004919d00003c8002a660848cd890850000928500149145001092c5000c9065000891250004398000073bbdffe07c1df04040a00010800d001c7c0803a64e8000213b3d0004919d00003f0002a663188fb89319000091590018907900149139001092d9000c92b90008927900043ae000073990ffff7eeb80385560f80140a20010800d00347c0803a64e8000217eeb0e707e4c5dd741a3ffec3a520001398000025640f80140a20010800d00347c0803a64e8000217d52661541a3fff03903000038e5000038d9000038a0000138800081386a00003f000000631841c8801800007c0803a64e800021924300003d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e80002138bd0004919d000038800001908500003d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213b3d0004919d00003b00000193190000398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003d4002a6614a92d0915700009337000c9077000890b70004398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021389d0004919d00003f0002a66318944493040000924400109324000c9064000890a40004398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021395d0004919d00003f0002a6631896d4930a0000932a0010906a000c90aa0008924a0004398000053bbdffe87c1df04040a00010800d001c7c0803a64e8000213b1d0004919d0000963bfffc961bfffc95fbfffc95dbfffc96bbfffc96dbfffc953bfffc969bfffc967bfffc951bfffc94fbfffc94dbfffc965bfffc947bfffc94bbfffc973bfffc96fbfffc949bfffc955bfffc971bfffc3e0002a6621099509218000090b800109258000c9078000893380004398000073bbdffe07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003e4002a662529be4924300009283001892e300149103001090a3000c93230008914300043980000d3bbdffc87c1df04040a00010800d001c7c0803a64e8000213a1d0004919d00003d4002a6614aa25c9150000090f000309130002c92d00028929000249270002091d0001c90b0001893300014931000109110000c90d0000892b000043980000a3bbdffd47c1df04040a00010800d001c7c0803a64e800021391d0004919d00003f0002a66318a6209308000090a800249328002092c8001c92680018906800149288001090e8000c9088000891280004398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003e4002a66252a7b89257000081db004891d7000891170004398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021395d0004919d00003f0002a66318a864930a000091ca0010910a000c906a000890ca00043d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213a5d0004919d00003b000001931200003980000a3bbdffd47c1df04040a00010800d001c7c0803a64e8000213b1d0004919d00003dc002a661cea95091d800009258002490b800209338001c92d80018927800149298001090f8000c90980008913800043980000c3bbdffcc7c1df04040a00010800d001c7c0803a64e8000213add0004919d00003e8002a66294aaf49296000090b6002c9336002890f60024909600209136001c92b6001892560014827b0048927600109116000c9076000890d60004398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a5d0004919d00003dc002a661ceacc491d2000091120004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021393d0004919d00003d0002a66108ad449109000093090004924f00003ce002a660e7adcc90ef000492cf0008920f000c914f001092ef0014912f0018386000017e2803a63b7b00504e800020|@2180,1048575|216,3,@2125 544,3,@2131 560,3,I11 620,3,@2132 688,3,@2136 828,3,I11 984,3,@2138 1044,3,@2142 1108,3,@2146 1252,3,@2150 1316,3,@2154 1388,3,@2161 1484,3,@2163 1568,3,@2165 1628,3,@2167 1740,3,@2169 1824,3,@2171 1920,3,@2173 1972,3,@2175 1992,3,@2177 2125:C2,1156|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e300002c17ffff40820270971bfffc80030008941bfffc82d8000c82b600002c15000140820030973bfffc386000013b1b00083c0002a660008ac47c0803a64e800021829b00007e8803a63b7b000c4e80002082950000827400002c13ffff408200cc8258000882320000820300043990ffff7e2b80385560f80140a20010800d00347c0803a64e8000217dec8c1141a3fff091f20000973bfffc560bf80140a20010800d00347c0803a64e8000212c100001418100183860000181db00007dc803a63b7b000c4e80002081db0008961bfffc38600041830e0004801800007c0803a64e800021815b0000398000025540f80140a20010800d00347c0803a64e8000217e0c541141a3fff03b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffff742c13000140820030973bfffc807400043b1b00083c0002a660008ac47c0803a64e800021825b00007e4803a63b7b000c4e80002082580008823200007c8b8838556bf80140a20010800d00347c0803a64e8000217c048800418100c88212000081e30004398fffff7e0b78385560f80140a20010800d00347c0803a64e8000217dcc841141a3fff091d20000973bfffc55ebf80140a20010800d00347c0803a64e8000212c0f00014181001838600001815b00007d4803a63b7b000c4e800020815b000895fbfffc38600041830a0004801800007c0803a64e800021813b0000398000025520f80140a20010800d00347c0803a64e8000217dec4c1141a3fff03b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffff74973bfffc807400043b1b00083c0002a660008ac47c0803a64e800021821b00007e0803a63b7b000c4e8000202c1700014082013082d8000882b600007c8ba838556bf80140a20010800d00347c0803a64e8000217c04a800418100103e8002a06294c410480000b88298001082740000824300043992ffff7e6b90385560f80140a20010800d00347c0803a64e8000217e33661541a3fff092340000947bfffc947bfffc82030008281000014182002081f4000039db000039400001914e0000393b000091e900044800001c81f4000039db000039400003914e0000393b000091e90004398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a9d0004919d0000811b00009114000080fb000490f400043b7b000880d8000c80a60000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021389d0004919d000090a400049284000090860000386000017f2803a64e8000202c17fffd4082007c82d8000882b600007c8ba838556bf80140a20010800d00347c0803a64e8000217c04a800408100103a8000019296000048000030829600003984ffff7e8b20385560f80140a20010800d00347c0803a64e8000217e6ca41141a3fff0927600008063000483180004801800007c0903a67f2803a64e80042082d8000c82b600002c1500014082001c973bfffc3c6002a660638c64800d00287c0803a64e8000218295000492960000386000014e800020|@2130,1048575|84,3,@2126 352,3,@2126 632,3,@2126 712,3,@206 1120,3,@2128 2126:C2,328|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000082d8fffc3983ffff7ecb18385560f80140a20010800d00347c0803a64e8000217eb6661541a3fff08077001092a3000082a30000829700143995ffff7e8ba8385560f80140a20010800d00347c0803a64e8000217e6ca41141a3fff082b7000892750000973bfffc971bfffc3860001583170004801800007c0803a64e800021829b0000827400008253001082320000562bf80140a20010800d00347c0803a64e8000212c1100014181001838600001821b00047e0803a63b7b00084e800020821b000081f00000963bfffc38600041830f0004801800007c0803a64e80002181db00003980000255c0f80140a20010800d00347c0803a64e8000217e2c741141a3fff03b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffff70|@2127,1048575| 2127:S52|5072657474795072696e7465722e7072657474795072696e742833297072696e744f75742832297573654e65774c696e65283129 2128:O3|@9377,@227,@2129 2129:S32|706f705072696e74537461636b3a207072696e7420737461636b20656d707479 2130:S39|5072657474795072696e7465722e7072657474795072696e742833297072696e744f7574283229 2131:O2|@211,0 2132:C2,620|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8001482d700003985ffff7ecb28385560f80140a20010800d00347c0803a64e8000217eb6661541a3fff092b7000080b8000482c500003980000256c0f80140a20010800d00347c0803a64e8000217eb6661541a3fff0973bfffc971bfffc947bfffc949bfffc94bbfffc80180010941bfffc809b0000387500003f00000063184e28801800007c0803a64e8000212c0300014082000848000064829b0000568bf80140a20010800d00347c0803a64e8000212c1400014180000c3a600003480000083a600001546bf80140a20010800d00347c0803a64e8000212c0300014180000c3a400003480000083a4000017c139040418200084800000c3a830000480000283994ffff7c6ba0385560f80140a20010800d00347c0803a64e8000217e83661541a3fff0827b000492930000825b0010823200048211000081f2000c81cf00007e0b7378556bf80140a20010800d00347c0803a64e8000217c107000408200183c6002a660638f60800d00287c0803a64e80002181510000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021393d0004919d0000811b00089109000480fb000c90e90000554bf80140a20010800d00347c0803a64e8000212c0a0001408000084800003080d2000880a600007d4b2838556bf80140a20010800d00347c0803a64e8000217c0a280040800008480000183c6002a0606395e0800d00287c0803a64e800021398000025540f80140a20010800d00347c0803a64e8000217c8a661541a3fff0548b083a7d26592e38600001833b00147f2803a63b7b00184e800020|@2135,1048575|156,3,I110 388,3,@2133 540,3,@51 2133:O3|@9377,@227,@2134 2134:S16|746f6b656e2071756575652066756c6c 2135:S38|5072657474795072696e7465722e7072657474795072696e74283329656e5175657565283329 2136:C2,716|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000218078000c82e300003980000256e0f80140a20010800d00347c0803a64e8000217ed7661541a3fff0973bfffc971bfffc80180018941bfffc809b0000387600003f00000063184e28801800007c0803a64e8000212c030001408200084800006482bb000056abf80140a20010800d00347c0803a64e8000212c1500014180000c3a800003480000083a800001546bf80140a20010800d00347c0803a64e8000212c0300014180000c3a600003480000083a6000017c149840418200084800000c3aa30000480000283995ffff7c6ba8385560f80140a20010800d00347c0803a64e8000217ea3661541a3fff0829b000456abf80140a20010800d00347c0803a64e8000212c150001408000084800003082740014825300007eab9038556bf80140a20010800d00347c0803a64e8000217c15900040800008480000183c6002a0606395e0800d00287c0803a64e8000213980000256a0f80140a20010800d00347c0803a64e8000217e35661541a3fff0562c083a7e13602e3a70000081f3000455ebf80140a20010800d00347c0803a64e8000212c0f00014180010081d40010814e00008134000c810900007d4b4378556bf80140a20010800d00347c0803a64e8000217c0a4000418200d092a9000080130000941bfffc95fbfffc388f0000807b000483140008801800007c0803a64e80002180fb000480c700002c06ffff4082004080bb000c8085000480640000832700043999ffff7c6bc8385560f80140a20010800d00347c0803a64e8000217f03661541a3fff093040000480000442c06fffd4082003c80bb000c8085000480640000833b00003999ffff7c6bc8385560f80140a20010800d00347c0803a64e8000217f03661541a3fff09304000038600001831b000c833b00107f2803a63b7b00144bfffd543860000181db00087dc803a63b7b000c4e800020|@2137,1048575|96,3,I110 348,3,@51 2137:S38|5072657474795072696e7465722e7072657474795072696e7428332964655175657565283129 2138:C2,236|7f2802a6633900028078000482e3000082d8000c82b600007eebab78556bf80140a20010800d00347c0803a64e8000217c17a8004082001c973bfffc3c6002a6606393d8800d00287c0803a64e80002182e3000056ebf80140a20010800d00347c0803a64e8000212c170001408000084800003082b80008829500007eeba038556bf80140a20010800d00347c0803a64e8000217c17a000408000084800001c973bfffc3c6002a0606395e0800d00287c0803a64e8000213980000256e0f80140a20010800d00347c0803a64e8000217e97661541a3fff0568c083a7ef5602e387700007f2803a64e800020|@2141,1032193|60,3,@2139 164,3,@51 2139:O3|@9377,@227,@2140 2140:S34|5072657474795072696e7465722e7363616e546f703a20737461636b20656d707479 2141:S38|5072657474795072696e7465722e7072657474795072696e742833297363616e546f70283129 2142:C2,520|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d700003980000256c0f80140a20010800d00347c0803a64e8000217eb6661541a3fff0973bfffc971bfffc947bfffc96fbfffc80180010941bfffc809b0000387500003f00000063184e28801800007c0803a64e8000212c0300014082000848000064829b0000568bf80140a20010800d00347c0803a64e8000212c1400014180000c3a600003480000083a600001546bf80140a20010800d00347c0803a64e8000212c0300014180000c3a400003480000083a4000017c139040418200084800000c3a830000480000283994ffff7c6ba0385560f80140a20010800d00347c0803a64e8000217e83661541a3fff0827b000492930000825b000c823200048211000081f2000c81cf00007e0b7378556bf80140a20010800d00347c0803a64e8000217c107000408200183c6002a660639668800d00287c0803a64e80002181510000554bf80140a20010800d00347c0803a64e8000212c0a0001408000084800003081320008810900007d4b4038556bf80140a20010800d00347c0803a64e8000217c0a400040800008480000183c6002a0606395e0800d00287c0803a64e800021398000025540f80140a20010800d00347c0803a64e8000217cea661541a3fff080db000854eb083a7cc9592e3860000180bb00107ca803a63b7b00144e800020|@2145,1048575|104,3,I110 336,3,@2143 436,3,@51 2143:O3|@9377,@227,@2144 2144:S34|5072657474795072696e7465722e7363616e507573683a20737461636b2066756c6c 2145:S39|5072657474795072696e7465722e7072657474795072696e742833297363616e50757368283129 2146:C2,516|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000218078000882e3000082d8001082b600007eebab78556bf80140a20010800d00347c0803a64e8000217c17a8004082001c973bfffc3c6002a6606398f4800d00287c0803a64e80002182e3000056ebf80140a20010800d00347c0803a64e8000212c170001408000084800003082b8000c829500007eeba038556bf80140a20010800d00347c0803a64e8000217c17a000408000084800001c973bfffc3c6002a0606395e0800d00287c0803a64e8000213980000256e0f80140a20010800d00347c0803a64e8000217e97661541a3fff0568c083a7ef5602e3ab7000082830000398000025680f80140a20010800d00347c0803a64e8000217eeca41141a3fff0973bfffc947bfffc96bbfffc80180004941bfffc809b0000387700003f00000063184e28801800007c0803a64e8000212c030001408200084800006482db000056cbf80140a20010800d00347c0803a64e8000212c1600014180000c3aa00003480000083aa00001546bf80140a20010800d00347c0803a64e8000212c0300014180000c3a800003480000083a8000017c15a040418200084800000c3ac30000480000283996ffff7c6bb0385560f80140a20010800d00347c0803a64e8000217ec3661541a3fff082bb000892d50000807b0004829b000c7e8803a63b7b00104e800020|@2149,1048575|84,3,@2147 188,3,@51 316,3,I110 2147:O3|@9377,@227,@2148 2148:S20|7363616e506f703a20737461636b20656d707479 2149:S38|5072657474795072696e7465722e7072657474795072696e742833297363616e506f70283129 2150:C2,516|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000218078001082e3000082d8000482b600007eebab78556bf80140a20010800d00347c0803a64e8000217c17a8004082001c973bfffc3c6002a660639b70800d00287c0803a64e80002182f600003980000256e0f80140a20010800d00347c0803a64e8000217eb7661541a3fff0973bfffc971bfffc96dbfffc8018000c941bfffc809b0000387500003f00000063184e28801800007c0803a64e8000212c0300014082000848000064829b0000568bf80140a20010800d00347c0803a64e8000212c1400014180000c3a600003480000083a600001546bf80140a20010800d00347c0803a64e8000212c0300014180000c3a400003480000083a4000017c139040418200084800000c3a830000480000283994ffff7c6ba0385560f80140a20010800d00347c0803a64e8000217e83661541a3fff0827b000492930000825b00088232000482110000560bf80140a20010800d00347c0803a64e8000212c100001408000084800003081f2000881cf00007e0b7038556bf80140a20010800d00347c0803a64e8000217c10700040800008480000183c6002a0606395e0800d00287c0803a64e800021398000025600f80140a20010800d00347c0803a64e8000217d50661541a3fff0554c083a7d2f602e38690000811b000c7d0803a63b7b00104e800020|@2153,1048575|84,3,@2151 168,3,I110 436,3,@51 2151:O3|@9377,@227,@2152 2152:S40|5072657474795072696e7465722e7363616e506f70426f74746f6d3a20737461636b20656d707479 2153:S44|5072657474795072696e7465722e7072657474795072696e742833297363616e506f70426f74746f6d283129 2154:C2,648|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021971bfffc973bfffc386000013b1b00043c0002a660009e887c0803a64e8000212803000141820230833b00043860000183190004801800007c0803a64e800021831b0004546bf80140a20010800d00347c0803a64e8000212c030001408000084800003082f8001082d700007c6bb038556bf80140a20010800d00347c0803a64e8000217c03b000408000084800001c3ac300003c6002a0606395e0800d00287c0803a64e800021398000025460f80140a20010800d00347c0803a64e8000217ea3661541a3fff056ac083a7e97602e3af4000082770000825300002c12000340820150546bf80140a20010800d00347c0803a64e8000212c030001408000084800003082380010821100007c6b8038556bf80140a20010800d00347c0803a64e8000217c03800040800008480000183c6002a0606395e0800d00287c0803a64e800021398000025460f80140a20010800d00347c0803a64e8000217de3661541a3fff03dc002a661cea02855eb083a7dd1592e386000013b1b00043c0002a660009e887c0803a64e800021280300014182002c38600001831b00044bfffe45800d00187c1b004040a00010800d00207c0803a64e8000214bffffbc815b0004812a000c8109000080ea000880c700007d0b3378556bf80140a20010800d00347c0803a64e8000217c0830004182002c38600001830a0004801800007c0803a64e8000213b1b00043c0002a66000a0347c0803a64e80002138600001831b0004833b00007f2803a63b7b00084bfffdbc3b1b00043c0002a66000a0347c0803a64e800021823b00007e2803a63b7b00084e80002038600001833b00007f2803a63b7b00084e800020|@2160,1048575|48,3,@2155 180,3,@51 336,3,@51 388,3,@2157 412,3,@2155 552,3,@2158 596,3,@2158 2155:C2,320|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000218078000082e3000c82d7000082a30008829500007ecba378556bf80140a20010800d00347c0803a64e8000217c16a00040820010386000017f2803a64e800020973bfffc80030010941bfffc82630014386000013b130000801800007c0803a64e800021546bf80140a20010800d00347c0803a64e8000212c0300014080000848000030825b0000823200007c6b8838556bf80140a20010800d00347c0803a64e8000217c03880040800008480000183c6002a0606395e0800d00287c0803a64e800021398000025460f80140a20010800d00347c0803a64e8000217e03661541a3fff0560c083a7df2602e3a4f000081d20000814e0000280a00014082000c39200003480000083920000169230002813b00047d2803a63b7b00084e800020|@2156,1048575|208,3,@51 2156:S57|5072657474795072696e7465722e7072657474795072696e74283329736574546f6b656e53697a65283129746f704e6f74426567696e283129 2157:O2|@211,1 2158:C2,408|7f2802a66339000282f80000546bf80140a20010800d00347c0803a64e8000212c030001408000084800003082d7001082b600007c6ba838556bf80140a20010800d00347c0803a64e8000217c03a8004080000848000020973bfffc3aa300003c6002a0606395e0800d00287c0803a64e800021398000025460f80140a20010800d00347c0803a64e8000217ea3661541a3fff056ac083a7e96602e3ad4000082b7001882950000827600043994ffff7e6ba0385560f80140a20010800d00347c0803a64e8000217e53661541a3fff0398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a9d0004919d0000925400048256000092540000546bf80140a20010800d00347c0803a64e8000212c030001408000084800003082370010821100007c6b8038556bf80140a20010800d00347c0803a64e8000217c038000408000084800001c973bfffc3c6002a0606395e0800d00287c0803a64e800021398000025460f80140a20010800d00347c0803a64e8000217e03661541a3fff0560b083a7e91592e386000017f2803a64e800020|@2159,1047553|96,3,@51 336,3,@51 2159:S56|5072657474795072696e7465722e7072657474795072696e74283329736574546f6b656e53697a6528312961646a75737453697a65283129 2160:S43|5072657474795072696e7465722e7072657474795072696e74283329736574546f6b656e53697a65283129 2161:C2,888|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021706b00014182000c3ae000034800001081830000558c083c6197000182d8001882b6000082980014827400007eab9b78556bf80140a20010800d00347c0803a64e8000217c15980040820050398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d0000907500043a60fffd92750000389700003875000083180004801800007c0903a67f2803a64e800420398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a5d0004919d0000907200043a20fffd92320000973bfffc971bfffc96fbfffc38b70000389700003872000083180030801800007c0803a64e800021821b000481f0002c81cf000081500028812a00007dcb4b78556bf80140a20010800d00347c0803a64e8000217c0e4800418202248110002480e8000080d0002080a600003985ffff7ceb28385560f80140a20010800d00347c0803a64e8000217c8c3c1141a3fff08070001c832300007c8bc838556bf80140a20010800d00347c0803a64e8000217c04c800408101c88310001882f8000082d0001482b600007eebab78556bf80140a20010800d00347c0803a64e8000217c17a800418201983860000183100010801800007c0803a64e800021829b0004546bf80140a20010800d00347c0803a64e8000212c03000140800008480000308274000c825300007c6b9038556bf80140a20010800d00347c0803a64e8000217c039000408000084800001c3a4300003c6002a0606395e0800d00287c0803a64e800021398000025460f80140a20010800d00347c0803a64e8000217e23661541a3fff0562c083a7e13602e3a700000398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002139fd0004919d000039c007cf91cf000481530000914f0000546bf80140a20010800d00347c0803a64e8000212c03000140800008480000308134000c810900007c6b4038556bf80140a20010800d00347c0803a64e8000217c03400040800008480000183c6002a0606395e0800d00287c0803a64e800021398000025460f80140a20010800d00347c0803a64e8000217ce3661541a3fff054eb083a7de9592e3860000183140008801800007c0803a64e800021800d00187c1b004040a00010800d00207c0803a64e8000214bfffdb038600001811b00087d0803a63b7b000c4e800020|@2162,1048575|568,3,@51 760,3,@51 2162:S40|5072657474795072696e7465722e7072657474795072696e74283329616464537472696e67283129 2163:C2,336|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8002482d7000082b80020829500007ecba378556bf80140a20010800d00347c0803a64e8000217c16a0004082003482d8001c3a80000192960000829800043a60000192740000827800183a40000192530000825800103a20000192320000973bfffc971bfffc947bfffc949bfffc3860000183180014801800007c0803a64e800021398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a7d0004919d0000825b000092530008823b0004923300043a00ffff9213000081fb000881cf0010814e0000398000025540f80140a20010800d00347c0803a64e8000217d2a641141a3fff038b100003889000038730000830f000c801800007c0803a64e800021811b000880e800048067000083080008833b000c801800007c0903a67f2803a63b7b00104e800420|@2164,1048575| 2164:S36|5072657474795072696e7465722e7072657474795072696e74283329627265616b283229 2165:C2,96|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180780008398000025460f80140a20010800d00347c0803a64e8000217ee3661541a3fff0388000013877000083180004801800007c0903a67f2803a64e800420|@2166,1048575| 2166:S40|5072657474795072696e7465722e7072657474795072696e742833296c696e65427265616b283129 2167:C2,160|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180780010398000025460f80140a20010800d00347c0803a64e8000217ee3661541a3fff0973bfffc971bfffc38800001387700008318000c801800007c0803a64e80002182db00003860000183160008801800007c0803a64e80002182bb00003860000183150004833b0004801800007c0903a67f2803a63b7b00084e800420|@2168,1048575| 2168:S40|5072657474795072696e7465722e7072657474795072696e74283329656e6453747265616d283129 2169:C2,340|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8002482d700003980000256c0f80140a20010800d00347c0803a64e8000217eb6661541a3fff092b7000082d8002082b600008298001c827400007eab9b78556bf80140a20010800d00347c0803a64e8000217c1598004082003482b800183a60000192750000827800043a40000192530000825800143a20000192320000823800103a00000192110000398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a5d0004919d000090920008907200043a200001923200008218001080900000398000025480f80140a20010800d00347c0803a64e8000217c64641141a3fff0973bfffc971bfffc38a0000138830000387200008318000c801800007c0803a64e800021833b0000831900048078000083190008833b0004801800007c0903a67f2803a63b7b00084e800420|@2170,1048575| 2170:S41|5072657474795072696e7465722e7072657474795072696e74283329626567696e426c6f636b283229 2171:C2,388|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000218078002c82e3000082d8002882b600007eebab78556bf80140a20010800d00347c0803a64e8000217c17a8004082002c973bfffc971bfffc388000013c6002a06063c45083180018801800007c0803a64e80002148000048973bfffc971bfffc38a000013880ffff3c6002a06063c45083180024801800007c0803a64e800021829b00008274001c8073000083140020801800007c0803a64e800021825b00008232001482110000398000025600f80140a20010800d00347c0803a64e8000217dec841141a3fff091f1000081d100002c0e00014082007c81520010398000025540f80140a20010800d00347c0803a64e8000217d2a661541a3fff038800001386900008312000c801800007c0803a64e800021811b00003860000183080008801800007c0803a64e80002180fb00003860000183070004833b0004801800007c0903a67f2803a63b7b00084e80042038600001815b00047d4803a63b7b00084e800020|@2172,1048575|92,3,@211 136,3,@211 2172:S39|5072657474795072696e7465722e7072657474795072696e74283329656e64426c6f636b283129 2173:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@2174,1048575| 2174:S36|5072657474795072696e7465722e7072657474795072696e74283329627265616b283129 2175:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@2176,1048575| 2176:S41|5072657474795072696e7465722e7072657474795072696e74283329626567696e426c6f636b283129 2177:O1|@2178 2178:C2,8|386000014e800020|@2179,524289| 2179:S38|5072657474795072696e7465722e7072657474795072696e74283329656c6964696e67283129 2180:S28|5072657474795072696e7465722e7072657474795072696e74283329 2181:S28|5072657474795072696e7465722e7072657474795072696e74283129 2182:O16|@1869,I204,I15,@1112,@1115,@1118,@1121,@1111,@1875,@2184,@2183,@1125,0,64,I47,@1866 2183:O1|@2187 2184:O1|@2185 2185:C2,40|8983fffc558c083c6198000173030081280300814082000c386000034e800020386000014e800020|@2186,786433| 2186:S20|416464726573732e69734d757461626c65283129 2187:C2,28|8303000082e3000482c3000856eb083a7ed8592e386000014e800020|@1871,983041| 2188:O1|@2189 2189:O1|@2190 2190:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180830004806300003c0002a66000afc07c0903a64e800420|@758,1032195|40,3,@2191 2191:C2,944|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000217c0320404082000c386000034e800020706b00014182000c386000014e800020708b00014182000c386000014e8000208183fffc558c09fc619800018184fffc558c09fc619700017c18b8404182000c386000014e8000208983fffc558c083c619700018984fffc558c083c619600017ef5b37872b70081281700014182000c386000014e80002072b600032816000141820158570bf80140a20010800d00347c0803a64e8000212c180001408000343ee002a062f7c2743998ffff7eebc0385560f80140a20010800d00347c0803a64e8000217eb7661541a3fff0480000083ab800003b0000093998ffff7eabc0385560f80140a20010800d00347c0803a64e8000217eab0e707eec5dd741a3ffec3af7000172eb00014182000c3ad700004800002c3ac30000387700003f00000063185368801800007c0803a64e8000213ab600003ac3000038750000973bfffc947bfffc949bfffc96dbfffc3b00000182fb00007c18b840408200183860000382db000c7ec803a63b7b00104e80002082db00087f0c0e707d7660ae556b083c61750001809b00047f0c0e707d6460ae556b083c616300017c151840408200283b3800023b190000800d00187c1b004040a00010800d00207c0803a64e8000214bffff9038600001833b000c7f2803a63b7b00104e8000202c1800034082001882a300008064000038830000387500004bfffde82c180005408200c882a300008303000482e4000082c4000472ab0001418200207c15b8404082001038960000387800004bfffdb4386000014e80002072eb00014182000c386000014e800020730b0001418200207c18b0404082001038970000387500004bfffd80386000014e80002072cb00014182000c386000014e800020973bfffc971bfffc96dbfffc38970000387500004bfffd49280300014182001c809b0000807b0004833b00087f2803a63b7b000c4bfffd303860000182bb00087ea803a63b7b000c4e8000203ab8fffe973bfffc947bfffc949bfffc2c1500014082000c3a80000348000060809b000456ac083a7c64602e833b000056ac083a7f19602e96bbfffc389800004bfffcd1280300014182002c82fb00003ab7fffe3b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffffa03a8000013b7b0004281400014182002c82fb000482d7000082bb0000829500003894000038760000833b00087f2803a63b7b000c4bfffc703860000182fb00087ee803a63b7b000c4e800020|@757,1032195|208,3,@180 332,3,I152 2192:O1|@2486 2193:O2|@2194,0 2194:O1|@2195 2195:C2,24|280300014082000c386000034e800020386000014e800020|@2196,524289| 2196:S11|4d61796265496e6c696e65 2197:O2|@2198,-1 2198:O1|@2199 2199:C2,28|3b00ffff7c1818404082000c386000034e800020386000014e800020|@2200,786433| 2200:S9|4e6f6e496e6c696e65 2201:O2|@2202,1 2202:O1|@2203 2203:C2,24|280300034082000c386000034e800020386000014e800020|@2204,524289| 2204:S10|4f6e6c79496e6c696e65 2205:O2|@2206,-2 2206:O1|@2207 2207:C2,28|3b00fffd7c1818404082000c386000034e800020386000014e800020|@2208,786433| 2208:S13|536d616c6c46756e6374696f6e 2209:O3|@2211,@2214,@2210 2210:O1|@2216 2211:O1|@2212 2212:C2,28|83030000281800014082000c386000034e800020386000014e800020|@2213,786433| 2213:S8|416c744d61746368 2214:O1|@2215 2215:C2,76|7f2802a6633900028303000082e30004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092e30008930300043b000001930300007f2803a64e800020|@2213,917505| 2216:C2,68|7f2802a6633900028303000482e30008398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092e30004930300007f2803a64e800020|@2213,917505| 2217:O3|@2219,@2222,@2218 2218:O1|@2224 2219:O1|@2220 2220:C2,32|3b00ffff82e300007c18b8404082000c386000034e800020386000014e800020|@2221,917505| 2221:S9|426567696e4c6f6f70 2222:O1|@2223 2223:C2,76|7f2802a6633900028303000082e30004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092e30008930300043b00ffff930300007f2803a64e800020|@2221,917505| 2224:C2,68|7f2802a6633900028303000482e30008398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092e30004930300007f2803a64e800020|@2221,917505| 2225:O3|@2227,@2230,@2226 2226:O1|@2232 2227:O1|@2228 2228:C2,28|83030000281800034082000c386000034e800020386000014e800020|@2229,786433| 2229:S4|43617365 2230:O1|@2231 2231:C2,68|7f2802a6633900023b030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000930300043b000003930300007f2803a64e800020|@2229,786433| 2232:C2,8|806300044e800020|@2229,524289| 2233:O2|@2234,@886 2234:O1|@2235 2235:C2,32|3b00fffd82e300007c18b8404082000c386000034e800020386000014e800020|@2236,917505| 2236:S7|436f64654e696c 2237:O3|@2239,@2242,@2238 2238:O1|@2244 2239:O1|@2240 2240:C2,28|83030000281800054082000c386000034e800020386000014e800020|@2241,786433| 2241:S4|436f6e64 2242:O1|@2243 2243:C2,84|7f2802a6633900028303000082e3000482c30008398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d000092c3000c92e30008930300043b000005930300007f2803a64e800020|@2241,983041| 2244:C2,76|7f2802a6633900028303000482e3000882c3000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092c3000892e30004930300007f2803a64e800020|@2241,983041| 2245:O3|@2247,@2250,@2246 2246:O1|@2252 2247:O1|@2248 2248:C2,32|3b00fffb82e300007c18b8404082000c386000034e800020386000014e800020|@2249,917505| 2249:S7|436f6e73746e74 2250:O1|@2251 2251:C2,68|7f2802a6633900023b030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000930300043b00fffb930300007f2803a64e800020|@2249,786433| 2252:C2,8|806300044e800020|@2249,524289| 2253:O3|@2255,@2258,@2254 2254:O1|@2260 2255:O1|@2256 2256:C2,28|83030000281800074082000c386000034e800020386000014e800020|@2257,786433| 2257:S9|436f6e7461696e6572 2258:O1|@2259 2259:C2,68|7f2802a6633900023b030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000930300043b000007930300007f2803a64e800020|@2257,786433| 2260:C2,8|806300044e800020|@2257,524289| 2261:O3|@2263,@2266,@2262 2262:O1|@2268 2263:O1|@2264 2264:C2,32|3b00fff982e300007c18b8404082000c386000034e800020386000014e800020|@2265,917505| 2265:S6|4465636c6172 2266:O1|@2267 2267:C2,84|7f2802a6633900028303000082e3000482c30008398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d000092c3000c92e30008930300043b00fff9930300007f2803a64e800020|@2265,983041| 2268:C2,76|7f2802a6633900028303000482e3000882c3000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092c3000892e30004930300007f2803a64e800020|@2265,983041| 2269:O3|@2271,@2274,@2270 2270:O1|@2276 2271:O1|@2272 2272:C2,28|83030000281800094082000c386000034e800020386000014e800020|@2273,786433| 2273:S4|4576616c 2274:O1|@2275 2275:C2,84|7f2802a6633900028303000082e3000482c30008398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d000092c3000c92e30008930300043b000009930300007f2803a64e800020|@2273,983041| 2276:C2,76|7f2802a6633900028303000482e3000882c3000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092c3000892e30004930300007f2803a64e800020|@2273,983041| 2277:O3|@2279,@2282,@2278 2278:O1|@2284 2279:O1|@2280 2280:C2,32|3b00fff782e300007c18b8404082000c386000034e800020386000014e800020|@2281,917505| 2281:S7|45787472616374 2282:O1|@2283 2283:C2,92|7f2802a6633900028303000082e3000482c3000882a3000c398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a3001092c3000c92e30008930300043b00fff7930300007f2803a64e800020|@2281,1015809| 2284:C2,84|7f2802a6633900028303000482e3000882c3000c82a30010398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a3000c92c3000892e30004930300007f2803a64e800020|@2281,1015809| 2285:O3|@2287,@2290,@2286 2286:O1|@2292 2287:O1|@2288 2288:C2,28|830300002818000b4082000c386000034e800020386000014e800020|@2289,786433| 2289:S6|476c6f62616c 2290:O1|@2291 2291:C2,68|7f2802a6633900023b030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000930300043b00000b930300007f2803a64e800020|@2289,786433| 2292:C2,8|806300044e800020|@2289,524289| 2293:O3|@2295,@2298,@2294 2294:O1|@2300 2295:O1|@2296 2296:C2,32|3b00fff582e300007c18b8404082000c386000034e800020386000014e800020|@2297,917505| 2297:S6|48616e646c65 2298:O1|@2299 2299:C2,84|7f2802a6633900028303000082e3000482c30008398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d000092c3000c92e30008930300043b00fff5930300007f2803a64e800020|@2297,983041| 2300:C2,76|7f2802a6633900028303000482e3000882c3000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092c3000892e30004930300007f2803a64e800020|@2297,983041| 2301:O3|@2303,@2306,@2302 2302:O1|@2308 2303:O1|@2304 2304:C2,28|830300002818000d4082000c386000034e800020386000014e800020|@2305,786433| 2305:S8|496e646972656374 2306:O1|@2307 2307:C2,76|7f2802a6633900028303000082e30004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092e30008930300043b00000d930300007f2803a64e800020|@2305,917505| 2308:C2,68|7f2802a6633900028303000482e30008398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092e30004930300007f2803a64e800020|@2305,917505| 2309:O3|@2311,@2314,@2310 2310:O1|@2316 2311:O1|@2312 2312:C2,32|3b00fff382e300007c18b8404082000c386000034e800020386000014e800020|@2313,917505| 2313:S6|4c616d626461 2314:O1|@2315 2315:C2,68|7f2802a6633900023b030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000930300043b00fff3930300007f2803a64e800020|@2313,786433| 2316:C2,8|806300044e800020|@2313,524289| 2317:O2|@2319,@2318 2318:O1|7 2319:O1|@2320 2320:C2,28|830300002818000f4082000c386000034e800020386000014e800020|@2321,786433| 2321:S5|4c64657863 2322:O3|@2324,@2327,@2323 2323:O1|@2329 2324:O1|@2325 2325:C2,32|3b00fff182e300007c18b8404082000c386000034e800020386000014e800020|@2326,917505| 2326:S4|4c6f6f70 2327:O1|@2328 2328:C2,68|7f2802a6633900023b030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000930300043b00fff1930300007f2803a64e800020|@2326,786433| 2329:C2,8|806300044e800020|@2326,524289| 2330:O2|@2332,@2331 2331:O1|8 2332:O1|@2333 2333:C2,28|83030000281800114082000c386000034e800020386000014e800020|@2334,786433| 2334:S9|4d617463684661696c 2335:O3|@2337,@2340,@2336 2336:O1|@2342 2337:O1|@2338 2338:C2,32|3b00ffef82e300007c18b8404082000c386000034e800020386000014e800020|@2339,917505| 2339:S10|4d757475616c44656373 2340:O1|@2341 2341:C2,68|7f2802a6633900023b030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000930300043b00ffef930300007f2803a64e800020|@2339,786433| 2342:C2,8|806300044e800020|@2339,524289| 2343:O3|@2345,@2348,@2344 2344:O1|@2350 2345:O1|@2346 2346:C2,28|83030000281800134082000c386000034e800020386000014e800020|@2347,786433| 2347:S6|4e6577656e76 2348:O1|@2349 2349:C2,68|7f2802a6633900023b030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000930300043b000013930300007f2803a64e800020|@2347,786433| 2350:C2,8|806300044e800020|@2347,524289| 2351:O3|@2353,@2356,@2352 2352:O1|@2358 2353:O1|@2354 2354:C2,32|3b00ffed82e300007c18b8404082000c386000034e800020386000014e800020|@2355,917505| 2355:S5|5261697365 2356:O1|@2357 2357:C2,68|7f2802a6633900023b030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000930300043b00ffed930300007f2803a64e800020|@2355,786433| 2358:C2,8|806300044e800020|@2355,524289| 2359:O3|@2361,@2364,@2360 2360:O1|@2366 2361:O1|@2362 2362:C2,28|83030000281800154082000c386000034e800020386000014e800020|@2363,786433| 2363:S9|526563636f6e737472 2364:O1|@2365 2365:C2,68|7f2802a6633900023b030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000930300043b000015930300007f2803a64e800020|@2363,786433| 2366:C2,8|806300044e800020|@2363,524289| 2367:O3|@2369,@2372,@2368 2368:O1|@2374 2369:O1|@2370 2370:C2,32|3b00ffeb82e300007c18b8404082000c386000034e800020386000014e800020|@2371,917505| 2371:S12|536574436f6e7461696e6572 2372:O1|@2373 2373:C2,84|7f2802a6633900028303000082e3000482c30008398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d000092c3000c92e30008930300043b00ffeb930300007f2803a64e800020|@2371,983041| 2374:C2,76|7f2802a6633900028303000482e3000882c3000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092c3000892e30004930300007f2803a64e800020|@2371,983041| 2375:O3|@2377,@2380,@2376 2376:O1|@2382 2377:O1|@2378 2378:C2,28|83030000281800174082000c386000034e800020386000014e800020|@2379,786433| 2379:S18|5475706c6546726f6d436f6e7461696e6572 2380:O1|@2381 2381:C2,76|7f2802a6633900028303000082e30004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092e30008930300043b000017930300007f2803a64e800020|@2379,917505| 2382:C2,68|7f2802a6633900028303000482e30008398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092e30004930300007f2803a64e800020|@2379,917505| 2383:O3|@2385,@2388,@2384 2384:O1|@2390 2385:O1|@2386 2386:C2,28|83030000281800014082000c386000034e800020386000014e800020|@2387,786433| 2387:S10|4a75737454686556616c 2388:O1|@2389 2389:C2,68|7f2802a6633900023b030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000930300043b000001930300007f2803a64e800020|@2387,786433| 2390:C2,8|806300044e800020|@2387,524289| 2391:O3|@2393,@2396,@2392 2392:O1|@2398 2393:O1|@2394 2394:C2,32|3b00ffff82e300007c18b8404082000c386000034e800020386000014e800020|@2395,917505| 2395:S6|4f707456616c 2396:O1|@2397 2397:C2,68|7f2802a6633900023b030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000930300043b00ffff930300007f2803a64e800020|@2395,786433| 2398:C2,8|806300044e800020|@2395,524289| 2399:O3|@2401,@2404,@2400 2400:O1|@2406 2401:O1|@2402 2402:C2,28|83030000281800034082000c386000034e800020386000014e800020|@2403,786433| 2403:S11|56616c5769746844656373 2404:O1|@2405 2405:C2,76|7f2802a6633900028303000082e30004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092e30008930300043b000003930300007f2803a64e800020|@2403,917505| 2406:C2,68|7f2802a6633900028303000482e30008398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092e30004930300007f2803a64e800020|@2403,917505| 2407:O1|@2408 2408:C2,64|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180830004806300003f0002a66318d02c3c0002a66000d0447c0903a64e800420|@2485,1048575|40,3,@2409 48,3,@2411 2409:O2|@2411,@2410 2410:O2|@2483,@2409 2411:C2,6020|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021949bfffc971bfffc82e300002c17fffd408200203c6002a66063e7e48304000c801800007c0903a63b7b00084e8004202c170011408200203c6002a66063e7f08304000c801800007c0903a63b7b00084e8004202c1700014082003c973bfffc3ca002a660a5e80480830008806300043b1b00083c0002a66000e8147c0803a64e80002182db00007ec803a63b7b000c4e8000202c170009408200ec973bfffc80030004941bfffc80030008941bfffc8003000c941bfffc3c6002a66063e9d883040018801800007c0803a64e800021809b0014807b0004831b00104bffff0582db00143c6002a16063f65883160000801800007c0803a64e80002182bb0000281500014182003c829b00143c6002a66063e9e48314000c801800007c0803a64e800021827b00143c6002a16063f65883130000801800007c0803a64e80002138a00049809b0008386000593b1b00143c0002a66000e9f47c0803a64e800021829b00143860000183140008833b000c801800007c0903a67f2803a63b7b00184e8004202c17fff9408201b0973bfffc80030004941bfffc80030008941bfffc8003000c941bfffc3c6002a06063ee1483040018801800007c0803a64e80002182db00148016000c941bfffc3880ffff807b000c3c0002a06000fe6c7c0803a64e800021947bfffc3880ffff807b00083c0002a06000fe6c7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003e8002a66294ed889295000490750000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a7d0004919d000092b300043a4000f792530000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a3d0004919d000092710004821b000092110000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000922300043de002a661efeda491e300003c0002a1600005347c0803a64e800021831b0004801800007c0803a64e80002181db001c3c6002a06063ee14830e0000801800007c0803a64e800021809b001c807b000c831b00184bfffcd1815b001c38600001830a0008833b0014801800007c0903a67f2803a63b7b00204e8004202c17fff74082048882c3001028160001418200103ea002a662b5edb44800000c3ea0000062b54668828300082814000140820158973bfffc80030004941bfffc96bbfffc3880ffff8063000c3c0002a06000fe6c7c0803a64e800021947bfffc3880ffff807b00083c0002a06000fe6c7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a5d0004919d00003e2002a66231edc492320004821b000492120000398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002139fd0004919d0000924f0004906f0000398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002139dd0004919d000091ee000439400059914e0000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021393d0004919d000091c90004811b000091090000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000912300043ce002a660e7edd090e300003c0002a1600005347c0803a64e8000213a630000480002e482630004566bf80140a20010800d00347c0803a64e8000212c13000140800178973bfffc967bfffc96bbfffc3880ffff8063000c3c0002a06000fe6c7c0803a64e800021825b0004398000025640f80140a20010800d00347c0803a64e8000217e32641141a3fff0947bfffc3880ffff387100003c0002a06000fe6c7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a1d0004919d00003de002a661efedc491f0000481db000491d00000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021395d0004919d0000920a0004906a0000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021393d0004919d0000914900043900005991090000398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138fd0004919d00009127000480db000090c70000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000090e300043ca002a660a5ede090a300003c0002a1600005347c0803a64e8000213a63000048000150973bfffc967bfffc96bbfffc3880ffff8063000c3c0002a06000fe6c7c0803a64e800021947bfffc3880ffff807b00083c0002a06000fe6c7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a5d0004919d00003e2002a66231edc492320004821b000492120000398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002139fd0004919d0000924f0004906f0000398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002139dd0004919d000091ee000439400059914e0000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021393d0004919d000091c90004811b000091090000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000912300043ce002a660e7edf090e300003c0002a1600005347c0803a64e8000213a63000080db0014387300008306000c833b000c801800007c0903a67f2803a63b7b00184e8004202c17000d408200a4973bfffc80030004941bfffc3880ffff806300083c0002a06000fe6c7c0803a64e800021388300003c6002a66063ee003c0002a1600074a87c0803a64e8000213c8002a66084e9a03c0002a1600074a87c0803a64e80002182db000c8316000c801800007c0803a64e800021809b000c807b0000831b00084bfff79d82bb000c386000538315000c833b0004801800007c0903a67f2803a63b7b00104e8004202c17fff34082031c82c30004829600142c14ffff408200103ea0000062b54668480000342c140001408200103ea002a662b5ee14480000202c14fffd408200103ea002a662b5ee244800000c3ea002a662b5ee34973bfffc80160000941bfffc80160004941bfffc80160008941bfffc8016000c941bfffc80160010941bfffc80160018941bfffc8016001c941bfffc96bbfffc3c6002a66063e99483040018801800007c0803a64e800021827b00288013000c941bfffc809b00043c6002a66063ee483c0002a1600074a87c0803a64e800021388000513c0002a1600074a87c0803a64e800021831b0000801800007c0803a64e800021825b002c3c6002a06063ee1483120000801800007c0803a64e800021823b002c807b001c8311000c801800007c0803a64e800021821b002c3c6002a06063ee1483100000801800007c0803a64e80002181fb002c815b00082c0a0003408200103dc002a061cec4444800000c3dc002a661ceee58800f000c941bfffc388e00003c6002a66063ee683c0002a1600074a87c0803a64e800021831b0000801800007c0803a64e800021813b00308009000c941bfffc3880ffff807b00143c0002a06000fe6c7c0803a64e800021388300003c6002a66063ee743c0002a1600074a87c0803a64e800021831b0000801800007c0803a64e800021811b00348008000c941bfffc3880ffff807b00243c0002a06000fe6c7c0803a64e800021388300003c6002a66063ee803c0002a1600074a87c0803a64e800021831b0000801800007c0803a64e80002180fb00388007000c941bfffc3880ffff807b00203c0002a06000fe6c7c0803a64e800021388300003c6002a66063ee903c0002a1600074a87c0803a64e800021831b0000801800007c0803a64e8000213ca002a660a5eea0809b0024386000593b1b003c3c0002a66000e9f47c0803a64e80002180db003c3c6002a06063ee1483060000801800007c0803a64e800021809b003c807b0030831b00384bfff49980bb003c3c6002a66063eeb08305000c801800007c0803a64e800021809b003c3860000183040008833b0034801800007c0903a67f2803a63b7b00404e8004202c17fffb4082005c973bfffc8004000c941bfffc806300043c0002a66000eec47c0803a64e800021388300003c6002a66063f2f83c0002a1600074a87c0803a64e800021831b0000833b0004801800007c0903a67f2803a63b7b00104e8004202c17000540820040973bfffc3cc002a660c6f30480a3000c80830008806300043b1b00083c0002a66000f3107c0803a64e80002182db00007ec803a63b7b000c4e8000202c1700134082003c973bfffc3ca002a660a5f52080830004386000773b1b00083c0002a66000e9f47c0803a64e80002182db00007ec803a63b7b000c4e8000202c17ffff4082010c973bfffc80030004941bfffc80030008941bfffc3c6002a66063e9d883040018801800007c0803a64e8000213ca002a660a5f530809b0000386000593b1b00103c0002a66000e9f47c0803a64e80002182db00103c6002a16063f65883160000801800007c0803a64e80002182bb0010386000518315000c801800007c0803a64e800021829b00103c6002a16063f65883140000801800007c0803a64e800021809b0010807b0004831b000c4bfff2bd827b00103c6002a16063f65883130000801800007c0803a64e800021825b0010386000538312000c801800007c0803a64e800021823b00103860000183110008833b0008801800007c0903a67f2803a63b7b00144e8004202c17fff14082003c973bfffc3ca002a660a5f54480830004386000593b1b00083c0002a66000e9f47c0803a64e80002182db00007ec803a63b7b000c4e8000202c17ffed408200c8973bfffc80030004941bfffc3c6002a66063e99483040018801800007c0803a64e80002182db000c8016000c941bfffc388000513c6002a66063f5503c0002a1600074a87c0803a64e800021831b0000801800007c0803a64e800021809b0010807b0004831b000c4bfff1b182bb00103c6002a16063f65883150000801800007c0803a64e800021829b0010386000538314000c801800007c0803a64e800021827b00103860000183130008833b0008801800007c0903a67f2803a63b7b00144e8004202c17fff5408200e0973bfffc80030004941bfffc80030008941bfffc3c6002a66063e9d883040018801800007c0803a64e80002182db00103c6002a66063f5608316000c801800007c0803a64e800021809b0010807b0004831b000c4bfff0f982bb00103c6002a66063f5708315000c801800007c0803a64e800021829b00103c6002a06063ee1483140000801800007c0803a64e800021809b0010807b0000831b000c4bfff0b1827b0010386000538313000c801800007c0803a64e800021825b00103860000183120008833b0008801800007c0903a67f2803a63b7b00144e8004202c17000f408200203c6002a66063f57c8304000c801800007c0903a63b7b00084e8004202c170003408203bc82c30004973bfffc80160000941bfffc80160004941bfffc80160008941bfffc8016000c941bfffc80160010941bfffc3c6002a66063e99483040018801800007c0803a64e80002182bb001c8015000c941bfffc3880ffff807b00103c0002a06000fe6c7c0803a64e800021947bfffc3880ffff807b00183c0002a06000fe6c7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a9d0004919d00003e6002a66273f58c9274000490740000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a5d0004919d0000929200043a20005b92320000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a1d0004919d00009250000481fb000091f00000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000920300043dc002a661cef59891c300003c0002a1600005347c0803a64e800021831b0004801800007c0803a64e800021809b0024807b0010831b00204bffeec9815b002438600053830a000c801800007c0803a64e800021813b00243c6002a06063ee1483090000801800007c0803a64e800021811b0024386000518308000c801800007c0803a64e80002180fb00243c6002a06063ee1483070000801800007c0803a64e800021398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002138dd0004919d00003ca002a660a5f5a890a60000809b002090860008807b002490660004398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d00003f0002a66318f7209319000090d9000480bb000c38800059387900003b1b00243c0002a66000ebe07c0803a64e80002182fb000882d700002c16fffd408200084800009c82bb00243c6002a06063ee1483150000801800007c0803a64e800021829b00243c6002a06063ee1483140018801800007c0803a64e800021827b00243c6002a66063f7988313000c801800007c0803a64e800021825b00243c6002a06063ee1483120000801800007c0803a64e800021809b0024807b0008831b00204bffed39823b00243860000183110008801800007c0803a64e800021821b00243c6002a06063ee1483100000801800007c0803a64e80002181fb0024800f000c941bfffc3c8002a66084f7a83c6002a66063f7b43c0002a1600074a87c0803a64e800021388000fb3c0002a1600074a87c0803a64e800021831b0000801800007c0803a64e80002181db002838600001830e0008833b0020801800007c0903a67f2803a63b7b002c4e8004202c17ffef40820040973bfffc3ca002a660a5f7c0808300043c6002a66063f7d03b1b00083c0002a66000e9f47c0803a64e80002182db00007ec803a63b7b000c4e8000202c1700154082003c973bfffc3ca002a660a5f7e080830004386000593b1b00083c0002a66000e9f47c0803a64e80002182db00007ec803a63b7b000c4e8000202c17000740820060973bfffc8004000c941bfffc3880ffff806300043c0002a06000fe6c7c0803a64e800021388300003c6002a66063f7f43c0002a1600074a87c0803a64e800021831b0000833b0004801800007c0903a67f2803a63b7b00104e8004202c17ffeb40820168973bfffc80030004941bfffc80030008941bfffc8003000c941bfffc3c6002a66063e9d883040018801800007c0803a64e80002182db00148016000c941bfffc3880ffff807b000c3c0002a06000fe6c7c0803a64e800021388300003c6002a66063f8083c0002a1600074a87c0803a64e8000213c8002a66084e9a03c0002a1600074a87c0803a64e800021831b0000801800007c0803a64e800021809b0018807b0004831b00144bffeaf582bb00183c6002a16063f65883150000801800007c0803a64e800021829b0018386000598314000c801800007c0803a64e800021827b00183c6002a06063ee1483130000801800007c0803a64e800021809b0018807b0008831b00144bffea95825b00183c6002a16063f65883120000801800007c0803a64e800021823b0018386000538311000c801800007c0803a64e800021821b00183860000183100008833b0010801800007c0903a67f2803a63b7b001c4e8004202c1700174082011c973bfffc80030004941bfffc80030008941bfffc3c6002a66063e9d883040018801800007c0803a64e80002182db00108016000c941bfffc3880ffff807b00043c0002a06000fe6c7c0803a64e800021388300003c6002a66063f8203c0002a1600074a87c0803a64e8000213c8002a66084e9a03c0002a1600074a87c0803a64e800021831b0000801800007c0803a64e80002182bb00143c6002a16063f65883150000801800007c0803a64e800021809b0014807b0008831b00104bffe975829b00143c6002a16063f65883140000801800007c0803a64e800021827b0014386000538313000c801800007c0803a64e800021825b00143860000183120008833b000c801800007c0903a67f2803a63b7b00184e800420973bfffc80030004941bfffc3c6002a66063e99483040018801800007c0803a64e80002182db000c3c6002a66063f8388316000c801800007c0803a64e80002182bb0008809b000c807b000083150004801800007c0803a64e800021829b000c3c6002a66063f8488314000c801800007c0803a64e800021827b000c3860000183130008833b0004801800007c0903a67f2803a63b7b00104e800420|@2482,1048575|52,3,@2412 88,3,@2413 128,3,@2414 148,3,@2415 216,3,@2419 260,3,@711 300,3,@2420 328,3,@711 368,3,@2421 456,3,@265 500,3,@316 528,3,@316 580,3,@2427 732,3,@2429 744,3,@325 780,3,@265 876,3,@2430 888,3,I48 932,3,@316 960,3,@316 1012,3,@2431 1212,3,@2432 1224,3,@325 1300,3,@316 1364,3,@316 1416,3,@2431 1616,3,@2433 1628,3,@325 1672,3,@316 1700,3,@316 1752,3,@2431 1952,3,@2434 1964,3,@325 2048,3,@316 2068,3,@2435 2076,3,@511 2092,3,@2417 2100,3,@511 2212,3,I48 2232,3,@2436 2252,3,@2437 2264,3,@2438 2336,3,@2416 2376,3,@2439 2384,3,@511 2404,3,@511 2440,3,@265 2492,3,@265 2532,3,@210 2544,3,@2440 2564,3,@2441 2572,3,@511 2624,3,@316 2644,3,@2442 2652,3,@511 2704,3,@316 2724,3,@2443 2732,3,@511 2784,3,@316 2804,3,@2444 2812,3,@511 2844,3,@2445 2864,3,@2421 2884,3,@265 2928,3,@2446 3012,3,@2447 3032,3,@2454 3040,3,@511 3096,3,@2455 3120,3,@2456 3164,3,@2458 3184,3,@2421 3244,3,@2419 3268,3,@2459 3288,3,@2421 3308,3,@711 3360,3,@711 3404,3,@711 3500,3,@2460 3520,3,@2421 3572,3,@2416 3612,3,@2461 3620,3,@511 3672,3,@711 3784,3,@2419 3812,3,@2462 3856,3,@2463 3884,3,@265 3992,3,@2464 4076,3,@2416 4120,3,@316 4148,3,@316 4200,3,@2465 4352,3,@2466 4364,3,@325 4440,3,@265 4492,3,@265 4552,3,@2467 4616,3,@2469 4648,3,@2424 4688,3,@265 4716,3,@265 4744,3,@2471 4772,3,@265 4840,3,@265 4876,3,@2472 4884,3,@2473 4892,3,@511 4912,3,@511 4992,3,@2474 5004,3,@2475 5016,3,@2421 5060,3,@2476 5080,3,@2421 5140,3,@316 5160,3,@2477 5168,3,@511 5248,3,@2419 5292,3,@316 5312,3,@2478 5320,3,@511 5336,3,@2417 5344,3,@511 5396,3,@711 5448,3,@265 5492,3,@711 5604,3,@2419 5648,3,@316 5668,3,@2479 5676,3,@511 5692,3,@2417 5700,3,@511 5736,3,@711 5780,3,@711 5876,3,@2416 5904,3,@2480 5960,3,@2481 2412:S3|4e494c 2413:S9|4d415443484641494c 2414:S8|414c544d41544348 2415:C2,356|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f80000973bfffc971bfffc947bfffc949bfffc94bbfffc3c6002a66063e99483170018801800007c0803a64e80002182db000c82b600008015000c941bfffc38800051807b00043c0002a1600074a87c0803a64e800021831b0000801800007c0803a64e800021829b001080940000807b000c8314fffc801800007c0803a64e800021827b0010825300003c6002a66063e9a08312000c801800007c0803a64e800021823b0010821100003c6002a16063f65883100000801800007c0803a64e80002181fb0010808f0000807b0008830ffffc801800007c0803a64e80002181db0010814e00003c6002a16063f658830a0000801800007c0803a64e800021813b001081090000386000538308000c801800007c0803a64e80002180fb001080c700003860000183060008833b0014801800007c0903a67f2803a63b7b00184e800420|@2418,1048575|56,3,@2416 104,3,@511 172,3,@2417 204,3,@711 264,3,@711 2416:O2|1,1 2417:S2|2c20 2418:S34|42617365436f6465547265652e7072657474792832297072696e7444696164283329 2419:O2|3,0 2420:S7|7b6561726c797d 2421:C2,336|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f80000973bfffc971bfffc947bfffc949bfffc94bbfffc3c6002a66063e99483170018801800007c0803a64e80002182db000c82b600008015000c941bfffc38800051807b00043c0002a1600074a87c0803a64e800021831b0000801800007c0803a64e800021829b0010398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a7d0004919d00003e4002a66252eb609253000082340000923300088214fffc9213000480bb0008809b000c387300003b1400003c0002a66000ebe07c0803a64e80002181fb001081cf00003c6002a16063f658830e0000801800007c0803a64e800021815b0010812a0000386000538309000c801800007c0803a64e800021811b001080e800003860000183070008833b0014801800007c0903a67f2803a63b7b00184e800420|@2426,1048575|56,3,@2416 104,3,@511 176,3,@2422 220,3,@2424 244,3,@711 2422:C2,52|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000218098000883180004801800007c0903a64e800420|@2423,1048575| 2423:S37|42617365436f6465547265652e7072657474792832297072696e744c697374283329283129 2424:C2,312|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0500014082000c386000014e80002082e500042c1700014082001c3ac30000806500003b160000801800007c0903a64e80042082d80000973bfffc971bfffc947bfffc949bfffc96fbfffc80050000941bfffc3c6002a16063f65883160018801800007c0803a64e800021807b0000831b000c801800007c0803a64e80002182bb0010829500003c6002a16063f65883140000801800007c0803a64e800021827b001082530000807b00088312000c801800007c0803a64e800021823b0010821100003860000183100008801800007c0803a64e80002181fb001081cf00003c6002a06063ee14830e0000801800007c0803a64e80002180bb0004809b0008807b000c831b0010833b00147f2803a63b7b00184bfffed4|@2425,1048575|116,3,@711 168,3,@711 256,3,@265 2425:S30|42617365436f6465547265652e707265747479283229704c697374283329 2426:S34|42617365436f6465547265652e7072657474792832297072696e744c697374283329 2427:O2|@2428,0 2428:S8|20757365737d203d 2429:S6|4445434c2023 2430:S6|2c206c617374 2431:O2|41,0 2432:S5|434c4f5328 2433:S6|504152414d28 2434:S6|4c4f43414c28 2435:S9|494e44495245435428 2436:S6|494e4c494e45 2437:S5|534d414c4c 2438:S10|4f4e4c59494e4c494e45 2439:S6|4c414d424441 2440:S5|66616c7365 2441:S3|434c3d 2442:S4|2043523d 2443:S5|204c45563d 2444:S6|20415247533d 2445:S6|20434c4f533d 2446:S9|297b4c414d4244417d 2447:C2,924|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021706b000141820098706b00014182000c3b0300004800001c973bfffc3c6002a1606330bc800d00287c0803a64e800021570bf80140a20010800d00347c0803a64e8000212c180001408000343c6002a06063c2743998ffff7c6bc0385560f80140a20010800d00347c0803a64e8000217ee3661541a3fff0480000083af8000038800003387700003c0002a06000fe6c7c0903a67f2803a64e800420706b000141820020973bfffc3ae300003c6002a66063f27c800d00287c0803a64e8000213b030000973bfffc947bfffc38980000386000cd3f00000063185328801800007c0803a64e80002128030001418200d03b2000012c190201408200183c6002a66063f28c800d00287c0803a64e800021973bfffc387900003f00000063185808801800007c0803a64e800021831b00047c181840408200443880ffff807b00003c0002a06000fe6c7c0803a64e800021388300003c6002a66063f2b8833b00083c0002a1600074a87c0903a67f2803a63b7b000c4e80042082fb00003980000256e0f80140a20010800d00347c0803a64e8000217f37661541a3fff03b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffff3c833b0000732b0001418200183c6002a66063f27c800d00287c0803a64e8000213b1900008998fffc558c083c6197000172f600072816000140820170732b0001418200183c6002a66063f27c800d00287c0803a64e8000213ab900008195fffc558c09fc61940001568bf80140a20010800d00347c0803a64e8000212c140001408000343e4002a06252c2743994ffff7e4ba0385560f80140a20010800d00347c0803a64e8000217e72661541a3fff0480000083a740000566bf80140a20010800d00347c0803a64e8000212c130003418000d8732b0001418200183c6002a66063f27c800d00287c0803a64e8000213a79000082530000724b000140820094724b0001418200183c6002a66063f27c800d00287c0803a64e8000213a3200008991fffc558c083c61900001720f0007280f00054082005c38920000386000d33f00000063185328801800007c0803a64e800021388300003c6002a3606340703c0002a1600074a87c0803a64e80002138800053833b00043c0002a1600074a87c0903a67f2803a63b7b00084e8004203c6002a66063f2c4823b00047e2803a63b7b00084e8000203c6002a66063f2c482bb00047ea803a63b7b00084e800020|@2453,1048575|60,3,@437 108,3,@180 168,3,@316 204,3,@2448 244,3,I150 284,3,@2449 312,3,I189 352,3,@316 372,3,@2451 384,3,@511 488,3,@2448 544,3,@2448 608,3,@180 696,3,@2448 740,3,@2448 796,3,I150 820,3,@1148 828,3,@511 852,3,@511 876,3,@2452 900,3,@2452 2448:O3|@9396,@439,@1123 2449:O3|@9377,@227,@2450 2450:S17|556e6b6e6f776e2052545320656e747279 2451:S4|20525453 2452:S6|3c6c6f6e673e 2453:S28|42617365436f6465547265652e737472696e674f66576f7264283129 2454:S3|4c4954 2455:S2|4946 2456:C2,456|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f80000973bfffc971bfffc947bfffc949bfffc94bbfffc94dbfffc3c6002a66063e99483170018801800007c0803a64e80002182db001082b600008015000c941bfffc38800051807b00043c0002a1600074a87c0803a64e800021831b0000801800007c0803a64e800021829b001480940000807b00108314fffc801800007c0803a64e800021827b0014825300003c6002a66063e9a08312000c801800007c0803a64e800021823b0014821100003c6002a16063f65883100000801800007c0803a64e80002181fb0014808f0000807b000c830ffffc801800007c0803a64e80002181db0014814e00003c6002a66063e9a0830a000c801800007c0803a64e800021813b0014810900003c6002a16063f65883080000801800007c0803a64e80002180fb001480870000807b00088307fffc801800007c0803a64e80002180db001480a600003c6002a16063f65883050000801800007c0803a64e800021809b0014806400008323000c386000533b190000801800007c0803a64e800021831b001482f800003860000183170008833b0018801800007c0903a67f2803a63b7b001c4e800420|@2457,1048575|60,3,@2416 108,3,@511 176,3,@2417 208,3,@711 268,3,@2417 300,3,@711 360,3,@711 2457:S35|42617365436f6465547265652e7072657474792832297072696e745472696164283429 2458:S5|424c4f434b 2459:S9|424547494e4c4f4f50 2460:S4|4c4f4f50 2461:S5|5241495345 2462:S7|48414e444c4528 2463:S4|57495448 2464:S5|4c44455843 2465:O2|40,0 2466:S5|4341534520 2467:C2,312|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f80004973bfffc971bfffc947bfffc949bfffc3c6002a66063e99483170018801800007c0803a64e80002182db00002c160001408200084800009c82bb00088295000480160004941bfffc8014000c941bfffc3880ffff807600003c0002a06000fe6c7c0803a64e800021388000753c0002a1600074a87c0803a64e800021831b0000801800007c0803a64e800021827b0010825300043c6002a06063ee1483120000801800007c0803a64e80002182db00043b7b0008800d00187c1b004040a00010800d00207c0803a64e8000214bffff6082bb000880950004807b000483150008801800007c0803a64e800021829b0008827400043860000183130008833b000c801800007c0903a67f2803a63b7b00104e800420|@2468,1048575|52,3,@2416 124,3,@316 144,3,@511 184,3,@265 2468:S25|42617365436f6465547265652e707265747479283229283229 2469:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@2470,1048575| 2470:S25|42617365436f6465547265652e707265747479283229283129 2471:S5|454c53453a 2472:S4|43415345 2473:S3|29207b 2474:S6|4d555455414c 2475:S5|20414e4420 2476:S9|524543434f4e535452 2477:S10|434f4e5441494e455220 2478:S13|534554434f4e5441494e455228 2479:S15|5455504c45434f4e5441494e455228 2480:S7|474c4f42414c20 2481:S11|20282a474c4f42414c2a29 2482:S22|42617365436f6465547265652e707265747479283229 2483:C2,328|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc947bfffc949bfffc386000518304000c801800007c0803a64e800021833b000482f900002c17ffff4082001082d9000483160008480000182c1700034082000c83190008480000088319000482db0008809b00003878000083160004801800007c0803a64e80002182bb00003c6002a66063e9a08315000c801800007c0803a64e800021829b00003c6002a06063ee1483140000801800007c0803a64e800021827b0004823300002c11ffff4082001082130004825000104800000c3e4002a262529a00821b0008809b00003872000083100004801800007c0803a64e80002181fb00003c6002a06063ee14830f0000801800007c0803a64e80002181db000038600053830e000c833b000c801800007c0903a67f2803a63b7b00104e800420|@2484,1048575|148,3,@2417 176,3,@265 228,3,@886 268,3,@265 2484:S28|42617365436f6465547265652e7072657474794f707456616c283229 2485:S22|42617365436f6465547265652e707265747479283129 2486:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180830004806300003c0002a66000fa787c0903a64e800420|@2504,1048575|40,3,@2487 2487:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc949bfffc3f0002a66318fb203c0002a66000fb387c0803a64e800021833b00007c6bc838556bf80140a20010800d00347c0803a64e8000217c03c8004080001838600003831b00047f0803a63b7b00084e80002038600001831b00047f0803a63b7b00084e800020|@2503,1048575|40,3,@2488 48,3,@2490 2488:O2|@2490,@2489 2489:O2|@2501,@2488 2490:C2,2248|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e300002c17fffd4082000c386000014e8000202c1700114082000c386000034e8000202c17000140820084973bfffc971bfffc80030008941bfffc806300044bffffa1947bfffc807b0004831b00084bffff91833b00003983ffff7f2b18385560f80140a20010800d00347c0803a64e8000217f19661541a3fff0398000025700f80140a20010800d00347c0803a64e8000217c78661541a3fff082fb000c7ee803a63b7b00104e8000202c17fff94082000c806300084bffff302c17001340820034971bfffc973bfffc806300043b1b00043c0002a76000041c7c0803a64e80002182db00007ec803a63b7b00084e8000202c17fffb40820028806300043f00000063184d88801800007c0803a64e800021686300027f2803a64e8000202c17fff74082000c386000034e8000202c17000d40820044973bfffc971bfffc806300044bfffe9d398000025460f80140a20010800d00347c0803a64e8000217c63661541a3fff082db00047ec803a63b7b00084e8000202c17fff34082005882c30004973bfffc971bfffc80160010941bfffc807600004bfffe4982bb00003995ffff7c6ba8385560f80140a20010800d00347c0803a64e8000217c63661541a3fff0829b00087e8803a63b7b000c4e8000202c17000940820090973bfffc971bfffc80030004941bfffc806300084bfffdf1947bfffc807b00043b1b000c3c0002a7600005007c0803a64e80002182db00003983ffff7ecb18385560f80140a20010800d00347c0803a64e8000217eb6661541a3fff03980000456a0f80140a20010800d00347c0803a64e8000217c75661541a3fff0829b000c7e8803a63b7b00104e8000202c17ffef40820034971bfffc973bfffc806300043b1b00043c0002a7600005b87c0803a64e80002182db00007ec803a63b7b00084e8000202c170005408200c4973bfffc971bfffc80030008941bfffc8003000c941bfffc806300044bfffd1d947bfffc807b0008831b000c4bfffd0d82db00003983ffff7ecb18385560f80140a20010800d00347c0803a64e8000217eb6661541a3fff096bbfffc807b0008831b00104bfffcd5829b00003983ffff7e8b18385560f80140a20010800d00347c0803a64e8000217e74661541a3fff0398000045660f80140a20010800d00347c0803a64e8000217c73661541a3fff0825b00147e4803a63b7b00184e8000202c17ffff40820070973bfffc971bfffc80030008941bfffc806300044bfffc5d947bfffc807b00043b1b000c3c0002a7600006707c0803a64e80002182db00003983ffff7ecb18385560f80140a20010800d00347c0803a64e8000217c76661541a3fff082bb000c7ea803a63b7b00104e8000202c17fff140820054971bfffc973bfffc806300043b1b00043c0002a7600007287c0803a64e800021398000025460f80140a20010800d00347c0803a64e8000217c63661541a3fff082db00007ec803a63b7b00084e8000202c17ffed40820044973bfffc971bfffc806300044bfffb99398000025460f80140a20010800d00347c0803a64e8000217c63661541a3fff082db00047ec803a63b7b00084e8000202c17000f4082000c386000034e8000202c17fff540820138973bfffc971bfffc80030008941bfffc8003000c941bfffc806300044bfffb31947bfffc807b0008831b000c4bfffb2182db00003983ffff7ecb18385560f80140a20010800d00347c0803a64e8000217eb6661541a3fff096bbfffc807b00083b1b00143c0002a7600007e07c0803a64e800021829b00003983ffff7e8b18385560f80140a20010800d00347c0803a64e8000217e74661541a3fff0967bfffc3a400001823b000c2c1100014082000c3a12000048000048398000025640f80140a20010800d00347c0803a64e8000217df2661541a3fff0823100043a4f0000800d00187c1b004040a00010800d00207c0803a64e8000214bffffb081fb00003990ffff7deb80385560f80140a20010800d00347c0803a64e8000217c6f661541a3fff081db00187dc803a63b7b001c4e8000202c17001540820054971bfffc973bfffc806300043b1b00043c0002a7600008987c0803a64e800021398000045460f80140a20010800d00347c0803a64e8000217c63661541a3fff082db00007ec803a63b7b00084e8000202c1700074082000c386000034e8000202c17ffeb4082011082c3000882b600002c15001540820074971bfffc973bfffc8003000c941bfffc807600043b1b00083c0002a7600009507c0803a64e800021947bfffc807b0004831b000c4bfff965829b00003983ffff7e8b18385560f80140a20010800d00347c0803a64e8000217c74661541a3fff0827b00087e6803a63b7b00104e800020973bfffc971bfffc80030004941bfffc96dbfffc8063000c4bfff911947bfffc807b0004831b000c4bfff901829b00003983ffff7e8b18385560f80140a20010800d00347c0803a64e8000217e74661541a3fff0825b00083992ffff7e6b90385560f80140a20010800d00347c0803a64e8000217c73661541a3fff0823b00107e2803a63b7b00144e8000202c17001740820074973bfffc971bfffc80030008941bfffc806300044bfff88182db00003983ffff7ecb18385560f80140a20010800d00347c0803a64e8000217eb6661541a3fff03980000456a0f80140a20010800d00347c0803a64e8000217c75661541a3fff0829b00087e8803a63b7b000c4e8000202c17000b4082003882c3000482b600002c15ffff4082001082960004807400084bfff80c2c1500034082000c807600084bfff7fc807600044bfff7f482c30004973bfffc971bfffc8016000c941bfffc80160010941bfffc807600084bfff7c9947bfffc807b0004831b000c4bfff7b982bb00003983ffff7eab18385560f80140a20010800d00347c0803a64e8000217e95661541a3fff0827b000c969bfffc807b000c83130004801800007c0803a64e800021825b00003983ffff7e4b18385560f80140a20010800d00347c0803a64e8000217c72661541a3fff0823b00147e2803a63b7b00184e800020|@2500,1048575|244,3,@2491 288,3,I105 544,3,@2493 672,3,@2494 948,3,@2495 1044,3,@2496 1304,3,@2497 1536,3,@2498 1664,3,@2499 2491:C2,156|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e800020973bfffc971bfffc80030004941bfffc8063000083180000801800007c0803a64e800021947bfffc807b0004831b00084bffffa1833b00003983ffff7f2b18385560f80140a20010800d00347c0803a64e8000217c79661541a3fff0831b000c7f0803a63b7b00104e800020|@2492,1048575| 2492:S34|42617365436f6465547265652e6973536d616c6c28322973697a654c697374283129 2493:C2,156|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e800020973bfffc971bfffc80030004941bfffc806300008318fffc801800007c0803a64e800021947bfffc807b0004831b00084bffffa1833b00003983ffff7f2b18385560f80140a20010800d00347c0803a64e8000217c79661541a3fff0831b000c7f0803a63b7b00104e800020|@2492,1048575| 2494:C2,156|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e800020973bfffc971bfffc80030004941bfffc8063000083180000801800007c0803a64e800021947bfffc807b0004831b00084bffffa1833b00003983ffff7f2b18385560f80140a20010800d00347c0803a64e8000217c79661541a3fff0831b000c7f0803a63b7b00104e800020|@2492,1048575| 2495:C2,156|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e800020973bfffc971bfffc80030004941bfffc806300008318fffc801800007c0803a64e800021947bfffc807b0004831b00084bffffa1833b00003983ffff7f2b18385560f80140a20010800d00347c0803a64e8000217c79661541a3fff0831b000c7f0803a63b7b00104e800020|@2492,1048575| 2496:C2,156|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e800020973bfffc971bfffc80030004941bfffc8063000083180000801800007c0803a64e800021947bfffc807b0004831b00084bffffa1833b00003983ffff7f2b18385560f80140a20010800d00347c0803a64e8000217c79661541a3fff0831b000c7f0803a63b7b00104e800020|@2492,1048575| 2497:C2,156|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e800020973bfffc971bfffc80030004941bfffc806300008318fffc801800007c0803a64e800021947bfffc807b0004831b00084bffffa1833b00003983ffff7f2b18385560f80140a20010800d00347c0803a64e8000217c79661541a3fff0831b000c7f0803a63b7b00104e800020|@2492,1048575| 2498:C2,156|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e800020973bfffc971bfffc80030004941bfffc8063000083180000801800007c0803a64e800021947bfffc807b0004831b00084bffffa1833b00003983ffff7f2b18385560f80140a20010800d00347c0803a64e8000217c79661541a3fff0831b000c7f0803a63b7b00104e800020|@2492,1048575| 2499:C2,156|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e800020973bfffc971bfffc80030004941bfffc8063000083180000801800007c0803a64e800021947bfffc807b0004831b00084bffffa1833b00003983ffff7f2b18385560f80140a20010800d00347c0803a64e8000217c79661541a3fff0831b000c7f0803a63b7b00104e800020|@2492,1048575| 2500:S30|42617365436f6465547265652e6973536d616c6c28322973697a65283129 2501:C2,304|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e80002082e30000973bfffc971bfffc80170004941bfffc80030004941bfffc8077000083180004801800007c0803a64e800021947bfffc3ac0000182bb00082c1500014082000c3a960000480000483980000256c0f80140a20010800d00347c0803a64e8000217e76661541a3fff082b500043ad30000800d00187c1b004040a00010800d00207c0803a64e8000214bffffb0827b00003994ffff7e6ba0385560f80140a20010800d00347c0803a64e8000217e53661541a3fff0965bfffc807b0008831b00104bffff0d823b00003983ffff7e2b18385560f80140a20010800d00347c0803a64e8000217c71661541a3fff0821b00147e0803a63b7b00184e800020|@2502,1048575| 2502:S38|42617365436f6465547265652e6973536d616c6c28322973697a65436173654c697374283129 2503:S23|42617365436f6465547265652e6973536d616c6c283229 2504:S23|42617365436f6465547265652e6973536d616c6c283129 2505:O2|@2506,@274 2506:C2,300|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7001882b6001c973bfffc971bfffc947bfffc80030000941bfffc80030008941bfffc8063001083150000801800007c0803a64e800021280300014182009c829b00042c14000140820034827b000c82530004823200188211006c807b000083100004833b0010801800007c0903a67f2803a63b7b00144e800420827b000c825300048232001882110074398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000081fb000091e300049283000083100004833b0010801800007c0903a67f2803a63b7b00144e800420829b000c827400048253001882320070807b000883110004833b0010801800007c0903a67f2803a63b7b00144e800420|@2507,1048575| 2507:S20|434f44455452454528292e6f707456616c283129 2508:C2,288|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7001882b60070973bfffc971bfffc947bfffc83150000801800007c0803a64e800021280300014182003c829b0004827400048253001882320070807b000083110008801800007c0803a64e80002180630008821b00087e0803a63b7b000c4e800020829b0004827400048253001882320074807b000083110000801800007c0803a64e800021280300014182003c821b000481f0000481cf0018814e0074807b0000830a0008801800007c0803a64e80002180630004813b00087d2803a63b7b000c4e800020821b000481f0000481cf0018814e006c807b0000830a0008801800007c0803a64e800021813b00087d2803a63b7b000c4e800020|@2509,1048575| 2509:S24|434f44455452454528292e6f707447656e6572616c283129 2510:O1|@2533 2511:O1|@2512 2512:O2|-1,@2513 2513:O5|0,@2515,@2526,@9398,@2514 2514:O2|-7,@2527 2515:O2|@2517,@2516 2516:O4|@2520,@229,@274,@2519 2517:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@2518,1048575| 2518:S50|434f44455452454528292e67656e436f6465283229696e736572746564436f64652d6c6f6f6b75704f6c6441646472283129 2519:O2|@2523,0 2520:C2,312|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c050001408200b438b900003a7800003a440000808300008073000c3c0002a36000414c7c0803a64e800021706b00014082000c822300004800006094bbfffc823300088091000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003f2002a06339c79c932300083f0002a06318c7ac9303000482e4000092e30000800d00287c0803a64e8000213891000038720000831300043b250000801800007c0903a67f2803a64e800420973bfffc82f8000882d7000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003e8002a76294110c929500083e6002a06273c7ac92750004825600009255000038750000800d00287c0803a64e800021|@2522,1048575|60,3,@1155 140,3,@226 152,3,@227 264,3,@2521 276,3,@227 2521:S36|6f75746572206c6576656c207265616368656420696e206c6f6f6b75704f6c6441646472 2522:S50|434f44455452454528292e67656e436f6465283229696e736572746564436f64652d6c6f6f6b75704f6c6441646472283329 2523:O1|@2524 2524:O2|0,@2525 2525:O10|0,0,0,0,0,0,0,0,0,0 2526:O5|-5,1,1,0,0 2527:O8|@2528,@210,0,0,1,0,0,0 2528:O4|4,@2530,@2529,1 2529:O2|-3,I229 2530:O2|@1879,@2531 2531:O2|@2532,0 2532:O5|-5,-1,1,0,0 2533:O2|0,@1879 2534:O2|@2549,@2548 2535:C2,860|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000213ae30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000090a300089083000492e30000973bfffc971bfffc3b060000801800007c0803a64e80002182db000082b600048295001882740070947bfffc83130000801800007c0803a64e8000212803000141820030823b00048211000481f0001881cf0070807b0000830e0008801800007c0803a64e8000218243001048000018825b0004823200048211001881f0001c824f000481db0004814e0004812a00188109001c965bfffc3872000083080000801800007c0803a64e800021280300014182004480db0008398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138fd0004919d00003ca002a760a515d090a700008086001490870004480000d480fb000880c7000480a6001880850070807b000483040000801800007c0803a64e8000212803000141820030833b00088319000482f8001882d70070807b000483160008801800007c0803a64e8000218063000448000040807b000883230004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003f0002a7631816289303000093230004398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002138fd0004919d00003ee002a762f716ac92e7000082db000892c700089067000482bb000894fbfffc80150010941bfffc807b000c8315000c801800007c0803a64e8000213b1b00143c0002a7600017087c0803a64e800021829b0010947bfffc807b001083140008801800007c0803a64e800021827b0014825300048232001882110070947bfffc807b001483100000801800007c0803a64e800021280300014182003081db0018814e0004812a001881090070807b001483080008801800007c0803a64e80002181e3000c480000343d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e80002139fd0004919d000039c0000191cf0000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d0000815b00109143001091e3000c813b000491230008811b000c9103000480fb000090e30000831b0008833b001c801800007c0903a67f2803a63b7b00204e800420|@2541,1048575|304,3,@2536 460,3,@2537 512,3,@2538 576,3,@2539 2536:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@270,1048575| 2537:C2,104|7f2802a663390002973bfffc8078000482e3000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002a062b5eef092b600083ea002a062b5c7ac92b6000482b7000092b6000038760000800d00287c0803a64e800021|@270,1015809|56,3,@269 68,3,@227 2538:C2,64|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180d8000480a30008808300048063000083180008801800007c0903a64e800420|@219,1048575| 2539:C2,716|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8fffc82d7000482b6001882950034973bfffc971bfffc947bfffc83140000801800007c0803a64e80002128030001418200d0827b00048253fffc823200048211001881f00034807b0000830f0008801800007c0803a64e80002181db0004814efffc812a000481090010800a001c941bfffc8063000083080010801800007c0803a64e80002180fb000880c7fffc80a60004808500103b230000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000093230004831b00009303000080060018941bfffc8304002c801800007c0803a64e800021831b0000833b0010801800007c0903a67f2803a63b7b00144e800420827b00048253fffc823200048211001881f00040807b0000830f0000801800007c0803a64e800021280300014182016c81db0004814efffc812a00048109001880e80040807b000083070008801800007c0803a64e80002180030004941bfffc80630000831b00084bfffe7980db000880a6fffc808500048324001883190024947bfffc83180000801800007c0803a64e80002128030001418200ec82fb000c82d7fffc82b600048295001882740024807b000083130008801800007c0803a64e800021825b000c8232fffc8211000481f00010830f0018801800007c0803a64e80002181db000c814efffc812a000481090010947bfffc807b000883080010801800007c0803a64e80002180fb001080c7fffc80a60004808500103b230000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000093230004831b00009303000080060018941bfffc8304002c801800007c0803a64e800021831b0000833b0018801800007c0903a67f2803a63b7b001c4e800420807b000882fb00107ee803a63b7b00144e800020807b000081db00087dc803a63b7b000c4e800020|@2540,1048575| 2540:S44|434f44455452454528292e67656e436f64652832292831296e6577456e7669726f6e2834296c6f6f6b283129 2541:S37|434f44455452454528292e67656e436f64652832292831296e6577456e7669726f6e283429 2542:O2|@2543,@274 2543:C2,292|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7001882b60070973bfffc971bfffc947bfffc83150000801800007c0803a64e800021280300014182003c829b0004827400048253001882320070807b000083110008801800007c0803a64e80002180630000821b00087e0803a63b7b000c4e800020829b0004827400048253001882320074807b000083110000801800007c0803a64e800021280300014182003c821b000481f0000481cf0018814e0074807b0000830a0008801800007c0803a64e80002180630000813b00087d2803a63b7b000c4e800020821b000481f0000481cf0018814e006c807b0000830a0008801800007c0803a64e80002138600001813b00087d2803a63b7b000c4e800020|@2544,1048575| 2544:S21|434f44455452454528292e6f707444656373283129 2545:O2|@2546,@274 2546:C2,100|7f2802a663390002973bfffc80b800048085000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003ee002a062f7eef092e300083ee002a062f7c7ac92e3000482e4000092e30000800d00287c0803a64e800021|@2547,917511|56,3,@269 68,3,@227 2547:S22|434f44455452454528292e6572726f72456e76283329 2548:O1|@2550 2549:O2|@2548,1 2550:C2,24|280300034082000c386000034e800020386000014e800020|@210,524289| 2551:O2|-3,@2549 2552:O2|@2526,@2553 2553:O2|@1879,0 2554:O4|@2440,@211,@2555,@191 2555:O2|-1,@2556 2556:O2|5,@2557 2557:O2|-1,@2558 2558:O5|0,@2560,@2578,@9401,@2559 2559:O2|10,@2579 2560:O3|@218,@2562,@2561 2561:O8|@2535,@274,@2542,@230,@2505,@2545,@2250,@2574 2562:O2|@222,@2563 2563:O5|@225,@229,0,@274,@2564 2564:O10|0,@2566,@2565,0,0,0,0,0,0,0 2565:O1|@2573 2566:O1|@2567 2567:O2|-1,@2568 2568:O5|0,@2515,@2526,@9400,@2569 2569:O2|-7,@2570 2570:O8|@2571,@2440,0,0,1,0,0,0 2571:O4|4,@2572,@2529,1 2572:O2|@2086,@2531 2573:O2|0,@2086 2574:O2|@2576,@2575 2575:O1|@2577 2576:O2|@2575,0 2577:C2,24|280300014082000c386000034e800020386000014e800020|@2440,524289| 2578:O2|-3,@2576 2579:O2|@2526,@2580 2580:O2|@2086,0 2581:O2|@2583,@2582 2582:O2|@2584,0 2583:S2|3e3d 2584:O3|@9369,69,@2585 2585:O4|@2583,-1,@190,@189 2586:O2|@210,@2587 2587:O2|@2588,0 2588:O3|@9369,69,@208 2589:O2|@2591,@2590 2590:O2|@2592,0 2591:S3|65786e 2592:O3|@9403,69,@2593 2593:O6|@2591,0,0,0,@2595,@2594 2594:O2|-1,@9404 2595:O2|0,@2596 2596:O3|0,@206,0 2597:O2|@2599,@2598 2598:O2|@2600,0 2599:S3|636872 2600:O3|@9369,69,@2601 2601:O4|@2599,-1,@2603,@2602 2602:O3|1,@2607,@2606 2603:O2|-1,@2604 2604:O2|-7,@2605 2605:O8|@2532,@2599,0,0,1,0,0,0 2606:O4|-3,0,@2615,@2614 2607:O4|-3,0,@2609,@2608 2608:O2|0,@2610 2609:S3|696e74 2610:O6|@2609,0,0,0,@2612,@2611 2611:O2|-1,@9405 2612:O2|0,@2613 2613:O3|1,@206,0 2614:O2|0,@2616 2615:S6|737472696e67 2616:O6|@2615,0,0,0,@2612,@2617 2617:O2|-1,@9406 2618:O2|@2620,@2619 2619:O2|@2621,0 2620:S2|3c3e 2621:O3|@9369,69,@2622 2622:O4|@2620,-1,@708,@2623 2623:O3|1,@2624,@191 2624:O4|-2,1,@2625,0 2625:O2|@2627,@2626 2626:O2|@2629,0 2627:O2|49,@2628 2628:O3|3,@9407,79996 2629:O2|50,@2628 2630:O2|@2632,@2631 2631:O2|@2633,0 2632:S3|616273 2633:O3|@9369,69,@2634 2634:O4|@2632,-1,@190,@2635 2635:O3|1,@196,@196 2636:O2|@2440,@2637 2637:O2|@2638,0 2638:O3|@9369,69,@2554 2639:O2|@2641,@2640 2640:O2|@2642,0 2641:S6|506f6c794d4c 2642:O3|@9408,69,@2643 2643:O3|@2641,@2645,@2644 2644:O4|@2646,I48,0,0 2645:O2|-1,@2086 2646:O4|-1,@9410,@9411,@9409 2647:O2|@2648,10 2648:C2,52|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021809800043c0002a06000c0a07c0903a64e800420|@182,983043|36,3,@179 2649:O2|@8111,@8110 2650:O2|@2652,@2651 2651:O2|@2653,0 2652:S5|7072696e74 2653:O3|@9369,69,@2654 2654:O4|@2652,-1,@709,@2655 2655:O3|1,@2656,@2656 2656:O3|3,@9413,79992 2657:O2|@2659,@2658 2658:O2|@2660,0 2659:S8|636f6d70696c6572 2660:O3|@9369,69,@2661 2661:O4|@2659,-1,@2663,@2662 2662:O3|1,@7769,@7768 2663:O2|-1,@2664 2664:O2|-3,@2665 2665:O2|@2667,@2666 2666:O3|@2670,@2698,@2669 2667:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@2668,1048575| 2668:S27|434f4d50494c45525f424f445928292e636f6d70696c6572283129 2669:O3|@7687,@2698,@7686 2670:C2,1052|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d700043aa30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000090a3000490830000973bfffc971bfffc96bbfffc94bbfffc83160014801800007c0803a64e800021829b0008827400048253001c947bfffc8072001083120018801800007c0803a64e8000213a230000807b00043b110000801800007c0803a64e800021821b000c81f0000481cf001c947bfffc806e0014830e0018801800007c0803a64e80002139430000807b00083b0a0000801800007c0803a64e800021947bfffc97fbfffc3d2002a76129265e953bfffc39000001951bfffc3bfb000080fb0010280700014182007480db0020398000053bbdffe87c1df04040a00010800d001c7c0803a64e80002138bd0004919d00003c8002a7608428d490850000833b001493250010831b001c9305000c82fb001892e5000882c6000892c50004386500003f00000063184428801800007c0803a64e8000214800002480db002080bb0018809b001c807b001483060008801800007c0803a64e80002183fb000880bb00247ca803a63b7b00284e800020808300002c04000340820054833b00148319000482f80004947bfffc807b000c83170010801800007c0803a64e8000213c6002a760632954831b0004801800007c0803a64e8000213c6002a06063962c800d00287c0803a64e8000212c0400cf40820058398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000083030008931900083ee002a162f7088892f900043ac000cf92d900003aa3000038790000800d00287c0803a64e800021833b00148319000482f8002882d700007c04b040408200d0947bfffc3c8002a760842974806300083c0002a760002f107c0803a64e800021388300003c6002a7606332fc3c0002a1600074a87c0803a64e8000213c8002a7608433203c0002a1600074a87c0803a64e800021947bfffc388000153c0002a1600074a87c0803a64e800021831b0008801800007c0803a64e800021398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213abd0004919d0000829b0000929500083e6002a162730888927500043a4000cf9255000038750000800d00287c0803a64e80002182b8001083150000801800007c0803a64e800021388300003c6002a7606333403c0002a1600074a87c0803a64e8000213c8002a7608433543c0002a1600074a87c0803a64e800021947bfffc388000153c0002a1600074a87c0803a64e800021831b0004801800007c0803a64e800021398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a9d0004919d0000827b0000927400083e4002a162520888925400043a2000cf9234000038740000800d00287c0803a64e800021|@2697,1048575|248,3,$2670+450 324,3,@2671 372,3,I30 496,3,@2673 520,3,@54 592,3,@327 660,3,@2674 672,3,@2689 692,3,@2693 700,3,@511 716,3,@2694 724,3,@511 748,3,@511 824,3,@327 884,3,@2695 892,3,@511 908,3,@2696 916,3,@511 940,3,@511 1016,3,@327 2671:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180b800088098000c8078001083180004801800007c0903a64e800420|@2672,1048575| 2672:S30|434f4d50494c45525f424f445928292e636f6d70696c6572283329283129 2673:S24|436f6d70696c6174696f6e20696e7465727275707465640a 2674:O1|@2675 2675:C2,476|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300b9408200103c6002a760632b744e8000202c030045408200103c6002a760632b804e8000202803004341800010280300fd41810008480000102803004141820008480000084e8000202c03000f408200103c6002a760632b8c4e8000202c030011408200103c6002a760632b984e8000202c030013408200103c6002a760632ba44e8000202c030015408200103c6002a760632bb04e8000202c030017408200103c6002a760632bbc4e8000202c030019408200103c6002a760632bc84e8000202c03001b408200103c6002a760632bd44e80002028030041408000a0398000805460f80140a20010800d00347c0803a64e8000217f03661541a3fff0570bf80140a20010800d00347c0803a64e8000212c1800014080000848000024570bf80140a20010800d00347c0803a64e8000212c1801ff418100084800001c973bfffc3c6002a16063026c800d00287c0803a64e8000213af80000389700003c6002a760632be03c0002a1600074a87c0903a67f2803a64e800420973bfffc38a00015388000073c0002a760002bec7c0803a64e80002138830000386000b9833b00003c0002a1600074a87c0903a67f2803a63b7b00044e800420|@2688,1048575|40,3,@2676 60,3,@2677 116,3,@2678 136,3,@2679 156,3,@2680 176,3,@2681 196,3,@2682 216,3,@2683 236,3,@2684 356,3,@318 384,3,@2685 392,3,@511 424,3,@2686 452,3,@511 2676:S2|5c5c 2677:S2|5c22 2678:S2|5c61 2679:S2|5c62 2680:S2|5c74 2681:S2|5c6e 2682:S2|5c76 2683:S2|5c66 2684:S2|5c72 2685:S2|5c5e 2686:C2,724|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c040001408200103c600000606346684e800020398000025480f80140a20010800d00347c0803a64e8000217f0c241141a3fff0546bf80140a20010800d00347c0803a64e8000212c0300014180000c3ae00003480000083ae0000154abf80140a20010800d00347c0803a64e8000212c0500014180000c3ac00003480000083ac000017c17b0404082000c3ae3000048000098281600014182004c3980000254a0f80140a20010800d00347c0803a64e8000217eec2c1141a3fff03997ffff7c6bb8385560f80140a20010800d00347c0803a64e8000217eec1c1141a3fff0480000483980000254a0f80140a20010800d00347c0803a64e8000217ee5661541a3fff03997ffff7c6bb8385560f80140a20010800d00347c0803a64e8000217eec1c1141a3fff0973bfffc947bfffc94bbfffc971bfffc38850000387700003f00000063184e08801800007c0803a64e80002180bb0004809b00004bfffe85947bfffc809b0008807b000c3f00000063184e28801800007c0803a64e8000212c030001408200084800006482db000856cbf80140a20010800d00347c0803a64e8000212c1600014180000c3aa00003480000083aa00001546bf80140a20010800d00347c0803a64e8000212c0300014180000c3a800003480000083a8000017c15a040418200084800000c3ac30000480000283996ffff7c6bb0385560f80140a20010800d00347c0803a64e8000217ec3661541a3fff03980006056c0f80140a20010800d00347c0803a64e8000217eb6661541a3fff056abf80140a20010800d00347c0803a64e8000212c150001408000084800002456abf80140a20010800d00347c0803a64e8000212c1501ff41810008480000183c6002a16063026c800d00287c0803a64e8000213a95000038940000807b0000833b00103c0002a1600074a87c0903a67f2803a63b7b00144e800420|@2687,1048575|40,3,I48 352,3,I109 396,3,I110 664,3,@318 700,3,@511 2687:S18|436861722e6f6374496e7452657072283329 2688:S16|436861722e746f537472696e67283129 2689:C2,616|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021706b00014182000c3b0000034800001081830000558c083c619800012c180003408200143b040000801800007c0903a64e800420973bfffc947bfffc949bfffc971bfffc3ae000013ac0000182bb00007c16a8404082000c3a970000480000a43a9600023a760008825b00087e6c0e707d7260ae556b083c6163000196fbfffc969bfffc831b000c801800007c0803a64e800021706b00014182000c3a2000034800001081830000558c083c61910001821b00043991ffff7e0b88385560f80140a20010800d00347c0803a64e8000217df0661541a3fff082db00003aef00003b7b0008800d00187c1b004040a00010800d00207c0803a64e8000214bffff50728b000141820028568bf80140a20010800d00347c0803a64e8000212c1400014180000c3a740000480000183c6002a06063a344800d00287c0803a64e8000217c13a84040820018807b0008825b000c7e4803a63b7b00104e8000203a5300103a32fffe3a0000092c10000140a20010800d00307c0803a64e8000213990ffff3971ffff7d6b6396556b083c616f0001967bfffc97fbfffc3dc002a761ce310e95dbfffc39400001955bfffc3bfb000038a0000138800083386f00003f000000631841c8801800007c0803a64e8000213923000083fb0008480000183c6002a06063a344800d00287c0803a64e8000217e6c0e7091890000953bfffc951bfffc38800001386000093b1b00243c0002a7600031947c0803a64e800021807b00043f00000063184648801800007c0803a64e800021807b000480fb00247ce803a63b7b00284e800020|@2692,1048575|332,3,@78 440,3,$2689+510 476,3,I11 508,3,@78 556,3,@2690 576,3,I47 2690:C2,264|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8fff47c04b8404082000c386000014e8000203ac4000882b8fffc3a8300007ecc0e707d7560ae556b083c61630001973bfffc971bfffc969bfffc949bfffc8318fff8801800007c0803a64e800021706b00014182000c3a6000034800001081830000558c083c619300012c13000340820020825b00088232ffe0821b00047c6c0e707e0b0e707d9159ae4800002c825b0008967bfffc80db000880b2ffe0388000093f00000063185928801800007c0803a64e800021823b00003a11000281fb00047d8f9a1439ccffff38900000386e00003b120000833b000c7f2803a63b7b00104bffff04|@2691,1048575|196,3,I198 2691:S31|537472696e672e746f537472696e6773283229636f7079546f4f7574283229 2692:S19|537472696e672e746f537472696e6773283229 2693:S26|457863657074696f6e2d20496e7465726e616c4572726f723a20 2694:S23|20726169736564207768696c6520636f6d70696c696e67 2695:S11|457863657074696f6e2d20 2696:S36|20756e65787065637465646c7920726169736564207768696c6520636f6d70696c696e67 2697:S27|434f4d50494c45525f424f445928292e636f6d70696c6572283329 2698:O11|@2700,@2718,@2964,@3548,@3563,@4763,@6914,@7655,@7684,@7685,@2699 2699:O3|@9377,@4393,@4705 2700:O4|@2702,@2707,@2714,@2701 2701:O1|@2717 2702:O1|@2703 2703:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180830004806300003c0002a76000345c7c0903a64e800420|@2706,1048575|40,3,@2704 2704:C2,48|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000213b040000801800007c0903a64e800420|@2705,1048575| 2705:S19|53594d5f53455428292e696e73696465283229 2706:S19|53594d5f53455428292e696e73696465283129 2707:O1|@2708 2708:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180830004806300003c0002a76000353c7c0903a64e800420|@2713,917507|40,3,@2709 2709:C2,76|7f2802a663390002398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213b1d0004919d00003ee002a762f735a492f800009098000890780004387800007f2803a64e800020|@2712,917507|44,3,@2710 2710:C2,124|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc947bfffc83180008801800007c0803a64e800021280300014182001838600003833b00087f2803a63b7b000c4e800020833b0004807b000083190004833b0008801800007c0903a67f2803a63b7b000c4e800420|@2711,1048575| 2711:S17|496e745365742e706c7573283229283129 2712:S14|496e745365742e706c7573283229 2713:S14|496e745365742e706c7573283129 2714:O1|@2715 2715:C2,24|2c0300014082000c386000034e800020386000014e800020|@2716,524289| 2716:S15|496e745365742e6d6b283129283129 2717:C2,24|2c0300734082000c386000034e800020386000014e800020|@2716,524289| 2718:O6|@2720,@2937,@2943,@2948,@2953,@2719 2719:O2|@2960,@2959 2720:O4|@2722,@2728,@2861,@2721 2721:O2|@2933,@2728 2722:C2,632|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7000882a30018829500003a630000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000825600049243000492830000973bfffc971bfffc967bfffc80130008941bfffc96bbfffc83160054801800007c0803a64e8000212803000141820030823b000c8211000481f0000881db0000814f0004914e000038600001813b00107d2803a63b7b00144e800020823b000c8211000481f0000881db0004814e0000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000812f00009123000491430000830f0050801800007c0803a64e8000212803000141820128811b00083860000183080010801800007c0803a64e80002180fb000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138dd0004919d00003ca002a760a539ec90a600008087000490860004833b000883190004971bfffc82f9000896fbfffc82d9000c96dbfffc82b9001096bbfffc82990014969bfffc82790018967bfffc8259001c965bfffc82390020963bfffc82190024961bfffc39e6000080d9000038a0000338830000386f00008307000c801800007c0803a64e80002181db000c814e0004812a0004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021391d0004919d00003ce002a760e73abc90e800083cc002a060c6c7ac90c8000480a9000090a8000038680000800d00287c0803a64e800021811b000c80e8000480c7000880bb00048086000490850000807b000883080008833b0010801800007c0903a67f2803a63b7b00144e800420|@2727,1048575|348,3,@2723 528,3,@2726 540,3,@227 2723:C2,100|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d70000973bfffc83160000801800007c0803a64e8000213aa300003c6002a760633a6c3b150000833b0000801800007c0903a67f2803a63b7b00044e800420|@2725,1048575|64,3,@2724 2724:S34|756e657870656374656420656e64206f662066696c6520656e636f756e7465726564 2725:S25|4c45585f28292e6572726f724d657373616765283329283129 2726:S11|656e64206f662066696c65 2727:S18|4c45585f28292e696e73796d626f6c283129 2728:O4|@2730,@330,@2734,@2729 2729:O3|@2848,@2847,@332 2730:O6|@2111,@2114,@2117,@2120,@2731,@2110 2731:O1|@2732 2732:C2,8|806300144e800020|@2733,524289| 2733:S36|5072657474795072696e7465722e70704c696e65427265616b2d236c696e65427265616b 2734:O22|0,68,62,1,64,63,57,56,52,53,54,55,58,59,61,51,65,66,67,@2736,@2838,@2735 2735:O1|@2843 2736:O2|@2738,@2737 2737:O4|-1,@9415,@9416,@9414 2738:C2,108|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc38830000807800043c0002a760003c907c0803a64e800021706b00014082001880630000833b00007f2803a63b7b00044e80002038600003833b00007f2803a63b7b00044e800020|@2744,1048575|44,3,@2739 2739:C2,204|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021830300002c18ffff4082005882e3000482d7000082a3000c82950000969bfffc949bfffc973bfffc386400003b160000801800007c0803a64e8000213b1b00083c0002a760003d787c0803a64e800021827b00007e6803a63b7b000c4e80002080030008941bfffc949bfffc973bfffc82e30004386400003b170000801800007c0803a64e8000213b1b00083c0002a760003f307c0803a64e80002182db00007ec803a63b7b000c4e800020|@2743,1048575|96,3,@2740 172,3,@2742 2740:C2,376|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021546bf80140a20010800d00347c0803a64e8000212c030001408000084800003082f8000082d700007c6bb038556bf80140a20010800d00347c0803a64e8000217c03b0004080000848000020973bfffc3ac300003c6002a0606395e0800d00287c0803a64e800021398000025460f80140a20010800d00347c0803a64e8000217ec3661541a3fff056cc083a7eb7602e3af500002c17000140820010386000017f2803a64e8000203ad900003ab800003a83000082770004809700008075fffc3f00000063184368801800007c0803a64e8000212803000141820034398000013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d0000926300007ec803a64e8000202c1400014082001480950000806400003a430000480000083a540000398000025640f80140a20010800d00347c0803a64e8000217c6c941141a3fff03b1500003b3600007f2803a64bfffe94|@2741,1044483|116,3,@51 224,3,I24 2741:S27|486173685461626c652e6861736853756228322966696e64283129 2742:C2,360|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021546bf80140a20010800d00347c0803a64e8000212c030001408000084800003882f800008197fffc558c09fc619600017c6bb038556bf80140a20010800d00347c0803a64e8000217c03b0004080000848000020973bfffc3ac300003c6002a0606395e0800d00287c0803a64e800021546c083a7ed7602e3af600002c17000140820010386000017f2803a64e8000203ad900003ab800003a83000082770004809700008075fffc3f00000063184368801800007c0803a64e8000212803000141820034398000013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d0000926300007ec803a64e8000202c1400014082001c809500008184fffc558c09fc618300013a430000480000083a540000398000025640f80140a20010800d00347c0803a64e8000217c6c941141a3fff03b1500003b3600007f2803a64bfffea4|@2741,1044483|124,3,@51 200,3,I24 2743:S20|486173685461626c652e68617368537562283229 2744:S17|53796d626f6c732e6c6f6f6b7570283129 2745:O2|@2648,272 2746:O2|@2837,14 2747:O2|@2748,28 2748:S4|7468656e 2749:O2|@2750,15 2750:S2|6966 2751:O2|@2752,22 2752:S2|6f66 2753:O2|@2754,37 2754:S7|73686172696e67 2755:O2|@2756,35 2756:S6|737472756374 2757:O2|@2758,29 2758:S4|74797065 2759:O2|@2760,33 2760:S9|737472756374757265 2761:O2|35,43 2762:O2|42,48 2763:O2|@2764,31 2764:S4|77697468 2765:O2|@2766,24 2766:S4|6f70656e 2767:O2|@2768,13 2768:S3|66756e 2769:O2|@566,3 2770:O2|@2771,12 2771:S2|666e 2772:O2|58,47 2773:O2|@2774,16 2774:S2|696e 2775:O2|@2776,10 2776:S3|656e64 2777:O2|61,45 2778:O2|@2779,8 2779:S2|646f 2780:O2|@2781,9 2781:S4|656c7365 2782:O2|@2783,40 2783:S6|657174797065 2784:O2|@2785,17 2785:S5|696e666978 2786:O2|@2787,7 2787:S8|6461746174797065 2788:O2|@2789,23 2789:S2|6f70 2790:O2|@2791,5 2791:S2|6173 2792:O2|@2793,2 2793:S7|61627374797065 2794:O2|@2795,34 2795:S9|7369676e6174757265 2796:O2|@2797,18 2797:S6|696e66697872 2798:O2|@2799,39 2799:S8|7769746874797065 2800:O2|@2801,30 2801:S3|76616c 2802:O2|@2803,26 2803:S5|7261697365 2804:O2|@2805,21 2805:S6|6e6f6e666978 2806:O2|124,44 2807:O2|@2808,38 2808:S7|66756e63746f72 2809:O2|@2810,11 2810:S9|657863657074696f6e 2811:O2|@2812,42 2812:S5|7768657265 2813:O2|@2814,36 2814:S3|736967 2815:O2|@2816,25 2816:S6|6f72656c7365 2817:O2|@2818,20 2818:S5|6c6f63616c 2819:O2|@2820,49 2820:S2|2d3e 2821:O2|@2822,32 2822:S5|7768696c65 2823:O2|@2824,50 2824:S2|3a3e 2825:O2|@2826,46 2826:S2|3d3e 2827:O2|@2828,27 2828:S3|726563 2829:O2|@2830,19 2830:S3|6c6574 2831:O2|@2832,41 2832:S7|696e636c756465 2833:O2|@2834,4 2834:S7|616e64616c736f 2835:O2|@2836,6 2836:S4|63617365 2837:S6|68616e646c65 2838:O1|@2839 2839:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180830004806300003c0002a7600046047c0903a64e800420|@2842,786435|40,3,@2840 2840:C2,64|7f2802a6633900027c6b2378556bf80140a20010800d00347c0803a64e8000217c03200040820010386000037f2803a64e800020386000017f2803a64e800020|@2841,524291| 2841:S13|53796d626f6c732e6571283229 2842:S13|53796d626f6c732e6571283129 2843:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180830004806300003c0002a7600046e47c0903a64e800420|@2846,786435|40,3,@2844 2844:C2,64|7f2802a6633900027c6b2378556bf80140a20010800d00347c0803a64e8000217c0320004082000c3b000003480000083b0000016b0300027f2803a64e800020|@2845,786435| 2845:S14|53796d626f6c732e6e6571283229 2846:S14|53796d626f6c732e6e6571283129 2847:O3|@2856,@2858,@2855 2848:O3|@2850,@2852,@2849 2849:O2|@2854,@9378 2850:O2|@2851,@9378 2851:C2,32|82e3000082d800047c17b0404082000c386000034e800020386000014e800020|@337,983041| 2852:O2|@2853,@9378 2853:C2,76|7f2802a6633900023ae30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092e300083ae0008b92e3000482f8000492e300007f2803a64e800020|@337,917505| 2854:C2,48|82e3000082d800047c17b0404082000c806300084e800020973bfffc3c6002a160630a30800d00287c0803a64e800021|@337,983041|28,3,@341 2855:O2|@2860,@9379 2856:O2|@2857,@9379 2857:C2,32|82e3000082d800047c17b0404082000c386000034e800020386000014e800020|@337,983041| 2858:O2|@2859,@9379 2859:C2,76|7f2802a6633900023ae30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092e300083ae0008b92e3000482f8000492e300007f2803a64e800020|@337,917505| 2860:C2,48|82e3000082d800047c17b0404082000c806300084e800020973bfffc3c6002a160630a30800d00287c0803a64e800021|@337,983041|28,3,@341 2861:O8|@2863,@2728,@2879,@2903,@2904,@2911,@2862,@2721 2862:O3|@2925,@2721,@2728 2863:C2,2648|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc947bfffc80030000941bfffc80030004941bfffc80030008941bfffc3c0002a7600054607c0803a64e8000212c0300fd408200d8833b000c83190010971bfffc82f9001496fbfffc82d9001896dbfffc82b9001c96bbfffc82990020969bfffc82790024967bfffc80d9000c80b9000880990004807900003c0002a7600055387c0803a64e800021825b00088232000028110061418000502811007341810048821b0010807b000c83100008801800007c0803a64e80002181fb000481cf0000388e0000386000fd3c0002a1600074a87c0803a64e800021815b0004906a0000480008c8821b001080bb000c80900010386000fd8310000c801800007c0803a64e800021480008a42c030047408200c0833b000c83190010971bfffc82f9001496fbfffc82d9001896dbfffc82b9001c96bbfffc82990020969bfffc82790024967bfffc80d9000c80b9000880990004807900003c0002a7600055387c0803a64e800021825b0008823200002811004540820038821b0010807b000c83100014801800007c0803a64e80002181fb001081cf0004814e0008813b0000810a00489109000048000804821b001080bb000c80900010386000478310000c801800007c0803a64e800021480007e02c03004540820038833b0010807b000c83190014801800007c0803a64e800021831b001082f8000482d7000882bb00008296001492950000480007a42c03007740820030833b00108319000482f8000882db000082b7001892b60000829b000c827400003a40004192530000480007702c03005940820030833b00108319000482f8000882db000082b7001c92b60000829b000c827400003a400041925300004800073c2c030051408200a0833b000c83190010971bfffc82f9001496fbfffc82d9001896dbfffc82b9001c96bbfffc82990020969bfffc82790024967bfffc80d9000c80b9000880990004807900003c0002a7600055387c0803a64e800021825b0008823200002811005541820020821b001081f0000481cf0008815b0000812e0020912a0000480006b4821b0010807b000c83100018801800007c0803a64e800021480006982c03005340820030833b00108319000482f8000882db000082b7002492b60000829b000c827400003a40004192530000480006642c0300b740820030833b00108319000482f8000882db000082b7002892b60000829b000c827400003a40004192530000480006302c0300bb40820030833b00108319000482f8000882db000082b7002c92b60000829b000c827400003a40004192530000480005fc2c0300bf40820030833b00108319000482f8000882db000082b7003c92b60000829b000c827400003a40004192530000480005c82c0300f740820030833b00108319000482f8000882db000082b7003092b60000829b000c827400003a40004192530000480005942c0300fb40820030833b00108319000482f8000882db000082b7003492b60000829b000c827400003a40004192530000480005602c03005d408202dc833b000c83190010971bfffc82f9001496fbfffc82d9001896dbfffc82b9001c96bbfffc82990020969bfffc82790024967bfffc80d9000c80b9000880990004807900003c0002a7600055387c0803a64e800021825b0008823200002811005d418200f4821b000c3860000183100010801800007c0803a64e80002181fb000881cf0000947bfffc388e00003c6002a7606356283c0002a1600074a87c0803a64e800021815b0014398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021393d0004919d00003d0002a7610856409109000080ea000490e900089069000480db001080a6000494bbfffc80860008949bfffc8066000c947bfffc83260010973bfffc83060014971bfffc82e6001896fbfffc82c6001c96dbfffc82a6002096bbfffc82860024969bfffc80c6000038a00003809b002438690000830a001c801800007c0803a64e80002148000400821b000c81f0001095fbfffc81d0001495dbfffc81500018955bfffc8130001c953bfffc81100020951bfffc80f0002494fbfffc80d0000c80b0000880900004807000003c0002a7600055387c0803a64e80002180db000880a600002805005d418200f4809b000c3860000183040010801800007c0803a64e800021833b000883190000947bfffc389800003c6002a7606356c43c0002a1600074a87c0803a64e80002182fb0014398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002a762b556e092b60000829700049296000890760004827b001082530004965bfffc82330008963bfffc8213000c961bfffc81f3001095fbfffc81d3001495dbfffc81530018955bfffc8133001c953bfffc81130020951bfffc80f3002494fbfffc80d3000038a00003809b0024387600008317001c801800007c0803a64e800021480002ac809b00108064000483230008831b000082f9003892f8000082db000c82b600003a80004192950000947bfffc4800027c2c03000940820020833b00108319000482f8000882db000082b7000092b600004800025428030061418000282803007341810020833b0010807b000c83190008801800007c0803a64e800021480002282803008341800010280300b54181000848000020280300c34180000c280300f5408100102803004f4182000848000030833b001080bb000c3c8002a7608457643c600000606346688319000c801800007c0803a64e800021480001cc947bfffc3b2000292c1900014082000c3b0000014800005c3af9fffe3ad700083ea002a762b558107ecc0e707d7560ae556b083c61740001827b00007c1498404082000c3b000003480000283a59fffe3b320000800d00187c1b004040a00010800d00207c0803a64e8000214bffff9c281800014182002c825b001480bb0010809200103c600000606346688312000c801800007c0803a64e80002148000128807b00003c0002a76000297c7c0803a64e800021825b0010947bfffc3860000183120010801800007c0803a64e800021947bfffc809b00043c6002a76063582c3c0002a1600074a87c0803a64e800021388000453c0002a1600074a87c0803a64e800021823b001c398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a1d0004919d00003de002a761ef584891f0000081d1000491d0000890700004815b0018812a0004953bfffc810a0008951bfffc80ea000c94fbfffc80ca001094dbfffc80aa001494bbfffc808a0018949bfffc806a001c947bfffc832a0020973bfffc830a0024971bfffc80ca000038a00003809b0024387000008311001c801800007c0803a64e80002182fb001882d700003aa0004192b600003b7b00083b7b0004947bfffc3b7b0004829b00108274000482530008823b000082110000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000081f2000491e300049203000083120050801800007c0803a64e800021280300014182001c807b000c831b0010833b00147f2803a63b7b00184bfff5c83860000181db00147dc803a63b7b00184e800020|@2878,1048575|68,3,@2864 160,3,@2865 240,3,@511 380,3,@2865 740,3,@2865 1216,3,@2865 1288,3,@2868 1296,3,@511 1352,3,@2869 1556,3,@2865 1628,3,@2870 1636,3,@511 1692,3,@2871 2012,3,@2872 2020,3,I48 2080,3,@2875 2180,3,I48 2212,3,@2675 2264,3,@2876 2272,3,@511 2292,3,@511 2348,3,@2877 2864:C2,188|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000218303000082f8000028170013418000102817001b4181000848000010281700414182000848000070973bfffc947bfffc82c3001096dbfffc82a3001496bbfffc82830018969bfffc8263001c967bfffc82430020965bfffc82230024963bfffc80c3000c80a3000880830004806300003c0002a7600055387c0803a64e800021807b0000833b00047f2803a63b7b00084bffff58387700004e800020|@2867,1048575|144,3,@2865 2865:C2,152|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180db000880a600002c05000140820050973bfffc947bfffc38600001831b0018801800007c0803a64e800021706b00014082000c808300004800000838800009807b00009083000038600001833b00047f2803a63b7b00204e80002080850004908600008305000093030000386000013b7b00184e800020|@2866,1048575| 2866:S17|4c45585f28292e6e657874436828313029 2867:S24|4c45585f28292e736b697057686974655370616365283129 2868:S16|756e6b6e6f776e2073796d626f6c202e 2869:C2,104|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000882d70000973bfffc971bfffc83160000801800007c0803a64e80002182bb00003a830000807500043b140000833b0004801800007c0903a67f2803a63b7b00084e800420|@2725,1048575| 2870:S17|756e6b6e6f776e2073796d626f6c202e2e 2871:C2,104|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000882d70000973bfffc971bfffc83160000801800007c0803a64e80002182bb00003a830000807500043b140000833b0004801800007c0903a67f2803a63b7b00084e800420|@2725,1048575| 2872:O1|@2873 2873:C2,104|2803008341800010280300b54181000848000028280300c34180000c280300f540810018280300614180001828030073408100084800000c386000034e8000202c03004f4082000c386000034e800020280300bf4082000c386000034e800020386000014e800020|@2874,524289| 2874:S24|4c45585f28292e6973416c7068614e756d65726963283129 2875:S20|3a3d3c3e2b2a215e2f7c26257e2d3f60405c2423 2876:S19|756e6b6e6f776e206368617261637465722022 2877:C2,104|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000882d70000973bfffc971bfffc83160000801800007c0803a64e80002182bb00003a830000807500043b140000833b0004801800007c0903a67f2803a63b7b00084e800420|@2725,1048575| 2878:S20|4c45585f28292e7061727365546f6b656e283129 2879:O3|@2880,@2721,@2728 2880:C2,3036|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000882d7000882a300088296001092950000973bfffc971bfffc947bfffc80030000941bfffc80030004941bfffc96bbfffc8003001c941bfffc38a300003c8002a7608464f03c600000606346683c0002a7600065547c0803a64e800021827b000890730000825b000c82320000281100ef408204088213000038800061387000003f00000063184368801800007c0803a64e80002128030001418203e081fb001481cf0008814e0008813b0004810a00449109000080fb001080c7001094dbfffc80a7001494bbfffc80870018949bfffc8067001c947bfffc83270020973bfffc83070024971bfffc80c7000c80a7000880870004806700003c0002a7600055387c0803a64e80002182fb000c82d70000281600f1408201f482bb001082950010969bfffc82750014967bfffc82550018965bfffc8235001c963bfffc82150020961bfffc81f5002495fbfffc80d5000c80b5000880950004807500003c0002a7600055387c0803a64e80002181db000c814e0000280a006141800010280a00734181000848000028280a00c341800010280a00cd4181000848000014280a00834180004c280a008d4181004480bb00103c8002a7608467783c6002a7606368103c0002a7600065547c0803a64e800021813b00089069000038600001811b00187d0803a63b7b001c4e800020813b00103860000183090010801800007c0803a64e800021811b000880e80000947bfffc388700003c6002a76063681c3c0002a1600074a87c0803a64e80002180db001080a60000388500003c0002a1600074a87c0803a64e800021809b0018398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213b3d0004919d00003f0002a7631868409319000082e4000892f900089079000482db001482b60004829b001c92bb001c82760008927b00188256000c925b001482360010923b001082160014921b000c81f6001891fb000881d6001c91db000481560020813b0000955b000081160024951bfffc80d6000038a0000380e4000438890000387900003b0700003b340000801800007c0903a67f2803a64e80042082b70000281500614180004c281500734181004480bb00103c8002a7608464f03c6002a7606368c43c0002a7600065547c0803a64e800021829b00089074000038600001827b00187e6803a63b7b001c4e800020829b00103860000183140010801800007c0803a64e800021827b000882530000947bfffc389200003c6002a76063681c3c0002a1600074a87c0803a64e800021823b001082110000389000003c0002a1600074a87c0803a64e80002181fb0018398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002139dd0004919d00003d4002a7614a68d0914e0000812f0008912e0008906e0004811b001480e8000480db001c90fb001c80a8000890bb00188088000c909b001480680010907b001083280014933b000c83080018931b000882e8001c92fb000482c8002082bb000096db000082880024969bfffc3a66000080c8000038a0000338950000386e0000830f00043b330000801800007c0903a67f2803a64e80042082120000281000f14082021881f3000038800061386f00003f00000063184368801800007c0803a64e80002128030001418201f081db0010814e0010955bfffc812e0014953bfffc810e0018951bfffc80ee001c94fbfffc80ce002094dbfffc80ae002494bbfffc80ce000c80ae0008808e0004806e00003c0002a7600055387c0803a64e800021809b000c806400002803006141800010280300734181000848000028280300c341800010280300cd4181000848000014280300834180004c2803008d4181004480bb00103c8002a7608467783c6002a7606369543c0002a7600065547c0803a64e800021833b00089079000038600001831b00187f0803a63b7b001c4e800020833b00103860000183190010801800007c0803a64e800021831b000882f80000947bfffc389700003c6002a7606369603c0002a1600074a87c0803a64e80002182db001082b60000389500003c0002a1600074a87c0803a64e800021829b0018398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a7d0004919d00003e4002a76252698492530000823400089233000890730004821b001481f0000481db001c91fb001c81500008915b00188130000c913b001481100010911b001080f0001490fb000c80d0001890db000880b0001c90bb000480900020807b0000949b000083300024973bfffc80d0000038a000033883000038730000831400043b2e0000801800007c0903a67f2803a64e80042081f20000280f005d408200084800002081d20000280e008b408200084800001081520000280a00cb408204e481d20000280e005d408201f0815b0014812a00088109000880fb000480c8004090c7000080b300003880005d386500003c0002a1600074a87c0803a64e800021809b000890640000807b001083230010973bfffc83030014971bfffc82e3001896fbfffc82c3001c96dbfffc82a3002096bbfffc82830024969bfffc80c3000c80a3000880830004806300003c0002a7600055387c0803a64e800021827b000c82530000281200614180000c2812007340810110823b00103860000183110010801800007c0803a64e800021821b000881f00000947bfffc388f00003c6002a760636a083c0002a1600074a87c0803a64e80002181db0010814e0000388a00003c0002a1600074a87c0803a64e800021813b0018398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021391d0004919d00003ce002a760e76a2890e8000080c9000890c800089068000480bb001480850004949bfffc80650008947bfffc8325000c973bfffc83050010971bfffc82e5001496fbfffc82c5001896dbfffc82a5001c96bbfffc82850020969bfffc82650024967bfffc80c5000038a00003809b00243868000083090004801800007c0803a64e80002148000040823b00088211000080bb00103c8002a7608464f0387000003c0002a7600065547c0803a64e80002181fb0008906f0000947bfffc48000008947bfffc815b0010812a00002809008b4082000848000014810a0000280800cb41820008480002b0810a000080fb0014951bfffc80c7001094dbfffc80a7001494bbfffc80870018949bfffc8067001c947bfffc83270020973bfffc83070024971bfffc80c7000c80a7000880870004806700003c0002a7600055387c0803a64e80002182fb001482d70000281600fd4082016882bb001882950010969bfffc82750014967bfffc82550018965bfffc8235001c963bfffc82150020961bfffc81f5002495fbfffc80d5000c80b5000880950004807500003c0002a7600055387c0803a64e80002181db0014814e0000280a00614180007c280a007341810074813b001c8109000880e8000880db000c80a7004090a60000809b0010806400003c8002a760846aac3c0002a1600074a87c0803a64e80002180bb00183c8002a7608464f03c0002a7600065547c0803a64e800021833b00109079000038600001831b00207f0803a63b7b00244e800020812e0000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021391d0004919d000038e0000190e8000491280000398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138dd0004919d00009106000438a000fd90a60000809b000890c40000807b0000906e000038600001833b00207f2803a63b7b00244e80002082b70000281500614180007c2815007341810074829b001c8274000882530008823b000c821200409211000081fb001081cf00003880008b386e00003c0002a1600074a87c0803a64e80002180bb00183c8002a7608464f03c0002a7600065547c0803a64e800021815b0010906a000038600001813b00207d2803a63b7b00244e80002082970000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a7d0004919d00003a4000019253000492930000823b000892710000821b0000921700003860000181fb00207de803a63b7b00244e8000203860000180fb001c7ce803a63b7b00204e80002038600001813b00187d2803a63b7b001c4e800020|@2902,1048575|96,3,@2881 104,3,I48 112,3,@2884 164,3,I24 284,3,@2865 384,3,@2865 468,3,@2888 476,3,@2891 484,3,@2884 568,3,@2892 576,3,@511 604,3,@511 660,3,@2893 836,3,@2881 844,3,@2894 852,3,@2884 936,3,@2892 944,3,@511 972,3,@511 1028,3,@2895 1204,3,I24 1300,3,@2865 1384,3,@2888 1392,3,@2896 1400,3,@2884 1484,3,@2897 1492,3,@511 1520,3,@511 1576,3,@2898 1816,3,@511 1908,3,@2865 1988,3,@2899 1996,3,@511 2024,3,@511 2080,3,@2900 2228,3,@2881 2240,3,@2884 2388,3,@2865 2488,3,@2865 2560,3,@2901 2568,3,@511 2588,3,@2881 2596,3,@2884 2836,3,@511 2856,3,@2881 2864,3,@2884 2881:O1|@2882 2882:C2,40|280300614180001c280300734181000c386000034e800020386000014e800020386000014e800020|@2883,524289| 2883:S15|436861722e69734469676974283129 2884:C2,160|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002194bbfffc949bfffc80050000941bfffc973bfffc947bfffc386000013b1b00103c0002a7600066107c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b00009319000038790000833b00043c0002a1600005347c0903a67f2803a63b7b00144e800420|@2887,1048575|64,3,@2885 136,3,@325 2885:C2,268|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000218078fff882e30000973bfffc971bfffc96fbfffc387700008318fffc801800007c0803a64e80002128030001418200ac82db000482b6000082950010969bfffc82750014967bfffc82550018965bfffc8235001c963bfffc82150020961bfffc81f5002495fbfffc80d5000c80b5000880950004807500003c0002a7600055387c0803a64e80002138600001831b00044bffff51398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002139dd0004919d0000906e0004815b0000914e0000386e0000813b00087d2803a63b7b000c4e8000203860000182db00087ec803a63b7b000c4e800020|@2886,1048575|152,3,@2865 2886:S26|4c45585f28292e7265616443686172732833296c6f6f70283129 2887:S19|4c45585f28292e726561644368617273283329 2888:O1|@2889 2889:C2,88|2803006141800014280300734181000c386000034e800020280300c341800014280300cd4181000c386000034e800020280300834180001c2803008d4181000c386000034e800020386000014e800020386000014e800020|@2890,524289| 2890:S18|436861722e69734865784469676974283129 2891:S3|307778 2892:S25|6d616c666f726d656420776f726420636f6e7374616e743a20 2893:C2,104|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000882d70000973bfffc971bfffc83160000801800007c0803a64e80002182bb00003a830000807500043b140000833b0004801800007c0903a67f2803a63b7b00084e800420|@2725,1048575| 2894:S2|3077 2895:C2,104|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000882d70000973bfffc971bfffc83160000801800007c0803a64e80002182bb00003a830000807500043b140000833b0004801800007c0903a67f2803a63b7b00084e800420|@2725,1048575| 2896:S2|3078 2897:S28|6d616c666f726d656420696e746567657220636f6e7374616e743a20 2898:C2,104|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000882d70000973bfffc971bfffc83160000801800007c0803a64e80002182bb00003a830000807500043b140000833b0004801800007c0903a67f2803a63b7b00084e800420|@2725,1048575| 2899:S23|6d616c666f726d6564207265616c206e756d6265723a20 2900:C2,104|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000882d70000973bfffc971bfffc83160000801800007c0803a64e80002182bb00003a830000807500043b140000833b0004801800007c0903a67f2803a63b7b00084e800420|@2725,1048575| 2901:S2|457e 2902:S21|4c45585f28292e70617273654e756d626572283129 2903:O4|@2905,@2904,@2721,@2728 2904:O1|@2909 2905:C2,1068|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc94bbfffc80050000941bfffc80050004941bfffc80050008941bfffc3c0002a7600065547c0803a64e800021833b0008831900002818005d4082029882fb000c947bfffc82d7001096dbfffc82b7001496bbfffc82970018969bfffc8277001c967bfffc82570020965bfffc82370024963bfffc80d7000c80b7000880970004807700003c0002a7600055387c0803a64e800021821b000c81f00000280f008341800010280f00b54181000848000018280f00c341800048280f00f5408100084800003c3880005d807b00003c0002a1600074a87c0803a64e80002180bb00103c8002a760845764831b0014833b00187f2803a63b7b001c4bfffee895fbfffc39c000292c0e00014082000c394000014800005c392efffe390900083ce002a760e758107d0c0e707d6760ae556b083c6166000180bb00007c0628404082000c3940000348000028388efffe39c40000800d00187c1b004040a00010800d00207c0803a64e8000214bffff9c280a000141820044809b001880040004941bfffc3880005d807b00083c0002a1600074a87c0803a64e80002180bb0018809b0000831b001c833b00207f2803a63b7b00244bfffe30809b00143860000183040010801800007c0803a64e800021947bfffc809b00083c6002a760636f3c3c0002a1600074a87c0803a64e8000213880005d3c0002a1600074a87c0803a64e800021809b00043c0002a1600074a87c0803a64e800021833b001c398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213b1d0004919d00003ee002a762f76f5892f8000082d9000c92d800089078000482bb001882950004827b0020929b002082550008925b001c8235000c923b001882150010921b001481f5001491fb001081d5001891db000c8155001c915b000881350020913b00048115002480fb0000951b000080d5000038a000033887000038780000831900083b330000801800007c0903a67f2803a64e80042082fb000490770000706b00014182000c3ac000034800001081830000558c083c6196000156cbf80140a20010800d00347c0803a64e8000212c1600014081009c706b00014182000c3aa000034800001081830000558c083c6195000156abf80140a20010800d00347c0803a64e8000212c1500014181001c3a6300003c6002a0606395e0800d00287c0803a64e800021706b00014182000c3a8300004800001089830004558c083c619400013a6300003880004f387400003f00000063184368801800007c0803a64e80002128030001418200244800000c3a63000048000018823b00108211000c81f00008824f00084800002882bb00108295000c82540008387300008312004c801800007c0803a64e8000213a430000823b00009251000038600001821b00147e0803a63b7b00184e800020|@2908,1048575|68,3,@2884 172,3,@2865 244,3,@511 264,3,@2872 324,3,@2875 432,3,@511 508,3,@2906 516,3,@511 536,3,@511 556,3,@511 612,3,@2907 884,3,@51 944,3,I24 2906:S20|696e76616c6964206964656e7469666572202d20 2907:C2,104|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000882d70000973bfffc971bfffc83160000801800007c0803a64e80002182bb00003a830000807500043b140000833b0004801800007c0903a67f2803a63b7b00084e800420|@2725,1048575| 2908:S20|4c45585f28292e70617273654964656e74283329 2909:C2,148|7f2802a663390002973bfffc947bfffc3b0000292c1800014082001838600001833b00047f2803a63b7b00084e8000203878fffe3b2300083c6002a7606358107f2c0e707d6360ae556b083c61770001807b00007c1718404082001838600003833b00047f2803a63b7b00084e8000203b38fffe3b190000800d00187c1b004040a00010800d00207c0803a64e8000214bffff84|@2910,917505|56,3,@2875 2910:S27|436861722e636f6e7461696e732831296d61746368283129283129 2911:O4|@2912,@2721,@2728,@9418 2912:C2,596|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc971bfffc80030000941bfffc973bfffc80030004941bfffc82e3001096fbfffc82c3001496dbfffc82a3001896bbfffc8283001c969bfffc82630020967bfffc82430024965bfffc80c3000c80a30008809b0018806300003c0002a7600055387c0803a64e80002197fbfffc3e2002a76231723e963bfffc821b001481f0000c95fbfffc3bfb0000386000013b1b001c3c0002a7600073507c0803a64e80002139c000012c0300014082000c386e000048000058398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021395d0004919d000091ca000481230000912a000039ca000080630004800d00187c1b004040a00010800d00207c0803a64e8000214bffffa03c0002a1600002a07c0803a64e800021815b000c906a00003860000183fb0008813b00107d2803a63b7b00204e800020811b000c80e3000080c8000c7c073040408200dc80bb0010947bfffc3860000183050010801800007c0803a64e800021809b0010398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d00003f0002a763187d6c9319000082e4000892f9000482db001482b6000492bb001482960008929b00108276000c825b000c927b000c82360010821b0008923b000881f6001491fb000481d60018815b000095db00008136001c953bfffc81160020951bfffc80f6002494fbfffc80d6000038a000038304000438830000387900003b300000801800007c0903a67f2803a64e800420800d00287c0803a64e800021|@2924,1048575|124,3,@2865 144,3,$2912+350 180,3,@2913 300,3,@321 436,3,@2922 2913:C2,2124|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8fff882d700002c1600454082001882d8000082b600003a800041929500004e8000202c160015408200b882b80000973bfffc971bfffc82950010969bfffc82750014967bfffc82550018965bfffc8235001c963bfffc82150020961bfffc81f5002495fbfffc80d5000c80b5000880950004807500003c0002a7600055387c0803a64e80002181db0000814efffc398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021393d0004919d000039000001910900083ce002a760e77bb890e9000480ca000c90c9000038690000800d00287c0803a64e8000212c1600b9408204e082b80000973bfffc971bfffc947bfffc82950010969bfffc82750014967bfffc82550018965bfffc8235001c963bfffc82150020961bfffc81f5002495fbfffc80d5000c80b5000880950004807500003c0002a7600055387c0803a64e80002181db0004814efff8812a0000810e0000953bfffc80e8001094fbfffc80c8001494dbfffc80a8001894bbfffc8088001c949bfffc80680020947bfffc83280024973bfffc80c8000c80a8000880880004806800003c0002a7600055387c0803a64e800021831b000028180013418000102818001b418100084800001028180041418200084800026882fb0008807700003c0002a7600054607c0803a64e800021280300b940820008480001d482db000882b6000096bbfffc3860000183150010801800007c0803a64e800021829b000c8274fff882530000947bfffc3c8002a760842974387200003c0002a760002f107c0803a64e800021388300003c6002a760637bcc3c0002a1600074a87c0803a64e8000213c8002a760847bec3c0002a1600074a87c0803a64e800021823b00108211fffc398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002139fd0004919d00003dc002a761ce7c0091cf000081500008914f0008906f0004813b000481090004951bfffc80e9000894fbfffc80c9000c94dbfffc80a9001094bbfffc80890014949bfffc80690018947bfffc8329001c973bfffc83090020971bfffc82e9002496fbfffc80c9000038a00003809b0024386f000083100004801800007c0803a64e80002182db001082b6fff882950000281400b94182008c8275000028130045418200808255000028120009418200748236000082110010961bfffc81f1001495fbfffc81d1001895dbfffc8151001c955bfffc81310020953bfffc81110024951bfffc80d1000c80b1000880910004807100003c0002a7600055387c0803a64e800021800d00187c1b004040a00010800d00207c0803a64e8000214bffff683b7b0008827b00088253000082320010963bfffc82120014961bfffc81f2001895fbfffc81d2001c95dbfffc81520020955bfffc81320024953bfffc80d2000c80b2000880920004807200003c0002a7600055387c0803a64e800021807b0004831b0008833b000c7f2803a63b7b00104bfffbb82c1800bd4082011482fb000882d7fff882b600008297000096bbfffc82740010967bfffc82540014965bfffc82340018963bfffc8214001c961bfffc81f4002095fbfffc81d4002495dbfffc80d4000c80b4000880940004807400003c0002a7600055387c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021395d0004919d0000813b0008912a0004390000b9910a0000398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138fd0004919d00009147000438c000bd90c70000398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138bd0004919d000090e50004809b00009085000038650000831b000c833b00107f2803a63b7b00144bfffaa0398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213afd0004919d000082db000492d700043aa000b992b70000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a9d0004919d000092f400049314000038740000831b0008833b000c7f2803a63b7b00104bfffa2882b80000973bfffc971bfffc947bfffc96dbfffc82950010969bfffc82750014967bfffc82550018965bfffc8235001c963bfffc82150020961bfffc81f5002495fbfffc80d5000c80b5000880950004807500003c0002a7600055387c0803a64e80002181db00002c0e00094082005c815b0008812afffc398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021391d0004919d000038e0000190e800083cc002a760c67bb890c8000480a9000c90a8000038680000800d00287c0803a64e800021280e004341800010280e00fd4181000848000010280e0041418200084800004c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021395d0004919d0000813b0004912a000491ca0000386a0000831b0008833b000c7f2803a63b7b00104bfff8f8815b0008812a0000953bfffc3860000183090010801800007c0803a64e800021947bfffc807b00083c0002a76000297c7c0803a64e800021388300003c6002a760637c843c0002a1600074a87c0803a64e8000213c8002a760847ca43c0002a1600074a87c0803a64e800021811b001080e8fffc398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002138dd0004919d00003ca002a760a57cbc90a60000808700089086000890660004807b000483230004973bfffc83030008971bfffc82e3000c96fbfffc82c3001096dbfffc82a3001496bbfffc82830018969bfffc8263001c967bfffc82430020965bfffc82230024963bfffc3a06000080c3000038a00003809b00243870000083070004801800007c0803a64e800021807b000c831b0010833b00147f2803a63b7b00184bfff7c0|@2921,1048575|152,3,@2865 220,3,@2914 344,3,@2865 444,3,@2865 504,3,@2864 580,3,@2674 592,3,@2689 612,3,@2915 620,3,@511 636,3,@2916 644,3,@511 704,3,@2917 948,3,@2865 1068,3,@2865 1200,3,@2865 1592,3,@2865 1672,3,@2914 1852,3,@2675 1872,3,@2918 1880,3,@511 1896,3,@2919 1904,3,@511 1964,3,@2920 2914:S9|456e644f664c696e65 2915:S21|756e65787065637465642063686172616374657220 2916:S11|20696e205c202e2e2e205c 2917:C2,104|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000882d70000973bfffc971bfffc83160000801800007c0803a64e80002182bb00003a830000807500043b140000833b0004801800007c0903a67f2803a63b7b00084e800420|@2725,1048575| 2918:S22|756e7072696e7461626c652063686172616374657220 2919:S16|20666f756e6420696e20737472696e67 2920:C2,104|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000882d70000973bfffc971bfffc83160000801800007c0803a64e80002182bb00003a830000807500043b140000833b0004801800007c0903a67f2803a63b7b00084e800420|@2725,1048575| 2921:S33|4c45585f28292e7061727365537472696e67283129676574537472696e67283129 2922:C2,100|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d70000973bfffc83160000801800007c0803a64e8000213aa300003c6002a760637dec3b150000833b0000801800007c0903a67f2803a63b7b00044e800420|@2725,1048575|64,3,@2923 2923:S36|6e6f206d61746368696e672071756f746520666f756e64206f6e2074686973206c696e65 2924:S21|4c45585f28292e7061727365537472696e67283129 2925:C2,112|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180030014941bfffc971bfffc947bfffc973bfffc80030000941bfffc386000013b1b00103c0002a760007ec47c0803a64e800021833b00009079000038600001831b00047f0803a63b7b00144e800020|@2932,1048575|68,3,@2926 2926:C2,152|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000218078fff8973bfffc971bfffc82e30010386000013b170000801800007c0803a64e800021947bfffc82db00043860000183160000801800007c0803a64e800021706b00014082000c8063000048000008386000093b1b00083c0002a760007f787c0803a64e80002182bb00087ea803a63b7b000c4e800020|@2931,1048575|120,3,@2927 2927:C2,652|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300094082014882f8fffc82d7fff8973bfffc971bfffc947bfffc96dbfffc3860000183160010801800007c0803a64e80002182bb0008947bfffc3880ffff8075fff83c0002a06000fe6c7c0803a64e800021388300003c6002a7606382203c0002a1600074a87c0803a64e800021388000533c0002a1600074a87c0803a64e800021829b000c8274fffc8253fffc398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a3d0004919d00003e0002a7621082589211000081f2000891f100089071000481db0004814e0004955bfffc812e0008953bfffc810e000c951bfffc80ee001094fbfffc80ce001494dbfffc80ae001894bbfffc808e001c949bfffc806e0020947bfffc832e0024973bfffc80ce000038a00003809b00243871000083120004801800007c0803a64e800021807b0008831b00107f0803a63b7b00144e80002082f8fffc973bfffc971bfffc947bfffc3860000183170000801800007c0803a64e800021706b00014082000c82c30000480000083ac0000982bb00002c150055408200702c16005340820050829b00048274fffc3860000183130000801800007c0803a64e800021706b00014082001880630000825b00087e4803a63b7b000c4e80002038600009825b00087e4803a63b7b000c4e80002038760000831b0004833b00087f2803a63b7b000c4bfffdf02c150051408200542c1600554082003438600001829b00048314fffc3c0002a760007ec47c0803a64e800021831b0004833b00087f2803a63b7b000c4bfffdb038760000831b0004833b00087f2803a63b7b000c4bfffd9838760000831b0004833b00087f2803a63b7b000c4bfffd80|@2930,1048575|100,3,@316 120,3,@2928 128,3,@511 148,3,@511 212,3,@2929 568,3,@2926 2928:S45|656e64206f662066696c6520666f756e6420696e20636f6d6d656e742028737461727473206174206c696e6520 2929:C2,104|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000882d70000973bfffc971bfffc83160000801800007c0803a64e80002182bb00003a830000807500043b140000833b0004801800007c0903a67f2803a63b7b00084e800420|@2725,1048575| 2930:S54|4c45585f28292e7061727365436f6d6d656e74283129736b6970436f6d6d656e74283129736b6970436f6d6d656e74426f6479283129 2931:S36|4c45585f28292e7061727365436f6d6d656e74283129736b6970436f6d6d656e74283129 2932:S22|4c45585f28292e7061727365436f6d6d656e74283129 2933:C2,608|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000213d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e80002138dd0004919d00003ae0000192e6000082d8000482b60000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a9d0004919d00003e6002a7627385e49274000090d400043a430000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000928300043a20009b92230000973bfffc971bfffc965bfffc949bfffc94bbfffc94dbfffc83150014801800007c0803a64e800021821b0004281000014182001081fb003039c0000391cf000081fb001081cf0004814e0000947bfffc830a0004801800007c0803a64e800021392300003c6002a16063f6583b090000801800007c0803a64e800021807b0000831b0010801800007c0803a64e800021811b001480e8000480c70000807b000083060008801800007c0803a64e80002138a30000386000013b050000801800007c0803a64e800021809b0004806400003b2000012c0300014082000c3879000048000058398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b1d0004919d00009338000482e3000092f800003b38000080630004800d00187c1b004040a00010800d00207c0803a64e8000214bffffa03c0002a1600005347c0803a64e8000213b030000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000082fb000c92e3000882db000892c3000493030000831b0020833b0018801800007c0903a67f2803a63b7b00404e800420|@2936,1048575|124,3,@2934 292,3,@711 504,3,@325 2934:C2,76|7f2802a66339000282f8000482d70000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d000092d500049075000092b70000386000017f2803a64e800020|@2935,1015809| 2935:S27|4c45585f28292e657750726f6328313329707072696e742d283129 2936:S17|4c45585f28292e657750726f6328313329 2937:O2|@2939,@2938 2938:O2|@2941,@2728 2939:C2,112|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e3001096fbfffc82c3001496dbfffc82a3001896bbfffc8283001c969bfffc82630020967bfffc82430024965bfffc80c3000c80a30008808300048063000083180004801800007c0903a64e800420|@2940,1048575| 2940:S12|4c45585f28292e7379283129 2941:C2,176|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180c5000080bb000c808500008078000482e30008398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082d7000492c3000490830000973bfffc94dbfffc949bfffc83170054801800007c0803a64e8000212803000141820018807b000082bb00087ea803a63b7b00244e800020807b000482bb00087ea803a63b7b00244e800020|@2942,1048575| 2942:S13|4c45585f28292e737928313029 2943:O1|@2944 2944:C2,112|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002183030010971bfffc80c3001494dbfffc80a3001894bbfffc8083001c949bfffc82e3002096fbfffc82c3002496dbfffc80c3000c80a3000880830004806300003c0002a7600088bc7c0903a64e800420|@2947,983055|96,3,@2945 2945:C2,12|806600003b7b00184e800020|@2946,524303| 2946:S24|4c45585f28292e6572726f724f6363757272656428313029 2947:S23|4c45585f28292e6572726f724f63637572726564283129 2948:O1|@2949 2949:C2,112|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002183030010971bfffc80c3001494dbfffc80a3001894bbfffc8083001c949bfffc82e3002096fbfffc82c3002496dbfffc80c3000c80a3000880830004806300003c0002a7600089b87c0903a64e800420|@2952,983055|96,3,@2950 2950:C2,20|38a0000190a60000386000013b7b00184e800020|@2951,524303| 2951:S21|4c45585f28292e72657365744c6578616e28313029 2952:S20|4c45585f28292e72657365744c6578616e283129 2953:O2|@2955,@2954 2954:O2|@2957,@2728 2955:C2,112|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e3001096fbfffc82c3001496dbfffc82a3001896bbfffc8283001c969bfffc82630020967bfffc82430024965bfffc80c3000c80a30008808300048063000083180004801800007c0903a64e800420|@2956,1048575| 2956:S20|4c45585f28292e666c7573684c6578616e283129 2957:C2,68|388000019086000038c0004190c30000809800048064000880c3001890c5000080bb000c82e3000492e5000082db00083aa0000192b60000386000013b7b00184e800020|@2958,1015823| 2958:S21|4c45585f28292e666c7573684c6578616e28313029 2959:O2|@2962,@2728 2960:C2,236|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc947bfffc947bfffc947bfffc947bfffc947bfffc947bfffc947bfffc947bfffc947bfffc973bfffc38bb0004808300048063000083180004801800007c0803a64e8000213980000a3bbdffd47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000833b000493230000831b00089303000482fb000c92e3000882db001092c3000c82bb001492a30010829b001892830014827b001c92630018825b00209243001c823b002492230020821b00289203002481fb00007de803a63b7b002c4e800020|@2961,1048575| 2961:S17|4c45585f28292e696e697469616c283129 2962:C2,544|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7000c973bfffc971bfffc947bfffc949bfffc94bbfffc8076000083160008801800007c0803a64e8000213aa30000807b00043b150000801800007c0803a64e800021829b000c827400048253000c947bfffc8072000483120008801800007c0803a64e8000213a230000807b00083b110000801800007c0803a64e8000213d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213a1d0004919d000039e0004191f0000081db0010814e0004812a00083d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e800021391d0004919d000080e9001890e800003d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e80002138dd0004919d00003ca0000060a5466890a600003d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e800021389d0004919d00003b200001932400003d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213b1d0004919d000082e9000492f800003d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213add0004919d00003aa0000192b60000829b00049214000090d40004911400089094000c90740010827b000c927400149314001892d4001c825b000092540020823b00089234002438600001821b00147e0803a63b7b00184e800020|@2963,1048575|312,3,I48 2963:S17|4c45585f28292e696e697469616c283329 2964:O2|@2965,@2407 2965:O2|@2967,@2966 2966:O17|@2970,@2250,@2388,@274,@3010,@3125,@2505,@2542,@230,@2545,@3128,@2348,@2086,@3212,@2969,@229,@277 2967:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@2968,1048575| 2968:S21|434f44455452454528292e67656e436f6465283129 2969:O5|@3541,@274,@2250,0,64 2970:C2,3448|7f2802a6633900023960005c800d00187d6bd8107c0b004040a00010800d00247c0803a64e80002182f8000c82d70004973bfffc971bfffc947bfffc949bfffc8076000083160010801800007c0803a64e8000213aa30000807b00003b150000801800007c0803a64e800021829b00088274000c82530004947bfffc8072000483120010801800007c0803a64e8000213a230000807b00043b110000801800007c0803a64e800021821b000c81f0000c81cf0004947bfffc806e0008830e0010801800007c0803a64e80002139430000807b00083b0a0000801800007c0803a64e800021813b00108109000c80e80004947bfffc8067000c83070010801800007c0803a64e80002138c30000807b000c3b060000801800007c0803a64e80002180bb00042805000141820058833b0014398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021389d0004919d00003f0002a763189d6c930400009064001082f9000c92e4000c82d9004092c4000882bb000c92a4000448000048809b001483240040398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021389d0004919d00003f0002a763189ed8930400009324000882fb000c92e40004947bfffc947bfffc3ac300003aa4000038a0000138800081386000173f000000631841c8801800007c0803a64e8000213a80001592830000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a7d0004919d0000907300043a40ffff925300003d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213a3d0004919d0000927100003a1b00009230000039fb000039c0000191cf0004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021395d0004919d0000813b0000912a0000811b0004910a0004947bfffc947bfffc38a0000138800081386000173f000000631841c8801800007c0803a64e80002138e0001590e30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138dd0004919d00009066000438a0ffff90a600003d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e800021389d0004919d000090c40000387b0000908300003b3b00003b00000193190004398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213afd0004919d0000829b000092970000827b000492770004825b00248232000c8211001881f0002c96dbfffc96bbfffc955bfffc96fbfffc807b0030830f0000801800007c0803a64e8000212803000141820030815b0034812a000c8109001880e8002c807b003083070008801800007c0803a64e80002181c300044800000881db0030815b0034398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021393d0004919d00003d0002a761080fb89109000080fb000490e9000c80ca000c90c9000880aa003c90a90004398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021389d0004919d00003c6002a760639f5c90640000833b00009324001090a4000c830a00089304000890c40004398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002a762d6a13892d7000093370004398000053bbdffe87c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003e8002a76294a1f492950000826a00209275001090d5000c9335000890f50004398000073bbdffe07c1df04040a00010800d001c7c0803a64e8000213a5d0004919d00003e2002a76231a38092320000821b00289212001890d2001481fb000c91f20010810a00109112000c80fb000890f20008806a003890720004398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d00003ec002a762d6a50092d9000090990004398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a9d0004919d00003e2002a762310f189234000091340004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021393d0004919d00003c8002a76084a5949089000092a90004398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002a762b5a62092b6000092f600043d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213a3d0004919d0000388000039091000096dbfffc3ae0000196fbfffc963bfffc3ac0000196dbfffc965bfffc3aa0000196bbfffc3a400001965bfffc823b003c963bfffc38c9000038b4000038990000386e0000830a0034801800007c0803a64e800021947bfffc809b0020807b001c3c0002a76000a6ac7c0803a64e800021809b0018807b00143c0002a76000a6ac7c0803a64e800021821b0038807b000083100020801800007c0803a64e80002181fb003881cf000c814e0018812a0070947bfffc807b000483090000801800007c0803a64e800021280300014182003080fb003c80c7000c80a6001880850070807b000483040008801800007c0803a64e8000218103001048000018811b003c80e8000c80c7001880a6001c81050004809b003c951bfffc807b00088304001c801800007c0803a64e800021833b00408319000c82f8001882d70044947bfffc807b000483160000801800007c0803a64e8000212803000141820084829b00448274000c8253001882320044807b000483110008801800007c0803a64e800021821b004481f0000c81cf0018814e000481230014398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000810a000491030004912300003c0002a260002e7c7c0803a64e8000213aa300004800002c82bb00448295000c827400188253001c807b000483120000801800007c0803a64e8000213aa30000281500014182025c823b0044398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a1d0004919d000039e0000191f0000481db000891d000002c1000014082000c807b000048000024961bfffc807b00043b1b004c3c0002a76000a8747c0803a64e8000213b7b000483110014801800007c0803a64e800021815b0044812a000c8109001880e80024947bfffc83070000801800007c0803a64e800021280300014182007480db004880a6000c808500188064002483230008807b00003b190000801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003f0002a76318a91c9303000082fb000092e3000482db004c7ec803a63b7b00504e80002080db003c28060001418200a880bb00488085000c806400188324000883030078398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082fb002092e300043ac0009b92c30000971bfffc83190010801800007c0803a64e8000213aa30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a30004829b000492830000831b0000801800007c0803a64e80002148000008947bfffc80bb004c809b0004807b002083050010801800007c0803a64e800021831b0020801800007c0803a64e800021809b004c3b230000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d00003f0002a76318a9609303000082e4000c92e3001082c4000892c3000c82a4000492a3000893230004829b00507e8803a63b7b00544e800020823b00002c11000140820058821b0044398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003de002a761efaa1491e3000081d0000c91c30008815b000c91430004813b00487d2803a63b7b004c4e800020387100003b1b00483c0002a76000aa707c0803a64e80002138830000386000033b1b00483c0002a76000ad2c7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a1d0004919d00009070000481fb000891f0000081db0044800e002c941bfffc38700000830e0028801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021395d0004919d000039200001912a0004906a00002c0a00014082000c807b000448000024955bfffc807b00083b1b00503c0002a76000b2e87c0803a64e8000213b7b0004831b0000801800007c0803a64e800021811b003c28080001418200b080fb004880c7000c80a60018808600083b230000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000831b0020930300043ae0009b92e30000973bfffc80050078941bfffc83040010801800007c0803a64e8000213ac30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092c3000482bb000492a30000831b0000801800007c0803a64e8000214800000c947bfffc947bfffc80fb0050809b0004807b002483070010801800007c0803a64e800021831b0024801800007c0803a64e80002180db005038a300003980000a3bbdffd47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003c8002a76084b3909083000090a300248326002493230020830600209303001c82e6001c92e3001882c6001892c3001482a6000492a30010829b00189283000c8266000c92630008825b001092430004823b00547e2803a63b7b00584e800020|@3009,1048575|340,3,@2971 428,3,@2973 480,3,I11 692,3,I11 1032,3,@2520 1104,3,@2974 1176,3,@2977 1228,3,@2979 1296,3,@2981 1388,3,@2983 1440,3,@2517 1492,3,@2985 1544,3,@2987 1704,3,@2989 1728,3,@2989 2060,3,@755 2216,3,@2991 2372,3,@2992 2676,3,@2994 2784,3,@2995 2836,3,@2996 2864,3,@2999 3036,3,@3005 3352,3,@3006 2971:C2,288|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000c82d700083aa30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082980010928300043a60009b92630000973bfffc971bfffc96bbfffc83160010801800007c0803a64e800021825b00048232000c8211001839e30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000091e3000481db000091c3000083100078801800007c0803a64e800021815b0004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000812a000491230004811b000091030000830a0008833b0008801800007c0903a67f2803a63b7b000c4e800420|@2972,1048575| 2972:S40|434f44455452454528292e67656e436f6465283229636f646547656e416e645072696e742d283129 2973:C2,104|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000213ae30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082d8000492c3000492e3000083180008801800007c0903a67f2803a64e800420|@2972,1048575| 2974:C2,344|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c050001408200d438b900003a7800003a4400008223000038910000807300103c0002a36000414c7c0803a64e8000212c030001408200848213000481f0001881cf0034398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d0000394000019143000c9243000839200003912300049223000094bbfffc80130008941bfffc830e0004801800007c0803a64e800021831b0000833b0004801800007c0903a67f2803a63b7b00084e80042080830000387200008313000c3b250000801800007c0903a67f2803a64e800420973bfffc82f8000482d7000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003e8002a76294a0d0929500083e6002a06273c7ac92750004825600009255000038750000800d00287c0803a64e800021|@2976,1048575|64,3,@1155 296,3,@2975 308,3,@227 2975:S36|6f75746572206c6576656c207265616368656420696e206c6f6f6b75704e657741646472 2976:S50|434f44455452454528292e67656e436f6465283229696e736572746564436f64652d6c6f6f6b75704e657741646472283329 2977:C2,104|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021398000013bbdfff87c1df04040a00010800d001c7c0803a64e8000213afd0004919d00009097000038b7000038830000807800043c0002a36000620c7c0903a67f2803a64e800420|@2978,1048079|84,3,@1198 2978:S48|434f44455452454528292e67656e436f6465283229696e736572746564436f64652d656e7465724e6577446563283229 2979:C2,312|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc947bfffc949bfffc3864000083180010801800007c0803a64e800021833b00088319000c82f8001882d70034947bfffc83160000801800007c0803a64e800021280300014182007482bb000c8295000c8274001882530034807b000083120008801800007c0803a64e800021823b000c398000013bbdfff87c1df04040a00010800d001c7c0803a64e8000213a1d0004919d000081fb000491f0000038b0000080830000807100083c0002a36000620c7c0803a64e80002182bb000c398000013bbdfff87c1df04040a00010800d001c7c0803a64e8000213a9d0004919d0000827b00049274000038b40000809b000880750004833b00103c0002a36000620c7c0903a67f2803a63b7b00144e800420|@2980,1048575|208,3,@1198 288,3,@1198 2980:S45|434f44455452454528292e67656e436f6465283229696e736572746564436f64652d656e746572446563283229 2981:C2,304|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8001828170001418200b482d8001482b60018829600083a630000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082580010924300043a20009b92230000973bfffc971bfffc967bfffc80150078941bfffc83140010801800007c0803a64e8000213a030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00009203000481fb000491e30000831b0000801800007c0803a64e80002148000014973bfffc971bfffc947bfffc947bfffc82db0008809b0004807600088316000c801800007c0803a64e80002182bb0008388300008075000883150004833b000c801800007c0903a67f2803a63b7b00104e800420|@2982,1048575| 2982:S41|434f44455452454528292e67656e436f6465283229696e736572746564436f64652d6576616c283129 2983:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@2984,1048575| 2984:S50|434f44455452454528292e67656e436f6465283229696e736572746564436f64652d6c6f6f6b75704e657741646472283129 2985:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@2986,1048575| 2986:S45|434f44455452454528292e67656e436f6465283229696e736572746564436f64652d656e746572446563283129 2987:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@2988,1048575| 2988:S48|434f44455452454528292e67656e436f6465283229696e736572746564436f64652d656e7465724e6577446563283129 2989:C2,396|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180830000830400002c1800014082000c386000014e80002082e4000482d700002c160001408200103ea0000062b54688480000bc973bfffc947bfffc96fbfffc96dbfffc97fbfffc3e8002a76294a75a969bfffc3a600001967bfffc3bfb000038a0000138800001387600003f000000631841c8801800007c0803a64e8000213a43000083fb0008480000183c6002a06063a344800d00287c0803a64e80002196dbfffc38c0000138b2000038800003807b00143f000000631858c8801800007c0803a64e800021387200003f00000063184648801800007c0803a64e8000213ab200003b7b00144800000c973bfffc947bfffc398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a9d0004919d000092b400043a60000192740000825b000092920000724b0001418200183c6002a66063f27c800d00287c0803a64e80002138720000833b00043f00000063184648801800007c0903a67f2803a63b7b00084e800420|@2990,1048575|72,3,I49 104,3,$2989+174 140,3,I11 172,3,@78 212,3,I195 236,3,I47 340,3,@2448 368,3,I47 2990:S22|5374726574636841727261792e667265657a65283229 2991:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c8078ffb44e800020973bfffc971bfffc80030000941bfffc806300044bffffbd398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b00009319000038790000833b00087f2803a63b7b000c4e800020|@468,786433| 2992:C2,8|807800044e800020|@2993,786433| 2993:S24|434f44455452454528292e67656e436f6465283229283129 2994:C2,152|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8001082d7001882b60038973bfffc80150004941bfffc8018000c941bfffc80180008941bfffc3860000183180004801800007c0803a64e800021831b0000801800007c0803a64e800021831b0004801800007c0803a64e800021831b0008833b000c801800007c0903a67f2803a63b7b00104e800420|@2993,1048575| 2995:C2,64|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000882d7001882b600388078000483150004801800007c0903a64e800420|@2993,1048575| 2996:C2,460|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e80002082f8fffc82d7000c82b6001882950054973bfffc971bfffc947bfffc80030000941bfffc807b000083140000801800007c0803a64e8000212803000141820098827b00088253fffc8232000c8211001881f00054807b0000830f0008801800007c0803a64e80002181db0004800e0004941bfffc831b000c4bffff59947bfffc807b0004831b00104bffff492c03000140820018807b0000815b00147d4803a63b7b00184e800020947bfffc807b00043b1b00183c0002a76000ac587c0803a64e800021815b00187d4803a63b7b001c4e800020827b00088253fffc8232000c8211001881f0002c807b0000830f0000801800007c0803a64e800021280300014182008081db0008814efffc812a000c8109001880e8002c807b000083070008801800007c0803a64e80002180db000480660004831b00084bfffe99398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138bd0004919d000090650004809b00009085000038650000833b000c7f2803a63b7b00104e80002081db0004806e0004831b0008833b000c7f2803a63b7b00104bfffe40|@2998,1048575|228,3,@2997 2997:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c8078ffe84e800020973bfffc971bfffc80030000941bfffc806300044bffffbd398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b00009319000038790000833b00087f2803a63b7b000c4e800020|@468,786433| 2998:S36|434f44455452454528292e67656e436f6465283229657870616e644d757475616c283129 2999:C2,476|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0400014082000c386000014e80002082f8fffc82d7000c82b600188295002c973bfffc971bfffc947bfffc949bfffc80040000941bfffc807b000083140000801800007c0803a64e8000212803000141820108827b000c8253fffc8232000c8211001881f0002c807b0000830f0008801800007c0803a64e80002181db000481430000813b00087d4b4838556bf80140a20010800d00347c0803a64e8000217c0a480040800020808e000438690000831b000c833b00107f2803a63b7b00144bffff28386e00003b1b00103c0002a76000af247c0803a64e800021811b0008398000025500f80140a20010800d00347c0803a64e8000217ce8661541a3fff0947bfffc809b000838670000831b00104bfffed1398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138dd0004919d00009066000480bb000090a6000038660000809b00147c8803a63b7b00184e800020827b000c8253fffc8232000c8211000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002139fd0004919d00003dc002a761ceb29c91cf00083d4002a0614ac7ac914f000481300000912f0000386f0000800d00287c0803a64e800021|@3004,1048575|236,3,@3000 428,3,@3003 440,3,@227 3000:C2,772|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c030001408200148078fffc82e3fffc807700304e80002082f8fffc82d7fffc82b6000c829500188274002c973bfffc971bfffc947bfffc80030000941bfffc807b000083130000801800007c0803a64e8000212803000141820224825b00088232fffc8211fffc81f0000c81cf0018814e002c807b0000830a0008801800007c0803a64e800021813b0004811b000880e3000080c8fff87ceb3378556bf80140a20010800d00347c0803a64e8000217c0730004182001c806900043b080000833b000c7f2803a63b7b00104bffff1c80a8fffc8085fffc8324000c8319001882f8002880030004941bfffc807b000083170000801800007c0803a64e800021280300014182010082db000c82b6fffc8295fffc8274000c8253001882320028807b000083110008801800007c0803a64e800021821b000c81f0fffc81cffffc814e000c812a00188109006880e9003438c30000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d000038a0000190a3000c38800001908300083b200003932300048310fff89303000094dbfffc80080004941bfffc83070004801800007c0803a64e8000213ae30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082db000492c3000492e30000831b0000833b0018801800007c0903a67f2803a63b7b001c4e80042082db000c82b6fffc8295fffc8274000c8253001882320034398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00003a0000019203000c39e0000191e3000839c0000391c300048156fff89143000083110004833b0010801800007c0903a67f2803a63b7b00144e800420825b00088232fffc8211fffc81f0000c81cf000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021395d0004919d00003d2002a76129b244912a00083d0002a06108c7ac910a000480ee000090ea0000386a0000800d00287c0803a64e800021|@3002,1048575|724,3,@3001 736,3,@227 3001:S21|66696e64456e7472793a206e6f74204465636c6172 3002:S45|434f44455452454528292e67656e436f646528322967657456616c75657328322966696e64456e747279283129 3003:S23|67657456616c7565733a206e6f742061204465636c6172 3004:S33|434f44455452454528292e67656e436f646528322967657456616c756573283229 3005:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c8078ffb04e800020973bfffc971bfffc80030000941bfffc806300044bffffbd398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b00009319000038790000833b00087f2803a63b7b000c4e800020|@468,786433| 3006:C2,980|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc3860000183180024801800007c0803a64e800021833b00008319000882f80010947bfffc8317000c801800007c0803a64e800021280300014182006482bb0004829500088274000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a5d0004919d00003e2002a76231b780923200083e0002a06210c7ac9212000481f3000091f2000038720000800d00287c0803a64e80002182db000482b6000882950010807b000083140018801800007c0803a64e8000213ac30000827b0004398000083bbdffdc7c1df04040a00010800d001c7c0803a64e8000213a5d0004919d00003e2002a7623112589232000092d2001c821300109212001881f3002091f2001481d3001491d200108153001c9152000c8133001891320008811300089112000480e8001096dbfffc965bfffc8007002c941bfffc3860000183070010801800007c0803a64e80002138c30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000090c3000480bb000890a30000831b0000801800007c0803a64e800021809b0010832400088319001882f8003880170004941bfffc80040014941bfffc83040010801800007c0803a64e80002182db001882b600088295001882740070947bfffc8016000c941bfffc807b000083130000801800007c0803a64e8000212803000141820030823b00208211000881f0001881cf0070807b0000830e0008801800007c0803a64e8000218243000448000040825b002082320008398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a5d0004919d00003e0002a76210b7a89212000092320004398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002139fd0004919d00003dc002a061cec4c891cf0000815b0014914f0008924f0004813b00208109000880e8001880c7007095fbfffc8009000c941bfffc807b000083060000801800007c0803a64e8000212803000141820030809b0028806400088323001883190070807b000083180008801800007c0803a64e80002180a3000c480000343d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e80002138bd0004919d00003880000190850000807b002883230004398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d00009323001090a3000c831b000c9303000882fb000492e300043ac0000192c30000831b0010801800007c0803a64e800021831b0014833b002c801800007c0903a67f2803a63b7b00304e800420|@2993,1048575|148,3,@3007 160,3,@227 272,3,@2535 636,3,@3008 688,3,@218 3007:S31|526573756c7420766563746f72206973206e6f7420616e2061646472657373 3008:C2,104|7f2802a663390002973bfffc8078000482e3000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002a062b5eef092b600083ea002a062b5c7ac92b6000482b7000092b6000038760000800d00287c0803a64e800021|@270,1015809|56,3,@269 68,3,@227 3009:S21|434f44455452454528292e67656e436f6465283229 3010:O11|@3012,@274,@3125,@2340,@3128,@3011,@230,@2969,@2242,@2086,1 3011:O3|@3140,@274,@3139 3012:C2,420|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021971bfffc947bfffc398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002a762d6ba4c92d7000082d8000492d70004947bfffc947bfffc3ab900003a8400003a77000038a00001388000813860000d3f000000631841c8801800007c0803a64e80002138a0000b90a30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021389d0004919d0000906400043860ffff906400003d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213b3d0004919d0000909900003b1b0000933800003afb00003ac0000192d70004398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138bd0004919d0000809b000090850000807b0004906500043d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213b3d0004919d00003b0000019319000096bbfffc38d9000038930000387400003b1b00103c0002a76000bb287c0803a64e80002182fb00007ee803a63b7b00144e800020|@3124,1048575|76,3,@3013 128,3,I11 388,3,@3016 3013:C2,104|7f2802a663390002973bfffc8078000482e3000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002a762b5bad092b600083ea002a062b5c7ac92b6000482b7000092b6000038760000800d00287c0803a64e800021|@3015,1015809|56,3,@3014 68,3,@227 3014:S31|6f75746572206c6576656c207265616368656420696e20636f7079436f6465 3015:S37|434f44455452454528292e707265436f6465283229696e736572746564436f64652d283129 3016:C2,768|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc947bfffc3ad900003ab800003a8300003a6400003a45000038a00001388000813860000d3f000000631841c8801800007c0803a64e80002138a0000b90a30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021389d0004919d0000906400043860ffff906400003d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213b3d0004919d0000909900003b1b0000933800003afb000038a0000190b70004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021389d0004919d0000807b000090640000833b000493240004947bfffc947bfffc3a24000038a00001388000813860000d3f000000631841c8801800007c0803a64e80002138a0000b90a30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021389d0004919d0000906400043860ffff906400003d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213b3d0004919d0000909900003b1b0000933800003afb000038a0000190b70004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021389d0004919d0000807b000090640000833b000493240004947bfffc947bfffc3a04000038a00001388000813860000d3f000000631841c8801800007c0803a64e80002138a0000b90a30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021389d0004919d0000906400043860ffff906400003d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213b3d0004919d0000909900003b1b0000933800003afb000038a0000190b70004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021389d0004919d0000807b000090640000833b00049324000494dbfffc965bfffc963bfffc96bbfffc967bfffc961bfffc949bfffc96dbfffc387400003b1b00343c0002a76000be447c0803a64e800021831b00007f0803a63b7b00384e800020|@3123,1048575|72,3,I11 288,3,I11 504,3,I11 736,3,@3017 3017:C2,4252|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021971bfffc82f8ffdc82d7000082b600048295001882740050973bfffc947bfffc83130000801800007c0803a64e8000212803000141820018807b0000825b00047e4803a63b7b000c4e800020825b00088232ffdc8211000081f0000481cf0018814e0010807b0000830a0000801800007c0803a64e80002128030001418200bc813b00088109ffdc80e8000080c7000480a6001880850010807b000083040008801800007c0803a64e80002180030000941bfffc80630004831b000c4bffff25947bfffc807b0004831b00104bffff15833b00108319ffdc82f8000082d7000482b60018829500103a630000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000825b0000924300049263000083140004833b000c801800007c0903a67f2803a63b7b00144e800420813b00088109ffdc80e8000080c7000480a600188085001c807b000083040000801800007c0803a64e8000212803000141820030807b00088323ffdc8319000082f8000482d7001882b6001c80750004829b00047e8803a63b7b000c4e800020807b00088323ffdc8319000082f8000482d7001882b60030807b000083150000801800007c0803a64e8000212803000141820154829b00088274ffdc82530000823200048211001881f00030807b0000830f0008801800007c0803a64e80002180030004941bfffc806300003b1b000c3c0002a76000cefc7c0803a64e80002181db000c814effdc812a00008109000480e8001880c70034947bfffc807b000483060000801800007c0803a64e8000212803000141820054809b00108064ffdc832300008319000482f8001882d70034807b000483160008801800007c0803a64e8000213883000038600001831b00103c0002a76000cff87c0803a64e80002138a3000048000014807b0004831b00104bfffd3938a30000809b00108064ffdc832300008319000482f8001882d70030398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003aa0000192a3000890a30004829b00009283000083160004833b000c801800007c0903a67f2803a63b7b00144e800420829b00088274ffdc82530000823200048211001881f00034807b0000830f0000801800007c0803a64e800021280300014182005881db0008814effdc812a00008109000480e8001880c70034807b000083060008801800007c0803a64e8000213883000038600003831b0008833b00043c0002a76000cff87c0903a67f2803a63b7b000c4e80042081db0008814effdc812a00008109000480e8001880c70040807b000083060000801800007c0803a64e80002128030001418200b480bb00088085ffdc80640000832300048319001882f80040807b000083170008801800007c0803a64e80002182db000882b6ffdc8295000082740004825300188232004080030004941bfffc80110004941bfffc806300003b1600004bfffbad3a030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000081fb000491e3000492030000831b0000833b000c801800007c0903a67f2803a63b7b00144e80042080bb00088085ffdc80640000832300048319001882f80024807b000083170000801800007c0803a64e800021280300014182004482db000882b6ffdc82950000827400048253001882320024807b000083110008801800007c0803a64e800021807b0000821b00047e0803a63b7b000c4e80002082db000882b6ffdc82950000827400048253001882320014807b000083110000801800007c0803a64e8000212803000141820128821b000881f0ffdc81cf0000814e0004812a001881090014807b000083080008801800007c0803a64e80002180030000941bfffc80030004941bfffc80fb00002c0700014082000c38c000014800004880070004941bfffc806700003b1b00143c0002a76000d2f07c0803a64e80002180fb00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffffb0807b0004831b00104bfffa15947bfffc807b00043b1b00143c0002a76000d4dc7c0803a64e80002180bb00148085ffdc832400008319000482f8001882d700143aa30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a30004829b00009283000083160004833b0010801800007c0903a67f2803a63b7b00184e800420821b000881f0ffdc81cf0000814e0004812a00188109004c807b000083080000801800007c0803a64e800021280300014182008080fb000880c7ffdc80a6000080850004806400188323004c807b000083190008801800007c0803a64e800021831b000882f8ffdc82d7000082b60004829500188274004c80130004941bfffc3b1b000c3c0002a76000d7d07c0803a64e800021831b0000833b0008801800007c0903a67f2803a63b7b00104e80042080fb000880c7ffdc80a6000080850004806400188323005c807b000083190000801800007c0803a64e8000212803000141820074831b000882f8ffdc82d7000082b60004829500188274005c807b000083130008801800007c0803a64e800021825b00088232ffdc8211000081f0000481cf0018814e005c800a0004941bfffc3b1200004bfff859831b0000833b0008801800007c0903a67f2803a63b7b00104e800420831b000882f8ffdc82d7000082b600048295001882740020807b000083130000801800007c0803a64e800021280300014182005c825b00088232ffdc8211000081f0000481cf0018814e0020807b0000830a0008801800007c0803a64e80002180a300088083000480630000831b0008833b00043c0002a76000d8987c0903a67f2803a63b7b000c4e800420825b00088232ffdc8211000081f0000481cf0018814e0058807b0000830a0000801800007c0803a64e8000212803000141820080813b00088109ffdc80e8000080c7000480a6001880850058807b000083040008801800007c0803a64e8000213b1b00083c0002a8600013887c0803a64e8000213b1b00083c0002a8600044d47c0803a64e800021833b00088319ffdc82f8000083170008833b0004801800007c0903a67f2803a63b7b000c4e800420813b00088109ffdc80e8000080c7000480a6001880850060807b000083040000801800007c0803a64e8000212803000141820074807b00088323ffdc8319000082f8000482d7001882b60060807b000083150008801800007c0803a64e800021829b00088274ffdc8253000080120010941bfffc3b1b000c3c0002a860004d307c0803a64e800021831b0000833b0008801800007c0903a67f2803a63b7b00104e800420807b00088323ffdc8319000082f8000482d7001882b60048807b000083150000801800007c0803a64e8000212803000141820018807b0000829b00047e8803a63b7b000c4e800020829b00088274ffdc82530000823200048211001881f00044807b0000830f0000801800007c0803a64e80002128030001418200dc81db0008814effdc812a00008109000480e8001880c70044807b000083060008801800007c0803a64e8000213d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e80002138bd0004919d000038800003908500008323000c973bfffc83030010971bfffc82e3001496fbfffc82c3001896dbfffc82a3001c96bbfffc80c300083a85000080a3000480830000387400003b1b001c3c0002a860001b6c7c0803a64e80002138830000386000033b1b00083c0002a860002db47c0803a64e800021827b00047e6803a63b7b000c4e80002081db0008814effdc812a00008109000480e8001880c7003c807b000083060000801800007c0803a64e80002128030001418200e880bb00088085ffdc80640000832300048319001882f8003c807b000083170008801800007c0803a64e80002180030000941bfffc80030008941bfffc80630004831b00104bfff48d947bfffc807b0008831b00144bfff47d947bfffc807b00083b1b00183c0002a860004df87c0803a64e80002182db001882b6ffdc8295000082740004825300188232003c3a030000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00009203000881fb000491e3000481db000091c3000083110004833b0014801800007c0903a67f2803a63b7b001c4e80042080bb00088085ffdc80640000832300048319001882f80018807b000083170000801800007c0803a64e800021280300014182011082db000882b6ffdc82950000827400048253001882320018807b000083110008801800007c0803a64e800021821b000881f0ffdc81cf0000814e0004812a00188109001880030000941bfffc80030004941bfffc80030008941bfffc80030010941bfffc80080004941bfffc8063000c3b1b001c3c0002a860004ec07c0803a64e800021947bfffc807b0008831b00204bfff329947bfffc807b0010831b00244bfff31938e30000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d000080db000090c3001080bb000490a3000c90e30008809b001490830004833b001893230000831b0008833b0020801800007c0903a67f2803a63b7b00284e80042082db000882b6ffdc82950000827400048253001882320028807b000083110000801800007c0803a64e8000212803000141820044821b000881f0ffdc81cf0000814e0004812a001881090028807b000083080008801800007c0803a64e800021807b000080fb00047ce803a63b7b000c4e800020821b000881f0ffdc81cf0000814e0004812a001881090064807b000083080000801800007c0803a64e80002128030001418200d080fb000880c7ffdc80a60000808500048064001883230064807b000083190008801800007c0803a64e800021831b000882f8ffdc82d7000082b60004829500188274006480030000941bfffc80030004941bfffc80130004941bfffc806300084bfff1a5947bfffc807b0008831b00184bfff1953a430000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000823b00009223000892430004821b000c92030000831b0004833b0014801800007c0903a67f2803a63b7b001c4e80042080fb000880c7ffdc80a60000808500048064001883230068807b000083190000801800007c0803a64e80002128030001418200b4831b000882f8ffdc82d7000082b600048295001882740068807b000083130008801800007c0803a64e800021825b00088232ffdc8211000081f0000481cf0018814e006880030004941bfffc800a0004941bfffc806300003b1200004bfff0a939230000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000811b00049103000491230000831b0000833b000c801800007c0903a67f2803a63b7b00144e800420831b000882f8ffdc82d7000082b600048295001882740038807b000083130000801800007c0803a64e8000212803000141820058825b00088232ffdc8211000081f0000481cf0018814e0038807b0000830a0008801800007c0803a64e800021813b00088109ffdc80e8000083070018833b0004801800007c0903a67f2803a63b7b000c4e800420825b00088232ffdc8211000081f0000481cf000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021395d0004919d00003d2002a861294fe4912a00083d0002a06108c7ac910a000480ee000090ea0000386a0000800d00287c0803a64e800021|@3122,1048575|552,3,@3018 680,3,@3020 940,3,@3020 1456,3,@3022 1532,3,@3025 1784,3,@3029 2108,3,@3030 2232,3,@3074 2252,3,@3111 2428,3,@3118 2752,3,@3075 2780,3,@3088 2964,3,@3119 3260,3,@3120 4204,3,@3121 4216,3,@227 3018:C2,172|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e800020973bfffc971bfffc80030000941bfffc806300044bffffbd947bfffc807b0004833b0008831900003c0002a76000be447c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b1d0004919d000082fb000092f80004907800003878000082db000c7ec803a63b7b00104e800020|@3019,1048575|88,3,@3017 3019:S41|434f44455452454528292e707265436f6465283229636f7079436f64652834297265766d6170283229 3020:C2,680|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e400082c170001418200084800001482c400002c160001418200084800004c3ac30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092c3000892e30004908300008318ffd8801800007c0903a67f2803a64e80042056cbf80140a20010800d00347c0803a64e8000212c160001408000e43980000256c0f80140a20010800d00347c0803a64e8000217eb6641141a3fff03a7900003a5800003a3600003a150000389000008072ffe43c0002a36000414c7c0803a64e80002139d3000039520000393100003903000038a0000338900000806affe43c0002a36000620c7c0803a64e8000216907000280caffdc80a60000808500048064001883230034398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d000090e3000c3b000001930300083ae0000392e3000491230000831900043b2e0000801800007c0903a67f2803a64e8004203a7900003a5800003a2300003a160000389000008072ffd03c0002a36000414c7c0803a64e800021706b000140820010806300007e6803a64e800020389000008072ffe03c0002a36000414c7c0803a64e800021281100014182003439d3000039520000393000003903000038a0000338890000806affd43c0002a36000620c7c0803a64e8000214800001439030000393000003952000039d3000038a0000338890000806affe03c0002a36000620c7c0803a64e800021690f0002810affdc80e8000080c7000480a6001880850034398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d000091e3000c3b200001932300083b0000039303000491230000830400043b2e0000801800007c0903a67f2803a64e800420|@3021,1048575|220,3,@1155 264,3,@1198 412,3,@1155 456,3,@1155 508,3,@1198 556,3,@1198 3021:S42|434f44455452454528292e707265436f6465283229636f7079436f64652834296c6f6361646472283229 3022:C2,360|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000082d7ffdc82b6000082950004827400188253002c973bfffc971bfffc947bfffc83120000801800007c0803a64e80002128030001418200a4823b00048211000081f0ffdc81cf0000814e0004812a00188109002c807b000083080008801800007c0803a64e80002180fb000480c7000081c3000038a00001388e00008066ffe03c0002a36000620c7c0803a64e8000218147000038a00001388e0000806affd43c0002a36000620c7c0803a64e80002138a00001388e0000806affd0833b00083c0002a36000620c7c0903a67f2803a63b7b000c4e800420823b00048211000081f0ffdc81cf0000814e0004812a000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021391d0004919d00003ce002a760e7d47490e800083cc002a060c6c7ac90c8000480a9000090a8000038680000800d00287c0803a64e800021|@3024,1048575|164,3,@1198 196,3,@1198 228,3,@1198 312,3,@3023 324,3,@227 3023:S29|6465636c6172654172673a206e6f742061206465636c61726174696f6e 3024:S54|434f44455452454528292e707265436f6465283229636f7079436f6465283429696e736572742831296465636c617265417267283129 3025:C2,168|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e800020973bfffc971bfffc80030000941bfffc806300044bffffbd947bfffc807b0004831b00083c0002a76000d5a07c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d0000831b000093190004907900003879000082fb000c7ee803a63b7b00104e800020|@3019,1048575|84,3,@3026 3026:C2,436|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000082d7ffdc82b6000082950004827400188253002c973bfffc971bfffc947bfffc83120000801800007c0803a64e80002128030001418200f0823b00048211000081f0ffdc81cf0000814e0004812a00188109002c807b000083080008801800007c0803a64e80002180fb000480c7000081c300008143000438a00001388e00008066ffe03c0002a36000620c7c0803a64e80002195dbfffc386a0000830700003c0002a76000be447c0803a64e800021813b00088109000080e8ffdc80c7000080a60004808500188324002c3b030000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003ae0000392e300089303000482db000092c3000083190004833b000c801800007c0903a67f2803a63b7b00104e800420823b00048211000081f0ffdc81cf0000814e0004812a000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021391d0004919d00003ce002a760e7d77090e800083cc002a060c6c7ac90c8000480a9000090a8000038680000800d00287c0803a64e800021|@3028,1048575|168,3,@1198 196,3,@3017 388,3,@3027 400,3,@227 3027:S26|636f70794465633a206e6f742061206465636c61726174696f6e 3028:S51|434f44455452454528292e707265436f6465283229636f7079436f6465283429696e73657274283129636f7079446563283129 3029:C2,172|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e800020973bfffc971bfffc80030000941bfffc806300044bffffbd947bfffc807b0004833b0008831900003c0002a76000be447c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b1d0004919d000082fb000092f80004907800003878000082db000c7ec803a63b7b00104e800020|@3019,1048575|88,3,@3017 3030:C2,2776|7f2802a66339000239600074800d00187d6bd8107c0b004040a00010800d00247c0803a64e8000213919000038f8000038c30000949bfffc386000013b0700003c0002a76000e38c7c0803a64e800021951bfffc94fbfffc94dbfffc94bbfffc947bfffc807b00143b0700003c0002a76000be447c0803a64e80002138a3000038600001831b000c3c0002a76000e38c7c0803a64e80002194bbfffc947bfffc807b0008831b00143c0002a76000e7887c0803a64e800021807b000c831b00143c0002a76000be447c0803a64e8000213903000038600001831b00143c0002a76000e38c7c0803a64e800021947bfffc947bfffc951bfffc947bfffc38bb000838830000807b0010831b00243c0002a76000ebe87c0803a64e800021807b0010831b00243c0002a76000f47c7c0803a64e800021807b0020831b00243c0002a76000be447c0803a64e800021947bfffc3b1b00303c0002a76000f60c7c0803a64e8000212c030001408200ac80fb002880c7ffdc80a6000080050020941bfffc809b0014807b001c3b1b00343c0002a8600008207c0803a64e800021947bfffc809b0014807b00103b1b00383c0002a8600008207c0803a64e80002138830000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000090830008833b000093230004831b000893030000831b0004833b0034801800007c0903a67f2803a63b7b003c4e80042080fb002880c7ffdc80a6000080850004832400188319001880030000941bfffc80030004941bfffc80030008941bfffc8003000c941bfffc807b001883180000801800007c0803a64e800021280300014182070482fb003882d7ffdc82b60000829500048274001882530018807b001883120008801800007c0803a64e80002180030000941bfffc80030004941bfffc80030008941bfffc8003000c941bfffc80030010941bfffc809b0008807b00143b1b00543c0002a8600002807c0803a64e800021706b0001408205688223000c2c110003408203bc8203000081e3000838af000038900000807b00283c0002a860000b6c7c0803a64e800021947bfffc947bfffc961bfffc95fbfffc38bb0008809b0038807b0048831b005c3c0002a76000ebe87c0803a64e80002180bb0000809b0004807b00483c0002a860000e7c7c0803a64e80002128030001418201a481db005c814effdc812a00008109000480e8001880c7001880060004941bfffc809b0010807b00503b1b00683c0002a8600008207c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138bd0004919d0000809b002c908500049065000094bbfffc807b001c3b1b006c3c0002a8600010487c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b000093190000973bfffc809b0014807b001c3b1b00703c0002a8600008207c0803a64e80002182fb003882db00287eebb038556bf80140a20010800d00347c0803a64e8000217c17b0004080000c3ab70000480000083ab60000829b003c827b002c7e8b9838556bf80140a20010800d00347c0803a64e8000217c1498004081000c3a540000480000083a5300003a230000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d000092230010821b00009203000c81fb003091e3000892a3000492430000831b0008833b006c801800007c0903a67f2803a63b7b00744e80042081db005c814effdc812a00008109000480e8001880c7001880060004941bfffc809b0010807b00503b1b00683c0002a8600008207c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138bd0004919d0000809b002c908500049065000094bbfffc807b001c3b1b006c3c0002a86000114c7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b000093190000973bfffc809b0014807b001c3b1b00703c0002a8600008207c0803a64e80002182fb003882db00287eebb038556bf80140a20010800d00347c0803a64e8000217c17b0004080000c3ab70000480000083ab60000829b003c827b002c7e8b9838556bf80140a20010800d00347c0803a64e8000217c1498004081000c3a540000480000083a5300003a230000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d000092230010821b00009203000c81fb002491e3000892a3000492430000831b0008833b006c801800007c0903a67f2803a63b7b00744e800420821b004c81f0ffdc81cf0000814e0004812a00188109001880080004941bfffc809b0038807b00403b1b00583c0002a8600008207c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138fd0004919d000080db001c90c700049067000094fbfffc807b000c3b1b005c3c0002a8600012507c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138bd0004919d000090650004809b00009085000094bbfffc809b003c807b000c3b1b00603c0002a8600008207c0803a64e800021833b0028831b00187f2bc038556bf80140a20010800d00347c0803a64e8000217c19c0004080000c3af90000480000083af8000082db002c82bb001c7ecba838556bf80140a20010800d00347c0803a64e8000217c16a8004081000c3a960000480000083a9500003a630000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d000092630010825b00009243000c823b00149223000892e3000492830000831b0008833b005c801800007c0903a67f2803a63b7b00644e800420823b004c8211ffdc81f0000081cf0004814e0018812a001880090004941bfffc809b0038807b00403b1b00583c0002a8600008207c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021391d0004919d000080fb001c90e8000490680000398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138dd0004919d000038a0000190a600049106000094dbfffc809b0038807b00343b1b005c3c0002a8600008207c0803a64e80002138830000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d000090830010833b00009323000c831b001c9303000882fb002492e3000482db002892c30000831b0004833b0058801800007c0903a67f2803a63b7b00604e80042082fb003882d7ffdc82b6000082950004827400188253001880120004941bfffc809b0024807b002c3b1b00443c0002a8600008207c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a3d0004919d0000821b00089211000490710000398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002139fd0004919d000039c0000191cf0004922f0000815b003c812affdc8109000080e8000480c7001880a6001c95fbfffc807b002083050000801800007c0803a64e8000212803000141820018807b00408323ffdc831900008098002448000008809b002038640000809b00243b1b00483c0002a8600008207c0803a64e8000213b230000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d000093230010831b00009303000c82fb000892e3000882db001092c3000482bb001492a30000831b0004833b0044801800007c0903a67f2803a63b7b004c4e800420|@3073,1048575|64,3,@3031 108,3,@3017 136,3,@3031 168,3,@3033 192,3,@3017 220,3,@3031 268,3,@3038 292,3,@3048 316,3,@3017 340,3,@3050 396,3,@3060 428,3,@3060 712,3,@3054 768,3,@3064 816,3,@3038 844,3,@3068 912,3,@3060 988,3,@3070 1068,3,@3060 1328,3,@3060 1404,3,@3071 1484,3,@3060 1744,3,@3060 1820,3,@3072 1900,3,@3060 2160,3,@3060 2288,3,@3060 2452,3,@3060 2656,3,@3060 3031:C2,936|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000218078fffc82e3000082b700002c15ffff4082001482970004827400003ad3000048000018829700048194fffc558c09fc619300013ad300008278ffe4825300008232000081f100002c0fffff4082001481d10004814e00003a0a00004800001881d10004818efffc558c09fc618a00013a0a0000973bfffc971bfffc96dbfffc961bfffc8018ffe0941bfffc3940000139200001807b00087d2b1b78556bf80140a20010800d00347c0803a64e8000217c0918004082000c3b2a0000480000d438890000807b00003c0002a36000414c7c0803a64e8000212803000141820074398000025520f80140a20010800d00347c0803a64e8000217f29661541a3fff0398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b1d0004919d000091580004913800003939000039580000800d00187c1b004040a00010800d00207c0803a64e8000214bffff48398000025520f80140a20010800d00347c0803a64e8000217f29661541a3fff039390000800d00187c1b004040a00010800d00207c0803a64e8000214bffff08831b000c973bfffc8018ffe4941bfffc3ae000013ac0000182bb000c7ecbab78556bf80140a20010800d00347c0803a64e8000217c16a8004082000c3a970000480000e03a7700003a56000038920000807b00003c0002a36000414c7c0803a64e8000212803000141820074398000025640f80140a20010800d00347c0803a64e8000217e32661541a3fff0398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a1d0004919d000092700004925000003ad100003af00000800d00187c1b004040a00010800d00207c0803a64e8000214bffff40398000025640f80140a20010800d00347c0803a64e8000217e32661541a3fff03ad100003af30000800d00187c1b004040a00010800d00207c0803a64e8000214bfffefc3d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213a7d0004919d0000825b0004925300003d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213a3d0004919d000092910000821b001481f0ffe881cf00003d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e800021395d0004919d000091ca0000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021393d0004919d000092690008914900049229000038690000809b00187c8803a63b7b001c4e800020|@3032,1048515|232,3,@1155 516,3,@1155 3032:S45|434f44455452454528292e707265436f6465283229636f7079436f646528342973617665557361676573283129 3033:C2,356|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e3000082d7000082a3000882950000971bfffc8278ffe4825300008232000081f100002c0fffff4082001481d10004814e00003a0a00004800001881d10004818efffc558c09fc618a00013a0a0000398000025600f80140a20010800d00347c0803a64e8000217d4c841141a3fff0973bfffc969bfffc80030004941bfffc38aa000038960000387300003b1b000c3c0002a76000e9087c0803a64e800021813b000c8109fffc80e8000080a700002c05ffff40820014808700048064000038c3000048000018808700048184fffc558c09fc6183000138c300003980000254c0f80140a20010800d00347c0803a64e8000217f2c341141a3fff038b90000809b00048069ffe03b1b000c3c0002a76000e9087c0803a64e800021831b000c82fb000082d7000082b8ffe892d5000038600001829b00087e8803a63b7b00104e800020|@3037,1048575|176,3,@3034 300,3,@3034 3034:C2,552|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002154abf80140a20010800d00347c0803a64e8000212c050001408000842c04000140820010386000017f2803a64e800020973bfffc80b800008085ffdc8064000082e3000482d7000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003e8002a76294eb4c929500083e8002a06294c7ac92950004829600009295000038750000800d00287c0803a64e8000212c0400014082006c39d9000039580000392300003905000038a0000138880000386900003c0002a36000620c7c0803a64e800021398000025500f80140a20010800d00347c0803a64e8000217ccc441141a3fff038a6000038800001386900003b0a00003b2e00007f2803a64bfffee082e400007eeb2b78556bf80140a20010800d00347c0803a64e8000217c1728004082007039d9000039580000392300003905000080e4000438a0000338880000386900003c0002a36000620c7c0803a64e800021398000025500f80140a20010800d00347c0803a64e8000217ccc441141a3fff038a6000038870000386900003b0a00003b2e00007f2803a64bfffe5039d9000039580000392300003904000038e5000038a0000138870000386900003c0002a36000620c7c0803a64e8000213980000254e0f80140a20010800d00347c0803a64e8000217ccc3c1141a3fff038a6000038880000386900003b0a00003b2e00007f2803a64bfffde4|@3036,1048575|140,3,@3035 152,3,@227 224,3,@1198 368,3,@1198 476,3,@1198 3035:S21|736574546f53617665643a206e6f7420656d707479 3036:S57|434f44455452454528292e707265436f6465283229636f7079436f6465283429736574546f5361766564283129636f70794172726179283329 3037:S45|434f44455452454528292e707265436f6465283229636f7079436f6465283429736574546f5361766564283129 3038:C2,576|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e3000082d7000082a300088295000082640000825300008224000882110000971bfffc947bfffc947bfffc973bfffc94bbfffc969bfffc80030004941bfffc961bfffc80040004941bfffc3de002a761efee4495fbfffc39db001c95dbfffc38d6000038b2000038800001386000013b1b00283c0002a76000ee987c0803a64e800021947bfffc947bfffc3d4002a7614af3bc955bfffc393b0004953bfffc80db001c80bb0014809b0028807b002c3b1b00303c0002a76000ee987c0803a64e800021947bfffc947bfffc811b001880e8000080db001080a600007c07284040820020389b0000807b0008906400003b3b0000831b000c93190004480000fc80880000280400014182007c807b00308323ffdc8319000082f8000482d7001882b600343c6002a76063f42c83150004801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a9d0004919d0000827b000892740004907400003a5b0000929200003a3b0000821b000c9211000448000078807b00308323ffdc8319000082f8000482d7001882b600343c6002a76063f42c83150004801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a9d0004919d0000827b000c92740004907400003a5b0000823b0008923200003a1b00009290000481fb002081db000091cf0000815b0004914f000438600001813b00247d2803a63b7b00344e800020|@3047,1048575|108,3,@3039 148,3,@3041 172,3,@3043 212,3,@3041 324,3,@3046 444,3,@3046 3039:O1|@3040 3040:C2,48|7f2802a663390002398000025460f80140a20010800d00347c0803a64e8000217c63641141a3fff07f2803a64e800020|0,524289| 3041:C2,1216|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c060001408201242c0500014082001c831b00009098000090780004386000013b7b00084e800020973bfffc971bfffc947bfffc949bfffc80050004941bfffc80650000831b0018801800007c0803a64e800021833b000c8319000082f8ffdc82d7000082b6000482950018827400343a430000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00003a2000039223000c3a0000019203000839e0000391e300049243000083130004801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002139dd0004919d0000815b0008914e0004906e0000813b0018811b0014913b0018911b001438c0000180bb0000809b0004386e0000831b000c833b00107f2803a63b7b00144bfffec42c05000140820104973bfffc971bfffc947bfffc949bfffc80060004941bfffc80660000831b0018801800007c0803a64e800021833b000c8319000082f8ffdc82d7000082b6000482950018827400343a430000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00003a2000039223000c3a0000019203000839e0000391e300049243000083130004801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002139dd0004919d0000815b0004914e0004906e0000813b0018811b0014913b0018911b001480db000038a00001388e0000807b0008831b000c833b00107f2803a63b7b00144bfffdbc82e6000082c500007eebb378556bf80140a20010800d00347c0803a64e8000217c17b0004082002482bb0004829b000092bb0004969b000080c6000480a500047f2803a64bfffd747eebb038556bf80140a20010800d00347c0803a64e8000217c17b00040800108973bfffc971bfffc947bfffc949bfffc94dbfffc80050004941bfffc38760000831b001c801800007c0803a64e80002182bb0010829500008274ffdc82530000823200048211001881f0003439c30000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d0000394000039143000c3920000191230008390000039103000491c30000830f0004801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138fd0004919d000080db000c90c700049067000080bb001c809b001890bb001c909b001880db000480bb0000809b000838670000831b0010833b00147f2803a63b7b00184bfffc50973bfffc971bfffc947bfffc949bfffc94bbfffc80060004941bfffc38770000831b001c801800007c0803a64e80002182bb0010829500008274ffdc82530000823200048211001881f0003439c30000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d0000394000039143000c3920000191230008390000039103000491c30000830f0004801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138fd0004919d000080db000890c700049067000080bb001c809b001890bb001c909b001880db000080bb000438870000807b000c831b0010833b00147f2803a63b7b00184bfffb4c|@3042,1048575| 3042:S61|434f44455452454528292e707265436f6465283229636f7079436f6465283429636f6d707574654b696c6c536574732833296b696c6c53657473283629 3043:O1|@3044 3044:C2,4|4e800020|@3045,524289| 3045:S63|434f44455452454528292e707265436f6465283229636f7079436f6465283429636f6d707574654b696c6c536574732833293c7061747465726e3e2d283129 3046:O4|0,0,0,1 3047:S50|434f44455452454528292e707265436f6465283229636f7079436f6465283429636f6d707574654b696c6c53657473283329 3048:C2,316|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e3000082d7000082a3000882950000973bfffc971bfffc969bfffc80030004941bfffc8018ffe4941bfffc2c160001408200084800004481d6000438a0000380960000807b00003c0002a36000620c7c0803a64e8000213ace0000800d00187c1b004040a00010800d00207c0803a64e8000214bffffb8827b000c8013ffe0941bfffc825b000c2c120001408200084800004481d2000438a0000380920000807b00003c0002a36000620c7c0803a64e8000213a4e0000800d00187c1b004040a00010800d00207c0803a64e8000214bffffb8823b000882110000281000014182002881fb001081cfffe838c0000390ce00003860000180bb00147ca803a63b7b00184e8000203860000181fb00147de803a63b7b00184e800020|@3049,1048335|104,3,@1198 196,3,@1198 3049:S47|434f44455452454528292e707265436f6465283229636f7079436f646528342961646446726f6d5361766564283129 3050:C2,2416|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8fff882d7ffdc82b60000829500048274001882530030973bfffc971bfffc947bfffc83120000801800007c0803a64e80002128030001418206c0823b00048211fff881f0ffdc81cf0000814e0004812a001881090030807b000083080008801800007c0803a64e80002180fb000480c7fff880a6ffdc80850000832400048319001882f80024947bfffc80030004941bfffc807b000083170000801800007c0803a64e800021280300014182063882db000c82b6fff88295ffdc82740000825300048232001882110024807b000083100008801800007c0803a64e80002181fb000481db000c814efff8812affdc8109000080e8000480c7001038a30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003c80000060845d089083000490a3000094bbfffc800f0000941bfffc8306001c801800007c0803a64e8000212803000141820008480000d8807b00148323fff88319ffdc82f8000082d7000482b60010398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003e80000062944e8892830004827b0004926300008315001c801800007c0803a64e80002128030001418200084800006c825b00148232fff88211ffdc81f0000081cf0004814e0010398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003d20000061295fc891230004811b000491030000830a001c801800007c0803a64e80002128030001418204a4807b0000706b00014082048483230004732b000140820464831900042c1800014082044482fb001482d7fff882b6ffdc8295000082740004825300188232002480190000941bfffc807b000083110000801800007c0803a64e800021280300014182028c821b001881f0fff881cfffdc814e0000812a00048109001880e80024807b000083070008801800007c0803a64e80002180db000480bb00188085fff88324ffdc8319000082f8000482d7001882b60024947bfffc80060000941bfffc807b000083150000801800007c0803a64e8000212803000141820124829b00208274fff88253ffdc823200008211000481f0001881cf0024807b0000830e0008801800007c0803a64e800021815b0020812afff88109ffdc80e8000080c7000480a60010947bfffc8305000c801800007c0803a64e80002128030001418200ac809b00248064fff88323ffdc8319000082f8000482d70010807b000083160010801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003a8000019295000490750000398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213a7d0004919d0000825b000c9253000c92b30008907300049073000038730000823b00287e2803a63b7b002c4e80002038600001809b00287c8803a63b7b002c4e800020829b00208274fff88253ffdc823200008211000481f00010807b0004830f000c801800007c0803a64e80002128030001418200ac81db0020814efff8812affdc8109000080e8000480c70010807b000483060010801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138bd0004919d0000388000019085000490650000398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213b3d0004919d0000831b00009319000c90b9000890790004907900003879000082fb00247ee803a63b7b00284e8000203860000181db00247dc803a63b7b00284e800020821b000481fb001881cffff8814effdc812a00008109000480e8001880c7002480100000941bfffc807b000083060000801800007c0803a64e800021280300014182012480bb001c8085fff88064ffdc832300008319000482f8001882d70024807b000083160008801800007c0803a64e80002182bb001c8295fff88274ffdc825300008232000482110010947bfffc8310000c801800007c0803a64e80002128030001418200ac81fb002081cffff8814effdc812a00008109000480e80010807b000083070010801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138dd0004919d000038a0000190a6000490660000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021389d0004919d0000833b00089324000c90c40008906400049064000038640000831b00247f0803a63b7b00284e8000203860000181fb00247de803a63b7b00284e8000203860000180bb00207ca803a63b7b00244e8000203860000182fb00187ee803a63b7b001c4e80002038600001831b00187f0803a63b7b001c4e80002038600001833b00187f2803a63b7b001c4e8000203860000180fb00187ce803a63b7b001c4e8000203860000182db00107ec803a63b7b00144e800020823b00048211fff881f0ffdc81cf0000814e0004812a001881090018807b000083080000801800007c0803a64e800021280300014182021080fb000480c7fff880a6ffdc80850000806400048323001883190018807b000083180008801800007c0803a64e80002180030000941bfffc80030004941bfffc80030008941bfffc8003000c941bfffc80630010831b00144bfff859947bfffc807b00043b1b001c3c0002a76000ff987c0803a64e80002182fb000072eb000140820178706b00014082015c80170000941bfffc80170004941bfffc80170008941bfffc8017000c941bfffc80030000941bfffc809b0004807b001c831b002c3c0002a8600002807c0803a64e800021388000013c0002a8600006147c0803a64e80002128030001408200e882bb00082c1500014082000c82db000048000020807b00003b1b00303c0002a8600007387c0803a64e8000213ac30000829b0020827b000c7e8b9838556bf80140a20010800d00347c0803a64e8000217c1498004080000c3a540000480000083a530000823b0024821b00107e2b8038556bf80140a20010800d00347c0803a64e8000217c1180004081000c39f100004800000839f00000398000043bbdffec7c1df04040a00010800d001c7c0803a64e80002139dd0004919d0000815b0004914e000c92ce0008924e000491ee0000386e0000813b00307d2803a63b7b00344e8000203860000182db00307ec803a63b7b00344e8000203860000182db001c7ec803a63b7b00204e8000203860000182db001c7ec803a63b7b00204e8000203860000180fb00087ce803a63b7b000c4e800020|@3059,1048575|324,3,I229 440,3,I113 548,3,I251 1976,3,@3051 2064,3,@3054 2084,3,@3056 2136,3,@3058 3051:C2,472|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c030001408200103c6002a2606341344e80002082e3000082d8fffc82b6fff88295ffdc82740000825300048232001882110024973bfffc971bfffc80170000941bfffc80170004941bfffc80030004941bfffc807b000883100000801800007c0803a64e800021280300014182013881fb000c81cffffc814efff8812affdc8109000080e8000480c7001880a60024807b000883050008801800007c0803a64e800021809b000c8324fffc8319fff882f8ffdc82d7000082b60004829500103a630000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008256002892430004926300008314001c801800007c0803a64e800021280300014182009c807b0000831b000c4bfffecd2c0300014082001838600001823b00107e2803a63b7b00144e800020820300002c1000014082000c823b000448000028961bfffc807b00083b1b00143c0002a86000018c7c0803a64e8000213a2300003b7b0004398000013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d00009223000081fb00107de803a63b7b00144e8000203860000181fb00107de803a63b7b00144e800020|@3053,1048575|40,3,@773 372,3,@3052 3052:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c8078ffec4e800020973bfffc971bfffc80030000941bfffc806300044bffffbd398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b00009319000038790000833b00087f2803a63b7b000c4e800020|@468,786433| 3053:S67|434f44455452454528292e707265436f6465283229636f7079436f6465283429636f7079436f6e6428332966696e6443617365283129636865636b4361736573283129 3054:C2,824|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8fff882d7ffdc82b60000829500048274001882530034973bfffc971bfffc947bfffc949bfffc3864000083120000801800007c0803a64e8000212803000141820178823b00088211fff881f0ffdc81cf0000814e0004812a001881090034807b000083080008801800007c0803a64e80002180fb000880c7fff880a6ffdc80850000832400048319001882f80034947bfffc80030000941bfffc80030004941bfffc80030008941bfffc8003000c941bfffc807b001883170000801800007c0803a64e80002128030001418200d882db001c82b6fff88295ffdc82740000825300048232001882110034807b001883100008801800007c0803a64e80002181fb000c81c300007deb7378556bf80140a20010800d00347c0803a64e8000217c0f70004082006c815b0004812300087d4b4b78556bf80140a20010800d00347c0803a64e8000217c0a480040820044811b000880e300047c0838404082003480db00002806000141820018807b001080bb00207ca803a63b7b00244e80002080bb00207ca803a63b7b00244e80002038600001815b00207d4803a63b7b00244e8000203860000182db00207ec803a63b7b00244e800020823b00088211fff881f0ffdc81cf0000814e0004812a001881090040807b000083080000801800007c0803a64e800021280300014182011880fb000880c7fff880a6ffdc80850000806400048323001883190040807b000083180008801800007c0803a64e80002182fb000882d7fff882b6ffdc8295000082740004825300188232004080030000941bfffc80030004941bfffc807b000c83110000801800007c0803a64e800021280300014182008c821b001081f0fff881cfffdc814e0000812a00048109001880e80040807b000c83070008801800007c0803a64e80002180db000080a300047ccb2b78556bf80140a20010800d00347c0803a64e8000217c0628004182001838600001809b00147c8803a63b7b00184e800020809b000480630000831b0010833b00147f2803a63b7b00184bfffcfc38600001821b00147e0803a63b7b00184e8000203860000180fb000c7ce803a63b7b00104e800020|@3055,1048575| 3055:S53|434f44455452454528292e707265436f6465283229636f7079436f6465283429636f7079436f6e6428332973696d696c6172283229 3056:C2,228|7f2802a6633900027c0418404082000c386000034e800020708b0001408200c0706b0001408200b08304000082e300007f0bbb78556bf80140a20010800d00347c0803a64e8000217c18b8004082007c82c4000482a300047c16a8404082006082840008826300087e8b9b78556bf80140a20010800d00347c0803a64e8000217c1498004082002c8244000c8223000c7c12884040820010386000037f2803a64e800020386000017f2803a64e800020386000017f2803a64e800020386000017f2803a64e800020386000017f2803a64e800020386000014e800020386000014e800020|@3057,1046531| 3057:S27|65712d434f44455452454528292e73696d696c6172697479283229 3058:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c8078ffd84e800020973bfffc971bfffc80030000941bfffc806300044bffffbd398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b00009319000038790000833b00087f2803a63b7b000c4e800020|@468,786433| 3059:S54|434f44455452454528292e707265436f6465283229636f7079436f6465283429636f7079436f6e6428332966696e6443617365283129 3060:C2,416|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c040001408200084e80002082f8fff882d7ffdc82b60000829500048274001882530058973bfffc971bfffc947bfffc949bfffc83120000801800007c0803a64e800021280300014182009c823b00088211fff881f0ffdc81cf0000814e0004812a001881090058807b000483080008801800007c0803a64e80002180fb000880c7fff880a6ffdc80850000832400048319001882f800582c0300014082000c807b000048000024947bfffc807b00043b1b00103c0002a8600009dc7c0803a64e8000213b7b000483170004833b000c801800007c0903a67f2803a63b7b00104e800420823b00088211fff881f0ffdc81cf0000814e0004812a001881090058398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138fd0004919d000038c0000190c7000480bb000490a700002c0700014082000c807b00004800002494fbfffc807b00043b1b00103c0002a860000a847c0803a64e8000213b7b000483080004833b000c801800007c0903a67f2803a63b7b00104e800420|@3063,1048575|212,3,@3061 368,3,@3062 3061:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c8078fff04e800020973bfffc971bfffc80030000941bfffc806300044bffffbd398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b00009319000038790000833b00087f2803a63b7b000c4e800020|@468,786433| 3062:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c8078fff04e800020973bfffc971bfffc80030000941bfffc806300044bffffbd398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b00009319000038790000833b00087f2803a63b7b000c4e800020|@468,786433| 3063:S56|434f44455452454528292e707265436f6465283229636f7079436f6465283429636f7079436f6e642833296164644b696c6c536574283229 3064:C2,236|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002154abf80140a20010800d00347c0803a64e8000212c0500014081001c80a300043880000190850000386000017f2803a64e800020548bf80140a20010800d00347c0803a64e8000212c0400014080004080a3000083050000949bfffc3a990000387800003b1b00003c0002a860000c747c0803a64e80002190650000386000017e8803a63b7b00044e8000208303000882f80000949bfffc3ab900003a980000387700003b1b00003c0002a860000d6c7c0803a64e80002190740000386000017ea803a63b7b00044e800020|@3067,1032199|136,3,@3065 200,3,@3066 3065:C2,220|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e80002082f800003980000256e0f80140a20010800d00347c0803a64e8000217ed7641141a3fff082a300007eabb378556bf80140a20010800d00347c0803a64e8000217c15b0004182005c973bfffc971bfffc96bbfffc806300044bffff79398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b0000931900003879000082fb00087ee803a63b7b000c4e800020806300047f2803a64bffff30|@155,1015809| 3066:C2,188|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e80002082e3000082d800007eebb378556bf80140a20010800d00347c0803a64e8000217c17b0004182005c973bfffc971bfffc96fbfffc806300044bffff99398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b0000931900003879000082fb00087ee803a63b7b000c4e800020806300047f2803a64bffff50|@155,983041| 3067:S45|434f44455452454528292e707265436f6465283229636f7079436f646528342972656d6f76654974656d283329 3068:C2,384|7f2802a6633900028303000082f8000082c3000882b6000054abf80140a20010800d00347c0803a64e8000212c0500014081001480a30004806500007f2803a64e800020548bf80140a20010800d00347c0803a64e8000212c040001408000a4973bfffc949bfffc2c170001408200183860000180bb00047ca803a63b7b00084e80002080bb00003980000254a0f80140a20010800d00347c0803a64e8000217c85641141a3fff0807700007c6b2378556bf80140a20010800d00347c0803a64e8000217c0320004082001838600003833b00047f2803a63b7b00084e80002082f70004800d00187c1b004040a00010800d00207c0803a64e8000214bffff6c973bfffc949bfffc2c150001408200183860000180bb00047ca803a63b7b00084e80002080b50000809b00007cab2378556bf80140a20010800d00347c0803a64e8000217c0520004082001838600003833b00047f2803a63b7b00084e80002082b50004800d00187c1b004040a00010800d00207c0803a64e8000214bffff8c|@3069,1015815| 3069:S40|434f44455452454528292e707265436f6465283229636f7079436f6465283429696e536574283329 3070:C2,232|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e80002082e30000973bfffc971bfffc80030004941bfffc80170004941bfffc8098ffa4807700003c0002a8600008207c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213add0004919d000082bb000092b600049076000096dbfffc807b0008831b000c4bffff61398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a9d0004919d000090740004827b00009274000038740000825b00107e4803a63b7b00144e800020|@234,1048575|84,3,@3060 3071:C2,232|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e80002082e30000973bfffc971bfffc80030004941bfffc80170004941bfffc8098ffa4807700003c0002a8600008207c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213add0004919d000082bb000092b600049076000096dbfffc807b0008831b000c4bffff61398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a9d0004919d000090740004827b00009274000038740000825b00107e4803a63b7b00144e800020|@234,1048575|84,3,@3060 3072:C2,232|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e80002082e30000973bfffc971bfffc80030004941bfffc80170004941bfffc8098ffdc807700003c0002a8600008207c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213add0004919d000082bb000092b600049076000096dbfffc807b0008831b000c4bffff61398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a9d0004919d000090740004827b00009274000038740000825b00107e4803a63b7b00144e800020|@234,1048575|84,3,@3060 3073:S43|434f44455452454528292e707265436f6465283229636f7079436f6465283429636f7079436f6e64283329 3074:C2,1992|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e80002082f8000082d7ffdc82b6000082950004827400188253002c973bfffc971bfffc947bfffc80030000941bfffc807b000083120000801800007c0803a64e8000212803000141820438823b00088211000081f0ffdc81cf0000814e0004812a00188109002c807b000083080008801800007c0803a64e80002180fb000480db000880a6000081c30000814300048125ffe038a00001388e0000386900003c0002a36000620c7c0803a64e800021811b000880c8000038a00001388e00008066ffd43c0002a36000620c7c0803a64e80002180a800008085ffdc80640000832300048319001882f8002495dbfffc955bfffc80070004941bfffc386a000083170000801800007c0803a64e800021280300014182008c82bb0014829500008274ffdc82530000823200048211001881f00024807b0004830f0008801800007c0803a64e80002181db0014814e0000398000013bbdfff87c1df04040a00010800d001c7c0803a64e800021393d0004919d0000811b00049109000038a90000809b0008806affd03c0002a36000620c7c0803a64e8000213ac300004800002c82db001482b6000038a00001809b00088075ffd03c0002a36000620c7c0803a64e8000213ac30000807b0000831b00144bfffe05829b0014827400003a430000809b00088073ffe03c0002a36000414c7c0803a64e800021280300014082003c823b00148211000081f0ffdc81cf0000965bfffc947bfffc807b000c830e0014801800007c0803a64e800021280300014182002848000010965bfffc947bfffc48000018807b0004815b00207d4803a63b7b00244e800020823b001c8211000081f0ffdc81cf0000814e0004812a001881090044807b000c83080000801800007c0803a64e800021280300014182010080db001c80a600008085ffdc80640000832300048319001882f80044807b000c83170008801800007c0803a64e80002182db001c82b600003a630000809b00108075ffd43c0002a36000414c7c0803a64e8000213d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213a5d0004919d000090720000965bfffc8233000c963bfffc82130010961bfffc81f3001495fbfffc81d3001895dbfffc8153001c955bfffc80d3000880b300048093000038720000831b00343c0002a860001b6c7c0803a64e800021813b0000810900003883000038680000831b00203c0002a860002db47c0803a64e80002138e3000048000028807b000c80fb001c830700003c0002a76000be447c0803a64e80002138e30000947bfffc80db002080a600008085ffe038a0000138640000809b00143c0002a36000620c7c0803a64e800021833b00208319000082f8ffdc82d7000082b60004829500188274002c398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000825b00049243000890e30004823b00149223000083130004801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a1d0004919d000081fb000891f00004907000003870000081db00247dc803a63b7b00284e800020823b00088211000081f0ffdc81cf0000814e0004812a001881090054807b000083080000801800007c0803a64e80002128030001418201c880fb000880c7000080a6ffdc80850000806400048323001883190054807b000083180008801800007c0803a64e80002182fb0004947bfffc80170004941bfffc2c0300014082000c3ac000014800004880030004941bfffc806300003b1b00183c0002a8600031f07c0803a64e800021807b00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffffb0807b0000831b00104bfffa81947bfffc807b00083b1b00183c0002a8600034ac7c0803a64e80002138a3000038800001386000013b1b00183c0002a8600039f47c0803a64e8000213b1b00183c0002a86000409c7c0803a64e8000212c03000140820018807b000082bb00187ea803a63b7b001c4e80002082a300042c1500014082004c398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a9d0004919d0000827b000092740004824300009254000038740000823b00187e2803a63b7b001c4e800020829b0014827400008253ffdc823200008311000c801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a1d0004919d000081fb000091f00004907000003870000081db00187dc803a63b7b001c4e80002080fb000480670004831b00084bfff94d947bfffc807b000480db000c830600003c0002a76000be447c0803a64e80002180bb000c808500008324ffdc8319000082f8000482d7001882b60058947bfffc83150000801800007c0803a64e8000212803000141820074829b0010827400008253ffdc823200008211000481f0001881cf0058807b0000830e0008801800007c0803a64e800021815b00042c0a000140820014813b00147d2803a63b7b00184e8000203b1b00143c0002a8600043e87c0803a64e800021813b00147d2803a63b7b00184e800020398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a9d0004919d0000827b000492740004825b00009254000038740000823b00147e2803a63b7b00184e800020|@3110,1048575|204,3,@1198 240,3,@1198 436,3,@1198 480,3,@1198 532,3,@1155 768,3,@1155 892,3,@3075 928,3,@3088 964,3,@3017 1012,3,@1198 1348,3,@3092 1424,3,@3095 1456,3,@3099 1476,3,@3106 1736,3,@3017 1888,3,@3109 3075:C2,1244|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000213d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ac0000192d700003d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213add0004919d00003aa0000192b600003d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003a80000192950000829800008274ffdc82530000398000093bbdffd87c1df04040a00010800d001c7c0803a64e8000213a3d0004919d00003e0002a862102064921100008214ffd89211002081f4ffd091f1001c81d4ffd491d1001892f1001492d100109071000c92b10008807200049071000482db000c3980000256c0f80140a20010800d00347c0803a64e8000217d56661541a3fff0947bfffc947bfffc398000025540f80140a20010800d00347c0803a64e8000217d2a661541a3fff03919000038f80000949bfffc94bbfffc96fbfffc38a0000138800081386900003f000000631841c8801800007c0803a64e80002191430000398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138bd0004919d0000906500043880ffff908500003d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d000090a300003b3b000c907900003b1b000c3ae0000192f80004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021395d0004919d0000813b000c912a000080bb001090aa0004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021389d0004919d00003c6002a860632a089064000092240004951bfffc94fbfffc94dbfffc96bbfffc955bfffc38d5000038aa0000807b001c3b1300003c0002a76000bb287c0803a64e800021947bfffc386000033b1b00283c0002a860002aa87c0803a64e8000212c0300014082000c833b000048000090831b001082f8000082d7ffdc82b60000829500048274001882530058398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a3d0004919d00003a0000019211000481fb000091f100002c1100014082000848000020963bfffc3b1b002c3c0002a860002ccc7c0803a64e8000213b7b000483120004801800007c0803a64e8000213b23000081db0018814e0000280a0001408200cc813b00108109000080e8ffdc80c7000080a600048085001880640044831b000882f8000082c30004398000083bbdffdc7c1df04040a00010800d001c7c0803a64e800021387d0004919d00003aa0000392a3001c92e30018829b003492830014827b0038926300103a4000019243000c823b000c92230008821b001c92030004932300003b160000801800007c0803a64e80002181fb001081cf0000814effdc812a000038830000806afffc8309001c833b0014801800007c0903a67f2803a63b7b00404e800420813b00108109000080e8ffdc80c7000080a600048085001880640044830e000082fb000882d7000082a30004398000083bbdffdc7c1df04040a00010800d001c7c0803a64e800021387d0004919d00003a8000019283001c92c30018827b003492630014825b0038924300109303000c823b000c92230008821b001c92030004932300003b150000833b0014801800007c0903a67f2803a63b7b00404e800420|@3087,1048575|224,3,@3076 392,3,I11 616,3,@3082 668,3,@3016 696,3,@3084 828,3,@3086 3076:C2,1224|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021971bfffc80030004941bfffc949bfffc80030000941bfffc2c04000140820120809b00002c0400014182000848000014807b0008280300014082000848000064973bfffc809800048064000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002a862d6254892d700083ec002a062d6c7ac92d7000482c3000092d7000038770000800d00287c0803a64e80002138600001280500014182001882d8000c38a0000390b600003ae00001480000083ae0000182f8000882d7000038a0000390b700006ac400028078000482c3001882b60034398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00009083000c3a800001928300083a600001926300043a4000019243000083150004801800007c0903a67f2803a63b7b00104e8004202c0400034082015c82fb000056ebf80140a20010800d00347c0803a64e8000212c1700014081013c82db00082816000140820064973bfffc829800048274000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a5d0004919d00003e2002a862312548923200083e0002a06210c7ac9212000481f3000091f2000038720000800d00287c0803a64e8000213aa000013a790000389700008078001c3c0002a36000414c7c0803a64e800021706b000140820014806300007e6803a63b7b00104e8000202805000141820030823b000c39d3000038a00003809b0000807100183c0002a36000620c7c0803a64e8000213a4300004800000c3a40000139d30000825b000c823200088211000039e0000391f1000081520014812a00008112001080e8000095dbfffc38a9000038870000387000003b1b00103c0002a8600025687c0803a64e80002180db00007cc803a63b7b00144e8000202c040003408200e882fb000056ebf80140a20010800d00347c0803a64e8000212c170001408000c882db00082816000140820064973bfffc829800048274000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a5d0004919d00003e2002a862312548923200083e0002a06210c7ac9212000481f3000091f2000038720000800d00287c0803a64e8000213aa0000182b80008829500003a6000039275000082580014823200008218001081f00000973bfffc38b10000388f0000387400003b1b00103c0002a8600025687c0803a64e80002181db00007dc803a63b7b00144e800020398000025480f80140a20010800d00347c0803a64e8000217eec241141a3fff03ac30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000090a3000892e3000492c30000973bfffc83180020801800007c0803a64e80002182bb0010829500048274001882530024947bfffc83120000801800007c0803a64e800021280300014182003c823b00148211000481f0001881cf0024807b0000830e0008801800007c0803a64e800021807b0000815b00047d4803a63b7b00184e800020823b00148211000881f0000039c0000391d0000081510014812a00008111001080e8000038a9000038870000386f00003b1b00143c0002a8600025687c0803a64e80002180db00047cc803a63b7b00184e800020|@3081,1048575|144,3,@3077 156,3,@227 448,3,@3077 460,3,@227 512,3,@1155 580,3,@1198 668,3,@3078 800,3,@3077 812,3,@227 904,3,@3078 1192,3,@3078 3077:S23|707265763a206261646c792d666f726d6564206c6f6164 3078:C2,948|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0500014082017c80b800008098fff8398000025480f80140a20010800d00347c0803a64e8000217eec241141a3fff082c5000482b60018829500343a630000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00003a4000019243000c92e300088238fffc922300048218fff492030000973bfffc971bfffc967bfffc80050014941bfffc83140004801800007c0803a64e80002181fb000881cf0000814e0014812a0000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021391d0004919d0000912800049068000080fb00009107000080ce001080a600003980000254a0f80140a20010800d00347c0803a64e8000217c85661541a3fff090860000807b000468790002830e000482f8001882d70034398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00009323000c3aa0000192a300083a800001928300049083000083160004833b000c801800007c0903a67f2803a63b7b00104e80042082f8000082d7000482b6001882950034973bfffc971bfffc947bfffc949bfffc94bbfffc80050000941bfffc807b000083140000801800007c0803a64e800021280300014182016c827b001082530000823200048211001881f00034807b0000830f0008801800007c0803a64e80002181db0004815b001081230000810afff47d2b4378556bf80140a20010800d00347c0803a64e8000217c094000408200d080eafff83980000254e0f80140a20010800d00347c0803a64e8000217ccc3c1141a3fff080a300087cab3378556bf80140a20010800d00347c0803a64e8000217c0530004082008880830004832afffc7c04c84040820078831b000c6b17000282ca000082b600048295001882740034398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d000092e3000c3a400001924300083a20000192230004821b00089203000083130004833b0014801800007c0903a67f2803a63b7b00184e80042080fb00083980000254e0f80140a20010800d00347c0803a64e8000217ccc3c1141a3fff080ae000438860000807b000c3b0a0000833b00147f2803a63b7b00184bfffcbc827b001082530000823200048211000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002139fd0004919d00003dc002a861ce293891cf00083d4002a0614ac7ac914f000481300000912f0000386f0000800d00287c0803a64e800021|@3080,1048575|900,3,@3079 912,3,@227 3079:S40|6d616b65436c6f73757265456e7472793a20636c6f73757265206973206e6f742045787472616374 3080:S80|434f44455452454528292e707265436f6465283229636f7079436f6465283429696e73657274283129636f70794c616d626461283929707265762833296d616b65436c6f73757265456e747279283329 3081:S61|434f44455452454528292e707265436f6465283229636f7079436f6465283429696e73657274283129636f70794c616d62646128392970726576283329 3082:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@3083,1048575| 3083:S61|434f44455452454528292e707265436f6465283229636f7079436f6465283429696e73657274283129636f70794c616d62646128392970726576283129 3084:C2,444|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f800107c6bb838556bf80140a20010800d00347c0803a64e8000217c03b80040810010386000017f2803a64e8000203a7900003a5800003a230000389100008072ffdc3c0002a36000414c7c0803a64e8000212803000140820114398000025620f80140a20010800d00347c0803a64e8000217c91641141a3fff08072ffe8832300008319ffdc82f8000082d7000482b6001882950034398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00003a0000039203000c39e0000191e3000839c0000391c3000490830000967bfffc965bfffc963bfffc83140004801800007c0803a64e800021815b000039230000398000025540f80140a20010800d00347c0803a64e8000217c6a661541a3fff0953bfffc831b00084bfffebd398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021391d0004919d00009068000480fb000090e800003868000080db000c7cc803a63b7b00104e800020398000025620f80140a20010800d00347c0803a64e8000217c71661541a3fff03b1200003b3300007f2803a64bfffe50|@3085,1048575|100,3,@1155 3085:S65|434f44455452454528292e707265436f6465283229636f7079436f6465283429696e73657274283129636f70794c616d6264612839296164644b696c6c73283129 3086:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c8078ffd44e800020973bfffc971bfffc80030000941bfffc806300044bffffbd398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b00009319000038790000833b00087f2803a63b7b000c4e800020|@468,786433| 3087:S54|434f44455452454528292e707265436f6465283229636f7079436f6465283429696e73657274283129636f70794c616d626461283929 3088:C2,496|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000082d7ffdc82b60000829500048274001882530044973bfffc971bfffc947bfffc949bfffc3864000083120000801800007c0803a64e800021280300014182017c823b00088211000081f0ffdc81cf0000814e0004812a001881090044807b000083080008801800007c0803a64e80002180030000941bfffc80030004941bfffc80030008941bfffc80030010941bfffc80030014941bfffc80030018941bfffc8063000c3b1b00243c0002a860002fc07c0803a64e80002138e000012c0300014082000c38c7000048000058398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138bd0004919d000090e50004808300009085000038e5000080630004800d00187c1b004040a00010800d00207c0803a64e8000214bffffa080bb0020808500008064ffdc832300008319000482f8001882d70044398000083bbdffdc7c1df04040a00010800d001c7c0803a64e800021387d0004919d000082bb001c92a3001c829b000092830018827b000492630014825b00089243001090c3000c823b000c92230008821b00109203000481fb001491e3000083160004833b0024801800007c0903a67f2803a63b7b00284e800420807b0000823b000c7e2803a63b7b00104e800020|@3091,1048575|204,3,@3089 3089:C2,428|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e80002082f8fffc82d7000082b6ffdc82950000827400048253001882320034973bfffc971bfffc80030000941bfffc80030004941bfffc807b000483110000801800007c0803a64e800021280300014182006c81fb000881cffffc814e0000812affdc8109000080e8000480c7001880a60034807b000483050008801800007c0803a64e800021809b00088324fff83883000038790000831b000882f8fffc831700003c0002a76000cff87c0803a64e8000213a03000048000074821b000881f0fffc81cf0000814effdc812a00008109000480e8000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002138dd0004919d00003ca002a860a5318890a600083c8002a06084c7ac90860004806700009066000038660000800d00287c0803a64e800021961bfffc807b0004831b000c4bfffe9d398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213add0004919d00009076000482bb000092b6000038760000829b00107e8803a63b7b00144e800020|@234,1048575|208,3,@3020 296,3,@3090 308,3,@227 3090:S26|6d616b654c6f616473202d206e6f7420616e2045787472616374 3091:S59|434f44455452454528292e707265436f6465283229636f7079436f6465283429696e73657274283129636f707950726f63436c6f73757265283229 3092:C2,560|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8fffc82d7000082b6ffdc8295000082740004825300188232002c973bfffc971bfffc947bfffc83110000801800007c0803a64e8000212803000141820164821b000481f0fffc81cf0000814effdc812a00008109000480e8001880c7002c807b000083060008801800007c0803a64e80002180bb00048085fffc832400008319ffdc82f8000082d7000482b600188295002480030000941bfffc80030004941bfffc807b000083140000801800007c0803a64e8000212803000141820088827b000c8253fffc823200008211ffdc81f0000081cf0004814e0018812a0024807b000083090008801800007c0803a64e800021811b000c80e8fffc80c70000398000013bbdfff87c1df04040a00010800d001c7c0803a64e80002138bd0004919d0000809b000090850000809b00048066ffd03c0002a36000620c7c0803a64e800021827b000c8253fffc8232000038a00001809b00048071ffe03c0002a36000620c7c0803a64e800021821b000c81f0fffc81cf000038a00001809b0004806effd4833b00103c0002a36000620c7c0903a67f2803a63b7b00144e800420821b000481f0fffc81cf0000814effdc812a00008109000480e8000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002138dd0004919d00003ca002a860a5343c90a600083c8002a06084c7ac90860004806700009066000038660000800d00287c0803a64e800021|@3094,1048575|340,3,@1198 380,3,@1198 424,3,@1198 512,3,@3093 524,3,@227 3093:S21|6170706c79466e3a206e6f742061204465636c6172 3094:S70|434f44455452454528292e707265436f6465283229636f7079436f6465283429696e73657274283129636f70794465636c61726174696f6e732831296170706c79466e283129 3095:C2,168|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e800020973bfffc971bfffc80030004941bfffc806300003c0002a8600035707c0803a64e800021947bfffc807b0004831b00084bffffa1398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b0000931900003879000082fb000c7ee803a63b7b00104e800020|@234,1048575|68,3,@3096 3096:C2,1016|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8fffc82d7000082b6ffdc8295000082740004825300188232002c973bfffc971bfffc947bfffc83110000801800007c0803a64e800021280300014182032c821b000481f0fffc81cf0000814effdc812a00008109000480e8001880c7002c807b000083060008801800007c0803a64e80002180bb00048085fffc832400008263000082430004389300008079ffd43c0002a36000414c7c0803a64e8000213d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213a3d0004919d0000907100008205fffc81f0000081cfffdc814e0000812a00048109001880e80044967bfffc965bfffc963bfffc3872000083070000801800007c0803a64e800021280300014182009080bb00108085fffc806400008323ffdc8319000082f8000482d7001882b60044807b000483150008801800007c0803a64e8000218283000c969bfffc82630010967bfffc82430014965bfffc82230018963bfffc8203001c961bfffc80c3000880a3000480830000807b001481fb0024830ffffc3c0002a860001b6c7c0803a64e80002138c3000048000028807b000480db001080a6fffc830500003c0002a76000be447c0803a64e80002138c30000809b00108064fffc832300008319ffdc82f8000082d7000482b600188295002494dbfffc3866000083140000801800007c0803a64e8000212803000141820098825b00148232fffc8211000081f0ffdc81cf0000814e0004812a001881090024807b000083080008801800007c0803a64e80002180fb001480c7fffc80a60000398000013bbdfff87c1df04040a00010800d001c7c0803a64e800021389d0004919d0000807b0000906400008325ffd038a40000809b000c387900003c0002a36000620c7c0803a64e8000213a63000048000030827b00148253fffc8232000038a00001809b000c8071ffd03c0002a36000620c7c0803a64e8000213a630000821b001481f0fffc81cf0000815b0004812a000038a90000809b000c806effd43c0002a36000620c7c0803a64e800021811b001480e8fffc80c7000080a6ffdc8085000080640004832300188319002c398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003ae0000192e3000882db000092c3000482bb000c92a3000083180004833b0018801800007c0903a67f2803a63b7b001c4e800420821b000481f0fffc81cf0000814effdc812a00008109000480e8000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002138dd0004919d00003ca002a860a5398490a600083c8002a06084c7ac90860004806700009066000038660000800d00287c0803a64e800021|@3098,1048575|176,3,@1155 420,3,@3075 460,3,@3017 668,3,@1198 716,3,@1198 768,3,@1198 968,3,@3097 980,3,@227 3097:S21|636f70794465633a206e6f742061204465636c6172 3098:S70|434f44455452454528292e707265436f6465283229636f7079436f6465283429696e73657274283129636f70794465636c61726174696f6e73283129636f7079446563283129 3099:C2,744|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0500014082004c2c0300034082001438a4000038800001386000014bffffcc971bfffc973bfffc386400003b1b00043c0002a860003cf87c0803a64e800021833b00007f2803a63b7b00084e80002082f8fffc82d7000082b6ffdc8295000082740004825300188232002c973bfffc971bfffc947bfffc949bfffc94bbfffc80050000941bfffc807b000083110000801800007c0803a64e80002128030001418201b8821b001081f0fffc81cf0000814effdc812a00008109000480e8001880c7002c807b000083060008801800007c0803a64e80002180bb0004809b00108324fffc831900008263000082430004389300008078ffd43c0002a36000414c7c0803a64e80002128030001418200f8967bfffc80050004941bfffc3892000038600003823b00188311fffc3c0002a860002db47c0803a64e800021821b001881f0fffc81cf0000814effdc812a00008109000480e8001880c7002c38a30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000388000019083000890a30004833b00049323000083060004801800007c0803a64e800021947bfffc80bb0004809b001438600003831b001c4bfffe25398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b1d0004919d00009078000482fb000092f800003878000082db00207ec803a63b7b00244e800020398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a3d0004919d0000821b00089211000481fb000091f1000080a5000438910000807b000c831b0010833b00147f2803a63b7b00184bfffd94821b001081f0fffc81cf0000814effdc812a00008109000480e8000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002138dd0004919d00003ca002a860a5401c90a600083c8002a06084c7ac90860004806700009066000038660000800d00287c0803a64e800021|@3105,1048575|80,3,@3100 280,3,@1155 332,3,@3088 696,3,@3104 708,3,@227 3100:C2,168|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e800020973bfffc971bfffc80030004941bfffc806300003c0002a860003dbc7c0803a64e800021947bfffc807b0004831b00084bffffa1398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b0000931900003879000082fb000c7ee803a63b7b00104e800020|@234,1048575|68,3,@3101 3101:C2,440|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000082d7fffc82b600008295ffdc8274000082530004823200188211002c973bfffc971bfffc947bfffc83100000801800007c0803a64e80002128030001418200e481fb000481cf0000814efffc812a00008109ffdc80e8000080c7000480a600188085002c807b000083040008801800007c0803a64e80002180030000941bfffc8083000438600001833b0008831900008318fffc3c0002a860002db47c0803a64e80002182fb000882d7000082b6fffc829500008274ffdc82530000823200048211001881f0002c39c30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000394000019143000891c30004813b000091230000830f0004833b000c801800007c0903a67f2803a63b7b00104e80042081fb000481cf0000814efffc812a00008109ffdc80e8000080c7000480a6000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021389d0004919d00003c6002a860633f90906400083f2002a06339c7ac93240004830500009304000038640000800d00287c0803a64e800021|@3103,1048575|184,3,@3088 392,3,@3102 404,3,@227 3102:S28|6d6b4c69676874436c6f737572653a206e6f742061204465636c6172 3103:S95|434f44455452454528292e707265436f6465283229636f7079436f6465283429696e73657274283129636f70794465636c61726174696f6e7328312970726f63657373436c6f73757265732833296d6b4c69676874436c6f73757265283129 3104:S29|70726f63657373436c6f73757265733a206e6f742061204465636c6172 3105:S78|434f44455452454528292e707265436f6465283229636f7079436f6465283429696e73657274283129636f70794465636c61726174696f6e7328312970726f63657373436c6f7375726573283329 3106:C2,696|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e80002082f8fffc82d7000082b6ffdc8295000082740004825300188232002c973bfffc971bfffc947bfffc80030000941bfffc807b000083110000801800007c0803a64e80002128030001418201d0821b000881f0fffc81cf0000814effdc812a00008109000480e8001880c7002c807b000083060008801800007c0803a64e80002180bb0004809b00088324fffc831900008263000082430004389300008078ffe03c0002a36000414c7c0803a64e800021280300014082004c823b00088211fffc81f0000081cfffdc814e0000967bfffc965bfffc80050004941bfffc947bfffc38720000830a0014801800007c0803a64e80002128030001418200384800001c967bfffc965bfffc80050004941bfffc947bfffc4800001c807b0004831b0018833b001c7f2803a63b7b00204bfffeac823b00188211fffc81f0000038a00001809b000c806fffe03c0002a36000620c7c0803a64e80002181db0018814efffc812a00008109ffdc80e8000080c7000480a600188085002c398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000833b000093230008831b00089303000482fb000c92e3000083040004801800007c0803a64e800021947bfffc807b0008831b001c4bfffe01398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213add0004919d00009076000482bb000092b6000038760000829b00207e8803a63b7b00244e800020821b000881f0fffc81cf0000814effdc812a00008109000480e8000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002138dd0004919d00003ca002a860a5437090a600083c8002a06084c7ac90860004806700009066000038660000800d00287c0803a64e800021|@3108,1048575|208,3,@1155 376,3,@1198 648,3,@3107 660,3,@227 3107:S25|636f7079456e74726965733a204e6f742061204465636c6172 3108:S74|434f44455452454528292e707265436f6465283229636f7079436f6465283429696e73657274283129636f70794465636c61726174696f6e73283129636f7079456e7472696573283129 3109:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c8078fff04e800020973bfffc971bfffc80030000941bfffc806300044bffffbd398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b00009319000038790000833b00087f2803a63b7b000c4e800020|@468,786433| 3110:S60|434f44455452454528292e707265436f6465283229636f7079436f6465283429696e73657274283129636f70794465636c61726174696f6e73283129 3111:C2,168|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e800020973bfffc971bfffc80030004941bfffc806300003c0002a8600045987c0803a64e800021947bfffc807b0004831b00084bffffa1398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b0000931900003879000082fb000c7ee803a63b7b00104e800020|@234,1048575|68,3,@3112 3112:C2,872|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000082d7ffdc82b6000082950004827400188253002c973bfffc971bfffc947bfffc83120000801800007c0803a64e800021280300014182023c823b00048211000081f0ffdc81cf0000814e0004812a00188109002c807b000083080008801800007c0803a64e80002180fb000480c7000080a6ffdc80850000832400048319001882f80060947bfffc80030004941bfffc807b000083170000801800007c0803a64e80002128030001418201b482db000c82b600008295ffdc82740000825300048232001882110060807b000083100008801800007c0803a64e80002181fb0004800f0000941bfffc800f0008941bfffc807b0008831b00143c0002a86000491c7c0803a64e80002181db0014814e0000812affdc8109000080e8000480c7001880a60024947bfffc83050000801800007c0803a64e8000212803000141820088809b0018806400008323ffdc8319000082f8000482d7001882b60024807b000083150008801800007c0803a64e800021829b001882740000398000013bbdfff87c1df04040a00010800d001c7c0803a64e8000213a5d0004919d0000823b00009232000038b20000809b00088073ffd03c0002a36000620c7c0803a64e80002148000028809b00188064000038a00001809b00088063ffd03c0002a36000620c7c0803a64e800021833b00188319000082f8ffdc82d7000082b60004829500188274002c398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000825b000492430008823b000092230004821b00089203000083130004833b001c801800007c0903a67f2803a63b7b00204e800420807b000882db00107ec803a63b7b00144e800020823b00048211000081f0ffdc81cf0000814e0004812a001881090054807b000083080000801800007c0803a64e800021280300014182007c80fb000480c7000080a6ffdc80850000806400048323001883190054807b000083180008801800007c0803a64e80002182fb000482d7000082b6ffdc829500008014000c941bfffc3b1b000c3c0002a860004c207c0803a64e800021831b0000833b000c801800007c0903a67f2803a63b7b00104e800420807b0000831b0004833b00083c0002a86000491c7c0903a67f2803a63b7b000c4e800420|@3117,1048575|284,3,@3113 468,3,@1198 508,3,@1198 792,3,@3116 848,3,@3113 3113:C2,480|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000082d7ffdc82b60000829500048274001882530060973bfffc971bfffc947bfffc83120000801800007c0803a64e800021280300014182007c823b00048211000081f0ffdc81cf0000814e0004812a001881090060807b000083080008801800007c0803a64e80002180fb000480c7000080a6ffdc8085000080040010941bfffc3b1b000c3c0002a860004b187c0803a64e800021831b0000833b000c801800007c0903a67f2803a63b7b00104e800420823b00048211000081f0ffdc81cf0000814e0004812a001881090034807b000083080000801800007c0803a64e80002128030001418200c480fb000480c7000080a6ffdc80850000806400048323001883190034807b000083180008801800007c0803a64e80002182e300082c1700014082007482c3000056cbf80140a20010800d00347c0803a64e8000212c1600014081005482bb000482950000389600008074ffd03c0002a36000414c7c0803a64e800021706b00014082001880630000827b00087e6803a63b7b000c4e800020807b0000827b00087e6803a63b7b000c4e800020807b000082db00087ec803a63b7b000c4e800020807b000080fb00087ce803a63b7b000c4e800020|@3115,1048575|168,3,@3114 376,3,@1155 3114:C2,172|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e800020973bfffc971bfffc80030004941bfffc806300008318fffc3c0002a86000491c7c0803a64e800021947bfffc807b0004831b00084bffff9d398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b0000931900003879000082fb000c7ee803a63b7b00104e800020|@234,1048575|72,3,@3113 3115:S55|434f44455452454528292e707265436f6465283229636f7079436f6465283429696e736572742831297265636f707956616c7565283129 3116:C2,172|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e800020973bfffc971bfffc80030004941bfffc806300008318fffc3c0002a8600045987c0803a64e800021947bfffc807b0004831b00084bffff9d398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b0000931900003879000082fb000c7ee803a63b7b00104e800020|@234,1048575|72,3,@3112 3117:S61|434f44455452454528292e707265436f6465283229636f7079436f6465283429696e736572742831297265636f70794465636c61726174696f6e283129 3118:C2,172|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e800020973bfffc971bfffc80030000941bfffc806300044bffffbd947bfffc807b0004833b0008831900003c0002a76000be447c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b1d0004919d000082fb000092f80004907800003878000082db000c7ec803a63b7b00104e800020|@3019,1048575|88,3,@3017 3119:C2,172|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e800020973bfffc971bfffc80030004941bfffc80630000831800003c0002a76000be447c0803a64e800021947bfffc807b0004831b00084bffff9d398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b0000931900003879000082fb000c7ee803a63b7b00104e800020|@234,1048575|72,3,@3017 3120:C2,264|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e800020973bfffc971bfffc80030000941bfffc806300044bffffbd947bfffc947bfffc833b0008947bfffc80190004941bfffc80790000831b0014831800003c0002a76000be447c0803a64e8000213afb0008907700003adb000882bb000092b60004398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a9d0004919d0000827b000892740000825b000c92540004398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a3d0004919d0000821b000492110004929100003871000081fb00187de803a63b7b001c4e800020|@3019,1048575|108,3,@3017 3121:S19|756e6b6e6f776e20696e737472756374696f6e 3122:S41|434f44455452454528292e707265436f6465283229636f7079436f6465283429696e73657274283129 3123:S32|434f44455452454528292e707265436f6465283229636f7079436f6465283429 3124:S21|434f44455452454528292e707265436f6465283229 3125:O3|@3126,@2348,@274 3126:C2,352|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021706b00014082012c82e300042c1700014082011082d8000882b600188295002c973bfffc971bfffc947bfffc80030000941bfffc807b000083140000801800007c0803a64e800021280300014182004c827b000882530008823200188211002c807b000083100008801800007c0803a64e80002181fb0008807b0004830f0004833b000c801800007c0903a67f2803a63b7b00104e800420827b0008825300088232001882110054807b000083100000801800007c0803a64e800021280300014182004c81fb000881cf0008814e0018812a0054807b000083090008801800007c0803a64e800021811b0008807b000483080004833b000c801800007c0903a67f2803a63b7b00104e800420807b000081fb000c7de803a63b7b00104e80002083180004801800007c0903a64e80042083180004801800007c0903a64e800420|@3127,1048575| 3127:S21|434f44455452454528292e77726170456e76283129 3128:O3|@3130,@3129,@274 3129:O5|@3132,@2250,@274,0,64 3130:C2,300|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000882d7001882b60060973bfffc971bfffc947bfffc83150004801800007c0803a64e800021947bfffc829b00042c1400014082000c3a60000348000090825b0008823200088211001881f00024969bfffc80140000941bfffc807b0000830f0000801800007c0803a64e800021280300014182005081db0010814e0008812a001881090024807b000083080008801800007c0803a64e80002180fb0004828700043b7b0008800d00187c1b004040a00010800d00207c0803a64e8000214bffff703a6000013b7b0008281300014182002881db0008807b0000830e0004833b000c801800007c0903a67f2803a63b7b00104e800420807b000081db000c7dc803a63b7b00104e800020|@3131,1048575| 3131:S21|434f44455452454528292e6d6b5475706c65283129 3132:C2,96|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021971bfffc973bfffc80180004941bfffc3b1b00083c0002a8600054347c0803a64e800021831b0000833b0004801800007c0903a67f2803a63b7b000c4e800420|@3138,1048575|52,3,@3133 3133:C2,704|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000082d7000882b6001882950024973bfffc971bfffc947bfffc83140000801800007c0803a64e800021280300014182003c827b000482530000823200088211001881f00024807b0000830f0008801800007c0803a64e80002181db00087dc803a63b7b000c4e800020827b000482530000823200088211001881f00060807b0000830f0000801800007c0803a64e80002128030001418201a481db0004814e0000812a00088109001880e80060807b000083070008801800007c0803a64e8000212c0300014082002080db000480a600008065000c809b00087c8803a63b7b000c4e80002080db000480a600008085000883240010947bfffc80190000941bfffc80190010941bfffc3b0000012c0300014082000c3878000048000048398000025700f80140a20010800d00347c0803a64e8000217ef8661541a3fff0806300043b170000800d00187c1b004040a00010800d00207c0803a64e8000214bffffb0831b0000801800007c0803a64e80002182fb001082d700003aa30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00008296000c92830008827600109263000492a30000831b0004801800007c0803a64e800021947bfffc809b000c386000013b1b00183c0002a8600057107c0803a64e800021825b0014823200008211000881f00010807b0000830f0038801800007c0803a64e80002181db0014814e0000812a000881090010807b000083080014833b0018801800007c0903a67f2803a63b7b001c4e80042081db0004814e0000812a00088109000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002138fd0004919d00003cc002a860c6588c90c700083ca002a060a5c7ac90a70004808800009087000038670000800d00287c0803a64e800021|@3137,1048575|504,3,@3134 656,3,@3136 668,3,@227 3134:C2,296|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0400014082000c386000014e80002082f8fffc82d7000082b6000882950010973bfffc971bfffc947bfffc80040000941bfffc80040004941bfffc80140028941bfffc8018ffe8941bfffc83140010801800007c0803a64e800021947bfffc807b0010827b00188313fffc3c0002a8600054347c0803a64e8000213a430000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092430008823b000092230004821b000492030000831b0008801800007c0803a64e80002181fb00143980000255e0f80140a20010800d00347c0803a64e8000217dcf661541a3fff0809b000c386e0000831b0018833b001c7f2803a63b7b00204bfffee4|@3135,1048575|140,3,@3133 3135:S48|434f44455452454528292e6d616b65436f6e737456616c2831296d616b6556616c283129636f7079546f566563283229 3136:S32|6d616b6556616c202d206e6f7420636f6e7374616e74206f72207265636f7264 3137:S36|434f44455452454528292e6d616b65436f6e737456616c2831296d616b6556616c283129 3138:S26|434f44455452454528292e6d616b65436f6e737456616c283129 3139:O4|@3143,@274,@3145,@3142 3140:C2,2348|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7001882b6001c973bfffc971bfffc947bfffc83150000801800007c0803a64e800021280300014182001838600003829b00087e8803a63b7b000c4e800020829b0004827400048253001882320044807b000083110000801800007c0803a64e800021280300014182003c821b000481f0000481cf0018814e0044807b0000830a0008801800007c0803a64e80002138600003813b00087d2803a63b7b000c4e800020821b000481f0000481cf0018814e0024807b0000830a0000801800007c0803a64e800021280300014182003c813b00048109000480e8001880c70024807b000083060008801800007c0803a64e8000213860000380bb00087ca803a63b7b000c4e800020813b00048109000480e8001880c70034807b000083060000801800007c0803a64e800021280300014182003c80bb0004808500048064001883230034807b000083190008801800007c0803a64e80002138600003831b00087f0803a63b7b000c4e80002080bb000480850004806400188323002c807b000083190000801800007c0803a64e8000212803000141820040831b000482f8000482d7001882b6002c807b000083150008801800007c0803a64e80002180630004831b0004833b00087f2803a63b7b000c4bfffe14831b000482f8000482d7001882b60020807b000083150000801800007c0803a64e80002128030001418200a0829b0004827400048253001882320020807b000083110008801800007c0803a64e80002180030004941bfffc80030008941bfffc80630000831b000c4bfffda12803000141820044807b0004831b000c4bfffd8d280300014182001c807b0000831b000c833b00107f2803a63b7b00144bfffd7438600001821b00107e0803a63b7b00144e80002038600001821b00107e0803a63b7b00144e800020829b0004827400048253001882320058807b000083110000801800007c0803a64e8000212803000141820098821b000481f0000481cf0018814e0058807b0000830a0008801800007c0803a64e8000212c0300014082001838600003813b00087d2803a63b7b000c4e80002080030004941bfffc80630000831b00084bfffcc52803000141820028807b00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffffa838600001813b000c7d2803a63b7b00104e800020821b000481f0000481cf0018814e003c807b0000830a0000801800007c0803a64e80002128030001418200f0813b00048109000480e8001880c7003c807b000083060008801800007c0803a64e80002180030004941bfffc80030008941bfffc80630000831b000c4bfffc19280300014182009480bb00002c0500014082000c388000034800004c80050004941bfffc80650000831b00104bfffbe9280300014182002880bb00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffffb4388000013b7b0004280400014182001c807b0004831b000c833b00107f2803a63b7b00144bfffb9c38600001833b00107f2803a63b7b00144e8000203860000180bb00107ca803a63b7b00144e800020813b00048109000480e8001880c70060807b000083060000801800007c0803a64e800021280300014182009880bb0004808500048064001883230060807b000083190008801800007c0803a64e8000212c0300014082001838600003831b00087f0803a63b7b000c4e80002080030004941bfffc80630000831b00084bfffaed2803000141820028807b00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffffa838600001831b000c7f0803a63b7b00104e80002080bb0004808500048064001883230040807b000083190000801800007c0803a64e8000212803000141820040831b000482f8000482d7001882b60040807b000083150008801800007c0803a64e80002180630000831b0004833b00087f2803a63b7b000c4bfffa4c831b000482f8000482d7001882b60054807b000083150000801800007c0803a64e8000212803000141820098829b0004827400048253001882320054807b000083110008801800007c0803a64e8000212c0300014082001838600003821b00087e0803a63b7b000c4e80002080030004941bfffc80630000831b00084bfff9c52803000141820028807b00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffffa838600001821b000c7e0803a63b7b00104e800020829b0004827400048253001882320030807b000083110000801800007c0803a64e80002128030001418201a4821b000481f0000481cf0018814e0030807b0000830a0008801800007c0803a64e800021813b00048109000480e8001880c70024947bfffc80030004941bfffc807b000083060000801800007c0803a64e800021280300014182013480bb000c808500048064001883230024807b000083190008801800007c0803a64e800021831b000482fb000c82d7000482b60010947bfffc80180000941bfffc8015003c941bfffc83150018801800007c0803a64e800021831b0000801800007c0803a64e80002128030001418200b0829b0018809b0004807b000883140008801800007c0803a64e8000212803000141820078827b00042c1300014082001838600003825b001c7e4803a63b7b00204e80002080130004941bfffc80730000831b001c4bfff8352803000141820028827b00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffffa838600001825b00207e4803a63b7b00244e80002038600001827b001c7e6803a63b7b00204e80002038600001829b001c7e8803a63b7b00204e8000203860000180bb00107ca803a63b7b00144e800020821b000481f0000481cf0018814e0028807b0000830a0000801800007c0803a64e800021280300014182003c813b00048109000480e8001880c70028807b000083060008801800007c0803a64e8000213860000380bb00087ca803a63b7b000c4e800020813b00048109000480e8001880c70068807b000083060000801800007c0803a64e800021280300014182004080bb0004808500048064001883230068807b000083190008801800007c0803a64e80002180630000831b0004833b00087f2803a63b7b000c4bfff6f43860000180bb00087ca803a63b7b000c4e800020|@3141,1048575| 3141:S28|434f44455452454528292e7369646545666665637446726565283129 3142:O2|I15,@3149 3143:C2,820|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc947bfffc949bfffc82f8000c3ac000012c1700014082000c3ab60000480000a4281600014182000c3a80000348000064829b00088274000482530010398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008237000092230004821b00049203000080170004941bfffc8312001c801800007c0803a64e8000213a8300004800000c80170004941bfffc3ad4000082fb00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffff54281500014182001838600003829b000c7e8803a63b7b00104e800020829b0008827400083a4000012c1300014082000c3a320000480000a4281200014182000c3a00000348000064821b000881f0000481cf0010398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008153000091430004813b00049123000080130004941bfffc830e001c801800007c0803a64e8000213a0300004800000c80130004941bfffc3a500000827b00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffff54281100014182015c821b0000720b00014082013c81f0000471eb00014082011c81db0008814e0004812a00188109002495fbfffc800f0000941bfffc807b000083080000801800007c0803a64e80002128030001418200d080fb001080c7000480a6001880850024807b000083040008801800007c0803a64e800021833b0004831900042c1800014082008882fb001082d7000482b60010947bfffc8315000c801800007c0803a64e800021280300014082001838600003829b00187e8803a63b7b001c4e800020829b00148274000482530010807b000083120010801800007c0803a64e800021280300014082000c3a200003480000083a2000016a230002823b00187e2803a63b7b001c4e8000203860000182fb00147ee803a63b7b00184e8000203860000180fb00147ce803a63b7b00184e8000203860000181db000c7dc803a63b7b00104e8000203860000181fb000c7de803a63b7b00104e80002038600001821b000c7e0803a63b7b00104e800020|@3144,1048575| 3144:S35|434f44455452454528292e736964654566666563744672656552545343616c6c283229 3145:O2|I109,@3146 3146:O2|I110,@3147 3147:O2|I241,@3148 3148:O2|I246,0 3149:O2|I17,@3150 3150:O2|I24,@3151 3151:O2|I25,@3152 3152:O2|I26,@3153 3153:O2|I27,@3154 3154:O2|I28,@3155 3155:O2|I29,@3156 3156:O2|I105,@3157 3157:O2|I106,@3158 3158:O2|I107,@3159 3159:O2|I108,@3160 3160:O2|I111,@3161 3161:O2|I112,@3162 3162:O2|I113,@3163 3163:O2|I114,@3164 3164:O2|I115,@3165 3165:O2|I117,@3166 3166:O2|I118,@3167 3167:O2|I119,@3168 3168:O2|I120,@3169 3169:O2|I121,@3170 3170:O2|I122,@3171 3171:O2|I123,@3172 3172:O2|I125,@3173 3173:O2|I126,@3174 3174:O2|I127,@3175 3175:O2|I128,@3176 3176:O2|I130,@3177 3177:O2|I136,@3178 3178:O2|I137,@3179 3179:O2|I138,@3180 3180:O2|I139,@3181 3181:O2|I140,@3182 3182:O2|I141,@3183 3183:O2|I189,@3184 3184:O2|I196,@3185 3185:O2|I213,@3186 3186:O2|I214,@3187 3187:O2|I216,@3188 3188:O2|I217,@3189 3189:O2|I218,@3190 3190:O2|I223,@3191 3191:O2|I229,@3192 3192:O2|I230,@3193 3193:O2|I231,@3194 3194:O2|I232,@3195 3195:O2|I233,@3196 3196:O2|I234,@3197 3197:O2|I238,@3198 3198:O2|I239,@3199 3199:O2|I240,@3200 3200:O2|I242,@3201 3201:O2|I243,@3202 3202:O2|I244,@3203 3203:O2|I245,@3204 3204:O2|I247,@3205 3205:O2|I248,@3206 3206:O2|I249,@3207 3207:O2|I250,@3208 3208:O2|I251,@3209 3209:O2|I252,@3210 3210:O2|I253,@3211 3211:O2|I152,0 3212:O24|@3214,@2388,@274,@2542,@230,@2505,@229,@2545,@3425,@2086,@3502,@2348,0,@3011,@2250,@2242,1,@3533,@3125,@3503,@2340,@3213,@3128,@3129 3213:O7|@3536,@2086,@274,@2250,@3128,@2356,@230 3214:C2,176|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021398000053bbdffe87c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002a862d66a8092d7000082d8000c92d7001082b8001492b7000c82980010929700088278000892770004971bfffc96fbfffc949bfffc94bbfffc94dbfffc973bfffc809b00203b1b00143c0002a860006dc47c0803a64e800021825b00007e4803a63b7b00384e800020|@3424,1048575|68,3,@3215 144,3,@3218 3215:C2,628|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc947bfffc83180010801800007c0803a64e8000212c03000140820018807b0000833b00087f2803a63b7b000c4e800020833b00048019000c941bfffc807b000483190008801800007c0803a64e800021831b000882f8000482d7001882b60070947bfffc807b000883150000801800007c0803a64e8000212803000141820030827b000c825300048232001882110070807b000883100008801800007c0803a64e8000218283001048000018829b000c82740004825300188232001c82910004821b000c81f0000481cf0018814e0070969bfffc807b000c830a0000801800007c0803a64e8000212803000141820030811b001080e8000480c7001880a60070807b000c83050008801800007c0803a64e8000218123000448000040813b001081090004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021393d0004919d00003ce002a860e76d1090e900009109000480db001080a600048085001880640070953bfffc83230000807b00103b190000801800007c0803a64e800021280300014182003082fb001482d7000482b6001882950070807b001083140008801800007c0803a64e8000218303000c480000343d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213b1d0004919d00003ae0000192f80000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d000082db000492c300109303000c82bb000892a30008829b0000928300043a60000192630000831b000c833b0018801800007c0903a67f2803a63b7b001c4e800420|@3217,1048575|368,3,@3216 3216:C2,104|7f2802a663390002973bfffc8078000482e3000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002a062b5eef092b600083ea002a062b5c7ac92b6000482b7000092b6000038760000800d00287c0803a64e800021|@270,1015809|56,3,@269 68,3,@227 3217:S39|434f44455452454528292e6f7074696d69736550726f6328313229737472697044656373283129 3218:C2,22764|7f2802a663390002396000a4800d00187d6bd8107c0b004040a00010800d00247c0803a64e80002182f8000082d7000882b6001882950050973bfffc971bfffc947bfffc949bfffc83140000801800007c0803a64e800021280300014182002c827b000882530000807b000483120004833b000c801800007c0903a67f2803a63b7b00104e800420827b000882530000823200088211001881f00010807b0004830f0000801800007c0803a64e800021280300014182010481db0008814e0000812a00088109001880e80010807b000483070008801800007c0803a64e80002180db000880a6000080850008832400188319001080030004941bfffc80050004941bfffc80180004941bfffc38800001806300003b0600004bfffee9831b00143c0002a86000c6cc7c0803a64e800021947bfffc38800001807b000c831b00184bfffec1831b00183c0002a86000c6cc7c0803a64e8000213ae30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092e3000482db000092c30000831b0004801800007c0803a64e800021831b0008833b001c801800007c0903a67f2803a63b7b00204e80042081db0008814e0000812a00088109001880e8001c807b000483070000801800007c0803a64e800021280300014182003880db000880a6000080850008806400188323001c8079000483050004833b000c801800007c0903a67f2803a63b7b00104e80042080db000880a60000808500088064001883230030807b000483190000801800007c0803a64e80002128030001418211a8831b000882f8000082d7000882b6001882950030807b000483140008801800007c0803a64e80002180030000941bfffc80030008941bfffc3880000180630004831b00104bfffd71827b001082530000823200088211001881f00070947bfffc830f0000801800007c0803a64e8000212803000141820034815b0014812a00008109000880e8001880c70070807b000083060008801800007c0803a64e80002181c3000c480000343d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e80002139dd0004919d000039400001914e0000813b001495dbfffc810900082c0800014082000c38e000014800006480c8000080a60004809b00007c05204040820030398000013bbdfff87c1df04040a00010800d001c7c0803a64e80002138fd0004919d000090c700004800002481080004800d00187c1b004040a00010800d00207c0803a64e8000214bffff94807b0018832300008319000882f8001882d7007094fbfffc807b000883160000801800007c0803a64e8000212803000141820034829b001c82740000825300088232001882110070807b000883100008801800007c0803a64e80002182a300104800001c82bb001c8295000082740008825300188232001c82b10004821b0000720b00014082002c387000003b1b00203c0002a86000c8d47c0803a64e80002181fb00207de803a63b7b00244e80002081fb001c81cf0000814e0008812a00188109004496bbfffc3875000083080000801800007c0803a64e8000212803000141820f4880fb002080c7000080a60008808500188064004483230008807b00003b190000801800007c0803a64e800021947bfffc947bfffc82c3000082a300048283001438a0000138800081386000173f000000631841c8801800007c0803a64e8000213a60001592630000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a5d0004919d0000907200043a20ffff923200003d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213a1d0004919d00009250000039fb0000920f000039db000039400001914e0004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021393d0004919d0000811b00009109000080fb000490e90004947bfffc947bfffc38a0000138800081386000173f000000631841c8801800007c0803a64e80002138c0001590c30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138bd0004919d0000906500043880ffff908500003d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d000090a300003b3b0000907900003b1b00003ae0000192f80004398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a7d0004919d0000825b000092530000823b000492330004947bfffc947bfffc38a0000138800081386000173f000000631841c8801800007c0803a64e8000213a00001592030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002139fd0004919d0000906f000439c0ffff91cf00003d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e800021395d0004919d000091ea000038db00009146000038bb00003880000190850004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000833b000093230000831b000493030004967bfffc96dbfffc96bbfffc969bfffc953bfffc947bfffc3ae00001821b00442c1000014082000c39f70000480000483980000256e0f80140a20010800d00347c0803a64e8000217dd7661541a3fff0821000043aee0000800d00187c1b004040a00010800d00207c0803a64e8000214bffffb03980000255e0f80140a20010800d00347c0803a64e8000217dcf641141a3fff095fbfffc809b0048386e00003b1b00583c0002a86000d0f47c0803a64e800021947bfffc809b002c807b00283c0002a86000dfb47c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021395d0004919d00003d2002a86129e104912a0000811b0008910a000480fb005880c70000398000053bbdffe87c1df04040a00010800d001c7c0803a64e80002138bd0004919d00003c8002a86084e1cc908500008326001093250010830600089305000c9105000882fb000c92e50004398000053bbdffe87c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002a862b5e38492b60000911600108287001c9296000c82660018927600088247fff892560004823800188211000039e30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000081d0000491c30004813b001091230000391600003c0002a260002e7c7c0803a64e80002128030001418200084800005c808600088064001883230008398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008319000493030004912300003c0002a260002e7c7c0803a64e8000212803000140820008480001a0398000073bbdffe07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003f2002a86339e53c93230000831b00449303001891e3001482fb000c92e3001082c7001c92c3000c9263000882a6000892a30004398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a9d0004919d00003de002a861efea1091f4000091140004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021393d0004919d00003d0002a86108eaac9109000090690004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021389d0004919d00003c6002a86063eb4c9064000090a40004398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d00003ee002a862f7ebe092f900009159000481e70014280f00014182000c3940000348000008815b0048973bfffc96dbfffc81070018951bfffc955bfffc80a7001094bbfffc807b0064947bfffc83270008973bfffc82e7000496fbfffc38c4000038a9000038940000807b003883070000801800007c0803a64e80002138830000480005803d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ac0000192d700003d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003a80000192950000947bfffc947bfffc392500003ad7000038a0000138800081386000173f000000631841c8801800007c0803a64e8000213a80001592830000398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138bd0004919d0000906500043880ffff908500003d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d000090a300003b3b0000907900003b1b00003ae0000192f80004398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a9d0004919d000080bb000090b40000809b0004909400048067001883230000831b000c3998ffff7f2bc0385560f80140a20010800d00347c0803a64e8000217ef9661541a3fff092e30000398000093bbdffd87c1df04040a00010800d001c7c0803a64e80002138bd0004919d00003c8002a86084ec789085000091e5002082e6001092e5001c8087001c9085001892850014830600089305001092c5000c92a50008825b000c92450004969bfffc94bbfffc95fbfffc96dbfffc96bbfffc955bfffc953bfffc951bfffc973bfffc386000013b1b00883c0002a86000f4407c0803a64e800021823b001082110000281000014182028081fb008481cf0018814e0000398000025540f80140a20010800d00347c0803a64e8000217d2a661541a3fff0912e0000810f000080e8000880c7001880a6003438830000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00003b2000019323000c3b000001930300083ae0000392e3000491430000949bfffc955bfffc80080014941bfffc83050004801800007c0803a64e800021947bfffc809b0040386000033b1b00983c0002a960001cd47c0803a64e80002182db009482b600008295000882740018825300303a230000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003a0000019203000881fb000091e300049223000083120004801800007c0803a64e80002181db0094814e0000812a00088109001880e8001c947bfffc80070004941bfffc807b00143b0e00003c0002a86000c6cc7c0803a64e80002180db009c80a6000080850008832400188319002c3ae30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003ac0000192c3000892e3000482bb001092a3000083180004801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a9d0004919d00003a60000192740004907400003d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213a5d0004919d00003a20000192320000821b009c398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d000081fb000091e300109243000c81db000491c300088150fff89143000492830000831b000c801800007c0803a64e80002138830000480000e481fb001481cf0000280e0001418200b8815b0084812a00008109000880e8001880c7001480090004941bfffc80060004941bfffc3b0a00003c0002a86000c6cc7c0803a64e800021947bfffc809b003c386000013b1b00943c0002a960001cd47c0803a64e80002138a30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000090a30004809b000090830000831b0004801800007c0803a64e800021831b0008801800007c0803a64e800021388300004800001438830000947bfffc947bfffc947bfffc947bfffc947bfffc947bfffc3b7b0044949bfffc809b0038807b00343c0002a76000a6ac7c0803a64e800021809b0028807b00243c0002a76000a6ac7c0803a64e800021815b005c812a000080090014941bfffc807b000483090010801800007c0803a64e800021811b006080e8000080c7000880a6001880850070947bfffc807b000883040000801800007c0803a64e8000212803000141820034833b00648319000082f8000882d7001882b60070807b000883150008801800007c0803a64e800021806300104800001c807b0064832300008319000882f8001882d7001c8076000482bb006482950000827400088253001882320070947bfffc807b000c83110000801800007c0803a64e800021280300014182003481fb006881cf0000814e0008812a001881090070807b000c83080008801800007c0803a64e8000218203000448000044821b006881f00000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a1d0004919d00003dc002a961ce202491d00000814f000891500004813b006881090000961bfffc807b00588308000c801800007c0803a64e80002180fb006c80c70000947bfffc807b00148306000c801800007c0803a64e8000212c0300014082000c80bb001848000028947bfffc807b001c3b1b00783c0002a9600020a87c0803a64e80002138a300003b7b00042c0500014082000c809b00004800002894bbfffc807b00043b1b00783c0002a9600021507c0803a64e800021388300003b7b0004807b0070832300008319000882f8001882d70070949bfffc807b001883160000801800007c0803a64e8000212803000141820034829b007482740000825300088232001882110070807b001883100008801800007c0803a64e80002182a3000c480000343d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003a80000192950000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d0000827b000c9263001092a3000c825b001092430008823b000892230004821b000092030000831b0014833b0078801800007c0903a67f2803a63b7b007c4e800420386000013b1b00243c0002a86000c8d47c0803a64e80002180fb00247ce803a63b7b00284e800020831b000882f8000082d7000882b6001882950034807b000483140000801800007c0803a64e8000212803000141820088827b000882530000823200088211001881f00034807b0004830f0008801800007c0803a64e80002181db000839430000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000812a000891230008810e001c9103000491430000830efff4833b000c801800007c0903a67f2803a63b7b00104e800420827b000882530000823200088211001881f00044807b0004830f0000801800007c0803a64e8000212803000141820b8881db0008814e0000812a00088109001880e80044807b000483070008801800007c0803a64e80002180db000880a6001c3980000254a0f80140a20010800d00347c0803a64e8000217c85661541a3fff0947bfffc947bfffc82c3000082a3000482830010826300143a44000038a0000138800081386000173f000000631841c8801800007c0803a64e8000213a20001592230000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a1d0004919d00009070000439e0ffff91f000003d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e80002139dd0004919d0000920e0000395b000091ca0000393b00003900000191090004398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138fd0004919d000080bb000090a70000809b000490870004947bfffc947bfffc38a0000138800081386000173f000000631841c8801800007c0803a64e8000213b20001593230000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b1d0004919d0000907800043ae0ffff92f800003d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213a3d0004919d0000931100003a1b00009230000039fb000039c0000191cf0004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021395d0004919d0000813b0000912a0000811b0004910a000480a60000398000073bbdffe07c1df04040a00010800d001c7c0803a64e800021389d0004919d00003c6002a9606321f8906400008326fff493240018830500049304001490e4001082e5000892e4000c924400088225001892240004398000073bbdffe07c1df04040a00010800d001c7c0803a64e8000213a1d0004919d00003de002a961ef249c91f0000081c6fff891d0001891500014923000109310000c9250000892f00004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003de002a961ef278091e3000091430004398000053bbdffe87c1df04040a00010800d001c7c0803a64e80002139fd0004919d00003d0002a961082840910f000081050010910f001092ef000c914f000890ef0004398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138fd0004919d00003d4002a9614a29f09147000092070004398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a1d0004919d00003d4002a9614a2a889150000090900004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021389d0004919d00003d4002a9614a2b209144000091e40004398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002139fd0004919d00003d4002a9614a2bac914f0000906f00043d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d00003940000391430000815b001896bbfffc969bfffc967bfffc965bfffc95fbfffc965bfffc947bfffc38600001947bfffc81ea001095fbfffc38600001947bfffc806a0008947bfffc82aa000496bbfffc38c4000038b000003887000038760000830a0000801800007c0803a64e8000213d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213a9d0004919d00003a60000192740000825b002882320000398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213a1d0004919d00003de002a961ef2c3c91f0000081d2001c91d0000c815100089150000892900004398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021393d0004919d00003d0002a96108308c9109000080f1001090e9001080d2fff890c9000c9149000892090004969bfffc953bfffc3b1200003c0002a86000c6cc7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138bd0004919d00003c8002a96084329890850000833b000093250004831b003082f800003ac5000080bb00083896000083170028801800007c0803a64e80002182bb003082950000827400088253001882320008947bfffc807b001083110000801800007c0803a64e800021280300014182013081fb003481cf0000814e0008812a00188109004480e90008398000083bbdffdc7c1df04040a00010800d001c7c0803a64e800021387d0004919d000038c0000190c3001c38a0000190a300188087000490830014833b0014932300103b0000019303000c82fb000c92e3000882db001892c3000482bb000092a30000800e0014941bfffc83080004801800007c0803a64e8000213d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213a9d0004919d00003a60000192740000825b0038823200003a030000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d0000920300109283000c81f1002491e3000881d2fff891c300043940000191430000831b0000801800007c0803a64e8000213a03000048000410821b003481f0000081cf0008814e0018812a0000807b001083090000801800007c0803a64e8000212803000141820130811b003480e8000080c7000880a600188085004480650000833b00088319000082e30004398000083bbdffdc7c1df04040a00010800d001c7c0803a64e800021387d0004919d00003ac0000192c3001c3aa0000192a3001892e30014829b0014928300109303000c827b000c92630008825b001892430004823b00009223000080070014941bfffc83040004801800007c0803a64e8000213d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213a1d0004919d000039e0000191f0000081db003839430000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d0000813b0034912300109203000c91430008810efff49103000438e0000190e30000831b0000801800007c0803a64e8000213a030000480002b4811b003480e8000080c7000880a6001880850004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008324000493230004831b0010930300003c0002a260002e7c7c0803a64e800021280300014182006c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082e8000492e3000482db000092c300008305007c801800007c0803a64e8000212803000141820020829b00348274000082530008823200188211000c82b000044800000882bb001082fb003482d70000829600088274001882530044823b000882110000398000083bbdffdc7c1df04040a00010800d001c7c0803a64e800021387d0004919d000039e0000191e3001c39c0000191c3001892a30014815b0014914300109203000c813b000c91230008811b00189103000480fb000090e3000096bbfffc83120004801800007c0803a64e80002180db000c80a600002805000140820020833b003883190010801800007c0803a64e800021388300004800000838830000807b0038832300008319000882f8001882d70044398000083bbdffdc7c1df04040a00010800d001c7c0803a64e800021387d0004919d00003aa0000192a3001c3a80000192830018827b000092630014825b0018924300103a2000019223000c821b00109203000881fb001c91e3000481db000491c30000949bfffc80190014941bfffc83160004801800007c0803a64e8000213d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e800021395d0004919d000039200001912a0000811b004038e30000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d000090e300109143000c80db000490c3000880a8fff890a300043880000190830000831b0000801800007c0803a64e8000213a0300003b7b0008961bfffc809b0030807b002c3c0002a76000a6ac7c0803a64e800021809b0028807b00243c0002a76000a6ac7c0803a64e800021807b0000833b00407f2803a63b7b00444e80002081db0008814e0000812a00088109001880e80024807b000483070000801800007c0803a64e800021280300014182005480db000880a60000808500088064001883230024807b000483190008801800007c0803a64e800021831b000882f80000807b000483170004833b000c801800007c0903a67f2803a63b7b00104e80042080db000880a60000808500088064001883230014807b000483190000801800007c0803a64e8000212803000141820508831b000882f8000082d7000882b6001882950014807b000483140008801800007c0803a64e8000213d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213a7d0004919d00003a40000192530000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a3d0004919d00003e0002a96210333092110000927100043d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e80002139fd0004919d000039c0000191cf0000815b0008812a0000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021391d0004919d000038e0000190e8000480c3000090c800002c0800014082001480a30000808300043864000048000030951bfffc80a30004386500003b1b00103c0002a9600033987c0803a64e8000213885000038a600003b7b000494bbfffc949bfffc967bfffc963bfffc95fbfffc8309002c801800007c0803a64e800021809b001c398000013bbdfff87c1df04040a00010800d001c7c0803a64e8000213b3d0004919d0000831b000093190000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002a962d6344092d7000082bb000492b70004398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a9d0004919d00009314000492f40000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a7d0004919d000082440008925300049293000082240020963bfffc8204001c961bfffc81e4001895fbfffc81c4001495dbfffc81440010955bfffc973bfffc967bfffc81240004953bfffc80c4fff080a4fff48104fff880e40000388800003b070000801800007c0803a64e80002180db000880a6000028050001408200a0809b001c80640000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d00003b0000019319000482fb001092f900002c1900014082001082c3002c807b000c48000028973bfffc82c3002c807b00103b1b00243c0002a9600034d47c0803a64e8000213b7b00043b160000801800007c0803a64e800021809b0014831b001c833b00207f2803a63b7b00244bffdbd8807b000c3b1b00203c0002a96000357c7c0803a64e800021809b001c398000013bbdfff87c1df04040a00010800d001c7c0803a64e8000213b3d0004919d0000831b000093190000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002a962d6395492d7000082bb000492b70004398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a9d0004919d00009314000492f40000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a7d0004919d0000824400089253000492930000947bfffc82240020963bfffc8204001c961bfffc81e4001895fbfffc81c4001495dbfffc81440010955bfffc973bfffc967bfffc81240004953bfffc80c4fff080a4fff48104fff880e4000038880000807b00343b070000801800007c0803a64e80002180db002080a6000080850008832400188319001480050004941bfffc80180004941bfffc3b0600003c0002a86000c6cc7c0803a64e8000213ae30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082db000892c3000492e30000831b0000801800007c0803a64e800021831b0004833b002c801800007c0903a67f2803a63b7b00304e800420831b000882f8000082d7000882b600188295004c807b000483140000801800007c0803a64e8000212803000141820234827b000882530000823200088211001881f0004c807b0004830f0008801800007c0803a64e80002181db0008815b0000714b00014082019c812e0008712b0001408201308109000080ea000080c800047c0730404182006480ae0000808500088064000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213b3d0004919d00003f0002a9631839ac931900083ee002a062f7c7ac92f9000482c3000092d9000038790000800d00287c0803a64e80002180ae000080850008832400188319004c80080000941bfffc80050004941bfffc80180004941bfffc3b1b00183c0002a9600039d07c0803a64e80002182fb00143ac30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000082b7001c92a300083a8000039283000492c30000831b0008801800007c0803a64e800021831b0000801800007c0803a64e800021831b0004833b0018801800007c0903a67f2803a63b7b001c4e800420810e000080e8000880c7000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002138bd0004919d00003c8002a960843ab4908500083c6002a06063c7ac90650004832600009325000038650000800d00287c0803a64e800021812e00008109000880e8000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002138dd0004919d00003ca002a960a53ab490a600083c8002a06084c7ac90860004806700009066000038660000800d00287c0803a64e800021827b000882530000823200088211001881f0005c807b0004830f0000801800007c0803a64e800021280300014182009c81db0008814e0000812a00088109001880e8005c807b000483070008801800007c0803a64e80002180db000880a6000080850008832400188319005c80050004941bfffc80180004941bfffc388000013b0600004bffd711831b00103c0002a86000c6cc7c0803a64e800021831b0000801800007c0803a64e800021831b0004833b0014801800007c0903a67f2803a63b7b00184e80042081db0008814e0000812a00088109001880e80020807b000483070000801800007c0803a64e8000212803000141821d1080db000880a60000808500088064001883230020807b000483190008801800007c0803a64e80002180030004941bfffc80030008941bfffc3880000180630000831b00104bffd659831b00103c0002a86000c6cc7c0803a64e800021831b001082f8000082d7000882b6001882950024947bfffc83140000801800007c0803a64e8000212803000141820130827b001482530000823200088211001881f00024807b0000830f0008801800007c0803a64e80002181db0014814e0000812a00088109001038e30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080ca003090c3000490e300008308001c801800007c0803a64e800021280300014182009080bb00148085000080640008832300188319001c807b000483180000801800007c0803a64e800021280300014182004482fb001482d7000080160004941bfffc386000018316002c801800007c0803a64e800021831b0000833b001c801800007c0903a67f2803a63b7b00204e800420809b000c807b0004831b0014833b00187f2803a63b7b001c4bffd50c809b000c807b0008831b0014833b00187f2803a63b7b001c4bffd4f0809b000c807b0008831b00144bffd4d9947bfffc809b0010807b0008831b00184bffd4c5947bfffc827b001c82530000807b000483120010801800007c0803a64e800021823b001c82110000947bfffc807b00088310000c801800007c0803a64e80002181fb002081cf0000947bfffc807b0008830e0010801800007c0803a64e800021815b0024812a0000947bfffc807b000c8309000c801800007c0803a64e800021811b002880e8000080c7000880a6001880850024947bfffc807b000c83040000801800007c0803a64e8000212803000141820744807b002c832300008319000882f8001882d70024807b000c83160008801800007c0803a64e80002182bb00082c1500014082065c829b002c82740000825300088232001882110024947bfffc807b000883100000801800007c0803a64e800021280300014182057481fb003081cf0000814e0008812a001881090024807b000883080008801800007c0803a64e80002180fb00042c0700014082048c80db003080a6000080850008832400103b030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00009303000482fb000092e30000971bfffc8319001c801800007c0803a64e800021280300014182014882db003482b60000807b002083150034801800007c0803a64e8000212803000141820018807b001c829b00387e8803a63b7b003c4e800020829b00348274000082530008823200188211001c398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002139fd0004919d000039c0000191cf0004815b0020914f00003d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e800021393d0004919d00003900000191090000398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138fd0004919d00003cc002a960c63adc90c7000080b3001c90a70004398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d000080900004908300109123000c833b00149323000890e3000491e3000083130014833b0038801800007c0903a67f2803a63b7b003c4e80042082db003482b600008295000882740010398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008255004092430004823b0004922300008313001c801800007c0803a64e8000212803000141820088821b003481f0000081cf0008814e0010398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000812f003091230004811b000091030000830a001c801800007c0803a64e800021280300014182002c80fb003480c70000807b002083060004833b0038801800007c0903a67f2803a63b7b003c4e800420821b003481f0000081cf0008814e0010398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000812f003091230004811b000491030000830a001c801800007c0803a64e800021280300014182013480fb003480c7000080a6000880850010398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008326004093230004831b0000930300008304001c801800007c0803a64e80002128030001418200d882fb003482d7000080160004941bfffc3c60000060635ba883160038801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003a80000192950004827b002492750000825b0038823200008211000881f0001881cf003039430000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000039200003912300089143000492a30000830e0004801800007c0803a64e800021831b0000833b003c801800007c0903a67f2803a63b7b00404e80042080fb003480c70000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000080bb000c90a30008809b001490830004833b00209323000080060004941bfffc8306003c801800007c0803a64e800021831b0000833b003c801800007c0903a67f2803a63b7b00404e80042080db003080a6000080050004941bfffc8005003c941bfffc807b00203b0600003c0002a86000c6cc7c0803a64e800021947bfffc807b0020831b003c3c0002a86000c6cc7c0803a64e80002138830000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000090830008833b000093230004831b002893030000831b0004801800007c0803a64e800021831b0008833b0040801800007c0903a67f2803a63b7b00444e80042081fb003081cf0000800e0004941bfffc800e003c941bfffc807b00203b0f00003c0002a86000c6cc7c0803a64e800021947bfffc807b0020831b003c3c0002a86000c6cc7c0803a64e80002139430000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000091430008813b000091230004811b002891030000831b0004801800007c0803a64e800021831b0008833b0040801800007c0903a67f2803a63b7b00444e800420829b002c8274000080130004941bfffc8013003c941bfffc807b001c3b1400003c0002a86000c6cc7c0803a64e800021947bfffc807b001c831b00383c0002a86000c6cc7c0803a64e8000213a430000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092430008823b000092230004821b002492030000831b0004801800007c0803a64e800021831b0008833b003c801800007c0903a67f2803a63b7b00404e800420807b002c832300008319000882f8001882d70060807b000c83160000801800007c0803a64e800021280300014182084082bb002c82950000827400088253001882320060807b000c83110008801800007c0803a64e800021821b002c81f0000081cf0008814e0018812a0060947bfffc807b000883090000801800007c0803a64e8000212803000141820290811b003080e8000080c7000880a6001880850060807b000883040008801800007c0803a64e800021947bfffc3b200001831b00042c1800014082000c3af9000048000048398000025720f80140a20010800d00347c0803a64e8000217ed9661541a3fff0831800043b360000800d00187c1b004040a00010800d00207c0803a64e8000214bffffb096fbfffc3ac0000182bb00042c1500014082000c3a960000480000483980000256c0f80140a20010800d00347c0803a64e8000217e76661541a3fff082b500043ad30000800d00187c1b004040a00010800d00207c0803a64e8000214bffffb0827b00007e6ba378556bf80140a20010800d00347c0803a64e8000217c13a000408200d03a400001823b00082c1100014082000c3a12000048000048398000025640f80140a20010800d00347c0803a64e8000217df2661541a3fff0823100043a4f0000800d00187c1b004040a00010800d00207c0803a64e8000214bffffb081fb003881cf0018814e0000398000025540f80140a20010800d00347c0803a64e8000217d2a661541a3fff0912e0000811b0004951bfffc961bfffc80db001038a0000138800001386a00003b1b00443c0002a960003b347c0803a64e80002180fb003c7ce803a63b7b00404e800020825b00388232000080110004941bfffc8011003c941bfffc807b00283b1200003c0002a86000c6cc7c0803a64e800021947bfffc807b0028831b00443c0002a86000c6cc7c0803a64e8000213a030000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00009203000881fb000091e3000481db003091c30000831b0004801800007c0803a64e800021831b0008833b0048801800007c0903a67f2803a63b7b004c4e800420811b003080e8000080c7000880a6001880850068807b000883040000801800007c0803a64e8000212803000141820474807b0030832300008319000882f8001882d70068807b000883160008801800007c0803a64e80002182bb003082950000827400088253001882320034947bfffc80030000941bfffc807b000083110000801800007c0803a64e800021280300014182035c821b003881f0000081cf0008814e0018812a0034807b000083090008801800007c0803a64e800021810300042c0800034082027480e300082c070001408201b480db000480030000941bfffc80060004941bfffc38a00001809b00102c0400014082000c38650000480000483980000254a0f80140a20010800d00347c0803a64e8000217f25661541a3fff08084000438b90000800d00187c1b004040a00010800d00207c0803a64e8000214bffffb0833b00007f2b1b78556bf80140a20010800d00347c0803a64e8000217c19180040820070398000013bbdfff87c1df04040a00010800d001c7c0803a64e8000213b1d0004919d000082fb000492f800003ac0000196dbfffc973bfffc80db001838b8000038800001387700003b1b004c3c0002a960003b347c0803a64e80002182bb00447ea803a63b7b00484e800020831b004082f8000080170004941bfffc8017003c941bfffc807b00303c0002a86000c6cc7c0803a64e800021947bfffc807b0030831b004c3c0002a86000c6cc7c0803a64e8000213ac30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092c3000882bb000092a30004829b003892830000831b0004801800007c0803a64e800021831b0008833b0050801800007c0903a67f2803a63b7b00544e80042080db003880a6000080050004941bfffc8005003c941bfffc807b00283b0600003c0002a86000c6cc7c0803a64e800021947bfffc807b0028831b00443c0002a86000c6cc7c0803a64e80002138830000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000090830008833b000093230004831b003093030000831b0004801800007c0803a64e800021831b0008833b0048801800007c0903a67f2803a63b7b004c4e80042080fb003880c7000080060004941bfffc8006003c941bfffc807b00283b0700003c0002a86000c6cc7c0803a64e800021947bfffc807b0028831b00443c0002a86000c6cc7c0803a64e80002138a30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000090a30008809b000090830004833b003093230000831b0004801800007c0803a64e800021831b0008833b0048801800007c0903a67f2803a63b7b004c4e800420821b003881f00000800f0004941bfffc800f003c941bfffc807b00283b1000003c0002a86000c6cc7c0803a64e800021947bfffc807b0028831b00443c0002a86000c6cc7c0803a64e80002139c30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000091c30008815b000091430004813b003091230000831b0004801800007c0803a64e800021831b0008833b0048801800007c0903a67f2803a63b7b004c4e800420807b00308323000080190004941bfffc8019003c941bfffc807b0020831b00383c0002a86000c6cc7c0803a64e800021947bfffc807b0020831b003c3c0002a86000c6cc7c0803a64e8000213b030000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00009303000882fb000092e3000482db002892c30000831b0004801800007c0803a64e800021831b0008833b0040801800007c0903a67f2803a63b7b00444e80042082bb002c82950000827400088253001882320068807b000c83110000801800007c0803a64e80002128030001418209f0821b002c81f0000081cf0008814e0018812a0068807b000c83090008801800007c0803a64e800021811b002c80e8000080c7000880a6001880850034947bfffc80030000941bfffc807b000083040000801800007c0803a64e80002128030001418208d8807b0034832300008319000882f8001882d70034807b000083160008801800007c0803a64e80002182a300042c150003408207f0828300082c14000140820730827b0004825b0034823200008211000881f0001881cf006080030000941bfffc80130004941bfffc807b0014830e0000801800007c0803a64e80002128030001418201cc815b003c812a00008109000880e8001880c70060807b001483060008801800007c0803a64e800021947bfffc38a000012c0300014082000c38850000480000483980000254a0f80140a20010800d00347c0803a64e8000217f25661541a3fff08063000438b90000800d00187c1b004040a00010800d00207c0803a64e8000214bffffb0807b00047c6b2378556bf80140a20010800d00347c0803a64e8000217c03200040820070398000013bbdfff87c1df04040a00010800d001c7c0803a64e8000213b3d0004919d0000831b00089319000082fb000096fbfffc947bfffc38c0000138a0000138990000387800003b1b004c3c0002a960003b347c0803a64e80002182db00447ec803a63b7b00484e800020833b00408319000080180004941bfffc8018003c941bfffc807b00303b1900003c0002a86000c6cc7c0803a64e800021947bfffc807b0030831b004c3c0002a86000c6cc7c0803a64e8000213ae30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092e3000882db000092c3000482bb003892a30000831b0004801800007c0803a64e800021831b0008833b0050801800007c0903a67f2803a63b7b00544e800420815b003c812a00008109000880e8001880c70068807b001483060000801800007c0803a64e800021280300014182044080bb003c80850000806400088323001883190068807b001483180008801800007c0803a64e80002182fb003c82d7000082b600088295001882740034947bfffc80030000941bfffc807b000083130000801800007c0803a64e8000212803000141820328825b0044823200008211000881f0001881cf0034807b0000830e0008801800007c0803a64e800021814300042c0a000340820240812300082c09000140820180811b000480fb000880c800047ceb3378556bf80140a20010800d00347c0803a64e8000217c073000408200a0398000013bbdfff87c1df04040a00010800d001c7c0803a64e80002138bd0004919d0000809b000c90850000398000013bbdfff87c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000083030000931900003ae0000196fbfffc94fbfffc38c000013ac5000038b9000038960000806300003b1b00503c0002a960003b347c0803a64e80002182bb00487ea803a63b7b004c4e80002080bb00448085000080040004941bfffc8004003c941bfffc807b00343b0500003c0002a86000c6cc7c0803a64e800021947bfffc807b0034831b00503c0002a86000c6cc7c0803a64e8000213b230000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000093230008831b00009303000482fb003c92e30000831b0004801800007c0803a64e800021831b0008833b0054801800007c0903a67f2803a63b7b00584e800420811b004480e8000080070004941bfffc8007003c941bfffc807b00343b0800003c0002a86000c6cc7c0803a64e800021947bfffc807b0034831b00503c0002a86000c6cc7c0803a64e80002138c30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000090c3000880bb000090a30004809b003c90830000831b0004801800007c0803a64e800021831b0008833b0054801800007c0903a67f2803a63b7b00584e800420813b00448109000080080004941bfffc8008003c941bfffc807b00343b0900003c0002a86000c6cc7c0803a64e800021947bfffc807b0034831b00503c0002a86000c6cc7c0803a64e80002138e30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000090e3000880db000090c3000480bb003c90a30000831b0004801800007c0803a64e800021831b0008833b0054801800007c0903a67f2803a63b7b00584e800420825b00448232000080110004941bfffc8011003c941bfffc807b00343b1200003c0002a86000c6cc7c0803a64e800021947bfffc807b0034831b00503c0002a86000c6cc7c0803a64e8000213a030000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00009203000881fb000091e3000481db003c91c30000831b0004801800007c0803a64e800021831b0008833b0054801800007c0903a67f2803a63b7b00584e80042080bb003c8085000080040004941bfffc8004003c941bfffc807b002c3b0500003c0002a86000c6cc7c0803a64e800021947bfffc807b002c831b00483c0002a86000c6cc7c0803a64e8000213b230000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000093230008831b00009303000482fb003492e30000831b0004801800007c0803a64e800021831b0008833b004c801800007c0903a67f2803a63b7b00504e800420827b00348253000080120004941bfffc8012003c941bfffc807b00243b1300003c0002a86000c6cc7c0803a64e800021947bfffc807b0024831b00403c0002a86000c6cc7c0803a64e8000213a230000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092230008821b00009203000481fb002c91e30000831b0004801800007c0803a64e800021831b0008833b0044801800007c0903a67f2803a63b7b00484e800420829b00348274000080130004941bfffc8013003c941bfffc807b00243b1400003c0002a86000c6cc7c0803a64e800021947bfffc807b0024831b00403c0002a86000c6cc7c0803a64e8000213a430000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092430008823b000092230004821b002c92030000831b0004801800007c0803a64e800021831b0008833b0044801800007c0903a67f2803a63b7b00484e800420807b00348323000080190004941bfffc8019003c941bfffc807b0024831b003c3c0002a86000c6cc7c0803a64e800021947bfffc807b0024831b00403c0002a86000c6cc7c0803a64e8000213b030000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00009303000882fb000092e3000482db002c92c30000831b0004801800007c0803a64e800021831b0008833b0044801800007c0903a67f2803a63b7b00484e800420821b002c81f00000800f0004941bfffc800f003c941bfffc807b001c3b1000003c0002a86000c6cc7c0803a64e800021947bfffc807b001c831b00383c0002a86000c6cc7c0803a64e80002139c30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000091c30008815b000091430004813b002491230000831b0004801800007c0803a64e800021831b0008833b003c801800007c0903a67f2803a63b7b00404e80042080db000880a60000808500088064001883230058807b000483190000801800007c0803a64e8000212803000141820050831b000882f8000082d7000882b6001882950058807b000483140008801800007c0803a64e8000213b1b000c3c0002a960004e4c7c0803a64e800021827b000c7e6803a63b7b00104e800020831b000882f8000082d7000882b6001882950060807b000483140000801800007c0803a64e800021280300014182035c827b000882530000823200088211001881f00060807b0004830f0008801800007c0803a64e800021947bfffc947bfffc39c3000038a0000138800081386000173f000000631841c8801800007c0803a64e8000213940001591430000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021393d0004919d0000906900043900ffff910900003d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e80002138fd0004919d00009127000038db000090e6000038bb00003880000190850004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000833b000093230000831b000493030004398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002a962d689bc92d70000907700043d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003a8000039295000096bbfffc947bfffc96fbfffc947bfffc947bfffc947bfffc38bb0000388e0000386000033b1b002c3c0002a960008a407c0803a64e800021827b002882530000823200088211001881f00060807b0004830f0004801800007c0803a64e80002181db0014814e0000280a000141820024811b002880e800008307005c801800007c0803a64e800021392300004800000839230000811b002880e8000080c7000880a6001880850060953bfffc807b000c83040004801800007c0803a64e800021947bfffc809b0024807b00203c0002a86000dfb47c0803a64e800021833b003083190000398000053bbdffe87c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002a062d6c63092d700009077001082b8000892b7000c8299001c9297000882780018927700043d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213a5d0004919d00003a20000192320000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a1d0004919d00003de002a061efc57891f0000092f00004398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d000081db000091c300109243000c815b00049143000892030004813b00089123000083180014833b0034801800007c0903a67f2803a63b7b00384e800420827b000882530000823200088211001881f00040807b0004830f0000801800007c0803a64e800021280300014182042c81db0008814e0000812a00088109001880e80040807b000483070008801800007c0803a64e80002180030004941bfffc3880000180630000831b000c4bffb52180db000c80a60000808500088324001883190070947bfffc83180000801800007c0803a64e800021280300014182003482db001082b60000829500088274001882530070807b000083120008801800007c0803a64e80002182e300104800001c82fb001082d7000082b60008829500188274001c82f30004825b00108232000096fbfffc807b000483110010801800007c0803a64e800021821b001481f0000081cf0008814e0018812a0060947bfffc807b000483090000801800007c0803a64e8000212803000141820054811b001880e8000080c7000880a6001880850060807b000483040008801800007c0803a64e800021807b00043b1b001c3c0002a96000907c7c0803a64e800021833b001c7f2803a63b7b00204e800020811b001880e8000080c7000880a6001880850024807b000083040000801800007c0803a64e8000212803000141820158807b0018832300008319000882f8001882d70024807b000083160008801800007c0803a64e80002182bb00188295000080140014941bfffc809b0004807b001083140054801800007c0803a64e800021827b001c82530000823200088211001881f0001c947bfffc800f0004941bfffc807b00148312000c801800007c0803a64e8000213d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e80002139dd0004919d000039400001914e0000813b002481090000398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138fd0004919d00003cc002a960c6975890c7000080a8001c90a7000438830000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d0000833b00009323001091c3000c831b00049303000890e3000490830000831b0008833b0028801800007c0903a67f2803a63b7b002c4e800420807b00188323000080190014941bfffc807b000c83190010801800007c0803a64e800021831b001c82f8000038830000807b001083170044801800007c0803a64e80002182db001c82b6000082950008827400188253001c947bfffc80120004941bfffc807b00148315000c801800007c0803a64e8000213d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213a3d0004919d00003a0000019211000081fb002481cf0000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021395d0004919d00003d2002a9612997b0912a0000810e001c910a000438e30000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d000080db000090c300109223000c80bb000490a300089143000490e30000831b0008833b0028801800007c0903a67f2803a63b7b002c4e80042081db0008814e0000812a00088109001880e80048807b000483070000801800007c0803a64e800021280300014182002c80db000880a60000807b000483050004833b000c801800007c0903a67f2803a63b7b00104e80042080db000880a6000080850008806400188323003c807b000483190000801800007c0803a64e8000212803000141820130831b000882f8000082d7000882b600188295003c807b000483140008801800007c0803a64e800021827b000882530000823200088211001881f0003c80030004941bfffc80030008941bfffc80120004941bfffc800f0004941bfffc38800001806300003b1300004bffb045831b00183c0002a86000c6cc7c0803a64e800021947bfffc807b000c3b1b00203c0002a9600098087c0803a64e800021947bfffc809b0018807b0014831b00204bffb001831b00203c0002a86000c6cc7c0803a64e80002139c30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000815b00009143000891c30004813b000491230000831b0008801800007c0803a64e800021831b000c833b0024801800007c0903a67f2803a63b7b00284e800420831b000882f8000082d7000882b6001882950028807b000483140000801800007c0803a64e8000212803000141820054827b000882530000823200088211001881f00028807b0004830f0008801800007c0803a64e80002181db0008814e0000807b0004830a0004833b000c801800007c0903a67f2803a63b7b00104e800420827b000882530000823200088211001881f00068807b0004830f0000801800007c0803a64e800021280300014182044081db0008814e0000812a00088109001880e80068807b000483070008801800007c0803a64e80002180030004941bfffc3880000180630000831b000c4bffae9580db000c80a60000947bfffc83050010801800007c0803a64e800021809b0010832400008319000882f8001882d70034947bfffc83160000801800007c0803a64e8000212803000141820034829b001482740000825300088232001882110034807b000083100008801800007c0803a64e8000213aa000014800006882bb001482950000827400088253000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a3d0004919d00003e0002a9621098ec921100083de002a061efc7ac91f1000481d2000091d1000038710000800d00287c0803a64e80002181fb001481cf0018814e0000813b00083989ffff7d4b48385560f80140a20010800d00347c0803a64e8000217d0a661541a3fff0910e000080ef0000398000063bbdffe47c1df04040a00010800d001c7c0803a64e80002138dd0004919d00003ca002a960a5991890a60000914600148087001090860010807b00049066000c83270044932600088307000893060004955bfffc38860000386900003c0002a9600048f87c0803a64e80002182fb001882d70000398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003e8002a962949a6492950000827b0000927500088256000892550004947bfffc38950000807b00103c0002a9600048f87c0803a64e800021823b001c82110000398000053bbdffe87c1df04040a00010800d001c7c0803a64e80002139fd0004919d00003dc002a961ce9b6891cf000081500004914f001081300008912f000c8111001c910f000880f0001890ef000480c9001880a60068947bfffc95fbfffc80100014941bfffc80050004941bfffc807b001c83100010801800007c0803a64e80002138830000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000833b00209323000490830000831b0000801800007c0803a64e800021831b002c82f8000082d7000882b6001882950060947bfffc807b001083140004801800007c0803a64e800021827b003082530000947bfffc807b00248312000c801800007c0803a64e800021821b00182c1000014082000c3a2300004800001c3b1b00383c0002a960009c387c0803a64e8000213a2300003d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e80002139fd0004919d000039c0000191cf0000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021395d0004919d00003d2002a961299ce0912a0000811b0010910a0004398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d000080fb000090e3001091e3000c80db000490c300089143000492230000831b000c833b0038801800007c0903a67f2803a63b7b003c4e80042081db0008814e0000812a00088109001880e80064807b000483070000801800007c0803a64e800021280300014182028880db000880a60000808500088064001883230064807b000483190008801800007c0803a64e800021831b000882f8000082d7000882b600188295002080030000941bfffc80030004941bfffc80030008941bfffc807b000483140000801800007c0803a64e8000212803000141820068827b001482530000823200088211001881f00020807b0004830f0008801800007c0803a64e80002181db0014814e000080bb0008809b0004807b0000830a004c801800007c0803a64e80002138800001831b0014833b00187f2803a63b7b001c4bffa99c827b001482530000823200088211001881f00058807b0004830f0000801800007c0803a64e800021280300014182007481db0014814e0000812a00088109001880e80058807b000483070008801800007c0803a64e80002180db001480a600008085004c80bb000838640000809b00043b230000807b00003b190000801800007c0803a64e80002138800001831b0014833b00187f2803a63b7b001c4bffa8fc38800001807b0000831b00144bffa8e5831b00143c0002a86000c6cc7c0803a64e800021947bfffc38800001807b0008831b00184bffa8bd831b00183c0002a86000c6cc7c0803a64e80002181db0018814e0000800a0004941bfffc800a0048941bfffc388000013b1b00243c0002a960009d387c0803a64e800021392000012c0300014082000c3869000048000058398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021391d0004919d00009128000480e3000090e800003928000080630004800d00187c1b004040a00010800d00207c0803a64e8000214bffffa0831b0000801800007c0803a64e800021831b0004833b0024801800007c0903a67f2803a63b7b00284e80042080db000880a60000808500088064001883230038807b000483190000801800007c0803a64e800021280300014182003c831b000882f8000082d7000882b6001882950038807b000483140008801800007c0803a64e800021827b000c7e6803a63b7b00104e800020831b000882f8000082d7000882b6000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a9d0004919d00003e6002a862734fe4927400083e4002a06252c7ac92540004823500009234000038740000800d00287c0803a64e800021|@3423,1048575|288,3,@3219 328,3,@3219 1072,3,@3222 1232,3,I11 1444,3,I11 1656,3,I11 2012,3,@3226 2040,3,@3239 2092,3,@3241 2156,3,@3243 2232,3,@3245 2340,3,@755 2428,3,@755 2492,3,@3247 2580,3,@3251 2632,3,@3253 2684,3,@3255 2736,3,@3257 2992,3,I11 3272,3,@3259 3376,3,@3264 3588,3,@3300 3740,3,@3219 4100,3,@3219 4132,3,@3300 4284,3,@2989 4308,3,@2989 4628,3,@3302 4740,3,@3303 4792,3,@3304 5072,3,@3222 5452,3,I11 5664,3,I11 5896,3,@3305 5984,3,@3307 6060,3,@3309 6112,3,@3311 6180,3,@3313 6232,3,@3315 6284,3,@3317 6336,3,@3319 6596,3,@3321 6664,3,@3326 6712,3,@3219 6764,3,@3328 7592,3,@755 8220,3,@2989 8244,3,@2989 8580,3,@3330 8744,3,@3332 8892,3,@3333 9208,3,@3335 9276,3,@3336 9376,3,@3340 9628,3,@3219 9924,3,@3341 9936,3,@227 10016,3,@3342 10204,3,@3343 10216,3,@227 10300,3,@3343 10312,3,@227 10488,3,@3219 10672,3,@3219 11716,3,@3344 12252,3,I218 12600,3,@3219 12628,3,@3219 12780,3,@3219 12808,3,@3219 12960,3,@3219 12988,3,@3219 13688,3,@3345 13752,3,@3219 13780,3,@3219 14336,3,@3345 14396,3,@3219 14424,3,@3219 14576,3,@3219 14604,3,@3219 14756,3,@3219 14784,3,@3219 14936,3,@3219 14964,3,@3219 15116,3,@3219 15144,3,@3219 15788,3,@3345 15852,3,@3219 15880,3,@3219 16380,3,@3345 16444,3,@3219 16472,3,@3219 16624,3,@3219 16652,3,@3219 16804,3,@3219 16832,3,@3219 16984,3,@3219 17012,3,@3219 17164,3,@3219 17192,3,@3219 17344,3,@3219 17372,3,@3219 17524,3,@3219 17552,3,@3219 17704,3,@3219 17732,3,@3219 17884,3,@3219 17912,3,@3219 18124,3,@3363 18268,3,I11 18496,3,@3397 18600,3,@3398 18764,3,@3239 18824,3,@225 18948,3,@222 19424,3,@3402 19728,3,@3408 20056,3,@3409 20420,3,@3219 20448,3,@3410 20488,3,@3219 21024,3,@3411 21036,3,@227 21168,3,@3412 21228,3,@3354 21288,3,@3414 21328,3,@3354 21388,3,@3416 21652,3,@3417 21756,3,@3418 22308,3,@3219 22348,3,@3219 22396,3,@3419 22716,3,@3121 22728,3,@227 3219:C2,276|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f80000973bfffc971bfffc947bfffc8317000c801800007c0803a64e8000212c0300014082002c82db000482b60000807b000083150010833b0008801800007c0903a67f2803a63b7b000c4e80042082db000482b60000947bfffc8015002c941bfffc807b000883150010801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a9d0004919d00003a60000192740004907400002c1400014082000c807b000448000024969bfffc807b00083b1b00143c0002a86000c7fc7c0803a64e8000213b7b0004831b0000833b0010801800007c0903a67f2803a63b7b00144e800420|@3221,1048575|228,3,@3220 3220:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c8078ffec4e800020973bfffc971bfffc80030000941bfffc806300044bffffbd398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b00009319000038790000833b00087f2803a63b7b000c4e800020|@468,786433| 3221:S40|434f44455452454528292e6f7074696d69736550726f632831322967657447656e6572616c283129 3222:C2,1544|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000213d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ac0000392d7000096fbfffc971bfffc973bfffc947bfffc8078fff03b1b000c3c0002a86000cef87c0803a64e80002182bb00088295fffc82740000947bfffc8075ffe883130010801800007c0803a64e800021825b000c8232ffec281100014182000c3a0000034800000c8212fffc8210001481fb001081cf0000280e0001418201b48132fffc81090000947bfffc961bfffc8072ffe883080010801800007c0803a64e80002180fb001480c7fffc80a60000808500088324001883190024947bfffc83180000801800007c0803a64e800021280300014182015482fb001882d7fffc82b60000829500088274001882530024807b000083120008801800007c0803a64e800021823b0004281100014182000c394000034800012c821b001881f0fffc81cf00008070ffe8830e0010801800007c0803a64e800021815b0018812afffc8109000080e8000880c7001880a60024947bfffc83050000801800007c0803a64e80002128030001418200ac809b001c8064fffc832300008319000882f8001882d70024807b000083160008801800007c0803a64e80002182bb001c8295fffc827400008253000882320010947bfffc8011003c941bfffc83110018801800007c0803a64e800021831b0000801800007c0803a64e8000212803000141820030821b002481f0fffc81cf0000809b0018807b0004830e0020801800007c0803a64e8000213943000048000018394000014800001039400001947bfffc947bfffc3b7b000c4800001c394000014800001439400001947bfffc961bfffc947bfffc280a000141820088813b00188109fffc80e8000080c7000880a6001880850030398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000833b000493230008831b00089303000482fb000c92e3000080080010941bfffc83040004801800007c0803a64e800021831b0000801800007c0803a64e80002139430000480001e0815b0010714b000140820168812a0000811b001880e8fff470eb00014082009480c9000480a700007c062840408200848088fffc80640000832300088319001882f8004c398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000082c4001c92c300083aa0000392a30004829b000c9283000080170004941bfffc83090000801800007c0803a64e800021831b0000801800007c0803a64e800021394300004800013080c8fffc398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000080a6001c90a300083880000190830004833b000c9323000083090000801800007c0803a64e800021831b001882f8fffc82d7000082b6000882950018827400303a430000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000823b000492230008821b0008920300049243000083130004801800007c0803a64e80002139430000947bfffc48000070813b00188109fffc80e8000080c7000880a6001880850030398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000833b000493230008831b00089303000482fb000c92e3000083040004801800007c0803a64e80002139430000947bfffc82db001c82b6fffc8295000082740008825300188232001c955bfffc80140014941bfffc80110004941bfffc8076ffe88314000c801800007c0803a64e8000213d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213a1d0004919d000039e0000191f0000081db0028814efffc812a0000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021391d0004919d00003ce002a860e7d05c90e8000080c9001c90c8000438a30000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d0000809b0000908300109203000c833b0008932300089103000490a30000831b0004833b0024801800007c0903a67f2803a63b7b00304e800420|@3225,1048575|104,3,@3223 1428,3,@3224 3223:C2,328|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e800020973bfffc971bfffc80030004941bfffc388000018063000082f8fffc8317fffc3c0002a860006dc47c0803a64e80002182db000482b6fffc8315fffc3c0002a86000c6cc7c0803a64e800021829b00048274fffc8253fffc823200008211000881f0001881cf0024947bfffc830e0000801800007c0803a64e8000212803000141820038815b0008812afffc8109fffc80e8000080c7000880a6001880850024807b000083040008801800007c0803a64e80002148000014815b0008812a00003900000191090000807b0004831b00084bffff01398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b0000931900003879000082fb000c7ee803a63b7b00104e800020|@234,1048575|80,3,@3218 108,3,@3219 3224:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@270,1048575| 3225:S54|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d6973652832296e6f74496e6c696e6543616c6c283129 3226:C2,380|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0400014082000c386000014e800020398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002a862d6d28c92d7000082d8ffc092d70004398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003e8002a86294d3709295000092f50004973bfffc971bfffc947bfffc80040004941bfffc96bbfffc8264000038800001387300008318fffc3c0002a860006dc47c0803a64e80002138c0000180bb000838830000807b0000825b000c8312fffc3c0002a86000d4047c0803a64e800021823b0008398000025620f80140a20010800d00347c0803a64e8000217e11661541a3fff0947bfffc809b000838700000831b00104bfffed12c03000140820018807b000081fb00147de803a63b7b00184e800020947bfffc807b00043b1b00183c0002a86000ded47c0803a64e80002181fb00187de803a63b7b001c4e800020|@3238,1048575|84,3,@3227 140,3,@3229 196,3,@3218 236,3,@3231 348,3,@3237 3227:C2,136|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021398000025460f80140a20010800d00347c0803a64e8000217ee3641141a3fff0398000013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d00009083000038a3000038970000807800043c0002a36000620c7c0903a67f2803a64e800420|@3228,1048079|116,3,@1198 3228:S54|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f7079283229736574546162283229 3229:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@3230,1048575| 3230:S54|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f7079283229736574546162283129 3231:C2,980|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f80000973bfffc971bfffc947bfffc949bfffc94bbfffc94dbfffc3864000083170010801800007c0803a64e800021947bfffc82db001482b6000082950008827400188253002483120000801800007c0803a64e8000212803000141820228823b00148211000081f0000881cf0018814e0024807b0000830a0008801800007c0803a64e800021813b00148109000080e8000880c7001880a60070807b000c83050000801800007c0803a64e8000212803000141820034807b0014832300008319000882f8001882d70070807b000c83160008801800007c0803a64e800021808300104800001c809b001480640000832300088319001882f8001c8097000482db001482b60000829500088274001882530044949bfffc3864000083120000801800007c0803a64e80002128030001418200d0821b001881f0000081cf0008814e0018812a0044807b000083090008801800007c0803a64e800021811b001880e8000080c7000880a60018808500048063001483040000801800007c0803a64e8000212803000141820054807b00082c03000340820028833b001883190000807b000483180004801800007c0803a64e8000213a23000048000064833b0018807b00108319fffc801800007c0803a64e8000213a23000048000044807b00188323fffc807b00103b190000801800007c0803a64e8000213a23000048000020823b0018807b00108311fffc801800007c0803a64e8000213a230000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092230004821b000c92030000831b0014801800007c0803a64e80002181fb001881cf0000807b0010830e000c833b001c801800007c0903a67f2803a63b7b00204e800420823b00148211000081f0000881cf0018814e0034807b0000830a0000801800007c0803a64e80002128030001418200e0813b00148109000080e8000880c7001880a60034807b000083050008801800007c0803a64e800021808300082c04000140820088833b0014807b000c8319fffc801800007c0803a64e8000213b030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00009303000482fb000892e30000831b0010801800007c0803a64e80002182db001482b60000807b000c8315000c833b0018801800007c0903a67f2803a63b7b001c4e8004203b1b00183c0002a86000d7f47c0803a64e800021833b00187f2803a63b7b001c4e8000203b1b00183c0002a86000d7f47c0803a64e800021813b00187d2803a63b7b001c4e800020|@3236,1048575|912,3,@3232 948,3,@3232 3232:C2,1336|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8fffc82d7001882b600003980000256a0f80140a20010800d00347c0803a64e8000217e95661541a3fff09296000082770000825300088232001882110070973bfffc971bfffc96bbfffc8018fff4941bfffc807b000083100000801800007c0803a64e800021280300014182003881db0008814efffc812a00008109000880e8001880c70070807b000083060008801800007c0803a64e80002181e300104800002081fb000881cffffc814e0000812a00088109001880e8001c81e7000480db000880a6fffc8085000080640008832300188319004495fbfffc8006ffec941bfffc386f000083180000801800007c0803a64e80002128030001418200a082db001082b6fffc82950000827400088253001882320044807b000483110008801800007c0803a64e800021821b001081f0fffc81cf0000814e0008812a0018810900048063001483080000801800007c0803a64e800021280300014182003880fb00002c0700034082002480db001080a6fffc8085000080640008832300188319001c82f800044800001882fb00044800001082fb00044800000882fb000482db001082b6fffc82950000827400088253001882320034398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00003a0000019203000c39e0000191e3000839c0000391c30004815b000c9143000096fbfffc80140014941bfffc83110004801800007c0803a64e800021813b00188109fffc80e8000080c7000880a6001880850070947bfffc8009fff4941bfffc807b000083040000801800007c0803a64e8000212803000141820038833b00208319fffc82f8000082d7000882b6001882950070807b000083140008801800007c0803a64e8000218063000448000048807b00208323fffc83190000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003ee002a862f7dd4892e3000082d8000892c3000482bb00208295fffc82740000825300088232001882110070947bfffc8015fff4941bfffc807b000083100000801800007c0803a64e800021280300014182003881db0028814efffc812a00008109000880e8001880c70070807b000083060008801800007c0803a64e80002181e3000c480000343d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e80002139fd0004919d000039c0000191cf0000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d0000815b00149143001091e3000c813b000c91230008811b00049103000438e0000190e30000831b0010801800007c0803a64e80002180db002838a30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000090a300048086fff0908300008306fff8801800007c0803a64e800021807b00288323fffc831900008063fff48318000c801800007c0803a64e80002182fb002882d7fffc82b6000082950008827400188253002c3a230000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003a0000019203000881f7ffe891e3000481db002491c30000963bfffc83120004801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021395d0004919d000039200001912a0004906a00002c0a000140820018807b0000811b00307d0803a63b7b00344e800020955bfffc807b00043b1b00343c0002a86000ddcc7c0803a64e800021811b00347d0803a63b7b00384e800020|@3235,1048575|732,3,@3233 1304,3,@3234 3233:C2,104|7f2802a663390002973bfffc8078000482e3000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002a062b5eef092b600083ea002a062b5c7ac92b6000482b7000092b6000038760000800d00287c0803a64e800021|@270,1015809|56,3,@269 68,3,@227 3234:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c8078ffcc4e800020973bfffc971bfffc80030000941bfffc806300044bffffbd398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b00009319000038790000833b00087f2803a63b7b000c4e800020|@468,786433| 3235:S39|434f44455452454528292e6f7074696d69736550726f63283132296e65774465636c2834292f33 3236:S37|434f44455452454528292e6f7074696d69736550726f63283132296e65774465636c283429 3237:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c8078ffe84e800020973bfffc971bfffc80030000941bfffc806300044bffffbd398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b00009319000038790000833b00087f2803a63b7b000c4e800020|@468,786433| 3238:S45|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f7079283229 3239:C2,276|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180830000806400002c03ffff408200e08304000482f800002c170001408200103c600000606346884e800020973bfffc971bfffc96fbfffc97fbfffc3ec002a862d6e05696dbfffc3aa0000196bbfffc3bfb000038a0000138800001387700003f000000631841c8801800007c0803a64e8000213a83000083fb0008480000183c6002a06063a344800d00287c0803a64e800021827b000c967bfffc38c0000138b4000038800003807b00143f000000631858c8801800007c0803a64e800021387400003f00000063184648801800007c0803a64e80002138740000825b00147e4803a63b7b00184e800020806400044e800020|@3240,1048575|64,3,I49 92,3,$3239+162 128,3,I11 160,3,@78 204,3,I195 228,3,I47 3240:S22|5374726574636841727261792e766563746f72283229 3241:C2,104|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021398000013bbdfff87c1df04040a00010800d001c7c0803a64e8000213afd0004919d00009097000038b7000038830000807800043c0002a36000620c7c0903a67f2803a64e800420|@3242,1048079|84,3,@1198 3242:S59|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d6973652832297365744e6577546162466f72496e6c696e65283229 3243:C2,348|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc947bfffc949bfffc3864000083180010801800007c0803a64e800021833b00088319000c82f8001882d70034947bfffc83160000801800007c0803a64e800021280300014182009882bb000c8295000c8274001882530034807b000083120008801800007c0803a64e80002182230000562bf80140a20010800d00347c0803a64e8000212c1100014181000848000050821b000c398000013bbdfff87c1df04040a00010800d001c7c0803a64e80002139fd0004919d000081db000491cf000038af000038910000807000083c0002a36000620c7c0803a64e80002182bb000c398000013bbdfff87c1df04040a00010800d001c7c0803a64e8000213a9d0004919d0000827b00049274000038b40000809b000880750004833b00103c0002a36000620c7c0903a67f2803a63b7b00144e800420|@3244,1048575|244,3,@1198 324,3,@1198 3244:S56|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229736574546162466f72496e6c696e65283229 3245:C2,344|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c050001418200084800002882e3000056ebf80140a20010800d00347c0803a64e8000212c170001408100084800004c3ae30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000090a300089083000492e3000083180004801800007c0903a67f2803a64e8004203a7900003a5800003a2300003a04000038970000807200103c0002a36000414c7c0803a64e800021706b00014082004c81f2000c398fffff7e0b78385560f80140a20010800d00347c0803a64e8000217dcc841141a3fff080830000386e0000831200083b330000801800007c0903a67f2803a64e800420398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000090a300089203000492230000831200043b330000801800007c0903a67f2803a64e800420|@3246,1048575|176,3,@1155 3246:S59|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d6973652832296c6f6f6b75704c6f63616c4e657741646472283329 3247:C2,960|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0500014082027880a300002c05000140820064973bfffc8098000482e4000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002a862b5e91892b600083ea002a062b5c7ac92b6000482b7000092b6000038760000800d00287c0803a64e80002154abf80140a20010800d00347c0803a64e8000212c050001408100943a7900003a5800003a24000038850000807200103c0002a36000414c7c0803a64e800021706b00014082000c82e3000048000174967bfffc80b200048085000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003f2002a06339c79c932300083f0002a06318c7ac9303000482e4000092e30000800d00287c0803a64e8000213980000254a0f80140a20010800d00347c0803a64e8000217ee5641141a3fff056ebf80140a20010800d00347c0803a64e8000212c170001408000084800003882d800148196fffc558c09fc619500017eeba838556bf80140a20010800d00347c0803a64e8000217c17a800408000084800001c973bfffc3c6002a0606395e0800d00287c0803a64e80002156ec083a7e96602e3ad4000072cb00014082000c82f6000048000064973bfffc827800048253000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a3d0004919d00003ee002a062f7c79c92f100083ec002a062d6c7ac92d1000482b2000092b1000038710000800d00287c0803a64e8000213a2400003a5800003a79000080b2000c3985ffff7e2b28385560f80140a20010800d00347c0803a64e8000217c8c8c1141a3fff03864000038970000831200083b330000801800007c0903a67f2803a64e80042082f8000482d7001882b60070973bfffc971bfffc947bfffc949bfffc94bbfffc80180018941bfffc807b000083150000801800007c0803a64e8000212803000141820030827b0010825300048232001882110070807b000083100008801800007c0803a64e8000218283000448000040829b001082740004398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a9d0004919d00003e4002a86252e9449254000092740004823b0004398000025620f80140a20010800d00347c0803a64e8000217e0c8c1141a3fff0398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00009203000881fb000891e3000481db000c91c300003b140000833b0014801800007c0903a67f2803a63b7b00184e800420|@3250,1048575|100,3,@3248 112,3,@227 196,3,@1155 276,3,@226 288,3,@227 440,3,@51 536,3,@226 548,3,@227 824,3,@3249 3248:S35|6c6f6f6b75704465633a20496e6c696e652066756e6374696f6e207265637572736573 3249:C2,104|7f2802a663390002973bfffc8078000482e3000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002a062b5eef092b600083ea002a062b5c7ac92b6000482b7000092b6000038760000800d00287c0803a64e800021|@270,1015809|56,3,@269 68,3,@227 3250:S61|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d6c6f6f6b7570446563283329 3251:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@3252,1048575| 3252:S59|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d6973652832296c6f6f6b75704c6f63616c4e657741646472283129 3253:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@3254,1048575| 3254:S61|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d6c6f6f6b7570446563283129 3255:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@3256,1048575| 3256:S56|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229736574546162466f72496e6c696e65283129 3257:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@3258,1048575| 3258:S59|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d6973652832297365744e6577546162466f72496e6c696e65283129 3259:C2,276|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021971bfffc94bbfffc82f8000c3ac0000392d70000280400014182000848000010809800083ac0000392c40000973bfffc947bfffc388000012c0300014082000c3b24000048000048398000025480f80140a20010800d00347c0803a64e8000217f04661541a3fff08063000438980000800d00187c1b004040a00010800d00207c0803a64e8000214bffffb0831b000c82f800047f2bbb78556bf80140a20010800d00347c0803a64e8000217c19b80041820018807b000082db00047ec803a63b7b00104e80002038970000807b00003b1b000c3c0002a86000eda87c0803a64e80002182db00047ec803a63b7b00104e800020|@3263,1048575|244,3,@3260 3260:C2,1460|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c030001408200782c0400014082000c386000014e800020973bfffc809800008064001082e3000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002a862b5f37892b600083ea002a062b5c7ac92b6000482b7000092b6000038760000800d00287c0803a64e80002182f80000548bf80140a20010800d00347c0803a64e8000212c040001408000084800003882d700208196fffc558c09fc619500017c8ba838556bf80140a20010800d00347c0803a64e8000217c04a8004080000848000024973bfffc82a3000082c300043c6002a0606395e0800d00287c0803a64e800021548c083a7eb6602e3ad5000072cb00014082000c829600004800006c973bfffc8297001082d4000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003e6002a06273c79c927500083e6002a06273c7ac927500048276000092750000824300008223000438750000800d00287c0803a64e800021973bfffc971bfffc949bfffc80030000941bfffc80030004941bfffc387400008317001c801800007c0803a64e800021827b000c82530000823200108211001881f00024947bfffc807b0008830f0000801800007c0803a64e80002128030001418200ec815b0010812a00008109001080e8001880c70024807b000883060008801800007c0803a64e80002180bb001080850000832400108319001882f80024947bfffc807b000483170000801800007c0803a64e800021280300014182008882db001482b60000829500108274001882530024807b000483120008801800007c0803a64e800021823b00148211000081f0001081cf001039430000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000091430004813b000091230000830e001c801800007c0803a64e80002139c30000480001c839c00001480001c081db0010814e0000812a00108109001880e80034807b000883070000801800007c0803a64e800021280300014182017c80db001080a60000808500108064001883230034807b000883190008801800007c0803a64e800021831b001082f8000082d7001082b600188295003480030000941bfffc80030004941bfffc80030008941bfffc807b000c83140000801800007c0803a64e8000212803000141820104827b001c82530000823200108211001881f00034807b000c830f0008801800007c0803a64e80002181db0008814300007dcb5378556bf80140a20010800d00347c0803a64e8000217c0e5000408200ac813b0004810300047c0940404082009480fb001c80c3000880a7fffc3985ffff7ccb28385560f80140a20010800d00347c0803a64e8000217c86661541a3fff083270000831900183998ffff7c8bc0385560f80140a20010800d00347c0803a64e8000217eec241141a3fff082db00007ecbbb78556bf80140a20010800d00347c0803a64e8000217c16b8004082000c39c000034800003439c000014800002c39c000014800002439c000014800001c39c000014800001439c00001947bfffc947bfffc947bfffc3b7b0008280e0001418200084800002c80db001480a600008085001438a0000338640000809b00103c0002a36000620c7c0803a64e800021833b001483190000809b0010807800143c0002a36000414c7c0803a64e800021280300014182007c82fb00103980000256e0f80140a20010800d00347c0803a64e8000217eccbc1141a3fff038960000807b0008831b00144bfffad5398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d000090750004829b000c9295000038750000827b00187e6803a63b7b001c4e80002082fb00103980000256e0f80140a20010800d00347c0803a64e8000217eccbc1141a3fff038960000807b0008831b0014833b00187f2803a63b7b001c4bfffa58|@3262,1048575|108,3,@3261 120,3,@227 256,3,@51 352,3,@226 364,3,@227 1220,3,@1198 1252,3,@1155 3261:S33|66696c74657241726773273a2077726f6e67206e756d626572206f662061726773 3262:S76|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d66696c7465724172677328332966696c7465724172677327283229 3263:S62|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d66696c74657241726773283329 3264:C2,1336|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8fffc82d700003980000c3bbdffcc7c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003e8002a86294f994929500008298ff989295002c8278ff909275002882560004925500248238ff78923500208218ffa89215001c81f8ffb091f5001881d6000891d500148157fffc915500108138ffe89135000c8117001c9115000880f6001890f50004398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138dd0004919d00003ca002a860a5ff6090a6000080b8ff7c90a60004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021389d0004919d00003ce002a860e7ffb890e4000092a40004398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003ce002a960e7006890f5000080f8ff8090f50004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021391d0004919d00003d2002a9612900bc912800008138ff849128000482f8fffc81570014280a000141820010947bfffc386000034800000c947bfffc8078ffec398000013bbdfff87c1df04040a00010800d001c7c0803a64e80002139dd0004919d000081f8ffe491ee0000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a1d0004919d00003e2002a962310110923000008238ff9492300004398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213add0004919d000091f6000492160000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a5d0004919d0000821700089212000492d20000973bfffc971bfffc951bfffc8117001c951bfffc82d7001896dbfffc947bfffc80770010947bfffc95dbfffc965bfffc82570004965bfffc39c6000038d5000038a40000388e00008078ffbc83170000801800007c0803a64e800021815b0000812aff8881090000280800014182010480eaffa838c000012c0700014082000c38660000480000cc80bb0000388700008065ff983c0002a36000414c7c0803a64e80002128030001418200683980000254c0f80140a20010800d00347c0803a64e8000217c86661541a3fff03980000254e0f80140a20010800d00347c0803a64e8000217c6c3c1141a3fff038c4000038e30000800d00187c1b004040a00010800d00207c0803a64e8000214bffff6c3980000254e0f80140a20010800d00347c0803a64e8000217c8c3c1141a3fff038e40000800d00187c1b004040a00010800d00207c0803a64e8000214bffff2c831b0000833b00043c0002a9600001b07c0903a67f2803a63b7b000c4e80042080eaff8c80c70000280600014182013c947bfffc80aaffa8388000012c0500014082000c38640000480000d4833b00043a640000388500008079ff983c0002a36000414c7c0803a64e8000212803000141820068398000025660f80140a20010800d00347c0803a64e8000217e53661541a3fff03980000254a0f80140a20010800d00347c0803a64e8000217e2c2c1141a3fff03892000038b10000800d00187c1b004040a00010800d00207c0803a64e8000214bffff683980000254a0f80140a20010800d00347c0803a64e8000217e4c2c1141a3fff03893000038b20000800d00187c1b004040a00010800d00207c0803a64e8000214bffff24833b000c7c6bc838556bf80140a20010800d00347c0803a64e8000217c03c80040810018831b0004833b00087f2803a63b7b00104bfffaf8807b0000831b00087f0803a63b7b00104e80002080bb00047ca803a63b7b000c4e800020|@3299,1048575|76,3,@3265 212,3,@3268 268,3,@3269 320,3,@3271 376,3,@3272 512,3,@3273 772,3,@1155 968,3,@3275 1052,3,@1155 3265:C2,1236|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0500014082038c80a300002c0500014082002c973bfffc971bfffc949bfffc8078000c83180010801800007c0803a64e8000213ae300004800030454abf80140a20010800d00347c0803a64e8000212c050001408100983a7900003a5800003a24000038850000807200183c0002a36000414c7c0803a64e800021706b00014082000c82e30000480002a8967bfffc8212001481f0000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002139dd0004919d00003d4002a0614ac79c914e00083d2002a06129c7ac912e0004810f0000910e0000386e0000800d00287c0803a64e8000213980000254a0f80140a20010800d00347c0803a64e8000217ee5641141a3fff03a7900003a5800003a240000389700008072002c3c0002a36000414c7c0803a64e80002128030001418200dc8212002081f2001c398fffff7e0b78385560f80140a20010800d00347c0803a64e8000217dd0661541a3fff03985ffff7dcb28385560f80140a20010800d00347c0803a64e8000217d4e661541a3fff0813200148109001880e80034398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d000038c0000190c3000c38a0000190a30008388000039083000491430000967bfffc965bfffc963bfffc80120024941bfffc83070004801800007c0803a64e800021831b0000801800007c0803a64e8000213ae300004800011c3980000254a0f80140a20010800d00347c0803a64e8000217e05641141a3fff0560bf80140a20010800d00347c0803a64e8000212c100001408000084800003881f20028818ffffc558c09fc618e00017e0b7038556bf80140a20010800d00347c0803a64e8000217c107000408000084800001c967bfffc3c6002a0606395e0800d00287c0803a64e800021560c083a7d4f602e39ea000071eb00014082000c82ef000048000064967bfffc813200148109000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002138fd0004919d00003cc002a060c6c79c90c700083ca002a060a5c7ac90a70004808800009087000038670000800d00287c0803a64e800021967bfffc965bfffc963bfffc947bfffc3b7b000448000010967bfffc965bfffc963bfffc821b000481fb000081d00008398effff7deb70385560f80140a20010800d00347c0803a64e8000217d4c7c1141a3fff038970000386a000083100004833b0008801800007c0903a67f2803a63b7b000c4e80042082f8001482d7001882b60070973bfffc971bfffc947bfffc949bfffc94bbfffc8018000c941bfffc807b000083150000801800007c0803a64e8000212803000141820030827b0010825300148232001882110070807b000083100008801800007c0803a64e8000218283000448000040829b001082740014398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a9d0004919d00003e4002a86252fe849254000092740004823b0004398000025620f80140a20010800d00347c0803a64e8000217e0c8c1141a3fff0398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00009203000881fb000891e3000481db000c91c300003b140000833b0014801800007c0903a67f2803a63b7b00184e800420|@3267,1048575|140,3,@1155 220,3,@226 232,3,@227 320,3,@1155 680,3,@51 776,3,@226 788,3,@227 1100,3,@3266 3266:C2,104|7f2802a663390002973bfffc8078000482e3000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002a062b5eef092b600083ea002a062b5c7ac92b6000482b7000092b6000038760000800d00287c0803a64e800021|@270,1015809|56,3,@269 68,3,@227 3267:S77|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d636865636b466f724c6f6f70496e7374727328312970726576283329 3268:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@3252,1048575| 3269:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@3270,1048575| 3270:S77|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d636865636b466f724c6f6f70496e7374727328312970726576283129 3271:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@3256,1048575| 3272:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@3258,1048575| 3273:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@3274,1048575| 3274:S62|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d66696c74657241726773283129 3275:C2,1980|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8fffc82d7001c3980000256c0f80140a20010800d00347c0803a64e8000217eb6661541a3fff0829700003980000c3bbdffcc7c1df04040a00010800d001c7c0803a64e8000213a7d0004919d00003e4002a962520988925300008258ffe89253002c8238ff9092330028821400049213002481f8ff9891f3002081d8ffb091d3001c8154001891530018813400149133001492b30010811400089113000c80f4001c90f3000880d8ffe490d30004947bfffc947bfffc973bfffc971bfffc947bfffc38a0000138800081386000173f000000631841c8801800007c0803a64e80002138a0001590a30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021389d0004919d0000906400043860ffff906400003d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213b3d0004919d0000909900003b1b000c933800003afb000c3ac0000192d70004398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a5d0004919d0000823b000c9232000081fb001091f2000481db000480cefffc80a60000398000073bbdffe07c1df04040a00010800d001c7c0803a64e800021389d0004919d00003c6002a96063130c906400008326fff89324001892440014830500189304001082e5000492e4000c92a4000882c5000892c40004398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a3d0004919d00003c6002a9606316109071000092510004398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d00003ce002a960e716f090e3000080e5001090e3001092c3000c92430008824effb092430004811b0004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021393d0004919d00003d4002a9614a18c09149000090890004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021395d0004919d00003e8002a962941978928a0000926a0004398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a7d0004919d00003e0002a962101a289213000090730004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003e8002a962941ad492830000922300043d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213a3d0004919d00003a00000392110000829b00048214fffc81f00014280f000141820010947bfffc386000034800001082db0004947bfffc8076ffec82db000882f6fffc831b0008398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138dd0004919d00003f2002a963391b84932600008338ff9493260004825b0008398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002139dd0004919d000080f2ffe490ee000490ce000080db000880a6fffc398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a9d0004919d0000820500089214000491d4000081fb000881cffffc949bfffc809b0004949bfffc96bbfffc963bfffc947bfffc80770010947bfffc3aa0000196bbfffc969bfffc828e0004969bfffc38d3000038aa0000388900008068ffbc830e0000801800007c0803a64e800021827b000c947bfffc8253ffa83a2000012c1200014082000c3a110000480000cc81fb001038920000806fff983c0002a36000414c7c0803a64e8000212803000141820068398000025620f80140a20010800d00347c0803a64e8000217dd1661541a3fff0398000025640f80140a20010800d00347c0803a64e8000217d4c941141a3fff03a2e00003a4a0000800d00187c1b004040a00010800d00207c0803a64e8000214bffff6c398000025640f80140a20010800d00347c0803a64e8000217dcc941141a3fff03a4e0000800d00187c1b004040a00010800d00207c0803a64e8000214bffff2c81fb000c7e0b7838556bf80140a20010800d00347c0803a64e8000217c1078004081001c38700000831b0010833b00147f2803a63b7b00204bfffa1c81db0010814efffc812a00008109000880e8001880c7004480090014941bfffc80060004941bfffc807b00083b0a00003c0002a86000c6cc7c0803a64e80002180bb00188085fffc832400008319000882f8001882d7000482a4001c3980000256a0f80140a20010800d00347c0803a64e8000217e95661541a3fff03a630000398000083bbdffdc7c1df04040a00010800d001c7c0803a64e800021387d0004919d00003a4000019243001c3a20000192230018821600049203001481fb001491e3001039c0000191c3000c928300088145ffb89143000492630000831b0000801800007c0803a64e800021813b00188109fffc80e8000080c7000880a600188085001c3d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213b3d0004919d00003b00000193190000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002a962d61bdc92d7000082bb000c92b700043a830000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d000082640004926300109323000c9283000892e300043a40000192430000831b0004833b001c801800007c0903a67f2803a63b7b00284e800420|@3298,1048575|112,3,@3276 240,3,I11 480,3,@3282 568,3,@3284 620,3,@3286 696,3,@3288 748,3,@3290 800,3,@3292 852,3,@3294 1008,3,@3296 1272,3,@1155 1568,3,@3219 1864,3,@3297 3276:C2,1708|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0500014082056480a300002c050001408201d082f800103997ffff7c8bb8385560f80140a20010800d00347c0803a64e8000217ecc241141a3fff082b8000c8295001882740034398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00003a4000019243000c92c300083a200001922300043a00000192030000973bfffc971bfffc949bfffc80180014941bfffc83130004801800007c0803a64e80002181fb000881db0004814f0010398affff7dcb50385560f80140a20010800d00347c0803a64e8000217d2c741141a3fff0810f000c80e8001880c7003438a30000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d0000388000019083000c912300083b200001932300043b0000019303000094bbfffc83060004801800007c0803a64e80002182fb000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002a962b5105092b6000082970008929600043a630000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d000092630010825700049243000c823b00009223000892c300043a00000192030000831b0004833b0010801800007c0903a67f2803a63b7b00144e80042054abf80140a20010800d00347c0803a64e8000212c050001408100e03a7900003a5800003a240000388500008072001c3c0002a36000414c7c0803a64e800021706b00014082000c8203000048000064967bfffc8212000c81f0000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002139dd0004919d00003d4002a0614ac79c914e00083d2002a06129c7ac912e0004810f0000910e0000386e0000800d00287c0803a64e80002181f20010398fffff7e2b78385560f80140a20010800d00347c0803a64e8000217dcc8c1141a3fff038900000386e0000831200183b330000801800007c0903a67f2803a64e8004203980000254a0f80140a20010800d00347c0803a64e8000217ee5641141a3fff03a7900003a5800003a24000038970000807200203c0002a36000414c7c0803a64e80002128030001418200d8965bfffc3a13000039f1000081d20024386500003b1b00003c0002a9600010a87c0803a64e800021815b0000812a00103989ffff7deb48385560f80140a20010800d00347c0803a64e8000217d0c7c1141a3fff080ea000c80c7001880a6003438830000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00003b2000019323000c910300083b0000039303000490830000961bfffc95dbfffc83050004801800007c0803a64e800021831b0000833b0004801800007c0903a67f2803a63b7b000c4e8004203980000254a0f80140a20010800d00347c0803a64e8000217e05641141a3fff0560bf80140a20010800d00347c0803a64e8000212c100001408000084800003881f20028818ffffc558c09fc618e00017e0b7038556bf80140a20010800d00347c0803a64e8000217c107000408000084800001c967bfffc3c6002a0606395e0800d00287c0803a64e800021560c083a7d4f602e39ea000071eb00014082000c812f000048000064967bfffc8132000c8109000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002138fd0004919d00003cc002a060c6c79c90c700083ca002a060a5c7ac90a70004808800009087000038670000800d00287c0803a64e800021811200103988ffff7e2b40385560f80140a20010800d00347c0803a64e8000217cec8c1141a3fff03980000254e0f80140a20010800d00347c0803a64e8000217cc7661541a3fff03889000038660000831200183b330000801800007c0903a67f2803a64e80042082f8000c82d7001882b60070973bfffc971bfffc947bfffc949bfffc94bbfffc8018002c941bfffc807b000083150000801800007c0803a64e8000212803000141820030827b00108253000c8232001882110070807b000083100008801800007c0803a64e8000218283000448000040829b00108274000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a9d0004919d00003e4002a9625212309254000092740004823b0004398000025620f80140a20010800d00347c0803a64e8000217e0c8c1141a3fff0398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00009203000881fb000891e3000481db000c91c300003b140000833b0014801800007c0903a67f2803a63b7b00184e800420|@3281,1048575|392,3,@3277 560,3,@1155 640,3,@226 652,3,@227 812,3,@1155 860,3,@3278 1168,3,@51 1264,3,@226 1276,3,@227 1572,3,@3280 3277:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@270,1048575| 3278:C2,272|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e80002082f80000398000025460f80140a20010800d00347c0803a64e8000217ec3641141a3fff03a7900003a5800003a23000038960000807700203c0002a36000414c7c0803a64e8000212803000141820064398000025620f80140a20010800d00347c0803a64e8000217c71661541a3fff0967bfffc965bfffc3b1200004bffff55398000025460f80140a20010800d00347c0803a64e8000217c6c1c1141a3fff0809b00047c8803a63b7b00084e800020398000025620f80140a20010800d00347c0803a64e8000217c71661541a3fff03b1200003b3300007f2803a64bfffefc|@3279,1046531|104,3,@1155 3279:S84|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d636865636b52656375727369766543616c6c73283129676574506172616d4e6f283129 3280:C2,104|7f2802a663390002973bfffc8078000482e3000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002a062b5eef092b600083ea002a062b5c7ac92b6000482b7000092b6000038760000800d00287c0803a64e800021|@270,1015809|56,3,@269 68,3,@227 3281:S78|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d636865636b52656375727369766543616c6c7328312970726576283329 3282:C2,648|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c050001408201fc80a3000054abf80140a20010800d00347c0803a64e8000212c050001408101203a7900003a5800003a24000038850000807200143c0002a36000414c7c0803a64e8000212c030001408200ac821200083990ffff7e2b80385560f80140a20010800d00347c0803a64e8000217dec8c1141a3fff081d20004814e0018812a0034398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d0000390000019103000c91e3000838e0000390e3000490a30000967bfffc8012000c941bfffc83090004801800007c0803a64e800021831b0000833b0004801800007c0903a67f2803a63b7b00084e800420821200083990ffff7e2b80385560f80140a20010800d00347c0803a64e8000217dec8c1141a3fff080830000386f0000831200103b330000801800007c0903a67f2803a64e80042082f800083997ffff7c8bb8385560f80140a20010800d00347c0803a64e8000217ecc241141a3fff02c0500014082000c3aa00003480000083aa000016ab40002827800048253001882320034398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00003a0000019203000c92c300089283000490a30000973bfffc8018000c941bfffc83110004801800007c0803a64e800021831b0000833b0004801800007c0903a67f2803a63b7b00084e8004203980000254a0f80140a20010800d00347c0803a64e8000217eec2c1141a3fff03ac30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092e300089083000492c3000083180018801800007c0903a67f2803a64e800420|@3283,1048575|92,3,@1155 3283:S86|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d636865636b52656375727369766543616c6c732831296c6f63616c4e657741646472283329 3284:C2,104|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021398000013bbdfff87c1df04040a00010800d001c7c0803a64e8000213afd0004919d00009097000038b7000038830000807800043c0002a36000620c7c0903a67f2803a64e800420|@3285,1048079|84,3,@1198 3285:S83|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d636865636b52656375727369766543616c6c732831297365744e6577546162283229 3286:C2,348|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc947bfffc949bfffc3864000083180010801800007c0803a64e800021833b00088319000c82f8001882d70034947bfffc83160000801800007c0803a64e800021280300014182009882bb000c8295000c8274001882530034807b000083120008801800007c0803a64e80002182230000562bf80140a20010800d00347c0803a64e8000212c1100014181000848000050821b000c398000013bbdfff87c1df04040a00010800d001c7c0803a64e80002139fd0004919d000081db000491cf000038af000038910000807000083c0002a36000620c7c0803a64e80002182bb000c398000013bbdfff87c1df04040a00010800d001c7c0803a64e8000213a9d0004919d0000827b00049274000038b40000809b000880750004833b00103c0002a36000620c7c0903a67f2803a63b7b00144e800420|@3287,1048575|244,3,@1198 324,3,@1198 3287:S80|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d636865636b52656375727369766543616c6c73283129736574546162283229 3288:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@3289,1048575| 3289:S86|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d636865636b52656375727369766543616c6c732831296c6f63616c4e657741646472283129 3290:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@3291,1048575| 3291:S78|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d636865636b52656375727369766543616c6c7328312970726576283129 3292:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@3293,1048575| 3293:S80|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d636865636b52656375727369766543616c6c73283129736574546162283129 3294:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@3295,1048575| 3295:S83|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d636865636b52656375727369766543616c6c732831297365744e6577546162283129 3296:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@3274,1048575| 3297:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@3289,1048575| 3298:S71|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d636865636b52656375727369766543616c6c73283129 3299:S70|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d636865636b466f724c6f6f70496e73747273283129 3300:C2,752|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0400014082000c386000014e8000203a7900003a5800003a2300003a040000389000008072ff983c0002a36000414c7c0803a64e8000212803000140820038398000025600f80140a20010800d00347c0803a64e8000217c8c841141a3fff0387100003b1200003b3300007f2803a64bffff78560bf80140a20010800d00347c0803a64e8000212c100001408000084800003881f2ff90818ffffc558c09fc618e00017e0b7038556bf80140a20010800d00347c0803a64e8000217c107000408000084800001c967bfffc3c6002a0606395e0800d00287c0803a64e800021560c083a7d4f602e39ea000071eb00014082000c806f00004800006c967bfffc8132fffc8109000080e8000880c7000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002138bd0004919d00003c8002a06084c79c908500083c6002a06063c7ac90650004832600009325000038650000800d00287c0803a64e800021967bfffc965bfffc963bfffc961bfffc8312fffc3c0002a86000c6cc7c0803a64e800021813b0004280900014182000c39030000480000bc811b000880e8ff7880c8ffa83986ffff7ceb30385560f80140a20010800d00347c0803a64e8000217ca7661541a3fff0809b00003984ffff7cab20385560f80140a20010800d00347c0803a64e8000217f2c2c1141a3fff08308fffc82f8000082d7000882b600188295002c3a630000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003a40000192430008926300049323000083140004801800007c0803a64e80002139030000823b0000398000025620f80140a20010800d00347c0803a64e8000217e0c8c1141a3fff0951bfffc38900000807b0008831b000c4bfffd59398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002139fd0004919d0000906f000481db000091cf0000386f0000815b00107d4803a63b7b00144e800020|@3301,1048575|72,3,@1155 236,3,@51 340,3,@226 352,3,@227 408,3,@3219 3301:S60|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d6d616b6544656373283229 3302:C2,104|7f2802a663390002973bfffc8078000482e3000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002a062b5eef092b600083ea002a062b5c7ac92b6000482b7000092b6000038760000800d00287c0803a64e800021|@270,1015809|56,3,@269 68,3,@227 3303:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c8078ff884e800020973bfffc971bfffc80030000941bfffc806300044bffffbd398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b00009319000038790000833b00087f2803a63b7b000c4e800020|@468,786433| 3304:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c8078ff884e800020973bfffc971bfffc80030000941bfffc806300044bffffbd398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b00009319000038790000833b00087f2803a63b7b000c4e800020|@468,786433| 3305:C2,584|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c050001408201bc80a3000054abf80140a20010800d00347c0803a64e8000212c050001408100e03a7900003a5800003a24000038850000807200103c0002a36000414c7c0803a64e800021706b00014082000c8203000048000064967bfffc8212000c80b0000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021389d0004919d00003c6002a06063c79c906400083f2002a06339c7ac93240004830500009304000038640000800d00287c0803a64e80002180b200083985ffff7e2b28385560f80140a20010800d00347c0803a64e8000217c8c8c1141a3fff03864000038900000831200043b330000801800007c0903a67f2803a64e80042082f800083997ffff7c8bb8385560f80140a20010800d00347c0803a64e8000217ecc241141a3fff02c0500014082000c3aa00003480000083aa000016ab400028278000c8253001882320034398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00003a0000019203000c92c300089283000490a30000973bfffc80180014941bfffc83110004801800007c0803a64e800021831b0000833b0004801800007c0903a67f2803a63b7b00084e8004203980000254a0f80140a20010800d00347c0803a64e8000217eec2c1141a3fff03ac30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092e300089083000492c3000083180018801800007c0903a67f2803a64e800420|@3306,1048575|92,3,@1155 172,3,@226 184,3,@227 3306:S53|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d6973652832296c6f63616c4f6c6441646472283329 3307:C2,648|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c050001408201fc80a3000054abf80140a20010800d00347c0803a64e8000212c050001408101203a7900003a5800003a24000038850000807200143c0002a36000414c7c0803a64e8000212c030001408200ac821200083990ffff7e2b80385560f80140a20010800d00347c0803a64e8000217dec8c1141a3fff081d20004814e0018812a0034398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d0000390000019103000c91e3000838e0000390e3000490a30000967bfffc8012000c941bfffc83090004801800007c0803a64e800021831b0000833b0004801800007c0903a67f2803a63b7b00084e800420821200083990ffff7e2b80385560f80140a20010800d00347c0803a64e8000217dec8c1141a3fff080830000386f0000831200103b330000801800007c0903a67f2803a64e80042082f800083997ffff7c8bb8385560f80140a20010800d00347c0803a64e8000217ecc241141a3fff02c0500014082000c3aa00003480000083aa000016ab40002827800048253001882320034398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00003a0000019203000c92c300089283000490a30000973bfffc8018000c941bfffc83110004801800007c0803a64e800021831b0000833b0004801800007c0903a67f2803a63b7b00084e8004203980000254a0f80140a20010800d00347c0803a64e8000217eec2c1141a3fff03ac30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092e300089083000492c3000083180018801800007c0903a67f2803a64e800420|@3308,1048575|92,3,@1155 3308:S53|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d6973652832296c6f63616c4e657741646472283329 3309:C2,104|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021398000013bbdfff87c1df04040a00010800d001c7c0803a64e8000213afd0004919d00009097000038b7000038830000807800043c0002a36000620c7c0903a67f2803a64e800420|@3310,1048079|84,3,@1198 3310:S50|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d6973652832297365744e6577546162283229 3311:C2,348|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc947bfffc949bfffc3864000083180010801800007c0803a64e800021833b00088319000c82f8001882d70034947bfffc83160000801800007c0803a64e800021280300014182009882bb000c8295000c8274001882530034807b000083120008801800007c0803a64e80002182230000562bf80140a20010800d00347c0803a64e8000212c1100014181000848000050821b000c398000013bbdfff87c1df04040a00010800d001c7c0803a64e80002139fd0004919d000081db000491cf000038af000038910000807000083c0002a36000620c7c0803a64e80002182bb000c398000013bbdfff87c1df04040a00010800d001c7c0803a64e8000213a9d0004919d0000827b00049274000038b40000809b000880750004833b00103c0002a36000620c7c0903a67f2803a63b7b00144e800420|@3312,1048575|244,3,@1198 324,3,@1198 3312:S47|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229736574546162283229 3313:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@3314,1048575| 3314:S53|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d6973652832296c6f63616c4e657741646472283129 3315:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@3316,1048575| 3316:S53|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d6973652832296c6f63616c4f6c6441646472283129 3317:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@3318,1048575| 3318:S47|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229736574546162283129 3319:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@3320,1048575| 3320:S50|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d6973652832297365744e6577546162283129 3321:C2,472|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000c3997ffff7c8bb8385560f80140a20010800d00347c0803a64e8000217ecc241141a3fff0808300083996ffff7c8bb0385560f80140a20010800d00347c0803a64e8000217eac241141a3fff080030004941bfffc96bbfffc80030000941bfffc971bfffc82d8000482960000973bfffc2c1400014082000c3a6000014800005c80140004941bfffc807400003b1b00143c0002a960002e307c0803a64e800021280300014182000c3a60000348000028829b00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffffa03b7b0004281300014182001838600001825b00007e4803a63b7b00144e800020825b0004823200088211001881f00034398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d000039c0000191c3000c815b000c91430008813b001091230004811b00089103000080120004941bfffc830f0004801800007c0803a64e80002180fb000880c7000480a60000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021389d0004919d000090a4000490640000807b00009083000038600001833b00047f2803a63b7b00184e800020|@3325,1048575|180,3,@3322 3322:C2,404|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8fff482d7000882b6001882950034973bfffc971bfffc947bfffc83140000801800007c0803a64e80002128030001418200e0827b00048253fff4823200088211001881f00034807b0000830f0008801800007c0803a64e80002181db0004814efff8812300007d4b4b78556bf80140a20010800d00347c0803a64e8000217c0a480040820078810efffc80e300087d0b3b78556bf80140a20010800d00347c0803a64e8000217c0838004082003c80ce000080a300047c0628404082001838600003809b00087c8803a63b7b000c4e80002038600001809b00087c8803a63b7b000c4e8000203860000180db00087cc803a63b7b000c4e80002038600001811b00087d0803a63b7b000c4e800020827b00048253fff4823200088211000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002139fd0004919d00003dc002a961ce2fe091cf00083d4002a0614ac7ac914f000481300000912f0000386f0000800d00287c0803a64e800021|@3324,1048575|356,3,@3323 368,3,@227 3323:S25|66696e644e6f6e4c6f63616c3a206e6f742045787472616374 3324:S67|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d6973652832296164644e6f6e4c6f63616c28322966696e644e6f6e4c6f63616c283129 3325:S52|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d6973652832296164644e6f6e4c6f63616c283229 3326:C2,432|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000213ae30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00009083000890a3000492e30000973bfffc971bfffc949bfffc94bbfffc80170004941bfffc80180010941bfffc8318000c801800007c0803a64e800021831b0000801800007c0803a64e80002182db001082b600088295001882740034947bfffc83130000801800007c0803a64e80002128030001418200e0825b0014823200088211001881f00034807b0000830f0008801800007c0803a64e80002181c300002c0e000140820084814300042c0a00014082004c813b00102c09000140820014811b000828080001418200084800001c811b0014809b000c83080004801800007c0803a64e800021807b000080fb00187ce803a63b7b001c4e800020813b0014809b000c83090004801800007c0803a64e800021807b0000811b00187d0803a63b7b001c4e800020815b0014809b000c830a0004801800007c0803a64e800021807b0000813b00187d2803a63b7b001c4e800020807b0000825b00187e4803a63b7b001c4e800020|@3327,1048575| 3327:S55|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636865636b526563757273696f6e283329 3328:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@3329,1048575| 3329:S55|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636865636b526563757273696f6e283129 3330:C2,16|80b8000438800003908500004e800020|@3331,786439| 3331:S51|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d69736528322966696c74657241726773283329 3332:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c8078fff04e800020973bfffc971bfffc80030000941bfffc806300044bffffbd398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b00009319000038790000833b00087f2803a63b7b000c4e800020|@468,786433| 3333:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@3334,1048575| 3334:S51|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d69736528322966696c74657241726773283129 3335:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c8078ffdc4e800020973bfffc971bfffc80030000941bfffc806300044bffffbd398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b00009319000038790000833b00087f2803a63b7b000c4e800020|@468,786433| 3336:C2,168|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e800020973bfffc971bfffc80030004941bfffc806300003c0002a9600036407c0803a64e800021947bfffc807b0004831b00084bffffa1398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b0000931900003879000082fb000c7ee803a63b7b00104e800020|@234,1048575|68,3,@3337 3337:C2,676|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8fffc82d7000082b60008829500188274002c973bfffc971bfffc947bfffc83130000801800007c0803a64e80002128030001418201e8825b00048232fffc8211000081f0000881cf0018814e002c807b0000830a0008801800007c0803a64e80002180030000941bfffc3880000180630004813b00088309fffc3c0002a860006dc47c0803a64e800021811b000880e8fffc80c7001880a600003980000254a0f80140a20010800d00347c0803a64e8000217c85661541a3fff090860000832700008319000882f8001882d700343aa30000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00003a8000019283000c3a600001926300083a4000039243000490a3000096bbfffc94bbfffc80190004941bfffc83160004801800007c0803a64e800021831b0000801800007c0803a64e800021823b00148211fffc39e30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000091e3000481db000c91c300008310fff0801800007c0803a64e800021807b0008815b0014830afffc3c0002a86000c6cc7c0803a64e800021813b00148109fffc80e8000080c7000880a600188085002c3b230000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003b000001930300089323000482fb000492e3000083040004833b0018801800007c0903a67f2803a63b7b001c4e800420825b00048232fffc8211000081f0000881cf000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021395d0004919d00003d2002a961293900912a00083d0002a06108c7ac910a000480ee000090ea0000386a0000800d00287c0803a64e800021|@3339,1048575|156,3,@3218 444,3,@3219 628,3,@3338 640,3,@227 3338:S19|6465636c4172673a206e6f74204465636c6172 3339:S48|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d6973652832296465636c417267283129 3340:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@3334,1048575| 3341:S26|4c6f6f703a206d69736d61746368656420426567696e4c6f6f70 3342:C2,200|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e800020973bfffc971bfffc80030004941bfffc38800001806300008318fffc3c0002a860006dc47c0803a64e800021833b00048319fffc3c0002a86000c6cc7c0803a64e800021947bfffc807b0004831b00084bffff81398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b1d0004919d00009078000482fb000092f800003878000082db000c7ec803a63b7b00104e800020|@234,1048575|76,3,@3218 100,3,@3219 3343:S30|4c6f6f703a206e6f74206174207461696c206f6620426567696e4c6f6f70 3344:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@270,1048575| 3345:C2,1336|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8fffc82d70000973bfffc971bfffc947bfffc949bfffc94bbfffc94dbfffc8078ffe48316000c801800007c0803a64e80002182bb00108295fffc82740000947bfffc8075ffe08313000c801800007c0803a64e800021947bfffc80bb0010809b0004807b00083b1b001c3c0002a9600040887c0803a64e800021947bfffc80bb0010809b0004807b00283b1b00203c0002a9600040887c0803a64e800021825b001c8232fffc8211001881f0000081db0024398effff7deb70385560f80140a20010800d00347c0803a64e8000217d4f661541a3fff09150000081310000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021391d0004919d00003ce002a960e7474c90e8000091e8001080db001890c8000c80a9004490a800088089000890880004947bfffc95fbfffc38880000386e00003c0002a9600048f87c0803a64e800021833b00248319fffc82f80000398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002a962b54b4892b60000829b0000929600088277000892760004947bfffc38960000807b00303c0002a9600048f87c0803a64e800021825b00288232fffc82110000398000053bbdffe87c1df04040a00010800d001c7c0803a64e80002139fd0004919d00003dc002a961ce4c5c91cf000081500004914f001081300008912f000c8111001c910f000880f0001890ef000480c9001880a60068808600343b230000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00003b0000019303000c3ae0000192e300083ac0000392c3000482bb002492a30000973bfffc95fbfffc80100014941bfffc80050004941bfffc83040004801800007c0803a64e8000213a830000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000827b00409263000492830000831b0000801800007c0803a64e800021825b00388232fffc8211000081f0000881cf0018814e0060947bfffc807b0010830a0004801800007c0803a64e800021813b003c8109fffc80e8000080c7000880a6001880850028947bfffc807b004883040004801800007c0803a64e800021833b00408319fffc82f8000082d7000882b600188295002c3a630000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003a4000019243000892630004823b003c9223000083140004801800007c0803a64e800021821b004081f0fffc81cf000039430000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000813b002091230008811b00249103000480f0ffe890e30000955bfffc830e003c801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138dd0004919d000080bb001c90a6000490660000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021389d0004919d000090c40004807b0000906400003d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213b3d0004919d00003b00000193190000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002a962d64d7092d7000082bb001492b70004398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d0000829b0004928300109323000c827b00089263000892e3000490830000831b0010833b0048801800007c0903a67f2803a63b7b00544e800420|@3362,1048575|140,3,@3346 176,3,@3346 292,3,@3352 348,3,@3354 412,3,@3356 452,3,@3354 516,3,@3358 1224,3,@3360 3346:C2,480|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002170ab00014082005882f8fffc82d7fffc82b60000973bfffc971bfffc80150048941bfffc3a84000080850000387400003c0002a9600042847c0803a64e800021831b0000833b0008801800007c0903a67f2803a63b7b000c4e80042082f8fffc82d7fffc82b600008295000882740018825300343a230000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00003a0000019203000c39e0000191e3000839c0000391c300048158fff891430000973bfffc971bfffc963bfffc949bfffc80150048941bfffc83120004801800007c0803a64e800021813b000c8109fffc80e8fffc80c7000080a600088085001883240060947bfffc807b000c83190004801800007c0803a64e800021831b001082f8fffc82d7fffc82b6000080b8000438830000807b00008315004c801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a9d0004919d00003a60000192740004907400002c1400014082000c807b000848000024969bfffc807b000c3b1b00183c0002a9600046547c0803a64e8000213b7b0004831b0004833b0014801800007c0903a67f2803a63b7b00184e800420|@3351,1048575|80,3,@3347 432,3,@3350 3347:C2,836|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c03000140820070973bfffc8098fffc8064fffc82e3000082d7000882b6000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a9d0004919d00003e6002a9627345e4927400083e6002a06273c7ac92740004827500009274000038740000800d00287c0803a64e80002182f8fffc82d7fffc82b6000082950008827400188253002c973bfffc971bfffc947bfffc949bfffc80030000941bfffc807b000083120000801800007c0803a64e8000212803000141820210823b000c8211fffc81f0fffc81cf0000814e0008812a00188109002c807b000083080008801800007c0803a64e80002180fb000880c3000080bb00047ccb2b78556bf80140a20010800d00347c0803a64e8000217c06280040820160809b000c8324fff87ccbcb78556bf80140a20010800d00347c0803a64e8000217c06c8004082001880670004831b00107f0803a63b7b00144e8000208304fffc82f8fffc82d7000082b600088295001882740034398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00003a4000019243000c3a200001922300083a000003920300049323000094dbfffc80070004941bfffc83130004801800007c0803a64e80002181fb001481cffffc814efffc812a00008109000880e8001880c7002c38a30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000388000019083000890a30004833b00049323000083060004801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b1d0004919d000082fb000092f80004907800003878000082db00187ec803a63b7b001c4e8000203885000080670004831b000c4bfffd5d398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021389d0004919d000090640004807b00009064000038640000833b00107f2803a63b7b00144e800020823b0008809b000480710004831b000c4bfffd05398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a1d0004919d00009070000481fb000091f000003870000081db00107dc803a63b7b00144e800020|@3349,1048575|100,3,@3348 112,3,@227 3348:S19|7265706c616365436f6e7461696e6572446563 3349:S76|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f6d62696e655475706c65732836297265706c616365436f6e7461696e6572446563283229 3350:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c8078ffe84e800020973bfffc971bfffc80030000941bfffc806300044bffffbd398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b00009319000038790000833b00087f2803a63b7b000c4e800020|@468,786433| 3351:S69|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f6d62696e655475706c65732836296372656174654272616e6368283329 3352:C2,320|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f800103997ffff7c6bb8385560f80140a20010800d00347c0803a64e8000217ec3661541a3fff082b8000482950018827400343a430000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00003a2000019223000c3a0000019203000839e0000391e3000481d8000c91c30000973bfffc971bfffc965bfffc96dbfffc83130004801800007c0803a64e800021815b000838830000807b0004830a0008801800007c0803a64e800021813b00088109000480e8001880c7002c38a30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000388000019083000890a30004833b00009323000083060004833b000c801800007c0903a67f2803a63b7b00104e800420|@3353,1048575| 3353:S69|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f6d62696e655475706c65732836297370656369616c446563732d283129 3354:C2,540|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021546bf80140a20010800d00347c0803a64e8000212c03000140800020973bfffc3ae300003c6002a06063a344800d00287c0803a64e800021398000025460f80140a20010800d00347c0803a64e8000217f03661541a3fff03ad900003aa300003a84000038a0000138800081387800003f000000631841c8801800007c0803a64e80002192a300003b03000096dbfffc96bbfffc969bfffc971bfffc38a00001809b00087c8b2838556bf80140a20010800d00347c0803a64e8000217c042800418100084800008c94bbfffc38650000831b0008801800007c0803a64e800021833b0000398000025720f80140a20010800d00347c0803a64e8000217f19661541a3fff082fb0004570b083a7c77592e398000025720f80140a20010800d00347c0803a64e8000217cb9661541a3fff03b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffff54807b0000832300003b0000012c190001408200183878000082fb000c7ee803a63b7b00104e8000203af9fffe3ad9fffe3980000256c0f80140a20010800d00347c0803a64e8000217eb6661541a3fff0829b000056ac083a7e74602e398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a5d0004919d000093120004927200003b3700003b120000800d00187c1b004040a00010800d00207c0803a64e8000214bffff64|@3355,1048575|68,3,@78 144,3,I11 3355:S16|4c6973742e746162756c617465283229 3356:C2,168|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f800083997ffff7c6bb8385560f80140a20010800d00347c0803a64e8000217ec3661541a3fff082b800048295001882740034398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00003a4000019243000c3a200001922300083a0000039203000492c3000083130004801800007c0903a67f2803a64e800420|@3357,1048575| 3357:S72|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f6d62696e655475706c65732836297370656369616c456e74726965732d283129 3358:C2,180|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000c82d7001882b60034973bfffc971bfffc949bfffc80180010941bfffc83150004801800007c0803a64e800021831b0000801800007c0803a64e800021829b0008827b0004825400083992ffff7e6b90385560f80140a20010800d00347c0803a64e8000217e2c9c1141a3fff0388300003871000083140004833b000c801800007c0903a67f2803a63b7b00104e800420|@3359,1048575| 3359:S60|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f6d62696e655475706c6573283629656e76283329 3360:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@3361,1048575| 3361:S60|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f6d62696e655475706c6573283629656e76283129 3362:S54|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f6d62696e655475706c6573283629 3363:C2,1344|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021971bfffc2c0300014082004882f8fffc82d70000973bfffc80160004941bfffc386000018316002c801800007c0803a64e800021831b0000833b0004801800007c0903a67f2803a63b7b000c4e80042082f8fffc82d7000082b60008829500188274002c973bfffc947bfffc80030000941bfffc807b000083130000801800007c0803a64e8000212803000141820064825b000c8232fffc8211000081f0000881cf0018814e002c807b0000830a0008801800007c0803a64e800021813b000480a3000080830004806900043b1b000c3c0002a9600053a87c0803a64e800021811b00087d0803a63b7b00104e800020825b000c8232fffc8211000081f0000881cf0018814e0054807b0000830a0000801800007c0803a64e8000212803000141820060813b000c8109fffc80e8000080c7000880a6001880850054807b000083040008801800007c0803a64e800021833b000438830000807900043b1b000c3c0002a9600058dc7c0803a64e800021831b00087f0803a63b7b00104e800020813b0004810900042c0800014082003080fb000c8087fff4807b00008307fffc833b00083c0002a860006dc47c0903a67f2803a63b7b00104e800420951bfffc38800001807b000480fb00108307fffc3c0002a860006dc47c0803a64e800021947bfffc807b0004831b00144bfffdf580db001480a6fffc80850000947bfffc80040014941bfffc83040010801800007c0803a64e800021833b001c8319fffc82f8000082d7000882b6001882950070947bfffc807b000883140000801800007c0803a64e8000212803000141820038825b00208232fffc8211000081f0000881cf0018814e0070807b0008830a0008801800007c0803a64e8000218263001048000020827b00208253fffc823200008211000881f0001881cf001c826e0004815b0020812afffc8109000080e8000880c7001880a60070967bfffc807b000c83050000801800007c0803a64e8000212803000141820038807b00248323fffc8319000082f8000882d7001882b60070807b000c83150008801800007c0803a64e8000218083000448000048809b00248064fffc83230000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021389d0004919d00003f0002a96318884c9304000082f9000892e4000482db002482b6fffc82950000949bfffc807b00148314000c801800007c0803a64e800021827b00288253fffc82320000947bfffc807b001883110010801800007c0803a64e800021821b002c81f0fffc81cf0000947bfffc807b0018830e000c801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021395d0004919d0000906a0004813b0000912a00002c0a00014082000c811b000448000028955bfffc807b00083b1b00343c0002a9600088d07c0803a64e800021390300003b7b000480fb003080c7fffc80a60000808500088064001883230070951bfffc807b001c83190000801800007c0803a64e800021280300014182003882fb003482d7fffc82b60000829500088274001882530070807b001c83120008801800007c0803a64e8000218303000c480000343d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213b1d0004919d00003ae0000192f80000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d000082db001092c300109303000c82bb001492a30008829b000c92830004827b000092630000831b0018833b0030801800007c0903a67f2803a63b7b00384e800420|@3396,1048575|240,3,@3364 384,3,@3368 452,3,@3218 496,3,@3218 860,3,@3394 1064,3,@3395 3364:C2,936|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000082d7fffc973bfffc971bfffc947bfffc94bbfffc8016fff0941bfffc3aa4000038800001387500003b1600003c0002a860006dc47c0803a64e80002138c0000380bb000438830000807b0000829b000c827400008313fffc3c0002a86000d4047c0803a64e800021947bfffc807b000c825b0010831200003c0002a960004e4c7c0803a64e800021823b00002c11000140820014821b00147e0803a63b7b00184e800020821b001081f0000081cffffc814e0000947bfffc800a0014941bfffc830a0010801800007c0803a64e800021813b00188109000080e8fffc80c7000080a600088085001883240070947bfffc807b000883190000801800007c0803a64e800021280300014182003c82fb001c82d7000082b6fffc82950000827400088253001882320070807b000883110008801800007c0803a64e8000218303001048000024831b001c82f8000082d7fffc82b6000082950008827400188253001c83120004823b001c8211000081f0fffc81cf0000814e0008812a001881090070971bfffc807b000c83080000801800007c0803a64e800021280300014182003c80db002080a600008085fffc80640000832300088319001882f80070807b000c83170008801800007c0803a64e80002180e300044800004c80fb002080c7000080a6fffc80850000398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138fd0004919d00003c6002a96063576c906700008324000893270004831b002082f8000082d7fffc82b6000094fbfffc807b00108315000c801800007c0803a64e8000212c0300014082000c829b001448000028947bfffc807b00183b1b002c3c0002a9600057f07c0803a64e8000213a8300003b7b0004827b0024825300008232fffc8211000081f0000881cf0018814e0070969bfffc807b0014830a0000801800007c0803a64e800021280300014182003c811b002880e8000080c7fffc80a60000808500088064001883230070807b001483190008801800007c0803a64e8000218123000c480000343d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e800021393d0004919d00003900000191090000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d000080fb000890e300109123000c80db000c90c3000880bb000490a30004809b000090830000831b0010833b002c801800007c0903a67f2803a63b7b00304e800420|@3367,1048575|80,3,@3218 124,3,@3231 156,3,@3363 560,3,@3365 648,3,@3366 3365:C2,104|7f2802a663390002973bfffc8078000482e3000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002a062b5eef092b600083ea002a062b5c7ac92b6000482b7000092b6000038760000800d00287c0803a64e800021|@270,1015809|56,3,@269 68,3,@227 3366:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c8078ffd44e800020973bfffc971bfffc80030000941bfffc806300044bffffbd398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b00009319000038790000833b00087f2803a63b7b000c4e800020|@468,786433| 3367:S59|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70794465636c61726174696f6e732831292f32 3368:C2,2636|7f2802a66339000239600054800d00187d6bd8107c0b004040a00010800d00247c0803a64e800021971bfffc973bfffc947bfffc3ee002a162f7f6582c0400014082000c3ad700004800005480040004941bfffc82a4000038970000387500003b1b000c3c0002a9600063447c0803a64e8000213ae30000809b00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffffa482bb0008829500008274fffc825300188232000080160000941bfffc80160004941bfffc963bfffc807b00043b1b00143c0002a9600066847c0803a64e800021821b001481f0000081cffffc814e0018812a0000947bfffc953bfffc811b00102c0800014082000c38e000014800018c80db001c80a600008085fffc80640000832300088319001882f8002c80080000941bfffc80080004941bfffc807b000483170000801800007c0803a64e80002128030001418200b482db002482b600008295fffc8274000082530008823200188211002c807b000483100008801800007c0803a64e80002181fb002481cf0000814efffc80030000941bfffc800afff0941bfffc38800001806300043b0a00003c0002a860006dc47c0803a64e80002139230000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000091230004811b000491030000831b0000801800007c0803a64e8000214800007082db002482b600008295fffc82740000825300088232000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a1d0004919d00003de002a961ef694491f000083dc002a061cec7ac91d00004815100009150000038700000800d00287c0803a64e800021811b00083b7b0010800d00187c1b004040a00010800d00207c0803a64e8000214bfffe6c3d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e80002138dd0004919d000038a0000190a60000809b001c806400008323fffc83190000398000053bbdffe87c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002a962d6696492d7000082b8000892b70010829b00089297000c827b00009277000890d7000496fbfffc94dbfffc386000013b1b00243c0002a960006b4c7c0803a64e800021947bfffc3a4000032c0300014082000c3a32000048000130821b002881f0000081cffffc814e0000812a00088109001880e8002c965bfffc80030000941bfffc80030004941bfffc807b000483070000801800007c0803a64e80002128030001418200b480bb0034808500008064fffc832300008319000882f8001882d7002c807b000483160008801800007c0803a64e80002182bb0034829500008274fffc82530000823200088211001881f0002480030004941bfffc807b0000830f0000801800007c0803a64e800021280300014182003c81db0038814e0000812afffc8109000080e8000880c7001880a60024807b000083050008801800007c0803a64e80002180db000c4800001438c000014800000c38c00001947bfffc3a460000807b00043b7b0010800d00187c1b004040a00010800d00207c0803a64e8000214bfffec8821b000481f00000280f0001418200084800001028110001408200084800000c81db0000480001d4807b00003b1b00283c0002a960007d5c7c0803a64e80002181db0028814e0000812afffc81090000947bfffc8008002c941bfffc807b000883080050801800007c0803a64e80002180fb003080c7000080a6fffc80850000947bfffc807b000883040058801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d00003b0000019319000490790000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00009323000482fb000092e30000831b0004801800007c0803a64e80002182db003482b600008295fffc83140010801800007c0803a64e800021947bfffc827b0028825b00203e2002a16231f658726b0001408200b0724b0001408200a0947bfffc947bfffc80130004941bfffc80120004941bfffc38db000838b1000080920000807300003b1b00483c0002a960007f887c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002139fd0004919d000081db000891cf0000815b000c914f00043a2f0000825b0000827b00043b7b0010800d00187c1b004040a00010800d00207c0803a64e8000214bffff583a110000480000083a11000081d000043b7b001095dbfffc807b0024821b002c831000003c0002a960004e4c7c0803a64e80002181db00002c0e00014082000c39e00001480000b0947bfffc947bfffc814e00042c0a000140820020393b0000810e00009109000038fb000038c0000190c7000448000044813b00348109000080e8fffc80c70000947bfffc386e000083060050801800007c0803a64e80002138bb000490650000389b0004386000019064000448000008947bfffc398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002139fd0004919d000080bb000490af0000809b0008908f000448000010947bfffc947bfffc947bfffc815b0038812a00008109fffc80e8000095fbfffc80070014941bfffc807b000883070010801800007c0803a64e80002180db004080a600008085fffc832400008319000882f8001882d70070947bfffc807b000c83160000801800007c0803a64e800021280300014182003c829b0044827400008253fffc823200008211000881f0001881cf0070807b000c830e0008801800007c0803a64e80002182a300104800002482bb0044829500008274fffc82530000823200088211001881f0001c82af000481db0044814e0000812afffc8109000080e8000880c7001880a6007096bbfffc807b001083050000801800007c0803a64e800021280300014182003c807b0048832300008319fffc82f8000082d7000882b6001882950070807b001083140008801800007c0803a64e800021808300044800004c809b0048806400008323fffc83190000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021389d0004919d00003ee002a962f786dc92e4000082d8000892c4000482bb0048829500008274fffc82530000949bfffc807b00148312000c801800007c0803a64e8000212c0300014082000c823b001048000028947bfffc807b00143b1b00503c0002a9600087607c0803a64e8000213a2300003b7b0004821b004c81f0000081cffffc814e0000812a00088109001880e80070963bfffc807b001883070000801800007c0803a64e800021280300014182003c80bb0050808500008064fffc832300008319000882f8001882d70070807b001883160008801800007c0803a64e80002180c3000c480000343d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e80002138dd0004919d000038a0000190a60000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d0000809b00089083001090c3000c833b000c93230008831b00049303000482fb000092e30000831b0010833b004c801800007c0903a67f2803a63b7b00544e800420|@3393,1048575|52,3,@711 100,3,@3369 204,3,@3371 428,3,@3218 576,3,@3372 588,3,@227 760,3,@3373 816,3,@3375 1204,3,@3385 1460,3,@711 1528,3,@3387 1676,3,@3363 2260,3,@3391 2348,3,@3392 3369:C2,724|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc947bfffc82f8000082d7000082b6fffc8295000082740008825300188232002c973bfffc971bfffc947bfffc80040000941bfffc80040004941bfffc83110000801800007c0803a64e80002128030001418201d0821b000c81f0000081cf0000814efffc812a00008109000880e8001880c7002c807b000883060008801800007c0803a64e80002180bb000c80850000832400008319fffc82f8000082d7000882b600188295004480030004941bfffc807b000083140000801800007c0803a64e800021280300014182010c827b001082530000823200008211fffc81f0000081cf0008814e0018812a0044807b000083090008801800007c0803a64e800021811b001080e8000080c7000080a6fffc80850000832400088319001882f800008063001483170000801800007c0803a64e8000212803000141820050398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213add0004919d000082bb000892b60004829b000c929600003a7b001892d300003a5b0018823b000492320004480000e8398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213add0004919d000082bb000492b60004829b000c929600003a7b0018825b0008925300003a3b001892d100044800009c398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a7d0004919d0000825b000492530004823b000c923300003a1b001881fb000891f0000039db0018926e000448000050398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a1d0004919d000081fb000091f0000481db000891d00000395b0014813b0004912a0000391b001492080004947bfffc398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080fb001890e3000080db001c90c3000480bb00147ca803a63b7b00204e800020|@3370,1048575| 3370:S70|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70794465636c61726174696f6e732831293c7061747465726e3e2d283229 3371:C2,676|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e80002082f8000082d7000082b6fffc8295000082740008825300188232002c973bfffc971bfffc80030000941bfffc80030004941bfffc807b000483110000801800007c0803a64e800021280300014182016481fb000881cf0000814e0000812afffc8109000080e8000880c7001880a6002c807b000483050008801800007c0803a64e800021809b0008832400008319000082f8fffc82d7001882b600008297000082740008825300188232003482030000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d000039e0000191e3000c39c0000191c30008394000039143000492a30000961bfffc96bbfffc8017fff0941bfffc80140004941bfffc83110004801800007c0803a64e800021831b0000801800007c0803a64e80002139230000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000091230004811b000c91030000831b0004801800007c0803a64e80002180fb001880c7000080a600008085fffc8064001883230000398000025720f80140a20010800d00347c0803a64e8000217f19661541a3fff093030000821b000848000074821b000881f0000081cf0000814efffc812a00008109000880e8000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002138dd0004919d00003ca002a960a5694490a600083c8002a06084c7ac90860004806700009066000038660000800d00287c0803a64e800021961bfffc807b00143b0700004bfffda5398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213afd0004919d00009077000482db000092d700003877000082bb00207ea803a63b7b00244e800020|@234,1048575|544,3,@3372 556,3,@227 3372:S22|6d757475616c446563733a206e6f74204465636c6172 3373:C2,380|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8001082d7001882b60034973bfffc971bfffc947bfffc83150000801800007c0803a64e800021280300014182010c829b0004827400108253001882320034807b000083110008801800007c0803a64e800021820300042c100003408200b881e300082c0f00014082008881db000481430000812e000c7d4b4838556bf80140a20010800d00347c0803a64e8000217c0a48004180003c810e00087d4b4038556bf80140a20010800d00347c0803a64e8000217c0a4000408000183860000180fb00087ce803a63b7b000c4e800020810e000438e0000390e800003860000180db00087cc803a63b7b000c4e80002081db0004814e000439200003912a000038600001811b00087d0803a63b7b000c4e80002081fb000481cf000439400003914e000038600001813b00087d2803a63b7b000c4e800020829b0004827400043a4000039253000038600001823b00087e2803a63b7b000c4e800020|@3374,1048575| 3374:S72|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70794465636c61726174696f6e73283129636865636b436c6f73757265283129 3375:C2,124|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021971bfffc973bfffc8098ffe88078fff03b1b00043c0002a960006be47c0803a64e80002183230004281900014182001c38600001831b0004833b00007f2803a63b7b00084bffffa480630000831b00007f0803a63b7b00084e800020|@3384,1048575|52,3,@3376 3376:C2,224|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021706b0001408200b0708b00014082009c973bfffc971bfffc80030000941bfffc80040000941bfffc80840004806300044bffffb1947bfffc947bfffc38db000038a30000809b0008807b000c833b0010831900003c0002a960006ce07c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000831b00009303000082fb000492e3000482db00147ec803a63b7b00184e8000203c6002a16063f6584e8000203c6002a16063f6584e800020|@3383,1048575|116,3,@3377 200,3,@711 212,3,@711 3377:C2,3756|7f2802a66339000239600068800d00187d6bd8107c0b004040a00010800d00247c0803a64e80002182f8000082d7000082b6fffc8295000082740008825300188232002c973bfffc971bfffc947bfffc949bfffc94bbfffc94dbfffc83110000801800007c0803a64e8000212803000141820dcc821b001081f0000081cf0000814efffc812a00008109000880e8001880c7002c807b000c83060008801800007c0803a64e80002180bb0004809b0010832400008319000082f8fffc398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213add0004919d00003aa0000192b6000c3a800001929600083a60000392760004824300009256000082230004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003a0000019203000881f7001c91e3000492c30000965bfffc963bfffc80050000941bfffc80050004941bfffc8317fff4801800007c0803a64e80002181db0020814e0000812a00008109fffc80e80000947bfffc83070010801800007c0803a64e80002180db002480a60000808500008324fffc8319000082f8000882d7001882b60024947bfffc83150000801800007c0803a64e80002128030001418200f8829b002882740000825300008232fffc8211000081f0000881cf0018814e0024807b0000830a0008801800007c0803a64e800021813b00288109000080e8000080c7fffc80a6000080850008806400188323002c398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003b0000019303000882fb000092e3000482db002092c3000083190004801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d0000829b000c9295000490750000827b001892b30000825b00089253000438600001823b002c7e2803a63b7b00304e800020829b002882740000825300008232fffc8211000081f0000881cf0018814e003480100004941bfffc3c6002a960637ba8830a0004801800007c0803a64e800021831b0000801800007c0803a64e800021813b002c8109000080e8000080c7fffc38a30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000090a30004809b00189083000094bbfffc8306fff0801800007c0803a64e800021807b0030832300008319000082f8fffc398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082db000092c3000482bb002892a3000083170020801800007c0803a64e80002138800001807b0018829b003082740000825300008312fffc3c0002a860006dc47c0803a64e800021823b00308211000081f0000081cffffc814e0000947bfffc830a0010801800007c0803a64e800021813b00348109000080e8000080c7fffc80a60000808500088324001883190070947bfffc807b000483180000801800007c0803a64e800021280300014182004082db003882b60000829500008274fffc82530000823200088211001881f00070807b0004830f0008801800007c0803a64e80002182e300104800002882fb003882d7000082b600008295fffc8274000082530008823200188211001c82f0000481fb003881cf0000814e0000812afffc8109000080e8000880c7001880a6002496fbfffc807b000483050000801800007c0803a64e8000212803000141820040807b003c832300008319000082f8fffc82d7000082b600088295001882740024807b000483130008801800007c0803a64e800021388000034800000838800001807b003c832300008319000082f8fffc82d7000082b600088295001882740024949bfffc807b000883130000801800007c0803a64e8000212803000141820040823b00408211000081f0000081cffffc814e0000812a00088109001880e80024807b000883070008801800007c0803a64e800021825b0008480001c0825b0040823200008211000081f0fffc81cf0000814e0008812a001881090044807b000883080000801800007c0803a64e800021280300014182011080fb004080c7000080a600008085fffc80640000832300088319001882f80044807b000883170008801800007c0803a64e80002182db00408016ffe0941bfffc82a3000c2c150001408200084800004480150004941bfffc80750000831b0004801800007c0803a64e80002182bb00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffffb8829b004482740000825300008232fffc8211000081f0000881cf0018814e0034398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d0000392000019123000c390000019103000838e0000390e3000480db003c90c30000830a0004801800007c0803a64e8000213a4300004800007480fb004080c7000080a600008085fffc80640000832300088319000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002a962d67bbc92d700083ea002a062b5c7ac92b70004829800009297000038770000800d00287c0803a64e8000213b7b000480bb004080850000806400008323fffc83190000965bfffc80190020941bfffc3872000083180004801800007c0803a64e8000213ae30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092e3000482db004092c30000831b0000801800007c0803a64e80002182bb004882950000827400008253fffc823200008211000881f0001881cf0044807b000c830e0000801800007c0803a64e800021280300014182013c813b00488109000080e8000080c7fffc80a60000808500088064001883230044807b000c83190008801800007c0803a64e800021831b004882f8000082d7000082b6fffc829500008274000882530018823200048063001483110000801800007c0803a64e800021280300014182002c821b004881f0000081cf0000814efffc812a00008109000880e8001880c7001c8146000448000144821b004881f0000081cf0000814efffc812a00008109000880e8001880c70070807b001483060000801800007c0803a64e800021280300014182004080bb004880850000806400008323fffc8319000082f8000882d7001882b60070807b001483150008801800007c0803a64e80002181430010480000cc80bb004880850000806400008323fffc8319000082f8000882d7001882b6001c81550004480000a4815b0048812a00008109000080e8fffc80c7000080a60008808500188064007083230000807b00143b190000801800007c0803a64e8000212803000141820040831b004882f8000082d7000082b6fffc82950000827400088253001882320070807b001483110008801800007c0803a64e8000218143001048000028831b004882f8000082d7000082b6fffc8295000082740008825300188232001c81510004821b004881f0000081cf0000812efffc8109000080e8000880c7001880a6001c955bfffc386a000083050000801800007c0803a64e80002128030001408200dc807b004c832300008319000082f8fffc82d7000082b600088295001882740070807b002883130000801800007c0803a64e8000212803000141820040823b004c8211000081f0000081cffffc814e0000812a00088109001880e80070807b002883070008801800007c0803a64e8000218243001048000028825b004c823200008211000081f0fffc81cf0000814e0008812a00188109001c8248000480fb004c80c7000080a600008085fffc80640000832300088319001882f8001c3872000083170000801800007c0803a64e800021388300004800000838800001807b004c832300008319000082f8fffc82d7000082b600088295001882740070949bfffc8017fff0941bfffc80160014941bfffc807b002483130000801800007c0803a64e8000212803000141820040823b00588211000081f0000081cffffc814e0000812a00088109001880e80070807b002483070008801800007c0803a64e8000218243000448000050825b0058823200008211000081f0fffc81cf0000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a5d0004919d00003d4002a9614a7be891520000812e000891320004811b005880e8000080c7000080a6fffc80850000965bfffc807b00288304000c801800007c0803a64e800021833b005c8319000082f8000082d7fffc82b60000829500088274001882530070947bfffc807b002c83120000801800007c0803a64e8000212803000141820040821b006081f0000081cf0000814efffc812a00008109000880e8001880c70070807b002c83060008801800007c0803a64e8000218223000c480000343d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213a3d0004919d00003a00000192110000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d000081fb001491e300109223000c81db001c91c30008815b000491430004813b000091230000831b0008801800007c0803a64e80002139030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00009103000480fb004c90e30000831b000c801800007c0803a64e80002180db006080a60000808500008064fffc832300008319000882f8001882d7002c398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003aa0000192a30008829b002892830004827b00589263000083160004801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a5d0004919d0000823b00449232000490720000821b0040281000014182000c39e000034800001c81fb0020280f00014182000c39e000034800000881fb001081db0050924e000091ee000438600001815b00647d4803a63b7b00684e800020821b001081f0000081cf0000814efffc812a00008109000880e8000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002138dd0004919d00003ca002a960a57c6c90a600083c8002a06084c7ac90860004806700009066000038660000800d00287c0803a64e800021|@3382,1048575|740,3,@3378 976,3,@3218 1836,3,@3379 1848,3,@227 3020,3,@3380 3708,3,@3381 3720,3,@227 3378:O4|0,0,-1,0 3379:S33|70726f636573734e6f6e496e6c696e65733a204e6f7420612066756e6374696f6e 3380:C2,104|7f2802a663390002973bfffc8078000482e3000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002a062b5eef092b600083ea002a062b5c7ac92b6000482b7000092b6000038760000800d00287c0803a64e800021|@270,1015809|56,3,@269 68,3,@227 3381:S29|70726f636573734e6f6e496e6c696e65733a206e6f74204465636c6172 3382:S77|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70794465636c61726174696f6e7328312970726f636573734e6f6e496e6c696e6573283429 3383:S17|4c697374506169722e666f6c6472283429 3384:S73|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70794465636c61726174696f6e7328312972657065617450726f63657373283129 3385:C2,500|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e80002082f8000082d7000082b6fffc8295000082740008825300188232002c973bfffc971bfffc80030000941bfffc80030004941bfffc807b000483110000801800007c0803a64e80002128030001418200b481fb000881cf0000814e0000812afffc8109000080e8000880c7001880a6002c807b000483050008801800007c0803a64e800021809b0008832400008319000082f8fffc82d7000082b60008829500188274003482430000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00003a2000019223000c3a0000019203000839e0000391e300049243000083130004801800007c0803a64e8000213a03000048000074821b000881f0000081cf0000814efffc812a00008109000880e8000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002138dd0004919d00003ca002a960a57f6c90a600083c8002a06084c7ac90860004806700009066000038660000800d00287c0803a64e800021961bfffc807b0004831b000c4bfffe55398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002139dd0004919d0000906e0004815b0000914e0000386e0000813b00107d2803a63b7b00144e800020|@234,1048575|368,3,@3386 380,3,@227 3386:S20|65787472616374733a206e6f74204465636c6172 3387:C2,1596|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000082d7000082b6fffc8295000082740008825300188232002c973bfffc971bfffc947bfffc949bfffc94bbfffc94dbfffc83110000801800007c0803a64e8000212803000141820564821b001081f0000081cf0000814efffc812a00008109000880e8001880c7002c807b000c83060008801800007c0803a64e80002180bb0004809b0010832400008319000082f8fffc398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213add0004919d00003aa0000192b6000c3a800001929600083a600003927600048243000092560000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003a200001922300088217001c9203000492c30000965bfffc80050000941bfffc80050004941bfffc8317fff4801800007c0803a64e80002181fb001c81cf0000814e0000812afffc81090000947bfffc808fffc8807b000883080054801800007c0803a64e80002180fb002080c7000080a600008085fffc83240000947bfffc80040020941bfffc83190004801800007c0803a64e8000213b030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00009303000482fb002092e30000831b0000801800007c0803a64e80002182db002882b60000829500008274fffc82530000823200088211001881f000708013fff0941bfffc80120014941bfffc807b0010830f0000801800007c0803a64e8000212803000141820044815b0030812a00008109000080e8fffc80c7000080a60008808500188064007083230008807b00103b190000801800007c0803a64e80002181c300104800002881db0030814e0000812a00008109fffc80e8000080c7000880a600188085001c81c40004807b0030832300008319000082f8fffc82d7000082b60008829500188274007095dbfffc807b001483130000801800007c0803a64e8000212803000141820040823b00348211000081f0000081cffffc814e0000812a00088109001880e80070807b001483070008801800007c0803a64e8000218243000448000050825b0034823200008211000081f0fffc81cf0000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a5d0004919d00003d4002a9614a85e091520000812e000891320004811b003480e8000080c7000080a6fffc80850000965bfffc807b00188304000c801800007c0803a64e800021833b00388319000082f8000082d7fffc82b60000829500088274001882530070947bfffc807b001c83120000801800007c0803a64e8000212803000141820040821b003c81f0000081cf0000814efffc812a00008109000880e8001880c70070807b001c83060008801800007c0803a64e8000218223000c480000343d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213a3d0004919d00003a00000192110000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d000081fb000891e300109223000c81db001891c30008815b000491430004813b000091230000831b000c801800007c0803a64e80002139030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00009103000480fb002890e30000831b0010801800007c0803a64e80002180db00243980000254c0f80140a20010800d00347c0803a64e8000217ca6661541a3fff0809b003c80640000832300008319fffc82f8000082d7000882b600188295002c398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003a60000192630008825b001892430004823b00349223000094bbfffc83140004801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a1d0004919d000081fb002491f000049070000081db0030815b0000914e0000920e000438600001813b00447d2803a63b7b00484e800020821b001081f0000081cf0000814efffc812a00008109000880e8000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002138dd0004919d00003ca002a960a5866490a600083c8002a06084c7ac90860004806700009066000038660000800d00287c0803a64e800021|@3390,1048575|860,3,@3388 1548,3,@3389 1560,3,@227 3388:C2,104|7f2802a663390002973bfffc8078000482e3000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002a062b5eef092b600083ea002a062b5c7ac92b6000482b7000092b6000038760000800d00287c0803a64e800021|@270,1015809|56,3,@269 68,3,@227 3389:S24|726570726f636573734465633a206e6f74204465636c6172 3390:S77|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70794465636c61726174696f6e73283129646563732d726570726f63657373446563283429 3391:C2,104|7f2802a663390002973bfffc8078000482e3000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002a062b5eef092b600083ea002a062b5c7ac92b6000482b7000092b6000038760000800d00287c0803a64e800021|@270,1015809|56,3,@269 68,3,@227 3392:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c8078ffb04e800020973bfffc971bfffc80030000941bfffc806300044bffffbd398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b00009319000038790000833b00087f2803a63b7b000c4e800020|@468,786433| 3393:S59|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70794465636c61726174696f6e732831292f33 3394:C2,104|7f2802a663390002973bfffc8078000482e3000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002a062b5eef092b600083ea002a062b5c7ac92b6000482b7000092b6000038760000800d00287c0803a64e800021|@270,1015809|56,3,@269 68,3,@227 3395:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c8078ffcc4e800020973bfffc971bfffc80030000941bfffc806300044bffffbd398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b00009319000038790000833b00087f2803a63b7b000c4e800020|@468,786433| 3396:S57|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70794465636c61726174696f6e73283129 3397:C2,104|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021398000013bbdfff87c1df04040a00010800d001c7c0803a64e8000213afd0004919d00009097000038b7000038830000807800043c0002a36000620c7c0903a67f2803a64e800420|@3312,1048079|84,3,@1198 3398:C2,1256|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c040001408200243b0000019305000038800001908500043860000190650008386000014e800020398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002a962d68f4492d7000082d8ffe092d70004973bfffc971bfffc947bfffc94bbfffc80040004941bfffc96fbfffc82a4000038800001387500008318fffc3c0002a860006dc47c0803a64e80002138c0000380bb000c38830000807b0000829b00108314fffc3c0002a86000d4047c0803a64e800021827b00103a430000809b000c8073ffe43c0002a36000414c7c0803a64e800021706b00014082000c82230000480000688233fffc8211000081f0000881cf000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021395d0004919d00003d2002a06129c79c912a00083d0002a06108c7ac910a000480ee000090ea0000386a0000800d00287c0803a64e800021821b000c398000025600f80140a20010800d00347c0803a64e8000217df0661541a3fff0947bfffc947bfffc947bfffc965bfffc963bfffc38bb0008809b0018386f00003b1300004bfffe4181db0024814efffc812a0000807b000083090010801800007c0803a64e800021811b002480e8fffc80c7000080a600088085001883240070947bfffc807b000483190000801800007c0803a64e800021280300014182003882fb002882d7fffc82b60000829500088274001882530070807b000483120008801800007c0803a64e8000218303001048000020831b002882f8fffc82d7000082b60008829500188274001c83130004825b00288232fffc8211000081f0000881cf0018814e0024971bfffc807b0004830a0000801800007c0803a64e8000212803000141820034813b002c8109fffc80e8000080c7000880a6001880850024807b000483040008801800007c0803a64e8000214800001c811b002c80e8ffe838c0000190c70000392000014800000839200001807b002c8323fffc8319000082f8000882d7001882b6001c807b000083150000801800007c0803a64e80002128030001418200a0829b002c8274fffc82530000823200088211001881f00024807b0004830f0000801800007c0803a64e800021280300014182006c81db002c814efffc812a00008109000880e8001880c70024807b000483060008801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021389d0004919d0000807b001890640004833b00049324000038a40000480000a4829b002c8274fffc82530000823200088211001881f00034398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d000039c0000191c3000c39400001914300083920000391230004811b002891030000830f0004801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138fd0004919d000080db001890c700049067000038a70000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021389d0004919d0000807b001490640004833b00049324000082fb00102c1700014082000c831b000c48000020807b000c3b1b00303c0002a960008f987c0803a64e8000213b03000082db0024931600009096000490b600083860000182bb00307ea803a63b7b00344e800020|@3401,1048575|108,3,@3399 172,3,@3218 212,3,@3231 244,3,@1155 328,3,@226 340,3,@227 1200,3,@3400 3399:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@3318,1048575| 3400:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c8078ffe04e800020973bfffc971bfffc80030000941bfffc806300044bffffbd398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b00009319000038790000833b00087f2803a63b7b000c4e800020|@468,786433| 3401:S49|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d6973652832296d616b6544656373283329 3402:C2,1160|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8fffc82d70000973bfffc971bfffc388300008078fff083160054801800007c0803a64e80002182bb00008295fffc82740000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a5d0004919d00003e2002a962319520923200008213001c9212000481f3000881cf0018814e0070947bfffc965bfffc8015ffec941bfffc807b0000830a0000801800007c0803a64e800021280300014182003c811b000c80e8fffc80c7000080a60008808500188064007083230008807b00003b190000801800007c0803a64e8000218123000448000048813b000c8109fffc80e80000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021393d0004919d00003cc002a960c6957890c9000080a7000890a90004809b000c8064fffc83230020973bfffc8303001c971bfffc82e3001896fbfffc82c3001496dbfffc82a3001096bbfffc3a800001969bfffc82630008967bfffc82430004965bfffc80c3fff038a90000809b002482230000807b00283b110000801800007c0803a64e800021821b000c81f0fffc81cf0000947bfffc800e0014941bfffc830e0010801800007c0803a64e800021815b0014812afffc8109000080e8000880c7001880a60070947bfffc807b000883050000801800007c0803a64e8000212803000141820038807b00188323fffc8319000082f8000882d7001882b60070807b000883150008801800007c0803a64e8000218083001048000020809b00188064fffc832300008319000882f8001882d7001c8096000482bb00188295fffc82740000825300088232001882110070949bfffc807b000c83100000801800007c0803a64e800021280300014182003881db001c814efffc812a00008109000880e8001880c70070807b000c83060008801800007c0803a64e80002181e300044800004881fb001c81cffffc814e0000398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002139fd0004919d00003d2002a9612995fc912f0000810a0008910f000480fb001c80c7fffc80a6000095fbfffc8067ffec8305000c801800007c0803a64e800021809b00208324fffc83190000947bfffc807b00148318000c801800007c0803a64e8000212c0300014082000c82fb000048000028947bfffc807b00043b1b002c3c0002a9600096807c0803a64e8000213ae300003b7b000482db002482b6fffc8295000082740008825300188232007096fbfffc807b001883110000801800007c0803a64e800021280300014182003881fb002881cffffc814e0000812a00088109001880e80070807b001883070008801800007c0803a64e8000218203000c480000343d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213a1d0004919d000039e0000191f00000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d000081db000c91c300109203000c815b001091430008813b000891230004811b000091030000831b0014833b002c801800007c0903a67f2803a63b7b00304e800420|@3407,1048575|120,3,@3403 300,3,@3404 760,3,@3405 880,3,@3406 3403:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@270,1048575| 3404:C2,104|7f2802a663390002973bfffc8078000482e3000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002a062b5eef092b600083ea002a062b5c7ac92b6000482b7000092b6000038760000800d00287c0803a64e800021|@270,1015809|56,3,@269 68,3,@227 3405:C2,104|7f2802a663390002973bfffc8078000482e3000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002a062b5eef092b600083ea002a062b5c7ac92b6000482b7000092b6000038760000800d00287c0803a64e800021|@270,1015809|56,3,@269 68,3,@227 3406:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c8078ffd44e800020973bfffc971bfffc80030000941bfffc806300044bffffbd398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b00009319000038790000833b00087f2803a63b7b000c4e800020|@468,786433| 3407:S40|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d6973652832292f31 3408:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@270,1048575| 3409:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@270,1048575| 3410:C2,200|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e800020973bfffc971bfffc80030004941bfffc38800001806300008318fffc3c0002a860006dc47c0803a64e800021833b00048319fffc3c0002a86000c6cc7c0803a64e800021947bfffc807b0004831b00084bffff81398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b1d0004919d00009078000482fb000092f800003878000082db000c7ec803a63b7b00104e800020|@234,1048575|76,3,@3218 100,3,@3219 3411:S35|6f7074696d697365202d20636f6e7461696e6572206973206e6f742045787472616374 3412:C2,240|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f800143997ffff7c6bb8385560f80140a20010800d00347c0803a64e8000217ec3661541a3fff0973bfffc971bfffc947bfffc96dbfffc8078000c83180010801800007c0803a64e80002182bb000838830000807b000483150008801800007c0803a64e800021829b000882740004825300188232002c3a030000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000039e0000191e300089203000481db000091c3000083110004833b000c801800007c0903a67f2803a63b7b00104e800420|@3413,1048575| 3413:S53|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d6973652832297370656369616c446563732d283129 3414:C2,168|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f800083997ffff7c6bb8385560f80140a20010800d00347c0803a64e8000217ec3661541a3fff082b800048295001882740034398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00003a4000019243000c3a200001922300083a0000039203000492c3000083130004801800007c0903a67f2803a64e800420|@3415,1048575| 3415:S56|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d6973652832297370656369616c456e74726965732d283129 3416:C2,180|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000c82d7001882b60034973bfffc971bfffc949bfffc80180010941bfffc83150004801800007c0803a64e800021831b0000801800007c0803a64e800021829b0008827b0004825400083992ffff7e6b90385560f80140a20010800d00347c0803a64e8000217e2c9c1141a3fff0388300003871000083140004833b000c801800007c0903a67f2803a63b7b00104e800420|@228,1048575| 3417:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c8078ffe04e800020973bfffc971bfffc80030000941bfffc806300044bffffbd398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b00009319000038790000833b00087f2803a63b7b000c4e800020|@468,786433| 3418:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@223,1048575| 3419:C2,2676|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8fffc82d7000082b600088295001882740020973bfffc971bfffc947bfffc949bfffc83130000801800007c0803a64e800021280300014182021c825b00088232fffc8211000081f0000881cf0018814e0020807b0004830a0008801800007c0803a64e800021813b00088109fffc80e8000080c7000880a600188085002080030000941bfffc80030008941bfffc80040004941bfffc80070048941bfffc38800001806300043b0900004bffff353b2000012c0300014082000c3879000048000058398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b1d0004919d00009338000482e3000092f800003b38000080630004800d00187c1b004040a00010800d00207c0803a64e8000214bffffa0831b0000801800007c0803a64e800021831b001882f8fffc82d70000947bfffc80160048941bfffc38800001807b00104bfffe993aa000012c0300014082000c3875000048000058398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a9d0004919d000092b4000482630000927400003ab4000080630004800d00187c1b004040a00010800d00207c0803a64e8000214bffffa0831b0000801800007c0803a64e8000213a830000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092830008827b000492630004825b001492430000831b000c801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a3d0004919d0000821b001892110004907100003871000081fb00247de803a63b7b00284e800020825b00088232fffc8211000081f0000881cf0018814e0058807b0004830a0000801800007c0803a64e80002128030001418200cc813b00088109fffc80e8000080c7000880a6001880850058807b000483040008801800007c0803a64e800021833b00002c030001408200183c6002a36063dfcc800d00287c0803a64e800021830300042c180001408200203899000080630000831b0008833b000c7f2803a63b7b00104bfffcf0398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213afd0004919d00009337000482c3000092d70000806300043b370000800d00187c1b004040a00010800d00207c0803a64e8000214bffff6c813b00088109fffc80e8000080c7000880a6001880850068807b000483040000801800007c0803a64e800021280300014182062c807b00088323fffc8319000082f8000882d7001882b60068807b000483150008801800007c0803a64e800021829b00088274fffc82530000823200088211001881f00034947bfffc80030000941bfffc807b0000830f0000801800007c0803a64e800021280300014182051881db0010814efffc812a00008109000880e8001880c70034807b000083060008801800007c0803a64e80002180a300042c05000340820438808300082c04000140820384833b0004831b001082f9000482d8fff07eebb378556bf80140a20010800d00347c0803a64e8000217c17b000408202b082b8fffc8295000082740008825300188232003480030000941bfffc8018ffe4941bfffc807b000083110000801800007c0803a64e80002128030001418201c8821b001881f0fffc81cf0000814e0008812a001881090034807b000083080008801800007c0803a64e80002180e300042c070003408200e880c300082c0600014082003480030000941bfffc807b00143b1b00203c0002a96000a7c87c0803a64e80002180bb00207ca803a63b7b00244e80002080bb00188085fffc832400008319000882f8001882d70064398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000082a5ffe492a30008829b0014928300048265fff09263000083160004801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a5d0004919d0000823b0010923200049072000038720000821b001c7e0803a63b7b00204e80002080db001880a6fffc80850000832400088319001882f80064398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000082c6ffe492c3000882bb001492a300048286fff09283000083170004801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a7d0004919d0000825b0010925300049073000038730000823b001c7e2803a63b7b00204e800020821b001881f0fffc81cf0000814e0008812a001881090064398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000080f0ffe490e3000880db001490c3000480b0fff090a3000083080004801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021389d0004919d0000833b0010932400049064000038640000831b001c7f0803a63b7b00204e80002082b8fffc82950000827400088253001882320064398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00008218ffe49203000881fb000c91e3000481d8fff091c3000083110004801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021395d0004919d0000813b0008912a0004906a0000386a0000811b00147d0803a63b7b00184e800020833b00108319fffc82f8000082d7000882b6001882950064398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00008279ffe492630008825b000c924300048239fff09223000083140004801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a1d0004919d000081fb000891f00004907000003870000081db00147dc803a63b7b00184e800020809b00108324fffc8319000082f8000882d7001882b60064398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00008284ffe492830008827b000c926300048244fff09243000083150004801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a3d0004919d0000821b000892110004907100003871000081fb00147de803a63b7b00184e80002081db0010814efffc812a00008109000880e8001880c70064398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000080aeffe490a30008809b000c90830004832efff09323000083060004801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b1d0004919d000082fb000892f80004907800003878000082db00147ec803a63b7b00184e800020807b00088323fffc8319000082f8000882d7001882b600648283fff08263ffe4398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092630008825b0004924300049283000083150004801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a3d0004919d0000821b000092110004907100003871000081fb000c7de803a63b7b00104e800020|@3422,1048575|736,3,@1386 1304,3,@3420 3420:C2,772|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c03000140820070973bfffc8078fffc82e3fffc82d7000082b600088295000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a7d0004919d00003e4002a9625245e4925300083e4002a06252c7ac92530004825400009253000038730000800d00287c0803a64e80002182f8fffc82d7fffc82b6000082950008827400188253002c973bfffc971bfffc947bfffc80030000941bfffc807b000083120000801800007c0803a64e80002128030001418201d8823b00088211fffc81f0fffc81cf0000814e0008812a00188109002c807b000083080008801800007c0803a64e80002180fb000480db000880a300008086ffe87cab2378556bf80140a20010800d00347c0803a64e8000217c052000408201288326fffc8319fffc82f8000082d7000882b6001882950034398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00003a6000019263000c3a400001924300083a200003922300048206ffe09203000094bbfffc80070004941bfffc83140004801800007c0803a64e80002181fb001081cffffc814efffc812a00008109000880e8001880c7002c38a30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000388000019083000890a30004833b00049323000083060004801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b1d0004919d000082fb000092f80004907800003878000082db00147ec803a63b7b00184e800020806700043b0600004bfffd99398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b0000931900003879000082fb000c7ee803a63b7b00104e800020823b000480710004831b00084bfffd45398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a1d0004919d00009070000481fb000091f000003870000081db000c7dc803a63b7b00104e800020|@3421,1048575|100,3,@3348 112,3,@227 3421:S79|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d69736528322970757368536574436f6e7461696e65722832297265706c616365436f6e7461696e6572446563283129 3422:S57|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d69736528322970757368536574436f6e7461696e6572283229 3423:S38|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229 3424:S27|434f44455452454528292e6f7074696d69736550726f6328313229 3425:O2|@3426,@274 3426:C2,664|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021971bfffc973bfffc947bfffc949bfffc3ee002a962f7ae983ac000012c1700014082000c3ab60000480000c8281600014182000c3a80000348000088829b000c827400048253001080170004941bfffc8012001c941bfffc807700003f00000063185808801800007c0803a64e8000213a230000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092230004821b000c92030000831b0000801800007c0803a64e8000213a8300003b7b00044800000c80170004941bfffc3ad4000082fb00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffff30281500014182001838600003829b00087e8803a63b7b00104e8000203e8002a96294b1c83a6000012c1400014082000c3a530000480000c8281300014182000c3a20000348000088823b000c8211000481f0001080140004941bfffc800f001c941bfffc807400003f00000063185808801800007c0803a64e80002139c30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000091c30004815b000c91430000831b0000801800007c0803a64e8000213a2300003b7b00044800000c80140004941bfffc3a710000829b00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffff302812000141820074823b00003a0000032c110001408200183870000081fb00087de803a63b7b00104e80002080110004941bfffc38900000807100003b1b00103c0002a96000b1ec7c0803a64e8000213a030000823b00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffff9c38600001823b00087e2803a63b7b00104e800020|@3501,1048575|48,3,@3427 124,3,I189 300,3,@3495 376,3,I189 588,3,@3498 3427:O2|15,@3428 3428:O2|24,@3429 3429:O2|25,@3430 3430:O2|26,@3431 3431:O2|27,@3432 3432:O2|28,@3433 3433:O2|29,@3434 3434:O2|105,@3435 3435:O2|106,@3436 3436:O2|107,@3437 3437:O2|108,@3438 3438:O2|109,@3439 3439:O2|110,@3440 3440:O2|111,@3441 3441:O2|112,@3442 3442:O2|113,@3443 3443:O2|114,@3444 3444:O2|115,@3445 3445:O2|117,@3446 3446:O2|118,@3447 3447:O2|119,@3448 3448:O2|120,@3449 3449:O2|121,@3450 3450:O2|122,@3451 3451:O2|123,@3452 3452:O2|125,@3453 3453:O2|126,@3454 3454:O2|127,@3455 3455:O2|128,@3456 3456:O2|130,@3457 3457:O2|133,@3458 3458:O2|134,@3459 3459:O2|135,@3460 3460:O2|136,@3461 3461:O2|137,@3462 3462:O2|138,@3463 3463:O2|139,@3464 3464:O2|140,@3465 3465:O2|141,@3466 3466:O2|189,@3467 3467:O2|196,@3468 3468:O2|213,@3469 3469:O2|214,@3470 3470:O2|216,@3471 3471:O2|217,@3472 3472:O2|218,@3473 3473:O2|223,@3474 3474:O2|229,@3475 3475:O2|230,@3476 3476:O2|231,@3477 3477:O2|232,@3478 3478:O2|233,@3479 3479:O2|234,@3480 3480:O2|238,@3481 3481:O2|239,@3482 3482:O2|240,@3483 3483:O2|241,@3484 3484:O2|242,@3485 3485:O2|243,@3486 3486:O2|244,@3487 3487:O2|245,@3488 3488:O2|246,@3489 3489:O2|247,@3490 3490:O2|248,@3491 3491:O2|249,@3492 3492:O2|250,@3493 3493:O2|251,@3494 3494:O2|152,0 3495:O2|17,@3496 3496:O2|252,@3497 3497:O2|253,0 3498:C2,408|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000082d7000482b6001882950024973bfffc971bfffc947bfffc949bfffc83140000801800007c0803a64e80002128030001418200e0827b000882530000823200048211001881f00024807b0004830f0008801800007c0803a64e80002181db0000280e000141820098815b0008812a00008109000480e80010947bfffc8307000c801800007c0803a64e80002128030001418200183860000380db00107cc803a63b7b00144e80002080db000c80a60000808500048064001080030024941bfffc83230018807b00043b190000801800007c0803a64e800021831b0000801800007c0803a64e80002168630002831b00147f0803a63b7b00184e80002038600001815b000c7d4803a63b7b00104e800020827b000882530000823200048211000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002139fd0004919d00003dc002a961ceb3a091cf00083d4002a0614ac7ac914f000481300000912f0000386f0000800d00287c0803a64e800021|@3500,1048575|360,3,@3499 372,3,@227 3499:S29|6973496d6d757461626c653a20617267206e6f7420636f6e7374616e74 3500:S40|434f44455452454528292e6561726c7952747343616c6c2832296973496d6d757461626c65283229 3501:S26|434f44455452454528292e6561726c7952747343616c6c283229 3502:O5|@3504,@3125,@274,@3011,@3503 3503:O2|@3529,@274 3504:C2,324|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc947bfffc3ad900003ab800003a8300003a6400003a45000038a00001388000813860000d3f000000631841c8801800007c0803a64e80002138a0000b90a30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021389d0004919d0000906400043860ffff906400003d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213b3d0004919d0000909900003b1b0000933800003afb000038a0000190b70004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021389d0004919d0000807b000090640000833b00049324000496bbfffc949bfffc967bfffc965bfffc96dbfffc387400003b1b00183c0002a96000b5a07c0803a64e800021831b00007f0803a63b7b001c4e800020|@3528,1048575|72,3,I11 292,3,@3505 3505:C2,4244|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8fff882d7000882b6001882950058973bfffc971bfffc947bfffc83140000801800007c0803a64e8000212803000141820064827b00048253fff8823200088211001881f00058807b0000830f0008801800007c0803a64e8000213b1b00083c0002a96000c6507c0803a64e80002181db0004814efff8830a0004833b0008801800007c0903a67f2803a63b7b000c4e800420827b00048253fff8823200088211001881f00034807b0000830f0000801800007c0803a64e800021280300014182011081db0004814efff8812a00088109001880e80034807b000083070008801800007c0803a64e80002180c300082c0600014082006480a3000054abf80140a20010800d00347c0803a64e8000212c05000141800030808300042804000141820024833b000438a00003808300008079fff43c0002a36000620c7c0803a64e800021807b0000809b00087c8803a63b7b000c4e80002080bb00043980000254c0f80140a20010800d00347c0803a64e8000217c8c341141a3fff03b230000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00008305ffec9303000890830004932300008305fff0833b0008801800007c0903a67f2803a63b7b000c4e80042081db0004814efff8812a00088109001880e80044807b000083070000801800007c0803a64e800021280300014182005480db000480a6fff8808500088064001883230044807b000083190008801800007c0803a64e8000213883000038600001831b0004833b00083c0002a96000cd3c7c0903a67f2803a63b7b000c4e80042080db000480a6fff8808500088064001883230050807b000083190000801800007c0803a64e800021280300014182002c831b000482f8fff882d7000882b600188295005080740004827b00087e6803a63b7b000c4e800020831b000482f8fff882d7000882b6001882950010807b000083140000801800007c0803a64e80002128030001418200bc827b00048253fff8823200088211001881f00010807b0000830f0008801800007c0803a64e80002181db0004814efff8812a00088109001880e8001080030004941bfffc80070004941bfffc806300003b0e00004bfffcb5947bfffc807b0008831b00104bfffca538c30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000090c3000480bb000090a30000831b0004833b0014801800007c0903a67f2803a63b7b00184e800420827b00048253fff8823200088211001881f00024807b0000830f0000801800007c0803a64e800021280300014182004081db0004814efff8812a00088109001880e80024807b000083070008801800007c0803a64e800021807b000080db00087cc803a63b7b000c4e80002081db0004814efff8812a00088109001880e80040807b000083070000801800007c0803a64e80002128030001418200a880db000480a6fff8808500088064001883230040807b000083190008801800007c0803a64e800021831b000482f8fff882d7000882b600188295004080030004941bfffc80140004941bfffc806300004bfffb653a630000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000825b00049243000492630000831b0000833b0010801800007c0903a67f2803a63b7b00144e80042080db000480a6fff8808500088064001883230030807b000083190000801800007c0803a64e80002128030001418200d8831b000482f8fff882d7000882b6001882950030807b000083140008801800007c0803a64e800021827b00048253fff8823200088211001881f0003080030000941bfffc80030008941bfffc800f0004941bfffc806300043b1300004bfffa85947bfffc807b000c3b1b00183c0002a96000d6887c0803a64e80002139c30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000815b000891430008813b00009123000491c30000831b0004833b0018801800007c0903a67f2803a63b7b001c4e800420831b000482f8fff882d7000882b6001882950020807b000083140000801800007c0803a64e80002128030001418200dc827b00048253fff8823200088211001881f00020807b0000830f0008801800007c0803a64e80002181db0004814efff8812a00088109001880e8002080030004941bfffc80030008941bfffc80070004941bfffc806300003b0e00004bfff981947bfffc807b000c831b00144bfff971947bfffc807b000c831b00184bfff96138c30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000090c3000880bb000090a30004809b000490830000831b0008833b001c801800007c0903a67f2803a63b7b00204e800420827b00048253fff8823200088211001881f00014807b0000830f0000801800007c0803a64e80002128030001418200c081db0004814efff8812a00088109001880e80014807b000083070008801800007c0803a64e80002180030004941bfffc80630000831b00084bfff89d947bfffc807b00043b1b00103c0002a96000d7507c0803a64e80002180db000c80a6fff88085000883240018831900143ae30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092e3000482db000092c3000083180004833b0010801800007c0903a67f2803a63b7b00144e80042081db0004814efff8812a00088109001880e8004c807b000083070000801800007c0803a64e800021280300014182007880db000480a6fff880850008806400188323004c807b000083190008801800007c0803a64e800021831b000482f8fff882d7000882b600188295004c80140004941bfffc3b1b000c3c0002a96000d9e87c0803a64e800021831b0000833b000c801800007c0903a67f2803a63b7b00104e80042080db000480a6fff880850008806400188323005c807b000083190000801800007c0803a64e800021280300014182006c831b000482f8fff882d7000882b600188295005c807b000083140008801800007c0803a64e800021827b00048253fff8823200088211001881f0005c800f0004941bfffc3b1300004bfff6fd831b0000833b000c801800007c0903a67f2803a63b7b00104e800420831b000482f8fff882d7000882b6001882950048807b000083140000801800007c0803a64e800021280300014182002c827b00048253fff8823200088211001881f00048806f000481db00087dc803a63b7b000c4e800020827b00048253fff8823200088211001881f0003c807b0000830f0000801800007c0803a64e80002128030001418200e881db0004814efff8812a00088109001880e8003c807b000083070008801800007c0803a64e80002180db000480a6fff880850008832400188319003c80030004941bfffc80030008941bfffc80180004941bfffc806300003b0600004bfff5f9947bfffc807b00083b1b00183c0002a96000dab07c0803a64e800021947bfffc807b0010831b00184bfff5cd3ae30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000082db000092c3000892e3000482bb000492a30000831b0008833b001c801800007c0903a67f2803a63b7b00204e80042081db0004814efff8812a00088109001880e80060807b000083070000801800007c0803a64e800021280300014182007880db000480a6fff8808500088064001883230060807b000083190008801800007c0803a64e800021831b000482f8fff882d7000882b600188295006080140004941bfffc3b1b000c3c0002a96000db787c0803a64e800021831b0000833b000c801800007c0903a67f2803a63b7b00104e80042080db000480a6fff8808500088064001883230028807b000083190000801800007c0803a64e8000212803000141820040831b000482f8fff882d7000882b6001882950028807b000083140008801800007c0803a64e800021807b0000827b00087e6803a63b7b000c4e800020831b000482f8fff882d7000882b6001882950064807b000083140000801800007c0803a64e8000212803000141820334827b00048253fff8823200088211001881f00064807b0000830f0008801800007c0803a64e80002181db0004814efff8812a00088109001880e8003480030000941bfffc80030004941bfffc80030008941bfffc807b000083070000801800007c0803a64e80002128030001418200a080bb00108085fff8806400088323001883190034807b000083180008801800007c0803a64e80002182e300042c1700034082006482c300082c1600014082005082a3000056abf80140a20010800d00347c0803a64e8000212c1500014181000c38c000034800003c829b0010389500008074fff43c0002a36000414c7c0803a64e80002138c300004800001838c000034800001038c000034800000838c0000380db001080a6fff8808500088064001883230020807b000483190000801800007c0803a64e8000212803000141820064831b001082f8fff882d7000882b6001882950020807b000483140008801800007c0803a64e800021827b00108253fff880bb0008809b0004807b000083120010801800007c0803a64e800021831b0010833b00147f2803a63b7b00184bfff29c831b001082f8fff882d7000882b6001882950058807b000483140000801800007c0803a64e8000212803000141820064827b00108253fff8823200088211001881f00058807b0004830f0008801800007c0803a64e80002181db0010814efff880bb0008809b0004807b0000830a0010801800007c0803a64e800021831b0010833b00147f2803a63b7b00184bfff20c827b00108253fff8823200088211001881f0005c807b0004830f0000801800007c0803a64e800021280300014182004481db0010814efff8812a00088109001880e8005c807b000483070008801800007c0803a64e800021807b0004831b0010833b00147f2803a63b7b00184bfff19c81db0010814efff8812a00088109001880e8006480070004941bfffc807b00043b0e00004bfff16d947bfffc807b000c831b00184bfff15d38c30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000080bb000090a3000890c30004809b001090830000831b0004833b001c801800007c0903a67f2803a63b7b00204e800420827b00048253fff8823200088211001881f00068807b0000830f0000801800007c0803a64e80002128030001418200ac81db0004814efff8812a00088109001880e80068807b000083070008801800007c0803a64e80002180db000480a6fff880850008832400188319006880030004941bfffc80180004941bfffc806300003b0600004bfff07d3ae30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082db000492c3000492e30000831b0000833b0010801800007c0903a67f2803a63b7b00144e80042081db0004814efff8812a00088109001880e8001c807b000083070000801800007c0803a64e800021280300014182002c80db000480a6fff880850008806400188323001c80790004831b00087f0803a63b7b000c4e80002080db000480a6fff8808500088064000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213b3d0004919d00003f0002a96318dc40931900083ee002a062f7c7ac92f9000482c3000092d9000038790000800d00287c0803a64e800021|@3527,1048575|128,3,@3506 340,3,@1198 600,3,@3507 1420,3,@3519 1908,3,@3520 2144,3,@3523 2584,3,@3524 2824,3,@3525 3252,3,@1155 4196,3,@3526 4208,3,@227 3506:C2,1744|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e80002082f8fffc82d7fff882b60008829500188274002c973bfffc971bfffc947bfffc80030000941bfffc807b000083130000801800007c0803a64e800021280300014182022c825b00088232fffc8211fff881f0000881cf0018814e002c807b0000830a0008801800007c0803a64e800021813b0004811b000880e8fffc81c300008143000480030008941bfffc38a00001388e00008067fff43c0002a36000620c7c0803a64e80002195dbfffc955bfffc806900043b0800004bffff19813b00148109fffc38e30000809b00048068fff43c0002a36000414c7c0803a64e80002128030001418200084800002c80c8fff894fbfffc807b00048306000c801800007c0803a64e800021280300014182000c4800014894fbfffc80db001880a6fffc8085fff880640008832300188319002c82f9004480180004941bfffc807b000883170000801800007c0803a64e800021280300014182005882bb001c8295fffc8274fff8825300088232001882110044807b000883100008801800007c0803a64e80002138830000807b000c81fb001c830ffffc3c0002a96000cd3c7c0803a64e8000213ac3000048000024807b000882db001c8316fffc3c0002a96000b5a07c0803a64e8000213ac30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000082bb001092a3000892c30004829b000c92830000831b0000801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a7d0004919d0000825b0004925300049073000038730000823b00207e2803a63b7b00244e800020807b000080bb001c7ca803a63b7b00204e800020825b00088232fffc8211fff881f0000881cf0018814e0054807b0000830a0000801800007c0803a64e8000212803000141820280813b00088109fffc80e8fff880c7000880a6001880850054807b000083040008801800007c0803a64e800021833b0004947bfffc80190004941bfffc2c0300014082000c3b0000014800012882fb001082d7fffc82b6fff882950008827400188253002c80030000941bfffc80030004941bfffc807b000483120000801800007c0803a64e8000212803000141820058823b00188211fffc81f0fff881cf0008814e0018812a002c807b000483090008801800007c0803a64e800021811b001880e8fffc38a00001808300008067fff43c0002a36000620c7c0803a64e8000214800006c823b00188211fffc81f0fff881cf0008814e000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021393d0004919d00003d0002a96108d1c0910900083ce002a060e7c7ac90e9000480ca000090c9000038690000800d00287c0803a64e800021807b00003b7b0008800d00187c1b004040a00010800d00207c0803a64e8000214bfffed0807b0000831b00104bfffbb9947bfffc80bb000838800001386000013b1b00183c0002a96000d1e07c0803a64e8000212c03000140820018807b000082fb00187ee803a63b7b001c4e80002082e300042c1700014082004c398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213add0004919d000082bb000092b60004828300009296000038760000827b00187e6803a63b7b001c4e80002082db001482b6fffc8295fff882740008825300188232005483110004801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a1d0004919d000081fb000091f00004907000003870000081db00187dc803a63b7b001c4e800020813b00088109fffc80e8fff880c7000880a6001880850058807b000083040000801800007c0803a64e8000212803000141820094807b00088323fffc8319fff882f8000882d7001882b60058807b000083150008801800007c0803a64e800021829b0004947bfffc80740004831b000c4bfffa45947bfffc807b0004831b00104bfffa35827b00002c13000140820014825b00147e4803a63b7b00184e8000203b1b00143c0002a96000d5a47c0803a64e800021825b00147e4803a63b7b00184e800020807b000480630004831b00084bfff9e5947bfffc807b0004833b000c8319fffc3c0002a96000b5a07c0803a64e800021831b000c82f8fffc82d7fff8947bfffc8316000c801800007c0803a64e800021280300014182002482bb0004281500014182001838750000829b00147e8803a63b7b00184e800020398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d0000829b000492950004827b00009275000038750000825b00147e4803a63b7b00184e800020|@3518,1048575|200,3,@1198 256,3,@1155 452,3,@3507 488,3,@3505 928,3,@1198 1004,3,@3513 1016,3,@227 1120,3,@3514 1520,3,@3517 1584,3,@3505 3507:C2,388|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8fff8398000063bbdffe47c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002a962b5cedc92b6000082b8fff092b60014907600108078fff49076000c82840008929600088277000892760004398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a5d0004919d00003e2002a96231d1009232000092d20004973bfffc971bfffc80040004941bfffc969bfffc80040010941bfffc80040014941bfffc38b400008204000038920000387000008318fff8801800007c0803a64e80002181fb001081cffff8814e0008812a00188109004438e30000398000083bbdffdc7c1df04040a00010800d001c7c0803a64e800021387d0004919d000038c0000190c3001c38a0000190a30018809b000090830014833b0004932300103b0000019303000c82fb000892e3000882db000c92c3000490e3000083080004833b0014801800007c0903a67f2803a63b7b00184e800420|@3512,1048575|72,3,@3508 156,3,@3510 3508:C2,464|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c040001408201448083000082f800107c8bbb78556bf80140a20010800d00347c0803a64e8000217c04b8004082009882c30004281600014182008c82b800083995ffff7caba8385560f80140a20010800d00347c0803a64e8000217e8c2c1141a3fff0827800048253001882320034398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00003a0000019203000c9283000839e0000191e3000439c0000191c3000083110004801800007c0903a67f2803a64e800420548bf80140a20010800d00347c0803a64e8000212c0400014180003882c30004281600014182002c39d90000395800003923000038a00003806a000c3c0002a36000620c7c0803a64e80002148000010392300003958000039d9000082ca000482b600188295003438690000831400043b2e0000801800007c0903a67f2803a64e800420398000025480f80140a20010800d00347c0803a64e8000217eec241141a3fff03ac30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000090a3000892e3000492c3000083180014801800007c0903a67f2803a64e800420|@3509,1048575|288,3,@1198 3509:S46|434f44455452454528292e636c65616e50726f63283329636c65616e4c616d6264612832296c6f6f6b7570283329 3510:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@3511,1048575| 3511:S46|434f44455452454528292e636c65616e50726f63283329636c65616e4c616d6264612832296c6f6f6b7570283129 3512:S37|434f44455452454528292e636c65616e50726f63283329636c65616e4c616d626461283229 3513:S23|736574456e7472793a20756e6b6e6f776e20696e737472 3514:C2,824|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c050001408200242c0300034082001438a4000038800001386000014bffffcc386000014e80002082f8fffc82d7fffc82b6fff882950008827400188253002c973bfffc971bfffc947bfffc949bfffc94bbfffc80050000941bfffc807b000083120000801800007c0803a64e8000212803000141820238823b00108211fffc81f0fffc81cffff8814e0008812a00188109002c807b000083080008801800007c0803a64e80002180fb000480db001080a6fffc8085fffc8263000082430004822300088204fff438930000387000003c0002a36000414c7c0803a64e8000212803000140820058398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002139fd0004919d000081db000891cf0004815b0000914f000080a70004388f0000807b000c3b060000833b00147f2803a63b7b00184bfffeb081e5fffc81cffff8814e0008812a00188109002c80890044967bfffc965bfffc963bfffc80070004941bfffc80080004941bfffc3872000083040000801800007c0803a64e800021280300014182005c833b00248319fffc82f8fffc82d7fff882b600088295001882740044807b000c83130008801800007c0803a64e80002138830000807b0010825b00248232fffc8311fffc3c0002a96000cd3c7c0803a64e80002148000024807b000c833b00248319fffc8318fffc3c0002a96000b5a07c0803a64e8000213ae30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000082db000892c3000892e3000482bb001092a30000831b0000801800007c0803a64e800021947bfffc80bb0008809b002038600003831b00284bfffd7d398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a9d0004919d000090740004827b00009274000038740000825b002c7e4803a63b7b00304e800020823b00108211fffc81f0fffc81cffff8814e0008812a000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021391d0004919d00003ce002a960e7d53490e800083cc002a060c6c7ac90c8000480a9000090a8000038680000800d00287c0803a64e800021|@3516,1048575|240,3,@1155 496,3,@3507 532,3,@3505 776,3,@3515 788,3,@227 3515:S28|70726f636573734d757475616c3a20756e6b6e6f776e20696e737472 3516:S66|434f44455452454528292e636c65616e50726f63283329636c65616e436f646528312970726f636573734465637328312970726f636573734d757475616c73283329 3517:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c8078ffec4e800020973bfffc971bfffc80030000941bfffc806300044bffffbd398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b00009319000038790000833b00087f2803a63b7b000c4e800020|@468,786433| 3518:S49|434f44455452454528292e636c65616e50726f63283329636c65616e436f646528312970726f6365737344656373283129 3519:C2,172|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e800020973bfffc971bfffc80030004941bfffc806300008318fffc3c0002a96000b5a07c0803a64e800021947bfffc807b0004831b00084bffff9d398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b0000931900003879000082fb000c7ee803a63b7b00104e800020|@234,1048575|72,3,@3505 3520:C2,168|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e800020973bfffc971bfffc80030004941bfffc806300003c0002a96000d8147c0803a64e800021947bfffc807b0004831b00084bffffa1398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b0000931900003879000082fb000c7ee803a63b7b00104e800020|@234,1048575|68,3,@3521 3521:C2,384|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8fffc82d7fff882b60008829500188274002c973bfffc971bfffc947bfffc83130000801800007c0803a64e80002128030001418200c4825b00048232fffc8211fff881f0000881cf0018814e002c807b0000830a0008801800007c0803a64e80002180030000941bfffc80630004813b00088309fffc3c0002a96000b5a07c0803a64e800021811b000880e8fffc80c7fff880a60008808500188324002c3b030000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003ae0000192e300089303000482db000092c3000083190004833b000c801800007c0903a67f2803a63b7b00104e800420825b00048232fffc8211fff881f0000881cf000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021395d0004919d00003d2002a76129d770912a00083d0002a06108c7ac910a000480ee000090ea0000386a0000800d00287c0803a64e800021|@3522,1048575|152,3,@3505 336,3,@3027 348,3,@227 3522:S45|434f44455452454528292e636c65616e50726f63283329636c65616e436f6465283129636f7079446563283129 3523:C2,172|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e800020973bfffc971bfffc80030004941bfffc806300008318fffc3c0002a96000b5a07c0803a64e800021947bfffc807b0004831b00084bffff9d398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b0000931900003879000082fb000c7ee803a63b7b00104e800020|@234,1048575|72,3,@3505 3524:C2,172|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e800020973bfffc971bfffc80030004941bfffc806300008318fffc3c0002a96000b5a07c0803a64e800021947bfffc807b0004831b00084bffff9d398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b0000931900003879000082fb000c7ee803a63b7b00104e800020|@234,1048575|72,3,@3505 3525:C2,172|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e800020973bfffc971bfffc80030004941bfffc806300008318fffc3c0002a96000b5a07c0803a64e800021947bfffc807b0004831b00084bffff9d398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b0000931900003879000082fb000c7ee803a63b7b00104e800020|@234,1048575|72,3,@3505 3526:S24|636c65616e436f64653a20756e6b6e6f776e20696e737472 3527:S35|434f44455452454528292e636c65616e50726f63283329636c65616e436f6465283129 3528:S23|434f44455452454528292e636c65616e50726f63283329 3529:C2,656|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7001882b60020973bfffc971bfffc947bfffc949bfffc94bbfffc3864000083150000801800007c0803a64e80002128030001418200d4829b000c827400048253001882320020807b000483110008801800007c0803a64e800021821b000c81f0000481cf0018814e002080030000941bfffc80030008941bfffc800a0004941bfffc80bb000c80830004807b00143b1000004bffff49947bfffc80bb0010809b0008807b0018831b001c4bffff3139230000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000091230008811b00009103000480fb000c90e30000831b0004833b0020801800007c0903a67f2803a63b7b00244e800420829b000c827400048253001882320058807b000483110000801800007c0803a64e8000212803000141820070821b000c81f0000481cf0018814e0058807b0004830a0008801800007c0803a64e800021813b000c8109000480e8001880c7005880060004941bfffc3b1b00143c0002a96000df587c0803a64e800021831b0000833b0014801800007c0903a67f2803a63b7b00184e800420821b000c81f0000481cf0018814e005c807b0004830a0000801800007c0803a64e800021280300014182003c813b000c8109000480e8001880c7005c807b000483060008801800007c0803a64e800021807b000480bb00107ca803a63b7b00144e800020813b000c8109000480e8001880c70064398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000080bb000890a30008809b000490830004833b00009323000083060004833b0010801800007c0903a67f2803a63b7b00144e800420|@3532,1048575|408,3,@3530 3530:C2,268|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082001c973bfffc3c6002a36063dfcc800d00287c0803a64e80002182e300042c17000140820068973bfffc80b8fff0808300008078fff88318fffc801800007c0803a64e8000213ac30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003aa0000192a3000492c30000829b00007e8803a63b7b00044e800020973bfffc971bfffc80030000941bfffc806300044bffff3d398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213add0004919d00009076000482bb000092b6000038760000829b00087e8803a63b7b000c4e800020|@3531,1048575|44,3,@1386 3531:S40|434f44455452454528292e6d6b536574436f6e7461696e65722833296170706c794c617374283129 3532:S28|434f44455452454528292e6d6b536574436f6e7461696e6572283329 3533:O3|@3534,@3213,@274 3534:C2,380|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000882d7001882b60038973bfffc971bfffc947bfffc949bfffc3864000083150000801800007c0803a64e8000212803000141820050829b0008827400088253001882320038807b000083110008801800007c0803a64e800021821b0008809b0000807b000483100004833b000c801800007c0903a67f2803a63b7b00104e800420829b0008827400088253001882320024807b000083110000801800007c0803a64e8000212803000141820050821b000881f0000881cf0018814e0024807b0000830a0008801800007c0803a64e800021813b0008809b0000807b000483090004833b000c801800007c0903a67f2803a63b7b00104e800420821b000881f0000881cf0018814e0040398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000813b000491230004811b000091030000830a0004833b000c801800007c0903a67f2803a63b7b00104e800420|@3535,1048575| 3535:S19|434f44455452454528292e6d6b496e64283229 3536:C2,2848|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000882d7001882b60060973bfffc971bfffc947bfffc949bfffc3864000083150000801800007c0803a64e8000212803000141820270829b0008827400088253001882320060807b000083110008801800007c0803a64e800021947bfffc3a0000012c0300014082000c39f0000048000048398000025600f80140a20010800d00347c0803a64e8000217dd0661541a3fff0806300043a0e0000800d00187c1b004040a00010800d00207c0803a64e8000214bffffb081db00087dcb7838556bf80140a20010800d00347c0803a64e8000217c0e780040800084815b00002c0a0001408200183c6002a0606395e0800d00287c0803a64e8000212c0e000140820018806a0000813b00107d2803a63b7b00144e8000203980000255c0f80140a20010800d00347c0803a64e8000217d2c741141a3fff039c90000814a0004800d00187c1b004040a00010800d00207c0803a64e8000214bffff88815b000c812a000881090010800a0014941bfffc800a0010941bfffc800a000c941bfffc386000c983080014801800007c0803a64e800021831b0000801800007c0803a64e80002180fb001880c7000880a60010947bfffc8007000c941bfffc3c6002a96063edd483050014801800007c0803a64e800021831b0000801800007c0803a64e800021809b0020398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d00003b0000019319000482e4000492f90000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213add0004919d00009336000490760000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092c3000482bb000492a30000831b000c801800007c0803a64e800021831b0010833b0024801800007c0903a67f2803a63b7b00284e800420829b0008827400088253001882320024807b000083110000801800007c0803a64e800021280300014182031c821b000881f0000881cf0018814e0024807b0000830a0008801800007c0803a64e800021813b00088109000880e80010947bfffc8307000c801800007c0803a64e8000212803000141820008480000cc80db000c80a600088085001080040020941bfffc807b000483040018801800007c0803a64e800021831b0000801800007c0803a64e80002128030001408200084800008c807b0010832300088319001080180008941bfffc807b000883180018801800007c0803a64e800021831b0000801800007c0803a64e80002182fb001072eb00014182000c3ad700004800002c3ac30000387700003f00000063185368801800007c0803a64e8000213ab600003ac30000387500007c03b040418101583b7b000448000008947bfffc80db001080a600088085001080060014941bfffc80060010941bfffc8006000c941bfffc386000c983040014801800007c0803a64e800021831b0000801800007c0803a64e800021833b001c8319000882f80010947bfffc8019000c941bfffc3c6002a96063edd483170014801800007c0803a64e800021831b0000801800007c0803a64e80002182db0024398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003a800001929500048276000492750000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a5d0004919d000092b2000490720000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092430004823b000492230000831b000c801800007c0803a64e800021831b0010833b0028801800007c0903a67f2803a63b7b002c4e800420829b001482740008825300108014000c941bfffc8012002c941bfffc807b001083120018801800007c0803a64e800021823b001c8211000881f00010947bfffc807b001c830f0010801800007c0803a64e80002139c30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000091c30004815b000091430000831b0004801800007c0803a64e800021831b0008833b0024801800007c0903a67f2803a63b7b00284e800420821b000881f0000881cf0018814e0038807b0000830a0000801800007c0803a64e8000212803000141820490813b00088109000880e8001880c70038807b000083060008801800007c0803a64e80002180bb0008808500088324001883190070947bfffc83180000801800007c0803a64e800021280300014182003082db000c82b600088295001882740070807b000083130008801800007c0803a64e80002182e300104800001882fb000c82d7000882b600188295001c82f40004827b000c82530008823200188211006096fbfffc3877000083100000801800007c0803a64e800021280300014182039c81fb001081cf0008814e0018812a0060807b000083090008801800007c0803a64e800021809b0000807b000c831b00104bfff8dd811b001080e8000880c7001880a60034947bfffc83050000801800007c0803a64e800021280300014182013c809b0014806400088323001883190034807b000083180008801800007c0803a64e80002182fb001482d7000882b600188295003882750070947bfffc80030008941bfffc80140004941bfffc807b001483130000801800007c0803a64e8000212803000141820030823b00208211000881f0001881cf0070807b0014830e0008801800007c0803a64e8000218243000448000040825b002082320008398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a5d0004919d00003e0002a96210ede09212000092320004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000081fb000491e3000839c0000191c30004815b0008914300003b120000801800007c0803a64e800021831b0000833b0024801800007c0903a67f2803a63b7b00284e800420809b0014806400088323001883190040807b000083180000801800007c0803a64e80002128030001418201c482fb001482d7000882b6001882950040807b000083140008801800007c0803a64e800021827b0014825300088232001882110034947bfffc80030000941bfffc807b000083100000801800007c0803a64e800021280300014182015481fb001c81cf0008814e0018812a0034807b000083090008801800007c0803a64e800021811b000480fb001c80c7000880a600188085003883250070947bfffc80030008941bfffc80080004941bfffc80040004941bfffc807b002083190000801800007c0803a64e800021280300014182003082fb002c82d7000882b6001882950070807b002083140008801800007c0803a64e8000218303000448000040831b002c82f80008398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b1d0004919d00003ec002a962d6ee6492d8000092f80004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000082bb000892a300083a80000192830004827b000c92630000801800007c0803a64e800021831b0000801800007c0803a64e80002138830000807b0004831b002c833b00307f2803a63b7b00344bfff5a8807b000881fb00207de803a63b7b00244e800020807b000082fb00187ee803a63b7b001c4e80002081fb0010807b0004830f0018801800007c0803a64e80002138830000807b000c831b0010833b00147f2803a63b7b00184bfff54c813b00088109000880e8001880c70040398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080bb000490a30004809b00009083000083060004833b000c801800007c0903a67f2803a63b7b00104e800420|@3540,1048575|264,3,@51 476,3,@3537 984,3,I152 1132,3,@3537 2068,3,@3538 2528,3,@3539 3537:S4|42696e64 3538:C2,104|7f2802a663390002973bfffc8078000482e3000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002a062b5eef092b600083ea002a062b5c7ac92b6000482b7000092b6000038760000800d00287c0803a64e800021|@270,1015809|56,3,@269 68,3,@227 3539:C2,104|7f2802a663390002973bfffc8078000482e3000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002a062b5eef092b600083ea002a062b5c7ac92b6000482b7000092b6000038760000800d00287c0803a64e800021|@270,1015809|56,3,@269 68,3,@227 3540:S30|434f44455452454528292e66696e64456e747279496e426c6f636b283229 3541:C2,1348|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7001882b60024973bfffc971bfffc947bfffc949bfffc3864000083150000801800007c0803a64e800021280300014182003c829b0008827400048253001882320024807b000083110008801800007c0803a64e800021807b0000821b000c7e0803a63b7b00104e800020829b0008827400048253001882320030807b000083110000801800007c0803a64e80002128030001418203e0821b000881f0000481cf0018814e0030807b0000830a0008801800007c0803a64e80002180030000941bfffc80830004807b0008831b000c4bffff0d813b000c8109000480e8001880c7005c947bfffc83060000801800007c0803a64e800021280300014182003c80bb001080850004806400188323005c807b000083190008801800007c0803a64e800021807b0000831b00147f0803a63b7b00184e80002080bb0010808500048064001883230024807b000083190000801800007c0803a64e80002128030001418200d882fb001082d7000482b6001882950024807b000083140008801800007c0803a64e800021827b00108253000482320010947bfffc8311000c801800007c0803a64e8000212803000141820064821b001481f0000481cf000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021395d0004919d00003d2002a96129f470912a00083d0002a06108c7ac910a000480ee000090ea0000386a0000800d00287c0803a64e800021821b001481f0000481cf0010807b0000830e0018801800007c0803a64e8000213b03000048000064831b001082f8000482d7000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003e8002a96294f498929500083e6002a06273c7ac92750004825600009255000038750000800d00287c0803a64e800021971bfffc815b000c2c0a0001408200cc813b001897fbfffc3d0002a96108f272951bfffc38e0000194fbfffc3bfb000080c9000480a60010398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008089000c908300049303000080090008941bfffc83050004801800007c0803a64e800021831b0000801800007c0803a64e80002183fb000c833b002c7f2803a63b7b00304e800020830300002c180003408200183c6002a06063962c800d00287c0803a64e800021807b001082fb001c7ee803a63b7b00204e800020813b00188109000480e8001080070000941bfffc80070010941bfffc38c000012c0a00014082000c38660000480000483980000254c0f80140a20010800d00347c0803a64e8000217ca6661541a3fff0814a000438c50000800d00187c1b004040a00010800d00207c0803a64e8000214bffffb0831b0000801800007c0803a64e80002180bb002038830000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00008325000c93230008830500109303000490830000831b0004801800007c0803a64e80002138a30000809b0014386000013b1b00243c0002a96000f4c07c0803a64e80002182fb00247ee803a63b7b00284e800020807b0000831b0004801800007c0803a64e80002197fbfffc3e0002a96210f422961bfffc39e0000195fbfffc3bfb000081db0014800e0008941bfffc39430000386000013b0a0000801800007c0803a64e800021831b0000801800007c0803a64e80002183fb000c813b001c7d2803a63b7b00204e800020810300002c080003408200183c6002a06063962c800d00287c0803a64e800021807b000080fb000c7ce803a63b7b00104e800020|@3547,1048575|516,3,@3542 528,3,@227 652,3,@3543 664,3,@227 724,3,$3541+866 876,3,@54 1144,3,@3544 1200,3,$3541+1298 1308,3,@54 3542:S30|436f64652061646472657373206973206e6f7420616e2061646472657373 3543:S30|436f64652061646472657373206973206e6f74206120636f6e7374616e74 3544:C2,868|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0400014082012882f8fffc82d7000482b60010973bfffc971bfffc94bbfffc3865000083150038801800007c0803a64e800021829b00048274fffc8253000482320010807b000083110014801800007c0803a64e80002197fbfffc3e0002a96210f5d6961bfffc39e0000195fbfffc3bfb000081db0010814efffc812a00048109001038e30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000090e3000480ceffe490c30000800a0008941bfffc83080004801800007c0803a64e800021831b0000801800007c0803a64e80002183fb000c80bb00187ca803a63b7b001c4e800020808300002c040003408200183c6002a06063962c800d00287c0803a64e800021833b00048079fff4831b00087f0803a63b7b000c4e800020973bfffc971bfffc947bfffc94bbfffc80040004941bfffc808400008078fff88318fffc801800007c0803a64e800021833b000c8319fffc82f8000482d7001882b6005c947bfffc83150000801800007c0803a64e8000212803000141820040829b00108274fffc82530004823200188211005c807b000083100008801800007c0803a64e800021807b000081fb00147de803a63b7b00184e800020829b00108274fffc825300048232001882110024807b000083100000801800007c0803a64e80002128030001418200ec81fb001081cffffc814e0004812a001881090024807b000083080008801800007c0803a64e80002180fb001080c7fffc80a6000480850010947bfffc80040028941bfffc807b001483040010801800007c0803a64e8000213b230000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000831b0004930300089323000482fb001092e30000831b0000801800007c0803a64e80002182db00143980000256c0f80140a20010800d00347c0803a64e8000217eb6661541a3fff080bb0010809b000c38750000831b0018833b001c7f2803a63b7b00204bfffd0c81fb001081cffffc814e0004812a000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021391d0004919d00003ce002a960e7f84090e800083cc002a060c6c7ac90c8000480a9000090a8000038680000800d00287c0803a64e800021|@3546,1048575|124,3,$3544+278 288,3,@54 820,3,@3545 832,3,@227 3545:S36|526573756c74206f66206576616c75617465206973206e6f74206120636f6e7374616e74 3546:S33|434f44455452454528292e6576616c756174652832296c6f616441726773283329 3547:S22|434f44455452454528292e6576616c75617465283229 3548:O3|@3550,@3553,@3549 3549:O3|@3557,@3560,@3556 3550:O1|@3551 3551:C2,32|3b00ffff82e300007c18b8404082000c386000034e800020386000014e800020|@3552,917505| 3552:S24|5354525543545f56414c5328292e6973456d707479283129 3553:O1|@3554 3554:C2,28|83030004730b00014082000c386000034e800020386000014e800020|@3555,786433| 3555:S35|5354525543545f56414c5328292e697356616c7565436f6e7374727563746f72283129 3556:O1|@3562 3557:O1|@3558 3558:C2,8|386000034e800020|@3559,524289| 3559:S3|456e76 3560:O1|@3561 3561:C2,4|4e800020|@3559,524289| 3562:C2,4|4e800020|@3559,524289| 3563:O3|@3565,@4719,@3564 3564:O18|@4727,@4730,@4732,@4734,@4736,@4738,@4740,@4742,@4744,@4746,@4748,@4750,@4752,@4754,@4756,@4758,@4760,@4726 3565:O2|@3567,@3566 3566:O11|@3570,@3578,@3660,@4187,@4632,@4657,@4688,@4703,@4717,@4718,@3569 3567:C2,172|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d70024973bfffc80160004941bfffc80160020941bfffc83160014801800007c0803a64e8000213aa30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003a8000039283000492a30000831b0000801800007c0803a64e800021831b0004833b0008801800007c0903a67f2803a63b7b000c4e800420|@3568,1048575| 3568:S22|56414c55455f4f505328292e65786e4e616d65283129 3569:O1|@4335 3570:O2|@3572,@3571 3571:O1|@3576 3572:O10|@9420,@9421,@9422,@9423,@373,@3573,@9424,@9419,@362,0 3573:O1|@3574 3574:C2,8|386000014e800020|@3575,524289| 3575:S18|4c45585f28292e6e756c6c4c65782d283129 3576:C2,8|806300244e800020|@3577,524289| 3577:S31|4c45585f28292e6465627567506172616d732d236465627567506172616d73 3578:O28|@886,@1879,@2086,@3580,@3128,@3583,@3586,@3592,@2250,@2348,@3595,@3601,@3607,@3613,@2356,@3616,@3619,@3623,@3627,@3633,@3639,@3645,@2340,@2242,@3651,@3579,@2189,@2965 3579:O3|@3657,@274,@230 3580:O2|@3581,@274 3581:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7001882b6001c83150000801800007c0903a64e800420|@3582,1048575| 3582:S24|434f44455452454528292e6973436f64654e696c2d283129 3583:O2|@3584,@274 3584:C2,132|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7001882b600343a830000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00003a6000019263000c928300083a400001924300043a2000019223000083150004801800007c0903a67f2803a64e800420|@3585,1048575| 3585:S23|434f44455452454528292e6d6b5265634c6f6164283129 3586:O2|@3588,@3587 3587:O2|@3590,@274 3588:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@3589,1048575| 3589:S20|434f44455452454528292e6d6b4c6f6164283129 3590:C2,128|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7001882b600343a830000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00003a6000019263000c908300083a400003924300049283000083150004801800007c0903a67f2803a64e800420|@3591,1048575| 3591:S20|434f44455452454528292e6d6b4c6f6164283229 3592:O2|@3593,@3533 3593:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@3594,1048575| 3594:S19|434f44455452454528292e6d6b496e64283129 3595:O2|@3597,@3596 3596:O2|@3599,@274 3597:C2,64|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180c3000c80a30008808300048063000083180004801800007c0903a64e800420|@3598,1048575| 3598:S20|434f44455452454528292e6d6b50726f63283129 3599:C2,156|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7001882b60044829600043a630000398000083bbdffdc7c1df04040a00010800d001c7c0803a64e800021387d0004919d00003a4000019243001c3a20000192230018821400049203001490a3001039e0000191e3000c9083000890c300049263000083150004801800007c0903a67f2803a64e800420|@3600,1048575| 3600:S20|434f44455452454528292e6d6b50726f63283429 3601:O2|@3603,@3602 3602:O2|@3605,@274 3603:C2,64|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180c3000c80a30008808300048063000083180004801800007c0903a64e800420|@3604,1048575| 3604:S23|434f44455452454528292e6d6b496e6c70726f63283129 3605:C2,156|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7001882b60044829600003a630000398000083bbdffdc7c1df04040a00010800d001c7c0803a64e800021387d0004919d00003a4000019243001c3a20000192230018821400049203001490a3001039e0000191e3000c9083000890c300049263000083150004801800007c0903a67f2803a64e800420|@3606,1048575| 3606:S23|434f44455452454528292e6d6b496e6c70726f63283429 3607:O2|@3609,@3608 3608:O2|@3611,@274 3609:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@3610,1048575| 3610:S20|434f44455452454528292e6d6b4576616c283129 3611:C2,116|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7001882b600303a830000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000090a30008928300049083000083150004801800007c0903a67f2803a64e800420|@3612,1048575| 3612:S20|434f44455452454528292e6d6b4576616c283329 3613:O3|@3614,@274,@2250 3614:C2,96|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d70010973bfffc80180008941bfffc83160014801800007c0803a64e800021831b0000833b0004801800007c0903a67f2803a63b7b00084e800420|@3615,1048575| 3615:S19|434f44455452454528292e6d6b537472283129 3616:O3|@3617,@274,@2250 3617:C2,220|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc947bfffc3c60000060635ba883180008801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d00003b0000019319000482fb000092f9000082db000482b6000482950018827400303a430000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003a20000392230008924300049323000083130004833b0008801800007c0903a67f2803a63b7b000c4e800420|@3618,1048575|44,3,I218 3618:S19|434f44455452454528292e6d6b4e6f74283129 3619:O4|@3621,@274,@3620,@2086 3620:O2|-3,I251 3621:C2,216|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ac0000192d7000482d8000c92d70000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d000092f5000490750000829800048274001882530030398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003a20000392230008821800089203000492a3000083120004801800007c0903a67f2803a64e800420|@3622,1048575| 3622:S24|434f44455452454528292e6d6b546573746e756c6c283129 3623:O4|@3625,@274,@3624,@2086 3624:O2|-3,I217 3625:C2,216|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ac0000192d7000482d8000c92d70000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d000092f5000490750000829800048274001882530030398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003a20000392230008821800089203000492a3000083120004801800007c0903a67f2803a64e800420|@3626,1048575| 3626:S27|434f44455452454528292e6d6b546573746e6f746e756c6c283129 3627:O2|@3629,@3628 3628:O3|@3631,@274,@2250 3629:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@3630,1048575| 3630:S25|434f44455452454528292e6d6b54657374696e746571283129 3631:C2,272|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc947bfffc949bfffc3c60000060635d0883180008801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d00003b0000019319000482fb000092f90000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213add0004919d00009336000482bb000492b60000829b00088274000482530018823200303a030000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000039e0000391e300089203000492c3000083110004833b000c801800007c0903a67f2803a63b7b00104e800420|@3632,1048575|48,3,I229 3632:S25|434f44455452454528292e6d6b54657374696e746571283229 3633:O2|@3635,@3634 3634:O3|@3637,@274,@3620 3635:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@3636,1048575| 3636:S25|434f44455452454528292e6d6b546573747074726571283129 3637:C2,212|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ac0000192d7000490970000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021389d0004919d000092e40004906400008078000482e3001882d70030398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003aa0000392a3000882980008928300049083000083160004801800007c0903a67f2803a64e800420|@3638,1048575| 3638:S25|434f44455452454528292e6d6b546573747074726571283229 3639:O2|@3641,@3640 3640:O3|@3643,@2086,@2242 3641:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@3642,1048575| 3642:S20|434f44455452454528292e6d6b43616e64283129 3643:C2,108|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000213ae30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000082d8000492c300089083000492e3000083180008801800007c0903a67f2803a64e800420|@3644,1048575| 3644:S20|434f44455452454528292e6d6b43616e64283229 3645:O2|@3647,@3646 3646:O3|@3649,@1879,@2242 3647:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@3648,1048575| 3648:S19|434f44455452454528292e6d6b436f72283129 3649:C2,108|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000213ae30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00009083000882d8000492c3000492e3000083180008801800007c0903a67f2803a64e800420|@3650,1048575| 3650:S19|434f44455452454528292e6d6b436f72283229 3651:O2|@3653,@3652 3652:O2|@3655,@274 3653:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@3654,1048575| 3654:S19|434f44455452454528292e6d6b446563283129 3655:C2,120|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7001882b6002c3a830000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003a60000192630008908300049283000083150004801800007c0903a67f2803a64e800420|@3656,1048575| 3656:S19|434f44455452454528292e6d6b446563283229 3657:C2,348|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7001882b60024973bfffc971bfffc947bfffc83150000801800007c0803a64e8000212803000141820038829b0004827400048253001882320024807b000083110008801800007c0803a64e800021821b00087e0803a63b7b000c4e800020829b0004827400048253001882320038807b000083110000801800007c0803a64e8000212803000141820050821b000481f0000481cf0018814e0038807b0000830a0008801800007c0803a64e800021813b000483090008801800007c0803a64e800021831b0004833b00087f2803a63b7b000c4bffff10821b000481f0000481cf000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021395d0004919d00003d2002aa612910f8912a00083d0002a06108c7ac910a000480ee000090ea0000386a0000800d00287c0803a64e800021|@3659,1048575|300,3,@3658 312,3,@227 3658:S22|6576616c75653a204e6f74206120636f6e7374616e74 3659:S20|434f44455452454528292e6576616c7565283129 3660:O78|@3662,@3665,@3668,@3671,@3676,@3679,@3683,@3687,@3695,@3703,@3711,@3719,@3727,@3735,@3742,@3750,@3758,@3766,@3770,@3774,@3778,@3782,@3786,@3790,@3794,@3798,@3802,@3810,@3818,@3822,@3826,@3831,@3836,@3839,@3842,@3844,@3846,@3849,@3851,@3854,@3861,@3866,@201,@2610,@3869,@2616,@3872,@3875,@3878,@2593,@3884,@3966,@4021,0,@4023,@4026,@4083,@4086,@4089,@4095,@4098,@4101,@4104,@4106,@4111,@4116,@4121,@4124,@4127,@4135,@4143,@3549,@4147,@4169,@4173,@4177,@4148,@3661 3661:O3|@4185,@4186,@4184 3662:O1|@3663 3663:C2,8|806300044e800020|@3664,524289| 3664:S24|5354525543545f56414c5328292e7369674e616d65283129 3665:O1|@3666 3666:C2,8|806300004e800020|@3667,524289| 3667:S23|5354525543545f56414c5328292e736967546162283129 3668:O1|@3669 3669:C2,28|83030000281800034082000c386000034e800020386000014e800020|@3670,786433| 3670:S26|5354525543545f56414c5328292e6973556e7365744964283129 3671:O1|@3672 3672:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180830004806300003c0002aa600013d87c0903a64e800420|@3675,1032195|40,3,@3673 3673:C2,516|7f2802a663390002973bfffc949bfffc808300002c04fffd40820040832300048319000082f800002c1700034082000c3b2300004800002838780000800d00187c1b004040a00010800d00207c0803a64e8000214bffffbc3b230000973bfffc831b0004809800002c04fffd40820040807800048323000082f900002c1700034082000c3af80000480000283b190000800d00187c1b004040a00010800d00207c0803a64e8000214bffffbc3af80000807b0000832300002c19fffd4082005c82d700002c16fffd4082003c82a30004829700047c15a0404082001838600003833b00087f2803a63b7b000c4e80002038600001833b00087f2803a63b7b000c4e8000203860000182bb00087ea803a63b7b000c4e8000202c19ffff4082005c82d700002c16ffff4082003c82a30004829700047c15a0404082001838600003833b00087f2803a63b7b000c4e80002038600001833b00087f2803a63b7b000c4e8000203860000182bb00087ea803a63b7b000c4e8000202c1900014082007482d700002c1600014082005482a30004829700047eaba378556bf80140a20010800d00347c0803a64e8000217c15a0004082001838600003833b00087f2803a63b7b000c4e80002038600001833b00087f2803a63b7b000c4e8000203860000182bb00087ea803a63b7b000c4e8000203860000182fb00087ee803a63b7b000c4e800020|@3674,1032195| 3674:S27|5354525543545f56414c5328292e73616d65547970654964283229 3675:S27|5354525543545f56414c5328292e73616d65547970654964283129 3676:O1|@3677 3677:C2,36|830300002c1800014082000c806300044e80002082e3000482d70000387600004e800020|@3678,983041| 3678:S22|5354525543545f56414c5328292e706c696e67283129 3679:O2|@3680,@773 3680:O1|@3681 3681:C2,28|83030000281800014082000c386000034e800020386000014e800020|@3682,786433| 3682:S7|42616454797065 3683:O2|@3684,@206 3684:O1|@3685 3685:C2,32|3b00ffff82e300007c18b8404082000c386000034e800020386000014e800020|@3686,917505| 3686:S9|456d70747954797065 3687:O3|@3689,@3692,@3688 3688:O1|@3694 3689:O1|@3690 3690:C2,28|83030000281800034082000c386000034e800020386000014e800020|@3691,786433| 3691:S12|46756e6374696f6e54797065 3692:O1|@3693 3693:C2,76|7f2802a6633900028303000082e30004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092e30008930300043b000003930300007f2803a64e800020|@3691,917505| 3694:C2,68|7f2802a6633900028303000482e30008398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092e30004930300007f2803a64e800020|@3691,917505| 3695:O3|@3697,@3700,@3696 3696:O1|@3702 3697:O1|@3698 3698:C2,32|3b00fffd82e300007c18b8404082000c386000034e800020386000014e800020|@3699,917505| 3699:S12|4c6162656c6c656454797065 3700:O1|@3701 3701:C2,84|7f2802a6633900028303000082e3000482c30008398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d000092c3000c92e30008930300043b00fffd930300007f2803a64e800020|@3699,983041| 3702:C2,76|7f2802a6633900028303000482e3000882c3000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092c3000892e30004930300007f2803a64e800020|@3699,983041| 3703:O3|@3705,@3708,@3704 3704:O1|@3710 3705:O1|@3706 3706:C2,28|83030000281800054082000c386000034e800020386000014e800020|@3707,786433| 3707:S11|4f7665726c6f6164536574 3708:O1|@3709 3709:C2,68|7f2802a6633900023b030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000930300043b000005930300007f2803a64e800020|@3707,786433| 3710:C2,8|806300044e800020|@3707,524289| 3711:O3|@3713,@3716,@3712 3712:O1|@3718 3713:O1|@3714 3714:C2,32|3b00fffb82e300007c18b8404082000c386000034e800020386000014e800020|@3715,917505| 3715:S16|54797065436f6e737472756374696f6e 3716:O1|@3717 3717:C2,84|7f2802a6633900028303000082e3000482c30008398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d000092c3000c92e30008930300043b00fffb930300007f2803a64e800020|@3715,983041| 3718:C2,76|7f2802a6633900028303000482e3000882c3000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092c3000892e30004930300007f2803a64e800020|@3715,983041| 3719:O3|@3721,@3724,@3720 3720:O1|@3726 3721:O1|@3722 3722:C2,28|83030000281800074082000c386000034e800020386000014e800020|@3723,786433| 3723:S7|54797065566172 3724:O1|@3725 3725:C2,76|7f2802a6633900028303000082e30004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092e30008930300043b000007930300007f2803a64e800020|@3723,917505| 3726:C2,68|7f2802a6633900028303000482e30008398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092e30004930300007f2803a64e800020|@3723,917505| 3727:O3|@3729,@3732,@3728 3728:O1|@3734 3729:O1|@3730 3730:C2,28|83030000281800014082000c386000034e800020386000014e800020|@3731,786433| 3731:S6|466f726d616c 3732:O1|@3733 3733:C2,68|7f2802a6633900023b030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000930300043b000001930300007f2803a64e800020|@3731,786433| 3734:C2,8|806300044e800020|@3731,524289| 3735:O3|@3737,@3739,@3736 3736:O1|@3741 3737:O1|@3738 3738:C2,32|3b00ffff82e300007c18b8404082000c386000034e800020386000014e800020|@2289,917505| 3739:O1|@3740 3740:C2,68|7f2802a6633900023b030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000930300043b00ffff930300007f2803a64e800020|@2289,786433| 3741:C2,8|806300044e800020|@2289,524289| 3742:O3|@3744,@3747,@3743 3743:O1|@3749 3744:O1|@3745 3745:C2,28|83030000281800034082000c386000034e800020386000014e800020|@3746,786433| 3746:S5|4c6f63616c 3747:O1|@3748 3748:C2,76|7f2802a6633900028303000082e30004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092e30008930300043b000003930300007f2803a64e800020|@3746,917505| 3749:C2,68|7f2802a6633900028303000482e30008398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092e30004930300007f2803a64e800020|@3746,917505| 3750:O3|@3752,@3755,@3751 3751:O1|@3757 3752:O1|@3753 3753:C2,32|3b00fffd82e300007c18b8404082000c386000034e800020386000014e800020|@3754,917505| 3754:S10|4f7665726c6f61646564 3755:O1|@3756 3756:C2,68|7f2802a6633900023b030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000930300043b00fffd930300007f2803a64e800020|@3754,786433| 3757:C2,8|806300044e800020|@3754,524289| 3758:O3|@3760,@3763,@3759 3759:O1|@3765 3760:O1|@3761 3761:C2,28|83030000281800054082000c386000034e800020386000014e800020|@3762,786433| 3762:S8|53656c6563746564 3763:O1|@3764 3764:C2,76|7f2802a6633900028303000082e30004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092e30008930300043b000005930300007f2803a64e800020|@3762,917505| 3765:C2,68|7f2802a6633900028303000482e30008398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092e30004930300007f2803a64e800020|@3762,917505| 3766:O2|@3767,0 3767:O1|@3768 3768:C2,24|280300014082000c386000034e800020386000014e800020|@3769,524289| 3769:S11|4164644f7665726c6f6164 3770:O2|@3771,-1 3771:O1|@3772 3772:C2,28|3b00ffff7c1818404082000c386000034e800020386000014e800020|@3773,786433| 3773:S5|457175616c 3774:O2|@3775,1 3775:O1|@3776 3776:C2,24|280300034082000c386000034e800020386000014e800020|@3777,524289| 3777:S9|496e7374616c6c5050 3778:O2|@3779,-2 3779:O1|@3780 3780:C2,28|3b00fffd7c1818404082000c386000034e800020386000014e800020|@3781,786433| 3781:S10|4d616b65537472696e67 3782:O2|@3783,2 3783:O1|@3784 3784:C2,24|280300054082000c386000034e800020386000014e800020|@3785,524289| 3785:S15|4d616b65537472696e675370616365 3786:O2|@3787,-3 3787:O1|@3788 3788:C2,28|3b00fffb7c1818404082000c386000034e800020386000014e800020|@3789,786433| 3789:S8|4e6f74457175616c 3790:O2|@3791,3 3791:O1|@3792 3792:C2,24|280300074082000c386000034e800020386000014e800020|@3793,524289| 3793:S5|5072696e74 3794:O2|@3795,-4 3795:O1|@3796 3796:C2,28|3b00fff97c1818404082000c386000034e800020386000014e800020|@3797,786433| 3797:S10|5072696e745370616365 3798:O2|@3799,4 3799:O1|@3800 3800:C2,24|280300094082000c386000034e800020386000014e800020|@3801,524289| 3801:S7|54797065446570 3802:O3|@3804,@3807,@3803 3803:O1|@3809 3804:O1|@3805 3805:C2,8|386000034e800020|@3806,524289| 3806:S5|56616c7565 3807:O1|@3808 3808:C2,4|4e800020|@3806,524289| 3809:C2,4|4e800020|@3806,524289| 3810:O3|@3812,@3815,@3811 3811:O1|@3817 3812:O1|@3813 3813:C2,64|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000213f00000063184d88801800007c0803a64e800021686300027f2803a64e800020|@3814,917505|32,3,I105 3814:S11|436f6e7374727563746f72 3815:O1|@3816 3816:C2,60|7f2802a6633900023b030000398000013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d0000930300007f2803a64e800020|@3814,786433| 3817:C2,8|806300004e800020|@3814,524289| 3818:O2|@3819,0 3819:O1|@3820 3820:C2,24|280300014082000c386000034e800020386000014e800020|@3821,524289| 3821:S9|457863657074696f6e 3822:O2|@3823,-1 3823:O1|@3824 3824:C2,28|3b00ffff7c1818404082000c386000034e800020386000014e800020|@3825,786433| 3825:S11|53696d706c6556616c7565 3826:O1|@3827 3827:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180830004806300003c0002aa600028c87c0903a64e800420|@3830,786435|40,3,@3828 3828:C2,12|80830000386400004e800020|@3829,524291| 3829:S24|5354525543545f56414c5328292e747656616c7565283229 3830:S24|5354525543545f56414c5328292e747656616c7565283129 3831:O1|@3832 3832:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180830004806300003c0002aa6000298c7c0903a64e800420|@3835,917507|40,3,@3833 3833:C2,32|8303000082e400007c18b8404082000c386000034e800020386000014e800020|@3834,917507| 3834:S23|5354525543545f56414c5328292e73616d655476283229 3835:S23|5354525543545f56414c5328292e73616d655476283129 3836:O1|@3837 3837:C2,8|806300004e800020|@3838,524289| 3838:S23|5354525543545f56414c5328292e74634e616d65283129 3839:O1|@3840 3840:C2,8|8063000c4e800020|@3841,524289| 3841:S27|5354525543545f56414c5328292e74635479706556617273283129 3842:O1|@3843 3843:C2,44|8303001082d800002c1600014082000c82f800044800001082f8000482b700003af50000807700044e800020|@1542,1015809| 3844:O1|@3845 3845:C2,44|8303001082d800002c1600014082000c82f800044800001082f8000482b700003af50000807700084e800020|@1542,1015809| 3846:O1|@3847 3847:C2,8|806300144e800020|@3848,524289| 3848:S29|5354525543545f56414c5328292e74634964656e746966696572283129 3849:O1|@3850 3850:C2,44|8303001082d800002c1600014082000c82f800044800001082f8000482b700003af50000807700004e800020|@1542,1015809| 3851:O1|@3852 3852:C2,8|806300084e800020|@3853,524289| 3853:S27|5354525543545f56414c5328292e74634c65744465707468283129 3854:O1|@3855 3855:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180830004806300003c0002aa60002c947c0903a64e800420|@3860,1040387|40,3,@3856 3856:C2,152|7f2802a6633900028303001082d800002c1600014082000c82f800044800001082f8000482b700003af50000398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213abd0004919d000090950008809700049095000482970000929500002c16ffff408200188278000492b30000386000017f2803a64e800020973bfffc3c6002aa60632d48800d00287c0803a64e800021|@3859,1040387|132,3,@3857 3857:O3|103,@327,@3858 3858:S24|41737369676e6d656e7420746f2066726f7a656e20726566 3859:S34|5354525543545f56414c5328292e7463536574436f6e7374727563746f7273283229 3860:S34|5354525543545f56414c5328292e7463536574436f6e7374727563746f7273283129 3861:O1|@3862 3862:C2,80|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002183030010971bfffc82e3001496fbfffc80c3000c80a3000880830004806300003c0002aa60002e447c0903a64e800420|@3865,917519|64,3,@3863 3863:C2,364|7f2802a663390002973bfffc947bfffc949bfffc94bbfffc94dbfffc3b0000012c0400014082000c3af8000048000048398000025700f80140a20010800d00347c0803a64e8000217cd8661541a3fff0808400043b060000800d00187c1b004040a00010800d00207c0803a64e8000214bffffb0398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002138dd0004919d000038a0000190a60008809b000490860004807b0018906600003d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090d90000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b1d0004919d00009338000438c0ffff90d80000398000063bbdffe47c1df04040a00010800d001c7c0803a64e80002138bd0004919d0000809b00009085001493050010833b00089325000c831b00149305000892e5000482fb000c92e500003865000080db00107cc803a63b7b001c4e800020|@3864,917519| 3864:S32|5354525543545f56414c5328292e6d616b6554797065436f6e73747273283629 3865:S32|5354525543545f56414c5328292e6d616b6554797065436f6e73747273283129 3866:O1|@3867 3867:C2,140|7f2802a663390002973bfffc832300002c19fffd408200408303000482f8000082d700002c1600034082000c3b2300004800002838770000800d00187c1b004040a00010800d00207c0803a64e8000214bffffbc3b230000831900002c18ffff408200183860000382fb00007ee803a63b7b00044e8000203860000182fb00007ee803a63b7b00044e800020|@3868,983041| 3868:S25|5354525543545f56414c5328292e6973467265654964283129 3869:O6|@3871,0,0,0,@2612,@3870 3870:O2|-1,@9425 3871:S4|63686172 3872:O6|@3874,0,0,0,@2612,@3873 3873:O2|-1,@9426 3874:S4|776f7264 3875:O6|@3877,0,0,0,@2595,@3876 3876:O2|-1,@9427 3877:S4|7265616c 3878:O6|@3880,0,0,0,@3881,@3879 3879:O2|-1,@9428 3880:S4|756e6974 3881:O2|0,@3882 3882:O3|1,@3883,0 3883:O4|-2,1,0,0 3884:O6|@3886,1,0,@3887,@3889,@3885 3885:O2|-1,@9437 3886:S4|6c697374 3887:O2|@3888,0 3888:O3|3,@9429,79992 3889:O2|-1,@9430 3890:O3|1,@206,@3891 3891:O2|@3893,@3892 3892:O2|@3945,0 3893:O4|@3895,@773,@3896,@3894 3894:O3|1,@3939,@3938 3895:S2|3a3a 3896:O2|-1,@3897 3897:O2|5,@3898 3898:O2|-1,@3899 3899:O5|0,@3901,@3934,@9434,@3900 3900:O2|10,@3935 3901:O3|@218,@3903,@3902 3902:O8|@2535,@274,@2542,@230,@2505,@2545,@2250,@3926 3903:O2|@222,@3904 3904:O5|@225,@229,0,@274,@3905 3905:O10|0,@3907,@3917,@3906,0,0,0,0,0,0 3906:O1|@3923 3907:O1|@3908 3908:O2|-1,@3909 3909:O5|0,@2515,@2526,@9431,@3910 3910:O2|-7,@3911 3911:O8|@3912,@3895,0,0,1,0,0,0 3912:O4|4,@3914,@3913,1 3913:O2|-3,I218 3914:O2|@3915,0 3915:O4|4,@2531,@3916,1 3916:O2|-3,I105 3917:O1|@3918 3918:O2|-1,@3919 3919:O5|0,@2515,@3921,@9432,@3920 3920:O2|-7,@3922 3921:O5|-5,2,1,0,0 3922:O8|@2532,@3895,0,0,1,0,0,0 3923:O2|-1,@3924 3924:O5|0,@2515,@3925,@9433,@3920 3925:O5|-5,3,1,0,0 3926:O4|@3928,@3930,@3929,@3927 3927:O1|@3933 3928:O3|@3930,@3929,@3927 3929:O1|@3932 3930:O1|@3931 3931:C2,64|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000213f00000063184d88801800007c0803a64e800021686300027f2803a64e800020|@3895,917505|32,3,I105 3932:C2,4|4e800020|@3895,524289| 3933:C2,4|4e800020|@3895,524289| 3934:O2|-3,@3928 3935:O2|@2526,@3936 3936:O2|@3921,@3937 3937:O2|@3925,0 3938:O4|-3,@3887,@3886,@3944 3939:O4|-2,1,@3940,0 3940:O2|@3942,@3941 3941:O2|@3943,0 3942:O2|49,@3888 3943:O2|50,@3938 3944:O2|0,@3884 3945:O4|@3947,@211,@3946,@3938 3946:O2|-1,@3948 3947:S3|6e696c 3948:O2|5,@3949 3949:O2|-1,@3950 3950:O5|0,@3951,@3965,@9435,@2559 3951:O3|@218,@3953,@3952 3952:O8|@2535,@274,@2542,@230,@2505,@2545,@2250,@3961 3953:O2|@222,@3954 3954:O5|@225,@229,0,@274,@3955 3955:O10|0,@3956,@2565,0,0,0,0,0,0,0 3956:O1|@3957 3957:O2|-1,@3958 3958:O5|0,@2515,@2526,@9436,@3959 3959:O2|-7,@3960 3960:O8|@2571,@3947,0,0,1,0,0,0 3961:O2|@3963,@3962 3962:O1|@3964 3963:O2|@3962,0 3964:C2,24|280300014082000c386000034e800020386000014e800020|@3947,524289| 3965:O2|-3,@3963 3966:O6|@3968,1,0,@3969,@3971,@3967 3967:O2|-1,@9445 3968:S3|726566 3969:O2|@3970,0 3970:O3|3,@9438,79992 3971:O2|-1,@9439 3972:O3|1,@206,@3973 3973:O2|@3974,0 3974:O4|@3968,@773,@3976,@3975 3975:O3|1,@4018,@4017 3976:O2|-1,@3977 3977:O2|5,@3978 3978:O2|-1,@3979 3979:O5|0,@3980,@4016,@9440,@3900 3980:O3|@218,@3982,@3981 3981:O8|@2535,@274,@2542,@230,@2505,@2545,@2250,@4008 3982:O2|@222,@3983 3983:O5|@225,@229,0,@274,@3984 3984:O10|0,@3986,@3991,@3985,0,0,0,0,0,0 3985:O1|@4001 3986:O1|@3987 3987:O2|-1,@3988 3988:O5|0,@2515,@2526,@9441,@3989 3989:O2|-7,@3990 3990:O8|@1879,@3968,0,0,1,0,0,0 3991:O1|@3992 3992:O2|-1,@3993 3993:O5|0,@2515,@3921,@9442,@3994 3994:O2|-7,@3995 3995:O8|@3996,@3968,0,0,1,0,0,0 3996:O4|4,@3998,@3997,0 3997:O2|-3,I11 3998:O2|@1879,@3999 3999:O2|@4000,@2531 4000:O2|-3,64 4001:O2|-1,@4002 4002:O5|0,@2515,@3925,@9443,@4003 4003:O2|-7,@4004 4004:O8|@4005,@3968,0,0,1,0,0,0 4005:O4|4,@4007,@4006,0 4006:O2|-3,I253 4007:O2|@2532,@2580 4008:O4|@4010,@4012,@4011,@4009 4009:O1|@4015 4010:O3|@4012,@4011,@4009 4011:O1|@4014 4012:O1|@4013 4013:C2,8|386000034e800020|@3968,524289| 4014:C2,64|7f2802a6633900023b0300003d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d0000930300007f2803a64e800020|@3968,786433| 4015:C2,8|806300004e800020|@3968,524289| 4016:O2|-3,@4010 4017:O4|-3,@4020,@3968,@4019 4018:O3|3,@9444,79993 4019:O2|0,@3966 4020:O2|@4018,0 4021:O6|@4022,0,0,0,@2595,@211 4022:S9|756e646566696e6564 4023:O1|@4024 4024:C2,24|280300014082000c386000034e800020386000014e800020|@4025,524289| 4025:S34|5354525543545f56414c5328292e6973556e646566696e6564537472756374283129 4026:O2|@4028,@4027 4027:O4|@4031,@330,@4032,@4030 4028:C2,168|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082007c82f8000482d7000c973bfffc3860000183160000801800007c0803a64e800021398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003a8000019295000c3a600001927500083e40000062524668925500049075000038750000823b00007e2803a63b7b00044e800020806300084e800020|@4029,1048575|124,3,I48 4029:S29|5354525543545f56414c5328292e7374727563745369676e6174283129 4030:O4|@4051,@4057,@4074,@4050 4031:O1|@2086 4032:O4|@4034,@4042,@4045,@4033 4033:O1|@4048 4034:O1|@4035 4035:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc947bfffc947bfffc3a990000389b00003c0002aa60003e6c7c0803a64e800021398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000809b000090830000833b000493230004831b0008930300087e8803a63b7b000c4e800020|@4041,1032195|52,3,@4036 4036:C2,236|7f2802a6633900023d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d00003b00000193030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b1d0004919d00003ee002aa62f73f7492f8000090780004398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002aa62d63fdc92d7000090770004398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002aa62b5402892b600009076000492c400009304000492e40008386000017f2803a64e800020|@4040,1015811|92,3,@4037 144,3,@4038 196,3,@4039 4037:C2,76|7f2802a6633900023ae30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092e300083ae0008b92e3000482f8000492e300007f2803a64e800020|@337,917505| 4038:C2,48|82e3000082d800047c17b0404082000c806300084e800020973bfffc3c6002a160630a30800d00287c0803a64e800021|@337,983041|28,3,@341 4039:C2,32|82e3000082d800047c17b0404082000c386000034e800020386000014e800020|@337,983041| 4040:S16|556e6976657273616c2e746167283229 4041:S16|556e6976657273616c2e746167283129 4042:O1|@4043 4043:C2,8|806300004e800020|@4044,524289| 4044:S19|556e6976657273616c2e74616749732d236973 4045:O1|@4046 4046:C2,8|806300044e800020|@4047,524289| 4047:S27|556e6976657273616c2e746167496e6a6563742d23696e6a656374 4048:C2,8|806300084e800020|@4049,524289| 4049:S29|556e6976657273616c2e74616750726f6a6563742d2370726f6a656374 4050:O1|@4079 4051:O1|@4052 4052:C2,72|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc386000153c0002aa600041ec7c0803a64e800021833b00007f2803a63b7b00044e800020|@4056,1048575|40,3,@4053 4053:C2,564|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc947bfffc97fbfffc3f0002aa63184382971bfffc3ae0000996fbfffc3bfb00003d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213add0004919d00003aa0000192b60000398000025460f80140a20010800d00347c0803a64e8000217e83661541a3fff038a0000138800081387400003f000000631841c8801800007c0803a64e800021827b000c926300003d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213a5d0004919d000090720000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a3d0004919d00003e0002a7621022b892110000927100043d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e80002139fd0004919d0000922f0000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00009243000c92c3000891e3000439c0ffff91c3000083fb0008815b00107d4803a63b7b00144e800020812300002c0900094082008c947bfffc3880ffff807b00043c0002a06000fe6c7c0803a64e800021388300003c6002aa6063443c3c0002a1600074a87c0803a64e800021398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021391d0004919d0000906800083ce002a060e7c7ac90e800043cc002e060c6a22490c8000038680000800d00287c0803a64e800021800d00287c0803a64e800021|@4055,1048575|44,3,$4053+406 160,3,I11 268,3,@2648 428,3,@316 448,3,@4054 456,3,@511 512,3,@227 524,3,@9377 4054:S16|486173685461626c652e686173683a20 4055:S21|486173685461626c652e686173684d616b65283129 4056:S31|556e6976657273616c5461626c652e6d616b65556e69765461626c65283129 4057:O1|@4058 4058:C2,64|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180c3000c80a3000880830004806300003c0002aa600045007c0903a64e800420|@4073,1048575|48,3,@4059 4059:C2,228|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc947bfffc949bfffc94bbfffc3866000083040004801800007c0803a64e800021947bfffc809b0004807b000c3c0002a760003c907c0803a64e800021706b000140820024806300003b1b00103c0002aa600046007c0803a64e8000213b23000048000038398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d00003b0000019319000482fb000092f9000038b90000809b0004807b000c833b00103c0002aa600047807c0903a67f2803a63b7b00144e800420|@4072,1048575|80,3,@2739 112,3,@4060 204,3,@4062 4060:C2,312|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c03000140820040398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003ae0000192e3000482f8fff092e300007f2803a64e80002082f8fff8973bfffc971bfffc80030000941bfffc80030004941bfffc807b000483170000801800007c0803a64e800021280300014182005082db0008398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d0000829b0000929500048276fff09275000038750000825b000c7e4803a63b7b00104e800020807b0000831b00084bffff11398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213add0004919d00009076000482bb000492b6000038760000829b000c7e8803a63b7b00104e800020|@4061,1048575| 4061:S36|556e6976657273616c5461626c652e756e6976456e746572283429736561726368283129 4062:C2,784|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021830300002c18000140820084973bfffc3c6002aa60634aac3c0002a1600074a87c0803a64e8000213c8002aa60844ad83c0002a1600074a87c0803a64e800021398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213afd0004919d0000907700083ec002a162d6088892d700043aa000cf92b7000038770000800d00287c0803a64e80002182e3000c82d7000082b600008283000482740000973bfffc949bfffc94bbfffc969bfffc80030008941bfffc96fbfffc96dbfffc96bbfffc386400003b130000801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a5d0004919d0000823b001492320004821b00189212000038b2000038830000807b00043c0002aa60004af87c0803a64e80002181fb000c81cf00003980000255c0f80140a20010800d00347c0803a64e8000217d4e661541a3fff0914f0000812f00003900000b3988ffff7d2b40385560f80140a20010800d00347c0803a64e8000217d2b0e707cec5dd741a3ffec38e7000180db000038a000093985ffff7ccb28385560f80140a20010800d00347c0803a64e8000217ccb0e707c8c5dd741a3ffec388400017ceb2038556bf80140a20010800d00347c0803a64e8000217c072000408101043986ffff54c0f80140a20010800d00347c0803a64e8000217c66661541a3fff0398000025460f80140a20010800d00347c0803a64e8000217f23661541a3fff03ac3000038a0000138800081387900003f000000631841c8801800007c0803a64e80002192c30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003e8002a06294c0509295000092d5000496dbfffc947bfffc827b001090730000825b001892b20000823b000c82110000398000025600f80140a20010800d00347c0803a64e8000217c6c841141a3fff03b1b00243c0002aa60004e607c0803a64e80002181fb00247de803a63b7b00284e80002038600001833b001c7f2803a63b7b00204e800020|@4071,1048575|48,3,@4063 56,3,@511 72,3,@4064 80,3,@511 136,3,@327 312,3,@4065 588,3,I11 648,3,@178 732,3,@4069 4063:S34|417474656d707420746f2073657420612076616c75652077697468206e616d652028 4064:S24|2920696e20612066726f7a656e2068617368207461626c65 4065:C2,104|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0500014082000c386000014e80002094bbfffc947bfffc80050000941bfffc3a590000386400003b1b00083c0002aa60004b7c7c0803a64e8000217e4803a63b7b000c4e800020|@4068,1044487|76,3,@4066 4066:C2,624|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021546bf80140a20010800d00347c0803a64e8000212c030001408000084800003082f8fffc82d700007c6bb038556bf80140a20010800d00347c0803a64e8000217c03b0004080000848000020973bfffc3ac300003c6002a0606395e0800d00287c0803a64e800021398000025460f80140a20010800d00347c0803a64e8000217ec3661541a3fff056cc083a7eb7602e3af500002c170001408200a0546bf80140a20010800d00347c0803a64e8000212c030001408000084800003082f8fffc82d700007c6bb038556bf80140a20010800d00347c0803a64e8000217c03b000408000084800001c973bfffc3c6002a0606395e0800d00287c0803a64e800021398000025460f80140a20010800d00347c0803a64e8000217ea3661541a3fff08078000056ab083a7c77592e386000017f2803a64e8000203ad900003ab800003a8300008095fff8807700003f00000063184368801800007c0803a64e80002128030001418200a0568bf80140a20010800d00347c0803a64e8000212c14000140800008480000308095fffc806400007e8b1838556bf80140a20010800d00347c0803a64e8000217c141800408000084800001c96dbfffc3c6002a0606395e0800d00287c0803a64e800021398000025680f80140a20010800d00347c0803a64e8000217f34661541a3fff083150000572b083a7f04592e386000017ec803a64e8000202c140001408200148095fffc806400003a630000480000083a740000398000025660f80140a20010800d00347c0803a64e8000217c6c9c1141a3fff03b1500003b3600007f2803a64bfffd9c|@4067,1040387|116,3,@51 268,3,@51 364,3,I24 472,3,@51 4067:S39|486173685461626c652e68617368536574283329656e746572546162283329656e746572283129 4068:S31|486173685461626c652e68617368536574283329656e746572546162283329 4069:C2,364|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021546bf80140a20010800d00347c0803a64e8000212c03000140800010386000017f2803a64e800020546bf80140a20010800d00347c0803a64e8000212c030001408000084800003082f8ffe882d700007c6bb038556bf80140a20010800d00347c0803a64e8000217c03b0004080000848000020973bfffc3ac300003c6002a0606395e0800d00287c0803a64e800021398000025460f80140a20010800d00347c0803a64e8000217ec3661541a3fff056cc083a7eb7602e3af500002c17000140820008480000603ab900003a9800003a6300003a5700008094ffe0807200003c0002a06000c0a07c0803a64e8000213a3500003a14000039f3000038b20000388300008070ffdc3c0002aa60004af87c0803a64e800021386f00003b1000003b310000398000025460f80140a20010800d00347c0803a64e8000217c6c1c1141a3fff07f2803a64bfffea0|@4070,1048071|156,3,@51 256,3,@179 296,3,@4065 4070:S31|486173685461626c652e68617368536574283329636f70794f766572283129 4071:S20|486173685461626c652e68617368536574283329 4072:S27|556e6976657273616c5461626c652e756e6976456e746572283429 4073:S27|556e6976657273616c5461626c652e756e6976456e746572283129 4074:O1|@4075 4075:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a3000880830004806300003c0002aa600050d47c0903a64e800420|@4078,1048575|44,3,@4076 4076:C2,288|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc949bfffc388500003c0002a760003c907c0803a64e8000212c0300014082001838600001833b00047f2803a63b7b00084e800020832300002c1900014082001838600001831b00047f0803a63b7b00084e800020831b000080190000941bfffc80190004941bfffc807b000483180000801800007c0803a64e800021280300014182005882fb0008807b000483170008801800007c0803a64e8000213ac30000398000013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d000092c3000082bb000c7ea803a63b7b00104e800020833b00003b7b0008800d00187c1b004040a00010800d00207c0803a64e8000214bffff40|@4077,1048575|44,3,@2739 4077:S28|556e6976657273616c5461626c652e756e69764c6f6f6b7570283329 4078:S28|556e6976657273616c5461626c652e756e69764c6f6f6b7570283129 4079:C2,68|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc3c0002aa600052b87c0803a64e800021833b00007f2803a63b7b00044e800020|@4082,1048575|36,3,@4080 4080:C2,348|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021830300002c18ffff4082013082e3000482d7000082a3000c82950000827400002c130001408200103e40000062524688480000bc973bfffc96dbfffc969bfffc967bfffc97fbfffc3e2002aa62315366963bfffc3a000001961bfffc3bfb000038a0000138800001387300003f000000631841c8801800007c0803a64e80002139e3000083fb0008480000183c6002a06063a344800d00287c0803a64e800021967bfffc38c0000138af000038800003387400003f000000631858c8801800007c0803a64e800021386f00003f00000063184648801800007c0803a64e8000213a4f00003b7b00144800000c973bfffc96dbfffc398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00009243000892c300043a20000192230000821b00047e0803a63b7b00084e8000204e800020|@4081,1048575|72,3,I49 104,3,$4080+174 140,3,I11 172,3,@78 212,3,I195 236,3,I47 4081:S23|486173685461626c652e68617368467265657a65283129 4082:S28|556e6976657273616c5461626c652e756e6976467265657a65283129 4083:O1|@4084 4084:C2,28|2c030001408200103c600000606346684e800020806300004e800020|@4085,524289|8,3,I48 4085:S27|5354525543545f56414c5328292e7374727563744e616d65283129 4086:O1|@4087 4087:C2,40|2c0300014082001c973bfffc3c6002a160630a30800d00287c0803a64e800021806300044e800020|@4088,524289|12,3,@341 4088:S29|5354525543545f56414c5328292e737472756374416363657373283129 4089:O2|@4091,@4090 4090:O2|@4093,@4027 4091:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@4092,1048575| 4092:S35|5354525543545f56414c5328292e6d616b6553656c6563746564537472756374283129 4093:C2,400|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c03000140820020973bfffc3ac300003c6002a160630a30800d00287c0803a64e80002182e3000482d700002c1600014082013c2c030001408200103ea0000062b546684800000882a300002c03000140820080827800048253000c973bfffc949bfffc80170004941bfffc96bbfffc3860000183120000801800007c0803a64e800021398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213a3d0004919d00003a0000019211000c39e0000191f100083dc0000061ce466891d10004907100003a9100004800001c82830008973bfffc949bfffc80170004941bfffc96bbfffc398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a7d0004919d0000825b000892530008823b0004923300043a00000592130000398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002139fd0004919d0000928f0008926f000481db000091cf0000386f0000815b000c7d4803a63b7b00104e8000204e800020|@4094,1048575|48,3,@341 92,3,I48 216,3,I48 4094:S35|5354525543545f56414c5328292e6d616b6553656c6563746564537472756374283229 4095:O1|@4096 4096:C2,40|2c0300014082001c973bfffc3c6002a160630a30800d00287c0803a64e800021806300044e800020|@4097,524289|12,3,@341 4097:S28|5354525543545f56414c5328292e66756e63746f724e616d65283129 4098:O1|@4099 4099:C2,40|2c0300014082001c973bfffc3c6002a160630a30800d00287c0803a64e800021806300004e800020|@4100,524289|12,3,@341 4100:S27|5354525543545f56414c5328292e66756e63746f72417267283129 4101:O1|@4102 4102:C2,40|2c0300014082001c973bfffc3c6002a160630a30800d00287c0803a64e8000218063000c4e800020|@4103,524289|12,3,@341 4103:S30|5354525543545f56414c5328292e66756e63746f72526573756c74283129 4104:O4|@4105,-1,@2645,@773 4105:S11|3c756e646566696e65643e 4106:O1|@4107 4107:C2,64|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180c3000c80a3000880830004806300003c0002aa6000599c7c0903a64e800420|@4110,786447|48,3,@4108 4108:C2,112|7f2802a663390002398000013bbdfff87c1df04040a00010800d001c7c0803a64e8000213b1d0004919d000090b80000398000043bbdffec7c1df04040a00010800d001c7c0803a64e80002138bd0004919d00009085000c90c500089305000490650000386500007f2803a64e800020|@4109,786447| 4109:S32|5354525543545f56414c5328292e6d616b6556616c7565436f6e737472283429 4110:S32|5354525543545f56414c5328292e6d616b6556616c7565436f6e737472283129 4111:O1|@4112 4112:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a3000880830004806300003c0002aa60005ad87c0903a64e800420|@4115,786439|44,3,@4113 4113:C2,124|7f2802a663390002398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b1d0004919d000090b8000438a0ffff90b80000398000043bbdffec7c1df04040a00010800d001c7c0803a64e80002138bd0004919d00009085000c930500083880ffff9085000490650000386500007f2803a64e800020|@4114,786439| 4114:S28|5354525543545f56414c5328292e6d616b65476c6f62616c56283329 4115:S28|5354525543545f56414c5328292e6d616b65476c6f62616c56283129 4116:O1|@4117 4117:C2,64|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180c3000c80a3000880830004806300003c0002aa60005c1c7c0903a64e800420|@4120,786447|48,3,@4118 4118:C2,128|7f2802a663390002398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213b1d0004919d000090d8000890b8000438c0000390d80000398000043bbdffec7c1df04040a00010800d001c7c0803a64e80002138bd0004919d00009085000c930500083880ffff9085000490650000386500007f2803a64e800020|@4119,786447| 4119:S27|5354525543545f56414c5328292e6d616b654c6f63616c56283429 4120:S27|5354525543545f56414c5328292e6d616b654c6f63616c56283129 4121:O1|@4122 4122:C2,8|806300004e800020|@4123,524289| 4123:S24|5354525543545f56414c5328292e76616c4e616d65283129 4124:O1|@4125 4125:C2,8|8063000c4e800020|@4126,524289| 4126:S26|5354525543545f56414c5328292e76616c547970654f66283129 4127:O3|@4129,@4132,@4128 4128:O1|@4134 4129:O1|@4130 4130:C2,28|83030000281800014082000c386000034e800020386000014e800020|@4131,786433| 4131:S5|496e666978 4132:O1|@4133 4133:C2,68|7f2802a6633900023b030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000930300043b000001930300007f2803a64e800020|@4131,786433| 4134:C2,8|806300044e800020|@4131,524289| 4135:O3|@4137,@4140,@4136 4136:O1|@4142 4137:O1|@4138 4138:C2,32|3b00ffff82e300007c18b8404082000c386000034e800020386000014e800020|@4139,917505| 4139:S6|496e66697852 4140:O1|@4141 4141:C2,68|7f2802a6633900023b030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000930300043b00ffff930300007f2803a64e800020|@4139,786433| 4142:C2,8|806300044e800020|@4139,524289| 4143:O2|@4144,@211 4144:O1|@4145 4145:C2,28|83030000281800034082000c386000034e800020386000014e800020|@4146,786433| 4146:S6|4e6f6e666978 4147:O8|@4149,@4027,@4165,@4169,@4173,@3661,@4177,@4148 4148:O3|@4182,@4183,@4181 4149:C2,876|7f2802a663390002398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002aa62d663a092d7000082d8000492d7000c82a3000092b700088298001c92970004398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213a7d0004919d00003e4002aa625264589253000092d3000c92b300088258001892530004398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213a3d0004919d00003e0002aa621064ec9211000092d1000c92b100088218001492110004398000043bbdffec7c1df04040a00010800d001c7c0803a64e80002139fd0004919d00003dc002aa61ce658091cf000092cf000c92af000881d8001091cf0004398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021395d0004919d00003d2002aa61296614912a000092ca000c92aa00088138000c912a0004398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021391d0004919d00003ce002aa60e766a890e8000092c8000c92a8000880f8000890e80004398000043bbdffec7c1df04040a00010800d001c7c0803a64e80002138dd0004919d00003ca002aa60a5673c90a6000092c6000c92a6000892860004398000043bbdffec7c1df04040a00010800d001c7c0803a64e80002138bd0004919d00003c8002aa608468009085000092c5000c92a5000892450004398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021389d0004919d00003ea002aa62b5689c92a4000092c4000c82a3000092a4000892040004398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003e8002aa629469389295000092d5000c828300009295000891d50004398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213a9d0004919d00003ec002aa62d669d492d4000082d8000492d4000c82c3000092d4000891340004398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213add0004919d00003e4002aa62526a7092560000825800049256000c820300009216000890f600043980000c3bbdffcc7c1df04040a00010800d001c7c0803a64e800021387d0004919d000091e3002c9103002892a300249263002092c3001c92e30018914300149223001090a3000c90c3000892830004908300007f2803a64e800020|@4164,1048575|44,3,@4150 116,3,@4152 180,3,@4153 244,3,@4154 308,3,@4155 372,3,@4156 436,3,@4157 496,3,@4159 556,3,@4160 620,3,@4161 684,3,@4162 752,3,@4163 4150:C2,120|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000c82d7000c3aa30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a300088298000492830004827800089263000083160008801800007c0903a67f2803a64e800420|@4151,1048575| 4151:S28|5354525543545f56414c5328292e6d616b654c6f6f6b283229283129 4152:C2,120|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000c82d7000c3aa30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a300088298000492830004827800089263000083160008801800007c0903a67f2803a64e800420|@4151,1048575| 4153:C2,120|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000c82d7000c3aa30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a300088298000492830004827800089263000083160008801800007c0903a67f2803a64e800420|@4151,1048575| 4154:C2,120|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000c82d7000c3aa30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a300088298000492830004827800089263000083160008801800007c0903a67f2803a64e800420|@4151,1048575| 4155:C2,120|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000c82d7000c3aa30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a300088298000492830004827800089263000083160008801800007c0903a67f2803a64e800420|@4151,1048575| 4156:C2,120|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000c82d7000c3aa30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a300088298000492830004827800089263000083160008801800007c0903a67f2803a64e800420|@4151,1048575| 4157:C2,128|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000c82d7000c82a3000082830004398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00009283000c92a300088278000492630004825800089243000083160004801800007c0903a67f2803a64e800420|@4158,1048575| 4158:S29|5354525543545f56414c5328292e6d616b65456e746572283229283129 4159:C2,128|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000c82d7000c82a3000082830004398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00009283000c92a300088278000492630004825800089243000083160004801800007c0903a67f2803a64e800420|@4158,1048575| 4160:C2,128|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000c82d7000c82a3000082830004398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00009283000c92a300088278000492630004825800089243000083160004801800007c0903a67f2803a64e800420|@4158,1048575| 4161:C2,128|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000c82d7000c82a3000082830004398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00009283000c92a300088278000492630004825800089243000083160004801800007c0903a67f2803a64e800420|@4158,1048575| 4162:C2,128|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000c82d7000c82a3000082830004398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00009283000c92a300088278000492630004825800089243000083160004801800007c0903a67f2803a64e800420|@4158,1048575| 4163:C2,128|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000c82d7000c82a3000082830004398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00009283000c92a300088278000492630004825800089243000083160004801800007c0903a67f2803a64e800420|@4158,1048575| 4164:S24|5354525543545f56414c5328292e6d616b65456e76283129 4165:O3|@4167,@4168,@4166 4166:O2|@4038,@9446 4167:O2|@4039,@9446 4168:O2|@4037,@9446 4169:O3|@4171,@4172,@4170 4170:O2|@4038,@9447 4171:O2|@4039,@9447 4172:O2|@4037,@9447 4173:O3|@4175,@4176,@4174 4174:O2|@4038,@9408 4175:O2|@4039,@9408 4176:O2|@4037,@9408 4177:O3|@4179,@4180,@4178 4178:O2|@4038,@9403 4179:O2|@4039,@9403 4180:O2|@4037,@9403 4181:O2|@4038,@9369 4182:O2|@4039,@9369 4183:O2|@4037,@9369 4184:O2|@4038,@9448 4185:O2|@4039,@9448 4186:O2|@4037,@9448 4187:O14|@4189,@4456,@4462,@4468,@4513,@4558,@4571,@4585,@4591,@4597,@4603,@4624,@4517,@4188 4188:O2|@4630,@4487 4189:O2|@4191,@4190 4190:O2|@4194,@4193 4191:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@4192,1048575| 4192:S33|545950455f5452454528292e6d6b54797065436f6e737472756374696f6e283129 4193:O9|@4197,@4208,@4223,@4250,@4334,@4365,@4392,@4402,@4196 4194:C2,340|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7000c973bfffc971bfffc947bfffc949bfffc94bbfffc80160034941bfffc386400008316006c801800007c0803a64e800021831b0000801800007c0803a64e800021280300014182005c829b0010827400048253000c823200043d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d0000821b00089203000083110004801800007c0803a64e8000213aa300004800002c82bb0010829500048274000c82530000807b000883120004801800007c0803a64e8000213aa30000823b00108211000481f0000c81cf0024398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a30008815b000c91430004813b000491230000830e0004833b0014801800007c0903a67f2803a63b7b00184e800420|@4195,1048575| 4195:S33|545950455f5452454528292e6d6b54797065436f6e737472756374696f6e283329 4196:O2|@886,@3580 4197:O33|@1111,@1112,@9396,@1118,@1118,@1115,@1121,@1867,@1125,@4199,@2183,@1869,I47,I15,I17,@4201,I17,4,0,1,2,3,32,64,128,@1875,@4203,@1872,@4205,@2184,I204,@1866,@4198 4198:O1|@4207 4199:O1|@4200 4200:C2,32|8303000082e3000482c300087ecc0e707eeb0e707d9859ae386000014e800020|@1871,983041| 4201:O1|@4202 4202:C2,28|80830004806300003f00000063185968801800007c0903a64e800420|@1127,1048575|8,3,I200 4203:O1|@4204 4204:C2,40|8983fffc558c083c6198000173030007280300034082000c386000034e800020386000014e800020|@1874,786433| 4205:O1|@4206 4206:C2,40|8983fffc558c083c6198000173030007280300074082000c386000034e800020386000014e800020|@1874,786433| 4207:C2,28|80830004806300003f00000063185b48801800007c0903a64e800420|@1127,917507|8,3,I215 4208:O3|@4210,@4209,@332 4209:O3|@4218,@4220,@4217 4210:O3|@4212,@4214,@4211 4211:O2|@4216,@9393 4212:O2|@4213,@9393 4213:C2,32|82e3000082d800047c17b0404082000c386000034e800020386000014e800020|@337,983041| 4214:O2|@4215,@9393 4215:C2,76|7f2802a6633900023ae30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092e300083ae0008b92e3000482f8000492e300007f2803a64e800020|@337,917505| 4216:C2,48|82e3000082d800047c17b0404082000c806300084e800020973bfffc3c6002a160630a30800d00287c0803a64e800021|@337,983041|28,3,@341 4217:O2|@4222,@9389 4218:O2|@4219,@9389 4219:C2,32|82e3000082d800047c17b0404082000c386000034e800020386000014e800020|@337,983041| 4220:O2|@4221,@9389 4221:C2,76|7f2802a6633900023ae30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092e300083ae0008b92e3000482f8000492e300007f2803a64e800020|@337,917505| 4222:C2,48|82e3000082d800047c17b0404082000c806300084e800020973bfffc3c6002a160630a30800d00287c0803a64e800021|@337,983041|28,3,@341 4223:O5|@4225,@4231,@4238,@4224,@3571 4224:O1|@4246 4225:O2|@4227,@4226 4226:O2|@4229,@2721 4227:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@4228,1048575| 4228:S19|4c45585f28292e6572726f7250726f63283129 4229:C2,136|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e3000496fbfffc82c3000896dbfffc82a3000c96bbfffc82830010969bfffc82630014967bfffc82430018965bfffc8223001c963bfffc82030020961bfffc81e3002495fbfffc80c3000039c5000038a00003386e000083180004801800007c0903a64e800420|@4230,1048575| 4230:S19|4c45585f28292e6572726f7250726f63283329 4231:O2|@4233,@4232 4232:O3|@4235,@2721,@2728 4233:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@4234,1048575| 4234:S22|4c45585f28292e6572726f724d657373616765283129 4235:C2,196|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002aa62d6761492d7000082d8000892d7000890b7000482a3000496bbfffc82830008969bfffc8263000c967bfffc82430010965bfffc82230014963bfffc82030018961bfffc81e3001c95fbfffc81c3002095dbfffc81430024955bfffc80c3000038a000033877000083180004801800007c0903a67f2803a64e800420|@4237,1048575|68,3,@4236 4236:C2,104|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000882d70000973bfffc971bfffc83160000801800007c0803a64e80002182bb00003a830000807500043b140000833b0004801800007c0903a67f2803a63b7b00084e800420|@2725,1048575| 4237:S22|4c45585f28292e6572726f724d657373616765283329 4238:O2|@4240,@4239 4239:O3|@4242,@2721,@2728 4240:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@4241,1048575| 4241:S24|4c45585f28292e7761726e696e674d657373616765283129 4242:C2,196|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002aa62d6782c92d7000082d8000892d7000890b7000482a3000496bbfffc82830008969bfffc8263000c967bfffc82430010965bfffc82230014963bfffc82030018961bfffc81e3001c95fbfffc81c3002095dbfffc81430024955bfffc80c3000038a000013877000083180004801800007c0903a67f2803a64e800420|@4245,1048575|68,3,@4243 4243:C2,104|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000882d70000973bfffc971bfffc83160000801800007c0803a64e80002182bb00003a830000807500043b140000833b0004801800007c0903a67f2803a63b7b00084e800420|@4244,1048575| 4244:S27|4c45585f28292e7761726e696e674d657373616765283329283129 4245:S24|4c45585f28292e7761726e696e674d657373616765283329 4246:C2,112|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002183030010971bfffc82e3001496fbfffc82c3001896dbfffc82a3001c96bbfffc82830020969bfffc82630024967bfffc80c3000c80a3000880830004806300003c0002aa600079807c0903a64e800420|@4249,1048575|96,3,@4247 4247:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002138600001831b0014801800007c0903a63b7b00184e800420|@4248,1048575| 4248:S17|4c45585f28292e6c696e656e6f28313029 4249:S16|4c45585f28292e6c696e656e6f283129 4250:O50|@4252,@4260,@3676,@4268,@3679,@3683,@3687,@3695,@3703,@3711,@3719,@4121,@4124,@3668,@4273,@4276,@3671,@4279,@4284,@3836,@4287,@3839,@3842,@4290,@3844,@3849,@4295,@3846,@3851,@3861,@4300,@206,@4305,@4310,@4315,@4320,@3826,@4325,@3831,@4251,9999,@201,@2610,@3869,@2616,@3872,@3875,@3878,@2593,@4021 4251:O1|@4330 4252:O3|@4254,@4257,@4253 4253:O1|@4259 4254:O1|@4255 4255:C2,28|83030000281800014082000c386000034e800020386000014e800020|@4256,786433| 4256:S9|46726f7a656e526566 4257:O1|@4258 4258:C2,68|7f2802a6633900023b030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000930300043b000001930300007f2803a64e800020|@4256,786433| 4259:C2,8|806300044e800020|@4256,524289| 4260:O3|@4262,@4265,@4261 4261:O1|@4267 4262:O1|@4263 4263:C2,32|3b00ffff82e300007c18b8404082000c386000034e800020386000014e800020|@4264,917505| 4264:S11|5661726961626c65526566 4265:O1|@4266 4266:C2,68|7f2802a6633900023b030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000930300043b00ffff930300007f2803a64e800020|@4264,786433| 4267:C2,8|806300044e800020|@4264,524289| 4268:O1|@4269 4269:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180830004806300003c0002aa60007d2c7c0903a64e800420|@4272,917507|40,3,@4270 4270:C2,52|830300002c18ffff4082001482e3000490970000386000014e800020973bfffc3c6002aa60632d48800d00287c0803a64e800021|@4271,917507|32,3,@3857 4271:S25|5354525543545f56414c5328292e7570646174655052283229 4272:S25|5354525543545f56414c5328292e7570646174655052283129 4273:O1|@4274 4274:C2,140|7f2802a663390002973bfffc832300002c19fffd408200408303000482f8000082d700002c1600034082000c3b2300004800002838770000800d00187c1b004040a00010800d00207c0803a64e8000214bffffbc3b230000831900002c180001408200183860000382fb00007ee803a63b7b00044e8000203860000182fb00007ee803a63b7b00044e800020|@4275,983041| 4275:S26|5354525543545f56414c5328292e6973426f756e644964283129 4276:O1|@4277 4277:C2,140|7f2802a663390002973bfffc832300002c19fffd408200408303000482f8000082d700002c1600034082000c3b2300004800002838770000800d00187c1b004040a00010800d00207c0803a64e8000214bffffbc3b230000831900002c18fffd408200183860000382fb00007ee803a63b7b00044e8000203860000182fb00007ee803a63b7b00044e800020|@4278,983041| 4278:S29|5354525543545f56414c5328292e69735661726961626c654964283129 4279:O1|@4280 4280:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180830004806300003c0002aa60007fcc7c0903a64e800420|@4283,1032195|40,3,@4281 4281:C2,640|7f2802a663390002973bfffc949bfffc808300002c04fffd40820040832300048319000082f800002c1700034082000c3b2300004800002838780000800d00187c1b004040a00010800d00207c0803a64e8000214bffffbc3b230000973bfffc831b0004809800002c04fffd40820040807800048323000082f900002c1700034082000c3af80000480000283b190000800d00187c1b004040a00010800d00207c0803a64e8000214bffffbc3af80000807b0000832300002c1900014082009882d700002c1600014082005482a30004829700047eaba378556bf80140a20010800d00347c0803a64e8000217c15a0004082001838600003833b00087f2803a63b7b000c4e80002038600001833b00087f2803a63b7b000c4e8000202c16fffd4082002082b700049075000038600003829b00087e8803a63b7b000c4e8000203860000182bb00087ea803a63b7b000c4e8000202c19ffff4082008082d700002c16ffff4082003c82a30004829700047c15a0404082001838600003833b00087f2803a63b7b000c4e80002038600001833b00087f2803a63b7b000c4e8000202c16fffd4082002082b700049075000038600003829b00087e8803a63b7b000c4e8000203860000182bb00087ea803a63b7b000c4e8000202c19fffd4082006882d700002c16fffd4082004082a30004829700047c15a0404082001838600003833b00087f2803a63b7b000c4e80002092f5000038600003833b00087f2803a63b7b000c4e80002082a3000492f5000038600003829b00087e8803a63b7b000c4e80002082d700002c16fffd4082002082b700049075000038600003829b00087e8803a63b7b000c4e8000203860000182bb00087ea803a63b7b000c4e800020|@4282,1032195| 4282:S29|5354525543545f56414c5328292e756e69667954797065496473283229 4283:S29|5354525543545f56414c5328292e756e69667954797065496473283129 4284:O1|@4285 4285:C2,116|7f2802a6633900023d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d00003b000001930300003b030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000930300043b00ffff930300007f2803a64e800020|@4286,786433| 4286:S27|5354525543545f56414c5328292e6d616b65467265654964283129 4287:O1|@4288 4288:C2,8|806300044e800020|@4289,524289| 4289:S24|5354525543545f56414c5328292e74634172697479283129 4290:O1|@4291 4291:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180830004806300003c0002aa6000841c7c0903a64e800420|@4294,1040387|40,3,@4292 4292:C2,152|7f2802a6633900028303001082d800002c1600014082000c82f800044800001082f8000482b700003af50000398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213abd0004919d000082970008929500089095000480970000909500002c16ffff408200188278000492b30000386000017f2803a64e800020973bfffc3c6002aa60632d48800d00287c0803a64e800021|@4293,1040387|132,3,@3857 4293:S32|5354525543545f56414c5328292e74635365744571756976616c656e74283229 4294:S32|5354525543545f56414c5328292e74635365744571756976616c656e74283129 4295:O1|@4296 4296:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180830004806300003c0002aa6000857c7c0903a64e800420|@4299,1040387|40,3,@4297 4297:C2,152|7f2802a6633900028303001082d800002c1600014082000c82f800044800001082f8000482b700003af50000398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213abd0004919d000082970008929500088277000492750004909500002c16ffff408200188098000492a40000386000017f2803a64e800020973bfffc3c6002aa60632d48800d00287c0803a64e800021|@4298,1040387|132,3,@3857 4298:S30|5354525543545f56414c5328292e7463536574457175616c697479283229 4299:S30|5354525543545f56414c5328292e7463536574457175616c697479283129 4300:O1|@4301 4301:C2,80|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002183030010971bfffc82e3001496fbfffc80c3000c80a3000880830004806300003c0002aa600086f47c0903a64e800420|@4304,917519|64,3,@4302 4302:C2,320|7f2802a663390002973bfffc947bfffc949bfffc94bbfffc94dbfffc3b0000012c0400014082000c3af8000048000048398000025700f80140a20010800d00347c0803a64e8000217cd8661541a3fff0808400043b060000800d00187c1b004040a00010800d00207c0803a64e8000214bffffb0398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002138dd0004919d000038a0000190a60008809b000490860004807b001890660000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090d900043b00000193190000398000063bbdffe47c1df04040a00010800d001c7c0803a64e80002138dd0004919d000080bb000090a6001493260010809b00089086000c833b00149326000892e60004831b000c930600003866000082fb00107ee803a63b7b001c4e800020|@4303,917519| 4303:S38|5354525543545f56414c5328292e6d616b6546726f7a656e54797065436f6e73747273283629 4304:S38|5354525543545f56414c5328292e6d616b6546726f7a656e54797065436f6e73747273283129 4305:O1|@4306 4306:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180830004806300003c0002aa6000890c7c0903a64e800420|@4309,786435|40,3,@4307 4307:C2,108|7f2802a663390002548ce8fe558c003c61830001546bf80140a20010800d00347c0803a64e8000212c030001408000383c8002a06084c2743983ffff7c8b18385560f80140a20010800d00347c0803a64e8000217c64661541a3fff07f2803a64e8000207f2803a64e800020|@4308,524291|48,3,@180 4308:S24|5354525543545f56414c5328292e74764c6576656c283229 4309:S24|5354525543545f56414c5328292e74764c6576656c283129 4310:O1|@4311 4311:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180830004806300003c0002aa60008a307c0903a64e800420|@4314,786435|40,3,@4312 4312:C2,32|70830009280300014082000c3b000003480000083b0000016b0300024e800020|@4313,786435| 4313:S27|5354525543545f56414c5328292e7476457175616c697479283229 4314:S27|5354525543545f56414c5328292e7476457175616c697479283129 4315:O1|@4316 4316:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180830004806300003c0002aa60008b107c0903a64e800420|@4319,786435|40,3,@4317 4317:C2,32|70830005280300014082000c3b000003480000083b0000016b0300024e800020|@4318,786435| 4318:S31|5354525543545f56414c5328292e74764e6f6e556e69666961626c65283229 4319:S31|5354525543545f56414c5328292e74764e6f6e556e69666961626c65283129 4320:O1|@4321 4321:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180830004806300003c0002aa60008bf87c0903a64e800420|@4324,786435|40,3,@4322 4322:C2,32|70830003280300014082000c3b000003480000083b0000016b0300024e800020|@4323,786435| 4323:S23|5354525543545f56414c5328292e74765765616b283229 4324:S23|5354525543545f56414c5328292e74765765616b283129 4325:O1|@4326 4326:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180830004806300003c0002aa60008cd07c0903a64e800420|@4329,786435|40,3,@4327 4327:C2,16|8303000090980000386000014e800020|@4328,786435| 4328:S27|5354525543545f56414c5328292e747653657456616c7565283229 4329:S27|5354525543545f56414c5328292e747653657456616c7565283129 4330:C2,156|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc947bfffc3ab9000080c3001094dbfffc38bb000494bbfffc80c3000c80a3000880830004806300003c0002aa60008dfc7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000809b000090830000833b0004932300047ea803a63b7b00084e800020|@4333,1015823|76,3,@4331 4331:C2,220|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000213d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213b1d0004919d000090780000708b00014182000c3ae40000480000283ad80000386400003f00000063185368801800007c0803a64e8000213ae300003b16000056ec183661840001280500014182000c3860000948000008386000017c971b78280600014182000c3ac00005480000083ac000017ee6b37880bb00047cc42b78807b00009303000090830004386000017f2803a63b7b00084e800020|@4332,983055|100,3,I152 4332:S23|5354525543545f56414c5328292e6d616b655476283629 4333:S23|5354525543545f56414c5328292e6d616b655476283129 4334:O2|@4336,@4335 4335:O1|@4347 4336:O1|@4337 4337:C2,128|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc947bfffc3a990000389b00003c0002aa60008fec7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000809b000090830000833b0004932300047e8803a63b7b00084e800020|@4346,1032195|48,3,@4338 4338:C2,188|7f2802a6633900023d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213b1d0004919d00003ae0000192f80000398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002aa62d690c492d700009077000893170004398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002aa62b593a492b60000931600089076000492e4000092c40004386000017f2803a64e800020|@4345,1015811|92,3,@4339 148,3,@4343 4339:C2,344|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d70000973bfffc971bfffc947bfffc80030000941bfffc96dbfffc2c1600014082000c3aa0000148000090829b000c82760000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000825b000492430004823300009223000080160004941bfffc83140008801800007c0803a64e800021280300014182000c3aa000034800002882db00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffff6c3b7b00042815000141820024807b00003b1b00103c0002aa600092387c0803a64e8000213a03000048000008821b000081fb000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002139dd0004919d0000920e0004815b0008914e0000812f000491c9000038600001811b00107d0803a63b7b00144e800020|@4342,1048575|236,3,@4340 4340:C2,252|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e80002082f8fffc82c3000082a30004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008298fff4928300048276000092630000973bfffc971bfffc96dbfffc96bbfffc83170008801800007c0803a64e8000212803000141820018807b0000825b000c7e4803a63b7b00104e800020807b0000831b00084bffff4d398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a5d0004919d000090720004823b00049232000038720000821b000c7e0803a63b7b00104e800020|@4341,1048575| 4341:S33|5554494c49544945535f28292e6d61705461626c6528322964656c657465283229 4342:S32|5554494c49544945535f28292e6d61705461626c65283229656e746572283129 4343:C2,276|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000882d70000973bfffc971bfffc947bfffc2c1600014082001838600001833b00087f2803a63b7b000c4e80002080760000833b00048303000082e30004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082bb000092a300049303000096fbfffc80160004941bfffc83190004801800007c0803a64e8000212803000141820040398000013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d0000829b000492830000827b00107e6803a63b7b00144e80002082db00003b7b0008800d00187c1b004040a00010800d00207c0803a64e8000214bffff24|@4344,1048575| 4344:S33|5554494c49544945535f28292e6d61705461626c652832296c6f6f6b7570283129 4345:S24|5554494c49544945535f28292e6d61705461626c65283229 4346:S24|5554494c49544945535f28292e6d61705461626c65283129 4347:C2,132|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc947bfffc973bfffc389b00043c0002aa600095e07c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000833b000493230000831b00089303000482fb00007ee803a63b7b000c4e800020|@4364,1048575|48,3,@4348 4348:C2,592|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021706b00014182000c3b0000034800001081830000558c083c61980001398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213afd0004919d000090770008931700043b00000193170000973bfffc947bfffc949bfffc3c8002aa6084984c387700003c0002aa600098bc7c0803a64e80002182e3000082c30004387700003c0002aa60009c847c0803a64e800021280300014182003082bb00003e8000006294466892950000827b00049275000438600001825b00087e4803a63b7b000c4e800020387700003c0002aa600099a47c0803a64e80002182a3000456abf80140a20010800d00347c0803a64e8000212c150003408000588263000082430008398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000924300083a20000192230004926300003c0002aa60009c247c0803a64e8000213a830000480000543a95fffe8263000082430008398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00009243000892830004926300003c0002aa60009c247c0803a64e8000213a830000387400003c0002aa600099a47c0803a64e80002196dbfffc80a3000480830000806300083c0002aa60009ce87c0803a64e8000213a230000807b00003c0002aa600099a47c0803a64e800021963bfffc80a3000480830000806300083c0002aa60009ce87c0803a64e800021821b000881fb000091f00000907000043860000181db00107dc803a63b7b00144e800020|@4363,1048575|124,3,@4349 136,3,@4352 164,3,@4359 192,3,I48 236,3,@4353 344,3,@4356 428,3,@4356 452,3,@4353 484,3,@4361 508,3,@4353 540,3,@4361 4349:O1|@4350 4350:C2,28|2803005d4082000c3b000003480000083b0000016b0300024e800020|@4351,786433| 4351:S40|5554494c49544945535f28292e73706c6974537472696e672832293c7061747465726e3e2d283129 4352:C2,204|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000213af900003c0002aa600099a47c0803a64e80002180030008941bfffc80030004941bfffc80030000941bfffc949bfffc807b0004833b00087d83ca143b0cffff947bfffc947bfffc96fbfffc389b0004387800003b1b00183c0002aa600099d47c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082fb000492e3000082db000892c3000482bb00007ea803a63b7b001c4e800020|@4358,1048575|36,3,@4353 120,3,@4355 4353:C2,4|4e800020|@4354,524289| 4354:S5|536c696365 4355:C2,564|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8fff87c03b840408200b83ac30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000082b8000092a300083a8000019283000492c300003ad900003a9800003c0002aa60009c247c0803a64e8000213b230000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a300088314fffc9303000492e300003a7900003c0002aa60009c247c0803a64e8000219264000090640004386000017ec803a64e8000203ac3fffe82b8000072ab0001418200103a83000038750000480000203a9600083a6300007e8c0e707d7560ae556b083c616300013a930000973bfffc971bfffc969bfffc949bfffc8318fff4801800007c0803a64e8000212803000141820028825b00043a32fffe809b000038710000831b0008833b000c7f2803a63b7b00104bfffea8825b0008823b00048212fff87d90881039ec0001398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000081d2000091c3000891e30004920300003c0002aa60009c247c0803a64e8000218152fffc7d8a8214392cffff7d914810390c000138e30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000091c3000891030004922300003c0002aa60009c247c0803a64e80002180db000090e60000906600043860000180bb000c7ca803a63b7b00104e800020|@4357,1048575|112,3,@4356 188,3,@4356 428,3,@4356 516,3,@4356 4356:C2,4|4e800020|@4354,524289| 4357:S26|537562737472696e672e73706c69747228322966696e64283229 4358:S19|537562737472696e672e73706c697472283229 4359:C2,28|83030004281800014082000c386000034e800020386000014e800020|@4360,786433| 4360:S34|566563746f72536c6963654f7065726174696f6e7328292e6973456d707479283129 4361:C2,400|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021706b00014182000c3b0000034800001081830000558c083c619800012c040001408200107c05c040408200084e8000202c050001408200103c600000606346684e8000202c0500034082002038a400087cac0e707d6360ae556b083c61640001386400004e8000203b0500103af8fffe3b0000092c18000140a20010800d00307c0803a64e8000213998ffff3977ffff7d6b6396556b083c61760001973bfffc947bfffc949bfffc94bbfffc97fbfffc3ea002aa62b59dfe96bbfffc3a800001969bfffc3bfb000038a0000138800083387600003f000000631841c8801800007c0803a64e8000213a63000083fb0008480000183c6002a06063a344800d00287c0803a64e800021825b000c7e4c0e7091930000821b001039f00008965bfffc38c0000938b30000388f0000807b00183f00000063185928801800007c0803a64e800021387300003f00000063184648801800007c0803a64e8000213873000081db00187dc803a63b7b001c4e800020|@4362,1048575|88,3,I48 208,3,$4361+278 244,3,I11 276,3,@78 336,3,I198 360,3,I47 4362:S33|4c696272617279537570706f72742e756e73616665537562737472696e67283329 4363:S27|5554494c49544945535f28292e73706c6974537472696e67283229 4364:S27|5554494c49544945535f28292e73706c6974537472696e67283129 4365:O9|@2111,@2114,@2117,@2120,@4367,@4370,@2731,@2110,@4366 4366:O1|@4373 4367:O1|@4368 4368:C2,8|806300044e800020|@4369,524289| 4369:S32|5072657474795072696e7465722e7070456c6964696e672d23656c6964696e67 4370:O1|@4371 4371:C2,8|806300104e800020|@4372,524289| 4372:S36|5072657474795072696e7465722e7070456e6453747265616d2d23656e6453747265616d 4373:C2,188|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc947bfffc947bfffc947bfffc947bfffc947bfffc947bfffc3ab90000389b00003c0002aa6000a0bc7c0803a64e800021398000073bbdffe07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000809b000090830000833b000493230004831b00089303000882fb000c92e3000c82db001092c30010829b001492830014809b0018908300187ea803a63b7b001c4e800020|@4391,1032195|68,3,@4374 4374:C2,192|7f2802a663390002398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b1d0004919d00003ee002aa62f7a19892f8000090780004398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002aa62d6a28c92d700009317000492e400003f0002aa6318a30c930400043ee002aa62f7a36092e400089064000c3ec002aa62d6a38c92c400103c6002aa6063a3b8906400143f0002aa6318a3e493040018386000017f2803a64e800020|@4390,983043|44,3,@4375 96,3,@4377 116,3,@4379 128,3,@4382 144,3,@4384 156,3,@4386 168,3,@4388 4375:C2,172|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021546bf80140a20010800d00347c0803a64e8000212c03000141810010386000017f2803a64e800020973bfffc971bfffc947bfffc949bfffc3860004183180004801800007c0803a64e800021833b0004398000025720f80140a20010800d00347c0803a64e8000217f0ccc1141a3fff0809b000038780000831b0008833b000c7f2803a63b7b00104bffff60|@4376,1048575| 4376:S34|5072657474795072696e7465722e75676c795072696e74283229627265616b283229 4377:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@4378,1048575| 4378:S34|5072657474795072696e7465722e75676c795072696e74283229627265616b283129 4379:O1|@4380 4380:C2,8|386000034e800020|@4381,524289| 4381:S29|5072657474795072696e7465722e75676c795072696e74283229283129 4382:O1|@4383 4383:C2,8|386000014e800020|@4381,524289| 4384:O1|@4385 4385:C2,8|386000014e800020|@4381,524289| 4386:O1|@4387 4387:C2,8|386000014e800020|@4381,524289| 4388:O1|@4389 4389:C2,8|386000014e800020|@4381,524289| 4390:S26|5072657474795072696e7465722e75676c795072696e74283229 4391:S26|5072657474795072696e7465722e75676c795072696e74283129 4392:O2|@9377,@4393 4393:O1|@4394 4394:C2,72|7f2802a6633900023b030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003ee002aa62f7a4d092e30000930300047f2803a64e800020|@4401,917505|48,3,@4395 4395:C2,52|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021809800043c0002aa6000a5207c0903a64e800420|@4400,917507|36,3,@4396 4396:C2,76|7f2802a6633900023b030000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003ee002aa62f7a58892e3000090830008930300047f2803a64e800020|@4399,917507|48,3,@4397 4397:C2,120|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc947bfffc83180008801800007c0803a64e8000212c03000140820028833b0004807b000083190004833b0008801800007c0903a67f2803a63b7b000c4e800420833b00087f2803a63b7b000c4e800020|@4398,1048575| 4398:S24|4d6973632e6c6f6f6b757044656661756c74283229283129 4399:S21|4d6973632e6c6f6f6b757044656661756c74283229 4400:S24|4d6973632e6c6f6f6b757044656661756c74283129283129 4401:S21|4d6973632e6c6f6f6b757044656661756c74283129 4402:O1|@4403 4403:O2|@4405,@4404 4404:O3|@4408,@9449,@4407 4405:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@4406,1048575| 4406:S28|5052494e545f5441424c4528292e6765744f7665726c6f6164283129 4407:O3|@4413,@4412,@4365 4408:C2,96|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002194bbfffc971bfffc949bfffc947bfffc82f8000480770000973bfffc3b1b00103c0002aa6000a7c87c0803a64e80002182db00007ec803a63b7b00144e800020|@4411,1048575|64,3,@4409 4409:C2,376|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c030001408200183860000183180000801800007c0903a64e80042082e300003ad900003ab80000829700048277000882430004809700008075fff43f00000063184368801800007c0803a64e80002128030001418200b88235fffc8211000881f0000496dbfffc96bbfffc969bfffc967bfffc965bfffc800f0000941bfffc8075fff8830f0004801800007c0803a64e80002181db0010814efffc812a000881090004947bfffc807b001083080004801800007c0803a64e80002138e30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000090e3000480db000090c30000831b0004801800007c0803a64e800021280300014182003c4800002496dbfffc96bbfffc947bfffc967bfffc965bfffc947bfffc947bfffc48000018807b000c80bb00187ca803a63b7b001c4e800020807b0008831b0014833b00187f2803a63b7b001c4bfffe94|@4410,1048575|92,3,I24 4410:S41|5052494e545f5441424c4528292e6765744f7665726c6f61642833297365617263684c697374283129 4411:S28|5052494e545f5441424c4528292e6765744f7665726c6f6164283329 4412:O2|@3671,@3846 4413:O41|@3580,@886,@1879,@2086,@2086,@2331,@4415,@3583,@3586,@2250,@3651,@3592,@3595,@3601,@4421,@2242,@4427,@2348,@3613,@3128,@2340,@2356,@3616,@3619,@3623,@3645,@3639,@3633,@3627,@4433,@3607,@4439,@2318,@2258,@4443,@2380,@4414,@2407,@3579,@2965,@2189 4414:O2|@4447,@4446 4415:O2|@4417,@4416 4416:O2|@4419,@274 4417:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@4418,1048575| 4418:S24|434f44455452454528292e6d6b416c744d61746368283129 4419:C2,112|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7001882b600103a830000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000908300049283000083150004801800007c0903a67f2803a64e800420|@4420,1048575| 4420:S24|434f44455452454528292e6d6b416c744d61746368283229 4421:O2|@4423,@4422 4422:O2|@4425,@274 4423:C2,64|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180c3000c80a30008808300048063000083180004801800007c0903a64e800420|@4424,1048575| 4424:S25|434f44455452454528292e6d6b4d6163726f50726f63283129 4425:C2,156|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7001882b60044829600083a630000398000083bbdffdc7c1df04040a00010800d001c7c0803a64e800021387d0004919d00003a4000019243001c3a20000192230018821400049203001490a3001039e0000191e3000c9083000890c300049263000083150004801800007c0903a67f2803a64e800420|@4426,1048575| 4426:S25|434f44455452454528292e6d6b4d6163726f50726f63283429 4427:O2|@4429,@4428 4428:O5|@4431,@2086,@274,@2348,@2242 4429:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@4430,1048575| 4430:S21|434f44455452454528292e6d6b5768696c65283129 4431:C2,380|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000882d7001882b600148296004c973bfffc971bfffc947bfffc949bfffc80150004941bfffc80180010941bfffc8018000c941bfffc3860000183140004801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a7d0004919d00003a4000019253000490730000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092630004823b000c92230000831b0000801800007c0803a64e800021821b001439e30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000081d0000491c3000891e30004815b001091430000831b0004801800007c0803a64e80002139230000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000390000019103000491230000831b0008833b0018801800007c0903a67f2803a63b7b001c4e800420|@4432,1048575| 4432:S21|434f44455452454528292e6d6b5768696c65283229 4433:O2|@4435,@4434 4434:O2|@4437,@274 4435:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@4436,1048575| 4436:S22|434f44455452454528292e6d6b48616e646c65283129 4437:C2,116|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7001882b6003c3a830000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00009083000890a300049283000083150004801800007c0903a67f2803a64e800420|@4438,1048575| 4438:S22|434f44455452454528292e6d6b48616e646c65283329 4439:O2|@4440,@274 4440:C2,228|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7001882b60034973bfffc971bfffc947bfffc3c6002aa6063b1bc83150004801800007c0803a64e800021829b00048274000482530018823200448212000039e30000398000083bbdffdc7c1df04040a00010800d001c7c0803a64e800021387d0004919d000039c0000191c3001c39400001914300188130000491230014390000039103001038e0000190e3000c38c0000190c3000880bb000090a3000491e3000083110004833b0008801800007c0903a67f2803a63b7b000c4e800420|@4442,1048575|56,3,@4441 4441:O4|-1,1,0,0 4442:S30|434f44455452454528292e6964656e7469747946756e6374696f6e283129 4443:O2|@4444,@3503 4444:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@4445,1048575| 4445:S28|434f44455452454528292e6d6b536574436f6e7461696e6572283129 4446:O2|@4449,@274 4447:C2,144|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc947bfffc973bfffc38db000480a30008808300048063000083180004801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000833b000493230000831b00089303000482fb00007ee803a63b7b000c4e800020|@4448,1048575| 4448:S26|434f44455452454528292e6d756c7469706c6555736573283129 4449:C2,692|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7001882b60024973bfffc971bfffc947bfffc949bfffc94bbfffc94dbfffc83150000801800007c0803a64e8000212803000141820084829b0010827400048253001882320024807b000c83110008801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a1d0004919d00003de002aa61efb62c91f0000081db000c91d00004815b000039200001912a0000920a000438600001811b00147d0803a63b7b00184e800020829b0010827400048253001882320034807b000c83110000801800007c0803a64e80002128030001418200a8821b001081f0000481cf0018814e0034807b000c830a0008801800007c0803a64e800021813b0010398000063bbdffe47c1df04040a00010800d001c7c0803a64e800021391d0004919d00003ce002aa60e7b67890e8000080c3000090c8001480a3000890a80010809b00049088000c8329000493280008831b000c9308000482fb00003ac0000192d70000911700043860000182bb00147ea803a63b7b00184e80002038600001831b0008801800007c0803a64e800021821b0010398000043bbdffec7c1df04040a00010800d001c7c0803a64e80002139fd0004919d00003dc002aa61ceb7bc91cf0000906f000c815b0004914f000881300004912f00048109001880e8002c38c30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000038a0000190a30008809b000c9083000490c3000095fbfffc83070004801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d00003b000001931900049079000082fb00049337000082db000092d700043860000182bb00187ea803a63b7b001c4e800020|@4455,1048575|164,3,@4450 340,3,@4452 488,3,@4454 4450:C2,8|807800044e800020|@4451,786433| 4451:S29|434f44455452454528292e6d756c7469706c6555736573283429283129 4452:C2,252|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000c7c6bbb78556bf80140a20010800d00347c0803a64e8000217c03b80040820010807800047f2803a64e8000203997ffff7c6bb8385560f80140a20010800d00347c0803a64e8000217ecc1c1141a3fff0807800103996ffff7c6bb0385560f80140a20010800d00347c0803a64e8000217ea3661541a3fff0829800088274001882530034398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00003a2000019223000c92a300083a0000039203000481f8001491e3000083120004801800007c0903a67f2803a64e800420|@4453,1048575| 4453:S35|434f44455452454528292e6d756c7469706c65557365732834296c6f6164466e283129 4454:C2,168|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f800083997ffff7c6bb8385560f80140a20010800d00347c0803a64e8000217ecc1c1141a3fff082b800048295001882740034398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00003a4000019243000c92c300083a200003922300048218000c9203000083130004801800007c0903a67f2803a64e800420|@4453,1048575| 4455:S26|434f44455452454528292e6d756c7469706c6555736573283429 4456:O2|@4458,@4457 4457:O2|@4460,@4193 4458:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@4459,1048575| 4459:S29|545950455f5452454528292e6d6b46756e6374696f6e54797065283129 4460:C2,112|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7000c82b600183a830000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000908300049283000083150004801800007c0903a67f2803a64e800420|@4461,1048575| 4461:S29|545950455f5452454528292e6d6b46756e6374696f6e54797065283229 4462:O2|@4463,@4193 4463:C2,168|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7000c82b6001c973bfffc80150004941bfffc388000033f0002aa6318babc801800007c0803a64e8000213a830000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003a60000192630008928300043a40000392430000831b0000833b0004801800007c0903a67f2803a63b7b00084e800420|@4467,1048575|60,3,@4464 4464:O1|@4465 4465:C2,264|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e800020973bfffc949bfffc80030000941bfffc80030004941bfffc3880ffff807b00083c0002a06000fe6c7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d0000831b0004931900049079000082fb00083980000256e0f80140a20010800d00347c0803a64e8000217ed7661541a3fff0973bfffc38960000807b00044bffff41398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d000090750004829b00009295000038750000827b00107e6803a63b7b00144e800020|@4466,1048575|80,3,@316 4466:S26|545950455f5452454528292e6d6170746f5265636f7264283229 4467:S28|545950455f5452454528292e6d6b50726f6475637454797065283129 4468:O2|@4470,@4469 4469:O2|@4473,@4472 4470:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@4471,1048575| 4471:S25|545950455f5452454528292e67656e6572616c697365283129 4472:O4|@4476,@4487,@4193,@4475 4473:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002138a400003880000183180004801800007c0903a64e800420|@4474,1048575| 4474:S25|545950455f5452454528292e67656e6572616c697365283229 4475:O3|@4507,@4193,@206 4476:C2,188|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc947bfffc3ae4000038850000387700008318000c801800007c0803a64e80002182db0004398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003e8002aa6294be34929500009075000c827600049275000882560008925500043ca002aa60a5c2f438950000807b00003b130000833b0008801800007c0903a67f2803a63b7b000c4e800420|@4486,1048575|112,3,@4477 144,3,@4483 4477:C2,984|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7000c82b60028973bfffc971bfffc947bfffc83150000801800007c0803a64e8000212803000141820378829b0004827400048253000c82320028807b000083110008801800007c0803a64e800021821b000481f0000481cf000c947bfffc830e0080801800007c0803a64e800021815b0008812a00048109000c80e800a07c6b3b78556bf80140a20010800d00347c0803a64e8000217c03380041820018807b000480db000c7cc803a63b7b00104e800020807b0004830a000c801800007c0803a64e80002180db000880a600048085000c947bfffc807b000483040090801800007c0803a64e800021833b000c8319000482f8000c82d7001c947bfffc83160000801800007c0803a64e800021280300014182026082bb0010829500048274000c8253001c807b000083120008801800007c0803a64e800021823b001080030008941bfffc3ca002aa60a5c22838910000807b000483110008801800007c0803a64e800021821b001481f0000481cf000c814e001c947bfffc830a0000801800007c0803a64e8000212803000141820184813b00188109000480e8000c80c7001c807b000083060008801800007c0803a64e80002180bb0018808500048324000c8319002880030000941bfffc80030004941bfffc80190094941bfffc807b001883180000801800007c0803a64e800021280300014182003082db002482b600048295000c82740028807b001883130008801800007c0803a64e8000213ae30000480000183c6002a160630a30800d00287c0803a64e800021825b0024823200048211000c81f0001c398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002139dd0004919d0000815b0010914e0004813b001c912e0000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000091c30008811b00049103000480fb000890e3000096fbfffc830f0004801800007c0803a64e80002138c30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000090c3000480bb000090a30000831b0004801800007c0803a64e8000214800007c813b00188109000480e80018398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002138dd0004919d00003ca002aa60a5c28890a600083c8002a06084c7ac90860004806700009066000038660000800d00287c0803a64e800021947bfffc947bfffc947bfffc947bfffc947bfffc947bfffc807b001c82bb002c7ea803a63b7b00304e800020807b0000829b00087e8803a63b7b000c4e800020|@4482,1048575|364,3,@4478 588,3,@341 872,3,@4481 884,3,@227 4478:O1|@4479 4479:C2,4|4e800020|@4480,524289| 4480:S47|545950455f5452454528292e67656e6572616c6973655479706573283329636f707954797065566172283129283129 4481:S48|436f7079206f66206c6162656c6c6564207265636f7264206973206e6f742061206c6162656c6c6564207265636f7264 4482:S44|545950455f5452454528292e67656e6572616c6973655479706573283329636f707954797065566172283129 4483:O1|@4484 4484:C2,4|4e800020|@4485,524289| 4485:S33|545950455f5452454528292e67656e6572616c6973655479706573283329283129 4486:S30|545950455f5452454528292e67656e6572616c6973655479706573283329 4487:O7|@4489,@4193,@4190,@1111,@1111,@1111,@4488 4488:O3|@4496,@4193,@206 4489:C2,1792|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021971bfffc94bbfffc949bfffc973bfffc83180018801800007c0803a64e800021833b000c8319000482f8000c82d70028947bfffc83160000801800007c0803a64e800021280300014182004882bb0010829500048274000c82530028807b000083120008801800007c0803a64e800021807b0000831b0008833b0004801800007c0903a67f2803a63b7b00144e80042082bb0010829500048274000c82530024807b000083120000801800007c0803a64e800021280300014182020c823b00108211000481f0000c81cf0024807b0000830e0008801800007c0803a64e80002180030000941bfffc80030008941bfffc807b00043b1b00183c0002aa6000cabc7c0803a64e800021815b0018812a00048109000c947bfffc807b000483080008801800007c0803a64e800021831b0018801800007c0803a64e80002180fb001c80c7000480a6000c947bfffc8305004c801800007c0803a64e800021809b00203b230000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000831b000c9303000482fb000492e30000973bfffc83040010801800007c0803a64e80002128030001418200cc82db002482b600048295000c8016000c941bfffc807b001083140008801800007c0803a64e8000213a630000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092630004825b000892430000831b0000801800007c0803a64e8000212803000141820074823b00288211000481f0000c81cf0000807b0010830e0000801800007c0803a64e8000212803000141820048815b0028812a00048109000c80e80000807b001083070008801800007c0803a64e8000214800000c947bfffc48000018807b001880db001c7cc803a63b7b002c4e80002082db002880bb000c809b0008807b000483160008833b001c801800007c0903a67f2803a63b7b002c4e800420823b00108211000481f0000c81cf0018807b0000830e0000801800007c0803a64e8000212803000141820180815b0010812a00048109000c80e80018807b000083070008801800007c0803a64e80002180030000941bfffc80030004941bfffc80bb0014809b0010807b0004831b00184bfffcad947bfffc80bb0018809b0014807b0004831b001c4bfffc9580db001c38a30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000809b000890830004833b00009323000094bbfffc83060014801800007c0803a64e8000212803000141820068831b0020398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082fb000892e3000482db000092c3000083180014801800007c0803a64e8000212803000141820018807b001082bb00147ea803a63b7b00244e800020831b002082f8000482d7000c82b60018398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000829b000092830004827b00049263000083150004833b0014801800007c0903a67f2803a63b7b00244e800420815b0010812a00048109000c80e8001c807b000083070000801800007c0803a64e800021280300014182012480db001080a600048085000c8064001c83230008807b00003b190000801800007c0803a64e80002180030000941bfffc80030004941bfffc807b00003b1b00183c0002aa6000cc887c0803a64e800021831b00183ae30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082db000092c3000492e3000096fbfffc83180010801800007c0803a64e8000212803000141820018807b000c82bb00107ea803a63b7b00204e80002082bb001c829500048274000c8253001c398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003a20000192230008821b00009203000481fb000891e3000083120004833b0010801800007c0903a67f2803a63b7b00204e80042080db001080a600048085000c8064001483230000807b00003b190000801800007c0803a64e8000212803000141820028831b001082f8000482d7000c82b6001480750004829b00047e8803a63b7b00144e800020831b001082f8000482d7000c82b60010807b000083150000801800007c0803a64e8000212803000141820028829b0010827400048253000c8232001080710004821b00047e0803a63b7b00144e800020829b0010827400048253000c82320020807b000083110008801800007c0803a64e800021821b001081f0000481cf0018398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021395d0004919d00003d2002aa6129ce94912a00083d0002a06108c7ac910a000480ee000090ea0000386a0000800d00287c0803a64e800021|@4495,1048575|280,3,@4490 1272,3,@4492 1744,3,@4494 1756,3,@227 4490:C2,388|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e800020973bfffc971bfffc947bfffc80030000941bfffc80030004941bfffc80b8fffc8098fff8807b000483180000801800007c0803a64e800021947bfffc807b0004831b00104bffff8d833b0010831900003ae30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082db000892c3000482bb000092a3000096fbfffc83180014801800007c0803a64e800021280300014182006c829b001482740000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000825b000892430004823b00009223000083130010801800007c0803a64e8000212803000141820018807b0010821b00187e0803a63b7b001c4e800020398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a9d0004919d0000827b000092740004825b00049254000038740000823b00187e2803a63b7b001c4e800020|@4491,1048575| 4491:S34|545950455f5452454528292e636f707954797065283329636f70794c697374283129 4492:C2,448|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e80002082e30000973bfffc971bfffc947bfffc80170000941bfffc80170004941bfffc80030004941bfffc80b8fffc8098fff8807b000483180000801800007c0803a64e800021947bfffc807b0004831b00144bffff8182db001482b600003a830000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000827b000892630004825b000092430000969bfffc83150014801800007c0803a64e800021280300014182006c823b001882110000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000081fb000891e3000481db000091c3000083100010801800007c0803a64e8000212803000141820018807b0014815b001c7d4803a63b7b00204e800020398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a3d0004919d0000821b00049211000481fb001091f10000398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002139dd0004919d0000815b0000914e0004922e0000386e0000813b001c7d2803a63b7b00204e800020|@4493,1048575| 4493:S40|545950455f5452454528292e636f707954797065283329636f70795265636f72644c697374283129 4494:S27|636f7079547970653a204f7665726c6f616453657420666f756e64 4495:S23|545950455f5452454528292e636f707954797065283329 4496:C2,1228|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7000c82b60028973bfffc971bfffc947bfffc83150000801800007c0803a64e800021280300014182046c829b0004827400048253000c82320028807b000083110008801800007c0803a64e800021821b000481f0000481cf000c947bfffc830e0090801800007c0803a64e800021947bfffc831b000c4bffff65815b000c812a00048109000038e30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000090e3000480db000090c3000094fbfffc83080000801800007c0803a64e80002128030001418200084800005880bb0010808500048064000c83230094398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000831b00009303000482fb000892e300003b190000801800007c0803a64e80002182db001082b600048295000c82740014807b000083130000801800007c0803a64e8000212803000141820018807b000c825b00147e4803a63b7b00184e800020825b0010823200048211000c81f0001c807b0000830f0000801800007c0803a64e800021280300014182028481db0010814e0004812a000c8109001c807b000083080008801800007c0803a64e80002180e300002c0700014082024080c3000870cb00014082022080bb0010808500048324000c94dbfffc80030004941bfffc8066000083190090801800007c0803a64e800021831b001882f8000482d7000c82b6001c947bfffc83150000801800007c0803a64e8000212803000141820080827b001c825300048232000c8211001c807b000083100008801800007c0803a64e80002180030000941bfffc809b0008806300043b1b00243c0002aa6000d3c07c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a9d0004919d000081fb000091f400049074000048000064829b001c8274000482530018398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a3d0004919d00003e0002aa6210dc28921100083de002a061efc7ac91f1000481d2000091d1000038710000800d00287c0803a64e80002181db0020814e0004812a000c8109001c398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000080fb000c90e3000880d4000090c3000480b4000490a3000094bbfffc83080004801800007c0803a64e800021809b0024832400048319000c3ae30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092e3000482db001c92c3000096fbfffc83180094801800007c0803a64e80002182bb00042815000141820018807b0000829b002c7e8803a63b7b00304e800020807b0024829b002c7e8803a63b7b00304e800020807b000c80bb00147ca803a63b7b00184e800020807b000080db00147cc803a63b7b00184e80002081db0010814e0004812a000c81090020807b000083080000801800007c0803a64e800021280300014182003c80fb001080c7000480a6000c80850020807b000083040008801800007c0803a64e800021807b000c833b00147f2803a63b7b00184e800020807b000080fb00147ce803a63b7b00184e800020807b0000829b00087e8803a63b7b000c4e800020|@4506,1048575|652,3,@4497 768,3,@4505 780,3,@227 4497:C2,840|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c030001408200782c0400014082000c386000014e800020973bfffc8098fffc8064000482e30018398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002aa62b5d72492b600083ea002a062b5c7ac92b6000482b7000092b6000038760000800d00287c0803a64e80002182e300002c040001408200c4947bfffc947bfffc973bfffc971bfffc80030004941bfffc38bb000c80970004807700003c0002aa6000d7607c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213add0004919d000082bb000c92b60000829b00109296000496dbfffc38800001807b0004831b00084bfffee1398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a7d0004919d000090730004825b00009253000038730000823b000c7e2803a63b7b00184e80002082c400003a7900003a5800003a2400003a17000081e3000480960000807700003c0002aa6000da587c0803a64e8000212c03000140820068967bfffc965bfffc80110000941bfffc80910004386f00003b1200004bfffe45398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002139dd0004919d0000906e0004815b0000914e0000386e0000813b00087d2803a63b7b000c4e800020546bf80140a20010800d00347c0803a64e8000212c030001408000c8947bfffc947bfffc967bfffc965bfffc963bfffc95fbfffc38bb001080900004807000003b1200003c0002aa6000d7607c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002139dd0004919d0000815b0010914e0000813b0014912e000495dbfffc809b0008807b0004831b000c4bfffd65398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021391d0004919d00009068000480fb000090e800003868000080db00107cc803a63b7b001c4e800020967bfffc81d2fffc814e0004812a0018398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021391d0004919d00003ce002aa60e7d72490e800083cc002a060c6c7ac90c8000480a9000090a8000038680000800d00287c0803a64e800021|@4504,1048575|108,3,@4498 120,3,@227 204,3,@4499 392,3,@4502 584,3,@4499 792,3,@4498 804,3,@227 4498:S51|616464546f496e7374616e63653a20456e74727920696e20696e7374616e636520627574206e6f7420696e2067656e65726963 4499:C2,632|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8fffc82d7000482b6000c82950028973bfffc971bfffc947bfffc949bfffc94bbfffc3864000083140000801800007c0803a64e80002128030001418201b8827b000c8253fffc823200048211000c81f00028807b0004830f0008801800007c0803a64e80002181db000c814efffc812a00048109000c947bfffc806efff483080080801800007c0803a64e80002180fb001080c7fffc80a600048085000c947bfffc8067fff483040084801800007c0803a64e800021280300014182000c3860000348000028807b00148323fffc8319000482f8000c807b000483170084801800007c0803a64e80002182db001482b6fffc829500048274000c947bfffc807b00088313008c801800007c0803a64e800021280300014182000c3a4000034800002c825b00188232fffc8211000481f0000c8072fff4830f008c801800007c0803a64e8000213a43000081db0018814efffc812a00048109000c80e80028398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d00009243001038c0000190c3000c80bb000090a30008809b000490830004832a00089323000080070004941bfffc8308009c801800007c0803a64e800021831b0000801800007c0803a64e800021831b001082fb001892f80000907800043860000182db00207ec803a63b7b00244e800020827b000c8253fffc8232000482110018398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002139fd0004919d00003dc002aa61ced9f491cf00083d4002a0614ac7ac914f000481300000912f0000386f0000800d00287c0803a64e800021|@4501,1048575|584,3,@4500 596,3,@227 4500:S43|6372656174654e65774669656c643a204e6577206669656c64206973206e6f742061207479706520766172 4501:S40|545950455f5452454528292e6576656e7475616c2831296372656174654e65774669656c64283329 4502:C2,352|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021706b00014182000c3b0000034800001081830000558c083c61980001708b00014182000c3ae000034800001081840000558c083c619700017f0bbb78556bf80140a20010800d00347c0803a64e8000217c18b8004082007c3ad900003aa300003a84000038940000387500003f00000063184368801800007c0803a64e8000212803000141820010386000017ec803a64e80002038940000387500003f000000631843c8801800007c0803a64e80002128030001418200103860ffff7ec803a64e800020386000037ec803a64e800020706b00014182000c3ac000034800001081830000558c083c61960001708b00014182000c3aa000034800001081840000558c083c619500017ecba838556bf80140a20010800d00347c0803a64e8000217c16a800408000103860ffff7f2803a64e800020386000037f2803a64e800020|@4503,1032195|140,3,I24 188,3,I27 4503:S28|545950455f5452454528292e636f6d706172654c6162656c73283229 4504:S39|545950455f5452454528292e6576656e7475616c283129616464546f496e7374616e6365283229 4505:S35|756e6966795265636f7264733a204e6f742061206c6162656c6c6564207265636f7264 4506:S23|545950455f5452454528292e6576656e7475616c283129 4507:C2,132|7f2802a6633900023d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213afd0004919d000090770000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d00003ec002aa62d6dd1492c3000090830010809800089083000c82d8000492c3000892e300047f2803a64e800020|@4512,983043|88,3,@4508 4508:C2,196|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000882d7000c82b60028973bfffc971bfffc947bfffc83150000801800007c0803a64e8000212803000141820030827b0004825300088232000c82110028807b000083100008801800007c0803a64e8000213a830000480000183c6002a160630a30800d00287c0803a64e800021969bfffc81fb000881cf0004806e00003b1b000c3c0002aa6000ddf47c0803a64e800021815b000c7d4803a63b7b00104e800020|@4511,1048575|124,3,@341 164,3,@4509 4509:C2,816|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082026c8078fffc82e3000882d7000c973bfffc971bfffc801600a0941bfffc8078fff483160084801800007c0803a64e80002182bb00048295fffc827400088253000c947bfffc8075fff48312008c801800007c0803a64e8000212803000141820014821b000881f0fffc822f0010480000083a200001821b000881f0fffc81cf0008814e000c812a0028398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d000092230010390000019103000c80fb000090e3000880db000490c3000480af000c90a3000080090004941bfffc830a009c801800007c0803a64e800021831b0000801800007c0803a64e800021809b000c8324fffc8319000882f8000c82d70028947bfffc80170094941bfffc83160000801800007c0803a64e8000212803000141820034829b00148274fffc825300088232000c82110028807b000483100008801800007c0803a64e8000213aa30000480000183c6002a160630a30800d00287c0803a64e80002181fb001481cffffc814e0008812a000c96bbfffc806ffff483090090801800007c0803a64e80002139030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00009103000480fb000090e30000831b0004801800007c0803a64e80002180db001880a6fffc398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021389d0004919d00008066fff490640004833b0008932400008305000482f80000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213add0004919d000092f600049096000092d800003879000082bb001c7ea803a63b7b00204e80002082e3000082d8fffc82b600088295000c82630004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008258fff4924300048237000492230000973bfffc971bfffc80170000941bfffc967bfffc83140098801800007c0803a64e8000212803000141820018807b0004821b000c7e0803a63b7b00104e800020807b0000831b0008833b000c7f2803a63b7b00104bfffcdc|@4510,1048575|392,3,@341 4510:S41|545950455f5452454528292e7476617253657175656e63652832292831297054797065566172283129 4511:S30|545950455f5452454528292e7476617253657175656e6365283229283129 4512:S27|545950455f5452454528292e7476617253657175656e6365283229 4513:O2|@4515,@4514 4514:O5|@4518,@4193,@4526,@4548,@4517 4515:C2,72|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e3001096fbfffc80c3000c80a30008808300048063000083180004801800007c0903a64e800420|@4516,1048575| 4516:S28|545950455f5452454528292e6f7665726c6f61644572726f72283129 4517:O3|@4556,@4488,@4193 4518:C2,580|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc949bfffc94bbfffc94dbfffc83180010801800007c0803a64e800021833b000c8319000482f80008947bfffc807b000483170010801800007c0803a64e80002182db001082b6000482950004947bfffc8074000483140008801800007c0803a64e8000213a630000807b00003b130000801800007c0803a64e800021825b0014823200048211000c81f00028947bfffc807b0008830f0000801800007c0803a64e80002128030001418200b081db0018814e0004812a000c81090028807b000883080008801800007c0803a64e80002180fb001880c7000480a6000880050004941bfffc809b00183c6002aa6063e4dc3c0002a1600074a87c0803a64e80002138830000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000090830008833b002493230004831b001093030000831b0000833b0020801800007c0903a67f2803a63b7b00284e80042081db0018814e0004812a0008398000083bbdffdc7c1df04040a00010800d001c7c0803a64e800021391d0004919d00003ce002aa60e7e50890e8000080db001490c8001c80bb001090a80018809b000890880014807b000090680010832e000c9328000c830e00089308000891480004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00009103000882fb002092e3000482db000c92c3000083090000833b001c801800007c0903a67f2803a63b7b00244e800420|@4525,1048575|272,3,@4519 280,3,@511 432,3,@4520 4519:S34|556e61626c6520746f207265736f6c7665206f7665726c6f6164696e6720666f7220 4520:C2,380|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d70014973bfffc971bfffc947bfffc83160004801800007c0803a64e8000213aa300003c6002aa6063e6a03b150000801800007c0803a64e800021829b00048274000482530014807b000083120000801800007c0803a64e800021823b0004947bfffc3c8002aa6084e6ac8071001c3c0002a1600074a87c0803a64e800021821b0008809000183c0002a1600074a87c0803a64e8000213c8002aa6084e6c83c0002a1600074a87c0803a64e800021831b0000801800007c0803a64e80002181fb0008800f0014941bfffc800f0010941bfffc38600001830f000c801800007c0803a64e80002181db001039400003955bfffc38c3000080bb0010809b0004807b0008830e0008801800007c0803a64e800021813b00108109000480e80014807b000c83070008801800007c0803a64e80002138c30000386000013b060000833b0014801800007c0903a67f2803a63b7b00184e800420|@4524,1048575|72,3,@4521 136,3,@4522 148,3,@511 172,3,@511 188,3,@4523 196,3,@511 4521:O2|3,1 4522:S18|206973206f7665726c6f61646564206f6e20 4523:S9|20627574206e6f7420 4524:S31|545950455f5452454528292e6f7665726c6f61644572726f72283529283129 4525:S28|545950455f5452454528292e6f7665726c6f61644572726f72283529 4526:O4|@4528,@4193,@4527,@4488 4527:O2|@4546,@4193 4528:C2,84|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002194dbfffc94bbfffc971bfffc973bfffc3b1b000c3c0002aa6000e7b87c0803a64e800021833b00007f2803a63b7b00144e800020|@4545,1048575|52,3,@4529 4529:C2,4432|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021971bfffc82f8fff8973bfffc949bfffc8317000c801800007c0803a64e80002182db000882b6fff8829500048274000c82530028947bfffc83120000801800007c0803a64e80002128030001418200f8823b000c8211fff881f0000481cf000c814e0028807b0000830a0008801800007c0803a64e800021813b000c8109fff880e8000480c7000c947bfffc83060090801800007c0803a64e80002180bb00108085fff8832400048319000c82f80014947bfffc83170000801800007c0803a64e800021280300014182006082db001482b6fff882950004827400148076fffc83130000801800007c0803a64e800021825b0014947bfffc807b000883120000801800007c0803a64e800021831b0000833b0014801800007c0903a67f2803a63b7b001c4e800420809b000c807b0000831b0014833b00107f2803a63b7b00184bfffea8823b000c8211fff881f0000481cf000c814e0024807b0000830a0000801800007c0803a64e8000212803000141820728813b000c8109fff880e8000480c7000c80a60024807b000083050008801800007c0803a64e800021808300002c04000140820154833b000c8319fff882f8000482d7000c80030004941bfffc80030008941bfffc807b000083160008801800007c0803a64e80002182bb00148295fff8827400048253000c80120034941bfffc8312006c801800007c0803a64e800021831b0000801800007c0803a64e800021280300014182000c823b000848000048823b00188211fff881f0000481cf000c800e004c941bfffc807b0008830e0008801800007c0803a64e800021831b0000801800007c0803a64e8000213a2300003b7b0004815b0018812afff88109000480e80014963bfffc806afffc83070000801800007c0803a64e80002180db001c80a60004280500014182001038830000807b0000480000308086fff88324000483190010947bfffc807b000483180004801800007c0803a64e8000218063000448000008949bfffc831b0000833b001c801800007c0903a67f2803a63b7b00244e800420833b0004572bf80140a20010800d00347c0803a64e8000212c19000141810050831b000c82f8fff882d7000482b600148078fffc83150000801800007c0803a64e8000213a8300003c6002aa6063f9243b140000833b0008801800007c0903a67f2803a63b7b00104e800420831b000c82f8fff8708b00014082001882c3000082a3000482830008806400004800002482c3000082a30004828300083c6002a36063dfcc800d00287c0803a64e80002196dbfffc96bbfffc969bfffc8317000c801800007c0803a64e800021827b0008726b00014082000c825300044800001c3a4300003c6002a36063dfcc800d00287c0803a64e800021823b00188211fff881f0000481cf000c947bfffc965bfffc807b0008830e0008801800007c0803a64e800021815b0020812afff88109000480e8000c80070034941bfffc8307006c801800007c0803a64e800021831b0000801800007c0803a64e800021280300014182000c80db00104800004c80db002480a6fff8808500048064000c8003004c941bfffc83230008807b00103b190000801800007c0803a64e800021831b0000801800007c0803a64e80002138c300003b7b0004831b002482f8fff882d7000482b6001494dbfffc8078fffc83150004801800007c0803a64e8000213a8300003c6002a16063f6583b140000801800007c0803a64e800021827b0008281300014182000848000084825b00288232fff8807b000c83110008801800007c0803a64e80002128030001418200084800005c821b002881f0fff881cf0004814e000c812a0018807b000c83090000801800007c0803a64e800021280300014182024c811b002880e8fff880c7000480a6000c80850018807b000c83040008801800007c0803a64e800021825b0020564bf80140a20010800d00347c0803a64e8000212c12000341810048823b00288211fff881f0000481cf00148071fffc830e0000801800007c0803a64e800021394300003c6002aa6063f9243b0a0000801800007c0803a64e800021480001f4823b00288211fff881f0000481cf00148071fffc830e0004801800007c0803a64e800021394300003c6002a16063f6583b0a0000801800007c0803a64e800021813b00288109fff880e8000480c700148069fffc83060000801800007c0803a64e80002138a30000386000513b050000801800007c0803a64e800021809b00288064fff883230004831900148064fffc8318000c801800007c0803a64e8000213ae300003c6002a16063f6583b170000801800007c0803a64e80002182db00203980000256c0f80140a20010800d00347c0803a64e8000217eacb41141a3fff080bb001838950000386000593b1b00283c0002aa6000f9307c0803a64e800021829b00288274fff882530004823200148074fffc8311000c801800007c0803a64e8000213a0300003c6002a16063f6583b100000801800007c0803a64e80002181fb002881cffff8814e0004812a0014806ffffc83090000801800007c0803a64e80002139030000386000533b080000801800007c0803a64e80002180fb002880c7fff880a60004808500148067fffc83040008801800007c0803a64e8000213b230000386000013b190000801800007c0803a64e80002148000038811b0020398000025500f80140a20010800d00347c0803a64e8000217cec441141a3fff038870000807b000c831b00284bfff81180db002880a6fff880850004806400148323000c8066fffc3b190000801800007c0803a64e8000213b0300003c6002a06063ee14801800007c0803a64e80002182fb002882d7fff882b60004829500148077fffc83140000801800007c0803a64e8000213a630000807b00003b130000801800007c0803a64e800021825b00288232fff88211000481f000148072fffc830f0008801800007c0803a64e80002139c30000386000013b0e0000833b0024801800007c0903a67f2803a63b7b002c4e800420813b000c8109fff880e8000480c7000c80a60018807b000083050000801800007c0803a64e80002128030001418202e8809b000c8064fff8832300048319000c82f80018807b000083170008801800007c0803a64e80002182db000456cbf80140a20010800d00347c0803a64e8000212c1600014181005082bb000c8295fff882740004825300148075fffc83120000801800007c0803a64e8000213a2300003c6002aa6063f9243b110000833b0008801800007c0903a67f2803a63b7b00104e80042082bb000c8295fff880030004941bfffc806300008314000c801800007c0803a64e800021827b00108253fff88232000482110014947bfffc8073fffc83100004801800007c0803a64e80002139e300003c6002a16063f6583b0f0000801800007c0803a64e80002181db0014814efff8812a00048109000c80e80018807b000083070000801800007c0803a64e800021280300014182004c80db001480a6fff8808500048064000c83230018807b000083190008801800007c0803a64e800021809b000c807b00003b1b00143c0002aa6000fe3c7c0803a64e8000214800003880db000c3980000254c0f80140a20010800d00347c0803a64e8000217cac341141a3fff038850000807b0000831b00144bfff575809b00148064fff883230004831900148064fffc8318000c801800007c0803a64e8000213ae300003c6002a06063ee143b170000801800007c0803a64e80002182db001482b6fff882950004827400148076fffc83130000801800007c0803a64e8000213a4300003c6002a7606344c03b120000801800007c0803a64e800021823b00148211fff881f0000481cf00148071fffc830e000c801800007c0803a64e800021394300003c6002a06063ee143b0a0000801800007c0803a64e800021813b000c398000025520f80140a20010800d00347c0803a64e8000217d0c4c1141a3fff038880000807b0004831b00144bfff48180fb001480c7fff880a60004808500148067fffc83040008801800007c0803a64e8000213b230000386000013b190000833b0010801800007c0903a67f2803a63b7b00184e800420809b000c8064fff8832300048319000c82f8001c807b000083170000801800007c0803a64e800021280300014182034082db000c82b6fff8829500048274000c8253001c807b000083120008801800007c0803a64e800021823b0004562bf80140a20010800d00347c0803a64e8000212c11000141810050821b000c81f0fff881cf0004814e00148070fffc830a0000801800007c0803a64e800021392300003c6002aa6063f9243b090000833b0008801800007c0903a67f2803a63b7b00104e800420821b000c81f0fff880030000941bfffc80030004941bfffc807b0008830f0008801800007c0803a64e80002128030001418200c481db0014814efff8812a000481090014806efffc83080004801800007c0803a64e80002138e300003c6002a16063f6583b070000801800007c0803a64e800021807b00003f0002ab63180134801800007c0803a64e80002138a30000809b000c386000553b1b00143c0002aa6000f9307c0803a64e80002180db001480a6fff88085000480640014832300088066fffc3b190000801800007c0803a64e8000213b03000038600001833b0010801800007c0903a67f2803a63b7b00184e80042081db0014814efff8812a000481090014806efffc83080004801800007c0803a64e80002138e300003c6002a06063c3903b070000801800007c0803a64e80002180db001480a6fff88085000480640014832300008066fffc3b190000801800007c0803a64e8000213b030000386000f7801800007c0803a64e80002182fb000c3980000256e0f80140a20010800d00347c0803a64e8000217eccbc1141a3fff0809b0000387600003b1b00143c0002ab600001e47c0803a64e80002182bb00042815000140820068827b00002c130001408200103e8002aa6294f9244800000c3e8002ab62940608825b00148232fff88211000481f00014969bfffc8072fffc830f0000801800007c0803a64e80002139c30000807b00003b0e0000801800007c0803a64e80002148000008947bfffc829b00188274fff882530004823200148074fffc83110000801800007c0803a64e8000213a030000386000fb3b100000801800007c0803a64e80002181fb001881cffff8814e0004812a0014806ffffc83090008801800007c0803a64e80002139030000386000013b080000833b0014801800007c0903a67f2803a63b7b001c4e80042082db000c82b6fff8829500048274000c82530020807b000083120000801800007c0803a64e8000212803000141820124823b000c8211fff881f0000481cf000c814e0020807b0000830a0008801800007c0803a64e8000212c03000140820050813b000c8109fff880e8000480c700148069fffc83060000801800007c0803a64e80002138a300003c6002ab606306183b050000833b0008801800007c0903a67f2803a63b7b00104e800420813b000c8109fff880e8000480c70014947bfffc8069fffc83060004801800007c0803a64e80002138a300003c6002a16063f6583b050000801800007c0803a64e800021807b00003b1b00103c0002ab600006287c0803a64e800021809b00108064fff883230004831900148064fffc83180008801800007c0803a64e8000213ae30000386000013b170000833b000c801800007c0903a67f2803a63b7b00144e800420823b000c8211fff881f0000481cf000c814e0014807b0000830a0000801800007c0803a64e8000212803000141820050813b000c8109fff880e8000480c700148069fffc83060000801800007c0803a64e80002138a300003c6002ab606306183b050000833b0008801800007c0903a67f2803a63b7b00104e800420813b000c8109fff880e8000480c700148069fffc83060000801800007c0803a64e80002138a300003c6002ab606308403b050000833b0008801800007c0903a67f2803a63b7b00104e800420|@4544,1048575|864,3,@4530 948,3,@1386 1020,3,@1386 1272,3,@711 1512,3,@4530 1580,3,@711 1704,3,@711 1780,3,@4531 1836,3,@711 2080,3,@265 2392,3,@4530 2508,3,@711 2632,3,@4532 2744,3,@265 2808,3,@2820 2872,3,@265 3180,3,@4530 3308,3,@711 3336,3,@4535 3372,3,@4531 3500,3,@197 3632,3,@4537 3672,3,@4530 3684,3,@4539 4032,3,@4540 4112,3,@711 4144,3,@4541 4320,3,@4540 4396,3,@4543 4530:S3|2e2e2e 4531:C2,1264|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0500014082000c386000014e80002082e500042c1700014082014882d8000082b6fff8973bfffc971bfffc947bfffc949bfffc806500008315000c801800007c0803a64e8000213a83000038800055807b00043f00000063184368801800007c0803a64e8000212803000141820098827b0008825300008232fff88211000481f0000c81cf0018969bfffc38740000830e0000801800007c0803a64e8000212803000141820034815b000c812a00008109fff880e8000480c7000c80a60018807b000083050008801800007c0803a64e80002148000038815b000c812a00008109fff8807b000083080008801800007c0803a64e800021280300014082001048000034969bfffc4800002c809b0004807b0000831b000c833b00103c0002aa6000fe3c7c0903a67f2803a63b7b00144e800420809b0004807b0000827b000c83130000833b00103c0002aa6000e7b87c0903a67f2803a63b7b00144e800420548bf80140a20010800d00347c0803a64e8000212c0400014181005482d8000082b6fff88295000482740014973bfffc8076fffc83130000801800007c0803a64e8000213a4300003c6002aa6063f9243b120000833b0000801800007c0903a67f2803a63b7b00044e80042082d8000082b6fff8973bfffc971bfffc947bfffc949bfffc96fbfffc806500008315000c801800007c0803a64e800021829b000c827400008253fff88232000482110014947bfffc8073fffc83100004801800007c0803a64e80002139e300003c6002a16063f6583b0f0000801800007c0803a64e80002138800055807b000c3f00000063184368801800007c0803a64e80002128030001418200b881db0010814e0000812afff88109000480e8000c80c70018807b000083060000801800007c0803a64e800021280300014182003480bb0010808500008064fff8832300048319000c82f80018807b000083170008801800007c0803a64e8000214800003480bb0010808500008064fff883230008807b00003b190000801800007c0803a64e800021280300014082000848000024809b0008807b0000831b00103c0002aa6000fe3c7c0803a64e80002148000024809b0008807b000081db0010830e00003c0002aa6000e7b87c0803a64e800021815b0010812a00008109fff880e8000480c700148069fffc8306000c801800007c0803a64e80002138a3000038800059807b000c3f00000063184368801800007c0803a64e80002168640002398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003b20000193230004908300003b050000801800007c0803a64e800021831b001082f8000082d7fff882b60004829500148077fffc83140000801800007c0803a64e8000213a630000807b000c3b130000801800007c0803a64e800021825b0010823200008211fff881f0000481cf00148071fffc830e0008801800007c0803a64e80002139430000386000013b0a0000801800007c0803a64e800021813b00108109000080e8fff880c7000480a600148068fffc8305000c801800007c0803a64e800021388300003c6002a06063ee143b040000801800007c0803a64e800021807b0008398000025460f80140a20010800d00347c0803a64e8000217f2c1c1141a3fff080bb000438990000807b000c831b0010833b00147f2803a63b7b00184bfffb1c|@4534,1048575|116,3,I24 316,3,@4532 360,3,@4529 456,3,@4530 588,3,@711 620,3,I24 808,3,@4532 844,3,@4529 912,3,I24 1172,3,@265 4532:C2,628|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021548bf80140a20010800d00347c0803a64e8000212c0400034181005482f8000082d7fff882b6000482950014973bfffc8077fffc83140000801800007c0803a64e8000213a6300003c6002aa6063f9243b130000833b0000801800007c0903a67f2803a63b7b00044e80042082f8000082d7fff882b6000482950014973bfffc971bfffc947bfffc949bfffc8077fffc83140004801800007c0803a64e8000213a6300003c6002a16063f6583b130000801800007c0803a64e800021825b0008823200008211fff881f0000481cf00148071fffc830e0000801800007c0803a64e80002139430000386000513b0a0000801800007c0803a64e800021813b00088109000080e8fff880c7000480a600148068fffc8305000c801800007c0803a64e800021388300003c6002a16063f6583b040000801800007c0803a64e800021807b0000398000025460f80140a20010800d00347c0803a64e8000217f2c1c1141a3fff038990000807b0004831b0008831800003c0002aa6000e7b87c0803a64e80002182fb000882d7000082b6fff882950004827400148076fffc8313000c801800007c0803a64e8000213a4300003c6002a16063f6583b120000801800007c0803a64e800021823b00088211000081f0fff881cf0004814e00148070fffc830a0000801800007c0803a64e80002139230000386000533b090000801800007c0803a64e800021811b000880e8000080c7fff880a60004808500148067fffc83040008801800007c0803a64e8000213b230000386000013b190000833b000c801800007c0903a67f2803a63b7b00104e800420|@4533,1048575|104,3,@4530 196,3,@711 328,3,@711 404,3,@4529 464,3,@711 4533:S43|545950455f5452454528292e74446973702835296469737050283229706172656e74686573697365283229 4534:S41|545950455f5452454528292e744469737028352964697370502832297072657474794c697374283329 4535:O1|@4536 4536:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e80002083030000973bfffc80180004941bfffc806300044bffffbd398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b00009319000038790000833b00047f2803a63b7b00084e800020|@234,786433| 4537:C2,988|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0400014082000c386000014e80002082e40000546bf80140a20010800d00347c0803a64e8000212c0300014181005482d8000082b6fff88295000482740014973bfffc8076fffc83130000801800007c0803a64e8000213a4300003c6002aa6063f9243b120000833b0000801800007c0903a67f2803a63b7b00044e80042082d8000082b6fff88295000482740014973bfffc971bfffc947bfffc80170000941bfffc80170004941bfffc80040004941bfffc8076fffc83130004801800007c0803a64e8000213a4300003c6002a16063f6583b120000801800007c0803a64e800021823b00108211000081f0fff881cf0004814e00148070fffc830a0004801800007c0803a64e800021392300003c6002a16063f6583b090000801800007c0803a64e800021811b001080e8000080c7fff880a60004808500148067fffc83040000801800007c0803a64e800021947bfffc38800075807b000c3c0002a1600074a87c0803a64e800021831b0000801800007c0803a64e800021807b0014832300008319fff882f8000482d700148079fffc8316000c801800007c0803a64e8000213aa300003c6002a06063ee143b150000801800007c0803a64e800021829b0010398000025680f80140a20010800d00347c0803a64e8000217e6ca41141a3fff038930000807b0008825b0014831200003c0002aa6000e7b87c0803a64e800021823b00148211000081f0fff881cf0004814e00148070fffc830a0008801800007c0803a64e80002139230000386000013b090000801800007c0803a64e800021811b00042c080001408200084800008880fb001480c7000080a6fff880850004806400148323000c8066fffc3b190000801800007c0803a64e8000213b0300003c6002a16063f658801800007c0803a64e80002182fb001482d7000082b6fff882950004827400148076fffc83130000801800007c0803a64e8000213a430000386000593b120000801800007c0803a64e800021823b00148211000081f0fff881cf0004814e00148070fffc830a0008801800007c0803a64e80002139230000386000013b090000801800007c0803a64e800021811b00042c080001408200183860000180fb00187ce803a63b7b001c4e80002080fb001480c7000080a6fff880850004806400148323000c8066fffc3b190000801800007c0803a64e8000213b0300003c6002a06063ee14801800007c0803a64e80002182fb00103980000256e0f80140a20010800d00347c0803a64e8000217eccbc1141a3fff0809b000438760000831b0014833b00187f2803a63b7b001c4bfffc30|@4538,1048575|124,3,@4530 236,3,@711 304,3,@711 380,3,@511 456,3,@265 532,3,@4529 676,3,@711 904,3,@265 4538:S35|545950455f5452454528292e7444697370283529646973705028322970526563283229 4539:S5|2c202e2e2e 4540:S7|6e6f2074797065 4541:C2,456|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e80002082e300042c1700014082008082d8000082b6fff88295000482740014973bfffc971bfffc80030000941bfffc8076fffc83130000801800007c0803a64e800021825b0004823200008211fff881f0000481cf000c947bfffc807b0004830e004c801800007c0803a64e800021831b0000833b000c801800007c0903a67f2803a63b7b00104e80042082d8000082b6fff88295000482740014973bfffc971bfffc96fbfffc80030000941bfffc8076fffc83130000801800007c0803a64e800021825b0008823200008211fff881f0000481cf000c947bfffc807b0004830e004c801800007c0803a64e800021831b0000801800007c0803a64e800021815b000c812a00008109fff880e8000480c700148069fffc8306000c801800007c0803a64e80002138a300003c6002a16063f6583b050000801800007c0803a64e800021809b000c806400008323fff88319000482f800148063fffc83170000801800007c0803a64e8000213ac300003860005f3b160000801800007c0803a64e800021807b0008831b000c833b00107f2803a63b7b00144bfffe44|@4542,1048575|344,3,@711 4542:S42|545950455f5452454528292e744469737028352964697370502832297072696e745443636f6e73283129 4543:S3|626164 4544:S28|545950455f5452454528292e74446973702835296469737050283229 4545:S20|545950455f5452454528292e7444697370283529 4546:C2,444|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7000c82b6001c973bfffc971bfffc947bfffc83150000801800007c0803a64e800021280300014182015c829b0004827400048253000c8232001c807b000083110008801800007c0803a64e800021820300002c1000034082011881e3000471eb0001408200f881cf000471cb0001408200d8394000032c0f00014082001838600003813b00087d2803a63b7b000c4e800020812f0000955bfffc80090000941bfffc800f0004941bfffc3880ffff386a00003c0002a06000fe6c7c0803a64e80002138830000807b00043f00000063184368801800007c0803a64e8000212803000141820050811b0008398000025500f80140a20010800d00347c0803a64e8000217ce8661541a3fff081fb0000394700003b7b000c800d00187c1b004040a00010800d00207c0803a64e8000214bffff4838600001811b00147d0803a63b7b00184e80002038600001815b00087d4803a63b7b000c4e8000203860000181db00087dc803a63b7b000c4e8000203860000181fb00087de803a63b7b000c4e80002038600001829b00087e8803a63b7b000c4e800020|@4547,1048575|216,3,@316 240,3,I24 4547:S28|545950455f5452454528292e697350726f6475637454797065283129 4548:O2|@4549,@4193 4549:C2,180|7f2802a6633900023d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d00003ae0ffff92e300003d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ac0000192d700003ac30000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00003ea002ab62b50b6492a3000082b8000492a3000c92c3000892e300047f2803a64e800020|@4555,1015809|144,3,@4550 4550:C2,576|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d70000973bfffc971bfffc947bfffc2c1600014082000c3aa00001480000c880760000833b00048319000c82f8000c82a30004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000829b00009283000492a3000080160000941bfffc80160004941bfffc83170098801800007c0803a64e8000212803000141820034398000013bbdfff87c1df04040a00010800d001c7c0803a64e8000213abd0004919d0000827b0004927500004800002882db00003b7b0008800d00187c1b004040a00010800d00207c0803a64e8000214bffff343b7b00082c1500014082011c825b00048232000882110000398000025600f80140a20010800d00347c0803a64e8000217df0661541a3fff091f1000081d2000c814e000c807b0000830a0084801800007c0803a64e80002128030001418200103d2002ab61290dc0480000083920004f811b000480e8000880670000953bfffc3c0002ab60000dcc7c0803a64e80002138830000807b00003c0002a1600074a87c0803a64e80002180db0008398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138bd0004919d0000809b000490850004906500008326000483190000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213afd0004919d00009317000490b7000092f9000082db000c7ec803a63b7b00104e8000208255000080720000823b00087e2803a63b7b000c4e800020|@4554,1048575|356,3,@4551 388,3,@4552 412,3,@511 4551:S2|2727 4552:C2,536|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021546bf80140a20010800d00347c0803a64e8000212c030035418000ac546bf80140a20010800d00347c0803a64e8000212c0300014180000c3ae00003480000083ae000012c1700034082000c3ac3000048000024398000325460f80140a20010800d00347c0803a64e8000217ecc1c1141a3fff0973bfffc947bfffc38800035387600003f00000063184e08801800007c0803a64e800021398000025460f80140a20010800d00347c0803a64e8000217c6c1c1141a3fff04bffff293b030000480000143f00000063184668973bfffc947bfffc971bfffc38800035807b00043f00000063184e28801800007c0803a64e8000212c0300014082000848000038546bf80140a20010800d00347c0803a64e8000212c0300014180000c3b200003480000083b20000128190003418200084800000c3b23000048000024398000345460f80140a20010800d00347c0803a64e8000217f23661541a3fff0398000c25720f80140a20010800d00347c0803a64e8000217f19661541a3fff0570bf80140a20010800d00347c0803a64e8000212c1800014080000848000024570bf80140a20010800d00347c0803a64e8000212c1801ff41810008480000183c6002a16063026c800d00287c0803a64e8000213af8000038970000807b0000833b00083c0002a1600074a87c0903a67f2803a63b7b000c4e800420|@4553,1048575|164,3,I109 228,3,I48 256,3,I110 476,3,@318 512,3,@511 4553:S40|545950455f5452454528292e7661724e616d6553657175656e63652831292831296e616d65283129 4554:S33|545950455f5452454528292e7661724e616d6553657175656e6365283129283129 4555:S30|545950455f5452454528292e7661724e616d6553657175656e6365283129 4556:C2,364|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000882d7000c82b60018973bfffc971bfffc947bfffc83150000801800007c0803a64e80002128030001418200fc829b0004827400088253000c82320018807b000083110008801800007c0803a64e800021821b000481f0000881cf000c814e001c80030000941bfffc807b0000830a0000801800007c0803a64e8000212803000141820080813b00088109000880e8000c80c7001c807b000083060008801800007c0803a64e80002180a3000470ab00014082002c80850000833b00088064000483190004833b000c801800007c0903a67f2803a63b7b00104e800420809b0008807b000083040004833b000c801800007c0903a67f2803a63b7b00104e800420813b0008807b000083090004833b000c801800007c0903a67f2803a63b7b00104e800420829b0004807b000083140004833b0008801800007c0903a67f2803a63b7b000c4e800420|@4557,1048575| 4557:S23|545950455f5452454528292e6669727374417267283129 4558:O2|@4560,@4559 4559:O6|@4563,@4472,@4562,@4193,@4488,@4517 4560:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@4561,1048575| 4561:S33|545950455f5452454528292e67656e6572616c6973654f7665726c6f6164283129 4562:O4|@4567,@4190,@4193,@206 4563:C2,640|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002128050001418200dc82d8000c82b6000c82950018973bfffc971bfffc947bfffc949bfffc83140000801800007c0803a64e8000212803000141820048827b00088253000c8232000c82110018807b000483100008801800007c0803a64e80002181fb000880630004830f0010801800007c0803a64e8000213ae3000048000088827b00088253000c82320018398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a1d0004919d00003de002ab61ef158891f000083dc002a061cec7ac91d00004815100009150000038700000800d00287c0803a64e800021973bfffc971bfffc947bfffc949bfffc83180014801800007c0803a64e8000213ae30000833b00088319000c82d8000c82b6002896fbfffc3877000083150000801800007c0803a64e80002128030001418200d0829b000c8274000c8253000c82320028807b000083110008801800007c0803a64e800021821b000c947bfffc807b000883100008801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002139fd0004919d000081db000091cf0004906f0000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021395d0004919d000039200001912a000491ea0000811b001038a00003388a0000807b000c83080004833b0014801800007c0903a67f2803a63b7b00184e800420829b000c8274000c82530018398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a3d0004919d00003e0002ab621015ac921100083de002a061efc7ac91f1000481d2000091d1000038710000800d00287c0803a64e800021|@4566,1048575|208,3,@4564 220,3,@227 592,3,@4565 604,3,@227 4564:S26|676574526573756c74202d206e6f7420612066756e6374696f6e 4565:S42|67656e6572616c6973654f7665726c6f6164202d20617267206973206e6f742061207479706520766172 4566:S33|545950455f5452454528292e67656e6572616c6973654f7665726c6f6164283329 4567:C2,216|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021971bfffc706b00014082008882e300042c1700014082005482d8000882b6000c973bfffc80030000941bfffc807b00008315004c801800007c0803a64e800021829b000838a00001809b000083140004833b0004801800007c0903a67f2803a63b7b000c4e800420973bfffc3b1b00043c0002ab600017007c0803a64e80002182db00007ec803a63b7b00084e800020973bfffc3b1b00043c0002ab600017007c0803a64e800021833b00007f2803a63b7b00084e800020|@4570,1048575|144,3,@4568 184,3,@4568 4568:C2,436|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000082d7000882b6000c829500283a630000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d00003a400001924300103a2000019223000c3a0000019203000881f500a091e3000481d7000c91c30000973bfffc971bfffc967bfffc80140004941bfffc8315009c801800007c0803a64e800021831b0000801800007c0803a64e800021815b0008812a00008109000880e8000c80c70020947bfffc807b000883060004801800007c0803a64e80002180bb000c80850000832400088319000c82f80028947bfffc80180094941bfffc807b000883170000801800007c0803a64e800021280300014182003482bb001482950000827400088253000c82320028807b000883110008801800007c0803a64e8000213ac30000480000183c6002a160630a30800d00287c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000821b00049203000492c30000831b0000801800007c0803a64e800021807b000881fb00187de803a63b7b001c4e800020|@4569,1048575|332,3,@341 4569:S30|545950455f5452454528292e6d6b4f7665726c6f61645365742831292f32 4570:S28|545950455f5452454528292e6d6b4f7665726c6f6164536574283129 4571:O2|@4573,@4572 4572:O7|@4576,@4517,@4190,@4193,@4580,@4472,@4575 4573:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@4574,1048575| 4574:S37|545950455f5452454528292e74797065436f6e73747246726f6d4f7665726c6f6164283129 4575:O2|@4583,@4193 4576:C2,92|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021971bfffc973bfffc83180004801800007c0803a64e8000213b1b00043c0002ab60001a507c0803a64e800021833b00007f2803a63b7b00084e800020|@4579,1048575|60,3,@4577 4577:C2,1856|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000082d7000c82b6000c82950028973bfffc971bfffc947bfffc83140000801800007c0803a64e8000212803000141820544827b0004825300008232000c8211000c81f00028807b0000830f0008801800007c0803a64e80002181db0004814e0000812a000c8109000c947bfffc83080090801800007c0803a64e80002180fb000880c7000080a6000c8085000c83240020947bfffc83190000801800007c0803a64e80002128030001418204a4831b000c82f8000082d7000c82b6000c82950020807b000083140008801800007c0803a64e800021827b000c825300008232000c8211000c947bfffc38830000807000a883120010801800007c0803a64e80002128030001418200b081fb001081cf0000814e000c812a000c800900a8941bfffc80090094941bfffc807b00048309004c801800007c0803a64e800021811b001880e8000038a00001809b000483070008801800007c0803a64e80002138c30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000090c3000480bb001090a30000831b0000801800007c0803a64e800021807b0004809b001c7c8803a63b7b00204e80002081fb001081cf0000814e000c812a000c809b0000806900b8830e0010801800007c0803a64e80002128030001418200b0811b001080e8000080c7000c80a6000c800500b8941bfffc80050094941bfffc807b00048305004c801800007c0803a64e800021809b00188324000038a00001809b000483190008801800007c0803a64e8000213b030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00009303000482fb001092e30000831b0000801800007c0803a64e800021807b000482db001c7ec803a63b7b00204e800020811b001080e8000080c7000c80a6000c809b0000806500b483070010801800007c0803a64e80002128030001418200b0809b0010806400008323000c8319000c801800b4941bfffc80180094941bfffc807b00048318004c801800007c0803a64e80002182fb001882d7000038a00001809b000483160008801800007c0803a64e8000213aa30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a30004829b001092830000831b0000801800007c0803a64e800021807b0004827b001c7e6803a63b7b00204e800020809b0010806400008323000c8319000c809b000082e30010807800ac3b170000801800007c0803a64e80002128030001418200b082db001082b600008295000c8274000c801300ac941bfffc80130094941bfffc807b00048313004c801800007c0803a64e800021825b00188232000038a00001809b000483110008801800007c0803a64e8000213a030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00009203000481fb001091e30000831b0000801800007c0803a64e800021807b000481db001c7dc803a63b7b00204e80002082db001082b600008295000c8274000c809b0000807300b083150010801800007c0803a64e80002128030001418200b0825b0010823200008211000c81f0000c800f00b0941bfffc800f0094941bfffc807b0004830f004c801800007c0803a64e80002181db0018814e000038a00001809b0004830a0008801800007c0803a64e80002139230000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000091230004811b001091030000831b0000801800007c0803a64e800021807b000480fb001c7ce803a63b7b00204e800020825b0010823200008211000c81f0000c806f00c481db00147dc803a63b7b00184e800020831b000c82f8000082d7000c82b6000c807500c4829b00107e8803a63b7b00144e800020827b0004825300008232000c8211000c81f00024807b0000830f0000801800007c0803a64e800021280300014182015c81db0004814e0000812a000c8109000c80e80024807b000083070008801800007c0803a64e80002180db000480a600008085000c8324000c80030000941bfffc8063000883190008801800007c0803a64e800021831b000882f8000082d7000c82b6000c947bfffc83150058801800007c0803a64e800021829b000c827400008253000c8232000c8211001483100000801800007c0803a64e8000212803000141820018807b000081fb00107de803a63b7b00144e80002081fb000c81cf0000814e000c812a000c807b000083090058801800007c0803a64e800021811b000c80e8000080c7000c80a6000c947bfffc807b000483050054801800007c0803a64e800021809b001083240000809b000883190018801800007c0803a64e800021831b001082f8000038a0000338830000807b000083170014801800007c0803a64e800021831b0010833b00147f2803a63b7b00184bfff8f081db0004814e0000812a000c8109000c806800c480fb00087ce803a63b7b000c4e800020|@4578,1048575| 4578:S48|545950455f5452454528292e74797065436f6e73747246726f6d4f7665726c6f61642832297072656654797065283129 4579:S37|545950455f5452454528292e74797065436f6e73747246726f6d4f7665726c6f6164283229 4580:O2|@4581,@4193 4581:C2,268|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021708b0001408200e082f8000482d7000c973bfffc971bfffc947bfffc80040000941bfffc80040004941bfffc80160040941bfffc8316006c801800007c0803a64e80002182bb0010829500048274000c947bfffc807b000c8313006c801800007c0803a64e8000213a430000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092430004823b000092230000831b0004801800007c0803a64e800021280300014182001838600003821b00187e0803a63b7b001c4e800020809b0008807b0010831b0014833b00187f2803a63b7b001c4bffff08386000014e800020|@4582,1048575| 4582:S22|545950455f5452454528292e6973496e536574283229 4583:C2,344|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021706b00014082012c708b00014082011c82f8000482d7000c82b60028973bfffc971bfffc80030000941bfffc80030004941bfffc80040000941bfffc80040004941bfffc807b000c83150000801800007c0803a64e8000212803000141820030827b0010825300048232000c82110028807b000c83100008801800007c0803a64e8000213a830000480000183c6002a160630a30800d00287c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002139fd0004919d0000928f000481db000491cf000095fbfffc809b0004807b000c831b00144bffff01398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021395d0004919d0000906a0004813b0000912a0000386a0000811b00187d0803a63b7b001c4e800020386000014e800020386000014e800020|@4584,1048575|172,3,@341 4584:S23|545950455f5452454528292e636f707956617273283229 4585:O2|@4587,@4586 4586:O4|@4589,@4472,@4575,@4193 4587:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@4588,1048575| 4588:S29|545950455f5452454528292e6d616b654571756976616c656e74283129 4589:C2,176|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000c82d7000c973bfffc971bfffc947bfffc949bfffc83160058801800007c0803a64e80002182bb00088295000c8274000c947bfffc807b000883130054801800007c0803a64e800021825b000c809b000483120008801800007c0803a64e800021823b000c38a0000338830000807b000083110004833b0010801800007c0903a67f2803a63b7b00144e800420|@4590,1048575| 4590:S29|545950455f5452454528292e6d616b654571756976616c656e74283229 4591:O2|@4593,@4592 4592:O4|@4595,@4472,@4575,@4193 4593:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@4594,1048575| 4594:S32|545950455f5452454528292e636f6e7374727563746f72526573756c74283129 4595:C2,348|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000c82d7000c82b60018973bfffc971bfffc947bfffc949bfffc83150000801800007c0803a64e8000212803000141820030827b00088253000c8232000c82110018807b000483100008801800007c0803a64e8000213a830000480000183c6002a160630a30800d00287c0803a64e80002181fb000881cf000c814e000c812a002480140000941bfffc80140004941bfffc807b000083090000801800007c0803a64e800021280300014182003080fb001080c7000c80a6000c80850024807b000083040008801800007c0803a64e80002139030000480000183c6002a160630a30800d00287c0803a64e800021807b0010809b000883230008806800003b190000801800007c0803a64e800021831b001038a0000338830000807b000483180004833b0014801800007c0903a67f2803a63b7b00184e800420|@4596,1048575|128,3,@341 252,3,@341 4596:S32|545950455f5452454528292e636f6e7374727563746f72526573756c74283229 4597:O2|@4599,@4598 4598:O3|@4601,@4526,@4548 4599:C2,64|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180c3000c80a30008808300048063000083180004801800007c0903a64e800420|@4600,1048575| 4600:S22|545950455f5452454528292e646973706c6179283129 4601:C2,136|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc947bfffc949bfffc94bbfffc94dbfffc3860000183180008801800007c0803a64e800021833b0010831b000082fb0014931b001438c3000080bb0004809b0008807b000c831900043b370000801800007c0903a67f2803a63b7b00144e800420|@4602,1048575| 4602:S22|545950455f5452454528292e646973706c6179283429 4603:O2|@4605,@4604 4604:O5|@4608,@4193,@4607,@4526,@4548 4605:C2,64|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180c3000c80a30008808300048063000083180004801800007c0903a64e800420|@4606,1048575| 4606:S33|545950455f5452454528292e646973706c617954797065436f6e73747273283129 4607:O3|@4620,@4193,@4526 4608:C2,1276|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc947bfffc949bfffc94bbfffc94dbfffc3860000183180010801800007c0803a64e800021833b0008572bf80140a20010800d00347c0803a64e8000212c1900014181004c831b001082f8000482d70014807b000483160000801800007c0803a64e8000213aa300003c6002aa6063f9243b150000833b0014801800007c0903a67f2803a63b7b00184e800420831b001082f8000482d7000c947bfffc807b001083160060801800007c0803a64e800021280300014182023482bb001482950004827400108254000c80130004941bfffc807b00148312004c801800007c0803a64e800021831b0000801800007c0803a64e800021823b00188211000481f0001480030004941bfffc807b0010830f0004801800007c0803a64e80002139c300003c6002a16063f6583b0e0000801800007c0803a64e800021815b001c812a000481090014807b001083080000801800007c0803a64e80002138e300003c6002a7606342fc3b070000801800007c0803a64e80002180db001c80a6000480850014807b00108304000c801800007c0803a64e8000213b2300003c6002ab60632ff83b190000801800007c0803a64e800021831b001c82f8000482d7000c807b001883160054801800007c0803a64e80002182bb001c829b000c969bfffc80db001480bb000c809b001883150008801800007c0803a64e800021827b001c8253000482320014807b001083110000801800007c0803a64e800021947bfffc3c8002ab60843004807b00043c0002a1600074a87c0803a64e800021831b0000801800007c0803a64e800021821b002081f0000481cf000c807b001c830e0060801800007c0803a64e800021815b0018398000025540f80140a20010800d00347c0803a64e8000217d2c541141a3fff0388900003b1b00243c0002ab600030107c0803a64e800021811b002080e8000480c70014807b001483060008801800007c0803a64e80002138a30000386000013b050000833b0024801800007c0903a67f2803a63b7b00284e80042082bb001482950004827400108254000c80130004941bfffc807b00148312004c801800007c0803a64e800021831b0000801800007c0803a64e800021823b00188211000481f0001480030004941bfffc807b0010830f0004801800007c0803a64e80002139c300003c6002a66063e9d83b0e0000801800007c0803a64e800021815b001c812a000481090014807b001083080000801800007c0803a64e80002180fb001c80c7000480a6000c947bfffc807b001c83050064801800007c0803a64e80002128030001418200103c6002a7606342c44800000c3c6002a760634190831b0000801800007c0803a64e800021809b00208064000483230014807b00148319000c801800007c0803a64e8000213b0300003c6002a06063ee14801800007c0803a64e80002182fb002082d7000482b6000c807b001c83150054801800007c0803a64e800021829b0020827b0010967bfffc80db001880bb0010809b001c83140008801800007c0803a64e800021825b00208232000482110014807b001483100000801800007c0803a64e80002139e30000807b00043b0f0000801800007c0803a64e80002181db0020814e0004812a0014807b001483090008801800007c0803a64e80002139030000386000013b080000833b0024801800007c0903a67f2803a63b7b00284e800420|@4619,1048575|144,3,@4530 328,3,@711 388,3,@2787 448,3,@4609 580,3,@4610 592,3,@511 700,3,@4611 888,3,@2419 988,3,@2783 1000,3,@2758 1060,3,@265 4609:O2|1,2 4610:S2|203d 4611:C2,384|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e80002082f8fffc82d7000482b60014973bfffc971bfffc949bfffc80030000941bfffc80030004941bfffc8078fff083150004801800007c0803a64e8000213a8300003c6002ab606331ac3b140000801800007c0803a64e800021827b000c8253fffc823200048211000c807b00048310002c801800007c0803a64e80002181fb000c81cffffc814e0004812a000c947bfffc807b000883090030801800007c0803a64e80002180db000c38a30000809b000038600003831b00103c0002ab600031b87c0803a64e800021811b000c398000025500f80140a20010800d00347c0803a64e8000217cec441141a3fff038870000807b0004831b00103c0002ab600038347c0803a64e80002180db001080a6fffc8085000480640014832300088066fff03b190000801800007c0803a64e8000213b03000038600001833b0014801800007c0903a67f2803a63b7b00184e800420|@4618,1048575|112,3,@4612 232,3,@4613 296,3,@4616 4612:O2|2,1 4613:C2,1564|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021280300014182006082d8fffc82b6000482950014973bfffc971bfffc947bfffc949bfffc94bbfffc94dbfffc8078fff08314000c801800007c0803a64e8000213a6300003c6002ab60632ff83b130000801800007c0803a64e8000213ae300004800005c82f8fffc82d7000482b60014973bfffc971bfffc947bfffc949bfffc94bbfffc94dbfffc8078fff08315000c801800007c0803a64e8000213a8300003c6002a06063ee143b140000801800007c0803a64e8000213ae30000827b00108253fffc82320004821100148073fff083100004801800007c0803a64e80002139e300003c6002a16063f6583b0f0000801800007c0803a64e80002181db0010814efffc812a000481090014806efff083080004801800007c0803a64e80002138e300003c6002a16063f6583b070000801800007c0803a64e80002180db000c280600014182004480bb00108085fffc80640004832300148065fff08319000c801800007c0803a64e8000213b0300003c6002a16063f670801800007c0803a64e800021480000f880bb00108085fffc80640004832300148065fff083190004801800007c0803a64e8000213b0300003c6002a16063f658801800007c0803a64e80002182fb001082d7fffc82b60004829500148077fff083140000801800007c0803a64e8000213a630000386000f93b130000801800007c0803a64e800021825b00108232fffc8211000481f000148072fff0830f000c801800007c0803a64e80002139c300003c6002ab60632ff83b0e0000801800007c0803a64e800021815b0010812afffc8109000480e80014806afff083070008801800007c0803a64e80002138c30000386000013b060000801800007c0803a64e80002180bb000054abf80140a20010800d00347c0803a64e8000212c05000141810048809b00108064fffc83230004831900148064fff083180000801800007c0803a64e8000213ae300003c6002aa6063f9243b170000801800007c0803a64e80002148000118809b00108064fffc83230004831900148064fff083180000801800007c0803a64e8000213ae30000807b00083b170000801800007c0803a64e80002182db001082b6fffc829500048274000c82530018807b000483120000801800007c0803a64e80002128030001418200ac823b00108211fffc81f0000481cf000c814e0018807b0004830a0008801800007c0803a64e800021813b00108109fffc80e8000480c700148069fff08306000c801800007c0803a64e80002138a300003c6002ab606337f03b050000801800007c0803a64e800021809b00108064fffc83230004831900148064fff083180000801800007c0803a64e8000213ae300003c6002a7606341403b170000801800007c0803a64e800021823b00108211fffc81f0000481cf00148071fff0830e0008801800007c0803a64e80002139430000386000013b0a0000801800007c0803a64e800021813b00108109fffc80e8000480c7000c80a60018807b000483050000801800007c0803a64e8000212803000141820158809b00108064fffc832300048319000c82f80018807b000483170008801800007c0803a64e80002182db000056cbf80140a20010800d00347c0803a64e8000212c1600014081011082bb00108295fffc82740004825300148075fff08312000c801800007c0803a64e8000213a2300003c6002ab606337f03b110000801800007c0803a64e800021821b001081f0fffc81cf0004814e000c812a0018807b000483090000801800007c0803a64e800021280300014182003880fb001080c7fffc80a600048085000c8064001883230008807b00043b190000801800007c0803a64e80002139030000480000183c6002a160630a30800d00287c0803a64e800021831b0000398000025700f80140a20010800d00347c0803a64e8000217eecc41141a3fff082db001082b6fffc8296ffec969bfffc80d6ffe880b6fff038970000806800008315000c801800007c0803a64e800021809b00108064fffc83230004831900148064fff083180008801800007c0803a64e8000213ae30000386000013b170000833b0014801800007c0903a67f2803a63b7b00184e800420|@4615,1048575|100,3,@4609 192,3,@265 260,3,@711 324,3,@711 400,3,@713 464,3,@711 584,3,@4609 740,3,@4530 956,3,@4614 1020,3,@2752 1264,3,@4614 1388,3,@341 4614:O2|1,4 4615:S46|545950455f5452454528292e646973706c617954797065436f6e737472732834297056616c436f6e737472283429 4616:C2,288|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e800020548bf80140a20010800d00347c0803a64e8000212c04000140800010386000017f2803a64e80002082f8fffc82d7000482b6000c973bfffc971bfffc949bfffc80030000941bfffc80030004941bfffc807b00048315002c801800007c0803a64e800021829b000c8274fffc825300048232000c947bfffc807b000883110030801800007c0803a64e80002180db000c38a30000809b000038600001831b00103c0002ab600031b87c0803a64e800021821b000c398000025600f80140a20010800d00347c0803a64e8000217dec841141a3fff0388f0000807b0004831b0010833b00147f2803a63b7b00184bfffeec|@4617,1048575|208,3,@4613 4617:S50|545950455f5452454528292e646973706c617954797065436f6e737472732834297056616c436f6e73747252657374283229 4618:S50|545950455f5452454528292e646973706c617954797065436f6e737472732834297056616c436f6e7374724c697374283229 4619:S33|545950455f5452454528292e646973706c617954797065436f6e73747273283429 4620:C2,852|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc947bfffc949bfffc94bbfffc94dbfffc3ae000012c0300014082000c3ad70000480000483980000256e0f80140a20010800d00347c0803a64e8000217cd7661541a3fff0806300043ae60000800d00187c1b004040a00010800d00207c0803a64e8000214bffffb02c160003408200a480db000c70cb00014082000c80a60000480000183c6002a36063dfcc800d00287c0803a64e800021809b0010807b0018947bfffc80db00083b25000080bb000483040008809b000c38790000801800007c0803a64e80002182fb001082d7000482b60014807b00008315000c801800007c0803a64e8000213a8300003c6002a06063ee143b140000833b0014801800007c0903a67f2803a63b7b001c4e80042056cbf80140a20010800d00347c0803a64e8000212c160003408101f082bb000856abf80140a20010800d00347c0803a64e8000212c1500034181004c829b00108274000482530014807b000083120000801800007c0803a64e8000213a2300003c6002aa6063f9243b110000833b0014801800007c0903a67f2803a63b7b001c4e800420829b00108274000482530014807b000083120004801800007c0803a64e8000213a2300003c6002a16063f6583b110000801800007c0803a64e800021821b001081f0000481cf0014807b0000830e0000801800007c0803a64e80002139430000386000513b0a0000801800007c0803a64e800021813b00108109000480e80014807b00008307000c801800007c0803a64e80002138c300003c6002a16063f6583b060000801800007c0803a64e800021809b000c807b00083b1b00143c0002ab60003d847c0803a64e80002180bb0010808500048064001483230000807b00003b190000801800007c0803a64e8000213b03000038600053801800007c0803a64e80002182fb001082d7000482b60014807b000083150008801800007c0803a64e8000213a830000386000013b140000801800007c0803a64e800021827b00108253000482320014807b00008311000c801800007c0803a64e8000213a0300003c6002a06063ee143b100000833b0014801800007c0903a67f2803a63b7b001c4e8004203860000182bb00147ea803a63b7b001c4e800020|@4623,1048575|172,3,@1386 276,3,@265 408,3,@4530 480,3,@711 596,3,@711 632,3,@4621 796,3,@265 4621:C2,616|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021546bf80140a20010800d00347c0803a64e8000212c0300014181005082f8fffc82d7000482b60014973bfffc8078ffec83150000801800007c0803a64e8000213a8300003c6002aa6063f9243b140000833b0000801800007c0903a67f2803a63b7b00044e80042028040001418201d0708b00014082000c82e4000048000020973bfffc3ae300003c6002a36063dfcc800d00287c0803a64e80002182d8fffc973bfffc971bfffc947bfffc949bfffc82b8000496bbfffc80d8fff080b8ffec388300003877000083160008801800007c0803a64e800021829b00088274fffc82530004823200148074ffec8311000c801800007c0803a64e8000213a0300003c6002a16063f6583b100000801800007c0803a64e80002181fb000071eb00014082000c81cf0004480000183c6002a36063dfcc800d00287c0803a64e800021280e0001418200e4815b0008812afffc8109000480e80014806affec83070000801800007c0803a64e80002138c30000386000593b060000801800007c0803a64e80002180bb00088085fffc80640004832300148065ffec8319000c801800007c0803a64e8000213b0300003c6002a06063ee14801800007c0803a64e80002182fb000072eb00014082000c82d70004480000183c6002a36063dfcc800d00287c0803a64e80002182bb00043980000256a0f80140a20010800d00347c0803a64e8000217e8cac1141a3fff03896000038740000831b0008833b000c7f2803a63b7b00104bfffdc438600001815b000c7d4803a63b7b00104e800020386000017f2803a64e800020|@4622,1048575|100,3,@4530 168,3,@1386 288,3,@711 332,3,@1386 460,3,@265 500,3,@1386 4622:S36|545950455f5452454528292e7072696e7454797065566172732835297056617273283229 4623:S28|545950455f5452454528292e7072696e745479706556617273283529 4624:O2|@4626,@4625 4625:O2|@4628,@4193 4626:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@4627,1048575| 4627:S26|545950455f5452454528292e73616d6554797065566172283129 4628:C2,336|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7000c82b60028973bfffc971bfffc947bfffc949bfffc83150000801800007c0803a64e80002128030001418200ec829b0008827400048253000c82320028807b000483110008801800007c0803a64e800021821b000881f0000481cf000c814e0028947bfffc807b0004830a0000801800007c0803a64e8000212803000141820084813b000c8109000480e8000c80c70028807b000483060008801800007c0803a64e80002180bb000c808500048324000c3b030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00009303000482fb000092e3000083190098833b0010801800007c0903a67f2803a63b7b00144e80042038600001813b00107d2803a63b7b00144e80002038600001829b000c7e8803a63b7b00104e800020|@4629,1048575| 4629:S26|545950455f5452454528292e73616d6554797065566172283229 4630:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@4631,1048575| 4631:S23|545950455f5452454528292e636f707954797065283129 4632:O5|@4634,@4642,@4645,@4633,@4403 4633:O2|@4653,@9449 4634:O2|@4636,@4635 4635:O3|@4638,@4407,@9450 4636:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@4637,1048575| 4637:S22|5052494e545f5441424c4528292e6164645070283129 4638:C2,204|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213afd0004919d000090970004907700008098000882c40000947bfffc971bfffc973bfffc949bfffc96fbfffc387600003b1b00103c0002ab6000448c7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d000090750004829b000092950000827b000492b3000038600001825b00087e4803a63b7b00144e800020|@4641,1048575|112,3,@4639 4639:C2,264|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e80002082e3000082d8fffc82b600048295000482630004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082580000924300048237000092230000973bfffc971bfffc96fbfffc967bfffc83140000801800007c0803a64e800021280300014182001c807b0000831b0008833b000c7f2803a63b7b00104bffff54807b0000831b00084bffff41398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a1d0004919d00009070000481fb000491f000003870000081db000c7dc803a63b7b00104e800020|@4640,1048575| 4640:S31|5052494e545f5441424c4528292e616464507028322966696c746572283129 4641:S22|5052494e545f5441424c4528292e6164645070283229 4642:O3|@4643,@4407,@9450 4643:C2,244|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000882d70000973bfffc971bfffc947bfffc2c160001408200183c6002a0606395e0800d00287c0803a64e80002180760000833b00048319000482f8000482a3000082830004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000827b00009263000492a30000969bfffc80160004941bfffc83170000801800007c0803a64e8000212803000141820018807b0004825b00107e4803a63b7b00144e80002082db00003b7b0008800d00187c1b004040a00010800d00207c0803a64e8000214bffff44|@4644,1048575|60,3,@51 4644:S25|5052494e545f5441424c4528292e6765745072696e74283129 4645:O2|@4647,@4646 4646:O3|@4649,@9449,@4407 4647:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@4648,1048575| 4648:S28|5052494e545f5441424c4528292e6164644f7665726c6f6164283129 4649:C2,208|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021971bfffc949bfffc947bfffc398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213afd0004919d000090b70008909700049077000082d8000480760000973bfffc96dbfffc96fbfffc3b1b00143c0002ab600048c07c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d000090750004829b000092950000827b000492b3000038600001825b00087e4803a63b7b00184e800020|@4652,1048575|116,3,@4650 4650:C2,424|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e80002082e300003ad900003ab800003a97000082770004824300048095fff8807700003f00000063184368801800007c0803a64e80002128030001418200b8823500008211000881f0000496dbfffc96bbfffc969bfffc967bfffc965bfffc800f0000941bfffc8075fffc830f0004801800007c0803a64e80002181db0010814e0000812a000881090004947bfffc807b000c83080004801800007c0803a64e80002138e30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000090e3000480db000090c30000831b0004801800007c0803a64e80002128030001418200404800002496dbfffc96bbfffc969bfffc947bfffc965bfffc947bfffc947bfffc4800001c807b0008831b0014833b00187f2803a63b7b001c4bfffeb4807b0008831b00144bfffea1398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a3d0004919d000090710004821b0010921100003871000081fb00187de803a63b7b001c4e800020|@4651,1048575|80,3,I24 4651:S37|5052494e545f5441424c4528292e6164644f7665726c6f616428332966696c746572283129 4652:S28|5052494e545f5441424c4528292e6164644f7665726c6f6164283329 4653:C2,80|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc82f80004807700003a3900003b1b00003c0002ab60004b447c0803a64e8000217e2803a63b7b00044e800020|@4656,1046531|52,3,@4654 4654:C2,264|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e80002082e300003ad900003ab8000082970004827700088243000480970000807500003f00000063184368801800007c0803a64e800021280300014182008c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021389d0004919d0000926400049284000096dbfffc96bbfffc949bfffc387200003b1500004bffff55398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b0000931900003879000082fb00087ee803a63b7b000c4e800020387200003b1500003b3600007f2803a64bffff04|@4655,1044483|80,3,I24 4655:S42|5052494e545f5441424c4528292e6765744f7665726c6f6164732831297365617263684c697374283129 4656:S29|5052494e545f5441424c4528292e6765744f7665726c6f616473283129 4657:O1|@4658 4658:O1|@4659 4659:C2,416|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc3c0002ab60004e907c0803a64e800021947bfffc947bfffc8323000828190001418200e8947bfffc8303000438600001801800007c0803a64e80002182e300042c170001408200a882db00003860000183160000801800007c0803a64e80002182a300082815000141820068947bfffc82830004386000013b140000801800007c0803a64e800021826300042c1300014082002882db00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffff983a5b0008823b0000923200003a1b000892700004480000583a9b0004907400003a7b00043a40000192530004947bfffc4800003c3adb000482bb000092b600003a9b000492f40004947bfffc480000203b1b0000907800003afb00003ac0000192d70004947bfffc947bfffc398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082bb000892a30000829b000c928300043f0002ab631855f0833b00103c0002ab600056087c0903a67f2803a63b7b00144e800420|@4687,1048575|36,3,@4660 380,3,@4674 392,3,@4676 4660:C2,496|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc947bfffc830300002c18ffff4082005882e3000c82d7000082b60000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a9d0004919d00003e6002ab6273509c9274000092d400043adb000092b600003abb0000929500044800005882e300088197fffc558c09fc61960001398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003e8002ab629451809295000092f500043a7b000092d300003adb000092b60004398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003e8002ab6294522492950000827b00009275000882fb000492f50004973bfffc96bbfffc3ac0ffff3980000256c0f80140a20010800d00347c0803a64e8000217eb6661541a3fff0829b00087eaba038556bf80140a20010800d00347c0803a64e8000217c15a0004180002438750000831b0000833b0004801800007c0903a67f2803a63b7b00104e80042096bbfffc38750000831b0010801800007c0803a64e8000212c0300014082002882db00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffff5c807b0000831b0004833b0008801800007c0903a67f2803a63b7b00144e800420|@4673,1048575|100,3,@4661 188,3,@4663 256,3,@4664 4661:C2,156|7f2802a663390002546bf80140a20010800d00347c0803a64e8000212c030001408000084800003082f8000482d700007c6bb038556bf80140a20010800d00347c0803a64e8000217c03b000408000084800001c973bfffc3c6002a0606395e0800d00287c0803a64e800021398000025460f80140a20010800d00347c0803a64e8000217ec3661541a3fff056cc083a7c77602e7f2803a64e800020|@4662,983041|88,3,@51 4662:S34|486173685461626c652e686173684f7665722831293c7061747465726e3e2d283129 4663:C2,136|7f2802a663390002546bf80140a20010800d00347c0803a64e8000212c030001408000084800003882f800048197fffc558c09fc619600017c6bb038556bf80140a20010800d00347c0803a64e8000217c03b000408000084800001c973bfffc3c6002a0606395e0800d00287c0803a64e800021546c083a7ed7602e387600007f2803a64e800020|@4662,983041|96,3,@51 4664:C2,240|7f2802a66339000282f800087c6bb838556bf80140a20010800d00347c0803a64e8000217c03b8004080000c3ac00003480000083ac00001398000053bbdffe87c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003e8002ab62945330929500009075001092f5000c829800049295000893150004398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213a7d0004919d00003e4002ab62525474925300009073000c92f3000892930004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092c300089263000492a300007f2803a64e800020|@4672,1044481|92,3,@4665 160,3,@4667 4665:C2,252|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc80780010398000025460f80140a20010800d00347c0803a64e8000217f23661541a3fff0831b00008078000c7f2b1838556bf80140a20010800d00347c0803a64e8000217c191800418000243879000083180004833b0004801800007c0903a67f2803a63b7b00084e800420973bfffc3879000083180008801800007c0803a64e8000212c03000140820028807b00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffff58833b0004807b000083190004833b0008801800007c0903a67f2803a63b7b000c4e800420|@4666,1048575| 4666:S35|486173685461626c652e686173684f7665722831296d616b6549746572283129283129 4667:C2,160|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000218078000c82f800087c6bb838556bf80140a20010800d00347c0803a64e8000217c03b80040800044973bfffc83180004801800007c0803a64e8000212c030001408200183c6002ab60635530800d00287c0803a64e80002182db00007ec803a63b7b00044e800020973bfffc3c6002ab60635568800d00287c0803a64e800021|@4666,1048575|100,3,@4668 140,3,@4670 4668:O3|@9377,@227,@4669 4669:S31|486173685461626c652e686173684f7665722e76616c756520284e6f6e6529 4670:O3|@9377,@227,@4671 4671:S39|486173685461626c652e686173684f7665722e76616c756520286c696d69742070617373656429 4672:S32|486173685461626c652e686173684f7665722831296d616b6549746572283129 4673:S21|486173685461626c652e686173684f766572283129 4674:O2|@4676,@4675 4675:O2|@4683,@4674 4676:C2,208|7f2802a66339000282e30004281700014082000c3ac00003480000083ac000016ad50002398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213add0004919d00003e8002ab629456f492960000907600088298000492960004398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a7d0004919d00003e4002ab6252577c9253000090730004398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a5d0004919d000092b200089272000492d20000387200007f2803a64e800020|@4682,1044481|72,3,@4677 132,3,@4679 4677:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f80008809700048077000083180004801800007c0903a64e800420|@4678,1048575| 4678:S40|556e6976657273616c5461626c652e756e69764f7665722831296d616b6549746572283129283129 4679:C2,208|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc947bfffc8078000482e300042c1700014082001c973bfffc3c6002ab60635868800d00287c0803a64e80002182c30000973bfffc80170000941bfffc3860000183160004801800007c0803a64e8000213abb000882830000929500003a7b0008825b000092530004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000823b000892230000821b000c9203000481fb00047de803a63b7b00104e800020|@4678,1048575|60,3,@4680 4680:O3|@9377,@227,@4681 4681:S29|556e6976657273616c5461626c652e756e69764f7665722e76616c7565 4682:S37|556e6976657273616c5461626c652e756e69764f7665722831296d616b6549746572283129 4683:C2,404|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0400014082001c973bfffc3c6002ab60635a80800d00287c0803a64e80002182e400042c17000140820108947bfffc947bfffc973bfffc80180004941bfffc82c30000386000013b160000801800007c0803a64e80002182a300082815000141820068947bfffc82830004386000013b140000801800007c0803a64e800021826300042c13000140820028807b00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffff943a5b000c823b0000923200003a1b000c927000044800001c3a9b0008907400003a7b00083a40000192530004947bfffc398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000823b000c92230000821b001092030004831b0004833b0008801800007c0903a67f2803a63b7b00144e8004203ac30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092e3000492c3000083180004801800007c0903a67f2803a64e800420|@4686,1048575|44,3,@4684 4684:O3|@9377,@227,@4685 4685:S28|556e6976657273616c5461626c652e756e69764f7665722e6e657874 4686:S33|556e6976657273616c5461626c652e756e69764f7665722831296e657874283229 4687:S26|556e6976657273616c5461626c652e756e69764f766572283129 4688:O3|@4690,@4689,@332 4689:O3|@4698,@4700,@4697 4690:O3|@4692,@4694,@4691 4691:O2|@4696,@9390 4692:O2|@4693,@9390 4693:C2,32|82e3000082d800047c17b0404082000c386000034e800020386000014e800020|@337,983041| 4694:O2|@4695,@9390 4695:C2,76|7f2802a6633900023ae30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092e300083ae0008b92e3000482f8000492e300007f2803a64e800020|@337,917505| 4696:C2,48|82e3000082d800047c17b0404082000c806300084e800020973bfffc3c6002a160630a30800d00287c0803a64e800021|@337,983041|28,3,@341 4697:O2|@4702,@9395 4698:O2|@4699,@9395 4699:C2,32|82e3000082d800047c17b0404082000c386000034e800020386000014e800020|@337,983041| 4700:O2|@4701,@9395 4701:C2,76|7f2802a6633900023ae30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092e300083ae0008b92e3000482f8000492e300007f2803a64e800020|@337,917505| 4702:C2,48|82e3000082d800047c17b0404082000c806300084e800020973bfffc3c6002a160630a30800d00287c0803a64e800021|@337,983041|28,3,@341 4703:O4|@9377,@4705,@1096,@4704 4704:O1|@4715 4705:O1|@4706 4706:C2,72|7f2802a6633900023b030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003ee002ab62f75de492e30000930300047f2803a64e800020|@4714,917505|48,3,@4707 4707:C2,52|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021809800043c0002ab60005e347c0903a64e800420|@4713,1048575|36,3,@4708 4708:C2,348|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e800020830300042c1800014082004080830000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003b00000193030004908300007f2803a64e800020973bfffc949bfffc971bfffc80030000941bfffc807b00003b040000801800007c0803a64e800021947bfffc947bfffc947bfffc389b0004807b00103b1b00183c0002ab60005fac7c0803a64e800021809b0014807b00084bffff31947bfffc809b0018807b00084bffff21398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213afd0004919d00009077000482db001092d700002c17000140820018807b000082bb001c7ea803a63b7b00204e80002096fbfffc807b00043b1b00203c0002ab6000612c7c0803a64e80002182bb00207ea803a63b7b00244e800020|@4712,1048575|184,3,@4709 316,3,@4711 4709:C2,328|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082001c3b000001930400003860000190640004386000014e800020973bfffc971bfffc949bfffc80030000941bfffc80030004941bfffc807b00048318ffe8801800007c0803a64e800021947bfffc947bfffc947bfffc389b0004807b000c831b00184bffff79833b0000281900014182005c398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b1d0004919d000082fb000492f8000482db001092d8000082bb001493150000829b00089295000438600001827b001c7e6803a63b7b00204e800020398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b1d0004919d000082fb000892f8000482db001092d8000082bb0014829b0004929500009315000438600001827b001c7e6803a63b7b00204e800020|@4710,1048575| 4710:S17|4c6973742e706172746974696f6e283329 4711:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c8078ffe04e800020973bfffc971bfffc80030000941bfffc806300044bffffbd398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b00009319000038790000833b00087f2803a63b7b000c4e800020|@468,786433| 4712:S17|4d6973632e717569636b536f7274283229 4713:S20|4d6973632e717569636b536f7274283129283129 4714:S17|4d6973632e717569636b536f7274283129 4715:C2,184|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021830300082818000141820088973bfffc947bfffc82e30004386000013b170000801800007c0803a64e80002182db0000947bfffc3860000183160000801800007c0803a64e8000214bffff99398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d000090750004829b00009295000038750000827b00087e6803a63b7b000c4e800020386000014e800020|@4716,1048575| 4716:S16|4d6973632e697465724c697374283129 4717:O6|@2111,@2114,@2117,@2120,@2110,@4366 4718:O15|@1111,@1118,@1112,@1118,@1115,@1121,@1869,@1867,@1125,@2183,I47,I15,0,1,64 4719:O3|@4721,@4723,@4720 4720:O2|@4725,@9451 4721:O2|@4722,@9451 4722:C2,32|82e3000082d800047c17b0404082000c386000034e800020386000014e800020|@337,983041| 4723:O2|@4724,@9451 4724:C2,76|7f2802a6633900023ae30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092e300083ae0008b92e3000482f8000492e300007f2803a64e800020|@337,917505| 4725:C2,48|82e3000082d800047c17b0404082000c806300084e800020973bfffc3c6002a160630a30800d00287c0803a64e800021|@337,983041|28,3,@341 4726:O1|@4762 4727:O1|@4728 4728:C2,8|386000014e800020|@4729,524289| 4729:S31|56414c55455f4f505328292e6e756c6c456e7669726f6e6d656e742d283129 4730:O1|@4731 4731:C2,8|386000014e800020|@4729,524289| 4732:O1|@4733 4733:C2,8|386000014e800020|@4729,524289| 4734:O1|@4735 4735:C2,8|386000014e800020|@4729,524289| 4736:O1|@4737 4737:C2,8|386000014e800020|@4729,524289| 4738:O1|@4739 4739:C2,8|386000014e800020|@4729,524289| 4740:O1|@4741 4741:C2,8|386000014e800020|@4729,524289| 4742:O1|@4743 4743:C2,8|386000014e800020|@4729,524289| 4744:O1|@4745 4745:C2,8|386000014e800020|@4729,524289| 4746:O1|@4747 4747:C2,8|386000014e800020|@4729,524289| 4748:O1|@4749 4749:C2,8|386000014e800020|@4729,524289| 4750:O1|@4751 4751:C2,8|386000014e800020|@4729,524289| 4752:O1|@4753 4753:C2,8|386000014e800020|@4729,524289| 4754:O1|@4755 4755:C2,8|386000014e800020|@4729,524289| 4756:O1|@4757 4757:C2,8|386000014e800020|@4729,524289| 4758:O1|@4759 4759:C2,8|386000014e800020|@4729,524289| 4760:O1|@4761 4761:C2,8|386000014e800020|@4729,524289| 4762:C2,8|386000014e800020|@4729,524289| 4763:O5|@4765,@6808,@6824,@6856,@4764 4764:O2|@6912,@6672 4765:O2|@4767,@4766 4766:O9|@4770,@4982,@6671,@6707,@6714,@6757,@6765,@6768,@4769 4767:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@4768,1048575| 4768:S29|535452554354555245535f28292e706173733253747275637473283129 4769:O4|@6780,@4982,@6707,@6779 4770:C2,264|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7000882b60130973bfffc971bfffc947bfffc949bfffc3865000083150008801800007c0803a64e8000213d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213a9d0004919d00003a60ffff92740000825b0008823200048211000881f00130969bfffc830f0004801800007c0803a64e80002181db000c814e0004812a0000947bfffc807b00088309000c801800007c0803a64e8000213d00000061084668951bfffc38c3000080bb0004809b0008807b00103b1b00183c0002ab600069e47c0803a64e80002180fb00147ce803a63b7b00184e800020|@4981,1048575|200,3,I48 232,3,@4771 4771:C2,268|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8fffc82d7000482b6000882950130973bfffc971bfffc947bfffc949bfffc94dbfffc3865000083140008801800007c0803a64e800021827b000c8253fffc398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a3d0004919d00003e0002ab62106b0c9211000081fb000491f1000881d2000491d10004947bfffc963bfffc815b00102c0a00014082001838600001813b00187d2803a63b7b00204e800020800a0004941bfffc806a00003b1b001c3c0002ab60006c107c0803a64e800021815b00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffffa4|@4980,1048575|132,3,@4772 216,3,@4774 4772:C2,168|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000218078000882e3000056ebf80140a20010800d00347c0803a64e8000212c1700014080002482d8000482b600083860000183150088801800007c0903a67f2803a64e8004203980000256e0f80140a20010800d00347c0803a64e8000217ed7661541a3fff092c3000082b80004829500083877000083140090801800007c0903a67f2803a64e800420|@4773,1048575| 4773:S56|535452554354555245535f28292e70617373325374727563747328332970617373325374727563742835296d616b65547970654964283129 4774:C2,196|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e300002c17000f40820018808300043c0002ab60006cf07c0903a64e8004202c17000540820018808300043c0002ab6000f9087c0903a64e8004202c17000b40820018808300043c0002ac600010587c0903a64e8004202c1700074082001c80830004806300083c0002ac600015747c0903a64e8004202c17000d4082002080a300088083000c806300043c0002ac60001d1c7c0903a64e800420386000014e800020|@4979,1048575|48,3,@4775 76,3,@4931 104,3,@4951 136,3,@4958 172,3,@4968 4775:C2,324|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8fffc82d7fffc82b600048295001c3a630000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d00003e4002ab62526e50924300008237fff4922300109263000c8218fff09203000881f6000891e30004973bfffc971bfffc967bfffc949bfffc83140000801800007c0803a64e800021947bfffc81db00042c0e00014082000848000068814e0000800e0004941bfffc812a0010953bfffc810a0014951bfffc80ca000c80aa0008808a0004806a00003b1b001c3c0002ab60006fb47c0803a64e80002181db00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffff94815b0000813b000c8109ffec80680024830a0000833b0010801800007c0903a67f2803a63b7b00144e800420|@4930,1048575|88,3,@4776 228,3,@4780 4776:C2,176|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc80180010941bfffc8018000c941bfffc80180008941bfffc388300003c6002ab60636f1c3c0002a1600074a87c0803a64e8000213c8002ab60846f303c0002a1600074a87c0803a64e800021833b000c831b0010907b001080db000080bb000438800003807b00083af80000831900043b370000801800007c0903a67f2803a63b7b00104e800420|@4779,1048575|68,3,@4777 76,3,@511 92,3,@4778 100,3,@511 4777:S10|53747275637475726520 4778:S43|2068617320616c7265616479206265656e20626f756e6420696e2074686973206465636c61726174696f6e 4779:S71|535452554354555245535f28292e7061737332537472756374732833297061737332537472756374283529706173733253747275637475726544656328322973456e762d283129 4780:C2,1336|7f2802a6633900023960005c800d00187d6bd8107c0b004040a00010800d00247c0803a64e80002182f8fffc82d7fffc82b6fffc829500048274000882530130973bfffc971bfffc947bfffc949bfffc94bbfffc94dbfffc8017fff4941bfffc8077ffec83120004801800007c0803a64e800021823b00148211fffc947bfffc809b0010807000043c0002a1600074a87c0803a64e8000213880005d3c0002a1600074a87c0803a64e80002181fb000c95fbfffc80db000880bb0004809b001881db001c830efffc3c0002ab600075087c0803a64e800021815b0020810a00002c0800014082000c392300004800038480fb001880c7fffc80a6fff480850000548bf80140a20010800d00347c0803a64e8000212c0400014081000c3b240000480000083b2000018306fffc82f8fffc82d7000482b6000882950130947bfffc973bfffc8066ffec83140004801800007c0803a64e800021827b00208253fffc947bfffc809b001c807200043c0002a1600074a87c0803a64e8000213880005d3c0002a1600074a87c0803a64e800021947bfffc80db002480bb0004809b0008807b0030823b00288311fffc3c0002ab60008ff07c0803a64e800021821b002481f0fffc81cffffc814efffc812a000481090008947bfffc83080078801800007c0803a64e80002180fb002880c7fffc80a6fffc8085fffc8324000483190008947bfffc807b00048318007c801800007c0803a64e800021947bfffc947bfffc82fb003482d7fffc82b6fffc8295fffc38bb000038830000807b000883140014801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a7d0004919d0000825b000092530000823b000492330004821b003481f0fffc81cffffc814efffc398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021393d0004919d00003d0002ab6108f6e09109000080ea000490e9000880db000c90c9000480bb002428050001418200c480670008967bfffc953bfffc83230078386600003b190000801800007c0803a64e800021831b003c82f8fffc82d7fffc82b6fffc8295000482740008947bfffc807b00188313007c801800007c0803a64e800021947bfffc947bfffc825b00488232fffc8211fffc81f0fffc38bb000038830000807b0008830f0014801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021389d0004919d000081db000091c40000815b0004914400044800001c38930000967bfffc953bfffc947bfffc947bfffc947bfffc807b00488323fffc8319fffc82f8fffc949bfffc82db004896dbfffc82b8fff496bbfffc80c3fff880bb001c809b002c807b003883170010801800007c0803a64e800021829b004c8274fffc8013ffe8941bfffc809b0048807300043c0002a1600074a87c0803a64e8000213880005d3c0002a1600074a87c0803a64e800021825b00508232fffc8211fffc81f0fffc947bfffc80db000880bb0004809b0018807b002c830f000c801800007c0803a64e800021392300003b7b003881db0018814efffc810afffc80e8fffc80c7000480a60008398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000091230004809b00109083000083050048801800007c0803a64e800021833b00188319fff03ae30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092e3000482db001092c3000096fbfffc83180004801800007c0803a64e80002182bb0028829b00009295000038600001827b00207e6803a63b7b002c4e800020|@4929,1048575|136,3,@511 156,3,@511 200,3,@4781 364,3,@511 384,3,@511 428,3,@4803 692,3,@4927 1040,3,@511 1060,3,@511 4781:C2,4392|7f2802a66339000239600060800d00187d6bd8107c0b004040a00010800d00247c0803a64e80002182f8fffc82d7fffc82b600048295000882740130973bfffc971bfffc947bfffc949bfffc94dbfffc3865000083130008801800007c0803a64e800021825b000c8232fffc8211fffc398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002139fd0004919d00003dc002ab61ce864c91cf0000815b0000914f000881300004912f0004811b001480e800002c07fff14082014080c9000c398000053bbdffe87c1df04040a00010800d001c7c0803a64e80002138bd0004919d00003c8002ab60848760908500008331fff4932500109105000c831b00049305000882f0000892e5000482c3002c398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d000090a3000c82a8000492a3000892c300043e8002ab629487e89283000080080008941bfffc83060020801800007c0803a64e800021827b00108253fffc8232fffc8211000481f00008947bfffc830f0030801800007c0803a64e800021280300014182002481db0014814efffc812afffc80690018811b00187d0803a63b7b00204e80002081db0004815b0000914e0000813b00148109fffc80e8fffc80c7000480a60008386a000083050034833b0018801800007c0903a67f2803a63b7b00204e8004202c07fffd4082038880d2fffc80a6fffc808500048324000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b1d0004919d00003ee002ab62f787fc92f800009098000482c40008398000053bbdffe87c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003e8002ab629488f4929500008266fff4927500109115000c81db000491d5000882e5000892f500043a830000398000073bbdffe07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a3001882b6005492a300143dc002ab61ce895491c300109303000c8314002c9303000881d4002891c300048148000891430000969bfffc95fbfffc80080004941bfffc8008000c941bfffc8319001c801800007c0803a64e800021813b001c8109fffc80e8fffc80c7000480a60008947bfffc83050058801800007c0803a64e8000212803000141820024809b00208064fffc8323fffc80790018831b00247f0803a63b7b002c4e800020809b0004807b000090640000833b00208319fffc82f8fffc82d7000482b6000883150064801800007c0803a64e800021829b00208274fffc8253fffc8232000482110008947bfffc807b000483100060801800007c0803a64e80002181fb002481cffffc814efffc812a000481090008947bfffc807b000483080078801800007c0803a64e80002180fb002880c7fffc80a6fffc8085000483240008947bfffc807b00088319007c801800007c0803a64e800021947bfffc947bfffc831b003482f8fffc82d7fffc38bb000038830000807b000883160014801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d0000829b000092950000827b000492750004825b00348232fffc8211fffc81f0000481cf0008814e013096bbfffc807b0028830a0004801800007c0803a64e800021813b0020953bfffc80db003038a30000809b00343c60000060634668831b003c4bfffb2d811b003880e8fffc80c7fffc80a6000480850008947bfffc807b001483040034801800007c0803a64e800021833b003c8319fffc82f8fffc82db003496dbfffc82b8fff496bbfffc80db004c80bb000c38830000807b000883170010801800007c0803a64e800021829b003c8274fffc8253fffc823200048211000881fb003891fb004480db000480bb0028809000a0807b00188312000c833b0040801800007c0903a67f2803a63b7b00444e8004202c07fff34082043880d2fffc80a6fffc8085000483240008947bfffc80080004941bfffc80080008941bfffc807b000083190134801800007c0803a64e800021831b001882f8fffc82d7fffc82b60004829500088274013083130008801800007c0803a64e800021825b00188232fffc8211fffc81f0000481cf0008947bfffc800e0080941bfffc807b0008830e0070801800007c0803a64e800021831b0000801800007c0803a64e800021815b0020812afffc8109fffc80e8000480c70008947bfffc83060134801800007c0803a64e80002180bb00248085fffc8324fffc8319000482f8000882d7013083160008801800007c0803a64e8000213d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003a80000192950000398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a7d0004919d00003e4002ab6252896492530000823b00089233000890730004398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a1d0004919d00003de002ab61ef8a3491f000009230000890700004398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002139dd0004919d00003d4002ab614a8ab8914e0000922e0008906e0004813b00248109fffc80e8fffc398000053bbdffe87c1df04040a00010800d001c7c0803a64e80002138dd0004919d00003ca002ab60a58b3c90a600009226001092a6000c808700049086000890660004398000053bbdffe87c1df04040a00010800d001c7c0803a64e8000213b3d0004919d00003f0002ab63188dac93190000923900109079000c9099000892b9000482e40018967bfffc961bfffc95dbfffc94dbfffc973bfffc8071001883170004801800007c0803a64e80002182db00283aa30000807600183b150000801800007c0803a64e800021829b00388274fffc8253fffc823200048211001881fb001c947bfffc806f002083100004801800007c0803a64e80002181db002c39430000806e00203b0a0000801800007c0803a64e800021813b003c8109fffc80e8fffc80c7000480a60018809b0020947bfffc8064002c83050004801800007c0803a64e800021833b00303b0300008079002c801800007c0803a64e80002182fb00303980000c3bbdffcc7c1df04040a00010800d001c7c0803a64e8000213add0004919d00009076002c82b7002892b60028829b000892960024827b000092760020825b00109256001c823b000492360018821700149216001481f7001091f6001081db001891d6000c815b000c91560008813b0014913600043d0002ab61088f289116000080fb004080c7fffc80a6fffc8085000480640008832301303876000083190004801800007c0803a64e800021831b003c971bfffc80db003c38a30000809b0038807b003082fb00448317fffc3c0002ab600069e47c0803a64e800021807b001c82db00447ec803a63b7b004c4e8000202c070007408203a080c8000470cb00014082033080a600042c050001408202c08092fffc8324fffc8319000482f80008947bfffc80080008941bfffc8008000c941bfffc80060000941bfffc3c6000006063466883170080801800007c0803a64e80002182db001c82b6fffc8295fffc827400048253000883120134801800007c0803a64e800021823b001c8211fffc81f0fffc81cf0004814e0008812a013083090008801800007c0803a64e800021811b001c80e8fffc80c7fffc80a6000480850018947bfffc8063001883040004801800007c0803a64e800021833b00103b03000080790018801800007c0803a64e80002182fb002082d7fffc82b6fffc8295000482740018825b0000947bfffc8072002083130004801800007c0803a64e800021823b00143a030000807100203b100000801800007c0803a64e80002181fb000481db0024814efffc812afffc8109000480e80018947bfffc800f0010941bfffc806f002c83070004801800007c0803a64e80002180db001c38a300008066002c3b050000801800007c0803a64e800021809b001c833b000c3980000c3bbdffcc7c1df04040a00010800d001c7c0803a64e8000213b1d0004919d00009078002c82e4002892f8002882d9002492d8002482bb000492b800208299001c9298001c827b0008927800188244001492580014823b0000923800108219000c9218000c81f9000891f8000881d9000491d800043d4002ab614a8f5491580000813b002c8109fffc80e8fffc80c7000480a6000880650130971bfffc82a30004387800003b150000801800007c0803a64e800021829b002c969bfffc80db001c38a30000809b0028807b0020827b00348313fffc3c0002ab600069e47c0803a64e800021825b00308232fffc8211fffc81f0000481cf0008814e0130807b0000830a0004801800007c0803a64e800021813b0014913b003880db002438a30000809b0018807b002c831b0030833b00347f2803a63b7b00384bfff36c8092fffc8064fffc8323000483190018398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002ab62d68fd092d700083ea002a062b5c7ac92b70004829800009297000038770000800d00287c0803a64e80002180b2fffc8085fffc8064000483230018398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213b1d0004919d00003ee002ab62f78fd092f800083ec002a062d6c7ac92d8000482b9000092b8000038780000800d00287c0803a64e8000212c0700094082035880d2fffc80a6fffc808500048324000883190130947bfffc95fbfffc80080004941bfffc80080008941bfffc8008000c941bfffc83180004801800007c0803a64e80002182fb000896fbfffc80db001838a30000809b001c807b0020831b00244bfff23182db001482b6000056abf80140a20010800d00347c0803a64e8000212c1500014081000c3a950000480000083a800001827b00208253fffc8232fffc8211000481f0000881cf0130947bfffc969bfffc807b0018830e0004801800007c0803a64e800021815b0024955bfffc80db002438a30000809b0004807b0010831b002c3c0002ab60008ff07c0803a64e800021813b00288109fffc80e8fffc80c7000480a60008947bfffc83050078801800007c0803a64e800021809b002c8324fffc8319fffc82f8000482d70008947bfffc807b00048316007c801800007c0803a64e800021947bfffc947bfffc82bb00388295fffc8274fffc38bb000038830000807b000883130014801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a5d0004919d0000823b000092320000821b00049212000481fb003881cffffc814efffc398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021393d0004919d00003d0002ab6108f5409109000080ea000490e9000880db000c90c9000480bb001828050001418200bc80670008965bfffc953bfffc83230078386600003b190000801800007c0803a64e800021831b004082f8fffc82d7fffc82b6000482950008947bfffc807b00188314007c801800007c0803a64e800021947bfffc947bfffc827b004c8253fffc8232fffc38bb000038830000807b000883110014801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021389d0004919d0000821b00009204000081fb000491e400044800001c38920000965bfffc953bfffc947bfffc947bfffc947bfffc807b004c8323fffc8319fffc949bfffc82fb004896fbfffc82d9fff496dbfffc80db004080bb001c809b002c807b003483180010801800007c0803a64e80002182bb00508295fffc8274fffc825b004c925b005880db000080bb003c809b0010807b00248313000c833b0054801800007c0903a67f2803a63b7b00584e80042080d2fffc80a6fffc8085000480640018398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213b3d0004919d00003f0002ab63188fd0931900083ee002a062f7c7ac92f9000482c3000092d9000038790000800d00287c0803a64e800021|@4926,1048575|148,3,@4782 232,3,@4784 328,3,@4786 568,3,@4787 624,3,@4789 716,3,@4790 1224,3,I48 1752,3,@4791 1812,3,@4793 1868,3,@4794 1936,3,@4795 2004,3,@4796 2376,3,@4797 2464,3,@4771 2576,3,I48 3032,3,@4799 3128,3,@4771 3284,3,@4802 3296,3,@227 3384,3,@4802 3396,3,@227 3668,3,@4803 3916,3,@4924 4344,3,@4802 4356,3,@227 4782:C2,168|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000218078000882e3000056ebf80140a20010800d00347c0803a64e8000212c1700014080002482d8000482b600083860000183150088801800007c0903a67f2803a64e8004203980000256e0f80140a20010800d00347c0803a64e8000217ed7661541a3fff092c3000082b80004829500083877000083140090801800007c0903a67f2803a64e800420|@4783,1048575| 4783:S69|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973747275637456616c75652835296e6577547970654964283129 4784:C2,68|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc80d8000880b8000c388000038078001083180004801800007c0903a64e800420|@4785,1048575| 4785:S29|535452554354555245535f28292e676976654572726f72283329283129 4786:S9|537472756374757265 4787:C2,144|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d70008973bfffc971bfffc83160034801800007c0803a64e80002182bb0000829500048274000883130134801800007c0803a64e800021825b0000823200048211000881f00130830f0008801800007c0803a64e8000218063002881db00047dc803a63b7b00084e800020|@4788,1048575| 4788:S67|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973747275637456616c756528352966756e6374722d283129 4789:C2,68|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc80d8000880b8000c388000038078001083180004801800007c0903a64e800420|@4785,1048575| 4790:S7|46756e63746f72 4791:C2,104|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f80008973bfffc971bfffc947bfffc8317000c801800007c0803a64e80002182db000482b60004807b00008315000c833b0008801800007c0903a67f2803a63b7b000c4e800420|@4792,1048575| 4792:S67|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973747275637456616c75652835296e6577456e762d283129 4793:C2,104|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f80008973bfffc971bfffc947bfffc83170004801800007c0803a64e80002182db000482b60004807b000083150004833b0008801800007c0903a67f2803a63b7b000c4e800420|@4792,1048575| 4794:C2,104|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f80008973bfffc971bfffc947bfffc8317001c801800007c0803a64e80002182db000482b60004807b00008315001c833b0008801800007c0903a67f2803a63b7b000c4e800420|@4792,1048575| 4795:C2,596|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f80010973bfffc971bfffc947bfffc80030000941bfffc80030004941bfffc83170008801800007c0803a64e80002182db000c82b600088295000882740008807b000083130008801800007c0803a64e800021825b000c823200088211000881f00024947bfffc80030008941bfffc807b0000830f0000801800007c0803a64e800021280300014182005081db0014814e0008812a000881090024807b000083080008801800007c0803a64e80002180fb001480c70004807b001083060008833b0018801800007c0903a67f2803a63b7b001c4e80042081db0004815b0014812a000881090008800e0004941bfffc800e000c941bfffc807b0010830800f0801800007c0803a64e8000216867000280db001c80a6000c8085000080660004832600088319000882f8000882d80018949bfffc80030008941bfffc80170004941bfffc3864000083160004801800007c0803a64e8000213aa30000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d0000829b000c9283000c92a30008827b001092630004825b002092430000831b0000801800007c0803a64e8000213a230000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092230004821b002092030000831b0004801800007c0803a64e80002181fb002881db00083980000255c0f80140a20010800d00347c0803a64e8000217d4e661541a3fff0812f000c9149000038600001811b002c7d0803a63b7b00304e800020|@4792,1048575| 4796:C2,352|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f80010973bfffc971bfffc80030000941bfffc80030004941bfffc83170024801800007c0803a64e80002182db000882b6000882950008807b000083140034801800007c0803a64e800021827b000882530004823200008213000c81f3000881cf000839430000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00009223000891430004813b000491230000963bfffc80100024941bfffc830e0050801800007c0803a64e80002139030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00009103000480fb000c90e30000831b0000801800007c0803a64e80002180db001080bb00043980000254a0f80140a20010800d00347c0803a64e8000217c85661541a3fff0806600049083000038600001833b00147f2803a63b7b00184e800020|@4792,1048575| 4797:O1|@4798 4798:C2,8|386000014e800020|@4792,524289| 4799:O1|@4800 4800:C2,8|386000014e800020|@4801,524289| 4801:S69|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973747275637456616c75652835296c6f63616c456e762d283129 4802:S24|73747275637456616c75653a206e6f7420612076616c7565 4803:C2,364|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8fffc82d7fffc82b600048295000882740130973bfffc971bfffc947bfffc949bfffc94dbfffc3865000083130008801800007c0803a64e800021947bfffc825b000c823200002c11fff540820030809b0004807200043b1b00143c0002ab600091787c0803a64e800021821b00147e0803a63b7b001c4e800020821b001081f0fffc81cffffc814e0004812a00088109013083080004801800007c0803a64e80002180db001880bb000438830000807b000c3b1b00143c0002ab600094747c0803a64e80002180fb001080c7fffc80a6fffc398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021389d0004919d00003f2002ab6339f4a4932400008306fff49304001082fb000c92e4000c82db000492c4000882a5000892a400048285001c38a40000809b00083b140000833b0014801800007c0903a67f2803a63b7b001c4e800420|@4923,1048575|124,3,@4804 216,3,@4810 280,3,@4922 4804:C2,292|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8fffc82d7fffc82b6fffc398000053bbdffe87c1df04040a00010800d001c7c0803a64e8000213a9d0004919d00003e6002ab627392b8927400008276fff4927400108258fff89254000c909400088095000890940004398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a3d0004919d00003e0002ab6210931892110000821500049211000481f0000c81d8ffec39430000398000073bbdffe07c1df04040a00010800d001c7c0803a64e800021387d0004919d00009283001881350018912300143d0002ab61089418910300109223000c80ee002c90e3000880ce001490c3000491430000830f001c801800007c0903a67f2803a64e800420|@4809,1048575|80,3,@4805 156,3,@4806 236,3,@4808 4805:C2,68|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc80d8000880b8000c388000038078001083180004801800007c0903a64e800420|@4785,1048575| 4806:C2,144|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d70008973bfffc971bfffc83160034801800007c0803a64e80002182bb0000829500048274000883130134801800007c0803a64e800021825b0000823200048211000881f00130830f0008801800007c0803a64e8000218063001481db00047dc803a63b7b00084e800020|@4807,1048575| 4807:S73|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296c6f6f6b5369672832296c6f6f6b7570466e283129 4808:S9|5369676e6174757265 4809:S62|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296c6f6f6b536967283229 4810:C2,1212|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8fffc82d7fffc82b6fffc829500048274000882530130973bfffc971bfffc947bfffc94bbfffc94dbfffc3864000083120008801800007c0803a64e800021823b000881f100002c0ffff54082000c821100044800000c3e0000006210466881db000c814efffc812afffc8109fffc80e8000480c70008947bfffc961bfffc3870000083060080801800007c0803a64e80002180bb00148085fffc8324fffc8319fffc82f8000482d70008947bfffc83160134801800007c0803a64e80002182bb00188295fffc8274fffc8253fffc823200048211000881f00130830f0008801800007c0803a64e80002181db0018814efffc812afffc8109fffc398000063bbdffe47c1df04040a00010800d001c7c0803a64e80002138fd0004919d00003cc002ab60c6994c90c7000080a8000490a700148089fff490870010833b00149327000c831b00109307000882e8000892e70004398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002ab62b59bd492b6000090f6000c82830018929600088263000892760004398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213a5d0004919d00003e2002ab62319c9c9232000090f2000c820300209212000881e3000c91f20004398000043bbdffec7c1df04040a00010800d001c7c0803a64e80002138dd0004919d00003ea002ab62b59d1092a6000090e6000c8223002c9226000882a3002492a60004398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213b3d0004919d00003f0002ab63189d789319000090f9000c830300109319000881c3000091d90004398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021395d0004919d00003ee002ab62f79df092ea000090ea000c82e3001492ea000881230004912a0004398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021389d0004919d00003d0002ab61089e589104000090e4000c80e3002890e4000880a3001c90a400043980000c3bbdffcc7c1df04040a00010800d001c7c0803a64e800021391d0004919d00009228002c90e8002890c80024920800209088001c9288001892e80014930800109248000c92c80008914800049328000080db00188086fffc8324fffc82d9fffc8256000481520008828a01303868000083140004801800007c0803a64e800021827b00188253fffc8232fffc8211fffc81f0000481cf0008814e0130947bfffc807b000c830a0004801800007c0803a64e800021813b0010953bfffc39000001951bfffc80db001c38a30000809b0008807b0020831b00243c0002ab60009ec07c0803a64e80002180fb001c80c7fffc80a6fffc8085fffc806400048323000880190084941bfffc807b000883190078801800007c0803a64e800021831b002082f8fffc82d7fffc82b6fffc8295000482740008947bfffc807b000c8313007c801800007c0803a64e8000213a430000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00009243000c823b000092230008821b000c9203000481fb001091e30000831b0004833b0028801800007c0903a67f2803a63b7b002c4e800420|@4921,1048575|120,3,I48 320,3,@4811 408,3,@4814 476,3,@4816 544,3,@4818 612,3,@4819 680,3,@4821 748,3,@4822 1000,3,@4823 4811:C2,484|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8001482d70028973bfffc971bfffc947bfffc949bfffc94bbfffc94dbfffc807600008316000c801800007c0803a64e80002182bb00108295001482740000947bfffc8075001083130014801800007c0803a64e800021831b0000801800007c0803a64e8000212803000141820054398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000825b000c92430004823b001092230000831b001c833b0018801800007c0903a67f2803a63b7b00204e800420807b0010831b0004801800007c0803a64e800021706b00014082009c825b001480120010941bfffc8012000c941bfffc80120008941bfffc3c8002a360844070807b00143c0002a1600074a87c0803a64e800021809b001c3c0002a1600074a87c0803a64e8000213c8002ab60849b4c3c0002a1600074a87c0803a64e800021823b0020907b002880db000080bb000438800003807b000883110004833b0024801800007c0903a67f2803a63b7b00284e800420398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000825b000c92430004823b001092230000831b001c833b0018801800007c0903a67f2803a63b7b00204e800420|@4813,1048575|280,3,@1148 292,3,@511 312,3,@511 328,3,@4812 336,3,@511 4812:S39|2920697320616c72656164792070726573656e7420696e2074686973207369676e61747572652e 4813:S79|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c28352973696756616c7565283429636865636b416e64456e746572283529 4814:C2,76|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000496fbfffc80d800083ca002aa60a5264480830004806300008318000c801800007c0903a64e800420|@4815,1048575|44,3,@3806 4815:S88|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c28352973696756616c7565283429636865636b416e64456e746572283129283129283129283129 4816:C2,76|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000496fbfffc80d800083ca002ab60a59d0480830004806300008318000c801800007c0903a64e800420|@4815,1048575|44,3,@4817 4817:S4|54797065 4818:C2,76|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000496fbfffc80d800083ca002ab60a587e880830004806300008318000c801800007c0903a64e800420|@4815,1048575|44,3,@4786 4819:C2,76|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000496fbfffc80d800083ca002ab60a59de080830004806300008318000c801800007c0903a64e800420|@4815,1048575|44,3,@4820 4820:S6|466978697479 4821:C2,76|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000496fbfffc80d800083ca002ab60a5941880830004806300008318000c801800007c0903a64e800420|@4815,1048575|44,3,@4808 4822:C2,76|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000496fbfffc80d800083ca002ab60a5895480830004806300008318000c801800007c0903a64e800420|@4815,1048575|44,3,@4790 4823:C2,2524|7f2802a6633900023960005c800d00187d6bd8107c0b004040a00010800d00247c0803a64e80002182f8fffc82d7fffc82b6fffc829500048274000882530130973bfffc971bfffc947bfffc94bbfffc94dbfffc3864000083120008801800007c0803a64e800021823b000c8211fffc81f0fffc81cffffc814e0004812a000881090130947bfffc807b000883080008801800007c0803a64e80002180fb000c80c700002c06fff540820210809b000480670004831b00103c0002ab600091787c0803a64e80002180bb00108085fffc8324fffc8319fffc82f8000482d70008947bfffc83160078801800007c0803a64e80002182bb00148295fffc8274fffc8253fffc8232000482110008947bfffc807b00048310007c801800007c0803a64e800021947bfffc947bfffc81fb002081cffffc814efffc812afffc38bb000038830000807b000883090014801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021391d0004919d000080fb000090e8000080db000490c8000480bb00208085fffc8064fffc8323fffc8319000482f8000882d70130951bfffc807b001483160004801800007c0803a64e800021947bfffc947bfffc947bfffc82bb00308295fffc8274fffc8253fffc823200048211000881f00130830f0008801800007c0803a64e80002139db000081430008914e0000393b00008103000c9109000438fb000080c3002490c70008398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002138bd0004919d0000809b000090850000833b000493250004831b00089305000882fb003082d7fffc82b6fffc8295fffc8274000482530008823b0038821b003c81f2008c91fb003c81db000c91db0038813b0034921b003480d200a0809b001c38710000831400203b290000801800007c0903a67f2803a63b7b00344e8004202c06fff740820078947bfffc80a70004809b001c2c0500014082001838640000833b00187f2803a63b7b00244e80002080050004941bfffc8065000080bb000c3b1b001c3c0002ab6000a8b87c0803a64e8000213883000080bb00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffff9c2c06ffef4082063880a70004809b00108324fffc8319fffc82f8fffc82d7000482b6001c947bfffc80050000941bfffc80050004941bfffc80050008941bfffc8005000c941bfffc80050010941bfffc3860000183150004801800007c0803a64e800021829b00288274fffc8253fffc8232fffc8211000481f0001c947bfffc38600001830f0004801800007c0803a64e80002181db001c815b002c812afffc8109fffc80e8fffc80c7000480a60018809b0000947bfffc800e0018941bfffc8064000883050004801800007c0803a64e800021833b00348319fffc82f8fffc82d7fffc82b6000482950018827b0024947bfffc8073002083140004801800007c0803a64e800021825b00243a230000807200203b110000801800007c0803a64e800021831b0000801800007c0803a64e800021821b002881fb003881cffffc814efffc812afffc8109000480e8001880db0008947bfffc80100010941bfffc8066000883070004801800007c0803a64e80002180bb00408085fffc8324fffc8319fffc82f8000482d7001882bb0030947bfffc8075002c83160004801800007c0803a64e800021829b00303a6300008074002c3b130000801800007c0803a64e800021831b0000801800007c0803a64e800021825b0034823b0018821b00143980000c3bbdffcc7c1df04040a00010800d001c7c0803a64e80002139fd0004919d0000906f002c81d2002891cf002881500004914f0024813b0008912f00208112001c910f001c80fb001090ef001880d2001490cf001480bb000490af001080910004908f000c80720008906f000883320004932f000483120000930f000082fb004482d7fffc82b6fffc8295fffc827400048133000880e90130386f000083070004801800007c0803a64e80002180db004480a6fffc8085fffc8324fffc8319000482f8000882d70130947bfffc807b003483160004801800007c0803a64e80002182bb005496bbfffc829b0054969bfffc80db004438a30000809b0008807b0034831b00504bfff9e5827b00488253fffc8232fffc8211fffc398000053bbdffe87c1df04040a00010800d001c7c0803a64e80002139fd0004919d00003dc002ab61cef00491cf0000815b0044914f0010813b0030912f000c8111fff4910f000880f0000890ef000480d0000480a6000c809b001c833b0018398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b1d0004919d000082f9000892f8000482c4000892d800003aa30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000091e30008829b0028928300049303000096bbfffc83050028801800007c0803a64e800021827b004c8253fffc8232fffc8211fffc398000083bbdffdc7c1df04040a00010800d001c7c0803a64e80002139fd0004919d00003dc002ab61cef11091cf000081500004914f001c813b003c912f0018811b0038910f001480fb004890ef001080db003490cf000c80b1fff490af000880900008908f0004832a00103b030000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d000090c3000c90a3000891e3000482fb002492e30000971bfffc83190008801800007c0803a64e80002182db005082b6fffc8295fffc8274fffc8253000482320008801100dc941bfffc386000018311008c801800007c0803a64e8000213a030000398000063bbdffe47c1df04040a00010800d001c7c0803a64e800021387d0004919d000039e0000191e3001439c0000191c300109203000c815b002c91430008813b003091230004811b003491030000831b0000801800007c0803a64e80002180fb005480c7fffc80a6fffc8085fffc8324000483190010398000053bbdffe87c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002ab62d6f38092d7000082a5fff492b70010829b00509297000c827b003c9277000882440008925700043a230000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092e3000892230004821b00049203000083180018801800007c0803a64e80002181fb002881db0044806e000c830f0000801800007c0803a64e800021815b0024813b004480690024830a0000801800007c0803a64e800021807b0008811b00587d0803a63b7b00644e80002080bb00108085fffc8064fffc8323fffc8319000482f80018398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002ab62b5f3e092b600083e8002a06294c7ac92960004827700009276000038760000800d00287c0803a64e800021|@4920,1048575|184,3,@4804 764,3,@4824 1620,3,@4913 1860,3,@4915 2224,3,@4918 2476,3,@4919 2488,3,@227 4824:C2,4444|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e300002c17000f4082003c971bfffc973bfffc3ac4000080830004387600003b1b00043c0002ab6000ba307c0803a64e80002182bb00007ea803a63b7b00084e8000202c1700114082049082d8fffc82b6fffc8295fffc8274fffc398000053bbdffe87c1df04040a00010800d001c7c0803a64e8000213a5d0004919d00003e2002ab6231be04923200008214fff4921200109072000c81e3000491f2000881d3000891d20004398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021395d0004919d00003d2002ab6129be64912a000081130004910a001080f8ffec90ea000c80d8ffe890ca0008924a000480a80028973bfffc971bfffc947bfffc949bfffc95fbfffc80030008941bfffc8003000c941bfffc961bfffc955bfffc806500008305000c801800007c0803a64e800021809b001c8324fffc8319fffc82f8fffc82d7fffc82b6000482950000947bfffc8077fff483140014801800007c0803a64e800021831b0000801800007c0803a64e8000212803000141820008480001483c8002a06084c444807b00103f00000063184368801800007c0803a64e8000212803000141820008480000b03c8002a66084ee58807b00103f00000063184368801800007c0803a64e8000212803000141820008480000843c8002aa6084365c807b00103f00000063184368801800007c0803a64e8000212803000141820008480000583c8002aa60843298807b00103f00000063184368801800007c0803a64e80002128030001418200084800002c3c8002aa60843800807b00103f00000063184368801800007c0803a64e8000212803000141820070809b00103c6002ab6063c0283c0002a1600074a87c0803a64e8000213c8002ab6084c03c3c0002a1600074a87c0803a64e800021827b00208253fffc8232fffc8211fffc81f0fffc947bfffc80db001880bb002038800003807b000c830f0008801800007c0803a64e800021827b00208253fffc8232fffc8211fffc81f0fffc81cf0004814e0010398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d0000813b00149123000c8110fff49103000880fb000490e3000480db000c90c30000830a0008801800007c0803a64e80002180bb00208085ffec8065fffc8323fffc8319fffc82f8fffc82d7000482b600088295001482760010398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003e4002ab6252c054924300083e2002ab6231c0d892230004821b000c9203000080040008941bfffc80140004941bfffc83130020801800007c0803a64e80002181fb002881cffffc814efffc812afffc8109fffc80e8000480c7000880a6000880860018947bfffc80050004941bfffc807b002883040004801800007c0803a64e8000213b230000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d0000831b00049303000c9323000882fb000892e3000482db002092c30000831b0000801800007c0803a64e8000213aa30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a30004829b002092830000831b000c801800007c0803a64e800021827b0028398000025660f80140a20010800d00347c0803a64e8000217c73661541a3fff0825b00347e4803a63b7b00384e8000202c17ffff4082044882d8fffc82b6fffc8295fffc8274fffc398000053bbdffe87c1df04040a00010800d001c7c0803a64e8000213a5d0004919d00003e2002ab6231c100923200008214fff4921200109072000c81e3000491f2000881d3000891d20004398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021395d0004919d00003d2002ab6129c160912a000081130004910a001080f8ffec90ea000c80d8ffe890ca0008924a000480a80028973bfffc971bfffc947bfffc949bfffc95fbfffc80030008941bfffc8003000c941bfffc961bfffc955bfffc806500008305000c801800007c0803a64e800021809b001c8324fffc8319fffc82f8fffc82d7fffc82b6000482950000947bfffc8077fff483140014801800007c0803a64e800021831b0000801800007c0803a64e8000212803000141820008480001783c8002a06084c444807b00103f00000063184368801800007c0803a64e8000212803000141820008480000e03c8002a66084ee58807b00103f00000063184368801800007c0803a64e8000212803000141820008480000b43c8002aa6084365c807b00103f00000063184368801800007c0803a64e8000212803000141820008480000883c8002aa60843298807b00103f00000063184368801800007c0803a64e80002128030001418200084800005c3c8002aa60843800807b00103f00000063184368801800007c0803a64e8000212803000141820008480000303c8002ab6084c2c4807b00103f00000063184368801800007c0803a64e800021280300014082000848000070809b00103c6002ab6063c0283c0002a1600074a87c0803a64e8000213c8002ab6084c03c3c0002a1600074a87c0803a64e800021827b00208253fffc8232fffc8211fffc81f0fffc947bfffc80db001880bb002038800003807b000c830f0008801800007c0803a64e800021827b00208253fffc8232fffc8211fffc81f0fffc81cf0004814e0010398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d0000813b00149123000c8110fff49103000880fb000490e3000480db000c90c30000830a0008801800007c0803a64e80002180bb00208085ffec8065fffc8323fffc8319fffc82f8fffc82d7000482b6000882950010827500088255001880040008941bfffc80140004941bfffc80130004941bfffc807b002483120004801800007c0803a64e8000213a230000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d0000821b00189203000c9223000881fb000491e3000481db001c91c30000831b0000801800007c0803a64e80002139430000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000091430004813b001c91230000831b0008801800007c0803a64e800021811b0024398000025500f80140a20010800d00347c0803a64e8000217c68661541a3fff080fb00307ce803a63b7b00344e8000202c17fffb40820110973bfffc971bfffc94bbfffc82c300042c160001408200183864000082bb00087ea803a63b7b000c4e80002082bb00048295fffc8274fffc8253fffc8232fffc8211000481f0000881cf0130949bfffc80160000941bfffc80160004941bfffc8075ffec830e0004801800007c0803a64e800021815b0010812afffc8109fffc80e8fffc80c7fffc80a600048085000883240130947bfffc806affe883190004801800007c0803a64e800021831b001482f8000896fbfffc82db001096dbfffc80db001838a30000809b0008807b00108318fffc3c0002ab60009ec07c0803a64e8000213883000082db00043b7b0010800d00187c1b004040a00010800d00207c0803a64e8000214bffff082c17fff9408202b8398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213add0004919d000082a3000c92b60008828300089296000482630004927600008258fffc8232fffc8211fffc81f0fffc81cf0004814e0028973bfffc971bfffc949bfffc96dbfffc806a0000830a000c801800007c0803a64e800021813b00088109fffc80e8fffc80c7fffc80a6fffc8085000483240000947bfffc8066fff483190014801800007c0803a64e800021831b0000801800007c0803a64e800021280300014182017482fb000c82d7fffc82b6fffc8295fffc8274fffc82530004823200088211013081f7ffec81d2001880100004941bfffc800f0018941bfffc806f0020830e0004801800007c0803a64e800021815b0014812affe839030000806900203b080000801800007c0803a64e80002180fb001480c7ffec80a7fffc8085fffc8324fffc8319fffc82f8000482d70018947bfffc80060010941bfffc8066002c83160004801800007c0803a64e80002182bb001c8295ffe83a6300008074002c3b130000801800007c0803a64e800021825b001c8232ffec3a0300003980000c3bbdffcc7c1df04040a00010800d001c7c0803a64e800021387d0004919d00009203002c81f1002891e3002881d1002491c30024815b0004914300208131001c9123001c811b00089103001880f1001490e3001480db000090c3001080b1000c90a3000c809100089083000883310004932300048311000093030000831b000c801800007c0803a64e8000213b0300004800004c831b000c82f8fffc82d7fffc82b6fffc8295fffc8274000482530008823201308078ffec83110004801800007c0803a64e8000213b030000947bfffc947bfffc947bfffc947bfffc821b001c80b0fff838980000807b00148310fffc3c0002ab6000c2d07c0803a64e800021807b001881fb00207de803a63b7b00244e8000202c17000d408203d43d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213add0004919d00009096000082b8fffc8295fffc8274fffc8253fffc398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213a3d0004919d00003e0002ab6210e8449211000092d1000c81f8ffec91f1000881d2000491d100043d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e800021395d0004919d000039200001912a0000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021391d0004919d00003ce002ab60e7ea2c90e8000091c8000c9148000891e8000480ce0018973bfffc971bfffc80030004941bfffc80030008941bfffc96dbfffc963bfffc955bfffc951bfffc800f0018941bfffc806f002083060004801800007c0803a64e80002180bb001c8085ffe83b230000806400203b190000801800007c0803a64e800021831b001c82f8ffec82d8fffc82b6fffc8295fffc8274fffc8253000482320018947bfffc80170010941bfffc8077002c83110004801800007c0803a64e800021821b002481f0ffe839c30000806f002c3b0e0000801800007c0803a64e800021815b0024812affec398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021391d0004919d00003ce002ab60e7ebb090e8000080db001490c80004398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138bd0004919d00003c8002ab6084ec6890850000833b000c932500043980000c3bbdffcc7c1df04040a00010800d001c7c0803a64e8000213b1d0004919d00009078002c82e9002892f8002882c9002492d8002482bb000492b800208289001c9298001c827b0008927800188249001492580014823b00009238001090b8000c91180008820900049218000481e9000091f8000081cafffc810efffc80e8fffc80c7fffc80a6000480850014806500088323013080040004941bfffc8003008c941bfffc3878000083190004801800007c0803a64e800021831b002c82f8fffc82d7fffc82b6fffc3a830000398000063bbdffe47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008278000892630014825b0024924300108235fff49223000c92830008821b00009203000481fb002891e30000831b0004801800007c0803a64e80002181db0018814e00002c0a00014082000c3920000148000048800a0004941bfffc806a00003b1b00343c0002ab6000ed207c0803a64e800021815b00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffffb0811b00208068000080fb00307ce803a63b7b00344e800020973bfffc82d8fffc82b6fffc8295fffc8274fffc8253000482320018398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a1d0004919d00003de002ab61efef8891f000083dc002a061cec7ac91d00004815100009150000038700000800d00287c0803a64e800021|@4912,1048575|68,3,@4825 160,3,@4827 236,3,@4828 424,3,@210 436,3,I24 468,3,@2440 480,3,I24 512,3,@3947 524,3,I24 556,3,@3895 568,3,I24 600,3,@3968 612,3,I24 644,3,@4830 652,3,@511 668,3,@4831 676,3,@511 936,3,@4832 948,3,@4835 1332,3,@4837 1408,3,@4838 1596,3,@210 1608,3,I24 1640,3,@2440 1652,3,I24 1684,3,@3947 1696,3,I24 1728,3,@3895 1740,3,I24 1772,3,@3968 1784,3,I24 1816,3,@4839 1828,3,I24 1864,3,@4830 1872,3,@511 1888,3,@4831 1896,3,@511 2592,3,@4823 3312,3,@4840 3452,3,@4900 3568,3,@4902 3836,3,@4904 3892,3,@4906 4256,3,@4908 4396,3,@4911 4408,3,@227 4825:C2,852|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c040001408200084e80002082e4000082d8000082b6ffec8296fffc8274fffc8253fffc8232fffc8211000481f00018973bfffc971bfffc947bfffc80170000941bfffc80170004941bfffc80170014941bfffc80040004941bfffc80150018941bfffc80750020830f0004801800007c0803a64e80002181db0018814e0000812affe839030000806900203b080000801800007c0803a64e80002180fb001880c7000080a6ffec8086fffc8324fffc8319fffc82f8fffc82d7000482b60018947bfffc80050010941bfffc8065002c83150004801800007c0803a64e800021829b0020827400008253ffe83a2300008072002c3b110000801800007c0803a64e800021821b002081f0000081cfffec3980000c3bbdffcc7c1df04040a00010800d001c7c0803a64e800021395d0004919d0000906a002c812e0028912a0028810e0024910a002480fb000490ea002080ce001c90ca001c80bb000890aa0018808e0014908a0014807b0000906a0010832e000c932a000c830e0008930a000882ee000492ea000482ce000092ca000082affffc8295fffc8274fffc8253fffc8232000480f1000880a70130386a000083050004801800007c0803a64e800021809b002083240000947bfffc809b0018807900083c0002a1600074a87c0803a64e8000213880005d3c0002a1600074a87c0803a64e80002138c3000080bb001c809b0000807b0014831b002482f800008317fffc3c0002ab600094747c0803a64e80002182db00203980000256c0f80140a20010800d00347c0803a64e8000217eb6661541a3fff0947bfffc809b001438750000831b00284bfffd89829b0028827400008253fffc8232fffc8211fffc81f0fffc81cf0004814e000839230000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000811b00249103000880fb000090e3000480db001c90c30000953bfffc830a0050801800007c0803a64e80002180bb002c808500008324ffec3b030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00009303000482fb002092e3000083190024801800007c0803a64e800021807b000082db00307ec803a63b7b00344e800020|@4826,1048575|500,3,@511 520,3,@511 564,3,@4810 4826:S89|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296d616b65536967496e746f28362970726f6365737353696728332970537472756374283229 4827:C2,68|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc80d8000880b8000c388000038078001083180004801800007c0903a64e800420|@4785,1048575| 4828:C2,328|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8001082d7000c82b700188298000c973bfffc971bfffc947bfffc80160028941bfffc8074002083150004801800007c0803a64e800021827b0008825300083a230000807200203b110000801800007c0803a64e800021821b000881f0001081cf00188150000c947bfffc806a002c830e0004801800007c0803a64e800021813b000c8109000838e300008068002c3b070000801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138dd0004919d00009066000480bb000090a60000809b000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00008324000493230008831b00089303000490c30000831b0004833b0010801800007c0903a67f2803a63b7b00144e800420|@4829,1048575| 4829:S88|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296d616b65536967496e746f28362970726f636573735369672833296c6f6f6b7570283129 4830:S12|53706563696679696e672022 4831:S13|2220697320696c6c6567616c2e 4832:O1|@4833 4833:C2,4|4e800020|@4834,524289| 4834:S82|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296d616b65536967496e746f28362970726f63657373536967283329283129 4835:O1|@4836 4836:C2,4|4e800020|@4834,524289| 4837:C2,68|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc80d8000880b8000c388000038078001083180004801800007c0903a64e800420|@4785,1048575| 4838:C2,328|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8001082d7000c82b700188298000c973bfffc971bfffc947bfffc80160028941bfffc8074002083150004801800007c0803a64e800021827b0008825300083a230000807200203b110000801800007c0803a64e800021821b000881f0001081cf00188150000c947bfffc806a002c830e0004801800007c0803a64e800021813b000c8109000838e300008068002c3b070000801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138dd0004919d00009066000480bb000090a60000809b000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00008324000493230008831b00089303000490c30000831b0004833b0010801800007c0903a67f2803a63b7b00144e800420|@4829,1048575| 4839:S2|6974 4840:C2,1136|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8fffc82d7fffc82b6fffc829500048274000882530130973bfffc971bfffc947bfffc94bbfffc3864000083120008801800007c0803a64e800021823b0004821b000881f0fffc81cffffc814efffc398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021393d0004919d00003d0002ab6108c75c9109000080ea000490e90004398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138dd0004919d00003ca002ab60a5ca2090a6000090e60004953bfffc94dbfffc398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021389d0004919d00003f2002ab6339cce0932400008310fff89304001082f1000092e4000c82cefff492c4000882aa000892a400048291000428140001418202d482710008726b00014082000c825300004800001c3a4300003c6002a36063dfcc800d00287c0803a64e8000218107000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138bd0004919d00008323002c9325000482e3002092e50000947bfffc398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000908300089243000490a3000080110000941bfffc967bfffc949bfffc83080028801800007c0803a64e80002182db002082b6fffc8295fffc8274fffc8253000482320008947bfffc80110098941bfffc831100d4801800007c0803a64e800021831b0000801800007c0803a64e80002128030001408201bc821b000c720b00014082000c81f00004480000183c6002a36063dfcc800d00287c0803a64e8000212c0f0001408200183860000181db002c7dc803a63b7b00304e80002081db0028814efffc812afffc8109fffc80e8000480c7000c80bb0014398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021389d0004919d00008065002c906400048325002093240000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000831b00089303000882ef000092e3000490830000800f0004941bfffc83060028801800007c0803a64e80002182db002c82b6fffc8295fffc8274fffc8253000482320010398000053bbdffe87c1df04040a00010800d001c7c0803a64e8000213a1d0004919d00003de002ab61efce1091f0000081d4fff491d00010815b00249150000c813b001491300008811300089110000438e30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00009203000880db000890c3000490e3000083110014801800007c0803a64e80002181fb00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bfffe7438600001821b002c7e0803a63b7b00304e800020949bfffc947bfffc96fbfffc807100083b1b00203c0002ab6000ce707c0803a64e8000213f0002ab6318cfc0801800007c0803a64e800021809b00003b1b00203c0002ab6000d09c7c0803a64e800021827b00207e6803a63b7b00244e800020|@4899,1048575|148,3,@4841 204,3,@4845 264,3,@4849 344,3,@1386 600,3,@1386 868,3,@4852 1060,3,@4853 1076,3,@4854 1104,3,@4856 4841:C2,220|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7002482b70008973bfffc971bfffc80160008941bfffc83150074801800007c0803a64e800021829b0004398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a7d0004919d00003e4002ab6252c8549253000082340004923300043a030000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000039e0000191e300089263000492030000831b0000833b0008801800007c0903a67f2803a63b7b000c4e800420|@4844,1048575|116,3,@4842 4842:C2,216|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7002082b70008973bfffc80030000941bfffc80030004941bfffc80030008941bfffc8075004083160000801800007c0803a64e8000213a830000807b00043b140000801800007c0803a64e800021280300014182004c398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a7d0004919d0000825b000092530004823b00089233000038730000821b000c7e0803a63b7b00104e800020807b0000827b000c7e6803a63b7b00104e800020|@4843,1048575| 4843:S100|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296170706c7953686172696e67436f6e73747261696e742833297375625374727563747572654e616d6573283129283129 4844:S97|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296170706c7953686172696e67436f6e73747261696e742833297375625374727563747572654e616d6573283129 4845:C2,220|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7002482b70008973bfffc971bfffc80160008941bfffc83150074801800007c0803a64e800021829b0004398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a7d0004919d00003e4002ab6252cb189253000082340004923300043a030000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000039e0000191e300089263000492030000831b0000833b0008801800007c0903a67f2803a63b7b000c4e800420|@4848,1048575|116,3,@4846 4846:C2,216|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7002082b70008973bfffc80030000941bfffc80030004941bfffc80030008941bfffc807500d883160000801800007c0803a64e8000213a830000807b00043b140000801800007c0803a64e800021280300014182004c398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a7d0004919d0000825b000092530004823b00089233000038730000821b000c7e0803a63b7b00104e800020807b0000827b000c7e6803a63b7b00104e800020|@4847,1048575| 4847:S98|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296170706c7953686172696e67436f6e73747261696e7428332974797065436f6e7374724e616d6573283129283129 4848:S95|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296170706c7953686172696e67436f6e73747261696e7428332974797065436f6e7374724e616d6573283129 4849:C2,148|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc80180010941bfffc8018000c941bfffc80180008941bfffc3c8002ab6084cd903c0002a1600074a87c0803a64e800021833b000c831b0010907b001080db000480bb000838800003807b00003af80000831900043b370000801800007c0903a67f2803a63b7b00104e800420|@4851,1048575|64,3,@4850 72,3,@511 4850:S14|20696e207369676e61747572652e 4851:S93|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296170706c7953686172696e67436f6e73747261696e742833296c6f6f6b75704661696c757265283129 4852:C2,68|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc80d8000880b8000c388000038078001083180004801800007c0903a64e800420|@4785,1048575| 4853:C2,308|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e80002082f8fffc82d7fffc82b6fffc8295fffc827400048253000c8238ffe48203000081e30004398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d000081d8ffe891c3000c920300088151002c914300043d2002ab612987e891230000973bfffc971bfffc95fbfffc83120024801800007c0803a64e800021811b000480e8fffc80c7fffc80a6fffc8085fffc832400048319000883180034801800007c0803a64e800021947bfffc807b0004831b00084bffff15398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213afd0004919d00009077000482db000092d700003877000082bb000c7ea803a63b7b00104e800020|@234,1048575|140,3,@4786 4854:O1|@4855 4855:C2,184|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e800020398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b1d0004919d00003ae0000192f8000482e3000092f80000973bfffc971bfffc806300044bffff91398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b0000931900003879000082fb00047ee803a63b7b00084e800020|@234,917505| 4856:C2,264|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c03000140820074973bfffc8098fffc8064fffc82e3fffc82d7fffc82b6000482950018398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a7d0004919d00003e4002ab6252d1c0925300083e4002a06252c7ac92530004825400009253000038730000800d00287c0803a64e800021973bfffc971bfffc947bfffc3c0002ab6000d1dc7c0803a64e8000213b1b00083c0002ab6000d6c47c0803a64e800021807b0000831b00043c0002ab6000dfa47c0803a64e8000213b1b00083c0002ab6000e2607c0803a64e80002138600001833b00087f2803a63b7b000c4e800020|@4898,1048575|104,3,@4857 116,3,@227 164,3,@4858 184,3,@4869 208,3,@4883 228,3,@4891 4857:S18|456d7074792073686172696e67206c697374 4858:C2,76|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021971bfffc973bfffc3b1b00043c0002ab6000d2447c0803a64e800021833b00007f2803a63b7b00084e800020|@4868,1048575|44,3,@4859 4859:C2,156|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e80002082f800008017ffec941bfffc973bfffc971bfffc80030004941bfffc806300003b1b000c3c0002ab6000d2fc7c0803a64e800021947bfffc807b0004831b00084bffff913ca002ab60a5d614809b0000833b000c3c0002ab6000d3e47c0903a67f2803a63b7b00144e800420|@4865,1048575|84,3,@4860 116,3,@4866 132,3,@4863 4860:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e800020973bfffc971bfffc80030004941bfffc8063000083180000801800007c0803a64e800021947bfffc807b0004831b00084bffffa13ca002ab60a5d3a4809b0000833b000c3c0002ab6000d3e47c0903a67f2803a63b7b00104e800420|@4865,1048575|100,3,@4861 116,3,@4863 4861:O1|@4862 4862:C2,28|80830004806300003f00000063184368801800007c0903a64e800420|0,917507|8,3,I24 4863:C2,340|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c040001408200084e800020973bfffc947bfffc94bbfffc80040000941bfffc80040004941bfffc2c0300014082000c3b200001480000888303000082e30004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00009303000482db000492c3000096fbfffc831b000c801800007c0803a64e800021280300014182000c3b20000348000028807b00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffff743b7b0004281900014182002080bb0008809b0000807b000c833b00107f2803a63b7b00144bffff0c80bb0008809b0000807b000c4bfffef5398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d000090750004829b00049295000038750000827b00107e6803a63b7b00144e800020|@4864,1048575| 4864:S85|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296170706c7953686172696e67436f6e73747261696e74283329756e696f6e283329 4865:S88|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296170706c7953686172696e67436f6e73747261696e74283329756e696f6e4d6170283329 4866:O1|@4867 4867:C2,28|80830004806300003f00000063184368801800007c0903a64e800420|0,917507|8,3,I24 4868:S103|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296170706c7953686172696e67436f6e73747261696e742833296c6973745669727454797065436f6e7374724e616d6573283129 4869:C2,168|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e800020973bfffc971bfffc80030004941bfffc806300003c0002ab6000d7887c0803a64e800021947bfffc807b0004831b00084bffffa1398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b0000931900003879000082fb000c7ee803a63b7b00104e800020|@234,1048575|68,3,@4870 4870:C2,100|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc8098fff88318fffc3c0002ab6000d8087c0803a64e8000213b1b00043c0002ab6000dcc07c0803a64e800021833b00047f2803a63b7b00084e800020|@4882,1048575|48,3,@4871 68,3,@4879 4871:C2,84|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021971bfffc947bfffc973bfffc386400003b1b00083c0002ab6000d8787c0803a64e800021833b00007f2803a63b7b000c4e800020|@4878,1048575|52,3,@4872 4872:C2,172|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e800020973bfffc971bfffc80030000941bfffc806300044bffffbd833b0004947bfffc809b00048079fffc831900003c0002ab6000d9407c0803a64e800021831b00002c1800014082001482fb000c7ee803a63b7b00104e8000203b1b000c3c0002ab6000dbac7c0803a64e80002182fb000c7ee803a63b7b00104e800020|@4875,1048575|92,3,@4873 140,3,@4877 4873:C2,84|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc971bfffc973bfffc386400003b1b00083c0002ab6000d9b07c0803a64e800021833b00007f2803a63b7b000c4e800020|@4876,1048575|52,3,@4874 4874:C2,348|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e800020973bfffc971bfffc80030000941bfffc806300044bffffbd833b00048319fffc82f8fffc82d7fffc82b6fffc8295fffc827400048253002482330008947bfffc80120004941bfffc807b000883110074801800007c0803a64e800021821b000c81f0fffc81cffffc814efffc812afffc8109fffc80e8000480c7000838a30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00008090000090830008832600d89323000490a30000831b0000801800007c0803a64e800021706b00014082004c398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b1d0004919d000082fb000492f8000482c3000092d800003878000082bb00107ea803a63b7b00144e800020807b0004831b00107f0803a63b7b00144e800020|@4875,1048575| 4875:S13|4c6973742e666f6c6472283329 4876:S98|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296170706c7953686172696e67436f6e73747261696e742833296765745669727454797065436f6e73747273283229 4877:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c8078fff44e800020973bfffc971bfffc80030000941bfffc806300044bffffbd398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b00009319000038790000833b00087f2803a63b7b000c4e800020|@468,786433| 4878:S99|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296170706c7953686172696e67436f6e73747261696e742833296c6973745669727454797065436f6e73747273283229 4879:C2,348|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e800020973bfffc971bfffc80030000941bfffc80030004941bfffc807b00002c0300014082000c3b200001480000ec831b00088338fffc82f9fffc82d7fffc82b6fffc8295fffc8274fffc8253000482320010398000053bbdffe87c1df04040a00010800d001c7c0803a64e8000213a1d0004919d00003de002ab61efde3891f0000081d4fff491d000108157fff49150000c8136fff091300008811300089110000480e3000080c30004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00009203000890e3000480bb000490a3000094dbfffc83110014801800007c0803a64e800021807b00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffff0c807b0000831b0008833b000c7f2803a63b7b00104bfffeb0|@4881,1048575|164,3,@4880 4880:C2,68|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc80d8000880b8000c388000038078001083180004801800007c0903a64e800420|@4785,1048575| 4881:S129|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296170706c7953686172696e67436f6e73747261696e742833297368617265566972745374727563747328322973686172655669727454797065436f6e7374722831297368617265416c6c283129 4882:S118|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296170706c7953686172696e67436f6e73747261696e742833297368617265566972745374727563747328322973686172655669727454797065436f6e737472283129 4883:C2,76|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021971bfffc973bfffc3b1b00043c0002ab6000e00c7c0803a64e800021833b00007f2803a63b7b00084e800020|@4890,1048575|44,3,@4884 4884:C2,156|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e80002082f800008017fff0941bfffc973bfffc971bfffc80030004941bfffc806300003b1b000c3c0002ab6000e0c47c0803a64e800021947bfffc807b0004831b00084bffff913ca002ab60a5e1ac809b0000833b000c3c0002ab6000d3e47c0903a67f2803a63b7b00144e800420|@4865,1048575|84,3,@4885 116,3,@4888 132,3,@4863 4885:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e800020973bfffc971bfffc80030004941bfffc8063000083180000801800007c0803a64e800021947bfffc807b0004831b00084bffffa13ca002ab60a5e16c809b0000833b000c3c0002ab6000d3e47c0903a67f2803a63b7b00104e800420|@4865,1048575|100,3,@4886 116,3,@4863 4886:O1|@4887 4887:C2,28|80830004806300003f00000063184368801800007c0903a64e800420|0,917507|8,3,I24 4888:O1|@4889 4889:C2,28|80830004806300003f00000063184368801800007c0903a64e800420|0,917507|8,3,I24 4890:S105|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296170706c7953686172696e67436f6e73747261696e742833296c697374566972745375625374727563747572654e616d6573283129 4891:C2,212|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e800020971bfffc80030000941bfffc973bfffc80030004941bfffc8078fff83b1b000c3c0002ab6000e3507c0803a64e800021833b000c8319fffc82f8fffc8097fff03c0002ab6000d09c7c0803a64e800021947bfffc807b0004831b00104bffff75398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213add0004919d00009076000482bb000092b6000038760000829b00087e8803a63b7b00144e800020|@234,1048575|80,3,@4892 112,3,@4856 4892:C2,180|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e800020973bfffc971bfffc80030000941bfffc806300044bffffbd833b0004947bfffc809b00048079fffc831900008318fffc3c0002ab6000e4207c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213afd0004919d000082db000092d70004907700003877000082bb000c7ea803a63b7b00104e800020|@4875,1048575|96,3,@4893 4893:C2,84|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021971bfffc947bfffc973bfffc386400003b1b00083c0002ab6000e4907c0803a64e800021833b00007f2803a63b7b000c4e800020|@4897,1048575|52,3,@4894 4894:C2,112|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e800020973bfffc971bfffc80030000941bfffc806300044bffffbd38830000807b0000831b0004833b00083c0002ab6000e51c7c0903a67f2803a63b7b000c4e800420|@4875,1048575|88,3,@4895 4895:C2,356|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000082d7fffc82b6fffc8295fffc8274fffc825300048232002482120008973bfffc971bfffc949bfffc80110004941bfffc83100074801800007c0803a64e80002181fb000881cf0000814efffc812afffc8109fffc80e8fffc80c7000480a6000838830000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000832ffffc93230008830500409303000490830000831b0000801800007c0803a64e800021706b00014082007c82fb000882d7000082b6fffc8295fffc8274fffc8253fffc82320004821100088063000083100034801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002139fd0004919d000081db000491cf0004906f0000386f0000815b000c7d4803a63b7b00104e800020807b000482fb000c7ee803a63b7b00104e800020|@4896,1048575| 4896:S113|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296170706c7953686172696e67436f6e73747261696e74283329676574566972745375625374727563747572652832297375627374724c6973742d283229 4897:S99|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296170706c7953686172696e67436f6e73747261696e7428332967657456697274537562537472756374757265283229 4898:S96|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296170706c7953686172696e67436f6e73747261696e7428332973686172655669727453747275637473283229 4899:S77|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296170706c7953686172696e67436f6e73747261696e74283329 4900:C2,360|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7000882b60008973bfffc971bfffc947bfffc3864000083150008801800007c0803a64e800021829b00048274000c82530000398000025640f80140a20010800d00347c0803a64e8000217e32661541a3fff0923300008214000881f4000481cf0008814e0008812e001880030004941bfffc8003000c941bfffc80100008941bfffc800a0004941bfffc3872000083090004801800007c0803a64e80002139030000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d000080fb000890e3000c9103000880db000c90c3000480bb001090a30000831b0000801800007c0803a64e80002138830000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000090830004833b001093230000831b0004833b0018801800007c0903a67f2803a63b7b001c4e800420|@4901,1048575| 4901:S90|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296d616b65536967496e746f28362970726f63657373536967283329656e74657256616c283229 4902:C2,260|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000c82d70008973bfffc971bfffc947bfffc949bfffc801600e8941bfffc38640000831600c8801800007c0803a64e800021831b0000801800007c0803a64e800021280300014182004482bb000c8295000882740000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a5d0004919d000092720004823b0004923200009254000082bb000c82950004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000827b000492630004825b0008924300008314000c833b0010801800007c0903a67f2803a63b7b00144e800420|@4903,1048575| 4903:S91|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296d616b65536967496e746f28362970726f63657373536967283329656e74657254797065283229 4904:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@4905,1048575| 4905:S90|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296d616b65536967496e746f28362970726f63657373536967283329656e74657256616c283129 4906:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@4907,1048575| 4907:S91|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296d616b65536967496e746f28362970726f63657373536967283329656e74657254797065283129 4908:C2,196|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8fffc82d7fffc82b6fffc8295fffc8274fffc8253000482320008973bfffc971bfffc947bfffc801100d0941bfffc831100cc801800007c0803a64e8000213b1b000c3c0002ab6000ee007c0803a64e8000213a030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00009203000481fb000491e30000831b0000833b000c801800007c0903a67f2803a63b7b00104e800420|@4910,1048575|100,3,@4909 4909:C2,256|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e80002082f8fffc82d7fffc82b6ffec8296fffc8274fffc8253fffc8232fffc8211000481f00008973bfffc971bfffc80030000941bfffc80030004941bfffc80150018941bfffc807b0008830f0120801800007c0803a64e800021831b0000801800007c0803a64e800021706b00014082000c81c300004800000881db000895dbfffc807b0008831b00104bffff49398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002139dd0004919d0000906e0004815b0000914e0000386e0000813b00147d2803a63b7b00184e800020|@234,1048575| 4910:S98|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296d616b65536967496e746f28362970726f63657373536967283329757064617465436f6e7374724c697374283129 4911:S27|70726f636573735369673a206e6f742061207369676e6174757265 4912:S79|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296d616b65536967496e746f28362970726f63657373536967283329 4913:C2,148|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc80180010941bfffc8018000c941bfffc80180008941bfffc3c8002ab6084cd903c0002a1600074a87c0803a64e800021833b000c831b0010907b001080db000480bb000838800003807b00003af80000831900043b370000801800007c0903a67f2803a63b7b00104e800420|@4914,1048575|64,3,@4850 72,3,@511 4914:S82|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296d616b65536967496e746f2836296c6f6f6b75704661696c757265283129 4915:C2,408|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8001c82d7000c82b7001882980018973bfffc971bfffc947bfffc80160028941bfffc8074002083150004801800007c0803a64e800021827b0008825300143a230000807200203b110000801800007c0803a64e800021821b000881f0001c81cf001881500018947bfffc806a002c830e0004801800007c0803a64e800021813b000c8109001438e300008068002c3b070000801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138dd0004919d00009066000480bb000090a60000809b000c398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d00003f2002ab6339f2c493230000830400089303001082e4001092e3000c82c4000c92c3000882a4000492a300043a830000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092830008827b00089263000490c30000831b0004833b0010801800007c0903a67f2803a63b7b00144e800420|@4917,1048575|280,3,@4916 4916:C2,68|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc80d8000880b8000c388000038078001083180004801800007c0903a64e800420|@4785,1048575| 4917:S81|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296d616b65536967496e746f2836296c6f6f6b7570476c6f62616c283129 4918:C2,68|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc80d8000880b8000c388000038078001083180004801800007c0903a64e800420|@4785,1048575| 4919:S40|6d616b65536967496e746f3a206e6f742061205369674964656e74206e6f72206120536967446563 4920:S66|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296d616b65536967496e746f283629 4921:S63|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c28352973696756616c7565283429 4922:C2,68|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc80d8000880b8000c388000038078001083180004801800007c0903a64e800420|@4785,1048575| 4923:S52|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c283529 4924:C2,240|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000882d70008973bfffc971bfffc947bfffc831600a0801800007c0803a64e800021280300014182009482bb00048295000882740008807b0000831300a8801800007c0803a64e800021825b00048232000882110008947bfffc8072000483100078801800007c0803a64e80002181fb00007deb1838556bf80140a20010800d00347c0803a64e8000217c0f1800418000183860000381db000c7dc803a63b7b00104e8000203860000181db000c7dc803a63b7b00104e8000203860000182bb00087ea803a63b7b000c4e800020|@4925,1048575| 4925:S72|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973747275637456616c75652835296d757374436f707954797065283129 4926:S57|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973747275637456616c7565283529 4927:C2,240|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000882d70008973bfffc971bfffc947bfffc831600a0801800007c0803a64e800021280300014182009482bb00048295000882740008807b0000831300a8801800007c0803a64e800021825b00048232000882110008947bfffc8072000483100078801800007c0803a64e80002181fb00007deb1838556bf80140a20010800d00347c0803a64e8000217c0f1800418000183860000381db000c7dc803a63b7b00104e8000203860000181db000c7dc803a63b7b00104e8000203860000182bb00087ea803a63b7b000c4e800020|@4928,1048575| 4928:S109|535452554354555245535f28292e70617373325374727563747328332970617373325374727563742835297061737332537472756374757265446563283229706173733253747275637475726542696e64283629726573756c745369672d6d757374436f707954797065283129 4929:S84|535452554354555245535f28292e70617373325374727563747328332970617373325374727563742835297061737332537472756374757265446563283229706173733253747275637475726542696e64283629 4930:S63|535452554354555245535f28292e70617373325374727563747328332970617373325374727563742835297061737332537472756374757265446563283229 4931:C2,332|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8fffc82d7fffc82b600048295001c3a630000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d00003e4002ab6252fa70924300008237fff4922300109263000c8218fff09203000881f6000891e30004973bfffc971bfffc967bfffc949bfffc83140000801800007c0803a64e800021947bfffc81db00042c0e00014082000848000070814e0000800e0004941bfffc812a0010953bfffc810a0014951bfffc80ea001894fbfffc80ca000c80aa0008808a0004806a00003b1b00203c0002ab6000fb9c7c0803a64e80002181db00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffff8c815b0000813b000c8109ffec8068001c830a0000833b0010801800007c0903a67f2803a63b7b00144e800420|@4950,1048575|88,3,@4932 236,3,@4935 4932:C2,176|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc80180010941bfffc8018000c941bfffc80180008941bfffc388300003c6002ab6063fb3c3c0002a1600074a87c0803a64e8000213c8002ab60846f303c0002a1600074a87c0803a64e800021833b000c831b0010907b001080db000080bb000438800003807b00083af80000831900043b370000801800007c0903a67f2803a63b7b00104e800420|@4934,1048575|68,3,@4933 76,3,@511 92,3,@4778 100,3,@511 4933:S8|46756e63746f7220 4934:S69|535452554354555245535f28292e7061737332537472756374732833297061737332537472756374283529706173733246756e63746f7244656328322973456e762d283129 4935:C2,3132|7f2802a66339000239600088800d00187d6bd8107c0b004040a00010800d00247c0803a64e80002182e300002c17000340820ba082d8fffc82b6fffc8295fffc8274000482530008973bfffc971bfffc949bfffc94bbfffc94dbfffc80030004941bfffc80030008941bfffc8003000c941bfffc3c6000006063466883120080801800007c0803a64e800021823b00188211fffc81f0fffc81cffffc814e0004812a000883090134801800007c0803a64e800021811b001880e8fffc80c7fffc80a6fffc80850004832400088319013083180008801800007c0803a64e80002182fb000082b700002c15fff54082000c3ad70000480000842c15fff74082000c3ad70000480000742c15ffef4082000c3ad7000048000064398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a9d0004919d00003a6000019274000492f40000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213add0004919d0000929600043a40fff792560000823b00188211fffc81f0fffc81cffffc814e0004812a000881090130947bfffc96dbfffc8070ffec83080004801800007c0803a64e8000213ce0000060e7466894fbfffc80db001c38a3000038800001807b0004833b00248319fffc3c0002ab60008ff07c0803a64e800021831b002082f8fffc82d7fffc82b6fffc82950004827400083a430000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092430004823b001092230000965bfffc83130048801800007c0803a64e8000213a0300003c80000060844668807b00143f00000063184368801800007c0803a64e800021280300014082005081fb0008398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00009203000481db001491c30000961bfffc830f0024801800007c0803a64e8000214800011881fb002481cffffc814efffc812afffc8109000480e8002480c80008961bfffc80070008941bfffc807b000883060074801800007c0803a64e80002180bb002c8085fffc8324fffc8319fffc398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002ac62d607f492d7000082bb000492b7000c829b0010929700088278000492770004398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a5d0004919d00003e2002ac62310be09232000092f200043a030000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000039e0000191e300089243000492030000831b0000801800007c0803a64e8000213b7b000481db0014815b0000914e0000813b00288109fffc80e8fffc80c7fffc80a6000480850018807b000c8063001883040004801800007c0803a64e800021833b00288319fffc82f8ffec3ac30000807700183b160000801800007c0803a64e80002182bb00288295fffc8274fffc8253fffc823200048211001881fb000c947bfffc806f002083100004801800007c0803a64e80002181db002c814efffc812affec39030000806900203b080000801800007c0803a64e80002180fb002c80c7fffc80a6ffec8086fffc8324fffc8319000482f8001882db0010947bfffc80050010941bfffc8076002c83170004801800007c0803a64e80002182bb00348295fffc8274ffec3a4300008073002c3b120000801800007c0803a64e800021823b00348211fffc81f0ffec3980000c3bbdffcc7c1df04040a00010800d001c7c0803a64e80002139dd0004919d0000906e002c814f0028914e0028812f0024912e0024811b0004910e002080ef001c90ee001c80db000890ce001880af001490ae0014809b0000908e0010806f000c906e000c832f0008932e0008830f0004930e00043ee002ac62f70c9492ee000082d0fffc82b6fffc829500048274000895dbfffc807b00148313007c801800007c0803a64e8000213d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213a5d0004919d000090720000823b00388211fffc81f0fffc81cffffc398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021395d0004919d00003d2002ac61290d28912a0000924a0008810e0004910a000480e8000880c70130965bfffc955bfffc807b000883060004801800007c0803a64e80002180bb00408085fffc947bfffc83240004809b0038387900003c0002a1600074a87c0803a64e8000213c8002ac60840e143c0002a1600074a87c0803a64e800021831b0040971bfffc80db000c80bb0004809b004082fb00488317fffc3c0002ab600075087c0803a64e80002182db004c829600002c1400014082000c3aa3000048000384827b00448253fffc8232fffc8211fffc81f0000481cf0008947bfffc807b0024830e007c801800007c0803a64e800021815b0048812afffc8109fffc80e8fffc80c7000480a6000880850130947bfffc807b001483040004801800007c0803a64e800021833b004c8319fffc947bfffc809b0044807800043c0002a1600074a87c0803a64e8000213c8002ac60840e143c0002a1600074a87c0803a64e800021947bfffc80db004c80bb0004809b0008807b005c82fb00548317fffc3c0002ab60008ff07c0803a64e80002182db005082b6fffc8295fffc8274fffc8253000482320008947bfffc83110078801800007c0803a64e800021821b005481f0fffc81cffffc814efffc812a000481090008947bfffc807b00048308007c801800007c0803a64e800021947bfffc947bfffc80fb006080c7fffc80a6fffc8085fffc38bb00008324001438830000807b00083b190000801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b1d0004919d000082fb000092f8000082db000492d8000482bb00608295fffc8274fffc8253fffc398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a3d0004919d00003e0002ac62100e209211000081f2000491f1000881db000c91d10004815b0070280a0001418200c0810f0008971bfffc963bfffc386e000083080078801800007c0803a64e80002180fb006880c7fffc80a6fffc8085fffc8324000483190008947bfffc807b00188318007c801800007c0803a64e800021947bfffc947bfffc82fb007482d7fffc82b6fffc8295fffc38bb000038830000807b000883140014801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021393d0004919d0000827b000092690000825b0004924900044800001c39380000971bfffc963bfffc947bfffc947bfffc947bfffc811b007480e8fffc80c7fffc80a6fffc953bfffc809b0070949bfffc8066fff4947bfffc80c8fff88325001080bb001c809b002c807b00383b190000801800007c0803a64e800021831b007882f8fffc809b006c807700043c0002a1600074a87c0803a64e8000213c8002ac60840e143c0002a1600074a87c0803a64e80002182db007882b6fffc8295fffc8274fffc947bfffc80db000480bb003c809b0014807b00288313000c801800007c0803a64e8000213aa300003b7b0034825b00448232fffc8211fffc81f0fffc81cf0004814e000896bbfffc800a0084941bfffc38750000830a0070801800007c0803a64e800021813b00108109000038e30000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00009103000c38c0000190c3000880bb000490a3000490e30000831b0000801800007c0803a64e800021809b004c8324fffc8319fffc82f8fffc82d7000482b60008947bfffc8015006c941bfffc38600001831500f8801800007c0803a64e8000213a830000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00009283000c827b000492630008825b002c92430004823b004892230000831b0000801800007c0803a64e800021821b005481f0fff039c30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000091c30004815b00489143000095dbfffc830f0004801800007c0803a64e800021813b0064811b0000910900003860000180fb005c7ce803a63b7b006c4e800020973bfffc82d8fffc82b6fffc8295fffc8274000482530018398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a3d0004919d00003e0002ac62100fa0921100083de002a061efc7ac91f1000481d2000091d1000038710000800d00287c0803a64e800021|@4949,1048575|116,3,I48 432,3,I48 468,3,@4803 584,3,I48 596,3,I24 812,3,@4936 884,3,@4938 1392,3,@4940 1540,3,@4943 1624,3,@511 1640,3,@4945 1648,3,@511 1692,3,@4781 1852,3,@511 1868,3,@4945 1876,3,@511 1920,3,@4803 2188,3,@4946 2528,3,@511 2544,3,@4945 2552,3,@511 3084,3,@4948 3096,3,@227 4936:C2,884|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7002082b70008973bfffc971bfffc947bfffc949bfffc807500d883160000801800007c0803a64e8000213a830000807b00003b140000801800007c0803a64e800021280300014182009c827b000882530008823300048211002081f100088012000c941bfffc806f00d883100004801800007c0803a64e80002139c30000807b00043b0e0000801800007c0803a64e80002139430000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000091430004813b000891230000831b0000833b0010801800007c0903a67f2803a63b7b00144e800420827b00088253000482320020821200088070012883110000801800007c0803a64e80002139e30000807b00003b0f0000801800007c0803a64e80002128030001418200f081db0008814e0008812e00048109000c80e9002080c90008800a0008941bfffc80080008941bfffc8066012883070004801800007c0803a64e80002138a30000807b00083b050000801800007c0803a64e800021809b00103b230000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008304000c9303000493230000831b0000801800007c0803a64e8000213ae30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092e3000482db000c92c30000831b0004833b0014801800007c0903a67f2803a63b7b00184e80042081db0008814e0004812a0020810a00088068004083090000801800007c0803a64e80002138e30000807b00003b070000801800007c0803a64e80002128030001418200e880db000880a6000880860004806400088324002080050024941bfffc80030044941bfffc8063004083190004801800007c0803a64e8000213b030000807b0008801800007c0803a64e80002182fb00103ac30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082b7000c92a3000492c30000831b0000801800007c0803a64e8000213a830000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092830004827b000c92630000831b0004833b0014801800007c0903a67f2803a63b7b00184e8004203860000180db000c7cc803a63b7b00104e800020|@4937,1048575| 4937:S83|535452554354555245535f28292e7061737332537472756374732833297061737332537472756374283529706173733246756e63746f72446563283229706173733246756e63746f7242696e64283729283329 4938:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@4939,1048575| 4939:S83|535452554354555245535f28292e7061737332537472756374732833297061737332537472756374283529706173733246756e63746f72446563283229706173733246756e63746f7242696e64283729283129 4940:O1|@4941 4941:C2,8|386000014e800020|@4942,524289| 4942:S95|535452554354555245535f28292e7061737332537472756374732833297061737332537472756374283529706173733246756e63746f72446563283229706173733246756e63746f7242696e64283729656e7657697468417267732d283129 4943:C2,108|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000218078000882e300003980000256e0f80140a20010800d00347c0803a64e8000217ed7661541a3fff092c3000082b80004829500083877000083140090801800007c0903a67f2803a64e800420|@4944,1048575| 4944:S92|535452554354555245535f28292e7061737332537472756374732833297061737332537472756374283529706173733246756e63746f72446563283229706173733246756e63746f7242696e642837296e6577547970654964283129 4945:S3|28292e 4946:C2,240|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000882d70008973bfffc971bfffc947bfffc831600a0801800007c0803a64e800021280300014182009482bb00048295000882740008807b0000831300a8801800007c0803a64e800021825b00048232000882110008947bfffc8072000483100078801800007c0803a64e80002181fb00007deb1838556bf80140a20010800d00347c0803a64e8000217c0f1800418000183860000381db000c7dc803a63b7b00104e8000203860000181db000c7dc803a63b7b00104e8000203860000182bb00087ea803a63b7b000c4e800020|@4947,1048575| 4947:S105|535452554354555245535f28292e7061737332537472756374732833297061737332537472756374283529706173733246756e63746f72446563283229706173733246756e63746f7242696e64283729726573756c745369672d6d757374436f707954797065283129 4948:S16|706173733246756e63746f7242696e64 4949:S80|535452554354555245535f28292e7061737332537472756374732833297061737332537472756374283529706173733246756e63746f72446563283229706173733246756e63746f7242696e64283729 4950:S61|535452554354555245535f28292e7061737332537472756374732833297061737332537472756374283529706173733246756e63746f72446563283229 4951:C2,304|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8fffc82d7fffc82b600048295001c3a630000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d00003e4002ac625211a4924300008237fff4922300109263000c8218fff09203000881f6000891e30004973bfffc971bfffc949bfffc83140000801800007c0803a64e800021947bfffc81db00042c0e00014082000848000058814e0000800e0004941bfffc80ca000c80aa0008808a0004806a00003b1b00103c0002ac600012d47c0803a64e80002181db00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffffa4815b0000813b00088109ffec80680004830a0000833b000c801800007c0903a67f2803a63b7b00104e800420|@4957,1048575|88,3,@4952 208,3,@4955 4952:C2,176|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc80180010941bfffc8018000c941bfffc80180008941bfffc388300003c6002ac606312703c0002a1600074a87c0803a64e8000213c8002ab60846f303c0002a1600074a87c0803a64e800021833b000c831b0010907b001080db000080bb000438800003807b00083af80000831900043b370000801800007c0903a67f2803a63b7b00104e800420|@4954,1048575|68,3,@4953 76,3,@511 92,3,@4778 100,3,@511 4953:S10|5369676e617475726520 4954:S71|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352970617373325369676e617475726544656328322973456e762d283129 4955:C2,480|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8fffc82d7fffc82b6fffc829500048274000882530130973bfffc971bfffc947bfffc949bfffc94bbfffc94dbfffc8077ffec83120004801800007c0803a64e800021823b00108211fffc947bfffc809b000c807000043c0002a1600074a87c0803a64e8000213880005d3c0002a1600074a87c0803a64e800021947bfffc80db001480bb000438800001807b000881fb0018830ffffc3c0002ab60008ff07c0803a64e80002181db0014814efffc812afffc8109fffc80e8000480c70008947bfffc80060084941bfffc83060078801800007c0803a64e80002180bb001c8085fffc8324fffc8319fffc82f8000482d70008947bfffc807b00088316007c801800007c0803a64e8000213aa30000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a3000c829b000092830008827b000892630004825b001892430000831b0004801800007c0803a64e800021823b001490710000821b002081f0fff439c30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000091c30004815b001891430000830f0004833b0024801800007c0903a67f2803a63b7b00284e800420|@4956,1048575|120,3,@511 140,3,@511 184,3,@4803 4956:S84|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352970617373325369676e617475726544656328322970617373325369676e617475726542696e64283429 4957:S63|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352970617373325369676e6174757265446563283229 4958:C2,1132|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8fffc82d7fffc82b6000482950008973bfffc971bfffc947bfffc949bfffc3c6000006063466883140080801800007c0803a64e800021827b00088253fffc8232fffc8211000481f00008830f0134801800007c0803a64e80002181db0008814efffc812afffc8109000480e8000880c7013083060008801800007c0803a64e80002180bb00088085fffc8324fffc8319000482f80018947bfffc8063001883170004801800007c0803a64e80002182db000c82b6ffec3a830000807500183b140000801800007c0803a64e800021827b000c8253fffc8232fffc8211000481f0001881db0000947bfffc806e0020830f0004801800007c0803a64e800021815b0010812affec39030000806900203b080000801800007c0803a64e80002180fb000480db001080a6fffc8085fffc8324000483190018947bfffc80070010941bfffc8067002c83180004801800007c0803a64e80002182fb001882d7ffec3aa300008076002c3b150000801800007c0803a64e800021829b00188274ffec825b000c3980000c3bbdffcc7c1df04040a00010800d001c7c0803a64e8000213a3d0004919d00009071002c821300289211002881f2002491f1002481db000491d100208152001c9151001c813b000891310018811300149111001480fb000090f1001080d2000c90d1000c80b2000890b1000880920004909100043f2002ac633919fc933100008314fffc82f8fffc82d7000482b6000883350130947bfffc951bfffc961bfffc955bfffc8014fff4941bfffc3871000083190004801800007c0803a64e800021831b002c82f8000496fbfffc80d8fff038a30000809b0004807b002c8318fffc3c0002ab600069e47c0803a64e80002182db002c398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003e8002ac62941a7892950000827b0020927500088256ffec92550004398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a3d0004919d00003e0002ac62101b4c921100009271000892510004398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002139fd0004919d00003dc002ac61ce1bd091cf0000926f0008924f0004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021395d0004919d00003d2002ac61291c54912a0000926a0008924a00043980000c3bbdffcc7c1df04040a00010800d001c7c0803a64e800021391d0004919d000080fb001090e8002c80db000890c8002891e8002480bb001890a80020809b00049088001c807b001c90680018833b000c93280014831b0014930800109228000c92a80008914800043ee002ac62f719fc92e8000082b6fffc8295fffc8274000482330008821101308016fff4941bfffc3868000083100004801800007c0803a64e80002181fb003081cf0004815b003491db003480cffff038a30000809b0000807b0028830ffffc3b2a00003c0002ab600069e47c0903a67f2803a63b7b00344e800420|@4967,1048575|64,3,I48 540,3,@4959 648,3,@4771 704,3,@4962 768,3,@4964 824,3,@4965 880,3,@4966 1008,3,@4959 1108,3,@4771 4959:O1|@4960 4960:C2,8|386000014e800020|@4961,524289| 4961:S71|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352970617373324c6f63616c6465632832296c6f63616c456e762d283129 4962:C2,104|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f80008973bfffc971bfffc947bfffc83170008801800007c0803a64e80002182db000482b60004807b000083150008833b0008801800007c0903a67f2803a63b7b000c4e800420|@4963,1048575| 4963:S70|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352970617373324c6f63616c646563283229626f6479456e762d283129 4964:C2,104|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f80008973bfffc971bfffc947bfffc8317000c801800007c0803a64e80002182db000482b60004807b00008315000c833b0008801800007c0903a67f2803a63b7b000c4e800420|@4963,1048575| 4965:C2,104|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f80008973bfffc971bfffc947bfffc83170024801800007c0803a64e80002182db000482b60004807b000083150024833b0008801800007c0903a67f2803a63b7b000c4e800420|@4963,1048575| 4966:C2,104|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f80008973bfffc971bfffc947bfffc83170004801800007c0803a64e80002182db000482b60004807b000083150004833b0008801800007c0903a67f2803a63b7b000c4e800420|@4963,1048575| 4967:S59|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352970617373324c6f63616c646563283229 4968:C2,580|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8ffec398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002ac62b51f7c92b6000092f6000890960004398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003e8002ac629421ac9295000092f5000890950004398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a9d0004919d00003e6002ac627323709274000092f4000890940004398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a7d0004919d00003e4002ac6252253c9253000092f30008909300043980000c3bbdffcc7c1df04040a00010800d001c7c0803a64e800021389d0004919d00008257002c9244002c82370028922400289264002482770020926400208217001c9204001c81f7001891e4001881d7001491c40014815700109144001092a4000c92c4000882d7000492c400049284000082b8fffc8295fffc813400048109001480e9000880c70130973bfffc971bfffc947bfffc94bbfffc80080004941bfffc8018ffe8941bfffc3864000083060004801800007c0803a64e80002180bb00108085fffc3b230000398000063bbdffe47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000830500049303001482fb000892e3001082c4fff492c3000c9323000882bb000092a30004829b000c92830000831b0004801800007c0803a64e80002138600001827b00147e6803a63b7b00184e800020|@4978,1048575|72,3,@4969 128,3,@4972 184,3,@4974 240,3,@4976 4969:C2,284|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f80008973bfffc971bfffc80030004941bfffc83170008801800007c0803a64e80002182db000482b6000482950000827b0000398000053bbdffe87c1df04040a00010800d001c7c0803a64e8000213a5d0004919d00008233000c92320010821300089212000c81f3000491f2000881d3000091d200043940fffd91520000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021393d0004919d00003900000191090004924900002c0900014082000c38f4000048000028953bfffc387400003b1b000c3c0002ac600020b47c0803a64e80002138e300003b7b000490f500003860000180db00087cc803a63b7b000c4e800020|@4971,1048575|236,3,@4970 4970:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c8078fff44e800020973bfffc971bfffc80030000941bfffc806300044bffffbd398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b00009319000038790000833b00087f2803a63b7b000c4e800020|@468,786433| 4971:S70|535452554354555245535f28292e7061737332537472756374732833297061737332537472756374283529706173733253696e676c65746f6e2833296e6577456e762d283129 4972:C2,256|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f80008973bfffc971bfffc80030004941bfffc8317000c801800007c0803a64e80002182db000482b6000482950000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a7d0004919d0000825b0000925300043a20000392330000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a1d0004919d000039e0000191f00004927000002c1000014082000c39d4000048000028961bfffc387400003b1b000c3c0002ac600022c87c0803a64e80002139c300003b7b000491d5000038600001815b00087d4803a63b7b000c4e800020|@4971,1048575|208,3,@4973 4973:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c8078fff44e800020973bfffc971bfffc80030000941bfffc806300044bffffbd398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b00009319000038790000833b00087f2803a63b7b000c4e800020|@468,786433| 4974:C2,264|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f80008973bfffc971bfffc947bfffc83170000801800007c0803a64e80002182db000482b6000482950000827b0000398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a5d0004919d00008233000492320008821300009212000439e0000191f20000398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002139dd0004919d000039400001914e0004924e00002c0e00014082000c393400004800002895dbfffc387400003b1b000c3c0002ac600024947c0803a64e800021392300003b7b00049135000038600001811b00087d0803a63b7b000c4e800020|@4971,1048575|216,3,@4975 4975:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c8078fff44e800020973bfffc971bfffc80030000941bfffc806300044bffffbd398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b00009319000038790000833b00087f2803a63b7b000c4e800020|@468,786433| 4976:C2,256|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f80008973bfffc971bfffc80030004941bfffc83170024801800007c0803a64e80002182db000482b6000482950000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a7d0004919d0000825b0000925300043a20ffff92330000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a1d0004919d000039e0000191f00004927000002c1000014082000c39d4000048000028961bfffc387400003b1b000c3c0002ac600026587c0803a64e80002139c300003b7b000491d5000038600001815b00087d4803a63b7b000c4e800020|@4971,1048575|208,3,@4977 4977:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c8078fff44e800020973bfffc971bfffc80030000941bfffc806300044bffffbd398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b00009319000038790000833b00087f2803a63b7b000c4e800020|@468,786433| 4978:S60|535452554354555245535f28292e7061737332537472756374732833297061737332537472756374283529706173733253696e676c65746f6e283329 4979:S54|535452554354555245535f28292e70617373325374727563747328332970617373325374727563742835297061737332446563283129 4980:S43|535452554354555245535f28292e7061737332537472756374732833297061737332537472756374283529 4981:S29|535452554354555245535f28292e706173733253747275637473283329 4982:O13|@4984,@4991,@4992,@5087,@5362,@5625,@4392,@6650,@6040,@6651,@6652,@4365,@4983 4983:O3|@6661,@6666,@6660 4984:O6|@4225,@4231,@4985,@4224,@3572,@3571 4985:O2|@4987,@4986 4986:O2|@4989,@2721 4987:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@4988,1048575| 4988:S21|4c45585f28292e7761726e696e6750726f63283129 4989:C2,136|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e3000496fbfffc82c3000896dbfffc82a3000c96bbfffc82830010969bfffc82630014967bfffc82430018965bfffc8223001c963bfffc82030020961bfffc81e3002495fbfffc80c3000039c5000038a00001386e000083180004801800007c0903a64e800420|@4990,1048575| 4990:S21|4c45585f28292e7761726e696e6750726f63283329 4991:O14|@886,@2086,@3586,@2250,@3651,@3592,@3595,@4421,@3613,@2356,@3607,@3128,@2348,@4414 4992:O78|@4994,@4998,@3802,@3810,@3818,@3822,@3727,@3735,@3742,@3750,@3758,0,@4023,@4026,@4083,@4086,@4173,@4089,@5006,@5011,@5017,0,@5022,@4095,@4098,@4101,@5025,@5028,@3662,@3665,@5033,@5036,@5039,@5042,@4284,@5048,@5051,@211,@3668,@3866,@4273,@4276,@5054,@3671,@4279,@4021,@3836,@4287,@3839,@3849,@3842,@3844,@3854,@3846,@4177,@3861,@773,@206,@3550,@4106,@5058,@3739,@5061,@3732,@5064,@5067,@5070,@5073,@5076,@5079,@5082,@4993,@4121,@4124,@4148,@3661,@3549,@4147 4993:O1|@5085 4994:O2|@4995,0 4995:O1|@4996 4996:C2,24|280300014082000c386000034e800020386000014e800020|@4997,524289| 4997:S8|4e6f537472756374 4998:O3|@5000,@5003,@4999 4999:O1|@5005 5000:O1|@5001 5001:C2,64|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000213f00000063184d88801800007c0803a64e800021686300027f2803a64e800020|@5002,917505|32,3,I105 5002:S6|537472756374 5003:O1|@5004 5004:C2,4|4e800020|@5002,524289| 5005:C2,4|4e800020|@5002,524289| 5006:O1|@5007 5007:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180830004806300003c0002ac60002ca07c0903a64e800420|@5010,983043|40,3,@5008 5008:C2,216|7f2802a6633900023d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213b1d0004919d00003ae0000192f800003d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ac0000192d70000398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213add0004919d000092f60008931600043b00000393160000398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213afd0004919d00009097000892d7000490770000387700007f2803a64e800020|@5009,983043| 5009:S32|5354525543545f56414c5328292e6d616b654c6f63616c537472756374283229 5010:S32|5354525543545f56414c5328292e6d616b654c6f63616c537472756374283129 5011:O2|@5013,@5012 5012:O2|@5015,@4027 5013:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@5014,1048575| 5014:S33|5354525543545f56414c5328292e6d616b65476c6f62616c537472756374283129 5015:C2,280|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7000c973bfffc947bfffc94bbfffc8004000c941bfffc80040008941bfffc806400008316000c801800007c0803a64e800021398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213abd0004919d0000829b00049295000c827b0000927500083e400000625246689255000490750000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a3d0004919d0000821b00089211000439e0ffff91f10000398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002139dd0004919d000092ae0008922e0004815b000c914e0000386e0000813b00107d2803a63b7b00144e800020|@5016,1048575|140,3,I48 5016:S33|5354525543545f56414c5328292e6d616b65476c6f62616c537472756374283329 5017:O1|@5018 5018:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a3000880830004806300003c0002ac600030407c0903a64e800420|@5021,786439|44,3,@5019 5019:C2,116|7f2802a663390002398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b1d0004919d000090b8000438a0000190b80000398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002138bd0004919d0000908500089305000490650000386500007f2803a64e800020|@5020,786439| 5020:S33|5354525543545f56414c5328292e6d616b65466f726d616c537472756374283329 5021:S33|5354525543545f56414c5328292e6d616b65466f726d616c537472756374283129 5022:O1|@5023 5023:C2,24|280300014082000c386000034e800020386000014e800020|@5024,524289| 5024:S35|5354525543545f56414c5328292e6973556e646566696e656446756e63746f72283129 5025:O1|@5026 5026:C2,40|2c0300014082001c973bfffc3c6002a160630a30800d00287c0803a64e800021806300084e800020|@5027,524289|12,3,@341 5027:S30|5354525543545f56414c5328292e66756e63746f72416363657373283129 5028:O1|@5029 5029:C2,64|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180c3000c80a3000880830004806300003c0002ac600032687c0903a64e800420|@5032,786447|48,3,@5030 5030:C2,72|7f2802a663390002398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213b1d0004919d000090b8000c90d800089078000490980000387800007f2803a64e800020|@5031,786447| 5031:S28|5354525543545f56414c5328292e6d616b6546756e63746f72283429 5032:S28|5354525543545f56414c5328292e6d616b6546756e63746f72283129 5033:O1|@5034 5034:C2,8|8063000c4e800020|@5035,524289| 5035:S28|5354525543545f56414c5328292e7369674d696e5479706573283129 5036:O1|@5037 5037:C2,8|806300084e800020|@5038,524289| 5038:S28|5354525543545f56414c5328292e7369674d61785479706573283129 5039:O2|@5040,@4027 5040:C2,152|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7000c973bfffc947bfffc3860000183160000801800007c0803a64e800021398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003a8000019295000c3a60000192750008825b0000925500049075000038750000823b00047e2803a63b7b00084e800020|@5041,1048575| 5041:S31|5354525543545f56414c5328292e6d616b655369676e617475726573283129 5042:O2|@5044,@5043 5043:O2|@5046,@4027 5044:C2,64|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180c3000c80a30008808300048063000083180004801800007c0903a64e800420|@5045,1048575| 5045:S25|5354525543545f56414c5328292e6d616b65436f7079283129 5046:C2,160|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7000c973bfffc947bfffc94bbfffc94dbfffc806400008316000c801800007c0803a64e800021398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213abd0004919d0000829b00049295000c827b000092750008825b0008925500049075000038750000823b000c7e2803a63b7b00104e800020|@5047,1048575| 5047:S25|5354525543545f56414c5328292e6d616b65436f7079283429 5048:O1|@5049 5049:C2,120|7f2802a6633900023d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d00003f0002a06318c450930300003b030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000930300043b00fffd930300007f2803a64e800020|@5050,786433|48,3,@211 5050:S31|5354525543545f56414c5328292e6d616b655661726961626c654964283129 5051:O1|@5052 5052:C2,68|7f2802a6633900023b030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000930300043b000001930300007f2803a64e800020|@5053,786433| 5053:S5|426f756e64 5054:O2|@5055,@4027 5055:C2,220|7f2802a663390002973bfffc971bfffc830300002c18fffd408200408323000482f9000082d700002c1600034082000c3b2300004800002838770000800d00187c1b004040a00010800d00207c0803a64e8000214bffffbc3b23000082f900002c170001408200188079000482db00047ec803a63b7b00084e80002082db000082b6000482950004398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a7d0004919d00003e4002ac62523854925300083e4002a06252c7ac92530004825400009253000038730000800d00287c0803a64e800021|@5057,1044481|172,3,@5056 184,3,@227 5056:S21|6f666673657449643a206e6f74206120426f756e64 5057:S25|5354525543545f56414c5328292e6f66667365744964283129 5058:O1|@5059 5059:C2,44|83030004730b00014082000c386000034e8000202c1800014082000c386000034e800020386000014e800020|@5060,786433| 5060:S30|5354525543545f56414c5328292e6973436f6e7374727563746f72283129 5061:O1|@5062 5062:C2,168|7f2802a6633900023d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d00003b000001930300003d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213b1d0004919d00003ae0000192f800003ae30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00009303000892e300043b000003930300007f2803a64e800020|@5063,917505| 5063:S26|5354525543545f56414c5328292e6d616b654c6f63616c283129 5064:O1|@5065 5065:C2,28|830300002c18ffff4082000c386000034e800020386000014e800020|@5066,786433| 5066:S25|5354525543545f56414c5328292e6973476c6f62616c283129 5067:O1|@5068 5068:C2,28|830300002c1800034082000c386000034e800020386000014e800020|@5069,786433| 5069:S24|5354525543545f56414c5328292e69734c6f63616c283129 5070:O1|@5071 5071:C2,28|830300002c1800014082000c386000034e800020386000014e800020|@5072,786433| 5072:S25|5354525543545f56414c5328292e6973466f726d616c283129 5073:O1|@5074 5074:C2,28|830300002c1800054082000c386000034e800020386000014e800020|@5075,786433| 5075:S27|5354525543545f56414c5328292e697353656c6563746564283129 5076:O1|@5077 5077:C2,44|830300002c18ffff4082000c806300044e800020973bfffc3c6002a160630a30800d00287c0803a64e800021|@5078,786433|24,3,@341 5078:S25|5354525543545f56414c5328292e7661476c6f62616c283129 5079:O1|@5080 5080:C2,44|830300002c1800014082000c806300044e800020973bfffc3c6002a160630a30800d00287c0803a64e800021|@5081,786433|24,3,@341 5081:S25|5354525543545f56414c5328292e7661466f726d616c283129 5082:O1|@5083 5083:C2,108|7f2802a663390002830300002c18000340820044398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213afd0004919d000082c3000892d7000482a3000492b70000387700007f2803a64e800020973bfffc3c6002a160630a30800d00287c0803a64e800021|@5084,1015809|88,3,@341 5084:S24|5354525543545f56414c5328292e76614c6f63616c283129 5085:C2,108|7f2802a663390002830300002c18000540820044398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213afd0004919d000082c3000892d7000482a3000492b70000387700007f2803a64e800020973bfffc3c6002a160630a30800d00287c0803a64e800021|@5086,1015809|88,3,@341 5086:S27|5354525543545f56414c5328292e766153656c6563746564283129 5087:O11|@4111,@5089,@5095,@5101,@5111,@5114,@5320,@5326,@5343,@5346,@5088 5088:O2|@5355,@5354 5089:O2|@5091,@5090 5090:O2|@5093,@3566 5091:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@5092,1048575| 5092:S20|56414c55455f4f505328292e6d6b476578283129 5093:C2,204|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7000882b6006882960034973bfffc971bfffc947bfffc949bfffc80150004941bfffc3865000083140004801800007c0803a64e800021827b000c82530004823200088211007039e30000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d000081db000491c3000c91e300088150000491430004813b000891230000831b0000833b0010801800007c0903a67f2803a63b7b00144e800420|@5094,1048575| 5094:S20|56414c55455f4f505328292e6d6b476578283329 5095:O2|@5097,@5096 5096:O2|@5099,@3566 5097:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@5098,1048575| 5098:S28|56414c55455f4f505328292e6d6b53656c6563746564566172283129 5099:C2,408|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7000882b60068973bfffc971bfffc947bfffc949bfffc83150008801800007c0803a64e800021829b0008827400048253000882320030947bfffc80030008941bfffc807b000083110000801800007c0803a64e8000212803000141820104821b001081f0000481cf0008814e0030807b0000830a0008801800007c0803a64e800021813b0004811b001080e8000480c7000880a60068808600403b230000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000831b0008930300049323000080090000941bfffc80090004941bfffc8009000c941bfffc80050004941bfffc83040004801800007c0803a64e8000213ae30000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d000082db000492c3000c92e3000882bb000892a30004829b000c92830000831b0000833b0024801800007c0903a67f2803a63b7b00284e800420807b000c821b00147e0803a63b7b00184e800020|@5100,1048575| 5100:S28|56414c55455f4f505328292e6d6b53656c6563746564566172283229 5101:O2|@5103,@5102 5102:O3|@5106,@3566,@5105 5103:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@5104,1048575| 5104:S25|56414c55455f4f505328292e636f6465537472756374283129 5105:O2|@5108,@3566 5106:C2,180|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d70008973bfffc971bfffc947bfffc949bfffc831600d8801800007c0803a64e800021280300014182002482bb0008829500048274000480730000825b000c7e4803a63b7b00104e80002082bb00088295000482740008807b0004831300e4801800007c0803a64e800021825b0008809b000083120008833b000c801800007c0903a67f2803a63b7b00104e800420|@5107,1048575| 5107:S25|56414c55455f4f505328292e636f6465537472756374283229 5108:C2,824|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7000882b60034973bfffc971bfffc947bfffc949bfffc83150000801800007c0803a64e8000212803000141820038829b0008827400048253000882320034807b000483110008801800007c0803a64e800021821b000c7e0803a63b7b00104e800020829b0008827400048253000882320038807b000483110000801800007c0803a64e8000212803000141820104821b000881f0000481cf0008814e0038807b0004830a0008801800007c0803a64e800021812300008109000080e3000480c7000080bb00003986ffff7cab30385560f80140a20010800d00347c0803a64e8000217c8c2c1141a3fff02c0800014082004c833b00088319000482f80004398000025480f80140a20010800d00347c0803a64e8000217c6c241141a3fff083170014833b000c801800007c0903a67f2803a63b7b00104e800420833b00088319000482f80004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000908300049103000083170018833b000c801800007c0903a67f2803a63b7b00104e800420821b000881f0000481cf0008814e0040807b0004830a0000801800007c0803a64e80002128030001418200fc813b00088109000480e8000880c70040807b000483060008801800007c0803a64e80002180bb000880850004832400048304000880030000941bfffc80030004941bfffc8019001c941bfffc807b0004831800d8801800007c0803a64e800021280300014182001882db001482b600048295000482f400004800003482fb001482d7000482b60008807b0004831500e4801800007c0803a64e800021809b000c831b00144bfffd7d3ae30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092e30004829b000892830000831b0000833b0018801800007c0903a67f2803a63b7b001c4e800420813b00088109000480e8001c398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002138dd0004919d00003ca002ac60a546ec90a600083c8002a06084c7ac90860004806700009066000038660000800d00287c0803a64e800021|@5110,1048575|776,3,@5109 788,3,@227 5109:S9|4e6f20616363657373 5110:S25|56414c55455f4f505328292e636f6465416363657373283229 5111:O2|@5112,@5105 5112:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@5113,1048575| 5113:S25|56414c55455f4f505328292e636f6465416363657373283129 5114:O2|@5116,@5115 5115:O10|@5119,@3566,@5105,@5164,@4720,@4721,@773,@5201,@5118,@2532 5116:C2,72|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e3001096fbfffc80c3000c80a30008808300048063000083180004801800007c0903a64e800420|@5117,1048575| 5117:S22|56414c55455f4f505328292e636f646556616c283129 5118:O6|@5213,@3566,@5115,@5227,@5212,@773 5119:C2,4940|7f2802a66339000239600054800d00187d6bd8107c0b004040a00010800d00247c0803a64e80002182f8000482d7000882b60068973bfffc971bfffc947bfffc949bfffc94bbfffc94dbfffc83150008801800007c0803a64e800021829b001082740004825300088232003480030008941bfffc807b000083110000801800007c0803a64e8000212803000141820038821b001481f0000481cf0008814e0034807b0000830a0008801800007c0803a64e800021813b00187d2803a63b7b00204e800020821b001481f0000481cf0008814e0038807b0000830a0000801800007c0803a64e8000212803000141820104813b00148109000480e8000880c70038807b000083060008801800007c0803a64e80002180a3000080850000832300048319000082fb000c3998ffff7eebc0385560f80140a20010800d00347c0803a64e8000217eccbc1141a3fff02c0400014082004c82bb001482950004827400043980000256c0f80140a20010800d00347c0803a64e8000217c6cb41141a3fff083130014833b0018801800007c0903a67f2803a63b7b00204e80042082bb00148295000482740004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092c300049083000083130018833b0018801800007c0903a67f2803a63b7b00204e800420813b00148109000480e8000880c70040807b000083060000801800007c0803a64e800021280300014182010880bb0014808500048064000883230040807b000083190008801800007c0803a64e800021831b001482f8000482d7000482b7000880030000941bfffc80030004941bfffc8016001c941bfffc807b0004831500d8801800007c0803a64e8000212803000141820018827b002082530004823200048291000048000040829b00208274000482530008807b0004831200e4801800007c0803a64e800021823b0020809b001883110008801800007c0803a64e8000213a830000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092830004821b000892030000831b0000833b0024801800007c0903a67f2803a63b7b002c4e80042080bb0014808500048064000883230030807b000083190000801800007c0803a64e8000212803000141820088831b001482f8000482d7000882b60030807b000083150008801800007c0803a64e800021829b0014827400048253001c398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a3d0004919d00003e0002ac62105be8921100083de002a061efc7ac91f1000481d2000091d1000038710000800d00287c0803a64e800021831b001482f8000482d7000882b6003c807b000083150008801800007c0803a64e800021829b001482740004825300088232005c947bfffc83110000801800007c0803a64e8000212803000141820314821b001881f0000481cf0008814e001c807b000c830a0000801800007c0803a64e800021280300014182002c813b00188109000480e8000880c7001c807b000c83060008801800007c0803a64e80002148000010811b0018812800184800007480bb001880850004806400088323001c807b000c83190000801800007c0803a64e800021280300014182003082fb001882d7000482b600088295001c807b000c83140008801800007c0803a64e8000213b030000480000183c6002a160630a30800d00287c0803a64e80002181380000827b00188253000482320018953bfffc8071000083110008801800007c0803a64e800021821b001c81f0000481cf0000947bfffc807b0010830e0004801800007c0803a64e800021831b0000801800007c0803a64e800021815b0020812a000481090018947bfffc8068000483080008801800007c0803a64e80002180fb002480c7000480a60000947bfffc807b001883050004801800007c0803a64e800021831b0000801800007c0803a64e800021809b00288324000483190000947bfffc80040014941bfffc807b002083180004801800007c0803a64e8000212c0300014082000c3ae000014800008880030000941bfffc80030004941bfffc807b0004831b0008801800007c0803a64e8000212803000141820034398000013bbdfff87c1df04040a00010800d001c7c0803a64e8000213afd0004919d000082db000492d7000048000028807b00003b7b0008800d00187c1b004040a00010800d00207c0803a64e8000214bffff743b7b000872eb000140820024829b00308077000083140010801800007c0803a64e8000213aa300004800000c3ea002a962b5fa40829b0030398000073bbdffe07c1df04040a00010800d001c7c0803a64e8000213a7d0004919d00003e4002ac62525c0092530000823b001492330018821b000c9213001481f4000491f3001081db000491d3000c92b300088154000c91530004812f0004810f002480090020941bfffc387300008308000c801800007c0803a64e800021831b0000833b0038801800007c0903a67f2803a63b7b00404e800420821b001881f0000481cf0008814e0060807b0000830a0000801800007c0803a64e80002128030001418201a4813b00188109000480e8000880c7001c807b000c83060000801800007c0803a64e80002128030001418200b0809b001880640004832300088319001c807b000c83180008801800007c0803a64e80002182fb001882d7000482b600088295002080030000941bfffc807b000083140000801800007c0803a64e800021280300014182004c827b001c825300048232000882110020807b000083100008801800007c0803a64e80002181e3000471eb00014082001081cf000080ae00044800002881db001c80ae00184800001c827b001c80b300184800001080bb001880a50018947bfffc809b001c398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00003f2002ac63395d289323000090a3000c830400049303000882e4000c92e3000482d8000482b800243a830000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003e6002ac62735e34926300009283000480160020941bfffc8315000c801800007c0803a64e800021831b0000833b0024801800007c0903a67f2803a63b7b002c4e800420813b00188109000480e8000880c70050807b000083060000801800007c0803a64e800021280300014182025080bb001880850004806400088323001c807b000c83190000801800007c0803a64e800021280300014182002c831b001882f8000482d7000882b6001c807b000c83150008801800007c0803a64e8000214800001082fb00188317001848000074829b001882740004825300088232001c807b000c83110000801800007c0803a64e800021280300014182003081fb001881cf0004814e0008812a001c807b000c83090008801800007c0803a64e8000213a030000480000183c6002a160630a30800d00287c0803a64e80002183100000811b001880e8000480c70000971bfffc80080014941bfffc807b001083060004801800007c0803a64e8000212c0300014082000c38a000014800008880030000941bfffc80030004941bfffc807b0004831b0008801800007c0803a64e8000212803000141820034398000013bbdfff87c1df04040a00010800d001c7c0803a64e80002138bd0004919d0000809b00049085000048000028807b00003b7b0008800d00187c1b004040a00010800d00207c0803a64e8000214bffff743b7b000870ab000140820020833b00208065000083190010801800007c0803a64e8000214800000c3c6002a96063fa40833b0020398000053bbdffe87c1df04040a00010800d001c7c0803a64e8000213b1d0004919d00003ee002ac62f75e9092f8000082d9000492d8001082bb000492b8000c907800088299000c92980004827600048256002480130020941bfffc387800008312000c801800007c0803a64e800021831b0000833b0028801800007c0903a67f2803a63b7b00304e80042080bb0018808500048064000883230054807b000083190000801800007c0803a64e80002128030001418201a0831b001882f8000482d7000882b6001c807b000c83150000801800007c0803a64e80002128030001418200b0827b001882530004823200088211001c807b000c83100008801800007c0803a64e80002181fb001881cf0004814e0008812a002080030000941bfffc807b000083090000801800007c0803a64e800021280300014182004c811b001c80e8000480c7000880a60020807b000083050008801800007c0803a64e80002180830004708b000140820010832400008299000448000028833b001c829900184800001c811b001c8288001848000010829b001882940018947bfffc827b001c398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213a5d0004919d00003e2002ac6231608492320000821300049212000c9292000881f3000c91f2000481d0000481500024398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003d2002ac612962789123000092430004800e0020941bfffc830a000c801800007c0803a64e800021831b0000833b0024801800007c0903a67f2803a63b7b002c4e800420831b001882f8000482d7000882b6004c807b000083150000801800007c0803a64e8000212803000141820540947bfffc947bfffc829b002082740004825300088232001c807b001483110000801800007c0803a64e8000212803000141820438821b002081f0000481cf0008814e001c807b0014830a0008801800007c0803a64e800021813b00208109000480e8000880c7001c80030000941bfffc807b000083060000801800007c0803a64e80002128030001418203a080bb002480850004806400088323001c807b000083190008801800007c0803a64e800021831b002482f8000482d7000882b6001c80030004941bfffc807b000083150000801800007c0803a64e800021280300014182030c829b002882740004825300088232001c807b000083110008801800007c0803a64e800021821b002881f0000481cf0008814e001c80030004941bfffc807b0000830a0000801800007c0803a64e800021280300014182027c813b002c8109000480e8000880c7001c807b000083060008801800007c0803a64e80002180bb002c80850004832400088319001c80030000941bfffc80030004941bfffc807b000083180000801800007c0803a64e80002128030001418201ec82fb003482d7000482b600088295001c807b000083140008801800007c0803a64e80002182630000825b0034823200048211000881f0002c967bfffc38730000830f0000801800007c0803a64e800021280300014182009c815b0038812a00048109000880e8002c807b000083070008801800007c0803a64e80002180db003880a600048085000883040078801800007c0803a64e800021833b00388319000482f8000882d70018947bfffc83160000801800007c0803a64e800021280300014182000c81db000448000030827b00003b7b0008800d00187c1b004040a00010800d00207c0803a64e8000214bffff3c81db0000947bfffc95dbfffc815b0010813b00408109000480e8000880c7002c955bfffc386a000083060000801800007c0803a64e800021280300014182009c809b004480640004832300088319002c807b000083180008801800007c0803a64e80002182fb004482d7000482b6000883150078801800007c0803a64e800021829b0044827400048253000882320018947bfffc83110000801800007c0803a64e800021280300014182000c80bb000448000030815b00003b7b0008800d00187c1b004040a00010800d00207c0803a64e8000214bffff3c80bb0000947bfffc389b0028807b0008906400003b3b002890b900044800012882fb00343adb001482b7001892b600003a9b001492b40004947bfffc947bfffc947bfffc947bfffc947bfffc480000f8813b002c391b000c80e9001890e8000038db000c90e60004947bfffc947bfffc947bfffc947bfffc947bfffc947bfffc947bfffc480000c0829b00283a7b000882540018925300003a3b000892510004947bfffc947bfffc947bfffc947bfffc947bfffc947bfffc947bfffc947bfffc4800008480bb0024389b000480650018906400003b3b000490790004947bfffc947bfffc947bfffc947bfffc947bfffc947bfffc947bfffc947bfffc947bfffc48000044821b002039fb000081d0001891cf0000395b000091ca0004947bfffc947bfffc947bfffc947bfffc947bfffc947bfffc947bfffc947bfffc947bfffc947bfffc813b0048398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021391d0004919d00003ce002ac60e762d090e8000080c9001c90c8001080bb002c90a8000c8089000490880008807b002890680004832400048304002480190020941bfffc386800008318000c801800007c0803a64e800021831b0000833b0050801800007c0903a67f2803a63b7b00584e800420829b0018827400048253000480120028941bfffc823b000c963bfffc821b0028961bfffc80db001880bb001c80940024807b002083140020801800007c0803a64e80002139e30000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00003dc0000061ce466891c3000c3940000391430008392000039123000491e30000831b0000833b0020801800007c0903a67f2803a63b7b00284e800420|@5163,1048575|928,3,@5120 940,3,@227 1240,3,@341 1672,3,@3564 1720,3,@5121 2152,3,@5123 2232,3,@5125 2528,3,@341 2780,3,@3564 2828,3,@5126 3244,3,@5130 3320,3,@5134 4664,3,@5135 4880,3,I48 5120:S16|636f646556616c202d20466f726d616c 5121:C2,224|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc947bfffc80180018941bfffc3860000183180014801800007c0803a64e800021833b00088319001082f800203ac30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082b9000c92a300043a80009b9283000096dbfffc83170010801800007c0803a64e800021827b000c82530008965bfffc38c3000080bb0004809b0008807b000c83130004801800007c0803a64e800021807b0008823b00107e2803a63b7b00144e800020|@5122,1048575| 5122:S34|56414c55455f4f505328292e636f646556616c2835297072696e7450726f63283129 5123:C2,196|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000882d700203aa30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000090a300043a80009b92830000973bfffc971bfffc96bbfffc949bfffc94dbfffc8018000c941bfffc83160010801800007c0803a64e800021827b0010825b0008823b0014925b001438c3000080bb0004809b0000807b000c831300043b310000801800007c0903a67f2803a63b7b00144e800420|@5124,1048575| 5124:S34|56414c55455f4f505328292e636f646556616c2835297072696e7450726f63283429 5125:C2,64|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180c3000c80a30008808300048063000083180004801800007c0903a64e800420|@5122,1048575| 5126:C2,248|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000213d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec0000062d6466892d7000082b80010829500203a630000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003e4002ac62525fa49243000092e30004973bfffc971bfffc967bfffc96fbfffc83140014801800007c0803a64e800021823b000882110008961bfffc38c3000038a04e218091000c807b000883110004801800007c0803a64e80002181fb0000806f000081db000c7dc803a63b7b00104e800020|@5129,1048575|72,3,I48 132,3,@5127 5127:C2,100|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d70000973bfffc96fbfffc38830000387600003c0002a1600074a87c0803a64e80002182bb00009075000038600001829b00047e8803a63b7b00084e800020|@5128,1048575|56,3,@511 5128:S41|56414c55455f4f505328292e636f646556616c2835296d616b65537472696e6728312970702d283129 5129:S35|56414c55455f4f505328292e636f646556616c2835296d616b65537472696e67283129 5130:C2,252|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000213d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e80002138bd0004919d00003ee0000062f7466892e5000082d8000c82b600203a830000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003e6002ac6273619c9263000090a30004973bfffc971bfffc969bfffc949bfffc94bbfffc83150014801800007c0803a64e800021825b000c823b0004963bfffc38c3000038a04e2180920008807b000c83120004801800007c0803a64e800021821b00008070000081fb00107de803a63b7b00144e800020|@5133,1048575|72,3,I48 132,3,@5131 5131:C2,100|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d70000973bfffc96fbfffc38830000387600003c0002a1600074a87c0803a64e80002182bb00009075000038600001829b00047e8803a63b7b00084e800020|@5132,1048575|56,3,@511 5132:S40|56414c55455f4f505328292e636f646556616c2835297072696e7450726f6328332970702d283129 5133:S34|56414c55455f4f505328292e636f646556616c2835297072696e7450726f63283329 5134:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@5122,1048575| 5135:C2,220|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021971bfffc398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002ac62d663c892d7000082d8000892d700089077000482b60010973bfffc96fbfffc80150000941bfffc807800043b1b000c3c0002ac6000652c7c0803a64e8000213a830000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000827b00049263000492830000831b0000833b0008801800007c0903a67f2803a63b7b00104e800420|@5162,1048575|72,3,@5136 124,3,@5138 5136:C2,276|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000882d70020973bfffc971bfffc947bfffc83160000801800007c0803a64e80002182bb00048295000882740020947bfffc807b000483130004801800007c0803a64e800021825b00088232000882110020947bfffc807b00088310000c801800007c0803a64e80002181fb000c81cf0008814e0020947bfffc807b000c830a0008801800007c0803a64e800021813b001039030000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00009103000c80fb000090e3000880db000490c3000480bb000890a3000083090004833b0014801800007c0903a67f2803a63b7b00184e800420|@5137,1048575| 5137:S42|56414c55455f4f505328292e636f646556616c283529696e7374616c6c50702831297070726f63283129 5138:C2,760|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000082d7000882b6000882950028973bfffc971bfffc947bfffc83140000801800007c0803a64e8000212803000141820294827b000482530000823200088211000881f00028807b0000830f0008801800007c0803a64e80002181db0004814e0000812a00088109000880030000941bfffc8063000883080010801800007c0803a64e80002180fb000880c7000080a6000880850008947bfffc83040088801800007c0803a64e800021833b000c8319000082f8000882d7000882b6001883150000801800007c0803a64e8000212803000141820188829b000c827400008253000882320008807b000083110090801800007c0803a64e800021821b00042c10000140820008480000fc81f000042c0f00014082003081db000c814e0000947bfffc808a000c807000003b1b00143c0002ac600068407c0803a64e800021480000c881db000c814e0000947bfffc806a000c830a0010801800007c0803a64e80002128030001408200183c6002ac60637254800d00287c0803a64e800021813b00108109000080e8000880c7000880a600208008000c941bfffc807b000083050000801800007c0803a64e8000212803000141820048809b001480640000832300088319000882f80020807b000083170008801800007c0803a64e80002180830004807b000c3b1b00183c0002ac600072847c0803a64e8000213b7b000448000008947bfffc81fb001081cf0000814e0008812a0008807b0000830900a4801800007c0803a64e80002128030001408200183c6002ac606373dc800d00287c0803a64e800021807b0000811b00147d0803a63b7b00184e800020829b000c82740000825300088232000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000821b00049203000481fb000091e300008311001c801800007c0803a64e800021831b000c833b00107f2803a63b7b00144bfffd283c6002ac60637418800d00287c0803a64e800021|@5161,1048575|336,3,@5139 396,3,@5151 524,3,@5153 596,3,@5157 740,3,@5159 5139:C2,2048|7f2802a66339000239600054800d00187d6bd8107c0b004040a00010800d00247c0803a64e80002182f8fffc82d7000082b60008829500088274001c973bfffc971bfffc947bfffc949bfffc3864000083130000801800007c0803a64e8000212803000141820788825b00088232fffc8211000081f0000881cf0008814e001c807b0000830a0008801800007c0803a64e80002181230000811b000880e8fffc80c7000080a60008808500088064002c953bfffc83230000386900003b190000801800007c0803a64e80002128030001418200b482fb000c82d7fffc82b6000082950008827400088253002c807b000083120008801800007c0803a64e800021823b000c8211fffc81f0000081cf0008814e0008830a0078801800007c0803a64e800021813b000c8109fffc80e8000080c7000880a6000880850018947bfffc83040000801800007c0803a64e800021280300014182000c831b000448000030813b00003b7b0008800d00187c1b004040a00010800d00207c0803a64e8000214bffff18831b0000947bfffc82fb001082d7fffc82b60000829500088274000882530020971bfffc3878000083120000801800007c0803a64e8000212803000141820618823b00148211fffc81f0000081cf0008814e0008812a0020807b000083090008801800007c0803a64e800021810300002c080003408205cc80e3000470eb0001408205ac80c7000080860000386000633f00000063184368801800007c0803a64e800021280300014182057080a7000470ab0001408205508085000080840000386000653f00000063184368801800007c0803a64e800021280300014182051480650000832500042c190001408204f0831b001482f8fffc82d7000082b600088295000c80060004941bfffc80030004941bfffc8014002c941bfffc827b001c825b00208232fffc8211000081f0000881cf0008814e002c967bfffc38730000830a0000801800007c0803a64e80002128030001418200b8811b002480e8fffc80c7000080a60008808500088064002c83230008807b00003b190000801800007c0803a64e800021831b002482f8fffc82d7000082b600088295000883140078801800007c0803a64e800021827b00248253fffc823200008211000881f0000881cf0018947bfffc830e0000801800007c0803a64e800021280300014182000c813b000448000030827b00003b7b0008800d00187c1b004040a00010800d00207c0803a64e8000214bffff18813b0000947bfffc953bfffc811b001480fb002c80c7fffc80a6000080850008806400088323002c951bfffc3868000083190000801800007c0803a64e80002128030001418200b482fb003082d7fffc82b6000082950008827400088253002c807b000083120008801800007c0803a64e800021823b00308211fffc81f0000081cf0008814e0008830a0078801800007c0803a64e800021813b00308109fffc80e8000080c7000880a6000880850018947bfffc83040000801800007c0803a64e800021280300014182000c831b000448000030811b00003b7b0008800d00187c1b004040a00010800d00207c0803a64e8000214bffff1c831b0000947bfffc398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000093030004831b000893030000831b0014801800007c0803a64e800021280300014182027882fb001882db003482b6fffc8295000082740008825300088232002c96fbfffc3877000083110000801800007c0803a64e80002128030001418200b481fb003881cffffc814e0000812a00088109000880e8002c807b000083070008801800007c0803a64e80002180db003880a6fffc80850000832400088319000883180078801800007c0803a64e80002182fb003882d7fffc82b60000829500088274000882530018947bfffc83120000801800007c0803a64e800021280300014182000c821b00044800003082fb00003b7b0008800d00187c1b004040a00010800d00207c0803a64e8000214bffff1c821b0000947bfffc81fb003c81cffffc814e0000812a00088109000880e80028961bfffc3870000083070000801800007c0803a64e800021280300014182013880db004080a6fffc80850000806400088323000883190028807b000083180008801800007c0803a64e80002182e300002c170001408200ec82db004082b6fffc8295000082740008825300088012000c941bfffc80120090941bfffc8063000883120010801800007c0803a64e800021831b0000801800007c0803a64e800021823b00488211fffc81f0000081cf0008814e0008947bfffc806a00ac830a0090801800007c0803a64e80002139230000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000091230004811b000091030000831b0008801800007c0803a64e80002128030001418200183860000180fb00507ce803a63b7b00544e8000203c6002ac6063705c800d00287c0803a64e8000213c6002ac606370b8800d00287c0803a64e8000213c6002ac606370b8800d00287c0803a64e8000213c6002ac60637118800d00287c0803a64e8000213c6002ac6063716c800d00287c0803a64e8000213c6002ac6063716c800d00287c0803a64e8000213c6002ac6063716c800d00287c0803a64e8000213c6002ac6063716c800d00287c0803a64e8000213c6002ac6063716c800d00287c0803a64e8000213c6002ac6063716c800d00287c0803a64e8000213c6002ac6063716c800d00287c0803a64e8000213c6002ac606371bc800d00287c0803a64e800021|@5150,1048575|532,3,I24 584,3,I24 1808,3,@5140 1828,3,@5142 1848,3,@5142 1868,3,@5144 1888,3,@5146 1908,3,@5146 1928,3,@5146 1948,3,@5146 1968,3,@5146 1988,3,@5146 2008,3,@5146 2028,3,@5148 5140:O3|103,@327,@5141 5141:S65|417267756d656e74207072696e746572206d757374206861766520747970652027612a696e742d3e756e697420287365636f6e6420617267206e6f7420696e7429 5142:O3|103,@327,@5143 5143:S70|417267756d656e74207072696e746572206d757374206861766520747970652027612a696e742d3e756e697420287365636f6e6420617267206e6f74207479706520696e7429 5144:O3|103,@327,@5145 5145:S60|417267756d656e74207072696e746572206d757374206861766520747970652027612a696e742d3e756e697420286d69736d61746368656420276129 5146:O3|103,@327,@5147 5147:S55|417267756d656e74207072696e746572206d757374206861766520747970652027612a696e742d3e756e697420286e6f74207061697229 5148:O3|103,@327,@5149 5149:S59|417267756d656e74207072696e746572206d757374206861766520747970652027612a696e742d3e756e697420286e6f742066756e6374696f6e29 5150:S59|56414c55455f4f505328292e636f646556616c283529696e7374616c6c5070283129666f6c6c6f775479706573283129636865636b46756e283229 5151:O3|103,@327,@5152 5152:S24|417267756d656e74206d7573742062652061207475706c65 5153:C2,192|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082002c2c0400014082000c386000014e800020973bfffc3c6002ac60637360800d00287c0803a64e800021708b00014082005482e40000973bfffc971bfffc80030004941bfffc80040004941bfffc80970004806300003c0002ac600068407c0803a64e800021809b0000807b0004831b0008833b000c7f2803a63b7b00104bffff64973bfffc3c6002ac60637360800d00287c0803a64e800021|@5156,1048575|60,3,@5154 124,3,@5139 172,3,@5154 5154:O3|103,@327,@5155 5155:S30|5475706c652073697a6520646f6573206e6f74206d617463682074797065 5156:S60|56414c55455f4f505328292e636f646556616c283529696e7374616c6c5070283129666f6c6c6f775479706573283129636865636b46756e73283229 5157:O3|103,@327,@5158 5158:S36|496e76616c6964207479706520286e6f74206672656520617420746f702d6c6576656c29 5159:O3|103,@327,@5160 5160:S38|496e76616c6964207479706520286e6f742061207479706520636f6e737472756374696f6e29 5161:S48|56414c55455f4f505328292e636f646556616c283529696e7374616c6c5070283129666f6c6c6f775479706573283129 5162:S34|56414c55455f4f505328292e636f646556616c283529696e7374616c6c5070283129 5163:S22|56414c55455f4f505328292e636f646556616c283529 5164:O4|@5166,@3566,@5201,@5165 5165:O2|@5204,@3566 5166:C2,272|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002ac62d6762892d7000082db000092d7000882b8000c92b70004398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a9d0004919d00003e6002ac627377f09274000090d400088278000492740004398000073bbdffe07c1df04040a00010800d001c7c0803a64e8000213a5d0004919d00003e2002ac62317ca492320000823600289232001882180008921200149292001092f2000c9272000890d2000439e0000195fb000038c0ffff39d800003b120000801800007c0903a67f2803a64e800420|@5200,1048575|68,3,@5167 132,3,@5169 192,3,@5171 5167:C2,376|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f80008973bfffc971bfffc947bfffc3860000183170008801800007c0803a64e80002182db000482b60008947bfffc3860000183150020801800007c0803a64e800021947bfffc3a800001827b00042c1300014082000c3a5400004800005c82330000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a1d0004919d00009290000481f1000491f00000827300043a900000800d00187c1b004040a00010800d00207c0803a64e8000214bffff9c965bfffc3a200001821b00042c1000014082000c39f100004800005c81d00000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021395d0004919d0000922a0004812e0004912a0000821000043a2a0000800d00187c1b004040a00010800d00207c0803a64e8000214bffff9c81db001038af0000809b0000807b000c830e0004833b0014801800007c0903a67f2803a63b7b00184e800420|@5168,1048575| 5168:S44|56414c55455f4f505328292e7072696e74537472756374283529657863657074696f6e536561726368283129 5169:C2,1132|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c06000140820010386000013b7b00104e80002082e600042c1700014082016c2c040001408200603ac30000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d000082bb000492a3000c829b000092830008826600009263000490a300003b160000801800007c0903a67f2803a63b7b00104e80042082d8000482b60024973bfffc971bfffc947bfffc949bfffc80060000941bfffc3865000083150014801800007c0803a64e800021829b000c8274000482530024947bfffc80120020941bfffc807b000c83120010801800007c0803a64e8000213a230000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092230004821b000492030000831b0000801800007c0803a64e80002139e30000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d000081db002091c3000c815b001c91430008813b00089123000491e30000831b0010833b0018801800007c0903a67f2803a63b7b002c4e80042082db000056cbf80140a20010800d00347c0803a64e8000212c1600014181004c82b8000482950020973bfffc8078000883140000801800007c0803a64e8000213a6300003c6002aa6063f9243b130000833b0000801800007c0903a67f2803a63b7b00144e80042082b8000482950024973bfffc971bfffc947bfffc949bfffc94bbfffc96fbfffc80060000941bfffc3865000083140014801800007c0803a64e800021827b00148253000482320024947bfffc80110020941bfffc807b001483110010801800007c0803a64e8000213a030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00009203000481fb000491e30000831b0000801800007c0803a64e80002139c30000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d0000815b002c9143000c813b002491230008811b00089103000491c30000831b0018801800007c0803a64e80002138800059807b00303f00000063184368801800007c0803a64e800021280300014082004080fb001c80c7000480a60020806700088305000c801800007c0803a64e800021388300003c6002a06063ee143b040000801800007c0803a64e80002180fb001c80c7000480a600208067000883050000801800007c0803a64e80002138830000807b00303b040000801800007c0803a64e800021807b001c8323000483190020806300088318000c801800007c0803a64e8000213ae300003c6002a06063ee143b170000801800007c0803a64e80002182db00143980000256c0f80140a20010800d00347c0803a64e8000217eb6661541a3fff0829b0024398000025680f80140a20010800d00347c0803a64e8000217e6ca41141a3fff0825b0030823b002c821b0028925b0030923b002c921b0028927b002480db000c80bb001038950000807b0018831b001c833b00207f2803a63b7b00244bfffba0|@5170,1048575|492,3,@4530 792,3,I24 856,3,@265 972,3,@265 5170:S33|56414c55455f4f505328292e7072696e7453747275637428352970566563283829 5171:C2,4104|7f2802a66339000239600058800d00187d6bd8107c0b004040a00010800d00247c0803a64e800021971bfffc94dbfffc94bbfffc947bfffc973bfffc949bfffc82fb00182c1700014082000c3ac000014800009482bb00148295000882740024398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008257000092430004823b00089223000080170004941bfffc83130000801800007c0803a64e800021280300014182000c3ac000034800002882fb00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffff683b7b0004281600014182004c821b001481f0000881cf002080700004830e0000801800007c0803a64e800021394300003c6002aa6063f9243b0a0000833b0004801800007c0903a67f2803a63b7b001c4e800420821b001481f0000881cf0008814e002c807b0000830a0000801800007c0803a64e80002128030001418200e0813b00148109000880e8000880c7002c807b000083060008801800007c0803a64e80002180bb0014808500088324000883190078801800007c0803a64e800021831b001482f8000882d7000882b60018947bfffc83150000801800007c0803a64e8000212803000141820048829b001882740008825300208074000483120000801800007c0803a64e8000213a2300003860007f3b110000833b0008801800007c0903a67f2803a63b7b00204e800420829b001c929b001c80db001480bb0010809b0000807b000c831b0018833b00087f2803a63b7b001c4bfffdd0813b00148109000880e8000880c70028807b000083060000801800007c0803a64e80002128030001418208c080bb0014808500088064000883230028807b000083190008801800007c0803a64e800021831b001482f8000882d7000880030000941bfffc8063000883160010801800007c0803a64e80002182bb00188295000882740008947bfffc80130008941bfffc83130090801800007c0803a64e800021831b0000801800007c0803a64e8000212803000141820048825b002082320008821100208072000483100000801800007c0803a64e80002139e300003860007f3b0f0000833b0010801800007c0903a67f2803a63b7b00284e800420825b002082320008821100088010000c941bfffc807b000883100090801800007c0803a64e80002181fb002481cf0008814e0008947bfffc806a00c0830a0090801800007c0803a64e80002139230000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000091230004811b000091030000831b0004801800007c0803a64e800021280300014182004c80fb002880c7000880a600208067000483050000801800007c0803a64e800021388300003c6002ac60638cc83b040000833b0018801800007c0903a67f2803a63b7b00304e80042080fb002880c7000880a600088005000c941bfffc807b001083050090801800007c0803a64e800021809b002c8324000883190008947bfffc807800c483180090801800007c0803a64e8000213ae30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092e3000482db000092c30000831b0004801800007c0803a64e80002128030001418202f882bb00308295000882740024807b002483130004801800007c0803a64e800021825b00308232000882110024947bfffc80100004941bfffc80100020941bfffc83100014801800007c0803a64e80002139e30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000039c0000391c3000491e30000831b0000801800007c0803a64e800021831b0004801800007c0803a64e800021815b003c812a000881090024947bfffc800a000c941bfffc80080020941bfffc807b001483080014801800007c0803a64e80002138e30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000038c0000190c3000490e30000831b0000801800007c0803a64e800021831b0004801800007c0803a64e800021706b00014082018080bb00488085000883240008806300008319010c801800007c0803a64e800021831b004882f8000882d7000882b60018947bfffc83150000801800007c0803a64e8000212803000141820048829b004c82740008825300208074000483120000801800007c0803a64e8000213a230000807b000c3b110000833b003c801800007c0903a67f2803a63b7b00544e800420829b004c827400088253002480120004941bfffc80120020941bfffc807b002083120014801800007c0803a64e8000213a230000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003a0000059203000492230000831b0000801800007c0803a64e800021831b0004801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002139fd0004919d000081db005891cf0004815b0048914f000038cf000038a30000809b0008807b00143b1b00543c0002ac60008cd47c0803a64e800021813b00447d2803a63b7b005c4e80002080bb0048808500088064002083230000806500043b190000801800007c0803a64e8000213b030000807b0008833b0038801800007c0903a67f2803a63b7b00504e800420829b00182c14000140820018827b0030825300088232000482b10008480000e0827400042c13000140820090825b0030823200088211000481f10024398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d00003dc002ac61ce9ac091c300008154000091430010813b00249123000c811b0034910300089243000480100020941bfffc830f000c801800007c0803a64e800021831b0000801800007c0803a64e8000213aa3000048000044825b0030823200088211000480100010941bfffc387400003b1b00343c0002ac60009b987c0803a64e800021831b0000801800007c0803a64e8000213aa300003b7b000497fbfffc3de002ac61ef863695fbfffc39c0001795dbfffc3bfb0000815b003c812a00088109001080e9000896bbfffc80080004941bfffc807b002883070090801800007c0803a64e800021831b0000801800007c0803a64e80002180db004438a30000806600043b050000801800007c0803a64e80002138830000807b003c3b040000801800007c0803a64e800021833b00448319000882f80004947bfffc807b000883170064801800007c0803a64e800021831b0000801800007c0803a64e8000213ac30000807b003c3b160000801800007c0803a64e80002183fb001482bb00387ea803a63b7b00504e800020828300002c14001740820180827b00308253000882320008947bfffc807b00188311008c801800007c0803a64e800021280300014182004c821b003481f0000881cf0008807b0018830e008c801800007c0803a64e800021809b001c3b1b00343c0002ac60009d647c0803a64e800021815b00247d4803a63b7b003c4e800020821b003481f0000881cf0008807b0018830e0088801800007c0803a64e800021815b0034812a00088109000880e8001883070000801800007c0803a64e800021280300014082008080db003480a600088085000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000833b001c93230004831b0018930300008304001c801800007c0803a64e80002182fb003892fb003880db003080bb002c38830000807b0028831b0034833b00247f2803a63b7b00384bfff53880db003480a60008808500208066000483040000801800007c0803a64e8000213b2300003860007f3b190000833b0024801800007c0903a67f2803a63b7b003c4e800420800d00287c0803a64e80002180bb001480850008806400088323001c807b000083190000801800007c0803a64e8000212803000141820070831b001482f8000882d7000882b6001c807b000083150008801800007c0803a64e800021829b001482740008825300208074000483120000801800007c0803a64e8000213a2300003c6002a7606342343b110000833b0004801800007c0903a67f2803a63b7b001c4e800420831b001482f8000882d7000882b60020807b000083150000801800007c0803a64e80002128030001418203dc829b0014827400088253000882320020807b000083110008801800007c0803a64e800021821b000c560bf80140a20010800d00347c0803a64e8000212c1000014181004c81fb001481cf0008814e0020806f0004830a0000801800007c0803a64e800021392300003c6002aa6063f9243b090000833b0004801800007c0903a67f2803a63b7b001c4e80042081fb001480030004941bfffc807b0004830f0014801800007c0803a64e800021280300014182017081db0018814e0008812a0020806e000483090004801800007c0803a64e800021390300003c6002aa6063e6a03b080000801800007c0803a64e80002180fb001880c7000880a600208067000483050000801800007c0803a64e80002138830000386000513b040000801800007c0803a64e800021398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003f2002ac6339a38893230000831b001c9303000882fb001892e300043ac0005996dbfffc3aa0ffff96bbfffc3a80ffff969bfffc827b001c967bfffc80db001080bb001c3880000183170010801800007c0803a64e800021825b001882320008821100208072000483100000801800007c0803a64e80002139e30000386000533b0f0000801800007c0803a64e80002181db0018814e0008812a0020806e000483090008801800007c0803a64e80002139030000386000013b080000833b0008801800007c0903a67f2803a63b7b00204e80042081db0018814e0008812a0020806e000483090004801800007c0803a64e800021390300003c6002aa6063e6a03b080000801800007c0803a64e80002180fb001880c7000880a600208067000483050000801800007c0803a64e80002138830000386000f73b040000801800007c0803a64e800021807b0018398000053bbdffe87c1df04040a00010800d001c7c0803a64e8000213b3d0004919d00003f0002ac6318a4209319000082fb001c92f900109079000c82c3000892d9000882a3000492b90004398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a9d0004919d00003e6002ac6273a60492740000933400043a400059965bfffc3a20ffff963bfffc3a00ffff961bfffc81fb001c95fbfffc80db001080bb001c3880000181c30010387400003b0e0000801800007c0803a64e800021815b0018812a000881090020806a000483080000801800007c0803a64e80002138e30000386000fb3b070000801800007c0803a64e80002180db001880a60008808500208066000483040008801800007c0803a64e8000213b230000386000013b190000833b0008801800007c0903a67f2803a63b7b00204e800420829b001482740008825300208074000483120000801800007c0803a64e8000213a2300003c6002ac6063a6603b110000833b0004801800007c0903a67f2803a63b7b001c4e800420|@5199,1048575|272,3,@4530 1012,3,@5172 1856,3,@5173 2052,3,@5186 2168,3,@5188 2212,3,$5171+2450 2544,3,@5190 2968,3,@2771 3152,3,@4530 3264,3,@4521 3380,3,@5193 3628,3,@4521 3748,3,@5195 3824,3,@5197 4068,3,@5198 5172:S2|2829 5173:C2,1520|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f80000973bfffc971bfffc947bfffc949bfffc94bbfffc94dbfffc83170018801800007c0803a64e80002182db001082b60000829500088274000882530118706b00014082000c82230000480000088232000482140020963bfffc8075000483100004801800007c0803a64e80002139e300003c6002a66063e9d83b0f0000801800007c0803a64e80002181db0014814e0000812a00088109000880e80110807b000083070000801800007c0803a64e800021280300014182024480db001480a60000808500088064000883230110807b000083190008801800007c0803a64e800021831b001482f8000082d7000882b6000882950020947bfffc807b001083140000801800007c0803a64e80002128030001418201d0827b001882530000823200088211000881f00020807b0010830f0008801800007c0803a64e80002181c3000471cb000140820184814e0000808a0000386000633f00000063184368801800007c0803a64e8000212803000141820144812e0004712b0001408201208109000080880000386000653f00000063184368801800007c0803a64e80002128030001418200e080e900042c070001408200bc80db001880bb00008086fffc7cab2038556bf80140a20010800d00347c0803a64e8000217c0520004080000c38600003480000083860000183260000398000083bbdffdc7c1df04040a00010800d001c7c0803a64e8000213b1d0004919d00003ee002ac62f792e092f8000082db000c92d8001c91d8001882bb001492b8001490b80010829b00089298000c93380008827900109278000438830000387800003b1b001c3c0002ac600094a07c0803a64e800021480003203b1b001c3c0002ac600096887c0803a64e800021480003083b1b001c3c0002ac600096887c0803a64e800021480002f03b1b001c3c0002ac600096887c0803a64e800021480002d83b1b001c3c0002ac600096887c0803a64e800021480002c03b1b001c3c0002ac600096887c0803a64e800021480002a83b1b001c3c0002ac600096887c0803a64e8000214800029080db001480a60000808500088064000883230114807b000083190000801800007c0803a64e8000212803000141820248831b001482f8000082d7000882b6000882950114807b000083140008801800007c0803a64e800021827b001482530000823200088211000881f00020947bfffc807b0010830f0000801800007c0803a64e80002128030001418201d481db0018814e0000812a00088109000880e80020807b001083070008801800007c0803a64e80002180c3000470cb00014082018880a6000080850000386000633f00000063184368801800007c0803a64e800021280300014182014880860004708b0001408201248064000080830000386000653f00000063184368801800007c0803a64e80002128030001418200e483260004831900042c180001408200bc82fb001882db000082b7fffc7ecba838556bf80140a20010800d00347c0803a64e8000217c16a8004080000c3a800003480000083a80000182770000398000083bbdffdc7c1df04040a00010800d001c7c0803a64e8000213a5d0004919d00003e2002ac6231994492320000821b000c9212001c90d2001881fb001491f2001492d2001081db000891d2000c92720008815300109152000438940000387200003b1b001c3c0002ac600094a07c0803a64e800021480000ac3b1b001c3c0002ac600096887c0803a64e800021480000943b1b001c3c0002ac600096887c0803a64e8000214800007c3b1b001c3c0002ac600096887c0803a64e800021480000643b1b001c3c0002ac600096887c0803a64e8000214800004c3b1b001c3c0002ac600096887c0803a64e800021480000343b1b001c3c0002ac600096887c0803a64e8000214800001c3b1b00183c0002ac600096887c0803a64e800021947bfffc831b001882f8000082d7000882b600208077000483150008801800007c0803a64e8000213a830000386000013b140000833b001c801800007c0903a67f2803a63b7b00204e800420|@5185,1048575|148,3,@2419 376,3,I24 428,3,I24 564,3,@5174 632,3,@5178 656,3,@5180 680,3,@5180 704,3,@5180 728,3,@5180 752,3,@5180 776,3,@5180 1000,3,I24 1052,3,I24 1192,3,@5183 1260,3,@5178 1284,3,@5180 1308,3,@5180 1332,3,@5180 1356,3,@5180 1380,3,@5180 1404,3,@5180 1428,3,@5180 5174:C2,188|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f800103980000256e0f80140a20010800d00347c0803a64e8000217ed7661541a3fff0398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003e8002ac629493b8929500008298000c92950008827800089275000482580014965bfffc96fbfffc96dbfffc947bfffc80d8001880b8001c388000013875000083180004801800007c0903a67f2803a64e800420|@5177,1048575|104,3,@5175 5175:C2,76|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e3000482d8000896dbfffc80c3000c80a30008809700048063000083180004801800007c0903a64e800420|@5176,1048575| 5176:S56|56414c55455f4f505328292e7072696e745374727563742835297072696e74732835297072696e74496e6669786564283429283129283129 5177:S53|56414c55455f4f505328292e7072696e745374727563742835297072696e74732835297072696e74496e6669786564283429283129 5178:C2,384|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c040003408201408098fffc82e4fff856ebf80140a20010800d00347c0803a64e8000212c1700034181005082c4000082b6000882950020973bfffc8076000483140000801800007c0803a64e8000213a6300003c6002aa6063f9243b130000833b0000801800007c0903a67f2803a63b7b00044e80042082c4000082b6000882950020973bfffc971bfffc947bfffc8076000483140000801800007c0803a64e8000213a630000386000513b130000801800007c0803a64e800021825b00048232fffc8211fff8398000025600f80140a20010800d00347c0803a64e8000217c6c841141a3fff0831b0000801800007c0803a64e80002181fb000481cffffc814e0000812a000881090020806a000483080000801800007c0803a64e80002138e30000386000533b070000833b0008801800007c0903a67f2803a63b7b000c4e80042082f8fffc3ac300008077fff83b160000801800007c0903a64e800420|@5179,1048575|116,3,@4530 5179:S68|56414c55455f4f505328292e7072696e745374727563742835297072696e74732835297072696e74496e66697865642834296d6179506172656e74686573697365283229 5180:C2,200|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8fffc82d7fffc2c1607cf4082000c3aa00003480000083aa0000182970000398000093bbdffd87c1df04040a00010800d001c7c0803a64e8000213a7d0004919d00003e4002ac6252976c925300008258ffe8925300208238fff89233001c821400089213001881f4000491f3001481d8fff091d300108158fff49153000c8138ffec913300089293000438950000387300003c0002ac600094a07c0903a67f2803a64e800420|@5182,1048575|100,3,@5181 180,3,@5178 5181:C2,384|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8001882d7000882b60118973bfffc971bfffc947bfffc8078002083150000801800007c0803a64e80002128030001418200084800007c829b000482740018825300208074001483120000801800007c0803a64e8000213a2300003c6002a7606343183b110000801800007c0803a64e800021821b000481f0001881cf002080700014830e000c801800007c0803a64e800021394300003c6002a06063ee143b0a0000801800007c0803a64e800021813b00048109001880e800208069001483070000801800007c0803a64e80002180db000438a300008066001c3b050000801800007c0803a64e800021809b00048064001883230020806400148319000c801800007c0803a64e8000213b0300003c6002a06063ee14801800007c0803a64e80002182fb000482d7000882bb000892db000838c007cf80bb00008097000c80770010831700043b350000801800007c0903a67f2803a63b7b00084e800420|@5177,1048575|124,3,@2789 184,3,@265 304,3,@265 5182:S52|56414c55455f4f505328292e7072696e745374727563742835297072696e74732835297072696e74496e66697865642834292f33 5183:C2,188|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f800103980000256e0f80140a20010800d00347c0803a64e8000217ed7661541a3fff0398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003e8002ac62949a1c929500008298000c92950008827800089275000482580014965bfffc96dbfffc96fbfffc947bfffc80d8001880b8001c388000013875000083180004801800007c0903a67f2803a64e800420|@5177,1048575|104,3,@5184 5184:C2,76|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e3000482d8000896dbfffc80c3000c80a30008809700048063000083180004801800007c0903a64e800420|@5176,1048575| 5185:S50|56414c55455f4f505328292e7072696e745374727563742835297072696e74732835297072696e74496e6669786564283429 5186:C2,124|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213afd0004919d000082d8000892d7000482b8000c92b7000096fbfffc38c0ffff80a30004809800108063000083180004801800007c0903a67f2803a64e800420|@5187,1048575| 5187:S56|56414c55455f4f505328292e7072696e745374727563742835297072696e74732835296d616b654172672831297072696e74417267283129 5188:C2,280|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e80002082f8000082d7000882b60004829600248263000082430004398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d00003e2002ac62319ccc92230000926300108218fff49203000c81f8000491e3000892e30004973bfffc971bfffc965bfffc80150020941bfffc8314000c801800007c0803a64e800021831b0000801800007c0803a64e800021947bfffc807b0008831b000c4bffff31398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002139dd0004919d0000906e0004815b0000914e0000386e0000813b00107d2803a63b7b00144e800020|@234,1048575|108,3,@5189 5189:C2,124|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213afd0004919d000082d8000892d7000482b8000c92b7000096fbfffc38c0ffff80a30004809800108063000083180004801800007c0903a67f2803a64e800420|@5187,1048575| 5190:C2,1460|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c03000140820068973bfffc809800008064000882e3001c398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002ac62b5a33492b600083ea002a062b5c7ac92b6000482b7000092b6000038760000800d00287c0803a64e80002182f8000082d7000882b6000882950068973bfffc971bfffc947bfffc949bfffc8063000083140008801800007c0803a64e800021827b000882530000823200088211000881f0006c947bfffc80030004941bfffc807b0000830f0000801800007c0803a64e800021280300014182047481db0010814e0000812a00088109000880e8006c807b000083070008801800007c0803a64e80002180db000480bb001080850000832400088319000882f80034947bfffc80060008941bfffc807b000083170000801800007c0803a64e80002128030001418203c482db001882b60000829500088274000882530034807b000083120008801800007c0803a64e800021823b000c821b001481fb001881cf0000814e0008812a0024810a000480110000941bfffc8011000c941bfffc80100004941bfffc80090014941bfffc83080064801800007c0803a64e800021831b0000801800007c0803a64e80002180fb002880c7000080a60008808500243b230000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003b0000019303000493230000973bfffc83040020801800007c0803a64e80002182fb002c82d7000082b600088295002483140004801800007c0803a64e800021827b002c3a4300008073fff43b120000801800007c0803a64e8000212803000140820020809b0024807b0008831b002c833b00307f2803a63b7b00344bfffd6c823b0018281100014182004c821b002c81f0000081cf0008814e0020806f0004830a0000801800007c0803a64e80002139230000807b00103b090000833b0030801800007c0903a67f2803a63b7b00344e800420821b002c81f0fff855ebf80140a20010800d00347c0803a64e8000212c0f00014181004c81d00000814e0008812a0020806e000483090000801800007c0803a64e800021390300003c6002aa6063f9243b080000833b0030801800007c0903a67f2803a63b7b00344e80042081d00000814e0008812a0024398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000390000059103000480fb000090e3000083090020801800007c0803a64e80002180db002c80a60000808500088324002483190004801800007c0803a64e800021831b002c3ae300008078fff43b170000801800007c0803a64e80002182db002c82b60000829500088274000c3a430000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000823b002492230004821b000c92030000965bfffc83130020801800007c0803a64e80002181fb003081cf0000814e0008812a002439030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080effff490e3000480db000090c30000951bfffc83090000801800007c0803a64e8000212803000141820010809b003480a400044800004080bb0034398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021389d0004919d000080650004906400048325fff49324000038a4000038c5000080bb0004809b0000807b0018831b0034833b00383c0002ac60008cd47c0903a67f2803a63b7b003c4e80042082db001882b6000082950008827400208075000483130000801800007c0803a64e8000213a4300003860007f3b120000833b001c801800007c0903a67f2803a63b7b00204e80042081db0010814e0000812a000881090020806a000483080000801800007c0803a64e80002138e300003860007f3b070000833b0014801800007c0903a67f2803a63b7b00184e800420|@5192,1048575|92,3,@5191 104,3,@227 828,3,@4530 1292,3,@5173 5191:S12|6e6f6e65206d617463686573 5192:S55|56414c55455f4f505328292e7072696e745374727563742835297072696e74732835297072696e74436f6e737472756374696f6e283229 5193:C2,76|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e3000482d8000896dbfffc80c3000c80a30008809700048063000083180004801800007c0903a64e800420|@5194,1048575| 5194:S38|56414c55455f4f505328292e7072696e745374727563742835297072696e7473283529283129 5195:C2,408|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000882d70020973bfffc971bfffc947bfffc94bbfffc80040000941bfffc80040004941bfffc8078000483160004801800007c0803a64e8000213aa300003c6002a16063f6583b150000801800007c0803a64e800021829b001082740008825300208074000483120000801800007c0803a64e800021947bfffc3c8002ab60843004807b00083c0002a1600074a87c0803a64e800021831b0000801800007c0803a64e800021823b00148211000881f0002080710004830f000c801800007c0803a64e80002139c300003c6002a06063ee143b0e0000801800007c0803a64e800021815b000c398000025540f80140a20010800d00347c0803a64e8000217d2c541141a3fff0811b001480e8001094fbfffc38c0ffff38a90000809b0008807b00148308000c801800007c0803a64e80002180db001480a60008808500208066000483040008801800007c0803a64e8000213b230000386000013b190000833b0018801800007c0903a67f2803a63b7b001c4e800420|@5196,1048575|96,3,@711 156,3,@4610 168,3,@511 236,3,@265 5196:S38|56414c55455f4f505328292e7072696e745374727563742835297072696e7473283529283429 5197:C2,64|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180c3000c80a30008808300048063000083180004801800007c0903a64e800420|@5194,1048575| 5198:S7|3c656d7074793e 5199:S35|56414c55455f4f505328292e7072696e745374727563742835297072696e7473283529 5200:S26|56414c55455f4f505328292e7072696e74537472756374283529 5201:O2|@5202,@3566 5202:C2,384|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7000882b60020973bfffc971bfffc947bfffc83150000801800007c0803a64e8000212803000141820120829b0004827400048253000882320020807b000083110008801800007c0803a64e800021820300002c100003408200dc39e0000381c300042c0e00014082001838600003815b00087d4803a63b7b000c4e800020814e000095fbfffc800a0000941bfffc800e0004941bfffc3880ffff386f00003c0002a06000fe6c7c0803a64e80002138830000807b00043f00000063184368801800007c0803a64e8000212803000141820050813b0008398000025520f80140a20010800d00347c0803a64e8000217d09661541a3fff081db000039e800003b7b000c800d00187c1b004040a00010800d00207c0803a64e8000214bffff4838600001813b00147d2803a63b7b00184e8000203860000181fb00087de803a63b7b000c4e80002038600001829b00087e8803a63b7b000c4e800020|@5203,1048575|196,3,@316 220,3,I24 5203:S28|56414c55455f4f505328292e697350726f6475637454797065283129 5204:C2,592|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc971bfffc82f8000482d70024973bfffc949bfffc94bbfffc386000018316000c801800007c0803a64e800021947bfffc82bb00082c1500014082000c3a8000014800005c80150004941bfffc809b0004807500003b1b00183c0002ac6000aaf87c0803a64e8000212c0300014082002882bb00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffffa43a8300003b7b0004728b00014082001838740000827b000c7e6803a63b7b00184e800020827b00042c1300014082001838600001825b000c7e4803a63b7b00184e800020825b0010823200048211000880130000941bfffc80130004941bfffc807b0004831000e4801800007c0803a64e80002181fb001881cf0004814e0008812a0034947bfffc83090000801800007c0803a64e80002128030001418200ac80fb001c80c7000480a6000880850034807b000083040008801800007c0803a64e800021833b001c8319000482f80008947bfffc80170004941bfffc807b0010831700dc801800007c0803a64e800021831b0000801800007c0803a64e80002182db002482b6000482950004947bfffc807b000883140064801800007c0803a64e80002138830000807b00003b1b002c3c0002ac6000aebc7c0803a64e800021390300004800001439000001947bfffc947bfffc947bfffc2c08000140820028827b00103b7b0018800d00187c1b004040a00010800d00207c0803a64e8000214bfffea838680000811b00247d0803a63b7b00304e800020|@5211,1048575|124,3,@5205 488,3,@5207 5205:C2,888|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8fffc82d7000482b6000882950068973bfffc971bfffc947bfffc949bfffc83140008801800007c0803a64e800021827b00088253fffc823200048211000881f00070947bfffc80630004830f0000801800007c0803a64e80002128030001418202e481db0000815b000c812afffc8109000480e8000880c70034800e0008941bfffc807b000083060000801800007c0803a64e80002128030001418200f880bb00108085fffc806400048323000883190034807b000083180008801800007c0803a64e80002182fb001082d7fffc82b60004829500248275000480140000941bfffc83130064801800007c0803a64e800021825b00143a230000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000821200009203000492230000831b0000801800007c0803a64e8000212803000141820040398000013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d000081fb001091e3000081db00187dc803a63b7b001c4e8000203860000181fb00187de803a63b7b001c4e80002080bb00108085fffc806400048323000883190030807b000083180000801800007c0803a64e800021280300014182017082fb001082d7fffc82b600048295000882740030807b000083130008801800007c0803a64e800021825b00108232fffc8211000481f00024947bfffc800f0000941bfffc800f0020941bfffc807b0014830f0014801800007c0803a64e80002181db001c814efffc812a000481090024947bfffc807b000c83080010801800007c0803a64e80002138e30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000090e3000480db000090c30000831b0004801800007c0803a64e80002180bb002038830000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000832500009323000490830000831b0008801800007c0803a64e8000212803000141820040398000013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d0000831b001c9303000082fb00247ee803a63b7b00284e80002038600001831b00247f0803a63b7b00284e8000203860000182fb00147ee803a63b7b00184e8000203860000181db00107dc803a63b7b00144e800020|@5206,1048575| 5206:S40|56414c55455f4f505328292e66696e64457863657074696f6e2833297465737456616c7565283229 5207:C2,228|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8fffc82d7000482b6001c82960014973bfffc971bfffc949bfffc8015000c941bfffc83140000801800007c0803a64e800021831b0000801800007c0803a64e8000212c0300014082001838600001827b000c7e6803a63b7b00104e8000208263000080030004941bfffc80930004807300003b1b00103c0002ac6000afbc7c0803a64e8000212c03000140820028807b00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffff94825b00107e4803a63b7b00144e800020|@5210,1048575|152,3,@5208 5208:C2,984|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000218078fffc82e3fffc82d7000482b6000882950130973bfffc971bfffc949bfffc3864000083140000801800007c0803a64e8000212803000141820060827b00048253fffc8232fffc8211000481f0000881cf01308013fff8941bfffc807b0004830e0008801800007c0803a64e800021809b0000815b0008830afffc833b000c3c0002ac6000aaf87c0903a67f2803a63b7b00104e800420827b00048253fffc8232fffc8211000481f0000881cf0128807b0000830e0000801800007c0803a64e80002128030001418202dc815b0004812afffc8109fffc80e8000480c7000880a60128807b000083050008801800007c0803a64e800021809b00048324fffc8319fffc82f8000482d70008947bfffc831600e4801800007c0803a64e80002182bb00088295fffc8274fffc825300048232000882110034947bfffc83100000801800007c0803a64e80002128030001418200cc81fb000c81cffffc814efffc812a00048109000880e80034807b000083070008801800007c0803a64e80002180db000c80a6fffc8085fffc8324000483190008947bfffc80180004941bfffc807b000c831800dc801800007c0803a64e800021831b0000801800007c0803a64e80002182fb001482d7fffc82b6fffc8295000482740004947bfffc807b000883130064801800007c0803a64e80002138830000807b0000825b00188312fffc833b001c3c0002ac6000aebc7c0903a67f2803a63b7b00204e80042081fb000c81cffffc814efffc812a00048109000880e80030807b000083070000801800007c0803a64e800021280300014182014480db000c80a6fffc8085fffc806400048323000883190030807b000083180008801800007c0803a64e80002182fb000c82d7fffc82b6fffc8295000482740008947bfffc80130004941bfffc807b000c831300dc801800007c0803a64e800021831b0000801800007c0803a64e800021825b00148232fffc8211fffc81f0000481cf0024947bfffc800e0020941bfffc8072fff8830e0014801800007c0803a64e800021815b001c812afffc8109fffc80e8000480c70024947bfffc807b001083060010801800007c0803a64e80002138a30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000090a30004809b000090830000831b0004801800007c0803a64e80002138830000807b0008833b00208319fffc833b00243c0002ac6000aebc7c0903a67f2803a63b7b00284e8004203860000180db00107cc803a63b7b00144e80002038600001815b00087d4803a63b7b000c4e800020|@5209,1048575|160,3,@5205 548,3,@5207 920,3,@5207 5209:S53|56414c55455f4f505328292e66696e64457863657074696f6e283329736561726368537061636528322966696e644974656d283229 5210:S42|56414c55455f4f505328292e66696e64457863657074696f6e2833297365617263685370616365283229 5211:S28|56414c55455f4f505328292e66696e64457863657074696f6e283329 5212:O2|@5314,@3566 5213:C2,3820|7f2802a66339000239600068800d00187d6bd8107c0b004040a00010800d00247c0803a64e80002182f8000482d7000882b60068973bfffc971bfffc947bfffc949bfffc94bbfffc94dbfffc83150008801800007c0803a64e800021829b0010827400048253000882320070947bfffc80030004941bfffc807b000083110000801800007c0803a64e8000212803000141820124821b001881fb002095fbfffc80db002880bb000c809b0010807b001883100008801800007c0803a64e80002181db0018814e0004812a0004810a0008947bfffc80090010941bfffc80090034941bfffc807b002083080108801800007c0803a64e800021831b0000801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138fd0004919d000038c0000190c7000480bb001c90a70000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021389d0004919d000090e4000490640000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000090830004833b000893230000831b0004833b0028801800007c0903a67f2803a63b7b00344e800420821b001881f0000481cf0008814e006c807b0000830a0000801800007c0803a64e800021280300014182013c813b00188109000480e8000880c7006c807b000083060008801800007c0803a64e80002180bb0018809b0020949bfffc80db00288065000880bb000c809b00103b230000807b00183b190000801800007c0803a64e800021831b001882f8000482d700043aa30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a300043a8000039283000080160030941bfffc8316001c801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a7d0004919d00003a40000192530004823b0014923300003a030000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000039e0000191e300089263000492030000831b0000833b0020801800007c0903a67f2803a63b7b002c4e800420813b0004811b001880e8000480c7000880a6003c80090008941bfffc807b000083050000801800007c0803a64e8000212803000141820ad8809b001c80640004832300088319003c807b000083180008801800007c0803a64e80002182fb000882db001c82b600048295000882740048947bfffc80170000941bfffc83130000801800007c0803a64e80002128030001418200b4825b0024809b0018807b00148312000c801800007c0803a64e800021823b00248211000481f00004398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002139dd0004919d000039400001914e0004813b001c912e000039030000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000038e0000390e3000891c3000491030000830f0030833b0028801800007c0903a67f2803a63b7b00344e800420825b0024823200048211000881f00058807b0004830f0000801800007c0803a64e80002128030001418200d081db0024809b0018807b0014830e000c801800007c0803a64e800021815b0024812a000481090004398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138fd0004919d000038c0000190c7000480bb001c90a7000038830000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003b2000039323000890e300049083000083080030801800007c0803a64e800021831b002482f8000482d700048316003c833b0028801800007c0903a67f2803a63b7b00344e80042081db0024814e0004812a000881090064807b000483080000801800007c0803a64e80002128030001418200d4947bfffc947bfffc80fb002c80db003494dbfffc38bb000494bbfffc80db004038a00001809b0024807b001083070010801800007c0803a64e800021809b002c8064000483230004398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b1d0004919d00003ae0000192f8000482db002492d80000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003aa0000392a3000893030004829b00009283000083190030833b0030801800007c0903a67f2803a63b7b003c4e80042080fb002480c7000480a6000880850044807b000483040000801800007c0803a64e80002128030001418206e4807b0024398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d00003f0002ac6318c35c9319000082e3000492f9000482d7000882b6001c973bfffc807b001883150000801800007c0803a64e8000212803000141820410827b002882530004823200088211001c807b001883100008801800007c0803a64e80002181fb002881cf0004814e0008812a001c80030000941bfffc807b000083090000801800007c0803a64e8000212803000141820368811b002c80e8000480c7000880a6001c807b000083050008801800007c0803a64e80002180030004941bfffc80830000807b0030832300048319000882f8002c949bfffc3864000083170000801800007c0803a64e800021280300014182006882bb003482950004827400088253002c807b000083120008801800007c0803a64e800021823b00348211000481f00008830f0078801800007c0803a64e800021388300003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffff7082db000082bb003482950004827400088253002096dbfffc3876000083120000801800007c0803a64e8000212803000141820244823b00388211000481f0000881cf0020807b0000830e0008801800007c0803a64e80002181430004714b0001408201e8812a0004712b0001408201b0810900042c0800014082017880ea000080c7000480bb003880850004806400088323002c94dbfffc3866000083190000801800007c0803a64e800021280300014182006882fb003c82d7000482b600088295002c807b000083140008801800007c0803a64e800021827b003c825300048232000883110078801800007c0803a64e80002138c300003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffff70831b0000971bfffc82fb001082db004082b60004829500088274002c96fbfffc3877000083130000801800007c0803a64e8000212803000141820068823b00448211000481f0000881cf002c807b0000830e0008801800007c0803a64e800021815b0044812a00048109000883080078801800007c0803a64e8000213ae300003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffff70825b0000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a9d0004919d000092540004825b00049254000048000154807b00003b1b003c3c0002ac6000c51c7c0803a64e8000213a830000947bfffc947bfffc947bfffc48000128807b00003b1b003c3c0002ac6000c51c7c0803a64e8000213a830000947bfffc947bfffc947bfffc480000fc807b00003b1b003c3c0002ac6000c51c7c0803a64e8000213a830000947bfffc947bfffc947bfffc480000d0807b00003b1b003c3c0002ac6000c51c7c0803a64e8000213a830000947bfffc947bfffc947bfffc480000a4811b002c398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a9d0004919d000080e8001490f4000490f40000947bfffc947bfffc947bfffc947bfffc947bfffc947bfffc48000054829b002882740014398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a9d0004919d00009274000492740000947bfffc947bfffc947bfffc947bfffc947bfffc947bfffc947bfffc825b0044398000053bbdffe87c1df04040a00010800d001c7c0803a64e8000213a3d0004919d00003e0002ac6210c71c9211000081f4000091f1001081d4000491d1000c815b001c91510008813200049131000495fbfffc95dbfffc963bfffc97fbfffc3d0002ac6108c0c6951bfffc38e0000194fbfffc3bfb000080c90004807b005483060064801800007c0803a64e80002180bb005c80850004806400048324002483030020398000063bbdffe47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003ee002ac62f7cb1c92e3000082db005492c3001482bb001492a30010829b00109283000c827b00349263000890830004971bfffc8319000c801800007c0803a64e800021831b0000801800007c0803a64e80002183fb000c825b00647e4803a63b7b00704e800020822300002c110003408200183c6002a06063962c800d00287c0803a64e800021821b005081f0000481cf0004814f0024800e0030941bfffc800e0020941bfffc807b0008830a000c801800007c0803a64e800021831b0000801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021393d0004919d0000390000019109000480fb005090e9000038c30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000038a0000190a300089123000490c30000831b0004833b005c801800007c0903a67f2803a63b7b00684e800420807b0024832300048319000480180030941bfffc82fb003096fbfffc80db003880bb001c809b002082c30008807b00283b160000801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003a80000192950004827b0020927500003a430000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003a2000019223000892a3000492430000831b0000833b002c801800007c0903a67f2803a63b7b00384e800420809b001c806400048323000480190030941bfffc831b0028971bfffc80db003080bb001482e40008809b0018807b00203b170000801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213add0004919d00003aa0000192b60004829b0018929600003a630000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003a4000019243000892c3000492630000831b0000833b0024801800007c0903a67f2803a63b7b00304e800420|@5226,1048575|1700,3,@5214 2548,3,@5216 2592,3,@5216 2636,3,@5216 2680,3,@5216 2916,3,@5218 2976,3,$5213+3186 3080,3,@5225 3196,3,@54 5214:C2,368|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7000882b60028973bfffc971bfffc947bfffc83150000801800007c0803a64e8000212803000141820110829b0004827400048253000882320028807b000083110008801800007c0803a64e800021821b000481f0000481cf000880030000941bfffc80630008830e0010801800007c0803a64e800021815b0008812a000481090008947bfffc83080088801800007c0803a64e80002180fb000c80c7000480a600088085001883040000801800007c0803a64e8000212803000141820018807b0000833b00107f2803a63b7b00144e800020807b000c832300048319000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082fb000492e3000482db000092c300008318001c801800007c0803a64e800021831b000c833b00107f2803a63b7b00144bfffeb03c6002ac60637418800d00287c0803a64e800021|@5215,1048575|348,3,@5159 5215:S42|56414c55455f4f505328292e6170706c7946756e6374696f6e283629666f6c6c6f775479706573283129 5216:C2,436|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc833b00008319fffc82f8000482d7000882b6002c947bfffc83150000801800007c0803a64e800021280300014182006c827b00048253fffc823200048211000881f0002c807b0000830f0008801800007c0803a64e80002181db0004814efffc812a00048109000883080078801800007c0803a64e8000213b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffff6c829b0000827b0004969bfffc8253ffcc823b00088211fffc81f0000481cf0008814e002c965bfffc38720000830a0000801800007c0803a64e8000212803000141820070811b000c80e8fffc80c7000480a600088085002c807b000083040008801800007c0803a64e800021833b000c8319fffc82f8000482d7000883160078801800007c0803a64e8000213a4300003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffff64813b0000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000091230004813b000491230000811b00107d0803a63b7b00144e800020|@5217,1048575| 5217:S40|56414c55455f4f505328292e6170706c7946756e6374696f6e2836293c7061747465726e3e2d2f32 5218:C2,172|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d70004973bfffc971bfffc83160020801800007c0803a64e80002182bb00003a830000398000063bbdffe47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003e6002ac6273c7e4926300009283001482550010924300108235000c9223000c821500089203000881f5000491e3000481db00047dc803a63b7b00084e800020|@5224,1048575|108,3,@5219 5219:C2,340|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021706b00014182000c3ae000034800001081830000558c083c6197000156ebf80140a20010800d00347c0803a64e8000212c17000940810058973bfffc971bfffc947bfffc80180014941bfffc38a00009388000013c0002ac6000c9547c0803a64e8000213c8002ac6084ca9c3f00000063184368801800007c0803a64e800021280300014182002c4800001c973bfffc971bfffc947bfffc80180014941bfffc4800001082bb000882d5000c4800000c82db000882d6001082bb00083876000083150008801800007c0803a64e800021829b000882740004825300103a230000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000821b0000920300089223000481fb000491e3000083120008833b000c801800007c0903a67f2803a63b7b00104e800420|@5223,1048575|116,3,@5220 132,3,@5222 140,3,I24 5220:C2,272|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021706b00014182000c3b0000034800001081830000558c083c61980001708b000141820028548bf80140a20010800d00347c0803a64e8000212c0400014180000c3ae4000048000020973bfffc3ae300003c6002a0606395e0800d00287c0803a64e80002170ab00014182002854abf80140a20010800d00347c0803a64e8000212c0500014180000c3ac5000048000020973bfffc3ac300003c6002a0606395e0800d00287c0803a64e8000217d97b21438acffff7c05c0404081001c973bfffc3c6002a0606395e0800d00287c0803a64e80002138b60000389700003c0002aa60009ce87c0903a67f2803a64e800420|@5221,1048575|112,3,@51 184,3,@51 224,3,@51 252,3,@4361 5221:S19|537472696e672e737562737472696e67283329 5222:S4|636f6e76 5223:S48|56414c55455f4f505328292e6170706c7946756e6374696f6e2836296164644f7665726c6f6164696e67283129283129 5224:S49|56414c55455f4f505328292e6170706c7946756e6374696f6e2836296164644f7665726c6f616447656e6572616c283129 5225:C2,340|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021706b00014182000c3ae000034800001081830000558c083c6197000156ebf80140a20010800d00347c0803a64e8000212c17000940810058973bfffc971bfffc947bfffc80180014941bfffc38a00009388000013c0002ac6000c9547c0803a64e8000213c8002ac6084ca9c3f00000063184368801800007c0803a64e800021280300014182002c4800001c973bfffc971bfffc947bfffc80180014941bfffc4800001082bb000882d5000c4800000c82db000882d6001082bb00083876000083150008801800007c0803a64e800021829b000882740004825300103a230000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000821b0000920300089223000481fb000491e3000083120008833b000c801800007c0903a67f2803a63b7b00104e800420|@5223,1048575|116,3,@5220 132,3,@5222 140,3,I24 5226:S28|56414c55455f4f505328292e6170706c7946756e6374696f6e283629 5227:O5|@5229,@2532,@3566,@5228,@5105 5228:O5|-5,-2,1,0,0 5229:C2,1524|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021398000025480f80140a20010800d00347c0803a64e8000217ee4661541a3fff03d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e800021389d0004919d00003ac0000192c400003d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213add0004919d00003aa0000192b600003d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003a80000192950000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a9d0004919d00003e6002ac6273d2f0927400008278000892740004398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a5d0004919d00003e2002ac6231d7ac923200009092000892720004398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a3d0004919d00003e0002ac6210dea09211000092710004398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a1d0004919d0000923000043a200001923000003980000c3bbdffcc7c1df04040a00010800d001c7c0803a64e8000213a3d0004919d00003de002ac61efdf5c91f100009091002c809800109091002892d1002481f8000491f1002081d8000c91d1001c92f1001892b10014921100109251000c92710008929100048153000c973bfffc971bfffc96fbfffc96dbfffc961bfffc963bfffc830a0030801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021393d0004919d00003d0002ad61081f809109000080fb000490e9000438a9000038800001831b0000801800007c0803a64e80002180c300002c0600014082005880a30004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003880000190830004833b000c932300003b050000833b0014801800007c0903a67f2803a63b7b00184e80042080a30004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003880000190830004833b000c932300003b050000801800007c0803a64e800021831b000882f8000072eb00014082004c82b700042c1500014082000c82d7000048000030829b00108274000882530004947bfffc3877000083120058801800007c0803a64e8000213ac3000048000034947bfffc4800002c82db001082b6000882950004947bfffc3877000083140058801800007c0803a64e8000213ac30000827b00148253000882320004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000821300049203000439e0000191e3000096dbfffc8011002c941bfffc80110024941bfffc80110030941bfffc8311001c801800007c0803a64e80002181db0024814e0008812a000439030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080ee000490e3000438c0000390c30000951bfffc8309001c801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138bd0004919d0000388000019085000490650000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000090a30004833b0000932300003b030000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003ae0000392e300089303000482db001492c30000831b0004801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003a8000019295000490750000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a30004827b001092630000831b0008801800007c0803a64e8000213a430000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00003e2002ad62311fdc9223000c3a0000039203000881fb002491e3000492430000831b000c833b002c801800007c0903a67f2803a63b7b00304e800420|@5313,1048575|244,3,@5230 300,3,@5235 356,3,@5247 456,3,@5249 604,3,@5310 1464,3,@5312 5230:C2,308|7f2802a6633900022c040001408200084e800020947bfffc947bfffc82e300002c17ffff4082006c398000053bbdffe87c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002ac62b5d44092b6000082b8000492b60010828300049296000c826400009276000882440004925600043a3b00003a000001921100003a3b000092d1000448000068398000053bbdffe87c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002ac62b5d5d092b600008283000492960010827800049276000c824400009256000882240004923600043a1b00003aa0000192b000003a1b000092d00004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000809b00009083000082fb000492e300047f2803a63b7b00084e800020|@5234,1047555|76,3,@5231 180,3,@5233 5231:C2,312|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8001082d70004973bfffc971bfffc947bfffc80160030941bfffc8318000c801800007c0803a64e80002182bb0008947bfffc807b000883150008801800007c0803a64e800021829b000c947bfffc807b000c83140004801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a7d0004919d00003a4000019253000490730000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a3d0004919d000092710004821b000092110000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000039e0000391e300089223000481db000491c30000831b0008833b0014801800007c0903a67f2803a63b7b00184e800420|@5232,1048575| 5232:S49|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e28322972657475726e46756e283229283129 5233:C2,392|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000c82d70004973bfffc971bfffc947bfffc80160030941bfffc83180010801800007c0803a64e80002182bb00088295000c82740004947bfffc80130010941bfffc807b000c83150008801800007c0803a64e800021825b0010947bfffc807b001083120004801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a3d0004919d00003a0000019211000490710000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00009223000481fb000091e30000831b0004801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002139dd0004919d000039400001914e0004906e0000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000392000039123000891c30004811b000891030000831b000c833b0018801800007c0903a67f2803a63b7b001c4e800420|@5232,1048575| 5234:S46|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e28322972657475726e46756e283229 5235:C2,320|7f2802a663390002947bfffc947bfffc708b000140820060398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213b1d0004919d00003ee002ac62f7d90892f800009078000c806400009078000882e4000492f800043adb00003aa0000192b600003adb00009316000448000090398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002ac62d6d9d092d7000082b8000892b7000c907700088098000490970004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003ec002ac62d6ddcc92c3000092e300043afb00003ac0ffff92d700003afb000090770004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082db000092c3000082bb000492a300047f2803a63b7b00084e800020|@5246,1015811|60,3,@5236 152,3,@5238 220,3,@5244 5236:C2,112|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000213ae30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092e3000882d8000492c3000482b8000892a300008318000c801800007c0903a67f2803a64e800420|@5237,1048575| 5237:S50|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e28322972657475726e436f6465283229283129 5238:C2,460|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000218098000c82e400003980000256e0f80140a20010800d00347c0803a64e8000217ed7661541a3fff092c4000082e40000398000025460f80140a20010800d00347c0803a64e8000217ec3661541a3fff0398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003e8002ac6294dbb892950000827800049275000892d50004398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a5d0004919d00003e2002ac6231dcbc923200009272000892d20004398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a1d0004919d000092f0000492d00000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000920300089243000492a30000973bfffc971bfffc96dbfffc83180008801800007c0803a64e80002181fb000481cf0004814e000439230000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00003d0002ac6108dd709103000c38e0000590e3000880db000090c3000491230000830a0028833b0008801800007c0903a67f2803a63b7b000c4e800420|@5243,1048575|148,3,@5239 208,3,@5241 400,3,@5242 5239:C2,152|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000882d7000482a30000829800043994ffff7eaba0385560f80140a20010800d00347c0803a64e8000217e6cac1141a3fff0398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000926300043a40ffff9243000083160018801800007c0903a67f2803a64e800420|@5240,1048575| 5240:S69|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e28322972657475726e436f646528322977726170706564436f6465283229636f64652d283129 5241:C2,152|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000882d7000482a30000829800043994ffff7eaba0385560f80140a20010800d00347c0803a64e8000217e6cac1141a3fff0398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000926300043a40fffd9243000083160018801800007c0903a67f2803a64e800420|@5240,1048575| 5242:S10|65717b2e2e2e7d283229 5243:S61|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e28322972657475726e436f646528322977726170706564436f6465283229 5244:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@5245,1048575| 5245:S61|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e28322972657475726e436f646528322977726170706564436f6465283129 5246:S47|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e28322972657475726e436f6465283229 5247:C2,104|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7000482b70024973bfffc80160020941bfffc807600688315000c801800007c0803a64e800021831b0000833b0004801800007c0903a67f2803a63b7b00084e800420|@5248,1048575| 5248:S45|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e28322964656661756c742d283129 5249:C2,1736|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021971bfffc94bbfffc949bfffc82f8000882d7000882b6002c973bfffc947bfffc83150000801800007c0803a64e80002128030001418200cc829b001082740008825300088232002c807b000083110008801800007c0803a64e800021821b001081f0000881cf0008947bfffc830e0078801800007c0803a64e800021815b0014812a00088109000880e80018947bfffc83070000801800007c0803a64e800021280300014182003c807b0004831b0014801800007c0803a64e80002180db0018809b001083060004833b000c801800007c0903a67f2803a63b7b001c4e80042080bb0014809b0010807b0000831b0018833b000c7f2803a63b7b001c4bfffeec829b0010827400088253000882320028807b000083110000801800007c0803a64e800021280300014182047c821b001081f0000881cf0008814e0028807b0000830a0008801800007c0803a64e800021813b00108109000880e8000880030000941bfffc8063000883070010801800007c0803a64e80002180db001480a6000880850008947bfffc83040090801800007c0803a64e800021833b00188319000882f80010398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002ac62b5e64092b60000931600043a830000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092c30008827b0000926300043a40007b92430000969bfffc83170010801800007c0803a64e800021823b001c8211000881f00004947bfffc830f000c801800007c0803a64e8000212803000140820094398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002139dd0004919d00003d4002ac614ae6ac914e0000813b0000912e0004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021391d0004919d000091c8000438e0000190e8000080db0020809b00183868000083060004833b0014801800007c0903a67f2803a63b7b00244e80042081db0020814e0008812a00088009000c941bfffc806900c083090090801800007c0803a64e80002139030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00009103000480fb000890e30000831b0000801800007c0803a64e800021280300014182006480db0024398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138bd0004919d00003c8002ac6084e708908500008066000890650004809b001c386500008306000c833b0018801800007c0903a67f2803a63b7b00284e80042080db002480a6000880850008807b000c8304008c801800007c0803a64e8000212c030001408200e0807b00248323000883190008807b000c83180088801800007c0803a64e80002182fb002482d7000882b600088295001883140000801800007c0803a64e8000212803000140820070827b0024825300088232000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000821b00109203000481fb000c91e300008311001c801800007c0803a64e80002180bb0020809b001c831b0024833b00187f2803a63b7b00284bfffb5c827b0024809b001c8073001083130004833b0018801800007c0903a67f2803a63b7b00284e800420833b00248319000882f8000882d70068947bfffc8063000083160008801800007c0803a64e80002182bb002882950008827400088253003080030008941bfffc807b000083120000801800007c0803a64e8000212803000141820050823b002c8211000881f0000881cf0030807b0000830e0008801800007c0803a64e800021815b002c809b0024806a0010830a0004833b0020801800007c0903a67f2803a63b7b00304e80042080bb0004809b0018807b00143b1b002c3c0002ac6000e7347c0803a64e800021823b002c809b002483110004833b0020801800007c0903a67f2803a63b7b00304e800420821b001081f0000881cf0008814e0020807b0000830a0000801800007c0803a64e80002128030001418200b4813b00108109000880e8000880c70020807b000083060008801800007c0803a64e80002180a3000470ab00014082005c808500042c040001408200288325000080bb000c809b000880790004831b0010833b00047f2803a63b7b00144bfff9bc806300043b1b00103c0002ad6000186c7c0803a64e800021833b00047f2803a63b7b00144e800020806300043b1b00103c0002ad6000186c7c0803a64e800021809b00047c8803a63b7b00144e800020813b0010809b00088069001083090004833b0004801800007c0903a67f2803a63b7b00144e800420|@5309,1048575|488,3,@5250 660,3,@5252 924,3,@5254 1424,3,@5255 1624,3,@5298 1664,3,@5298 5250:C2,16|8078000482e30004807700004e800020|@5251,917505| 5251:S54|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b6545712833297370656369616c2d283129 5252:C2,8|807800044e800020|@5253,786433| 5253:S46|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329283129 5254:C2,16|8078000482e30004807700044e800020|@5253,917505| 5255:C2,1168|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000082d7000882b60008973bfffc971bfffc947bfffc949bfffc94bbfffc83150090801800007c0803a64e800021829b000c827400008253000882320008947bfffc807b000c83110080801800007c0803a64e800021821b001081f0000081cf0014814e0000947bfffc2c0a00014082000c39200001480000cc810a000080fb001480c7000080a6000880850008398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000833b000493230004830800049303000080080000941bfffc800a0004941bfffc8304000c801800007c0803a64e8000212803000141820034398000013bbdfff87c1df04040a00010800d001c7c0803a64e800021393d0004919d000082fb000492e9000048000028815b00003b7b0008800d00187c1b004040a00010800d00207c0803a64e8000214bffff303b7b000882db001482b60000398000073bbdffe07c1df04040a00010800d001c7c0803a64e8000213a9d0004919d00003e6002ac6273ebe0927400008256fffc9254001892b400148235000892340010821500209214000c81f5001c91f4000881db000091d40004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021395d0004919d00003d2002ac6129ef38912a0000922a0004398000073bbdffe07c1df04040a00010800d001c7c0803a64e800021391d0004919d00003ce002ac60e7f10090e8000080db001090c800189148001480bb000c90a800109288000c9228000880950018908800048075001483230000969bfffc951bfffc2c1900014082000c3b000001480000cc82f9000082db001c82b600008295000882740008398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000825b000c92430004823700049223000080170000941bfffc80190004941bfffc8313000c801800007c0803a64e8000212803000141820034398000013bbdfff87c1df04040a00010800d001c7c0803a64e8000213b1d0004919d0000821b00049218000048000028833b00003b7b0008800d00187c1b004040a00010800d00207c0803a64e8000214bffff303b7b0008947bfffc947bfffc730b000140820064398000043bbdffec7c1df04040a00010800d001c7c0803a64e80002139fd0004919d00003dc002ac61cef7a891cf0000815b0008914f000c81380000912f0008811b001c910f000438fb000038c0ffff90c7000038bb000091e50004480000a8809b0018807b0020831b00243c0002ac6000f8647c0803a64e80002181fb001c2c0f00014082001c39db00003940ffff914e0000393b0000906900044800006881db0024814e0000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021393d0004919d00003d0002ad610816209109000080ea000890e900109069000c91e9000880db000c90c9000438bb00003880ffff90850000387b000091230004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000833b000093230000831b00049303000482fb00287ee803a63b7b002c4e800020|@5297,1048575|400,3,@5256 492,3,@5260 544,3,@5262 876,3,@5266 948,3,@5268 1044,3,@5294 5256:C2,712|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc949bfffc80040000941bfffc80040004941bfffc80b800183880000183180014801800007c0803a64e800021832300002c1900014082024c831b000c82f8001082d7000482bb00043980000256a0f80140a20010800d00347c0803a64e8000217e95661541a3fff082630004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000825b000092430004928300008016002c941bfffc80160030941bfffc3b130000801800007c0803a64e800021823b00148211001081f00004398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002139dd0004919d000039400001914e000481310008912e000039030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000091c3000480f1000c90e30000951bfffc830f0010801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138dd0004919d000038a0000190a6000490660000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000388000039083000890c30004833b000093230000831b0004801800007c0803a64e800021831b0010398000025700f80140a20010800d00347c0803a64e8000217ef8661541a3fff082db0018947bfffc96fbfffc809600043c6002ac6063eec43c0002a1600074a87c0803a64e8000213c8002ac6084eed03c0002a1600074a87c0803a64e8000213aa30000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a3000c3a80000592830008827b000092630004825b000492430000831b0010833b0024801800007c0903a67f2803a63b7b00284e80042083030004807b0008833b0010801800007c0903a67f2803a63b7b00144e800420|@5259,1048575|536,3,@5257 544,3,@511 560,3,@5258 568,3,@511 5257:S3|65712d 5258:S5|282e2e2e29 5259:S78|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329657175616c697479466f72436f6e737472756374696f6e283329676574417267283229 5260:C2,336|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7000882b6002c973bfffc971bfffc947bfffc949bfffc83150000801800007c0803a64e80002128030001418200ec829b000882740004825300088232002c807b000483110008801800007c0803a64e800021821b000881f0000481cf0008814e002c947bfffc807b0004830a0000801800007c0803a64e8000212803000141820084813b000c8109000480e8000880c7002c807b000483060008801800007c0803a64e80002180bb000c80850004832400083b030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00009303000482fb000092e300008319007c833b0010801800007c0903a67f2803a63b7b00144e80042038600001813b00107d2803a63b7b00144e80002038600001829b000c7e8803a63b7b00104e800020|@5261,1048575| 5261:S84|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329657175616c697479466f72436f6e737472756374696f6e28332973616d655479706556617273283229 5262:C2,1176|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213afd0004919d000090970004907700002c060001408200f87cab2378556bf80140a20010800d00347c0803a64e8000217c0520004082006882d8000882b60004829800043994ffff7c6ba0385560f80140a20010800d00347c0803a64e8000217e6c1c1141a3fff0398000025660f80140a20010800d00347c0803a64e8000217c6c9c1141a3fff083150014801800007c0903a67f2803a64e80042082d8000882b60004829800043994ffff7c6ba0385560f80140a20010800d00347c0803a64e8000217e6c1c1141a3fff0398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00009263000490a3000083150018801800007c0903a67f2803a64e8004207cab2378556bf80140a20010800d00347c0803a64e8000217c052000418200fc82d8000882b60004829800043994ffff7c6ba0385560f80140a20010800d00347c0803a64e8000217e6c1c1141a3fff0398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00009263000490a30000973bfffc971bfffc96fbfffc80150030941bfffc83150018801800007c0803a64e800021825b0008947bfffc807200103b1b00103c0002ac6000f5b47c0803a64e8000213a230000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003a000003920300089223000481fb000091e30000831b0004833b0010801800007c0903a67f2803a63b7b00144e80042082d8000882b60008973bfffc971bfffc947bfffc96fbfffc80180010941bfffc8078001883150084801800007c0803a64e800021829b00003a600003728b000140820090706b0001408200802813000141820038821b000c80140004941bfffc80030004941bfffc808300008074000083100014801800007c0803a64e8000213a230000480000183a20000180140004941bfffc80030004941bfffc3a710000807b0000829b00043b7b0008800d00187c1b004040a00010800d00207c0803a64e8000214bffff783a530000480000083a5300002812000141820078825b000c823200088211000481fb000881d20004398effff7deb70385560f80140a20010800d00347c0803a64e8000217d4c7c1141a3fff0398000045540f80140a20010800d00347c0803a64e8000217c6c541141a3fff083100014833b0010801800007c0903a67f2803a63b7b00144e800420825b000c823200088211000481fb000881d20004398effff7deb70385560f80140a20010800d00347c0803a64e8000217d4c7c1141a3fff0398000025540f80140a20010800d00347c0803a64e8000217c6c541141a3fff080100030941bfffc83100014801800007c0803a64e800021813b0010947bfffc806900103b1b00183c0002ac6000f6807c0803a64e80002139030000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000038e0000390e300089103000480db000090c30000831b0004833b0018801800007c0903a67f2803a63b7b001c4e800420|@5265,1048575|504,3,@5263 1072,3,@5264 5263:C2,176|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e80002082f8fffc973bfffc971bfffc80030004941bfffc8098fff8806300008317000c801800007c0803a64e800021947bfffc807b0004831b00084bffff99398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213add0004919d00009076000482bb000092b6000038760000829b000c7e8803a63b7b00104e800020|@234,1048575| 5264:C2,176|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e80002082f8fffc973bfffc971bfffc80030004941bfffc8098fff4806300008317000c801800007c0803a64e800021947bfffc807b0004831b00084bffff99398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213add0004919d00009076000482bb000092b6000038760000829b000c7e8803a63b7b00104e800020|@234,1048575| 5265:S83|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329657175616c697479466f72436f6e737472756374696f6e2833297265637572736976654571283429 5266:C2,64|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180d8000480b8000880830004806300008318000c801800007c0903a64e800420|@5267,1048575| 5267:S86|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329657175616c697479466f72436f6e737472756374696f6e2833297265637572736976654571283129283129 5268:C2,1764|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000082d7000882b60008973bfffc971bfffc947bfffc949bfffc83150090801800007c0803a64e800021829b0008827400008253000882320008947bfffc807b000883110080801800007c0803a64e800021821b000c81f0000081cf002c814e0000398000025540f80140a20010800d00347c0803a64e8000217d2a661541a3fff0912e0000810e0000398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138fd0004919d000080db000090c700049107000080af001480850000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d00009099000490f9000093250000830f000882f80008947bfffc951bfffc807b001083170084801800007c0803a64e800021947bfffc3ac000012c0300014082000c3ab60000480000483980000256c0f80140a20010800d00347c0803a64e8000217e96661541a3fff0806300043ad40000800d00187c1b004040a00010800d00207c0803a64e8000214bffffb0829b00188274000082530018398000025640f80140a20010800d00347c0803a64e8000217e32661541a3fff02c1500014082000c3a11000048000024398000025620f80140a20010800d00347c0803a64e8000217e11661541a3fff0398000063bbdffe47c1df04040a00010800d001c7c0803a64e80002139fd0004919d00003dc002ac61ceff6491cf000081530008914f0014922f00108134fffc912f000c811b0000910f000892af000495fbfffc961bfffc80fb001870eb00014082013c80a700042c0500014082006496bbfffc963bfffc806700003b1b002c3c0002ad600004487c0803a64e800021280300014182001c809b002880640000832300088319000480d80004480001b8807b00203b1b002c3c0002ad600006d07c0803a64e80002138c3000048000198809400008064000883230004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008304001c9303000482e4002092e3000096bbfffc963bfffc80190054941bfffc8319004c801800007c0803a64e800021947bfffc807b00283b1b00343c0002ad600006d07c0803a64e8000213ac30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092c3000482bb000092a30000831b0004801800007c0803a64e80002138c300003b7b0008480000cc80d4000080a6000880850004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008326001c93230004830600209303000096bbfffc963bfffc80040054941bfffc8304004c801800007c0803a64e800021947bfffc807b00283b1b00343c0002ad600006d07c0803a64e8000213ae30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092e3000482db000092c30000831b0004801800007c0803a64e80002138c300003b7b000882bb002882950000827400088253000494dbfffc80120028941bfffc809b00203c6002ac6063eec43c0002a1600074a87c0803a64e8000213c8002ad608414143c0002a1600074a87c0803a64e8000213a230000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00009223000c3a0000059203000881fb001091e3000481db000491c30000831b0000801800007c0803a64e800021813b000c2c0900014082000c39430000480000b0811b003080e8000080c7000880a60004947bfffc80050028941bfffc809b00283c6002ac6063eec43c0002a1600074a87c0803a64e8000213c8002ad608414203c0002a1600074a87c0803a64e80002138830000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00009083000c833b001493230008831b00109303000482fb000492e30000831b0000801800007c0803a64e800021394300003b7b000882db003082b6000082950024827400008255000882320004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000091430004821b001c92030000969bfffc967bfffc83110060801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002139fd0004919d000039c0000191cf0004906f00002c0f00014082000c815b00004800002895fbfffc807b00043b1b00403c0002ad6000142c7c0803a64e800021394300003b7b0004813b000491490000811b003880e80000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00003cc002ad60c614d490c3000080a7000890a3000c809b0024908300088327001893230004831b003c7f0803a63b7b00404e800020|@5293,1048575|532,3,@5269 624,3,@5276 680,3,@5278 812,3,@5278 1016,3,@5278 1140,3,@5257 1148,3,@511 1164,3,@5288 1172,3,@511 1324,3,@5257 1332,3,@511 1348,3,@5289 1356,3,@511 1636,3,@5290 1712,3,@5291 5269:C2,124|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc971bfffc82f800043980000256e0f80140a20010800d00347c0803a64e8000217ed7641141a3fff0973bfffc80980008387600003b1b00083c0002ac6000fffc7c0803a64e80002182bb00007ea803a63b7b000c4e800020|@5275,1048575|92,3,@5270 5270:C2,580|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0400014082001c82f8fffc807800008317000c801800007c0903a64e80042082f8fffc82d7001482b600088295002c973bfffc971bfffc947bfffc949bfffc80040000941bfffc807b000083140000801800007c0803a64e8000212803000141820160827b000c8253fffc823200148211000881f0002c807b0000830f0008801800007c0803a64e80002181db0004815b000c812afffc8109001480e8000838c30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000090c3000480aa000090a30000800e0004941bfffc8307007c801800007c0803a64e8000212803000141820094809b00108064fffc398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213b3d0004919d00003f0002ad6318025c9319000082e3001492f9000c82db000c92d9000882a3001092b90004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000932300043a80ffff92830000827b00147e6803a63b7b00184e800020809b000c398000025480f80140a20010800d00347c0803a64e8000217c64661541a3fff0809b0000831b0010833b00147f2803a63b7b00184bfffe2c827b000c8253fffc823200148211001c398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002139fd0004919d00003dc002ad61ce037091cf00083d4002a0614ac7ac914f000481300000912f0000386f0000800d00287c0803a64e800021|@5274,1048575|320,3,@5271 532,3,@5273 544,3,@227 5271:C2,152|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000c82d7000482a30000829800043994ffff7eaba0385560f80140a20010800d00347c0803a64e8000217e6cac1141a3fff0398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092630004825800089243000083160018801800007c0903a67f2803a64e800420|@5272,1048575| 5272:S88|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329657175616c697479466f7244617461747970652832296e6577547646756e28312966696e645476283229283129 5273:S27|66696e6454763a206e6f7420612074797065207661726961626c65 5274:S85|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329657175616c697479466f7244617461747970652832296e6577547646756e28312966696e645476283229 5275:S76|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329657175616c697479466f7244617461747970652832296e6577547646756e283129 5276:C2,536|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8fffc82d7000082b600088295000882740068973bfffc971bfffc83130008801800007c0803a64e800021825b00008232fffc8211000081f0000881cf0008814e006c947bfffc80030004941bfffc807b0000830a0000801800007c0803a64e800021280300014182017c813b00088109fffc80e8000080c7000880a600088085006c807b000083040008801800007c0803a64e8000212c03000340820134807b0004833b00088319fffc82f8000082d7000882b600088295003480030008941bfffc807b000083140000801800007c0803a64e80002128030001418200e0827b000c8253fffc823200008211000881f0000881cf0034807b0000830e0008801800007c0803a64e800021815b000c812afffc8109000080e8000880c7002480a7000480060008941bfffc80060020941bfffc80060014941bfffc83050064801800007c0803a64e800021831b0000801800007c0803a64e80002138830000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003b2000039323000490830000831b0004801800007c0803a64e800021831b0008833b001c801800007c0903a67f2803a63b7b00204e80042038600001827b00107e6803a63b7b00144e80002038600001833b000c7f2803a63b7b00104e80002038600001813b000c7d2803a63b7b00104e800020|@5277,1048575| 5277:S74|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329657175616c697479466f7244617461747970652832296973456e756d283129 5278:C2,1008|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082001c8078fffc82e3000082d7000882b60004807500084e80002082f8fffc82d7000082b600088295000882740068973bfffc971bfffc947bfffc80030000941bfffc807b000083130008801800007c0803a64e800021825b000480030004941bfffc80030008941bfffc8003000c941bfffc80120004941bfffc807b0010831b00183c0002ad600004487c0803a64e800021280300014182001c807b0000831b0018833b001c7f2803a63b7b00204bffff34823b00188211fffc81f000008091ffdc807b0008830f0028801800007c0803a64e800021947bfffc81db001c814efffc812a00008109000880e8000880c7006c807b001083060000801800007c0803a64e800021280300014182029c80bb001c8085fffc80640000832300088319000882f8006c807b001083170008801800007c0803a64e8000212c0300034082024482db001c82b6fffc829500008274000882530004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000823b0000922300043a000001920300008012005c941bfffc80140020941bfffc80120030941bfffc8312001c801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002139fd0004919d000039c0000191cf0004815b0004914f000039230000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000390000039103000891e3000491230000831b0000801800007c0803a64e80002180fb002880c7fffc80a6000080850008832400043b030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082fb000c92e300043ac0000192c30000971bfffc8005001c941bfffc80190030941bfffc8319001c801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003a80000192950004827b0004927500003a430000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003a2000039223000892a3000492430000831b0000801800007c0803a64e800021947bfffc807b0020831b00384bfffcb53a030000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00009203000881fb000091e3000481db000c91c30000831b0018833b003c801800007c0903a67f2803a63b7b00404e8004203b1b00203c0002ad60000adc7c0803a64e80002182db00207ec803a63b7b00244e8000203b1b00203c0002ad60000adc7c0803a64e80002180bb00207ca803a63b7b00244e800020|@5287,1048575|168,3,@5276 940,3,@5279 976,3,@5279 5279:C2,1280|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8fffc82d7fffc82b60000829500088274000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008257ffe4924300048238ffe892230000973bfffc971bfffc83130020801800007c0803a64e800021821b000081f0fffc81cffffc814e0000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021393d0004919d00003d0002ad61080ff89109000080f0ffec90e9001080ca002890c9000c80aa000890a90008808fffdc90890004398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d00003f0002ad631812249319000091390004398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002ad62d612e492d7000091370004398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d0000828fffe89295000490950000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a7d0004919d000092f300049333000096bbfffc80afffe0389300003b0a0000801800007c0803a64e800021822300002c1100014082002482030004807b00003b100000801800007c0803a64e8000213a43000048000070821b000481f0fffc81cffffc814e0000812a00088109001c398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002138fd0004919d00003cc002ad60c6133c90c700083ca002a060a5c7ac90a70004808800009087000038670000800d00287c0803a64e80002181fb000481cffffc814efffc812a00008109000880e80004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080cfffe090c3000438a0000190a30000965bfffc8007005c941bfffc80090020941bfffc80070030941bfffc8307001c801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021389d0004919d00003b20000193240004831b0004930400003ae30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003ac0000392c300089083000492e30000831b0000801800007c0803a64e80002182bb00148295fffc8274fffc82530000823200088211000439e30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000081d5ffe091c30004394000019143000095fbfffc80100050941bfffc8012001c941bfffc80100030941bfffc8310001c801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021393d0004919d0000390000019109000480fb000490e9000038c30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000038a0000390a300089123000490c30000831b0000801800007c0803a64e80002138830000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000833b001c9323000490830000831b0008801800007c0803a64e800021831b0024947bfffc8078ffe48318fffc3c0002ad600006d07c0803a64e8000213ae30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092e3000882db000092c3000482bb001092a30000831b001c833b002c801800007c0903a67f2803a63b7b00304e800420|@5286,1048575|180,3,@5280 260,3,@5282 312,3,@5284 552,3,@5285 564,3,@227 1176,3,@5278 5280:C2,424|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000882d70004973bfffc971bfffc947bfffc94bbfffc80160030941bfffc8016001c941bfffc38830000807800108318000c801800007c0803a64e8000213aa30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a300043a80000592830000831b0000801800007c0803a64e800021827b00108253000882320004821b000c81f30004398fffff7e0b78385560f80140a20010800d00347c0803a64e8000217dcc841141a3fff039430000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000091c30004813b000891230000955bfffc83110018801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021391d0004919d000038e0000190e8000490680000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000038c0000390c300089103000480bb000090a30000831b0008833b0018801800007c0903a67f2803a63b7b001c4e800420|@5281,1048575| 5281:S93|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329657175616c697479466f72446174617479706528322970726f63657373436f6e737472732831296465737472756374283329 5282:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002138a0ffff808300048063000083180004801800007c0903a64e800420|@5283,1048575| 5283:S96|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329657175616c697479466f72446174617479706528322970726f63657373436f6e737472732831296465737472756374283129283129 5284:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002138a0fffd808300048063000083180004801800007c0903a64e800420|@5283,1048575| 5285:S21|6170706c7945713a2077726f6e6720726573756c74 5286:S84|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329657175616c697479466f72446174617479706528322970726f63657373436f6e737472732831292f32 5287:S82|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329657175616c697479466f72446174617479706528322970726f63657373436f6e73747273283129 5288:S3|283229 5289:S3|283129 5290:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c8078ffc04e800020973bfffc971bfffc80030000941bfffc806300044bffffbd398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b00009319000038790000833b00087f2803a63b7b000c4e800020|@468,786433| 5291:C2,152|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000c82d7000482a30000829800043994ffff7eaba0385560f80140a20010800d00347c0803a64e8000217e6cac1141a3fff0398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092630004825800089243000083160018801800007c0903a67f2803a64e800420|@5292,1048575| 5292:S68|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329657175616c697479466f724461746174797065283229283129 5293:S65|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329657175616c697479466f724461746174797065283229 5294:C2,196|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8001082d70004973bfffc971bfffc947bfffc80160030941bfffc8318000c801800007c0803a64e80002182bb0008947bfffc807500083b1b00103c0002ad600017007c0803a64e8000213a830000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003a6000039263000892830004825b000092430000831b0004833b0010801800007c0903a67f2803a63b7b00144e800420|@5296,1048575|92,3,@5295 5295:C2,176|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e80002082f8fffc973bfffc971bfffc80030004941bfffc8098fff88063000083170004801800007c0803a64e800021947bfffc807b0004831b00084bffff99398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213add0004919d00009076000482bb000092b6000038760000829b000c7e8803a63b7b00104e800020|@234,1048575| 5296:S72|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329657175616c697479466f72436f6e737472756374696f6e283329283129 5297:S69|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329657175616c697479466f72436f6e737472756374696f6e283329 5298:C2,184|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f80000398000053bbdffe87c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002ad62b5194092b6000082b8fffc92b6001092f6000c829700089296000890760004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003e6002ad62731e7c9263000092c300048098fff88317000c801800007c0903a67f2803a64e800420|@5308,1048575|72,3,@5299 144,3,@5306 5299:C2,96|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021971bfffc94bbfffc949bfffc947bfffc973bfffc38800001807800043b1b00103c0002ad600019bc7c0803a64e800021833b00007f2803a63b7b00144e800020|@5305,1048575|64,3,@5300 5300:C2,592|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c03000140820018809800008064000882e30004807700044e80002082e3000082d8000082b6000882950004398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213a7d0004919d00003e4002ad62521c289253000092b3000c909300088238fff492330004398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213a1d0004919d00003de002ad61ef1d3491f0000092b0000c9090000881d8fff891d00004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021395d0004919d0000920a0004926a0000973bfffc971bfffc949bfffc80030004941bfffc80140050941bfffc8018fffc941bfffc80b60010388a0000807700048316000c801800007c0803a64e800021810300002c0800014082002480e30004807b00003b070000801800007c0803a64e800021392300004800006880fb001080c7000080a600088085001c398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213b3d0004919d00003f0002ad6318133c931900083ee002a062f7c7ac92f9000482c4000092d9000038790000800d00287c0803a64e80002180db000c3980000254c0f80140a20010800d00347c0803a64e8000217ca6661541a3fff0953bfffc38850000807b000c831b00144bfffe0538830000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000090830004833b000093230000831b0008833b0018801800007c0903a67f2803a63b7b001c4e800420|@5304,1048575|112,3,@5301 176,3,@5303 408,3,@5285 420,3,@227 5301:C2,156|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000c82d70004973bfffc8016001c941bfffc80180008941bfffc83180004801800007c0803a64e8000213aa30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a30004829b000092830000831b0004833b0008801800007c0903a67f2803a63b7b000c4e800420|@5302,1048575| 5302:S73|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b65457128332965715475706c65283329636f6d62696e65456e7472696573283229283129 5303:C2,156|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000c82d70004973bfffc8016001c941bfffc80180008941bfffc83180004801800007c0803a64e8000213aa30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a30004829b000092830000831b0004833b0008801800007c0903a67f2803a63b7b000c4e800420|@5302,1048575| 5304:S70|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b65457128332965715475706c65283329636f6d62696e65456e7472696573283229 5305:S53|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b65457128332965715475706c65283329 5306:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@5307,1048575| 5307:S53|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b65457128332965715475706c65283129 5308:S45|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b6545712833292f34 5309:S43|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329 5310:C2,8|807800044e800020|@5311,786433| 5311:S48|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e283229726573756c74436f64652d283129 5312:S8|657175616c697479 5313:S34|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e283229 5314:C2,364|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7000c3aa30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000090a3000490830000973bfffc971bfffc96bbfffc949bfffc94dbfffc83160018801800007c0803a64e800021829b000c398000063bbdffe47c1df04040a00010800d001c7c0803a64e8000213a7d0004919d00003e4002ad625221a092530000823b000492330014821b00089213001081fb000091f3000c81db001891d300088154000491530004812a001039030000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000926300089103000492030000951bfffc83090010801800007c0803a64e80002180fb001080c7000480a60008947bfffc807b000483050080801800007c0803a64e800021809b001c833b0000932400009064000438600001831b00187f0803a63b7b00244e800020|@5319,1048575|164,3,@5315 5315:C2,340|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000213ad900003ab800003880007b807500103f00000063184368801800007c0803a64e800021280300014182004c82950004827400048254002496dbfffc80130020941bfffc807300688312000c801800007c0803a64e800021831b0000833b0004801800007c0903a67f2803a63b7b00084e800420829500048274001096dbfffc96bbfffc807500108313000c801800007c0803a64e8000213b1b00043c0002ad600023107c0803a64e800021825b0000823200048211000c39e30000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d000081d2000891c300108152000c9143000c91e300088132001091230004811200149103000083100010801800007c0803a64e80002180fb000080c7000480a6000480650000809b00047c8803a63b7b00084e800020|@5318,1048575|48,3,I24 188,3,@5316 5316:C2,220|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c030001408200103c600000606346684e80002082e300042c1700014082002882c3000082b8fffc82950004827400088076000083130080801800007c0903a64e80042082c3000082b8fffc8295000482740008973bfffc971bfffc96fbfffc8076000083130080801800007c0803a64e8000213880005f3c0002a1600074a87c0803a64e800021947bfffc807b0004831b00084bffff4d38830000807b0000833b000c3c0002a1600074a87c0903a67f2803a63b7b00104e800420|@5317,1048575|40,3,I48 152,3,@511 196,3,@511 5317:S64|56414c55455f4f505328292e6765744f7665726c6f6164496e7374616e63652836296e6f74466f756e642831296d616b654f7665726c6f61644c697374283129 5318:S45|56414c55455f4f505328292e6765744f7665726c6f6164496e7374616e63652836296e6f74466f756e64283129 5319:S34|56414c55455f4f505328292e6765744f7665726c6f6164496e7374616e6365283629 5320:O2|@5322,@5321 5321:O4|@5324,@5118,@3566,@2532 5322:C2,72|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e3001096fbfffc80c3000c80a30008808300048063000083180004801800007c0903a64e800420|@5323,1048575| 5323:S29|56414c55455f4f505328292e636f6465457846756e6374696f6e283129 5324:C2,400|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000882d70008973bfffc971bfffc947bfffc949bfffc94bbfffc94dbfffc8316010c801800007c0803a64e80002182bb001082950008827400088253001883120000801800007c0803a64e8000212803000141820050823b00108211000881f0000481db0018815b0000915b0018813b001491db001480db000480bb0008808f0008807b000c831100043b290000801800007c0903a67f2803a63b7b00144e800420823b00108211000881f0000481db00083980000255c0f80140a20010800d00347c0803a64e8000217d4e661541a3fff0800f0028941bfffc813b0004953bfffc811b0020951bfffc80db001038aa00008091000c807b001883110004801800007c0803a64e80002138e30000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00003cc0000060c6466890c3000c38a0000390a30008388000039083000490e30000831b0000833b0018801800007c0903a67f2803a63b7b00204e800420|@5325,1048575|340,3,I48 5325:S29|56414c55455f4f505328292e636f6465457846756e6374696f6e283529 5326:O2|@5328,@5327 5327:O3|@5331,@3566,@5330 5328:C2,88|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e3001096fbfffc82c3001496dbfffc82a3001896bbfffc80c3000c80a30008808300048063000083180004801800007c0903a64e800420|@5329,1048575| 5329:S24|56414c55455f4f505328292e6c6f6f6b7570416e79283129 5330:O2|@5335,@3566 5331:C2,608|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d70028973bfffc971bfffc949bfffc94bbfffc94dbfffc83160000801800007c0803a64e80002182a30000828300043c80000060844668387500003f00000063184368801800007c0803a64e800021280300014182002896bbfffc969bfffc38740000831b0010801800007c0803a64e8000213a630000480000c0827b000c96bbfffc969bfffc80db001c38b50000809b000c3c6002ab606387e883130008801800007c0803a64e800021825b00148232000482110008947bfffc831000d8801800007c0803a64e8000212803000141820034398000013bbdfff87c1df04040a00010800d001c7c0803a64e8000213a7d0004919d000081fb002491f3000048000034807b0000831b000c801800007c0803a64e80002139e30000807b00043b0f0000801800007c0803a64e8000213a6300003b7b0004726b0001408200188073000081db00187dc803a63b7b00284e8000203c8002a360844070807b00243c0002a1600074a87c0803a64e800021809b00003c0002a1600074a87c0803a64e8000213c8002ad60842a6c3c0002a1600074a87c0803a64e80002139c300003c80000060844668807b00043f00000063184368801800007c0803a64e80002128030001418200103d400000614a46684800002c95dbfffc809b00083c6002ad60632a8c3c0002a1600074a87c0803a64e800021394300004800000895dbfffc388a0000807b00003c0002a1600074a87c0803a64e800021831b0020801800007c0803a64e800021807b0024813b001c7d2803a63b7b002c4e800020|@5334,1048575|84,3,I48 96,3,I24 184,3,@4786 376,3,@1148 388,3,@511 408,3,@511 424,3,@5332 432,3,@511 452,3,I48 464,3,I24 492,3,I48 512,3,@5333 520,3,@511 556,3,@511 5332:S23|2920686173206e6f74206265656e206465636c61726564 5333:S14|20696e2073747275637475726520 5334:S24|56414c55455f4f505328292e6c6f6f6b7570416e79283729 5335:C2,152|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021971bfffc947bfffc94dbfffc949bfffc398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002ad62d62b7892d7000082d8000492d70004973bfffc38850000387700003b1b00103c0002ad60002dc47c0803a64e80002182bb00007ea803a63b7b00144e800020|@5342,1048575|84,3,@5336 120,3,@5340 5336:C2,220|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d70008973bfffc971bfffc947bfffc831600dc801800007c0803a64e80002182bb0004829500048274000883130120801800007c0803a64e800021825b0004823200048211000881f0011c830f0008801800007c0803a64e80002181db00048143002c398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00003d2002ad61292c70912300009143000c810e00049103000880fb000090e3000480db00087cc803a63b7b000c4e800020|@5339,1048575|172,3,@5337 5337:C2,224|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc8318000c801800007c0803a64e800021706b000140820090833b00008319000882f8000882c30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082b9000492a3000492c30000831700e8801800007c0803a64e8000213a830000398000013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d000092830000827b00047e6803a63b7b00084e80002038600001833b00047f2803a63b7b00084e800020|@5338,1048575| 5338:S36|56414c55455f4f505328292e6c6f6f6b7570537472756374757265283429283129283129 5339:S33|56414c55455f4f505328292e6c6f6f6b7570537472756374757265283429283129 5340:C2,660|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000082d7000482b60028973bfffc971bfffc947bfffc3864000083150000801800007c0803a64e80002182830000826300043c80000060844668387400003f00000063184368801800007c0803a64e800021280300014182002c823b0004969bfffc967bfffc387300008311fff4801800007c0803a64e8000213a430000480000d4825b0004969bfffc967bfffc80d2fff838b400008092fff43c6002ab606387e883120000801800007c0803a64e800021823b000c8211000081f0000481cf0008947bfffc830e00d8801800007c0803a64e8000212803000141820044815b0010812a00008109000480e80008398000013bbdfff87c1df04040a00010800d001c7c0803a64e8000213a5d0004919d000080c700d490d2000048000034807b0000831b000c801800007c0803a64e80002139430000807b00043b0a0000801800007c0803a64e8000213a4300003b7b0004724b00014082001880720000813b00107d2803a63b7b00144e800020813b000c8009fff8941bfffc3c8002a3608440708069fffc3c0002a1600074a87c0803a64e800021809b00043c0002a1600074a87c0803a64e8000213c8002ad60842a6c3c0002a1600074a87c0803a64e800021390300003c80000060844668807b00083f00000063184368801800007c0803a64e80002128030001418200103ce0000060e746684800002c951bfffc809b000c3c6002ad60632a8c3c0002a1600074a87c0803a64e80002138e3000048000008951bfffc38870000807b00003c0002a1600074a87c0803a64e800021831b0004801800007c0803a64e80002180db001480a600008085000480640008806300d4833b00187f2803a63b7b001c4e800020|@5341,1048575|84,3,I48 96,3,I24 188,3,@4786 412,3,@1148 424,3,@511 444,3,@511 460,3,@5332 468,3,@511 488,3,I48 500,3,I24 528,3,I48 548,3,@5333 556,3,@511 592,3,@511 5341:S42|56414c55455f4f505328292e6c6f6f6b75705374727563747572652834296c6f6f6b7570537472283229 5342:S30|56414c55455f4f505328292e6c6f6f6b7570537472756374757265283429 5343:O2|@5344,@5330 5344:C2,64|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180c3000c80a30008808300048063000083180004801800007c0903a64e800420|@5345,1048575| 5345:S30|56414c55455f4f505328292e6c6f6f6b7570537472756374757265283129 5346:O2|@5348,@5347 5347:O3|@5350,@5327,@3566 5348:C2,64|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180c3000c80a30008808300048063000083180004801800007c0903a64e800420|@5349,1048575| 5349:S38|56414c55455f4f505328292e6c6f6f6b75705374727563747572654469726563746c79283129 5350:C2,144|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002ad62d632b492d7000082d8000892d7000482b60008947bfffc829500d4969bfffc94dbfffc38d700003a65000038a400003873000083180004801800007c0903a67f2803a64e800420|@5353,1048575|68,3,@5351 5351:C2,144|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d70008973bfffc971bfffc831600dc801800007c0803a64e80002182bb0000829500048274000883130120801800007c0803a64e800021825b0000823200048211000881f0011c830f0008801800007c0803a64e8000218063002c81db00047dc803a63b7b00084e800020|@5352,1048575| 5352:S41|56414c55455f4f505328292e6c6f6f6b75705374727563747572654469726563746c79283429283129 5353:S38|56414c55455f4f505328292e6c6f6f6b75705374727563747572654469726563746c79283429 5354:O3|@5357,@5327,@3566 5355:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@5356,1048575| 5356:S24|56414c55455f4f505328292e6c6f6f6b7570547970283129 5357:C2,156|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002ad62d6350492d7000082d8000892d7000482b600083e8002ad629435d4969bfffc827500d0967bfffc94bbfffc38d7000080a300043a440000808300003872000083180004801800007c0903a67f2803a64e800420|@5361,1048575|68,3,@5358 92,3,@5360 5358:C2,144|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d70008973bfffc971bfffc831600dc801800007c0803a64e80002182bb0000829500048274000883130120801800007c0803a64e800021825b0000823200048211000881f0011c830f0008801800007c0803a64e8000218063002081db00047dc803a63b7b00084e800020|@5359,1048575| 5359:S27|56414c55455f4f505328292e6c6f6f6b7570547970283329283129 5360:S16|5479706520636f6e7374727563746f72 5361:S24|56414c55455f4f505328292e6c6f6f6b7570547970283329 5362:O23|@4189,@4456,@5364,@5390,@5392,@5493,@5519,@5497,@4188,@5535,@5550,@1111,@1111,@4585,@5556,@5575,@5589,@5598,@4597,@4603,@5601,@4624,@5363 5363:O2|@5608,@5607 5364:O2|@5366,@5365 5365:O3|@5369,@5368,@4193 5366:C2,64|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180c3000c80a30008808300048063000083180004801800007c0903a64e800420|@5367,1048575| 5367:S26|545950455f5452454528292e61737369676e5479706573283129 5368:O3|@5380,@4193,@4488 5369:C2,236|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021398000053bbdffe87c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002ad62d6382c92d700009097001090b7000c90d7000880d8000890d7000438a30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003c8002ad60843d589083000092e30004973bfffc94bbfffc83180004801800007c0803a64e8000213b230000807b00003b190000801800007c0803a64e8000213b03000038600001833b0004801800007c0903a67f2803a63b7b00084e800420|@5379,1048575|68,3,@5370 140,3,@5375 5370:C2,1176|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7000c82b60024973bfffc971bfffc949bfffc3864000083150000801800007c0803a64e8000212803000141820434829b0004827400048253000c82320024807b000083110008801800007c0803a64e800021821b000481f0000481cf000c80030000941bfffc80030004941bfffc80030008941bfffc807b0000830e0008801800007c0803a64e800021815b0010812a00048109000c80080034941bfffc8308006c801800007c0803a64e800021831b0000801800007c0803a64e800021280300014182038880fb0014807b000883070010801800007c0803a64e80002180db001480a600048085000c3b230000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000093230004831b000493030000973bfffc8304000c801800007c0803a64e80002182fb001882d7000482b6000c80150034941bfffc807b00048315006c801800007c0803a64e800021831b0000801800007c0803a64e80002128030001408202c8829b001c827400048253000c807b000483120050801800007c0803a64e800021947bfffc3a200001821b00182c1000014082000c39f1000048000048398000025620f80140a20010800d00347c0803a64e8000217dd1661541a3fff0821000043a2e0000800d00187c1b004040a00010800d00207c0803a64e8000214bffffb081db00007dcb7b78556bf80140a20010800d00347c0803a64e8000217c0e780041820210815b0020812a00048109000880e9000c95fbfffc80080004941bfffc800a000c941bfffc800a0008941bfffc807b00188307004c801800007c0803a64e800021947bfffc3880ffff807b00143c0002a06000fe6c7c0803a64e800021947bfffc3880ffff807b00143c0002a06000fe6c7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138dd0004919d000038a0000190a6000490660000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021389d0004919d000090c400043c6002ad60633ce090640000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090990004831b000093190000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213afd0004919d0000933700043ec002ad62d63cf892d70000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d000092f50004829b000492950000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a300043e6002ad62733d0c926300003c0002a1600005347c0803a64e8000213a430000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092430008823b000892230004821b000c92030000831b0010833b003c801800007c0903a67f2803a63b7b00404e80042038600001815b00247d4803a63b7b00284e80002038600001829b00207e8803a63b7b00244e8000203860000180fb00187ce803a63b7b001c4e80002038600001829b00087e8803a63b7b000c4e800020|@5374,1048575|648,3,@316 676,3,@316 780,3,@5371 880,3,@5372 980,3,@5373 992,3,@325 5371:S13|2074797065287329206e6f7420 5372:S11|2920726571756972657320 5373:S18|5479706520636f6e7374727563746f722028 5374:S37|545950455f5452454528292e61737369676e54797065732834296173735479706573283229 5375:C2,80|7f2802a6633900023ae30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003ec002ad62d63dc492c3000082d8000492c3000892e300047f2803a64e800020|@5378,983041|48,3,@5376 5376:C2,52|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000218098000483180008801800007c0903a64e800420|@5377,1048575| 5377:S40|545950455f5452454528292e61737369676e54797065732834296173735479706573283129283129 5378:S37|545950455f5452454528292e61737369676e54797065732834296173735479706573283129 5379:S26|545950455f5452454528292e61737369676e5479706573283429 5380:C2,136|7f2802a663390002398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002ad62d63f3c92d7000082d8000892d7000c907700088078000490770004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003ea002ad62b543b492a3000092e300047f2803a64e800020|@5389,1015809|44,3,@5381 112,3,@5385 5381:C2,800|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc947bfffc386400008318000c801800007c0803a64e800021833b0004947bfffc83190008801800007c0803a64e8000213b030000807b0004801800007c0803a64e80002182fb000882d7000482b6000c82950028947bfffc807b000483140000801800007c0803a64e8000212803000141820060827b000c825300048232000c82110028807b000483100008801800007c0803a64e80002181fb000c81cf0004814e000c830a0090801800007c0803a64e80002138830000807b0000831b000c833b00107f2803a63b7b00144bffff14827b000c825300048232000c82110024807b000483100000801800007c0803a64e800021280300014182005081fb000c81cf0004814e000c812a0024807b000483090008801800007c0803a64e800021806300003b1b00103c0002ad600042787c0803a64e800021811b00107d0803a63b7b00144e80002081fb000c81cf0004814e000c812a0018807b000483090000801800007c0803a64e8000212803000141820058811b000c80e8000480c7000c80a60018807b000483050008801800007c0803a64e80002180030000941bfffc80830004807b0004831b00104bfffe2d809b0000831b0010833b00147f2803a63b7b00184bfffe1c811b000c80e8000480c7000c80a6001c807b000483050000801800007c0803a64e8000212803000141820050809b000c806400048323000c8319001c807b000483180008801800007c0803a64e800021806300043b1b00103c0002ad600043007c0803a64e80002182fb00107ee803a63b7b00144e800020809b000c806400048323000c83190010807b000483180000801800007c0803a64e8000212803000141820018807b000082fb00107ee803a63b7b00144e80002082fb000c82d7000482b6000c82950014807b000483140000801800007c0803a64e8000212803000141820018807b0000827b00107e6803a63b7b00144e800020827b000c825300048232000c82110020807b000483100008801800007c0803a64e800021807b000081fb00107de803a63b7b00144e800020|@5384,1048575|336,3,@5382 584,3,@5383 5382:C2,108|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c8078fff04e800020973bfffc971bfffc80030000941bfffc806300044bffffbd833b0004809b00008319fffc833b0008801800007c0903a67f2803a63b7b000c4e800420|@4875,1048575| 5383:C2,112|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c8078fff04e800020973bfffc971bfffc80030000941bfffc806300044bffffbd833b0000831b0004809900048318fffc833b0008801800007c0903a67f2803a63b7b000c4e800420|@4875,1048575| 5384:S31|545950455f5452454528292e666f6c6454797065283129666f6c6454283229 5385:C2,80|7f2802a6633900023ae30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003ec002ad62d6442092c3000082d8000492c3000892e300047f2803a64e800020|@5388,983041|48,3,@5386 5386:C2,52|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000218098000483180008801800007c0903a64e800420|@5387,1048575| 5387:S34|545950455f5452454528292e666f6c6454797065283129666f6c6454283129283129 5388:S31|545950455f5452454528292e666f6c6454797065283129666f6c6454283129 5389:S23|545950455f5452454528292e666f6c6454797065283129 5390:O4|-3,0,@2591,@5391 5391:O2|0,@2593 5392:O2|@5394,@5393 5393:O7|@5397,@5416,@5484,@4472,@4487,@5396,@4193 5394:C2,80|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e3001096fbfffc82c3001496dbfffc80c3000c80a30008808300048063000083180004801800007c0903a64e800420|@5395,1048575| 5395:S25|545950455f5452454528292e6d617463685479706573283129 5396:O4|@5489,@4193,@1111,@4487 5397:C2,328|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021398000053bbdffe87c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002ad62d6473892d7000082d8001892d7001090b7000c80b8001490b7000882b8001092b70004973bfffc971bfffc949bfffc94dbfffc96fbfffc38a00003388000018318000c801800007c0803a64e800021829b000c398000053bbdffe87c1df04040a00010800d001c7c0803a64e8000213a7d0004919d00003e4002ad62524a5092530000823b000492330010821b00189213000c81fb001491f3000881d4000891d30004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021395d0004919d00003d2002ad61294b20912a0000926a000438ca000080bb0000809b000883140004833b0010801800007c0903a67f2803a63b7b001c4e800420|@5415,1048575|68,3,@5398 192,3,@5409 272,3,@5413 5398:C2,136|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002ad62d647dc92d7000082d8001092d7000c82b8000c92b70008829800089297000438b700003c8002ad608449a483180004801800007c0903a67f2803a64e800420|@5408,1048575|68,3,@5399 108,3,@5404 5399:C2,204|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002ad62d648c492d7000082d8000892d7000482b8000c8295000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a7d0004919d000092d300043e4002ad62524978925300003e2002ad623149a4963bfffc3e00000062104668961bfffc38d3000080b400483897000083180004801800007c0903a67f2803a64e800420|@5407,1048575|68,3,@5400 136,3,@5402 148,3,@5404 160,3,I48 5400:C2,100|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc83180004801800007c0803a64e800021706b00014082001838600003833b00007f2803a63b7b00044e80002038600001833b00007f2803a63b7b00044e800020|@5401,1048575| 5401:S44|545950455f5452454528292e6d617463685479706573283629636f7079546172676574283129283129283129 5402:O1|@5403 5403:C2,8|386000014e800020|@5401,524289| 5404:O1|@5405 5405:C2,4|4e800020|@5406,524289| 5406:S22|545950455f5452454528292e747269764d6170283129 5407:S41|545950455f5452454528292e6d617463685479706573283629636f7079546172676574283129283129 5408:S38|545950455f5452454528292e6d617463685479706573283629636f7079546172676574283129 5409:C2,100|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002194bbfffc82f8001096fbfffc82d8000c96dbfffc82b8000896bbfffc38c400003ca002ad60a54ad0388300003c6002ad60634adc83180004801800007c0903a64e800420|@5412,1048575|64,3,@5410 76,3,@5411 5410:S2|746f 5411:S11|43616e2774206d61746368 5412:S37|545950455f5452454528292e6d61746368547970657328362963616e744d61746368283329 5413:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@5414,1048575| 5414:S37|545950455f5452454528292e6d61746368547970657328362963616e744d61746368283129 5415:S25|545950455f5452454528292e6d617463685479706573283629 5416:O11|@5418,@206,@4193,@4562,@4580,@4472,@4575,@4488,@5417,@4190,@5368 5417:O5|@5475,@4193,@4472,@4575,@4488 5418:C2,80|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021971bfffc94dbfffc973bfffc3b1b00083c0002ad60004c807c0803a64e800021833b00007f2803a63b7b000c4e800020|@5474,1048575|48,3,@5419 5419:C2,9312|7f2802a66339000239600054800d00187d6bd8107c0b004040a00010800d00247c0803a64e800021971bfffc949bfffc94bbfffc947bfffc82f80000973bfffc8317001c801800007c0803a64e80002182db001082b60000947bfffc807b00108315001c801800007c0803a64e800021947bfffc829b001882740000825300088232000c82110010807b000483100000801800007c0803a64e80002128030001418200183860000181fb00087de803a63b7b001c4e80002081fb001881cf0000814e0008812a000c81090028807b000483080000801800007c0803a64e80002128030001418209d080fb001880c7000080a600088085000c8064002883230008807b00043b190000801800007c0803a64e800021831b001882f8000082d7000882b6000c82950010947bfffc807b000483140000801800007c0803a64e800021280300014182001838600001827b000c7e6803a63b7b00204e800020827b001c82530000823200088211000c81f00028807b0004830f0000801800007c0803a64e800021280300014182090481db001c814e0000812a00088109000c80e80028807b000483070008801800007c0803a64e80002180db001c80a60000808500088064000c83230090807b00003b190000801800007c0803a64e800021947bfffc807b0008831b0018801800007c0803a64e800021831b002082f8000082d7000882b6000c82950028947bfffc83140000801800007c0803a64e8000212803000141820848827b002482530000823200088211000c81f00028807b0000830f0008801800007c0803a64e80002181db0024814e0000812a00088109000c38e30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000090e3000480db000890c3000094fbfffc83080098801800007c0803a64e80002128030001418200183860000180bb00187ca803a63b7b002c4e80002080bb002880850000806400088323000c807b000c83190088801800007c0803a64e8000212803000141820030809b0014807b00003b1b00283c0002ad600070fc7c0803a64e800021831b00187f0803a63b7b002c4e800020831b002882f8000082d7000882b6000c807b000083150090801800007c0803a64e800021829b002882740000825300088232000c8211001c947bfffc807b000c83100000801800007c0803a64e800021280300014182028881fb002c81cf0000814e0008812a000c8109001c807b000c83080008801800007c0803a64e80002180fb002c80c7000080a600088085000c8324001c947bfffc807b000483190000801800007c0803a64e8000212803000141820154831b003082f8000082d7000882b6000c8295001c807b000483140008801800007c0803a64e800021827b003082530000823200088211000c39e30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000081d2000491c30004815b00089143000095fbfffc83100094801800007c0803a64e800021813b00348109000080e8000880c7000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080a8000490a30004809b00189083000083060094801800007c0803a64e8000213c6002ad606349a4947bfffc80db000c80bb0018809b0004807b00083b1b00383c0002ad600088cc7c0803a64e80002138830000807b000c3b1b00343c0002ad600070fc7c0803a64e800021809b0010807b00183b1b00343c0002ad600070fc7c0803a64e800021833b00247f2803a63b7b00384e800020831b003082f8000082d7000882b6000c82950014807b000483140000801800007c0803a64e8000212803000141820030809b001c807b00083b1b00303c0002ad600070fc7c0803a64e800021827b00207e6803a63b7b00344e800020827b00308013fffc941bfffc807b0030831b002c801800007c0803a64e8000213a430000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003e2002ad62319ef09223000892430004821b002892030000831b0000833b0024801800007c0903a67f2803a63b7b00384e80042081fb002c81cf0000814e0008812a000c81090020807b000c83080000801800007c0803a64e800021280300014182031080fb002c80c7000080a600088085000c8064002083230008807b000c3b190000801800007c0803a64e800021831b002c82f8000082d7000882b6000c82950020947bfffc807b000483140000801800007c0803a64e80002128030001418201d8827b003082530000823200088211000c81f00020807b0004830f0008801800007c0803a64e8000213b1b00303c0002ad60009f0c7c0803a64e8000212c0300014082008081db0030800efffc941bfffc807b0030831b002c801800007c0803a64e80002139430000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003d2002ad6129a0349123000891430004811b002891030000831b0000833b0024801800007c0903a67f2803a63b7b00384e80042081db0030814e0000812a00088109000c38e30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080ca000490c3000480bb000890a3000094fbfffc83080094801800007c0803a64e800021809b003480640000832300088319000c82e30004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092e3000482db001892c3000083180094801800007c0803a64e80002182bb003482950000807b00008314000c801800007c0803a64e80002138830000807b000c3b1b00343c0002ad600070fc7c0803a64e800021809b0010807b00183b1b00343c0002ad600070fc7c0803a64e800021827b00247e6803a63b7b00384e800020827b003082530000823200088211000c81f00014807b0004830f0000801800007c0803a64e8000212803000141820030809b001c807b00083b1b00303c0002ad600070fc7c0803a64e80002181db00207dc803a63b7b00344e80002081db0030800efffc941bfffc807b0030831b002c801800007c0803a64e80002139430000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003d2002ad61299ef09123000891430004811b002891030000831b0000833b0024801800007c0903a67f2803a63b7b00384e80042080fb002c80c7000080a600088085000c8064001483230000807b000c3b190000801800007c0803a64e8000212803000141820030809b0008807b00103b1b002c3c0002ad600070fc7c0803a64e800021831b001c7f0803a63b7b00304e800020831b002c82f8000082d7000882b6000c82950014807b000083140000801800007c0803a64e8000212803000141820030809b0018807b00043b1b002c3c0002ad600070fc7c0803a64e800021827b001c7e6803a63b7b00304e800020827b002c8013fffc941bfffc807b002c831b0028801800007c0803a64e8000213a430000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003e2002ad62319ef09223000892430004821b002492030000831b0000833b0020801800007c0903a67f2803a63b7b00344e8004203ca002ad60a549a4809b0000807b0010831b0024833b00147f2803a63b7b00284bfff580807b00003b1b001c3c0002ad6000a0587c0803a64e80002181db000c7dc803a63b7b00204e80002080fb001880c7000080a600088085000c8064002483230000807b00043b190000801800007c0803a64e8000212803000141820bdc831b001882f8000082d7000882b6000c82950024807b000483140008801800007c0803a64e800021827b001882530000823200088211000c81f0001080030000941bfffc80030008941bfffc807b0008830f0000801800007c0803a64e80002128030001418200183860000181db00107dc803a63b7b00244e80002081db0020814e0000812a00088109000c80e80028807b000883070000801800007c0803a64e800021280300014182005080db002080a60000808500088064000c83230028807b000883190008801800007c0803a64e8000213b1b00203c0002ad6000a6647c0803a64e800021831b00107f0803a63b7b00244e80002080db002080a60000808500088064000c83230024807b000883190000801800007c0803a64e8000212803000141820648831b002082f8000082d7000882b6000c82950024807b000883140008801800007c0803a64e800021827b002082530000823200088211000c80030000941bfffc80030008941bfffc807b000883100008801800007c0803a64e80002181fb002881cf0000814e0008812a000c947bfffc807b000483090008801800007c0803a64e800021811b002c80e8000080c7000880a6000c947bfffc80050034941bfffc807b00088305006c801800007c0803a64e800021831b0000801800007c0803a64e800021280300014182000848000104809b003480640000832300088319000c807b000883180058801800007c0803a64e80002182fb003482d7000082b600088295000c8274001483130000801800007c0803a64e8000212803000141820008480000b0825b0034823200008211000881f0000c807b0008830f0058801800007c0803a64e80002181db0034814e0000812a00088109000c947bfffc807b000c83080054801800007c0803a64e80002180fb003880c70000809b001c83060018801800007c0803a64e80002180bb00388085000038a000038324001438830000807b00003b190000801800007c0803a64e80002180bb0030809b0020831b0038833b00287f2803a63b7b003c4bfff22c825b0034823200008211000881f0000c800f0034941bfffc807b0008830f006c801800007c0803a64e800021831b0000801800007c0803a64e80002128030001418200084800010481db0038814e0000812a00088109000c807b000883080058801800007c0803a64e80002180fb003880c7000080a600088085000c8324001483190000801800007c0803a64e8000212803000141820008480000b0831b003882f8000082d7000882b6000c807b000883150058801800007c0803a64e800021829b003882740000825300088232000c947bfffc807b000c83110054801800007c0803a64e800021821b003c81f00000809b0018830f0018801800007c0803a64e80002181db003c814e000038a0000338830000807b0000830a0014801800007c0803a64e80002180bb003438830000807b0028831b003c833b002c7f2803a63b7b00404bfff0e4807b0020831b0030801800007c0803a64e800021831b003882f8000082d7000882b6000c82950024947bfffc83140000801800007c0803a64e80002128030001418202c8827b003c82530000823200088211000c81f00024807b0000830f0008801800007c0803a64e80002181db003c814e0000812a00088109000c80030000941bfffc8063000883080008801800007c0803a64e80002180fb004080c7000080a600088085000c947bfffc80040034941bfffc8304006c801800007c0803a64e800021831b0000801800007c0803a64e8000212803000140820104807b0048832300008319000882f8000c807b000483170058801800007c0803a64e80002182db004882b60000829500088274000c8253001483120000801800007c0803a64e80002128030001408200b4823b00488211000081f0000881cf000c807b0004830e0058801800007c0803a64e800021815b0048812a00008109000880e8000c947bfffc807b000883070054801800007c0803a64e80002180db004c80a60000809b000c83050018801800007c0803a64e800021809b004c8324000038a0000338830000807b000083190014801800007c0803a64e8000213ca002ad60a549a438830000807b0038831b004c833b003c7f2803a63b7b00504bffef08807b0048832300008319000882f8000c80170040941bfffc807b00208317006c801800007c0803a64e80002182db004c82b60000829500088274000c947bfffc807b000c8313006c801800007c0803a64e8000213a430000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092430004823b000092230000831b0004801800007c0803a64e8000212803000141820030809b0034807b00103b1b00503c0002ad6000abf87c0803a64e800021821b00407e0803a63b7b00544e800020821b0050398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003de002ad61efae2091e3000881db001491c30004815b003c914300008310fffc833b0040801800007c0903a67f2803a63b7b00544e8004203ca002ad60a549a4809b0000807b0028831b003c833b002c7f2803a63b7b00404bffedb8831b002082f8000082d7000882b6000c82950020807b000883140000801800007c0803a64e800021280300014182025c827b002082530000823200088211000c81f00020807b0008830f0008801800007c0803a64e80002181db0020814e0000812a00088109000c947bfffc807b000483080008801800007c0803a64e80002180fb002480c7000080a600088085000c947bfffc80040034941bfffc8304006c801800007c0803a64e800021831b0000801800007c0803a64e800021280300014182000848000100807b002c832300008319000882f8000c807b000483170058801800007c0803a64e80002182db002c82b60000829500088274000c8253001483120000801800007c0803a64e8000212803000141820008480000ac823b002c8211000081f0000881cf000c807b0004830e0058801800007c0803a64e800021815b002c812a00008109000880e8000c947bfffc807b000883070054801800007c0803a64e80002180db003080a60000809b001483050018801800007c0803a64e800021809b00308324000038a0000338830000807b000083190014801800007c0803a64e80002180bb0028809b0018831b0030833b00207f2803a63b7b00344bffebf4823b00102c11000140820040821b002c81f00000809b0008807b0004830f0010801800007c0803a64e80002128030001418200183860000181db001c7dc803a63b7b00304e800020821b002c8010fffc941bfffc807b0018831b0028801800007c0803a64e80002139e30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003dc002ad61ceae4891c3000891e30004815b001c91430000831b0000833b0020801800007c0903a67f2803a63b7b00344e800420827b002082530000823200088211000c807b000083100008801800007c0803a64e80002181fb002081cf0000814e0008812a000c947bfffc80090034941bfffc8309006c801800007c0803a64e800021831b0000801800007c0803a64e800021280300014182000848000100811b002880e8000080c7000880a6000c807b000483050058801800007c0803a64e800021809b0028832400008319000882f8000c82d7001483160000801800007c0803a64e8000212803000141820008480000ac82bb002882950000827400088253000c807b000483120058801800007c0803a64e800021823b00288211000081f0000881cf000c947bfffc807b0008830e0054801800007c0803a64e800021815b002c812a0000809b001083090018801800007c0803a64e800021811b002c80e8000038a0000338830000807b000083070014801800007c0803a64e80002180bb0024809b0014831b002c833b001c7f2803a63b7b00304bffe9c882bb00288015fffc941bfffc807b0014831b0024801800007c0803a64e8000213a830000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003e6002ad62739ef09263000892830004825b001892430000831b0000833b001c801800007c0903a67f2803a63b7b00304e800420831b001882f8000082d7000882b6000c82950020807b000483140000801800007c0803a64e8000212803000141820600827b001882530000823200088211000c81f00020807b0004830f0008801800007c0803a64e80002181db0018814e0000812a00088109000c80e80010947bfffc807b000483070000801800007c0803a64e80002128030001418200183860000180db000c7cc803a63b7b00204e80002080db001c80a60000808500088064000c83230028807b000483190000801800007c0803a64e8000212803000141820050831b001c82f8000082d7000882b6000c82950028807b000483140008801800007c0803a64e8000213b1b001c3c0002ad6000a6647c0803a64e800021827b000c7e6803a63b7b00204e800020831b001c82f8000082d7000882b6000c82950024807b000483140000801800007c0803a64e8000212803000141820468827b001c82530000823200088211000c81f00024807b0004830f0008801800007c0803a64e80002181db001c814e0000812a00088109000c80030000941bfffc8063000883080008801800007c0803a64e80002180fb002080c7000080a600088085000c947bfffc80040034941bfffc8304006c801800007c0803a64e800021831b0000801800007c0803a64e800021280300014182000848000104807b0028832300008319000882f8000c807b000483170058801800007c0803a64e80002182db002882b60000829500088274000c8253001483120000801800007c0803a64e8000212803000141820008480000b0823b00288211000081f0000881cf000c807b0004830e0058801800007c0803a64e800021815b0028812a00008109000880e8000c947bfffc807b000883070054801800007c0803a64e80002180db002c80a60000809b000c83050018801800007c0803a64e800021809b002c8324000038a0000338830000807b000083190014801800007c0803a64e80002180bb002438830000807b0018831b002c833b001c7f2803a63b7b00304bffe664807b0010831b0020801800007c0803a64e800021823b00288211000081f0000881cf000c814e0024947bfffc830a0000801800007c0803a64e8000212803000141820264813b002c8109000080e8000880c7000c80a60024807b000083050008801800007c0803a64e800021809b002c832400008319000882f8000c80030000941bfffc8063000883170008801800007c0803a64e80002182db003082b60000829500088274000c947bfffc80130034941bfffc8313006c801800007c0803a64e800021831b0000801800007c0803a64e800021280300014182001838600001825b00287e4803a63b7b003c4e800020825b0038823200008211000881f0000c807b0004830f0058801800007c0803a64e80002181db0038814e0000812a00088109000c80e8001483070000801800007c0803a64e80002128030001408200b880db003880a60000808500088064000c83230058807b00043b190000801800007c0803a64e800021831b003882f8000082d7000882b6000c947bfffc807b000883150054801800007c0803a64e800021829b003c82740000809b000c83130018801800007c0803a64e800021825b003c8232000038a0000338830000807b000083110014801800007c0803a64e8000213ca002ad60a549a438830000807b0028831b003c833b002c7f2803a63b7b00404bffe47080db00082c0600014082004880bb00388085000080640010809b001c3b230000807b00143b190000801800007c0803a64e800021280300014182001838600001831b00287f0803a63b7b003c4e80002080bb0038398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003c8002ad6084ae4890830008833b000c93230004831b0024930300008305fffc833b0028801800007c0903a67f2803a63b7b003c4e8004203ca002ad60a549a4809b0000807b0018831b002c833b001c7f2803a63b7b00304bffe39c827b001c8013fffc941bfffc807b0008831b0018801800007c0803a64e8000213a430000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003e2002ad62319ef09223000892430004821b000c92030000831b0000833b0010801800007c0903a67f2803a63b7b00244e800420827b001882530000823200088211000c81f00018807b0004830f0000801800007c0803a64e800021280300014182029081db0018814e0000812a00088109000c80e80018807b000483070008801800007c0803a64e80002180db001880a60000808500088324000c8319001080030000941bfffc80030004941bfffc807b000883180000801800007c0803a64e80002128030001418200183860000182fb00107ee803a63b7b00244e80002082fb002082d7000082b600088295000c82740028807b000883130000801800007c0803a64e8000212803000141820050825b0020823200008211000881f0000c81cf0028807b0008830e0008801800007c0803a64e8000213b1b00203c0002ad6000a6647c0803a64e800021815b00107d4803a63b7b00244e800020825b0020823200008211000881f0000c81cf0024807b0008830e0000801800007c0803a64e8000212803000141820058815b0020812a00008109000880e8000c80c70024807b000883060008801800007c0803a64e80002180830008806300003b1b00203c0002ad6000ae747c0803a64e80002180bb00107ca803a63b7b00244e800020815b0020812a00008109000880e8000c80c70018807b000883060000801800007c0803a64e800021280300014182006880bb002080850000806400088323000c83190018807b000883180008801800007c0803a64e80002180030004941bfffc80bb001c80830000807b0008831b00244bffe0f980bb001c809b0000807b0004831b0024833b00147f2803a63b7b00284bffe0e080bb00208005fffc941bfffc807b000c831b001c801800007c0803a64e80002138830000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003f2002ad63399ef09323000890830004831b001093030000831b0000833b0014801800007c0903a67f2803a63b7b00284e80042081db0018814e0000812a00088109000c80e80014807b000483070000801800007c0803a64e800021280300014182020880db001880a60000808500088064000c83230010807b000083190000801800007c0803a64e800021280300014182001838600001831b00087f0803a63b7b001c4e800020831b001882f8000082d7000882b6000c82950028807b000083140000801800007c0803a64e8000212803000141820050827b001882530000823200088211000c81f00028807b0000830f0008801800007c0803a64e8000213b1b00183c0002ad6000a6647c0803a64e80002181db00087dc803a63b7b001c4e800020827b001882530000823200088211000c81f00024807b0000830f0000801800007c0803a64e800021280300014182005881db0018814e0000812a00088109000c80e80024807b000083070008801800007c0803a64e80002180830008806300003b1b00183c0002ad6000ae747c0803a64e80002180db00087cc803a63b7b001c4e80002081db0018814e0000812a00088109000c80e80014807b000083070000801800007c0803a64e80002128030001418200183860000180db00087cc803a63b7b001c4e80002080db00188006fffc941bfffc807b0004831b0014801800007c0803a64e80002138a30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003c8002ad60849ef09083000890a30004833b000893230000831b0000833b000c801800007c0903a67f2803a63b7b00204e80042080db001880a60000808500088064000c8323001c807b000483190008801800007c0803a64e800021831b001882f8000082d7000882b6000c82950010947bfffc807b000483140000801800007c0803a64e800021280300014182001838600001827b000c7e6803a63b7b00204e800020827b001c82530000823200088211000c81f00028807b0004830f0000801800007c0803a64e800021280300014182005081db001c814e0000812a00088109000c80e80028807b000483070008801800007c0803a64e8000213b1b001c3c0002ad6000a6647c0803a64e80002180db000c7cc803a63b7b00204e80002081db001c814e0000812a00088109000c80e80024807b000483070000801800007c0803a64e800021280300014182005880db001c80a60000808500088064000c83230024807b000483190008801800007c0803a64e80002180830008806300003b1b001c3c0002ad6000ae747c0803a64e800021831b000c7f0803a63b7b00204e80002080db001c80a60000808500088064000c8323001c807b000483190000801800007c0803a64e800021280300014182006c831b001c82f8000082d7000882b6000c8295001c807b000483140008801800007c0803a64e800021827b0014967bfffc80db000880bb000c38830000807b00043b1b00203c0002ad600088cc7c0803a64e80002138600001825b000c7e4803a63b7b00204e800020831b001c8018fffc941bfffc807b0008831b0018801800007c0803a64e8000213ae30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003ec002ad62d69ef092c3000892e3000482bb000c92a30000831b0000833b0010801800007c0903a67f2803a63b7b00244e800420|@5473,1048575|760,3,@5420 1188,3,@5404 1220,3,@5441 1248,3,@5420 1276,3,@5420 1368,3,@5420 1472,3,@5458 1712,3,@5459 1808,3,@5461 2076,3,@5420 2104,3,@5420 2196,3,@5420 2300,3,@5458 2416,3,@5420 2508,3,@5420 2612,3,@5458 2664,3,@5404 2708,3,@5462 3008,3,@5464 4320,3,@5404 4528,3,@5466 4600,3,@5469 4656,3,@5404 5288,3,@5470 5772,3,@5458 6076,3,@5464 7032,3,@5404 7188,3,@5470 7244,3,@5404 7352,3,@5458 7668,3,@5464 7800,3,@5471 8052,3,@5458 8312,3,@5464 8444,3,@5471 8616,3,@5458 8872,3,@5464 9004,3,@5471 9152,3,@5441 9260,3,@5458 5420:C2,1320|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000082d70000398000083bbdffdc7c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003e8002ad6294764092950000829600049295001c8277fffc927500188258fff4925500148238fff8923500108218fffc9215000c81f6000891f500089075000481cf000c973bfffc971bfffc947bfffc949bfffc96bbfffc830e0090801800007c0803a64e800021815b000c812a00008109000080e8000880c7000c80a6001c947bfffc83050000801800007c0803a64e800021280300014182005c809b001080640000832300008319000882f8000c82d7001c807b000083160008801800007c0803a64e8000213ca002ad60a549a4809b0008807b000082bb0010831500003c0002ad60004c807c0803a64e8000214800008c809b001080640000832300008319000882f8000c82d70020807b000083160000801800007c0803a64e800021280300014182005882bb00108295000082740000825300088232000c82110020807b000083100008801800007c0803a64e8000213ca002ad60a549a4809b0008807b000081fb0010830f00003c0002ad60004c807c0803a64e80002182bb00108295000082740000825300088232000c807b000c83110088801800007c0803a64e800021280300014182000848000094821b001081f0000081cf0000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003d4002ad614a7c3491430000813b000491230004830e0028801800007c0803a64e80002139030000807b00083b080000801800007c0803a64e80002138e30000386000033b070000801800007c0803a64e800021280300014182000848000104807b00083b1b00143c0002ad60007d787c0803a64e80002128030001418200d0821b001081f0000081cf0000814e0008812a000c807b000c83090088801800007c0803a64e80002128030001418200103d0002ad610880d04800000c3d0002ad6108810480fb001080c70000951bfffc8006fffc941bfffc8007fff4941bfffc8067fffc8307fff8801800007c0803a64e80002138a30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000809b00089083000890a30004833b000093230000831b0004833b0020801800007c0903a67f2803a63b7b00244e80042038600001821b00147e0803a63b7b00184e80002080db001080a6000080850000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00003f2002ad6339813893230000830400049303000c82e4000892e3000882c4002492c3000482b7000c947bfffc807b001083150084801800007c0803a64e80002128030001418200bc829b0014827400008253000080bb00003c8002ad60848818807b000c83120020801800007c0803a64e8000213a20ffff7c11184040820084821b001481f00000800ffffc941bfffc8010fff4941bfffc8070fffc8310fff8801800007c0803a64e80002139c30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003d4002ad614a88789143000891c30004813b000091230000831b0004801800007c0803a64e8000214800000c947bfffc947bfffc829b001c8274000082530000823200088211000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000081fb001491e3000481db001891c3000083100094833b0020801800007c0903a67f2803a63b7b00244e800420|@5440,1048575|76,3,@5421 276,3,@5404 300,3,@5419 416,3,@5404 440,3,@5419 556,3,@5424 660,3,@5428 732,3,@5430 744,3,@5431 956,3,@5432 1044,3,@5436 1168,3,@5439 5421:C2,1376|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e80002082f8000882d7000c82b60028973bfffc971bfffc949bfffc3864000083150000801800007c0803a64e80002128030001418204ec829b0004827400088253000c82320028807b000083110008801800007c0803a64e800021821b000481f0000881cf000c947bfffc80700004830e0080801800007c0803a64e800021815b0008812a00088109000c947bfffc807b000483080080801800007c0803a64e80002180fb00007ceb1838556bf80140a20010800d00347c0803a64e8000217c0718004080000c38c700004800000838c3000080bb000c808500088064000c94dbfffc8323008c806500043b190000801800007c0803a64e800021280300014182000848000030831b001082f8000882d7000c807b00088316008c801800007c0803a64e80002128030001408200084800008482fb001082d7000882b6000c807b000883150090801800007c0803a64e800021829b0010827400088253000c82320020947bfffc83110000801800007c0803a64e8000212803000141820030821b001481f0000881cf000c814e0020807b0000830a0008801800007c0803a64e8000213b000001480000143b0000034800000c3b000001947bfffc82bb0014829500088274000c971bfffc807b001083130080801800007c0803a64e800021825b00087c6b9378556bf80140a20010800d00347c0803a64e8000217c0390004182000848000034823b00188211000881f0000c807b0010830f008c801800007c0803a64e80002181db00007c0370404082000848000280823b00188211000881f0000c807b0010830f0088801800007c0803a64e800021280300014182008081db0018800e0018941bfffc800e0014941bfffc806e000c830e0010801800007c0803a64e80002139430000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003d2002ad61297bbc9123000891430004811b000091030000831b0004801800007c0803a64e800021480001e481db0018814e0008812a000c807b001083090084801800007c0803a64e800021811b001880e8000880c7000c80a6002838830000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d0000833b0000932300103b0000019303000c9083000882fb000892e3000482c8001c92c3000080050004941bfffc8306009c801800007c0803a64e800021831b0000801800007c0803a64e80002182bb001c829500088274000c82530028947bfffc80130094941bfffc83120000801800007c0803a64e8000212803000141820030821b002481f0000881cf000c814e0028807b0004830a0008801800007c0803a64e8000213a230000480000183c6002a160630a30800d00287c0803a64e800021813b00248109000880e8000c963bfffc807b002083070090801800007c0803a64e80002138c30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000090c3000480bb000090a30000831b0004801800007c0803a64e800021809b0028806400088323000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000831b00089303000482fb002092e3000083190094801800007c0803a64e8000213b7b00084800000c947bfffc947bfffc815b0020812a00088109000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080ea000490e3000480db001890c3000083080098801800007c0803a64e8000216863000280bb00247ca803a63b7b00284e80002038600003829b00087e8803a63b7b000c4e800020|@5423,1048575|732,3,@5422 1036,3,@341 5422:S44|2854797065207661726961626c65206973206672656520696e20737572726f756e64696e672073636f706529 5423:S57|545950455f5452454528292e747970654d617463682834296d6174636828332961737369676e283229636865636b466f724c6f6f7073283229 5424:C2,80|7f2802a6633900023ae30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003ec002ad62d67ca092c3000082d8000492c3000892e300047f2803a64e800020|@5427,983041|48,3,@5425 5425:C2,52|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000218098000483180008801800007c0903a64e800420|@5426,1048575| 5426:S60|545950455f5452454528292e747970654d617463682834296d6174636828332961737369676e283229636865636b466f724c6f6f7073283129283129 5427:S57|545950455f5452454528292e747970654d617463682834296d6174636828332961737369676e283229636865636b466f724c6f6f7073283129 5428:C2,760|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8fffc82d7000082b60000829500088274000c82530024973bfffc971bfffc947bfffc83120000801800007c0803a64e80002128030001418201b4823b00048211fffc81f0000081cf0000814e0008812a000c81090024807b000083080008801800007c0803a64e80002180fb000480c7fffc80a6000080850000832400088319000c80030000941bfffc8063000883180008801800007c0803a64e80002182fb000882d7fffc82b6000082950000827400088253000c947bfffc83120058801800007c0803a64e800021823b000c8211fffc81f0000081cf0000814e0008812a000c8109001483080000801800007c0803a64e80002128030001418200183860000380fb00107ce803a63b7b00144e80002080fb000c80c7fffc80a6000080850000806400088323000c8004001c941bfffc807b000483190058801800007c0803a64e800021831b001082f8fffc82d7000082b60000829500088274000c947bfffc807b000883130054801800007c0803a64e800021825b00148232fffc8211000081f00000809b000c830f0018801800007c0803a64e80002181db0014814efffc812a00008109000038a0000338830000807b000083080014801800007c0803a64e800021831b0004801800007c0803a64e800021831b0014833b00187f2803a63b7b001c4bfffe00823b00048211fffc81f0000081cf0000814e0008812a000c81090028807b000083080000801800007c0803a64e80002128030001418200a480fb000480c7fffc80a6000080850000806400088323000c83190028807b000083180008801800007c0803a64e80002182fb000482d7fffc82b6000082950000827400088253000c3a230000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008217fff8920300049223000083120098801800007c0803a64e8000216863000281fb00087de803a63b7b000c4e8000203860000380fb00087ce803a63b7b000c4e800020|@5429,1048575| 5429:S58|545950455f5452454528292e747970654d617463682834296d6174636828332961737369676e283229636865636b5265616c4572726f72283129 5430:S42|2843616e6e6f7420756e6966792077697468206578706c696369742074797065207661726961626c6529 5431:S44|2854797065207661726961626c6520746f20626520756e6966696564206f636375727320696e207479706529 5432:C2,1352|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000882d7000c973bfffc971bfffc947bfffc83160084801800007c0803a64e80002128030001418200183860000382bb00087ea803a63b7b000c4e80002082bb0004829500088274000c807b000083130088801800007c0803a64e80002128030001418200183860ffff825b00087e4803a63b7b000c4e800020825b0004823200088211000c807b000083100080801800007c0803a64e80002181fb000481cf0008814e000c947bfffc807b0004830a008c801800007c0803a64e800021813b00088109000880e8000c80c7002838a30000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d000090a30010388000019083000c3b20000393230008831b00009303000482e9000c92e3000080060004941bfffc8307009c801800007c0803a64e800021831b0000801800007c0803a64e80002182db000c82b600088295000c947bfffc807b000c83140090801800007c0803a64e800021827b0010825300088232000c3a030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000081fb000091e3000481db000c91c30000961bfffc83110094801800007c0803a64e800021815b0014812a00088109000c80e80020807b000083070000801800007c0803a64e800021280300014182027480db001480a600088085000c8064002083230008807b00003b190000801800007c0803a64e8000213b1b00183c0002ad6000869c7c0803a64e8000212c030001408200183860ffff831b00187f0803a63b7b001c4e800020830300042c1800014082011882fb001482d7000882b6000c8295002880030000941bfffc80150094941bfffc807b000c83140000801800007c0803a64e8000212803000141820030825b001c823200088211000c81f00028807b000c830f0008801800007c0803a64e8000213a630000480000183c6002a160630a30800d00287c0803a64e80002181db001c814e0008812a000c967bfffc807b00088309004c801800007c0803a64e800021811b002038a00001809b000883080004801800007c0803a64e80002138e30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000090e3000480db000090c30000831b0004801800007c0803a64e8000213860000380bb00247ca803a63b7b00284e80002082fb001482d7000882b6000c82950028947bfffc80150094941bfffc807b000c83140000801800007c0803a64e8000212803000141820030825b001c823200088211000c81f00028807b000c830f0008801800007c0803a64e8000213a630000480000183c6002a160630a30800d00287c0803a64e80002181db001c814e0008812a000c81090020967bfffc807b000883080004801800007c0803a64e80002138e30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000090e3000480db000090c30000831b0004801800007c0803a64e8000213860000380bb00247ca803a63b7b00284e80002080db001480a600088085000c8064002880040094941bfffc83230000807b00083b190000801800007c0803a64e800021280300014182003082fb001882d7000882b6000c82950028807b000883140008801800007c0803a64e8000213b030000480000183c6002a160630a30800d00287c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000827b00049263000493030000831b0000801800007c0803a64e80002138600003825b001c7e4803a63b7b00204e800020|@5435,1048575|568,3,@5433 728,3,@341 1000,3,@341 1248,3,@341 5433:C2,216|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e80002082f8fffc82d7000882b6000c973bfffc971bfffc80030000941bfffc80030004941bfffc807b000483150064801800007c0803a64e8000212803000141820054807b0000831b00084bffff89398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a9d0004919d000090740004827b00049274000038740000825b000c7e4803a63b7b00104e800020807b0000831b0008833b000c7f2803a63b7b00104bffff34|@5434,1048575| 5434:S62|545950455f5452454528292e747970654d617463682834296d6174636828332961737369676e28322963616e4d6b4571547628312966696c746572283129 5435:S53|545950455f5452454528292e747970654d617463682834296d6174636828332961737369676e28322963616e4d6b45715476283129 5436:O1|@5437 5437:C2,8|3860ffff4e800020|@5438,524289| 5438:S44|545950455f5452454528292e747970654d617463682834296d6174636828332961737369676e283229283129 5439:S24|28526571756972657320657175616c697479207479706529 5440:S41|545950455f5452454528292e747970654d617463682834296d6174636828332961737369676e283229 5441:C2,532|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021971bfffc94dbfffc94bbfffc80030008941bfffc80030000941bfffc80040008941bfffc80040000941bfffc973bfffc80840004806300043b1b001c3c0002ad60008afc7c0803a64e800021833b000c281900014182007c831b000428180001418200084800005882fb00082c170001408200084800004880170004941bfffc807700003b1b00203c0002ad60009b9c7c0803a64e80002182fb00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffffb4807b001482db00007ec803a63b7b00244e800020831b0004281800014182007828190001418200084800005882fb00102c170001408200084800004880170004941bfffc807700003b1b00203c0002ad60009b9c7c0803a64e80002182fb00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffffb4807b001882db00007ec803a63b7b00244e80002082fb001c82d7000082b60000829500088274000c8253001c821b00082c1000014082000c823b00104800002839e30000807b00103b1b001c3c0002ad60009e107c0803a64e8000213a230000386f000039c30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00009223000891c30004394000019143000083120004833b0000801800007c0903a67f2803a63b7b00244e800420|@5457,1048575|92,3,@5442 168,3,@5453 296,3,@5453 424,3,@5456 5442:C2,1992|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c030001408201b42c0400014082000c386000014e8000208064000082f8fff028170001418200c882d8000082b60000973bfffc949bfffc80030000941bfffc8015fffc941bfffc8018fff8941bfffc8078fffc83180004801800007c0803a64e800021947bfffc809b000c3c6002ad606392e03c0002a1600074a87c0803a64e8000213c8002ad608492f03c0002a1600074a87c0803a64e8000213a830000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092830008827b000092630004825b000492430000831b0008801800007c0803a64e800021480000bc973bfffc949bfffc971bfffc2c040001408200084800009882c4000082bb000080040004941bfffc80160000941bfffc8295fff42c140001408200084800004c80140004941bfffc809b000480740000831b000c3c0002ad600093047c0803a64e800021829b00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffffb0809b00043b7b0008800d00187c1b004040a00010800d00207c0803a64e8000214bffff64947bfffc947bfffc947bfffc807b001082db00147ec803a63b7b00184e80002082e300002c040001408201a082d8ffe828160001418200c882b8000082950000973bfffc947bfffc80170000941bfffc8014fffc941bfffc8018fff8941bfffc8078fffc83180004801800007c0803a64e800021947bfffc809b000c3c6002ad606392e03c0002a1600074a87c0803a64e8000213c8002ad608492f03c0002a1600074a87c0803a64e8000213a630000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092630008825b000092430004823b000492230000831b0008801800007c0803a64e800021480000bc973bfffc947bfffc971bfffc2c030001408200084800009882a30000829b000080030004941bfffc80150000941bfffc8274ffec2c130001408200084800004c80130004941bfffc809b000480730000831b000c3c0002ad600093047c0803a64e800021827b00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffffb0807b00043b7b0008800d00187c1b004040a00010800d00207c0803a64e8000214bffff64947bfffc947bfffc947bfffc807b001082bb00147ea803a63b7b00184e80002082c400003a7900003a5800003a2300003a04000081f7000081d700048156000081360004388a0000386f00003c0002aa6000da587c0803a64e8000212c0300014082009c967bfffc965bfffc80110000941bfffc80110004941bfffc80100004941bfffc80b2000438890000386e000081120000830800003c0002ad60004c807c0803a64e800021809b0000807b0004831b000c4bfffbed398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138fd0004919d00009067000480db000890c700003867000080bb00107ca803a63b7b00144e800020546bf80140a20010800d00347c0803a64e8000212c030001408001ac8112ffe828080001418200d480f2000080c70000967bfffc963bfffc95fbfffc8006fffc941bfffc8012fff8941bfffc8072fffc83120004801800007c0803a64e800021947bfffc809b000c3c6002ad606392e03c0002a1600074a87c0803a64e8000213c8002ad608492f03c0002a1600074a87c0803a64e80002138a30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000090a30008809b000090830004833b000493230000831b0008801800007c0803a64e800021807b0010831b00147f0803a63b7b00184e800020967bfffc965bfffc961bfffc80110000941bfffc95fbfffc80110004941bfffc80f2ffec2c070001408200084800004c80070004941bfffc809b000880670000831b00143c0002ad600093047c0803a64e80002180fb00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffffb0809b000c807b0000831b00104bfffa29398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138dd0004919d00009066000480bb000890a6000038660000809b00147c8803a63b7b00184e8000208112fff028080001418200d480f2000080c70000967bfffc961bfffc955bfffc8006fffc941bfffc8012fff8941bfffc8072fffc83120004801800007c0803a64e800021947bfffc809b000c3c6002ad606392e03c0002a1600074a87c0803a64e8000213c8002ad608492f03c0002a1600074a87c0803a64e80002138a30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000090a30008809b000090830004833b000493230000831b0008801800007c0803a64e800021807b0010831b00147f0803a63b7b00184e800020967bfffc965bfffc963bfffc80100000941bfffc955bfffc80100004941bfffc80f2fff42c070001408200084800004c80070004941bfffc809b000880670000831b00143c0002ad600093047c0803a64e80002180fb00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffffb0809b0000807b000c831b00104bfff881398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138dd0004919d00009066000480bb000890a6000038660000809b00147c8803a63b7b00184e800020|@5452,1048575|140,3,@5443 148,3,@511 164,3,@5444 172,3,@511 352,3,@5445 564,3,@5443 572,3,@511 588,3,@5444 596,3,@511 776,3,@5445 940,3,@4502 1016,3,@5419 1220,3,@5443 1228,3,@511 1244,3,@5444 1252,3,@511 1432,3,@5445 1644,3,@5443 1652,3,@511 1668,3,@5444 1676,3,@511 1856,3,@5445 5443:S7|284669656c6420 5444:S9|206d697373696e6729 5445:C2,952|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000082d7000082b60000829500088274000c973bfffc971bfffc947bfffc949bfffc83130080801800007c0803a64e800021825b0008823200008211000081f0000081cf0008814e000c947bfffc807b0008830a0084801800007c0803a64e800021813b000c8109000080e8000080c7000080a600088085000c947bfffc807b000c83040088801800007c0803a64e800021833b00108319000082f8000082d7000082b600088295000c947bfffc807b00108314008c801800007c0803a64e800021827b001482530000823200008211000081f0000881cf000c814e002839230000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d000091230010811b00009103000c80fb000490e3000880db000890c3000480b0000490a30000800a0004941bfffc830e009c801800007c0803a64e800021831b0000801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021389d0004919d000090640004807b001090640000949bfffc833b001c8319000082f8000082d7000082b600088295000c807b001883140090801800007c0803a64e800021827b001c82530000823200008211000081f0000881cf000c814e001c947bfffc830a0000801800007c0803a64e8000212803000141820148813b00208109000080e8000080c7000080a600088085000c8064001c83230008807b00003b190000801800007c0803a64e800021830300002c180001408200e082fb002082d7000082b6000082950000827400088253000c8232001c81f2009481d10004806300043b1b00243c0002ad600096d87c0803a64e80002139430000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000392000019123000891430004390000019103000095fbfffc3b0e0000801800007c0803a64e80002138e30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000090e3000480db002090c30000831b0000833b0028801800007c0903a67f2803a63b7b002c4e800420806300043b1b00243c0002ad600098f87c0803a64e80002182fb00247ee803a63b7b00284e800020813b00208109000080e8000080c7000080a6000880850018398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003f2002ad63399ad8932300083f0002a06318c7ac9303000482e4000092e30000800d00287c0803a64e800021|@5451,1048575|632,3,@5446 816,3,@5448 908,3,@5450 920,3,@227 5446:C2,428|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c03000140820040398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003ae0000192e3000482f8ffe092e300007f2803a64e80002082e300003a7900003a5800003a370000820300048092fff4807700003c0002aa6000da587c0803a64e8000212c0300014082003c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021389d0004919d00009204000492240000386400007e6803a64e800020546bf80140a20010800d00347c0803a64e8000212c03000140800060967bfffc965bfffc963bfffc387000003b1200004bffff01398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021389d0004919d000090640004807b00009064000038640000833b00087f2803a63b7b000c4e800020398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021389d0004919d00009204000492240000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000908300048332ffe0932300007e6803a64e800020|@5447,1047555|128,3,@4502 5447:S78|545950455f5452454528292e747970654d617463682834296d61746368283329756e6966795265636f7264732835296164644669656c64546f47656e65726963283229616464456e747279283129 5448:C2,360|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e80002082e300003a7900003a58000082370000820300048092fff4387100003c0002aa6000da587c0803a64e8000212c03000140820010386000017e6803a64e800020546bf80140a20010800d00347c0803a64e8000212c03000140800018387000003b1200003b3300007f2803a64bffff6c81f2fffc81cf0000814e0000967bfffc963bfffc800afffc941bfffc800ffff8941bfffc806ffffc830f0004801800007c0803a64e800021947bfffc809b000c3c6002ad606392e03c0002a1600074a87c0803a64e8000213c8002ad608492f03c0002a1600074a87c0803a64e80002139230000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000091230008811b00009103000480fb000490e30000831b0008833b0010801800007c0903a67f2803a63b7b00144e800420|@5449,1048575|76,3,@4502 224,3,@5443 232,3,@511 248,3,@5444 256,3,@511 5449:S82|545950455f5452454528292e747970654d617463682834296d61746368283329756e6966795265636f7264732835296164644669656c64546f47656e65726963283229636865636b456e7472696573283129 5450:S40|6164644669656c64546f47656e657269633a204e6f742061206c6162656c6c6564207265636f7264 5451:S67|545950455f5452454528292e747970654d617463682834296d61746368283329756e6966795265636f7264732835296164644669656c64546f47656e65726963283229 5452:S63|545950455f5452454528292e747970654d617463682834296d61746368283329756e6966795265636f7264732835296d617463684c6162656c6c6564283229 5453:C2,484|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000082d7000082b60000829500088274000c973bfffc971bfffc947bfffc83130090801800007c0803a64e800021825b0004823200008211000081f0000081cf0008814e000c812a001c947bfffc83090000801800007c0803a64e80002128030001418200f4811b000880e8000080c7000080a60000808500088064000c8323001c807b000083190008801800007c0803a64e800021831b000882f8000082d7000082b60000829500088274000c8253001c82230004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003a000001920300089223000439e0000391e3000080130094941bfffc83120004801800007c0803a64e80002139c30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000091c30004815b000891430000831b0000833b0010801800007c0903a67f2803a63b7b00144e800420811b000880e8000080c7000080a600008085000880640018398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213b3d0004919d00003f0002ad63189d9c931900083ee002a062f7c7ac92f9000482c3000092d9000038790000800d00287c0803a64e800021|@5455,1048575|436,3,@5454 448,3,@227 5454:S36|667265657a6547656e657269633a204e6f742061206c6162656c6c6564207265636f7264 5455:S63|545950455f5452454528292e747970654d617463682834296d61746368283329756e6966795265636f726473283529667265657a6547656e65726963283129 5456:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c8078ffec4e800020973bfffc971bfffc80030000941bfffc806300044bffffbd398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b00009319000038790000833b00087f2803a63b7b000c4e800020|@468,786433| 5457:S47|545950455f5452454528292e747970654d617463682834296d61746368283329756e6966795265636f726473283529 5458:S20|28496e636f6d70617469626c6520747970657329 5459:C2,216|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e80002082f8000082d70000973bfffc971bfffc80030000941bfffc80030004941bfffc8098ffd0807b000483160010801800007c0803a64e8000212803000141820054807b0000831b00084bffff89398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d000090750004829b00049295000038750000827b000c7e6803a63b7b00104e800020807b0000831b0008833b000c7f2803a63b7b00104bffff34|@5460,1048575| 5460:S44|545950455f5452454528292e747970654d617463682834296d61746368283329696e74657273656374283229 5461:S27|28496e636f6d70617469626c65206f7665726c6f6164696e677329 5462:C2,1476|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000082d7000082b600088295000c973bfffc971bfffc947bfffc83140088801800007c0803a64e8000212803000141820534827b000482530000823200008211000881f0000c81cf00248013ffe8941bfffc807b0000830e0000801800007c0803a64e80002128030001418204b8815b0008812a00008109000080e8000880c7000c80a60024807b000083050008801800007c0803a64e800021809b0008832400008319000082f8000882d7000c80030000941bfffc8063000883160008801800007c0803a64e80002182bb000c8295000082740000825300088232000c947bfffc80110034941bfffc8311006c801800007c0803a64e800021831b0000801800007c0803a64e800021280300014182000848000060821b001481f0000081cf0000814e0008812a000c807b000483090058801800007c0803a64e800021811b001480e8000080c7000080a600088085000c8324001483190000801800007c0803a64e8000212803000140820008480002c4821b00148070ffe88310fff8801800007c0803a64e80002181fb001481cf0000814e0000812a00088109000c80e80024947bfffc83070000801800007c0803a64e800021280300014182023880db001880a6000080850000806400088323000c83190024807b000083180008801800007c0803a64e80002182fb001882d7000082b60000829500088274000c80030000941bfffc8063000883130008801800007c0803a64e800021825b001c823200008211000081f0000881cf000c947bfffc800e0034941bfffc830e006c801800007c0803a64e800021831b0000801800007c0803a64e800021280300014182000848000060815b0024812a00008109000080e8000880c7000c807b000483060058801800007c0803a64e80002180bb002480850000832400008319000882f8000c82d7001483160000801800007c0803a64e800021280300014082000848000044815b0024806affe8830afff8801800007c0803a64e80002138830000807b0020831b0024833b00283c0002ad600070fc7c0903a67f2803a63b7b002c4e80042082bb00248295000082740000825300088232000c8015ffec941bfffc8013001c941bfffc807b000c83110058801800007c0803a64e800021821b002c81f0000081cf0000814e0008812a000c947bfffc807b001083090054801800007c0803a64e800021811b003080e8000080c70000809b001483060018801800007c0803a64e80002180bb0030808500008324000038a0000338830000807b000083190014801800007c0803a64e800021831b0004801800007c0803a64e8000213ca002ad60a549a438830000807b0008831b003083180000833b00343c0002ad60004c807c0903a67f2803a63b7b00384e80042080db00188066ffe88306fff8801800007c0803a64e80002138830000807b0014831b0018833b001c3c0002ad600070fc7c0903a67f2803a63b7b00204e800420831b001482f8000082d7000082b600088295000c8018ffec941bfffc8016001c941bfffc807b000c83140058801800007c0803a64e800021827b001c82530000823200008211000881f0000c947bfffc807b0010830f0054801800007c0803a64e80002181db0020814e0000812a0000809b001483090018801800007c0803a64e800021811b002080e8000080c7000038a0000338830000807b000083060014801800007c0803a64e800021831b0004801800007c0803a64e80002180bb002080a5fff838830000807b0008833b002083190000833b00243c0002ad60004c807c0903a67f2803a63b7b00284e800420815b0008806affe8830afff8801800007c0803a64e80002138830000807b0004831b0008833b000c3c0002ad600070fc7c0903a67f2803a63b7b00104e800420827b00048073ffe88313fff8801800007c0803a64e80002138830000807b0000831b0004833b00083c0002ad600070fc7c0903a67f2803a63b7b000c4e800420|@5463,1048575|780,3,@5420 992,3,@5404 1020,3,@5419 1084,3,@5420 1324,3,@5419 1388,3,@5420 1452,3,@5420 5463:S34|545950455f5452454528292e747970654d617463682834296d617463682833292f34 5464:C2,1356|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000082d7000082b600088295000c973bfffc971bfffc83140088801800007c0803a64e8000212803000141820410827b000082530000823200008211000881f0000c81cf00248013ffec941bfffc807b0000830e0000801800007c0803a64e80002128030001418202e0815b0004812a00008109000080e8000880c7000c80a60024807b000083050008801800007c0803a64e800021809b0004832400008319000082f8000882d7000c80030000941bfffc8063000883160008801800007c0803a64e80002182bb00088295000082740000825300088232000c947bfffc80110034941bfffc8311006c801800007c0803a64e800021831b0000801800007c0803a64e800021280300014182000848000060821b001081f0000081cf0000814e0008812a000c807b000483090058801800007c0803a64e800021811b001080e8000080c7000080a600088085000c8324001483190000801800007c0803a64e8000212803000140820008480000f4821b00108070ffe88310fff8801800007c0803a64e80002181fb001081cf0000814e0000812a00088109000c80e80028947bfffc83070000801800007c0803a64e800021280300014182007480db001480a6000080850000806400088323000c83190028807b000083180008801800007c0803a64e80002182fb0014947bfffc8077ffec8317fff8801800007c0803a64e80002138830000807b0000831b0018833b001c3c0002ad600070fc7c0903a67f2803a63b7b00204e80042080db00143ca002ad60a549a4809b00008066ffec83060000833b00183c0002ad60004c807c0903a67f2803a63b7b001c4e800420831b001082f8000082d7000082b600088295000c8016001c941bfffc807b000883140058801800007c0803a64e800021827b001482530000823200008211000881f0000c947bfffc807b000c830f0054801800007c0803a64e80002181db0018814e0000812a0000809b001083090018801800007c0803a64e800021811b001880e8000080c7000038a0000338830000807b000083060014801800007c0803a64e800021831b0004801800007c0803a64e80002180bb00188085ffe88325fff838b90000831b001883180000833b001c3c0002ad60004c807c0903a67f2803a63b7b00204e800420815b0004806affe8830afff8801800007c0803a64e800021813b00048109000080e8000080c7000880a6000c80850028947bfffc83040000801800007c0803a64e8000212803000141820074807b0008832300008319000082f8000882d7000c82b60028807b000083150008801800007c0803a64e800021829b0008947bfffc8074ffec8314fff8801800007c0803a64e80002138830000807b0000831b000c833b00103c0002ad600070fc7c0903a67f2803a63b7b00144e800420807b00083ca002ad60a549a4809b00008063ffec833b000883190000833b000c3c0002ad60004c807c0903a67f2803a63b7b00104e800420827b00008073ffe88313fff8801800007c0803a64e800021825b0000823200008211000081f0000881cf000c814e0028947bfffc830a0000801800007c0803a64e8000212803000141820074813b00048109000080e8000080c7000880a6000c80850028807b000083040008801800007c0803a64e800021833b0004947bfffc8079ffec8319fff8801800007c0803a64e80002138830000807b0000831b0008833b000c3c0002ad600070fc7c0903a67f2803a63b7b00104e800420813b00043ca002ad60a549a4809b00008069ffec83090000833b00083c0002ad60004c807c0903a67f2803a63b7b000c4e800420|@5465,1048575|564,3,@5420 592,3,@5404 616,3,@5419 848,3,@5419 1036,3,@5420 1064,3,@5404 1092,3,@5419 1280,3,@5420 1308,3,@5404 1332,3,@5419 5465:S34|545950455f5452454528292e747970654d617463682834296d617463682833292f35 5466:C2,428|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0400014082009c2c0300014082000c386000014e80002082f80000973bfffc8017fffc941bfffc8018fff4941bfffc8078fffc8318fff8801800007c0803a64e8000213ac30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003ea002ad62b5adc092a3000892c30004829b000092830000831b0004833b0008801800007c0903a67f2803a63b7b000c4e800420706b000140820060973bfffc971bfffc80040004941bfffc80030004941bfffc3ca002ad60a549a482e400008083000038770000831800003c0002ad60004c807c0803a64e800021809b0004807b0000831b0008833b000c7f2803a63b7b00104bfffee882f80000973bfffc8017fffc941bfffc8018fff4941bfffc8078fffc8318fff8801800007c0803a64e8000213ac30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003ea002ad62b5adc092a3000892c30004829b000092830000831b0004833b0008801800007c0903a67f2803a63b7b000c4e800420|@5468,1048575|140,3,@5467 224,3,@5404 248,3,@5419 376,3,@5467 5467:S32|28446966666572656e74206e756d62657273206f6620617267756d656e747329 5468:S45|545950455f5452454528292e747970654d617463682834296d617463682833296d617463684c69737473283229 5469:S29|28446966666572656e74207479706520636f6e7374727563746f727329 5470:S35|284f7665726c6f6164696e6720646f6573206e6f7420696e636c756465207479706529 5471:C2,1184|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000082d7000082b600088295000c973bfffc971bfffc947bfffc3864000083140008801800007c0803a64e800021827b000482530000823200008211000881f0000c947bfffc800f0034941bfffc830f006c801800007c0803a64e800021831b0000801800007c0803a64e80002128030001418200084800013881db000c814e0000812a00008109000880e8000c807b000483070058801800007c0803a64e80002180db000c80a6000080850000832400088319000c82f8001483170000801800007c0803a64e8000212803000141820008480000dc82db000c82b6000082950000827400088253000c8016ffec941bfffc807b000883120058801800007c0803a64e800021823b00108211000081f0000081cf0008814e000c947bfffc807b000c830a0054801800007c0803a64e800021813b00148109000080e80000809b001083070018801800007c0803a64e80002180db001480a600008085000038a000038324001438830000807b00003b190000801800007c0803a64e800021831b001480b8fff838830000807b000483180000833b00183c0002ad60004c807c0903a67f2803a63b7b001c4e80042082db000c8076ffe88316fff8801800007c0803a64e80002182bb000c8295000082740000825300088232000c82110024947bfffc83100000801800007c0803a64e800021280300014182025481fb001081cf0000814e0000812a00088109000c80e80024807b000083070008801800007c0803a64e80002180db001080a6000080850000832400088319000c80030000941bfffc8063000883180008801800007c0803a64e80002182fb001482d7000082b60000829500088274000c947bfffc80130034941bfffc8313006c801800007c0803a64e800021831b0000801800007c0803a64e800021280300014182001838600001825b00207e4803a63b7b00244e800020825b001c823200008211000081f0000881cf000c807b0004830e0058801800007c0803a64e800021815b001c812a00008109000080e8000880c7000c80a6001483050000801800007c0803a64e80002128030001408200dc809b001c80640000832300008319000882f8000c8004ffec941bfffc807b000883170058801800007c0803a64e80002182db002082b6000082950000827400088253000c947bfffc807b000c83120054801800007c0803a64e800021823b00248211000081f00000809b0010830f0018801800007c0803a64e80002181db0024814e0000812a000038a0000338830000807b000083090014801800007c0803a64e8000213ca002ad60a549a438830000807b0004811b002483080000833b00283c0002ad60004c807c0903a67f2803a63b7b002c4e800420809b001c806400008323fffc398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003f0002ad63189ef09303000882e4ffec92e3000482db000c92c300003b190000833b0020801800007c0903a67f2803a63b7b00244e80042081fb00103ca002ad60a549a4809b0000806fffec830f0000833b00143c0002ad60004c807c0903a67f2803a63b7b00184e800420|@5472,1048575|440,3,@5419 976,3,@5404 1004,3,@5419 1076,3,@5458 1136,3,@5404 1160,3,@5419 5472:S35|545950455f5452454528292e747970654d617463682834296d617463682833292f3130 5473:S32|545950455f5452454528292e747970654d617463682834296d61746368283329 5474:S24|545950455f5452454528292e747970654d61746368283429 5475:C2,1908|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021971bfffc94bbfffc949bfffc973bfffc83180010801800007c0803a64e800021833b000c8319000482f8000c82d70028947bfffc83160000801800007c0803a64e800021280300014182014482bb0010829500048274000c82530028807b000083120008801800007c0803a64e800021823b00108211000481f0000c947bfffc830f0084801800007c0803a64e80002128030001418200183860000381db00087dc803a63b7b00184e80002081db0014814e0004812a000c807b000083090090801800007c0803a64e800021811b001480e8000480c7000c80a6001c947bfffc83050000801800007c0803a64e8000212803000141820078809b0018806400048323000c8319001c807b000083180008801800007c0803a64e800021807b0004831b0014801800007c0803a64e8000212c03ffff408200183860ffff82fb000c7ee803a63b7b001c4e80002080bb0014809b0010807b0000831b0018833b000c7f2803a63b7b001c4bfffe80807b0004831b0014833b000c801800007c0903a67f2803a63b7b001c4e80042082bb0010829500048274000c82530018807b000083120000801800007c0803a64e800021280300014182003c823b00108211000481f0000c81cf0018807b0000830e0008801800007c0803a64e8000213860ffff815b00047d4803a63b7b00144e800020823b00108211000481f0000c81cf0024807b0000830e0000801800007c0803a64e80002128030001418203bc815b0010812a00048109000c80e80024807b000083070008801800007c0803a64e80002180db001080a600048085000c80030000941bfffc8063000883040008801800007c0803a64e800021833b00148319000482f8000c947bfffc80170034941bfffc8317006c801800007c0803a64e800021831b0000801800007c0803a64e80002128030001418200183860ffff82db00107ec803a63b7b00204e80002082db001c82b60004829500208275001c398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a5d0004919d00003e2002ad6231bb349232000092b20004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092430008821b00049203000439e0007b91e3000080140004941bfffc83130000801800007c0803a64e800021831b0000801800007c0803a64e80002128030001408200183860000381db00147dc803a63b7b00244e80002081db0020814e0004812a000c80090040941bfffc807b000c8309006c801800007c0803a64e800021811b002480e8000480c7000c947bfffc806600b88306006c801800007c0803a64e80002138a30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000090a30004809b000090830000831b0004801800007c0803a64e80002128030001418200183860ffff833b001c7f2803a63b7b002c4e800020807b0028832300048319000c807b001083180064801800007c0803a64e800021280300014182003038800003807b00143b1b00283c0002ad6000bb847c0803a64e80002182fb001c7ee803a63b7b002c4e80002082fb002882d7000482b6000c807b001083150058801800007c0803a64e800021829b0028827400048253000c8232001483110000801800007c0803a64e800021280300014182007c821b002881f0000481cf000c807b0010830e006c801800007c0803a64e800021831b0020801800007c0803a64e8000212c03ffff408200183860ffff815b001c7d4803a63b7b002c4e80002038830000807b00143b1b00283c0002ad6000bb847c0803a64e800021815b001c7d4803a63b7b002c4e800020821b002881f0000481cf000c807b0010830e0058801800007c0803a64e800021815b0028812a00048109000c947bfffc807b001483080054801800007c0803a64e80002180fb002c809b00188307000c801800007c0803a64e80002180db002c38a0000338830000807b000083060008801800007c0803a64e80002180bb0028809b0024831b002c833b00207f2803a63b7b00304bfffa18815b0010812a00048109000c80e8001c807b000083070000801800007c0803a64e800021280300014182006c80db001080a600048085000c8064001c83230008807b00003b190000801800007c0803a64e800021806300043f0002ad6318bc88801800007c0803a64e800021388000033b1b00103c0002ad6000bb847c0803a64e800021831b00047f0803a63b7b00144e80002080db001080a600048085000c8064002083230000807b00003b190000801800007c0803a64e8000212803000141820088831b001082f8000482d7000c82b60020807b000083150008801800007c0803a64e800021829b00108274000482530018398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a3d0004919d00003e0002ad6210bd38921100083de002a061efc7ac91f1000481d2000091d1000038710000800d00287c0803a64e800021831b001082f8000482d7000c82b60010807b000083150000801800007c0803a64e8000213860ffff829b00047e8803a63b7b00144e800020|@5483,1048575|784,3,@5476 1148,3,@5478 1340,3,@5478 1612,3,@5480 1640,3,@5478 1804,3,@5482 1816,3,@227 5476:C2,16|8078000482e30020807700004e800020|@5477,917505| 5477:S26|545950455f5452454528292e657175616c697479283329283129 5478:C2,188|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386400004e800020973bfffc971bfffc949bfffc80030004941bfffc80b8fffc8098fff88063000083180000801800007c0803a64e8000212c03ffff408200183860ffff833b000c7f2803a63b7b00104e8000202c0300014082002038800001807b0000831b0008833b000c7f2803a63b7b00104bffff6c809b0004807b0000831b0008833b000c7f2803a63b7b00104bffff50|@5479,1048575| 5479:S35|545950455f5452454528292e657175616c6974792833296571466f724c697374283229 5480:O1|@5481 5481:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e80002083030000973bfffc80180004941bfffc806300044bffffbd398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b00009319000038790000833b00047f2803a63b7b00084e800020|@234,786433| 5482:S28|657175616c697479202d204f7665726c6f616473657420666f756e64 5483:S23|545950455f5452454528292e657175616c697479283329 5484:O4|@5485,@4193,@4526,@4548 5485:C2,228|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d700083980000b3bbdffd07c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003e8002ad6294be90929500008278000c92750028825b000892550024907500209095001c90b5001890d500148238000892350010821b000c9215000c81fb000091f5000892f50004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a3000881db000491c30004924300003958000083160000801800007c0903a67f2803a63b7b00104e800420|@5488,1048575|76,3,@5486 5486:C2,896|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc947bfffc3860000183180028801800007c0803a64e800021833b00048319000482f80008947bfffc8079002483170010801800007c0803a64e80002182db000882b6000482950004947bfffc8074000483140008801800007c0803a64e8000213a630000807b00003b130000801800007c0803a64e800021825b000c8232000482110014947bfffc807b000c83100004801800007c0803a64e80002139e300003c6002a66063e9d83b0f0000801800007c0803a64e80002181db0010814e0004812a0014807b000c83090000801800007c0803a64e800021811b001038e30000806800203b070000801800007c0803a64e80002180db001080a6000480850014807b000c8304000c801800007c0803a64e8000213b2300003c6002a06063ee143b190000801800007c0803a64e800021831b00103ae0000396fbfffc80db000c80bb0010809b00048078001c83180010801800007c0803a64e80002182db001082b6000482950014807b000c8314000c801800007c0803a64e8000213a6300003c6002a06063ee143b130000801800007c0803a64e800021825b00108232000482110014807b000c83100000801800007c0803a64e80002181fb001039c30000806f00183b0e0000801800007c0803a64e800021815b0010812a000481090014807b000c8308000c801800007c0803a64e80002138e300003c6002a06063ee143b070000801800007c0803a64e80002180db001038a0000394bbfffc808600148066001080db000c80bb00103b240000809b00043b03000038790000801800007c0803a64e80002182fb001082d7000482b60014807b000c8315000c801800007c0803a64e8000213a8300003c6002a06063ee143b140000801800007c0803a64e800021827b00108253000482320014807b000c83110000801800007c0803a64e800021821b001039e300008070000c3b0f0000801800007c0803a64e80002181db0010814e0004812a0014807b000c8309000c801800007c0803a64e800021390300003c6002a06063ee143b080000801800007c0803a64e80002180fb0010807b000c83070008801800007c0803a64e80002180db001080a6000480850014807b000c83040008801800007c0803a64e8000213b230000386000013b190000833b0014801800007c0903a67f2803a63b7b00184e800420|@5487,1048575|200,3,@2419 320,3,@265 424,3,@265 544,3,@265 660,3,@265 780,3,@265 5487:S28|545950455f5452454528292e6d617463684572726f72283829283129 5488:S25|545950455f5452454528292e6d617463684572726f72283829 5489:C2,980|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7000c973bfffc971bfffc947bfffc949bfffc94bbfffc94dbfffc80060000941bfffc80060004941bfffc8316006c801800007c0803a64e80002182bb0018829500048274000c947bfffc807b001883130058801800007c0803a64e800021825b001c823200048211000c81f00014947bfffc830f0000801800007c0803a64e800021280300014182000c81db00004800008c398000063bbdffe47c1df04040a00010800d001c7c0803a64e80002139dd0004919d00003d4002ad614ac664914e0000813b0018912e0014811b0014910e001080fb001090ee000c80db002890ce000880bb002090ae00048085000c38ae0000386400003c8002ad608449a43b230000807b00003b190000801800007c0803a64e80002139c3000095dbfffc807b0008831b001c801800007c0803a64e800021280300014182000848000058831b0024398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082fb000092e3000482db000492c3000083180008801800007c0803a64e80002128030001418200084800020c807b0008831b000c801800007c0803a64e800021706b00014082001880630000831b00287f0803a63b7b00344e800020831b002482f8000482d7000c82b60014807b000483150000801800007c0803a64e8000212803000141820060827b002482530004823200108212000c80110004941bfffc807b00248310004c801800007c0803a64e800021831b0000801800007c0803a64e80002180830004807b00303c0002a1600074a87c0803a64e8000213a8300004800002c829b0024827400048253000c807b00208312004c801800007c0803a64e8000213a830000947bfffc823b00288211000481f0000c969bfffc800f0074941bfffc807b002c830f0054801800007c0803a64e800021947bfffc38600001831b0028801800007c0803a64e80002181db0034814e0004812a000c947bfffc807b003483090064801800007c0803a64e80002139030000398000063bbdffe47c1df04040a00010800d001c7c0803a64e800021387d0004919d000038e0000190e300149103001080db000090c3000c80bb001490a30008809b000490830004833b000c93230000831b0008801800007c0803a64e8000213b030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00009303000482fb001c92e30000971bfffc831b0028801800007c0803a64e800021807b000082db00407ec803a63b7b004c4e800020807b002082bb00287ea803a63b7b00344e800020|@5492,1048575|220,3,@5490 284,3,@5404 600,3,@511 5490:C2,80|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000213ee002ad62f749a496fbfffc82d8000896dbfffc80d8000c80b800108098001483180004801800007c0903a64e800420|@5491,1048575|32,3,@5404 5491:S44|545950455f5452454528292e636f707954797065436f6e737472283629636f7069656445717569762d283129 5492:S29|545950455f5452454528292e636f707954797065436f6e737472283629 5493:O2|@5495,@5494 5494:O4|@5498,@4193,@5497,@4190 5495:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@5496,1048575| 5496:S35|545950455f5452454528292e6c696e6b54797065436f6e7374727563746f7273283129 5497:O4|@5512,@5417,@4190,@4193 5498:C2,3688|7f2802a66339000239600060800d00187d6bd8107c0b004040a00010800d00247c0803a64e800021971bfffc94bbfffc82f8000482d7000c973bfffc947bfffc949bfffc80160034941bfffc8316006c801800007c0803a64e800021831b0000801800007c0803a64e80002128030001418200084800004882bb0014829500048274000c80130034941bfffc807b00088313006c801800007c0803a64e800021831b0000801800007c0803a64e800021280300014082000c4800001c947bfffc3860000182bb00107ea803a63b7b001c4e800020825b0018823200048211000c807b000c83100050801800007c0803a64e80002181fb001881cf0004814e000c947bfffc807b000c830a0050801800007c0803a64e800021813b00007d2b1b78556bf80140a20010800d00347c0803a64e8000217c09180041820074811b001c80e8000480c7000c807b00108306004c801800007c0803a64e800021388300003c6002ad6063d6683c0002a1600074a87c0803a64e8000213c8002ad6084d6883c0002a1600074a87c0803a64e800021831b0018833b0014801800007c0903a67f2803a63b7b00204e800420811b001c80e8000480c7000c807b001083060058801800007c0803a64e80002180bb001c808500048324000c947bfffc807b001083190058801800007c0803a64e800021831b002082f8000482d7000c82b60014947bfffc807b000483150000801800007c0803a64e8000212803000140820228829b0024827400048253000c82320024807b000483110000801800007c0803a64e80002128030001418200e0821b002481f0000481cf000c814e0024807b0004830a0008801800007c0803a64e800021813b00248109000480e8000c80c70024807b000483060000801800007c0803a64e8000212803000141820030809b0024806400048323000c83190024807b000483180008801800007c0803a64e80002138a30000480000183c6002a160630a30800d00287c0803a64e80002182fb002482d7000482b6000c80050000941bfffc807b001c83150054801800007c0803a64e800021809b00003b1b00283c0002ad6000d6ac7c0803a64e80002128030001418200b44800000c947bfffc480000a8829b0028827400048253000c8232002480120008941bfffc807b000c83110000801800007c0803a64e800021280300014182003081fb002c81cf0004814e000c812a0024807b000c83090008801800007c0803a64e8000213a030000480000183c6002a160630a30800d00287c0803a64e80002180700008831b0000801800007c0803a64e80002180bb0028809b001c831b002c833b00247f2803a63b7b00304bfffc38821b002881f0000481cf000c807b001c830e004c801800007c0803a64e800021388300003c6002ad6063d8f83c0002a1600074a87c0803a64e8000213c8002ad6084d9103c0002a1600074a87c0803a64e800021831b0024833b0020801800007c0903a67f2803a63b7b002c4e800420829b0024827400048253000c82320014807b000083110000801800007c0803a64e800021280300014082022c821b002481f0000481cf000c814e0024807b0000830a0000801800007c0803a64e80002128030001418200e0813b00248109000480e8000c80c70024807b000083060008801800007c0803a64e80002180bb0024808500048064000c83230024807b000083190000801800007c0803a64e800021280300014182003082fb002482d7000482b6000c82950024807b000083140008801800007c0803a64e8000213b030000480000183c6002a160630a30800d00287c0803a64e800021827b0024825300048232000c80180000941bfffc807b001883110054801800007c0803a64e800021809b00003b1b00283c0002ad6000d6ac7c0803a64e80002128030001418200b84800000c947bfffc480000ac821b002881f0000481cf000c814e0024800e0008941bfffc807b0008830a0000801800007c0803a64e8000212803000141820030811b002c80e8000480c7000c80a60024807b000883050008801800007c0803a64e80002139230000480000183c6002a160630a30800d00287c0803a64e80002180690008831b0000801800007c0803a64e80002180bb002838830000807b0020831b002c833b00247f2803a63b7b00304bfff9e4813b00288109000480e8000c807b00188307004c801800007c0803a64e800021388300003c6002ad6063d8f83c0002a1600074a87c0803a64e8000213c8002ad6084d9103c0002a1600074a87c0803a64e800021831b0024833b0020801800007c0903a67f2803a63b7b002c4e800420821b002481f0000481cf000c800e0040941bfffc807b001c830e006c801800007c0803a64e800021815b0028812a00048109000c947bfffc807b001c8308006c801800007c0803a64e80002138e30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000090e3000480db000090c30000831b0004801800007c0803a64e80002128030001418200183860000180bb00247ca803a63b7b00304e80002080bb002c808500048064000c83230060807b00203b190000801800007c0803a64e800021280300014082000c3b000003480000083b0000016b17000282db002c82b600048295000c96fbfffc807b002083140060801800007c0803a64e800021280300014082000c3a600003480000083a6000016a720002823b00308211000481f0000c965bfffc800f003c941bfffc807b002c830f006c801800007c0803a64e800021831b0000801800007c0803a64e800021280300014082007481db0038814e0004812a000c807b002c8309004c801800007c0803a64e800021388300003c6002ad6063d8f83c0002a1600074a87c0803a64e8000213c8002ad6084d92c3c0002a1600074a87c0803a64e800021831b0034833b0030801800007c0903a67f2803a63b7b003c4e80042081db0038814e0004812a000c8009003c941bfffc807b002c8309006c801800007c0803a64e800021831b0000801800007c0803a64e8000212803000140820074811b003c80e8000480c7000c807b002c8306004c801800007c0803a64e800021388300003c6002ad6063d8f83c0002a1600074a87c0803a64e8000213c8002ad6084d92c3c0002a1600074a87c0803a64e800021831b0038833b0034801800007c0903a67f2803a63b7b00404e800420811b003c80e8000480c7000c8006003c941bfffc807b00348306006c801800007c0803a64e800021831b0000801800007c0803a64e800021280300014182003c80bb00102805000140820030809b0034807b00303b1b00403c0002ad6000d9487c0803a64e800021809b00387c8803a63b7b00444e80002080bb0040808500048064000c8003003c941bfffc8323006c807b00343b190000801800007c0803a64e800021831b0000801800007c0803a64e800021280300014182003c831b00102818000140820030809b0034807b00383b1b00443c0002ad6000d9487c0803a64e80002182fb003c7ee803a63b7b00484e800020831b004482f8000482d7000c8016003c941bfffc807b003c8316006c801800007c0803a64e800021831b0000801800007c0803a64e80002128030001418200084800004882bb0048829500048274000c8013003c941bfffc807b003c8313006c801800007c0803a64e800021831b0000801800007c0803a64e800021280300014082000c4800030c947bfffc82bb004c807b004083150008801800007c0803a64e800021829b004c947bfffc807b004083140008801800007c0803a64e800021827b000028130001418201082803000140820100825b0050823200048211000c8010003c941bfffc807b00448310006c801800007c0803a64e800021831b0000801800007c0803a64e800021280300014182005881fb005481cf0004814e000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003920000391230004811b004491030000830a0068801800007c0803a64e8000214800017c81fb005481cf0004814e000c807b0044830a004c801800007c0803a64e800021388300003c6002ad6063d8f83c0002a1600074a87c0803a64e8000213c8002ad6084dc203c0002a1600074a87c0803a64e800021831b0050801800007c0803a64e800021480001a828030001418201082813000140820100825b0050823200048211000c8010003c941bfffc807b00488310006c801800007c0803a64e800021831b0000801800007c0803a64e800021280300014182005881fb005481cf0004814e000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003920000391230004811b004891030000830a0068801800007c0803a64e8000214800007081fb005481cf0004814e000c807b0048830a004c801800007c0803a64e800021388300003c6002ad6063d8f83c0002a1600074a87c0803a64e8000213c8002ad6084dc203c0002a1600074a87c0803a64e800021831b0050801800007c0803a64e8000214800009c947bfffc80fb005480c7000480a6000c80050044941bfffc807b004c8305006c801800007c0803a64e800021809b0058832400048319000c947bfffc807b004c8318006c801800007c0803a64e8000213ae30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092e3000482db000092c30000831b0004801800007c0803a64e8000214800000c947bfffc947bfffc38600001813b00547d2803a63b7b00604e800020825b004c823200048211000c807b00408310004c801800007c0803a64e800021388300003c6002ad6063d8f83c0002a1600074a87c0803a64e8000213c8002ad6084dc743c0002a1600074a87c0803a64e80002181fb004c81cf0004814e000c947bfffc807b0040830a004c801800007c0803a64e80002138830000807b00003c0002a1600074a87c0803a64e8000213c8002ad6084dc843c0002a1600074a87c0803a64e800021831b004c833b0048801800007c0903a67f2803a63b7b00544e800420|@5511,1048575|352,3,@5499 360,3,@511 376,3,@5500 384,3,@511 712,3,@341 780,3,@5501 912,3,@341 1016,3,@5503 1024,3,@511 1040,3,@5504 1048,3,@511 1304,3,@341 1372,3,@5501 1504,3,@341 1612,3,@5503 1620,3,@511 1636,3,@5504 1644,3,@511 2084,3,@5503 2092,3,@511 2108,3,@5505 2116,3,@511 2260,3,@5503 2268,3,@511 2284,3,@5505 2292,3,@511 2424,3,@5506 2548,3,@5506 2976,3,@5503 2984,3,@511 3000,3,@5507 3008,3,@511 3244,3,@5503 3252,3,@511 3268,3,@5507 3276,3,@511 3528,3,@5503 3536,3,@511 3552,3,@5509 3560,3,@511 3620,3,@511 3636,3,@5510 3644,3,@511 5499:S21|43616e6e6f742073686172653a2054797065732028 5500:S25|29206861766520646966666572656e7420617269746965732e 5501:C2,508|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0400014082001c280300014082000c386000034e800020386000014e80002082f8000082d7000482b6000c82950028973bfffc971bfffc947bfffc949bfffc80040000941bfffc807b000083140000801800007c0803a64e8000212803000141820168827b000c82530000823200048211000c81f00028807b0000830f0008801800007c0803a64e80002181db0004815b0008714b00014082011c813b000c8109000080e8000480c7000c80a60028947bfffc800e0004941bfffc800a0000941bfffc807b000083050000801800007c0803a64e80002128030001418200c4809b001880640000832300048319000c82f80028807b000083170008801800007c0803a64e80002182db001482bb001882950000827400048253000c3a230000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092230004821b00089203000080160004941bfffc83120098801800007c0803a64e8000212803000141820020809b0008807b0000831b001c833b00207f2803a63b7b00244bfffe603860000181fb00207de803a63b7b00244e80002038600001809b001c7c8803a63b7b00204e80002038600001813b00107d2803a63b7b00144e80002038600001827b00107e6803a63b7b00144e800020|@5502,1048575| 5502:S44|545950455f5452454528292e6c696e6b54797065436f6e7374727563746f7273283329657141726773283229 5503:S15|43616e6e6f742073686172653a2028 5504:S20|29206973206120747970652066756e6374696f6e 5505:S17|29206973206e6f7420666c657869626c65 5506:C2,700|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000082d7000482b6000c973bfffc971bfffc947bfffc949bfffc8315004c801800007c0803a64e800021829b000882740000825300048232000c947bfffc807b000483110054801800007c0803a64e800021821b000c81f0000038a30000809b0008807b0000830f000c801800007c0803a64e80002181db000c814e0000812a00048109000c947bfffc807b000883080064801800007c0803a64e800021280300014182019480fb001080c7000080a600048085000c8004003c941bfffc807b00108304006c801800007c0803a64e800021831b0000801800007c0803a64e80002128030001418200ac807b0014832300008319000482f8000c807b001083170058801800007c0803a64e80002182db001482b60000829500048274000c8253001483120000801800007c0803a64e800021280300014182005c823b00148211000081f0000481cf000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003940000391430004813b001091230000830e0068801800007c0803a64e800021480000ac807b001483230000807b001083190008801800007c0803a64e8000212803000140820078831b001482f8000082d7000482b6000c8018fffc941bfffc807b00148315004c801800007c0803a64e800021388300003c6002ad6063d8f83c0002a1600074a87c0803a64e8000213c8002ad6084dc203c0002a1600074a87c0803a64e800021831b0000801800007c0803a64e80002148000008947bfffc3b7b000448000008947bfffc80fb001480c7000080a600048085000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000833b000493230004831b000c930300008304005c833b0018801800007c0903a67f2803a63b7b001c4e800420|@5508,1048575|520,3,@5503 528,3,@511 544,3,@5507 552,3,@511 5507:S18|29206973206e6f7420616e20657174797065 5508:S46|545950455f5452454528292e6c696e6b54797065436f6e7374727563746f72732833297365744571756976283229 5509:S7|2920616e642028 5510:S21|292061726520646966666572656e74207479706573 5511:S35|545950455f5452454528292e6c696e6b54797065436f6e7374727563746f7273283329 5512:C2,380|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000c82d7000c973bfffc971bfffc947bfffc83160064801800007c0803a64e80002128030001418200183860000382bb00087ea803a63b7b000c4e80002082bb00048295000c8274000c807b000083130058801800007c0803a64e800021825b00048232000c8211000c81f00014830f0000801800007c0803a64e80002128030001418200183860000181db00087dc803a63b7b000c4e80002081db0004814e000c812a000c807b00008309004c801800007c0803a64e800021811b000480e8000c80c7000c947bfffc807b000483060054801800007c0803a64e80002180bb00088085000838a3000038640000809b00043b230000807b00003b190000801800007c0803a64e800021831b00083ca002ad60a5de683c8002ad6084dec083180004801800007c0803a64e8000213ae0ffff7c1718404082000c3ac00003480000083ac000016ac3000282db000c7ec803a63b7b00104e800020|@5518,1048575|304,3,@5513 312,3,@5516 5513:O1|@5514 5514:C2,8|386000034e800020|@5515,524289| 5515:S33|545950455f5452454528292e7065726d697473457175616c697479283129283129 5516:O1|@5517 5517:C2,8|3860ffff4e800020|@5515,524289| 5518:S30|545950455f5452454528292e7065726d697473457175616c697479283129 5519:O2|@5521,@5520 5520:O4|@5523,@4193,@5497,@4190 5521:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@5522,1048575| 5522:S27|545950455f5452454528292e736574576865726554797065283129 5523:C2,2188|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021971bfffc94bbfffc82f8000482d7000c973bfffc947bfffc949bfffc80160034941bfffc8316006c801800007c0803a64e800021831b0000801800007c0803a64e80002128030001418200183860000182bb000c7ea803a63b7b00184e80002082bb0014829500048274000c807b000883130050801800007c0803a64e800021825b0014823200048211000c947bfffc807b000883100050801800007c0803a64e80002181fb00007deb1b78556bf80140a20010800d00347c0803a64e8000217c0f18004182007481db0018814e0004812a000c807b000c8309004c801800007c0803a64e800021388300003c6002ad6063e8583c0002a1600074a87c0803a64e8000213c8002ad6084d6883c0002a1600074a87c0803a64e800021831b0014833b0010801800007c0903a67f2803a63b7b001c4e80042081db0018814e0004812a000c807b000c83090058801800007c0803a64e800021811b001880e8000480c7000c947bfffc807b000c83060058801800007c0803a64e80002180bb001c808500048324000c83190014947bfffc807b000483180000801800007c0803a64e80002128030001408201c082fb002082d7000482b6000c82950024807b000483140000801800007c0803a64e8000212803000141820124827b0020825300048232000c82110024807b000483100008801800007c0803a64e80002181fb002081cf0004814e000c80030000941bfffc80030008941bfffc807b001c830a0054801800007c0803a64e800021809b00043b1b00283c0002ad6000e8887c0803a64e8000212803000141820040813b00288109000480e8000c807b000083070008801800007c0803a64e80002180bb0024809b0018831b0028833b00207f2803a63b7b002c4bfffd64813b00288109000480e8000c807b001c8307004c801800007c0803a64e800021388300003c6002ad6063eacc3c0002a1600074a87c0803a64e8000213c8002ad6084d9103c0002a1600074a87c0803a64e800021831b0024833b0020801800007c0903a67f2803a63b7b002c4e800420827b0020825300048232000c807b00148311004c801800007c0803a64e800021388300003c6002ad6063eacc3c0002a1600074a87c0803a64e8000213c8002ad6084d9103c0002a1600074a87c0803a64e800021831b001c833b0018801800007c0903a67f2803a63b7b00244e80042082fb002082d7000482b6000c82950024807b000083140000801800007c0803a64e80002128030001418200e0827b0020825300048232000c82110024807b000083100008801800007c0803a64e80002181fb002081cf0004814e000c812a0024807b000083090000801800007c0803a64e800021280300014182003080fb002080c7000480a6000c80850024807b000083040008801800007c0803a64e80002139030000480000183c6002a160630a30800d00287c0803a64e800021807b0020832300048319000c80080000941bfffc807b001483180054801800007c0803a64e800021809b00003b1b00243c0002ad6000e8887c0803a64e80002128030001418200b84800000c947bfffc480000ac82fb002482d7000482b6000c8295002480150008941bfffc807b000883140000801800007c0803a64e8000212803000141820030825b0028823200048211000c81f00024807b0008830f0008801800007c0803a64e8000213a630000480000183c6002a160630a30800d00287c0803a64e80002180730008831b0000801800007c0803a64e80002180bb002438830000807b001c831b0028833b00207f2803a63b7b002c4bfffacc827b0024825300048232000c8011003c941bfffc807b001c8311006c801800007c0803a64e800021831b0000801800007c0803a64e8000212803000140820074821b002881f0000481cf000c807b001c830e004c801800007c0803a64e800021388300003c6002ad6063eacc3c0002a1600074a87c0803a64e8000213c8002ad6084eaf43c0002a1600074a87c0803a64e800021831b0024833b0020801800007c0903a67f2803a63b7b002c4e800420821b002881f0000481cf000c807b001c830e0064801800007c0803a64e8000212803000141820094815b0028807b0018830a0008801800007c0803a64e8000212803000140820074813b00288109000480e8000c807b001c8307004c801800007c0803a64e800021388300003c6002ad6063eacc3c0002a1600074a87c0803a64e8000213c8002ad6084eb103c0002a1600074a87c0803a64e800021831b0024833b0020801800007c0903a67f2803a63b7b002c4e800420815b0028812a00048109000c807b001c83080060801800007c0803a64e800021280300014182019480fb002880c7000480a6000c807b001883050060801800007c0803a64e80002128030001408200c8809b0028806400048323000c807b001c8319004c801800007c0803a64e800021388300003c6002ad6063eacc3c0002a1600074a87c0803a64e8000213c8002ad6084eb503c0002a1600074a87c0803a64e800021831b002882f8000482d7000c947bfffc807b001c8316004c801800007c0803a64e80002138830000807b00003c0002a1600074a87c0803a64e8000213c8002ad6084eb703c0002a1600074a87c0803a64e800021831b0028833b0024801800007c0903a67f2803a63b7b00304e800420809b0028806400048323000c80190044941bfffc807b00208319006c801800007c0803a64e800021831b002c82f8000482d7000c947bfffc807b00208316006c801800007c0803a64e8000213aa30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a30004829b000092830000831b0004801800007c0803a64e80002138600001827b00287e6803a63b7b00344e800020809b001c807b00183b1b00283c0002ad6000eb847c0803a64e80002180fb00207ce803a63b7b002c4e800020|@5534,1048575|268,3,@5524 276,3,@511 292,3,@5500 300,3,@511 596,3,@5525 716,3,@5527 724,3,@511 740,3,@5504 748,3,@511 828,3,@5527 836,3,@511 852,3,@5504 860,3,@511 1072,3,@341 1140,3,@5525 1272,3,@341 1444,3,@5527 1452,3,@511 1468,3,@5528 1476,3,@511 1628,3,@5527 1636,3,@511 1652,3,@5529 1660,3,@511 1820,3,@5527 1828,3,@511 1844,3,@5530 1852,3,@511 1912,3,@511 1928,3,@5531 1936,3,@511 2156,3,@5532 5524:S38|43616e6e6f74206170706c792074797065207265616c69736174696f6e3a2054797065732028 5525:C2,508|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0400014082001c280300014082000c386000034e800020386000014e80002082f8000082d7000482b6000c82950028973bfffc971bfffc947bfffc949bfffc80040000941bfffc807b000083140000801800007c0803a64e8000212803000141820168827b000c82530000823200048211000c81f00028807b0000830f0008801800007c0803a64e80002181db0004815b0008714b00014082011c813b000c8109000080e8000480c7000c80a60028947bfffc800e0004941bfffc800a0000941bfffc807b000083050000801800007c0803a64e80002128030001418200c4809b001880640000832300048319000c82f80028807b000083170008801800007c0803a64e80002182db001482bb001882950000827400048253000c3a230000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092230004821b00089203000080160004941bfffc83120098801800007c0803a64e8000212803000141820020809b0008807b0000831b001c833b00207f2803a63b7b00244bfffe603860000181fb00207de803a63b7b00244e80002038600001809b001c7c8803a63b7b00204e80002038600001813b00107d2803a63b7b00144e80002038600001827b00107e6803a63b7b00144e800020|@5526,1048575| 5526:S36|545950455f5452454528292e736574576865726554797065283329657141726773283229 5527:S32|43616e6e6f74206170706c792074797065207265616c69736174696f6e3a2028 5528:S18|2920697320616c726561647920667265652e 5529:S53|2920697320616e206571747970652062757420746865207479706520646f6573206e6f74207065726d697420657175616c6974792e 5530:S21|292069732061206461746174797065206275742028 5531:S9|29206973206e6f742e 5532:C2,696|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000082d7000482b6000c973bfffc971bfffc947bfffc949bfffc8315004c801800007c0803a64e800021829b000882740000825300048232000c947bfffc807b000483110054801800007c0803a64e800021821b000c81f0000038a30000809b0008807b0000830f000c801800007c0803a64e80002181db000c814e0000812a00048109000c947bfffc807b000883080064801800007c0803a64e800021280300014182019080fb001080c7000080a600048085000c8004003c941bfffc807b00108304006c801800007c0803a64e800021831b0000801800007c0803a64e80002128030001418200ac807b0014832300008319000482f8000c807b001083170058801800007c0803a64e80002182db001482b60000829500048274000c8253001483120000801800007c0803a64e800021280300014182005c823b00148211000081f0000481cf000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003940000391430004813b001091230000830e0068801800007c0803a64e800021480000a8807b001483230000807b001083190008801800007c0803a64e8000212803000140820074831b001482f8000082d7000482b6000c8018fffc941bfffc807b00148315004c801800007c0803a64e80002138830000386000513c0002a1600074a87c0803a64e8000213c8002ad6084dc203c0002a1600074a87c0803a64e800021831b0000801800007c0803a64e80002148000008947bfffc3b7b000448000008947bfffc80fb001480c7000080a600048085000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000833b000493230004831b000c930300008304005c833b0018801800007c0903a67f2803a63b7b001c4e800420|@5533,1048575|524,3,@511 540,3,@5507 548,3,@511 5533:S38|545950455f5452454528292e7365745768657265547970652833297365744571756976283229 5534:S27|545950455f5452454528292e736574576865726554797065283329 5535:O2|@5537,@5536 5536:O3|@5540,@4193,@5539 5537:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@5538,1048575| 5538:S28|545950455f5452454528292e73657454797065436f6e737472283129 5539:O4|@5542,@5368,@5536,@4193 5540:C2,368|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7000c973bfffc971bfffc947bfffc949bfffc8316006c801800007c0803a64e80002182bb0008829500048274000c947bfffc807b000883130058801800007c0803a64e800021825b000c823200048211000c81f00014947bfffc830f0000801800007c0803a64e800021280300014082002081db0010809b0008807b0000830e0008801800007c0803a64e80002181db0010814e0004812a000c807b00048309003c801800007c0803a64e8000212803000141820084811b001080e8000480c7000c80060044941bfffc807b0010831b000c801800007c0803a64e80002138a30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000090a30004809b000890830000831b0000801800007c0803a64e80002138600001833b00187f2803a63b7b001c4e80002038600001811b00147d0803a63b7b00184e800020|@5541,1048575| 5541:S28|545950455f5452454528292e73657454797065436f6e737472283229 5542:C2,240|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002ad62d6f21092d7000082d8000c92d7000c9097000880980008909700043aa30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003e8002ad6294f39c9283000092e30004973bfffc96bbfffc83180004801800007c0803a64e8000213a630000807b00003b130000801800007c0803a64e8000213a430000386000013b120000833b0004801800007c0903a67f2803a63b7b00084e800420|@5549,1048575|68,3,@5543 140,3,@5545 5543:C2,316|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000c82d7000c82b60024973bfffc971bfffc949bfffc3864000083150000801800007c0803a64e80002128030001418200d8829b00048274000c8253000c82320024807b000083110008801800007c0803a64e800021821b000481f0000c81cf000c814e0024800e0008941bfffc807b0004830a0000801800007c0803a64e8000212803000141820030811b000880e8000c80c7000c80a60024807b000483050008801800007c0803a64e80002139230000480000183c6002a160630a30800d00287c0803a64e80002180690008831b0000801800007c0803a64e800021809b0008832400088304000438990000833b000c801800007c0903a67f2803a63b7b00104e80042038600001829b00087e8803a63b7b000c4e800020|@5544,1048575|216,3,@341 5544:S42|545950455f5452454528292e736574547970657328322973657454797065436f6e73747256616c283229 5545:C2,80|7f2802a6633900023ae30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003ec002ad62d6f40892c3000082d8000492c3000892e300047f2803a64e800020|@5548,983041|48,3,@5546 5546:C2,52|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000218098000483180008801800007c0903a64e800420|@5547,1048575| 5547:S45|545950455f5452454528292e736574547970657328322973657454797065436f6e73747256616c283129283129 5548:S42|545950455f5452454528292e736574547970657328322973657454797065436f6e73747256616c283129 5549:S23|545950455f5452454528292e7365745479706573283229 5550:O2|@5552,@5551 5551:O2|@5554,@4193 5552:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@5553,1048575| 5553:S31|545950455f5452454528292e656e74657254797065436f6e73747273283129 5554:C2,616|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7000c973bfffc971bfffc947bfffc949bfffc94bbfffc83160058801800007c0803a64e80002182bb000c829500048274000c947bfffc80130038941bfffc807b00108313006c801800007c0803a64e800021831b0000801800007c0803a64e8000212803000141820078825b0008823b00148211000481f0000c80120000941bfffc807b0014830f006c801800007c0803a64e80002139c30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000815b00109143000491c30000831b0000801800007c0803a64e80002148000008947bfffc825b0018823200048211000c81f00024807b0008830f0000801800007c0803a64e800021280300014182012481db0018814e0004812a000c81090024807b000883080008801800007c0803a64e80002180fb001880c7000480a6000c8085002480050008941bfffc807b000c83040000801800007c0803a64e800021280300014182002c833b001c8319000482f8000c82d70024807b000c83160008801800007c0803a64e800021480000183c6002a160630a30800d00287c0803a64e80002180630008831b0000801800007c0803a64e80002182bb0010829b001c827400048253000c947bfffc80150004941bfffc8312006c801800007c0803a64e800021831b0000801800007c0803a64e800021706b00014082001838600001823b00287e2803a63b7b002c4e80002080bb0018809b001c807b0004831b0024833b00287f2803a63b7b002c4bfffdb83860000181db001c7dc803a63b7b00204e800020|@5555,1048575|436,3,@341 5555:S31|545950455f5452454528292e656e74657254797065436f6e73747273283329 5556:O2|@5558,@5557 5557:O3|@5560,@4193,@5417 5558:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@5559,1048575| 5559:S35|545950455f5452454528292e67656e457175616c69747946756e6374696f6e73283129 5560:C2,1448|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7001082b7000c973bfffc971bfffc947bfffc949bfffc94bbfffc8075004083160000801800007c0803a64e8000213d804000398c00063bbdffe47c1df04040a00010800d001c7c0803a64e8000213a9d0004919d00003e6002ad6273fe8c927400003a400001925400043a200001923400083a0000019214000c39e0000191f4001039c0000191d40014815b000c398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021393d0004919d00003d0002ae61080280910900009289000c80ea000490e9000880ca000890c9000480a3000090b400049134000890f4000c809b0000909400108323000493340014398000007d8c0e709994fffc94bbfffc973bfffc969bfffc831b00142c18000140820008480002b482fb001882d7000482b6000c80180000941bfffc80180004941bfffc807b00048315006c801800007c0803a64e800021831b000c801800007c0803a64e8000212c0300014082003c398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a9d0004919d00003a60000192740004825b0004925400004800017882630000823300002c1100014082000c82530004480000183c6002a160630a30800d00287c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a1d0004919d00009250000481fb000491f0000081db0020814e0004812a000c965bfffc961bfffc386f000083090064801800007c0803a64e800021280300014182000848000054811b002880e8000480c7000c80bb000470ab00014082000c80650000480000183c6002a36063dfcc800d00287c0803a64e80002183060064801800007c0803a64e800021280300014082000848000090811b00002c080001408200084800008080fb002880c7000480a6000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003880000390830004832800009323000080080004941bfffc83050068801800007c0803a64e800021811b00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffff7c829b00003b7b0008809b0020806400048323000c969bfffc807b00088319006c801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b1d0004919d000082fb000092f800043ac0000192d800003aa30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00009303000492a30000831b0014801800007c0803a64e800021831b00043b7b000c800d00187c1b004040a00010800d00207c0803a64e8000214bfffd4882fb00142c170001408200183860000182db001c7ec803a63b7b00204e80002082db001882b600048295000c80170000941bfffc80170004941bfffc807b00048314006c801800007c0803a64e800021947bfffc831b000c801800007c0803a64e8000212c03ffff40820094827b0024825300048232000c807b000883110064801800007c0803a64e8000212803000141820104821b002481f0000481cf000c807b0008830e004c801800007c0803a64e800021388300003c6002ae606306c43c0002a1600074a87c0803a64e8000213c8002ae608406d43c0002a1600074a87c0803a64e800021831b001c801800007c0803a64e8000214800009c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003e6002ae627306f892630004825b000092430000831b0014801800007c0803a64e800021823b00248211000481f0000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000039c0000391c30004815b000891430000830f0068801800007c0803a64e80002182fb00043b7b000c800d00187c1b004040a00010800d00207c0803a64e8000214bfffe50|@5574,1048575|124,3,@5561 216,3,@5567 472,3,@341 624,3,@1386 1192,3,@5571 1200,3,@511 1216,3,@5572 1224,3,@511 1296,3,@5573 5561:C2,520|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc947bfffc83180014801800007c0803a64e800021706b00014082000c832300004800000c3f2002ae633900b0831900002c18ffff408200342c18ffff408200188079000482fb00087ee803a63b7b000c4e8000203c6002a160630a30800d00287c0803a64e80002182fb0004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003ec002ae62d600bc92c3000482bb000092a30000973bfffc83170004801800007c0803a64e800021829b0000825400002c1200014082000c82740004480000183c6002a160630a30800d00287c0803a64e8000213a2000032c1300014082000c3a1100004800005080130004941bfffc38910000807300003b1b00103c0002ae600000c87c0803a64e8000213a230000827b00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffffa881fb00082c1000014082000c81db000048000034398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002139dd0004919d0000920e00043940ffff914e0000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000091c30004813b000491230000961bfffc830f0004801800007c0803a64e800021807b0000811b00107d0803a63b7b00144e800020|@5566,1048575|76,3,@5562 124,3,@341 184,3,@5563 248,3,@341 308,3,@5564 5562:O2|-1,-1 5563:O2|-1,0 5564:C2,288|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c04ffff4082000c3860ffff4e80002082f8fffc82d70010281600014182006882b7000c8295000c973bfffc971bfffc947bfffc949bfffc8078fff88314003c801800007c0803a64e800021280300014082005c827b00088253fffc8232000c8211000c807b000483100064801800007c0803a64e800021280300014082003048000018973bfffc971bfffc947bfffc949bfffc480000183860ffff81fb000c7de803a63b7b00104e80002082bb00088295fffc8274000c8253000c807b000483120060801800007c0803a64e800021823b00088211fffc80bb000438830000807b000083100008833b000c801800007c0903a67f2803a63b7b00104e800420|@5565,1048575| 5565:S55|545950455f5452454528292e67656e457175616c69747946756e6374696f6e7328332967656e457175616c69747928312965712d283229 5566:S49|545950455f5452454528292e67656e457175616c69747946756e6374696f6e7328332967656e457175616c697479283129 5567:C2,532|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c040001408200084e80002082f8000882d7000c973bfffc971bfffc947bfffc94bbfffc80040000941bfffc80040004941bfffc807b000483160030801800007c0803a64e80002182bb0010829500088274000c82530018947bfffc83120000801800007c0803a64e800021280300014182002c823b00148211000881f0000c81cf0018807b0000830e0008801800007c0803a64e8000214800002480bb000c809b0004807b0010831b0014833b00187f2803a63b7b001c4bffff30815b0014812a00088109000c807b000883080030801800007c0803a64e80002180fb001480c7000880a6000c80850018947bfffc83040000801800007c0803a64e800021280300014182002c833b00188319000882f8000c82d70018807b000083160008801800007c0803a64e800021480000183c6002a160630a30800d00287c0803a64e80002182bb0018398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a9d0004919d00003e6002ae627304b092740000825b001092540008823500089234000438b400008095000c8063000083150004801800007c0803a64e8000212c03ffff408200183860ffff821b001c7e0803a63b7b00204e8000202c0300014082000c3a00000148000008821b001480bb0010809b000838700000831b0018833b001c7f2803a63b7b00204bfffdf8|@5570,1048575|336,3,@341 396,3,@5568 5568:C2,388|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7000c973bfffc971bfffc947bfffc8078000883160054801800007c0803a64e8000212c0300014082000c3aa0000148000100829b0004827400048253000c8232002880030000941bfffc80030004941bfffc80120098941bfffc807b000883110000801800007c0803a64e800021280300014182003081fb001081cf0004814e000c812a0028807b000883090008801800007c0803a64e8000213a030000480000183c6002a160630a30800d00287c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000811b000c9103000492030000831b0000801800007c0803a64e800021280300014182000c3aa0000348000028807b00043b7b000c800d00187c1b004040a00010800d00207c0803a64e8000214bfffefc3b7b000c28150001418200183860000380fb00087ce803a63b7b000c4e8000203860ffff80fb00087ce803a63b7b000c4e800020|@5569,1048575|200,3,@341 5569:S52|545950455f5452454528292e67656e457175616c69747946756e6374696f6e73283329636f6e737472457128332965712d283129 5570:S46|545950455f5452454528292e67656e457175616c69747946756e6374696f6e73283329636f6e7374724571283329 5571:S6|547970652028 5572:S27|2920646f6573206e6f74207265737065637420657175616c697479 5573:O2|-1,1 5574:S35|545950455f5452454528292e67656e457175616c69747946756e6374696f6e73283329 5575:O2|@5577,@5576 5576:O3|@5579,@5368,@4193 5577:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@5578,1048575| 5578:S30|545950455f5452454528292e636865636b57656c6c466f726d6564283129 5579:C2,236|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002ae62d608d092d7000082d8000892d7000c90970008931700043aa30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003e8002ae62940bb49283000092e30004973bfffc96bbfffc83180004801800007c0803a64e8000213a630000807b00003b130000801800007c0803a64e8000213a430000386000013b120000833b0004801800007c0903a67f2803a63b7b00084e800420|@5588,1048575|68,3,@5580 136,3,@5584 5580:C2,600|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000c82d7000c82b60024973bfffc971bfffc949bfffc3864000083150000801800007c0803a64e80002128030001418201f4829b00048274000c8253000c82320024807b000083110008801800007c0803a64e800021821b000481f0000c81cf000c814e0024807b0000830a0000801800007c0803a64e8000212803000141820030811b000480e8000c80c7000c80a60024807b000083050008801800007c0803a64e80002139230000480000183c6002a160630a30800d00287c0803a64e800021809b00048064000c8323000c8069000883190008801800007c0803a64e800021831b000482f8000c82d7000c947bfffc83160058801800007c0803a64e80002182bb00088295000c8274000c82530014947bfffc83120000801800007c0803a64e800021280300014082002c823b000c80910008807b000083110004833b0010801800007c0903a67f2803a63b7b00144e800420823b000c8211000c81f0000c800f003c941bfffc807b0008830f006c801800007c0803a64e800021831b0000801800007c0803a64e800021280300014182007c81db0010814e000c812a000c800e0008941bfffc807b000c8309004c801800007c0803a64e800021388300003c6002ae60630b443c0002a1600074a87c0803a64e8000213c8002ae60840b6c3c0002a1600074a87c0803a64e800021831b0000833b0018801800007c0903a67f2803a63b7b001c4e8004203860000181db00147dc803a63b7b00184e80002038600001829b00087e8803a63b7b000c4e800020|@5583,1048575|208,3,@341 484,3,@5581 492,3,@511 508,3,@5582 516,3,@511 5581:S29|496c6c2d666f726d6564207369676e6174757265202d20747970652028 5582:S15|29206973206e6f742072696769642e 5583:S38|545950455f5452454528292e636865636b57656c6c466f726d6564283229636865636b283229 5584:C2,80|7f2802a6633900023ae30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003ec002ae62d60c2092c3000082d8000492c3000892e300047f2803a64e800020|@5587,983041|48,3,@5585 5585:C2,52|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000218098000483180008801800007c0903a64e800420|@5586,1048575| 5586:S41|545950455f5452454528292e636865636b57656c6c466f726d6564283229636865636b283129283129 5587:S38|545950455f5452454528292e636865636b57656c6c466f726d6564283229636865636b283129 5588:S30|545950455f5452454528292e636865636b57656c6c466f726d6564283229 5589:O3|@5591,@5590,@4193 5590:O3|@5594,@4193,@5593 5591:C2,812|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000882d7000c973bfffc971bfffc947bfffc83160030801800007c0803a64e80002182bb0004829500088274000c947bfffc807b00048313002c801800007c0803a64e800021825b0008823200088211000c81f00018947bfffc807b0004830f0000801800007c0803a64e80002128030001418200a081db000c814e0008812a000c81090018807b000483080008801800007c0803a64e80002180db000c80a600088085000c8064001883230000807b00043b190000801800007c0803a64e800021280300014182003082fb000c82d7000882b6000c82950018807b000483140008801800007c0803a64e8000213b030000480000183c6002a160630a30800d00287c0803a64e80002180f800044800000880fb000481db000c814e0008812a000c8109002494fbfffc80090008941bfffc3867000083080000801800007c0803a64e800021280300014182003480db001480a600088085000c8064002483230008807b00043b190000801800007c0803a64e80002138e30000480000183c6002a160630a30800d00287c0803a64e80002180670008831b0000801800007c0803a64e800021831b001482f8000882d7000c83160060801800007c0803a64e8000212c0300014082000c3aa00001480000ac829b0014827400088253000c80030000941bfffc80030004941bfffc807b00048312002c801800007c0803a64e800021809b00103f00000063184368801800007c0803a64e8000212803000141820034398000013bbdfff87c1df04040a00010800d001c7c0803a64e8000213abd0004919d0000823b00049235000048000028807b00003b7b0008800d00187c1b004040a00010800d00207c0803a64e8000214bffff503b7b000872ab000140820078821b001481f0000881cf000c80150000941bfffc807b0000830e0030801800007c0803a64e800021815b001838830000807b0010830a0004801800007c0803a64e8000212803000141820018807b0000813b001c7d2803a63b7b00204e800020807b0014813b001c7d2803a63b7b00204e800020807b0010821b00187e0803a63b7b001c4e800020|@5592,1048575|280,3,@341 416,3,@341 552,3,I24 5592:S35|545950455f5452454528292e66696e6456616c7565436f6e7374727563746f72283129 5593:O2|@5596,@5590 5594:C2,1704|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7000c82b60024973bfffc971bfffc947bfffc949bfffc3864000083150000801800007c0803a64e8000212803000141820240829b0008827400048253000c82320024807b000083110008801800007c0803a64e800021821b000881f0000481cf000c814e0024947bfffc807b0008830a0000801800007c0803a64e80002128030001418201d8813b000c8109000480e8000c80c70024807b000883060008801800007c0803a64e80002180bb000c808500048324000c831b0000947bfffc80190040941bfffc8019006c941bfffc8078000883190008801800007c0803a64e800021831b0000801800007c0803a64e80002182fb001882d7000482b6000c829b0008947bfffc8015006c941bfffc8074000883150008801800007c0803a64e800021831b0000801800007c0803a64e8000213a630000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092630004825b000492430000831b000c801800007c0803a64e80002128030001418200cc823b0014821b001081f0000081d100002c0e000140820034280f00014082001838600003815b00247d4803a63b7b00284e80002038600001815b00247d4803a63b7b00284e80002071eb000140820068800e0004941bfffc800f0004941bfffc808e0000806f0000831b00284bfffdf1280300014182002c81db000481fb00003b7b0008800d00187c1b004040a00010800d00207c0803a64e8000214bffff7438600001815b002c7d4803a63b7b00304e80002038600001815b00247d4803a63b7b00284e80002038600001823b00247e2803a63b7b00284e80002038600001813b00107d2803a63b7b00144e800020829b0008827400048253000c82320018807b000083110000801800007c0803a64e80002128030001418200e8821b000881f0000481cf000c814e0018807b0000830a0008801800007c0803a64e800021813b00088109000480e8000c80c70018947bfffc807b000883060000801800007c0803a64e800021280300014182008080bb000c808500048064000c83230018807b000883190008801800007c0803a64e800021831b0000947bfffc8098000080630000831b00104bfffcb5280300014182002882fb000482db00008097000480760004831b0010833b00147f2803a63b7b00184bfffc903860000182fb00147ee803a63b7b00184e8000203860000180bb00107ca803a63b7b00144e800020821b000881f0000481cf000c814e001c807b0000830a0000801800007c0803a64e80002128030001418200fc813b00088109000480e8000c80c7001c807b000083060008801800007c0803a64e80002180bb0008808500048324000c8319001c947bfffc807b000883180000801800007c0803a64e800021280300014182009482fb000c82d7000482b6000c8295001c807b000883140008801800007c0803a64e800021827b000082530000281200014182004c82230000281100014182002c821b000c809300048063000483100008833b0010801800007c0903a67f2803a63b7b00144e80042038600001821b00107e0803a63b7b00144e80002038600001823b00107e2803a63b7b00144e8000203860000182fb00107ee803a63b7b00144e800020813b00088109000480e8000c80c70028807b000083060000801800007c0803a64e80002128030001418200ec80bb0008808500048064000c83230028807b000083190008801800007c0803a64e800021831b000882f8000482d7000c82b60028947bfffc807b000883150000801800007c0803a64e8000212803000141820084829b000c827400048253000c82320028807b000883110008801800007c0803a64e800021821b000c81f0000481cf000c39430000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000091430004813b000091230000830e0098833b0010801800007c0903a67f2803a63b7b00144e80042038600001829b00107e8803a63b7b00144e80002080bb0008808500048064000c83230010807b000083190000801800007c0803a64e8000212803000141820034831b000882f8000482d7000c82b60010807b000483150000833b000c801800007c0903a67f2803a63b7b00104e800420831b000882f8000482d7000c82b60014807b000083150000801800007c0803a64e8000212803000141820034829b0008827400048253000c82320014807b000483110000833b000c801800007c0903a67f2803a63b7b00104e80042038600001829b000c7e8803a63b7b00104e800020|@5595,1048575| 5595:S25|545950455f5452454528292e657175616c5479706573283229 5596:C2,252|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0400014082001c280300014082000c386000034e800020386000014e800020706b0001408200b082e4000082c300003ab900003a9800003a770000824400048223000480960000807700003f00000063184368801800007c0803a64e800021280300014182006496bbfffc969bfffc965bfffc963bfffc809300048076000483140004801800007c0803a64e8000212803000141820020809b0004807b0000831b0008833b000c7f2803a63b7b00104bffff3838600001821b000c7e0803a63b7b00104e800020386000017ea803a64e800020386000014e800020|@5597,1048575|108,3,I24 5597:S31|545950455f5452454528292e657175616c5265636f72644c69737473283229 5598:O2|@5599,@5396 5599:C2,80|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e3001096fbfffc82c3001496dbfffc80c3000c80a30008808300048063000083180004801800007c0903a64e800420|@5600,1048575| 5600:S29|545950455f5452454528292e636f707954797065436f6e737472283129 5601:O2|@5603,@5602 5602:O3|@5605,@4607,@4548 5603:C2,64|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180c3000c80a30008808300048063000083180004801800007c0903a64e800420|@5604,1048575| 5604:S35|545950455f5452454528292e646973706c6179547970655661726961626c6573283129 5605:C2,136|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc947bfffc949bfffc94bbfffc94dbfffc3860000183180008801800007c0803a64e800021833b0010831b000082fb0014931b001480db000438a30000809b0008807b000c831900043b370000801800007c0903a67f2803a63b7b00144e800420|@5606,1048575| 5606:S35|545950455f5452454528292e646973706c6179547970655661726961626c6573283429 5607:O5|@5610,@5368,@4193,@4190,@206 5608:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@5609,1048575| 5609:S40|545950455f5452454528292e636865636b466f7246726565547970655661726961626c6573283129 5610:C2,308|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000213d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ac0000192d70000398000073bbdffe07c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002ae62b51cc892b6000092f6001882f8001092f6001482b8000c92b6001090b6000c9076000880b8000890b60004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003e8002ae629423c89283000092c30004973bfffc949bfffc83180004801800007c0803a64e8000213a630000807b00003b130000801800007c0803a64e8000213a430000386000013b120000801800007c0803a64e80002138600001823b00047e2803a63b7b00084e800020|@5624,1048575|116,3,@5611 200,3,@5620 5611:C2,944|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7000c82b60028973bfffc971bfffc949bfffc3864000083150000801800007c0803a64e800021280300014182034c829b0004827400048253000c82320028807b000083110008801800007c0803a64e800021821b000481f0000481cf000c947bfffc830e0090801800007c0803a64e800021815b0008812a00048109000c80e8001483070000801800007c0803a64e80002128030001418202cc80db000880a600048085000c807b000083040080801800007c0803a64e8000212c030003408202a4807b000883230018807900003c0002ae600020947c0803a64e80002138830000386000bf3c0002a1600074a87c0803a64e800021831b000882f8001882d700003980000256c0f80140a20010800d00347c0803a64e8000217eb6661541a3fff092b70000829800048274000c947bfffc80130078941bfffc80180014941bfffc3860000183130048801800007c0803a64e800021825b0014823200048211000c947bfffc807b001083100084801800007c0803a64e80002139e30000398000063bbdffe47c1df04040a00010800d001c7c0803a64e800021387d0004919d000039c0000191c3001491e30010815b00009143000c813b000491230008390000019103000480fb000c90e30000831b0008801800007c0803a64e80002180db001838a0000138830000807b000c83060010801800007c0803a64e80002180bb00188085000483240008947bfffc80190008941bfffc8005000c941bfffc807b00008319000c801800007c0803a64e800021831b0024398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002ae62d6230492d7000482b8000892b700003a830000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092e300043e6002ae6273237092630000969bfffc3c0002a1600005347c0803a64e8000213a430000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092430008823b000092230004821b000492030000831b0008801800007c0803a64e80002181fb002881cf0004814e000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000813b000c91230004811b002091030000830a0094833b002c801800007c0903a67f2803a63b7b00304e8004203860000180db000c7cc803a63b7b00104e80002038600001829b00087e8803a63b7b000c4e800020|@5619,1048575|244,3,@5612 268,3,@511 640,3,@5614 704,3,@5618 720,3,@325 5612:C2,536|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021546bf80140a20010800d00347c0803a64e8000212c030035418000ac546bf80140a20010800d00347c0803a64e8000212c0300014180000c3ae00003480000083ae000012c1700034082000c3ac3000048000024398000325460f80140a20010800d00347c0803a64e8000217ecc1c1141a3fff0973bfffc947bfffc38800035387600003f00000063184e08801800007c0803a64e800021398000025460f80140a20010800d00347c0803a64e8000217c6c1c1141a3fff04bffff293b030000480000143f00000063184668973bfffc947bfffc971bfffc38800035807b00043f00000063184e28801800007c0803a64e8000212c0300014082000848000038546bf80140a20010800d00347c0803a64e8000212c0300014180000c3b200003480000083b20000128190003418200084800000c3b23000048000024398000345460f80140a20010800d00347c0803a64e8000217f23661541a3fff0398000c25720f80140a20010800d00347c0803a64e8000217f19661541a3fff0570bf80140a20010800d00347c0803a64e8000212c1800014080000848000024570bf80140a20010800d00347c0803a64e8000212c1801ff41810008480000183c6002a16063026c800d00287c0803a64e8000213af8000038970000807b0000833b00083c0002a1600074a87c0903a67f2803a63b7b000c4e800420|@5613,1048575|164,3,I109 228,3,I48 256,3,I110 476,3,@318 512,3,@511 5613:S50|545950455f5452454528292e636865636b466f7246726565547970655661726961626c657328332967656e4e616d65283129 5614:O2|@5616,@5615 5615:O2|@5617,0 5616:S33|2920636f6e7461696e73206120667265652074797065207661726961626c652e0a 5617:S32|53657474696e6720697420746f206120756e69717565206d6f6e6f747970652e 5618:S13|5468652074797065206f662028 5619:S53|545950455f5452454528292e636865636b466f7246726565547970655661726961626c6573283329636865636b5479706573283229 5620:C2,80|7f2802a6633900023ae30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003ec002ae62d6243492c3000082d8000492c3000892e300047f2803a64e800020|@5623,983041|48,3,@5621 5621:C2,52|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000218098000483180008801800007c0903a64e800420|@5622,1048575| 5622:S56|545950455f5452454528292e636865636b466f7246726565547970655661726961626c6573283329636865636b5479706573283129283129 5623:S53|545950455f5452454528292e636865636b466f7246726565547970655661726961626c6573283329636865636b5479706573283129 5624:S40|545950455f5452454528292e636865636b466f7246726565547970655661726961626c6573283329 5625:O3|@5627,@6156,@5626 5626:O2|@6379,@6378 5627:O2|@5629,@5628 5628:O2|@5632,@5631 5629:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@5630,1048575| 5630:S25|50415253455f5452454528292e7074446973706c6179283129 5631:O13|@5689,@5690,@5691,@5700,@5813,@5973,@6018,@6024,@6039,@4365,@6040,@6041,@5688 5632:C2,15992|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002ae62d664b092d7000082d8000492d7000890b70004398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003e8002ae6294686c92950000931500043d804000398c00043bbdffec7c1df04040a00010800d001c7c0803a64e8000213a9d0004919d00003e6002ae627368c4927400003a600001927400043a600001927400083a6000019274000c3d804000398c00023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a7d0004919d00003e4002ae62526c30925300003a40000192530004398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a5d0004919d00003e2002ae62316f209232000092d2000492d30004398000007d8c0e709993fffc92d4000492f400089254000c398000007d8c0e709994fffc548bf80140a20010800d00347c0803a64e8000212c0400014181004882160024973bfffc3865000083100000801800007c0803a64e80002139e300003c6002aa6063f9243b0f0000833b0000801800007c0903a67f2803a63b7b00044e800420820300002c10fff14082004c81f60024973bfffc80030004941bfffc38650000830f0000801800007c0803a64e80002139c30000807b00003b0e0000833b0004801800007c0903a67f2803a63b7b00084e8004202c10ffed4082012081f60008973bfffc971bfffc94bbfffc80030008941bfffc8063000c830f0098801800007c0803a64e8000213c8002ae608471a83f00000063184368801800007c0803a64e8000212803000141820084398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021395d0004919d00003d2002ae612971bc912a0004811b0000910a0000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00009143000438e0004590e300003c0002a1600005347c0803a64e80002139c300004800000881db0000815b0008812a00048109002495dbfffc807b000883080000801800007c0803a64e80002138e30000807b00003b070000833b0010801800007c0903a67f2803a63b7b00144e8004202c100003408203bc81f8000481cf0024973bfffc971bfffc949bfffc94bbfffc80030004941bfffc80030008941bfffc38650000830e0004801800007c0803a64e800021394300003c6002a16063f6583b0a0000801800007c0803a64e800021813b0004810900002c0800034182000c2c08fff14082004080fb000c3980000254e0f80140a20010800d00347c0803a64e8000217ccc3c1141a3fff080bb00083886000038690000831b00104bfffc094800012480fb001080c7000480a60024807b000883050000801800007c0803a64e80002138830000386000513b040000801800007c0803a64e800021807b00108323000483190024807b00088318000c801800007c0803a64e8000213ae300003c6002a16063f6583b170000801800007c0803a64e80002182db000c3980000256c0f80140a20010800d00347c0803a64e8000217eacb41141a3fff080bb000838950000807b0004831b00104bfffb59829b00108274000482530024807b00088312000c801800007c0803a64e8000213a2300003c6002a16063f6583b110000801800007c0803a64e800021821b001081f0000481cf0024807b0008830e0000801800007c0803a64e80002139430000386000533b0a0000801800007c0803a64e800021813b00108109000480e80024807b00088307000c801800007c0803a64e80002138c300003c6002a16063f6583b060000801800007c0803a64e80002180bb0000808500002c04001b40820040807b000c398000025460f80140a20010800d00347c0803a64e8000217f2c1c1141a3fff080bb000838990000807b0000831b00104bfffa6148000124807b00108323000483190024807b000883180000801800007c0803a64e8000213ae30000386000513b170000801800007c0803a64e80002182db001082b6000482950024807b00088314000c801800007c0803a64e8000213a6300003c6002a16063f6583b130000801800007c0803a64e800021825b000c398000025640f80140a20010800d00347c0803a64e8000217e2c941141a3fff080bb000838910000807b0000831b00104bfff9b1821b001081f0000481cf0024807b0008830e000c801800007c0803a64e800021394300003c6002a16063f6583b0a0000801800007c0803a64e800021813b00108109000480e80024807b000883070000801800007c0803a64e80002138c30000386000533b060000801800007c0803a64e80002180bb0010808500048064002483230008807b00083b190000801800007c0803a64e8000213b03000038600001833b0014801800007c0903a67f2803a63b7b00184e8004202c1000054082033081f8000481cf0024973bfffc971bfffc949bfffc94bbfffc80030004941bfffc80030008941bfffc8003000c941bfffc38650000830e0004801800007c0803a64e800021394300003c6002a16063f6583b0a0000801800007c0803a64e800021813b00148109000480e80024807b000c83070000801800007c0803a64e80002138c300003c6002a7606341283b060000801800007c0803a64e80002180bb001480850004806400248323000c807b000c3b190000801800007c0803a64e8000213b0300003c6002a06063ee14801800007c0803a64e80002182fb00103980000256e0f80140a20010800d00347c0803a64e8000217eccbc1141a3fff080bb000c38960000807b0008831b00144bfff7e182bb00148295000482740024807b000c8313000c801800007c0803a64e8000213a4300003c6002a06063ee143b120000801800007c0803a64e800021823b00148211000481f00024807b000c830f0000801800007c0803a64e80002139c300003c6002a7606341103b0e0000801800007c0803a64e800021815b0014812a000481090024807b000c8308000c801800007c0803a64e80002138e300003c6002a06063ee143b070000801800007c0803a64e80002180db00103980000254c0f80140a20010800d00347c0803a64e8000217cac341141a3fff03885000080bb000c807b0000831b00144bfff6f5807b00148323000483190024807b000c8318000c801800007c0803a64e8000213ae300003c6002a06063ee143b170000801800007c0803a64e80002182db001482b6000482950024807b000c83140000801800007c0803a64e8000213a6300003c6002a7606342ac3b130000801800007c0803a64e800021825b00148232000482110024807b000c8310000c801800007c0803a64e80002139e300003c6002a06063ee143b0f0000801800007c0803a64e80002181db00103980000255c0f80140a20010800d00347c0803a64e8000217d4c741141a3fff080bb000c388a0000807b0004831b00144bfff609813b00148109000480e80024807b000c83070008801800007c0803a64e80002138c30000386000013b060000833b0018801800007c0903a67f2803a63b7b001c4e8004202c10001b408201cc81f8000481cf0024973bfffc971bfffc949bfffc94bbfffc96fbfffc96bbfffc80030004941bfffc38650000830e0004801800007c0803a64e800021394300003c6002aa6063e6a03b0a0000801800007c0803a64e800021813b00148109000480e80024807b000c83070000801800007c0803a64e80002138c30000386000513b060000801800007c0803a64e80002180bb001480850004806400248323000c807b000c3b190000801800007c0803a64e8000213b0300003c6002a06063ee14801800007c0803a64e80002182fb00103980000256e0f80140a20010800d00347c0803a64e8000217eccbc1141a3fff080db000438b6000038800059807b0000831b0008801800007c0803a64e80002182bb00148295000482740024807b000c8313000c801800007c0803a64e8000213a4300003c6002a16063f6583b120000801800007c0803a64e800021823b00148211000481f00024807b000c830f0000801800007c0803a64e80002139c30000386000533b0e0000801800007c0803a64e800021815b0014812a000481090024807b000c83080008801800007c0803a64e80002138e30000386000013b070000833b0018801800007c0903a67f2803a63b7b001c4e8004202c10ffe3408201d0398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002139fd0004919d00003dc002ae61ce71c891cf0000930f000881580004914f0004812a0024973bfffc971bfffc949bfffc94bbfffc96fbfffc80030004941bfffc95fbfffc3865000083090004801800007c0803a64e800021390300003c6002aa6063e6a03b080000801800007c0803a64e80002180fb001480c7000480a60024807b000c83050000801800007c0803a64e800021388300003c6002a7606343bc3b040000801800007c0803a64e800021807b00148323000483190024807b000c8318000c801800007c0803a64e8000213ae300003c6002a06063ee143b170000801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002ae62b5749c92b60000829b000092960004827b0010398000025660f80140a20010800d00347c0803a64e8000217e4c9c1141a3fff038d6000038b200003c8002a16084a11c807b0004831b0008801800007c0803a64e800021823b00148211000481f00024807b000c830f0008801800007c0803a64e80002139c30000386000013b0e0000833b0018801800007c0903a67f2803a63b7b001c4e8004202c10fff3408202283d804000398c00033bbdfff07c1df04040a00010800d001c7c0803a64e80002139fd0004919d00003dc002ae61ce752491cf000039400001914f000439200001912f0008398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021391d0004919d00003ce002ae60e7769890e800009308000880d8000490c8000492ef0004910f0008398000007d8c0e70998ffffc82a60024973bfffc971bfffc949bfffc94bbfffc96fbfffc80030004941bfffc95fbfffc3865000083150004801800007c0803a64e8000213a8300003c6002aa6063e6a03b140000801800007c0803a64e800021827b00148253000482320024807b000c83110000801800007c0803a64e8000213a0300003c6002a7606342103b100000801800007c0803a64e80002181fb001481cf0004814e0024807b000c830a000c801800007c0803a64e800021392300003c6002a06063ee143b090000801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021391d0004919d00003ce002ae60e778d890e8000080db000090c8000480bb00103980000254a0f80140a20010800d00347c0803a64e8000217c8c2c1141a3fff038c8000038a400003c8002a16084a11c807b0004831b0008801800007c0803a64e800021807b00148323000483190024807b000c83180008801800007c0803a64e8000213ae30000386000013b170000833b0018801800007c0903a67f2803a63b7b001c4e8004202c100017408201cc398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002139fd0004919d00003dc002ae61ce796491cf000081580004914f0004812a0024973bfffc971bfffc949bfffc94bbfffc96fbfffc80030004941bfffc95fbfffc3865000083090004801800007c0803a64e800021390300003c6002aa6063e6a03b080000801800007c0803a64e80002180fb001480c7000480a60024807b000c83050000801800007c0803a64e800021388300003c6002a7606341f83b040000801800007c0803a64e800021807b00148323000483190024807b000c8318000c801800007c0803a64e8000213ae300003c6002a06063ee143b170000801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002ae62b57a1c92b60000829b000092960004827b0010398000025660f80140a20010800d00347c0803a64e8000217e4c9c1141a3fff038d6000038b200003c80000060844668807b0004831b0008801800007c0803a64e800021823b00148211000481f00024807b000c830f0008801800007c0803a64e80002139c30000386000013b0e0000833b0018801800007c0903a67f2803a63b7b001c4e8004202c100013408201cc81f8000481cf0024973bfffc971bfffc949bfffc94bbfffc96fbfffc96bbfffc80030004941bfffc38650000830e0004801800007c0803a64e800021394300003c6002aa6063e6a03b0a0000801800007c0803a64e800021813b00148109000480e80024807b000c83070000801800007c0803a64e80002138c30000386000b73b060000801800007c0803a64e80002180bb001480850004806400248323000c807b000c3b190000801800007c0803a64e8000213b0300003c6002a06063ee14801800007c0803a64e80002182fb00103980000256e0f80140a20010800d00347c0803a64e8000217eccbc1141a3fff080db000438b6000038800059807b0000831b0008801800007c0803a64e80002182bb00148295000482740024807b000c8313000c801800007c0803a64e8000213a4300003c6002a16063f6583b120000801800007c0803a64e800021823b00148211000481f00024807b000c830f0000801800007c0803a64e80002139c30000386000bb3b0e0000801800007c0803a64e800021815b0014812a000481090024807b000c83080008801800007c0803a64e80002138e30000386000013b070000833b0018801800007c0903a67f2803a63b7b001c4e8004202c10fffb408201e881f8000481cf0024973bfffc971bfffc949bfffc94bbfffc80030004941bfffc80030008941bfffc38650000830e0004801800007c0803a64e800021394300003c6002a66063e9d83b0a0000801800007c0803a64e800021813b000c398000025520f80140a20010800d00347c0803a64e8000217d0c4c1141a3fff080bb000838880000807b0000831b00104bffebbd80fb001080c7000480a60024807b00088305000c801800007c0803a64e800021388300003c6002a06063ee143b040000801800007c0803a64e800021807b00108323000483190024807b000883180000801800007c0803a64e8000213ae30000386000753b170000801800007c0803a64e80002182db001082b6000482950024807b00088314000c801800007c0803a64e8000213a6300003c6002a06063ee143b130000801800007c0803a64e800021825b0010823200048211000c398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d000039e0000391e3000c81db000891c30008815b000c91430004813b0004912300008310004c801800007c0803a64e800021811b001080e8000480c70024807b000883060008801800007c0803a64e80002138a30000386000013b050000833b0014801800007c0903a67f2803a63b7b00184e8004202c10ffef408201c481f8000481cf0024973bfffc971bfffc949bfffc94bbfffc80030004941bfffc80030008941bfffc38650000830e0004801800007c0803a64e800021394300003c6002aa6063e6a03b0a0000801800007c0803a64e800021813b000c398000025520f80140a20010800d00347c0803a64e8000217d0c4c1141a3fff080bb000838880000807b0004831b00104bffe9d180fb001080c7000480a60024807b00088305000c801800007c0803a64e800021388300003c6002a06063ee143b040000801800007c0803a64e800021807b00108323000483190024807b000883180000801800007c0803a64e8000213ae300003c6002a7606343303b170000801800007c0803a64e80002182db001082b6000482950024807b00088314000c801800007c0803a64e8000213a6300003c6002a06063ee143b130000801800007c0803a64e800021825b000c398000025640f80140a20010800d00347c0803a64e8000217e2c941141a3fff080bb000838910000807b0000831b00104bffe8e5821b001081f0000481cf0024807b0008830e0008801800007c0803a64e80002139430000386000013b0a0000833b0014801800007c0903a67f2803a63b7b00184e8004202c10ffeb408201c881e3000481d80004814e0024973bfffc971bfffc949bfffc94bbfffc800f0000941bfffc800f0008941bfffc38650000830a0004801800007c0803a64e800021392300003c6002a16063f6583b090000801800007c0803a64e800021811b000c398000025500f80140a20010800d00347c0803a64e8000217cec441141a3fff080bb000838870000807b0000831b00104bffe80580db001080a6000480850024807b00088304000c801800007c0803a64e8000213b2300003c6002a06063ee143b190000801800007c0803a64e800021831b001082f8000482d70024807b000883160000801800007c0803a64e8000213aa300003c6002a76063450c3b150000801800007c0803a64e800021829b00108274000482530024807b00088312000c801800007c0803a64e8000213a2300003c6002a06063ee143b110000801800007c0803a64e800021821b000c398000025600f80140a20010800d00347c0803a64e8000217dec841141a3fff080bb0008388f0000807b0004831b00104bffe71981db0010814e0004812a0024807b000883090008801800007c0803a64e80002139030000386000013b080000833b0014801800007c0903a67f2803a63b7b00184e8004202c10000d4082015c81f8000481cf0024973bfffc971bfffc949bfffc94bbfffc96fbfffc96bbfffc80030004941bfffc38650000830e0004801800007c0803a64e800021394300003c6002aa6063e6a03b0a0000801800007c0803a64e800021813b00148109000480e80024807b000c83070000801800007c0803a64e80002138c300003c6002a7606342343b060000801800007c0803a64e80002180bb001480850004806400248323000c807b000c3b190000801800007c0803a64e8000213b0300003c6002a06063ee14801800007c0803a64e80002182fb00103980000256e0f80140a20010800d00347c0803a64e8000217eccbc1141a3fff080db000438b60000388000f9807b0000831b0008801800007c0803a64e80002182bb00148295000482740024807b000c83130008801800007c0803a64e8000213a430000386000013b120000833b0018801800007c0903a67f2803a63b7b001c4e8004202c10001d4082004c81f8000481cf0024973bfffc38650000830e0000801800007c0803a64e800021394300003c6002ac60638cc83b0a0000833b0000801800007c0903a67f2803a63b7b00044e8004202c10ffe14082004881f8000481cf0024973bfffc38650000830e0000801800007c0803a64e80002139430000386000bf3b0a0000833b0000801800007c0903a67f2803a63b7b00044e8004202c1000154082033481f8000481cf0024973bfffc971bfffc949bfffc94bbfffc96fbfffc96bbfffc80030004941bfffc80030008941bfffc8003000c941bfffc38650000830e0004801800007c0803a64e800021394300003c6002a66063e9d83b0a0000801800007c0803a64e800021813b001c8109000480e80024807b001483070000801800007c0803a64e80002180db0008280600014182001438a300003c6002a7606344a44800001038a300003c6002a76063453c3b050000801800007c0803a64e800021809b001c8064000483230024807b00148319000c801800007c0803a64e8000213b0300003c6002a06063ee14801800007c0803a64e800021947bfffc947bfffc389b0000807b00083f0002ae63187aa4801800007c0803a64e80002182fb00203980000256e0f80140a20010800d00347c0803a64e8000217eccbc1141a3fff080db001438b6000038800077807b0000831b0018801800007c0803a64e80002182bb00248295000482740024807b001c8313000c801800007c0803a64e8000213a4300003c6002a06063ee143b120000801800007c0803a64e800021823b00248211000481f00024807b001c830f0000801800007c0803a64e80002139c300003c6002a7606342583b0e0000801800007c0803a64e800021815b0024812a000481090024807b001c8308000c801800007c0803a64e80002138e300003c6002a06063ee143b070000801800007c0803a64e800021947bfffc947bfffc389b0000807b00143f0002ae63187bdc801800007c0803a64e80002180db00283980000254c0f80140a20010800d00347c0803a64e8000217cac341141a3fff080db001c38800077807b0000831b0020801800007c0803a64e800021809b002c8064000483230024807b00248319000c801800007c0803a64e8000213b0300003c6002a06063ee14801800007c0803a64e80002182fb002c82d7000482b60024807b002483150000801800007c0803a64e8000213a8300003c6002a7606342703b140000801800007c0803a64e800021827b002c8253000482320024807b002483110008801800007c0803a64e8000213a030000386000013b100000833b0030801800007c0903a67f2803a63b7b00344e8004202c10ffe5408201d081e3000471eb00014082002c814f0000812a00082c090003408200103dc002a761ce42c4480000183dc002a761ce41904800000c3dc002a761ce419081580004812a0024973bfffc971bfffc949bfffc94bbfffc96fbfffc967bfffc95fbfffc95dbfffc3865000083090004801800007c0803a64e800021390300003c6002aa6063e6a03b080000801800007c0803a64e80002180fb001880c7000480a60024807b001083050000801800007c0803a64e80002138830000807b00003b040000801800007c0803a64e800021807b00188323000483190024807b00108318000c801800007c0803a64e8000213ae300003c6002a06063ee143b170000801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002ae62b57cf892b60000829b000892960004827b0014398000025660f80140a20010800d00347c0803a64e8000217e4c9c1141a3fff038d6000038b200003c8002a16084a11c807b0004831b000c801800007c0803a64e800021823b00188211000481f00024807b0010830f0008801800007c0803a64e80002139c30000386000013b0e0000833b001c801800007c0903a67f2803a63b7b00204e8004202c100007408202e881f8000481cf0024973bfffc971bfffc949bfffc94bbfffc96fbfffc969bfffc967bfffc80030008941bfffc8003000c941bfffc38650000830e0004801800007c0803a64e800021394300003c6002aa6063e6a03b0a0000801800007c0803a64e800021813b001c8109000480e80024807b001483070000801800007c0803a64e80002138c300003c6002a7606342fc3b060000801800007c0803a64e80002180bb001c80850004806400248323000c807b00143b190000801800007c0803a64e8000213b0300003c6002a06063ee14801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002ae62d67d8492d7000082bb000c92b70004829b0018398000025680f80140a20010800d00347c0803a64e8000217e6ca41141a3fff038d7000038b300003c8002a16084a11c807b0004831b0010801800007c0803a64e800021825b00002c1200014082000848000138823b001c8211000481f00024807b0014830f000c801800007c0803a64e80002139c300003c6002a06063ee143b0e0000801800007c0803a64e800021815b001c812a000481090024807b001483080000801800007c0803a64e80002138e300003c6002a7606343a03b070000801800007c0803a64e80002180db001c80a6000480850024807b00148304000c801800007c0803a64e8000213b2300003c6002a06063ee143b190000801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b1d0004919d00003ee002ae62f77e1492f8000082db000892d8000482bb00183980000256a0f80140a20010800d00347c0803a64e8000217e8cac1141a3fff038d8000038b400003c8002a16084a11c807b0000831b0010801800007c0803a64e800021827b001c8253000482320024807b001483110008801800007c0803a64e8000213a030000386000013b100000833b0020801800007c0903a67f2803a63b7b00244e8004202c10fff9408202a881f8000481cf0024973bfffc971bfffc94bbfffc80030004941bfffc80030008941bfffc38650000830e0004801800007c0803a64e800021394300003c6002aa6063e6a03b0a0000801800007c0803a64e800021813b000c8109000480e80024807b000883070000801800007c0803a64e80002138c300003c6002a7606342fc3b060000801800007c0803a64e80002180bb000c80850004806400248323000c807b00083b190000801800007c0803a64e8000213b0300003c6002a06063ee14801800007c0803a64e80002182fb000c82d7000482b60024807b000883150000801800007c0803a64e8000213a830000807b00043b140000801800007c0803a64e800021827b000c8253000482320024807b00088311000c801800007c0803a64e8000213a0300003c6002a06063ee143b100000801800007c0803a64e80002181fb000c81cf0004814e0024807b0008830a0000801800007c0803a64e800021392300003860007b3b090000801800007c0803a64e800021811b000c80e8000480c70024807b00088306000c801800007c0803a64e80002138a300003c6002a06063ee143b050000801800007c0803a64e800021809b000c8064000483230024807b000883190000801800007c0803a64e8000213b0300003c6002a7606342fc801800007c0803a64e80002182fb000c82d7000482b60024807b00088315000c801800007c0803a64e8000213a8300003c6002a06063ee143b140000801800007c0803a64e800021827b000c8253000482320024807b000883110000801800007c0803a64e8000213a030000807b00003b100000801800007c0803a64e80002181fb000c81cf0004814e0024807b0008830a0008801800007c0803a64e80002139230000386000013b090000833b0010801800007c0903a67f2803a63b7b00144e8004202c1000014082048081f8000481cf0024973bfffc971bfffc949bfffc94bbfffc96fbfffc96bbfffc969bfffc967bfffc80030004941bfffc80030008941bfffc8003000c941bfffc38650000830e0004801800007c0803a64e800021394300003c6002aa6063e6a03b0a0000801800007c0803a64e800021813b00248109000480e80024807b001c83070000801800007c0803a64e80002138c300003c6002a7606343483b060000801800007c0803a64e80002180bb002480850004806400248323000c807b001c3b190000801800007c0803a64e8000213b0300003c6002a06063ee14801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002ae62d67e6c92d7000082bb001092b70004829b0020398000025680f80140a20010800d00347c0803a64e8000217e6ca41141a3fff038d7000038b300003c8002a16084a11c807b0004831b0018801800007c0803a64e800021825b00248232000482110024807b001c8310000c801800007c0803a64e80002139e300003c6002a06063ee143b0f0000801800007c0803a64e80002181db00002c0e00014082000848000138815b0024812a000481090024807b001c83080000801800007c0803a64e80002138e300003c6002a7606343a03b070000801800007c0803a64e80002180db002480a6000480850024807b001c8304000c801800007c0803a64e8000213b2300003c6002a06063ee143b190000801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b1d0004919d00003ee002ae62f77ec492f8000082db000c92d8000482bb00203980000256a0f80140a20010800d00347c0803a64e8000217e8cac1141a3fff038d8000038b400003c8002a16084a11c807b0000831b0018801800007c0803a64e800021827b00248253000482320024807b001c8311000c801800007c0803a64e8000213a0300003c6002a06063ee143b100000801800007c0803a64e80002181fb002481cf0004814e0024807b001c830a0000801800007c0803a64e800021392300003c6002a7606341e03b090000801800007c0803a64e800021811b002480e8000480c70024807b001c8306000c801800007c0803a64e80002138a300003c6002a06063ee143b050000801800007c0803a64e800021809b00248064000483230024807b001c83190004801800007c0803a64e8000213b0300003c6002aa6063e6a0801800007c0803a64e800021947bfffc947bfffc389b0000807b00103f0002ae63187f1c801800007c0803a64e80002182fb00283980000256e0f80140a20010800d00347c0803a64e8000217eccbc1141a3fff080db001c38b6000038800077807b0000831b0020801800007c0803a64e80002182bb002c8295000482740024807b002483130008801800007c0803a64e8000213a430000386000013b120000801800007c0803a64e800021823b002c8211000481f00024807b0024830f0008801800007c0803a64e80002139c30000386000013b0e0000833b0030801800007c0903a67f2803a63b7b00344e8004202c10fff5408201f081f8000481cf0024973bfffc971bfffc949bfffc94bbfffc96fbfffc96bbfffc80030004941bfffc38650000830e0004801800007c0803a64e800021394300003c6002aa6063e6a03b0a0000801800007c0803a64e800021813b00148109000480e80024807b000c83070000801800007c0803a64e80002138c30000386000513b060000801800007c0803a64e80002180bb001480850004806400248323000c807b000c3b190000801800007c0803a64e8000213b0300003c6002a16063f658801800007c0803a64e800021947bfffc947bfffc389b0000807b00083f0002ae63188038801800007c0803a64e80002182fb00183980000256e0f80140a20010800d00347c0803a64e8000217eccbc1141a3fff080db000c38b6000038800077807b0000831b0010801800007c0803a64e80002182bb001c8295000482740024807b00148313000c801800007c0803a64e8000213a4300003c6002a16063f6583b120000801800007c0803a64e800021823b001c8211000481f00024807b0014830f0000801800007c0803a64e80002139c30000386000533b0e0000801800007c0803a64e800021815b001c812a000481090024807b001483080008801800007c0803a64e80002138e30000386000013b070000833b0020801800007c0903a67f2803a63b7b00244e8004202c100009408201bc81f8000481cf0024973bfffc971bfffc949bfffc94bbfffc96fbfffc80030004941bfffc80030008941bfffc38650000830e0004801800007c0803a64e800021394300003c6002aa6063e6a03b0a0000801800007c0803a64e800021813b00148109000480e80010398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000080db000c90c3000880bb001090a30004809b00049083000083070024801800007c0803a64e800021807b00148323000483190024807b000c8318000c801800007c0803a64e8000213ae300003c6002a06063ee143b170000801800007c0803a64e80002182db0014398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003e8002ae62948154929500008276000492750004825b0010398000025640f80140a20010800d00347c0803a64e8000217e2c941141a3fff038d5000038b100003c80000060844668807b0000831b0008801800007c0803a64e800021821b001481f0000481cf0024807b000c830e0008801800007c0803a64e80002139430000386000013b0a0000833b0018801800007c0903a67f2803a63b7b001c4e8004202c10000b408201d0398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002139fd0004919d00003dc002ae61ce820091cf0000930f000881580004914f0004812a0024973bfffc971bfffc949bfffc94bbfffc96fbfffc80030004941bfffc95fbfffc3865000083090004801800007c0803a64e800021390300003c6002aa6063e6a03b080000801800007c0803a64e80002180fb001480c7000480a60024807b000c83050000801800007c0803a64e800021388300003c6002a7606344343b040000801800007c0803a64e800021807b00148323000483190024807b000c8318000c801800007c0803a64e8000213ae300003c6002a06063ee143b170000801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002ae62b5859492b60000829b000092960004827b0010398000025660f80140a20010800d00347c0803a64e8000217e4c9c1141a3fff038d6000038b200003c8002a16084a11c807b0004831b0008801800007c0803a64e800021823b00148211000481f00024807b000c830f0008801800007c0803a64e80002139c30000386000013b0e0000833b0018801800007c0903a67f2803a63b7b001c4e8004202c1000194082014881f8000481cf0024973bfffc971bfffc949bfffc94bbfffc80030004941bfffc38650000830e0004801800007c0803a64e800021394300003c6002a16063f6583b0a0000801800007c0803a64e800021813b000c8109000480e80024807b000483070000801800007c0803a64e80002138c300003c6002a7606343d43b060000801800007c0803a64e80002180bb000c80850004806400248323000c807b00043b190000801800007c0803a64e8000213b0300003c6002a06063ee14801800007c0803a64e80002182fb00083980000256e0f80140a20010800d00347c0803a64e8000217eccbc1141a3fff080bb000438960000807b0000831b000c4bffcf2182bb000c8295000482740024807b000483130008801800007c0803a64e8000213a430000386000013b120000833b0010801800007c0903a67f2803a63b7b00144e8004202c10000f4082024c81f8000481cf0024973bfffc971bfffc949bfffc94bbfffc96fbfffc96bbfffc80030004941bfffc80030008941bfffc38650000830e0004801800007c0803a64e800021394300003c6002a16063f6583b0a0000801800007c0803a64e800021813b0014398000025520f80140a20010800d00347c0803a64e8000217d0c4c1141a3fff080bb001038880000807b0004831b00184bffce3d80fb001880c7000480a60024807b00108305000c801800007c0803a64e800021388300003c6002a06063ee143b040000801800007c0803a64e800021807b00188323000483190024807b001083180004801800007c0803a64e8000213ae300003c6002aa6063e6a03b170000801800007c0803a64e80002182db001882b6000482950024807b001083140000801800007c0803a64e8000213a6300003c6002a7606345983b130000801800007c0803a64e800021825b00188232000482110024807b00108310000c801800007c0803a64e80002139e300003c6002a06063ee143b0f0000801800007c0803a64e80002181db00143980000255c0f80140a20010800d00347c0803a64e8000217d4c741141a3fff080db000838aa0000388000f9807b0000831b000c801800007c0803a64e800021813b00188109000480e80024807b001083070008801800007c0803a64e80002138c30000386000013b060000801800007c0803a64e80002180bb0018808500048064002483230008807b00103b190000801800007c0803a64e8000213b03000038600001833b001c801800007c0903a67f2803a63b7b00204e8004202c10001f4082023c81f8000481cf0024973bfffc971bfffc949bfffc94bbfffc80030004941bfffc80030008941bfffc38650000830e0004801800007c0803a64e800021394300003c6002a16063f6583b0a0000801800007c0803a64e800021813b00108109000480e80024807b000883070000801800007c0803a64e80002138c300003c6002a7606344d83b060000801800007c0803a64e80002180bb001080850004806400248323000c807b00083b190000801800007c0803a64e8000213b0300003c6002a06063ee14801800007c0803a64e80002182fb000c3980000256e0f80140a20010800d00347c0803a64e8000217eccbc1141a3fff080bb000838960000807b0000831b00104bffcb7d82bb00108295000482740024807b00088313000c801800007c0803a64e8000213a4300003c6002a06063ee143b120000801800007c0803a64e800021823b00108211000481f00024807b0008830f0000801800007c0803a64e80002139c300003c6002a7606342943b0e0000801800007c0803a64e800021815b0010812a000481090024807b00088308000c801800007c0803a64e80002138e300003c6002a06063ee143b070000801800007c0803a64e80002180db000c3980000254c0f80140a20010800d00347c0803a64e8000217cac341141a3fff03885000080bb0008807b0004831b00104bffca91807b00108323000483190024807b000883180008801800007c0803a64e8000213ae30000386000013b170000833b0014801800007c0903a67f2803a63b7b00184e8004202c10fffd408202c481f8000481cf0024973bfffc971bfffc949bfffc94bbfffc96fbfffc96bbfffc80030004941bfffc80030008941bfffc38650000830e0004801800007c0803a64e800021394300003c6002aa6063e6a03b0a0000801800007c0803a64e800021813b00188109000480e80024807b001083070004801800007c0803a64e80002138c300003c6002a16063f6583b060000801800007c0803a64e80002180bb0018808500048064002483230000807b00103b190000801800007c0803a64e8000213b0300003c6002a76063458c801800007c0803a64e80002182fb001882d7000482b60024807b00108315000c801800007c0803a64e8000213a8300003c6002a06063ee143b140000801800007c0803a64e800021827b0014398000025660f80140a20010800d00347c0803a64e8000217e4c9c1141a3fff080bb001038920000807b0004831b00184bffc8f9823b00188211000481f00024807b0010830f000c801800007c0803a64e80002139c300003c6002a06063ee143b0e0000801800007c0803a64e800021815b0018812a000481090024807b001083080000801800007c0803a64e80002138e300003c6002a7606341403b070000801800007c0803a64e80002180db001880a6000480850024807b001083040008801800007c0803a64e8000213b230000386000013b190000801800007c0803a64e800021831b001882f8000482d70024807b00108316000c801800007c0803a64e8000213aa300003c6002a06063ee143b150000801800007c0803a64e800021829b0014398000025680f80140a20010800d00347c0803a64e8000217e6ca41141a3fff080db000838b30000388000f9807b0000831b000c801800007c0803a64e800021825b00188232000482110024807b001083100008801800007c0803a64e80002139e30000386000013b0f0000833b001c801800007c0903a67f2803a63b7b00204e8004202c10ffff408201c481f8000481cf0024973bfffc971bfffc949bfffc94bbfffc80030004941bfffc80030008941bfffc38650000830e0004801800007c0803a64e800021394300003c6002aa6063e6a03b0a0000801800007c0803a64e800021813b000c398000025520f80140a20010800d00347c0803a64e8000217d0c4c1141a3fff080bb000838880000807b0004831b00104bffc6ed80fb001080c7000480a60024807b00088305000c801800007c0803a64e800021388300003c6002a06063ee143b040000801800007c0803a64e800021807b00108323000483190024807b000883180000801800007c0803a64e8000213ae300003c6002a7606345703b170000801800007c0803a64e80002182db001082b6000482950024807b00088314000c801800007c0803a64e8000213a6300003c6002a06063ee143b130000801800007c0803a64e800021825b000c398000025640f80140a20010800d00347c0803a64e8000217e2c941141a3fff080bb000838910000807b0000831b00104bffc601821b001081f0000481cf0024807b0008830e0008801800007c0803a64e80002139430000386000013b0a0000833b0014801800007c0903a67f2803a63b7b00184e8004202c10ffe9408201c481f8000481cf0024973bfffc971bfffc949bfffc94bbfffc80030004941bfffc80030008941bfffc38650000830e0004801800007c0803a64e800021394300003c6002aa6063e6a03b0a0000801800007c0803a64e800021813b000c398000025520f80140a20010800d00347c0803a64e8000217d0c4c1141a3fff080bb000838880000807b0004831b00104bffc52580fb001080c7000480a60024807b00088305000c801800007c0803a64e800021388300003c6002a06063ee143b040000801800007c0803a64e800021807b00108323000483190024807b000883180000801800007c0803a64e8000213ae300003c6002a7606344883b170000801800007c0803a64e80002182db001082b6000482950024807b00088314000c801800007c0803a64e8000213a6300003c6002a06063ee143b130000801800007c0803a64e800021825b000c398000025640f80140a20010800d00347c0803a64e8000217e2c941141a3fff080bb000838910000807b0000831b00104bffc439821b001081f0000481cf0024807b0008830e0008801800007c0803a64e80002139430000386000013b0a0000833b0014801800007c0903a67f2803a63b7b00184e8004202c100011408201b494bbfffc971bfffc81f8000481cf0024973bfffc949bfffc80030004941bfffc8003000c941bfffc38650000830e0004801800007c0803a64e800021394300003c6002a06063c3903b0a0000801800007c0803a64e800021813b00108109000480e80024807b001483070000801800007c0803a64e80002138c30000386000f73b060000801800007c0803a64e80002180bb00083980000254a0f80140a20010800d00347c0803a64e8000217c8c2c1141a3fff0807b00003b1b00143c0002ae6000861c7c0803a64e800021807b000428030001418200084800005c833b00108319000482f80024807b001483170000801800007c0803a64e80002182db00002c160001408200143aa300003c6002aa6063f924480000103aa300003c6002ab606306083b150000801800007c0803a64e800021829b00108274000482530024807b001483120000801800007c0803a64e8000213a230000386000fb3b110000801800007c0803a64e800021821b001081f0000481cf0024807b0014830e0008801800007c0803a64e80002139430000386000013b0a0000833b000c801800007c0903a67f2803a63b7b00184e8004202c10ffe74082006481f8000481cf0024973bfffc80030004941bfffc38650000830e0000801800007c0803a64e800021947bfffc809b0004386000473c0002a1600074a87c0803a64e800021831b0000833b0008801800007c0903a67f2803a63b7b000c4e80042081f8000481cf0024973bfffc38650000830e0000801800007c0803a64e800021394300003c6002ae60638b783b0a0000833b0000801800007c0903a67f2803a63b7b00044e800420|@5687,1048575|68,3,@5633 128,3,@5635 184,3,@5636 260,3,@5640 316,3,@5642 432,3,@4530 604,3,@5644 612,3,I24 676,3,@5645 744,3,@325 916,3,@711 1116,3,@711 1232,3,@711 1348,3,@711 1540,3,@711 1656,3,@711 1884,3,@711 1944,3,@2750 2008,3,@265 2120,3,@265 2180,3,@2748 2240,3,@265 2356,3,@265 2416,3,@2781 2476,3,@265 2696,3,@4521 2816,3,@265 2940,3,@711 3132,3,@5646 3216,3,@4521 3276,3,@2801 3336,3,@265 3396,3,@5648 3460,3,@566 3604,3,@5650 3668,3,@5654 3772,3,@4521 3832,3,@2768 3892,3,@265 3952,3,@5656 4016,3,@566 4156,3,@5658 4236,3,@4521 4296,3,@2766 4356,3,@265 4416,3,@5660 4480,3,I48 4648,3,@4521 4768,3,@265 4892,3,@711 5112,3,@2419 5228,3,@265 5344,3,@265 5604,3,@4521 5720,3,@265 5780,3,@2791 5840,3,@265 6064,3,@711 6180,3,@265 6240,3,@2826 6300,3,@265 6520,3,@4521 6580,3,@2771 6644,3,@265 6844,3,@5172 7044,3,@2419 7116,3,@2818 7132,3,@2830 7192,3,@265 7228,3,@5662 7352,3,@265 7412,3,@2774 7472,3,@265 7512,3,@5665 7632,3,@265 7688,3,@2776 7816,3,@2783 7828,3,@2758 7840,3,@2758 7912,3,@4521 8028,3,@265 8088,3,@5667 8152,3,@566 8332,3,@4521 8392,3,@2787 8456,3,@265 8512,3,@5669 8576,3,@566 8656,3,@265 8716,3,@2799 8776,3,@265 8836,3,@5671 8900,3,@566 9064,3,@4521 9124,3,@2787 9188,3,@265 9300,3,@265 9416,3,@265 9476,3,@2787 9532,3,@265 9776,3,@4521 9836,3,@2793 9900,3,@265 9956,3,@5672 10020,3,@566 10084,3,@265 10160,3,@2799 10220,3,@265 10280,3,@5673 10344,3,@566 10408,3,@265 10468,3,@2764 10528,3,@265 10588,3,@4521 10624,3,@5674 10908,3,@4521 11028,3,@711 11064,3,@5676 11188,3,@711 11412,3,@4521 11560,3,@265 11624,3,@5678 11688,3,I48 11828,3,@5680 11912,3,@4521 11972,3,@2810 12032,3,@265 12092,3,@5682 12156,3,@566 12316,3,@711 12376,3,@2803 12440,3,@265 12664,3,@711 12780,3,@265 12840,3,@4521 12900,3,@2837 12960,3,@265 13248,3,@711 13308,3,@2822 13372,3,@265 13484,3,@265 13544,3,@2779 13604,3,@265 13832,3,@4521 13892,3,@711 13956,3,@2836 14012,3,@265 14128,3,@265 14188,3,@2752 14304,3,@265 14536,3,@4521 14652,3,@265 14712,3,@2834 14772,3,@265 14992,3,@4521 15108,3,@265 15168,3,@2816 15228,3,@265 15448,3,@197 15572,3,@5684 15652,3,@4530 15668,3,@4539 15876,3,@511 15956,3,@5686 5633:C2,880|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002154abf80140a20010800d00347c0803a64e8000212c0500014181004c82f8000882d70024973bfffc8078000483160000801800007c0803a64e8000213aa300003c6002aa6063f9243b150000833b0000801800007c0903a67f2803a63b7b00044e8004202c03000140820010386000017f2803a64e80002082e300042c1700014082005082c30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000082b8000492a3000890a3000492c300003b060000801800007c0903a67f2803a64e80042082d8000882b60024973bfffc971bfffc949bfffc94bbfffc94dbfffc96fbfffc80030000941bfffc8078000483150004801800007c0803a64e8000213a8300003c6002a16063f6583b140000801800007c0803a64e800021827b0014398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00008253000492430008823b000c92230004821b000092030000831b0008801800007c0803a64e80002181fb001481cf0008814e0024806f0004830a000c801800007c0803a64e8000213923000038800059807b00103f00000063184368801800007c0803a64e800021280300014182000c390000034800005438800077807b00103f00000063184368801800007c0803a64e800021280300014182000c39000003480000283c80000060844668807b00103f00000063184368801800007c0803a64e8000213903000069070002398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000038c0000190c3000490e300003b090000801800007c0803a64e80002180bb0014808500088064002483230000806500043b190000801800007c0803a64e8000213b030000807b0010801800007c0803a64e80002182fb001482d7000882b600248077000483150008801800007c0803a64e8000213a830000386000013b140000801800007c0803a64e800021827b00148253000882320024807300048311000c801800007c0803a64e8000213a0300003c6002a06063ee143b100000801800007c0803a64e80002181fb000c3980000255e0f80140a20010800d00347c0803a64e8000217dcc7c1141a3fff080db000838ae0000809b0010807b0004831b0014833b00187f2803a63b7b001c4bfffc9c|@5634,1048575|96,3,@4530 304,3,@711 452,3,I24 496,3,I24 532,3,I48 544,3,I24 784,3,@265 5634:S37|50415253455f5452454528292e7074446973706c61792833297072696e744c697374283429 5635:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@5630,1048575| 5636:C2,652|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d70024973bfffc971bfffc949bfffc94bbfffc80030000941bfffc80030008941bfffc8003000c941bfffc3865000083160004801800007c0803a64e8000213aa300003c6002aa6063e6a03b150000801800007c0803a64e800021829b0014827400048253000c398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00003a2000039223000c821b000c9203000881fb001091e3000481db000091c3000083120050801800007c0803a64e800021815b0014812a000481090024807b000c83080000801800007c0803a64e80002138e30000807b00083b070000801800007c0803a64e80002180db001480a6000480850024807b000c8304000c801800007c0803a64e8000213b2300003c6002a06063ee143b190000801800007c0803a64e800021831b001482f8000482d70024807b000c83160000801800007c0803a64e8000213aa300003860007b3b150000801800007c0803a64e800021829b00148274000482530024807b000c8312000c801800007c0803a64e8000213a2300003c6002a06063ee143b110000801800007c0803a64e800021821b0014398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002139fd0004919d00003dc002ae61ce6b6c91cf00008150000c914f0004813b0010398000025520f80140a20010800d00347c0803a64e8000217d0c4c1141a3fff038cf000038a80000388000f9807b000483100008801800007c0803a64e80002180fb001480c7000480a60024807b000c83050008801800007c0803a64e80002138830000386000013b040000833b0018801800007c0903a67f2803a63b7b001c4e800420|@5639,1048575|104,3,@4521 316,3,@265 432,3,@265 496,3,@5637 5637:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@5638,1048575| 5638:S44|50415253455f5452454528292e7074446973706c61792833297072696e74436f6e7374727563746f72283129 5639:S45|50415253455f5452454528292e7074446973706c61792833297072696e74446174617479706542696e64283329 5640:C2,672|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d70024973bfffc971bfffc949bfffc94bbfffc80030000941bfffc80030004941bfffc8003000c941bfffc3865000083160004801800007c0803a64e8000213aa300003c6002aa6063e6a03b150000801800007c0803a64e800021829b0014827400048253000c398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00003a2000039223000c821b000c9203000881fb001091e3000481db000091c3000083120050801800007c0803a64e800021815b0014812a000481090024807b000c83080000801800007c0803a64e80002138e30000807b00083b070000801800007c0803a64e80002180db001480a60004808500088064002883230000807b00043b190000801800007c0803a64e800021280300014182000848000114831b001482f8000482d70024807b000c8316000c801800007c0803a64e8000213aa300003c6002a06063ee143b150000801800007c0803a64e800021829b00148274000482530024807b000c83120000801800007c0803a64e8000213a2300003860007b3b110000801800007c0803a64e800021821b001481f0000481cf0024807b000c830e000c801800007c0803a64e800021394300003c6002a06063ee143b0a0000801800007c0803a64e800021813b00148109000480e8000c398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d000038c0000390c3000c80bb000c90a30008809b001090830004833b0004932300008307004c801800007c0803a64e800021831b001482f8000482d70024807b000c83160008801800007c0803a64e8000213aa30000386000013b150000833b0018801800007c0903a67f2803a63b7b001c4e800420|@5641,1048575|104,3,@4521 368,3,@265 484,3,@265 5641:S41|50415253455f5452454528292e7074446973706c61792833297072696e745479706542696e64283329 5642:C2,568|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d70024973bfffc971bfffc949bfffc94bbfffc80030000941bfffc80030004941bfffc3865000083160004801800007c0803a64e8000213aa300003c6002a06063c3903b150000801800007c0803a64e800021829b00108274000482530024807b000883120000801800007c0803a64e8000213a230000807b00043b110000801800007c0803a64e800021821b001081f0000481cf0008814e0028807b0000830a0000801800007c0803a64e800021280300014182000848000118813b00108109000480e80024807b00088307000c801800007c0803a64e80002138c300003c6002a06063ee143b060000801800007c0803a64e80002180bb0010808500048064002483230000807b00083b190000801800007c0803a64e8000213b0300003c6002a760634140801800007c0803a64e80002182fb001082d7000482b60024807b00088315000c801800007c0803a64e8000213a8300003c6002a06063ee143b140000801800007c0803a64e800021827b0010825300048232000c398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00003a0000039203000c81fb000891e3000881db000c91c30004815b0000914300008311004c801800007c0803a64e800021813b00108109000480e80024807b000883070008801800007c0803a64e80002138c30000386000013b060000833b0014801800007c0903a67f2803a63b7b00184e800420|@5643,1048575|96,3,@197 260,3,@265 324,3,@2752 380,3,@265 5643:S44|50415253455f5452454528292e7074446973706c61792833297072696e74436f6e7374727563746f72283329 5644:S10|636f6e76537472696e67 5645:O2|34,0 5646:C2,648|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082009082f8000482d70024973bfffc971bfffc94bbfffc3865000083160000801800007c0803a64e8000213aa300003c6002a7606345243b150000801800007c0803a64e800021829b00048274000482530024807b00008312000c801800007c0803a64e8000213a2300003c6002a06063ee143b110000833b0008801800007c0903a67f2803a63b7b000c4e80042082f8000482d70024973bfffc971bfffc949bfffc94bbfffc80030000941bfffc80030004941bfffc3865000083160004801800007c0803a64e8000213aa300003c6002aa6063e6a03b150000801800007c0803a64e800021829b000c398000025680f80140a20010800d00347c0803a64e8000217e6ca41141a3fff0825b001080bb000838930000807b000483120008801800007c0803a64e800021823b00108211000481f00024807b0008830f000c801800007c0803a64e80002139c300003c6002a06063ee143b0e0000801800007c0803a64e800021815b0010812a000481090024807b000883080000801800007c0803a64e80002138e300003860007b3b070000801800007c0803a64e80002180db001080a6000480850024807b00088304000c801800007c0803a64e8000213b2300003c6002a06063ee143b190000801800007c0803a64e800021831b000c398000025700f80140a20010800d00347c0803a64e8000217eecc41141a3fff082db001080bb000838970000807b000083160008801800007c0803a64e80002182bb00108295000482740024807b000883130008801800007c0803a64e8000213a430000386000013b120000833b0014801800007c0903a67f2803a63b7b00184e800420|@5647,1048575|84,3,@2828 144,3,@265 244,3,@4521 372,3,@265 488,3,@265 5647:S40|50415253455f5452454528292e7074446973706c61792833297072696e7456616c42696e64283329 5648:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@5649,1048575| 5649:S40|50415253455f5452454528292e7074446973706c61792833297072696e7456616c42696e64283129 5650:C2,156|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138bd0004919d00003ee002ae62f775dc92e5000082f8000892e50004398000025480f80140a20010800d00347c0803a64e8000217ecc241141a3fff038c5000038b60000388000f98063000483180004801800007c0903a67f2803a64e800420|@5653,1048575|68,3,@5651 5651:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@5652,1048575| 5652:S39|50415253455f5452454528292e7074446973706c61792833297072696e74436c61757365283129 5653:S41|50415253455f5452454528292e7074446973706c61792833297072696e746676616c62696e64283329 5654:C2,500|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d70024973bfffc971bfffc949bfffc94bbfffc80030000941bfffc80030004941bfffc3865000083160004801800007c0803a64e8000213aa300003c6002aa6063e6a03b150000801800007c0803a64e800021829b000c398000025680f80140a20010800d00347c0803a64e8000217e6ca41141a3fff0825b001080bb000838930000807b000483120008801800007c0803a64e800021823b00108211000481f00024807b0008830f000c801800007c0803a64e80002139c300003c6002a06063ee143b0e0000801800007c0803a64e800021815b0010812a000481090024807b000883080000801800007c0803a64e80002138e300003860007b3b070000801800007c0803a64e80002180db001080a6000480850024807b00088304000c801800007c0803a64e8000213b2300003c6002a06063ee143b190000801800007c0803a64e800021831b000c398000025700f80140a20010800d00347c0803a64e8000217eecc41141a3fff082db001080bb000838970000807b000083160008801800007c0803a64e80002182bb00108295000482740024807b000883130008801800007c0803a64e8000213a430000386000013b120000833b0014801800007c0903a67f2803a63b7b00184e800420|@5655,1048575|96,3,@4521 224,3,@265 340,3,@265 5655:S39|50415253455f5452454528292e7074446973706c61792833297072696e74436c61757365283329 5656:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@5657,1048575| 5657:S41|50415253455f5452454528292e7074446973706c61792833297072696e746676616c62696e64283129 5658:C2,108|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d70024973bfffc80030000941bfffc3865000083160000801800007c0803a64e8000213aa30000807b00003b150000833b0004801800007c0903a67f2803a63b7b00084e800420|@5659,1048575| 5659:S40|50415253455f5452454528292e7074446973706c61792833297072696e745374724e616d65283329 5660:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@5661,1048575| 5661:S40|50415253455f5452454528292e7074446973706c61792833297072696e745374724e616d65283129 5662:O1|@5663 5663:C2,248|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021706b0001408200bc83030000947bfffc947bfffc973bfffc949bfffc80180000941bfffc80180004941bfffc389b0010806300044bffffad398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021389d0004919d0000807b001090640004833b000493240000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b1d0004919d0000807b001490780004833b000093380000833b0008909900009319000438600001831b000c7f0803a63b7b00184e8000203b000001930400003860000190640004386000014e800020|@5664,786435| 5664:S17|4c697374506169722e756e7a6970283229 5665:O1|@5666 5666:C2,248|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021706b0001408200bc83030000947bfffc947bfffc973bfffc949bfffc80180000941bfffc80180004941bfffc389b0010806300044bffffad398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021389d0004919d0000807b001090640004833b000493240000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b1d0004919d0000807b001490780004833b000093380000833b0008909900009319000438600001831b000c7f0803a63b7b00184e8000203b000001930400003860000190640004386000014e800020|@5664,786435| 5667:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@5668,1048575| 5668:S41|50415253455f5452454528292e7074446973706c61792833297072696e745479706542696e64283129 5669:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@5670,1048575| 5670:S45|50415253455f5452454528292e7074446973706c61792833297072696e74446174617479706542696e64283129 5671:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@5668,1048575| 5672:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@5670,1048575| 5673:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@5668,1048575| 5674:O1|@5675 5675:C2,248|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021706b0001408200bc83030000947bfffc947bfffc973bfffc949bfffc80180000941bfffc80180004941bfffc389b0010806300044bffffad398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021389d0004919d0000807b001090640004833b000493240000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b1d0004919d0000807b001490780004833b000093380000833b0008909900009319000438600001831b000c7f0803a63b7b00184e8000203b000001930400003860000190640004386000014e800020|@5664,786435| 5676:O1|@5677 5677:C2,248|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021706b0001408200bc83030000947bfffc947bfffc973bfffc949bfffc80180000941bfffc80180004941bfffc389b0010806300044bffffad398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021389d0004919d0000807b001090640004833b000493240000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b1d0004919d0000807b001490780004833b000093380000833b0008909900009319000438600001831b000c7f0803a63b7b00184e8000203b000001930400003860000190640004386000014e800020|@5664,786435| 5678:C2,108|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d70024973bfffc80030000941bfffc8063000883160000801800007c0803a64e8000213aa30000807b00003b150000833b0004801800007c0903a67f2803a63b7b00084e800420|@5679,1048575| 5679:S28|50415253455f5452454528292e7074446973706c6179283329283129 5680:C2,840|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d70024973bfffc971bfffc949bfffc94bbfffc80030000941bfffc80030008941bfffc8003000c941bfffc3865000083160004801800007c0803a64e8000213aa300003c6002a16063f6583b150000801800007c0803a64e800021829b00148274000482530024807b000c83120000801800007c0803a64e8000213a230000807b00083b110000801800007c0803a64e800021821b001481f0000481cf0008814e0028807b0004830a0000801800007c0803a64e800021280300014182000848000118813b00148109000480e80024807b000c8307000c801800007c0803a64e80002138c300003c6002a06063ee143b060000801800007c0803a64e80002180bb0014808500048064002483230000807b000c3b190000801800007c0803a64e8000213b0300003c6002a760634140801800007c0803a64e80002182fb001482d7000482b60024807b000c8315000c801800007c0803a64e8000213a8300003c6002a06063ee143b140000801800007c0803a64e800021827b0014825300048232000c398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00003a0000039203000c81fb000c91e3000881db001091c30004815b0004914300008311004c801800007c0803a64e800021813b0000810900002c08fff740820008480000f880fb001480c7000480a60024807b000c8305000c801800007c0803a64e800021388300003c6002a06063ee143b040000801800007c0803a64e800021807b00148323000483190024807b000c83180000801800007c0803a64e8000213ae300003860007b3b170000801800007c0803a64e80002182db001482b6000482950024807b000c8314000c801800007c0803a64e8000213a6300003c6002a06063ee143b130000801800007c0803a64e800021825b0010398000025640f80140a20010800d00347c0803a64e8000217e2c941141a3fff0821b001480bb000c38910000807b000083100008801800007c0803a64e80002181fb001481cf0004814e0024807b000c830a0008801800007c0803a64e80002139230000386000013b090000833b0018801800007c0903a67f2803a63b7b001c4e800420|@5681,1048575|104,3,@711 268,3,@265 332,3,@2752 388,3,@265 564,3,@265 680,3,@265 5681:S39|50415253455f5452454528292e7074446973706c61792833297072696e74457842696e64283329 5682:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@5683,1048575| 5683:S39|50415253455f5452454528292e7074446973706c61792833297072696e74457842696e64283129 5684:C2,1292|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021548bf80140a20010800d00347c0803a64e8000212c0400014181005082f8fffc82d7000482b60024973bfffc8078000083150000801800007c0803a64e8000213a8300003c6002aa6063f9243b140000833b0000801800007c0903a67f2803a63b7b00044e8004202c03000140820010386000017f2803a64e80002082e300042c1700014082018082c3000082b8fffc8295000482740024973bfffc971bfffc949bfffc80160000941bfffc80160004941bfffc8078000083130004801800007c0803a64e8000213a4300003c6002a16063f6583b120000801800007c0803a64e800021823b000c8211fffc81f0000481cf002480710000830e0000801800007c0803a64e800021947bfffc3c8002ab60843004807b00083c0002a1600074a87c0803a64e800021831b0000801800007c0803a64e800021815b0010812afffc8109000480e80024806a00008307000c801800007c0803a64e80002138c300003c6002a06063ee143b060000801800007c0803a64e80002180bb000c3980000254a0f80140a20010800d00347c0803a64e8000217c8c2c1141a3fff0807b001080a300008323fffc807b00043b190000801800007c0803a64e800021831b001082f8fffc82d7000482b600248078000083150008801800007c0803a64e8000213a830000386000013b140000833b0014801800007c0903a67f2803a63b7b00184e80042082c3000082b8fffc8295000482740024973bfffc971bfffc949bfffc96fbfffc80160000941bfffc80160004941bfffc8078000083130004801800007c0803a64e8000213a4300003c6002a16063f6583b120000801800007c0803a64e800021823b00108211fffc81f0000481cf002480710000830e0004801800007c0803a64e800021394300003c6002a16063f6583b0a0000801800007c0803a64e800021813b00108109fffc80e8000480c700248069000083060000801800007c0803a64e800021947bfffc3c8002ab60843004807b00083c0002a1600074a87c0803a64e800021831b0000801800007c0803a64e80002180bb00148085fffc8064000483230024806500008319000c801800007c0803a64e8000213b0300003c6002a06063ee14801800007c0803a64e80002182fb00103980000256e0f80140a20010800d00347c0803a64e8000217eccbc1141a3fff082bb001480b5000038960000807b00048315fffc801800007c0803a64e800021829b00148274fffc82530004823200248074000083110008801800007c0803a64e8000213a030000386000013b100000801800007c0803a64e80002181fb001481cffffc814e0004812a0024806f00008309000c801800007c0803a64e800021390300003c6002a16063f6583b080000801800007c0803a64e80002180fb001480c7fffc80a60004808500248067000083040000801800007c0803a64e8000213b230000386000593b190000801800007c0803a64e800021831b001482f8fffc82d7000482b600248078000083150008801800007c0803a64e8000213a830000386000013b140000801800007c0803a64e800021827b00148253fffc8232000482110024807300008310000c801800007c0803a64e80002139e300003c6002a06063ee143b0f0000801800007c0803a64e80002181db00103980000255c0f80140a20010800d00347c0803a64e8000217d4c741141a3fff0388a0000807b000c831b0014833b00187f2803a63b7b001c4bfffb00|@5685,1048575|100,3,@4530 236,3,@711 300,3,@4610 312,3,@511 384,3,@265 620,3,@711 684,3,@711 748,3,@4610 760,3,@511 832,3,@265 1020,3,@711 1204,3,@265 5685:S42|50415253455f5452454528292e7074446973706c6179283329646973706c61795265634c697374283229 5686:S7|3c456d7074793e 5687:S25|50415253455f5452454528292e7074446973706c6179283329 5688:O11|@6043,@6051,@6055,@6063,@6071,@6074,@6081,@6089,@6097,@6105,@6042 5689:O3|@4225,@4985,@3571 5690:O29|@886,@2086,@2318,@2331,@4415,@2250,@3586,@3592,@3595,@3601,@3607,@3613,@3616,@3639,@3645,@2356,@3651,@2242,@4427,@2348,@3128,@4433,@2340,@2258,@4443,@2380,@4414,@3579,@2189 5691:O46|0,@4023,@4089,@4026,@3665,@5048,@4276,@4279,@3671,@3679,@3683,@3687,@3695,@3703,@3711,@3719,@3727,@3735,@3742,@3750,@3758,@3802,@3810,@3818,@3822,@3836,@3842,@3854,@3839,@4295,@3844,@3861,@5058,@5693,@3884,@4021,9999,@4104,@4121,@4124,4,@5692,@3549,@4173,@4148,@4177 5692:O1|@5696 5693:O1|@5694 5694:C2,100|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000213ad90000808300003c6002aa606359243f00000063184368801800007c0803a64e8000212803000141820010386000037ec803a64e800020386000017ec803a64e800020|@5695,983043|40,3,@4105 48,3,I24 5695:S33|5354525543545f56414c5328292e6973556e646566696e656456616c7565283129 5696:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a3000880830004806300003c0002ae60008e347c0903a64e800420|@5699,786439|44,3,@5697 5697:C2,124|7f2802a663390002398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b1d0004919d000090b8000438a0fffd90b80000398000043bbdffec7c1df04040a00010800d001c7c0803a64e80002138bd0004919d00009085000c930500083880ffff9085000490650000386500007f2803a64e800020|@5698,786439| 5698:S31|5354525543545f56414c5328292e6d616b654f7665726c6f61646564283329 5699:S31|5354525543545f56414c5328292e6d616b654f7665726c6f61646564283129 5700:O30|@5702,@5713,@5721,@4468,@5739,@4462,@5752,@4189,@4456,@5758,@5764,@5771,@5780,@5787,@5790,@5793,@5799,@5805,@5364,@4597,@5601,@191,@2607,@5808,@2606,@5810,@5701,@5390,@4562,@5556 5701:O4|-3,0,@3880,@5812 5702:O2|@5704,@5703 5703:O3|@5706,@5416,@5484 5704:C2,72|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e3001096fbfffc80c3000c80a30008808300048063000083180004801800007c0903a64e800420|@5705,1048575| 5705:S20|545950455f5452454528292e756e696679283129 5706:C2,192|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021398000053bbdffe87c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002ae62d6912492d7000090b7001090d7000c80db000090d7000880b8000890b70004398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002ae62b591e092b6000092f6000438d600003ca002ad60a549a483180004801800007c0903a67f2803a63b7b00044e800420|@5712,1048575|68,3,@5707 140,3,@5710 160,3,@5404 5707:C2,100|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002194bbfffc82f8001096fbfffc82d8000c96dbfffc82b8000896bbfffc38c400003ca002a760a541e0388300003c6002ae606391a483180004801800007c0903a64e800420|@5709,1048575|64,3,@2764 76,3,@5708 5708:S11|43616e277420756e696679 5709:S32|545950455f5452454528292e756e69667928352963616e744d61746368283329 5710:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@5711,1048575| 5711:S32|545950455f5452454528292e756e69667928352963616e744d61746368283129 5712:S20|545950455f5452454528292e756e696679283529 5713:O2|@5715,@5714 5714:O6|@5717,@5416,@5484,@4193,@206,@4488 5715:C2,72|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e3001096fbfffc80c3000c80a30008808300048063000083180004801800007c0903a64e800420|@5716,1048575| 5716:S20|545950455f5452454528292e6170706c79283129 5717:C2,768|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc949bfffc94bbfffc94dbfffc83180014801800007c0803a64e800021833b000c8319000c82f8000c82d70018947bfffc83160000801800007c0803a64e800021280300014182012c82bb00108295000c8274000c82530018807b000083120008801800007c0803a64e800021823b00108211000c81f0000c81cf0018807b0000830e0000801800007c0803a64e8000212803000141820030813b00108109000c80e8000c80c70018807b000083060008801800007c0803a64e80002139430000480000183c6002a160630a30800d00287c0803a64e80002180bb0010398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021389d0004919d00003c6002ae6063964090640000833b000893240010831b00049304000c82fb001892e4000882c5000892c40004955bfffc38c4000082a500043ca002ad60a549a4809b0010806a00003b150000801800007c0803a64e800021829b000080740004827b00187e6803a63b7b00204e80002082bb00108295000c8274000c82530028398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d00003a200001922300103a0000019203000c39e0000191e3000881d300a091c30004815500109143000080120004941bfffc8313009c801800007c0803a64e800021831b0000801800007c0803a64e800021813b00148109000c80e8000c80c7001838a30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000090a30004809b00109083000094bbfffc83060004801800007c0803a64e800021833b0018398000053bbdffe87c1df04040a00010800d001c7c0803a64e8000213b1d0004919d00003ee002ae62f796c492f8000082db001092d8001082bb000c92b8000c829b002092980008827900089278000438d800003ca002ad60a549a438830000807b000883190004801800007c0803a64e800021807b0000825b001c7e4803a63b7b00244e800020|@5720,1048575|236,3,@341 296,3,@5718 352,3,@5404 668,3,@5719 716,3,@5404 5718:C2,104|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e3000896fbfffc82d8001096dbfffc82b8000c96bbfffc82980008969bfffc80c300043ca002a760a541e0808300003c6002ae606391a483180004801800007c0903a64e800420|@5711,1048575|68,3,@2764 80,3,@5708 5719:C2,104|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e3000896fbfffc82d8001096dbfffc82b8000c96bbfffc82980008969bfffc80c300043ca002a760a541e0808300003c6002ae606391a483180004801800007c0903a64e800420|@5711,1048575|68,3,@2764 80,3,@5708 5720:S20|545950455f5452454528292e6170706c79283529 5721:O2|@5723,@5722 5722:O6|@5725,@5368,@4193,@206,@4526,@4548 5723:C2,80|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e3001096fbfffc82c3001496dbfffc80c3000c80a30008808300048063000083180004801800007c0903a64e800420|@5724,1048575| 5724:S34|545950455f5452454528292e616c6c6f7747656e6572616c69736174696f6e283129 5725:C2,348|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021398000083bbdffdc7c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002ae62d6999c92d7000082db000492d7001c82b8001492b7001890d7001490770010829800109297000c827b0000927700088258000892570004398000073bbdffe07c1df04040a00010800d001c7c0803a64e8000213a3d0004919d00003e0002ae62109db49211000090b100189091001490d1001092f1000c80d8000c90d100089251000438a30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003c8002ae6084a4809083000092230004973bfffc94bbfffc83180004801800007c0803a64e8000213b230000807b00003b190000801800007c0803a64e8000213b03000038600003801800007c0803a64e8000213860000182fb00047ee803a63b7b00104e800020|@5738,1048575|68,3,@5726 164,3,@5730 244,3,@5734 5726:C2,216|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d70008398000093bbdffd87c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003e8002ae62949a90929500008278001892750020825800149255001c9075001882380010923500148218000c921500109095000c81f8000891f5000892f50004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a3000881d8001c91c30004924300003958000083160000801800007c0903a67f2803a64e800420|@5729,1048575|76,3,@5727 5727:C2,660|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc947bfffc3860000183180020801800007c0803a64e800021833b00048319000482f80008947bfffc8079001c83170010801800007c0803a64e80002182db000882b6000482950004947bfffc8074000483140008801800007c0803a64e8000213a630000807b00003b130000801800007c0803a64e800021825b000c8232000482110014947bfffc807b000c83100004801800007c0803a64e80002139e300003c6002a66063e9d83b0f0000801800007c0803a64e80002181db0010814e0004812a0014807b000c83090000801800007c0803a64e800021811b001038e30000806800183b070000801800007c0803a64e80002180db001080a6000480850014807b000c8304000c801800007c0803a64e8000213b2300003c6002a06063ee143b190000801800007c0803a64e800021831b00103ae0000396fbfffc80db000c80bb0010809b00048078001483180010801800007c0803a64e80002182db001082b6000482950014807b000c8314000c801800007c0803a64e8000213a6300003c6002a06063ee143b130000801800007c0803a64e800021825b00108232000482110014807b000c83100000801800007c0803a64e80002181fb001039c30000806f000c3b0e0000801800007c0803a64e800021815b0010812a000481090014807b000c8308000c801800007c0803a64e80002138e300003c6002a06063ee143b070000801800007c0803a64e80002180db0010807b000c83060008801800007c0803a64e80002180bb0010808500048064001483230008807b000c3b190000801800007c0803a64e8000213b03000038600001833b0014801800007c0903a67f2803a63b7b00184e800420|@5728,1048575|200,3,@2419 320,3,@265 424,3,@265 544,3,@265 5728:S49|545950455f5452454528292e616c6c6f7747656e6572616c69736174696f6e283629676976654572726f72283229283129 5729:S46|545950455f5452454528292e616c6c6f7747656e6572616c69736174696f6e283629676976654572726f72283229 5730:C2,1572|7f2802a66339000239600050800d00187d6bd8107c0b004040a00010800d00247c0803a64e80002182f8000482d7000c82b60028973bfffc971bfffc947bfffc949bfffc3864000083150000801800007c0803a64e80002128030001418205b4829b0008827400048253000c82320028807b000083110008801800007c0803a64e800021821b000881f0000481cf000c947bfffc830e0080801800007c0803a64e800021815b000c812a00147c6b4838556bf80140a20010800d00347c0803a64e8000217c03480041800534810a000480e8000c807b000083070080801800007c0803a64e80002180db000c80a600048085000c832400a07c6bcb78556bf80140a20010800d00347c0803a64e8000217c03c800418204e8807b000083040090801800007c0803a64e800021831b000c82f8000482d7000c82b60020947bfffc83150000801800007c0803a64e8000212803000141820030827b0010825300048232000c82110020807b000083100008801800007c0803a64e8000213a800003480000083a800001827b00108253000482320004969bfffc8071000083110008801800007c0803a64e800021821b001481f0000481cf0008947bfffc80700010830e0010801800007c0803a64e800021831b0000801800007c0803a64e800021815b0018812a00182809000140820040810a000480e8000c947bfffc807b00108307008c801800007c0803a64e80002128030001418200084800001c80db0000280600014182001048000014947bfffc4800000c38c000034800000880db0008280600014182003080fb001c80a700143980000254a0f80140a20010800d00347c0803a64e8000217d0c2c1141a3fff048000014811b001c80e8000480a7000c810500a0809b001c806400048323000494dbfffc951bfffc8079000083190008801800007c0803a64e800021831b002482f8000482d70008947bfffc8078001083160010801800007c0803a64e800021831b0000801800007c0803a64e80002182bb0028829500048274000c947bfffc807b002083130088801800007c0803a64e8000212803000141820048825b000c281200014182003c823b0028281100014182003081fb002c3c8002ae6084a3f43c6002ab60639d04830f000c801800007c0803a64e8000213a00000148000064825b00082c12000340820054823b00282811000141820048821b0000281000014182003c81fb0018280f00014082003081db002c3c8002ae6084a41c3c6002ab60639d04830e000c801800007c0803a64e8000213a00000148000008821b0028823b002c81f1000481cf000c961bfffc807b0024830e0084801800007c0803a64e800021815b0010280a000141820030811b003080e8000480c7000c947bfffc807b002883060088801800007c0803a64e800021392300004800000c39200001947bfffc811b003480e8000480c7000c953bfffc807b002c8306008c801800007c0803a64e80002180bb0038808500048324000c831900283ae30000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d000092e3001082db000092c3000c82bb000492a30008829b001492830004826500089263000080180004941bfffc8319009c801800007c0803a64e800021831b0000801800007c0803a64e800021825b003c823200048211000c81f00028947bfffc80100094941bfffc830f0000801800007c0803a64e8000212803000141820030815b0044812a00048109000c80e80028807b000483070008801800007c0803a64e80002139c30000480000183c6002a160630a30800d00287c0803a64e80002180db004480a600048085000c95dbfffc807b003c83040090801800007c0803a64e8000213b230000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000093230004831b000093030000831b0004801800007c0803a64e80002182fb004882d7000482b6000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000829b000892830004827b003c9263000083150094801800007c0803a64e800021807b0018825b004c7e4803a63b7b00504e800020807b0008811b00107d0803a63b7b00144e800020807b0004829b000c7e8803a63b7b00104e800020|@5733,1048575|808,3,@5731 816,3,@4817 900,3,@5732 908,3,@4817 1308,3,@341 5731:S29|696e636c75646573206120667265652074797065207661726961626c65 5732:S40|696e636c756465732061206672656520696d70657261746976652074797065207661726961626c65 5733:S44|545950455f5452454528292e616c6c6f7747656e6572616c69736174696f6e28362967656e6572616c283229 5734:C2,80|7f2802a6633900023ae30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003ec002ae62d6a4ec92c3000082d8000492c3000892e300047f2803a64e800020|@5737,983041|48,3,@5735 5735:C2,52|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000218098000483180008801800007c0903a64e800420|@5736,1048575| 5736:S47|545950455f5452454528292e616c6c6f7747656e6572616c69736174696f6e28362967656e6572616c283129283129 5737:S44|545950455f5452454528292e616c6c6f7747656e6572616c69736174696f6e28362967656e6572616c283129 5738:S34|545950455f5452454528292e616c6c6f7747656e6572616c69736174696f6e283629 5739:O2|@5741,@5740 5740:O3|@5743,@5368,@4193 5741:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@5742,1048575| 5742:S37|545950455f5452454528292e636865636b466f724c6f63616c446174617479706573283129 5743:C2,244|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002ae62d6a78892d700009097000c90b7000880b8000890b7000438830000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003ec002ae62d6a9c492c3000092e30004973bfffc949bfffc83180004801800007c0803a64e8000213aa30000807b00003b150000801800007c0803a64e8000213a830000386000033b140000801800007c0803a64e80002138600001827b00047e6803a63b7b00084e800020|@5751,1048575|68,3,@5744 136,3,@5747 5744:C2,444|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7000c82b60024973bfffc971bfffc947bfffc949bfffc3864000083150000801800007c0803a64e8000212803000141820154829b0008827400048253000c82320024807b000083110008801800007c0803a64e800021821b0004281000014182007081fb000881cf0004814e000c80030008941bfffc800a0070941bfffc807b0004830a0008801800007c0803a64e800021831b0000801800007c0803a64e800021813b00108109000c7c6b4038556bf80140a20010800d00347c0803a64e8000217c034000408100a84800001480030008941bfffc947bfffc4800009480e9000480c7000c80090008941bfffc8006004c941bfffc807b000c83060008801800007c0803a64e800021831b0000801800007c0803a64e800021388300003c6002ae6063a9603c0002a1600074a87c0803a64e800021388000533c0002a1600074a87c0803a64e800021831b0004801800007c0803a64e8000213860000180bb001c7ca803a63b7b00204e8000203860000381fb00147de803a63b7b00184e80002038600003829b000c7e8803a63b7b00104e800020|@5746,1048575|324,3,@5745 332,3,@511 352,3,@511 5745:S30|5479706520636f6e7461696e73206c6f63616c2064617461747970652028 5746:S50|545950455f5452454528292e636865636b466f724c6f63616c446174617479706573283329636865636b5479706573283229 5747:C2,80|7f2802a6633900023ae30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003ec002ae62d6aa3092c3000082d8000492c3000892e300047f2803a64e800020|@5750,983041|48,3,@5748 5748:C2,52|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000218098000483180008801800007c0903a64e800420|@5749,1048575| 5749:S53|545950455f5452454528292e636865636b466f724c6f63616c446174617479706573283329636865636b5479706573283129283129 5750:S50|545950455f5452454528292e636865636b466f724c6f63616c446174617479706573283329636865636b5479706573283129 5751:S37|545950455f5452454528292e636865636b466f724c6f63616c446174617479706573283329 5752:O2|@5754,@5753 5753:O3|@5756,@206,@4193 5754:C2,64|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180c3000c80a30008808300048063000083180004801800007c0903a64e800420|@5755,1048575| 5755:S24|545950455f5452454528292e6d6b54797065566172283129 5756:C2,164|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000882d7000c82b600283a830000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d000090c3001090a3000c90830008928300048278000492630000973bfffc80150004941bfffc8316009c801800007c0803a64e800021831b0000833b0004801800007c0903a67f2803a63b7b00084e800420|@5757,1048575| 5757:S24|545950455f5452454528292e6d6b54797065566172283429 5758:O2|@5760,@5759 5759:O3|@5762,@4193,@206 5760:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@5761,1048575| 5761:S25|545950455f5452454528292e6d6b4c6162656c6c6564283129 5762:C2,592|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7000c82b6001c3a830000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003a600001926300089283000490830000973bfffc971bfffc949bfffc83150004801800007c0803a64e800021825b00002812000141820014823b00087e2803a63b7b000c4e800020823b00048211000481f0000c81cf002839430000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d00003920000191230010390000019103000c38e0000190e3000880cf00a090c3000480b1000890a30000955bfffc800e0004941bfffc830f009c801800007c0803a64e800021831b0000801800007c0803a64e800021809b000c832400048319000c82f80028947bfffc83170000801800007c0803a64e80002128030001418200e482db001082b600048295000c82740028807b000083130008801800007c0803a64e800021823b00108211000481f0000c81cf0028800f0094941bfffc807b0004830e0000801800007c0803a64e8000212803000141820030813b00148109000480e8000c80c70028807b000483060008801800007c0803a64e80002139430000480000183c6002a160630a30800d00287c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080bb000c90a3000491430000831b0000801800007c0803a64e8000213a4300004800000c3a400001947bfffc807b000482db00187ec803a63b7b001c4e800020|@5763,1048575|472,3,@341 5763:S25|545950455f5452454528292e6d6b4c6162656c6c6564283229 5764:O1|@5765 5765:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc947bfffc973bfffc38bb000480830004806300003c0002ae6000b0787c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000833b000493230000831b00089303000482fb00007ee803a63b7b000c4e800020|@5770,1048575|56,3,@5766 5766:C2,96|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc949bfffc94bbfffc3c0002ae6000b0f47c0803a64e800021833b000090790000831b0004931900043860000182fb00087ee803a63b7b000c4e800020|@5769,1048575|44,3,@5767 5767:C2,380|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021706b00014182000c3b0000034800001081830000558c083c61980001570bf80140a20010800d00347c0803a64e8000212c18000341810008480000a4706b00014182000c3b0000034800001081830000558c083c61980001570bf80140a20010800d00347c0803a64e8000212c18000141810020973bfffc3b0300003c6002a0606395e0800d00287c0803a64e800021706b00014182000c3ae300004800001089830004558c083c619700013ad900003aa3000038800061387700003f00000063184368801800007c0803a64e8000212803000141820010480000183aa300003ad90000387500007ec803a64e80002072ab00014182000c388000034800001081950000558c083c61840001398000025480f80140a20010800d00347c0803a64e8000217c6c241141a3fff096dbfffc38a3000038800003387500003c0002ac6000c9547c0803a64e800021833b00007f2803a63b7b00044bfffe90|@5768,1048575|156,3,@51 220,3,I24 348,3,@5220 5768:S40|545950455f5452454528292e6d6b4c6162656c456e74727928332973747269705a65726f73283129 5769:S27|545950455f5452454528292e6d6b4c6162656c456e747279283329 5770:S27|545950455f5452454528292e6d6b4c6162656c456e747279283129 5771:O1|@5772 5772:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180830004806300003c0002ae6000b3607c0903a64e800420|@5779,1048575|40,3,@5773 5773:C2,124|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e800020949bfffc83030000973bfffc971bfffc80180000941bfffc806300044bffffb580bb0004809b00003b1b000c3c0002ae6000b3f87c0803a64e80002182fb00087ee803a63b7b00104e800020|@5778,1048575|92,3,@5774 5774:C2,504|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082003c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003b0000019303000490a300007f2803a64e80002082e300003a7900003a5800003a2300003a04000080970000387000003c0002aa6000da587c0803a64e8000212c0300014082007c967bfffc965bfffc963bfffc961bfffc94bbfffc80110000941bfffc80110004941bfffc947bfffc80120000941bfffc389000003c6002ae6063b60c3c0002a1600074a87c0803a64e8000213c8002ae6084b61c3c0002a1600074a87c0803a64e800021831b0000801800007c0803a64e80002148000030967bfffc965bfffc963bfffc961bfffc94bbfffc80110000941bfffc80110004941bfffc947bfffc947bfffc81fb000455ebf80140a20010800d00347c0803a64e8000212c0f00014181004c398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002139dd0004919d0000815b0018914e0004813b0010912e0000386e0000811b00207d0803a63b7b00244e80002080bb0010809b0014807b0008831b001c4bfffe51398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002139dd0004919d0000906e0004815b000c914e0000386e0000813b00207d2803a63b7b00244e800020|@5777,1048575|124,3,@4502 200,3,@5775 208,3,@511 224,3,@5776 232,3,@511 5775:S7|4c6162656c2028 5776:S25|292061707065617273206d6f7265207468616e206f6e63652e 5777:S33|545950455f5452454528292e736f72744c6162656c73283229656e746572283329 5778:S25|545950455f5452454528292e736f72744c6162656c73283229 5779:S25|545950455f5452454528292e736f72744c6162656c73283129 5780:O2|@5782,@5781 5781:O2|@5784,@4193 5782:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@5783,1048575| 5783:S26|545950455f5452454528292e656e7472794e756d626572283129 5784:C2,684|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7000c82b6001c973bfffc971bfffc947bfffc949bfffc3864000083150000801800007c0803a64e80002128030001418200cc829b0008827400048253000c8232001c807b000083110008801800007c0803a64e8000213a00000181e3000471eb00014082008481cf0000809b0004806e00003f00000063184368801800007c0803a64e800021280300014182001838700000815b000c7d4803a63b7b00104e800020398000025600f80140a20010800d00347c0803a64e8000217d50661541a3fff081ef00043a0a0000800d00187c1b004040a00010800d00207c0803a64e8000214bffff7c3c6002a160630a30800d00287c0803a64e800021829b0008827400048253000c82320028807b000083110000801800007c0803a64e8000212803000141820060821b000881f0000481cf000c814e0028807b0000830a0008801800007c0803a64e800021813b00088109000480e8000c83070090801800007c0803a64e80002138830000807b0004831b0008833b000c7f2803a63b7b00104bfffe64821b000881f0000481cf000c814e0024807b0000830a0000801800007c0803a64e800021280300014182007c813b00088109000480e8000c80c70024807b000083060008801800007c0803a64e80002180bb0008808500048324000c80190058941bfffc8063000883190008801800007c0803a64e800021831b0000801800007c0803a64e80002138830000807b0008831b000c833b00107f2803a63b7b00144bfffdc0813b00088109000480e80018398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002138dd0004919d00003ca002ae60a5ba0c90a600083c8002a06084c7ac90860004806700009066000038660000800d00287c0803a64e800021|@5786,1048575|152,3,I24 268,3,@341 636,3,@5785 648,3,@227 5785:S26|656e7472794e756d626572202d206e6f742061207265636f7264 5786:S26|545950455f5452454528292e656e7472794e756d626572283229 5787:O2|@5788,@4193 5788:C2,288|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7000c82b60028973bfffc971bfffc947bfffc83150000801800007c0803a64e8000212803000141820058829b0004827400048253000c82320028807b000083110008801800007c0803a64e800021821b000481f0000481cf000c830e0090801800007c0803a64e800021831b0004833b00087f2803a63b7b000c4bffff68829b0004827400048253000c8232001c807b000083110000801800007c0803a64e8000212803000141820040821b000481f0000481cf000c814e001c807b0000830a0008801800007c0803a64e8000218123000069230002811b00087d0803a63b7b000c4e80002038600001821b00087e0803a63b7b000c4e800020|@5789,1048575| 5789:S30|545950455f5452454528292e7265636f72644e6f7446726f7a656e283129 5790:O2|@5791,@4193 5791:C2,600|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7000c82b6001c973bfffc971bfffc947bfffc83150000801800007c0803a64e8000212803000141820090829b0004827400048253000c8232001c807b000083110008801800007c0803a64e8000213a00000181e300042c0f0001408200183870000081db00087dc803a63b7b000c4e800020398000025600f80140a20010800d00347c0803a64e8000217dd0661541a3fff081ef00043a0e0000800d00187c1b004040a00010800d00207c0803a64e8000214bffffa4829b0004827400048253000c82320028807b000083110000801800007c0803a64e8000212803000141820058821b000481f0000481cf000c814e0028807b0000830a0008801800007c0803a64e800021813b00048109000480e8000c83070090801800007c0803a64e800021831b0004833b00087f2803a63b7b000c4bfffeb0821b000481f0000481cf000c814e0024807b0000830a0000801800007c0803a64e8000212803000141820074813b00048109000480e8000c80c70024807b000083060008801800007c0803a64e80002180bb0004808500048324000c80190058941bfffc8063000883190008801800007c0803a64e800021831b0000801800007c0803a64e800021831b0008833b000c7f2803a63b7b00104bfffe14813b00048109000480e80018398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002138dd0004919d00003ca002ae60a5ba0c90a600083c8002a06084c7ac90860004806700009066000038660000800d00287c0803a64e800021|@5792,1048575|552,3,@5785 564,3,@227 5792:S26|545950455f5452454528292e7265636f72645769647468283129 5793:O2|@5795,@5794 5794:O3|@5797,@4193,@4488 5795:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@5796,1048575| 5796:S27|545950455f5452454528292e6c696e6b5479706556617273283129 5797:C2,600|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc947bfffc949bfffc83180008801800007c0803a64e800021833b00088319000482f8000c82d70028947bfffc83160000801800007c0803a64e8000212803000141820030829b000c827400048253000c82320028807b000083110008801800007c0803a64e8000213aa30000480000183c6002a160630a30800d00287c0803a64e800021821b000c96bbfffc807b000883100008801800007c0803a64e80002181fb001081cf0004814e000c812a0028947bfffc83090000801800007c0803a64e800021280300014182003080fb001480c7000480a6000c80850028807b000083040008801800007c0803a64e80002139030000480000183c6002a160630a30800d00287c0803a64e800021807b0014832300048319000c951bfffc807b000883180080801800007c0803a64e80002182fb001882d7000482b6000c947bfffc807b000483150080801800007c0803a64e800021829b00007e8b1838556bf80140a20010800d00347c0803a64e8000217c14180040810060827b001c825300048232000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000821b00149203000481fb000c91e3000083110094833b0020801800007c0903a67f2803a63b7b00244e800420827b001c825300048232000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000821b00189203000481fb000491e3000083110094833b0020801800007c0903a67f2803a63b7b00244e800420|@5798,1048575|152,3,@341 288,3,@341 5798:S27|545950455f5452454528292e6c696e6b5479706556617273283229 5799:O2|@5801,@5800 5800:O4|@5803,@206,@4193,@4488 5801:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@5802,1048575| 5802:S27|545950455f5452454528292e736574547661724c6576656c283129 5803:C2,460|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc949bfffc8318000c801800007c0803a64e800021833b00048319000882f8000c82d70028947bfffc83160000801800007c0803a64e8000212803000141820030829b0008827400088253000c82320028807b000083110008801800007c0803a64e8000213aa30000480000183c6002a160630a30800d00287c0803a64e800021821b000881f0000881cf000c96bbfffc800e0094941bfffc38750000830e0084801800007c0803a64e800021815b0010812a00088109000c947bfffc807b00088308008c801800007c0803a64e80002180fb001480c7000880a6000c808500283b230000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d0000932300103b0000039303000c82fb000092e3000882db001092c3000482a7000492a3000080040004941bfffc8305009c801800007c0803a64e800021831b0000801800007c0803a64e8000213a830000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092830004827b000c92630000831b0008833b001c801800007c0903a67f2803a63b7b00204e800420|@5804,1048575|148,3,@341 5804:S27|545950455f5452454528292e736574547661724c6576656c283229 5805:O4|@5806,@4472,@4575,@4193 5806:C2,572|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000c82d7000c82b60024973bfffc971bfffc947bfffc83150000801800007c0803a64e8000212803000141820174829b00048274000c8253000c82320024807b000083110008801800007c0803a64e800021821b000481f0000c81cf000c80030000941bfffc80630008830e0008801800007c0803a64e800021815b0008812a000c8109000c947bfffc83080060801800007c0803a64e8000212c0300014082005480fb000c80c7000c80a6000c947bfffc807b000483050058801800007c0803a64e800021809b00108324000c8319000c82f8001483170000801800007c0803a64e80002128030001408200a04800000c947bfffc4800009482db001082b6000c8295000c807b000483140058801800007c0803a64e800021827b00108253000c8232000c947bfffc807b000883110054801800007c0803a64e800021821b0014809b000c83100008801800007c0803a64e80002181fb001438a0000338830000807b0000830f0004801800007c0803a64e800021831b0014833b00187f2803a63b7b001c4bfffe60807b000080fb00147ce803a63b7b00184e800020829b00048274000c8253000c82320018807b000083110000801800007c0803a64e8000212803000141820040821b000481f0000c81cf000c814e0018807b0000830a0008801800007c0803a64e80002180630004831b0004833b00087f2803a63b7b000c4bfffde438600001821b00087e0803a63b7b000c4e800020|@5807,1048575| 5807:S28|545950455f5452454528292e676574436f6e7374724c697374283129 5808:O4|-3,0,@3871,@5809 5809:O2|0,@3869 5810:O4|-3,0,@3877,@5811 5811:O2|0,@3875 5812:O2|0,@3878 5813:O23|@5815,@5883,@5892,@5095,@5898,@5904,@5910,@3945,@3893,@5924,@5930,@5114,@5320,@5933,@5936,@5939,@5945,@5948,@5950,@5957,@5343,@5814,@5088 5814:O2|@5965,@5964 5815:O7|@5817,@5825,@5844,@5874,@5878,@5816,@3566 5816:O2|@5881,@3566 5817:C2,96|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021971bfffc973bfffc3b1b00043c0002ae6000c8287c0803a64e8000213b1b00043c0002ae6000c9a07c0803a64e800021833b00007f2803a63b7b00084e800020|@5824,1048575|44,3,@5818 64,3,@5819 5818:C2,348|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e800020947bfffc947bfffc82e3000082d8000082b600188295000882740018973bfffc971bfffc80030004941bfffc80170000941bfffc80170004941bfffc807b000083130000801800007c0803a64e80002128030001418200203a5b00143a200001923200003a1b001481fb000491f0000448000034825b000c82320000807b000083110014801800007c0803a64e8000213a1b00149070000039fb001481db000491cf0004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021395d0004919d0000813b0014912a0000811b0018910a0004955bfffc807b000c831b00104bfffeed398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138fd0004919d00009067000480db000090c700003867000080bb00147ca803a63b7b00204e800020|@234,1048575| 5819:C2,740|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021971bfffc706b00014082029482e3000082d700002c160001408200a082a300042c1500014082006c82980000973bfffc809700043c6002ae6063cca083140004801800007c0803a64e8000213a630000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003a4000019243000492630000823b00007e2803a63b7b00084e800020973bfffc3b1b00043c0002ae6000cca87c0803a64e800021829b00007e8803a63b7b00084e8000202c160003408200a082a300042c1500014082006c82980000973bfffc809700043c6002a260639a0083140008801800007c0803a64e8000213a630000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003a4000019243000492630000823b00007e2803a63b7b00084e800020973bfffc3b1b00043c0002ae6000cca87c0803a64e800021829b00007e8803a63b7b00084e8000202c16ffff408200a082a300042c1500014082006c82980000973bfffc809700043c6002a260639a0083140008801800007c0803a64e8000213a630000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003a4000019243000492630000823b00007e2803a63b7b00084e800020973bfffc3b1b00043c0002ae6000cca87c0803a64e800021829b00007e8803a63b7b00084e80002082a300042c1500014082006c82980000973bfffc809700043c6002a260639a0083140008801800007c0803a64e8000213a630000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003a4000019243000492630000823b00007e2803a63b7b00084e800020973bfffc3b1b00043c0002ae6000cca87c0803a64e800021829b00007e8803a63b7b00084e800020973bfffc3b1b00043c0002ae6000cca87c0803a64e800021833b00007f2803a63b7b00084e800020|@5823,1048575|84,3,@5820 184,3,@5821 248,3,@886 348,3,@5821 412,3,@886 512,3,@5821 568,3,@886 668,3,@5821 708,3,@5821 5820:O1|4 5821:C2,280|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc947bfffc3ae000012c0300014082000c3ad70000480000608323000082d900002c1600014082000c3b170000480000243980000256e0f80140a20010800d00347c0803a64e8000217f17661541a3fff03af8000080630004800d00187c1b004040a00010800d00207c0803a64e8000214bffff9856cbf80140a20010800d00347c0803a64e8000212c1600034181003482bb0004829500008274000038800001807b00008313000c833b0008801800007c0903a67f2803a63b7b000c4e80042082bb0004829500008274000038800001807b000083130010833b0008801800007c0903a67f2803a63b7b000c4e800420|@5822,1048575| 5822:S46|56414c55455f4f505328292e63686f6f7365436f6e7374725265707228312963686f6f7365526570722831292f35 5823:S44|56414c55455f4f505328292e63686f6f7365436f6e7374725265707228312963686f6f736552657072283129 5824:S31|56414c55455f4f505328292e63686f6f7365436f6e73747252657072283129 5825:O5|@5827,@3566,@5829,@5826,@2532 5826:O2|@5842,@3566 5827:C2,440|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d70004973bfffc971bfffc947bfffc949bfffc80160010941bfffc8016002c941bfffc38830000807800108318000c801800007c0803a64e8000213aa30000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d0000829b00089283000c3a600003926300083a4000019243000492a30000831b0000801800007c0803a64e800021823b0010947bfffc809b0010807b000c83110008801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a1d0004919d000039e0000191f0000490700000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00009203000481db000091c30000831b0008801800007c0803a64e800021815b0014812a00048109000438e30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000038c0000190c3000490e300008308006c801800007c0803a64e80002138a30000386000013b050000833b0018801800007c0903a67f2803a63b7b001c4e800420|@5828,1048575| 5828:S39|56414c55455f4f505328292e6372656174654e756c6c617279436f6e7374727563746f72283229 5829:O6|@5831,@2532,@3566,@5833,@5830,@3994 5830:O3|@5838,@2532,@3566 5831:C2,988|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e400002c17fff94082006482d8000882b600043a830000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00009283000c3a600003926300083a4000019243000482380004922300008315002c801800007c0903a67f2803a64e8004202c170001408200c482d8000882b600043a830000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003a600001926300048258000492430000973bfffc969bfffc8015002c941bfffc83150010801800007c0803a64e8000213a230000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d0000821b00049203000c39e0000391e3000839c0000191c3000492230000831b0000833b0008801800007c0903a67f2803a63b7b000c4e8004202c17fffb40820044973bfffc947bfffc806400048318000c801800007c0803a64e8000213ac30000807b00003b160000833b0004801800007c0903a67f2803a63b7b00084e8004202c1700074082012882d8000882b60004973bfffc947bfffc8015002c941bfffc80180004941bfffc80150030941bfffc80a40004808400083c6000006063466883180010801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a9d0004919d00003a60000192740004825b0004925400003a230000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003a000003920300089283000492230000831b0000801800007c0803a64e80002139e30000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d000081db000c91c3000c3940000391430008392000019123000491e30000831b0008833b0010801800007c0903a67f2803a63b7b00144e8004202c1700054082000c807800144e8000202c17ffff4082002082d8000882b600048064000483150020801800007c0903a64e8004202c1700034082006482d8000882b6000482960024973bfffc80150020941bfffc8014000c941bfffc8064000483140010801800007c0803a64e800021831b0000801800007c0803a64e800021831b0004833b0008801800007c0903a67f2803a63b7b000c4e8004202c17fffd4082006482d8000882b600043a830000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00009283000c3a600003926300083a4000019243000482380004922300008315002c801800007c0903a67f2803a64e80042082d8000882b60004807500084e800020|@5832,1048575|468,3,I48 5832:S25|56414c55455f4f505328292e636f6e7374724d616b65283229 5833:O3|@5834,@3566,@2532 5834:C2,88|7f2802a6633900023ae30000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00003ec002ae62d6d56492c3000082d8000892c3000c92e3000882f8000492e300047f2803a64e800020|@5837,983041|48,3,@5835 5835:C2,356|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7000482b70024973bfffc947bfffc8016002c941bfffc8018000c941bfffc80160010941bfffc80160020941bfffc8015000c941bfffc8078000883150010801800007c0803a64e800021831b0000801800007c0803a64e800021831b0004801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a9d0004919d00003a60000192740004825b000c925400003a230000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00009283000492230000831b0008801800007c0803a64e8000213a030000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d000081fb001491e3000c39c0000391c30008394000019143000492030000831b0010833b0018801800007c0903a67f2803a63b7b001c4e800420|@5836,1048575| 5836:S26|56414c55455f4f505328292e6162737472616374283129283129 5837:S25|56414c55455f4f505328292e746167426f78436f6465283129 5838:C2,336|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000882d7000482b70024973bfffc971bfffc947bfffc949bfffc8016002c941bfffc80160010941bfffc80160020941bfffc8015000c941bfffc3865000083150010801800007c0803a64e800021831b0000801800007c0803a64e800021831b0004801800007c0803a64e800021947bfffc386000013b1b00203c0002ae6000d8987c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a9d0004919d000090740004827b00009274000038740000831b000c801800007c0803a64e8000213a430000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d0000823b00189223000c3a0000039203000839e0000191e3000492430000831b0010833b0020801800007c0903a67f2803a63b7b00244e800420|@5841,1048575|156,3,@5839 5839:C2,292|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8fff47c6bb838556bf80140a20010800d00347c0803a64e8000217c03b800408000d882d8fffc82b60008829500043a630000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000825600049243000492630000973bfffc971bfffc967bfffc8314001c801800007c0803a64e800021823b00003a030000398000025620f80140a20010800d00347c0803a64e8000217c71661541a3fff0961bfffc831b00084bffff31398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002139fd0004919d0000906f000481db000091cf0000386f0000815b000c7d4803a63b7b00104e800020386000017f2803a64e800020|@5840,1048575| 5840:S39|56414c55455f4f505328292e7461675475706c65436f64652833296765744669656c6473283129 5841:S27|56414c55455f4f505328292e7461675475706c65436f6465283329 5842:C2,1968|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e400002c17fff94082016882d8000482b60004973bfffc971bfffc947bfffc80150030941bfffc3c60000060635ba883150020801800007c0803a64e800021829b00088274000482530004947bfffc80120030941bfffc3c60000060634d8883120020801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a3d0004919d00003a0000019211000481fb000c91f1000039c30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000039400003914300089223000491c30000831b0000801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021393d0004919d0000390000019109000490690000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000038e0000390e300089123000480db000490c30000831b0008833b0014801800007c0903a67f2803a63b7b00184e8004202c1700014082016882d8000482b60004973bfffc971bfffc947bfffc80150030941bfffc3c60000060635ba883150020801800007c0803a64e800021829b00088274000482530004947bfffc80120030941bfffc3c60000060634d8883120020801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a3d0004919d00003a0000019211000481fb000c91f1000039c30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000039400003914300089223000491c30000831b0000801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021393d0004919d0000390000019109000490690000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000038e0000390e300089123000480db000490c30000831b0008833b0014801800007c0903a67f2803a63b7b00184e8004202c1700054082001482d8000482b60004807500044e8000202c170003408200b482d8000482b6000482960024973bfffc947bfffc80150048941bfffc80150020941bfffc8014000c941bfffc8064000483140010801800007c0803a64e800021831b0000801800007c0803a64e800021831b0004801800007c0803a64e8000213a630000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000825b000c9243000492630000831b0008833b0010801800007c0903a67f2803a63b7b00144e8004202c17fffb4082011082d8000482b6000482960024973bfffc971bfffc947bfffc80150048941bfffc80150020941bfffc8014000c941bfffc8064000483140010801800007c0803a64e800021831b0000801800007c0803a64e800021831b0004801800007c0803a64e800021827b001082530004823200043a030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000081fb000c91e3000439c0000191c30000961bfffc8311001c801800007c0803a64e80002139430000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000091430004813b000091230000831b000c833b0018801800007c0903a67f2803a63b7b001c4e8004202c1700074082011082d8000482b6000482960024973bfffc971bfffc947bfffc80150048941bfffc80150020941bfffc8014000c941bfffc8064000483140010801800007c0803a64e800021831b0000801800007c0803a64e800021831b0004801800007c0803a64e800021827b001082530004823200043a030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000081fb000c91e3000439c0000191c30000961bfffc8311001c801800007c0803a64e80002139430000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000091430004813b000091230000831b000c833b0018801800007c0903a67f2803a63b7b001c4e8004202c17ffff4082019082d8000482b60024973bfffc971bfffc947bfffc80150010941bfffc80150020941bfffc8064000483150014801800007c0803a64e8000213a830000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003a6000019263000492830000831b0000801800007c0803a64e800021831b0004801800007c0803a64e800021825b000c823200048211000481f1002480100048941bfffc80100020941bfffc800f000c941bfffc830f0010801800007c0803a64e800021831b0000801800007c0803a64e800021831b0004801800007c0803a64e80002181db0018814e0004812a000439030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080fb001490e3000438c0000190c30000951bfffc8309001c801800007c0803a64e80002138a30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000090a30004809b000090830000831b000c833b0020801800007c0903a67f2803a63b7b00244e8004202c17fffd4082001482d8000482b60004807500044e80002082d8000482b60004807500044e800020|@5843,1048575|72,3,I218 120,3,I105 436,3,I218 484,3,I105 5843:S26|56414c55455f4f505328292e636f6e7374724d61746368283229 5844:O6|@5846,@3566,@5848,@2532,@5845,@5826 5845:O5|@5857,@5869,@5856,@3566,@5830 5846:C2,744|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d70004973bfffc971bfffc947bfffc949bfffc80160010941bfffc8016002c941bfffc388300008078000c83180014801800007c0803a64e8000213aa30000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d0000829b00089283000c3a600003926300083a4000019243000492a30000831b0000801800007c0803a64e800021823b00108211000481f00004947bfffc800f002c941bfffc807b001483110010801800007c0803a64e80002181db001839430000806e000c3b0a0000801800007c0803a64e80002139230000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d0000811b00109103000c38e0000390e3000838c0000190c3000491230000831b0000801800007c0803a64e80002180bb00188085000483240004947bfffc8019002c941bfffc809b001c8065000c83050008801800007c0803a64e8000213b030000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d000082fb001892e3000c3ac0000392c300083aa0000192a3000493030000831b0000801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a9d0004919d00003a6000019274000490740000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a5d0004919d000092920004823b000492320000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092430004821b000c92030000831b0014801800007c0803a64e80002181fb002081cf0004814e000439230000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000390000019103000491230000830a006c801800007c0803a64e80002138e30000386000013b070000833b0024801800007c0903a67f2803a63b7b00284e800420|@5847,1048575| 5847:S37|56414c55455f4f505328292e637265617465556e617279436f6e7374727563746f72283229 5848:O3|@5850,@3566,@5849 5849:O3|@5852,@3566,@2532 5850:C2,584|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e400002c17fff9408200084e8000202c1700014082005482d8000482b600043a830000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000928300043a600001926300008315001c801800007c0903a67f2803a64e8004202c170005408200fc82d8000482b60004973bfffc971bfffc947bfffc80150030941bfffc3c6000006063600883150020801800007c0803a64e800021829b00088274000482530004398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a3d0004919d00003a0000019211000481f2000891f10000398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002139dd0004919d0000922e0004815b0004914e000039230000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000390000019103000891c3000491230000831b0000833b000c801800007c0903a67f2803a63b7b00104e8004202c17fffb4082005482d8000482b600043a830000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000928300043a600003926300008315001c801800007c0903a67f2803a64e8004202c170007408200188084000883180008801800007c0903a64e8004202c17fffd408200084e8000202c1700034082001482d8000482b60004807500084e8000202c17ffff4082001482d8000482b60004807500084e80002082d8000482b60004807500084e800020|@5851,1048575|172,3,I253 5851:S29|56414c55455f4f505328292e636f6e7374724465737472756374283229 5852:C2,348|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d70004971bfffc949bfffc973bfffc947bfffc8016002c941bfffc80160010941bfffc386000033b1b00143c0002ae6000e9a87c0803a64e800021831b0000801800007c0803a64e8000213aa30000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00003e800000629446689283000c3a600003926300083a4000019243000492a30000831b0004801800007c0803a64e800021823b00148211000481f00004398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002139dd0004919d000039400001914e0004813b0008912e000039030000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000038e0000390e3000891c3000491030000830f0030833b000c801800007c0903a67f2803a63b7b00184e800420|@5855,1048575|80,3,@5853 152,3,I48 5853:C2,292|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8fffc7c6bb838556bf80140a20010800d00347c0803a64e8000217c03b800418100d882d8000082b60004829500043a630000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000825600089243000492630000973bfffc971bfffc967bfffc8314001c801800007c0803a64e800021823b00003a030000398000025620f80140a20010800d00347c0803a64e8000217c71661541a3fff0961bfffc831b00084bffff31398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002139fd0004919d0000906f000481db000091cf0000386f0000815b000c7d4803a63b7b00104e800020386000017f2803a64e800020|@5854,1048575| 5854:S50|56414c55455f4f505328292e7461676765645475706c654465737472756374436f64652832296765744669656c6473283129 5855:S38|56414c55455f4f505328292e7461676765645475706c654465737472756374436f6465283229 5856:O3|@5872,64,@3566 5857:C2,324|7f2802a66339000282e300002c17fff9408200103c6002ae6063ecc44e8000202c1700014082000c807800044e8000202c1700054082000c807800084e8000202c17fffb4082004c82c30004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003ee002ae62f7ed1492e3000092c3000882d8000c92c300047f2803a64e8000202c1700074082005c82c3000482a30008398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d00003ee002ae62f7ee5c92e3000092a3001092c3000c82d8000c92c3000882b8001092a300047f2803a64e8000202c17fffd408200103c6002ae6063ecc44e800020398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003ec002ae62d6ef8892c3000082b8000c92a300047f2803a64e800020|@5868,1015809|20,3,@5858 112,3,@5861 196,3,@5863 248,3,@5858 296,3,@5865 5858:O1|@5859 5859:C2,4|4e800020|@5860,524289| 5860:S32|56414c55455f4f505328292e6964656e746974794170706c79436f6465283129 5861:C2,256|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7000482b70024973bfffc947bfffc80160010941bfffc80160020941bfffc8015000c941bfffc8078000883150010801800007c0803a64e800021831b0000801800007c0803a64e800021831b0004801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a9d0004919d00003a60000192740004825b000c925400003a230000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00009283000492230000831b0008833b0010801800007c0903a67f2803a63b7b00144e800420|@5862,1048575| 5862:S33|56414c55455f4f505328292e746167426f784170706c79436f6465283129283129 5863:C2,224|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000882d70004973bfffc947bfffc80160030941bfffc80b8000c809800103c6000006063466883180004801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003a80000192950004827b0004927500003a430000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003a2000039223000892a3000492430000831b0000833b0008801800007c0903a67f2803a63b7b000c4e800420|@5864,1048575|64,3,I48 5864:S38|56414c55455f4f505328292e7461675475706c654170706c79436f6465283129283129283129 5865:C2,104|7f2802a663390002973bfffc8078000482e3001c398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002ae62b5f00c92b600083ea002a062b5c7ac92b6000482b7000092b6000038760000800d00287c0803a64e800021|@5867,1015809|56,3,@5866 68,3,@227 5866:S25|636f6e7374616e742063616e2774206265206170706c696564 5867:S29|56414c55455f4f505328292e636f6e7374724170706c79283129283129 5868:S26|56414c55455f4f505328292e636f6e7374724170706c79283129 5869:O2|@5870,@3566 5870:C2,112|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d700043aa30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003a8000019283000492a3000083160010801800007c0903a67f2803a64e800420|@5871,1048575| 5871:S27|56414c55455f4f505328292e626f784170706c79436f6465283129 5872:C2,440|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000882d70004973bfffc971bfffc947bfffc80160030941bfffc3c600000606341c883160020801800007c0803a64e80002182bb0008829500088274000482540024947bfffc80130020941bfffc386000038312000c801800007c0803a64e800021831b0000801800007c0803a64e800021823b00108211000881f0000481d00024947bfffc800f0020941bfffc80710004830e000c801800007c0803a64e800021831b0000801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021395d0004919d000039200001912a0004811b0014910a0000398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138fd0004919d00009147000490670000398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138dd0004919d000090e6000480bb000490a60000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000388000019083000890c30004833b000c93230000831b0010833b001c801800007c0903a67f2803a63b7b00204e800420|@5873,1048575|60,3,I11 5873:S27|56414c55455f4f505328292e7265664170706c79436f6465283129 5874:O3|@5875,@5825,@5844 5875:C2,948|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e80002082e3000082d700002c1600014082013c398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d0000909500043a80000392950000973bfffc971bfffc949bfffc80030004941bfffc809700043875000083180004801800007c0803a64e800021827b0004566bf80140a20010800d00347c0803a64e8000212c13000140800028398000025660f80140a20010800d00347c0803a64e8000217e53641141a3fff048000044398000025660f80140a20010800d00347c0803a64e8000217e53661541a3fff0398000025640f80140a20010800d00347c0803a64e8000217e52641141a3fff0947bfffc38920000807b0004831b000c4bfffed1398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a3d0004919d000090710004821b0000921100003871000081fb00107de803a63b7b00144e8000202c1600034082008c973bfffc971bfffc949bfffc80030004941bfffc809700043c6002a26063413483180008801800007c0803a64e800021947bfffc809b0008807b0004831b000c4bfffe41398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d000090750004829b00009295000038750000827b00107e6803a63b7b00144e8000202c16ffff4082008c973bfffc971bfffc949bfffc80030004941bfffc809700043c6002ae6063f71083180008801800007c0803a64e800021947bfffc809b0008807b0004831b000c4bfffdb1398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d000090750004829b00009295000038750000827b00107e6803a63b7b00144e80002082b600002c1500014082008c973bfffc971bfffc949bfffc80030004941bfffc809700043c6002a26063413483180008801800007c0803a64e800021947bfffc809b0008807b0004831b000c4bfffd1d398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a9d0004919d000090740004827b00009274000038740000825b00107e4803a63b7b00144e800020973bfffc971bfffc949bfffc80030004941bfffc809700043c6002ae6063f71083180008801800007c0803a64e800021947bfffc809b0008807b0004831b000c4bfffc95398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a9d0004919d000090740004827b00009274000038740000825b00107e4803a63b7b00144e800020|@5877,1048575|408,3,@773 552,3,@5876 700,3,@773 836,3,@5876 5876:O1|-4 5877:S35|56414c55455f4f505328292e63686f6f73654f7074696d697365645265707231283229 5878:O4|@5879,@5825,@3566,@5844 5879:C2,1004|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e80002082e3000082b700002c150001408201348298000882740024973bfffc971bfffc949bfffc80030004941bfffc80170004941bfffc80130018941bfffc80130030941bfffc386400008313000c801800007c0803a64e8000213a430000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092430008823b0000922300043a00000392030000831b0004801800007c0803a64e80002181fb001481cf0008814e0024947bfffc830a0028801800007c0803a64e800021813b00188109000880e80024807b00008307000c801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138dd0004919d00009066000438a0ffff90a60000809b001880640004809b000c3b230000386600003b190000801800007c0803a64e8000213ac30000480001a42c15000340820068398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a9d0004919d0000909400043a60fffb92740000973bfffc971bfffc949bfffc80030004941bfffc80970004387400008318000c801800007c0803a64e8000213ac30000480001282c15ffff40820068398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a9d0004919d0000909400043a60fffb92740000973bfffc971bfffc949bfffc80030004941bfffc80970004387400008318000c801800007c0803a64e8000213ac30000480000bc82950000568bf80140a20010800d00347c0803a64e8000212c1400094181003c398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a7d0004919d000092930008909300043a4000079253000048000034398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a7d0004919d0000909300043a40fffb92530000973bfffc971bfffc949bfffc80030004941bfffc80970004387300008318000c801800007c0803a64e8000213ac30000947bfffc947bfffc947bfffc947bfffc823b0014562bf80140a20010800d00347c0803a64e8000212c11000140800028398000025620f80140a20010800d00347c0803a64e8000217e11641141a3fff048000044398000025620f80140a20010800d00347c0803a64e8000217e11661541a3fff0398000025600f80140a20010800d00347c0803a64e8000217e10641141a3fff096dbfffc38900000807b0014831b001c4bfffc5d398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002139fd0004919d0000906f000481db000091cf0000386f0000815b00207d4803a63b7b00244e800020|@5880,1048575| 5880:S35|56414c55455f4f505328292e63686f6f73654f7074696d697365645265707232283229 5881:C2,1452|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7000882b60020973bfffc971bfffc947bfffc83150000801800007c0803a64e800021280300014182019c829b0004827400048253000882320020807b000083110008801800007c0803a64e800021820300002c1000034082015881e3000471eb0001408200bc81cf00042c0e000140820020814f0000806a0004831b0004833b00087f2803a63b7b000c4bffff58394000012c0f00014082000c392a000048000048398000025540f80140a20010800d00347c0803a64e8000217d0a661541a3fff081ef000439480000800d00187c1b004040a00010800d00207c0803a64e8000214bffffb0398000013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d000091230000811b00087d0803a63b7b000c4e80002039c000012c0f00014082000c394e0000480000483980000255c0f80140a20010800d00347c0803a64e8000217d2e661541a3fff081ef000439c90000800d00187c1b004040a00010800d00207c0803a64e8000214bffffb0398000013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d000091430000813b00087d2803a63b7b000c4e8000203860000381fb00087de803a63b7b000c4e800020829b000482740004825300088232001c807b000083110000801800007c0803a64e800021280300014182003c821b000481f0000481cf0008814e001c807b0000830a0008801800007c0803a64e8000213860ffff813b00087d2803a63b7b000c4e800020821b000481f0000481cf0008814e0028807b0000830a0000801800007c0803a64e8000212803000141820324813b00048109000480e8000880c70028807b000083060008801800007c0803a64e80002180bb0004808500048324000880030000941bfffc8063000883190010801800007c0803a64e800021831b000882f8000482d70008947bfffc83160088801800007c0803a64e80002182bb000c82950004827400088253001883120000801800007c0803a64e8000212803000140820068823b000c8211000481f0000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000081db000491c30004815b000091430000830f001c801800007c0803a64e800021831b000c833b00107f2803a63b7b00144bfffc9c823b000c8211000481f00008800f000c941bfffc807b0004830f0090801800007c0803a64e80002181db0010814e0004812a0008947bfffc806900cc83090090801800007c0803a64e80002139030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00009103000480fb000090e30000831b0004801800007c0803a64e80002128030001418200183860000380db00187cc803a63b7b001c4e80002080db001480a6000480850008807b00088304008c801800007c0803a64e800021706b000140820144833b00148319000482f8000882d70068947bfffc8063000083160008801800007c0803a64e80002182bb001882950004827400088253006c947bfffc80030004941bfffc807b000083120000801800007c0803a64e80002128030001418200d0823b00208211000481f0000881cf006c807b0000830e0008801800007c0803a64e8000212c03000140820090815b0004813b0008810900042c0800014082006880fb002080c7000480a6000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000809b001890830004832a000c9323000083050020801800007c0803a64e800021831b0020833b00247f2803a63b7b00284bfffac43860000380fb00247ce803a63b7b00284e80002038600003815b00247d4803a63b7b00284e80002038600003823b00247e2803a63b7b00284e80002038600003833b00187f2803a63b7b001c4e80002038600003813b00087d2803a63b7b000c4e800020|@5882,1048575| 5882:S27|56414c55455f4f505328292e6765745475706c654b696e64283129 5883:O2|@5885,@5884 5884:O2|@5887,@3566 5885:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@5886,1048575| 5886:S27|56414c55455f4f505328292e6f7665726c6f616454797065283129 5887:C2,560|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7000882b60068973bfffc971bfffc949bfffc83150008801800007c0803a64e800021829b000482740004825300088232003c947bfffc80030008941bfffc807b000083110000801800007c0803a64e8000212803000141820154821b000c81f0000481cf0008814e003c807b0000830a0008801800007c0803a64e800021813b000c8109000480e8000880c7006483060000801800007c0803a64e80002128030001418200a880bb0004809b000c806400048323000c830300108005000c941bfffc80190014941bfffc806500008318000c801800007c0803a64e8000213f0002af63180454801800007c0803a64e8000213ae30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000082db001092c3000892e3000482bb000492a30000831b0000833b0018801800007c0903a67f2803a63b7b001c4e80042080bb0004809b000c806400048323000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003b0000039303000482e5000c92e300008319000c833b0010801800007c0903a67f2803a63b7b00144e800420821b000481fb000c81cf0004814e000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000039200003912300048110000c91030000830a000c833b0010801800007c0903a67f2803a63b7b00144e800420|@5891,1048575|260,3,@5888 5888:O1|@5889 5889:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e80002083030000973bfffc80180000941bfffc806300044bffffbd398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b00009319000038790000833b00047f2803a63b7b00084e800020|@5890,786433| 5890:S38|56414c55455f4f505328292e6f7665726c6f6164547970652832296765745479706573283129 5891:S27|56414c55455f4f505328292e6f7665726c6f616454797065283229 5892:O2|@5894,@5893 5893:O2|@5896,@3566 5894:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@5895,1048575| 5895:S20|56414c55455f4f505328292e6d6b566172283129 5896:C2,212|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d700083d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003a800001929500003d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213a7d0004919d00003a400001925300003a230000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00009263000c92a30008908300049223000083160104801800007c0903a67f2803a64e800420|@5897,1048575| 5897:S20|56414c55455f4f505328292e6d6b566172283229 5898:O2|@5900,@5899 5899:O2|@5902,@3566 5900:C2,64|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180c3000c80a30008808300048063000083180004801800007c0903a64e800420|@5901,1048575| 5901:S24|56414c55455f4f505328292e6d6b47636f6e737472283129 5902:C2,184|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7000882b60034973bfffc947bfffc949bfffc94dbfffc801600fc941bfffc3865000083150004801800007c0803a64e8000213a830000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00009283000c827b000492630008825b000892430004823b000c92230000831b0000833b0010801800007c0903a67f2803a63b7b00144e800420|@5903,1048575| 5903:S24|56414c55455f4f505328292e6d6b47636f6e737472283429 5904:O2|@5906,@5905 5905:O2|@5908,@3566 5906:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@5907,1048575| 5907:S19|56414c55455f4f505328292e6d6b4578283129 5908:C2,344|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7000882b60068829600383d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213a7d0004919d00003a400001925300003d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213a3d0004919d00003a0000019211000039e30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00009223000492630000973bfffc971bfffc95fbfffc949bfffc80150004941bfffc83140004801800007c0803a64e80002181db000c814e0004812a00088109007038e30000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d000080db000490c3000c90e3000880a8000490a30004809b000890830000831b0000833b0010801800007c0903a67f2803a63b7b00144e800420|@5909,1048575| 5909:S19|56414c55455f4f505328292e6d6b4578283229 5910:O2|@5912,@5911 5911:O2|@5914,@3566 5912:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@5913,1048575| 5913:S29|56414c55455f4f505328292e6d6b53656c656374656454797065283129 5914:C2,460|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d70008973bfffc971bfffc947bfffc949bfffc94bbfffc83160090801800007c0803a64e80002182bb000c8295000482740008947bfffc801300a0941bfffc807b001083130084801800007c0803a64e800021825b0014823200048211000881f00018947bfffc800f0004941bfffc807b001883100094801800007c0803a64e80002181db001c814e0004812a0008947bfffc807b001c83090098801800007c0803a64e80002139030000398000063bbdffe47c1df04040a00010800d001c7c0803a64e800021387d0004919d00009103001480fb000090e3001080db001090c3000c80bb000490a30008809b000890830004833b001893230000831b000c801800007c0803a64e800021947bfffc831b002482f8000482d70008807b00208316008c801800007c0803a64e8000213b1b00283c0002af60000d0c7c0803a64e80002182bb002482950004827400083a430000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092430004823b0000922300008313009c801800007c0803a64e800021807b0000821b00287e0803a63b7b002c4e800020|@5923,1048575|344,3,@5915 5915:C2,168|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e800020973bfffc971bfffc80030004941bfffc806300003c0002af60000dd07c0803a64e800021947bfffc807b0004831b00084bffffa1398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b0000931900003879000082fb000c7ee803a63b7b00104e800020|@234,1048575|68,3,@5916 5916:C2,588|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8fffc82d7000482b6000882950068973bfffc971bfffc83140008801800007c0803a64e800021827b00008253fffc398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213a3d0004919d00003e0002af621010389211000081f2000491f1000c81d3ffec91d100088153ffd891510004812f000c8103000080e3000480c3000880a3000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000922300083c8002af608411649083000490a30000951bfffc94fbfffc94dbfffc83090034801800007c0803a64e800021833b000c8319fffc82f8000482d7000882b60030947bfffc8019fff0941bfffc807b000883150000801800007c0803a64e80002128030001418200a0827b00148253fffc823200048211000881f00030807b0008830f0008801800007c0803a64e80002181db000071cb000140820064815b0014812afffc8109000480e8000880c7004038a30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000808e00009083000490a3000083060004801800007c0803a64e8000213a83000048000010829b000848000008829b0008827b00148253fffc823200048211000881f00068398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d000081db000491c3000c92830008815b000c91430004813b001091230000830f0004833b0018801800007c0903a67f2803a63b7b001c4e800420|@5922,1048575|116,3,@5917 212,3,@5919 5917:C2,200|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000c82d70008973bfffc971bfffc947bfffc8016000c941bfffc83160090801800007c0803a64e80002182bb00083a830000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000827500089263000492830000831b0000801800007c0803a64e800021280300014182001c825b000880720004823b000c7e2803a63b7b00104e800020807b0004825b000c7e4803a63b7b00104e800020|@5918,1048575| 5918:S63|56414c55455f4f505328292e6d6b53656c656374656454797065283329636f707941436f6e7374727563746f72283129636f707954797065436f6e73283129 5919:O1|@5920 5920:C2,4|4e800020|@5921,524289| 5921:S61|56414c55455f4f505328292e6d6b53656c656374656454797065283329636f707941436f6e7374727563746f72283129636f7079547970283129283129 5922:S48|56414c55455f4f505328292e6d6b53656c656374656454797065283329636f707941436f6e7374727563746f72283129 5923:S29|56414c55455f4f505328292e6d6b53656c656374656454797065283329 5924:O2|@5926,@5925 5925:O2|@5928,@3566 5926:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@5927,1048575| 5927:S31|56414c55455f4f505328292e646973706c6179466978537461747573283129 5928:C2,928|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7000882b60118973bfffc971bfffc947bfffc94bbfffc83150000801800007c0803a64e800021280300014182004c829b00088274000482530020807b000083120000801800007c0803a64e8000213a2300003c6002a7606343f03b110000833b000c801800007c0903a67f2803a63b7b00104e800420829b0008827400048253000882320110807b000483110000801800007c0803a64e8000212803000141820170821b000881f0000481cf0008814e0110807b0004830a0008801800007c0803a64e800021813b00088109000480e80020947bfffc807b000483070004801800007c0803a64e80002138c300003c6002a16063f6583b060000801800007c0803a64e80002180bb000c808500048064002083230000807b00043b190000801800007c0803a64e8000213b0300003c6002a7606342e0801800007c0803a64e80002182fb000c82d7000482b60020807b00048315000c801800007c0803a64e8000213a8300003c6002a06063ee143b140000801800007c0803a64e800021827b000c8253000482320020807b000483110000801800007c0803a64e800021947bfffc3880ffff807b00043c0002a06000fe6c7c0803a64e800021831b0000801800007c0803a64e800021821b001081f0000481cf0020807b0008830e0008801800007c0803a64e80002139430000386000013b0a0000833b0014801800007c0903a67f2803a63b7b00184e800420821b000881f0000481cf0008814e0114807b0004830a0008801800007c0803a64e800021813b00088109000480e80020947bfffc807b000483070004801800007c0803a64e80002138c300003c6002a16063f6583b060000801800007c0803a64e80002180bb000c808500048064002083230000807b00043b190000801800007c0803a64e8000213b0300003c6002a760634384801800007c0803a64e80002182fb000c82d7000482b60020807b00048315000c801800007c0803a64e8000213a8300003c6002a06063ee143b140000801800007c0803a64e800021827b000c8253000482320020807b000483110000801800007c0803a64e800021947bfffc3880ffff807b00043c0002a06000fe6c7c0803a64e800021831b0000801800007c0803a64e800021821b001081f0000481cf0020807b0008830e0008801800007c0803a64e80002139430000386000013b0a0000833b0014801800007c0903a67f2803a63b7b00184e800420|@5929,1048575|120,3,@2805 276,3,@711 340,3,@2785 396,3,@265 464,3,@316 640,3,@711 704,3,@2797 760,3,@265 828,3,@316 5929:S31|56414c55455f4f505328292e646973706c6179466978537461747573283329 5930:O3|@5931,@3566,@5856 5931:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d700048076000883180008801800007c0903a64e800420|@5932,1048575| 5932:S23|56414c55455f4f505328292e6d6b45784964656e283129 5933:O2|@5934,@5118 5934:C2,80|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e3001096fbfffc82c3001496dbfffc80c3000c80a30008808300048063000083180004801800007c0903a64e800420|@5935,1048575| 5935:S28|56414c55455f4f505328292e6170706c7946756e6374696f6e283129 5936:O2|@5937,@5212 5937:C2,160|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc947bfffc973bfffc82e3001096fbfffc3adb000896dbfffc80c3000c80a30008808300048063000083180004801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082bb000492a30000829b000892830004827b00007e6803a63b7b000c4e800020|@5938,1048575| 5938:S34|56414c55455f4f505328292e6765744f7665726c6f6164496e7374616e6365283129 5939:O2|@5941,@5940 5940:O2|@5943,@3566 5941:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@5942,1048575| 5942:S33|56414c55455f4f505328292e697354686553616d65457863657074696f6e283129 5943:C2,888|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7000882b60068973bfffc971bfffc949bfffc83150008801800007c0803a64e800021829b000482740004825300088232003480030008941bfffc807b000083110000801800007c0803a64e8000212803000141820160821b000881f0000481cf0008814e0034807b0000830a0008801800007c0803a64e800021813b00088109000480e8000880c70068947bfffc807b000883060008801800007c0803a64e80002180bb000c80850004832400088319003480030008941bfffc807b000083180000801800007c0803a64e80002128030001418200cc82fb001082d7000482b6000882950034807b000083140008801800007c0803a64e800021827b0010825300048232002482120004947bfffc80110000941bfffc807b000c83100064801800007c0803a64e80002181fb001881cf0004814e0004947bfffc807b0008830a0064801800007c0803a64e80002139230000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000091230004811b000091030000831b0004833b0020801800007c0903a67f2803a63b7b00244e8004203860000182fb00147ee803a63b7b00184e800020821b000881f0000481cf0008814e0038807b0000830a0000801800007c0803a64e8000212803000141820164813b00088109000480e8000880c70038807b000083060008801800007c0803a64e80002180a3000080850000832300048319000082fb000882d7000482b6000882950068949bfffc971bfffc807b000c83140008801800007c0803a64e800021827b001082530004823200088211003880030008941bfffc807b000083100000801800007c0803a64e80002128030001418200bc81fb001481cf0004814e0008812a0038807b000083090008801800007c0803a64e8000218103000080e8000080c3000480a60000809b00087c8b3b78556bf80140a20010800d00347c0803a64e8000217c04380040820050833b00047f2b2b78556bf80140a20010800d00347c0803a64e8000217c1928004082001838600003831b00187f0803a63b7b001c4e80002038600001831b00187f0803a63b7b001c4e80002038600001833b00187f2803a63b7b001c4e8000203860000181fb00187de803a63b7b001c4e80002038600001813b000c7d2803a63b7b00104e800020|@5944,1048575| 5944:S33|56414c55455f4f505328292e697354686553616d65457863657074696f6e283229 5945:O2|-10,@5946 5946:O2|-3,@5947 5947:O3|100,@3537,0 5948:O2|-10,@5949 5949:O2|-3,@341 5950:O2|@5952,@5951 5951:O4|@5954,@5115,@3566,@206 5952:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@5953,1048575| 5953:S24|56414c55455f4f505328292e6d616b654775617264283129 5954:C2,812|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000882d7000882b60068973bfffc971bfffc947bfffc949bfffc94bbfffc83150008801800007c0803a64e800021829b000c82740008825300088232006c80030004941bfffc807b000083110000801800007c0803a64e800021280300014182013c821b001081f0000881cf0008814e006c807b0000830a0008801800007c0803a64e800021813b00108109000880e8000480c8000080070030941bfffc8007001c941bfffc38a0000194bbfffc80c6000080a9000c809b0010807b001883090004801800007c0803a64e80002138830000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000908300043b20000193230000831b0000801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b1d0004919d00003ae0000192f8000482db001092d800003aa30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003a800003928300089303000492a30000831b0004833b001c801800007c0903a67f2803a63b7b00204e800420821b001081f0000881cf0008814e0070807b0000830a0000801800007c0803a64e80002128030001418200e8813b00108109000880e80004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080db000890c3000438a0000190a300008007004c941bfffc8307001c801800007c0803a64e800021809b00148324000883190000947bfffc3ae0000196fbfffc80d8000080a4000c82c40004809b0010807b00183b160000801800007c0803a64e8000213aa30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a30004829b000092830000831b0004833b001c801800007c0903a67f2803a63b7b00204e800420813b00108109000880e8001c398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002138dd0004919d00003ca002af60a5214090a600083c8002a06084c7ac90860004806700009066000038660000800d00287c0803a64e800021|@5956,1048575|764,3,@5955 776,3,@227 5955:S9|6d616b654775617264 5956:S24|56414c55455f4f505328292e6d616b654775617264283329 5957:O2|@5959,@5958 5958:O4|@5961,@5115,@3566,@206 5959:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@5960,1048575| 5960:S26|56414c55455f4f505328292e6d616b65496e7665727365283129 5961:C2,716|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000882d7000882b60068973bfffc971bfffc947bfffc949bfffc94bbfffc83150008801800007c0803a64e800021829b000c82740008825300088232006c80030004941bfffc807b000083110000801800007c0803a64e8000212803000141820164821b001081f0000881cf0008814e006c807b0000830a0008801800007c0803a64e8000212c03000140820118813b00108109000880e8000480c8000080070030941bfffc8007001c941bfffc38a0000194bbfffc80c6000080a9000c809b0010807b001883090004801800007c0803a64e80002138830000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000908300043b20000593230000831b0000801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b1d0004919d00003ae0000192f8000482db001092d800003aa30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003a800001928300089303000492a30000831b0004833b001c801800007c0903a67f2803a63b7b00204e800420813b00108109000880e800048067000880db00147cc803a63b7b00184e800020821b001081f0000881cf0008814e0070807b0000830a0000801800007c0803a64e8000212803000141820060813b00108109000880e80004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080db000890c3000438a0000590a300008307001c833b0014801800007c0903a67f2803a63b7b00184e800420813b00108109000880e8001c398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002138dd0004919d00003ca002af60a524f890a600083c8002a06084c7ac90860004806700009066000038660000800d00287c0803a64e800021|@5963,1048575|668,3,@5962 680,3,@227 5962:S11|6d616b65496e7665727365 5963:S26|56414c55455f4f505328292e6d616b65496e7665727365283329 5964:O4|@5967,@5327,@3566,@5096 5965:C2,64|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180c3000c80a30008808300048063000083180004801800007c0903a64e800420|@5966,1048575| 5966:S26|56414c55455f4f505328292e6c6f6f6b757056616c7565283129 5967:C2,156|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002af62d6267c92d7000082d8000892d7000882b8000c92b7000482960008947bfffc827400f8967bfffc94dbfffc38d700003a45000080a40004808400003872000083180004801800007c0903a67f2803a64e800420|@5972,1048575|68,3,@5968 5968:C2,220|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000882d70008973bfffc971bfffc947bfffc831600dc801800007c0803a64e80002182bb0004829500088274000883130120801800007c0803a64e800021825b0004823200088211000881f0011c830f0008801800007c0803a64e80002181db000481430018398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00003d2002af61292774912300009143000c811b00009103000880ee000490e3000480db00087cc803a63b7b000c4e800020|@5971,1048575|172,3,@5969 5969:C2,172|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc8318000c801800007c0803a64e800021706b00014082005c833b0000809900088063000083190004801800007c0803a64e8000213b030000398000013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d00009303000082fb00047ee803a63b7b00084e80002038600001833b00047f2803a63b7b00084e800020|@5970,1048575| 5970:S32|56414c55455f4f505328292e6c6f6f6b757056616c7565283429283129283129 5971:S29|56414c55455f4f505328292e6c6f6f6b757056616c7565283429283129 5972:S26|56414c55455f4f505328292e6c6f6f6b757056616c7565283429 5973:O4|@5975,@5992,@5974,@4335 5974:O2|@6008,@6007 5975:O1|@5976 5976:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc947bfffc947bfffc3a990000389b00003c0002af600029807c0803a64e800021398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000809b000090830000833b000493230004831b0008930300087e8803a63b7b000c4e800020|@5991,1032195|52,3,@5977 5977:C2,292|7f2802a6633900023d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213b1d0004919d00003ae0000192f80000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002af62d62ac092d7000093170004398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002af62b52c5892b600009076000893160004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003ea002af62b52e5892a3000093030004398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b1d0004919d00003ea002af62b52f7492b8000092d8000492e400009304000490640008386000017f2803a64e800020|@5990,1015811|92,3,@5978 144,3,@5982 200,3,@5986 252,3,@5988 5978:C2,88|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d70000947bfffc973bfffc387600003b1b00043c0002af60002b347c0803a64e80002182bb00007ea803a63b7b00084e800020|@5981,1048575|56,3,@5979 5979:C2,168|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e80002082e30000973bfffc971bfffc80170000941bfffc80170004941bfffc806300044bffffb182db0008398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082bb000092a30004829b00049283000083160000833b000c801800007c0903a67f2803a63b7b00104e800420|@5980,1048575| 5980:S43|5554494c49544945535f28292e6e6f4475706c6963617465732832296170706c792831296170706c283129 5981:S36|5554494c49544945535f28292e6e6f4475706c6963617465732832296170706c79283129 5982:C2,92|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021971bfffc949bfffc947bfffc82f8000480770000973bfffc3b1b000c3c0002af60002cd07c0803a64e80002182db00007ec803a63b7b00104e800020|@5985,1048575|60,3,@5983 5983:C2,268|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082008080780000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213afd0004919d000082d8fffc92d7000482b8fff892b700008283000482740000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a5d0004919d00009272000492f2000092540000386000017f2803a64e80002082e300003ad900003ab80000828300048095fff8807700003f00000063184368801800007c0803a64e8000212803000141820024827500008075fff8831300083b360000801800007c0903a67f2803a64e800420387400003b1500003b3600007f2803a64bffff00|@5984,1048575|188,3,I24 5984:S43|5554494c49544945535f28292e6e6f4475706c696361746573283229656e7465722832296c6f6f6b283129 5985:S36|5554494c49544945535f28292e6e6f4475706c696361746573283229656e746572283229 5986:C2,208|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d70000973bfffc947bfffc2c1600014082001838600001833b00047f2803a63b7b00084e8000208076000082a30004809b0000806300003f00000063184368801800007c0803a64e800021280300014182003c398000013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a30000809b00047c8803a63b7b00084e80002082d60004800d00187c1b004040a00010800d00207c0803a64e8000214bffff64|@5987,1015811|92,3,I24 5987:S37|5554494c49544945535f28292e6e6f4475706c6963617465732832296c6f6f6b7570283129 5988:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@5989,1048575| 5989:S36|5554494c49544945535f28292e6e6f4475706c696361746573283229656e746572283129 5990:S28|5554494c49544945535f28292e6e6f4475706c696361746573283229 5991:S28|5554494c49544945535f28292e6e6f4475706c696361746573283129 5992:O1|@5993 5993:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc947bfffc947bfffc3a990000389b00003c0002af600030ec7c0803a64e800021398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000809b000090830000833b000493230004831b0008930300087e8803a63b7b000c4e800020|@6006,1032195|52,3,@5994 5994:C2,288|7f2802a6633900023d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d00003b00000193030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b1d0004919d00003ee002af62f7322892f8000090780004398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002af62d633c092d7000090770004398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002af62b5348092b6000090760004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003ea002af62b5359892a3000092e30004930400009064000492c40008386000017f2803a64e800020|@6005,1015811|92,3,@5995 144,3,@5999 196,3,@6001 248,3,@6003 5995:C2,88|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d70000947bfffc973bfffc387600003b1b00043c0002af6000329c7c0803a64e80002182bb00007ea803a63b7b00084e800020|@5998,1048575|56,3,@5996 5996:C2,168|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e80002082e30000973bfffc971bfffc80170000941bfffc80170004941bfffc806300044bffffb182db0008398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082bb000092a30004829b00049283000083160000833b000c801800007c0903a67f2803a63b7b00104e800420|@5997,1048575| 5997:S41|5554494c49544945535f28292e7365617263684c6973742832296170706c792831296170706c283129 5998:S34|5554494c49544945535f28292e7365617263684c6973742832296170706c79283129 5999:C2,120|7f2802a663390002398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213afd0004919d000090970004907700008098000480640000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213add0004919d00009076000492f6000092c40000386000017f2803a64e800020|@6000,983043| 6000:S34|5554494c49544945535f28292e7365617263684c697374283229656e746572283229 6001:C2,208|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d70000973bfffc947bfffc2c1600014082001838600001833b00047f2803a63b7b00084e8000208076000082a30004809b0000806300003f00000063184368801800007c0803a64e800021280300014182003c398000013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a30000809b00047c8803a63b7b00084e80002082d60004800d00187c1b004040a00010800d00207c0803a64e8000214bffff64|@6002,1015811|92,3,I24 6002:S35|5554494c49544945535f28292e7365617263684c6973742832296c6f6f6b7570283129 6003:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@6004,1048575| 6004:S34|5554494c49544945535f28292e7365617263684c697374283229656e746572283129 6005:S26|5554494c49544945535f28292e7365617263684c697374283229 6006:S26|5554494c49544945535f28292e7365617263684c697374283129 6007:O2|@6011,@6010 6008:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@6009,1048575| 6009:S28|5554494c49544945535f28292e636865636b466f72446f7473283129 6010:O1|@6017 6011:C2,92|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc94bbfffc949bfffc971bfffc973bfffc386000033b1b00103c0002af600037687c0803a64e800021833b00007f2803a63b7b00144e800020|@6016,1048575|60,3,@6012 6012:C2,576|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000072eb00014182000c3ac000034800001081970000558c083c619600017c6bb038556bf80140a20010800d00347c0803a64e8000217c03b00040810010386000017f2803a64e800020398000025460f80140a20010800d00347c0803a64e8000217ecc1c1141a3fff056cbf80140a20010800d00347c0803a64e8000212c160001408000084800004472eb00014182000c3aa000034800001081970000558c083c619500017ecba838556bf80140a20010800d00347c0803a64e8000217c16a8004080000848000020973bfffc3ac300003c6002a0606395e0800d00287c0803a64e80002172eb00014182000c3ab70000480000183ab600087eac0e707d7760ae556b083c617500013ad900003a9800003a6300003880005d387500003f00000063184368801800007c0803a64e80002128030001418200b88254fff4823200048211000096dbfffc80100000941bfffc8014fff8941bfffc8014fffc941bfffc809400003c6002af606339c43c0002a1600074a87c0803a64e8000213c8002af608439dc3c0002a1600074a87c0803a64e80002139e30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000091e3000881db000091c30004815b000491430000831b0008833b000c801800007c0903a67f2803a63b7b00104e800420398000025660f80140a20010800d00347c0803a64e8000217c73661541a3fff03b1400003b3600007f2803a64bfffdcc|@6015,1048575|244,3,@51 320,3,I24 392,3,@6013 400,3,@511 416,3,@6014 424,3,@511 6013:S15|7175616c6966696564206e616d6520 6014:S13|20696c6c6567616c2068657265 6015:S36|5554494c49544945535f28292e636865636b466f72446f7473283329636865636b283129 6016:S28|5554494c49544945535f28292e636865636b466f72446f7473283329 6017:O1|@4231 6018:O1|@6019 6019:O1|@6020 6020:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a3000880830004806300003c0002af60003ab47c0903a64e800420|@6023,1048575|44,3,@6021 6021:C2,296|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc949bfffc94bbfffc3c0002ab60004cd47c0803a64e800021833b00008303000828180001408200183879000082fb00087ee803a63b7b000c4e800020947bfffc973bfffc82e30004386000013b170000801800007c0803a64e80002182db000480030000941bfffc80030004941bfffc3860000183160000801800007c0803a64e8000213aa30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000829b000892830008827b000092630004825b00049243000096bbfffc831b0018801800007c0803a64e8000213a230000807b00003b3100003b7b0014800d00187c1b004040a00010800d00207c0803a64e8000214bffff1c|@6022,1048575|44,3,@4659 6022:S26|556e6976657273616c5461626c652e756e6976466f6c64283329 6023:S26|556e6976657273616c5461626c652e756e6976466f6c64283129 6024:O5|@4210,@6026,@4209,@6025,@332 6025:O3|@6034,@6036,@6033 6026:O3|@6028,@6030,@6027 6027:O2|@6032,@9394 6028:O2|@6029,@9394 6029:C2,32|82e3000082d800047c17b0404082000c386000034e800020386000014e800020|@337,983041| 6030:O2|@6031,@9394 6031:C2,76|7f2802a6633900023ae30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092e300083ae0008b92e3000482f8000492e300007f2803a64e800020|@337,917505| 6032:C2,48|82e3000082d800047c17b0404082000c806300084e800020973bfffc3c6002a160630a30800d00287c0803a64e800021|@337,983041|28,3,@341 6033:O2|@6038,@9380 6034:O2|@6035,@9380 6035:C2,32|82e3000082d800047c17b0404082000c386000034e800020386000014e800020|@337,983041| 6036:O2|@6037,@9380 6037:C2,76|7f2802a6633900023ae30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092e300083ae0008b92e3000482f8000492e300007f2803a64e800020|@337,917505| 6038:C2,48|82e3000082d800047c17b0404082000c806300084e800020973bfffc3c6002a160630a30800d00287c0803a64e800021|@337,983041|28,3,@341 6039:O4|8,@9377,@4705,@4393 6040:O2|@4042,@4033 6041:O1|@1118 6042:O2|@6110,@6109 6043:O3|@6045,@6048,@6044 6044:O1|@6050 6045:O1|@6046 6046:C2,28|83030000281800014082000c386000034e800020386000014e800020|@6047,786433| 6047:S12|456e76457863657074696f6e 6048:O1|@6049 6049:C2,76|7f2802a6633900028303000082e30004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092e30008930300043b000001930300007f2803a64e800020|@6047,917505| 6050:C2,68|7f2802a6633900028303000482e30008398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092e30004930300007f2803a64e800020|@6047,917505| 6051:O2|@6052,@206 6052:O1|@6053 6053:C2,32|3b00ffff82e300007c18b8404082000c386000034e800020386000014e800020|@6054,917505| 6054:S14|456e765374617469634c6576656c 6055:O3|@6057,@6060,@6056 6056:O1|@6062 6057:O1|@6058 6058:C2,28|83030000281800034082000c386000034e800020386000014e800020|@6059,786433| 6059:S10|456e7656436f6e737472 6060:O1|@6061 6061:C2,84|7f2802a6633900028303000082e3000482c30008398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d000092c3000c92e30008930300043b000003930300007f2803a64e800020|@6059,983041| 6062:C2,76|7f2802a6633900028303000482e3000882c3000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092c3000892e30004930300007f2803a64e800020|@6059,983041| 6063:O3|@6065,@6068,@6064 6064:O1|@6070 6065:O1|@6066 6066:C2,32|3b00fffd82e300007c18b8404082000c386000034e800020386000014e800020|@6067,917505| 6067:S8|456e7656616c7565 6068:O1|@6069 6069:C2,76|7f2802a6633900028303000082e30004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092e30008930300043b00fffd930300007f2803a64e800020|@6067,917505| 6070:C2,68|7f2802a6633900028303000482e30008398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092e30004930300007f2803a64e800020|@6067,917505| 6071:O1|@6072 6072:C2,8|386000014e800020|@6073,524289| 6073:S24|44454255474745525f28292e6e756c6c4465627567283129 6074:O3|@6076,@6078,@6075 6075:O2|@6080,@9452 6076:O2|@6077,@9452 6077:C2,32|82e3000082d800047c17b0404082000c386000034e800020386000014e800020|@337,983041| 6078:O2|@6079,@9452 6079:C2,76|7f2802a6633900023ae30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092e300083ae0008b92e3000482f8000492e300007f2803a64e800020|@337,917505| 6080:C2,48|82e3000082d800047c17b0404082000c806300084e800020973bfffc3c6002a160630a30800d00287c0803a64e800021|@337,983041|28,3,@341 6081:O3|@6083,@6086,@6082 6082:O1|@6088 6083:O1|@6084 6084:C2,28|83030000281800014082000c386000034e800020386000014e800020|@6085,786433| 6085:S10|4465627567456e746572 6086:O1|@6087 6087:C2,76|7f2802a6633900028303000082e30004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092e30008930300043b000001930300007f2803a64e800020|@6085,917505| 6088:C2,68|7f2802a6633900028303000482e30008398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092e30004930300007f2803a64e800020|@6085,917505| 6089:O3|@6091,@6094,@6090 6090:O1|@6096 6091:O1|@6092 6092:C2,32|3b00ffff82e300007c18b8404082000c386000034e800020386000014e800020|@6093,917505| 6093:S14|4465627567457863657074696f6e 6094:O1|@6095 6095:C2,68|7f2802a6633900023b030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000930300043b00ffff930300007f2803a64e800020|@6093,786433| 6096:C2,8|806300044e800020|@6093,524289| 6097:O3|@6099,@6102,@6098 6098:O1|@6104 6099:O1|@6100 6100:C2,28|83030000281800034082000c386000034e800020386000014e800020|@6101,786433| 6101:S10|44656275674c65617665 6102:O1|@6103 6103:C2,76|7f2802a6633900028303000082e30004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092e30008930300043b000003930300007f2803a64e800020|@6101,917505| 6104:C2,68|7f2802a6633900028303000482e30008398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092e30004930300007f2803a64e800020|@6101,917505| 6105:O2|@6106,@886 6106:O1|@6107 6107:C2,32|3b00fffd82e300007c18b8404082000c386000034e800020386000014e800020|@6108,917505| 6108:S9|446562756753746570 6109:O4|@6117,@6129,@6130,@6116 6110:C2,80|7f2802a6633900023ae30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003ec002af62d648cc92c3000082d8000492c3000892e300047f2803a64e800020|@6115,983041|48,3,@6111 6111:C2,88|7f2802a6633900023ae30000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00003ec002af62d6494092c3000082d8000892c3000c92e3000882f8000492e300047f2803a64e800020|@6114,983041|48,3,@6112 6112:C2,88|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7000896dbfffc82b7000c96bbfffc82970010969bfffc80d7000480b70000809800088318000c801800007c0903a64e800420|@6113,1048575| 6113:S34|44454255474745525f28292e646562756746756e6374696f6e283129283129283129 6114:S31|44454255474745525f28292e646562756746756e6374696f6e283129283129 6115:S28|44454255474745525f28292e646562756746756e6374696f6e283129 6116:O4|I48,-1,@2645,@5701 6117:C2,1448|7f2802a66339000239600074800d00187d6bd8107c0b004040a00010800d00247c0803a64e80002182fb000472eb00014182000c3ac000034800001081970000558c083c619600013ab900003a9800003a6300003a4400003a25000038b6000038800001387700003c0002af600050047c0803a64e80002196bbfffc969bfffc967bfffc965bfffc963bfffc94dbfffc3f0002af63185144801800007c0803a64e800021806300043c0002a1600002a07c0803a64e8000213a0300003c8002ac60848cc8387000003c0002af600053807c0803a64e8000212803000141820064720b00014182000c39c000034800001081900000558c083c618e00013980000455c0f80140a20010800d00347c0803a64e8000217d4c741141a3fff038aa000038800001387000003c0002ac6000c9547c0803a64e80002139e300004800000839f000003880005b386f00003c0002af600053807c0803a64e800021280300014182006471eb00014182000c3940000348000010818f0000558c083c618a0001398000025540f80140a20010800d00347c0803a64e8000217d2c541141a3fff038a9000038800001386f00003c0002ac6000c9547c0803a64e80002139c300004800000839cf0000947bfffc947bfffc81fb0008814f00002c0a0001408200a4813b00188109000880e8000480c8000895dbfffc800f0008941bfffc80070000941bfffc806f000483060000801800007c0803a64e80002138a30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000090a30008809b0004908300043f2000006339466893230000831b0000801800007c0803a64e8000213b1b000c3ae0000392f800003adb000c907600044800019c2c0a0003408200a4813b00188109000880e8000480c8000895dbfffc800f0008941bfffc80070000941bfffc806f000483060000801800007c0803a64e80002138a30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000090a30008809b0004908300043f2000006339466893230000831b0000801800007c0803a64e8000213b1b000c3ae0000592f800003adb000c90760004480000f42c0affff408200c4813b00188109000880e8001095dbfffc806f000483070000801800007c0803a64e80002180db001c80a60008808500048325000c8305000880040000941bfffc80190004941bfffc83180000801800007c0803a64e8000213ae30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092e3000882db000092c300043ea0000062b5466892a30000831b0004801800007c0803a64e8000213a9b000c3a600007927400003a5b000c907200044800002c813b0018391b000038e0000990e8000038db000080a9000c90a6000495dbfffc947bfffc947bfffc947bfffc947bfffc947bfffc947bfffc947bfffc947bfffc947bfffc947bfffc947bfffc947bfffc947bfffc947bfffc947bfffc947bfffc947bfffc947bfffc947bfffc947bfffc809b006c38bb000080640004809b00643b230000807b00683b190000801800007c0803a64e800021398000123bbdffb47c1df04040a00010800d001c7c0803a64e8000213b1d0004919d000082fb000092f8000082db000492d8000482bb000892b80008829b000c9298000c827b001092780010825b001492580014823b001892380018821b001c9218001c81fb002091f8002081db002491d80024815b002891580028813b002c9138002c811b00309118003080fb003490f8003480db003890d8003880bb003c90b8003c809b004090980040807b004490780044398000063bbdffe47c1df04040a00010800d001c7c0803a64e800021387d0004919d000093030014833b005093230010831b007c9303000c82fb007492e3000882db005892c3000482bb005492a30000831b0060833b0070801800007c0903a67f2803a63b7b00804e800420|@6128,1048575|104,3,@6118 144,3,@6120 168,3,@321 188,3,@5172 200,3,@6124 296,3,@5220 332,3,@6124 428,3,@5220 588,3,I48 756,3,I48 956,3,I48 6118:C2,252|7f2802a663390002706b000141820048280500014182004038a30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000388000019083000490a300007f2803a64e800020973bfffc947bfffc949bfffc3b0000012c050001408200183878000080bb00087ca803a63b7b000c4e8000203885fffe807b00007d851a143b2cffff38b9fffe38650008833b00047c6c0e707d7960ae556b083c61650001398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00009303000490a300003b03000038a40000800d00187c1b004040a00010800d00207c0803a64e8000214bffff6c|@6119,786439| 6119:S31|4c696272617279537570706f72742e737472696e674578706c6f6465283329 6120:O1|@6121 6121:C2,176|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c030001408200103c6002a16063f6584e800020973bfffc80030000941bfffc806300044bffffbd947bfffc947bfffc38bb000038830000807b00083c0002af600052187c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000833b000093230000831b00049303000482fb000c7ee803a63b7b00104e800020|@4875,983047|40,3,@711 92,3,@6122 6122:C2,284|7f2802a6633900022c03005340820050398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000083040004930300043ae0005392e300003ae0000392e5000090650004386000017f2803a64e8000202c03005140820050398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b1d0004919d000082e4000492f800043860005190780000386000019065000093050004386000017f2803a64e800020830400002c1800034082001c3ae0000392e500008064000490650004386000014e800020398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213afd0004919d000082c4000492d7000490770000386000019065000092e50004386000017f2803a64e800020|@6123,983047| 6123:S40|44454255474745525f28292e646562756746756e6374696f6e283729636865636b43686172283329 6124:C2,344|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021708b00014182000c3b0000034800001081840000558c083c61980001706b00014182000c3ae000034800001081830000558c083c619700017f0bb838556bf80140a20010800d00347c0803a64e8000217c18b800418100d82c180003408200842c170003408200283b04000038830000387800003f00000063184368801800007c0903a67f2803a64e8004203980000256e0f80140a20010800d00347c0803a64e8000217f0cbc1141a3fff03af800087eec0e707d6360ae556b083c617800017c04c04040820010386000037f2803a64e800020386000017f2803a64e8000203998ffff7eebc0385560f80140a20010800d00347c0803a64e8000217eccbc1141a3fff0949bfffc38c3000038a0000138960000387800003c0002af600054f47c0903a67f2803a64e800420386000017f2803a64e800020|@6127,1015823|148,3,I24 312,3,@6125 6125:C2,148|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c03000140820010386000033b7b00044e8000203b05000882fb00007f0c0e707d7760ae556b083c617600013b0400087f0c0e707d6660ae556b083c617500017c16a840408200243b0500023ac400023aa3fffe96fb000038b8000038960000387500004bffff84386000013b7b00044e800020|@6126,1015823| 6126:S12|627974654d61746368283529 6127:S18|537472696e672e6973537566666978283229 6128:S28|44454255474745525f28292e646562756746756e6374696f6e283729 6129:O2|@6131,@6130 6130:O5|@6153,@6154,@6155,@6152,@6041 6131:C2,448|7f2802a663390002398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002af62d657f892d7000082d8000492d70004398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003e8002af62945c309295000092d50004398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213a9d0004919d00003e6002af627360949274000092f4000c9094000890740004398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003e6002af6273611c927700009097000c9077000892b700043c8002af60846194908500003c6002af606361949065000492e500083ee002af62f7619492e5000c3ea002af62b5619492a500103e6002af627361ec926500143c8002af608461ec908500183c6002af606361ec9065001c3ee002af62f7619492e500203ea002af62b561ec92a500243e6002af6273628c926500283c8002af6084628c9085002c928500303c6002af606361ec906500343ee002af62f7628c92e500383ea002af62b561ec92a5003c3e8002af6294628c928500403e6002af6273628c92650044386000017f2803a64e800020|@6151,1040391|44,3,@6132 100,3,@6134 152,3,@6136 212,3,@6138 236,3,@6140 248,3,@6140 264,3,@6140 276,3,@6140 288,3,@6143 300,3,@6143 312,3,@6143 324,3,@6140 336,3,@6143 348,3,@6148 360,3,@6148 376,3,@6143 388,3,@6148 400,3,@6143 412,3,@6148 424,3,@6148 6132:C2,1004|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021708b0001408203c082e4000082d700002c16fffd4082012870ab0001408201183ab900003a9800003a63000082570004823700088204000438930000387200003f00000063184368801800007c0803a64e80002128030001418200c081f4000481cf0004814f000896bbfffc965bfffc963bfffc800e0000941bfffc80650000830a0000801800007c0803a64e80002139230000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000091230008811b00049103000480fb000890e30000831b0000801800007c0803a64e80002138c30000398000013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d000090c3000080bb000c7ca803a63b7b00104e80002080a5000438900000387300003b1400003b3500007f2803a64bfffeb8386000014e8000202c1600014082012870ab0001408201183ab900003a9800003a63000082570004823700088204000438930000387200003f00000063184368801800007c0803a64e80002128030001418200c081f4000481cf0004814f000896bbfffc965bfffc963bfffc800e0004941bfffc80650000830a0000801800007c0803a64e80002139230000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000091230008811b00049103000480fb000890e30000831b0000801800007c0803a64e80002138c30000398000013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d000090c3000080bb000c7ca803a63b7b00104e80002080a5000438900000387300003b1400003b3500007f2803a64bfffd8c386000014e8000202c1600034082015070ab0001408201403ab900003a9800003a63000082570004823700088217000c81e4000438930000387200003f00000063184368801800007c0803a64e80002128030001418200e481d40004814e0000812e000896bbfffc965bfffc963bfffc961bfffc800a0004941bfffc800a0000941bfffc8065000083090000801800007c0803a64e800021831b0000801800007c0803a64e80002139030000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00009103000c80fb000890e3000880db000c90c3000480bb001090a30000831b0004801800007c0803a64e80002138830000398000013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d000090830000833b00147f2803a63b7b00184e80002080a50004388f0000387300003b1400003b3500007f2803a64bfffc38386000014e800020808400044bfffc28386000014e800020|@6133,1048575|96,3,I24 396,3,I24 700,3,I24 6133:S39|44454255474745525f28292e6d616b6553706163652833296c6f6f6b757056616c756573283329 6134:C2,1052|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021706b0001408203f082e3000082d700002c16fffd40820138708b00014082012882b800048295000482750008973bfffc971bfffc80170004941bfffc80170008941bfffc80030004941bfffc80040004941bfffc80140000941bfffc8064000083130000801800007c0803a64e8000213a430000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092430008823b000c92230004821b001092030000831b0000801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002139fd0004919d0000906f000481db001091cf000095fbfffc809b0008807b000c831b00184bfffee5398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021395d0004919d0000906a0004813b0000912a0000386a0000811b001c7d0803a63b7b00204e800020386000014e8000202c16000140820138708b00014082012882b800048295000482750008973bfffc971bfffc80170004941bfffc80170008941bfffc80030004941bfffc80040004941bfffc80140004941bfffc8064000083130000801800007c0803a64e8000213a430000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092430008823b000c92230004821b001092030000831b0000801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002139fd0004919d0000906f000481db001091cf000095fbfffc809b0008807b000c831b00184bfffda9398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021395d0004919d0000906a0004813b0000912a0000386a0000811b001c7d0803a63b7b00204e800020386000014e8000202c16000340820160708b00014082015082b800048295000082750008973bfffc971bfffc80170004941bfffc80170008941bfffc8017000c941bfffc80030004941bfffc80040004941bfffc80140004941bfffc80140000941bfffc8064000083130000801800007c0803a64e800021831b0000801800007c0803a64e8000213a430000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00009243000c823b001092230008821b00149203000481fb001891e30000831b0004801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002139dd0004919d0000906e0004815b0018914e000095dbfffc809b000c807b0010831b00204bfffc45398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021393d0004919d000090690004811b0000910900003869000080fb00247ce803a63b7b00284e800020386000014e800020806300044bfffbf8386000014e800020|@6135,1048575| 6135:S36|44454255474745525f28292e6d616b655370616365283329616c6c56616c756573283229 6136:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180b80004809800088318000c801800007c0903a64e800420|@6137,1048575| 6137:S42|44454255474745525f28292e6d616b6553706163652833296c6f6f6b757056616c756573283129283129 6138:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021809800088078000c83180004801800007c0903a64e800420|@6139,1048575| 6139:S27|44454255474745525f28292e6d616b655370616365283329283129 6140:O1|@6141 6141:C2,8|386000014e800020|@6142,524289| 6142:S35|44454255474745525f28292e6d616b655370616365283329616c6c456d707479283129 6143:O1|@6144 6144:C2,24|973bfffc3c6002af60636228800d00287c0803a64e800021|@6147,524289|4,3,@6145 6145:O3|103,@327,@6146 6146:S29|43616e6e6f74207570646174652074686973206e616d65207370616365 6147:S34|44454255474745525f28292e6d616b6553706163652833296e6f456e746572283129 6148:O1|@6149 6149:C2,8|386000014e800020|@6150,524289| 6150:S33|44454255474745525f28292e6d616b6553706163652833296e6f4c6f6f6b283129 6151:S24|44454255474745525f28292e6d616b655370616365283329 6152:O2|@5701,@5390 6153:O2|@3739,@4106 6154:O2|@4111,@5089 6155:O2|@2250,@2086 6156:O2|@6158,@6157 6157:O6|@6161,@5631,@6160,@773,@206,@5628 6158:C2,80|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e3001096fbfffc82c3001496dbfffc80c3000c80a30008808300048063000083180004801800007c0903a64e800420|@6159,1048575| 6159:S21|50415253455f5452454528292e7061737332283129 6160:O3|@6374,@5631,@5628 6161:C2,364|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002af62d6658092d7000090d7000c82d8000492d7000882b8001492b70004971bfffc94dbfffc96fbfffc949bfffc82960008827400a8973bfffc947bfffc3865000083130008801800007c0803a64e8000213980000d3bbdffc87c1df04040a00010800d001c7c0803a64e8000213a5d0004919d00008223002c923200303e0002af6210670c9212002c81e3002891f2002881c3002491d2002481430020915200208123001c9132001c810300189112001880e3001490f2001480c3001090d2001080a3000c90b2000c8083000890920008832300049332000483030000931200003ae0000196fbfffc3ac0000396dbfffc80db002438b20000809b0008807b00083b1b001c3c0002af6000675c7c0803a64e80002182bb00047ea803a63b7b00204e800020|@6373,1048575|68,3,@6162 196,3,@6165 332,3,@6168 6162:C2,304|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000882d70000973bfffc971bfffc947bfffc949bfffc8078000c83160008801800007c0803a64e80002182bb0008829500088274001c947bfffc8073000883130010801800007c0803a64e8000213a430000807b00003b120000801800007c0803a64e800021823b000c8211000881f00024947bfffc807b000c830f0000801800007c0803a64e80002139c300003c6002af606366cc3b0e0000801800007c0803a64e800021815b0010812a000881090024807b000c8308000c801800007c0803a64e80002138e300003c6002a06063ee143b070000801800007c0803a64e80002180db001080bb000c809b0000807b000883060004833b0014801800007c0903a67f2803a63b7b00184e800420|@6164,1048575|176,3,@6163 236,3,@265 6163:S10|466f756e64206e656172 6164:S33|50415253455f5452454528292e7061737332283629666f756e644e656172283229 6165:O1|@6166 6166:C2,8|386000014e800020|@6167,524289| 6167:S28|50415253455f5452454528292e7061737332283629656e762d283129 6168:C2,88|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021971bfffc94bbfffc947bfffc94dbfffc973bfffc3b1b00103c0002af600067d07c0803a64e800021833b00007f2803a63b7b001c4e800020|@6372,1048575|56,3,@6169 6169:C2,9728|7f2802a6633900023960005c800d00187d6bd8107c0b004040a00010800d00247c0803a64e80002182e300002c17fff14082014482d8000082b6000082950004827400108258fffc398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a3d0004919d0000821200309211000481f2001891f10000398000053bbdffe87c1df04040a00010800d001c7c0803a64e80002139dd0004919d00003d4002af614a8dec914e00008136fffc912e0010908e000c8118fff4910e000880f5000890ee000480c3000480a300088083000c398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d000091c3000c90c30008922300043ee002af62f78e7892e30000973bfffc971bfffc94bbfffc949bfffc83130054801800007c0803a64e800021947bfffc3883000038600003831b000c3c0002af60008e947c0803a64e80002182db000882bb000092b60000829b000490740000827b00107e6803a63b7b00144e8000202c17ffed4082013082d8000082b600008295000482740010824300048223000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003a0000039203000492230000973bfffc971bfffc949bfffc965bfffc83130004801800007c0803a64e80002181fb000881cf0000814e0000812a00048109000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002138fd0004919d00003cc002af60c6918890c7000080aefff890a70008809b0004908700043b230000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d000090e30010830ffff49303000c82eefffc92e3000882c8006092c300049323000083080004801800007c0803a64e80002182bb000090750000829b000c7e8803a63b7b00104e8000202c170003408200ec973bfffc971bfffc949bfffc80030008941bfffc806300044bfffd39947bfffc809b0008807b0004831b000c4bfffd2582db000c82b6000082950000827400048253000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a3d0004919d00003e0002af621092049211000081f5fff891f1000881db000891d1000439430000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d0000922300108136fff49123000c8115fffc910300089143000480fb000090e3000083120004833b0010801800007c0903a67f2803a63b7b00144e8004202c170005408201bc973bfffc971bfffc947bfffc80030008941bfffc8003000c941bfffc38830000806300044bfffc3d82db000c82b6000082950000827400048253000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a3d0004919d00003e0002af621092549211000081f5fff891f1000881db000891d1000439430000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d0000922300108136fff49123000c8115fffc9103000880f2005490e300049143000083120000801800007c0803a64e800021809b0008807b0000831b000c4bfffb81947bfffc809b000c807b0008831b00104bfffb6d80db001080a6000080850000832400048319000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002af62d692a492d7000082a5fff892b70008829b000c929700043a630000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d000092e300108246fff49243000c8225fffc9223000892630004821b00009203000083180000801800007c0803a64e800021807b000081fb00147de803a63b7b00184e8000202c17001b4082005c82d8000082b60000829500048274000c949bfffc971bfffc973bfffc80130014941bfffc806300043b1b000c3c0002af600092f47c0803a64e800021831b0000833b0004801800007c0903a67f2803a63b7b00104e8004202c1700114082014882d8000082b60000398000053bbdffe87c1df04040a00010800d001c7c0803a64e8000213a9d0004919d00003e6002af627393c0927400008256fffc925400109074000c8238fff492340008821500089214000481f5000481cf000c971bfffc947bfffc973bfffc80030004941bfffc80030008941bfffc969bfffc800e0024941bfffc800e002c941bfffc8063000c3b1b001c3c0002af600094607c0803a64e80002139430000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000813b00089123000491430000831b0000801800007c0803a64e80002139030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080fb001090e3000491030000831b0004801800007c0803a64e80002180db000c9066000080bb00147ca803a63b7b00204e8000202c17ffe74082000c806300084e8000202c17ffe34082002480c3000480a300088083000c806300103c0002af600095887c0903a64e8004202c17fff34082002080a30004808300088063000c3c0002af6000d10c7c0903a64e8004202c17001740820100973bfffc971bfffc947bfffc80030004941bfffc80030008941bfffc386000153c0002aa600041ec7c0803a64e800021947bfffc807b00083b1b00143c0002af6000f2107c0803a64e8000212c0300014082000c3ac000014800004880030004941bfffc806300003b1b00183c0002af6000f3e07c0803a64e800021807b00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffffb0809b00003c6002af6063fb743c0002af6000fd307c0803a64e8000213aa30000386000013b150000801800007c0803a64e800021829b000490740000827b001082530000823200008071000c821b00147e0803a63b7b00184e8000202c17ffe54082016c82d8000082b60000398000053bbdffe87c1df04040a00010800d001c7c0803a64e8000213a9d0004919d00003e6002af6273ff38927400008256fffc925400109074000c8238fff492340008821500089214000481f5000481cf0014973bfffc971bfffc947bfffc80030004941bfffc38740000830e0000801800007c0803a64e800021947bfffc815b00042c0a00014082000c3920000148000058810a000080fb000c800a0004941bfffc80a80004809b000c8067fff43b0700003c0002af6000bae47c0803a64e800021815b00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffffa0811b00042c0800014082000c38e000014800004880080004941bfffc806800003b1b00143c0002b06000002c7c0803a64e800021811b00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffffb080db000c80a60000808500008064000c833b00107f2803a63b7b00144e8000202c1700074082002438c0000180a300088083000c806300043c0002b0600002a87c0903a64e8004202c1700014082002438c0000380a300088083000c806300043c0002b0600002a87c0903a64e8004202c17fff94082049c82d8000082b6000082950004827400108258fffc398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a3d0004919d0000821200309211000481f2002091f10000398000053bbdffe87c1df04040a00010800d001c7c0803a64e80002139dd0004919d00003d4002b0614a1cc8914e00008136fffc912e0010908e000c8118fff4910e000880f5000890ee000438c30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000091c3000880a6000890a3000492230000973bfffc971bfffc94dbfffc80060004941bfffc94bbfffc83130058801800007c0803a64e800021809b000c832400008319000082f8000482d70014947bfffc807b00048316000c801800007c0803a64e80002182a300003c80000060844668387500003f00000063184368801800007c0803a64e800021280300014182000c3a800001480000e4829b00108274000082530000823200048211001081f4fffc398000053bbdffe87c1df04040a00010800d001c7c0803a64e80002139dd0004919d00003d4002b0614a1d28914e00008133fffc912e0010811b000c910e000c80f4fff490ee000880d2000890ce0004398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d000091c3000c92a3000880af003090a300043c8002ab608487e89083000083100050801800007c0803a64e800021398000013bbdfff87c1df04040a00010800d001c7c0803a64e8000213a9d0004919d000090740000807b0010832300008319000082f8000482d70010969bfffc80160018941bfffc809b0010807900043c0002a1600074a87c0803a64e8000213aa30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000829b00049283000892a30004827b000892630000831b0000801800007c0803a64e800021825b0018823200008211000081f0000481cf0008947bfffc830e0078801800007c0803a64e8000212c03000140820080815b001c812a0000947bfffc8009fffc941bfffc800afff4941bfffc3c8002b060841d88807b001c3c0002a1600074a87c0803a64e800021811b002880e8000080c70000947bfffc80a6000880db00043885000080bb002838640000388000033b230000807b00083b190000801800007c0803a64e80002148000010947bfffc947bfffc947bfffc815b00082c0a000140820008480000b0813b00288109fffc80e9000080c7000080a6000480850008800a0000941bfffc800a0004941bfffc80080008941bfffc807b000883040098801800007c0803a64e8000213b230000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000831b00089303000493230000831b0000801800007c0803a64e800021815b00043b7b000c800d00187c1b004040a00010800d00207c0803a64e8000214bffff4c813b00288109fffc398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080fb000c90e3000480db002090c300008308000c801800007c0803a64e80002180bb002880850000806400008063000c833b002c7f2803a63b7b00304e8000202c170013408200cc82d8000082b60000829500048274000c82540008973bfffc971bfffc8013001c941bfffc80120088941bfffc806300043c0002b060001da47c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a3d0004919d00003a0000019211000490710000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00009223000881fb000091e300043dc002aa61ce321891c30000831b0004833b000c801800007c0903a67f2803a63b7b00104e8004202c17fffb40820108973bfffc971bfffc947bfffc80030004941bfffc806300084bfff04d82db0008947bfffc80bb0004809b00088076fff43b1600003c0002af6000bae47c0803a64e80002182bb000c8295000082740000825300048232000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a1d0004919d00003de002b061ef20a091f0000081d4fff891d00008815b000891500004398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d0000920300108135fff49123000c8114fffc9103000880fb000490e3000480db000090c3000083110000801800007c0803a64e800021807b000480bb00107ca803a63b7b00144e8000202c17000d40820018806300043c0002b060001da47c0903a64e8004202c17ffeb4082034882c3000482b8000082950000398000053bbdffe87c1df04040a00010800d001c7c0803a64e8000213a7d0004919d00003e4002b0625220f0925300008235fffc923300109073000c821600049213000881f4000891f3000481d40004814e0014973bfffc971bfffc947bfffc80160000941bfffc961bfffc80160008941bfffc8016000c941bfffc80160010941bfffc38730000830a0000801800007c0803a64e800021813b001881090004398000025500f80140a20010800d00347c0803a64e8000217ce8661541a3fff0947bfffc94fbfffc80c3000494dbfffc80bb001494bbfffc38c7000038a0000138800001807b001c3b0900003c0002af60009f007c0803a64e800021809b0020832400008319000082f8000482d7002082bb0004947bfffc807500088316000c801800007c0803a64e800021829b00248274fffc3a430000807300183b120000801800007c0803a64e800021823b00248211fffc3980000d3bbdffc87c1df04040a00010800d001c7c0803a64e80002139fd0004919d000081d0003091cf00308150002c914f002c81300028912f002881100024910f002480f0002090ef002080d0001c90cf001c906f001880b0001490af001480900010908f00108070000c906f000c83300008932f000883100004930f000482f0000092ef000082d1000896dbfffc82bb000896bbfffc80db002038af0000809b0028807b0024831100003c0002af6000675c7c0803a64e800021829b000c90740000827b0010825b000092530000823b00248211000081f0000081cf0004814e000c398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021393d0004919d00003d0002b0610821d09109000080f0fffc90e9001080db002090c9000c80bb001890a90008808f0008908900043b230000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000091230008831100089303000492430000973bfffc830a0010801800007c0803a64e80002182fb002882d7000082b60000829500048274000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000825b000092430004823b00049223000083130020833b002c801800007c0903a67f2803a63b7b00304e8004202c17001d4082001c82d8000082b60000829500048274000c807300684e8000202c170015408205dc82d8000082b600008295000482740014973bfffc971bfffc947bfffc80030004941bfffc80030008941bfffc8003000c941bfffc80030010941bfffc3860000183130004801800007c0803a64e800021825b0014823200008211000081f0000481cf0014947bfffc38600001830e0004801800007c0803a64e800021815b0018812a00008109000080e8000480c70014947bfffc3860000183060004801800007c0803a64e80002180bb00142805000141820010833b001c809900084800002c809b001c83240008398000025720f80140a20010800d00347c0803a64e8000217c99661541a3fff0831b001c82f8000082d7000082b6000482950020827b0004947bfffc949bfffc807300088314000c801800007c0803a64e800021825b00248232fffc3a030000807100183b100000801800007c0803a64e80002181fb002481cf0000814e0000812a00048109002080fb0008947bfffc806700088308000c801800007c0803a64e80002180db002880a6fffc38830000806500203b040000801800007c0803a64e800021833b00288319fffc82f9000082d7000082b6000482950020827b0008947bfffc80180010941bfffc807300088314000c801800007c0803a64e800021825b00308232fffc3a030000807100303b100000801800007c0803a64e80002181fb003081cffffc815b0018813b0014811b00103980000d3bbdffc87c1df04040a00010800d001c7c0803a64e80002138fd0004919d00009067003080ce002c90c7002c80ae002890a700288088000490870024833b000493270020830e001c9307001c82fb000892e7001882ce001492c7001482bb000092a70010828900049287000c826a000492670008824e0004924700043e2002b06231223092270000820f000082300000947bfffc96dbfffc94bbfffc94dbfffc94fbfffc82fb00348331000c2c1700014082000c3b1900004800007082d7000082bb004480170004941bfffc829b0024969bfffc82750004967bfffc80d6000480bb000c8095fff880760000831500003c0002af6000675c7c0803a64e8000213b23000082fb00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffff8882fb0044398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002b062b522a092b60000829b00309296000c827b002c927600088257fffc92560004398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a3d0004919d00003e0002b0621023a49211000081fb002891f1000892510004398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002139dd0004919d00003d4002b0614a2428914e0000813b0024912e0008924e00043980000d3bbdffc87c1df04040a00010800d001c7c0803a64e800021391d0004919d000080fb001090e8003080db000490c8002c80bb000890a8002891c80024809b0018908800208072001c9068001c833b001c93280018831b000c9308001482bb001492a800109228000c92c80008829200049288000482720000926800008237000082110000951bfffc81fb003c81d0000c2c0f00014082000c394e000048000070812f0000811b0048800f0004941bfffc80fb002894fbfffc80c8000494dbfffc80c9000480bb000c8088fff880690000830800003c0002af6000675c7c0803a64e80002139c3000081fb00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffff88813b00402809000141820008480000b8811b004880e8000080c7000080a600048085000c398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d00003f2002b0633924ac932300008307fffc9303001082fb004492e3000c82c8fff492c3000882a6000892a300043a830000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092830008826800089263000491430000955bfffc83040010801800007c0803a64e80002148000008955bfffc807b0000811b00507d0803a63b7b00544e8000202c17fff5408200b482d8000082b60000973bfffc971bfffc8018fffc941bfffc80180008941bfffc828300048275000c2c1400014082001838730000825b000c7e4803a63b7b00104e80002082540000823b000880140004941bfffc821b0004961bfffc81f1000495fbfffc80d2000480bb00108091fff880720000831100003c0002af6000675c7c0803a64e8000213a630000829b00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffff7c2c17000b4082010482d8000082b60000398000053bbdffe87c1df04040a00010800d001c7c0803a64e8000213a9d0004919d00003e6002b06273250c927400008256fffc925400109074000c8238fff492340008821500089214000481f5000481cf0014973bfffc971bfffc947bfffc80030004941bfffc38740000830e0000801800007c0803a64e800021947bfffc815b00042c0a00014082000c3920000148000048800a0004941bfffc806a00003b1b00143c0002b0600025bc7c0803a64e800021815b00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffffb0811b000c80e8000080c700008066000c80bb00107ca803a63b7b00144e8000202c17001940820140973bfffc971bfffc947bfffc38830000806300044bffe41d82db000482b6000082950000827400048253000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a3d0004919d00003e0002b062102dc49211000081f5fff891f1000881db000091d1000439430000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d0000922300108136fff49123000c8115fffc910300089143000480f2006c90e3000083120000801800007c0803a64e80002180db000480a6000080850000806400048323000c83030008398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00003ae0000192e3000c3ac0000192c300083aa0000192a30004829800909283000083190018833b0008801800007c0903a67f2803a63b7b000c4e8004202c17000f40820170973bfffc971bfffc947bfffc80030008941bfffc38830000806300044bffe2d182db000882b6000082950000827400048253000c947bfffc80120000941bfffc807b00083b1600003c0002b060001da47c0803a64e800021823b00108211000081f0000081cf0004814e000c39230000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000811b00049103000480ea006c90e30000953bfffc830a0020801800007c0803a64e80002180db001480a60000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021389d0004919d00003f2002b063392e14932400008305fff89304000882fb001092e400043ac30000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d00009083001082a6fff492a3000c8285fffc9283000892c30004827b000092630000831b0004801800007c0803a64e800021807b0008825b00187e4803a63b7b001c4e8000202c17001f40820108973bfffc971bfffc947bfffc80030004941bfffc38830000806300084bffe15d82db000882b6000082950000827400048253000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a3d0004919d00003e0002b062102e649211000081f5fff891f1000881db000491d1000439430000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d0000922300108136fff49123000c8115fffc9103000880f2005490e300049143000083120000801800007c0803a64e800021809b0004807b0000831b00084bffe0a180db000880a6000080850000806400048323000c80790068831b000c7f0803a63b7b00104e8000202c17fffd408200f8973bfffc971bfffc947bfffc80030004941bfffc806300083c0002b060001da47c0803a64e800021947bfffc809b0008807b0004831b000c4bffe03582db000c82b6000082950000827400048253000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a3d0004919d00003e0002b062102eb49211000081f5fff891f1000881db000891d1000439430000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d0000922300108136fff49123000c8115fffc910300089143000480fb000090e3000083120004833b0010801800007c0903a67f2803a63b7b00144e8004202c17ffff408201b4973bfffc971bfffc947bfffc80030008941bfffc38830000806300044bffdf5582db000882b6000082950000827400048253000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a3d0004919d00003e0002b062102f049211000081f5fff891f1000881db000491d1000439430000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d0000922300108136fff49123000c8115fffc9103000880f2005490e300049143000083120000801800007c0803a64e800021809b0004807b0000831b00084bffde9980db000880a6000080850000832400048319000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002b062d62f5492d7000082a5fff892b70008829b0004929700043a630000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d000092e300108246fff49243000c8225fffc9223000882180054920300049263000083180000801800007c0803a64e80002181fb000881cf0000814e0000812a00048109000c8068005480fb000c7ce803a63b7b00104e8000202c17ffe9408201b4973bfffc971bfffc947bfffc80030008941bfffc38830000806300044bffdd9d82db000882b6000082950000827400048253000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a3d0004919d00003e0002b062102fa49211000081f5fff891f1000881db000491d1000439430000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d0000922300108136fff49123000c8115fffc9103000880f2005490e300049143000083120000801800007c0803a64e800021809b0004807b0000831b00084bffdce180db000880a6000080850000832400048319000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002b062d62ff492d7000082a5fff892b70008829b0004929700043a630000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d000092e300108246fff49243000c8225fffc9223000882180054920300049263000083180000801800007c0803a64e80002181fb000881cf0000814e0000812a00048109000c8068005480fb000c7ce803a63b7b00104e8000202c170009408200bc973bfffc971bfffc80030004941bfffc82c300082c160001408200084800007c82bb00048295fffc398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000827b000092630004825600009243000080160004941bfffc83140000801800007c0803a64e80002182db00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffff8082bb000482950000827400008073000c825b00087e4803a63b7b000c4e8000202c17ffe14082006c973bfffc82d8000082b600008295000482740020398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a5d0004919d00003e2002b062313044923200083e0002a06210c7ac9212000481f3000491f2000038720000800d00287c0803a64e8000212c17ffef4082006c973bfffc82d8000082b600008295000482740020398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a5d0004919d00003e2002b062313068923200083e0002a06210c7ac9212000481f3000491f2000038720000800d00287c0803a64e800021973bfffc82d8000082b600008295000482740020398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a5d0004919d00003e2002b062313094923200083e0002a06210c7ac9212000481f3000491f2000038720000800d00287c0803a64e800021|@6371,1048575|160,3,@6170 260,3,@6172 320,3,@6173 540,3,@6175 792,3,@6177 1024,3,@6178 1232,3,@6179 1420,3,@6180 1516,3,@6181 1620,3,@6183 1836,3,@6184 1872,3,@6243 1928,3,@4053 1956,3,@6280 2004,3,@6282 2060,3,@6288 2068,3,@6296 2200,3,@6300 2344,3,@6217 2432,3,@6302 2540,3,@6304 2580,3,@6304 2712,3,@6333 2896,3,I48 2908,3,I24 3004,3,@6334 3100,3,@4786 3208,3,@511 3376,3,@6335 3388,3,@511 3836,3,@6336 3948,3,@3886 4048,3,@6217 4120,3,@6341 4268,3,@6336 4340,3,@6342 4540,3,@6194 4816,3,@6168 4908,3,@6344 5804,3,@6345 5920,3,@6168 6016,3,@6348 6088,3,@6350 6148,3,@6351 6388,3,@6168 6516,3,@6352 6792,3,@6168 6900,3,@6353 7028,3,@6354 7200,3,@6360 7516,3,@6336 7672,3,@6361 7904,3,@6362 8108,3,@6336 8200,3,@6363 8424,3,@6364 8612,3,@6365 8864,3,@6366 9052,3,@6367 9464,3,@6368 9476,3,@227 9576,3,@6369 9588,3,@227 9680,3,@6370 9692,3,@227 6170:C2,68|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc80d8000880b8000c388000038078001083180004801800007c0903a64e800420|@6171,1048575| 6171:S36|50415253455f5452454528292e7061737332283629676976654572726f72283329283129 6172:S20|56616c7565206f7220636f6e7374727563746f72 6173:C2,668|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000082d7000082b600048295000882740054973bfffc971bfffc947bfffc949bfffc3864000083130008801800007c0803a64e800021825b0008823200008211000081f0000481cf0008814e005c947bfffc80630004830a0000801800007c0803a64e80002128030001418200d4813b0000811b000c80e8000080c7000080a6000480850008806400288009000c941bfffc83230000807b00003b190000801800007c0803a64e800021280300014182002c831b001082f8000082d7000082b600048295000c8074006c827b00147e6803a63b7b00184e800020831b001082f8000082d7000082b600048295000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008274006c92630004825b00009243000083140020833b0014801800007c0903a67f2803a63b7b00184e800420813b0000811b000c80e8000080c7000080a60004808500088064004c80090008941bfffc83230000807b00003b190000801800007c0803a64e8000212803000141820094831b001082f8000082d7000082b60004829500088274004c807b000083130008801800007c0803a64e800021825b0010823200008211000081f0000481cf0010398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003940000191430004813b000891230000830e0004833b0014801800007c0903a67f2803a63b7b00184e800420831b000482fb001082d7000082b60000829500048274000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000825b000c924300048238000c922300008313000c833b0014801800007c0903a67f2803a63b7b00184e800420|@6174,1048575| 6174:S51|50415253455f5452454528292e706173733228362961737369676e56616c756573283629696e7374616e636554797065283229 6175:C2,52|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000218098000483180008801800007c0903a64e800420|@6176,1048575| 6176:S36|50415253455f5452454528292e7061737332283629666f756e644e656172283129283129 6177:C2,52|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000218098000483180008801800007c0903a64e800420|@6176,1048575| 6178:C2,52|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000218098000483180008801800007c0903a64e800420|@6176,1048575| 6179:C2,52|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000218098000483180008801800007c0903a64e800420|@6176,1048575| 6180:C2,176|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e800020973bfffc971bfffc80030004941bfffc80980000806300008318fffc3c0002af600067d07c0803a64e800021947bfffc807b0004831b00084bffff99398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b0000931900003879000082fb000c7ee803a63b7b00104e800020|@234,1048575|76,3,@6169 6181:C2,68|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc80d8000880b8000c388000038078001083180004801800007c0903a64e800420|@6182,1048575| 6182:S56|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c7565732832296d7367466e283129 6183:C2,268|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e800020947bfffc947bfffc82e30000973bfffc971bfffc80030004941bfffc80170000941bfffc8098fffc80770004831800003c0002af600067d07c0803a64e8000213adb001082bb000092b600003a9b001090740004398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a7d0004919d0000825b001092530000823b001492330004967bfffc807b0008831b000c4bffff3d398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a1d0004919d00009070000481fb000091f000003870000081db00107dc803a63b7b001c4e800020|@234,1048575|96,3,@6169 6184:C2,664|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f800043980000256e0f80140a20010800d00347c0803a64e8000217ed7661541a3fff082b80000829500003a630000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003e4002af6252983c92430000823400049223000892c30004973bfffc971bfffc967bfffc949bfffc94bbfffc94dbfffc96dbfffc83050000801800007c0803a64e800021821b000c81fb001481cf0000814e0000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00003d2002af6129991091230000810ffffc9103000c80fb000090e3000880ca000490c3000483100000801800007c0803a64e80002180bb00148085000080640000832300048319001482e30008398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d00003ec002af62d69a8492c3000082a4fffc92a300108285fff89283000c8265fff49263000892e3000483180000801800007c0803a64e800021825b0014823200008211000081f0000481cf0014947bfffc38600001830e0004801800007c0803a64e800021947bfffc809b000c386000013b1b00203c0002af60009b807c0803a64e800021947bfffc38a30000809b0010386000013b1b00243c0002af6000bf247c0803a64e800021809b0000807b00103b1b00243c0002af6000c5407c0803a64e800021815b0008813b0020398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003d0002af6108d0189103000080e9fffc90e3000880db001c90c30004830a0000801800007c0803a64e80002180bb002080850000806400008063000c833b00247f2803a63b7b00284e800020|@6242,1048575|116,3,@6185 236,3,@6187 348,3,@6189 464,3,@6191 500,3,@6227 528,3,@6232 588,3,@6241 6185:C2,112|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000882d7000c82a30004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000829800049283000492a3000083160040801800007c0903a67f2803a64e800420|@6186,1048575| 6186:S61|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c4465636c61726174696f6e283429552d283129 6187:C2,264|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000c973bfffc971bfffc80030004941bfffc806300008317002c801800007c0803a64e800021706b00014082006082db000482b600048295000c82630000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000825b000092430004926300008314003c833b0008801800007c0903a67f2803a63b7b000c4e80042082db000482b600048295000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008276000892630004825b00009243000083140040833b0008801800007c0903a67f2803a63b7b000c4e800420|@6188,1048575| 6188:S69|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c4465636c61726174696f6e2834293c7061747465726e3e2d283129 6189:C2,148|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc80180010941bfffc8018000c941bfffc80180008941bfffc3c8002ab60846f303c0002a1600074a87c0803a64e800021833b000c831b0010907b001080db000080bb000438800003807b00083af80000831900043b370000801800007c0903a67f2803a63b7b00104e800420|@6190,1048575|64,3,@4778 72,3,@511 6190:S66|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c4465636c61726174696f6e2834296e6577456e762d283129 6191:C2,600|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0400014082000c386000014e80002082e400002c1700014082001080840004386000034bffffc43d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213add0004919d00003aa0000392b60000398000053bbdffe87c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003e8002af62949df49295000092d500108298ffe49295000c907500088278ffe092750004973bfffc971bfffc947bfffc80170000941bfffc80170008941bfffc80040004941bfffc96dbfffc96bbfffc825b0010965bfffc80d8ffe838a0000138830000807b00108318fffc3c0002af60009f007c0803a64e800021823b000082110000281000014182009881fb001481cffffc814e00042c0a000341820078812e00008109000080e8000480c7001c947bfffc8066000083060010801800007c0803a64e80002180bb00188085fffc832400008319000082f8000482d70000947bfffc8079fffc83160008801800007c0803a64e800021831b0000801800007c0803a64e800021280300014182005c4800001c947bfffc947bfffc4800004c947bfffc947bfffc4800004082bb001c8295fffc82740000825300003e2002af6231bea4963bfffc80db001480bb0018388000018073fffc83120008801800007c0803a64e800021809b000c807b0018831b001c4bfffdf1398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002139fd0004919d0000906f000481db000491cf0000386f0000815b00207d4803a63b7b00244e800020|@6226,1048575|156,3,@6192 264,3,@6194 472,3,@6225 6192:C2,148|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f800103ac0000192d7000082b8000c973bfffc971bfffc947bfffc83150004801800007c0803a64e800021829b000482740008281300014182002882540004807b000083120004833b0008801800007c0903a67f2803a63b7b000c4e80042038600001825b00087e4803a63b7b000c4e800020|@6193,1048575| 6193:S81|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c4465636c61726174696f6e2834296d617050726f63657373283229656e74657256616c73283129 6194:C2,4220|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182fb000082d700002c16fff1408205f082b80000829500008274000482530014973bfffc971bfffc947bfffc949bfffc94bbfffc94dbfffc80170004941bfffc80170008941bfffc8017000c941bfffc807b00088312000c801800007c0803a64e800021823b001c8211000081f0000081cf0004814e001c947bfffc806a0000830a0010801800007c0803a64e800021813b00208109000080e8000080c7000480a60000947bfffc8068fffc83050008801800007c0803a64e800021831b0000801800007c0803a64e800021280300014082002c809b001c2804000141820020833b00248319000082f8000082d7000482b600088075009448000164809b0004806400003c800000608446683f00000063184368801800007c0803a64e800021280300014182004c833b00248319fffc807b001083180018801800007c0803a64e80002182fb002482d7000082b600008295000482740008706b00014082000c80630000480000f880730094480000f0833b00248319000082f8000082d7000482b600108299fffc398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a7d0004919d000082540030925300048234001892330000398000053bbdffe87c1df04040a00010800d001c7c0803a64e8000213a1d0004919d00003de002af61efaf9891f0000081d8fffc91d00010815b002c9150000c813b0020913000088117000891100004398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00009203000c80fb001090e30008926300043cc002aa60c6271890c3000083150054801800007c0803a64e80002180bb002480850000832400008319000482f80008947bfffc83170080801800007c0803a64e800021280300014182018882bb001c281500014182003c829b002882740000825300003e2002af6231aff8963bfffc80db002880bb0034388000038073fffc83120008801800007c0803a64e800021829b0010827b000092740000825b0028823200008211000081f0000481cf0008814e005438730000830a0008801800007c0803a64e800021813b00288109000080e8000080c7000480a6000880850058947bfffc80030004941bfffc807b000083040000801800007c0803a64e8000212803000141820034833b00308319000082f8000082d7000482b6000882950058807b000083140008801800007c0803a64e80002148000034807b0004833b00308319000082f8000082d7000482b60008829500288063000c83140000801800007c0803a64e80002128030001418200084800003c827b003082530000823200003e0002af6210b030961bfffc80db003080bb003c388000038072fffc83110008801800007c0803a64e800021809b000838600001831b00303c0002af60008e947c0803a64e8000213ac30000480001d482db002882b600008295000082740004825300108233000c398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00003a0000019203000c39e0000191e3000839c0000191c30004815b00189143000080120008941bfffc83110018801800007c0803a64e80002139230000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000091230004811b001891030000831b0000801800007c0803a64e80002180fb002c80c7000080a6000080850004832400143b030000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000082fb002892e3000882c6fffc92c3000482bb001892a30000971bfffc83190008801800007c0803a64e800021829b0030827400003a400001965bfffc80db003080b3fffc8094fff8807b00203b1300003c0002af6000b0647c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000823b000092230004821b001c92030000831b003c801800007c0803a64e80002181fb001881db000091cf0000815b0030812a00008109000080e8000480c70008386e00008306009c801800007c0803a64e8000213ac3000080bb001492c5000038760000809b00347c8803a63b7b00404e8000202c16ffed4082013482b800008295000082740004825300103a230000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003a0000039203000481f7000c91e30000973bfffc971bfffc963bfffc80170004941bfffc83120004801800007c0803a64e80002181db0008814e0000812a00008109000480e8000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002138dd0004919d00003ca002af60a5b32890a60000808afff890860008833b0010932600043b030000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d000090c3001082fb000492e3000c82cafffc92c3000882a7006092a300049303000083070004801800007c0803a64e800021829b000090740000827b000c7e6803a63b7b00184e8000202c1600034082038482b70004827500002c13fff14082022082580000823200008211000481f0001081d8fffc398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021395d0004919d0000812e0030912a0004810e0018910a0000398000053bbdffe87c1df04040a00010800d001c7c0803a64e80002138fd0004919d00003e8002af6294b378928700008292fffc9287001092e7000c9067000882d1000892c70004947bfffc398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d000090e3000c80f5000490e30008914300043d4002aa614a271891430000973bfffc971bfffc949bfffc94bbfffc94dbfffc80170008941bfffc94fbfffc80150008941bfffc830f0054801800007c0803a64e800021813b00188109000080e8000080c7000480a60008947bfffc83050080801800007c0803a64e8000212803000141820034809b0004807b0000906400003883000038600001831b001c3c0002af60008e947c0803a64e8000213a83000048000124809b001c80640000832300008319000482f80008807b000083170084801800007c0803a64e800021280300014182000c3ac000014800006882db001c82b600008015fffc941bfffc3c8002af6084b3d8807b000c3c0002a1600074a87c0803a64e800021829b00208274000082530000947bfffc80db002c80bb003038800003807b000483120008801800007c0803a64e8000213ac300003b7b0004823b001c8211000081f00000828f000c480000748258000082320000947bfffc973bfffc971bfffc949bfffc94bbfffc94dbfffc80170008941bfffc3e0002af6210b3f8961bfffc38c3000038b70000388000038072fffc83110008801800007c0803a64e80002181fb001081cf0000814e0000828a000c947bfffc947bfffc947bfffc969bfffc813b0030953bfffc811b0014951bfffc80db001c80bb0020809b0024807b0030831b00284bfff5e180fb002080c7000080a60000808500048324000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213b1d0004919d00003ee002af62f7b43092f8000082c6fff892d8000882bb002c92b800043a830000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d000093030010827b00289263000c8246fffc9243000892830004823b00009223000083190004833b0024801800007c0903a67f2803a63b7b00344e8004202c16001b4082006882b8000082950000827400048253000c971bfffc947bfffc949bfffc94bbfffc94dbfffc973bfffc80120014941bfffc807700043b1b00183c0002af6000b4807c0803a64e800021831b0000833b0004801800007c0903a67f2803a63b7b00244e8004202c1600114082015c971bfffc947bfffc949bfffc94bbfffc94dbfffc82b8000082950000827400048253000c973bfffc80170004941bfffc80170008941bfffc80120024941bfffc8012002c941bfffc8077000c3b1b00243c0002af6000b5647c0803a64e800021823b00248211000081f00000398000053bbdffe87c1df04040a00010800d001c7c0803a64e80002139dd0004919d00003d4002af614ab700914e00008130fffc912e0010811b0028910e000c80fb002090ee000880cf000890ce000438a30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000091c3000490a30000831b0000801800007c0803a64e80002138830000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000833b000c9323000490830000831b0004801800007c0803a64e800021831b00089078000082fb00107ee803a63b7b00304e8000202c160013408200e0971bfffc947bfffc949bfffc94bbfffc94dbfffc82b8000082950000827400048253000c82330008973bfffc8012001c941bfffc80110088941bfffc807700043b1b001c3c0002af6000b7a87c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a1d0004919d000039e0000191f0000490700000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00009203000881db000091c300043d4002aa614a321891430000831b0004833b0008801800007c0903a67f2803a63b7b00284e8004202c16fffb40820110973bfffc971bfffc947bfffc80170004941bfffc82bb001496bbfffc82970008969bfffc4bfff249947bfffc80bb0004809b0014807b0008831b000c3c0002af6000bae47c0803a64e800021827b000c82530000823200008211000481f0000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002139dd0004919d00003d4002af614abdc4914e00008132fff8912e0008811b0014910e0004398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d000091c3001080fb000890e3000c80d2fffc90c3000880bb000490a30004809b000090830000830f0000801800007c0803a64e800021807b0004833b00107f2803a63b7b001c4e8000202c16ffef40820128973bfffc971bfffc947bfffc949bfffc94bbfffc94dbfffc80170008941bfffc82bb002096bbfffc82970004969bfffc38a000034bfff125947bfffc827b0024967bfffc825b0008965bfffc80db001080bb0014809b0018807b001c831b00204bfff0f9823b00188211000081f0000081cf0004814e000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021393d0004919d00003d0002af6108be149109000080f0fff890e9000880db002090c9000438a30000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d000091230010809b00149083000c8330fffc9323000890a30004831b000093030000830a0000801800007c0803a64e800021807b000082fb001c7ee803a63b7b00284e8000202c16001d4082002082b8000082950000827400048253000c807200683b7b00084e8000202c16ffe14082007482b8000082950000827400048253000c82330008398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00003a0000019203000c39e0000191e3000839c0000191c30004815100909143000083120018801800007c0903a67f2803a63b7b00084e80042082b80000829500008074000c3b7b00084e800020|@6224,1048575|292,3,I48 300,3,I24 512,3,@6195 608,3,@3814 708,3,@6196 992,3,@6197 1048,3,@6173 1396,3,@6198 1736,3,@6202 2008,3,@6203 2100,3,@3814 2240,3,@6173 2336,3,@6204 2348,3,@511 2480,3,@6205 2652,3,@6206 2844,3,@6207 2976,3,@6208 3040,3,@6210 3316,3,@6212 3428,3,@3886 3536,3,@6217 3608,3,@6222 3908,3,@6223 6195:C2,68|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc80d8000880b8000c388000038078001083180004801800007c0903a64e800420|@6171,1048575| 6196:S48|4964656e746966696572206265666f72652060617327206d757374206e6f74206265206120636f6e7374727563746f72 6197:S41|436f6e7374727563746f72206d757374206265206170706c69656420746f20736f6d657468696e672e 6198:C2,576|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000082d7000482b6001c973bfffc971bfffc947bfffc949bfffc94bbfffc94dbfffc8075000083150010801800007c0803a64e800021829b0010827400008253000482320000947bfffc807b000883110008801800007c0803a64e800021831b0000801800007c0803a64e800021280300014182001838600001821b00187e0803a63b7b00204e8000203c8002a06084c444807b00103f00000063184368801800007c0803a64e8000212803000141820008480000ec3c8002a66084ee58807b00103f00000063184368801800007c0803a64e8000212803000141820008480000c03c8002aa6084365c807b00103f00000063184368801800007c0803a64e8000212803000141820008480000943c8002aa60843298807b00103f00000063184368801800007c0803a64e8000212803000141820008480000683c8002aa60843800807b00103f00000063184368801800007c0803a64e80002128030001418200084800003c821b001c281000014182009c3c8002ab6084c2c4807b00103f00000063184368801800007c0803a64e800021280300014082000848000070809b00103c6002af6063b2c03c0002a1600074a87c0803a64e8000213c8002af6084b2e43c0002a1600074a87c0803a64e800021821b001481f00000907b001c80db000480bb000c38800003807b0008830f0008833b0018801800007c0903a67f2803a63b7b001c4e8004203860000181fb00187de803a63b7b00204e800020|@6201,1048575|172,3,@210 184,3,I24 216,3,@2440 228,3,I24 260,3,@3947 272,3,I24 304,3,@3895 316,3,I24 348,3,@3968 360,3,I24 404,3,@4839 416,3,I24 452,3,@6199 460,3,@511 476,3,@6200 484,3,@511 6199:S25|526562696e64696e67206f722073706563696679696e672022 6200:S12|2220697320696c6c6567616c 6201:S39|50415253455f5452454528292e7061737332283629636865636b466f724275696c74496e283529 6202:C2,52|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000218098000483180008801800007c0903a64e800420|@6176,1048575| 6203:C2,68|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc80d8000880b8000c388000038078001083180004801800007c0903a64e800420|@6171,1048575| 6204:S21|206973206e6f74206120636f6e7374727563746f72 6205:S46|436f6e7374727563746f7220696e2061207061747465726e20776173206e6f7420616e206964656e746966696572 6206:C2,52|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000218098000483180008801800007c0903a64e800420|@6176,1048575| 6207:C2,200|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e800020973bfffc971bfffc80030004941bfffc82f8000896fbfffc82c3000096dbfffc80d8fff080b8fff48098fff88078fffc831800003c0002af60009f007c0803a64e800021947bfffc807b0004831b00084bffff81398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d000090750004829b00009295000038750000827b000c7e6803a63b7b00104e800020|@234,1048575|100,3,@6194 6208:C2,308|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e80002082e3000082d8000082b6000082950000827400048253000c973bfffc971bfffc80170000941bfffc80030004941bfffc80120028941bfffc82380008963bfffc82170004961bfffc80d8fff080b8fff48098fff88078fffc831800003c0002af60009f007c0803a64e80002139e30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000091e3000481db000891c30000831b0000801800007c0803a64e800021947bfffc807b0008831b00104bffff15398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021395d0004919d0000906a0004813b0000912a0000386a0000811b00147d0803a63b7b00184e800020|@6209,1048575|140,3,@6194 6209:S65|50415253455f5452454528292e706173733228362961737369676e56616c75657328362970726f636573735061747465726e2836296d61704c6162656c73283129 6210:C2,68|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc80d8000880b8000c388000038078001083180004801800007c0903a64e800420|@6211,1048575| 6211:S64|50415253455f5452454528292e706173733228362961737369676e56616c75657328362970726f636573735061747465726e283629706174547970652d283129 6212:C2,204|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000082d7000082b60000829500048274000c825400083a230000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00003a0000019203000c39e0000191e3000839c0000191c300048152009091430000973bfffc971bfffc963bfffc83130018801800007c0803a64e800021947bfffc807b00043b1b000c3c0002af6000b8907c0803a64e800021807b0000813b000c7d2803a63b7b00104e800020|@6216,1048575|168,3,@6213 6213:C2,324|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e80002082f8fffc973bfffc971bfffc80030004941bfffc82d7000896dbfffc82a3000096bbfffc80d7fff080b7fff48097fff88077fffc831700003c0002af60009f007c0803a64e800021829b00048274fffc82530000823200008211000081f0000481cf000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021395d0004919d00003d2002af6129b9f0912a00008111fff8910a000880f3000490ea000438c30000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d00009143001080b3fffc90a3000c8091fffc908300088334fff49323000490c30000830e0000801800007c0803a64e800021807b0000831b0004833b00087f2803a63b7b000c4bfffec8|@6215,1048575|104,3,@6194 184,3,@6214 6214:C2,52|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000218098000483180008801800007c0903a64e800420|@6176,1048575| 6215:S79|50415253455f5452454528292e706173733228362961737369676e56616c75657328362970726f636573735061747465726e28362970726f636573734c6973742831296170706c794c697374283129 6216:S67|50415253455f5452454528292e706173733228362961737369676e56616c75657328362970726f636573735061747465726e28362970726f636573734c697374283129 6217:C2,208|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000082d7000082b600048295000c398000073bbdffe07c1df04040a00010800d001c7c0803a64e8000213a7d0004919d00003e4002af6252bbd09253000092b300188238fffc92330014909300108217fffc9213000c9073000881f6000891f3000439c30000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d000091c3000c920300089263000490a3000083140048801800007c0903a67f2803a64e800420|@6221,1048575|84,3,@6218 6218:C2,252|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8001882d7001082b80014398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a9d0004919d000082750030927400048255002092540000398000053bbdffe87c1df04040a00010800d001c7c0803a64e8000213a3d0004919d00003e0002af6210bce89211000081f8000c91f1001081d8001091d1000c8158000891510008813800049131000439030000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092230008910300049283000038f8000083160058801800007c0903a67f2803a64e800420|@6220,1048575|132,3,@6219 6219:C2,68|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc80d8000880b8000c388000038078001083180004801800007c0903a64e800420|@6171,1048575| 6220:S55|50415253455f5452454528292e706173733228362961737369676e56616c756573283629707441737369676e5479706573283329283129 6221:S52|50415253455f5452454528292e706173733228362961737369676e56616c756573283629707441737369676e5479706573283329 6222:C2,52|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000218098000483180008801800007c0903a64e800420|@6176,1048575| 6223:C2,52|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000218098000483180008801800007c0903a64e800420|@6176,1048575| 6224:S53|50415253455f5452454528292e706173733228362961737369676e56616c75657328362970726f636573735061747465726e283629 6225:S39|5061747465726e20646f6573206e6f74206465636c61726520616e79207661726961626c65732e 6226:S69|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c4465636c61726174696f6e2834296d617050726f63657373283229 6227:C2,1272|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c040001408200802c0500014082000c386000014e800020973bfffc80b8fffc808500008064000082e3000482d70020398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003e8002af6294c438929500083e8002a06294c7ac92950004829600049295000038750000800d00287c0803a64e80002182e400002c1700014082001080840004386000034bffff5070ab0001408203cc280300014182009082b8fffc829500008274000082530004823200208218ffe0973bfffc971bfffc947bfffc80170004941bfffc80170008941bfffc80040004941bfffc80050000941bfffc80050004941bfffc807000088311000c801800007c0803a64e80002181fb001881cffffc814efffc39230000806a00183b090000801800007c0803a64e8000213ac300004800004482d8fffc82b6fffc82d50018973bfffc971bfffc947bfffc80170004941bfffc80170008941bfffc80040004941bfffc80050000941bfffc80050004941bfffc829b00188274fffc8253fffc823300008211000081f0000481cf00208154fff096dbfffc80120020941bfffc80120010941bfffc80120030941bfffc80120014941bfffc80120028941bfffc806a0004830e000c801800007c0803a64e800021813b00308109fffc80e8000080c7000080a60004808500208329fff4947bfffc807900048304000c801800007c0803a64e800021831b003482f8fffc82d7fffc3aa300008076002c3b150000801800007c0803a64e800021831b0000801800007c0803a64e800021829b00348274fffc8253fffc3980000d3bbdffc87c1df04040a00010800d001c7c0803a64e8000213a3d0004919d0000821b000c921100309071002c81fb000491f1002881d2002491d10024815b0014915100208132001c9131001c811b00189111001880fb000890f1001480db001090d1001080b2000c90b1000c80920008909100088072000490710004833200009331000083130008971bfffc82f4ffe896fbfffc80db003038b10000809b0034807b0034831300003c0002af6000675c7c0803a64e80002182db003482b6fffc8295000082740000825300048232000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a1d0004919d00003de002af61efc46491f0000081d4fff891d000088155fff89150000439230000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d000092030010811b00289103000c80f4fffc90e300089123000480db002090c3000083110000801800007c0803a64e80002180bb0030280500014182008c809b002c832400002c19fffb4082002480840008800d00187c1b004040a00010800d00207c0803a64e8000214bffffd82819000d4082000c3860000348000008386000012803000140820040831b003482f8fffc82d7000082b600003e8002af6294c4b4969bfffc80db002c80b7fff8388000038076fffc83150008801800007c0803a64e80002180bb001c809b0024807b0030831b0034833b00387f2803a63b7b003c4bfffb80973bfffc82d8fffc82b60000829500008274000482530020398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a3d0004919d00003e0002af6210c438921100083de002a061efc7ac91f1000481d2000491d1000038710000800d00287c0803a64e800021|@6231,1048575|116,3,@6228 128,3,@227 792,3,@6168 868,3,@6229 1088,3,@6230 1224,3,@6228 1236,3,@227 6228:S35|636865636b54797065733a206261646c792d666f726d65642070617273652d74726565 6229:C2,52|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000218098000483180008801800007c0903a64e800420|@6176,1048575| 6230:S51|526563757273697665206465636c61726174696f6e206973206e6f74206f662074686520666f726d2060666e206d6174636827 6231:S69|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c4465636c61726174696f6e283429636865636b5479706573283329 6232:C2,656|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e80002082e300002c1700014082000c806300044bffffc8708b0001408201dc82d8fffc82b6000082950000827400048253000c973bfffc971bfffc80170008941bfffc80030004941bfffc80040000941bfffc80040004941bfffc80120008941bfffc8018ffe8941bfffc807700043c0002af6000c7ec7c0803a64e800021823b00188211fffc81f00000398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002139dd0004919d00003d4002af614acef0914e0000812ffff8912e00088110fff8910e000438e30000398000063bbdffe47c1df04040a00010800d001c7c0803a64e800021387d0004919d000091c3001480db001490c3001080affffc90a3000c90e30008809b000090830004833b000c93230000831b0004801800007c0803a64e800021831b001882f8fffc82d7000082b60000829500048274000c398000053bbdffe87c1df04040a00010800d001c7c0803a64e8000213a5d0004919d00003e2002af6231cf40923200008216fffc9212001081f7fff891f2000c81db001491d200088155000891520004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000924300088137000891230004811b000c9103000083130010801800007c0803a64e800021809b0008807b0010831b0018833b001c7f2803a63b7b00204bfffde8973bfffc82d8fffc82b60000829500008274000482530020398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a3d0004919d00003e0002af6210cfa0921100083de002a061efc7ac91f1000481d2000491d1000038710000800d00287c0803a64e800021|@6240,1048575|156,3,@6233 220,3,@6237 404,3,@6238 608,3,@6239 620,3,@227 6233:C2,1364|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e300002c17000d4082000c386000034e8000202c17fff14082000c386000034e8000202c1700134082012482c300042c1600014082000c386000034e80002082b8fffc8295000082740000825300048232001c973bfffc971bfffc96dbfffc8071000083110010801800007c0803a64e800021821b000481f0fffc81cf0000814e0000812a000481090000947bfffc806efffc83080008801800007c0803a64e800021831b0000801800007c0803a64e800021280300014082008080fb000438c000032c070001408200183866000080bb000c7ca803a63b7b00104e800020280600014182002080070004941bfffc80670000831b000c4bfffee938a300004800001038a0000180070004941bfffc38c5000080fb00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffff903860000180fb000c7ce803a63b7b00104e8000202c17fffb4082000c806300084bfffe902c17ffed4082000c386000034e8000202c17001d4082000c386000034e8000202c17001b4082011482d8fffc82b6000082950000827400048253001c973bfffc971bfffc80030004941bfffc8072000083120010801800007c0803a64e800021823b00048211fffc81f0000081cf0000814e0004812a0000947bfffc806ffffc83090008801800007c0803a64e800021831b0000801800007c0803a64e8000212803000140820080811b000438e000032c080001408200183867000080db000c7cc803a63b7b00104e800020280700014182002080080004941bfffc80680000831b000c4bfffda138c300004800001038c0000180080004941bfffc38e60000811b00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffff9038600001811b000c7d0803a63b7b00104e8000202c1700114082011882d8fffc82b6000082950000827400048253001c973bfffc971bfffc8003000c941bfffc8072000083120010801800007c0803a64e800021823b00048211fffc81f0000081cf0000814e0004812a0000947bfffc806ffffc83090008801800007c0803a64e800021831b0000801800007c0803a64e8000212803000140820084811b000438e000032c080001408200183867000080db000c7cc803a63b7b00104e80002080c80000280700014182002080080004941bfffc80660004831b000c4bfffc8538a300004800001038a0000180080004941bfffc38e50000811b00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffff8c38600001811b000c7d0803a63b7b00104e8000202c170003408200ec82d8fffc82b6000082950000827400048253001c973bfffc971bfffc80030004941bfffc80030008941bfffc8072000083120010801800007c0803a64e800021823b00088211fffc81f0000081cf0000814e0004812a0000947bfffc806ffffc83090008801800007c0803a64e800021831b0000801800007c0803a64e8000212803000140820050807b0008831b000c3c0002af6000cd5c7c0803a64e800021280300014182001c807b0004831b000c833b00107f2803a63b7b00144bfffb7438600001811b00107d0803a63b7b00144e80002038600001811b00107d0803a63b7b00144e8000202c17ffe74082008882d8fffc82b6000082950000827400048253001c973bfffc971bfffc8072000083120010801800007c0803a64e800021823b00008211fffc81f0000081cf0000814e0004812a0000947bfffc806ffffc83090008801800007c0803a64e800021831b0000801800007c0803a64e80002168630002811b00087d0803a63b7b000c4e800020386000014e800020|@6236,1048575|1128,3,@6234 6234:C2,208|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e300002c17fff14082009082c3000882b600008298fffc82740000825300008232000482110008973bfffc80030004941bfffc3875000083100080801800007c0803a64e80002128030001418200383c8002aa60843800807b00003f00000063184368801800007c0803a64e8000216863000281fb00047de803a63b7b00084e8000203860000181fb00047de803a63b7b00084e8000202c17fffb4082000c806300084bffff44386000014e800020|@6235,1048575|112,3,@3968 124,3,I24 6235:S78|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c4465636c61726174696f6e28342969734e6f6e526566436f6e7374727563746f72283129 6236:S71|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c4465636c61726174696f6e2834296e6f6e457870616e73697665283129 6237:C2,52|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000218098000483180008801800007c0903a64e800420|@6176,1048575| 6238:C2,68|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc80d8000880b8000c388000038078001083180004801800007c0903a64e800420|@6171,1048575| 6239:S33|616c6c6f7747656e3a206261646c792d666f726d65642070617273652d74726565 6240:S67|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c4465636c61726174696f6e283429616c6c6f7747656e283229 6241:C2,152|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f80008973bfffc971bfffc80030004941bfffc83170008801800007c0803a64e80002182db000482b6000482950000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a7d0004919d000092930004825b0000925300009275000038600001823b00087e2803a63b7b000c4e800020|@6186,1048575| 6242:S56|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c4465636c61726174696f6e283429 6243:C2,768|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f800043980000256e0f80140a20010800d00347c0803a64e8000217ed7661541a3fff082b80000829500003a630000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003e4002af6252d42892430000823400049223000892c30004973bfffc971bfffc967bfffc949bfffc94bbfffc96dbfffc83040000801800007c0803a64e800021821b000c81fb001081cf0000814e0000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00003d2002af6129d4fc91230000810ffffc9103000c80fb000090e3000880ca000490c3000483100000801800007c0803a64e80002180bb00108085000080640000398000053bbdffe87c1df04040a00010800d001c7c0803a64e8000213b3d0004919d00003f0002af6318d6709319000082e4fffc92f9001082c5fff892d9000c82a5fff492b90008828300089299000482630004825300143879000083120000801800007c0803a64e800021947bfffc823b00082c1100014082000c3a0000014800004880110004941bfffc807100003b1b001c3c0002af6000d7687c0803a64e800021823b00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffffb081fb00082c0f00014082000c39c0000148000048800f0004941bfffc806f00003b1b001c3c0002af6000dec07c0803a64e80002181fb00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffffb0815b0000813b00148109000080e800003980000a3bbdffd47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003cc002af60c6ef3c90c3000080bb000490a300248088fff890830020832700049323001c830900089303001882e9fff892e3001482c8fffc92c3001082a9fff492a3000c82870008928300088269fffc92630004830a0000801800007c0803a64e800021825b001482320000821100008070000c81fb00187de803a63b7b001c4e800020|@6279,1048575|116,3,@6244 232,3,@6246 332,3,@6248 444,3,@6250 532,3,@6259 636,3,@6276 6244:C2,112|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000882d7000c82a30004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000829800049283000492a3000083160040801800007c0903a67f2803a64e800420|@6245,1048575| 6245:S61|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737346756e4465636c61726174696f6e283329552d283129 6246:C2,264|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000c973bfffc971bfffc80030004941bfffc806300008317002c801800007c0803a64e800021706b00014082006082db000482b600048295000c82630000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000825b000092430004926300008314003c833b0008801800007c0903a67f2803a63b7b000c4e80042082db000482b600048295000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008276000892630004825b00009243000083140040833b0008801800007c0903a67f2803a63b7b000c4e800420|@6247,1048575| 6247:S69|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737346756e4465636c61726174696f6e2833293c7061747465726e3e2d283129 6248:C2,148|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc80180010941bfffc8018000c941bfffc80180008941bfffc3c8002ab60846f303c0002a1600074a87c0803a64e800021833b000c831b0010907b001080db000080bb000438800003807b00083af80000831900043b370000801800007c0903a67f2803a63b7b00104e800420|@6249,1048575|64,3,@4778 72,3,@511 6249:S64|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737346756e4465636c61726174696f6e2833296d7367466e283129 6250:C2,1356|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e3000472eb0001408204b882d70000973bfffc971bfffc80160000941bfffc80160008941bfffc80030008941bfffc8003000c941bfffc82bb000c807500002c03fffb4082002482b50008800d00187c1b004040a00010800d00207c0803a64e8000214bffffd82c0300034082002482b50004800d00187c1b004040a00010800d00207c0803a64e8000214bffffb02c03fff14082000c829500044800000c3e80000062944668969bfffc807b00103f0002af6318dcd0801800007c0803a64e800021833b00148319fffc82f8000082d7000082b60004829500108275000c3a430000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00003a2000019223000c3a0000019203000839e0000191e3000481d9ffec91c30000965bfffc80140008941bfffc83130018801800007c0803a64e80002139430000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000091430004813b000891230000831b0000801800007c0803a64e800021811b000c80fb000490e800002c0700014082004c80bb001c8085fffc8324000083190000947bfffc3ee002af62f7ddc096fbfffc80db001c80a4fff8388000038079fffc83180008801800007c0803a64e80002138c300004800000c38c00001947bfffc3c80000060844668807b000c3f00000063184368801800007c0803a64e800021280300014082029c80bb00208085fffc80640000832300008319000482f8001482c3fffc398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000082bb001892a3000892c30004829b000c9283000083170008801800007c0803a64e800021827b00208253fffc823200003a000001961bfffc80db001c80b1fffc8092fff8807b00103b1100003c0002af6000b0647c0803a64e80002181fb002081cffffc814efffc807b000c830a0018801800007c0803a64e800021813b00208109fffc80e8000080c7000080a6000480850008706b00014082000c8323000048000008832400948065001c973bfffc8303001082e3000038770000801800007c0803a64e80002182db002482b6fffc82950000827400008253000482320000947bfffc8074fffc83110008801800007c0803a64e800021831b0000801800007c0803a64e80002128030001418200e0821b002881f0fffc81cf0000814e0000812a000481090008807b000483080080801800007c0803a64e80002128030001418200ac80db002880a6fffc808500008004fffc941bfffc8005fff8941bfffc3c8002a760842974807b001c3c0002a760002f107c0803a64e800021388300003c6002af6063ddf83c0002a1600074a87c0803a64e8000213c8002af6084de0c3c0002a1600074a87c0803a64e800021833b00308319fffc82f8000082d70000947bfffc80db002c80bb000438800003807b000883160008801800007c0803a64e80002138e300004800001038e00001947bfffc947bfffc821b002481fb001091f0000081db0030814effe8398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000091e30004813b001c91230000830a0004833b0034801800007c0903a67f2803a63b7b00384e8004203860000180bb00247ca803a63b7b00284e800020973bfffc82d8fffc82b60000829500008274000482530020398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a3d0004919d00003e0002af6210de38921100083de002a061efc7ac91f1000481d2000491d1000038710000800d00287c0803a64e800021|@6258,1048575|192,3,I48 208,3,@6251 464,3,@6254 524,3,I48 536,3,I24 704,3,@6198 980,3,@2674 992,3,@2689 1012,3,@6255 1020,3,@511 1036,3,@6256 1044,3,@511 1308,3,@6257 1320,3,@227 6251:O1|@6252 6252:C2,128|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021830300002c18fffb4082000c806300084bffffd82c18000340820040973bfffc806300044bffffbd398000025460f80140a20010800d00347c0803a64e8000217c63661541a3fff0833b00007f2803a63b7b00044e800020386000014e800020|@6253,786433| 6253:S67|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737346756e4465636c61726174696f6e2833296765744172697479283129 6254:S46|436c617573616c2066756e6374696f6e20646f6573206e6f74206861766520616e7920706172616d65746572732e 6255:S9|5661726961626c6520 6256:S34|20616c7265616479206465636c61726564206173206120636f6e7374727563746f72 6257:S41|66696e644e616d65416e6450617474733a206261646c792d666f726d65642070617273652d74726565 6258:S75|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737346756e4465636c61726174696f6e28332966696e644e616d65416e645061747473283129 6259:C2,176|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e3000882d70000971bfffc80030010941bfffc80030000941bfffc8003000c941bfffc96dbfffc973bfffc82a300042c1500014082001838600001833b00007f2803a63b7b00184e80002080150004941bfffc807500003b1b00183c0002af6000df8c7c0803a64e80002182bb00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffffa4|@6275,1048575|124,3,@6260 6260:C2,1336|7f2802a66339000239600050800d00187d6bd8107c0b004040a00010800d00247c0803a64e80002182f8000082d7fffc82b6000082950000398000053bbdffe87c1df04040a00010800d001c7c0803a64e8000213a7d0004919d00003e4002af6252e4e0925300008255fffc92530010822300009233000c820300089213000881f4000891f3000481d40004814e0014973bfffc971bfffc963bfffc80030004941bfffc961bfffc38730000830a0000801800007c0803a64e800021813b000c8109000080e8ffec3980000254e0f80140a20010800d00347c0803a64e8000217cc7661541a3fff094dbfffc947bfffc80a9fff480850000947bfffc947bfffc38bb00003b240000809b0018387900003b1b00203c0002af6000e6287c0803a64e800021831b001c82db00042c1600014082001c82b800008295fffc827400008253000082f2000c480000d082b600042c1500014082000c82f60000480000b0829800008274fffc82530000823200008211000481f0000c8018fff8941bfffc800f0014941bfffc39c000012c1600014082000c386e000048000058398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021395d0004919d000091ca000481360000912a000039ca000082d60004800d00187c1b004040a00010800d00207c0803a64e8000214bffffa0831b0000801800007c0803a64e8000213ae300003b7b0004480000188018fff8941bfffc4800000c8018fff8941bfffc823b000092f10000821b002081f0000081cffffc814e0000812a00008109000480e8002080db000c806600088307000c801800007c0803a64e80002180bb0020808500008324fffc8319000082f8000082d7000482b600208284ffe8947bfffc807400088315000c801800007c0803a64e800021827b0024825300008232fffc8211fffc39e30000807000183b0f0000801800007c0803a64e800021831b0000801800007c0803a64e80002181db0024814e0000812afffc8109fffc80e9000080c7000080a6000480850020832afff4947bfffc80080020941bfffc80080010941bfffc80080030941bfffc80080014941bfffc80080028941bfffc807900048304000c801800007c0803a64e800021831b003c82f8000082d7fffc82b600008295000082740004825300208237fff8947bfffc807100048312000c801800007c0803a64e800021821b004081f0000081cffffc814efffc39230000806a002c3b090000801800007c0803a64e800021831b0000801800007c0803a64e800021811b004080e8000080c7fffc80a6fffc3980000d3bbdffc87c1df04040a00010800d001c7c0803a64e800021389d0004919d0000833b000c932400309064002c831b00049304002882e5002492e4002482db001492c4002082a5001c92a4001c829b001892840018827b000892640014825b0010924400108225000c9224000c820500089204000881e5000491e4000481c5000091c4000081460008955bfffc813b0034953bfffc80db003c38a40000809b0040807b00408327fffc831900003c0002af6000675c7c0803a64e800021831b004082f8fffc9077000082d8000082b6fffc8295000082740000825300048232000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a1d0004919d00003de002af61efee3c91f0000081d4fff891d00008815b003c9150000439230000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d000092030010811b00349103000c80f4fffc90e300089123000480db002490c3000083110000833b0044801800007c0903a67f2803a63b7b00484e800420|@6274,1048575|92,3,@6261 276,3,@6264 1120,3,@6168 1208,3,@6273 6261:C2,148|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc80180010941bfffc8018000c941bfffc80180008941bfffc3c8002af6084e5903c0002a1600074a87c0803a64e800021833b000c831b0010907b001080db000080bb000438800003807b00083af80000831900043b370000801800007c0903a67f2803a63b7b00104e800420|@6263,1048575|64,3,@6262 72,3,@511 6262:S39|2068617320616c7265616479206265656e20626f756e6420696e207468697320636c617573652e 6263:S94|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737346756e4465636c61726174696f6e28332970726f6365737346756e28312970726f63657373436c617573652831296d657373466e283129 6264:C2,1552|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e400002c17fffb40820144947bfffc947bfffc973bfffc971bfffc949bfffc94bbfffc80040004941bfffc38bb0014808400084bffffad80bb000c8085fff080bb000038640000809b0008833b000c8319fffc82f800008317fffc3c0002af6000bae47c0803a64e80002182db000c82b6fffc829500008274fffc82530000823200008211000481f0000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002139dd0004919d00003d4002af614aec54914e00008132fff8912e00088116fff8910e0004398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d000091c3001080f6fff090e3000c80d2fffc90c3000880bb000090a30004809b001490830000830f0000801800007c0803a64e800021807b0004833b001493230000831b0018930300043860000182fb00107ee803a63b7b001c4e8000202c170003408201a4398000025460f80140a20010800d00347c0803a64e8000217ecc1c1141a3fff0947bfffc947bfffc973bfffc971bfffc94bbfffc80040008941bfffc38bb001080840004387600004bfffe4582bb00088295ffe882740004967bfffc825b0004965bfffc80d5ffec38a00001388000018075fff08235fffc821100008310fffc3c0002af60009f007c0803a64e80002181fb000881cffffc814e0000812afffc8109000080e8000080c7000480a6000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021389d0004919d00003f2002af6339eca4932400008308fff89304000882effff892e400043ac30000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d00009083001082affff092a3000c8288fffc9283000892c30004827b00109263000096dbfffc83050004801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a5d0004919d0000823b001892320004821b00009212000081fb0008906f0000924f00043860000181db00107dc803a63b7b001c4e8000202c17fff14082023882d8fffc82b600008295fffc82740000825300008232000482110008973bfffc971bfffc947bfffc94bbfffc80040004941bfffc80040008941bfffc8076fff083100098801800007c0803a64e80002139e30000388f0000807b00043f00000063184368801800007c0803a64e8000212803000141820008480000bc81db0010814efffc812a00008109fffc80e8000095fbfffc8007fffc941bfffc800efff8941bfffc800efff0941bfffc809b00143c6002af6063ecf43c0002a1600074a87c0803a64e8000213c8002af6084ed243c0002a1600074a87c0803a64e800021809b000c3c0002a1600074a87c0803a64e80002180db002080a6fffc808500008324fffc8319000082f80000947bfffc80db000480bb000838800003807b000c83170008801800007c0803a64e8000213b7b001082db000c2c160001408200084800009082bb00108295fffc827400008253fffc823200008011fffc941bfffc8015fff8941bfffc8015fff0941bfffc3c8002af6084ed443c6002af6063ed6c3c0002a1600074a87c0803a64e800021821b001c81f0fffc81cf0000814efffc812a000081090000947bfffc80db000480bb000838800003807b000c83080008801800007c0803a64e8000213b7b000c80fb001080c7fffc80bb00008086fff090850000806600008323fffc8319000082f8000082d7000482b60008386400008315009c801800007c0803a64e800021829b0008907400003a6000019274000438600001825b00147e4803a63b7b00184e8000202c17fff74082003082d8fffc82b600008295fffc82740000825300008232000c922500003a00000192050004386000014e80002082d8fffc82b600008295fffc8274000082530000973bfffc971bfffc94bbfffc3e2002af6231ed9c963bfffc80d8fff038a40000388000038073fffc83120008801800007c0803a64e800021821b000481f0fffc81cf0000814efffc812a00008109000080fb000080c8000c90c7000038a0000190a7000438600001809b00087c8803a63b7b000c4e800020|@6272,1048575|124,3,@6217 208,3,@6265 500,3,@6194 584,3,@6266 888,3,I24 972,3,@6267 980,3,@511 996,3,@6268 1004,3,@511 1024,3,@511 1164,3,@6269 1172,3,@6270 1180,3,@511 1444,3,@6271 6265:C2,52|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000218098000483180008801800007c0903a64e800420|@6176,1048575| 6266:C2,52|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000218098000483180008801800007c0903a64e800420|@6176,1048575| 6267:S39|496e20636c617573616c2066756e6374696f6e206f6e6520636c6175736520646566696e657320 6268:S21|20616e6420616e6f7468657220646566696e657320 6269:S29|646966666572656e74206e756d62657273206f66207061747465726e73 6270:S39|436c617573616c2066756e6374696f6e20636f6e7461696e7320636c6175736573207769746820 6271:S43|5374617274206f6620636c617573616c2066756e6374696f6e206973206e6f742061207661726961626c65 6272:S98|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737346756e4465636c61726174696f6e28332970726f6365737346756e28312970726f63657373436c61757365283129646f5061747465726e73283329 6273:C2,52|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000218098000483180008801800007c0903a64e800420|@6176,1048575| 6274:S85|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737346756e4465636c61726174696f6e28332970726f6365737346756e28312970726f63657373436c61757365283129 6275:S69|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737346756e4465636c61726174696f6e28332970726f6365737346756e283129 6276:C2,456|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8001c82d70008973bfffc971bfffc947bfffc806300048316009c801800007c0803a64e80002182bb00048295001c8274000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a5d0004919d00003e2002af6231f12092320000821500209212000881f5001491f2000439c30000398000063bbdffe47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000924300148155000c91430010813500109123000c390000039103000880f5002490e3000491c3000095dbfffc83130008801800007c0803a64e80002180db000880a6001c8085000c398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d00003f2002af6339f17093230000830600109303001082e6001492e3000c82c6000c92c3000882a6000892a300043a830000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000928300088266001892630004825b00009243000083040010801800007c0803a64e800021823b000882110004807b000483100008833b000c801800007c0903a67f2803a63b7b00104e800420|@6245,1048575|120,3,@6277 296,3,@6278 6277:C2,52|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000218098000483180008801800007c0903a64e800420|@6176,1048575| 6278:C2,68|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc80d8000880b8000c388000038078001083180004801800007c0903a64e800420|@6171,1048575| 6279:S56|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737346756e4465636c61726174696f6e283329 6280:C2,340|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e80002082e3000082d8fffc82b600008295000082740004825300108236fffc398000053bbdffe87c1df04040a00010800d001c7c0803a64e8000213a1d0004919d00003de002af61eff38091f0000081d5fffc91d000108158fff89150000c8136fff491300008811400089110000480e30004398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00009203000c80d7000090c3000880b1003090a300043c8002ab608487e890830000973bfffc971bfffc94fbfffc83120050801800007c0803a64e800021947bfffc807b0004831b00084bfffef5398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b0000931900003879000082fb000c7ee803a63b7b00104e800020|@234,1048575|112,3,@6281 216,3,@4786 6281:C2,68|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc80d8000880b8000c388000038078001083180004801800007c0903a64e800420|@6171,1048575| 6282:C2,424|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8fffc82d7000082b600008295000482740008973bfffc971bfffc947bfffc83130004801800007c0803a64e800021280300014182001838600001825b00087e4803a63b7b000c4e800020825b00048232fffc8211000081f0000081cf0004814e0008807b0000830a000c801800007c0803a64e800021813b00048109fffc80e8000080c70000398000053bbdffe87c1df04040a00010800d001c7c0803a64e80002138bd0004919d00003c8002af6084f5a4908500008329ffec932500108308fffc9305000c82e6000492e5000882db000092c5000482b700188297000894bbfffc80150000941bfffc83140010801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a7d0004919d00003e4002af6252fa8092530000823b0004923300043a030000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000039e0000191e300089263000492030000831b0000833b0010801800007c0903a67f2803a63b7b00144e800420|@6287,1048575|204,3,@6283 320,3,@6285 6283:C2,1132|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000882d7002882b70008973bfffc971bfffc947bfffc949bfffc807500b483160000801800007c0803a64e8000213a830000807b00003b140000801800007c0803a64e8000212803000141820174827b0008825300088232002882120008807000b483110004801800007c0803a64e80002139e30000807b00003b0f0000801800007c0803a64e80002181db0008814e000c812e000881090008947bfffc800a000c941bfffc83080078801800007c0803a64e800021280300014082000c80fb0004480000b080fb001080c7000880a600108086000880050018941bfffc807b000883040064801800007c0803a64e800021833b0014398000013bbdfff87c1df04040a00010800d001c7c0803a64e8000213b1d0004919d000082f9000492f800003ac30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00009303000892c3000482bb000892a30000831b0000801800007c0803a64e80002138e300003b7b0004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000090e30004829b000c92830000831b0000833b0014801800007c0903a67f2803a63b7b00184e800420827b0008825300088232002882120008807000b083110000801800007c0803a64e80002139e30000807b00003b0f0000801800007c0803a64e800021280300014182011081db0008814e0008812a0010810a002880ea00088009000c941bfffc806700b083080004801800007c0803a64e80002138c30000807b00043b060000801800007c0803a64e80002180bb000c38830000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000832500049323000490830000831b0000801800007c0803a64e800021831b000c947bfffc38a30000809b000c807800103c0002aa600047807c0803a64e80002182fb001082d7000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082bb000092a30004829b000c9283000083160008833b0014801800007c0903a67f2803a63b7b00184e80042081db0008814e0008812a0028810a0008806800ac83090000801800007c0803a64e80002138e30000807b00003b070000801800007c0803a64e80002128030001418200e880db000880a60008808500088065002880040008941bfffc83230004806400ac3b190000801800007c0803a64e8000213b030000807b0004801800007c0803a64e80002182fb000c3ac30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082b7000492a3000492c30000831b0000801800007c0803a64e800021829b000c8274000c3a430000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092430004823b00089223000083130024833b0010801800007c0903a67f2803a63b7b00144e8004203860000180db000c7cc803a63b7b00104e800020|@6284,1048575|712,3,@4062 6284:S74|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c756573283229636f7079456e7472696573283129636f7079456e747279283329 6285:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@6286,1048575| 6286:S74|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c756573283229636f7079456e7472696573283129636f7079456e747279283129 6287:S62|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c756573283229636f7079456e7472696573283129 6288:O1|@6289 6289:C2,12|3c6002af6063fba44e800020|@6295,524289|0,3,@6290 6290:O1|@6291 6291:C2,72|7f2802a6633900023b030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003ee002af62f7fc1092e30000930300047f2803a64e800020|@6294,917505|48,3,@6292 6292:C2,68|7f2802a663390002398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213afd0004919d0000907700048078000490770000387700007f2803a64e800020|@6293,917505| 6293:S57|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c756573283229283129283129283129 6294:S54|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c756573283229283129283129 6295:S51|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c756573283229283129 6296:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc947bfffc386400003c0002ab60004e907c0803a64e8000213b230000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003f0002af6318fdd8930300009323000882fb000092e3000482db00047ec803a63b7b00084e800020|@6299,1048575|44,3,@4660 100,3,@6297 6297:C2,252|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc82f80008833700082819000140820014831b00047f0803a63b7b00084e800020947bfffc96fbfffc3860000183170004801800007c0803a64e800021831b000080030000941bfffc80030004941bfffc3860000183180000801800007c0803a64e80002182fb0010947bfffc807b000883170004801800007c0803a64e8000213ac30000807b00043b160000801800007c0803a64e8000213aa30000807b00103b150000801800007c0803a64e80002182fb00003b7b0014800d00187c1b004040a00010800d00207c0803a64e8000214bffff34|@6298,1048575| 6298:S32|486173685461626c652e68617368466f6c64283229666f6c6446283129283129 6299:S21|486173685461626c652e68617368466f6c64283229 6300:C2,148|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc80180010941bfffc8018000c941bfffc80180008941bfffc3c8002ab60846f303c0002a1600074a87c0803a64e800021833b000c831b0010907b001080db000080bb000438800003807b00083af80000831900043b370000801800007c0903a67f2803a63b7b00104e800420|@6301,1048575|64,3,@4778 72,3,@511 6301:S57|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c7565732832296d657373466e283129 6302:C2,536|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8fffc82d7000082b600008295000482740008973bfffc971bfffc80030000941bfffc80030004941bfffc80030008941bfffc8003000c941bfffc8013007c941bfffc809b0010807600043c0002a1600074a87c0803a64e800021825b00148232fffc82110000947bfffc386000018310fff4801800007c0803a64e80002139e30000398000063bbdffe47c1df04040a00010800d001c7c0803a64e800021387d0004919d000039c0000191c30014815b000c9143001091e3000c813b001091230008811b00089103000480fb000090e30000831b0004801800007c0803a64e80002180db001880a6fffc80850000832400008319000482f800143ac30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000082a5fff492a300088284fffc92830004827b00149263000096dbfffc83170008801800007c0803a64e800021825b001c8232fff0398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000821b00009203000481fb001891e3000083110004801800007c0803a64e80002181db001c814efffc812afffc398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000811b00009103000480fb001890e300008309000c833b0020801800007c0903a67f2803a63b7b00244e800420|@6303,1048575|108,3,@511 6303:S62|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c75657328322970726f6365737354797065283129 6304:C2,1716|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000082d70000398000053bbdffe87c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003e8002b062940978929500008297fffc929500108278fff89275000c8258fff49255000882360008923500048216000481f00014973bfffc971bfffc947bfffc949bfffc94bbfffc94dbfffc38750000830f0000801800007c0803a64e800021947bfffc807b00083b1b00183c0002b060000a6c7c0803a64e800021947bfffc81db00102c0e00014082000c3940000148000058812e0000811b0018800e0004941bfffc80a900048088fff88068fff43b0800003c0002af6000bae47c0803a64e80002181db00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffffa0813b00102c0900014082000c390000014800004880090004941bfffc806900003b1b00203c0002b060000dc87c0803a64e800021813b00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffffb080fb001880c7000080a60000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021389d0004919d00003c6002b060631040906400008326fffc932400108307fff89304000c82e7fff492e4000882c5000892c4000482a50004829500143864000083140000801800007c0803a64e800021947bfffc827b0010825b0004726b000140820068724b00014082005880130004941bfffc80120004941bfffc80920000807300003b1b00283c0002b06000112c7c0803a64e800021825b0000827b00043b7b0008800d00187c1b004040a00010800d00207c0803a64e8000214bffffa03a200001480000083a200001823b001c8211000081f0000081cf0004814e000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021393d0004919d00003d0002b061081afc9109000091c90004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000038e0000190e300089123000480db000490c30000830a0074801800007c0803a64e80002180bb000c2805000140820030807b0000833b001c8319fffc82e30000807800083b170000801800007c0803a64e8000213883000048000350809b001c80640000832300008319000482f800143860000183170004801800007c0803a64e80002182db001c398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003e8002b062941bb892950000907500088276fffc9275000482560000823200008211000481f0002096bbfffc80630008830f000c801800007c0803a64e80002181db0020814e0000812a00008109000480e8002080db0004947bfffc806600088307000c801800007c0803a64e80002180bb00248085fffc3b230000806400183b190000801800007c0803a64e800021831b0000801800007c0803a64e800021831b002482f8fffc3980000d3bbdffc87c1df04040a00010800d001c7c0803a64e8000213add0004919d000082b7003092b600308297002c9296002c8277002892760028825700249256002482370020923600208217001c9216001c9076001881f7001491f6001481d7001091d600108157000c9156000c813b000491360008811700049116000480f7000090f6000080d8000080a6000096dbfffc80180008941bfffc809b00288065000c2c0400014082000c3b2300004800006c8304000082fb002c80040004941bfffc82db000496dbfffc82b7000496bbfffc80d8000480bb00108097fff880780000831700003c0002af6000675c7c0803a64e800021809b00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffff8c831b00202c1800014082000c388000014800012482f8000082d7000482b60000829b002c82740000825300008232000482110008398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000039e0000191e3000492a3000080180004941bfffc96bbfffc80170010941bfffc83100074801800007c0803a64e80002181db0038814e0000812a00008109000480e80008807b000483070078801800007c0803a64e80002180db00009066000080bb003880850000806400008323000483190008398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003ae0000192e3000482db000492c300008318006c801800007c0803a64e800021831b00083b7b000c800d00187c1b004040a00010800d00207c0803a64e8000214bfffed43b7b001082fb001c82d7000082b600008075000c829b00207e8803a63b7b00244e800020|@6332,1048575|76,3,@6305 184,3,@6307 256,3,@6217 344,3,@6310 444,3,@6312 572,3,@6314 696,3,@6328 920,3,@6330 1320,3,@6168 6305:C2,148|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc80180010941bfffc8018000c941bfffc80180008941bfffc3c8002ab60846f303c0002a1600074a87c0803a64e800021833b000c831b0010907b001080db000080bb000438800003807b00083af80000831900043b370000801800007c0903a67f2803a63b7b00104e800420|@6306,1048575|64,3,@4778 72,3,@511 6306:S58|50415253455f5452454528292e706173733228362961737369676e56616c756573283629617373416273446174612834296d657373466e283129 6307:C2,168|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e800020973bfffc971bfffc80030004941bfffc806300003c0002b060000b307c0803a64e800021947bfffc807b0004831b00084bffffa1398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b0000931900003879000082fb000c7ee803a63b7b00104e800020|@234,1048575|68,3,@6308 6308:C2,564|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8fffc82d7000082b600008295000482740008973bfffc971bfffc80030000941bfffc80030004941bfffc8003000c941bfffc8013007c941bfffc809b000c807600043c0002a1600074a87c0803a64e800021825b00108232fffc8211000081f00000947bfffc800f0010941bfffc386000018310fff4801800007c0803a64e80002181db0018814efffc39230000398000063bbdffe47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000810a00089103001438e0000190e300109123000c80db000090c3000880bb000c90a30004809b000490830000831b0008801800007c0803a64e800021833b001090790000831b001882f8fffc82d7000082b6000082950004827400143a430000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00008237fff4922300088216fffc9203000481fb001491e30000965bfffc83130008801800007c0803a64e80002181db001c814effe8398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000813b000091230004811b001891030000830a0004801800007c0803a64e80002180fb001c80c7fffc80a6fffc398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000809b000090830004833b0018932300008305000c801800007c0803a64e800021807b0000831b00207f0803a63b7b00244e800020|@6309,1048575|100,3,@511 6309:S61|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737341627344617461283429656e74657254636f6e283129 6310:C2,528|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8fffc82d7000082b600008295000482740008973bfffc971bfffc80030000941bfffc80030004941bfffc8003000c941bfffc8013007c941bfffc809b000c807600043c0002a1600074a87c0803a64e800021825b00108232fffc82110000947bfffc386000018310fff4801800007c0803a64e80002139e30000398000063bbdffe47c1df04040a00010800d001c7c0803a64e800021387d0004919d000039c0000191c30014394000019143001091e3000c813b000c91230008811b00089103000480fb000090e30000831b0004801800007c0803a64e80002180db001480a6fffc80850000832400008319000482f800143ac30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000082a5fff492a300088284fffc92830004827b00109263000096dbfffc83170008801800007c0803a64e800021825b00188232ffe8398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000821b00009203000481fb001491e3000083110004801800007c0803a64e80002181db0018814efffc812afffc398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000811b00009103000480fb001490e300008309000c833b001c801800007c0903a67f2803a63b7b00204e800420|@6311,1048575|100,3,@511 6311:S65|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737341627344617461283429656e7465725769746854797065283129 6312:C2,148|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc80180010941bfffc8018000c941bfffc80180008941bfffc3c8002b0608410f03c0002a1600074a87c0803a64e800021833b000c831b0010907b001080db000080bb000438800003807b00083af80000831900043b370000801800007c0903a67f2803a63b7b00104e800420|@6306,1048575|64,3,@6313 72,3,@511 6313:S52|2068617320616c7265616479206265656e2075736564206173206120636f6e7374727563746f7220696e20746869732074797065 6314:C2,468|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc949bfffc80030000941bfffc80030008941bfffc8003000c941bfffc3860000182fb00042c1700014082000c3ac3000048000048398000025460f80140a20010800d00347c0803a64e8000217c83661541a3fff082f7000438640000800d00187c1b004040a00010800d00207c0803a64e8000214bffffb082bb00108295fffc8274000082530000823200048211000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000081fb000091e3000881db000c91c30004815b0008914300008310001c801800007c0803a64e800021813b00108109fffc80e8000080c7000080a6000480850020947bfffc3c6002b06063131c83040008801800007c0803a64e8000213b230000807b00083b190000801800007c0803a64e800021831b001482f8fffc82d7000082b6000082950004827400088013006c941bfffc3b1b001c3c0002b06000151c7c0803a64e8000213a430000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092430004823b001492230000831b0000833b001c801800007c0903a67f2803a63b7b00204e800420|@6327,1048575|288,3,@6315 372,3,@6322 6315:O1|@6316 6316:C2,72|7f2802a6633900023b030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003ee002b062f7138892e30000930300047f2803a64e800020|@6321,917505|48,3,@6317 6317:C2,68|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000480d7000480b7000080830004806300003c0002b0600013e87c0903a64e800420|@6320,917519|52,3,@6318 6318:C2,28|38830000386500003f000000631843c8801800007c0903a64e800420|@6319,917519|8,3,I27 6319:S73|50415253455f5452454528292e706173733228362961737369676e56616c7565732836296173734162734461746128342967656e56616c7565436f6e737472732832296c6571283429 6320:S76|50415253455f5452454528292e706173733228362961737369676e56616c7565732836296173734162734461746128342967656e56616c7565436f6e737472732832296c6571283129283129 6321:S73|50415253455f5452454528292e706173733228362961737369676e56616c7565732836296173734162734461746128342967656e56616c7565436f6e737472732832296c6571283129 6322:C2,244|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc947bfffc2c0300014082000c3b2000014800006083030000833b000482f9fffc82d7fffc80030004941bfffc80b800048096fff88076fff43b1600003c0002af6000bae47c0803a64e800021807b00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffff98831b000482f8fffc82d7fffc82b60000829500008274000482530010807b000083120000801800007c0803a64e80002138830000807b00003b1b00083c0002b06000162c7c0803a64e800021823b00087e2803a63b7b000c4e800020|@6326,1048575|100,3,@6217 212,3,@6323 6323:C2,204|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021706b0001408200a0708b000140820090973bfffc971bfffc80030004941bfffc80040004941bfffc80840000806300008318fffc3c0002b0600017147c0803a64e800021947bfffc809b0004807b0008831b000c4bffff8d398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b0000931900003879000082fb00107ee803a63b7b00144e800020386000014e800020386000014e800020|@1924,1048575|84,3,@6324 6324:C2,716|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8fffc82d7fffc82b6000082950000827400048253000882320028973bfffc971bfffc949bfffc80030000941bfffc80030004941bfffc807b000083110000801800007c0803a64e800021280300014182007c81fb000c81cffffc814efffc812a00008109000080e8000480c70010398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d000038a0000390a3000c809b000890830008832fffe893230004831b00049303000083060010801800007c0803a64e8000213a030000480000cc821b000c81f0fffc81cffffc814e0000812a00008109000480e8001080c8000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080b0ffe890a30004809b00009083000080070010941bfffc83060020801800007c0803a64e8000213b230000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00003b0000019303000c82fb000c92e300089323000482db000892c30000831b0000801800007c0803a64e8000213a0300003b7b000482bb000c8295fffc8274fffc825300008232000081f1000481cf0014398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00008153fff4914300088132fffc91230004811b000491030000961bfffc830e0008801800007c0803a64e80002180fb001080c7fffc80a6fffc8085000038600003947bfffc80c5fff48325fff880a4fffc38990000807b000c8307fffc82f8fffc831700003c0002af6000b0647c0803a64e80002182db001082b6fffc8295ffe0398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000827b000092630004825b00089243000083140004801800007c0803a64e800021807b0000823b00147e2803a63b7b00184e800020|@6325,1048575|600,3,@6198 6325:S83|50415253455f5452454528292e706173733228362961737369676e56616c7565732836296173734162734461746128342967656e56616c7565436f6e7374727328322970726f63657373436f6e737472283229 6326:S77|50415253455f5452454528292e706173733228362961737369676e56616c7565732836296173734162734461746128342967656e56616c7565436f6e73747273283229646563436f6e73283129 6327:S67|50415253455f5452454528292e706173733228362961737369676e56616c7565732836296173734162734461746128342967656e56616c7565436f6e73747273283229 6328:C2,96|7f2802a663390002973bfffc82f8000482d70020398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213abd0004919d0000907500083c6002a06063c7ac90750004807600049075000038750000800d00287c0803a64e800021|@6329,1015809|60,3,@227 6329:S54|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737341627344617461283429552d283129 6330:C2,104|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f80008973bfffc971bfffc947bfffc83170004801800007c0803a64e80002182db000482b60004807b000083150008833b0008801800007c0903a67f2803a63b7b000c4e800420|@6331,1048575| 6331:S71|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737341627344617461283429552d646563456e762d656e74657256616c466e283129 6332:S49|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737341627344617461283429 6333:C2,68|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc80d8000880b8000c388000038078001083180004801800007c0903a64e800420|@6171,1048575| 6334:C2,68|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc80d8000880b8000c388000038078001083180004801800007c0903a64e800420|@6171,1048575| 6335:S18|206973206e6f742061206461746174797065 6336:C2,200|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000082d7000082b600048295000c827500083a430000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00003a2000019223000c3a0000019203000839e0000191e3000481d3009091c30000973bfffc971bfffc965bfffc83140018801800007c0803a64e800021947bfffc807b00043b1b000c3c0002b060001e887c0803a64e800021807b0000815b000c7d4803a63b7b00104e800020|@6340,1048575|164,3,@6337 6337:C2,296|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e80002082f8fffc973bfffc971bfffc80030004941bfffc8097fff8806300008318fffc3c0002af600067d07c0803a64e80002182db000482b6fffc8295000082740000825300048232000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a1d0004919d00003de002b061ef1fcc91f0000081d4fff891d000088155fff89150000439230000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d0000920300108115fff49103000c80f4fffc90e3000880d6fff490c300049123000083110000801800007c0803a64e800021807b0000831b0004833b00087f2803a63b7b000c4bfffee4|@6339,1048575|80,3,@6169 156,3,@6338 6338:C2,52|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000218098000483180008801800007c0903a64e800420|@6176,1048575| 6339:S61|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737369676e4c6973742831296170706c794c697374283129 6340:S49|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737369676e4c697374283129 6341:C2,52|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000218098000483180008801800007c0903a64e800420|@6176,1048575| 6342:C2,148|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc80180010941bfffc8018000c941bfffc80180008941bfffc3c8002b0608421a03c0002a1600074a87c0803a64e800021833b000c831b0010907b001080db000080bb000438800003807b00083af80000831900043b370000801800007c0903a67f2803a63b7b00104e800420|@6301,1048575|64,3,@6343 72,3,@511 6343:S37|2068617320616c7265616479206265656e20626f756e6420696e2074686973206d61746368 6344:C2,68|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc80d8000880b8000c388000038078001083180004801800007c0903a64e800420|@6171,1048575| 6345:O1|@6346 6346:C2,8|386000014e800020|@6347,524289| 6347:S60|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c7565732832296c6f63616c456e762d283129 6348:C2,164|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000c82d70000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d000092d5000482c3000492d5000092b7000082b80008973bfffc971bfffc947bfffc83150004801800007c0803a64e800021829b000482740004807b000083130008833b0008801800007c0903a67f2803a63b7b000c4e800420|@6349,1048575| 6349:S59|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c756573283229626f6479456e762d283129 6350:C2,104|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f80008973bfffc971bfffc947bfffc83170004801800007c0803a64e80002182db000482b60004807b00008315000c833b0008801800007c0903a67f2803a63b7b000c4e800420|@6349,1048575| 6351:C2,104|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f80008973bfffc971bfffc947bfffc83170004801800007c0803a64e80002182db000482b60004807b000083150024833b0008801800007c0903a67f2803a63b7b000c4e800420|@6349,1048575| 6352:C2,68|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc80d8000880b8000c388000038078001083180004801800007c0903a64e800420|@6171,1048575| 6353:C2,148|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc80180010941bfffc8018000c941bfffc80180008941bfffc3c8002ab60846f303c0002a1600074a87c0803a64e800021833b000c831b0010907b001080db000080bb000438800003807b00083af80000831900043b370000801800007c0903a67f2803a63b7b00104e800420|@6301,1048575|64,3,@4778 72,3,@511 6354:C2,1692|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8fffc973bfffc971bfffc80030000941bfffc80030004941bfffc80030008941bfffc8003000c941bfffc80bb00048098fff88077fff48318fffc3c0002af6000bae47c0803a64e80002182db001082b6fffc8295000082740000825300048232000882110028807b000483100000801800007c0803a64e800021280300014182000c39e000014800012881fb001081cffffc814e0000812a00008109000480e8000c80c80008398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d000038a0000390a3000c38800001908300083b20000193230004830600909303000083070018801800007c0803a64e80002182fb001082d7fffc82b6000082950000827400048253000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a3d0004919d00003e0002b062102c749211000081f5fff891f1000881d7fff891d1000439430000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d0000922300108136fff49123000c8115fffc910300089143000480fb000490e3000083120000801800007c0803a64e80002139e3000080db0000808600002c04fff740820068807b00108323fffc8319000082f8000082d7000482b60010398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000829b000492830004827b000c9263000083150014801800007c0803a64e80002138a30000480003002c04fff140820288807b00108323fffc8319000082f8000082d7000482b600108299fffc398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a7d0004919d000082540030925300048234001892330000398000053bbdffe87c1df04040a00010800d001c7c0803a64e8000213a1d0004919d00003de002b061ef2cc491f0000081d8fffc91d000108143fff89150000c8139fff4913000088117000891100004398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00009203000c80e6000490e30008926300043ca002aa60a527f890a3000094fbfffc80060008941bfffc83150054801800007c0803a64e800021809b00188324fffc8319000082f8000082d7000482b6000882950054947bfffc83140008801800007c0803a64e800021827b001c8253fffc823200008211000081f0000481cf0008814e005c80630004830a0000801800007c0803a64e800021280300014182000848000090813b001c8109fffc80e800008007fffc941bfffc8009fff8941bfffc8008fff4941bfffc809b0014386000513c0002a1600074a87c0803a64e8000213c8002b060842d243c0002a1600074a87c0803a64e80002180db002880a6fffc8085000083240000947bfffc80db000480bb000838800003807b000c83190008801800007c0803a64e8000213b7b000c831b000482fb000092f8000082db001c82b6fffc829500008274000082530004823200108212000880110014941bfffc387700008310009c801800007c0803a64e80002139e30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000091e3000481db001c91c30000831b0000801800007c0803a64e80002138a3000048000070807b00108323fffc8319000082f8000082d7000482b60020398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a9d0004919d00003e6002b062732d44927400083e4002a06252c7ac92540004823500049234000038740000800d00287c0803a64e8000213b7b0010815b000890aa0000813b00108109fff080e9fffc80c7000080860000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008324001093230004831b000c9303000094bbfffc83080004801800007c0803a64e80002182fb001482d7fffc82b60000829500008274000482530014398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00008236fff4922300088215fffc9203000481fb001091e3000083120008801800007c0803a64e80002181db0014814efffc812a000039000003951bfffc80cafff480a9fffc808efff8807b00143b0900003c0002af6000b0647c0803a64e80002180fb001480c7fffc80a6fffc398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000809b000090830004833b00109323000083050008833b0018801800007c0903a67f2803a63b7b001c4e800420|@6359,1048575|92,3,@6217 344,3,@6355 704,3,@6356 800,3,@3821 992,3,@511 1008,3,@6357 1016,3,@511 1292,3,@6358 1304,3,@227 1584,3,@6198 6355:C2,52|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000218098000483180008801800007c0903a64e800420|@6176,1048575| 6356:C2,68|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc80d8000880b8000c388000038078001083180004801800007c0903a64e800420|@6171,1048575| 6357:S22|29206973206e6f7420616e20657863657074696f6e2e 6358:S41|70726f63657373457863657074696f6e3a206261646c792d666f726d65642070617273652d74726565 6359:S67|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c75657328322970726f63657373457863657074696f6e283129 6360:C2,52|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000218098000483180008801800007c0903a64e800420|@6176,1048575| 6361:C2,52|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000218098000483180008801800007c0903a64e800420|@6176,1048575| 6362:C2,52|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000218098000483180008801800007c0903a64e800420|@6176,1048575| 6363:C2,52|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000218098000483180008801800007c0903a64e800420|@6176,1048575| 6364:C2,52|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000218098000483180008801800007c0903a64e800420|@6176,1048575| 6365:C2,52|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000218098000483180008801800007c0903a64e800420|@6176,1048575| 6366:C2,52|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000218098000483180008801800007c0903a64e800420|@6176,1048575| 6367:C2,52|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000218098000483180008801800007c0903a64e800420|@6176,1048575| 6368:S27|61737369676e54797065733a2077696c646361726420666f756e64 6369:S34|61737369676e54797065733a206c617965726564207061747465726e20666f756e64 6370:S28|61737369676e54797065733a20656d7074797472656520666f756e64 6371:S48|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c756573283229 6372:S36|50415253455f5452454528292e706173733228362961737369676e56616c756573283629 6373:S21|50415253455f5452454528292e7061737332283629 6374:C2,228|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002128040001418200148098000482e4000082f700004800001082f800048097000082e40004398000063bbdffe47c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002b062b5323c92b6000090760014829b00009296001090b6000c827800089276000882580004925600043a230000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092c3000890c30004922300003a1800003b170000801800007c0903a67f2803a63b7b00044e800420|@6377,1048575|104,3,@6375 6375:C2,652|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d70000973bfffc971bfffc947bfffc8078001483160008801800007c0803a64e80002182bb0004829500048274001c947bfffc8073000883130010801800007c0803a64e8000213a430000807b00003b120000801800007c0803a64e800021823b00088211000481f00024947bfffc807b0008830f0004801800007c0803a64e80002139c300003c6002a16063f6583b0e0000801800007c0803a64e800021815b000c812a000481090024807b000883080000801800007c0803a64e80002180fb000c38c30000806700103b060000801800007c0803a64e80002180bb000c80850004806400248323000c807b00083b190000801800007c0803a64e8000213b0300003c6002a66063e9d8801800007c0803a64e80002182fb000c82d7000482b60024807b000883150004801800007c0803a64e8000213a8300003c6002a16063f6583b140000801800007c0803a64e800021827b000c8253000482320024807b000883110000801800007c0803a64e8000213a0300003c6002af606366cc3b100000801800007c0803a64e80002181fb000c81cf0004814e0024807b0008830a000c801800007c0803a64e800021392300003c6002a06063ee143b090000801800007c0803a64e800021811b000c80bb0008809b00008068000c83080008801800007c0803a64e80002180fb000c80c7000480a60024807b000883050008801800007c0803a64e80002138830000386000013b040000801800007c0803a64e800021807b000c8323000483190024807b000883180008801800007c0803a64e8000213ae30000386000013b170000833b0010801800007c0903a67f2803a63b7b00144e800420|@6376,1048575|172,3,@711 296,3,@2419 352,3,@711 412,3,@6163 472,3,@265 6376:S28|50415253455f5452454528292e6572726f724e656172283529283129 6377:S25|50415253455f5452454528292e6572726f724e656172283529 6378:O11|@6382,@5631,@6636,@6641,@773,@6381,@206,@2532,@6160,@2356,@4427 6379:C2,88|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e3001096fbfffc82c3001496dbfffc82a3001896bbfffc80c3000c80a30008808300048063000083180004801800007c0903a64e800420|@6380,1048575| 6380:S23|50415253455f5452454528292e67656e636f6465283129 6381:O2|@6646,@5631 6382:C2,2548|7f2802a66339000239600054800d00187d6bd8107c0b004040a00010800d00247c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002b062d6400c92d7000082db000892d700043d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213abd0004919d000090d500003d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e80002138dd0004919d00003a80000192860000827800048253001c973bfffc971bfffc947bfffc949bfffc94bbfffc96fbfffc96bbfffc94dbfffc8072000c83120010801800007c0803a64e800021823b00188211000481f00000947bfffc807b0014830f0008801800007c0803a64e800021831b0000801800007c0803a64e80002181db001c814e0004812a001c947bfffc8069000483090010801800007c0803a64e800021811b002080e8000480c70000947bfffc807b001c83060008801800007c0803a64e800021831b0000801800007c0803a64e80002180bb002480850004832400308319001482e40000947bfffc80180000941bfffc807b002483170008801800007c0803a64e8000212c0300014082000c3ac000014800008880030000941bfffc80030004941bfffc807b0004831b0008801800007c0803a64e8000212803000141820034398000013bbdfff87c1df04040a00010800d001c7c0803a64e8000213add0004919d000082bb000492b6000048000028807b00003b7b0008800d00187c1b004040a00010800d00207c0803a64e8000214bffff743b7b000872cb000140820030827b002c8253000482320030821100148076000083100008801800007c0803a64e8000213a83000048000014829b002c827400048253003082920010823b002c398000063bbdffe47c1df04040a00010800d001c7c0803a64e8000213a1d0004919d00003de002b061ef409091f000009290001481db000c91d00010815b00149150000c8131000491300008811b001891100004398000053bbdffe87c1df04040a00010800d001c7c0803a64e80002138fd0004919d00003cc002b060c6428890c7000080bb000490a70010809b001c9087000c9107000891270004398000073bbdffe07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003f2002b0633946749323000090a300189103001491230010831b00249303000c82fb003492e3000890e30004398000073bbdffe07c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002b062b54aa492b6000090b600189296001491d6001092f6000c9116000891360004398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213a9d0004919d00003e6002b062735948927400009134000c931400088251002092540004398000053bbdffe87c1df04040a00010800d001c7c0803a64e80002139fd0004919d00003dc002b061ce5db491cf0000928f0010930f000c924f0008912f0004398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002138dd0004919d00003f2002b063399674932600009126000891e60004398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003e6002b0627398b89275000091350004398000053bbdffe87c1df04040a00010800d001c7c0803a64e80002139dd0004919d00003f2002b063399b4c932e0000827b003c926e0010912e000c90ee0008910e000483290004398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b1d0004919d000038800001909800048099000c90980000947bfffc947bfffc391b00003940000191480000391b000093080004398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b1d0004919d0000815b000091580000811b000491180004815b0034810a000480a80010398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003a400001925700048225004492370000947bfffc947bfffc3a5b00003a600001927200003a5b000092f20004398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213afd0004919d0000827b000092770000825b000492570004827b003c8253000481320010398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021389d0004919d00003b200001932400048329004093240000947bfffc947bfffc395b000039000001910a0000395b0000908a0004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021391d0004919d0000809b000090880000815b000491480004809b0044398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021395d0004919d00003ca002b060a5a10090aa000091ca0010930a000c831b0030930a000882240004922a000481db0044398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138bd0004919d00003f0002b06318d04093050000830e000493050004827b0044398000053bbdffe87c1df04040a00010800d001c7c0803a64e8000213a5d0004919d00003d2002b06129d29491320000833300209332001090f2000c813b00309132000880f3000490f20004813b00443980000d3bbdffc87c1df04040a00010800d001c7c0803a64e800021389d0004919d00003e2002b06231debc9224000090c4003092a4002c82bb003492a40028823b00309224002482bb005492a4002092e4001c82e9002492e4001890a400149144001080a9002090a4000c924400088249000492440004823b0044398000083bbdffdc7c1df04040a00010800d001c7c0803a64e80002139dd0004919d00003f0002b06318f260930e000091ee001c81f1000491ee0018831b0034930e0014910e0010914e000c815b0030914e000881110020910e0004831b0044398000193bbdff987c1df04040a00010800d001c7c0803a64e800021395d0004919d00003ce002b060e7f75890ea000080f8002890ea006090ca005c908a005880d8002490ca005480980020908a0050928a004c8298001c928a0048827b002c926a0044920a004082180018920a003c833b003c932a0038827b004c926a003491ca003081d8001491ca002c833b001c932a002883380010932a00248258000c924a002092ca001c82d8000892ca001892aa001480bb003490aa001080bb003090aa000c906a000880780004906a0004398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138bd0004919d00009265000482fb004092e50000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021393d0004919d00003ae0000192e9000490a90000947bfffc947bfffc38db000080bb0058809b0040386900003b0a0000801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082db000092c3000082bb000492a30004829b00507e8803a63b7b00604e800020|@6635,1048575|76,3,@6383 696,3,@6385 780,3,@6387 852,3,@6389 932,3,@6394 1004,3,@6408 1068,3,@6415 1132,3,@6462 1188,3,@6468 1240,3,@6470 1736,3,@6476 1812,3,@6507 1872,3,@6510 1952,3,@6519 2076,3,@6536 2172,3,@6545 6383:C2,64|7f2802a6633900028078000482e300003980000256e0f80140a20010800d00347c0803a64e8000217ed7661541a3fff092c30000387700007f2803a64e800020|@6384,983041| 6384:S32|50415253455f5452454528292e67656e636f64652837296d6b41646472283129 6385:C2,428|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000882d7003082b600243a830000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d000090a300109283000c827800109263000882550004924300048238001492230000973bfffc971bfffc94bbfffc80040000941bfffc80040004941bfffc83160028801800007c0803a64e8000213a030000807b00043b100000801800007c0803a64e80002181fb000c81cf000c815b0008914e0000812f00088109000480e9002c80080028941bfffc80080014941bfffc83070000801800007c0803a64e800021831b0000801800007c0803a64e80002180db001480a600043883000080650000949bfffc831b000c801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d00003b0000019319000490790000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003ae0000192e300089323000482db000092c30000831b0008833b001c801800007c0903a67f2803a63b7b00204e800420|@6386,1048575| 6386:S38|50415253455f5452454528292e67656e636f6465283729616464446562756743616c6c283329 6387:C2,924|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f80010281700014082002438a0000190a60000806400009066000480a4000490a60008386000014e80002082d8000482b60004829800083a63000080740000973bfffc971bfffc967bfffc94bbfffc94dbfffc80040000941bfffc80150050941bfffc83040004801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a5d0004919d00003a2000019232000490720000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092430004821b000c92030000831b0000801800007c0803a64e80002181fb001481cf0004814e0004812f00088109000038e30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00009103000880cf000c90c3000490e30000830a0068801800007c0803a64e80002180bb001480850004832400088319005480030000941bfffc80030004941bfffc807b001883180008801800007c0803a64e80002182fb001c82d7000482b600088295005c947bfffc80030004941bfffc807b000083140000801800007c0803a64e8000212803000141820064825b0004823b00248211000481f0003081cf0000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008152000c914300048132000091230000830e0004801800007c0803a64e8000213a63000048000118827b0024825300048232000882110058807b000083100000801800007c0803a64e800021280300014182009081fb002481cf0004814e0008812a0058807b000083090008801800007c0803a64e800021811b000480fb002480c7000480a60030808500083b230000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000932300088308000c9303000482e8000092e3000083040004801800007c0803a64e8000213a6300004800006081fb000481db0024814e0004812a00308109000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080ef000c90e3000480cf000090c3000083080004801800007c0803a64e8000213a630000398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138bd0004919d0000809b00149085000492650000807b0018833b000c9323000090a30004831b0008930300083860000182fb00287ee803a63b7b002c4e800020|@6388,1048575| 6388:S42|50415253455f5452454528292e67656e636f64652837296372656174654465627567456e747279283429 6389:C2,320|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f800182817000141820104971bfffc398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213add0004919d0000909600043880000190960000973bfffc94bbfffc2c0300014082000c3b36000048000090947bfffc947bfffc80030004941bfffc38bb000438960000806300003b1b00143c0002b0600047d07c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b1d0004919d000082fb000492f8000082db000892d800043ad80000807b00003b7b000c800d00187c1b004040a00010800d00207c0803a64e8000214bffff68831b000082f9000092f8000082d9000492d800043860000182bb00047ea803a63b7b000c4e8000203ac0000192c5000090850004386000014e800020|@6393,1048575|152,3,@6390 6390:C2,416|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000082d7001082b60010829700148274000082560008973bfffc971bfffc947bfffc94bbfffc80040000941bfffc80040004941bfffc8015002c941bfffc967bfffc8312009c801800007c0803a64e800021823b00188211000039e30000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d000081d0000891c300108150000c9143000c91e30008813b000091230004811b001491030000831b0004801800007c0803a64e800021947bfffc947bfffc947bfffc80fb002480c7000080a6000438db00003885000038a3000038640000809b00143b230000807b00203b190000801800007c0803a64e80002182fb00002c1700014082000c831b001848000020807b00183b1b00283c0002b06000498c7c0803a64e8000213b030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213add0004919d000082bb000892b60004829b000492960000827b001c9313000092d3000438600001825b00287e4803a63b7b002c4e800020|@6392,1048575|312,3,@6391 6391:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c8078ffd84e800020973bfffc971bfffc80030000941bfffc806300044bffffbd398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b00009319000038790000833b00087f2803a63b7b000c4e800020|@468,786433| 6392:S52|50415253455f5452454528292e67656e636f64652837296d616b654465627567456e74726965732833296c6f6164566172283329 6393:S42|50415253455f5452454528292e67656e636f64652837296d616b654465627567456e7472696573283329 6394:C2,2016|7f2802a66339000239600060800d00187d6bd8107c0b004040a00010800d00247c0803a64e80002182fb000082d80018281600014082000c3b7b00084e8000203d804000398c00073bbdffe07c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003e8002b0629452a0929500003a800001929500043a800001929500083a8000019295000c3a800001929500103a800001929500143a800001929500183d804000398c00083bbdffdc7c1df04040a00010800d001c7c0803a64e8000213a9d0004919d00003e6002b06273540c927400003a600001927400043a600001927400083a6000019274000c3a600001927400103a600001927400143a600001927400183a6000019274001c398000083bbdffdc7c1df04040a00010800d001c7c0803a64e8000213a7d0004919d00003e4002b0625255a892530000825800149253001c823800049233001890d3001480d8001090d300109093000c8218000c9213000881f7000091f3000491f40004921400089094000c90d4001081db000491d40014923400189254001c398000007d8c0e709994fffc91f50004921500089095000c90d500109235001492550018398000007d8c0e709995fffc8151002c39230000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003d0002b0610857389103000092630004973bfffc971bfffc953bfffc94bbfffc80170004941bfffc96bbfffc969bfffc830a0000801800007c0803a64e80002180fb001480c7000480a6002c38830000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003f2002b0633957d493230000831b000093030004949bfffc83050000801800007c0803a64e80002182fb001882d7000482b6002c3a830000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003e6002b06273587092630000825b000892430004969bfffc83150000801800007c0803a64e800021823b001c8211000481f00004947bfffc800f004c941bfffc800f0028941bfffc807b0010830f0014801800007c0803a64e80002181db0028814e0004812a0004810e000838e300008068000094fbfffc80090050941bfffc831b0024801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138dd0004919d000038a0000190a60004809b0028908600003b230000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000090c3000493230000831b0000801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b1d0004919d00003ae0000192f8000490780000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003ac0000192c300089303000482bb000492a30000831b0008801800007c0803a64e800021829b00308274000482530004947bfffc80120028941bfffc807b001c83120014801800007c0803a64e800021823b00388211000481f0000481d1000839430000806e0000955bfffc800f0050941bfffc831b0034801800007c0803a64e800021813b00408109000480e80004398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138dd0004919d000038a0000190a600048087000490860000947bfffc80070054941bfffc94dbfffc80070028941bfffc807b003083070014801800007c0803a64e800021833b00508319000482f8000482d900083aa300008076000096bbfffc80170050941bfffc831b004c801800007c0803a64e800021829b00588274000482530004398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a3d0004919d00003a0000019211000481f2000891f1000039c30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00009223000491c30000831b0000801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021395d0004919d000039200001912a0004906a0000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000039000001910300089143000480fb000490e30000831b0008801800007c0803a64e80002138c30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000090c3000880bb000c90a30004809b005490830000831b0010801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d00003b0000019319000490790000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00009323000482fb001492e30000831b0018801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213add0004919d00003aa0000192b6000490760000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003a8000019283000892c30004827b001c92630000831b0020801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a5d0004919d00003a2000019232000490720000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092430004821b002492030000831b0034833b005c801800007c0903a67f2803a63b7b00684e800420|@6407,1048575|104,3,@6395 204,3,@6397 308,3,@6399 492,3,@6401 608,3,@6403 700,3,@6405 6395:C2,260|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8001482d7003082b6001c973bfffc971bfffc947bfffc949bfffc80160028941bfffc80180018941bfffc3864000083150004801800007c0803a64e800021829b00103a630000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d000082540008924300108234000c9223000c82140010920300089263000481fb000091e30000831b0004801800007c0803a64e80002181db001039430000806e00043b0a0000801800007c0803a64e80002139230000807b000c3b090000801800007c0803a64e800021807b0008800d00287c0803a64e800021|@6396,1048575| 6396:S65|50415253455f5452454528292e67656e636f64652837297772617046756e6374696f6e496e4465627567283629657863657074696f6e46756e6374696f6e283229 6397:C2,312|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8001882d7003082b600203a830000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000827800149263000490830000973bfffc971bfffc969bfffc949bfffc80160028941bfffc8018001c941bfffc83150004801800007c0803a64e800021825b00103a230000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d0000821200089203001081f2000c91e3000c81d2001091c3000892230004815b000091430000831b0004801800007c0803a64e800021813b001039030000806900043b080000801800007c0803a64e80002138e30000807b000c3b070000801800007c0803a64e800021807b000880db00147cc803a63b7b00184e800020|@6398,1048575| 6398:S61|50415253455f5452454528292e67656e636f64652837297772617046756e6374696f6e496e44656275672836296c6561766546756e6374696f6e283229 6399:C2,300|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8001882d7003082b600183a830000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000827800149263000490830000973bfffc971bfffc969bfffc80160028941bfffc8018001c941bfffc83150004801800007c0803a64e800021825b000c3a230000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d0000821200089203001081f2000c91e3000c81d2001091c3000892230004815b000091430000831b0004801800007c0803a64e800021813b000c39030000806900043b080000801800007c0803a64e80002138e30000807b00083b070000833b0010801800007c0903a67f2803a63b7b00144e800420|@6400,1048575| 6400:S61|50415253455f5452454528292e67656e636f64652837297772617046756e6374696f6e496e4465627567283629656e74657246756e6374696f6e283229 6401:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@6402,1048575| 6402:S61|50415253455f5452454528292e67656e636f64652837297772617046756e6374696f6e496e4465627567283629656e74657246756e6374696f6e283129 6403:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@6404,1048575| 6404:S61|50415253455f5452454528292e67656e636f64652837297772617046756e6374696f6e496e44656275672836296c6561766546756e6374696f6e283129 6405:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@6406,1048575| 6406:S65|50415253455f5452454528292e67656e636f64652837297772617046756e6374696f6e496e4465627567283629657863657074696f6e46756e6374696f6e283129 6407:S45|50415253455f5452454528292e67656e636f64652837297772617046756e6374696f6e496e4465627567283629 6408:C2,876|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000c82d7001082b70008973bfffc971bfffc949bfffc94bbfffc94dbfffc80160038941bfffc83150098801800007c0803a64e800021829b00103a630000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d0000825b000492430010823400089223000c3a0000039203000881fb000891e3000492630000831b0000801800007c0803a64e80002180030004941bfffc97fbfffc3dc002b061ce5a9e95dbfffc39400001955bfffc3bfb0000813b00208109000c80e80004806300008307006c801800007c0803a64e80002138c30000807b001c3b060000801800007c0803a64e80002138a30000398000013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d000090a3000083fb0008809b00247c8803a63b7b002c4e800020832300002c1900cb4082001c3b0300003860000182fb00187ee803a63b7b00204e800020831b001482f8000c82d7002082b600007c19a840408200c0947bfffc80180008941bfffc808300083c6002b060635cd03c0002a1600074a87c0803a64e8000213c8002b060845cf03c0002a1600074a87c0803a64e800021809b00183c0002a1600074a87c0803a64e8000213c8002b060845d143c0002a1600074a87c0803a64e800021809b00083c0002a1600074a87c0803a64e800021829b001c947bfffc80db001480bb002838800003807b000483140004801800007c0803a64e80002138600001827b00207e6803a63b7b00284e8000202c19000b4082009080180008941bfffc809b00143c6002b060635d203c0002a1600074a87c0803a64e8000213c8002b060845d143c0002a1600074a87c0803a64e800021809b00043c0002a1600074a87c0803a64e800021829b0018947bfffc80db001080bb002438800003807b000483140004801800007c0803a64e80002138600001827b001c7e6803a63b7b00244e80002080180008941bfffc809b00143c6002b060635d543c0002a1600074a87c0803a64e8000213c8002b060845d143c0002a1600074a87c0803a64e800021809b00043c0002a1600074a87c0803a64e800021829b0018947bfffc80db001080bb002438800003807b000483140004801800007c0803a64e80002138600001827b001c7e6803a63b7b00244e800020|@6414,1048575|196,3,$6408+342 416,3,@6409 424,3,@511 440,3,@6410 448,3,@511 468,3,@511 484,3,@6411 492,3,@511 512,3,@511 608,3,@6412 616,3,@511 632,3,@6411 640,3,@511 660,3,@511 748,3,@6413 756,3,@511 772,3,@6411 780,3,@511 800,3,@511 6409:S22|436f6e76657273696f6e20657863657074696f6e2028 6410:S26|2920726169736564207768696c6520636f6e76657274696e6720 6411:S4|20746f20 6412:S43|4f766572666c6f7720657863657074696f6e20726169736564207768696c6520636f6e76657274696e6720 6413:S34|457863657074696f6e20726169736564207768696c6520636f6e76657274696e6720 6414:S41|50415253455f5452454528292e67656e636f64652837296765744c69746572616c56616c7565283529 6415:C2,2764|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002b062d6689c92d7000082d8000492d70004971bfffc947bfffc94bbfffc82a600002c15fff14082020082860008827400008256000882320054973bfffc949bfffc96fbfffc967bfffc3873000083110008801800007c0803a64e800021821b001881f0000481cf0008814e005880030004941bfffc807b0000830a0000801800007c0803a64e8000212803000141820094813b001c8109000480e8000880c70058807b000083060008801800007c0803a64e800021398000043bbdffec7c1df04040a00010800d001c7c0803a64e80002138bd0004919d00003c8002b06084743490850000807b000c9065000c833b001893250008831b001c9305000480db0004809b0014831b0008833b0010801800007c0903a67f2803a63b7b00204e800420813b001c8109000480e8000880c7005c807b000083060000801800007c0803a64e800021280300014182003c80db00043ca002b060a57494809b0014807b000c3b1b001c3c0002b0600074cc7c0803a64e80002180bb00107ca803a63b7b00204e800020809b0014807b000c3c0002b060007bc87c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138bd0004919d00008083000090850004833b000493250000398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213b1d0004919d000082e3000c92f8000c82c3000892d8000882a3000492b8000490b8000038780000829b00107e8803a63b7b00204e8000202c15001b408201e882850004827400002c130005408200b8949bfffc973bfffc80050000941bfffc8005000c941bfffc806600043b1b00183c0002b0600081c87c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a5d0004919d0000907200043a20fffd92320000398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213a1d0004919d000081fb000091f0000c39c0000191d0000892500004815b00049150000038700000813b00087d2803a63b7b001c4e8000202c13fffd408200bc949bfffc973bfffc80050000941bfffc8005000c941bfffc80860004807400043b1b00183c0002b0600082e47c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a5d0004919d0000907200043a20fffd92320000398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213a1d0004919d000081fb000091f0000c39c0000191d0000892500004815b00049150000038700000813b00087d2803a63b7b001c4e800020973bfffc8258000482320020398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a1d0004919d00003de002b061ef84dc91f000083dc002a061cec7ac91d00004815100049150000038700000800d00287c0803a64e8000212c150011408201d4829800048274000c8246000880720000973bfffc949bfffc94dbfffc965bfffc8006000c941bfffc83130034801800007c0803a64e800021280300014182003c821b001c3de002b061ef850495fbfffc80db001c80bb000c388000038070000c83100008801800007c0803a64e8000213a230000480000083a200001823b001c8211000481f0000c81db0004806e0000830f0038801800007c0803a64e8000213f0002b06318852c801800007c0803a64e800021815b00002c0a00014082000c39230000480000b8810a000080fb001c80c7000480a6000c809b0004832400003b030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00009323000482e8000092e30000971bfffc800a0004941bfffc80080004941bfffc83050030801800007c0803a64e80002180bb000838830000807b00003b1b00283c0002b0600086247c0803a64e800021815b00043b7b000c800d00187c1b004040a00010800d00207c0803a64e8000214bffff40398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021391d0004919d00009128000438e0001b90e8000038c8000080bb0014809b000c807b0018831b001c833b00107f2803a63b7b00204bfff9dc2c150003408201b482860004827400002c13fff14082019482540008823200008218000481f0000881cf0054973bfffc949bfffc96fbfffc80060008941bfffc963bfffc38710000830e0008801800007c0803a64e800021815b001c812a00048109000880e8005880030004941bfffc807b000083070000801800007c0803a64e80002128030001418200a880db002080a60004808500088064005883230008807b00003b190000801800007c0803a64e800021398000053bbdffe87c1df04040a00010800d001c7c0803a64e8000213b1d0004919d00003ee002b062f787d092f8000082db000892d8001082bb001092b8000c829b001c92980008827b00209278000480db000438b80000809b001838750000831b000c833b0014801800007c0903a67f2803a63b7b00244e80042080db002080a60004808500088064005c83230000807b00003b190000801800007c0803a64e800021280300014182003880db000480bb0008809b0018807b00103b1b00203c0002b0600074cc7c0803a64e800021831b00147f0803a63b7b00244e800020807b0018831b00147f0803a63b7b00244e800020386500007f2803a63b7b000c4e8000202c15001d408200283a84000038850000387400003c0002b060007bc87c0903a67f2803a63b7b000c4e8004202c15ffe1408200283a84000038850000387400003c0002b060007bc87c0903a67f2803a63b7b000c4e8004202c1500134082006c398000063bbdffe47c1df04040a00010800d001c7c0803a64e8000213a9d0004919d00003e6002b06273882c927400008258000492540014907400109314000c9094000892f4000480860004386500003b140000801800007c0903a67f2803a63b7b000c4e8004202c15ffed408200f482860004827400008258000482320010398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d0000821b00049203001081f8000c91e3000c39c0000191c30008926300043940007b91430000973bfffc949bfffc94dbfffc80060008941bfffc8006000c941bfffc967bfffc83110038801800007c0803a64e800021813b002080030000941bfffc811b0010951bfffc80db002480bb0008809b0010807b000c83090010801800007c0803a64e80002180db000038a30000809b001c807b00143b1b00243c0002b060008fb87c0803a64e80002180fb00187ce803a63b7b00284e8000202c15fffb4082001480c600087f2803a63b7b000c4bfff64c2c15ffef408200f8973bfffc80060004941bfffc80c600084bfff629947bfffc829b0004825400002c12fff14082001082340008827100004800003c2c12fffb4082002482940008800d00187c1b004040a00010800d00207c0803a64e8000214bffffc4823b00148211000481f00008826f009481db0000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021395d0004919d0000812e0000912a0004926a0000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021391d0004919d000080ee000c90e8000c80ce000890c8000880ae000490a800049148000038680000809b00087c8803a63b7b00184e800020386500007f2803a63b7b000c4e800020|@6461,1048575|68,3,@6416 288,3,@6424 408,3,@6425 428,3,@6427 468,3,@6430 676,3,@6436 868,3,@6437 1064,3,@6440 1076,3,@227 1188,3,@6441 1280,3,@6442 1448,3,@6445 1800,3,@6448 1956,3,@6427 2044,3,@6430 2088,3,@6430 2156,3,@6449 2440,3,@6456 6416:C2,984|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d70008973bfffc971bfffc947bfffc949bfffc94bbfffc94dbfffc80040000941bfffc80040004941bfffc80040008941bfffc8004000c941bfffc3866000083160098801800007c0803a64e80002182bb0008829500002c14000540820250827b0020825300048232000c8212000880110044941bfffc807b00148310009c801800007c0803a64e800021831b0000801800007c0803a64e80002139e000012c0300014082000c39cf0000480000483980000255e0f80140a20010800d00347c0803a64e8000217d4f661541a3fff08063000439ea0000800d00187c1b004040a00010800d00207c0803a64e8000214bffffb0398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021395d0004919d000039200001912a0004811b0020910a000080fb001c398000043bbdffec7c1df04040a00010800d001c7c0803a64e80002138dd0004919d000080a7000c90a6000c38800001908600083c6002b060636c90906600043b2000019326000095dbfffc955bfffc38660000831b0020801800007c0803a64e800021947bfffc947bfffc947bfffc3b1b000082fb000c92f800003adb0000907600043abb0000829b002892950008398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a7d0004919d0000825b000092530000823b000492330004821b000892130008398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002139fd0004919d000039c0000191cf0004926f0000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021395d0004919d000091ea000439200001912a0000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021391d0004919d000080fb001890e8000c80db001090c800089148000480bb002490a8000038680000809b003c7c8803a63b7b00404e8000202c140001408200a4947bfffc807500043b1b00283c0002b060006c987c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a7d0004919d0000907300043a40000192530000398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213a3d0004919d0000821b00049211000c81fb000891f100089271000481db001091d1000038710000815b00287d4803a63b7b002c4e800020827b00208253000482320020398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a1d0004919d00003de002b061ef73d091f000083dc002a061cec7ac91d00004815100049150000038700000800d00287c0803a64e800021|@6423,1048575|388,3,@6417 740,3,@6418 936,3,@6422 948,3,@227 6417:O1|2 6418:C2,832|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c03000140820150398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003ae0000192e3000482f8fff892e3000082d8fff4398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213abd0004919d00008296000c9295000c3a600001927500083e4002b062526c90925500043a20000192350000973bfffc8018ffec941bfffc947bfffc387500008318fff0801800007c0803a64e800021947bfffc947bfffc947bfffc3a1b000081fb000c91f0000039db0000906e0004395b0000813b0010912a0008398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021391d0004919d000080fb000090e8000080db000490c8000480bb000890a80008398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000388000019083000491030000833b00147f2803a63b7b00184e80002082f8fffc82d7000482b6000882830000973bfffc971bfffc969bfffc80030004941bfffc8074000883150098801800007c0803a64e800021827b00088093ffd83f00000063184368801800007c0803a64e8000212803000141820124398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a5d0004919d00003a200001923200048213fff89212000081fb000481d3ffec808f0000387200003c0002b060006ff47c0803a64e800021815b000895dbfffc947bfffc806f0004830afff0801800007c0803a64e800021947bfffc947bfffc947bfffc393b0000811b000c9109000038fb00009067000438db000080bb001090a60008398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021389d0004919d0000807b000090640000833b000493240004831b000893040008398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213afd0004919d000082db001492d70004909700003877000082bb00207ea803a63b7b00244e800020807b00003b1300004bfffd09398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a5d0004919d000090720004823b00049232000038720000821b000c7e0803a63b7b00104e800020|@6421,1048575|148,3,@6417 436,3,I24 532,3,@6419 6419:C2,852|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386400004e8000202c040001408200084e800020706b00014082000c8303000048000020973bfffc3b0300003c6002a36063dfcc800d00287c0803a64e800021708b00014082000c82e4000048000020973bfffc3ae300003c6002a36063dfcc800d00287c0803a64e8000217f0bbb78556bf80140a20010800d00347c0803a64e8000217c18b800408200d8706b00014082000c82c3000048000020973bfffc3ac300003c6002a36063dfcc800d00287c0803a64e800021706b00014082000c82a300044800001c973bfffc3c6002a36063dfcc800d00287c0803a64e800021708b00014082000c828400044800001c973bfffc3c6002a36063dfcc800d00287c0803a64e800021973bfffc96dbfffc38940000387500004bfffec1398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021389d0004919d000090640004807b00009064000038640000833b00047f2803a63b7b00084e800020706b00014082000c82c3000048000020973bfffc3ac300003c6002a36063dfcc800d00287c0803a64e800021708b00014082000c82a4000048000020973bfffc3aa300003c6002a36063dfcc800d00287c0803a64e8000217ecba838556bf80140a20010800d00347c0803a64e8000217c16a800408000ac706b00014082000c8283000048000020973bfffc3a8300003c6002a36063dfcc800d00287c0803a64e800021706b00014082000c826300044800001c973bfffc3c6002a36063dfcc800d00287c0803a64e800021973bfffc969bfffc387300004bfffda1398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021389d0004919d000090640004807b00009064000038640000833b00047f2803a63b7b00084e800020708b00014082000c8284000048000020973bfffc3a8300003c6002a36063dfcc800d00287c0803a64e800021708b00014082000c8264000448000020973bfffc3a6300003c6002a36063dfcc800d00287c0803a64e800021973bfffc969bfffc389300004bfffcf5398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021389d0004919d000090640004807b00009064000038640000833b00047f2803a63b7b00084e800020|@6420,1040387|84,3,@1386 128,3,@1386 204,3,@1386 244,3,@1386 284,3,@1386 416,3,@1386 460,3,@1386 536,3,@1386 576,3,@1386 704,3,@1386 748,3,@1386 6420:S30|50415253455f5452454528292e67656e636f6465283729706c7573283229 6421:S57|50415253455f5452454528292e67656e636f64652837296275696c64416f74283429616464436f6e737472283429616464436c697374283129 6422:S35|616464436f6e7374723a206261646c792d666f726d656420616e642d6f722074726565 6423:S46|50415253455f5452454528292e67656e636f64652837296275696c64416f74283429616464436f6e737472283429 6424:C2,68|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000213cc002b060c6749438a300008098000c8078000883180004801800007c0903a64e800420|@6426,1048575|32,3,@6425 6425:O1|-16 6426:S37|50415253455f5452454528292e67656e636f64652837296275696c64416f74283429283129 6427:C2,1656|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000082d7000482b60008973bfffc971bfffc947bfffc94bbfffc94dbfffc80040000941bfffc80040004941bfffc8004000c941bfffc3866000083150098801800007c0803a64e800021829b0004827400002c130005408201c8398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a5d0004919d00003a20000192320004821b00149212000081fb001881cffff8398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021395d0004919d0000812e000c912a000c39000001910a00083ce002b060e76c9090ea000438c0000190ca0000965bfffc80db001438aa000038900000806ffffc830f0000801800007c0803a64e800021947bfffc947bfffc947bfffc38bb0000809b000c908500003b3b0000907900043b1b000082fb001c92f80008398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213add0004919d000082bb000092b60000829b000492960004827b000892760008398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a5d0004919d00003a2000019232000492d20000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a1d0004919d00009250000439e0ffff91f00000398000043bbdffec7c1df04040a00010800d001c7c0803a64e80002139dd0004919d0000815b0010914e000c39200001912e0008920e0004811b0018910e0000386e000080fb002c7ce803a63b7b00304e8000202c13ffff408203d082540004724b000140820360823b00188211000081f0000481cf001081520000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000813b000c91230004810a000891030000965bfffc955bfffc80120004941bfffc830e003c801800007c0803a64e8000212803000141820120398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138dd0004919d000038a0000190a60004809b002090860000807b000480830000386600003c0002b060006ff47c0803a64e800021833b0004831b0024947bfffc80db002080b90004809b00248078fffc83180000801800007c0803a64e800021947bfffc947bfffc947bfffc3afb000082db000c92d700003abb0000907500043a9b0000827b002892740008398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a5d0004919d0000823b000092320000821b00049212000481fb000891f20008398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002139dd0004919d0000815b0010914e0004924e000038ee000048000150398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138fd0004919d000038c0000190c7000480bb002090a70000809b00248064fff8398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213b3d0004919d00008303000c9319000c3ae0000192f900083ec002b062d66c9092d900043aa0000192b9000094fbfffc80db002038b900008284fffc82640000809b0024387400003b130000801800007c0803a64e800021947bfffc947bfffc947bfffc3a5b0000823b000c923200003a1b00009070000439fb000081db002891cf0008398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021395d0004919d0000813b0000912a0000811b0004910a000480fb000890ea0008398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138dd0004919d000080bb001890a600049146000038e60000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021389d0004919d000090e400043860ffff90640000398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213b3d0004919d0000831b001c9319000c3ae0000192f900089099000482db002492d900003879000082bb00387ea803a63b7b003c4e800020823b00188211000081f0000481cf0020398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021395d0004919d00003d2002b061297b60912a00083d0002a06108c7ac910a000480ee000490ea0000386a0000800d00287c0803a64e800021825b0018823200008211000481f00020398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002139dd0004919d00003d4002b0614a7b60914e00083d2002a06129c7ac912e0004810f0004910e0000386e0000800d00287c0803a64e800021|@6429,1048575|236,3,@6417 772,3,@6419 1104,3,@6417 1508,3,@6428 1520,3,@227 1608,3,@6428 1620,3,@227 6428:S37|6164644578636f6e7374723a206261646c792d666f726d656420616e642d6f722074726565 6429:S48|50415253455f5452454528292e67656e636f64652837296275696c64416f742834296164644578636f6e737472283429 6430:C2,584|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000218304000482d800002c16fffd40820070947bfffc973bfffc80040000941bfffc80040008941bfffc8004000c941bfffc807800043b1b00103c0002b060007e2c7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213afd0004919d0000907700043aa0fffd92b70000480001102c16000140820070947bfffc973bfffc80040000941bfffc80040008941bfffc8004000c941bfffc807800043b1b00103c0002b060007f007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213afd0004919d0000907700043aa0000192b700004800009c2c16ffff40820070947bfffc973bfffc80040000941bfffc80040008941bfffc8004000c941bfffc807800043b1b00103c0002b0600080487c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213afd0004919d0000907700043aa0ffff92b70000480000283af80000947bfffc973bfffc80040000941bfffc80040008941bfffc8004000c941bfffc398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003a80000192950004827b0010927500003a57000038950000807b00003c0002b060006ff47c0803a64e800021398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213a3d0004919d00009071000c821b0004921100089251000481fb000891f100003871000081db000c7dc803a63b7b00144e800020|@6435,1048575|88,3,@6431 204,3,@6433 320,3,@6434 488,3,@6419 6431:C2,176|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e800020973bfffc971bfffc80030004941bfffc80830000807800003f0002b063187ef8801800007c0803a64e800021947bfffc807b0004831b00084bffff99398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b0000931900003879000082fb000c7ee803a63b7b00104e800020|@234,1048575|72,3,@6432 6432:O1|@6430 6433:C2,300|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e80002082e30000973bfffc971bfffc80030004941bfffc80170000941bfffc80170008941bfffc80970004807800003f0002b063187ef8801800007c0803a64e800021947bfffc947bfffc947bfffc3adb000082bb001092b600003a9b0000907400043a7b0000825b000c92530008398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a3d0004919d0000821b00009211000081fb000491f1000481db000891d10008963bfffc807b0018831b001c4bffff1d398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021395d0004919d0000906a0004813b0000912a0000386a0000811b00207d0803a63b7b00244e800020|@234,1048575|92,3,@6432 6434:C2,300|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e80002082e30000973bfffc971bfffc80030004941bfffc80170000941bfffc80170008941bfffc80970004807800003f0002b063187ef8801800007c0803a64e800021947bfffc947bfffc947bfffc3adb000082bb001092b600003a9b0000907400043a7b0000825b000c92530008398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a3d0004919d0000821b00009211000081fb000491f1000481db000891d10008963bfffc807b0018831b001c4bffff1d398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021395d0004919d0000906a0004813b0000912a0000386a0000811b00207d0803a63b7b00244e800020|@234,1048575|92,3,@6432 6435:S47|50415253455f5452454528292e67656e636f64652837296275696c64416f7428342961646444656661756c74283229 6436:C2,256|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e80002082f8fff8398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213add0004919d000082b7000c92b6000c3a800001929600083e8002b062946c90929600043a80000192960000973bfffc971bfffc80030004941bfffc80c3000038b600008098fff48078fffc83180000801800007c0803a64e800021947bfffc807b0004831b00084bffff49398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a7d0004919d000090730004825b00009253000038730000823b000c7e2803a63b7b00104e800020|@234,1048575|104,3,@6417 6437:C2,408|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c040001408200782c0300014082000c386000014e800020973bfffc809800008064000482e30020398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002b062b5849892b600083ea002a062b5c7ac92b6000482b7000492b6000038760000800d00287c0803a64e800021706b000140820094973bfffc971bfffc80040004941bfffc80030004941bfffc80c4000080a300008098fff48078fffc83180000801800007c0803a64e800021947bfffc809b0008807b0004831b000c4bffff15398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b0000931900003879000082fb00107ee803a63b7b00144e800020973bfffc82f8000082d7000482b60020398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a9d0004919d00003e6002b062738498927400083e4002a06252c7ac92540004823500049234000038740000800d00287c0803a64e800021|@6439,1048575|108,3,@6438 120,3,@227 360,3,@6438 372,3,@227 6438:S6|6d657267656c 6439:S43|50415253455f5452454528292e67656e636f64652837296275696c64416f742834296d657267656c283229 6440:S31|7061747465726e206973206e6f742061207475706c6520696e20612d6f2d74 6441:S31|43616e27742066696e642061206669786564207265636f726420747970652e 6442:O1|@6443 6443:C2,160|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e800020398000025460f80140a20010800d00347c0803a64e8000217c6c1c1141a3fff0973bfffc4bffffad398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d0000907900043c6002b0606374949079000038790000833b00007f2803a63b7b00044e800020|@6444,524289|128,3,@6425 6444:S43|50415253455f5452454528292e67656e636f64652837296275696c64416f742834296275696c646c283129 6445:C2,332|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002170ab0001408200c82c04000140820040398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b1d0004919d0000808500049098000490780000387800007f2803a64e800020398000025480f80140a20010800d00347c0803a64e8000217eec241141a3fff0973bfffc971bfffc80050000941bfffc80a50004389700004bffff5d398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138bd0004919d000090650004809b00009085000038650000833b00087f2803a63b7b000c4e800020973bfffc82f8000080b7000480850020398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003ec002b062d6878c92c300083ec002a062d6c7ac92c3000482c4000492c30000800d00287c0803a64e800021|@6447,983047|288,3,@6446 300,3,@227 6446:S6|6d657267656e 6447:S43|50415253455f5452454528292e67656e636f64652837296275696c64416f742834296d657267656e283329 6448:C2,64|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180d8001038a300008098000c8078000883180004801800007c0903a64e800420|@6426,1048575| 6449:C2,296|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c040001408200788098001482e40010398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002b062b5897092b6000082b8000892b6000c82980010929600088278000c9276000480d7001c38b60000388300003875000083180004801800007c0903a67f2803a64e800420398000083bbdffdc7c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002b062d68a0c92d7000082b8001492b7001c8284000092970018827800089277001482580010925700108238000c9237000c82040004921700089317000481f5001080cf002038b70000388300003873000083180004801800007c0903a67f2803a64e800420|@6455,1048575|84,3,@6450 192,3,@6452 6450:C2,68|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000213cc002b060c6749438a300008098000c8078000883180004801800007c0903a64e800420|@6451,1048575|32,3,@6425 6451:S51|50415253455f5452454528292e67656e636f64652837296275696c64416f7428342970726f636573734c697374283229283129 6452:C2,1256|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e3000482d700002c16fffd4082028c82b7000472ab00014082022082950004728b0001408201b4827400042c13000140820148973bfffc971bfffc80140000941bfffc80030000941bfffc8003000c941bfffc80d8001880b5000080980014807800108318000c801800007c0803a64e800021825b000c947bfffc80920008807b000c83120004801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a3d0004919d00003a0000019211000490710000398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002139fd0004919d0000922f000481db000091cf0000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021395d0004919d000091ea00043920fffd912a0000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021391d0004919d000080fb000490e8000c38c0000190c800089148000480bb000890a8000038680000809b00147c8803a63b7b00184e800020973bfffc8258001c82320020398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a1d0004919d00003de002b061ef8f1091f000083dc002a061cec7ac91d00004815100049150000038700000800d00287c0803a64e800021973bfffc8278001c82530020398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a3d0004919d00003e0002b062108f10921100083de002a061efc7ac91f1000481d2000491d1000038710000800d00287c0803a64e800021973bfffc8298001c82740020398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a5d0004919d00003e2002b062318f10923200083e0002a06210c7ac9212000481f3000491f2000038720000800d00287c0803a64e8000212c160005408201cc398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213abd0004919d00008283000c9295000c3a600001927500083e4002b062526c90925500043a20000192350000398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213a1d0004919d00009290000c39e0000191f000083dc002b061ce6c9091d000043940000191500000973bfffc971bfffc80030000941bfffc969bfffc961bfffc80d8001838b5000080980014807800108318000c801800007c0803a64e800021813b000c947bfffc80890008807b000483090004801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021391d0004919d000038e0000190e8000490680000398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138dd0004919d00009106000480bb000090a60000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021389d0004919d000090c400043860fffd90640000398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213b3d0004919d0000831b00089319000c3ae0000192f900089099000482db000c92d900003879000082bb00147ea803a63b7b00184e800020973bfffc82b8001c82950020398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a7d0004919d00003e4002b062528f10925300083e2002a06231c7ac92330004821400049213000038730000800d00287c0803a64e800021|@6454,1048575|456,3,@6453 468,3,@227 552,3,@6453 564,3,@227 648,3,@6453 660,3,@227 756,3,@6417 824,3,@6417 1208,3,@6453 1220,3,@227 6453:S34|6d6b436f6e735061743a206261646c792d666f726d65642070617273652d74726565 6454:S60|50415253455f5452454528292e67656e636f64652837296275696c64416f7428342970726f636573734c6973742832296d6b436f6e73506174283129 6455:S48|50415253455f5452454528292e67656e636f64652837296275696c64416f7428342970726f636573734c697374283229 6456:C2,668|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e4000482d700002c16000540820144398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b1d0004919d00003aa0000192b8000490780000947bfffc947bfffc947bfffc387b000090c300003abb00009315000438db000090a60008398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002138bd0004919d0000807b000090650000831b00049305000482bb000892a50008398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138dd0004919d0000386000019066000490a60000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b1d0004919d000090d8000438c0000390d80000398000043bbdffec7c1df04040a00010800d001c7c0803a64e80002138bd0004919d00008064000c9065000c38c0000190c50008930500048304000093050000386500007f2803a63b7b000c4e8000202c160003408200c4947bfffc94bbfffc94dbfffc971bfffc973bfffc80040000941bfffc8004000c941bfffc807700043b1b00183c0002b0600092707c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d0000907500043a80000392950000398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213a7d0004919d0000825b00009253000c3a2000019233000892b30004821b0004921300003873000081fb00087de803a63b7b001c4e800020973bfffc82b800008295000482740020398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a5d0004919d00003e2002b0623195e4923200083e0002a06210c7ac9212000481f3000491f2000038720000800d00287c0803a64e800021|@6460,1048575|420,3,@6457 620,3,@6459 632,3,@227 6457:C2,788|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c030001408200e0398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003ae0000192e3000482f8000092e30000947bfffc947bfffc947bfffc3adb000082b8fff892b600003adb000090760004387b000082d8fffc92c30008398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000829b000092830000827b000492630004829b0008928300083a630000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003a40000192430004926300007f2803a63b7b000c4e80002082e3000082d8fffc72cb00014082009c82b7000872ab0001408200788298fff482740000825300048232000482030004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000081f5000091e3000481d6000091c30000973bfffc971bfffc96fbfffc961bfffc83110070801800007c0803a64e800021280300014182013848000034973bfffc971bfffc96fbfffc80030004941bfffc4800011c973bfffc971bfffc96fbfffc80030004941bfffc48000104815b0008398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021393d0004919d0000390000019109000480ea000090e9000080db000480860004386900003c0002b060006ff47c0803a64e800021947bfffc947bfffc947bfffc38bb0000808afff8908500003b3b0000907900043b1b000082eafffc92f80008398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213add0004919d000082bb000092b60000829b000492960004827b000892760008398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a5d0004919d0000823b000c9232000492d2000038720000821b00187e0803a63b7b001c4e800020807b0000831b00084bfffd35398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d000090750004829b00049295000038750000827b000c7e6803a63b7b00104e800020|@6458,1048575|520,3,@6419 6458:S58|50415253455f5452454528292e67656e636f64652837296275696c64416f7428342961646453636f6e737472283429616464436c697374283129 6459:S36|61646453636f6e7374723a206261646c792d666f726d656420616e642d6f722074726565 6460:S47|50415253455f5452454528292e67656e636f64652837296275696c64416f7428342961646453636f6e737472283429 6461:S34|50415253455f5452454528292e67656e636f64652837296275696c64416f74283429 6462:C2,92|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021971bfffc973bfffc38a30000388000033c6002b0606396ec3b1b00043c0002b0600097007c0803a64e800021833b00007f2803a63b7b00084e800020|@6467,1048575|48,3,@6463 60,3,@6464 6463:O4|0,@6417,0,0 6464:C2,276|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c050001408200084e80002082e5000082d700002c16ffeb4082007882b70004398000025480f80140a20010800d00347c0803a64e8000217e84661541a3fff082780000973bfffc971bfffc80050004941bfffc969bfffc80d5000838a300008075000483130004801800007c0803a64e80002180bb0004809b0000831b0008833b000c7f2803a63b7b00104bffff5c973bfffc82b800008295000882740020398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a5d0004919d00003e2002b062319830923200083e0002a06210c7ac9212000481f3000491f2000038720000800d00287c0803a64e800021|@6466,1048575|228,3,@6465 240,3,@227 6465:S30|6d616b6574202d206261646c7920666f726d656420706172736574726565 6466:S43|50415253455f5452454528292e67656e636f64652837296275696c64547265652831296d616b6574283329 6467:S35|50415253455f5452454528292e67656e636f64652837296275696c6454726565283129 6468:C2,588|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e400002c17fff14082009882c4000882b600008298000482740008973bfffc947bfffc96bbfffc3875000083130080801800007c0803a64e8000212803000141820018807b0004825b00087e4803a63b7b000c4e800020398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a5d0004919d0000823b000492320004821b0000921200003872000081fb00087de803a63b7b000c4e8000202c17001b40820060973bfffc971bfffc82c400042c1600014082001482bb00047ea803a63b7b00084e80002080160004941bfffc80960000831b00044bffff0582db00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffffb42c17001140820064973bfffc971bfffc82c4000c2c1600014082001482bb00047ea803a63b7b00084e80002082b6000080160004941bfffc80950004831b00044bfffe9d82db00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffffb02c1700034082000c808400084bfffe702c17001340820060973bfffc971bfffc82c400042c1600014082001482bb00047ea803a63b7b00084e80002080160004941bfffc80960000831b00044bfffe2982db00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffffb42c17fffb4082000c808400084bfffdfc2c17ffef40820034973bfffc971bfffc80040008941bfffc808400044bfffdd5809b0000831b0004833b00087f2803a63b7b000c4bfffdc44e800020|@6469,1048575| 6469:S34|50415253455f5452454528292e67656e636f646528372966696e6456617273283229 6470:C2,580|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8001082d700003980000256c0f80140a20010800d00347c0803a64e8000217eb6661541a3fff092b700008298000c827400043a430000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00009083000492c30000973bfffc971bfffc965bfffc94bbfffc94dbfffc96dbfffc83130040801800007c0803a64e800021823b00108211000c81f0000439c30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003940000191430004813b00009123000095dbfffc830f0018801800007c0803a64e800021947bfffc398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021391d0004919d000080fb001090e8000438c0000190c8000080bb0014808500002c0400014082000c3868000048000094947bfffc947bfffc80040004941bfffc38bb00048324000038880000387900003b1b00283c0002b060009dac7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b1d0004919d000082fb000492f8000082db000892d8000439180000809b00003b7b000c800d00187c1b004040a00010800d00207c0803a64e8000214bffff64398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d0000830300009319000482fb000492f9000082db000c82a3000492b6000093360004829b00009296000838600001827b001c7e6803a63b7b00204e800020|@6475,1048575|376,3,@6471 6471:C2,536|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8fffc82d7000c82b6000882950054973bfffc971bfffc947bfffc949bfffc94bbfffc83140008801800007c0803a64e800021827b000c8253fffc8232000c8211000881f0004880030008941bfffc807b0000830f0000801800007c0803a64e800021280300014182012c81db0010814efffc812a000c8109000880e80048807b000083070008801800007c0803a64e80002180db000880bb0010947bfffc947bfffc947bfffc8085fffc80030000941bfffc80030004941bfffc80060000941bfffc8066000438db000c80a5ffe48324000838830000807b00243b190000801800007c0803a64e800021831b002882fb000882d8ffec92d7000082b8fffc8295000482740000825b000492720000821b000c2c1000014082000c823b000048000020807b00003b1b002c3c0002b060009fe07c0803a64e8000213a230000398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002139fd0004919d000081db001491cf0004815b0010914f0000813b001c9229000091e9000438600001811b002c7d0803a63b7b00304e80002081db0010814efffc812a000c81090020398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002138fd0004919d00003cc002b060c6a08890c700083ca002a060a5c7ac90a70004808800049087000038670000800d00287c0803a64e800021|@6474,1048575|332,3,@6472 488,3,@6473 500,3,@227 6472:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c8078ffe04e800020973bfffc971bfffc80030000941bfffc806300044bffffbd398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b00009319000038790000833b00087f2803a63b7b000c4e800020|@468,786433| 6473:S7|73657441646472 6474:S47|50415253455f5452454528292e67656e636f64652837296465636c6172655661727328342973657441646472283329 6475:S37|50415253455f5452454528292e67656e636f64652837296465636c61726556617273283429 6476:C2,928|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182fb0000947bfffc947bfffc947bfffc973bfffc971bfffc949bfffc94bbfffc94dbfffc80170004941bfffc80170008941bfffc8017000c941bfffc38db002038a30000809b00303877000083180010801800007c0803a64e800021809b0034807b00003c0002b06000a4bc7c0803a64e800021947bfffc38800001807b00383c0002b06000a7747c0803a64e800021280300014182000848000028809b0000807b00383c0002b06000a7747c0803a64e800021280300014082000848000058398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000082bb002492a30008829b001492830004827b003892630000831b0010801800007c0803a64e8000213ac30000480001d882db000c82b600002c15fffd4082009482960004728b000140820068827400042c1300014082003c825b0038965bfffc823b0030963bfffc82140000961bfffc80db001c80bb0020809b0024807b0030831b00284bfffe793ac3000048000178387400003b1b002c3c0002b06000a8e87c0803a64e8000213ac3000048000158387400003b1b002c3c0002b06000a8e87c0803a64e8000213ac30000480001382c1500014082002880960004807b00083b1b002c3c0002b06000b93c7c0803a64e8000213ac300004800010c2c15ffff4082008c829600043a6000012c1400014082000c3873000048000058398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a5d0004919d00009272000482340000923200003a72000082940004800d00187c1b004040a00010800d00207c0803a64e8000214bffffa03b1b002c3c0002b06000c0b07c0803a64e8000213ac300004800007c2c15000340820024807600043b1b002c3c0002b06000c8407c0803a64e8000213ac3000048000054398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000829b002492830008827b001492630004825b000092430000831b0010801800007c0803a64e8000213ac30000821600042c1000014082000c823b002848000028961bfffc807b002c3b1b00303c0002b06000cf6c7c0803a64e8000213a2300003b7b0004947bfffc947bfffc39fb000081d6000091cf0000395b0000922a0004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000813b000091230000811b00049103000480fb00287ce803a63b7b00444e800020|@6506,1048575|132,3,@6477 160,3,@6479 196,3,@6479 412,3,@6481 444,3,@6481 488,3,@6497 632,3,@6499 672,3,@6503 808,3,@6505 6477:C2,624|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c030001408200084800001028040001418200084800000c386000014e800020706b00014082000c8303000048000020973bfffc3b0300003c6002a36063dfcc800d00287c0803a64e800021708b00014082000c82e4000048000020973bfffc3ae300003c6002a36063dfcc800d00287c0803a64e8000217f0bbb78556bf80140a20010800d00347c0803a64e8000217c18b800408200d8706b00014082000c82c3000048000020973bfffc3ac300003c6002a36063dfcc800d00287c0803a64e800021706b00014082000c82a300044800001c973bfffc3c6002a36063dfcc800d00287c0803a64e800021708b00014082000c828400044800001c973bfffc3c6002a36063dfcc800d00287c0803a64e800021973bfffc96dbfffc38940000387500004bfffebd398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021389d0004919d000090640004807b00009064000038640000833b00047f2803a63b7b00084e800020706b00014082000c82c3000048000020973bfffc3ac300003c6002a36063dfcc800d00287c0803a64e800021708b00014082000c82a4000048000020973bfffc3aa300003c6002a36063dfcc800d00287c0803a64e8000217ecba838556bf80140a20010800d00347c0803a64e8000217c16a80040800038706b00014082000c828300044800001c973bfffc3c6002a36063dfcc800d00287c0803a64e800021387400007f2803a64bfffdd4708b00014082000c8284000448000020973bfffc3a8300003c6002a36063dfcc800d00287c0803a64e800021389400007f2803a64bfffd9c|@6478,1032195|88,3,@1386 132,3,@1386 208,3,@1386 248,3,@1386 288,3,@1386 420,3,@1386 464,3,@1386 536,3,@1386 592,3,@1386 6478:S35|50415253455f5452454528292e67656e636f6465283729696e74657273656374283229 6479:C2,308|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082001c280400014082000c386000034e800020386000014e8000202c0400014082000c386000014e800020706b00014082000c8303000048000020973bfffc3b0300003c6002a36063dfcc800d00287c0803a64e800021708b00014082000c82e4000048000020973bfffc3ae300003c6002a36063dfcc800d00287c0803a64e8000217f0bbb78556bf80140a20010800d00347c0803a64e8000217c18b80040820064706b00014082000c82c300044800001c973bfffc3c6002a36063dfcc800d00287c0803a64e800021708b00014082000c82a400044800001c973bfffc3c6002a36063dfcc800d00287c0803a64e80002138950000387600007f2803a64bfffee4386000017f2803a64e800020|@6480,1015811|104,3,@1386 148,3,@1386 220,3,@1386 260,3,@1386 6480:S28|50415253455f5452454528292e67656e636f64652837296571283229 6481:C2,348|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc947bfffc3ae000012c0300014082000c3ad70000480000483980000256e0f80140a20010800d00347c0803a64e8000217f37661541a3fff0806300043af90000800d00187c1b004040a00010800d00207c0803a64e8000214bffffb0807b00048323fff0398000083bbdffdc7c1df04040a00010800d001c7c0803a64e8000213b1d0004919d00003ee002b062f7aa6092f8000092d8001c82fb000092f8001882f9000492f8001482a3000092b800108283ffec9298000c933800088263ffe4927800043980000256c0f80140a20010800d00347c0803a64e8000217e4cb41141a3fff0965bfffc3a380000386000013b1b000c3c0002b06000b7f87c0803a64e800021833b000838c3000080b9fff88099ffe88079000c3b110000833b000c801800007c0903a67f2803a63b7b00104e800420|@6496,1048575|176,3,@6482 284,3,@6494 6482:C2,676|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc971bfffc94dbfffc3a9900003a64000038800001386600003c0002b06000a7747c0803a64e80002128030001418200084800002838800001807b00083c0002b06000a7747c0803a64e800021280300014082000848000058825b0004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000090a3000892630004823b000892230000831200043b340000801800007c0903a67f2803a63b7b000c4e8004203a3400003a13000039e5000038a0000138800001386000013b1b00083c0002b06000ad207c0803a64e80002181db0004963bfffc961bfffc95fbfffc947bfffc814e00182c0a0001408200183c6002a0606395e0800d00287c0803a64e8000212c0300014082000c812a000048000048398000025460f80140a20010800d00347c0803a64e8000217d0c1c1141a3fff038680000814a0004800d00187c1b004040a00010800d00207c0803a64e8000214bffff94811b001480e8001480c70004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080a8001090a30004809b000090830000953bfffc8306001c801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d00003b0000019319000482fb000492f900003a43000038990000807b00143c0002b06000b4687c0803a64e800021398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a3d0004919d00003e0002b06210b7189211000081fb001891f100089071000481db001c91db001c925b0018815b0000915b001438d1000080bb000c808f000c807b0008830f0008833b0010801800007c0903a67f2803a63b7b00144e800420|@6493,1048575|60,3,@6479 96,3,@6479 236,3,@6483 284,3,@51 536,3,@6489 588,3,@6491 6483:C2,520|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8fffc82d7001c7cabb378556bf80140a20010800d00347c0803a64e8000217c05b00040820010386400007f2803a64e8000203ab900003a9800003a6300003a4400008094fff8386500003c0002b06000af447c0803a64e800021280300014182014c8094fffc96bbfffc969bfffc967bfffc965bfffc94bbfffc806400182c030001408200183c6002a0606395e0800d00287c0803a64e8000212c0500014082000c80630000480000483980000254a0f80140a20010800d00347c0803a64e8000217f2c2c1141a3fff038b9000080630004800d00187c1b004040a00010800d00207c0803a64e8000214bffff94831b000c3c0002b06000b0a07c0803a64e800021833b00087c6bc838556bf80140a20010800d00347c0803a64e8000217c03c80040810044831b0000398000025700f80140a20010800d00347c0803a64e8000217ef8661541a3fff038b7000038980000831b000c833b00107f2803a63b7b00144bfffe84831b0000398000025700f80140a20010800d00347c0803a64e8000217ef8661541a3fff038b70000809b000438790000831b000c833b00107f2803a63b7b00144bfffe403980000254a0f80140a20010800d00347c0803a64e8000217c85661541a3fff038a4000038920000387300003b1400003b3500007f2803a64bfffe04|@6488,1044487|108,3,@6484 168,3,@51 276,3,@6486 6484:C2,280|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0400014082000c386000014e800020708b00014082000c8304000048000020973bfffc3b0300003c6002a36063dfcc800d00287c0803a64e8000217c6bc378556bf80140a20010800d00347c0803a64e8000217c03c00040820010386000037f2803a64e800020708b00014082000c82e4000048000020973bfffc3ae300003c6002a36063dfcc800d00287c0803a64e8000217c6bb838556bf80140a20010800d00347c0803a64e8000217c03b80040800010386000017f2803a64e800020708b00014082000c82c4000448000020973bfffc3ac300003c6002a36063dfcc800d00287c0803a64e800021389600007f2803a64bfffef4|@6485,983043|72,3,@1386 160,3,@1386 248,3,@1386 6485:S32|50415253455f5452454528292e67656e636f6465283729696e73696465283229 6486:C2,788|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e3000482d700002c16fffd408200a0973bfffc971bfffc82b700043a8000012c1500014082001838740000833b00047f2803a63b7b00084e800020969bfffc80150004941bfffc80750000831b00084bffff91833b00047c6bc838556bf80140a20010800d00347c0803a64e8000217c03c8004081000c3b030000480000083b1900003a98000082bb00003b7b0008800d00187c1b004040a00010800d00207c0803a64e8000214bffff783a7900003a570000809800008063000c3c0002b06000a4bc7c0803a64e8000213a83000038800001387400003c0002b06000a7747c0803a64e80002128030001418201dc809200002c04000140820094967bfffc38600001833200042c1900014082000c3b03000048000048398000025460f80140a20010800d00347c0803a64e8000217ee3661541a3fff08339000438770000800d00187c1b004040a00010800d00207c0803a64e8000214bffffb0398000025700f80140a20010800d00347c0803a64e8000217c78661541a3fff082fb00007ee803a63b7b00044e8000202c04ffff40820094967bfffc38600001833200042c1900014082000c3b03000048000048398000025460f80140a20010800d00347c0803a64e8000217ee3661541a3fff08339000438770000800d00187c1b004040a00010800d00207c0803a64e8000214bffffb0398000025700f80140a20010800d00347c0803a64e8000217c78661541a3fff082fb00007ee803a63b7b00044e8000202c04000340820094967bfffc38600001833200042c1900014082000c3b03000048000048398000025460f80140a20010800d00347c0803a64e8000217ee3661541a3fff08339000438770000800d00187c1b004040a00010800d00207c0803a64e8000214bffffb0398000025700f80140a20010800d00347c0803a64e8000217c78661541a3fff082fb00007ee803a63b7b00044e800020386000017e6803a64e800020728b000140820010807400007e6803a64e800020967bfffc3c6002a36063dfcc800d00287c0803a64e800021|@6487,1044483|220,3,@6477 248,3,@6479 768,3,@1386 6487:S66|50415253455f5452454528292e67656e636f6465283729636f64655061747428372970617474436f64652d6465737061746368283429706174744465707468283129 6488:S68|50415253455f5452454528292e67656e636f6465283729636f64655061747428372970617474436f64652d646573706174636828342966696e6444656570657374283329 6489:C2,620|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e8000202c040001408200084e800020706b00014082000c8303000048000020973bfffc3b0300003c6002a36063dfcc800d00287c0803a64e800021708b00014082000c82e4000048000020973bfffc3ae300003c6002a36063dfcc800d00287c0803a64e8000217f0bbb78556bf80140a20010800d00347c0803a64e8000217c18b80040820064706b00014082000c82c300044800001c973bfffc3c6002a36063dfcc800d00287c0803a64e800021708b00014082000c82a400044800001c973bfffc3c6002a36063dfcc800d00287c0803a64e80002138950000387600007f2803a64bfffef8706b00014082000c82c3000048000020973bfffc3ac300003c6002a36063dfcc800d00287c0803a64e800021708b00014082000c82a4000048000020973bfffc3aa300003c6002a36063dfcc800d00287c0803a64e8000217ecba838556bf80140a20010800d00347c0803a64e8000217c16a800408000ac706b00014082000c8283000048000020973bfffc3a8300003c6002a36063dfcc800d00287c0803a64e800021706b00014082000c826300044800001c973bfffc3c6002a36063dfcc800d00287c0803a64e800021973bfffc969bfffc387300004bfffe15398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021389d0004919d000090640004807b00009064000038640000833b00047f2803a63b7b00084e800020708b00014082000c8284000448000020973bfffc3a8300003c6002a36063dfcc800d00287c0803a64e800021389400007f2803a64bfffda0|@6490,1040387|84,3,@1386 128,3,@1386 200,3,@1386 240,3,@1386 300,3,@1386 344,3,@1386 420,3,@1386 460,3,@1386 588,3,@1386 6490:S30|50415253455f5452454528292e67656e636f646528372964696666283229 6491:C2,64|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180d8000480a30008808300048063000083180008801800007c0903a64e800420|@6492,1048575| 6492:S57|50415253455f5452454528292e67656e636f6465283729636f64655061747428372970617474436f64652d6465737061746368283129283129 6493:S54|50415253455f5452454528292e67656e636f6465283729636f64655061747428372970617474436f64652d6465737061746368283429 6494:C2,200|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8fff47c6bb838556bf80140a20010800d00347c0803a64e8000217c03b80040810010386000017f2803a64e800020398000025460f80140a20010800d00347c0803a64e8000217ec3661541a3fff0973bfffc971bfffc947bfffc387600004bffff81398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b0000931900003879000082fb00087ee803a63b7b000c4e800020|@6495,983041| 6495:S30|50415253455f5452454528292e67656e636f646528372966726f6d283229 6496:S45|50415253455f5452454528292e67656e636f6465283729636f64655061747428372970617474436f64652d2f32 6497:C2,1824|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c04000140820054398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000082f8fff892e3000882d8ffe892c3000482b8ffd492a300008318ffe4801800007c0903a67f2803a64e80042082e400003a7900003a5800003a2300003a17000081e400048092000c807700003c0002b06000a4bc7c0803a64e80002139c3000038800001386e00003c0002b06000a7747c0803a64e800021280300014182001c388f0000387100003b1200003b3300007f2803a64bffff282c110003408200d88152fff0812a00048109001080ea000880c70000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000090c3000880b2000090a300048090000890830000967bfffc965bfffc95dbfffc80100004941bfffc8308004c801800007c0803a64e800021833b00083a4300008099ffd4807b00043c0002b060006ff47c0803a64e800021823b0008821b000c907b000c925b000881fb000091fb000480d1ffe480b1ffe88091ffec8071fff88311fff03b300000801800007c0903a67f2803a63b7b00044e8004208152fff0812a00048109001080ea000880c70000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000090c3000880b2000090a300048090000890830000967bfffc965bfffc963bfffc961bfffc95fbfffc95dbfffc83080048801800007c0803a64e800021833b0008831b001082f8fff082d7000482b6001082970008827400003a430000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00009263000882380000922300048219000892030000965bfffc80190004941bfffc8315004c801800007c0803a64e80002181fb001839c30000808fffd4807b00083c0002b060006ff47c0803a64e800021947bfffc95dbfffc815b0008955bfffc80cfffe480afffe8808fffec806ffff8830ffff0801800007c0803a64e800021813b0014398000025520f80140a20010800d00347c0803a64e8000217d0c4c1141a3fff0947bfffc809b001038680000831b001c4bfffcd580fb001c80c7ffec28060001418201a480a7fff08085000483240004947bfffc80190044941bfffc807b001083190030801800007c0803a64e800021831b000482d800042c1600014082003482bb00248295fff08274000482530004947bfffc386000018312004c801800007c0803a64e8000213ae300004800004c82b600042c1500014082000c82f6000048000034829b00248274fff08253000482320004947bfffc387600008311004c801800007c0803a64e8000213ae3000048000008947bfffc829b00288274fff08253000482320004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000821100009203000892e3000481fb000091e30000831b0004801800007c0803a64e80002181db000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021395d0004919d0000812e0004912a0004906a0000947bfffc947bfffc391b000038e0ffff90e8000038db000091460004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080bb000090a30000809b000490830004833b00347f2803a63b7b00384e80002080bb000080850000832300007c8bcb78556bf80140a20010800d00347c0803a64e8000217c04c80040820030548bf80140a20010800d00347c0803a64e8000212c04000141800014831b00207f0803a63b7b00244e8000208307fff082f8000482d70004828500042c1400014082002c947bfffc80160044941bfffc386000018316004c801800007c0803a64e8000213aa300004800004c827400042c1300014082000c82b400004800002c947bfffc80160044941bfffc387400008316004c801800007c0803a64e8000213aa3000048000010947bfffc80160044941bfffc825b0004821200042c1000014082003481fb002481cffff0814e0004812a000496bbfffc386000018309004c801800007c0803a64e8000213a2300004800004c81f000042c0f00014082000c823000004800003481db0024814efff0812a00048109000496bbfffc387000008308004c801800007c0803a64e8000213a2300004800000896bbfffc398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00009223000881db000091c30004815b001491430000831b0004801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021393d0004919d0000390000019109000490690000947bfffc947bfffc38fb000038c0ffff90c7000038bb000091250004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000809b000090830000833b000493230004831b00347f0803a63b7b00384e800020|@6498,1048575|152,3,@6477 180,3,@6479 364,3,@6419 696,3,@6419 6498:S47|50415253455f5452454528292e67656e636f6465283729636f64655061747428372967656e436f6e73747273283229 6499:C2,1720|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c03000140820054398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000082f8fff892e3000882d8ffe892c3000482b8ffd492a300008318ffe4801800007c0903a67f2803a64e80042082e300003a7900003a5800003a370000820300048092000c807700003c0002b06000a4bc7c0803a64e80002139e3000038800001386f00003c0002b06000a7747c0803a64e8000212803000141820018387000003b1200003b3300007f2803a64bffff30967bfffc965bfffc963bfffc95fbfffc387000003b1200004bffff0d81db0008814efff0398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021393d0004919d00003d0002b06108c7849109000080eeffec90e9000c80ca000c90c900089069000480aa000480850010833b0004830a000882f800003ac30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092e3000882ae000092a30004829900089283000096dbfffc953bfffc83040048801800007c0803a64e800021827b000c825b00108232fff08211000481f0001081d10008814e000039230000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000091430008811200009103000480f3000890e30000953bfffc80130004941bfffc830f004c801800007c0803a64e80002180db001880bb001094bbfffc947bfffc809b0008949bfffc8066ffe48326ffec8306fff882e6fff038c3000080bb001438990000387800003b170000801800007c0803a64e80002182db001882b6ffec28150001418201a48296fff08274000482530004947bfffc80120044941bfffc807b000c83120030801800007c0803a64e800021823b001481f100042c0f00014082003481db0020814efff0812a000481090004947bfffc386000018308004c801800007c0803a64e8000213a0300004800004c81cf00042c0e00014082000c820f000048000034815b0020812afff08109000480e80004947bfffc386f00008307004c801800007c0803a64e8000213a03000048000008947bfffc815b0024812afff08109000480e80004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000080c7000090c300089203000480bb000090a30000831b0004801800007c0803a64e800021809b0008398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d0000830400049319000490790000947bfffc947bfffc3afb00003ac0ffff92d700003abb000093350004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000829b000092830000827b000492630004825b00307e4803a63b7b00344e800020829b000c82630000825400007e6b9378556bf80140a20010800d00347c0803a64e8000217c13900040820034566bf80140a20010800d00347c0803a64e8000212c1300014180001838740000823b001c7e2803a63b7b00204e8000208236fff08211000481f00004814300042c0a000140820030800f0010941bfffc800f0044941bfffc38600001830f004c801800007c0803a64e80002139c3000048000054812a00042c0900014082000c81ca000048000030800f0010941bfffc800f0044941bfffc80630004830f004c801800007c0803a64e80002139c3000048000014800f0010941bfffc800f0044941bfffc811b002080e8fff080c7000480a60004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00008085000c9083000891c30004833b000c93230000831b0000801800007c0803a64e800021831b001482d800042c1600014082003482bb00208295fff08274000482530004947bfffc386000018312004c801800007c0803a64e8000213ae300004800004c82b600042c1500014082000c82f6000048000034829b00208274fff08253000482320004947bfffc387600008311004c801800007c0803a64e8000213ae3000048000008947bfffc398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092e30004829b000092830000831b0008801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a7d0004919d00003a4000019253000490730000947bfffc947bfffc3a3b00003a00ffff9211000039fb0000926f0004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000081db000091c30000815b000491430004813b00307d2803a63b7b00344e800020|@6502,1048575|148,3,@6477 176,3,@6479 292,3,@6500 6500:C2,28|8078000c280300014182000c807800044e800020807800084e800020|@6501,786433| 6501:S64|50415253455f5452454528292e67656e636f6465283729636f64655061747428372967656e45786e436f6e73747273283129636f646544656661756c74283129 6502:S50|50415253455f5452454528292e67656e636f6465283729636f64655061747428372967656e45786e436f6e73747273283129 6503:C2,1740|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c03000140820054398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000082f8fff892e3000882d8ffe892c3000482b8ffd492a300008318ffe4801800007c0903a67f2803a64e80042082e300003a7900003a5800003a370000820300048092000c807700043c0002b06000a4bc7c0803a64e80002139e3000038800001386f00003c0002b06000a7747c0803a64e8000212803000141820018387000003b1200003b3300007f2803a64bffff30815100082c0a0001408200188132fff08109000480e8000481c70004480000408132fff08109000480e80004967bfffc965bfffc963bfffc961bfffc95fbfffc806a000083070014801800007c0803a64e80002139c3000048000018967bfffc965bfffc963bfffc961bfffc95fbfffc80db000c80a6fff08085000480640004833b0008398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b1d0004919d00003ae0000192f8000482c6000092d8000082a3002882830050398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00009303000491c3000096bbfffc80190000941bfffc3b140000801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a7d0004919d00003a4000019253000490730000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003a2000039223000892630004821b000092030000831b0004801800007c0803a64e80002181fb001439c30000808fffd4807b00083c0002b060006ff47c0803a64e80002139430000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000812ffff891230008810fffe8910300049143000095dbfffc830fffe4801800007c0803a64e800021947bfffc807b0014831b001c4bfffd2980fb001c80c7ffec28060001418201a480a7fff08085000483240004947bfffc80190044941bfffc807b000c83190030801800007c0803a64e800021831b000482d800042c1600014082003482bb00248295fff08274000482530004947bfffc386000018312004c801800007c0803a64e8000213ae300004800004c82b600042c1500014082000c82f6000048000034829b00248274fff08253000482320004947bfffc387600008311004c801800007c0803a64e8000213ae3000048000008947bfffc829b00288274fff08253000482320004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000821100009203000892e3000481fb000091e30000831b0004801800007c0803a64e80002181db000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021395d0004919d0000812e0004912a0004906a0000947bfffc947bfffc391b000038e0ffff90e8000038db000091460004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080bb000090a30000809b000490830004833b00347f2803a63b7b00384e80002080bb000080850000832300007c8bcb78556bf80140a20010800d00347c0803a64e8000217c04c80040820030548bf80140a20010800d00347c0803a64e8000212c04000141800014831b00207f0803a63b7b00244e8000208307fff082f8000482d70004828500042c1400014082002c947bfffc80160044941bfffc386000018316004c801800007c0803a64e8000213aa300004800004c827400042c1300014082000c82b400004800002c947bfffc80160044941bfffc387400008316004c801800007c0803a64e8000213aa3000048000010947bfffc80160044941bfffc825b0004821200042c1000014082003481fb002481cffff0814e0004812a000496bbfffc386000018309004c801800007c0803a64e8000213a2300004800004c81f000042c0f00014082000c823000004800003481db0024814efff0812a00048109000496bbfffc387000008308004c801800007c0803a64e8000213a2300004800000896bbfffc398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00009223000881db000091c30004815b001091430000831b0004801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021393d0004919d0000390000019109000490690000947bfffc947bfffc38fb000038c0ffff90c7000038bb000091250004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000809b000090830000833b000493230004831b00347f0803a63b7b00384e800020|@6504,1048575|148,3,@6477 176,3,@6479 620,3,@6419 6504:S57|50415253455f5452454528292e67656e636f6465283729636f64655061747428372970617474436f64652d666f6c64436f6e73747273283129 6505:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c8078ffd04e800020973bfffc971bfffc80030000941bfffc806300044bffffbd398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b00009319000038790000833b00087f2803a63b7b000c4e800020|@468,786433| 6506:S34|50415253455f5452454528292e67656e636f6465283729636f646550617474283729 6507:C2,500|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0400014082000c386000014e80002082f8000482d7000882b60054973bfffc971bfffc947bfffc949bfffc8064000083150008801800007c0803a64e800021829b000882740004825300088232004880030008941bfffc807b000083110000801800007c0803a64e8000212803000141820104821b000c81f0000481cf0008814e0048807b0000830a0008801800007c0803a64e800021812300008109000080fb000480db000c80a6000480850004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003b200001932300049103000080070004941bfffc83040018801800007c0803a64e800021831b000c398000025700f80140a20010800d00347c0803a64e8000217eecc41141a3fff0947bfffc809b000438770000831b00144bfffeb5398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213add0004919d00009076000482bb000092b6000038760000829b00187e8803a63b7b001c4e800020821b000c81f0000481cf0020398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021395d0004919d00003d2002b06129d250912a00083d0002a06108c7ac910a000480ee000490ea0000386a0000800d00287c0803a64e800021|@6509,1048575|452,3,@6508 464,3,@227 6508:S11|6d616b654172674c697374 6509:S37|50415253455f5452454528292e67656e636f64652837296d616b654172676c697374283229 6510:C2,1844|7f2802a6633900023960006c800d00187d6bd8107c0b004040a00010800d00247c0803a64e80002182fb00002c17000140820010386000013b7b00184e80002082d7000082b600002c15ffeb4082068882960004827b0004726b000140820618973bfffc971bfffc947bfffc949bfffc94bbfffc94dbfffc80140000941bfffc80140004941bfffc80170004941bfffc80130000941bfffc80130004941bfffc3a400001823b00042c1100014082000c3a12000048000048398000025640f80140a20010800d00347c0803a64e8000217cd2661541a3fff0823100043a460000800d00187c1b004040a00010800d00207c0803a64e8000214bffffb080db00383980000254c0f80140a20010800d00347c0803a64e8000217cac341141a3fff054abf80140a20010800d00347c0803a64e8000212c0500014080000848000030809b003c806400007cab1838556bf80140a20010800d00347c0803a64e8000217c05180040800008480000183c6002a0606395e0800d00287c0803a64e8000213980000254a0f80140a20010800d00347c0803a64e8000217f25661541a3fff0572c083a7f04602e389800002c0400014082008c961bfffc94bbfffc949bfffc3880ffff386600003c0002a06000fe6c7c0803a64e800021388300003c6002b06063d9e43c0002a1600074a87c0803a64e8000213c8002b06084d9f43c0002a1600074a87c0803a64e80002182db0030947bfffc80db001c80bb003038800001807b002c83160010801800007c0803a64e8000213ae30000480000143ae00001961bfffc94bbfffc949bfffc82db003082b6000882950000398000025680f80140a20010800d00347c0803a64e8000217e74661541a3fff092750000398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a5d0004919d0000823b0020923200083a0000019212000481fb000891f2000081db00102c0e00014082000c395200004800009c947bfffc947bfffc947bfffc800e0004941bfffc38bb000438920000806e00003b1b00443c0002b06000da0c7c0803a64e800021398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021393d0004919d0000811b00049109000080fb000890e9000480db000c90c900083a49000081db00003b7b0010800d00187c1b004040a00010800d00207c0803a64e8000214bffff5c813b00308109000480e80004398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d000080db001890c3000c80bb004c90a30008808a000890830004833b001c93230000800a0004941bfffc8007004c941bfffc831b002c801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b1d0004919d00003ae0000192f80004907800002c1800014082000c807b000448000024971bfffc807b00083b1b00403c0002b06000ddd87c0803a64e8000213b7b0004831b0000801800007c0803a64e80002182db003882b6000882950000398000025680f80140a20010800d00347c0803a64e8000217e6ca41141a3fff092750000823b00082c110003408200148216000481f00004824f0024480000108216000481f00004824f002081d50000947bfffc965bfffc95dbfffc3880005f807b00603c0002a1600074a87c0803a64e800021947bfffc3880ffff807b005c3c0002a06000fe6c7c0803a64e80002138830000807b00003c0002a1600074a87c0803a64e80002139430000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00009143000c813b002091230008811b00049103000480fb000c90e30000831b0008801800007c0803a64e80002180db004880a6000480850004833b0058831b001c3998ffff7f2bc0385560f80140a20010800d00347c0803a64e8000217ef9661541a3fff03ac30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092c3000492e3000083040040801800007c0803a64e80002182bb005c3980000256a0f80140a20010800d00347c0803a64e8000217e95661541a3fff0947bfffc827b0068967bfffc825b0068965bfffc969bfffc823b0068963bfffc821b0038961bfffc81fb004495fbfffc80db005480bb0058809b005c807b0060831b00644bfff9d5398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002139dd0004919d0000906e0004815b0000914e0000386e0000813b00507d2803a63b7b006c4e800020973bfffc8258000482320020398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a1d0004919d00003de002b061efde8091f000083dc002a061cec7ac91d00004815100049150000038700000800d00287c0803a64e800021973bfffc8298000482740020398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a5d0004919d00003e2002b06231de80923200083e0002a06210c7ac9212000481f3000491f2000038720000800d00287c0803a64e800021|@6518,1048575|364,3,@51 456,3,@316 476,3,@6511 484,3,@511 500,3,@6512 508,3,@511 752,3,@6513 1056,3,@6516 1204,3,@511 1232,3,@316 1256,3,@511 1700,3,@6517 1712,3,@227 1796,3,@6517 1808,3,@227 6511:S8|5061747465726e20 6512:S14|20697320726564756e64616e742e 6513:C2,724|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8fffc82d7000482b6000882950054973bfffc971bfffc947bfffc949bfffc94bbfffc83140008801800007c0803a64e800021827b000c8253fffc823200048211000881f0004880030008941bfffc807b0000830f0000801800007c0803a64e80002128030001418201e881db0010814efffc812a00048109000880e80048807b000083070008801800007c0803a64e80002180db000880bb00108085fffc832400048319000482e600003980000256e0f80140a20010800d00347c0803a64e8000217ed7641141a3fff082a3000082830004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003a6000019263000492c3000096bbfffc969bfffc96fbfffc80060004941bfffc80060008941bfffc83180018801800007c0803a64e800021947bfffc947bfffc947bfffc825b00308232fffc38db000038a30000809b000c807b002c8311000c801800007c0803a64e800021821b0014398000025600f80140a20010800d00347c0803a64e8000217df0641141a3fff081db001c91ee0000815b0030812afffc8109000880e8000080db001890e60000398000025600f80140a20010800d00347c0803a64e8000217cac841141a3fff0807b00002c0300014082000c809b001048000020807b00103b1b00343c0002b06000dcfc7c0803a64e80002138830000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d0000831b00089319000482fb000492f9000082db002490b6000090960004933600083860000182bb00347ea803a63b7b00384e80002081db0010814efffc812a000481090020398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002138fd0004919d00003cc002b060c6a08890c700083ca002a060a5c7ac90a70004808800049087000038670000800d00287c0803a64e800021|@6515,1048575|516,3,@6514 676,3,@6473 688,3,@227 6514:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c8078ffcc4e800020973bfffc971bfffc80030000941bfffc806300044bffffbd398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b00009319000038790000833b00087f2803a63b7b000c4e800020|@468,786433| 6515:S43|50415253455f5452454528292e67656e636f64652837296367457870732831302973657441646472283329 6516:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c8078ffc04e800020973bfffc971bfffc80030000941bfffc806300044bffffbd398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b00009319000038790000833b00087f2803a63b7b000c4e800020|@468,786433| 6517:S6|636745787073 6518:S33|50415253455f5452454528292e67656e636f646528372963674578707328313029 6519:C2,1636|7f2802a66339000239600054800d00187d6bd8107c0b004040a00010800d00247c0803a64e800021973bfffc971bfffc947bfffc949bfffc94bbfffc94dbfffc3ae000012c0400014082000c3ad70000480000483980000256e0f80140a20010800d00347c0803a64e8000217cd7661541a3fff0808400043ae60000800d00187c1b004040a00010800d00207c0803a64e8000214bffffb082bb001096dbfffc807b000c83150030801800007c0803a64e800021947bfffc807b00103b1b001c3c0002b06000e53c7c0803a64e800021829b0010728b00014082003882540000823200002c11ffeb408200108212000482700004480000343a0300003c6002a160630a30800d00287c0803a64e8000213a6300003c6002a160630a30800d00287c0803a64e80002181fb001881cf0004814e0004812f00248109000038e30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00009103000880cf002890c3000480bb000c90a3000094fbfffc967bfffc830a0068801800007c0803a64e800021809b0020832400243b03000080790000971bfffc83180004801800007c0803a64e80002182fb002482d7002082b60000829b00103994ffff7eaba0385560f80140a20010800d00347c0803a64e8000217e75661541a3fff092760000398000025680f80140a20010800d00347c0803a64e8000217e54661541a3fff03a23000038a0000138800081387200003f000000631841c8801800007c0803a64e800021928300003d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213a1d0004919d000039e0000391f0000081db002c280e000141820048813b0024398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021395d0004919d00003d0002b06108e6b8910a000080e9001890ea0008922a000448000044815b0024812a001c398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021395d0004919d00003d0002b06108e7d8910a0000920a0008912a000438e30000386000033b1b00283c0002b06000e8087c0803a64e80002180db00243980000a3bbdffd47c1df04040a00010800d001c7c0803a64e80002138bd0004919d00003c8002b06084e8ec9085000090e5002492850020833b00089325001c830600149305001892a5001482fb001c92e5001082c6000492c5000c827b003092650008825b003892450004398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002139fd0004919d00003d2002b06129ef8c912f000090af000496bbfffc94fbfffc961bfffc947bfffc963bfffc811b0020951bfffc80a6001038cf00003885000038aa000038640000388000013b030000807b004c801800007c0803a64e80002182fb000082d700002816000140820040829b0030947bfffc3e6002b06273f018967bfffc80db001880bb003438800001807b00288314000c801800007c0803a64e8000213aa300004800000c3aa00001947bfffc82bb00202c150003408200c4829b0010827b0000823300042c1100014082000c8254000048000028963bfffc807400003b1b003c3c0002b06000f03c7c0803a64e8000213a4300003b7b00042c12000140820030821b003481f0000481cf000438600001830e004c833b0038801800007c0903a67f2803a63b7b004c4e800420821200042c100001408200188072000081fb00387de803a63b7b004c4e80002081fb003481cf0004814e000438720000830a004c833b0038801800007c0903a67f2803a63b7b004c4e800420829b0034827b0048967bfffc825b000c965bfffc3a200003963bfffc821b0018961bfffc81fb002895fbfffc81db004095dbfffc80db005c80bb0058809b003c807b004883140008801800007c0803a64e800021815b0010813b000080e900042c0700014082000c390300004800002494fbfffc3b1b003c3c0002b06000f0e47c0803a64e800021390300003b7b00042c0800014082000c80ca000048000028951bfffc806a00003b1b003c3c0002b06000f18c7c0803a64e80002138c300003b7b00042c0600014082003480bb003480850004806400048323004c386000013b190000833b0038801800007c0903a67f2803a63b7b004c4e80042080a600042c0500014082001880660000809b00387c8803a63b7b004c4e800020809b00348064000483230004386600008319004c833b0038801800007c0903a67f2803a63b7b004c4e800420|@6535,1048575|192,3,@6520 252,3,@341 276,3,@341 540,3,I11 664,3,@6522 736,3,@6524 768,3,@6525 824,3,@6526 932,3,@6529 1044,3,@6531 1156,3,@6532 1428,3,@6533 1480,3,@6534 6520:C2,308|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e80002082e3000082b700002c15ffeb4082003c829700048278fffc973bfffc971bfffc80030004941bfffc80940008386000018313002c801800007c0803a64e8000213ac300004800006c973bfffc8298fffc8274000482530020398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a3d0004919d00003e0002b06210e68c921100083de002a061efc7ac91f1000481d2000491d100008143000438710000800d00287c0803a64e80002196dbfffc807b0004831b00084bffff15398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a5d0004919d000090720004823b00009232000038720000821b000c7e0803a63b7b00104e800020|@234,1048575|172,3,@6521 184,3,@227 6521:S36|66696e64416c6c56617273202d206261646c7920666f726d656420706172736574726565 6522:C2,200|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc8078000483180008801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d00003b0000019319000490790000947bfffc947bfffc3afb00003ac0000192d700003abb000093350004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000829b000092830000827b000492630004825b00087e4803a63b7b000c4e800020|@6523,1048575| 6523:S50|50415253455f5452454528292e67656e636f6465283729636f64654d61746368283829636f646544656661756c742d283129 6524:C2,20|807800083ae0000192e30000807800044e800020|@6523,917505| 6525:C2,200|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8ffe87c6bb838556bf80140a20010800d00347c0803a64e8000217c03b80040810010386000017f2803a64e800020398000025460f80140a20010800d00347c0803a64e8000217ec3661541a3fff0973bfffc971bfffc947bfffc387600004bffff81398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b0000931900003879000082fb00087ee803a63b7b000c4e800020|@6495,983041| 6526:C2,1572|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000213a9900003a7800003a4300003a24000038800001387200003c0002b06000a7747c0803a64e8000212803000141820020386000013b1100003b340000801800007c0903a67f2803a64e800420724b00014082000c821200004800001c969bfffc3c6002a36063dfcc800d00287c0803a64e800021398000025600f80140a20010800d00347c0803a64e8000217dec841141a3fff055ebf80140a20010800d00347c0803a64e8000212c0f0001408000084800003081d30024814e00007deb5038556bf80140a20010800d00347c0803a64e8000217c0f5000408000084800001c969bfffc3c6002a0606395e0800d00287c0803a64e8000213980000255e0f80140a20010800d00347c0803a64e8000217d2f661541a3fff0552c083a7d0e602e39c800003980000255c0f80140a20010800d00347c0803a64e8000217cee661541a3fff055ebf80140a20010800d00347c0803a64e8000212c0f0001408000084800003080d30024808600007deb2038556bf80140a20010800d00347c0803a64e8000217c0f2000408000084800001c969bfffc3c6002a0606395e0800d00287c0803a64e8000213980000255e0f80140a20010800d00347c0803a64e8000217c6f661541a3fff0546b083a7ce6592e833300202c190003408201cc83130010730b00014082016082f8000082d700002c16ffeb408200f082b70004398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d0000825500049243000c823300049223000890a3000481f5000091e30000969bfffc961bfffc83130008801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002139dd0004919d000039400001914e0004906e0000947bfffc947bfffc393b0000811b00089109000038fb000091c70004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080db000090c3000080bb000490a30004809b000c7c8803a63b7b00104e800020969bfffc82b3000c82550020398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a3d0004919d00003e0002b06210ef2c921100083de002a061efc7ac91f1000481d2000491d1000038710000800d00287c0803a64e800021969bfffc82f3000c82d70020398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003e4002b06252ef2c925500083e2002a06231c7ac92350004821600049215000038750000800d00287c0803a64e800021969bfffc967bfffc961bfffc95fbfffc8313001c2c180001408200183c6002a0606395e0800d00287c0803a64e8000212c0f00014082000c82f80000480000483980000255e0f80140a20010800d00347c0803a64e8000217ecc7c1141a3fff039f6000083180004800d00187c1b004040a00010800d00207c0803a64e8000214bffff9496fbfffc3ac000012c1700014082000c3ab60000480000483980000256c0f80140a20010800d00347c0803a64e8000217e96661541a3fff082f700043ad40000800d00187c1b004040a00010800d00207c0803a64e8000214bffffb0829b000c809b00003875000083140018801800007c0803a64e800021827b000c8253000c823200048213001481fb0004398fffff7e0b78385560f80140a20010800d00347c0803a64e8000217dd0661541a3fff039430000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000392000019123000491c30000955bfffc80110028941bfffc83110018801800007c0803a64e80002139030000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000038e0000190e3000880db000490c3000491030000831b0000801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138bd0004919d0000388000019085000490650000947bfffc947bfffc387b0000833b0018932300003b1b000090b80004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082fb000092e3000082db000492c3000482bb00207ea803a63b7b00244e800020|@6528,1048575|56,3,@6479 128,3,@1386 260,3,@51 436,3,@51 820,3,@6527 832,3,@227 916,3,@6527 928,3,@227 992,3,@51 6527:S34|636f64654d61746368202d206261646c7920666f726d656420706172736574726565 6528:S43|50415253455f5452454528292e67656e636f6465283729636f64654d61746368283829636f64652d283329 6529:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@6530,1048575| 6530:S43|50415253455f5452454528292e67656e636f6465283729636f64654d61746368283829636f64652d283129 6531:S27|4d61746368657320617265206e6f7420657868617573746976652e 6532:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c8078ffc44e800020973bfffc971bfffc80030000941bfffc806300044bffffbd398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b00009319000038790000833b00087f2803a63b7b000c4e800020|@468,786433| 6533:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c8078ffc44e800020973bfffc971bfffc80030000941bfffc806300044bffffbd398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b00009319000038790000833b00087f2803a63b7b000c4e800020|@468,786433| 6534:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c8078ffc44e800020973bfffc971bfffc80030000941bfffc806300044bffffbd398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b00009319000038790000833b00087f2803a63b7b000c4e800020|@468,786433| 6535:S35|50415253455f5452454528292e67656e636f6465283729636f64654d61746368283829 6536:C2,608|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc947bfffc949bfffc94bbfffc94dbfffc80db001c3ca002b060a596ec38800003807b00088318001c801800007c0803a64e800021833b00108319001882f8000482d9000882b600003a830000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a300088279001492630004825b000092430000969bfffc83170068801800007c0803a64e800021823b00148211000839e300008070000095fbfffc830f0004801800007c0803a64e8000213d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e80002139dd0004919d000039400003914e0000813b0018398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021391d0004919d00003ce002b060e7f4dc90e8000091c8000880c9001090c8000495dbfffc3ca002a060a5ee1494bbfffc947bfffc809b0010949bfffc3cc002b060c6f54438a8000038800003807b00248309000c801800007c0803a64e800021833b000083190000281800014082006482fb001c82d7000882b6000056abf80140a20010800d00347c0803a64e8000212c1500014081003c947bfffc3e6002b06273f660967bfffc80db001c80bb002c38800001807b001883170004801800007c0803a64e8000213a8300004800000c3a800001947bfffc82fb000882db000082b600042c1500014082001880770000829b00247e8803a63b7b00304e80002096bbfffc807700003b1b00283c0002b06000f6847c0803a64e800021829b00287e8803a63b7b00344e800020|@6544,1048575|60,3,@6463 316,3,@6537 344,3,@265 368,3,@6539 464,3,@6542 576,3,@6543 6537:C2,20|807800083ae0000192e30000807800044e800020|@6538,917505| 6538:S48|50415253455f5452454528292e67656e636f6465283729636f646542696e64283629636f646544656661756c74283129 6539:O1|@6540 6540:C2,196|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000213a9900008263000438800001806300003c0002b06000a7747c0803a64e8000212803000141820020386000013b1300003b340000801800007c0903a67f2803a64e800420947bfffc947bfffc3a5b00003a20ffff923200003a1b000039e0000191f00004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000081db000091c30000815b0004914300047e8803a63b7b00084e800020|@6541,1048575|48,3,@6479 6541:S42|50415253455f5452454528292e67656e636f6465283729636f646542696e64283629636f64652d283129 6542:S26|5061747465726e206973206e6f7420657868617573746976652e 6543:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c8078ffd84e800020973bfffc971bfffc80030000941bfffc806300044bffffbd398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b00009319000038790000833b00087f2803a63b7b000c4e800020|@468,786433| 6544:S34|50415253455f5452454528292e67656e636f6465283729636f646542696e64283629 6545:C2,3124|7f2802a66339000239600058800d00187d6bd8107c0b004040a00010800d00247c0803a64e8000213d804000398c00123bbdffb47c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002b162d603a892d700003ac0000192d700043ac0000192d700083ac0000192d7000c3ac0000192d700103ac0000192d700143ac0000192d700183ac0000192d7001c3ac0000192d700203ac0000192d700243ac0000192d700283ac0000192d7002c3ac0000192d700303ac0000192d700343ac0000192d700383ac0000192d7003c3ac0000192d700403ac0000192d700443d804000398c000c3bbdffcc7c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002b162b5235892b600003aa0000192b600043aa0000192b600083aa0000192b6000c3aa0000192b600103aa0000192b600143aa0000192b600183aa0000192b6001c3aa0000192b600203aa0000192b600243aa0000192b600283aa0000192b6002c398000073bbdffe07c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003e8002b162942ee09295000082980028929500188278000492750014825800409255001092f5000c823800389235000882180058921500049276000481f8000c91f6000881d8001891d6000c81580048915600108138001091360014811800149116001880f8001c90f6001c92b600208218002092160024909600288238002c9236002c398000007d8c0e709996fffc825800389257000491f700089277000c8278004c9277001091570014829800509297001892d7001c9317002081f8005491f7002481d8005891d700288158003c9157002c8138005c91370030811800609117003480f8001090f70038821800409217003c82380044923700408258002892570044398000007d8c0e709997fffc2c0300014082001c38a0000190a6000090860004386000017f2803a64e800020706b000140820018947bfffc80030000941bfffc807b000048000020947bfffc973bfffc3c6002a36063dfcc800d00287c0803a64e80002128120001408200084800003082710000828300047e8b9b78556bf80140a20010800d00347c0803a64e8000217c149800418200084800000c3a80000148000070973bfffc971bfffc949bfffc94bbfffc94dbfffc96fbfffc96dbfffc96bbfffc38b40000807b001083180040801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a9d0004919d00003a600001927400049074000048000024973bfffc971bfffc949bfffc94bbfffc94dbfffc96fbfffc96dbfffc96bbfffc827b0024726b00014082000c82530000480000183c6002a36063dfcc800d00287c0803a64e800021947bfffc947bfffc82320000821100002c10fff3408201f8969bfffc963bfffc80110004941bfffc81fb00002c0f00014082000c39c0000148000048800f0004941bfffc806f00003b1b003c3c0002b1600032207c0803a64e80002181fb00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffffb0807b00003b1b00383c0002b1600034207c0803a64e800021947bfffc807b00043f0002b163184e08801800007c0803a64e800021947bfffc947bfffc815b003838bb0000809b0034830a0008801800007c0803a64e800021813b0008712b0001408200c4810900042c08000140820050398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138fd0004919d000080db000090c7000480a9000090a70000389b001890e40000387b0018833b0004932300044800063c80fb003880c7000480a600043869000083050058801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021389d0004919d0000833b000093240004906400003b1b0018909800003afb001882db000492d70004480005d4811b003880e8000480c700043869000083060058801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138bd0004919d0000809b00009085000490650000387b001890a300003b3b0018831b0004931900044800056c2c10ffe3408200a481f1001081cf0000969bfffc963bfffc95dbfffc807100043b1b00383c0002b160004ebc7c0803a64e800021947bfffc947bfffc815b0034947bfffc38bb0004809b0034807b000c830a0008801800007c0803a64e800021811b00042c0800014082000c813b000048000020807b00003b1b00443c0002b160005bb07c0803a64e8000213923000038fb00189127000038db001880bb000890a60004480004c42c1000154082010081f1001081cf0000969bfffc947bfffc947bfffc80110008941bfffc95dbfffc38db000880bb002c809b00308071000c831b00344bfff921947bfffc947bfffc38db000080bb0034809b0014807b000c831b003c4bfff901947bfffc947bfffc815b004438bb0000809b0040807b0010830a0008801800007c0803a64e800021811b00002c0800014082000c813b000848000020807b00083b1b00503c0002b160005c587c0803a64e800021392300002c0900014082000c80fb001848000028953bfffc807b001c3b1b00543c0002b160005d007c0803a64e80002138e300003b7b000438db002490e6000038bb0024809b000490850004480003bc2c10000b408200b0969bfffc80110004941bfffc807b00003b1b00343c0002b160005da87c0803a64e800021947bfffc807b00043f0002b1631861ec801800007c0803a64e800021947bfffc947bfffc81fb003438bb0000809b0030830f0008801800007c0803a64e800021815b00002c0a00014082000c81db000848000020807b00083b1b00403c0002b1600062a07c0803a64e80002139c30000393b001491c90000391b001480fb000490e80004480002f82c10000140820190969bfffc80110004941bfffc80110008941bfffc81fb00002c0f00014082000c39c0000148000090814f0000812a00048109000080ea001080c7000080bb002c80850004806400088323006c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000090c3000491030000800f0004941bfffc3b190000801800007c0803a64e80002181fb00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffff68947bfffc947bfffc38db000080bb002c809b0030807b000c831b00344bfff6cd815b00082c0a00014082000c392000014800008c810a000080e8000480c7000080bb003480850004806400088323006c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003b0000019303000490c30000800a0004941bfffc3b190000801800007c0803a64e800021815b00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffff6c391b001480fb000090e8000038db001480bb000490a60004480001642c100007408200f8398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002139fd0004919d000081db001c91cf000439400001914f0000969bfffc813100082c0900014082000c390f000048000090947bfffc947bfffc80090004941bfffc38bb0004388f0000806900003b1b003c3c0002b1600063487c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138fd0004919d000080db000490c7000080bb000890a7000439e70000813b00003b7b000c800d00187c1b004040a00010800d00207c0803a64e8000214bffff6838fb000480c8000090c7000038bb00048088000490850004480000582c1000174082003481f1000881cf0000815b0020969bfffc38bb0004809b0020386e0000830a0008801800007c0803a64e8000214800002039fb000039c0000191cf0000395b0000813b001c912a0004969bfffc947bfffc947bfffc947bfffc947bfffc947bfffc947bfffc947bfffc947bfffc3b7b000c811b0044710b00014082000c80e80004480000183c6002a36063dfcc800d00287c0803a64e800021947bfffc947bfffc38db000080bb0038809b002438670000831b00404bfff45980bb00002c0500014082000c80db002048000020807b00203b1b004c3c0002b1600065347c0803a64e80002138c300002c0600014082000c809b001c4800002894dbfffc807b00203b1b00503c0002b1600065dc7c0803a64e800021388300003b7b0004807b003490830000833b00049323000438600001831b00447f0803a63b7b00504e800020|@6634,1048575|80,3,@6546 268,3,@6571 404,3,@6576 744,3,@1386 988,3,@1386 1084,3,@6582 1144,3,@6584 1168,3,@6601 1568,3,@6603 1656,3,@6619 1864,3,@6620 1912,3,@6621 1988,3,@6622 2012,3,@6626 2096,3,@6628 2660,3,@6629 2936,3,@1386 3016,3,@6632 3064,3,@6633 6546:C2,4144|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021971bfffc94bbfffc94dbfffc949bfffc82e300002c17fff14082028480a300088085000082d8000c82b6000882950054973bfffc8003000c941bfffc949bfffc3864000083140008801800007c0803a64e800021827b00188253000c823200088211005c80030004941bfffc807b000083100000801800007c0803a64e800021280300014182008081fb001c81cf000c814e0010812f00088109000080fb000880c70000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d000080bb001490a30010808f00049083000c90c3000891030004833b000493230000830a0030833b000c801800007c0903a67f2803a63b7b00204e80042081fb001c81cf000c814e0008812a0058807b000083090000801800007c0803a64e80002128030001418200f4811b001c80e8000c80c7000880a60058807b000083050008801800007c0803a64e800021809b001c8064000c832300108304000882f8000082db000882b60000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d0000829b001492830010826400049263000c92a3000892e30004825b0004924300008319002c801800007c0803a64e800021823b001c8211000c81f0000439c30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000091c300043940000391430000830f001c833b000c801800007c0903a67f2803a63b7b00204e800420811b001c80e8000c80c7001080a8000880850000807b000883230000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d0000831b00149303001082e8000492e3000c932300089083000482db000492c300008306002c833b000c801800007c0903a67f2803a63b7b00204e8004202c17ffed4082008482c3000482b60000973bfffc947bfffc38b50000808300088063000c83180010801800007c0803a64e800021706b000140820030829b00108274000c825300048063000083120014833b0000801800007c0903a67f2803a63b7b00144e800420829b00108274000c8253000480720000823b00007e2803a63b7b00144e8000202c17000340820168973bfffc80030004941bfffc806300084bfffca582db000082b600002c15fff14082008c82960008827400008256000c82320000821b001481f0000c81cf001081500008812a000039030000398000063bbdffe47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080fb000c90e3001480d0000490c300109223000c912300089103000492630000830e0034833b0004801800007c0903a67f2803a63b7b00184e800420829b00148274000c82530004947bfffc80120028941bfffc80db001480bb0018809b0010387600003b1400004bfffbdd398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a3d0004919d00003a0000019211000481fb000491f1000039c30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000039400001914300089223000491c30000831b0000833b000c801800007c0903a67f2803a63b7b00204e8004202c170005408200c082d8000c82b60004973bfffc80030008941bfffc8003000c941bfffc80150044941bfffc806300044bfffb21947bfffc80db001880bb001c809b0014807b0008831b00204bfffb05947bfffc80db001c80bb0020809b0018807b0010831b00244bfffae93a830000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092830008827b000092630004825b000492430000831b0008833b0014801800007c0903a67f2803a63b7b00284e8004202c17001b4082008082c3000472cb00014082004882b600042c15000140820010807600003b7b00104bfffa6c973bfffc806300043b1b00103c0002b1600013f47c0803a64e800021829b00007e8803a63b7b00144e800020973bfffc806300043b1b00103c0002b1600013f47c0803a64e80002182bb00007ea803a63b7b00144e8000202c1700114082008c82c3000c72cb00014082005082b600042c1500014082001482960000807400043b7b00104bfff9e4973bfffc38960000806300083b1b00103c0002b1600015887c0803a64e800021829b00007e8803a63b7b00144e800020973bfffc38960000806300083b1b00103c0002b1600015887c0803a64e80002182bb00007ea803a63b7b00144e8000202c17ffe74082022482d8000c82b6000c973bfffc947bfffc80030004941bfffc8003000c941bfffc807b000083150034801800007c0803a64e800021280300014182003c827b001c3e4002b062528504965bfffc80db001880bb000c388000038073000483130018801800007c0803a64e8000213a830000480000083a800001829b001c8274000c8253000c807b000083120038801800007c0803a64e8000212c03000340820010821b001c82300014480000a8823b001c8211000c81f0000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000081db000091c30004815b000491430000830f0030801800007c0803a64e800021813b001c8109000c80e8000438c30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080a9001490a3000490c300008307001c801800007c0803a64e8000213a230000809b001c8064000c832300048304000882f800003980000256e0f80140a20010800d00347c0803a64e8000217ed7661541a3fff0963bfffc80190024941bfffc96dbfffc38800047807b00243c0002a1600074a87c0803a64e800021809b00103c0002a1600074a87c0803a64e8000213aa30000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a3000c3a80000392830008827b000092630004825b000892430000831b0004833b0018801800007c0903a67f2803a63b7b002c4e8004202c17001d4082001882d8000c82b60004807500043b7b00104e8000202c17001340820030973bfffc806300043b1b00103c0002b160001c347c0803a64e80002182db00007ec803a63b7b00144e8000202c17fffb40820010806300083b7b00104bfff6f82c17000d408200d03d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213add0004919d00003aa0000192b60000973bfffc38c3000038800001387600008318001c801800007c0803a64e8000212c03000140820030829b00108274000c82530004386000018312004c833b0000801800007c0903a67f2803a63b7b00144e800420828300042c1400014082001880630000827b00007e6803a63b7b00144e800020827b00108253000c823200048311004c833b0000801800007c0903a67f2803a63b7b00144e8004202c17001540820100947bfffc947bfffc973bfffc80030008941bfffc38db00088063000c83180020801800007c0803a64e800021809b000c807b00003b1b001c3c0002b160001d9c7c0803a64e8000212c0300014082000c82db000848000028947bfffc807b000c3b1b00203c0002b1600020687c0803a64e8000213ac300003b7b00042c1600014082003082bb001c8295000c82740004386000018313004c833b0004801800007c0903a67f2803a63b7b00204e80042082b600042c1500014082001880760000829b00047e8803a63b7b00204e800020829b001c8274000c82530004387600008312004c833b0004801800007c0903a67f2803a63b7b00204e8004202c17fff54082009c973bfffc806300043b1b00103c0002b160001d9c7c0803a64e8000212c0300014082003082db001082b6000c82950004386000018314004c833b0000801800007c0903a67f2803a63b7b00144e80042082c300042c160001408200188063000082bb00007ea803a63b7b00144e80002082bb00108295000c827400048313004c833b0000801800007c0903a67f2803a63b7b00144e8004202c17001940820034973bfffc80180024941bfffc806300044bfff45d831b0000833b0004801800007c0903a67f2803a63b7b00184e8004202c17000f408201f4973bfffc947bfffc80030008941bfffc806300044bfff42182db0018947bfffc807b000483160030801800007c0803a64e80002182a30004827500002c13ffff4082008c82550004388000018063000c3c0002b06000a7747c0803a64e8000212803000141820024387200003b1b001c3c0002b1600021107c0803a64e8000213a83000048000088823b001c8211000c81f00004398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a9d0004919d000039c0000191d40004814f00049154000048000044825b001c8232000c82110004398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a9d0004919d000039e0000191f4000481d0000491d40000815b001c812a000c81090004398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138fd0004919d00003cc002b160c6223090c7000091470004969bfffc80bb001c94bbfffc809b0018949bfffc94fbfffc38600003947bfffc80ca000480a80008809b0018807b001c830a0028801800007c0803a64e800021833b00208319000c82f800043ac30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092c3000882bb000092a30004829b00049283000083170054833b0010801800007c0903a67f2803a63b7b00244e8004202c17001f4082008c973bfffc80030004941bfffc80180034941bfffc806300084bfff225947bfffc80db001480bb0018809b0010807b0008831b001c4bfff2093ac30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092c3000482bb000092a30000831b0004833b000c801800007c0903a67f2803a63b7b00204e8004202c17fffd4082009c973bfffc947bfffc80030008941bfffc806300044bfff19982db0018398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003e8002b1629422c49295000092d50004827b0014927b0018825b000c925b001492bb00103a200001923b000c80d6000438a30000809b0000807b000483160028833b0008801800007c0903a67f2803a63b7b000c4e8004202c17ffff4082009482d8000c82b60004973bfffc80030008941bfffc80150034941bfffc806300044bfff0ed947bfffc80db001480bb0018809b0010807b0008831b001c4bfff0d13a830000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092830004827b000092630000831b0004833b000c801800007c0903a67f2803a63b7b00204e8004202c17ffe94082009482d8000c82b60004973bfffc80030008941bfffc80150038941bfffc806300044bfff055947bfffc80db001480bb0018809b0010807b0008831b001c4bfff0393a830000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092830004827b000092630000831b0004833b000c801800007c0903a67f2803a63b7b00204e80042082d8000c82b60004807500003b7b00104e800020|@6570,1048575|1452,3,@6547 1496,3,@6547 1592,3,@6550 1640,3,@6550 1744,3,@6441 2092,3,@511 2112,3,@511 2272,3,@6560 2600,3,@6562 2644,3,@6565 2816,3,@6562 3100,3,@6479 3132,3,@6566 3336,3,@6567 3732,3,@6569 6547:C2,104|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021971bfffc973bfffc3b1b00043c0002b1600014787c0803a64e800021833b00048319000082f8000c82d7000483160050833b0000801800007c0903a67f2803a63b7b00084e800420|@6549,1048575|44,3,@6548 6548:C2,184|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e80002082f80000973bfffc971bfffc80030004941bfffc80d7fff880b7fffc8097fff48063000083170000801800007c0803a64e800021947bfffc807b0004831b00084bffff91398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213add0004919d00009076000482bb000092b6000038760000829b000c7e8803a63b7b00104e800020|@234,1048575| 6549:S50|50415253455f5452454528292e67656e636f6465283729636f646553657175656e6365283429636f646567656e2834292f36 6550:C2,272|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc947bfffc949bfffc3ae000012c0400014082000c3ad70000480000483980000256e0f80140a20010800d00347c0803a64e8000217c77661541a3fff0808400043ae30000800d00187c1b004040a00010800d00207c0803a64e8000214bffffb096dbfffc82bb000c829500008274000c82530004398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a3d0004919d00003e0002b1621016b492110000927100048012004c941bfffc809b0008387100003b1b00143c0002b1600017907c0803a64e800021831b0000833b0014801800007c0903a67f2803a63b7b00184e800420|@6559,1048575|192,3,@6551 228,3,@6554 6551:C2,104|7f2802a663390002973bfffc8078000482e30020398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002b162b5173892b600083ea002a062b5c7ac92b6000482b7000492b6000038760000800d00287c0803a64e800021|@6553,1015809|56,3,@6552 68,3,@227 6552:S17|6d697373696e6720696e207265636f7264 6553:S51|50415253455f5452454528292e67656e636f6465283729636f646553657175656e6365283429636f646567656e283429283129 6554:C2,640|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0400014082008c973bfffc971bfffc388300008078fff03c0002a9600048f87c0803a64e800021833b00008319fffc82f8000082d7000c82b6000483150050801800007c0803a64e8000213a830000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003a6000019263000492830000825b00047e4803a63b7b00084e80002082e4000082d8fffc82b600008295000c82740004973bfffc971bfffc947bfffc80170000941bfffc80040004941bfffc80130068941bfffc80d6fff880b6fffc8096fff4807700043b150000801800007c0803a64e800021825b00108232fffc8211000081f0000881cf000039430000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000091c30008813000389123000491430000831b0000801800007c0803a64e800021811b001080e8fffc80c7000080a6000c8085000c8328fff8831900003ae30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00009303000482db000892c3000096fbfffc83040030801800007c0803a64e80002182bb00148295fffc82740000398000053bbdffe87c1df04040a00010800d001c7c0803a64e8000213a5d0004919d00003e2002b162311a2c9232000090720010821b00109212000c81fb000091f2000881d3000891d20004800f0000941bfffc809b000c387200003b1500004bfffdcd2c03000140820018807b0000815b001c7d4803a63b7b00204e800020947bfffc807b00043b1b00203c0002b160001b0c7c0803a64e800021815b00207d4803a63b7b00244e800020|@6558,1048575|56,3,@3354 504,3,@6555 608,3,@6557 6555:C2,120|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f800107c6bbb78556bf80140a20010800d00347c0803a64e8000217c03b8004082002482d8000882b800048075000083160004801800007c0903a67f2803a64e8004208318000c801800007c0903a67f2803a64e800420|@6556,1048575| 6556:S67|50415253455f5452454528292e67656e636f6465283729636f646553657175656e6365283429636f646567656e2834296465636c6973742832296c6f6f6b466e283129 6557:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c8078ffe04e800020973bfffc971bfffc80030000941bfffc806300044bffffbd398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b00009319000038790000833b00087f2803a63b7b000c4e800020|@468,786433| 6558:S58|50415253455f5452454528292e67656e636f6465283729636f646553657175656e6365283429636f646567656e2834296465636c697374283229 6559:S50|50415253455f5452454528292e67656e636f6465283729636f646553657175656e6365283429636f646567656e2834292f38 6560:C2,264|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c030001408200188078000082e3000c82d70004807600044e800020973bfffc971bfffc80030004941bfffc80d8fff880b8fffc8098fff48063000083180000801800007c0803a64e800021947bfffc807b0004831b00084bffff89833b00088319000082f8000c82d70004398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003a8000019295000490750000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a30004827b00009263000083160050833b000c801800007c0903a67f2803a63b7b00104e800420|@6561,1048575| 6561:S59|50415253455f5452454528292e67656e636f6465283729636f646553657175656e6365283429636f646567656e283429636f6e734c697374283129 6562:C2,452|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e80002082e3000082d8000082b600442815000140820008480000348296004082740000825700047e4b9b78556bf80140a20010800d00347c0803a64e8000217c129800418200084800000c3a80000148000070973bfffc971bfffc949bfffc80170000941bfffc965bfffc80030004941bfffc38b200008078fffc8316003c801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a9d0004919d00003a200001923400049074000048000028973bfffc971bfffc949bfffc80170000941bfffc80170004941bfffc80030004941bfffc827b0010969bfffc80db000880b3fffc809b0010807b000c83130000801800007c0803a64e800021947bfffc809b0014807b0008831b00184bfffeb9398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a5d0004919d000090720004823b0000923200002c12000140820018807b0004821b001c7e0803a63b7b00204e800020965bfffc807b00083b1b00203c0002b160001f7c7c0803a64e800021821b00207e0803a63b7b00244e800020|@6564,1048575|420,3,@6563 6563:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c8078ffe04e800020973bfffc971bfffc80030000941bfffc806300044bffffbd398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b00009319000038790000833b00087f2803a63b7b000c4e800020|@468,786433| 6564:S59|50415253455f5452454528292e67656e636f6465283729636f646553657175656e6365283429636f646567656e283429636f64654c697374283229 6565:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c8078ffe04e800020973bfffc971bfffc80030000941bfffc806300044bffffbd398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b00009319000038790000833b00087f2803a63b7b000c4e800020|@468,786433| 6566:C2,260|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e80002082f8000082d7000c82b6001082830000827700088253000082230004398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d00008218fff89203001081f7000491e3000c81d7002c91c30008924300048154000891430000973bfffc971bfffc963bfffc8315002c801800007c0803a64e800021947bfffc807b0004831b00084bffff45398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021393d0004919d000090690004811b0000910900003869000080fb000c7ce803a63b7b00104e800020|@234,1048575| 6567:C2,64|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180c3000c80a30008808300048063000083180004801800007c0903a64e800420|@6568,1048575| 6568:S48|50415253455f5452454528292e67656e636f6465283729636f646553657175656e6365283429636f646567656e283129 6569:C2,64|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180c3000c80a30008808300048063000083180004801800007c0903a64e800420|@6568,1048575| 6570:S48|50415253455f5452454528292e67656e636f6465283729636f646553657175656e6365283429636f646567656e283429 6571:C2,2592|7f2802a66339000239600064800d00187d6bd8107c0b004040a00010800d00247c0803a64e800021973bfffc971bfffc947bfffc949bfffc94bbfffc94dbfffc830600002c18fffb4082002480c60008800d00187c1b004040a00010800d00207c0803a64e8000214bffffd82c18000d4082000c832600044800006480bb00108085000480640020398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213b3d0004919d00003ee002b162f72d9492f900083ee002a062f7c7ac92f9000482e3000492f9000038790000800d00287c0803a64e80002182fb001080b7000880850000398000025480f80140a20010800d00347c0803a64e8000217c64661541a3fff09065000080970018806400003ac0000392c40000732b0001408200c082d9000082b600002c15ffeb40820050829600048274000c825300008234001082110000398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213abd0004919d000092550008921500048254000892550000480000c48297000482740020398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a5d0004919d00003e2002b162312dc8923200083e0002a06210c7ac9212000482330004923200003a03000038720000800d00287c0803a64e80002182b7000482950020398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a7d0004919d00003e4002b162522dc8925300083e2002a06231c7ac9233000482140004921300003ac3000038730000800d00287c0803a64e800021973bfffc947bfffc80150004941bfffc80150008941bfffc807500008317002c801800007c0803a64e8000212c030003418204d0947bfffc38800051807b00183c0002a1600074a87c0803a64e800021947bfffc3880ffff807b00043c0002a06000fe6c7c0803a64e80002138830000807b00003c0002a1600074a87c0803a64e800021388000533c0002a1600074a87c0803a64e800021823b0028947bfffc947bfffc8211002881f1000481cf0030814e0004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021393d0004919d0000811000009109000480ea000490e9000038db00009126000038bb00008090000490850004398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d0000831b00009319000082fb000492f90004947bfffc973bfffc809b00143860000383110024801800007c0803a64e80002182db003882b6000482950004947bfffc80140020941bfffc827b0008967bfffc80db001038a30000809b0030807b003483160020801800007c0803a64e800021825b0040823b0024963bfffc821b000c961bfffc80db002880bb000c809b00148312001c801800007c0803a64e80002181fb004081cf0008814e000039230000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d0000811b000c9103000c80fb001c90e300089143000491230000831b0000801800007c0803a64e80002180db004080a6000880850000398000025480f80140a20010800d00347c0803a64e8000217f2c241141a3fff0932500008306001882fb002892f8000082c6000482b60004828500003a630000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00009283000882460014924300049263000083150068801800007c0803a64e800021823b00408211000481f0000481d10008814e000039230000398000025540f80140a20010800d00347c0803a64e8000217c6a661541a3fff0953bfffc800f0024941bfffc800f0028941bfffc83090004801800007c0803a64e800021811b004c947bfffc809b002c806800108308000c801800007c0803a64e80002138e30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000038c0000190c3000890e3000480bb000090a30000831b0004801800007c0803a64e800021809b00508324000883190000398000025700f80140a20010800d00347c0803a64e8000217ef8661541a3fff0947bfffc96fbfffc3c8002ad60841420807b004c3c0002a1600074a87c0803a64e8000213ac30000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d000092c3000c3aa0000392a30008829b000092830004827b000492630000831b0010801800007c0803a64e800021825b00502812000141820060821b005881f0000481cf0004815b0054812a000039030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00009103000491230000830e0040801800007c0803a64e8000213a230000480000083a230000821b0014398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002139fd0004919d000039c0000191cf0004922f00002c0f00014082001880700000815b005c7d4803a63b7b00604e80002095fbfffc807000003b1b00603c0002b160002dfc7c0803a64e800021815b00607d4803a63b7b00644e800020823b001c8211000039e0000191f10000961bfffc3c8002ad60841420807b00183c0002a1600074a87c0803a64e80002181db0024947bfffc947bfffc814e0028812e00048109003080e80004398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138dd0004919d000080aa000090a6000480870004908600003b3b000090d900003b1b000082ea000492f80004398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213add0004919d000082bb000092b60000829b00049296000482690004947bfffc96dbfffc3c6002ae606300bc83130018801800007c0803a64e800021825b0034823b0000963bfffc80db000838a30000809b0024807b002883120020801800007c0803a64e800021821b003481f0000481cf0004947bfffc3c6002ae606300bc830e0018801800007c0803a64e800021815b0038813b001c953bfffc811b0008951bfffc80db002038a30000809b0010807b0008830a001c801800007c0803a64e80002180fb003480db001490c7000080bb00388085000883240000398000025720f80140a20010800d00347c0803a64e8000217f0ccc1141a3fff09304000082e5001882db002092d7000082a500048295000482640000398000025660f80140a20010800d00347c0803a64e8000217e53661541a3fff03a230000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d0000821b00089203000c39e0000391e30008924300049223000083140020801800007c0803a64e80002181db0030280e00014182005c813b00388109000480e8000438c30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000090c3000480bb001490a3000083070040801800007c0803a64e800021394300004800000839430000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000392000019123000491430000811b003c7d0803a63b7b00404e800020|@6575,1048575|172,3,@6572 184,3,@227 428,3,@6573 440,3,@227 524,3,@6573 536,3,@227 640,3,@511 668,3,@316 692,3,@511 712,3,@511 1512,3,@5289 1524,3,@511 1824,3,@6574 1876,3,@5289 1888,3,@511 2068,3,@5563 2152,3,@5563 6572:S42|676574466e426f64793a206e6f74206120636f6e73747261696e656420666e2d65787072657373696f6e 6573:S41|636f646550726f633a20626f6479206f6620666e206973206e6f74206120636c61757365206c697374 6574:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c8078ffa04e800020973bfffc971bfffc80030000941bfffc806300044bffffbd398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b00009319000038790000833b00087f2803a63b7b000c4e800020|@468,786433| 6575:S49|50415253455f5452454528292e67656e636f6465283729636f646553657175656e6365283429636f646550726f63283429 6576:C2,212|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021398000053bbdffe87c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002b162d62fd092d7000082d8001892d7001082b8001492b7000c82980010929700088278000c92770004398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a5d0004919d00003e2002b16231314c9232000092f20004821b000094db0000961bfffc965bfffc39e0000195fbfffc80d8000883180004801800007c0903a67f2803a64e800420|@6581,1048575|68,3,@6577 148,3,@6579 6577:C2,288|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8001028170001418200e882d8000c82b60004973bfffc971bfffc947bfffc949bfffc94bbfffc94dbfffc8015004c941bfffc38a60000807b000883180008801800007c0803a64e800021829b0014947bfffc80db000880bb000c809b0010807b001483140004801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a7d0004919d00003a4000019253000490730000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092630004823b000092230000831b0004833b001c801800007c0903a67f2803a63b7b00204e80042083180004801800007c0903a64e800420|@6578,1048575| 6578:S56|50415253455f5452454528292e67656e636f6465283729636f646553657175656e6365283429636f6465416c742835296367457870283429 6579:C2,64|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180c3000c80a30008808300048063000083180004801800007c0903a64e800420|@6580,1048575| 6580:S56|50415253455f5452454528292e67656e636f6465283729636f646553657175656e6365283429636f6465416c742835296367457870283129 6581:S48|50415253455f5452454528292e67656e636f6465283729636f646553657175656e6365283429636f6465416c74283529 6582:C2,416|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e3000882d7000082b8fff4829500048274000882530054973bfffc971bfffc3876000083120008801800007c0803a64e800021823b00008211fff481f0000481cf0008814e004880030008941bfffc807b0000830a0000801800007c0803a64e80002128030001418200b4813b00048109fff480e8000480c7000880a60048807b000083050008801800007c0803a64e800021809b00048324fff48319001482f800003980000256e0f80140a20010800d00347c0803a64e8000217ed7661541a3fff092d8000082b800003980000256a0f80140a20010800d00347c0803a64e8000217e95661541a3fff0929800008263000092f300008259000c8232000082030004923000003860000181fb00087de803a63b7b000c4e800020813b00048109fff480e8000480c70020398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002138bd0004919d00003c8002b06084a088908500083c6002a06063c7ac90650004832600049325000038650000800d00287c0803a64e800021|@6583,1048575|368,3,@6473 380,3,@227 6583:S58|50415253455f5452454528292e67656e636f6465283729636f646553657175656e63652834293c7061747465726e3e2d73657441646472283129 6584:C2,2804|7f2802a66339000239600074800d00187d6bd8107c0b004040a00010800d00247c0803a64e8000212c0300014082000c386000014e80002082e3000082d7000082b6000082970008827400008257000c823200008217001081f0000081d8fff4814e0004812a000881090054973bfffc971bfffc96bbfffc80170004941bfffc967bfffc963bfffc95fbfffc80030004941bfffc3873000083080008801800007c0803a64e80002180fb001880c7fff480a60004808500088324004880030008941bfffc807b000083190000801800007c0803a64e800021280300014182003482fb001c82d7fff482b600048295000882740048807b000083130008801800007c0803a64e8000218303000048000068831b001c82f8fff482d7000482b60020398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a9d0004919d00003e6002b162733f30927400083e4002a06252c7ac92540004823500049234000038740000800d00287c0803a64e80002182580000823b001c8211fff481f0000481cf0008971bfffc965bfffc8011ffec941bfffc807b001c830e0098801800007c0803a64e80002138830000807b00003c0002a1600074a87c0803a64e800021815b0020714b000140820038810a000080fb002880c7fff4947bfffc80a800008086002c386000013c0002b160003f407c0803a64e800021392300004800006c813b00288109fff480e8000480c70020398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002138bd0004919d00003c8002b160844064908500083f2002a06339c7ac9325000483060004930500003ae3000038650000800d00287c0803a64e800021953bfffc80bb0028388000032c0500014082000c38640000480000702c040003408200348305000082fb003082d7fff480050004941bfffc807800048316002c801800007c0803a64e8000213b230000480000103b24000080050004941bfffc3899000080bb00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffff88833b00308319fff482f80028281700014182000c3ac00003480000083ac300002c1600034082000c3aa00003480000083aa000016ab4000296dbfffc969bfffc827b00082c1300014082000c3a54000048000050823300003994ffff7e2ba0385560f80140a20010800d00347c0803a64e8000217e11661541a3fff03a90000082730004800d00187c1b004040a00010800d00207c0803a64e8000214bffffa8821b00282c1000034082001c2c1200034082000c3a200003480000103a200001480000083a200001281100014182001881db001839400001914e000039e000014800000839e0000181fb003881cffff4814e000c812a0000398000025520f80140a20010800d00347c0803a64e8000217d09661541a3fff0910a000080ee001480c7000038a0000390a70000965bfffc963bfffc94dbfffc807b003c3b1b00483c0002b1600040847c0803a64e800021833b00342c19000340820054831b000c398000025700f80140a20010800d00347c0803a64e8000217ef8661541a3fff082db004482b6fff4947bfffc809b000c3877000083150020801800007c0803a64e8000213883000048000054831b004482f8fff482d7000482b60004947bfffc80150050941bfffc809b001c807b00143b1b00503c0002b1600043247c0803a64e800021831b0000801800007c0803a64e800021388300003b7b0004949bfffc3880ffff807b00103c0002a06000fe6c7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a9d0004919d00003e6002a66273edc49274000490740000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a5d0004919d0000929200043a20005192320000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092430004821b0020920300003c0002a1600005347c0803a64e80002181fb004c947bfffc947bfffc81cffff0814ffff4812a00048109003080e80004398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138dd0004919d000080ae000090a6000480870004908600003b3b000090d900003b1b000082ee000492f80004398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213add0004919d000082bb000092b60000829b000492960004947bfffc96dbfffc38c3000080bb0010809b0014806fffcc830fffdc801800007c0803a64e800021825b00242c1200034082000c3a6300004800008c823b00588211fff481f0000481cf0004947bfffc800e0060941bfffc3c6002ae606300bc830e0018801800007c0803a64e80002139430000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000813b002c91230008811b00049103000491430000831b0000801800007c0803a64e8000213a6300003b7b000880fb0058947bfffc947bfffc80c7fff080a7fff4808500048064003083230004398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b1d0004919d000082e6000092f8000482d9000492d800003abb0000931500003a9b00008246000492540004398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a3d0004919d0000821b00009211000081fb000491f1000481db004c95dbfffc963bfffc80db00648145001c80bb001c809b003c387300003b0a0000801800007c0803a64e800021813b00608109fff480e8000c80c700003980000254c0f80140a20010800d00347c0803a64e8000217cac341141a3fff090a7000080880014833b001c932400008308000482f8000482c700003980000256c0f80140a20010800d00347c0803a64e8000217eb6661541a3fff03a830000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d0000827b00089263000c825b00249243000892a300049283000083170020801800007c0803a64e800021823b0040821b003c9211000081fb0020280f0001418200a881db0060814efff4812a00048109000438e30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000090e300049203000083080040801800007c0803a64e800021947bfffc807b004c831b00644bfff6f5398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138dd0004919d00009066000480bb000090a6000038660000809b00687c8803a63b7b006c4e80002081db0060814efff4812a000481090004398000025600f80140a20010800d00347c0803a64e8000217cf0661541a3fff038c30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000090c3000490e3000083080040801800007c0803a64e80002180bb00608085fff4832400048319000482fb00503980000256e0f80140a20010800d00347c0803a64e8000217eccbc1141a3fff0947bfffc80180040941bfffc96dbfffc80db004038a00001809b003c386000013b1b00703c0002b1600044c87c0803a64e8000213aa30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a30004829b004492830000831b0000801800007c0803a64e800021947bfffc807b0054831b006c4bfff585398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a7d0004919d000090730004825b000092530000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a3d0004919d000092710004821b0008921100003871000081fb00707de803a63b7b00744e800020|@6600,1048575|324,3,@6585 336,3,@227 436,3,@511 492,3,@6586 568,3,@6588 580,3,@227 1076,3,@6589 1224,3,@6593 1276,3,@316 1328,3,@2431 1440,3,@325 1700,3,@5563 2588,3,@6595 6585:S6|6c7641646472 6586:C2,180|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021830500002c18fffb4082000c80a500084bffffd82c18000340820078973bfffc947bfffc949bfffc80050004941bfffc806500083b040000801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213afd0004919d000082db000892d700049077000080bb0000809b000438770000833b000c7f2803a63b7b00104bffff5c4e800020|@6587,1048575| 6587:S73|50415253455f5452454528292e67656e636f6465283729636f646553657175656e63652834293c7061747465726e3e2d6c6f616446756e446563732831296765745061747473283329 6588:S23|6261646c7920666f726d65642070617273652074726565 6589:C2,512|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e80002082e30000973bfffc971bfffc80030004941bfffc80170004941bfffc80170008941bfffc80b700003c8002b1608442a0386000013c0002b160003f407c0803a64e80002182db000c82b6ffec2c15000340820028706b00014082000c82830000480000483c6002a36063dfcc800d00287c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a9d0004919d0000907400043a60001b927400008256fffc8232fff43d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213a1d0004919d000081f1002491f000003d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e80002139dd0004919d000091ee0000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021395d0004919d000091ca0010920a000c928a0008813b0000912a0004811b0004910a0000398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138fd0004919d00009147000438c0ffeb90c7000094fbfffc807b000c3b1600004bfffe49398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138bd0004919d000090650004809b00009085000038650000833b00147f2803a63b7b00184e800020|@234,1048575|88,3,@6590 100,3,@6586 148,3,@1386 6590:O1|@6591 6591:C2,4|4e800020|@6592,524289| 6592:S84|50415253455f5452454528292e67656e636f6465283729636f646553657175656e63652834293c7061747465726e3e2d6c6f616446756e446563732831296d6174636865732d2831297061744c6973742d283129 6593:C2,308|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0400014082000c386000014e80002082e400003997ffff7c6bb8385560f80140a20010800d00347c0803a64e8000217ec3661541a3fff0398000025460f80140a20010800d00347c0803a64e8000217ea3661541a3fff08298fffc8274fff4973bfffc971bfffc947bfffc96fbfffc80040004941bfffc389600003875000083130020801800007c0803a64e800021825b0008823b00043991ffff7e4b88385560f80140a20010800d00347c0803a64e8000217e12661541a3fff0947bfffc809b000438700000831b00104bffff15398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002139fd0004919d0000906f000481db000091cf0000386f0000815b00147d4803a63b7b00184e800020|@6594,1048575| 6594:S73|50415253455f5452454528292e67656e636f6465283729636f646553657175656e63652834293c7061747465726e3e2d6c6f616446756e446563732831296d616b6541726773283229 6595:C2,1680|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0400014082040480d8ffc82c060003408200e08098fffc8064fff482e3000482d7000482b8ffd83980000256a0f80140a20010800d00347c0803a64e8000217e95661541a3fff0398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008278ffec9263000492830000973bfffc94bbfffc80160028941bfffc83160018801800007c0803a64e8000213a430000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003a20000192230008821b00049203000492430000831b0000833b0008801800007c0903a67f2803a63b7b00104e8004208098fffc8064fff482e3000482d70004973bfffc971bfffc94bbfffc80160068941bfffc386600008316005c801800007c0803a64e80002182bb00088295fffc8274fff48253000c823200003a030000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00009223000881f3001091e3000492030000831b0000801800007c0803a64e80002181db0008814efffc812afff48109000c80e3000080c300048068000094fbfffc3b060000801800007c0803a64e80002180bb000c8085fffc8324fff48319000482f8000482c5ffd83980000256c0f80140a20010800d00347c0803a64e8000217eb6661541a3fff03a830000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008265ffec9263000492a30000969bfffc8017004c941bfffc80170028941bfffc83170018801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a5d0004919d00003a20000192320004821b0008921200002c1200014082000c81fb001448000030965bfffc39c30000807b00183b1b00203c0002b160004b747c0803a64e80002139e30000386e00003b7b000439430000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000392000019123000891e3000491430000831b0000801800007c0803a64e800021811b001880e8fffc80c7fff480a60004808500043b230000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008308ffc89303000482fb000892e30000973bfffc83040064801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213add0004919d00003aa0000192b6000490760000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a9d0004919d000092d40004827b0000927400002c1400014082000c807b001048000024969bfffc807b00143b1b00243c0002b160004c1c7c0803a64e8000213b7b0004831b0008833b0020801800007c0903a67f2803a63b7b00284e80042082f8fffc82d7fff482b6000c82950000398000025680f80140a20010800d00347c0803a64e8000217e74661541a3fff09275000082560014823200003a00000392120000973bfffc971bfffc947bfffc94bbfffc80040000941bfffc80040004941bfffc963bfffc3c8002ad60841420386600003c0002a1600074a87c0803a64e80002181fb001481cffffc814efff4812a00048109000438e30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080db001c90c3000438a0ffff90a3000094fbfffc83080018801800007c0803a64e800021809b00188324fffc8319fff4809b000c83180018801800007c0803a64e80002182db00102c1600014082000c3ae300004800001c3b1b001c3c0002b160004cc47c0803a64e8000213ae3000082bb00203980000256a0f80140a20010800d00347c0803a64e8000217e8cac1141a3fff0827b0014825b000c3992ffff7e6b90385560f80140a20010800d00347c0803a64e8000217e33661541a3fff0969bfffc80db000438b70000809b000c38710000831b001c4bfffa41821b001881f0fffc81cffff4814e000c812a0000398000025520f80140a20010800d00347c0803a64e8000217d0c4c1141a3fff0910a000080ee001480db000490c7000080ae000480850004832a0000398000025720f80140a20010800d00347c0803a64e8000217f19661541a3fff03ae30000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d000082db000092c3000c3aa0000392a300089303000492e3000083040024833b001c801800007c0903a67f2803a63b7b00244e800420|@6599,1048575|696,3,@6596 1016,3,@6597 1168,3,@5289 1180,3,@511 1348,3,@6598 6596:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c8078ffe04e800020973bfffc971bfffc80030000941bfffc806300044bffffbd398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b00009319000038790000833b00087f2803a63b7b000c4e800020|@468,786433| 6597:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c8078ffdc4e800020973bfffc971bfffc80030000941bfffc806300044bffffbd398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b00009319000038790000833b00087f2803a63b7b000c4e800020|@468,786433| 6598:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c8078fff44e800020973bfffc971bfffc80030000941bfffc806300044bffffbd398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b00009319000038790000833b00087f2803a63b7b000c4e800020|@468,786433| 6599:S73|50415253455f5452454528292e67656e636f6465283729636f646553657175656e63652834293c7061747465726e3e2d6c6f616446756e446563732831296d616b6546756e73283529 6600:S62|50415253455f5452454528292e67656e636f6465283729636f646553657175656e63652834293c7061747465726e3e2d6c6f616446756e44656373283129 6601:O1|@6602 6602:C2,144|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e8000208303000082f8000882d70000973bfffc96dbfffc806300044bffffb9398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b0000931900003879000082fb00047ee803a63b7b00084e800020|@234,983041| 6603:C2,564|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e80002082e300002c170001408200d4973bfffc971bfffc806300043c0002b16000510c7c0803a64e8000212c0300014082000848000038706b00014082000c82c300044800001c3ac300003c6002a36063dfcc800d00287c0803a64e80002128160001418200084800001482db00047ec803a63b7b00084e80002082bb00008295fff4827400048253000483120058801800007c0803a64e8000213a230000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003a000001920300049223000081fb00047de803a63b7b00084e8000203ab900003a980000827700008257000482230004387300003c0002b1600059cc7c0803a64e80002196bbfffc969bfffc967bfffc965bfffc963bfffc388300008074ffec3c0002a1600074a87c0803a64e8000213880005b3c0002a1600074a87c0803a64e800021821b000c81f0fff48010ffcc941bfffc80cf003438a300008090fff0807b00088310ffe4801800007c0803a64e80002181db0010814efff4813b000c953bfffc811b0004951bfffc38c3000080aa0038808a0034806efff0830a0030801800007c0803a64e800021947bfffc807b0008831b00144bfffe192c03000140820018807b000080fb00187ce803a63b7b001c4e800020947bfffc807b00043b1b001c3c0002b160005ac47c0803a64e80002180fb001c7ce803a63b7b00204e800020|@6618,1048575|72,3,@6604 120,3,@1386 292,3,@6614 336,3,@511 356,3,@511 532,3,@6617 6604:C2,780|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e80002082e300002c1700014082000c806300044bffffc83ab900003a9800008277000482430004807700003c0002b1600054347c0803a64e8000218334fff48319001482f800003980000256e0f80140a20010800d00347c0803a64e8000217ed7661541a3fff092d80000969bfffc96fbfffc96bbfffc967bfffc965bfffc947bfffc2c0300014082000c3aa000014800004880030004941bfffc806300003b1b00183c0002b16000563c7c0803a64e800021807b00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffffb0807b0004831b00144bfffef5829b00002c14000140820014827b000c7e6803a63b7b00184e80002082740000825300002c12fff140820170823300088211000081fb001481cffff4814e0004812a000881090054947bfffc80130004941bfffc3870000083080008801800007c0803a64e80002180fb001c80c7fff480a60004808500088324004880030008941bfffc807b000083190000801800007c0803a64e800021280300014182003482fb002082d7fff482b600048295000882740048807b000083130008801800007c0803a64e8000218303000048000068831b002082f8fff482d7000482b60020398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a9d0004919d00003e6002b162733f30927400083e4002a06252c7ac92540004823500049234000038740000800d00287c0803a64e800021825b002080db001480bb000438800003387800008312ffe0801800007c0803a64e800021823b00082c11000140820014821b00187e0803a63b7b00244e8000203b1b00203c0002b1600058b47c0803a64e800021821b00187e0803a63b7b00244e800020823b00148211fff481f0000481cf0020398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021395d0004919d00003d2002b16129595c912a00083d0002a06108c7ac910a000480ee000490ea0000386a0000800d00287c0803a64e800021|@6613,1048575|88,3,@6605 208,3,@6608 532,3,@6585 544,3,@227 648,3,@6611 732,3,@6612 744,3,@227 6605:C2,240|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021830300002c18fffb4082000c806300084bffffd82c18ffef4082006c973bfffc80030008941bfffc806300044bffffb5947bfffc807b00044bffffa92c03000140820018807b0000833b00087f2803a63b7b000c4e800020947bfffc807b00043b1b000c3c0002b1600055407c0803a64e800021833b000c7f2803a63b7b00104e8000202c18fff1408200403ae30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003ac0000192c3000492e300007f2803a64e800020386000014e800020|@6607,983041|132,3,@6606 6606:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c8078fff44e800020973bfffc971bfffc80030000941bfffc806300044bffffbd398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b00009319000038790000833b00087f2803a63b7b000c4e800020|@468,786433| 6607:S74|50415253455f5452454528292e67656e636f6465283729636f646553657175656e63652834293c7061747465726e3e2d636f646552656375727369766528312967657456617273283129 6608:C2,472|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e300002c17fff14082014882c3000882b60000829800008274fff4825300048232000882110054973bfffc971bfffc3875000083100008801800007c0803a64e80002181fb000081cf0000814efff4812a00048109000880e8004880030008941bfffc807b000083070000801800007c0803a64e800021280300014182006c80db000480a600008085fff4806400048323000883190048807b000083180008801800007c0803a64e80002182fb000482c3000082b7fffc92b60000829700008274fff48253000c8232000082030004923000003860000181fb00087de803a63b7b000c4e80002080db000480a600008085fff48064000483230020398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213b1d0004919d00003ee002b162f7583092f800083ec002a062d6c7ac92d8000482b9000492b8000038780000800d00287c0803a64e800021973bfffc82d8000082b6fff48295000482740020398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a5d0004919d00003e2002b162315830923200083e0002a06210c7ac9212000481f3000491f2000038720000800d00287c0803a64e800021|@6610,1048575|320,3,@6609 332,3,@227 424,3,@6609 436,3,@227 6609:S36|7365744164647265737320202d206261646c7920666f726d656420706172736574726565 6610:S77|50415253455f5452454528292e67656e636f6465283729636f646553657175656e63652834293c7061747465726e3e2d636f646552656375727369766528312973657441646472657373283129 6611:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c8078ffe84e800020973bfffc971bfffc80030000941bfffc806300044bffffbd398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b00009319000038790000833b00087f2803a63b7b000c4e800020|@468,786433| 6612:S31|56616c4465636c61726174696f6e202d206e6f742061207661726961626c65 6613:S64|50415253455f5452454528292e67656e636f6465283729636f646553657175656e63652834293c7061747465726e3e2d636f6465526563757273697665283129 6614:C2,120|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021830300002c18fff14082000c806300044e8000202c18fffb4082000c806300084bffffc82c18ffef4082002482e3000482d700002c16fff14082000c807700044e800020806300084bffffa03c6002b160635a604e800020|@6616,983041|108,3,@6615 6615:S9|3c7061747465726e3e 6616:S69|50415253455f5452454528292e67656e636f6465283729636f646553657175656e63652834293c7061747465726e3e2d636f6465446563732831296765744e616d65283129 6617:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c8078ffe44e800020973bfffc971bfffc80030000941bfffc806300044bffffbd398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b00009319000038790000833b00087f2803a63b7b000c4e800020|@468,786433| 6618:S59|50415253455f5452454528292e67656e636f6465283729636f646553657175656e63652834293c7061747465726e3e2d636f646544656373283129 6619:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c8078ffc04e800020973bfffc971bfffc80030000941bfffc806300044bffffbd398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b00009319000038790000833b00087f2803a63b7b000c4e800020|@468,786433| 6620:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c8078ffb04e800020973bfffc971bfffc80030000941bfffc806300044bffffbd398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b00009319000038790000833b00087f2803a63b7b000c4e800020|@468,786433| 6621:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c8078ffac4e800020973bfffc971bfffc80030000941bfffc806300044bffffbd398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b00009319000038790000833b00087f2803a63b7b000c4e800020|@468,786433| 6622:C2,168|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e800020973bfffc971bfffc80030004941bfffc806300003c0002b160005e6c7c0803a64e800021947bfffc807b0004831b00084bffffa1398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b0000931900003879000082fb000c7ee803a63b7b00104e800020|@234,1048575|68,3,@6623 6623:C2,784|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e3000482d7000082b8fff4829500048274000882530054973bfffc971bfffc8003000c941bfffc3876000083120008801800007c0803a64e800021823b00048211fff481f0000481cf0008814e004880030008941bfffc807b0000830a0000801800007c0803a64e8000212803000141820064811b000880e8fff480c7000480a6000880850048807b000083040008801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021393d0004919d00008323000493290004830300009309000048000068813b00088109fff480e8000480c70020398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002138bd0004919d00003c8002b160843f30908500083c6002a06063c7ac90650004832600049325000038650000800d00287c0803a64e80002182fb000882d7fff482b6001482950000398000025680f80140a20010800d00347c0803a64e8000217e74661541a3fff09275000082490000929200008236000c8211000081e90004920f000081d60004814e00048112000080fb000480a700002c05fff740820030808e0010800a0040941bfffc951bfffc3860000183040028801800007c0803a64e80002138c30000480000dc2c05fff14082007c8087000882840000826e001082110000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d000080d6003490c30010833600389323000c8316003c930300089203000492830000800a0040941bfffc951bfffc8313002c801800007c0803a64e80002138c300004800005c808e0020398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a9d0004919d00003e6002b162736198927400083e0002a06210c7ac9214000480c4000490d4000038740000800d00287c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000090c3000482fb000092e30000831b0004833b0014801800007c0903a67f2803a63b7b00184e800420|@6625,1048575|296,3,@6585 308,3,@227 660,3,@6624 672,3,@227 6624:S6|636f64654578 6625:S57|50415253455f5452454528292e67656e636f6465283729636f646553657175656e63652834293c7061747465726e3e2d636f64654578283129 6626:O1|@6627 6627:C2,144|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e8000208303000082f8000482d70000973bfffc96dbfffc806300044bffffb9398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b0000931900003879000082fb00047ee803a63b7b00084e800020|@234,983041| 6628:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c8078ffc04e800020973bfffc971bfffc80030000941bfffc806300044bffffbd398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b00009319000038790000833b00087f2803a63b7b000c4e800020|@468,786433| 6629:C2,224|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e3000482d7000082b8fff48295000482740008973bfffc971bfffc94bbfffc80040000941bfffc80040004941bfffc3876000083130078801800007c0803a64e800021947bfffc947bfffc825b00148232fff438bb0000809b000883110008801800007c0803a64e80002181fb00002c0f00014082000c821b000c48000020807b000c3b1b00183c0002b1600064447c0803a64e8000213a03000081db0010920e0000815b0004914e000438600001813b00187d2803a63b7b001c4e800020|@6631,1048575|168,3,@6630 6630:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c8078ffe84e800020973bfffc971bfffc80030000941bfffc806300044bffffbd398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b00009319000038790000833b00087f2803a63b7b000c4e800020|@468,786433| 6631:S61|50415253455f5452454528292e67656e636f6465283729636f646553657175656e63652834293c7061747465726e3e2d676574436f6e73747273283329 6632:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c8078ffb44e800020973bfffc971bfffc80030000941bfffc806300044bffffbd398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b00009319000038790000833b00087f2803a63b7b000c4e800020|@468,786433| 6633:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c8078ffb04e800020973bfffc971bfffc80030000941bfffc806300044bffffbd398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b00009319000038790000833b00087f2803a63b7b000c4e800020|@468,786433| 6634:S38|50415253455f5452454528292e67656e636f6465283729636f646553657175656e6365283429 6635:S23|50415253455f5452454528292e67656e636f6465283729 6636:O2|@6637,@5631 6637:C2,156|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c040003408200403b030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003880000190830004930300007f2803a64e800020947bfffc971bfffc949bfffc973bfffc386000013b1b000c3c0002b1600067987c0803a64e800021833b00007f2803a63b7b00104e800020|@6640,1048575|124,3,@6638 6638:C2,292|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8fff87c6bbb78556bf80140a20010800d00347c0803a64e8000217c03b80040820010386000017f2803a64e80002082d8fffc82b60004829500043a630000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000825800009243000492630000973bfffc971bfffc967bfffc8314001c801800007c0803a64e800021823b00003a030000398000025620f80140a20010800d00347c0803a64e8000217c71661541a3fff0961bfffc831b00084bffff25398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002139fd0004919d0000906f000481db000091cf0000386f0000815b000c7d4803a63b7b00104e800020|@6639,1048575| 6639:S33|50415253455f5452454528292e6c6f6164417267732832296d6b61726773283129 6640:S24|50415253455f5452454528292e6c6f616441726773283229 6641:O2|@6642,@5631 6642:C2,252|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000217c8b1b78556bf80140a20010800d00347c0803a64e8000217c0418004082007082f8000482d70004398000025480f80140a20010800d00347c0803a64e8000217ea4641141a3fff0398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003a8000019283000492a3000083160018801800007c0903a67f2803a64e80042082f8000482d70004971bfffc947bfffc973bfffc80160050941bfffc386400003b1b000c3c0002b160006a487c0803a64e800021831b0000833b0004801800007c0903a67f2803a63b7b00104e800420|@6645,1048575|208,3,@6643 6643:C2,324|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8fffc7c6bb838556bf80140a20010800d00347c0803a64e8000217c03b80040800010386000017f2803a64e80002082d8000082b6000482950004398000025460f80140a20010800d00347c0803a64e8000217e63641141a3fff03a430000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003a2000019223000492630000973bfffc971bfffc965bfffc83140018801800007c0803a64e800021821b000039e30000398000025600f80140a20010800d00347c0803a64e8000217c6c841141a3fff095fbfffc831b00084bffff05398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002139dd0004919d0000906e0004815b0000914e0000386e0000813b000c7d2803a63b7b00104e800020|@6644,1048575| 6644:S38|50415253455f5452454528292e6d6b4172675475706c652832296d6b4172674c697374283129 6645:S26|50415253455f5452454528292e6d6b4172675475706c65283229 6646:C2,884|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e300002c17001b40820070973bfffc3b00000182c300042c1600014082001838780000833b00007f2803a63b7b00044e800020398000025700f80140a20010800d00347c0803a64e8000217c78661541a3fff082d600043b030000800d00187c1b004040a00010800d00207c0803a64e8000214bffffa42c1700114082007c82d8000482b6000c8283000880740000973bfffc971bfffc969bfffc83150034801800007c0803a64e800021280300014182001838600003827b00087e6803a63b7b000c4e800020827b0004825300048232000c821b00008070000083110038833b0008801800007c0903a67f2803a63b7b000c4e8004202c1700054082004c973bfffc971bfffc80030008941bfffc8063000c4bfffecd2c0300034082001c807b0000831b0004833b00087f2803a63b7b000c4bfffeb482db00087ec803a63b7b000c4e8000202c17fffb4082000c806300084bfffe942c17000f4082000c806300044bfffe842c170015408200e082c300082c16000140820064973bfffc82b8000482950020398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a7d0004919d00003e4002b162526f8c925300083e2002a06231c7ac92330004821400049213000038730000800d00287c0803a64e800021973bfffc971bfffc2c160001408200183c6002a36063dfcc800d00287c0803a64e800021829600042c1400014082000c82b600004800002482d60004800d00187c1b004040a00010800d00207c0803a64e8000214bffffb480750000831b0000833b00047f2803a63b7b00084bfffda02c17fffd408200fc973bfffc971bfffc82c300083aa000032c1600014082001838750000829b00047e8803a63b7b00084e8000202c1500034082009482760000825300002c12ffeb408200248233000480160004941bfffc80710000831b00044bfffd353a83000048000070823b00008211000481f00020398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002139dd0004919d00003d4002b1614a6fb0914e00083d2002a06129c7ac912e0004810f0004910e0000386e0000800d00287c0803a64e8000213a95000080160004941bfffc3ab4000082db00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffff1c386000034e800020|@6649,1048575|460,3,@6647 472,3,@227 524,3,@1386 776,3,@6648 788,3,@227 6647:S26|7475706c6557696474683a20656d707479206c6f63616c646563 6648:S8|6765745769647468 6649:S26|50415253455f5452454528292e7475706c655769647468283129 6650:O3|@5975,@5992,@4335 6651:O3|@4057,@4074,@6019 6652:O4|@4210,@6653,@4209,@332 6653:O3|@6655,@6657,@6654 6654:O2|@6659,@9381 6655:O2|@6656,@9381 6656:C2,32|82e3000082d800047c17b0404082000c386000034e800020386000014e800020|@337,983041| 6657:O2|@6658,@9381 6658:C2,76|7f2802a6633900023ae30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092e300083ae0008b92e3000482f8000492e300007f2803a64e800020|@337,917505| 6659:C2,48|82e3000082d800047c17b0404082000c806300084e800020973bfffc3c6002a160630a30800d00287c0803a64e800021|@337,983041|28,3,@341 6660:O1|@6669 6661:O1|@6662 6662:C2,136|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc947bfffc3a59000038bb000080830004806300003c0002b1600071f07c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080bb000090a30000809b0004908300047e4803a63b7b00084e800020|@6665,1044487|56,3,@6663 6663:C2,228|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021398000025460f80140a20010800d00347c0803a64e8000217f03661541a3fff03ad900003aa300003a8400003a65000038b4000038800081387800003f000000631841c8801800007c0803a64e80002192a30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138bd0004919d0000906500043880ffff908500003d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d000090a300009073000092930004386000017ec803a64e800020|@6664,1040391|92,3,I11 6664:S28|5374726574636841727261792e737472657463684172726179283329 6665:S28|5374726574636841727261792e737472657463684172726179283129 6666:O1|@6667 6667:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a3000880830004806300003c0002a36000620c7c0903a64e800420|@6668,1048079|44,3,@1198 6668:S22|5374726574636841727261792e757064617465283129 6669:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180830004806300003c0002a36000414c7c0903a64e800420|@6670,1032195|40,3,@1155 6670:S19|5374726574636841727261792e737562283129 6671:O3|@6673,@4982,@6672 6672:O3|@6677,@4982,@4597 6673:C2,228|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002128040001418200148098000482e4000082f700004800001082f800048097000082e40008398000063bbdffe47c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002b162b5754892b6000090760014829b00009296001090b6000c827800089276000882580004925600043a230000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092c3000890c30004922300003a1800003b170000801800007c0903a67f2803a63b7b00044e800420|@6676,1048575|104,3,@6674 6674:C2,700|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d70000973bfffc971bfffc947bfffc8078001483160014801800007c0803a64e80002182bb00048295000482740028947bfffc807300088313000c801800007c0803a64e8000213a430000807b00003b120000801800007c0803a64e800021823b00088211000481f0002c947bfffc807b0008830f0004801800007c0803a64e80002139c300003c6002a16063f6583b0e0000801800007c0803a64e800021815b000c812a00048109002c807b000883080000801800007c0803a64e80002180fb000c38c30000806700103b060000801800007c0803a64e80002180bb000c808500048064002c8323000c807b00083b190000801800007c0803a64e8000213b0300003c6002a66063e9d8801800007c0803a64e80002182fb000c82d7000482b6002c807b000883150004801800007c0803a64e8000213a8300003c6002a16063f6583b140000801800007c0803a64e800021827b000c825300048232002c807b000883110000801800007c0803a64e8000213a0300003c6002af606366cc3b100000801800007c0803a64e80002181fb000c81cf0004814e002c807b0008830a000c801800007c0803a64e800021392300003c6002a06063ee143b090000801800007c0803a64e800021811b000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138fd0004919d000038c0000190c7000480a8000c90a7000080bb0008809b00003867000083080008801800007c0803a64e800021809b000c806400048323002c807b000883190008801800007c0803a64e8000213b03000038600001801800007c0803a64e80002182fb000c82d7000482b6002c807b000883150008801800007c0803a64e8000213a830000386000013b140000833b0010801800007c0903a67f2803a63b7b00144e800420|@6675,1048575|172,3,@711 296,3,@2419 352,3,@711 412,3,@6163 472,3,@265 6675:S29|535452554354555245535f28292e6572726f724e656172283529283129 6676:S26|535452554354555245535f28292e6572726f724e656172283529 6677:C2,260|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002b162d6798c92d7000082d8000492d7000890b70004398000053bbdffe87c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003e8002b162947d8892950000829800089295001092f5000c92d5000890b50004398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138bd0004919d00003e6002b16273aa209265000092a5000438c400003a4500003ca0000060a5466838830000387200003a3800003b170000801800007c0903a67f2803a64e800420|@6706,1048575|68,3,@6678 128,3,@6680 196,3,@6705 220,3,I48 6678:C2,936|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0400014082000c386000014e80002082e400042c170001408200b054cbf80140a20010800d00347c0803a64e8000212c0600014181004c82d8000882b6002c973bfffc8078000483150000801800007c0803a64e8000213a8300003c6002aa6063f9243b140000833b0000801800007c0903a67f2803a63b7b00044e8004203ac30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000090c3000482a4000092a300003b160000801800007c0903a67f2803a64e80042054cbf80140a20010800d00347c0803a64e8000212c0600014181004c82d8000882b6002c973bfffc8078000483150000801800007c0803a64e8000213a8300003c6002aa6063f9243b140000833b0000801800007c0903a67f2803a63b7b00044e8004203ad900003ab800003a8300003a7700008244000038800059386500003f00000063184368801800007c0803a64e800021280300014182000c3a2000034800002438800077386500003f00000063184368801800007c0803a64e8000213a2300006a30000281f5000881cf002c96dbfffc96bbfffc969bfffc94bbfffc94dbfffc967bfffc965bfffc961bfffc80750004830e0004801800007c0803a64e800021394300003c6002a16063f6583b0a0000801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000813b000c91230004811b000491030000831b0014801800007c0803a64e80002180fb001880c7000880a6002c806700048305000c801800007c0803a64e80002138830000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003b20000193230004831b0000930300003b040000801800007c0803a64e80002182fb001882d7000882b6002c8077000483150000801800007c0803a64e8000213a830000807b00103b140000801800007c0803a64e800021827b0018825300088232002c8073000483110008801800007c0803a64e8000213a030000386000013b100000801800007c0803a64e80002181fb001881cf0008814e002c806f0004830a000c801800007c0803a64e800021392300003c6002a06063ee143b090000801800007c0803a64e800021811b000c398000025500f80140a20010800d00347c0803a64e8000217cec441141a3fff038c7000080bb0010809b0008807b0014831b0018833b001c7f2803a63b7b00204bfffc64|@6679,1048575|124,3,@4530 296,3,@4530 360,3,I24 404,3,I24 496,3,@711 840,3,@265 6679:S45|535452554354555245535f28292e646973706c617953747275637473283329646973706c61794c697374283429 6680:C2,7748|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021548bf80140a20010800d00347c0803a64e8000212c0400014181004c82f8000882d7002c973bfffc8078000483160000801800007c0803a64e8000213aa300003c6002aa6063f9243b150000833b0000801800007c0903a67f2803a63b7b00044e80042082e300002c17000f408201b4398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002b162b59be892b600009316000c829800089296000882780004927600048254002c973bfffc971bfffc949bfffc80030004941bfffc96dbfffc3873000083120004801800007c0803a64e8000213a2300003c6002a66063e9d83b110000801800007c0803a64e800021821b000c81f0000881cf002c80700004830e0000801800007c0803a64e800021394300003c6002a7606341a83b0a0000801800007c0803a64e800021813b000c8109000880e8002c806900048307000c801800007c0803a64e80002138c300003c6002a06063ee143b060000801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138bd0004919d00003c8002b160849f1890850000807b000090650004833b000c80db00083b0500003ca002a160a5a11c809b0004387800008319000c801800007c0803a64e80002182fb000c82d7000882b6002c8077000483150008801800007c0803a64e8000213a830000386000013b140000833b0010801800007c0903a67f2803a63b7b00144e8004202c17fff14082005082d8000882b6002c973bfffc80030004941bfffc8078000483150000801800007c0803a64e8000213a830000807b00003b140000833b0004801800007c0903a67f2803a63b7b00084e8004202c17fff3408201f082d8000882b6002c973bfffc971bfffc949bfffc80030004941bfffc8078000483150004801800007c0803a64e8000213a8300003c6002a66063e9943b140000801800007c0803a64e800021827b0008825300088232002c8073000483110000801800007c0803a64e8000213a0300003c6002a7606341743b100000801800007c0803a64e80002181fb000881cf0008814e002c806f0004830a000c801800007c0803a64e800021392300003c6002a06063ee143b090000801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021391d0004919d00003ce002b160e79fb490e8000080db000890c8000480a6000c80db0004388500003ca0000060a5466838640000809b00003b230000386800003b190000801800007c0803a64e800021831b000882f8000882d7002c807800048316000c801800007c0803a64e8000213aa300003c6002a06063ee143b150000801800007c0803a64e800021829b0008827400088253002c8074000483120000801800007c0803a64e8000213a2300003c6002a7606342703b110000801800007c0803a64e800021821b000881f0000881cf002c80700004830e0008801800007c0803a64e80002139430000386000013b0a0000833b000c801800007c0903a67f2803a63b7b00104e8004202c17000b408201b4398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002b162b5a03c92b600009316000c829800089296000882780004927600048254002c973bfffc971bfffc949bfffc80030004941bfffc96dbfffc3873000083120004801800007c0803a64e8000213a2300003c6002a66063e9d83b110000801800007c0803a64e800021821b000c81f0000881cf002c80700004830e0000801800007c0803a64e800021394300003c6002a7606343643b0a0000801800007c0803a64e800021813b000c8109000880e8002c806900048307000c801800007c0803a64e80002138c300003c6002a06063ee143b060000801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138bd0004919d00003c8002b16084a22090850000807b000090650004833b000c80db00083b0500003ca002a160a5a11c809b0004387800008319000c801800007c0803a64e80002182fb000c82d7000882b6002c8077000483150008801800007c0803a64e8000213a830000386000013b140000833b0010801800007c0903a67f2803a63b7b00144e8004202c17fff54082005082d8000882b6002c973bfffc80030004941bfffc8078000483150000801800007c0803a64e8000213a830000807b00003b140000833b0004801800007c0903a67f2803a63b7b00084e8004202c17fff7408201f082d8000882b6002c973bfffc971bfffc949bfffc80030004941bfffc8078000483150004801800007c0803a64e8000213a8300003c6002a66063e9943b140000801800007c0803a64e800021827b0008825300088232002c8073000483110000801800007c0803a64e8000213a0300003c6002a7606344703b100000801800007c0803a64e80002181fb000881cf0008814e002c806f0004830a000c801800007c0803a64e800021392300003c6002a06063ee143b090000801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021391d0004919d00003ce002b160e7a2b890e8000080db000890c8000480a6000c80db0004388500003ca0000060a5466838640000809b00003b230000386800003b190000801800007c0803a64e800021831b000882f8000882d7002c807800048316000c801800007c0803a64e8000213aa300003c6002a06063ee143b150000801800007c0803a64e800021829b0008827400088253002c8074000483120000801800007c0803a64e8000213a2300003c6002a7606342703b110000801800007c0803a64e800021821b000881f0000881cf002c80700004830e0008801800007c0803a64e80002139430000386000013b0a0000833b000c801800007c0903a67f2803a63b7b00104e8004202c1700114082021882d8000882b6002c973bfffc971bfffc949bfffc80030008941bfffc8003000c941bfffc8078000483150004801800007c0803a64e8000213a8300003c6002a16063f6583b140000801800007c0803a64e800021827b000c825300088232002c8073000483110000801800007c0803a64e8000213a0300003c6002a7606343bc3b100000801800007c0803a64e80002181fb000c81cf0008814e002c806f0004830a000c801800007c0803a64e800021392300003c6002a66063e9943b090000801800007c0803a64e800021811b000c80e8000880c7002c8068000483060000801800007c0803a64e800021947bfffc3c8002b160849ec4807b00083c0002a1600074a87c0803a64e800021831b0000801800007c0803a64e80002180bb0010808500088064002c8323000c806500043b190000801800007c0803a64e8000213b0300003c6002a06063ee14801800007c0803a64e80002182fb001082db000c3980000256c0f80140a20010800d00347c0803a64e8000217eacb41141a3fff0398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00003a8000039283000c827700049263000892a30004825b00049243000083170010801800007c0803a64e800021823b00108211000881f0002c80710004830f0008801800007c0803a64e80002139c30000386000013b0e0000833b0014801800007c0903a67f2803a63b7b00184e8004202c17ffff4082021882d8000882b6002c973bfffc971bfffc949bfffc80030008941bfffc8003000c941bfffc8078000483150004801800007c0803a64e8000213a8300003c6002a16063f6583b140000801800007c0803a64e800021827b000c825300088232002c8073000483110000801800007c0803a64e8000213a0300003c6002a7606344343b100000801800007c0803a64e80002181fb000c81cf0008814e002c806f0004830a000c801800007c0803a64e800021392300003c6002a66063e9943b090000801800007c0803a64e800021811b000c80e8000880c7002c8068000483060000801800007c0803a64e800021947bfffc3c8002b160849ec4807b00083c0002a1600074a87c0803a64e800021831b0000801800007c0803a64e80002180bb0010808500088064002c8323000c806500043b190000801800007c0803a64e8000213b0300003c6002a06063ee14801800007c0803a64e80002182fb001082db000c3980000256c0f80140a20010800d00347c0803a64e8000217eacb41141a3fff0398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00003a8000039283000c827700049263000892a30004825b00049243000083170010801800007c0803a64e800021823b00108211000881f0002c80710004830f0008801800007c0803a64e80002139c30000386000013b0e0000833b0014801800007c0903a67f2803a63b7b00184e8004202c170005408201b4398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002b162b5a30c92b600009316000c829800089296000882780004927600048254002c973bfffc971bfffc949bfffc80030004941bfffc96dbfffc3873000083120004801800007c0803a64e8000213a2300003c6002a66063e9d83b110000801800007c0803a64e800021821b000c81f0000881cf002c80700004830e0000801800007c0803a64e800021394300003c6002a7606344183b0a0000801800007c0803a64e800021813b000c8109000880e8002c806900048307000c801800007c0803a64e80002138c300003c6002a06063ee143b060000801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138bd0004919d00003c8002b16084a78c90850000807b000090650004833b000c80db00083b0500003ca002a160a5a11c809b0004387800008319000c801800007c0803a64e80002182fb000c82d7000882b6002c8077000483150008801800007c0803a64e8000213a830000386000013b140000833b0010801800007c0903a67f2803a63b7b00144e8004202c17fffd408201a882d8000882b6002c973bfffc971bfffc949bfffc80030004941bfffc80030008941bfffc8078000483150004801800007c0803a64e8000213a8300003c6002a06063ee143b140000801800007c0803a64e800021827b000c825300088232002c8073000483110000801800007c0803a64e800021947bfffc38800051807b00043c0002a1600074a87c0803a64e800021831b0000801800007c0803a64e800021821b001081f0000881cf002c80700004830e000c801800007c0803a64e800021394300003c6002a16063f6583b0a0000801800007c0803a64e800021809b000c807b0008831b00104bfff099813b00108109000880e8002c806900048307000c801800007c0803a64e80002138c300003c6002a16063f6583b060000801800007c0803a64e80002180bb0010808500088064002c83230000806500043b190000801800007c0803a64e8000213b03000038600053801800007c0803a64e80002182fb001082d7000882b6002c8077000483150008801800007c0803a64e8000213a830000386000013b140000833b0014801800007c0903a67f2803a63b7b00184e8004202c1700034082018c82d8000882b6002c973bfffc971bfffc949bfffc80030004941bfffc8003000c941bfffc8078000483150004801800007c0803a64e8000213a8300003c6002a06063ee143b140000801800007c0803a64e8000213c80000060844668807b00043f00000063184368801800007c0803a64e800021280300014182000848000094827b000c825300088232002c8073000483110000801800007c0803a64e800021947bfffc3c8002b160849ec4807b00083c0002a1600074a87c0803a64e800021831b0000801800007c0803a64e800021821b001081f0000881cf002c80700004830e000c801800007c0803a64e800021394300003c6002ab60632ff83b0a0000801800007c0803a64e8000213b7b0004813b0008398000025520f80140a20010800d00347c0803a64e8000217d0c4c1141a3fff038880000807b0000831b000c4bffee9580fb000c80c7000880a6002c8067000483050008801800007c0803a64e80002138830000386000013b040000833b0010801800007c0903a67f2803a63b7b00144e8004202c17fff94082020082d8000882b6002c973bfffc971bfffc949bfffc80030008941bfffc8003000c941bfffc8078000483150004801800007c0803a64e8000213a8300003c6002a66063e9d83b140000801800007c0803a64e800021827b000c825300088232002c8073000483110000801800007c0803a64e8000213a0300003c6002a7606341583b100000801800007c0803a64e80002181fb000c81cf0008814e002c806f0004830a000c801800007c0803a64e800021392300003c6002a06063ee143b090000801800007c0803a64e800021811b000428080001408200084800007c80fb000c80c7000880a6002c8067000483050000801800007c0803a64e800021388300003c6002a7606341903b040000801800007c0803a64e800021807b000c832300088319002c806300048318000c801800007c0803a64e8000213ae300003c6002a06063ee143b170000801800007c0803a64e80002182db000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003e8002b16294a824929500008276000892750008825600049255000480db000838a0007b809b0000387500008316000c801800007c0803a64e800021823b000c8211000881f0002c80710004830f0008801800007c0803a64e80002139c30000386000013b0e0000833b0010801800007c0903a67f2803a63b7b00144e8004202c17ffef408203a882c3000482b800088295002c973bfffc971bfffc949bfffc80160004941bfffc80160008941bfffc8016000c941bfffc80160010941bfffc8078000483140004801800007c0803a64e8000213a6300003c6002a66063e9d83b130000801800007c0803a64e800021809b0010807b000c831b00144bffebcd825b0014823200088211002c807200048310000c801800007c0803a64e80002139e300003c6002a06063ee143b0f0000801800007c0803a64e80002181db0014814e0008812a002c806e000483090000801800007c0803a64e800021390300003c6002a7606344543b080000801800007c0803a64e80002180fb001480c7000880a6002c806700048305000c801800007c0803a64e800021388300003c6002a06063ee143b040000801800007c0803a64e800021807b0014832300088319002c8063000483180000801800007c0803a64e8000213ae300003c6002a7606341903b170000801800007c0803a64e80002182db001482b600088295002c807600048314000c801800007c0803a64e8000213a6300003c6002a06063ee143b130000801800007c0803a64e800021825b00148232000882110010398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d000039e0000391e3000c81d2000491c30008815b001091430004813b00049123000083100050801800007c0803a64e800021811b001480e8000880c7002c8068000483060000801800007c0803a64e80002138a30000807b00083b050000801800007c0803a64e800021809b0014806400088323002c806400048319000c801800007c0803a64e8000213b0300003c6002a06063ee14801800007c0803a64e80002182fb001482d7000882b6002c8077000483150000801800007c0803a64e8000213a8300003860007b3b140000801800007c0803a64e800021827b0014825300088232002c807300048311000c801800007c0803a64e8000213a0300003c6002a06063ee143b100000801800007c0803a64e80002181fb001481db00103980000255c0f80140a20010800d00347c0803a64e8000217d4c741141a3fff0398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d0000392000039123000c810f0004910300089143000480fb000090e30000830f0010801800007c0803a64e80002180db001480a600088085002c8066000483040008801800007c0803a64e8000213b230000386000013b190000833b0018801800007c0903a67f2803a63b7b001c4e8004202c1700074082036082d8000882b6002c973bfffc971bfffc949bfffc80030004941bfffc80030008941bfffc80030010941bfffc8078000483150004801800007c0803a64e8000213a8300003c6002a66063e9d83b140000801800007c0803a64e800021827b0010825300088232002c8073000483110000801800007c0803a64e800021821b0000281000014182001439e300003c6002a7606344a44800001039e300003c6002a76063453c3b0f0000801800007c0803a64e80002181db0010814e0008812a002c806e00048309000c801800007c0803a64e800021390300003c6002a06063ee143b080000801800007c0803a64e80002180fb000c3980000254e0f80140a20010800d00347c0803a64e8000217ccc3c1141a3fff0398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138bd0004919d00003c8002b16084a8e090850000807b0010906500043b25000038a00077809b00048303000c38790000801800007c0803a64e80002182fb001082d7000882b6002c807700048315000c801800007c0803a64e8000213a8300003c6002a06063ee143b140000801800007c0803a64e800021827b0010825300088232002c8073000483110000801800007c0803a64e8000213a0300003c6002a7606342583b100000801800007c0803a64e80002181fb001081cf0008814e002c806f0004830a000c801800007c0803a64e800021392300003c6002a06063ee143b090000801800007c0803a64e800021811b000c398000025500f80140a20010800d00347c0803a64e8000217cec441141a3fff0398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138dd0004919d00003ca002b160a5a93490a60000809b0010908600043866000038c7000038a000778324000c809b00083b190000801800007c0803a64e800021831b001082f8000882d7002c807800048316000c801800007c0803a64e8000213aa300003c6002a06063ee143b150000801800007c0803a64e800021829b0010827400088253002c8074000483120000801800007c0803a64e8000213a2300003c6002a7606342703b110000801800007c0803a64e800021821b001081f0000881cf002c80700004830e0008801800007c0803a64e80002139430000386000013b0a0000833b0014801800007c0903a67f2803a63b7b00184e8004202c17fffb4082019082d8000882b6002c973bfffc971bfffc949bfffc80030004941bfffc8078000483150004801800007c0803a64e8000213a8300003c6002aa6063e6a03b140000801800007c0803a64e800021827b0008825300088232002c8073000483110000801800007c0803a64e8000213a0300003c6002a7606345543b100000801800007c0803a64e80002181fb000881cf0008814e002c806f0004830a000c801800007c0803a64e800021392300003c6002a06063ee143b090000801800007c0803a64e800021811b0004398000025500f80140a20010800d00347c0803a64e8000217cec441141a3fff0398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138dd0004919d00003ca002b160a5a98890a60000809b0008908600043866000038c700003ca0000060a546688324000c809b00003b190000801800007c0803a64e800021831b000882f8000882d7002c8078000483160008801800007c0803a64e8000213aa30000386000013b150000833b000c801800007c0903a67f2803a63b7b00104e8004202c17000d4082007882d8000882b60014398000025480f80140a20010800d00347c0803a64e8000217e8c241141a3fff082630004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00008258000492430008928300049263000083150000801800007c0903a67f2803a64e8004202c17000940820120398000025480f80140a20010800d00347c0803a64e8000217ecc241141a3fff0973bfffc971bfffc949bfffc80030008941bfffc8003000c941bfffc38960000806300044bffe2dd82bb000c829500088274002c8075000483130000801800007c0803a64e800021825b000028120001418200143a2300003c6002b160639eb8480000103a2300003c6002b160639ec43b110000801800007c0803a64e800021821b000c81f0000881cf002c80700004830e000c801800007c0803a64e800021394300003c6002a06063ee143b0a0000801800007c0803a64e800021813b0008398000025520f80140a20010800d00347c0803a64e8000217d0c4c1141a3fff038880000807b0004831b000c833b00107f2803a63b7b00144bffe21082d8000882b6002c973bfffc8078000483150000801800007c0803a64e8000213a8300003c6002b16063a9dc3b140000833b0000801800007c0903a67f2803a63b7b00044e800420|@6704,1048575|96,3,@4530 180,3,@6681 264,3,@2419 324,3,@2760 384,3,@265 444,3,@6685 476,3,@566 720,3,@2416 780,3,@2756 840,3,@265 900,3,@6687 932,3,I48 1008,3,@265 1068,3,@2776 1204,3,@6689 1288,3,@2419 1348,3,@2795 1408,3,@265 1468,3,@6691 1500,3,@566 1744,3,@2416 1804,3,@2814 1864,3,@265 1924,3,@6693 1956,3,I48 2032,3,@265 2092,3,@2776 2252,3,@711 2312,3,@2801 2372,3,@2416 2432,3,@6683 2444,3,@511 2516,3,@265 2792,3,@711 2852,3,@2810 2912,3,@2416 2972,3,@6683 2984,3,@511 3056,3,@265 3308,3,@6694 3392,3,@2419 3452,3,@2808 3512,3,@265 3572,3,@6696 3604,3,@566 3772,3,@265 3840,3,@511 3908,3,@711 3984,3,@711 4200,3,@265 4224,3,I48 4236,3,I24 4304,3,@6683 4316,3,@511 4384,3,@4609 4600,3,@2419 4660,3,@2754 4720,3,@265 4796,3,@2758 4856,3,@265 4920,3,@6698 5136,3,@2419 5212,3,@265 5272,3,@2812 5332,3,@265 5392,3,@2758 5452,3,@265 5664,3,@265 5776,3,@265 6064,3,@2419 6136,3,@2818 6152,3,@2830 6212,3,@265 6308,3,@6700 6396,3,@265 6456,3,@2774 6516,3,@265 6612,3,@6701 6704,3,@265 6764,3,@2776 6916,3,@4521 6976,3,@2832 7036,3,@265 7132,3,@6702 7160,3,I48 7512,3,@6682 7528,3,@6683 7588,3,@265 7712,3,@6703 6681:C2,692|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000882d7002c973bfffc971bfffc949bfffc80030004941bfffc80030008941bfffc8003000c941bfffc80030014941bfffc8078000483160004801800007c0803a64e8000213aa300003c6002a66063e9d83b150000801800007c0803a64e800021829b0014827400088253002c8074000483120000801800007c0803a64e8000213a230000807b000c3b110000801800007c0803a64e800021821b000081f000002c0f000140820008480000d881db0014814e0008812a002c806e000483090000801800007c0803a64e800021811b0004280800014182001438e300003c6002b160639eb84800001038e300003c6002b160639ec43b070000801800007c0803a64e80002180db001480a600088085002c806600048304000c801800007c0803a64e8000213b2300003c6002a06063ee143b190000801800007c0803a64e800021831b0010398000025700f80140a20010800d00347c0803a64e8000217eecc41141a3fff082db001438970000807b00008316000c801800007c0803a64e80002182bb0008829500002c14000140820008480000bc827b0014825300088232002c8073000483110000801800007c0803a64e8000213a0300003c6002ab606330043b100000801800007c0803a64e80002181fb001481cf0008814e002c806f0004830a000c801800007c0803a64e800021392300003c6002a06063ee143b090000801800007c0803a64e800021811b0010398000025500f80140a20010800d00347c0803a64e8000217cec441141a3fff080db001438870000807b00088306000c801800007c0803a64e80002180bb0014808500088064002c83230008806500043b190000801800007c0803a64e8000213b03000038600001833b0018801800007c0903a67f2803a63b7b001c4e800420|@6684,1048575|108,3,@2419 256,3,@6682 272,3,@6683 332,3,@265 476,3,@4610 536,3,@265 6682:S3|203a3e 6683:S2|203a 6684:S61|535452554354555245535f28292e646973706c617953747275637473283329646973706c6179283229646973706c617953747275637442696e64283229 6685:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@6686,1048575| 6686:S61|535452554354555245535f28292e646973706c617953747275637473283329646973706c6179283229646973706c617953747275637442696e64283129 6687:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@6688,1048575| 6688:S41|535452554354555245535f28292e646973706c617953747275637473283329646973706c6179283129 6689:C2,388|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000882d7002c973bfffc971bfffc949bfffc80030004941bfffc8003000c941bfffc8078000483160004801800007c0803a64e8000213aa300003c6002a66063e9d83b150000801800007c0803a64e800021829b000c827400088253002c8074000483120000801800007c0803a64e800021947bfffc3c8002ab60843004807b00083c0002a1600074a87c0803a64e800021831b0000801800007c0803a64e800021823b00108211000881f0002c80710004830f000c801800007c0803a64e80002139c300003c6002a06063ee143b0e0000801800007c0803a64e800021815b000c398000025540f80140a20010800d00347c0803a64e8000217d2c541141a3fff0811b001038890000807b00048308000c801800007c0803a64e80002180fb001080c7000880a6002c8067000483050008801800007c0803a64e80002138830000386000013b040000833b0014801800007c0903a67f2803a63b7b00184e800420|@6690,1048575|92,3,@2419 152,3,@4610 164,3,@511 232,3,@265 6690:S58|535452554354555245535f28292e646973706c617953747275637473283329646973706c6179283229646973706c617953696742696e64283229 6691:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@6692,1048575| 6692:S58|535452554354555245535f28292e646973706c617953747275637473283329646973706c6179283229646973706c617953696742696e64283129 6693:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@6688,1048575| 6694:C2,1056|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000882d7002c973bfffc971bfffc949bfffc80030000941bfffc80030004941bfffc8003000c941bfffc80030010941bfffc80030018941bfffc8078000483160004801800007c0803a64e8000213aa300003c6002a66063e9d83b150000801800007c0803a64e800021829b0018827400088253002c8074000483120000801800007c0803a64e800021947bfffc38800051807b000c3c0002a1600074a87c0803a64e800021831b0000801800007c0803a64e800021823b001c8211000881f0002c80710004830f000c801800007c0803a64e80002139c300003c6002a06063ee143b0e0000801800007c0803a64e800021815b001c812a00088109002c806a000483080004801800007c0803a64e80002138e300003c6002aa6063e6a03b070000801800007c0803a64e80002180db00183980000254c0f80140a20010800d00347c0803a64e8000217cac341141a3fff0809b001c8064000c388500003b230000807b00143b190000801800007c0803a64e800021831b001c82f8000882d7002c8078000483160008801800007c0803a64e8000213aa30000386000013b150000801800007c0803a64e800021829b001c827400088253002c8074000483120000801800007c0803a64e8000213a230000386000533b110000801800007c0803a64e800021821b000481f00000280f0001418200d881db001c814e0008812a002c806e000483090000801800007c0803a64e800021811b0008280800014182001438e300003c6002b160639eb84800001038e300003c6002b160639ec43b070000801800007c0803a64e80002180db001c80a600088085002c806600048304000c801800007c0803a64e8000213b2300003c6002a06063ee143b190000801800007c0803a64e800021831b0018398000025700f80140a20010800d00347c0803a64e8000217eecc41141a3fff082db001c38970000807b00048316000c801800007c0803a64e80002181db001c814e0008812a002c806e00048309000c801800007c0803a64e800021390300003c6002a06063ee143b080000801800007c0803a64e80002180fb001c80c7000880a6002c8067000483050000801800007c0803a64e800021388300003860007b3b040000801800007c0803a64e800021807b001c832300088319002c806300048318000c801800007c0803a64e8000213ae300003c6002a06063ee143b170000801800007c0803a64e80002182db00183980000256c0f80140a20010800d00347c0803a64e8000217eacb41141a3fff0829b001c38950000807b00108314000c801800007c0803a64e800021827b001c825300088232002c8073000483110008801800007c0803a64e8000213a030000386000013b100000833b0020801800007c0903a67f2803a63b7b00244e800420|@6695,1048575|116,3,@2419 184,3,@511 252,3,@265 312,3,@4521 584,3,@6682 600,3,@6683 660,3,@265 784,3,@265 900,3,@265 6695:S60|535452554354555245535f28292e646973706c617953747275637473283329646973706c6179283229646973706c617946756e637442696e64283229 6696:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@6697,1048575| 6697:S60|535452554354555245535f28292e646973706c617953747275637473283329646973706c6179283229646973706c617946756e637442696e64283129 6698:C2,108|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000882d7002c973bfffc80030000941bfffc8078000483160000801800007c0803a64e8000213aa30000807b00003b150000833b0004801800007c0903a67f2803a63b7b00084e800420|@6699,1048575| 6699:S44|535452554354555245535f28292e646973706c617953747275637473283329646973706c6179283229283129 6700:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@6688,1048575| 6701:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@6688,1048575| 6702:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@6688,1048575| 6703:S5|3c6261643e 6704:S41|535452554354555245535f28292e646973706c617953747275637473283329646973706c6179283229 6705:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@6688,1048575| 6706:S31|535452554354555245535f28292e646973706c617953747275637473283329 6707:O3|@6708,@4982,@4769 6708:C2,624|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d70008973bfffc971bfffc947bfffc949bfffc94bbfffc94dbfffc80160080941bfffc83160070801800007c0803a64e800021831b0000801800007c0803a64e80002182bb00148295000482740008947bfffc83130074801800007c0803a64e800021825b0018398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a3d0004919d00003e0002b16210ad38921100009071000881f2000491f10004398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002139dd0004919d00003d4002b1614aae04914e0000906e000891ee0004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021393d0004919d00003d0002b16108aea4910900009069000891e90004398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002138fd0004919d000091c70008922700049127000080db000c94dbfffc80bb000c94bbfffc809b0028949bfffc80db001c38a70000809b00203860000183120008801800007c0803a64e800021807b0018832300048319000880180084941bfffc807b001883180070801800007c0803a64e80002182fb001c82d7000482b60008947bfffc807b000883150078801800007c0803a64e800021829b00208274000482530008947bfffc807b000c8312007c801800007c0803a64e8000213a230000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00009223000c821b00009203000881fb000c91e3000481db000491c30000831b0008833b0028801800007c0903a67f2803a63b7b00304e800420|@6713,1048575|176,3,@6709 236,3,@6711 292,3,@6712 6709:C2,132|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7002482b700088283000082630004398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00009263000c92830008825500d892430004823800089223000083160000801800007c0903a67f2803a64e800420|@6710,1048575| 6710:S36|535452554354555245535f28292e636f70795369672835296c617374416464722d283129 6711:C2,132|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7002482b700088283000082630004398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00009263000c928300088255004092430004823800089223000083160000801800007c0903a67f2803a64e800420|@6710,1048575| 6712:C2,132|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7002482b700088283000082630004398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00009263000c928300088255012892430004823800089223000083160000801800007c0903a67f2803a64e800420|@6710,1048575| 6713:S24|535452554354555245535f28292e636f7079536967283529 6714:O5|@6716,@4982,@6671,@6742,@6715 6715:O4|@6749,@4982,@6742,@6671 6716:C2,316|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021398000073bbdffe07c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002b162d6b0e892d7000090b7001882db000092d7001490d7001082bb000492b7000c82980004929700088278000892770004973bfffc971bfffc947bfffc949bfffc94dbfffc80050004941bfffc3b170000801800007c0803a64e800021825b0010398000093bbdffd87c1df04040a00010800d001c7c0803a64e8000213a3d0004919d00003e0002b16210bb4c9211000081f2001091f1002081db000091d1001c8152000c91510018813b001891310014811b00049111001080fb001c90f1000c80d2000890d1000880b2000490b10004809b0008807b000c3b110000833b0014801800007c0903a67f2803a63b7b00204e800420|@6741,1048575|68,3,@6717 204,3,@6727 6717:C2,332|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000882d7002482b70008973bfffc971bfffc947bfffc80160008941bfffc3864000083150074801800007c0803a64e800021829b0008398000093bbdffd87c1df04040a00010800d001c7c0803a64e8000213a7d0004919d00003e4002b16252b2509253000092930020823b00049233001c821400189213001881f4001491f3001481d4001091d300108154000c9153000c81340008913300088114000491130004398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138fd0004919d00003cc002b160c6ba9090c700009267000438a30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000388000019083000890e3000490a30000831b0000833b000c801800007c0903a67f2803a63b7b00104e800420|@6726,1048575|124,3,@6718 232,3,@6724 6718:C2,1936|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000882d7002082b70008973bfffc971bfffc947bfffc949bfffc807500d883160000801800007c0803a64e8000213a830000807b00003b140000801800007c0803a64e800021280300014182050c827b0008825300088232002082120008807000d883110004801800007c0803a64e80002139e30000807b00003b0f0000801800007c0803a64e80002181db0008814e0008812a0024810a0008947bfffc80090004941bfffc806e001c83080074801800007c0803a64e80002180fb001080c7000880a6000838830000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000833b000c93230008830500d89303000490830000831b0000801800007c0803a64e800021706b0001408203b882fb001082d7000882b6000880030000941bfffc80150098941bfffc807b000c831500d4801800007c0803a64e800021831b0000801800007c0803a64e800021280300014082035c829b00188274000882530010398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00008234001892230008821b00049203000481fb000c91e3000083120028801800007c0803a64e80002181db0018814e0008812a0008807b000c830900bc801800007c0803a64e800021811b001880e8000880c70008947bfffc807b0008830600bc801800007c0803a64e80002180bb00007cab1b78556bf80140a20010800d00347c0803a64e8000217c051800418200a8809b001c806400088323000880040014941bfffc80040010941bfffc8004000c941bfffc807b001c831900b8801800007c0803a64e800021388300003c6002b16063b9fc3c0002a1600074a87c0803a64e8000213c8002ad6084d6883c0002a1600074a87c0803a64e800021831b002882fb002c907b002c80db000080bb000438800003807b0008831800043b370000801800007c0903a67f2803a63b7b002c4e800420809b001c8064000883230008807b0010831900c4801800007c0803a64e80002128030001418200cc831b001c82f8000882d70010807b00088316001c801800007c0803a64e80002128030001408200a482bb001c829500088274000880150014941bfffc80150010941bfffc8015000c941bfffc807b0014831300b8801800007c0803a64e80002138830000386000513c0002a1600074a87c0803a64e8000213c8002ad6084dc203c0002a1600074a87c0803a64e800021825b0028823b002c907b002c80db000080bb000438800003807b0008831200043b310000801800007c0903a67f2803a63b7b002c4e800420831b001c82f8000882d70008807b0010831600cc801800007c0803a64e80002128030001418200cc82bb001c8295000882740008807b0008831300cc801800007c0803a64e80002128030001408200a4825b001c823200088211000880120014941bfffc80120010941bfffc8012000c941bfffc807b0014831000b8801800007c0803a64e80002138830000386000513c0002a1600074a87c0803a64e8000213c8002b16084ba0c3c0002a1600074a87c0803a64e80002181fb002881db002c907b002c80db000080bb000438800003807b0008830f00043b2e0000801800007c0903a67f2803a63b7b002c4e8004203860000182bb00207ea803a63b7b00244e80002038600001829b001c7e8803a63b7b00204e80002082fb001080170014941bfffc80170010941bfffc8017000c941bfffc809b00183c6002ae606306c43c0002a1600074a87c0803a64e8000213c8002b16084ba283c0002a1600074a87c0803a64e80002182db001c82bb0020907b002080db000080bb000438800003807b0008831600043b350000801800007c0903a67f2803a63b7b00204e800420827b00088253000882320020821200088070004083110000801800007c0803a64e80002139e30000807b00003b0f0000801800007c0803a64e80002128030001418201c481db0008814e0008812a0020810a00088068004083090004801800007c0803a64e80002138e30000807b00003b070000801800007c0803a64e80002180db000880a600088085002483250008947bfffc80040004941bfffc8066001c83190074801800007c0803a64e800021831b001082f8000882d700083aa30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000829b000c92830008827600409263000492a30000831b0000801800007c0803a64e800021706b000140820070825b001082320008821100088063000083100034801800007c0803a64e80002181fb001081cf0008814e0008947bfffc807b0008830a0034801800007c0803a64e800021813b001438830000807b000083090020833b0018801800007c0903a67f2803a63b7b001c4e800420825b001080120014941bfffc80120010941bfffc8012000c941bfffc809b00183c6002b16063ba483c0002a1600074a87c0803a64e8000213c8002b16084ba283c0002a1600074a87c0803a64e800021823b001c821b0020907b002080db000080bb000438800003807b0008831100043b300000801800007c0903a67f2803a63b7b00204e8004203860000181db000c7dc803a63b7b00104e800020|@6723,1048575|640,3,@6719 648,3,@511 664,3,@5500 672,3,@511 888,3,@511 904,3,@5507 912,3,@511 1128,3,@511 1144,3,@6720 1152,3,@511 1296,3,@5571 1304,3,@511 1320,3,@6721 1328,3,@511 1812,3,@6722 1820,3,@511 1836,3,@6721 1844,3,@511 6719:S7|54797065732028 6720:S19|29206973206e6f742061206461746174797065 6721:S23|29206d697373696e6720696e207374727563747572652e 6722:S11|5374727563747572652028 6723:S42|535452554354555245535f28292e6d61746368536967732836296d617463684e616d6573283229283329 6724:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@6725,1048575| 6725:S42|535452554354555245535f28292e6d61746368536967732836296d617463684e616d6573283229283129 6726:S39|535452554354555245535f28292e6d61746368536967732836296d617463684e616d6573283229 6727:C2,636|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7002482b70008973bfffc971bfffc947bfffc949bfffc80160008941bfffc3864000083150074801800007c0803a64e800021829b000c3980000a3bbdffd47c1df04040a00010800d001c7c0803a64e8000213a7d0004919d00003e4002b16252bde49253000092930024823b000892330020821400049213001c81f4001c91f3001881d4001891d300148154001491530010813400109133000c8114000c9113000880f4002090f30004398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138dd0004919d00003ca002b160a5c33090a600009266000438830000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003b2000019323000890c3000490830000831b0000801800007c0803a64e800021831b000c82f8000482d7002482b7000880160008941bfffc807b000883150074801800007c0803a64e800021829b0010398000093bbdffd87c1df04040a00010800d001c7c0803a64e8000213a7d0004919d00003e4002b16252c3d492530000823b000c923300208214001c9213001c81f4001891f3001881d4001491d3001481540010915300108134000c9133000c811400089113000880f4000490f30004398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138dd0004919d00003ca002b160a5cae490a600009266000438830000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003b2000019323000890c3000490830000831b0000801800007c0803a64e80002138600001831b00147f0803a63b7b00184e800020|@6740,1048575|128,3,@6728 244,3,@6732 416,3,@6734 528,3,@6738 6728:C2,916|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8001c82d7002082b70008973bfffc971bfffc947bfffc949bfffc807500d883160000801800007c0803a64e8000213a830000807b00003b140000801800007c0803a64e8000212803000141820184827b00088253001c8232002082120008807000d883110004801800007c0803a64e80002139e30000807b00003b0f0000801800007c0803a64e80002181db0008814e001c812a0024810a0008947bfffc80090004941bfffc806e002083080074801800007c0803a64e80002180fb001080c7001c80a6000838830000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000833b000c93230008830500d89303000490830000831b0000801800007c0803a64e800021706b0001408200a482fb0010398000073bbdffe07c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002b162b5c19492b600008297001c92960018827700189276001482570008925600108237000c9236000c821700109216000881f7001491f6000481db0014921b0014923b0010925b000c38d6000038b30000809b000480630000831700043b2e0000801800007c0903a67f2803a63b7b000c4e8004203860000182fb00147ee803a63b7b00184e800020827b00088253001c82320020821200088070004083110000801800007c0803a64e80002139e30000807b00003b0f0000801800007c0803a64e800021280300014182015081db0008814e001c812a0020810a00088068004083090004801800007c0803a64e80002138e30000807b00003b070000801800007c0803a64e80002180db000880a6001c8085002483250008947bfffc80040004941bfffc8066002083190074801800007c0803a64e800021831b001082f8001c82d700083aa30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000829b000c92830008827600409263000492a30000831b0000801800007c0803a64e800021706b000140820070825b00108232001c821100088063000083100034801800007c0803a64e80002181fb001081cf001c814e0008947bfffc807b0008830a0034801800007c0803a64e800021813b001438830000807b000083090024833b0018801800007c0903a67f2803a63b7b001c4e80042038600001825b00147e4803a63b7b00184e8000203860000181db000c7dc803a63b7b00104e800020|@6731,1048575|356,3,@6729 6729:C2,232|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8001882d70010973bfffc80030000941bfffc80030004941bfffc80160010941bfffc80180014941bfffc80180008941bfffc80180010941bfffc80bb0004808300088078000c83180004801800007c0803a64e8000213aa30000398000063bbdffe47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a30014829b000092830010827b00049263000c825b000892430008823b001092230004821b001492030000831b000c833b0018801800007c0903a67f2803a63b7b001c4e800420|@6730,1048575| 6730:S68|535452554354555245535f28292e6d61746368536967732836296d6174636856616c73283229636865636b5479706573416e64537472756374757265732d283329283129 6731:S65|535452554354555245535f28292e6d61746368536967732836296d6174636856616c73283229636865636b5479706573416e64537472756374757265732d283329 6732:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@6733,1048575| 6733:S65|535452554354555245535f28292e6d61746368536967732836296d6174636856616c73283229636865636b5479706573416e64537472756374757265732d283129 6734:C2,1632|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7002082b70008973bfffc971bfffc947bfffc949bfffc8075012883160000801800007c0803a64e8000213a830000807b00003b140000801800007c0803a64e80002128030001418205e0827b00088253000482320020821200088070012883110004801800007c0803a64e80002139e30000807b00003b0f0000801800007c0803a64e80002181db0008814e0004812a000881090008947bfffc83080008801800007c0803a64e80002180fb000c80c7000480a600088085000c80030004941bfffc807b000083040000801800007c0803a64e800021280300014182003c807b0010832300048319000882f8000c807b000083170008801800007c0803a64e8000213860000182db00147ec803a63b7b00184e800020807b0010832300048319002482f9000880180004941bfffc8063002083170074801800007c0803a64e80002182db001482b60004829500083a630000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000825b001092430008823401289223000492630000831b0000801800007c0803a64e800021706b000140820400821b001481f0000481cf0008814e000880030000941bfffc807b000c830a0008801800007c0803a64e800021813b00188109000480e8000880c700108063000483060000801800007c0803a64e800021280300014182000c38a000034800000838a00001809b001880640004832300088319000894bbfffc807b000483180008801800007c0803a64e80002182fb001c82d7000482b60008829500108063000483140000801800007c0803a64e800021280300014182000c3a600003480000083a6000012813000140820098825b0000281200014182008c823b001c80110014941bfffc80110010941bfffc8011000c941bfffc809b00243c6002b16063ca503c0002a1600074a87c0803a64e8000213c8002b16084ca603c0002a1600074a87c0803a64e800021821b002881fb002c907b002c80db000080bb000438800003807b0008831000083b2f0000801800007c0903a67f2803a63b7b002c4e800420281300014182019c827b00002813000140820190825b001c8232000482110008807b000483100124801800007c0803a64e80002181fb001c81cf0004814e0008947bfffc830a00e8801800007c0803a64e8000212803000141820018811b002080e8000480c700108126000c48000058813b00208109000480e80010398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080c7000c90c3000480bb000090a3000083070004801800007c0803a64e80002139230000809b0020806400048323001083030008953bfffc80190010941bfffc807b001c83180124801800007c0803a64e80002182fb0028947bfffc8017001c941bfffc80170014941bfffc8017000c941bfffc80bb0004809b00348077001083170018801800007c0803a64e8000213ac30000398000063bbdffe47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092c3001482bb000092a30010829b00049283000c827b000892630008825b000c92430004823b001492230000831b0010833b003c801800007c0903a67f2803a63b7b00404e800420827b001c82530004823200108212000880110010941bfffc807b000883100124801800007c0803a64e80002181fb002081cf0004814e0008947bfffc807b0018830a0124801800007c0803a64e800021813b0024947bfffc8009001c941bfffc80090014941bfffc8009000c941bfffc80bb0004809b00308069001083090018801800007c0803a64e80002139030000398000063bbdffe47c1df04040a00010800d001c7c0803a64e800021387d0004919d00009103001480fb000090e3001080db000490c3000c80bb000890a30008809b000c90830004833b001093230000831b0014833b0038801800007c0903a67f2803a63b7b003c4e800420821b001480100014941bfffc80100010941bfffc8010000c941bfffc809b001c3c6002b16063ca503c0002a1600074a87c0803a64e8000213c8002b16084ba283c0002a1600074a87c0803a64e80002181fb002081db0024907b002480db000080bb000438800003807b0008830f00083b2e0000801800007c0903a67f2803a63b7b00244e80042038600001827b000c7e6803a63b7b00104e800020|@6737,1048575|704,3,@6735 712,3,@511 728,3,@6736 736,3,@511 1508,3,@6735 1516,3,@511 1532,3,@6721 1540,3,@511 6735:S7|56616c75652028 6736:S46|29206d75737420626520616e20657863657074696f6e20746f206d6174636820746865207369676e61747572652e 6737:S66|535452554354555245535f28292e6d61746368536967732836296d6174636856616c73283229636865636b56616c756573416e64457863657074696f6e732d283329 6738:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@6739,1048575| 6739:S66|535452554354555245535f28292e6d61746368536967732836296d6174636856616c73283229636865636b56616c756573416e64457863657074696f6e732d283129 6740:S38|535452554354555245535f28292e6d61746368536967732836296d6174636856616c73283229 6741:S26|535452554354555245535f28292e6d6174636853696773283629 6742:O3|@6743,@6672,@4982 6743:C2,96|7f2802a6633900023ae30000398000063bbdffe47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003ec002b162d6cc6892c3000090a300149083001080b8000890a3000c92e3000880980004908300047f2803a64e800020|@6748,983047|48,3,@6744 6744:C2,404|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000c82d70000973bfffc971bfffc947bfffc8078001483160014801800007c0803a64e80002182bb00048295000c82740028947bfffc807300088313000c801800007c0803a64e8000213a430000807b00003b120000801800007c0803a64e800021823b00088211000c81f0002c947bfffc807b0008830f0000801800007c0803a64e80002181db000c947bfffc808e00103c6002b16063ce183c0002a1600074a87c0803a64e8000213c8002b16084ce303c0002a1600074a87c0803a64e800021831b0000801800007c0803a64e800021815b0010812a000c8109002c807b000c8308000c801800007c0803a64e80002138e300003c6002ab60632ff83b070000801800007c0803a64e80002180db0010398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138bd0004919d0000388000019085000480660008906500003b25000080bb000c809b00043879000083060004833b0014801800007c0903a67f2803a63b7b00184e800420|@6747,1048575|180,3,@6745 188,3,@511 204,3,@6746 212,3,@511 280,3,@4609 6745:S16|5768696c6520636865636b696e672028 6746:S6|29206e656172 6747:S29|535452554354555245535f28292e666f756e644e656172283329283129 6748:S26|535452554354555245535f28292e666f756e644e656172283329 6749:C2,768|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d70008973bfffc971bfffc947bfffc949bfffc94bbfffc94dbfffc831600b8801800007c0803a64e80002182bb00108295000482740008947bfffc807b000c831300b8801800007c0803a64e800021825b00148232000482110008947bfffc807b0014831000bc801800007c0803a64e80002181fb001881cf0004814e0008947bfffc807b0014830a00bc801800007c0803a64e800021813b00007d2b1b78556bf80140a20010800d00347c0803a64e8000217c0918004182001838600001811b00207d0803a63b7b00304e800020811b001c80e8000480c70008807b0014830600c0801800007c0803a64e80002180bb001c80850004832400103b030000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00009303000882fb001892e3000482db000892c30000971bfffc80190010941bfffc83190000801800007c0803a64e80002182bb002482950004827400103a430000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000823b000492230008821b001c9203000481fb000c91e30000965bfffc83130000801800007c0803a64e80002181db0028947bfffc80bb003c809b0014807b0038830e0008801800007c0803a64e80002139430000398000063bbdffe47c1df04040a00010800d001c7c0803a64e800021387d0004919d000091430014813b003491230010811b003c9103000c80fb002090e3000880db000090c3000480bb000490a30000831b0008801800007c0803a64e800021809b002c8064000483230008807b0028831900cc801800007c0803a64e800021831b002c82f8000482d70008947bfffc807b0028831600cc801800007c0803a64e8000212c030001408200084800001482bb00002815000141820008480000183860000182bb00347ea803a63b7b00444e80002038830000387500003b1b00343c0002b16000d1a87c0803a64e800021829b00347e8803a63b7b00444e800020|@6756,1048575|736,3,@6750 6750:C2,840|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c040001408200a02c0300014082000c386000014e800020973bfffc971bfffc8018000c941bfffc80180008941bfffc80180004941bfffc8098ffe83c6002b16063d50c3c0002a1600074a87c0803a64e800021388000533c0002a1600074a87c0803a64e800021833b000c8319fffc82fb0010907b001080db000080bb000438800003807b00088318000c3b370000801800007c0903a67f2803a63b7b00104e8004202c03000140820090973bfffc971bfffc8018000c941bfffc80180008941bfffc80180004941bfffc8098ffe83c6002b16063d53c3c0002a1600074a87c0803a64e800021388000533c0002a1600074a87c0803a64e800021833b000c8319fffc82fb0010907b001080db000080bb000438800003807b00088318000c3b370000801800007c0903a67f2803a63b7b00104e80042082f8fffc82d7000482b60008973bfffc971bfffc80040000941bfffc80040004941bfffc80030000941bfffc80030004941bfffc807b000483150120801800007c0803a64e800021829b00108274fffc8253000482320008947bfffc807b001083110120801800007c0803a64e8000213a03000038900000807b00003f00000063184368801800007c0803a64e80002128030001408200a481fb0014800f000c941bfffc800f0008941bfffc800f0004941bfffc389000003c6002b16063d56c3c0002a1600074a87c0803a64e8000213c8002b16084d58c3c0002a1600074a87c0803a64e800021809b000c3c0002a1600074a87c0803a64e80002181db0020814efffc813b0024907b002480db000080bb000438800003807b0008830a000c3b290000801800007c0903a67f2803a63b7b00244e80042081fb001481cffffc814e0004812a0008807b000883090124801800007c0803a64e800021811b001480e8fffc80c7000480a60008947bfffc807b001483050124801800007c0803a64e800021809b00183b230000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000831b0004930300089323000482fb000092e300008304ffec801800007c0803a64e800021809b0010807b0008831b0018833b001c7f2803a63b7b00204bfffcc4|@6755,1048575|92,3,@6751 100,3,@511 120,3,@511 240,3,@6752 248,3,@511 268,3,@511 468,3,I24 528,3,@6753 536,3,@511 552,3,@6754 560,3,@511 580,3,@511 6751:S37|546f6f206d616e7920636f6e7374727563746f727320746f206d6174636820747970652028 6752:S39|4e6f7420656e6f75676820636f6e7374727563746f727320746f206d6174636820747970652028 6753:S24|4c6f6f6b696e6720666f7220636f6e7374727563746f7220 6754:S11|2062757420666f756e6420 6755:S48|535452554354555245535f28292e636865636b54797065436f6e73747273283729636865636b436f6e73747273283229 6756:S33|535452554354555245535f28292e636865636b54797065436f6e73747273283729 6757:O2|@6758,@4982 6758:C2,372|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021548bf80140a20010800d00347c0803a64e8000212c0400014080000c3ae00001480000083ae4000082d8000482b600083980000256e0f80140a20010800d00347c0803a64e8000217e97661541a3fff03a7900003a5800003a2300003a04000039e5000039d7000080b500b438800081387400003f000000631841c8801800007c0803a64e80002191c30000398000053bbdffe87c1df04040a00010800d001c7c0803a64e80002138bd0004919d00003c8002b16084d7a090850000922500109205000c9065000892c50004398000053bbdffe87c1df04040a00010800d001c7c0803a64e8000213b3d0004919d00003f0002b16318da1c93190000923900109219000c9079000892d90004398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003e8002b16294dc14929700009337000492ef000090af0004386000017e6803a64e800020|@6764,1048327|148,3,I11 208,3,@6759 272,3,@6761 336,3,@6763 6759:C2,568|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d70008973bfffc971bfffc947bfffc831600a0801800007c0803a64e80002128030001408200084800009482bb00048295000482740008807b0000831300a8801800007c0803a64e800021825b0004823200107c6b8838556bf80140a20010800d00347c0803a64e8000217c03880040800008480000488212000481f00008807b0000830f00a8801800007c0803a64e80002181db0004814e000c7c6b5038556bf80140a20010800d00347c0803a64e8000217c035000418000183860000182bb00087ea803a63b7b000c4e800020812e000481090008800e0008941bfffc807b0004830800a8801800007c0803a64e800021546bf80140a20010800d00347c0803a64e8000212c030001408000084800003080fb000080c700007c6b3038556bf80140a20010800d00347c0803a64e8000217c03300040800008480000183c6002a0606395e0800d00287c0803a64e800021398000025460f80140a20010800d00347c0803a64e8000217ca3661541a3fff054ac083a7c87602e38e40000807b0008832300048319000894fbfffc80180098941bfffc38670000831800d4801800007c0803a64e800021831b0000801800007c0803a64e80002128030001418200183860000182fb00147ee803a63b7b00184e800020398000013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d000082fb000492e3000082db00147ec803a63b7b00184e800020|@6760,1048575|356,3,@51 6760:S32|535452554354555245535f28292e747970654d61746368546162283329283129 6761:C2,436|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d70008973bfffc971bfffc947bfffc949bfffc831600a0801800007c0803a64e800021280300014182015482bb00088295000482740008807b0004831300a8801800007c0803a64e800021825b0008823200107c6b8838556bf80140a20010800d00347c0803a64e8000217c0388004180010c8212000481f00008807b0004830f00a8801800007c0803a64e80002181db0008814e000c7c6b5038556bf80140a20010800d00347c0803a64e8000217c035000408000c8812e000481090008800e0008941bfffc807b0008830800a8801800007c0803a64e800021546bf80140a20010800d00347c0803a64e8000212c030001408000084800003080fb000080c700007c6b3038556bf80140a20010800d00347c0803a64e8000217c03300040800008480000183c6002a0606395e0800d00287c0803a64e800021398000025460f80140a20010800d00347c0803a64e8000217ca3661541a3fff0809b000454ab083a7c87592e38600001833b00107f2803a63b7b00144e8000203860000182bb000c7ea803a63b7b00104e800020|@6762,1048575|332,3,@51 6762:S32|535452554354555245535f28292e747970654d61746368546162283329283229 6763:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@6760,1048575| 6764:S29|535452554354555245535f28292e747970654d61746368546162283329 6765:O4|@6767,@6766,0,0 6766:S9|554e444546494e4544 6767:O3|0,@2647,@2525 6768:O2|@6769,@4982 6769:C2,312|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000213d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e80002138bd0004919d000090850000398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002b162d6de2892d7000090b7000882d8000492d70004973bfffc971bfffc947bfffc949bfffc94bbfffc3b170000801800007c0803a64e80002182bb000c829500048274000880130084941bfffc807b000c83130070801800007c0803a64e800021825b0004823200003a030000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00009223000c81fb000891e3000881db000c91c3000492030000831b0000833b0014801800007c0903a67f2803a63b7b00184e800420|@6778,1048575|112,3,@6770 6770:C2,284|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7002482b70008973bfffc971bfffc80160008941bfffc83150074801800007c0803a64e800021829b0004398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213a7d0004919d00003e4002b16252df6092530000823400089233000c929300088214000492130004398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002139fd0004919d00003dc002b161cee29891cf0000926f000439430000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000392000019123000891e3000491430000831b0000833b0008801800007c0903a67f2803a63b7b000c4e800420|@6777,1048575|116,3,@6771 184,3,@6775 6771:C2,532|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7002082b70008973bfffc971bfffc949bfffc8075004083160000801800007c0803a64e8000213a830000807b00003b140000801800007c0803a64e800021280300014182007c827b000482530004823200088212002080130008941bfffc80110034941bfffc8071004083100004801800007c0803a64e80002139e30000807b00083b0f0000801800007c0803a64e800021831b0000801800007c0803a64e800021831b0004833b0010801800007c0903a67f2803a63b7b00144e800420827b0004825300048232002082120008807000d883110000801800007c0803a64e80002139e30000807b00003b0f0000801800007c0803a64e80002128030001418200dc81db0004814e0004812a0010810a002080ea000880090024941bfffc806700d883080004801800007c0803a64e80002138c30000807b00043b060000801800007c0803a64e80002180bb0008398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021389d0004919d00003f2002b16339e190932400008305000c9304000882e5000492e400043ac30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00009083000492c30000831b0000833b000c801800007c0903a67f2803a63b7b00104e8004203860000181db00087dc803a63b7b000c4e800020|@6774,1048575|408,3,@6772 6772:C2,108|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000218078000882e300003980000256e0f80140a20010800d00347c0803a64e8000217ed7661541a3fff092c3000082b80004829500083877000083140090801800007c0903a67f2803a64e800420|@6773,1048575| 6773:S56|535452554354555245535f28292e72656e616d655661726961626c654173426f756e642833297365745374616d7073283129283329283129 6774:S53|535452554354555245535f28292e72656e616d655661726961626c654173426f756e642833297365745374616d7073283129283329 6775:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@6776,1048575| 6776:S53|535452554354555245535f28292e72656e616d655661726961626c654173426f756e642833297365745374616d7073283129283129 6777:S50|535452554354555245535f28292e72656e616d655661726961626c654173426f756e642833297365745374616d7073283129 6778:S38|535452554354555245535f28292e72656e616d655661726961626c654173426f756e64283329 6779:O2|@6799,@4982 6780:C2,480|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021398000063bbdffe47c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002b162d6e5a492d7000082d8000492d7001490d7001082bb000892b7000c829b000492970008827b000092770004973bfffc971bfffc947bfffc949bfffc94bbfffc94dbfffc96fbfffc967bfffc38d4000038b50000809b0008807b00108318000c801800007c0803a64e800021825b0014823200048211002481f1000880100008941bfffc807b0010830f0074801800007c0803a64e80002181db00183980000a3bbdffd47c1df04040a00010800d001c7c0803a64e800021395d0004919d00003d2002b16129e6e8912a0000811b0004910a002480fb000890ea002080db002890ca001c80bb002490aa0018809b0020908a0014832e0008932a0010831b0014930a000c82ee000492ea000882db000c92ca0004398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003e8002b16294fc1492950000915500043a630000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00009303000892a3000492630000831b0000833b001c801800007c0903a67f2803a63b7b002c4e800420|@6798,1048575|68,3,@6781 264,3,@6786 384,3,@6796 6781:C2,148|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8001482d700103aa30000398000063bbdffe47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082980004928300143e6002b16273e65492630010825800089243000c8238000c92230008821800109203000492a3000083160044801800007c0903a67f2803a64e800420|@6785,1048575|88,3,@6782 6782:O1|@6783 6783:C2,4|4e800020|@6784,524289| 6784:S46|535452554354555245535f28292e66756c6c436f7079536967283729636f707954797065436f6e73283129283129 6785:S43|535452554354555245535f28292e66756c6c436f7079536967283729636f707954797065436f6e73283129 6786:C2,3476|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000882d7002082b70008973bfffc971bfffc947bfffc949bfffc94bbfffc8075004083160000801800007c0803a64e8000213a830000807b00043b140000801800007c0803a64e80002128030001418202bc827b000c8253000882320020821200088070004083110004801800007c0803a64e80002139e30000807b00043b0f0000801800007c0803a64e80002181db000c814e0008812a0008947bfffc83090034801800007c0803a64e800021811b0010947bfffc80080020941bfffc8008001c941bfffc80080018941bfffc809b001c806800143c0002a1600074a87c0803a64e8000213880005d3c0002a1600074a87c0803a64e80002180fb0020947bfffc80db000480bb0008809b000c807b001083070010801800007c0803a64e80002180db002080a6000880850008947bfffc80040108941bfffc807b00188304003c801800007c0803a64e800021831b0000801800007c0803a64e800021280300014182006c833b00288319000882f8000880170114941bfffc807b001c8317003c801800007c0803a64e800021831b0000801800007c0803a64e80002182db002c82b6000c3995ffff7c6ba8385560f80140a20010800d00347c0803a64e8000217c63661541a3fff04800000c807b001c947bfffc833b002c8319000882f80008947bfffc80170050941bfffc807b002483170038801800007c0803a64e8000213ac30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000082bb000492a30008829b00109283000492c30000831b0000801800007c0803a64e800021827b0034825300043a230000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092230004821b00309203000083120008801800007c0803a64e80002181fb00043980000255e0f80140a20010800d00347c0803a64e8000217dcf661541a3fff0815b00287d4b7038556bf80140a20010800d00347c0803a64e8000217c0a700040810018386a0000813b00387d2803a63b7b003c4e800020386e0000813b00387d2803a63b7b003c4e800020827b000c825300088232002082120008807000d883110000801800007c0803a64e80002139e30000807b00043b0f0000801800007c0803a64e80002128030001418204f43d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e80002139dd0004919d0000815b0000914e0000813b000c8109000880e8002080c8000895dbfffc806600d883070004801800007c0803a64e80002138a30000807b00083b050000801800007c0803a64e800021809b001083240008831900103ae30000398000063bbdffe47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082c4001492c300143ea002b162b5e65492a30010828400189283000c8264001c92630008824400209243000492e3000096fbfffc83180044801800007c0803a64e800021823b00148211000881f0001039c30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000815b00009143000491c3000095dbfffc830f0030801800007c0803a64e800021686900023d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e800021391d0004919d00009128000080fb001880c7000880a60008951bfffc807b0008830500c0801800007c0803a64e800021809b001c8324000883190008947bfffc807b0008831800c0801800007c0803a64e800021809b00003c0002b16000f4987c0803a64e80002182fb0020398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002b162b5f5b892b600009076000882970008929600048274000896dbfffc807b0010831300cc801800007c0803a64e8000213b1b00283c0002b16000f6fc7c0803a64e800021825b00088232000028110001418201f0821b002481f0000881cf0008947bfffc807b0010830e00cc801800007c0803a64e800021280300014182010c813b00288109000880e80008800700dc941bfffc807b0014830700b8801800007c0803a64e80002180db002c80a6000880850008947bfffc807b0018830400c0801800007c0803a64e800021833b00308319000882f80008947bfffc801700e4941bfffc807b0020831700d4801800007c0803a64e80002182db003882b6000882950008947bfffc807b0024831400c4801800007c0803a64e8000213a630000398000063bbdffe47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003a4000019243001492630010823b00009223000c821b00049203000881fb000891e3000481db000c91c30000831b0010801800007c0803a64e800021394300004800001c815b0010947bfffc947bfffc947bfffc947bfffc947bfffc813b003c8109000880e80008398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080db001490c3000491430000955bfffc830700d0801800007c0803a64e80002180bb004080850004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000833b000093230004831b003c9303000083040004801800007c0803a64e8000214800006c821b002481f00004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000081db000c91c30004815b002091430000830f0004801800007c0803a64e800021947bfffc947bfffc947bfffc947bfffc947bfffc947bfffc947bfffc813b00308109000080fb00347ceb4038556bf80140a20010800d00347c0803a64e8000217c074000408100183867000080db00447cc803a63b7b00484e8000203868000080db00447cc803a63b7b00484e80002081db000c814e0008812a0020810a00088068012883090000801800007c0803a64e80002138e30000807b00043b070000801800007c0803a64e80002128030001418204e080db000c80a6000880850020806500088063012883040004801800007c0803a64e8000213b230000807b00043b190000801800007c0803a64e800021831b000c82f8000882d7000882b60008947bfffc83150008801800007c0803a64e800021829b0010827400088253000882320018947bfffc80030008941bfffc807b000083110000801800007c0803a64e80002128030001418202ac821b001881f0000881cf0008814e0018807b0000830a0008801800007c0803a64e800021813b0004811b001880e8000880c7001038a30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000080880024908300083f2002b16339fb90932300048309000c9303000094bbfffc80090000941bfffc80090004941bfffc971bfffc83060020801800007c0803a64e80002182fb002882db000c82b7000c3995ffff7ecba8385560f80140a20010800d00347c0803a64e8000217e96661541a3fff07ecba378556bf80140a20010800d00347c0803a64e8000217c16a000418200084800006482770008825300103a230000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000821b00009203000492230000963bfffc969bfffc8312002c801800007c0803a64e800021280300014182001048000098947bfffc969bfffc825b0030823200088211000881f0000881d00018800f0004941bfffc807b0004830e0004801800007c0803a64e80002139430000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d0000813b00089123000c91430008811b00109103000480fb001490e30000831b0000801800007c0803a64e8000213a6300004800000c827b0020947bfffc81fb003481cf0004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092630004815b001491430000830e0000801800007c0803a64e800021813b0004398000025520f80140a20010800d00347c0803a64e8000217d09661541a3fff080fb00287ceb4038556bf80140a20010800d00347c0803a64e8000217c074000408100183867000080db00387cc803a63b7b003c4e8000203868000080db00387cc803a63b7b003c4e800020821b000481fb001881cf0008814e0010398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000812f0024912300083d0002b16108fb909103000480f0000c90e3000080100000941bfffc80100004941bfffc94fbfffc830a0020801800007c0803a64e80002180db002480a60008808500103b230000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000831b00009303000493230000973bfffc8304002c801800007c0803a64e800021280300014082007082db002882b600088295000882740008398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d0000825b00009243000c823b001092230008821b00089203000481fb000c91e3000083130004801800007c0803a64e8000213ae300004800000882fb001882db002882b60004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092e30004829b000c9283000083150000801800007c0803a64e800021807b001c827b002c7e6803a63b7b00304e800020807b000080db00107cc803a63b7b00144e800020|@6795,1048575|248,3,@511 268,3,@511 1052,3,@6782 1320,3,@6787 1376,3,@6789 1432,3,@6791 2464,3,@6792 3104,3,@6792 6787:C2,204|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021708b0001408200a0706b000140820090398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b1d0004919d000082e3000092f8000482c4000092d80000973bfffc971bfffc80840004806300044bffff8d398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021389d0004919d000090640004807b00009064000038640000833b00047f2803a63b7b00084e800020386000014e800020386000014e800020|@6788,983043| 6788:S45|535452554354555245535f28292e66756c6c436f70795369672837292833297a69705479706556617273283229 6789:C2,240|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc947bfffc82f800082c17000140820018807b0000833b00087f2803a63b7b000c4e80002080770000833b00048319000482d8001082a3000082830004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a30004827b000092630000969bfffc80170004941bfffc83160054801800007c0803a64e8000212803000141820018807b0004825b00107e4803a63b7b00144e80002082fb00003b7b0008800d00187c1b004040a00010800d00207c0803a64e8000214bffff44|@6790,1048575| 6790:S45|535452554354555245535f28292e66756c6c436f7079536967283729283329636f707954797065566172283129 6791:C2,1144|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e80002082f8fffc82d7000882b6000882950008973bfffc971bfffc80030000941bfffc80030004941bfffc807b000483140008801800007c0803a64e800021827b00088253fffc823200088211001081e3000081c30004814300088123000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000811200249103000880f3ffd890e300049123000095fbfffc95dbfffc955bfffc953bfffc83100020801800007c0803a64e80002180db001880a6fffc80850008832400103b030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082fb000092e3000493030000971bfffc8319002c801800007c0803a64e80002168760002947bfffc947bfffc82bb00248295fffc82740008825300088232001896dbfffc807b001483110000801800007c0803a64e800021280300014182010c821b002881f0fffc81cf0008814e0008812a0018807b001483090008801800007c0803a64e800021811b002880e8fffc80c7000c3986ffff7c6b30385560f80140a20010800d00347c0803a64e8000217ca3661541a3fff03980000254a0f80140a20010800d00347c0803a64e8000217c85661541a3fff08068ffec832300007c8bc838556bf80140a20010800d00347c0803a64e8000217c04c8004081000c3b040000480000083b190000930300008307000882f8000882d700183865000083160004801800007c0803a64e80002182bb00288295fffc8274000c2c1300014082000c3a400003480000083a4000016a5100023a1b00049070000039fb0004922f00044800001c3a1b000481fb001491f0000039db000439400001914e0004813b0000280900014182000848000014811b000828080001408200084800012c80fb002880c7fffc80a60008808500088064000883230004398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d0000831b000c9303000c82fb000492e3000882db001892c3000482bb001c92a300003b190000801800007c0803a64e800021829b00288274fffc8253000882320010947bfffc83110040801800007c0803a64e800021821b002c81f0fffc81cf0008814e0008812a0008947bfffc83090008801800007c0803a64e800021811b003080e8fffc80c7000880a600088085001c80030008941bfffc807b000083040000801800007c0803a64e8000212803000141820034807b00348323fffc8319000882f8000882d7001c807b000083160008801800007c0803a64e800021811b00044800001c811b000848000014811b0024947bfffc947bfffc947bfffc80fb000c28070001418200084800001480db001428060001408200084800001480db003480a6ffe03880000390850000951bfffc807b0030831b00384bfffbd1398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138bd0004919d000090650004809b00009085000038650000833b003c7f2803a63b7b00404e800020|@234,1048575| 6792:O1|@6793 6793:C2,4|4e800020|@6794,524289| 6794:S41|535452554354555245535f28292e66756c6c436f7079536967283729636f7079547970283129283129 6795:S31|535452554354555245535f28292e66756c6c436f7079536967283729283329 6796:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@6797,1048575| 6797:S31|535452554354555245535f28292e66756c6c436f7079536967283729283129 6798:S28|535452554354555245535f28292e66756c6c436f7079536967283729 6799:C2,320|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7002482b70008973bfffc971bfffc949bfffc94bbfffc94dbfffc80160008941bfffc83150074801800007c0803a64e800021829b0010398000073bbdffe07c1df04040a00010800d001c7c0803a64e8000213a7d0004919d00003e4002b16252fe14925300008234000492330018821b000c9213001481fb000891f3001081db000491d3000c815b00189153000892930004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021393d0004919d00003d0002b26108013c910900009269000438e30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000038c0000190c300089123000490e30000831b0000833b0014801800007c0903a67f2803a63b7b001c4e800420|@6807,1048575|128,3,@6800 220,3,@6805 6800:C2,628|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8001882d7002082b70008973bfffc971bfffc947bfffc949bfffc8075004083160000801800007c0803a64e8000213a830000807b00003b140000801800007c0803a64e80002128030001418200ec827b00088253001882320020821200088070004083110004801800007c0803a64e80002139e30000807b00003b0f0000801800007c0803a64e80002181db0008814e0018812a000883090034801800007c0803a64e800021811b0008947bfffc80080014941bfffc80080010941bfffc8008000c941bfffc809b0014806800083c0002a1600074a87c0803a64e8000213880005d3c0002a1600074a87c0803a64e80002180fb001880db001c907b001c38a6000080db00003885000080bb000438640000809b00083b230000807b000c83070004801800007c0903a67f2803a63b7b001c4e800420827b0008825300188232002082120008807000d883110000801800007c0803a64e80002139e30000807b00003b0f0000801800007c0803a64e80002128030001418200c881db0008814e0018812a0020810a0008806800d883090004801800007c0803a64e80002138e30000807b00003b070000801800007c0803a64e80002180db000880a60018808500103b230000398000063bbdffe47c1df04040a00010800d001c7c0803a64e800021387d0004919d000083060008930300143ee002b262f700a492e3001082c6000c92c3000c82a6001092a3000882860014928300049323000083040044801800007c0803a64e80002138600001827b000c7e6803a63b7b00104e8000203860000181db000c7dc803a63b7b00104e800020|@6804,1048575|240,3,@511 260,3,@511 532,3,@6801 6801:O1|@6802 6802:C2,4|4e800020|@6803,524289| 6803:S55|535452554354555245535f28292e636f707954797065436f6e7374727563746f7273283529636f707954797065436f6e73283129283129 6804:S40|535452554354555245535f28292e636f707954797065436f6e7374727563746f7273283529283329 6805:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@6806,1048575| 6806:S40|535452554354555245535f28292e636f707954797065436f6e7374727563746f7273283529283129 6807:S37|535452554354555245535f28292e636f707954797065436f6e7374727563746f7273283529 6808:O2|@6810,@6809 6809:O2|@6812,@4982 6810:C2,64|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180c3000c80a30008808300048063000083180004801800007c0903a64e800420|@6811,1048575| 6811:S37|535452554354555245535f28292e636865636b466f72467265655479706556617273283129 6812:C2,368|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002b262d6042492d7000090d7000882d8000492d700043aa30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003e8002b2629408f89283000092c3000890c30004973bfffc971bfffc949bfffc94bbfffc96fbfffc3b150000801800007c0803a64e800021827b000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003e4002b2625209f8924300008233000492230008821b000092030004831b0008801800007c0803a64e80002181fb000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003dc002b261ce0aa891c30000814f000491430008813b000091230004831b0004833b0010801800007c0903a67f2803a63b7b00144e800420|@6823,1048575|68,3,@6813 132,3,@6819 228,3,@6821 312,3,@6822 6813:C2,288|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021398000053bbdffe87c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002b262d6056092d7000082d8000892d700109077000c80780004907700089317000482a3002482830008973bfffc96fbfffc80150008941bfffc3864000083140074801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a7d0004919d00003e4002b26252081c92530000823b0004923300043a030000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000039e0000191e300089263000492030000831b0000833b0008801800007c0903a67f2803a63b7b000c4e800420|@6818,1048575|68,3,@6814 184,3,@6816 6814:C2,600|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000882d7002082b70008973bfffc971bfffc947bfffc949bfffc8075004083160000801800007c0803a64e8000213a830000807b00003b140000801800007c0803a64e80002128030001418200b4827b0008809b00048073000c3c0002a1600074a87c0803a64e8000213880005d3c0002a1600074a87c0803a64e800021825b0008823200088211000881f10020947bfffc80100034941bfffc80700040830f0004801800007c0803a64e80002139c30000807b00083b0e0000801800007c0803a64e800021831b0000801800007c0803a64e800021815b001038830000807b0004830a0004833b0014801800007c0903a67f2803a63b7b00184e800420827b00088253000882320020821200088070012883110000801800007c0803a64e80002139e30000807b00003b0f0000801800007c0803a64e80002128030001418200e481db0008809b0004806e000c3c0002a1600074a87c0803a64e800021815b0008812a00088109002080e90008947bfffc8067012883080004801800007c0803a64e80002138c30000807b00043b060000801800007c0803a64e80002180bb000c80850008832400108304000880190058941bfffc83180124801800007c0803a64e80002182fb00103ac30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000082b7001092a3000892c30004829b000492830000831b0000833b0014801800007c0903a67f2803a63b7b00184e8004203860000181db000c7dc803a63b7b00104e800020|@6815,1048575|124,3,@511 144,3,@511 368,3,@511 6815:S64|535452554354555245535f28292e636865636b466f72467265655479706556617273283429636865636b537472756374283229636865636b456e747279283329 6816:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@6817,1048575| 6817:S64|535452554354555245535f28292e636865636b466f72467265655479706556617273283429636865636b537472756374283229636865636b456e747279283129 6818:S51|535452554354555245535f28292e636865636b466f72467265655479706556617273283429636865636b537472756374283229 6819:C2,180|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000882d7001082b70008973bfffc971bfffc80030000941bfffc80160058941bfffc8063000483150124801800007c0803a64e800021829b00083a630000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000825400049243000892630004823b000492230000831b0000833b000c801800007c0903a67f2803a63b7b00104e800420|@6820,1048575| 6820:S40|535452554354555245535f28292e636865636b466f72467265655479706556617273283429283129 6821:C2,148|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc80030004941bfffc3880005d806300003c0002a1600074a87c0803a64e800021833b00048319000882f80008947bfffc807b000483170034801800007c0803a64e80002182db000838830000807b000083160004833b000c801800007c0903a67f2803a63b7b00104e800420|@6820,1048575|56,3,@511 6822:C2,152|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc80030004941bfffc3c8002ac60840e14806300003c0002a1600074a87c0803a64e800021833b00048319000882f80008947bfffc807b000483170064801800007c0803a64e80002182db000838830000807b000083160004833b000c801800007c0903a67f2803a63b7b00104e800420|@6820,1048575|48,3,@4945 60,3,@511 6823:S37|535452554354555245535f28292e636865636b466f72467265655479706556617273283429 6824:O2|@6826,@6825 6825:O2|@6828,@4982 6826:C2,188|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc947bfffc947bfffc947bfffc947bfffc947bfffc973bfffc38bb0004808300048063000083180004801800007c0803a64e800021398000063bbdffe47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000833b000493230000831b00089303000482fb000c92e3000882db001092c3000c82bb001492a30010829b001892830014827b00007e6803a63b7b001c4e800020|@6827,1048575| 6827:S29|535452554354555245535f28292e706173733453747275637473283129 6828:C2,500|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002b262d60eb492d7000082d8000492d70004971bfffc947bfffc96fbfffc973bfffc94bbfffc3ea002b262b517c02c0400014082000c3a95000048000094947bfffc947bfffc80040004941bfffc38bb00048264000038950000387300003b1b001c3c0002b2600017e87c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a5d0004919d0000823b000492320000821b0008921200043ab20000809b00003b7b000c800d00187c1b004040a00010800d00207c0803a64e8000214bffff64827400043933000038800001807300003c0002b260002d587c0803a64e8000213903000038800001806900083c0002b260002d587c0803a64e80002138e3000038800001806900143c0002b260002d587c0803a64e80002138c30000388000018069000c3c0002b260002d587c0803a64e80002138a3000038800001806900043c0002b260002d587c0803a64e800021947bfffc38800001806900103c0002b260002d587c0803a64e800021809b000491040000833b00009324000490e4000890a4000c9064001090c4001438600001831b00087f0803a63b7b00184e800020|@6855,1048575|68,3,@6829 108,3,@6839 168,3,@6841 292,3,@6852 320,3,@6852 348,3,@6852 376,3,@6852 404,3,@6852 432,3,@6852 6829:C2,292|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7002482b70008973bfffc971bfffc947bfffc80160008941bfffc3864000083150074801800007c0803a64e800021829b0008398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213a7d0004919d00003e4002b262520ff492530000823b00049233000c821400049213000892930004398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002139fd0004919d00003dc002b261ce16f491cf0000926f000439430000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000392000019123000891e3000491430000831b0000833b000c801800007c0903a67f2803a63b7b00104e800420|@6838,1048575|124,3,@6830 192,3,@6836 6830:C2,916|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000882d7002082b70008973bfffc971bfffc949bfffc8075004083160000801800007c0803a64e8000213a830000807b00003b140000801800007c0803a64e800021280300014182020c827b00048253000882320020821200088070004083110004801800007c0803a64e80002139e30000807b00003b0f0000801800007c0803a64e80002181db0004814e0008812a0008947bfffc8309003c801800007c0803a64e800021811b000880e8000880c7000880a60018947bfffc83050000801800007c0803a64e8000212803000141820080807b000c832300088319000882f80018807b000083170008801800007c0803a64e80002182db000c82b60008829500043a630000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008256000c924300049263000083140014801800007c0803a64e80002138830000480000bc809b000c80640008832300088319001c807b000083180000801800007c0803a64e800021280300014182003082fb000c82d7000882b600088295001c807b000083140008801800007c0803a64e800021388300004800006482fb000c82d7000882b60018398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a9d0004919d00003e6002b2627313a4927400083e4002a06252c7ac92540004823500009234000038740000800d00287c0803a64e800021827b000c8253000882320008949bfffc807b000883110034801800007c0803a64e800021821b001038830000807b000083100004833b0014801800007c0903a67f2803a63b7b00184e800420827b0004825300088232002082120008807000d883110000801800007c0803a64e80002139e30000807b00003b0f0000801800007c0803a64e80002128030001418200cc81db0004814e0008812a0020810a0008806800d883090004801800007c0803a64e80002138e30000807b00003b070000801800007c0803a64e80002180db000480a6000880850008947bfffc800400d0941bfffc830400cc801800007c0803a64e8000213b1b00103c0002b2600013c87c0803a64e8000213b230000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000093230004831b000493030000831b0000833b0010801800007c0903a67f2803a63b7b00144e8004203860000181db00087dc803a63b7b000c4e800020|@6835,1048575|504,3,@6831 516,3,@227 800,3,@6832 6831:S28|6578747261637456616c73546f5369673a2062616420616363657373 6832:C2,168|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e800020973bfffc971bfffc80030004941bfffc806300003c0002b26000148c7c0803a64e800021947bfffc807b0004831b00084bffffa1398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b0000931900003879000082fb000c7ee803a63b7b00104e800020|@234,1048575|68,3,@6833 6833:C2,448|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8fffc82d7000882b6000882950008973bfffc971bfffc947bfffc83140008801800007c0803a64e800021827b00048253fffc823200088211000881f00018947bfffc80030008941bfffc807b0000830f0000801800007c0803a64e800021280300014182012881db000c814efffc812a00088109000880e80018807b000083070008801800007c0803a64e80002180db000480bb000c8085fffc832400088319000882f8000882d8001c82b900043a830000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008264000c926300049283000080060000941bfffc80060004941bfffc8006000c941bfffc80170004941bfffc80160004941bfffc83150014801800007c0803a64e800021831b0000801800007c0803a64e8000213a430000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d0000823b00089223000c92430008821b000c9203000481fb001091e30000831b0004833b0024801800007c0903a67f2803a63b7b00284e800420807b000881db00107dc803a63b7b00144e800020|@6834,1048575| 6834:S70|535452554354555245535f28292e7061737334537472756374732833296578747261637456616c73546f536967283229283329636f707941436f6e7374727563746f72283129 6835:S51|535452554354555245535f28292e7061737334537472756374732833296578747261637456616c73546f536967283229283329 6836:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@6837,1048575| 6837:S51|535452554354555245535f28292e7061737334537472756374732833296578747261637456616c73546f536967283229283129 6838:S48|535452554354555245535f28292e7061737334537472756374732833296578747261637456616c73546f536967283229 6839:O2|0,@6840 6840:O6|0,0,0,0,0,0 6841:C2,1528|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e4000482c300002c16000540820184971bfffc398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d00008297000c929500048264000092750000973bfffc94bbfffc80170000941bfffc80170004941bfffc80170008941bfffc80170010941bfffc80170014941bfffc824300042c1200014082000c3a35000048000090947bfffc947bfffc80120004941bfffc38bb000438950000807200003b1b00283c0002b260001dfc7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a1d0004919d000081fb000491f0000081db000891d000043ab00000825b00003b7b000c800d00187c1b004040a00010800d00207c0803a64e8000214bffff68398000063bbdffe47c1df04040a00010800d001c7c0803a64e8000213a1d0004919d000081fb000091f0001481db000491d00010815100049150000c813b000891300008811b000c9110000480fb001090f0000080db001480b1000090a600009206000438600001809b00187c8803a63b7b00204e8000202c16000f40820184971bfffc398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d000082970014929500048264000092750000973bfffc94bbfffc80170000941bfffc80170004941bfffc80170008941bfffc8017000c941bfffc80170010941bfffc824300042c1200014082000c3a35000048000090947bfffc947bfffc80120004941bfffc38bb000438950000807200003b1b00283c0002b2600020bc7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a1d0004919d000081fb000491f0000081db000891d000043ab00000825b00003b7b000c800d00187c1b004040a00010800d00207c0803a64e8000214bffff68398000063bbdffe47c1df04040a00010800d001c7c0803a64e8000213a1d0004919d000081f1000491f0001481db000091d00010815b00049150000c813b000891300008811b000c9110000480fb001090f0000080db001480b1000090a600009206000438600001809b00187c8803a63b7b00204e8000202c160007408200c8973bfffc971bfffc94bbfffc82a300042c1500014082000c3a84000048000080947bfffc947bfffc80150004941bfffc38bb000480750000831b00104bfffc85398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a7d0004919d0000825b000492530000823b0008923300043893000082bb00003b7b000c800d00187c1b004040a00010800d00207c0803a64e8000214bffff78827b00008254000092530000823400049233000438600001821b00087e0803a63b7b000c4e8000202c16000d408200d8971bfffc82a3000c82950000973bfffc94bbfffc2c1400014082000c3a6400004800008c947bfffc947bfffc80140004941bfffc38bb0004807400003b1b00143c0002b2600023207c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a5d0004919d0000823b000492320000821b00089212000438920000829b00003b7b000c800d00187c1b004040a00010800d00207c0803a64e8000214bffff6c825b0000823300009232000082130004921200043860000181fb00047de803a63b7b000c4e8000202c16000b408200fc973bfffc94bbfffc80040000941bfffc80170000941bfffc80170004941bfffc80170008941bfffc8017000c941bfffc80170010941bfffc80170014941bfffc806300043f0002b263182b94801800007c0803a64e800021829b00042c1400014082000c3aa300004800001c3b1b00203c0002b260002c787c0803a64e8000213aa30000398000063bbdffe47c1df04040a00010800d001c7c0803a64e8000213a7d0004919d0000825b00009253001492b30010823b00089233000c821b000c9213000881fb001091f3000481db001491d30000815b001c813b0018912a0000926a000438600001811b00207d0803a63b7b00244e80002082a4000092a500008284000492850004386000014e800020|@6851,1048575|204,3,@6842 596,3,@6844 1100,3,@6846 1324,3,@6848 1368,3,@6850 6842:C2,600|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000082d7000082b60004829500048263000c82430014398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008237fffc922300048204000092030000973bfffc971bfffc94bbfffc967bfffc965bfffc961bfffc80040004941bfffc83140014801800007c0803a64e80002181fb000881cf0000815b0014812a00008109000080e8000480c70008947bfffc95dbfffc8006006c941bfffc386e00008306005c801800007c0803a64e80002180bb002080850000832400008319000482f80008947bfffc807b000883170060801800007c0803a64e80002182db002482b60000829500008274000482530008947bfffc807b000c83120064801800007c0803a64e800021823b00288211000081f0000081cf0004814e0008947bfffc807b0014830a00f4801800007c0803a64e80002139230000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00009123000c811b00009103000880fb000490e3000480db000890c30000831b000c801800007c0803a64e80002180bb001c3980000254a0f80140a20010800d00347c0803a64e8000217c85661541a3fff0398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b002493190000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213afd0004919d000082db001892d700049337000082bb00289095000092f5000438600001829b00307e8803a63b7b00344e800020|@6843,1048575| 6843:S66|535452554354555245535f28292e706173733453747275637473283329657874726163745374727563742833296578747261637446756e63746f7242696e64283329 6844:C2,508|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000082d7000082b6000482950008826300108243000480730000973bfffc971bfffc94bbfffc965bfffc80040000941bfffc80040004941bfffc83140034801800007c0803a64e800021823b00108211000081f0000081cf0004814e000439230000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008110fffc9103000480fb000490e30000953bfffc830a0014801800007c0803a64e80002180db001480a60000947bfffc809b00048305fff8801800007c0803a64e800021809b000c398000025480f80140a20010800d00347c0803a64e8000217c64661541a3fff0833b00188319000082f8000082d7000482b600083a830000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000827b000092630008825b000492430004823b001092230000969bfffc8315004c801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a1d0004919d00009070000481fb001491f00000398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002139dd0004919d0000815b000c914e0004920e0000813b0018811b00009109000091c900043860000180fb00207ce803a63b7b00244e800020|@6845,1048575| 6845:S68|535452554354555245535f28292e706173733453747275637473283329657874726163745374727563742833296578747261637453747275637475726542696e64283329 6846:C2,2072|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e300002c17fffd40820468398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213add0004919d000082a3001092b6000c8283000c9296000882630008927600048243000492560000822400048218000081f0000081cf0004814e0008812a0008973bfffc971bfffc94bbfffc96dbfffc80040000941bfffc80110000941bfffc80110004941bfffc80110008941bfffc8011000c941bfffc80110010941bfffc80110014941bfffc3876000083090008801800007c0803a64e800021811b002480e8000080c7000080a600048085000883240024947bfffc80030008941bfffc807b000083190000801800007c0803a64e8000212803000141820154831b002c82f8000082d7000082b600048295000882740024807b000083130008801800007c0803a64e800021825b0020398000025640f80140a20010800d00347c0803a64e8000217e32661541a3fff0821b002c81f0000081cf0000814e0004812a0008963bfffc807b002883090120801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021391d0004919d000080fb002890e8000490680000398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138dd0004919d000080bb001890a6000491060000398000063bbdffe47c1df04040a00010800d001c7c0803a64e800021389d0004919d0000807b000c90640014833b001093240010831b00149304000c90c4000882fb001c92e4000482db002092c4000082bb002c829b0000929500009095000438600001827b00347e6803a63b7b00384e800020831b000482fb002c82d7000082b600008295000482740004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008256fffc92430004823b00209223000080180004941bfffc8018000c941bfffc83130014801800007c0803a64e800021821b003481f0000081cf0000814e0004812a0008947bfffc807b003083090120801800007c0803a64e800021811b003880e8000080c7000080a6000480850008832400088304001c947bfffc80190004941bfffc807b000883180004801800007c0803a64e8000213ae30000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d000082db000c92c3000c92e3000882bb001092a30004829b000492830000831b0000801800007c0803a64e800021827b0034398000025660f80140a20010800d00347c0803a64e8000217e53661541a3fff0398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a3d0004919d000090710004821b000492110000398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002139fd0004919d000081db002891cf0004922f0000398000063bbdffe47c1df04040a00010800d001c7c0803a64e800021395d0004919d0000813b001c912a0014811b0020910a001080fb002490ea000c91ea000880db002c90ca000480bb003090aa0000809b003c924400009144000438600001833b00447f2803a63b7b00484e8000202c17ffff4082014882c4000482b80000829500008274000482530008973bfffc94bbfffc80030004941bfffc80040000941bfffc80160000941bfffc80160004941bfffc80160008941bfffc8016000c941bfffc80160010941bfffc80160014941bfffc807b001c83120038801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a3d0004919d0000821b001c9211000490710000398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002139fd0004919d000081db000091cf0004922f0000398000063bbdffe47c1df04040a00010800d001c7c0803a64e800021395d0004919d000091ea0014813b0004912a0010811b0008910a000c80fb000c90ea000880db001090ca000480bb001490aa0000809b0020807b0018906400009144000438600001833b00247f2803a63b7b00284e8000202c170001408200d4398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213add0004919d000082a3000892b60004828300049296000082640004398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a5d0004919d0000823300009232000492d20000398000063bbdffe47c1df04040a00010800d001c7c0803a64e8000213a1d0004919d000081f3001491f0001481d3001091d000108153000c9150000c813300089130000881130004911000049250000080e4000090e5000092050004386000017f2803a64e80002082c4000482b8000082950000827400048253001c82330008973bfffc94bbfffc80030004941bfffc80040000941bfffc80160000941bfffc80160004941bfffc80160008941bfffc8016000c941bfffc80160010941bfffc80160014941bfffc80120008941bfffc807b0020831100b8801800007c0803a64e800021831b0000801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a1d0004919d000081fb002091f0000481c3000491d00000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021395d0004919d0000813b0014912a0004920a0000398000063bbdffe47c1df04040a00010800d001c7c0803a64e800021391d0004919d000080fb000490e8001480db000890c8001080bb000c90a8000c809b00109088000891480004833b001893280000831b002482fb001c92f80000911800043860000182db00287ec803a63b7b002c4e800020|@6847,1048575| 6847:S56|535452554354555245535f28292e706173733453747275637473283329657874726163745374727563742833296d616b6544656373283329 6848:O1|@6849 6849:C2,192|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e8000208303000082f8000882d70000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d000092d5000482d8000492d50000973bfffc96bbfffc806300044bffff89398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d000090750004807b00009075000038750000833b00047f2803a63b7b00084e800020|@234,1015809| 6850:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c8078ffe44e800020973bfffc971bfffc80030000941bfffc806300044bffffbd398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b00009319000038790000833b00087f2803a63b7b000c4e800020|@468,786433| 6851:S45|535452554354555245535f28292e70617373345374727563747328332965787472616374537472756374283329 6852:C2,156|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386400004e8000208303000080180000941bfffc39f9000039c4000039580000806300043b1b00003c0002b260002e107c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021389d0004919d000091c40004914400003b2f00007f2803a63b7b00044bffff70|@6854,1048451|80,3,@6853 6853:C2,260|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e80002082e3000082c30004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082b7000092a3000482980000928300003a7900003a5800003a3700003a1600003c0002a260002e7c7c0803a64e8000212803000140820060967bfffc965bfffc963bfffc387000003b1200004bffff59398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021389d0004919d000090640004807b00009064000038640000833b00087f2803a63b7b000c4e800020387000003b1200003b3300007f2803a64bffff08|@155,1047555|124,3,@755 6854:S41|535452554354555245535f28292e70617373345374727563747328332972657646696c746572283229 6855:S29|535452554354555245535f28292e706173733453747275637473283329 6856:O2|@6858,@6857 6857:O2|@6860,@4982 6858:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@6859,1048575| 6859:S31|535452554354555245535f28292e67656e636f646553747275637473283129 6860:C2,744|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000213d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ac0000392d70000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002b262b5332492b6000092f600043d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003a800001929500003d804000398c00063bbdffe47c1df04040a00010800d001c7c0803a64e8000213a9d0004919d00003e6002b2627333b0927400003a600001927400043a600001927400083a6000019274000c3a600001927400103a60000192740014398000063bbdffe47c1df04040a00010800d001c7c0803a64e8000213a7d0004919d00003e4002b2625249bc9253000092d30014909300109293000c92b3000882d8000492d3000492d400049274000892b4000c92f4001090940014398000007d8c0e709994fffc398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003e6002b2627372909275000092d50004398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a5d0004919d000092b200043880000190920000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ea002b262b572ec92b7000092970004947bfffc947bfffc947bfffc973bfffc971bfffc38db000838b7000038830000387200003c0002b260003b987c0803a64e800021829b0000827400048253000480120030941bfffc807b00108312002c801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a3d0004919d00003a00000192110004907100002c1100014082000c807b000c48000024963bfffc807b00103b1b00183c0002b2600073a87c0803a64e8000213b7b0004831b0000833b0008801800007c0903a67f2803a63b7b00184e800420|@6911,1048575|116,3,@6861 220,3,@6863 308,3,@6886 412,3,@6907 512,3,@6909 564,3,@6868 696,3,@6910 6861:C2,64|7f2802a6633900028078000482e300003980000256e0f80140a20010800d00347c0803a64e8000217ed7661541a3fff092c30000387700007f2803a64e800020|@6862,983041| 6862:S40|535452554354555245535f28292e67656e636f6465537472756374732832296d6b41646472283129 6863:C2,1004|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e400002c17000f408200b0398000063bbdffe47c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002b262b537b892b6000082b8001092b600148298000c929600109076000c80780008907600088278000492760004398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a5d0004919d00003e2002b262313a989232000092d200043a05000038b2000080840004387000003c0002b260003b987c0903a67f2803a64e8004202c170005408200b8398000073bbdffe07c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002b262b53e8492b600009076001882980014929600148278000892760010825800109256000c8238000c923600088218000492160004398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002139fd0004919d00003dc002b261ce43ac91cf000092cf00043945000038af000080840004386a00003c0002b260003b987c0903a67f2803a64e8004202c1700074082014c398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002b262b544a892b600009076000893160004947bfffc947bfffc947bfffc973bfffc971bfffc947bfffc94dbfffc80040004941bfffc38db00143a85000038b6000080840008387400003c0002b260003b987c0803a64e800021398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a7d0004919d00003e4002b26252459892530000823b000892330008821b000c92130004947bfffc947bfffc947bfffc38db000038b30000809b000c807b00283c0002b260003b987c0803a64e80002181db00002c0e00014082000c81fb002048000020807b00203b1b00283c0002b2600046507c0803a64e80002139e30000815b001091ea0000813b0004912a0004811b0008910a00083860000180fb001c7ce803a63b7b002c4e8000202c17000d408200e8971bfffc82d8000482b600148298000c827400003a430000398000073bbdffe07c1df04040a00010800d001c7c0803a64e800021387d0004919d000082240008922300189243001482180010920300109263000c90a3000881f8001491e3000481c4000491c30000973bfffc94dbfffc8004000c941bfffc83150008801800007c0803a64e800021815b0000812a000080030000941bfffc80030004941bfffc386900003b1b00143c0002b2600046f87c0803a64e800021811b000c80fb000490e800009068000480db000090c800083860000180bb00107ca803a63b7b00184e8000203ac0000192c600003aa0000192a6000490a60008386000014e800020|@6885,1048575|80,3,@6864 164,3,@6866 196,3,@6868 260,3,@6872 352,3,@6875 384,3,@6868 448,3,@6877 524,3,@6868 576,3,@6879 632,3,@6868 676,3,@6880 916,3,@6881 6864:C2,632|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8001482d700003980000256c0f80140a20010800d00347c0803a64e8000217eb6661541a3fff092b70000829800048274000882430010822300048203000880720000973bfffc971bfffc949bfffc94bbfffc963bfffc961bfffc965bfffc96dbfffc80130118941bfffc8313003c801800007c0803a64e800021831b0000801800007c0803a64e80002181e3000081db000491cf0000815b001c812a00108109000080e3000491070000809b0010806a000c3c0002a1600074a87c0803a64e8000213880005d3c0002a1600074a87c0803a64e80002180db001c80a6000480850008833b00083b03000080790000971bfffc83040034801800007c0803a64e80002182fb002080db001c80bb000038830000807b001083170008801800007c0803a64e80002182db002082b60004829500043a630000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092630004825b00089243000083140010801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a3d0004919d00003a000001921100049071000081fb002081cf0004814e0004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003920000191230004811b000891030000963bfffc830a0008801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138fd0004919d000038c0000190c700049067000080bb001c809b00009085000090e50004807b00209065000838600001833b00287f2803a63b7b002c4e800020|@6865,1048575|212,3,@511 232,3,@511 6865:S65|535452554354555245535f28292e67656e636f646553747275637473283229636f646553747264656373283429636f646553747275637475726542696e64283329 6866:C2,152|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc947bfffc947bfffc973bfffc38bb0004808300048063000083180004801800007c0803a64e800021398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000833b000493230000831b00089303000482fb000c92e3000882db00007ec803a63b7b00104e800020|@6867,1048575| 6867:S65|535452554354555245535f28292e67656e636f646553747275637473283229636f646553747264656373283429636f646553747275637475726542696e64283129 6868:C2,332|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0400014082002038a0000190a60000388000019086000490660008386000014e8000203b030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00009303000482e4000092e30000973bfffc94bbfffc94dbfffc80040004941bfffc3b050000801800007c0803a64e800021947bfffc947bfffc947bfffc947bfffc38db000480bb0018809b0010806300084bffff4582db0000829b00042c1400014082000c82b6000048000020807600003b1b001c3c0002b260003d007c0803a64e8000213aa30000825b00082c1200014082000c8276000448000020807600043b1b001c3c0002b260003da87c0803a64e8000213a630000823b001492b1000092710004821b000c921100083860000181fb001c7de803a63b7b00204e800020|@6871,1048575|224,3,@6869 272,3,@6870 6869:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c8078ffe84e800020973bfffc971bfffc80030000941bfffc806300044bffffbd398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b00009319000038790000833b00087f2803a63b7b000c4e800020|@468,786433| 6870:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c8078ffec4e800020973bfffc971bfffc80030000941bfffc806300044bffffbd398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b00009319000038790000833b00087f2803a63b7b000c4e800020|@468,786433| 6871:S41|535452554354555245535f28292e67656e636f6465537472756374732832296d617050616972283429 6872:C2,1176|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e3000082d700002c1600034082040c82b8000882950000398000025680f80140a20010800d00347c0803a64e8000217e74661541a3fff0927500008298000c827400003a40000392540000823800048211000881f7000881c300048143000c81230014806f0000973bfffc971bfffc949bfffc94bbfffc95dbfffc955bfffc953bfffc967bfffc80100118941bfffc8310003c801800007c0803a64e800021831b0000801800007c0803a64e8000218103000038e0ffff90e8000080db001c80a60008808500008323000490990000831b000882f8000096fbfffc809b0010806600183c0002a1600074a87c0803a64e80002182db002082b6000482950028947bfffc807400048314000c801800007c0803a64e800021827b00248253000482320000947bfffc8073001483110014801800007c0803a64e800021831b0000801800007c0803a64e800021280300014182001881fb002881cf0004814e0004820a001c48000014821b002881f0000481cf0004820e0018815b0028812a000481090008961bfffc807b000c83080064801800007c0803a64e800021947bfffc3c8002ac60840e14807b000c3c0002a1600074a87c0803a64e80002180fb003080db002c38a30000809b0000807b002483070010801800007c0803a64e80002180db003080a60008808500003b230000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d0000831b000c9303000c3ae0000392e300089083000493230000831b0004801800007c0803a64e80002182db003082b6000882950000398000025680f80140a20010800d00347c0803a64e8000217e6ca41141a3fff092750000825b0018398000025640f80140a20010800d00347c0803a64e8000217e32661541a3fff08216000c9230000081f6000481cf0008947bfffc800e0118941bfffc807b0018830e0068801800007c0803a64e800021831b0000801800007c0803a64e80002181430000813b0020912a0000811b003880e8000880c7000080a3000490c500008088000483240004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000831b0004930300049123000083190010801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ac0000192d700049077000082bb00388295000482740004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003a40000192430004823b00209223000096fbfffc83130008801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a1d0004919d000039e0000191f000049070000081db0034815b0000914e0000920e0004813b0038912e000838600001811b00407d0803a63b7b00444e800020973bfffc82b8000482950018398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a7d0004919d00003e4002b262524338925300083e2002a06231c7ac92330004821400009213000038730000800d00287c0803a64e800021|@6874,1048575|260,3,@511 448,3,@4945 460,3,@511 1128,3,@6873 1140,3,@227 6873:S34|636f646546756e63746f7242696e643a206e6f7420612046756e63746f7242696e64 6874:S63|535452554354555245535f28292e67656e636f646553747275637473283229636f646553747264656373283429636f646546756e63746f7242696e64283329 6875:C2,152|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc947bfffc947bfffc973bfffc38bb0004808300048063000083180004801800007c0803a64e800021398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000833b000493230000831b00089303000482fb000c92e3000882db00007ec803a63b7b00104e800020|@6876,1048575| 6876:S63|535452554354555245535f28292e67656e636f646553747275637473283229636f646553747264656373283429636f646546756e63746f7242696e64283129 6877:C2,156|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc947bfffc947bfffc973bfffc38db000480a30004808300008078000883180004801800007c0803a64e800021398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000833b000493230000831b00089303000482fb000c92e3000882db00007ec803a63b7b00104e800020|@6878,1048575| 6878:S47|535452554354555245535f28292e67656e636f6465537472756374732832296d617053747264656373283329283129 6879:C2,156|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc947bfffc947bfffc973bfffc38db000480a30004808300008078000883180004801800007c0803a64e800021398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000833b000493230000831b00089303000482fb000c92e3000882db00007ec803a63b7b00104e800020|@6878,1048575| 6880:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c8078ffd84e800020973bfffc971bfffc80030000941bfffc806300044bffffbd398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b00009319000038790000833b00087f2803a63b7b000c4e800020|@468,786433| 6881:C2,204|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e800020973bfffc971bfffc80030004941bfffc806300003c0002b2600047e07c0803a64e800021706b00014082005c80030000941bfffc807b0004831b00084bffff95398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b0000931900003879000082fb000c7ee803a63b7b00104e800020807b0000831b0004833b00087f2803a63b7b000c4bffff40|@6884,1048575|68,3,@6882 6882:C2,296|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e300002c17fffd408200f8398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213add0004919d000082a3001092b6000c8283000c9296000882630008927600048243000492560000823800008211000481f0000c81d1000c814e00008130000881100000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d000038e0000190e3001080c8001090c3000c80a900e090a300089143000492c30000973bfffc830f0014801800007c0803a64e80002138830000398000013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d000090830000833b00007f2803a63b7b00044e800020386000014e800020|@6883,1048575| 6883:S58|535452554354555245535f28292e67656e636f646553747275637473283229636f64655374726465637328342966696c74657256616c73283129 6884:S18|4c6973742e6d61705061727469616c283229 6885:S45|535452554354555245535f28292e67656e636f646553747275637473283229636f646553747264656373283429 6886:C2,1784|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021398000053bbdffe87c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002b262d650d092d7000082d8001492d7001082b8001092b7000c82980008929700088278000492770004824300002c12fffd408201d88223000c8211000081f3000481d3000c81530008973bfffc971bfffc949bfffc94bbfffc94dbfffc96fbfffc80030004941bfffc961bfffc800f0028941bfffc800e0010941bfffc38700000830a0068801800007c0803a64e800021813b00208109000880e8000038c30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000090e3000490c30000831b0000801800007c0803a64e80002180bb00208085000483240008947bfffc80190034941bfffc807b001083190060801800007c0803a64e800021831b0000801800007c0803a64e80002180db001c80bb002038830000807b0014831b00284bfffe8d398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b1d0004919d00003ae0000192f8000490780000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003ac0000192c300089303000482bb000492a30000831b000c801800007c0803a64e800021829b00288274000482530008947bfffc807b001483120064801800007c0803a64e800021947bfffc947bfffc38db000080bb003038830000807b0008831b0024801800007c0803a64e800021807b0000823b00387e2803a63b7b003c4e8000202c12fff1408200cc822300088211000081f8000481cf000c81580008812a0000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00009123000492030000973bfffc971bfffc949bfffc96fbfffc961bfffc830e000c801800007c0803a64e800021811b000c80e8000480c70008947bfffc807b000483060034801800007c0803a64e800021947bfffc947bfffc38db000080bb001438830000807b0008831b0010801800007c0803a64e800021807b000080bb001c7ca803a63b7b00204e8000202c1200074082020882230004722b00014082019c821100042c10000140820130398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002139fd0004919d00003dc002b261ce6f3091cf000090af00088158000c914f0004947bfffc947bfffc947bfffc973bfffc971bfffc949bfffc94bbfffc80110000941bfffc3926000038db001438af000080830008386900003c0002b260003b987c0803a64e800021811b000c80e8000480c7000480060030941bfffc80db002080bb0008809b000c807b00043b0800004bfffc15398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138bd0004919d00003880000190850004906500002c0500014082000c807b00184800002494bbfffc807b001c3b1b00243c0002b2600070287c0803a64e8000213b7b0004831b0000833b0014801800007c0903a67f2803a63b7b00244e800420973bfffc81f8000481cf0018398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021395d0004919d00003d2002b2612970d0912a00083d0002a06108c7ac910a000480ee000090ea0000386a0000800d00287c0803a64e800021973bfffc8218000481f00018398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002139dd0004919d00003d4002b2614a70d0914e00083d2002a06129c7ac912e0004810f0000910e0000386e0000800d00287c0803a64e8000212c12fff340820154398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a3d0004919d00003e0002b2621070f89211000090b1000881f8000c91f10004947bfffc947bfffc947bfffc973bfffc971bfffc949bfffc96fbfffc80030008941bfffc39c6000038db001438b1000080830004386e00003c0002b260003b987c0803a64e800021815b000c812a00048109000480080030941bfffc807b001c8308002c801800007c0803a64e800021947bfffc947bfffc38db000080bb0014809b000c831b0010801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138fd0004919d000038c0000190c7000480bb000090a700002c0700014082000c807b00204800002494fbfffc807b00243b1b002c3c0002b2600071b07c0803a64e8000213b7b0004831b0008833b001c801800007c0903a67f2803a63b7b002c4e8004202c12000940820010806300047f2803a64bfff974973bfffc8238000482110018398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002139fd0004919d00003dc002b261ce70d091cf00083d4002a0614ac7ac914f000481300000912f0000386f0000800d00287c0803a64e800021|@6906,1048575|68,3,@6887 868,3,@6900 948,3,@6868 1084,3,@6902 1180,3,@6903 1192,3,@227 1276,3,@6903 1288,3,@227 1368,3,@6904 1448,3,@6868 1620,3,@6905 1736,3,@6903 1748,3,@227 6887:C2,1028|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7000482b80008829500003a630000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092830008825800109243000492630000973bfffc971bfffc967bfffc949bfffc94bbfffc94dbfffc83160034801800007c0803a64e800021823b00108211000839e300008070000095fbfffc830f0004801800007c0803a64e8000213d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e80002139dd0004919d000039400003914e0000813b00148109000480e8003080c8000438a30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080860004908300043b2000159323000094bbfffc95dbfffc83070000801800007c0803a64e8000213d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213b1d0004919d00003ae0000192f8000082db001c82b600048295002482750008947bfffc971bfffc80140008941bfffc807b001c83130074801800007c0803a64e800021825b00283980000b3bbdffd07c1df04040a00010800d001c7c0803a64e8000213a3d0004919d00003e0002b2621054f09211000081f2000c91f1002881db001491d10024815b002091510020813200089131001c811b0010911100189251001480fb000c90f1001080d2000490d1000c80bb000890b10008809b000490910004398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d00003f0002b263186cb893190000923900043ae30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003ac0000192c300089323000492e30000831b0000801800007c0803a64e80002182bb000c82950000281400014182002c827b0018825b0024925300003a2000039233000438600001821b002c7e0803a63b7b00304e800020827b000482530000823b0028398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a1d0004919d00003de002b261ef6d6091f0000081d1000491d00008815b00089150000438900000387200003c0002a9600048f87c0803a64e800021813b00288109000480e8000480db001480070030941bfffc80060000941bfffc8307002c801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138bd0004919d00003880000190850004906500002c0500014082000c807b00004800002494bbfffc807b00043b1b00383c0002b260006e407c0803a64e8000213b7b0004831b0004801800007c0803a64e800021833b0020907900003b000001931900043860000182fb00347ee803a63b7b00384e800020|@6899,1048575|464,3,@6888 588,3,@6894 780,3,@6896 816,3,@3354 956,3,@6898 6888:C2,4768|7f2802a66339000239600054800d00187d6bd8107c0b004040a00010800d00247c0803a64e80002182f8000c82d7002082b70008973bfffc971bfffc947bfffc949bfffc8075004083160000801800007c0803a64e8000213a830000807b00003b140000801800007c0803a64e800021280300014182047c827b00088253000c82320020821200088070004083110004801800007c0803a64e80002139e30000807b00003b0f0000801800007c0803a64e80002181db0008814e000c812a0008947bfffc80090108941bfffc8309003c801800007c0803a64e800021831b0000801800007c0803a64e80002128030001418203ec811b001080e8000c80c7000880060114941bfffc807b00088306003c801800007c0803a64e800021831b0000801800007c0803a64e80002180bb00148085000c8324002483040008947bfffc80190004941bfffc8065002083180074801800007c0803a64e80002182fb001c82d7000c82b600083a830000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000827b001892630008825500409243000492830000831b0000801800007c0803a64e800021706b00014082000c82230000480000183c6002b2606367ac800d00287c0803a64e800021821b001c81f0000c81cf0008963bfffc38710000830e003c801800007c0803a64e800021815b0020812a000c81090008947bfffc83080108801800007c0803a64e80002128030001418200e080db002480a6000c80850008807b000083040114801800007c0803a64e800021833b000c7c6bcb78556bf80140a20010800d00347c0803a64e8000217c03c8004182001c82fb002482d700103aa0000192b600003b000001480000083b000001831b002482f8000c82d7000482b7000880160014941bfffc807b000483150114801800007c0803a64e800021829b00283a630000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000825400189243000492630000831b0000801800007c0803a64e80002138e300004800007080fb002480c7001038a0000190a600008087000c8064000c8327001c8319000082e3000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00009303000482db000492c300003b170000801800007c0803a64e80002138e30000947bfffc82bb00288295000c8274000894fbfffc807b000c83130034801800007c0803a64e800021825b002c8232000c82110008947bfffc807b002483100034801800007c0803a64e800021947bfffc947bfffc81fb003838db000038a30000809b0008807b000c830f0014801800007c0803a64e80002181db0004280e00014082001c813b00388109001038e0000190e80000394000014800000839400001815b0038812a000c81090030398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000080fb000090e3000880db002090c3000480aa000890a3000083080004801800007c0803a64e800021809b00388064000483230000831b00207f0bc838556bf80140a20010800d00347c0803a64e8000217c18c8004180003c398000025700f80140a20010800d00347c0803a64e8000217ef8661541a3fff092e300003860000182db003c7ec803a63b7b00404e8000203860000182fb003c7ee803a63b7b00404e80002038600001811b00147d0803a63b7b00184e800020827b00088253000c82320020821200088070012883110000801800007c0803a64e80002139e30000807b00003b0f0000801800007c0803a64e8000212803000141820b5481db0008814e000c812a0020810a00088068012883090004801800007c0803a64e80002138e30000807b00003b070000801800007c0803a64e80002180db000880a6000c8085000883240008947bfffc83190008801800007c0803a64e800021831b000c82f8000c82d7000882b6001880030008941bfffc807b000083150000801800007c0803a64e8000212803000141820aac829b00108274000c8253000882320018807b000083110008801800007c0803a64e800021821b001081f0000c81cf0024814f0008947bfffc800e0004941bfffc80700020830a0074801800007c0803a64e800021813b00188109000c80e8000838c30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000080bb001490a30008808701289083000490c30000831b0000801800007c0803a64e800021706b00014082000c83230000480000183c6002b2606367ac800d00287c0803a64e800021831b001882f8000c82d7000882b60008973bfffc807b001083150008801800007c0803a64e800021829b001c8274000c82530008823200148063000483110000801800007c0803a64e800021280300014182006481fb001c81cf000c814e0008812a0008807b000083090008801800007c0803a64e800021811b001c80e8000c80c7000880a600108063000483050000801800007c0803a64e800021280300014182000c3a000003480000103a000001480000083a00000181fb001c81cf000c814e0008812a0008961bfffc807b001483090008801800007c0803a64e800021811b002080e8000c80c7000880a600148063000483050000801800007c0803a64e8000212803000141820090807b00208323000c8319000882f80008807b000483170008801800007c0803a64e80002182db002082b6000c829500088274000c80030004941bfffc807b000083130000801800007c0803a64e8000212803000141820030825b00248232000c8211000881f0000c807b0000830f0008801800007c0803a64e8000213880000348000014388000014800000c38800001947bfffc807b00248323000c8319000882f80008949bfffc807b000c83170008801800007c0803a64e80002182db002882b6000c829500088274001880030008941bfffc807b000083130000801800007c0803a64e8000212803000141820550823b002c8211000c81f0000881cf0018807b0000830e0008801800007c0803a64e800021815b00187c6b5378556bf80140a20010800d00347c0803a64e8000217c0350004182000848000020813b000c280900014182000848000010811b0004280800014182001c811b002c80e8001038c0000190c7000039200001480000083920000180fb000c28070001418203a480db002c80a6000c80850008947bfffc800400e8941bfffc807b002883040124801800007c0803a64e800021831b0000801800007c0803a64e8000212803000141820150807b00348323000c8319000482e30018398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092e3000482db000492c300008018002c941bfffc83180014801800007c0803a64e80002182bb00388295000c8274000482540008947bfffc80130020941bfffc807b003483120120801800007c0803a64e800021831b0000801800007c0803a64e800021823b00408211000c81f00004398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002139dd0004919d000039400001914e0004812f0004912e0000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021391d0004919d000091c8000490680000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00009103000480fb000490e30000831b0008801800007c0803a64e8000213a430000480004f0807b00348323000c8319000482e3002482c3001c82b600003980000256a0f80140a20010800d00347c0803a64e8000217c75661541a3fff080180018941bfffc8018002c941bfffc80180014941bfffc83170004801800007c0803a64e8000213a830000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092830004827b001092630000831b0000801800007c0803a64e800021825b00408232000c8211000481f10008947bfffc80100020941bfffc807b003c830f0120801800007c0803a64e800021831b0000801800007c0803a64e80002181db0048814e000c812a0004947bfffc3c6002ae606300bc83090008801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021391d0004919d000038e0000190e8000490680000398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138dd0004919d00009106000480bb000090a60000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000090c30004809b000890830000831b0010801800007c0803a64e8000213b230000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00003f000000631846689303000c3ae0000392e300083ac0000392c3000493230000831b0014801800007c0803a64e8000213a4300003b7b000c480002e080db000428060001418200a880bb002c8085000c832400043b030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082e5001892e300049303000080190014941bfffc831b0000801800007c0803a64e8000213ac30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092c300043aa0000392a30000831b0000801800007c0803a64e8000213a4300004800005c80bb002c8085000c832400043b030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082e5001892e300049303000083190014801800007c0803a64e8000213a430000947bfffc947bfffc947bfffc947bfffc947bfffc480001c4825b002c823200103a0000019211000081fb000c280f0001418200a081d2000c814e000c8132001c8109000080ee0008800a0018941bfffc951bfffc807b002883070124801800007c0803a64e80002180db003438a30000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d00003880000190830010832600289323000c90a30008831b00009303000482fb001892e30000831b0004801800007c0803a64e8000213a4300004800010081d2000c814e000c8132001c8109000080ee0008800a0014941bfffc951bfffc807b002883070124801800007c0803a64e80002180db003438a30000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d00003880000190830010832600289323000c90a30008831b00009303000482fb001892e30000831b0004801800007c0803a64e80002182db000c281600014182005c82bb00348295000c827400043a430000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000924300043a2000039223000083130014801800007c0803a64e8000213a430000480000083a430000947bfffc947bfffc947bfffc82bb00408295000c82740030398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092430008825b002c92430004823500089223000083130004801800007c0803a64e800021821b004081f0000481cf0000815b002c7d4b7038556bf80140a20010800d00347c0803a64e8000217c0a70004180003c398000025540f80140a20010800d00347c0803a64e8000217d2a661541a3fff0912f000038600001811b00447d0803a63b7b00484e80002038600001813b00447d2803a63b7b00484e80002038600001829b00147e8803a63b7b00184e80002081db0008814e000c812a0020810a0008806800d883090000801800007c0803a64e80002138e30000807b00003b070000801800007c0803a64e80002128030001418201c880db000880a6000c8085002080650008806300d883040004801800007c0803a64e8000213b230000807b00003b190000801800007c0803a64e800021831b000882f8000c82d7002482b70008947bfffc80160004941bfffc8078002083150074801800007c0803a64e800021829b00108274000c825300083a230000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000821b000c9203000881f200d891e3000492230000831b0000801800007c0803a64e800021706b00014082000c81c30000480000183c6002b2606367ac800d00287c0803a64e800021815b0010812a000c8109000895dbfffc807b0008830800cc801800007c0803a64e80002180fb001480c7000c80a60008947bfffc807b0004830500cc801800007c0803a64e800021809b0000708b000140820078706b00014082005c80040004941bfffc80030004941bfffc8324000080830000387900003b1b00243c0002b2600067cc7c0803a64e800021807b0000809b00043b7b0008800d00187c1b004040a00010800d00207c0803a64e8000214bffff9c38600001833b001c7f2803a63b7b00204e80002038600001833b001c7f2803a63b7b00204e8000203860000180db000c7cc803a63b7b00104e800020|@6893,1048575|452,3,@6889 1668,3,@6889 2984,3,@5563 3208,3,I48 4508,3,@6889 4652,3,@6891 6889:O3|@9453,@6890,0 6890:S6|4f7074696f6e 6891:C2,1052|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8fffc82d7000c82b6000882950008973bfffc971bfffc949bfffc83140008801800007c0803a64e800021827b00048253fffc8232000c8211000881f00018947bfffc80030008941bfffc807b0000830f0000801800007c0803a64e800021280300014182038481db000c814efffc812a000c8109000880e80018807b000083070008801800007c0803a64e80002180db000480bb000c8085fffc8324000c8319000882f80008947bfffc8006000c941bfffc807b001083170008801800007c0803a64e80002182db001482b6fffc8295000c827400088253001880030008941bfffc807b000083120000801800007c0803a64e8000212803000141820194823b00188211fffc81f0000c81cf0008814e0018807b0000830a0008801800007c0803a64e800021813b00087c6b4b78556bf80140a20010800d00347c0803a64e8000217c03480041820018811b001880e8fffc80c7001038a0000190a60000811b001880e8fffc80c7000c80a6000438830000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000083270018932300049083000083050014801800007c0803a64e800021831b001882f8fffc82d7000c82b600303a830000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092830008827b000892630004825700089243000083150004801800007c0803a64e800021823b00188211fffc81f0000481cf0000815b00087d4b7038556bf80140a20010800d00347c0803a64e8000217c0a70004180003c398000025540f80140a20010800d00347c0803a64e8000217d2a661541a3fff0912f000038600001811b001c7d0803a63b7b00204e80002038600001813b001c7d2803a63b7b00204e800020823b00188211fffc81f0001039c0000191cf00008150000c812a000c8110001c80e80000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d000038c0000190c3001080b0002890a3000c809b00049083000890e30004833b00149323000083090014801800007c0803a64e800021831b001882f8fffc82d7000c82b600303a830000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092830008827b000892630004825700089243000083150004801800007c0803a64e800021823b00188211fffc81f0000481cf0000815b00087d4b7038556bf80140a20010800d00347c0803a64e8000217c0a70004180003c398000025540f80140a20010800d00347c0803a64e8000217d2a661541a3fff0912f000038600001811b001c7d0803a63b7b00204e80002038600001813b001c7d2803a63b7b00204e8000203860000181db00107dc803a63b7b00144e800020|@6892,1048575| 6892:S90|535452554354555245535f28292e67656e636f646553747275637473283229737472756374757265436f64652834296d61746368537472756374757265283429552d28332970726f63657373436f6e7374727563746f72283229 6893:S69|535452554354555245535f28292e67656e636f646553747275637473283229737472756374757265436f64652834296d61746368537472756374757265283429552d283329 6894:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@6895,1048575| 6895:S69|535452554354555245535f28292e67656e636f646553747275637473283229737472756374757265436f64652834296d61746368537472756374757265283429552d283129 6896:C2,112|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000882d700303aa30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a30004829800049283000083160008801800007c0903a67f2803a64e800420|@6897,1048575| 6897:S76|535452554354555245535f28292e67656e636f646553747275637473283229737472756374757265436f64652834296d61746368537472756374757265283429636f64654c6973742d283129 6898:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c8078ffc84e800020973bfffc971bfffc80030000941bfffc806300044bffffbd398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b00009319000038790000833b00087f2803a63b7b000c4e800020|@468,786433| 6899:S64|535452554354555245535f28292e67656e636f646553747275637473283229737472756374757265436f64652834296d61746368537472756374757265283429 6900:C2,156|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc947bfffc947bfffc973bfffc38db000480a30004808300008078000883180004801800007c0803a64e800021398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000833b000493230000831b00089303000482fb000c92e3000882db00007ec803a63b7b00104e800020|@6901,1048575| 6901:S56|535452554354555245535f28292e67656e636f646553747275637473283229737472756374757265436f6465283429636f6465642d283129 6902:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c8078ffdc4e800020973bfffc971bfffc80030000941bfffc806300044bffffbd398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b00009319000038790000833b00087f2803a63b7b000c4e800020|@468,786433| 6903:S30|737472756374757265436f64653a206e6f74206120737472756374757265 6904:C2,156|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc947bfffc947bfffc973bfffc38db000480a30004808300008078000883180004801800007c0803a64e800021398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000833b000493230000831b00089303000482fb000c92e3000882db00007ec803a63b7b00104e800020|@6878,1048575| 6905:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c8078ffd44e800020973bfffc971bfffc80030000941bfffc806300044bffffbd398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b00009319000038790000833b00087f2803a63b7b000c4e800020|@468,786433| 6906:S47|535452554354555245535f28292e67656e636f646553747275637473283229737472756374757265436f6465283429 6907:C2,16|8078000482e30004807700044e800020|@6908,917505| 6908:S40|535452554354555245535f28292e67656e636f646553747275637473283229636f6465642d283129 6909:C2,160|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc947bfffc947bfffc973bfffc38db000480a30004808300003c6000006063466883180004801800007c0803a64e800021398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000833b000493230000831b00089303000482fb000c92e3000882db00007ec803a63b7b00104e800020|@6878,1048575|60,3,I48 6910:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c8078ffe84e800020973bfffc971bfffc80030000941bfffc806300044bffffbd398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b00009319000038790000833b00087f2803a63b7b000c4e800020|@468,786433| 6911:S31|535452554354555245535f28292e67656e636f646553747275637473283229 6912:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@6913,1048575| 6913:S31|535452554354555245535f28292e646973706c617953747275637473283129 6914:O1|@6915 6915:O2|@6917,@6916 6916:O35|@6920,@7117,@7131,@2735,@7118,@2838,@7625,@7626,@7628,@7629,@7630,@7125,@7631,@7633,@7634,@7635,@7636,@7637,@7639,@7640,@7641,@7642,@7643,@7644,@7645,@7646,@7647,@7593,@7648,@7649,@7650,@7632,@7651,@7654,@6919 6917:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@6918,1048575| 6918:S23|50415253455f44454328292e7061727365446563283129 6919:O3|@2710,@7211,@7650 6920:C2,2912|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021398000063bbdffe47c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002b262d681a092d7000082d8008092d7001482b8001492b700108298000c9297000c909700088278000892770004398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a5d0004919d00003e2002b262318b2c9232000092720004398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a3d0004919d00003e0002b262108e789211000092710004398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a1d0004919d00003de002b261ef910891f000009270000890900004398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002139fd0004919d00003dc002b261ce92b091cf0000908f0008926f0004398000063bbdffe47c1df04040a00010800d001c7c0803a64e80002139dd0004919d00003d4002b2614a94e8914e000092ee001491ee0010928e000c908e0008926e00043d804000398c00053bbdffe87c1df04040a00010800d001c7c0803a64e800021395d0004919d00003d2002b261299938912a000039200001912a000439200001912a000839200001912a000c39200001912a00103d804000398c00083bbdffdc7c1df04040a00010800d001c7c0803a64e800021393d0004919d00003d0002b261089bc89109000039000001910900043900000191090008390000019109000c390000019109001039000001910900143900000191090018390000019109001c398000093bbdffd87c1df04040a00010800d001c7c0803a64e800021391d0004919d00003ce002b260e7a20490e8000092e8002092a8001c912800189148001491c800109208000c9088000892680004926900049089000892a9000c92490010825800849249001491e9001880f8008890e9001c398000007d8c0e709989fffc912a0004908a0008926a000c92ea0010398000007d8c0e70998afffc398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021393d0004919d00003cc002b260c6ab3c90c900009269000c9089000892c900043980001b3bbdff907c1df04040a00010800d001c7c0803a64e80002138dd0004919d00003e6002b26273afb0926600008278007c92660068829800789286006482b8007492a600609226005c823800709226005882d8006c92c60054825800689246005080f8006490e6004c80f8001890e6004880f8000c90e6004480f8006090e6004080f8005c90e6003c80f8005890e6003880f8005490e6003480f8005090e6003080f8002090e6002c80f8004c90e6002880f8004890e60024914600209106001c91c60018920600149126001092e6000c815800149146000881580008914600043d804000398c000c3bbdffcc7c1df04040a00010800d001c7c0803a64e800021395d0004919d00003ce002b360e75b1490ea000038e0000190ea000438e0000190ea000838e0000190ea000c38e0000190ea001038e0000190ea001438e0000190ea001838e0000190ea001c38e0000190ea002038e0000190ea002438e0000190ea002838e0000190ea002c398000063bbdffe47c1df04040a00010800d001c7c0803a64e80002138fd0004919d00003e4002b362528304924700009147001492e7001091e7000c81f8001491e7000882f8000892e7000482580038924a000492ea000891ea000c910a00108118003c910a0014920a001891ca001c82180040920a002090ea002481d8004491ca0028912a002c398000007d8c0e70998afffc971bfffc94fbfffc3d804000398c00093bbdffd87c1df04040a00010800d001c7c0803a64e800021393d0004919d00003ec002b362d68f8892c900003ac0000192c900043ac0000192c900083ac0000192c9000c3ac0000192c900103ac0000192c900143ac0000192c900183ac0000192c9001c3ac0000192c900203d804000398c00073bbdffe07c1df04040a00010800d001c7c0803a64e8000213add0004919d00003e2002b362319e8c923600003a200001923600043a200001923600083a2000019236000c3a200001923600103a200001923600143a200001923600183d804000398c00083bbdffdc7c1df04040a00010800d001c7c0803a64e8000213a3d0004919d00003ea002b362b5a35092b100003aa0000192b100043aa0000192b100083aa0000192b1000c3aa0000192b100103aa0000192b100143aa0000192b100183aa0000192b1001c953bfffc955bfffc82bb000c82950008929100049131000890f1000c827b000c815300149151001082fb000c81f7001c91f1001492d1001880fb000c824700209251001c398000007d8c0e709991fffc811b000c82080008921600049236000890d6000c81db000c830e002c93160010812e00149136001482bb000c8295003092960018398000007d8c0e709996fffc827b0004815b000891530004815b000c82ea000892f30008827b000492d3000c81fb000c82cf002092d30010824f00249253001480fb000c827b00048207001892130018811b000c827b0004830800149313001c827b000c81db000481330028912e0020398000007d8c0e70998efffc81db000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003e8002b36294aea49295000090950008828e000892950004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021395d0004919d000092aa000882e5000492ea000482a5000092aa000082bb000c80b5000882e5000482db000c8256000881f20004947bfffc398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080ef00c090e30004821b000092030000973bfffc949bfffc94dbfffc963bfffc955bfffc83170004801800007c0803a64e800021947bfffc81fb002881cf0008814e0004812e0008800a0000941bfffc807b001483090004801800007c0803a64e800021811b002c38e30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080c8000490c3000490e30000831b0000801800007c0803a64e800021280300014182003080bb002c806500043b1b002c3c0002b36000b0287c0803a64e800021809b00187c8803a63b7b00304e80002080bb002c80850008806400088323000c807b00143b190000801800007c0803a64e800021831b002c82f8000882d7001c947bfffc80160020941bfffc80db000c80bb001c38800001807b0010831b0018801800007c0803a64e8000213aa30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000829b00049283000492a30000831b0000801800007c0803a64e800021827b00348253000882320008947bfffc8013000c941bfffc807b002483110004801800007c0803a64e800021821b003c81f0000881cf000039430000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000812e009c9123000491430000831b0000801800007c0803a64e8000212803000141820088811b003c80e8000880c700088008000c941bfffc807b002883060004801800007c0803a64e80002180bb004080850008832400003b030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082f9000092e3000493030000831b0000801800007c0803a64e80002128030001418200684800000c947bfffc4800005c82bb0040829500088274000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000825b0028924300043a200077922300008313000c801800007c0803a64e8000213ac30000480000083ac00001398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000390000019103000480fb000890e3000080db002c7cc803a63b7b00444e800020|@7116,1048575|68,3,@6921 152,3,@6928 204,3,@6931 256,3,@6933 312,3,@6935 368,3,@6940 440,3,@6942 524,3,@6944 628,3,@6948 784,3,@6955 844,3,@6961 1076,3,@7059 1212,3,@7082 1372,3,@7086 1488,3,@7093 1588,3,@7097 1952,3,@7102 2288,3,@7105 6921:C2,980|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021398000083bbdffdc7c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002b262d6859092d7000082d8000c92d7001c82a4000092b70018907700148078001490770010828400049297000c8278000892770008825800049257000482320008973bfffc971bfffc96fbfffc80180010941bfffc3873000083110004801800007c0803a64e800021821b000881f0000481cf000039430000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000812e00b09123000491430000831b0000801800007c0803a64e800021280300014182005c38600001831b0004801800007c0803a64e80002139030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000038e0000190e300049103000080db000c7cc803a63b7b00104e800020811b000880e8000480c7000880080010941bfffc8068000883060004801800007c0803a64e80002180bb000c80850004832400003b030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082f9008492e3000493030000831b0000801800007c0803a64e80002128030001418201e482db000c82b60004829500088076000883140000801800007c0803a64e800021827b000c82530004823200088013000c941bfffc8073000883110004801800007c0803a64e800021821b001081f0000481cf000039430000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000812e00b09123000491430000831b0000801800007c0803a64e800021280300014182006c811b001080e8000480c7000880a70000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008085008490830004832800089323000083060010801800007c0803a64e80002138600001831b00147f0803a63b7b00184e800020811b001080e8000480c7000c80a7000080870004398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d0000833b000c9323000c830800089303000882e4007092e3000482c5009492c300008306001c801800007c0803a64e80002182bb0010829500048274000c825400003a230000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000821500089203000481f2008891e30000963bfffc83130004801800007c0803a64e800021807b000081db00187dc803a63b7b001c4e8000203860000182db00107ec803a63b7b00144e800020|@6927,1048575|68,3,@6922 6922:C2,912|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d70008973bfffc971bfffc8018001c941bfffc8078000883160004801800007c0803a64e80002182bb000482950004827400003a430000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000823300b09223000492430000831b0000801800007c0803a64e8000212803000141820078821b000481f0000481cf000c814f0000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008130000891230004810a00b091030000830e0008801800007c0803a64e80002180fb000480c7000480a6001480650014809b00087c8803a63b7b000c4e800020821b000481f0000481cf000880700008830e0008801800007c0803a64e800021815b000439230000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00003d0002b26108893c910300009123000c80ea000490e3000880ca000890c30004953bfffc830a0018801800007c0803a64e80002180bb00088085001428040001418200d0833b0000732b00014182000c3b0000034800001081990000558c083c61980001570bf80140a20010800d00347c0803a64e8000212c1800034081008c732b00014182000c3ae000034800001081990000558c083c6197000156ebf80140a20010800d00347c0803a64e8000212c170003418100183c6002a0606395e0800d00287c0803a64e800021732b00014182000c3ad900004800001089990005558c083c619600013880004f387600003f00000063184368801800007c0803a64e80002148000010386000014800000838600001832500142819000141820028947bfffc80850008807b000483050010801800007c0803a64e8000213b0300004800000c3b000001947bfffc82fb000c82d7000482b6001482960010398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00009303000c3a60000392630008825b000092430004823400089223000083150004801800007c0803a64e800021821b000c39e30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000091e3000481db000491c3000095fbfffc8310000c801800007c0803a64e800021815b0010812a000481090008806a000883080000801800007c0803a64e800021807b000080fb00147ce803a63b7b00184e800020|@6926,1048575|356,3,@6923 540,3,@51 596,3,I24 6923:C2,264|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000213ad900003ab80000828300008095000c387400003f00000063184368801800007c0803a64e80002128030001418200b0827500088253000896dbfffc969bfffc80120014941bfffc80150004941bfffc807b00008312000c801800007c0803a64e800021947bfffc3c8002b260848a60807b000c3c0002a1600074a87c0803a64e8000213a230000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092230008821b00009203000481fb000491e30000831b0008833b0010801800007c0903a67f2803a63b7b00144e800420386000017ec803a64e800020|@6925,1048575|52,3,I24 136,3,@6924 148,3,@511 6924:S23|2068617320616c7265616479206265656e20757365642e 6925:S55|50415253455f44454328292e7061727365446563283329676574547970655661727328322967657454797065566172283129552d283129 6926:S50|50415253455f44454328292e7061727365446563283329676574547970655661727328322967657454797065566172283129 6927:S37|50415253455f44454328292e70617273654465632833296765745479706556617273283229 6928:C2,708|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000090c3000882bb000892a30004829b000492830000973bfffc971bfffc949bfffc94dbfffc83160014801800007c0803a64e800021827b0008825300048232002482120008947bfffc80110004941bfffc807b00088310000c801800007c0803a64e80002139e30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000091e3000881db000891c30004815b000491430000831b0000801800007c0803a64e800021807b0004831b000c801800007c0803a64e800021706b0001408200c4811b001080e8000480c7001080a6000c80030000941bfffc807b000083050000801800007c0803a64e8000212803000141820030809b001480640004832300108319000c807b000083180008801800007c0803a64e800021392000034800006c809b0014806400048323001083190010807b000083180000801800007c0803a64e800021280300014182003082fb001482d7000482b6001082950010807b000083140008801800007c0803a64e8000213920000348000014392000014800000c39200001947bfffc28090001418200c0813b001c28090001408200b480fb001480c7000480a6000880050018941bfffc807b00108305000c801800007c0803a64e800021947bfffc809b0010386000513c0002a1600074a87c0803a64e8000213c8002b260848e0c3c0002a1600074a87c0803a64e80002138830000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000090830008833b000093230004831b001493030000831b0004801800007c0803a64e800021390300004800001039000001947bfffc947bfffc807b0010813b00207d2803a63b7b00304e800020|@6930,1048575|552,3,@511 568,3,@6929 576,3,@511 6929:S46|292068617320696e666978207374617475732062757420776173206e6f74207072656365646564206279206f702e 6930:S42|50415253455f44454328292e706172736544656328332967657453686f72744e6f6e496e666978283729 6931:C2,576|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000090c3000882bb000892a30004829b000492830000973bfffc971bfffc949bfffc94dbfffc83160014801800007c0803a64e800021947bfffc831b0008801800007c0803a64e800021706b0001408200c4825b000c823200048211001081f0000c80030000941bfffc807b0000830f0000801800007c0803a64e800021280300014182003081db0010814e0004812a00108109000c807b000083080008801800007c0803a64e8000213a6000034800006c81db0010814e0004812a001081090010807b000083080000801800007c0803a64e800021280300014182003080fb001080c7000480a6001080850010807b000083040008801800007c0803a64e8000213a600003480000143a6000014800000c3a600001947bfffc28130001418200bc827b001828130001408200b0825b0010823200048211000880100018941bfffc807b000c8310000c801800007c0803a64e800021947bfffc809b000c386000513c0002a1600074a87c0803a64e8000213c8002b260848e0c3c0002a1600074a87c0803a64e80002139e30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000091e3000881db000091c30004815b001091430000831b0004801800007c0803a64e8000214800000c947bfffc947bfffc807b000c827b001c7e6803a63b7b002c4e800020|@6932,1048575|428,3,@511 444,3,@6929 452,3,@511 6932:S41|50415253455f44454328292e70617273654465632833296765744c6f6e674e6f6e496e666978283729 6933:C2,348|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000882d700043aa30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008296000c9283000490830000973bfffc971bfffc96bbfffc949bfffc83160004801800007c0803a64e800021831b0004801800007c0803a64e800021827b0008825300088232000c8212000081f2000439c30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00008153000491430008812f0098912300048110000c9103000095dbfffc83110000801800007c0803a64e800021280300014182001c809b0004807b0008831b000c4bfffef938e300004800000838e00001398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138dd0004919d000090e6000480bb000090a6000038660000809b00107c8803a63b7b00144e800020|@6934,1048575| 6934:S37|50415253455f44454328292e7061727365446563283329616e6442696e64696e6773283229 6935:C2,84|7f2802a663390002398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00003c8002b2608493209083000090a3000c80b8000890a3000880980004908300047f2803a64e800020|@6939,786439|44,3,@6936 6936:C2,276|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc947bfffc8318000c801800007c0803a64e800021706b00014082001880630000833b00087f2803a63b7b000c4e800020833b00048319000482f8000880170014941bfffc80190008941bfffc807b00008317000c801800007c0803a64e800021947bfffc3c8002b260849450807b000c3c0002a1600074a87c0803a64e8000213ac30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092c3000882bb000092a30004829b000492830000831b0008801800007c0803a64e800021827b0010825300048232001480710014821b00147e0803a63b7b00184e800020|@6938,1048575|140,3,@6937 152,3,@511 6937:S42|20686173206e6f74206265656e206465636c6172656420696e2074797065206465636c61726174696f6e 6938:S42|50415253455f44454328292e706172736544656328332967656e54797065566172456e76283329283129 6939:S39|50415253455f44454328292e706172736544656328332967656e54797065566172456e76283329 6940:C2,1028|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d70024973bfffc971bfffc947bfffc3860000183160000801800007c0803a64e80002182bb0004947bfffc388300003860000183150014801800007c0803a64e800021829b000882740004825300043a230000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008212006c9203000481fb000491e30000963bfffc80120008941bfffc83120004801800007c0803a64e80002181db0010814e0004812a000c39030000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000080ee000890e300089103000480db000090c3000094fbfffc83090014801800007c0803a64e80002180bb0014808500048324002483040008947bfffc80190004941bfffc807b00088318000c801800007c0803a64e8000213ae30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092e3000882db000892c3000482bb000492a30000831b0000801800007c0803a64e800021829b001c827b001480b30008809300048073000083140010801800007c0803a64e800021825b0024281200014182008c823b001c8211000481f00008947bfffc8011000c941bfffc80710008830f0004801800007c0803a64e80002181db0024814e0004812a000039030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080e900a890e3000491030000831b0000801800007c0803a64e80002128030001418200104800001c947bfffc947bfffc823b003028110001408200084800001880bb0024808500048064001080c300044800011c821b002481f0000481cf000c814f0000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008130000891230004810a00a891030000830e0004801800007c0803a64e80002180fb002480c7000480a6000c80860004398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d0000832700089323000c3f0002a7631841909303000882fb002092e3000482c400b892c3000083050010801800007c0803a64e80002182bb00248295000482740020398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000825b0004924300088235000892230004821b00209203000083130000801800007c0803a64e80002138c3000081fb002481cf0004814e0018398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d0000813b00309123000c90c30008811b00189103000480fb000c90e30000830a0070833b0028801800007c0903a67f2803a63b7b00344e800420|@6941,1048575|788,3,@2758 6941:S37|50415253455f44454328292e70617273654465632833297479706542696e64696e67283629 6942:C2,576|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000c82d70024973bfffc971bfffc947bfffc949bfffc94bbfffc3860000183160000801800007c0803a64e80002182bb000c947bfffc388300003860000383150010801800007c0803a64e800021829b00108274000c825300043a230000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008212006c9203000481fb000491e30000963bfffc80120008941bfffc83120004801800007c0803a64e80002181db0018814e000c812a000c39030000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000080ee000890e300089103000480db000090c3000094fbfffc83090014801800007c0803a64e80002180bb001c8085000c8324002483040008947bfffc80190004941bfffc807b00088318000c801800007c0803a64e8000213ae30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092e3000882db000892c3000482bb000492a30000831b0000801800007c0803a64e800021829b00248274000c8253000c82330000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000821400089203000481f100a891e3000083120004801800007c0803a64e80002181db0024815b001c813b0028915b0028811b0018911b002480db000480bb0010809b0014807b0020830e00043b290000801800007c0903a67f2803a63b7b00244e800420|@6943,1048575| 6943:S41|50415253455f44454328292e7061727365446563283329646174617479706542696e64696e67283329 6944:C2,328|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7000c3aa30000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d0000829800089283000c3e6002a76273419092630008825b0000924300048238001c92230000973bfffc971bfffc96bbfffc949bfffc94bbfffc94dbfffc83160010801800007c0803a64e800021821b001081fb000880af0008808f0004806f000083100018801800007c0803a64e800021947bfffc81db0014814e0004812a001880090074941bfffc807b00203b1b001c3c0002b260009d2c7c0803a64e80002139030000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00009103000880fb000c90e3000480db000890c30000831b0000833b001c801800007c0903a67f2803a63b7b00284e800420|@6947,1048575|88,3,@2758 224,3,@6945 6945:C2,1108|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8fffc82d7000482b60008973bfffc971bfffc947bfffc8017000c941bfffc8077000883150004801800007c0803a64e800021829b00088274fffc82530004823200003a030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000081f1005c91e3000492030000831b0000801800007c0803a64e8000212803000141820034815b0008812afffc8109000480e80008947bfffc8069000883070000801800007c0803a64e80002139c300004800000c39c00001947bfffc81db0000280e00014182000c394000034800000c815b000c814afff8813b000c8109fffc80e8000480c70004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080a8001490a30004809b000890830000955bfffc800600b4941bfffc83060004801800007c0803a64e800021833b00148319fffc82f90008947bfffc82db000496dbfffc82bb000c96bbfffc80d8000880b70008809700048077000083180010801800007c0803a64e800021947bfffc947bfffc829b001c8274fffc8253000482320008947bfffc8013000c941bfffc8073000883110004801800007c0803a64e800021821b002481f0fffc81cf0004814e000039230000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000810a00589103000491230000831b0000801800007c0803a64e80002128030001418200f480fb002480c7fffc80a60004808500088066000883040000801800007c0803a64e800021807b00248323fffc8319000482f8002082d80004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082b6006892a30004829b00209283000080170000941bfffc83160004801800007c0803a64e800021827b00288253fffc3a230000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00008213ffe89203000881f2000891e3000492230000831b0000801800007c0803a64e80002139db000c815b0008914e0000393b000c906900044800003080fb002480c7fffc80a6000480850010387b0008833b0004932300003b1b000882e4000492f80004947bfffc398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213add0004919d000082bb000c92b60000829b001092960004827b00288253fffc823200048211000c81f1000081d10004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00008152000891430008812e009891230004810f00a49103000096dbfffc83100000801800007c0803a64e8000212803000141820018807b0028831b002c4bfffc0138e300004800000838e00001398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138dd0004919d000090e6000480bb000090a6000038660000809b00307c8803a63b7b00344e800020|@6946,1048575| 6946:S48|50415253455f44454328292e7061727365446563283329646174617479706542696e64283629636f6e73747273283129 6947:S38|50415253455f44454328292e7061727365446563283329646174617479706542696e64283629 6948:C2,1908|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d70008973bfffc971bfffc947bfffc949bfffc94bbfffc8078000883160000801800007c0803a64e80002182bb000c82950004827400243860000183130000801800007c0803a64e800021825b000c947bfffc388300003860000383120020801800007c0803a64e800021823b00108211000481f0000439c30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000814f006c91430004813b00049123000095dbfffc800f0008941bfffc830f0004801800007c0803a64e800021811b001880e8000480c7000c38a30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000808800089083000890a30004833b000093230000949bfffc83060014801800007c0803a64e800021831b001c82f8000482d7002482b70008947bfffc80160004941bfffc807b00088315000c801800007c0803a64e8000213a830000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092830008827b000892630004825b000492430000831b0000801800007c0803a64e800021823b00248211000481f0000c81d00000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008151000891430004812e00a891230000830f0004801800007c0803a64e800021811b002480e8000480c700088008001c941bfffc8068000883060004801800007c0803a64e80002180bb002880850004832400003b030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082f9001c92e3000493030000831b0000801800007c0803a64e800021280300014182017882bb00142c1500014082000c3ac000014800008c829b0028827400048253000880120014941bfffc80140008941bfffc807b00008312000c801800007c0803a64e8000213a230000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003e0002b26210a994920300089223000481fb000091e30000831b0004801800007c0803a64e8000213ac300003b7b000881db0028814e0004812a0008806e000883090000801800007c0803a64e800021811b002880e8000480c7000480a7000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00008088000890830008833b001c93230004830600089303000083050014801800007c0803a64e80002182fb002882d7000482b600183a830000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092830004827b00089263000083150068833b002c801800007c0903a67f2803a63b7b00304e80042082db002882b6000482950004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008274009092630004825b001c9243000080140004941bfffc831b0000801800007c0803a64e800021823b002c8211000481f0000439c30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000814f000c9143000491c30000831b0000801800007c0803a64e800021813b002c811b0024951bfffc947bfffc80db001480bb0020809b0024807b003083090018801800007c0803a64e80002180fb002c80c7000480a6000c80860000832600043b030000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000082e7000892e3000882d9009892c3000482a4000c92a30000971bfffc83050000801800007c0803a64e80002128030001418200c0827b00308253000482320004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000821100909203000481fb002491e3000083110004801800007c0803a64e80002181db0030398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021395d0004919d00003d2002b26129a9d0912a0000811b0028910a000c80fb002c90ea000880ce001490ca000438830000386a0000830e000c801800007c0803a64e8000213a830000480000083a800001827b0030825300048232000c8212000081f20004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000081d3000891c30008814f009891430004813000fc91230000969bfffc83110000801800007c0803a64e800021280300014182006880fb0034398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002138dd0004919d00003ca002b260a5aa6490a600008087001090860008807b002c90660004809b0028386600008307000c801800007c0803a64e80002139030000480000083900000180fb003480c7000480a60018398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021389d0004919d0000807b000090640004833b000493240000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000910300049083000083050064833b0038801800007c0903a67f2803a63b7b003c4e800420|@6954,1048575|776,3,@6949 1488,3,@6950 1708,3,@6952 6949:S52|4461746174797065207265706c69636174696f6e206d757374206e6f7420636f6e7461696e2074797065207661726961626c6573 6950:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002138a300008098000c8078000883180004801800007c0903a64e800420|@6951,1048575| 6951:S50|50415253455f44454328292e706172736544656328332964617461747970654465634f725265706c2833296462732d283129 6952:C2,80|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f800043ac0000196dbfffc3aa0000196bbfffc80d7000880b700048097000083180008801800007c0903a64e800420|@6953,1048575| 6953:S46|50415253455f44454328292e70617273654465632833297479706542696e64696e67283129283129283129283129 6954:S43|50415253455f44454328292e706172736544656328332964617461747970654465634f725265706c283329 6955:C2,260|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000c82d70024973bfffc971bfffc949bfffc3860000183160000801800007c0803a64e80002182bb0004398000053bbdffe87c1df04040a00010800d001c7c0803a64e8000213a9d0004919d00003e6002b26273ac5c927400008255000c92540010823500089234000c821500049214000881e3000491f40004398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002139dd0004919d00003d4002b2614aaeb4914e000081230008912e0008928e0004811b000080e3000090e8000091e800049128000891c8000c3860000180db00087cc803a63b7b000c4e800020|@6960,1048575|112,3,@6956 192,3,@6958 6956:C2,512|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8001082d7001482b70010706b00014182000c3a8000034800001081830000558c083c61940001568bf80140a20010800d00347c0803a64e8000212c140003408100a4706b00014182000c3a4000034800001081830000558c083c61920001564bf80140a20010800d00347c0803a64e8000212c12000341810020973bfffc3a0300003c6002a0606395e0800d00287c0803a64e800021706b00014182000c3a2300004800001089830005558c083c619100013a19000039f8000039c300003880004f387100003f00000063184368801800007c0803a64e8000213a630000480000143a60000139c3000039f800003a190000961bfffc95fbfffc95dbfffc80160004941bfffc80150008941bfffc967bfffc808f000c386e0000830f0008801800007c0803a64e8000213a630000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00009263000c3a40000392430008823b000092230004821b000492030000831b0008801800007c0803a64e80002181fb001039c30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000091c30004815b000c9143000095dbfffc830f0004801800007c0803a64e800021807b0000813b00187d2803a63b7b001c4e800020|@6957,1048575|164,3,@51 232,3,I24 6957:S50|50415253455f44454328292e70617273654465632833296d616b6554797065566172456e762832296c6f6f6b757054283129 6958:C2,124|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc947bfffc83180008801800007c0803a64e800021706b00014082001880630000833b00087f2803a63b7b000c4e800020833b0004807b000083190004833b0008801800007c0903a67f2803a63b7b000c4e800420|@6959,1048575| 6959:S43|50415253455f44454328292e70617273654465632833296d616b6554797065566172456e76283229283129 6960:S40|50415253455f44454328292e70617273654465632833296d616b6554797065566172456e76283229 6961:C2,7328|7f2802a66339000239600060800d00187d6bd8107c0b004040a00010800d00247c0803a64e800021398000063bbdffe47c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002b262d6cc6c92d7000082d8000892d7001482b8006892b700109317000c829800049297000890b70004398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a7d0004919d00003e4002b26252cf60925300009293000890b30004398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a5d0004919d00003e2002b26231d1849232000090b20008929200043980000d3bbdffc87c1df04040a00010800d001c7c0803a64e8000213a3d0004919d00003e0002b26210e0f49211000092710030821800649211002c92d1002881f8005c91f1002490b1002081d8005491d1001c81580048915100188138004491310014811800409111001080f8006090f1000c9251000892910004398000143bbdffac7c1df04040a00010800d001c7c0803a64e8000213a9d0004919d00003ea002b362b5000092b400009234004c91f4004892f4004482b8005892b4004091d4003c82d8005092d4003880f8004c90f40034915400309134002c911400288118003c91140024925400209274001c827800389274001882580034925400148138003091340010815800089154000c90b4000881580004915400042804000141820008480000ac808a000481ca0008973bfffc971bfffc947bfffc94bbfffc94dbfffc80030000941bfffc96fbfffc963bfffc969bfffc80040000941bfffc38650000830e0004801800007c0803a64e800021815b0020812a00048109000438e30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080c800b090c3000490e30000831b0000801800007c0803a64e8000212803000140820034480017a4973bfffc971bfffc947bfffc94bbfffc94dbfffc80030000941bfffc96fbfffc963bfffc969bfffc947bfffc813b00208109000480e80008807b001883070004801800007c0803a64e80002180db002080a60004808500003b230000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000830400789303000493230000973bfffc83060008801800007c0803a64e800021280300014182028082fb002482d7000482b60008807b001c83150000801800007c0803a64e800021947bfffc947bfffc947bfffc947bfffc829b0034389b00003860000183140010801800007c0803a64e800021947bfffc947bfffc947bfffc947bfffc827b0044389b00003860000183130010801800007c0803a64e800021825b0040398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a3d0004919d00003e0002b3621035749211000081fb000891f1000881db001c91d10004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021395d0004919d0000922a000881320004912a000481120000910a0000398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002138fd0004919d000091e7000880db000490c7000480bb000090a70000809b0044955bfffc8064000c388700003b230000386000033b190000801800007c0803a64e800021831b004882f8000482d70004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082b6000c92a30004829b003c9283000083160004801800007c0803a64e8000213b1b004c3c0002b36000363c7c0803a64e800021827b00488253000482320018398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a1d0004919d000081fb000c91f0000481db000491d00000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021395d0004919d0000813b001c912a0004811b0014910a000038e30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000914300089203000490e3000083110028833b004c801800007c0903a67f2803a63b7b00504e80042082fb002482d7000482b60000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008295003492830004827b00009263000083170008801800007c0803a64e8000212803000141820290825b00248232000482110008807b001c83100000801800007c0803a64e800021947bfffc947bfffc947bfffc947bfffc81fb0034389b000038600001830f0010801800007c0803a64e800021947bfffc947bfffc947bfffc947bfffc81db0044389b000038600001830e0010801800007c0803a64e800021815b0040398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021393d0004919d00003d0002b361083ab89109000080fb000890e9000880db001c90c90004398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002138bd0004919d000091250008808a000490850004806a000090650000398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090f90008831b00049319000482fb000092f9000082db004494bbfffc38990000386000038316000c801800007c0803a64e80002182bb0048398000073bbdffe07c1df04040a00010800d001c7c0803a64e8000213a9d0004919d00003e6002b362733b5092740000825b0030925400188235000892340014821b00009214001081fb002c91f4000c81db004091d400088155000491540004809b003c3874000083150014801800007c0803a64e800021813b00488109000480e80018398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138dd0004919d000080bb000c90a60004809b000490860000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d0000831b001c9319000482fb001492f900003ac30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00009323000890c3000492c300008307002c833b004c801800007c0903a67f2803a63b7b00504e800420825b00248232000482110000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000081f0007491e3000481db000091c3000083120008801800007c0803a64e80002128030001418200b0815b0024812a000481090008807b001c83080000801800007c0803a64e80002180fb002480c7000480a60018398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021389d0004919d00003c6002b36063408c906400008327001893240008831b00209304000480050060941bfffc3ae40000809b001c3877000083070014801800007c0803a64e800021831b0000833b002c801800007c0903a67f2803a63b7b00304e800420815b0024812a000481090000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080e8001c90e3000480db000090c30000830a0008801800007c0803a64e800021280300014182003c80bb00248085001c80bb001838640000809b00203b230000386000013b190000833b0028801800007c0903a67f2803a63b7b002c4e80042080bb0024808500048064000083230008398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000093230004831b00009303000083050008801800007c0803a64e800021280300014182037882fb002482d7000482b60008807b001c83150000801800007c0803a64e800021829b00248274000482530004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008234002492230004821b00189203000083120004801800007c0803a64e80002181fb0024398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002139dd0004919d00003d4002b3614a40f8914e0000813b0020912e0008810f0020910e000438830000386e0000830f0014801800007c0803a64e80002180fb002480c7000480a6000c80860000832600043b030000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000082fb001c92e3000882d9009892c3000482a400fc92a30000971bfffc83050000801800007c0803a64e80002128030001418200b8827b00288253000482320004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000821100449203000481fb001c91e3000083110004801800007c0803a64e80002181db0028398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021395d0004919d00003d2002b36129417c912a0000810e0018910a000880fb002490ea000438830000386a0000830e0014801800007c0803a64e8000213a830000480000083a800001827b0028825300048232000c82120000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000081fb002091e3000481d0007c91c30000969bfffc83110004801800007c0803a64e800021815b002c812a000481090004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080e8002090e3000480db002090c3000083080004801800007c0803a64e80002138830000807b0028831b0018801800007c0803a64e80002180bb002c808500048324000c830400003ae30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082db002492c3000482b8002892a3000096fbfffc83190004801800007c0803a64e800021829b00308274000482530018398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000823b000092230008821b00049203000481fb000891e300008312006c833b0034801800007c0903a67f2803a63b7b00384e80042082fb002482d7000482b60000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008295002c92830004827b00009263000083170008801800007c0803a64e80002128030001418200b8825b00248232000482110008807b001c83100000801800007c0803a64e80002181fb0024398000053bbdffe87c1df04040a00010800d001c7c0803a64e80002139dd0004919d00003d4002b3614a41e8914e0000812f0028912e0010810f0004910e000c80fb001c90ee000880db002090ce000480a80018800500a4941bfffc809b001c386e0000830f0014801800007c0803a64e800021831b0000833b002c801800007c0903a67f2803a63b7b00304e800420825b00248232000482110000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000081f0005091e3000481db000091c3000083120008801800007c0803a64e800021280300014182039c815b0024812a000481090008807b001c83080000801800007c0803a64e800021947bfffc947bfffc947bfffc80fb002c80db003080a600048085002480070004941bfffc80070008941bfffc3860000183040000801800007c0803a64e800021833b00388319000482f8002880030004941bfffc8063000883170000801800007c0803a64e8000213ac30000807b00083b160000801800007c0803a64e8000213abb000c829b0000929500003a7b000c907300043a5b000c823b000492320008398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a1d0004919d000081fb000c91f0000081db001091d00004815b001491500008813b003c8109000480e80004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080c9002c90c3000480bb003090a30000961bfffc83070004801800007c0803a64e80002138830000807b0000831b002c801800007c0803a64e800021809b0040832400048319000c82f900003ac30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082bb003892a30004829700409283000096dbfffc83180004801800007c0803a64e800021947bfffc947bfffc947bfffc398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a7d0004919d00003e4002b3625246cc92530000823b002092330008821b00409213000439fb0000926f000039db0000815b0024914e0004393b0000811b002891090008398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002138fd0004919d000080db000090c7000080bb000490a70004809b000890870008807b00508323000483190004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082f8002092e3000482db004492c3000094fbfffc83180004801800007c0803a64e80002138830000807b0000831b0040801800007c0803a64e80002182bb0054829500048274000c825400003a230000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000821b004c9203000481f2002891e30000963bfffc83130004801800007c0803a64e80002181db0058814e0004812a0018398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000390000039103000880fb000090e3000480db001490c300008309005c833b005c801800007c0903a67f2803a63b7b00604e800420815b0024812a000481090000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080e8004490e3000480db000090c30000830a0008801800007c0803a64e8000212803000141820008480000b880bb0024808500048064000083230048398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000093230004831b00009303000083050008801800007c0803a64e80002128030001418200084800005c82fb002482d7000482b60000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008295005492830004827b00009263000083170008801800007c0803a64e800021280300014182046880bb0024808500048064000883230000807b001c3b190000801800007c0803a64e800021831b002482f8000482d70000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082b6005492a30004829b00009283000083180008801800007c0803a64e800021280300014182001c825b0024823200048211001081f00014826f0004480002ec827b0024825300048232000880130008941bfffc807b002083110004801800007c0803a64e800021821b002881f0000481cf000039430000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000812e00bc9123000491430000831b0000801800007c0803a64e80002128030001418201a880fb002880c7000480a60008807b002083050008801800007c0803a64e8000213c8002b3608447743c0002b3600054307c0803a64e800021706b00014082000c80830000480000183c6002b2606367ac800d00287c0803a64e800021548bf80140a20010800d00347c0803a64e8000212c0400014080000848000024548bf80140a20010800d00347c0803a64e8000212c04001341810008480000d8807b00288323000483190008949bfffc80180014941bfffc807b00288318000c801800007c0803a64e80002182fb003082d7000482b60008947bfffc807b002c83150008801800007c0803a64e800021388300003c6002b3606356583c0002a1600074a87c0803a64e8000213c8002b36084566c3c0002a1600074a87c0803a64e8000213a830000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092830008827b000092630004825b002c92430000831b0004801800007c0803a64e80002148000010949bfffc947bfffc947bfffc807b00348323000483190008807b002c83180000801800007c0803a64e800021811b00084800001439000001947bfffc947bfffc947bfffc80fb003480c7000480a60000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008085004490830004833b001093230000951bfffc83070008801800007c0803a64e8000212803000141820030831b003882f8000482d7001082b6000c807b000083150004801800007c0803a64e8000213a6300004800002c831b003882f8000482d7001082b60010807b000083150004801800007c0803a64e8000213a6300003b7b0014829b0024825400048232000c82120004398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d000081fb001c91e3000c3dc002b361ce569c91c30008815b0018914300048130009c91230000967bfffc83110010801800007c0803a64e800021811b002880e8000480c700188006009c941bfffc386000013b1b00303c0002b3600056ac7c0803a64e80002138a30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000809b00049083000490a30000831b0000833b0030801800007c0903a67f2803a63b7b00344e800420825b0024823200048211000c81f1000081d10004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000815b001c91430008812e009891230004810f00609103000083100000801800007c0803a64e800021280300014182014480fb002480c7000480a600048086000880050000941bfffc807b002083040004801800007c0803a64e800021833b00288319000482f800043ac30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082b7009c92a3000492c30000831b0000801800007c0803a64e800021280300014182004c829b0028827400048253001880120030941bfffc386000013b1b00303c0002b3600059387c0803a64e800021831b0000833b0030801800007c0903a67f2803a63b7b00344e800420829b0028827400048253000c82330000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000821b00209203000481f1000491e3000083120008801800007c0803a64e80002181db0028814e0004812a0018806900b0811b002c7d0803a63b7b00304e80002080fb002480c7000480a60018806500b0809b00287c8803a63b7b002c4e800020947bfffc947bfffc947bfffc947bfffc80bb0030389b00003860000183050010801800007c0803a64e800021947bfffc947bfffc947bfffc947bfffc809b004080640010389b00003b230000386000013b190000801800007c0803a64e800021831b003c398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213afd0004919d000082db001c92d7000882b8000492b700048298000092970000827b0040825300048232000896fbfffc807b003c8311000c801800007c0803a64e800021947bfffc809b003c807b0004831b002c801800007c0803a64e800021821b004881f0000481cf0018947bfffc800e0028941bfffc800e0038941bfffc3c6002ab6063c2c4830e0004801800007c0803a64e80002139430000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000813b000c91230008811b00089103000491430000831b0000801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138fd0004919d000038c0000190c7000490670000398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138bd0004919d0000809b001c90850004807b001490650000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d0000831b002c9319000482fb002492f90000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00009323000890a3000490e30000831b0004833b0058801800007c0903a67f2803a63b7b005c4e800420|@7058,1048575|76,3,@6962 156,3,@6964 212,3,@6966 268,3,@6975 392,3,@6992 1024,3,@7018 1288,3,@7020 1748,3,@7022 1960,3,@7023 2408,3,@7027 2884,3,@7028 3168,3,@7030 3776,3,@7031 4472,3,@7033 5472,3,@7035 5480,3,@7048 5512,3,@6889 5680,3,@7052 5688,3,@511 5704,3,@7053 5712,3,@511 6116,3,@7054 6192,3,@7055 6552,3,@7057 7000,3,@4839 6962:C2,676|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000882d70008973bfffc971bfffc947bfffc949bfffc80180014941bfffc8078000483160004801800007c0803a64e80002182bb000c82950008827400003a430000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008233009c9223000492430000831b0000801800007c0803a64e8000212803000141820040821b000c81f0000881cf000880700004830e0000801800007c0803a64e800021809b0004807b0008831b000c833b00107f2803a63b7b00144bffff24821b000c81f0000881cf0004814f0008800e0000941bfffc80700004830a0004801800007c0803a64e800021813b00108109000880e8000438c30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080a700b090a3000490c30000831b0000801800007c0803a64e8000212803000141820128809b00108064000883230008806400048319000c801800007c0803a64e800021831b001082f8000882d700043aa30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008298001092830004827b00089263000096bbfffc83160004801800007c0803a64e800021825b001438c3000080b2000438800003807b00108312000c801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a3d0004919d0000821b00009211000490710000963bfffc809b0010807b0014831b00184bfffdb9398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002139fd0004919d0000906f000481db000091cf0000386f0000815b001c7d4803a63b7b00204e80002038600001809b00147c8803a63b7b00184e800020|@6963,1048575| 6963:S43|50415253455f44454328292e706172736544656328332964656328342964656353657175656e6365283229 6964:C2,468|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000882d7000c82b70000829700043a630000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000825800049243000882340098922300048215009892030000973bfffc971bfffc967bfffc949bfffc94bbfffc80130008941bfffc83160000801800007c0803a64e800021280300014182012081fb001081cf0008814e0018812e0020810e0004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080e8005890e3000480db000890c30000800a004c941bfffc80090000941bfffc83080004801800007c0803a64e80002180bb001838830000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000833b000893230008830500049303000490830000831b0000801800007c0803a64e8000213ae30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092e3000482db000c92c30000831b0004801800007c0803a64e80002138a30000809b0010807b0014831b0018833b001c7f2803a63b7b00204bfffe4c807b000481fb00147de803a63b7b00184e800020|@6965,1048575| 6965:S42|50415253455f44454328292e7061727365446563283329646563283429636f6e73747261696e74283329 6966:C2,304|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d70004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082bb000892a300048296003892830000973bfffc971bfffc949bfffc94dbfffc83160004801800007c0803a64e800021947bfffc947bfffc947bfffc947bfffc947bfffc947bfffc389b0000386000013b1b00243c0002b26000d2d07c0803a64e800021827b0010566bf80140a20010800d00347c0803a64e8000212c13000140800018807b0008825b00247e4803a63b7b00344e800020825b0008965bfffc823b0010963bfffc967bfffc80db001080bb000c388000013860005d3b1b00303c0002b26000dac47c0803a64e80002180630008821b00247e0803a63b7b00344e800020|@6974,1048575|160,3,@6967 268,3,@6971 6967:C2,1008|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8fffc82d7000482b60004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082980008928300048278000492630000973bfffc971bfffc949bfffc83150004801800007c0803a64e800021825b00048232fffc8211000481f0000439c30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008152fff091430004813200049123000095dbfffc8012fff4941bfffc830f0004801800007c0803a64e800021831b0000801800007c0803a64e800021809b0004831b000c3c0002b26000d6dc7c0803a64e800021811b000c80e8fffc80c7000480a6000480860008947bfffc80050000941bfffc8067000883040004801800007c0803a64e800021833b00143b030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082f9000892e3000493030000831b0000801800007c0803a64e800021280300014182006882bb00148295fffc827400048253000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00008234000892230008821500049203000481f5000891e3000083120014801800007c0803a64e8000213ac300004800000c3ec0000062d646683c80000060844668387600003f00000063184368801800007c0803a64e8000212803000141820020829b00148274fffc82530004823200108211001482b000044800004482bb001496dbfffc387600008315fff8801800007c0803a64e800021706b00014082000c82a300004800001c3c6002b2606367ac800d00287c0803a64e80002196dbfffc81fb001881cffffc814e0004812a00108109000c96bbfffc3875000083080000801800007c0803a64e800021280300014182003480db001c80a6fffc80850004806400108323000c807b000083190008801800007c0803a64e80002138e300004800006c80fb001c80c7fffc80a60004808500108064001083230000807b00003b190000801800007c0803a64e8000212803000141820034831b001c82f8fffc82d7000482b6001082950010807b000083140008801800007c0803a64e80002138e300004800000838e0ffff831b001c82f8fffc82d7000482b600108295001094fbfffc807b000483140000801800007c0803a64e8000212803000141820034825b00208232fffc8211000481f0001081cf0010807b0004830e0008801800007c0803a64e8000213a600003480000083a600001825b001c823b00049232000092720004821b00109212000881fb000891f2000c81db000091d2001038600001815b00247d4803a63b7b00284e800020|@6970,1048575|248,3,@6968 496,3,I48 504,3,I48 516,3,I24 616,3,@6889 6968:C2,836|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8fffc82d7000482b6000482960008973bfffc971bfffc947bfffc949bfffc80150000941bfffc8077000883140004801800007c0803a64e800021827b000c3a430000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008233000c9223000492430000831b0000801800007c0803a64e8000212803000141820288821b000c81f0fffc81cf0004814e0004812e0008800a0000941bfffc806f000883090004801800007c0803a64e800021811b001038e30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080c8000890c3000490e30000831b0000801800007c0803a64e800021280300014182011080bb00108085fffc80640004832300088005fff8941bfffc8064000883190008801800007c0803a64e800021831b0000801800007c0803a64e800021706b0001408200c4831b001482f8fffc82d7000482b600108295000c80030000941bfffc807b000083140000801800007c0803a64e8000212803000141820030827b00188253fffc823200048211001081f0000c807b0000830f0008801800007c0803a64e80002148000074827b00188253fffc823200048211001081f00010807b0000830f0000801800007c0803a64e800021280300014182005881db0018814efffc812a00048109001080e80010807b000083070008801800007c0803a64e80002148000018947bfffc48000024947bfffc947bfffc48000018807b001481db001c7dc803a63b7b00204e80002080bb00188085fffc8064000483230004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008305000c9303000482fb001092e300008005fff4941bfffc83190004801800007c0803a64e800021831b0000801800007c0803a64e80002182db001c82b6fffc82950004827400183a430000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092430004823b0018922300008313001c801800007c0803a64e800021809b0014831b001c833b00207f2803a63b7b00244bfffcdc807b0008821b00107e0803a63b7b00144e800020|@6969,1048575| 6969:S61|50415253455f44454328292e70617273654465632833296465632834297061727365496e66697828372970617273654170706c69636174696f6e283229 6970:S56|50415253455f44454328292e70617273654465632833296465632834297061727365496e666978283729726561644e6578744f7073283229 6971:C2,1364|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc947bfffc947bfffc947bfffc947bfffc973bfffc971bfffc947bfffc949bfffc94dbfffc389b0014386000013c0002b26000d2d07c0803a64e800021398000053bbdffe87c1df04040a00010800d001c7c0803a64e8000213b3d0004919d0000831b00149319000082fb001892f9000482db001c92d9000882bb002092b9000c829b002492990010827b000c8253fffc823200048211002c973bfffc8070000083100004801800007c0803a64e80002181fb001081cffffc814e0004812a0008947bfffc806e00088309001c801800007c0803a64e800021831b0000801800007c0803a64e800021280300014182000c39000001480000d8811b002c80fb00307d0b3b78556bf80140a20010800d00347c0803a64e8000217c083800408200a080db000880bb00207c06284041820090809b00148064fffc832300048319000880180014941bfffc80030008941bfffc807b00008318000c801800007c0803a64e8000213ae30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003ec002b262d6e03492c3000892e3000482bb000092a30000831b0004801800007c0803a64e800021390300004800001039000001947bfffc947bfffc3b7b000880db002c80bb00307ccb2838556bf80140a20010800d00347c0803a64e8000217c06280040810008480000d0809b0008280400014182013c807b00148323fffc8319000482f8002c8077000083170004801800007c0803a64e80002182db001482b6fffc8295000482740008947bfffc807500088313001c801800007c0803a64e800021831b0000801800007c0803a64e800021280300014182002c809b0038807b002c3f00000063184368801800007c0803a64e800021280300014082004048000030825b0030823b00347e4b8b78556bf80140a20010800d00347c0803a64e8000217c12880040820008480000103b7b00044800007c947bfffc807b0034398000025460f80140a20010800d00347c0803a64e8000217f23661541a3fff0831b000c281800014182000c82fb0038480000083ae0005d82db002896dbfffc82bb003096bbfffc829b0038969bfffc80db003080bb002c3899000038770000831b00244bfffcad388300004800000c809b0004947bfffc825b00188232fffc8211000481f00018949bfffc807b003c830f0004801800007c0803a64e80002181db001c814efffc812a00048109001880fb0000398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138dd0004919d000038a0000190a6000480870008908600003b230000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000090c30004831b004093030000973bfffc8008001c941bfffc83080024801800007c0803a64e8000213ae30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092e3000482db000492c30000831b0000801800007c0803a64e80002182bb0008398000053bbdffe87c1df04040a00010800d001c7c0803a64e8000213a9d0004919d000082750010927400108255000c9254000c907400088235000492340004821500009214000081fb001c7e6b7838556bf80140a20010800d00347c0803a64e8000217c137800418000084800003039c30000809b0020387200003f00000063184368801800007c0803a64e800021280300014082000c4800003839c3000091db0048925b0044927b004038d1000038b00000388f0000807b0020831b0024833b00287f2803a63b7b00404bfffacc38740000815b00287d4803a63b7b004c4e800020|@6973,1048575|80,3,@6967 432,3,@6972 660,3,I24 1260,3,I24 6972:S66|4d6978656420726967687420616e64206c656674206173736f63696174697665206f70657261746f7273206f66207468652073616d6520707265636564656e63652e 6973:S54|50415253455f44454328292e70617273654465632833296465632834297061727365496e6669782837296e6578744c6576656c283729 6974:S42|50415253455f44454328292e70617273654465632833296465632834297061727365496e666978283729 6975:C2,664|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021398000063bbdffe47c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002b262d6e3a892d7000082d8003092d7001482b8000492b700109097000c90770008931700043980000e3bbdffc47c1df04040a00010800d001c7c0803a64e8000213a9d0004919d00003e6002b26273e694927400008278002c927400348258002892540030823800249234002c821800209214002881f8001c91f4002492f4002081d8001891d4001c81580014915400188138001091340014907400109314000c9094000892b400048115000c80f5000438c30000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00009083000c3ec002b262d6ff6892c3000890a3000482c700a492c30000973bfffc971bfffc94dbfffc949bfffc94bbfffc96fbfffc969bfffc83080010801800007c0803a64e80002182bb00148295000482740004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008255000c92430004823b00089223000083130004801800007c0803a64e800021821b001481f0000481cf0004815b0010812e00a4953bfffc810e00b4951bfffc947bfffc80db000c80aa0008808a0004806a000083100008801800007c0803a64e80002138830000807b0008831b0004801800007c0803a64e80002180fb001480c7000480a6000c808600043b230000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d0000831b000c9303000c3ee002b262f7ffb892e3000882c4009892c3000482bb000892a30000973bfffc83050010801800007c0803a64e800021807b0000829b001c7e8803a63b7b00204e800020|@6991,1048575|68,3,@6976 144,3,@6979 292,3,@6988 596,3,@6990 6976:C2,608|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8001082d70018973bfffc971bfffc947bfffc949bfffc3864000083160000801800007c0803a64e80002182bb000882950010827400043a430000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008233001492230004821b000492030000965bfffc83130004801800007c0803a64e80002181fb000c80bb000438830000806f0008830f0014801800007c0803a64e80002181db000c814e0010812a000c810a000080ea000438c30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000080ae000c90a300088087009890830004832800149323000094dbfffc83090000801800007c0803a64e800021280300014182011c831b0004281800014082008882fb001082d7001082b6000880150014941bfffc8017000c941bfffc807b00008315000c801800007c0803a64e8000213a830000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003e6002b26273e6249263000892830004825b000092430000831b0004801800007c0803a64e8000214800000c947bfffc947bfffc82fb001882d7001082b6001880150050941bfffc80bb00188097000c8077000883170004801800007c0803a64e8000213a830000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092830004827b000c92630000831b0000833b0020801800007c0903a67f2803a63b7b00244e800420807b0000831b00147f0803a63b7b00184e800020|@6978,1048575|408,3,@6977 6977:S32|4578706563746564206964206f722069643a7479206265666f72652060617327 6978:S61|50415253455f44454328292e70617273654465632833296465632834297061747465726e283329636f6e73747261696e744f724c617965726564283229 6979:C2,3672|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d70008973bfffc971bfffc947bfffc8078000883160004801800007c0803a64e80002182bb000482950004827400003a430000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000823300ac9223000492430000965bfffc83150030801800007c0803a64e8000212803000141820044821b000881f0000481cf000880700008830e0000801800007c0803a64e800021815b0008812a000481090018806800ac80fb000c7ce803a63b7b00104e800020821b000881f0000481cf0000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000814e008c91430004813b00009123000083100030801800007c0803a64e8000212803000141820150811b000880e8000480c700088068000883060000801800007c0803a64e80002180bb0008808500048064000880050018941bfffc83230004806500083b190000801800007c0803a64e800021831b000c82f8000482d700003aa30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000829600909283000492a30000831b0000801800007c0803a64e8000212803000141820024386000013b1b00103c0002b26000f5087c0803a64e8000213a630000480000083a600001825b000c823200048211000c81f10000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000081d2000891c30004814f009091430000967bfffc83100004801800007c0803a64e800021813b00108109000480e80018807b000083070048833b0014801800007c0903a67f2803a63b7b00184e800420811b000880e8000480c70000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080a6008490a30004809b00009083000083080030801800007c0803a64e800021280300014182028c807b000883230004831900088063000883180000801800007c0803a64e80002182fb000882d7000482b6000880170018941bfffc8077000883150004801800007c0803a64e800021829b000c82740004825300003a230000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000821200889203000492230000831b0000801800007c0803a64e800021280300014182016881db000c814e0004812a0004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000810e001c9103000480fb000890e3000083090004801800007c0803a64e80002180db000c38a3000080860008806600108306000c801800007c0803a64e80002180bb000c808500048324000c8304000082e400043ac30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000082a5000892a300088297009892830004827800949263000096dbfffc83190000801800007c0803a64e800021280300014182007c825b0010823200048211001880100024941bfffc386000013b1b00183c0002b26000f6d87c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002139fd0004919d0000906f000481db000491cf0000386f0000831b0000801800007c0803a64e80002139e300004800002881fb0000947bfffc4800001c81fb000c81cf0004814e001881ea00a8947bfffc947bfffc813b00148109000480e8000c80c80000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080a9000890a30004808600889083000095fbfffc83070004801800007c0803a64e800021807b0000833b001c7f2803a63b7b00204e800020807b0008832300048319000880030030941bfffc8063000883180004801800007c0803a64e80002182fb000c82d7000482b600003a830000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000827500d09263000492830000831b0000801800007c0803a64e8000212803000141820180825b000c82320004821100088072000883100000801800007c0803a64e80002181fb000c81cf0004814e000c812e0000810e0004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000080ef000890e3000880c8009890c3000480a900d490a30000830a0000801800007c0803a64e8000212803000141820024809b000c8064000483230018807900a8831b00107f0803a63b7b00144e800020947bfffc947bfffc389b0000386000013b1b00183c0002b26000f8a87c0803a64e800021809b0014806400048323000c83030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082e4000892e3000482d800d492c3000083190004801800007c0803a64e80002182bb00148295000482740018398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000825b000092430004823b0004922300008313007c833b0018801800007c0903a67f2803a63b7b001c4e800420825b000c8232000482110000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000081f000b891e3000481db000491c3000083120030801800007c0803a64e8000212803000141820074815b000c812a00048109001880e9000880080008941bfffc806a002883070008801800007c0803a64e80002180db001080a6000480850008947bfffc8066002883040000801800007c0803a64e800021807b0000831b0004833b0018801800007c0903a67f2803a63b7b001c4e800420815b000c812a000481090000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080e800bc90e3000480db000490c30000830a0030801800007c0803a64e800021280300014182007480bb000c8085000480640018832400088003000c941bfffc8065002883190008801800007c0803a64e800021831b001082f8000482d70008947bfffc8078002883160000801800007c0803a64e800021807b0000831b0004833b0018801800007c0903a67f2803a63b7b001c4e80042080bb000c8085000480640000832300b4398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000093230004831b00049303000083050030801800007c0803a64e800021280300014182015882fb000c82d7000482b6002c8075000083150004801800007c0803a64e800021829b000c8274000482530008947bfffc807400088312001c801800007c0803a64e800021831b0000801800007c0803a64e800021280300014182000848000088823b00108211000481f00008800f0014941bfffc80110008941bfffc807b0000830f000c801800007c0803a64e80002139c30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003d4002b2614aff389143000891c30004813b000091230000831b0004801800007c0803a64e8000213b7b0008811b001080e8000480c7001880a7000880060010941bfffc8068002883050008801800007c0803a64e800021809b00148324000483190008947bfffc8064002883180000801800007c0803a64e800021807b0000831b0004833b001c801800007c0903a67f2803a63b7b00204e80042082fb000c82d7000482b60000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000829500c092830004827b00049263000083170030801800007c0803a64e8000212803000141820074825b000c823200048211001881f1000880100014941bfffc80720028830f0008801800007c0803a64e80002181db0010814e0004812a0008947bfffc806e002883090000801800007c0803a64e800021807b0000831b0004833b0018801800007c0903a67f2803a63b7b001c4e800420825b000c8232000482110000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000081f000c491e3000481db000491c3000083120030801800007c0803a64e8000212803000141820074815b000c812a00048109001880e9000880080018941bfffc806a002883070008801800007c0803a64e80002180db001080a6000480850008947bfffc8066002883040000801800007c0803a64e800021807b0000831b0004833b0018801800007c0903a67f2803a63b7b001c4e800420815b000c812a00048109000480e9000880080000941bfffc806a000883070004801800007c0803a64e80002180db001038a30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000808600349083000490a30000831b0000801800007c0803a64e8000212803000141820128807b0010832300048319000880030030941bfffc8063000883180004801800007c0803a64e80002182fb001482d7000482b600003a830000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008275005c9263000492830000831b0000801800007c0803a64e8000212803000141820030823b00148211000481f00008947bfffc80710008830f0000801800007c0803a64e8000213a4300004800000c3a400001947bfffc825b0018823200048211001881f1000481d2001080100004941bfffc815b0018955bfffc812f00b4953bfffc811b000c951bfffc80d2000880ae0008808e0004806e00008312002c801800007c0803a64e800021831b0000833b0020801800007c0903a67f2803a63b7b00244e800420807b0010832300048319000c82f9000482c30008398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d000092c3000c3ea002b262b5ff6892a30008829b000c92830004827700989263000083180010801800007c0803a64e800021825b00108232000482110018807000b081fb00147de803a63b7b00184e800020|@6989,1048575|488,3,@6980 1148,3,@6982 1700,3,@6984 2564,3,@6987 3596,3,@6988 6980:C2,360|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8fffc82d7000482b60004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082970014928300048278fff892630000973bfffc971bfffc83150004801800007c0803a64e800021825b00008232fffc38a3000080910008807100108311000c801800007c0803a64e800021821b000081f0fffc81cf0004814e000c812e0000810e000438e30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000080cf000890c3000880a8009890a30004808900949083000094fbfffc830a0000801800007c0803a64e800021280300014182001438600001831b00044bfffee94800000838600001398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b0000931900003879000082fb00087ee803a63b7b000c4e800020|@6981,1048575| 6981:S68|50415253455f44454328292e70617273654465632833296465632834297061747465726e28332961746f6d69635061747465726e283129702d766172734c697374283129 6982:C2,360|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8fffc82d7000482b60004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008297001c928300048278fff892630000973bfffc971bfffc83150004801800007c0803a64e800021825b00008232fffc38a3000080910008807100108311000c801800007c0803a64e800021821b000081f0fffc81cf0004814e000c812e0000810e000438e30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000080cf000890c3000880a8009890a30004808900949083000094fbfffc830a0000801800007c0803a64e800021280300014182001438600001831b00044bfffee94800000838600001398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b0000931900003879000082fb00087ee803a63b7b000c4e800020|@6983,1048575| 6983:S66|50415253455f44454328292e70617273654465632833296465632834297061747465726e28332961746f6d69635061747465726e283129702d7475706c6573283129 6984:C2,1532|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8fffc82d7000482b6000c8296000082760004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000082570008924300088233009892230004821400d892030000973bfffc971bfffc949bfffc83150000801800007c0803a64e800021280300014182002c81fb000039c0000191cf000039400001914f000438600001813b00087d2803a63b7b000c4e80002081fb000481cffffc814e0004812a0004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000810e00249103000480effff890e3000083090004801800007c0803a64e80002180db000480a6fffc808500048324000c830400043ae30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082d8006c92c3000492e3000096fbfffc80190018941bfffc83180004801800007c0803a64e80002182bb000c8295fffc3a630000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000825400089243000492630000831b0000801800007c0803a64e800021823b000c8211fffc81f0000481cf000c814f0000812f000439030000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000080f0000890e3000880c9009890c3000480aa00a890a30000951bfffc830e0000801800007c0803a64e8000212803000141820030807b00108323fffc80bb000880990008807900108319000c801800007c0803a64e8000213883000048000238809b0000708b00014182000c386000034800001081840000558c083c61830001546bf80140a20010800d00347c0803a64e8000212c030001408101a8708b00014182000c3b2000034800001081840000558c083c61990001572bf80140a20010800d00347c0803a64e8000212c190001418100183c6002a0606395e0800d00287c0803a64e800021708b00014182000c3b0400004800001089840004558c083c6198000138800063387800003f000000631843e8801800007c0803a64e800021280300014182011c831b0000730b00014182000c3ae000034800001081980000558c083c6197000156ebf80140a20010800d00347c0803a64e8000212c170001418100183c6002a0606395e0800d00287c0803a64e800021730b00014182000c3ad800004800001089980004558c083c6196000138800073387600003f00000063184408801800007c0803a64e800021280300014182008c82db001082b6fffc829500048274000880130014941bfffc80150008941bfffc807b00008313000c801800007c0803a64e8000213a430000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003e2002b26231fec09223000892430004821b000092030000831b0004801800007c0803a64e8000214800000c947bfffc947bfffc833b00188319fffc82f8000482d70018807b000883160004801800007c0803a64e80002182bb00188295fffc38830000807b001083140020801800007c0803a64e800021388300003b7b0008398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a7d0004919d000090930004825b000092530000823b00108211fffc81f0000481cf000c814f0000812f0004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000811000089103000880e900b490e3000480ca009490c30000967bfffc830e0000801800007c0803a64e8000212803000141820074947bfffc947bfffc389b000038600001831b001c4bfffab9398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138bd0004919d0000809b000490850004807b000890650000833b0018831b00009319000090b900043860000182fb00207ee803a63b7b00244e800020398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138bd0004919d00003880000190850004807b000090650000833b00103b0000039319000090b900043860000182fb00187ee803a63b7b001c4e800020|@6986,1048575|724,3,@51 780,3,I28 868,3,@51 924,3,I29 1044,3,@6985 6985:S35|203d20706174206578706563746564206166746572206e756d65726963206c6162656c 6986:S67|50415253455f44454328292e70617273654465632833296465632834297061747465726e28332961746f6d69635061747465726e2831296765744c6162656c73283229 6987:S38|5265616c20636f6e7374616e7473206e6f7420616c6c6f77656420696e207061747465726e73 6988:S7|5061747465726e 6989:S55|50415253455f44454328292e70617273654465632833296465632834297061747465726e28332961746f6d69635061747465726e283129 6990:S14|456e64206f66207061747465726e 6991:S39|50415253455f44454328292e70617273654465632833296465632834297061747465726e283329 6992:C2,928|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002b362d603bc92d700009317000c82d8000492d7000882b8000892b70004971bfffc947bfffc398000103bbdffbc7c1df04040a00010800d001c7c0803a64e8000213a9d0004919d00003e6002b36273070c927400008278000c9274003c82580048925400388238004492340034821800409214003081f8003c91f4002c81d8003891d40028815800349154002492f4002082f8003092f4001c8138002c913400188118002891140014907400109314000c92b4000892d40004969bfffc80f6000c80d60004398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a3000c3ca002b360a5208090a300089083000480a600ac90a30000973bfffc949bfffc83070010801800007c0803a64e800021809b001080640004832300048303000880190000941bfffc8064000883180004801800007c0803a64e80002182fb001482d7000482b600043a830000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000827500ac9263000492830000831b0000801800007c0803a64e800021280300014182019c825b00148232000482110004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000081f0002491e3000481db000491c3000083100004801800007c0803a64e8000213b1b00143c0002b3600020947c0803a64e800021815b0014812a000481090008947bfffc800a000c941bfffc806a000883080004801800007c0803a64e80002180fb001c80c7000480a6000038830000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000832500389323000490830000831b0000801800007c0803a64e80002128030001418200a0831b001c82f8000482d700088078000883160000801800007c0803a64e80002182bb001c829500048274001880130088941bfffc807b00103b1b00203c0002b360002f007c0803a64e8000213a430000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092430004823b000892230000831b0000833b0014801800007c0903a67f2803a63b7b00244e800420807b0004831b00107f0803a63b7b00204e800020825b00148232000482110018807000b081fb00087de803a63b7b00184e800020|@7017,1048575|68,3,@6993 144,3,@6999 308,3,@7007 572,3,@7008 780,3,@7011 6993:C2,252|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021398000063bbdffe47c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002b362d604d492d7000082d8000892d7001482b8000492b7001090b7000c9077000880b8000c90b700048076000c82960004398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a7d0004919d00003e4002b3625205d09253000092f300048223001c398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00009263000c92a300088214009892030004908300003b110000801800007c0903a67f2803a64e800420|@6998,1048575|68,3,@6994 156,3,@6996 6994:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8001482d70008973bfffc971bfffc949bfffc807800108316000c801800007c0803a64e80002182bb0004947bfffc8095000c8075000883150004801800007c0803a64e800021829b000490740000827b00009274000438600001825b000c7e4803a63b7b00104e800020|@6995,1048575| 6995:S76|50415253455f44454328292e706172736544656328332964656328342965787072657373696f6e28322965787072657373696f6e4c696e654c6973742833296765744578704c696e65283229 6996:C2,132|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc947bfffc973bfffc389b000483180004801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000833b000493230000831b00089303000482fb00007ee803a63b7b000c4e800020|@6997,1048575| 6997:S76|50415253455f44454328292e706172736544656328332964656328342965787072657373696f6e28322965787072657373696f6e4c696e654c6973742833296765744578704c696e65283129 6998:S63|50415253455f44454328292e706172736544656328332964656328342965787072657373696f6e28322965787072657373696f6e4c696e654c697374283329 6999:C2,5564|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d70008973bfffc971bfffc947bfffc8018003c941bfffc8078000883160004801800007c0803a64e80002182bb000882950004827400003a430000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008233008c9223000492430000831b0000801800007c0803a64e800021280300014182022c821b000881f0000481cf000880700008830e0000801800007c0803a64e800021815b0008812a000481090008800a0018941bfffc806a000883080004801800007c0803a64e80002180fb000c80c7000480a6000038830000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000832500909323000490830000831b0000801800007c0803a64e800021280300014182010482fb000c82d7000482b60004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008297001492830004827b00089263000083150004801800007c0803a64e800021825b000c823200048211000081f1000c81d10004398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021395d0004919d00003d2002b361291ce4912a0000906a000c81120010910a000880f2000c90ea0004398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00009143000c80d2000890c3000880ae009890a300048090009490830000830f001c801800007c0803a64e8000213b030000480000083b00000182fb000c82d7000482b6000c82960000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082770008926300048254009092430000971bfffc83150004801800007c0803a64e800021823b00108211000481f00018807b0000830f0048833b0014801800007c0903a67f2803a63b7b00184e800420821b000881f0000481cf00088010003c941bfffc80700008830e0004801800007c0803a64e800021815b000c812a00048109000038e30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080c8008490c3000490e30000831b0000801800007c0803a64e80002128030001418204f480bb000c808500048064000883230000806500083b190000801800007c0803a64e800021831b000c82f8000482d7000c82b7000082970004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000082780008926300088254009892430004823500889223000083160000801800007c0803a64e8000212803000141820024821b000c81f0000481cf0018806e00a8815b00107d4803a63b7b00144e800020821b000c81f0000481cf000880700008830e000c801800007c0803a64e800021815b000c812a00048109000438e30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080ca002890c3000480bb000890a3000094fbfffc83080004801800007c0803a64e800021809b0010832400108304000c3883000038790000801800007c0803a64e80002182fb001082d7000482b6000c82960000827600043a430000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00008237000892230008821300989203000481f4009491e30000965bfffc83150000801800007c0803a64e8000212803000141820154815b0014812a00048109001880e90004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080ca001c90c3000480bb001090a3000080080024941bfffc83070004801800007c0803a64e800021809b0018832400048319000082f9000c82d90004398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003e8002b362941d7c929500009075000c82640010927500088244000c92550004398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a3000c8224000892230008821600989203000481f8009491e300008317001c801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002139dd0004919d0000906e0004815b0004914e0000386e0000831b0000801800007c0803a64e80002139c300004800018481db0014814e0004812a000c810a000080ea0004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000080ce000890c3000880a7009890a300048088009c9083000083090000801800007c0803a64e800021280300014182010c807b00148323000483190018398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213afd0004919d000082db000492d7000482bb000092b700008299000482630024398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092630004825b001092430000801800a0941bfffc96fbfffc83140004801800007c0803a64e800021823b001c8211000481f0000038a30000808f009c8071001083110020801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002139dd0004919d0000906e0004815b0000914e0000386e0000831b0004801800007c0803a64e80002139c300004800001081db0000947bfffc947bfffc3b7b0004807b0018832300048319000c82f9000082c30008398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092c3000482b7008892a3000095dbfffc83180004801800007c0803a64e800021807b0000829b00207e8803a63b7b00244e80002080bb000c80850004806400088005003c941bfffc83230004806500083b190000801800007c0803a64e800021831b001082f8000482d700003aa30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000829600d09283000492a30000831b0000801800007c0803a64e8000212803000141820228827b001082530004823200088073000883110000801800007c0803a64e800021821b001081f0000481cf000c814f0000812f0004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000811000089103000880e9009890e3000480ca00d490c30000830e0000801800007c0803a64e800021280300014182002480bb00108085000480640018806300a8833b00147f2803a63b7b00184e80002080bb001080850004806400188324000c8304000082e40004398000073bbdffe07c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002b362b51dd092b60000828500089296001890960014827b000c927600108245002c9256000c82250010923600088205000c9216000481e3007c398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d000092c3000c9283000881d7009891c30004815800949143000095fbfffc8319001c801800007c0803a64e80002139230000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000390000039103000491230000831b0000801800007c0803a64e80002180fb001480c7000480a6000c808600003b230000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000830700089303000482e400d492e30000973bfffc83050004801800007c0803a64e800021807b000082db001c7ec803a63b7b00204e800020827b001082530004823200088013003c941bfffc8073000883110004801800007c0803a64e800021821b001481f0000481cf000039430000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000812e004c9123000491430000831b0000801800007c0803a64e800021280300014182036c811b001480e8000480c700088068000883060000801800007c0803a64e80002180bb0014947bfffc947bfffc947bfffc80850010806500048323002480040004941bfffc80040008941bfffc3860000183190000801800007c0803a64e800021831b002882f8000482d7002880030004941bfffc8063000883160000801800007c0803a64e8000213aa30000807b00083b150000801800007c0803a64e8000213a9b000c827b0000927400003a5b000c907200043a3b000c821b000492110008398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002139fd0004919d000081db000c91cf0000815b0010914f0004813b0014912f0008811b002c80e8000480c70004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080a6002890a30004809b00289083000095fbfffc83060004801800007c0803a64e800021833b003038830000807b000083190034801800007c0803a64e800021831b003082f8000482d7000c82b700003a830000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082780008926300048255004092430000969bfffc83160004801800007c0803a64e800021823b00348211000481f00004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000081d1003091c30004815b003091430000830f0004801800007c0803a64e800021813b00348109000480e8000038a300008087009c807b000483090020801800007c0803a64e80002180db003480a600048085000c832500003b030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082e6000892e3000482d9002892c30000971bfffc83040004801800007c0803a64e80002182bb0038829500048274000c82540004398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d0000823500089223000c3e0002b3621020189203000881f2009891e3000481db003491c3000083130010801800007c0803a64e800021815b0038812a000481090018398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000038e0000190e3000880db000090c3000480bb000490a300008308005c833b003c801800007c0903a67f2803a63b7b00404e800420811b001480e8000480c700088008003c941bfffc8068000883060004801800007c0803a64e80002180bb001880850004832400003b030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082f9005c92e3000493030000831b0000801800007c0803a64e800021280300014182003082bb00188295000482740008947bfffc8075000883130000801800007c0803a64e8000213ac300004800000c3ac00001947bfffc82db001c82b60004829500088076000883140004801800007c0803a64e800021827b001c82530004823200043a030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000081f1009c91e3000492030000961bfffc83110000801800007c0803a64e800021280300014182007481db0020814e0004812a0018810a000480ee001080090004941bfffc80db002094dbfffc80a8009c94bbfffc809b0010949bfffc80ce000880a700088087000480670000830e0038801800007c0803a64e800021831b0000833b0028801800007c0903a67f2803a63b7b002c4e80042081db0020814e0004812a0000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000810900e09103000480fb000090e30000830e003c801800007c0803a64e800021280300014182009c80db002080a60004808500088066000883040000801800007c0803a64e800021807b0020832300048319001882f9000c82c30008398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092c3000482bb001c92a3000080180080941bfffc83170018801800007c0803a64e800021831b0000833b0028801800007c0903a67f2803a63b7b002c4e80042080db002080a6000480850000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000832400b893230004831b0000930300008306003c801800007c0803a64e800021280300014182007482fb002082d7000482b600188296000880150008941bfffc8077000883140008801800007c0803a64e800021827b00248253000482320008947bfffc8073000883110000801800007c0803a64e800021807b0000831b0004833b002c801800007c0903a67f2803a63b7b00304e80042082fb002082d7000482b60000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000829500bc92830004827b0000926300008317003c801800007c0803a64e8000212803000141820074825b0020823200048211001881f100088010000c941bfffc80720008830f0008801800007c0803a64e80002181db0024814e0004812a0008947bfffc806e000883090000801800007c0803a64e800021807b0000831b0004833b002c801800007c0903a67f2803a63b7b00304e800420825b00208232000482110000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000081f000b491e3000481db000091c300008312003c801800007c0803a64e8000212803000141820074815b0020812a00048109001880e9000880080010941bfffc806a000883070008801800007c0803a64e80002180db002480a6000480850008947bfffc8066000883040000801800007c0803a64e800021807b0000831b0004833b002c801800007c0903a67f2803a63b7b00304e800420815b0020812a000481090000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080e800c490e3000480db000090c30000830a003c801800007c0803a64e800021280300014182007480bb002080850004806400188324000880030018941bfffc8065000883190008801800007c0803a64e800021831b002482f8000482d70008947bfffc8078000883160000801800007c0803a64e800021807b0000831b0004833b002c801800007c0903a67f2803a63b7b00304e80042080bb00208085000480640000832300c0398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000093230004831b0000930300008305003c801800007c0803a64e800021280300014182007482fb002082d7000482b600188296000880150014941bfffc8077000883140008801800007c0803a64e800021827b00248253000482320008947bfffc8073000883110000801800007c0803a64e800021807b0000831b0004833b002c801800007c0903a67f2803a63b7b00304e80042082fb002082d7000482b6000c82960000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008277000892630004825400049243000083150008801800007c0803a64e800021823b00208211000481f00018806f00b081db00247dc803a63b7b00284e800020|@7006,1048575|464,3,@7000 1432,3,@7002 2472,3,@7003 3648,3,@7005 7000:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000218098000c8078000883180004801800007c0903a64e800420|@7001,1048575| 7001:S59|50415253455f44454328292e706172736544656328332964656328342965787072657373696f6e28322965787072657373696f6e73283329283129 7002:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000218098000c8078000883180004801800007c0903a64e800420|@7001,1048575| 7003:C2,472|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8001482d7000c82b70004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008295006c928300048278001092630000973bfffc971bfffc80160018941bfffc83150004801800007c0803a64e800021825b00043a230000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000821200189203000492230000831b0000801800007c0803a64e80002181fb000481cf0014814e000c812e000039030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080ef001890e3000480c900a890c30000951bfffc830a0004801800007c0803a64e80002180bb0008808500148064000483230004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008305000c9303000482e5001092e300003b190000801800007c0803a64e80002182db0008388300008076000883160004801800007c0803a64e8000213aa30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a30004829b000092830000827b000c7e6803a63b7b00104e800020|@7004,1048575| 7004:S73|50415253455f44454328292e706172736544656328332964656328342965787072657373696f6e28322961746f6d696345787072657373696f6e2831296c6162656c6c65642d283129 7005:S21|456e64206f66206c65742065787072657373696f6e 7006:S61|50415253455f44454328292e706172736544656328332964656328342965787072657373696f6e28322961746f6d696345787072657373696f6e283129 7007:S10|45787072657373696f6e 7008:C2,452|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000082d7000482b600043a830000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008275003c9263000492830000973bfffc971bfffc969bfffc83150004801800007c0803a64e800021831b00043c0002b3600022747c0803a64e800021825b0004823200008211000481f00008947bfffc8011000c941bfffc80710008830f0004801800007c0803a64e80002181db000c814e0000812a00048109000038e30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080c8006490c3000490e30000831b0000801800007c0803a64e800021280300014182009880bb000c8085000080640004832300088064000883190000801800007c0803a64e800021831b000c82f8000082d7000482b6001880150098941bfffc807b000c4bfffea53a830000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092830004827b000892630000831b0000833b0014801800007c0903a67f2803a63b7b00184e800420807b000480bb00107ca803a63b7b00144e800020|@7016,1048575|128,3,@7009 7009:C2,452|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000082d7000482b600043a830000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000827500109263000492830000973bfffc971bfffc969bfffc83150004801800007c0803a64e800021831b00043c0002b3600024547c0803a64e800021825b0004823200008211000481f00008947bfffc8011000c941bfffc80710008830f0004801800007c0803a64e80002181db000c814e0000812a00048109000038e30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080c8001090c3000490e30000831b0000801800007c0803a64e800021280300014182009880bb000c8085000080640004832300088064000883190000801800007c0803a64e800021831b000c82f8000082d7000482b6001880150094941bfffc807b000c4bfffea53a830000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092830004827b000892630000831b0000833b0014801800007c0903a67f2803a63b7b00184e800420807b000480bb00107ca803a63b7b00144e800020|@7015,1048575|128,3,@7010 7010:C2,2704|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000082d7000482b60008973bfffc971bfffc947bfffc8077000883150004801800007c0803a64e800021829b00048274000082530004823200003a030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000081f1003c91e3000492030000961bfffc8313000c801800007c0803a64e800021280300014182024c81db0008814e0000812a000481090008806a000883080000801800007c0803a64e80002180fb000880c7000080a6000480850004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008326001493230004831b00049303000083040004801800007c0803a64e80002182fb0008388300008077fffc83170000801800007c0803a64e80002182db000882b60000829500048274000c825400003a230000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000821500089203000481f2007091e30000963bfffc83130004801800007c0803a64e80002181db000c814e0000812a000481090004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080ea001090e3000480db000890c3000083080004801800007c0803a64e80002180bb000c388300008065fffc83050000801800007c0803a64e800021809b000c832400008319000482f8000c82d800003aa30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008299000892830004827600249263000096bbfffc83170004801800007c0803a64e800021825b0010809b000c8072fffc83120000801800007c0803a64e800021823b00108211000081f0000481cf001839430000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000091430008813b000091230004811b000491030000830e0020833b0014801800007c0903a67f2803a63b7b00184e80042081db0008814e0000812a000481090000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080e8008090e3000480db000090c30000830a000c801800007c0803a64e800021280300014182024480bb00088085000080640004832300088064000883190000801800007c0803a64e800021831b000882f8000082d7000482b60004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008295001892830004827b00049263000083150004801800007c0803a64e800021825b0008388300008072fffc83120000801800007c0803a64e800021823b00088211000081f0000481cf0008947bfffc8010000c941bfffc80700008830e0004801800007c0803a64e800021815b0010812a00008109000480e8000038c30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080a7002090a3000490c30000831b0000801800007c0803a64e80002128030001418200a8809b00108064000083230004831900088063000883180000801800007c0803a64e80002182fb001082d7000082b60004829500188014008c941bfffc809b00108077fffc3b160000801800007c0803a64e8000213a630000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092630004825b000892430000831b0000833b0018801800007c0903a67f2803a63b7b001c4e800420809b001080640000832300048319000c82f9000082c30008398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092c3000482b7002092a3000083180008801800007c0803a64e800021829b0010827400008253000482320018807100b0821b00147e0803a63b7b00184e80002080bb0008808500008064000483230000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000831900189303000482fb000092e300008304000c801800007c0803a64e800021280300014182017882db000882b6000082950004827400088075000883130000801800007c0803a64e800021825b0008823200008211000481f00004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000081d1001891c30004815b000491430000830f0004801800007c0803a64e800021813b0008388300008069fffc83090000801800007c0803a64e800021811b000880e8000080c7000480a6000c808600003b230000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000830700089303000482e4005892e30000973bfffc83050004801800007c0803a64e80002182db000c82b60000829500048274001880130090941bfffc807b000c3b1600003c0002b360002f007c0803a64e8000213a430000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092430004823b000492230000831b0000833b0014801800007c0903a67f2803a63b7b00184e80042082db000882b600008295000482740000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008253006892430004823b0000922300008315000c801800007c0803a64e8000212803000141820074821b000881f0000081cf0004814e0008806f0008830a0000801800007c0803a64e800021813b00088109000080e8000480c7001880060084941bfffc809b00088069fffc3b080000801800007c0803a64e800021831b0000833b0010801800007c0903a67f2803a63b7b00144e800420821b000881f0000081cf0004814e0008800f000c941bfffc806f0008830a0004801800007c0803a64e800021813b000c8109000080e8000480c7000038a30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000808600309083000490a30000831b0000801800007c0803a64e80002128030001418200b8807b000c832300008319000482f800088079000883170000801800007c0803a64e80002182db000c82b60000829500048274001882540004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008232006092230004821b00089203000080130054941bfffc83120004801800007c0803a64e800021831b00103c0002b360002f007c0803a64e800021831b0000833b0014801800007c0903a67f2803a63b7b00184e800420807b000c832300008319000482f80004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082d9002492c3000482bb000892a3000083170004801800007c0803a64e800021829b000c8274000082530004823200048214fffc81f100a095fbfffc81d1009c95dbfffc947bfffc80d4fff880b00008809000048070000083130020801800007c0803a64e800021815b000c812a00008109000480e8000438c30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080a7001090a30004809b00089083000094dbfffc83070004801800007c0803a64e800021833b00108319000080bb0000388300008079fffc8318001c833b0014801800007c0903a67f2803a63b7b00184e800420|@7014,1048575|1792,3,@7011 2364,3,@7011 7011:C2,1296|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000082d7000482b6000c829600043a630000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d0000825700089243000c3e2002a162310a409223000892630004821400a892030000973bfffc971bfffc967bfffc83150010801800007c0803a64e80002181fb000481cf0000814e0004812a0008806e00088309000c801800007c0803a64e800021811b000480e8000080c7000480a6000438830000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008325006493230004831b000093030000949bfffc83050004801800007c0803a64e80002182fb000882d7000038a30000809600088077fffc8316004c801800007c0803a64e80002182bb0008829500008274000482530008947bfffc8014000c941bfffc8074000883120004801800007c0803a64e800021823b00108211000081f0000481cf000039430000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000812e00a09123000491430000831b0000801800007c0803a64e800021280300014182003080fb001080c7000080a60004808500088066000883040000801800007c0803a64e8000213903000048000118811b001080e8000080c7000480a6000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080870008908300043f2002a76339450c932300008305000c801800007c0803a64e800021831b001082f8000082d7000482b600088017000c941bfffc8077000883150004801800007c0803a64e800021829b00148274000082530004823200003a030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000081f100a891e3000492030000831b0000801800007c0803a64e800021280300014182003081db0014814e0000812a000481090008806a000883080000801800007c0803a64e8000213903000048000008390000013b7b000481db0010814e0000812a000481090004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080e8006890e3000480db000c90c3000083080004801800007c0803a64e80002180bb0010388300008065fffc83050000801800007c0803a64e800021809b0010832400008319000482f800183ac30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000082bb000892a3000892c30004829b00049283000083170058801800007c0803a64e800021827b001082530000823200048211000c81f1000081d1000439430000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00008132000891230008810e00989103000480ef00a490e30000955bfffc83100000801800007c0803a64e8000212803000141820018807b0010831b00144bfffbb538c300004800000838c00001398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138bd0004919d000090c50004809b000090850000807b0014832300008319000482f8000c82d80004398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d000082b9000892a3000c3e8002b36294342c928300088276009892630004825b00109243000094bbfffc83170010801800007c0803a64e800021807b0000823b001c7e2803a63b7b00204e800020|@7013,1048575|96,3,@342 556,3,@2826 1228,3,@7012 7012:S12|456e64206f66206d61746368 7013:S50|50415253455f44454328292e706172736544656328332964656328342965787072657373696f6e2832296d61746368283129 7014:S55|50415253455f44454328292e706172736544656328332964656328342965787072657373696f6e2832296b6579576f7264457870283129 7015:S57|50415253455f44454328292e706172736544656328332964656328342965787072657373696f6e2832297061727365416e64616c736f283129 7016:S56|50415253455f44454328292e706172736544656328332964656328342965787072657373696f6e28322970617273654f72656c7365283129 7017:S42|50415253455f44454328292e706172736544656328332964656328342965787072657373696f6e283229 7018:C2,124|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc947bfffc83180008801800007c0803a64e800021706b00014082001880630000833b00087f2803a63b7b000c4e800020833b0004807b000083190004833b0008801800007c0903a67f2803a63b7b000c4e800420|@7019,1048575| 7019:S39|50415253455f44454328292e70617273654465632833296465632834296e6577456e762d283129 7020:C2,1076|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8fffc82d7000482b60008973bfffc971bfffc947bfffc80170008941bfffc8078fff483150004801800007c0803a64e800021829b00088274fffc82530004823200003a030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000081f1006c91e3000492030000831b0000801800007c0803a64e800021947bfffc81db000c814efffc812a000481090008800a0008941bfffc806efff483080004801800007c0803a64e80002180fb001080c7fffc80a60004808500003b230000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008304006c9303000493230000831b0000801800007c0803a64e800021280300014182004882fb001082d7fffc82b60004829500088077fff483140000801800007c0803a64e8000213b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffff3882fb0004281700014182006c82db001082b6fffc82950004827400188013003c941bfffc807b00103b1600004bfffe5d398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a5d0004919d000090720004823b00009232000038720000821b00187e0803a63b7b001c4e80002082db001082b6fffc82950004827400088076fff48313000c801800007c0803a64e800021825b00108232fffc8211000481f0000439c30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000814f006c91430004813b000c9123000095dbfffc830f0004801800007c0803a64e800021811b001438a300008088fff48068ffb48308ffe4801800007c0803a64e80002180fb001480c7fffc80a600048085000c832500003b030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082e7fff492e3000482d900a892c30000971bfffc83040004801800007c0803a64e80002182bb0018809b00148075ffb48315ffe0801800007c0803a64e800021829b00188274fffc82530004823200183a030000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000081fb000491e300089203000481db000091c3000083110038801800007c0803a64e800021815b0018812afffc8109000480e8000c80c8000080a8000438830000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000832afff493230008830500989303000482e6000c92e30000949bfffc83070000801800007c0803a64e8000212803000141820018807b0018831b001c4bfffc213ac30000480000083ac00001398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d000092d50004829b00009295000038750000827b00207e6803a63b7b00244e800020|@7021,1048575| 7021:S36|50415253455f44454328292e706172736544656328332964656328342976616c42283129 7022:C2,124|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc947bfffc83180008801800007c0803a64e800021706b00014082001880630000833b00087f2803a63b7b000c4e800020833b0004807b000083190004833b0008801800007c0903a67f2803a63b7b000c4e800420|@7019,1048575| 7023:C2,112|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021971bfffc947bfffc82f8000482d70018973bfffc80160040941bfffc386000013b1b000c3c0002b360003bdc7c0803a64e800021831b0000833b0004801800007c0903a67f2803a63b7b00104e800420|@7026,1048575|68,3,@7024 7024:C2,1072|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000082d7000482b60008973bfffc971bfffc807700088315000c801800007c0803a64e800021829b00008274000082530004823200043a030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000081f1006c91e3000481d4fffc91c30000961bfffc83110004801800007c0803a64e800021815b0004812a000038a30000808900088069001083090018801800007c0803a64e800021811b000480e8000080c7000480a60008947bfffc80070014941bfffc8067000883050004801800007c0803a64e800021809b000c832400008319000482f800003ac30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082b700a892a3000492c30000831b0000801800007c0803a64e8000212803000141820030827b000c8253000082320004821100088072000883100000801800007c0803a64e8000213a83000048000114829b000c82740000825300048232000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000821300089203000439e0007b91e300008311000c801800007c0803a64e80002181db000c814e0000812a000481090008800a0014941bfffc806a000883080004801800007c0803a64e80002180fb001080c7000080a60004808500003b230000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000830400a09303000493230000831b0000801800007c0803a64e800021280300014182003082fb001082d7000082b60004829500088076000883140000801800007c0803a64e8000213a830000480000083a8000013b7b000482fb000c82d7000082b6000482950004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082740068926300048257fffc9243000083140004801800007c0803a64e800021823b000c8211000038830000807000108310000c801800007c0803a64e80002181fb000c81cf0000814e0004812a001839030000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000080fb000890e300089103000480db000490c3000083090044801800007c0803a64e80002180bb000c80850000832400048319000c82f9000082d900043aa30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000082840008928300088276009892630004825700a49243000096bbfffc83180000801800007c0803a64e800021280300014182001838600001831b00104bfffc253a230000480000083a200001398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a1d0004919d00009230000481fb000091f000003870000081db00147dc803a63b7b00184e800020|@7025,1048575| 7025:S47|50415253455f44454328292e706172736544656328332964656328342966756e4228312962696e64696e6773283129 7026:S36|50415253455f44454328292e706172736544656328332964656328342966756e42283129 7027:C2,80|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f800043ac0000196dbfffc3aa0000196bbfffc80d7000880b700048097000083180008801800007c0903a64e800420|@6953,1048575| 7028:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002138a30000809800083860000183180004801800007c0903a64e800420|@7029,1048575| 7029:S35|50415253455f44454328292e706172736544656328332964656328342974622d283129 7030:C2,80|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f800043ac0000196dbfffc3aa0000196bbfffc80d7000880b700048097000083180008801800007c0903a64e800420|@6953,1048575| 7031:C2,1168|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000c82d700043aa30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000829800109283000492a30000973bfffc971bfffc96bbfffc8016009c941bfffc83160004801800007c0803a64e800021827b00088253000c8232000c3a030000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000081f3000891e300089203000481db000091c3000095fbfffc83110014801800007c0803a64e800021815b000c812a000c8109002480e90008947bfffc80080004941bfffc807b00088307000c801800007c0803a64e80002138c30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000090c3000880bb000890a30004809b000490830000831b0000801800007c0803a64e800021807b00148323000c8319000c82f9000082d9000482a30008398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a300088296009892830004827700589263000083180000801800007c0803a64e8000212803000141820120825b00148232000c8211001881f1002081d10004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000814e006c91430004813b00109123000080100078941bfffc801000b0941bfffc800f0000941bfffc830e0004801800007c0803a64e800021811b002080e8000438c30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000080a7000890a30008808800089083000490c30000831b0000801800007c0803a64e8000213b230000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000093230008831b00049303000482fb001092e30000831b0008833b0024801800007c0903a67f2803a63b7b00284e800420825b00148232000c8211000c81f1000081d10004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00008152000891430008812e009891230004810f00a89103000083100000801800007c0803a64e80002128030001418200e880fb001480c7000c80a600048086000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00008327000893230008831b00109303000482e5009c92e3000083040014801800007c0803a64e80002182db001482b6000c8295001880140078941bfffc83140004801800007c0803a64e800021827b00188253000c823200103a030000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000081f1000491e300089203000481db000891c30000831b0000833b001c801800007c0903a67f2803a63b7b00204e80042080fb001480c7000c80a6001880860010398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00008324000493230008830500b09303000482fb000492e3000083050078833b0018801800007c0903a67f2803a63b7b001c4e800420|@7032,1048575| 7032:S48|50415253455f44454328292e7061727365446563283329646563283429657863657074696f6e42696e64696e67283129 7033:C2,96|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc947bfffc83180008801800007c0803a64e800021833b0004807b000083190004833b0008801800007c0903a67f2803a63b7b000c4e800420|@7034,1048575| 7034:S35|50415253455f44454328292e6d6b4c6f63616c426f6479466978456e76283529283129 7035:O1|@7036 7036:C2,72|7f2802a6633900023b030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003ee002b362f747e092e30000930300047f2803a64e800020|@7047,917505|48,3,@7037 7037:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002138a0ffff809800043c0002b3600048347c0903a64e800420|@7046,1048575|40,3,@7038 7038:C2,524|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0500014082000c3b000005480000282c05fffd4082000c3b000011480000182c05ffff4082000c3b000015480000083b000021971bfffc949bfffc973bfffc947bfffc94bbfffc3b040000801800007c0803a64e8000212c030001408200183860000182fb00087ee803a63b7b00144e80002082e3000082d7000028160013418000102816001b418100084800001028160041418200084800002080bb0000809b000c80770004833b00087f2803a63b7b00144bffff342c1600574082002c807700043b1b00103c0002b360004a5c7c0803a64e80002182bb00087ea803a63b7b00144e8000202c16005b4082000848000010281600fd41820008480000c8807700043b1b00103c0002b360004a5c7c0803a64e8000212c030001408200183860000182bb00087ea803a63b7b00144e80002082a3000082950000398000025680f80140a20010800d00347c0803a64e8000217e74641141a3fff0398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a5d0004919d0000823500049232000492720000398000013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d000092430000821b00087e0803a63b7b00144e800020807b00043b1b00103c0002b360004a5c7c0803a64e80002182bb00087ea803a63b7b00144e800020|@7045,1048575|232,3,@7039 296,3,@7039 492,3,@7039 7039:C2,576|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f800002c170021408201fc973bfffc971bfffc947bfffc8318fffc801800007c0803a64e8000212c030001408200183860000182db00087ec803a63b7b000c4e80002082c3000082b60000281500614182003080bb00003880000138600001831b0004833b00083c0002b360004cb87c0903a67f2803a63b7b000c4e800420829b000480160004941bfffc807b00008314fffc801800007c0803a64e8000212c03000140820070398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a7d0004919d0000825b0000925300043a20000192330000398000013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d000092630000821b000c7e0803a63b7b00104e80002082630000825300002c1200f14082000848000010281200b141820008480000a880b300043880000138600001831b00083c0002b360004cb87c0803a64e8000212c03000140820070398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a3d0004919d0000821b00009211000439e0000191f10000398000013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d00009223000081db000c7dc803a63b7b00104e800020823b000c7e2803a63b7b00104e80002080bb00043880000138600001831b0008833b000c3c0002b360004cb87c0903a67f2803a63b7b00104e80042038a3000038800001386000013c0002b36000511c7c0903a64e800420|@7044,1048575|136,3,@7040 356,3,@7040 524,3,@7040 560,3,@7042 7040:C2,1056|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc947bfffc949bfffc94bbfffc386500008318fffc801800007c0803a64e8000212c03000140820090833b00082819000141820070398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b1d0004919d000082fb000092f8000482db000492d80000398000013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d00009303000082bb00107ea803a63b7b00144e80002038600001831b00107f0803a63b7b00144e8000208323000083190000570bf80140a20010800d00347c0803a64e8000212c180061418000b8570bf80140a20010800d00347c0803a64e8000212c1800734181009c82fb00043ac000213996ffff7eebb0385560f80140a20010800d00347c0803a64e8000217eeb0e707eac5dd741a3ffec3ab500013998ffff7eabc0385560f80140a20010800d00347c0803a64e8000217e95661541a3fff0398000605680f80140a20010800d00347c0803a64e8000217e6ca41141a3fff080b900043893000038600003831b000c833b00107f2803a63b7b00144bfffe58570bf80140a20010800d00347c0803a64e8000212c180083418000d8570bf80140a20010800d00347c0803a64e8000212c18008d418100bc82fb00043ac000213996ffff7eebb0385560f80140a20010800d00347c0803a64e8000217eeb0e707eac5dd741a3ffec3ab500013998ffff7eabc0385560f80140a20010800d00347c0803a64e8000217e95661541a3fff0398000825680f80140a20010800d00347c0803a64e8000217e6ca41141a3fff0398000145660f80140a20010800d00347c0803a64e8000217e53661541a3fff080b900043892000038600003831b000c833b00107f2803a63b7b00144bfffd68570bf80140a20010800d00347c0803a64e8000212c1800c3418000d8570bf80140a20010800d00347c0803a64e8000212c1800cd418100bc82fb00043ac000213996ffff7eebb0385560f80140a20010800d00347c0803a64e8000217eeb0e707eac5dd741a3ffec3ab500013998ffff7eabc0385560f80140a20010800d00347c0803a64e8000217e95661541a3fff0398000c25680f80140a20010800d00347c0803a64e8000217e6ca41141a3fff0398000145660f80140a20010800d00347c0803a64e8000217e53661541a3fff080b900043892000038600003831b000c833b00107f2803a63b7b00144bfffc7882fb00082817000141820070398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213add0004919d000082bb000092b60004829b000492960000398000013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d000092c30000827b00107e6803a63b7b00144e8000203860000182db00107ec803a63b7b00144e800020|@7041,1048575| 7041:S29|496e742e7363616e283329726561645f6865785f646967697473283329 7042:C2,616|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc947bfffc949bfffc94bbfffc386500008318fffc801800007c0803a64e8000212c03000140820090833b00082819000141820070398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b1d0004919d000082fb000092f8000482db000492d80000398000013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d00009303000082bb00107ea803a63b7b00144e80002038600001831b00107f0803a63b7b00144e8000208323000083190000570bf80140a20010800d00347c0803a64e8000212c180061418000e082fb000c82d700003980006056c0f80140a20010800d00347c0803a64e8000217eb6661541a3fff07f0ba838556bf80140a20010800d00347c0803a64e8000217c18a80040800098829b00043996ffff7e8bb0385560f80140a20010800d00347c0803a64e8000217e8b0e707e6c5dd741a3ffec3a7300013998ffff7e6bc0385560f80140a20010800d00347c0803a64e8000217e53661541a3fff0398000605640f80140a20010800d00347c0803a64e8000217e2c941141a3fff080b9000438910000386000033b170000833b00107f2803a63b7b00144bfffe3082fb00082817000141820070398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213add0004919d000082bb000092b60004829b000492960000398000013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d000092c30000827b00107e6803a63b7b00144e8000203860000182db00107ec803a63b7b00144e800020|@7043,1048575| 7043:S25|496e742e7363616e283329726561645f646967697473283329 7044:S25|496e742e7363616e283329726561645f6e756d626572283129 7045:S11|496e742e7363616e283329 7046:S17|496e742e7363616e283129283129283129 7047:S14|496e742e7363616e283129283129 7048:C2,256|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021706b00014182000c3b0000034800001081830000558c083c61980001398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002b362d6554c92d700009317000890770004973bfffc387700003b040000801800007c0803a64e8000213aa30000386000013b150000801800007c0803a64e8000212c0300014082001838600001829b00007e8803a63b7b00044e80002082830000398000013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d00008274000092630000825b00007e4803a63b7b00044e800020|@7051,1048575|96,3,@7049 7049:C2,168|7f2802a66339000282f800087c03b8404082000c386000014e80002082d8000472cb00014182000c3ab60000480000183aa300087eac0e707d7660ae556b083c617500013a830002398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00009283000492a300003aa30000398000013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a300007f2803a64e800020|@7050,1032193| 7050:S29|537472696e674376742e7363616e537472696e67283229726472283129 7051:S23|537472696e674376742e7363616e537472696e67283229 7052:S11|507265636564656e636520 7053:S37|206e6f7420616c6c6f7765642c206d757374206265206265747765656e203020616e642039 7054:S8|5661726961626c65 7055:C2,580|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8fffc82d7000482b6000482960008973bfffc971bfffc80150000941bfffc8078fff483140004801800007c0803a64e800021827b00048253fffc823200048211000439e30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000081d0009c91c3000491e30000831b0000801800007c0803a64e8000212803000141820184815b0004812afffc8109000480e8000480c8000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000080aafff490a30008808afff0908300048327009c9323000094bbfffc83060014801800007c0803a64e800021831b000882f8fffc82d7000482b6002482960008947bfffc80150004941bfffc807b00088314000c801800007c0803a64e8000213a630000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092630008825b000892430004823b000492230000831b0000801800007c0803a64e800021821b001081f0fff8398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000081d0ffd491c30004815b000491430000830f0000801800007c0803a64e80002138600001831b00104bfffe19398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021393d0004919d000090690004811b0004910900003869000080fb00147ce803a63b7b00184e80002038600001815b00087d4803a63b7b000c4e800020|@7056,1048575| 7056:S36|50415253455f44454328292e706172736544656328332964656328342976617273283129 7057:C2,408|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8fffc82d7000482b6000482960008973bfffc971bfffc80150000941bfffc8078fff483140004801800007c0803a64e800021827b00048253fffc823200048211000439e30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000081d0009c91c3000491e30000831b0000801800007c0803a64e80002128030001418200d8815b0004812afffc8109000480e8000480c8000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000080aafff490a30008808afff0908300048327009c9323000083060014801800007c0803a64e800021831b000482f8fffc82d7000482b6001883150034801800007c0803a64e800021947bfffc38600001831b00084bfffec5398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a9d0004919d000090740004827b00009274000038740000825b000c7e4803a63b7b00104e80002038600001815b00087d4803a63b7b000c4e800020|@7056,1048575| 7058:S29|50415253455f44454328292e7061727365446563283329646563283429 7059:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc947bfffc947bfffc947bfffc973bfffc971bfffc947bfffc949bfffc94bbfffc80030008941bfffc389b0018386000018318002c801800007c0803a64e800021386000013b1b00243c0002b360005bbc7c0803a64e800021833b00147f2803a63b7b00284e800020|@7081,1048575|108,3,@7060 7060:C2,4360|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8ffec82d7000882b6000c82960004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082770004926300048258ffe092430000973bfffc971bfffc80150010941bfffc83140004801800007c0803a64e800021823b00043a030000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d000081f1ffe491e3000c3dc002ab61ce941891c300088151ffe09143000492030000831b0000801800007c0803a64e800021813b00048109ffec80e8000880c700088069ffe483060004801800007c0803a64e80002180bb00048085ffec83240008831900003ae30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082d8001c92c3000492e3000096fbfffc8304000c801800007c0803a64e80002128030001418201ac829b00088274ffec82530008823200088074ffe48311000c801800007c0803a64e800021821b000881f0ffec81cf0008814e000439230000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000810f00149103000480f0ffe090e30000953bfffc830a0004801800007c0803a64e80002180db000c80a6ffe88086ffec398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213b3d0004919d00003f0002b363186ce09319000082e6ffe492f9000882c4000892d90004398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213abd0004919d000093350008828500049295000482650000927500008256001c80120020941bfffc38a300008224001038950000386000033b110000801800007c0803a64e8000213a030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000081fb000491e3000492030000831b0000801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d000039c0000191d500049075000048000c5882bb00088295ffec8274000882530000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008232007492230004821b0000920300008314000c801800007c0803a64e80002128030001418201b081fb000881cfffec814e0008812a0008806fffe48309000c801800007c0803a64e800021811b000880e8ffec80c7000880a6000438830000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000083270014932300048308ffe093030000949bfffc83050004801800007c0803a64e80002182fb000c82d7ffec82b6000882950008947bfffc8077ffe483140000801800007c0803a64e800021827b00108253ffec823200088211001c81f10018398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002139dd0004919d00003d4002b3614a6e34914e00008132001c912e00088113ffe8910e000480100020941bfffc800f0060941bfffc809b0008386e000083120018801800007c0803a64e800021831b0000801800007c0803a64e80002138e30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080db000c90c3000490e30000831b0004801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d000038a0000190b500049075000048000a4c81fb000881cfffec814e0008812a0000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000810901009103000480fb000090e30000830e000c801800007c0803a64e80002128030001418201b480db000880a6ffec80850008806400088323000c8066ffe43b190000801800007c0803a64e800021831b000882f8ffec82d7000882b600043a830000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082770014926300048258ffe092430000969bfffc83150004801800007c0803a64e800021823b000c8211ffec81f0000881cf0008947bfffc8071ffe4830e0000801800007c0803a64e800021815b0010812affec8109000880e8001c80c80018398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002138bd0004919d00003c8002b360846ea0908500008069001c90650008832affe89325000480070020941bfffc80060060941bfffc809b00083865000083090018801800007c0803a64e800021831b0000801800007c0803a64e8000213b030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082fb000c92e3000493030000831b0004801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003ac0000192d50004907500004800084080db000880a6ffec808500088064000083230078398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000093230004831b0000930300008305000c801800007c0803a64e80002128030001418200e882fb000882d7ffec82b60008829500088077ffe483140000801800007c0803a64e800021827b00088253ffec398000063bbdffe47c1df04040a00010800d001c7c0803a64e8000213a3d0004919d00003e0002b362106f0c9211000081f3ffe091f1001481d2002091d100108153ffe49151000c8133000091310008811200089111000480e8000c80c8000080a80004398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00009223000c9143000880850098908300048326000c932300008307001c801800007c0803a64e8000213aa30000480006f082fb000882d7ffec82b6000882950000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008274002c92630004825b0000924300008316000c801800007c0803a64e80002128030001418200e8823b00088211ffec81f0000881cf00088071ffe4830e0000801800007c0803a64e800021815b0008812affec398000063bbdffe47c1df04040a00010800d001c7c0803a64e800021391d0004919d00003ce002b360e7725c90e8000080caffe090c8001480a9002090a80010808affe49088000c806affdc9068000883290008932800048319000c82f9000082d90004398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00009103000c9083000882b6009892a300048297000c928300008318001c801800007c0803a64e8000213aa30000480005b0823b00088211ffec81f0000881cf0000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000814e00e491430004813b0000912300008310000c801800007c0803a64e8000212803000141820138811b000880e8ffec80c7000880a600088068ffe483050000801800007c0803a64e800021809b00088064ffec398000073bbdffe07c1df04040a00010800d001c7c0803a64e8000213b3d0004919d00003f0002b3631875d49319000082e4ffe092f9001882c3002092d9001482a4ffe492b900108284ffe89299000c826300249279000882430008925900048232001c8212000c81f2000081d20004398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00009323000c92a30008814e009891430004812f000c9123000080110004941bfffc8310001c801800007c0803a64e800021831b0000801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003900000191150004907500004800041c811b000880e8ffec80c7000880a60000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008085010490830004833b0000932300008307000c801800007c0803a64e8000212803000141820264831b000882f8ffec82d7000882b600088078ffe483150000801800007c0803a64e800021829b00088274ffec825300088232000c82120004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000081f0008491e3000481d000b491c3000080110010941bfffc83100004801800007c0803a64e800021815b000c39230000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d0000810affe49103000c3ce002b360e778a890e3000880caffe090c3000491230000831b0000801800007c0803a64e80002180bb000c8085ffec8064000883230004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000830400149303000482e5ffe092e3000080190004941bfffc831b0000801800007c0803a64e80002182db001082b6ffec82950008827400043a430000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000823300b49223000492430000831b0000801800007c0803a64e800021821b001081f0ffec38a300008090ffe48070ffe8830f0024801800007c0803a64e80002181db0010814effec812a00088109001c947bfffc80080018941bfffc386000013b1b001c3c0002b3600078c47c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138fd0004919d00009067000480db000490c7000038670000831b0000801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d000038a0000190b50004907500004800015c831b000882f8ffec82d7000882b60000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000829500f492830004827b0000926300008317000c801800007c0803a64e80002128030001418200ec825b00088232ffec8211000881f000088072ffe4830f0000801800007c0803a64e80002181db0008814effec398000063bbdffe47c1df04040a00010800d001c7c0803a64e800021393d0004919d00003d0002b361087b609109000080eeffe090e9001480ca002890c9001080aa000c90a9000c808a000890890008806effe4906900048324000c8304000082e40004398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00009123000c82ceffe492c3000882b700b492a300048298000c928300008319001c801800007c0803a64e8000213aa30000480000083aa00001947bfffc947bfffc947bfffc947bfffc3b7b000c3b7b0004947bfffc947bfffc947bfffc947bfffc3b7b0008825b00108232ffec8211000881f0000896bbfffc8011000c941bfffc8072ffe4830f0004801800007c0803a64e80002181db0018814effec812a00088109000038e30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080c8009c90c3000490e30000831b0000801800007c0803a64e8000212803000141820030809b00188064ffec83230008831900088064ffe483180000801800007c0803a64e80002138a300004800000838a0000180bb00188085ffec80640008832300048303000880190000941bfffc8065ffe483180004801800007c0803a64e80002182fb001c82d7ffec3aa30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000829600049283000492a30000831b0000801800007c0803a64e800021280300014182005838600001831b001c4bffef592c03000140820018807b0008827b00207e6803a63b7b00244e800020947bfffc807b000c3b1b00243c0002b3600081e87c0803a64e800021827b00247e6803a63b7b00284e800020807b0008827b00207e6803a63b7b00244e800020|@7080,1048575|184,3,@4808 532,3,@7061 1096,3,@7063 1620,3,@7064 1996,3,@7065 2316,3,@7067 2636,3,@7069 3140,3,@7071 3428,3,@7072 3736,3,@7074 4308,3,@7079 7061:C2,228|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d70008973bfffc971bfffc947bfffc80160014941bfffc80180008941bfffc807b00008316000c801800007c0803a64e800021947bfffc3c8002b260849450807b000c3c0002a1600074a87c0803a64e8000213aa30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a30008829b000092830004827b000492630000831b0008801800007c0803a64e800021825b001082320004821100148070001481fb00147de803a63b7b00184e800020|@7062,1048575|92,3,@6937 104,3,@511 7062:S75|50415253455f44454328292e70617273654465632833297369676e6174757265537065632833297061727365536967456e7472696573283129746869735369672d6e6577656e762d283129 7063:C2,80|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f800043ac0000196dbfffc3aa0000396bbfffc80d7000880b700048097000083180008801800007c0903a64e800420|@6953,1048575| 7064:C2,80|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f800043ac0000396dbfffc3aa0000396bbfffc80d7000880b700048097000083180008801800007c0903a64e800420|@6953,1048575| 7065:C2,736|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d70008973bfffc971bfffc8078000c8316000c801800007c0803a64e80002182bb000082950004827400043a430000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082330058922300048215001492030000965bfffc801300b4941bfffc83130004801800007c0803a64e80002181fb000881cf0004814e000c39230000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000810f000c910300089123000480fb000090e30000951bfffc830a0014801800007c0803a64e80002180db000c80a600048085002483250008947bfffc80040004941bfffc807b00088319000c801800007c0803a64e8000213b030000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00009303000882fb000892e3000482db000492c30000831b0000801800007c0803a64e80002182bb0014829500048274000c82540000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008235000c92230004821200989203000083130004801800007c0803a64e80002181fb001481cf0004814e0020812e0004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000810f00109103000480ef001490e30000800a0000941bfffc83090004801800007c0803a64e80002180db001838a30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000080860008908300088326000c9323000490a30000831b0000801800007c0803a64e800021831b001882f8000482d7001c3aa30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000829b00149283000892a30004827b00089263000083160034833b001c801800007c0903a67f2803a63b7b00204e800420|@7066,1048575| 7066:S73|50415253455f44454328292e70617273654465632833297369676e6174757265537065632833297061727365536967456e7472696573283129746869735369672d646f56616c283129 7067:C2,780|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d70008973bfffc971bfffc8078000c8316000c801800007c0803a64e80002182bb000082950004827400043a430000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082330034922300048215001492030000965bfffc8013009c941bfffc83130004801800007c0803a64e80002181fb000881cf0004814e000c39230000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000810f000c910300089123000480fb000090e30000951bfffc830a0014801800007c0803a64e80002180db000c80a600048085002483250008947bfffc80040004941bfffc807b00088319000c801800007c0803a64e8000213b030000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00009303000882fb000892e3000482db000492c30000831b0000801800007c0803a64e80002182bb0014829500048274000c8254000082340004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00008215000c9203000881f1009891e3000481d2005891c3000083130000801800007c0803a64e80002128030001418200b8813b00148109000480e8002080c80004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080a9001090a30004808900149083000080070000941bfffc83060004801800007c0803a64e800021833b00183b030000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000082f9000892e3000882d9000c92c3000493030000831b0000801800007c0803a64e8000213943000048000018815b0014812a00048109001081480004947bfffc80fb001880c7000480a6001c398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000809b00149083000891430004833b00089323000083050038833b001c801800007c0903a67f2803a63b7b00204e800420|@7068,1048575| 7068:S72|50415253455f44454328292e70617273654465632833297369676e6174757265537065632833297061727365536967456e7472696573283129746869735369672d646f4578283129 7069:C2,608|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d70008973bfffc971bfffc807800108316000c801800007c0803a64e80002182bb000082950004827400048254000c3a230000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000821500109203000881f3009891e3000481d3009c91c30000963bfffc961bfffc83120014801800007c0803a64e800021815b0008812a00048109002480e90008947bfffc80080004941bfffc807b00088307000c801800007c0803a64e80002138c30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000090c3000880bb000890a30004809b000490830000831b0000801800007c0803a64e800021807b0010832300048319000c82f9000082c30010398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092c3000482b7009892a3000083180004801800007c0803a64e800021829b00108274000482530004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008234001492230004821400189203000083120004801800007c0803a64e80002181fb001038a30000808f0010806f000c830f0008801800007c0803a64e80002181db0010814e0004812a001c39030000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d000080fb000c90e3001080c9000090c3000c38a0000190a3000891030004809b00049083000083090024833b0014801800007c0903a67f2803a63b7b00184e800420|@7070,1048575| 7070:S79|50415253455f44454328292e70617273654465632833297369676e6174757265537065632833297061727365536967456e7472696573283129746869735369672d646f537472756374757265283129 7071:S18|5374617274206f66207369676e6174757265 7072:C2,556|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8fffc82d7ffec82b6000882950008973bfffc971bfffc8016000c941bfffc8077ffe483140004801800007c0803a64e800021827b00048253fffc8232ffec8211000881f0000039c30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000814f00049143000491c30000831b0000801800007c0803a64e8000212803000141820168813b00048109fffc80e8ffec80c7000880a6001c808600048066000c83230014398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00008308ffe49303000882e8ffe092e3000482c400b492c300008005002c941bfffc971bfffc3b190000801800007c0803a64e80002182bb000c8295fffc8274ffec825300088232002482120008947bfffc80110004941bfffc807b00088310000c801800007c0803a64e80002139e30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000091e3000881db000891c30004815b000491430000831b0000801800007c0803a64e800021807b0004831b000c801800007c0803a64e800021947bfffc38600001831b00184bfffe31398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021393d0004919d000090690004811b0000910900003869000080fb001c7ce803a63b7b00204e80002038600001813b00087d2803a63b7b000c4e800020|@7073,1048575| 7073:S74|50415253455f44454328292e70617273654465632833297369676e6174757265537065632833297061727365536967456e7472696573283129746869735369672d736967696473283129 7074:C2,1156|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000882d70008973bfffc971bfffc807800048316000c801800007c0803a64e80002182bb0000829500088274000c82540000823400043a030000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000081f5000491e3000881d1009891c300048152007491430000961bfffc83130000801800007c0803a64e800021813b0004398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021391d0004919d00003ce002b360e7800090e8000080c9001490c8001080a9001090a8000c80890004908800088329000893280004831900043ae30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000090a3000490c3000096fbfffc951bfffc801800b4941bfffc83180004801800007c0803a64e80002182db001082b600088295000c3a630000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000825600049243000892630004823b00009223000083140014801800007c0803a64e800021821b001081f0000881cf000c814f000039230000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000811000049103000480ea00a890e30000953bfffc830e0004801800007c0803a64e80002180db001480a600088085001c8065000c832500008305000482e3001c398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d000082db000892c3000c82a6000492a300088298000892830004827900a89263000080040048941bfffc3b170000801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a5d0004919d000090720004823b000492320000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000821b0014920300089243000481fb001091e30000831b0000801800007c0803a64e80002181db0018814e0008812a0008947bfffc800e000c941bfffc806e000483090004801800007c0803a64e800021811b002080e8000880c7000038a30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008086000c9083000490a30000831b0000801800007c0803a64e8000212803000141820064807b0020832300088319002c8078000083180004801800007c0803a64e80002182fb002082d7000882b60008947bfffc807700048315001c801800007c0803a64e800021831b0000801800007c0803a64e80002128030001408200944800000c947bfffc48000088829b0024827400088253000880120014941bfffc80140004941bfffc807b00008312000c801800007c0803a64e8000213a230000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003e0002b36210815c920300089223000481fb000091e30000831b0004801800007c0803a64e8000214800000c947bfffc947bfffc807b0010833b00307f2803a63b7b00344e800020|@7078,1048575|212,3,@7075 1084,3,@7077 7075:C2,224|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000218078000482e30004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082d8000c92c3000482b8001092a30000973bfffc971bfffc801700b4941bfffc83170004801800007c0803a64e800021829b0004827400048253000c3a230000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000082140008920300089223000481fb000091e3000083120014833b0008801800007c0903a67f2803a63b7b000c4e800420|@7076,1048575| 7076:S88|50415253455f44454328292e70617273654465632833297369676e6174757265537065632833297061727365536967456e7472696573283129746869735369672d646f53686172696e672831296765745368617265283129 7077:S42|73686172696e67202e2e2e20616e64202e2e2e206973206e6f7420616c6c6f77656420696e204d4c3937 7078:S77|50415253455f44454328292e70617273654465632833297369676e6174757265537065632833297061727365536967456e7472696573283129746869735369672d646f53686172696e67283129 7079:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c8078ffdc4e800020973bfffc971bfffc80030000941bfffc806300044bffffbd398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b00009319000038790000833b00087f2803a63b7b000c4e800020|@468,786433| 7080:S57|50415253455f44454328292e70617273654465632833297369676e6174757265537065632833297061727365536967456e7472696573283129 7081:S39|50415253455f44454328292e70617273654465632833297369676e617475726553706563283329 7082:C2,1424|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7000c82b700043a830000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008275008492630004825500b492430000973bfffc971bfffc969bfffc949bfffc94bbfffc80160010941bfffc83150004801800007c0803a64e8000213a230000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d0000821b00089203000c3de002b361ef78a891e3000881db000491c3000492230000831b0000801800007c0803a64e800021815b0010812a00048109000c80e9000080c90004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000080bb000890a300088086009890830004832700f09323000083080000801800007c0803a64e80002128030001418201a482fb001082d7000482b6001c82960004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008274002092630004825b00049243000080150010941bfffc80140004941bfffc831b0000801800007c0803a64e800021823b00188211000481f0000439c30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000814f00949143000491c30000831b0000801800007c0803a64e800021813b00188109000480e8000438c30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080a7006090a3000490c30000831b0000801800007c0803a64e800021809b001838a3000080640014809b00103b230000807b00143b190000801800007c0803a64e800021831b0004801800007c0803a64e800021831b001882f8000482d7000c82b700003a830000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000827b0010926300048255002892430000969bfffc83160004801800007c0803a64e800021831b0000480001fc831b001082f8000482d7000880180008941bfffc807b000c83160004801800007c0803a64e80002182bb001482950004827400003a430000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000823300049223000492430000831b0000801800007c0803a64e8000212803000141820158821b001481f0000481cf001c814f0004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000812a009491230004811b000891030000800e002c941bfffc800a00b4941bfffc830a0004801800007c0803a64e80002180fb001c80c7000480a6000c38830000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000833b00149323000890830004831b00009303000083050014801800007c0803a64e80002182fb001c82d7000482b6002482960008947bfffc80150004941bfffc807b001c8314000c801800007c0803a64e8000213a630000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092630008825b001c92430004823b000492230000831b0000801800007c0803a64e800021807b0004831b000c801800007c0803a64e8000213b03000048000024821b001481f0000481cf001c830e0000947bfffc947bfffc947bfffc947bfffc3b7b0008815b001c812a00048109000c80e9000080c90004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000080bb001490a3000880860098908300048327010893230000971bfffc83080000801800007c0803a64e800021280300014182002c807b00003b1b00243c0002b3600088b07c0803a64e800021831b00247f0803a63b7b00284e800020807b0000831b00247f0803a63b7b00284e800020|@7085,1048575|192,3,@7071 1372,3,@7083 7083:C2,1612|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8fffc82d7000482b6000c829600003a630000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008258fff4924300048234007492230000973bfffc971bfffc967bfffc83150004801800007c0803a64e800021821b000481f0fffc81cf0004814e00088070fff4830a000c801800007c0803a64e800021813b00048109fffc80e8000480c70024947bfffc3860000183060000801800007c0803a64e80002180bb00088085fffc947bfffc8324001038830000386000013b190000801800007c0803a64e800021831b000c82f8fffc82d7000482b600043a830000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008275006c926300048258fff092430000969bfffc80150008941bfffc83150004801800007c0803a64e800021823b00148211fffc81f0000481cf000c39430000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00008131fff49123000891430004811b000091030000830e0014801800007c0803a64e80002180fb001480c7fffc80bb0008947bfffc80850000832500048305000838b800003ae4000038990000387700008306000c801800007c0803a64e80002182db001882b6fffc829500048274000c825400003a230000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008216fff49203000481f200a891e30000963bfffc83130004801800007c0803a64e80002181db001c814efffc812a00048109000c80e90004398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d000080cefff490c3000c3ca002a760a5419090a30008808efff090830004832700b89323000083080010801800007c0803a64e800021831b001c82f8fffc82d7000482b6001c8296002082760004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082530094924300048238fff0922300008015004c941bfffc80140000941bfffc80130004941bfffc831b0000801800007c0803a64e800021821b002881f0fffc81cf0004814e000439230000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000810a000c9103000491230000831b0000801800007c0803a64e80002180fb002838c30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000080bb000c90a300088087fff49083000490c30000831b0004801800007c0803a64e8000213b230000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d0000831b0020930300109323000c82fb001092e3000882db001892c3000482bb002492a30000831b0008801800007c0803a64e800021829b00288274fffc825300048232000c8212000081f2000439c30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00008154fff491430008812f009891230004811001089103000095dbfffc83110000801800007c0803a64e800021280300014182001c807b0000831b002c833b00307f2803a63b7b00344bfffb4c80fb002c80c7fffc80a600048085000c80650000832500048303000c398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000082e7fff492e3000882d9009892c300049303000083040000801800007c0803a64e800021280300014182011082bb002c8295fffc827400048253000880140008941bfffc8075fff483120004801800007c0803a64e800021823b00308211fffc81f0000481cf000039430000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000812e00749123000491430000831b0000801800007c0803a64e800021280300014182001c807b0004831b0030833b00347f2803a63b7b00384bfffa40811b003080e8fffc80c7000480a6000880860000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008324000c932300048308fff49303000083050010801800007c0803a64e800021807b000482fb00347ee803a63b7b00384e800020807b000082bb00307ea803a63b7b00344e800020|@7084,1048575|660,3,@2758 7084:S56|50415253455f44454328292e706172736544656328332970617273655369676e617475726528332967657457686572655479706573283129 7085:S40|50415253455f44454328292e706172736544656328332970617273655369676e6174757265283329 7086:C2,2552|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021971bfffc949bfffc947bfffc82f8000882d7000c82b70004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082980020928300048275008092630000973bfffc94bbfffc80160010941bfffc83150004801800007c0803a64e8000213a430000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d0000823b00109223000c3e0002b36210999c9203000881fb000491e3000492430000831b0000801800007c0803a64e80002181db0014814e0008812a0004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000810900589103000480fb000490e3000080090004941bfffc831b0000801800007c0803a64e80002180db001880a60008808500043b230000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008304005c9303000493230000831b0000801800007c0803a64e80002182fb001882d7000882b6000c82960000827600043a430000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000823b001492230008821300989203000481f400ec91e30000965bfffc83150000801800007c0803a64e8000212803000141820080807b00003b1b001c3c0002b3600099c47c0803a64e800021815b001c812a00088109000c80e9000038c30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080bb001890a30004808700289083000094dbfffc83080004801800007c0803a64e80002181db00004800075c81db001c814e0008812a000c810a000080ea0004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000080db001890c3000880a7009890a300048088004c9083000083090000801800007c0803a64e8000212803000141820328807b001c8323000883190008807b00188318000c801800007c0803a64e800021947bfffc947bfffc947bfffc82fb002082db002882b6000882950024947bfffc80170004941bfffc80170008941bfffc3860000183140000801800007c0803a64e800021827b0034825300088232002880030004941bfffc8063000883110000801800007c0803a64e8000213a030000807b00083b100000801800007c0803a64e80002139fb001081db000091cf0000395b0010906a0004393b0010811b000491090008398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002138fd0004919d000080db001090c7000080bb001490a70004809b001890870008807b0038832300088319000482e30010398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092e3000482db001c92c3000094fbfffc83180004801800007c0803a64e80002182bb003c38a30000809b0038807b00008315000c801800007c0803a64e800021829b003c827400088253000c823300003a030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000081fb003891e3000481d1004091c30000961bfffc83120004801800007c0803a64e800021815b0040812a000881090004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080e8002090e3000480db002490c3000083080004801800007c0803a64e80002138a30000809b003c807b0004831b00404bfffaf1398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138bd0004919d0000388000019085000490650000807b0040832300088319000c82f90000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082db003c92c3000482b7002892a3000094bbfffc83180004801800007c0803a64e800021829b0044827400088253001c398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d0000823b00189223000c3a0000019203000881fb000091e3000481db000491c300008312001c801800007c0803a64e80002139c30000480003cc807b001c8323000883190004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082f8004892e3000482db000092c30000801800b4941bfffc83180004801800007c0803a64e80002182bb0020829500088274000c3a430000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000823b001c9223000892430004821b00009203000083130014801800007c0803a64e80002181fb002081cf0008814e000c812e0000810e000438e30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000080db001c90c3000880a8009890a30004808900849083000094fbfffc830a0000801800007c0803a64e8000212803000141820268807b002483230008831900088003001c941bfffc807b002483180004801800007c0803a64e80002182fb002882d7000882b600003a830000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000827500889263000492830000831b0000801800007c0803a64e800021280300014182002c823b00288211000881f0001c38600001830f0008801800007c0803a64e8000213a43000048000110825b00288232000882110004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000081f2001891e3000481db000c91c3000083100004801800007c0803a64e800021815b0028812a00088109000480e90008947bfffc80080000941bfffc807b002c83070004801800007c0803a64e80002180db003038a30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000808600149083000490a30000831b0000801800007c0803a64e8000212803000141820024807b00043b1b00303c0002b3600099c47c0803a64e8000213a4300004800001c80bb0004809b002c807b0028831b00304bfff7353a4300003b7b0008807b0028832300088319000c82f90000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082db002492c3000482b7008892a30000965bfffc83180004801800007c0803a64e800021829b002c827400088253001c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000823b000092230004821b0008920300008312003c801800007c0803a64e80002139c3000048000030807b0024832300088319001c807b000083180028801800007c0803a64e80002139c30000947bfffc947bfffc947bfffc947bfffc947bfffc947bfffc947bfffc947bfffc3b7b0024386e00003b1b00203c0002b360009bc87c0803a64e80002182fb00147ee803a63b7b00244e800020|@7092,1048575|188,3,@7087 516,3,@7088 2212,3,@7088 2520,3,@7090 7087:S29|737472756374206f722066756e63746f72206170706c69636174696f6e 7088:C2,432|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc947bfffc947bfffc82f8fff882d8000082b6000882950024973bfffc971bfffc947bfffc80170004941bfffc80170008941bfffc3860000183140000801800007c0803a64e800021827b000c82530000823200088211002880030004941bfffc8063000883100000801800007c0803a64e80002139e30000807b00083b0f0000801800007c0803a64e80002139db0018815b0000914e0000393b001890690004391b001880fb000490e80008398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002138dd0004919d000080bb001890a60000809b001c90860004807b002090660008833b00108319000082f8000882d7001c82b70004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008295002092830004827b000c9263000094dbfffc80160008941bfffc83150004801800007c0803a64e800021825b00188232000038a300008092fffc807b00048311000c801800007c0803a64e800021831b0000833b001c801800007c0903a67f2803a63b7b002c4e800420|@7089,1048575| 7089:S47|50415253455f44454328292e706172736544656328332973747275637456616c283329737472756374456e64283129 7090:C2,576|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000082d7000882b6000c82960000827600043a430000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00008238fffc92230008821300989203000481f4009891e30000973bfffc971bfffc965bfffc83150000801800007c0803a64e800021280300014182009881db0004814e0000812a00088109001c80080050941bfffc80aeffe4808efffc806efff8830a0004801800007c0803a64e80002138e30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000038c0000190c3000890e3000480bb000490a30000831b0000801800007c0803a64e800021831b0008833b000c7f2803a63b7b00104bfffee081db0004814e0000812a00088109000c80e9000080c90004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000080aefffc90a300088086009890830004832700dc9323000083080000801800007c0803a64e8000212803000141820098831b000482f8000082d7000882b6001c80150050941bfffc80b8ffe48098fffc8078fff883170004801800007c0803a64e8000213a830000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003a6000039263000892830004825b000492430000831b0000801800007c0803a64e800021831b0008833b000c7f2803a63b7b00104bfffde0807b0000831b00087f0803a63b7b000c4e800020|@7091,1048575| 7091:S51|50415253455f44454328292e706172736544656328332973747275637456616c283329646f436f6e73747261696e7473283129 7092:S35|50415253455f44454328292e706172736544656328332973747275637456616c283329 7093:C2,92|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021949bfffc971bfffc947bfffc94bbfffc973bfffc386000013b1b00103c0002b360009f047c0803a64e800021833b00007f2803a63b7b00144e800020|@7096,1048575|60,3,@7094 7094:C2,980|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8fffc82d7000482b60004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082970018928300048278fff492630000973bfffc971bfffc83150004801800007c0803a64e800021825b00008232fffc8211000481f00008947bfffc80110014941bfffc80720000830f0004801800007c0803a64e80002181db0008814efffc812a00048109000038e30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080c8009c90c3000490e30000831b0000801800007c0803a64e800021280300014182004080bb00088085fffc80640004832300088065000083190000801800007c0803a64e80002138600001831b0008833b000c7f2803a63b7b00104bfffecc80bb00088085fffc80640004832300048303000880190000941bfffc8065000083180004801800007c0803a64e80002182fb000c82d7fffc3aa30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000829600109283000492a30000831b0000801800007c0803a64e800021280300014182007c827b000c8253fffc80bb0008809300008073fff883120008801800007c0803a64e800021947bfffc38600001831b00104bfffe0d398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a3d0004919d000090710004821b0000921100003871000081fb00147de803a63b7b00184e800020827b000c8253fffc823200048211000481f1000880100000941bfffc80730000830f0004801800007c0803a64e80002181db0010814efffc812a00048109000438e30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080c800b090c3000490e30000831b0000801800007c0803a64e80002128030001418200fc80bb00108085fffc8064000483230008806500008319000c801800007c0803a64e800021831b001082f8fffc82d7000482b6001c947bfffc80150020941bfffc80db001480b80000388000038078fff88317000c801800007c0803a64e8000213a830000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000827b00049263000492830000831b0000801800007c0803a64e800021947bfffc38600001831b001c4bfffc89398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a5d0004919d000090720004823b00009232000038720000821b00207e0803a63b7b00244e8000203860000180bb00147ca803a63b7b00184e800020|@7095,1048575| 7095:S42|50415253455f44454328292e706172736544656328332973747244656328332967657444656373283129 7096:S32|50415253455f44454328292e7061727365446563283329737472446563283329 7097:C2,1504|7f2802a66339000239600050800d00187d6bd8107c0b004040a00010800d00247c0803a64e80002182f8000482d7000c82b70000829700043a630000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000908300088254009892430004823500e492230000973bfffc971bfffc967bfffc949bfffc94bbfffc80130000941bfffc83160000801800007c0803a64e80002128030001418200f8821b0010398000093bbdffd87c1df04040a00010800d001c7c0803a64e80002139fd0004919d00003dc002b361cea94c91cf000081500014914f002081300010912f001c8110000c910f001880f0000490ef001480db000490cf001080bb000890af000c809b000c908f000880700008906f00048327001c8307000c82e7000082c70004398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d000091e3000c90a3000882b6008092a300048297000c9283000080190004941bfffc8318001c801800007c0803a64e800021831b0000833b0018801800007c0903a67f2803a63b7b001c4e800420821b001081f0000481cf000c814f0000812f0004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000811b00089103000880e9009890e3000480ca005090c30000830e0000801800007c0803a64e80002128030001418203c080bb001080850004806400088323000c807b00083b190000801800007c0803a64e800021947bfffc947bfffc947bfffc831b001882fb001c82d7000482b60024947bfffc80180004941bfffc80180008941bfffc3860000183150000801800007c0803a64e800021829b0028827400048253002880030004941bfffc8063000883120000801800007c0803a64e8000213a230000807b00083b110000801800007c0803a64e8000213a1b001081fb000091f0000039db0010906e0004395b0010813b0004912a0008398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021391d0004919d000080fb001090e8000080db001490c8000480bb001890a80008809b002c8064000483230004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008304001c9303000482fb002092e30000951bfffc83190004801800007c0803a64e80002182db003038a30000809b0028807b000083160018801800007c0803a64e80002182bb0030829500048274000c825400003a230000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000821b00289203000481f2004091e30000963bfffc83130004801800007c0803a64e800021947bfffc947bfffc947bfffc398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002139dd0004919d00003d4002b3614aadf8914e0000813b0024912e0008811b0030910e000438fb000091c7000038db000080bb002890a60004389b0000807b002c90640008398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213b3d0004919d0000831b00009319000082fb000492f9000482db000892d9000882bb00408295000482740004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008253002092430004823b003492230000973bfffc83130004801800007c0803a64e800021821b004438a30000809b003c807b000083100018801800007c0803a64e80002181fb004481cf0004814e000c812e000039030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080fb003c90e3000480c9002890c30000951bfffc830a0004801800007c0803a64e80002180bb0048808500048064001c8323001c398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d0000831b00289303000c3ae0000392e3000882db000092c3000482bb001492a300003b190000833b004c801800007c0903a67f2803a63b7b00504e80042080bb0010808500048064001c80630000833b00147f2803a63b7b00184e800020|@7101,1048575|208,3,@7098 1032,3,@7100 7098:C2,1108|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8001482d70008973bfffc971bfffc8078000c8316000c801800007c0803a64e80002182bb000082950014827400043a430000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082350020922300048215001092030000965bfffc801300b4941bfffc83130004801800007c0803a64e80002181fb000881cf0014814e000c39230000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000810f000c910300089123000480fb000090e30000951bfffc830a0014801800007c0803a64e80002180db000c80a600148085002483250008947bfffc80040004941bfffc807b00088319000c801800007c0803a64e8000213b030000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00009303000882fb000892e3000482db000492c30000831b0000801800007c0803a64e80002182bb001482950014827400088015001c941bfffc8075000c83130004801800007c0803a64e800021825b0018823200148211000039e30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000081d000dc91c3000491e30000831b0000801800007c0803a64e800021815b0018812a00148109000c80e9000080c9000438a30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000808a000c908300088326009893230004830700989303000094bbfffc83080000801800007c0803a64e80002128030001418200084800007082fb001c82d7001482b6000c8296000082760004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00008257000c924300088233009892230004821400dc9203000083150000801800007c0803a64e80002128030001408200084800007c82db001c82b6001482950004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008274006c92630004825600109243000083140004801800007c0803a64e800021823b001c38a300008091000c8071000883110018801800007c0803a64e8000213ae300004800001481fb001c81cf0014814e001c82ea0000813b001c8109001480e8000c80c80000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080a9000c90a30004808600a89083000096fbfffc83070004801800007c0803a64e800021807b0020832300148319001c80180024941bfffc80a300108083000c82e3000882c30004387700003b160000801800007c0803a64e8000213aa30000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d0000829b00209283001092a3000c827b000892630008825b000492430004823b001492230000831b0000833b0028801800007c0903a67f2803a63b7b002c4e800420|@7099,1048575| 7099:S49|50415253455f44454328292e7061727365446563283329737472756374757265446563283329646f537472446563283129 7100:C2,96|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc947bfffc83180008801800007c0803a64e800021833b0004807b000083190004833b0008801800007c0903a67f2803a63b7b000c4e800420|@7034,1048575| 7101:S38|50415253455f44454328292e7061727365446563283329737472756374757265446563283329 7102:C2,276|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d70008973bfffc971bfffc80160014941bfffc80180008941bfffc807b00008316000c801800007c0803a64e8000213aa30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003e8002b36294afd49283000892a30004827b000092630000831b0004801800007c0803a64e800021825b0008823200048211001481f10010398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d000039c0000391c3000c39400003914300083920000191230004810f00089103000083100004833b000c801800007c0903a67f2803a63b7b00104e800420|@7104,1048575|124,3,@7103 7103:S31|467265652074797065207661726961626c6573206e6f7420616c6c6f776564 7104:S36|50415253455f44454328292e7061727365446563283329676c6f62616c456e762d283129 7105:C2,1784|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000082d7000882b60008973bfffc971bfffc947bfffc8078ffe883150004801800007c0803a64e800021829b00048274000082530008823200003a030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000081f1009c91e3000492030000961bfffc83130014801800007c0803a64e80002128030001418200084800006481db0008814e0000812a000881090000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080e8000090e3000480db000090c30000830a0014801800007c0803a64e8000212803000140820008480000183860000181db000c7dc803a63b7b00104e80002080bb0008808500008064000883230004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000830400049303000482fb000092e3000083190000801800007c0803a64e800021280300014182051482db000882b600008295000882740004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000825b000492430004823b00009223000083130000801800007c0803a64e800021280300014082006c821b000881f0000081cf0008814e002c806a0000830a0004801800007c0803a64e800021813b00088109000080e8000880c70008947bfffc8069ffe88306001c801800007c0803a64e800021831b0000801800007c0803a64e800021280300014182009c4800000c947bfffc48000090809b000c80640000832300088319000880180018941bfffc8004ffe8941bfffc807b00008318000c801800007c0803a64e8000213ae30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003ec002b362d6b73c92c3000892e3000482bb000092a30000831b0004801800007c0803a64e80002138a300004800001038a00001947bfffc947bfffc947bfffc947bfffc821b001c81f0000081cf0008814e0000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000812a00f891230004811b001491030000830f0014801800007c0803a64e800021280300014182005080fb001c80a7ffd88087ffe88067ffdc3b0700003c0002b36000b7907c0803a64e80002180db001c80a6000080850008832400043b1b0000907800003afb000082d9008c92d70004480002b080fb001c80c7000080a6000880850000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000832400e893230004831b00149303000083060014801800007c0803a64e800021280300014182005082fb001c80b7ffd88097ffe88077ffdc3b1700003c0002b36000c3447c0803a64e80002182db001c82b6000082950008827400043a5b0000907200003a3b00008213007c921100044800020882fb001c82d7000082b6000882950000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000827400e492630004825b00149243000083160014801800007c0803a64e8000212803000141820044823b001c80b1ffd88091ffe88071ffdc8311ffe0801800007c0803a64e800021821b001c81f0000039db0000906e0000395b0000812f0010912a00044800016c823b001c8211000081f0000881cf0000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000814e005091430004813b00149123000083100014801800007c0803a64e8000212803000141820044811b001c80a8ffd88088ffe88068ffdc8308ffe0801800007c0803a64e80002180fb001c80c7000038bb000090650000389b00008066001090640004480000d0811b001c80e8000080c7000880a600088068ffe88305000c801800007c0803a64e800021809b001c832400008319000882f8001c947bfffc80170020941bfffc80c4ffd880a4ffe882c4ffdc82a4ffe438800003387600003b150000801800007c0803a64e8000213a830000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000827b00049263000492830000831b0000801800007c0803a64e800021825b0024823200003a1b00089070000039fb000881d1001091cf00043b7b0008807b0004831b001c4bfff9b9398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021395d0004919d0000906a0004813b0000912a0000386a0000811b00207d0803a63b7b00244e80002082db000882b60000829500088274000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008256ffe8924300043a200077922300008313000c801800007c0803a64e80002138600001821b000c7e0803a63b7b00104e800020|@7115,1048575|680,3,@7106 860,3,@7107 1028,3,@7111 7106:S74|4d4c205374616e6461726420726571756972657320273b27206265747765656e20646966666572656e74206b696e6473206f6620746f702d6c6576656c206465636c61726174696f6e2e 7107:C2,348|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000082d7000882b60008973bfffc971bfffc947bfffc949bfffc94bbfffc3864000083150000801800007c0803a64e800021829b000c827400003980000b3bbdffd07c1df04040a00010800d001c7c0803a64e8000213a5d0004919d00003e2002b36231b908923200008213001c9212002881f3001891f2002481d4fff491d20020815300149152001c8134fffc91320018811300089112001480fb000090f2001080db000490d2000c80bb000890b200088094fff8909200048068001c8328000c8308000082e8000482c30014398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00009243000c90c3000882b7008092a300048258000c9243000096dbfffc8319001c801800007c0803a64e800021831b0000833b0014801800007c0903a67f2803a63b7b00184e800420|@7110,1048575|128,3,@7108 7108:C2,2488|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8001482d70008973bfffc971bfffc8078000c8316000c801800007c0803a64e80002182bb000082950014827400043a430000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082350028922300048215001092030000965bfffc801300b4941bfffc83130004801800007c0803a64e80002181fb000881cf0014814e000c39230000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000810f000c910300089123000480fb000090e30000951bfffc830a0014801800007c0803a64e80002180db000c80a600148085002483250008947bfffc80040004941bfffc807b00088319000c801800007c0803a64e8000213b030000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00009303000882fb000892e3000482db000492c30000831b0000801800007c0803a64e80002182bb0014829500148274000c82540000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008235000c92230004821200849203000083130004801800007c0803a64e80002181fb001481cf0014814e0004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000812f002491230004810f001091030000830a0004801800007c0803a64e80002180fb001480c7001480a60008947bfffc8007001c941bfffc8067000c83050004801800007c0803a64e800021809b001c83240014831900003ae30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082d8008892c3000492e30000831b0000801800007c0803a64e800021280300014182007c829b001c827400148253001c80120040941bfffc3860000183120010801800007c0803a64e8000213a230000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000922300043e0000006210466892030000831b0000801800007c0803a64e8000213aa300004800037082bb001c82950014827400048254000880130000941bfffc8075000c83120004801800007c0803a64e800021823b00208211001481f0000439c30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000814f00bc9143000491c30000831b0000801800007c0803a64e800021280300014182009c813b00208109001480e8001c80070040941bfffc80070010941bfffc80bb00108089000c8069000883090020801800007c0803a64e800021831b0000801800007c0803a64e80002138c30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000090c300043ca0000060a5466890a30000831b0004801800007c0803a64e8000213aa3000048000250813b00208109001480e80004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080c7005890c3000480bb000890a30000800700b4941bfffc83070004801800007c0803a64e800021809b0024832400148319000c3ae30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000082c4000c92c3000892e3000482bb000092a3000096dbfffc83180014801800007c0803a64e800021829b0028827400148253002482330008947bfffc80120004941bfffc807b00088311000c801800007c0803a64e8000213a030000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00009203000881fb000891e3000481db000491c30000831b0000801800007c0803a64e800021815b0030812a00148109000c80e90000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080ca000c90c3000480a7009890a3000083080004801800007c0803a64e800021809b00308064001483230004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000831900889303000482fb001892e3000083190004801800007c0803a64e80002182db003038a300008096000c8076000883160018801800007c0803a64e80002182bb0030829500148274001c3a430000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092430004823b00049223000083130040801800007c0803a64e8000213aa300003b7b00083b7b0008821b002081f0001481cf000c814f0000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008130000c91230004810a00889103000096bbfffc830e0004801800007c0803a64e80002180fb002480c7001480a600088007001c941bfffc8067000c83050004801800007c0803a64e800021809b002883240014831900003ae30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082d800dc92c3000492e30000831b0000801800007c0803a64e80002182bb0028829500148274000c82540000823400043a030000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000081f5000c91e3000881d1009891c300048152009891430000961bfffc83130000801800007c0803a64e800021280300014182000848000070813b002c8109001480e8000c80c8000080a80004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00008089000c908300088325009893230004830600dc9303000083070000801800007c0803a64e80002128030001408200084800007c811b002c80e8001480c70004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080a6006c90a30004808800109083000083060004801800007c0803a64e800021833b002c38a300008099000c8079000883190018801800007c0803a64e800021392300004800001482fb002c82d7001482b6001c81350000829b002c827400148253000c82330000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008214000c9203000481f100a891e30000953bfffc83120004801800007c0803a64e80002181db0030814e0014812a001c80090044941bfffc80ae0010808e000c806e0008830e0004801800007c0803a64e80002139030000398000063bbdffe47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080fb003090e3001480db001090c300109103000c80bb000890a30008809b000490830004833b002493230000831b0000833b0038801800007c0903a67f2803a63b7b003c4e800420|@7109,1048575|760,3,I48 1044,3,I48 7109:S49|50415253455f44454328292e706172736544656328332966756e63746f72446563283329646f46756e6374446563283129 7110:S36|50415253455f44454328292e706172736544656328332966756e63746f72446563283329 7111:C2,316|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000082d7000882b60008973bfffc971bfffc947bfffc949bfffc94bbfffc3864000083150000801800007c0803a64e800021829b000c82740000398000073bbdffe07c1df04040a00010800d001c7c0803a64e8000213a5d0004919d00003e2002b36231c49c92320000821b00009212001881f3003491f2001481db000491d20010815b00089152000c8134fffc91320008811300089112000480e8001c80c8000c80a8000080880004398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00009243000c91c3000883240098932300048305000c930300008007000c941bfffc8306001c801800007c0803a64e800021831b0000833b0014801800007c0903a67f2803a63b7b00184e800420|@7114,1048575|128,3,@7112 7112:C2,592|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d70008973bfffc971bfffc807800108316000c801800007c0803a64e80002182bb000082950004827400048254000c3a230000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000821500109203000881f3009891e3000481d3009c91c30000963bfffc961bfffc83120014801800007c0803a64e800021815b0008812a00048109002480e90008947bfffc80080004941bfffc807b00088307000c801800007c0803a64e80002138c30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000090c3000880bb000890a30004809b000490830000831b0000801800007c0803a64e800021807b0010832300048319000c82f9000082c30010398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092c3000482b700a892a3000083180004801800007c0803a64e800021829b00108274000482530004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008234001492230004821400189203000083120004801800007c0803a64e80002181fb001038a30000808f0010806f000c830f0008801800007c0803a64e80002181db0010814e0004812a001c39030000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000080fb000c90e300089103000480db000490c3000083090030833b0014801800007c0903a67f2803a63b7b00184e800420|@7113,1048575| 7113:S49|50415253455f44454328292e70617273654465632833297369676e6174757265446563283329646f536967446563283129 7114:S38|50415253455f44454328292e70617273654465632833297369676e6174757265446563283329 7115:S38|50415253455f44454328292e70617273654465632833297061727365546f7044656373283129 7116:S23|50415253455f44454328292e7061727365446563283329 7117:O3|@2710,@7119,@7118 7118:O3|@2710,@7125,@7124 7119:O3|@2710,@7121,@7120 7120:O1|@7123 7121:O1|@7122 7122:C2,24|2c03004d4082000c386000034e800020386000014e800020|@2716,524289| 7123:C2,24|2c0300454082000c386000034e800020386000014e800020|@2716,524289| 7124:O1|@7130 7125:O3|@2710,@7127,@7126 7126:O1|@7129 7127:O1|@7128 7128:C2,24|2c0300434082000c386000034e800020386000014e800020|@2716,524289| 7129:C2,24|2c0300294082000c386000034e800020386000014e800020|@2716,524289| 7130:C2,184|2c03000f4082000c386000034e8000202c03001b4082000c386000034e8000202c0300314082000c386000034e8000202c03002b4082000c386000034e8000202c0300254082000c386000034e8000202c0300234082000c386000034e8000202c0300294082000c386000034e8000202c0300174082000c386000034e8000202c0300054082000c386000034e8000202c03003b4082000c386000034e8000202c03003d4082000c386000034e800020386000014e800020|@2711,524289| 7131:O12|@7133,@7134,@7216,@7229,@7307,@7308,@7309,@7498,@7588,@7623,@7624,@7132 7132:O2|@4210,@332 7133:O69|0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,52,53,54,55,56,47,57,46,44,45,51,62,65,63,64,67,66,48,49,58,59,61,50,43,33,34,35,36,37,38,39,40,41,42,@2838,@2735 7134:O49|@2702,@2707,@7136,@7138,@7140,@7142,@7144,@7146,@7148,@7150,@7152,@7154,@7126,@7156,@7158,@7160,@7162,@7164,@7166,@7168,@7170,@7172,@7174,@7176,@2701,@7178,@7180,@7182,@7184,@7186,@7127,@7120,@7188,@7190,@7192,@7121,@7194,@7196,@7198,@7201,@7203,@7205,@7205,@7207,@7124,@7209,@7211,@7213,@7135 7135:O1|@7215 7136:O1|@7137 7137:C2,24|2c0300034082000c386000034e800020386000014e800020|@2716,524289| 7138:O1|@7139 7139:C2,24|2c0300074082000c386000034e800020386000014e800020|@2716,524289| 7140:O1|@7141 7141:C2,24|2c0300094082000c386000034e800020386000014e800020|@2716,524289| 7142:O1|@7143 7143:C2,24|2c03000b4082000c386000034e800020386000014e800020|@2716,524289| 7144:O1|@7145 7145:C2,24|2c0300114082000c386000034e800020386000014e800020|@2716,524289| 7146:O1|@7147 7147:C2,24|2c0300134082000c386000034e800020386000014e800020|@2716,524289| 7148:O1|@7149 7149:C2,24|2c0300154082000c386000034e800020386000014e800020|@2716,524289| 7150:O1|@7151 7151:C2,24|2c03001d4082000c386000034e800020386000014e800020|@2716,524289| 7152:O1|@7153 7153:C2,24|2c0300214082000c386000034e800020386000014e800020|@2716,524289| 7154:O1|@7155 7155:C2,24|2c0300274082000c386000034e800020386000014e800020|@2716,524289| 7156:O1|@7157 7157:C2,24|2c03002d4082000c386000034e800020386000014e800020|@2716,524289| 7158:O1|@7159 7159:C2,24|2c03002f4082000c386000034e800020386000014e800020|@2716,524289| 7160:O1|@7161 7161:C2,24|2c0300334082000c386000034e800020386000014e800020|@2716,524289| 7162:O1|@7163 7163:C2,24|2c0300394082000c386000034e800020386000014e800020|@2716,524289| 7164:O1|@7165 7165:C2,24|2c03003f4082000c386000034e800020386000014e800020|@2716,524289| 7166:O1|@7167 7167:C2,24|2c0300694082000c386000034e800020386000014e800020|@2716,524289| 7168:O1|@7169 7169:C2,24|2c03006b4082000c386000034e800020386000014e800020|@2716,524289| 7170:O1|@7171 7171:C2,24|2c03006f4082000c386000034e800020386000014e800020|@2716,524289| 7172:O1|@7173 7173:C2,24|2c0300714082000c386000034e800020386000014e800020|@2716,524289| 7174:O1|@7175 7175:C2,24|2c03005f4082000c386000034e800020386000014e800020|@2716,524289| 7176:O1|@7177 7177:C2,24|2c0300654082000c386000034e800020386000014e800020|@2716,524289| 7178:O1|@7179 7179:C2,24|2c03005d4082000c386000034e800020386000014e800020|@2716,524289| 7180:O1|@7181 7181:C2,24|2c0300594082000c386000034e800020386000014e800020|@2716,524289| 7182:O1|@7183 7183:C2,24|2c03005b4082000c386000034e800020386000014e800020|@2716,524289| 7184:O1|@7185 7185:C2,24|2c03007d4082000c386000034e800020386000014e800020|@2716,524289| 7186:O1|@7187 7187:C2,24|2c0300774082000c386000034e800020386000014e800020|@2716,524289| 7188:O1|@7189 7189:C2,24|2c0300474082000c386000034e800020386000014e800020|@2716,524289| 7190:O1|@7191 7191:C2,24|2c0300494082000c386000034e800020386000014e800020|@2716,524289| 7192:O1|@7193 7193:C2,24|2c03004b4082000c386000034e800020386000014e800020|@2716,524289| 7194:O1|@7195 7195:C2,24|2c03004f4082000c386000034e800020386000014e800020|@2716,524289| 7196:O1|@7197 7197:C2,24|2c0300554082000c386000034e800020386000014e800020|@2716,524289| 7198:O1|@7199 7199:C2,8|386000014e800020|@7200,524289| 7200:S16|496e745365742e656d7074792d283129 7201:O1|@7202 7202:C2,56|2c03005b4082000c386000034e8000202c0300614082000c386000034e8000202c0300034082000c386000034e800020386000014e800020|@2711,524289| 7203:O1|@7204 7204:C2,200|2c0300574082000c386000034e8000202c030087418200342c0300854182002c2c030083418200242c0300814182001c2c03007f418200142c0300614182000c2c0300034082000c386000034e8000202c03005b418200142c0300614182000c2c0300034082000c386000034e8000202c0300754082000c386000034e8000202c0300694082000c386000034e8000202c03006d4082000c386000034e8000202c03002f4082000c386000034e8000202c0300274082000c386000034e800020386000014e800020|@2711,524289| 7205:O1|@7206 7206:C2,176|2c03002f4082000c386000034e8000202c0300754082000c386000034e8000202c03006d4082000c386000034e8000202c0300694082000c386000034e8000202c030087418200342c0300854182002c2c030083418200242c0300814182001c2c03007f418200142c0300614182000c2c0300034082000c386000034e8000202c0300614182000c2c0300034082000c386000034e8000202c0300674082000c386000034e800020386000014e800020|@2711,524289| 7207:O1|@7208 7208:C2,224|2c0300574182007c2c030087418200742c0300854182006c2c030083418200642c0300814182005c2c03007f418200542c0300614182004c2c030003418200442c03005b4182003c2c030061418200342c0300034182002c2c030075418200242c0300694182001c2c03006d418200142c03002f4182000c2c0300274082000c386000034e8000202c0300194082000c386000034e8000202c03000d4082000c386000034e8000202c0300414082000c386000034e8000202c03001f4082000c386000034e8000202c0300354082000c386000034e800020386000014e800020|@2711,524289| 7209:O1|@7210 7210:C2,40|2c0300614082000c386000034e8000202c0300034082000c386000034e800020386000014e800020|@2711,524289| 7211:O1|@7212 7212:C2,72|2c0300754082000c386000034e8000202c0300694082000c386000034e8000202c0300034082000c386000034e8000202c03007d4082000c386000034e800020386000014e800020|@2711,524289| 7213:O1|@7214 7214:C2,136|2c0300534082000c386000034e8000202c03004b4082000c386000034e8000202c0300434082000c386000034e8000202c0300174082000c386000034e8000202c03003d4082000c386000034e8000202c0300514082000c386000034e8000202c03003b4082000c386000034e8000202c03000f4082000c386000034e800020386000014e800020|@2711,524289| 7215:C2,328|2c030057418200a42c0300874182009c2c030085418200942c0300834182008c2c030081418200842c03007f4182007c2c030061418200742c0300034182006c2c03005b418200642c0300614182005c2c030003418200542c0300754182004c2c030069418200442c03006d4182003c2c03002f418200342c0300274182002c2c030019418200242c03000d4182001c2c030041418200142c03001f4182000c2c0300354082000c386000034e8000202c03000f418200542c03001b4182004c2c030031418200442c03002b4182003c2c030025418200342c0300234182002c2c030029418200242c0300174182001c2c030005418200142c03003b4182000c2c03003d4082000c386000034e8000202c0300454082000c386000034e8000202c03004d4082000c386000034e8000202c0300434082000c386000034e800020386000014e800020|@2711,524289| 7216:O8|@2720,@2937,@7218,@4224,@7217,@4231,@4238,@3571 7217:O2|@7224,@7223 7218:O1|@7219 7219:C2,112|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002183030010971bfffc80c3001494dbfffc80a3001894bbfffc8083001c949bfffc82e3002096fbfffc82c3002496dbfffc80c3000c80a3000880830004806300003c0002b36000da2c7c0903a64e800420|@7222,983055|96,3,@7220 7220:C2,16|80c40000386600003b7b00184e800020|@7221,524303| 7221:S13|4c45585f28292e696428313029 7222:S12|4c45585f28292e6964283129 7223:O2|@7226,@2728 7224:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@7225,1048575| 7225:S24|4c45585f28292e707573684261636b53796d626f6c283129 7226:C2,264|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7000882a3001882950000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000827600049263000492830000973bfffc971bfffc949bfffc96bbfffc83160054801800007c0803a64e8000212803000141820064825b00088232000482110004398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002139fd0004919d00003dc002b361cedc2891cf00083d4002a0614ac7ac914f000481300000912f0000386f0000800d00287c0803a64e800021825b0000823b00049232000038600001821b000c7e0803a63b7b00104e800020|@7228,1048575|184,3,@7227 196,3,@227 7227:S31|417474656d707420746f20707573682074776f20706172656e746865736573 7228:S24|4c45585f28292e707573684261636b53796d626f6c283229 7229:O8|@7231,@7265,@7271,@7277,@7280,@7286,@7293,@7230 7230:O2|@7301,@7300 7231:O2|@7233,@7232 7232:O3|@7236,@7238,@7235 7233:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@7234,1048575| 7234:S19|534b4950535f28292e74657374666f72283129 7235:O3|@7259,@7238,@7258 7236:C2,472|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7000082b70004973bfffc971bfffc947bfffc949bfffc94bbfffc80160008941bfffc3865000083150000801800007c0803a64e8000213a830000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000827b000c9263000492830000831b0000801800007c0803a64e8000212803000141820038825b00108232000482110004807b000483100008801800007c0803a64e8000213860000381fb00147de803a63b7b00184e800020825b0010823200048211000881f1000480100000941bfffc807b0008830f0000801800007c0803a64e80002139c30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000815b000c9143000491c30000831b0000801800007c0803a64e8000212803000141820074813b00148109000480e80000807b00108307000c801800007c0803a64e80002180db0014809b000883060008801800007c0803a64e80002180bb0014808500048064000483230008807b00083b190000801800007c0803a64e80002138600003831b00187f0803a63b7b001c4e80002038600001813b00187d2803a63b7b001c4e800020|@7237,1048575| 7237:S19|534b4950535f28292e74657374666f72283329 7238:O3|@7240,@7253,@7239 7239:O7|@2702,@2707,@7136,@7184,@7255,@7254,@7209 7240:O4|63,64,@2838,@7241 7241:O2|@7243,@7242 7242:O69|7,@7246,@2793,@566,@2834,@2791,@2836,@2787,@2779,@2781,@2776,@2810,@2771,@2768,@2837,@2750,@2774,@2785,@2797,@2830,@2818,@2805,@2752,@2789,@2766,@2816,@2803,@2828,@2748,@2758,@2801,@2764,@2822,@2760,@2795,@2756,@2814,@2754,@2808,@2799,@2783,@2832,@2812,35,124,61,@2826,58,42,@2820,@2824,95,40,41,91,93,44,59,123,125,46,@4530,@7247,@7248,@7249,@7250,@7251,@7252,@7245 7243:C2,136|7f2802a663390002546bf80140a20010800d00347c0803a64e8000212c030001408000084800003882f800048197fffc558c09fc619600017c6bb038556bf80140a20010800d00347c0803a64e8000217c03b000408000084800001c973bfffc3c6002a0606395e0800d00287c0803a64e800021546c083a7ed7602e387600007f2803a64e800020|@7244,983041|96,3,@51 7244:S15|53796d626f6c732e72657072283129 7245:S14|756e6b6e6f776e2073796d626f6c 7246:S12|3c6964656e7469666965723e 7247:S17|3c74797065206964656e7469666965723e 7248:S17|3c737472696e6720636f6e7374616e743e 7249:S18|3c696e746567657220636f6e7374616e743e 7250:S15|3c7265616c20636f6e7374616e743e 7251:S15|3c776f726420636f6e7374616e743e 7252:S15|3c6368617220636f6e7374616e743e 7253:O5|@2937,@7218,@2720,@4224,@4231 7254:O1|@7257 7255:O1|@7256 7256:C2,24|2c0300814082000c386000034e800020386000014e800020|@2716,524289| 7257:C2,24|2c0300834082000c386000034e800020386000014e800020|@2716,524289| 7258:O3|@2710,@7263,@7254 7259:C2,708|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7000082b70004973bfffc971bfffc947bfffc949bfffc80160008941bfffc3864000083150000801800007c0803a64e800021829b000c82740004825300003a230000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000821200009203000492230000831b0000801800007c0803a64e800021280300014182005881db000c814e0004812a0004807b000483090004801800007c0803a64e80002138830000386000453c0002a1600074a87c0803a64e800021388000453c0002a1600074a87c0803a64e80002139e30000480000f481fb000c81cf0004814e0008812e0004800a0000941bfffc807b000883090000801800007c0803a64e800021811b001038e30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080c8000890c3000490e30000831b0000801800007c0803a64e800021280300014182003080bb0010808500048064000483230004807b00083b190000801800007c0803a64e80002139e300004800004880bb00108085000480640000832400048003000c941bfffc807b000c83190000801800007c0803a64e800021831b0000801800007c0803a64e80002139e300003b7b00043b7b0004831b000c82f8000482d7000495fbfffc80160010941bfffc807b000c8316000c801800007c0803a64e800021947bfffc3c8002b36084e5bc807b00143c0002a1600074a87c0803a64e800021809b00083c0002a1600074a87c0803a64e8000213c8002b36084e5d43c0002a1600074a87c0803a64e8000213aa30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a30008829b000092830004827b001092630000831b0004833b001c801800007c0903a67f2803a63b7b00204e800420|@7262,1048575|216,3,@511 236,3,@511 548,3,@7260 560,3,@511 580,3,@511 596,3,@7261 604,3,@511 7260:S14|2065787065637465642062757420 7261:S10|2077617320666f756e64 7262:S20|534b4950535f28292e6e6f74666f756e64283229 7263:O3|@2710,@7264,@7255 7264:O3|@2710,@7136,@7184 7265:O2|@7267,@7266 7266:O3|@7269,@7238,@7235 7267:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@7268,1048575| 7268:S18|534b4950535f28292e67657473796d283129 7269:C2,276|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7000082b70004973bfffc971bfffc947bfffc949bfffc80160008941bfffc3864000083150000801800007c0803a64e8000213a830000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000827b00089263000492830000831b0000801800007c0803a64e8000212803000141820030825b000c8232000482110004807b000483100008833b0010801800007c0903a67f2803a63b7b00144e800420825b000c8232000482110000807b00088310000c801800007c0803a64e80002181fb000c809b0004830f0008833b0010801800007c0903a67f2803a63b7b00144e800420|@7270,1048575| 7270:S18|534b4950535f28292e67657473796d283229 7271:O2|@7273,@7272 7272:O3|@7275,@7238,@7235 7273:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@7274,1048575| 7274:S19|534b4950535f28292e62616473796d73283129 7275:C2,136|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d70000973bfffc971bfffc949bfffc8316000c801800007c0803a64e80002182bb0004809b000083150008801800007c0803a64e800021829b00048274000482530004807b000083120008833b0008801800007c0903a67f2803a63b7b000c4e800420|@7276,1048575| 7276:S19|534b4950535f28292e62616473796d73283229 7277:O2|@7278,@7235 7278:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@7279,1048575| 7279:S20|534b4950535f28292e6e6f74666f756e64283129 7280:O2|@7282,@7281 7281:O3|@7284,@7238,@7235 7282:C2,64|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180c3000c80a30008808300048063000083180004801800007c0903a64e800420|@7283,1048575| 7283:S18|534b4950535f28292e736b69706f6e283129 7284:C2,512|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d70004973bfffc971bfffc947bfffc949bfffc94bbfffc94dbfffc3866000083160000801800007c0803a64e80002182bb001082950004827400083a430000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000823b000c922300049243000083130000801800007c0803a64e8000212803000140820144821b0010809b0000807b000483100008801800007c0803a64e80002181fb001081cf0004814e0004807b0000830a0000801800007c0803a64e800021813b00108109000480e8000838c30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080bb000890a30004809b000c9083000094dbfffc83070004801800007c0803a64e800021833b00148319000482f800083ac30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092c3000482bb000092a3000083170000801800007c0803a64e8000212803000140820044829b00148274000482530004807b000483120008801800007c0803a64e8000213b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bfffef438600001829b00187e8803a63b7b001c4e80002038600001821b00147e0803a63b7b00184e800020|@7285,1048575| 7285:S18|534b4950535f28292e736b69706f6e283429 7286:O2|@7288,@7287 7287:O3|@7290,@7238,@7235 7288:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@7289,1048575| 7289:S17|534b4950535f28292e6765746964283129 7290:C2,492|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7000882b70004973bfffc971bfffc947bfffc949bfffc94bbfffc80160000941bfffc3865000083150000801800007c0803a64e8000213a830000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000827b000c9263000492830000831b0000801800007c0803a64e800021280300014182005c825b00108232000482110004807b000483100004801800007c0803a64e80002181fb001081cf0004814e0004947bfffc807b0008830a0008801800007c0803a64e800021807b0000813b00187d2803a63b7b001c4e800020825b0010809b00043c6002b36063ef2883120008801800007c0803a64e800021823b00108211000481f00004807b0004830f0000801800007c0803a64e80002181db0010814e0004812a000839030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080fb000890e300049103000083090000801800007c0803a64e800021280300014082004080db001080a6000480850004807b000483040008801800007c0803a64e800021800d00187c1b004040a00010800d00207c0803a64e8000214bffff503c6000006063466880db00147cc803a63b7b00184e800020|@7292,1048575|264,3,@7291 468,3,I48 7291:S10|4964656e746966696572 7292:S17|534b4950535f28292e6765746964283329 7293:O2|@7295,@7294 7294:O3|@7297,@7238,@7287 7295:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@7296,1048575| 7296:S20|534b4950535f28292e6765744c6162656c283129 7297:C2,636|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7000082b70004973bfffc971bfffc947bfffc949bfffc80160008941bfffc3864000083150000801800007c0803a64e800021829b000c82740004825300003a230000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000821200049203000492230000831b0000801800007c0803a64e800021280300014182019c81fb000c81cf0004814e0004807b0004830a0004801800007c0803a64e800021706b00014182000c392000034800001081830000558c083c61890001552bf80140a20010800d00347c0803a64e8000212c0900014181001c38e300003c6002a0606395e0800d00287c0803a64e800021706b00014182000c390300004800001089830004558c083c6188000180fb000c80c7000480a60004947bfffc951bfffc807b000c83050008801800007c0803a64e800021388000fd807b00003f00000063184368801800007c0803a64e80002128030001418200084800002c38800061807b00003f00000063184368801800007c0803a64e800021280300014082000848000080809b0014806400048323000480190010941bfffc807b00108319000c801800007c0803a64e8000213b030000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003ee002b362f7f27c92e300089303000482db001092c30000831b0000801800007c0803a64e80002148000008947bfffc807b0008809b001c7c8803a63b7b00204e80002081fb000c81cf0004814e000880bb0004809b0008806a0018830f0008833b0010801800007c0903a67f2803a63b7b00144e800420|@7299,1048575|268,3,@51 364,3,I24 404,3,I24 516,3,@7298 7298:S25|4c6162656c73206d75737420626520312c322c332c2e2e2e2e 7299:S20|534b4950535f28292e6765744c6162656c283229 7300:O2|@7303,@7232 7301:C2,64|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180c3000c80a30008808300048063000083180004801800007c0903a64e800420|@7302,1048575| 7302:S19|534b4950535f28292e6765744c697374283129 7303:C2,92|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021971bfffc94bbfffc949bfffc947bfffc94dbfffc973bfffc3b1b00143c0002b36000f3b87c0803a64e800021833b00007f2803a63b7b00184e800020|@7306,1048575|60,3,@7304 7304:C2,196|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc386000018318fff0801800007c0803a64e800021833b000083190000947bfffc80b9fffc8099fff88079fff483180004801800007c0803a64e8000212803000141820014831b00044bffff913ae30000480000083ae00001398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213add0004919d000092f6000482bb000092b6000038760000829b00087e8803a63b7b000c4e800020|@7305,1048575| 7305:S29|534b4950535f28292e6765744c697374283429666f724c697374283129 7306:S19|534b4950535f28292e6765744c697374283429 7307:O8|@773,@206,9999,@4127,@4135,@4143,@4104,0 7308:O6|@5701,@5752,@5758,@5764,@4456,@773 7309:O48|@7311,@7314,@7317,@7323,@7328,@7333,@7338,@7343,@7348,@7353,@7356,@7361,@7366,@7369,@7375,0,@7380,@7383,@7388,@7391,@7396,@7401,@7404,@7410,@7415,@7418,@7423,@7428,@7433,@7438,@7444,@7450,@7456,@7459,@7461,@7466,@7471,@7476,@7481,@7486,@7491,@7494,@7497,@6425,@7310,@6156,@5626,@5627 7310:O1|-5 7311:O1|@7312 7312:C2,28|830300002c18fff14082000c386000034e800020386000014e800020|@7313,786433| 7313:S23|50415253455f5452454528292e69734964656e74283129 7314:O3|@7315,@5631,@773 7315:C2,180|7f2802a6633900023d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213afd0004919d000082d8000892d7000082b80004829500083d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213a7d0004919d000082540094925300003a230000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d000092e3000c92630008922300043ae0fff192e300007f2803a64e800020|@7316,1046529| 7316:S23|50415253455f5452454528292e6d6b4964656e74283129 7317:O3|@7319,@7318,@773 7318:O4|@5644,-1,@190,@7321 7319:C2,128|7f2802a6633900023d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213afd0004919d000082d8000892d700003aa30000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d0000829800049283000c92a3000892e300043ae0ffed92e300007f2803a64e800020|@7320,1032193| 7320:S24|50415253455f5452454528292e6d6b537472696e67283129 7321:O3|1,@2606,@7322 7322:O3|3,@9454,79992 7323:O3|@7325,@7324,@773 7324:O4|@7327,-1,@190,@7321 7325:C2,128|7f2802a6633900023d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213afd0004919d000082d8000892d700003aa30000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d0000829800049283000c92a3000892e300043ae0ffed92e300007f2803a64e800020|@7326,1032193| 7326:S21|50415253455f5452454528292e6d6b496e74283129 7327:S7|636f6e76496e74 7328:O3|@7330,@7329,@773 7329:O4|@7332,-1,@190,@7321 7330:C2,128|7f2802a6633900023d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213afd0004919d000082d8000892d700003aa30000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d0000829800049283000c92a3000892e300043ae0ffed92e300007f2803a64e800020|@7331,1032193| 7331:S22|50415253455f5452454528292e6d6b5265616c283129 7332:S8|636f6e765265616c 7333:O3|@7335,@7334,@773 7334:O4|@7337,-1,@190,@7321 7335:C2,128|7f2802a6633900023d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213afd0004919d000082d8000892d700003aa30000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d0000829800049283000c92a3000892e300043ae0ffed92e300007f2803a64e800020|@7336,1032193| 7336:S22|50415253455f5452454528292e6d6b43686172283129 7337:S8|636f6e7643686172 7338:O3|@7340,@7339,@773 7339:O4|@7342,-1,@190,@7321 7340:C2,128|7f2802a6633900023d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213afd0004919d000082d8000892d700003aa30000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d0000829800049283000c92a3000892e300043ae0ffed92e300007f2803a64e800020|@7341,1032193| 7341:S22|50415253455f5452454528292e6d6b576f7264283129 7342:S8|636f6e76576f7264 7343:O1|@7344 7344:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180830004806300003c0002b36000fc647c0903a64e800420|@7347,786435|40,3,@7345 7345:C2,72|7f2802a6633900023b030000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000908300089303000438800003908300007f2803a64e800020|@7346,786435| 7346:S24|50415253455f5452454528292e6d6b4170706c6963283229 7347:S24|50415253455f5452454528292e6d6b4170706c6963283129 7348:O1|@7349 7349:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a3000880830004806300003c0002b36000fd687c0903a64e800420|@7352,786439|44,3,@7350 7350:C2,76|7f2802a6633900023b030000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00009083000c90a300089303000438a0000590a300007f2803a64e800020|@7351,786439| 7351:S22|50415253455f5452454528292e6d6b436f6e64283329 7352:S22|50415253455f5452454528292e6d6b436f6e64283129 7353:O1|@7354 7354:C2,68|7f2802a6633900023b030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000930300043b00001b930300007f2803a64e800020|@7355,786433| 7355:S9|5475706c6554726565 7356:O1|@7357 7357:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a3000880830004806300003c0002b36000feec7c0903a64e800420|@7360,917511|44,3,@7358 7358:C2,128|7f2802a6633900023d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213b1d0004919d00003ae0000192f800003ae30000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d00009303001090a3000c9083000892e3000438a0ffe390a300007f2803a64e800020|@7359,917511| 7359:S32|50415253455f5452454528292e6d6b56616c4465636c61726174696f6e283329 7360:S32|50415253455f5452454528292e6d6b56616c4465636c61726174696f6e283129 7361:O1|@7362 7362:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a3000880830004806300003c0002b4600000387c0903a64e800420|@7365,786439|44,3,@7363 7363:C2,76|7f2802a6633900023b030000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d000090a3000c908300089303000438a0fff390a300007f2803a64e800020|@7364,786439| 7364:S32|50415253455f5452454528292e6d6b46756e4465636c61726174696f6e283329 7365:S32|50415253455f5452454528292e6d6b46756e4465636c61726174696f6e283129 7366:O1|@7367 7367:C2,120|7f2802a6633900023d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213b1d0004919d00003ae0000192f800003ae30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00009303000892e300043b000017930300007f2803a64e800020|@7368,917505| 7368:S26|50415253455f5452454528292e6d6b4f70656e54726565283129 7369:O2|@7371,@7370 7370:O2|@7373,@5631 7371:C2,132|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc947bfffc973bfffc389b000483180004801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000833b000493230000831b00089303000482fb00007ee803a63b7b000c4e800020|@7372,1048575| 7372:S32|50415253455f5452454528292e6d6b5374727563747572654964656e74283129 7373:C2,84|7f2802a66339000282f8000482d700083d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213abd0004919d000082960000929500009064000092a40004386000017f2803a64e800020|@7374,1032195| 7374:S32|50415253455f5452454528292e6d6b5374727563747572654964656e74283229 7375:O1|@7376 7376:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a3000880830004806300003c0002b4600003887c0903a64e800420|@7379,786439|44,3,@7377 7377:C2,68|7f2802a663390002398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213b1d0004919d000090b800089098000490780000387800007f2803a64e800020|@7378,786439| 7378:S28|50415253455f5452454528292e6d6b56616c42696e64696e67283329 7379:S28|50415253455f5452454528292e6d6b56616c42696e64696e67283129 7380:O3|@7381,@773,@5631 7381:C2,272|7f2802a6633900023d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ac0000192d7000082d8000882b600083d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213a9d0004919d000082750094927400003d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213a5d0004919d000082380004923200003d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213a1d0004919d000092300000398000053bbdffe87c1df04040a00010800d001c7c0803a64e80002139fd0004919d0000920f001092ef000c928f0008906f0004924f0000386f00007f2803a64e800020|@7382,1048065| 7382:S25|50415253455f5452454528292e6d6b436c617573616c283129 7383:O1|@7384 7384:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a3000880830004806300003c0002b4600005f07c0903a64e800420|@7387,786439|44,3,@7385 7385:C2,68|7f2802a663390002398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213b1d0004919d000090b800089098000490780000387800007f2803a64e800020|@7386,786439| 7386:S24|50415253455f5452454528292e6d6b436c61757365283329 7387:S24|50415253455f5452454528292e6d6b436c61757365283129 7388:O1|@7389 7389:C2,68|7f2802a6633900023b030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000930300043b000013930300007f2803a64e800020|@7390,786433| 7390:S4|4c697374 7391:O1|@7392 7392:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180830004806300003c0002b4600007607c0903a64e800420|@7395,786435|40,3,@7393 7393:C2,72|7f2802a6633900023b030000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000093030008908300043880fffb908300007f2803a64e800020|@7394,786435| 7394:S28|50415253455f5452454528292e6d6b436f6e73747261696e74283229 7395:S28|50415253455f5452454528292e6d6b436f6e73747261696e74283129 7396:O1|@7397 7397:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180830004806300003c0002b4600008687c0903a64e800420|@7400,786435|40,3,@7398 7398:C2,72|7f2802a6633900023b030000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000090830008930300043880ffef908300007f2803a64e800020|@7399,786435| 7399:S25|50415253455f5452454528292e6d6b4c617965726564283229 7400:S25|50415253455f5452454528292e6d6b4c617965726564283129 7401:O1|@7402 7402:C2,68|7f2802a6633900023b030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000930300043b00000d930300007f2803a64e800020|@7403,786433| 7403:S2|466e 7404:O2|@7406,@7405 7405:O2|@7408,@773 7406:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@7407,1048575| 7407:S27|50415253455f5452454528292e6d6b4d6174636854726565283129 7408:C2,212|7f2802a6633900023d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213afd0004919d000082d8000492d700003d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213abd0004919d000092d50000398000053bbdffe87c1df04040a00010800d001c7c0803a64e8000213a9d0004919d000092b4001092f4000c9074000890b4000490940000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00009283000438a0ffeb90a300007f2803a64e800020|@7409,1032199| 7409:S27|50415253455f5452454528292e6d6b4d6174636854726565283329 7410:O1|@7411 7411:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a3000880830004806300003c0002b460000b907c0903a64e800420|@7414,917511|44,3,@7412 7412:C2,128|7f2802a6633900023d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213b1d0004919d00003ae0000192f800003ae30000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d00009303001092e3000c9083000890a3000438a0001590a300007f2803a64e800020|@7413,917511| 7413:S34|50415253455f5452454528292e6d6b4c6f63616c4465636c61726174696f6e283329 7414:S34|50415253455f5452454528292e6d6b4c6f63616c4465636c61726174696f6e283129 7415:O1|@7416 7416:C2,68|7f2802a6633900023b030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000930300043b00ffe5930300007f2803a64e800020|@7417,786433| 7417:S15|547970654465636c61726174696f6e 7418:O1|@7419 7419:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180830004806300003c0002b460000d607c0903a64e800420|@7422,786435|40,3,@7420 7420:C2,80|7f2802a6633900023b030000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00009083000c9303000838800001908300043b000007930300007f2803a64e800020|@7421,786435| 7421:S37|50415253455f5452454528292e6d6b44617461747970654465636c61726174696f6e283229 7422:S37|50415253455f5452454528292e6d6b44617461747970654465636c61726174696f6e283129 7423:O1|@7424 7424:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180830004806300003c0002b460000e887c0903a64e800420|@7427,786435|40,3,@7425 7425:C2,72|7f2802a6633900023b030000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000090830008930300043880fff9908300007f2803a64e800020|@7426,786435| 7426:S37|50415253455f5452454528292e6d6b44617461747970655265706c69636174696f6e283229 7427:S37|50415253455f5452454528292e6d6b44617461747970655265706c69636174696f6e283129 7428:O1|@7429 7429:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a3000880830004806300003c0002b460000fac7c0903a64e800420|@7432,786439|44,3,@7430 7430:C2,76|7f2802a6633900023b030000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00009083000c9303000890a3000438a0000190a300007f2803a64e800020|@7431,786439| 7431:S36|50415253455f5452454528292e6d6b416273747970654465636c61726174696f6e283329 7432:S36|50415253455f5452454528292e6d6b416273747970654465636c61726174696f6e283129 7433:O1|@7434 7434:C2,64|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180c3000c80a3000880830004806300003c0002b4600010d07c0903a64e800420|@7437,786447|48,3,@7435 7435:C2,72|7f2802a663390002398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213b1d0004919d00009098000c90d8000890b8000490780000387800007f2803a64e800020|@7436,786447| 7436:S29|50415253455f5452454528292e6d6b5479706542696e64696e67283429 7437:S29|50415253455f5452454528292e6d6b5479706542696e64696e67283129 7438:O2|@7440,@7439 7439:O2|@7442,@5631 7440:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@7441,1048575| 7441:S33|50415253455f5452454528292e6d6b446174617479706542696e64696e67283129 7442:C2,180|7f2802a66339000282f8000482d700083d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213abd0004919d00008296008c929500003d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213a7d0004919d00003a40000192530000398000053bbdffe87c1df04040a00010800d001c7c0803a64e8000213a5d0004919d0000927200109092000c90b2000892b2000490720000387200007f2803a64e800020|@7443,1044487| 7443:S33|50415253455f5452454528292e6d6b446174617479706542696e64696e67283329 7444:O2|@7446,@7445 7445:O2|@7448,@5631 7446:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@7447,1048575| 7447:S27|50415253455f5452454528292e6d6b457842696e64696e67283129 7448:C2,128|7f2802a66339000282f8000482d700083d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213abd0004919d00008296009492950000398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213a7d0004919d00009093000c90b3000892b3000490730000387300007f2803a64e800020|@7449,1040391| 7449:S27|50415253455f5452454528292e6d6b457842696e64696e67283329 7450:O2|@7452,@7451 7451:O2|@7454,@206 7452:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@7453,1048575| 7453:S30|50415253455f5452454528292e6d6b4c6162656c6c656454726565283129 7454:C2,124|7f2802a6633900023d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213afd0004919d000082d8000492d700003aa30000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a3000c92e300089083000438800011908300007f2803a64e800020|@7455,1015811| 7455:S30|50415253455f5452454528292e6d6b4c6162656c6c656454726565283229 7456:O2|@7457,@5631 7457:C2,520|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7000c82b700083a830000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00003a6000019263000c3a400001924300083a200001922300048215009092030000973bfffc971bfffc969bfffc83160018801800007c0803a64e80002181fb000481cf0004814e000c39230000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000091230004811b000091030000953bfffc830a0028801800007c0803a64e80002180fb000880c7000480a6000c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021389d0004919d00003b2000019324000490640000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003b000001930300049083000083050024801800007c0803a64e80002182fb000882d7000482b6000c3a830000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000827b00009263000492830000969bfffc83150020801800007c0803a64e8000213a430000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d0000823b00009223000c92430008821b00089203000439e0ffe791e3000081db00107dc803a63b7b00144e800020|@7458,1048575| 7458:S26|50415253455f5452454528292e6d6b53656c6563746f72283129 7459:O1|@7460 7460:C2,68|7f2802a6633900023b030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000930300043b000019930300007f2803a64e800020|@2355,786433| 7461:O1|@7462 7462:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180830004806300003c0002b4600018dc7c0903a64e800420|@7465,786435|40,3,@7463 7463:C2,72|7f2802a6633900023b030000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000090830008930300043880000f908300007f2803a64e800020|@7464,786435| 7464:S28|50415253455f5452454528292e6d6b48616e646c6554726565283229 7465:S28|50415253455f5452454528292e6d6b48616e646c6554726565283129 7466:O1|@7467 7467:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180830004806300003c0002b4600019e47c0903a64e800420|@7470,786435|40,3,@7468 7468:C2,72|7f2802a6633900023b030000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000093030008908300043880001f908300007f2803a64e800020|@7469,786435| 7469:S23|50415253455f5452454528292e6d6b5768696c65283229 7470:S23|50415253455f5452454528292e6d6b5768696c65283129 7471:O1|@7472 7472:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180830004806300003c0002b460001ae47c0903a64e800420|@7475,786435|40,3,@7473 7473:C2,72|7f2802a6633900023b030000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000090830008930300043880fffd908300007f2803a64e800020|@7474,786435| 7474:S22|50415253455f5452454528292e6d6b43617365283229 7475:S22|50415253455f5452454528292e6d6b43617365283129 7476:O1|@7477 7477:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180830004806300003c0002b460001be47c0903a64e800420|@7480,786435|40,3,@7478 7478:C2,72|7f2802a6633900023b030000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000090830008930300043880ffff908300007f2803a64e800020|@7479,786435| 7479:S25|50415253455f5452454528292e6d6b416e64616c736f283229 7480:S25|50415253455f5452454528292e6d6b416e64616c736f283129 7481:O1|@7482 7482:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180830004806300003c0002b460001cec7c0903a64e800420|@7485,786435|40,3,@7483 7483:C2,72|7f2802a6633900023b030000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000090830008930300043880ffe9908300007f2803a64e800020|@7484,786435| 7484:S24|50415253455f5452454528292e6d6b4f72656c7365283229 7485:S24|50415253455f5452454528292e6d6b4f72656c7365283129 7486:O1|@7487 7487:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180830004806300003c0002b460001dec7c0903a64e800420|@7490,786435|40,3,@7488 7488:C2,72|7f2802a6633900023b030000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000930300089083000438800009908300007f2803a64e800020|@7489,786435| 7489:S27|50415253455f5452454528292e6d6b446972656374697665283229 7490:S27|50415253455f5452454528292e6d6b446972656374697665283129 7491:O1|@7492 7492:C2,68|7f2802a6633900023b030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000930300043b00fff5930300007f2803a64e800020|@7493,786433| 7493:S6|457870536571 7494:O1|@7495 7495:C2,68|7f2802a6633900023b030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000930300043b00000b930300007f2803a64e800020|@7496,786433| 7496:S13|45784465636c61726174696f6e 7497:O1|14 7498:O21|@773,@7500,@7503,@7506,@7509,@7512,@7515,@7518,@7523,@7528,@7534,@7537,@7540,@7546,@7551,@7556,@7562,@7568,@7574,@7579,@7499 7499:O1|@7584 7500:O1|@7501 7501:C2,68|7f2802a6633900023b030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000930300043b00000f930300007f2803a64e800020|@7502,786433| 7502:S12|537472756374757265446563 7503:O2|@7504,@4982 7504:C2,148|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d70008973bfffc947bfffc3c6000006063466883160080801800007c0803a64e8000213aa30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a30008829b0000928300043a60fff392630000825b00047e4803a63b7b00084e800020|@7505,1048575|48,3,I48 7505:S25|535452554354555245535f28292e6d6b537472756374283129 7506:O1|@7507 7507:C2,68|7f2802a6633900023b030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000930300043b00000b930300007f2803a64e800020|@7508,786433| 7508:S12|5369676e6174757265446563 7509:O1|@7510 7510:C2,68|7f2802a6633900023b030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000930300043b00fff7930300007f2803a64e800020|@7511,786433| 7511:S6|536967446563 7512:O1|@7513 7513:C2,68|7f2802a6633900023b030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000930300043b000005930300007f2803a64e800020|@7514,786433| 7514:S10|46756e63746f72446563 7515:O1|@7516 7516:C2,68|7f2802a6633900023b030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000930300043b00fffb930300007f2803a64e800020|@7517,786433| 7517:S10|496e636c756465536967 7518:O1|@7519 7519:C2,64|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180c3000c80a3000880830004806300003c0002b4600023a47c0903a64e800420|@7522,786447|48,3,@7520 7520:C2,80|7f2802a6633900023b030000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d000090a3001090c3000c930300089083000438c0000790c300007f2803a64e800020|@7521,786447| 7521:S27|535452554354555245535f28292e6d6b4c6f63616c646563283429 7522:S27|535452554354555245535f28292e6d6b4c6f63616c646563283129 7523:O1|@7524 7524:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180830004806300003c0002b4600024b47c0903a64e800420|@7527,917507|40,3,@7525 7525:C2,124|7f2802a6633900023d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213b1d0004919d00003ae0000192f800003ae30000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00009303000c9083000892e300043880000d908300007f2803a64e800020|@7526,917507| 7526:S27|535452554354555245535f28292e6d6b546f704c6576656c283229 7527:S27|535452554354555245535f28292e6d6b546f704c6576656c283129 7528:O2|@7530,@7529 7529:O2|@7532,@4982 7530:C2,208|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc947bfffc947bfffc947bfffc947bfffc947bfffc973bfffc82e3001096fbfffc3adb000896dbfffc80c3000c80a30008808300048063000083180004801800007c0803a64e800021398000063bbdffe47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082bb000492a30000829b000892830004827b000c92630008825b00109243000c823b001492230010821b00189203001481fb00007de803a63b7b001c4e800020|@7531,1048575| 7531:S35|535452554354555245535f28292e6d6b53747275637475726542696e64696e67283129 7532:C2,112|7f2802a66339000282f8000482d700083d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213abd0004919d00008296002c92950000827b0000825b0004925300009073000490d3000890b3000c92b3001090930014386000017f2803a63b7b00084e800020|@7533,1044495| 7533:S35|535452554354555245535f28292e6d6b53747275637475726542696e64696e67283629 7534:O2|@7535,@4982 7535:C2,128|7f2802a66339000282f8000482d700083d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213abd0004919d00008296002c929500003a630000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a30008926300043aa0fff192a300007f2803a64e800020|@7536,1040385| 7536:S30|535452554354555245535f28292e6d6b5374727563744964656e74283129 7537:O1|@7538 7538:C2,68|7f2802a6633900023b030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000930300043b00fff5930300007f2803a64e800020|@7539,786433| 7539:S14|5369676e61747572654964656e74 7540:O2|@7542,@7541 7541:O2|@7544,@6765 7542:C2,168|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc947bfffc947bfffc947bfffc973bfffc38db000480a30008808300048063000083180004801800007c0803a64e800021398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d0000833b000493230000831b00089303000482fb000c92e3000882db001092c3000c82bb00007ea803a63b7b00144e800020|@7543,1048575| 7543:S35|535452554354555245535f28292e6d6b5369676e617475726542696e64696e67283129 7544:C2,84|7f2802a6633900023d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213afd0004919d000082d8000492d7000090a600009066000492e600089086000c386000017f2803a64e800020|@7545,983055| 7545:S35|535452554354555245535f28292e6d6b5369676e617475726542696e64696e67283429 7546:O1|@7547 7547:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a3000880830004806300003c0002b460002ad07c0903a64e800420|@7550,786439|44,3,@7548 7548:C2,76|7f2802a6633900023b030000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00009083000c9303000890a3000438a0001190a300007f2803a64e800020|@7549,786439| 7549:S25|535452554354555245535f28292e6d6b56616c536967283329 7550:S25|535452554354555245535f28292e6d6b56616c536967283129 7551:O1|@7552 7552:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a3000880830004806300003c0002b460002be07c0903a64e800420|@7555,786439|44,3,@7553 7553:C2,76|7f2802a6633900023b030000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00009083000c9303000890a3000438a0ffff90a300007f2803a64e800020|@7554,786439| 7554:S24|535452554354555245535f28292e6d6b4578536967283329 7555:S24|535452554354555245535f28292e6d6b4578536967283129 7556:O2|@7558,@7557 7557:O2|@7560,@4982 7558:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@7559,1048575| 7559:S30|535452554354555245535f28292e6d6b46756e63746f724170706c283129 7560:C2,132|7f2802a66339000282f8000482d700083d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213abd0004919d000082960054929500003a630000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a3000c92630008908300043880fffd908300007f2803a64e800020|@7561,1040387| 7561:S30|535452554354555245535f28292e6d6b46756e63746f724170706c283229 7562:O2|@7564,@7563 7563:O2|@7566,@4982 7564:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@7565,1048575| 7565:S28|535452554354555245535f28292e6d6b466f726d616c417267283129 7566:C2,132|7f2802a66339000282f8000482d700083d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213abd0004919d00008296002c929500003a630000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00009083000c92a300089263000438800003908300007f2803a64e800020|@7567,1040387| 7567:S28|535452554354555245535f28292e6d6b466f726d616c417267283229 7568:O2|@7570,@7569 7569:O2|@7572,@4982 7570:C2,228|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc947bfffc947bfffc947bfffc947bfffc947bfffc947bfffc973bfffc82e3001096fbfffc82c3001496dbfffc3abb000c96bbfffc80c3000c80a30008808300048063000083180004801800007c0803a64e800021398000073bbdffe07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000829b000492830000827b000892630004825b000c92430008823b00109223000c821b00149203001081fb001891e3001481db001c91c30018815b00007d4803a63b7b00204e800020|@7571,1048575| 7571:S33|535452554354555245535f28292e6d6b46756e63746f7242696e64696e67283129 7572:C2,120|7f2802a66339000282f8000482d700083d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213abd0004919d00008296005492950000827b0000825b00089253000090d3000480db000490d300089073000c90b3001092b3001490930018386000017f2803a63b7b000c4e800020|@7573,1044495| 7573:S33|535452554354555245535f28292e6d6b46756e63746f7242696e64696e67283729 7574:O1|@7575 7575:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a3000880830004806300003c0002b46000319c7c0903a64e800420|@7578,786439|44,3,@7576 7576:C2,76|7f2802a6633900023b030000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00009083000c9303000890a3000438a0fff990a300007f2803a64e800020|@7577,786439| 7577:S26|535452554354555245535f28292e6d6b53686172696e67283329 7578:S26|535452554354555245535f28292e6d6b53686172696e67283129 7579:O1|@7580 7580:C2,72|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002183030010971bfffc80c3000c80a3000880830004806300003c0002b4600032b87c0903a64e800420|@7583,786447|56,3,@7581 7581:C2,128|7f2802a663390002398000053bbdffe87c1df04040a00010800d001c7c0803a64e8000213b1d0004919d000090d800109098000c90b800089078000480db000090d80000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00009303000438a0ffef90a300007f2803a63b7b00044e800020|@7582,786447| 7582:S28|535452554354555245535f28292e6d6b576865726554797065283529 7583:S28|535452554354555245535f28292e6d6b576865726554797065283129 7584:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a3000880830004806300003c0002b4600033f47c0903a64e800420|@7587,786439|44,3,@7585 7585:C2,76|7f2802a6633900023b030000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d000090a3000c908300089303000438a0000990a300007f2803a64e800020|@7586,786439| 7586:S32|535452554354555245535f28292e6d6b536967436f6e73747261696e74283329 7587:S32|535452554354555245535f28292e6d6b536967436f6e73747261696e74283129 7588:O1|@7589 7589:O2|@7591,@7590 7590:O4|@7594,@7611,@7622,@7593 7591:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@7592,1048575| 7592:S25|50415253455f5459504528292e706172736554797065283129 7593:O3|@2710,@7172,@7186 7594:C2,504|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021949bfffc971bfffc94bbfffc82f8000482d700043aa30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000829600109283000492a30000973bfffc96bbfffc83160028801800007c0803a64e8000213b1b00103c0002b4600037747c0803a64e800021827b000c825300048232000c8212000081f2000439c30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000815b001091430008812f000091230004811000149103000095dbfffc83110004801800007c0803a64e800021280300014182007c80fb001080c7000480a6001480050008941bfffc80bb0010809b0018807b00083b0700004bfffed938830000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000090830004833b000493230000831b0000833b000c801800007c0903a67f2803a63b7b001c4e80042080fb001080c7000480a6000c80860004398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d0000833b00149323000c3f0002b463184e149303000882e4000092e3000482db000492c300008305000c801800007c0803a64e800021807b000082bb00087ea803a63b7b00184e800020|@7610,1048575|132,3,@7595 440,3,@7609 7595:C2,404|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021971bfffc82f8fffc82d7000482b600043a830000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008275000c9263000492830000973bfffc83150028801800007c0803a64e800021947bfffc3b1b00083c0002b4600039247c0803a64e800021825b00088232fffc8211000481f0000c81d000008150000439230000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000811200009103000880ea000090e3000480ce001090c30000953bfffc830f0004801800007c0803a64e800021280300014182008080bb000c8085fffc806400048323001480190004941bfffc3b1b00103c0002b460004c807c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b1d0004919d00009078000482fb000492f8000038780000831b0000833b000c801800007c0903a67f2803a63b7b00144e800420807b000080bb00087ca803a63b7b00104e800020|@7608,1048575|128,3,@7596 288,3,@7606 7596:C2,2592|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000082d7fffc82b600048295000082750008973bfffc971bfffc947bfffc80140028941bfffc8077000083130004801800007c0803a64e800021825b0008823200008211fffc81f0000481cf000039430000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000812e00009123000491430000831b0000801800007c0803a64e80002128030001418200b480fb000880c7000080a6fffc808500048064000883230000806600003b190000801800007c0803a64e800021386000013b1b000c3c0002b4600043607c0803a64e800021831b000882f8000082d7fffc82b600048295000c827500003a430000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082370000922300048213000c92030000965bfffc83140008801800007c0803a64e800021811b00004800072c811b000880e8000080c7fffc80a60004808500008065000880040028941bfffc83230004806700003b190000801800007c0803a64e800021831b000c82f8000082d7fffc82b60004829500003a630000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000825400189243000492630000831b0000801800007c0803a64e8000212803000141820324823b000c8211000081f0fffc81cf0004814e000880700000830a0000801800007c0803a64e800021947bfffc947bfffc813b00148109000080e8fffc80c7000480a6000c808600008066000483230000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000083080000930300089323000482e4001c92e3000083050004801800007c0803a64e800021280300014182003482db001482b600008295fffc82740004825300143a3b0000821200189211000039fb000039c0000191cf00044800021c82db001482b600008295fffc827400048253000c8233000082130004398000073bbdffe07c1df04040a00010800d001c7c0803a64e80002139fd0004919d00003dc002b461ce469c91cf0000926f0018815b0010914f00148134000c912f001081150000910f000c80f5fff890ef0008928f0004398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d000091e3000c9103000880d0000090c3000480b1000890a3000083120018801800007c0803a64e800021809b0014832400008319fffc82f8000482d7000c82b700003a830000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082790000926300048255001c92430000969bfffc83160008801800007c0803a64e800021823b00188211000081f0fffc81cf0004814e0014398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021393d0004919d00003d0002b4610848e89109000091c9000880f0000090e90004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00009123000480db000090c30000800a000c941bfffc830a0014801800007c0803a64e80002138a30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000388000039083000490a30000831b0000801800007c0803a64e8000213b3b0008907900003b1b00083ae0000192f800043b7b0008398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021391d0004919d000082db000092c8000082bb000492a8000448000370823b000c8211000081f0fffc81cf0004814e0000812e0008800a0028941bfffc8070000083090004801800007c0803a64e800021811b001080e8000080c7fffc80a60004808500003b230000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000830400049303000493230000831b0000801800007c0803a64e80002128030001418200dc82fb001082d7000082b6fffc82950004827400088016fff8941bfffc8076000083130008801800007c0803a64e800021831b0000801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a5d0004919d00003a2000019232000490720000821b001481f0000081cffffc814e0004812a000c810a0000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080ef000090e3000480c8000490c30000965bfffc83090008801800007c0803a64e800021811b00004800020082fb001082d7000082b6fffc82950004827400008254000880130028941bfffc8076000083120004801800007c0803a64e800021823b00148211000081f0fffc81cf0004814e000039230000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000810a00249103000491230000831b0000801800007c0803a64e800021280300014182010880fb001480c7000080a6fffc80850004806400148324000c8304000482e30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000082c6000092c3000882bb001092a300048298001c9283000096fbfffc83190010801800007c0803a64e800021827b0018825300008232fffc8211000481f0001039c30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003940000191430008812f00049123000491c30000831b0000801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021391d0004919d000038e0000190e80004906800004800006880fb001480c7000080a6fffc808500048064000c8324000083030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082e6000092e3000482d9002492c30000801800007c0803a64e80002139000001947bfffc3b7b00043b7b000882bb000c829500008274fffc825300048232000082120008951bfffc80110028941bfffc8074000083100004801800007c0803a64e80002181fb001481cf0000814efffc812a00048109000038e30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080c8002490c3000490e30000831b0000801800007c0803a64e800021280300014182002c807b00043b1b00183c0002b4600049f47c0803a64e80002180bb00187ca803a63b7b001c4e80002080bb00042c0500014082002c809b0014806400008323fffc8319000482f800108077000082db00187ec803a63b7b001c4e800020808500042c0400014082001880650000833b00187f2803a63b7b001c4e800020807b0014832300008319fffc82f8000482d7000c82b70000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008299000092830004827500249263000080050000941bfffc83160000801800007c0803a64e800021807b0000825b001c7e4803a63b7b00204e800020|@7605,1048575|240,3,@7597 788,3,@7599 1072,3,@7601 2356,3,@7603 7597:C2,720|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8fffc82d7000082b6fffc829500048274000482540008973bfffc971bfffc80130024941bfffc8076000083120004801800007c0803a64e800021823b00048211fffc81f0000081cffffc814e0004812a000439030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080e9002090e3000491030000831b0000801800007c0803a64e800021280300014182008c80bb00048085fffc806400008323fffc8319000482f80004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082d9000892c3000482a5fff892a3000083170028801800007c0803a64e800021829b00048274fffc8253000080b2fff8809200008312fffc801800007c0803a64e80002138c300004800008080db000480a6fffc808500008064fffc832300048319000c82f90000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082c4000092c3000482b7000492a3000083180000801800007c0803a64e800021829b00048274fffc825300008232fffc8211000481f0001080cf000081db0004814efffc812a00008109fffc80e8000480a7000c808700008067000483230020398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000083090000930300089323000482e4000892e3000094dbfffc83050004801800007c0803a64e800021280300014182005438600001831b00084bfffdbd398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213add0004919d00009076000482bb000092b6000038760000829b000c7e8803a63b7b00104e800020398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003ac0000192c3000482bb000092a30000829b000c7e8803a63b7b00104e800020|@7598,1048575| 7598:S69|50415253455f5459504528292e7061727365547970652833297475706c655479706528312962617369635479706528312974795365712d70726f636573734c697374283129 7599:C2,492|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8001882d7000c82b70004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082950018928300048278001492630000973bfffc971bfffc80160014941bfffc83150028801800007c0803a64e800021825b00043a230000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008212000c9203000492230000831b0000801800007c0803a64e80002181fb000481cf0018814e000c812e000039030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080ef000c90e3000480c9002090c30000951bfffc830a0008801800007c0803a64e80002180bb000880850018806400148324000483030010398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082e5001092e3000482c5001492c30000971bfffc83190028801800007c0803a64e80002182bb000c80b500088095000c83150004801800007c0803a64e8000213a830000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092830004827b000492630000831b0000833b0010801800007c0903a67f2803a63b7b00144e800420|@7600,1048575| 7600:S60|50415253455f5459504528292e7061727365547970652833297475706c655479706528312962617369635479706528312974795365712d6c2d283129 7601:C2,172|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000882d70008973bfffc947bfffc80160010941bfffc80180004941bfffc807b00008316000c801800007c0803a64e8000213aa30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000829b00089283000892a30004827b000092630000831b0004833b000c801800007c0903a67f2803a63b7b00104e800420|@7602,1048575| 7602:S58|50415253455f5459504528292e7061727365547970652833297475706c655479706528312962617369635479706528312974795365712d283129 7603:C2,492|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8fffc82d7000082b6fffc829500048274001482540008973bfffc971bfffc947bfffc80130000941bfffc8076000083120008801800007c0803a64e800021823b00088211fffc81f0000081cffffc814e0004812a001039030000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000080fb000490e3000880c9000490c3000491030000831b0000801800007c0803a64e80002180bb00088085fffc832400008319fffc82f8000482d70008947bfffc8079000083160000801800007c0803a64e80002182bb000c8295fffc827400008253fffc823200048211000081f1000880100028941bfffc80730000830f0004801800007c0803a64e80002181db0010814efffc812a00008109fffc80e8000480c7000038a30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000808600249083000490a30000831b0000801800007c0803a64e800021280300014182004c398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003b20000193230004831b000493030000831b0010833b00147f2803a63b7b00184bfffe34807b0004833b00147f2803a63b7b00184e800020|@7604,1048575| 7604:S64|50415253455f5459504528292e7061727365547970652833297475706c6554797065283129626173696354797065283129636f6e7374727563746f7273283129 7605:S49|50415253455f5459504528292e7061727365547970652833297475706c6554797065283129626173696354797065283129 7606:C2,268|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc8078fff83c0002b4600039247c0803a64e800021833b00008319000082f8fffc82d7000482b6000c82960000827600043a430000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00008238000092230008821300009203000481f4001091e30000965bfffc83150004801800007c0803a64e8000212803000141820014831b00044bffff4939c300004800000839c00001398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021395d0004919d000091ca0004813b0000912a0000386a0000811b00087d0803a63b7b000c4e800020|@7607,1048575|44,3,@7596 7607:S49|50415253455f5459504528292e7061727365547970652833297475706c6554797065283129706172736552657374283129 7608:S37|50415253455f5459504528292e7061727365547970652833297475706c6554797065283129 7609:S11|456e64206f662074797065 7610:S25|50415253455f5459504528292e706172736554797065283329 7611:O6|@7613,@7614,@7619,@7620,@7621,@7612 7612:O7|@4189,@4462,@4456,@5758,@5764,@5771,@5701 7613:O11|52,62,56,53,48,49,58,59,47,1,@2838 7614:O11|@7198,@7172,@7168,@7616,@7615,@7186,@7174,@7136,@7211,@2702,@2707 7615:O1|@7618 7616:O1|@7617 7617:C2,24|2c0300614082000c386000034e800020386000014e800020|@2716,524289| 7618:C2,24|2c0300634082000c386000034e800020386000014e800020|@2716,524289| 7619:O5|@2720,@2937,@7218,@4224,@4231 7620:O7|@7271,@7231,@7265,@7280,@7286,@7293,@7230 7621:O2|@773,@4021 7622:O3|@2710,@7172,@7168 7623:O2|@5992,@5974 7624:O1|@4393 7625:O3|@2710,@7168,@7172 7626:O3|@2710,@7627,@7182 7627:O3|@2710,@7174,@7176 7628:O3|@2710,@7152,@7148 7629:O3|@2710,@7124,@7127 7630:O3|@2710,@7209,@7154 7631:O3|@2710,@7632,@7127 7632:O3|@2710,@2701,@7124 7633:O3|@2710,@7148,@7138 7634:O3|@2710,@7213,@2701 7635:O3|@2710,@7213,@7148 7636:O3|@2710,@7635,@7138 7637:O3|@2710,@7638,@7138 7638:O3|@2710,@7168,@7182 7639:O3|@2710,@7194,@7164 7640:O3|@2710,@7156,@7182 7641:O3|@2710,@7146,@7207 7642:O3|@2710,@7162,@7207 7643:O3|@2710,@7156,@7205 7644:O3|@2710,@7140,@7174 7645:O3|@2710,@7172,@7170 7646:O3|@2710,@7168,@2701 7647:O3|@2710,@7646,@7172 7648:O3|@2710,@2701,@7148 7649:O3|@2710,@7174,@7142 7650:O3|@2710,@7209,@7158 7651:O2|@7652,@7131 7652:C2,812|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7002c973bfffc971bfffc947bfffc949bfffc8076000083160004801800007c0803a64e80002182bb00088295000482740008947bfffc807b00048313001c801800007c0803a64e800021831b0000801800007c0803a64e800021280300014082001838600003825b00107e4803a63b7b00144e800020825b0008724b00014182000c3a2000034800001081920000558c083c61910001562bf80140a20010800d00347c0803a64e8000212c110003408100a4724b00014182000c3a0000034800001081920000558c083c61900001560bf80140a20010800d00347c0803a64e8000212c100003418100183c6002a0606395e0800d00287c0803a64e800021724b00014182000c39f200004800001089920005558c083c618f0001388000bf386f00003f00000063184368801800007c0803a64e80002128030001418200183860000381fb00107de803a63b7b00144e800020724b00014182000c3a0000034800001081920000558c083c61900001560bf80140a20010800d00347c0803a64e8000212c1000034081016c724b00014182000c39e000034800001081920000558c083c618f000155ebf80140a20010800d00347c0803a64e8000212c0f0003418100183c6002a0606395e0800d00287c0803a64e800021724b00014182000c39d200004800001089920005558c083c618e00013880004f386e00003f00000063184368801800007c0803a64e80002128030001418200e0724b00014182000c39c000034800001081920000558c083c618e000155cbf80140a20010800d00347c0803a64e8000212c0e000540810094724b00014182000c394000034800001081920000558c083c618a0001554bf80140a20010800d00347c0803a64e8000212c0a0005418100183c6002a0606395e0800d00287c0803a64e800021724b00014182000c393200004800001089920006558c083c61890001388000bf38690000833b00103f00000063184368801800007c0903a67f2803a63b7b00144e80042038600001815b00107d4803a63b7b00144e8000203860000181fb00107de803a63b7b00144e800020|@7653,1048575|272,3,@51 328,3,I24 488,3,@51 544,3,I24 684,3,@51 744,3,I24 7653:S21|50415253455f44454328292e69735765616b283229 7654:O3|@2710,@7156,@7180 7655:O7|@7657,@2089,@7664,@7671,@7656,@343,@332 7656:O3|@7679,@7681,@7678 7657:O3|@7659,@7661,@7658 7658:O2|@7663,@9383 7659:O2|@7660,@9383 7660:C2,32|82e3000082d800047c17b0404082000c386000034e800020386000014e800020|@337,983041| 7661:O2|@7662,@9383 7662:C2,76|7f2802a6633900023ae30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092e300083ae0008b92e3000482f8000492e300007f2803a64e800020|@337,917505| 7663:C2,48|82e3000082d800047c17b0404082000c806300084e800020973bfffc3c6002a160630a30800d00287c0803a64e800021|@337,983041|28,3,@341 7664:O3|@7666,@7668,@7665 7665:O2|@7670,@9387 7666:O2|@7667,@9387 7667:C2,32|82e3000082d800047c17b0404082000c386000034e800020386000014e800020|@337,983041| 7668:O2|@7669,@9387 7669:C2,76|7f2802a6633900023ae30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092e300083ae0008b92e3000482f8000492e300007f2803a64e800020|@337,917505| 7670:C2,48|82e3000082d800047c17b0404082000c806300084e800020973bfffc3c6002a160630a30800d00287c0803a64e800021|@337,983041|28,3,@341 7671:O3|@7673,@7675,@7672 7672:O2|@7677,@9388 7673:O2|@7674,@9388 7674:C2,32|82e3000082d800047c17b0404082000c386000034e800020386000014e800020|@337,983041| 7675:O2|@7676,@9388 7676:C2,76|7f2802a6633900023ae30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092e300083ae0008b92e3000482f8000492e300007f2803a64e800020|@337,917505| 7677:C2,48|82e3000082d800047c17b0404082000c806300084e800020973bfffc3c6002a160630a30800d00287c0803a64e800021|@337,983041|28,3,@341 7678:O2|@7683,@9392 7679:O2|@7680,@9392 7680:C2,32|82e3000082d800047c17b0404082000c386000034e800020386000014e800020|@337,983041| 7681:O2|@7682,@9392 7682:C2,76|7f2802a6633900023ae30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092e300083ae0008b92e3000482f8000492e300007f2803a64e800020|@337,917505| 7683:C2,48|82e3000082d800047c17b0404082000c806300084e800020973bfffc3c6002a160630a30800d00287c0803a64e800021|@337,983041|28,3,@341 7684:O1|@5992 7685:O7|@2111,@2114,@2117,@2120,@2731,@4370,@2110 7686:O3|@2710,@2714,@2701 7687:C2,4284|7f2802a663390002396000e0800d00187d6bd8107c0b004040a00010800d00247c0803a64e80002182f8000482d7001c973bfffc971bfffc947bfffc949bfffc94bbfffc8076001483160018801800007c0803a64e8000213aa30000807b00003b150000801800007c0803a64e800021829b000c827400048253001c947bfffc8072000883120018801800007c0803a64e8000213a230000807b00043b110000801800007c0803a64e800021821b001081f0000481cf001c947bfffc806e0004830e0018801800007c0803a64e80002139430000807b00083b0a0000801800007c0803a64e800021813b00148109000480e8001c947bfffc8067000083070018801800007c0803a64e80002138c30000807b000c3b060000801800007c0803a64e80002180bb0018808500048324001c947bfffc8079000c83190018801800007c0803a64e8000213b030000807b0010801800007c0803a64e80002182fb0014947bfffc947bfffc947bfffc947bfffc947bfffc80170028941bfffc80170030941bfffc80170038941bfffc8017002c941bfffc80170044941bfffc80170040941bfffc388000013860000f3f00000063184c28801800007c0803a64e800021947bfffc38800001386000113f00000063184c28801800007c0803a64e800021947bfffc38800001386000133f00000063184c28801800007c0803a64e800021947bfffc388000013860001b3f00000063184c28801800007c0803a64e8000213adb0028907600003abb0028829b0000929500043a7b0028825b0004925300083a3b0028821b00089211000c81fb005481cf0004814e0004807b0050830a000c801800007c0803a64e800021813b00548109000480e8000080c8000480070000941bfffc807b005483060004801800007c0803a64e80002180bb005880850004832400003b030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082f9000c92e3000493030000831b0000801800007c0803a64e800021280300014182002c82bb00588295000482740004807b005483130000801800007c0803a64e8000213ac30000480000083ac0000182db005882b60004829500008275000480140000941bfffc807b005883130004801800007c0803a64e800021825b005c3a230000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000821200089203000492230000831b0000801800007c0803a64e800021280300014182007881fb005c81cf0004814e0004807b0058830a0008801800007c0803a64e8000212803000141820038813b005c8109000480e80004807b00588307000c801800007c0803a64e8000213c6002b460636aac800d00287c0803a64e8000213c6002b460636adc813b00607d2803a63b7b00644e80002081fb005c81cf0004814e002038600001830a0000801800007c0803a64e800021813b005c8109000480e8002880030004941bfffc8063000883070004801800007c0803a64e80002138c30000807b002c3b060000801800007c0803a64e80002180bb00608085000483240018398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b1d0004919d00009078000482fb000092f800003ac30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00009303000882bb005c92a30004828500089283000096dbfffc83190000801800007c0803a64e800021947bfffc947bfffc947bfffc388000013860000f3f00000063184c28801800007c0803a64e800021827b00503993ffff7c6b98385560f80140a20010800d00347c0803a64e8000217e4c1c1141a3fff0965bfffc38800001386000113f00000063184c28801800007c0803a64e800021823b00503991ffff7c6b88385560f80140a20010800d00347c0803a64e8000217e0c1c1141a3fff039fb0008920f000039db0008815b0000914e0004813b000c811b00083988ffff7d2b40385560f80140a20010800d00347c0803a64e8000217ce9661541a3fff080db0058280600014182012c809b00748064000483230024398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000831b0064930300043ae0009b92e3000094fbfffc83190018801800007c0803a64e80002182db007882b6000482950024947bfffc83140004801800007c0803a64e8000213a6300003c6002a16063f6583b130000801800007c0803a64e800021825b007c8232000482110014398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000081fb000091e3000839c04e2191c30004815b000c9143000083100010801800007c0803a64e800021813b007c8109000480e80024807b000083070008801800007c0803a64e80002138c30000386000013b060000801800007c0803a64e80002138a300004800001038a0000194fbfffc947bfffc80bb007c808500048064000483230008807b00783b190000801800007c0803a64e800021280300014182003882fb007c82d7000482b60004807b00788315000c801800007c0803a64e8000213c6002b460636aac800d00287c0803a64e8000213b000001831b007c82f8000482d700203860000183160000801800007c0803a64e80002182bb007c8295000482740020947bfffc3860000183130000801800007c0803a64e800021825b00808232000482110020947bfffc3860000183100000801800007c0803a64e80002181fb008481cf0004814e0020947bfffc38600001830a0000801800007c0803a64e800021813b00888109000480e80020947bfffc3860000183070000801800007c0803a64e80002180db008c80a6000480850028833b000c947bfffc8079000883040004801800007c0803a64e8000213b030000807b0058801800007c0803a64e80002182fb009082d7000482b60028829b000c947bfffc8074000883150004801800007c0803a64e8000213a630000807b00583b130000801800007c0803a64e800021825b0094823200048211002881fb000c947bfffc806f000883100004801800007c0803a64e80002139c30000807b00543b0e0000801800007c0803a64e800021815b0098812a00048109002880fb000c947bfffc8067000883080004801800007c0803a64e80002138c30000807b005c3b060000801800007c0803a64e80002180bb009c8085000483240028831b000c947bfffc8078000883190004801800007c0803a64e8000213ae30000807b00583b170000801800007c0803a64e80002182db002082bb001c829b0018827b0014825b00103980000c3bbdffcc7c1df04040a00010800d001c7c0803a64e8000213a3d0004919d0000821b00049211002c9071002881f4000491f1002481db000891d10020815200049151001c813b000c91310018811b00009111001480fb003c90f1001080d5000490d1000c80b6000490b100088093000490910004807b004090710000833b00a08319000482f8000c821700083871000083100004801800007c0803a64e80002181fb00a081cf0004814e001439230000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000091230008811b009c9103000480fb003090e30000830a0000801800007c0803a64e80002180db00a080a6000480850004807b009c83040008801800007c0803a64e800021280300014182000c3860000148000070807b00a0832300048319001482fb002082db001882bb0010398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d0000829b009c9283000c82750000926300088256000092430004823700009223000083180004801800007c0803a64e800021947bfffc947bfffc388000013860000f3f00000063184c28801800007c0803a64e800021821b00883990ffff7c6b80385560f80140a20010800d00347c0803a64e8000217dec1c1141a3fff095fbfffc38800001386000113f00000063184c28801800007c0803a64e80002181db0088398effff7c6b70385560f80140a20010800d00347c0803a64e8000217d4c1c1141a3fff0393b000491490000391b000480fb000090e8000480db000880bb00043985ffff7ccb28385560f80140a20010800d00347c0803a64e8000217c86661541a3fff0807b00ac8323000483190004949bfffc807b00ac83180008801800007c0803a64e800021280300014182003882db00b082b6000482950004807b00ac8314000c801800007c0803a64e8000213c6002b460636b38800d00287c0803a64e8000213ae0000182fb00b082d7000482b60014398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000829b00ac92830004827b0040926300008315000c801800007c0803a64e800021947bfffc947bfffc947bfffc388000013860000f3f00000063184c28801800007c0803a64e800021825b009c3992ffff7c6b90385560f80140a20010800d00347c0803a64e8000217e2c1c1141a3fff0963bfffc38800001386000113f00000063184c28801800007c0803a64e800021821b009c3990ffff7c6b80385560f80140a20010800d00347c0803a64e8000217dec1c1141a3fff039db000891ee0000395b0008813b0000912a0004811b000c80fb00083987ffff7d0b38385560f80140a20010800d00347c0803a64e8000217cc8661541a3fff080bb00c0808500048064000494dbfffc83230008807b00c03b190000801800007c0803a64e800021280300014182003882fb00c482d7000482b60004807b00c08315000c801800007c0803a64e8000213c6002b460636b68800d00287c0803a64e8000213b000001831b00ac281800014182012082db00c482b6000482950024398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000827b00b4926300043a40009b9243000083140018801800007c0803a64e800021823b00c48211000481f00024947bfffc830f0004801800007c0803a64e80002139c300003c6002a16063f6583b0e0000801800007c0803a64e800021815b00c8812a000481090008398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000080fb000090e3000480db000c90c3000083080004801800007c0803a64e80002180bb00c8808500048064002483230008807b00003b190000801800007c0803a64e8000213b03000038600001801800007c0803a64e8000213ae300004800000c3ae00001947bfffc82fb00c882d7000482b60008398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000829b00bc92830004827b000c9263000083150000801800007c0803a64e800021947bfffc947bfffc947bfffc388000013860000f3f00000063184c28801800007c0803a64e800021825b00b43992ffff7c6b90385560f80140a20010800d00347c0803a64e8000217e2c1c1141a3fff0963bfffc38800001386000113f00000063184c28801800007c0803a64e800021821b00b43990ffff7c6b80385560f80140a20010800d00347c0803a64e8000217dec1c1141a3fff039db000891ee0000395b0008813b0000912a0004811b000c80fb00083987ffff7d0b38385560f80140a20010800d00347c0803a64e8000217cc8661541a3fff080bb00d83980000b3bbdffd07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003c8002b460846b9890830000833b00a893230028831b00049303002482e5000492e3002082db006892c3001c82bb00c492a30018829b00c892830014827b006092630010825b00289243000c823b00149223000890c30004821b00dc7e0803a63b7b00e04e800020|@7767,1048575|428,3,I94 460,3,I94 492,3,I94 524,3,I94 992,3,@7688 1012,3,@7690 1292,3,I94 1364,3,I94 1620,3,@711 1884,3,@7688 2844,3,I94 2916,3,I94 3116,3,@7693 3240,3,I94 3312,3,I94 3516,3,@7695 3668,3,@711 3944,3,I94 4016,3,I94 4180,3,@7697 7688:O3|103,@327,@7689 7689:S22|537461746963206572726f7273202870617373203129 7690:O1|@7691 7691:C2,12|3c6002b2606317cc4e800020|@7692,524289|0,3,@6840 7692:S34|434f4d50494c45525f424f445928292e62617365436f6d70696c6572283329283129 7693:O3|103,@327,@7694 7694:S21|537461746963206572726f72732028706173733229 7695:O3|103,@327,@7696 7696:S21|537461746963206572726f72732028706173733329 7697:C2,1204|7f2802a66339000239600054800d00187d6bd8107c0b004040a00010800d00247c0803a64e800021947bfffc947bfffc947bfffc947bfffc973bfffc971bfffc80180028941bfffc388000013860000f3f00000063184c28801800007c0803a64e800021947bfffc38800001386000113f00000063184c28801800007c0803a64e800021947bfffc38800001386000133f00000063184c28801800007c0803a64e800021947bfffc388000013860001b3f00000063184c28801800007c0803a64e8000213b3b0018907900003b1b001882fb000092f800043adb001882bb000492b600083a9b0018827b00089274000c825b000c2c12000141820024387200003f00000063184b68801800007c0803a64e8000213a230000480000083a20000197fbfffc3e2002b462316cfa963bfffc3a000001961bfffc3bfb000081db001c38600001830e0024801800007c0803a64e80002139e3000083fb000848000198815b000c2c0a000141820028947bfffc386000013f00000063184b68801800007c0803a64e800021392300004800000c39200001947bfffc947bfffc947bfffc388000013860000f3f00000063184c28801800007c0803a64e800021813b00303989ffff7c6b48385560f80140a20010800d00347c0803a64e8000217d0c1c1141a3fff0951bfffc38800001386000113f00000063184c28801800007c0803a64e80002180fb00303987ffff7c6b38385560f80140a20010800d00347c0803a64e8000217ccc1c1141a3fff038bb000490c50000389b0004807b000090640004833b0008831b00043998ffff7f2bc0385560f80140a20010800d00347c0803a64e8000217ef9661541a3fff082db001c2c1600014182002896fbfffc386000013f00000063184b68801800007c0803a64e8000213aa300004800000c3aa0000196fbfffc82bb0024829500182814000141820034827b0000967bfffc82550014965bfffc80d5000480b500088095000c807500103c0002b4600070687c0803a64e800021807b0010800d00287c0803a64e800021815b00182c0a00014182002895fbfffc386000013f00000063184b68801800007c0803a64e800021392300004800000c3920000195fbfffc947bfffc947bfffc388000013860000f3f00000063184c28801800007c0803a64e800021813b003c3989ffff7c6b48385560f80140a20010800d00347c0803a64e8000217d0c1c1141a3fff0951bfffc38800001386000113f00000063184c28801800007c0803a64e80002180fb003c3987ffff7c6b38385560f80140a20010800d00347c0803a64e8000217ccc1c1141a3fff038bb000490c50000389b0004807b000090640004833b0008831b00043998ffff7f2bc0385560f80140a20010800d00347c0803a64e8000217ef9661541a3fff082db002c82b6002082950014398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00008276001c92630004825b000c9243000096fbfffc83140008801800007c0803a64e800021823b003082110018281000014182003c947bfffc81fb000495fbfffc81d1001495dbfffc80d1000480b100088091000c807100103c0002b4600070687c0803a64e80002148000008947bfffc807b000081fb00387de803a63b7b004c4e800020|@7692,1048575|80,3,I94 112,3,I94 144,3,I94 176,3,I94 256,3,I88 292,3,$7697+354 372,3,I88 424,3,I94 496,3,I94 640,3,I88 724,3,@7698 776,3,I88 828,3,I94 900,3,I94 1160,3,@7698 7698:C2,576|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc947bfffc949bfffc94bbfffc94dbfffc3c6002b4606372c4831b0014801800007c0803a64e80002138800003807b000c3f0002b4631872dc3c0002b4600072f47c0803a64e800021831b0014801800007c0803a64e8000213c6002b460639778831b0014801800007c0803a64e800021833b0008831b000c3998ffff7f2bc0385560f80140a20010800d00347c0803a64e8000217eeccc1141a3fff038800003387700003f0002b4631872dc3c0002b4600072f47c0803a64e800021831b0014801800007c0803a64e8000213c6002b46063978c831b0014801800007c0803a64e80002182db000482bb00083995ffff7ecba8385560f80140a20010800d00347c0803a64e8000217e8cb41141a3fff038800003387400003f0002b4631872dc3c0002b4600072f47c0803a64e800021831b0014801800007c0803a64e8000213c6002b4606397a0831b0014801800007c0803a64e800021827b0000825b00043992ffff7e6b90385560f80140a20010800d00347c0803a64e8000217e2c9c1141a3fff038800003387100003f0002b4631872dc3c0002b4600072f47c0803a64e800021831b0014801800007c0803a64e8000213c6002b4606397b4831b0014801800007c0803a64e80002138800003807b00183f0002b4631872dc3c0002b4600072f47c0803a64e800021831b0014801800007c0803a64e80002138600015831b0014833b0010801800007c0903a67f2803a63b7b001c4e800420|@7766,1048575|52,3,@7699 84,3,@7700 92,3,@7702 124,3,@7762 200,3,@7700 208,3,@7702 240,3,@7763 316,3,@7700 324,3,@7702 356,3,@7764 432,3,@7700 440,3,@7702 472,3,@7765 504,3,@7700 512,3,@7702 7699:S15|54696d696e67202d2070617273653a 7700:O2|@7702,@7701 7701:B8|412e848000000000 7702:C2,260|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021548bf80140a20010800d00347c0803a64e8000212c0400014081000c3ae40000480000083ae00001398000013bbdfff87c1df04040a00010800d001c7c0803a64e800021389d0004919d000092e40000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213afd0004919d0000909700043880ffff90970000973bfffc971bfffc96fbfffc3f0002b463187414801800007c0803a64e800021833b0004809900043f00000063185068801800007c0803a64e800021809b00003f0002b463187540833b00083c0002b4600075587c0903a67f2803a63b7b000c4e800420|@7761,1048575|172,3,@7703 200,3,I128 224,3,@7707 236,3,@7709 7703:O1|@7704 7704:C2,228|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021706b0001418200183f00000063185148801800007c0903a64e800420973bfffc947bfffc3c800001388400013f00000063184e08801800007c0803a64e8000214bffffa1388300003c6002b46063751c3f00000063185048801800007c0803a64e800021947bfffc3c80000138840001807b00043f00000063184e28801800007c0803a64e8000213f00000063185148801800007c0803a64e80002138830000807b0000833b00083f00000063185008801800007c0903a67f2803a63b7b000c4e800420|@7706,1048575|40,3,I135 68,2,32768 76,3,I109 104,3,@7705 112,3,I127 136,2,32768 148,3,I110 168,3,I135 200,3,I125 7705:B8|40e0000000000000 7706:S15|5265616c2e66726f6d496e74283129 7707:O2|@7709,@7708 7708:O2|@7754,@7753 7709:C2,588|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e400002c17fffd40820098830400042c180001408200183880000d3c0002b4600077c07c0903a64e80042082d8000056cbf80140a20010800d00347c0803a64e8000212c160001408000084800002456cbf80140a20010800d00347c0803a64e8000212c160191418100084800001c973bfffc3c6002a06063a344800d00287c0803a64e800021389600003c0002b4600077c07c0903a67f2803a64e8004202c17ffff4082009882c400042c160001408200183880000d3c0002b460007ee47c0903a64e80042082b6000056abf80140a20010800d00347c0803a64e8000212c150001408000084800002456abf80140a20010800d00347c0803a64e8000212c150191418100084800001c973bfffc3c6002a06063a344800d00287c0803a64e800021389500003c0002b460007ee47c0903a67f2803a64e8004202c1700034082009882c400042c16000140820018388000193c0002b4600087ec7c0903a64e80042082b6000056abf80140a20010800d00347c0803a64e8000212c150003408000084800002456abf80140a20010800d00347c0803a64e8000212c150191418100084800001c973bfffc3c6002a06063a344800d00287c0803a64e800021389500003c0002b4600087ec7c0903a67f2803a64e800420947bfffc947bfffc947bfffc947bfffc973bfffc389b000483180004801800007c0803a64e80002180db001080bb000c809b0008807b0004833b00003c0002b460008e9c7c0903a67f2803a63b7b00144e800420|@7752,1048575|60,3,@7710 148,3,@78 172,3,@7710 216,3,@7722 304,3,@78 328,3,@7722 372,3,@7736 460,3,@78 484,3,@7736 564,3,@7743 7710:C2,1140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc947bfffc949bfffc388300003860001f3f00000063184fe8801800007c0803a64e8000212803000140820098809b0004386000233f00000063184fe8801800007c0803a64e800021280300014182000c3b2000fd4800000c3f20000063394668973bfffc809b0008386000213f00000063184fe8801800007c0803a64e80002128030001418200103f2002b463397c504800000c3f2002b463397c5c38990000807b0000833b000c3c0002a1600074a87c0903a67f2803a63b7b00104e800420833b0000398000025720f80140a20010800d00347c0803a64e8000217f19661541a3fff038b8000038800005807b00043f00000063184f08801800007c0803a64e80002182e3000072eb00014182000c3ac000034800001081970000558c083c619600012c1600014082009c827b00002c130001408200103e800000629446684800004480030008941bfffc387300003f0002b463187c68801800007c0803a64e800021388300003860005d3c0002a1600074a87c0803a64e8000213a8300004800000c80030008941bfffc38940000386000613c0002a1600074a87c0803a64e8000213c8002b460847d483c0002a1600074a87c0803a64e8000213aa300004800024c2c1600034082009c825b00002c120001408200103e600000627346684800005080030008941bfffc96fbfffc80030004941bfffc387200003f0002b463187d54801800007c0803a64e800021388300003860005d3c0002a1600074a87c0803a64e8000213a6300004800001880030008941bfffc96fbfffc80030004941bfffc38930000807b00043c0002a1600074a87c0803a64e8000213a8300004800013480030008941bfffc947bfffc80030004941bfffc96fbfffc96dbfffc38a0000338800001387700003c0002ac6000c9547c0803a64e8000213880005d3c0002a1600074a87c0803a64e800021827b0000398000025660f80140a20010800d00347c0803a64e8000217e4c9c1141a3fff0947bfffc38b2000038800003807b00083c0002ac6000c9547c0803a64e80002138830000807b00003c0002a1600074a87c0803a64e800021823b0018821b00043990ffff7e2b80385560f80140a20010800d00347c0803a64e8000217dec8c1141a3fff03980000255e0f80140a20010800d00347c0803a64e8000217dcf661541a3fff0947bfffc386e00003f0002b463187e10801800007c0803a64e80002138830000807b00003c0002a1600074a87c0803a64e8000213a8300003b7b00103880008b387400003c0002a1600074a87c0803a64e800021815b0000398000025540f80140a20010800d00347c0803a64e8000217d2c541141a3fff0947bfffc3880ffff386900003c0002a06000fe6c7c0803a64e80002138830000807b00003c0002a1600074a87c0803a64e8000213aa300003b7b000c811b00002c0800014182002838950000386000fd833b000c3c0002a1600074a87c0903a67f2803a63b7b00104e8004203875000080fb000c7ce803a63b7b00104e800020|@7721,1048575|52,3,I124 88,3,I124 124,3,I48 144,3,I124 172,3,@7711 184,3,@7712 204,3,@511 276,3,I117 348,3,I48 372,3,@7713 400,3,@511 440,3,@511 456,3,@7716 464,3,@511 508,3,I48 544,3,@7717 572,3,@511 624,3,@511 688,3,@5220 708,3,@511 776,3,@5220 800,3,@511 900,3,@7719 928,3,@511 960,3,@511 1024,3,@316 1048,3,@511 1096,3,@511 7711:S3|6e616e 7712:S3|696e66 7713:O1|@7714 7714:C2,152|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021546bf80140a20010800d00347c0803a64e8000212c030001418100143c600000606346687f2803a64e800020398000025460f80140a20010800d00347c0803a64e8000217c6c1c1141a3fff0973bfffc4bffff913883000038600061833b00003c0002a1600074a87c0903a67f2803a63b7b00044e800420|@7715,1048575|60,3,I48 128,3,@511 7715:S25|5265616c2e736369466d742832296164645a65726f73283129 7716:S2|4530 7717:O1|@7718 7718:C2,152|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021546bf80140a20010800d00347c0803a64e8000212c030001418100143c600000606346687f2803a64e800020398000025460f80140a20010800d00347c0803a64e8000217c6c1c1141a3fff0973bfffc4bffff913883000038600061833b00003c0002a1600074a87c0903a67f2803a63b7b00044e800420|@7715,1048575|60,3,I48 128,3,@511 7719:O1|@7720 7720:C2,152|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021546bf80140a20010800d00347c0803a64e8000212c030001418100143c600000606346687f2803a64e800020398000025460f80140a20010800d00347c0803a64e8000217c6c1c1141a3fff0973bfffc4bffff913883000038600061833b00003c0002a1600074a87c0903a67f2803a63b7b00044e800420|@7715,1048575|60,3,I48 128,3,@511 7721:S14|5265616c2e736369466d74283229 7722:C2,1284|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc947bfffc949bfffc388300003860001f3f00000063184fe8801800007c0803a64e8000212803000140820098809b0004386000233f00000063184fe8801800007c0803a64e800021280300014182000c3b2000fd4800000c3f20000063394668973bfffc809b0008386000213f00000063184fe8801800007c0803a64e80002128030001418200103f2002b463397c504800000c3f2002b463397c5c38990000807b0000833b000c3c0002a1600074a87c0903a67f2803a63b7b00104e80042080bb000038800007807b00043f00000063184f08801800007c0803a64e80002183230000732b00014182000c3b0000034800001081990000558c083c6198000182e3000456ebf80140a20010800d00347c0803a64e8000212c1700014181013c82bb00002c1500014082000c3ac00061480001143980000256e0f80140a20010800d00347c0803a64e8000217e97641141a3fff0973bfffc96fbfffc80030008941bfffc971bfffc387400003f0002b463188404801800007c0803a64e800021388300003c6002b4606384d83c0002a1600074a87c0803a64e800021809b000c3c0002a1600074a87c0803a64e800021827b0010825b00003992ffff7e6b90385560f80140a20010800d00347c0803a64e8000217e2c9c1141a3fff0821b00083990ffff7e2b80385560f80140a20010800d00347c0803a64e8000217df1661541a3fff0947bfffc386f00003f0002b4631884e4801800007c0803a64e80002138830000807b00003c0002a1600074a87c0803a64e8000213ac300003b7b00084800025c947bfffc947bfffc80030008941bfffc480002487f0bb838556bf80140a20010800d00347c0803a64e8000217c18b800418100e43998ffff7eebc0385560f80140a20010800d00347c0803a64e8000217eccbc1141a3fff0947bfffc947bfffc80030008941bfffc973bfffc387600003f0002b4631885a0801800007c0803a64e80002138830000807b00003c0002a1600074a87c0803a64e800021829b00102c140001408200103ea0000062b5466848000040947bfffc387400003f0002b46318865c801800007c0803a64e800021388300003860005d3c0002a1600074a87c0803a64e8000213aa3000048000008947bfffc38950000807b00003c0002a1600074a87c0803a64e8000213ac3000048000144947bfffc947bfffc80030008941bfffc973bfffc96fbfffc971bfffc38b7000038800001387900003c0002ac6000c9547c0803a64e8000213880005d3c0002a1600074a87c0803a64e80002182db000082bb00043995ffff7ecba8385560f80140a20010800d00347c0803a64e8000217e8cb41141a3fff0947bfffc38b4000038950000807b000c3c0002ac6000c9547c0803a64e80002138830000807b00003c0002a1600074a87c0803a64e800021827b001c825b00043992ffff7e6b90385560f80140a20010800d00347c0803a64e8000217e2c9c1141a3fff0821b00083990ffff7e2b80385560f80140a20010800d00347c0803a64e8000217df1661541a3fff0947bfffc386f00003f0002b463188718801800007c0803a64e80002138830000807b00003c0002a1600074a87c0803a64e8000213ac300003b7b000c3b7b000881db00002c0e00014182002838960000386000fd833b00143c0002a1600074a87c0903a67f2803a63b7b00184e80042038760000815b00147d4803a63b7b00184e800020|@7735,1048575|52,3,I124 88,3,I124 124,3,I48 144,3,I124 172,3,@7711 184,3,@7712 204,3,@511 240,3,I117 400,3,@7723 424,3,@7726 432,3,@511 452,3,@511 560,3,@7727 588,3,@511 728,3,@7729 756,3,@511 784,3,I48 804,3,@7731 832,3,@511 868,3,@511 932,3,@5220 952,3,@511 1028,3,@5220 1052,3,@511 1160,3,@7733 1188,3,@511 1240,3,@511 7723:O1|@7724 7724:C2,152|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021546bf80140a20010800d00347c0803a64e8000212c030001418100143c600000606346687f2803a64e800020398000025460f80140a20010800d00347c0803a64e8000217c6c1c1141a3fff0973bfffc4bffff913883000038600061833b00003c0002a1600074a87c0903a67f2803a63b7b00044e800420|@7725,1048575|60,3,I48 128,3,@511 7725:S16|5265616c2e6164645a65726f73283129 7726:S2|302e 7727:O1|@7728 7728:C2,152|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021546bf80140a20010800d00347c0803a64e8000212c030001418100143c600000606346687f2803a64e800020398000025460f80140a20010800d00347c0803a64e8000217c6c1c1141a3fff0973bfffc4bffff913883000038600061833b00003c0002a1600074a87c0903a67f2803a63b7b00044e800420|@7725,1048575|60,3,I48 128,3,@511 7729:O1|@7730 7730:C2,152|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021546bf80140a20010800d00347c0803a64e8000212c030001418100143c600000606346687f2803a64e800020398000025460f80140a20010800d00347c0803a64e8000217c6c1c1141a3fff0973bfffc4bffff913883000038600061833b00003c0002a1600074a87c0903a67f2803a63b7b00044e800420|@7725,1048575|60,3,I48 128,3,@511 7731:O1|@7732 7732:C2,152|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021546bf80140a20010800d00347c0803a64e8000212c030001418100143c600000606346687f2803a64e800020398000025460f80140a20010800d00347c0803a64e8000217c6c1c1141a3fff0973bfffc4bffff913883000038600061833b00003c0002a1600074a87c0903a67f2803a63b7b00044e800420|@7725,1048575|60,3,I48 128,3,@511 7733:O1|@7734 7734:C2,152|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021546bf80140a20010800d00347c0803a64e8000212c030001418100143c600000606346687f2803a64e800020398000025460f80140a20010800d00347c0803a64e8000217c6c1c1141a3fff0973bfffc4bffff913883000038600061833b00003c0002a1600074a87c0903a67f2803a63b7b00044e800420|@7725,1048575|60,3,I48 128,3,@511 7735:S14|5265616c2e666978466d74283229 7736:C2,1272|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc947bfffc949bfffc388300003860001f3f00000063184fe8801800007c0803a64e8000212803000140820098809b0004386000233f00000063184fe8801800007c0803a64e800021280300014182000c3b2000fd4800000c3f20000063394668973bfffc809b0008386000213f00000063184fe8801800007c0803a64e80002128030001418200103f2002b463397c504800000c3f2002b463397c5c38990000807b0000833b000c3c0002a1600074a87c0903a67f2803a63b7b00104e80042080bb000038800005807b00043f00000063184f08801800007c0803a64e80002183230000732b00014182000c3b0000034800001081990000558c083c6198000182e3000482db00007eebb038556bf80140a20010800d00347c0803a64e8000217c17b000408100084800002456ebf80140a20010800d00347c0803a64e8000212c17fff741800008480001482c1800034082000c3a990000480000b0973bfffc96fbfffc80030008941bfffc971bfffc38a0000338800001387900003c0002ac6000c9547c0803a64e8000213880005d3c0002a1600074a87c0803a64e800021827b0000398000025660f80140a20010800d00347c0803a64e8000217e4c9c1141a3fff0947bfffc38b2000038800003807b00103c0002ac6000c9547c0803a64e80002138830000807b00003c0002a1600074a87c0803a64e8000213a8300003b7b000848000014947bfffc96fbfffc80030008941bfffc3880008b387400003c0002a1600074a87c0803a64e800021827b0004398000025660f80140a20010800d00347c0803a64e8000217e4c9c1141a3fff0947bfffc3880ffff387200003c0002a06000fe6c7c0803a64e80002138830000807b00003c0002a1600074a87c0803a64e8000213aa300004800020456ebf80140a20010800d00347c0803a64e8000212c170001418100883980000256e0f80140a20010800d00347c0803a64e8000217eb7641141a3fff0947bfffc947bfffc80030008941bfffc973bfffc387500003f0002b463188d00801800007c0803a64e800021388300003c6002b4606384d83c0002a1600074a87c0803a64e800021809b00003c0002a1600074a87c0803a64e8000213aa30000480001647f0bb838556bf80140a20010800d00347c0803a64e8000217c18b8004181008c3998ffff7eebc0385560f80140a20010800d00347c0803a64e8000217eacbc1141a3fff0947bfffc947bfffc80030008941bfffc973bfffc387500003f0002b463188dbc801800007c0803a64e80002138830000807b00003c0002a1600074a87c0803a64e8000213c8002b460848e783c0002a1600074a87c0803a64e8000213aa30000480000bc947bfffc947bfffc80030008941bfffc973bfffc96fbfffc971bfffc38b7000038800001387900003c0002ac6000c9547c0803a64e8000213880005d3c0002a1600074a87c0803a64e80002182bb0000829b00043994ffff7eaba0385560f80140a20010800d00347c0803a64e8000217e6cac1141a3fff0947bfffc38b3000038940000807b000c3c0002ac6000c9547c0803a64e80002138830000807b00003c0002a1600074a87c0803a64e8000213aa300003b7b000c825b00042c1200014182002838950000386000fd833b00183c0002a1600074a87c0903a67f2803a63b7b001c4e80042038750000823b00187e2803a63b7b001c4e800020|@7742,1048575|52,3,I124 88,3,I124 124,3,I48 144,3,I124 172,3,@7711 184,3,@7712 204,3,@511 240,3,I117 416,3,@5220 436,3,@511 504,3,@5220 528,3,@511 580,3,@511 644,3,@316 668,3,@511 776,3,@7737 800,3,@7726 808,3,@511 828,3,@511 944,3,@7739 972,3,@511 988,3,@7741 996,3,@511 1060,3,@5220 1080,3,@511 1156,3,@5220 1180,3,@511 1228,3,@511 7737:O1|@7738 7738:C2,152|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021546bf80140a20010800d00347c0803a64e8000212c030001418100143c600000606346687f2803a64e800020398000025460f80140a20010800d00347c0803a64e8000217c6c1c1141a3fff0973bfffc4bffff913883000038600061833b00003c0002a1600074a87c0903a67f2803a63b7b00044e800420|@7725,1048575|60,3,I48 128,3,@511 7739:O1|@7740 7740:C2,152|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021546bf80140a20010800d00347c0803a64e8000212c030001418100143c600000606346687f2803a64e800020398000025460f80140a20010800d00347c0803a64e8000217c6c1c1141a3fff0973bfffc4bffff913883000038600061833b00003c0002a1600074a87c0903a67f2803a63b7b00044e800420|@7725,1048575|60,3,I48 128,3,@511 7741:S2|2e30 7742:S14|5265616c2e67656e466d74283229 7743:C2,408|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c04000340820034973bfffc388000014bffffd138830000386000fd833b00003c0002a1600074a87c0903a67f2803a63b7b00044e8004202c05ffff4082005c973bfffc386600003f0002b463189050801800007c0803a64e800021388300003c6002b4606391183c0002a1600074a87c0803a64e80002138800053833b00003c0002a1600074a87c0903a67f2803a63b7b00044e8004202c050001408200103c6002b460637c5c4e8000202c050005408200103c6002b4606391244e800020973bfffc947bfffc386600003f0002b463189130801800007c0803a64e800021388300003c6002b4606384d83c0002a1600074a87c0803a64e800021831b00002c180001408200103f2000006339466848000040947bfffc3880ffff387800003c0002a06000fe6c7c0803a64e800021388300003860008b3c0002a1600074a87c0803a64e8000213b23000048000008947bfffc38990000807b0000833b00083c0002a1600074a87c0903a67f2803a63b7b000c4e800420|@7751,1048575|64,3,@511 104,3,@7744 128,3,@7747 136,3,@511 160,3,@511 192,3,@7712 212,3,@7748 236,3,@7749 260,3,@7726 268,3,@511 296,3,I48 320,3,@316 344,3,@511 384,3,@511 7744:O1|@7745 7745:C2,136|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c030001408200103c600000606346684e800020973bfffc80030004941bfffc3880ffff806300003c0002a06000fe6c7c0803a64e800021947bfffc807b00044bffffa138830000807b0000833b00083c0002a1600074a87c0903a67f2803a63b7b000c4e800420|@7746,1048575|40,3,I48 72,3,@316 112,3,@511 7746:S20|494545455265616c2e646f646967697473283129 7747:S4|6e616e28 7748:S3|302e30 7749:O1|@7750 7750:C2,136|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c030001408200103c600000606346684e800020973bfffc80030004941bfffc3880ffff806300003c0002a06000fe6c7c0803a64e800021947bfffc807b00044bffffa138830000807b0000833b00083c0002a1600074a87c0903a67f2803a63b7b000c4e800420|@7746,1048575|40,3,I48 72,3,@316 112,3,@511 7751:S20|494545455265616c2e746f537472696e67283429 7752:S11|5265616c2e666d74283229 7753:B8|0010000000000000 7754:C2,668|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc947bfffc949bfffc38830000386000233f00000063184fe8801800007c0803a64e800021947bfffc809b00083860001f3f00000063184fe8801800007c0803a64e80002128030001418200b83c8002b4608494d0807b00083f00000063184fa8801800007c0803a64e800021280300014182000c3b200005480000b83c8002b4608494d0807b00083f00000063184f28801800007c0803a64e800021280300014182000c831b000848000020807b00083f000000631850a8801800007c0803a64e8000213b03000082fb000c80970004387800003f00000063184f28801800007c0803a64e800021280300014182000c3b2000034800003c3b20fffd48000034809b0008386000213f00000063184fe8801800007c0803a64e800021280300014182000c3b20ffff480000083b2000012c1900054082003c833b00043b0000019319000082fb000092f900043ac0000592d900083aa0000192b9000c38600001829b00107e8803a63b7b00144e8000202c1900014082003c833b00043b0000019319000082fb000092f900043ac0000192d900083aa0000192b9000c38600001829b00107e8803a63b7b00144e8000202c19ffff4082003c833b00043b0000019319000082fb000092f900043ac0ffff92d900083aa0000192b9000c38600001829b00107e8803a63b7b00144e800020973bfffc38a0000138800001807b000c3f00000063184f08801800007c0803a64e8000218263000482430008806300003c0002b4600094dc7c0803a64e8000212c1200014082000c3a200003480000083a2000016a30000281fb0008926f0000920f000481db000091cf0008906f000c38600001815b00147d4803a63b7b00184e800020|@7760,1048575|56,3,I124 88,3,I124 116,3,@7755 128,3,I122 164,3,@7755 176,3,I118 216,3,I130 252,3,I118 304,3,I124 552,3,I117 584,3,@7756 7755:B8|0000000000000000 7756:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc706b00014182000c3b0000034800001081830000558c083c61980001398000025700f80140a20010800d00347c0803a64e8000217eecc41141a3fff03a99000038970000386000013b1b00003c0002b4600095847c0803a64e8000217e8803a63b7b00044e800020|@7759,1032195|112,3,@7757 7757:C2,352|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021548bf80140a20010800d00347c0803a64e8000212c0400014080000c7f2803a64e800020398000025480f80140a20010800d00347c0803a64e8000217eec241141a3fff0548bf80140a20010800d00347c0803a64e8000212c040001408000084800004882d8000072cb00014182000c3aa000034800001081960000558c083c619500017c8ba838556bf80140a20010800d00347c0803a64e8000217c04a8004080000848000020973bfffc3aa300003c6002a0606395e0800d00287c0803a64e80002172cb000141820008480000183aa400087eac0e707d7660ae556b083c617600013980006056c0f80140a20010800d00347c0803a64e8000217c8cb41141a3fff0398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213add0004919d0000907600049096000038970000387600007f2803a64bfffeac|@7758,1015811|208,3,@51 7758:S32|5265616c2e737472546f44696769744c69737428312967657444696773283229 7759:S22|5265616c2e737472546f44696769744c697374283129 7760:S17|5265616c2e746f446563696d616c283229 7761:S11|54696d652e666d74283229 7762:S12|2c2073656d616e746963733a 7763:S12|2c207472616e736c6174653a 7764:S11|2c2067656e65726174653a 7765:S6|2c2072756e3a 7766:S29|434f4d50494c45525f424f445928292e7072696e7454696d6573283629 7767:S31|434f4d50494c45525f424f445928292e62617365436f6d70696c6572283329 7768:O3|1,@5701,@8022 7769:O4|-2,1,@7770,0 7770:O2|@7772,@7771 7771:O2|@8009,@8008 7772:O2|49,@7773 7773:O4|-3,0,@7775,@7774 7774:O2|0,@7776 7775:S9|6e616d655370616365 7776:O6|@7775,0,0,0,@7778,@7777 7777:O2|-1,@9477 7778:O2|-1,@9455 7779:O3|0,@7780,0 7780:O4|-2,1,@7781,0 7781:O2|@7783,@7782 7782:O2|@7800,@7799 7783:O2|@7785,@7784 7784:O3|1,@5701,@7786 7785:S6|616c6c466978 7786:O4|-3,@7787,@3886,@3944 7787:O2|@7788,0 7788:O4|-2,1,@7789,0 7789:O2|@7791,@7790 7790:O2|@7792,0 7791:O2|49,@2606 7792:O2|50,@7793 7793:O4|-3,0,@7795,@7794 7794:O2|0,@7796 7795:S9|66697869747956616c 7796:O6|@7795,0,0,0,@7798,@7797 7797:O2|-1,@9457 7798:O2|-1,@9456 7799:O2|@7816,@7815 7800:O2|@7802,@7801 7801:O3|1,@5701,@7803 7802:S6|616c6c536967 7803:O4|-3,@7804,@3886,@3944 7804:O2|@7805,0 7805:O4|-2,1,@7806,0 7806:O2|@7791,@7807 7807:O2|@7808,0 7808:O2|50,@7809 7809:O4|-3,0,@7811,@7810 7810:O2|0,@7812 7811:S12|7369676e617475726556616c 7812:O6|@7811,0,0,0,@7814,@7813 7813:O2|-1,@9459 7814:O2|-1,@9458 7815:O2|@7832,@7831 7816:O2|@7818,@7817 7817:O3|1,@5701,@7819 7818:S6|616c6c56616c 7819:O4|-3,@7820,@3886,@3944 7820:O2|@7821,0 7821:O4|-2,1,@7822,0 7822:O2|@7791,@7823 7823:O2|@7824,0 7824:O2|50,@7825 7825:O4|-3,0,@7827,@7826 7826:O2|0,@7828 7827:S8|76616c756556616c 7828:O6|@7827,0,0,0,@7830,@7829 7829:O2|-1,@9461 7830:O2|-1,@9460 7831:O2|@7848,@7847 7832:O2|@7834,@7833 7833:O3|1,@5701,@7835 7834:S7|616c6c54797065 7835:O4|-3,@7836,@3886,@3944 7836:O2|@7837,0 7837:O4|-2,1,@7838,0 7838:O2|@7791,@7839 7839:O2|@7840,0 7840:O2|50,@7841 7841:O4|-3,0,@7843,@7842 7842:O2|0,@7844 7843:S7|7479706556616c 7844:O6|@7843,0,0,0,@7846,@7845 7845:O2|-1,@9463 7846:O2|-1,@9462 7847:O2|@7864,@7863 7848:O2|@7850,@7849 7849:O3|1,@5701,@7851 7850:S8|616c6c46756e6374 7851:O4|-3,@7852,@3886,@3944 7852:O2|@7853,0 7853:O4|-2,1,@7854,0 7854:O2|@7791,@7855 7855:O2|@7856,0 7856:O2|50,@7857 7857:O4|-3,0,@7859,@7858 7858:O2|0,@7860 7859:S10|66756e63746f7256616c 7860:O6|@7859,0,0,0,@7862,@7861 7861:O2|-1,@9465 7862:O2|-1,@9464 7863:O2|@7868,@7867 7864:O2|@7866,@7865 7865:O3|1,@7788,@5701 7866:S8|656e746572466978 7867:O2|@7872,@7871 7868:O2|@7870,@7869 7869:O3|1,@7805,@5701 7870:S8|656e746572536967 7871:O2|@7876,@7875 7872:O2|@7874,@7873 7873:O3|1,@7821,@5701 7874:S8|656e74657256616c 7875:O2|@7892,@7891 7876:O2|@7878,@7877 7877:O3|1,@5701,@7879 7878:S9|616c6c537472756374 7879:O4|-3,@7880,@3886,@3944 7880:O2|@7881,0 7881:O4|-2,1,@7882,0 7882:O2|@7791,@7883 7883:O2|@7884,0 7884:O2|50,@7885 7885:O4|-3,0,@7887,@7886 7886:O2|0,@7888 7887:S12|73747275637475726556616c 7888:O6|@7887,0,0,0,@7890,@7889 7889:O2|-1,@9467 7890:O2|-1,@9466 7891:O2|@7896,@7895 7892:O2|@7894,@7893 7893:O3|1,@7837,@5701 7894:S9|656e74657254797065 7895:O2|@7972,@7971 7896:O2|@7898,@7897 7897:O3|1,@2606,@7899 7898:S9|6c6f6f6b7570466978 7899:O4|-3,@7901,@7902,@7900 7900:O2|0,@7903 7901:O2|@7793,0 7902:S6|6f7074696f6e 7903:O6|@7902,1,0,@7905,@7907,@7904 7904:O2|-1,@9476 7905:O2|@7906,0 7906:O3|3,@9468,79992 7907:O2|-1,@9469 7908:O3|1,@206,@7909 7909:O2|@7911,@7910 7910:O2|@7933,0 7911:O4|@7913,@211,@7914,@7912 7912:O4|-3,@7905,@7902,@7900 7913:S4|4e4f4e45 7914:O2|-1,@7915 7915:O2|5,@7916 7916:O2|-1,@7917 7917:O5|0,@7918,@7932,@9470,@2559 7918:O3|@218,@7920,@7919 7919:O8|@2535,@274,@2542,@230,@2505,@2545,@2250,@7928 7920:O2|@222,@7921 7921:O5|@225,@229,0,@274,@7922 7922:O10|0,@7923,@2565,0,0,0,0,0,0,0 7923:O1|@7924 7924:O2|-1,@7925 7925:O5|0,@2515,@2526,@9471,@7926 7926:O2|-7,@7927 7927:O8|@2571,@7913,0,0,1,0,0,0 7928:O2|@7930,@7929 7929:O1|@7931 7930:O2|@7929,0 7931:C2,24|280300014082000c386000034e800020386000014e800020|@7913,524289| 7932:O2|-3,@7930 7933:O4|@7935,@773,@7936,@7934 7934:O3|1,@7906,@7912 7935:S4|534f4d45 7936:O2|-1,@7937 7937:O2|5,@7938 7938:O2|-1,@7939 7939:O5|0,@7940,@7970,@9472,@3900 7940:O3|@218,@7942,@7941 7941:O8|@2535,@274,@2542,@230,@2505,@2545,@2250,@7962 7942:O2|@222,@7943 7943:O5|@225,@229,0,@274,@7944 7944:O10|0,@7946,@7951,@7945,0,0,0,0,0,0 7945:O1|@7957 7946:O1|@7947 7947:O2|-1,@7948 7948:O5|0,@2515,@2526,@9473,@7949 7949:O2|-7,@7950 7950:O8|@3912,@7935,0,0,1,0,0,0 7951:O1|@7952 7952:O2|-1,@7953 7953:O5|0,@2515,@3921,@9474,@7954 7954:O2|-7,@7955 7955:O8|@7956,@7935,0,0,1,0,0,0 7956:O2|10,@2531 7957:O2|-1,@7958 7958:O5|0,@2515,@3925,@9475,@7959 7959:O2|-7,@7960 7960:O8|@7961,@7935,0,0,1,0,0,0 7961:O3|6,@2532,0 7962:O4|@7964,@7966,@7965,@7963 7963:O1|@7969 7964:O3|@7966,@7965,@7963 7965:O1|@7968 7966:O1|@7967 7967:C2,64|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000213f00000063184d88801800007c0803a64e800021686300027f2803a64e800020|@7935,917505|32,3,I105 7968:C2,60|7f2802a6633900023b030000398000013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d0000930300007f2803a64e800020|@7935,786433| 7969:C2,8|806300004e800020|@7935,524289| 7970:O2|-3,@7964 7971:O2|@7978,@7977 7972:O2|@7974,@7973 7973:O3|1,@2606,@7975 7974:S9|6c6f6f6b7570536967 7975:O4|-3,@7976,@7902,@7900 7976:O2|@7809,0 7977:O2|@7984,@7983 7978:O2|@7980,@7979 7979:O3|1,@2606,@7981 7980:S9|6c6f6f6b757056616c 7981:O4|-3,@7982,@7902,@7900 7982:O2|@7825,0 7983:O2|@7988,@7987 7984:O2|@7986,@7985 7985:O3|1,@7853,@5701 7986:S10|656e74657246756e6374 7987:O2|@7994,@7993 7988:O2|@7990,@7989 7989:O3|1,@2606,@7991 7990:S10|6c6f6f6b757054797065 7991:O4|-3,@7992,@7902,@7900 7992:O2|@7841,0 7993:O2|@7998,@7997 7994:O2|@7996,@7995 7995:O3|1,@7881,@5701 7996:S11|656e746572537472756374 7997:O2|@8003,0 7998:O2|@8000,@7999 7999:O3|1,@2606,@8001 8000:S11|6c6f6f6b757046756e6374 8001:O4|-3,@8002,@7902,@7900 8002:O2|@7857,0 8003:O2|@8005,@8004 8004:O3|1,@2606,@8006 8005:S12|6c6f6f6b7570537472756374 8006:O4|-3,@8007,@7902,@7900 8007:O2|@7885,0 8008:O2|@8013,0 8009:O2|50,@8010 8010:O3|1,@5701,@8011 8011:O4|-3,@8012,@7902,@7900 8012:O2|@5808,0 8013:O2|51,@8014 8014:O4|-3,@8015,@3886,@3944 8015:O2|@8016,0 8016:O4|-3,0,@8018,@8017 8017:O2|0,@8019 8018:S9|756e6976657273616c 8019:O6|@8018,0,0,0,@8021,@8020 8020:O2|-1,@9479 8021:O2|-1,@9478 8022:O4|-2,1,@8023,0 8023:O2|@8025,@8024 8024:O2|@8028,@8027 8025:O2|@8026,@7786 8026:S5|6669786573 8027:O2|@8031,@8030 8028:O2|@8029,@7835 8029:S5|7479706573 8030:O2|@8034,@8033 8031:O2|@8032,@7819 8032:S6|76616c756573 8033:O2|@8037,@8036 8034:O2|@8035,@7851 8035:S8|66756e63746f7273 8036:O2|@8039,0 8037:O2|@8038,@7803 8038:S10|7369676e617475726573 8039:O2|@8040,@7879 8040:S10|73747275637475726573 8041:O2|@8043,@8042 8042:O2|@8044,0 8043:S21|6d616b65737472696e67496e4e616d655370616365 8044:O3|@9369,69,@8045 8045:O4|@8043,-1,@707,@8046 8046:O3|1,@8047,@2606 8047:O4|-2,1,@8048,0 8048:O2|@8050,@8049 8049:O2|@8052,0 8050:O2|49,@8051 8051:O3|3,@9480,79992 8052:O2|50,@7773 8053:O2|@8055,@8054 8054:O2|@8056,0 8055:S16|7072696e74496e4e616d655370616365 8056:O3|@9369,69,@8057 8057:O4|@8055,-1,@704,@8058 8058:O3|1,@8059,@5701 8059:O4|-2,1,@8060,0 8060:O2|@8062,@8061 8061:O2|@8052,@8064 8062:O2|49,@8063 8063:O3|3,@9481,79992 8064:O2|@8066,@8065 8065:O2|@8068,0 8066:O2|51,@8067 8067:O3|1,@2606,@5701 8068:O2|52,@2607 8069:O2|@8071,@8070 8070:O2|@8072,0 8071:S10|6d616b65737472696e67 8072:O3|@9369,69,@8073 8073:O4|@8071,-1,@8075,@8074 8074:O3|1,@8076,@2606 8075:O2|-2,-2 8076:O3|3,@9482,79992 8077:O2|@8079,@8078 8078:O2|@8080,0 8079:S10|696e7374616c6c5f7070 8080:O3|@9369,69,@8081 8081:O4|@8079,-1,@706,@8082 8082:O3|1,@8083,@5701 8083:O3|1,@8085,@8084 8084:O3|1,@2607,@8106 8085:O4|-2,1,@8086,0 8086:O2|@8088,@8087 8087:O2|@8090,@8089 8088:O2|49,@8067 8089:O2|@8098,@8097 8090:O2|50,@8091 8091:O3|1,@8092,@5701 8092:O4|-2,1,@8093,0 8093:O2|@8095,@8094 8094:O2|@8096,0 8095:O2|49,@2607 8096:O2|50,@191 8097:O2|@8104,0 8098:O2|51,@8099 8099:O3|1,@8100,@5701 8100:O4|-2,1,@8101,0 8101:O2|@8095,@8102 8102:O2|@8103,0 8103:O2|50,@2607 8104:O2|52,@8105 8105:O3|1,@5701,@5701 8106:O3|1,@8108,@8107 8107:O3|1,@8109,@5701 8108:O3|3,@9483,79992 8109:O3|3,@9484,79992 8110:O2|@8112,0 8111:S9|4e616d655370616365 8112:O3|@9408,69,@8113 8113:O3|@8111,@2645,@8114 8114:O4|@8115,I48,0,0 8115:O4|-1,@9486,@9487,@9485 8116:O2|@7811,@8135 8117:O2|@7827,@8118 8118:O2|@8119,0 8119:O3|@9403,69,@7828 8120:O2|@7843,@8121 8121:O2|@8122,0 8122:O3|@9403,69,@7844 8123:O2|@7859,@8124 8124:O2|@8125,0 8125:O3|@9403,69,@7860 8126:O2|@7775,@8127 8127:O2|@8128,0 8128:O3|@9403,69,@7776 8129:O2|@7887,@8130 8130:O2|@8131,0 8131:O3|@9403,69,@7888 8132:O2|@7795,@8133 8133:O2|@8134,0 8134:O3|@9403,69,@7796 8135:O2|@8136,0 8136:O3|@9403,69,@7812 8137:O2|@8139,@8138 8138:O2|@8140,0 8139:S3|6d6f64 8140:O3|@9369,69,@8141 8141:O4|@8139,-1,@190,@8142 8142:O3|1,@192,@196 8143:O2|@3886,@8144 8144:O2|@8145,0 8145:O3|@9403,69,@3884 8146:O2|33,@8147 8147:O2|@8148,0 8148:O3|@9369,69,@8149 8149:O4|33,-1,@8151,@8150 8150:O3|1,@8156,@8155 8151:O2|-1,@8152 8152:O2|-7,@8153 8153:O8|@4005,@8154,0,0,1,0,0,0 8154:S4|21283129 8155:O3|3,@9489,79992 8156:O4|-3,@8158,@3968,@8157 8157:O2|0,@3966 8158:O2|@8155,0 8159:O2|@7902,@8160 8160:O2|@8161,0 8161:O3|@9403,69,@7903 8162:O2|@7913,@8163 8163:O2|@8164,0 8164:O3|@9369,69,@7911 8165:O2|42,@8166 8166:O2|@8167,0 8167:O3|@9369,69,@8168 8168:O4|42,-1,@190,@8142 8169:O2|@3871,@8170 8170:O2|@8171,0 8171:O3|@9403,69,@3869 8172:O2|43,@8173 8173:O2|@8174,0 8174:O3|@9369,69,@8175 8175:O4|43,-1,@190,@8142 8176:O2|126,@8177 8177:O2|@8178,0 8178:O3|@9369,69,@8179 8179:O4|126,-1,@190,@2635 8180:O2|45,@8181 8181:O2|@8182,0 8182:O3|@9369,69,@8183 8183:O4|45,-1,@190,@8142 8184:O2|@8186,@8185 8185:O2|@8187,0 8186:S9|426f6f747374726170 8187:O3|@9408,69,@8188 8188:O3|@8186,@2645,@8189 8189:O4|@8190,I48,0,0 8190:O4|-1,@9491,@9492,@9490 8191:O2|@9046,@9045 8192:O2|@8194,@8193 8193:O2|@8195,0 8194:S12|646973706c617946756e6374 8195:O3|@9369,69,@8196 8196:O4|@8194,-1,@8198,@8197 8197:O3|1,@8563,@5701 8198:O2|-1,@8199 8199:O2|-3,@8200 8200:O2|@8202,@8201 8201:O2|@8205,@8204 8202:C2,72|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e3001096fbfffc80c3000c80a30008808300048063000083180004801800007c0903a64e800420|@8203,1048575| 8203:S45|494e495449414c4953455f28292e696e6974476c6f62616c456e76283129646973706c617946756e6374283129 8204:O11|@8208,@8211,@8225,@8285,@8286,@6041,@8523,@8531,@8560,@8561,@8207 8205:C2,248|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7000882b700243a830000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000827b0000926300043a40009b92430000973bfffc969bfffc949bfffc94bbfffc94dbfffc80160034941bfffc83150000801800007c0803a64e8000213a230000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d0000821b00049203001081fb000891e3000c9223000881db000c91c30004815b001091430000831b0000833b0014801800007c0903a67f2803a63b7b001c4e800420|@8206,1048575| 8206:S45|494e495449414c4953455f28292e696e6974476c6f62616c456e76283129646973706c617946756e6374283529 8207:O1|@8562 8208:O16|@5752,@4189,@4462,@4456,@4562,@5758,@5764,@5771,@191,@2607,@2606,@5701,@5808,@8209,@5390,@4603 8209:O4|-3,0,@3874,@8210 8210:O2|0,@3872 8211:O47|0,@4026,@8213,@5006,@5028,@3665,@5039,@5042,@4284,@5051,@206,@3854,@3839,@3861,@4300,9999,@201,@2610,@3869,@2616,@3875,@3966,@3878,@2593,@3872,@3884,@3739,@3766,@3770,@3774,@3778,@3782,@3786,@3790,@3794,@3798,@8216,@8212,@5692,@3549,@4147,@4148,@4177,@3661,@4173,@4169,@4165 8212:O1|@8221 8213:O2|@8214,@4027 8214:C2,276|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7000c973bfffc971bfffc947bfffc3860000183160000801800007c0803a64e800021398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003a8000019295000c3a600001927500083e400000625246689255000490750000823b00048211000481f00000398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002139dd0004919d0000814f0000914e00043920ffff912e0000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021391d0004919d000092a8000891c8000480fb000090e800003868000080db00087cc803a63b7b000c4e800020|@8215,1048575|124,3,I48 8215:S32|5354525543545f56414c5328292e6d616b65456d707479476c6f62616c283129 8216:O1|@8217 8217:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a3000880830004806300003c0002b46000b8107c0903a64e800420|@8220,786439|44,3,@8218 8218:C2,124|7f2802a663390002398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b1d0004919d000090b8000438a0000190b80000398000043bbdffec7c1df04040a00010800d001c7c0803a64e80002138bd0004919d00009085000c930500083880ffff9085000490650000386500007f2803a64e800020|@8219,786439| 8219:S28|5354525543545f56414c5328292e6d616b65466f726d616c56283329 8220:S28|5354525543545f56414c5328292e6d616b65466f726d616c56283129 8221:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a3000880830004806300003c0002b46000b9487c0903a64e800420|@8224,786439|44,3,@8222 8222:C2,124|7f2802a663390002398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b1d0004919d000090b8000438a0000190b80000398000043bbdffec7c1df04040a00010800d001c7c0803a64e80002138bd0004919d00009085000c93050008388000019085000490650000386500007f2803a64e800020|@8223,786439| 8223:S29|5354525543545f56414c5328292e6d616b65466f726d616c4578283329 8224:S29|5354525543545f56414c5328292e6d616b65466f726d616c4578283129 8225:O17|@4111,@5089,@5898,@3945,@3893,@6417,@773,@8227,@8230,@8233,@5924,@8236,@8266,@8269,@8277,@8226,@4719 8226:O2|@8281,@8280 8227:O1|@8228 8228:C2,68|7f2802a6633900023b030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000930300043b000003930300007f2803a64e800020|@8229,786433| 8229:S8|456e756d466f726d 8230:O2|@8231,@5825 8231:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@8232,1048575| 8232:S39|56414c55455f4f505328292e6372656174654e756c6c617279436f6e7374727563746f72283129 8233:O2|@8234,@5844 8234:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@8235,1048575| 8235:S37|56414c55455f4f505328292e637265617465556e617279436f6e7374727563746f72283129 8236:O2|@8238,@8237 8237:O3|@8241,@3566,@8240 8238:C2,72|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e3001096fbfffc80c3000c80a30008808300048063000083180004801800007c0903a64e800420|@8239,1048575| 8239:S32|56414c55455f4f505328292e646973706c61795369676e617475726573283129 8240:O6|@8245,@3566,@8237,@8258,@8244,@5925 8241:C2,524|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021548bf80140a20010800d00347c0803a64e8000212c0400014181004c82f8000482d70020973bfffc3865000083160000801800007c0803a64e8000213aa300003c6002aa6063f9243b150000833b0000801800007c0903a67f2803a63b7b00084e80042082f8000482d70020973bfffc971bfffc947bfffc949bfffc94bbfffc94dbfffc3865000083160004801800007c0803a64e8000213aa300003c6002a16063f6583b150000801800007c0803a64e800021829b00108274000482530020807b000483120000801800007c0803a64e800021823b00108211000481f00008947bfffc807b0010830f0000801800007c0803a64e800021388300003c6002b46063bf083c0002a1600074a87c0803a64e8000213c8002ab608430043c0002a1600074a87c0803a64e800021831b0000801800007c0803a64e80002181db0014814e0004812a0020807b00088309000c801800007c0803a64e800021390300003c6002ab60632ff83b080000801800007c0803a64e80002180fb001480db000494dbfffc80bb002094bbfffc38c0000380bb0010809b0014807b001883070008801800007c0803a64e800021809b00148064000483230020807b000883190008801800007c0803a64e8000213b03000038600001833b0018801800007c0903a67f2803a63b7b00204e800420|@8243,1048575|96,3,@4530 188,3,@711 284,3,@8242 292,3,@511 308,3,@4610 316,3,@511 384,3,@4609 8242:S10|7369676e617475726520 8243:S32|56414c55455f4f505328292e646973706c61795369676e617475726573283529 8244:O3|@8262,@3566,@5164 8245:C2,888|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021971bfffc94bbfffc949bfffc82f8000482d70020973bfffc947bfffc3865000083160004801800007c0803a64e8000213aa300003c6002a16063f6643b150000801800007c0803a64e800021829b00108274000482530020807b000c83120000801800007c0803a64e8000213a2300003c6002a7606344703b110000801800007c0803a64e800021821b0008560bf80140a20010800d00347c0803a64e8000212c1000034181008081fb001081cf0004814e0020807b000c830a000c801800007c0803a64e800021392300003c6002a06063ee143b090000801800007c0803a64e800021811b001080e8000480c70020807b000c83060000801800007c0803a64e80002138a300003c6002aa6063f9243b050000801800007c0803a64e8000214800017c3d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e80002139fd0004919d000039c0000191cf0000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021395d0004919d00003d2002b46129c2e8912a000091ea0004811b001080e8000480c7001c80a700148087000895fbfffc955bfffc80060008941bfffc80050000941bfffc807b001083040004801800007c0803a64e800021831b0000801800007c0803a64e800021831b0004801800007c0803a64e8000213b230000807b00083b190000801800007c0803a64e800021831b002082f8000482d7001c3c6002b46063c38083160004801800007c0803a64e80002182bb000c3a830000807500003b140000801800007c0803a64e8000212c03000140820008480000508263000080030004941bfffc80930004807300003b1b00243c0002b46000c5087c0803a64e800021807b00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffffac3b7b0010827b00108253000482320020807b000c8311000c801800007c0803a64e8000213a0300003c6002a06063ee143b100000801800007c0803a64e80002181fb001081cf0004814e0020807b000c830a0000801800007c0803a64e800021392300003c6002a7606342703b090000801800007c0803a64e800021811b001080e8000480c70020807b000c83060008801800007c0803a64e80002138a30000386000013b050000833b0004801800007c0903a67f2803a63b7b001c4e800420|@8257,1048575|84,3,@712 144,3,@2814 236,3,@265 296,3,@4530 408,3,@8246 556,3,@8248 644,3,@8255 736,3,@265 796,3,@2776 8246:C2,76|7f2802a66339000282f8000482d70000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d000092d500049075000092b70000386000017f2803a64e800020|@8247,1015809| 8247:S37|56414c55455f4f505328292e646973706c6179536967283629616464546f4c697374283129 8248:O1|@8249 8249:C2,72|7f2802a6633900023b030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003ee002b462f7c3ec92e30000930300047f2803a64e800020|@8254,917505|48,3,@8250 8250:C2,68|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000480d7000480b7000080830004806300003c0002b46000c44c7c0903a64e800420|@8253,917519|52,3,@8251 8251:C2,28|38830000386500003f00000063184408801800007c0903a64e800420|@8252,917519|8,3,I29 8252:S33|56414c55455f4f505328292e646973706c61795369672836296f72646572283429 8253:S36|56414c55455f4f505328292e646973706c61795369672836296f72646572283129283129 8254:S33|56414c55455f4f505328292e646973706c61795369672836296f72646572283129 8255:C2,1416|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000218078000082e3000482d7000882b60124973bfffc971bfffc949bfffc3864000083150000801800007c0803a64e80002128030001418200d8829b00048274000082530004823200208074fffc8311000c801800007c0803a64e8000213a0300003c6002ab60632ff83b100000801800007c0803a64e80002181fb000481cf0000814e0004812a000881090124807b000083080008801800007c0803a64e80002180fb000480c7fff83980000254c0f80140a20010800d00347c0803a64e8000217cac341141a3fff08087000083270004831b0008933b000880c700083ae5000080a7fffc82c40008389700003ab800003b1600003b350000801800007c0903a67f2803a63b7b00084e800420829b000482740000825300048232000882110128807b000083100000801800007c0803a64e80002128030001418200d081fb000481cf0000814e0004812a0020806ffffc8309000c801800007c0803a64e800021390300003c6002ab60632ff83b080000801800007c0803a64e80002180fb000480c7000080a60004808500088064012883230008807b00003b190000801800007c0803a64e800021831b000482f8fff83980000256e0f80140a20010800d00347c0803a64e8000217eccbc1141a3fff082b8000082980004827b0008929b000880d8000880b8fffc389600008315000c3b330000801800007c0903a67f2803a63b7b00084e80042081fb000481cf0000814e0004812a00088109012c807b000083080000801800007c0803a64e80002128030001418200dc80fb000480c7000080a60004808500208067fffc8304000c801800007c0803a64e8000213b2300003c6002ab60632ff83b190000801800007c0803a64e800021831b000482f8000082d7000482b6000c829600088274012c80150028941bfffc807b000483130008801800007c0803a64e800021825b00083a230000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d0000821200049203000c81f2fffc91e3000881d2fff891c3000492230000831b0000833b000c801800007c0903a67f2803a63b7b00104e80042080fb000480c7000080a60004808500088064013083230000807b00003b190000801800007c0803a64e8000212803000141820148831b000482f8000082d7000482b6000882950130807b000083140008801800007c0803a64e800021827b000482530000823200048211000881f00068947bfffc830f0008801800007c0803a64e80002181db0008814e0000812a00048109000880e8006c80030004941bfffc807b000083070000801800007c0803a64e800021280300014182004080db000c80a6000080850004806400088323006c807b000083190008801800007c0803a64e80002138600001831b00107f0803a63b7b00144e80002080db000c80a6000080850004806400208323000c8066fffc3b190000801800007c0803a64e8000213b0300003c6002ab60632ff8801800007c0803a64e80002182fb000c82d7000082b70004829b001092bb001080d7000880b7fffc8097fff8807b0004831600103b340000801800007c0903a67f2803a63b7b00104e800420831b000482f8000082d7000482b6000882950134807b000083140000801800007c0803a64e80002128030001418200a0827b00048253000082320004821100208073fffc8310000c801800007c0803a64e80002139e300003c6002ab60632ff83b0f0000801800007c0803a64e80002181db0004814e0000812a00048109000880e80134807b000083070008801800007c0803a64e80002180db000480a600008085001480a6fffc3b2400008086fff83b190000833b0008801800007c0903a67f2803a63b7b000c4e80042038600001827b00087e6803a63b7b000c4e800020|@8256,1048575|128,3,@4609 388,3,@4609 640,3,@4609 1108,3,@4609 1280,3,@4609 8256:S39|56414c55455f4f505328292e646973706c6179536967283629646973706c617953706563283229 8257:S25|56414c55455f4f505328292e646973706c6179536967283629 8258:O3|@8259,@3566,@8240 8259:C2,864|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021548bf80140a20010800d00347c0803a64e8000212c0400014181004c82f8000482d70020973bfffc3865000083160000801800007c0803a64e8000213aa300003c6002aa6063f9243b150000833b0000801800007c0903a67f2803a63b7b00084e80042082f8000482d70008973bfffc971bfffc947bfffc949bfffc94bbfffc94dbfffc831600d8801800007c0803a64e800021280300014182004c82bb00108295000482740020807b000483130000801800007c0803a64e8000213a4300003c6002b16063a9dc3b120000833b0014801800007c0903a67f2803a63b7b001c4e80042082bb00108295000482740008807b000c831300e0801800007c0803a64e800021825b00108232000482110008947bfffc80100000941bfffc807b0014831000dc801800007c0803a64e800021831b0000801800007c0803a64e80002181fb001881cf0004814e0020947bfffc807b0010830a0004801800007c0803a64e800021392300003c6002a16063f6583b090000801800007c0803a64e800021811b001c80e8000480c70020807b001083060000801800007c0803a64e800021947bfffc809b000c3c6002b46063ce8c3c0002a1600074a87c0803a64e8000213c8002b160849ec43c0002a1600074a87c0803a64e800021831b0000801800007c0803a64e80002180bb002080850004806400208323000c807b00143b190000801800007c0803a64e8000213b0300003c6002ab60632ff8801800007c0803a64e8000213c80000060844668807b00043f00000063184368801800007c0803a64e800021280300014082004082fb002082d7000482b60020807b001483150000801800007c0803a64e8000213a830000807b00043b140000801800007c0803a64e8000214800007882fb002082d7000482b60008807b001c831500dc801800007c0803a64e800021829b0018398000025680f80140a20010800d00347c0803a64e8000217e6ca41141a3fff0825b0020823b0010963bfffc821b002c961bfffc38c0000380bb001c3893000083120008801800007c0803a64e80002181fb002081cf0004814e0020807b0014830a0008801800007c0803a64e80002139230000386000013b090000833b0024801800007c0903a67f2803a63b7b002c4e800420|@8261,1048575|96,3,@4530 224,3,@6703 392,3,@711 456,3,@8260 464,3,@511 480,3,@6683 488,3,@511 560,3,@4609 580,3,I48 592,3,I24 8260:S10|73747275637475726520 8261:S32|56414c55455f4f505328292e646973706c617953747275637475726573283529 8262:C2,2396|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7000882b60068973bfffc971bfffc949bfffc94bbfffc94dbfffc83150008801800007c0803a64e800021829b0008568bf80140a20010800d00347c0803a64e8000212c1400014181004c827b000c8253000482320020807b000483110000801800007c0803a64e8000213a0300003c6002aa6063f9243b100000833b0010801800007c0903a67f2803a63b7b00184e800420827b000c82530004823200088211007480030000941bfffc80030004941bfffc80030008941bfffc8003000c941bfffc807b000883100000801800007c0803a64e80002128030001418205b481fb001c81cf0004814e0008812a0034807b000483090000801800007c0803a64e8000212803000141820404811b001c80e8000480c7000880a60034807b000483050008801800007c0803a64e800021809b001c8324000483190020947bfffc807b001883180004801800007c0803a64e8000213ae300003c6002a16063f6583b170000801800007c0803a64e80002182db002082b6000482950020807b001883140000801800007c0803a64e8000213a6300003c6002a7606343bc3b130000801800007c0803a64e800021825b00208232000482110020807b00188310000c801800007c0803a64e80002139e300003c6002a06063ee143b0f0000801800007c0803a64e80002181db0020814e0004812a0020807b001883090000801800007c0803a64e800021947bfffc3c8002ab60843004807b00143c0002a1600074a87c0803a64e800021831b0000801800007c0803a64e800021811b002480e8000480c70020807b001c8306000c801800007c0803a64e80002138a300003c6002b46063d8403b050000801800007c0803a64e80002197fbfffc3c8002b46084d1ce949bfffc38600001947bfffc3bfb0000833b00308319000482f80004807b001083170064801800007c0803a64e80002182db003082bb002496bbfffc80db002c80bb0030809b001883160008801800007c0803a64e80002183fb00084800006c828300002c140003408200183c6002a06063962c800d00287c0803a64e800021827b00248253000482320020807b001c83110000801800007c0803a64e8000213a0300003c6002aa606359243b100000801800007c0803a64e800021947bfffc947bfffc947bfffc81fb003081cf0004814e0020807b0028830a000c801800007c0803a64e800021392300003c6002a06063ee143b090000801800007c0803a64e800021811b003080e8000480c70020807b002883060004801800007c0803a64e80002138a300003c6002a16063f6583b050000801800007c0803a64e800021809b00308064000483230020807b002883190000801800007c0803a64e8000213b03000038600075801800007c0803a64e80002182fb003082d7000482b60020807b00288315000c801800007c0803a64e8000213a8300003c6002b46063d8403b140000801800007c0803a64e800021827b0030825300048232000c398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d0000821b00389203000c81fb002891e3000881db002c91c30004815b00149143000083110024801800007c0803a64e800021813b00308109000480e80020807b002883070008801800007c0803a64e80002138c30000386000013b060000801800007c0803a64e80002180bb0030808500048064002083230008807b00283b190000801800007c0803a64e8000213b03000038600001833b0034801800007c0903a67f2803a63b7b003c4e800420811b001c80e8000480c70020807b001483060004801800007c0803a64e80002138a300003c6002a16063f6583b050000801800007c0803a64e800021809b001c8064000483230020807b001483190000801800007c0803a64e800021947bfffc809b00103c6002b46063d84c3c0002a1600074a87c0803a64e8000213c8002b160849ec43c0002a1600074a87c0803a64e800021831b0000801800007c0803a64e800021831b002082f8000482d70020807b00188316000c801800007c0803a64e8000213aa300003c6002b46063d8403b150000801800007c0803a64e800021829b0020827400048253000c398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d0000823b00289223000c821b00189203000881fb001c91e3000481db000491c3000083120024801800007c0803a64e800021815b0020812a000481090020807b001883080008801800007c0803a64e80002138e30000386000013b070000833b0024801800007c0903a67f2803a63b7b002c4e80042081fb001c81cf0004814e0008812a0070807b000883090000801800007c0803a64e800021280300014182026c811b001c80e8000480c70020807b001483060004801800007c0803a64e80002138a300003c6002a16063f6583b050000801800007c0803a64e800021809b001c8064000483230020807b001483190000801800007c0803a64e8000213b0300003c6002a760634434801800007c0803a64e80002182fb001c82d7000482b60020807b00148315000c801800007c0803a64e8000213a8300003c6002a66063e9943b140000801800007c0803a64e800021827b001c8253000482320020807b001483110000801800007c0803a64e8000213a030000807b000c3b100000801800007c0803a64e80002181fb001c81cf0004814e0008812a0018807b000083090000801800007c0803a64e8000212803000140820114811b001c80e8000480c70020807b00148306000c801800007c0803a64e80002138a300003c6002a66063e9943b050000801800007c0803a64e800021809b001c8064000483230020807b001483190000801800007c0803a64e8000213b0300003c6002a760634140801800007c0803a64e80002182fb001c82d7000482b60020807b00148315000c801800007c0803a64e8000213a8300003c6002b46063d8403b140000801800007c0803a64e800021827b001c825300048232000c398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d0000821b00249203000c81fb001491e3000881db001891c30004815b00009143000083110024801800007c0803a64e800021811b001c80e8000480c70020807b001483060008801800007c0803a64e80002138a30000386000013b050000833b0020801800007c0903a67f2803a63b7b00284e80042038600001811b00207d0803a63b7b00284e800020|@8265,1048575|148,3,@4530 380,3,@711 440,3,@2801 500,3,@265 560,3,@4610 572,3,@511 640,3,@8263 668,3,$8262+774 784,3,@54 840,3,@4105 912,3,@265 972,3,@711 1084,3,@8263 1364,3,@711 1428,3,@8264 1436,3,@511 1452,3,@6683 1460,3,@511 1528,3,@8263 1796,3,@711 1856,3,@2810 1912,3,@2416 2072,3,@2416 2132,3,@2752 2188,3,@8263 8263:O2|1,3 8264:S4|76616c20 8265:S28|56414c55455f4f505328292e646973706c617956616c756573283529 8266:O2|@8267,@8258 8267:C2,72|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e3001096fbfffc80c3000c80a30008808300048063000083180004801800007c0903a64e800420|@8268,1048575| 8268:S32|56414c55455f4f505328292e646973706c617953747275637475726573283129 8269:O2|@8271,@8270 8270:O3|@8273,@3566,@8240 8271:C2,72|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e3001096fbfffc80c3000c80a30008808300048063000083180004801800007c0903a64e800420|@8272,1048575| 8272:S30|56414c55455f4f505328292e646973706c617946756e63746f7273283129 8273:C2,1144|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021548bf80140a20010800d00347c0803a64e8000212c0400014181004c82f8000482d70020973bfffc3865000083160000801800007c0803a64e8000213aa300003c6002aa6063f9243b150000833b0000801800007c0903a67f2803a63b7b00084e80042082f8000482d70020973bfffc971bfffc947bfffc949bfffc94bbfffc94dbfffc3865000083160004801800007c0803a64e8000213aa300003c6002a16063f6583b150000801800007c0803a64e800021829b00108274000482530020807b000483120000801800007c0803a64e800021823b00108211000481f00008947bfffc807b0010830f00ec801800007c0803a64e800021388300003c6002b46063de503c0002a1600074a87c0803a64e8000213c8002a3608440703c0002a1600074a87c0803a64e800021831b0000801800007c0803a64e80002181db0014814e0004812a0020807b00088309000c801800007c0803a64e800021390300003c6002a16063f6583b080000801800007c0803a64e80002180fb001480c7000480a60008800500e0941bfffc807b0014830500f0801800007c0803a64e800021831b0000801800007c0803a64e8000213c800000608446683f00000063184368801800007c0803a64e80002128030001408200c8809b00188064000483230020807b000c83190000801800007c0803a64e800021831b001882f8000482d70008947bfffc801600e0941bfffc807b001c831600f0801800007c0803a64e800021831b0000801800007c0803a64e8000213c8002b160849ec43c0002a1600074a87c0803a64e800021831b0004801800007c0803a64e80002182bb00208295000482740020807b00148313000c801800007c0803a64e8000213a4300003c6002b46063d8403b120000801800007c0803a64e8000214800000c947bfffc947bfffc809b00208064000483230008801900dc941bfffc807b0020831900f0801800007c0803a64e800021831b0000801800007c0803a64e800021831b001c398000025700f80140a20010800d00347c0803a64e8000217eecc41141a3fff082db002482bb001496bbfffc829b0030969bfffc38c0000180bb00203897000083160008801800007c0803a64e800021827b00248253000482320020807b001883110000801800007c0803a64e8000213a0300003c6002b46063de603b100000801800007c0803a64e80002181fb002481cf0004814e0020807b0018830a000c801800007c0803a64e800021392300003c6002b46063d8403b090000801800007c0803a64e800021811b002480e8000480c70008807b0020830600f4801800007c0803a64e80002180bb001c3980000254a0f80140a20010800d00347c0803a64e8000217c8c2c1141a3fff0833b0024831b0014971bfffc82fb003096fbfffc38c0000380bb002083190008801800007c0803a64e80002182db002482b6000482950020807b001883140008801800007c0803a64e8000213a630000386000013b130000833b0028801800007c0903a67f2803a63b7b00304e800420|@8276,1048575|96,3,@4530 188,3,@711 284,3,@8274 292,3,@511 308,3,@1148 316,3,@511 384,3,@711 464,3,I48 472,3,I24 592,3,@6683 600,3,@511 668,3,@8263 880,3,@8275 940,3,@8263 8274:S8|66756e63746f7220 8275:S3|29203a 8276:S30|56414c55455f4f505328292e646973706c617946756e63746f7273283529 8277:O2|@8278,@8244 8278:C2,72|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e3001096fbfffc80c3000c80a30008808300048063000083180004801800007c0903a64e800420|@8279,1048575| 8279:S28|56414c55455f4f505328292e646973706c617956616c756573283129 8280:O3|@8283,@5164,@3566 8281:C2,64|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180c3000c80a30008808300048063000083180004801800007c0903a64e800420|@8282,1048575| 8282:S26|56414c55455f4f505328292e7072696e7456616c756573283129 8283:C2,344|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000882d7000882b60068973bfffc971bfffc949bfffc94bbfffc94dbfffc83150008801800007c0803a64e800021829b000c82740008825300088232007480030008941bfffc8003000c941bfffc8063000483110000801800007c0803a64e80002128030001418200bc821b001481f0000881cf0008814e0034807b0004830a0000801800007c0803a64e800021280300014182007c813b00148109000880e8000880c70034807b000483060008801800007c0803a64e80002180bb0014808500088324000483190064801800007c0803a64e800021831b001482fb000882db001892fb001880db000c80bb0010809b0000831800043b360000801800007c0903a67f2803a63b7b00184e80042038600001813b00187d2803a63b7b001c4e80002038600001821b00187e0803a63b7b001c4e800020|@8284,1048575| 8284:S26|56414c55455f4f505328292e7072696e7456616c756573283429 8285:O14|@886,@2086,@2348,@3651,@3586,@3592,@2250,@3601,@2242,@3607,@4439,@3128,@3613,@2356 8286:O4|@8288,@8370,@8287,@2665 8287:O2|@8414,@8289 8288:O2|@8290,@8289 8289:O6|@8324,@8325,@8340,@8358,@8359,@8323 8290:C2,932|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7000c82b60000398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213a9d0004919d00003e6002b46273e594927400008256000c9254000c9074000892f40004398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213a3d0004919d00003e0002b46210e9e89211000081f6000491f1000c9071000892f10004398000043bbdffec7c1df04040a00010800d001c7c0803a64e80002139dd0004919d00003d4002b4614aeb24914e000081360008912e000c906e000892ee0004398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021391d0004919d00003ce002b460e7ec6090e8000080d6001490c8000c9068000892e80004398000043bbdffec7c1df04040a00010800d001c7c0803a64e80002138bd0004919d00003c8002b46084ed9c90850000827600109265000c9065000892e50004398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213a1d0004919d00003d4002b4614aeed89150000080f6001890f0000c9070000892f00004398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021389d0004919d00003d4002b4614af014914400009244000c9064000892e40004398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021395d0004919d00003ee002b462f7f1a892ea000091ea000c906a000882f8000492ea00048257000c398000043bbdffec7c1df04040a00010800d001c7c0803a64e80002139fd0004919d00003d2002b46129f2f8912f000081320008912f000c906f000880d8000490cf00048266000c398000043bbdffec7c1df04040a00010800d001c7c0803a64e80002138fd0004919d00003ec002b462d6f44892c7000082d3001492c7000c9067000890c70004398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003e4002b46252f59892570000813300109137000c9077000890d70004398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213a5d0004919d00003cc002b460c6f6e890d2000080d3001890d2000c9072000880780004907200043980000c3bbdffcc7c1df04040a00010800d001c7c0803a64e800021387d0004919d000090a3002c9203002892e3002491c300209243001c92230018910300149283001091e3000c9143000890e30004908300003af8000083150004801800007c0903a67f2803a64e800420|@8322,1048575|80,3,@8291 144,3,@8298 208,3,@8300 272,3,@8302 336,3,@8304 400,3,@8306 464,3,@8308 524,3,@8312 592,3,@8314 664,3,@8316 728,3,@8318 792,3,@8320 8291:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f80008398000053bbdffe87c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002b462b5e63c92b6000082b8000492b60010829700049296000c8278000c927600089076000480970000387600003c0002b46000e6f47c0903a67f2803a64e800420|@8297,1048575|72,3,@8292 120,3,@8294 8292:C2,120|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8001082d70008398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000082b8000492a3000882980008928300048278000c9263000083160008801800007c0903a67f2803a64e800420|@8293,1048575| 8293:S25|4d414b455f28292e6462456e764c6f6f6b7570283329283129 8294:C2,652|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000213a9900003a630000386000013c0002a060009a807c0803a64e800021969bfffc967bfffc949bfffc947bfffc3c6002b46063e99c3c0002a060009c2c7c0803a64e8000213a400001823b000482110000281000034082000c39e00001480000743de0000139ef9c417e4b7b78556bf80140a20010800d00347c0803a64e8000217c1278004082000c39e0000148000044398000025640f80140a20010800d00347c0803a64e8000217dd2661541a3fff03a4e0000800d00187c1b004040a00010800d00207c0803a64e8000214bffff7c387100003f00000063184948801800007c0803a64e8000212c0300014082000c39c000014800003c38910000386000033f00000063184988801800007c0803a64e800021800d00187c1b004040a00010800d00207c0803a64e8000214bffff1897fbfffc3d4002b4614ae882955bfffc39200001953bfffc3bfb000038600001831b0014801800007c0803a64e8000213903000083fb00084800008438e30000807b00043f00000063184928801800007c0803a64e8000212c030003408200084800003480db000438a0000390a6000094fbfffc38860000386000053f00000063184988801800007c0803a64e8000214800000894fbfffc807b00043c0002a060009c2c7c0803a64e800021807b0000800d00287c0803a64e800021807b00103f00000063184928801800007c0803a64e8000212c030003408200084800003480fb001038c0000390c70000951bfffc38870000386000053f00000063184988801800007c0803a64e80002148000008951bfffc807b00103c0002a060009c2c7c0803a64e800021807b000080fb001c7ce803a63b7b00204e800020|@8296,1048575|44,3,@63 76,3,@8295 84,3,@67 128,2,20000 244,3,I71 288,3,I73 340,3,$8294+398 404,3,I70 460,3,I73 492,3,@67 528,3,I70 584,3,I73 616,3,@67 8295:O2|@5573,0 8296:S18|4d414b455f28292e70726f74656374283229 8297:S28|4d414b455f28292e6462456e764c6f6f6b7570283129283129283129 8298:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f80008398000053bbdffe87c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002b462b5ea9092b6000082b8000492b60010829700049296000c8278000c927600089076000480970000387600003c0002b46000e6f47c0903a67f2803a64e800420|@8297,1048575|72,3,@8299 120,3,@8294 8299:C2,120|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8001082d70008398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000082b8000492a3000882980008928300048278000c9263000083160008801800007c0903a67f2803a64e800420|@8293,1048575| 8300:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f80008398000053bbdffe87c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002b462b5ebcc92b6000082b8000492b60010829700049296000c8278000c927600089076000480970000387600003c0002b46000e6f47c0903a67f2803a64e800420|@8297,1048575|72,3,@8301 120,3,@8294 8301:C2,120|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8001082d70008398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000082b8000492a3000882980008928300048278000c9263000083160008801800007c0903a67f2803a64e800420|@8293,1048575| 8302:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f80008398000053bbdffe87c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002b462b5ed0892b6000082b8000492b60010829700049296000c8278000c927600089076000480970000387600003c0002b46000e6f47c0903a67f2803a64e800420|@8297,1048575|72,3,@8303 120,3,@8294 8303:C2,120|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8001082d70008398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000082b8000492a3000882980008928300048278000c9263000083160008801800007c0903a67f2803a64e800420|@8293,1048575| 8304:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f80008398000053bbdffe87c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002b462b5ee4492b6000082b8000492b60010829700049296000c8278000c927600089076000480970000387600003c0002b46000e6f47c0903a67f2803a64e800420|@8297,1048575|72,3,@8305 120,3,@8294 8305:C2,120|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8001082d70008398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000082b8000492a3000882980008928300048278000c9263000083160008801800007c0903a67f2803a64e800420|@8293,1048575| 8306:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f80008398000053bbdffe87c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002b462b5ef8092b6000082b8000492b60010829700049296000c8278000c927600089076000480970000387600003c0002b46000e6f47c0903a67f2803a64e800420|@8297,1048575|72,3,@8307 120,3,@8294 8307:C2,120|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8001082d70008398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000082b8000492a3000882980008928300048278000c9263000083160008801800007c0903a67f2803a64e800420|@8293,1048575| 8308:C2,152|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f80008398000063bbdffe47c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002b462b5f0c892b6000082b8000492b6001482970004929600108278000c9276000c8243000092560008822300049236000480970000387600003c0002b46000e6f47c0903a67f2803a64e800420|@8311,1048575|72,3,@8309 132,3,@8294 8309:C2,128|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8001482d70008398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d000082b8000492a3000c82980008928300088278000c92630004825800109243000083160004801800007c0903a67f2803a64e800420|@8310,1048575| 8310:S24|4d414b455f28292e6462456e76456e746572283429283129 8311:S27|4d414b455f28292e6462456e76456e746572283129283129283129 8312:C2,152|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f80008398000063bbdffe47c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002b462b5f25c92b6000082b8000492b6001482970004929600108278000c9276000c8243000092560008822300049236000480970000387600003c0002b46000e6f47c0903a67f2803a64e800420|@8311,1048575|72,3,@8313 132,3,@8294 8313:C2,128|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8001482d70008398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d000082b8000492a3000c82980008928300088278000c92630004825800109243000083160004801800007c0903a67f2803a64e800420|@8310,1048575| 8314:C2,152|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f80008398000063bbdffe47c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002b462b5f3ac92b6000082b8000492b6001482970004929600108278000c9276000c8243000092560008822300049236000480970000387600003c0002b46000e6f47c0903a67f2803a64e800420|@8311,1048575|72,3,@8315 132,3,@8294 8315:C2,128|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8001482d70008398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d000082b8000492a3000c82980008928300088278000c92630004825800109243000083160004801800007c0903a67f2803a64e800420|@8310,1048575| 8316:C2,152|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f80008398000063bbdffe47c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002b462b5f4fc92b6000082b8000492b6001482970004929600108278000c9276000c8243000092560008822300049236000480970000387600003c0002b46000e6f47c0903a67f2803a64e800420|@8311,1048575|72,3,@8317 132,3,@8294 8317:C2,128|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8001482d70008398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d000082b8000492a3000c82980008928300088278000c92630004825800109243000083160004801800007c0903a67f2803a64e800420|@8310,1048575| 8318:C2,152|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f80008398000063bbdffe47c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002b462b5f64c92b6000082b8000492b6001482970004929600108278000c9276000c8243000092560008822300049236000480970000387600003c0002b46000e6f47c0903a67f2803a64e800420|@8311,1048575|72,3,@8319 132,3,@8294 8319:C2,128|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8001482d70008398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d000082b8000492a3000c82980008928300088278000c92630004825800109243000083160004801800007c0903a67f2803a64e800420|@8310,1048575| 8320:C2,152|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f80008398000063bbdffe47c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002b462b5f79c92b6000082b8000492b6001482970004929600108278000c9276000c8243000092560008822300049236000480970000387600003c0002b46000e6f47c0903a67f2803a64e800420|@8311,1048575|72,3,@8321 132,3,@8294 8321:C2,128|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8001482d70008398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d000082b8000492a3000c82980008928300088278000c92630004825800109243000083160004801800007c0903a67f2803a64e800420|@8310,1048575| 8322:S20|4d414b455f28292e67456e764173456e76283129 8323:O4|@2848,@343,@2847,@2088 8324:O1|@2665 8325:O6|@8327,@8328,@8331,@8334,@8335,@8326 8326:O1|@4080 8327:O1|@4053 8328:O1|@8329 8329:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a3000880830004806300003c0002aa600047807c0903a64e800420|@8330,1048575|44,3,@4062 8330:S20|486173685461626c652e68617368536574283129 8331:O1|@8332 8332:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180830004806300003c0002a760003c907c0903a64e800420|@8333,1048575|40,3,@2739 8333:S20|486173685461626c652e68617368537562283129 8334:O1|@4660 8335:O1|@8336 8336:C2,72|7f2802a6633900023b030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003ee002b462f7fa0492e30000930300047f2803a64e800020|@8339,917505|48,3,@8337 8337:C2,52|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021809800043c0002af6000fd307c0903a64e800420|@8338,1048575|36,3,@6296 8338:S24|486173685461626c652e68617368466f6c64283129283129 8339:S21|486173685461626c652e68617368466f6c64283129 8340:O5|@4051,@4057,@4074,@8342,@8341 8341:O1|@8349 8342:O1|@8343 8343:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a3000880830004806300003c0002b46000fb147c0903a64e800420|@8348,1048575|44,3,@8344 8344:C2,160|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc947bfffc949bfffc94bbfffc388500003c0002a760003c907c0803a64e800021706b000140820044806300003b1b000c3c0002b46000fbd07c0803a64e80002138a30000809b0000807b0008833b000c3c0002aa600047807c0903a67f2803a63b7b00104e80042038600001833b000c7f2803a63b7b00104e800020|@8347,1048575|52,3,@2739 84,3,@8345 116,3,@4062 8345:C2,204|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e80002082f8fff8973bfffc971bfffc80030000941bfffc80030004941bfffc807b000483170000801800007c0803a64e8000212803000141820018807b000082db000c7ec803a63b7b00104e800020807b0000831b00084bffff7d398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213add0004919d00009076000482bb000492b6000038760000829b000c7e8803a63b7b00104e800020|@8346,1048575| 8346:S37|556e6976657273616c5461626c652e756e697644656c657465283329736561726368283129 8347:S28|556e6976657273616c5461626c652e756e697644656c657465283329 8348:S28|556e6976657273616c5461626c652e756e697644656c657465283129 8349:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180830004806300003c0002b46000fd847c0903a64e800420|@8357,1048575|40,3,@8350 8350:C2,308|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b1d0004919d00003ee002b462f7fed492f8000090980004973bfffc949bfffc971bfffc3c0002ab60004cd47c0803a64e80002182c3000828160001418200a082bb0004947bfffc80150000941bfffc82830004386000013b140000801800007c0803a64e80002180630004831b0000801800007c0803a64e8000212803000141820024807b0004831b0008833b0010801800007c0903a67f2803a63b7b00144e800420827b00043860000183130000801800007c0803a64e8000213b7b0008800d00187c1b004040a00010800d00207c0803a64e8000214bffff5c831b0000833b0008801800007c0903a67f2803a63b7b000c4e800420|@8356,1048575|68,3,@8351 96,3,@4659 8351:C2,400|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc947bfffc83230008281900014182008c831b000482f80004947bfffc80170000941bfffc82c30004386000013b160000801800007c0803a64e80002180630004831b0000801800007c0803a64e800021280300014182000c3b0000034800004882bb00043860000183150000801800007c0803a64e8000213b7b0008800d00187c1b004040a00010800d00207c0803a64e8000214bffff703b000001947bfffc947bfffc82fb000c398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002b562b5008092b60000829b00089296000c827700049276000892f60004398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a5d0004919d00003e2002b5623101e8923200009292000892720004398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a1d0004919d0000931000089250000492d000003870000081fb00107de803a63b7b00144e800020|@8355,1048575|244,3,@8352 312,3,@8354 8352:C2,276|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000218078000c973bfffc971bfffc82e30000386000013b170000801800007c0803a64e80002182c3000828160001418200a882bb000082950008947bfffc80140000941bfffc82630004386000013b130000801800007c0803a64e80002180630004831b0000801800007c0803a64e8000212803000141820028825b0008807b000483120004833b000c801800007c0903a67f2803a63b7b00104e800420825b00043860000183120000801800007c0803a64e8000213b7b0008800d00187c1b004040a00010800d00207c0803a64e8000214bffff5482bb000083150004833b0004801800007c0903a67f2803a63b7b00084e800420|@8353,1048575| 8353:S48|556e6976657273616c5461626c652e756e69764f76657253706563696669632832296d616b6549746572283129283129 8354:C2,172|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180780008973bfffc971bfffc82e30004386000013b170000801800007c0803a64e80002182db000082b6000480030000941bfffc8063000483150008801800007c0803a64e8000213a830000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092830004827b000092630000825b00087e4803a63b7b000c4e800020|@8353,1048575| 8355:S45|556e6976657273616c5461626c652e756e69764f76657253706563696669632832296d616b6549746572283129 8356:S34|556e6976657273616c5461626c652e756e69764f7665725370656369666963283229 8357:S34|556e6976657273616c5461626c652e756e69764f7665725370656369666963283129 8358:O7|@3549,@4148,@4177,@3661,@4173,@4169,@4165 8359:O5|@9377,@1092,@8360,@4705,@4704 8360:O1|@8361 8361:C2,72|7f2802a6633900023b030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003ee002b562f703e492e30000930300047f2803a64e800020|@8369,917505|48,3,@8362 8362:C2,52|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021809800043c0002b5600004347c0903a64e800420|@8368,1048575|36,3,@8363 8363:C2,96|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc949bfffc3f0002b5631804b0801800007c0803a64e8000213b1b00043c0002b56000058c7c0803a64e800021833b00047f2803a63b7b00084e800020|@8367,1048575|40,3,@8364 64,3,@8366 8364:O1|@8365 8365:C2,184|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021830300082818000141820088973bfffc947bfffc82e30004386000013b170000801800007c0803a64e80002182db0000947bfffc3860000183160000801800007c0803a64e8000214bffff99398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d000090750004829b00009295000038750000827b00087e6803a63b7b000c4e800020386000014e800020|@4716,1048575| 8366:C2,168|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0300014082000c386000014e800020973bfffc971bfffc80030004941bfffc806300008318fffc801800007c0803a64e800021947bfffc807b0004831b00084bffffa1398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d000090790004831b0000931900003879000082fb000c7ee803a63b7b00104e800020|@234,1048575| 8367:S19|4d6973632e6d61704974657261746f72283229 8368:S22|4d6973632e6d61704974657261746f72283129283129 8369:S19|4d6973632e6d61704974657261746f72283129 8370:O2|@8372,@8371 8371:O2|@8374,@8289 8372:C2,324|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc947bfffc947bfffc947bfffc947bfffc947bfffc947bfffc947bfffc947bfffc947bfffc947bfffc947bfffc947bfffc947bfffc947bfffc947bfffc947bfffc947bfffc973bfffc389b000483180004801800007c0803a64e800021398000123bbdffb47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000833b000493230000831b00089303000482fb000c92e3000882db001092c3000c82bb001492a30010829b001892830014827b001c92630018825b00209243001c823b002492230020821b00289203002481fb002c91e3002881db003091c3002c815b003491430030813b003891230034811b003c9103003880fb004090e3003c80db004490c3004080bb004890a30044809b00007c8803a63b7b004c4e800020|@8373,1048575| 8373:S26|4d414b455f28292e67456e7641734e616d655370616365283129 8374:C2,1552|7f2802a66339000239600054800d00187d6bd8107c0b004040a00010800d00247c0803a64e80002182f8000482d7000c398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003e8002b562940e70929500008296000c9295000c9075000892f50004398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213a7d0004919d00003e4002b562520fac92530000825600049253000c9073000892f30004398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213a3d0004919d00003e0002b5621010e892110000821600089211000c9071000892f10004398000043bbdffec7c1df04040a00010800d001c7c0803a64e80002139fd0004919d00003dc002b561ce122491cf000081d6001491cf000c906f000892ef0004398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021395d0004919d00003d2002b561291360912a000081360010912a000c906a000892ea0004398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021391d0004919d00003ce002b560e7149c90e8000080f6001890e8000c9068000892e80004398000043bbdffec7c1df04040a00010800d001c7c0803a64e80002138dd0004919d00003ca002b560a515d890a600009286000c9066000892e60004398000043bbdffec7c1df04040a00010800d001c7c0803a64e80002138bd0004919d00003ee002b562f7172892e500009245000c9065000882f8000492e500048297000c398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213a5d0004919d00003e0002b56210187892120000821400089212000c9072000881d8000491d20004812e000c398000043bbdffec7c1df04040a00010800d001c7c0803a64e80002138fd0004919d00003ec002b562d619c892c7000082c9001492c7000c9067000891c70004398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003e8002b562941b1892970000820900109217000c9077000891d70004398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213a9d0004919d00003dc002b561ce1c6891d4000081c9001891d4000c9074000882d8000492d400048216000c398000043bbdffec7c1df04040a00010800d001c7c0803a64e80002139dd0004919d00003d2002b561291db8912e00008130000c912e000c906e000882d8000492ce00048216000c398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021393d0004919d00003ec002b562d61f5492c9000082d0000492c9000c90690008821800049209000482d0000c398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213a1d0004919d0000973bfffc971bfffc947bfffc949bfffc96bbfffc967bfffc963bfffc95fbfffc955bfffc951bfffc94dbfffc94bbfffc965bfffc94fbfffc96fbfffc969bfffc80180004941bfffc95dbfffc953bfffc80160008941bfffc961bfffc3f0002b5631820ac9310000082db000492d0000c90700008831b00109310000482db004c831600048078000c809b004c398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003e6002b56273220492750000826300149275000c823b004892350008822400049235000481fb004c814f0004810a000c80db004c398000043bbdffec7c1df04040a00010800d001c7c0803a64e80002138bd0004919d00003e4002b56252235c92450000824800109245000c80fb004890e5000880e6000490e5000482fb004c8297000481d4000c813b004c398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213a1d0004919d00003ec002b562d624b492d0000082ce001892d0000c831b0048931000088309000493100004827b0044807b000c9073000092b3000482bb000892b30008807b00009073000c9213001082bb002892b30014821b001c92130018807b00249073001c90b3002082bb002092b30024821b00409213002880bb003490b3002c807b003c9073003082bb001492b30034821b00389213003880bb001890b3003c807b002c9073004082bb003092b30044386000017f2803a63b7b00544e800020|@8413,1048575|84,3,@8375 148,3,@8377 212,3,@8379 276,3,@8381 340,3,@8383 404,3,@8385 468,3,@8387 528,3,@8389 596,3,@8391 668,3,@8393 732,3,@8395 796,3,@8397 868,3,@8399 940,3,@8403 1104,3,@8405 1188,3,@8407 1276,3,@8409 1364,3,@8411 8375:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f80008398000053bbdffe87c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002b562b50f1892b6000082b8000492b60010829700049296000c8278000c927600089076000480970000387600003c0002b46000e6f47c0903a67f2803a64e800420|@8297,1048575|72,3,@8376 120,3,@8294 8376:C2,120|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8001082d70008398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000082b8000492a3000882980008928300048278000c9263000083160008801800007c0903a67f2803a64e800420|@8293,1048575| 8377:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f80008398000053bbdffe87c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002b562b5105492b6000082b8000492b60010829700049296000c8278000c927600089076000480970000387600003c0002b46000e6f47c0903a67f2803a64e800420|@8297,1048575|72,3,@8378 120,3,@8294 8378:C2,120|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8001082d70008398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000082b8000492a3000882980008928300048278000c9263000083160008801800007c0903a67f2803a64e800420|@8293,1048575| 8379:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f80008398000053bbdffe87c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002b562b5119092b6000082b8000492b60010829700049296000c8278000c927600089076000480970000387600003c0002b46000e6f47c0903a67f2803a64e800420|@8297,1048575|72,3,@8380 120,3,@8294 8380:C2,120|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8001082d70008398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000082b8000492a3000882980008928300048278000c9263000083160008801800007c0903a67f2803a64e800420|@8293,1048575| 8381:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f80008398000053bbdffe87c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002b562b512cc92b6000082b8000492b60010829700049296000c8278000c927600089076000480970000387600003c0002b46000e6f47c0903a67f2803a64e800420|@8297,1048575|72,3,@8382 120,3,@8294 8382:C2,120|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8001082d70008398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000082b8000492a3000882980008928300048278000c9263000083160008801800007c0903a67f2803a64e800420|@8293,1048575| 8383:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f80008398000053bbdffe87c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002b562b5140892b6000082b8000492b60010829700049296000c8278000c927600089076000480970000387600003c0002b46000e6f47c0903a67f2803a64e800420|@8297,1048575|72,3,@8384 120,3,@8294 8384:C2,120|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8001082d70008398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000082b8000492a3000882980008928300048278000c9263000083160008801800007c0903a67f2803a64e800420|@8293,1048575| 8385:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f80008398000053bbdffe87c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002b562b5154492b6000082b8000492b60010829700049296000c8278000c927600089076000480970000387600003c0002b46000e6f47c0903a67f2803a64e800420|@8297,1048575|72,3,@8386 120,3,@8294 8386:C2,120|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8001082d70008398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000082b8000492a3000882980008928300048278000c9263000083160008801800007c0903a67f2803a64e800420|@8293,1048575| 8387:C2,152|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f80008398000063bbdffe47c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002b562b5168c92b6000082b8000492b6001482970004929600108278000c9276000c8243000092560008822300049236000480970000387600003c0002b46000e6f47c0903a67f2803a64e800420|@8311,1048575|72,3,@8388 132,3,@8294 8388:C2,128|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8001482d70008398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d000082b8000492a3000c82980008928300088278000c92630004825800109243000083160004801800007c0903a67f2803a64e800420|@8310,1048575| 8389:C2,152|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f80008398000063bbdffe47c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002b562b517dc92b6000082b8000492b6001482970004929600108278000c9276000c8243000092560008822300049236000480970000387600003c0002b46000e6f47c0903a67f2803a64e800420|@8311,1048575|72,3,@8390 132,3,@8294 8390:C2,128|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8001482d70008398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d000082b8000492a3000c82980008928300088278000c92630004825800109243000083160004801800007c0903a67f2803a64e800420|@8310,1048575| 8391:C2,152|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f80008398000063bbdffe47c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002b562b5192c92b6000082b8000492b6001482970004929600108278000c9276000c8243000092560008822300049236000480970000387600003c0002b46000e6f47c0903a67f2803a64e800420|@8311,1048575|72,3,@8392 132,3,@8294 8392:C2,128|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8001482d70008398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d000082b8000492a3000c82980008928300088278000c92630004825800109243000083160004801800007c0903a67f2803a64e800420|@8310,1048575| 8393:C2,152|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f80008398000063bbdffe47c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002b562b51a7c92b6000082b8000492b6001482970004929600108278000c9276000c8243000092560008822300049236000480970000387600003c0002b46000e6f47c0903a67f2803a64e800420|@8311,1048575|72,3,@8394 132,3,@8294 8394:C2,128|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8001482d70008398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d000082b8000492a3000c82980008928300088278000c92630004825800109243000083160004801800007c0903a67f2803a64e800420|@8310,1048575| 8395:C2,152|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f80008398000063bbdffe47c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002b562b51bcc92b6000082b8000492b6001482970004929600108278000c9276000c8243000092560008822300049236000480970000387600003c0002b46000e6f47c0903a67f2803a64e800420|@8311,1048575|72,3,@8396 132,3,@8294 8396:C2,128|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8001482d70008398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d000082b8000492a3000c82980008928300088278000c92630004825800109243000083160004801800007c0903a67f2803a64e800420|@8310,1048575| 8397:C2,152|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f80008398000063bbdffe47c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002b562b51d1c92b6000082b8000492b6001482970004929600108278000c9276000c8243000092560008822300049236000480970000387600003c0002b46000e6f47c0903a67f2803a64e800420|@8311,1048575|72,3,@8398 132,3,@8294 8398:C2,128|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8001482d70008398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d000082b8000492a3000c82980008928300088278000c92630004825800109243000083160004801800007c0903a67f2803a64e800420|@8310,1048575| 8399:C2,136|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180780008398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002b562d61e5c92d7000082d8000492d7000c82a3000492b700088298000c9297000480830000387700003c0002b46000e6f47c0903a67f2803a64e800420|@8402,1048575|72,3,@8400 116,3,@8294 8400:C2,152|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000c82d7001082b70008398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082980004928300048278000892630000973bfffc80160010941bfffc83150010801800007c0803a64e800021831b0000833b0004801800007c0903a67f2803a63b7b00084e800420|@8401,1048575| 8401:S22|4d414b455f28292e6462456e76416c6c283329283129 8402:S25|4d414b455f28292e6462456e76416c6c283129283129283129 8403:C2,136|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180780008398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002b562d61ff892d7000082d8000492d7000c82a3000492b700088298000c9297000480830000387700003c0002b46000e6f47c0903a67f2803a64e800420|@8402,1048575|72,3,@8404 116,3,@8294 8404:C2,152|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000c82d7001082b70008398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082980004928300048278000892630000973bfffc80160010941bfffc83150010801800007c0803a64e800021831b0000833b0004801800007c0903a67f2803a63b7b00084e800420|@8401,1048575| 8405:C2,136|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180780008398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002b562d6215092d7000082d8000492d7000c82a3000492b700088298000c9297000480830000387700003c0002b46000e6f47c0903a67f2803a64e800420|@8402,1048575|72,3,@8406 116,3,@8294 8406:C2,152|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000c82d7001082b70008398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082980004928300048278000892630000973bfffc80160010941bfffc83150010801800007c0803a64e800021831b0000833b0004801800007c0903a67f2803a63b7b00084e800420|@8401,1048575| 8407:C2,136|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180780008398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002b562d622a892d7000082d8000492d7000c82a3000492b700088298000c9297000480830000387700003c0002b46000e6f47c0903a67f2803a64e800420|@8402,1048575|72,3,@8408 116,3,@8294 8408:C2,152|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000c82d7001082b70008398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082980004928300048278000892630000973bfffc80160010941bfffc83150010801800007c0803a64e800021831b0000833b0004801800007c0903a67f2803a63b7b00084e800420|@8401,1048575| 8409:C2,136|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180780008398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002b562d6240092d7000082d8000492d7000c82a3000492b700088298000c9297000480830000387700003c0002b46000e6f47c0903a67f2803a64e800420|@8402,1048575|72,3,@8410 116,3,@8294 8410:C2,152|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000c82d7001082b70008398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082980004928300048278000892630000973bfffc80160010941bfffc83150010801800007c0803a64e800021831b0000833b0004801800007c0903a67f2803a63b7b00084e800420|@8401,1048575| 8411:C2,136|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180780008398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002b562d6255892d7000082d8000492d7000c82a3000492b700088298000c9297000480830000387700003c0002b46000e6f47c0903a67f2803a64e800420|@8402,1048575|72,3,@8412 116,3,@8294 8412:C2,152|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000c82d7001082b70008398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082980004928300048278000892630000973bfffc80160010941bfffc83150010801800007c0803a64e800021831b0000833b0004801800007c0903a67f2803a63b7b00084e800420|@8401,1048575| 8413:S26|4d414b455f28292e67456e7641734e616d655370616365283229 8414:C2,1728|7f2802a66339000239600060800d00187d6bd8107c0b004040a00010800d00247c0803a64e80002182f8000482d7000c398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003e8002b562942d0c929500008296000c9295000c9075000892f50004398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213a7d0004919d00003e4002b562522e4892530000825600049253000c9073000892f30004398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213a3d0004919d00003e0002b562102f8492110000821600089211000c9071000892f10004398000043bbdffec7c1df04040a00010800d001c7c0803a64e80002139fd0004919d00003dc002b561ce30c091cf000081d6001491cf000c906f000892ef0004398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021395d0004919d00003d2002b5612931fc912a000081360010912a000c906a000892ea0004398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021391d0004919d00003ce002b560e7333890e8000080f6001890e8000c9068000892e80004398000043bbdffec7c1df04040a00010800d001c7c0803a64e80002138dd0004919d00003ca002b560a5347490a600009286000c9066000892e60004398000043bbdffec7c1df04040a00010800d001c7c0803a64e80002138bd0004919d00003c8002b5608435c4908500009245000c9065000892e50004398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021389d0004919d00003ee002b562f7371492e400009204000c9064000882f8000492e400048297000c398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213a5d0004919d00003e0002b56210386492120000821400109212000c9072000881d8000491d20004812e000c398000043bbdffec7c1df04040a00010800d001c7c0803a64e80002138fd0004919d00003ee002b562f739b492e7000082e9001492e7000c9067000891c70004398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213a1d0004919d00003dc002b561ce3b0491d0000081c9001891d0000c9070000882f8000492f0000481d7000c398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213afd0004919d0000973bfffc971bfffc947bfffc8016000c941bfffc96bbfffc80160004941bfffc967bfffc80160008941bfffc963bfffc95fbfffc955bfffc951bfffc94dbfffc94bbfffc949bfffc80140010941bfffc965bfffc80090014941bfffc94fbfffc80090018941bfffc961bfffc800e000c941bfffc80180004941bfffc96fbfffc3dc002b561ce3c5491d70000813b00089137000c90770008831b00049317000482db00588296000481d4000c398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021393d0004919d00003f0002b563183dac93090000830e00049309000c9069000892890004398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00003ea002b562b53f0492a3000082ae000892a3000c827b00549263000892830004827b00588233000481f1000c815b0058398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021391d0004919d00003cc002b560c6405c90c8000080cf001490c8000c80bb005490a8000880aa000490a80004809b00588244000480f2000c821b0058398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002b562d641b492d7000082c7001092d7000c829b0054929700088290000492970004831b005882b8000481d5000c827b0058398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213a3d0004919d00003de002b561ef430c91f1000080ce001890d1000c81fb005491f1000881f3000491f10004398000123bbdffb47c1df04040a00010800d001c7c0803a64e800021395d0004919d000080bb003490aa004480bb003090aa004080bb001c90aa003c80bb003c90aa003880bb000c90aa003480bb004490aa003080bb003890aa002c80bb004c90aa002880bb002490aa002492ea002082fb002892ea001c80bb001490aa001882fb002c92ea0014922a0010906a000c912a0008910a0004823b0000922a0000813b00583980000a3bbdffd47c1df04040a00010800d001c7c0803a64e800021391d0004919d00003ca002b560a5446490a8000091480024807b00509068002082fb004892e8001c823b002092280018815b00189148001480bb001090a80010807b00409068000c82fb005492e800088229000492280004386800007f2803a63b7b00604e800020|@8522,1048575|84,3,@8415 148,3,@8417 212,3,@8419 276,3,@8421 340,3,@8423 404,3,@8425 468,3,@8427 528,3,@8429 588,3,@8431 656,3,@8433 728,3,@8435 792,3,@8437 992,3,@8439 1072,3,@8441 1136,3,@8443 1220,3,@8445 1308,3,@8447 1396,3,@8449 1632,3,@8451 8415:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f80008398000053bbdffe87c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002b562b52db492b6000082b8000492b60010829700049296000c8278000c927600089076000480970000387600003c0002b46000e6f47c0903a67f2803a64e800420|@8297,1048575|72,3,@8416 120,3,@8294 8416:C2,120|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8001082d70008398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000082b8000492a3000882980008928300048278000c9263000083160008801800007c0903a67f2803a64e800420|@8293,1048575| 8417:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f80008398000053bbdffe87c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002b562b52ef092b6000082b8000492b60010829700049296000c8278000c927600089076000480970000387600003c0002b46000e6f47c0903a67f2803a64e800420|@8297,1048575|72,3,@8418 120,3,@8294 8418:C2,120|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8001082d70008398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000082b8000492a3000882980008928300048278000c9263000083160008801800007c0903a67f2803a64e800420|@8293,1048575| 8419:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f80008398000053bbdffe87c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002b562b5302c92b6000082b8000492b60010829700049296000c8278000c927600089076000480970000387600003c0002b46000e6f47c0903a67f2803a64e800420|@8297,1048575|72,3,@8420 120,3,@8294 8420:C2,120|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8001082d70008398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000082b8000492a3000882980008928300048278000c9263000083160008801800007c0903a67f2803a64e800420|@8293,1048575| 8421:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f80008398000053bbdffe87c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002b562b5316892b6000082b8000492b60010829700049296000c8278000c927600089076000480970000387600003c0002b46000e6f47c0903a67f2803a64e800420|@8297,1048575|72,3,@8422 120,3,@8294 8422:C2,120|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8001082d70008398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000082b8000492a3000882980008928300048278000c9263000083160008801800007c0903a67f2803a64e800420|@8293,1048575| 8423:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f80008398000053bbdffe87c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002b562b532a492b6000082b8000492b60010829700049296000c8278000c927600089076000480970000387600003c0002b46000e6f47c0903a67f2803a64e800420|@8297,1048575|72,3,@8424 120,3,@8294 8424:C2,120|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8001082d70008398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000082b8000492a3000882980008928300048278000c9263000083160008801800007c0903a67f2803a64e800420|@8293,1048575| 8425:C2,140|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f80008398000053bbdffe87c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002b562b533e092b6000082b8000492b60010829700049296000c8278000c927600089076000480970000387600003c0002b46000e6f47c0903a67f2803a64e800420|@8297,1048575|72,3,@8426 120,3,@8294 8426:C2,120|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8001082d70008398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000082b8000492a3000882980008928300048278000c9263000083160008801800007c0903a67f2803a64e800420|@8293,1048575| 8427:C2,152|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f80008398000063bbdffe47c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002b562b5352892b6000082b8000492b6001482970004929600108278000c9276000c8243000092560008822300049236000480970000387600003c0002b46000e6f47c0903a67f2803a64e800420|@8311,1048575|72,3,@8428 132,3,@8294 8428:C2,128|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8001482d70008398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d000082b8000492a3000c82980008928300088278000c92630004825800109243000083160004801800007c0903a67f2803a64e800420|@8310,1048575| 8429:C2,152|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f80008398000063bbdffe47c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002b562b5367892b6000082b8000492b6001482970004929600108278000c9276000c8243000092560008822300049236000480970000387600003c0002b46000e6f47c0903a67f2803a64e800420|@8311,1048575|72,3,@8430 132,3,@8294 8430:C2,128|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8001482d70008398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d000082b8000492a3000c82980008928300088278000c92630004825800109243000083160004801800007c0903a67f2803a64e800420|@8310,1048575| 8431:C2,152|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f80008398000063bbdffe47c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002b562b537c892b6000082b8000492b6001482970004929600108278000c9276000c8243000092560008822300049236000480970000387600003c0002b46000e6f47c0903a67f2803a64e800420|@8311,1048575|72,3,@8432 132,3,@8294 8432:C2,128|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8001482d70008398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d000082b8000492a3000c82980008928300088278000c92630004825800109243000083160004801800007c0903a67f2803a64e800420|@8310,1048575| 8433:C2,152|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f80008398000063bbdffe47c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002b562b5391892b6000082b8000492b6001482970004929600108278000c9276000c8243000092560008822300049236000480970000387600003c0002b46000e6f47c0903a67f2803a64e800420|@8311,1048575|72,3,@8434 132,3,@8294 8434:C2,128|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8001482d70008398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d000082b8000492a3000c82980008928300088278000c92630004825800109243000083160004801800007c0903a67f2803a64e800420|@8310,1048575| 8435:C2,152|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f80008398000063bbdffe47c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002b562b53a6892b6000082b8000492b6001482970004929600108278000c9276000c8243000092560008822300049236000480970000387600003c0002b46000e6f47c0903a67f2803a64e800420|@8311,1048575|72,3,@8436 132,3,@8294 8436:C2,128|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8001482d70008398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d000082b8000492a3000c82980008928300088278000c92630004825800109243000083160004801800007c0903a67f2803a64e800420|@8310,1048575| 8437:C2,152|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f80008398000063bbdffe47c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002b562b53bb892b6000082b8000492b6001482970004929600108278000c9276000c8243000092560008822300049236000480970000387600003c0002b46000e6f47c0903a67f2803a64e800420|@8311,1048575|72,3,@8438 132,3,@8294 8438:C2,128|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8001482d70008398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d000082b8000492a3000c82980008928300088278000c92630004825800109243000083160004801800007c0903a67f2803a64e800420|@8310,1048575| 8439:C2,136|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180780008398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002b562d63cf892d7000082d8000492d7000c82a3000492b700088298000c9297000480830000387700003c0002b46000e6f47c0903a67f2803a64e800420|@8402,1048575|72,3,@8440 116,3,@8294 8440:C2,152|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000c82d7001082b70008398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082980004928300048278000892630000973bfffc80160010941bfffc83150010801800007c0803a64e800021831b0000833b0004801800007c0903a67f2803a63b7b00084e800420|@8401,1048575| 8441:C2,136|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180780008398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002b562d63e5092d7000082d8000492d7000c82a3000492b700088298000c9297000480830000387700003c0002b46000e6f47c0903a67f2803a64e800420|@8402,1048575|72,3,@8442 116,3,@8294 8442:C2,152|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000c82d7001082b70008398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082980004928300048278000892630000973bfffc80160010941bfffc83150010801800007c0803a64e800021831b0000833b0004801800007c0903a67f2803a63b7b00084e800420|@8401,1048575| 8443:C2,136|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180780008398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002b562d63fa892d7000082d8000492d7000c82a3000492b700088298000c9297000480830000387700003c0002b46000e6f47c0903a67f2803a64e800420|@8402,1048575|72,3,@8444 116,3,@8294 8444:C2,152|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000c82d7001082b70008398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082980004928300048278000892630000973bfffc80160010941bfffc83150010801800007c0803a64e800021831b0000833b0004801800007c0903a67f2803a63b7b00084e800420|@8401,1048575| 8445:C2,136|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180780008398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002b562d6410092d7000082d8000492d7000c82a3000492b700088298000c9297000480830000387700003c0002b46000e6f47c0903a67f2803a64e800420|@8402,1048575|72,3,@8446 116,3,@8294 8446:C2,152|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000c82d7001082b70008398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082980004928300048278000892630000973bfffc80160010941bfffc83150010801800007c0803a64e800021831b0000833b0004801800007c0903a67f2803a63b7b00084e800420|@8401,1048575| 8447:C2,136|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180780008398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002b562d6425892d7000082d8000492d7000c82a3000492b700088298000c9297000480830000387700003c0002b46000e6f47c0903a67f2803a64e800420|@8402,1048575|72,3,@8448 116,3,@8294 8448:C2,152|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000c82d7001082b70008398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082980004928300048278000892630000973bfffc80160010941bfffc83150010801800007c0803a64e800021831b0000833b0004801800007c0903a67f2803a63b7b00084e800420|@8401,1048575| 8449:C2,136|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180780008398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002b562d643b092d7000082d8000492d7000c82a3000492b700088298000c9297000480830000387700003c0002b46000e6f47c0903a67f2803a64e800420|@8402,1048575|72,3,@8450 116,3,@8294 8450:C2,152|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000c82d7001082b70008398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000082980004928300048278000892630000973bfffc80160010941bfffc83150010801800007c0803a64e800021831b0000833b0004801800007c0903a67f2803a63b7b00084e800420|@8401,1048575| 8451:C2,2548|7f2802a66339000239600058800d00187d6bd8107c0b004040a00010800d00247c0803a64e8000213ad900003ab800003a8300003c80000060844668387400003f00000063184368801800007c0803a64e80002128030001418200103e6002b562734e744800002c96dbfffc96bbfffc969bfffc387400003c0002b560004e807c0803a64e8000213a6300004800001096dbfffc96bbfffc969bfffc3d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213a5d0004919d00003a200003923200003d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213a1d0004919d000039e0000191f00000398000043bbdffec7c1df04040a00010800d001c7c0803a64e80002139dd0004919d00003d4002b5614a5394914e0000926e000c920e0008924e0004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021393d0004919d00003d0002b561087d209109000080fb000090e90004967bfffc965bfffc961bfffc95dbfffc953bfffc97fbfffc3cc002b560c64cf694dbfffc38a0000194bbfffc3bfb0000809b00148064000028030001408206dc833b00248319000482f8000082d8001482b6000480170000941bfffc80190024941bfffc3c6002b560637fe883150004801800007c0803a64e800021829b002c8274000482530014823200083a030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003de002b561ef80a891e3000081db002091c30004961bfffc83110004801800007c0803a64e800021815b0030812a00048109001480e8000038c30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003ca002b560a580fc90a30000809b00189083000494dbfffc83070004801800007c0803a64e800021833b00348319000482f8001482d7000c947bfffc3860006583160004801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003a8000019295000490750000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a7d0004919d000092b30004825b000092530000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a3d0004919d000092710004821b000492110000398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002139fd0004919d0000922f000481db000891cf0000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000091e30008815b002491430004813b000c91230000831b0010801800007c0803a64e80002139030000386000013b080000801800007c0803a64e80002180030004941bfffc80030008941bfffc8003000c941bfffc80030010941bfffc80030014941bfffc80e300002c07000140820008480000a880c7000080bb004c80850008398000063bbdffe47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003f2002b56339818493230000830500049303001482e4000492e3001082c5002092c3000c82a6000092a30008828600049283000480070004941bfffc808400003c0002b46000e6f47c0803a64e80002180fb00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffff5480db000c2c06000140820008480000ac80a60000809b004c80640008398000063bbdffe47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d00003f0002b5631882209319000082e4000492f9001482c3000492d9001082a4001c92b9000c8285000092990008826500049279000480060004941bfffc80830000387900003c0002b46000e6f47c0803a64e80002180db00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffff5080bb00002c05000140820008480000ac80850000807b004c83230008398000063bbdffe47c1df04040a00010800d001c7c0803a64e8000213b1d0004919d00003ee002b562f782bc92f8000082c3000492d8001482b9000492b80010828300189298000c8264000092780008824400049258000480050004941bfffc80990000387800003c0002b46000e6f47c0803a64e80002180bb00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffff50809b00042c04000140820008480000ac80640000833b004c83190008398000063bbdffe47c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002b562d6835892d7000082b9000492b700148298000492970010827900149277000c8243000092570008822300049237000480040004941bfffc80980000387700003c0002b46000e6f47c0803a64e800021809b00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffff50807b00082c03000140820008480000ac83230000831b004c82f80008398000063bbdffe47c1df04040a00010800d001c7c0803a64e8000213add0004919d00003ea002b562b583f492b6000082980004929600148277000492760010825800109256000c8239000092360008821900049216000480030004941bfffc80970000387600003c0002b46000e6f47c0803a64e800021807b00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffff50833b00102c19000140820008480000ac8319000082fb004c82d70008398000063bbdffe47c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003e8002b56294849092950000827700049275001482560004925500108237000c9235000c821800009215000881f8000491f5000480190004941bfffc80960000387500003c0002b46000e6f47c0803a64e800021833b00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffff503b7b0028800d00187c1b004040a00010800d00207c0803a64e8000214bfff91c83fb000848000140832300002c1900cf4082007c947bfffc80030008941bfffc3c8002b56084852c807b00183c0002b5600079487c0803a64e800021398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213b1d0004919d000082fb000092f800083ec002a162d6088892d800043aa000cf92b8000038780000800d00287c0803a64e80002183030004947bfffc389800003c6002a7606333403c0002a1600074a87c0803a64e8000213c8002b5608486dc3c0002a1600074a87c0803a64e8000213ee002e062f7a1fc82d7000038830000387600003c0002a06000d9687c0803a64e8000213ea002e062b5a1fc8295000080b400103c8002a06084a62c387400003c0002a0600096ec7c0803a64e8000213c8002b56084852c807b00143c0002b5600079487c0803a64e800021807b0000800d00287c0803a64e8000213c8002b56084852c807b001c833b00283c0002b5600079487c0903a67f2803a63b7b002c4e800420|@8521,1048575|52,3,I48 64,3,I24 92,3,@8452 120,3,@8453 288,3,@8458 348,3,@8494 392,3,$8451+2194 468,3,@8501 548,3,@8504 644,3,@8506 1116,3,@8508 1180,3,@8294 1296,3,@8509 1364,3,@8294 1480,3,@8510 1548,3,@8294 1664,3,@8511 1732,3,@8294 1848,3,@8512 1916,3,@8294 2032,3,@8513 2100,3,@8294 2216,3,@8514 2228,3,@8491 2288,3,@327 2336,3,@2695 2344,3,@511 2360,3,@8520 2368,3,@511 2384,3,@9372 2404,3,@239 2420,3,@9372 2436,3,@91 2448,3,@62 2464,3,@8514 2476,3,@8491 2508,3,@8514 2524,3,@8491 8452:O2|@9353,@8 8453:C2,764|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc947bfffc97fbfffc3f0002b563184ef2971bfffc3ae0000196fbfffc3bfb000038a3000038800001386000073f00000063184808801800007c0803a64e8000213ac3000083fb0008480000c0828300003e6002e06273801c7c1498404082000c3aa30000480000942c140003408200103ea002a062b5962c48000080398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a5d0004919d00003e2002b5623151989232000890720004821b000092120000398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213abd0004919d0000925500083de002a061ef966091f500043dc002e061ce801c91d5000038750000800d00287c0803a64e80002196dbfffc97fbfffc3ea002b562b54ffa96bbfffc3a800001969bfffc3bfb000038a00001389600003860001f3f00000063184808801800007c0803a64e8000213a63000083fb0008480000143a600801947bfffc947bfffc947bfffc38800041387300003c0002b5600051b07c0803a64e8000213d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213a5d0004919d00003a200001923200003d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213a1d0004919d000039e0ffff91f00000398000053bbdffe87c1df04040a00010800d001c7c0803a64e80002139dd0004919d0000920e0010906e000c815b000c914e0008813b001c912e0004924e0000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021391d0004919d000091c8000438e0000190e800003d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e80002138dd0004919d00009106000038a0000338800091386000033f000000631841c8801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138bd0004919d00009065000490c5000038650000809b00207c8803a63b7b00244e800020|@8457,1048575|44,3,$8453+114 80,3,I61 116,3,@9351 148,3,@54 196,3,@8454 260,3,@57 272,3,@9351 308,3,$8453+378 344,3,I61 400,3,@8455 680,3,I11 8454:S13|54657874494f2e6f70656e496e 8455:C2,404|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021706b000141820028546bf80140a20010800d00347c0803a64e8000212c0300014180000c3b0300004800001c973bfffc3c6002a06063a344800d00287c0803a64e8000212c1800014082000c3ae00003480000603c6008003863fff17c1818404081001c973bfffc3c6002a06063a344800d00287c0803a64e8000213af800083877fffe3ae000092c17000140a20010800d00307c0803a64e8000213997ffff3963ffff7d6b6396556b083c617700013ad900003aa400003a98000038a0000138800083387700003f000000631841c8801800007c0803a64e80002196dbfffc96bbfffc969bfffc947bfffc38a00001809b00047c0428404181000848000038807b0000833b00087f2c0e707cab0e707d8359ae38a50002800d00187c1b004040a00010800d00207c0803a64e8000214bffffc0398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000833b00009323000490830000831b000c7f0803a63b7b00104e800020|@8456,1032199|80,3,@78 116,2,67108856 136,3,@78 232,3,I11 8456:S18|4368617241727261792e6172726179283229 8457:S16|54657874494f2e6f70656e496e283129 8458:C2,204|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc3c8002b56084547c8078000c3c0002b5600079487c0803a64e800021706b000140820060832300002c19001540820044831b000082f8000482d700003980000256c0f80140a20010800d00347c0803a64e8000217eb6661541a3fff092b70000829b00047e8803a63b7b00084e800020831b00047f0803a63b7b00084e800020833b0000831900083ae0000392f800003860000182db00047ec803a63b7b00084e800020|@8493,1048575|40,3,@8459 52,3,@8491 8459:O2|@8461,@8460 8460:O2|@8469,@8468 8461:C2,868|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e30000807700002c03ffff4082018c82d7000482b60000947bfffc947bfffc398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a9d0004919d00003e6002b562735814927400008278000492740004973bfffc971bfffc96dbfffc80b5000c38940000387500003c0002a0600096ec7c0803a64e80002180030004941bfffc806300003c0002a1600005347c0803a64e8000213a5b0010907200003a3b0010821b00009211000481fb000481db001491cf0000815b0010714b00014182000c3920000348000010818a0000558c083c618900012c0900014082001838600001811b000c7d0803a63b7b00184e800020714b00014182000c3900000348000010818a0000558c083c61880001550bf80140a20010800d00347c0803a64e8000212c080001418100183c6002a0606395e0800d00287c0803a64e800021714b00014182000c38ea000048000010898a0004558c083c61870001398000013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d000090e3000080fb000c7ce803a63b7b00184e8000208317000482d8001082b600002c150001408200143a80ffff92960000386000014e8000208298000082740000825600007e6b9038556bf80140a20010800d00347c0803a64e8000217c13900041800040973bfffc969bfffc8018000c941bfffc96dbfffc96dbfffc80db000880b8000880980004387400003c0002b5600058e07c0803a64e80002148000018973bfffc969bfffc8018000c941bfffc96dbfffc823b0000821100002c1000014082002039e0ffff91f100003860000181db000c7dc803a63b7b00104e80002081fb000881cf0000815b000471cb00014182002855cbf80140a20010800d00347c0803a64e8000212c0e00014180000c392e0000480000183c6002a0606395e0800d00287c0803a64e800021810a00007c094040418000183c6002a0606395e0800d00287c0803a64e80002180ea00047d2c0e707d6760ae556b083c6167000180cf00003980000254c0f80140a20010800d00347c0803a64e8000217ca6661541a3fff090af0000398000013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d000090e30000809b000c7c8803a63b7b00104e800020|@8467,1048575|100,3,@8462 144,3,@62 172,3,@325 336,3,@51 560,3,@8464 700,3,@51 732,3,@51 8462:C2,136|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc947bfffc973bfffc38bb00043880000383180004801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000833b000493230000831b00089303000482fb00007ee803a63b7b000c4e800020|@8463,1048575| 8463:S32|426173696353747265616d494f28292e696e7075744e4c697374283129283129 8464:C2,404|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000213b00000193030000807b00003b00ffff93030000973bfffc949bfffc97fbfffc3ee002b562f759ba96fbfffc3ac0000196dbfffc3bfb0000398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213abd0004919d000082860000929500083a6000019275000482460004925500003a25000038b5000038910000386000113f00000063184808801800007c0803a64e800021821b0014907000003860000183fb000881fb00107de803a63b7b00184e800020814300003d2002e06129801c7c0a48404082000c39c30000480000942c0a0003408200103dc002a061ce962c48000080398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021391d0004919d00003ce002b560e75a9090e800089068000480db000090c80000398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002139dd0004919d0000910e00083ca002a060a5966090ae00043c8002e06084801c908e0000386e0000800d00287c0803a64e800021|@8466,1048575|64,3,$8464+218 164,3,I61 220,3,@9351 252,3,@54 300,3,@8465 364,3,@57 376,3,@9351 8465:S17|54657874494f2e66696c6c427566666572 8466:S20|54657874494f2e66696c6c427566666572283529 8467:S17|54657874494f2e696e7075743127283129 8468:O2|@8472,I48 8469:C2,1508|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e3000482d700002c16ffff40820018388000019085000090650004386000014e80002072cb000140820508398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213abd0004919d00008283000c9295000c8263000892750008825600049255000482230000923500008216000c2c1000014082001c388000019085000092a50004386000017f2803a64e8000207e0b2378556bf80140a20010800d00347c0803a64e8000217c102000408200f0398000013bbdfff87c1df04040a00010800d001c7c0803a64e800021389d0004919d00009204000039f9000039c500003955000038a4000080960008807600003c0002a06000e5307c0803a64e800021947bfffc947bfffc947bfffc389b00003c0002a06000a2e07c0803a64e80002195fbfffc95dbfffc955bfffc80bb0014809b0010807b000c3c0002aa60009ce87c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021393d0004919d000039000001910900049069000080fb00049127000080db000090c700043860000180bb00087ca803a63b7b00184e8000207e0b2038556bf80140a20010800d00347c0803a64e8000217c1020004081020c398000013bbdfff87c1df04040a00010800d001c7c0803a64e80002139fd0004919d0000908f000039d9000039440000392500008116000080f6000838af000038870000386800003c0002a06000e5307c0803a64e800021947bfffc947bfffc947bfffc389b00003c0002a06000a2e07c0803a64e80002195dbfffc955bfffc953bfffc963bfffc967bfffc969bfffc951bfffc965bfffc94fbfffc961bfffc80bb0030809b002c807b00283c0002aa60009ce87c0803a64e80002180db000480bb00203985ffff7ccb28385560f80140a20010800d00347c0803a64e8000217c86661541a3fff0833b00003985ffff7f2b28385560f80140a20010800d00347c0803a64e8000217f0ccc1141a3fff0398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213afd0004919d00009317000c9097000882db000892d7000482bb000c92b70000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a9d0004919d00003a60000192740004907400003d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e8000213a5d0004919d000092f20000398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213a3d0004919d0000821b00109211000c81fb001491f100089251000481db001891d10000815b001c928a0000922a000438600001813b00247d2803a63b7b00344e800020398000043bbdffec7c1df04040a00010800d001c7c0803a64e80002139fd0004919d0000928f000c926f0008924f0004922f00003990ffff7c8b80385560f80140a20010800d00347c0803a64e8000217dcc241141a3fff0947bfffc947bfffc973bfffc971bfffc94bbfffc80160000941bfffc80160008941bfffc961bfffc38bb0018388e0000386f00004bfffb8d398000013bbdfff87c1df04040a00010800d001c7c0803a64e800021395d0004919d0000813b0000912a000038aa0000809b0004807b00083c0002a06000e5307c0803a64e800021947bfffc947bfffc947bfffc389b00003c0002a06000a2e07c0803a64e80002180bb0008809b0004807b00003c0002aa60009ce87c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021391d0004919d000080fb002490e800049068000080db00189106000080bb002890a6000438600001809b00207c8803a63b7b002c4e800020947bfffc947bfffc947bfffc973bfffc94bbfffc3abb000896bbfffc3cc002b560c660f038a400003880000383180004801800007c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a9d0004919d00003a60000192740004825b000892540000823b000092910000821b000c921100043860000181fb00047de803a63b7b00144e800020|@8471,1048575|276,3,@251 308,3,@76 348,3,@4361 552,3,@251 584,3,@76 652,3,@4361 1200,3,@251 1232,3,@76 1260,3,@4361 1388,3,@8470 8470:S6|696e7075744e 8471:S29|426173696353747265616d494f28292e696e7075744e4c697374283329 8472:C2,2908|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021947bfffc947bfffc82e300082c1700014082014c28040001418200a4973bfffc971bfffc947bfffc94bbfffc38a60000809b0000806300003c0002b560006ca07c0803a64e8000213c0002a1600005347c0803a64e800021706b00014182000c3ac000034800001081830000558c083c6196000182bb00007ecbab78556bf80140a20010800d00347c0803a64e8000217c16a8004082000c3a800003480000083a8000016a9300023a5b0010907200003a3b00109271000448000874973bfffc971bfffc947bfffc3ac5000038a6000038960000806300003c0002b5600070a07c0803a64e8000212c0300014082002482bb00043a9b000c82750004927400003a5b000c3a200001923200044800004882a3000072ab00014182000c3a8000034800001081950000558c083c619400012c1400014082000c3a600003480000083a6000013a5b000c92b200003a3b000c92710004947bfffc480007d482d7000882b6000082970004827400003993ffff7eab98385560f80140a20010800d00347c0803a64e8000217e4cac1141a3fff07e4b2838556bf80140a20010800d00347c0803a64e8000217c122800418000cc82340000398000013bbdfff87c1df04040a00010800d001c7c0803a64e8000213a1d0004919d000090b0000039f9000039d80000394300003925000038b0000038910000807700003c0002a060009f5c7c0803a64e80002195fbfffc95dbfffc955bfffc953bfffc969bfffc3c0002a06000a1347c0803a64e800021811b000080e8000080db00043986ffff7ceb30385560f80140a20010800d00347c0803a64e8000217ca7661541a3fff090a80000389b001490640000387b00143b20000193230004480006b482360000821400003990ffff7e2b80385560f80140a20010800d00347c0803a64e8000217dec8c1141a3fff0398fffff7cab78385560f80140a20010800d00347c0803a64e8000217dcc2c1141a3fff081570000812a00007dcb4838556bf80140a20010800d00347c0803a64e8000217c0e4800418103588116000080f400003987ffff7d0b38385560f80140a20010800d00347c0803a64e8000217eac441141a3fff082740000398000013bbdfff87c1df04040a00010800d001c7c0803a64e8000213a5d0004919d000092b200003a3900003a18000039e3000039c400003905000038f60000963bfffc961bfffc95fbfffc96bbfffc38b2000038930000386a00003c0002a060009f5c7c0803a64e80002195dbfffc951bfffc94dbfffc800f0000941bfffc955bfffc969bfffc94fbfffc3c0002a06000a1347c0803a64e80002180db001480bb001c3985ffff7ccb28385560f80140a20010800d00347c0803a64e8000217c8c341141a3fff0833b00008319000082fb00049317000082db00182816000141820058947bfffc949bfffc80db001838a40000809b0010807b00143c0002b5600072f47c0803a64e800021398000013bbdfff87c1df04040a00010800d001c7c0803a64e8000213abd0004919d00009075000048000030947bfffc949bfffc80db001838a40000809b0010807b00143c0002b5600076ac7c0803a64e8000213aa300002c150001408200203abb0034829b0004929500003a7b00343a4000019253000448000480829500002c140001408200203a7b0034825b0004925300003a3b00343a0000039211000448000458827b00007e6ba038556bf80140a20010800d00347c0803a64e8000217c13a0004080000c3a530000480000083a540000398000013bbdfff87c1df04040a00010800d001c7c0803a64e8000213a3d0004919d00009251000038b1000038800001807b00103c0002a060009f5c7c0803a64e800021969bfffc965bfffc3c0002a06000a1347c0803a64e800021821b001081fb000491f0000081db0014815b0000914e0000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021393d0004919d0000390000019109000490690000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00009123000480fb000c90e300003c0002a1600005347c0803a64e80002180db0028280600014182003c809b0004833b00087c8bc838556bf80140a20010800d00347c0803a64e8000217c04c8004080000c38a000034800001038a000014800000838a00001389b003c90640000387b003c90a300043b7b0008480002e48116000080f400003987ffff7d0b38385560f80140a20010800d00347c0803a64e8000217eac441141a3fff082740000398000013bbdfff87c1df04040a00010800d001c7c0803a64e8000213a5d0004919d000092b200003a3900003a18000039e3000039c400003905000038f60000963bfffc961bfffc95fbfffc96bbfffc38b2000038930000386a00003c0002a060009f5c7c0803a64e80002195dbfffc951bfffc94dbfffc800f0000941bfffc969bfffc94fbfffc3c0002a06000a1347c0803a64e80002180db001080bb00183985ffff7ccb28385560f80140a20010800d00347c0803a64e8000217c8c341141a3fff0833b00008319000082fb00049317000082db001428160001418200c4947bfffc80bb0010807b000c3c0002b560006ca07c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d000090750004829b000092950000387500003c0002a1600005347c0803a64e800021706b00014182000c3a6000034800001081830000558c083c61930001825b00147e6b9038556bf80140a20010800d00347c0803a64e8000217c1390004080000c3a200003480000083a2000013a1b002c9070000039fb002c922f00044800010c947bfffc80bb0010807b000c3c0002b5600070a07c0803a64e8000212c030001408200203abb002c829b0000929500003a7b002c3a40000192530004480000cc82a3000072ab00014182000c3a8000034800001081950000558c083c619400012c140001408200203a7b002c825b0000925300003a3b002c3a0000039211000448000088398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a7d0004919d00003a4000019253000492b30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092630004823b0000922300003c0002a1600005347c0803a64e8000213a1b002c9070000039fb002c39c0000191cf0004947bfffc947bfffc3b7b00203b7b0004815b0010714b00014182000c3920000348000010818a0000558c083c61890001552bf80140a20010800d00347c0803a64e8000212c090001408100dc714b00014182000c38e0000348000010818a0000558c083c6187000180db00043d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e80002138bd0004919d00003880000190850000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d00008326000c9323000c830600089303000890a3000482e6000092e30000398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213add0004919d000090f6000c3aa0000192b6000890b60004915600008286000492d400003903000048000008811b000480fb001428070001418200c880bb00083d804000398c00013bbdfff87c1df04040a00010800d001c7c0803a64e800021389d0004919d00003860000190640000398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213b3d0004919d00008308000c9319000c82e8000892f900089099000482c8000092d90000398000043bbdffec7c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003a8000019295000c3a600001927500089095000482450004925500008228000492b1000038d900004800000838c8000080bb00189145000090c5000490e5000838600001809b000c7c8803a63b7b001c4e800020|@8490,1048575|88,3,@8473 104,3,@325 248,3,@8479 536,3,@74 572,3,@75 924,3,@74 972,3,@75 1084,3,@8483 1168,3,@8487 1364,3,@74 1388,3,@75 1524,3,@325 1776,3,@74 1820,3,@75 1920,3,@8473 1988,3,@325 2112,3,@8479 2328,3,@325 8473:C2,272|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000213af900003c0002b560006dcc7c0803a64e80002183230024732b00014082004494bbfffc80030000941bfffc80190000941bfffc96fbfffc386400003b1b000c3c0002b560006df87c0803a64e800021831b00007f0803a63b7b00104e80002096fbfffc398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213b1d0004919d000090b800083ec002a062d6969c92d8000482a3000092b80000398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a9d0004919d0000931400083e6002a062739660927400043e4002e06252801c9254000038740000800d00287c0803a64e800021|@8478,1048575|36,3,@8474 96,3,@8476 172,3,@59 232,3,@57 244,3,@9351 8474:C2,4|4e800020|@8475,524289| 8475:S2|5244 8476:C2,560|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc947bfffc97fbfffc3ee002b562f76e5e96fbfffc3ac0000196dbfffc3bfb00008318fff8801800007c0803a64e8000213aa3000083fb0008480000c0829b0004824300003e2002e06231801c7c1288404082000c3a630000480000902c120003408200103e6002a06273962c4800007c398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a1d0004919d000081f4000091f000089070000481d4fffc91d00000398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a7d0004919d0000921300083d4002a0614a9660915300043d2002e06129801c9133000038730000800d00287c0803a64e80002172ab00014182000c3a8000034800001081950000558c083c619400012c1400014082001838600001827b00147e6803a63b7b00184e800020827b000c7e8b9838556bf80140a20010800d00347c0803a64e8000217c14980041800044398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003a4000019243000492a30000823b00147e2803a63b7b00184e8000203994ffff7e6ba0385560f80140a20010800d00347c0803a64e8000217c6c9c1141a3fff096bbfffc831b00144bfffe19398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a5d0004919d000090720004823b00009232000038720000821b00187e0803a63b7b001c4e800020|@8477,1048575|48,3,$8476+102 108,3,@9351 140,3,@54 248,3,@57 260,3,@9351 8477:S41|426173696353747265616d494f28292e72656164566563466f72636564283329646f52656164283129 8478:S32|426173696353747265616d494f28292e72656164566563466f72636564283329 8479:C2,484|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000213af900003c0002b560006dcc7c0803a64e80002183230034732b00014082011096fbfffc94bbfffc80030000941bfffc97fbfffc3f0002b563187136971bfffc3ac0000196dbfffc3bfb00003864000083190000801800007c0803a64e80002183fb000882bb00147ea803a63b7b00184e800020826300003e4002e06252801c7c1390404082000c3a830000480000902c130003408200103e8002a06294962c4800007c398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a3d0004919d0000821b0004921100089071000481fb000091f10000398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a9d0004919d0000923400083dc002a061ce966091d400043d4002e0614a801c9154000038740000800d00287c0803a64e80002196fbfffc398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213b1d0004919d00003ec002b562d660f092d800083ea002b562b572a092b800048283000092980000398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a7d0004919d0000931300083e4002a062529660925300043e2002e06231801c9233000038730000800d00287c0803a64e800021|@8482,1048575|36,3,@8474 84,3,$8479+150 152,3,@9351 184,3,@54 292,3,@57 304,3,@9351 372,3,@8470 384,3,@8480 444,3,@57 456,3,@9351 8480:O3|@9494,@8481,0 8481:S23|4e6f6e626c6f636b696e674e6f74537570706f72746564 8482:S28|426173696353747265616d494f28292e726561645665634e42283329 8483:C2,280|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000213af900003c0002b560006dcc7c0803a64e80002183230020732b00014082004c94bbfffc94dbfffc80030000941bfffc949bfffc80190000941bfffc96fbfffc386000013b1b00143c0002b5600074287c0803a64e800021831b00007f0803a63b7b00184e80002096fbfffc398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213b1d0004919d000090d800083ec002a062d6969c92d8000482a3000092b80000398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a9d0004919d0000931400083e6002a062739660927400043e4002e06252801c9254000038740000800d00287c0803a64e800021|@8486,1048575|36,3,@8474 104,3,@8484 180,3,@59 240,3,@57 252,3,@9351 8484:C2,528|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc947bfffc97fbfffc3ee002b562f774ae96fbfffc3ac0000196dbfffc3bfb00008298fff038a00001388300008078fff43c0002a060009f5c7c0803a64e8000213b140000801800007c0803a64e8000213aa3000083fb0008480000c0827b0004822300003e0002e06210801c7c1180404082000c3a430000480000902c110003408200103e4002a06252962c4800007c398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002139fd0004919d000081d3fffc91cf0008906f00048153fff8914f0000398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a5d0004919d000091f200083d2002a061299660913200043d0002e06108801c9112000038720000800d00287c0803a64e8000212c1500014082000848000058827b000c3993ffff7eab98385560f80140a20010800d00347c0803a64e8000217e55661541a3fff0823b0010821100007e4b8038556bf80140a20010800d00347c0803a64e8000217c128000408000084800003c827b000c3993ffff7eab98385560f80140a20010800d00347c0803a64e8000217c75661541a3fff0825b00147e4803a63b7b00184e8000203993ffff7eab98385560f80140a20010800d00347c0803a64e8000217c75661541a3fff03b110000833b00147f2803a63b7b00184bfffdfc|@8485,1048575|48,3,$8484+134 88,3,@74 140,3,@9351 172,3,@54 280,3,@57 292,3,@9351 8485:S38|426173696353747265616d494f28292e66696c6c427566666572283429646f52656164283129 8486:S29|426173696353747265616d494f28292e66696c6c427566666572283429 8487:C2,540|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002138b900003c0002b560006dcc7c0803a64e80002183230030732b00014082014894bbfffc94dbfffc80030000941bfffc97fbfffc3f0002b56318777a971bfffc3ae0000196fbfffc3bfb0000398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213add0004919d00009096000882a4000092b600043a800001929600003876000083190000801800007c0803a64e80002183fb0008827b00147e6803a63b7b00184e800020822300003e0002e06210801c7c1180404082000c3a430000480000902c110003408200103e4002a06252962c4800007c398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002139fd0004919d000081db000491cf0008906f0004815b0000914f0000398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a5d0004919d000091f200083d2002a061299660913200043d0002e06108801c9112000038720000800d00287c0803a64e80002194bbfffc398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213b1d0004919d00003ee002b562f778e492f800083ec002b562d672a092d8000482a3000092b80000398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a9d0004919d0000931400083e6002a062739660927400043e4002e06252801c9254000038740000800d00287c0803a64e800021|@8489,1048575|36,3,@8474 84,3,$8487+206 208,3,@9351 240,3,@54 348,3,@57 360,3,@9351 428,3,@8488 440,3,@8480 500,3,@57 512,3,@9351 8488:S8|63616e496e707574 8489:S31|426173696353747265616d494f28292e66696c6c4275666665724e42283429 8490:S33|426173696353747265616d494f28292e7265616446726f6d526561646572283529 8491:C2,880|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000213a9900008263000082430004386000013c0002a060009a807c0803a64e800021969bfffc949bfffc967bfffc965bfffc947bfffc2c0300014082000c3a2000014800006080830000832400002c19ffff40820030398000013bbdfff87c1df04040a00010800d001c7c0803a64e8000213a3d0004919d0000909100004800002480630004800d00187c1b004040a00010800d00207c0803a64e8000214bffff98722b00014082006882f1000082d700002c16ffff4082003882b700042c1500034082000c3b000001480000603c6002a060639c143c0002a060009c2c7c0803a64e8000213b030000480000403c6002a060639c143c0002a060009c2c7c0803a64e8000213b030000480000203c6002a060639c143c0002a060009c2c7c0803a64e8000213b0300003b00000182fb000482d70000281600034082000c3aa00001480000743ea000013ab59c417f0bab78556bf80140a20010800d00347c0803a64e8000217c18a8004082000c3aa0000148000044398000025700f80140a20010800d00347c0803a64e8000217e98661541a3fff03b140000800d00187c1b004040a00010800d00207c0803a64e8000214bffff7c387700003f00000063184948801800007c0803a64e8000212c0300014082000c3a8000014800003c809b0004386000033f00000063184988801800007c0803a64e800021800d00187c1b004040a00010800d00207c0803a64e8000214bffff1897fbfffc3e6002b562737bba967bfffc3a400001965bfffc3bfb0000807b0014831b0018801800007c0803a64e8000213a23000083fb0008480000843a030000807b00043f00000063184928801800007c0803a64e8000212c030003408200084800003481fb000439c0000391cf0000961bfffc388f0000386000053f00000063184988801800007c0803a64e80002148000008961bfffc807b00043c0002a060009c2c7c0803a64e800021807b0000800d00287c0803a64e800021807b00103f00000063184928801800007c0803a64e8000212c0300034082000848000034821b001039e0000391f00000963bfffc38900000386000053f00000063184988801800007c0803a64e80002148000008963bfffc807b00103c0002a060009c2c7c0803a64e800021807b0000821b00207e0803a63b7b00244e800020|@8492,1048575|48,3,@63 236,3,@65 244,3,@67 268,3,@65 276,3,@67 300,3,@65 308,3,@67 356,2,20000 472,3,I71 516,3,I73 568,3,$8491+626 632,3,I70 688,3,I73 720,3,@67 756,3,I70 812,3,I73 844,3,@67 8492:S17|54657874494f2e70726f74656374283229 8493:S37|4d414b455f28292e757365496e746f456e7628312975736528312967657443686172283129 8494:C2,560|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002128040001418200103ee002b562f77f6c4800000c3ee002b562f77f7c973bfffc947bfffc96fbfffc80180004941bfffc3880ffff386500003c0002a06000fe6c7c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d00003b0000019319000482fb000892f90000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213add0004919d0000933600043ea002b562b57f8c92b60000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a9d0004919d000092d4000490740000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a7d0004919d0000929300043e4002b562527f9892530000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a3d0004919d000092710004821b000092110000398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002139fd0004919d0000922f00043dc002b561ce7fa891cf0000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000091e30004815b0004914300003c0002a1600005347c0803a64e8000213d2002e06129a1fc8109000038830000386800003c0002a06000d9687c0803a64e8000213ce002e060e7a1fc80c7000080a600103c8002a06084a62c38660000833b000c3c0002a0600096ec7c0903a67f2803a63b7b00104e800420|@8500,1048575|40,3,@8495 52,3,@8496 88,3,@316 196,3,@8497 292,3,@8498 392,3,@8499 452,3,@325 468,3,@9372 488,3,@239 504,3,@9372 520,3,@91 536,3,@62 8495:S6|4572726f722d 8496:S8|5761726e696e672d 8497:S2|2e0a 8498:S8|272c206c696e6520 8499:S5|20696e2027 8500:S39|4d414b455f28292e757365496e746f456e762831297573652831296572726f7250726f63283329 8501:O2|@8502,@9372 8502:C2,128|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d70000973bfffc971bfffc38830000387600003c0002a06000d9687c0803a64e80002182bb0000829500048274000080b300103c8002a06084a62c38730000833b00043c0002a0600096ec7c0903a67f2803a63b7b00084e800420|@8503,1048575|56,3,@239 88,3,@91 104,3,@62 8503:S15|54657874494f2e7072696e74283129 8504:C2,12|80780004806300004e800020|@8505,786433| 8505:S35|4d414b455f28292e757365496e746f456e76283129757365283129636f64652d283129 8506:C2,60|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180a30008808300048063000083180004801800007c0903a64e800420|@8507,1048575| 8507:S39|4d414b455f28292e757365496e746f456e762831297573652831296572726f7250726f63283129 8508:C2,128|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8001482d70008398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d000082b8000492a3000c82980008928300088278000c92630004825800109243000083160004801800007c0903a67f2803a64e800420|@8310,1048575| 8509:C2,128|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8001482d70008398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d000082b8000492a3000c82980008928300088278000c92630004825800109243000083160004801800007c0903a67f2803a64e800420|@8310,1048575| 8510:C2,128|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8001482d70008398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d000082b8000492a3000c82980008928300088278000c92630004825800109243000083160004801800007c0903a67f2803a64e800420|@8310,1048575| 8511:C2,128|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8001482d70008398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d000082b8000492a3000c82980008928300088278000c92630004825800109243000083160004801800007c0903a67f2803a64e800420|@8310,1048575| 8512:C2,128|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8001482d70008398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d000082b8000492a3000c82980008928300088278000c92630004825800109243000083160004801800007c0903a67f2803a64e800420|@8310,1048575| 8513:C2,128|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8001482d70008398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d000082b8000492a3000c82980008928300088278000c92630004825800109243000083160004801800007c0903a67f2803a64e800420|@8310,1048575| 8514:O1|@8515 8515:C2,124|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002183030000807800002c03ffff4082002c82f8000482d7000080b6000c3c8002b5608485cc387600003c0002a0600096ec7c0903a64e80042082f8000438a00001809700083860000f3f00000063184808801800007c0903a64e800420|@8519,1048575|60,3,@8516 72,3,@62 104,3,I61 8516:O1|@8517 8517:C2,172|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000213af900003ac30000807600003c0002b560006dcc7c0803a64e80002196fbfffc8003000c941bfffc80760004832300002c19ffff4082000848000034732b00014082002480790004800d00187c1b004040a00010800d00207c0803a64e8000214bffffcc3b00ffff9303000038600001831b0000833b0004801800007c0903a67f2803a63b7b00084e800420|@8518,1048575|44,3,@8474 8518:S27|426173696353747265616d494f28292e636c6f7365496e27283129 8519:S18|54657874494f2e636c6f7365496e27283129 8520:S8|207261697365640a 8521:S27|4d414b455f28292e757365496e746f456e76283129757365283129 8522:S21|4d414b455f28292e757365496e746f456e76283129 8523:O20|@2848,@343,@2847,@6025,@7671,@7664,@4690,@4209,@8524,@333,@7657,@2089,@1084,@2096,@7656,@6653,@2088,@4210,@6026,@4689 8524:O3|@8526,@8528,@8525 8525:O2|@8530,@9391 8526:O2|@8527,@9391 8527:C2,32|82e3000082d800047c17b0404082000c386000034e800020386000014e800020|@337,983041| 8528:O2|@8529,@9391 8529:C2,76|7f2802a6633900023ae30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092e300083ae0008b92e3000482f8000492e300007f2803a64e800020|@337,917505| 8530:C2,48|82e3000082d800047c17b0404082000c806300084e800020973bfffc3c6002a160630a30800d00287c0803a64e800021|@337,983041|28,3,@341 8531:O4|@8533,@8360,@8532,8 8532:O1|@8549 8533:O1|@8534 8534:C2,180|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021706b00014182000c3b0000034800001081830000558c083c61980001398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ec002b562d6899c92d70000931700089077000496fbfffc971bfffc973bfffc386000013b1b00083c0002b560008b347c0803a64e800021833b00003c0002a1600002a07c0903a67f2803a63b7b000c4e800420|@8548,1048575|96,3,@8535 136,3,@8537 156,3,@321 8535:C2,344|7f2802a66339000282f800087c6bbb78556bf80140a20010800d00347c0803a64e8000217c03b80040820010386000017f2803a64e800020546bf80140a20010800d00347c0803a64e8000212c030001408000084800004882d8000472cb00014182000c3aa000034800001081960000558c083c619500017c6ba838556bf80140a20010800d00347c0803a64e8000217c03a8004080000848000020973bfffc3aa300003c6002a0606395e0800d00287c0803a64e80002172cb000141820008480000183aa300087eac0e707d7660ae556b083c61760001398000025460f80140a20010800d00347c0803a64e8000217ea3661541a3fff0398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a3000492c300003ac30000398000013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d000092c300007f2803a64e800020|@8536,1015809|164,3,@51 8536:S28|4d6973632e756e657363617065537472696e67283129726472283129 8537:C2,476|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8fffc7c6bbb78556bf80140a20010800d00347c0803a64e8000217c03b80040820010386000017f2803a64e800020973bfffc971bfffc80180000941bfffc809b00003c0002b560008d2c7c0803a64e8000212c0300014082000c3ac00001480000e482a30000809500003c600000606346683f00000063184368801800007c0803a64e800021280300014182005480150004941bfffc807b0000831b0004801800007c0803a64e8000212c0300014082000c3ac0000148000088807b00003b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffff64398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a9d0004919d000082750004927400048255000092540000398000013bbdfff87c1df04040a00010800d001c7c0803a64e8000213add0004919d000092960000947bfffc3b7b00042c160001408200183c6002b56063a12c800d00287c0803a64e8000218236000080110000941bfffc80710004831b00084bfffe6d398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a1d0004919d00009070000481fb000091f000003870000081db000c7dc803a63b7b00104e800020|@8547,1048575|100,3,@8538 140,3,I48 148,3,I24 364,3,@8544 8538:C2,2552|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc947bfffc949bfffc3b040000801800007c0803a64e8000212c03000140820074398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b3d0004919d0000831b0004931900043ee0000062f7466892f90000398000013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d00009323000082db00087ec803a63b7b000c4e8000208323000083190000281800414080000848000010281800fd41810008480000183860000182fb00087ee803a63b7b000c4e8000202c1800b9408208a480190004941bfffc807b0000831b0004801800007c0803a64e8000212c030001408200183860000182fb000c7ee803a63b7b00104e80002082e3000082d700002c1600c340820070398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d000082970004929500043a60000f92750000398000013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a30000825b000c7e4803a63b7b00104e8000202c1600c540820070398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d000082970004929500043a60001192750000398000013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a30000825b000c7e4803a63b7b00104e8000202c1600e940820070398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d000082970004929500043a60001392750000398000013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a30000825b000c7e4803a63b7b00104e8000202c1600dd40820070398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d000082970004929500043a60001592750000398000013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a30000825b000c7e4803a63b7b00104e8000202c1600ed40820070398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d000082970004929500043a60001792750000398000013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a30000825b000c7e4803a63b7b00104e8000202c1600cd40820070398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d000082970004929500043a60001992750000398000013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a30000825b000c7e4803a63b7b00104e8000202c1600e540820070398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d000082970004929500043a60001b92750000398000013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a30000825b000c7e4803a63b7b00104e8000202c1600b940820070398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d000082970004929500043a6000b992750000398000013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a30000825b000c7e4803a63b7b00104e8000202c16004540820070398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d000082970004929500043a60004592750000398000013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a30000825b000c7e4803a63b7b00104e8000202c1600bd4082016880770004831b0004801800007c0803a64e8000212c030001408200183860000182bb000c7ea803a63b7b00104e80002082a3000082950000568bf80140a20010800d00347c0803a64e8000212c14008141800100568bf80140a20010800d00347c0803a64e8000212c1400bf418100e4398000805680f80140a20010800d00347c0803a64e8000217e6ca41141a3fff0566bf80140a20010800d00347c0803a64e8000212c1300014080000848000024566bf80140a20010800d00347c0803a64e8000212c1301ff41810008480000183c6002a16063026c800d00287c0803a64e8000213a530000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a3d0004919d0000821500049211000492510000398000013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d00009223000081fb000c7de803a63b7b00104e80002038600001827b000c7e6803a63b7b00104e8000202c1600eb408200b080db000480b7000438800009386000013c0002b5600097407c0803a64e8000212c030001408200183860000182bb000c7ea803a63b7b00104e80002082a30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a9d0004919d000082750004927400048255000092540000398000013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d000092830000823b000c7e2803a63b7b00104e80002028160013418000102816001b418100084800001028160041418200084800014082b7000496bbfffc38750000831b0008801800007c0803a64e8000212c0300014082000c807b000048000054828300008274000028130013418000102813001b418100084800001028130041418200084800002882b400043b7b0004800d00187c1b004040a00010800d00207c0803a64e8000214bffff90807b0000831b0008801800007c0803a64e8000212c0300014082001838600001825b00107e4803a63b7b00144e8000208243000082320000281100b94182001838600001821b00107e0803a63b7b00144e800020398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a1d0004919d000081f2000491f000043dc0000061ce466891d00000398000013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d000092030000815b00107d4803a63b7b00144e80002028160061418000b828160065418100b080db000480bb000038800007386000013c0002b560009d907c0803a64e8000212c030001408200183860000182bb000c7ea803a63b7b00104e80002082a30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a9d0004919d000082750004927400048255000092540000398000013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d000092830000823b000c7e2803a63b7b00104e8000203860000182bb000c7ea803a63b7b00104e800020398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213afd0004919d000082d9000492d7000493170000398000013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d000092e3000082bb00087ea803a63b7b000c4e800020|@8543,1048575|112,3,I48 1564,3,@318 1736,3,@8539 2172,3,I48 2272,3,@8541 8539:C2,1564|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c040001408200e4546bf80140a20010800d00347c0803a64e8000212c0301ff40810010386000017f2803a64e800020546bf80140a20010800d00347c0803a64e8000212c0300014080000848000024546bf80140a20010800d00347c0803a64e8000212c0301ff418100084800001c973bfffc3c6002a16063026c800d00287c0803a64e8000213b030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138dd0004919d000090a6000493060000398000013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d000090c300007f2803a64e800020973bfffc947bfffc949bfffc94bbfffc94dbfffc386500003b060000801800007c0803a64e8000212c03000140820120833b0008572bf80140a20010800d00347c0803a64e8000212c19ffff4180000848000028831b000c570bf80140a20010800d00347c0803a64e8000212c1801ff418100084800001838600001831b00107f0803a63b7b00144e800020570bf80140a20010800d00347c0803a64e8000212c1800014080000848000024570bf80140a20010800d00347c0803a64e8000212c1801ff41810008480000183c6002a16063026c800d00287c0803a64e8000213af80000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213add0004919d000082bb000492b6000492f60000398000013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d000092c30000829b00107e8803a63b7b00144e800020832300008319000028180061418000c828180073418100c082fb00083980000256e0f80140a20010800d00347c0803a64e8000217eccbc1141a3fff082bb000c3a8000213994ffff7eaba0385560f80140a20010800d00347c0803a64e8000217eab0e707e6c5dd741a3ffec3a7300013998ffff7e6bc0385560f80140a20010800d00347c0803a64e8000217e53661541a3fff0398000605640f80140a20010800d00347c0803a64e8000217e2c941141a3fff080db000080b900043896000038710000833b00107f2803a63b7b00144bfffce4281800c3418000e8281800cd418100e082fb00083980000256e0f80140a20010800d00347c0803a64e8000217eccbc1141a3fff082bb000c3a8000213994ffff7eaba0385560f80140a20010800d00347c0803a64e8000217eab0e707e6c5dd741a3ffec3a7300013998ffff7e6bc0385560f80140a20010800d00347c0803a64e8000217e53661541a3fff0398000c25640f80140a20010800d00347c0803a64e8000217e2c941141a3fff0398000145620f80140a20010800d00347c0803a64e8000217e11661541a3fff080db000080b900043896000038700000833b00107f2803a63b7b00144bfffbf828180083418000e82818008d418100e082fb00083980000256e0f80140a20010800d00347c0803a64e8000217eccbc1141a3fff082bb000c3a8000213994ffff7eaba0385560f80140a20010800d00347c0803a64e8000217eab0e707e6c5dd741a3ffec3a7300013998ffff7e6bc0385560f80140a20010800d00347c0803a64e8000217e53661541a3fff0398000825640f80140a20010800d00347c0803a64e8000217e2c941141a3fff0398000145620f80140a20010800d00347c0803a64e8000217e11661541a3fff080db000080b900043896000038700000833b00107f2803a63b7b00144bfffb0c82fb000856ebf80140a20010800d00347c0803a64e8000212c17ffff418000084800002882db000c56cbf80140a20010800d00347c0803a64e8000212c1601ff41810008480000183860000182db00107ec803a63b7b00144e80002056cbf80140a20010800d00347c0803a64e8000212c160001408000084800002456cbf80140a20010800d00347c0803a64e8000212c1601ff41810008480000183c6002a16063026c800d00287c0803a64e8000213ab60000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a9d0004919d0000827b00049274000492b40000398000013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d000092830000825b00107e4803a63b7b00144e800020|@8540,1048575|148,3,@318 468,3,@318 1436,3,@318 8540:S16|436861722e7265616448657827283429 8541:C2,848|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c040001408200e4546bf80140a20010800d00347c0803a64e8000212c0301ff40810010386000017f2803a64e800020546bf80140a20010800d00347c0803a64e8000212c0300014080000848000024546bf80140a20010800d00347c0803a64e8000212c0301ff418100084800001c973bfffc3c6002a16063026c800d00287c0803a64e8000213b030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e80002138dd0004919d000090a6000493060000398000013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d000090c300007f2803a64e800020973bfffc947bfffc949bfffc94bbfffc94dbfffc386500003b060000801800007c0803a64e8000212c03000140820120833b000c572bf80140a20010800d00347c0803a64e8000212c1901ff4081000848000028831b0008570bf80140a20010800d00347c0803a64e8000212c180001418100084800001838600001831b00107f0803a63b7b00144e800020572bf80140a20010800d00347c0803a64e8000212c1900014080000848000024572bf80140a20010800d00347c0803a64e8000212c1901ff41810008480000183c6002a16063026c800d00287c0803a64e8000213af90000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213add0004919d000082bb000492b6000492f60000398000013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d000092c30000829b00107e8803a63b7b00144e800020832300008319000028180061418000dc570bf80140a20010800d00347c0803a64e8000212c180073418100c082fb00083980000256e0f80140a20010800d00347c0803a64e8000217eccbc1141a3fff082bb000c3a8000153994ffff7eaba0385560f80140a20010800d00347c0803a64e8000217eab0e707e6c5dd741a3ffec3a7300013998ffff7e6bc0385560f80140a20010800d00347c0803a64e8000217e53661541a3fff0398000605640f80140a20010800d00347c0803a64e8000217e2c941141a3fff080db000080b900043896000038710000833b00107f2803a63b7b00144bfffcd03860000182fb00107ee803a63b7b00144e800020|@8542,1048575|148,3,@318 468,3,@318 8542:S15|436861722e72656164446563283429 8543:S16|436861722e7363616e42617365283229 8544:O3|8,@8546,@8545 8545:S23|496e76616c696420737472696e6720636f6e7374616e74 8546:S10|436f6e76657273696f6e 8547:S34|4d6973632e756e657363617065537472696e67283129636f6e764368617273283129 8548:S22|4d6973632e756e657363617065537472696e67283129 8549:C2,72|7f2802a6633900023b030000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d00003ee002b562f7a22092e30000930300047f2803a64e800020|@8559,917505|48,3,@8550 8550:C2,52|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021809800043c0002b56000a2707c0903a64e800420|@8558,1048575|36,3,@8551 8551:C2,104|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b1d0004919d00003ee002b562f7a2f492f800009078000438640000801800007c0903a67f2803a64e800420|@8557,1048575|68,3,@8552 8552:C2,220|7f2802a66339000282f800047c6bb838556bf80140a20010800d00347c0803a64e8000217c03b8004181000c3ac00003480000083ac00001398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213abd0004919d00003e8002b56294a3ec929500009315000890750004398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a9d0004919d00003e6002b56273a4809274000090740004398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d000092c300089283000492a300007f2803a64e800020|@8556,1040385|92,3,@8553 148,3,@8555 8553:C2,88|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f800043980000256e0f80140a20010800d00347c0803a64e8000217c77661541a3fff083180008801800007c0903a67f2803a64e800420|@8554,1048575| 8554:S22|4d6973632e7570746f28322973756363283129283129 8555:C2,8|807800044e800020|@8554,786433| 8556:S19|4d6973632e7570746f28322973756363283129 8557:S12|4d6973632e7570746f283229 8558:S15|4d6973632e7570746f283129283129 8559:S12|4d6973632e7570746f283129 8560:O1|@6074 8561:O6|@2110,@4366,@2111,@2114,@2117,@2120 8562:S11|352e322052656c65617365 8563:O4|-2,1,@8564,0 8564:O2|@8566,@8565 8565:O2|@8103,@8567 8566:O2|49,@7857 8567:O2|@8569,@8568 8568:O2|@8571,@8570 8569:O2|51,@7773 8570:O2|@8572,0 8571:O2|52,@191 8572:O2|53,@8067 8573:O2|@8575,@8574 8574:O2|@8576,0 8575:S10|646973706c6179536967 8576:O3|@9369,69,@8577 8577:O4|@8575,-1,@8579,@8578 8578:O3|1,@8587,@5701 8579:O2|-1,@8580 8580:O2|-3,@8581 8581:O2|@8583,@8582 8582:O2|@8585,@8204 8583:C2,72|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e3001096fbfffc80c3000c80a30008808300048063000083180004801800007c0903a64e800420|@8584,1048575| 8584:S43|494e495449414c4953455f28292e696e6974476c6f62616c456e76283129646973706c6179536967283129 8585:C2,248|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7000882b700243a830000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000827b0000926300043a40009b92430000973bfffc969bfffc949bfffc94bbfffc94dbfffc8016002c941bfffc83150000801800007c0803a64e8000213a230000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d0000821b00049203001081fb000891e3000c9223000881db000c91c30004815b001091430000831b0000833b0014801800007c0903a67f2803a63b7b001c4e800420|@8586,1048575| 8586:S43|494e495449414c4953455f28292e696e6974476c6f62616c456e76283129646973706c6179536967283529 8587:O4|-2,1,@8588,0 8588:O2|@8589,@8565 8589:O2|49,@7809 8590:O2|@8592,@8591 8591:O2|@8593,0 8592:S17|636f6d70696c65724f7574707574546167 8593:O3|@9369,69,@8594 8594:O4|@8592,-1,@8596,@8595 8595:O4|-3,@8599,@8600,@8598 8596:O2|-1,@8597 8597:O2|-3,@343 8598:O2|0,@8601 8599:O2|@8067,0 8600:S3|746167 8601:O6|@8600,1,0,@8603,@8605,@8602 8602:O2|-1,@9497 8603:O2|@8604,0 8604:O3|3,@9495,79992 8605:O2|-1,@9496 8606:O2|@8608,@8607 8607:O2|@8609,0 8608:S16|6d6178496e6c696e6553697a65546167 8609:O3|@9369,69,@8610 8610:O4|@8608,-1,@8612,@8611 8611:O4|-3,@8614,@8600,@8598 8612:O2|-1,@8613 8613:O2|-3,@2088 8614:O2|@2607,0 8615:O2|@8617,@8616 8616:O2|@8618,0 8617:S15|617373656d626c79436f6465546167 8618:O3|@9369,69,@8619 8619:O4|@8617,-1,@8621,@8620 8620:O4|-3,@8623,@8600,@8598 8621:O2|-1,@8622 8622:O2|-3,@333 8623:O2|@191,0 8624:O2|@8626,@8625 8625:O2|@8627,0 8626:S14|636f6e76537472696e674e616d65 8627:O3|@9369,69,@8628 8628:O4|@8626,-1,@8629,@2606 8629:O2|-1,@8630 8630:O2|-3,@5644 8631:O2|@8633,@8632 8632:O2|@8634,0 8633:S17|696e6c696e6546756e63746f7273546167 8634:O3|@9369,69,@8635 8635:O4|@8633,-1,@8636,@8620 8636:O2|-1,@8637 8637:O2|-3,@6653 8638:O2|@8640,@8639 8639:O2|@8641,0 8640:S7|6d6c3930546167 8641:O3|@9369,69,@8642 8642:O4|@8640,-1,@8643,@8620 8643:O2|-1,@8644 8644:O2|-3,@4210 8645:O2|@8647,@8646 8646:O2|@8648,0 8647:S11|636f646574726565546167 8648:O3|@9369,69,@8649 8649:O4|@8647,-1,@8650,@8620 8650:O2|-1,@8651 8651:O2|-3,@2089 8652:O2|@8654,@8653 8653:O2|@8655,0 8654:S10|646973706c617956616c 8655:O3|@9369,69,@8656 8656:O4|@8654,-1,@8658,@8657 8657:O3|1,@8666,@5701 8658:O2|-1,@8659 8659:O2|-3,@8660 8660:O2|@8662,@8661 8661:O2|@8664,@8204 8662:C2,72|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e3001096fbfffc80c3000c80a30008808300048063000083180004801800007c0903a64e800420|@8663,1048575| 8663:S43|494e495449414c4953455f28292e696e6974476c6f62616c456e76283129646973706c617956616c283129 8664:C2,248|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7000882b700243a830000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000827b0000926300043a40009b92430000973bfffc969bfffc949bfffc94bbfffc94dbfffc80160038941bfffc83150000801800007c0803a64e8000213a230000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d0000821b00049203001081fb000891e3000c9223000881db000c91c30004815b001091430000831b0000833b0014801800007c0903a67f2803a63b7b001c4e800420|@8665,1048575| 8665:S43|494e495449414c4953455f28292e696e6974476c6f62616c456e76283129646973706c617956616c283529 8666:O4|-2,1,@8667,0 8667:O2|@8668,@8565 8668:O2|49,@7825 8669:O2|@8671,@8670 8670:O2|@8672,0 8671:S14|7072696e74537472696e67546167 8672:O3|@9369,69,@8673 8673:O4|@8671,-1,@8674,@8595 8674:O2|-1,@8675 8675:O2|-3,@4689 8676:O2|@8678,@8677 8677:O2|@8679,0 8678:S13|646973706c6179537472756374 8679:O3|@9369,69,@8680 8680:O4|@8678,-1,@8682,@8681 8681:O3|1,@8690,@5701 8682:O2|-1,@8683 8683:O2|-3,@8684 8684:O2|@8686,@8685 8685:O2|@8688,@8204 8686:C2,72|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182e3001096fbfffc80c3000c80a30008808300048063000083180004801800007c0903a64e800420|@8687,1048575| 8687:S46|494e495449414c4953455f28292e696e6974476c6f62616c456e76283129646973706c6179537472756374283129 8688:C2,248|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7000882b700243a830000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000827b0000926300043a40009b92430000973bfffc969bfffc949bfffc94bbfffc94dbfffc80160030941bfffc83150000801800007c0803a64e8000213a230000398000053bbdffe87c1df04040a00010800d001c7c0803a64e800021387d0004919d0000821b00049203001081fb000891e3000c9223000881db000c91c30004815b001091430000831b0000833b0014801800007c0903a67f2803a63b7b001c4e800420|@8689,1048575| 8689:S46|494e495449414c4953455f28292e696e6974476c6f62616c456e76283129646973706c6179537472756374283529 8690:O4|-2,1,@8691,0 8691:O2|@8692,@8565 8692:O2|49,@7885 8693:O2|@8695,@8694 8694:O2|@8696,0 8695:S12|706172736574726565546167 8696:O3|@9369,69,@8697 8697:O4|@8695,-1,@8698,@8620 8698:O2|-1,@8699 8699:O2|-3,@7657 8700:O2|@8702,@8701 8701:O2|@8703,0 8702:S13|6c696e654c656e677468546167 8703:O3|@9369,69,@8704 8704:O4|@8702,-1,@8705,@8611 8705:O2|-1,@8706 8706:O2|-3,@8524 8707:O2|@8709,@8708 8708:O2|@8710,0 8709:S11|6465627567676572546167 8710:O3|@9369,69,@8711 8711:O4|@8709,-1,@8713,@8712 8712:O4|-3,@8715,@8600,@8598 8713:O2|-1,@8714 8714:O2|-3,@6074 8715:O2|@8716,0 8716:O3|1,@8717,@5701 8717:O4|-2,1,@8718,0 8718:O2|@8095,@8719 8719:O2|@7824,@8720 8720:O2|@8722,@8721 8721:O2|@8724,@8723 8722:O2|51,@2607 8723:O2|@8726,@8725 8724:O2|52,@2606 8725:O2|@8727,0 8726:O2|53,@2606 8727:O2|54,@7773 8728:O2|@8730,@8729 8729:O2|@8731,0 8730:S14|70737461636b5472616365546167 8731:O3|@9369,69,@8732 8732:O4|@8730,-1,@8733,@8620 8733:O2|-1,@8734 8734:O2|-3,@1084 8735:O2|@8737,@8736 8736:O2|@8738,0 8737:S11|676c6f62616c5370616365 8738:O3|@9369,69,@8739 8739:O4|@8737,-1,@8740,@7773 8740:O2|-1,@8741 8741:O2|-3,@8742 8742:O18|@8744,@8745,@8746,@8747,@8748,@8749,@8750,@8751,@8752,@8753,@8754,@8755,@8756,@8757,@8758,@8759,@8760,@8743 8743:O4|@8383,@8289,@175,@4173 8744:O4|@8399,@8289,@175,@3661 8745:O4|@8407,@8289,@175,@4169 8746:O4|@8403,@8289,@175,@4148 8747:O4|@8405,@8289,@175,@4177 8748:O4|@8411,@8289,@175,@4165 8749:O4|@8387,@8289,@175,@3661 8750:O4|@8393,@8289,@175,@4169 8751:O4|@8389,@8289,@175,@4148 8752:O4|@8409,@8289,@175,@4173 8753:O4|@8391,@8289,@175,@4177 8754:O4|@8375,@8289,@175,@3661 8755:O4|@8381,@8289,@175,@4169 8756:O4|@8377,@8289,@175,@4148 8757:O4|@8397,@8289,@175,@4165 8758:O4|@8379,@8289,@175,@4177 8759:O4|@8395,@8289,@175,@4173 8760:O4|@8385,@8289,@175,@4165 8761:O2|@8763,@8762 8762:O2|@8764,0 8763:S11|646973706c617954797065 8764:O3|@9369,69,@8765 8765:O4|@8763,-1,@8767,@8766 8766:O3|1,@8775,@5701 8767:O2|-1,@8768 8768:O2|-3,@8769 8769:O2|@8771,@8770 8770:O2|@8773,@8204 8771:C2,64|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180c3000c80a30008808300048063000083180004801800007c0903a64e800420|@8772,1048575| 8772:S44|494e495449414c4953455f28292e696e6974476c6f62616c456e76283129646973706c617954797065283129 8773:C2,232|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7000082b700243a830000398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d000090c300043a60009b92630000973bfffc969bfffc949bfffc94bbfffc8016003c941bfffc83150000801800007c0803a64e8000213a430000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d0000823b00049223000c92430008821b00089203000481fb000c91e30000831b0000833b0010801800007c0903a67f2803a63b7b00144e800420|@8774,1048575| 8774:S44|494e495449414c4953455f28292e696e6974476c6f62616c456e76283129646973706c617954797065283429 8775:O4|-2,1,@8776,0 8776:O2|@8778,@8777 8777:O2|@8103,@8779 8778:O2|49,@7841 8779:O2|@8781,@8780 8780:O2|@8782,0 8781:O2|51,@191 8782:O2|52,@8067 8783:O2|@8785,@8784 8784:O2|@8786,0 8785:S13|6c696e654e756d626572546167 8786:O3|@9369,69,@8787 8787:O4|@8785,-1,@8789,@8788 8788:O4|-3,@8791,@8600,@8598 8789:O2|-1,@8790 8790:O2|-3,@2847 8791:O2|@8792,0 8792:O3|1,@5701,@2607 8793:O2|@8795,@8794 8794:O2|@8796,0 8795:S3|757365 8796:O3|@9369,69,@8797 8797:O4|@8795,-1,@8798,@8067 8798:O2|-1,@8799 8799:O2|-3,@8800 8800:O10|@8451,@8289,@175,@4177,@4165,@4169,@4173,@4148,@3661,@8801 8801:O18|@8803,@8804,@8805,@8806,@8807,@8808,@8809,@8810,@8811,@8812,@8813,@8814,@8815,@8816,@8817,@8818,@8819,@8802 8802:O4|@8423,@8289,@175,@4173 8803:O4|@8439,@8289,@175,@3661 8804:O4|@8445,@8289,@175,@4169 8805:O4|@8441,@8289,@175,@4148 8806:O4|@8443,@8289,@175,@4177 8807:O4|@8449,@8289,@175,@4165 8808:O4|@8427,@8289,@175,@3661 8809:O4|@8435,@8289,@175,@4169 8810:O4|@8429,@8289,@175,@4148 8811:O4|@8447,@8289,@175,@4173 8812:O4|@8431,@8289,@175,@4177 8813:O4|@8415,@8289,@175,@3661 8814:O4|@8421,@8289,@175,@4169 8815:O4|@8417,@8289,@175,@4148 8816:O4|@8437,@8289,@175,@4165 8817:O4|@8419,@8289,@175,@4177 8818:O4|@8433,@8289,@175,@4173 8819:O4|@8425,@8289,@175,@4165 8820:O2|@8822,@8821 8821:O2|@8823,0 8822:S8|6465627567546167 8823:O3|@9369,69,@8824 8824:O4|@8822,-1,@8825,@8620 8825:O2|-1,@8826 8826:O2|-3,@6026 8827:O2|@8829,@8828 8828:O2|@8830,0 8829:S10|45786e4d657373616765 8830:O3|@9408,69,@8831 8831:O3|@8829,@2645,@8832 8832:O4|@8833,I48,0,0 8833:O4|-1,@9499,@9500,@9498 8834:O2|@8836,@8835 8835:O2|@8837,0 8836:S10|65786e4d657373616765 8837:O3|@9369,69,@8838 8838:O4|@8836,-1,@8075,@8839 8839:O3|1,@5390,@2606 8840:O2|@8842,@8841 8841:O2|@8843,0 8842:S11|66696c654e616d65546167 8843:O3|@9369,69,@8844 8844:O4|@8842,-1,@8846,@8845 8845:O4|-3,@8848,@8600,@8598 8846:O2|-1,@8847 8847:O2|-3,@6025 8848:O2|@2606,0 8849:O2|@8851,@8850 8850:O2|@8852,0 8851:S16|7072696e74446570746846756e546167 8852:O3|@9369,69,@8853 8853:O4|@8851,-1,@8854,@8788 8854:O2|-1,@8855 8855:O2|-3,@4690 8856:O2|@8858,@8857 8857:O2|@8859,0 8858:S9|74696d696e67546167 8859:O3|@9369,69,@8860 8860:O4|@8858,-1,@8861,@8620 8861:O2|-1,@8862 8862:O2|-3,@7664 8863:O2|@8865,@8864 8864:O2|@8866,0 8865:S15|7072696e74456e7669726f6e546167 8866:O3|@9369,69,@8867 8867:O4|@8865,-1,@8869,@8868 8868:O4|-3,@8871,@8600,@8598 8869:O2|-1,@8870 8870:O2|-3,@4719 8871:O2|@7773,0 8872:O2|@7342,@8873 8873:O2|@8874,0 8874:O3|@9369,69,@8875 8875:O4|@7342,-1,@8877,@8876 8876:O3|1,@2606,@8209 8877:O2|-1,@8878 8878:O2|-3,@8879 8879:O2|@8880,@8204 8880:C2,424|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021706b00014182000c3ae000034800001081830000558c083c6197000156ebf80140a20010800d00347c0803a64e8000212c17000540810084706b00014182000c3ae000034800001081830000558c083c6197000156ebf80140a20010800d00347c0803a64e8000212c17000541810020973bfffc3ae300003c6002a0606395e0800d00287c0803a64e800021706b00014182000c3ac300004800001089830006558c083c61960001281600f14082000c3ac00003480000083ac0ffff398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213afd0004919d00003ea002b562b5c12c92b7000092d70004973bfffc971bfffc389700003c0002b3600054307c0803a64e8000212c03000140820064829b0000827400048253001c398000033bbdfff07c1df04040a00010800d001c7c0803a64e8000213a3d0004919d00003e0002b56210cee4921100083de002b561efa15c91f1000481d2000c91d1000038710000800d00287c0803a64e80002180630000829b00047e8803a63b7b00084e800020|@8895,1048575|152,3,@51 256,3,@8881 284,3,@7048 356,3,@8894 368,3,@8546 8881:C2,80|7f2802a6633900023ae30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003ec002b562d6c19892c3000092e3000882f8000492e300047f2803a64e800020|@8893,983041|48,3,@8882 8882:C2,304|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc80b80004809800083c0002b56000c2e47c0803a64e8000212c0300014082001838600001833b00007f2803a63b7b00044e80002083230000831900003ee002b562f7ce787f0bb838556bf80140a20010800d00347c0803a64e8000217c18b800408100183c6002b56063ce84800d00287c0803a64e800021730b00014182000c3ad8000048000020387800003f00000063185368801800007c0803a64e8000213ac30000398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213abd0004919d0000829900049295000492d50000398000013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d000092a30000827b00007e6803a63b7b00044e800020|@8892,1048575|44,3,@8883 96,3,@8889 136,3,@8890 176,3,I152 8883:C2,1112|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e8000212c0500014082000c3b000005480000282c05fffd4082000c3b000011480000182c05ffff4082000c3b000015480000083b000021971bfffc949bfffc973bfffc947bfffc94bbfffc3b040000801800007c0803a64e8000212c030001408200183860000182fb00087ee803a63b7b00144e80002082e3000082d700002c1600614082031080170004941bfffc807b0000831b0010801800007c0803a64e8000212c0300014082000c3aa000014800025c82830000827400002c1300ef40820170825b00042c1200034082010880140004941bfffc807b0000831b0014801800007c0803a64e8000212c0300014082000c3aa000014800021082230000821100002c1000f14082000848000010281000b1418200084800006081fb00082c0f00034082002c80b1000438800001386000013b1b00183c0002b56000c7587c0803a64e8000213aa30000480001bc80b1000438800001386000013b1b00183c0002b56000cbbc7c0803a64e8000213aa300004800019481fb00082c0f00034082002c80bb000038800001386000013b1b00183c0002b56000c7587c0803a64e8000213aa300004800016080bb000038800001386000013b1b00183c0002b56000cbbc7c0803a64e8000213aa30000480001382c1200034082002c80b4000438800001386000013b1b00143c0002b56000c7587c0803a64e8000213aa300004800002880b4000438800001386000013b1b00143c0002b56000cbbc7c0803a64e8000213aa30000947bfffc480000dc2c1300f14082000848000010281300b14182000848000068825b0004281200034082005c2c1200034082002c80b4000438800001386000013b1b00143c0002b56000c7587c0803a64e8000213aa300004800008480b4000438800001386000013b1b00143c0002b56000cbbc7c0803a64e8000213aa300004800005c825b00042c1200034082002c80bb000838800001386000013b1b00143c0002b56000c7587c0803a64e8000213aa300004800002880bb000838800001386000013b1b00143c0002b56000cbbc7c0803a64e8000213aa30000947bfffc3b7b00042c15000140820070398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a3d0004919d0000821b00009211000439e0000191f10000398000013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d00009223000081db000c7dc803a63b7b00184e80002038750000823b000c7e2803a63b7b00184e80002028160013418000102816001b418100084800001028160041418200084800002080bb0000809b000c80770004833b00087f2803a63b7b00144bfffc2082bb00002c1500034082003480bb000438800001386000013b1b00103c0002b56000c7587c0803a64e800021829b00087e8803a63b7b00144e80002080bb000438800001386000013b1b00103c0002b56000cbbc7c0803a64e800021829b00087e8803a63b7b00144e800020|@8888,1048575|340,3,@8884 380,3,@8886 432,3,@8884 472,3,@8886 520,3,@8884 560,3,@8886 648,3,@8884 688,3,@8886 740,3,@8884 780,3,@8886 1032,3,@8884 1080,3,@8886 8884:C2,1056|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc947bfffc949bfffc94bbfffc386500008318fffc801800007c0803a64e8000212c03000140820090833b00082819000141820070398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b1d0004919d000082fb000092f8000482db000492d80000398000013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d00009303000082bb00107ea803a63b7b00144e80002038600001831b00107f0803a63b7b00144e8000208323000083190000570bf80140a20010800d00347c0803a64e8000212c180061418000b8570bf80140a20010800d00347c0803a64e8000212c1800734181009c82fb00043ac000213996ffff7eebb0385560f80140a20010800d00347c0803a64e8000217eeb0e707eac5dd741a3ffec3ab500013998ffff7eabc0385560f80140a20010800d00347c0803a64e8000217e95661541a3fff0398000605680f80140a20010800d00347c0803a64e8000217e6ca41141a3fff080b900043893000038600003831b000c833b00107f2803a63b7b00144bfffe58570bf80140a20010800d00347c0803a64e8000212c180083418000d8570bf80140a20010800d00347c0803a64e8000212c18008d418100bc82fb00043ac000213996ffff7eebb0385560f80140a20010800d00347c0803a64e8000217eeb0e707eac5dd741a3ffec3ab500013998ffff7eabc0385560f80140a20010800d00347c0803a64e8000217e95661541a3fff0398000825680f80140a20010800d00347c0803a64e8000217e6ca41141a3fff0398000145660f80140a20010800d00347c0803a64e8000217e53661541a3fff080b900043892000038600003831b000c833b00107f2803a63b7b00144bfffd68570bf80140a20010800d00347c0803a64e8000212c1800c3418000d8570bf80140a20010800d00347c0803a64e8000212c1800cd418100bc82fb00043ac000213996ffff7eebb0385560f80140a20010800d00347c0803a64e8000217eeb0e707eac5dd741a3ffec3ab500013998ffff7eabc0385560f80140a20010800d00347c0803a64e8000217e95661541a3fff0398000c25680f80140a20010800d00347c0803a64e8000217e6ca41141a3fff0398000145660f80140a20010800d00347c0803a64e8000217e53661541a3fff080b900043892000038600003831b000c833b00107f2803a63b7b00144bfffc7882fb00082817000141820070398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213add0004919d000082bb000092b60004829b000492960000398000013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d000092c30000827b00107e6803a63b7b00144e8000203860000182db00107ec803a63b7b00144e800020|@8885,1048575| 8885:S29|7363616e576f7264283329726561645f6865785f646967697473283329 8886:C2,616|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc971bfffc947bfffc949bfffc94bbfffc386500008318fffc801800007c0803a64e8000212c03000140820090833b00082819000141820070398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213b1d0004919d000082fb000092f8000482db000492d80000398000013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d00009303000082bb00107ea803a63b7b00144e80002038600001831b00107f0803a63b7b00144e8000208323000083190000570bf80140a20010800d00347c0803a64e8000212c180061418000e082fb000c82d700003980006056c0f80140a20010800d00347c0803a64e8000217eb6661541a3fff07f0ba838556bf80140a20010800d00347c0803a64e8000217c18a80040800098829b00043996ffff7e8bb0385560f80140a20010800d00347c0803a64e8000217e8b0e707e6c5dd741a3ffec3a7300013998ffff7e6bc0385560f80140a20010800d00347c0803a64e8000217e53661541a3fff0398000605640f80140a20010800d00347c0803a64e8000217e2c941141a3fff080b9000438910000386000033b170000833b00107f2803a63b7b00144bfffe3082fb00082817000141820070398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213add0004919d000082bb000092b60004829b000492960000398000013bbdfff87c1df04040a00010800d001c7c0803a64e800021387d0004919d000092c30000827b00107e6803a63b7b00144e8000203860000182db00107ec803a63b7b00144e800020|@8887,1048575| 8887:S25|7363616e576f7264283329726561645f646967697473283329 8888:S11|7363616e576f7264283329 8889:B8|ffffff7f00000000 8890:O3|5,@8891,0 8891:S8|4f766572666c6f77 8892:S24|576f7264732e576f72642e7363616e283129283129283129 8893:S21|576f7264732e576f72642e7363616e283129283129 8894:S21|496e76616c696420776f726420636f6e7374616e74 8895:S45|494e495449414c4953455f28292e696e6974476c6f62616c456e76283129776f72644f66537472696e67283129 8896:O2|@5644,@8897 8897:O2|@8898,0 8898:O3|@9369,69,@8899 8899:O4|@5644,-1,@8901,@8900 8900:O3|1,@2606,@2606 8901:O2|-1,@8902 8902:O2|-3,@8533 8903:O2|@8905,@8904 8904:O2|@8906,0 8905:S12|70726f66696c696e67546167 8906:O3|@9369,69,@8907 8907:O4|@8905,-1,@8908,@8611 8908:O2|-1,@8909 8909:O2|-3,@7671 8910:O2|@8912,@8911 8911:O2|@8913,0 8912:S15|636f6d70696c657256657273696f6e 8913:O3|@9369,69,@8914 8914:O4|@8912,-1,@8915,@2606 8915:O2|-1,@8916 8916:O2|-3,@8562 8917:O2|@8919,@8918 8918:O2|@8920,0 8919:S16|7472616365436f6d70696c6572546167 8920:O3|@9369,69,@8921 8921:O4|@8919,-1,@8922,@8620 8922:O2|-1,@8923 8923:O2|-3,@7656 8924:O2|@8926,@8925 8925:O2|@8927,0 8926:S8|7072696e7456616c 8927:O3|@9369,69,@8928 8928:O4|@8926,-1,@8930,@8929 8929:O3|1,@8938,@5701 8930:O2|-1,@8931 8931:O2|-3,@8932 8932:O2|@8934,@8933 8933:O2|@8936,@8204 8934:C2,64|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180c3000c80a30008808300048063000083180004801800007c0903a64e800420|@8935,1048575| 8935:S41|494e495449414c4953455f28292e696e6974476c6f62616c456e762831297072696e7456616c283129 8936:C2,184|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7000882b70024973bfffc947bfffc949bfffc94bbfffc8016003c941bfffc3866000083150004801800007c0803a64e8000213a830000398000043bbdffec7c1df04040a00010800d001c7c0803a64e800021387d0004919d0000827b00049263000c92830008825b000892430004823b000c92230000831b0000833b0010801800007c0903a67f2803a63b7b00144e800420|@8937,1048575| 8937:S41|494e495449414c4953455f28292e696e6974476c6f62616c456e762831297072696e7456616c283429 8938:O4|-2,1,@8939,0 8939:O2|@8668,@8940 8940:O2|@8103,@8941 8941:O2|@8569,@8780 8942:O2|@8944,@8943 8943:O2|@8945,0 8944:S10|646973706c6179466978 8945:O3|@9369,69,@8946 8946:O4|@8944,-1,@8948,@8947 8947:O3|1,@8956,@5701 8948:O2|-1,@8949 8949:O2|-3,@8950 8950:O2|@8952,@8951 8951:O2|@8954,@8204 8952:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021808300048063000083180004801800007c0903a64e800420|@8953,1048575| 8953:S43|494e495449414c4953455f28292e696e6974476c6f62616c456e76283129646973706c6179466978283129 8954:C2,460|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002182f8000482d7002482a3000082830004398000023bbdfff47c1df04040a00010800d001c7c0803a64e800021387d0004919d0000908300043a60009b92630000973bfffc971bfffc96bbfffc969bfffc83160000801800007c0803a64e800021825b00088232000482110024947bfffc8310000c801800007c0803a64e80002139e300003c6002a16063f6583b0f0000801800007c0803a64e80002181db000c814e0004812a0008398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d0000811b00009103000838e007cf90e3000480db000490c3000083090028801800007c0803a64e80002180bb000c808500048064002483230014807b00003b190000801800007c0803a64e8000213b0300003c6002a06063ee14801800007c0803a64e80002182fb000c82d7000482b60024807b000083150008801800007c0803a64e8000213a830000807b00083b140000801800007c0803a64e800021827b000c8253000482320024807b000083110010801800007c0803a64e8000213a030000386000013b100000833b0010801800007c0903a67f2803a63b7b00144e800420|@8955,1048575|164,3,@711 316,3,@265 8955:S43|494e495449414c4953455f28292e696e6974476c6f62616c456e76283129646973706c6179466978283229 8956:O4|-2,1,@8957,0 8957:O2|@8959,@8958 8958:O2|@8960,0 8959:O2|49,@7788 8960:O2|50,@8067 8961:O2|@8963,@8962 8962:O2|@8964,0 8963:S19|6572726f724d65737361676550726f63546167 8964:O3|@9369,69,@8965 8965:O4|@8963,-1,@8967,@8966 8966:O4|-3,@8969,@8600,@8598 8967:O2|-1,@8968 8968:O2|-3,@2848 8969:O2|@8970,0 8970:O3|1,@8971,@5701 8971:O4|-2,1,@8972,0 8972:O2|@7791,@8973 8973:O2|@8096,@8974 8974:O2|@8722,0 8975:O2|@8977,@8976 8976:O2|@8978,0 8977:S9|556e6976657273616c 8978:O3|@9408,69,@8979 8979:O3|@8977,@2645,@8980 8980:O4|@8981,I48,0,0 8981:O4|-1,@9503,@9504,@9502 8982:O2|@8018,@9022 8983:O2|@8600,@8984 8984:O2|@8985,0 8985:O3|@9403,69,@8601 8986:O2|@8988,@8987 8987:O2|@8989,0 8988:S10|74616750726f6a656374 8989:O3|@9369,69,@8990 8990:O4|@8988,-1,@8992,@8991 8991:O3|1,@8995,@8994 8992:O2|-1,@8993 8993:O2|-3,@4033 8994:O3|1,@8016,@8997 8995:O4|-3,@8996,@8600,@8598 8996:O2|@8997,0 8997:O3|3,@9506,79992 8998:O2|@9000,@8999 8999:O2|@9001,0 9000:S9|746167496e6a656374 9001:O3|@9369,69,@9002 9002:O4|@9000,-1,@9004,@9003 9003:O3|1,@9007,@9006 9004:O2|-1,@9005 9005:O2|-3,@4045 9006:O3|1,@9009,@8016 9007:O4|-3,@9008,@8600,@8598 9008:O2|@9009,0 9009:O3|3,@9507,79992 9010:O2|@9012,@9011 9011:O2|@9013,0 9012:S5|7461674973 9013:O3|@9369,69,@9014 9014:O4|@9012,-1,@9016,@9015 9015:O3|1,@9019,@9018 9016:O2|-1,@9017 9017:O2|-3,@4042 9018:O3|1,@8016,@191 9019:O4|-3,@9020,@8600,@8598 9020:O2|@9021,0 9021:O3|3,@9508,79992 9022:O2|@9023,0 9023:O3|@9403,69,@8019 9024:O2|@7327,@9025 9025:O2|@9026,0 9026:O3|@9369,69,@9027 9027:O4|@7327,-1,@9029,@9028 9028:O3|1,@2606,@2607 9029:O2|-1,@9030 9030:O2|-3,@9031 9031:O2|@9032,@8204 9032:C2,516|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021706b00014182000c3ae000034800001081830000558c083c6197000156ebf80140a20010800d00347c0803a64e8000212c17000741800050973bfffc971bfffc947bfffc38a00005388000013c0002ac6000c9547c0803a64e8000213c8002a7608469543f00000063184368801800007c0803a64e800021280300014182001448000090973bfffc971bfffc947bfffc82db000072cb00014182000c3aa000034800001081960000558c083c6195000156abf80140a20010800d00347c0803a64e8000212c1500094180005038a0000738800001387600003c0002ac6000c9547c0803a64e8000213c8002b56084dd043f00000063184368801800007c0803a64e80002128030001408200084800000c3ac00003480000083ac0ffff398000023bbdfff47c1df04040a00010800d001c7c0803a64e8000213a9d0004919d00003e6002b56273dd109274000092d4000438940000807b00003c0002b3600054307c0803a64e8000212c03000140820064825b0004823200048211001c398000033bbdfff07c1df04040a00010800d001c7c0803a64e80002139fd0004919d00003dc002b561ceddd091cf00083d4002b5614aa15c914f00048130000c912f0000386f0000800d00287c0803a64e80002180630000825b00087e4803a63b7b000c4e800020|@9037,1048575|108,3,@5220 124,3,@2896 132,3,I24 248,3,@5220 264,3,@9033 272,3,I24 352,3,@9034 376,3,@7048 448,3,@9036 460,3,@8546 9033:S3|7e3078 9034:C2,80|7f2802a6633900023ae30000398000033bbdfff07c1df04040a00010800d001c7c0803a64e800021387d0004919d00003ec002b562d6dd7c92c3000092e3000882f8000492e300047f2803a64e800020|@7047,983041|48,3,@9035 9035:C2,56|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e80002180b80004809800083c0002b3600048347c0903a64e800420|@7046,1048575|40,3,@7038 9036:S24|496e76616c696420696e746567657220636f6e7374616e74 9037:S44|494e495449414c4953455f28292e696e6974476c6f62616c456e76283129696e744f66537472696e67283129 9038:O2|@9040,@9039 9039:O2|@9041,0 9040:S19|636f64657472656541667465724f7074546167 9041:O3|@9369,69,@9042 9042:O4|@9040,-1,@9043,@8620 9043:O2|-1,@9044 9044:O2|-3,@2096 9045:O2|@9047,0 9046:S13|6572726f724465707468546167 9047:O3|@9369,69,@9048 9048:O4|@9046,-1,@9049,@8611 9049:O2|-1,@9050 9050:O2|-3,@4209 9051:O2|47,@9052 9052:O2|@9053,0 9053:O3|@9369,69,@9054 9054:O4|47,-1,@190,@8142 9055:O2|@9057,@9056 9056:O2|@9058,0 9057:S3|646976 9058:O3|@9369,69,@9059 9059:O4|@9057,-1,@190,@8142 9060:O2|@9062,@9061 9061:O2|@9063,0 9062:S6|766563746f72 9063:O3|@9403,69,@9064 9064:O6|@9062,1,0,@9066,@2612,@9065 9065:O2|-1,@9510 9066:O2|@9067,0 9067:O3|3,@9509,79992 9068:O2|60,@9069 9069:O2|@9070,0 9070:O3|@9369,69,@9071 9071:O4|60,-1,@190,@189 9072:O2|62,@9073 9073:O2|@9074,0 9074:O3|@9369,69,@9075 9075:O4|62,-1,@190,@189 9076:O2|@9078,@9077 9077:O2|@9079,0 9078:S7|52756e43616c6c 9079:O3|@9408,69,@9080 9080:O3|@9078,@2645,@9081 9081:O4|@9082,I48,0,0 9082:O4|-1,@9512,@9513,@9511 9083:O2|@178,20 9084:O2|@9295,@9294 9085:O2|@9087,@9086 9086:O2|@9088,0 9087:S14|52756e5f657863657074696f6e31 9088:O3|@9446,69,@9089 9089:O4|@9091,@9087,@9106,@9090 9090:O4|@9109,I48,1,0 9091:O3|I48,@9093,@9092 9092:O4|@9094,I48,1,0 9093:O3|1,@9516,@9515 9094:O3|0,@2647,@9095 9095:O10|0,0,0,0,0,0,0,@9097,@9096,0 9096:O2|@9103,@9102 9097:O2|@9099,@9098 9098:O2|@9100,0 9099:S7|65785f6964656e 9100:O3|@9369,69,@9101 9101:O4|@9099,-1,@711,@2607 9102:O2|@9104,0 9103:S7|65785f74797065 9104:O3|@9403,69,@9105 9105:O6|@9103,0,0,0,@2595,@711 9106:O2|-1,@9107 9107:O2|-7,@9108 9108:O8|@2532,@9087,0,0,1,0,0,0 9109:O3|0,@2647,@9110 9110:O10|0,@9111,0,0,0,0,0,0,0,0 9111:O2|@9113,@9112 9112:O2|@9114,0 9113:S2|6578 9114:O3|@9369,69,@9115 9115:O4|@9113,0,@711,@9116 9116:O4|-3,0,@9103,@9117 9117:O2|0,@9105 9118:O2|@9120,@9119 9119:O2|@9121,0 9120:S10|756e7361666543617374 9121:O3|@9369,69,@9122 9122:O4|@9120,-1,@9124,@9123 9123:O3|1,@9128,@9127 9124:O2|-1,@9125 9125:O2|-7,@9126 9126:O8|@2532,@1120,1,0,1,0,0,0 9127:O3|3,@9518,79992 9128:O3|3,@9517,79992 9129:O2|@9131,@9130 9130:O2|@9132,0 9131:S9|72756e5f63616c6c30 9132:O3|@9369,69,@9133 9133:O4|@9131,-1,@9135,@9134 9134:O3|1,@2607,@9149 9135:O2|-1,@9136 9136:O2|-7,@9137 9137:O8|@9138,@9131,1,0,1,0,0,0 9138:O2|9,@9139 9139:O2|@9141,@9140 9140:O2|@9144,0 9141:O4|-4,1,@9142,0 9142:O4|4,@2531,@9143,1 9143:O2|-3,I189 9144:O2|-7,@9145 9145:O8|@9147,@9146,2,0,1,0,0,0 9146:S12|72756e5f63616c6c30283129 9147:O4|4,0,@9148,0 9148:O5|-5,1,1,1,0 9149:O3|1,@5701,@9150 9150:O3|3,@9519,79992 9151:O2|@9153,@9152 9152:O2|@9154,0 9153:S9|72756e5f63616c6c31 9154:O3|@9369,69,@9155 9155:O4|@9153,-1,@9157,@9156 9156:O3|1,@2607,@9161 9157:O2|-1,@9158 9158:O2|-7,@9159 9159:O8|@9142,@9160,1,0,1,0,0,0 9160:S12|72756e5f63616c6c31283129 9161:O3|1,@9150,@9162 9162:O3|3,@9520,79992 9163:O2|@9165,@9164 9164:O2|@9166,0 9165:S9|72756e5f63616c6c32 9166:O3|@9369,69,@9167 9167:O4|@9165,-1,@9169,@9168 9168:O3|1,@2607,@9181 9169:O2|-1,@9170 9170:O2|-7,@9171 9171:O8|@9172,@9165,1,0,1,0,0,0 9172:O2|9,@9173 9173:O2|@9141,@9174 9174:O2|@9175,0 9175:O2|-7,@9176 9176:O8|@9177,@1127,2,0,1,0,0,0 9177:O4|4,@9178,@9148,0 9178:O2|@7961,@9179 9179:O2|@9180,0 9180:O3|6,@2532,1 9181:O3|1,@9183,@9182 9182:O3|3,@9521,79992 9183:O4|-2,1,@9184,0 9184:O2|@9186,@9185 9185:O2|@9187,0 9186:O2|49,@9150 9187:O2|50,@9162 9188:O2|@9190,@9189 9189:O2|@9191,0 9190:S9|72756e5f63616c6c33 9191:O3|@9369,69,@9192 9192:O4|@9190,-1,@9194,@9193 9193:O3|1,@2607,@9207 9194:O2|-1,@9195 9195:O2|-7,@9196 9196:O8|@9197,@9190,1,0,1,0,0,0 9197:O2|9,@9198 9198:O2|@9141,@9199 9199:O2|@9200,0 9200:O2|-7,@9201 9201:O8|@9202,@1871,2,0,1,0,0,0 9202:O4|4,@9203,@9148,0 9203:O2|@7961,@9204 9204:O2|@9180,@9205 9205:O2|@9206,0 9206:O3|6,@2532,2 9207:O3|1,@9209,@9208 9208:O3|3,@9522,79992 9209:O4|-2,1,@9210,0 9210:O2|@9186,@9211 9211:O2|@9187,@9212 9212:O2|@9213,0 9213:O2|51,@9182 9214:O2|@9216,@9215 9215:O2|@9217,0 9216:S9|72756e5f63616c6c34 9217:O3|@9369,69,@9218 9218:O4|@9216,-1,@9220,@9219 9219:O3|1,@2607,@9235 9220:O2|-1,@9221 9221:O2|-7,@9222 9222:O8|@9223,@9216,1,0,1,0,0,0 9223:O2|9,@9224 9224:O2|@9141,@9225 9225:O2|@9226,0 9226:O2|-7,@9227 9227:O8|@9229,@9228,2,0,1,0,0,0 9228:S12|72756e5f63616c6c34283129 9229:O4|4,@9230,@9148,0 9230:O2|@7961,@9231 9231:O2|@9180,@9232 9232:O2|@9206,@9233 9233:O2|@9234,0 9234:O3|6,@2532,3 9235:O3|1,@9237,@9236 9236:O3|3,@9523,79992 9237:O4|-2,1,@9238,0 9238:O2|@9186,@9239 9239:O2|@9187,@9240 9240:O2|@9213,@9241 9241:O2|@9242,0 9242:O2|52,@9208 9243:O2|@9245,@9244 9244:O2|@9246,0 9245:S9|72756e5f63616c6c35 9246:O3|@9369,69,@9247 9247:O4|@9245,-1,@9249,@9248 9248:O3|1,@2607,@9265 9249:O2|-1,@9250 9250:O2|-7,@9251 9251:O8|@9252,@9245,1,0,1,0,0,0 9252:O2|9,@9253 9253:O2|@9141,@9254 9254:O2|@9255,0 9255:O2|-7,@9256 9256:O8|@9258,@9257,2,0,1,0,0,0 9257:S12|72756e5f63616c6c35283129 9258:O4|4,@9259,@9148,0 9259:O2|@7961,@9260 9260:O2|@9180,@9261 9261:O2|@9206,@9262 9262:O2|@9234,@9263 9263:O2|@9264,0 9264:O3|6,@2532,4 9265:O3|1,@9267,@9266 9266:O3|3,@9524,79992 9267:O4|-2,1,@9268,0 9268:O2|@9186,@9269 9269:O2|@9187,@9270 9270:O2|@9213,@9271 9271:O2|@9242,@9272 9272:O2|@9273,0 9273:O2|53,@9236 9274:O2|@9276,@9275 9275:O2|@9277,0 9276:S14|52756e5f657863657074696f6e30 9277:O3|@9446,69,@9278 9278:O4|@9280,@9276,@9285,@9279 9279:O4|@9288,I48,0,0 9280:O3|I48,@9282,@9281 9281:O4|@9283,I48,0,0 9282:O3|1,@9526,@9525 9283:O3|0,@2647,@9284 9284:O10|0,0,0,0,0,0,0,0,@9097,0 9285:O2|-1,@9286 9286:O2|-7,@9287 9287:O8|@2532,@9276,0,0,1,0,0,0 9288:O3|0,@2647,@9289 9289:O10|0,@9290,0,0,0,0,0,0,0,0 9290:O2|@9113,@9291 9291:O2|@9292,0 9292:O3|@9369,69,@9293 9293:O4|@9113,0,@711,@206 9294:O2|@9296,0 9295:S11|6164644f7665726c6f6164 9296:O3|@9369,69,@9297 9297:O4|@9295,-1,@705,@9298 9298:O3|1,@9299,@8067 9299:O3|1,@9301,@9300 9300:O3|3,@9528,79992 9301:O3|3,@9527,79992 9302:O2|@3947,@9303 9303:O2|@9304,0 9304:O3|@9369,69,@3945 9305:O2|@3877,@9306 9306:O2|@9307,0 9307:O3|@9403,69,@3875 9308:O2|@3968,@9309 9309:O2|@9311,@9310 9310:O2|@9312,0 9311:O3|@9403,69,@3966 9312:O3|@9369,69,@3974 9313:O2|@3880,@9314 9314:O2|@9315,0 9315:O3|@9403,69,@3878 9316:O2|61,@9317 9317:O2|@9318,0 9318:O3|@9369,69,@9319 9319:O4|61,-1,@9321,@9320 9320:O3|1,@9322,@191 9321:O2|-2,-1 9322:O4|-2,1,@9323,0 9323:O2|@9325,@9324 9324:O2|@9327,0 9325:O2|49,@9326 9326:O3|3,@9529,79996 9327:O2|50,@9326 9328:O2|@3874,@9329 9329:O2|@9330,0 9330:O3|@9403,69,@3872 9331:O2|@3895,@9332 9332:O2|@9333,0 9333:O3|@9369,69,@3893 9334:O2|@7935,@9335 9335:O2|@9336,0 9336:O3|@9369,69,@7933 9337:O2|@2615,@9338 9338:O2|@9339,0 9339:O3|@9403,69,@2616 9340:O2|@200,@9341 9341:O2|@9342,0 9342:O3|@9403,69,@201 9343:O2|@9344,0 9344:O3|@9403,69,@2610 9345:C2,96|7f2802a663390002800d00187c1b004040a00010800d00207c0803a64e800021973bfffc3864000083180004801800007c0803a64e8000213b2300003c600000606346683b190000833b0000801800007c0903a67f2803a63b7b00044e800420|@9346,1048575|60,3,I48 9346:S20|4d414b455f28292e7368656c6c50726f63283229 9347:S6|69742d283129 9348:MO1|@16 9349:MO1|0 9350:MO1|@43 9351:MO1|0 9352:MO1|0 9353:MO1|@84 9354:MO1|1209 9355:MO1|1208 9356:MB4096|282a0a09436f707972696768742028632920323030362d372020446176696420432e204a2e204d617474686577730a0a0954686973206c696272617279206973206672656520736f6674776172653b20796f752063616e2072656469737472696275746520697420616e642f6f720a096d6f6469667920697420756e64657220746865207465726d73206f662074686520474e55204c65737365722047656e6572616c205075626c69630a094c6963656e7365206173207075626c697368656420627920746865204672656520536f66747761726520466f756e646174696f6e3b206569746865720a0976657273696f6e20322e31206f6620746865204c6963656e73652c206f722028617420796f7572206f7074696f6e2920616e79206c617465722076657273696f6e2e0a090a0954686973206c69627261727920697320646973747269627574656420696e2074686520686f706520746861742069742077696c6c2062652075736566756c2c0a0962757420574954484f555420414e592057415252414e54593b20776974686f7574206576656e2074686520696d706c6965642077617272616e7479206f660a094d45524348414e544142494c495459206f72204649544e45535320464f52204120504152544943554c415220505552504f53452e20205365652074686520474e550a094c65737365722047656e6572616c205075626c6963204c6963656e736520666f72206d6f72652064657461696c732e0a090a09596f752073686f756c642068617665207265636569766564206120636f7079206f662074686520474e55204c65737365722047656e6572616c205075626c69630a094c6963656e736520616c6f6e6720776974682074686973206c6962726172793b206966206e6f742c20777269746520746f20746865204672656520536f6674776172650a09466f756e646174696f6e2c20496e632e2c203531204672616e6b6c696e2053742c20466966746820466c6f6f722c20426f73746f6e2c204d41202030323131302d3133303120205553410a2a290a0a282a20436f6d70696c65722074686520636f6d70696c657220616e64206578706f7274206974206173206120706f727461626c652066696c652e20205468652072657374206f66207468650a202020626f6f7473747261702070726f63657373206973207468656e20646f6e65207768656e2074686520706f727461626c652066696c6520697320696d706f727465642e202a290a0a506f6c794d4c2e7072696e745f646570746820303b0a0a506f6c794d4c2e6d616b6520226d6c736f757263652f4d4c436f6d70696c65722f426f6f74223b0a506f6c794d4c2e6d616b6520226d6c736f757263652f4d4c436f6d70696c6572223b0a0a506f6c794d4c2e7368617265436f6d6d6f6e44617461204d4c436f6d70696c65722e7368656c6c3b0a0a506f6c794d4c2e6578706f7274506f727461626c652822706f6c7974656d70222c0a20202020666e202829203d3e20284d4c436f6d70696c65722e7368656c6c28293b204f532e50726f636573732e65786974204f532e50726f636573732e73756363657373292068616e646c65205f203d3e204f532e50726f636573732e65786974204f532e50726f636573732e6661696c757265293b0a20202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020 9357:MO1|@94 9358:MO1|1 9359:MO1|0 9360:MO1|0 9361:MO1|-1 9362:MB4096|23206561746564207369676e6174757265204d4c436f6d70696c65720a73696f6e0a790a730a0a6d706f72740a20202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020 9363:MO1|0 9364:MO1|0 9365:MO1|@9368 9366:MO1|@177 9367:MO1|38 9368:MO81|80,0,0,0,0,0,0,0,@184,0,@2581,@2586,@2589,0,@2597,@2618,0,0,0,@2630,@2636,0,@2639,0,0,0,@8137,@8143,0,0,0,0,0,0,@8146,0,@8159,0,0,0,0,@8162,@8165,@8169,@8172,@8176,@8180,@8184,@9051,0,0,0,0,@9055,@9060,@9068,@9072,@9076,@9302,@9305,@9308,@9313,@9316,@9328,0,@9331,0,0,0,0,0,0,0,0,0,0,0,@9334,@9337,@9340,@183 9369:MO1|0 9370:MO1|@197 9371:MO1|@204 9372:MO1|@125 9373:MO1|0 9374:MO1|0 9375:MO1|0 9376:MO1|0 9377:MO1|0 9378:MO1|0 9379:MO1|0 9380:MO1|0 9381:MO1|0 9382:MO1|0 9383:MO1|0 9384:MO1|0 9385:MO1|0 9386:MO1|0 9387:MO1|0 9388:MO1|0 9389:MO1|0 9390:MO1|0 9391:MO1|0 9392:MO1|0 9393:MO1|0 9394:MO1|0 9395:MO1|0 9396:MO1|0 9397:MO1|0 9398:MO1|0 9399:MO1|0 9400:MO1|0 9401:MO1|0 9402:MO1|0 9403:MO1|0 9404:MO1|0 9405:MO1|0 9406:MO1|0 9407:MO1|@206 9408:MO1|0 9409:MO1|@9412 9410:MO1|@2647 9411:MO1|7 9412:MO11|10,0,@2650,0,@2657,@8041,@8053,0,@8069,@8077,@2649 9413:MO1|@206 9414:MO1|@9417 9415:MO1|@2745 9416:MO1|49 9417:MO273|272,0,0,@2747,@2749,0,0,0,0,0,@2751,0,0,@2753,0,0,0,0,0,0,@2755,0,0,@2757,0,0,0,0,@2759,0,0,0,0,0,0,0,@2761,0,0,0,0,0,0,@2762,0,0,0,0,0,0,0,@2763,0,0,@2765,@2767,@2769,@2770,@2772,@2773,@2775,@2777,@2778,0,@2780,0,0,@2782,0,0,0,0,0,@2784,0,0,0,@2786,0,0,@2788,0,0,0,0,0,0,@2790,0,0,0,0,0,@2792,0,0,0,@2794,0,0,0,0,0,@2796,0,@2798,@2800,0,0,@2802,0,0,0,@2804,0,0,0,0,0,0,0,0,0,0,0,@2806,0,0,0,0,0,0,0,0,0,0,0,0,0,0,@2807,0,0,0,@2809,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,@2811,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,@2813,0,0,@2815,0,0,0,0,0,0,0,0,0,0,0,0,0,0,@2817,0,0,0,@2819,0,@2821,0,0,0,0,0,0,0,0,0,0,@2823,0,0,@2825,0,0,0,0,0,0,0,0,@2827,0,0,0,0,0,0,0,0,0,0,@2829,0,0,0,0,@2831,0,0,0,0,0,@2833,0,@2835,0,0,0,0,0,0,0,@2746,0,0,0,0,0,0,0 9418:MO1|0 9419:MO1|0 9420:MO1|32 9421:MO1|I48 9422:MO1|57 9423:MO1|0 9424:MO1|68 9425:MO1|0 9426:MO1|0 9427:MO1|0 9428:MO1|0 9429:MO1|@206 9430:MO1|@3890 9431:MO1|0 9432:MO1|0 9433:MO1|0 9434:MO1|0 9435:MO1|0 9436:MO1|0 9437:MO1|0 9438:MO1|@206 9439:MO1|@3972 9440:MO1|0 9441:MO1|0 9442:MO1|0 9443:MO1|0 9444:MO1|@206 9445:MO1|0 9446:MO1|0 9447:MO1|0 9448:MO1|0 9449:MO1|0 9450:MO1|0 9451:MO1|0 9452:MO1|0 9453:MO1|0 9454:MO1|@197 9455:MO1|@7779 9456:MO1|@2596 9457:MO1|0 9458:MO1|@2596 9459:MO1|0 9460:MO1|@2596 9461:MO1|0 9462:MO1|@2596 9463:MO1|0 9464:MO1|@2596 9465:MO1|0 9466:MO1|@2596 9467:MO1|0 9468:MO1|@206 9469:MO1|@7908 9470:MO1|0 9471:MO1|0 9472:MO1|0 9473:MO1|0 9474:MO1|0 9475:MO1|0 9476:MO1|0 9477:MO1|0 9478:MO1|@2596 9479:MO1|0 9480:MO1|@206 9481:MO1|@206 9482:MO1|@206 9483:MO1|@206 9484:MO1|@206 9485:MO1|@9488 9486:MO1|@2647 9487:MO1|7 9488:MO11|10,@8117,@8120,@8123,0,0,0,@8126,@8129,@8132,@8116 9489:MO1|@206 9490:MO1|@9493 9491:MO1|@177 9492:MO1|38 9493:MO81|80,@8192,@8573,@8590,0,@8606,0,0,@8615,@8624,@8631,0,0,@8638,0,0,@8645,0,@8652,0,0,@8669,0,@8676,@8693,@8700,@8707,@8728,@8735,@8761,@8783,0,@8793,0,@8820,0,0,@8827,0,0,0,0,0,0,@8840,0,0,0,@8849,@8856,@8863,@8872,@8896,@8903,0,0,0,0,@8910,@8917,@8924,@8942,@8961,0,0,0,0,@8975,@9024,0,0,0,0,@9038,0,0,0,0,0,0,@8191 9494:MO1|0 9495:MO1|@206 9496:MO1|@2596 9497:MO1|0 9498:MO1|@9501 9499:MO1|@2647 9500:MO1|1 9501:MO11|10,0,0,0,0,0,0,0,0,@8834,0 9502:MO1|@9505 9503:MO1|@2647 9504:MO1|5 9505:MO11|10,0,0,@8983,0,@8986,@8998,@9010,0,0,@8982 9506:MO1|@206 9507:MO1|@206 9508:MO1|@206 9509:MO1|@206 9510:MO1|0 9511:MO1|@9514 9512:MO1|@9083 9513:MO1|10 9514:MO21|20,0,0,@9085,0,0,0,0,@9118,0,@9129,@9151,@9163,@9188,@9214,@9243,@9274,0,0,0,@9084 9515:MO1|0 9516:MO1|0 9517:MO1|@206 9518:MO1|@206 9519:MO1|@206 9520:MO1|@206 9521:MO1|@206 9522:MO1|@206 9523:MO1|@206 9524:MO1|@206 9525:MO1|0 9526:MO1|0 9527:MO1|@206 9528:MO1|@206 9529:MO1|@206 0:MVO1|1 1:MVO1|0 2:MVO1|1 3:MVO1|1 4:MVO1|1 5:MVO1|1 6:MVO1|1 7:MVO1|1 8:MVO1|1 polyml.5.2.1/imports/polymlsparc.txt0000644000175000017500000717407511020712153016614 0ustar daviddavidObjects 7489 Root 182 182:O3|@184,@0,@183 183:O1|@343 184:C2,292|9e13e002f606201880a1001b8bd02018d0036004c4022000de213ffcfa036008fa213ff8901000021b3f00009a03615cf40360009fc6a00088013ff890102001da012000f40360009fc6a00001000000c6213ffc2f3f0000ae05e0b6ee213ff8ac102001ec213ff486013ff4921020019010204d1b0000879a036098f40360009fc6a00088013ff4aa100008c60120081080000ec6213ffc901020011b0000829a0361f8f40360009fc6a00001000000aa100008d0213ffcd0213ff8d0213ff488013ff4c6213ffc293f0000a805211ee8213ff8a6102001e6213ff486013ff4901020019a100015f40360009fc6a00088013ff4c60120081080000788012018d0213ffcd0213ff8d0213ff488013ff488012018f606201880a1001b8bd0201830bfffcc|@188,131071|40,4,@185 84,4,$184+154 116,4,I150 156,4,I1 200,4,$184+258 185:O1|@186 186:C2,140|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffc9010200181c3e00601000000fa022000fa213ff8d00220047ffffff388013ff8c6213ffc053f00008400a1e2c4213ff8ae102001ee213ff486013ff490102001da012000f40360009fc6a00088013ff4c6012008ec01201081c5a0068801201490102001ea01200481c5600688012008|@187,131071|64,4,$186+126 187:S20|506f6c794d4c2e72756e4f6e456e747279283129 188:S24|506f6c794d4c2e72756e46756e6374696f6e283129283129 189:O2|@191,@190 190:O2|@214,@213 191:O1|@192 192:C2,156|9e13e002f606201880a1001b8bd02018d0213ffcd0213ff8a610000f96013ff89410200192102001901020014000002388013ff8de0120049a1bfffc960b6009d40120009212800b8c21a00c8b19600cba10200290100006fa21bffcd2222004053f00018400a120c4222000e6213ffc921000089010201d1b0000849a0362f8f40360009fc6a00088013ffc90102001ee01200081c5e0068801200c|@212,131071|44,5,@193 96,4,@198 120,4,I73 193:C2,340|9e13e002f606201880a1001b8bd0201880a2200132800007c4022000d222e000d422e0049010200181c3e00601000000ee00a00080a5e00132800027ea00a004ec00a00480a5a00532800014aa0aa005aa126005920aa00580a260012280000a9212a005de213ffc113f000190022090f40620209fc6a00088013ffc901020019212a0059410000992100015d002200410bfffdef606201880a560012280000aaa12a005de213ffc113f000190022090f40620209fc6a00088013ffc90102001aa12a00594100015d002200410bfffcff606201880a560053280000580a57ff9ac1020011080000ba81580093280000580a56001ac10200910800006a815800932800003ac102019ac102011a8158009920aa01980a260012280000aac12a019de213ffc113f000190022090f40620209fc6a00088013ffc90102001ac12a0199410001692100014d002200410bfffaff6062018|@197,127119|104,4,@194 168,4,@194 292,4,@194 194:O3|12,@196,@195 195:S53|5468652073616d65206174747269627574652061707065617273206d6f7265207468616e206f6e636520696e20746865206c697374 196:S6|546872656164 197:S38|5468726561642e5468726561642e6174747273546f576f7264283129636f6e76657274283429 198:O1|@199 199:C2,388|9e13e002f606201880a1001b8bd02018de213ffc92102001901020051b0000849a036198f40360009fc6a00088013ffc808a20013280001901000000c6213ffc053f00018400a1aac4213ff8ae102001ee213ff486013ff4ec022000ea022004901000159a100016f40360009fc6a00088013ff4c60120081080004090102001d0213ffcd0213ff8d0213ff488013ff41080003a90102001053fbd408400a004ee00a00080a5e00532800012d0213ffc113fbd40900220041b0000849a0362b8f40360009fc6a0000100000080a2200132800008d0213ffc9210200590102001400000300100000010800020d0213ffcd0213ff896013ff89410200192102001901020017fffff3d88013ff8ec012004aa1dbffca80d6009e6012000a414c0148c21a00c8b19600cba102002a2100006fa21bffce4246004213f0003a0042084e0246000921000119010201d1b0000849a0362f8f40360009fc6a0000100000088012008d0213ffcd0213ff8d0213ff488013ff490102001de01200c10bfffa288012010|@211,131071|28,4,I62 64,4,$199+130 152,4,@7480 176,4,@7480 184,4,I71 224,5,@200 260,5,@193 312,4,@208 332,4,I73 200:C2,380|9e13e002f606201880a1001b8bd0201880a2600122800004de213ffc10800036de213ffc88013ffc9e102001133fbd4092026004d002600080a2200532800005010000008410200110800013010000000500004e8400a081b820a001ba23e001811f401c32800005b823e001841020011080000901000000b9172004920720019e100009f606201880a1001b8bd0201830bfffe7113fbd40900220041b0000849a0362b8f40360009fc6a0000100000080a2200132800004010000001080000f01000000133fbd4092026004901020051b0000849a0362f8f40360009fc6a00001000000f606201880a1001b8bd0201830bfffce88013ffc133f000292026060113f0002900221084000005101000000113fbd40900220041b0000849a036298f40360009fc6a0000100000080a22005328000060100000090102001c401200081c0a00688012004053fbd408400a004ae102005ee20a000133fbd409202600490102009de0120001b0000849a0362f8f403600081c6a00488012004|@207,131071|44,4,@7480 80,4,20000 148,4,@7480 156,4,I71 196,4,@7480 208,4,I73 248,4,@201 256,4,@204 264,5,@205 272,4,@7480 280,4,I70 328,4,@7480 344,4,@7480 360,4,I73 201:O1|@202 202:C2,92|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffc9010200181c3e00601000000fa022004fa213ff8d2022000901020111b0000849a0362f8f40360009fc6a00088013ff8d0012000de01200410bfffec88012008|@203,131071|56,4,I73 203:S30|5468726561642e436f6e646974696f6e5661722e77616b65416c6c283129 204:O2|@7482,@7481 205:C2,760|9e13e002f606201880a1001b8bd020188410000fee022000ec0220041b0000849a0362d8f40360009fc6a00001000000de0220049a0be01980a360013280000580a36009981020051080000b80a320053280000580a3601198103ff91080000680a320053280000398103ffd9810200180a32005328000049610000c10800013c4213ffc1b0000849a0362d8f40360009fc6a00001000000941000081b0000849a0362d8f40360009fc6a00001000000de0220049a0bffe598136009d822a0049810000bc4213ffcd2213ff8ee213ff4ec213ff0d8213fec88013fec96102001d4012008d202a00080a26005328000050100000090102001108000139010000a1100004e90022081b8222001ba22e001811f401c32800005b822e00190102001108000099010000ab91720048407200196100002f606201880a1001b8bd0201830bfffe81b0000849a0362b8f40360009fc6a0000100000080a22001328000049210000a1080000cc4012004901020051b0000849a0362f8f40360009fc6a00001000000f606201880a1001b8bd0201830bfffd3d000a000da01200cf40360009fc6a00001000000ee012004d025e000d00120081b0000849a036298f40360009fc6a0000100000080a2200532800004ec0120081080000b01000000aa102005ea25a00092100016901020091b0000849a0362f8f40360009fc6a000010000001b0000849a0362d8f40360009fc6a00001000000e601200080a4e0053280000580a4fff9a81020011080000ba41000083280000580a4e001a810200910800006a410000832800003a8102019a8102011a41000081b0000849a0362d8f40360009fc6a00001000000e2022004a00c7fe59e150010de24a00480a4e0013280000480a4fffd1080000601000000228000040100000010800016901020011b0000849a0362d8f40360009fc6a00001000000c202200c80a060012280000a90102001921020019010202dde0120101b0000849a0362f8f403600081c6a00488012014da01201081c3600688012014c201201081c0600688012014|@206,131071|28,4,I72 132,4,I72 156,4,I72 256,4,20000 324,4,I71 368,4,I73 436,4,I70 492,4,I73 512,4,I72 596,4,I72 668,4,I72 716,4,I73 206:S40|5468726561642e436f6e646974696f6e5661722e7369676e616c4f7242726f616463617374283229 207:S35|5369676e616c2e73696754687265616428312962726f6164436173745765616b283229 208:O1|@209 209:C2,36|9e13e002f606201880a1001b8bd0201892102001353f0001b406a2c881c6a00401000000|@210,131071|20,4,@200 210:S38|5369676e616c2e73696754687265616428312962726f6164436173745765616b283129283129 211:S19|5369676e616c2e736967546872656164283129 212:S20|5369676e616c2e666f726b546872656164283129 213:O2|@331,@330 214:O4|@215,@319,@218,@1 215:C2,164|9e13e002d003600cc4022000de213ffcda213ff888013ff880a0a00132800004de00a0001080000ade012000da03e00490102001d0236000c400a004f606201880a1001b8bd0201830bffff41b3ee0009a036014d00360008c21a00c8b19600cba10200284100006fa21bffcd020a004da03e008da20a000113ee00090022014c4222000d203e00490102049de0120041b0000879a036098f403600081c6a00488012008|@318,131071|76,4,@2 120,4,@2 144,4,I150 216:O2|@218,@217 217:O2|@245,@244 218:O2|@219,@1 219:C2,216|9e13e002f606201880a1001b8bd02018c4036004ee00a000de213ffcda213ff8d0213ff4ee213ff088013ff080a5e00132800004de05e0001080001090102001fa05e004fa213ffcd403e010133f00039202632c9010000f4000019388013ffcee01200088012004f606201880a1001b8bd0201830bfffeeda012004f40360009fc6a00001000000ec012008ea05a004e8012000e8256000e605600080a4e00132800006e404e00090102001e401200c81c4a00688012010e204a004a0102001e0246000e604e004f606201880a1001b8bd0201830bffff2|@243,131071|76,4,@220 88,5,@235 220:O1|@221 221:C2,256|9e13e002f606201880a1001b8bd02018c4022004ee00a000ec02200880a5e00132800005ea05a01c9010200181c3e00601000000808d600132800013de213ffcee213ffcfa05a000fa213ff8fa022000fa213ff4fa056000fa213ff0a8102001e820a000de213fec901020019a013ffc4000002b88013fece601200081c4e006880120148c21a01088013ffc8b196010ba102003a8100006fa21bffc273f0005a604e040e6252008253f0005a404a08ce4252004e205a000e22520008c21a0108b196010ba102003a0100006fa21bffce8242008033f000582006050c22420041b3ee0009a03601cda24200090100010f40620209fc6a0000100000090102001|@234,131071|112,5,@222 156,4,@229 168,4,@232 212,4,@230 224,4,@3 222:C2,420|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d0213ff4c6213ff0053f00048400a0f2c4213fecae102001ee213fe886013fe8ea036000b8222001ba25600188013fe8b91f401ca80720018c21a0088b196008ba102001a6100006fa21bffce824e000e4037ff49410001392100008d0037ff840000052010000009a100012f40360009fc6a00001000000ac100008c60120081080002ee201200ce2012004de022000033ee0008200601c80a3c0013280000580a3e005a01000081080001f90100010328000068c21a010213f0005a004201c10800019901000108b196010ba1020039a100006fa21bffc193f000598032040d8236008d0236004d6047ffcd62360008c21a0108b196010ba102003a0100006fa21bffcda242008153f00059402a050d4242004133ee0009202601cd224200090100010f40620209fc6a00001000000ac102001e201200cb8246001ba25a001b917401ca0072001de012010c203e000ba206001811f001d32800006b824600190102001da01201481c3600688012018ba25a001b917401c900720019a10000fde01201410bfff9a88012018|@231,131071|32,4,$222+162 120,5,@223 168,4,@3 208,4,@227 240,4,@229 288,4,@230 300,4,@3 223:C2,420|9e13e00280a2a0013280002c808a6001808a600122800009de213ffcb8226001811f200026800005de213ffc841000091080000bd402200084100008113f0004900223d0f40620209fc6a00088013ffc9410000284102001d402200080a0800a3880000fde213ffcb820a0019222801c8c21a0108b196010ba102003ae100006fa21bffcd025e008d225e004c425e0009010001781c3e00601000000113f0004900223d0f40620209fc6a00088013ffc90102001808a600122800009de213ffcb8226001811f200026800005de213ffc841000091080000bee02a00084100008113f0004900223d0f40620209fc6a00088013ffcae10000284102001ee02a000808de00122800009de213ffcb825e001811f200026800005de213ffcac1000171080000bb825a001ac100008113f0004900223d0f40620209fc6a00088013ffc92100016ac102001b825a0019200801cea02200080a240153880000dde213ffc8c21a0108b196010ba10200392100006fa21bffcd0226008ec226004c42260009010000981c3e00601000000113f0004900223d0f40620209fc6a00088013ffc90102001|@226,123015|60,4,@224 156,4,@224 224,4,@224 300,4,@224 396,4,@224 224:O3|11,@225,0 225:S9|537562736372697074 226:S32|566563746f72536c6963654f7065726174696f6e7328292e736c696365283329 227:O3|1,@228,0 228:S9|496e74657272757074 229:S8|666c7573684f7574 230:S2|496f 231:S40|426173696353747265616d494f28292e666c7573684f757427283129666c75736842756666283129 232:O3|@4,@233,0 233:S20|426c6f636b696e674e6f74537570706f72746564 234:S28|426173696353747265616d494f28292e666c7573684f757427283129 235:C2,800|9e13e002f606201880a1001b8bd02018ae10000fac10000890102001400000c801000000ee213ffcec213ff8d2213ff4d4213ff0d0213fec88013fec80a2200132800005de022000aa10200110800012808d6001da03e00080a37ffd3280000ad00220048c21a0088b196008ba102001aa100006fa21bffcde25600010800006808d6001f606201880a1001b8bd0201830bfffeb3280001c01000000d6056000d402e00080a2bffd3280001001000000d202e00480a260053280000501000000981020011080001501000000113f000690022160400000f201000000981000081080000e01000000113f000690022160400000eb01000000981000081080000701000000113f000690022160400000e40100000098100008113f000690022160400000df0100000098102001d6012004d402e00080a2a005328000050100000092102001108000139010000b1300004e92026081b8226001ba232001811f401c32800005b823200192102001108000099010000bb91720049007200198100008f606201880a1001b8bd0201830bfffe81b0000849a0362b8f40360009fc6a0000100000080a22001328000059210000b841020011080000cc6213ffc901020051b0000849a0362f8f40360009fc6a00001000000f606201880a1001b8bd0201830bfffd22f3f0005ae05e2feee213ff8ac102001ec213ff486013ff4d001200cda012008f40360009fc6a00088013ff4aa100008c601200810800024d0012010a8100008d00120041b0000849a036298f40360009fc6a0000100000080a2200532800004e60120041080000ee8213ffca4102005e424e000e8213ffc92100013901020091b0000849a0362f8f40360009fc6a00088013ffc10800004d001200488013ffcd00120044000008501000000d0012000f40620209fc6a00001000000aa102001d00120101b0000849a036298f40360009fc6a0000100000080a2200532800004e80120101080000eea213ffca6102005e6252000ea213ffc92100014901020091b0000849a0362f8f40360009fc6a00088013ffc10800004d001201088013ffcd00120104000006501000000d0012000e801202081c5200688012024|@242,131071|28,5,@236 204,4,@238 212,5,@240 232,4,@238 240,5,@240 260,4,@238 268,5,@240 280,4,@238 288,5,@240 332,4,20000 400,4,I71 448,4,I73 484,4,$235+546 552,4,I70 612,4,I73 648,5,@240 680,4,I70 740,4,I73 776,5,@240 236:C2,260|9e13e002f606201880a1001b8bd020188410000f1b0000849a0362d8f40360009fc6a00001000000de0220049a0be00580a360053280000398102001981020058c21a00c8b19600cba10200290100006fa21bffcd82220049a102001da222000980be01980a320013280000580a32009961020051080000b8c21a00c3280000580a3201196103ff9108000068c21a00c3280000396103ffd961020018c21a00c8b19600cba1020029e100006fa21bffcd623e0049a103ffdda23e0008c21a00c8b19600cba10200298100006fa21bffc96102001d6232004de2320009e1000088c21a00c8b19600cba10200290100006fa21bffcd8222004de22200081c0a00601000000|@237,65721|20,4,I72 237:S30|5468726561642e5468726561642e67657441747472696275746573283129 238:O2|@239,0 239:O2|-1,-2 240:C2,236|9e13e002f606201880a1001b8bd020188410000fae1000081b0000849a0362d8f40360009fc6a00001000000de022004d0213ffcd0213ff898100002a610000f96013ff89410200192102001901000177ffffa5688013ff89610000c1b0000849a0362d8f40360009fc6a00001000000d4012004921abffc840a4013ee012000ac15c002ec222004aa0de01180a5601132800015901020011b0000849a0362d8f40360009fc6a00001000000e802200c80a520012280000a90102001921020019010202d9e10000b1b0000849a0362f8f403600081c6a0048801200881c2e0068801200881c2e00688012008|@241,131071|24,4,I72 80,5,@193 92,4,I72 152,4,I72 200,4,I73 241:S30|5468726561642e5468726561642e73657441747472696275746573283129 242:S26|426173696353747265616d494f28292e70726f74656374283329 243:S27|426173696353747265616d494f28292e646f4f6e4c6f6164283129 244:O2|@262,@261 245:O2|@246,@5 246:C2,272|9e13e002f606201880a1001b8bd02018c4036004ee00a000ec05e00080a5a00132800037aa100008ea05e004e8056000e6052000e4056010e204a000b824e001ba246001b91f401ca00720018c21a0088b196008ba10200182100006fa21bffce02060009810000f96100008e005600c9410000192100013901000104000002c01000000d8213ffcd6213ff8e8213ff4e6213ff0e4213fece2213fe8e0213fe44000009388013fe4d0213ffc90102001da012014f40360009fc6a00088013ffcd4012000d2012004d00120104000011301000000de012014c2012010c223e000da01200cd8012008d823600090102001d601201c81c2e00688012020901020019a100015f403600081c6a00401000000|@256,131071|124,5,@247 160,5,@248 204,5,@254 247:C2,420|9e13e00280a2a0013280002c808a6001808a600122800009de213ffcb8226001811f200026800005de213ffc841000091080000bd402200084100008113f0004900223d0f40620209fc6a00088013ffc9410000284102001d402200080a0800a3880000fde213ffcb820a0019222801c8c21a0108b196010ba102003ae100006fa21bffcd025e008d225e004c425e0009010001781c3e00601000000113f0004900223d0f40620209fc6a00088013ffc90102001808a600122800009de213ffcb8226001811f200026800005de213ffc841000091080000bee02a00084100008113f0004900223d0f40620209fc6a00088013ffcae10000284102001ee02a000808de00122800009de213ffcb825e001811f200026800005de213ffcac1000171080000bb825a001ac100008113f0004900223d0f40620209fc6a00088013ffc92100016ac102001b825a0019200801cea02200080a240153880000dde213ffc8c21a0108b196010ba10200392100006fa21bffcd0226008ec226004c42260009010000981c3e00601000000113f0004900223d0f40620209fc6a00088013ffc90102001|@226,123015|60,4,@224 156,4,@224 224,4,@224 300,4,@224 396,4,@224 248:C2,360|9e13e002f606201880a1001b8bd02018d0213ffcd0213ff8d0213ff4aa10000f92013ff44000005888013ff4de012000da01200880a360013280000680a3600511000083900223d881c560068801200c3280000b92836020d203e004d0012004bb3a2002fa0a401db92f6002840720019010000281c560068801200c90a26004ea213ffcfa03e004fa213ff8921020111b0000899a0363f8f40360009fc6a00088013ff8c6213ffc053f00078400a2e2c4213ff8ae102001ee213ff486013ff494102001921021051b0000829a036338f40360009fc6a00088013ff4ac100008c601200810800009ea01201c113f0007900223e4f40620209fc6a00001000000ac102001ea01201cbb3d6002fa25a000ec213ffce8213ff8ea213ff49610201194100016d2012018d001200c1b0000889a036298f40360009fc6a00088013ff4d00120041b0000839a0363b8f40360009fc6a00001000000d0012004e601201881c4e00688012028|@253,131071|36,5,@249 64,4,I48 144,4,I241 168,4,$248+238 200,4,I11 236,4,@251 300,4,I198 324,4,I47 249:C2,40|9e13e002c4022008c4226000ee022000ee226004ec022004ec2260089010200181c3e00601000000|@250,114819| 250:S31|566563746f72536c6963654f7065726174696f6e7328292e62617365283229 251:O3|4,@252,0 252:S4|53697a65 253:S24|436861724172726179536c6963652e766563746f72283129 254:C2,224|9e13e002808aa00132800004b8102004f802a000b92f200284072001808a200122800009de213ffcb8222001811f200026800005de213ffcae10000810800009b820a001113f0004900223d0f40620209fc6a00088013ffcae102001b820a0019005c01cec02600080a200162880000a808aa001de213ffc113f0004900223d0f40620209fc6a00088013ffc90102001808aa00122800009c4213ffcd0026004bb32a002b93de002fa2a001c9010200181c3e0060100000096100017aa10000ad402600492102011901000151b0000889a036298f403600081c6a00488013ffc|@255,131071|68,4,@224 120,4,@224 204,4,I198 255:S20|4368617241727261792e636f7079566563283329 256:S16|54657874494f2e6f6e4c6f6164283129 257:O2|0,@258 258:O5|@7,@259,I148,@260,@6 259:S5|737464496e 260:O2|4096,@8 261:O2|@218,@316 262:O2|@263,@9 263:C2,216|9e13e002f606201880a1001b8bd02018c4036004ee00a000de213ffcda213ff8d0213ff4ee213ff088013ff080a5e00132800004de05e0001080001090102001fa05e004fa213ffcd403e010133f00089202629c9010000f7ffffcb788013ffcee01200088012004f606201880a1001b8bd0201830bfffeeda012004f40360009fc6a00001000000ec012008ea05a004e8012000e8256000e605600080a4e00132800006e404e00090102001e401200c81c4a00688012010e204a004a0102001e0246000e604e004f606201880a1001b8bd0201830bffff2|@243,131071|76,4,@264 88,5,@235 264:O1|@265 265:C2,256|9e13e002f606201880a1001b8bd02018c4022004ee00a000ec02200880a5e00132800005ea05a01c9010200181c3e00601000000808d600132800013de213ffcee213ffcfa05a000fa213ff8fa022000fa213ff4fa056000fa213ff0a8102001e820a000de213fec901020019a013ffc4000002b88013fece601200081c4e006880120148c21a01088013ffc8b196010ba102003a8100006fa21bffc273f0005a604e040e6252008253f0005a404a08ce4252004e205a000e22520008c21a0108b196010ba102003a0100006fa21bffce8242008033f000582006050c22420041b3ee0009a03601cda24200090100010f40620209fc6a0000100000090102001|@234,131071|112,5,@266 156,4,@229 168,4,@232 212,4,@230 224,4,@3 266:C2,420|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d0213ff4c6213ff0053f00098400a062c4213fecae102001ee213fe886013fe8ea036000b8222001ba25600188013fe8b91f401ca80720018c21a0088b196008ba102001a6100006fa21bffce824e000e4037ff49410001392100008d0037ff87ffffdff010000009a100012f40360009fc6a00001000000ac100008c60120081080002ee201200ce2012004de022000033ee0008200601c80a3c0013280000580a3e005a01000081080001f90100010328000068c21a010213f0005a004201c10800019901000108b196010ba1020039a100006fa21bffc193f000598032040d8236008d0236004d6047ffcd62360008c21a0108b196010ba102003a0100006fa21bffcda242008153f00059402a050d4242004133ee0009202601cd224200090100010f40620209fc6a00001000000ac102001e201200cb8246001ba25a001b917401ca0072001de012010c203e000ba206001811f001d32800006b824600190102001da01201481c3600688012018ba25a001b917401c900720019a10000fde01201410bfff9a88012018|@231,131071|32,4,$266+162 120,5,@247 168,4,@3 208,4,@227 240,4,@229 288,4,@230 300,4,@3 267:O2|@269,@268 268:O2|@298,0 269:O6|@260,@11,@270,@12,@7483,@10 270:O14|@272,@273,@277,0,0,@279,0,@280,@284,@288,4096,0,@291,@271 271:O1|@295 272:S6|737464457272 273:O1|@274 274:O2|@275,I202 275:C2,36|9e13e00294102001d2036004901020751b0000849a036178f403600081c6a00401000000|@276,131071|16,4,I61 276:S50|4c696272617279494f537570706f72742e777261704f757446696c654465736372283529746578745072696d57722d283129 277:O2|@278,I202 278:C2,36|9e13e00294102001d20360049010201d1b0000849a036178f403600081c6a00401000000|@276,131071|16,4,I61 279:O1|I202 280:O1|@281 281:O2|@282,I202 282:C2,260|9e13e002f606201880a1001b8bd02018d0213ffcd0213ff8d0213ff4aa10000fa810000d92013ff47ffffe1488013ff4de012000da012004808b600122800009ea213ffcb8236001811f200026800005ea213ffc9810000d10800009d2012008113f0004900223d0f40620209fc6a00088013ffc98102001d2012008808a600122800009ea213ffcb8226001811f200026800005ea213ffc90100009108000098c21a010113f0004900223d0f40620209fc6a00088013ffc901020018c21a0108b196010ba10200384100006fa21bffcd020a008d820a004ee03e004ee20a00094100002d20520049010202d9e1000151b0000849a036178f403600081c6a0048801200c|@283,131071|40,5,@249 96,4,@224 164,4,@224 240,4,I61 283:S49|4c696272617279494f537570706f72742e777261704f757446696c65446573637228352977726974654172726179283129 284:O1|@285 285:O2|@286,I202 286:C2,260|9e13e002f606201880a1001b8bd02018d0213ffcd0213ff8d0213ff4aa10000fa810000d92013ff47ffffdb888013ff4de012004808be00122800009ea213ffcb823e001811f200026800005ea213ffc8210000f10800009da012008113f0004900223d0f40620209fc6a00088013ffc82102001da012008808b600122800009ea213ffcb8236001811f200026800005ea213ffc9810000d1080000992806010113f0004900223d0f40620209fc6a00088013ffc98102001928060108c21a0108b196010ba10200390100006fa21bffcd8222008d2222004c4012000c422200094100008d20520049010202d9e1000151b0000849a036178f403600081c6a0048801200c|@287,131071|40,5,@249 92,4,@224 160,4,@224 240,4,I61 287:S50|4c696272617279494f537570706f72742e777261704f757446696c6544657363722835297772697465566563746f72283129 288:O1|@289 289:O2|@290,I202 290:C2,96|9e13e002f606201880a1001b8bd02018de213ffc94102001d2036004901020711b0000849a036178f40360009fc6a00088013ffcb8222001811f2000248000069010200190102005c401200081c0a00688012004c401200081c0a00688012004|@276,131071|32,4,I61 291:O1|@292 292:O3|@293,@281,@289 293:C2,136|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d0213ff490102001da036008f40360009fc6a00088013ff480a220012280001290102001c4012004d0012000da00a004f40360009fc6a00001000000ae1000088c21a0088b196008ba10200190100006fa21bffcee222000ec01200881c5a0068801200cc401200881c0a0068801200c|@294,131071| 294:S40|5072696d494f28292e6175676d656e7457726974657228312977726974654172724e42272d283129 295:O3|@296,@285,@289 296:C2,136|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d0213ff490102001da036008f40360009fc6a00088013ff480a220012280001290102001c4012004d0012000da00a004f40360009fc6a00001000000ae1000088c21a0088b196008ba10200190100006fa21bffcee222000ec01200881c5a0068801200cc401200881c0a0068801200c|@297,131071| 297:S40|5072696d494f28292e6175676d656e7457726974657228312977726974655665634e42272d283129 298:O6|@299,@15,@300,@16,@7484,@13 299:O2|4096,@14 300:O14|@302,@303,@305,0,0,@306,0,@307,@309,@311,4096,0,@313,@301 301:O1|@315 302:S6|7374644f7574 303:O1|@304 304:O2|@275,I149 305:O2|@278,I149 306:O1|I149 307:O1|@308 308:O2|@282,I149 309:O1|@310 310:O2|@286,I149 311:O1|@312 312:O2|@290,I149 313:O1|@314 314:O3|@293,@308,@312 315:O3|@296,@310,@312 316:O2|@245,@317 317:O2|@262,0 318:S28|426173696353747265616d494f28292e646f4f6e456e747279283129 319:O3|@321,@320,@1 320:O2|@324,@323 321:C2,192|9e13e002f606201880a1001b8bd02018d0036008c4022000de213ffcda213ff8ae10200188013ff880a0a00132800006fa00a00490100017de01200481c3e00688012008fa213ffcc6213ff82d3f000bac05a21eec213ff4aa102001ea213ff086013ff0e6012000e400a000d404a010d204e004901000127ffff9b688013ff0a8100008c601200810800008ae100014a8102001d0213ffcd0213ff8d0213ff488013ff4ae100014c401200c88012010f606201880a1001b8bd0201830bfffdb|@322,131071|76,4,$321+146 120,5,@235 322:S27|426173696353747265616d494f28292e636c6f7365416c6c283129 323:O3|@326,@7485,@1 324:C2,72|9e13e002f606201880a1001b8bd02018c4022008de213ffcfa00a008fa213ff8da036004f40360009fc6a00088013ff890102001da012000de012004f403600081c6a00488012008|@325,131071| 325:S28|426173696353747265616d494f28292e636c6f73654f757427283129 326:C2,404|9e13e002f606201880a1001b8bd02018c402200cee00a00080a5e00532800005ae1020059010200181c3e00601000000ee20a000de213ffcda213ff8d0213ff4c4213ff0fa036004fa213fec88013fec9e102001da012000d003600080a22005328000050100000084102001108000139010000d0500004e8400a081b820a001ba23e001811f401c32800005b823e00184102001108000099010000db9172004ae0720019e100017f606201880a1001b8bd0201830bfffe81b0000849a0362b8f40360009fc6a0000100000080a2200132800004d20120001080000cee01200c901020051b0000849a0362f8f40360009fc6a00001000000f606201880a1001b8bd0201830bfffd3ec05e008ea05a000a8100016901000159a0120104000002501000000d0252000e601200cd004e0041b0000849a036298f40360009fc6a0000100000080a2200532800004e404e0041080000cd0012008a2102005e224a00092100012901020091b0000849a0362f8f40360009fc6a00001000000d0012008de012010353f0003b406a33481c6a00488012014|@329,131071|116,4,20000 184,4,I71 228,4,I73 284,5,@327 304,4,I70 360,4,I73 388,4,@221 327:C2,132|9e13e002f606201880a1001b8bd0201880a2200132800005c40220009010200181c3e00601000000ee00a00cec037ff480a5c01622bffff4d0022004de213ffcda213ff8c4213ff4d00220047fffffed88013ff48c21a00c8b19600cba1020029e100006fa21bffcd023e004da012000da23e0009010000fc401200881c0a0068801200c|@328,114849| 328:S14|4c6973742e66696c746572283229 329:S35|426173696353747265616d494f28292e7465726d696e61746553747265616d27283129 330:O2|@334,0 331:O2|@332,@245 332:C2,72|9e13e002113ee00090022014c40220008c21a00c8b19600cba10200290100006fa21bffcc4222004c4036004c42220002f3ee000ae05e014d025e0009010200181c3e00601000000|@333,98465|4,4,@2 48,4,@2 333:S20|54657874494f2e3c7061747465726e3e2d283129 334:O4|@336,@335,@262,@9 335:O3|@338,@337,@9 336:C2,164|9e13e002d003600cc4022000de213ffcda213ff888013ff880a0a00132800004de00a0001080000ade012000da03e00490102001d0236000c400a004f606201880a1001b8bd0201830bffff41b3ee0009a036014d00360008c21a00c8b19600cba10200284100006fa21bffcd020a004da03e008da20a000113ee00090022014c4222000d203e00490102049de0120041b0000879a036098f403600081c6a00488012008|@318,131071|76,4,@2 120,4,@2 144,4,I150 337:O2|@340,@339 338:C2,192|9e13e002f606201880a1001b8bd02018d0036008c4022000de213ffcda213ff8ae10200188013ff880a0a00132800006fa00a00490100017de01200481c3e00688012008fa213ffcc6213ff82d3f000cac05a3d2ec213ff4aa102001ea213ff086013ff0e6012000e400a000d404a010d204e004901000127ffff84988013ff0a8100008c601200810800008ae100014a8102001d0213ffcd0213ff8d0213ff488013ff4ae100014c401200c88012010f606201880a1001b8bd0201830bfffdb|@322,131071|76,4,$338+146 120,5,@235 339:O3|@341,@7486,@9 340:C2,72|9e13e002f606201880a1001b8bd02018c4022008de213ffcfa00a008fa213ff8da036004f40360009fc6a00088013ff890102001da012000de012004f403600081c6a00488012008|@325,131071| 341:C2,404|9e13e002f606201880a1001b8bd02018c402200cee00a00080a5e00532800005ae1020059010200181c3e00601000000ee20a000de213ffcda213ff8d0213ff4c4213ff0fa036004fa213fec88013fec9e102001da012000d003600080a22005328000050100000084102001108000139010000d0500004e8400a081b820a001ba23e001811f401c32800005b823e00184102001108000099010000db9172004ae0720019e100017f606201880a1001b8bd0201830bfffe81b0000849a0362b8f40360009fc6a0000100000080a2200132800004d20120001080000cee01200c901020051b0000849a0362f8f40360009fc6a00001000000f606201880a1001b8bd0201830bfffd3ec05e008ea05a000a8100016901000159a0120104000002501000000d0252000e601200cd004e0041b0000849a036298f40360009fc6a0000100000080a2200532800004e404e0041080000cd0012008a2102005e224a00092100012901020091b0000849a0362f8f40360009fc6a00001000000d0012008de012010353f0008b406a2a481c6a00488012014|@329,131071|116,4,20000 184,4,I71 228,4,I73 284,5,@342 304,4,I70 360,4,I73 388,4,@265 342:C2,132|9e13e002f606201880a1001b8bd0201880a2200132800005c40220009010200181c3e00601000000ee00a00cec037ff480a5c01622bffff4d0022004de213ffcda213ff8c4213ff4d00220047fffffed88013ff48c21a00c8b19600cba1020029e100006fa21bffcd023e004da012000da23e0009010000fc401200881c0a0068801200c|@328,114849| 343:C2,512|9e13e002f606201880a1001b8bd02018de213ffcc6213ff8053f000e8400a012c4213ff4ae102001ee213ff086013ff0113f000e900220fc4003790688013ff0ac10000811000083900223d89a100016f40360009fc6a00001000000c6213ffc2b3f000daa056386ea213ff8a8102001e8213ff486013ff4921020019010204d1b0000879a036098f40360009fc6a00088013ff4a6100008c60120081080000ec6213ffc901020011b0000829a0361f8f40360009fc6a00001000000a6100008d0213ffcd0213ff8d0213ff488013ff4c6213ffc253f000da404a3eee4213ff8a2102001e2213ff486013ff4901020019a100013f40360009fc6a00088013ff4c60120081080000788012018d0213ffcd0213ff8d0213ff488013ff488012018f606201880a1001b8bd0201830bfffccc6213ffc1f3f000e9e03e05ade213ff882102001c2213ff486013ff4921020019010204d1b0000879a036098f40360009fc6a00088013ff49a100008c60120081080000ec6213ffc901020051b0000829a0361f8f40360009fc6a000010000009a100008d0213ffcd0213ff8d0213ff488013ff4c6213ffc193f000e980320bed8213ff896102001d6213ff486013ff490102001f40360009fc6a00088013ff4c60120081080000788012018d0213ffcd0213ff8d0213ff488013ff488012018f606201880a1001b8bd0201830bfffcd|@7479,131071|24,4,$343+306 48,4,@344 56,5,@7477 68,4,I48 96,4,$343+166 128,4,I150 168,4,I1 212,4,$343+270 308,4,$343+378 340,4,I150 380,4,I1 424,4,$343+478 344:O2|@7487,@345 345:O4|-1,@18,@19,@17 346:O2|@347,80 347:C2,36|9e13e002f606201880a1001b8bd02018d2036004353f000eb406a16881c6a00401000000|@351,131071|20,4,@348 348:C2,428|9e13e002f606201880a1001b8bd02018808a200132800004b8102004f8022000b92f200284072001de213ffcd0213ff8d2213ff4ae10200188013ff480a0a001328000059ea0a004ac10001710800032ea01200092a0a004d0012004808a2001228000058482601084100008108000078088a001bb38a002fa0a001db92f6002840720018088a00122800005ee213ffcac1000021080000cee213ffcde213ff8901000021b0000879a0360d8f40360009fc6a00088013ff8ac10000810800005ec213ffcde213ff888013ff8ec213ffcd20120049010201d1b0000899a036398f40360009fc6a00088013ffcea012000b8222001a805401cc4012004ae1000148801200cf606201880a1001b8bd0201830bfffcb808d600122800005ec213ffca81000151080000bec213ffc901000151b0000879a0360d8f40360009fc6a00088013ffca8100008108000049210001488013ffc92100014d00120001b00008a9a036098f40360009fc6a00001000000b8222001811f20003680000be601200c273f000ea604e330b8222001ba24e001b917401c90072001e401200c81c4a0068801201081c4e00688012010|@350,131071|164,4,I152 216,4,I238 304,4,I152 348,4,I246 384,4,@349 349:B8|0000004000000000 350:S22|486173685461626c652e6861736856616c7565283229 351:S25|486173685461626c652e6861736856616c7565283129283129 352:O2|@697,@7475 353:O2|@355,@354 354:O2|@356,0 355:S2|3c3d 356:O3|@21,69,@357 357:O4|@355,-1,@359,@358 358:O3|1,@361,@360 359:O2|-2,4 360:O4|-3,0,@369,@368 361:O4|-2,1,@362,0 362:O2|@364,@363 363:O2|@367,0 364:O2|49,@365 365:O3|3,@22,79992 366:O2|2,0 367:O2|50,@365 368:O2|0,@370 369:S4|626f6f6c 370:O6|@369,0,0,0,@372,@371 371:O2|-1,@33 372:O2|-1,@23 373:O3|1,@375,@374 374:O2|@377,@376 375:O1|-1 376:O2|@641,0 377:O4|@379,@380,@378,@360 378:O2|-1,@381 379:S4|74727565 380:O1|1 381:O2|5,@382 382:O2|-1,@383 383:O5|0,@385,@638,@30,@384 384:O2|10,@639 385:O3|@387,@389,@386 386:O2|@626,@625 387:C2,48|9e13e002f606201880a1001b8bd02018d6036004d4022008d2022004d0022000da036008f403600081c6a00401000000|@388,131071| 388:S40|434f44455452454528292e67656e436f64652832292831296e6577456e7669726f6e283129283129 389:O2|@391,@390 390:O3|@394,0,@393 391:C2,44|9e13e002f606201880a1001b8bd02018d4022008d2022004d0022000da036004f403600081c6a00401000000|@392,131071| 392:S44|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229656e76283129 393:O10|0,@601,@600,0,0,0,0,0,0,0 394:C2,212|9e13e002f606201880a1001b8bd02018d4022000b822a001811f200036800004c40360081080000cde213ffcfa00bffcbb2f6008b9376006ae072001ba22a001811f401c36800004de213ffc10800009b822a001113f0004900223d0f40620209fc6a00088013ffc84102001b822a001ee00801c841000178088a00132800005de213ffcec00a00010800009c4036004113f000f9002239cf40620209fc6a00088013ffcac102001c4036004b820a001ba226001b91f401cae0720019210001690100017353f000fb406a3d481c6a00401000000|@599,131071|84,4,@224 144,4,@395 196,4,@398 395:O3|@24,@397,@396 396:S7|676574536f6d65 397:S13|496e7465726e616c4572726f72 398:C2,812|9e13e002f606201880a1001b8bd0201880a2200132800005d0213ffc9010000981c3e00601000000ee02600080a5fffd1280000688013ffcec026004c405a00810800007ec00a00080a5e00532800003c4026004c4026008ec00a00080a5bfed3280005480a5bff5de213ffcd2213ff892102001901000029a012000400000b388013ff8ea012000e605600080a4fffd3280000601000000e4056004e804a0101080000580a4fffd293f002ba805225c80a4fffd3280000601000000e2056004e40460041080000580a4fffd253f002ca404a04880a4fffd328000068c21a008e0056004e204200c1080000a8c21a0188b1960083b100000ba076001a2100006fa21bffca0102001e02460008c21a0188b196018ba1020059e100006fa21bffce823e010e223e00cd023e008e423e00482102001c223e000d0213ffcd0213ff8da05200080a37ff91280000988013ff89801200096102001d623200094012000d022a004108000088c21a00c9801200096103ffdd623200094012000de22a0048c21a00c8b19600cba10200290100006fa21bffcd2012000d2222000c4012004c4222004ee01200c81c5e006880120143280000580a5bfe59010000981c3e0068801200432800054de213ffcde213ffcd2213ff892102001901000029a0120004000005a88013ff8ea012000e605600080a4fffd3280000601000000e4056004e804a0101080000580a4fffd293f002ba805225c80a4fffd3280000601000000e2056004e40460041080000580a4fffd253f002ca404a0d080a4fffd328000068c21a008e0056004e204200c1080000a8c21a0188b1960083b100000ba076001a2100006fa21bffca0102001e02460008c21a0188b196018ba1020059e100006fa21bffce823e010e223e00cd023e008e423e00482102001c223e000d0213ffcd0213ff8da05200080a37ff91280000988013ff89801200096102001d623200094012000d022a004108000088c21a00c9801200096103ffdd623200094012000de22a0048c21a00c8b19600cba10200290100006fa21bffcd2012000d2222000c4012004c4222004ee01200c81c5e00688012014113f002c90022114f40620209fc6a00088013ffc90102001|@598,131071|124,5,@399 168,4,@581 204,4,@589 480,5,@399 524,4,@581 560,4,@594 788,4,@596 399:C2,1228|9e13e002f606201880a1001b8bd02018c40220008088a001228000210100000080a0bfe52680001e0100000080a0a02d3480001b010000002f3f0010ae05e36eba00a019fa05c01d81c5c01d01000000000001b20000004a00000132000003760000004a0000004a0000004a0000004a0000004a0000004a0000041e000002a60000004a000003220000004a0000004a000003d20000004a00000426d0213ffcd0213ff8d0213ff4d0213ff0d0213fecd0213fe8d0213fe4de213fe0d0213fdc94013fe4133f001292026004901021354000054988013fdc8c21a0208b196020ba102007ac100006fa21bffcea012008ea25a000e801200ce825a004e6012010e625a008e4012014e425a00ce2012018e225a010e001201ce025a014de012020de25a018ec213ffc113f001f9002225c9a10000ff40360009fc6a00088013ffcd2012000d00120041b3f001f9a03626840000e850100000090102001da012014f40360009fc6a00001000000113f002b90022288f40620209fc6a0000100000090102001ec02200cb825a001811f200026800009ea036000b8226001ba25a001811f401c36800004ea03600081c3e00601000000b8256001ba25a001b917401ca8072001e6022004e40220088c21a0188b196018ba10200590100006fa21bffca2102001e2222010e822200ce4222008e6222004a0103fede022200081c3e00601000000ec022004b8226001b9172004aa072001de213ffcda213ff8fa05a004fa213ff4fa05a008fa213ff0fa05a00cfa213fecfa05a010fa213fe8fa05a014fa213fe4fa05a018fa213fe0fa05a01cfa213fdc92100015d005a0007fffff6988013fdce801201ce6012014e4052000b824a001ba24e001b917401ca20720018c21a0248b196024ba102008a0100006fa21bffcde012000de24201cc2012004c2242018da012008da242014d801200cd8242010d6012010d624200ce2242008d4012018d4242004d02420008c21a00c8b19600cba10200290100006fa21bffce022200492103fe5d2222000c401202081c0a00688012024de213ffcda213ff8d2213ff4fa022004fa213ff0fa02200cfa213fecd00220087fffff3a88013fecd0213ffcd00120049a01201040001a1c88013ffcac1000088c21a0148b196014ba10200490100006fa21bffcea012004ea22200ce8012000e8222008ec222004a6102011e6222000e401201481c4a00688012018de213ffcda213ff8fa022008fa213ff4d00220047fffff1e88013ff4ac1000088c21a0108b196010ba10200390100006fa21bffcea012000ea222008ec222004a8102019e8222000e601200881c4e0068801200cde213ffcda213ff8fa022004fa213ff4d00220087fffff0988013ff4ac1000088c21a0148b196014ba10200490100006fa21bffcaa102001ea22200cec222008e8012000e8222004a6103ff1e6222000e401200881c4a0068801200cda213ffcd2213ff8de213ff4d00220049a013ffc40001a0888013ff4ac1000088c21a00c8b19600cba10200290100006fa21bffcec222004aa102025ea222000e801200081c520068801200c81c3e00601000000de213ffcda213ff8fa022008fa213ff4d00220047ffffedd88013ff4ac1000088c21a0108b196010ba10200390100006fa21bffcea012000ea222008ec222004a810202de8222000e601200881c4e0068801200c|@588,131071|56,4,$399+82 196,4,@400 208,5,@428 296,4,@485 328,4,@486 336,5,@488 364,4,@583 812,5,@585 1080,5,@587 400:O1|@401 401:C2,52|9e13e002f606201880a1001b8bd02018053ee0088400a204ee00a0009210000890100017353f0012b406a05c81c6a00401000000|@427,131071|16,4,@25 36,4,@402 402:C2,732|9e13e002f606201880a1001b8bd02018ac10000faa10000890100015400000b70100000080a23ffd3280008e808a6001808a600132800004b8102004f8026000b92f20029e072001d2213ffc821000169010000f9a013ffc400000bf88013ffc80a22001328000228c21a008808a600132800004b8102004f8026000b92f20029a0720018c21a0108b196010ba10200390100006fa21bffcda22200884102001c4222004d22220008c21a00c8b19600cba102002ae100006fa21bffc2d3f0013ac05a0d8ec25e000d025e004d405601092100017901000159e100001353f0005b406a0dc81c6a004880120048b196008ba1020019a100006fa21bffcd023600098100015961000089410000d92102001d00120004000020d01000000d0213ffcd0213ff8d0213ff492013ff47ffff57c88013ff48c21a0108b196010ba10200394100006fa21bffcd2012008d222a008d0012004d022a004c4012000c422a0008c21a00c8b19600cba102002ae100006fa21bffc2d3f0015ac05a3f0ec25e000d425e004c2213ffcd8213ff8d6213ff4d4032010921000179010000c7ffff2b988013ff4ea012004d4056010133f00089202629c901000157ffff2b20100000094102001d2012000d0012018400001df01000000d0213ffcd0213ff8d0213ff492013ff47ffff54e88013ff48c21a0108b196010ba102003a8100006fa21bffce6012008e6252008e4012004e4252004e2012000e22520008c21a00c8b19600cba102002a0100006fa21bffc1f3f00169e03e030de242000e8242004c2012010d40060109210001090100001de012014353f0005b406a0dc81c6a0048801202832800004b8102004f8026000b92f2002a80720018c21a0108b196010ba102003a6100006fa21bffce824e008a4102001e424e004d224e0008c21a00c8b19600cba102002a2100006fa21bffc213f0016a0042070e0246000e6246004d405601092100011901000159e100016353f0005b406a0dc81c6a00401000000|@426,131071|28,5,@403 88,5,@405 188,4,@407 220,4,@235 276,5,@414 300,5,@249 372,4,@423 412,5,@235 428,4,@264 440,5,@235 460,5,@414 484,5,@249 556,4,@424 592,4,@235 684,4,@425 716,4,@235 403:C2,24|9e13e002c4022014ee00a0009010001781c3e00601000000|@404,98433| 404:S32|426173696353747265616d494f28292e6765744275666665724d6f6465283129 405:C2,216|9e13e002f606201880a1001b8bd0201880a2200132800005b82220019010200181c3e00601000000b91f200484072001811f200036800004ee0360001080000ede213ffc808de00132800004b8102004f805e000b92f2002ac072001ba20a001811f401c36800004de213ffc1080000a808de001ac100008113f0004900223d0f40620209fc6a00088013ffcae102001808de00122800004ac80a0101080000780a5e029bb3da002fa0dc01db92f6002ae07200180a5e02932800004b822200181c3e00601000000b91f20049007200110bfffcef6062018|@406,114849|120,4,@224 406:S43|54657874494f2e5465787453747265616d494f2e6f75747075742832296c6173744e65776c696e65283129 407:C2,36|9e13e002f606201880a1001b8bd02018d2036004353f0013b406a11881c6a00401000000|@422,131071|20,4,@408 408:C2,372|9e13e002f606201880a1001b8bd02018c4022008ee02200cec05e00080a5a00532800023ea022000de213ffc8c21a01088013ffc8b196010ba10200392100006fa21bffc2d3f0013ac05a2a8ec2260082d3f0013ac05a2b8ec226004ec00a000ec2260008c21a0108b196010ba102003aa100006fa21bffcd2256008133f000592026050d2256004133ee0009202601cd225600090100015f40620209fc6a0000100000090102001ea022000fa026008fa213ffcfa022004fa213ff8fa026000fa213ff4ea213ff0fa026004fa213fecd0213fe8fa056000fa213fe4d2013ffcec013fe4b825a001ba22600188013fe4811f401c2480000ee8022014de213ffc7ffff52388013ffcd601201cd401200cd2012014d0012008de012000353f0013b406a2dc81c6a00488012020e605200080a4e00532800009de213ffc96100009d4012008d2012010353f0013b406a2dc81c6a0048801201c901020019a0120184000015a88013ffce401200081c4a00688012020|@421,131071|68,4,@409 80,4,@410 124,4,@230 136,4,@3 256,5,@265 284,4,@412 328,4,@412 352,5,@417 409:S6|6f7574707574 410:O3|@26,@411,0 411:S12|436c6f73656453747265616d 412:C2,220|9e13e002f606201880a1001b8bd02018c4022008ee00a020808de00132800011de213ffcd6213ffcfa00a000fa213ff8d4213ff4d2213ff0fa05e000fa213fecde213fe8901020019a013ffc4000002b88013fe8ec01200081c5a006880120188c21a01088013ffc8b196010ba102003ac100006fa21bffc2b3f0013aa0562a8ea25a008293f0005a805208ce825a004e600a000e625a0008c21a0108b196010ba102003a4100006fa21bffcec24a008233f0005a2046050e224a004213ee000a004201ce024a00090100012f40620209fc6a0000100000090102001|@416,131071|76,5,@413 120,4,@409 132,4,@232 176,4,@230 188,4,@3 413:C2,436|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d0213ff4c6213ff0053f00148400a08ac4213fecae102001ee213fe886013fe8ea037ff8b8256001ba22200188013fe8b917401ca8072001e6036000b8222001ba24e001b91f401ca40720018c21a0088b196008ba102001a2100006fa21bffce4246000e0037ff09410001192100014d0037ff440000051010000009a100010f40360009fc6a00001000000ac100008c60120081080002ede01200cde012004da022000193ee0009803201c80a3400c3280000580a36005821000081080001f90100001328000068c21a010033f00058200601c10800019901000018b196010ba10200396100006fa21bffc153f00139402a2a8d422e008d022e004d203fffcd222e0008c21a0108b196010ba10200382100006fa21bffcd6206008053f00058400a050c42060042f3ee000ae05e01cee20600090100001f40620209fc6a00001000000ac102001de01200cb823e001ba25a001b917401c82072001da012010d8036000ba232001811f001d32800006b823e00190102001d601201481c2e00688012018ba25a001b917401c90072001de01201410bfff9688012018|@415,131071|32,4,$413+182 140,5,@414 188,4,@3 228,4,@227 260,4,@409 308,4,@230 320,4,@3 414:C2,460|9e13e00280a2a00132800031808a2001808a600122800009de213ffcb8226001811f200026800005de213ffc841000091080000b808a200184100008113f0004900223d0f40620209fc6a00088013ffc9410000284102001808a200132800004b8102004f8022000b92f20029407200180a0800a3880000fde213ffcb820a0019222801c8c21a0108b196010ba10200394100006fa21bffcd022a008d222a004c422a0009010000a81c3e00601000000113f0004900223d0f40620209fc6a00088013ffc90102001808a200132800004b8102004f8022000b92f200284072001808a600122800009de213ffcb8226001811f200026800005de213ffcae1000091080000bd202a000ae100008113f0004900223d0f40620209fc6a00088013ffc92100017ae102001d202a000808a600122800009de213ffcb8226001811f200026800005de213ffcac1000091080000bb825a001ac100008113f0004900223d0f40620209fc6a00088013ffc90100016ac102001b825a001aa05c01c80a540023880000dde213ffc8c21a0108b196010ba10200384100006fa21bffcd020a008ec20a004ee20a0009010000281c3e00601000000113f0004900223d0f40620209fc6a00088013ffc90102001|@226,123015|60,4,@224 176,4,@224 268,4,@224 344,4,@224 436,4,@224 415:S38|426173696353747265616d494f28292e7772697465566563283429666f7263654f7574283129 416:S27|426173696353747265616d494f28292e7772697465566563283429 417:C2,532|9e13e002f606201880a1001b8bd02018d0037ffcc4022000ee037fe8b820a001ba25e001b91f401cac072001c4036000ba20a001811f401c36800025ec022000ec0220008c21a0088b196008ba102001aa100006fa21bffcc4256000a810000fa610000da410001694100015d204fff0d004fff87fffff5401000000e8213ffce6213ff894100008d204fff4901000124000006888013ff8e2012000e0047ffcde042000c2046000b8206001ba23e001b917401c9a072001da24200090102001d801200481c3200688012008b825a001ba25e001b91f401caa072001e80220008c21a0088b196008ba102001a6100006fa21bffcea24e000a410000fa210000da010001594100013d2047ff0d0047ff87fffff2d01000000e4213ffce2213ff8e0213ff494100008d2047ff4901000144000004088013ff4de012004c203fffcda006000d8012000b8232001ba236001b917401c96072001d6206000d003ffec7ffff35901000000d4012004d202bff0d0012000b8222001ba226001b917401c84072001ee02a000b8222001ba25e001b91f401cac0720018c21a0088b196008ba102001aa100006fa21bffcec256000e802bff4e602bff89410001592100002901000137fffff00010000009410000892100014901020014000001601000000e4012004e204a000e0012000b8242001ba246001b91f401c9e072001c204bffcde20600090102001da01200881c360068801200c|@420,131071|116,5,@414 144,5,@418 272,5,@414 304,5,@418 352,5,@265 452,5,@414 472,5,@418 418:C2,276|9e13e002f606201880a1001b8bd02018d0213ffcd0213ff8d0213ff4aa10000fa8100008e6026000e402600492013ff49010000a7ffff24d88013ff4808d200122800009ea213ffcb8252001811f200026800005ea213ffca210001410800009de012008113f0004900223d0f40620209fc6a00088013ffca2102001de012008b823e0019a04401c80a340132880000ad4012000ea213ffc113f0004900223d0f40620209fc6a00088013ffc90102001d4012000808aa0012280000bd2012004d2012004b82260019004401cbb32a002b93a2002fa2c801c9010200181c560068801200c90826010de212008961000119410001292100008d00120009e1000151b0000889a036298f403600081c6a00488012008|@419,131071|52,5,@249 100,4,@224 152,4,@224 256,4,I198 419:S25|436861724172726179536c6963652e636f7079566563283329 420:S46|426173696353747265616d494f28292e6f7574707574566563746f72283229616464566563546f42756666283129 421:S31|426173696353747265616d494f28292e6f7574707574566563746f72283229 422:S34|426173696353747265616d494f28292e6f7574707574566563746f72283129283129 423:C2,36|9e13e002f606201880a1001b8bd02018d2036004353f0013b406a11881c6a00401000000|@422,131071|20,4,@408 424:C2,36|9e13e002f606201880a1001b8bd02018d2036004353f0013b406a11881c6a00401000000|@422,131071|20,4,@408 425:C2,36|9e13e002f606201880a1001b8bd02018d2036004353f0013b406a11881c6a00401000000|@422,131071|20,4,@408 426:S29|54657874494f2e5465787453747265616d494f2e6f7574707574283229 427:S45|434f44455452454528292e6368616e67654c6576656c2832296368616e67654c283229707072696e742d283129 428:C2,1516|9e13e002f606201880a1001b8bd020188c21a0088b1960083b100000ba07600184100006fa21bffcd020a0008c21a0088b1960083b100000ba076001ae100006fa21bffcac102001ec25e0008c21a0088b1960083b100000ba076001ac100006fa21bffcaa102001ea25a0008c21a01c8b19601cba102006aa100006fa21bffc293f0017a8052318e8256000d0256014ec256010ee25600cc4256008d2256004b8222001ba10001cbb17401db917401c920720018c21a0088b1960083b100000ba076001ae100006fa21bffcac102001ec25e0008c21a0088b1960083b100000ba076001a8100006fa21bffcac102001ec2520008c21a0088b1960083b100000ba076001ac100006fa21bffca6102001e625a0008c21a0088b1960083b100000ba076001a6100006fa21bffca4102001e424e000b8226001b9172004a4072001de213ffcd0213ff8d4213ff4c4213ff0ea213fecd2213fe8ee213fe4e8213fe0ec213fdce6213fd8153f00199402a03c92102101901000121b0000829a036338f40360009fc6a00088013fd8e2012010e22220008c21a01c8b19601cba102006a0100006fa21bffc1f3f00199e03e048de242000c2012004c2242014e2242010da01200cda24200cd0242008d8012008d82420048c21a0208b196020ba10200796100006fa21bffc153f00199402a26cd422e000e222e018d022e014d822e010da22e00cd2012014d222e008c4012000c422e004ee012020b825e001ba10001cbb17401db917401cac072001b9172004aa072001d0213ffce0213ff8d6213ff4ec213ff09410200192102101901000151b0000829a036338f40360009fc6a00088013ff0e8012000e82220008c21a0088b1960083b100000ba076001a6100006fa21bffca4102001e424e0008c21a0088b1960083b100000ba076001a2100006fa21bffca0102001e02460008c21a0148b196014ba1020049e100006fa21bffc033f001a820060b4c223e000e223e00cd023e008e623e0048c21a0188b196018ba1020059a100006fa21bffc193f001a980321f0d8236000e8236010e223600cd0236008e62360048c21a0188b196018ba10200596100006fa21bffc153f001a9402a3e8d422e000e222e010d022e00ce622e008e822e0048c21a0188b196018ba10200592100006fa21bffc053f001b8400a1c8c4226000e6226010e822600cd0226008e22260048c21a0208b196020ba102007ae100006fa21bffc2d3f001bac05a3c4ec25e000ea012014ea25e018de25e014e801200ce825e010e625e00ce225e008d625e0048c21a0388b196038ba10200da4100006fa21bffc213f001da00420c4e024a000de012008de24a030c2012018c224a02cd801201cd824a028ea24a024d6012010d624a020d4012028d424a01ce624a018e224a014d224a010e824a00cd2012004d224a008d0012024d024a0048c21a02c8b19602cba10200a84100006fa21bffc2d3f001dac05a388ec20a000e620a024e220a020d820a01cd620a018ee20a014ea20a010de20a00cda20a008c220a0048c21a0108b196010ba102003a8100006fa21bffc213f001ea00420dce0252000d4012030d4252008c42520048c21a0188b196018ba102005ac100006fa21bffc213f001ea0042160e025a000d425a010c425a00cee25a008d225a0048c21a0088b1960083b100000ba076001a0100006fa21bffc94102001d42420008c21a02c8b19602cba10200a94100006fa21bffc113f001e90022220d022a000e022a024e622a020e222a01cd822a018d622a014ea22a010de22a00cda22a008c222a0048c21a0348b196034ba10200caa100006fa21bffc193f001e9803236cd8256000e625602ce2256028de256024da256020c225601cd6012024d6256018e0256014d0012030d0256010c425600cee256008d22560048c21a00c8b19600cba102002ae100006fa21bffc273f001fa604e0ece625e000c425e0048c21a00c8b19600cba102002a2100006fa21bffc213f001fa004215ce0246000d4246004de01202cee23e000033f001f820061d4c223e004ea23e008e423e00cec23e010e823e014e223e01890102001da01203481c3600688012038|@484,131071|128,4,@429 360,4,@435 376,4,I11 424,4,@436 488,4,@440 592,4,I11 704,4,@442 748,4,@446 796,4,@450 844,4,@454 892,4,@458 956,4,@465 1064,4,@467 1132,4,@469 1176,4,@471 1256,4,@473 1324,4,@475 1408,4,@477 1444,4,@479 1468,4,@481 429:C2,876|9e13e002f606201880a1001b8bd02018c402200080a0bffd3280006f80a0a001da213ffcfa022008fa213ff8ee03600cec05e00080a5a0011280000a88013ff8de213ffc901020019a012004400000cf88013ffcea01200081c560068801200cea05a000e805600080a53ffd3280002380a52001e6036008e404e000e2022004b8246001ba24a001b91f401ca0072001e024e000de213ffc88013ffcb8246001811f200034800006de01200890102001de01200081c3e0068801200ce2213ffc90102081da03e004f40360009fc6a00088013ffcc2012000b8206001b91f2004a207200188012004f606201880a1001b8bd0201830bfffea3280000ae6036008de213ffcd00560049a0120044000009f88013ffce601200081c4e0068801200ce404e000b824a001ba226001811f401c34800022de213ffce204e000e0022004b8242001ba246001b91f401c82072001c224e000de213ffc88013ffcb8242001811f200034800006da01200890102001da01200081c360068801200ce0213ffc90102081da036004f40360009fc6a00088013ffcd8012000b8232001b91f2004a007200188012004f606201880a1001b8bd0201830bfffead00560049a0120044000007288013ffce201200081c460068801200c3280003f80a0bff9ee036008ec05e000b825a001ba226001811f401c34800006ea0360102b3f000faa0560cc10800028ec03600ce8056000e6022004b824e001ba252001b917401ca4072001e4256000d0213ffcd0213ff8e202200880a460010280000a88013ff8e00560008201200098102001d820600096012000e022e004108000098c21a00ce00560008201200098102005d820600096012000e022e0048c21a00c8b19600cba102002aa100006fa21bffcd4012000d4256000d2012004d225600488012008ec03600ce805a0008c21a00c8b19600cba102002a6100006fa21bffce824e004ea24e000e625a0009010200181c3e0060100000032800017ee03600cee036008ec05e000b825a001ba226001811f401c24800006ea05e000aa102001ea25e00010800008d0022004b8226001ba256001b91f401ca8072001e825e000d0022004da036004f403600081c6a00401000000ec05e00080a5a0013280000aea05a004de213ffc113f0018900223d4f40620209fc6a00088013ffc90102001ea05a004ea25e0009010200181c3e00601000000|@434,131071|76,5,@430 268,5,@430 448,5,@430 504,4,@375 832,4,@432 430:C2,220|9e13e002f606201880a1001b8bd02018c4036000ee037ffcb8222001ba25e001b917401cac072001d000a010ec222000ec022000ea00a014b825a001ba256001b91f401ca8072001ec00a008e825a000de213ffcda213ff890102029da00a004f40360009fc6a00088013ff8ea012000e8056000e6052010e404e000b824a001811f200034800006e201200090102001e201200481c4600688012008e0046000e4213ffc90102081da042004f40360009fc6a00088013ffcde012000b823e001b91f2004a407200188012004f606201880a1001b8bd0201830bfffe9|@431,131071| 431:S52|5072657474795072696e7465722e7072657474795072696e742833297072696e744f75742832297573654e65774c696e65283129 432:O3|@24,@397,@433 433:S32|706f705072696e74537461636b3a207072696e7420737461636b20656d707479 434:S39|5072657474795072696e7465722e7072657474795072696e742833297072696e744f7574283229 435:O2|@380,0 436:C2,432|9e13e002f606201880a1001b8bd02018c4036014ee00a000b822a001ba25e001b917401cac072001ec20a000d4036004ee02a000b825e001b9172004ac072001de213ffcda213ff8d0213ff4d2213ff0d4213fecfa036010fa213fe8d2013fe8901000161b0000859a036398f40360009fc6a00088013fe880a2200132800004ea01200010800013aa100008b8256001811f200026800003a8102001a8102005b8222001811f200026800003a6102001a610200580a5001322800006aa100008b8256001ba222001b917401caa072001e8012004ea252000e6012010e404e004e204a000e004e00cde042000b823e001ba246001811f401c32800009c204a000113f001990022214f40620209fc6a0000100000090102001c204a0008c21a00c8b19600cba1020029a100006fa21bffcd8012008d8236004d601200cd6236000b8206001811f200036800004d404e0081080000a01000000d202a000b8226001ba206001811f401c368000040100000010800009b8206001113f0004900223d0f40620209fc6a0000100000090102001b8206001b917200490072001da22801c90102001c401201481c0a00688012018|@439,131071|100,4,I110 256,4,@437 376,4,@224 437:O3|@24,@397,@438 438:S16|746f6b656e2071756575652066756c6c 439:S38|5072657474795072696e7465722e7072657474795072696e74283329656e5175657565283329 440:C2,508|9e13e002f606201880a1001b8bd02018d003600cc4022000b820a001b9172004ae072001de213ffcda213ff8fa036018fa213ff4d2013ff4901000171b0000859a036398f40360009fc6a00088013ff480a2200132800004ec01200010800013ac100008b825a001811f200026800003aa102001aa102005b8222001811f200026800003a8102001a810200580a5401422800006ac100008b825a001ba222001b917401cac072001ea012004b825a001811f200036800004e80560141080000a01000000e6052000b824e001ba25a001811f401c368000040100000010800009b825a001113f0004900223d0f40620209fc6a00001000000a8102001b825a001b9172004a4072001e205001ca8100011e0052004b8242001811f20002680003590102001de056010c203e000da05600cd8036000b8232001ba206001811f401c2280002c90102001ec236000fa052000fa213ffce0213ff892100010d0013ffcda056008f40360009fc6a00088013ff8d6012004d402e00080a2bffd3280000d80a2bff9d201200cd0026004c4022000ee02e004b825e001ba20a001b917401cac072001ec2220001080000e901020013280000c90102001d201200cd0026004c4022000ee012000b825e001ba20a001b917401cac072001ec22200090102001da01200cde01201010bfff8788012014de01200881c3e0068801200c|@441,131071|60,4,I110 228,4,@224 441:S38|5072657474795072696e7465722e7072657474795072696e7428332964655175657565283129 442:C2,180|9e13e002d0036004c4022000ee03600cec05e000b825a001ba20a001811f401c3280000ac4022000de213ffc113f001a90022184f40620209fc6a00088013ffc90102001c4022000b820a001811f200036800004ec0360081080000ade213ffcea05a000b8256001ba20a001811f401c36800004de213ffc10800009b820a001113f0004900223d0f40620209fc6a00088013ffc90102001b820a001b9172004aa072001c405801c9010000281c3e00601000000|@445,123041|44,4,@443 128,4,@224 443:O3|@24,@397,@444 444:S34|5072657474795072696e7465722e7363616e546f703a20737461636b20656d707479 445:S38|5072657474795072696e7465722e7072657474795072696e742833297363616e546f70283129 446:C2,368|9e13e002f606201880a1001b8bd02018c4036004ee00a000b825e001b9172004ac072001de213ffcda213ff8d0213ff4c4213ff0fa036010fa213fecd2013fec901000161b0000859a036398f40360009fc6a00088013fec80a2200132800004ea01200010800013aa100008b8256001811f200026800003a8102001a8102005b8222001811f200026800003a6102001a610200580a5001322800006aa100008b8256001ba222001b917401caa072001e8012004ea252000e601200ce404e004e204a000e004e00cde042000b823e001ba246001811f401c32800009c204a000113f001a9002237cf40620209fc6a0000100000090102001c204a000b8206001811f200036800004da04e0081080000a01000000d8036000b8232001ba206001811f401c368000040100000010800009b8206001113f0004900223d0f40620209fc6a0000100000090102001b8206001b917200496072001d4012008d423401c90102001d201201081c2600688012014|@449,131071|68,4,I110 224,4,@447 308,4,@224 447:O3|@24,@397,@448 448:S34|5072657474795072696e7465722e7363616e507573683a20737461636b2066756c6c 449:S39|5072657474795072696e7465722e7072657474795072696e742833297363616e50757368283129 450:C2,360|9e13e002f606201880a1001b8bd02018d0036008c4022000ee036010ec05e000b825a001ba20a001811f401c3280000ac4022000de213ffc113f001b9002216cf40620209fc6a00088013ffc90102001c4022000b820a001811f200036800004ec03600c1080000ade213ffcea05a000b8256001ba20a001811f401c36800004de213ffc10800009b820a001113f0004900223d0f40620209fc6a00088013ffcac102001b820a001b9172004aa072001c405801cac100002ea022000b8256001b91f200484072001de213ffcd0213ff8ec213ff4fa036004fa213ff0d2013ff0901000021b0000859a036398f40360009fc6a00088013ff080a2200132800004ee01200010800013ae100008b825e001811f200026800003ac102001ac102005b8222001811f200026800003aa102001aa10200580a5801522800006ae100008b825e001ba222001b917401cae072001ec012008ee25a000d0012004ea01200c81c5600688012010|@453,131071|56,4,@451 140,4,@224 228,4,I110 451:O3|@24,@397,@452 452:S20|7363616e506f703a20737461636b20656d707479 453:S38|5072657474795072696e7465722e7072657474795072696e742833297363616e506f70283129 454:C2,364|9e13e002f606201880a1001b8bd02018d0036010c4022000ee036004ec05e000b825a001ba20a001811f401c3280000ac405e000de213ffc113f001b90022350f40620209fc6a00088013ffc90102001c405e000b820a001b9172004ac072001de213ffcda213ff8ee213ff4fa03600cfa213ff0d2013ff0901000161b0000859a036398f40360009fc6a00088013ff080a2200132800004ea01200010800013aa100008b8256001811f200026800003a8102001a8102005b8222001811f200026800003a6102001a610200580a5001322800006aa100008b8256001ba222001b917401caa072001e8012004ea252000e6012008e404e004e204a000b8246001811f200036800004e004e0081080000a01000000de042000b823e001ba246001811f401c368000040100000010800009b8246001113f0004900223d0f40620209fc6a0000100000090102001b8246001b917200482072001da04001c9010000dd801200c81c3200688012010|@457,131071|56,4,@455 124,4,I110 308,4,@224 455:O3|@24,@397,@456 456:S40|5072657474795072696e7465722e7363616e506f70426f74746f6d3a20737461636b20656d707479 457:S44|5072657474795072696e7465722e7072657474795072696e742833297363616e506f70426f74746f6d283129 458:C2,480|9e13e002f606201880a1001b8bd02018da213ffcde213ff8901020019a013ffc4000007788013ff880a220012280006a90102001c401200490102001da00a004f40360009fc6a00001000000ee012004b8222001811f200036800004ec05e0101080000aaa100008ea05a000b8256001ba222001811f401c36800004aa10000810800009b8222001113f0004900223d0f40620209fc6a00001000000ac102001b8222001b9172004a8072001e605801cac100013e405a000e204a00080a46005328000409a012004b8222001811f200036800004e005e0101080000a01000000de042000b823e001ba222001811f401c368000040100000010800008b8222001113f0004900223d0f40620209fc6a00001000000b8222001b9172004820720011b3f001c9a036310da24001c901020019a012004400000320100000080a220012280000ad801200490102001da0120047fffffad9e13e002f606201880a1001b8bd0201830bffff2d603200cd402e000d2032008d0026000b8222001ba22a001811f401c2280000b9010200190102001da032004f40360009fc6a000010000009a0120044000006d0100000090102001da012004de01200010bfff93880120084000006601000000e001200081c4200688012008c401200081c0a00688012008|@464,131071|32,5,@459 136,4,@224 256,4,@224 288,4,@461 308,5,@459 420,5,@462 448,5,@462 459:C2,240|9e13e002f606201880a1001b8bd02018d0036000c402200cee00a000ec022008ea05a000b8256001ba25e001811f401c32800005de213ffc9010200181c3e00601000000fa022010fa213ff8e8022014901020019a100014f40360009fc6a00088013ff8b8222001811f200036800004e60120001080000a01000000e404e000b824a001ba222001811f401c368000040100000010800009b8222001113f0004900223d0f40620209fc6a00001000000a6102001b8222001b9172004a2072001e004c01ca6100010de04e000c203e00080a06001328000039a1020019a102005901b6004da01200481c3600688012008|@460,131071|156,4,@224 460:S57|5072657474795072696e7465722e7072657474795072696e74283329736574546f6b656e53697a65283129746f704e6f74426567696e283129 461:O2|@380,1 462:C2,280|9e13e002c4036000b8222001811f200036800004ee00a0101080000ade213ffcec05e000b825a001ba222001811f401c36800004de213ffc1080000ab8222001ac100008113f0004900223d0f40620209fc6a00088013ffcae102001b8222001b9172004ac072001ea05c01cae100015ec00a018ea05a000e805e004b8256001ba252001b917401ca60720018c21a00c8b19600cba102002aa100006fa21bffce6256004e605e000e6256000b8222001811f200036800004e400a0101080000ade213ffce204a000b8246001ba222001811f401c36800004de213ffc10800009b8222001113f0004900223d0f40620209fc6a00088013ffc90102001b8222001b9172004a2072001ea24801c9010200181c3e00601000000|@463,130721|68,4,@224 228,4,@224 463:S56|5072657474795072696e7465722e7072657474795072696e74283329736574546f6b656e53697a6528312961646a75737453697a65283129 464:S43|5072657474795072696e7465722e7072657474795072696e74283329736574546f6b656e53697a65283129 465:C2,632|9e13e002f606201880a1001b8bd02018808a200132800004b8102004f8022000b92f200284072001ee036018ec05e000ea036014e8056000b8252001ba25a001811f401c328000108c21a00c8c21a00c8b19600cba102002ac100006fa21bffcd025a004a8103ff9e825a0009210000290100016da036004f403600081c6a004010000008b19600cba102002a6100006fa21bffcd024e004a4103ff9e424e000de213ffcda213ff8c4213ff4941000029210000290100013da036030f40360009fc6a00088013ff4e2012004e004602cde042000c2046028da006000b8236001ba23e001811f401c2280006190102001d8046024d6032000d4046020d202a000b8226001ba22e001b91f401c90072001c404601cee00a000ba25e001811f001d2480005390102001ec046018ea05a000e8046014e6052000b824e001ba256001811f401c2280004a9010200190102001da046010f40360009fc6a00001000000e4012004b8222001811f200036800004e204a00c1080000aa0100008e0046000b8242001ba222001811f401c36800004a010000810800009b8222001113f0004900223d0f40620209fc6a00001000000a2102001b8222001b91720049e072001c204401ca21000018c21a00c8b19600cba1020029a100006fa21bffc98102f9dd8236004d6046000d6236000b8222001811f200036800004d404a00c1080000a01000000d202a000b8226001ba222001811f401c368000040100000010800008b8222001113f0004900223d0f40620209fc6a00001000000b8222001b917200484072001da22801c90102001da04a008f40360009fc6a00001000000f606201880a1001b8bd0201830bfff98d801200881c320068801200c|@466,131071|412,4,@224 548,4,@224 466:S40|5072657474795072696e7465722e7072657474795072696e74283329616464537472696e67283129 467:C2,268|9e13e002f606201880a1001b8bd02018c4036024ee00a000ec036020ea05a000b8256001ba25e001811f401c3280000fde213ffcee03601caa102001ea25e000ea036004a8102001e8256000e8036018a6102001e6252000e6036010a4102001e424e000de213ffcda213ff8d0213ff4d2213ff090102001da036014f40360009fc6a00088013ff08c21a0108b196010ba102003a8100006fa21bffce6012000e6252008e4012004e4252004a2103ffde2252000e0012008de042010c203e000b8206001ba102000b91f401c9a072001941000129210000d90100014da04200cf40360009fc6a00001000000d8012008d6032004d002e000da032008de01200cf403600081c6a00488012010|@468,131071| 468:S36|5072657474795072696e7465722e7072657474795072696e74283329627265616b283229 469:C2,56|9e13e002f606201880a1001b8bd02018d0036008b8222001b9172004840720019210200190100002da036004f403600081c6a00401000000|@470,131071| 470:S40|5072657474795072696e7465722e7072657474795072696e742833296c696e65427265616b283129 471:C2,116|9e13e002f606201880a1001b8bd02018d0036010b8222001b917200484072001de213ffcda213ff89210200190100002da03600cf40360009fc6a00088013ff8ee01200090102001da05e008f40360009fc6a00001000000ec01200090102001da05a004de012004f403600081c6a00488012008|@472,131071| 472:S40|5072657474795072696e7465722e7072657474795072696e74283329656e6453747265616d283129 473:C2,252|9e13e002f606201880a1001b8bd02018c4036024ee00a000b825e001b9172004ac072001ec20a000ee036020ec05e000ea03601ce8056000b8252001ba25a001811f401c3280000f8c21a010ec036018a8102001e825a000e8036004a6102001e6252000e6036014a4102001e424e000e4036010a2102001e224a0008c21a0108b196010ba102003a6100006fa21bffcd224e008d024e004a4102001e424e000e2036010d2046000b8226001ba102000b91f401c90072001de213ffcda213ff8941020019210000890100013da03600cf40360009fc6a00088013ff8c4012000ee00a004d005e000da00a008de012004f403600081c6a00488012008|@474,131071| 474:S41|5072657474795072696e7465722e7072657474795072696e74283329626567696e426c6f636b283229 475:C2,308|9e13e002f606201880a1001b8bd02018d003602cc4022000ee036028ec05e000b825a001ba20a001811f401c3280000dde213ffcde213ffcda213ff892102001113f000f9002210cda036018f40360009fc6a00088013ff810800013e6012000da213ff89410200192103ffd113f000f9002210cda036024f40360009fc6a00088013ff8ea012000e805601cd0052000da056020f40360009fc6a00001000000e6012000e404e014e204a000b8246001b91f2004a0072001e024a000de04a00080a3e0013280001990102001c204e010b8206001b91720049a072001921020019010000dda04e00cf40360009fc6a00001000000d801200090102001da032008f40360009fc6a00001000000d601200090102001da02e004de012004f403600081c6a00488012008c201200481c0600688012008|@476,131071|64,4,@380 108,4,@380 476:S39|5072657474795072696e7465722e7072657474795072696e74283329656e64426c6f636b283129 477:C2,40|9e13e002f606201880a1001b8bd02018d2022004d0022000da036004f403600081c6a00401000000|@478,131071| 478:S36|5072657474795072696e7465722e7072657474795072696e74283329627265616b283129 479:C2,40|9e13e002f606201880a1001b8bd02018d2022004d0022000da036004f403600081c6a00401000000|@480,131071| 480:S41|5072657474795072696e7465722e7072657474795072696e74283329626567696e426c6f636b283129 481:O1|@482 482:C2,16|9e13e0029010200181c3e00601000000|@483,129| 483:S38|5072657474795072696e7465722e7072657474795072696e74283329656c6964696e67283129 484:S28|5072657474795072696e7465722e7072657474795072696e74283329 485:O2|1,0 486:O2|@488,@487 487:O2|@580,@486 488:C2,5104|9e13e002f606201880a1001b8bd02018d2213ffcda213ff8c40220008088a0010280002588013ff880a0bfd5268000220100000080a0a02d3480001f010000002f3f001fae05e2daba00a029fa05c01d81c5c01d010000000000114e00000bd6000010ae00000baa0000073200000c8e0000037a0000022a00000a12000000ee00000aae0000011e00000d8200000a520000110a0000014a0000005a000006ae00000d6a0000010600000a82000010de0000129ade213ffcfa022004fa213ff8113f00249002228cda026018f40360009fc6a00088013ff8ec01200c113f002490022298da05a00cf40360009fc6a00001000000ea012008d201200cd0012000da056004f40360009fc6a00001000000e801200c113f0024900222a8da05200cf40360009fc6a00001000000e601200c90102001da04e008de012004f403600081c6a00488012010113f0024900222bcda02600cf403600081c6a00488012008113f0024900222c8da02600cf403600081c6a00488012008de213ffc153f00249402a2dcd2022008d00220049a012004400004b788013ffcec01200081c5a0068801200cde213ffcfa022004fa213ff8fa022008fa213ff4fa02200cfa213ff0113f0025900222b4da026018f40360009fc6a00088013ff0d2012014d0012004da0120107fffff889e13e002ec012014113f00259002227cda05a000f40360009fc6a00001000000ea01200080a560012280001194102091e8012014113f0025900222c0da05200cf40360009fc6a00001000000e6012014113f00259002227cda04e000f40360009fc6a0000100000094102091d2012008901020b19a0120144000057c01000000e801201490102001da052008de01200cf403600081c6a00488012018de213ffcfa022004fa213ff8fa022008fa213ff4fa02200cfa213ff0113f001f9002225cda026018f40360009fc6a00088013ff0ec012014fa05a00cfa213ffc92103ffdd00120084000063088013ffcd0213ffc92103ffdd00120044000062b88013ffc8c21a00c8b19600cba102002aa100006fa21bffc293f0027a8052358e8256004d02560008c21a00c8b19600cba102002a6100006fa21bffcea24e004a41021ede424e0008c21a00c8b19600cba102002a2100006fa21bffce6246004e0012000e02460008c21a00c8b19600cba10200290100006fa21bffce22220041f3f00279e03e374de2220004000076501000000da012004f40360009fc6a00001000000c201201c113f001f9002225cda006000f40360009fc6a00001000000d201201cd001200cda0120187fffff159e13e002da01201c90102001da036008de012014f403600081c6a00488012020ec02201080a5a00122800006010000002b3f0028aa0562f410800005e80220082b000083aa0563d8e802200880a520013280003ee6022004de213ffcfa022004fa213ff8ea213ff492103ffdd002200c400005da88013ff4d0213ffc92103ffdd0012004400005d588013ffc8c21a00c8b19600cba102002a4100006fa21bffc233f0028a2046304e224a004e0012004e024a0008c21a00c8b19600cba1020029e100006fa21bffce423e004d023e0008c21a00c8b19600cba10200282100006fa21bffcde2060049a1020b1da2060008c21a00c8b19600cba10200298100006fa21bffcc2232004d6012000d62320008c21a00c8b19600cba10200290100006fa21bffcd8222004153f00289402a310d42220004000070701000000a61000081080007fd2012014b824e001811f200036800042de213ffcde213ffce6213ff8ea213ff492103ffdd002200c4000059b88013ff4e4012004b824a001ba102000b91f401ca2072001d0213ffc92103ffd901000114000059188013ffc8c21a00c8b19600cba102002a0100006fa21bffc1f3f00289e03e304de242004c2012004c22420008c21a00c8b19600cba1020029a100006fa21bffce0236004d02360008c21a00c8b19600cba10200298100006fa21bffcda232004961020b1d62320008c21a00c8b19600cba10200294100006fa21bffcd822a004d2012000d222a0008c21a00c8b19600cba10200290100006fa21bffcd4222004053f00288400a320c4222000400006c301000000a61000081080003bd2012014e6213ff8ea213ff492103ffdd002200c4000055c88013ff4d0213ffc92103ffdd00120044000055788013ffc8c21a00c8b19600cba102002a4100006fa21bffc233f0028a2046304e224a004e0012004e024a0008c21a00c8b19600cba1020029e100006fa21bffce423e004d023e0008c21a00c8b19600cba10200282100006fa21bffcde2060049a1020b1da2060008c21a00c8b19600cba10200298100006fa21bffcc2232004d6012000d62320008c21a00c8b19600cba10200290100006fa21bffcd8222004153f00289402a330d42220004000068901000000a6100008d201201490100013da02600cde01200cf403600081c6a00488012018de213ffcfa022004fa213ff892103ffdd00220084000051c88013ff892100008113f002890022340400003a701000000133f002592026270400003a301000000ec01200cda05a00cf40360009fc6a00001000000d201200cd0012000da0120087ffffe279e13e002ea01200c901020a5da05600cde012004f403600081c6a00488012010ec022004e805a01480a53ffd3280000680a520012b000083aa0563d810800011de213ffc3280000680a53ff92b3f0028aa0563541080000bde213ffc32800006010000002b3f0028aa05636410800005de213ffc2b3f0028aa056374de213ffcfa05a000fa213ff8fa05a004fa213ff4fa05a008fa213ff0fa05a00cfa213fecfa05a010fa213fe8fa05a018fa213fe4fa05a01cfa213fe0ea213fdc113f00249002228cda026018f40360009fc6a00088013fdce6012028fa04e00cfa213ffcd2012000113f0028900223884000035d88013ffc921020a14000035a01000000da012000f40360009fc6a00001000000e401202c113f001f9002225cda04a000f40360009fc6a00001000000e201202cd001201cda04600cf40360009fc6a00001000000e001202c113f001f9002225cda042000f40360009fc6a00001000000de01202cda01200880a360053280000601000000033f000f8200610010800005fa03e00c033f002882006398fa03e00cfa213ffc92100001113f0028900223a84000033088013ffcda012000f40360009fc6a00001000000d8012030fa03200cfa213ffc92103ffdd00120104000049588013ffc92100008113f0028900223b44000032001000000da012000f40360009fc6a00001000000d6012034fa02e00cfa213ffc92103ffdd00120204000048588013ffc92100008113f0028900223c04000031001000000da012000f40360009fc6a00001000000d4012038fa02a00cfa213ffc92103ffdd001201c4000047588013ffc92100008113f0028900223d04000030001000000da012000f40360009fc6a00001000000153f00289402a3e0d2012024901020b19a01203c4000039601000000d201203c113f001f9002225cda026000f40360009fc6a00001000000d201203cd0012030da0120387ffffd779e13e002d001203cc402200c113f0028900223f09a100002f40360009fc6a00001000000ee01203c90102001da05e008de012034f403600081c6a00488012040de213ffcfa02600cfa213ff8d0022004400006c288013ff892100008113f002a90022010400002cf01000000da012000de012004f403600081c6a00488012010de213ffc173f002a9602e01cd402200cd2022008d00220049a012004400007b888013ffcec01200081c5a0068801200cde213ffc153f002a9402a214d2022004901020ed9a0120044000035788013ffcec01200081c5a0068801200cde213ffcfa022004fa213ff8fa022008fa213ff4113f0025900222b4da026018f40360009fc6a00088013ff4153f002a9402a224d2012000901020b19a0120104000034201000000ec012010113f00259002227cda05a000f40360009fc6a00001000000ea012010901020a1da05600cf40360009fc6a00001000000e8012010113f00259002227cda052000f40360009fc6a00001000000d2012010d0012004da01200c7ffffd169e13e002e6012010113f00259002227cda04e000f40360009fc6a00001000000e4012010901020a5da04a00cf40360009fc6a00001000000e201201090102001da046008de012008f403600081c6a00488012014de213ffc153f002a9402a238d2022004901020b19a0120044000030d88013ffcec01200081c5a0068801200cde213ffcfa022004fa213ff8113f00249002228cda026018f40360009fc6a00088013ff8ec01200cfa05a00cfa213ffc921020a1113f002a900222444000025888013ffcda012000f40360009fc6a00001000000d2012010d0012004da01200c7ffffcdd9e13e002ea012010113f00259002227cda056000f40360009fc6a00001000000e8012010901020a5da05200cf40360009fc6a00001000000e601201090102001da04e008de012008f403600081c6a00488012014de213ffcfa022004fa213ff8fa022008fa213ff4113f0025900222b4da026018f40360009fc6a00088013ff4ec012010113f002a90022254da05a00cf40360009fc6a00001000000d2012010d0012004da01200c7ffffcb29e13e002ea012010113f002a90022264da05600cf40360009fc6a00001000000e8012010113f001f9002225cda052000f40360009fc6a00001000000d2012010d0012000da01200c7ffffc9f9e13e002e6012010901020a5da04e00cf40360009fc6a00001000000e401201090102001da04a008de012008f403600081c6a00488012014113f002a90022270da02600cf403600081c6a00488012008ec022004de213ffcfa05a000fa213ff8fa05a004fa213ff4fa05a008fa213ff0fa05a00cfa213fecfa05a010fa213fe8113f00249002228cda026018f40360009fc6a00088013fe8ea01201cfa05600cfa213ffc92103ffdd001200c4000035588013ffcd0213ffc92103ffdd00120144000035088013ffc8c21a00c8b19600cba102002a8100006fa21bffc273f002aa604e280e6252004d02520008c21a00c8b19600cba102002a4100006fa21bffce824a004a21020b5e224a0008c21a00c8b19600cba102002a0100006fa21bffce4242004de012000de2420008c21a00c8b19600cba10200290100006fa21bffce0222004033f002a8200628cc22220004000048a01000000da012004f40360009fc6a00001000000d2012024d0012010da0120207ffffc419e13e002da012024901020a5da03600cf40360009fc6a00001000000d8012024113f001f9002225cda032000f40360009fc6a00001000000d6012024901020a1da02e00cf40360009fc6a00001000000d4012024113f001f9002225cda02a000f40360009fc6a000010000008c21a0108b196010ba10200392100006fa21bffc113f002a9002229cd0226000c4012020c4226008ee012024ee2260048c21a00c8b19600cba102002ac100006fa21bffc2b3f002aaa0563e0ea25a000d225a004d401200c921020b1901000169a0120244000028801000000e8012008e605200080a4fff932800004e401202410800029da012024113f001f9002225cda04a000f40360009fc6a00001000000e2012024113f001f9002225cda046018f40360009fc6a00001000000e0012024113f002b90022048da04200cf40360009fc6a00001000000de012024113f001f9002225cda03e000f40360009fc6a00001000000d2012024d0012008da0120207ffffbe59e13e002c201202490102001da006008f40360009fc6a00001000000da012024113f001f9002225cda036000f40360009fc6a00001000000d8012024fa03200cfa213ffc133f002b92026058113f002b900220644000014188013ffc921021f54000013e01000000da012000f40360009fc6a00001000000d601202890102001da02e008de012020f403600081c6a0048801202cde213ffc153f002b9402a070d2022004113f002b900220809a012004400001cb88013ffcec01200081c5a0068801200cde213ffc153f002b9402a090d2022004901020b19a012004400001c088013ffcec01200081c5a0068801200cde213ffcfa02600cfa213ff892103ffdd00220044000028588013ff892100008113f002b900220a44000011001000000da012000de012004f403600081c6a00488012010de213ffcfa022004fa213ff8fa022008fa213ff4fa02200cfa213ff0113f0025900222b4da026018f40360009fc6a00088013ff0ec012014fa05a00cfa213ffc92103ffdd00120084000026788013ffc92100008113f002b900220b8400000f201000000133f002592026270400000ee01000000da012000f40360009fc6a00001000000d2012018d0012004da0120147ffffb739e13e002ea012018113f00259002227cda056000f40360009fc6a00001000000e8012018901020b1da05200cf40360009fc6a00001000000e6012018113f001f9002225cda04e000f40360009fc6a00001000000d2012018d0012008da0120147ffffb5a9e13e002e4012018113f00259002227cda04a000f40360009fc6a00001000000e2012018901020a5da04600cf40360009fc6a00001000000e001201890102001da042008de012010f403600081c6a0048801201cde213ffcfa022004fa213ff8fa022008fa213ff4113f0025900222b4da026018f40360009fc6a00088013ff4ec012010fa05a00cfa213ffc92103ffdd00120004000021688013ffc92100008113f002b900220d0400000a101000000133f0025920262704000009d01000000da012000f40360009fc6a00001000000ea012014113f00259002227cda056000f40360009fc6a00001000000d2012014d0012008da0120107ffffb1b9e13e002e8012014113f00259002227cda052000f40360009fc6a00001000000e6012014901020a5da04e00cf40360009fc6a00001000000e401201490102001da04a008de01200cf403600081c6a00488012018|@579,131071|64,4,$488+90 192,4,@489 220,4,@490 276,4,@491 328,4,@492 352,4,@493 380,4,@494 400,5,@495 448,4,@501 496,4,@499 540,4,@502 568,4,@499 608,5,@503 672,4,@485 716,5,@509 736,5,@509 764,4,@517 868,4,@519 880,5,@520 908,4,@485 996,4,@524 1012,4,I48 1060,5,@509 1080,5,@509 1108,4,@525 1244,4,@526 1256,5,@520 1312,5,@509 1352,5,@509 1380,4,@525 1516,4,@527 1528,5,@520 1564,5,@509 1584,5,@509 1612,4,@525 1748,4,@528 1760,5,@520 1820,5,@509 1832,4,@529 1840,5,@496 1848,4,@498 1856,5,@496 1952,4,I48 1976,4,@530 2000,4,@531 2016,4,@532 2088,4,@489 2128,4,@533 2136,5,@496 2148,5,@496 2176,4,@485 2228,4,@485 2272,4,@379 2288,4,@534 2308,4,@535 2316,5,@496 2360,5,@509 2372,4,@536 2380,5,@496 2424,5,@509 2436,4,@537 2444,5,@496 2488,5,@509 2500,4,@538 2508,5,@496 2532,4,@539 2552,5,@503 2564,4,@485 2616,4,@540 2684,5,@541 2696,4,@553 2704,5,@496 2736,4,@554 2760,5,@555 2784,4,@557 2804,5,@503 2844,4,@501 2868,4,@558 2888,5,@503 2900,4,@499 2952,4,@499 3000,4,@499 3080,4,@559 3100,5,@503 3132,4,@489 3172,4,@560 3180,5,@496 3228,4,@499 3324,4,@501 3352,4,@561 3400,4,@562 3428,4,@485 3524,4,@563 3596,4,@489 3640,5,@509 3660,5,@509 3688,4,@564 3792,4,@565 3804,5,@520 3876,4,@485 3928,4,@485 3972,4,@566 4020,4,@568 4052,5,@506 4088,4,@485 4116,4,@485 4144,4,@570 4172,4,@485 4244,4,@485 4280,4,@571 4288,4,@572 4296,5,@496 4308,5,@496 4364,4,@573 4376,4,@574 4388,5,@503 4412,4,@575 4432,5,@503 4472,5,@509 4484,4,@576 4492,5,@496 4548,4,@501 4592,5,@509 4604,4,@577 4612,5,@496 4620,4,@498 4628,5,@496 4676,4,@499 4728,4,@485 4776,4,@499 4872,4,@501 4916,5,@509 4928,4,@578 4936,5,@496 4944,4,@498 4952,5,@496 4980,4,@499 5028,4,@499 489:O2|1,1 490:S7|474c4f42414c20 491:S11|20282a474c4f42414c2a29 492:S3|4e494c 493:S9|4d415443484641494c 494:S8|414c544d41544348 495:C2,324|9e13e002f606201880a1001b8bd02018c4036000de213ffcda213ff8d0213ff4d2213ff0d4213fec113f00249002228cda00a018f40360009fc6a00088013fecee01200cec05e000fa05a00cfa213ffc921020a1d00120004000004288013ffcda012000f40360009fc6a00001000000ea012010d2056000d001200cda057ffcf40360009fc6a00001000000e8012010e6052000113f002590022270da04e00cf40360009fc6a00001000000e4012010e204a000113f00259002227cda046000f40360009fc6a00001000000e0012010d2042000d0012008da043ffcf40360009fc6a00001000000de012010c203e000113f00259002227cda006000f40360009fc6a00001000000da012010d8036000901020a5da03200cf40360009fc6a00001000000d6012010d402e00090102001da02a008de012014f403600081c6a00488012018|@500,131071|40,4,@489 88,5,@496 148,4,@498 180,4,@499 240,4,@499 496:C2,508|9e13e002f606201880a1001b8bd02018808a200132800004b8102004f8022000b92f200284072001808a600132800004b8102004f8026000b92f2002ae07200180a0a0013280000580a5e0019010000981c3e0060100000032800004b825e00181c3e00601000000ac00801caa85a020a8a56004de213ffcd0213ff8d2213ff4c4213ff0ee213fecec213fe892102011901000141b0000899a0363f8f40360009fc6a00088013fe8c6213ffc273f0025a604e13ee6213ff8a4102001e4213ff486013ff494102001921021051b0000829a036338f40360009fc6a00088013ff4a2100008c601200810800009e001200c113f0007900223e4f40620209fc6a00001000000a2102001e001200cbb3c2002fa246000c201201480a0600532800007e2213ffcda01201cbb336002fa2c60041080000fe2213ffcde213ff8c2213ff4961020119410001192102011d001201c1b0000889a036298f40360009fc6a00088013ff410800005d8012018de213ff888013ff8d801201880a320053280000bd601201cd601201c9482e010d2012004d0012020bb322002b93aa002fa2a401c1080000ed00120049482e010d8213ffc9610000ad401200492102011d00120201b0000889a036298f40360009fc6a00088013ffcd00120041b0000839a0363b8f40360009fc6a00001000000d0012004d201202881c260068801202c|@497,131071|148,4,I241 172,4,$496+242 204,4,I11 240,4,@251 336,4,I198 448,4,I198 472,4,I47 497:S4|5e283229 498:S2|2c20 499:O2|0,0 500:S34|42617365436f6465547265652e7072657474792832297072696e7444696164283329 501:O2|3,0 502:S7|7b6561726c797d 503:C2,280|9e13e002f606201880a1001b8bd02018c4036000de213ffcda213ff8d0213ff4d2213ff0d4213fec113f00249002228cda00a018f40360009fc6a00088013fecee01200cec05e000fa05a00cfa213ffc921020a1d00120007fffff4988013ffcda012000f40360009fc6a00001000000ea0120108c21a0108b196010ba102003a8100006fa21bffc273f0026a604e004e6252000e4056000e4252008e2057ffce2252004d4012008d201200c901000149a1000154000003c01000000e0012010de042000113f00259002227cda03e000f40360009fc6a00001000000c2012010da006000901020a5da03600cf40360009fc6a00001000000d8012010d603200090102001da02e008de012014f403600081c6a00488012018|@508,131071|40,4,@489 88,5,@496 136,4,@504 180,5,@506 196,4,@499 504:C2,36|9e13e002f606201880a1001b8bd02018d2036008da036004f403600081c6a00401000000|@505,131071| 505:S37|42617365436f6465547265652e7072657474792832297072696e744c697374283329283129 506:C2,296|9e13e002f606201880a1001b8bd0201880a2a00132800005c402a0049010200181c3e0060100000080a0a00132800008ee036000ae100008d002a0009a100017f403600081c6a00401000000de213ffcda213ff8d0213ff4d2213ff0c4213fecfa02a000fa213fe8113f00259002227cda05e018f40360009fc6a00088013fe8d0012000da01200cf40360009fc6a00001000000ec012010ea05a000113f00259002227cda056000f40360009fc6a00001000000e8012010e6052000d0012008da04e00cf40360009fc6a00001000000e4012010e204a00090102001da046008f40360009fc6a00001000000e0012010de042000113f001f9002225cda03e000f40360009fc6a00001000000d4012004d2012008d001200cda012010de01201410bfffb988012018|@507,131071|104,4,@499 156,4,@499 244,4,@485 507:S30|42617365436f6465547265652e707265747479283229704c697374283329 508:S34|42617365436f6465547265652e7072657474792832297072696e744c697374283329 509:C2,280|9e13e002f606201880a1001b8bd02018b8222001811f20003680002880a2600180a260013280000580a27ff9841020091080000bb82220013280000580a27ffd8410202110800006b8222001328000038410204184102029b8222001ba102000b91f401cae072001de213ffc9410000292100017901020014000002f88013ffc8c21a00c8b19600cba102002ac100006fa21bffcd025a004aa1021f9ea25a00090100016de012000353f0027b406a12c81c6a004880120043280000580a27ff9841020091080000bde213ffc3280000580a27ffd8410202110800006de213ffc328000038410204184102029de213ffc9410000292100008901020014000000e88013ffcde012000353f0027b406a12c81c6a00488012004|@516,131071|120,5,@510 168,4,@514 252,5,@510 264,4,@514 510:C2,412|9e13e002f606201880a1001b8bd02018de213ffcd0213ff8d2213ff4d4213ff09210000ad0013ff41b0000859a036398f40360009fc6a00088013ff0b8222001811f202836800018b8222001b8222001b91720c0ae072001811f200036800004b825e0011080000701000000811f23fc34800004010000001080002084100017113f0027900220f8f40620209fc6a00001000000841020018410001710800018ec012004b917210484072001b91f2028ae072001811f200036800004b825e0011080000701000000811f23fc34800004010000001080000984100017113f0027900220f8f40620209fc6a000010000008410200184100017ec012004ea012000b8256001ba25a001811f401c3680000ec4213ffc8c21a00c8b19600cba102002a8100006fa21bffce6012008e6252004c425200090100014e401200c81c4a0068801201092100015901000161b0000859a036378f40360009fc6a00088013ffc8c21a00c8b19600cba102002a8100006fa21bffce601200ce6252004e4012000e4252000d40120049210000890100014de01201010bfff9c88012014|@513,131071|40,4,I110 128,4,@511 220,4,@511 332,4,I109 511:O3|@27,@512,0 512:S3|436872 513:S14|496e742e746f4368617273283329 514:C2,468|9e13e002f606201880a1001b8bd0201880a2200132800006de213ffc11000083900223d881c3e00601000000d0213ff8fa022000fa213ff48410200188013ff480a2200132800005b820a001ae1000021080000a808de001b91720049e072001d00220048410000ff606201880a1001b8bd0201830bffff32280000901000000b825e001811f20002680000501000000ac1000171080000980a5a005113f0007900223e4f40620209fc6a00001000000ac10200180a5a005328000069e85a020d0012000de01200881c3e0068801200c90a3e004ec213ffc921020111b0000899a0363f8f40360009fc6a00088013ffcc6213ffc053f00278400a266c4213ff8ae102001ee213ff486013ff494102001921021051b0000829a036338f40360009fc6a00088013ff4ac100008c601200810800009ea01200c113f0007900223e4f40620209fc6a00001000000ac102001ea01200cbb3d6002fa25a000ec213ffce8213ff8a6102011e401201488013ff880a4a00132800004e20120041080000dd0012004e004a000bb342002b93ce002fa2c401c9e84e004e404a004a610000ff606201880a1001b8bd0201830bffff11b0000839a0363b8f40360009fc6a00001000000d0012004e201202081c4600688012024|@515,131071|28,4,I48 156,4,@251 220,4,I241 244,4,$514+314 276,4,I11 312,4,@251 432,4,I47 515:S31|4c696272617279537570706f72742e737472696e67496d706c6f6465283129 516:S10|496e742e666d74283229 517:O2|@518,0 518:S8|20757365737d203d 519:S6|4445434c2023 520:C2,800|9e13e002f606201880a1001b8bd0201880a2200132800006c402200411000083900223d881c3e0060100000080a0a00132800005de213ffcd002200081c3e00601000000d0213ff8ae10200188013ff880a2200132800005de022000ac1000171080001180a5a001808be00132800004b8102004f803e000b92f200284072001ba25e001b917401cac072001ae100016d0022004f606201880a1001b8bd0201830bfffec3280000780a5a00511000083900223d8de01200481c3e0068801200832800024808da001de01200080a3e00132800009de213ffc113f0028900222c0f40620209fc6a0000100000090102001de213ffcfa03e000fa213ff8d2013ff811000083900223d81b0000839a0360d8f40360009fc6a00088013ff880a2200122800009d0012000c2012004de00600488012008f606201880a1001b8bd0201830bfffe3c201200c81c06006880120102280000901000000b825a001811f20002680000501000000aa10001610800009a8856020113f0007900223e4f40620209fc6a00001000000aa102001a8856020a6a52004ea213ffc92102011901000131b0000899a0363f8f40360009fc6a00088013ffcc6213ffc253f0028a404a182e4213ff8a2102001e2213ff486013ff494102001921021051b0000829a036338f40360009fc6a00088013ff4a0100008c601200810800009de01200c113f0007900223e4f40620209fc6a00001000000a0102001de01200cbb3be002fa242000e0213ffcc2213ff89a102011d801201088013ff880a3200132800004d60320001080002fd0012004808ae00132800004b8102004f802e000b92f20029407200180a2a00532800008da213ffcd2012004bb32e002b93b6002fa2a401c10800011da213ffcfa032004fa213ff8d4213ff4d4213ff09610000dd401200492102011d00320001b0000889a036298f40360009fc6a00088013ff010800007d0012008fa032004fa213ff8d4213ff488013ff4d0012008c4012000b820a001ae02001cd80120049a1000178801200cf606201880a1001b8bd0201830bfffcf1b0000839a0363b8f40360009fc6a00001000000d0012004d601201c81c2e00688012020|@523,131071|28,4,I48 172,4,I48 216,4,@521 256,4,I48 264,4,I24 372,4,@251 416,4,I241 440,4,$520+510 472,4,I11 508,4,@251 676,4,I198 764,4,I47 521:O3|103,@522,I48 522:S4|4661696c 523:S16|537472696e672e636f6e636174283129 524:S6|2c206c617374 525:O2|41,0 526:S5|434c4f5328 527:S6|504152414d28 528:S6|4c4f43414c28 529:S9|494e44495245435428 530:S6|494e4c494e45 531:S5|534d414c4c 532:S10|4f4e4c59494e4c494e45 533:S6|4c414d424441 534:S5|66616c7365 535:S3|434c3d 536:S4|2043523d 537:S5|204c45563d 538:S6|20415247533d 539:S6|20434c4f533d 540:S9|297b4c414d4244417d 541:C2,808|9e13e002f606201880a1001b8bd02018808a20012280001e808a2001808a200122800005de213ffc8410000810800009b820a001113f002990022348f40620209fc6a00088013ffc84102001b820a001811f200036800008ae100002113f000e90022330b820a001ba222001b917401cae0720019210200590100017353f0026b406a20c81c6a004010000002280000b84100008de213ffcae100008113f002990022374f40620209fc6a00088013ffc8410200184100008de213ffcd0213ff892100002901021991b0000879a036098f40360009fc6a00088013ff880a220012280002bc40120008410200180a0a40132800009c4213ffc113f002990022398f40620209fc6a0000100000090102001c4213ffc901000021b0000889a036178f40360009fc6a00088013ffcee01200480a5c0083280000eec01200092103ffdd00120007ffffd310100000092100008113f0029900223c4de012008353f0025b406a04c81c6a0048801200cb825a001b91720048407200188012004f606201880a1001b8bd0201830bfffd98088a00122800009ae100002113f002990022374f40620209fc6a00001000000ae102001ae100002fa0dfffcb92f6002ac072001aa0da00d80a5600132800053010000008088a00122800009a8100002113f002990022374f40620209fc6a00001000000a8102001a8100002fa053ffcbb2f6008b9376006a6072001811f200036800008a4100013233f000ea2046330b824e001ba246001b917401ca4072001b824a001811f200426800038010000008088a00122800009a4100002113f002990022374f40620209fc6a00001000000a4102001a4100002e204a000808c60013280002501000000808c600122800009a0100011113f002990022374f40620209fc6a00001000000a0102001a0100011fa0c3ffcb92f60029e072001820be00d80a06009328000140100000092100011901021a51b0000879a036098f40360009fc6a0000100000092100008113f0029900223d07ffffb5a01000000921020a5de012004353f0025b406a04c81c6a00488012008113f0029900223dce001200481c4200688012008113f0029900223dce801200481c5200688012008|@552,131071|52,4,@542 92,4,@349 124,4,@509 156,4,@545 200,4,I150 248,4,@547 280,4,I189 324,5,@509 336,4,@549 348,4,@496 408,4,@545 476,4,@545 532,4,@349 584,4,@545 640,4,@545 704,4,I150 728,4,@550 736,5,@496 752,4,@496 768,4,@551 788,4,@551 542:O3|@28,@544,@543 543:S7|746f53686f7274 544:S4|43617374 545:O3|@28,@544,@546 546:S9|746f41646472657373 547:O3|@24,@397,@548 548:S17|556e6b6e6f776e2052545320656e747279 549:S4|20525453 550:S2|2028 551:S6|3c6c6f6e673e 552:S28|42617365436f6465547265652e737472696e674f66576f7264283129 553:S3|4c4954 554:S2|4946 555:C2,420|9e13e002f606201880a1001b8bd02018c4036000de213ffcda213ff8d0213ff4d2213ff0d4213fecd6213fe8113f00249002228cda00a018f40360009fc6a00088013fe8ee012010ec05e000fa05a00cfa213ffc921020a1d00120007ffffaf288013ffcda012000f40360009fc6a00001000000ea012014d2056000d0012010da057ffcf40360009fc6a00001000000e8012014e6052000113f002590022270da04e00cf40360009fc6a00001000000e4012014e204a000113f00259002227cda046000f40360009fc6a00001000000e0012014d2042000d001200cda043ffcf40360009fc6a00001000000de012014c203e000113f002590022270da00600cf40360009fc6a00001000000da012014d8036000113f00259002227cda032000f40360009fc6a00001000000d6012014d202e000d0012008da02fffcf40360009fc6a00001000000d4012014d202a000113f00259002227cda026000f40360009fc6a00001000000d0012014c4022000901020a5da00a00cf40360009fc6a00001000000ee012014ec05e00090102001da05a008de012018f403600081c6a0048801201c|@556,131071|44,4,@489 92,5,@496 152,4,@498 184,4,@499 244,4,@498 276,4,@499 336,4,@499 556:S35|42617365436f6465547265652e7072657474792832297072696e745472696164283429 557:S5|424c4f434b 558:S9|424547494e4c4f4f50 559:S4|4c4f4f50 560:S5|5241495345 561:S7|48414e444c4528 562:S4|57495448 563:S5|4c44455843 564:O2|40,0 565:S5|4341534520 566:C2,260|9e13e002f606201880a1001b8bd02018c4036004de213ffcda213ff8d0213ff4d2213ff0113f00249002228cda00a018f40360009fc6a00088013ff0ee01200080a5e00132800004ec01200810800020ec012008ea05a004fa05e004fa213ffcfa05600cfa213ff892103ffdd005e0007ffffbc088013ff8921020e97ffffa4d01000000da012000f40360009fc6a00001000000e8012010e6052004113f001f9002225cda04e000f40360009fc6a00001000000ee01200488012008f606201880a1001b8bd0201830bfffded205a004d0012004da05a008f40360009fc6a00001000000ea012008e805600490102001da052008de01200cf403600081c6a00488012010|@567,131071|36,4,@489 112,5,@509 124,5,@496 156,4,@485 567:S25|42617365436f6465547265652e707265747479283229283229 568:C2,40|9e13e002f606201880a1001b8bd02018d2022004d0022000da036004f403600081c6a00401000000|@569,131071| 569:S25|42617365436f6465547265652e707265747479283229283129 570:S5|454c53453a 571:S4|43415345 572:S3|29207b 573:S6|4d555455414c 574:S5|20414e4420 575:S9|524543434f4e535452 576:S10|434f4e5441494e455220 577:S13|534554434f4e5441494e455228 578:S15|5455504c45434f4e5441494e455228 579:S22|42617365436f6465547265652e707265747479283229 580:C2,312|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d0213ff4d2213ff0901020a1da02600cf40360009fc6a00088013ff0c4012004ec00a00080a5bffd3280000680a5a005ea00a004ee05600810800006ea01200832800003ee00a004ee00a008ea012008d201200090100017da056004f40360009fc6a00001000000e8012000113f002590022270da05200cf40360009fc6a00001000000e6012000113f001f9002225cda04e000f40360009fc6a00001000000e4012004e004a00080a43ffd3280000601000000de04a004e203e01010800005de012008233f002ba204625cde012008d201200090100011da03e004f40360009fc6a00001000000c2012000113f001f9002225cda006000f40360009fc6a00001000000da012000901020a5da03600cde01200cf403600081c6a00488012010|@582,131071|132,4,@498 160,4,@485 220,4,@581 260,4,@485 581:O1|-2 582:S28|42617365436f6465547265652e7072657474794f707456616c283229 583:O3|@24,@397,@584 584:S21|6368616e67654c3a20556e6b6e6f776e20636f6465 585:C2,140|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffc9010200181c3e00601000000da213ff8fa022004fa213ff4d2037ff8d0022000da037ffc7fffe50988013ff4d0213ffcd0012000da0120047fffffeb88013ffc8c21a00c8b19600cba10200284100006fa21bffcd020a004ee012000ee20a00090100002ec01200c81c5a00688012010|@586,131071|64,5,@399 586:S11|4c6973742e6d6170283229 587:C2,140|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffc9010200181c3e00601000000da213ff8fa022004fa213ff4d2037ffcd0022000da0360007fffe4da88013ff4d0213ffcd0012000da0120047fffffeb88013ffc8c21a00c8b19600cba10200284100006fa21bffcd020a004ee012000ee20a00090100002ec01200c81c5a00688012010|@586,131071|64,5,@399 588:S35|434f44455452454528292e6368616e67654c6576656c2832296368616e67654c283229 589:O1|@590 590:C2,32|9e13e002de213ffc113f002c9002208cf40620209fc6a00088013ffc90102001|@593,129|8,4,@591 591:O3|@24,@397,@592 592:S9|6572726f7220656e76 593:S22|434f44455452454528292e6572726f72456e76283129 594:O1|@595 595:C2,32|9e13e002de213ffc113f002c9002208cf40620209fc6a00088013ffc90102001|@593,129|8,4,@591 596:O3|@24,@397,@597 597:S26|6368616e67654c6576656c3a20556e6b6e6f776e20656e747279 598:S25|434f44455452454528292e6368616e67654c6576656c283229 599:S44|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229656e76283329 600:O1|@624 601:O1|@602 602:O2|-1,@603 603:O5|0,@605,@616,@29,@604 604:O2|-7,@617 605:O2|@607,@606 606:O2|@613,0 607:C2,160|9e13e002f606201880a1001b8bd02018c402200880a0a0013280001cde213ffcee022000a610000fe4022004d205e000d00360044000002201000000808a200132800005e6213ffce20220001080000992100011113f000f9002239cf40620209fc6a00088013ffca210200192100011901000129e100013353f000fb406a3d481c6a00401000000113f002d90022024f40620209fc6a00088013ffc90102001|@612,131071|52,5,@608 84,4,@395 120,4,@398 136,4,@610 608:C2,312|9e13e002c4022000ee00a000ec05e00080a5bffd32800025ea05e004ea05e004e8056000b8252001ba226001811f401c3680001cd0022004b8226001811f200036800004e805600010800009de213ffcb8252001ba226001811f401c36800004de213ffc10800009b8226001113f0004900223d0f40620209fc6a00088013ffc90102001b8226001b9172004a8072001d205401c9010000981c3e0060100000081c3e00601000000fa057ffcbb2f6008b9376006a8072001ba226001811f401c3680001cd0022004b8226001811f200036800004fa057ffc1080000bde213ffcbb2f6008b9376006a8072001ba226001811f401c36800004de213ffc10800009b8226001113f0004900223d0f40620209fc6a00088013ffc90102001b8226001e805401c9010001481c3e0060100000081c3e00601000000|@609,127107|108,4,@224 260,4,@224 609:S19|5374726574636841727261792e737562283229 610:O3|@24,@397,@611 611:S36|6f75746572206c6576656c207265616368656420696e206c6f6f6b75704f6c6441646472 612:S50|434f44455452454528292e67656e436f6465283229696e736572746564436f64652d6c6f6f6b75704f6c6441646472283129 613:O1|@614 614:O2|0,@615 615:O10|0,0,0,0,0,0,0,0,0,0 616:O5|-5,1,1,0,0 617:O8|@618,@379,0,0,1,0,0,0 618:O4|4,@620,@619,1 619:O2|-3,I229 620:O2|@622,@621 621:O2|@623,0 622:O2|-3,1 623:O5|-5,-1,1,0,0 624:O2|0,@622 625:O2|@636,@635 626:C2,616|9e13e002f606201880a1001b8bd02018841000088c21a0108b196010ba10200390100006fa21bffcd4222008d2222004c4222000de213ffcda213ff89a10000bf40360009fc6a00088013ff8ec02200080a5bffd3280000601000000ea022004ee05601010800005e805e0002f3f002bae05e25ce805e00080a53ff93280000680a5bffd2b3f002eaa0560101080001680a5bffd3280000601000000e4022004e604a004108000058c21a010273f002ea604e0548c21a0108b196010ba102003aa100006fa21bffc253f002ea404a098e4256000e2012000e2256008e625600480a5bffd3280000780a5a005e00220049e100008d00420081080000b8210000f32800006a0100008a0100008d0042008108000049e100010d00420049e1000108210000f98100017961000159a0120044000008a01000000d200600080a27ffd3280000680a26005c4006004d400a0001080000680a27ffd3280000394102001d400600480a27ffd328000068c21a008ee006004c405e00c1080000a8c21a0188b1960083b100000ba07600184100006fa21bffcae102001ee20a0008c21a0188b196018ba102005ac100006fa21bffcd825a010c425a00cd025a008d625a004d425a000ea03200080a57ff93280001d8c21a00c80a2a0013280000ea8100008a81000088c21a00c8b19600cba10200290100006fa21bffce8222004a6102001e6222000e401200481c4a006880120088c21a0108b196010ba10200390100006fa21bffce8222008d4222004a6102005e6222000e401200481c4a006880120088b19600cba10200290100006fa21bffcec222004a8103ffde8222000e601200481c4e00688012008|@634,131071|108,4,@581 132,4,@627 172,4,@629 200,4,@631 304,5,@632 627:O1|@628 628:C2,32|9e13e002de213ffc113f002c9002208cf40620209fc6a00088013ffc90102001|@593,129|8,4,@591 629:O1|@630 630:C2,32|9e13e002de213ffc113f002c9002208cf40620209fc6a00088013ffc90102001|@593,129|8,4,@591 631:C2,48|9e13e002f606201880a1001b8bd02018d6036004d4022008d2022004d0022000da036008f403600081c6a00401000000|@388,131071| 632:C2,364|9e13e002f606201880a1001b8bd02018c402200080a0bfed3280001d80a0a019ee037ffcec022004808da00122800005de213ffcaa10001610800009e805e004113f002990022348f40620209fc6a00088013ffcaa102001e805e004b8256001e605001c8c21a00c8b19600cba10200290100006fa21bffce622200484103ff5c422200081c3e006010000003280003601000000de213ffcda213ff8d0213ff4fa022008fa213ff0d00220047fffffd588013ff0ee02200080a5fff532800027d0012004ec022004808da00122800009aa100016113f002990022374f40620209fc6a00001000000aa102001aa100016e8012000808d20012280000501000000a610001410800009b824e001113f002990022348f40620209fc6a00001000000a6102001b824e001de05401c8c21a00c8b19600cba10200290100006fa21bffcde2220049a103ff5da222000c401200c81c0a00688012010ec01200c81c5a0068801201081c3e00601000000|@633,129185|64,4,@542 212,4,@545 268,4,@542 633:S44|434f44455452454528292e67656e436f64652832292831296e6577456e7669726f6e2834296c6f6f6b283129 634:S37|434f44455452454528292e67656e436f64652832292831296e6577456e7669726f6e283429 635:O1|@637 636:O2|@635,1 637:C2,36|9e13e00280a2200532800005901020019010200581c3e0060100000081c3e00601000000|@379,129| 638:O2|-3,@636 639:O2|@616,@640 640:O2|@622,0 641:O4|@534,@380,@642,@360 642:O2|-1,@643 643:O2|5,@644 644:O2|-1,@645 645:O5|0,@647,@666,@32,@646 646:O2|10,@667 647:O3|@387,@649,@648 648:O2|@626,@662 649:O2|@391,@650 650:O3|@394,0,@651 651:O10|0,@653,@652,0,0,0,0,0,0,0 652:O1|@661 653:O1|@654 654:O2|-1,@655 655:O5|0,@605,@616,@31,@656 656:O2|-7,@657 657:O8|@658,@534,0,0,1,0,0,0 658:O4|4,@659,@619,1 659:O2|@660,@621 660:O2|-3,0 661:O2|0,@660 662:O2|@664,@663 663:O1|@665 664:O2|@663,0 665:C2,36|9e13e00280a2200132800005901020019010200581c3e0060100000081c3e00601000000|@534,129| 666:O2|-3,@664 667:O2|@616,@668 668:O2|@660,0 669:O2|@671,@670 670:O2|@672,0 671:S2|3e3d 672:O3|@21,69,@673 673:O4|@671,-1,@359,@358 674:O2|@379,@675 675:O2|@676,0 676:O3|@21,69,@377 677:O2|@679,@678 678:O2|@680,0 679:S3|65786e 680:O3|@34,69,@681 681:O6|@679,0,0,0,@683,@682 682:O2|-1,@35 683:O2|0,@684 684:O3|0,@375,0 685:O2|@687,@686 686:O2|@688,0 687:S3|636872 688:O3|@21,69,@689 689:O4|@687,-1,@691,@690 690:O3|1,@695,@694 691:O2|-1,@692 692:O2|-7,@693 693:O8|@623,@687,0,0,1,0,0,0 694:O4|-3,0,@703,@702 695:O4|-3,0,@697,@696 696:O2|0,@698 697:S3|696e74 698:O6|@697,0,0,0,@700,@699 699:O2|-1,@36 700:O2|0,@701 701:O3|1,@375,0 702:O2|0,@704 703:S6|737472696e67 704:O6|@703,0,0,0,@700,@705 705:O2|-1,@37 706:O2|@708,@707 707:O2|@709,0 708:S2|3c3e 709:O3|@21,69,@710 710:O4|@708,-1,@712,@711 711:O3|1,@713,@360 712:O2|-2,-3 713:O4|-2,1,@714,0 714:O2|@716,@715 715:O2|@718,0 716:O2|49,@717 717:O3|3,@38,79996 718:O2|50,@717 719:O2|@721,@720 720:O2|@722,0 721:S3|616273 722:O3|@21,69,@723 723:O4|@721,-1,@359,@724 724:O3|1,@365,@365 725:O2|@534,@726 726:O2|@727,0 727:O3|@21,69,@641 728:O2|@730,@729 729:O2|@731,0 730:S6|506f6c794d4c 731:O3|@39,69,@732 732:O3|@730,@734,@733 733:O4|@735,I48,0,0 734:O2|-1,@660 735:O4|-1,@41,@42,@40 736:O2|@737,10 737:C2,36|9e13e002f606201880a1001b8bd02018d2036004353f000eb406a16881c6a00401000000|@351,131071|20,4,@348 738:O2|@6354,@6353 739:O2|@741,@740 740:O2|@742,0 741:S21|6d616b65737472696e67496e4e616d655370616365 742:O3|@21,69,@743 743:O4|@741,-1,@745,@744 744:O3|1,@746,@694 745:O2|-2,2 746:O4|-2,1,@747,0 747:O2|@749,@748 748:O2|@751,0 749:O2|49,@750 750:O3|3,@44,79992 751:O2|50,@752 752:O4|-3,0,@754,@753 753:O2|0,@755 754:S9|6e616d655370616365 755:O6|@754,0,0,0,@757,@756 756:O2|-1,@77 757:O2|-1,@45 758:O3|0,@759,0 759:O4|-2,1,@760,0 760:O2|@762,@761 761:O2|@871,@870 762:O2|@764,@763 763:O3|1,@766,@765 764:S6|616c6c466978 765:O4|-3,@775,@787,@774 766:O4|-3,0,@768,@767 767:O2|0,@769 768:S4|756e6974 769:O6|@768,0,0,0,@771,@770 770:O2|-1,@46 771:O2|0,@772 772:O3|1,@773,0 773:O4|-2,1,0,0 774:O2|0,@788 775:O2|@776,0 776:O4|-2,1,@777,0 777:O2|@779,@778 778:O2|@780,0 779:O2|49,@694 780:O2|50,@781 781:O4|-3,0,@783,@782 782:O2|0,@784 783:S9|66697869747956616c 784:O6|@783,0,0,0,@786,@785 785:O2|-1,@48 786:O2|-1,@47 787:S4|6c697374 788:O6|@787,1,0,@790,@792,@789 789:O2|-1,@57 790:O2|@791,0 791:O3|3,@49,79992 792:O2|-1,@50 793:O3|1,@375,@794 794:O2|@796,@795 795:O2|@849,0 796:O4|@798,@799,@800,@797 797:O3|1,@843,@842 798:S2|3a3a 799:O1|0 800:O2|-1,@801 801:O2|5,@802 802:O2|-1,@803 803:O5|0,@805,@838,@54,@804 804:O2|10,@839 805:O3|@387,@807,@806 806:O2|@626,@830 807:O2|@391,@808 808:O3|@394,0,@809 809:O10|0,@811,@821,@810,0,0,0,0,0,0 810:O1|@827 811:O1|@812 812:O2|-1,@813 813:O5|0,@605,@616,@51,@814 814:O2|-7,@815 815:O8|@816,@798,0,0,1,0,0,0 816:O4|4,@818,@817,1 817:O2|-3,I218 818:O2|@819,0 819:O4|4,@621,@820,1 820:O2|-3,I105 821:O1|@822 822:O2|-1,@823 823:O5|0,@605,@825,@52,@824 824:O2|-7,@826 825:O5|-5,2,1,0,0 826:O8|@623,@798,0,0,1,0,0,0 827:O2|-1,@828 828:O5|0,@605,@829,@53,@824 829:O5|-5,3,1,0,0 830:O4|@832,@834,@833,@831 831:O1|@837 832:O3|@834,@833,@831 833:O1|@836 834:O1|@835 835:C2,52|9e13e002f606201880a1001b8bd020188410000f1b0000859a0362f8f40360009fc6a00001000000901a200481c0a00601000000|@798,65713|20,4,I105 836:C2,12|9e13e00281c3e00601000000|@798,129| 837:C2,12|9e13e00281c3e00601000000|@798,129| 838:O2|-3,@832 839:O2|@616,@840 840:O2|@825,@841 841:O2|@829,0 842:O4|-3,@790,@787,@848 843:O4|-2,1,@844,0 844:O2|@846,@845 845:O2|@847,0 846:O2|49,@791 847:O2|50,@842 848:O2|0,@788 849:O4|@851,@380,@850,@842 850:O2|-1,@852 851:S3|6e696c 852:O2|5,@853 853:O2|-1,@854 854:O5|0,@855,@869,@55,@646 855:O3|@387,@857,@856 856:O2|@626,@865 857:O2|@391,@858 858:O3|@394,0,@859 859:O10|0,@860,@652,0,0,0,0,0,0,0 860:O1|@861 861:O2|-1,@862 862:O5|0,@605,@616,@56,@863 863:O2|-7,@864 864:O8|@658,@851,0,0,1,0,0,0 865:O2|@867,@866 866:O1|@868 867:O2|@866,0 868:C2,36|9e13e00280a2200132800005901020019010200581c3e0060100000081c3e00601000000|@851,129| 869:O2|-3,@867 870:O2|@887,@886 871:O2|@873,@872 872:O3|1,@766,@874 873:S6|616c6c536967 874:O4|-3,@875,@787,@774 875:O2|@876,0 876:O4|-2,1,@877,0 877:O2|@779,@878 878:O2|@879,0 879:O2|50,@880 880:O4|-3,0,@882,@881 881:O2|0,@883 882:S12|7369676e617475726556616c 883:O6|@882,0,0,0,@885,@884 884:O2|-1,@59 885:O2|-1,@58 886:O2|@903,@902 887:O2|@889,@888 888:O3|1,@766,@890 889:S6|616c6c56616c 890:O4|-3,@891,@787,@774 891:O2|@892,0 892:O4|-2,1,@893,0 893:O2|@779,@894 894:O2|@895,0 895:O2|50,@896 896:O4|-3,0,@898,@897 897:O2|0,@899 898:S8|76616c756556616c 899:O6|@898,0,0,0,@901,@900 900:O2|-1,@61 901:O2|-1,@60 902:O2|@919,@918 903:O2|@905,@904 904:O3|1,@766,@906 905:S7|616c6c54797065 906:O4|-3,@907,@787,@774 907:O2|@908,0 908:O4|-2,1,@909,0 909:O2|@779,@910 910:O2|@911,0 911:O2|50,@912 912:O4|-3,0,@914,@913 913:O2|0,@915 914:S7|7479706556616c 915:O6|@914,0,0,0,@917,@916 916:O2|-1,@63 917:O2|-1,@62 918:O2|@935,@934 919:O2|@921,@920 920:O3|1,@766,@922 921:S8|616c6c46756e6374 922:O4|-3,@923,@787,@774 923:O2|@924,0 924:O4|-2,1,@925,0 925:O2|@779,@926 926:O2|@927,0 927:O2|50,@928 928:O4|-3,0,@930,@929 929:O2|0,@931 930:S10|66756e63746f7256616c 931:O6|@930,0,0,0,@933,@932 932:O2|-1,@65 933:O2|-1,@64 934:O2|@939,@938 935:O2|@937,@936 936:O3|1,@776,@766 937:S8|656e746572466978 938:O2|@943,@942 939:O2|@941,@940 940:O3|1,@876,@766 941:S8|656e746572536967 942:O2|@947,@946 943:O2|@945,@944 944:O3|1,@892,@766 945:S8|656e74657256616c 946:O2|@963,@962 947:O2|@949,@948 948:O3|1,@766,@950 949:S9|616c6c537472756374 950:O4|-3,@951,@787,@774 951:O2|@952,0 952:O4|-2,1,@953,0 953:O2|@779,@954 954:O2|@955,0 955:O2|50,@956 956:O4|-3,0,@958,@957 957:O2|0,@959 958:S12|73747275637475726556616c 959:O6|@958,0,0,0,@961,@960 960:O2|-1,@67 961:O2|-1,@66 962:O2|@967,@966 963:O2|@965,@964 964:O3|1,@908,@766 965:S9|656e74657254797065 966:O2|@1043,@1042 967:O2|@969,@968 968:O3|1,@694,@970 969:S9|6c6f6f6b7570466978 970:O4|-3,@972,@973,@971 971:O2|0,@974 972:O2|@781,0 973:S6|6f7074696f6e 974:O6|@973,1,0,@976,@978,@975 975:O2|-1,@76 976:O2|@977,0 977:O3|3,@68,79992 978:O2|-1,@69 979:O3|1,@375,@980 980:O2|@982,@981 981:O2|@1004,0 982:O4|@984,@380,@985,@983 983:O4|-3,@976,@973,@971 984:S4|4e4f4e45 985:O2|-1,@986 986:O2|5,@987 987:O2|-1,@988 988:O5|0,@989,@1003,@70,@646 989:O3|@387,@991,@990 990:O2|@626,@999 991:O2|@391,@992 992:O3|@394,0,@993 993:O10|0,@994,@652,0,0,0,0,0,0,0 994:O1|@995 995:O2|-1,@996 996:O5|0,@605,@616,@71,@997 997:O2|-7,@998 998:O8|@658,@984,0,0,1,0,0,0 999:O2|@1001,@1000 1000:O1|@1002 1001:O2|@1000,0 1002:C2,36|9e13e00280a2200132800005901020019010200581c3e0060100000081c3e00601000000|@984,129| 1003:O2|-3,@1001 1004:O4|@1006,@799,@1007,@1005 1005:O3|1,@977,@983 1006:S4|534f4d45 1007:O2|-1,@1008 1008:O2|5,@1009 1009:O2|-1,@1010 1010:O5|0,@1011,@1041,@72,@804 1011:O3|@387,@1013,@1012 1012:O2|@626,@1033 1013:O2|@391,@1014 1014:O3|@394,0,@1015 1015:O10|0,@1017,@1022,@1016,0,0,0,0,0,0 1016:O1|@1028 1017:O1|@1018 1018:O2|-1,@1019 1019:O5|0,@605,@616,@73,@1020 1020:O2|-7,@1021 1021:O8|@816,@1006,0,0,1,0,0,0 1022:O1|@1023 1023:O2|-1,@1024 1024:O5|0,@605,@825,@74,@1025 1025:O2|-7,@1026 1026:O8|@1027,@1006,0,0,1,0,0,0 1027:O2|10,@621 1028:O2|-1,@1029 1029:O5|0,@605,@829,@75,@1030 1030:O2|-7,@1031 1031:O8|@1032,@1006,0,0,1,0,0,0 1032:O3|6,@623,0 1033:O4|@1035,@1037,@1036,@1034 1034:O1|@1040 1035:O3|@1037,@1036,@1034 1036:O1|@1039 1037:O1|@1038 1038:C2,52|9e13e002f606201880a1001b8bd020188410000f1b0000859a0362f8f40360009fc6a00001000000901a200481c0a00601000000|@1006,65713|20,4,I105 1039:C2,40|9e13e002841000088c21a0088b196008ba10200190100006fa21bffcc422200081c3e00601000000|@1006,65665| 1040:C2,16|9e13e002d002200081c3e00601000000|@1006,129| 1041:O2|-3,@1035 1042:O2|@1049,@1048 1043:O2|@1045,@1044 1044:O3|1,@694,@1046 1045:S9|6c6f6f6b7570536967 1046:O4|-3,@1047,@973,@971 1047:O2|@880,0 1048:O2|@1055,@1054 1049:O2|@1051,@1050 1050:O3|1,@694,@1052 1051:S9|6c6f6f6b757056616c 1052:O4|-3,@1053,@973,@971 1053:O2|@896,0 1054:O2|@1059,@1058 1055:O2|@1057,@1056 1056:O3|1,@924,@766 1057:S10|656e74657246756e6374 1058:O2|@1065,@1064 1059:O2|@1061,@1060 1060:O3|1,@694,@1062 1061:S10|6c6f6f6b757054797065 1062:O4|-3,@1063,@973,@971 1063:O2|@912,0 1064:O2|@1069,@1068 1065:O2|@1067,@1066 1066:O3|1,@952,@766 1067:S11|656e746572537472756374 1068:O2|@1074,0 1069:O2|@1071,@1070 1070:O3|1,@694,@1072 1071:S11|6c6f6f6b757046756e6374 1072:O4|-3,@1073,@973,@971 1073:O2|@928,0 1074:O2|@1076,@1075 1075:O3|1,@694,@1077 1076:S12|6c6f6f6b7570537472756374 1077:O4|-3,@1078,@973,@971 1078:O2|@956,0 1079:O2|@1081,@1080 1080:O2|@1082,0 1081:S5|7072696e74 1082:O3|@21,69,@1083 1083:O4|@1081,-1,@1085,@1084 1084:O3|1,@1086,@1086 1085:O2|-2,3 1086:O3|3,@78,79992 1087:O2|@1089,@1088 1088:O2|@1090,0 1089:S8|636f6d70696c6572 1090:O3|@21,69,@1091 1091:O4|@1089,-1,@1093,@1092 1092:O3|1,@6256,@6255 1093:O2|-1,@1094 1094:O2|-3,@1095 1095:O2|@1097,@1096 1096:O2|@1100,@1099 1097:C2,44|9e13e002f606201880a1001b8bd02018d4022008d2022004d0022000da036004f403600081c6a00401000000|@1098,131071| 1098:S27|434f4d50494c45525f424f445928292e636f6d70696c6572283129 1099:O2|@1222,@1221 1100:C2,1036|9e13e002f6062018ba21205080a7401b8bd02018d0213ffcd0213ff8d0213ff4d0213ff0d0213fecd0213fe8d0213fe4d0213fe0d0213fdcd0213fd8de213fd4da213fd0d0213fccd4213fc894013fd884100009d2013fc890100002400000f388013fc88c21a02c8b19602cba10200aae100006fa21bffcec012010ec25e000ea012014ea25e004e8012018e825e008e601201ce625e00ce4012020e425e010e2012024e225e014e0012028e025e018de01202cde25e01cc2012030c225e020da012034da25e024ee213ffc133f003992026348d00120001b3f00389a0360404000019288013ffcd0213ffc133f003a92026070d00120041b3f00389a0360404000018a88013ffcd0213ffcc6213ff8193f003698032302d8213ff496102001d6213ff086013ff0d401200080a2a0010280001b88013ff0d20120208c21a0188b196018ba10200584100006fa21bffc2f3f003aae05e198ee20a000ec012014ec20a010ea01201cea20a00ce8012018e820a008e6026004e620a004901000021b0000839a036198f40360009fc6a000010000001080000cc6012008d2012020d4012018c4026004d201201cd00120149a100002f40360009fc6a00001000000c6012008ee01202481c5e00688012050ec02200080a5a0053280001f80a5a19dea012028a8102001e8256000e601201ca4102081e424e000e2012024a01020e5e0246000de01203482102111c223e000da01203898102001d8236000d0213ffc113f003a90022208da012000f40360009fc6a00088013ffc113f00059002201cf40620209fc6a000010000009010200180a5a19d32800014010000008c21a0108b196010ba102003aa100006fa21bffce8022008e8256008273f0028a604e2d0e6256004a410219de4256000a210000890100015f40620209fc6a00001000000901020012b3ee008aa0561fc80a580153280002b808a2001d0213ffc133f003a92026228d0022008400004ab88013ffc92100008113f003c900222447fffee1001000000133f003c920262687fffee0c01000000d0213ffc921020297fffee0888013ffcda012008f40360009fc6a000010000008c21a0108b196010ba102003a8100006fa21bffce6012000e6252008253f0028a404a2d0e4252004a210219de225200090100014f40620209fc6a0000100000090102001808a200122800009a8100008113f002990022374f40620209fc6a00001000000a8102001a8100008e605200492100013113f003c900222887fffede301000000133f003c9202629c7fffeddf01000000d0213ffc921020297fffeddb88013ffcda012004f40360009fc6a000010000008c21a0108b196010ba102003a4100006fa21bffce2012000e224a008213f0028a00422d0e024a0049e10219dde24a00090100012f40620209fc6a0000100000090102001|@1220,131071|92,5,@1101 204,4,@1180 216,4,@1112 224,5,@1114 236,4,@1187 248,4,@1112 256,5,@1114 272,4,$1100+466 336,4,@1194 384,4,I30 544,4,@1196 568,4,@227 632,4,@522 676,4,@24 700,4,@1197 712,5,@1212 724,4,@1216 732,5,@496 740,4,@1217 748,5,@496 764,5,@496 816,4,@522 868,4,@545 904,4,@1218 912,5,@496 920,4,@1219 928,5,@496 944,5,@496 996,4,@522 1101:C2,360|9e13e002f606201880a1001b8bd02018de213ffcd0213ff8d2213ff4d4213ff0133f0037920262dcd0013ff41b3f00389a036040400000b388013ff0d0213ffc133f003992026204d00120041b3f00389a036040400000ab88013ffc8c21a0088b1960083b100000ba07600184100006fa21bffcae102081ee20a0008c21a0088b1960083b100000ba076001ac100006fa21bffcaa1020e5ea25a0008c21a0088b1960083b100000ba076001a8100006fa21bffc27000083a604e3d8e62520008c21a0088b1960083b100000ba076001a4100006fa21bffca2102001e224a0008c21a0088b1960083b100000ba076001a0100006fa21bffc9e102111de2420008c21a0088b1960083b100000ba07600182100006fa21bffc9a102001da206000d8012004c4232000e8232004ec232008e423200cd0232010d601200cd6232014e0232018c223201cd4012000d4232020d2012008d223202490102001c401201081c0a00688012014|@1179,131071|32,4,@1102 44,4,@1112 52,5,@1114 64,4,@1172 76,4,@1112 84,5,@1114 180,4,I48 1102:O3|@1104,@1107,@1103 1103:O2|@1109,@79 1104:O2|@1105,@79 1105:C2,44|9e13e002c4022000ee03600480a0801732800005901020019010200581c3e0060100000081c3e00601000000|@1106,98465| 1106:S19|556e6976657273616c2e746167283229283129 1107:O2|@1108,@79 1108:C2,56|9e13e002841000088c21a0108b196010ba10200390100006fa21bffcc422200884102115c4222004c4036004c422200081c3e00601000000|@1106,65697| 1109:C2,60|9e13e002c4022000ee03600480a0801732800005de213ffcd002200881c3e00601000000113f003890022020f40620209fc6a00088013ffc90102001|@1106,98465|36,4,@1110 1110:O3|101,@1111,0 1111:S5|4d61746368 1112:O2|@1114,@1113 1113:O2|@1119,@1118 1114:C2,412|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d2213ff4fa026000fa213ff088013ff080a2200132800005fa022000841020011080001c8088a001fa213ffcfa022004fa213ff8d0013ffcda012000f40360009fc6a00088013ff880a220012280000bd00120008c21a0088b196008ba10200184100006fa21bffcee012004ee20a000108000078801200888012008f606201880a1001b8bd0201830bfffe28088a00132800009ec012004ec012004d000a000da05a008de01200cf403600081c6a00488012010ea012008fa05a000fa213ffce805600488013ffc80a5200132800005fa052000a61020011080001c808ce001fa213ffcfa052004fa213ff8d0013ffcda012000f40360009fc6a00088013ff880a220012280000be80120008c21a0088b196008ba102001a6100006fa21bffce4012004e424e000108000078801200888012008f606201880a1001b8bd0201830bfffe2808ce0013280000901000000e2012008d004e000da046008de012010f403600081c6a00488012014113f003890022210f40620209fc6a0000100000090102001|@1117,131071|388,4,@1115 1115:O3|@24,@397,@1116 1116:S11|746167206d697373696e67 1117:S21|44656275672e676574506172616d65746572283229 1118:O2|@1126,@1125 1119:O3|@79,69,@1120 1120:O1|@1121 1121:C2,32|9e13e002de213ffc113f0038900222b4f40620209fc6a00088013ffc90102001|@1124,129|8,4,@1122 1122:O3|103,@522,@1123 1123:S16|6572726f7220696e2070726f6772616d 1124:S18|44656275672e64656661756c74732d283129 1125:O2|@1130,@1129 1126:O3|@80,69,@1127 1127:O1|@1128 1128:C2,16|9e13e0029010200181c3e00601000000|@1124,129| 1129:O2|@1134,@1133 1130:O3|@81,69,@1131 1131:O1|@1132 1132:C2,16|9e13e0029010200181c3e00601000000|@1124,129| 1133:O2|@1136,@1135 1134:O3|@82,69,I48 1135:O2|@1138,@1137 1136:O3|@83,69,1 1137:O2|@1140,@1139 1138:O3|@84,69,40 1139:O2|@1142,@1141 1140:O3|@85,69,0 1141:O2|@1144,@1143 1142:O3|@86,69,0 1143:O2|@1146,@1145 1144:O3|@87,69,0 1145:O2|@1148,@1147 1146:O3|@88,69,0 1147:O2|@1150,@1149 1148:O3|@89,69,0 1149:O2|@1152,@1151 1150:O3|@90,69,0 1151:O2|@1154,@1153 1152:O3|@91,69,0 1153:O2|@1156,@1155 1154:O3|@92,69,6 1155:O2|@1160,@1159 1156:O3|@93,69,@1157 1157:O1|@1158 1158:C2,16|9e13e0029010200181c3e00601000000|@1124,129| 1159:O2|@1162,@1161 1160:O3|@94,69,77 1161:O2|@1164,@1163 1162:O3|@95,69,0 1163:O2|@1166,@1165 1164:O3|@96,69,0 1165:O2|@1167,0 1166:O3|@97,69,0 1167:O3|@98,69,@1168 1168:O1|@1169 1169:C2,32|9e13e002de213ffc113f0039900221e0f40620209fc6a00088013ffc90102001|@1124,129|8,4,@1170 1170:O3|103,@522,@1171 1171:S9|4e6f2073747265616d 1172:O3|@1174,@1176,@1173 1173:O2|@1178,@81 1174:O2|@1175,@81 1175:C2,44|9e13e002c4022000ee03600480a0801732800005901020019010200581c3e0060100000081c3e00601000000|@1106,98465| 1176:O2|@1177,@81 1177:C2,56|9e13e002841000088c21a0108b196010ba10200390100006fa21bffcc422200884102115c4222004c4036004c422200081c3e00601000000|@1106,65697| 1178:C2,60|9e13e002c4022000ee03600480a0801732800005de213ffcd002200881c3e00601000000113f003890022020f40620209fc6a00088013ffc90102001|@1106,98465|36,4,@1110 1179:S17|4c45585f28292e696e697469616c283329 1180:O3|@1182,@1184,@1181 1181:O2|@1186,@95 1182:O2|@1183,@95 1183:C2,44|9e13e002c4022000ee03600480a0801732800005901020019010200581c3e0060100000081c3e00601000000|@1106,98465| 1184:O2|@1185,@95 1185:C2,56|9e13e002841000088c21a0108b196010ba10200390100006fa21bffcc422200884102115c4222004c4036004c422200081c3e00601000000|@1106,65697| 1186:C2,60|9e13e002c4022000ee03600480a0801732800005de213ffcd002200881c3e00601000000113f003890022020f40620209fc6a00088013ffc90102001|@1106,98465|36,4,@1110 1187:O3|@1189,@1191,@1188 1188:O2|@1193,@80 1189:O2|@1190,@80 1190:C2,44|9e13e002c4022000ee03600480a0801732800005901020019010200581c3e0060100000081c3e00601000000|@1106,98465| 1191:O2|@1192,@80 1192:C2,56|9e13e002841000088c21a0108b196010ba10200390100006fa21bffcc422200884102115c4222004c4036004c422200081c3e00601000000|@1106,65697| 1193:C2,60|9e13e002c4022000ee03600480a0801732800005de213ffcd002200881c3e00601000000113f003890022020f40620209fc6a00088013ffc90102001|@1106,98465|36,4,@1110 1194:C2,44|9e13e002f606201880a1001b8bd02018d4036008d203600cd0036010da036004f403600081c6a00401000000|@1195,131071| 1195:S30|434f4d50494c45525f424f445928292e636f6d70696c6572283329283129 1196:S24|436f6d70696c6174696f6e20696e7465727275707465640a 1197:O1|@1198 1198:C2,448|9e13e002f606201880a1001b8bd0201880a221713280000680a22089113f003b9002200c81c3e006010000003280000680a22085113f003b9002201881c3e006010000002a80000780a2208180a221f93880000480a22081108000060100000022800004010000001080000480a2201d81c3e006010000003280000680a22021113f003b9002202481c3e006010000003280000680a22025113f003b9002203081c3e006010000003280000680a22029113f003b9002203c81c3e006010000003280000680a2202d113f003b9002204881c3e006010000003280000680a22031113f003b9002205481c3e006010000003280000680a22035113f003b9002206081c3e006010000003280000680a22081113f003b9002206c81c3e006010000003a80001dde213ffcb8222001b917210084072001811f200036800004b820a00110800007de213ffc811f23fc34800004de213ffc10800009ae100002113f0027900220f8f40620209fc6a00088013ffcae102001ae10000292100017113f003b90022078353f0025b406a04c81c6a00401000000941020299210200d4000002e88013ffc9210000890102171de012000353f0025b406a04c81c6a00488012004|@1211,131071|28,4,@1199 52,4,@1200 128,4,@1201 152,4,@1202 176,4,@1203 200,4,@1204 224,4,@1205 248,4,@1206 272,4,@1207 348,4,@511 380,4,@1208 388,4,@496 412,5,@1209 432,4,@496 1199:S2|5c5c 1200:S2|5c22 1201:S2|5c61 1202:S2|5c62 1203:S2|5c74 1204:S2|5c6e 1205:S2|5c76 1206:S2|5c66 1207:S2|5c72 1208:S2|5c5e 1209:C2,464|9e13e002f606201880a1001b8bd0201880a2600132800006b822600111000083900223d881c3e00601000000b91f200484072001b8222001811f200026800003ae102001ae102005b822a001811f200026800003ac102001ac10200580a5c0163280000580a5a001ae10000810800012de213ffc2280000ab822a001b822a001b91f2004ae072001ba222001b91f401cae07200110800008de213ffcb9172004ae072001ba222001b91f401cae072001de213ffcd0213ff8d4213ff4c4213ff09210000a901000171b0000859a036378f40360009fc6a00088013ff0d4012004d20120007fffffc89e13e002d0213ffcd2012004d00120081b0000859a036398f40360009fc6a00088013ffc80a2200132800004ec01200810800013ac100008b825a001811f200026800003aa102001aa102005b8222001811f200026800003a8102001a810200580a5401422800006ac100008b825a001ba222001b917401cac072001b825a001b91720c0aa072001811f200036800004b82560011080000701000000811f23fc348000040100000010800009a8100015113f0027900220f8f40620209fc6a00001000000a8102001a810001592100014d0012000de012010353f0025b406a04c81c6a00488012014|@1210,131071|28,4,I48 200,4,I109 248,4,I110 408,4,@511 448,4,@496 1210:S18|436861722e6f6374496e7452657072283329 1211:S16|436861722e746f537472696e67283129 1212:C2,536|9e13e002f606201880a1001b8bd02018808a200132800004b8102004f8022000b92f20028407200180a0a00532800006de213ffc9a100009f403600081c6a00401000000d0213ff8d2213ff4c4213ff0ae102001ac10200188013ff0ea01200080a5801532800005a885a004a81000171080001f808d2001a685a010e4012008bb3ce002fa0c801db92f600290072001ee213ffce8213ff8da012004f40360009fc6a00088013ff8808a200132800004b8102004f8022000b92f2002a2072001e0012004ba242001b917401c9e072001ec012000ae10000f88012008f606201880a1001b8bd0201830bfffdd2280000901000000b8252001811f20002680000501000000a61000141080000980a4c015113f0007900223e4f40620209fc6a00001000000a610200180a4c01532800006a484e020d0012008e401200c81c4a00688012010a2a4a004e6213ffc92102011901000111b0000899a0363f8f40360009fc6a00088013ffcc6213ffc213f003ca0042056e0213ff89e102001de213ff486013ff494102001921021051b0000829a036338f40360009fc6a00088013ff482100008c601200810800009da01200c113f0007900223e4f40620209fc6a0000100000082102001da01200cbb3b6002fa206000c2213ffcd8213ff892102001901020119a01201c4000001388013ff8d00120041b0000839a0363b8f40360009fc6a00001000000d0012004d601202481c2e00688012028|@1215,131071|272,4,@251 340,4,I241 364,4,$1212+434 396,4,I11 432,4,@251 488,5,@1213 500,4,I47 1213:C2,268|9e13e002f606201880a1001b8bd02018c4037ff480a2400232800005ae8260109010200181c3e00601000000ec037ffcaa100008bb3de002fa0d801db92f600290072001de213ffcda213ff8ea213ff4d2213ff0da037ff8f40360009fc6a00088013ff0808a200132800004b8102004f8022000b92f2002a807200180a520053280000ae6012008e6012008e404ffe0e2012004bb322002b93c6002fa2c801c1080000ee8213ffce8213ffce8213ff8d6012004d404ffe0921020111b0000889a036298f40360009fc6a00088013ff810800004e001200488013ffce00120049e842004c2012008da012000b82360019800401c9210000f9010000cda01200cde01201010bfffc088012014|@1214,131071|188,4,I198 1214:S31|537472696e672e746f537472696e6773283229636f7079546f4f7574283229 1215:S19|537472696e672e746f537472696e6773283229 1216:S26|457863657074696f6e2d20496e7465726e616c4572726f723a20 1217:S23|20726169736564207768696c6520636f6d70696c696e67 1218:S11|457863657074696f6e2d20 1219:S36|20756e65787065637465646c7920726169736564207768696c6520636f6d70696c696e67 1220:S27|434f4d50494c45525f424f445928292e636f6d70696c6572283329 1221:O3|@1491,@6253,@1253 1222:C2,3500|9e13e002f6062018ba21213080a7401b8bd02018de213ffcda213ff8d0213ff4d2213ff0d4213fec133f003a920260709010000a1b3f00389a0360407ffffb4888013fecd0213ffc133f0040920260c4d00120001b3f00389a0360407ffffb4088013ffcd0213ffc133f0040920261ecd00120041b3f00389a0360407ffffb3888013ffcd0213ffc133f004092026314d00120081b3f00389a0360407ffffb3088013ffcd0213ffc133f00419202603cd001200c1b3f00389a0360407ffffb2888013ffcc4012014d0213ffcd0213ff8d0213ff4d0213ff0d0213fecfa00a028fa213fe8fa00a030fa213fe4fa00a038fa213fe0fa00a02cfa213fdcfa00a044fa213fd8fa00a040fa213fd4921020019010201d1b0000859a036198f40360009fc6a00088013fd4d0213ffc92102001901020211b0000859a036198f40360009fc6a00088013ffcd0213ffc92102001901020251b0000859a036198f40360009fc6a00088013ffcd0213ffc92102001901020351b0000859a036198f40360009fc6a00088013ffcae012028d025e000ac012028ea012000ea25a004a8012028e6012004e6252008a4012028e2012008e224a00ce0012050de042010de213ffcc2042014c2213ff8da042018da213ff4d804201cd8213ff0d6042020d6213fecd4042024d4213fe8d604200cd4042008d2042004d00420004000041c88013fe8d2042008d0026000c4042018ee00a00080a5e11122800003ac100008ac100017133f0041920261b8901000164000043c0100000080a2200122800008ac102001d00120501b3f00419a0362704000045201000000ac100008ec012050ea05a008e8056000e605a018e404e00080a4a11122800003a2100014a2100012e0012054d204200490100011400004250100000080a2200122800036d0213ffcde012050c203e010c2213ffcda03e014da213ff8d803e018d8213ff4d603e01cd6213ff0d403e020d4213fecd203e024d2213fe8d603e00cd403e008d203e004d003e0004000137d88013fe880a220012280001b01000000d0012050c4022010c4213ffcee022014ee213ff8ec022018ec213ff4ea02201cea213ff0e8022020e8213fece6022024e6213fe8d602200cd4022008d2022004d0022000400003cc88013fe8113f00519002201cf40620209fc6a0000100000090102001113f00519002204cc401205881c0a0068801205cd0213ff8d0213ff492013ff4901020014000139588013ff48c21a0108b196010ba1020039e100006fa21bffc033f00528200613cc223e000da012008da23e008d801202cd823e004d60120608c21a00c8b19600cba10200294100006fa21bffcde22a004d2012004d222a000de213ffcd201205cd002e0041b3f00529a0361d4400014df88013ffcd0213ffcd0213ff8d0213ff4921020019010201d1b0000859a036198f40360009fc6a00088013ff4c4012050b820a001ba222001b91f401cae072001ee213ffc92102001901020211b0000859a036198f40360009fc6a00088013ffcec012050b825a001ba222001b91f401caa072001a8012008ea252000a6012008e4012000e424e004e201200ce0012008b8242001ba246001b917401c9e072001c201205880a06001228000379a102001d0213ffcd0213ff8d0213ff4d0213ff0d0213fecd0213fe8d0213fe4de213fe094013fe4d2012064901021357fffd85288013fe08c21a0208b196020ba10200798100006fa21bffcd6012004d6232000d4012008d4232004d201200cd2232008d0012010d023200cc4012014c4232010ee012018ee232014ec01201cec232018d8213ffc113f00259002227c9a100016f40360009fc6a00088013ffcd40120001300002792026041d001202840006f530100000090102001da012010f40360009fc6a000010000009a1000081080000dda012094d0213ffcd0213ff8d0213ff4d0213ff0d0213fecd0213fe8d0213fe4de213fe0d0213fdc88013fdcda012094d8036010d8213ffcd6036014d6213ff8d4036018d4213ff4d203601cd2213ff0d0036020d0213fecc4036024c4213fe8d603600cd4036008d2036004d0036000400012bd88013fe880a220012280001cae102001ec012094ea05a010ea213ffce805a014e8213ff8e605a018e6213ff4e405a01ce4213ff0e205a020e2213fece005a024e0213fe8d605a00cd405a008d205a004d005a0004000030c88013fe8113f00519002201cf40620209fc6a00001000000ae102001ae102001d0213ffcd0213ff8d0213ff492013ff490102001400012d888013ff4d0213ffcd0213ff8d0213ff492013ff490102001400012d188013ff4d0213ffcd0213ff8d0213ff492013ff490102001400012ca88013ff4d0213ffcd0213ff8d0213ff492013ff490102001400012c388013ff4d0213ffcd0213ff8d0213ff492013ff490102001400012bc88013ff48c21a0108b196010ba102003ae100006fa21bffc2d3f00d0ac05a2a0ec25e000ea012038ea25e008e801209ce825e0048c21a0108b196010ba102003a6100006fa21bffc253f00d0a404a318e424e000e201202ce224e008e0012098e024e0048c21a0108b196010ba1020039e100006fa21bffc033f00d082006390c223e000da012020da23e008d8012090d823e0048c21a0108b196010ba10200396100006fa21bffc153f00d19402a008d422e000d2012014d222e008d0012094d022e0048c21a0108b196010ba10200384100006fa21bffc2d3f00d1ac05a080ec20a000ea012008ea20a008e801208ce820a0048c21a0348b196034ba10200ca4100006fa21bffcde24a02cc424a028e201201ce224a024e624a020e0012004e024a01cee24a018d624a014de012070de24a010c2012028c224a00cda012034da24a008d8012010d824a004d6012078d624a00090100012400092700100000094100008d20120d0d00120641b3f00d19a03612c4000927901000000d40120d0d202a010d2213ffcd002a014d0213ff8c402a018c4213ff4ee02a01cee213ff0ec02a020ec213fecea02a024ea213fe8d602a00ce802a000e602a004e402a0089410001292100013901000144000120988013fe880a2200122800005d60120d0a210200110800009d0213ffcd4012000d2012018d00120304002744901000000a2100008d0213ffcd0213ff8921020019010201d1b0000859a036198f40360009fc6a00088013ff8e20120bcb8246001ba222001b91f401ca0072001e0213ffc92102001901020211b0000859a036198f40360009fc6a00088013ffcde0120bcb823e001ba222001b91f401c820720019a012004c223600098012004d6012000d6232004d4012008d2012004b8226001ba22a001b917401c90072001c40120dcae100008ec00a010ec213ffcea00a014ea213ff8e800a018e8213ff4e600a01ce6213ff0e400a020e4213fece200a024e2213fe8d600a00cd400a008d200a004d000a000400011c388013fe880a2200122800015a0102001ec213ffcea213ff8e8213ff4e6213ff0e4213fece2213fe8d600a00cd400a008d200a004d000a0004000021988013fe8113f02b79002212cf40620209fc6a00001000000a0102001a0102001ee213ffc92100002d00120704002780b88013ffcd0213ffcd0213ff8d0213ff4921020019010201d1b0000859a036198f40360009fc6a00088013ff4e00120d0b8242001ba222001b91f401c9e072001de213ffc92102001901020211b0000859a036198f40360009fc6a00088013ffcc20120d0b8206001ba222001b91f401c9a07200198012008da23200096012008d4012000d422e004d201200cd0012008b8222001ba226001b917401c84072001ee0120f0ec05e010ec213ffcea05e014ea213ff8e805e018e8213ff4e605e01ce6213ff0e405e020e4213fece205e024e2213fe8d605e00cd405e008d205e004d005e0004000116e88013fe880a2200122800015a0102001ec213ffcea213ff8e8213ff4e6213ff0e4213fece2213fe8d605e00cd405e008d205e004d005e000400001c488013fe8113f033d900221e0f40620209fc6a00001000000a0102001a0102001e00120dc80a42001228000379e102001d0213ffcd0213ff8d0213ff4d0213ff0d0213fecd0213fe8d0213fe4c4213fe094013fe4d20120e4901021357fffd69788013fe08c21a0208b196020ba10200782100006fa21bffcda012004da206000d8012008d8206004d601200cd6206008d4012010d420600cd2012014d2206010d0012018d0206014c401201cc4206018c2213ffc113f00259002227c9a100002f40360009fc6a00088013ffcd2012000d00120281b3f001f9a0362687fffdfd30100000090102001da012010f40360009fc6a000010000009e1000081080000dd201210cd0213ffcd0213ff8d0213ff4d0213ff0d0213fecd0213fe8d0213fe4c4213fe0d0213fdc88013fdcd201210cd00120281b3f01699a0361844001298401000000d0213ffcd0213ff8d0213ff4921020019010201d1b0000859a036198f40360009fc6a00088013ff4de012104b823e001ba222001b91f401c82072001c2213ffc92102001901020211b0000859a036198f40360009fc6a00088013ffcda012104b8236001ba222001b91f401c9807200196012008d822e00094012008d2012000d222a004d001200cc4012008b820a001ba222001b917401cae0720018c21a02c8b19602cba10200a90100006fa21bffc2d3f033dac05a210ec222000ea0120f8ea222024e8012004e8222020e60120b8e622201ce4012114e4222018e2012118e2222014e0012094e0222010de012044de22200cc2012014c2222008ee222004da01212c81c3600688012130|@6252,131071|40,4,@1187 52,4,@1112 60,5,@1114 72,4,@1223 84,4,@1112 92,5,@1114 104,4,@1230 116,4,@1112 124,5,@1114 136,4,@1237 148,4,@1112 156,5,@1114 168,4,@1244 180,4,@1112 188,5,@1114 276,4,I94 308,4,I94 340,4,I94 372,4,I94 504,5,@1251 544,4,@1253 556,5,@1256 580,4,@1258 588,5,@1260 648,5,@1256 736,5,@1442 824,5,@1251 832,4,@1444 856,4,@1446 892,5,@1450 920,4,@1462 996,4,@1464 1004,5,@1466 1032,4,I94 1084,4,I94 1228,5,@428 1316,4,@499 1344,4,10000 1356,5,@2067 1504,5,@1442 1592,5,@1251 1600,4,@1444 1648,5,@1450 1676,5,@1450 1704,5,@1450 1732,5,@1450 1760,5,@1450 1788,4,@2243 1836,4,@2244 1884,4,@2245 1932,4,@2246 1980,4,@2247 2108,5,@2248 2128,4,@2250 2136,5,@2251 2224,5,@1442 2268,5,@5317 2296,4,I94 2348,4,I94 2504,5,@1442 2564,5,@1251 2572,4,@5347 2612,5,@5349 2640,4,I94 2692,4,I94 2844,5,@1442 2904,5,@1251 2912,4,@6149 3000,5,@428 3088,4,@499 3120,4,@486 3128,5,@488 3216,4,@3278 3224,5,@3280 3252,4,I94 3304,4,I94 3408,4,@6151 1223:O3|@1225,@1227,@1224 1224:O2|@1229,@90 1225:O2|@1226,@90 1226:C2,44|9e13e002c4022000ee03600480a0801732800005901020019010200581c3e0060100000081c3e00601000000|@1106,98465| 1227:O2|@1228,@90 1228:C2,56|9e13e002841000088c21a0108b196010ba10200390100006fa21bffcc422200884102115c4222004c4036004c422200081c3e00601000000|@1106,65697| 1229:C2,60|9e13e002c4022000ee03600480a0801732800005de213ffcd002200881c3e00601000000113f003890022020f40620209fc6a00088013ffc90102001|@1106,98465|36,4,@1110 1230:O3|@1232,@1234,@1231 1231:O2|@1236,@86 1232:O2|@1233,@86 1233:C2,44|9e13e002c4022000ee03600480a0801732800005901020019010200581c3e0060100000081c3e00601000000|@1106,98465| 1234:O2|@1235,@86 1235:C2,56|9e13e002841000088c21a0108b196010ba10200390100006fa21bffcc422200884102115c4222004c4036004c422200081c3e00601000000|@1106,65697| 1236:C2,60|9e13e002c4022000ee03600480a0801732800005de213ffcd002200881c3e00601000000113f003890022020f40620209fc6a00088013ffc90102001|@1106,98465|36,4,@1110 1237:O3|@1239,@1241,@1238 1238:O2|@1243,@85 1239:O2|@1240,@85 1240:C2,44|9e13e002c4022000ee03600480a0801732800005901020019010200581c3e0060100000081c3e00601000000|@1106,98465| 1241:O2|@1242,@85 1242:C2,56|9e13e002841000088c21a0108b196010ba10200390100006fa21bffcc422200884102115c4222004c4036004c422200081c3e00601000000|@1106,65697| 1243:C2,60|9e13e002c4022000ee03600480a0801732800005de213ffcd002200881c3e00601000000113f003890022020f40620209fc6a00088013ffc90102001|@1106,98465|36,4,@1110 1244:O3|@1246,@1248,@1245 1245:O2|@1250,@91 1246:O2|@1247,@91 1247:C2,44|9e13e002c4022000ee03600480a0801732800005901020019010200581c3e0060100000081c3e00601000000|@1106,98465| 1248:O2|@1249,@91 1249:C2,56|9e13e002841000088c21a0108b196010ba10200390100006fa21bffcc422200884102115c4222004c4036004c422200081c3e00601000000|@1106,65697| 1250:C2,60|9e13e002c4022000ee03600480a0801732800005de213ffcd002200881c3e00601000000113f003890022020f40620209fc6a00088013ffc90102001|@1106,98465|36,4,@1110 1251:C2,24|9e13e00294102001d422e0009010200181c3e00688012018|@1252,143| 1252:S21|4c45585f28292e72657365744c6578616e28313029 1253:O1|@1254 1254:C2,36|9e13e00280a220e532800005901020019010200581c3e0060100000081c3e00601000000|@1255,129| 1255:S15|496e745365742e6d6b283129283129 1256:C2,32|9e13e002f606201880a1001b8bd020189a100009f403600081c6a00401000000|@1257,131071| 1257:S19|53594d5f53455428292e696e73696465283229 1258:O2|@1260,@1259 1259:O4|@1273,@1320,@1321,@1272 1260:C2,260|9e13e002f606201880a1001b8bd02018c4022018ee00a00080a5e11122800007ee0220089a102111da20a0009010200181c3e00601000000ec05e00080a5a0013280002caa102111de213ffcda213ff8d0213ff4ee213ff0ea022010901020019a100015f40360009fc6a00088013ff0e8012004e6052004e6213ffce4052008e4213ff8e205200ce2213ff4e0052010e0213ff0de052014de213fecc2052018c2213fe8da05201cda213fe4d8052020d8213fe0d6052024d6213fdcd60520009410200592100008113f0041900223b04000003c88013fdc113f0042900222e4f40620209fc6a00001000000aa102111ea25e000da036004f403600081c6a00401000000|@1271,131071|200,4,@1261 208,5,@1265 216,4,@1269 1261:O1|@1262 1262:C2,44|9e13e002f606201880a1001b8bd02018c402200c113f0042900220009a100002f403600081c6a00401000000|@1264,131071|20,4,@1263 1263:S34|756e657870656374656420656e64206f662066696c6520656e636f756e7465726564 1264:S25|4c45585f28292e6572726f724d657373616765283329283129 1265:C2,484|9e13e002f606201880a1001b8bd020188c21a0088b1960083b100000ba07600196100006fa21bffc84102001c422e0008c21a00c8b19600cba10200284100006fa21bffc2f3f0042ae05e250ee20a000d620a004d0213ffcd0213ff8d0213ff4d0213ff0d0213fecd0213fe8d0213fe4de213fe0d0213fdcd2213fd8d4213fd4d6213fd094013fe492100002901021357fffd40c88013fd08c21a0208b196020ba102007ac100006fa21bffcea012014ea25a000e8012018e825a004e601201ce625a008e4012020e425a00ce2012024e225a010e0012028e025a014de01202cde25a018c201200480a0600122800006ec213ffcda01204898102005d8236000ec213ffc113f00259002227c9a10000ff40360009fc6a00088013ffcd0012000da012010f40360009fc6a0000100000090102001da012020f40360009fc6a00001000000da012004d80360009610200180a32001328000058c21a00c9010000b1080000f010000008b19600cba10200294100006fa21bffcd622a004d2032000d222a0009610000ad8032004f606201880a1001b8bd0201830bfffee7fffe56601000000941000088c21a0108b196010ba10200390100006fa21bffcd201200cd2222008c4012008c4222004d4222000da012038de012014f403600081c6a00488012058|@1268,131071|68,4,@1266 144,5,@428 260,4,@499 412,5,@520 1266:C2,56|9e13e002c4036004ee00a0008c21a00c8b19600cba102002ac100006fa21bffcee25a004d025a000ec20a0009010200181c3e00601000000|@1267,114849| 1267:S27|4c45585f28292e657750726f6328313329707072696e742d283129 1268:S17|4c45585f28292e657750726f6328313329 1269:O3|@24,@397,@1270 1270:S11|656e64206f662066696c65 1271:S18|4c45585f28292e696e73796d626f6c283129 1272:O2|@1428,@103 1273:C2,2268|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d0213ff4fa022000fa213ff0fa022004fa213fecfa022008fa213fe84000023188013fe880a221f93280003380a2208dc401200cee00a010ee213ffcec00a014ec213ff8ea00a018ea213ff4e800a01ce8213ff0e600a020e6213fece400a024e4213fe8d600a00cd400a008d200a004d000a0004000024d88013fe8e2012008e004600080a420c12a800012de01201080a420e53880000fde012010d001200c4000027801000000de012004c203e00092100001901021f97fffe21301000000da012004d0236000108001f3e4012000d401200cd203e008901021f9da03e004f40360009fc6a00001000000108001eae40120003280002e80a22089c401200cee00a010ee213ffcec00a014ec213ff8ea00a018ea213ff4e800a01ce8213ff0e600a020e6213fece400a024e4213fe8d600a00cd400a008d200a004d000a0004000021a88013fe8e2012008e004600080a420893280000dde012010de012010d001200cda03e00cf40360009fc6a00001000000c20120009a10210dda206000108001c5e4012000d401200cd203e0089010208dda03e004f40360009fc6a00001000000108001bce40120003280000d80a220edc4012010d001200cda00a00cf40360009fc6a00001000000ee012000ac1020fdec25e000108001afe40120003280000b80a220b1c4012000ae1020e5ee20a000ec01200cea05a000a8102081e8256000108001a4e40120003280000b80a220a1c4012000ae1020e1ee20a000ec01200cea05a000a8102081e825600010800199e40120003280002380a220a5c401200cee00a010ee213ffcec00a014ec213ff8ea00a018ea213ff4e800a01ce8213ff0e600a020e6213fece400a024e4213fe8d600a00cd400a008d200a004d000a000400001c988013fe8e2012008e004600080a420a922800007d001200cde012000821020d1c223e0001080017ae4012000400005c90100000010800176e40120003280000b80a2216dc4012000ae1020d5ee20a000ec01200cea05a000a8102081e82560001080016be40120003280000b80a22175c4012000ae1020d9ee20a000ec01200cea05a000a8102081e825600010800160e40120003280000b80a2217dc4012000ae1020ddee20a000ec01200cea05a000a8102081e825600010800155e40120003280000b80a221edc4012000ae1020cdee20a000ec01200cea05a000a8102081e82560001080014ae40120003280000b80a221f5c4012000ae1020e9ee20a000ec01200cea05a000a8102081e82560001080013fe40120003280000b80a220b9c4012000ae1020edee20a000ec01200cea05a000a8102081e825600010800134e40120003280009f80a22011c401200cee00a010ee213ffcec00a014ec213ff8ea00a018ea213ff4e800a01ce8213ff0e600a020e6213fece400a024e4213fe8d600a00cd400a008d200a004d000a0004000016488013fe8e2012008e004600080a420b922800034de01200cde01200c90102001da03e010f40360009fc6a00001000000c2012008da006000d0213ffc9210000d113f004a900221547fffe12888013ffc8c21a00c8b19600cba10200298100006fa21bffc173f004a9602e16cd6232000d0232004d4012010d202a004d2213ffcd002a008d0213ff8c402a00cc4213ff4ee02a010ee213ff0ec02a014ec213fecea02a018ea213fe8e802a01ce8213fe4e602a020e6213fe0e402a024e4213fdcd602a00094102005d20120009010000c7ffffe0788013fdc108000e788012004c203e010c2213ffcda03e014da213ff8d803e018d8213ff4d603e01cd6213ff0d403e020d4213fecd203e024d2213fe8d603e00cd403e008d203e004d003e0004000011b88013fe8d0012008c402200080a0a0b922800034ee012000ee01200c90102001da05e010f40360009fc6a00001000000ec012008ea05a000d0213ffc92100015113f004a900221b07fffe0df88013ffc8c21a00c8b19600cba102002a8100006fa21bffc273f004aa604e1cce6252000d0252004e4012010e204a004e2213ffce004a008e0213ff8de04a00cde213ff4c204a010c2213ff0da04a014da213fecd804a018d8213fe8d604a01cd6213fe4d404a020d4213fe0d204a024d2213fdcd604a00094102005d2012000901000147ffffdbe88013fdc1080009e88012004ac1020f5ec25e000ea01200ce8056000a6102081e6252000d0213ffc88013ffc10800094880120043280000780a220c1c4012000ae102001ee20a0001080008bd0213ffc2a80000a80a2210580a220e53880000780a22105d001200c400001010100000010800081d0213ffc2a80000780a2218580a221693880000480a221851080000cc40120102a80000680a2209d80a221e928800007c401201080a2209d22800004c40120101080000dd0213ffcd401200c133f004a9202621011000083900223d8da00a004f40360009fc6a0000100000010800065d0213ffc8410205188013ffc80a0a00132800005aca0a004ae1020011080001580a5e001aa85a010293f004aa80522e4bb3d6002fa0d001db92f6002a6072001e401200080a4c01232800005a2a0a004ae1020051080000780a5e00184100011f606201880a1001b8bd0201830bfffe82280000dd0012000e2012014d4012010d204600811000083900223d8da046004f40360009fc6a000010000001080003c880120047ffff5d301000000e2012010d0213ffc90102001da046010f40360009fc6a00088013ffcd0213ffcd2012000113f004a900223007fffe04d88013ffc921020897fffe04a010000008c21a00c8b19600cba102002a0100006fa21bffc1f3f004a9e03e31cde242000d0242004c2012018da006004da213ffcd8006008d8213ff8d600600cd6213ff4d4006010d4213ff0d2006014d2213fecd0006018d0213fe8c400601cc4213fe4ee006020ee213fe0ec006024ec213fdcd600600094102005d2012000901000107ffffd2988013fdcea012018e8056000a6102081e62520008801200888012004d0213ffc88013ffc88012004e4012000e204a00080a461113280000790102001d001200cda012010de01201410bffdcf88012018e001201481c4200688012018|@1319,131071|52,5,@1274 140,5,@1275 184,5,@1278 208,5,@496 344,5,@1275 668,5,@1275 716,5,@1301 1072,5,@1275 1140,4,@1309 1148,5,@496 1176,4,@1310 1284,5,@1265 1364,5,@1275 1432,4,@1311 1440,5,@496 1468,4,@1312 1576,5,@1265 1684,5,@1278 1772,4,@1313 1780,4,I48 1848,4,@1316 1940,4,I48 1972,5,@1198 2016,4,@1317 2024,5,@496 2036,5,@496 2064,4,@1318 2172,5,@1265 1274:C2,172|9e13e002f606201880a1001b8bd02018c4022000ee00a00080a5e0252a80000780a5e08180a5e0353880000480a5e08110800006de213ffc22800004de213ffc1080001990100017d0213ff8ec022010ec213ff4ea022014ea213ff0e8022018e8213fece602201ce6213fe8e4022020e4213fe4e2022024e2213fe0d602200cd4022008d2022004d00220004000000f88013fe0d0012000de01200410bfffda8801200881c3e00601000000|@1277,131071|140,5,@1275 1275:C2,128|9e13e002f606201880a1001b8bd02018d6012008d402e00080a2a00132800013d202a004de213ffcd0213ff890102001da012010f40360009fc6a00088013ff8808a20013280000392102011d2022000d0012000d222200090102001c401200481c0a00688012020d222e000c402a000c42220009010200181c3e00688012018|@1276,131071| 1276:S17|4c45585f28292e6e657874436828313029 1277:S24|4c45585f28292e736b697057686974655370616365283129 1278:C2,2688|9e13e002f606201880a1001b8bd02018c4022008ae102101ee20a000de213ffcd0213ff8fa022000fa213ff4fa022004fa213ff0c4213fecfa02201cfa213fe894100008133f00489202606411000083900223d8400002af88013fe8ec012008d025a000ea01200ce805600080a521dd328000e4e601200ce605a000921020c1901000131b0000839a0360d8f40360009fc6a0000100000080a22001228000d9e601200ce4012004a2102109e224a000e0012010de042010de213ffcc2042014c2213ff8da042018da213ff4d804201cd8213ff0d6042020d6213fecd4042024d4213fe8d604200cd4042008d2042004d00420007fffff8d88013fe8d201200cd002600080a221e132800072c4026000c4012010ee00a010ee213ffcec00a014ec213ff8ea00a018ea213ff4e800a01ce8213ff0e600a020e6213fece400a024e4213fe8d600a00cd400a008d200a004d000a0007fffff7588013fe8e201200ce004600080a420c12a80000780a4218580a420e53880000480a421851080000fd40120102a80000780a4210580a421993880000480a4210510800008d40120102a800012de01201080a421193880000fde012010d4012010133f0048920262a0113f0048900223584000025201000000de012008d023e00090102001c201201481c060068801201890102001da03e010f40360009fc6a00001000000c2012008da006000d0213ffc9210000d113f0048900223647fffdf1c88013ffcd8012010d60320009210000b7fffdf17010000008c21a00c8b19600cba10200294100006fa21bffc133f004892026388d222a000d022a004d0012014c4022004ee012018c4212018ec022008ec212014ea02200cea212010e8022010e821200ce6022014e6212008e4022018e4212004e202201ce0012000e2212000de022020de213ffcc2022024c2213ff8d60220009a10000a94102005921000109010000d9e100017353f0042b406a05081c6a00488013ff880a0a0c12a800012ee01201080a0a0e53880000fee012010d4012010133f004892026064113f0048900223cc4000020501000000ee012008d025e00090102001ec01201481c5a0068801201890102001da05e010f40360009fc6a00001000000ec012008ea05a000d0213ffc92100015113f0048900223647fffdecf88013ffce8012010e6052000921000137fffdeca010000008c21a00c8b19600cba102002a4100006fa21bffc233f0048a20463d8e224a000d024a004e0012014de042004c2012018de212018da042008da212014d804200cd8212010d6042010d621200cd4042014d4212008d2042018d2212004d004201cc4012000d0212000ee042020ee213ffcec042024ec213ff8d60420009410200592100002901000129e100001353f0042b406a05081c6a00488013ff8e404e00080a4a1e13280007de201200ce2012008e0046000921020c1901000101b0000839a0360d8f40360009fc6a0000100000080a2200122800071e201200cde012010c203e010c2213ffcda03e014da213ff8d803e018d8213ff4d603e01cd6213ff0d403e020d4213fecd203e024d2213fe8d603e00cd403e008d203e004d003e0007ffffea988013fe8d001200cc402200080a0a0c12a80000780a0a18580a0a0e53880000480a0a1851080000fd40120102a80000780a0a10580a0a1993880000480a0a10510800008d40120102a800012ee01201080a0a1193880000fee012010d4012010133f0048920262a0113f00499002201c4000018601000000ee012008d025e00090102001ec01201481c5a0068801201890102001da05e010f40360009fc6a00001000000ec012008ea05a000d0213ffc92100015113f0049900220287fffde5088013ffce8012010e6052000921000137fffde4b010000008c21a00c8b19600cba102002a4100006fa21bffc233f0049a204604ce224a000d024a004e0012014de042004c2012018de212018da042008da212014d804200cd8212010d6042010d621200cd4042014d4212008d2042018d2212004d004201cc4012000d0212000ee042020ee213ffcec042024ec213ff8d60420009410200592100002901000129e100001353f0042b406a05081c6a00488013ff8e004600080a420b932800004de0460001080000bde04600080a3e11532800004c204600010800006de04600080a061953280011290102001de04600080a3e0b93280006fd0213ffcc20120049a102105da206000d8012008d6032000921020b99010000b7fffde0901000000d4012008d022a000d2012010d0026010d0213ffcc4026014c4213ff8ee026018ee213ff4ec02601cec213ff0ea026020ea213fece8026024e8213fe8d602600cd4026008e6026000e402600492100012901000137ffffe1b88013fe8e201200ce004600080a420c12a800006de01201080a420e52880003ade012008de01201090102001da03e010f40360009fc6a00001000000c2012008da006000d0213ffc9210000d113f0049900220907fffdddc88013ffcd8012010d60320009210000b7fffddd7010000008c21a00c8b19600cba10200294100006fa21bffc133f0049920260b0d222a000d022a004d0012014c4022004c4213ffcee022008ee213ff8ec02200cec213ff4ea022010ea213ff0e8022014e8213fece6022018e6213fe8e402201ce4213fe4e2022020e2213fe0e0022024e0213fdcd60220009e10000a94102005d20120009010000f7ffffab588013fdc10800011c2012010c203e000d4012010133f00489202606490100001400000ce01000000da012008d0236000d0213ffc88013ffc10800004c201201088013ffcc2012010da00600080a3611532800004d800600010800007d800600080a3219522800004d80060001080009190102001d6012014d8213ffcd402e010d4213ff8d202e014d2213ff4d002e018d0213ff0c402e01cc4213fecee02e020ee213fe8ec02e024ec213fe4ea02e000e802e004e602e008e402e00c961000129410001392100014901000157ffffda988013fe4e2012014e004600080a421f93280004ade046000de012018c203e010c2213ffcda03e014da213ff8d803e018d8213ff4d603e01cd6213ff0d403e020d4213fecd203e024d2213fe8d603e00cd403e008d203e004d003e0007ffffd9188013fe8d0012014c402200080a0a0c12a80001aee02200080a0a0e538800017ee022000ee01200cac102105ec25e000ea012010e8056000133f0049920260f4901000147fffdd5601000000d4012018133f0048920260644000007401000000e6012010d024e00090102001e401201c81c4a006880120208c21a00c8b19600cba102002ac100006fa21bffcaa102001ea25a004ee25a0008c21a00c8b19600cba102002a8100006fa21bffcec252004a61021f9e6252000e4012008e824a000e2012000e222200090102001e001201c81c420068801202080a3e0c12a800019c204600080a3e0e538800016c2046000c201200c9a102105da206000d8012010d6032000921021159010000b7fffdd2401000000d4012018133f0048920260644000004201000000d4012010d022a00090102001d201201c81c26006880120208c21a00c8b19600cba1020029a100006fa21bffc98102001d8236004c2236000d6012008da22e000d4012000d424600090102001d201201c81c2600688012020d601201881c2e0068801201cda01201481c3600688012018|@1300,131071|68,4,@1279 76,4,I48 84,5,@1282 132,4,I24 244,5,@1275 340,5,@1275 440,4,@1286 448,4,@1289 456,5,@1282 524,4,@1290 532,5,@496 552,5,@496 580,4,@1291 704,4,@1265 748,4,@1279 756,4,@1292 764,5,@1282 832,4,@1290 840,5,@496 860,5,@496 888,4,@1293 1008,4,@1265 1056,4,I24 1156,5,@1275 1256,4,@1286 1264,4,@1294 1272,5,@1282 1340,4,@1295 1348,5,@496 1368,5,@496 1396,4,@1296 1516,4,@1265 1632,5,@496 1724,5,@1275 1804,4,@1297 1812,5,@496 1832,5,@496 1860,4,@1298 1972,5,@1265 1996,4,@1279 2008,5,@1282 2180,5,@1275 2276,5,@1275 2336,4,@1299 2348,5,@496 2360,4,@1279 2368,5,@1282 2548,5,@496 2560,4,@1279 2568,5,@1282 1279:O1|@1280 1280:C2,56|9e13e00280a220c12a80000a9010200180a220e538800005901020019010200581c3e0060100000081c3e0060100000081c3e00601000000|@1281,129| 1281:S15|436861722e69734469676974283129 1282:C2,112|9e13e002f606201880a1001b8bd02018d4213ffcd2213ff8fa02a000fa213ff4de213ff0d0213fec901020019a013ffc4000001788013fec8c21a00c8b19600cba10200284100006fa21bffcd020a004ee012000ee20a00090100002de012004353f0027b406a38481c6a00488012014|@1285,131071|48,5,@1283 96,4,@520 1283:C2,224|9e13e002f606201880a1001b8bd02018d0037ff8c4022000de213ffcda213ff8c4213ff490100002da037ffcf40360009fc6a00088013ff480a220012280002690102001ee012004ec05e000ea05a010ea213ffce805a014e8213ff8e605a018e6213ff4e405a01ce4213ff0e205a020e2213fece005a024e0213fe8d605a00cd405a008d205a004d005a0007ffffcc088013fe890102001da0120047fffffda9e13e0028c21a00c8b19600cba1020029e100006fa21bffcd023e004c2012000c223e0009010000fda01200881c360068801200cee01200881c5e0068801200c|@1284,131071|140,5,@1275 1284:S26|4c45585f28292e7265616443686172732833296c6f6f70283129 1285:S19|4c45585f28292e726561644368617273283329 1286:O1|@1287 1287:C2,120|9e13e00280a220c12a80000880a2218580a220e53880000580a221859010200581c3e006010000002a80000880a2210580a221993880000580a221059010200581c3e006010000002a80000a9010200180a2211938800005901020019010200581c3e0060100000081c3e0060100000081c3e00601000000|@1288,129| 1288:S18|436861722e69734865784469676974283129 1289:S3|307778 1290:S25|6d616c666f726d656420776f726420636f6e7374616e743a20 1291:C2,40|9e13e002f606201880a1001b8bd02018c402200cd00360049a100002f403600081c6a00401000000|@1264,131071| 1292:S2|3077 1293:C2,40|9e13e002f606201880a1001b8bd02018c402200cd00360049a100002f403600081c6a00401000000|@1264,131071| 1294:S2|3078 1295:S28|6d616c666f726d656420696e746567657220636f6e7374616e743a20 1296:C2,40|9e13e002f606201880a1001b8bd02018c402200cd00360049a100002f403600081c6a00401000000|@1264,131071| 1297:S23|6d616c666f726d6564207265616c206e756d6265723a20 1298:C2,40|9e13e002f606201880a1001b8bd02018c402200cd00360049a100002f403600081c6a00401000000|@1264,131071| 1299:S2|457e 1300:S21|4c45585f28292e70617273654e756d626572283129 1301:C2,80|9e13e002f606201880a1001b8bd02018fa022014fa213ffcd0213ff8de213ff4fa022000fa213ff0901020019a013ffc4000000f88013ff0c4012000d020a00090102001ee01200481c5e00688012010|@1308,131071|48,5,@1302 1302:C2,120|9e13e002f606201880a1001b8bd02018d0037ffcde213ffcda213ff8c4022010901020019a100002f40360009fc6a00088013ff8d0213ffcee01200090102001da05e000f40360009fc6a00088013ffc808a20013280000390102011d00220009a0120084000000c01000000ec01200881c5a0068801200c|@1307,131071|100,5,@1303 1303:C2,528|9e13e002f606201880a1001b8bd0201880a2201132800041c4037ffcc4037ffcee00bffcde213ffcda213ff8d0213ff4ee213ff090102001da05e010f40360009fc6a00088013ff0ec012008d0213ffc92103ffdd005bff87fffdce588013ffc92100008113f004a9002204c7fffdb7001000000921020a57fffdb6d010000008c21a00c8b19600cba102002aa100006fa21bffc293f004aa8052084e8256000d0256004e6012004e404e004e4213ffce204e008e2213ff8e004e00ce0213ff4de04e010de213ff0c204e014c2213fecda04e018da213fe8d804e01cd8213fe4d604e020d6213fe0d404e024d4213fdcd604e00094102005d2012000901000157ffff84c88013fdcd0012008d201201081c2600688012014de213ffcda213ff8d0213ff490102001da00a000f40360009fc6a00088013ff4808a200132800003ae102011ee022000ec01200080a5a0a93280001a80a5a0a180a5e0a53280001390100017ea012004e8057ffc90102001da052000f40360009fc6a00001000000808a20013280000690102011d0022000e601200881c4e0068801200ce601200881c4e0068801200cda012004de01200810bfff958801200c328000129010001780a5e0a93280000b9010001790102001ea012004da057ffc7fffff6501000000da012004de01200810bfff878801200cda012004de01200810bfff838801200cda012004de01200810bfff7f8801200c|@1306,131071|88,5,@509 100,4,@1304 108,5,@496 120,5,@496 148,4,@1305 256,5,@1265 472,5,@1302 1304:S45|656e64206f662066696c6520666f756e6420696e20636f6d6d656e742028737461727473206174206c696e6520 1305:C2,40|9e13e002f606201880a1001b8bd02018c402200cd00360049a100002f403600081c6a00401000000|@1264,131071| 1306:S54|4c45585f28292e7061727365436f6d6d656e74283129736b6970436f6d6d656e74283129736b6970436f6d6d656e74426f6479283129 1307:S36|4c45585f28292e7061727365436f6d6d656e74283129736b6970436f6d6d656e74283129 1308:S22|4c45585f28292e7061727365436f6d6d656e74283129 1309:S16|756e6b6e6f776e2073796d626f6c202e 1310:C2,40|9e13e002f606201880a1001b8bd02018c402200cd00360049a100002f403600081c6a00401000000|@1264,131071| 1311:S17|756e6b6e6f776e2073796d626f6c202e2e 1312:C2,40|9e13e002f606201880a1001b8bd02018c402200cd00360049a100002f403600081c6a00401000000|@1264,131071| 1313:O1|@1314 1314:C2,144|9e13e00280a221052a80000780a2218580a221693880000480a221851080000f901020052a80000680a220c180a221e92880000a9010200580a220c12a80000980a2209d80a220e528800004901020051080000480a2209d81c3e006010000003280000580a2217d9010200581c3e0060100000032800005901020019010200581c3e0060100000081c3e00601000000|@1315,129| 1315:S24|4c45585f28292e6973416c7068614e756d65726963283129 1316:S20|3a3d3c3e2b2a215e2f7c26257e2d3f60405c2423 1317:S19|756e6b6e6f776e206368617261637465722022 1318:C2,40|9e13e002f606201880a1001b8bd02018c402200cd00360049a100002f403600081c6a00401000000|@1264,131071| 1319:S20|4c45585f28292e7061727365546f6b656e283129 1320:O2|@1322,@1321 1321:O1|@1426 1322:C2,908|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d4213ff4fa02a000fa213ff0fa02a004fa213fecfa02a008fa213fe87ffffd4588013fe8c4012008ee00a00080a5e0b932800092ec012004ec01200cd0213ffcea05a010ea213ff8e805a014e8213ff4e605a018e6213ff0e405a01ce4213fece205a020e2213fe8e005a024e0213fe4d605a00cd405a008d205a004d005a0007ffffa3288013fe4de01200cc203e00080a061052a80000780a0618580a061693880000480a0618510800009921020b92a800011c2213ffc80a061e928800004921020b91080000cc2213ffcd00120007fffd9f501000000d4012010133f004a92026210da012014de01201810bfffc08801201c9a10205188013ffc80a360013280000596a36004981020011080001580a320019482e010133f004a920262e4bb3aa002fa0a401db92f600290072001c401200080a2000232800005aea36004981020051080000780a320019a100017f606201880a1001b8bd0201830bfffe82280000fee012014ee012018fa05e004fa213ffc921020b9d00120047fffd9ca88013ffcd4012018d2012000da01201cde01202010bfff968801202490102001da05e010f40360009fc6a00001000000d0213ffcd2012004113f004b900223387fffd9b988013ffc921020b97fffd9b601000000d20120047fffd9b3010000008c21a00c8b19600cba102002ac100006fa21bffc2b3f004baa056354ea25a000d025a004e8012018e6052004e4012020e6212020e2052008e221201ce005200ce0212018de052010de212014c2052014c2212010da052018da21200cd805201cd8212008d6052020d6212004d4052024d2012000d4212000d605200094102005901000169e100012353f0042b406a05081c6a00401000000d025a000808a200132800004b8102004f8022000b92f2002aa072001811f200024800027d0213ffc808a200132800004b8102004f8022000b92f2002a8072001811f20003480000a808a2001a4100008113f0004900223d0f40620209fc6a00001000000a6102001808a200122800005fa0a2004a610000810800005d0213ffcb92f6002a6072001d0213ffc9210209d901000131b0000839a0360d8f40360009fc6a00088013ffc80a2200122800006d20120001080000ca61020f988013ffcd2012000113f004b900223984000016201000000808a200132800003a6102005e6022000e8012004e625200090102001e601201881c4e0068801201c|@1425,131071|52,5,@1282 152,5,@1275 232,5,@496 244,4,@1313 304,4,@1316 404,5,@496 464,4,@1323 472,5,@496 484,5,@496 496,5,@496 524,4,@1324 640,4,@1265 736,4,@224 804,4,I24 852,4,@1325 860,5,@1420 1323:S20|696e76616c6964206964656e7469666572202d20 1324:C2,40|9e13e002f606201880a1001b8bd02018c402200cd00360049a100002f403600081c6a00401000000|@1264,131071| 1325:O4|-1,@100,@101,@99 1326:O2|@737,272 1327:O2|@1419,14 1328:O2|@1329,28 1329:S4|7468656e 1330:O2|@1331,15 1331:S2|6966 1332:O2|@1333,22 1333:S2|6f66 1334:O2|@1335,37 1335:S7|73686172696e67 1336:O2|@1337,35 1337:S6|737472756374 1338:O2|@1339,29 1339:S4|74797065 1340:O2|@1341,33 1341:S9|737472756374757265 1342:O2|35,43 1343:O2|42,48 1344:O2|@1345,31 1345:S4|77697468 1346:O2|@1347,24 1347:S4|6f70656e 1348:O2|@1349,13 1349:S3|66756e 1350:O2|@1351,3 1351:S3|616e64 1352:O2|@1353,12 1353:S2|666e 1354:O2|58,47 1355:O2|@1356,16 1356:S2|696e 1357:O2|@1358,10 1358:S3|656e64 1359:O2|61,45 1360:O2|@1361,8 1361:S2|646f 1362:O2|@1363,9 1363:S4|656c7365 1364:O2|@1365,40 1365:S6|657174797065 1366:O2|@1367,17 1367:S5|696e666978 1368:O2|@1369,7 1369:S8|6461746174797065 1370:O2|@1371,23 1371:S2|6f70 1372:O2|@1373,5 1373:S2|6173 1374:O2|@1375,2 1375:S7|61627374797065 1376:O2|@1377,34 1377:S9|7369676e6174757265 1378:O2|@1379,18 1379:S6|696e66697872 1380:O2|@1381,39 1381:S8|7769746874797065 1382:O2|@1383,30 1383:S3|76616c 1384:O2|@1385,26 1385:S5|7261697365 1386:O2|@1387,21 1387:S6|6e6f6e666978 1388:O2|124,44 1389:O2|@1390,38 1390:S7|66756e63746f72 1391:O2|@1392,11 1392:S9|657863657074696f6e 1393:O2|@1394,42 1394:S5|7768657265 1395:O2|@1396,36 1396:S3|736967 1397:O2|@1398,25 1398:S6|6f72656c7365 1399:O2|@1400,20 1400:S5|6c6f63616c 1401:O2|@1402,49 1402:S2|2d3e 1403:O2|@1404,32 1404:S5|7768696c65 1405:O2|@1406,50 1406:S2|3a3e 1407:O2|@1408,46 1408:S2|3d3e 1409:O2|@1410,27 1410:S3|726563 1411:O2|@1412,19 1412:S3|6c6574 1413:O2|@1414,41 1414:S7|696e636c756465 1415:O2|@1416,4 1416:S7|616e64616c736f 1417:O2|@1418,6 1418:S4|63617365 1419:S6|68616e646c65 1420:C2,164|9e13e002f606201880a1001b8bd02018c402200080a0bffd32800014fa022008ee022004ec05e000ea02200ce8056000e8213ffcd2213ff8de213ff4901000099a100016f40360009fc6a00088013ff49a0120084000001b01000000e601200081c4e0068801200cfa213ffcd2213ff8de213ff4ee022004901000099a100017f40360009fc6a00088013ff49a0120084000006601000000ec01200081c5a0068801200c|@1424,131071|84,5,@1421 144,5,@1423 1421:C2,296|9e13e002f606201880a1001b8bd02018b8222001811f200036800004c40360001080000ade213ffcee00a000b825e001ba222001811f401c36800004de213ffc1080000ab8222001ae100008113f0004900223d0f40620209fc6a00088013ffc84102001b8222001b9172004ae072001ec00801c8410001680a0a00132800005de213ffc9010200181c3e00601000000da213ff8d0213ff4fa00a004fa213ff0d200a000d0037ffc1b0000839a0360d8f40360009fc6a00088013ff080a220012280000ce80120048c21a0088b196008ba10200190100006fa21bffcea012000ea222000e801200c81c520068801201080a5200132800006aa100014e6012008e404e000e204a000aa100011b8256001b91f200490072001da012008de01200c10bfffb988012010|@1422,131071|76,4,@224 168,4,I24 1422:S27|486173685461626c652e6861736853756228322966696e64283129 1423:C2,308|9e13e002f606201880a1001b8bd02018b8222001811f200036800004c40360001080000cde213ffcfa00bffcbb2f6008b9376006ae072001ba222001811f401c36800004de213ffc1080000ab8222001ae100008113f0004900223d0f40620209fc6a00088013ffc84102001b8222001ee00801c8410001780a0a00132800005de213ffc9010200181c3e00601000000da213ff8d0213ff4fa00a004fa213ff0d200a000d0037ffc1b0000839a0360d8f40360009fc6a00088013ff080a220012280000cea0120048c21a0088b196008ba10200190100006fa21bffcec012000ec222000ea01200c81c560068801201080a5600132800009ac100015e8012008e6052000fa04fffcbb2f6008b9376006a4072001ac100012b825a001b91f200490072001da012008de01200c10bfffb688012010|@1422,131071|84,4,@224 168,4,I24 1424:S20|486173685461626c652e68617368537562283229 1425:S20|4c45585f28292e70617273654964656e74283329 1426:C2,128|9e13e002de213ffcd0213ff88410205188013ff880a0a001328000069ea0a00490102001de01200481c3e006880120089083e0101f3f004a9e03e2e4bb3a2002fa0bc01db92f600282072001d001200080a04008328000069ea0a00490102005c401200481c0a006880120088410000ff606201880a1001b8bd0201830bfffe6|@1427,65729|52,4,@1316 1427:S27|436861722e636f6e7461696e732831296d61746368283129283129 1428:C2,476|9e13e002f606201880a1001b8bd02018d0213ffcda213ff8fa022000fa213ff4de213ff0fa022004fa213fecc4022010c4213fe8ee022014ee213fe4ec022018ec213fe0ea02201cea213fdce8022020e8213fd8e6022024e6213fd4d602200cd4022008d2013fecd00220007ffff6e888013fd4c6213ffc253f004ea404a1fee4213ff8e201200ce0046004e0213ff486013ff4901020019a0120104000005788013ff49e10200180a22001328000058c21a00c9010000f1080000f010000008b19600cba10200282100006fa21bffcde206004da022000da2060009e100001d0022004f606201880a1001b8bd0201830bfffee7fffd8d501000000c201200cd020600090102001c6012008da01201081c3600688012020d801200cd6022000d403200480a2c00a3280002af4062020d2012010d0213ffc90102001da026010f40360009fc6a00088013ffcc4012014ee00a004ee212014ec00a008ec212010ea00a00ce801200cea21200ce600a010e4012008e6212008e200a014e2212004e000a018de012000e0212000c200a01cc2213ffcda00a020da213ff8d800a024d8213ff4d600a0009410200592100008113f005090022334de213ff09e100012353f0042b406a05081c6a00488013ff49fc6a0000100000090102001|@1441,131071|108,5,@1275 120,4,$1428+282 156,5,@1429 244,5,@514 432,4,@1438 448,4,@1265 1429:C2,1800|9e13e002f606201880a1001b8bd02018c4037ff8ee00a00080a5e0893280000880a5e029ee036000ec05e000aa102081ea25a00081c3e006010000003280002b80a5e171ec036000de213ffcda213ff8ea05a010ea213ff4e805a014e8213ff0e605a018e6213fece405a01ce4213fe8e205a020e2213fe4e005a024e0213fe0d605a00cd405a008d205a004d005a0007ffff66188013fe0de012000c203fffc8c21a0108b196010ba1020039a100006fa21bffc98102001d8236008173f00509602e200d6236004d4006004d42360009010000df40620209fc6a000010000009010200180a5e17132800108ec036000ec036000de213ffcda213ff8d0213ff4ea05a010ea213ff0e805a014e8213fece605a018e6213fe8e405a01ce4213fe4e205a020e2213fe0e005a024e0213fdcd605a00cd405a008d205a004d005a0007ffff63588013fdcde012004c203fff8da006000d803e000da213ffcd6032010d6213ff8d4032014d4213ff4d2032018d2213ff0d003201cd0213fecc4032020c4213fe8ee032024ee213fe4d603200cd4032008d2032004d00320007ffff61e88013fe4ec01200080a5a0252a80000780a5a08180a5a0353880000480a5a08110800006ea01200822800004ea0120081080008380a5a179d00560007ffff5dc0100000080a2217132800004e801200810800063e2012008e6052000e6213ffc90102001da04e010f40360009fc6a00088013ffce401200ce204bff8e0046000d0213ffc133f003a92026228901000107fffec6688013ffc92100008113f0050900222147fffd5cb01000000133f0050920262347fffd5c7010000008c21a00c8b19600cba1020029e100006fa21bffc033f005082006248c223e000d023e004da012004d8036004d8213ffcd6036008d6213ff8d403600cd4213ff4d2036010d2213ff0d0036014d0213fecc4036018c4213fe8ee03601cee213fe4ec036020ec213fe0ea036024ea213fdcd603600094102005d20120009010000f7ffff2a688013fdce8012010e6053ff8e404e00080a4a1712280002188012008e204e00080a460892280001d88012008e004e00080a420112280001988012008de052000c203e010c2213ffcda03e014da213ff8d803e018d8213ff4d603e01cd6213ff0d403e020d4213fecd203e024d2213fe8d603e00cd403e008d203e004d003e0007ffff5ad88013fe8f606201880a1001b8bd0201830bfffdce2012008e0046000de042010de213ffcc2042014c2213ff8da042018da213ff4d804201cd8213ff0d6042020d6213fecd4042024d4213fe8d604200cd4042008d2042004d00420007ffff59588013fe8d0012004da012008de01200c10bfff0c88012010328000378c21a00cea012008e8057ff8e6052000e4056000e6213ffce204a010e2213ff8e004a014e0213ff4de04a018de213ff0c204a01cc2213fecda04a020da213fe8d804a024d8213fe4d604a00cd404a008d204a004d004a0007ffff57788013fe48c21a00c8b19600cba10200296100006fa21bffcd4012008d422e00492102171d222e0008c21a00c8b19600cba10200290100006fa21bffcd622200484102179c42220008c21a00c8b19600cba102002ae100006fa21bffcd025e004ec012000ec25e00090100017da01200cde01201010bffed5880120148b19600cba102002aa100006fa21bffce8012004e8256004a6102171e62560008c21a00c8b19600cba102002a4100006fa21bffcea24a004ec24a00090100012da012008de01200c10bffec188012010de213ffcda213ff8d0213ff4ee213ff0ea05a010ea213fece805a014e8213fe8e605a018e6213fe4e405a01ce4213fe0e205a020e2213fdce005a024e0213fd8d605a00cd405a008d205a004d005a0007ffff52f88013fd8de01200080a3e0113280001680a3e085c2012008da007ffc8c21a0108b196010ba10200398100006fa21bffc96102001d6232008153f00509402a200d4232004d2036004d22320009010000cf40620209fc6a000010000009010200180a3e0852a80000780a3e08180a3e1f93880000480a3e081108000068c21a00c228000048c21a00c1080000ec20120088b19600cba10200282100006fa21bffcda012004da206004de20600090100001da012008de01200c10bffe7c88012010da006000da213ffc90102001da036010f40360009fc6a00088013ffcd0213ffcd00120047fffea4588013ffc92100008113f00509002228c7fffd4c701000000133f0050920262ac7fffd4c3010000008c21a00c8b19600cba10200298100006fa21bffc173f00509602e2c4d6232000d0232004d4012004d202a004d2213ffcd002a008d0213ff8c402a00cc4213ff4ee02a010ee213ff0ec02a014ec213fecea02a018ea213fe8e802a01ce8213fe4e602a020e6213fe0e402a024e4213fdcd602a00094102005d20120009010000c7ffff1a288013fdcd001200cda012010de01201410bffe4188012018|@1437,131071|144,5,@1275 188,4,@1430 320,5,@1275 412,5,@1275 476,5,@1274 548,4,@1197 560,5,@1212 572,4,@1431 580,5,@496 588,4,@1432 596,5,@496 624,4,@1433 732,5,@1265 864,5,@1275 960,5,@1275 1080,5,@1275 1368,5,@1275 1428,4,@1430 1600,5,@1198 1612,4,@1434 1620,5,@496 1628,4,@1435 1636,5,@496 1664,4,@1436 1772,5,@1265 1430:S9|456e644f664c696e65 1431:S21|756e65787065637465642063686172616374657220 1432:S11|20696e205c202e2e2e205c 1433:C2,40|9e13e002f606201880a1001b8bd02018c402200cd00360049a100002f403600081c6a00401000000|@1264,131071| 1434:S22|756e7072696e7461626c652063686172616374657220 1435:S16|20666f756e6420696e20737472696e67 1436:C2,40|9e13e002f606201880a1001b8bd02018c402200cd00360049a100002f403600081c6a00401000000|@1264,131071| 1437:S33|4c45585f28292e7061727365537472696e67283129676574537472696e67283129 1438:O1|@1439 1439:C2,44|9e13e002f606201880a1001b8bd02018c402200c113f0050900223849a100002f403600081c6a00401000000|@1264,131071|20,4,@1440 1440:S36|6e6f206d61746368696e672071756f746520666f756e64206f6e2074686973206c696e65 1441:S21|4c45585f28292e7061727365537472696e67283129 1442:C2,16|9e13e002d002e00081c3e00688012018|@1443,143| 1443:S24|4c45585f28292e6572726f724f6363757272656428313029 1444:O3|103,@522,@1445 1445:S22|537461746963206572726f7273202870617373203129 1446:O1|@1447 1447:C2,20|9e13e002113f00519002208481c3e00601000000|@1449,129|4,4,@1448 1448:O6|0,0,0,0,0,0 1449:S34|434f4d50494c45525f424f445928292e62617365436f6d70696c6572283329283129 1450:C2,204|9e13e0028c21a0088b1960083b100000ba07600190100006fa21bffc84102001c42220008c21a00c8b19600cba10200284100006fa21bffc2f3f0051ae05e1b4ee20a000d020a0048c21a00c8b19600cba102002ae100006fa21bffc2d3f0051ac05a310ec25e000d025e0048c21a00c8b19600cba102002ac100006fa21bffc2b3f0051aa0563acea25a000d025a0048c21a00c8b19600cba10200290100006fa21bffc2b3f0052aa0560a8ea222000ee222004c4226000d0226004ec2260089010200181c3e00601000000|@1461,123011|56,4,@1451 92,4,@1455 128,4,@1457 164,4,@1459 1451:C2,60|9e13e002f606201880a1001b8bd02018c4036004ee00a000d0213ffcde213ff8901000179a013ffc4000000c88013ff8ec01200081c5a00688012008|@1454,131071|40,5,@1452 1452:C2,136|9e13e002f606201880a1001b8bd0201880a2200132800005c40220009010200181c3e00601000000de213ffcda213ff8fa00a000fa213ff4fa00a004fa213ff0d00220047fffffef88013ff0ee0120088c21a00c8b19600cba10200290100006fa21bffcec012000ec222004ea012004ea222000da05e000de01200cf403600081c6a00488012010|@1453,131071| 1453:S41|5554494c49544945535f28292e7365617263684c6973742832296170706c792831296170706c283129 1454:S34|5554494c49544945535f28292e7365617263684c6973742832296170706c79283129 1455:C2,84|9e13e0028c21a00c8b19600cba10200284100006fa21bffcd220a004d020a000d2036004d00260008c21a00c8b19600cba102002ae100006fa21bffcd025e004c425e000ee2260009010200181c3e00601000000|@1456,98467| 1456:S34|5554494c49544945535f28292e7365617263684c697374283229656e746572283229 1457:C2,180|9e13e002f606201880a1001b8bd02018c4036004ee00a000de213ffcd0213ff888013ff880a5e00132800006de05e00090102001de01200481c3e00688012008fa03e004fa213ffcfa05e004fa213ff8d2012000d003e0001b0000839a0360d8f40360009fc6a00088013ff880a220012280000cee0120008c21a0088b196008ba10200190100006fa21bffcc2012004c2222000da01200c81c360068801201088012008f606201880a1001b8bd0201830bfffdd|@1458,131071|88,4,I24 1458:S35|5554494c49544945535f28292e7365617263684c6973742832296c6f6f6b7570283129 1459:C2,40|9e13e002f606201880a1001b8bd02018d2022004d0022000da036004f403600081c6a00401000000|@1460,131071| 1460:S34|5554494c49544945535f28292e7365617263684c697374283229656e746572283129 1461:S26|5554494c49544945535f28292e7365617263684c697374283229 1462:C2,92|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d0213ff4da036008f40360009fc6a00088013ff480a2200132800009c4012008c4012004d0012000da00a004de012008f403600081c6a0048801200c81c0a0068801200c|@1463,131071| 1463:S24|4d6973632e6c6f6f6b757044656661756c74283229283129 1464:O31|@1466,@2024,@2025,@2032,@2034,@2035,@2036,@2037,@2027,@2040,@2042,@2043,@2044,@2045,@2046,@2048,@2049,@2050,@2053,@2056,@2057,@2058,@2061,@2062,@1558,@2063,@2064,@2065,@2041,@2066,@1465 1465:O3|@1491,@1552,@2065 1466:C2,1208|9e13e002f606201880a1001b8bd020188c21a00c8b19600cba10200284100006fa21bffc2f3f0053ae05e338ee20a000d220a0048c21a00c8b19600cba102002ae100006fa21bffc2d3f0059ac05a2e8ec25e000d225e0048c21a0148b196014ba102004ac100006fa21bffc2b3f005aaa056180ea25a000c425a00cee25a008d225a0048c21a01c8b19601c3b100000ba076006aa100006fa21bffc293f0067a8052110e8256000a8102001e8256004a8102001e8256008a8102001e825600ca8102001e8256010a8102001e82560148c21a0188b1960183b100000ba076005a8100006fa21bffc273f0069a604e298e6252000a6102001e6252004a6102001e6252008a6102001e625200ca6102001e62520108c21a0148b196014ba102004a6100006fa21bffc253f006ba404a2ece424e000c424e00cd224e008e824e004d2252004e4036074e4252008ee25200ce2036078e2252010c02d3ffcd2256004ec256008e625600ce8256010c4256014c02d7ffc8c21a00c8b19600cba102002a8100006fa21bffc213f006ca0042144e0252000d22520048c21a0608b196060ba102017a0100006fa21bffc033f006d820060ecc2242000c2036070c2242058d803606cd8242054d6036068d6242050e4036064e424204ce2036060e2242048e203605ce2242044e2036058e2242040e2036014e224203ce2036054e2242038e2036050e2242034e203604ce2242030e2036048e224202ce2036044e2242028e2036010e2242024e2036040e2242020e203603ce224201ce6242018ea242014ec242010d224200ce8242008c4242004da213ffcea213ff8d2213ff4ec213ff0e8213fecee213fe8c4213fe4e0213fe08c21a00c88013fe08b19600cba102002a6100006fa21bffc133f0093920263a8d224e000d2012014d224e0048c21a0108b196010ba10200392100006fa21bffce6226008e602a004e6226004e602a000e6226000d0213ffc8c21a00c88013ffc8b19600cba10200290100006fa21bffc153f00949402a1a4d4222004e6012000e62220009410000fa6100009400007d301000000e6213ffcd0213ff8e4012018e204a008de046000c204a018da00600080a361110280000588013ff89810000d10800004d60120289810000fd6012028d4213ffcd202e0049010000c7fffee1a88013ffc80a220012280000ad4012024d401202cd002a0049a01202c4000416601000000d201200081c2600688012030d202a010d2213ffcd002a014d0213ff8c402a018c4213ff4ee02a01cee213ff0ec02a020ec213fecea02a024ea213fe8d602a00ce802a000e602a004e402a008941000129210001390100014400002db88013fe8d0213ffcd6012004d401202492102001d0012008da012010f40360009fc6a00088013ffcd20120004000479201000000e2012028e0046008de042000c2046018da00600080a36111228000039810000f9810000d80a320e52280001594102001d8042000d600600080a2e111228000039410000c9410000b80a2a0012280000c94102001d0213ffc92100011901020ed1b3f00559a0360544000016888013ffc94100008108000058c21a00cd0213ffc88013ffc8c21a00c8b19600cba10200290100006fa21bffc98102001d8222004d6012000d6222000d401200881c2a00688012038|@2023,131071|36,4,@1467 72,4,@1528 108,4,@1534 156,4,@1644 232,4,@1660 296,4,@1674 392,4,@1676 428,4,@1682 648,4,@1893 736,4,@1898 764,5,@1537 844,5,@1256 876,5,@1900 972,5,@1484 1020,5,@1917 1124,4,@1470 1132,5,@1472 1467:C2,480|9e13e002f606201880a1001b8bd02018da213ffcfa026004fa213ff8d0213ff4fa026000fa213ff0d2036004c4026008ee00a000ec026018ea05a00080a561110280000588013ff0a81000151080000480a520f9a810001780a520f932800013e800a000de213ffc901020019a01200c4000006388013ffca81000088c21a00c8b19600cba10200290100006fa21bffca6102001e6222004e8222000e401200081c4a00688012014e605a00080a4e11122800003a4100014a410001380a4a0d13280004690102001de213ffc901000091b3f00419a0362707fffeda088013ffce4012010e204a004e0046008de042000c2046018da00600080a36111228000039810000f9810000d80a320f922800011e2213ffcd800600080a3211122800008961020d1113f005990022010f40620209fc6a00001000000961020d1d620600090102001d401200081c2a006880120149a012010400004ef88013ffcd8012014d6032004d402e008d202a000c402e018ee00a00080a5e11122800003ac100009ac10001780a5a0d53280000ad0213ffcd0213ffc9010000b1b3f00419a0362707fffed6e88013ffc10800009d00120009210000b901020a51b3f00559a036054400000de88013ffcd0012000ec01200881c5a0068801201c81c3e00688012010|@1527,131071|112,5,@1468 208,4,@1258 216,5,@1260 292,4,@1520 340,5,@1522 408,4,@1258 416,5,@1260 440,4,@1470 448,5,@1472 1468:C2,744|9e13e002f606201880a1001b8bd02018d0036000c4022004ee00a008ec05e000ea00a018e805600080a5211122800003a6100016a610001480a4e0f922800015a610000fde213ffcc4213ff892100002113f0055900220381b3f00559a036054400000b788013ff8d00120001b3f00419a0362707fffed3a01000000113f003190022124e601200481c4e00688012008a410000de200a010e2213ffce000a014e0213ff8ea213ff4de00a01cde213ff0c200a020c2213fecda00a024da213fe8d600a00c94100017d200a004d000a0004000016088013fe8d804a000961000088c21a0108b196010ba10200390100006fa21bffc153f00579402a05cd4222000d6222008d2032004d2222004e6213ffce4213ff8d6213ff4da04bff4f40360009fc6a00088013ff4d0012004c4023ff880a0a0012280002bae102001ec012000808da00132800004b8102004f805a000b92f2002aa072001811f200424800021ae102001808da00132800004b8102004f805a000b92f2002a8072001811f200434800009808da001113f0004900223d0f40620209fc6a00001000000a6102001808da00122800005fa0da005a6100016108000059210209db92f6002a60720019210209d901000131b0000839a0360d8f40360009fc6a00001000000ae100008ec012004ea05bff880a560012280000ba8102001e605a000ee213ffcd204e004d0012000400002d088013ffca810000810800005d0213ffcee213ffc88013ffcd0213ffcd0213ff8e8213ff4a8013ff8e8213ff096102005d4012000130000279202603d113f000f900220cc400003b388013ff08c21a00c8b19600cba10200290100006fa21bffce6012000e6222000e4012004e4222004400003f101000000e2012010a01000088c21a00c8b19600cba10200290100006fa21bffce0222004de01200cde222000e0213ffcda047ffcf40360009fc6a00088013ffcc2012014da006000d00360041b3f00419a0362707fffeca301000000d0012000d801201881c320068801201c|@1519,131071|80,4,@1469 88,4,@1470 96,5,@1472 108,4,@1258 116,5,@1260 124,4,@799 208,5,@1473 244,4,@1502 392,4,@224 456,4,I24 516,5,@1506 572,4,9999 580,4,@375 588,5,@1515 632,5,@1517 712,4,@1258 720,5,@1260 1469:S17|3c74797065206964656e7469666965723e 1470:O2|@1472,@1471 1471:O3|@1491,@1493,@1490 1472:C2,760|9e13e002f606201880a1001b8bd02018c4026008ee00a000ec026018ea05a00080a5611122800003a8100017a810001580a520fd32800023e800a000ae10000faa100008a8100009de052010de213ffcda052014da213ff8ec213ff4d605201cd6213ff0d4052020d4213fecd2052024d2213fe8d605200c94100002d2052004d0052000400000a488013fe8ee213ffcea213ff8e8213ff492100008901020897fffcfcf88013ff4921020897fffcfcc01000000a810000810800046d4012000e605a00080a4e11122800003a4100014a4100013de213ffcd0213ff8d2213ff4d2036004901000127fffec3088013ff480a2200122800018e4012000e4012000e204a010e2213ffce004a014e0213ff8de04a018de213ff4c204a01cc2213ff0da04a020da213fecd804a024d8213fe8d604a00cd404a008d204a004d004a0004000007588013fe8a810000810800021d4012000e204a008e0046000de04a018c203e00080a06111228000039a1000109a100001b8236001811f200036800004b82360011080000701000000811f211436800004010000001080000801000000113f0004900223d0f40620209fc6a00001000000a8102001193f0055980323ccb8236001d603001ca810000bd4012000e8213ffcd202a010d2213ff8d002a014d0213ff4c402a018c4213ff0ee02a01cee213fecec02a020ec213fe8ea02a024ea213fe4d602a00ce602a000e402a004e202a008941000119210001290100013400000c388013fe4d0213ffc133f0056920261f8d00120087fffcf6988013ffcd20120047fffcf6601000000133f0056920262107fffcf62010000008c21a00c8b19600cba102002a0100006fa21bffc1f3f00569e03e224de242000d0242004c2012008da006004d8012010da212010d6006008d621200cd400600cd4212008d2006010d2212004d0006014c4012000d0212000ee006018ee213ffcec00601cec213ff8ea006020ea213ff4e8006024e8213ff0d60060009410200592100002901000109e10000c353f0042b406a05081c6a00488013ff0|@1489,131071|132,5,@1473 160,5,@496 172,5,@496 232,5,@1256 320,5,@1473 416,4,@224 440,4,@1475 544,5,@1484 556,4,@1486 568,5,@496 580,5,@496 588,4,@1487 596,5,@496 624,4,@1488 744,4,@1265 1473:C2,20|9e13e002d60260009010000b81c3e00688012018|@1474,143| 1474:S13|4c45585f28292e696428313029 1475:O69|7,@1477,@1375,@1351,@1416,@1373,@1418,@1369,@1361,@1363,@1358,@1392,@1353,@1349,@1419,@1331,@1356,@1367,@1379,@1412,@1400,@1387,@1333,@1371,@1347,@1398,@1385,@1410,@1329,@1339,@1383,@1345,@1404,@1341,@1377,@1337,@1396,@1335,@1390,@1381,@1365,@1414,@1394,35,124,61,@1408,58,42,@1402,@1406,95,40,41,91,93,44,59,123,125,46,@1478,@1469,@1479,@1480,@1481,@1482,@1483,@1476 1476:S14|756e6b6e6f776e2073796d626f6c 1477:S12|3c6964656e7469666965723e 1478:S3|2e2e2e 1479:S17|3c737472696e6720636f6e7374616e743e 1480:S18|3c696e746567657220636f6e7374616e743e 1481:S15|3c7265616c20636f6e7374616e743e 1482:S15|3c776f726420636f6e7374616e743e 1483:S15|3c6368617220636f6e7374616e743e 1484:C2,36|9e13e002f606201880a1001b8bd0201890102001da012014f403600081c6a00488012018|@1485,131071| 1485:S17|4c45585f28292e6c696e656e6f28313029 1486:S14|2065787065637465642062757420 1487:S10|2077617320666f756e64 1488:C2,40|9e13e002f606201880a1001b8bd02018c402200cd00360049a100002f403600081c6a00401000000|@1264,131071| 1489:S20|534b4950535f28292e6e6f74666f756e64283229 1490:O1|@1501 1491:C2,96|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d0213ff4da036008f40360009fc6a00088013ff480a2200122800006c401200490102005c401200881c0a0068801200cd0012000da00a004de012008f403600081c6a0048801200c|@1492,131071| 1492:S17|496e745365742e706c7573283229283129 1493:O3|@1491,@1495,@1494 1494:O1|@1500 1495:O3|@1491,@1497,@1496 1496:O1|@1499 1497:O1|@1498 1498:C2,36|9e13e00280a2200532800005901020019010200581c3e0060100000081c3e00601000000|@1255,129| 1499:C2,36|9e13e00280a220f932800005901020019010200581c3e0060100000081c3e00601000000|@1255,129| 1500:C2,36|9e13e00280a2210132800005901020019010200581c3e0060100000081c3e00601000000|@1255,129| 1501:C2,36|9e13e00280a2210532800005901020019010200581c3e0060100000081c3e00601000000|@1255,129| 1502:C2,348|9e13e002f606201880a1001b8bd02018de213ffcda213ff8fa022000fa213ff4d2036008d0013ff41b0000839a0360d8f40360009fc6a00088013ff480a220012280004490102001c4012004ee00a004ee213ffcec05e010ec213ff8ea05e014ea213ff4e805e018e8213ff0e605e01ce6213fece405e020e4213fe8e205e024e2213fe4d605e00cd405e008d205e004d005e0007fffff2b88013fe4d0213ffc133f0057920261d4d00120047fffcdd188013ffc8c21a00c8b19600cba102002a0100006fa21bffc1f3f00579e03e1f4de242000d0242004c2012004da006004d8012010da212010d6006008d621200cd400600cd4212008d2006010d2212004d0006014c4012000d0212000ee006018ee213ffcec00601cec213ff8ea006020ea213ff4e8006024e8213ff0d60060009410200592100002901000109e10000c353f0042b406a05081c6a00488013ff0c401200881c0a0068801200c|@1505,131071|40,4,I24 148,5,@1484 160,4,@1503 172,5,@496 200,4,@1504 320,4,@1265 1503:S23|2068617320616c7265616479206265656e20757365642e 1504:C2,40|9e13e002f606201880a1001b8bd02018c402200cd00360049a100002f403600081c6a00401000000|@1264,131071| 1505:S55|50415253455f44454328292e7061727365446563283329676574547970655661727328322967657454797065566172283129552d283129 1506:C2,624|9e13e002f606201880a1001b8bd02018de213ffcd0213ff8c4026024133f005892026104901000021b3f00389a0360407fffe06c88013ff880a2200132800006ee01200090102005ee01200481c5e00688012008808de00132800004b8102004f805e000b92f2002ac072001811f200424800027ea012000808de00132800004b8102004f805e000b92f2002aa072001811f200434800009808de001113f0004900223d0f40620209fc6a00001000000a8102001808de00122800005fa0de005a8100017108000059210217db92f6002a80720019210217d901000141b0000839a0360d8f40360009fc6a0000100000080a2200122800006ea01200090102005e801200481c5200688012008808d600132800004b8102004f8056000b92f2002a8072001811f20042480004f90102001808d600132800004b8102004f8056000b92f2002a6072001811f200434800009808d6001113f0004900223d0f40620209fc6a00001000000a4102001808d600122800005fa0d6005a4100015108000059210209db92f6002a40720019210209d901000121b0000839a0360d8f40360009fc6a0000100000080a220012280002e90102001e4012000808ca00132800004b8102004f804a000b92f2002a2072001811f20082480002190102001808ca00132800004b8102004f804a000b92f2002a0072001811f200834800009808ca001113f0004900223d0f40620209fc6a000010000009e102001808ca00122800005fa0ca0069e100012108000059210217db92f60029e0720019210217d9010000fde0120041b0000839a0360d8f403600081c6a00488012008e001200481c4200688012008e601200481c4e00688012008|@1514,131071|28,4,@1507 40,4,@1112 48,5,@1114 156,4,@224 220,4,I24 340,4,@224 404,4,I24 512,4,@224 580,4,I24 1507:O3|@1509,@1511,@1508 1508:O2|@1513,@96 1509:O2|@1510,@96 1510:C2,44|9e13e002c4022000ee03600480a0801732800005901020019010200581c3e0060100000081c3e00601000000|@1106,98465| 1511:O2|@1512,@96 1512:C2,56|9e13e002841000088c21a0108b196010ba10200390100006fa21bffcc422200884102115c4222004c4036004c422200081c3e00601000000|@1106,65697| 1513:C2,60|9e13e002c4022000ee03600480a0801732800005de213ffcd002200881c3e00601000000113f003890022020f40620209fc6a00088013ffc90102001|@1106,98465|36,4,@1110 1514:S21|50415253455f44454328292e69735765616b283229 1515:C2,232|9e13e002f606201880a1001b8bd020188c21a0088b1960083b100000ba07600184100006fa21bffcd020a000808a600122800005de213ffcae1000091080000ede213ffcd4213ff8d6213ff4c4213ff0901000091b0000879a0360d8f40360009fc6a00088013ff0ae10000810800007b825e001d4213ff8d6213ff4c4213ff088013ff0b825e001b92f2003ac072001ea01200880a5600122800003a8102001a8102011a6158014e401200480a4a00122800003a2102001a2102009a014c011de0120148214000fda012010d8012000d8236000c223600490102001d601200c81c2e00688012018|@1516,131071|84,4,I152 1516:S23|5354525543545f56414c5328292e6d616b655476283629 1517:C2,56|9e13e002c4022000ee0220048c21a0108b196010ba10200390100006fa21bffcee222008c42220048410200dc422200081c3e00601000000|@1518,98433| 1518:S7|54797065566172 1519:S50|50415253455f44454328292e7061727365446563283329676574547970655661727328322967657454797065566172283129 1520:O3|@24,@397,@1521 1521:S31|417474656d707420746f20707573682074776f20706172656e746865736573 1522:C2,152|9e13e002f606201880a1001b8bd02018de213ffcda213ff8901020017ffffb3488013ff8c4012000d0213ffcd400bfec133f00569202634c901020e11b3f00599a0360fc4000001f88013ffc80a2200122800006ae102001da0120047fffffea9e13e002ae1000088c21a00c8b19600cba102002ac100006fa21bffcee25a004ea012000ea25a00090100016e801200881c520068801200c|@1526,131071|28,5,@1468 48,4,@1496 60,4,@1523 68,5,@1524 1523:O2|@1524,@1470 1524:C2,336|9e13e002f606201880a1001b8bd02018c402a008ee00a000ec02a018ea05a00080a5611122800003a8100017a8100015b8222001ba252001811f401c3280000ce800a000de213ffc9010000a1b3f00419a0362707fffe84d88013ffc90102005e801200081c5200688012004e605a00080a4e11122800003a4100014a4100013de213ffcda213ff8d0213ff4d4213ff0901000127fffe81f88013ff080a220012280002990102001e4012004b824a001811f200036800004b824a0011080000701000000811f211436800004010000001080000801000000113f0004900223d0f40620209fc6a00001000000a2102001233f0055a20463ccb824a001e004401ca2100010de012008d201200090100011da03e004f40360009fc6a00001000000d00120001b3f00419a0362707fffe8170100000090102005c201200c81c0600688012010e401200c81c4a00688012010|@1525,131071|76,4,@1258 84,5,@1260 148,5,@1256 216,4,@224 240,4,@1475 292,4,@1258 300,5,@1260 1525:S19|534b4950535f28292e74657374666f72283329 1526:S29|534b4950535f28292e6765744c697374283429666f724c697374283129 1527:S37|50415253455f44454328292e70617273654465632833296765745479706556617273283229 1528:C2,56|9e13e0028c21a0108b196010ba10200390100006fa21bffc133f00599202633cd2222000d4222008d4036004d422200481c3e00601000000|@1533,167|24,4,@1529 1529:C2,332|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d0213ff4da036008f40360009fc6a00088013ff4808a200132800006c4012004d0022000c401200881c0a0068801200cee00a004ee213ffcec05e010ec213ff8ea05e014ea213ff4e805e018e8213ff0e605e01ce6213fece405e020e4213fe8e205e024e2213fe4d605e00cd405e008d205e004d005e0007ffffc7488013fe4d0213ffc133f005a920260a4d00120047fffcb1a88013ffc8c21a00c8b19600cba102002a0100006fa21bffc1f3f005a9e03e0d8de242000d0242004c2012004da006004da213ffcd8006008d8213ff8d600600cd6213ff4d4006010d4213ff0d2006014d2213fecd0006018d0213fe8c400601cc4213fe4ee006020ee213fe0ec006024ec213fdcd600600094102005d2012000901000107fffe7f988013fdc113f003190022124ea01201081c5600688012014|@1532,131071|144,5,@1484 156,4,@1530 168,5,@496 196,4,@1531 304,5,@1265 312,4,@799 1530:S42|20686173206e6f74206265656e206465636c6172656420696e2074797065206465636c61726174696f6e 1531:C2,40|9e13e002f606201880a1001b8bd02018c402200cd00360049a100002f403600081c6a00401000000|@1264,131071| 1532:S42|50415253455f44454328292e706172736544656328332967656e54797065566172456e76283329283129 1533:S39|50415253455f44454328292e706172736544656328332967656e54797065566172456e76283329 1534:C2,712|9e13e002f606201880a1001b8bd02018d0213ffcd0213ff8d0213ff49610000f9410000da810000892013ff4901020017ffff6c788013ff48c21a0108b196010ba1020039e100006fa21bffcda012000da23e000d2012004d223e004d0012008d023e008d6213ffcd4213ff8e8213ff49210000f90102001da02a00cf40360009fc6a00088013ff4841000088c21a00c8b19600cba10200290100006fa21bffc2f3f005bae05e064ee222004ec012000ec222000aa1000024000009d01000000e8012004ea213ffcfa052004fa213ff8d4013ff892100008113f0056900223541b3f005b9a036174400000c688013ff8e6012000d0213ffce404e010e4213ff8e204e014e2213ff4e004e018e0213ff0de04e01cde213fecc204e020c2213fe8da04e024da213fe4d604e00cd404e008d204e004d004e0007ffffbb988013fe494100008d2012004d00120004000011901000000d8012010d4012020d201201cd0012018da032008f40360009fc6a00001000000d601202480a2e00122800011d4012028d4012010d202a004c4026008ee00a000ec026018ea05a00080a5611122800003a8100017a810001580a520b522800004d4012028108000070100000080a2a001328000040100000010800006d2012010293f000fa80520cc10800032e2012028c4026004ee00a008ec05e000ea00a018e805600080a5211122800003a6100016a610001480a4e0b53280000ad0213ffcd0213ffc901000021b3f00419a0362707fffe6bb88013ffc10800009e6012014d2026004901020f51b3f00559a0360547ffffa2b88013ffce6012014d604e004153f004c9402a050d2012010113f005c900222641b3f005c9a0362e8400001c101000000e4012014d4012000d204a004d00120101b3f005d9a0360544000021901000000a810000888012004e20120289610001194100014d2012008d0012000de012014353f0067b406a06881c6a0048801202c|@1643,131071|48,5,@1450 160,4,@1535 184,5,@1537 216,4,@1497 224,4,@1541 232,5,@1542 312,5,@1484 332,5,@1545 468,4,@375 540,4,@1258 548,5,@1260 572,4,@1470 580,5,@1472 596,4,@1339 608,4,@1552 616,4,@1554 624,5,@1555 648,4,@1557 656,5,@1559 696,4,@1641 1535:O1|@1536 1536:C2,36|9e13e00280a220b532800005901020019010200581c3e0060100000081c3e00601000000|@1255,129| 1537:C2,40|9e13e002f606201880a1001b8bd02018d2022004d0022000353f005bb406a0f081c6a00401000000|@1540,98467|24,4,@1538 1538:C2,56|9e13e0028c21a0108b196010ba10200384100006fa21bffc2f3f0056ae05e28cee20a000d220a008d020a0049010000281c3e00601000000|@1539,98435|24,4,@1491 1539:S14|496e745365742e706c7573283229 1540:S14|496e745365742e706c7573283129 1541:O2|@1542,@1470 1542:C2,356|9e13e002f606201880a1001b8bd02018c402a008ee00a000ec02a018ea05a00080a5611122800003a8100017a8100015de213ffcda213ff8d2213ff4d4213ff092100008901000147fffe61488013ff080a220012280001fe8012008e8012000e6052010e6213ffce4052014e4213ff8e2052018e2213ff4e005201ce0213ff0de052020de213fecc2052024c2213fe8d605200cd4052008d2052004d00520007ffffa5988013fe8d0213ffc901000141b3f00419a0362707fffe61688013ffcd0012000da01201081c3600688012014d2012000113f005b90022300da052004f40360009fc6a00001000000e6012000e404e008e204a000e004e018de04200080a3e11122800003821000118210000fd2012004901000017fffe5e00100000080a220013280000b01000000d00120001b3f00419a0362707fffe5f601000000f606201880a1001b8bd0201830bfffe811000083900223d8c201200c81c0600688012010|@1544,131071|72,5,@1256 160,5,@1473 176,4,@1258 184,5,@1260 212,4,@1543 280,5,@1256 304,4,@1258 312,5,@1260 336,4,I48 1543:S10|4964656e746966696572 1544:S17|534b4950535f28292e6765746964283329 1545:C2,60|9e13e002f606201880a1001b8bd02018d0213ffcd4213ff8d2213ff4de213ff0901020059a013ffc4000000c88013ff0c401200081c0a00688012010|@1551,131071|40,5,@1546 1546:C2,508|9e13e002f606201880a1001b8bd02018c40360008088a00132800004b8102004f800a000b92f2002ae072001ba222001811f401c24800005b82220019010200181c3e00601000000b91f2004ae072001811f2000368000048088a0011080000dde213ffc32800004b8102004f800a000b92f2002ac072001ba25e001811f401c36800004de213ffc1080000a8088a001ae100008113f0004900223d0f40620209fc6a00088013ffcac1020018088a00122800005ac85e010ac10000210800007de213ffcbb3da002fa08801db92f6002ac072001de213ffcda213ff8d0213ff4921020b9901000161b0000839a0360d8f40360009fc6a00088013ff480a2200122800038ea012000ea012004fa057ff8fa213ffcfa057ffcfa213ff8d2056000113f005c900221a07fffc8e788013ff8133f005c920261b87fffc8e3010000008c21a00c8b19600cba102002a8100006fa21bffc273f005ca604e1d0e6252000d0252004e4012004e204a004e0012010e2212010de04a008de21200cc204a00cc2212008da04a010da212004d804a014d6012000d8212000d404a018d4213ffcd204a01cd2213ff8d004a020d0213ff4c404a024c4213ff0ae10000bd604a0009410200592100017901000149e100010353f0042b406a05081c6a00488013ff0b8256001b917200490072001da012004de01200810bfff848801200c|@1550,131071|148,4,@224 232,4,I24 288,4,@1547 296,5,@496 304,4,@1548 312,5,@496 340,4,@1549 464,4,@1265 1547:S15|7175616c6966696564206e616d6520 1548:S13|20696c6c6567616c2068657265 1549:C2,40|9e13e002f606201880a1001b8bd02018c402200cd00360049a100002f403600081c6a00401000000|@1264,131071| 1550:S36|5554494c49544945535f28292e636865636b466f72446f7473283329636865636b283129 1551:S28|5554494c49544945535f28292e636865636b466f72446f7473283329 1552:O1|@1553 1553:C2,96|9e13e00280a220e93280000580a220d19010200581c3e006010000003280000580a220059010200581c3e006010000003280000580a220f99010200581c3e0060100000032800005901020019010200581c3e0060100000081c3e00601000000|@1492,129| 1554:O2|@1555,@1470 1555:C2,296|9e13e002f606201880a1001b8bd02018c402e008ee00a000ec02e018ea05a00080a5611122800003a8100017a8100015de213ffcda213ff8d0213ff4d2213ff0d4213fecd6213fe892100008901000147fffe4b588013fe880a220013280003090102001e8012010d2012000d0012004da052004f40360009fc6a00001000000e6012000e404e008e204a000e004e018de04200080a3e11122800003821000118210000f8c21a00c8b19600cba10200290100006fa21bffcda012008da222004d801200cd82220007ffffe3c0100000092100008901000017fffe4930100000080a220013280000b90102001d00120001b3f00419a0362707fffe4a901000000f606201880a1001b8bd0201830bfffddd601201481c2e00688012018e801201481c5200688012018|@1556,131071|80,5,@1256 200,5,@1537 216,5,@1256 240,4,@1258 248,5,@1260 1556:S18|534b4950535f28292e736b69706f6e283429 1557:O3|@1559,@1634,@1558 1558:O3|@1491,@1636,@1639 1559:C2,288|9e13e002f606201880a1001b8bd02018d2213ffcda213ff8d4213ff4841000088c21a00c88013ff48b19600cba10200290100006fa21bffc2f3f005dae05e1b0ee222004c4222000ac10000faa1000027ffffdfa01000000ec213ffcea213ff89a0120084000004888013ff8d0213ffcd4012010133f00609202601c901020c51b3f00599a0360fc7ffffc0388013ffc80a2200122800016d6012014d401200cd2012014d0012004da0120107fffffd69e13e002a81000088c21a00c8b19600cba10200290100006fa21bffce8222004e6012000e6222000de012008353f0066b406a2e081c6a00488012018153f00669402a348133f00609202601cd00120041b3f005c9a0362e87fffff5e01000000d0012000e801200881c5200688012018|@1633,131071|56,4,@1560 80,5,@1537 100,5,@1562 116,4,@1568 128,4,@1523 136,5,@1524 220,4,@1630 236,4,@1632 244,4,@1568 256,4,@1554 264,5,@1555 1560:O1|@1561 1561:C2,36|9e13e00280a220c532800005901020019010200581c3e0060100000081c3e00601000000|@1255,129| 1562:C2,228|9e13e002f606201880a1001b8bd02018da213ffc841000088c21a00c88013ffc8b19600cba10200290100006fa21bffc2f3f005dae05e2f8ee222004c4222000ac10000f7ffffd9c01000000ec213ffcd0213ff89a0120004000003c88013ff8ea012008d0213ffcd4056000133f00609202601c901020c11b3f00599a0360fc7ffffba488013ffc80a2200122800013d00120009a01200c4000085e010000008c21a00c8b19600cba102002a8100006fa21bffcd0252004e6012000e625200090100014de012008353f0066b406a0fc81c6a00488012010e801200881c5200688012010|@1629,131071|48,4,@1563 68,5,@1537 88,5,@1565 108,4,@1568 120,4,@1523 128,5,@1524 152,5,@1622 200,4,@1624 1563:O1|@1564 1564:C2,36|9e13e00280a220c132800005901020019010200581c3e0060100000081c3e00601000000|@1255,129| 1565:C2,1688|9e13e002f606201880a1001b8bd02018c4036000ee00a000ec05e008ea05a000e805e018e605200080a4e11122800003a4100015a410001380a4a0d13280002de4036000da213ffcd0213ff8de213ff4901000171b3f00419a0362707fffe3bd88013ff4901020019a0120084000019201000000e2012008e0046000de042000c203e008da006000d803e018d603200080a2e111228000039410000d9410000b80a2a0d53280000ad0213ffcd0213ffc9010000f1b3f00419a0362707fffe3a588013ffc10800140e40120009210000f901020a51b3f00559a0360547ffff71588013ffce401200010800138ea01200ce204a000e0046008c2042000d8046018d603200080a2e11122800003941000019410000b80a2a0e932800068d4036000da213ffcd0213ff8de213ff4901000111b3f00419a0362707fffe38688013ff4d0213ffcd0213ff8d4012008d202a000d4026000133f00609202601c901020ed1b3f00599a0360fc7ffffb1888013ff880a220012280000bd001201090012000053f00308400a328c4222000ae012000ac102001ec25e0041080003e8c21a00cc4022000fa00a000fa213ffc9a012010400001de88013ffcee012014ec05e000ea05a000e8056008e6052000e4056018e204a00080a4611122800003a0100013a010001180a420ed3280000ad0213ffcd0213ffc901000151b3f00419a0362707fffe35488013ffc10800009e001201892100015901021f51b3f00559a0360547ffff6c488013ffce0012018de0420008c21a00c8b19600cba10200282100006fa21bffc1b3f00629a03639cda206000d803e000d820600492100001d0012000400004e90100000092102005400005de0100000096012008d022e0009401200892102001d222a004880120088c21a00c8b19600cba102002a4100006fa21bffcd0012000d024a000c4012004c424a004108000c588012004d202a000ea026008e6056000c2026018d600600080a2e1112280000696100008a61000089010000b1080000580a220f990100013a610000b80a220f932800047d0036000a610000fda213ffcd0213ff8e6213ff4fa02bff8fa213ff0de026010de213fecd6026014d6213fe8c2213fe4d002601cd0213fe0c4026020c4213fdcec026024ec213fd8d602600c94100015ea026000de0260049210000f901000157ffff73b88013fd8da012000f40360009fc6a000010000008c21a00c8b19600cba10200282100006fa21bffc9a102001da206004d0206000d801200cd6032000d402e000d202a008d0026000c402a018ee00a00080a5e11122800003ac100008ac10001780a5a0f93280000ac2213ffcc2213ffc9010000a1b3f00419a0362707fffe2de88013ffc10800078e40120009210000a113f0055900220381b3f00559a0360547ffff64d88013ffce40120001080006f88012004d6022000c402e008ec00a000e802e018ee05200080a5e11122800003901000169010001780a220053280004eec036000ec036000da213ffce6213ff8de213ff4d405a00092100013113f0056900223541b3f005b9a0361747ffffc7688013ff4d0213ffcd0213ff8aa100008113f0065900220104000061f88013ff8400006320100000080a2200122800012a80120008c21a0088b1960083b100000ba076001a8100006fa21bffc273f0065a604e010e6252000a4012000a2103ffde224a000a0012000e8242004108000098c21a00ca6102001e6252000a4012000233f0065a2046010e224a0048c21a00c8b19600cba102002a0100006fa21bffcde012000de242000c2012004c22420048c21a0108b196010ba10200390100006fa21bffce0222008ea2220049a102001da2220004000061f010000008c21a00c8b19600cba102002a4100006fa21bffc98102001d824a004d024a0001080001788012004da213ffcd0213ff8de213ff4fa05a000fa213ff0d2013ff0113f0056900220fc1b3f00559a0360547ffff5e688013ff0d00120001b3f00419a0362707fffe26901000000a4102001d0213ffc88013ffc88012004ea01200ce8056000e6052000e204e008e0046000de04e018c203e00080a06111228000039a1000109a10000180a360053280000980a4a001901000129a01200c4000060b01000000da01200481c360068801201032800007da04a004113f003190022124da01200481c360068801201080a3600132800006e6213ffcd004a000d801200481c3200688012010fa04a000fa213ff892100013113f0056900220fc1b3f00559a0360547ffff5b188013ff8d00120041b3f00419a0362707fffe23401000000d0012000d801200c81c3200688012018|@1621,131071|84,4,@1258 92,5,@1260 108,5,@1566 180,4,@1258 188,5,@1260 212,4,@1470 220,5,@1472 304,4,@1258 312,5,@1260 340,4,@1568 352,4,@1523 360,5,@1524 384,4,@766 432,5,@1571 504,4,@1258 512,5,@1260 536,4,@1470 544,5,@1472 580,4,@1592 608,5,@1595 620,5,@1603 856,5,@1473 976,4,@1258 984,5,@1260 1004,4,@1469 1012,4,@1470 1020,5,@1472 1112,4,@1497 1120,4,@1541 1128,5,@1542 1148,4,@1611 1156,5,@1613 1164,5,@1615 1208,4,@1611 1260,4,@1611 1344,5,@1617 1416,4,@1477 1424,4,@1470 1432,5,@1472 1444,4,@1258 1452,5,@1260 1540,5,@1619 1568,4,@799 1628,4,@1477 1636,4,@1470 1644,5,@1472 1656,4,@1258 1664,5,@1260 1566:C2,444|9e13e002f606201880a1001b8bd02018d0036000c4022000ee00a000ec05e008ea05a000e805e018e605200080a4e11122800003a4100015a4100013de213ffcda213ff8133f005c92026264901000127fffe1f588013ff880a220012280001be4012000e2012000e0046000de042000c203fffc8c21a00c8b19600cba10200290100006fa21bffcda006004da222004d8047ffcd82220007ffffb8801000000d6042000d402fff8d202e000da02fffcf40360009fc6a00001000000a410000810800016de012000e204a000e0046000fa042000fa213ffcd2013ffc113f0055900220381b3f00559a0360547ffff56488013ffcd00120001b3f00419a0362707fffe1e701000000253f0031a404a12488012004de012000c203e000da006000e4213ffcd4036000133f005c92026264901020e11b3f00599a0360fc7ffff97688013ffc80a22001228000128c21a00c90102001da0120047fffffab9e13e0028c21a00c8b19600cba10200298100006fa21bffcd0232004d6012000d62320009010000cd401200881c2a0068801200c8b19600cba10200290100006fa21bffc98102001d8222004d6012000d6222000d401200881c2a0068801200c|@1567,131071|68,4,@1552 80,5,@1256 152,5,@1537 220,4,@1469 228,4,@1470 236,5,@1472 248,4,@1258 256,5,@1260 264,4,@799 296,4,@1552 308,4,@1523 316,5,@1524 1567:S69|50415253455f5459504528292e7061727365547970652833297475706c655479706528312962617369635479706528312974795365712d70726f636573734c697374283129 1568:O1|@1569 1569:C2,16|9e13e0029010200181c3e00601000000|@1570,129| 1570:S16|496e745365742e656d7074792d283129 1571:C2,152|9e13e002f606201880a1001b8bd02018de213ffcda213ff8901020014000002688013ff8c4012000d0213ffcd400bfec133f00609202601c901020e11b3f00599a0360fc7ffff91788013ffc80a2200122800006ae102001da0120047fffffea9e13e002ae1000088c21a00c8b19600cba102002ac100006fa21bffcee25a004ea012000ea25a00090100016e801200881c520068801200c|@1526,131071|28,5,@1572 48,4,@1568 60,4,@1523 68,5,@1524 1572:C2,380|9e13e002f606201880a1001b8bd020188c21a00c8b19600cba10200290100006fa21bffc053f00608400a2b4c4222004ee037ffcee222000ac10000faa10000d7ffffad401000000de056000da03e000ec213ffcea213ff8d20360001b3f00609a0362fc4000006288013ff8d8012000d6032000d402e000d202a000c4026008ee00a000ec026018ea05a00080a5611122800003a8100017a810001580a520bd3280000ad0213ffcd0213ffc901000091b3f00419a0362707fffe12f88013ffc10800008e8012004901020e91b3f00559a0360547ffff4a088013ffce8012004e6052000e404e000e204bffc8c21a00c8b19600cba10200290100006fa21bffce0046008e0222004de053ffcde2220007ffffaa001000000d404bff8d204a0009a100011f40360009fc6a00001000000d0213ffcd0213ff894013ff892100008d0012000400000fe88013ff88c21a00c8b19600cba10200290100006fa21bffcc2012000c2222000da012004da222004d801201081c3200688012014|@1591,131071|36,4,@1573 64,5,@1537 92,4,@1575 100,5,@1576 176,4,@1258 184,5,@1260 204,4,@1470 212,5,@1472 272,5,@1537 324,5,@1583 1573:O1|@1574 1574:C2,36|9e13e00280a220bd32800005901020019010200581c3e0060100000081c3e00601000000|@1255,129| 1575:O2|@1576,@1541 1576:C2,584|9e13e002f606201880a1001b8bd02018c4026008ee00a000ec026018ea05a00080a5611122800003a8100017a810001580a521013280007e94100009a810000fae100009ea05e010ea213ffcde05e014de213ff8ec213ff4da05e01cda213ff0d605e020d6213fecd405e024d4213fe8d605e00c94100002d205e004d005e0007ffff4ff88013fe8808a200132800004b8102004f8022000b92f200292072001811f20003480000b808a2001e8213ffc9e100008113f0004900223d0f40620209fc6a00088013ffca6102001808a200122800005fa0a2004a610000810800005e8213ffcb92f6002a6072001e8213ffcee213ff8d0213ff4e6213ff0901000171b3f00419a0362707fffe0a088013ff0921021f9d00120001b0000839a0360d8f40360009fc6a0000100000080a2200122800004921020c11080000dd0012008d00120001b0000839a0360d8f40360009fc6a0000100000080a2200132800004d00120081080002fd0012004c4022010c4213ffcee022014ee213ff8ec022018ec213ff4ea02201cea213ff0e8022020e8213fece6022024e6213fe8d602200cd4022008d2022004d00220007ffff53a88013fe8e4012008e204a004e2213ffce004a008e0213ff8de04a00cde213ff4c204a010c2213ff0da04a014da213fecd804a018d8213fe8d604a01cd6213fe4d404a020d4213fe0d204a024d2213fdcd604a0009410200592100008113f00619002216c7fffe0cd88013fdcd0012004c401200c81c0a0068801201092100008113f0061900221e0da036004f403600081c6a00401000000|@1582,131071|128,5,@1473 180,4,@224 256,4,@1258 264,5,@1260 280,4,I24 324,4,I24 428,5,@1484 524,4,@1577 532,5,@1265 560,4,@1580 1577:O1|@1578 1578:C2,44|9e13e002f606201880a1001b8bd02018c402200c113f0061900221bc9a100002f403600081c6a00401000000|@1264,131071|20,4,@1579 1579:S25|4c6162656c73206d75737420626520312c322c332c2e2e2e2e 1580:O1|@1581 1581:C2,56|9e13e00280a220c13280000580a220059010200581c3e0060100000032800005901020019010200581c3e0060100000081c3e00601000000|@1492,129| 1582:S20|534b4950535f28292e6765744c6162656c283229 1583:C2,68|9e13e002f606201880a1001b8bd02018de213ffcd2213ff8d4213ff44000001188013ff4c4012000d020a000ee012004ee20a00490102001ec01200881c5a0068801200c|@1590,131071|28,5,@1584 1584:C2,300|9e13e002f606201880a1001b8bd02018808a200132800004b8102004f8022000b92f200284072001811f200434800004808a200110800028de213ffc32800004b8102004f8022000b92f200284072001811f20003480000b808a2001de213ffc84100008113f0004900223d0f40620209fc6a00088013ffcae102001808a200122800005fa0a2004ae10000810800005de213ffcb92f6002ae072001de213ffcd0213ff8921020c1901000171b0000839a0360d8f40360009fc6a00088013ff880a2200122800007d001200010800008ee012000d0213ff888013ff8d0012000ee01200481c5e00688012008808de00132800004b8102004f805e000b92f2002ac072001b91f2004aa0720019410001592102005901000174000000c01000000de01200410bfffb888012008|@1589,131071|100,4,@224 172,4,I24 280,5,@1585 1585:C2,256|9e13e002f606201880a1001b8bd02018808a200132800004b8102004f8022000b92f200284072001808a600122800009de213ffcb8226001811f200026800005de213ffcae1000091080000b808aa001ae100008113f0004900223d0f40620209fc6a00088013ffc92100017ae102001808aa00122800009de213ffcb822a001811f200026800005de213ffcac10000a1080000bb825a001ac100008113f0004900223d0f40620209fc6a00088013ffc94100016ac102001b825a0019405c01c80a280022880000a94100016de213ffc113f0004900223d0f40620209fc6a00088013ffc901020019410001692100017353f0062b406a11c81c6a00401000000|@1588,131071|84,4,@224 156,4,@224 208,4,@224 240,4,@1586 1586:C2,388|9e13e002f606201880a1001b8bd02018808a200132800004b8102004f8022000b92f20028407200180a260013280000780a2a00180a280023280000480a2a00181c3e006010000003280000680a2a00511000083900223d881c3e006010000003280000a8482a02094826010bb3aa002fa0a001db92f6002920720019010000981c3e00601000000aea0a004de213ffcd0213ff8d2213ff4d4213ff092102011901000171b0000899a0363f8f40360009fc6a00088013ff0c6213ffc2d3f0062ac05a21eec213ff8aa102001ea213ff486013ff494102001921021051b0000829a036338f40360009fc6a00088013ff4a8100008c601200810800009e601200c113f0007900223e4f40620209fc6a00001000000a8102001e601200cbb3ce002fa252000e2012010a0846010e8213ffce4213ff8e6213ff4961020119410001492100010d00120141b0000889a036298f40360009fc6a00088013ff4d00120041b0000839a0363b8f40360009fc6a00001000000d0012004de01202081c3e00688012024|@1587,131071|80,4,I48 164,4,I241 188,4,$1586+258 220,4,I11 256,4,@251 328,4,I198 352,4,I47 1587:S33|4c696272617279537570706f72742e756e73616665537562737472696e67283329 1588:S19|537472696e672e737562737472696e67283329 1589:S40|545950455f5452454528292e6d6b4c6162656c456e74727928332973747269705a65726f73283129 1590:S27|545950455f5452454528292e6d6b4c6162656c456e747279283329 1591:S60|50415253455f5459504528292e7061727365547970652833297475706c655479706528312962617369635479706528312974795365712d6c2d283129 1592:C2,260|9e13e002f606201880a1001b8bd02018c4036004de213ffcd0213ff8c4213ff4ee00a010ee213ff0ec00a014ec213fecea00a018ea213fe8e800a01ce8213fe4e600a020e6213fe0e400a024e4213fdcd600a00cd400a008d200a004d000a0007ffff36888013fdc8c21a00c8b19600cba102002a2100006fa21bffc213f0063a00420bce0246000de012004de246004c2012000da006004d8012008da212008d6006008d6212004d400600cd4212000d2006010d2213ffcc4006014c4213ff8ee006018ee213ff4ec00601cec213ff0ea006020ea213fece8006024e8213fe8d60060009410200592100008901000119e10000c353f0042b406a05081c6a00488013fe8|@1594,131071|96,5,@1484 124,4,@1593 244,4,@1265 1593:C2,40|9e13e002f606201880a1001b8bd02018c402200cd00360049a100002f403600081c6a00401000000|@1264,131071| 1594:S58|50415253455f5459504528292e7061727365547970652833297475706c655479706528312962617369635479706528312974795365712d283129 1595:C2,104|9e13e002f606201880a1001b8bd0201880a2200132800005d2213ffc9010200181c3e00601000000c4022000de213ff8c4213ff4fa00a000fa213ff0d00220047ffffff088013ff0d4012004d20120009a01200c4000000c01000000ee01200881c5e00688012010|@1602,131071|84,5,@1596 1596:C2,352|9e13e002f606201880a1001b8bd0201880a220013280000cc40220008c21a00c8b19600cba10200290100006fa21bffc9a102001da222004d422200081c3e00601000000de213ffcda213ff8d0213ff4d2213ff0d4213fecc4213fe8fa022004fa213fe4d200a000d0013ff04000004488013fe480a2200132800015d0213ffcee012014d0213ffcfa05e000fa213ff8d201200c113f0064900220a07fffc17a88013ff8133f0064920260b07fffc17601000000da012000f40360009fc6a0000100000010800005ee012004d0213ff888013ff8ee012004b825e001811f20003480000fd40120108c21a00c8b19600cba102002ac100006fa21bffcea012018ea25a004e8012010e825a00090100016e601202081c4e00688012024d2012014d0012008da01201c7fffffb79e13e0028c21a00c8b19600cba102002ac100006fa21bffcd025a004ea01200cea25a00090100016e801202081c5200688012024|@1601,131071|108,5,@1597 148,4,@1599 156,5,@496 164,4,@1600 172,5,@496 1597:C2,284|9e13e002f606201880a1001b8bd02018808a200132800004b8102004f8022000b92f200284072001808a600132800004b8102004f8026000b92f2002ae072001ba20a001811f401c32800021808a2001de213ffcd0213ff8d2213ff41b0000839a0360d8f40360009fc6a00088013ff480a2200122800006d201200090102001ec01200881c5a0068801200cd00120041b0000839a036138f40360009fc6a0000100000080a22001228000069010200590103ffdec01200881c5a0068801200cec01200881c5a0068801200c32800004b8102004f8022000b92f2002ac072001808a600132800004b8102004f8026000b92f2002aa072001ba25a001811f401c368000059010200590103ffd81c3e0060100000081c3e00601000000|@1598,131071|92,4,I24 144,4,I27 1598:S28|545950455f5452454528292e636f6d706172654c6162656c73283229 1599:S7|4c6162656c2028 1600:S25|292061707065617273206d6f7265207468616e206f6e63652e 1601:S33|545950455f5452454528292e736f72744c6162656c73283229656e746572283329 1602:S25|545950455f5452454528292e736f72744c6162656c73283229 1603:C2,340|9e13e002f606201880a1001b8bd02018841000088c21a0108b196010ba10200390100006fa21bffcae102001ee222008c4222004d2222000aa10000f4000004d0100000080a2600122800004d0213ffc81c5600601000000d0213ff8ea213ff4d0213ff0a8102001e8213feca6013ff8e6213fe89610200194102001130000279202603d113f000f900220cc7ffff42788013fe88c21a00c8b19600cba10200290100006fa21bffce4012008e4222000e201200ce22220047ffff46501000000a010000890100010400000460100000080a220012280001c9e102001901000104000005101000000901000104000003d0100000080a2200122800008010000009010001040000048010000008210000810800009d2012000113f003890022020f40620209fc6a0000100000082102001d2012000901000014000004e010000009e10000890100010de01200481c3e00688012010|@1610,131071|60,5,@1604 124,4,9999 132,4,@375 140,5,@1515 184,5,@1517 200,5,@1606 224,5,@1607 236,5,@1606 260,5,@1607 280,4,@1110 312,5,@1608 1604:C2,64|9e13e002c4022000ee022004ec0220088c21a0148b196014ba10200490100006fa21bffcec22200cee222008c422200484103ff9c422200081c3e00601000000|@1605,114817| 1605:S12|4c6162656c6c656454797065 1606:C2,40|9e13e002c402200080a0a00d32800005901020019010200581c3e0060100000081c3e00601000000|@1518,65665| 1607:C2,48|9e13e002c4022004ee0220088c21a00c8b19600cba10200290100006fa21bffcee222004c422200081c3e00601000000|@1518,98433| 1608:C2,24|9e13e002c4022000d220a0009010200181c3e00601000000|@1609,65667| 1609:S27|5354525543545f56414c5328292e747653657456616c7565283229 1610:S25|545950455f5452454528292e6d6b4c6162656c6c6564283229 1611:O6|@1612,0,0,0,@683,@380 1612:S9|756e646566696e6564 1613:C2,16|9e13e002d002201481c3e00601000000|@1614,129| 1614:S29|5354525543545f56414c5328292e74634964656e746966696572283129 1615:C2,40|9e13e002c402200080a0a00532800005901020019010200581c3e0060100000081c3e00601000000|@1616,65665| 1616:S26|5354525543545f56414c5328292e6973556e7365744964283129 1617:C2,64|9e13e002c4022000ee022004ec0220088c21a0148b196014ba10200490100006fa21bffcec22200cee222008c422200484103ff5c422200081c3e00601000000|@1618,114817| 1618:S16|54797065436f6e737472756374696f6e 1619:C2,504|9e13e002f606201880a1001b8bd02018c4036000ee00a000d605e000ac10000faa10000da8100008de02e010de213ffcda02e014da213ff8d402e018d4213ff4d202e01cd2213ff0d002e020d0213fece602e024e6213fe8de02e000da02e004d402e008d202e00c961000099210000d9010000f7ffff06888013fe8d0213ffcd0213ff8a6100008113f0065900220107fffff9088013ff87fffffa30100000080a22001228000129e0120008c21a0088b1960083b100000ba0760019e100006fa21bffc1b3f00659a036010da23e0009601200094103ffdd422e00092012000de226004108000098c21a00c9a102001da23e00096012000153f00659402a010d422e0048c21a00c8b19600cba10200292100006fa21bffcd0012000d0226000c4012004c42260048c21a0108b196010ba10200390100006fa21bffcd2222008e6222004e8222000a81000167fffff9001000000e6056000e404e000e8213ffcea213ff8d0213ff4d004a0001b3f00419a0362707fffdbeb88013ff4e2012004e0046000de042000c203e000da006008d8036000d6006018d402e00080a2a111228000039210000c9210000a80a260053280000fd00120008c21a00c8b19600cba10200290100006fa21bffc92102001d2222004c4012000c42220009a100011de01200810bfff8888012014d201200881c2600688012014|@1620,131071|116,5,@1473 136,4,@1611 144,5,@1613 152,5,@1615 196,4,@1611 248,4,@1611 332,5,@1617 364,4,@1258 372,5,@1260 1620:S64|50415253455f5459504528292e7061727365547970652833297475706c6554797065283129626173696354797065283129636f6e7374727563746f7273283129 1621:S49|50415253455f5459504528292e7061727365547970652833297475706c6554797065283129626173696354797065283129 1622:C2,156|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d0037ff87ffff7c788013ff8c4012000ee00a000d0213ffcd405e000133f00609202601c901020c11b3f00599a0360fc7ffff32e88013ffc80a2200122800006ac102001da0120047fffffe99e13e002ac1000088c21a00c8b19600cba102002aa100006fa21bffcec256004e8012000e825600090100015e601200881c4e0068801200c|@1623,131071|28,5,@1565 52,4,@1568 64,4,@1523 72,5,@1524 1623:S49|50415253455f5459504528292e7061727365547970652833297475706c6554797065283129706172736552657374283129 1624:C2,108|9e13e002f606201880a1001b8bd02018de213ffc921020051b3f00669a036184f40360009fc6a00088013ffc841000088c21a0108b196010ba10200390100006fa21bffcae102001ee222008c4222004ac102005ec222000de012000353f0064b406a29481c6a00488012004|@1628,131071|24,4,@1625 92,4,@1604 1625:O1|@1626 1626:C2,192|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffc9010200181c3e00601000000d2213ff8fa022000fa213ff4fa022004fa213ff092103ffdd0013ff87fffc00f88013ff08c21a00c8b19600cba10200284100006fa21bffcee012004ee20a004d020a000ec012008b825a001b9172004aa072001c4213ffc92100015d00120007fffffde88013ffc8c21a00c8b19600cba102002a8100006fa21bffcd0252004e6012000e625200090100014e401201081c4a00688012014|@1627,131071|68,5,@509 1627:S26|545950455f5452454528292e6d6170746f5265636f7264283229 1628:S28|545950455f5452454528292e6d6b50726f6475637454797065283129 1629:S37|50415253455f5459504528292e7061727365547970652833297475706c6554797065283129 1630:C2,56|9e13e002c4022000ee0220048c21a0108b196010ba10200390100006fa21bffcee222008c422200484102005c422200081c3e00601000000|@1631,98433| 1631:S12|46756e6374696f6e54797065 1632:S11|456e64206f662074797065 1633:S25|50415253455f5459504528292e706172736554797065283329 1634:O3|@1491,@1636,@1635 1635:O1|@1638 1636:O1|@1637 1637:C2,36|9e13e00280a220e132800005901020019010200581c3e0060100000081c3e00601000000|@1255,129| 1638:C2,36|9e13e00280a220d532800005901020019010200581c3e0060100000081c3e00601000000|@1255,129| 1639:O1|@1640 1640:C2,36|9e13e00280a220ed32800005901020019010200581c3e0060100000081c3e00601000000|@1255,129| 1641:C2,52|9e13e0028c21a0148b196014ba10200484100006fa21bffcd220a00cd620a008d420a004d020a0009010000281c3e00601000000|@1642,65679| 1642:S29|50415253455f5452454528292e6d6b5479706542696e64696e67283429 1643:S37|50415253455f44454328292e70617273654465632833297479706542696e64696e67283629 1644:C2,1224|9e13e002f6062018ba21205880a7401b8bd02018de213ffcda213ff8d0213ff4d2213ff0d4213fecd00360041b3f00419a0362707fffda5388013fecd0213ffcd0213ff8d0213ff492013ff4901020017fffe9db88013ff48c21a0108b196010ba10200384100006fa21bffcee012000ee20a000ec012004ec20a004ea012008ea20a008e8012018c4213ffc9210000290102005da052014f40360009fc6a00088013ffca61000088c21a00c8b19600cba10200290100006fa21bffc253f005ba404a064e4222004e2012010e22220007ffff3b301000000e001201ce6213ffcfa042004fa213ff8d4013ff892100008113f0056900223541b3f005b9a0361747ffff3dc88013ff8de012000d0213ffcc203e010c2213ff8da03e014da213ff4d803e018d8213ff0d603e01cd6213fecd403e020d4213fe8d203e024d2213fe4d603e00cd403e008d203e004d003e0007fffeecf88013fe494100008d2012004d00120007ffff42f01000000d0012028c4022004ee00a008ec05e000ea00a018e805600080a5211122800003a6100016a610001480a4e0b53280000a92100002d00220041b3f00419a0362707fffd9f501000000a610000810800009e6012028901020f51b3f00559a0360547fffed6501000000a6100008e6012028e404e004e204a008e0046000de04a018c203e00080a06111228000039a1000109a10000180a3601d3280004c8c21a00cd801200880a3200132800005e4213ffc9a10200110800030da012028d604a010d6213ff8d404a014d4213ff4de213ff0d204a01cd2213fecd004a020d0213fe8c404a024c4213fe4d604a00c94100011d204a004d004a0007fffee8a88013fe4ee012000ec05e004ec213ffcea05e008ea213ff8e805e00ce8213ff4e605e010e6213ff0e405e014e4213fece205e018e2213fe8e005e01ce0213fe4de05e020de213fe0c205e024c2213fdcd605e0009410200592100008113f0068900221f47fffda1d88013fdc9a10000888012004da012028d00360041b3f00419a0362707fffd9a501000000d8012028d4032004d201201c113f0056900223541b3f005b9a0361747ffff3580100000092100008d0012000de01202c353f0068b406a28081c6a004880120308b19600cba10200290100006fa21bffc1b3f00689a036300da222004d801201cd82220007ffff31101000000961000088c21a00c8b19600cba10200290100006fa21bffc153f00689402a348d4222004d62220007ffff30501000000d2012020d2213ffcd0213ff8d6012000d4012008d201200cd0012024da04e010f40360009fc6a00088013ff8c4012028d0213ffcd400a004133f00609202601c9010200d1b3f00599a0360fc7ffff10788013ffc80a2200122800015ae1020018c21a00c8b19600cba10200290100006fa21bffc2d3f0068ac05a300ec222004ea012020ea2220007ffff2e101000000d0213ffc9a0120304000009688013ffcae10000810800005ec012030d0213ffc88013ffcec012030ee213ffcd405a004133f00609202601c9010209d1b3f00599a0360fc7ffff0e588013ffc80a2200122800006aa1020019a012038400000ce01000000aa1000088c21a00c8b19600cba102002a8100006fa21bffce6012000e6252004e4012008e42520009210001590100014de012038353f0069b406a1dc81c6a0048801203c|@1659,131071|44,4,@1258 52,5,@1260 80,5,@1450 188,4,@1535 208,5,@1537 240,4,@1497 248,4,@1541 256,5,@1542 336,5,@1484 356,5,@1545 420,4,@1258 428,5,@1260 452,4,@1470 460,5,@1472 612,5,@1484 708,4,@1645 716,5,@1265 740,4,@1258 748,5,@1260 768,4,@1497 776,4,@1541 784,5,@1542 804,4,@1648 836,4,@1650 856,5,@1537 888,4,@1652 904,5,@1537 968,4,@1568 980,4,@1523 988,5,@1524 1028,4,@1650 1048,5,@1537 1064,5,@1654 1104,4,@1568 1116,4,@1523 1124,5,@1524 1148,5,@1656 1208,4,@1657 1645:O1|@1646 1646:C2,44|9e13e002f606201880a1001b8bd02018c402200c113f0068900222449a100002f403600081c6a00401000000|@1264,131071|20,4,@1647 1647:S52|4461746174797065207265706c69636174696f6e206d757374206e6f7420636f6e7461696e2074797065207661726961626c6573 1648:C2,52|9e13e002841000088c21a0108b196010ba10200390100006fa21bffcd2222008c422200492103ff1d222200081c3e00601000000|@1649,65667| 1649:S37|50415253455f5452454528292e6d6b44617461747970655265706c69636174696f6e283229 1650:O1|@1651 1651:C2,36|9e13e00280a2209d32800005901020019010200581c3e0060100000081c3e00601000000|@1255,129| 1652:O1|@1653 1653:C2,36|9e13e00280a2200d32800005901020019010200581c3e0060100000081c3e00601000000|@1255,129| 1654:C2,232|9e13e002f606201880a1001b8bd020188c21a00c8b19600cba10200290100006fa21bffc053f00688400a348c4222004ee037fccee222000ac10000faa10000d7ffff23701000000e8057ffcec213ffcea213ff894100008d2057ff4d0057ff8da05200cf40360009fc6a00088013ff8e6012000e404fffcd0213ffcd404a004133f00609202601c9010200d1b3f00599a0360fc7ffff03988013ffc80a2200122800006a2102001da0120047fffffd69e13e002a21000088c21a00c8b19600cba102002a0100006fa21bffce2242004de012000de24200090100010c201200881c060068801200c|@1655,131071|36,4,@1652 64,5,@1537 128,4,@1568 140,4,@1523 148,5,@1524 1655:S37|50415253455f44454328292e7061727365446563283329616e6442696e64696e6773283229 1656:C2,252|9e13e002f606201880a1001b8bd020188c21a00c8b19600cba10200290100006fa21bffc053f00688400a348c4222004ee037ff0ee222000ac10000faa10000d7ffff1ea01000000e8057ffce6057ff4ec213ffcea213ff8a4102001e4213ff4a2102001e2213ff0d604e008d404e004d204e000da052008f40360009fc6a00088013ff0e0012000de043ffcd0213ffcd403e004133f00609202601c9010200d1b3f00599a0360fc7fffefe788013ffc80a220012280000682102001da0120047fffffd19e13e002821000088c21a00c8b19600cba1020029a100006fa21bffcc2236004d8012000d82360009010000dd601200881c2e0068801200c|@1655,131071|36,4,@1652 64,5,@1537 148,4,@1568 160,4,@1523 168,5,@1524 1657:C2,60|9e13e002841000088c21a0148b196014ba10200490100006fa21bffcd222200cc422200892102001d22220048410200dc422200081c3e00601000000|@1658,65667| 1658:S37|50415253455f5452454528292e6d6b44617461747970654465636c61726174696f6e283229 1659:S43|50415253455f44454328292e706172736544656328332964617461747970654465634f725265706c283329 1660:C2,264|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d0213ff4d2213ff0d4213fecd6213fe8d6036004153f004c9402a050d2012000d00360101b3f005c9a0362e87ffff30688013fe8c4012010ee012008d405e008d205e004d005e000da00a00cf40360009fc6a00001000000d0213ffcd00120189a0120144000002a88013ffc8c21a0088b1960083b100000ba076001ac100006fa21bffc2b3f0065aa056010ea25a0008c21a0088b1960083b100000ba076001a8100006fa21bffca6102001e62520008c21a0188b196018ba102005a4100006fa21bffce824a010e2012008e224a00cd024a008ec24a004e0012004e024a00090100012de01201881c3e00688012024|@1673,131071|44,4,@1339 60,4,@1554 68,5,@1555 124,5,@1661 156,4,@1611 1661:C2,700|9e13e002f606201880a1001b8bd02018c4037ffcee00a004ec05e008ea05a000e805e018e605200080a4e11122800003a4100015a410001380a4a05d32800003a4102001a410200580a4a0012280000ea2102001de213ffcda213ff8d0213ff4e4213ff0901000171b3f00419a0362707fffd79988013ff0a210000810800008e4012000de213ffcda213ff8d0213ff4e4213ff088013ff0e401200080a4a00122800005e2012008a210200510800004e0012008e2047ff8e0012008de043ffc8c21a00c8b19600cba10200290100006fa21bffcc203e008c2222004da012004da2220007ffff10301000000d8043ffcd6042008d0213ffc153f00619402a1e0d4213ff8e2213ff4d202e000d002e004c402e008d603200494100002ae10000992100008901000174000006c88013ff4d0213ffcd0213ff8ec012008ea05bffce8056004e6052008e404e000e2052018e004600080a421110280000588013ff89e1000101080000480a3e0599e10001280a3e059328000239e012000d0213ffc901000141b3f00419a0362707fffd75288013ffc8c21a00c8b19600cba10200290100006fa21bffc1f3f006b9e03e23cde222004c2012010c22220007ffff0cd01000000da012014d8037ffcd4037fe8d20320041b3f005d9a0360547ffff2b70100000096012004d4012000d422e00092012004d02260041080000a8c21a00cd023e000820120001b3f000f9a0360ccda206004d0213ffc88013ffc8c21a00c8b19600cba10200298100006fa21bffcd6012004d6232000d4012008d4232004d2012014d0027ffcd8213ffcd4022004133f00609202601c901020b11b3f00599a0360fc7fffeeba88013ffc80a220012280000784102001d0012014da0120187fffff619e13e002841000088c21a00c8b19600cba102002ae100006fa21bffcc425e004ec012000ec25e00090100017ea01201c81c5600688012020|@1672,131071|104,4,@1258 112,5,@1260 228,5,@1537 248,4,@1580 296,5,@1662 388,4,@1258 396,5,@1260 424,4,@1670 444,5,@1537 468,4,@1557 476,5,@1559 520,4,@375 592,4,@1568 604,4,@1523 612,5,@1524 1662:C2,568|9e13e002f606201880a1001b8bd02018de213ffcd2213ff8d6213ff49410000bd2012008d00120041b3f005b9a0361747ffff0af88013ff4c4012000d0213ffcee00a010ee213ff8ec00a014ec213ff4ea00a018ea213ff0e800a01ce8213fece600a020e6213fe8e400a024e4213fe4d600a00cd400a008d200a004d000a0007fffeba288013fe494100008d2012004d00120007ffff10201000000d0012000da012008f40360009fc6a00001000000808a200132800013a2102001e002200090100010400000640100000080a2200122800008de042000901000104000007301000000a21020051080000780a4600180a3fffd32800003a2102001a210200580a4600122800047a0102001e201201080a4600132800043a0102001de012004c203e010c2213ffcda03e014da213ff8d803e018d8213ff4d603e01cd6213ff0d403e020d4213fecd203e024d2213fe8d603e00cd403e008d203e004d003e0007fffeb6a88013fe8d0213ffcd2012000901020a17fffba1188013ffc133f006b920261687fffba0d010000008c21a00c8b19600cba10200284100006fa21bffc2f3f006bae05e1a0ee20a000d020a004ec012008ea05a004ea213ffce805a008e8213ff8e605a00ce6213ff4e405a010e4213ff0e205a014e2213fece005a018e0213fe8de05a01cde213fe4c205a020c2213fe0da05a024da213fdcd605a00094102001d2012000901000027fffd6ec88013fdca010000810800005d0012004d0213ffc88013ffcd0012004e201201081c4600688012020|@1669,131071|40,4,@1541 48,5,@1542 128,5,@1484 148,5,@1545 196,5,@1663 220,5,@1665 352,5,@1484 372,5,@496 380,4,@1666 388,5,@496 416,4,@1667 524,5,@1265 1663:C2,40|9e13e002c402200080a0a00132800005901020019010200581c3e0060100000081c3e00601000000|@1664,65665| 1664:S5|496e666978 1665:C2,16|9e13e002d002200481c3e00601000000|@1664,129| 1666:S46|292068617320696e666978207374617475732062757420776173206e6f74207072656365646564206279206f702e 1667:C2,40|9e13e002f606201880a1001b8bd02018c402200cd00360049a100002f403600081c6a00401000000|@1668,131071| 1668:S27|4c45585f28292e7761726e696e674d657373616765283329283129 1669:S42|50415253455f44454328292e706172736544656328332967657453686f72744e6f6e496e666978283729 1670:O1|@1671 1671:C2,36|9e13e00280a220b132800005901020019010200581c3e0060100000081c3e00601000000|@1255,129| 1672:S48|50415253455f44454328292e7061727365446563283329646174617479706542696e64283629636f6e73747273283129 1673:S38|50415253455f44454328292e7061727365446563283329646174617479706542696e64283629 1674:C2,520|9e13e002f606201880a1001b8bd02018d0213ffcd0213ff8d0213ff4a810000fa610000da4100008a210000992013ff4901020017fffe56b88013ff48c21a0108b196010ba1020039e100006fa21bffcda012000da23e000d2012004d223e004d0012008d023e008e8213ffce6213ff8e4213ff4e2213ff0d4213fecde213fe89210000f90102005da04e00cf40360009fc6a00088013fe8841000088c21a00c8b19600cba10200290100006fa21bffc2f3f005bae05e064ee222004ec012004ec222000aa1000027fffef3e01000000e8012010ea213ffcfa052008fa213ff8d4013ff892100008113f0056900223541b3f005b9a0361747fffef6788013ff8e6012000d0213ffce404e010e4213ff8e204e014e2213ff4e004e018e0213ff0de04e01cde213fecc204e020c2213fe8da04e024da213fe4d604e00cd404e008d204e004d004e0007fffea5a88013fe494100008d2012004d00120007fffefba01000000d801201cd6032008d402e008d202a000d002e018c402200080a0a11122800003ae100009ae10000280a5e0b53280000a9210000b9010000b1b3f00419a0362707fffd58001000000ae10000810800009ee01201c901020f51b3f00559a0360547fffe8f001000000ae100008ee01201cec012014ec21202cea012010ea212028d6012000d4012008d201200cd0012018da05e004de012020f403600081c6a00488012028|@1675,131071|52,5,@1450 176,4,@1535 200,5,@1537 232,4,@1497 240,4,@1541 248,5,@1542 328,5,@1484 348,5,@1545 412,4,@1258 420,5,@1260 444,4,@1470 452,5,@1472 1675:S41|50415253455f44454328292e7061727365446563283329646174617479706542696e64696e67283329 1676:C2,180|9e13e002f606201880a1001b8bd02018d0213ffcd0213ff8d0213ff4a810000fa610000da410000992013ff4901020017fffe4d688013ff48c21a0108b196010ba1020039e100006fa21bffc1b3f006c9a036214da23e000d204e004d223e008d0012004d023e0048c21a0108b196010ba10200384100006fa21bffc2f3f006dae05e00cee20a000ec012008ec20a008de20a004ea012000ea24a000d024a004ec24a008c424a00c9010200181c520068801200c|@1681,130211|48,5,@1450 76,4,@1677 124,4,@1679 1677:C2,416|9e13e002f606201880a1001b8bd02018808a200132800004b8102004f8022000b92f200284072001811f200424800028ae102001808a200132800004b8102004f8022000b92f200284072001811f20043480000b808a2001de213ffc84100008113f0004900223d0f40620209fc6a00088013ffcae102001808a200122800005fa0a2005ae10000810800005de213ffcb92f6002ae072001de213ffcda213ff8d0213ff49210209d901000171b0000839a0360d8f40360009fc6a00088013ff4ae10000810800007ec012004de213ffcda213ff8d0213ff488013ff4ec012004ee213ffcd205a008d00120007fffeade88013ffcd0213ffcd0213ff8d0213ff4aa013ff8ea213ff096102005d4012000130000279202603d113f000f900220cc7fffebc688013ff08c21a00c8b19600cba10200290100006fa21bffce8012000e8222000e6012004e62220047fffec0401000000e4012010a21000088c21a00c8b19600cba10200290100006fa21bffce2222004e001200ce0222000e2213ffcda04a004f40360009fc6a00088013ffcd0012000de01201881c3e0068801201c|@1678,131071|96,4,@224 172,4,I24 236,5,@1506 272,4,9999 280,4,@375 288,5,@1515 332,5,@1517 1678:S50|50415253455f44454328292e70617273654465632833296d616b6554797065566172456e762832296c6f6f6b757054283129 1679:C2,96|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d0213ff4da036008f40360009fc6a00088013ff4808a200132800006c4012004d0022000c401200881c0a0068801200cd0012000da00a004de012008f403600081c6a0048801200c|@1680,131071| 1680:S43|50415253455f44454328292e70617273654465632833296d616b6554797065566172456e76283229283129 1681:S40|50415253455f44454328292e70617273654465632833296d616b6554797065566172456e76283229 1682:C2,4536|9e13e002f6062018ba21206080a7401b8bd020188c21a0148b196014ba10200484100006fa21bffc2f3f0071ae05e2c0ee20a000ee036058ee20a00cda20a008d420a0048c21a00c8b19600cba102002ac100006fa21bffc2b3f0072aa056264ea25a000d425a0048c21a0248b196024ba102008aa100006fa21bffc293f0075a8052370e8256000e8036054e825601cd4256018e6036048e6256014e403603ce4256010e2036038e225600ce0036050e0256008ec2560048c21a0408b196040ba10200f82100006fa21bffc193f007e9803204cd8206000ea206038c4206034d803604cd8206030e620602cee036044ee206028e0036040e0206024e4206020e220601ce2036034e2206018ec206014ec036030ec206010e403602ce420600ce6036028e6206008d420600480a2600122800004d202a00810800025fa022000e8026000e602a018e404e00080a4a11122800006a4100008a81000089010001210800008fa05200090100014e804a000e8213ffca81000121080000488013ffcfa213ffc88013ffcde213ffcda213ff8e8213ff4d4213ff0d6213fecc4213fe8ea213fe4c2213fe0133f0072920260c07fffd3df88013fe080a220013280000fe40120101080037dd0213ffcfa213ffcde213ff8da213ff4d0213ff0d4213fecd6213fe8c4213fe4ea213fe0c2213fdc88013fdce4012010e204a008e0046000de04a018c203e00080a06111228000039a1000109a1000019810000d808b20012280002b0100000080a32009268000280100000080a320793480002501000000173f006d9602e346ba033ff5fa02c01d81c2c01d01000000000004fa00000072000000720000007200000072000004ca0000007200000072000000720000071a000000720000030e00000072000000720000007200000a2600000a26000000720000074e00000a2600000072000000720000007200000072000000720000007200000072000004960000015a94100012133f00609202601c901020611b3f00599a0360fc7fffeb4e0100000080a220012280002c01000000d4012010d202a008d0026000c402a018ee00a00080a5e11122800003ac100008ac100017133f00849202620c901000167fffd3810100000080a220012280000bd2012010901020019a01202040001c6801000000de01201c353f008ab406a34881c6a00488012024113f0056900220fc1b3f00559a0360547fffe70501000000d00120101b3f00419a0362707fffd38801000000113f007d900222a8ec01201c81c5a00688012024113f007d900222a8d401201c81c2a00688012024901000121b3f00419a0362707fffd37901000000d0213ffcd0213ff8d0213ff4d0213ff0d401201892013ff090102001da02a008f40360009fc6a00088013ff0d0213ffcd0213ff8d0213ff4d0213ff0d2012028d002600892013ff084100008901020019a100002f40360009fc6a00088013ff0ee0120348c21a0108b196010ba102003ac100006fa21bffc2b3f008aaa0563dcea25a000e8012008e825a008e601201ce625a0048c21a0108b196010ba102003a4100006fa21bffcec24a008e205e004e224a004e005e000e024a0008c21a0108b196010ba1020039e100006fa21bffce823e008c2012004c223e004da012000da23e000d8012038e4213ffc9210000f90102005da032004f40360009fc6a00088013ffc8c21a00c8b19600cba10200290100006fa21bffc173f00689602e348d6222004d4012030d42220007fffecb3010000009a01204440001ca7010000008c21a00c8b19600cba10200292100006fa21bffcc401200cc4226004ee012004ee2260008c21a00c8b19600cba102002ac100006fa21bffcea01201cea25a004e8012014e825a00094100016de012040353f008bb406a3f081c6a00488012048901000121b3f00419a0362707fffd30c01000000d0213ffcd0213ff8d0213ff4d0213ff0d401201892013ff090102001da02a008f40360009fc6a00088013ff0d0213ffcd0213ff8d0213ff4d0213ff0d2012028d002600892013ff084100008901020019a100002f40360009fc6a00088013ff0ee0120348c21a0108b196010ba102003ac100006fa21bffc2b3f008caa056090ea25a000e8012008e825a008e601201ce625a0048c21a0108b196010ba102003a4100006fa21bffcec24a008e205e004e224a004e005e000e024a0008c21a0108b196010ba1020039e100006fa21bffce823e008c2012004c223e004da012000da23e000d8012038e4213ffc9210000f90102005da032004f40360009fc6a00088013ffc9a01204440001d67010000008c21a00c8b19600cba10200296100006fa21bffcd401200cd422e004d2012004d222e0008c21a00c8b19600cba10200284100006fa21bffcee01201cee20a004ec012014ec20a000941000029210000bde012040353f008db406a25881c6a00488012048901000121b3f00419a0362707fffd2aa010000009a01202040001eb801000000de01201c353f008db406a3ec81c6a00488012024d4012018d202a014d401200c90100009d201201484100008901020019a100002de01201cf403600081c6a00488012024901000121b3f00419a0362707fffd29101000000d40120188c21a00c8b19600cba10200290100006fa21bffcd202a01cd2222004c401200cc42220007fffec0c01000000d0213ffc9a01202040001ef188013ffcd0213ffcd4012014133f00609202601c9010209d1b3f00599a0360fc7fffea1688013ffc80a2200122800015ae1020018c21a00c8b19600cba10200290100006fa21bffc2d3f008eac05a154ec222004ea012014ea2220007fffebf001000000d0213ffc9a01202840001f2888013ffcae10000810800005ec01201cd0213ffc88013ffcec01201cea05a008e8056000e605a018e404e00080a4a11122800003a2100014a210001280a4607d3280000bee213ffcee213ffc901000161b3f00419a0362707fffd24e88013ffca21000081080000b8c21a00c92100016113f004c900220a01b3f00559a0360547fffe5bc88013ffca21000088c21a00c8b19600cba10200290100006fa21bffc233f008ea20462b4e2222004e001201ce02220007fffebbe0100000092100008d0012024da012018f40360009fc6a00001000000de012020c203e008da006000d803e018d603200080a2e111228000039410000d9410000b80a2a0293280000ad0213ffcd0213ffc9010000f1b3f00419a0362707fffd21f88013ffc1080000ad40120009210000f113f004c9002213c1b3f00559a0360547fffe58e88013ffcd4012000d2012004d001200cde012030353f008eb406a2fc81c6a00488012038901000121b3f00419a0362707fffd209010000009a01202040001f4101000000de01201c353f0090b406a01081c6a00488012024901000121b3f00419a0362707fffd1fc01000000d0213ffcd0213ff8d0213ff4d4012014d0213ff0d0213fecd0213fe892013fe8901020017fffe18088013fe88c21a0108b196010ba10200392100006fa21bffc113f009090022074d0226000c4012008c4226008ee02a004ee226004ac01200cea012004ea25a000a801200cd2252004a601200ce402a008e424e0088c21a0108b196010ba102003a2100006fa21bffce001200ce0246000de012010de246004c2012014c2246008da0120308c21a00c8b19600cba10200290100006fa21bffcd8036024d8222004d6012024d62220007fffeb4d010000009210000890100011da012020f40360009fc6a00001000000d4012028d202a008c4026000ee02a018ec05e00080a5a11122800003aa100002aa10001680a560413280000bd0213ffcd0213ffc9010000a1b3f00419a0362707fffd1ae88013ffcaa1000081080000bd0213ffc9210000a113f004c900221241b3f00559a0360547fffe51c88013ffcaa100008d0213ffcd0213ff8d0213ff48c21a01088013ff48b196010ba102003aa100006fa21bffc293f0090a80520ece8256000e601201ce6256008e4012048e4256004a2012000ea246000a0012000de012020de24200482012000da012024da2060088c21a0108b196010ba10200398100006fa21bffcd6012000d6232000d4012004d4232004d2012008d22320088c21a00c8b19600cba10200290100006fa21bffc053f008e8400a2b4c4222004ee012034ee2220007fffeafb01000000921000089010000cda012030f40360009fc6a00001000000ec012038ea05a008e8056000e605a018e404e00080a4a11122800003a2100014a210001280a460293280000ad0213ffcd0213ffc901000161b3f00419a0362707fffd15c88013ffc1080000a9410200592100016113f004c9002213c1b3f00559a0360547fffe4cb88013ffc94102005d2012000d0012010de012048353f0084b406a16881c6a00488012050da213ffc901000121b3f00419a0362707fffd14588013ffcd201200080a2605532800006d0012014153f000f9402a10c108000aed4213ffcc4022008ee00a000ec022018ea05a00080a5611122800003a8100017a810001580a521013280008da8102001e6022010e6213ffce4022014e4213ff8ec213ff4e202201ce2213ff0e0022020e0213fecde022024de213fe8d602200c94100002d2022004d00220007fffe55e88013fe8133f00909202617c4000222801000000808a20013280000501000000c202200010800009b8206001113f0074900220b8f40620209fc6a0000100000082102001b8206001811f200036800004b820600110800007da012014811f202434800004da01201410800057c2213ffcc2213ffcd8036010d8213ff8d6036014d6213ff4d4036018d4213ff0d203601cd2213fecd0036020d0213fe8c4036024c4213fe4d603600cd4036008d2036004d00360007fffe5b688013fe4ee012018ac100008ea05e010ea213ffce805e014e8213ff8e605e018e6213ff4e405e01ce4213ff0e205e020e2213fece005e024e0213fe8d605e00cd405e008d205e004d005e0007fffe51c88013fe8ec213ffc92100008113f00939002208c7fffb44888013ffc133f0093920260a07fffb444010000008c21a00c8b19600cba1020029e100006fa21bffc033f0093820060d0c223e000d023e004da01201cd8036004d8213ffcd6036008d6213ff8d403600cd4213ff4d2036010d2213ff0d0036014d0213fecc4036018c4213fe8ee03601cee213fe4ec036020ec213fe0ea036024ea213fdcd603600094102005d20120009010000f7fffd12388013fdc10800005d001201cd0213ff888013ff8d001201c1b3f00419a0362707fffd0aa01000000e801200410800006e6012008d0213ffcd0213ff888013ff8e601200880a4e045328000088c21a00c901000144000223e01000000941000081080000a880120088b19600cba10200294100006fa21bffce822a004a4103ffde422a00088012008d4213ffcd6012014153f00939402a160d2012010113f00849002220c1b3f005c9a0362e87fffeba088013ffc901020019a0120284000223b01000000d2012000de012024353f0093b406a30081c6a0048801202cd0213ff8d0213ff4d0213ff0e601201892013ff090102001da04e008f40360009fc6a00088013ff0d0213ffcd0213ff8d0213ff4d0213ff0e401202892013ff090102001da04a008f40360009fc6a00088013ff0e20120348c21a0108b196010ba102003a0100006fa21bffcde01201cde242008c2046004c2242004da046000da242000d8012030e0213ffcd6032010d6213ff8d4032014d4213ff4d2032018d2213ff0d003201cd0213fecc4032020c4213fe8ee032024ee213fe4d603200cd4032008d2032004d00320007fffe50b88013fe4d0213ffcd2012030d0012000da012024f40360009fc6a00088013ffc8c21a0088b1960083b100000ba076001ac100006fa21bffc2b3f0031aa056124ea25a0008c21a0088b1960083b100000ba076001a8100006fa21bffc273f0075a604e274e62520008c21a0148b196014ba102004a4100006fa21bffcec24a00ce824a008233f0093a2046374e224a004a0103fe1e024a000d4012000921000089010001240001a4f010000008c21a00c8b19600cba1020029e100006fa21bffc82102001c223e004d023e0008c21a00c8b19600cba1020029a100006fa21bffcd8012010d8236004d6012008d62360008c21a00c8b19600cba10200294100006fa21bffcd2012020d222a004d0012018d022a0009210000d9010000fde012044353f008bb406a3f081c6a0048801204c|@1892,131071|40,4,@1683 88,4,@1687 124,4,@1708 204,4,@1761 424,4,@1684 432,5,@1256 576,4,$1682+602 720,4,@1568 732,4,@1523 740,5,@1524 796,4,@1779 808,5,@1256 836,5,@1825 848,4,@1827 864,4,@1477 872,4,@1470 880,5,@1472 892,4,@1258 900,5,@1260 908,4,@1755 928,4,@1755 952,4,@1258 960,5,@1260 1088,4,@1829 1248,4,@1652 1268,5,@1537 1280,5,@1831 1368,4,@1835 1388,4,@1258 1396,5,@1260 1524,4,@1837 1668,5,@1838 1760,4,@1845 1780,4,@1258 1788,5,@1260 1800,5,@1847 1812,4,@1848 1880,4,@1258 1888,5,@1260 1936,5,@1537 1952,5,@1850 1968,4,@1568 1980,4,@1523 1988,5,@1524 2028,4,@1851 2048,5,@1537 2064,5,@1853 2148,4,@1258 2156,5,@1260 2180,4,@1345 2188,4,@1470 2196,5,@1472 2228,4,@1854 2248,5,@1537 2336,4,@1258 2344,5,@1260 2364,4,@1358 2372,4,@1470 2380,5,@1472 2404,4,@1856 2424,4,@1258 2432,5,@1260 2444,5,@1858 2456,4,@1861 2476,4,@1258 2484,5,@1260 2528,5,@1450 2556,4,@1863 2700,5,@1537 2788,4,@1258 2796,5,@1260 2820,4,@1356 2828,4,@1470 2836,5,@1472 2884,4,@1864 3008,4,@1854 3028,5,@1537 3116,4,@1258 3124,5,@1260 3144,4,@1358 3152,4,@1470 3160,5,@1472 3184,4,@1777 3208,4,@1258 3216,5,@1260 3240,4,@380 3360,5,@1473 3368,4,@1866 3376,5,@1879 3408,4,@1695 3544,5,@1484 3624,5,@1473 3640,4,@1883 3648,5,@496 3656,4,@1884 3664,5,@496 3692,4,@1885 3800,5,@1265 3828,4,@1258 3836,5,@1260 3888,5,@1886 3948,4,@1887 3960,4,@1779 3968,4,@1554 3976,5,@1555 3992,5,@1888 4008,4,@1889 4228,5,@1484 4288,4,@799 4324,4,@1702 4364,4,@1891 4396,5,@1832 4520,4,@1835 1683:C2,484|9e13e002f606201880a1001b8bd02018c4036004ee00a008ec05e000ea00a018e805600080a5211122800003a6100016a610001480a4e0e532800011e605e000de213ffcda213ff8d0213ff4d2213ff0901000021b3f00419a0362707fffcfdd88013ff0d2012000d0012004da012008de01200c10bfffe488012010e405600080a4a11122800003a2100013a2100012de213ffcda213ff8d0213ff4d2213ff0133f0072920260c0901000117fffcfab88013ff080a220012280004890102001e2012008e0046004de042010de213ffcc2042014c2213ff8da042018da213ff4d804201cd8213ff0d6042020d6213fecd4042024d4213fe8d604200cd4042008d2042004d00420007fffe47588013fe8d2012008841000088c21a00c8b19600cba10200290100006fa21bffcee02600cee222004ec012000ec222000aa1000027fffe92b01000000e8012008ea213ffc96100008d405200492102005d0012004da052008f40360009fc6a00088013ffc8c21a00c8b19600cba102002a6100006fa21bffce4012000e424e004d024e000e6213ffcd2012004d0012008da01200c7fffff9888013ffc8c21a00c8b19600cba102002a2100006fa21bffcd0246004e0012000e024600090100011de01201481c3e00688012018e201200c81c4600688012010|@1686,131071|84,4,@1258 92,5,@1260 160,4,@1684 172,5,@1256 264,5,@1484 320,5,@1537 1684:O1|@1685 1685:C2,332|9e13e002841000088088a0012280002a0100000080a0a009268000270100000080a0a07534800024010000002f3f0072ae05e10eba00bff5fa05c01d81c5c01d01000000000000ee0000006e0000006e0000006e0000006e0000008e0000006e0000006e0000006e000000e20000006e0000009a0000006e0000006e0000006e000000ca000000be0000006e000000d6000000b20000006e0000006e000000a60000006e0000006e0000006e0000006e000000fa80a2207932800005901020019010200581c3e0060100000081c3e006010000009010200581c3e006010000009010200581c3e006010000009010200581c3e006010000009010200581c3e006010000009010200581c3e006010000009010200581c3e006010000009010200581c3e006010000009010200581c3e006010000009010200581c3e006010000009010200581c3e00601000000|@1492,98433|44,4,$1685+70 1686:S43|50415253455f44454328292e706172736544656328332964656328342964656353657175656e6365283229 1687:C2,232|9e13e002f606201880a1001b8bd020188c21a00c8b19600cba10200290100006fa21bffcc4012008c42220042f3f0072ae05e368ee2220009410000fac10000daa1000097fffe88101000000d6213ffcec213ff8ea213ff4d0213ff0d0213fecd0213fe8d0213fe4d0213fe0d0213fdcd4213fd892013fdc901020019a013ffc4000003388013fd8e8012014b8252001811f200036800006e601200cd001200ce601200081c4e00688012034e6213ffce4012010e4213ff8e8213ff4d6012008d401200492102001901020b99a0120244000017988013ff4d0022008e201200081c4600688012034|@1707,131071|44,4,@1688 68,5,@1537 128,5,@1690 208,5,@1698 1688:O1|@1689 1689:C2,36|9e13e00280a2205d32800005901020019010200581c3e0060100000081c3e00601000000|@1255,129| 1690:C2,568|9e13e002f606201880a1001b8bd020188c21a00c8b19600cba10200290100006fa21bffcc4036008c4222004ee036004ee222000ac10000faa10000da81000097fffe82f01000000a61000088c21a00c8b19600cba10200290100006fa21bffce4057ff4e4222004e2056004e22220007fffe82301000000ec213ffcea213ff8e8213ff4e6213ff0da056000f40360009fc6a00088013ff0d2012000da0120084000006d01000000e0012008de043ffcc203e004da006008d8036000d6006018d402e00080a2a111228000039210000c9210000ad0213ffc84100009d2042008901000027fffce6188013ffc80a220012280000e01000000ec01200cea05bffcd4056004d205a004d005a0081b3f005b9a0361747fffe82f01000000ae10000810800005ee213ffc2f000083ae05e3d8ee213ffc13000083920263d8901000171b0000839a0360d8f40360009fc6a00088013ffc80a2200122800006ee0120102f3f000fae05e10c1080001490100017d0012000da05fff8f40360009fc6a00001000000808a20013280000501000000ee0220001080000990100017113f0074900220b8f40620209fc6a00001000000ae102001901000177ffff7e00100000080a2200122800008ec05e000901000177ffff7ef01000000ac10000810800007e805e00080a5bffd32800003ac103ffdec05e004e805e00080a53ffd32800003aa102001aa102005e601200cee24e000ea24e004e4012004e424e008e2012000e224e00cec24e01090102001e001201481c4200688012018|@1697,131071|64,5,@1537 112,5,@1537 160,5,@1691 228,5,@1256 268,4,@1541 276,5,@1542 296,4,I48 308,4,I48 320,4,I24 352,4,@380 412,4,@1695 440,5,@1663 464,5,@1665 1691:C2,480|9e13e002f606201880a1001b8bd02018c4037ffcee00a004ec05e008ea05a000e805e018e605200080a4e11122800003a4100015a4100013de213ffcda213ff8d0213ff4d2213ff0d203600c901000127fffcdf188013ff080a220012280005ed0012004e4012008e204bffce0046004de042008c203e000da042018d803600080a3211122800003961000019610000cd204a0089010000b7fffcddf0100000080a2200122800034d6012008d6012008d402fffcd202a004c402fff8ee026010ee213ffcec026014ec213ff8ea026018ea213ff4e802601ce8213ff0e6026020e6213fece4026024e4213fe8d602600cd4026008e2026000e002600492100010901000117fffe21f88013fe89a100002f40360009fc6a00001000000808a200132800015d6012008c2022000901000017ffff76d0100000080a2200122800007da006000901000017ffff77c0100000010800006d001200480a37ffd32800006d6012008d0012004da01200c81c36006880120108c21a00c8b19600cba10200290100006fa21bffcd402e00cd4222004d2012000d22220007fffe74401000000da02e000f40360009fc6a0000100000092100008d00120044000001101000000d2012000da012008de01200c10bfff8e88012010e401200c81c4a00688012010|@1694,131071|80,5,@1256 152,5,@1256 260,5,@1473 304,5,@1663 328,5,@1665 408,5,@1537 440,5,@1692 1692:C2,52|9e13e002841000088c21a0108b196010ba10200390100006fa21bffcd2222008c422200492102005d222200081c3e00601000000|@1693,65667| 1693:S24|50415253455f5452454528292e6d6b4170706c6963283229 1694:S61|50415253455f44454328292e70617273654465632833296465632834297061727365496e66697828372970617273654170706c69636174696f6e283229 1695:O3|@104,@1696,0 1696:S6|4f7074696f6e 1697:S56|50415253455f44454328292e70617273654465632833296465632834297061727365496e666978283729726561644e6578744f7073283229 1698:C2,1188|9e13e002f6062018ba21205480a7401b8bd02018d0213ffcd0213ff8d0213ff4d0213ff0d0213fecde213fe8da213fe4d0213fe0d2213fdcd6213fd892013fec901020017ffffe9588013fd88c21a0188b196018ba10200584100006fa21bffcee012014ee20a000ec012018ec20a004ea01201cea20a008e8012020e820a00ce6012024e620a010e401200ce204bffce0046004c4213ffc133f005892026104d00420241b3f00389a0360407fffc3a588013ffc80a2200122800005de0120289e10200110800046da012028c201202cb8206001ba23e001811f401c3280003c9e102001da012004d801201c80a3400c228000379e102001d6012010d402fffcd202a004d2213ffcd0026010d0213ff8c4026014c4213ff4ee026018ee213ff0ec02601cec213fecea026020ea213fe8e8026024e8213fe4d602600cd4026008e6026000e402600492100012901000137fffe1cd88013fe4e2012000e0046004e0213ffcde046008de213ff8c204600cc2213ff4da046010da213ff0d8046014d8213fecd6046018d6213fe8d404601cd4213fe4d2046020d2213fe0c4046024c4213fdcd60460009410200592100008113f0075900221d87fffcd6088013fdc9e1000081080000588012004d0213ffc88013ffc88012004da012028d801202cb8232001ba236001811f401c24800004d601200410800025d401202c80a2e00122800037d6012000d4012010d202bffcd0026004133f005892026104d00220241b3f00389a0360407fffc3460100000080a220012280000ec4012028d2012030d00120241b0000839a0360d8f40360009fc6a0000100000080a220013280000bd401202c1080001ed6012000ee01202cb825e001ba20a001811f401c32800018d6012000d401202cb822a001b917200492072001d001200480a2200122800003841020b9c4012030ee012020ee213ffcec012024ec213ff8ea012028ea213ff4d601201cd401201890100002da0120107fffff4c88013ff4961000088c21a0088b1960083b100000ba07600184100006fa21bffc2f3f0031ae05e124ee20a0008c21a0088b1960083b100000ba076001ac100006fa21bffc2b3f0075aa056274ea25a0008c21a0148b196014ba102004a8100006fa21bffcc425200cec252008e6012030e6252004a4103fe1e42520008c21a00c8b19600cba102002a2100006fa21bffca0102001e0246004de02e008de2460008c21a00c8b19600cba10200290100006fa21bffce2222004c2012034c22220004000007c0100000092100008901000147ffffed1010000008c21a0188b196018ba1020059a100006fa21bffcd802e010d8236010d402e00cd423600cd0236008d202e004d2236004c402e000c4236000ee012008b825e001ba232001811f401c26800004d0213ffc10800013d0213ffcd4213ff8c4213ff4d8213ff0d2213fecda213fe8d201200c9010000a1b0000839a0360d8f40360009fc6a00088013fe880a220013280000bec01201410800016d0012000d4213ff8c4213ff4d8213ff0d2213fecda213fe888013fe8ec012014ec21204cea012010ea212048e8012008e8212044d6012004d401200cd2012020d0012024da012028de01202c10bffedd88012044ec01202c81c5a00688012050|@1706,131071|68,5,@1690 152,4,@1507 164,4,@1112 172,5,@1114 336,5,@1484 432,4,@1699 440,5,@1265 532,4,@1507 544,4,@1112 552,5,@1114 580,4,I24 756,4,@799 792,4,@1702 916,5,@1704 932,5,@1692 1056,4,I24 1699:O1|@1700 1700:C2,44|9e13e002f606201880a1001b8bd02018c402200c113f0075900222289a100002f403600081c6a00401000000|@1264,131071|20,4,@1701 1701:S66|4d6978656420726967687420616e64206c656674206173736f63696174697665206f70657261746f7273206f66207468652073616d6520707265636564656e63652e 1702:O4|@1703,-1,@734,@799 1703:S11|3c756e646566696e65643e 1704:C2,48|9e13e002841000088c21a00c8b19600cba10200290100006fa21bffcc422200484102035c422200081c3e00601000000|@1705,65665| 1705:S9|5475706c6554726565 1706:S54|50415253455f44454328292e70617273654465632833296465632834297061727365496e6669782837296e6578744c6576656c283729 1707:S42|50415253455f44454328292e70617273654465632833296465632834297061727365496e666978283729 1708:C2,416|9e13e002f606201880a1001b8bd020188c21a0188b196018ba10200584100006fa21bffc2f3f0076ae05e12cee20a000ee036018ee20a010d220a00cd020a008da20a0048c21a02c8b19602cba10200aac100006fa21bffc2b3f0077aa056228ea25a000ea03601cea25a024ee25a020e8036014e825a01cc425a018e6036010e625a014e403600ce425a010d025a00cda25a008d225a004de213ffcda213ff8d0213ff4d2213ff0d4213fecc4213fe8ec213fe496100009153f007d9402a298d2013fec113f007d900222f01b3f005c9a0362e87fffe6ac88013fe4e20120148c21a00c8b19600cba10200290100006fa21bffce0046008e0222004de012008de2220007fffe50e01000000c20120101b3f007d9a0362f0da213ffc193f0061980321e0d8213ff8d0213ff4d6012000d4006008d2006004d0006000da046004f40360009fc6a00088013ff492100008d0012008da012004f40360009fc6a00001000000d0213ffcd601200c153f007e9402a004133f00609202601cd00120081b3f005c9a0362e87fffe67f88013ffcd0012000d601201c81c2e00688012020|@1760,131071|36,4,@1709 88,4,@1722 184,4,@1754 196,4,@1757 204,4,@1554 212,5,@1555 260,5,@1537 272,4,@1757 284,4,@1580 364,4,@1759 372,4,@1568 384,4,@1554 392,5,@1555 1709:C2,652|9e13e002f606201880a1001b8bd02018ae10000fac10000daa10000890100009400000a2010000009e1000088c21a00c8b19600cba10200290100006fa21bffc1b3f00779a036038da222004ea22200098100017961000099410000f7fffe4c901000000d8213ffcec213ff8ea213ff4d4213ff0d0213fecfa05a008fa213fe888013fe8d2012000d0012010d6213ffcfa026008fa213ff8d4022010133f00609202601c901020bd1b3f00599a0360fc7fffe2cb88013ff880a220012280001fc40120048c21a00c8b19600cba10200290100006fa21bffc2f3f0060ae05e2b4ee222004ec01200cec2220007fffe4a501000000ea012018d4012000d20560101b3f005d9a0360547fffe6900100000092100008d00120044000008f010000009610000888012008f606201880a1001b8bd0201830bfffd4ee012018c4213ffcd405e00c133f00609202601c901020151b3f00599a0360fc7fffe2a188013ffc80a2200122800047d0012000ec01201480a5a00132800033d0213ffcea01201ce805600ce8213ffce6052010e6213ff8e4052014e4213ff4e2052018e2213ff0e005201ce0213fecde052020de213fe8c2052024c2213fe4d605200cd4052008d2052004d00520007fffdfaa88013fe4da012000d8036004d8213ffcd6036008d6213ff8d403600cd4213ff4d2036010d2213ff0c4036014c4213fecee036018ee213fe8ec03601cec213fe4ea036020ea213fe0e8036024e8213fdcd60360009410200592100008113f0077900220f47fffcb3d88013fdc10800004ea01202088013ffcea012020d401201cd205600cd0056008da056004f40360009fc6a0000100000092100008d0012004de012024353f0077b406a16c81c6a00488012028ec01202081c5a00688012024|@1721,131071|32,5,@1710 64,4,@1712 92,5,@1537 156,4,@1568 168,4,@1523 176,5,@1524 216,4,@1573 236,5,@1537 256,4,@1557 264,5,@1559 280,5,@1714 324,4,@1568 336,4,@1523 344,5,@1524 456,5,@1484 552,4,@1716 560,5,@1265 624,4,@1719 1710:C2,40|9e13e002c402200080a0bfe132800005901020019010200581c3e0060100000081c3e00601000000|@1711,65665| 1711:S23|50415253455f5452454528292e69734964656e74283129 1712:O1|@1713 1713:C2,36|9e13e00280a2201532800005901020019010200581c3e0060100000081c3e00601000000|@1255,129| 1714:C2,52|9e13e002841000088c21a0108b196010ba10200390100006fa21bffcc4222008d222200492103ff5d222200081c3e00601000000|@1715,65667| 1715:S28|50415253455f5452454528292e6d6b436f6e73747261696e74283229 1716:O1|@1717 1717:C2,44|9e13e002f606201880a1001b8bd02018c402200c113f0077900221449a100002f403600081c6a00401000000|@1264,131071|20,4,@1718 1718:S32|4578706563746564206964206f722069643a7479206265666f72652060617327 1719:C2,52|9e13e002841000088c21a0108b196010ba10200390100006fa21bffcd2222008c422200492103fddd222200081c3e00601000000|@1720,65667| 1720:S25|50415253455f5452454528292e6d6b4c617965726564283229 1721:S61|50415253455f44454328292e70617273654465632833296465632834297061747465726e283329636f6e73747261696e744f724c617965726564283229 1722:C2,3016|9e13e002f606201880a1001b8bd02018c4036004ee00a008ec05e000ea00a018e805600080a5211122800003a6100016a610001480a4e0cd3280000d80a4e0d9de213ffc901000021b3f00419a0362707fffca0688013ffc113f007a9002220ce601200081c4e006880120043280003e80a4e0d1de213ffcda213ff8d0213ff4901000021b3f00419a0362707fffc9f788013ff4e6012004e404e004e204a008e0046000de04a018c203e00080a06111228000039a1000109a10000180a360dd228000069a1020019a012008400002c8010000009a100008d8012004d6032004d402e008d202a000d002e018c402200080a0a11122800003ae100009ae10000280a5e0dd3280000bda213ffcda213ffc9010000b1b3f00419a0362707fffc9d388013ffcae1000081080000ad00120009210000b901021751b3f00559a0360547fffdd4288013ffcae100008d0012000de01200c353f007ab406a36481c6a004880120103280006ce4036004de213ffcda213ff8d0213ff4d00360041b3f00419a0362707fffc9b988013ff4e6012004e404e004e204a008e0046000de04a018c203e00080a06111228000039a1000109a10000180a360d522800032010000008c21a00c8b19600cba10200290100006fa21bffcd804e014d8222004d6012000d62220007fffe328010000009410000892100012d004e00cda04e008f40360009fc6a00001000000d4012004d0213ffcd402a004133f00609202601c901020e11b3f00599a0360fc7fffe12e88013ffc80a2200122800017da0120009a01200c400002d5010000008c21a00c8b19600cba10200292100006fa21bffcd0226004d0012000d0226000901000097ffffd82010000009a10000810800007d80120081b3f007b9a03610cd0213ffc88013ffcd8012008d6032004d402e008d202a000d002e018c402200080a0a11122800003ae100009ae10000280a5e0d53280000bda213ffcda213ffc9010000b1b3f00419a0362707fffc96588013ffcae1000081080000ad00120009210000b901020a51b3f00559a0360547fffdcd488013ffcae100008d0012000ee01201081c5e00688012014e204a008e0046000c204a018d800600080a3211122800003961000109610000c80a2e0e93280005380a4e0fdde213ffcda213ff8d0213ff4901000121b3f00419a0362707fffc94488013ff4d6012004d402e004133f00609202601c901020ed1b3f00599a0360fc7fffe0d90100000080a2200122800007d0213ffc113f007b9002210cd401200881c2a0068801200cd0213ff892013ff8901020019a012008400002ce88013ff8d401200cd202a004d0026008c4022000ee026018ec05e00080a5a11122800003aa100002aa10001680a560ed3280000a901021f5901000091b3f00419a0362707fffc91b01000000aa100008108000088c21a0081b3f00559a0360547fffdc8c01000000aa1000088c21a0088b1960083b100000ba076001aa100006fa21bffc293f000fa80520cce82560008c21a0148b196014ba10200490100006fa21bffce6012004e622200cea222008e4012000e4222004a2102021e2222000e001201081c42006880120143280003c80a4e101d6036020ac10000fa810000de602e010e6213ffce002e014e0213ff8de02e018de213ff4da02e01cda213ff0d802e020d8213fecd402e024d4213fe8d202e000d002e004e602e008e002e00c96100010941000139e100009921000089010000f7fffdd1c88013fe8ec213ffcd0213ff8d00520201b3f00419a0362707fffc8d888013ff88c21a0088b1960083b100000ba07600182100006fa21bffc1b3f00319a036124da2060008c21a0148b196014ba10200490100006fa21bffc193f007c980322e0d822200cd6012000d6222008c222200494103fd9d4222000d201200481c26006880120083280003c80a4e105d6036020ac10000fa810000de602e010e6213ffce002e014e0213ff8de02e018de213ff4da02e01cda213ff0d802e020d8213fecd402e024d4213fe8d202e000d002e004e602e008e002e00c96100010941000139e100009921000089010000f7fffdce088013fe8ec213ffcd0213ff8d00520201b3f00419a0362707fffc89c88013ff88c21a0088b1960083b100000ba07600182100006fa21bffc1b3f00319a036124da2060008c21a0148b196014ba10200490100006fa21bffc193f007c98032328d822200cd6012000d6222008c222200494103fd9d4222000d201200481c26006880120083280007580a4e10dd6036004de213ffcda213ff8133f005892026104d002e0241b3f00389a0360407fffbee988013ff880a2200122800004d401200010800034ee012000d202a004d2213ffcd0026010d0213ff8c4026014c4213ff4ee026018ee213ff0ec02601cec213fecea026020ea213fe8e8026024e8213fe4d602600cd4026008e6026000e402600492100012901000137fffdd1f88013fe4e2012000e0046004e0213ffcde046008de213ff8c204600cc2213ff4da046010da213ff0d8046014d8213fecd6046018d6213fe8d404601cd4213fe4d2046020d2213fe0c4046024c4213fdcd60460009410200592100008113f007c9002234c7fffc8b288013fdc88012004ee012000ec05e020ea05a010ea213ffce805a014e8213ff8e605a018e6213ff4e405a01ce4213ff0e205a020e2213fece005a024e0213fe8d605a00cd405a008d205a004d005a0007fffdc6a88013fe8d0213ffc901000161b3f00419a0362707fffc82788013ffc8c21a0088b1960083b100000ba0760019e100006fa21bffc033f003182006124c223e0008c21a0148b196014ba10200490100006fa21bffc1b3f007c9a0363ccda22200cd8012000d8222008de22200496103fd9d6222000d401200881c2a0068801200c3280003c80a4e109d6036020ac10000fa810000de602e010e6213ffce002e014e0213ff8de02e018de213ff4da02e01cda213ff0d802e020d8213fecd402e024d4213fe8d202e000d002e004e602e008e002e00c96100010941000139e100009921000089010000f7fffdc2f88013fe8ec213ffcd0213ff8d00520201b3f00419a0362707fffc7eb88013ff88c21a0088b1960083b100000ba07600182100006fa21bffc1b3f00319a036124da2060008c21a0148b196014ba10200490100006fa21bffc193f007c980323f0d822200cd6012000d6222008c222200494103fd9d4222000d201200481c26006880120083280003cd6036004d6036020ac10000fa810000de602e010e6213ffce002e014e0213ff8de02e018de213ff4da02e01cda213ff0d802e020d8213fecd402e024d4213fe8d202e000d002e004e602e008e002e00c96100010941000139e100009921000089010000f7fffdbf388013fe8ec213ffcd0213ff8d00520201b3f00419a0362707fffc7af88013ff88c21a0088b1960083b100000ba07600182100006fa21bffc1b3f00319a036124da2060008c21a0148b196014ba10200490100006fa21bffc193f007d98032014d822200cd6012000d6222008c222200494103fd9d4222000d201200481c2600688012008d402e008d202a000ec02e018e805a00080a5211122800003a6100009a6100014de213ffcda213ff8d0213ff4d2036024901000137fffc76988013ff480a220012280004de6012004e6012004e404e004e204a008e0046000de04a018c203e00080a06111228000039a1000109a10000180a3605d328000039a1020019a10200580a360012280000b98102001da213ffc901000121b3f00419a0362707fffc76d88013ffc9810000810800005da012008da213ffc88013ffcda012008d803600cd6012004d6213ffc153f00619402a1e0d4213ff8d2012000d2213ff4d6036004d4032008d2032004d0032000400002c388013ff48c21a0088b1960083b100000ba07600184100006fa21bffc2f3f0031ae05e124ee20a0008c21a0088b1960083b100000ba076001ac100006fa21bffc2b3f0075aa056274ea25a000a81000088c21a0148b196014ba10200490100006fa21bffcc422200cec222008e8222004a6103fe1e6222000e401200c81c4a00688012010d604e004153f007d9402a298d2012000113f00609002201c1b3f005c9a0362e87fffe24801000000113f007d900222a8e401200881c4a0068801200c|@1756,131071|72,4,@1258 80,5,@1260 88,4,@1723 132,4,@1258 140,5,@1260 204,5,@1724 276,4,@1258 284,5,@1260 312,4,@1470 320,5,@1472 340,4,@1726 380,4,@1258 388,5,@1260 484,5,@1537 532,4,@1568 544,4,@1523 552,5,@1524 576,5,@1728 620,5,@1704 640,4,@1730 716,4,@1258 724,5,@1260 752,4,@1470 760,5,@1472 848,4,@1258 856,5,@1260 872,4,@1568 884,4,@1523 892,5,@1524 912,4,@1730 948,5,@1731 1012,4,@1258 1020,5,@1260 1040,4,@1470 1048,5,@1472 1084,4,@375 1260,5,@1473 1280,4,@1258 1288,5,@1260 1320,4,@799 1352,4,@1736 1500,5,@1473 1520,4,@1258 1528,5,@1260 1560,4,@799 1592,4,@1740 1656,4,@1507 1668,4,@1112 1676,5,@1114 1784,5,@1484 1880,4,@1742 1888,5,@1265 1972,5,@1473 1988,4,@1258 1996,5,@1260 2028,4,@799 2060,4,@1745 2208,5,@1473 2228,4,@1258 2236,5,@1260 2268,4,@799 2300,4,@1747 2448,5,@1473 2468,4,@1258 2476,5,@1260 2508,4,@799 2540,4,@1749 2636,5,@1256 2732,4,@1258 2740,5,@1260 2784,4,@1580 2820,5,@1751 2852,4,@799 2888,4,@1702 2960,4,@1754 2972,4,@1568 2980,4,@1554 2988,5,@1555 2996,4,@1755 1723:O1|-16 1724:C2,232|9e13e002f606201880a1001b8bd02018c4037ffc8c21a00c8b19600cba10200290100006fa21bffcee00a010ee222004d2037ff8d2222000ac10000faa10000d7fffe09601000000de057ffcec213ffcea213ff894100008d203e004d003e00cda03e008f40360009fc6a00088013ff8c2012000da007ffcd0213ffcd4036004133f00609202601c901020e11b3f00599a0360fc7fffde9888013ffc80a220012280000698102001da0120047fffffd69e13e002981000088c21a00c8b19600cba10200296100006fa21bffcd822e004d4012000d422e0009010000bd201200881c260068801200c|@1725,131071|64,5,@1537 128,4,@1568 140,4,@1523 148,5,@1524 1725:S68|50415253455f44454328292e70617273654465632833296465632834297061747465726e28332961746f6d69635061747465726e283129702d766172734c697374283129 1726:C2,48|9e13e002841000088c21a00c8b19600cba10200290100006fa21bffcc422200484102025c422200081c3e00601000000|@1727,65665| 1727:S4|4c697374 1728:C2,232|9e13e002f606201880a1001b8bd02018c4037ffc8c21a00c8b19600cba10200290100006fa21bffcee00a014ee222004d2037ff8d2222000ac10000faa10000d7fffe02c01000000de057ffcec213ffcea213ff894100008d203e004d003e00cda03e008f40360009fc6a00088013ff8c2012000da007ffcd0213ffcd4036004133f00609202601c901020e11b3f00599a0360fc7fffde2e88013ffc80a220012280000698102001da0120047fffffd69e13e002981000088c21a00c8b19600cba10200296100006fa21bffcd822e004d4012000d422e0009010000bd201200881c260068801200c|@1729,131071|64,5,@1537 128,4,@1568 140,4,@1523 148,5,@1524 1729:S66|50415253455f44454328292e70617273654465632833296465632834297061747465726e28332961746f6d69635061747465726e283129702d7475706c6573283129 1730:O1|14 1731:C2,1256|9e13e002f606201880a1001b8bd02018d0037ffcde213ffcda213ff8d2213ff4d4022004133f00609202601c901020f51b3f00599a0360fc7fffddef88013ff480a220012280000bc4012004c4012000ae102001ee20a000ac102001ec20a00490102001ea01200881c560068801200cee00bffc8c21a00c8b19600cba10200290100006fa21bffcec05e01cec222004ea00bff8ea2220007fffdfc001000000a81000088c21a00c8b19600cba10200290100006fa21bffc273f005ba604e064e6222004e82220007fffdfb401000000e4012004e204bffce8213ffcd20460041b3f00609a0362fc7fffe54388013ffce0012008de043ffcd0213ffcd403e004133f00609202601c901020b51b3f00599a0360fc7fffddb888013ffc80a220012280000ec2012000da01200cd8037ffcd4012004d2032004d003200cda032008f40360009fc6a0000100000082100008108000a98c21a00c8088600132800004b8102004f8006000b92f20029a072001811f200024800077d0213ffc8088600132800004b8102004f8006000b92f200298072001811f20003480000980886001113f0004900223d0f40620209fc6a00001000000961020018088600122800005fa0860049610000110800005921020c5b92f600296072001921020c59010000b1b0000839a036158f40360009fc6a0000100000080a2200122800056d0213ffcd6012000808ae00132800004b8102004f802e000b92f200294072001811f200034800009808ae001113f0004900223d0f40620209fc6a0000100000092102001808ae00122800005fa0ae0049210000b1080000590100009b92f60029207200190100009921020e51b0000839a036178f40360009fc6a0000100000080a2200122800034d0213ffcc401200cee00bffcec05e004ec213ffcea05a010ea213ff8e805a014e8213ff4e605a018e6213ff0e405a01ce4213fece205a020e2213fe8e005a024e0213fe4d605a00cd405a008d205a004d005a0007fffda6c88013fe4de012000c203e004c2213ffcda03e008da213ff8d803e00cd8213ff4d603e010d6213ff0d403e014d4213fecd203e018d2213fe8c403e01cc4213fe4ee03e020ee213fe0ec03e024ec213fdcd603e0009410200592100008113f007c900222187fffc5ff88013fdc108000048c21a00888013ffc8c21a0088b1960083b100000ba07600198100006fa21bffc173f00319602e124d62320008c21a0088b1960083b100000ba07600194100006fa21bffc133f007592026274d222a0008c21a0148b196014ba10200490100006fa21bffcd822200cd4222008c4012004c4222004ae103fe1ee222000ec012010ea05bffc92100008d0012008da056018f40360009fc6a0000100000082100008880120048c21a00c8b19600cba102002a8100006fa21bffcc2252004e6012000e6252000e401200ce204bffce8213ffcd4046004133f0061920261e0901020e11b3f00599a0360fc7fffdcf088013ffc80a220012280001a8c21a00cd0213ffcd0213ff892013ff890102001da0120107ffffee988013ff88c21a00c8b19600cba102002a0100006fa21bffcde012004de242004c2012008c2242000da012014d8012000d8236000e023600490102001d601201c81c2e006880120208b19600cba102002a0100006fa21bffc9e102001de242004c2012000c2242000da01200c98102005d8236000e023600490102001d601201481c2e00688012018|@1735,131071|36,4,@1568 48,4,@1523 56,5,@1524 152,5,@1537 184,4,@1535 200,5,@1537 224,4,@1575 232,5,@1576 256,4,@1568 268,4,@1523 276,5,@1524 416,4,@224 480,4,I28 552,4,@224 616,4,I29 728,5,@1484 824,4,@1732 832,5,@1265 876,4,@799 912,4,@1702 1056,4,@1580 1068,4,@1523 1076,5,@1524 1732:O1|@1733 1733:C2,44|9e13e002f606201880a1001b8bd02018c402200c113f007c900222689a100002f403600081c6a00401000000|@1264,131071|20,4,@1734 1734:S35|203d20706174206578706563746564206166746572206e756d65726963206c6162656c 1735:S67|50415253455f44454328292e70617273654465632833296465632834297061747465726e28332961746f6d69635061747465726e2831296765744c6162656c73283229 1736:O4|@1738,-1,@359,@1737 1737:O3|1,@694,@1739 1738:S10|636f6e76537472696e67 1739:O3|3,@105,79992 1740:O4|@1741,-1,@359,@1737 1741:S7|636f6e76496e74 1742:O1|@1743 1743:C2,44|9e13e002f606201880a1001b8bd02018c402200c113f007c9002239c9a100002f403600081c6a00401000000|@1264,131071|20,4,@1744 1744:S38|5265616c20636f6e7374616e7473206e6f7420616c6c6f77656420696e207061747465726e73 1745:O4|@1746,-1,@359,@1737 1746:S8|636f6e765265616c 1747:O4|@1748,-1,@359,@1737 1748:S8|636f6e7643686172 1749:O4|@1750,-1,@359,@1737 1750:S8|636f6e76576f7264 1751:C2,460|9e13e002f606201880a1001b8bd02018de213ffcd2213ff8d6213ff49410000bd2012008d00120041b3f005b9a0361747fffde4688013ff4d0213ffcda012004f40360009fc6a00088013ffc808a20013280001384102001ee022000901000177fffee140100000080a2200122800008ec05e000901000177fffee2301000000841020051080000780a0a00180a5bffd32800003841020018410200580a0a00122800046d0213ffcc401201080a0a00132800042d0213ffcee012004ec05e010ec213ffcea05e014ea213ff8e805e018e8213ff4e605e01ce6213ff0e405e020e4213fece205e024e2213fe8d605e00cd405e008d205e004d005e0007fffd91a88013fe8d0213ffcd2012000901020a17fffa7c188013ffc133f006b920261687fffa7bd010000008c21a00c8b19600cba102002a0100006fa21bffc1f3f007d9e03e220de242000d0242004c2012008da006004da213ffcd8006008d8213ff8d600600cd6213ff4d4006010d4213ff0d2006014d2213fecd0006018d0213fe8c400601cc4213fe4ee006020ee213fe0ec006024ec213fdcd600600094102001d2012000901000107fffc49c88013fdc10800004d001200488013ffcd0012004c401201081c0a00688012020|@1753,131071|40,4,@1541 48,5,@1542 96,5,@1663 120,5,@1665 252,5,@1484 272,5,@496 280,4,@1666 288,5,@496 316,4,@1752 424,5,@1265 1752:C2,40|9e13e002f606201880a1001b8bd02018c402200cd00360049a100002f403600081c6a00401000000|@1668,131071| 1753:S41|50415253455f44454328292e70617273654465632833296765744c6f6e674e6f6e496e666978283729 1754:S7|5061747465726e 1755:O1|-5 1756:S55|50415253455f44454328292e70617273654465632833296465632834297061747465726e28332961746f6d69635061747465726e283129 1757:O1|@1758 1758:C2,240|9e13e00280a2205d3280000580a220e99010200581c3e006010000003280000580a220d99010200581c3e006010000003280000580a220d19010200581c3e006010000003280000580a2210d9010200581c3e00601000000228000159010200580a22109228000129010200580a221052280000f9010200580a221012280000c9010200580a220fd228000099010200580a220c1228000069010200580a220053280000580a220c19010200581c3e00601000000228000069010200580a220053280000580a220cd9010200581c3e0060100000032800005901020019010200581c3e0060100000081c3e00601000000|@1492,129| 1759:S14|456e64206f66207061747465726e 1760:S39|50415253455f44454328292e70617273654465632833296465632834297061747465726e283329 1761:C2,504|9e13e002f606201880a1001b8bd020188c21a0108b196010ba10200384100006fa21bffc2f3f007eae05e260ee20a000ee036004ee20a008da20a004da213ffcd0213ff88c21a03488013ff88b196034ba10200cac100006fa21bffc2b3f007faa056064ea25a000ea036034ea25a02ce8036030e825a028e603602ce625a024e4036028e425a020e2036024e225a01cc425a018c4036020c425a014e003601ce025a010d025a00cda25a008ee25a004ec213ffcde213ff8d2213ff496100017153f00859402a060113f0085900220741b3f005c9a0362e87fffde7488013ff4de012010c203e004da006008d8036000d6006018d402e00080a2a111228000039210000c9210000a90100009133f0085920260747fffc32e0100000080a2200122800031010000008c21a00c8b19600cba10200290100006fa21bffc053f00858400a1d4c4222004ee012000ee2220007fffdcc4010000009a0120104000071d01000000ec012010ea05a004e8056008e6052000e4056018e204a00080a4611122800003a0100013a010001180a4203932800013e0012004d0213ffc901000151b3f00419a0362707fffc32788013ffcd00120049a012014400009c60100000092100008d0012000de012008353f008ab406a12881c6a0048801201881c4200688012014113f007d900222a8c401200481c0a00688012014|@1824,131071|36,4,@1762 92,4,@1765 192,4,@1784 200,4,@1785 208,4,@1554 216,5,@1555 268,4,@1785 276,5,@1256 316,4,@1787 336,5,@1537 348,5,@1789 416,4,@1258 424,5,@1260 440,5,@1802 460,4,@1822 484,4,@1755 1762:C2,68|9e13e002f606201880a1001b8bd02018fa036008fa213ffcd2213ff8da213ff4d0213ff0d4213fecde213fe89a013ffc4000000c88013fe8c401200081c0a00688012018|@1764,131071|48,5,@1763 1763:C2,320|9e13e002f606201880a1001b8bd02018d0213ffcd0213ff8c4037ff8ee00a008de213ff4da213ff0ec05e010ec213fecea05e014ea213fe8e805e018e8213fe4e605e01ce6213fe0e405e020e4213fdce205e024e2213fd8d605e00cd405e008d205e004d005e0007fffd79d88013fd8e0012000de043ff8d0213ffcd2043ff0d0043ff4da03e004f40360009fc6a00088013ffc8201200cd02060009a01200cd8012000d82360048c21a00c8b19600cba10200296100006fa21bffcd401200cd422e000d2012010d222e004d0012004d6213ffcd4022000133f00609202601cd0023ffc1b3f00599a0360fc7fffda5788013ffc80a220012280000684102001da0120087fffffc09e13e002841000088c21a00c8b19600cba102002ae100006fa21bffcc425e004ec012000ec25e00090100017ea01200c81c5600688012018|@1526,131071|104,5,@1484 216,4,@1568 228,4,@1523 236,5,@1524 1764:S63|50415253455f44454328292e706172736544656328332964656328342965787072657373696f6e28322965787072657373696f6e4c696e654c697374283329 1765:C2,4004|9e13e002f606201880a1001b8bd02018c4036004ee00a008ec05e000ea00a018e805600080a5211122800003a6100016a610001480a4e0d932800053e6036004de213ffcda213ff8d0213ff4901000021b3f00419a0362707fffc27588013ff4e6012004e404e004e204a008e0046000de04a018c203e00080a06111228000039a1000109a10000180a360dd228000179a1020018c21a00c8b19600cba10200290100006fa21bffcd804e010d8222004d6012000d62220007fffdbe401000000e4213ffcfa04e00cfa213ff8d0213ff49a012008400003bb88013ff49a10000810800007d8012010d0213ffcd0213ff8d0213ff488013ff4d8012010d6032004d402e008d202a000d002e018c402200080a0a11122800003ae100009ae10000280a5e0dd3280000bda213ffcda213ffc9010000b1b3f00419a0362707fffc23c88013ffcae1000081080000ad00120009210000b901021751b3f00559a0360547fffd5ab88013ffcae100008d0012000de012018353f007ab406a36481c6a0048801201ce404e008e204a000e004e018c204200080a0611122800003981000119810000180a320d1328000d2d8036004de213ffcda213ff8d0213ff4901000131b3f00419a0362707fffc21988013ff4da012004d4036004133f00609202601c901020d51b3f00599a0360fc7fffd9ae0100000080a2200122800007d8012004113f007b9002210cd801200881c320068801200cd6032004d402e010d4213ffcd202e014d2213ff8d002e018d0213ff4c402e01cc4213ff0ee02e020ee213fecec02e024ec213fe8ea02e000e802e004e602e008e402e00c961000129410001392100014901000157fffd6b488013fe8e2012004a01000088c21a00c8b19600cba10200290100006fa21bffcde046020de222004c2012000c22220007fffdb6b01000000e0213ffc92100008d004600cda046008f40360009fc6a00088013ffcda012008d0213ffcd4036004133f00609202601c901020e11b3f00599a0360fc7fffd97188013ffc80a2200122800024d801200cd601200c8c21a00c8b19600cba10200290100006fa21bffcd402e014d4222004d2012008d22220007fffdb4b01000000fa02e004fa213ffcfa02e00cfa213ff8d0213ff49a0120104000035288013ff48c21a00c8b19600cba10200284100006fa21bffcd020a004ee01200cee20a000901000027ffff5b401000000981000081080003fd6012018d4032004133f00609202601c901020e51b3f00599a0360fc7fffd9440100000080a220012280002ed80120008c21a00c8b19600cba10200296100006fa21bffcd4012004d422e004d2012000d222e000d001200cc402201c8c21a00c8b19600cba10200290100006fa21bffcc4222004ee012008ee2220007fffdb1501000000ec01200cd6213ffc94100008921020e5d005a00cda05a018f40360009fc6a00088013ffc8c21a00c8b19600cba102002aa100006fa21bffcd0256004e8012000e82560009010001540000341010000009810000810800005d0213ffcd0213ffc88013ffcd0213ffcd0213ff888013ff8d6012018d402e004d202a008d0026000c402a018ee00a00080a5e11122800003ac100008ac10001780a5a0d53280000bd8213ffcd8213ffc9010000a1b3f00419a0362707fffc15f88013ffcac1000081080000ad00120009210000a901020a51b3f00559a0360547fffd4ce88013ffcac100008d0012000ec01202081c5a00688012024d6032008d402e000d2032018ec02600080a5a11122800003a810000aa810001680a520e932800053e8036004de213ffcda213ff8d0213ff49010000c1b3f00419a0362707fffc13e88013ff4ea012004d4056004133f00609202601c901020ed1b3f00599a0360fc7fffd8d30100000080a2200122800007e8012004113f007b9002210ce801200881c520068801200cfa052004fa213ffc9a0120084000030688013ffc8c21a0088b1960083b100000ba076001a6100006fa21bffc253f000fa404a0cce424e0008c21a0148b196014ba102004a2100006fa21bffcd024600ce6246008a0102005e02460049e102021de246000c2012008da006004d8036008d6032000d4036018d202a00080a26111228000039010000b9010000980a220ed3280000ae2213ffce2213ffc9010000d1b3f00419a0362707fffc10188013ffc10800009d00120009210000d901021f51b3f00559a0360547fffd47188013ffcd0012000c401201081c0a00688012014e2052008c2046000d4052018ec02a00080a5a11122800006ac10000882100008901000161080000580a2204d901000018210001680a2204d328000abd0036004de213ffcda213ff8c2213ff4901000141b3f00419a0362707fffc0dd88013ff4ea012004d0213ffcd0213ff8d0213ff4e805600cd0213ff0d0213fecd0213fe892013fe8901020017fffd06088013fe88c21a0108b196010ba102003a6100006fa21bffc253f0084a404a088e424e000e2012008e224e008e0052004e024e0049e01200cc2012004c223e0009a01200ce62360049801200cd6052008d62320088c21a0108b196010ba10200394100006fa21bffcd201200cd222a000d0012010d022a004c4012014c422a0088c21a00c8b19600cba10200290100006fa21bffc2f3f0084ae05e100ee222004ec012018ec2220007fffda2d01000000ea01201cd4213ffc921000089010000ada05602cf40360009fc6a00088013ffce8012020e6052004e404e008e204a000e004e018de04200080a3e11122800003821000118210000f80a060413280000bd0213ffcd0213ffc901000131b3f00419a0362707fffc08b88013ffc821000081080000bc201202492100013113f004c900221241b3f00559a0360547fffd3f988013ffc82100008c20120248c21a00c8b19600cba10200290100006fa21bffcda006028da222004d8012020d82220007fffd9fb0100000094100008921020e5d0012004da006018f40360009fc6a00001000000d6012024d402e004d202a008c4026000ee02a018ec05e00080a5a11122800003aa100002aa10001680a560293280000bd0213ffcd0213ffc9010000a1b3f00419a0362707fffc05a88013ffcaa1000081080000bea0120289210000a113f004c9002213c1b3f00559a0360547fffd3c888013ffcaa100008ea012028d6056004153f00849402a148133f00609202601cd00120241b3f005c9a0362e87fffdb5d0100000094102001d2012000d0012004de01202c353f0084b406a16881c6a00488012030ec022008ee05a000ea022018c405600080a0a11122800003901000179010000280a2205d32800003ae102001ae10200580a5e0012280000eac102001de213ffcda213ff8c2213ff4ee213ff0d00360041b3f00419a0362707fffc02488013ff0ac10000810800008ee012008de213ffcda213ff8c2213ff4ee213ff088013ff0ee012008ec05e004ea05a008e8056000e605a018e404e00080a4a11122800003a2100014a2100012e2213ffc133f00849202620c901000117fffbfee88013ffc80a2200122800031e2012000e201200ce004600cde012008de213ffc033f00848200620cc2213ff8da012004da213ff4d6046004d4042008d2042004d00420007ffffb6488013ff48c21a0088b1960083b100000ba07600198100006fa21bffc173f00319602e124d62320008c21a0088b1960083b100000ba07600194100006fa21bffc133f007592026274d222a000841000088c21a0148b196014ba10200490100006fa21bffcd822200cd4222008c4222004ae103fe1ee222000ec01201081c5a0068801201480a460ad3280001480a460fde001200cd00420041b3f00419a0362707fffbfd101000000de01200cd203e004d00120081b3f00609a0362fc7fffdee801000000de012010353f0084b406a27c81c6a004880120143280003680a46101e001200cde042004c203e010c2213ffcda03e014da213ff8d803e018d8213ff4d603e01cd6213ff0d403e020d4213fecd203e024d2213fe8d603e00cd403e008d203e004d003e0007fffd3ec88013fe8d0213ffcd00420041b3f00419a0362707fffbfa988013ffc8c21a0088b1960083b100000ba07600190100006fa21bffc053f00318400a124c4222000ae1000088c21a0148b196014ba10200490100006fa21bffc2d3f007cac05a2e0ec22200cea012000ea222008ee222004a8103fd9e8222000e601201481c4e006880120183280003680a46105e001200cde042004c203e010c2213ffcda03e014da213ff8d803e018d8213ff4d603e01cd6213ff0d403e020d4213fecd203e024d2213fe8d603e00cd403e008d203e004d003e0007fffd3b688013fe8d0213ffcd00420041b3f00419a0362707fffbf7388013ffc8c21a0088b1960083b100000ba07600190100006fa21bffc053f00318400a124c4222000ae1000088c21a0148b196014ba10200490100006fa21bffc2d3f007cac05a328ec22200cea012000ea222008ee222004a8103fd9e8222000e601201481c4e006880120183280003680a46109e001200cde042004c203e010c2213ffcda03e014da213ff8d803e018d8213ff4d603e01cd6213ff0d403e020d4213fecd203e024d2213fe8d603e00cd403e008d203e004d003e0007fffd38088013fe8d0213ffcd00420041b3f00419a0362707fffbf3d88013ffc8c21a0088b1960083b100000ba07600190100006fa21bffc053f00318400a124c4222000ae1000088c21a0148b196014ba10200490100006fa21bffc2d3f007cac05a3ccec22200cea012000ea222008ee222004a8103fd9e8222000e601201481c4e006880120183280003680a4610de001200cde042004c203e010c2213ffcda03e014da213ff8d803e018d8213ff4d603e01cd6213ff0d403e020d4213fecd203e024d2213fe8d603e00cd403e008d203e004d003e0007fffd34a88013fe8d0213ffcd00420041b3f00419a0362707fffbf0788013ffc8c21a0088b1960083b100000ba07600190100006fa21bffc053f00318400a124c4222000ae1000088c21a0148b196014ba10200490100006fa21bffc2d3f007dac05a014ec22200cea012000ea222008ee222004a8103fd9e8222000e601201481c4e0068801201832800036e001200ce001200cde042004c203e010c2213ffcda03e014da213ff8d803e018d8213ff4d603e01cd6213ff0d403e020d4213fecd203e024d2213fe8d603e00cd403e008d203e004d003e0007fffd31488013fe8d0213ffcd00420041b3f00419a0362707fffbed188013ffc8c21a0088b1960083b100000ba07600190100006fa21bffc053f00318400a124c4222000ae1000088c21a0148b196014ba10200490100006fa21bffc2d3f007cac05a3f0ec22200cea012000ea222008ee222004a8103fd9e8222000e601201481c4e00688012018fa042004fa213ffcd2013ffc113f0056900220fc1b3f00559a0360547fffd22688013ffcd00120001b3f00419a0362707fffbea901000000113f007d900222a8de01201481c3e00688012018|@1783,131071|80,4,@1258 88,5,@1260 184,5,@1537 212,5,@1766 308,4,@1258 316,5,@1260 344,4,@1470 352,5,@1472 372,4,@1726 448,4,@1258 456,5,@1260 472,4,@1568 484,4,@1523 492,5,@1524 512,4,@1730 616,5,@1484 668,5,@1537 716,4,@1568 728,4,@1523 736,5,@1524 796,5,@1537 828,5,@1767 872,5,@1704 896,4,@1568 908,4,@1523 916,5,@1524 1012,5,@1537 1092,5,@1768 1192,4,@1258 1200,5,@1260 1228,4,@1470 1236,5,@1472 1324,4,@1258 1332,5,@1260 1348,4,@1568 1360,4,@1523 1368,5,@1524 1388,4,@1730 1420,5,@1770 1452,4,@375 1568,4,@1258 1576,5,@1260 1600,4,@1470 1608,5,@1472 1712,4,@1258 1720,5,@1260 1768,5,@1450 1796,4,@1773 1920,4,@1774 1940,5,@1537 2040,4,@1258 2048,5,@1260 2072,4,@1356 2080,4,@1470 2088,5,@1472 2140,5,@1537 2236,4,@1258 2244,5,@1260 2268,4,@1358 2276,4,@1470 2284,5,@1472 2304,4,@1776 2312,4,@1568 2324,4,@1554 2332,5,@1555 2356,4,@1777 2452,4,@1258 2460,5,@1260 2544,4,@1779 2556,5,@1256 2592,4,@1779 2628,5,@1751 2660,4,@799 2696,4,@1702 2784,4,@1258 2792,5,@1260 2812,4,@1575 2820,5,@1576 2832,4,@1781 2928,5,@1473 2944,4,@1258 2952,5,@1260 2984,4,@799 3020,4,@1736 3144,5,@1473 3160,4,@1258 3168,5,@1260 3200,4,@799 3236,4,@1740 3360,5,@1473 3376,4,@1258 3384,5,@1260 3416,4,@799 3452,4,@1745 3576,5,@1473 3592,4,@1258 3600,5,@1260 3632,4,@799 3668,4,@1749 3792,5,@1473 3808,4,@1258 3816,5,@1260 3848,4,@799 3884,4,@1747 3940,4,@1477 3948,4,@1470 3956,5,@1472 3968,4,@1258 3976,5,@1260 3984,4,@1755 1766:C2,168|9e13e002f606201880a1001b8bd02018c4037ffcde213ffcda213ff8d2037fecd0037ff0da00a008f40360009fc6a00088013ff8ee012000d0213ffcd405fff4133f00609202601c901020e11b3f00599a0360fc7fffd62488013ffc80a2200122800006ac102001da0120047fffffe69e13e002ac1000088c21a00c8b19600cba102002aa100006fa21bffcec256004e8012000e825600090100015e601200881c4e0068801200c|@1526,131071|64,4,@1568 76,4,@1523 84,5,@1524 1767:C2,168|9e13e002f606201880a1001b8bd02018c4037ffcde213ffcda213ff8d2037fe4d0037fe8da00a008f40360009fc6a00088013ff8ee012000d0213ffcd405ffec133f00609202601c901020e11b3f00599a0360fc7fffd5f388013ffc80a2200122800006ac102001da0120047fffffe69e13e002ac1000088c21a00c8b19600cba102002aa100006fa21bffcec256004e8012000e825600090100015e601200881c4e0068801200c|@1526,131071|64,4,@1568 76,4,@1523 84,5,@1524 1768:C2,48|9e13e002841000088c21a00c8b19600cba10200290100006fa21bffcc422200484103fe9c422200081c3e00601000000|@1769,65665| 1769:S6|457870536571 1770:C2,152|9e13e002f606201880a1001b8bd02018de213ffcda213ff8901020014000002688013ff8c4012000d0213ffcd400bff4133f00609202601c901020e11b3f00599a0360fc7fffd5af88013ffc80a2200122800006ae102001da0120047fffffea9e13e002ae1000088c21a00c8b19600cba102002ac100006fa21bffcee25a004ea012000ea25a00090100016e801200881c520068801200c|@1526,131071|28,5,@1771 48,4,@1568 60,4,@1523 68,5,@1524 1771:C2,348|9e13e002f606201880a1001b8bd020188c21a00c8b19600cba10200290100006fa21bffc053f005b8400a064c4222004ee037ff8ee222000ac10000faa10000d7fffd76c01000000de057ffcec213ffcea213ff8d203e0041b3f00609a0362fc7fffdcfb88013ff8c2012000da007ffcd8036004d6032008d402e000d2032018c402600080a0a11122800003ae10000aae10000280a5e0b53280000ad0213ffcd0213ffc9010000c1b3f00419a0362707fffbdc988013ffc10800009ee0120049210000c901020f51b3f00559a0360547fffd13988013ffcee012004ec05fffc8c21a00c8b19600cba10200290100006fa21bffcea05a024ea222004e805fff8e82220007fffd73b01000000e6012004e404fffc92100008d004a00cda04a008f40360009fc6a00001000000a21000088c21a00c8b19600cba10200290100006fa21bffce2222004e0012000e0222000de01200881c3e0068801200c|@1772,131071|36,4,@1535 64,5,@1537 88,4,@1575 96,5,@1576 168,4,@1258 176,5,@1260 200,4,@1470 208,5,@1472 260,5,@1537 1772:S73|50415253455f44454328292e706172736544656328332964656328342965787072657373696f6e28322961746f6d696345787072657373696f6e2831296c6162656c6c65642d283129 1773:C2,92|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d0213ff4da036008f40360009fc6a00088013ff480a2200132800009c4012008c4012004d0012000da00a004de012008f403600081c6a0048801200c81c0a0068801200c|@1463,131071| 1774:O1|@1775 1775:C2,36|9e13e00280a2204132800005901020019010200581c3e0060100000081c3e00601000000|@1255,129| 1776:S21|456e64206f66206c65742065787072657373696f6e 1777:C2,92|9e13e0028c21a0088b1960083b100000ba07600184100006fa21bffcae102001ee20a000ae1000088c21a0188b196018ba10200590100006fa21bffcc4222010ee22200cd2222008d422200494102029d422200081c3e00601000000|@1778,98439| 1778:S34|50415253455f5452454528292e6d6b4c6f63616c4465636c61726174696f6e283329 1779:O1|@1780 1780:C2,76|9e13e00280a220b53280000580a220c19010200581c3e006010000003280000580a220059010200581c3e0060100000032800005901020019010200581c3e0060100000081c3e00601000000|@1492,129| 1781:C2,348|9e13e002f606201880a1001b8bd02018d0213ffcd0213ff8de213ff4d0213ff084102001c4213fecae013ff8ee213fe89610200194102001130000279202603d113f000f900220cc7fffd3e288013fe88c21a00c8b19600cba10200290100006fa21bffcec012008ec222000ea01200cea2220047fffd42001000000d0213ffcd0213ff8d0213ff494013ff892100008d00120007fffdcd288013ff48c21a00c8b19600cba102002a8100006fa21bffce6012004e6252000e4012008e42520048c21a00c8b19600cba102002a2100006fa21bffca0102001e0246004e824600092102001901000117fffdf70010000009e1000088c21a00c8b19600cba10200290100006fa21bffcc2012000c2222004de2220009810000f7fffe1d301000000961000088c21a0148b196014ba10200490100006fa21bffcd822200cd6222008d401200cd422200492103fcdd2222000c401201081c0a0068801201c|@1782,131071|56,4,9999 64,4,@375 72,5,@1515 116,5,@1517 148,5,@1583 232,5,@1603 280,5,@1630 1782:S26|50415253455f5452454528292e6d6b53656c6563746f72283129 1783:S61|50415253455f44454328292e706172736544656328332964656328342965787072657373696f6e28322961746f6d696345787072657373696f6e283129 1784:S10|45787072657373696f6e 1785:O1|@1786 1786:C2,316|9e13e00280a220ad228000309010200580a2210d2280002d9010200580a221092280002a9010200580a22105228000279010200580a22101228000249010200580a220fd228000219010200580a220c12280001e9010200580a220052280001b9010200580a220b5228000189010200580a220c1228000159010200580a22005228000129010200580a220e92280000f9010200580a220d12280000c9010200580a220d9228000099010200580a2205d228000069010200580a2204d3280000580a220319010200581c3e006010000003280000580a220199010200581c3e006010000003280000580a220819010200581c3e006010000003280000580a2203d9010200581c3e006010000003280000580a220699010200581c3e0060100000032800005901020019010200581c3e0060100000081c3e00601000000|@1492,129| 1787:O1|@1788 1788:C2,36|9e13e00280a2203932800005901020019010200581c3e0060100000081c3e00601000000|@1255,129| 1789:C2,232|9e13e002f606201880a1001b8bd02018841000088c21a00c8b19600cba10200290100006fa21bffc2f3f0085ae05e320ee222004c4222000ac10000faa10000da81000027fffd59301000000ec213ffcea213ff8e8213ff49a1000154000003c88013ff4e6012004e404e000e204a004e0046008de042000c2046018da00600080a36111228000039810000f9810000d80a3206532800013d8012008d0213ffc901000111b3f00419a0362707fffbbf288013ffcd0012004da0120087fffffd29e13e00292100008d0012000de01200c353f008ab406a07881c6a0048801201081c320068801200c|@1821,131071|40,4,@1790 68,5,@1537 92,5,@1792 164,4,@1258 172,5,@1260 208,4,@1819 1790:O1|@1791 1791:C2,36|9e13e00280a2206532800005901020019010200581c3e0060100000081c3e00601000000|@1255,129| 1792:C2,232|9e13e002f606201880a1001b8bd02018841000088c21a00c8b19600cba10200290100006fa21bffc2f3f0086ae05e06cee222004c4222000ac10000faa10000da81000027fffd54001000000ec213ffcea213ff8e8213ff49a1000154000003c88013ff4e6012004e404e000e204a004e0046008de042000c2046018da00600080a36111228000039810000f9810000d80a3201132800013d8012008d0213ffc901000111b3f00419a0362707fffbb9f88013ffcd0012004da0120087fffffd29e13e00292100008d0012000de01200c353f0089b406a3c081c6a0048801201081c320068801200c|@1818,131071|40,4,@1793 68,5,@1537 92,5,@1795 164,4,@1258 172,5,@1260 208,4,@1816 1793:O1|@1794 1794:C2,36|9e13e00280a2201132800005901020019010200581c3e0060100000081c3e00601000000|@1255,129| 1795:C2,1824|9e13e002f606201880a1001b8bd02018c4036000ee00a004ec05e008ea05a000e805e018e605200080a4e11122800003a4100015a410001380a4a03d3280007e80a4a081de213ffcda213ff8d0213ff4901000171b3f00419a0362707fffbb6088013ff4e4012004e204a0008c21a00c8b19600cba10200290100006fa21bffce004600ce0222004de012000de2220007fffd4da0100000092100008d004bffc9a100011f40360009fc6a00001000000c2012004da006000d8036004d6032008d402e000d2032018c402600080a0a11122800003ae10000aae10000280a5e0713280000bd0213ffcd0213ffc9010000c1b3f00419a0362707fffbb3988013ffcae1000081080000bee0120089210000c113f004b900223d01b3f00559a0360547fffcea788013ffcae100008ee012008ec05e0008c21a00c8b19600cba10200290100006fa21bffcea05a008ea222004e8012004e82220007fffd4a801000000e601200892100008d004fffcda04e000f40360009fc6a00001000000e4012008e204a000e0046004de042008c203e000da042018d803600080a3211122800003961000019610000c80a2e0253280000bd0213ffcd0213ffc901000101b3f00419a0362707fffbb0688013ffc961000081080000bd601200c92100010113f004c900221781b3f00559a0360547fffce7488013ffc96100008d601200cd2012008d002fffcda02e000f40360009fc6a0000100000094100008d2012000d0012004de012010353f0087b406a3f081c6a004880120143280005180a4a019e4036000de213ffcda213ff8d0213ff4d004a0041b3f00419a0362707fffbae188013ff48c21a00c8b19600cba10200290100006fa21bffc233f0088a2046064e2222004e0012000e02220007fffd45c01000000de01200492100008d003fffcda03e000f40360009fc6a00001000000c2012004da006000d8036004d6032008d402e000d2032018c402600080a0a11122800003ae10000aae10000280a5e02132800016d8213ffcd0213ffc9010000c1b3f00419a0362707fffbaba88013ffcee012008d2012004d005fffcda05e000f40360009fc6a0000100000092100008d0012000de01200c353f0088b406a0ac81c6a004880120109210000c113f004c900221601b3f00559a0360547fffce1d88013ffcd00120001b3f00419a0362707fffbaa001000000113f007d900222a8ee01200c81c5e006880120103280004880a4a069e4036000de213ffcda213ff8d0213ff4d004a0041b3f00419a0362707fffba9088013ff4e2012004e00460008c21a00c8b19600cba10200290100006fa21bffcde042010de222004c2012000c22220007fffd40a0100000092100008d0047ffc9a100010f40360009fc6a00001000000da012004d8036000d6032004d402e008d202a000c402e018ee00a00080a5e11122800003ac100009ac10001780a5a0593280000bd0213ffcd0213ffc9010000b1b3f00419a0362707fffba6988013ffcac1000081080000bd00120049210000b113f004c900220001b3f00559a0360547fffcdd788013ffcac100008d0012004da012008400000fd0100000092100008d0012000de01200c353f0089b406a12881c6a0048801201032800017e4036000e4036000de213ffcda213ff8d0213ff4d004a0041b3f00419a0362707fffba4888013ff4e2012004d2012000d0047ffcda046000f40360009fc6a00001000000de012008353f0089b406a19881c6a0048801200ce204a004e0046008c2042000d8046018d603200080a2e11122800003941000019410000b80a2a0313280001e94100008de213ffcda213ff8d0213ff4901000111b3f00419a0362707fffba2888013ff48c21a00c8b19600cba10200290100006fa21bffc153f00419402a1b8d4222004d2012000d22220007fffd3a301000000da012004400000bc01000000de012008353f0089b406a1f481c6a0048801200c8c21a00c8b19600cba10200290100006fa21bffcd204a018d2222004d4222000aa10000fa610000d7fffd38f01000000de04fffcea213ffce6213ff8d4213ff4033f00898200624cc2213ff01b3f00849a03620cda213fecd0213fe8d604fff8d403e008d203e004d003e000da04a014f40360009fc6a00088013fe8981000088c21a00c8b19600cba10200290100006fa21bffc173f00869602e06cd6222004d4012000d42220007fffd36f01000000d2012004d0213ffcfa027ffcfa213ff888013ff8d0012000c401200cee00a000d8213ffcfa022008fa213ff8d405e004133f00609202601c901020bd1b3f00599a0360fc7fffd17388013ff880a2200122800020d00120048c21a00c8b19600cba10200290100006fa21bffc2d3f0060ac05a2b4ec222004ea01200cea2220007fffd34d01000000e8012014e6052000d4012000d204e0041b3f005d9a0360547fffd5370100000092100008d00120047fffef36010000009810000888012008f606201880a1001b8bd0201830bfffd2ec01201881c5a0068801201c|@1815,131071|84,4,@1258 92,5,@1260 144,5,@1537 240,4,@1258 248,5,@1260 272,4,@1329 280,4,@1470 288,5,@1472 344,5,@1537 444,4,@1258 452,5,@1260 476,4,@1363 484,4,@1470 492,5,@1472 548,4,@1796 592,4,@1258 600,5,@1260 628,4,@1798 648,5,@1537 748,4,@1258 756,5,@1260 804,4,@1800 824,4,@1361 832,4,@1470 840,5,@1472 852,4,@1258 860,5,@1260 868,4,@1755 916,4,@1258 924,5,@1260 976,5,@1537 1072,4,@1258 1080,5,@1260 1104,4,@1333 1112,4,@1470 1120,5,@1472 1140,5,@1802 1160,4,@1807 1204,4,@1258 1212,5,@1260 1252,4,@1809 1332,4,@1258 1340,5,@1260 1368,4,@1253 1388,5,@1537 1400,5,@1802 1412,4,@1811 1468,5,@1537 1492,4,@1813 1504,4,@1779 1576,4,@1793 1596,5,@1537 1652,4,@1568 1664,4,@1523 1672,5,@1524 1712,4,@1573 1732,5,@1537 1756,4,@1557 1764,5,@1559 1780,5,@1714 1796:C2,56|9e13e002841000088c21a0148b196014ba10200490100006fa21bffcd222200cd4222008c422200494102009d422200081c3e00601000000|@1797,65671| 1797:S22|50415253455f5452454528292e6d6b436f6e64283329 1798:O1|@1799 1799:C2,36|9e13e00280a2202132800005901020019010200581c3e0060100000081c3e00601000000|@1255,129| 1800:C2,52|9e13e002841000088c21a0108b196010ba10200390100006fa21bffcc4222008d22220049210203dd222200081c3e00601000000|@1801,65667| 1801:S23|50415253455f5452454528292e6d6b5768696c65283229 1802:C2,856|9e13e002f606201880a1001b8bd02018c4036000de213ffcda213ff8d0213ff4d600a004153f00389402a03092100008113f007d900222f01b3f005c9a0362e87fffd46688013ff4ee012004ec05e000ea05a004e8056010e8213ffce6056014e6213ff8e4056018e4213ff4e205601ce2213ff0e0056020e0213fecde056024de213fe8d605600cd4056008d2056004d00560007fffcdfb88013fe8821000088c21a00c8b19600cba10200290100006fa21bffc1b3f00899a036090da222004d8012000d82220007fffd2b201000000d6012004d402e000c2213ffcd202a004c402a03894100008d002fffc9a100002f40360009fc6a00088013ffcee012008ec05e000ea05a004e8056008e6052000e4056018e204a00080a4611122800003a0100013a010001180a420b93280000bd0213ffcd0213ffc901000151b3f00419a0362707fffb90c88013ffca01000081080001e8c21a00c92100015113f004c900223d81b3f00559a0360547fffcc7a88013ffce001200cde042000c203e004da006008d8036000d6006018d402e00080a2a111228000039210000c9210000a80a260b532800008a0102001901000011b3f00419a0362707fffb8ef01000000a01000088c21a00c8b19600cba10200290100006fa21bffc133f006b9202623cd2222004c4012008c42220007fffd26901000000ee01200c92100008d005fffcda05e000f40360009fc6a000010000008c21a0088b1960083b100000ba076001ac100006fa21bffc2b3f0031aa056124ea25a0008c21a0088b1960083b100000ba076001a8100006fa21bffc273f0031a604e124e62520008c21a0188b196018ba102005a4100006fa21bffce824a010ec24a00ce2012000e224a008e0012004e024a004d024a0008c21a00c8b19600cba1020029e100006fa21bffce423e00482103fd5c223e000da01200cd8036000de213ffcd4032004133f00609202601c901020b11b3f00599a0360fc7fffd04888013ffc80a220012280000796102001d001200cda0120107fffff479e13e002961000088c21a00c8b19600cba10200294100006fa21bffcd622a004d2012000d222a000d0012010c4022000d4213ffcd600a004153f00899402a0d8133f00609202601cd001200c1b3f005c9a0362e87fffd3a688013ffcd0012000ee01201881c5e0068801201c|@1806,131071|36,4,@1111 48,4,@1757 56,4,@1554 64,5,@1555 148,5,@1484 180,4,@1803 200,5,@1537 316,4,@1258 324,5,@1260 348,4,@1408 356,4,@1470 364,5,@1472 432,4,@1258 440,5,@1260 472,4,@1670 492,5,@1537 552,4,@799 588,4,@799 696,4,@1568 708,4,@1523 716,5,@1524 804,4,@1805 812,4,@1568 824,4,@1554 832,5,@1555 1803:O1|@1804 1804:C2,36|9e13e00280a220b932800005901020019010200581c3e0060100000081c3e00601000000|@1255,129| 1805:S12|456e64206f66206d61746368 1806:S50|50415253455f44454328292e706172736544656328332964656328342965787072657373696f6e2832296d61746368283129 1807:C2,52|9e13e002841000088c21a0108b196010ba10200390100006fa21bffcd2222008c422200492103ff9d222200081c3e00601000000|@1808,65667| 1808:S22|50415253455f5452454528292e6d6b43617365283229 1809:C2,48|9e13e002841000088c21a00c8b19600cba10200290100006fa21bffcc422200484102031c422200081c3e00601000000|@1810,65665| 1810:S5|5261697365 1811:C2,48|9e13e002841000088c21a00c8b19600cba10200290100006fa21bffcc422200484102019c422200081c3e00601000000|@1812,65665| 1812:S2|466e 1813:O1|@1814 1814:C2,272|9e13e00280a220ad3280000580a2210d9010200581c3e00601000000228000159010200580a22109228000129010200580a221052280000f9010200580a221012280000c9010200580a220fd228000099010200580a220c1228000069010200580a220053280000580a220b59010200581c3e00601000000228000099010200580a220c1228000069010200580a220053280000580a220e99010200581c3e006010000003280000580a220d19010200581c3e006010000003280000580a220d99010200581c3e006010000003280000580a2205d9010200581c3e006010000003280000580a2204d9010200581c3e0060100000032800005901020019010200581c3e0060100000081c3e00601000000|@1492,129| 1815:S55|50415253455f44454328292e706172736544656328332964656328342965787072657373696f6e2832296b6579576f7264457870283129 1816:C2,52|9e13e002841000088c21a0108b196010ba10200390100006fa21bffcd2222008c422200492103ffdd222200081c3e00601000000|@1817,65667| 1817:S25|50415253455f5452454528292e6d6b416e64616c736f283229 1818:S57|50415253455f44454328292e706172736544656328332964656328342965787072657373696f6e2832297061727365416e64616c736f283129 1819:C2,52|9e13e002841000088c21a0108b196010ba10200390100006fa21bffcd2222008c422200492103fd1d222200081c3e00601000000|@1820,65667| 1820:S24|50415253455f5452454528292e6d6b4f72656c7365283229 1821:S56|50415253455f44454328292e706172736544656328332964656328342965787072657373696f6e28322970617273654f72656c7365283129 1822:C2,52|9e13e002841000088c21a0108b196010ba10200390100006fa21bffcd2222008c42220049210201dd222200081c3e00601000000|@1823,65667| 1823:S28|50415253455f5452454528292e6d6b48616e646c6554726565283229 1824:S42|50415253455f44454328292e706172736544656328332964656328342965787072657373696f6e283229 1825:C2,304|9e13e002f606201880a1001b8bd02018d0037ff0c4022008ee00a000ec022018ea05a00080a5611122800003a8100017a8100015de213ffcda213ff8133f00849202620c901000147fffb70088013ff880a220012280003490102001e8012000d4053ff0d2053fec113f00849002220c1b3f005b9a0361747fffd0ce01000000d0213ffcd0213ff88c21a00888013ff88b1960083b100000ba076001a6100006fa21bffca4102001e424e000a2012000d0246000a0012000e62420048c21a00c8b19600cba1020029e100006fa21bffcc2012000c223e000da012004da23e004de213ffc90102001da0120087fffffc588013ffc8c21a00c8b19600cba10200298100006fa21bffcd0232004d6012000d62320009010000cd401201081c2a00688012014e801200481c5200688012008|@1826,131071|60,4,@1779 72,5,@1256 104,4,@1779 112,4,@1541 120,5,@1542 1826:S36|50415253455f44454328292e706172736544656328332964656328342976617273283129 1827:C2,84|9e13e0028c21a0088b1960083b100000ba07600184100006fa21bffcae102001ee20a000ae1000088c21a0108b196010ba10200390100006fa21bffcc4222008ee2220048410202dc422200081c3e00601000000|@1828,98433| 1828:S26|50415253455f5452454528292e6d6b4f70656e54726565283129 1829:C2,96|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d0213ff4da036008f40360009fc6a00088013ff4808a200132800006c4012004d0022000c401200881c0a0068801200cd0012000da00a004de012008f403600081c6a0048801200c|@1830,131071| 1830:S39|50415253455f44454328292e70617273654465632833296465632834296e6577456e762d283129 1831:C2,688|9e13e002f606201880a1001b8bd02018c4037ff0ee00a008ec05e000ea00a018e805600080a5211122800003a6100016a610001480a4e06d32800003a6102001a6102005de213ffcda213ff8d0213ff4e6213ff088013ff0e6012008de04fff0da03e008d0036000c403e018ee00a00080a5e11122800003ac100008ac10001780a5a06d3280000bec0120009010000f1b3f00419a0362707fffb65c01000000f606201880a1001b8bd0201830bfffeb80a5a00122800012ea03e010d00120049a1000137fffffd09e13e0028c21a00c8b19600cba102002aa100006fa21bffcd0256004a8102001e825600090100015e601200c81c4e00688012010ea213ffce803e014e8213ff8c4213ff4e403e01ce4213ff0e203e020e2213fece003e024e0213fe8d603e00c9410000dd203e004d003e0007fffcaf888013fe89e1000088c21a00c8b19600cba10200290100006fa21bffc033f005b82006064c2222004da012004da2220009810000f7fffcfae01000000d6012008d8213ffc94100008d202fff0d002ffbcda02ffe4f40360009fc6a00088013ffcd401200cd202bff0c4026008ee00a000ec026018ea05a00080a5611122800003a8100017a810001580a520b53280000bd0213ffcd0213ffc901000091b3f00419a0362707fffb60b88013ffca810000810800009e8012010901020f51b3f00559a0360547fffc97b88013ffca8100008e8012010d201200cd0053fbcda053fe0f40360009fc6a00001000000d401200492100008d00120004000002701000000e6012010d0213ffcd404fff0133f00609202601c9010200d1b3f00599a0360fc7fffcd8a88013ffc80a2200122800007a4102001d0012010da0120147fffff649e13e002a41000088c21a00c8b19600cba102002a2100006fa21bffce4246004e0012000e024600090100011de01201881c3e0068801201c|@1834,131071|144,4,@1258 152,5,@1260 308,5,@1484 340,4,@1535 364,5,@1537 468,4,@1258 476,5,@1260 500,4,@1470 508,5,@1472 560,5,@1832 580,4,@1568 592,4,@1523 600,5,@1524 1832:C2,48|9e13e0028c21a0108b196010ba10200384100006fa21bffcd420a008d220a004d020a0009010000281c3e00601000000|@1833,65671| 1833:S28|50415253455f5452454528292e6d6b56616c42696e64696e67283329 1834:S36|50415253455f44454328292e706172736544656328332964656328342976616c42283129 1835:C2,92|9e13e0028c21a0088b1960083b100000ba07600184100006fa21bffcae102001ee20a000ae1000088c21a0188b196018ba10200590100006fa21bffcc4222010d422200cd2222008ee22200494103fc5d422200081c3e00601000000|@1836,98439| 1836:S32|50415253455f5452454528292e6d6b56616c4465636c61726174696f6e283329 1837:C2,96|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d0213ff4da036008f40360009fc6a00088013ff4808a200132800006c4012004d0022000c401200881c0a0068801200cd0012000da00a004de012008f403600081c6a0048801200c|@1830,131071| 1838:C2,212|9e13e002f606201880a1001b8bd020188c21a00c8b19600cba10200290100006fa21bffc053f00688400a348c4222004ee037fecee222000ac10000faa10000d7fffced801000000ec213ffcea213ff89a1000154000002788013ff8e8012000e6053ff8d0213ffcd404e00c133f00609202601c9010200d1b3f00599a0360fc7fffccdf88013ffc80a2200122800006a4102001da0120047fffffdb9e13e002a41000088c21a00c8b19600cba102002a2100006fa21bffce4246004e0012000e024600090100011de01200881c3e0068801200c|@1655,131071|36,4,@1652 64,5,@1537 84,5,@1839 108,4,@1568 120,4,@1523 128,5,@1524 1839:C2,240|9e13e002f606201880a1001b8bd02018da213ffcd0213ff8de213ff4901020019a013ffc4000003a88013ff48c21a0088b1960083b100000ba07600184100006fa21bffcae102001ee20a0008c21a0088b1960083b100000ba076001ac100006fa21bffc2b3f0075aa056274ea25a0008c21a0088b1960083b100000ba076001a8100006fa21bffc273f0031a604e124e62520008c21a0088b1960083b100000ba076001a4100006fa21bffc233f0031a2046124e224a0008c21a0188b196018ba102005a0100006fa21bffce4242010c424200cec242008d0242004e824200090100010de01200081c3e0068801200c|@1844,131071|36,5,@1840 100,4,@1702 136,4,@799 172,4,@799 1840:C2,612|9e13e002f606201880a1001b8bd02018d0036000c4023ff0de213ffcda213ff8ee00a010ee213ff4ec00a014ec213ff0ea00a018ea213fece800a01ce8213fe8e600a020e6213fe4e400a024e4213fe0d600a00cd400a008d200a004d000a0007fffc98d88013fe0e2012000a01000088c21a00c8b19600cba10200290100006fa21bffc1f3f005b9e03e064de222004c2047ffcc22220007fffce4301000000da046000e0213ffc94100008d2037ff0d0037fbcda037fe4f40360009fc6a00088013ffcd8012004d6032000d402fff0d202a008c4026000ee02a018ec05e00080a5a11122800003aa100002aa10001680a560b53280000bd0213ffcd0213ffc9010000a1b3f00419a0362707fffb49f88013ffcaa1000081080001dc20120089210000a901020f51b3f00559a0360547fffc80e88013ffcea012008e8056000e6053ff0e404e008e204a000e004e018de04200080a3e11122800003821000118210000f80a060b932800008aa102001901000131b3f00419a0362707fffb48301000000aa100008c20120088c21a00c8b19600cba10200290100006fa21bffc1b3f006b9a03623cda222004d8007ffcd82220007fffcdfc01000000d600600092100008d002ffbcda02ffe0f40360009fc6a00001000000d401200492100008d00120004000002701000000d4012008d202a000d0213ffcd4027ff0133f00609202601c901020b11b3f00599a0360fc7fffcbfc88013ffc80a22001228000069010200190102001da01200c7fffff769e13e0028c21a00c8b19600cba10200284100006fa21bffcd020a004ee012000ee20a00090100002ec01201081c5a00688012014|@1843,131071|96,5,@1484 132,4,@1535 152,5,@1537 260,4,@1258 268,5,@1260 296,4,@1470 304,5,@1472 372,4,@1258 380,5,@1260 416,4,@1670 436,5,@1537 484,5,@1841 508,4,@1568 520,4,@1523 528,5,@1524 1841:C2,48|9e13e0028c21a0108b196010ba10200384100006fa21bffcd420a008d220a004d020a0009010000281c3e00601000000|@1842,65671| 1842:S24|50415253455f5452454528292e6d6b436c61757365283329 1843:S47|50415253455f44454328292e706172736544656328332964656328342966756e4228312962696e64696e6773283129 1844:S36|50415253455f44454328292e706172736544656328332964656328342966756e42283129 1845:C2,56|9e13e002841000088c21a0148b196014ba10200490100006fa21bffcd422200cd2222008c422200494103fe5d422200081c3e00601000000|@1846,65671| 1846:S32|50415253455f5452454528292e6d6b46756e4465636c61726174696f6e283329 1847:C2,252|9e13e002f606201880a1001b8bd020188c21a00c8b19600cba10200290100006fa21bffc053f00688400a348c4222004ee037fecee222000ac10000faa10000d7fffcd6601000000e8057ff8e6057ff4ec213ffcea213ff8a4102001e4213ff4a2102001e2213ff0d604e008d404e004d204e000da052010f40360009fc6a00088013ff0e0012000de043ff8d0213ffcd403e00c133f00609202601c9010200d1b3f00599a0360fc7fffcb6388013ffc80a220012280000682102001da0120047fffffd19e13e002821000088c21a00c8b19600cba1020029a100006fa21bffcc2236004d8012000d82360009010000dd601200881c2e0068801200c|@1655,131071|36,4,@1652 64,5,@1537 148,4,@1568 160,4,@1523 168,5,@1524 1848:C2,48|9e13e002841000088c21a00c8b19600cba10200290100006fa21bffcc422200484103fc9c422200081c3e00601000000|@1849,65665| 1849:S15|547970654465636c61726174696f6e 1850:C2,232|9e13e002f606201880a1001b8bd020188c21a00c8b19600cba10200290100006fa21bffc053f00688400a348c4222004ee037fdcee222000ac10000faa10000d7fffcd0701000000e8057ff8ec213ffcea213ff894100008d2057ff490102001da052018f40360009fc6a00088013ff8e6012000e404fff8d0213ffcd404a00c133f00609202601c9010200d1b3f00599a0360fc7fffcb0988013ffc80a2200122800006a2102001da0120047fffffd69e13e002a21000088c21a00c8b19600cba102002a0100006fa21bffce2242004de012000de24200090100010c201200881c060068801200c|@1655,131071|36,4,@1652 64,5,@1537 128,4,@1568 140,4,@1523 148,5,@1524 1851:O1|@1852 1852:C2,36|9e13e00280a2207d32800005901020019010200581c3e0060100000081c3e00601000000|@1255,129| 1853:C2,252|9e13e002f606201880a1001b8bd020188c21a00c8b19600cba10200290100006fa21bffc053f00688400a348c4222004ee037fd4ee222000ac10000faa10000d7fffccb401000000e8057ff8e6057ff4ec213ffcea213ff8a4102001e4213ff4a2102001e2213ff0d604e008d404e004d204e000da052010f40360009fc6a00088013ff0e0012000de043ff8d0213ffcd403e00c133f00609202601c9010200d1b3f00599a0360fc7fffcab188013ffc80a220012280000682102001da0120047fffffd19e13e002821000088c21a00c8b19600cba1020029a100006fa21bffcc2236004d8012000d82360009010000dd601200881c2e0068801200c|@1655,131071|36,4,@1652 64,5,@1537 148,4,@1568 160,4,@1523 168,5,@1524 1854:O1|@1855 1855:C2,36|9e13e00280a2202932800005901020019010200581c3e0060100000081c3e00601000000|@1255,129| 1856:C2,56|9e13e002841000088c21a0148b196014ba10200490100006fa21bffcd222200cc4222008d422200494102001d422200081c3e00601000000|@1857,65671| 1857:S36|50415253455f5452454528292e6d6b416273747970654465636c61726174696f6e283329 1858:C2,212|9e13e002f606201880a1001b8bd020188c21a00c8b19600cba10200290100006fa21bffc053f00688400a348c4222004ee037fecee222000ac10000faa10000d7fffcc3c01000000ec213ffcea213ff89a1000154000002788013ff8e8012000e6053ff8d0213ffcd404e00c133f00609202601c9010200d1b3f00599a0360fc7fffca4388013ffc80a2200122800006a4102001da0120047fffffdb9e13e002a41000088c21a00c8b19600cba102002a2100006fa21bffce4246004e0012000e024600090100011de01200881c3e0068801200c|@1655,131071|36,4,@1652 64,5,@1537 84,5,@1859 108,4,@1568 120,4,@1523 128,5,@1524 1859:C2,848|9e13e002f606201880a1001b8bd02018c4037ff8ae1000088c21a00c8b19600cba10200290100006fa21bffcd200a020d2222004ee222000ac10000faa10000da81000177fffcbff01000000ec213ffcea213ff8e8213ff4fa057ff0fa213ff0d4013ff092100008113f00849002220c1b3f005b9a0361747fffcc2788013ff0e6012000d0213ffce404e010e4213ff8e204e014e2213ff4e004e018e0213ff0de04e01cde213fecc204e020c2213fe8da04e024da213fe4d604e00cd404e008d204e004d004e0007fffc71a88013fe494100008d2012004d00120007fffcc7a01000000d801200cd4033ff0133f00609202601c901020591b3f00599a0360fc7fffc9e70100000080a220012280002fd601200c8c21a00c8b19600cba10200290100006fa21bffc173f005b9602e064d6222004d4012008d42220007fffcbc101000000d201200cc4027ff4d400a008d2027ff01b3f005d9a0360547fffcdab010000008c21a0088b1960083b100000ba076001ae100006fa21bffc2d3f0075ac05a274ec25e0008c21a0148b196014ba102004aa100006fa21bffc293f007da80522a8e825600cd0256008ee256004e6012000e625600090100015e401201081c4a00688012014d402fff0133f00609202601c901020b51b3f00599a0360fc7fffc9af0100000080a22001228000408c21a008d401200cd402bff0d2012008113f00849002220c1b3f005b9a0361747fffcbc1010000008c21a0088b1960083b100000ba07600192100006fa21bffc053f00318400a124c42260008c21a0088b1960083b100000ba076001ae100006fa21bffc2d3f0075ac05a274ec25e0008c21a0148b196014ba102004aa100006fa21bffcd225600cee256008d0256004a8103fe1e82560008c21a0088b1960083b100000ba076001a6100006fa21bffc253f0075a404a274e424e0008c21a0148b196014ba102004a2100006fa21bffcea24600c213f000fa00420cce0246008e6246004de012000de24600090100011c201201081c06006880120148b1960083b100000ba07600194100006fa21bffc133f007592026274d222a0008c21a0148b196014ba10200490100006fa21bffc053f007d8400a2a8c422200c2f3f000fae05e0ccee222008d4222004ec012000ec222000ea01201081c5600688012014|@1860,131071|68,5,@1537 104,4,@1779 112,4,@1541 120,5,@1542 200,5,@1484 220,5,@1545 236,4,@1568 248,4,@1523 256,5,@1524 296,4,@1535 316,5,@1537 340,4,@1557 348,5,@1559 380,4,@1702 412,4,@1755 460,4,@1568 472,4,@1523 480,5,@1524 512,4,@1779 520,4,@1541 528,5,@1542 560,4,@799 596,4,@1702 672,4,@1702 708,4,@375 768,4,@1702 800,4,@1755 812,4,@375 1860:S48|50415253455f44454328292e7061727365446563283329646563283429657863657074696f6e42696e64696e67283129 1861:C2,48|9e13e002841000088c21a00c8b19600cba10200290100006fa21bffcc422200484102015c422200081c3e00601000000|@1862,65665| 1862:S13|45784465636c61726174696f6e 1863:C2,92|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d0213ff4da036008f40360009fc6a00088013ff480a2200132800009c4012008c4012004d0012000da00a004de012008f403600081c6a0048801200c81c0a0068801200c|@1463,131071| 1864:C2,72|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d0213ff4da036008f40360009fc6a00088013ff4c4012004d0012000da00a004de012008f403600081c6a0048801200c|@1865,131071| 1865:S35|50415253455f44454328292e6d6b4c6f63616c426f6479466978456e76283529283129 1866:O1|@1867 1867:C2,52|9e13e002841000088c21a00c8b19600cba10200290100006fa21bffc2f3f0090ae05e1d4ee222000c422200481c3e00601000000|@1878,98433|28,4,@1868 1868:C2,40|9e13e002f606201880a1001b8bd0201894103ffdd2036004353f0090b406a21881c6a00401000000|@1877,131071|24,4,@1869 1869:C2,428|9e13e002f606201880a1001b8bd0201880a2a0013280000580a2bff9841020091080000bc4213ffc3280000580a2bffd8410202110800006c4213ffc328000038410204184102029c4213ffcd2213ff8de213ff4d0213ff0d4213fec9a100009f40360009fc6a00088013fec80a2200132800006ee02200090102001ee01200881c5e00688012014ec05e00080a5a0252a80000780a5a08180a5a0353880000480a5a08110800006d401200022800004d40120001080000780a5a0add201200cd005e004de01200810bfffcf880120143280000980a5a0b5d005e0049a0120104000003a01000000ea01200881c56006880120143280000480a5a1f910800006d005e00422800004d005e00410800022d00120049a0120104000002c0100000080a2200132800006ea02200090102001ea01200881c5600688012014e8056000b8252001ba102000b91f401ca60720018c21a00c8b19600cba102002a4100006fa21bffce2056004e224a004e624a0008c21a0088b196008ba10200190100006fa21bffce4222000e001200881c42006880120149a0120104000000c01000000ea01200881c5600688012014|@1876,131071|224,5,@1870 280,5,@1870 408,5,@1870 1870:C2,460|9e13e002f606201880a1001b8bd02018c403600080a0a0413280006794100008de213ffcda213ff8d0213ff4da037ffcf40360009fc6a00088013ff480a2200132800006ee02200090102001ee01200881c5e0068801200cec05e00080a5a0c12280000bea012004d40120009210200190102001da012004de012008353f0091b406a1c881c6a0048801200cfa05e004fa213ffcd0013ffcda057ffcf40360009fc6a00088013ffc80a2200132800014e80220008c21a00c8b19600cba102002a8100006fa21bffce6012000e6252004a4102001e42520008c21a0088b196008ba10200190100006fa21bffce8222000e201200c81c4600688012010e605200080a4e1e13280000480a4e16110800006d405200422800004d40520041080001ed40120049210200190102001da0120084000002e0100000080a2200132800014e401200c8c21a00c8b19600cba102002a4100006fa21bffce2012000e224a004a0102001e024a0008c21a0088b196008ba10200190100006fa21bffce4222000de01200c81c3e0068801201081c4a006880120109210200190102001da012008de01200c353f0091b406a1c881c6a004880120109210200190102001353f0092b406a07081c6a00401000000|@1875,131071|124,4,@1871 304,5,@1871 420,4,@1871 444,4,@1873 1871:C2,612|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d0213ff4d2213ff0d4213fec9010000ada037ffcf40360009fc6a00088013fec80a220013280001bc4022000c401200880a0a00122800014901020018c21a00c8b19600cba102002ae100006fa21bffcec012000ec25e004ea012004ea25e0008c21a0088b196008ba10200190100006fa21bffcee222000e801201081c5200688012014ee01201081c5e00688012014ee00a000b825e001811f20c02680001ab825e001b825e001811f20e434800016b825e001ec012004b825a001ba10001cbb17401dbb17401dbb17401db917401daa072001ba25e001b917001da8072001b91f20c0a6072001d400a0049210001390102005da01200cde01201010bfffbc88012014811f21042680001cb825e001b825e001811f211834800018b825e001ec012004b825a001ba10001cbb17401dbb17401dbb17401db917401daa072001ba25e001b917001da8072001b91f2104a6072001b9172028a4072001d400a0049210001290102005da01200cde01201010bfff9f88012014811f21842680001cec012008b825e001811f219834800018ec012008ec012004b825a001ba10001cbb17401dbb17401dbb17401db917401daa072001ba25e001b917001da8072001b91f2184a6072001b9172028a4072001d400a0049210001290102005da01200cde01201010bfff828801201480a5a00122800014901020018c21a00c8b19600cba102002aa100006fa21bffce8012000e8256004e6012004e62560008c21a0088b196008ba10200190100006fa21bffcea222000e401201081c4a00688012014ea01201081c5600688012014|@1872,131071| 1872:S29|496e742e7363616e283329726561645f6865785f646967697473283329 1873:C2,416|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d0213ff4d2213ff0d4213fec9010000ada037ffcf40360009fc6a00088013fec80a220013280001bc4022000c401200880a0a00122800014901020018c21a00c8b19600cba102002ae100006fa21bffcec012000ec25e004ea012004ea25e0008c21a0088b196008ba10200190100006fa21bffcee222000e801201081c5200688012014ee01201081c5e00688012014ee00a000b825e001811f20c026800023ec012008ec01200cea05a000b8256001b91720c0a8072001ba25e001811f401c3680001aec012008ee213ffcfa00a004fa213ff892100015d00120041b0000859a036358f40360009fc6a00088013ff8e6012004b824e001ba222001b917401ca4072001b91f20c0a2072001d40120009210001190102005da012014de01201810bfffb38801201c80a5a00122800014901020018c21a00c8b19600cba102002aa100006fa21bffce8012000e8256004e6012004e62560008c21a0088b196008ba10200190100006fa21bffcea222000e401201081c4a00688012014ea01201081c5600688012014|@1874,131071|244,4,I108 1874:S25|496e742e7363616e283329726561645f646967697473283329 1875:S25|496e742e7363616e283329726561645f6e756d626572283129 1876:S11|496e742e7363616e283329 1877:S17|496e742e7363616e283129283129283129 1878:S14|496e742e7363616e283129283129 1879:C2,196|9e13e002f606201880a1001b8bd02018808a200132800004b8102004f8022000b92f2002840720018c21a0108b196010ba102003ae100006fa21bffc2d3f0092ac05a39cec25e000c425e008d025e004de213ffc901000179a100009f40360009fc6a00088013ffcaa100008901020019a100015f40360009fc6a0000100000080a2200132800006e802200090102001e801200081c52006880120048c21a0088b196008ba10200190100006fa21bffce6052000e6222000e401200081c4a00688012004|@1882,131071|60,4,@1880 1880:C2,140|9e13e002c403600880a2000232800005ee0360049010200181c3e00601000000808de00122800005ac822010ac10001710800007aa822004bb3da002fa0dc01db92f6002ac072001aa8220048c21a00c8b19600cba10200290100006fa21bffcea222004ec222000ac1000088c21a0088b196008ba10200190100006fa21bffcec22200081c3e00601000000|@1881,123041| 1881:S29|537472696e674376742e7363616e537472696e67283229726472283129 1882:S23|537472696e674376742e7363616e537472696e67283229 1883:S11|507265636564656e636520 1884:S37|206e6f7420616c6c6f7765642c206d757374206265206265747765656e203020616e642039 1885:C2,40|9e13e002f606201880a1001b8bd02018c402200cd00360049a100002f403600081c6a00401000000|@1264,131071| 1886:C2,48|9e13e002841000088c21a00c8b19600cba10200290100006fa21bffcc422200484102001c422200081c3e00601000000|@1664,65665| 1887:S8|5661726961626c65 1888:C2,372|9e13e002f606201880a1001b8bd02018d0037ff0c4022008ee00a000ec022018ea05a00080a5611122800003a8100017a8100015de213ffcda213ff8133f00849202620c901000147fffae1888013ff880a220012280004590102001e8012000fa053ff0fa213ffcd4013ffcd2053fec113f00849002220c1b3f005b9a0361747fffc7e488013ffce6012000d0213ffce404e010e4213ff8e204e014e2213ff4e004e018e0213ff0de04e01cde213fecc204e020c2213fe8da04e024da213fe4d604e00cd404e008d204e004d004e0007fffc2d788013fe494100008d2012004d00120007fffc83701000000d8012008d6033ff48c21a00c8b19600cba10200290100006fa21bffcd4033fd8d4222004d2012000d2222000da02e000f40360009fc6a0000100000090102001da0120087fffffb59e13e0028c21a00c8b19600cba10200284100006fa21bffcd020a004ee012000ee20a00090100002ec01200c81c5a00688012010e801200481c5200688012008|@1826,131071|60,4,@1779 72,5,@1256 112,4,@1779 120,4,@1541 128,5,@1542 208,5,@1484 228,5,@1545 1889:C2,52|9e13e002841000088c21a0108b196010ba10200390100006fa21bffcc4222008d222200492102011d222200081c3e00601000000|@1890,65667| 1890:S27|50415253455f5452454528292e6d6b446972656374697665283229 1891:S2|6974 1892:S29|50415253455f44454328292e7061727365446563283329646563283429 1893:C2,316|9e13e002f606201880a1001b8bd02018c4036004de213ffcc4213ff8ee00a010ee213ff4ec00a014ec213ff0ea00a018ea213fece800a01ce8213fe8e600a020e6213fe4e400a024e4213fe0d600a00cd400a008d200a004d000a0007fffc26688013fe0e2012000e0046004e0213ffcde046008de213ff8c204600cc2213ff4da046010da213ff0d8046014d8213fecd6046018d6213fe8d404601cd4213fe4d2046020d2213fe0c4046024c4213fdcd60460009410200592100008113f0094900221007fffadf988013fdcd0213ffcd0213ff8ae102005ee213ff4ac013ff8ec213ff09610200594102001130000279202603d113f000f900220cc7fffc46a88013ff08c21a00c8b19600cba10200290100006fa21bffcea012000ea222000e8012004e8222004de01200c353f0058b406a37081c6a00488012010|@1897,131071|92,5,@1484 188,4,@1894 196,5,@1265 236,4,9999 244,4,@375 252,5,@1515 300,4,@1517 1894:O1|@1895 1895:C2,44|9e13e002f606201880a1001b8bd02018c402200c113f0094900221509a100002f403600081c6a00401000000|@1264,131071|20,4,@1896 1896:S31|467265652074797065207661726961626c6573206e6f7420616c6c6f776564 1897:S36|50415253455f44454328292e7061727365446563283329676c6f62616c456e762d283129 1898:O1|@1899 1899:C2,416|9e13e002841000088088a001228000510100000080a0a0052680004e0100000080a0a10d3480004b010000002f3f0094ae05e1f2ba00bff9fa05c01d81c5c01d010000000000012a000001360000010a0000010a0000010a0000012a000001360000010a0000010a0000010a000001360000012a000001360000010a0000012a0000010a00000136000001360000012a00000136000001360000010a0000012a000001360000010a0000012a0000010a0000010a00000136000001360000010a0000012a0000010a000001420000010a0000010a0000010a0000014e0000010a0000010a0000010a0000010a0000012a0000010a0000012a0000010a0000010a0000012a0000010a0000010a0000010a0000012a0000010a0000012a0000010a0000010a0000010a0000012a0000010a0000010a0000010a0000010a0000012a0000012a0000012a0000012a0000012a80a2208532800005901020019010200581c3e0060100000081c3e006010000009010200581c3e006010000009010200581c3e006010000009010200581c3e006010000009010200581c3e00601000000|@1492,98433|44,4,$1899+70 1900:C2,980|9e13e002f606201880a1001b8bd02018c4037ff8ee00a008ec05e000ea00a018e805600080a5211122800003a6100016a610001480a4e0e5228000069010200180a4e00132800005ec0360009010200181c3e00601000000de213ffcda213ff8d0213ff4e6213ff0d205a004901000137fffac9088013ff080a22001228000ccea012008d2012004d00120007fffac890100000080a2200132800040a6102001ea012008e8057ff8133f005892026104d00520241b3f00389a0360407fffa30d0100000080a2200122800034a6102001e4012008e204bff8e2213ffce0046010e0213ff8de046014de213ff4c2046018c2213ff0da04601cda213fecd8046020d8213fe8d6046024d6213fe4d604600cd4046008d2046004d00460007fffc14688013fe4d4012000d202a004d2213ffcc402a008c4213ff8ee02a00cee213ff4ec02a010ec213ff0ea02a014ea213fece802a018e8213fe8e602a01ce6213fe4e402a020e4213fe0e202a024e2213fdcd602a0009410200192100008113f0095900223587fffacd988013fdca610000810800005d0213ffcd0213ffc88013ffcd0213ffcd0213ff8ea01200480a560991280001188013ff8e8012014d4053fd8d2053ff8d0053fdc9a100014400000b201000000a6012000d024e000a4012000233f00aba2046078e224a00410800061d001200480a560893280001180a56085e8012014d4053fd8d2053ff8d0053fdc9a100014400015d101000000a6012000d024e000a4012000233f00aca204615ce224a0041080004fd00120043280001280a56051e8012014d4053fd8d2053ff8d0053fdc9a1000144000119a01000000e6012014e404e000a2012000d0246000a0012000de04a008de2420041080003dd001200432800012e8012014e8012014d4053fd8d2053ff8d0053fdc9a1000144000118801000000e6012014e404e000a2012000d0246000a0012000de04a008de2420041080002bd0012004e6053ff8e404e010e4213ffce204e014e2213ff8e004e018e0213ff4de04e01cde213ff0c204e020c2213fecda04e024da213fe8d604e00cd404e008d204e004d004e0007fffc0c988013fe8d8012014d0213ffcd6033fd8d4033ff892102005d0033fdcda033fe4f40360009fc6a00088013ffcd20120004000057f01000000d6012018d402e00092012004d022600090012004c402a008c422200488012004d0012004da0120147fffff249e13e0028c21a00c8b19600cba102002ae100006fa21bffcd025e004ec012000ec25e00090100017ea01201881c560068801201cd2057ff8901020ed1b3f00559a0360547fffbf530100000090102001e801200c81c5200688012010|@2022,131071|112,5,@1256 140,5,@1256 168,4,@1507 180,4,@1112 188,5,@1114 284,5,@1484 380,4,@1901 388,5,@1265 460,5,@1904 480,4,@2008 532,5,@2010 552,4,@2020 600,5,@1981 672,5,@1981 784,5,@1484 836,5,@1917 948,4,@1470 956,5,@1472 1901:O1|@1902 1902:C2,44|9e13e002f606201880a1001b8bd02018c402200c113f0095900223a89a100002f403600081c6a00401000000|@1668,131071|20,4,@1903 1903:S74|4d4c205374616e6461726420726571756972657320273b27206265747765656e20646966666572656e74206b696e6473206f6620746f702d6c6576656c206465636c61726174696f6e2e 1904:C2,88|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d0213ff4d2213ff0d4213fec901000091b3f00419a0362707fffab9988013fec9a0120104000000e01000000de012010353f00aab406a3ec81c6a00488012014|@2007,131071|40,4,@1258 48,5,@1260 60,5,@1905 72,4,@2005 1905:C2,152|9e13e002f606201880a1001b8bd02018de213ffcda213ff8901020014000002688013ff8c4012000d0213ffcd400bff4133f00a5920262709010200d1b3f00599a0360fc7fffc31588013ffc80a2200122800006ae102001da0120047fffffea9e13e002ae1000088c21a00c8b19600cba102002ac100006fa21bffcee25a004ea012000ea25a00090100016e801200881c520068801200c|@1526,131071|28,5,@1906 48,4,@1972 60,4,@1523 68,5,@1524 1906:C2,2080|9e13e002f606201880a1001b8bd02018c4037ff4de213ffcda213ff8ee00a010ee213ff4ec00a014ec213ff0ea00a018ea213fece800a01ce8213fe8e600a020e6213fe4e400a024e4213fe0d600a00cd400a008d200a004d000a0007fffc00788013fe0e2012000e0047ffcde042000821000088c21a00c8b19600cba10200290100006fa21bffcda03e00cda222004d8047ff0d82220007fffc4bc01000000c2213ffcfa047ff4fa213ff8d4013ff892100008113f0061900221e01b3f005b9a0361747fffc4e688013ff8d6012000d0213ffcd402e010d4213ff8d202e014d2213ff4c402e018c4213ff0ee02e01cee213fecec02e020ec213fe8ea02e024ea213fe4e802e000e602e004e402e008e202e00c961000119410001292100013901000147fffbfd588013fe494100008d2012004d00120007fffc53501000000e001200cde043ff4c203e008da006000d803e018d603200080a2e111228000039410000d9410000b80a2a0d13280000a9210000f9010000f1b3f00419a0362707fffaafb010000009410000810800009d401200c901020a11b3f00559a0360547fffbe6b0100000094100008d401200cd202bffcd0026000c40220148c21a00c8b19600cba10200290100006fa21bffcc4222004ee02bff0ee2220007fffc46b01000000d0213ffcd0213ff8d0213ff4d0213ff0ec02bff4ea05a008e8056000e605a018e404e00080a4a1110280000588013ff0a21000121080000480a460d5a210001480a460d53280001ae20560009010200140000182010000008c21a0088b1960083b100000ba076001a2100006fa21bffca0102001e02460009e01200082102005c223e0009a01200019000083980323d8d823600496012000e222e00892012000d022600c108000a08c21a014e004e00080a42111228000039e1000119e100010d0213ffc133f0098920261bc9010000f7fffaa9088013ffc80a22001228000208c21a00cde012020d4012000d203fff4d003fff8da03fffc400001a40100000040000156010000008c21a0088b1960083b100000ba07600182100006fa21bffc9a102001da2060009801200496102005d62320009401200413000083920263d8d222a00484012004c220a008ae012004d025e00c10800073880120048b19600cba10200290100006fa21bffc1f3f00609e03e2b4de222004c2012000c22220007fffc40901000000da012020fa037ff4fa213ffcd4013ffc92100008113f0061900221e01b3f005b9a0361747fffc43388013ffcd8012000d0213ffcd6032010d6213ff8d4032014d4213ff4d2032018d2213ff0c403201cc4213fecee032020ee213fe8ec032024ec213fe4d603200cd4032008d2032004d00320007fffbf2688013fe494100008d2012004d00120007fffc48601000000ea012028e8057ff4e6052008e404e000e2052018e004600080a42111228000039e1000129e10001080a3e0bd3280000a92100014901000141b3f00419a0362707fffaa4c010000009e100008108000098c21a00c901020e91b3f00559a0360547fffbdbc010000009e1000088c21a00c8b19600cba10200290100006fa21bffc1f3f00a39e03e25cde222004c2012008c22220007fffc3be01000000da01202894100008d2037ff4d0037ff8da037ffc40000734010000008c21a0088b1960083b100000ba07600198100006fa21bffc96102001d62320009401200c92102005d222a0008401200cee012000ee20a004ac01200cd825a008aa01200cd025600c88012008880120048c21a0148b196014ba102004a8100006fa21bffce6012000e6252000e4012004e4252004e2012008e2252008e001200ce025200cde01201cc203fff4da006008d8036000d6006018d402e00080a2a111228000039210000c9210000a80a260d53280000be8213ffce8213ffc901000011b3f00419a0362707fffa9fc88013ffc921000081080000ad201202092100001901020a51b3f00559a0360547fffbd6b88013ffc92100008d2012020d0027ff4c4022008ee00a000ec022018ea05a00080a5611122800003a8100017a810001580a520c932800003a8102001a8102005e8213ffc94100008133f00609202601c901020bd1b3f00599a0360fc7fffc17988013ffc80a2200122800004e80120241080000fe6012024d4053ff4133f00609202601c901020c91b3f00599a0360fc7fffc16c0100000080a2200132800004e601202410800017010000008c21a00c8b19600cba10200290100006fa21bffc253f005ba404a064e4222004e204fff0e22220007fffc3440100000094100008d204fff4d004fff8da04fffc400006bb01000000a810000810800005e6012024293f0031a8052124e6012024e404fff4e204a008e0046000de04a018c203e00080a06111228000039a1000109a10000180a360b53280000be8213ffce8213ffc901000121b3f00419a0362707fffa99f88013ffc9a1000081080000ada01202892100012901020f51b3f00559a0360547fffbd0e88013ffc9a100008da012028d4037ff0d2037ff4d0037ff8da037ffc40000b9301000000d0213ffcd0213ff8d0213ff4d0213ff0d0213fecd0213fe8d0213fe48c21a00888013fe48b1960083b100000ba07600198100006fa21bffc96102001d623200094012000d2012024d222a00084012000d020a004ae012000ec012040ec25e008aa012000e8012038e825600ca6012000e4012020e424e010a2012000d8246014a0012000de01201cde2420188c21a0208b196020ba10200790100006fa21bffcc2012000c2222000da012004da222004d8012008d8222008d601200cd622200cd4012010d4222010d2012014d2222014c4012018c4222018ee01204881c5e0068801204c|@2004,131071|92,5,@1484 152,5,@1537 180,4,@1580 188,4,@1541 196,5,@1542 292,5,@1484 312,5,@1545 376,4,@1258 384,5,@1260 408,4,@1470 416,5,@1472 476,5,@1537 564,5,@1907 620,4,I48 680,4,@1909 692,5,@1256 732,5,@1911 740,5,@1907 796,4,I48 848,4,@1573 868,5,@1537 896,4,@1580 904,4,@1541 912,5,@1542 992,5,@1484 1012,5,@1545 1076,4,@1258 1084,5,@1260 1108,4,@1470 1116,5,@1472 1148,4,@1969 1168,5,@1537 1196,5,@1935 1396,4,@1258 1404,5,@1260 1432,4,@1470 1440,5,@1472 1516,4,@1568 1528,4,@1523 1536,5,@1524 1568,4,@1568 1580,4,@1523 1588,5,@1524 1636,4,@1535 1656,5,@1537 1680,5,@1935 1700,4,@799 1768,4,@1258 1776,5,@1260 1804,4,@1470 1812,5,@1472 1844,5,@1971 1907:C2,48|9e13e002841000088c21a00c8b19600cba10200290100006fa21bffcc422200484103fedc422200081c3e00601000000|@1908,65665| 1908:S6|536967446563 1909:O1|@1910 1910:C2,176|9e13e00280a220a53280000580a220959010200581c3e006010000003280000580a220859010200581c3e006010000003280000580a2202d9010200581c3e006010000003280000580a220799010200581c3e006010000003280000580a220a19010200581c3e006010000003280000580a220759010200581c3e006010000003280000580a2201d9010200581c3e0060100000032800005901020019010200581c3e0060100000081c3e00601000000|@1492,129| 1911:C2,112|9e13e002f606201880a1001b8bd02018d0213ffcd0213ff8d0213ff4d0213ff0de213fecda213fe8d0213fe4d2213fe0d4213fdcfa022008fa213fd892013ff090102001da037ff0f40360009fc6a00088013fd8901020019a0120244000000c01000000c401201481c0a00688012028|@1968,131071|92,5,@1912 1912:C2,1932|9e13e002f606201880a1001b8bd02018c4037fecee00a0008c21a00c8b19600cba10200290100006fa21bffcd205e02cd2222004ec037fe0ec222000aa10000fa810000d7fffc25301000000ea213ffce8213ff8d6053fe4153f009a9402a2c4921000161b3f005c9a0362e87fffc3db88013ff8e6012000e404ffe4e204a008e0046000de04a018c203e00080a06111228000039a1000109a10000180a3601d3280005080a36075d604a010d6213ffcd404a014d4213ff8de213ff4d204a01cd2213ff0d004a020d0213fecc404a024c4213fe8d604a00c94100011d204a004d004a0007fffbd6788013fe8ee012000ec05ffecea05a000a81000088c21a00c8b19600cba10200290100006fa21bffce6056030e6222004e405ffe0e42220007fffc21c01000000e2012000e0047fe88c21a00c8b19600cba1020029e100006fa21bffc033f009a820062d8c223e000da047fe4da23e0048c21a0108b196010ba10200398100006fa21bffcde232008d6042004d6232004d4042000d4232000d2047fece8213ffc94100008d0027ffc9210000c84100008901020059a100002f40360009fc6a00088013ffcd2012000400001f7010000008c21a00c8b19600cba10200298100006fa21bffcae102001ee232004d02320001080012ed60120043280004580a360a1d604ffe4d402e010d4213ffcd202e014d2213ff8d002e018d0213ff4c402e01cc4213ff0ee02e020ee213fecec02e024ec213fe8ea02e000e802e004e002e008c202e00c961000019410001092100014901000157fffbd1188013fe8da012000d8037fecd6032000941000088c21a00c8b19600cba10200290100006fa21bffcd202e030d2222004c4037fe0c42220007fffc1c601000000ee012000d4213ffcd0213ff8d005ffe41b3f00419a0362707fffa83788013ff8ec012008fa05bfe8fa213ffc9a01200c400001dd88013ffc7ffff48601000000d2012008400001b2010000008c21a00c8b19600cba10200298100006fa21bffcaa102001ea232004d0232000108000e8880120083280004580a36079d604ffe4d402e010d4213ffcd202e014d2213ff8d002e018d0213ff4c402e01cc4213ff0ee02e020ee213fecec02e024ec213fe8ea02e000e802e004e002e008c202e00c961000019410001092100014901000157fffbccc88013fe8da012000d8037fecd6032000941000088c21a00c8b19600cba10200290100006fa21bffcd202e030d2222004c4037fe0c42220007fffc18101000000ee012000d4213ffcd0213ff8d005ffe41b3f00419a0362707fffa7f288013ff8ec012008fa05bfe8fa213ffc9a01200c400001e088013ffc7ffff44101000000d20120084000016d010000008c21a00c8b19600cba10200298100006fa21bffcaa102001ea232004d0232000108000a3880120083280001080a3602dd004ffe41b3f00419a0362707fffa7d601000000d6012000fa02ffe4fa213ffc9a0120044000020c88013ffc9810000810800090d0213ffc3280001080a36085d004ffe41b3f00419a0362707fffa7c601000000d6012000fa02ffe4fa213ffc9a012004400002f088013ffc9810000810800080d0213ffc3280001980a360a5d004ffe41b3f00419a0362707fffa7b601000000d6012000fa02ffe4fa213ffc9a012004400003da88013ffc4000072f010000008c21a00c8b19600cba10200298100006fa21bffc94102001d4232004d023200010800067d0213ffc3280005280a36095d004ffe41b3f00419a0362707fffa79d01000000113f009f900221e47fffc12001000000d6012000d402ffe0d202ffe4961000098410000a153f009f9402a238921000021b3f005c9a0362e87fffc2a601000000ee012000ec05ffecea05a0008c21a00c8b19600cba10200290100006fa21bffce8056030e8222004e605ffe0e62220007fffc10601000000a41000088c21a00c8b19600cba10200290100006fa21bffc233f0061a20461e0e2222004e42220007fffc0fa01000000e001200094100008d2043fe4d0043fe8da043fec4000047001000000d0213ffc901020019a0120044000070088013ffc8c21a00c8b19600cba1020029e100006fa21bffcd023e004c2012000c223e0009010000f4000075c010000008c21a00c8b19600cba10200298100006fa21bffc9a102001da232004d023200010800015d0213ffc3280001098102001d004ffe41b3f00419a0362707fffa74b01000000d6012000fa02ffe4fa213ffc9a0120044000075d88013ffc9810000810800005d0213ffcd0213ffc88013ffcd0213ffcd0213ff888013ff888012008d6012004d402ffe4d202a008d0026000c402a018ee00a00080a5e11122800003ac100008ac10001780a5a0e53280000bac102001d8213ffc9010000a1b3f00419a0362707fffa72988013ffcac10000810800005ec012008d8213ffc88013ffcec012008ea05bfe4e8056008e6052000e4056018e204a00080a4611122800003a0100013a0100011de05bfecc203e000d200602c901000107fffa6f60100000080a2200122800014d001200090102001da0120087ffffe319e13e00280a2200132800006d0213ffcd0012000da01200c81c3600688012010d00120009a01200c400008af88013ffcda01201081c3600688012014da01200c81c3600688012010|@1967,131071|68,5,@1537 88,4,@1913 100,4,@1554 108,5,@1555 228,5,@1484 288,5,@1537 324,4,@1914 432,5,@1917 572,5,@1484 632,5,@1537 656,4,@1258 664,5,@1260 688,5,@1919 696,5,@1848 708,5,@1917 848,5,@1484 908,5,@1537 932,4,@1258 940,5,@1260 964,5,@1920 972,5,@1848 984,5,@1917 1044,4,@1258 1052,5,@1260 1076,5,@1921 1108,4,@1258 1116,5,@1260 1140,5,@1926 1172,4,@1258 1180,5,@1260 1204,5,@1933 1212,5,@1950 1272,4,@1258 1280,5,@1260 1288,4,@1936 1296,5,@1537 1324,4,@1939 1336,4,@1554 1344,5,@1555 1400,5,@1537 1432,4,@1580 1448,5,@1537 1476,5,@1935 1496,5,@1952 1540,5,@1954 1600,4,@1258 1608,5,@1260 1632,5,@1956 1736,4,@1258 1744,5,@1260 1828,5,@1256 1900,5,@1965 1913:S9|5369676e6174757265 1914:C2,284|9e13e002f606201880a1001b8bd02018c4036004de213ffcd0213ff8c4213ff4ee00a010ee213ff0ec00a014ec213fecea00a018ea213fe8e800a01ce8213fe4e600a020e6213fe0e400a024e4213fdcd600a00cd400a008d200a004d000a0007fffbb9988013fdcd0213ffc133f005a920260a4d00120047fff8a3f88013ffc8c21a00c8b19600cba102002a2100006fa21bffc213f009ba0042010e0246000d0246004de012004c203e004c2213ffcda03e008da213ff8d803e00cd8213ff4d603e010d6213ff0d403e014d4213fecd203e018d2213fe8d003e01cd0213fe4c403e020c4213fe0ee03e024ee213fdcd603e00094102005d2012000901000117fffa71e88013fdc113f003190022124ec01200c81c5a00688012010|@1916,131071|96,5,@1484 108,4,@1530 120,5,@496 148,4,@1915 256,5,@1265 264,4,@799 1915:C2,40|9e13e002f606201880a1001b8bd02018c402200cd00360049a100002f403600081c6a00401000000|@1264,131071| 1916:S75|50415253455f44454328292e70617273654465632833297369676e6174757265537065632833297061727365536967456e7472696573283129746869735369672d6e6577656e762d283129 1917:C2,88|9e13e0028c21a0088b1960083b100000ba07600184100006fa21bffcae102001ee20a000ae1000088c21a0148b196014ba10200490100006fa21bffcc422200cd2222008ee22200492102019d222200081c3e00601000000|@1918,98435| 1918:S27|535452554354555245535f28292e6d6b546f704c6576656c283229 1919:C2,260|9e13e002f606201880a1001b8bd020188c21a00c8b19600cba10200290100006fa21bffc053f00688400a348c4222004ee037ff4ee222000ac10000faa10000d7fffbfcb01000000e8057ffce6053fece4057ff0ec213ffcea213ff8a2102001e2213ff4a0102005e0213ff0d604a008d404a004d204a000da04fff4f40360009fc6a00088013ff0de012000c203fffcda007fecd0213ffcd4037ff8133f00609202601c9010200d1b3f00599a0360fc7fffbdc688013ffc80a220012280000698102001da0120047fffffcf9e13e002981000088c21a00c8b19600cba10200296100006fa21bffcd822e004d4012000d422e0009010000bd201200881c260068801200c|@1655,131071|36,4,@1652 64,5,@1537 156,4,@1568 168,4,@1523 176,5,@1524 1920:C2,260|9e13e002f606201880a1001b8bd020188c21a00c8b19600cba10200290100006fa21bffc053f00688400a348c4222004ee037ff4ee222000ac10000faa10000d7fffbf8301000000e8057ffce6053fece4057ff0ec213ffcea213ff8a2102005e2213ff4a0102005e0213ff0d604a008d404a004d204a000da04fff4f40360009fc6a00088013ff0de012000c203fffcda007fecd0213ffcd4037ff8133f00609202601c9010200d1b3f00599a0360fc7fffbd7e88013ffc80a220012280000698102001da0120047fffffcf9e13e002981000088c21a00c8b19600cba10200296100006fa21bffcd822e004d4012000d422e0009010000bd201200881c260068801200c|@1655,131071|36,4,@1652 64,5,@1537 156,4,@1568 168,4,@1523 176,5,@1524 1921:C2,152|9e13e002f606201880a1001b8bd02018de213ffcda213ff8901020014000002688013ff8c4012000d0213ffcd400bff8133f00609202601c9010200d1b3f00599a0360fc7fffbd5188013ffc80a2200122800006ae102001da0120047fffffea9e13e002ae1000088c21a00c8b19600cba102002ac100006fa21bffcee25a004ea012000ea25a00090100016e801200881c520068801200c|@1526,131071|28,5,@1922 48,4,@1568 60,4,@1523 68,5,@1524 1922:C2,564|9e13e002f606201880a1001b8bd02018d0037ffcc4023fe4de213ffcda213ff8ee00a010ee213ff4ec00a014ec213ff0ea00a018ea213fece800a01ce8213fe8e600a020e6213fe4e400a024e4213fe0d600a00cd400a008d200a004d000a0007fffba4288013fe0e2012000e0047ffc9e1000088c21a00c8b19600cba10200290100006fa21bffc033f0060820062b4c2222004da043fe0da2220009810000f7fffbef601000000d8213ffcfa043fe4fa213ff8d4013ff892100008113f0061900221e01b3f005b9a0361747fffbf2088013ff8d6012000d0213ffcd402e010d4213ff8d202e014d2213ff4c402e018c4213ff0ee02e01cee213fecec02e020ec213fe8ea02e024ea213fe4e802e000e602e004e402e008e202e00c961000119410001292100013901000147fffba0f88013fe494100008d2012004d00120007fffbf6f01000000e001200cde043ffcc203ffe4da006008d8036000d6006018d402e00080a2a111228000039210000c9210000a80a260bd3280000a92100001901000011b3f00419a0362707fffa534010000009210000810800009d201200c901020e91b3f00559a0360547fffb8a40100000092100008d201200cd0027ffcc4023fecee00a000ec023fe08c21a00c8b19600cba10200290100006fa21bffcea05e034ea222004ec2220007fffbea301000000e801200ce6053ffcd404e000d204ffe41b3f005d9a0360547fffc08d01000000d401200892100008d0012000de012010353f009cb406a28481c6a00488012014|@1925,131071|96,5,@1484 136,4,@1573 160,5,@1537 188,4,@1580 196,4,@1541 204,5,@1542 300,5,@1484 320,5,@1545 388,4,@1258 396,5,@1260 420,4,@1470 428,5,@1472 492,5,@1537 516,4,@1557 524,5,@1559 548,4,@1923 1923:C2,56|9e13e002841000088c21a0148b196014ba10200490100006fa21bffcd222200cc4222008d422200494102021d422200081c3e00601000000|@1924,65671| 1924:S25|535452554354555245535f28292e6d6b56616c536967283329 1925:S73|50415253455f44454328292e70617273654465632833297369676e6174757265537065632833297061727365536967456e7472696573283129746869735369672d646f56616c283129 1926:C2,152|9e13e002f606201880a1001b8bd02018de213ffcda213ff8901020014000002688013ff8c4012000d0213ffcd400bff8133f00609202601c9010200d1b3f00599a0360fc7fffbc5d88013ffc80a2200122800006ae102001da0120047fffffea9e13e002ae1000088c21a00c8b19600cba102002ac100006fa21bffcee25a004ea012000ea25a00090100016e801200881c520068801200c|@1526,131071|28,5,@1927 48,4,@1568 60,4,@1523 68,5,@1524 1927:C2,524|9e13e002f606201880a1001b8bd02018d0037ffcc4023fe4de213ffcda213ff8ee00a010ee213ff4ec00a014ec213ff0ea00a018ea213fece800a01ce8213fe8e600a020e6213fe4e400a024e4213fe0d600a00cd400a008d200a004d000a0007fffb94e88013fe0e2012000e0047ffc9e1000088c21a00c8b19600cba10200290100006fa21bffc033f009d8200622cc2222004da043fe0da2220009810000f7fffbe0201000000d8213ffcfa043fe4fa213ff8d4013ff892100008113f00849002220c1b3f005b9a0361747fffbe2c88013ff8d6012000d0213ffcd402e010d4213ff8d202e014d2213ff4c402e018c4213ff0ee02e01cee213fecec02e020ec213fe8ea02e024ea213fe4e802e000e602e004e402e008e202e00c961000119410001292100013901000147fffb91b88013fe494100008d2012004d00120007fffbe7b01000000e001200cde043ffcd403ffe4133f00609202601c901020591b3f00599a0360fc7fffbbe70100000080a220012280001c01000000da01200cd8037ffcd6033fecd402e0008c21a00c8b19600cba10200290100006fa21bffcd202a034d2222004c4033fe0c42220007fffbdbe01000000ee01200cec05fffcd405bfdcd205bfe41b3f005d9a0360547fffbfa8010000008210000810800005d4012008033f000f820060ccd401200892100001d0012000de012010353f009db406a27481c6a00488012014|@1932,131071|96,5,@1484 136,4,@1928 160,5,@1537 188,4,@1779 196,4,@1541 204,5,@1542 300,5,@1484 320,5,@1545 340,4,@1568 352,4,@1523 360,5,@1524 432,5,@1537 456,4,@1557 464,5,@1559 484,4,@375 508,4,@1930 1928:O1|@1929 1929:C2,36|9e13e00280a2205932800005901020019010200581c3e0060100000081c3e00601000000|@1255,129| 1930:C2,56|9e13e002841000088c21a0148b196014ba10200490100006fa21bffcd222200cc4222008d422200494103ffdd422200081c3e00601000000|@1931,65671| 1931:S24|535452554354555245535f28292e6d6b4578536967283329 1932:S72|50415253455f44454328292e70617273654465632833297369676e6174757265537065632833297061727365536967456e7472696573283129746869735369672d646f4578283129 1933:C2,152|9e13e002f606201880a1001b8bd02018de213ffcda213ff8901020014000002688013ff8c4012000d0213ffcd400bff8133f00609202601c9010200d1b3f00599a0360fc7fffbb6388013ffc80a2200122800006ae102001da0120047fffffea9e13e002ae1000088c21a00c8b19600cba102002ac100006fa21bffcee25a004ea012000ea25a00090100016e801200881c520068801200c|@1526,131071|28,5,@1934 48,4,@1568 60,4,@1523 68,5,@1524 1934:C2,664|9e13e002f606201880a1001b8bd02018d0037ffcc4023fe4de213ffcda213ff8ee00a010ee213ff4ec00a014ec213ff0ea00a018ea213fece800a01ce8213fe8e600a020e6213fe4e400a024e4213fe0d600a00cd400a008d200a004d000a0007fffb85488013fe0e2012000e0047ffcd0213ffcfa043fe4fa213ff8d4013ff8133f00609202601c113f00849002220c1b3f005b9a0361747fffbd3f88013ff8de012000d0213ffcc203e010c2213ff8da03e014da213ff4d803e018d8213ff0d603e01cd6213fecd403e020d4213fe8d203e024d2213fe4d603e00cd403e008d203e004d003e0007fffb83288013fe494100008d2012004d00120007fffbd9201000000d001200cc4023ffcee00bfe4ec05e008ea05a000e805e018e605200080a4e11122800003a4100015a410001380a4a0bd3280000a92100017901000171b3f00419a0362707fffa35701000000a410000810800009e401200c901020e91b3f00559a0360547fffb6c701000000a4100008e401200ce204bffce0047fecde0420008c21a00c8b19600cba10200290100006fa21bffcc203e034c2222004da047fe0da2220007fffbcc60100000094100008d2047fe4d0047fe89a1000104000003d01000000d0213ffcd0213ff8d0213ff4d0213ff0d0213fecd0213fe88c21a00888013fe88b1960083b100000ba07600198100006fa21bffc96102001d623200094012000d2012020d222a00084012000ee012018ee20a004ac0120002b3f0031aa056124ea25a008a8012000a6102001e625200ca4012000d824a010a2012000d02460148c21a01c8b19601cba10200690100006fa21bffce0012000e0222000de012004de222004c2012008c2222008da01200cda22200cd8012010d8222010d6012014d6222014d401202881c2a0068801202c|@1949,131071|96,5,@1484 128,4,@1568 136,4,@1779 144,4,@1541 152,5,@1542 232,5,@1484 252,5,@1545 320,4,@1258 328,5,@1260 352,4,@1470 360,5,@1472 424,5,@1537 448,5,@1935 544,4,@799 1935:C2,808|9e13e002f606201880a1001b8bd02018ac10000faa10000da8100008a6100009113f009f900221e47fffbc7901000000ec213ffcea213ff8e8213ff4e6213ff0d4213fec96100013153f009f9402a238d2013fec1b3f005c9a0362e87fffbdfe88013fecd4012004133f00609202601c901020911b3f00599a0360fc7fffba7b0100000080a220012280004ce40120048c21a00c8b19600cba10200290100006fa21bffc233f008ea20462b4e2222004e0012000e02220007fffbc55010000009e1000088c21a00c8b19600cba10200290100006fa21bffc033f009f82006254c2222004de2220007fffbc49010000009a1000088c21a00c8b19600cba10200290100006fa21bffc193f0041980321b8d8222004da2220007fffbc3d0100000094100008d2012004d0012008da01200c7ffff9b0010000007ffff96201000000d6012004d402e008d202a000c402e018ee00a00080a5e11122800003ac100009ac10001780a5a0293280000ad0213ffcd0213ffc9010000b1b3f00419a0362707fffa29c88013ffc10800052e40120009210000b113f004c9002213c1b3f00559a0360547fffb60b88013ffce401200010800049e4213ffce204a008e0046000de04a018c203e00080a06111228000039a1000109a10000180a3600532800039010000008c21a00c8b19600cba10200290100006fa21bffc1b3f009f9a036254da222004d8012000d82220007fffbc00010000009410001292100008113f0061900221e01b3f005b9a0361747fffbc2d01000000d6012004d0213ffcd402e010d4213ff8d202e014d2213ff4c402e018c4213ff0ee02e01cee213fecec02e020ec213fe8ea02e024ea213fe4e802e000e602e004e402e008e202e00c961000119410001292100013901000147fffb71c88013fe494100008d2012008d00120007fffbc7c01000000d00120004000005401000000a410000810800007e4213ffc253f0031a404a124d0213ffc88013ffce4213ffcd4012008133f00609202601c901020a91b3f00599a0360fc7fffb9df88013ffc80a2200122800009d0012000d00120009a0120184000005601000000da01201881c360068801201cda01201881c360068801201c|@1948,131071|32,4,@1936 40,5,@1537 72,4,@1939 84,4,@1554 92,5,@1555 104,4,@1568 116,4,@1523 124,5,@1524 164,4,@1854 184,5,@1537 216,4,@1940 232,5,@1537 264,4,@1253 280,5,@1537 304,5,@1911 312,5,@1907 376,4,@1258 384,5,@1260 404,4,@1358 412,4,@1470 420,5,@1472 504,4,@1940 524,5,@1537 540,4,@1580 548,4,@1541 556,5,@1542 652,5,@1484 672,5,@1545 684,5,@1942 704,4,@799 728,4,@1568 740,4,@1523 748,5,@1524 776,5,@1944 1936:O2|@1580,@1937 1937:O1|@1938 1938:C2,36|9e13e00280a2209132800005901020019010200581c3e0060100000081c3e00601000000|@1255,129| 1939:S18|5374617274206f66207369676e6174757265 1940:O1|@1941 1941:C2,36|9e13e00280a220a932800005901020019010200581c3e0060100000081c3e00601000000|@1255,129| 1942:C2,48|9e13e002841000088c21a00c8b19600cba10200290100006fa21bffcc422200484103fe9c422200081c3e00601000000|@1943,65665| 1943:S14|5369676e61747572654964656e74 1944:C2,1048|9e13e002f606201880a1001b8bd02018c4037ff4ee00a008ec05e000ea00a018e805600080a5211122800003a6100016a610001480a4e0753280000dde213ffcde213ffcda213ff8d0213ff4901000021b3f00419a0362707fffa1ce88013ff4a61000081080000de6012004da213ff8d0213ff492100002113f004c900220501b3f00559a0360547fffb53a88013ff4a6100008e6012004e404fff4e204a010e2213ffce004a014e0213ff8de04a018de213ff4c204a01cc2213ff0da04a020da213fecd804a024d8213fe8d604a00cd404a008d204a004d004a0007fffb67088013fe8d0213ffcd0213ff8d0213ff49610000892013ff4901020017fffb13488013ff48c21a0108b196010ba10200394100006fa21bffcd2012000d222a000d0012004d022a004c4012008c422a008ee012010ec05fffcd6213ffc9210000a90102001da05bfe8f40360009fc6a00088013ffcea012014a81000088c21a00c8b19600cba10200290100006fa21bffc273f005ba604e064e6222004e4057ff0e42220007fffbb0a01000000e8213ffcd4057ff492100008113f0056900223541b3f005b9a0361747fffbb3688013ffce2012018e0047ffcd0213ffcd4012010d201200cd0012008da043fecf40360009fc6a00088013ffcde01201cc203fff4da006008d8036000d6006018d402e00080a2a111228000039210000c9210000a80a260b53280000bd0213ffcd0213ffc901000011b3f00419a0362707fffa15d88013ffc921000081080000ad201202092100001901020f51b3f00559a0360547fffb4cc88013ffc92100008d2012020d6027ff4153f004c9402a050d2027ff0113f005c900222641b3f005c9a0362e87fffbc6101000000d0012020c4023ff08c21a00c8b19600cba10200290100006fa21bffc2f3f009fae05e254ee222004c42220007fffbac201000000ac1000088c21a00c8b19600cba10200290100006fa21bffc2b3f0068aa056348ea222004ec2220007fffbab601000000e8012020d4012000d2053ff41b3f005d9a0360547fffbca101000000e601200ce6213ffc96100008d4012004d2012008d001201c4000004988013ffce4012020d0213ffcd404bff4133f00609202601c901020a91b3f00599a0360fc7fffb8b488013ffc80a2200122800007e2012024d0012000da012024de01202810bfff2b8801202cd4047ff4133f00609202601c9010200d1b3f00599a0360fc7fffb8a40100000080a2200122800022d0012000e0012024de043ff4c203e008da006000d803e018d603200080a2e111228000039410000d9410000b80a2a07532800007d4032000d00120009a100010de01202810bfff0e8801202c80a2a111228000089210200d113f005990022010f40620209fc6a000010000009210200dd2232000d0012000c401202881c0a0068801202ce001202881c420068801202c|@1947,131071|80,4,@1258 88,5,@1260 120,4,@1339 128,4,@1470 136,5,@1472 220,5,@1484 252,5,@1450 368,4,@1535 388,5,@1537 408,4,@1497 416,4,@1541 424,5,@1542 532,4,@1258 540,5,@1260 568,4,@1470 576,5,@1472 596,4,@1339 608,4,@1552 616,4,@1554 624,5,@1555 660,4,@1940 676,5,@1537 708,4,@1652 724,5,@1537 744,4,@1557 752,5,@1559 784,5,@1945 804,4,@1568 816,4,@1523 824,5,@1524 868,4,@1568 880,4,@1523 888,5,@1524 992,4,@1520 1945:C2,88|9e13e0028c21a0188b196018ba10200584100006fa21bffcd620a010d220a00cd420a008d020a004d6012000d620a0008c21a00c8b19600cba10200290100006fa21bffcc422200494103fddd422200081c3e00688012004|@1946,65679| 1946:S28|535452554354555245535f28292e6d6b576865726554797065283529 1947:S56|50415253455f44454328292e706172736544656328332970617273655369676e617475726528332967657457686572655479706573283129 1948:S40|50415253455f44454328292e706172736544656328332970617273655369676e6174757265283329 1949:S79|50415253455f44454328292e70617273654465632833297369676e6174757265537065632833297061727365536967456e7472696573283129746869735369672d646f537472756374757265283129 1950:C2,48|9e13e002841000088c21a00c8b19600cba10200290100006fa21bffcc42220048410201dc422200081c3e00601000000|@1951,65665| 1951:S12|537472756374757265446563 1952:C2,300|9e13e002f606201880a1001b8bd02018d0037ffcc4023fe4ee00a008ec05e000ea00a018e805600080a5211122800003a6100016a610001480a4e0053280003a90102001de213ffcda213ff8c4213ff494100002d2023fe0113f0061900221e01b3f005b9a0361747fffba0988013ff4e6012000d0213ffce404e010e4213ff8e204e014e2213ff4e004e018e0213ff0de04e01cde213fecc204e020c2213fe8da04e024da213fe4d604e00cd404e008d204e004d004e0007fffb4fc88013fe494100008d2012004d00120007fffba5c01000000d00120007ffffe3401000000d0213ffc90102001da0120087fffffc588013ffc8c21a00c8b19600cba10200298100006fa21bffcd0232004d6012000d62320009010000cd401201081c2a0068801201481c3e00601000000|@1953,131071|88,4,@1580 96,4,@1541 104,5,@1542 184,5,@1484 204,5,@1545 216,5,@1942 1953:S74|50415253455f44454328292e70617273654465632833297369676e6174757265537065632833297061727365536967456e7472696573283129746869735369672d736967696473283129 1954:C2,48|9e13e002841000088c21a00c8b19600cba10200290100006fa21bffcc422200484103ff5c422200081c3e00601000000|@1955,65665| 1955:S10|496e636c756465536967 1956:C2,152|9e13e002f606201880a1001b8bd02018de213ffcda213ff8901020014000002688013ff8c4012000d0213ffcd400bff8133f0061920261e09010200d1b3f00599a0360fc7fffb77588013ffc80a2200122800006ae102001da0120047fffffea9e13e002ae1000088c21a00c8b19600cba102002ac100006fa21bffcee25a004ea012000ea25a00090100016e801200881c520068801200c|@1526,131071|28,5,@1957 48,4,@1580 60,4,@1523 68,5,@1524 1957:C2,796|9e13e002f606201880a1001b8bd02018d0037ffcc4023fe4de213ffcda213ff8ee00a010ee213ff4ec00a014ec213ff0ea00a018ea213fece800a01ce8213fe8e600a020e6213fe4e400a024e4213fe0d600a00cd400a008d200a004d000a0007fffb46688013fe0e2012000e0047ffcd0213ffcd4043fe4133f00609202601c901020751b3f00599a0360fc7fffb73688013ffcde012004c203fffcda007fecd8036000961000088c21a00c8b19600cba10200290100006fa21bffcd4032038d4222004d2007fe0d22220007fffb90f01000000c4012004ee00bffcd6213ffcd405ffe492100008113f0061900221e01b3f005b9a0361747fffb93988013ffcec012008ea05bffce8057fe4e6052008e404e000e2052018e004600080a42111228000039e1000129e10001080a3e0b53280000bd0213ffcd0213ffc901000141b3f00419a0362707fff9f6988013ffc9e1000081080000ade01200c92100014901020f51b3f00559a0360547fffb2d888013ffc9e100008de01200cc203fffcfa007fe4fa213ffc9a0120104000006b88013ffc8c21a00c8b19600cba1020029a100006fa21bffcd0236004d8012004d8236000d401200c9210000dd0012008400000a301000000d6012010d402fffcd202bfe4c4026008ee00a000ec026018ea05a00080a5611122800003a8100017a810001580a5200d32800010d0213ffcd0213ffce8026024133f005892026104901000141b3f00389a0360407fff95a688013ffc80a2200132800038d0213ffc10800005e601201488013ffc10800033d0213ffce404fffce204bfe4e2213ffce0046010e0213ff8de046014de213ff4c2046018c2213ff0da04601cda213fecd8046020d8213fe8d6046024d6213fe4d604600cd4046008d2046004d00460007fffb3da88013fe4d4012000d202a004d2213ffcc402a008c4213ff8ee02a00cee213ff4ec02a010ec213ff0ea02a014ea213fece802a018e8213fe8e602a01ce6213fe4e402a020e4213fe0e202a024e2213fdcd602a0009410200592100008113f00a3900220687fff9f6d88013fdc10800004d001200488013ffcd0012004e801201c81c5200688012020|@1964,131071|96,5,@1484 120,4,@1568 132,4,@1523 140,5,@1524 204,5,@1537 232,4,@1580 240,4,@1541 248,5,@1542 320,4,@1258 328,5,@1260 356,4,@1470 364,5,@1472 396,5,@1958 448,5,@1959 520,4,@1507 532,4,@1112 540,5,@1114 656,5,@1484 752,4,@1961 760,5,@1265 1958:C2,248|9e13e002f606201880a1001b8bd02018c4037ffcee00bffcd205ffecd0026000ec0220388c21a00c8b19600cba10200290100006fa21bffcec222004ec05ffe0ec222000aa10000fa810000d7fffb86101000000de053ffcda03fffcea213ffce8213ff8d4037fe492100008113f0061900221e01b3f005b9a0361747fffb88a88013ff8d8012000d0213ffcd4033fec133f005692026354901020b51b3f00599a0360fc7fffb66288013ffc80a220012280000696102001da0120047fffffd29e13e002961000088c21a00c8b19600cba10200294100006fa21bffcd622a004d2012000d222a0009010000ac401200881c0a0068801200c|@1526,131071|76,5,@1537 108,4,@1580 116,4,@1541 124,5,@1542 144,4,@1497 156,4,@1523 164,5,@1524 1959:C2,56|9e13e002841000088c21a0148b196014ba10200490100006fa21bffcd222200cc4222008d422200494103ff1d422200081c3e00601000000|@1960,65671| 1960:S26|535452554354555245535f28292e6d6b53686172696e67283329 1961:O1|@1962 1962:C2,44|9e13e002f606201880a1001b8bd02018c402200c113f00a3900220b89a100002f403600081c6a00401000000|@1264,131071|20,4,@1963 1963:S42|73686172696e67202e2e2e20616e64202e2e2e206973206e6f7420616c6c6f77656420696e204d4c3937 1964:S77|50415253455f44454328292e70617273654465632833297369676e6174757265537065632833297061727365536967456e7472696573283129746869735369672d646f53686172696e67283129 1965:C2,112|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffcd0037ff081c3e00601000000da213ff8fa022000fa213ff4d00220047ffffff288013ff48c21a00c8b19600cba1020029e100006fa21bffcd023e004da012000da23e0009010000fde01200881c3e0068801200c|@1966,161| 1966:S15|4c6973742e40283229617070283129 1967:S57|50415253455f44454328292e70617273654465632833297369676e6174757265537065632833297061727365536967456e7472696573283129 1968:S39|50415253455f44454328292e70617273654465632833297369676e617475726553706563283329 1969:O1|@1970 1970:C2,36|9e13e00280a2209532800005901020019010200581c3e0060100000081c3e00601000000|@1255,129| 1971:C2,1968|9e13e002f606201880a1001b8bd02018da213ffcd2213ff8d0213ff4c40360008c21a00c88013ff48b19600cba10200290100006fa21bffcee00a01cee2220042d3f00a5ac05a270ec222000ac10000f7fffb76e01000000ec213ffcd4213ff8d6012004153f00a59402a2b8d2013ff81b3f005c9a0362e87fffb8f688013ff88c21a00c8b19600cba10200290100006fa21bffc2b3f0060aa0562b4ea222004e8012000e82220007fffb75801000000a61000088c21a00c8b19600cba10200290100006fa21bffc253f00a5a404a2e0e4222004e62220007fffb74c01000000d0213ffcd401200c133f00609202601c9010208d1b3f00599a0360fc7fffb55a88013ffc80a2200122800026d4012010d00120009a012014400001db01000000e0012010de042008c203e000da042018d803600080a3211122800003961000019610000c80a2e0293280000bd0213ffcd0213ffc901000101b3f00419a0362707fff9da388013ffc961000081080018ae201200092100010113f004c9002213c1b3f00559a0360547fffb11188013ffc96100008e20120001080018090100011133f00609202601c9010204d1b3f00599a0360fc7fffb52c0100000080a22001228000b38c21a00ce2012010e0046010e0213ffcde046014de213ff8c2046018c2213ff4da04601cda213ff0d8046020d8213fecd6046024d6213fe8d604600cd4046008d2046004d00460007fffb23b88013fe8d0213ffcd0213ff8d0213ff4d401200cd0213ff0d0213fecd0213fe8a810000892013fe8901020017fffacfb88013fe88c21a0108b196010ba102003a6100006fa21bffc253f00aaa404a0f0e424e000e2012008e224e008e002a004e024e0049e01200cc2012004c223e0009a01200ce62360049801200cd602a008d62320088c21a0108b196010ba10200392100006fa21bffcd001200cd0226000c4012010c4226004ee012014ee226008ec01202cea05a0008c21a00c8b19600cba10200290100006fa21bffce6056010e6222004e4012018e4222000a21000097fffb6c601000000e8213ffce2213ff894100008d2012028901000119a100016400001e488013ff8e0012030de042008c203e000da042018d803600080a3211122800003961000019610000c80a2e0413280000bd0213ffcd0213ffc901000101b3f00419a0362707fff9d2588013ffc961000081080000b8c21a00c92100010113f004c900221241b3f00559a0360547fffb09388013ffc961000088c21a00c8b19600cba10200290100006fa21bffc173f008e9602e2b4d6222004d4012024d42220007fffb6950100000094100008d2012034d0012004da0120387fffff0e9e13e0028c21a00c8b19600cba10200292100006fa21bffc84102001c4226004d0226000ee012034ec05e008ea05a000e805e018e605200080a4e11122800003a4100015a410001380a4a0293280000bd2213ffcd2213ffc901000171b3f00419a0362707fff9cee88013ffca41000081080000bd601200c92100017113f004c9002213c1b3f00559a0360547fffb05c88013ffca4100008d601200c94102001d2012000d0012004400004a301000000a2100008108000c4880120248b19600cba10200290100006fa21bffc233f00aaa2046168e2222004e0012000e02220007fffb65601000000d401201092100008113f0061900221e01b3f005b9a0361747fffb68301000000d0213ffcd4012010133f00609202601c901020d11b3f00599a0360fc7fffb45c88013ffc80a22001228000888c21a008de012014c203e008da006000d803e018d603200080a2e111228000039410000d9410000b80a2a0d53280001ed401201890102029400004b4010000008c21a0148b196014ba10200492100006fa21bffc84102001c422600cae102001ee2260082d000083ac05a3d8ec226004d02260008c21a0108b196010ba10200394100006fa21bffcd222a008aa102001ea22a004a8103fe5e822a0001080002fde012014d202a0008c21a00c8b19600cba10200290100006fa21bffcc4026014c4222004ee012004ee2220007fffb60e01000000ec012014ea05a008e8056000e605a018e404e00080a4a11122800003a2100014a2100012e002a000d0213ffcd2042018901000117fff9c5a88013ffc80a2200122800009d4012000d00120009a01201c4000009701000000941000081080000988012004d2012018d0012014da01201c7ffffe6f9e13e0029410000888012004de012014c203e008da006000d803e018d603200080a2e111228000039210000d9210000b80a260d53280000bd4213ffcd4213ffc9010000f1b3f00419a0362707fff9c5588013ffc921000081080000a8c21a0089210000f901020a51b3f00559a0360547fffafc488013ffc921000088c21a0088b1960083b100000ba07600194100006fa21bffc92102001d222a0008c21a0148b196014ba102004a2100006fa21bffcd424600cd0012004d0246008c4012000c4246004ae103ff9ee24600010800016d0213ffc8b1960083b100000ba0760019e100006fa21bffc82102001c223e0008c21a0108b196010ba102003a2100006fa21bffcde246008da012000da24600498103fe1d8246000d0213ffc88013ffcd0213ffcd0213ff8d0213ff4d0213ff0d0213fecd0213fe8d0213fe4d0213fe088013fe088012024901000119a012018400004dc01000000d601200c81c2e0068801201c|@2003,131071|64,4,@1972 80,5,@1537 100,4,@1974 112,4,@1554 120,5,@1555 148,4,@1573 168,5,@1537 200,4,@1975 216,5,@1537 232,4,@1568 244,4,@1523 252,5,@1524 280,5,@1977 344,4,@1258 352,5,@1260 376,4,@1358 384,4,@1470 392,5,@1472 416,4,@1568 428,4,@1523 436,5,@1524 524,5,@1484 572,5,@1450 600,4,@1996 752,5,@1537 784,5,@1979 848,4,@1258 856,5,@1260 880,4,@1356 888,4,@1470 896,5,@1472 928,4,@1854 948,5,@1537 1068,4,@1258 1076,5,@1260 1100,4,@1358 1108,4,@1470 1116,5,@1472 1144,5,@1987 1180,4,@1997 1200,5,@1537 1216,4,@1580 1224,4,@1541 1232,5,@1542 1248,4,@1568 1260,4,@1523 1268,5,@1524 1340,5,@1992 1384,4,I48 1488,5,@1537 1548,5,@1256 1576,5,@1977 1680,4,@1258 1688,5,@1260 1716,4,@1470 1724,5,@1472 1948,5,@1999 1972:O1|@1973 1973:C2,36|9e13e00280a2208d32800005901020019010200581c3e0060100000081c3e00601000000|@1255,129| 1974:S29|737472756374206f722066756e63746f72206170706c69636174696f6e 1975:O1|@1976 1976:C2,36|9e13e00280a220c932800005901020019010200581c3e0060100000081c3e00601000000|@1255,129| 1977:C2,392|9e13e002f606201880a1001b8bd02018d0213ffcd0213ff8d0213ff4c4037ff8d0213ff0d0213fecd0213fe8a810000fa610000da4100008e200a004e000a00892013fe8901020017fffab5788013fe88c21a0108b196010ba1020039e100006fa21bffc1b3f00a69a0360ccda23e000d2012008d223e008e223e0049001200cc4012004c4222000ae01200cde25e004ac01200ce025a0088c21a0108b196010ba102003aa100006fa21bffce201200ce2256000e0012010e0256004de012014de2560088c21a00c8b19600cba10200290100006fa21bffc1b3f008e9a0362b4da222004e42220007fffb52701000000e8213ffce6213ff894100008d204fffc90100015da04e0004000004588013ff8d0213ffc901020294000039c88013ffc8c21a0148b196014ba10200498100006fa21bffc96102001d623200c94102001d423200813000083920263d8d2232004d02320008c21a0108b196010ba10200390100006fa21bffcd8222008c4012000c4222004ae103fe5ee222000ec01200881c5a00688012024|@1995,131071|72,5,@1450 100,4,@1978 216,4,@1854 232,5,@1537 264,5,@1979 280,5,@1992 324,4,I48 1978:C2,92|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d0213ff4da036008f40360009fc6a00088013ff480a2200132800009c4012008c4012004d0012000da00a004de012008f403600081c6a0048801200c81c0a0068801200c|@1463,131071| 1979:C2,64|9e13e002f606201880a1001b8bd02018d2213ffcda213ff8d0213ff4d4213ff0de213fec901020019a013ffc4000000c88013fecc401200081c0a00688012014|@1991,131071|44,5,@1980 1980:C2,620|9e13e002f606201880a1001b8bd02018c4037ffcee00a0008c21a00c8b19600cba10200290100006fa21bffcd205e024d2222004ec037ff4ec222000aa10000fa810000d7fffb4b201000000de052000da03e008d2036000c403e018ee00a00080a5e11122800003a6100009a610001780a4e0e53280000ee6036000ea213ffce8213ff89010000f1b3f00419a0362707fff9b1888013ff890102001da012000de01200410bfffd888012008e400a00080a4a11122800003a2100013a2100012e0053ffcc2042000ea213ffce8213ff8d0213ff4d2006020901000117fff9ae788013ff480a220012280001ada012004da012004d4012000d2036000d0037ff8da037ffc4000006101000000d0213ffc90102001da0120047fffffba88013ffc8c21a00c8b19600cba10200298100006fa21bffcd0232004d6012000d62320009010000cd401200c81c2a00688012010d8036000d6032008d402e000d2032018d002600080a22111228000038410000a84100008133f0072920260c0901000027fff9abe0100000080a220012280003590102001c4012004ee00a000ec05e010ec213ffcea05e014ea213ff8e805e018e8213ff4e605e01ce6213ff0e405e020e4213fece205e024e2213fe8d605e00cd405e008d205e004d005e0007fffaf8888013fe8e0012004de043ffcd0213ffcd6012000d404200092102005d0043ff8da03ffe4f40360009fc6a00088013ffcd20120007ffff43d01000000d0213ffc90102001da0120087fffff7688013ffc8c21a00c8b19600cba10200282100006fa21bffcd0206004da012000da20600090100001d801201081c3200688012014c401200881c0a0068801200c|@1990,131071|68,5,@1537 136,4,@1258 144,5,@1260 220,5,@1256 260,5,@1981 372,4,@1684 384,5,@1256 476,5,@1484 532,5,@1917 1981:C2,992|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d0213ff4d2213ff0d4213fecfa022000fa213fe894100009133f00609202601c901020851b3f00599a0360fc7fffb22788013fe880a220012280000ad40120089a012014400000e801000000de012014353f00a1b406a09481c6a00488012018133f00609202601c901020511b3f00599a0360fc7fffb2150100000080a22001228000cd01000000c4012008ee00a010ee213ffcec00a014ec213ff8ea00a018ea213ff4e800a01ce8213ff0e600a020e6213fece400a024e4213fe8d600a00cd400a008d200a004d000a0007fffaf2488013fe8d0213ffcd0213ff8d0213ff4e201200cd0213ff0d0213fecd0213fe8a010000892013fe8901020017fffa9e488013fe88c21a0108b196010ba1020039e100006fa21bffc033f00a9820060ccc223e000da012008da23e008d8046004d823e0049601200cd4012004d422e0009201200cde2260049001200cc4046008c42220088c21a0108b196010ba102003ae100006fa21bffcec01200cec25e000ea012010ea25e004e8012014e825e008e6012028e404e0008c21a00c8b19600cba10200290100006fa21bffcde04a010de222004c201201cc2222000961000177fffb3af01000000e0213ffc94100008d20120209010000b9a1000137ffffece88013ffcd4012024d202a008c4026000ee02a018ec05e00080a5a11122800003aa100002aa10001680a560413280000bd0213ffcd0213ffc9010000a1b3f00419a0362707fff9a0f88013ffcaa1000081080000bd0213ffc9210000a113f004c900221241b3f00559a0360547fffad7d88013ffcaa100008d0213ffcd0213ff8d0213ff48c21a01088013ff48b196010ba102003aa100006fa21bffc293f00a9a8052144e8256000e6012020e6256008e401202ce4256004a2012000ea246000a0012000de012024de24200482012000da012028da2060088c21a0108b196010ba10200398100006fa21bffcd6012000d6232000d4012004d4232004d2012008d22320088c21a00c8b19600cba10200290100006fa21bffc053f008e8400a2b4c4222004ee012030ee2220007fffb35c0100000094100008d20120349010000cda01203c7ffffe7c01000000ec012034ea05a008e8056000e605a018e404e00080a4a11122800003a2100014a210001280a460293280000bd0213ffcd0213ffc901000161b3f00419a0362707fff99bd88013ffca21000081080000bd601201492100016113f004c9002213c1b3f00559a0360547fffad2b88013ffca2100008d601201494102005d2012000d0012010de012044353f00a9b406a1a881c6a00488012048113f003190022124c401201481c0a00688012018|@1989,131071|48,4,@1568 60,4,@1523 68,5,@1524 92,5,@1982 104,4,@1950 120,4,@1568 132,4,@1523 140,5,@1524 228,5,@1484 276,5,@1450 304,4,@1985 456,5,@1537 484,5,@1979 548,4,@1258 556,5,@1260 580,4,@1356 588,4,@1470 596,5,@1472 644,4,@1986 768,4,@1854 788,5,@1537 812,5,@1979 876,4,@1258 884,5,@1260 908,4,@1358 916,4,@1470 924,5,@1472 956,4,@1987 972,4,@799 1982:C2,152|9e13e002f606201880a1001b8bd02018de213ffcda213ff8901020014000002688013ff8c4012000d0213ffcd400bff4133f00a5920262709010200d1b3f00599a0360fc7fffb12888013ffc80a2200122800006ae102001da0120047fffffea9e13e002ae1000088c21a00c8b19600cba102002ac100006fa21bffcee25a004ea012000ea25a00090100016e801200881c520068801200c|@1526,131071|28,5,@1983 48,4,@1972 60,4,@1523 68,5,@1524 1983:C2,924|9e13e002f606201880a1001b8bd02018c4037ff4de213ffcda213ff8ee00a010ee213ff4ec00a014ec213ff0ea00a018ea213fece800a01ce8213fe8e600a020e6213fe4e400a024e4213fe0d600a00cd400a008d200a004d000a0007fffae1a88013fe0e2012000e0047ffcde042000821000088c21a00c8b19600cba10200290100006fa21bffcda03e00cda222004d8047ff0d82220007fffb2cf01000000c2213ffcfa047ff4fa213ff8d4013ff892100008113f0061900221e01b3f005b9a0361747fffb2f988013ff8d6012000d0213ffcd402e010d4213ff8d202e014d2213ff4c402e018c4213ff0ee02e01cee213fecec02e020ec213fe8ea02e024ea213fe4e802e000e602e004e402e008e202e00c961000119410001292100013901000147fffade888013fe494100008d2012004d00120007fffb34801000000e001200cde043ff4c203e008da006000d803e018d603200080a2e111228000039410000d9410000b80a2a0c9328000039410200194102005d4213ffc9410000f133f00609202601c901020bd1b3f00599a0360fc7fffb0a788013ffc80a2200122800004d40120101080000fd2012010d402bff4133f00609202601c901020c91b3f00599a0360fc7fffb09a0100000080a2200132800004d201201010800018010000008c21a00c8b19600cba10200290100006fa21bffc053f005b8400a064c4222004ee027ff0ee2220007fffb27201000000ec01201094100008d205bff4d005bff8da05bffc7ffff5e8010000009410000810800005d2012010153f00319402a124d2012010d0027ff4c4022008ee00a000ec022018ea05a00080a5611122800003a8100017a810001580a520b53280000ad4213ffcd4213ffc1b3f00419a0362707fff98cd88013ffca81000081080000ae8012014d2027ff4901020f51b3f00559a0360547fffac3c88013ffca8100008e8012014d4053ff0d2053ff4d0053ff8da053ffc7ffffac101000000d0213ffcd0213ff8d0213ff4d0213ff0d0213fecd0213fe88c21a00888013fe88b1960083b100000ba076001a6100006fa21bffca4102001e424e000a2012000e0012028e02460009e012000c2012020c223e0049a012000d023600898012000d601201cd623200c94012000e622a01092012000d0012018d02260148c21a01c8b19601cba10200690100006fa21bffcc4012000c4222000ee012004ee222004ec012008ec222008ea01200cea22200ce8012010e8222010e6012014e6222014e401203081c4a00688012034|@1984,131071|92,5,@1484 152,5,@1537 180,4,@1580 188,4,@1541 196,5,@1542 292,5,@1484 312,5,@1545 384,4,@1568 396,4,@1523 404,5,@1524 436,4,@1568 448,4,@1523 456,5,@1524 504,4,@1535 524,5,@1537 552,5,@1935 572,4,@799 636,4,@1258 644,5,@1260 672,4,@1470 680,5,@1472 712,5,@1971 1984:S49|50415253455f44454328292e7061727365446563283329737472756374757265446563283329646f537472446563283129 1985:C2,92|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d0213ff4da036008f40360009fc6a00088013ff480a2200132800009c4012008c4012004d0012000da00a004de012008f403600081c6a0048801200c81c0a0068801200c|@1463,131071| 1986:C2,72|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d0213ff4da036008f40360009fc6a00088013ff4c4012004d0012000da00a004de012008f403600081c6a0048801200c|@1865,131071| 1987:C2,60|9e13e002841000088c21a0188b196018ba10200590100006fa21bffcd4222010d622200cc4222008d22220049610200dd622200081c3e00601000000|@1988,65679| 1988:S27|535452554354555245535f28292e6d6b4c6f63616c646563283429 1989:S38|50415253455f44454328292e7061727365446563283329737472756374757265446563283329 1990:S42|50415253455f44454328292e706172736544656328332973747244656328332967657444656373283129 1991:S32|50415253455f44454328292e7061727365446563283329737472446563283329 1992:C2,436|9e13e002f606201880a1001b8bd02018de213ffcd0213ff8c6213ff4053f00a98400a3dac4213ff0ae102011ee213fec86013fec8c21a00888013fec8b1960083b100000ba076001ac100006fa21bffcaa102001ea25a000b8222001b9172004a8072001ec213ffc9410200192102101901000141b0000829a036338f40360009fc6a00088013ffce6012010e62220008c21a0088b1960083b100000ba076001a4100006fa21bffcd024a0008c21a00c8b19600cba102002a2100006fa21bffc213f0030a004212ce0246000e62460048c21a0088b1960083b100000ba0760019e100006fa21bffce223e0008c21a0148b196014ba10200490100006fa21bffce422200cc2012000c2222008de2220049a103ffdda222000c601200cd801201481c3200688012018d602200080a2e0113280001ef4062020d0213ffc92103ffdd00120007fff7c8688013ffc92100008113f00aa900220807fff7b11010000008c21a0108b196010ba10200394100006fa21bffcd022a008133f000f920263bcd222a004113ee008900221fcd022a0009010000af40620209fc6a0000100000090102001f40620209fc6a0000100000090102001|@1994,131071|28,4,$1992+298 116,4,I11 192,4,@737 324,5,@509 336,4,@1993 344,5,@496 376,4,@397 388,4,@24 1993:S16|486173685461626c652e686173683a20 1994:S21|486173685461626c652e686173684d616b65283129 1995:S47|50415253455f44454328292e706172736544656328332973747275637456616c283329737472756374456e64283129 1996:C2,92|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d0213ff4da036008f40360009fc6a00088013ff480a2200132800009c4012008c4012004d0012000da00a004de012008f403600081c6a0048801200c81c0a0068801200c|@1463,131071| 1997:O1|@1998 1998:C2,36|9e13e00280a220d132800005901020019010200581c3e0060100000081c3e00601000000|@1255,129| 1999:C2,256|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d0213ff4d4037ffc133f00609202601c901020bd1b3f00599a0360fc7fffaec988013ff480a2200122800012c4012004c4012004d400bfecd200bffcd000bff8da00a0007ffff425010000009410200192100008d00120004000002b01000000da012004de01200810bfffe18801200cd400bffc133f00609202601c901020c91b3f00599a0360fc7fffaeae0100000080a2200122800012d0012000ee012004d405ffecd205fffcd005fff8da05e0007ffff40a010000009410200592100008d00120004000001001000000da012004de01200810bfffc68801200cee01200881c5e0068801200c|@2002,131071|32,4,@1568 44,4,@1523 52,5,@1524 92,5,@1935 112,5,@2000 140,4,@1568 152,4,@1523 160,5,@1524 200,5,@1935 220,5,@2000 2000:C2,56|9e13e002841000088c21a0148b196014ba10200490100006fa21bffcd422200cd2222008c422200494102011d422200081c3e00601000000|@2001,65671| 2001:S32|535452554354555245535f28292e6d6b536967436f6e73747261696e74283329 2002:S51|50415253455f44454328292e706172736544656328332973747275637456616c283329646f436f6e73747261696e7473283129 2003:S35|50415253455f44454328292e706172736544656328332973747275637456616c283329 2004:S49|50415253455f44454328292e706172736544656328332966756e63746f72446563283329646f46756e6374446563283129 2005:C2,48|9e13e002841000088c21a00c8b19600cba10200290100006fa21bffcc422200484102009c422200081c3e00601000000|@2006,65665| 2006:S10|46756e63746f72446563 2007:S36|50415253455f44454328292e706172736544656328332966756e63746f72446563283329 2008:O1|@2009 2009:C2,36|9e13e00280a2209932800005901020019010200581c3e0060100000081c3e00601000000|@1255,129| 2010:C2,88|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d0213ff4d2213ff0d4213fec901000091b3f00419a0362707fff966888013fec9a0120104000000e01000000de012010353f00acb406a0cc81c6a00488012014|@2019,131071|40,4,@1258 48,5,@1260 60,5,@2011 72,4,@2017 2011:C2,152|9e13e002f606201880a1001b8bd02018de213ffcda213ff8901020014000002688013ff8c4012000d0213ffcd400bff4133f00609202601c9010200d1b3f00599a0360fc7fffade488013ffc80a2200122800006ae102001da0120047fffffea9e13e002ae1000088c21a00c8b19600cba102002ac100006fa21bffcee25a004ea012000ea25a00090100016e801200881c520068801200c|@1526,131071|28,5,@2012 48,4,@1568 60,4,@1523 68,5,@1524 2012:C2,596|9e13e002f606201880a1001b8bd02018c4037ff4de213ffcda213ff8ee00a010ee213ff4ec00a014ec213ff0ea00a018ea213fece800a01ce8213fe8e600a020e6213fe4e400a024e4213fe0d600a00cd400a008d200a004d000a0007fffaad688013fe0e2012000d0213ffcfa047ff4fa213ff8d4013ff8133f00609202601c113f00849002220c1b3f005b9a0361747fffafc288013ff8e0012000d0213ffcde042010de213ff8c2042014c2213ff4da042018da213ff0d804201cd8213fecd6042020d6213fe8d4042024d4213fe4d604200cd4042008d2042004d00420007fffaab588013fe494100008d2012004d00120007fffb01501000000d201200cd0027ff4c4022008ee00a000ec022018ea05a00080a5611122800003a8100017a810001580a520b532800009d2027ff41b3f00419a0362707fff95dc01000000a810000810800009e801200c901020f51b3f00559a0360547fffa94c01000000a8100008e801200ce6053ffce404e0008c21a00c8b19600cba10200290100006fa21bffce204a028e2222004e0053ff0e02220007fffaf4c0100000094100008d2053ff4d0053ff89a1000137ffff2c301000000d0213ffcd0213ff8d0213ff4d0213ff08c21a00888013ff08b1960083b100000ba0760019e100006fa21bffc033f00ac82006058c223e0009a012000d8012018d823600096012000d4012010d422e00492012000de22600884012000d020a00c8c21a0148b196014ba10200490100006fa21bffcee012000ee222000ec012004ec222004ea012008ea222008e801200ce822200ce601202081c4e00688012024|@2016,131071|92,5,@1484 120,4,@1568 128,4,@1779 136,4,@1541 144,5,@1542 224,5,@1484 244,5,@1545 304,4,@1258 312,5,@1260 336,4,@1470 344,5,@1472 404,5,@1537 428,5,@1935 480,4,@2013 2013:O4|@2015,@2014,0,0 2014:S9|554e444546494e4544 2015:O3|0,@736,@615 2016:S49|50415253455f44454328292e70617273654465632833297369676e6174757265446563283329646f536967446563283129 2017:C2,48|9e13e002841000088c21a00c8b19600cba10200290100006fa21bffcc422200484102015c422200081c3e00601000000|@2018,65665| 2018:S12|5369676e6174757265446563 2019:S38|50415253455f44454328292e70617273654465632833297369676e6174757265446563283329 2020:O1|@2021 2021:C2,36|9e13e00280a2208932800005901020019010200581c3e0060100000081c3e00601000000|@1255,129| 2022:S38|50415253455f44454328292e70617273654465632833297061727365546f7044656373283129 2023:S23|50415253455f44454328292e7061727365446563283329 2024:O3|@1491,@2026,@2025 2025:O3|@1491,@2027,@1684 2026:O3|@1491,@2008,@2020 2027:O3|@1491,@2029,@2028 2028:O1|@2031 2029:O1|@2030 2030:C2,36|9e13e00280a2208532800005901020019010200581c3e0060100000081c3e00601000000|@1255,129| 2031:C2,36|9e13e00280a2205132800005901020019010200581c3e0060100000081c3e00601000000|@1255,129| 2032:O3|@1491,@2033,@1535 2033:O3|@1491,@1573,@1975 2034:O3|@1491,@1774,@1854 2035:O3|@1491,@1635,@1636 2036:O3|@1491,@1684,@2029 2037:O3|@1491,@1580,@2038 2038:O1|@2039 2039:C2,36|9e13e00280a2204d32800005901020019010200581c3e0060100000081c3e00601000000|@1255,129| 2040:O3|@1491,@2041,@2029 2041:O3|@1491,@1253,@1684 2042:O3|@1491,@1854,@1652 2043:O3|@1491,@1909,@1253 2044:O3|@1491,@1909,@1854 2045:O3|@1491,@2044,@1652 2046:O3|@1491,@2047,@1652 2047:O3|@1491,@1635,@1535 2048:O3|@1491,@1650,@1851 2049:O3|@1491,@1928,@1535 2050:O3|@1491,@2051,@1785 2051:O1|@2052 2052:C2,36|9e13e00280a2202532800005901020019010200581c3e0060100000081c3e00601000000|@1255,129| 2053:O3|@1491,@2054,@1785 2054:O1|@2055 2055:C2,36|9e13e00280a2207132800005901020019010200581c3e0060100000081c3e00601000000|@1255,129| 2056:O3|@1491,@1928,@1757 2057:O3|@1491,@1793,@1573 2058:O3|@1491,@1636,@2059 2059:O1|@2060 2060:C2,36|9e13e00280a220dd32800005901020019010200581c3e0060100000081c3e00601000000|@1255,129| 2061:O3|@1491,@1635,@1253 2062:O3|@1491,@2061,@1636 2063:O3|@1491,@1253,@1854 2064:O3|@1491,@1573,@1712 2065:O3|@1491,@1580,@1688 2066:O3|@1491,@1928,@1670 2067:C2,168|9e13e002f606201880a1001b8bd020188c21a00c8b19600cba10200284100006fa21bffc2f3f00adae05e258ee20a000d420a0048c21a0108b196010ba102003ae100006fa21bffc2d3f00aeac05a0f4ec25e000c425e008d425e0048c21a00c8b19600cba10200294100006fa21bffc2d3f00d0ac05a234ec22a000ee22a00496100009aa10000a150000839402a3d892100008901000159a100002f403600081c6a00401000000|@2242,131071|36,4,@2068 72,4,@2070 112,4,@2241 136,4,I48 2068:C2,584|9e13e002f606201880a1001b8bd0201880a2600132800005c40260049010200181c3e0060100000080a0a00132800019b822e001b822e001811f200034800009ae100008ee036004113f005690022110da05e00cf403600081c6a004010000008c21a00c8b19600cba10200290100006fa21bffcd6222004ec026000ec2220009a100017f403600081c6a00401000000811f200034800009de213ffcee036004113f005690022110da05e00cf403600081c6a00401000000da213ff8d0213ff4d4213ff0d6213fecc4213fe8fa026000fa213fe4921020b19010000a1b0000839a0360d8f40360009fc6a00088013fe480a2200122800005921020edae1020051080000aac1de004d001200c1b0000839a0360d8f40360009fc6a00001000000ae100008ac1de004ea012014e8056004ec213ffc113f00259002227cda052018f40360009fc6a00088013ffc8c21a00c8b19600cba10200290100006fa21bffce601200ce6222004e4012004e4222000da012014f40360009fc6a00001000000e2012018e00460048c21a00c8b19600cba10200290100006fa21bffc9e102001de222004c2012000c2222000da042000f40360009fc6a00001000000da012018d8036004d0012010da03200cf40360009fc6a00001000000d6012018d402e00490102001da02a008f40360009fc6a00001000000d2012018d0026004c4022000113f001f9002225c9a100002f40360009fc6a00001000000ee01200cb825e001b91f2004ac07200196100016d4012010d2012008d0012014da012018de01201c10bfff7188012020|@2069,131071|72,4,@1478 160,4,@1478 220,4,I24 268,4,I24 308,4,@499 512,4,@485 2069:S45|535452554354555245535f28292e646973706c617953747275637473283329646973706c61794c697374283429 2070:C2,4592|9e13e002f606201880a1001b8bd02018b8226001811f200034800009c4022000c4036004113f005690022110da00a00cf403600081c6a004010000008088a001228000200100000080a0bfdd2680001d0100000080a0a0213480001a010000002f3f00aeae05e16eba00a021fa05c01d81c5c01d0100000000000b820000016e00000186000003ae000003c600000a4a00000fa20000084e0000061200000046000009460000074200000d8e000010b6000002a20000108e00000062000004e2ec036004113f00b290022300da05a00cf403600081c6a004010000008c21a0108b196010ba102003ac100006fa21bffc2b3f00b2aa056310ea25a000da25a008e8036004e825a004de213ffcda213ff8d2213ff4fa022004fa213ff0ec213fec113f0025900222b4da052018f40360009fc6a00088013fece601200ce404e004113f004c90022068da04a00cf40360009fc6a00001000000e201200ce0046004113f001f9002225cda042000f40360009fc6a000010000008c21a00c8b19600cba1020029e100006fa21bffc033f00b382006158c223e000da012000da23e004d801200cd6012008153f004c9402a0e8d20120049010000fda032008f40360009fc6a00001000000d601200cd402e00490102001da02a008de012010f403600081c6a00488012014ec036004d0022004da05a00cf403600081c6a00401000000ec036004de213ffcda213ff8d2213ff4fa022004fa213ff0113f00249002228cda05a018f40360009fc6a00088013ff0ea012008e8056004113f004c90022034da05200cf40360009fc6a00001000000e6012008e404e004113f001f9002225cda04a000f40360009fc6a000010000008c21a00c8b19600cba102002a2100006fa21bffc213f00b3a00421e4e0246000de012008de246004d6012004150000839402a3d8d201200090100011da03e008f40360009fc6a00001000000c2012008da006004113f001f9002225cda036000f40360009fc6a00001000000d8012008d6032004113f004c9002213cda02e00cf40360009fc6a00001000000d4012008d202a00490102001da026008de01200cf403600081c6a004880120108c21a0108b196010ba102003ac100006fa21bffc2b3f00b3aa05625cea25a000da25a008e8036004e825a004de213ffcda213ff8d2213ff4fa022004fa213ff0ec213fec113f0025900222b4da052018f40360009fc6a00088013fece601200ce404e004113f004c90022230da04a00cf40360009fc6a00001000000e201200ce0046004113f001f9002225cda042000f40360009fc6a000010000008c21a00c8b19600cba1020029e100006fa21bffc033f00b3820063a4c223e000da012000da23e004d801200cd6012008153f004c9402a0e8d20120049010000fda032008f40360009fc6a00001000000d601200cd402e00490102001da02a008de012010f403600081c6a00488012014ec036004d0022004da05a00cf403600081c6a00401000000ec036004de213ffcda213ff8d2213ff4fa022004fa213ff0113f00249002228cda05a018f40360009fc6a00088013ff0ea012008e8056004113f004c9002233cda05200cf40360009fc6a00001000000e6012008e404e004113f001f9002225cda04a000f40360009fc6a000010000008c21a00c8b19600cba102002a2100006fa21bffc213f00b4a004202ce0246000de012008de246004d6012004150000839402a3d8d201200090100011da03e008f40360009fc6a00001000000c2012008da006004113f001f9002225cda036000f40360009fc6a00001000000d8012008d6032004113f004c9002213cda02e00cf40360009fc6a00001000000d4012008d202a00490102001da026008de01200cf403600081c6a00488012010ec036004de213ffcda213ff8d2213ff4fa022008fa213ff0fa02200cfa213fec113f00259002227cda05a018f40360009fc6a00088013fecea01200ce8056004113f004c90022288da05200cf40360009fc6a00001000000e601200ce404e004113f00249002228cda04a000f40360009fc6a00001000000e201200ce0046004fa04200cfa213ffc133f00b3920260f8d00120047fff755a88013ffcda012000f40360009fc6a00001000000de012010c203e004113f001f9002225cda006000f40360009fc6a00001000000da01200cb8236001b91f200498072001d6012010901020014000044f0100000094102005d4213ffcd202e00496100008941000099210000cd00120044000058a88013ffcd0012010c402200490102001da00a008de012014f403600081c6a00488012018ec036004de213ffcda213ff8d2213ff4fa022008fa213ff0fa02200cfa213fec113f00259002227cda05a018f40360009fc6a00088013fecea01200ce8056004113f004c90022300da05200cf40360009fc6a00001000000e601200ce404e004113f00249002228cda04a000f40360009fc6a00001000000e201200ce0046004fa04200cfa213ffc133f00b3920260f8d00120047fff750e88013ffcda012000f40360009fc6a00001000000de012010c203e004113f001f9002225cda006000f40360009fc6a00001000000da01200cb8236001b91f200498072001d601201090102001400004030100000094102005d4213ffcd202e00496100008941000099210000cd00120044000053e88013ffcd0012010c402200490102001da00a008de012014f403600081c6a004880120188c21a0108b196010ba102003ac100006fa21bffc2b3f00bfaa0560c0ea25a000da25a008e8036004e825a004de213ffcda213ff8d2213ff4fa022004fa213ff0ec213fec113f0025900222b4da052018f40360009fc6a00088013fece601200ce404e004113f004c900222e4da04a00cf40360009fc6a00001000000e201200ce0046004113f001f9002225cda042000f40360009fc6a000010000008c21a00c8b19600cba1020029e100006fa21bffc033f00bf820063a8c223e000da012000da23e004d801200cd6012008153f004c9402a0e8d20120049010000fda032008f40360009fc6a00001000000d601200cd402e00490102001da02a008de012010f403600081c6a00488012014ec036004de213ffcda213ff8d2213ff4fa022004fa213ff0fa022008fa213fec113f001f9002225cda05a018f40360009fc6a00088013fecea01200ce8056004fa05200cfa213ffc921020a1d00120007fff749088013ffcda012000f40360009fc6a00001000000e6012010e404e004113f00259002227cda04a000f40360009fc6a00001000000d201200cd0012008da0120107ffffdaa9e13e002e2012010e0046004113f00259002227cda042000f40360009fc6a00001000000de012010c203e004901020a5da00600cf40360009fc6a00001000000da012010d803600490102001da032008de012014f403600081c6a00488012018ec036004de213ffcda213ff8d2213ff4fa022004fa213ff0fa02200cfa213fec113f001f9002225cda05a018f40360009fc6a00088013fec13000083920263d8d00120041b0000839a0360d8f40360009fc6a0000100000080a2200122800004ea01200c10800018e2012008e8056004fa05200cfa213ffc133f00b3920260f8d00120047fff744588013ffcda012000f40360009fc6a00001000000e6012010e404e004113f00c090022030da04a000f40360009fc6a0000100000088012004e2012008b8246001b91f2004a007200192100010d0012000da01200c7ffffd5a9e13e002de01200cc203e00490102001da006008de012010f403600081c6a00488012014ec036004de213ffcda213ff8d2213ff4fa022008fa213ff0fa02200cfa213fec113f0025900222b4da05a018f40360009fc6a00088013fecea01200ce8056004113f004c90022018da05200cf40360009fc6a00001000000e601200ce404e004113f001f9002225cda04a000f40360009fc6a00001000000e201200480a4600132800004e001200c10800012d801200cde042004113f004c90022050da03e00cf40360009fc6a00001000000c201200cda006004113f001f9002225cda036000f40360009fc6a00001000000d801200c8c21a00c8b19600cba10200296100006fa21bffc153f00c09402a03cd422e000d2032004d222e0049010000bd6012008941020f5d2012000da032008f40360009fc6a00001000000c401200cee00a00490102001da05e008de012010f403600081c6a00488012014ec022004ea036004de213ffcda213ff8d2213ff4fa05a004fa213ff0fa05a008fa213fecfa05a00cfa213fe8fa05a010fa213fe4113f0025900222b4da056018f40360009fc6a00088013fe4d2012010d001200cda0120147ffffcec9e13e002e8012014e6052004113f001f9002225cda04e000f40360009fc6a00001000000e4012014e204a004113f004c90022320da04600cf40360009fc6a00001000000e0012014de042004113f001f9002225cda03e000f40360009fc6a00001000000c2012014da006004113f004c90022050da03600cf40360009fc6a00001000000d8012014d6032004113f001f9002225cda02e000f40360009fc6a00001000000d4012014901020014000029e0100000092102005d2213ffcd602a00494100008d2012010d001200440000ea788013ffcd0012014c4022004d0012008da00a00cf40360009fc6a00001000000ee012014ec05e004113f001f9002225cda05a000f40360009fc6a00001000000ea012014e8056004901020f5da05200cf40360009fc6a00001000000e6012014e404e004113f001f9002225cda04a000f40360009fc6a00001000000e2012010b8246001b91f2004a0072001de012014c203e004901020014000026f010000009a102005da213ffc961000089410000192100010d0012000400003ab88013ffcd8012014d603200490102001da02e008de012018f403600081c6a0048801201cec036004de213ffcda213ff8d2213ff4fa022004fa213ff0fa022008fa213fecfa022010fa213fe8113f0025900222b4da05a018f40360009fc6a00088013fe8ea012010e8056004e601200080a4e0012280000601000000113f004c9002237010800005da05200c113f004d90022008da05200cf40360009fc6a00001000000e4012010e204a004113f001f9002225cda046000f40360009fc6a00001000000e001200cb8242001b91f20049e0720018c21a00c8b19600cba10200282100006fa21bffc1b3f00c19a0360d0da206000d8012010d82060049610000f941020edd201200490100001da032008f40360009fc6a00001000000d6012010d402e004113f001f9002225cda02a000f40360009fc6a00001000000d2012010d0026004c402200c113f004c900221249a100002f40360009fc6a00001000000ee012010ec05e004113f001f9002225cda05a000f40360009fc6a00001000000ea01200cb8256001b91f2004a80720018c21a00c8b19600cba102002a6100006fa21bffc253f00c1a404a114e424e000e2012010e224e00496100014941020edd201200890100013da046008f40360009fc6a00001000000e0012010de042004113f001f9002225cda03e000f40360009fc6a00001000000c2012010da006004113f004c9002213cda03600cf40360009fc6a00001000000d8012010d603200490102001da02e008de012014f403600081c6a00488012018ec036004de213ffcda213ff8d2213ff4fa022004fa213ff0113f00bf90022358da05a018f40360009fc6a00088013ff0ea012008e8056004113f004d90022020da05200cf40360009fc6a00001000000e6012008e404e004113f001f9002225cda04a000f40360009fc6a00001000000e2012004b8246001b91f2004a00720018c21a00c8b19600cba1020029e100006fa21bffc033f00c182006158c223e000da012008da23e00496100010150000839402a3d8d20120009010000fda036008f40360009fc6a00001000000d8012008d603200490102001da02e008de01200cf403600081c6a00488012010b8226001b91f2004ac072001d403600492100016d0022004353f00c1b406a19c81c6a00401000000b8226001b91f2004ac072001de213ffcda213ff8d2213ff4fa022008fa213ff0fa02200cfa213fec92100016d00220047ffffba888013fecea01200ce8056004e601200080a4e0012280000601000000113f00b3900220ec10800005da05200c113f00b3900220f8da05200cf40360009fc6a00001000000e401200ce204a004113f001f9002225cda046000f40360009fc6a00001000000e0012008b8242001b91f20049e0720019210000fd0012004da01200cde01201010bffb8788012014|@2240,131071|36,4,@1478 96,4,$2070+122 196,4,@2071 240,4,@2072 288,4,@501 320,4,@1341 352,4,@485 396,4,@2077 424,4,@1351 536,4,@489 568,4,@1337 600,4,@485 644,4,@2079 668,4,I48 708,4,@485 740,4,@1358 816,4,@2081 864,4,@501 896,4,@1377 928,4,@485 972,4,@2083 1000,4,@1351 1112,4,@489 1144,4,@1396 1176,4,@485 1220,4,@2085 1244,4,I48 1284,4,@485 1316,4,@1358 1404,4,@499 1436,4,@1383 1468,4,@489 1508,4,@2074 1520,5,@496 1552,4,@485 1600,5,@2086 1636,5,@2097 1708,4,@499 1740,4,@1392 1772,4,@489 1812,4,@2074 1824,5,@496 1856,4,@485 1904,5,@2086 1940,5,@2097 2000,4,@2165 2048,4,@501 2080,4,@1390 2112,4,@485 2156,4,@2168 2184,4,@1351 2280,4,@485 2328,5,@496 2360,4,@499 2412,4,@499 2528,4,@485 2552,4,I48 2564,4,I24 2616,4,@2074 2628,5,@496 2660,4,@2170 2788,4,@501 2820,4,@1335 2852,4,@485 2904,4,@1339 2936,4,@485 2984,4,@2171 3120,4,@501 3172,4,@485 3204,4,@1394 3236,4,@485 3268,4,@1339 3300,4,@485 3332,5,@2086 3364,5,@2173 3408,4,@485 3468,4,@485 3520,5,@2086 3552,5,@2097 3632,4,@501 3680,4,@1400 3696,4,@1412 3728,4,@485 3788,4,@2177 3848,4,@485 3884,4,@1356 3916,4,@485 3976,4,@2178 4036,4,@485 4068,4,@1358 4148,4,@2166 4180,4,@1414 4212,4,@485 4272,4,@2179 4296,4,I48 4384,4,@2180 4480,4,@2073 4496,4,@2074 4528,4,@485 2071:S5|3c6261643e 2072:C2,448|9e13e002f606201880a1001b8bd02018c4036004de213ffcda213ff8d2213ff4fa022004fa213ff0fa022008fa213fecfa02200cfa213fe8fa022014fa213fe4113f0025900222b4da00a018f40360009fc6a00088013fe4ee012014ec05e004d001200cda05a00cf40360009fc6a00001000000ea012000e805600080a5200132800004e601201410800025d6012008e404e004e201200480a460012280000601000000113f00b3900220ec10800005da04a00c113f00b3900220f8da04a00cf40360009fc6a00001000000e0012014de042004113f001f9002225cda03e000f40360009fc6a00001000000c2012010b8206001b91f20049a072001d80120149210000dd0012000da032008f40360009fc6a00001000000d6012008d402e00080a2a00132800004d20120141080001ee4012014d0026004c402200c113f00b3900221049a100002f40360009fc6a00001000000ee012014ec05e004113f001f9002225cda05a000f40360009fc6a00001000000ea012010b8256001b91f2004a8072001e601201492100014d0012008da04e008f40360009fc6a00001000000e4012014e204a00490102001da046008de012018f403600081c6a0048801201c|@2076,131071|64,4,@501 164,4,@2073 180,4,@2074 212,4,@485 316,4,@2075 348,4,@485 2073:S3|203a3e 2074:S2|203a 2075:S2|203d 2076:S61|535452554354555245535f28292e646973706c617953747275637473283329646973706c6179283229646973706c617953747275637442696e64283229 2077:C2,40|9e13e002f606201880a1001b8bd02018d2022004d0022000da036004f403600081c6a00401000000|@2078,131071| 2078:S61|535452554354555245535f28292e646973706c617953747275637473283329646973706c6179283229646973706c617953747275637442696e64283129 2079:C2,40|9e13e002f606201880a1001b8bd02018d2022004d0022000da036004f403600081c6a00401000000|@2080,131071| 2080:S41|535452554354555245535f28292e646973706c617953747275637473283329646973706c6179283129 2081:C2,232|9e13e002f606201880a1001b8bd02018c4036004de213ffcda213ff8d2213ff4fa022004fa213ff0fa02200cfa213fec113f0025900222b4da00a018f40360009fc6a00088013fecee01200cec05e004fa05a00cfa213ffc133f00b392026104d00120047fff716388013ffcda012000f40360009fc6a00001000000ea012010e8056004113f001f9002225cda052000f40360009fc6a00001000000e601200cb824e001b91f2004a4072001e201201092100012d0012004da046008f40360009fc6a00001000000e0012010de04200490102001da03e008de012014f403600081c6a00488012018|@2082,131071|48,4,@501 88,4,@2075 100,5,@496 132,4,@485 2082:S58|535452554354555245535f28292e646973706c617953747275637473283329646973706c6179283229646973706c617953696742696e64283229 2083:C2,40|9e13e002f606201880a1001b8bd02018d2022004d0022000da036004f403600081c6a00401000000|@2084,131071| 2084:S58|535452554354555245535f28292e646973706c617953747275637473283329646973706c6179283229646973706c617953696742696e64283129 2085:C2,40|9e13e002f606201880a1001b8bd02018d2022004d0022000da036004f403600081c6a00401000000|@2080,131071| 2086:C2,120|9e13e0028c21a0088b1960083b100000ba07600190100006fa21bffc84103ffdc42220008c21a0088b1960083b100000ba07600184100006fa21bffcae102001ee20a000ae1000088c21a0108b196010ba10200390100006fa21bffc2d3f00b4ac05a104ec222000ee222008c422200481c3e00601000000|@2096,114817|92,4,@2087 2087:C2,372|9e13e002f606201880a1001b8bd02018c4036004ee00a000de213ffcda213ff8d0213ff488013ff480a5e00132800005de05e000ac1020011080001880a5a001ac10000fea05e004d2012000d003e004400000500100000080a220012280000bae1000159e1000168c21a0088b196008ba102001ac100006fa21bffcde25a0001080000680a5a001f606201880a1001b8bd0201830bfffe532800033c205a000da012004d2036008d0026000b8222001b917200484072001c4226000ee012000d205e004d005e0004000004c0100000080a2200122800004ac10209d2d3f00b4ac05a360ea012004e8056008d0052000ec213ffc4000005d88013ffc92100008d00120007fff709101000000e60120088c21a00c8b19600cba102002a4100006fa21bffce2012004e224a004d024a000e004e004de0420008c21a00c8b19600cba10200282100006fa21bffcde206004e4206000c2242000da01200c81c3600688012010d0006000da01200881c360068801200c|@2095,131071|80,5,@2088 200,5,@2090 220,4,@2092 244,5,@2093 260,5,@496 2088:C2,44|9e13e002c4022000ee02600080a0801732800005901020019010200581c3e0060100000081c3e00601000000|@2089,98435| 2089:S23|5354525543545f56414c5328292e73616d655476283229 2090:C2,36|9e13e002900a601180a220013280000384102001841020059018a00481c3e00601000000|@2091,65667| 2091:S27|5354525543545f56414c5328292e7476457175616c697479283229 2092:S2|2727 2093:C2,372|9e13e002f606201880a1001b8bd02018b8222001811f20682680002001000000b8222001811f200026800003ae102001ae10200580a5e00532800005b8222001ac10000810800005de213ffcb91f2064ac072001de213ffcd0213ff892102069901000161b0000859a036378f40360009fc6a00088013ff8b8222001b91f2004900720017fffffe09e13e0028410000810800008c4213ffc050000838400a3d8de213ffcd0213ff888013ff8c4213ffc92102069d00120001b0000859a036398f40360009fc6a00088013ffc80a2200132800004b82220011080000c84100008811f200026800003841020018410200580a0a0052280000584100008b8222001b917206884072001b820a001b9172184ae072001811f200036800004b825e0011080000701000000811f23fc348000040100000010800009ac100017113f0027900220f8f40620209fc6a00001000000ac102001ac10001792100016d0012000de012008353f0025b406a04c81c6a0048801200c|@2094,131071|100,4,I109 152,4,I48 184,4,I110 316,4,@511 356,4,@496 2094:S40|545950455f5452454528292e7661724e616d6553657175656e63652831292831296e616d65283129 2095:S33|545950455f5452454528292e7661724e616d6553657175656e6365283129283129 2096:S30|545950455f5452454528292e7661724e616d6553657175656e6365283129 2097:C2,52|9e13e002f606201880a1001b8bd02018d6213ffcd4213ff8de213ff49a013ffc4000000c88013ff4c401200081c0a00688012010|@2164,131071|32,5,@2098 2098:C2,2372|9e13e002f606201880a1001b8bd02018da213ffcde213ff8d2213ff44000025188013ff4ae100008901000177fffaf420100000080a220012280002490100017901000177fffaf4d01000000ac100008d205a004d005a000400002ea01000000aa10000890100015400002fa0100000080a2200122800010d2012000e8012008e6053ffcfa04e00cfa213ffc90100016da052000f40360009fc6a00088013ffcda012000de012008f403600081c6a0048801201090100015da012008de01200410bfffd18801200c400004c10100000080a22001228001029010001790100017400004cc01000000ec02200080a5a00132800032ea012000ea022004e802200890100014400004d8010000007fffaf59010000007fffaf6c0100000080a220012280000590100014a610001510800008e4012008400004cc01000000400004e501000000a6100008e4012008e204bffce004a00480a4200122800005d0213ffc901000131080000cd0213ffcd0213ff8fa04600cfa213ff492013ff890100013400004e788013ff4d001200810800007da012000d0213ff8fa04600cfa213ff488013ff4da012000de012010f403600081c6a00488012018b8256001811f20003480000b808da001e8012008e6053ffc113f005690022110da04e00cde012004f403600081c6a0048801200c32800008e8022000e8022000e6022004e4022008d005a0001080000be8213ffce6022004e4022008113f00bc900220f0f40620209fc6a0000100000090102001e8213ffce6213ff8e4213ff4400001ca88013ff4e2012008808c600132800005a0100008e00460041080000a82100008113f00bc900220f0f40620209fc6a000010000009e100010a010200182100008d001200040000479010000007fffaefa010000007fffaf0d0100000080a2200122800005d0012000da01200410800008d80120144000046d0100000040000486010000009a100008d8012014d6033ffcc2213ffce0213ff8da213ff4113f00259002227cda02e018f40360009fc6a00088013ff4d401200480a2a00122800004d001200810800012d20120184000060e0100000080a2200122800004d00120081080000bd2012018400006660100000080a220012280004cd2012018d00120084000067101000000d2012018b8226001811f20043480000cd0012020d0012020c4023ffc113f005690022110da00a00cf40360009fc6a0000100000010800043c4012020c4023ffc113f00259002227cda00a018f40360009fc6a00001000000ee012020ec05fffc901020a1da05a00cf40360009fc6a00001000000ea012020e8057ffc113f00259002227cda052000f40360009fc6a00001000000e6012018b824e001b91f2004a4072001d401201492100012901020b19a0120204000065501000000e2012020e0047ffc113f00259002227cda042000f40360009fc6a00001000000de012020c203fffc901020a5da00600cf40360009fc6a00001000000da012020d8037ffc90102001da032008f40360009fc6a000010000001080000bc4012020b8226001b91f20049007200192100008d0012008da0120207ffffee39e13e002c4012020ee00bffc113f001f9002225cda05e000f40360009fc6a00001000000ec012020ea05bffcd0012000da05600cf40360009fc6a00001000000e8012020e6053ffc90102001da04e008de01201cf403600081c6a00488012024400005f80100000080a220012280006290100017901000174000060301000000ec012000b825a001811f20003480000bfa022004ea012008e8057ffc113f005690022110da05200cde012004f403600081c6a0048801200cfa213ffcd00220004000010988013ffcea01200ce8057ffcd0213ffc113f00259002227cda052018f40360009fc6a00088013ffcd0012000400005d40100000080a220012280000ce6012008d0012000400005df01000000d2012008d00120009a012010400006b4010000001080000be2012010b824e001b91f2004a407200192100012d0012000da0120107ffffe919e13e002e2012010e0047ffc113f001f9002225cda042000f40360009fc6a00001000000de012010c203fffc113f004c9002238cda00600cf40360009fc6a00001000000da012010d8037ffc113f001f9002225cda032000f40360009fc6a00001000000d6012008b822e001b91f2004940720019210000ad0012004da0120107ffffe709e13e002d2012010d0027ffcc4022008901020019a100002de01200cf403600081c6a004880120144000018e0100000080a220012280007490100017aa100017901000154000019801000000e8012000b8252001811f20003480000bfa022000e6012008e404fffc113f005690022110da04a00cde012004f403600081c6a0048801200cfa213ffcfa022004fa213ff8901000154000051988013ff880a220012280001ee6012010e6012010e404fffc113f00259002227cda04a018f40360009fc6a00001000000d00120001b3f00be9a036004f40360009fc6a0000100000094100008d2012008901020a99a0120104000058501000000e2012010e0047ffc90102001da042008de01200cf403600081c6a00488012014e404fffc113f000f9002204cda04a018f40360009fc6a00001000000e2012010e0047ffc901021edda04200cf40360009fc6a00001000000de012008b823e001b91f200482072001d2012000901000019a012010400006c501000000da01200480a3600132800014d8012010d601200080a2e0013280000601000000193f00569803211010800005d4012010193f00be98032318d4012010d202bffc9010000cda02600cf40360009fc6a00001000000d8012010d6033ffc901021f5da02e00cf40360009fc6a00001000000d4012010d202bffc90102001da026008de01200cf403600081c6a00488012014400002b70100000080a22001228000259010001790100017400002c70100000080a220013280000bec012008ec012008ea05bffc113f00be90022328da05600cde012004f403600081c6a0048801200cea05bffcd0213ffc113f00259002227cda056018f40360009fc6a00088013ffcd00120009a01200c4000072901000000e801200ce6053ffc90102001da04e008de012008f403600081c6a00488012010400000d90100000080a220012280000bec012008ec012008ea05bffc113f00be90022328da05600cde012004f403600081c6a0048801200cea05bffc113f00bf90022074da05600cde012004f403600081c6a0048801200c|@2163,131071|28,5,@2099 44,5,@1606 68,5,@1607 88,5,@2100 104,5,@2102 200,5,@2124 224,5,@2125 260,5,@2126 268,5,@1613 276,5,@1615 308,5,@2126 316,5,@2128 384,5,@2130 464,4,@1478 532,4,@2144 568,5,@2099 604,4,@2144 640,5,@2126 648,5,@1613 656,5,@1615 688,5,@2126 696,5,@2128 728,4,@499 776,5,@2146 804,5,@2148 828,5,@2149 864,4,@1478 900,4,@499 960,4,@499 1016,5,@2150 1032,4,@499 1160,4,@485 1244,5,@2148 1268,5,@2149 1304,4,@1478 1340,5,@2099 1360,4,@499 1388,5,@2148 1412,5,@2149 1432,5,@2151 1488,4,@485 1520,4,@1402 1552,4,@485 1648,5,@2104 1676,5,@2105 1712,4,@1478 1756,5,@2146 1784,4,@499 1812,4,@2154 1848,5,@2150 1892,4,@366 1972,5,@2156 2012,4,@1478 2028,4,@2158 2124,5,@2120 2148,5,@2122 2176,4,@2159 2212,4,@499 2244,5,@2160 2284,5,@2102 2312,4,@2159 2344,4,@2162 2099:C2,644|9e13e002f606201880a1001b8bd02018ae10000fac100008901000167fffacee0100000080a220012280009590100016aa100017901000167fffacf80100000084100008d200a004d000a0004000009501000000ea213ffcec213ff8c4213ff4d0213ff07fffffe788013ff0ee01200080a5c00832800004ac10000810800008aa10000892100016d00120047fffacf60100000090100016aa10000890100015400000940100000080a220012280000690100015d0012008de01200c81c3e00688012010400000a10100000080a220012280005c9010001590100015400000ac01000000de02200080a3e0013280005290100015da022008808b60013280004bd0012008d20360008410000dee022004ec026000ea0260049210001590100016400000600100000092100002ac10000890100016400000850100000080a220012280001801000000aa100017901000164000008f01000000d2213ffcfa022000fa213ff892100015d00220049a01200c4000009c88013ff88c21a00c8b19600cba102002aa100006fa21bffce8012000e8256004d0256000108000098c21a010113f00ba900220bcf40620209fc6a00001000000aa1020018c21a0108b196010ba10200390100006fa21bffce6012004e6222008e4056000e4222004e2056004e22220007fffac6001000000a010000892100010d001200c7fffac9b0100000080a4600122800006d001201090100010de01201481c3e00688012018de01201481c3e00688012018d801200c81c3200688012010c201200c81c0600688012010400001e20100000080a22001228000099010001590100015400001f201000000d0012008e801200c81c5200688012010e801200c81c520068801201081c5e00601000000|@2123,131071|28,5,@1606 56,5,@1607 76,5,@2100 140,5,@1608 160,5,@2102 196,5,@2104 220,5,@2105 288,5,@2100 308,5,@2104 336,5,@2105 368,5,@2106 416,4,@2118 484,5,@1604 504,5,@1608 576,5,@2120 600,5,@2122 2100:C2,20|9e13e002d20220009010000981c3e00601000000|@2101,131| 2101:S24|5354525543545f56414c5328292e747656616c7565283229 2102:C2,40|9e13e002c402200080a0bffd32800005901020019010200581c3e0060100000081c3e00601000000|@2103,65665| 2103:S9|456d70747954797065 2104:C2,40|9e13e002c402200080a0bff932800005901020019010200581c3e0060100000081c3e00601000000|@1605,65665| 2105:C2,56|9e13e002c4022004ee022008ec02200c8c21a0108b196010ba10200390100006fa21bffcec222008ee222004c422200081c3e00601000000|@1605,114817| 2106:C2,556|9e13e002f606201880a1001b8bd0201880a220013280000fc402200080a2600132800005de213ffc9010200181c3e00601000000113f00b990022158f40620209fc6a00088013ffc90102001c402200080a2600132800028ee026000d0213ffcd0213ff8de213ff4da213ff0fa022004fa213fec94013ff8d200a004d000a0004000008588013fec8c21a00c8b19600cba102002ae100006fa21bffcec01200cec25e000ea012010ea25e004ee213ffc92102001d0012000da0120047fffffd188013ffc8c21a00c8b19600cba102002a8100006fa21bffcd0252004e6012000e625200090100014e401200c81c4a00688012018de213ffcda213ff8d2213ff4c4213ff0fa022004fa213fecee213fe8fa026004fa213fe4d205e000d000a0007fffaac588013fe480a2200132800013b8222001d2012000d0012008da0120147fffffb19e13e0028c21a00c8b19600cba102002ac100006fa21bffcd025a004ea012004ea25a00090100016e801201881c520068801201c811f20003680002601000000d0213ffcd0213ff8ec01200c94013ff8d205a004d005a000da0120144000003d88013ff88c21a00c8b19600cba102002aa100006fa21bffce8012000e8256000e6012004e6256004ea213ffcd2012018d0012010da01201c7fffff8988013ffc8c21a00c8b19600cba102002a4100006fa21bffcd024a004e2012000e224a00090100012e001202481c4200688012028113f00b990022158f40620209fc6a0000100000090102001|@2117,131071|52,4,@2107 128,5,@2109 288,5,@1597 416,5,@2109 532,4,@2107 2107:O3|@24,@397,@2108 2108:S51|616464546f496e7374616e63653a20456e74727920696e20696e7374616e636520627574206e6f7420696e2067656e65726963 2109:C2,376|9e13e002f606201880a1001b8bd02018ae10000fac10000daa100008901000097fffab500100000080a220012280004dee213ffca8100017901000097fffab5a01000000de05bff884100008d203e004d003e0004000005001000000ee05bff8a6100002a4100008d205e004d005e0007ffffb3a0100000080a2200122800005d204e004a210200510800007d204e004d004e0007ffffb3101000000a2100008d204e004d004e0004000005b0100000080a2200122800005d205e004a010200510800007d0213ffcd005e0004000005201000000a0100008d0213ffcd0213ff8e8213ff4ea213ff0d4213fece0213fe8a0013ff8e0213fe4961020019410001192100012113f000f900220cc7fff9ee788013fe48c21a00c8b19600cba10200290100006fa21bffcde01200cde222000c2012010c22220047fff9f2501000000da012000d8012004d8236000d023600490102001d601200881c2e00688012014113f00ba90022018f40620209fc6a00088013ffc90102001|@2116,131071|32,5,@1606 60,5,@1607 84,5,@2110 112,5,@2090 148,5,@2090 168,5,@2112 204,5,@2112 260,4,@375 268,5,@1515 312,5,@1517 352,4,@2114 2110:C2,68|9e13e002bb326003b82f600390072001811f20003680000a01000000133f000e92026330b8222001ba226001b917401c9007200181c3e0060100000081c3e00601000000|@2111,131|28,4,@349 2111:S24|5354525543545f56414c5328292e74764c6576656c283229 2112:C2,36|9e13e002900a600580a220013280000384102001841020059018a00481c3e00601000000|@2113,65667| 2113:S23|5354525543545f56414c5328292e74765765616b283229 2114:O3|@24,@397,@2115 2115:S43|6372656174654e65774669656c643a204e6577206669656c64206973206e6f742061207479706520766172 2116:S40|545950455f5452454528292e6576656e7475616c2831296372656174654e65774669656c64283329 2117:S39|545950455f5452454528292e6576656e7475616c283129616464546f496e7374616e6365283229 2118:O3|@24,@397,@2119 2119:S35|756e6966795265636f7264733a204e6f742061206c6162656c6c6564207265636f7264 2120:C2,40|9e13e002c402200080a0a00932800005901020019010200581c3e0060100000081c3e00601000000|@2121,65665| 2121:S11|4f7665726c6f6164536574 2122:C2,16|9e13e002d002200481c3e00601000000|@2121,129| 2123:S23|545950455f5452454528292e6576656e7475616c283129 2124:C2,40|9e13e002c402200080a0bff532800005901020019010200581c3e0060100000081c3e00601000000|@1618,65665| 2125:C2,56|9e13e002c4022004ee022008ec02200c8c21a0108b196010ba10200390100006fa21bffcec222008ee222004c422200081c3e00601000000|@1618,114817| 2126:C2,48|9e13e002c402200080a0a00132800005ee022004d002200481c3e00601000000ec05e0009010001681c3e00601000000|@2127,114817| 2127:S22|5354525543545f56414c5328292e706c696e67283129 2128:C2,16|9e13e002d002200081c3e00601000000|@2129,129| 2129:S23|5354525543545f56414c5328292e74634e616d65283129 2130:C2,432|9e13e002f606201880a1001b8bd02018808a200132800004b8102004f8022000b92f2002840720018c21a0108b196010ba102003ae100006fa21bffcd025e008c425e00484102001c425e000de213ffcd0213ff8d2213ff4133f00bb920260b8901000174000007788013ff4ee022000ec022004901000174000013e0100000080a220012280000c90100017ea01200029000083a80523d8e8256000e6012004e625600490102001e401200881c4a0068801200c4000008f01000000ea022004b8256001811f200436800012a8a56004e6022000e40220088c21a0108b196010ba10200390100006fa21bffce4222008a2102001e2222004e62220004000010301000000a81000081080001090100014e6022000e40220088c21a0108b196010ba10200390100006fa21bffce4222008e8222004e6222000400000f401000000a8100008901000144000006a01000000ec213ffcd4022004d2022000d00220087fffa73488013ffca2100008d00120004000006001000000e2213ffcd4022004d2022000d00220087fffa72a88013ffce0012008de012000de242000d024200490102001c201201081c0600688012014|@2143,131071|88,4,@2131 100,5,@2134 120,5,@2141 144,4,I48 180,5,@2135 252,5,@2138 312,5,@2138 328,5,@2135 352,5,@1586 368,5,@2135 392,5,@1586 2131:O1|@2132 2132:C2,32|9e13e00280a220b93280000384102001841020059018a00481c3e00601000000|@2133,65665| 2133:S40|5554494c49544945535f28292e73706c6974537472696e672832293c7061747465726e3e2d283129 2134:C2,148|9e13e002f606201880a1001b8bd020188410000f4000002701000000fa022008fa213ffcfa022004fa213ff8fa022000fa213ff4d2213ff0de013ff4da013ff8b82360019003c01cd0213fecd0213fe8c4213fe492013fe89a013ffc4000002388013fe48c21a00c8b19600cba10200290100006fa21bffcc4012004c4222000ee012008ee222004ec01200081c5a0068801201c|@2140,131071|20,5,@2135 92,5,@2137 2135:C2,12|9e13e00281c3e00601000000|@2136,129| 2136:S5|536c696365 2137:C2,452|9e13e002f606201880a1001b8bd02018c4037ff880a2000232800023aea22004ae1000088c21a0108b196010ba10200390100006fa21bffcec036000ec222008aa102001ea222004ee222000ae10000faa10000d40000063010000009e1000088c21a0108b196010ba10200390100006fa21bffcec222008da057ffcda222004c42220009810000f4000005601000000d8226000d02260049010200181c5e00601000000ec036000808da00122800006aa85e010aa1000089010001610800009de213ffca8100008bb3d6002fa0d801db92f600290072001aa100014de213ffcda213ff8ea213ff4d2213ff0da037ff4f40360009fc6a00088013ff080a220012280000ae6012008e6012004a4a4e004d201200090100012da012008de01200c10bfffb988012010e4012004e204fff8b8246001a024801c8c21a0108b196010ba10200390100006fa21bffcde04e000de222008e0222004e22220004000002101000000c204fffcb82460019a00401cb824a0019823401c961000088c21a0108b196010ba10200390100006fa21bffcd404e000d4222008d8222004e42220004000001001000000d2012000d6226000d022600490102001c401200c81c0a00688012010|@2139,131071|84,5,@2138 136,5,@2138 348,5,@2138 416,5,@2138 2138:C2,12|9e13e00281c3e00601000000|@2136,129| 2139:S26|537562737472696e672e73706c69747228322966696e64283229 2140:S19|537562737472696e672e73706c697472283229 2141:C2,40|9e13e002c402200480a0a00132800005901020019010200581c3e0060100000081c3e00601000000|@2142,65665| 2142:S34|566563746f72536c6963654f7065726174696f6e7328292e6973456d707479283129 2143:S27|5554494c49544945535f28292e73706c6974537472696e67283229 2144:O3|@106,@2145,0 2145:S5|456d707479 2146:C2,316|9e13e002f606201880a1001b8bd02018ae10000fac100008901000167ffffc530100000080a220012280004390102001aa100017901000167ffffc5d01000000de02200080a3e0053280003990102001da022004808b60013280003390102001c40360048088a0013280002d90102001ea213ffcae10200588013ffc80a3600132800006ec03600090102005ec01200081c5a00688012004ee213ffcfa05a000fa213ff8fa036004fa213ff492103ffd901000177fff6a1288013ff492100008d00120041b0000839a0360d8f40360009fc6a0000100000080a220012280000d90102001ea012008b8256001b9172004a8072001da012000ae1000148801200cf606201880a1001b8bd0201830bfffdcea01200c81c560068801201081c560060100000081c560060100000081c560060100000081c5e00601000000|@2147,131071|28,5,@2104 56,5,@2105 180,5,@509 196,4,I24 2147:S28|545950455f5452454528292e697350726f6475637454797065283129 2148:C2,40|9e13e002c402200080a0a00532800005901020019010200581c3e0060100000081c3e00601000000|@1631,65665| 2149:C2,48|9e13e002c4022004ee0220088c21a00c8b19600cba10200290100006fa21bffcee222004c422200081c3e00601000000|@1631,98433| 2150:C2,768|9e13e002f606201880a1001b8bd0201880a2a00132800005c402a0049010200181c3e0060100000080a0a00132800035b8226001de213ffcda213ff8d0213ff4d2213ff0d002a0007ffffaf388013ff0d0213ffc921020a9d00120041b0000839a0360d8f40360009fc6a00088013ffc80a220012280001bd2012004d00120007fffffbc0100000080a2200122800007d0012000d00120007fffffc70100000010800009d20120047fffff530100000080a2200132800004d201200410800009d2012004d0012000da01200cde012010353f00bdb406a23881c6a00488012014d0012000ee01200cda05e000de012010353f00b5b406a1d081c6a00488012014811f20003480000ade213ffcee036000ec05fffc113f005690022110da05a00cf403600081c6a00401000000da213ff8d0213ff4d2213ff0c4213fecd002a0007ffffab588013fecee01200cec05e000ea05bffcd0213ffc113f00259002227cda056018f40360009fc6a00088013ffc921020a9d001200c1b0000839a0360d8f40360009fc6a0000100000080a220012280001ad2012008d00120007fffff750100000080a2200122800007d0012000d00120007fffff800100000010800009d20120087fffff0c0100000080a2200132800004d201200810800008d2012008d0012000da0120104000004d0100000010800008e6012010d0012000e8012010da0520007ffff82c01000000e6012010e404e000e204bffcfa046000fa213ffc921020b1d001200c1b0000839a0360d8f40360009fc6a00088013ffca01a20048c21a00c8b19600cba10200290100006fa21bffc9e102001de222004e0222000da012000f40360009fc6a00001000000c2012014da006000d8037ffcd0012010da03200cf40360009fc6a00001000000d6012014d402e000d202bffc90102001da026008f40360009fc6a00001000000d0012014c4022000ee00bffc113f001f9002225cda05e000f40360009fc6a00001000000ec01200cb825a001b91f2004aa072001d401200892100015d0012010da012014de01201810bfff438801201c|@2153,131071|72,5,@2099 92,4,I24 128,5,@2148 152,5,@2149 168,5,@2146 208,4,@2151 240,4,@2098 276,4,@1478 320,5,@2099 344,4,@499 376,4,I24 412,5,@2148 436,5,@2149 452,5,@2146 488,5,@2151 516,5,@2098 552,4,I24 700,4,@485 2151:C2,328|9e13e002f606201880a1001b8bd02018b8226001811f20043480000bc4036000d2036000d0027ffcc402200c113f0056900221109a100002f403600081c6a00401000000ee00bffcde213ffcda213ff8d0213ff4d2213ff0113f00259002227cda05e018f40360009fc6a00088013ff0ec012008ea05a000e8057ffc901020a1da05200cf40360009fc6a00001000000e6012008e404e000e204bffc113f00259002227cda046000f40360009fc6a00001000000e0012000b8242001b91f20049e0720019210000fd0012004c2012008da0060007ffff7b101000000da012008d8036000d6033ffc113f00259002227cda02e000f40360009fc6a00001000000d4012008d202a000d0027ffcc402200c901020a59a100002f40360009fc6a00001000000ee012008ec05e000ea05bffc90102001da056008de01200cf403600081c6a00488012010|@2152,131071|44,4,@1478 88,4,@499 156,4,@499 212,5,@2098 232,4,@499 2152:S43|545950455f5452454528292e74446973702835296469737050283229706172656e74686573697365283229 2153:S41|545950455f5452454528292e744469737028352964697370502832297072657474794c697374283329 2154:O1|@2155 2155:C2,112|9e13e002f606201880a1001b8bd0201880a2200132800005c40220009010200181c3e00601000000de213ffcfa00a004fa213ff8d00220047ffffff288013ff88c21a00c8b19600cba1020029e100006fa21bffcd023e004d0012000d023e0009010000fc401200481c0a00688012008|@586,65665| 2156:C2,568|9e13e002f606201880a1001b8bd0201880a2600132800005c40260009010200181c3e00601000000b8222001811f20003480000aee036000d0036000ee023ffc113f005690022110da05e00cf403600081c6a00401000000ec05fffcde213ffcda213ff8d0213ff4fa00a000fa213ff0fa00a004fa213fecfa026004fa213fe8113f00259002227cda05a018f40360009fc6a00088013fe8ea012010e8056000e6053ffc113f00259002227cda04e018f40360009fc6a00001000000e4012010e204a000e0047ffcfa04200cfa213ffc921020e9d00120087fff66b788013ffcda012000f40360009fc6a00001000000de012014c203e000da007ffc113f001f9002225cda036000f40360009fc6a00001000000d8012010b8232001b91f2004960720019210000bd0012008d4012014da02a0007ffff70101000000d2012014d0026000c4023ffc90102001da00a008f40360009fc6a00001000000ee01200480a5e00132800004ec01201410800013e0012014ea05a000e8057ffc113f00259002227cda052000f40360009fc6a00001000000e6012014e404e000e204bffc901020b1da04600cf40360009fc6a00001000000e0012014de042000c203fffc90102001da006008f40360009fc6a00001000000da01200480a3600132800006d801201490102001d801201881c320068801201cd6032000d402fffc113f001f9002225cda02a000f40360009fc6a00001000000d2012010b8226001b91f200490072001d2012004da012014de01201810bfff758801201c|@2157,131071|64,4,@1478 128,4,@499 164,4,@499 216,5,@496 252,4,@485 308,5,@2098 380,4,@499 508,4,@485 2157:S35|545950455f5452454528292e7444697370283529646973705028322970526563283229 2158:S5|2c202e2e2e 2159:S7|6e6f2074797065 2160:C2,236|9e13e002f606201880a1001b8bd0201880a2200132800005c40220049010200181c3e0060100000080a0a0013280000dee036000ee036000ec05fffcaa10000fd00220007ffffbc901000000da05a00c9e100015f403600081c6a00401000000ec05fffcaa10000fa810000dd00220007ffffbbe01000000ea213ffce8213ff8c4213ff4da05a00cf40360009fc6a00088013ff4e6012004e404e000e204bffc113f00259002227cda046000f40360009fc6a00001000000e0012004de042000c203fffc901020bdda00600cf40360009fc6a00001000000d0012000da012004de01200810bfffc88801200c|@2161,131071|68,5,@2128 112,5,@2128 160,4,@499 2161:S42|545950455f5452454528292e744469737028352964697370502832297072696e745443636f6e73283129 2162:S3|626164 2163:S28|545950455f5452454528292e74446973702835296469737050283229 2164:S20|545950455f5452454528292e7444697370283529 2165:C2,636|9e13e002f606201880a1001b8bd02018c4036004de213ffcda213ff8d2213ff4fa022000fa213ff0fa022004fa213fecfa02200cfa213fe8fa022010fa213fe4fa022018fa213fe0113f0025900222b4da00a018f40360009fc6a00088013fe0ee012018ec05e004fa05a00cfa213ffc921020a1d00120087fff65c588013ffcda012000f40360009fc6a00001000000ea01201ce8056004113f001f9002225cda052000f40360009fc6a00001000000e601201ce404e004113f00bf90022358da04a018f40360009fc6a00001000000e2012018b8246001b91f2004a0072001de01201c92100010d0012014da03e008f40360009fc6a00001000000c201201cda00600490102001da036008f40360009fc6a00001000000d801201cd6032004901020a5da02e00cf40360009fc6a00001000000d4012004d202a00080a2600122800026d001201cd001201cc4022004ee01200880a5e0012280000601000000113f00b3900220ec10800005da00a00c113f00b3900220f8da00a00cf40360009fc6a00001000000ec01201cea05a004113f001f9002225cda056000f40360009fc6a00001000000e8012018b8252001b91f2004a6072001e401201c92100013d0012004da04a008f40360009fc6a00001000000d001201cc4022004113f001f9002225cda00a000f40360009fc6a00001000000ee01201cec05e004901020f5da05a00cf40360009fc6a00001000000ea01201ce8056004113f001f9002225cda052000f40360009fc6a00001000000e6012018b824e001b91f2004a4072001e201201c92100012d0012010da046008f40360009fc6a00001000000e001201cde04200490102001da03e008de012020f403600081c6a00488012024|@2167,131071|72,4,@501 120,5,@496 152,4,@485 184,4,@2166 352,4,@2073 368,4,@2074 400,4,@485 476,4,@485 536,4,@485 2166:O2|3,1 2167:S60|535452554354555245535f28292e646973706c617953747275637473283329646973706c6179283229646973706c617946756e637442696e64283229 2168:C2,40|9e13e002f606201880a1001b8bd02018d2022004d0022000da036004f403600081c6a00401000000|@2169,131071| 2169:S60|535452554354555245535f28292e646973706c617953747275637473283329646973706c6179283229646973706c617946756e637442696e64283129 2170:O2|1,2 2171:C2,40|9e13e002f606201880a1001b8bd02018c4036004d0022000da00a00cf403600081c6a00401000000|@2172,131071| 2172:S44|535452554354555245535f28292e646973706c617953747275637473283329646973706c6179283229283129 2173:C2,476|9e13e002f606201880a1001b8bd02018de213ffcd0213ff8d2213ff4d4213ff0d6213fec8410200188013fec80a2200132800005b820a001ae1000021080000a80a5e005b91720049e072001d00220048410000ff606201880a1001b8bd0201830bffff33280001fb825e001de01200c808be0013280000501000000c203e00010800009da012014113f00bc900220f0f40620209fc6a0000100000082102001da012014da213ffcd6012004d4012000d2012008901000017ffff50588013ffcd8012000113f001f9002225cda032000de012010f403600081c6a00488012018811f20042480003b90102001ec012008b825a001811f20043480000aea012000ea012000113f005690022110da05600cde012010f403600081c6a00488012018113f00259002227cda056018f40360009fc6a00001000000e8012000901020a1da05200cf40360009fc6a00001000000e6012000113f00259002227cda04e000f40360009fc6a00001000000d201200cd00120089a0120104000002001000000e4012000901020a5da04a00cf40360009fc6a00001000000e201200090102001da046008f40360009fc6a00001000000e0012000113f001f9002225cda042000de012010f403600081c6a00488012018ec01201081c5a00688012018|@2176,131071|136,4,@2144 184,5,@2097 196,4,@485 260,4,@1478 288,4,@499 340,4,@499 376,5,@2174 436,4,@485 2174:C2,440|9e13e002f606201880a1001b8bd02018b8222001811f20003480000980a26001c4037ff0113f005690022110da00a00cf403600081c6a004010000002280005d90102001808a600132800005de213ffcc40260001080000bde213ffc84100008113f00bc900220f0f40620209fc6a00088013ffcae10000284102001de213ffcda213ff8d0213ff4d2213ff0ee036004ee213fecd6037ff4d4037ff092100008901000027ffff48c88013fecec012008ea05bff0113f00259002227cda056000f40360009fc6a00001000000e8012000808d20013280000501000000e60520041080000980a4e001113f00bc900220f0f40620209fc6a00001000000a610200180a4e0012280002890102001e4012008e204bff0901020b1da04600cf40360009fc6a00001000000e0012008de043ff0113f001f9002225cda03e000f40360009fc6a00001000000c2012000808860013280000501000000da00600410800009d8012004113f00bc900220f0f40620209fc6a000010000009a102001d8012004b8232001b91f2004960720019210000d9010000bda012008de01200c10bfff9a88012010e401200c81c4a0068801201081c3e00601000000|@2175,131071|36,4,@1478 96,4,@2144 164,5,@2097 180,4,@499 232,4,@2144 304,4,@485 356,4,@2144 2175:S36|545950455f5452454528292e7072696e7454797065566172732835297056617273283229 2176:S28|545950455f5452454528292e7072696e745479706556617273283529 2177:C2,40|9e13e002f606201880a1001b8bd02018d2022004d0022000da036004f403600081c6a00401000000|@2080,131071| 2178:C2,40|9e13e002f606201880a1001b8bd02018d2022004d0022000da036004f403600081c6a00401000000|@2080,131071| 2179:C2,40|9e13e002f606201880a1001b8bd02018d2022004d0022000da036004f403600081c6a00401000000|@2080,131071| 2180:C2,8372|9e13e002f606201880a1001b8bd020188c21a00c8b19600cba10200284100006fa21bffc2f3f00c9ae05e26cee20a000d420a0048c21a00c8b19600cba102002ae100006fa21bffc2d3f00caac05a11cec25e0002d3f00caac05a188ec25e0048c21a00c8b19600cba102002ac100006fa21bffc2b3f00caaa056190ea25a000c425a004b8226001811f200034800008e8022000113f005690022110da02a00cf403600081c6a00401000000808d20012280002e0100000080a53fc12680002b0100000080a5203d3480002801000000273f00c1a604e286ba05203dfa04c01d81c4c01d0100000000000d66000005fa00000f5200001f9a00001dba00000ba6000000aa00000aba000000960000070e0000158e0000007e000011e6000009ca00001b6200001cce00001322000001620000036a000010560000168e0000174a00000c960000190200001ea6000008e200000d7a000008260000185e0000051200000d4e00001a3a113f00cb90022104da02a00cf403600081c6a00401000000d0022004da02a00cf403600081c6a00401000000a410000fe2022008d002200c4000097601000000e4213ffcd4213ff8e2213ff4133f007c920263041b0000839a0360d8f40360009fc6a00088013ff480a2200122800017e00120008c21a00c8b19600cba1020029e100006fa21bffc033f00cb82006160c223e004da012000da23e0008c21a00c8b19600cba10200290100006fa21bffcde22200498102089d82220007fff65f101000000a0100008de01200490100010da03e00cde012008f403600081c6a0048801200cde213ffcd2213ff8d4213ff4fa022004fa213ff0fa022008fa213fec113f00259002227cda02a018f40360009fc6a00088013fece4012004e204a00080a4600522800006e001200c80a47fe13280000de0012008e001200cb8242001b91f20049e072001d40120089210000f901000127fffff529e13e00210800025d4012008901020a1da04200cf40360009fc6a00001000000de012008113f00259002227cda03e000f40360009fc6a00001000000c201200cb8206001b91f20049a072001d40120089210000dd00120047fffff3b9e13e002d8012008113f00259002227cda032000f40360009fc6a00001000000d6012008901020a5da02e00cf40360009fc6a00001000000d4012008113f00259002227cda02a000f40360009fc6a00001000000d2012000d002600080a220353280000dc4012008c401200cb820a001b91f2004ae072001d401200892100017d00120007fffff199e13e00210800025e4012008901020a1da00a00cf40360009fc6a00001000000ee012008113f00259002227cda05e000f40360009fc6a00001000000ec01200cb825a001b91f2004aa072001d401200892100015d00120007fffff029e13e002e8012008113f00259002227cda052000f40360009fc6a00001000000e6012008901020a5da04e00cf40360009fc6a00001000000e401200890102001da04a008de012010f403600081c6a00488012014de213ffcd2213ff8d4213ff4fa022004fa213ff0fa022008fa213fecfa02200cfa213fe8113f00259002227cda02a018f40360009fc6a00088013fe8e401200c113f004b900223e8da04a00cf40360009fc6a00001000000e201200c113f001f9002225cda046000f40360009fc6a00001000000e0012010b8242001b91f20049e072001d401200c9210000fd00120087ffffec89e13e002c201200c113f001f9002225cda006000f40360009fc6a00001000000da01200c113f004b900223d0da03600cf40360009fc6a00001000000d801200c113f001f9002225cda032000f40360009fc6a00001000000d6012010b822e001b91f2004940720019210000ad401200cd00120007ffffeaa9e13e002d001200cc4022000113f001f9002225c9a100002f40360009fc6a00001000000ee01200c113f004c90022178da05e00cf40360009fc6a00001000000ec01200c113f001f9002225cda05a000f40360009fc6a00001000000ea012010b8256001b91f2004a8072001d401200c92100014d00120047ffffe8b9e13e002e601200c90102001da04e008de012014f403600081c6a00488012018de213ffcd2213ff8d4213ff4c4213ff0ee213fecfa022004fa213fe8113f00bf90022358da02a018f40360009fc6a00088013fe8e401200c901020a1da04a00cf40360009fc6a00001000000e201200c113f001f9002225cda046000f40360009fc6a00001000000e0012010b8242001b91f20049e072001d60120049410000f921020b1d0012000da012008f40360009fc6a00001000000c201200c113f00259002227cda006000f40360009fc6a00001000000da01200c901020a5da03600cf40360009fc6a00001000000d801200c90102001da032008de012014f403600081c6a004880120188c21a00c8b19600cba102002a4100006fa21bffc233f00cba204616ce224a000213f00caa0042188e024a004de213ffcd2213ff8d4213ff4c4213ff0fa022004fa213fece4213fe8113f00bf90022358da02a018f40360009fc6a00088013fe8de01200c113f004c90022288da03e00cf40360009fc6a00001000000c201200c113f001f9002225cda006000f40360009fc6a000010000008c21a00c8b19600cba1020029a100006fa21bffc193f00cb98032314d8236000d6012000d6236004d4012010b822a001b91f2004920720019610000d94100009133f004c920260e8d0012004da012008f40360009fc6a00001000000d001200cc4022008901020019a100002de012014f403600081c6a004880120188c21a00c8b19600cba102002a4100006fa21bffc233f00cba204638ce224a000213f00caa0042188e024a004de213ffcd2213ff8d4213ff4c4213ff0fa022004fa213fece4213fe8113f00bf90022358da02a018f40360009fc6a00088013fe8de01200c113f004c900220d0da03e00cf40360009fc6a00001000000c201200c113f001f9002225cda006000f40360009fc6a000010000008c21a0108b196010ba1020039a100006fa21bffc193f00cc980320ecd8236000d6012000d6236008d4012008d4236004d2012010b8226001b91f2004900720019610000d94100008133f004c920260e8d0012004da012008f40360009fc6a00001000000c401200c90102001da00a008de012014f403600081c6a00488012018de213ffcd2213ff8d4213ff4c4213ff0fa022004fa213fec113f00bf90022358da02a018f40360009fc6a00088013fece4012008113f004c900220b8da04a00cf40360009fc6a00001000000e2012008113f001f9002225cda046000f40360009fc6a00001000000e001200cb8242001b91f20049e072001173f00cc9602e2209410000f13000083920263d8d0012000da012004f40360009fc6a00001000000c201200890102001da006008de012010f403600081c6a00488012014de213ffcd2213ff8d4213ff4c4213ff0ee213fecfa022004fa213fe8113f00bf90022358da02a018f40360009fc6a00088013fe8e401200c9010216dda04a00cf40360009fc6a00001000000e201200c113f001f9002225cda046000f40360009fc6a00001000000e0012010b8242001b91f20049e072001d60120049410000f921020b1d0012000da012008f40360009fc6a00001000000c201200c113f00259002227cda006000f40360009fc6a00001000000da01200c90102175da03600cf40360009fc6a00001000000d801200c90102001da032008de012014f403600081c6a00488012018de213ffcd2213ff8d4213ff4fa022004fa213ff0fa022008fa213fec113f0025900222b4da02a018f40360009fc6a00088013fece401200cb824a001b91f2004a2072001d401200892100011d00120007ffffd409e13e002e0012008113f001f9002225cda042000f40360009fc6a00001000000de012008901020e9da03e00cf40360009fc6a00001000000c2012008113f001f9002225cda006000f40360009fc6a00001000000901020017fffefdd010000009a102005da213ffc96100008d4012008d201200cd00120047ffff11988013ffcd801200890102001da032008de012010f403600081c6a00488012014de213ffcd2213ff8d4213ff4fa022004fa213ff0fa022008fa213fec113f00bf90022358da02a018f40360009fc6a00088013fece401200cb824a001b91f2004a2072001d401200892100011d00120047ffffd049e13e002e0012008113f001f9002225cda042000f40360009fc6a00001000000de012008113f004c900221fcda03e00cf40360009fc6a00001000000c2012008113f001f9002225cda006000f40360009fc6a00001000000da01200cb8236001b91f200498072001d40120089210000cd00120007ffffce69e13e002d601200890102001da02e008de012010f403600081c6a00488012014e4022004de213ffcd2213ff8d4213ff4fa04a000fa213ff0fa04a008fa213fec113f00259002227cda02a018f40360009fc6a00088013fece201200cb8246001b91f2004a0072001d401200892100010d00120007ffffcc89e13e002de012008113f001f9002225cda03e000f40360009fc6a00001000000c2012008113f004c900223d8da00600cf40360009fc6a00001000000da012008113f001f9002225cda036000f40360009fc6a00001000000d801200cb8232001b91f200496072001d40120089210000bd00120047ffffcaa9e13e002d401200890102001da02a008de012010f403600081c6a00488012014de213ffcd2213ff8d4213ff4c4213ff0ee213fecfa022004fa213fe8113f00bf90022358da02a018f40360009fc6a00088013fe8e401200c113f004c90022100da04a00cf40360009fc6a00001000000e201200c113f001f9002225cda046000f40360009fc6a00001000000e0012010b8242001b91f20049e072001d60120049410000f921021f1d0012000da012008f40360009fc6a00001000000c201200c90102001da006008de012014f403600081c6a00488012018113f00cc900222a0da02a00cf403600081c6a004010000009010217dda02a00cf403600081c6a00401000000de213ffcd2213ff8d4213ff4c4213ff0ee213fecfa022004fa213fe8fa022008fa213fe4fa02200cfa213fe0113f0025900222b4da02a018f40360009fc6a00088013fe0e4012014e201200880a460012280000601000000113f004c9002237010800005da04a00c113f004d90022008da04a00cf40360009fc6a00001000000e0012014113f001f9002225cda042000f40360009fc6a00001000000d0213ffcd0213ff892013ff8d00120004000078088013ff8de012020b823e001b91f200482072001d601201494100001921020edd0012000da012018f40360009fc6a00001000000da01201c113f001f9002225cda036000f40360009fc6a00001000000d801201c113f004c90022124da03200cf40360009fc6a00001000000d601201c113f001f9002225cda02e000f40360009fc6a00001000000d0213ffcd0213ff892013ff8d001200c4000079a88013ff8d4012028b822a001b91f200492072001d601201c94100009921020edd0012000da012020f40360009fc6a00001000000d0012024c4022000113f001f9002225c9a100002f40360009fc6a00001000000ee012024113f004c9002213cda05e00cf40360009fc6a00001000000ec01202490102001da05a008de01202cf403600081c6a00488012030e4022004808ca0013280000f01000000e004a000c204200880a060053280000601000000233f004ca204619010800009de213ffc233f004ca204605010800005de213ffc233f004ca2046050de213ffcd2213ff8d4213ff4c4213ff0e4213fece2213fe8113f00bf90022358da02a018f40360009fc6a00088013fe8e201200cd0012000da04600cf40360009fc6a00001000000e001200c113f001f9002225cda042000f40360009fc6a00001000000de012010b823e001b91f200482072001173f00cd9602e09894100001133f004c920260e8d0012004da012008f40360009fc6a00001000000da01200c90102001da036008de012014f403600081c6a00488012018de213ffcd2213ff8d4213ff4c4213ff0ec213fecfa022008fa213fe8fa02200cfa213fe4113f00bf90022358da02a018f40360009fc6a00088013fe4e4012010113f004c900221c8da04a00cf40360009fc6a00001000000e2012010113f001f9002225cda046000f40360009fc6a000010000008c21a00c8b19600cba102002a0100006fa21bffc1f3f00cd9e03e2b0de242000c2012008c2242004da012014b8236001b91f200498072001961000109410000c133f004c920260e8d0012004da01200cf40360009fc6a00001000000d601200080a2e00132800004d401201010800026ea012010113f001f9002225cda02a000f40360009fc6a00001000000d2012010113f004c9002226cda02600cf40360009fc6a00001000000d0012010c4022000113f001f9002225c9a100002f40360009fc6a00001000000ee012014b825e001b91f2004ac072001173f00cd9602e33094100016133f004c920260e8d0012000da01200cf40360009fc6a00001000000ea01201090102001da056008de012018f403600081c6a0048801201cde213ffcd4213ff8fa022004fa213ff4fa022008fa213ff0113f00bf90022358da02a018f40360009fc6a00088013ff0e4012008113f004c900221c8da04a00cf40360009fc6a00001000000e2012008113f001f9002225cda046000f40360009fc6a00001000000e0012008d0012004da04200cf40360009fc6a00001000000de012008113f001f9002225cda03e000f40360009fc6a00001000000c2012008901020f5da00600cf40360009fc6a00001000000da012008113f001f9002225cda036000f40360009fc6a00001000000d8012008113f004c900221c8da03200cf40360009fc6a00001000000d6012008113f001f9002225cda02e000f40360009fc6a00001000000d4012008d0012000da02a00cf40360009fc6a00001000000d201200890102001da026008de01200cf403600081c6a00488012010de213ffcd2213ff8d4213ff4c4213ff0ee213fecec213fe8fa022004fa213fe4fa022008fa213fe0fa02200cfa213fdc113f00bf90022358da02a018f40360009fc6a00088013fdce4012018113f004c90022214da04a00cf40360009fc6a00001000000e2012018113f001f9002225cda046000f40360009fc6a000010000008c21a00c8b19600cba102002a0100006fa21bffc1f3f00cd9e03e380de242000c201200cc2242004da01201cb8236001b91f200498072001961000109410000c133f004c920260e8d0012004da012014f40360009fc6a00001000000d6012018113f001f9002225cda02e000f40360009fc6a00001000000d401200080a2a00132800004d201201810800026e8012018113f004c9002226cda02600cf40360009fc6a00001000000d0012018c4022000113f001f9002225c9a100002f40360009fc6a00001000000ee01201cb825e001b91f2004ac072001173f00cd9602e3c894100016133f004c920260e8d0012000da012014f40360009fc6a00001000000ea012018113f001f9002225cda056000f40360009fc6a00001000000e8012018113f004c900220a0da05200cf40360009fc6a00001000000e6012018113f001f9002225cda04e000f40360009fc6a00001000000e4012018113f00bf90022358da04a018f40360009fc6a00001000000d0213ffcd0213ff892013ff8d00120084000071c88013ff8e2012024b8246001b91f2004a0072001d601201894100010921020edd0012000da01201cf40360009fc6a00001000000de01202090102001da03e008f40360009fc6a00001000000c201202090102001da006008de012028f403600081c6a0048801202cde213ffcd2213ff8d4213ff4c4213ff0ee213fecfa022004fa213fe8113f00bf90022358da02a018f40360009fc6a00088013fe8e401200c901020a1da04a00cf40360009fc6a00001000000e201200c113f00259002227cda046000f40360009fc6a00001000000d0213ffcd0213ff892013ff8d00120004000071d88013ff8e0012018b8242001b91f20049e072001d601200c9410000f921020edd0012000da012010f40360009fc6a00001000000c2012014113f00259002227cda006000f40360009fc6a00001000000da012014901020a5da03600cf40360009fc6a00001000000d801201490102001da032008de01201cf403600081c6a00488012020de213ffcd2213ff8d4213ff4c4213ff0fa022004fa213fecfa022008fa213fe8113f00bf90022358da02a018f40360009fc6a00088013fe8d401200cd2012010d00120044000072401000000e401200c113f001f9002225cda04a000f40360009fc6a00001000000e2012010b8246001b91f2004a0072001173f00ce9602e3c09410001013000083920263d8d0012000da012008f40360009fc6a00001000000de01200c90102001da03e008de012014f403600081c6a004880120188c21a00c8b19600cba102002a4100006fa21bffc233f00cfa2046030e224a000213f00caa0042188e024a004de213ffcd2213ff8d4213ff4c4213ff0fa022004fa213fece4213fe8113f00bf90022358da02a018f40360009fc6a00088013fe8de01200c113f004c90022300da03e00cf40360009fc6a00001000000c201200c113f001f9002225cda006000f40360009fc6a000010000008c21a00c8b19600cba1020029a100006fa21bffc193f00cf98032234d8236000d6012000d6236004d4012010b822a001b91f2004920720019610000d94100009133f004c920260e8d0012004da012008f40360009fc6a00001000000d001200cc4022008901020019a100002de012014f403600081c6a00488012018de213ffcd2213ff8d4213ff4fa022004fa213ff0113f00259002227cda02a018f40360009fc6a00088013ff0e4012004113f004c900222a0da04a00cf40360009fc6a00001000000e2012004113f001f9002225cda046000f40360009fc6a00001000000e0012008b8242001b91f20049e072001d40120049210000fd00120007ffff98f9e13e002c201200490102001da006008de01200cf403600081c6a00488012010de213ffcd2213ff8d4213ff4c4213ff0ee213fecfa022004fa213fe8fa022008fa213fe4113f00259002227cda02a018f40360009fc6a00088013fe4e4012014b824a001b91f2004a2072001d401201092100011d00120047ffff9709e13e002e0012010113f001f9002225cda042000f40360009fc6a00001000000de012010113f00bf90022358da03e018f40360009fc6a00001000000c2012010113f004d90022064da00600cf40360009fc6a00001000000da012010113f001f9002225cda036000f40360009fc6a00001000000d8012014b8232001b91f2004960720019410000bd6012008921021f1d0012000da01200cf40360009fc6a00001000000d201201090102001da026008f40360009fc6a00001000000d0012010c4022008901020019a100002de012018f403600081c6a0048801201cde213ffcd2213ff8d4213ff4fa022004fa213ff0fa022008fa213fec113f00259002227cda02a018f40360009fc6a00088013fece4012008113f004c900223a4da04a00cf40360009fc6a00001000000e2012008113f001f9002225cda046000f40360009fc6a00001000000e001200cb8242001b91f20049e072001d40120089210000fd00120007ffff9169e13e002c2012008113f001f9002225cda006000f40360009fc6a00001000000da012008113f004c90022160da03600cf40360009fc6a00001000000d8012008113f001f9002225cda032000f40360009fc6a00001000000d601200cb822e001b91f2004940720019210000ad4012008d00120047ffff8f89e13e002d0012008c4022008901020019a100002de012010f403600081c6a00488012014de213ffcd2213ff8d4213ff4c4213ff0ee213fecfa022004fa213fe8fa022008fa213fe4113f00bf90022358da02a018f40360009fc6a00088013fe4e4012010113f00259002227cda04a018f40360009fc6a00001000000e2012010113f004d90022058da04600cf40360009fc6a00001000000e0012010113f001f9002225cda042000f40360009fc6a00001000000de012014b823e001b91f200482072001d401201092100001d00120047ffff8c39e13e002da012010113f001f9002225cda036000f40360009fc6a00001000000d8012010113f004c90022000da03200cf40360009fc6a00001000000d601201090102001da02e008f40360009fc6a00001000000d4012010113f001f9002225cda02a000f40360009fc6a00001000000d2012014b8226001b91f200490072001d601200894100008921021f1d0012000da01200cf40360009fc6a00001000000c401201090102001da00a008de012018f403600081c6a0048801201cde213ffcd2213ff8d4213ff4fa022004fa213ff0fa022008fa213fec113f00bf90022358da02a018f40360009fc6a00088013fece401200cb824a001b91f2004a2072001d401200892100011d00120047ffff87f9e13e002e0012008113f001f9002225cda042000f40360009fc6a00001000000de012008113f004d9002203cda03e00cf40360009fc6a00001000000c2012008113f001f9002225cda006000f40360009fc6a00001000000da01200cb8236001b91f200498072001d40120089210000cd00120007ffff8619e13e002d601200890102001da02e008de012010f403600081c6a00488012014de213ffcd2213ff8d4213ff4fa022004fa213ff0fa022008fa213fec113f00bf90022358da02a018f40360009fc6a00088013fece401200cb824a001b91f2004a2072001d401200892100011d00120047ffff8449e13e002e0012008113f001f9002225cda042000f40360009fc6a00001000000de012008113f004c90022354da03e00cf40360009fc6a00001000000c2012008113f001f9002225cda006000f40360009fc6a00001000000da01200cb8236001b91f200498072001d40120089210000cd00120007ffff8269e13e002d601200890102001da02e008de012010f403600081c6a00488012014d4213ffcde213ff8d2213ff4fa022004fa213ff0fa02200cfa213fec113f000f9002204cda02a018f40360009fc6a00088013fece4012010901021edda04a00cf40360009fc6a00001000000e2012008b8246001b91f2004a007200192100010d00120009a0120104000064601000000de01200480a3e00122800004c201201010800011d8012010da01200080a360013280000601000000113f00569002211010800005da00600c113f00be90022318da00600cf40360009fc6a00001000000d8012010901021f5da03200cf40360009fc6a00001000000d601201090102001da02e008de01200cf403600081c6a00488012014de213ffcfa02a00cfa213ff8d20220049010208d7fff5b8688013ff8da012000de012004f403600081c6a00488012008|@2239,131071|36,4,@2181 72,4,@2183 84,4,@2185 116,4,@2186 148,4,@1478 208,4,$2180+234 360,4,@2193 416,5,@2194 436,4,@1738 444,4,I24 496,4,@2196 548,5,@520 616,4,@499 740,4,@499 804,4,@499 856,4,@499 968,4,@499 1032,4,@499 1144,4,@499 1172,4,@1331 1200,4,@485 1264,4,@485 1292,4,@1329 1320,4,@485 1388,4,@485 1416,4,@1363 1444,4,@485 1560,4,@2166 1612,4,@485 1688,4,@499 1784,4,@2197 1796,4,@2185 1836,4,@2166 1864,4,@1383 1892,4,@485 1936,4,@2199 1980,4,@1351 2060,4,@2201 2072,4,@2185 2112,4,@2166 2140,4,@1349 2168,4,@485 2212,4,@2203 2264,4,@1351 2344,4,@2166 2372,4,@1347 2400,4,@485 2440,4,@2207 2452,4,I48 2536,4,@2166 2588,4,@485 2664,4,@499 2768,4,@501 2832,4,@485 2884,4,@485 2912,5,@2086 2944,5,@2097 3008,4,@2166 3072,4,@485 3100,4,@1373 3128,4,@485 3248,4,@499 3312,4,@485 3340,4,@1408 3368,4,@485 3484,4,@2166 3512,4,@1353 3540,4,@485 3640,4,@2210 3728,4,@501 3772,4,@1400 3788,4,@1412 3816,4,@485 3856,5,@2211 3916,4,@485 3944,4,@1356 3972,4,@485 4012,5,@2213 4076,4,@485 4104,4,@1358 4192,4,@1365 4208,4,@1339 4224,4,@1339 4256,4,@2166 4308,4,@485 4348,4,@2214 4360,4,@1351 4452,4,@2166 4480,4,@1369 4508,4,@485 4552,4,@2219 4596,4,@1351 4648,4,@485 4676,4,@1381 4708,4,@485 4748,4,@2221 4760,4,@1351 4840,4,@2166 4868,4,@1369 4896,4,@485 4948,4,@485 5000,4,@485 5028,4,@1369 5056,4,@485 5180,4,@2166 5208,4,@1375 5236,4,@485 5280,4,@2223 5324,4,@1351 5356,4,@485 5404,4,@1381 5436,4,@485 5476,4,@2224 5488,4,@1351 5520,4,@485 5548,4,@1345 5576,4,@485 5604,4,@2166 5644,5,@2226 5780,4,@2166 5832,4,@499 5872,5,@2227 5932,4,@499 6040,4,@2166 6076,5,@2228 6088,4,@485 6128,4,@2230 6140,4,I48 6216,4,@2233 6228,4,@2185 6268,4,@2166 6296,4,@1392 6324,4,@485 6368,4,@2235 6412,4,@1351 6492,4,@499 6520,4,@1385 6548,4,@485 6672,4,@499 6736,4,@485 6764,4,@2166 6792,4,@1419 6820,4,@485 6976,4,@499 7004,4,@1404 7032,4,@485 7096,4,@485 7124,4,@1361 7152,4,@485 7280,4,@2166 7308,4,@499 7336,4,@1418 7364,4,@485 7428,4,@485 7456,4,@1333 7508,4,@485 7636,4,@2166 7700,4,@485 7728,4,@1416 7756,4,@485 7872,4,@2166 7936,4,@485 7964,4,@1398 7992,4,@485 8108,4,@366 8184,5,@2237 8232,4,@1478 8248,4,@2158 8344,5,@496 2181:C2,612|9e13e002f606201880a1001b8bd02018b822a001811f20003480000980a22001c4036004113f005690022110da00a00cf403600081c6a0040100000032800005c40220049010200181c3e0060100000080a0a00132800010ee036004ee0220008c21a0108b196010ba10200390100006fa21bffcec036004ec222008d4222004ee2220009a10000bf403600081c6a00401000000de213ffcda213ff8d2213ff4d4213ff0d6213fecc4213fe8fa022000fa213fe4113f00259002227cda05e018f40360009fc6a00088013fe4ec0120148c21a0108b196010ba10200390100006fa21bffcea05a004ea222008e801200ce8222004e6012000e6222000da012008f40360009fc6a00001000000e4012014e204a004fa046000fa213ffc921020b1d00120101b0000839a0360d8f40360009fc6a00088013ffc80a2200122800005921020eda0102005108000189e1c2004d00120141b0000839a0360d8f40360009fc6a0000100000080a220012280000501000000a01020051080000c9e1c200413000083920263d8d00120141b0000839a0360d8f40360009fc6a00001000000a01000089e1c20048c21a00c8b19600cba10200290100006fa21bffc82102001c2222004de222000da012000f40360009fc6a00001000000da012018d8036004d0012014da03200cf40360009fc6a00001000000d6012018d402e00490102001da02a008f40360009fc6a00001000000d2012018d0026004c4022000113f001f9002225c9a100002f40360009fc6a00001000000ee012010b825e001b91f2004ac072001d601200c94100016d2012014d0012008da012018de01201c10bfff6a88012020|@2182,131071|36,4,@1478 180,4,@499 292,4,I24 340,4,I24 384,4,I48 396,4,I24 540,4,@485 2182:S37|50415253455f5452454528292e7074446973706c61792833297072696e744c697374283429 2183:C2,44|9e13e002f606201880a1001b8bd02018d4022008d2022004d0022000da036004f403600081c6a00401000000|@2184,131071| 2184:S25|50415253455f5452454528292e7074446973706c6179283129 2185:O1|@2180 2186:C2,312|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d2213ff4d4213ff0fa022000fa213fecfa022008fa213fe8fa02200cfa213fe4113f00bf90022358da02a018f40360009fc6a00088013fe4901020017fffe9a30100000084102005c4213ffcd601200c94100008d2012010d00120007ffff5ac88013ffcee01200cd0012008da05e00cf40360009fc6a00001000000ec01200c113f001f9002225cda05a000f40360009fc6a00001000000ea01200c901020f5da05600cf40360009fc6a00001000000e801200c113f001f9002225cda052000f40360009fc6a00001000000e6012010b824e001b91f2004a4072001e2012014173f00ca9602e2e494100012921021f1d0012004da046004f40360009fc6a00001000000e001200c90102001da042008de012018f403600081c6a0048801201c|@2192,131071|56,4,@2166 84,5,@2086 116,5,@2173 152,4,@485 204,4,@485 248,4,@2187 2187:O1|@2188 2188:C2,44|9e13e002f606201880a1001b8bd02018d4022008d2022004d0022000353f00cab406a33481c6a00401000000|@2191,131071|28,4,@2189 2189:C2,276|9e13e002f606201880a1001b8bd02018de213ffcd2213ff8d4213ff4fa022000fa213ff0fa022004fa213fec113f000f9002204cda02a018f40360009fc6a00088013fecc4012008d0012004da00a00cf40360009fc6a00001000000d00120007fffeda30100000080a2200122800004ee01200810800022e6012008113f001f9002225cda05e000f40360009fc6a00001000000ec012008113f004c90022000da05a00cf40360009fc6a00001000000ea012008113f001f9002225cda056000f40360009fc6a00001000000901020017fffe91b01000000a8102005e8213ffc96100008d4012008d201200cd00120007fffea5788013ffce601200890102001da04e008de012010f403600081c6a00488012014|@2190,131071|44,4,@366 96,5,@2102 124,4,@485 152,4,@1333 180,4,@485 208,5,@2086 240,5,@2097 2190:S44|50415253455f5452454528292e7074446973706c61792833297072696e74436f6e7374727563746f72283329 2191:S44|50415253455f5452454528292e7074446973706c61792833297072696e74436f6e7374727563746f72283129 2192:S45|50415253455f5452454528292e7074446973706c61792833297072696e74446174617479706542696e64283329 2193:S7|3c456d7074793e 2194:C2,16|9e13e002d002200081c3e00601000000|@2195,129| 2195:S24|5354525543545f56414c5328292e76616c4e616d65283129 2196:O2|34,0 2197:C2,348|9e13e002f606201880a1001b8bd0201880a2200132800012de213ffcde213ffcd4213ff8113f004c900223f0da02a00cf40360009fc6a00088013ff8c4012000113f001f9002225cda00a000de012004f403600081c6a00488012008da213ff8d2213ff4d4213ff0fa022000fa213fecfa022004fa213fe8113f00bf90022358da02a018f40360009fc6a00088013fe8c401200cb820a001b91f2004ae072001ec012010d401200892100017d0012004da05a004f40360009fc6a00001000000ea012008113f001f9002225cda056000f40360009fc6a00001000000e8012008901020f5da05200cf40360009fc6a00001000000e6012008113f001f9002225cda04e000f40360009fc6a00001000000e401200cb824a001b91f2004a2072001e0012010d401200892100011d0012000da042004f40360009fc6a00001000000de01200890102001da03e008de012014f403600081c6a00488012018|@2198,131071|36,4,@1410 64,4,@485 120,4,@2166 196,4,@485 248,4,@485 2198:S40|50415253455f5452454528292e7074446973706c61792833297072696e7456616c42696e64283329 2199:C2,44|9e13e002f606201880a1001b8bd02018d4022008d2022004d0022000da036004f403600081c6a00401000000|@2200,131071| 2200:S40|50415253455f5452454528292e7074446973706c61792833297072696e7456616c42696e64283129 2201:C2,276|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d2213ff4d4213ff0fa022000fa213fecfa022004fa213fe8113f00bf90022358da02a018f40360009fc6a00088013fe8c401200cb820a001b91f2004ae072001ec012010d401200892100017d0012004da05a004f40360009fc6a00001000000ea012008113f001f9002225cda056000f40360009fc6a00001000000e8012008901020f5da05200cf40360009fc6a00001000000e6012008113f001f9002225cda04e000f40360009fc6a00001000000e401200cb824a001b91f2004a2072001e0012010d401200892100011d0012000da042004f40360009fc6a00001000000de01200890102001da03e008de012014f403600081c6a00488012018|@2202,131071|48,4,@2166 124,4,@485 176,4,@485 2202:S39|50415253455f5452454528292e7074446973706c61792833297072696e74436c61757365283329 2203:C2,108|9e13e002f606201880a1001b8bd02018c40220008c21a00c8b19600cba102002ae100006fa21bffc2d3f00ccac05a174ec25e000ec036008ec25e004ea022004b8256001b91f2004a80720019610001794100014921021f1d000a004da036004f403600081c6a00401000000|@2206,131071|40,4,@2204 2204:C2,44|9e13e002f606201880a1001b8bd02018d4022008d2022004d0022000da036004f403600081c6a00401000000|@2205,131071| 2205:S39|50415253455f5452454528292e7074446973706c61792833297072696e74436c61757365283129 2206:S41|50415253455f5452454528292e7074446973706c61792833297072696e746676616c62696e64283129 2207:O1|@2208 2208:C2,44|9e13e002f606201880a1001b8bd02018c4022000ee022008d000a000da05e00cf403600081c6a00401000000|@2209,131071| 2209:S40|50415253455f5452454528292e7074446973706c61792833297072696e745374724e616d65283129 2210:S2|2829 2211:C2,204|9e13e002f606201880a1001b8bd02018808a20013280002884102001c4022000d0213ffcd0213ff8de213ff4d2213ff0fa00a000fa213fecfa00a004fa213fe892013ff8d00220047fffffee88013fe88c21a00c8b19600cba1020029e100006fa21bffcd2012010d223e004d0012004d023e0008c21a00c8b19600cba10200284100006fa21bffcd2012014d220a004d0012000d020a000d0012008de222000c422200490102001c401200c81c0a00688012018c422600090102001d02260049010200181c3e00601000000|@2212,65667| 2212:S17|4c697374506169722e756e7a6970283229 2213:C2,204|9e13e002f606201880a1001b8bd02018808a20013280002884102001c4022000d0213ffcd0213ff8de213ff4d2213ff0fa00a000fa213fecfa00a004fa213fe892013ff8d00220047fffffee88013fe88c21a00c8b19600cba1020029e100006fa21bffcd2012010d223e004d0012004d023e0008c21a00c8b19600cba10200284100006fa21bffcd2012014d220a004d0012000d020a000d0012008de222000c422200490102001c401200c81c0a00688012018c422600090102001d02260049010200181c3e00601000000|@2212,65667| 2214:O1|@2215 2215:C2,44|9e13e002f606201880a1001b8bd02018d4022008d2022004d0022000353f00cdb406a0e881c6a00401000000|@2218,131071|28,4,@2216 2216:C2,324|9e13e002f606201880a1001b8bd02018de213ffcd2213ff8d4213ff4fa022000fa213ff0fa022004fa213fecfa02200cfa213fe8113f00bf90022358da02a018f40360009fc6a00088013fe8901020017fffe6ce0100000084102005c4213ffcd601200c94100008d2012010d00120007ffff2d788013ffcee01200cd0012008da05e00cf40360009fc6a00001000000d00120047fffeb290100000080a2200122800004ec01200c10800021e401200c113f001f9002225cda05a000f40360009fc6a00001000000ea01200c901020f5da05600cf40360009fc6a00001000000e801200c113f001f9002225cda052000f40360009fc6a00001000000901020017fffe6a201000000a6102005e6213ffc96100008d401200cd2012010d00120047fffe7de88013ffce401200c90102001da04a008de012014f403600081c6a00488012018|@2217,131071|52,4,@2166 80,5,@2086 112,5,@2173 148,5,@2102 176,4,@485 228,4,@485 256,5,@2086 288,5,@2097 2217:S41|50415253455f5452454528292e7074446973706c61792833297072696e745479706542696e64283329 2218:S41|50415253455f5452454528292e7074446973706c61792833297072696e745479706542696e64283129 2219:C2,44|9e13e002f606201880a1001b8bd02018d4022008d2022004d0022000da036004f403600081c6a00401000000|@2220,131071| 2220:S45|50415253455f5452454528292e7074446973706c61792833297072696e74446174617479706542696e64283129 2221:O1|@2222 2222:C2,44|9e13e002f606201880a1001b8bd02018d4022008d2022004d0022000353f00cdb406a0e881c6a00401000000|@2218,131071|28,4,@2216 2223:C2,44|9e13e002f606201880a1001b8bd02018d4022008d2022004d0022000da036004f403600081c6a00401000000|@2220,131071| 2224:O1|@2225 2225:C2,44|9e13e002f606201880a1001b8bd02018d4022008d2022004d0022000353f00cdb406a0e881c6a00401000000|@2218,131071|28,4,@2216 2226:C2,204|9e13e002f606201880a1001b8bd02018808a20013280002884102001c4022000d0213ffcd0213ff8de213ff4d2213ff0fa00a000fa213fecfa00a004fa213fe892013ff8d00220047fffffee88013fe88c21a00c8b19600cba1020029e100006fa21bffcd2012010d223e004d0012004d023e0008c21a00c8b19600cba10200284100006fa21bffcd2012014d220a004d0012000d020a000d0012008de222000c422200490102001c401200c81c0a00688012018c422600090102001d02260049010200181c3e00601000000|@2212,65667| 2227:C2,204|9e13e002f606201880a1001b8bd02018808a20013280002884102001c4022000d0213ffcd0213ff8de213ff4d2213ff0fa00a000fa213fecfa00a004fa213fe892013ff8d00220047fffffee88013fe88c21a00c8b19600cba1020029e100006fa21bffcd2012010d223e004d0012004d023e0008c21a00c8b19600cba10200284100006fa21bffcd2012014d220a004d0012000d020a000d0012008de222000c422200490102001c401200c81c0a00688012018c422600090102001d02260049010200181c3e00601000000|@2212,65667| 2228:C2,404|9e13e002f606201880a1001b8bd02018d202200080a260053280000880a26001113f004c900222bcda02a00cf403600081c6a004010000003280002dde213ffcde213ffcd4213ff8fa022004fa213ff4113f00259002227cda02a018f40360009fc6a00088013ff4d0012004c402200c113f004c900221ac9a100002f40360009fc6a00001000000ee012004113f001f9002225cda05e000f40360009fc6a00001000000ec012004fa05a00cfa213ffc92103ffdd00120007fff57db88013ffcda012000f40360009fc6a00001000000ea01200890102001da056008de01200cf403600081c6a00488012010d4213ff8fa022004fa213ff4113f00259002227cda02a018f40360009fc6a00088013ff4d0012004c402200c113f004c900222509a100002f40360009fc6a00001000000ee012004113f001f9002225cda05e000f40360009fc6a00001000000ec012004fa05a00cfa213ffc92103ffdd00120007fff57b188013ffcda012000f40360009fc6a00001000000ea01200890102001da056008de01200cf403600081c6a00488012010|@2229,131071|32,4,@1387 80,4,@499 112,4,@1367 140,4,@485 184,5,@509 248,4,@499 280,4,@1379 308,4,@485 352,5,@509 2229:S31|56414c55455f4f505328292e646973706c6179466978537461747573283329 2230:O1|@2231 2231:C2,40|9e13e002f606201880a1001b8bd02018c4022008d0022000da00a00cf403600081c6a00401000000|@2232,131071| 2232:S28|50415253455f5452454528292e7074446973706c6179283329283129 2233:C2,440|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d2213ff4d4213ff0fa022000fa213fecfa022008fa213fe8fa02200cfa213fe4113f00259002227cda02a018f40360009fc6a00088013fe4c401200cd0012008da00a00cf40360009fc6a00001000000d00120047fffe9610100000080a2200122800004ee01200c10800022e6012000113f001f9002225cda05e000f40360009fc6a00001000000ec01200c113f004c90022000da05a00cf40360009fc6a00001000000ea01200c113f001f9002225cda056000f40360009fc6a00001000000901020017fffe4d901000000a8102005e8213ffc96100008d401200cd2012010d00120047fffe61588013ffce6012000e404e00080a4bfed32800004e201200c10800022d601200c113f001f9002225cda046000f40360009fc6a00001000000e001200c901020f5da04200cf40360009fc6a00001000000de01200c113f001f9002225cda03e000f40360009fc6a00001000000c2012010b8206001b91f20049a072001d8012014d401200c9210000dd0012000da032004f40360009fc6a00001000000d601200c90102001da02e008de012018f403600081c6a0048801201c|@2234,131071|56,4,@499 108,5,@2102 136,4,@485 164,4,@1333 192,4,@485 220,5,@2086 252,5,@2097 288,4,@485 340,4,@485 2234:S39|50415253455f5452454528292e7074446973706c61792833297072696e74457842696e64283329 2235:C2,44|9e13e002f606201880a1001b8bd02018d4022008d2022004d0022000da036004f403600081c6a00401000000|@2236,131071| 2236:S39|50415253455f5452454528292e7074446973706c61792833297072696e74457842696e64283129 2237:C2,736|9e13e002f606201880a1001b8bd02018b8226001811f20003480000980a22001c4036000113f005690022110da00a00cf403600081c6a0040100000032800005c40220049010200181c3e0060100000080a0a0013280003bee022000ee022000ec036000de213ffcda213ff8d2213ff4fa05e000fa213ff0fa05e004fa213fec113f00259002227cda05a018f40360009fc6a00088013fecea01200ce8056000fa05200cfa213ffc133f00b392026104d00120047fff553b88013ffcda012000f40360009fc6a00001000000e6012010e404e000113f001f9002225cda04a000f40360009fc6a00001000000e201200cb8246001b91f2004a0072001de012010d403e00092100010d00120041b3f00ca9a036188f40360009fc6a00001000000c2012010da00600090102001da036008de012014f403600081c6a00488012018ec036000de213ffcda213ff8d2213ff4c4213ff0fa05e000fa213fecfa05e004fa213fe8113f00259002227cda05a018f40360009fc6a00088013fe8ea012010e8056000113f00259002227cda052018f40360009fc6a00001000000e6012010e404e000fa04a00cfa213ffc133f00b392026104d00120047fff54fa88013ffcda012000f40360009fc6a00001000000e2012014e0046000113f001f9002225cda042000f40360009fc6a00001000000de012010b823e001b91f200482072001da012014d403600092100001d00120041b3f00ca9a036188f40360009fc6a00001000000d8012014d603200090102001da02e008f40360009fc6a00001000000d4012014d202a000113f00259002227cda026000f40360009fc6a00001000000d0012014c4022000901020b1da00a00cf40360009fc6a00001000000ee012014ec05e00090102001da05a008f40360009fc6a00001000000ea012014e8056000113f001f9002225cda052000f40360009fc6a00001000000e6012010b824e001b91f2004a407200192100012d001200cda012014de01201810bfff4b8801201c|@2238,131071|36,4,@1478 128,4,@499 168,4,@2075 180,5,@496 212,4,@485 268,4,@2185 356,4,@499 388,4,@499 428,4,@2075 440,5,@496 472,4,@485 528,4,@2185 584,4,@499 672,4,@485 2238:S42|50415253455f5452454528292e7074446973706c6179283329646973706c61795265634c697374283229 2239:S25|50415253455f5452454528292e7074446973706c6179283329 2240:S41|535452554354555245535f28292e646973706c617953747275637473283329646973706c6179283229 2241:C2,40|9e13e002f606201880a1001b8bd02018d2022004d0022000da036004f403600081c6a00401000000|@2080,131071| 2242:S31|535452554354555245535f28292e646973706c617953747275637473283329 2243:C2,92|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d0213ff4da036008f40360009fc6a00088013ff480a2200132800009c4012008c4012004d0012000da00a004de012008f403600081c6a0048801200c81c0a0068801200c|@1463,131071| 2244:C2,92|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d0213ff4da036008f40360009fc6a00088013ff480a2200132800009c4012008c4012004d0012000da00a004de012008f403600081c6a0048801200c81c0a0068801200c|@1463,131071| 2245:C2,92|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d0213ff4da036008f40360009fc6a00088013ff480a2200132800009c4012008c4012004d0012000da00a004de012008f403600081c6a0048801200c81c0a0068801200c|@1463,131071| 2246:C2,92|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d0213ff4da036008f40360009fc6a00088013ff480a2200132800009c4012008c4012004d0012000da00a004de012008f403600081c6a0048801200c81c0a0068801200c|@1463,131071| 2247:C2,92|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d0213ff4da036008f40360009fc6a00088013ff480a2200132800009c4012008c4012004d0012000da00a004de012008f403600081c6a0048801200c81c0a0068801200c|@1463,131071| 2248:C2,12|9e13e00281c3e00601000000|@2249,129| 2249:S3|456e76 2250:O2|@2251,@2013 2251:C2,208|9e13e002f606201880a1001b8bd02018d2213ffcda213ff88c21a00888013ff88b1960083b100000ba07600184100006fa21bffcae103ffdee20a000de213ffcd0213ff8d4213ff4c4213ff0ec026010ec213fecea026014ea213fe8e8026018e8213fe4e602601ce6213fe0e4026020e4213fdce2026024e2213fd8d602600cd4026008e0026000c202600492100001901000107fff84f488013fd81b0000839a0363d8da213ffc96100008d4012004d2012000d00120089a0120144000000c88013ffcd801200c81c3200688012018|@5316,131071|148,5,@1484 156,4,I48 188,5,@2252 2252:C2,156|9e13e002f606201880a1001b8bd02018da213ffc8c21a00c88013ffc8b19600cba10200284100006fa21bffc2f3f00d1ae05e2dcee20a000d220a004d4213ffcc4213ff8d2213ff4d6213ff0de213fec88013fec80a2200132800006fa02200490102001de01200081c3e0068801201cfa213ffcd00220009a0120144000007888013ffcd001200088012004f606201880a1001b8bd0201830bfffef|@5315,131071|44,4,@2253 124,5,@2259 2253:C2,92|9e13e002f606201880a1001b8bd02018d0036004c4022000b820a001811f200036800007b820a00190102001353f00d1b406a35481c6a00401000000b9172004ae072001ee22200090100002353f00d1b406a3e481c6a00401000000|@2258,98465|44,4,@2254 76,4,@2256 2254:C2,80|9e13e0028c21a0088b1960083b100000ba07600190100006fa21bffc84102001c4222000841000088c21a00c8b19600cba10200290100006fa21bffcc422200484103ffdc422200081c3e00601000000|@2255,65665| 2255:S27|5354525543545f56414c5328292e6d616b65467265654964283129 2256:C2,48|9e13e002841000088c21a00c8b19600cba10200290100006fa21bffcc422200484102001c422200081c3e00601000000|@2257,65665| 2257:S5|426f756e64 2258:S56|535452554354555245535f28292e70617373325374727563747328332970617373325374727563742835296d616b65547970654964283129 2259:C2,184|9e13e002f606201880a1001b8bd02018c402200080a0a01d3280000780a0a009d2022004353f00d2b406a15481c6a004010000003280000780a0a015d2022004353f02a9b406a28c81c6a004010000003280000780a0a00dd2022004353f02aeb406a14081c6a004010000003280000880a0a019d2022004d0022008353f02afb406a11081c6a004010000003280000990102001d4022008d202200cd0022004353f02b1b406a07c81c6a0040100000081c3e00601000000|@5314,131071|36,4,@2260 64,4,@5255 92,4,@5283 124,4,@5290 160,4,@5303 2260:C2,256|9e13e002f606201880a1001b8bd02018c40360008c21a0148b196014ba102004ae100006fa21bffc2d3f00d2ac05a270ec25e000ec00a000ec25e00cd025e008ea037ff0ea25e004d0213ffcd0213ff8d0213ff4a810000fa610000da4100008a210000992013ff490100017400001c388013ff4e6213ffce4213ff8e8213ff488013ff480a4600132800004e004600010800015e0012008fa046004fa213ffcde042010de213ff8c2042014c2213ff4d604200cd4042008d2042004d00420009a0120144000031288013ff4e201200088012004f606201880a1001b8bd0201830bfffe9de043ffcd003e024da01200cde012000f403600081c6a00488012018|@5254,131071|40,4,@2261 108,5,@2283 196,5,@2297 2261:C2,124|9e13e002f606201880a1001b8bd02018de213ffcfa03600cfa213ff8fa036008fa213ff4fa036004fa213ff092100008113f00d2900223087fff526988013ff0133f00d29202631c7fff526501000000c401200cd021200cd6012000d401200492102005d00120089e100002353f00d2b406a35081c6a0048801200c|@2282,131071|48,4,@2262 56,5,@496 64,4,@2263 72,5,@496 108,4,@2264 2262:S10|53747275637475726520 2263:S43|2068617320616c7265616479206265656e20626f756e6420696e2074686973206465636c61726174696f6e 2264:C2,152|9e13e002f606201880a1001b8bd0201880a260012280000601000000053f00d38400a004108000058c21a014053f00d38400a0c08c21a0148b196014ba102004ae100006fa21bffc2d3f00d3ac05a180ec25e000d025e00cea012000ea25e008d425e004a81000088c21a0108b196010ba10200390100006fa21bffcee222008d6222004e82220009a100002f403600081c6a00488012004|@2281,131071|28,4,@2265 44,4,@2268 72,4,@2271 2265:O1|@2266 2266:C2,124|9e13e002f606201880a1001b8bd02018c4022000ee00a004ee213ffcec00a008ec213ff8ea00a00cea213ff4e800a010e8213ff0e600a014e6213fece400a018e4213fe8e200a01ce2213fe4e000a020e0213fe0c200a024c2213fdcd600a00094102005d2022004d0022008353f0042b406a05081c6a00488013fdc|@2267,131071|108,4,@1265 2267:S19|4c45585f28292e6572726f7250726f63283129 2268:O1|@2269 2269:C2,124|9e13e002f606201880a1001b8bd02018c4022000ee00a004ee213ffcec00a008ec213ff8ea00a00cea213ff4e800a010e8213ff0e600a014e6213fece400a018e4213fe8e200a01ce2213fe4e000a020e0213fe0c200a024c2213fdcd600a00094102001d2022004d0022008353f0042b406a05081c6a00488013fdc|@2270,131071|108,4,@1265 2270:S21|4c45585f28292e7761726e696e6750726f63283129 2271:C2,344|9e13e002f606201880a1001b8bd02018c403600cde213ffcda213ff8d0213ff4133f00d3920262f4d000a0241b3f00389a0360407fff64a988013ff4ee012000d0213ffc113f00259002227cda05e018f40360009fc6a00088013ffcec012004ea012008d0056008da05a00cf40360009fc6a00001000000e8012004113f0025900222b4da052000f40360009fc6a00001000000e6012004113f00259002227cda04e018f40360009fc6a00001000000e4012004113f00d49002201cda04a00cf40360009fc6a00001000000e2012004113f001f9002225cda046000f40360009fc6a00001000000e00120088c21a00c8b19600cba1020029e100006fa21bffc82102001c223e004da042004da23e000d4012004d20120009010000f7fffd9be01000000d801200490102001da032008f40360009fc6a00001000000d601200490102001da02e008de01200cf403600081c6a00488012010|@2280,131071|32,4,@2272 44,4,@1112 52,5,@1114 68,4,@499 124,4,@501 152,4,@499 180,4,@2279 208,4,@485 284,5,@2067 2272:O3|@2274,@2276,@2273 2273:O2|@2278,@92 2274:O2|@2275,@92 2275:C2,44|9e13e002c4022000ee03600480a0801732800005901020019010200581c3e0060100000081c3e00601000000|@1106,98465| 2276:O2|@2277,@92 2277:C2,56|9e13e002841000088c21a0108b196010ba10200390100006fa21bffcc422200884102115c4222004c4036004c422200081c3e00601000000|@1106,65697| 2278:C2,60|9e13e002c4022000ee03600480a0801732800005de213ffcd002200881c3e00601000000113f003890022020f40620209fc6a00088013ffc90102001|@1106,98465|36,4,@1110 2279:S10|466f756e64206e656172 2280:S29|535452554354555245535f28292e6572726f724e656172283529283129 2281:S26|535452554354555245535f28292e6572726f724e656172283529 2282:S71|535452554354555245535f28292e7061737332537472756374732833297061737332537472756374283529706173733253747275637475726544656328322973456e762d283129 2283:C2,208|9e13e0028c21a0088b1960083b100000ba07600184100006fa21bffcae102001ee20a0008c21a00c8b19600cba102002ae100006fa21bffc2d3f00d4ac05a1b8ec25e000c425e0048c21a0108b196010ba102003ac100006fa21bffc2b3f00d4aa056314ea25a000d025a008c425a0048c21a00c8b19600cba10200290100006fa21bffc2b3f00d5aa0560ccea222000c42220048c21a00c8b19600cba10200284100006fa21bffc2b3f00d5aa0561ccea20a000ec20a004ee226000c4226004d02260089010200181c3e00601000000|@2296,123011|56,4,@2284 92,4,@2288 132,4,@2292 168,4,@2294 2284:C2,60|9e13e002f606201880a1001b8bd02018c4036004ee00a000d0213ffcde213ff8901000179a013ffc4000000c88013ff8ec01200081c5a00688012008|@2287,131071|40,5,@2285 2285:C2,136|9e13e002f606201880a1001b8bd0201880a2200132800005c40220009010200181c3e00601000000de213ffcda213ff8fa00a000fa213ff4fa00a004fa213ff0d00220047fffffef88013ff0ee0120088c21a00c8b19600cba10200290100006fa21bffcec012000ec222004ea012004ea222000da05e000de01200cf403600081c6a00488012010|@2286,131071| 2286:S43|5554494c49544945535f28292e6e6f4475706c6963617465732832296170706c792831296170706c283129 2287:S36|5554494c49544945535f28292e6e6f4475706c6963617465732832296170706c79283129 2288:C2,64|9e13e002f606201880a1001b8bd02018da213ffcd2213ff8d0213ff4c4036004d000a000de213ff09a013ffc4000000c88013ff0ee01200081c5e00688012010|@2291,131071|44,5,@2289 2289:C2,224|9e13e002f606201880a1001b8bd0201880a2200132800019c4022000d00360008c21a00c8b19600cba10200284100006fa21bffcee037ffcee20a004ec037ff8ec20a000ea022004e80560008c21a00c8b19600cba102002a6100006fa21bffce824e004c424e000e62560009010200181c3e00601000000de213ffcda213ff8fa022004fa213ff4d2037ff8d000a0001b0000839a0360d8f40360009fc6a00088013ff480a220012280000ad0012000ee012004ec05e000d005fff8da05a008de012008f403600081c6a0048801200cda012004de01200810bfffcb8801200c|@2290,131071|144,4,I24 2290:S43|5554494c49544945535f28292e6e6f4475706c696361746573283229656e7465722832296c6f6f6b283129 2291:S36|5554494c49544945535f28292e6e6f4475706c696361746573283229656e746572283229 2292:C2,180|9e13e002f606201880a1001b8bd02018c4036004ee00a000de213ffcd0213ff888013ff880a5e00132800006de05e00090102001de01200481c3e00688012008fa03e004fa213ffcfa05e004fa213ff8d2012000d003e0001b0000839a0360d8f40360009fc6a00088013ff880a220012280000cee0120008c21a0088b196008ba10200190100006fa21bffcc2012004c2222000da01200c81c360068801201088012008f606201880a1001b8bd0201830bfffdd|@2293,131071|88,4,I24 2293:S37|5554494c49544945535f28292e6e6f4475706c6963617465732832296c6f6f6b7570283129 2294:C2,40|9e13e002f606201880a1001b8bd02018d2022004d0022000da036004f403600081c6a00401000000|@2295,131071| 2295:S36|5554494c49544945535f28292e6e6f4475706c696361746573283229656e746572283129 2296:S28|5554494c49544945535f28292e6e6f4475706c696361746573283229 2297:C2,800|9e13e002f6062018ba21205480a7401b8bd02018c4037ff4de213ffcda213ff8d0213ff4d2213ff0d4213fecd6213fe8fa00bff4fa213fe4fa00bffcfa213fe0d000a0047fff4f6a88013fe0921020b97fff4f6701000000ee01200cee213ffcd6012004d4012000d2012014ec012018da05bff4400000b288013ffcea012020e605600080a4e00132800005e4012018a81000081080008a92100014e204bff4e0047ff4de042000b823e001811f200024800003821020018210000fd0213ffcc2213ff8fa047ffcfa213ff4d2012010d00460047fff4f4688013ff4921020b97fff4f4301000000d0213ffcd6012020d4012000d2012004d001202cc2012024da007ff44000430088013ffc981000089010000c40000c6601000000961000089010000c40000c7601000000d0213ffcd0213ff8d8213ff494013ff8921000089010000b40000c8288013ff48c21a00c8b19600cba10200294100006fa21bffcd2012004d222a000d0012008d022a0048c21a00c8b19600cba10200284100006fa21bffc2f3f02a8ae05e37cee20a000ec012000ec20a004ea01202080a560012280001da810000a9010001640000c4001000000a61000089010001640000c5001000000d0213ffcd0213ff8d4213ff4c4213ff094013ff8921000089010001340000c5b88013ff08c21a00c8b19600cba102002a8100006fa21bffce4012008e4252000e201200ce225200410800008e6012040d0213ffcd0213ff8d4213ff4c4213ff088013ff0e6012040e404fff4e204a000e8213ffce001203ce0213ff8de046000de213ff4d604fff0d4012004d2012010d001202440000e5b88013ff4c2012044da007ff4fa037ff8fa213ffcd201203cd00360047fff4edd88013ffc921020b97fff4eda01000000d0213ffcd6012004d4012000d2012008d00120181b3f010d9a0362904000376888013ffca81000088801203092100014d00120104001d2fc01000000d8012018961000088c21a00c8b19600cba10200290100006fa21bffcd6222004d4012010d4222000d6213ffcda033ffcf40360009fc6a00088013ffcd2012028d0012000d022600090102001c401202081c0a0068801202c|@5253,131071|68,5,@496 80,5,@496 116,5,@2298 212,5,@496 224,5,@496 260,5,@2771 276,5,@2408 292,5,@2410 324,5,@2412 388,4,@5249 428,5,@2408 444,5,@2410 480,5,@2412 600,5,@2423 632,5,@496 644,5,@496 672,4,@2681 680,5,@2683 704,5,@5251 2298:C2,2780|9e13e002f6062018ba21205480a7401b8bd020188c21a00c8b19600cba10200284100006fa21bffc2f3f00d9ae05e094ee20a000d620a004ee012000ec05e00080a5bfe13280004480a5bff9d60360008c21a0148b196014ba10200490100006fa21bffc053f00d98400a15cc4222000c402e000c422200cee222008d2222004de213ffcda213ff8fa05e008fa213ff496100008ea02a02cd405e00492100015113f00d9900221d4400002e988013ff4a81000089010001440000a380100000080a2200122800009e6012000e6012004e404e000e204bffcd0046004e001200881c4200688012010e824e00080a5200132800016d0052008901020297fffd306010000008c21a0148b196014ba102004a4100006fa21bffca2102001e224a00ca0102001e024a0081f0000839e03e3d8de24a004d024a00090100012c201200881c0600688012010e401200881c4a006880120103280009880a5bfe5ea0360008c21a0148b196014ba102004a8100006fa21bffc273f00e1a604e034e6252000e4056000e425200cee252008d2252004de213ffcda213ff8d0213ff4d2213ff0d4213fecd6213fe8c4213fe4fa05e004fa213fe0fa05e00cfa213fdc233f00e1a2046084e2213fd8a0102001e0213fd4e8213fd0173f00e19602e094c202a028d802a02c9410000c92100001d005e00840000a8488013fd0961000089010000b40000b040100000080a2200122800009d4012000d401201cd202a000d0027ffcd0022004c401202081c0a00688012028d622a0009010000b40000b1101000000921000089010000b40000b2c01000000841000089010000940000b4601000000ae1000089010000940000b5601000000d0213ffcd0213ff8d2213ff4c4213ff094013ff8921000089010001740000b6188013ff08c21a00c8b19600cba102002ac100006fa21bffcea012008ea25a000e801200ce825a004ec213ffce6012014e6213ff8d601201cd4012020d201202411000083900223d8da01202c7fffff4988013ff8e201200480a4600132800016e4046008d0213ffc901020297fffd28688013ffc8c21a0148b196014ba102004a0100006fa21bffc9e102001de24200c82102001c22420081b0000839a0363d8da242004d0242000a410001010800005e0012034d0213ffc88013ffce0012034de042000c201202cc2213ffcda03e000da213ff8d601203cd401200492100012d001200040000d4588013ff8d8012030d821203cd6012004d4012020133f010d92026288d001200c1b3f010d9a036290de012038353f010db406a2a881c6a0048801203c328000b280a5a00dde213ffcda213ff8d0213ff4d2213ff0d4213fecd6213fe8fa05e004fa213fe4fa05e008fa213fe0d0013fe01b3f00d99a0363384000027788013fe0aa100008d0012000400036c301000000ea213ffcd0213ff8901020297fffd24088013ff88c21a0148b196014ba102004a8100006fa21bffca6102001e625200ca4102001e4252008e2012000e2252004d0252000e8213ffc901000141b3f00d99a0363384000025c88013ffc8c21a0088b1960083b100000ba076001a0100006fa21bffc9e102001de2420008c21a0108b196010ba10200382100006fa21bffc1b3f01169a036278da206000d8012008d8206008d02060048c21a0108b196010ba10200396100006fa21bffc153f01169402a330d422e000d822e008d022e0048c21a0108b196010ba10200392100006fa21bffc053f01168400a39cc4226000d8226008d02260048c21a0148b196014ba102004ae100006fa21bffc2d3f0117ac05a008ec25e000d825e00ce025e008d025e0048c21a0148b196014ba102004aa100006fa21bffc293f0117a8052278e8256000d825600cd0256008e0256004e60120188c21a0108b196010ba102003a4100006fa21bffc233f0117a20463ace224a000e0032018e024a008de04e018de24a0048c21a0108b196010ba1020039a100006fa21bffc153f01189402a024d4236000d0032020d0236008c404e020c42360048c21a0108b196010ba102003ac100006fa21bffc293f0118a805209ce825a000e203202ce225a008d404e02cd425a0048c21a0348b196034ba10200ca8100006fa21bffcec25202cec04e028ec252028ea252024da252020d225201ce4252018ea04e014ea252014e404e010e4252010c225200cee252008d6252004033f011882006114c2252000da012020da213ffcd601201c94100014d2012014d0012010ee012024da05e0007ffff98988013ffcd0012000ec01202881c5a006880120303280008d80a5a011ea05e004808d600132800082de213ffce805600480a5200132800077de213ffcde213ffcda213ff8d0213ff4d4213ff0d6213fecfa05e008fa213fe8fa05e00cfa213fe4fa056000fa213fe0901020297fffd19088013fe08c21a0148b196014ba102004a6100006fa21bffca4102001e424e00ca2102001e224e00821000083a00423d8e024e004d024e000901000131b3f00d99a036338400001ac01000000de0120108c21a0108b196010ba10200382100006fa21bffc1b3f01189a036148da206000d8022018d8206008d603e018d62060048c21a0108b196010ba10200394100006fa21bffc133f0118920261c0d222a000c4022020c422a008ee03e020ee22a0048c21a0108b196010ba102003ac100006fa21bffc2b3f0118aa056238ea25a000e802202ce825a008e603e02ce625a0048c21a0348b196034ba10200ca4100006fa21bffcec24a02ce203e028e224a028e0022024e024a024d424a020da02201cda24a01cc224a018d403e014d424a014d2022010d224a010ec02200cec24a00cea022008ea24a008c2022004c224a004193f0118980322b0d824a000e4213ffcd8012014d8213ff8d601200494100012d201200cd0012008c4012018da00a0007ffff91088013ff8ee012004ee212024d6012010d4012000d2012008d0012018da01201cde01202010bffde588012024113f011890022334f40620209fc6a00088013ffc90102001de213ffc113f011890022334f40620209fc6a00088013ffc9010200180a5a01132800085de213ffcde213ffcda213ff8d0213ff4d2213ff0d4213fecd6213fe8c4213fe4fa05e004fa213fe0fa05e008fa213fdcfa05e00cfa213fd8ea013fe0ea213fd47ffffdc388013fd4e8012010e6052000b824e001811f200024800003a4102001a4100013d0213ffce201201ce2213ff8d6012018d401201492100012d0012004da0120204000402488013ff8a0100008901000104000098a0100000082100008901000104000099a01000000d0213ffcd0213ff8e0213ff494013ff89210000890100001400009a688013ff48c21a00c8b19600cba1020029a100006fa21bffcd8012004d8236000d6012008d62360048c21a00c8b19600cba10200294100006fa21bffc133f02a8920261ccd222a000d0012000d022a004c401201080a0a0012280001dae10000dac10000d4000096401000000aa100008d00120004000097401000000d0213ffcd0213ff8ec213ff4d4213ff094013ff892100008901000154000097f88013ff08c21a00c8b19600cba102002ae100006fa21bffce8012008e825e000e601200ce625e00410800008ec012040d0213ffcd0213ff8da213ff4d4213ff088013ff0ec012040ea05a000ee213ffce8012038e8213ff8e6056000e6213ff4d6012028d4012004d2012010d001201c40000b8088013ff4e4012040e421204cd6012000d4012030d2012004d00120141b3f010d9a036290de012048353f010db406a2a881c6a0048801204c113f011890022334f40620209fc6a00088013ffc90102001|@5248,131071|40,4,@2299 100,4,@2301 160,4,@2303 168,5,@2304 184,5,@2389 252,5,@1992 296,4,I48 372,4,@2395 444,4,@2396 468,4,@2397 496,5,@2400 512,5,@2402 568,5,@2404 584,5,@2406 600,5,@2408 616,5,@2410 652,5,@2412 720,4,I48 764,5,@1992 808,4,I48 884,5,@2423 908,4,@2680 920,4,@2681 932,4,@2683 1000,4,@2307 1008,5,@2309 1024,5,@2684 1044,5,@1992 1108,4,@2307 1116,5,@2309 1176,4,@2747 1220,4,@2749 1260,4,@2750 1300,4,@2751 1344,4,@2757 1392,4,@2758 1440,4,@2759 1488,4,@2760 1592,4,@2761 1636,5,@2252 1748,5,@1992 1792,4,I48 1812,4,@2307 1820,5,@2309 1852,4,@2763 1900,4,@2764 1948,4,@2765 2072,4,@2766 2120,5,@2252 2168,4,@2769 2196,4,@2769 2360,5,@2771 2376,5,@2408 2392,5,@2410 2424,5,@2412 2488,4,@5246 2528,5,@2408 2544,5,@2410 2580,5,@2412 2696,5,@2423 2728,4,@2681 2740,4,@2683 2756,4,@2769 2299:C2,92|9e13e002f606201880a1001b8bd02018d0036004c4022000b820a001811f200036800007b820a00190102001353f00d1b406a35481c6a00401000000b9172004ae072001ee22200090100002353f00d1b406a3e481c6a00401000000|@2300,98465|44,4,@2254 76,4,@2256 2300:S69|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973747275637456616c75652835296e6577547970654964283129 2301:C2,52|9e13e002f606201880a1001b8bd02018d0213ffcd6036004d403600892102005d003600c353f00d2b406a35081c6a00488013ffc|@2302,131071|36,4,@2264 2302:S29|535452554354555245535f28292e676976654572726f72283329283129 2303:S9|537472756374757265 2304:C2,68|9e13e002f606201880a1001b8bd02018d0213ffcd6213ff8d2213ff4de213ff09210000a113f00d9900222489a013ffc400006c688013ff0c401200081c0a00688012010|@2394,131071|36,4,@2305 48,5,@2387 2305:O1|@2306 2306:C2,204|9e13e002f606201880a1001b8bd0201880a2200132800017c4022008de213ffcd0213ff8901020297fffd00e88013ff88c21a0148b196014ba102004ae100006fa21bffcac102001ec25e00caa102001ea25e00829000083a80523d8e825e004d025e000841000171080000690100002de213ffcd0213ff888013ff8901000021b3f00d99a0363384000002401000000ee02202c8c21a0108b196010ba10200390100006fa21bffc2d3f00dfac05a2a8ec222000ee222008ea012000ea222004e801200481c5200688012008|@2386,131071|40,5,@1992 84,4,I48 128,4,@2307 136,5,@2309 168,4,@2382 2307:O7|@2309,@2341,@2348,@2355,@2362,@2369,@2308 2308:O3|@2377,@2379,@2376 2309:C2,612|9e13e0028c21a0108b196010ba10200384100006fa21bffc2f3f00daae05e1e8ee20a000ee022000ee20a008ec036018ec20a0048c21a0108b196010ba102003aa100006fa21bffc293f00daa8052374e8256000ee256008e8036014e82560048c21a0108b196010ba102003a6100006fa21bffc253f00daa404a3bce424e000ee24e008e4036010e424e0048c21a0108b196010ba102003a2100006fa21bffc213f00dba0042004e0246000ee246008e003600ce02460048c21a0108b196010ba10200382100006fa21bffc193f00db9803204cd8206000ee206008d8036008d82060048c21a0108b196010ba10200396100006fa21bffc153f00db9402a094d422e000ee22e008d4036004d422e0048c21a0108b196010ba10200392100006fa21bffc2f3f00dbae05e0dcee226000ee022000ee226008ec2260048c21a0108b196010ba102003ae100006fa21bffc2d3f00ddac05a22cec25e000ec022000ec25e008e825e0048c21a0108b196010ba102003ac100006fa21bffc293f00dda8052278e825a000e8022000e825a008e425a0048c21a0108b196010ba102003a8100006fa21bffc253f00dda404a2c4e4252000e4022000e4252008e02520048c21a0108b196010ba102003a4100006fa21bffc213f00dda0042310e024a000e0022000e024a008d824a0048c21a0108b196010ba102003a0100006fa21bffc193f00dd9803235cd8242000d8022000d8242008d42420048c21a0348b196034ba10200c90100006fa21bffce222202cd6222028e8222024ea222020e022201cc4222018c2222014e6222010ee22200cd2222008e4222004ec22200081c3e00601000000|@2340,131071|24,4,@2310 72,4,@2314 116,4,@2315 160,4,@2316 204,4,@2317 248,4,@2318 292,4,@2319 336,4,@2335 380,4,@2336 424,4,@2337 468,4,@2338 512,4,@2339 2310:C2,44|9e13e002f606201880a1001b8bd0201894100008d2036004d0036008353f00dab406a23081c6a00401000000|@2313,131071|28,4,@2311 2311:C2,224|9e13e002f606201880a1001b8bd02018de213ffcd2213ff89210000a7fff728a88013ff880a2200132800006c402200090102001c401200481c0a0068801200880a0a00132800006ee01200090102001ee01200481c5e00688012008fa00a000fa213ffcfa00a004fa213ff8d0013ffcda05e000f40360009fc6a00088013ff880a2200122800012c4012000ec012008d0012004da05a008f40360009fc6a00001000000aa1000088c21a0088b196008ba10200190100006fa21bffcea222000e801200c81c520068801201088012008f606201880a1001b8bd0201830bfffd9|@2312,131071|28,5,@1420 2312:S28|556e6976657273616c5461626c652e756e69764c6f6f6b7570283329 2313:S28|5354525543545f56414c5328292e6d616b654c6f6f6b283229283129 2314:C2,44|9e13e002f606201880a1001b8bd0201894100008d2036004d0036008353f00dab406a23081c6a00401000000|@2313,131071|28,4,@2311 2315:C2,44|9e13e002f606201880a1001b8bd0201894100008d2036004d0036008353f00dab406a23081c6a00401000000|@2313,131071|28,4,@2311 2316:C2,44|9e13e002f606201880a1001b8bd0201894100008d2036004d0036008353f00dab406a23081c6a00401000000|@2313,131071|28,4,@2311 2317:C2,44|9e13e002f606201880a1001b8bd0201894100008d2036004d0036008353f00dab406a23081c6a00401000000|@2313,131071|28,4,@2311 2318:C2,44|9e13e002f606201880a1001b8bd0201894100008d2036004d0036008353f00dab406a23081c6a00401000000|@2313,131071|28,4,@2311 2319:C2,48|9e13e002f606201880a1001b8bd02018d6022004d4022000d2036004d0036008353f00dbb406a12881c6a00401000000|@2334,131071|32,4,@2320 2320:C2,176|9e13e002f606201880a1001b8bd02018de213ffcd0213ff8d2213ff4d4213ff09010000bda026004f40360009fc6a00088013ff0d0213ffcd2012000d00120087fff71c388013ffc808a2001328000098c21a00cd00220009a0120104000001c01000000841000081080000b941000028b19600cba10200284100006fa21bffcae102001ee20a004ec012000ec20a00094100002d2012004d001200cde012010353f00dbb406a33081c6a00488012014|@2333,131071|64,5,@1420 92,5,@2321 160,4,@2323 2321:C2,244|9e13e002f606201880a1001b8bd0201880a220013280000dc4037ff88c21a00c8b19600cba10200290100006fa21bffc84102001c4222004c4037ff0c422200081c3e00601000000de213ffcda213ff8fa022000fa213ff4fa022004fa213ff0d0013ff4da00a000f40360009fc6a00088013ff080a2200122800010d0012000ee0120088c21a00c8b19600cba102002ac100006fa21bffcea012000ea25a004e805fff0e825a00090100016e601200c81c4e00688012010da0120087fffffd29e13e0028c21a00c8b19600cba102002ae100006fa21bffcd025e004ec012004ec25e00090100017ea01200c81c5600688012010|@2322,131071| 2322:S36|556e6976657273616c5461626c652e756e6976456e746572283429736561726368283129 2323:C2,540|9e13e002f606201880a1001b8bd02018c402200080a0a0013280001cee02200cde213ffc113f00dc900221687fff493c88013ffc133f00dc920261947fff4938010000008c21a0108b196010ba102003ae100006fa21bffcd025e0082d3f0028ac05a2d0ec25e004aa10219dea25e00090100017f40620209fc6a0000100000090102001ee02200cec05e000ea05a000e8022004e6052000de213ffcd2213ff8d4213ff4e8213ff0fa022008fa213fecee213fe8ec213fe4ea213fe0901000099a100013f40360009fc6a00088013fe08c21a00c8b19600cba102002a4100006fa21bffce2012014e224a004e0012018e024a0009410001292100008d00120044000006101000000de01200cc203e000b8206001b91720049a072001da23e000d803e000b8232001ba10001cbb17401dbb17401db917401c96072001d4012000b822a001ba10001cbb17401db917401d92072001ba22e001811f401c2480002d90102001b822a001ba10001cb917401d90072001b917200484072001d0213ffc9410200192102101901000021b0000829a036338f40360009fc6a00088013ffcee012000ee2220008c21a00c8b19600cba102002ac100006fa21bffc2b3f000eaa056128ea25a000ee25a004d0213ffce801200cd0252000e6012014ec24e000e4012008e204a000b824600188013ffcb91f2004900720019a012024400000d101000000e001202481c4200688012028c401201c81c0a00688012020|@2332,131071|36,4,@2324 44,5,@496 52,4,@2325 60,5,@496 92,4,@522 256,5,@2326 396,4,I11 444,4,@347 508,5,@2330 2324:S34|417474656d707420746f2073657420612076616c75652077697468206e616d652028 2325:S24|2920696e20612066726f7a656e2068617368207461626c65 2326:C2,84|9e13e002f606201880a1001b8bd0201880a2a00132800005d4213ffc9010200181c3e00601000000d0213ff8fa02a000fa213ff4de213ff0901000099a013ffc4000000c88013ff0c401200081c0a00688012010|@2329,131071|64,5,@2327 2327:C2,472|9e13e002f606201880a1001b8bd02018b8222001811f200036800004c4037ffc1080000ade213ffcee00a000b825e001ba222001811f401c36800004de213ffc1080000ab8222001ae100008113f0004900223d0f40620209fc6a00088013ffc84102001b8222001b9172004ae072001ec00801c8410001680a0a0013280001ede213ffcb8222001811f200036800004c4037ffc1080000ade213ffcee00a000b825e001ba222001811f401c36800004de213ffc10800009b8222001113f0004900223d0f40620209fc6a00088013ffc90102001b8222001b9172004ac072001d0036000d020801c9010200181c3e00601000000da213ff8d0213ff4d2037ff8d000a0001b0000839a0360d8f40360009fc6a00088013ff480a2200122800021e8012000ea012004e8012000b8252001811f200036800004e6057ffc1080000a01000000e404e000b824a001ba252001811f401c368000040100000010800009b8252001113f0004900223d0f40620209fc6a0000100000090102001b8252001b9172004a2072001e0056000e024c01c90102001de01200881c3e0068801200c80a5200132800006aa100014e6012004e404fffce204a000aa100011b8256001b91f200490072001da012004de01200810bfff8d8801200c|@2328,131071|76,4,@224 188,4,@224 260,4,I24 356,4,@224 2328:S39|486173685461626c652e68617368536574283329656e746572546162283329656e746572283129 2329:S31|486173685461626c652e68617368536574283329656e746572546162283329 2330:C2,272|9e13e002f606201880a1001b8bd02018b8222001811f200036800005b82220019010200181c3e00601000000811f200036800004c4037fe81080000ade213ffcee00a000b825e001ba222001811f401c36800004de213ffc1080000ab8222001ae100008113f0004900223d0f40620209fc6a00088013ffc84102001b8222001b9172004ae072001ec00801c8410001680a0a00132800004de213ffc10800012de213ffcda213ff8d0213ff4c4213ff0fa037fdcfa213fecd2037fe0d000a0007fff310e88013fecd401200492100008d00120007fffff1c010000001080000588012008da213ff8d0213ff488013ff4ea012000b8256001b91f200490072001da012004de01200810bfffbf8801200c|@2331,131071|100,4,@224 192,5,@348 212,5,@2326 2331:S31|486173685461626c652e68617368536574283329636f70794f766572283129 2332:S20|486173685461626c652e68617368536574283329 2333:S27|556e6976657273616c5461626c652e756e6976456e746572283429 2334:S29|5354525543545f56414c5328292e6d616b65456e746572283229283129 2335:C2,48|9e13e002f606201880a1001b8bd02018d6022004d4022000d2036004d0036008353f00dbb406a12881c6a00401000000|@2334,131071|32,4,@2320 2336:C2,48|9e13e002f606201880a1001b8bd02018d6022004d4022000d2036004d0036008353f00dbb406a12881c6a00401000000|@2334,131071|32,4,@2320 2337:C2,48|9e13e002f606201880a1001b8bd02018d6022004d4022000d2036004d0036008353f00dbb406a12881c6a00401000000|@2334,131071|32,4,@2320 2338:C2,48|9e13e002f606201880a1001b8bd02018d6022004d4022000d2036004d0036008353f00dbb406a12881c6a00401000000|@2334,131071|32,4,@2320 2339:C2,48|9e13e002f606201880a1001b8bd02018d6022004d4022000d2036004d0036008353f00dbb406a12881c6a00401000000|@2334,131071|32,4,@2320 2340:S24|5354525543545f56414c5328292e6d616b65456e76283129 2341:O3|@2343,@2345,@2342 2342:O2|@2347,@107 2343:O2|@2344,@107 2344:C2,44|9e13e002c4022000ee03600480a0801732800005901020019010200581c3e0060100000081c3e00601000000|@1106,98465| 2345:O2|@2346,@107 2346:C2,56|9e13e002841000088c21a0108b196010ba10200390100006fa21bffcc422200884102115c4222004c4036004c422200081c3e00601000000|@1106,65697| 2347:C2,60|9e13e002c4022000ee03600480a0801732800005de213ffcd002200881c3e00601000000113f003890022020f40620209fc6a00088013ffc90102001|@1106,98465|36,4,@1110 2348:O3|@2350,@2352,@2349 2349:O2|@2354,@108 2350:O2|@2351,@108 2351:C2,44|9e13e002c4022000ee03600480a0801732800005901020019010200581c3e0060100000081c3e00601000000|@1106,98465| 2352:O2|@2353,@108 2353:C2,56|9e13e002841000088c21a0108b196010ba10200390100006fa21bffcc422200884102115c4222004c4036004c422200081c3e00601000000|@1106,65697| 2354:C2,60|9e13e002c4022000ee03600480a0801732800005de213ffcd002200881c3e00601000000113f003890022020f40620209fc6a00088013ffc90102001|@1106,98465|36,4,@1110 2355:O3|@2357,@2359,@2356 2356:O2|@2361,@39 2357:O2|@2358,@39 2358:C2,44|9e13e002c4022000ee03600480a0801732800005901020019010200581c3e0060100000081c3e00601000000|@1106,98465| 2359:O2|@2360,@39 2360:C2,56|9e13e002841000088c21a0108b196010ba10200390100006fa21bffcc422200884102115c4222004c4036004c422200081c3e00601000000|@1106,65697| 2361:C2,60|9e13e002c4022000ee03600480a0801732800005de213ffcd002200881c3e00601000000113f003890022020f40620209fc6a00088013ffc90102001|@1106,98465|36,4,@1110 2362:O3|@2364,@2366,@2363 2363:O2|@2368,@109 2364:O2|@2365,@109 2365:C2,44|9e13e002c4022000ee03600480a0801732800005901020019010200581c3e0060100000081c3e00601000000|@1106,98465| 2366:O2|@2367,@109 2367:C2,56|9e13e002841000088c21a0108b196010ba10200390100006fa21bffcc422200884102115c4222004c4036004c422200081c3e00601000000|@1106,65697| 2368:C2,60|9e13e002c4022000ee03600480a0801732800005de213ffcd002200881c3e00601000000113f003890022020f40620209fc6a00088013ffc90102001|@1106,98465|36,4,@1110 2369:O3|@2371,@2373,@2370 2370:O2|@2375,@34 2371:O2|@2372,@34 2372:C2,44|9e13e002c4022000ee03600480a0801732800005901020019010200581c3e0060100000081c3e00601000000|@1106,98465| 2373:O2|@2374,@34 2374:C2,56|9e13e002841000088c21a0108b196010ba10200390100006fa21bffcc422200884102115c4222004c4036004c422200081c3e00601000000|@1106,65697| 2375:C2,60|9e13e002c4022000ee03600480a0801732800005de213ffcd002200881c3e00601000000113f003890022020f40620209fc6a00088013ffc90102001|@1106,98465|36,4,@1110 2376:O2|@2381,@21 2377:O2|@2378,@21 2378:C2,44|9e13e002c4022000ee03600480a0801732800005901020019010200581c3e0060100000081c3e00601000000|@1106,98465| 2379:O2|@2380,@21 2380:C2,56|9e13e002841000088c21a0108b196010ba10200390100006fa21bffcc422200884102115c4222004c4036004c422200081c3e00601000000|@1106,65697| 2381:C2,60|9e13e002c4022000ee03600480a0801732800005de213ffcd002200881c3e00601000000113f003890022020f40620209fc6a00088013ffc90102001|@1106,98465|36,4,@1110 2382:C2,124|9e13e002f606201880a1001b8bd02018de213ffcda213ff8da036008f40360009fc6a00088013ff8808a20013280001190102001c4012000d200a004d00220004000001601000000ae1000088c21a0088b196008ba10200190100006fa21bffcee222000ec01200481c5a00688012008c401200481c0a00688012008|@2385,131071|64,5,@2383 2383:C2,336|9e13e002f606201880a1001b8bd0201880a220013280000bc4022004de213ffcae100008113f003890022020f40620209fc6a00088013ffc84102001c4022004ee00a00080a5e001328000400100000080a2200132800004ec0220002d000083ac05a3d880a220013280001aea022008de213ffcd2213ff8fa00a004fa213ff4ec213ff0901020297fffc9ba88013ff08c21a0148b196014ba102004a8100006fa21bffca6102001e625200ca4102001e425200823000083a20463d8e2252004d0252000aa100014108000098c21a010de213ffcd2213ff8fa00a004fa213ff4ec213ff088013ff08c21a0108b196010ba102003a8100006fa21bffce6012008e6252008e4012004e4252004a2102009e22520008c21a0108b196010ba102003a0100006fa21bffcea242008e8242004de012000de24200090100010c201200c81c060068801201081c3e00601000000|@2384,131071|36,4,@1110 92,4,I48 136,5,@1992 180,4,I48 2384:S35|5354525543545f56414c5328292e6d616b6553656c6563746564537472756374283229 2385:S36|56414c55455f4f505328292e6c6f6f6b7570537472756374757265283429283129283129 2386:S33|56414c55455f4f505328292e6c6f6f6b7570537472756374757265283429283129 2387:C2,480|9e13e002f606201880a1001b8bd02018d0213ffcd0213ff8de213ff4da213ff0d0213fec8410000992013ff8901000027fffda6388013fec13000083920263d8d001200c1b0000839a0360d8f40360009fc6a0000100000080a220012280000bee012004ec012004d0012010da05bff8f40360009fc6a00001000000ae10000810800023808de001d605fffcd401200cd205fff8113f00d9900221d41b3f00e09a03632cf40360009fc6a00001000000ac10000890100016400000530100000080a2200122800006901000162f3f0031ae05e1241080000e808de001da012000f40360009fc6a00001000000aa100008d00120109a100015f40360009fc6a00001000000ae100008808de00132800006e8012004d005e000e801200881c5200688012014fa053ffcfa213ffc133f0029920263d0d00520007fff447988013ffcd20120147fff447601000000133f00e0920263a07fff447201000000d0213ffc13000083920263d8d00120101b0000839a0360d8f40360009fc6a00088013ffc80a2200122800006d201201427000083a604e3d81080000892100013113f00e0900223c07fff445e01000000a610000892100013d00120007fff445901000000da012004f40360009fc6a0000100000090102001e601201081c4e0068801201c|@2393,131071|48,5,@2130 56,4,I48 68,4,I24 148,4,@2303 156,4,@2388 184,5,@2389 204,4,@799 300,4,@550 312,5,@496 324,5,@496 332,4,@2391 340,5,@496 352,4,I48 364,4,I24 396,4,I48 412,4,@2392 420,5,@496 440,5,@496 2388:O1|@2304 2389:C2,36|9e13e00280a2200132800005901020019010200581c3e0060100000081c3e00601000000|@2390,129| 2390:S34|5354525543545f56414c5328292e6973556e646566696e6564537472756374283129 2391:S23|2920686173206e6f74206265656e206465636c61726564 2392:S14|20696e2073747275637475726520 2393:S42|56414c55455f4f505328292e6c6f6f6b75705374727563747572652834296c6f6f6b7570537472283229 2394:S30|56414c55455f4f505328292e6c6f6f6b7570537472756374757265283429 2395:C2,52|9e13e002f606201880a1001b8bd02018d0213ffcd6036004d403600892102005d003600c353f00d2b406a35081c6a00488013ffc|@2302,131071|36,4,@2264 2396:S7|46756e63746f72 2397:O1|@2398 2398:C2,152|9e13e002f606201880a1001b8bd0201880a2200132800016c4022008de213ffc901020297fffc87c88013ffc8c21a0148b196014ba102004ae100006fa21bffcac102001ec25e00caa102001ea25e00829000083a80523d8e825e004d025e000841000171080000590100002de213ffc88013ffc901000021b3f00d99a0363387ffff89301000000d0022028ee01200081c5e00688012004|@2399,131071|36,5,@1992 80,4,I48 120,4,@2307 128,5,@2309 2399:S67|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973747275637456616c756528352966756e6374722d283129 2400:C2,468|9e13e002f606201880a1001b8bd02018d0213ffcd0213ff8de213ff4d2213ff0d4213fecd6213fe892013ff87fffd94988013fe813000083920263d8d00120101b0000839a0360d8f40360009fc6a0000100000080a220012280000ad6012018d0012014da012008f40360009fc6a0000100000084100008108000248088a001d4012010d2012004113f00d9900221d47ffff7ef0100000084100008901000027fffff3e0100000080a220012280000b901000028c21a0088b196008ba10200184100006fa21bffcee01201cee20a0001080000e8088a001da012000f40360009fc6a00001000000ae100008d00120149a100017f40360009fc6a00001000000841000088088a0013280000601000000d000a000ec01200c81c5a00688012024133f0029920263d0d00120207fff436101000000d20120147fff435e01000000133f00e0920263a07fff435a01000000d0213ffc13000083920263d8d00120101b0000839a0360d8f40360009fc6a00088013ffc80a2200122800006d20120142d000083ac05a3d81080000892100016113f00e0900223c07fff434601000000ac10000892100016d00120007fff434101000000da01201cf40360009fc6a00001000000d0012020ec01201081c5a00688012028|@2401,131071|44,5,@2130 52,4,I48 64,4,I24 136,4,@2303 144,5,@2304 160,5,@2389 288,4,@550 300,5,@496 312,5,@496 320,4,@2391 328,5,@496 340,4,I48 352,4,I24 384,4,I48 400,4,@2392 408,5,@496 428,5,@496 2401:S24|56414c55455f4f505328292e6c6f6f6b7570416e79283729 2402:C2,36|9e13e00280a2200132800005901020019010200581c3e0060100000081c3e00601000000|@2403,129| 2403:S35|5354525543545f56414c5328292e6973556e646566696e656446756e63746f72283129 2404:C2,56|9e13e00280a220013280000ad002200cde213ffc113f003890022020f40620209fc6a00088013ffc90102001d002200c81c3e00601000000|@2405,129|20,4,@1110 2405:S30|5354525543545f56414c5328292e66756e63746f72526573756c74283129 2406:C2,56|9e13e00280a220013280000ad0022000de213ffc113f003890022020f40620209fc6a00088013ffc90102001d002200081c3e00601000000|@2407,129|20,4,@1110 2407:S27|5354525543545f56414c5328292e66756e63746f72417267283129 2408:C2,16|9e13e002d002200c81c3e00601000000|@2409,129| 2409:S28|5354525543545f56414c5328292e7369674d696e5479706573283129 2410:C2,16|9e13e002d002200881c3e00601000000|@2411,129| 2411:S28|5354525543545f56414c5328292e7369674d61785479706573283129 2412:C2,272|9e13e002f606201880a1001b8bd02018b8226001811f2000368000038410000984102001b820a001b9172004ae072001de213ffcd0213ff8d2213ff4d4213ff0c4213fec153f00659402a01092102101901000171b0000829a036338f40360009fc6a00088013fecec012000ec2220008c21a0148b196014ba102004aa100006fa21bffc293f00e2a80522d8e8256000e601200ce625600ce4012008e4256008d02560048c21a0148b196014ba102004a2100006fa21bffc213f00e3a00422dce0246000e624600ce4246008d02460048c21a00c8b19600cba1020029e100006fa21bffc033f00e4820061b8c223e000e223e004da012004de236000ea23600490102001d801201081c3200688012014|@2422,131071|68,4,@1611 84,4,I11 132,4,@2413 184,4,@2419 228,4,@2421 2413:C2,724|9e13e002f606201880a1001b8bd02018ae10000fac10000daa10000890100015400000b40100000080a2200132800004ee213ffc10800053ee213ffcec213ff8ea213ff488013ff4de05600080a3fff93280000fa8100015c2056004da006000d803600080a3200532800005aa10000da810001510800007da052000f606201880a1001b8bd0201830bffff0da05200080a360013280000501000000c205200410800009d8012004113f00e390022284f40620209fc6a0000100000082102001d8012004d003200cb8222001ba206001811f401c36800004c40120001080002d90102001ec00a00080a5bff93280000fae100002ea00a004e8056000de05200080a3e0053280000584100014ae10000210800007e805e000f606201880a1001b8bd0201830bffff0e805e00080a520013280000501000000ea05e00410800009de012004113f00e390022284f40620209fc6a00001000000aa102001de012004c203e008b8206001ba256001811f401c2680000bfa03e0041080000690102001ec213ff8ea213ff488013ff490102001e801200881c520068801200cfa213ffcda01200088013ffcd003600080a23ff93280000f9810000dc4036004ee00a000ec05e00080a5a005328000059a1000179810000d10800007ee032000f606201880a1001b8bd0201830bffff0ee03200080a5e0013280000501000000c403200410800009b820a001113f00e390022284f40620209fc6a0000100000084102001b820a001811f200036800004ec0120001080000a01000000ea05a000b8256001ba20a001811f401c368000040100000010800009b820a001113f0004900223d0f40620209fc6a00001000000ac102001b820a001b9172004a8072001de05801cac10000f901000167fff81b8010000007fff81cb0100000080a22001228000068c21a00890102001c201200c81c06006880120108b196008ba10200190100006fa21bffcec222000c201200c81c0600688012010|@2418,127217|32,5,@2414 168,4,@2416 324,4,@2416 520,4,@2416 600,4,@224 648,5,@1613 656,5,@1615 2414:C2,124|9e13e002de213ffc88013ffcde02200080a3fff93280000f84100008c2022004da006000d803600080a32005328000059010000d8410000810800007c200a000f606201880a1001b8bd0201830bffff0c200a00080a06001328000069010200190102005da01200081c3600688012004da01200081c3600688012004|@2415,65777| 2415:S26|5354525543545f56414c5328292e6973426f756e644964283129 2416:O3|@24,@397,@2417 2417:S21|6f666673657449643a206e6f74206120426f756e64 2418:S32|535452554354555245535f28292e747970654d61746368546162283329283129 2419:C2,664|9e13e002f606201880a1001b8bd02018ae10000fac10000daa100008901000157fffffb30100000080a2200122800054ee213ffcee213ffcec213ff8ea213ff4d2213ff088013ff0de05600080a3fff93280000fa8100015c2056004da006000d803600080a3200532800005aa10000da810001510800007da052000f606201880a1001b8bd0201830bffff0da05200080a360013280000501000000c205200410800009d8012008113f00e390022284f40620209fc6a0000100000082102001d8012008d203200cb8226001ba206001811f401c2680006e90102001d0012004ee02200080a5fff93280000f84100008ec022004ea05a000e805600080a5200532800005901000158410000810800007ea00a000f606201880a1001b8bd0201830bffff0ea00a00080a560013280000501000000ec00a00410800009e8012008113f00e390022284f40620209fc6a00001000000ac102001e8012008de052008b823e001ba25a001811f401c368000489010200110800008fa052004ec213ff8ea213ff4d2213ff088013ff01080004090102001fa213ffcc201200488013ffcd800600080a33ff93280000f9a100001d2006004d0026000c402200080a0a00532800005821000089a10000110800007d2036000f606201880a1001b8bd0201830bffff0d203600080a260013280000501000000d603600410800009b822e001113f00e390022284f40620209fc6a0000100000096102001b822e001811f200036800004d00120001080000a01000000c4022000b820a001ba22e001811f401c368000040100000010800009b822e001113f0004900223d0f40620209fc6a0000100000090102001b822e001b9172004ae072001ec012004ec22001c90102001ea01201081c5600688012014e801200c81c5200688012010|@2420,127227|32,5,@2414 168,4,@2416 320,4,@2416 512,4,@2416 592,4,@224 2420:S32|535452554354555245535f28292e747970654d61746368546162283329283229 2421:C2,40|9e13e002f606201880a1001b8bd02018d2022004d0022000da036004f403600081c6a00401000000|@2418,131071| 2422:S29|535452554354555245535f28292e747970654d61746368546162283329 2423:C2,204|9e13e002f606201880a1001b8bd020188c21a0188b196018ba10200584100006fa21bffc2f3f00e4ae05e30cee20a000d420a010ee012000ee20a00cd620a008ec012004ec20a004de213ffcd0213ff8d2213ff4d6213ff0fa02a004fa213fec9a100002f40360009fc6a00088013fec8c21a0188b196018ba102005aa100006fa21bffc293f00f1a80523e4e8256000e6012000e6256010e4012014e425600ce2012004e2256008e0012018e0256004d2012008d001200c9a100015de012010f403600081c6a0048801201c|@2679,131071|36,4,@2424 132,4,@2540 2424:C2,176|9e13e002f606201880a1001b8bd020188410000fae10000dac100008901000094000002b010000008c21a0208b196020ba1020079e100006fa21bffc1b3f00e59a036024da23e000ee23e018ec23e014d205e010d223e010ec05e00cec23e00cda05e008da23e008d805e004d823e0048c21a00c8b19600cba10200296100006fa21bffc153f00ee9402a1fcd422e000de22e004941020019210000b9e100002353f00eeb406a27881c6a00401000000|@2539,131071|32,5,@2425 60,4,@2427 132,4,@2506 160,4,@2508 2425:C2,16|9e13e002d002200081c3e00601000000|@2426,129| 2426:S23|5354525543545f56414c5328292e736967546162283129 2427:C2,1272|9e13e002f606201880a1001b8bd020189410000fac10000daa100008901000091b3f00df9a0360847ffffa110100000080a22001228000c290100009901000091b3f00df9a0360787ffffa330100000092100008d005a0147fffffd701000000d4213ffcec213ff8ea213ff4d2213ff094100015133f00df920260687ffff56488013ff0808a200132800093d0012008c4022000d00120007fff7fe101000000ae1000027fff7ff30100000080a220013280008690102001ec012008ee213ffcd405a01092100017d00120004000011288013ffcd00120044000019c01000000aa100008d00120004000019801000000b8222001ba256001811f401c22800020d0012004e801200cd00120047fffd55c01000000fa05200cfa213ffcfa052008fa213ff8fa052004fa213ff492100008113f00e6900223b87fff3fbc88013ff4133f00e6920263c87fff3fb801000000e601201cd021201cd6012000d401200492102005d00120089e100013353f00d2b406a35081c6a0048801201c400001930100000080a2200122800025d0012004d0012000400001a20100000080a220013280001fd0012004e801200cd00120007fffd53301000000fa05200cfa213ffcfa052008fa213ff8fa052004fa213ff492100008901020a17fff3f9488013ff4133f00ee920260f87fff3f9001000000e601201cd021201cd6012000d401200492102005d00120089e100013353f00d2b406a35081c6a0048801201c400008b50100000080a220012280002590102001d0012000400008af0100000080a220013280001f90102001e801200cd00120007fffd50b01000000fa05200cfa213ffcfa052008fa213ff8fa052004fa213ff492100008901020a17fff3f6c88013ff4133f00ee920261687fff3f6801000000e601201cd021201cd6012000d401200492102005d00120089e100013353f00d2b406a35081c6a0048801201ce801201081c5200688012014ec01200c81c5a00688012010fa02200cfa213ffcfa022008fa213ff8fa022004fa213ff4d2012004113f00ee900221847fff3f4c88013ff4133f00ee920261947fff3f4801000000c4012018d0212018d6012000d401200492102005d00120089e100002353f00d2b406a35081c6a004880120181b3f00de9a0362347ffff8b60100000080a220012280006890102001901000091b3f00de9a0362287ffff8d801000000a8100008d005a0147fffff1001000000d4213ffcec213ff8ea213ff4e8213ff094100015133f00de920262187ffff49d88013ff0808a200132800039e6012008e402200080a4a00132800013e604a008901020297fffc3b3010000008c21a0148b196014ba102004a2100006fa21bffca0102001e024600c9e102001de24600803000083820063d8c2246004d0246000a6100011e001200080a4200132800016e2042008e6213ffc901020297fffc39d88013ffc8c21a0148b196014ba1020049e100006fa21bffc82102001c223e00c9a102001da23e00819000083980323d8d823e004d023e000a210000f10800005de01200ce6213ffc88013ffcde01200c92100011d0012000da03e018de012010f403600081c6a00488012014fa04e00cfa213ffcfa04e008fa213ff8fa04e004fa213ff4d2012004113f00ee900221b47fff3edf88013ff4133f00ee920261947fff3edb01000000e4012018d0212018d6012000d401200492102005d00120089e100012353f00d2b406a35081c6a0048801201881c2a00601000000|@2505,131071|32,4,@2371 40,5,@2372 64,4,@2370 72,5,@2375 88,5,@2425 116,4,@2369 124,5,@2311 152,5,@1613 164,5,@1615 204,5,@2428 216,5,@2432 232,5,@2432 268,5,@2128 304,4,@2434 312,5,@496 320,4,@2435 328,5,@496 364,4,@2264 380,5,@2436 404,5,@2437 432,5,@2128 472,5,@496 480,4,@2499 488,5,@496 524,4,@2264 540,5,@2500 564,5,@2500 592,5,@2128 632,5,@496 640,4,@2501 648,5,@496 684,4,@2264 752,4,@2502 760,5,@496 768,4,@2503 776,5,@496 812,4,@2264 828,4,@2357 836,5,@2358 860,4,@2356 868,5,@2361 884,5,@2425 912,4,@2355 920,5,@2311 960,5,@1992 1004,4,I48 1048,5,@1992 1092,4,I48 1188,4,@2504 1196,5,@496 1204,4,@2503 1212,5,@496 1248,4,@2264 2428:C2,396|9e13e002f606201880a1001b8bd02018a810000fa610000890100013400000630100000082100008901000137fff7eb701000000ae1000017ffffd160100000080a2200122800017e8213ffc901000137fff7eae01000000ac1000088c21a00c8b19600cba10200290100006fa21bffcd2222004ec222000e8213ffcd2213ff8d4213ff4ee213ff0da02a000f40360009fc6a00088013ff010800007d0012000d2213ff8d4213ff4ee213ff088013ff0d00120007fffd3ec0100000080a220012280003090102001d00120007fffd3f701000000d00120007fffd3e30100000080a220012280000801000000d00120007fffd3ee01000000ac10000810800009d005a008113f003890022020f40620209fc6a00001000000ac102001d005a0087fffd3f701000000ea012004a8100008901000147fff7e7501000000e8213ffcda056004f40360009fc6a00088013ffc808a200132800006d401200890102001e601201081c4e00688012014d201200cd0012000de01201010bfffa388012014ec01200c81c5a00688012010|@2431,131071|28,5,@2429 44,5,@1613 56,5,@2414 80,5,@1613 180,5,@2124 204,5,@2125 216,5,@2124 240,5,@2125 260,4,@1110 288,5,@2126 308,5,@1613 2429:C2,56|9e13e002c4022010ec00a00080a5a00132800005ee00a004ee00a00410800005d005e004ea05e000ae100015d005e00481c3e00601000000|@2430,123009| 2430:S7|6f283229283129 2431:S31|545950455f5452454528292e656e74657254797065436f6e73747273283329 2432:C2,16|9e13e002d002200481c3e00601000000|@2433,129| 2433:S24|5354525543545f56414c5328292e74634172697479283129 2434:S7|54797065732028 2435:S25|29206861766520646966666572656e7420617269746965732e 2436:C2,56|9e13e002c4022010ec00a00080a5a00132800005ee00a004ee00a00410800005d005e000ea05e000ae100015d005e00081c3e00601000000|@2430,123009| 2437:C2,384|9e13e002f606201880a1001b8bd02018a810000fa6100008901000137fffffe40100000080a2200122800005901000139010200581c52006010000007fffff99010000007fffd1670100000080a2200122800005901000139010200181c52006010000007fffd37f0100000084100008901000134000004a01000000d0213ffcd0213ff8ae100008901000137fff7ddd88013ff8ac1000027fff7def0100000080a2200122800010aa0120008c21a0088b1960083b100000ba076001aa100006fa21bffce6256000a60120009e103ffdde24e0009a012000ea236004108000078c21a00c9e102001de2560009a012000e62360048c21a00c8b19600cba10200290100006fa21bffcc4012000c4222000ea012004ea222004a61000088c21a0108b196010ba10200390100006fa21bffce6222008ec222004ee2220007fff7de001000000e8213ffc153f00e79402a22c133f00e79202628c4000004a88013ffc80a23ffd32800003a4102001a4102005901ca004e401200081c4a0068801200c|@2498,131071|28,5,@2436 60,5,@2429 68,5,@2102 100,5,@2128 116,5,@2438 140,5,@1613 152,5,@1615 316,5,@1617 328,4,@2440 336,4,@2443 344,5,@2445 2438:C2,16|9e13e002d002200c81c3e00601000000|@2439,129| 2439:S27|5354525543545f56414c5328292e74635479706556617273283129 2440:O1|@2441 2441:C2,16|9e13e0029010200581c3e00601000000|@2442,129| 2442:S33|545950455f5452454528292e7065726d697473457175616c697479283129283129 2443:O1|@2444 2444:C2,16|9e13e00290103ffd81c3e00601000000|@2442,129| 2445:C2,968|9e13e002f606201880a1001b8bd02018d4213ffcd2213ff8de213ff47fffd01588013ff4ae100008901000177fff7d060100000080a220012280003690100017901000177fff7d1101000000ac100008d205a004d005a0007fffccf90100000080a2200122800006d205a00490102005ea01200081c560068801200cd005a0007fffd0a401000000aa100008901000157fffd0ca0100000080a220012280001890100016a8100016901000157fffd0d401000000ea213ffc90100014da012008f40360009fc6a00088013ffc80a23ffd32800006d401200c90103ffde601200481c4e00688012010d2012008d0012000de01200410bfffc488012010da012008de012000f403600081c6a0048801200c7fffd4af0100000080a220012280000990100017901000177fffd4ba0100000090103ffdec01200081c5a0068801200c7fffd2670100000080a220012280007590100017901000177fffd27201000000ea022000d00220087fffd28301000000a8100008901000147fff7d02010000007fff7d150100000080a2200122800006ea213ffc90103ffde601200081c4e0068801200ce8213ff8153f00e89402a2a492100014901020f51b3f00e89a036300400000a388013ff8e602200080a4fff922800006d001200090102005e401200881c4a006880120147fff7ce601000000a4100008113f00e9900222b07fff7ce1010000009210000890100012400000e30100000080a2200122800006d001200090103ffde201200881c46006880120147ffffebf0100000080a220012280000ad001200092102005d00120049a0120104000017501000000e201200881c46006880120147ffffe6f010000007fffd03d0100000080a2200122800017d0012000d00120007fff7cbf01000000da01200cf40360009fc6a0000100000080a23ffd328000069210000890103ffde201200881c4600688012014d00120049a0120104000015901000000e201200881c46006880120147ffffe5301000000a2100008d00120007fffff0e01000000d20120044000018b01000000941020059210000890100011400001d301000000d4012010d201200cde01200810bfff3b880120147fffd0260100000080a220012280001290100017901000177fffd03101000000d00220041b3f00ed9a0363e8f40360009fc6a00001000000921020059a0120084000013101000000ec01200081c5a0068801200c7fffd1b10100000080a220012280000c90100017901000177fffd1c101000000113f00ee9002207cf40620209fc6a000010000009010200190100017400004f40100000090103ffdec01200081c5a0068801200c|@2497,131071|28,5,@2099 44,5,@1606 68,5,@1607 88,5,@2090 128,5,@2100 144,5,@2104 172,5,@2105 272,5,@2148 296,5,@2149 320,5,@2124 344,5,@2125 360,5,@2126 376,5,@1613 384,5,@1615 424,4,@2446 440,4,@2449 448,5,@2450 488,5,@1613 500,4,@2456 508,5,@1613 524,5,@2452 560,5,@2436 592,5,@2459 612,5,@2429 620,5,@2102 644,5,@1613 704,5,@2459 724,5,@2429 740,5,@2438 752,5,@2462 772,5,@2464 800,5,@2104 824,5,@2105 836,4,@2493 864,5,@2459 884,5,@2120 908,5,@2122 916,4,@2495 944,5,@2481 2446:O1|@2447 2447:C2,20|9e13e002113f002b9002225c81c3e00601000000|@2448,129|4,4,@581 2448:S26|545950455f5452454528292e657175616c697479283329283129 2449:O2|@2450,@110 2450:C2,64|9e13e002f606201880a1001b8bd02018d4213ffcd2213ff8d0213ff4c4036004d000a000de213ff09a013ffc4000000c88013ff0ee01200081c5e00688012010|@2455,131071|44,5,@2451 2451:C2,212|9e13e002f606201880a1001b8bd0201880a2200132800007c402200090102001da036000f403600081c6a00401000000de213ffcda213ff8fa00a004fa213ff4fa00a008fa213ff0fa022004fa213fecd200a000d0037ff81b0000839a0360d8f40360009fc6a00088013fec80a2200122800015d0012000ee01200cd005fffc7fff7c1601000000ac100008d00120087fff7c12010000009210000890100016400000140100000080a2200122800006d0012000d0012004ea01201081c5600688012014da01200cde01201010bfffce88012014|@2454,131071|88,4,I24 128,5,@1613 144,5,@1613 160,5,@2452 2452:C2,448|9e13e002de213ffcd2213ff888013ff8de02200080a3fff93280000f84100008d2022004c4026000ee00a00080a5e00532800005901000028410000810800007c4213ffcf606201880a1001b8bd0201830bffff0c4213ffcd201200088013ffcc402600080a0bff93280000f90100009ee026004de05e000d003e00080a22005328000059210000f9010000910800007ee012000f606201880a1001b8bd0201830bffff0ee012000de05e00080a3fff93280001580a3fffdc202200080a07ff93280000e90102001da05e004d802200480a3400c328000069010200190102005c201200881c060068801200cc201200881c060068801200cda01200881c360068801200c3280001580a3e001c202200080a07ffd3280000e90102001da05e004d802200480a3400c328000069010200190102005c201200881c060068801200cc201200881c060068801200cda01200881c360068801200c3280001790102001c202200080a060013280001090102001da05e004d8022004b8232001ba236001811f401c328000069010200190102005c201200881c060068801200cc201200881c060068801200cda01200881c360068801200cc201200881c060068801200c|@2453,98547| 2453:S27|5354525543545f56414c5328292e73616d65547970654964283229 2454:S41|5052494e545f5441424c4528292e6765744f7665726c6f61642833297365617263684c697374283129 2455:S28|5052494e545f5441424c4528292e6765744f7665726c6f6164283329 2456:O6|@2458,0,0,0,@683,@2457 2457:O2|-1,@111 2458:S4|7265616c 2459:C2,168|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffc9010000981c3e00601000000da213ff8d2213ff4fa022004fa213ff0d4036000d2037ffcd00220001b3f00e99a0363a8f40360009fc6a00088013ff080a23ffd3280000680a2200190103ffdc401200c81c0a0068801201032800008d201200492102001d0012000da012008de01200c10bfffde88012010d0012000da012008de01200c10bfffd988012010|@2461,131071|68,4,@2460 2460:O1|@2445 2461:S35|545950455f5452454528292e657175616c6974792833296571466f724c697374283229 2462:C2,248|9e13e002f606201880a1001b8bd02018808a20013280003790102001808a60013280003290102001ae10000fec022000ea022004901000167fff7abc0100000080a2200122800009ee213ffca6100017901000167fff7ac601000000a8100008108000098c21a00c113f003890022020f40620209fc6a00088013ffca81020018c21a00c8b19600cba1020029e100006fa21bffce823e004da026000da23e000e6213ffcde213ff8d2026004901000157fffffd488013ff88c21a00c8b19600cba10200292100006fa21bffcd0226004d0012000d022600090100009c401200481c0a0068801200881c3e0060100000081c3e00601000000|@2463,129187|56,5,@1606 84,5,@1607 104,4,@1110 2463:S23|545950455f5452454528292e636f707956617273283229 2464:C2,116|9e13e002f606201880a1001b8bd02018ac10000faa1000089e1000099210000a9010000f4000001b010000008c21a00c8b19600cba1020029a100006fa21bffc153f00eb9402a144d4236000d0236004153f00ed9402a3649210000d901000159e100016353f00ebb406a3e081c6a00401000000|@2492,131071|36,5,@2465 64,4,@2471 80,4,@2489 100,4,@2475 2465:C2,80|9e13e0028c21a0088b1960083b100000ba07600184100006fa21bffcd020a0008c21a0108b196010ba10200390100006fa21bffc2f3f00eaae05e20cee222000d2222008c422200481c3e00601000000|@2470,98435|52,4,@2466 2466:C2,148|9e13e002f606201880a1001b8bd02018ae10000fac10000daa100008901000157fff7a360100000080a2200122800009ee213ffca6100017901000157fff7a4001000000a810000810800009ec213ffc113f003890022020f40620209fc6a00088013ffca8102001ec213ffce8213ff8e405a004d004a000e6213ff49a013ffc4000000c88013ff4e201200081c460068801200c|@2469,131071|32,5,@1606 60,5,@1607 80,4,@1110 128,5,@2467 2467:C2,492|9e13e002f606201880a1001b8bd0201880a2200132800064c4022000c4037ffcae10000fac10000dd200a004d000a0007fffca0401000000de05bffc82100008d203e004d003e0007fffcf2d0100000080a22001228000049a102001d205a000da026008d0213ffcd0213ff8ee213ff4ec213ff0da213fec9a013ff8da213fe89610200194100001130000279202603d113f000f900220cc7fff6dbe88013fe88c21a00c8b19600cba10200290100006fa21bffcd8012008d8222000d601200cd62220047fff6dfc01000000941000089010000a7fff79dd0100000080a2200122800008010000009010000a7fff79e8010000009210000810800009d0012000113f003890022020f40620209fc6a0000100000092102001d0012000c4023ffcae100009d200a004d000a0007fffcd7a0100000092100008901000177fff79e701000000ec012000ea05a0008c21a00c8b19600cba102002a8100006fa21bffce605bffce6252004d4252000e4056004e204a0008c21a00c8b19600cba102002a0100006fa21bffce2242004e8242000e024a0009010000ade01200481c3e00688012010ac10000faa10000de800a000e6022004d2057ffcd000a0047fffc9870100000080a2200122800005901000139010001481c5a006010000009a1000159e10001610bfff89f6062018|@2468,131071|48,5,@2090 72,5,@2112 136,4,9999 144,4,@375 152,5,@1515 196,5,@1517 212,5,@1606 236,5,@1607 256,4,@1110 300,5,@2100 316,5,@1608 444,5,@2088 2468:S41|545950455f5452454528292e7476617253657175656e63652832292831297054797065566172283129 2469:S30|545950455f5452454528292e7476617253657175656e6365283229283129 2470:S27|545950455f5452454528292e7476617253657175656e6365283229 2471:C2,536|9e13e002f606201880a1001b8bd02018ae10000fac10000daa100008901000157fff79680100000080a220012280007990100015a8100017901000157fff79720100000084100008d200a004d000a0007fffce69010000002f000027ae05e03db825e001ba222001811f401c22800005e8213ffc9010001581c5200601000000ec213ff8c4213ff490100015da05a004f40360009fc6a00088013ff4ec012000aa100008d205a004d005a0007fffccf801000000a8100008901000147fffcd1e0100000080a220012280004cea213ffc901000147fffcd2901000000ea213ffcfa022008fa213ff8153f00eb9402a378d2012004901000144000006988013ff8a6100008901000137fffcd0b0100000080a220012280003201000000901000137fffcd1601000000e4022000e2022004d00120047fff79230100000080a220012280000801000000d00120047fff792e01000000a0100008108000098c21a00c113f003890022020f40620209fc6a00001000000a01020018c21a00c8b19600cba1020029e100006fa21bffcc2012000c223e004da012008da23e0008c21a0108b196010ba10200390100006fa21bffcde222008e2222004e42220007fff78e50100000092100008901000107fff7921010000001080000cd0012004113f00ed900222e8f40620209fc6a0000100000010800005d0012004d0213ff888013ff8d0012004e601201081c4e0068801201481c5e00601000000|@2488,131071|32,5,@1606 60,5,@1607 80,5,@2110 88,4,9999 172,5,@2100 188,5,@2104 212,5,@2105 232,4,@2472 248,5,@2475 264,5,@2104 288,5,@2105 308,5,@1606 332,5,@1607 352,4,@1110 444,5,@1604 460,5,@1608 476,4,@2486 2472:O1|@2473 2473:C2,12|9e13e00281c3e00601000000|@2474,129| 2474:S47|545950455f5452454528292e67656e6572616c6973655479706573283329636f707954797065566172283129283129 2475:C2,988|9e13e002f606201880a1001b8bd02018d4213ffcd2213ff8de213ff47fffcbcd88013ff4ae100008901000177fff78be0100000080a220012280000c90100017ac100017901000167fff78c80100000090100016da012004de012000f403600081c6a0048801200c7fffce550100000080a220012280006390100017aa100017901000157fffce5f01000000ea213ffcfa022000fa213ff8fa022008fa213ff4d0013ff89a012008400000d488013ff4a8100008d00120007fffce6701000000e8213ffcda012014f40360009fc6a00088013ffca6100008901000137fffce7901000000e4012000e201200880a4801132800012a0100008a0100008d00120047fffce550100000080a4c0083280000cd0213ffcde012004c203e00080a0600132800007d0213ffcd001200cda01201081c360068801201cd0213ffcd0213ff8901000137fff78c788013ff87fff78da0100000080a22001228000109e0120008c21a0088b1960083b100000ba0760019e100006fa21bffce623e000820120009a103ffdda20600098012000de232004108000078c21a00c82102001c223e0009a012000e62360048c21a00c8b19600cba10200298100006fa21bffcd6012000d6232000d4012004d42320048c21a0108b196010ba10200390100006fa21bffcd8222008e0222004e4222000de012018353f0065b406a0fc81c6a004880120247fffd02b0100000080a220012280002f90100017ac100017901000167fffd03501000000ec213ffcfa022000fa213ff8fa022004fa213ff4d4012008d2012004d0013ff87fffff6f88013ff4d0213ffcd4012014d2012010d00120007fffff6988013ffcea012000e801200880a540143280000aa6100008e601200480a2001332800006a6100008d001200ce401201081c4a0068801201c8c21a00c8b19600cba10200290100006fa21bffce6222004ea222000de012010353f0066b406a2e081c6a0048801201c7fffcbf40100000080a220012280002690100017aa100017901000157fffcbfe01000000ea213ffcfa022000fa213ff8fa022004fa213ff4d0013ff49a0120084000008488013ff4e801200080a2001432800006a6100008d0012008e601200c81c4e006880120188c21a0108b196010ba10200390100006fa21bffca4102001e4222008e6222004e2012004e2222000de01200c353f0064b406a29481c6a004880120187fffcbb50100000080a220012280000790100017113f000f900220ccec01200081c5a0068801200c400000b30100000080a220012280000790100017113f003190022124ec01200081c5a0068801200c7fffcd6d01000000113f00ed90022294f40620209fc6a0000100000090102001|@2485,131071|28,5,@2099 44,5,@1606 72,5,@1607 104,5,@2124 132,5,@2125 168,5,@2476 184,5,@2126 220,5,@2128 256,5,@2126 324,5,@1613 332,5,@1615 496,4,@1617 512,5,@2148 540,5,@2149 696,4,@1630 712,5,@2104 740,5,@2105 776,5,@2479 860,4,@1604 876,5,@2102 896,4,@375 916,5,@2481 936,4,@799 956,5,@2122 964,4,@2483 2476:C2,208|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffc9010200181c3e00601000000da213ff8d0213ff4fa022000fa213ff0fa022004fa213fecd4036000d2037ffcd0013ff01b3f00ed9a0360c4f40360009fc6a00088013fecd0213ffcd0012000da01200c7fffffe588013ffcc4012000ee01200880a080173280000a8c21a00cec01200480a20016328000068c21a00cd001200cea01201481c56006880120188b19600cba102002ac100006fa21bffcd025a004c425a00090100016ea01201481c5600688012018|@2478,131071|76,4,@2477 2477:O1|@2475 2478:S34|545950455f5452454528292e636f707954797065283329636f70794c697374283129 2479:C2,252|9e13e002f606201880a1001b8bd0201880a2200132800005c40220009010200181c3e00601000000de213ffcda213ff8d0213ff4fa00a000fa213ff0fa00a004fa213fecfa022004fa213fe8d4036000d2037ffcd0013fec1b3f00ed9a0360c4f40360009fc6a00088013fe8d0213ffcd0012000da0120107fffffe288013ffcee012000ec01200880a5c0163280000a8c21a00cea01200480a20015328000068c21a00cd0012010e801201881c520068801201c8b19600cba102002aa100006fa21bffcee256004e801200ce82560008c21a00c8b19600cba102002a6100006fa21bffcd024e004ea24e00090100013e401201881c4a0068801201c|@2480,131071|88,4,@2477 2480:S40|545950455f5452454528292e636f707954797065283329636f70795265636f72644c697374283129 2481:C2,40|9e13e002c402200080a0a00132800005901020019010200581c3e0060100000081c3e00601000000|@2482,65665| 2482:S7|42616454797065 2483:O3|@24,@397,@2484 2484:S27|636f7079547970653a204f7665726c6f616453657420666f756e64 2485:S23|545950455f5452454528292e636f707954797065283329 2486:O3|@24,@397,@2487 2487:S48|436f7079206f66206c6162656c6c6564207265636f7264206973206e6f742061206c6162656c6c6564207265636f7264 2488:S44|545950455f5452454528292e67656e6572616c6973655479706573283329636f707954797065566172283129 2489:O1|@2490 2490:C2,12|9e13e00281c3e00601000000|@2491,129| 2491:S33|545950455f5452454528292e67656e6572616c6973655479706573283329283129 2492:S30|545950455f5452454528292e67656e6572616c6973655479706573283329 2493:O1|@2494 2494:C2,112|9e13e002f606201880a1001b8bd0201880a2200132800005c40220009010200181c3e00601000000de213ffcfa00a004fa213ff8d00220047ffffff288013ff88c21a00c8b19600cba1020029e100006fa21bffcd023e004d0012000d023e0009010000fc401200481c0a00688012008|@586,65665| 2495:O3|@24,@397,@2496 2496:S28|657175616c697479202d204f7665726c6f616473657420666f756e64 2497:S23|545950455f5452454528292e657175616c697479283329 2498:S30|545950455f5452454528292e7065726d697473457175616c697479283129 2499:S18|29206973206e6f7420616e20657174797065 2500:C2,56|9e13e002c4022010ec00a00080a5a00132800005ee00a004ee00a00410800005d005e008ea05e000ae100015d005e00881c3e00601000000|@2430,123009| 2501:S19|29206973206e6f742061206461746174797065 2502:S6|547970652028 2503:S23|29206d697373696e6720696e207374727563747572652e 2504:S11|5374727563747572652028 2505:S42|535452554354555245535f28292e6d61746368536967732836296d617463684e616d6573283229283329 2506:C2,44|9e13e002f606201880a1001b8bd02018d4022008d2022004d0022000da036004f403600081c6a00401000000|@2507,131071| 2507:S42|535452554354555245535f28292e6d61746368536967732836296d617463684e616d6573283229283129 2508:C2,240|9e13e002f606201880a1001b8bd02018de213ffcd2213ff8d4213ff44000003c88013ff4c4012000ee02200880a5e00132800006d0213ffc90100002ec01200881c5a0068801200cc4213ff8ec022004901020019a100016f40360009fc6a00088013ff8ea012004fa022000fa213ffcfa022004fa213ff890102001da056000f40360009fc6a00088013ff8a81000088c21a0108b196010ba10200390100006fa21bffce6012008e6222008e4012000e4222004e2012004e2222000e8213ffcda012014f40360009fc6a00088013ffca0100008d00120008410001088012014f606201880a1001b8bd0201830bfffcf|@2538,131071|28,5,@2509 2509:C2,388|9e13e002f606201880a1001b8bd02018de213ffc4000006388013ffcd0213ffcd0213ff8c402200880a0a0010280003e88013ff8d0213ffcee022004901020019a100017f40360009fc6a00088013ffcec02200480a5a0013280002baa012004ea01200090102001da056000f40360009fc6a00001000000e802200880a5200122800019a6012004d0213ffce6022004901020019a100013f40360009fc6a00088013ffce402200480a4a00132800008a2012008ea01200088012004f606201880a1001b8bd0201830bfffe7e0012000e02460009e012008e423e0041080001b8c21a00cd024e000a4012004a2102001e224a004d0213ffc88013ffc108000138c21a00ce8012000e8256000a6012004ec24e004d0213ffc88013ffc1080000b8c21a00cae012000d025e000ac012000aa102001ea25a004d0213ffcd0213ff888013ff88c21a00c8b19600cba10200290100006fa21bffce8012008e8222000e601200ce62220041b3f00f09a036318de012010353f00f0b406a33081c6a00488012014|@2537,131071|20,5,@2510 360,4,@2524 372,4,@2526 2510:C2,380|9e13e002f606201880a1001b8bd02018d0213ffcd0213ff8c402200080a0bffd1280001488013ff8ee02200cec05e000ea05a0008c21a00c8b19600cba102002a8100006fa21bffc273f00efa604e2bce6252000ec252004ac012000ea25a000aa012000e8256004108000158c21a010ee022008fa05fffcbb2f6008b9376006ac0720018c21a00c8b19600cba102002aa100006fa21bffc293f00efa8052370e8256000ee256004a6012000ec24e000ac012000ea25a0048c21a0108b196010ba102003aa100006fa21bffc293f00efa80523fce8256000e6012000e6256008ee012004ee256004de213ffcea213ff8ac103ffd88013ff8b825a001b9172004aa072001e8012008ba252001811f001d26800008ea213ffc90100015da012000de012004f403600081c6a0048801201090100015da01200cf40360009fc6a00088013ffc80a2200132800008d0012000ec01200088012004f606201880a1001b8bd0201830bfffe5da012004de012008f403600081c6a00488012014|@2523,131071|72,4,@2511 152,4,@2513 204,4,@2514 2511:C2,108|9e13e002b8222001811f200036800004c40360041080000ade213ffcee00a000b825e001ba222001811f401c36800004de213ffc10800009b8222001113f0004900223d0f40620209fc6a00088013ffc90102001b8222001b9172004ae072001d000801c81c3e00601000000|@2512,98465|60,4,@224 2512:S34|486173685461626c652e686173684f7665722831293c7061747465726e3e2d283129 2513:C2,112|9e13e002b8222001811f200036800004c40360041080000cde213ffcfa00bffcbb2f6008b9376006ae072001ba222001811f401c36800004de213ffc10800009b8222001113f0004900223d0f40620209fc6a00088013ffc90102001b8222001ee00801c9010001781c3e00601000000|@2512,98465|68,4,@224 2514:C2,168|9e13e002c4036008b820a001ba222001811f401c36800003ae102001ae1020058c21a0188b196018ba102005ac100006fa21bffc2b3f00f0aa0560c0ea25a000d025a010c425a00cea036004ea25a008da25a0048c21a0148b196014ba102004a8100006fa21bffc273f00f0a604e1b4e6252000d025200cc4252008ea2520048c21a0108b196010ba10200390100006fa21bffcee222008e8222004ec22200081c3e00601000000|@2522,129185|52,4,@2515 104,4,@2517 2515:C2,172|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d003601088013ff8b8222001b91720049e072001da012000d003600cba222001811f001d26800008de213ffc9010000fda036004de012004f403600081c6a004880120089010000fda036008f40360009fc6a00088013ffc80a2200132800008c4012004d001200088012004f606201880a1001b8bd0201830bfffe4d0012000da00a004de012008f403600081c6a0048801200c|@2516,131071| 2516:S35|486173685461626c652e686173684f7665722831296d616b6549746572283129283129 2517:C2,136|9e13e002f606201880a1001b8bd02018d003600cc4036008b820a001ba222001811f401c36800013de213ffcde213ffcda036004f40360009fc6a00088013ffc80a2200132800009ee012000113f00f090022258f40620209fc6a0000100000090102001ee01200081c5e00688012004113f00f090022290f40620209fc6a00088013ffc90102001|@2516,131071|76,4,@2518 112,4,@2520 2518:O3|@24,@397,@2519 2519:S31|486173685461626c652e686173684f7665722e76616c756520284e6f6e6529 2520:O3|@24,@397,@2521 2521:S39|486173685461626c652e686173684f7665722e76616c756520286c696d69742070617373656429 2522:S32|486173685461626c652e686173684f7665722831296d616b6549746572283129 2523:S21|486173685461626c652e686173684f766572283129 2524:O2|@2526,@2525 2525:O2|@2533,@2524 2526:C2,152|9e13e002c402200480a0a00132800003ae102001ae102005ac1de0048c21a0108b196010ba102003ae100006fa21bffc2b3f00f0aa0563e4ea25e000d025e008ea036004ea25e0048c21a00c8b19600cba102002a8100006fa21bffc273f00f1a604e05ce6252000d02520048c21a0108b196010ba102003a6100006fa21bffcec24e008e824e004ee24e0009010001381c3e00601000000|@2532,129185|48,4,@2527 92,4,@2529 2527:C2,44|9e13e002f606201880a1001b8bd02018c4036008d200a004d000a000da036004f403600081c6a00401000000|@2528,131071| 2528:S40|556e6976657273616c5461626c652e756e69764f7665722831296d616b6549746572283129283129 2529:C2,176|9e13e002f606201880a1001b8bd02018d0213ffcd0213ff8d0036004c402200480a0a0011280000888013ff8de213ffc113f00f190022128f40620209fc6a00088013ffcee022000de213ffcfa00a000fa213ff890102001da05e004f40360009fc6a00088013ff8ac012008ea022000ea25a000a8012008e6012000e62520048c21a00c8b19600cba10200290100006fa21bffce4012008e4222000e201200ce2222004e001200481c4200688012010|@2528,131071|48,4,@2530 2530:O3|@24,@397,@2531 2531:S29|556e6976657273616c5461626c652e756e69764f7665722e76616c7565 2532:S37|556e6976657273616c5461626c652e756e69764f7665722831296d616b6549746572283129 2533:C2,352|9e13e002f606201880a1001b8bd0201880a260013280000ac4026004de213ffc113f00f19002230cf40620209fc6a00088013ffc90102001c402600480a0a0013280003dae100008d0213ffcd0213ff8de213ff4fa036004fa213ff088013ff0ee022000901020019a100017f40360009fc6a00001000000ec02200880a5a00122800019aa012008d0213ffcea022004901020019a100015f40360009fc6a00088013ffce802200480a5200132800008a601200cd001200088012004f606201880a1001b8bd0201830bfffe6e4012000e424e000a201200ce8246004108000098c21a00cd0256000a8012008a6102001e6252004d0213ffc88013ffc8c21a00c8b19600cba10200290100006fa21bffce401200ce4222000e2012010e2222004da012004de012008f403600081c6a004880120148c21a00c8b19600cba10200290100006fa21bffcc4222004ee222000da036004f403600081c6a00401000000|@2536,131071|32,4,@2534 2534:O3|@24,@397,@2535 2535:S28|556e6976657273616c5461626c652e756e69764f7665722e6e657874 2536:S33|556e6976657273616c5461626c652e756e69764f7665722831296e657874283229 2537:S26|556e6976657273616c5461626c652e756e69764f766572283129 2538:S26|556e6976657273616c5461626c652e756e6976466f6c64283329 2539:S39|535452554354555245535f28292e6d61746368536967732836296d617463684e616d6573283229 2540:C2,336|9e13e002f606201880a1001b8bd020188410000fae10000dac100008901000097ffff2f5010000008c21a0208b196020ba1020079e100006fa21bffc1b3f00f29a036150da23e000ee23e018ec23e014da05e010da23e010d805e00cd823e00cd605e008d623e008d405e004d423e0048c21a00c8b19600cba102002aa100006fa21bffc293f010ba8052274e8256000de256004c4213ffcee213ff8ec213ff4d2213ff094102001921000157ffffc7a88013ff0d00120007ffff2cf01000000e60120088c21a01c8b19601cba102006a4100006fa21bffc233f010ba2046308e224a000e0012004e024a014de04e010de24a010c204e00cc224a00cda04e008da24a008d804e004d824a0048c21a00c8b19600cba10200296100006fa21bffc153f010d9402a1a0d422e000e422e004941020019210000b7ffffc570100000090102001d201200c81c2600688012010|@2678,131071|32,5,@2425 60,4,@2541 132,4,@2664 172,5,@2508 184,5,@2425 216,4,@2666 288,4,@2676 312,5,@2508 2541:C2,624|9e13e002f606201880a1001b8bd020189410000fac10000daa100008901000091b3f00df9a0360847fffecc60100000080a220012280003890100009901000091b3f00df9a0360787fffece80100000092100008d005a0147ffff28c01000000d4213ffcec213ff8d2213ff494100015133f00df920260687fffe81a88013ff4808a20013280002190102001c40120048c21a0188b196018ba102005ae100006fa21bffc2d3f00f2ac05a3dcec25e000ea00a010ea25e010e800a004e825e00ce600a008e625e008e400a00ce425e004e2012008e4212008e6212004e0012000e8212000961000179410001592100010d00220009e100011353f0109b406a26081c6a00401000000c401200881c0a0068801200c1b3f00de9a0362347fffebf50100000080a220012280005090102001901000091b3f00de9a0362287fffec1701000000a8100008d005a0147ffff24f01000000d4213ffcec213ff8e8213ff494100015133f00de920262187fffe7dd88013ff4808a20013280003990102001e402200080a4a00132800013e604a008901020297fffb6f3010000008c21a0148b196014ba102004a2100006fa21bffca0102001e024600c9e102001de24600803000083820063d8c2246004d0246000a6100011e001200080a4200132800016e2042008e6213ffc901020297fffb6dd88013ffc8c21a0148b196014ba1020049e100006fa21bffc82102001c223e00c9a102001da23e00819000083980323d8d823e004d023e000a210000f10800005de012008e6213ffc88013ffcde01200892100011d0012000da03e018de01200cf403600081c6a00488012010e601200881c4e0068801200c81c2a00601000000|@2663,131071|32,4,@2371 40,5,@2372 64,4,@2370 72,5,@2375 88,5,@2425 112,4,@2369 120,5,@2311 164,4,@2542 248,4,@2652 276,4,@2357 284,5,@2358 308,4,@2356 316,5,@2361 332,5,@2425 356,4,@2355 364,5,@2311 404,5,@1992 448,4,I48 492,5,@1992 536,4,I48 2542:C2,116|9e13e002f606201880a1001b8bd020188c21a0148b196014ba10200484100006fa21bffc2f3f00f3ae05e06cee20a000ee036004ee20a00cec022008ec20a008ea036008ea20a004e803600ce8213ffcc4213ff896100017d4036010d2022004d0022000353f00f3b406a1c081c6a00488013ff8|@2651,131071|36,4,@2543 100,4,@2547 2543:C2,232|9e13e002f606201880a1001b8bd02018c403600cde213ffcda213ff8d0213ff4133f00d3920262f4d000a0241b3f00389a0360407fff44ee88013ff4ee012000ec012004d0213ffcfa05e00cfa213ff8d205a008113f00f3900221707fff31e188013ff8133f00f3920261887fff31dd01000000da012000f40360009fc6a00001000000ea012008113f00c090022030da056000f40360009fc6a00001000000e801200c8c21a00c8b19600cba102002a6100006fa21bffca4102001e424e004e2052004e224e000d4012008d201200490100013de012010353f00adb406a19481c6a00488012014|@2546,131071|32,4,@2272 44,4,@1112 52,5,@1114 84,4,@2544 92,5,@496 100,4,@2545 108,5,@496 136,4,@2170 216,4,@2067 2544:S16|5768696c6520636865636b696e672028 2545:S6|29206e656172 2546:S29|535452554354555245535f28292e666f756e644e656172283329283129 2547:C2,172|9e13e002f606201880a1001b8bd020188c21a00c8b19600cba10200284100006fa21bffc2f3f00f3ae05e288ee20a000d420a004de213ffcd2213ff8d6213ff4c4213ff094102005921020017ffff6c188013ff08c21a0148b196014ba102004ac100006fa21bffc2b3f00f5aa0561f4ea25a000e8012004e825a00ce6012014e625a008e4012010e425a00496100016d4012000d2012008de01200c353f00f6b406a1cc81c6a00488012018|@2650,131071|36,4,@2548 76,5,@2464 104,4,@2567 156,4,@2575 2548:C2,84|9e13e002f606201880a1001b8bd020188c21a00c8b19600cba10200284100006fa21bffc2f3f00f3ae05e2f8ee20a000ee036004ee20a00494100002133f00f492026074353f00ebb406a3e081c6a00401000000|@2566,131071|36,4,@2549 60,4,@2554 68,4,@2475 2549:C2,148|9e13e002f606201880a1001b8bd020188c21a00c8b19600cba10200284100006fa21bffc2f3f00f3ae05e3a8ee20a000ee036004ee20a0048c21a00c8b19600cba102002ac100006fa21bffcee25a0042b3f00f4aa056040ea25a000293f00f4a8052074e8213ffc27000083a604e3d8e6213ff896100016153f00f49402a0c492100002353f00f4b406a0cc81c6a00488013ff8|@2565,131071|36,4,@2550 80,4,@2552 92,4,@2554 104,4,I48 120,4,@2557 132,4,@2558 2550:C2,72|9e13e002f606201880a1001b8bd02018de213ffcda036004f40360009fc6a00088013ffc1b0000859a0362f8f40360009fc6a00001000000901a2004c401200081c0a00688012004|@2551,131071|36,4,I105 2551:S44|545950455f5452454528292e6d617463685479706573283629636f7079546172676574283129283129283129 2552:O1|@2553 2553:C2,16|9e13e0029010200181c3e00601000000|@2551,129| 2554:O1|@2555 2555:C2,12|9e13e00281c3e00601000000|@2556,129| 2556:S22|545950455f5452454528292e747269764d6170283129 2557:O1|@2254 2558:C2,668|9e13e002f606201880a1001b8bd020188410000fae100008901000177fff70d601000000a8100002a6100017a4100008901000137ffff27801000000ae100008901000177fffc4440100000080a22001228000058c21a01cac10001710800024e8213ffc8b19601cba102006ac100006fa21bffc2b3f00f4aa056384ea25a000d225a014d425a010d625a00cde012000de25a0081b3f00f59a036014da25a004e8213ffce6213ff8d2213ff4d4213ff0fa02e000fa213fecfa02e004fa213fe8e4213fe4ee213fe094100016133f00f492026074901000177ffff78f88013fe0ac1000081080000dec213ffce6213ff8d2213ff4d4213ff0fa02e000fa213fecfa02e004fa213fe8e4213fe4ee213fe088013fe0ec213ffcd0012004da012014f40360009fc6a00088013ffc80a2200122800004ea01200410800008d0012008e801200080a5401432800004d001200810800050d001201cda01200cf40360009fc6a00001000000808a200132800006d0012004d0022000ea01202081c560068801202c7fffc3f40100000080a2200122800011d001201cd001201c7fffc60e01000000d0213ffcd0213ff892013ff87fffc61c88013ff8d2012004d001202c7fff307001000000aa10000810800009d00120247fffc60001000000aa100008d0213ffcd0213ff888013ff8d00120247ffff2c801000000ea213ffcd0213ff890102001da01201cf40360009fc6a00088013ff8a8100008d001202c7ffff24101000000d0213ffca6102001e6213ff896100014d4012010d2012000d00120044000004488013ff8a41000088c21a00c8b19600cba10200290100006fa21bffce4222004e2012018e2222000e4213ffcda012020f40360009fc6a00088013ffcd0012000e001203481c4200688012040e601202081c4e0068801202c|@2564,131071|28,5,@1613 52,5,@2429 68,5,@2102 116,4,@2559 148,4,@2561 204,4,@2554 216,5,@2475 388,5,@2102 412,5,@2128 432,5,@2130 448,5,@496 468,5,@2128 496,5,@2438 540,5,@2436 576,5,@2562 2559:C2,64|9e13e002f606201880a1001b8bd02018053f00f48400a074c4213ffcee036008ee213ff8d603600cd4036010d2036014da036004f403600081c6a00488013ff8|@2560,131071|16,4,@2554 2560:S44|545950455f5452454528292e636f707954797065436f6e737472283629636f7069656445717569762d283129 2561:O1|@2558 2562:C2,264|9e13e002de213ffcd0213ff8d2213ff4d4213ff0d6213fec8410200188013fec80a2600132800005b820a001ae1000021080000a8c21a010b91720049e072001d20260048410000ff606201880a1001b8bd0201830bffff38b196010ba1020039e100006fa21bffc96102001d623e008d4012004d423e004d2012018d223e0008c21a0088b1960083b100000ba07600190100006fa21bffcde2220008c21a00c8b19600cba10200284100006fa21bffcd020a0049e103ffdde20a0008c21a01c8b19601cba10200696100006fa21bffcd4012000d422e014c422e010d0012008d022e00cc4012014c422e008ee22e004ee01200cee22e0009010000bde01201081c3e0068801201c|@2563,98447| 2563:S32|5354525543545f56414c5328292e6d616b6554797065436f6e73747273283629 2564:S29|545950455f5452454528292e636f707954797065436f6e737472283629 2565:S41|545950455f5452454528292e6d617463685479706573283629636f7079546172676574283129283129 2566:S38|545950455f5452454528292e6d617463685479706573283629636f7079546172676574283129 2567:C2,88|9e13e002f606201880a1001b8bd02018c4022008c4213ffcee03600cee213ff8ec036008ec213ff4ea036004ea213ff0d6022004153f00f59402a268d2022000113f00f590022274353f00f5b406a28881c6a00488013ff0|@2574,131071|52,4,@2568 64,4,@2569 72,4,@2570 2568:S2|746f 2569:S11|43616e2774206d61746368 2570:C2,192|9e13e002f606201880a1001b8bd020188c21a0248b196024ba10200884100006fa21bffc2f3f00f5ae05e364ee20a000ee012008ee20a01cd020a018d220a014d420a010d620a00cd601200cd620a008d4012000d420a004d2012004d005e004d021200cec05e008ec212008ea05e00cea212004e805e010e8212000e605e014e6213ffce405e018e4213ff8e205e01ce2213ff4e005e020e0213ff0c205e024c2213fecd605e0009410200590100002353f0042b406a05081c6a00488013fec|@2573,131071|36,4,@2571 176,4,@1265 2571:C2,468|9e13e002f606201880a1001b8bd02018aa10000fa810000da6100008901020017fffbe3b01000000de05201cea213ffce8213ff8e6213ff4d0213ff0133f00d3920262f4d003e0241b3f00389a0360407fff422988013ff0c2012004d0213ffc113f0025900222b4da006018f40360009fc6a00088013ffcda012008d801200cd0032018da03600cf40360009fc6a00001000000d6012008113f001f9002225cda02e000f40360009fc6a00001000000d401200c92102005d2213ffcd6012004d002a014d4012008d20120007fffbf5488013ffcc4012008113f001f9002225cda00a000f40360009fc6a00001000000ee012008ec01200cd005a010da05e00cf40360009fc6a00001000000ea012008113f001f9002225cda056000f40360009fc6a00001000000e801200ca6102005e6213ffcd6012004d4012008d2012000d005200c7fffbf3688013ffce4012008113f001f9002225cda04a000f40360009fc6a00001000000e2012008e001200cd0042008da04600cf40360009fc6a00001000000de012008113f001f9002225cda03e000f40360009fc6a00001000000c201200cd0012008da006004f40360009fc6a00001000000da01200890102001da036008de012010f403600081c6a00488012014|@2572,131071|32,5,@2086 60,4,@2272 72,4,@1112 80,5,@1114 96,4,@501 152,4,@485 204,5,@2097 216,4,@485 272,4,@485 324,5,@2097 336,4,@485 392,4,@485 2572:S28|545950455f5452454528292e6d617463684572726f72283829283129 2573:S25|545950455f5452454528292e6d617463684572726f72283829 2574:S37|545950455f5452454528292e6d61746368547970657328362963616e744d61746368283129 2575:C2,48|9e13e002f606201880a1001b8bd02018d6213ffcde213ff89a013ffc4000000c88013ff8c401200081c0a00688012008|@2649,131071|28,5,@2576 2576:C2,5268|9e13e002f606201880a1001b8bd02018da213ffcd2213ff8d4213ff4d0213ff0de213fec7fffc13d88013fecd0213ffcd001200c7fffc13988013ffcd0213ffcd00120007ffff6f988013ffc80a2200122800006d001200490102001c401200881c0a0068801201c7fff6e210100000080a220012280015dd0012004d00120047fff6e2c01000000ae100008d00120007ffff6e60100000080a2200122800006d001200090102001ec01200881c5a0068801201c7fff6e0e0100000080a220012280014490100017ac100017d00120007fff6e1801000000d205a004d005a0007fffc1b601000000ec213ffcd0213ff8d0012000da012010f40360009fc6a00088013ff8aa100008901000157fff6df80100000080a220012280012601000000901000157fff6e0301000000a810000892100014d00120047fffbdd10100000080a2200122800006e601200490102001e601201081c4e00688012024d204e004d004e000400004d30100000080a220012280000ad2052004d201200c901000149a012020400004e501000000e401201081c4a00688012024d00520007fffc18701000000a4100008d00120007fffc1ad0100000080a2200122800058d0012000d00120007fffc1b801000000a2100008901000127fffc1a30100000080a220012280002990100012901000127fffc1ae01000000a0100008133f000f920260cc901000147fff6dde01000000133f000f920260cc901000137fff6dd901000000ea213ffce8213ff81f3f00f49e03e074de213ff496100012d401200092100010901000119a01202040000a0188013ff492100008d00120009a012028400004af01000000d2012004d001200c9a012028400004aa01000000c201201881c060068801202c7fffc1610100000080a220012280000ae0012020d201200c901000149a0120204000049d01000000e001201081c4200688012024fa042000fa213ffcd001201cda012018f40360009fc6a00088013ffc9e1000088c21a0108b196010ba10200390100006fa21bffc033f0105820060e0c2222008de222004da012018da222000da012000de012014f403600081c6a004880120287fffc2f20100000080a2200122800071d0012000d00120007fffc30201000000a2100008901000127fffc2e80100000080a220012280004290100012901000127fffc2f801000000e2213ffca01000159a01202040000dde88013ffc80a220013280001b82100008de012024fa03e000fa213ffcd0012020da01201cf40360009fc6a00088013ffc821000088c21a0108b196010ba10200390100006fa21bffc1b3f01059a036254da222008c2222004d801201cd8222000da012000de012018f403600081c6a0048801202c133f000f920260cc901000147fff6d6301000000133f000f920260cc901000137fff6d5e01000000e0213ffce8213ff89010000140000e1288013ff892100008d00120009a01202c4000043b01000000d2012004d00120109a01202c4000043601000000da01201c81c36006880120307fffc0ed0100000080a220012280000ae0012020d201200c901000149a0120204000042901000000e001201081c4200688012024fa042000fa213ffcd001201cda012018f40360009fc6a00088013ffc9e1000088c21a0108b196010ba10200390100006fa21bffc033f0105820060e0c2222008de222004da012018da222000da012000de012014f403600081c6a004880120287fffc0c80100000080a220012280000a9010001292100015901000139a0120204000040401000000e201201081c46006880120247fffc0bb0100000080a220012280000ae2012020d201200c901000149a012020400003f701000000e201201081c4600688012024fa046000fa213ffcd001201cda012018f40360009fc6a00088013ffca01000088c21a0108b196010ba10200390100006fa21bffc1f3f01059e03e0e0de222008e0222004c2012018c2222000da012000de012014f403600081c6a00488012028153f00f49402a07492100015d001200cda012020de01201010bffe8f880120249a01201840000e6a01000000ec01200881c5a0068801201c7fffc2670100000080a22001228001aad0012004d00120047fffc27201000000ee022000ec022008d00120007ffff5850100000080a2200122800006d001200090102001ea01200881c560068801201c7fff6cad0100000080a220012280000bd0012000d00120007fff6cb8010000009a01201840000f3101000000ea01200881c560068801201c7fffc2450100000080a22001228000cdd0012000aa100017a8100016d00120007fffc24e01000000e6022000e4022008901000147fffc25e01000000a2100008901000127fffc25a01000000a0100008901000117fff6cd9010000007fff6cec0100000080a2200122800004821000151080002190100010901000117fffee77010000007fffc0450100000080a220012280000590100011aa10000110800016901000107fffee6d0100000098100008901000117fffef2801000000921000017ffff1a50100000094102005921000089010000c7ffff1ed01000000d4012010d2012000da012018de01200810bffe2a8801201c7fff6cb1010000007fff6cc40100000080a22001228000049810001510800022ea213ffc901000107fffee4f010000007fffc01d0100000080a220012280000590100010aa10000c10800017ea213ffc7fffee450100000096100008901000107fffef0001000000921000137ffff17d0100000094102005921000089010000b7ffff1c501000000d401201092100008d0012004da012018de01200810bffe018801201ce2213ff8d0012000da012010f40360009fc6a00088013ff8961000089010000b7fffc1d70100000080a2200122800057010000009010000b7fffc1e201000000d4022000d00220087fffc1f30100000092100008901000097fff6c72010000007fff6c850100000080a2200132800022d0012000901000097fffee12010000007fffbfe00100000080a220013280001ad0012000901000097fffee0a0100000084100008901000097fffeec501000000a41000029210000a7ffff141010000009410200592100008901000127ffff18901000000153f00f49402a07492100008d001200cda012020de01201010bffdc4880120247fff6c4b0100000084100008901000097fff6c470100000092100008901000027ffff0490100000080a220012280000aee012020d20120049010000a9a01202040000f5801000000ee01201081c5e006880120248c21a0108b196010ba10200390100006fa21bffc2d3f0108ac05a294ec222008d6222004ea01200cea222000da05e000de012010f403600081c6a00488012024153f00f49402a0749210000bd001200cda012020de01201010bffd97880120247fffc14c0100000080a2200122800073aa100017d00120007fffc15c01000000aa100017a8100008901000167fffc19001000000a6100008901000137fff6c0f010000007fff6c220100000080a2200122800004a41000151080002180a56001901000137fffedad010000007fffbf7b0100000080a220012280000590100013aa1000121080001680a560017fffeda301000000a2100008901000137fffee5e01000000921000127ffff0db010000009410200592100008901000117ffff12301000000d4012010d2012000da012018de01200810bffd608801201c32800021d0213ffce6213ffc88013ffc808d200132800017a2102001d00120007fff6bdf01000000a0100008d00520007fff6bdb0100000092100008901000107fffefdd0100000080a2200122800005e8052004a21020051080000780a46001f606201880a1001b8bd0201830bfffe980a460012280000ae201201c108000059010200188013ffc10800005e201201ce201200c81c4600688012020fa046000fa213ffcd0012004da012014f40360009fc6a00088013ffca01000088c21a0108b196010ba10200390100006fa21bffc1f3f01089e03e2bcde222008e0222004c201200cc2222000da012000de012010f403600081c6a00488012024901000167fffc12401000000a8100008901000147fff6ba3010000007fff6bb60100000080a2200122800004a610001510800021e4012018901000147fffed41010000007fffbf0f0100000080a220012280000590100014aa10001310800016e40120187fffed3701000000a4100008901000147fffedf201000000921000137ffff06f010000009410200592100008901000127ffff0b701000000d4012010d2012000da012018de01200810bffcf48801201cfa04a000fa213ffcd0012000da012010f40360009fc6a00088013ffca21000088c21a0108b196010ba10200390100006fa21bffc213f0105a00420e0e0222008e2222004de012008de222000da012000de01200cf403600081c6a004880120207fffc0910100000080a22001228000f1d0012004d00120047fffc0a101000000ae100008d00120007ffff3d90100000080a2200122800006d001200090102001ec01200881c5a0068801201c7fff6b010100000080a220012280000bd0012000d00120007fff6b0c010000009a01201840000d8501000000ec01200881c5a0068801201c7fffc0990100000080a22001228000b8ec012018aa100017d00120007fffc0a301000000e8022000d00220087fffc0b401000000a6100008901000137fff6b33010000007fff6b460100000080a2200122800004a410001510800022ea213ffc901000137fffecd1010000007fffbe9f0100000080a220012280000590100013aa10001210800017ea213ffc7fffecc701000000a2100008901000137fffed8201000000921000147fffefff010000009410200592100008901000117ffff04701000000d401201092100008d0012004da012018de01200810bffc838801201ce6213ff8d0012000da012010f40360009fc6a00088013ff8a2100008901000117fffc0590100000080a220012280007001000000901000117fffc06401000000e0022000d00220087fffc0750100000082100008901000017fff6af4010000007fff6b070100000080a22001228000069010000190102001da01201081c36006880120247fffec91010000007fffbe5f0100000080a220013280001980a42001901000017fffec890100000098100008901000017fffed4401000000921000107fffefc10100000094102005921000089010000c7ffff00901000000153f00f49402a07492100008d001200cda012020de01201010bffc448801202432800025e2213ffce2213ffcda01200488013ffc808b60013280001a98102001d6036000d4036004d00120047fff6ac001000000921000089010000b7fff6abc010000008410000992100008901000027fffeebd0100000080a22001228000059a10000a981020051080000780a32001f606201880a1001b8bd0201830bfffe680a320012280000ada012024108000059010200188013ffc10800005da012024d801201481c32006880120288c21a0108b196010ba10200390100006fa21bffc193f0108980322bcd8222008d6012000d6222004d4012010d4222000da036000de012014f403600081c6a00488012028153f00f49402a07492100011d001200cda012020de01201010bffc0088012024fa05a000fa213ffcd0012000da012010f40360009fc6a00088013ffcaa1000088c21a0108b196010ba10200390100006fa21bffc293f0105a80520e0e8222008ea222004e6012008e6222000da012000de01200cf403600081c6a004880120207fffc2020100000080a2200122800060d0012004d00120047fffc20d01000000ee022000ec022004d00120007ffff2e40100000080a2200122800006d001200090102001ea01200881c560068801201c7fff6a0c0100000080a220012280000bd0012000d00120007fff6a17010000009a01201840000c9001000000ea01200881c560068801201c7fffbfa40100000080a220012280000dd0012000d00120007fffbfaf01000000d2022008d00220009a01201840000dec01000000ea01200881c560068801201c7fffc1d00100000080a2200122800016ea012018aa100017d00120007fffc1da01000000ec213ffcfa022004fa213ff8d4012010d202200090100015da0120187ffffba388013ff8d4012018d2012000d0012004da012020de01201010bffb9d88012024fa056000fa213ffcd0012000da012010f40360009fc6a00088013ffca81000088c21a0108b196010ba10200390100006fa21bffc273f0105a604e0e0e6222008e8222004e4012008e4222000da012000de01200cf403600081c6a004880120207fffbd840100000080a220012280004bd0012004d00120007ffff2860100000080a2200122800006d001200090102001c401200881c0a0068801201c7fff69ae0100000080a220012280000bd0012000d00120007fff69b9010000009a01201840000c3201000000c401200881c0a0068801201c7fffbf460100000080a220012280000dd0012000d00120007fffbf5101000000d2022008d00220009a01201840000d8e01000000c401200881c0a0068801201c7fffbd570100000080a2200122800006c401201890102001c401200881c0a0068801201cfa00a000fa213ffcd0012000da012010f40360009fc6a00088013ffcae1000088c21a0108b196010ba10200390100006fa21bffc2d3f0105ac05a0e0ec222008ee222004ea012008ea222000da012000de01200cf403600081c6a004880120207fffbd5d01000000ae100008d00120007ffff23a0100000080a2200122800006d001200090102001ec01200881c5a0068801201c7fff69620100000080a220012280000bd0012000d00120007fff696d010000009a01201840000be601000000ec01200881c5a0068801201c7fffbefa0100000080a220012280000dd0012000d00120007fffbf0501000000d2022008d00220009a01201840000d4201000000ec01200881c5a0068801201c7fffbd210100000080a2200122800013ec012018aa100017d00120007fffbd2b01000000e8012010e8213ffcd6012000d401200492100008901000159a0120184000058c88013ffc90102001e601200881c4e0068801201cfa05a000fa213ffcd0012000da012010f40360009fc6a00088013ffcaa1000088c21a0108b196010ba10200390100006fa21bffc293f0105a80520e0e8222008ea222004e6012008e6222000da012000de01200cf403600081c6a00488012020|@2648,131071|36,5,@2099 52,5,@2099 68,5,@2481 104,5,@1606 128,5,@1607 144,5,@2481 180,5,@1606 208,5,@1607 224,5,@2100 268,5,@1606 292,5,@1607 312,5,@2088 356,5,@2577 388,5,@2579 412,5,@2100 428,5,@2104 452,5,@2105 468,5,@2104 492,5,@2105 504,4,@375 516,5,@1608 524,4,@375 536,5,@1608 552,4,@2554 584,5,@2614 604,5,@2579 624,5,@2579 644,5,@2102 676,5,@2579 748,4,@2631 792,5,@2120 816,5,@2122 832,5,@2120 856,5,@2122 876,5,@2632 952,4,@2634 996,4,@375 1008,5,@1608 1016,4,@375 1028,5,@1608 1048,5,@2635 1068,5,@2579 1088,5,@2579 1108,5,@2102 1140,5,@2579 1212,4,@2631 1256,5,@2102 1288,5,@2579 1308,5,@2102 1340,5,@2579 1412,4,@2631 1456,4,@2554 1492,5,@2637 1512,5,@2124 1536,5,@2125 1556,5,@2481 1592,5,@1606 1616,5,@1607 1628,5,@2639 1648,5,@2124 1680,5,@2125 1700,5,@2126 1716,5,@2126 1732,5,@1613 1740,5,@1615 1772,5,@2429 1780,5,@2102 1812,5,@2429 1828,5,@2438 1840,5,@2462 1860,5,@2464 1892,5,@1613 1900,5,@1615 1932,5,@2429 1940,5,@2102 1972,5,@2429 1988,5,@2438 2000,5,@2462 2020,5,@2464 2088,5,@2124 2112,5,@2125 2128,5,@2126 2144,5,@1613 2152,5,@1615 2176,5,@2429 2184,5,@2102 2208,5,@2429 2224,5,@2438 2240,5,@2462 2260,5,@2464 2268,4,@2554 2300,5,@1613 2316,5,@1613 2332,5,@2452 2364,5,@2641 2404,4,@2644 2448,4,@2554 2480,5,@2120 2504,5,@2122 2524,5,@2126 2540,5,@1613 2548,5,@1615 2580,5,@2429 2588,5,@2102 2620,5,@2429 2636,5,@2438 2648,5,@2462 2668,5,@2464 2732,5,@1613 2748,5,@1613 2764,5,@2452 2908,4,@2645 2956,5,@2126 2972,5,@1613 2980,5,@1615 3012,5,@2429 3020,5,@2102 3052,5,@2429 3068,5,@2438 3080,5,@2462 3100,5,@2464 3184,4,@2631 3228,5,@2120 3252,5,@2122 3268,5,@2481 3304,5,@1606 3328,5,@1607 3340,5,@2639 3360,5,@2124 3388,5,@2125 3404,5,@2126 3420,5,@1613 3428,5,@1615 3460,5,@2429 3468,5,@2102 3500,5,@2429 3516,5,@2438 3528,5,@2462 3548,5,@2464 3616,5,@2124 3640,5,@2125 3656,5,@2126 3672,5,@1613 3680,5,@1615 3716,5,@2429 3724,5,@2102 3748,5,@2429 3764,5,@2438 3776,5,@2462 3796,5,@2464 3804,4,@2554 3880,5,@1613 3896,5,@1613 3916,5,@2452 4028,4,@2645 4076,4,@2554 4160,4,@2631 4204,5,@2148 4228,5,@2149 4248,5,@2481 4284,5,@1606 4308,5,@1607 4320,5,@2639 4340,5,@2124 4364,5,@2125 4384,5,@2646 4404,5,@2148 4432,5,@2149 4556,4,@2631 4600,5,@2102 4624,5,@2481 4660,5,@1606 4684,5,@1607 4696,5,@2639 4716,5,@2124 4740,5,@2125 4760,5,@2646 4780,5,@2102 4868,4,@2631 4912,5,@2105 4928,5,@2481 4964,5,@1606 4988,5,@1607 5000,5,@2639 5020,5,@2124 5044,5,@2125 5064,5,@2646 5084,5,@2104 5112,5,@2105 5148,5,@2614 5224,4,@2631 2577:C2,36|9e13e002900a600980a220013280000384102001841020059018a00481c3e00601000000|@2578,65667| 2578:S31|5354525543545f56414c5328292e74764e6f6e556e69666961626c65283229 2579:C2,908|9e13e002f606201880a1001b8bd02018c40360008c21a01c8b19601cba102006ae100006fa21bffc2d3f00fcac05a2d8ec25e000ec00a000ec25e014ea037ff4ea25e010e8037ff8e825e00ce6037ffce625e008d025e004a410000fa210000da010000882100009d2042004d00420007fffbc8c0100000092100008901000097fffbcb20100000080a22001228000159010000998100017901000097fffbcbc01000000e4213ffce2213ff8e0213ff4c2213ff0d8213fec153f00f49402a07496100009921000019010000bda0460007ffffa8688013fec1080001ed00120087fffbe3a0100000080a2200122800013e4213ffc901000097fffbe4a01000000e4213ffce2213ff8e0213ff4c2213ff0ee213fec153f00f49402a0749010000992100001da0460007ffffa7088013fec10800008d0012008e2213ff8e0213ff4c2213ff0ee213fec88013fecd0012008d2022004d00220007fffff900100000080a22001228000048c21a00c1080001ed00120048b19600cba10200290100006fa21bffc053f00fd8400a2a4c4222000ee012000ee222004400001bf01000000ac100008d00120049a100016f40360009fc6a00001000000aa100008901020059a100015f40360009fc6a0000100000080a2200122800004d001200410800035e80120089a012010400002d60100000080a220012280002c90102001c4012008d200a004d000a0007fffff640100000080a2200122800006010000002f3f00ffae05e20010800005ec01200c2f3f00ffae05e234ec01200cea05a000ee213ffcfa056000fa213ff8fa05bff4fa213ff4d005bffcda05bff8f40360009fc6a00088013ff4a81000088c21a0108b196010ba10200390100006fa21bffce6012008e6222008e8222004e4012000e4222000da012004de01201cf403600081c6a00488012020c401201081c0a00688012014d2052004d00520007fffb8450100000080a2200122800029d0213ffc153f00ff9402a268133f0100920263a8d00120047fffeb2c0100000080a23ffd3280001fd0213ffce601200ce404e000fa04a000fa213ffcfa04fff4fa213ff8d004fffcda04fff8f40360009fc6a00088013ff8a21000088c21a0108b196010ba10200390100006fa21bffc213f0101a0042010e0222008e2222004de012000de222000da012004f40360009fc6a0000100000010800005d201200cd0213ff888013ff8d201200cd0012010de012018353f0064b406a39481c6a0048801201c|@2613,131071|40,4,@2580 112,5,@2100 128,5,@2104 156,5,@2105 184,4,@2554 208,5,@2576 224,5,@2120 248,5,@2122 276,4,@2554 296,5,@2576 344,5,@2577 388,4,@2583 408,5,@2587 488,5,@2598 520,5,@2577 540,4,@2600 556,4,@2601 696,5,@2090 716,4,@2602 724,4,@2609 736,5,@2445 824,4,@2612 892,4,@1608 2580:C2,824|9e13e002f606201880a1001b8bd0201880a2200132800005ae10000f9010200181c3e00601000000ac10000d901000097fff67ff0100000080a22001228000bd90102005aa100017901000097fff680901000000de05a00484100008d203e004d003e0007fffbcff01000000ae100008d200a004d000a0007fffbcfa01000000b8222001ba25e001811f401c36800003a8100008a8100017de05a004ae100002d203e004d003e0007fffbd0e0100000080a2200122800004d205e0041080000ad205e004d005e0007fffbd060100000080a2200132800004d205e00410800010a6102001d005e0007fffbb840100000092100008901000097fffbd4a0100000080a2200122800006a6102005901000097fffbd5a01000000a6102001d205e004d005e0007fffbccf01000000b8252001ba222001811f401c22800004d205e0041080000ad205e004d005e0007fffbce50100000080a2001332800004d205e00410800066ea213ffcd005e0007ffffea10100000080a2200122800020d205e004ea213ffcec213ff8ee213ff4fa05a014fa213ff0fa05a010fa213fecd005a008da05a00cf40360009fc6a00088013fecac1000088c21a0108b196010ba10200390100006fa21bffc2b3f00fdaa05622cea222008ec222004e8012000e8222000da012004f40360009fc6a0000100000010800048ec01200cd005e0007fffb78a01000000ea213ffcec213ff8ee213ff4d0213ff0d0213fece6213fe8a6013fece6213fe4961020019410000892100014113f000f900220cc7fff5b4f88013fe48c21a00c8b19600cba10200290100006fa21bffce4012000e4222000e2012004e22220047fff5b8d01000000a0100008901000107fff676e0100000080a220012280000801000000901000107fff6779010000009e10000810800009c2012008113f003890022020f40620209fc6a000010000009e102001c20120089810000fd2006004d00060007fffbb0c01000000921000089010000c7fff67790100000092100010901000017fff67750100000010800008ec01200cec213ff8ee213ff4d0213ff0d0213fec88013fecec01200cd205a004d00120087fffb72901000000901a2004ea01201081c560068801201481c5e00601000000|@2582,131071|48,5,@1606 76,5,@1607 100,5,@2110 120,5,@2110 168,5,@2112 200,5,@2112 232,5,@2100 248,5,@2120 272,5,@2122 292,5,@2110 332,5,@2112 364,5,@2577 456,4,@2581 508,5,@2090 560,4,@375 568,5,@1515 612,5,@1517 628,5,@1606 652,5,@1607 672,4,@1110 712,5,@2100 728,5,@1608 744,5,@1608 792,5,@2088 2581:S44|2854797065207661726961626c65206973206672656520696e20737572726f756e64696e672073636f706529 2582:S57|545950455f5452454528292e747970654d617463682834296d6174636828332961737369676e283229636865636b466f724c6f6f7073283229 2583:C2,60|9e13e002841000088c21a0108b196010ba10200390100006fa21bffc2f3f00fdae05e2fcee222000ee036004ee222008c422200481c3e00601000000|@2586,98465|28,4,@2584 2584:C2,36|9e13e002f606201880a1001b8bd02018d2036004da036008f403600081c6a00401000000|@2585,131071| 2585:S60|545950455f5452454528292e747970654d617463682834296d6174636828332961737369676e283229636865636b466f724c6f6f7073283129283129 2586:S57|545950455f5452454528292e747970654d617463682834296d6174636828332961737369676e283229636865636b466f724c6f6f7073283129 2587:C2,84|9e13e0028c21a00c8b19600cba10200284100006fa21bffc2f3f00feae05e034ee20a000d020a0048c21a00c8b19600cba10200290100006fa21bffc2f3f00feae05e364ee222000c422200481c3e00601000000|@2597,98433|24,4,@2588 60,4,@2593 2588:C2,480|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d0213ff4901000097fffb9b788013ff4c4012004d0213ffcda00a004f40360009fc6a00088013ffcae100008d00120049a100017f40360009fc6a00001000000ac100008d00120007fff669c0100000080a220012280000fd0012000d00120007fff66a701000000d2022004d00220007fffba45010000009210000890100016da012008de01200c10bfffd9880120107fffbc300100000080a220012280000ed0012000aa100016d00120007fffbc3a01000000ea213ffcd00220009a01200c4000004988013ffce801201081c52006880120147fffbe5b0100000080a2200122800011d0012000d00120007fffbe6601000000fa022000fa213ffcd202200490100016da0120087fffffb888013ffcd2012000da01200cde01201010bfffb4880120147fffba420100000080a220012280000ed0012000aa100016d00120007fffba4c01000000ea213ffcd00220049a01200c4000004888013ffce801201081c52006880120147fffef230100000080a2200122800006d001200090100016ea01200c81c56006880120107fffba120100000080a2200122800006d001200090100016ea01200c81c56006880120107fffbbd50100000090100016ea01200c81c5600688012010|@2592,131071|32,5,@2099 96,5,@1606 120,5,@1607 136,5,@2100 168,5,@2124 196,5,@2125 216,5,@2589 236,5,@2148 260,5,@2149 316,5,@2104 344,5,@2105 364,5,@2591 384,5,@2481 420,5,@2102 456,5,@2122 2589:C2,92|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffcd0037ff081c3e00601000000da213ff8fa022000fa213ff4d00220047ffffff288013ff4c4012004d2012000da00bffcde012008f403600081c6a0048801200c|@2590,131071| 2590:S13|4c6973742e666f6c6472283329 2591:C2,96|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffcd0037ff081c3e00601000000da213ff8fa022000fa213ff4d00220047ffffff288013ff4de012000c2012004d203e004da007ffcde012008f403600081c6a0048801200c|@2590,131071| 2592:S31|545950455f5452454528292e666f6c6454797065283129666f6c6454283229 2593:C2,60|9e13e002841000088c21a0108b196010ba10200390100006fa21bffc2f3f00feae05e3bcee222000ee036004ee222008c422200481c3e00601000000|@2596,98465|28,4,@2594 2594:C2,36|9e13e002f606201880a1001b8bd02018d2036004da036008f403600081c6a00401000000|@2595,131071| 2595:S34|545950455f5452454528292e666f6c6454797065283129666f6c6454283129283129 2596:S31|545950455f5452454528292e666f6c6454797065283129666f6c6454283129 2597:S23|545950455f5452454528292e666f6c6454797065283129 2598:C2,304|9e13e002f606201880a1001b8bd02018ae10000fac10000daa100008901000157fffbb430100000080a220012280003090100015a8100017a6100016901000157fffbb4c01000000ea022000d00220087fffbb5d01000000a4100015a2100008901000117fffe783010000007fffb9510100000080a2200122800005901000119010200581c52006010000007fffe77901000000a0100008901000117fffe834010000008210001498100013921000127fffeaaf01000000c2213ffcd8213ff89410200592100008901000107fffeaf588013ff87fffb87b01000000da012000de01200410bfffc8880120087fff656a0100000080a220012280000c90102005a8100017901000157fff657401000000d205bff87fffb54401000000901a200481c520060100000081c5e00601000000|@2599,131071|32,5,@2124 64,5,@2125 80,5,@2126 100,5,@2429 108,5,@2102 140,5,@2429 156,5,@2438 176,5,@2462 204,5,@2464 212,5,@2099 236,5,@1606 264,5,@1607 276,5,@2088 2599:S58|545950455f5452454528292e747970654d617463682834296d6174636828332961737369676e283229636865636b5265616c4572726f72283129 2600:S42|2843616e6e6f7420756e6966792077697468206578706c696369742074797065207661726961626c6529 2601:S44|2854797065207661726961626c6520746f20626520756e6966696564206f636375727320696e207479706529 2602:O1|@2603 2603:C2,908|9e13e002f606201880a1001b8bd02018ae10000fac100008d205a004d005a0007fffb51b0100000080a2200122800005d205a0049010200581c5e00601000000d005a0007ffffc050100000080a2200122800005d205a00490103ffd81c5e00601000000d005a0007fffba1801000000aa100008d205a004d005a0007fffba3301000000d0213ffcd0213ff8ee213ff4ec213ff0d0213feca8013ff8e8213fe8961020019410200592100015113f000f900220cc7fff58ca88013fe88c21a00c8b19600cba10200290100006fa21bffce6012008e6222000e401200ce42220047fff590801000000e2012000a0100008d2046004d00460007fffb89a010000008210000892100010901000117fff650601000000901000017fffba5c0100000080a220012280008190100010901000017fffba6c01000000e0213ffc1b3f01009a036218f40360009fc6a00088013ffc80a2200132800006da02200490103ffdda01200881c360068801201480a360013280005198100008d8022000d00120007fff64c50100000080a220012280000801000000d00120007fff64d00100000096100008108000099010000c113f003890022020f40620209fc6a00001000000961020019010000c7fffba9a01000000d0213ffcd0213ff8941000089010000c7fff64fc88013ff87fff650f0100000080a2200122800010920120008c21a0088b1960083b100000ba07600192100006fa21bffcd82260009001200084103ffdc4222000ae012000d225e004108000078c21a00c90102001d022600084012000d820a0048c21a00c8b19600cba102002ae100006fa21bffcec012000ec25e000ea012004ea25e0048c21a0108b196010ba10200390100006fa21bffcee222008d4222004a8102001e82220007fff650001000000921000089010000b7fff64a20100000090102005e601201081c4e0068801201cd00120007fff64770100000080a220012280000801000000d00120007fff64820100000096100008108000099010000c113f003890022020f40620209fc6a00001000000961020019010000c4000006b01000000921000089010000b7fff64850100000090102005d401200881c2a006880120147fff645b0100000080a220012280000801000000901000107fff6466010000009a1000081080000992100001113f003890022020f40620209fc6a000010000009a102001921000019010000d7fff646c0100000090102005d801200481c3200688012010|@2608,131071|32,5,@2090 68,5,@2577 104,5,@2110 124,5,@2112 172,4,@375 180,5,@1515 224,5,@1517 248,5,@2100 268,5,@1608 280,5,@2120 304,5,@2122 316,4,@2604 384,5,@1606 408,5,@1607 428,4,@1110 456,5,@2128 480,5,@1613 488,5,@1615 652,5,@1617 668,5,@1608 696,5,@1606 720,5,@1607 740,4,@1110 768,5,@2607 784,5,@1608 808,5,@1606 832,5,@1607 852,4,@1110 884,5,@1608 2604:O1|@2605 2605:C2,152|9e13e002f606201880a1001b8bd0201880a2200132800005a810000f9010200181c3e00601000000e6022000e4022004901000137fffe6660100000080a220012280001390100012e8213ffce6213ff8901000127fffffeb88013ff88c21a00c8b19600cba1020029e100006fa21bffcd023e004da012000da23e0009010000fc401200481c0a006880120089e10001410bfffdef6062018|@2606,130209|52,5,@2436 2606:S62|545950455f5452454528292e747970654d617463682834296d6174636828332961737369676e28322963616e4d6b4571547628312966696c746572283129 2607:C2,48|9e13e002841000088c21a00c8b19600cba10200290100006fa21bffcc422200484102009c422200081c3e00601000000|@2121,65665| 2608:S53|545950455f5452454528292e747970654d617463682834296d6174636828332961737369676e28322963616e4d6b45715476283129 2609:O1|@2610 2610:C2,16|9e13e00290103ffd81c3e00601000000|@2611,129| 2611:S44|545950455f5452454528292e747970654d617463682834296d6174636828332961737369676e283229283129 2612:S24|28526571756972657320657175616c697479207479706529 2613:S41|545950455f5452454528292e747970654d617463682834296d6174636828332961737369676e283229 2614:C2,680|9e13e002f606201880a1001b8bd02018d6213ffcd4213ff8da213ff4fa022008fa213ff0fa022000fa213fecfa026008fa213fe8fa026000fa213fe4de213fe0d2026004d00220049a013ffc4000009e88013fe0c401200c80a0a0012280003cee012004ee01200480a5e00122800004ec01200810800033d001201880a5a00132800004ea05a0001080002ed0012018d2056004d00560007fffb73501000000a8100008901000147fffb75b0100000080a220012280001901000000e605a004901000147fffb76501000000e40220048c21a0108b196010ba10200390100006fa21bffca2102001e2222008e4222004a0102005e02220007fff634e0100000092100008901000157fff638a0100000010800008ac100013113f0104900223e0f40620209fc6a00001000000ac100013f606201880a1001b8bd0201830bfffd0ea01200081c560068801202480a5e0012280003bea01200880a0a00122800004ec01201010800033d001201c80a5a00132800004ea05a0001080002ed001201cd2056004d00560007fffb6f901000000a8100008901000147fffb71f0100000080a220012280001901000000e605a004901000147fffb72901000000e40220048c21a0108b196010ba10200390100006fa21bffca2102001e2222008e4222004a0102005e02220007fff63120100000092100008901000157fff634e0100000010800008ac100013113f0104900223e0f40620209fc6a00001000000ac100013f606201880a1001b8bd0201830bfffd0ea01200081c560068801202480a5600132800005a8100008ec01201010800009a6100008d00120109a01201c4000035701000000ac10000890100014a61000088c21a0108b196010ba10200390100006fa21bffcec222008e6222004a4102001e4222000de012000353f0064b406a29481c6a00488012024|@2630,131071|76,5,@2615 152,5,@2100 168,5,@2104 196,5,@2105 248,5,@1604 264,5,@1608 280,4,@2627 392,5,@2100 408,5,@2104 436,5,@2105 488,5,@1604 504,5,@1608 520,4,@2627 604,5,@2629 664,4,@1604 2615:C2,1616|9e13e002f606201880a1001b8bd0201880a2200132800062c402200080a2600132800005d00260009010200181c3e00601000000c4037ff080a0a0012280002cde213ffcee037ff8ec05e000de213ffcd2213ff8fa022000fa213ff4fa05a000fa213ff0fa037ffcfa213fecd0036000da036004f40360009fc6a00088013fecd0213ffcd2012008113f0103900221947fff232588013ffc133f0103920261a47fff232101000000aa1000088c21a0108b196010ba10200390100006fa21bffcea222008e8012000e8222004e6012004e6222000da012008f40360009fc6a000010000001080002bd0012010d2213ff8da213ff488013ff480a2600132800004ee0260001080001fd0213ffcec012000fa026004fa213ffcfa05e000fa213ff8ea05bff488013ff880a5600132800004fa0560041080000ed2012004fa213ffcd2012000d0056000da0120084000015188013ffcea01200088012004f606201880a1001b8bd0201830bffff088012008f606201880a1001b8bd0201830bfffdfd0213ff8d0213ff488013ff4d0012010ee01201481c5e0068801201880a260013280005cee026000ee037fe880a5e0012280002cde213ffcec037ff8ea05a000de213ffcd0213ff8fa00a000fa213ff4fa056000fa213ff0fa037ffcfa213fecd0036000da036004f40360009fc6a00088013fecd0213ffcd2012008113f0103900221947fff22c888013ffc133f0103920261a47fff22c401000000a81000088c21a0108b196010ba10200390100006fa21bffce8222008e6012000e6222004e4012004e4222000da012008f40360009fc6a000010000001080002bd0012010d0213ff8da213ff488013ff480a2200132800004ec0220001080001fd0213ffcea012000fa022004fa213ffcfa05a000fa213ff8e8057fec88013ff880a5200132800004fa0520041080000ed0012004fa213ffcd2012000d0052000da012008400000f488013ffce801200088012004f606201880a1001b8bd0201830bffff088012008f606201880a1001b8bd0201830bfffdfd0213ff8d0213ff488013ff4d0012010ec01201481c5a00688012018de213ffcda213ff8d0213ff4d2213ff0c4213fecfa00a000fa213fe8fa00a004fa213fe4fa022004fa213fe0ee213fdcfa05e000fa213fd8fa05e004fa213fd4fa026004fa213fd0d2013fd8d0013fe87fff612f88013fd080a220013280001bb8222001ec012028d405a004d2012004d0012014ea05bff8da0560007ffff3d901000000d2012000d0012010da0120287fffff199e13e0028c21a00c8b19600cba102002a8100006fa21bffcd0252004e601201ce625200090100014e401202c81c4a00688012030811f200036800050ec012028ec012028ea05bfe880a560012280002ae805bfece805bff8e6052000fa04e000fa213ffcfa05bffcfa213ff8d005a000da05a004f40360009fc6a00088013ff8d0213ffcd2012020113f0103900221947fff223c88013ffc133f0103920261a47fff223801000000a41000088c21a0108b196010ba10200390100006fa21bffce4222008e2012000e2222004e0012004e0222000da012008f40360009fc6a00001000000d0012030de01203881c3e0068801203c80a5200132800004fa0520041080000ed2012020fa213ffcd2012018d0052000da0120284000007588013ffce801200088012004f606201880a1001b8bd0201830bffff0d0012010da0120287ffffec89e13e0028c21a00c8b19600cba102002a6100006fa21bffcd024e004e401201ce424e00090100013e201202c81c4600688012030ea05bff080a560012280002ae805bff4e805bff8e6052000fa04e000fa213ffcfa05bffcfa213ff8d005a000da05a004f40360009fc6a00088013ff8d0213ffcd2012010113f0103900221947fff21ef88013ffc133f0103920261a47fff21eb01000000a41000088c21a0108b196010ba10200390100006fa21bffce4222008e2012000e2222004e0012004e0222000da012008f40360009fc6a00001000000d001202cde01203881c3e0068801203c80a5200132800004fa0520041080000ed2012000fa213ffcd2012008d0052000da0120284000002888013ffce801200088012004f606201880a1001b8bd0201830bffff0d0012024da0120287ffffe7b9e13e0028c21a00c8b19600cba102002a6100006fa21bffcd024e004e401200ce424e00090100013e201202c81c4600688012030|@2626,131071|136,4,@2616 144,5,@496 152,4,@2617 160,5,@496 332,5,@2618 508,4,@2616 516,5,@496 524,4,@2617 532,5,@496 704,5,@2618 864,5,@1597 908,5,@2576 1068,4,@2616 1076,5,@496 1084,4,@2617 1092,5,@496 1212,5,@2618 1376,4,@2616 1384,5,@496 1392,4,@2617 1400,5,@496 1520,5,@2618 2616:S7|284669656c6420 2617:S9|206d697373696e6729 2618:C2,476|9e13e002f606201880a1001b8bd020188410000fae10000dac100008aa100009d205a004d005a0007fffb65601000000a8100002a6100008d205a004d005a0007fffb14101000000a4100008d205a004d005a0007ffff82f01000000a2100008d205a004d005a0007fffb66601000000d0213ffcd0213ff8e8213ff4ee213ff0ec213fecea213fe8d0213fe4a0013ff8e0213fe0961000119410001292100013113f000f900220cc7fff54fb88013fe08c21a00c8b19600cba10200290100006fa21bffcde012010de222000c2012014c22220047fff5539010000008c21a00c8b19600cba1020029a100006fa21bffcd0236004d8012000d8236000da213ffcd6012004d202e004d002e0007fffb4c388013ffc941000089010000a7fffb4e90100000080a2200122800027010000009010000a7fffb4f401000000d202200080a260013280001ad0022004d00220049a0120184000002901000000841000088c21a0108b196010ba10200390100006fa21bffcae102001ee222008c4222004ac102001ec2220007fff60d50100000092100008d0012008de012010353f0064b406a39481c6a0048801201c9a0120184000008201000000c401201081c0a0068801201c113f01049002230cf40620209fc6a0000100000090102001|@2625,131071|40,5,@2110 64,5,@2090 84,5,@2577 104,5,@2112 160,4,@375 168,5,@1515 212,5,@1517 268,5,@2100 284,5,@2104 308,5,@2105 340,5,@2619 392,5,@1604 412,4,@1608 432,5,@2621 452,4,@2623 2619:C2,332|9e13e002f606201880a1001b8bd0201880a220013280000dc40220008c21a00c8b19600cba10200290100006fa21bffc84102001c4222004c4037fe8c422200081c3e00601000000de213ffcda213ff8c4213ff4fa022004fa213ff0d2037fecd000a0007fff5fcc88013ff080a220013280000fb82220018c21a00c8b19600cba102002ae100006fa21bffcec012000ec25e004ea012004ea25e00090100017e801200c81c5200688012010811f200036800012ee012008d0012000da0120087fffffd19e13e0028c21a00c8b19600cba102002ae100006fa21bffcd025e004ec012004ec25e00090100017ea01200c81c56006880120108c21a00c8b19600cba102002ac100006fa21bffcea012000ea25a004e8012004e825a0008c21a00c8b19600cba102002a6100006fa21bffcec24e004e405ffe8e424e00090100013e201200c81c4600688012010|@2620,131071|100,5,@1597 2620:S78|545950455f5452454528292e747970654d617463682834296d61746368283329756e6966795265636f7264732835296164644669656c64546f47656e65726963283229616464456e747279283129 2621:C2,292|9e13e002f606201880a1001b8bd0201880a2200132800005c40220009010200181c3e00601000000de213ffcda213ff8fa00a000fa213ff4fa022004fa213ff0d2037fecd0013ff47fff5f6388013ff080a2200132800006b822200190102001ee01200c81c5e00688012010811f200036800007ee012008d0012000da012008de01200c10bfffe088012010ec05fff4ea05bff8e8056000fa052000fa213ffcfa05bffcfa213ff8d005a000da05a004f40360009fc6a00088013ff8d0213ffcd201200c113f0103900221947fff208488013ffc133f0103920261a47fff208001000000a61000088c21a0108b196010ba10200390100006fa21bffce6222008e4012000e4222004e2012004e2222000da012008de012018f403600081c6a0048801201c|@2622,131071|72,5,@1597 196,4,@2616 204,5,@496 212,4,@2617 220,5,@496 2622:S82|545950455f5452454528292e747970654d617463682834296d61746368283329756e6966795265636f7264732835296164644669656c64546f47656e65726963283229636865636b456e7472696573283129 2623:O3|@24,@397,@2624 2624:S40|6164644669656c64546f47656e657269633a204e6f742061206c6162656c6c6564207265636f7264 2625:S67|545950455f5452454528292e747970654d617463682834296d61746368283329756e6966795265636f7264732835296164644669656c64546f47656e65726963283229 2626:S63|545950455f5452454528292e747970654d617463682834296d61746368283329756e6966795265636f7264732835296d617463684c6162656c6c6564283229 2627:O3|@24,@397,@2628 2628:S36|667265657a6547656e657269633a204e6f742061206c6162656c6c6564207265636f7264 2629:C2,112|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffcd0037fec81c3e00601000000da213ff8fa022000fa213ff4d00220047ffffff288013ff48c21a00c8b19600cba1020029e100006fa21bffcd023e004da012000da23e0009010000fde01200881c3e0068801200c|@1966,161| 2630:S47|545950455f5452454528292e747970654d617463682834296d61746368283329756e6966795265636f726473283529 2631:S20|28496e636f6d70617469626c6520747970657329 2632:C2,264|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffc9010200181c3e00601000000da213ff8fa022000fa213ff4fa022004fa213ff0d0037fdc88013ff0808a20013280001984102001ee022000ec022004d00120047fff5fba01000000aa100008901000177fff5fb60100000092100008901000157fffe3b80100000080a220012280000590100016841020051080000780a0a001f606201880a1001b8bd0201830bfffe780a0a00122800012d0012000d0012000da0120087fffffd19e13e0028c21a00c8b19600cba10200284100006fa21bffcd020a004ee012004ee20a00090100002ec01200c81c5a00688012010da012008de01200c10bfffc188012010|@2633,123123|92,5,@1613 108,5,@1613 124,5,@2452 2633:S44|545950455f5452454528292e747970654d617463682834296d61746368283329696e74657273656374283229 2634:S27|28496e636f6d70617469626c65206f7665726c6f6164696e677329 2635:C2,732|9e13e002f606201880a1001b8bd02018808a200132800079d0213ffcc402200480a0a0013280003cd0213ffcae10000fec022000901000167fffb4fc01000000d0213ffcd0213ff884100008901000167fff5f5e88013ff8aa1000027fff5f700100000080a22001228000109e0120008c21a0088b1960083b100000ba0760019e100006fa21bffcec23e0009a01200090103ffdd023600084012000de20a004108000078c21a00c9a102001da23e00090012000ec2220048c21a00c8b19600cba10200284100006fa21bffcec012000ec20a000de012004de20a0048c21a0108b196010ba10200390100006fa21bffcc4222008ea2220049a102001da2220009e100017353f0065b406a0fc81c6a00488012008d0213ff8de213ff4d0213ff0ae102001ee213fecac013ff8ec213fe89610200194102001130000279202603d113f000f900220cc7fff52a388013fe88c21a00c8b19600cba10200290100006fa21bffcea012008ea222000e801200ce82220047fff52e101000000a6100008d00120007ffffac801000000a4100008901000137fff5ebe0100000080a220012280000801000000901000137fff5ec901000000a21000081080000992100012113f003890022020f40620209fc6a00001000000a210200192100012901000117fff5ecf0100000090100013e001200481c4200688012010d0213ff8de213ff4d0213ff084102001c4213fecae013ff8ee213fe89610200194102001130000279202603d113f000f900220cc7fff526a88013fe88c21a00c8b19600cba10200290100006fa21bffcec012008ec222000ea01200cea2220047fff52a801000000a8100008d00120007ffffa8f01000000a6100008901000147fff5e850100000080a220012280000801000000901000147fff5e9001000000a41000081080000992100013113f003890022020f40620209fc6a00001000000a410200192100013901000127fff5e960100000090100014e201200481c4600688012010|@2636,131071|56,5,@2128 80,5,@1613 92,5,@1615 260,4,@1617 312,4,9999 320,4,@375 328,5,@1515 372,5,@1517 388,5,@2607 404,5,@1606 428,5,@1607 448,4,@1110 480,5,@1608 540,4,9999 548,4,@375 556,5,@1515 600,5,@1517 616,5,@2607 632,5,@1606 656,5,@1607 676,4,@1110 708,5,@1608 2636:S28|545950455f5452454528292e6d6b4f7665726c6f6164536574283129 2637:C2,860|9e13e002f606201880a1001b8bd02018ae10000fac10000daa100008d2056004d00560007ffff5440100000080a22001228000bcee213ffcd005bfe87fffb3f30100000080a22001228000a7ee213ffc92100017a8100016d0053fe87fffb3fc01000000e6022000d00220087fffb40d0100000084100008901000027fff5e8c01000000ae1000027fff5e9e0100000080a2200122800004a41000151080000da2100017a2100017901000117fffe028010000007fffb1f60100000080a2200132800006d2213ffc1080006790100011a4100015d2213ffce8213ff8e4213ff4d0053fe8da053ff8f40360009fc6a00088013ff4ac100008901000167fffb3c30100000080a220012280004aea012004901000167fffb3ce01000000ea022000d00220087fffb3df01000000a8100008901000147fff5e5e010000007fff5e710100000080a2200122800004a61000151080000ca6100015901000147fffdffc010000007fffb1ca0100000080a2200132800005e601200410800010e4012004e6012004d004ffe8da04fff8f40360009fc6a0000100000092100008d0012000da012004de012008353f00fbb406a33081c6a0048801200c901000147fffdfe401000000a2100008901000147fffe09f01000000921000137fffe31c01000000fa04bfecfa213ffc9410200592100008901000117fffe36288013ffc7fffb0e801000000153f00f49402a07492100008d0012000e0012008da042000de01200c353f00f6b406a21881c6a00488012010d0057fe8da057ff8f40360009fc6a0000100000092100008d0012000da012004de012008353f00fbb406a33081c6a0048801200c7fffdfba01000000a0100008901000117fffe075010000008210000998100014921000137fffe2f001000000c2213ffcd8213ff8fa033fecfa213ff49410200592100008901000107fffe33488013ff47fffb0ba01000000d6012004d402fff892100008d0012000da02e000de012008353f00f6b406a21881c6a0048801200cec213ff8ea213ff4d005bfe8da05bff8f40360009fc6a00088013ff492100008d0012000da012004de012008353f00fbb406a33081c6a0048801200cec213ff8ea213ff4d005bfe8da05bff8f40360009fc6a00088013ff492100008d0012000da012004de012008353f00fbb406a33081c6a0048801200c|@2638,131071|36,5,@2577 60,5,@2124 92,5,@2125 108,5,@2126 124,5,@1613 136,5,@1615 172,5,@2429 180,5,@2102 252,5,@2124 276,5,@2125 292,5,@2126 308,5,@1613 316,5,@1615 348,5,@2429 356,5,@2102 424,4,@2579 444,5,@2429 460,5,@2438 472,5,@2462 500,5,@2464 508,5,@2099 516,4,@2554 544,4,@2576 596,4,@2579 612,5,@2429 628,5,@2438 648,5,@2462 684,5,@2464 692,5,@2099 724,4,@2576 784,4,@2579 844,4,@2579 2638:S34|545950455f5452454528292e747970654d617463682834296d617463682833292f34 2639:C2,820|9e13e002f606201880a1001b8bd02018ae10000fac10000dd2022004d00220007ffff45c0100000080a2200122800099ee213ffcd005bfec7fffb30b0100000080a220012280006aee213ffc92100017aa100016d0057fec7fffb31401000000e8022000d00220087fffb3250100000084100008901000027fff5da401000000ae1000027fff5db60100000080a2200122800004a61000151080000da4100017a4100017901000127fffdf40010000007fffb10e0100000080a2200132800006d2213ffc1080002d90100012a6100015d2213ffce6213ff8d004ffe8da04fff8f40360009fc6a00088013ff8ac100008901000167fff5d360100000080a2200122800014ea012000901000167fff5d4101000000ea012000d0213ffcd0057fecda057ff8f40360009fc6a00088013ffc92100008d0012000da012004de012008353f00fbb406a33081c6a0048801200c153f00f49402a07492100016d0057fecda056000de012004353f00f6b406a21881c6a004880120087fffdf0c01000000a2100008901000127fffdfc701000000a010000982100013921000147fffe24201000000e0213ffcc2213ff89410200592100008901000117fffe28888013ff87fffb00e01000000da012000d4037ff8d2037fe8da036000de012004353f00f6b406a21881c6a00488012008ec213ff8d005bfe8da05bff8f40360009fc6a00088013ff8aa100008901000157fff5cf00100000080a2200122800014e8012000901000157fff5cfb01000000e8012000d0213ffcd0053fecda053ff8f40360009fc6a00088013ffc92100008d0012000da012004de012008353f00fbb406a33081c6a0048801200c153f00f49402a07492100015d0053fecda052000de012004353f00f6b406a21881c6a00488012008ec213ff8d005bfe8da05bff8f40360009fc6a00088013ff8aa100008901000157fff5cc70100000080a2200122800014e8012000901000157fff5cd201000000e8012000d0213ffcd0053fecda053ff8f40360009fc6a00088013ffc92100008d0012000da012004de012008353f00fbb406a33081c6a0048801200c153f00f49402a07492100015d0053fecda052000de012004353f00f6b406a21881c6a00488012008|@2640,131071|32,5,@2577 56,5,@2124 88,5,@2125 104,5,@2126 120,5,@1613 132,5,@1615 168,5,@2429 176,5,@2102 244,5,@1606 268,5,@1607 320,4,@2579 336,4,@2554 360,4,@2576 376,5,@2429 392,5,@2438 412,5,@2462 440,5,@2464 448,5,@2099 476,4,@2576 524,5,@1606 548,5,@1607 600,4,@2579 616,4,@2554 640,4,@2576 688,5,@1606 712,5,@1607 764,4,@2579 780,4,@2554 804,4,@2576 2640:S34|545950455f5452454528292e747970654d617463682834296d617463682833292f35 2641:C2,356|9e13e002f606201880a1001b8bd0201880a2600132800023808a200180a2200132800005c40360009010200181c3e00601000000de213ffcfa00a000fa213ff8fa037ff4fa213ff4d0037ffcda037ff8f40360009fc6a00088013ff4ae1000088c21a0108b196010ba10200390100006fa21bffc2d3f0108ac05a234ec222008ee222004ea012000ea222000da012004de012008f403600081c6a0048801200c32800016c4036000de213ffcda213ff8fa026004fa213ff4fa022004fa213ff0153f00f49402a074c4026000d202200090100002da0360007fffee2388013ff0d2012004d0012000da012008de01200c10bfffc588012010de213ffcfa00a000fa213ff8fa037ff4fa213ff4d0037ffcda037ff8f40360009fc6a00088013ff4ae1000088c21a0108b196010ba10200390100006fa21bffc2d3f0108ac05a234ec222008ee222004ea012000ea222000da012004de012008f403600081c6a0048801200c|@2643,131071|116,4,@2642 192,4,@2554 216,5,@2576 312,4,@2642 2642:S32|28446966666572656e74206e756d62657273206f6620617267756d656e747329 2643:S45|545950455f5452454528292e747970654d617463682834296d617463682833296d617463684c69737473283229 2644:S29|28446966666572656e74207479706520636f6e7374727563746f727329 2645:S35|284f7665726c6f6164696e6720646f6573206e6f7420696e636c756465207479706529 2646:C2,632|9e13e002f606201880a1001b8bd02018aa10000fa810000da6100008901000097fffb1cb0100000092100008901000097fff5c4a010000007fff5c5d0100000080a2200122800004a41000151080002bea213ffc901000097fffdde8010000007fffafb60100000080a220012280000590100009aa10001210800020ea213ffc7fffddde0100000084100008901000097fffde9901000000a2100014a0100002921000137fffe11401000000e4213ffce2213ff8fa047fecfa213ff49410200592100008901000107fffe15888013ff4de012004d403fff892100008d0012000da03e000de012008353f00f6b406a21881c6a0048801200ce8213ff8d0053fe8da053ff8f40360009fc6a00088013ff8a2100008901000117fffb1670100000080a220012280004be0012000901000117fffb17201000000e0022000d00220087fffb1830100000082100008901000017fff5c02010000007fff5c150100000080a22001228000069010000190102001da01200481c36006880120087fffdd9f010000007fffaf6d0100000080a220013280001fda012000da012000d8037fec901000017fffdd950100000096100008901000017fffde5001000000921000107fffe0cd01000000d8213ffc94102005921000089010000b7fffe11488013ffc153f00f49402a07492100008d0012000c4012004da00a000de012008353f00f6b406a21881c6a0048801200cd80360008c21a0108b196010ba10200390100006fa21bffc173f01059602e0e0d6222008d4037fecd4222004e2222000da032000de012004f403600081c6a00488012008153f00f49402a07492100011d0043fecda042000de012004353f00f6b406a21881c6a00488012008|@2647,131071|32,5,@2126 48,5,@1613 56,5,@1615 88,5,@2429 96,5,@2102 128,5,@2429 144,5,@2438 164,5,@2462 200,5,@2464 232,4,@2576 280,5,@2124 304,5,@2125 320,5,@2126 336,5,@1613 344,5,@1615 380,5,@2429 388,5,@2102 420,5,@2429 436,5,@2438 448,5,@2462 472,5,@2464 480,4,@2554 508,4,@2576 548,4,@2631 592,4,@2554 616,4,@2576 2647:S35|545950455f5452454528292e747970654d617463682834296d617463682833292f3130 2648:S32|545950455f5452454528292e747970654d617463682834296d61746368283329 2649:S24|545950455f5452454528292e747970654d61746368283429 2650:S25|545950455f5452454528292e6d617463685479706573283629 2651:S68|535452554354555245535f28292e6d61746368536967732836296d6174636856616c73283229636865636b5479706573416e64537472756374757265732d283329283129 2652:C2,736|9e13e002f606201880a1001b8bd020188410000fae100008901000177fffb10901000000ac100008901000097fffb10501000000ec213ffcd6213ff8aa100008901000177fffdd3288013ff8a8100008901000097fffdd2e01000000b8222001ba252001811f401c22800005901000099010200181c0a006880120147fffddc001000000d0213ffcd0213ff8a8100008901000177fff5b5388013ff8a61000027fff5b650100000080a22001228000109e0120008c21a0088b1960083b100000ba0760019e100006fa21bffcee23e0009a01200090103ffdd023600084012000de20a004108000078c21a00c9a102001da23e00090012000ee2220048c21a00c8b19600cba10200284100006fa21bffcde012000de20a000da012004da20a0048c21a0108b196010ba10200390100006fa21bffcc4222008ec222004e8222000981000177fff5b5601000000d0213ffcd0213ff884100008901000097fff5b2188013ff8ae1000027fff5b330100000080a2200122800010ac0120008c21a0088b1960083b100000ba076001ac100006fa21bffcd225a0009e0120009a103ffdda23e00090012000ec222004108000078c21a00c9e102001de25a0009a012000d22360048c21a00c8b19600cba10200290100006fa21bffcc4012000c4222000ec012004ec2220049e1000088c21a0108b196010ba10200390100006fa21bffcde222008ea222004e8222000a81000177fff5b23010000008c21a0148b196014ba1020049e100006fa21bffc1b3f010a9a03615cda23e000c4012020c423e00cea23e008ee01201cee23e004e6213ffcd8213ff8d2213ff4ec012018ec213ff0de213fec9610000292100008901000147fffe93c88013fecd00120047fffe40e01000000a8100008d00120007fffe40a0100000080a220013280000480a52001108000069010200122800004901020011080000592100008e601200881c4e00688012030901000149a0120204000004d01000000e601200881c4e00688012030|@2662,131071|28,5,@2128 44,5,@2128 68,5,@2432 84,5,@2432 124,5,@2438 148,5,@1613 160,5,@1615 324,5,@1617 348,5,@1613 360,5,@1615 528,5,@1617 556,4,@2653 624,5,@2547 636,5,@2500 652,5,@2500 716,5,@2654 2653:C2,232|9e13e002f606201880a1001b8bd02018c403600cde213ffcda213ff8d0213ff4133f00d3920262f4d000a0241b3f00389a0360407fff2db288013ff4ee012000ec012004d0213ffcfa05e00cfa213ff8d205a008113f00f3900221707fff1aa588013ff8133f00f3920261887fff1aa101000000da012000f40360009fc6a00001000000ea012008113f00c090022030da056000f40360009fc6a00001000000e801200c8c21a00c8b19600cba102002a6100006fa21bffca4102001e424e004e2052004e224e000d4012008d201200490100013de012010353f00adb406a19481c6a00488012014|@2546,131071|32,4,@2272 44,4,@1112 52,5,@1114 84,4,@2544 92,5,@496 100,4,@2545 108,5,@496 136,4,@2170 216,4,@2067 2654:C2,612|9e13e002f606201880a1001b8bd0201880a260013280002180a2200180a2200132800005de213ffc9010200181c3e00601000000fa03600cfa213ff8fa036008fa213ff4fa036004fa213ff0d2036000113f010b900220e07fff1a6588013ff0921020a57fff1a6201000000c401200cd021200cd6012000d401200492102005d00120089e100002353f00d2b406a35081c6a0048801200c3280001c8410000fde213ffcfa03600cfa213ff8fa036008fa213ff4fa036004fa213ff0d2036000113f010b900221107fff1a4988013ff0921020a57fff1a4601000000c401200cd021200cd6012000d401200492102005d00120089e100002353f00d2b406a35081c6a0048801200cae10000dec022000ea022004901000167fffc06701000000a8100008d00260007fffc06301000000c4213ffcee213ff8fa026000fa213ff4fa026004fa213ff0ec213fecea213fe8e8213fe4d0213fe092100008901000141b0000839a0360d8f40360009fc6a00088013fe080a2200132800020d001200ce6012018fa04e00cfa213ffcfa04e008fa213ff8fa04e004fa213ff4d2012000113f010b900221407fff1a1188013ff4133f010b920261607fff1a0d01000000d20120107fff1a0a01000000e4012028d0212028d6012000d401200492102005d00120089e100012353f00d2b406a35081c6a004880120284000004701000000a6100008d00120144000004301000000e4012018a21000088c21a0108b196010ba10200390100006fa21bffce0012004e0222008e2222004e6222000da04bffcf40360009fc6a00001000000d2012010d0012008da012018de01201c10bfff6a88012020|@2661,131071|80,4,@2655 88,5,@496 100,5,@496 136,4,@2264 192,4,@2656 200,5,@496 212,5,@496 248,4,@2264 280,5,@2194 296,5,@2194 352,4,I24 416,4,@2657 424,5,@496 432,4,@2658 440,5,@496 452,5,@496 488,4,@2264 504,5,@2659 520,5,@2659 2655:S37|546f6f206d616e7920636f6e7374727563746f727320746f206d6174636820747970652028 2656:S39|4e6f7420656e6f75676820636f6e7374727563746f727320746f206d6174636820747970652028 2657:S24|4c6f6f6b696e6720666f7220636f6e7374727563746f7220 2658:S11|2062757420666f756e6420 2659:C2,16|9e13e002d002200c81c3e00601000000|@2660,129| 2660:S26|5354525543545f56414c5328292e76616c547970654f66283129 2661:S48|535452554354555245535f28292e636865636b54797065436f6e73747273283729636865636b436f6e73747273283229 2662:S33|535452554354555245535f28292e636865636b54797065436f6e73747273283729 2663:S65|535452554354555245535f28292e6d61746368536967732836296d6174636856616c73283229636865636b5479706573416e64537472756374757265732d283329 2664:C2,44|9e13e002f606201880a1001b8bd02018d4022008d2022004d0022000da036004f403600081c6a00401000000|@2665,131071| 2665:S65|535452554354555245535f28292e6d61746368536967732836296d6174636856616c73283229636865636b5479706573416e64537472756374757265732d283129 2666:C2,860|9e13e002f606201880a1001b8bd020189410000fac10000daa100008901000091b3f00df9a03619c7fffd39e0100000080a22001228000c890102001901000091b3f00df9a0361907fffd3c001000000de022004808be00132800005921000089010200181c2a00601000000d005a0147fffd91801000000d4213ffcec213ff8ea213ff4d2213ff094100015133f00d9920263587fffcea588013ff0808a200132800093d0012008c4012000ee00a00480a5e00132800003ac102001ac102005ea022000e805600480a5200132800003a6102001a610200580a4e0013280002080a4e00180a5a0012280001d80a4e001e6012008fa04e00cfa213ffcfa04e008fa213ff8fa04e004fa213ff4d2012004113f010c900222807fff190b88013ff4133f010c920262907fff190701000000e4012018d0212018d6012000d401200492102005d00120089e100012353f00d2b406a35081c6a004880120182280003fd002200080a5a0013280003cd0022000d00220007fffff3e01000000a6100008901000134000008f0100000080a22001228000068c21a00c253f010ca404a32c1080000ed00120008b19600cba10200290100006fa21bffc253f010ca404a32ce4222004e62220007fff5a8401000000a4100008d00120007fffff2501000000e20120088c21a0148b196014ba102004a0100006fa21bffc1f3f010c9e03e34cde242000c204600cc224200cda012004da242008d8046008d8242004d6046004d401200cd621200ce0212008961000019210000ad40460108410000992100008901000129e100002353f00f3b406a1c081c6a004880120087fffff0501000000a6100008901000027fffff0101000000e40120088c21a0148b196014ba102004a2100006fa21bffc213f010da0042050e0246000de04a00cde24600cc2012004c2246008da04a008da246004d804a004d601200cd821200ce22120089410000b9610000f9210000ad404a010ac10000992100008901000139e100016353f00f3b406a1c081c6a00488012008fa02200cfa213ffcfa022008fa213ff8fa022004fa213ff4d2012004113f010c900222807fff188d88013ff4133f00ee920261947fff188901000000c4012018d0212018d6012000d401200492102005d00120089e100002353f00d2b406a35081c6a0048801201881c2a00601000000|@2675,131071|32,4,@2377 40,5,@2378 64,4,@2376 72,5,@2381 112,5,@2425 140,4,@2308 148,5,@2311 272,4,@2667 280,5,@496 288,4,@2668 296,5,@496 332,4,@2264 372,5,@2659 388,5,@2669 408,4,@2671 440,4,@2671 456,5,@1630 472,5,@2659 504,4,@2673 584,4,@2547 600,5,@2659 616,5,@2659 648,4,@2674 732,4,@2547 776,4,@2667 784,5,@496 792,4,@2503 800,5,@496 836,4,@2264 2667:S7|56616c75652028 2668:S46|29206d75737420626520616e20657863657074696f6e20746f206d6174636820746865207369676e61747572652e 2669:C2,40|9e13e002c402200080a0bffd32800005901020019010200581c3e0060100000081c3e00601000000|@2670,65665| 2670:S24|5354525543545f56414c5328292e6973456d707479283129 2671:O4|-3,0,@679,@2672 2672:O2|0,@681 2673:C2,232|9e13e002f606201880a1001b8bd02018c403600cde213ffcda213ff8d0213ff4133f00d3920262f4d000a0241b3f00389a0360407fff2b3688013ff4ee012000ec012004d0213ffcfa05e00cfa213ff8d205a008113f00f3900221707fff182988013ff8133f00f3920261887fff182501000000da012000f40360009fc6a00001000000ea012008113f00c090022030da056000f40360009fc6a00001000000e801200c8c21a00c8b19600cba102002a6100006fa21bffca4102001e424e004e2052004e224e000d4012008d201200490100013de012010353f00adb406a19481c6a00488012014|@2546,131071|32,4,@2272 44,4,@1112 52,5,@1114 84,4,@2544 92,5,@496 100,4,@2545 108,5,@496 136,4,@2170 216,4,@2067 2674:C2,232|9e13e002f606201880a1001b8bd02018c403600cde213ffcda213ff8d0213ff4133f00d3920262f4d000a0241b3f00389a0360407fff2af588013ff4ee012000ec012004d0213ffcfa05e00cfa213ff8d205a008113f00f3900221707fff17e888013ff8133f00f3920261887fff17e401000000da012000f40360009fc6a00001000000ea012008113f00c090022030da056000f40360009fc6a00001000000e801200c8c21a00c8b19600cba102002a6100006fa21bffca4102001e424e004e2052004e224e000d4012008d201200490100013de012010353f00adb406a19481c6a00488012014|@2546,131071|32,4,@2272 44,4,@1112 52,5,@1114 84,4,@2544 92,5,@496 100,4,@2545 108,5,@496 136,4,@2170 216,4,@2067 2675:S66|535452554354555245535f28292e6d61746368536967732836296d6174636856616c73283229636865636b56616c756573416e64457863657074696f6e732d283329 2676:C2,44|9e13e002f606201880a1001b8bd02018d4022008d2022004d0022000da036004f403600081c6a00401000000|@2677,131071| 2677:S66|535452554354555245535f28292e6d61746368536967732836296d6174636856616c73283229636865636b56616c756573416e64457863657074696f6e732d283129 2678:S38|535452554354555245535f28292e6d61746368536967732836296d6174636856616c73283229 2679:S26|535452554354555245535f28292e6d6174636853696773283629 2680:O1|@2414 2681:O2|@2683,@2682 2682:O2|@2693,@2681 2683:C2,484|9e13e002f606201880a1001b8bd020188410000fae10000dac100008901000164000007801000000c4213ffcee213ff8ec213ff4d2213ff0d4213fecd6213fe8d0213fe4901020297fff9bf088013fe48c21a0148b196014ba102004aa100006fa21bffca8102001e825600ca6102001e6256008e4012000e4256004d0256000a2100008901000157fffd72a010000008c21a00c8b19600cba102002a0100006fa21bffc1f3f010e9e03e0f4de242000d02420048c21a00c8b19600cba10200282100006fa21bffc1b3f010e9a036170da206000d02060048c21a00c8b19600cba10200298100006fa21bffc173f010e9602e1c0d6232000d02320048c21a0108b196010ba10200394100006fa21bffcc222a008e022a004d822a000d2012014e2213ffcea213ff8d0012008d0213ff4c4012004c4213ff0ee01201cee213fecd601200cec026004d2012010901020019a100016f40360009fc6a00088013fecd00120184000002701000000aa100008d00120007fffd43c01000000a8100008d00120007fffd44c01000000ea213ffce8213ff8d0213ff4d00120044000007388013ff48c21a0148b196014ba102004a6100006fa21bffce4012004e424e00ce2012000e224e008e0012008e024e004d024e00090100013de01202c81c3e00688012034|@2692,131071|32,5,@2684 72,5,@1992 136,5,@2425 164,4,@2686 200,4,@2688 236,4,@2689 356,5,@2684 372,5,@2408 388,5,@2410 412,5,@2690 2684:C2,16|9e13e002d002200481c3e00601000000|@2685,129| 2685:S24|5354525543545f56414c5328292e7369674e616d65283129 2686:C2,52|9e13e002f606201880a1001b8bd02018d6022004d4022000133f00df92026068d0036004353f00dbb406a12881c6a00401000000|@2687,131071|24,4,@2369 36,4,@2320 2687:S36|535452554354555245535f28292e636f70795369672835296c617374416464722d283129 2688:C2,52|9e13e002f606201880a1001b8bd02018d6022004d4022000133f00de92026218d0036004353f00dbb406a12881c6a00401000000|@2687,131071|24,4,@2355 36,4,@2320 2689:C2,52|9e13e002f606201880a1001b8bd02018d6022004d4022000133f00d992026358d0036004353f00dbb406a12881c6a00401000000|@2687,131071|24,4,@2308 36,4,@2320 2690:C2,344|9e13e002f606201880a1001b8bd02018c402200080a0bffd3280004e01000000ee022004ec05e000ea02200ce8056000e605200080a4e00132800006de213ffc25000083a404a3f810800033de213ffcec213ff8e8213ff4e6213ff0c6213fec233f010ea20462bae2213fe8a0102001e0213fe486013fe49410200192102001901000131b0000829a036338f40360009fc6a00088013fe482100008c601200810800009c2213ffc113f0007900223e4f40620209fc6a0000100000082102001c2213ffcda01200cda213ff8961020019410000192102005d00120101b0000889a036238f40360009fc6a00088013ff8d00120001b0000839a0363b8f40360009fc6a00001000000e40120001080000488012018ec213ff888013ff88c21a0108b196010ba10200390100006fa21bffce4222008e2012000e2222004a0102001e0222000de01200481c3e0068801200881c3e00601000000|@2691,131071|64,4,I49 96,4,$2690+170 132,4,I11 168,4,@251 220,4,I195 244,4,I47 2691:S23|486173685461626c652e68617368467265657a65283129 2692:S24|535452554354555245535f28292e636f7079536967283529 2693:C2,304|9e13e002f606201880a1001b8bd020188c21a0188b196018ba10200584100006fa21bffc2f3f010fae05e110ee20a000d620a010ee012008ee20a00cec012004ec20a008ea012000ea20a004de213ffcda213ff8d0213ff4d2213ff0d4213fecd6213fe8c4213fe4ea213fe09610001694100017d2013fe8d0013ff04000007288013fe0d001200c7fffd5e301000000e80120148c21a0288b196028ba102009a6100006fa21bffc253f0110a404a1cce424e000e2012000e224e020e0012004e024e01cde012024de24e018c2012020c224e014da01201cda24e010d8052004d824e00cd6012010d624e008d4012008d424e0048c21a00c8b19600cba10200292100006fa21bffc053f01168400a1e4c4226000e62260049410000bde012018353f00eeb406a27881c6a00488012028|@2746,131071|36,4,@2694 124,5,@2699 136,5,@2425 168,4,@2709 264,4,@2744 288,4,@2508 2694:C2,64|9e13e002f606201880a1001b8bd02018053f010f8400a16cc4213ffcee036004ee213ff8d6036008d403600cd2036010353f00f4b406a0cc81c6a00488013ff8|@2698,131071|16,4,@2695 48,4,@2558 2695:O1|@2696 2696:C2,12|9e13e00281c3e00601000000|@2697,129| 2697:S46|535452554354555245535f28292e66756c6c436f7079536967283729636f707954797065436f6e73283129283129 2698:S43|535452554354555245535f28292e66756c6c436f7079536967283729636f707954797065436f6e73283129 2699:C2,152|9e13e002f606201880a1001b8bd020188410000f7fffd56f010000008c21a01c8b19601cba1020069e100006fa21bffc1b3f010f9a0362bcda23e000d223e014d423e010d623e00cd6012000d623e008153f01109402a11cd423e0048c21a00c8b19600cba10200292100006fa21bffc1b3f01109a036124da226000de226004941020019e100002353f00eeb406a27881c6a00488012004|@2708,131071|20,5,@2425 48,4,@2700 80,4,@2705 112,4,@2706 136,4,@2508 2700:C2,420|9e13e002f606201880a1001b8bd020189410000fac10000daa100008901000091b3f00de9a0362347fffced70100000080a220012280003f90100009901000091b3f00de9a0362287fffcef90100000080a2200132800018e8022008d4213ffcec213ff8ea213ff4901020297fff99e288013ff48c21a0148b196014ba102004a6100006fa21bffca4102001e424e00ca2102001e224e00821000083a00423d8e024e004d024e000a810001310800007e6012004d4213ffcec213ff8ea213ff488013ff4e6012004e8213ffcfa04e014fa213ff8fa04e010fa213ff4fa04e00cfa213ff0d2012000d004e0087fff152988013ff0921020b97fff152601000000e4012014e2012018d0212018d6012000d4012004d2012008d001200cda04a0049e100011f403600081c6a004880120181b3f00df9a0360847fffcf270100000080a220012280001690102001901000091b3f00df9a0360787fffcf4901000000d4213ffc293f0110a805207ce8213ff8e605a008e6213ff4d605a00cd405a010d205a0147fffe42388013ff490102001e401200081c4a0068801200481c2a00601000000|@2704,131071|32,4,@2357 40,5,@2358 64,4,@2356 72,5,@2361 108,5,@1992 152,4,I48 236,5,@496 248,5,@496 304,4,@2371 312,5,@2372 336,4,@2370 344,5,@2375 356,4,@2701 388,5,@2558 2701:O1|@2702 2702:C2,12|9e13e00281c3e00601000000|@2703,129| 2703:S55|535452554354555245535f28292e636f707954797065436f6e7374727563746f7273283529636f707954797065436f6e73283129283129 2704:S40|535452554354555245535f28292e636f707954797065436f6e7374727563746f7273283529283329 2705:O1|@2699 2706:C2,44|9e13e002f606201880a1001b8bd02018d4022008d2022004d0022000da036004f403600081c6a00401000000|@2707,131071| 2707:S40|535452554354555245535f28292e636f707954797065436f6e7374727563746f7273283529283129 2708:S37|535452554354555245535f28292e636f707954797065436f6e7374727563746f7273283529 2709:C2,1828|9e13e002f606201880a1001b8bd02018ac10000faa10000da8100008901000091b3f00de9a0362347fffce130100000080a220012280007c90100009901000091b3f00de9a0362287fffce350100000080a220013280001ae6022008ec213ffcea213ff8e8213ff4d4213ff0d0213fec901020297fff991c88013fec8c21a0148b196014ba102004a4100006fa21bffca2102001e224a00ca0102001e024a0081f0000839e03e3d8de24a004d024a000a610001210800009e401200cec213ffcea213ff8e8213ff4d4213ff0d0213fec88013fece401200ce6213ffcfa04a01cfa213ff8fa04a018fa213ff4fa04a014fa213ff0d2012008d004a0107fff146188013ff0921020b97fff145e01000000e201201cd0213ffcd6012000d4012004d2012008d001200cda04600cf40360009fc6a00088013ffca0100008d001201040000180010000004000019d0100000080a220012280000dde012014d00120104000017801000000400001af01000000c201201cda006008b8236001ba222001b917401c9e0720018210000fd0012010400001c3010000009410000192100010400001d901000000da01201cd8036004961000088c21a00c8b19600cba10200290100006fa21bffcd6222004d4012018d4222000c2213ffcda032008f40360009fc6a00088013ffcd2012000b8226001b917200490072001c4012018ba20a001811f401c24800006ee01202490100002ee01202481c5e0068801202881c5e006880120281b3f00df9a0360847fffce260100000080a22001228000a1901000098c21a0088b1960083b100000ba076001a6100006fa21bffcd424e000901000091b3f00df9a0360787fffce4101000000ec213ffcea213ff8e8213ff4d4213ff0e6213fecd0213fe8253f010fa404a16ce4213fe4e2056010e2213fe0d6056014d4056018d205601c7fffe31688013fe0e001200080a20010328000039e1020019e102005821be0048c21a0088b1960083b100000ba0760019a100006fa21bffcc2236000981000089610000d901000107fffd64801000000941000089010000c7fffd644010000009210000a400001a4010000008c21a00c8b19600cba10200292100006fa21bffc053f01138400a060c4226000d0226004901000107fffdd0301000000d6213ffcd2213ff8d8213ff49a0120144000021a88013ff4ee012008ec05e00080a5a00122800038ea01201ca8100008d00120007fffdcf40100000080a220012280001ce6012000d00120007fffa95101000000a4100008d00120007fffd61c01000000a2100008d00120007fff53b101000000a0100008d00120007fffd59801000000d0213ffc9e102001de213ff896100010153f000f9402a0cc92100011901000127fffe39a88013ff8a6100008a41000139210001490100012400004a201000000e201201ce00460048c21a00c8b19600cba10200290100006fa21bffce4222004de012018de222000da042004f40360009fc6a0000100000010800011e2012010e80560048c21a00c8b19600cba10200290100006fa21bffce6012000e6222004e4012018e4222000da052004f40360009fc6a00001000000e2012010e0046000de012014b8242001ba23e001811f401c24800006901000109010000fc201202081c0600688012024c201202081c06006880120241b3f00df9a03619c7fffcdc60100000080a22001228000939010000a901000091b3f00df9a0361907fffcde801000000e6022008e404e00080a4a00132800056ec213ffcec213ffcea213ff8d4213ff4d0213ff0fa04e004fa213fecfa022000fa213fe8fa022004fa213fe4fa02200cfa213fe0d4056020133f011692026158d0013fe07fffda3588013fe0e2012018e001200cde046008b823e001ba242001b917401c82072001ba242001811f401c22800004da012000108000078c21a00c80a2000d328000048c21a00c10800015da0120108b19600cba10200298100006fa21bffcc223200496102001d62320008c21a0148b196014ba10200494100006fa21bffcd022a00cd822a008d2012004d222a004d0012008d022a0009a10000ad80460048c21a00c8b19600cba10200290100006fa21bffcda222004d6012008d6222000c2213ffcda032000f40360009fc6a00088013ffcd4012000b822a001b917200492072001d0012018ba222001811f401c2480000590100009c401202081c0a00688012024c401202081c0a00688012024ea213ff8d4213ff4d0213ff0e6213fecfa022000fa213fe8fa022004fa213fe4fa02200cfa213fe0d4056020133f011692026158d0013fe07fffd9e388013fe0e201200080a200112280000fe00120108c21a0148b196014ba1020049e100006fa21bffcd023e00cc201200cc223e008da012004da23e004d8012008d823e000a010000fde012018c203e0048c21a00c8b19600cba10200290100006fa21bffce0222004da012008da222000da006000f40360009fc6a00001000000d0012014d801201c81c320068801202081c5a00601000000|@2743,131071|32,4,@2357 40,5,@2358 64,4,@2356 72,5,@2361 116,5,@1992 160,4,I48 252,5,@496 264,5,@496 320,5,@2710 328,5,@2712 352,5,@2710 360,5,@2714 400,5,@2716 416,5,@2718 548,4,@2371 556,5,@2372 608,4,@2370 616,5,@2375 648,4,@2695 680,5,@2558 752,5,@2438 768,5,@2438 780,5,@2720 808,4,@2722 828,5,@2500 852,5,@2724 888,5,@2500 912,5,@2128 928,5,@2438 944,5,@1613 960,5,@2436 984,4,@375 1000,5,@2562 1024,5,@2736 1212,4,@2377 1220,5,@2378 1244,4,@2376 1252,5,@2381 1332,4,@2740 1344,5,@2475 1660,4,@2740 1672,5,@2475 2710:C2,56|9e13e00280a220013280000ad0022004de213ffc113f003890022020f40620209fc6a00088013ffc90102001d002200481c3e00601000000|@2711,129|20,4,@1110 2711:S29|5354525543545f56414c5328292e737472756374416363657373283129 2712:C2,40|9e13e002c402200080a0a00132800005901020019010200581c3e0060100000081c3e00601000000|@2713,65665| 2713:S25|5354525543545f56414c5328292e6973466f726d616c283129 2714:C2,56|9e13e002c402200080a0a00132800005de213ffcd002200481c3e00601000000113f003890022020f40620209fc6a00088013ffc90102001|@2715,65665|32,4,@1110 2715:S25|5354525543545f56414c5328292e7661466f726d616c283129 2716:C2,40|9e13e00280a2200132800006d002200011000083900223d881c3e0060100000081c3e00601000000|@2717,129|16,4,I48 2717:S27|5354525543545f56414c5328292e7374727563744e616d65283129 2718:C2,80|9e13e0028c21a00c8b19600cba10200284100006fa21bffcd420a00494102001d420a0008c21a0108b196010ba10200394100006fa21bffcd222a008c422a004d022a0009010000a81c3e00601000000|@2719,65671| 2719:S33|5354525543545f56414c5328292e6d616b65466f726d616c537472756374283329 2720:C2,164|9e13e002f606201880a1001b8bd02018808a60013280002290102001808a20013280001d901020018c21a00c8b19600cba10200284100006fa21bffcee022000ee20a004ec026000ec20a000de213ffcc4213ff8d2026004d00220047fffffe988013ff88c21a00c8b19600cba1020029e100006fa21bffcd023e004d2012000d223e0009010000fc401200481c0a0068801200881c3e0060100000081c3e00601000000|@2721,114819| 2721:S45|535452554354555245535f28292e66756c6c436f70795369672837292833297a69705479706556617273283229 2722:C2,212|9e13e002f606201880a1001b8bd02018de213ffcd0213ff8c403600488013ff880a0a00132800006de00a000d0012000de01200481c3e00688012008c203e000d803e004d600a004d00120007fff51960100000080a220012280001b8410000bd00120007fff51a101000000ae100008901000017fff518c0100000080a22001228000118410000bac100017901000017fff51960100000092100008901000167fffa1650100000080a22001228000068410000b9010000cde01200481c3e00688012008f606201880a1001b8bd0201830bfffd4|@2723,114939|76,5,@1606 100,5,@1607 116,5,@1606 144,5,@1607 160,5,@2088 2723:S45|535452554354555245535f28292e66756c6c436f7079536967283729283329636f707954797065566172283129 2724:C2,628|9e13e002f606201880a1001b8bd0201880a2200132800005c40220009010200181c3e00601000000ee037ffcde213ffcda213ff8c4213ff4fa022004fa213ff0fa00a000fa213fecfa00a004fa213fe8fa00a008fa213fe4fa00a00cfa213fe0d405e020d2037fe4d0013fe07fffd87b88013fe0ec01200080a2001632800003aa102001aa102005a81d6004d0213ffcd0213ff8e6012004e404e00080a4a0011280002788013ff8e2012020e0047ffcde04e004c2042008b8206001ba23e001b917401c9a072001b917200498072001d6047ff0d402e000ba22a001811f001d248000039210000a9210000cd222e0008c21a00c8b19600cba10200292100006fa21bffcda22600484102001c422600080a0600132800003ae102001ae102005ac1de004aa012000d22560009a012000ec2360041080000880a52001a2012000e6246000a00120009e102001de24200480a5200122800004c2012004108000078c21a01480a06001328000048c21a0141080001fc201201c8b196014ba1020049a100006fa21bffcd023600cd8012000d8236008d6012010d6236004d4012014d4236000e8213ffcda213ff89010000d4000003888013ff892100008d0026008400002230100000080a220012280000bc2012000d002600840000232010000008210000910800006da012004e8213ffcd0213ff888013ff8da01200480a3600122800004d801200c10800007d801202880a3200132800004d801202810800006c2213ffcd6033fe894102005d422e000c2213ffcd0012020da0120287fffff7188013ffc8c21a00c8b19600cba10200296100006fa21bffcd022e004d4012000d422e0009010000bd201203081c2600688012034|@586,131071|108,5,@2475 432,5,@2725 448,5,@2733 472,5,@2735 2725:C2,564|9e13e002f606201880a1001b8bd020188410000fae100008901000177ffff75001000000ac100008901000177fffb73401000000aa100002a8100008901000167fffa88d0100000080a220012280001ba4100016a6100017901000167fffa89701000000901000167fffa8830100000080a2200122800008ea213ffc901000167fffa88e01000000a21000081080000ce4046004113f003890022020f40620209fc6a00088013ffca2102001e40460041080000490100012a6100017901000127fffa6310100000080a220012280000aea213ffca2100016901000127fffa63b010000009e100011a210000810800009a410000f113f003890022020f40620209fc6a00088013ffca2102001a410000fd00460087fffa64201000000a21000157fffd9f701000000e2213ffce6213ff8e4213ff4e8213ff088013ff080a2200132800005c4022000a010200110800020808c2001ee022004901000027fffb6e801000000c4213ffcee213ff8d20120001b0000839a0360d8f40360009fc6a00088013ff880a220012280000bd00120008c21a0088b196008ba102001a0100006fa21bffcec012004ec242000108000078801200888012008f606201880a1001b8bd0201830bfffde808c200132800017d0012008d00420007ffff6e101000000fa042000fa213ffc92100008d00120041b3f01149a0362684000001c88013ffc80a2200122800006d001200cd0012000ea01201081c5600688012014ea01201081c5600688012014ea01200c81c5600688012010|@2732,131071|28,5,@2659 44,5,@2194 64,5,@2148 92,5,@2149 104,5,@2148 128,5,@2149 148,4,@1110 192,5,@2124 220,5,@2125 244,4,@1110 276,5,@2126 288,5,@2500 348,5,@2194 368,4,I24 472,5,@2659 496,4,@2726 504,5,@2728 2726:O2|@2728,@2727 2727:O2|@2730,@2726 2728:C2,936|9e13e002f606201880a1001b8bd02018ae10000fac10000daa100008901000097fffa5bf0100000080a220012280005690100009a8100017a6100016901000097fffa5c80100000092100008901000157fffa5b30100000080a220012280004890102001901000157fffa5be01000000aa100008d00260087fffa5cf010000007fff505001000000a4100008d00560087fffa5c9010000007fff504a01000000ac10000992100008901000127fffd44b0100000080a220012280002f90102001e8213ffce6213ff8e4056000de05a00088013ff880a3e0013280000c808ca00180a4a001328000069010200190102005c201200481c0600688012008c201200481c06006880120083280001890102001fa03e004fa213ffcfa04a004fa213ff8d203e000d004a000da0120007fffffb588013ff880a220012280000990102001de012004e401200088012008f606201880a1001b8bd0201830bfffdfc201200c81c0600688012010c201200481c060068801200881c520060100000081c52006010000007fffa7a20100000080a220012280002990100009a8100017901000097fffa7ac01000000a6100008901000157fffa7970100000080a220012280001c90102001901000157fffa7a201000000e8213ffcec213ff8e6213ff4d0213ff0d204e000d00220009a1000167fffff8588013ff080a220012280000a90102001e4012004de012000d204a004d003e004da012008de01200c10bfff7b88012010e401200c81c4a0068801201081c52006010000007fffa3710100000080a220012280002690100009a8100017a6100016901000097fffa37a01000000a4100008901000157fffa3650100000080a220012280001890102001901000157fffa37001000000de04a00080a3e0012280000f90102001c202200080a060012280000990102001d204a004d0022004da04e0049e100014f403600081c6a0040100000081c520060100000081c520060100000081c52006010000007fff4f6b0100000080a220012280001990100009a8100017901000097fff4f7501000000a6100008901000157fff4f600100000080a220012280000c90102001901000157fff4f6b0100000092100008901000139e100014353f00b4b406a29481c6a0040100000081c52006010000007fffd81e0100000080a220012280000890100009901000159e100017353f00edb406a24081c6a004010000007fffa30b0100000080a220012280000890102001901000159e100017353f00b8b406a22081c6a0040100000081c5e00601000000|@2729,131071|32,5,@2124 64,5,@2125 80,5,@2124 104,5,@2125 120,5,@2126 128,5,@1613 144,5,@2126 152,5,@1613 172,5,@2452 388,5,@2148 416,5,@2149 432,5,@2148 456,5,@2149 564,5,@2104 596,5,@2105 612,5,@2104 636,5,@2105 728,5,@1606 756,5,@1607 772,5,@1606 796,5,@1607 816,4,@2088 840,5,@2481 868,4,@2481 884,5,@2102 912,4,@2102 2729:S25|545950455f5452454528292e657175616c5479706573283229 2730:C2,252|9e13e002f606201880a1001b8bd0201880a260013280000a808a200180a2200132800005901020019010200581c3e0060100000081c3e006010000003280002e90102001c4026000ee022000de213ffcda213ff8c4213ff4fa026004fa213ff0ee213fecfa022004fa213fe8d205e000d000a0001b0000839a0360d8f40360009fc6a00088013fe880a220012280001790102001ec01200cea012004e8012010d205a004d0056004da052004f40360009fc6a0000100000080a220012280000890102001d2012008d0012000da012010de01201410bfffcc88012018e601201481c4e00688012018ec01201481c5a0068801201881c3e00601000000|@2731,131071|116,4,I24 2731:S31|545950455f5452454528292e657175616c5265636f72644c69737473283229 2732:S35|545950455f5452454528292e66696e6456616c7565436f6e7374727563746f72283129 2733:C2,40|9e13e002c402200080a0bffd32800005901020019010200581c3e0060100000081c3e00601000000|@2734,65665| 2734:S6|476c6f62616c 2735:C2,16|9e13e002d002200481c3e00601000000|@2734,129| 2736:C2,140|9e13e002c4022010ec00a00080a5a00132800005ee00a004ee00a004108000058c21a010ea05e000ae1000158c21a0108b196010ba102003aa100006fa21bffcd2256008d205e004d2256004e805e000e825600080a5bffd32800007de213ffce600a004ea24e0009010200181c3e00601000000113f0116900220fcf40620209fc6a00088013ffc90102001|@2739,129155|116,4,@2737 2737:O3|103,@522,@2738 2738:S24|41737369676e6d656e7420746f2066726f7a656e20726566 2739:S34|5354525543545f56414c5328292e7463536574436f6e7374727563746f7273283229 2740:O1|@2741 2741:C2,12|9e13e00281c3e00601000000|@2742,129| 2742:S41|535452554354555245535f28292e66756c6c436f7079536967283729636f7079547970283129283129 2743:S31|535452554354555245535f28292e66756c6c436f7079536967283729283329 2744:C2,44|9e13e002f606201880a1001b8bd02018d4022008d2022004d0022000da036004f403600081c6a00401000000|@2745,131071| 2745:S31|535452554354555245535f28292e66756c6c436f7079536967283729283129 2746:S28|535452554354555245535f28292e66756c6c436f7079536967283729 2747:C2,80|9e13e002f606201880a1001b8bd02018c4036008de213ffcda213ff8d0213ff4da00a00cf40360009fc6a00088013ff4ee012004ec05e004d0012000da05a00cde012008f403600081c6a0048801200c|@2748,131071| 2748:S67|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973747275637456616c75652835296e6577456e762d283129 2749:C2,80|9e13e002f606201880a1001b8bd02018c4036008de213ffcda213ff8d0213ff4da00a004f40360009fc6a00088013ff4ee012004ec05e004d0012000da05a004de012008f403600081c6a0048801200c|@2748,131071| 2750:C2,80|9e13e002f606201880a1001b8bd02018c4036008de213ffcda213ff8d0213ff4da00a01cf40360009fc6a00088013ff4ee012004ec05e004d0012000da05a01cde012008f403600081c6a0048801200c|@2748,131071| 2751:C2,336|9e13e002f606201880a1001b8bd02018c403600cde213ffcda213ff8d0213ff4fa022000fa213ff0fa022004fa213fecda00a008f40360009fc6a00088013fecee012000d005e008400000490100000080a220012280000d90100017d005e0084000005901000000ec01200cea05a004d0012008da056008de012010f403600081c6a004880120144000005a01000000ac1a2004ea01200ce8056008e6052000e40560048c21a00c8b19600cba102002a2100006fa21bffce6246004a0102001e02460008c21a0148b196014ba1020049e100006fa21bffcc205e00cc223e00ce223e008da05e004da23e004d8012004d823e0008c21a00c8b19600cba10200290100006fa21bffcde222004d8222000e6213ffcda04a008f40360009fc6a00088013ffcd6012010d4012000b822a001b917200492072001d002e008d222200090102001c401201481c0a00688012018|@2748,131071|72,5,@2752 96,5,@2754 136,5,@2755 2752:C2,40|9e13e002c402200080a0bff932800005901020019010200581c3e0060100000081c3e00601000000|@2753,65665| 2753:S10|4f7665726c6f61646564 2754:C2,16|9e13e002d002200481c3e00601000000|@2753,129| 2755:C2,60|9e13e002c40220048088a0013280000580a0a0019010200581c3e0060100000032800005901020019010200581c3e0060100000081c3e00601000000|@2756,65665| 2756:S30|5354525543545f56414c5328292e6973436f6e7374727563746f72283129 2757:C2,280|9e13e002f606201880a1001b8bd02018c403600cde213ffcda213ff8fa022000fa213ff4fa022004fa213ff0da00a024f40360009fc6a00088013ff0ec01200080a5a00132800013ee05a008901020297fff91fa010000008c21a0148b196014ba102004aa100006fa21bffca8102001e825600ca6102001e625600825000083a404a3d8e4256004d0256000ae100015ea012008e8056004e6052000e40560089410001392100017d00120047ffffaeb01000000a21000088c21a00c8b19600cba10200290100006fa21bffce2222004e0012004e0222000e6213ffcda04a024f40360009fc6a00088013ffcde01200cc2012000b8206001b91720049a072001d803e004da23200090102001d601201081c2e00688012014|@2748,131071|80,5,@1992 124,4,I48 172,5,@2718 2758:C2,92|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d0213ff4da036008f40360009fc6a00088013ff480a2200132800009c4012008c4012004d0012000da00a004de012008f403600081c6a0048801200c81c0a0068801200c|@1463,131071| 2759:C2,92|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d0213ff4da036008f40360009fc6a00088013ff480a2200132800009c4012008c4012004d0012000da00a004de012008f403600081c6a0048801200c81c0a0068801200c|@1463,131071| 2760:C2,92|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d0213ff4da036008f40360009fc6a00088013ff480a2200132800009c4012008c4012004d0012000da00a004de012008f403600081c6a0048801200c81c0a0068801200c|@1463,131071| 2761:O1|@2762 2762:C2,16|9e13e0029010200181c3e00601000000|@2748,129| 2763:C2,92|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d0213ff4da036008f40360009fc6a00088013ff480a2200132800009c4012008c4012004d0012000da00a004de012008f403600081c6a0048801200c81c0a0068801200c|@1463,131071| 2764:C2,92|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d0213ff4da036008f40360009fc6a00088013ff480a2200132800009c4012008c4012004d0012000da00a004de012008f403600081c6a0048801200c81c0a0068801200c|@1463,131071| 2765:C2,92|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d0213ff4da036008f40360009fc6a00088013ff480a2200132800009c4012008c4012004d0012000da00a004de012008f403600081c6a0048801200c81c0a0068801200c|@1463,131071| 2766:O1|@2767 2767:C2,16|9e13e0029010200181c3e00601000000|@2768,129| 2768:S69|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973747275637456616c75652835296c6f63616c456e762d283129 2769:O3|@24,@397,@2770 2770:S24|73747275637456616c75653a206e6f7420612076616c7565 2771:C2,296|9e13e002f606201880a1001b8bd02018da213ffcd0213ff8d6213ff4d4213ff0c402200080a0bfe91280002188013ff0d20360008c21a0148b196014ba102004ae100006fa21bffc2d3f0119ac05a0a8ec25e000ec026000ec25e00cd025e008d625e004d6027ffc2b3f009aaa0562c4ea212010e802e004e821200cee212008173f01199602e0f8e602a014e402a02c9410001292100013d0022004353f00e1b406a19c81c6a00488012008de213ffcd2213ff8d6012010d4012004d20120009a01200c4000007888013ff8ee012014ec05e0008c21a0148b196014ba102004aa100006fa21bffc293f02a5a80523dce8256000e605a000e625600ce4012010e4256008e201200ce225600494100015d2012000de012004353f02a6b406a02c81c6a0048801201c|@5245,131071|72,4,@2772 104,4,@1913 128,4,@2773 156,4,@2400 196,5,@2776 232,4,@5225 280,4,@5226 2772:C2,52|9e13e002f606201880a1001b8bd02018d0213ffcd6036004d403600892102005d003600c353f00d2b406a35081c6a00488013ffc|@2302,131071|36,4,@2264 2773:O1|@2774 2774:C2,152|9e13e002f606201880a1001b8bd0201880a2200132800016c4022008de213ffc901020297fff906388013ffc8c21a0148b196014ba102004ae100006fa21bffcac102001ec25e00caa102001ea25e00829000083a80523d8e825e004d025e000841000171080000590100002de213ffc88013ffc901000021b3f00d99a0363387fffc07a01000000d0022014ee01200081c5e00688012004|@2775,131071|36,5,@1992 80,4,I48 120,4,@2307 128,5,@2309 2775:S73|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296c6f6f6b5369672832296c6f6f6b7570466e283129 2776:C2,788|9e13e002f606201880a1001b8bd02018ee02200080a5ffe93280000501000000c402200410800005de213ffc050000838400a3d8de213ffcda213ff8d0213ff4d2213ff0d4213fecd6213fe8c4213fe4901020297fff901588013fe48c21a0148b196014ba102004ac100006fa21bffcaa102001ea25a00ca8102001e825a008e6012000e625a004d025a000d0213ffcec213ff8901000161b3f00d99a0363387fffc03088013ff8e401201ce204a000e00460008c21a0148b196014ba1020049e100006fa21bffc033f011a82006138c223e000da042000da23e00cd8012018d823e008d6012010d623e0048c21a0148b196014ba10200494100006fa21bffc133f011a9202632cd222a000de22a00cc4022018c422a008ee022008ee22a0048c21a0148b196014ba102004ac100006fa21bffc2b3f011aaa0563f4ea25a000de25a00ce8022020e825a008e602200ce625a0048c21a0148b196014ba10200482100006fa21bffc133f011b92026058d2206000de20600cea02202cea206008d2022024d22060048c21a0148b196014ba10200498100006fa21bffc173f011b9602e0b0d6232000de23200cd6022010d6232008e4022000e42320048c21a0148b196014ba102004a2100006fa21bffc213f011ba0042118e0246000de24600cda022014da246008e0022004e02460048c21a0148b196014ba10200484100006fa21bffc293f011ba8052170e820a000de20a00cde022028de20a008e802201ce820a0048c21a0348b196034ba10200c96100006fa21bffcea22e02cde22e028c222e024c2022020c222e020c422e01cc4022018c422e018da22e014c4022010c422e010ec22e00cd422e008e222e004d822e000ec01200cec213ffca2102001e2213ff89810000bd6012010d40120149210000cd0012018da01201c4000014988013ff8d00120007fffc8170100000096100008d00120007fffc82701000000d6213ffcd0213ff8d00120047ffff44f88013ff88c21a0148b196014ba10200494100006fa21bffcd2012004d222a00cc4012000c422a008ee012010ee22a004d022a0009010000aec01202881c5a0068801202c|@5224,131071|44,4,I48 84,5,@1992 152,4,@2307 160,5,@2309 200,4,@2777 256,4,@2780 308,4,@2783 360,4,@2785 412,4,@2786 464,4,@2788 516,4,@2789 668,5,@2790 680,5,@2408 696,5,@2410 716,5,@2690 2777:C2,336|9e13e002f606201880a1001b8bd02018c403600cde213ffcda213ff8d0213ff4d2213ff0d4213fecd6213fe8133f005892026104d000a0241b3f00389a0360407fff1db888013fe880a2200122800010d001200c8c21a00c8b19600cba10200290100006fa21bffcee012008ee222004ec01200cec222000da012018de012014f403600081c6a0048801201cda012000f40360009fc6a00001000000808a20013280001f8c21a00cee012010fa05e00cfa213ffcfa05e008fa213ff8fa05e004fa213ff4133f0029920263d0d00120047fff0a9188013ff4d20120187fff0a8e01000000133f011a920262a47fff0a8a01000000d0212024d6012000d401200492102005d0012008de012020353f00d2b406a35081c6a004880120248b19600cba10200290100006fa21bffcee012008ee222004ec01200cec222000da012018de012014f403600081c6a0048801201c|@2779,131071|44,4,@1507 56,4,@1112 64,5,@1114 196,4,@550 208,5,@496 220,5,@496 228,4,@2778 236,5,@496 268,4,@2264 2778:S39|2920697320616c72656164792070726573656e7420696e2074686973207369676e61747572652e 2779:S79|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c28352973696756616c7565283429636865636b416e64456e746572283529 2780:C2,60|9e13e002f606201880a1001b8bd02018c4036004c4213ffcd6036008153f011a9402a384d2022004d0022000da03600cf403600081c6a00488013ffc|@2782,131071|28,4,@2781 2781:S5|56616c7565 2782:S88|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c28352973696756616c7565283429636865636b416e64456e746572283129283129283129283129 2783:C2,60|9e13e002f606201880a1001b8bd02018c4036004c4213ffcd6036008153f011b9402a04cd2022004d0022000da03600cf403600081c6a00488013ffc|@2782,131071|28,4,@2784 2784:S4|54797065 2785:C2,60|9e13e002f606201880a1001b8bd02018c4036004c4213ffcd6036008153f00d99402a1d4d2022004d0022000da03600cf403600081c6a00488013ffc|@2782,131071|28,4,@2303 2786:C2,60|9e13e002f606201880a1001b8bd02018c4036004c4213ffcd6036008153f011b9402a108d2022004d0022000da03600cf403600081c6a00488013ffc|@2782,131071|28,4,@2787 2787:S6|466978697479 2788:C2,60|9e13e002f606201880a1001b8bd02018c4036004c4213ffcd6036008153f009a9402a2c4d2022004d0022000da03600cf403600081c6a00488013ffc|@2782,131071|28,4,@1913 2789:C2,60|9e13e002f606201880a1001b8bd02018c4036004c4213ffcd6036008153f00e19402a084d2022004d0022000da03600cf403600081c6a00488013ffc|@2782,131071|28,4,@2396 2790:C2,1452|9e13e002f606201880a1001b8bd02018c402200080a0bfe93280006d80a0bfedd4036000ee02a0008c21a0148b196014ba102004ac100006fa21bffc2b3f011caa056390ea25a000ea05e000ea25a00ce8037ffce825a008d625a004d6037ff4e605fffcde213ffcd2213ff8253f009aa404a2c4e4213ff4e204e004e2213ff0ec213fece002e014c202e02c173f01199602e0f89410000192100010d00220047fffc5cd88013fec981000089010000c7fffc6a501000000961000089010000c7fffc6b501000000d0213ffcd0213ff8d8213ff494013ff8921000089010000b7fffc6c188013ff48c21a00c8b19600cba10200294100006fa21bffcd2012004d222a000d0012008d022a004d0213ffcd0213ff8d0213ff4c401200cae013ff4ec00a008ec25e000aa013ff4e800a00ce8256004a6013ff4e400a024e424e0088c21a01088013ff48b196010ba102003a2100006fa21bffce0012000e0246000de012004de246004c2012008c2246008da012020d8012024173f011c9602e3e0d6212024d4212020d401201cd821201c173f010d9602e2889210000a9410001190100009d201200cae1000089010000d1b3f010d9a03629c9e100017353f010eb406a3c481c6a0048801201c3280002080a0bfddd2213ffcda213ff8d4213ff4d0213ff0de213fecd6213fe8ee022004ec01200088013fe880a5e00132800006fa05e00490100016ea01200481c5600688012020fa213ffcd401200092100016d005e0009a0120144000012488013ffcac100008ee01200088012004f606201880a1001b8bd0201830bfffec328000d2de213ffcee022004d0213ffcd0213ff8d0213ff4a810000fa610000da4100008a2100009e005e000c205e004d805e008fa05e00cfa213ff0fa05e010fa213fec92013ff4901020017fff351b88013fecd0213ffcd0213ff8d0213ff492013ff4901020017fff351488013ff48c21a0148b196014ba10200492100006fa21bffc113f02a1900223e4d0226000c401201cc422600cee046020ee226008ec02a020ec2260048c21a0148b196014ba102004aa100006fa21bffc1f3f02a29e03e088de256000da012008da25600cd004602cd0256008de02a02cde2560048c21a0348b196034ba10200c84100006fa21bffcea20a02cea046028ea20a028da012004da20a024d220a020d204601cd220a01cda046018da20a018da046014da20a014ee046010ee20a010ec012018ec20a00cec046008ec20a008ee046004ee20a004d0046000d020a000e8213ffce6213ff8e4213ff4e2213ff0d4213fece0213fe8d8213fe4e6012024e6213fe0e4012020e4213fdc9210000290100001da013ff87fffff0c88013fdce2012014e0046000de0420008c21a0148b196014ba10200482100006fa21bffc1b3f02a29a03612cda206000d8012010d820600cd6012004d6206008d403e000d4206004d0213ffc133f0121920260b8d2213ff8053f00658400a010c4213ff4c2213ff0173f01219602e0d0d4012024d2012038d00120007fffc4e188013ff0ee012018ec05e000ea05a0008c21a01c8b19601cba102006a8100006fa21bffc273f02a2a604e20ce6252000e4012010e4252014e201200ce2252010e0012014e025200cde012008de252008c2056000c2252004d0213ffc9610000f9410000192100014d001202c400004f088013ffc9010200140000055010000009a102001da213ffc98102001d8213ff896100008d4012030d2012034d00120087fffd85888013ff8d601201cd402e000d202a0008c21a0148b196014ba10200484100006fa21bffc2f3f02a3ae05e0b0ee20a000ec026000ec20a00cea012018ea20a008e801200ce820a0049410000292100008d00120004001867b01000000e6012014d004e00cda012038f40360009fc6a00001000000e4012014d004a024da012024f40360009fc6a00001000000d0012004e201202081c460068801204c113f02a590022308f40620209fc6a00088013ffc90102001|@5223,131071|60,4,@2791 108,4,@1913 140,4,@2773 160,5,@2400 176,5,@2408 192,5,@2410 224,5,@2412 376,4,@2792 400,4,@2680 432,4,@2682 444,4,@2693 552,5,@2795 664,5,@1450 692,5,@1450 720,4,@5199 776,4,@5200 1016,4,@5201 1056,4,@2804 1068,4,@1611 1084,4,@2805 1104,5,@2400 1144,4,@5203 1216,5,@2812 1228,5,@2793 1268,5,@2562 1308,4,@5208 1356,5,@5209 1428,4,@5221 2791:C2,52|9e13e002f606201880a1001b8bd02018d0213ffcd6036004d403600892102005d003600c353f00d2b406a35081c6a00488013ffc|@2302,131071|36,4,@2264 2792:O1|@2793 2793:C2,84|9e13e0028c21a0088b1960083b100000ba07600190100006fa21bffc053f000f8400a10cc4222000841000088c21a00c8b19600cba10200290100006fa21bffcc422200484103ff9c422200081c3e00601000000|@2794,65665|28,4,@380 2794:S31|5354525543545f56414c5328292e6d616b655661726961626c654964283129 2795:C2,2708|9e13e002f606201880a1001b8bd02018c402200080a0a01d3280000d80a0a021da213ffcde213ff8ae100009d2022004901000179a013ffc4000029e88013ff8ec01200081c5a00688012008328000c080a0bffdee037ffcec05e000ea05a0008c21a0148b196014ba102004a8100006fa21bffc273f0120a604e2a4e6252000e4056000e425200cd0252008e2022004e22520048c21a0148b196014ba102004a0100006fa21bffc033f0120820062f4c2242000d8036000d824200cd6037ff8d6242008e8242004de213ffcda213ff8d0213ff4d2213ff0e2213fecfa022008fa213fe8fa02200cfa213fe4e4213fe0e0213fdc133f005892026104d004a0241b3f00389a0360407fff1ab488013fdc80a22001228000040100000010800052d401201c133f000f92026100d001200c1b0000839a0360d8f40360009fc6a0000100000080a22001228000040100000010800035d201200c133f002892026398d001200c1b0000839a0360d8f40360009fc6a0000100000080a22001228000040100000010800028d201200c133f0032920260c8d001200c1b0000839a0360d8f40360009fc6a0000100000080a2200122800004010000001080001bd201200c133f003192026118d001200c1b0000839a0360d8f40360009fc6a0000100000080a2200122800004010000001080000ed201200c133f012192026210d001200c1b0000839a0360d8f40360009fc6a0000100000080a2200122800013d401201cd201200c113f01219002221c7fff076801000000133f0121920262307fff076401000000d0213ffcd6012010d401201892102005d00120047fffb51e88013ffcd401201cd202bffcd0026000c4022000d6012010d400a000d2012000d0012008400003d201000000ee01201cec05e000fa05a008fa213ffc153f01239402a0a0133f01239202612cd00120087fffce2d88013ffc8c21a00c8b19600cba102002aa100006fa21bffce8012018e8256004a6102001e62560008c21a0148b196014ba102004a4100006fa21bffcd024a00cea24a008a2103ffde224a004e0012010e024a0008c21a00c8b19600cba10200290100006fa21bffce4222004e0222000da012000f40360009fc6a00001000000de012018b823e001b917200490072001c201202481c0600688012028328000c680a0bff5ee037ffcec05e000ea05a0008c21a0148b196014ba102004a8100006fa21bffc273f0123a604e15ce6252000e4056000e425200cd0252008e2022004e22520048c21a0148b196014ba102004a0100006fa21bffc033f0123820061acc2242000d8036000d824200cd6037ff8d6242008e8242004de213ffcda213ff8d0213ff4d2213ff0e2213fecfa022008fa213fe8fa02200cfa213fe4e4213fe0e0213fdc133f005892026104d004a0241b3f00389a0360407fff19f488013fdc80a22001228000040100000010800060d401201c133f000f92026100d001200c1b0000839a0360d8f40360009fc6a0000100000080a22001228000040100000010800043d201200c133f002892026398d001200c1b0000839a0360d8f40360009fc6a0000100000080a22001228000040100000010800036d201200c133f0032920260c8d001200c1b0000839a0360d8f40360009fc6a0000100000080a22001228000040100000010800029d201200c133f003192026118d001200c1b0000839a0360d8f40360009fc6a0000100000080a2200122800004010000001080001cd201200c133f012192026210d001200c1b0000839a0360d8f40360009fc6a0000100000080a2200122800004010000001080000fd201200c133f009392026374d001200c1b0000839a0360d8f40360009fc6a0000100000080a2200132800004d201200c10800012d401201c113f01219002221c7fff069a01000000133f0121920262307fff069601000000d0213ffcd6012010d401201892102005d00120047fffb45088013ffcd401201cd202bffcd0026000c4022000d6012010d400a000d2012000d00120084000030401000000ee01201cec05e0008c21a00c8b19600cba102002aa100006fa21bffce8012014e8256004a6102001e62560008c21a0148b196014ba102004a4100006fa21bffce2012008e224a00cea24a008a0102001e024a004de01200cde24a0008c21a00c8b19600cba10200290100006fa21bffce4222004de222000da05a008f40360009fc6a00001000000c2012014b8206001b917200490072001da01202081c36006880120243280002180a0bff1de213ffcda213ff8d4213ff4ee02200488013ff480a5e00132800006ec01200490100009ec01200881c5a0068801200cfa05e004fa213ffcea05a008ea213ff8d2213ff4d6012000d405bff8d205a000d005e000da05bffc7ffffca188013ff492100008ee01200088012004f606201880a1001b8bd0201830bfffe73280006480a0a0198c21a0108b196010ba102003ae100006fa21bffcec02200cec25e008ea022008ea25e004e8022004e825e000e6037ffce404e000e204a000e0046000de213ffcda213ff8d2213ff4ee213ff0133f005892026104d00420241b3f00389a0360407fff192288013ff080a220012280003bde012008c2012008da006000d8007ff88c21a0108b196010ba10200396100006fa21bffc153f01239402a370d422e000d2036020d222e008d0032020d022e0048c21a0108b196010ba10200384100006fa21bffc2f3f0123ae05e3e8ee20a000ec03602cec20a008ea03202cea20a0048c21a0348b196034ba10200ca8100006fa21bffcc425202ce6036028e6252028e4036024e4252024d6252020e203601ce225201ce0036018e0252018de036014de252014d6036010d6252010d403600cd425200cc4036008c4252008ee036004ee252004e0036000e02520009e10001410800004c2012008de03e000c2012008d4007ff49210000fd0012000da007ffc400004e001000000d0012004da01200c81c360068801201032800081de213ffc8c21a0088b1960083b100000ba076001ae100006fa21bffcd225e0008c21a0088b1960083b100000ba076001ac100006fa21bffcaa102001ea25a000e8036000e6037ff88c21a0108b196010ba102003a4100006fa21bffc233f012fa20460cce224a000e0052020e024a008c204e020c224a0048c21a0108b196010ba10200398100006fa21bffc173f012f9602e144d6232000d405202cd4232008d204e02cd22320048c21a0108b196010ba102003aa100006fa21bffc233f012fa20461bce2256000ee256008e82560048c21a0108b196010ba10200396100006fa21bffc233f012fa20462e8e222e000ec22e008e822e0048c21a0348b196034ba10200ca2100006fa21bffcd824602cd8052028d8246028c4052024c4246024e4246020e405201ce424601ce0052018e0246018e0052014e0246014c2052010c2246010d624600cea246008d6052004d6246004ea052000ea246000c2037ffcd4006000d202a000de213ffcda213ff8ee213ff4ec213ff0e6022008e6213fece6036008e6213fe8d602600094100011133f011c920263e0d00220044000105b88013fe8e4012000e204a00080a4600132800005fa046004a01020011080000dde012004fa213ffcd00460009a01200c400181b388013ffce201200088012004f606201880a1001b8bd0201830bffff0d003e000c201200c81c0600688012010113f02a190022358f40620209fc6a00088013ffc90102001|@5198,131071|56,5,@2796 116,4,@2800 168,4,@2801 244,4,@1507 256,4,@1112 264,5,@1114 292,4,@379 304,4,I24 344,4,@534 356,4,I24 396,4,@851 408,4,I24 448,4,@798 460,4,I24 500,4,@2809 512,4,I24 548,4,@2810 556,5,@496 564,4,@2811 572,5,@496 600,5,@2264 640,5,@2812 664,4,@2826 672,4,@2829 684,5,@2475 884,4,@2831 936,4,@2832 1012,4,@1507 1024,4,@1112 1032,5,@1114 1060,4,@379 1072,4,I24 1112,4,@534 1124,4,I24 1164,4,@851 1176,4,I24 1216,4,@798 1228,4,I24 1268,4,@2809 1280,4,I24 1320,4,@1891 1332,4,I24 1372,4,@2810 1380,5,@496 1388,4,@2811 1396,5,@496 1424,5,@2264 1464,5,@2812 1732,5,@2790 1852,4,@1507 1864,4,@1112 1872,5,@1114 1924,4,@2835 1972,4,@2836 2144,5,@2837 2264,4,@2916 2312,4,@2917 2360,4,@2918 2400,4,@2920 2572,4,@2792 2584,5,@2922 2636,5,@5193 2684,4,@5196 2796:C2,516|9e13e002f606201880a1001b8bd0201880a2600132800004c402600081c3e00601000000ee036000ec05e000ea05fff88c21a0108b196010ba102003a8100006fa21bffc273f0120a604e150e6252000e605a020e6252008e4056020e42520048c21a0108b196010ba102003a2100006fa21bffc213f0120a00421c8e0246000e005a02ce0246008c205602cc22460048c21a0348b196034ba10200c98100006fa21bffce223202ce205a028e2232028d605a024d6232024e8232020e805a01ce823201cd405a018d4232018d405a014d4232014e605a010e6232010ee05a00cee23200ce405a008e4232008e605a004e6232004e005a000e0232000c2036000de213ffcda213ff8d0213ff4fa00a000fa213ff0fa00a004fa213fecfa00a014fa213fe8fa026004fa213fe4d8213fe0d2013fecd00060087fff04f988013fe0921020b97fff04f60100000096100008d4012010d2012000d0012008da012018d8036000da033ffc7ffff95c01000000d6012014b822e001b917200494072001d0213ffcd20120049010000ada0120187fffff9c88013ffcae100008d4012018d2012000d00120107ffff27e01000000ec01201cea05a000e8056000a61000088c21a00c8b19600cba10200290100006fa21bffce6222004e4012010e4222000ee213ffcda052024f40360009fc6a00088013ffcd0012000e201202481c4600688012028|@2799,131071|68,4,@2797 116,4,@2798 312,5,@496 324,5,@496 360,5,@2776 424,5,@2718 2797:C2,92|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d0213ff4da036008f40360009fc6a00088013ff480a2200132800009c4012008c4012004d0012000da00a004de012008f403600081c6a0048801200c81c0a0068801200c|@1463,131071| 2798:C2,92|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d0213ff4da036008f40360009fc6a00088013ff480a2200132800009c4012008c4012004d0012000da00a004de012008f403600081c6a0048801200c81c0a0068801200c|@1463,131071| 2799:S89|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296d616b65536967496e746f28362970726f6365737353696728332970537472756374283229 2800:C2,52|9e13e002f606201880a1001b8bd02018d0213ffcd6036004d403600892102005d003600c353f00d2b406a35081c6a00488013ffc|@2302,131071|36,4,@2264 2801:C2,184|9e13e002f606201880a1001b8bd02018c403600cee0360088c21a0108b196010ba102003ac100006fa21bffc2b3f0120aa0563c8ea25a000ea00a020ea25a008e805e020e825a0048c21a0108b196010ba102003a6100006fa21bffc253f0121a404a040e424e000e400a02ce424e008e205e02ce224e004213f0121a00420b8e0213ffc033f006582006010c2213ff8d8036004d8213ff4173f01219602e0d09410001392100016353f00e1b406a19c81c6a00488013ff4|@2808,131071|44,4,@2802 92,4,@2803 120,4,@2804 132,4,@1611 152,4,@2805 168,4,@2400 2802:C2,92|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d0213ff4da036008f40360009fc6a00088013ff480a2200132800009c4012008c4012004d0012000da00a004de012008f403600081c6a0048801200c81c0a0068801200c|@1463,131071| 2803:C2,92|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d0213ff4da036008f40360009fc6a00088013ff480a2200132800009c4012008c4012004d0012000da00a004de012008f403600081c6a0048801200c81c0a0068801200c|@1463,131071| 2804:S16|5479706520636f6e7374727563746f72 2805:O1|@2806 2806:C2,152|9e13e002f606201880a1001b8bd0201880a2200132800016c4022008de213ffc901020297fff886d88013ffc8c21a0148b196014ba102004ae100006fa21bffcac102001ec25e00caa102001ea25e00829000083a80523d8e825e004d025e000841000171080000590100002de213ffc88013ffc901000021b3f00d99a0363387fffb88401000000d0022020ee01200081c5e00688012004|@2807,131071|36,5,@1992 80,4,I48 120,4,@2307 128,5,@2309 2807:S27|56414c55455f4f505328292e6c6f6f6b7570547970283329283129 2808:S88|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296d616b65536967496e746f28362970726f636573735369672833296c6f6f6b7570283129 2809:S3|726566 2810:S12|53706563696679696e672022 2811:S13|2220697320696c6c6567616c2e 2812:C2,168|9e13e002f606201880a1001b8bd020188c21a0148b196014ba10200484100006fa21bffc2f3f0121ae05e30cee20a000d220a00cd420a008d620a004ac1000088c21a00c8b19600cba10200290100006fa21bffc2b3f0122aa056384ea222000c4222004a810000f7fffdc4501000000e8213ffca6100008901000169a100013f40360009fc6a00088013ffca4100008901020019a100012de012000f403600081c6a00488012004|@2825,131071|36,4,@2813 84,4,@2821 104,5,@2587 2813:C2,800|9e13e002f606201880a1001b8bd02018ae10000fac10000d901000097fff989d0100000080a22001228000bc90102001aa100017a8100016901000097fff98a601000000d2022000e6022004e4022008901000127fff98b5010000007fff4336010000007fff43490100000080a22001228000a890102001ea213ffce8213ff8d2213ff4e4213ff090100013da05200cf40360009fc6a00088013ff0a210000892100011d0012000400000a501000000901000117fff4320010000007fff43330100000080a220013280008f90102001901000117fffc4e301000000e2213ffcd0213ff8a0102001de01200488013ff880a3e00132800005b8242001821000101080000ada012000b91720049a072001de03e004a010000df606201880a1001b8bd0201830bffff3b8206001ba236001811f401c2280007190102001d8012010d00120047fff989401000000c2213ffcfa032008fa213ff8fa032004fa213ff4d0213ff092103ffdd00120007fff046588013ff0d0213ffc92103ffdd001200c7fff046088013ffc8c21a00c8b19600cba10200296100006fa21bffc94102001d422e004d022e0008c21a00c8b19600cba10200292100006fa21bffcd6226004113f0122900222c8d02260008c21a00c8b19600cba10200284100006fa21bffcd220a004ee012000ee20a0008c21a00c8b19600cba102002ac100006fa21bffcc425a0042b3f0122aa0562e0ea25a0008c21a00c8b19600cba102002a8100006fa21bffcec252004e6012004e62520008c21a00c8b19600cba10200290100006fa21bffce8222004253f0122a404a2f4e42220007fff0589010000008c21a00c8b19600cba102002a2100006fa21bffc213f0122a0042310e0246000d0246004de01200cc203e004da012028c2212028d803e008d8212024d603e00cd6212020d403e010d421201cd203e014d2212018d003e018d0212014c403e01cc4212010ee03e020ee21200cec03e024ea012008ec212008d603e0009410200592100015901000119e10000d353f0042b406a05081c6a00488012008d801201481c3200688012018e001200c81c420068801201081c560060100000081c5e00601000000|@2820,131071|28,5,@2124 60,5,@2125 84,5,@2126 92,5,@1613 100,5,@1615 168,5,@2814 180,5,@1613 188,5,@1615 212,5,@2432 324,5,@2128 364,5,@509 384,5,@509 448,4,@2816 516,4,@2817 584,4,@2818 596,5,@520 624,4,@2819 744,4,@1265 2814:C2,64|9e13e002c402200080a0bffd32800007de213ffcee022004d225e0009010200181c3e00601000000113f0116900220fcf40620209fc6a00088013ffc90102001|@2815,98435|40,4,@2737 2815:S25|5354525543545f56414c5328292e7570646174655052283229 2816:S13|2074797065287329206e6f7420 2817:S11|2920726571756972657320 2818:S18|5479706520636f6e7374727563746f722028 2819:C2,40|9e13e002f606201880a1001b8bd02018c402200cd00360049a100002f403600081c6a00401000000|@1264,131071| 2820:S37|545950455f5452454528292e61737369676e54797065732834296173735479706573283229 2821:C2,60|9e13e002841000088c21a0108b196010ba10200390100006fa21bffc2f3f0122ae05e3dcee222000ee036004ee222008c422200481c3e00601000000|@2824,98465|28,4,@2822 2822:C2,36|9e13e002f606201880a1001b8bd02018d2036004da036008f403600081c6a00401000000|@2823,131071| 2823:S40|545950455f5452454528292e61737369676e54797065732834296173735479706573283129283129 2824:S37|545950455f5452454528292e61737369676e54797065732834296173735479706573283129 2825:S26|545950455f5452454528292e61737369676e5479706573283429 2826:O1|@2827 2827:C2,12|9e13e00281c3e00601000000|@2828,129| 2828:S82|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296d616b65536967496e746f28362970726f63657373536967283329283129 2829:O1|@2830 2830:C2,12|9e13e00281c3e00601000000|@2828,129| 2831:C2,52|9e13e002f606201880a1001b8bd02018d0213ffcd6036004d403600892102005d003600c353f00d2b406a35081c6a00488013ffc|@2302,131071|36,4,@2264 2832:C2,184|9e13e002f606201880a1001b8bd02018c403600cee0360088c21a0108b196010ba102003ac100006fa21bffc2b3f0123aa056280ea25a000ea00a020ea25a008e805e020e825a0048c21a0108b196010ba102003a6100006fa21bffc253f0123a404a2f8e424e000e400a02ce424e008e205e02ce224e004213f0121a00420b8e0213ffc033f006582006010c2213ff8d8036004d8213ff4173f01219602e0d09410001392100016353f00e1b406a19c81c6a00488013ff4|@2808,131071|44,4,@2833 92,4,@2834 120,4,@2804 132,4,@1611 152,4,@2805 168,4,@2400 2833:C2,92|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d0213ff4da036008f40360009fc6a00088013ff480a2200132800009c4012008c4012004d0012000da00a004de012008f403600081c6a0048801200c81c0a0068801200c|@1463,131071| 2834:C2,92|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d0213ff4da036008f40360009fc6a00088013ff480a2200132800009c4012008c4012004d0012000da00a004de012008f403600081c6a0048801200c81c0a0068801200c|@1463,131071| 2835:C2,92|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d0213ff4da036008f40360009fc6a00088013ff480a2200132800009c4012008c4012004d0012000da00a004de012008f403600081c6a0048801200c81c0a0068801200c|@1463,131071| 2836:C2,92|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d0213ff4da036008f40360009fc6a00088013ff480a2200132800009c4012008c4012004d0012000da00a004de012008f403600081c6a0048801200c81c0a0068801200c|@1463,131071| 2837:C2,640|9e13e002f606201880a1001b8bd02018da213ffcd4213ff8c4036000ee00a0008c21a01488013ff88b196014ba102004ac100006fa21bffc2b3f0124aa0562fcea25a000ea037ffcea25a00ce8022000e825a008e605e000e625a004e402200480a4a00122800074ec213ffce2022008808c600132800005de213ffce00460001080000cde213ffce0022000e8022008113f00bc900220f0f40620209fc6a00088013ffca4100010a0102001de213ffcd2213ff8e8213ff4e2213ff0ec213fec033f0121820060b8c2213fe8193f006598032010d8213fe4ec213fe0173f01219602e0d0d402602cd2026020901000107fffbd1388013fe0961000089010000b7fff40b8010000007fff40cb0100000080a220013280004590102001d4012004808aa0013280000501000000d202a00410800009d6213ffc113f00bc900220f0f40620209fc6a0000100000092102001d6213ffc88013ffc80a2600132800006d001201090102001c401201481c0a00688012020fa026004fa213ffc053f01218400a0b8c4213ff82f3f0065ae05e010ee213ff4ec012004ec213ff0173f01219602e0d0d402202cea026000d2022020901000157fffbce288013ff0e8012020e6052000e404e0008c21a0148b196014ba102004a2100006fa21bffc213f0125a0042000e0246000de04a000de24600cc201201cc2246008da012010da24600494100011d20120044000007a01000000d201200088012004f606201880a1001b8bd0201830bfffcdd401201081c2a0068801201cd2213ff8de213ff4e8213ff0d00220089a012004400004db88013ff01b3f012a9a03602cf40360009fc6a00001000000d20120009a0120144000058401000000e201200481c4600688012018|@2915,131071|56,4,@2838 144,4,@2144 192,4,@2804 204,4,@1611 220,4,@2805 240,5,@2400 256,5,@1613 264,5,@1615 312,4,@2144 380,4,@2804 392,4,@1611 412,4,@2805 436,5,@2400 476,4,@2841 520,5,@2842 584,5,@2862 592,4,@2866 620,5,@2868 2838:C2,104|9e13e002f606201880a1001b8bd02018de213ffcfa03600cfa213ff8fa036008fa213ff4fa036004fa213ff0133f0124920263807fff004788013ff0c401200cd021200cd6012004d401200892102005d00120009e100002353f00d2b406a35081c6a0048801200c|@2840,131071|44,4,@2839 52,5,@496 88,4,@2264 2839:S14|20696e207369676e61747572652e 2840:S93|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296170706c7953686172696e67436f6e73747261696e742833296c6f6f6b75704661696c757265283129 2841:C2,52|9e13e002f606201880a1001b8bd02018d0213ffcd6036004d403600892102005d003600c353f00d2b406a35081c6a00488013ffc|@2302,131071|36,4,@2264 2842:C2,2072|9e13e002f606201880a1001b8bd02018d4213ffc8410000fae100008901000177fff3ff488013ffcac1000027fff40060100000080a2200122800004901000091080000b901020017fff3fea010000007fff3ffd0100000080a220013280000490102001108000049010001781c5a006880120047fffc1aa0100000084100008901000097fffc1a601000000b8222001ba20a001811f401c22800014a8100016901000177fff956b01000000ec213ffc92100008113f0127900220847ffeffd088013ffc133f00e6920263c87ffeffcc01000000da012004de012000f403600081c6a00488012008a6100017901000137fffc16801000000a4100008901000097fffc16401000000a2100008901000127fff93300100000080a220013280005890100011901000127fff95090100000080a220012280002596100009901000127fff951401000000901000127fff95000100000080a2200122800008e8213ffc901000127fff950b01000000a01000081080000990100013113f003890022020f40620209fc6a00088013ffca0102001901000137fffc1fe01000000821000149810001396100009d2042000400001aa0100000080a22001228000209010000c108000069010001298100013821000141080001a9010000c7fff94dd0100000080a2200122800008c2213ffc901000127fff94e8010000009210000810800009d0026008113f003890022020f40620209fc6a00088013ffc92102001d00260087fff94f1010000009210000b9e10000110bfff75880120047fff950601000000c2213ffc92100008113f0127900221e87ffeff6b88013ffc133f0127920262007ffeff6701000000da012004de012000f403600081c6a004880120087fff92d50100000080a220013280005990100013901000117fff94ae0100000080a220012280002596100009901000117fff94b901000000901000117fff94a50100000080a2200122800008e8213ffc901000117fff94b001000000a01000081080000990100009113f003890022020f40620209fc6a00088013ffca0102001901000097fffc1a301000000821000149810001396100009d20420004000014f0100000080a22001228000219010000b108000069010001198100013821000141080001b9010000b7fff94820100000080a2200122800008c2213ffc901000117fff948d010000009210000810800009d0026008113f003890022020f40620209fc6a00088013ffc92102001d00260087fff949601000000921000089010000c9e10000110bfff19880120047fff94aa01000000c2213ffc92100008113f0127900221e87ffeff0f88013ffc133f0127920262007ffeff0b01000000da012004de012000f403600081c6a004880120087fff3f0101000000a0100008901000097fff3efd010000009610000992100008901000107fffc2fe0100000080a2200122800005901000139010200181c52006880120047fffc8250100000080a22001328000039210200192102005901a6004a41000089010000b7fffc81c0100000080a2200132800003a2102001a2102005a01c6004901000137fff3edf01000000400001540100000080a22001328000149010000b901000137fff946f01000000e8213ffc92100008113f0127900221e87ffefed488013ffc133f0127920262dc7ffefed001000000da012004de012000f403600081c6a004880120087fff3ec6010000004000013b0100000080a2200132800014901000139010000b7fff945601000000e8213ffc92100008113f0127900221e87ffefebb88013ffc133f0127920262dc7ffefeb701000000da012004de012000f403600081c6a004880120087fff3ead01000000400001220100000080a220012280000e9010000b80a4a0013280000b9010000be8213ffc921000139010000b9a0120004000014d88013ffcde01200081c3e006880120087fff3e9a010000004000010f0100000080a220012280000e9010001380a420013280000b90100013e8213ffc9210000b901000139a0120004000013a88013ffcde01200081c3e006880120087fff3e8701000000400000fc0100000080a22001228000049010000b1080000be8213ffc7fff3e7e01000000400000f30100000080a2200132800004e8213ffc1080006390100013e6213ff8d6213ff4901000137fffc07288013ff4d0213ffcd00120007fffc06e88013ffcde01200080a3e0012280002480a2200180a220013280002180a22001d00120047fff3e6401000000400000d90100000080a2200122800008d001200492102005d0012004400001a60100000010800037d00120087fff93ef0100000092100008113f0127900221e87ffefe5501000000133f00ee920260f87ffefe5101000000da012010f40360009fc6a00001000000108000319010200122800024d001200880a3e00132800021d0012008d00120087fff3e4001000000400000b50100000080a2200122800008d001200892102005d0012008400001820100000010800013d00120087fff93cb0100000092100008113f0127900221e87ffefe3101000000133f00ee920260f87ffefe2d01000000da012010f40360009fc6a000010000001080000d901020017fff3e220100000082100008d00120047fff3e1e010000009210000890100001400001db0100000090102001c201200c81c06006880120147fff93ac01000000e8213ffcd6213ff892100008113f0127900221e87ffefe1088013ff8133f0129920261b87ffefe0c0100000082100008d00120007fff939d0100000092100008901000017ffefe0401000000133f0129920261c87ffefe0001000000da012008de012004f403600081c6a0048801200c|@2861,131071|32,5,@1613 44,5,@1615 72,5,@1613 80,5,@1615 116,5,@2432 132,5,@2432 164,5,@2128 180,4,@2843 188,5,@496 196,4,@2435 204,5,@496 240,5,@2429 256,5,@2429 272,5,@2102 296,5,@2124 320,5,@2125 332,5,@2124 356,5,@2125 376,4,@1110 404,5,@2438 428,5,@2844 472,5,@2124 496,5,@2125 516,4,@1110 544,5,@2126 568,5,@2128 584,4,@2846 592,5,@496 600,4,@2847 608,5,@496 636,5,@2102 660,5,@2124 684,5,@2125 696,5,@2124 720,5,@2125 740,4,@1110 768,5,@2438 792,5,@2844 836,5,@2124 860,5,@2125 880,4,@1110 908,5,@2126 936,5,@2128 952,4,@2846 960,5,@496 968,4,@2847 976,5,@496 1004,5,@1613 1020,5,@1613 1040,5,@2452 1072,5,@2500 1108,5,@2500 1140,5,@1613 1148,5,@2848 1172,5,@2128 1188,4,@2846 1196,5,@496 1204,4,@2850 1212,5,@496 1240,5,@1613 1248,5,@2848 1272,5,@2128 1288,4,@2846 1296,5,@496 1304,4,@2850 1312,5,@496 1340,5,@1613 1348,5,@2848 1396,5,@2851 1416,5,@1613 1424,5,@2848 1472,5,@2851 1492,5,@1613 1500,5,@2848 1528,5,@1613 1536,5,@2848 1576,5,@2437 1592,5,@2437 1632,5,@1613 1640,5,@2848 1668,5,@2852 1684,5,@2128 1696,4,@2846 1704,5,@496 1712,4,@2499 1720,5,@496 1776,5,@1613 1784,5,@2848 1812,5,@2852 1828,5,@2128 1840,4,@2846 1848,5,@496 1856,4,@2499 1864,5,@496 1896,5,@1613 1912,5,@1613 1928,5,@2857 1952,5,@2128 1972,4,@2846 1980,5,@496 1988,4,@2859 1996,5,@496 2012,5,@2128 2028,5,@496 2036,4,@2860 2044,5,@496 2843:S21|43616e6e6f742073686172653a2054797065732028 2844:C2,244|9e13e002f606201880a1001b8bd0201880a260013280000aae10000f80a2200132800005901020019010200581c3e0060100000081c3e00601000000ac100008d00260007fff3d870100000080a220012280002790102001aa100017d00260007fff3d9101000000808da0013280001e90102001ae100008d005a0007fff3d790100000080a220012280001590102001a8100017d005a0007fff3d8301000000e602600492100008901000147fff8d510100000080a22001228000079010200192100013d005a0049e10001510bfffcff606201881c560060100000081c560060100000081c560060100000081c5e00601000000|@2845,129187|68,5,@1606 96,5,@1607 124,5,@1606 152,5,@1607 172,5,@2088 2845:S44|545950455f5452454528292e6c696e6b54797065436f6e7374727563746f7273283329657141726773283229 2846:S15|43616e6e6f742073686172653a2028 2847:S20|29206973206120747970652066756e6374696f6e 2848:C2,124|9e13e002de213ffc88013ffcde02200080a3fff93280000f84100008c2022004da006000d803600080a32005328000059010000d8410000810800007c200a000f606201880a1001b8bd0201830bffff0c200a00080a07ff9328000069010200190102005da01200081c3600688012004da01200081c3600688012004|@2849,65777| 2849:S29|5354525543545f56414c5328292e69735661726961626c654964283129 2850:S17|29206973206e6f7420666c657869626c65 2851:C2,600|9e13e002f606201880a1001b8bd020188410000fae10000dac100008901000167fff92e201000000aa100008901000097fffbfad01000000d0213ffcd0213ff8a8100008901000167fff3d4088013ff8a61000027fff3d520100000080a22001228000109e0120008c21a0088b1960083b100000ba0760019e100006fa21bffcec23e0009a01200090103ffdd023600084012000de20a004108000078c21a00c9a102001da23e00090012000ec2220048c21a00c8b19600cba10200284100006fa21bffcde012000de20a000da012004da20a0048c21a0108b196010ba10200390100006fa21bffcc4222008ea222004e8222000aa100017a81000167fff3d4201000000a4100015a2100008901000097fffbef90100000080a2200122800043e6213ffc901000147fff3d08010000007fffff7d0100000080a2200122800012e6213ffc901000147fffbea8010000007fff90760100000080a220012280000ae6213ffc82100013981000099210200590100014400000400100000010800024c2213ffce4213ff8e8213ff4d2213ff0e2213fec901000147fffbeec88013fec80a2200132800017d0213ffce001200cd00120087fff927d01000000fa042000fa213ffc92100008113f0127900221e87ffefce188013ffc133f00ee920260f87ffefcdd01000000da012000f40360009fc6a00001000000108000030100000088013ffc1080000e88012004d0213ff8d0213ff4d8213ff0e2213fec88013fec10800008d2012000d0213ff8d0213ff4d2213ff0e2213fec88013fecd2012000d0012004de012010353f0128b406a23c81c6a0048801201c|@2856,131071|32,5,@2128 48,5,@2438 72,5,@1613 84,5,@1615 252,5,@1617 272,5,@2436 296,5,@1613 304,5,@2848 328,5,@2429 336,5,@2102 372,5,@2852 408,5,@2437 436,5,@2128 456,4,@2846 464,5,@496 472,4,@2499 480,5,@496 584,4,@2854 2852:C2,140|9e13e002c4022010ec00a00080a5a00132800005ee00a004ee00a004108000058c21a010ea05e000ae1000158c21a0108b196010ba102003aa100006fa21bffce805e008e8256008e605e004e6256004d225600080a5bffd32800007de213ffcd200a004ea2260009010200181c3e00601000000113f0116900220fcf40620209fc6a00088013ffc90102001|@2853,129155|116,4,@2737 2853:S30|5354525543545f56414c5328292e7463536574457175616c697479283229 2854:C2,140|9e13e002c4022010ec00a00080a5a00132800005ee00a004ee00a004108000058c21a010ea05e000ae1000158c21a0108b196010ba102003aa100006fa21bffce805e008e8256008d2256004d205e000d225600080a5bffd32800007de213ffce600a004ea24e0009010200181c3e00601000000113f0116900220fcf40620209fc6a00088013ffc90102001|@2855,129155|116,4,@2737 2855:S32|5354525543545f56414c5328292e74635365744571756976616c656e74283229 2856:S46|545950455f5452454528292e6c696e6b54797065436f6e7374727563746f72732833297365744571756976283229 2857:C2,560|9e13e002de213ffcd2213ff888013ff8de02200080a3fff93280000f84100008d2022004c4026000ee00a00080a5e00532800005901000028410000810800007c4213ffcf606201880a1001b8bd0201830bffff0c4213ffcd201200088013ffcc402600080a0bff93280000f90100009ee026004de05e000d003e00080a22005328000059210000f9010000910800007ee012000f606201880a1001b8bd0201830bffff0ee012000de05e00080a3e0013280001f80a3fffdc202200080a060013280001080a07ff9da05e004d8022004b8232001ba236001811f401c328000069010200190102005c201200881c060068801200cc201200881c060068801200c3280000890102001da022004ee23600090102005d801200881c320068801200cda01200881c360068801200c3280001d80a3fff9c202200080a07ffd3280000e80a07ff9da05e004d802200480a3400c328000069010200190102005c201200881c060068801200cc201200881c060068801200c3280000890102001da022004ee23600090102005d801200881c320068801200cda01200881c360068801200c32800018c2022000c202200080a07ff93280000fda05e004da05e004d802200480a3400c32800006d023600090102005c201200881c060068801200c90102005c201200881c060068801200cd023600090102005d801200881c320068801200c80a07ff93280000890102001da022004ee23600090102005d801200881c320068801200cda01200881c360068801200c|@2858,98547| 2858:S29|5354525543545f56414c5328292e756e69667954797065496473283229 2859:S7|2920616e642028 2860:S21|292061726520646966666572656e74207479706573 2861:S35|545950455f5452454528292e6c696e6b54797065436f6e7374727563746f7273283329 2862:C2,268|9e13e002f606201880a1001b8bd0201880a2200132800005c4037ff49010200181c3e00601000000de213ffcda213ff8fa022004fa213ff4fa00a02cfa213ff02f3f00d9ae05e1d4ee213fecac102001ec213fe8ea037ff8ea213fe4173f01299602e33cd4013ff0d2013ff0d00220007fffb7c688013fe480a2200132800013e8022008901020297fff8005010000008c21a0148b196014ba102004a6100006fa21bffca4102001e424e00ca2102001e224e00821000083a00423d8e024e004d024e000a8100013e8213ffcd0012004da0120087fffffcb88013ffc8c21a00c8b19600cba102002a6100006fa21bffcd024e004e4012000e424e00090100013e201201081c4600688012014|@586,131071|64,4,@2303 92,4,@2863 112,5,@2400 136,5,@1992 180,4,I48 2863:O1|@2864 2864:C2,152|9e13e002f606201880a1001b8bd0201880a2200132800016c4022008de213ffc901020297fff7fd288013ffc8c21a0148b196014ba102004ae100006fa21bffcac102001ec25e00caa102001ea25e00829000083a80523d8e825e004d025e000841000171080000590100002de213ffc88013ffc901000021b3f00d99a0363387fffafe901000000d002202cee01200081c5e00688012004|@2865,131071|36,5,@1992 80,4,I48 120,4,@2307 128,5,@2309 2865:S41|56414c55455f4f505328292e6c6f6f6b75705374727563747572654469726563746c79283429283129 2866:O1|@2867 2867:C2,140|9e13e002f606201880a1001b8bd0201880a22001328000058c21a00c9010200181c3e006010000008b19600cba10200284100006fa21bffcae102001ee20a004ee022000ee20a000de213ffcc4213ff8d00220047fffffeb88013ff88c21a00c8b19600cba1020029e100006fa21bffcd023e004d0012000d023e0009010000fc401200481c0a00688012008|@586,98433| 2868:C2,152|9e13e002f606201880a1001b8bd0201880a220013280000ade213ffcde213ffc113f012a90022190f40620209fc6a00088013ffc90102001de213ffcda213ff8d0213ff41b3f012a9a0361bcf40360009fc6a00088013ff49a0120084000014d01000000d00120001b3f012d9a036144f40360009fc6a000010000009a012008400003a70100000090102001c401200881c0a0068801200c|@2914,131071|32,4,@2869 68,4,@2871 92,5,@2884 104,4,@2897 128,5,@2907 2869:O3|@24,@397,@2870 2870:S18|456d7074792073686172696e67206c697374 2871:O1|@2872 2872:C2,108|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffc9010200181c3e00601000000fa022004fa213ff8d00220004000001588013ff8d0213ffcd00120007fffffef88013ffc153f012b9402a228d2012000de012008353f012bb406a02c81c6a0048801200c|@2881,131071|52,5,@2873 76,4,@2882 92,4,@2879 2873:C2,132|9e13e002f606201880a1001b8bd0201880a22001328000058410000f9010200181c3e00601000000ee022004d00220007fffba5701000000c4213ffcee213ff894102001133f012a920262ec7fffc3f888013ff8d0213ffcd00120007fffffe988013ffc153f012a9402a3e8d2012000de012008353f012bb406a02c81c6a0048801200c|@2881,131071|48,5,@2425 68,4,@2874 76,5,@2508 100,4,@2877 116,4,@2879 2874:O1|@2875 2875:C2,108|9e13e002f606201880a1001b8bd02018ac10000fea022000e8022008d00220041b3f00df9a0360847fffb45d0100000080a220012280000c901000148c21a00c8b19600cba1020029e100006fa21bffce823e004ea23e0009010000f81c5a0060100000081c5a00601000000|@2876,127137|32,4,@2371 40,5,@2372 2876:S98|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296170706c7953686172696e67436f6e73747261696e7428332974797065436f6e7374724e616d6573283129283129 2877:O1|@2878 2878:C2,32|9e13e002d2022004d00220001b0000839a0360d8f403600081c6a00401000000|0,131071|12,4,I24 2879:C2,288|9e13e002f606201880a1001b8bd0201880a2600132800004de213ffc81c3e00601000000d0213ff8d4213ff4fa026000fa213ff0fa026004fa213fec88013fec80a2200132800005ee022000841020011080001c80a0a001ec0220048c21a00c8b19600cba10200290100006fa21bffcee222004ea012004ea222000ec213ffcda012008f40360009fc6a00088013ffc80a2200122800005d001200084102005108000078801200488012004f606201880a1001b8bd0201830bfffe280a0a00122800008d4012008d4012008d2012000d001200cde01201010bfffcb88012014d2012000d001200c7fffffc79e13e0028c21a00c8b19600cba102002a8100006fa21bffcd0252004e6012004e625200090100014e401201081c4a00688012014|@2880,131071| 2880:S85|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296170706c7953686172696e67436f6e73747261696e74283329756e696f6e283329 2881:S88|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296170706c7953686172696e67436f6e73747261696e74283329756e696f6e4d6170283329 2882:O1|@2883 2883:C2,32|9e13e002d2022004d00220001b0000839a0360d8f403600081c6a00401000000|0,131071|12,4,I24 2884:C2,132|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffc9010200181c3e00601000000da213ff8fa022004fa213ff4d00220004000001a88013ff4d0213ffcd0012000da0120047fffffed88013ffc8c21a00c8b19600cba10200284100006fa21bffcd020a004ee012000ee20a00090100002ec01200c81c5a00688012010|@586,131071|56,5,@2885 2885:C2,60|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d2037ff84000000f88013ff89a012004400000eb01000000c401200481c0a00688012008|@2896,131071|28,5,@2886 40,5,@2893 2886:C2,52|9e13e002f606201880a1001b8bd02018d0213ffcde213ff8901000099a013ffc4000000c88013ff8c401200081c0a00688012008|@2892,131071|32,5,@2887 2887:C2,136|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffc9010200181c3e00601000000da213ff8fa022000fa213ff4d00220047ffffff288013ff4de012004d0213ffcd2012000d003e0004000001588013ffcc201200080a06001328000059a01200cda01200c81c36006880120104000007001000000da01200c81c3600688012010|@2590,131071|80,5,@2888 116,5,@2891 2888:C2,52|9e13e002f606201880a1001b8bd02018d0213ffcde213ff8901000099a013ffc4000000c88013ff8c401200081c0a00688012008|@2890,131071|32,5,@2889 2889:C2,184|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffc9010200181c3e00601000000da213ff8fa022000fa213ff4d00220047ffffff288013ff484100008d00120007fffb8ba01000000de012004c4213ffcd403e000133f00df920260687fffae4988013ffc808a20013280000fd00120008c21a00c8b19600cba10200282100006fa21bffcda012000da206004d8022000d820600090100001d601200c81c2e00688012010c201200c81c0600688012010|@2590,131071|72,5,@2425 92,4,@2369 100,5,@2311 2890:S98|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296170706c7953686172696e67436f6e73747261696e742833296765745669727454797065436f6e73747273283229 2891:C2,112|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffcd0037ff481c3e00601000000da213ff8fa022000fa213ff4d00220047ffffff288013ff48c21a00c8b19600cba1020029e100006fa21bffcd023e004da012000da23e0009010000fde01200881c3e0068801200c|@1966,161| 2892:S99|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296170706c7953686172696e67436f6e73747261696e742833296c6973745669727454797065436f6e73747273283229 2893:C2,236|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffc9010200181c3e00601000000da213ff8fa022000fa213ff4fa022004fa213ff0d0013ff088013ff080a2200132800005de0120088410200110800022d0012000da03fffcc4037ffcee00a000ec05e000ea05a0008c21a0148b196014ba102004a8100006fa21bffc273f012ca604e3e8e6252000e6056000e625200ce400bffce4252008e205fff8e2252004fa022004fa213ffc94100014d2022000d00120047ffff82d88013ffcd001200088012004f606201880a1001b8bd0201830bfffdbda012008de01200c10bfffc888012010|@2895,131071|132,4,@2894 188,5,@2842 2894:C2,52|9e13e002f606201880a1001b8bd02018d0213ffcd6036004d403600892102005d003600c353f00d2b406a35081c6a00488013ffc|@2302,131071|36,4,@2264 2895:S129|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296170706c7953686172696e67436f6e73747261696e742833297368617265566972745374727563747328322973686172655669727454797065436f6e7374722831297368617265416c6c283129 2896:S118|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296170706c7953686172696e67436f6e73747261696e742833297368617265566972745374727563747328322973686172655669727454797065436f6e737472283129 2897:O1|@2898 2898:C2,108|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffc9010200181c3e00601000000fa022004fa213ff8d00220004000001588013ff8d0213ffcd00120007fffffef88013ffc153f012d9402a3b4d2012000de012008353f012bb406a02c81c6a0048801200c|@2881,131071|52,5,@2899 76,4,@2905 92,4,@2879 2899:C2,132|9e13e002f606201880a1001b8bd0201880a22001328000058410000f9010200181c3e00601000000ee022004d00220007fffb77501000000c4213ffcee213ff894102001133f012d920262747fffc11688013ff8d0213ffcd00120007fffffe988013ffc153f012d9402a370d2012000de012008353f012bb406a02c81c6a0048801200c|@2881,131071|48,5,@2425 68,4,@2900 76,5,@2508 100,4,@2903 116,4,@2879 2900:O1|@2901 2901:C2,108|9e13e002f606201880a1001b8bd02018ac10000fea022000e8022008d00220041b3f00de9a0362347fffb0e70100000080a220012280000c901000148c21a00c8b19600cba1020029e100006fa21bffce823e004ea23e0009010000f81c5a0060100000081c5a00601000000|@2902,127137|32,4,@2357 40,5,@2358 2902:S100|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296170706c7953686172696e67436f6e73747261696e742833297375625374727563747572654e616d6573283129283129 2903:O1|@2904 2904:C2,32|9e13e002d2022004d00220001b0000839a0360d8f403600081c6a00401000000|0,131071|12,4,I24 2905:O1|@2906 2906:C2,32|9e13e002d2022004d00220001b0000839a0360d8f403600081c6a00401000000|0,131071|12,4,I24 2907:C2,172|9e13e002f606201880a1001b8bd0201880a2200132800005fa0220009010200181c3e00601000000fa213ffcde213ff8da213ff4fa022004fa213ff0d0037ff89a013ffc4000002188013ff0c4012004ee00bffcec05e000d205bff89a1000177ffffc2101000000d0213ffcd0012000da0120047fffffe388013ffc8c21a00c8b19600cba102002aa100006fa21bffcd0256004e8012000e825600090100015e601200c81c4e00688012014|@586,131071|68,5,@2908 96,5,@2868 2908:C2,136|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffc9010200181c3e00601000000da213ff8fa022000fa213ff4d00220047ffffff288013ff4de012004d0213ffcd2012000d003e0004000001588013ffc8c21a00c8b19600cba10200282100006fa21bffcda012000da206004d020600090100001d801200c81c3200688012010|@2590,131071|80,5,@2909 2909:C2,52|9e13e002f606201880a1001b8bd02018d0213ffcde213ff8901000099a013ffc4000000c88013ff8c401200081c0a00688012008|@2913,131071|32,5,@2910 2910:C2,96|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffc9010200181c3e00601000000da213ff8fa022000fa213ff4d00220047ffffff288013ff492100008d0012000da012004de012008353f012eb406a23081c6a0048801200c|@2590,131071|80,4,@2911 2911:C2,216|9e13e002f606201880a1001b8bd020188410000fae10000d7fffb66401000000c4213ffcd2213ff8d405e000133f00de920262187fffabf388013ff8808a200132800023d0012000ea02200080a5600132800013ec056008901020297fff7b09010000008c21a0148b196014ba102004a8100006fa21bffca6102001e625200ca4102001e425200823000083a20463d8e2252004d0252000ac1000148c21a00c8b19600cba102002a8100006fa21bffce6012000e6252004ec25200090100014e401200481c4a00688012008ec01200481c5a00688012008|@2912,131071|24,5,@2425 44,4,@2355 52,5,@2311 92,5,@1992 136,4,I48 2912:S113|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296170706c7953686172696e67436f6e73747261696e74283329676574566972745375625374727563747572652832297375627374724c6973742d283229 2913:S99|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296170706c7953686172696e67436f6e73747261696e7428332967657456697274537562537472756374757265283229 2914:S96|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296170706c7953686172696e67436f6e73747261696e7428332973686172655669727453747275637473283229 2915:S77|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296170706c7953686172696e67436f6e73747261696e74283329 2916:C2,92|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d0213ff4da036008f40360009fc6a00088013ff480a2200132800009c4012008c4012004d0012000da00a004de012008f403600081c6a0048801200c81c0a0068801200c|@1463,131071| 2917:C2,92|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d0213ff4da036008f40360009fc6a00088013ff480a2200132800009c4012008c4012004d0012000da00a004de012008f403600081c6a0048801200c81c0a0068801200c|@1463,131071| 2918:C2,172|9e13e002f606201880a1001b8bd02018c4022004ee036008ec05e000b825a001b9172004aa072001ea25e000e80360048c21a00c8b19600cba102002a6100006fa21bffcec24e004a4102001e424e0008c21a0148b196014ba102004a2100006fa21bffce000a00ce024600ce6246008c200a004c2246004d8022000d82460008c21a00c8b19600cba10200290100006fa21bffce2222004d8222000da052008f403600081c6a00401000000|@2919,131071| 2919:S90|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296d616b65536967496e746f28362970726f63657373536967283329656e74657256616c283129 2920:C2,156|9e13e002f606201880a1001b8bd02018a810000fa610000de4022000e2022004901000117fffb6f5010000007fffdced0100000080a220012280000de004e004de04e008da03e0008c21a00c8b19600cba10200290100006fa21bffcda222004e2222000d023e000e004e0048c21a00c8b19600cba10200290100006fa21bffce2222004e4222000da04200c9e100014f403600081c6a00401000000|@2921,131071|36,5,@2429 44,5,@2669 2921:S91|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296d616b65536967496e746f28362970726f63657373536967283329656e74657254797065283129 2922:C2,236|9e13e002f606201880a1001b8bd02018d6213ffcd2213ff88410000fae1000089010000a4000003988013ff88c21a0388b196038ba10200d9e100006fa21bffcda02202cda23e030153f01309402a134d423e02cd4022028d423e028ec022024ec23e024ea022020ea23e020e802201ce823e01ce6022018e623e018e4022014e423e014e2022010e223e010e002200ce023e00cc2022008c223e008d8022004d823e004d2022000d223e000c4213ffcee213ff8ae102001ee213ff4ae102005ee213ff0d601200c9410000fd2013ff8d0013ff89a0120044000002c88013ff0ec01200481c5a00688012018|@5192,131071|36,5,@2923 72,4,@2924 216,5,@2927 2923:C2,12|9e13e00281c3e00601000000|@2249,129| 2924:O1|@2925 2925:C2,16|9e13e0029010200181c3e00601000000|@2926,129| 2926:S28|50415253455f5452454528292e7061737332283629656e762d283129 2927:C2,60|9e13e002f606201880a1001b8bd02018da213ffcd0213ff8d4213ff4d6213ff0de213fec9a013ffc4000000c88013fecc401200081c0a0068801201c|@5191,131071|40,5,@2928 2928:C2,7160|9e13e002f6062018ba21207080a7401b8bd02018c40220008088a0012280002e0100000080a0bfc12680002b0100000080a0a03d34800028010000002f3f0130ae05e23aba00a03dfa05c01d81c5c01d0100000000001b6a000004be000005be000004b20000197e00000c860000015600001b860000009a000004de000013460000007e0000076e00000b5a0000178e0000182a0000074e000001e20000027e0000072e00001ad2000013de00000c72000015be0000041e00000a4200000eee000004fa000014aa000003ee00000ede000016bede213ffc113f0137900221f8f40620209fc6a00088013ffc90102001c4037ff8ee0360008c21a0148b196014ba102004ac100006fa21bffc2b3f0137aa05622cea25a000ea05e000ea25a00cd225a008d2037ff4d225a004de213ffcfa022008fa213ff8fa02200cfa213ff4293f0138a80520f4e8213ff0273f0075a604e274e6213fecec213fe8173f01389602e110d400a030d200a018d00220047fffb09288013fe8d0213ffc9210000890102005400007f988013ffce4012008e2012000e224a000e0012004d0242000de01200c81c3e00688012010de213ffcda213ff8d2213ff4fa022004fa213ff092102005d002200c4000083888013ff0ec012008ea05a0008c21a0108b196010ba102003a8100006fa21bffc273f013aa604e388e6252000e4012004e4252008e2056000e2252004e8213ffcd605bff494100011133f002f920262a440000a1b88013ffce0012000d0242000de01200c81c3e00688012010de213ffcda213ff8d2213ff4fa022008fa213ff0d00220047fffff6c88013ff0d0213ffcd2012004d0012000da0120087fffff6688013ffcec01200cea05a0008c21a0108b196010ba102003a8100006fa21bffc273f013ba604e3c8e6252000e4012008e4252008e2056000e2252004e0012010e8212010d605bff49410001192100008d00120009e100010353f013bb406a06c81c6a00488012010de213ffcda213ff8d0213ff4fa022008fa213ff0fa02200cfa213fec92100008d00220047fffff4288013fecec01200cea05a0008c21a0108b196010ba102003a8100006fa21bffc273f013ca604e080e6252000e4012008e4252008e2056000e22520048c21a0148b196014ba102004a0100006fa21bffc1f3f013c9e03e138de242000e224200cc205bff4c2242008e824200496100010153f00f49402a074133f000e920263f07fffc51b01000000d2012008d0012000da01200c7fffff1d9e13e002d0213ffcd2012008d0012004da01200c7fffff1688013ffcda012010d80360008c21a0108b196010ba10200396100006fa21bffc153f013c9402a1acd422e000d201200cd222e008c4032000c422e0048c21a0148b196014ba102004ae100006fa21bffc2d3f013cac05a264ec25e000c425e00cea037ff4ea25e008d625e00496100017153f00f49402a07492100008d00120007fffc4ef01000000d0012000e801201481c5200688012018d2213ffcda213ff8de213ff4d00220049a013ffc40000b2788013ff4de012000353f0066b406a0fc81c6a0048801200cec0360008c21a0148b196014ba102004aa100006fa21bffc293f013ca8052380e8256000e605a000e625600cd0256008e4037ff4e4256004da213ffcd0213ff8de213ff4fa022004fa213ff0fa022008fa213fecea213fe8d002200c9a013ffc40000b5688013fe8d20120007fff31a001000000d20120087fff329501000000e2012004d0246000e001200c81c4200688012018d002200881c3e00601000000d6022004d4022008d202200cd0022010353f013db406a10481c6a00401000000d4022004d2022008d002200c353f014eb406a1e081c6a00401000000de213ffcda213ff8d0213ff4fa022004fa213ff0fa022008fa213fec901020297fff77d788013fecd0213ffcd00120049a0120104000242a88013ffc80a2200132800005fa022004ac1020011080000dd2012000fa213ffcd00220009a0120144000247188013ffcd001200088012004f606201880a1001b8bd0201830bffff0113f0158900223044000273901000000aa100008901020019a100015f40360009fc6a00001000000e8012004d0252000113f003190022124e601201481c4e00688012018ec0360008c21a0148b196014ba102004aa100006fa21bffc293f0159a8052260e8256000e605a000e625600cd0256008e4037ff4e4256004d0213ffcd0213ff8d0213ff4a210000fa010000d8210000892013ff4901000157fffa21f88013ff4e2213ffce0213ff8c2213ff4fa006004fa213ff0da013ff088013ff080a3600132800005d60360009810200110800023d6012000d4012008d202a0008c21a0188b196018ba10200590100006fa21bffc053f01598400a328c4222000ee02bff8ee222010ec012004ec22200cea026000ea222008e802bff4e8222004fa036004fa213ffce602e004961000149410001592100008901000137fffef5688013ffcda01200088012004f606201880a1001b8bd0201830bfffda80a2e00132800005fa02e004941020011080000d01000000fa213ffcd002e0009a012018400027ba88013ffcd601200088012004f606201880a1001b8bd0201830bffff0113f003190022124d201200c81c260068801201c96102001d4022008d202200cd0022004353f015ab406a1bc81c6a0040100000096102005d4022008d202200cd0022004353f015ab406a1bc81c6a00401000000ec037ff8ea0360008c21a0148b196014ba102004a8100006fa21bffc273f0299a604e30ce6252000e4056000e425200cd2252008e2037ff4e2252004de213ffcda213ff8d0213ff4fa022004fa213ff0fa022008fa213fec213f0121a00420b8e0213fe8033f006582006010c2213fe4e8213fe0173f01219602e0d0d405a030d205a020d0013fec7fffaedb88013fe0d0213ffcd0213ff8d0213ff492013ff8d00120007fff882888013ff413000083920263d8d00120041b0000839a0360d8f40360009fc6a0000100000080a2200122800005da0120189a10200110800020ec012018d8037ff8d60360008c21a0148b196014ba10200494100006fa21bffc133f02999202635cd222a000d002e000d022a00cc4012014c422a008ee037ff4ee22a0049610000ad4012004d2032030113f00d9900221d47fffa6c2010000008c21a0088b196008ba1020019a100006fa21bffcd0236000ec012018ea05a000da213ffcd2012010d00560047ffef24e88013ffcd401200092100008d00120044000249601000000a8100008901000147fffbb770100000080a2200132800018e8213ffce601201ce404e000e8213ffcd0213ff8fa04a000fa213ff4fa04fff4fa213ff0133f0299920263acd00120107ffef23588013ff0d0213ffcd6012000d401202892102005d0012004400004ba88013ffc10800007e6012008d0213ff8d0213ff4d0213ff088013ff0e601200880a4e00132800004e401202c1080001be401202ce204bff8d004e0007fff985001000000a01000088c21a00c8b19600cba10200290100006fa21bffcde04e000de222004e0222000fa04e004fa213ffcda046008f40360009fc6a00088013ffce601200088012004f606201880a1001b8bd0201830bfffe3e204bff88c21a00c8b19600cba10200290100006fa21bffce001200ce0222004de012024de222000da04600cf40360009fc6a00001000000113f003190022124c201203081c0600688012034de213ffcda213ff8d0022004400166d088013ff88c21a00c8b19600cba102002ac100006fa21bffcaa102001ea25a004d025a000d0213ffcd0213ff8113f00319002207c7fff31e088013ff87fff31f30100000080a2200122800012a80120008c21a0088b1960083b100000ba076001a8100006fa21bffc273f0031a604e07ce6252000a4012000a2103ffde224a000a0012000e8242004108000098c21a00ca6102001e6252000a4012000233f0031a204607ce224a0048c21a00c8b19600cba102002a0100006fa21bffcde012000de242000c2012004c22420048c21a0108b196010ba10200390100006fa21bffce02220081b3f00319a036070da222004ec222000de01200c353f0065b406a0fc81c6a00488012010de213ffcda213ff8d0213ff4fa022004fa213ff0d00220087ffffd0e88013ff0ec012008ea05a0008c21a0188b196018ba102005a8100006fa21bffc273f029aa604e338e6252000e405bff8e4252010e2012004e225200ce0056000e0252008de05bff4de252004d0213ffc9610000f9410001092100014d00120007fffee0e88013ffcc201200cda0060008c21a0108b196010ba10200398100006fa21bffc173f029b9602e02cd6232000d4012008d4232008d2036000d22320048c21a0148b196014ba10200490100006fa21bffc053f029b8400a0e4c4222000d222200cee007ff4ee222008d822200496100008153f00f49402a074d2012004d00120007fffc2ce01000000d0012004ec01201081c5a00688012014d0022004353f0299b406a3c881c6a00401000000ec022004ea0360008c21a0148b196014ba102004a8100006fa21bffc273f029ba604e158e6252000e4056000e425200cd0252008e205a004e2252004d0213ffcd0213ff8d0213ff4a010000f8210000d98100008d605a000d405a008e605a00cfa05a010fa213ff092013ff4901000147fffa06788013ff0e4006004b824a001b91720049e072001e0213ffcc2213ff8d8213ff4d6213ff0e2213fece6213fe8de213fe4da012008da213fe0d4213fdc9610000f9410200192102001901000119a10000140000bd688013fdcd8012014d6033ff88c21a0108b196010ba10200394100006fa21bffc133f029b9202620cd222a000c4012028c422a008ee02e018ee22a0048c21a0388b196038ba10200dac100006fa21bffcea02e030ea25a030e802e02ce825a02ce602e028e625a028e402e024e425a024e202e020e225a020e002e01ce025a01cd425a018de02e014de25a014c202e010c225a010da02e00cda25a00cd402e008d425a008d202e004d225a004c402e000c425a000d8012014d0213ffcd0032008d0213ff8ee012000ee213ff4d601200894100016d2012010d001200cec012014da05a0007ffffc4888013ff4ea012020d0256000e8012008e6012000e6252000e4012018e204a0008c21a0148b196014ba102004a0100006fa21bffc1f3f029b9e03e284de242000c2046000c224200cda012014da242008d801200cd8242004d0213ffc94100010d204a00890100013400018f688013ffc8c21a00c8b19600cba10200290100006fa21bffcd6012000d6222004d4012004d4222000de012020353f0066b406a2e081c6a00488012034113f00309002232881c3e00601000000d0213ffcd0213ff8d0213ff4a810000fa610000da410000892013ff4901020017fff1ce188013ff4d0213ffcd0213ff8d0213ff492013ff4901020017fff1cda88013ff4d0213ffcd0213ff8d0213ff492013ff4901020017fff1cd388013ff4e204a00480a4600122800005e004e008e004e00810800006de04fff8b8242001b9172004a0072001de04fff88c21a0108b196010ba10200382100006fa21bffc1b3f029b9a0362d4da206000d8012020d8206008d603e018d62060048c21a0108b196010ba10200394100006fa21bffc133f029b9202634cd222a000d0012014d022a008c403e020c422a0048c21a0108b196010ba102003ae100006fa21bffc2d3f029bac05a3c4ec25e000ea012008ea25e008da03e030da25e0048c21a0388b196038ba10200d92100006fa21bffcee226030d003e02cd022602cec03e028ec226028ea012004ea226024d4226020e203e01ce222601cc2226018d803e014d8226014ea03e010ea226010d6012010d622600cd601201cd6226008d603e004d6226004053f029c8400a03cc4226000e8213ffce6213ff8e4213ff4fa04a004fa213ff0fa04a008fa213fecfa04a010fa213fe8e0213fe4c2213fe0d4213fdcea213fd8ee213fd4d8213fd0ec213fccd0213fc8d2213fc4c404a00c273f0031a604e12488013fc480a0a00132800005e200a000a410001310800017e2012034e0012034fa00a004fa213ffcde012020de213ff8c2042004c2213ff4d6046004d4012000d2043ffcd0046000da0420007ffffb8d88013ff4a6100008c401200088012004f606201880a1001b8bd0201830bfffe68c21a0148b196014ba102004a0100006fa21bffc1f3f029c9e03e0b4de242000c2012024c224200cda012058da242008d8047ff8d82420048c21a0108b196010ba10200396100006fa21bffc153f029c9402a18cd422e000d201204cd222e008d822e0048c21a0108b196010ba10200390100006fa21bffc053f029c8400a1f4c4222000ee012040ee222008d82220048c21a0388b196038ba10200dac100006fa21bffcea012010ea25a030e8012004e825a02ce6012008e625a028d025a024e4012018e425a020de03201cde25a01cc201201cc225a018da01200cda25a014d4012014d425a010d625a00ce025a008d2032004d225a004d0032000d025a000ec213ffcc40120282f3f0031ae05e12488013ffc80a0a00132800005ea00a000ac10001710800017ea012030e8012038fa00a004fa213ffce6012024e6213ff8e4052004e4213ff4d6056004d4012000d2053ffcd0056000da0520007ffffb2d88013ff4ae100008c401200088012004f606201880a1001b8bd0201830bfffe680a5600122800004e801203810800019ec213ffce60520008c21a0148b196014ba102004a4100006fa21bffc233f029ca204625ce224a000e004e000e024a00cde012034de24a008c2053ff4c224a004ec213ffc94100012d205200890100016400017d588013ffc10800004d001200088013ffcd0012000e801204081c5200688012068de213ffcda213ff8fa037ff8fa213ff4fa036008fa213ff0ec0220042b3f0031aa05612488013ff080a5a00132800006e805a00090100015e801200c81c5200688012010e6012008fa05a004fa213ffce4012000e4213ff8e204e004e2213ff4d6052004d4012004d204fffcd0052000da04e0007ffffae688013ff4aa100008ec01200088012004f606201880a1001b8bd0201830bfffe5ec0360008c21a0148b196014ba102004aa100006fa21bffc293f029ca80522ace8256000e605a000e625600cd0256008e4037ff4e4256004d0213ffcd0213ff8d0213ff4a210000fa010000d8210000892013ff4901000157fff9e9788013ff4e0213ffcc2213ff8e2213ff4da00600488013ff480a3600132800005fa036004981020011080000d01000000fa213ffcd00360009a0120144001672088013ffcda01200088012004f606201880a1001b8bd0201830bffff0113f003190022124d601200081c2e00688012018de213ffcda213ff8d0213ff492100008d00220047ffffabb88013ff4ec012004ea05a0008c21a0108b196010ba102003a8100006fa21bffc273f029ea604e3b8e6252000e4012000e4252008e2056000e22520048c21a0148b196014ba102004a0100006fa21bffc1f3f029f9e03e070de242000e224200cc205bff4c2242008e824200496100010153f00f49402a07492100008113f010c9002232c7fffc09301000000d0213ffcd0213ff89a102001da213ff498013ff8d8213ff09610200194102001130000279202603d113f000f900220cc7fff22a588013ff08c21a00c8b19600cba10200290100006fa21bffcd6012000d6222000d4012004d4222004de012010353f0058b406a37081c6a00488012014de213ffcda213ff8d0213ff4fa022008fa213ff092100008d00220047ffffa7488013ff0d0213ffcd0012000da012008400163e888013ffcac1000088c21a00c8b19600cba10200290100006fa21bffcea012000ea222004293f010ca805232ce82220007fff30a101000000e601200ce404e0008c21a0108b196010ba102003a2100006fa21bffc213f029fa00420e4e0246000de012008de246008c204a000c22460048c21a0148b196014ba1020049a100006fa21bffc193f029f9803219cd8236000c223600cd604fff4d6236008e22360049610000d153f00f49402a07492100008901000167fffc03b01000000d0012000d401201081c2a00688012014de213ffcda213ff8d0213ff4fa022004fa213ff092100008d00220087ffffa3488013ff0ec012008ea05a0008c21a0108b196010ba102003a8100006fa21bffc273f029fa604e210e6252000e4012004e4252008e2056000e22520048c21a0148b196014ba102004a0100006fa21bffc1f3f029f9e03e2c8de242000e224200cc205bff4c2242008e824200496100010153f00f49402a074133f000e920263f07fffc00d01000000d2012004d0012000da0120087ffffa0f9e13e002113f003090022328da01200c81c3600688012010de213ffcda213ff8d0213ff4fa022004fa213ff0d00220084001637a88013ff0d0213ffcd2012004d0012000da0120087ffff9fb88013ffcec01200cea05a0008c21a0108b196010ba102003a8100006fa21bffc273f029fa604e33ce6252000e4012008e4252008e2056000e2252004e0012010e8212010d605bff49410001192100008d00120009e100010353f013bb406a06c81c6a00488012010de213ffcda213ff8d0213ff4fa022008fa213ff092100008d00220047ffff9d988013ff0ec012008ea05a0008c21a0108b196010ba102003a8100006fa21bffc273f029fa604e3f4e6252000e4012004e4252008e2056000e22520048c21a0148b196014ba102004a0100006fa21bffc1f3f02a09e03e0acde242000e224200cc205bff4c2242008e824200496100010153f00f49402a074133f000e920263f07fffbfb201000000d2012004d0012000da0120087ffff9b49e13e002da012008d80360008c21a0108b196010ba10200396100006fa21bffc153f02a09402a120d422e000d2012004d222e008c4032000c422e0048c21a0148b196014ba102004ae100006fa21bffc2d3f02a0ac05a1d8ec25e000c425e00cea037ff4ea25e008d625e00496100017153f00f49402a074133f000e920263f07fffbf8c01000000113f000e900223f0e801200c81c5200688012010de213ffcda213ff8d0213ff4fa022008fa213ff092100008d00220047ffff98488013ff0ec012008ea05a0008c21a0108b196010ba102003a8100006fa21bffc273f02a0a604e24ce6252000e4012004e4252008e2056000e22520048c21a0148b196014ba102004a0100006fa21bffc1f3f02a09e03e304de242000e224200cc205bff4c2242008e824200496100010153f00f49402a074133f000e920263f07fffbf5d01000000d2012004d0012000da0120087ffff95f9e13e002da012008d80360008c21a0108b196010ba10200396100006fa21bffc153f02a09402a378d422e000d2012004d222e008c4032000c422e0048c21a0148b196014ba102004ae100006fa21bffc2d3f02a1ac05a030ec25e000c425e00cea037ff4ea25e008d625e00496100017153f00f49402a074133f000e920263f07fffbf3701000000113f000e900223f0e801200c81c5200688012010de213ffcda213ff8fa022004fa213ff4ec02200888013ff480a5a00132800004ea0120041080001801000000e8057ff88c21a00c8b19600cba10200290100006fa21bffce6012000e6222004e405a000e4222000fa05a004fa213ffcda052000f40360009fc6a00088013ffcec01200088012004f606201880a1001b8bd0201830bfffe6113f003190022124ea01200881c560068801200cde213ffc113f02a1900220a4f40620209fc6a00088013ffc90102001de213ffc113f02a1900220d8f40620209fc6a00088013ffc90102001|@5190,131071|60,4,$2928+86 216,4,@2929 268,4,@2931 320,4,@2937 332,4,@1702 348,4,@2938 368,5,@2400 388,5,@2943 456,5,@2945 492,4,@2964 532,4,@694 540,5,@2966 652,4,@2972 708,4,@2966 796,4,@2973 844,4,@2974 876,4,@2554 884,4,@360 892,5,@2575 972,4,@2975 1020,4,@2976 1052,4,@2554 1068,5,@2575 1112,5,@2977 1124,4,@1624 1164,4,@2978 1236,5,@2980 1248,5,@1595 1260,5,@1603 1316,4,@2981 1344,4,@3080 1392,5,@1992 1412,5,@3124 1456,5,@3126 1488,4,@3142 1496,5,@3150 1536,4,@799 1580,4,@3154 1644,5,@2283 1732,4,@3156 1804,5,@2812 1872,5,@3158 1904,4,@799 1940,4,@3160 1972,4,@3160 2016,4,@5131 2076,4,@2804 2088,4,@1611 2104,4,@2805 2124,5,@2400 2152,5,@2130 2160,4,I48 2172,4,I24 2244,4,@5132 2292,4,@2303 2300,5,@2304 2352,5,@496 2372,5,@3128 2388,5,@2500 2440,4,@5133 2452,5,@496 2480,5,@2932 2544,5,@2194 2692,4,@799 2724,5,@5134 2772,4,@788 2780,5,@1613 2788,5,@1615 2832,4,@788 2884,4,@788 2956,4,@787 2976,4,@1617 3052,4,@5140 3116,5,@2812 3152,4,@5142 3200,4,@5143 3232,4,@2554 3248,5,@2575 3276,4,@5134 3320,4,@5144 3404,5,@2283 3488,5,@2995 3524,4,@5146 3720,5,@2927 3776,4,@5147 3828,5,@3064 3876,4,@1630 3892,4,@766 3940,5,@1450 3968,5,@1450 3996,5,@1450 4068,4,@5148 4116,4,@5149 4164,4,@5150 4296,4,@5151 4384,4,@799 4468,5,@2927 4524,4,@5154 4580,4,@5156 4624,4,@5157 4768,4,@799 4852,5,@2927 4932,4,@5158 4984,5,@3064 5048,4,@799 5136,5,@2927 5196,4,@5159 5260,5,@2283 5324,5,@5160 5356,4,@799 5432,4,@5171 5480,4,@5172 5512,4,@2554 5524,4,@2671 5532,5,@2575 5572,4,9999 5580,4,@375 5588,5,@1515 5636,4,@1517 5700,5,@5134 5740,4,@2671 5752,5,@1630 5788,4,@5173 5836,4,@5174 5868,4,@2554 5884,5,@2575 5972,4,@5175 6020,4,@5176 6052,4,@2554 6060,4,@360 6068,5,@2575 6096,4,@766 6140,5,@5134 6200,4,@5177 6256,4,@2966 6336,4,@5178 6384,4,@5179 6416,4,@2554 6424,4,@360 6432,5,@2575 6488,4,@5180 6536,4,@5181 6568,4,@2554 6576,4,@360 6584,5,@2575 6592,4,@360 6676,4,@5182 6724,4,@5183 6756,4,@2554 6764,4,@360 6772,5,@2575 6828,4,@5184 6876,4,@5185 6908,4,@2554 6916,4,@360 6924,5,@2575 6932,4,@360 7084,4,@799 7108,4,@5186 7136,4,@5188 2929:O3|@24,@397,@2930 2930:S28|61737369676e54797065733a20656d7074797472656520666f756e64 2931:C2,52|9e13e002f606201880a1001b8bd02018d0213ffcd6036004d403600892102005d003600c353f0137b406a27c81c6a00488013ffc|@2936,131071|36,4,@2932 2932:C2,152|9e13e002f606201880a1001b8bd0201880a260012280000601000000053f00d38400a004108000058c21a014053f00d38400a0c08c21a0148b196014ba102004ae100006fa21bffc2d3f0137ac05a330ec25e000d025e00cea012000ea25e008d425e004a81000088c21a0108b196010ba10200390100006fa21bffcee222008d6222004e82220009a100002f403600081c6a00488012004|@2935,131071|28,4,@2265 44,4,@2268 72,4,@2933 2933:C2,308|9e13e002f606201880a1001b8bd02018c403600cde213ffcda213ff8d0213ff4133f00d3920262f4d000a0241b3f00389a0360407fff003d88013ff4ee012000d0213ffc113f00259002227cda05e018f40360009fc6a00088013ffcec012004ea012008d0056008da05a00cf40360009fc6a00001000000e8012004113f0025900222b4da052000f40360009fc6a00001000000e6012004113f00259002227cda04e018f40360009fc6a00001000000e4012004113f00d49002201cda04a00cf40360009fc6a00001000000e2012004113f001f9002225cda046000f40360009fc6a00001000000e0012008d4012004d2012000d00420047fff895d01000000de01200490102001da03e008f40360009fc6a00001000000c201200490102001da006008de01200cf403600081c6a00488012010|@2934,131071|32,4,@2272 44,4,@1112 52,5,@1114 68,4,@499 124,4,@501 152,4,@499 180,4,@2279 208,4,@485 248,5,@2180 2934:S28|50415253455f5452454528292e6572726f724e656172283529283129 2935:S25|50415253455f5452454528292e6572726f724e656172283529 2936:S36|50415253455f5452454528292e7061737332283629676976654572726f72283329283129 2937:S20|56616c7565206f7220636f6e7374727563746f72 2938:O1|@2939 2939:C2,204|9e13e002f606201880a1001b8bd0201880a2200132800017c4022008de213ffcd0213ff8901020297fff715c88013ff88c21a0148b196014ba102004ae100006fa21bffcac102001ec25e00caa102001ea25e00829000083a80523d8e825e004d025e000841000171080000690100002de213ffcd0213ff888013ff8901000021b3f00d99a0363387fffa17201000000ee0220188c21a0108b196010ba10200390100006fa21bffc2d3f0138ac05a200ec222000ee222008ea012000ea222004e801200481c5200688012008|@2942,131071|40,5,@1992 84,4,I48 128,4,@2307 136,5,@2309 168,4,@2940 2940:C2,224|9e13e002f606201880a1001b8bd02018de213ffcda213ff8da036008f40360009fc6a00088013ff8808a20013280002a90102001c4012000ee022000ec05e008e805a00080a520013280001aaa1000178c21a0108b196010ba102003a6100006fa21bffce400a004e424e008e205a004e224e004a0102009e024e0008c21a0148b196014ba1020049e100006fa21bffcc205e00cc223e00ce623e008da05e004da23e004d805e000d823e000aa10000f8c21a0088b196008ba10200190100006fa21bffcea222000e601200481c4e00688012008c401200481c0a00688012008|@2941,131071| 2941:S32|56414c55455f4f505328292e6c6f6f6b757056616c7565283429283129283129 2942:S29|56414c55455f4f505328292e6c6f6f6b757056616c7565283429283129 2943:C2,252|9e13e002f606201880a1001b8bd020188410000fae100008901000094000003f01000000de02200480a3e0013280001b8210000292100002ee02200c901000177fff7fa50100000080a22001228000068c21a00c113f010c9002232c81c26006010000008b19600cba10200290100006fa21bffc1f3f010c9e03e32cde222004ee2220009e100009353f0066b406a2e081c6a0040100000098100008d00320087fffde620100000080a220012280000d94100017d00320087fffde720100000096100009921020019010000b9e100001353f0139b406a08c81c6a0040100000092102001d003200c9e100001353f00eab406a11081c6a00401000000|@2963,131071|28,5,@2944 64,5,@2102 84,4,@2671 116,4,@2671 136,4,@1630 160,5,@2752 184,5,@2754 208,4,@2945 236,4,@2464 2944:C2,12|9e13e00281c3e00601000000|@2781,129| 2945:C2,216|9e13e002f606201880a1001b8bd02018ae10000fac100008d005a0087fffde330100000080a220012280002594102005d005a0087fffde430100000080a220113280001894102005ee213ffcd2213ff8fa05a00cfa213ff4d005a0001b3f01399a0361804000002788013ff41b3f01399a036340f40360009fc6a00001000000d401200492100008d0012000de012008353f013ab406a00481c6a0048801200c92102001d005a00c9e100017353f00eab406a11081c6a0040100000092102001d005a00c9e100017353f00eab406a11081c6a00401000000|@2962,131071|28,5,@2752 52,5,@2754 92,4,@2946 100,5,@2947 108,4,@2951 144,4,@2954 172,4,@2464 200,4,@2464 2946:O2|@2947,@110 2947:C2,56|9e13e002f606201880a1001b8bd02018d0213ffcc4036004d000a000de213ff89a013ffc4000000c88013ff8ee01200081c5e00688012008|@2950,131071|36,5,@2948 2948:C2,232|9e13e002f606201880a1001b8bd0201880a2200132800005c40220009010200181c3e00601000000de213ffcda213ff8fa00a004fa213ff4fa00a008fa213ff0fa022004fa213fecd200a000d00360001b0000839a0360d8f40360009fc6a00088013fec80a220012280001cd00120008c21a00c8b19600cba102002ae100006fa21bffcec012004ec25e004ea012008ea25e000ee213ffcd0012000da01200c7fffffd888013ffc8c21a00c8b19600cba102002a8100006fa21bffcd0252004e6012000e625200090100014e401201481c4a00688012018da01200cde01201010bfffc988012014|@2949,131071|80,4,I24 2949:S42|5052494e545f5441424c4528292e6765744f7665726c6f6164732831297365617263684c697374283129 2950:S29|5052494e545f5441424c4528292e6765744f7665726c6f616473283129 2951:O1|@2952 2952:C2,112|9e13e002f606201880a1001b8bd0201880a2200132800005c40220009010200181c3e00601000000de213ffcfa00a000fa213ff8d00220047ffffff288013ff88c21a00c8b19600cba1020029e100006fa21bffcd023e004d0012000d023e0009010000fc401200481c0a00688012008|@2953,65665| 2953:S38|56414c55455f4f505328292e6f7665726c6f6164547970652832296765745479706573283129 2954:C2,340|9e13e002f606201880a1001b8bd0201880a2a0012280001fde213ffc9410000fae100008901000177fff82980100000080a220012280000fd4213ffcac100017901000167fff82a201000000d4213ffcec213ff8d2213ff4d00220047fff7db488013ff48410000810800010ae100002113f013a90022174f40620209fc6a00088013ffc8410200110800008ae100002d0213ff8d2213ff44000004388013ff484100008ae100002901000177fff2a950100000080a220012280002101000000901000177fff2aa001000000d0213ffcd00120007fffcb6888013ffc8c21a00c8b19600cba102002ac100006fa21bffcea012000ea25a004d025a0008c21a00c8b19600cba102002a8100006fa21bffca6102001e6252004ec2520009410200592100014d0012008de01200c353f00eab406a11081c6a00488012010113f013a900222b8f40620209fc6a0000100000090102001|@2961,131071|40,5,@2148 68,5,@2149 92,5,@2099 112,4,@2955 152,5,@2957 172,5,@1606 196,5,@1607 212,5,@2635 300,4,@2464 316,4,@2959 2955:O3|@24,@397,@2956 2956:S26|676574526573756c74202d206e6f7420612066756e6374696f6e 2957:C2,212|9e13e002f606201880a1001b8bd02018ae10000fac100008901000167fff82320100000080a220012280002690100016aa100017901000167fff823c01000000ee022000901000177fff7e220100000080a220012280001690100017a8100017901000147fff7e2c01000000de022004808be0013280000990100014da03e000d00360049e100015353f00b7b406a33081c6a004010000009e100015353f00b7b406a33081c6a004010000009e100015353f00b7b406a33081c6a004010000009e100017353f00b7b406a33081c6a00401000000|@2958,131071|28,5,@2148 56,5,@2149 72,5,@2104 100,5,@2105 136,4,@2099 156,4,@2099 176,4,@2099 196,4,@2099 2958:S23|545950455f5452454528292e6669727374417267283129 2959:O3|@24,@397,@2960 2960:S42|67656e6572616c6973654f7665726c6f6164202d20617267206973206e6f742061207479706520766172 2961:S33|545950455f5452454528292e67656e6572616c6973654f7665726c6f6164283329 2962:S27|56414c55455f4f505328292e6f7665726c6f616454797065283229 2963:S51|50415253455f5452454528292e706173733228362961737369676e56616c756573283629696e7374616e636554797065283229 2964:C2,156|9e13e002f606201880a1001b8bd02018c4036004de213ffcd0213ff8fa036008fa213ff4133f00d3920262f4d000a0241b3f00389a0360407ffefd2688013ff4ee012004d0213ffc113f00d49002201cda05e00cf40360009fc6a00088013ffcec012008113f001f9002225cda05a000f40360009fc6a00001000000d4012008d2012000d0012004de01200c353f00c1b406a19c81c6a00488012010|@2965,131071|36,4,@2272 48,4,@1112 56,5,@1114 72,4,@2279 100,4,@485 140,4,@2180 2965:S36|50415253455f5452454528292e7061737332283629666f756e644e656172283129283129 2966:C2,512|9e13e002f606201880a1001b8bd02018de213ffcd2213ff8d4213ff4d6213ff07fff7ca988013ff0ae100008901000177fff817c0100000080a2200122800033d0213ffcac100017901000167fff818601000000901000167fff81720100000080a220012280000801000000901000167fff817d01000000aa100008108000098c21a014113f003890022020f40620209fc6a00001000000aa1020018c21a0148b196014ba102004a8100006fa21bffc273f013ba604e288e6252000e4012004e425200ce2012000e2252008e0012010e0252004ea213ffc96100014153f00f49402a074d2012008d00560007fffbb1d88013ffcde012000d003e004c201201081c0600688012018d0213ff8ee213ff4ac102001ec213ff0aa013ff8ea213fec9610200194102001130000279202603d113f000f900220cc7fff1d2a88013fec8c21a00c8b19600cba10200290100006fa21bffce8012004e8222000e6012008e62220047fff1d6801000000a41000088c21a00c8b19600cba10200290100006fa21bffce4222004e2012014e22220007fff2b39010000008c21a0148b196014ba102004a0100006fa21bffc1f3f013b9e03e338de242000c2012010c224200cda01200cda242008d801201cd8242004e4213ffc96100010153f00f49402a07492100008d00120007fffbade88013ffcd0012000d601201c81c2e00688012024|@2971,131071|32,5,@2099 48,5,@2148 76,5,@2149 88,5,@2148 112,5,@2149 132,4,@1110 176,4,@2967 220,4,@2554 236,5,@2575 296,4,9999 304,4,@375 312,5,@1515 356,5,@1517 400,5,@1630 428,4,@2970 472,4,@2554 488,5,@2575 2967:C2,88|9e13e002f606201880a1001b8bd02018c4022008c4213ffcee03600cee213ff8ec036008ec213ff4ea036004ea213ff0d6022004153f004c9402a0a0d2022000113f013b900222fc353f00f5b406a28881c6a00488013ff0|@2969,131071|52,4,@1345 64,4,@2968 72,4,@2570 2968:S11|43616e277420756e696679 2969:S32|545950455f5452454528292e756e69667928352963616e744d61746368283129 2970:C2,88|9e13e002f606201880a1001b8bd02018c4022008c4213ffcee03600cee213ff8ec036008ec213ff4ea036004ea213ff0d6022004153f004c9402a0a0d2022000113f013b900222fc353f00f5b406a28881c6a00488013ff0|@2969,131071|52,4,@1345 64,4,@2968 72,4,@2570 2971:S20|545950455f5452454528292e6170706c79283529 2972:C2,156|9e13e002f606201880a1001b8bd02018c4036004de213ffcd0213ff8fa036008fa213ff4133f00d3920262f4d000a0241b3f00389a0360407ffefc1688013ff4ee012004d0213ffc113f00d49002201cda05e00cf40360009fc6a00088013ffcec012008113f001f9002225cda05a000f40360009fc6a00001000000d4012008d2012000d0012004de01200c353f00c1b406a19c81c6a00488012010|@2965,131071|36,4,@2272 48,4,@1112 56,5,@1114 72,4,@2279 100,4,@485 140,4,@2180 2973:C2,156|9e13e002f606201880a1001b8bd02018c4036004de213ffcd0213ff8fa036008fa213ff4133f00d3920262f4d000a0241b3f00389a0360407ffefbe888013ff4ee012004d0213ffc113f00d49002201cda05e00cf40360009fc6a00088013ffcec012008113f001f9002225cda05a000f40360009fc6a00001000000d4012008d2012000d0012004de01200c353f00c1b406a19c81c6a00488012010|@2965,131071|36,4,@2272 48,4,@1112 56,5,@1114 72,4,@2279 100,4,@485 140,4,@2180 2974:C2,88|9e13e002f606201880a1001b8bd02018c4022008c4213ffcee03600cee213ff8ec036008ec213ff4ea036004ea213ff0d6022004153f004c9402a0a0d2022000113f013b900222fc353f00f5b406a28881c6a00488013ff0|@2969,131071|52,4,@1345 64,4,@2968 72,4,@2570 2975:C2,156|9e13e002f606201880a1001b8bd02018c4036004de213ffcd0213ff8fa036008fa213ff4133f00d3920262f4d000a0241b3f00389a0360407ffefb9d88013ff4ee012004d0213ffc113f00d49002201cda05e00cf40360009fc6a00088013ffcec012008113f001f9002225cda05a000f40360009fc6a00001000000d4012008d2012000d0012004de01200c353f00c1b406a19c81c6a00488012010|@2965,131071|36,4,@2272 48,4,@1112 56,5,@1114 72,4,@2279 100,4,@485 140,4,@2180 2976:C2,88|9e13e002f606201880a1001b8bd02018c4022008c4213ffcee03600cee213ff8ec036008ec213ff4ea036004ea213ff0d6022004153f004c9402a0a0d2022000113f013b900222fc353f00f5b406a28881c6a00488013ff0|@2969,131071|52,4,@1345 64,4,@2968 72,4,@2570 2977:C2,140|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffc9010200181c3e00601000000da213ff8fa022004fa213ff4d2036000d0022000da037ffc7ffff3b388013ff4d0213ffcd0012000da0120047fffffeb88013ffc8c21a00c8b19600cba10200284100006fa21bffcd020a004ee012000ee20a00090100002ec01200c81c5a00688012010|@586,131071|64,5,@2928 2978:C2,52|9e13e002f606201880a1001b8bd02018d0213ffcd6036004d403600892102005d003600c353f0137b406a27c81c6a00488013ffc|@2979,131071|36,4,@2932 2979:S56|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c7565732832296d7367466e283129 2980:C2,216|9e13e002f606201880a1001b8bd0201880a2200132800005d0213ffc9010200181c3e00601000000d0213ff8c4022000de213ff4da213ff0fa022004fa213fecfa00a000fa213fe8d2037ffcd000a004da0360007ffff36088013fe8ae012010ec012000ec25e000aa012010d02560048c21a00c8b19600cba102002a8100006fa21bffce6012010e6252000e4012014e4252004e8213ffcd0012004da0120087fffffd888013ffc8c21a00c8b19600cba102002a2100006fa21bffcd0246004e0012000e024600090100011de01201081c3e0068801201c|@586,131071|84,5,@2928 2981:C2,464|9e13e002f606201880a1001b8bd02018c4036004b820a001b9172004ae072001ac1000088c21a00c8b19600cba10200290100006fa21bffc2b3f013daa0562f0ea222000ee222004de213ffcda213ff8ec213ff4d2213ff0d4213fecd6213fe8ee213fe4da02a000f40360009fc6a00088013fe4e801200ce60120148c21a0108b196010ba10200390100006fa21bffc253f013ea404a0c8e4222000e204fff8e2222008e0012000e0222004da052000f40360009fc6a00001000000de012014c203e0008c21a0148b196014ba1020049a100006fa21bffc193f013e9803232cd8236000d6006000d623600cd403fffcd4236008d203fff4d2236004d0213ffcd0213ff8d0213ff492013ff49010000d7fff96ae88013ff4d0213ffcd0213ff8d0213ff492013ff4901020017fff13a788013ff4d201201c901020019a0120304000016e01000000d0213ffc94100008d201201c901020019a0120304000098b88013ffcd2012000d00120209a01203440000b1a01000000d0012030c4023ff88c21a0108b196010ba10200390100006fa21bffc2f3f014eae05e110ee222000c4222008ec01202cec222004da012010f40360009fc6a00001000000113f003190022124ea01203481c5600688012038|@3079,131071|56,4,@2982 144,4,@2986 216,4,@2990 272,5,@2283 300,5,@1450 320,5,@2992 348,5,@3034 368,5,@3043 404,4,@3078 444,4,@799 2982:C2,40|9e13e002f606201880a1001b8bd02018d2036004d0022004353f013db406a33481c6a00401000000|@2985,131071|24,4,@2983 2983:C2,268|9e13e002f606201880a1001b8bd02018de213ffcd2213ff87fff79f988013ff8ae100008901000177fff26ea0100000080a220012280000801000000901000177fff26f501000000ac10000810800009d205a004113f003890022020f40620209fc6a00001000000ac102001d205a004d005a0007fff76d501000000aa100008d205a004d005a0007fff7bff01000000d0213ffcd0213ff8ec213ff4d0213ff0a8013ff8e8213fec9610200594100015d2012000113f000f900220cc7fff1a9788013fec8c21a00c8b19600cba10200290100006fa21bffce6012004e6222000e4012008e42220047fff1ad50100000092100008d0012000de012010353f0064b406a39481c6a00488012014|@2984,131071|24,5,@2099 40,5,@1606 64,5,@1607 84,4,@1110 116,5,@2090 136,5,@2112 180,4,@375 188,5,@1515 232,5,@1517 252,4,@1608 2984:S27|545950455f5452454528292e736574547661724c6576656c283229 2985:S61|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c4465636c61726174696f6e283429552d283129 2986:C2,124|9e13e002f606201880a1001b8bd02018c4036008de213ffcda213ff8fa022004fa213ff4d0022000da00a02cf40360009fc6a00088013ff4808a200132800009ee012004d2012000d0022000de012008353f013eb406a16081c6a0048801200cd205e004d0012000de012008353f013db406a33481c6a0048801200c|@2989,131071|80,4,@2987 108,4,@2983 2987:C2,316|9e13e002f606201880a1001b8bd02018de213ffcd0213ff8d2213ff47fff796d88013ff4ae100008901000177fff265e0100000080a220012280000801000000901000177fff266901000000ac10000810800009ec213ffc113f003890022020f40620209fc6a00001000000ac102001ec213ffcd00120007fff795688013ffcaa100008901000157fff26470100000080a220012280000801000000901000157fff265201000000a810000810800009e6012000113f003890022020f40620209fc6a00001000000a8102001e6012000d204e004d004e0007fff7b4001000000a4100008d2052004d00520007fff7b3b01000000b8222001ba24a001811f401c24800009d2012008d201200490100013de01200c353f0064b406a39481c6a0048801201090100014de01200c353f0064b406a39481c6a00488012010|@2988,131071|28,5,@2099 44,5,@1606 68,5,@1607 88,4,@1110 120,5,@2099 136,5,@1606 160,5,@1607 180,4,@1110 216,5,@2110 236,5,@2110 276,4,@1608 300,4,@1608 2988:S27|545950455f5452454528292e6c696e6b5479706556617273283229 2989:S69|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c4465636c61726174696f6e2834293c7061747465726e3e2d283129 2990:C2,104|9e13e002f606201880a1001b8bd02018de213ffcfa03600cfa213ff8fa036008fa213ff4fa036004fa213ff0133f00d29202631c7ffee63b88013ff0c401200cd021200cd6012000d401200492102005d00120089e100002353f0137b406a27c81c6a0048801200c|@2991,131071|44,4,@2263 52,5,@496 88,4,@2932 2991:S66|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c4465636c61726174696f6e2834296e6577456e762d283129 2992:C2,476|9e13e002f606201880a1001b8bd0201880a2600132800005c40260009010200181c3e0060100000080a0a001328000068c21a008d20260049010200510bffff3f60620188b1960083b100000ba076001ae100006fa21bffcac102005ec25e0008c21a0188b196018ba102005ac100006fa21bffc2b3f013faa0561f4ea25a000ee25a010ea037fe0ea25a00cd025a008e8037fd4e825a004de213ffcda213ff8d0213ff4fa00a000fa213ff0fa00a008fa213fecfa026004fa213fe8ee213fe4ec213fe0e6013ff0e6213fdcd6037fe89410200192100008d0013fecda037ffc4000008088013fdce4012000e204a00080a460012280001ad0213ffce0012014de043ffcc203e00480a0600522800011d0213ffcda03e000d8036000d0213ffc133f005892026104d00320241b3f00389a0360407ffef8ca88013ffc80a2200122800017d201200810800008d601201888013ffc10800012d201200888013ffc1080000fd2012008d402fffcd202a000113f01479002200cd0213ffcd601200cd4012010c402600092102001901000027ffff83c88013ffcd2012008d0012014da0120187fffff989e13e0028c21a00c8b19600cba102002a0100006fa21bffcd0242004de012000de24200090100010c201201c81c0600688012020|@3033,131071|116,4,@2993 224,5,@2995 288,4,@1507 300,4,@1112 308,5,@1114 368,4,@3032 400,5,@2932 2993:C2,112|9e13e002f606201880a1001b8bd02018c4036010ae102001ee20a000de213ffcda213ff8d0213ff4da03600cf40360009fc6a00088013ff4ec012004ea05a00880a560012280000890102001d0012000da05a004de012008f403600081c6a0048801200ce801200881c520068801200c|@2994,131071| 2994:S81|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c4465636c61726174696f6e2834296d617050726f63657373283229656e74657256616c73283129 2995:C2,3148|9e13e002f606201880a1001b8bd02018c4012000ee00a000808de0012280002d0100000080a5ffc12680002a0100000080a5e03934800027010000002d3f013fac05a332ba05e03dfa05801d81c5801d0100000000000b820000007a0000007a0000007a0000007a0000007a0000046a00000a760000008a0000007a0000007a0000007a0000007a000009520000007a0000007a0000007a000004f60000007a0000007a0000007a0000007a0000007a0000007a00000782000008260000007a0000007a0000007a0000074600000b72113f00319002212481c3e00688012008d0213ffcd0213ff8de213ff4da213ff0d0213fecd2213fe8d4213fe4d6213fe0fa00a004fa213fdcfa00a008fa213fd8fa00a00cfa213fd492013ff8d0013fdc7fff7abc88013fd4ea01201ce8056000e6052000133f005892026104d004e0241b3f00389a0360407ffef80d0100000080a220013280000a01000000e401201480a4a0012280000601000000233f0075a20462741080003e9010001113000083920263d8d00120241b0000839a0360d8f40360009fc6a0000100000080a2200122800013e401201ce401201ce204bff8d0012008da046018f40360009fc6a00001000000808a20013280000501000000e20220001080002690100011233f0075a20462741080002290100011e204bff8e004a0008c21a0148b196014ba1020049e100006fa21bffc033f014282006344c223e000da042000da23e00cd801202cd823e008d6012018d623e004153f01429402a394d4213ffc133f007592026274d2213ff8de213ff4173f01389602e110d4046030d2046018d00120087fffa11988013ff4a2100008901000117fffd72c0100000080a220012280003ad0213ffcc401201080a0a00122800010e2213ffcee01201cec05e000e2213ffc2b3f0142aa0563a8ea213ff8d6012018d401202c92102005d005a0007ffff73a88013ff810800004ee01200888013ffcee012008ec012000ec25e000901000167ffff8ab01000000ea022004808d600132800005d002200ce80560001080000680a520017fff781101000000a810000880a5200122800004e80120201080000dd2012000e6052000253f0142a404a3e0e4213ffcd601201cd401203092102005d004e0007ffff71888013ffcd2012000901020017ffff8480100000010800056c4012004d0213ff890102001d0213ff484013ff8c4213ff09610200194102001d201200c113f000f900220cc7fff17fa88013ff08c21a00c8b19600cba10200290100006fa21bffcee012000ee222000ec012004ec2220047fff1838010000008c21a0088b1960083b100000ba076001aa100006fa21bffca8102001e82560008c21a0088b1960083b100000ba076001a6100006fa21bffca4102001e424e000961000139410001592100008d00120104000024b01000000e2012024e0046000d0213ffcd4012020d2042000d00120107fff1b0a88013ffcde012028c203e0009a102001da213ffcd6012024d4006000d203fffcd00120144000026088013ffc8c21a00c8b19600cba10200290100006fa21bffcd8012000d8222004d6012014d6222000da01203cf40360009fc6a00001000000d4012010d2012000d222a000901000097fffca7e0100000088012008c4012004d020a000ee01202481c5e00688012038de213ffcda213ff8d0213ff4fa00a004fa213ff092102005d000a00c7ffff83588013ff0ea012008e80560008c21a0108b196010ba102003a6100006fa21bffc253f0143a404a328e424e000e2012010e224e008e0052000e024e004e6213ffcd601200494100010133f002f920262a47ffffa1888013ffcde012000d023e000c201200c81c0600688012018ea00a004e605600080a4ffe132800057e4036000e4037ff8e20360008c21a0148b196014ba102004a0100006fa21bffc033f0143820063e0c2242000d8046000d824200cc4242008d0242004de213ffcda213ff8d0213ff4d2213ff0d4213fecd6213fe8fa00a008fa213fe4fa056004fa213fe0fa056008fa213fdc2f3f0142ae05e394ee213fd82d3f0075ac05a274ec213fd4e0213fd0173f01389602e110d404a030d204a018d0013fe07fffa03288013fd0aa100008901000157fffd6450100000080a220012280000b90100015e8012000ea25200092100015901020017ffff79101000000a810000810800036e8213ffc400002c50100000080a2200122800005e801201ca81020011080001301000000e6052000fa04e000fa213ffc133f0144920260d4d00120047ffee3be88013ffcd0213ffcd601201cd401202892102005d00120007ffff64388013ffca810000888012004293f0031a805212410800019e8213ffcde213ffcda213ff8d0213ff4d2213ff0d4213fecd6213fe8fa00a008fa213fe4233f0144a20460f4e2213fe0961000089410000292102005d004a0007ffff62c88013fe0293f0031a8052124d0213ffcd0213ff888013ff8e8213ffce0012028e0213ff8de012008de213ff4d601200cd4012010d2012014d0012018da01201c7ffffe3388013ff4c2012020da0060008c21a0108b196010ba10200398100006fa21bffc173f01449602e12cd6232000d4012028d4232008d2036000d2232004d821202cd601201c9410000992100008d0012000de012024353f013bb406a06c81c6a0048801202cda213ffcd0213ff8d2213ff4d4213ff0d6213fecde213fe8d000a0049a013ffc400002d388013fe8de012000353f0066b406a0fc81c6a00488012020da213ffcd0213ff8d2213ff4d4213ff0d6213fecde213fe8fa00a004fa213fe4fa00a008fa213fe0d000a00c9a013ffc400002f088013fe0ea01201ce80560008c21a0148b196014ba102004a6100006fa21bffc253f0144a404a3fce424e000e2052000e224e00ce0012020e024e008de012018de24e004921000137fff218501000000d20120047fff227a01000000c2012000d0206000da01200881c3600688012028da213ffcd0213ff8d2213ff4d4213ff0d6213fecde213fe8d000a0049a013ffc4000034788013fe88c21a00c8b19600cba102002aa100006fa21bffca8102001e8256004d0256000d0213ffcd0213ff8113f00319002207c7fff232488013ff87fff23370100000080a2200122800012a60120008c21a0088b1960083b100000ba076001a6100006fa21bffc253f0031a404a07ce424e000a2012000a0103ffde02460009e012000e623e004108000098c21a00ca4102001e424e000a2012000213f0031a004207ce02460048c21a00c8b19600cba1020029e100006fa21bffcc2012000c223e000da012004da23e0048c21a0108b196010ba10200390100006fa21bffcde222008193f003198032070d8222004ea222000de012008353f0065b406a0fc81c6a00488012028de213ffcda213ff8d0213ff4fa00a004fa213ff0ea012004ea213fece800a008e8213fe87ffffd8d88013fe8e6012008e404e0008c21a0188b196018ba102005a2100006fa21bffc213f0146a0042040e0246000de04fff8de246010c2012010c224600cda04a000da246008d8012004d8246004d0213ffc9610000c9410000d92100011d00120007fffdf4f88013ffcd601200cd402e0008c21a0108b196010ba10200392100006fa21bffc113f014690022174d0226000c4012014c4226008ee02a000ee2260048c21a0148b196014ba102004ac100006fa21bffc2b3f0146aa05622cea25a000ee25a00ce8012008e825a008d225a00496100016153f00f49402a074d2012004d00120007fffb40f01000000d0012004e601201081c4e0068801201cde213ffcda213ff8d0213ff4d2213ff0d4213fecd6213fe8fa00a008fa213fe4ea012004ea213fe0e800a004e8213fdc941020057ffffd4088013fdcd0213ffce6012020e6213ff8e4012000e4213ff4d6012004d4012008d201200cd0012010da0120147ffffd3488013ff4e2012018e00460008c21a0108b196010ba1020039e100006fa21bffc033f0146820062a0c223e000da012020da23e008d8042000d823e0048c21a0148b196014ba10200496100006fa21bffc153f01469402a358d422e000d822e00cd2012014d222e008de22e004153f00f49402a07492100008d00120007fffb3d001000000d0012000c401201c81c0a00688012028113f00309002232881c3e00688012008d0213ffcd0213ff8de213ff4aa102001ea213ff0a8013ff8e8213fec9610200194102001130000279202603d113f000f900220cc7fff15d988013fec8c21a00c8b19600cba10200290100006fa21bffce6012004e6222000e4012008e4222004de012000353f0058b406a37081c6a00488012014|@3031,131071|60,4,$2995+86 208,4,@799 288,5,@2130 308,4,@1507 320,4,@1112 328,5,@1114 364,4,@1702 380,4,I48 392,4,I24 476,4,@1702 520,4,@2996 556,4,@2997 568,4,@1702 584,4,@2938 604,5,@2400 620,5,@2755 668,4,@2998 696,5,@2932 732,5,@2944 768,5,@2102 804,4,@2999 832,5,@2932 848,5,@2943 896,4,@375 904,5,@1515 948,5,@1517 1036,5,@3000 1068,5,@1545 1108,5,@3002 1184,5,@2659 1244,5,@2945 1280,4,@3006 1320,4,@694 1328,5,@2966 1404,4,@3007 1480,4,@2997 1492,4,@1702 1508,4,@2938 1528,5,@2400 1544,5,@2755 1580,5,@2943 1600,5,@3008 1644,4,@3010 1656,5,@496 1684,5,@2932 1700,4,@799 1748,4,@3011 1776,5,@2932 1784,4,@799 1880,4,@3012 1932,4,@2966 1980,5,@3013 1992,4,@1624 2056,5,@3014 2092,4,@3016 2132,5,@1595 2144,5,@1603 2204,5,@3018 2252,4,@788 2260,5,@1613 2268,5,@1615 2312,4,@788 2364,4,@788 2436,4,@787 2456,4,@1617 2544,4,@3024 2608,5,@2812 2644,4,@3027 2692,4,@3028 2724,4,@2554 2740,5,@2575 2900,4,@3029 2948,4,@3030 2976,4,@2554 2992,5,@2575 3016,4,@766 3068,4,9999 3076,4,@375 3084,5,@1515 3132,4,@1517 2996:C2,52|9e13e002f606201880a1001b8bd02018d0213ffcd6036004d403600892102005d003600c353f0137b406a27c81c6a00488013ffc|@2936,131071|36,4,@2932 2997:S11|436f6e7374727563746f72 2998:S48|4964656e746966696572206265666f72652060617327206d757374206e6f74206265206120636f6e7374727563746f72 2999:S41|436f6e7374727563746f72206d757374206265206170706c69656420746f20736f6d657468696e672e 3000:C2,92|9e13e0028c21a0108b196010ba10200384100006fa21bffcd620a008d420a00496102005d620a0008c21a0148b196014ba10200494100006fa21bffcd222a00cc422a00892103ffdd222a004d022a0009010000a81c3e00601000000|@3001,65679| 3001:S27|5354525543545f56414c5328292e6d616b654c6f63616c56283429 3002:C2,500|9e13e002f606201880a1001b8bd02018de213ffcd0213ff8d2213ff4d4213ff0d6213fec133f005892026104d002a0241b3f00389a0360407ffef4dc88013fec80a22001228000060100000090102001c401201081c0a00688012018133f000f92026100d001200c1b0000839a0360d8f40360009fc6a0000100000080a22001228000040100000010800046d201200c133f002892026398d001200c1b0000839a0360d8f40360009fc6a0000100000080a22001228000040100000010800039d201200c133f0032920260c8d001200c1b0000839a0360d8f40360009fc6a0000100000080a2200122800004010000001080002cd201200c133f003192026118d001200c1b0000839a0360d8f40360009fc6a0000100000080a2200122800004010000001080001fd201200c133f012192026210d001200c1b0000839a0360d8f40360009fc6a0000100000080a2200122800004c401201410800012d201200c80a0a0012280002190102001133f009392026374d001200c1b0000839a0360d8f40360009fc6a0000100000080a2200132800004d201200c1080001490102001113f0143900222c07ffee17d01000000133f0143920262e47ffee17901000000d0212014d6012000d401200892102005d0012004de012010353f0137b406a27c81c6a00488012014ee01201081c5e00688012018|@3005,131071|36,4,@1507 48,4,@1112 56,5,@1114 92,4,@379 104,4,I24 144,4,@534 156,4,I24 196,4,@851 208,4,I24 248,4,@798 260,4,I24 300,4,@2809 312,4,I24 364,4,@1891 376,4,I24 416,4,@3003 424,5,@496 432,4,@3004 440,5,@496 472,4,@2932 3003:S25|526562696e64696e67206f722073706563696679696e672022 3004:S12|2220697320696c6c6567616c 3005:S39|50415253455f5452454528292e7061737332283629636865636b466f724275696c74496e283529 3006:C2,156|9e13e002f606201880a1001b8bd02018c4036004de213ffcd0213ff8fa036008fa213ff4133f00d3920262f4d000a0241b3f00389a0360407ffef43e88013ff4ee012004d0213ffc113f00d49002201cda05e00cf40360009fc6a00088013ffcec012008113f001f9002225cda05a000f40360009fc6a00001000000d4012008d2012000d0012004de01200c353f00c1b406a19c81c6a00488012010|@2965,131071|36,4,@2272 48,4,@1112 56,5,@1114 72,4,@2279 100,4,@485 140,4,@2180 3007:C2,52|9e13e002f606201880a1001b8bd02018d0213ffcd6036004d403600892102005d003600c353f0137b406a27c81c6a00488013ffc|@2936,131071|36,4,@2932 3008:C2,92|9e13e002f606201880a1001b8bd02018de213ffcd2022000113f0075900222881b0000839a0360d8f40360009fc6a00088013ffc80a22001228000069010200190102005c401200081c0a00688012004c401200081c0a00688012004|@3009,131071|24,4,@1703 32,4,I24 3009:S33|5354525543545f56414c5328292e6973556e646566696e656456616c7565283129 3010:S21|206973206e6f74206120636f6e7374727563746f72 3011:S46|436f6e7374727563746f7220696e2061207061747465726e20776173206e6f7420616e206964656e746966696572 3012:C2,156|9e13e002f606201880a1001b8bd02018c4036004de213ffcd0213ff8fa036008fa213ff4133f00d3920262f4d000a0241b3f00389a0360407ffef3bd88013ff4ee012004d0213ffc113f00d49002201cda05e00cf40360009fc6a00088013ffcec012008113f001f9002225cda05a000f40360009fc6a00001000000d4012008d2012000d0012004de01200c353f00c1b406a19c81c6a00488012010|@2965,131071|36,4,@2272 48,4,@1112 56,5,@1114 72,4,@2279 100,4,@485 140,4,@2180 3013:C2,164|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffc9010200181c3e00601000000da213ff8fa022004fa213ff4c4036008c4213ff0ee022000ee213fecd6037ff0d4037ff4d2037ff8d0037ffcda0360007ffffb2888013fecd0213ffcd0012000da0120047fffffe588013ffc8c21a00c8b19600cba102002ac100006fa21bffcd025a004ea012000ea25a00090100016e801200c81c5200688012010|@586,131071|88,5,@2995 3014:C2,240|9e13e002f606201880a1001b8bd0201880a2200132800005c40220009010200181c3e00601000000de213ffcda213ff8fa00a000fa213ff4fa022004fa213ff0ee036008ee213fecec00a004ec213fe8d6037ff0d4037ff4d2037ff8d0037ffcda0360007ffffaf588013fe8d0213ffcd0213ff894013ff892100008d00120047fff1ccd88013ff88c21a00c8b19600cba102002aa100006fa21bffce8012000e8256000e6012004e6256004ea213ffcd0012008da0120107fffffd288013ffc8c21a00c8b19600cba102002a4100006fa21bffcd024a004e2012000e224a00090100012e001201881c420068801201c|@3015,131071|100,5,@2995 128,5,@1583 3015:S65|50415253455f5452454528292e706173733228362961737369676e56616c75657328362970726f636573735061747465726e2836296d61704c6162656c73283129 3016:C2,52|9e13e002f606201880a1001b8bd02018d0213ffcd6036004d403600892102005d003600c353f0137b406a27c81c6a00488013ffc|@3017,131071|36,4,@2932 3017:S64|50415253455f5452454528292e706173733228362961737369676e56616c75657328362970726f636573735061747465726e283629706174547970652d283129 3018:C2,164|9e13e002f606201880a1001b8bd02018d0213ffcd0213ff8de213ff4da213ff0d0213fec84102001c4213fe8ae013ff8ee213fe49610200194102001130000279202603d113f000f900220cc7fff135b88013fe48c21a00c8b19600cba10200290100006fa21bffcec01200cec222000ea012010ea2220047fff139901000000d0213ffcd00120009a0120104000000d88013ffcd0012000e801200c81c5200688012018|@3023,131071|60,4,9999 68,4,@375 76,5,@1515 120,5,@1517 140,5,@3019 3019:C2,256|9e13e002f606201880a1001b8bd0201880a2200132800005c4037ff49010200181c3e00601000000de213ffcda213ff8fa022004fa213ff4ee00a008ee213ff0ec022000ec213fecd600bff0d400bff4d200bff8d000bffcda00a0007ffffa4b88013fecea012004e8057ff4e6052000e404e0008c21a0108b196010ba102003a2100006fa21bffc213f0145a0042270e0246000de052004de246008c204a000c22460048c21a0148b196014ba1020049a100006fa21bffc193f014598032328d8236000c223600cd6053ffcd6236008e22360049610000d153f00f49402a074d2057fec7fffb0e501000000d0012000da012004de01200810bfffc38801200c|@3022,131071|92,5,@2995 136,4,@3020 184,4,@3021 216,4,@2554 228,5,@2575 3020:C2,156|9e13e002f606201880a1001b8bd02018c4036004de213ffcd0213ff8fa036008fa213ff4133f00d3920262f4d000a0241b3f00389a0360407ffef26c88013ff4ee012004d0213ffc113f00d49002201cda05e00cf40360009fc6a00088013ffcec012008113f001f9002225cda05a000f40360009fc6a00001000000d4012008d2012000d0012004de01200c353f00c1b406a19c81c6a00488012010|@2965,131071|36,4,@2272 48,4,@1112 56,5,@1114 72,4,@2279 100,4,@485 140,4,@2180 3021:C2,88|9e13e002f606201880a1001b8bd02018c4022008c4213ffcee03600cee213ff8ec036008ec213ff4ea036004ea213ff0d6022004153f004c9402a0a0d2022000113f013b900222fc353f00f5b406a28881c6a00488013ff0|@2969,131071|52,4,@1345 64,4,@2968 72,4,@2570 3022:S79|50415253455f5452454528292e706173733228362961737369676e56616c75657328362970726f636573735061747465726e28362970726f636573734c6973742831296170706c794c697374283129 3023:S67|50415253455f5452454528292e706173733228362961737369676e56616c75657328362970726f636573735061747465726e28362970726f636573734c697374283129 3024:C2,136|9e13e002f606201880a1001b8bd02018c40360108c21a0148b196014ba102004ae100006fa21bffc2d3f0146ac05a0e4ec25e000ec036008ec25e00cea03600cea25e008e8036004e825e004273f0121a604e0b8e6213ffc253f0065a404a010e4213ff8ee213ff4173f01219602e0d0d400a030d200a020353f00e1b406a19c81c6a00488013ff4|@3026,131071|40,4,@3025 76,4,@2804 88,4,@1611 104,4,@2805 120,4,@2400 3025:C2,52|9e13e002f606201880a1001b8bd02018d0213ffcd6036004d403600892102005d003600c353f0137b406a27c81c6a00488013ffc|@2936,131071|36,4,@2932 3026:S55|50415253455f5452454528292e706173733228362961737369676e56616c756573283629707441737369676e5479706573283329283129 3027:C2,156|9e13e002f606201880a1001b8bd02018c4036004de213ffcd0213ff8fa036008fa213ff4133f00d3920262f4d000a0241b3f00389a0360407ffef1ab88013ff4ee012004d0213ffc113f00d49002201cda05e00cf40360009fc6a00088013ffcec012008113f001f9002225cda05a000f40360009fc6a00001000000d4012008d2012000d0012004de01200c353f00c1b406a19c81c6a00488012010|@2965,131071|36,4,@2272 48,4,@1112 56,5,@1114 72,4,@2279 100,4,@485 140,4,@2180 3028:C2,88|9e13e002f606201880a1001b8bd02018c4022008c4213ffcee03600cee213ff8ec036008ec213ff4ea036004ea213ff0d6022004153f004c9402a0a0d2022000113f013b900222fc353f00f5b406a28881c6a00488013ff0|@2969,131071|52,4,@1345 64,4,@2968 72,4,@2570 3029:C2,156|9e13e002f606201880a1001b8bd02018c4036004de213ffcd0213ff8fa036008fa213ff4133f00d3920262f4d000a0241b3f00389a0360407ffef16088013ff4ee012004d0213ffc113f00d49002201cda05e00cf40360009fc6a00088013ffcec012008113f001f9002225cda05a000f40360009fc6a00001000000d4012008d2012000d0012004de01200c353f00c1b406a19c81c6a00488012010|@2965,131071|36,4,@2272 48,4,@1112 56,5,@1114 72,4,@2279 100,4,@485 140,4,@2180 3030:C2,88|9e13e002f606201880a1001b8bd02018c4022008c4213ffcee03600cee213ff8ec036008ec213ff4ea036004ea213ff0d6022004153f004c9402a0a0d2022000113f013b900222fc353f00f5b406a28881c6a00488013ff0|@2969,131071|52,4,@1345 64,4,@2968 72,4,@2570 3031:S53|50415253455f5452454528292e706173733228362961737369676e56616c75657328362970726f636573735061747465726e283629 3032:S39|5061747465726e20646f6573206e6f74206465636c61726520616e79207661726961626c65732e 3033:S69|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c4465636c61726174696f6e2834296d617050726f63657373283229 3034:C2,804|9e13e002f606201880a1001b8bd0201880a260013280000fc402600080a2a00132800005de213ffc9010200181c3e00601000000113f0147900223ccf40620209fc6a00088013ffc90102001c402600080a0a00132800006808aa001d20260049010200510bfffe9f6062018328000a8de213ffc80a2200122800012ee037ffcec037ffcea05bff88c21a0108b196010ba102003ae100006fa21bffc293f0148a8052008e825e000e8037fd8e825e008e6056018e625e00410800005ea037ffcec05fff8ee05a018ea037ffce8057ff8e6037ff0ec037ff48c21a0148b196014ba102004a4100006fa21bffc233f0148a2046080e224a000e204e004e224a00ce005a004e024a008c205202cc224a0048c21a0388b196038ba10200d98100006fa21bffcd6052030d6232030e423202ce4052028e4232028ea052024ea232024d6052020d6232020d605201cd623201cee232018ee052014ee232014ee052010ee232010ee05200cee23200ce4052008e4232008e2052004e2232004e6052000e6232000e0037ffcde213ffcda213ff8d0213ff4fa00a004fa213ff0fa00a008fa213fecfa026004fa213fe8fa02a000fa213fe4fa02a004fa213fe0d4042008d4213fdcd2037fe8d2213fd8d6013fec9410000cd2013ff0d0013ff0da0420007fffe8c888013fd8c4012018ee00bffcec05e0008c21a0108b196010ba102003aa100006fa21bffc293f0148a8052124e8256000e605fffce6256008e405a000e42560048c21a0148b196014ba102004a2100006fa21bffc213f0148a00421dce0246000e424600cde01200cde246008ea24600496100011153f00f49402a07492100008d00120047fffaeb601000000c201201480a060012280001fd4012000da012010d603600080a2fff53280000780a2e019da036008f606201880a1001b8bd0201830bffff832800003981020019810200580a320013280000fd4012000d4012018d202bffcd0026000053f01488400a250c4213ffcd601200cd4027ffc92102005d00220007fffefc288013ffcd4012000d2012008d0012014da012018de01201c10bfff4088012020113f0147900223ccf40620209fc6a00088013ffc90102001|@3042,131071|52,4,@3035 156,4,@3037 236,4,@3038 480,5,@2927 520,4,@3039 568,4,@3040 600,4,@2554 616,5,@2575 716,4,@3041 744,5,@2932 780,4,@3035 3035:O3|@24,@397,@3036 3036:S35|636865636b54797065733a206261646c792d666f726d65642070617273652d74726565 3037:C2,92|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d0213ff4da036008f40360009fc6a00088013ff480a2200132800009c4012008c4012004d0012000da00a004de012008f403600081c6a0048801200c81c0a0068801200c|@1463,131071| 3038:C2,136|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d0213ff4da03600cf40360009fc6a00088013ff480a2200132800014c4012008c4012004d0012000da00a008f40360009fc6a0000100000080a2200132800009ee012008ee012004d0012000da05e004de012008f403600081c6a0048801200c81c5e0068801200c81c0a0068801200c|@1463,131071| 3039:C2,156|9e13e002f606201880a1001b8bd02018c4036004de213ffcd0213ff8fa036008fa213ff4133f00d3920262f4d000a0241b3f00389a0360407ffeefbf88013ff4ee012004d0213ffc113f00d49002201cda05e00cf40360009fc6a00088013ffcec012008113f001f9002225cda05a000f40360009fc6a00001000000d4012008d2012000d0012004de01200c353f00c1b406a19c81c6a00488012010|@2965,131071|36,4,@2272 48,4,@1112 56,5,@1114 72,4,@2279 100,4,@485 140,4,@2180 3040:C2,88|9e13e002f606201880a1001b8bd02018c4022008c4213ffcee03600cee213ff8ec036008ec213ff4ea036004ea213ff0d6022004153f004c9402a0a0d2022000113f013b900222fc353f00f5b406a28881c6a00488013ff0|@2969,131071|52,4,@1345 64,4,@2968 72,4,@2570 3041:S51|526563757273697665206465636c61726174696f6e206973206e6f74206f662074686520666f726d2060666e206d6174636827 3042:S69|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c4465636c61726174696f6e283429636865636b5479706573283329 3043:C2,364|9e13e002f606201880a1001b8bd0201880a2200132800005c40220009010200181c3e0060100000080a0a00132800005808a6001d002200410bffff4f606201832800045de213ffcde213ffcda213ff8fa00a008fa213ff4fa022004fa213ff0fa026000fa213fecfa026004fa213fe8fa037fe8fa213fe4d000a0044000004388013fe4ee012014ec05fffcea05a0008c21a0108b196010ba102003a8100006fa21bffc273f014aa604e228e6252000e405bffce4252008e2056000e2252004e0012010e0213ffce8213ff89610001194100008d2012000d0012008400001ca88013ff8de012014c203fffcda0060008c21a0148b196014ba10200498100006fa21bffc173f014d9602e060d6232000d4036000d423200cd2007ffcd2232008d0012010d02320049410000cd2006008d00120084000042801000000d2012004d001200cda012014de01201810bfffae8801201c113f014e90022088f40620209fc6a00088013ffc90102001|@3077,131071|124,5,@3044 164,4,@3048 220,5,@3049 260,4,@3063 308,5,@3064 340,4,@3075 3044:C2,1092|9e13e002f606201880a1001b8bd02018c40220008088a0012280002a0100000080a0bfcd268000270100000080a0a03934800024010000002f3f0149ae05e0b6ba00a031fa05c01d81c5c01d01000000000003b60000006e0000006e0000017a0000006e000000860000006e0000006e0000006e0000006e0000016e0000006e0000006e0000006e000003260000006e0000006e0000006e0000006e0000007a0000006e0000025a000000920000006e0000006e0000006e00000192000001869010200181c3e006010000009010200581c3e006010000009010200581c3e00601000000c402200480a0a00132800005ee037ffc9010200581c3e00601000000ec05e000ea05a000de213ffcda213ff8c4213ff4133f005892026104d00560241b3f00389a0360407ffeeeb388013ff480a220013280002090102001e8012000a610200580a520013280000680a4e00190100013e401200881c4a0068801200c2280000ba4102001fa052004fa213ffcd0052000da0120047fffffa288013ffca410000810800006a6100012fa052004fa213ffc88013ffca6100012e801200088012004f606201880a1001b8bd0201830bfffe5e801200881c520068801200cd002200810bfff91f60620189010200581c3e006010000009010200581c3e00601000000ec037ffcea05a000e8056000de213ffcda213ff8fa022004fa213ff4133f005892026104d00520241b3f00389a0360407ffeee7888013ff480a220013280002090102001e6012000a410200580a4e0013280000680a4a00190100012e201200881c460068801200c2280000ba2102001fa04e004fa213ffcd004e000da0120047fffff6788013ffca210000810800006a4100011fa04e004fa213ffc88013ffca4100011e601200088012004f606201880a1001b8bd0201830bfffe5e601200881c4e0068801200cec037ffcea05a000e8056000de213ffcda213ff8fa02200cfa213ff4133f005892026104d00520241b3f00389a0360407ffeee4688013ff480a220013280002190102001e6012000a410200580a4e00132800006e204e00090100012e201200881c460068801200c80a4a0012280000ba0102001fa04e004fa213ffcd0046004da0120047fffff3488013ffca010000810800006a4100010fa04e004fa213ffc88013ffca4100010e601200088012004f606201880a1001b8bd0201830bfffe4e601200881c4e0068801200cec037ffcea05a000e8056000de213ffcda213ff8fa022004fa213ff4fa022008fa213ff0133f005892026104d00520241b3f00389a0360407ffeee1188013ff080a220013280001090102001d0012004400000260100000080a220012280000790102001d0012000da012008de01200c10bfff0788012010e601200c81c4e00688012010e601200c81c4e00688012010ec037ffcea05a000e8056000de213ffc133f005892026104d00520241b3f00389a0360407ffeedf288013ffc901a2004e601200081c4e00688012004|@3047,131071|56,4,$3044+82 276,4,@1507 288,4,@1112 296,5,@1114 512,4,@1507 524,4,@1112 532,5,@1114 712,4,@1507 724,4,@1112 732,5,@1114 924,4,@1507 936,4,@1112 944,5,@1114 968,5,@3045 1048,4,@1507 1060,4,@1112 1068,5,@1114 3045:C2,160|9e13e002f606201880a1001b8bd02018c402200080a0bfe13280001b80a0bff5ee022008ec05e000aa10000fe8022004901000167fffcd400100000080a220012280000f90102001ea213ffc133f012192026210901000141b0000839a0360d8f40360009fc6a00088013ffc901a2004e601200081c4e0068801200481c56006010000003280000590102001d002200810bfffdef606201881c3e00601000000|@3046,131071|52,5,@2755 76,4,@2809 88,4,I24 3046:S78|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c4465636c61726174696f6e28342969734e6f6e526566436f6e7374727563746f72283129 3047:S71|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c4465636c61726174696f6e2834296e6f6e457870616e73697665283129 3048:C2,156|9e13e002f606201880a1001b8bd02018c4036004de213ffcd0213ff8fa036008fa213ff4133f00d3920262f4d000a0241b3f00389a0360407ffeed7e88013ff4ee012004d0213ffc113f00d49002201cda05e00cf40360009fc6a00088013ffcec012008113f001f9002225cda05a000f40360009fc6a00001000000d4012008d2012000d0012004de01200c353f00c1b406a19c81c6a00488012010|@2965,131071|36,4,@2272 48,4,@1112 56,5,@1114 72,4,@2279 100,4,@485 140,4,@2180 3049:C2,240|9e13e002f606201880a1001b8bd020188c21a0188b196018ba10200584100006fa21bffc2f3f014aae05e3ecee20a000ee012004ee20a010d620a00cd020a008ec012000ec20a0048c21a0188b196018ba102005aa100006fa21bffc293f014ba80522ace8256000d4256010d225600cd6256008c4256004a61000088c21a00c8b19600cba10200290100006fa21bffc253f014ca404a330e4222000ea222004a210000f7fffb31001000000e2213ffca0100008901000139a100010f40360009fc6a00088013ffc9e100008901020059a10000ff40360009fc6a0000100000090102001c201200081c060068801200c|@3062,131071|36,4,@3050 92,4,@3054 144,4,@3058 164,5,@2587 3050:C2,184|9e13e002f606201880a1001b8bd020188c21a01c8b19601cba10200684100006fa21bffc2f3f014bae05e0c0ee20a000ee03600cee20a014d020a010d0036008d020a00cd220a008d2036004d220a004ec05e004ec213ffcea05e008ea213ff8e805e00ce8213ff4e605e010e6213ff0e405e014e4213fece205e018e2213fe8e005e01ce0213fe4c205e020c2213fe0d805e024d8213fdcd605e00094102005d203601090100002353f0042b406a05081c6a00488013fdc|@3053,131071|36,4,@3051 168,4,@1265 3051:C2,348|9e13e002f606201880a1001b8bd02018aa10000fa810000da6100008901020017fff68e401000000de052014ea213ffce8213ff8e6213ff4d0213ff0133f00d3920262f4d003e0241b3f00389a0360407ffeecd288013ff0c2012004d0213ffc113f0025900222b4da006018f40360009fc6a00088013ffcda012008d801200cd0032010da03600cf40360009fc6a00001000000d6012008113f001f9002225cda02e000f40360009fc6a00001000000d401200c92102005d2213ffcd6012004d002a00cd4012008d20120007fff69fd88013ffcc4012008113f001f9002225cda00a000f40360009fc6a00001000000ee012008ec01200cd005a008da05e00cf40360009fc6a00001000000ea012008113f001f9002225cda056000f40360009fc6a00001000000e801200cd0012008da052004f40360009fc6a00001000000e601200890102001da04e008de012010f403600081c6a00488012014|@3052,131071|32,5,@2086 60,4,@2272 72,4,@1112 80,5,@1114 96,4,@501 152,4,@485 204,5,@2097 216,4,@485 272,4,@485 3052:S49|545950455f5452454528292e616c6c6f7747656e6572616c69736174696f6e283629676976654572726f72283229283129 3053:S46|545950455f5452454528292e616c6c6f7747656e6572616c69736174696f6e283629676976654572726f72283229 3054:C2,988|9e13e002f606201880a1001b8bd02018ae10000fac10000daa100008901000097fff190e0100000080a22001228000ea90100015a8100017901000097fff19180100000084100008d200a004d000a0007fff6e0f01000000ee05a00cb825e001ba222001811f401c268000d990100015d200a004d000a0007fff6e05010000001f0000279e03e03db823e001ba222001811f401c228000ce90100015d200a004d000a0007fff6ca00100000092100002a6100008901000137fff6e650100000080a2200122800006a4102001901000137fff6e7501000000a4102005de05a008e8213ffcec213ff8ea213ff4d2213ff0e4213fec133f005892026104d003e0241b3f00389a0360407ffeec2988013fecc201200cda00601080a3600132800010d4012000d801200496100008d2032004d00320007fff6df60100000080a220012280000480a2e00110800005941020052280000394102005d401200080a2a0012280000801000000d600600cb822e001b91f20049807200110800005d6006008190000279803203dd6006008d4213ffcd8213ff8133f005892026104d002e0241b3f00389a0360407ffeec0188013ff8d401200cae100008d202a004d002a0007fffaf970100000080a2200122800016ec012000ec01200480a5a00122800012ec012000ea01201080a560012280000eec012000e6012014133f014c920262a4113f011b9002204cda04e004f40360009fc6a00001000000a81020011080001bea01200c80a5a00532800017e8012010ea01201080a5600122800013e801201080a5e00122800010e8012010e801200880a520013280000ce8012010e6012014133f014c920262cc113f011b9002204cda04e004f40360009fc6a00001000000a8102001ea01200cd2056004d00560007fff687001000000e601200480a4e0012280000aa4102001a2100008d2056004d00560007fffaf5a01000000a410000810800004d2056004a2100008d2056004d00560007fff6d8e01000000d0213ffcd0213ff8e8213ff4d0213ff0a0013ff8e0213fec9610001294100011d2012000113f000f900220cc7fff0c2688013fec8c21a00c8b19600cba10200290100006fa21bffcde012004de222000c2012008c22220047fff0c6401000000981000089010000c7fff18450100000080a2200122800008010000009010000c7fff1850010000009610000810800009d4012018113f003890022020f40620209fc6a0000100000096102001d4012018d202a004d002a0007fff6be401000000921000089010000b7fff1851010000009210000c9010000a7fff184d01000000d0012000d201202481c260068801202881c520060100000081c5e00601000000|@3057,131071|32,5,@1606 60,5,@1607 80,5,@2110 120,5,@2110 128,4,9999 164,5,@2100 184,5,@2120 208,5,@2122 244,4,@1507 256,4,@1112 264,5,@1114 308,5,@2112 384,4,9999 404,4,@1507 416,4,@1112 424,5,@1114 448,5,@2577 504,4,@3055 512,4,@2784 608,4,@3056 616,4,@2784 656,5,@2090 692,5,@2577 724,5,@2112 768,4,@375 776,5,@1515 820,5,@1517 836,5,@1606 860,5,@1607 880,4,@1110 916,5,@2100 932,5,@1608 948,5,@1608 3055:S29|696e636c75646573206120667265652074797065207661726961626c65 3056:S40|696e636c756465732061206672656520696d70657261746976652074797065207661726961626c65 3057:S44|545950455f5452454528292e616c6c6f7747656e6572616c69736174696f6e28362967656e6572616c283229 3058:C2,60|9e13e002841000088c21a0108b196010ba10200390100006fa21bffc2f3f014cae05e388ee222000ee036004ee222008c422200481c3e00601000000|@3061,98465|28,4,@3059 3059:C2,36|9e13e002f606201880a1001b8bd02018d2036004da036008f403600081c6a00401000000|@3060,131071| 3060:S47|545950455f5452454528292e616c6c6f7747656e6572616c69736174696f6e28362967656e6572616c283129283129 3061:S44|545950455f5452454528292e616c6c6f7747656e6572616c69736174696f6e28362967656e6572616c283129 3062:S34|545950455f5452454528292e616c6c6f7747656e6572616c69736174696f6e283629 3063:C2,52|9e13e002f606201880a1001b8bd02018d0213ffcd6036004d403600892102005d003600c353f0137b406a27c81c6a00488013ffc|@2936,131071|36,4,@2932 3064:C2,176|9e13e002f606201880a1001b8bd020188c21a0108b196010ba10200384100006fa21bffc2f3f014dae05e17cee20a000d220a008d420a004ac1000088c21a00c8b19600cba10200290100006fa21bffc2b3f014daa056344ea222000c4222004a810000f7fffb0ac01000000e8213ffca6100008901000169a100013f40360009fc6a00088013ffca4100008901020059a100012f40360009fc6a0000100000090102001e201200081c4600688012004|@3074,131071|36,4,@3065 80,4,@3070 100,5,@2587 3065:C2,248|9e13e002f606201880a1001b8bd02018ae10000fac10000daa100008901000097fff6d000100000080a220012280003190102005a8100017a6100016901000097fff6d090100000080a5600122800026d2022008d2022008901000097fff6d17010000004000002c01000000c404e008b820a001ba222001811f401c2480001b90102005901000097fff6d0c010000007fff6d2501000000e8213ffcfa04e004fa213ff892100008113f014d900222e07ffed78888013ff8921020a57ffed78501000000da012000f40360009fc6a0000100000090102001ee01200481c5e006880120089010200581c520060100000081c5e00601000000|@3069,131071|32,5,@2124 64,5,@2125 92,5,@2126 100,5,@3066 136,5,@2126 144,5,@2128 168,4,@3068 176,5,@496 188,5,@496 3066:C2,16|9e13e002d002200881c3e00601000000|@3067,129| 3067:S27|5354525543545f56414c5328292e74634c65744465707468283129 3068:S30|5479706520636f6e7461696e73206c6f63616c2064617461747970652028 3069:S50|545950455f5452454528292e636865636b466f724c6f63616c446174617479706573283329636865636b5479706573283229 3070:C2,60|9e13e002841000088c21a0108b196010ba10200390100006fa21bffc2f3f014dae05e39cee222000ee036004ee222008c422200481c3e00601000000|@3073,98465|28,4,@3071 3071:C2,36|9e13e002f606201880a1001b8bd02018d2036004da036008f403600081c6a00401000000|@3072,131071| 3072:S53|545950455f5452454528292e636865636b466f724c6f63616c446174617479706573283329636865636b5479706573283129283129 3073:S50|545950455f5452454528292e636865636b466f724c6f63616c446174617479706573283329636865636b5479706573283129 3074:S37|545950455f5452454528292e636865636b466f724c6f63616c446174617479706573283329 3075:O3|@24,@397,@3076 3076:S33|616c6c6f7747656e3a206261646c792d666f726d65642070617273652d74726565 3077:S67|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c4465636c61726174696f6e283429616c6c6f7747656e283229 3078:C2,116|9e13e002f606201880a1001b8bd02018c4036008de213ffcda213ff8fa022004fa213ff4da00a008f40360009fc6a00088013ff4ee012004ec05e004ea05a0008c21a00c8b19600cba102002a8100006fa21bffcea252004e6012000e6252000e825a00090102001e401200881c4a0068801200c|@2985,131071| 3079:S56|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c4465636c61726174696f6e283429 3080:C2,536|9e13e002f606201880a1001b8bd02018c4036004b820a001b9172004ae072001ac1000088c21a00c8b19600cba10200290100006fa21bffc2b3f014faa056014ea222000ee222004de213ffcda213ff8ec213ff4d2213ff0d4213fecee213fe8da026000f40360009fc6a00088013fe8e801200ce60120108c21a0108b196010ba10200390100006fa21bffc253f014fa404a0a0e4222000e204fff8e2222008e0012000e0222004da052000f40360009fc6a00001000000de012010c203e0008c21a0148b196014ba1020049a100006fa21bffc193f014f98032188d8236000d6006000d623600cd403fffcd4236008d203fff4d2236004d0213ffcd0213ff8d0213ff492013ff49010000d7fff857888013ff4d001201080a2200132800005fa022004841020011080000dee012010fa213ffcd00220009a012020400000ce88013ffcd001200088012004f606201880a1001b8bd0201830bffff080a5e00132800005fa05e004ac1020011080000dea01201cfa213ffcd005e0009a0120204000023788013ffcee01200088012004f606201880a1001b8bd0201830bffff0e80560008c21a0208b196020ba10200790100006fa21bffc273f0155a604e1b0e6222000e401200ce4222018e2056008e2222014e0057ffce0222010de052000de22200cc2057ff4c2222008da057ff8da222004da012000f40360009fc6a00001000000113f003190022124d801202081c3200688012024|@3123,131071|56,4,@3081 140,4,@3083 212,4,@3085 268,5,@2283 316,5,@3087 384,5,@3097 440,4,@3120 516,4,@799 3081:C2,40|9e13e002f606201880a1001b8bd02018d2036004d0022004353f013db406a33481c6a00401000000|@3082,131071|24,4,@2983 3082:S61|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737346756e4465636c61726174696f6e283329552d283129 3083:C2,124|9e13e002f606201880a1001b8bd02018c4036008de213ffcda213ff8fa022004fa213ff4d0022000da00a02cf40360009fc6a00088013ff4808a200132800009ee012004d2012000d0022000de012008353f013eb406a16081c6a0048801200cd205e004d0012000de012008353f013db406a33481c6a0048801200c|@3084,131071|80,4,@2987 108,4,@2983 3084:S69|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737346756e4465636c61726174696f6e2833293c7061747465726e3e2d283129 3085:C2,104|9e13e002f606201880a1001b8bd02018de213ffcfa03600cfa213ff8fa036008fa213ff4fa036004fa213ff0133f00d29202631c7ffed5a488013ff0c401200cd021200cd6012000d401200492102005d00120089e100002353f0137b406a27c81c6a0048801200c|@3086,131071|44,4,@2263 52,5,@496 88,4,@2932 3086:S64|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737346756e4465636c61726174696f6e2833296d7367466e283129 3087:C2,1000|9e13e002f606201880a1001b8bd02018c40220048088a001328000eede213ffcee00a000de213ffcda213ff8fa05e000fa213ff4fa05e008fa213ff0fa022008fa213fecfa02200cfa213fe8ec013ff488013fe8de05a00080a3fff53280000780a3e005ec05a008f606201880a1001b8bd0201830bffff83280000780a3ffe1ec05a004f606201880a1001b8bd0201830bffff13280000501000000ea05a00410800005ea213ffc2b000083aa0563d8ea213ffcd001200c1b3f01509a036258f40360009fc6a00088013ffcc2012014d0213ffcd0213ff8d0213ff49a102001da213ff098013ff8d8213fec9610200194102001d2007fec113f000f900220cc7fff08be88013fec8c21a00c8b19600cba10200290100006fa21bffcd6012004d6222000d4012008d42220047fff08fc010000008c21a0088b1960083b100000ba07600192100006fa21bffc84102001c42260008c21a0088b1960083b100000ba076001ae100006fa21bffcac102001ec25e000961000179410000992100008d001200c7ffff30f01000000ea012010e8012000e825600080a5200132800012a6102001e4012020e204bffce0046000d0213ffc1f3f01509e03e32cde213ff8d6012018d4047ffc92102005d00420007fffe79688013ff8a61000081080000401000000d0213ffc88013ffc13000083920263d8d00120101b0000839a0360d8f40360009fc6a0000100000080a220013280006d90102001e4012024e204bffce0046000d401201cd2042000d00120107fff0bab01000000de012024c203fffcda00600098102001d8213ffcd601201cd4036000d2007ffcd00120107ffff30088013ffcd6012024d402fffcd202bff8d0012010da026018f40360009fc6a00001000000808a20013280000501000000c402200010800005d0012024053f00758400a274d0012024ee023ffcec05e000ea05a000c4213ffc133f005892026104d00560241b3f00389a0360407ffee7ce88013ffc80a2200122800027a8102001d00120007fffc7300100000080a2200122800021a8102001e6012028e404fffce204a000fa046000fa213ffcfa04bffcfa213ff8133f003a92026228d00120147ffeeb4c88013ff892100008113f0150900223647ffed4b101000000133f0150920263787ffed4ad01000000d0213ffcd6012028d401200092102005d00120047fffe73288013ffca810000810800006e8012024d0213ffcd0213ff888013ff8e8012024e601200ce6252000e40120308c21a00c8b19600cba10200290100006fa21bffce6222004e201201ce2222000da04bfe4de012034f403600081c6a00488012038e401202881c4a0068801202c113f0150900223a4f40620209fc6a00088013ffc90102001|@3096,131071|168,4,I48 184,4,@3088 248,4,@375 256,5,@1515 300,5,@1517 388,5,@3000 436,4,@3091 464,5,@2932 492,4,I48 504,4,I24 560,5,@1545 604,5,@3002 668,4,@1702 696,4,@1507 708,4,@1112 716,5,@1114 740,5,@2755 788,4,@1197 800,5,@1212 812,4,@3092 820,5,@496 828,4,@3093 836,5,@496 864,5,@2932 976,4,@3094 3088:O1|@3089 3089:C2,100|9e13e002f606201880a1001b8bd02018c402200080a0bff53280000580a0a005d002200810bffff9f60620183280000c90102001de213ffcd00220047ffffff188013ffcb8222001b917200490072001de01200081c3e0068801200481c3e00601000000|@3090,65665| 3090:S67|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737346756e4465636c61726174696f6e2833296765744172697479283129 3091:S46|436c617573616c2066756e6374696f6e20646f6573206e6f74206861766520616e7920706172616d65746572732e 3092:S9|5661726961626c6520 3093:S34|20616c7265616479206465636c61726564206173206120636f6e7374727563746f72 3094:O3|@24,@397,@3095 3095:S41|66696e644e616d65416e6450617474733a206261646c792d666f726d65642070617273652d74726565 3096:S75|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737346756e4465636c61726174696f6e28332966696e644e616d65416e645061747473283129 3097:C2,140|9e13e002f606201880a1001b8bd02018c4022008ee00a000da213ffcfa022010fa213ff8fa022000fa213ff4fa02200cfa213ff0ee213fecde213fe8ec02200488013fe880a5a00132800006fa05a00490102001de01200081c3e00688012018fa213ffcd005a0009a0120144000000f88013ffcec01200088012004f606201880a1001b8bd0201830bfffef|@3119,131071|108,5,@3098 3098:C2,888|9e13e002f606201880a1001b8bd02018c4036000ee00bffcec05e0008c21a0148b196014ba102004aa100006fa21bffc293f0152a8052078e8256000e805a000e825600ce6022000e6256008e4022008e4256004d0213ffcd0213ff8d0213ff4a210000fa010000dc202200492013ff4901000157fff82dd88013ff4da042000d2037fecb8226001b917200490072001e0213ffce6213ff8e4213ff4d0213ff0c4043ff4ee00a000d0213fecd0213fe8e2213fe4c2213fe094013fe892100013901000179a012008400000fa88013fe0ec01201ce801200c80a5200132800006e60520042b3f0031aa05612410800027fa05bff880a4e00132800005fa05bff8ea0520001080001dfa05bff8fa213ffca410200188013ffc80a52001328000058c21a00c901000121080000f010000008b19600cba102002a2100006fa21bffce4246004e0052000e0246000a4100011e8052004f606201880a1001b8bd0201830bfffee7fff14ad01000000aa10000810800009e6012000fa213ffc88013ffc10800005e6012000fa213ffc88013ffce6012000ea24e000e4012020e204a000e0047ffcde043ff88c21a0148b196014ba10200482100006fa21bffc1b3f01549a03628cda206000d801202cd820600cd6047fe8d6206008d403e018d4206004d2047ff4d0047ff88c21a0148b196014ba10200484100006fa21bffc2f3f0154ae05e330ee20a000ec026004ec20a00cea022004ea20a008e803e02ce820a0048c21a0388b196038ba10200da6100006fa21bffcda03e030da24e030c424e02cc403e028c424e028ee03e024ee24e024d803e020d824e020e403e01ce424e01cc224e018c203e014c224e014d603e010d624e010e003e00ce024e00cd403e008d424e008d803e004d824e004d603e000d624e000da012020c2036000c4007ffcec00a008ec213ffcd2012014d2213ff8d601201894100013d2012004d0012004ea012020e6056000e204fffcda0460007fffde7688013ff8e0012020de043ffcd023e000c2042000da007ffcd80360008c21a0108b196010ba10200396100006fa21bffc153f01549402a3d4d422e000d201201cd222e008c4032000c422e0048c21a0148b196014ba102004ae100006fa21bffc2d3f0155ac05a08cec25e000c425e00cea012018ea25e008d625e00496100017153f00f49402a07492100008d001200cde012008353f00f6b406a1cc81c6a00488012030|@3118,131071|48,4,@3099 116,5,@2283 200,5,@3102 228,4,@799 356,5,@1624 444,4,@3114 508,4,@3115 720,5,@2927 772,4,@3116 820,4,@3117 852,4,@2554 872,4,@2575 3099:C2,104|9e13e002f606201880a1001b8bd02018de213ffcfa03600cfa213ff8fa036008fa213ff4fa036004fa213ff0133f0152920260fc7ffed2e888013ff0c401200cd021200cd6012000d401200492102005d00120089e100002353f0137b406a27c81c6a0048801200c|@3101,131071|44,4,@3100 52,5,@496 88,4,@2932 3100:S39|2068617320616c7265616479206265656e20626f756e6420696e207468697320636c617573652e 3101:S94|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737346756e4465636c61726174696f6e28332970726f6365737346756e28312970726f63657373436c617573652831296d657373466e283129 3102:C2,1212|9e13e002f606201880a1001b8bd02018c402600080a0bff53280005580a0a005d0213ffcd0213ff8de213ff4da213ff0d2213fecd4213fe8fa026004fa213fe494013ff8d20260087fffffee88013fe4de01200cda03fff4d4036000d202bffcd00260008c21a0188b196018ba10200584100006fa21bffc2f3f0153ae05e26cee20a000ee027ff8ee20a010ec012008ec20a00cec022000ec20a008ea03ffecea20a004961000159410001692100002d00120007fffcf0001000000e801200ce6053ff4e404e000e204bffce00460008c21a0108b196010ba1020039e100006fa21bffc033f015382006360c223e000da053ff0da23e008d8042000d823e0048c21a0148b196014ba10200496100006fa21bffc153f01549402a018d422e000d822e00cd2053fecd222e008de22e004153f00f49402a074d2012000d00120147fffa3be01000000d0012004c4012014c4222000ee012018ee22200490102001ec01201081c5a0068801201c3280004880a0bfe1b8222001b91f2004ae072001d0213ffcd0213ff8de213ff4da213ff0d4213fecfa026008fa213fe894013ff8d2026004901000177fffff9688013fe8ec012008ea05bffcea213ffce8012000e8213ff8d605bfe89410200192102001d005bfece605bff4e404e000da04bffc7fffecda88013ff8e2012008e0047ff4de042000c203fffcda0060008c21a0108b196010ba10200398100006fa21bffc173f01549602e08cd6232000d4047ff0d4232008d2036000d2232004d0213ffcd8213ff8d6047fec9410000992100008d00120107fffe82588013ff88c21a00c8b19600cba10200284100006fa21bffcee012018ee20a004ec012000ec20a000ea012008d0256000c425600490102001e801201081c520068801201c3280006a80a0bfedee037ff4ac10000faa10000da8100008d005fff07fff783601000000ec213ffcea213ff8e8213ff4d4213ff0fa026004fa213fecfa026008fa213fe8d0213fe492100008d0013fec1b0000839a0360d8f40360009fc6a00088013fe480a2200122800004e601201410800021c2012010e404fff4e204a000e0047ffcde042000fa03e000fa213ffcfa04fff0fa213ff8fa04ffecfa213ff4d2012008113f0154900221447ffed1e088013ff4133f0154920261747ffed1dc01000000d201200c7ffed1d901000000d0213ffcd6012000d401200492102005d00120087fffe45e88013ffc8801200cc201201080a0600132800004da0120141080001bd0012014d8037ff4d6032000d402fffcd202a000fa026000fa213ffcfa037ff0fa213ff8fa037fecfa213ff4133f015492026194113f0154900221bc7ffed1bb88013ff4d0213ffcd6012000d401200492102005d00120087fffe44088013ffc8801200cd0012014c4023ff4ee012004ec00bff0ec25e000901000167fffb7f501000000ea01200cd0256000a8102001e825600490102001e601201881c4e0068801201c3280000aee037ff42f3f0031ae05e124ee22a000ac102001ec22a0049010200181c3e00601000000ec05e000ea05bffce8056000de213ffcd4213ff8273f0154a604e1ece6213ff4d6037fec9410000992102005d00520007fffe41788013ff4e4012000233f0031a2046124e224a000a0102001e024a00490102001de01200481c3e00688012008|@3113,131071|120,4,@3103 180,5,@2812 228,4,@3105 276,4,@3106 304,4,@2554 320,5,@2575 480,5,@2995 528,4,@3107 580,5,@2966 680,5,@2194 732,4,I24 816,4,@3108 824,5,@496 832,4,@3109 840,5,@496 852,5,@496 880,5,@2932 956,4,@3110 964,4,@3111 972,5,@496 1000,5,@2932 1036,5,@2659 1084,4,@799 1136,4,@3112 1164,5,@2932 1176,4,@799 3103:C2,136|9e13e002f606201880a1001b8bd02018c40360108c21a0148b196014ba102004ae100006fa21bffc2d3f0153ac05a310ec25e000ec036008ec25e00cea03600cea25e008e8036004e825e004273f0121a604e0b8e6213ffc253f0065a404a010e4213ff8ee213ff4173f01219602e0d0d400a030d200a020353f00e1b406a19c81c6a00488013ff4|@3026,131071|40,4,@3104 76,4,@2804 88,4,@1611 104,4,@2805 120,4,@2400 3104:C2,52|9e13e002f606201880a1001b8bd02018d0213ffcd6036004d403600892102005d003600c353f0137b406a27c81c6a00488013ffc|@2936,131071|36,4,@2932 3105:C2,156|9e13e002f606201880a1001b8bd02018c4036004de213ffcd0213ff8fa036008fa213ff4133f00d3920262f4d000a0241b3f00389a0360407ffee43088013ff4ee012004d0213ffc113f00d49002201cda05e00cf40360009fc6a00088013ffcec012008113f001f9002225cda05a000f40360009fc6a00001000000d4012008d2012000d0012004de01200c353f00c1b406a19c81c6a00488012010|@2965,131071|36,4,@2272 48,4,@1112 56,5,@1114 72,4,@2279 100,4,@485 140,4,@2180 3106:C2,88|9e13e002f606201880a1001b8bd02018c4022008c4213ffcee03600cee213ff8ec036008ec213ff4ea036004ea213ff0d6022004153f004c9402a0a0d2022000113f013b900222fc353f00f5b406a28881c6a00488013ff0|@2969,131071|52,4,@1345 64,4,@2968 72,4,@2570 3107:C2,156|9e13e002f606201880a1001b8bd02018c4036004de213ffcd0213ff8fa036008fa213ff4133f00d3920262f4d000a0241b3f00389a0360407ffee3e588013ff4ee012004d0213ffc113f00d49002201cda05e00cf40360009fc6a00088013ffcec012008113f001f9002225cda05a000f40360009fc6a00001000000d4012008d2012000d0012004de01200c353f00c1b406a19c81c6a00488012010|@2965,131071|36,4,@2272 48,4,@1112 56,5,@1114 72,4,@2279 100,4,@485 140,4,@2180 3108:S39|496e20636c617573616c2066756e6374696f6e206f6e6520636c6175736520646566696e657320 3109:S21|20616e6420616e6f7468657220646566696e657320 3110:S29|646966666572656e74206e756d62657273206f66207061747465726e73 3111:S39|436c617573616c2066756e6374696f6e20636f6e7461696e7320636c6175736573207769746820 3112:S43|5374617274206f6620636c617573616c2066756e6374696f6e206973206e6f742061207661726961626c65 3113:S98|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737346756e4465636c61726174696f6e28332970726f6365737346756e28312970726f63657373436c61757365283129646f5061747465726e73283329 3114:C2,136|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d0213ff4da03600cf40360009fc6a00088013ff480a2200132800014c4012008c4012004d0012000da00a008f40360009fc6a0000100000080a2200132800009ee012008ee012004d0012000da05e004de012008f403600081c6a0048801200c81c5e0068801200c81c0a0068801200c|@1463,131071| 3115:C2,136|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d0213ff4da03600cf40360009fc6a00088013ff480a2200132800014c4012008c4012004d0012000da00a008f40360009fc6a0000100000080a2200132800009ee012008ee012004d0012000da05e004de012008f403600081c6a0048801200c81c5e0068801200c81c0a0068801200c|@1463,131071| 3116:C2,156|9e13e002f606201880a1001b8bd02018c4036004de213ffcd0213ff8fa036008fa213ff4133f00d3920262f4d000a0241b3f00389a0360407ffee31388013ff4ee012004d0213ffc113f00d49002201cda05e00cf40360009fc6a00088013ffcec012008113f001f9002225cda05a000f40360009fc6a00001000000d4012008d2012000d0012004de01200c353f00c1b406a19c81c6a00488012010|@2965,131071|36,4,@2272 48,4,@1112 56,5,@1114 72,4,@2279 100,4,@485 140,4,@2180 3117:C2,88|9e13e002f606201880a1001b8bd02018c4022008c4213ffcee03600cee213ff8ec036008ec213ff4ea036004ea213ff0d6022004153f004c9402a0a0d2022000113f013b900222fc353f00f5b406a28881c6a00488013ff0|@2969,131071|52,4,@1345 64,4,@2968 72,4,@2570 3118:S85|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737346756e4465636c61726174696f6e28332970726f6365737346756e28312970726f63657373436c61757365283129 3119:S69|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737346756e4465636c61726174696f6e28332970726f6365737346756e283129 3120:C2,252|9e13e002f606201880a1001b8bd020188410000fae10000dac100008d005a0047fffb5e9010000008c21a0108b196010ba1020039e100006fa21bffc1b3f01559a0362c8da23e000da05e010da23e008d805e00cd823e004c4213ffcee213ff8ec213ff4d0213ff0d605e008d6213fecde213fe89610000c94102005d205e0187ffff52c88013fe8d40120088c21a0148b196014ba10200492100006fa21bffc113f015590022380d0226000c402a00cc422600cee02a010ee226008ec02a008ec226004ea02a0149410000992100015d00120007ffff78b01000000e8012008e6052004d0012004da04e008de01200cf403600081c6a00488012010|@3082,131071|32,5,@2659 60,4,@3121 128,5,@3049 160,4,@3122 212,5,@3064 3121:C2,156|9e13e002f606201880a1001b8bd02018c4036004de213ffcd0213ff8fa036008fa213ff4133f00d3920262f4d000a0241b3f00389a0360407ffee25688013ff4ee012004d0213ffc113f00d49002201cda05e00cf40360009fc6a00088013ffcec012008113f001f9002225cda05a000f40360009fc6a00001000000d4012008d2012000d0012004de01200c353f00c1b406a19c81c6a00488012010|@2965,131071|36,4,@2272 48,4,@1112 56,5,@1114 72,4,@2279 100,4,@485 140,4,@2180 3122:C2,52|9e13e002f606201880a1001b8bd02018d0213ffcd6036004d403600892102005d003600c353f0137b406a27c81c6a00488013ffc|@2936,131071|36,4,@2932 3123:S56|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737346756e4465636c61726174696f6e283329 3124:C2,220|9e13e002f606201880a1001b8bd0201880a2200132800005c40220009010200181c3e00601000000ee037ffcec05fff8ea05e0008c21a0148b196014ba102004a8100006fa21bffc273f0156a604e108e6252000e6056000e625200ce4037ff8e4252008e205fff4e2252004de213ffcda213ff8fa022004fa213ff496100014d400a000d205a030113f00d9900221d47fff835288013ff4d0213ffcd0012000da0120047fffffd788013ffc8c21a00c8b19600cba102002a0100006fa21bffcd0242004de012000de24200090100010c201200c81c0600688012010|@586,131071|72,4,@3125 136,4,@2303 144,5,@2304 3125:C2,52|9e13e002f606201880a1001b8bd02018d0213ffcd6036004d403600892102005d003600c353f0137b406a27c81c6a00488013ffc|@2936,131071|36,4,@2932 3126:C2,316|9e13e002f606201880a1001b8bd020188410000fae10000dac100008901000167fff8a6f0100000080a220012280000580a5a0019010200181c0a0060100000032800018ea05a008c4213ffcee213ff8ec213ff4901020297fff534088013ff48c21a0148b196014ba102004a8100006fa21bffca6102001e625200ca4102001e425200823000083a20463d8e2252004d0252000aa10001410800007e8012004c4213ffcee213ff8ec213ff488013ff4e8012004e6053ffc8c21a0148b196014ba102004a4100006fa21bffc233f0156a20462b0e224a000e0053fece024a00cde04fff8de24a008c2012000c224a004901000157fff8e63010000008c21a00c8b19600cba1020029a100006fa21bffc193f015898032220d8236000e4236004941020019210000dde012008353f00eeb406a27881c6a0048801200c|@3141,131071|32,5,@2389 88,5,@1992 132,4,I48 204,4,@3127 244,5,@2425 272,4,@3139 300,4,@2508 3127:C2,692|9e13e002f606201880a1001b8bd020189410000fac10000daa100008901000091b3f00df9a0360847fff886e0100000080a220012280003a90100009901000091b3f00df9a0360787fff889001000000e805a008a6100016a4100015a2100008901000117fff97800100000080a220013280000590100011a010001110800017d4213ffc7fff63db010000008c21a0088b196008ba102001a0100006fa21bffcde04e004de242000d4213ffce4213ff8fa05200cfa213ff49410001092100008901000114000008388013ff4a0100008108000078c21a00ce4213ff8fa05200cfa213ff488013ff48c21a00c8b19600cba10200290100006fa21bffce0222004de012004de222000da012000de012008f403600081c6a0048801200c1b3f00df9a03619c7fff88750100000080a220012280003d90100009901000091b3f00df9a0361907fff889701000000e8022008e405200080a4a0013280001aa61000088c21a0108b196010ba102003a2100006fa21bffce005a004e0246008de052004de24600482102009c22460008c21a0148b196014ba1020049a100006fa21bffcd802200cd823600ce2236008d6022004d6236004d2022000d2236000a610000dd4213ffcec213ff8ea213ff4e6213ff09410001392100015d005a00c7fff84a988013ff0e2012008e00460088c21a00c8b19600cba10200290100006fa21bffcde012000de222004c2012004c2222000da042008de01200cf403600081c6a004880120101b3f00de9a0362347fff87590100000080a220012280001d90102001901000091b3f00de9a0362287fff877b01000000d4213ffcec213ff8ea213ff4d205a0047fff888b88013ff4e8012004e6052008a41000088c21a00c8b19600cba10200290100006fa21bffce4222004e2012000e2222000da04e024de012008f403600081c6a0048801200c81c2a00601000000|@3138,131071|32,4,@2371 40,5,@2372 64,4,@2370 72,5,@2375 100,5,@2500 132,5,@2128 196,5,@3128 284,4,@2377 292,5,@2378 316,4,@2376 324,5,@2381 476,5,@2323 548,4,@2357 556,5,@2358 580,4,@2356 588,5,@2361 612,5,@2383 3128:C2,212|9e13e002f606201880a1001b8bd020188410000fae100008901000177fff0da901000000ac100008901000177fff900c01000000a8100002a6100017a4100016a2100008901000137fff8f890100000084100008901000137ffff62e01000000ac10000ac4213ffcd0213ff896100012153f000f9402a0ccaa10000992100011901000157fff9d8688013ff8ec213ffcd0213ff8e4213ff4901000137fff96be88013ff4e8213ffc9a0120084000001188013ffc92100008d00120087fffbe8601000000d0012008e801200081c5200688012010|@3137,131071|28,5,@1613 44,5,@2438 72,5,@2436 88,5,@3066 112,4,@375 132,5,@2562 156,5,@2500 172,5,@3129 188,5,@2736 3129:C2,132|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffc9010200181c3e00601000000da213ff8fa022004fa213ff4d00220004000001a88013ff4d0213ffcd0012000da0120047fffffed88013ffc8c21a00c8b19600cba10200284100006fa21bffcd020a004ee012000ee20a00090100002ec01200c81c5a00688012010|@586,131071|56,5,@3130 3130:C2,264|9e13e002f606201880a1001b8bd020188c21a0108b196010ba10200384100006fa21bffc2f3f0158ae05e034ee20a000ee037ff8ee20a008ec037ffcec20a004de213ffcda213ff8fa022000fa213ff4fa022004fa213ff0fa022008fa213fec94100002133f0158920260f4d002200c7fff941888013fecea01200ce8012000e405200080a4a00132800011a6100014e2056000808c60013280000da61000148c21a0108b196010ba102003a6100006fa21bffce0046000e024e008de052004de24e00482102009c224e0008c21a0148b196014ba102004a2100006fa21bffcd024600ce6246008e0012004e0246004de012008de24600090100011c201201081c0600688012014|@3136,131071|36,4,@3131 100,4,@3133 112,5,@2475 3131:C2,92|9e13e002f606201880a1001b8bd020188410000fae10000dac100008901000167fff0cfb01000000aa100002a8100017d20520087fff90fc0100000080a220012280000590100016d005200481c560060100000081c5600601000000|@3132,127219|32,5,@1613 52,5,@2452 3132:S63|56414c55455f4f505328292e6d6b53656c656374656454797065283329636f707941436f6e7374727563746f72283129636f707954797065436f6e73283129 3133:O1|@3134 3134:C2,12|9e13e00281c3e00601000000|@3135,129| 3135:S61|56414c55455f4f505328292e6d6b53656c656374656454797065283329636f707941436f6e7374727563746f72283129636f7079547970283129283129 3136:S48|56414c55455f4f505328292e6d6b53656c656374656454797065283329636f707941436f6e7374727563746f72283129 3137:S29|56414c55455f4f505328292e6d6b53656c656374656454797065283329 3138:S74|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c756573283229636f7079456e7472696573283129636f7079456e747279283329 3139:C2,44|9e13e002f606201880a1001b8bd02018d4022008d2022004d0022000da036004f403600081c6a00401000000|@3140,131071| 3140:S74|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c756573283229636f7079456e7472696573283129636f7079456e747279283129 3141:S62|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c756573283229636f7079456e7472696573283129 3142:O1|@3143 3143:C2,20|9e13e002113f01589002233c81c3e00601000000|@3149,129|4,4,@3144 3144:O1|@3145 3145:C2,52|9e13e002841000088c21a00c8b19600cba10200290100006fa21bffc2f3f0158ae05e394ee222000c422200481c3e00601000000|@3148,98433|28,4,@3146 3146:C2,48|9e13e0028c21a00c8b19600cba10200284100006fa21bffcd020a004d0036004d020a0009010000281c3e00601000000|@3147,65697| 3147:S57|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c756573283229283129283129283129 3148:S54|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c756573283229283129283129 3149:S51|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c756573283229283129 3150:C2,96|9e13e002f606201880a1001b8bd02018de213ffcd0213ff8901000097fff961a88013ff8841000088c21a0108b196010ba10200390100006fa21bffc2f3f0159ae05e11cee222000c4222008ec012000ec222004ea01200481c5600688012008|@3153,131071|28,5,@2510 60,4,@3151 3151:C2,224|9e13e002f606201880a1001b8bd02018de213ffcda213ff8c403600888013ff8de00a00880a3e00132800005d0213ffcda01200481c3600688012008c4213ff890102001da00a004f40360009fc6a00088013ff8c2012000fa022000fa213ffcfa022004fa213ff890102001da006000f40360009fc6a00088013ff8da012010d0213ffcd0012004da036004f40360009fc6a00088013ffc98100008d00120049a10000cf40360009fc6a0000100000096100008d00120109a10000bf40360009fc6a00001000000c401200088012014f606201880a1001b8bd0201830bfffd1|@3152,131071| 3152:S32|486173685461626c652e68617368466f6c64283229666f6c6446283129283129 3153:S21|486173685461626c652e68617368466f6c64283229 3154:C2,104|9e13e002f606201880a1001b8bd02018de213ffcfa03600cfa213ff8fa036008fa213ff4fa036004fa213ff0133f00d29202631c7ffecb6e88013ff0c401200cd021200cd6012000d401200492102005d00120089e100002353f0137b406a27c81c6a0048801200c|@3155,131071|44,4,@2263 52,5,@496 88,4,@2932 3155:S57|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c7565732832296d657373466e283129 3156:C2,136|9e13e002f606201880a1001b8bd02018c40360108c21a0148b196014ba102004ae100006fa21bffc2d3f0159ac05a3ccec25e000ec036008ec25e00cea03600cea25e008e8036004e825e004273f0121a604e0b8e6213ffc253f0065a404a010e4213ff8ee213ff4173f01219602e0d0d400a030d200a020353f00e1b406a19c81c6a00488013ff4|@3026,131071|40,4,@3157 76,4,@2804 88,4,@1611 104,4,@2805 120,4,@2400 3157:C2,52|9e13e002f606201880a1001b8bd02018d0213ffcd6036004d403600892102005d003600c353f0137b406a27c81c6a00488013ffc|@2936,131071|36,4,@2932 3158:C2,316|9e13e002f606201880a1001b8bd02018c4037ff0ee00a000de213ffcda213ff8fa022000fa213ff4fa022004fa213ff0fa022008fa213fecfa02200cfa213fe8d2013ff4d005e0047ffecafa88013fe8ec012010ea05bff0e8056000d0213ffc90102001da053ffcf40360009fc6a00088013ffce6012008e6213ffca4102001e4213ff896100008d401200cd2012004d00120007fff9adb88013ff8e2012014e0047ff0de042000d0213ffcd4043ff4d203e000d00120107fff019788013ffcc20120188c21a00c8b19600cba10200290100006fa21bffcda012000da222004d8012014d8222000da007ffcf40360009fc6a00001000000d6012018d402fff0d202bff88c21a00c8b19600cba10200290100006fa21bffcc4012000c4222004ee012014ee222000da02600cde01201cf403600081c6a00488012020|@3159,131071|72,5,@496 148,5,@2562 184,5,@1545 3159:S62|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c75657328322970726f6365737354797065283129 3160:C2,1180|9e13e002f6062018ba21205480a7401b8bd02018c40360008c21a0148b196014ba102004ae100006fa21bffc2d3f015bac05a274ec25e000ec00a000ec25e00cea037ffcea25e008e8037ff4e825e004d0213ffcd0213ff8d0213ff4a610000fa410000da2100008a010000992013ff4901000177fff79a788013ff4e4213ffce6213ff8e2213ff4e0213ff0d4213fecd6213fe89010000a9a0120084000013988013fe8d0213ffcde01200888013ffc80a3e00132800005da03e0008210200110800024da01200cd8012018d60320008c21a0188b196018ba10200594100006fa21bffc133f015c92026190d222a000d0033ff8d022a010c4033ffcc422a00cee02e000ee22a008ec033ff4ec22a004fa03e004fa213ffcea02e00096100016a810000a9410001592100014d00360047fffc6d788013ffcde01200088012004f606201880a1001b8bd0201830bfffd980a3600132800005fa036004981020011080000dd6012018fa213ffcd00360009a012024400001d588013ffcda01200088012004f606201880a1001b8bd0201830bffff0d402e0008c21a0148b196014ba10200492100006fa21bffc113f015d90022020d0226000c402a000c422600cee02fffcee226008ec02fff4ec226004d0213ffcd0213ff8d0213ff4aa10000992013ff4901000157fff794a88013ff4e8012014e601200c808d200132800015a4102001808ce00132800012a4102001fa052004fa213ffcfa04e004fa213ff8d204e000d00520009a0120304000023e88013ff8e6012000e801200488012008f606201880a1001b8bd0201830bfffeb94102001133f0295920261d8d001200c40013a9c01000000e401201080a4a0013280000cd0213ffce0012024de043ff8d003e008da012000f40360009fc6a00001000000a21000081080007c01000000d0213ff8d0213ff492013ff4901020017ffef61888013ff4e20120308c21a0108b196010ba102003a0100006fa21bffc1f3f02999e03e174de242000c2012004c2242008da047ff8da2420048c21a0148b196014ba10200498100006fa21bffc173f02999602e22cd6232000d4012008d423200cd2012014d2232008d0036018d02320048c21a0388b196038ba10200d84100006fa21bffcee036030ee20a030ec03602cec20a02cea036028ea20a028e8036024e820a024e6036020e620a020e403601ce420a01cd820a018de036014de20a014c2036010c220a010d803600cd820a00ce020a008d6036004d620a004d4036000d420a000c4213ffcfa046008fa213ff8d2012028213f0031a004212488013ff880a2600132800005c20260009e10001010800017c2012028da012038fa026004fa213ffcd8012000d8213ff8d6036004d6213ff4d6006004d4012004d2037ffcd0006000da0360007fffd4f588013ff4a0100008d201200088012004f606201880a1001b8bd0201830bfffe680a0600132800005da006000a21020011080001688012014d8036004d6032000d4036010921020019010000b7fffccd9010000009010000b7fff92c001000000d022a000921020019010000b7fffba8b01000000c2006004f606201880a1001b8bd0201830bfffe7113f003190022124da01202081c3600688012034|@5130,131071|44,4,@3161 116,5,@2283 156,5,@3163 228,4,@3166 304,5,@2812 372,5,@3168 428,4,@3170 488,5,@2283 556,5,@3172 596,4,@5101 608,5,@5104 688,5,@1450 720,4,@5127 768,4,@5129 936,4,@799 1020,5,@2927 1100,5,@2852 1112,5,@2500 1132,5,@2736 1160,4,@799 3161:C2,104|9e13e002f606201880a1001b8bd02018de213ffcfa03600cfa213ff8fa036008fa213ff4fa036004fa213ff0133f00d29202631c7ffec96988013ff0c401200cd021200cd6012000d401200492102005d00120089e100002353f0137b406a27c81c6a0048801200c|@3162,131071|44,4,@2263 52,5,@496 88,4,@2932 3162:S58|50415253455f5452454528292e706173733228362961737369676e56616c756573283629617373416273446174612834296d657373466e283129 3163:C2,132|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffc9010200181c3e00601000000da213ff8fa022004fa213ff4d00220004000001a88013ff4d0213ffcd0012000da0120047fffffed88013ffc8c21a00c8b19600cba10200284100006fa21bffcd020a004ee012000ee20a00090100002ec01200c81c5a00688012010|@586,131071|56,5,@3164 3164:C2,336|9e13e002f606201880a1001b8bd02018c4037ff4ee00a000de213ffcda213ff8fa022000fa213ff4fa022004fa213ff0fa02200cfa213fecd2013ff4d005e0047ffec90c88013fecec01200cea05bff4e8056000d0213ffc90102001da053ffcf40360009fc6a00088013ffce6012010e404fff4a2102001e2213ffce004a008e0213ff896100008153f000f9402a0ccd2012004d00120007fff98ea88013ff8de012008d023e000c204a000d0213ffcd404bff4d2006000d001200c7ffeffa688013ffcda0120148c21a00c8b19600cba10200290100006fa21bffcd8012000d8222004d6012010d6222000da037ffcf40360009fc6a00001000000d4012014d202bff4d0027ff8c402200c8c21a00c8b19600cba10200290100006fa21bffcee012000ee222004ec012010ec2220009a100002f40360009fc6a00001000000d0012000ea01201881c560068801201c|@3165,131071|64,5,@496 136,4,@375 152,5,@2562 188,5,@1545 3165:S61|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737341627344617461283429656e74657254636f6e283129 3166:C2,136|9e13e002f606201880a1001b8bd02018c40360108c21a0148b196014ba102004ae100006fa21bffc2d3f015cac05a234ec25e000ec036008ec25e00cea03600cea25e008e8036004e825e004273f0121a604e0b8e6213ffc253f0065a404a010e4213ff8ee213ff4173f01219602e0d0d400a030d200a020353f00e1b406a19c81c6a00488013ff4|@3026,131071|40,4,@3167 76,4,@2804 88,4,@1611 104,4,@2805 120,4,@2400 3167:C2,52|9e13e002f606201880a1001b8bd02018d0213ffcd6036004d403600892102005d003600c353f0137b406a27c81c6a00488013ffc|@2936,131071|36,4,@2932 3168:C2,308|9e13e002f606201880a1001b8bd02018c4037ff4ee00a000de213ffcda213ff8fa022000fa213ff4fa022004fa213ff0fa02200cfa213fecd2013ff4d005e0047ffec86288013fecec01200cea05bff4e8056000d0213ffc90102001da053ffcf40360009fc6a00088013ffca6102001e6213ffca4102001e4213ff896100008d4012008d2012004d00120007fff984388013ff8e2012010e0047ff4de042000d0213ffcd4043ff4d203e000d001200c7ffefeff88013ffcc20120148c21a00c8b19600cba10200290100006fa21bffcda012000da222004d8012010d8222000da007ffcf40360009fc6a00001000000d6012014d402fff4d202bff88c21a00c8b19600cba10200290100006fa21bffcc4012000c4222004ee012010ee222000da02600cde012018f403600081c6a0048801201c|@3169,131071|64,5,@496 140,5,@2562 176,5,@1545 3169:S65|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737341627344617461283429656e7465725769746854797065283129 3170:C2,104|9e13e002f606201880a1001b8bd02018de213ffcfa03600cfa213ff8fa036008fa213ff4fa036004fa213ff0133f015d920260a47ffec7fe88013ff0c401200cd021200cd6012000d401200492102005d00120089e100002353f0137b406a27c81c6a0048801200c|@3162,131071|44,4,@3171 52,5,@496 88,4,@2932 3171:S52|2068617320616c7265616479206265656e2075736564206173206120636f6e7374727563746f7220696e20746869732074797065 3172:C2,384|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d2213ff4fa022000fa213ff0fa022008fa213fecfa02200cfa213fe890102001c4013fec88013fe880a0a00132800005b8222001ae1000081080000ad0213ffcb91720049e072001c400a0049010000ff606201880a1001b8bd0201830bffff3d0213ff8d001200c7fff07b888013ff87fff07cb0100000080a22001228000119e0120008c21a0088b1960083b100000ba0760019e100006fa21bffcda012014da23e0009201200090103ffdd022600084012000de20a004108000088c21a00c9a102001da23e00092012000d0012014d02260048c21a00c8b19600cba10200284100006fa21bffcee012000ee20a000de012004de20a0048c21a0108b196010ba10200390100006fa21bffcc4222008da012010da222004d2012008d22220007fff07b901000000d0213ffc133f015d9202627cd001200c4000008b88013ffc9a012020400001550100000092100008d0012018de012020353f0116b406a05481c6a00488012024|@5100,131071|128,5,@1613 136,5,@1615 312,5,@1617 324,4,@3173 336,5,@3180 348,5,@3185 368,4,@2736 3173:O1|@3174 3174:C2,52|9e13e002841000088c21a00c8b19600cba10200290100006fa21bffc2f3f015dae05e2d4ee222000c422200481c3e00601000000|@3179,98433|28,4,@3175 3175:C2,52|9e13e002f606201880a1001b8bd02018c4036004d600a004d400a000d2022004d0022000353f015db406a32481c6a00401000000|@3178,131071|36,4,@3176 3176:C2,32|9e13e002921000089010000a1b0000839a036138f403600081c6a00401000000|@3177,131071|12,4,I27 3177:S73|50415253455f5452454528292e706173733228362961737369676e56616c7565732836296173734162734461746128342967656e56616c7565436f6e737472732832296c6571283429 3178:S76|50415253455f5452454528292e706173733228362961737369676e56616c7565732836296173734162734461746128342967656e56616c7565436f6e737472732832296c6571283129283129 3179:S73|50415253455f5452454528292e706173733228362961737369676e56616c7565732836296173734162734461746128342967656e56616c7565436f6e737472732832296c6571283129 3180:C2,288|9e13e002f606201880a1001b8bd0201880a2200132800005c40220049010200181c3e0060100000080a0a0013280000dde213ffcd20220008c21a00c8b19600cba10200290100006fa21bffc84102001c4222004d222200081c3e00601000000d2213ff8c4213ff4fa022000fa213ff0d0013ff09a100009f40360009fc6a00088013ff0d0213ffcd0213ff8d0213ff492013ff8d00120049a01200c4000002888013ff4d2012014d00120087fffffd69e13e002d0213ffcd2012014d00120047fffffd088013ffc8c21a00c8b19600cba102002ae100006fa21bffcd025e004ec012010ec25e00080a5e00132800006ee213ffcd0012000ea01201c81c5600688012020d00120009a01201c4000006088013ffcea01202081c5600688012024|@3184,131071|156,5,@3181 268,5,@3183 3181:C2,280|9e13e002f606201880a1001b8bd0201880a2200132800009de213ffc9a102001da22600090102001d02260049010200181c3e00601000000da213ff8d2213ff4fa022000fa213ff0fa022004fa213fecd0013ff0da037fe8f40360009fc6a00088013fecd0213ffcd0213ff8d0213ff492013ff8d0012000da01200c7fffffe188013ff4c401200080a0a001228000138c21a00c8c21a00c8b19600cba102002ae100006fa21bffcec012004ec25e004ea012010ea25e000e8012014ee252000e6012008e625200490102001e401201c81c4a006880120208b19600cba102002ae100006fa21bffcec012008ec25e004ea012010ea25e000e8012014e6012004e6252000ee25200490102001e401201c81c4a00688012020|@3182,131071| 3182:S17|4c6973742e706172746974696f6e283329 3183:C2,112|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffcd0037fe081c3e00601000000da213ff8fa022000fa213ff4d00220047ffffff288013ff48c21a00c8b19600cba1020029e100006fa21bffcd023e004da012000da23e0009010000fde01200881c3e0068801200c|@1966,161| 3184:S17|4d6973632e717569636b536f7274283229 3185:C2,240|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d0213ff488013ff480a2200132800005de0220008410200110800024d0012000da012004c4037ffcee00bff4ec05e0008c21a0188b196018ba102005aa100006fa21bffc293f015fa805209ce8256000e805fff8e8256010e605fffce625600ce405a000e4256008e205fff4e2256004fa022004fa213ffc961000119410001292100015d003e0047fffc28688013ffcd001200088012004f606201880a1001b8bd0201830bfffd94000005001000000400002a70100000092100008d00120009a0120084001354f01000000ee01200881c5e0068801200c|@5099,131071|92,4,@3186 160,5,@2812 192,5,@3188 200,5,@3247 220,5,@5093 3186:C2,136|9e13e002f606201880a1001b8bd02018c40360108c21a0148b196014ba102004ae100006fa21bffc2d3f015fac05a140ec25e000ec036008ec25e00cea03600cea25e008e8036004e825e004273f0121a604e0b8e6213ffc253f0065a404a010e4213ff8ee213ff4173f01219602e0d0d400a030d200a020353f00e1b406a19c81c6a00488013ff4|@3026,131071|40,4,@3187 76,4,@2804 88,4,@1611 104,4,@2805 120,4,@2400 3187:C2,52|9e13e002f606201880a1001b8bd02018d0213ffcd6036004d403600892102005d003600c353f0137b406a27c81c6a00488013ffc|@2936,131071|36,4,@2932 3188:C2,272|9e13e002f606201880a1001b8bd0201880a2200132800005d0213ffc9010200181c3e00601000000d0213ff8c4022000ee00a004ec05e00080a5bffd1280000a88013ff8aa012000a8102001e8256000aa012000e800a000e825600410800011de213ffcde213ffcfa022004fa213ff8fa00a000fa213ff4901000174000002c88013ff4aa01200cd0256000a801200ce6012000e62520041080000588012004fa022004fa213ff888013ff88c21a00c8b19600cba102002a6100006fa21bffce4012008e424e000e201200ce224e004e6213ffcd00120007fffffca88013ffc8c21a00c8b19600cba102002a0100006fa21bffcd0242004de012000de24200090100010c201200881c0600688012014|@586,131071|124,5,@3189 3189:C2,764|9e13e002f606201880a1001b8bd02018ae10000fac100008901000167fff58e80100000080a220012280004990100016aa100017901000167fff58f201000000de02200080a3e0053280003f90102005da022004808b600132800023ea213ffcc403600480a0a00132800007ea213ffcee036000d005e0049e10001510bfffe3f6062018ae10200188013ffc80a3600132800005b825e001ac1000171080000a8c21a008b9172004aa072001da036004ae100015f606201880a1001b8bd0201830bffff38b196008ba10200190100006fa21bffcec222000ea01200081c56006880120048410200188013ffc80a3600132800005b820a001ae1000021080000a8c21a008b9172004ac072001da03600484100016f606201880a1001b8bd0201830bffff38b196008ba10200190100006fa21bffcee222000ec01200081c5a0068801200481c56006010000007fff5ca10100000080a220012280000990100016aa100017901000167fff5cab0100000090103ffd81c56006010000007fff5a590100000080a220012280005b90102005aa100017901000167fff5a6301000000e8022000d00220087fff5a7401000000a6100015a4100008901000127fff869a01000000de02200080a3fffd2280001790100012901000127fff86930100000084100008901000127fff874e01000000a4100013a2100002921000147fff89c901000000e4213ffc9410200592100008901000117fff8a1088013ffcde01200010bfff79880120047fff04d70100000082100008113f0160900221d47fff04d20100000092100008901000017fff88d40100000080a2200122800005901000129010200581c4e006010000007fff8dfb01000000808a20013280001d90102005da022000d8036004808b20013280001690102005d603200080a2e0013280001090102005d402200480a2a0013280000a90102005e6213ffc92100014d003600c4000010c88013ffcde01200010bfff4e8801200481c4e0060100000081c4e0060100000081c4e0060100000081c4e0060100000081c5e00601000000|@3246,131071|28,5,@2104 56,5,@2105 332,5,@2148 360,5,@2149 380,5,@2124 408,5,@2125 424,5,@2126 444,5,@2429 472,5,@2429 488,5,@2438 508,5,@2462 532,5,@2464 552,5,@1613 564,4,@3190 572,5,@1613 588,5,@2452 620,5,@2500 704,5,@3244 3190:O6|@2809,1,0,@3192,@3194,@3191 3191:O2|-1,@119 3192:O2|@3193,0 3193:O3|3,@112,79992 3194:O2|-1,@113 3195:O3|1,@375,@3196 3196:O2|@3197,0 3197:O4|@2809,@799,@3199,@3198 3198:O3|1,@3241,@3240 3199:O2|-1,@3200 3200:O2|5,@3201 3201:O2|-1,@3202 3202:O5|0,@3203,@3239,@114,@804 3203:O3|@387,@3205,@3204 3204:O2|@626,@3231 3205:O2|@391,@3206 3206:O3|@394,0,@3207 3207:O10|0,@3209,@3214,@3208,0,0,0,0,0,0 3208:O1|@3224 3209:O1|@3210 3210:O2|-1,@3211 3211:O5|0,@605,@616,@115,@3212 3212:O2|-7,@3213 3213:O8|@622,@2809,0,0,1,0,0,0 3214:O1|@3215 3215:O2|-1,@3216 3216:O5|0,@605,@825,@116,@3217 3217:O2|-7,@3218 3218:O8|@3219,@2809,0,0,1,0,0,0 3219:O4|4,@3221,@3220,0 3220:O2|-3,I11 3221:O2|@622,@3222 3222:O2|@3223,@621 3223:O2|-3,64 3224:O2|-1,@3225 3225:O5|0,@605,@829,@117,@3226 3226:O2|-7,@3227 3227:O8|@3228,@2809,0,0,1,0,0,0 3228:O4|4,@3230,@3229,0 3229:O2|-3,I253 3230:O2|@623,@668 3231:O4|@3233,@3235,@3234,@3232 3232:O1|@3238 3233:O3|@3235,@3234,@3232 3234:O1|@3237 3235:O1|@3236 3236:C2,16|9e13e0029010200581c3e00601000000|@2809,129| 3237:C2,44|9e13e002841000088c21a0088b1960083b100000ba07600190100006fa21bffcc422200081c3e00601000000|@2809,65665| 3238:C2,16|9e13e002d002200081c3e00601000000|@2809,129| 3239:O2|-3,@3233 3240:O4|-3,@3243,@2809,@3242 3241:O3|3,@118,79993 3242:O2|0,@3190 3243:O2|@3241,0 3244:C2,224|9e13e002f606201880a1001b8bd02018ae10000fac100008901000167fff5b310100000080a2200122800009ee213ffca8100017901000167fff5b3b01000000aa10000810800009d0056004113f003890022020f40620209fc6a00088013ffcaa102001d00560047fff58e20100000080a2200122800008e8213ffcd00560047fff58ed01000000a610000810800009a4100014113f003890022020f40620209fc6a00088013ffca6102001a4100014e2056000d004e0007fff885e010000009410200592100008901000119e100012353f00eab406a11081c6a00401000000|@3245,131071|28,5,@2148 56,5,@2149 76,4,@1110 104,5,@2124 128,5,@2125 148,4,@1110 184,5,@2462 208,4,@2464 3245:S32|545950455f5452454528292e636f6e7374727563746f72526573756c74283229 3246:S27|56414c55455f4f505328292e6765745475706c654b696e64283129 3247:C2,492|9e13e002f606201880a1001b8bd02018808a20013280007201000000c4022000ee00a00080a5e0013280001c80a5e005ec02200480a5a0013280001401000000de213ffcd200a004113f0162900220fc4000007088013ffcaa1000088c21a00c8b19600cba10200290100006fa21bffca8102001e8222004ea222000e601200081c4e00688012004353f028eb406a3d081c6a004010000003280001c80a5fffdec02200480a5a0013280001401000000de213ffcd200a004113f002b9002225c40012def88013ffcaa1000088c21a00c8b19600cba10200290100006fa21bffca8102001e8222004ea222000e601200081c4e00688012004353f028eb406a3d081c6a004010000003280001cec022004ec02200480a5a0013280001401000000de213ffcd200a004113f002b9002225c40012dd388013ffcaa1000088c21a00c8b19600cba10200290100006fa21bffca8102001e8222004ea222000e601200081c4e00688012004353f028eb406a3d081c6a0040100000080a5a0013280001401000000de213ffcd200a004113f002b9002225c40012dba88013ffcaa1000088c21a00c8b19600cba10200290100006fa21bffca8102001e8222004ea222000e601200081c4e00688012004353f028eb406a3d081c6a00401000000353f028eb406a3d081c6a00401000000|@5092,131071|72,4,@3248 80,5,@3249 136,4,@5057 184,4,@581 192,5,@5059 248,4,@5057 296,4,@581 304,5,@5059 360,4,@5057 396,4,@581 404,5,@5059 460,4,@5057 476,4,@5057 3248:O1|4 3249:C2,384|9e13e002f606201880a1001b8bd02018de213ffcd0213ff8d2213ff492100008113f002d9002215c4000005d88013ff48c21a0248b196024ba10200884100006fa21bffcae102001ee20a01cac102001ec20a018aa102001ea20a014a8102005e820a010a6102001e620a00ca4102001e420a008e2012000e220a004d020a0008c21a00c8b19600cba102002a0100006fa21bffcc42420049e103fe5de242000e0213ffcd201200490100011400004ab88013ffc8c21a00c8b19600cba10200282100006fa21bffc9a102001da206004d02060008c21a00c8b19600cba10200298100006fa21bffcc2232004d6012000d62320008c21a00c8b19600cba10200294100006fa21bffcd822a00492102029d222a00080a320013280000e9010000a9010000a400003c701000000841000088c21a00c8b19600cba10200290100006fa21bffcc4222004ae103ff5ee222000921020011b3f01699a036184400006d10100000084100008901020019a100002de01200cf403600081c6a00488012010|@5056,131071|32,4,@623 40,5,@3250 172,5,@3268 292,5,@3258 340,4,@3278 348,5,@3280 3250:C2,1880|9e13e002f606201880a1001b8bd02018c402600080a0bff13280002e80a0a0018c21a00c8b19600cba102002ae100006fa21bffcac102001ec25e004d025e0008c21a0148b196014ba10200490100006fa21bffcac102005ec22200c2d3f0031ac05a27cec222008ee222004ae102011ee2220008c21a00c8b19600cba102002ac100006fa21bffcae102001ee25a004d025a0008c21a0148b196014ba10200490100006fa21bffcae102005ee22200c2f3f0031ae05e250ee222008ec222004ac102011ec22200081c3e006010000003280002e80a0a0098c21a00c8b19600cba102002ae100006fa21bffcac102001ec25e004d025e0008c21a0148b196014ba10200490100006fa21bffcac102005ec22200c2d3f0031ac05a27cec222008ee222004ae102011ee2220008c21a00c8b19600cba102002ac100006fa21bffcae102001ee25a004d025a0008c21a0148b196014ba10200490100006fa21bffcae102005ee22200c2f3f0031ae05e250ee222008ec222004ac102011ec22200081c3e006010000003280000680a0a005113f002d9002215081c3e006010000003280003880a0bff5ee026004808de00122800005de213ffcac1000171080000b8c21a00cac100008113f002990022348f40620209fc6a00088013ffc90100016ac1020018c21a00c8b19600cba102002aa100006fa21bffcec256004ac103ff5ec2560008c21a00c8b19600cba102002ac100006fa21bffca8102001e825a004d025a0008c21a00c8b19600cba10200290100006fa21bffcec222004ea222000ac1000088c21a0148b196014ba10200490100006fa21bffcaa102005ea22200c293f002da805212ce8222008ec222004ac102011ec22200081c3e006010000003280005d80a0a00dee026004808de00122800005de213ffcac1000171080000b8c21a00cac100008113f002990022348f40620209fc6a00088013ffcaa100016ac1020018c21a00c8b19600cba102002aa100006fa21bffcec256004a8103ff5e8256000ec02200080a5a0153280000b80a5bff5de213ffcea213ff892100008901020014000011c88013ff8a61000081080001a8c21a00c3280000b8c21a010de213ffcea213ff892100008901020014000011188013ff8a61000081080000f8c21a00c8b196010ba102003a6100006fa21bffca8102001e824e008d024e004a4102019e424e000de213ffcea213ff888013ff88c21a00c8b19600cba102002a2100006fa21bffca0102001e0246004e62460008c21a00c8b19600cba1020029e100006fa21bffce223e004c2012000c223e0008c21a0148b196014ba10200490100006fa21bffc9a102005da22200c193f002d9803212cd8222008de22200496102011d6222000d401200481c2a006880120083280005d80a0bffdee026004808de00122800005de213ffcac1000171080000b8c21a00cac100008113f002990022348f40620209fc6a00088013ffcaa100016ac1020018c21a00c8b19600cba102002aa100006fa21bffcec256004a8103ff5e8256000e402200080a4a0153280000b80a4bff5de213ffcea213ff89210000890102001400000bf88013ff8a61000081080001a8c21a00c3280000b8c21a010de213ffcea213ff89210000890102001400000b488013ff8a61000081080000f8c21a00c8b196010ba102003a6100006fa21bffca2102001e224e008d024e004a0102019e024e000de213ffcea213ff888013ff88c21a00c8b19600cba1020029e100006fa21bffc82102001c223e004e623e0008c21a00c8b19600cba1020029a100006fa21bffcde236004d8012000d82360008c21a0148b196014ba10200490100006fa21bffc96102005d622200c153f002d9402a12cd4222008da22200492102011d2222000c401200481c0a006880120083280007801000000ee026004808de0012280000bac100017de213ffcaa100008113f002990022374f40620209fc6a00088013ffcac102001ac100017ea05a000808d600122800005de213ffca81000151080000b808d2001a8100008113f002990022348f40620209fc6a00088013ffca6100014a8102001808d200122800005de213ffca61000141080000b8c21a00ca6100008113f002990022348f40620209fc6a00088013ffca4100013a61020018c21a00c8b19600cba102002a4100006fa21bffce624a004a2103ff5e224a000c202200080a060153280000b80a07ff5de213ffce4213ff892100008901020014000004788013ff8a01000081080001a8c21a00c3280000b8c21a010de213ffce4213ff892100008901020014000003c88013ff8a01000081080000f8c21a00c8b196010ba102003a0100006fa21bffc9a102001da242008d024200498102019d8242000de213ffce4213ff888013ff88c21a00c8b19600cba10200296100006fa21bffc94102001d422e004e022e0008c21a00c8b19600cba10200292100006fa21bffcd6226004d0012000d02260008c21a0148b196014ba10200490100006fa21bffc84102005c422200c2f3f002dae05e12cee222008d2222004ac102011ec222000ea01200481c5600688012008113f002d9002215081c3e00601000000|@3267,131071|92,4,@820 176,4,@817 276,4,@820 360,4,@817 400,4,@622 456,4,@542 608,4,@619 680,4,@542 772,5,@3251 816,5,@3251 976,4,@619 1052,4,@542 1144,5,@3251 1188,5,@3251 1348,4,@619 1416,4,@545 1476,4,@542 1532,4,@542 1624,5,@3251 1668,5,@3251 1828,4,@619 1864,4,@622 3251:C2,1740|9e13e002f606201880a1001b8bd02018c402600080a0a0293280006480a0bff5de213ffcd0213ff8fa026004fa213ff4ae102001ec013ff488013ff480a5a00132800005b825e001aa1000171080000ade012004b91720049e072001ec05a004ae10000ff606201880a1001b8bd0201830bffff3b8256001ba23e001811f401c3680001b01000000d201200080a260013280000980a3e001113f0004900223d0f40620209fc6a000010000009010200180a3e00132800006b823e001d0026000c401200881c0a0068801200cb91f2004900720019e100008d2026004f606201880a1001b8bd0201830bfffe9133f0166920260fc80a2600132800005c4026000901020051080000c80a22001ee00a00080a5fff53280000790102001d2026004f606201880a1001b8bd0201830bffff280a220012280001001000000113f0166900221384000017b010000008c21a00c8b19600cba102002ac100006fa21bffcd025a004aa103ff5ea25a000108000058c21a00c2d3f0166ac05a1388c21a00c8b19600cba10200290100006fa21bffcec222004ac103fd9ec222000ea01200881c560068801200c328000a780a0a015d0213ffcd0213ff8ee026004808de0010280000488013ff810800046de213ffc808de0012280000bac100017de213ffcaa100008113f002990022374f40620209fc6a00088013ffcac102001ac100017fa0dbffcb92f6002aa072001a80d600d80a5200122800004808de0011080002cde213ffc2280000ba6100017de213ffca4100008113f002990022374f40620209fc6a00088013ffca6102001a6100017fa04fffcbb2f6008b9376006a4072001808a200122800005de213ffca21000081080000dde213ffcd0213ff8ee213ff4e4213ff01b0000879a0360d8f40360009fc6a00088013ff0a210000810800007e0012000d0213ff8ee213ff4e4213ff088013ff0e001200080a4001138800037de0120041080000a88012004d0213ff8ee213ff488013ff41080000501000000d0213ff8ee213ff488013ff42d3f0166ac05a0fc80a5a00132800005e805a000aa1020051080000c80a56001e605200080a4fff532800007aa102001ec05a004f606201880a1001b8bd0201830bffff280a560012280001001000000113f016690022138400000fb010000008c21a00c8b19600cba102002a4100006fa21bffcd024a004a2103ff5e224a00010800005a201200c253f0166a404a138a201200ca0103fd9e02460009e01200ce423e004108000228c21a00c808be001228000098210000f113f002990022374f40620209fc6a00001000000821020018210000fda012008808b600122800005010000009810000d10800009b8232001113f002990022348f40620209fc6a0000100000098102001b8232001d600401c9401201092103ff5d222a00090012010d6222004880120048c21a00c8b19600cba10200290100006fa21bffcc401200cc4222000ee012010ee222004ec01200881c5a0068801201432800097ae100008ee026004ea05e00080a57ffd3280000601000000e805e004ec05201010800005e805a0002d3f002bac05a25ce805a00080a520293280007be405e000de213ffcee213ff8921000167ffffedb88013ff8e602200080a4ffed3280003380a4e0198c21a0148b196014ba102004a4100006fa21bffce2022010e224a00ce002200ce024a008de022008de24a004c2022004c224a000da012000d603600080a2fffd3280000601000000d4036004d802a004108000058c21a010193f0166980323888c21a0108b196010ba10200390100006fa21bffce022200894102001d4222004e42220009a10000cf40360009fc6a00001000000921000088c21a00c8b19600cba10200290100006fa21bffcd222200484102015c4222000ee01200481c5e006880120083280003de4012004e4022004e204a00080a47fed32800036e00120048c21a0148b196014ba102004a0100006fa21bffcde04a010de24200cc204a00cc2242008da04a008da242004d804a004d8242000d6012000d202e00080a27ffd3280000601000000c402e004d400a00410800005c4022008153f01669402a3ccc40220088c21a0108b196010ba10200390100006fa21bffcc2222008ae102001ee222004e0222000c4213ffc9a10000af40360009fc6a00088013ffc8c21a00c8b19600cba102002ac100006fa21bffcd025a004aa102015ea25a00092100016d0012000de01200810bffe6c8801200c81c420068801200881c4a0068801200880a4bffd3280000680a4a005e205e004e604600810bffe619210001332800003e605e004e605e0089210001310bffe5cf60620188c21a0108b196010ba10200390100006fa21bffcee222008d2222004ac102019ec22200081c3e00601000000|@3266,131071|152,4,@224 236,4,@3252 316,4,@3257 324,5,@3258 372,4,@3257 484,4,@545 564,4,@545 644,4,I152 748,4,@3252 828,4,@3257 836,5,@3258 884,4,@3257 932,4,@545 988,4,@542 1136,4,@581 1284,4,@3262 1508,4,@3264 3252:O2|@3254,@3253 3253:O2|@3255,@668 3254:O2|-3,100 3255:O2|-3,@3256 3256:S4|42696e64 3257:O2|10,@3252 3258:C2,452|9e13e002f606201880a1001b8bd02018c402200080a0bff53280000580a0a029d002200481c3e0060100000032800060de213ffcee02200480a5e00132800005de213ffc9010200181c3e00601000000ee213ff8ac10200188013ff880a5e00132800005b825a001aa1000161080000a808d6001b91720049e072001ee05e004ac10000ff606201880a1001b8bd0201830bffff32280000501000000a81000151080000994102001113f002990022348f40620209fc6a00001000000a81020019410200192102101901000141b0000829a036338f40360009fc6a00001000000d0213ffca6102001e401200088013ffc80a4a00132800004808ce00110800023d00120002280000501000000a210001310800009e6213ffc113f002990022348f40620209fc6a00001000000a2102001e6213ffcfa04a004fa213ff8e2213ff4d004a0007fffffaf88013ff4e001200cde012000b823e001d024001cc2012008b8206001b91720049a072001e4012004a610000d8801200cf606201880a1001b8bd0201830bfffdb1b0000839a0363b8f40360009fc6a00001000000d0012000e201200881c460068801200c113f016690022324f40620209fc6a00088013ffc90102001|@3261,131071|168,4,@542 204,4,I11 280,4,@542 392,4,I47 428,4,@3259 3259:O3|@24,@397,@3260 3260:S32|6d616b6556616c202d206e6f7420636f6e7374616e74206f72207265636f7264 3261:S36|434f44455452454528292e6d616b65436f6e737456616c2831296d616b6556616c283129 3262:O1|@3263 3263:C2,32|9e13e002de213ffc113f002c9002208cf40620209fc6a00088013ffc90102001|@593,129|8,4,@591 3264:O1|@3265 3265:C2,32|9e13e002de213ffc113f002c9002208cf40620209fc6a00088013ffc90102001|@593,129|8,4,@591 3266:S30|434f44455452454528292e66696e64456e747279496e426c6f636b283229 3267:S26|56414c55455f4f505328292e636f6e7374724d61746368283229 3268:C2,908|9e13e002f606201880a1001b8bd02018c40260008088a001228000160100000080a0bff1268000130100000080a0a00d34800010010000002f3f0167ae05e0aeba00a00dfa05c01d81c5c01d010000000000002e00000126000002be00000236000000aa000002620000022600000156113f002f9002208c81c3e006010000008c21a0248b196024ba10200892100006fa21bffc84102001c422601cae102001ee22601884102001c4226014ae102005ee22601084102001c422600cae102001ee226008d0226004113f002d9002215cd02260008c21a00c8b19600cba10200290100006fa21bffcd222200484103fe5c422200081c3e006010000008c21a0248b196024ba10200892100006fa21bffc84102001c422601cae102001ee22601884102001c4226014ae102005ee22601084102001c422600cae102001ee226008d0226004113f003590022004d02260008c21a00c8b19600cba10200290100006fa21bffcd222200484103fe5c422200081c3e00601000000ac10000faa100008d00260044000008901000000a8100008901000159a1000149e100016f403600081c6a00401000000de213ffcd0213ff8d4026004d202600811000083900223d84000011388013ff88c21a0148b196014ba102004ac100006fa21bffcaa102005ea25a00cd025a008293f002da8052144e825a004a6102011e625a0008c21a0248b196024ba102008a4100006fa21bffca2102001e224a01ca0102001e024a0189e102001de24a01482102005c224a0109a102001da24a00c98102001d824a008d6012000d624a004ec24a0008c21a00c8b19600cba10200290100006fa21bffce422200494103fe5d4222000d201200481c2600688012008113f01609002239481c3e006010000008c21a00c8b19600cba10200290100006fa21bffcec026004ec222004aa103ff5ea22200081c3e00601000000ec026004808da00122800005de213ffcaa100016108000098c21a00c113f002990022348f40620209fc6a00088013ffcaa1020018c21a00c8b19600cba10200290100006fa21bffcea222004a8103ff5e822200081c3e006010000008c21a0248b196024ba102008ac100006fa21bffcaa102001ea25a01ca8102001e825a018a6102001e625a014a4102005e425a010a2102001e225a00ca0102001e025a008d025a004033f002d8200615cc225a0008c21a00c8b19600cba10200290100006fa21bffcec2220049a103fe5da22200081c3e00601000000|@3277,131071|56,4,$3268+82 112,4,@660 200,4,@623 324,4,@1027 388,5,@3269 440,4,I48 448,5,@3273 488,4,@621 632,4,@3217 720,4,@542 856,4,@623 3269:C2,52|9e13e002841000088c21a00c8b19600cba10200290100006fa21bffc2f3f0168ae05e054ee222000c422200481c3e00601000000|@3272,98433|28,4,@3270 3270:C2,432|9e13e002f606201880a1001b8bd02018c40360048088a00122800005de213ffcae1000021080000b8c21a00cae100008113f002990022348f40620209fc6a00088013ffc90100017ae1020018c21a00c8b19600cba102002ac100006fa21bffcee25a004ae103ff5ee25a0008c21a00c8b19600cba102002ae100006fa21bffc2b3f002daa056144ea25e004ec25e0008c21a00c8b19600cba102002ac100006fa21bffcee25a004aa102029ea25a000de213ffcd0213ff8ec213ff488013ff480a5e00132800005de05e000a81020051080000c80a52001da03e00080a37ff532800007a8102001ee05e004f606201880a1001b8bd0201830bffff280a520012280000dd8012000d00120007ffffdf9010000008c21a00c8b19600cba10200298100006fa21bffcd023200496103ff5d62320008c21a0248b196024ba10200896100006fa21bffc94102001d422e01c92102001d222e01890102001d022e01484102005c422e010ae102001ee22e00cac102001ec22e008ea012004ea22e004d822e0008c21a00c8b19600cba10200290100006fa21bffcd6222004a8103fe5e8222000e601200881c4e0068801200c|@3271,131071|48,4,@542 128,4,@621 268,5,@3258 3271:S26|56414c55455f4f505328292e6162737472616374283129283129 3272:S25|56414c55455f4f505328292e746167426f78436f6465283129 3273:C2,448|9e13e002f606201880a1001b8bd02018808aa00122800005de213ffc8410000a1080000b8c21a00c84100008113f002990022348f40620209fc6a00088013ffc94100002841020018c21a00c8b19600cba10200294100006fa21bffcc422a00484103ff5c422a000d2213ffcaa10000fa8100008901020019a013ffc4000005888013ffc8c21a00c8b19600cba1020029e100006fa21bffcd023e004d423e0008c21a00c8b19600cba1020029a100006fa21bffcde23600494102029d4236000ea213ffce8213ff8da213ff488013ff480a3e00132800005d003e000921020051080000c80a26001c402200080a0bff53280000792102001de03e004f606201880a1001b8bd0201830bffff280a260012280000dee012000d00120007ffffd70010000008c21a00c8b19600cba102002ae100006fa21bffcd025e004ac103ff5ec25e0008c21a0248b196024ba102008ac100006fa21bffcaa102001ea25a01ca8102001e825a018a6102001e625a014a4102005e425a010a2102001e225a00ca0102001e025a008de012004de25a004ee25a0008c21a00c8b19600cba10200290100006fa21bffcec22200482103fe5c2222000da01200881c3600688012010|@3276,131071|44,4,@542 124,5,@3274 284,5,@3258 3274:C2,172|9e13e002f606201880a1001b8bd02018c4036000b820a001ba222001811f401c36800021901020018c21a0108b196010ba102003ae100006fa21bffcd025e0082d3f002dac05a15cec25e004ac102019ec25e000b8222001b917200490072001de213ffcda213ff8ee213ff47fffffe588013ff48c21a00c8b19600cba1020029e100006fa21bffcd023e004da012000da23e0009010000fc401200881c0a0068801200c81c3e00601000000|@3275,114849|64,4,@623 3275:S39|56414c55455f4f505328292e7461675475706c65436f64652833296765744669656c6473283129 3276:S27|56414c55455f4f505328292e7461675475706c65436f6465283329 3277:S25|56414c55455f4f505328292e636f6e7374724d616b65283229 3278:O3|@3280,@4512,@3279 3279:O3|@4709,@4708,@4513 3280:C2,2456|9e13e002f6062018ba21206c80a7401b8bd02018de213ffcda213ff8d0213ff4d2213ff0133f0040920261ecd0013ff01b3f00389a0360407ffece9f88013ff0d0213ffc133f016b92026358d00120001b3f00389a0360407ffece9788013ffcd0213ffc133f016c92026080d00120041b3f00389a0360407ffece8f88013ffcd0213ffc133f003a92026070d00120081b3f00389a0360407ffece8788013ffcc401200480a0a0012280000f8c21a00c8c21a0108b196010ba102003ae100006fa21bffc2d3f016cac05a1a8ec25e000d025e008ea01200cea25e0041080000cd0213ffc8b19600cba102002ae100006fa21bffc2d3f022dac05a048ec25e000ea01200cea25e004d0213ffcd0213ff8d0213ff4ee213ff094102001921021019010202d1b0000829a036338f40360009fc6a00088013ff0a8102029e82220008c21a00c8b19600cba102002a6100006fa21bffcd024e004a4103ffde424e0008c21a0088b1960083b100000ba076001a2100006fa21bffce6246000a0012008e22420009e01200882102001c223e0048c21a00c8b19600cba1020029a100006fa21bffcd8012008d8236000d601200cd6236004d0213ffcd0213ff8da213ff494102001921021019010202d1b0000829a036338f40360009fc6a00088013ff494102029d42220008c21a00c8b19600cba10200292100006fa21bffcd022600490103ffdd02260008c21a0088b1960083b100000ba07600184100006fa21bffcd220a000ae012004c425e000ac012004aa102001ea25a0048c21a00c8b19600cba102002a8100006fa21bffce6012004e6252000e4012008e4252004e201202cde04600080a3fff132800003a0100011e00460088c21a0108b196010ba10200382100006fa21bffc1b3f022d9a036088da206000e8206008d8012000d8206004d60120308c21a0188b196018ba10200594100006fa21bffc133f022d920261bcd222a000d0012024d022a010c4012010c422a00cee02e004ee22a008ec01200cec22a0048c21a00c8b19600cba102002aa100006fa21bffc1b3f022f9a03617cda256000e82560048c21a00c8b19600cba10200292100006fa21bffc1b3f002c9a0361f8da226000d82260048c21a00c8b19600cba10200298100006fa21bffc1b3f022f9a0362e8da232000c22320048c21a00c8b19600cba10200282100006fa21bffc1b3f022f9a036364da206000e82060048c21a0088b1960083b100000ba076001a8100006fa21bffc9a102005da252000c2213ffc82102001c2213ff8e8213ff49a102001da213ff0d4213fec94102001d4213fe8a8102001e8213fe4c201201cc2213fe0da02e0089610000c941000099210001590100010f40360009fc6a00088013fe0d0213ffcd2012018d00120144000c59a88013ffcd201200cd00120084000c59601000000d8012000d403200080a2bffd3280000680a2a005d2032004d60260081080000680a2bffd32800003d6032004d603200880a2bffd3280000601000000d0032004d20220101080000580a2bffd133f002b9202625c80a2bffd3280000680a2a005c4032004d000a00010800006ee0260003280000390102001d0032004ee02600080a5ffe53280001580a5fff9ec026004aa1000088c21a00c8b19600cba10200290100006fa21bffca8103ffde8222004e605a014e6222000d6213ffcd2213ff8ea213ff44000c5d388013ff4841000081080000a80a0a001328000038410200184102005d6213ffcd2213ff8d0213ff488013ff480a0a00122800074ec0120008c21a00c8b19600cba102002ac100006fa21bffcaa102001ea25a004e8012008e825a00080a5a00132800005ec213ffcd00120001080000701000000d00120009a0120444000c6c088013ffc880120044000c6e001000000e602200080a4fff53280000fe4012034a41000088c21a00c8b19600cba10200290100006fa21bffc233f0231a20463a8e2222000e4222004e001204481c420068801204880a4a0012280002ad0213ffcd0213ffcd0213ff8d0213ff4d0213ff0d0213fecd0213fe8d0213fe4d0213fe094013fe4d2012020901021357ffeab6388013fe08c21a0208b196020ba102007a2100006fa21bffce0012004e0246000de012008de246004c201200cc2246008da012010da24600cd8012014d8246010d6012018d6246014d401201cd424601892100011d00120001b3f001f9a0362687ffeb4a6010000001080000be2012060d0213ff8d0213ff4d0213ff0d0213fecd0213fe8d0213fe4d0213fe088013fe0e2012060d2012000d001203cda046004f40360009fc6a00001000000da01203cf40360009fc6a00001000000a01000088c21a00c8b19600cba10200290100006fa21bffc1f3f02319e03e3f4de222000e0222004c201206481c060068801206880a5a0013280000f901000168c21a00c8b19600cba10200290100006fa21bffc2b3f0232aa0560a4ea222000e801200ce8222004e601204481c4e006880120484000c70e0100000092100008901020054000c778010000008c21a00c8b19600cba102002aa100006fa21bffcd0256004e8012008e82560008c21a00c8b19600cba102002a6100006fa21bffcea24e004a4102029e424e000e6213ffc88013ffc80a5600132800005e0056000a21020051080000c80a46001de04200080a3fff532800007a2102001ea056004f606201880a1001b8bd0201830bffff280a460012280000dc2012000d00120007ffffaf8010000008c21a00c8b19600cba10200282100006fa21bffcd02060049a103ff5da2060008c21a00c8b19600cba1020029a100006fa21bffc98102001d8236004c223600080a3600132800005da213ffcd6012004108000098c21a00cd00120049a0120484000c7f988013ffc96100008880120048c21a00c8b19600cba10200294100006fa21bffcd622a00492102025d222a000d001203880a220012280002ad0213ffcd0213ffcd0213ff8d0213ff4d0213ff0d0213fecd0213fe8d0213fe4d4213fe094013fe4d2012024901021357ffeaab688013fe08c21a0208b196020ba10200784100006fa21bffcee012004ee20a000ec012008ec20a004ea01200cea20a008e8012010e820a00ce6012014e620a010e4012018e420a014e201201ce220a01892100002d00120001b3f001f9a0362687ffeb3f9010000001080000bc4012064d0213ff8d0213ff4d0213ff0d0213fecd0213fe8d0213fe4d4213fe088013fe0c4012064d2012000d0012040da00a004f40360009fc6a00001000000da012040f40360009fc6a00001000000ae1000088c21a0148b196014ba10200490100006fa21bffc2d3f0233ac05a23cec222000ee22200cea012030ea222008e8012028e8222004e601206881c4e0068801206c|@4511,131071|36,4,@1230 48,4,@1112 56,5,@1114 68,4,@3281 80,4,@1112 88,5,@1114 100,4,@3288 112,4,@1112 120,5,@1114 132,4,@1187 144,4,@1112 152,5,@1114 196,4,@3295 244,4,@4457 292,4,I11 460,4,I11 648,4,@4458 696,4,@4460 760,4,@4473 796,4,@607 832,4,@4477 868,4,@4479 1012,5,@4481 1028,5,@4481 1112,4,@581 1232,5,@4483 1360,5,@4487 1372,5,@4488 1420,4,@4490 1504,5,@428 1596,4,@486 1604,5,@488 1720,4,@4492 1780,4,@4493 1812,5,@4494 1828,5,@4497 1984,5,@3258 2088,5,@4505 2196,5,@428 2288,4,@486 2296,5,@488 2412,4,@4506 3281:O3|@3283,@3285,@3282 3282:O2|@3287,@89 3283:O2|@3284,@89 3284:C2,44|9e13e002c4022000ee03600480a0801732800005901020019010200581c3e0060100000081c3e00601000000|@1106,98465| 3285:O2|@3286,@89 3286:C2,56|9e13e002841000088c21a0108b196010ba10200390100006fa21bffcc422200884102115c4222004c4036004c422200081c3e00601000000|@1106,65697| 3287:C2,60|9e13e002c4022000ee03600480a0801732800005de213ffcd002200881c3e00601000000113f003890022020f40620209fc6a00088013ffc90102001|@1106,98465|36,4,@1110 3288:O3|@3290,@3292,@3289 3289:O2|@3294,@84 3290:O2|@3291,@84 3291:C2,44|9e13e002c4022000ee03600480a0801732800005901020019010200581c3e0060100000081c3e00601000000|@1106,98465| 3292:O2|@3293,@84 3293:C2,56|9e13e002841000088c21a0108b196010ba10200390100006fa21bffcc422200884102115c4222004c4036004c422200081c3e00601000000|@1106,65697| 3294:C2,60|9e13e002c4022000ee03600480a0801732800005de213ffcd002200881c3e00601000000113f003890022020f40620209fc6a00088013ffc90102001|@1106,98465|36,4,@1110 3295:C2,208|9e13e002f606201880a1001b8bd02018d0213ffcd0213ff8d0213ff4d0213ff0d0213fecd0213fe8d0213fe4de213fe0da213fdcd0213fd894013fe4d2036008901021357ffea9c988013fd88c21a0208b196020ba10200784100006fa21bffcee01200cee20a000ec012010ec20a004ea012014ea20a008e8012018e820a00ce601201ce620a010e4012020e420a014e2012024e220a01892100002d00120001b3f001f9a0362687ffeb30c01000000e0012004d2042004d0012000de012008353f016cb406a29481c6a00488012028|@4456,131071|68,5,@428 160,4,@486 168,5,@488 192,4,@3296 3296:C2,432|9e13e002f606201880a1001b8bd02018c402200080a0bfe53280003bde213ffcee022004de213ffcd2213ff8fa05e000fa213ff4fa05e010fa213ff0fa05e018fa213fec94100009d205e004901020014000005f88013fec8c21a00c8b19600cba102002ac100006fa21bffc2b3f016eaa05610cea25a000d025a004293f0174a8052154e8213ffc273f0174a604e1c0e6213ff8a4102005e4213ff4e2012004e2213ff0e0012000e0213fecde01200cde213fe8173f01749602e2049410001692100008d0012008400007b788013fe8821000088c21a00c8b19600cba10200290100006fa21bffc1b3f022c9a036218da222000c2222004d801201081c3200688012014d0213ff8d2213ff494100009133f022c92026264901020014000002c88013ff42f3f022cae05e278ee213ffc2d3f022cac05a2bcec213ff8aa102005ea213ff4a8102001e8213ff0a6102001e6213fece4012000e4213fe8173f022c9602e300153f022c9402a33492100008d00120044000078c88013fe8a21000088c21a00c8b19600cba10200290100006fa21bffc213f022ca00423a4e0222000e2222004de01200881c3e0068801200c|@4455,131071|80,5,@3297 108,4,@3306 124,4,@3355 136,4,@3359 180,4,@3361 200,5,@3363 232,4,@4441 272,4,@4443 284,5,@3297 292,4,@4444 304,4,@4446 348,4,@4448 356,4,@4450 372,5,@3363 404,4,@4454 3297:C2,832|9e13e002f606201880a1001b8bd02018de213ffcd0213ff8d2213ff4d4213ff09410200192102105901020211b0000829a036338f40360009fc6a00088013ff08c21a00c8b19600cba10200284100006fa21bffcd020a004ae102001ee20a0008c21a0088b1960083b100000ba076001ac100006fa21bffcc425a0008c21a0088b1960083b100000ba076001aa100006fa21bffca8102001e82560008c21a0088b1960083b100000ba076001a6100006fa21bffca4102001e424e0008c21a0088b1960083b100000ba076001a2100006fa21bffca0102001e02460008c21a0088b1960083b100000ba0760019e100006fa21bffc82102001c223e0008c21a0088b1960083b100000ba0760019a100006fa21bffc98102001d82360008c21a0088b1960083b100000ba07600196100006fa21bffc94102001d422e0008c21a0088b1960083b100000ba07600192100006fa21bffc90102001d02260008c21a0088b1960083b100000ba07600184100006fa21bffcae102001ee20a0008c21a0088b1960083b100000ba076001a8100006fa21bffca4102001e42520008c21a0088b1960083b100000ba076001a0100006fa21bffc82102001c22420008c21a0088b1960083b100000ba07600198100006fa21bffc94102001d42320008c21a0088b1960083b100000ba07600190100006fa21bffcae102001ee2220008c21a0088b1960083b100000ba076001a4100006fa21bffc82102001c224a000ec213ffcea213ff8e6213ff4e2213ff0de213fecda213fe8d6213fe4d2213fe0c4213fdce8213fd8e0213fd4d8213fd0d0213fcce4213fc8133f016d920263bcd00120001b3f00389a0360407ffeca6488013fc8d0213ffc133f003a92026070d00120381b3f00389a0360407ffeca5c88013ffc8c21a04c8b19604cba1020129a100006fa21bffcd8012000d8236044d601201cd6236040d4012018d423603cd0236038d201202cd2236034d0012028d0236030c4012024c423602cee012004ee236028ec01200cec236024ea012010ea236020e8012020e823601ce6012044e6236018e4012040e4236014e2012030e2236010e0012008e023600cde012038de236008c2012014c2236004d8012034d82360009010000dd601204881c2e0068801204c|@3305,131071|44,4,I11 596,4,@3298 608,4,@1112 616,5,@1114 628,4,@1187 640,4,@1112 648,5,@1114 3298:O3|@3300,@3302,@3299 3299:O2|@3304,@88 3300:O2|@3301,@88 3301:C2,44|9e13e002c4022000ee03600480a0801732800005901020019010200581c3e0060100000081c3e00601000000|@1106,98465| 3302:O2|@3303,@88 3303:C2,56|9e13e002841000088c21a0108b196010ba10200390100006fa21bffcc422200884102115c4222004c4036004c422200081c3e00601000000|@1106,65697| 3304:C2,60|9e13e002c4022000ee03600480a0801732800005de213ffcd002200881c3e00601000000113f003890022020f40620209fc6a00088013ffc90102001|@1106,98465|36,4,@1110 3305:S29|5350415243434f4445434f4e5328292e636f6465437265617465283329 3306:C2,84|9e13e002f606201880a1001b8bd020188c21a00c8b19600cba10200284100006fa21bffcee036004ee20a004ac102001ec20a000d402200892100002113f016e9002217c353f016eb406a19081c6a00401000000|@3354,131071|60,4,@3307 68,4,@3308 3307:S11|70757368436f6465526566 3308:C2,364|9e13e002f606201880a1001b8bd02018c402a01cee00a000ea02600080a57ff532800023ac103ffde8026004b8252001811f200026800003a6102001a610200580a4e00132800005b8252001a410001410800005de213ffcb91f3ff4a4072001de213ffcd0213ff8d2213ff4d4213ff0fa02a00cfa213fecfa02a028fa213fe8ee213fe492103ff1901000121b0000859a036378f40360009fc6a00088013fe4ac1000081080000d8c21a014de213ffcd0213ff8d2213ff4d4213ff0fa02a00cfa213fecfa02a028fa213fe8ee213fe488013fe48c21a0148b196014ba102004a8100006fa21bffcec25200ca6102001e6252008a4102005e4252004e2012010e225200094100014d2012000d00120084000001e01000000e001200cde012000b823e001b917200482072001da04201cc2236000d801200480a3200122800009d001200094100010d201201411000083900223d8400000c101000000d0012000d601201881c2e0068801201c|@3353,131071|140,4,I109 272,5,@3309 332,4,I48 340,5,@3313 3309:C2,596|9e13e002f606201880a1001b8bd02018c4022000ee00a000ec05e00080a5a0013280000aea05e004de213ffc113f016f90022188f40620209fc6a00088013ffc90102001ea05e004e8056000b8252001ba226001811f401c3680001ce8056000b8226001811f200036800004e805600010800009de213ffcb8252001ba226001811f401c36800004de213ffc10800009b8226001113f0004900223d0f40620209fc6a00088013ffc90102001b8226001b9172004a8072001d425401c9010200181c3e00601000000b8252001ba10001cbb17401db917401ca6072001b8226001b9172004a8072001ba24e001811f401c24800003a4100014a4100013b824a001b9172004a6072001de213ffcd2213ff8d4213ff4c4213ff0ea213fece4213fe8d402200492102101901000131b0000829a036338f40360009fc6a00088013fe8e4012000e4222000e2012004e0046000b8242001b91720009e072001c2022000ba206001811f001d24800009d0213ffc9a100008113f0004900223d0f40620209fc6a00001000000d0213ffce0213ff8961020059410000892102005901000111b0000889a036238f40360009fc6a00088013ff88c21a00c8b19600cba1020029a100006fa21bffcd8012000d823600496103ffdd6236000d401200cda22a000d2012014b8226001811f200036800004d00320001080000901000000b8222001ba226001811f401c368000040100000010800009b8226001113f0004900223d0f40620209fc6a0000100000090102001b8226001b917200484072001ee012010ee23001c90102001ec01201881c5a0068801201c|@3312,131071|44,4,@3310 148,4,@224 300,4,I11 372,4,@224 416,4,I195 536,4,@224 3310:O3|103,@522,@3311 3311:S39|417474656d707420746f207570646174652061206c6f636b656420737472657463684172726179 3312:S22|5374726574636841727261792e757064617465283329 3313:C2,552|9e13e002f606201880a1001b8bd02018de213ffcd0213ff8d4213ff4fa02a024fa213ff0901020297ffeb58f88013ff0133f0029920263d07ffeb58b01000000d20120087ffeb58801000000133f01709202602c7ffeb58401000000da012000f40360009fc6a00001000000113f017090022038da012000f40360009fc6a00001000000c4012004ee00a01cec05e00092103ffd901000167ffeb6e301000000da012000f40360009fc6a00001000000113f017090022044da012000f40360009fc6a00001000000ea012004e8056008e605200092103ffd901000137ffeb6d201000000da012000f40360009fc6a00001000000113f017090022054da012000f40360009fc6a00001000000e4012004e204a030e004600092103ffd901000107ffeb6c101000000da012000f40360009fc6a0000100000090102029da012000f40360009fc6a00001000000113f017090022064da012000f40360009fc6a00001000000de012004d2012000d003e010400000470100000090102029da012000f40360009fc6a00001000000d2012004901020054000019301000000c202200880a060012280001e90102001d0213ffcda02200490102001f40360009fc6a00088013ffcd8012008961000089210000bd003200c7ffebcbe01000000d4012004921000089010000b400002ce01000000d401200090102001da02a000f40360009fc6a0000100000088012004f606201880a1001b8bd0201830bfffe1da01200c81c3600688012010|@3352,131071|40,5,@496 48,4,@550 56,5,@496 68,5,@496 76,4,@3314 84,5,@496 108,4,@3315 152,5,@509 176,4,@3316 220,5,@509 244,4,@3317 288,5,@509 332,4,@3318 368,5,@3319 404,5,@3330 468,5,@608 488,5,@3340 3314:S2|290a 3315:S4|7073703d 3316:S5|206c696d3d 3317:S5|207273703d 3318:S5|726567733d 3319:C2,124|9e13e002f606201880a1001b8bd02018d2213ffcd0213ff8de213ff48410200188013ff4b820a001811f204024800006c4213ffc90102001de01200081c3e0068801200c901000029a0120084000001388013ffcee012000b825e001b9172004ac0720018410001688012004f606201880a1001b8bd0201830bfffeb|@3329,131071|76,5,@3320 3320:C2,316|9e13e002f606201880a1001b8bd02018c4037ffcb8222001811f200036800004ee00a0001080000ade213ffcec05e000b825a001ba222001811f401c36800004de213ffc1080000ab8222001ac100008113f0004900223d0f40620209fc6a00088013ffcae102001b8222001b9172004ac072001ea05c01cae100015b825e001811f20002480002c90102001de213ffcda213ff8d0213ff4ee213ff090102081da036000f40360009fc6a00088013ff0e8012008fa052000fa213ffcd00120044000002688013ffc4000008301000000da012000f40360009fc6a00001000000e601200c901020f5da04e000f40360009fc6a00001000000e401200cfa04a000fa213ffc92103ffdd00120047ffeb5fd88013ffcda012000f40360009fc6a0000100000090102001e201201481c460068801201881c3e00601000000|@3328,131071|80,4,@224 192,5,@3321 200,5,@3324 268,5,@509 3321:C2,284|9e13e002f606201880a1001b8bd02018b8222001811f200036800004b822200110800007de213ffc811f204436800004de213ffc1080002a80a2201992103ffd7ffeb5da88013ffc8c21a00c8b19600cba10200284100006fa21bffcae102001ee20a004d020a0008c21a00c8b19600cba10200290100006fa21bffcc42220042d3f0170ac05a39cec2220007ffeb725010000008c21a0108b196010ba102003aa100006fa21bffcd0256008293f000fa80523bce8256004273ee008a604e1fce625600090100015f40620209fc6a000010000009010200180a2201932800005b82220019010200581c3e00601000000811f20403680000890102009b8222001b9172020840720019010000281c3e0060100000081c3e00601000000|@3323,131071|64,5,@509 128,4,@3322 140,5,@520 172,4,@397 184,4,@24 3322:S26|7265674e3a20426164207265676973746572206e756d62657220 3323:S23|5350415243434f4445434f4e5328292e7265674e283129 3324:C2,324|9e13e002f606201880a1001b8bd0201880a220113280000680a2200d113f01719002214081c3e0060100000032800006b8222001113f01719002214c81c3e00601000000811f201c3480000db8222001de213ffc92103ffd7ffeb57588013ffc921000089010219dde012000353f0025b406a04c81c6a00488012004811f203c34800011b8222001b8222001b91f202084072001de213ffc92103ffd901000027ffeb56388013ffc92100008901021bdde012000353f0025b406a04c81c6a00488012004811f205c34800011b8222001b8222001b91f204084072001de213ffc92103ffd901000027ffeb55188013ffc92100008901021b1de012000353f0025b406a04c81c6a00488012004b91f206084072001de213ffc92103ffd901000027ffeb54388013ffc92100008901021a5de012000353f0025b406a04c81c6a00488012004|@3327,131071|28,4,@3325 52,4,@3326 88,5,@509 108,4,@496 160,5,@509 180,4,@496 232,5,@509 252,4,@496 288,5,@509 308,4,@496 3325:S3|707370 3326:S3|706872 3327:S26|5350415243434f4445434f4e5328292e72656752657072283129 3328:S35|5452414e535f54414228292e7072696e74526567732832297072696e74526567283129 3329:S24|5452414e535f54414228292e7072696e7452656773283229 3330:C2,368|9e13e002f606201880a1001b8bd0201880a220012280002c8c21a00c8c21a00c8b19600cba10200290100006fa21bffc053f01718400a354c4222000d2222004ee02601cec05e000de213ffcd2213ff8d0213ff488013ff4b825a001b91f2004aa072001811f200036800005e80120049010001510800010da012000a610001592100013d005200c7ffebb190100000080a220013280000790100013ac100013f606201880a1001b8bd0201830bfffebda012000de012008f403600081c6a0048801200c8b19600cba10200284100006fa21bffc2f3f0172ae05e140ee20a000d220a004de213ffcd2213ff8c4213ff4ac103ffd88013ff4b825a001b9172004aa072001e8012004e605201ce404e000ba24a001811f001d26800005a2100015901000151080000fda01200092100011d005200c7ffebaee0100000080a220013280000790100011ac100011f606201880a1001b8bd0201830bfffe8da012000de012008f403600081c6a0048801200c|@3339,131071|48,4,@3331 136,5,@608 212,4,@3336 308,5,@608 3331:C2,152|9e13e002b8222001811f20002680000384102001841020058c21a00c8b19600cba102002ae100006fa21bffc2d3f0172ac05a008ec25e000d025e0048c21a0148b196014ba102004ac100006fa21bffc2b3f0172aa056060ea25a000da25a00cd025a008d0036004d025a0048c21a0108b196010ba102003aa100006fa21bffcc4256008ee256004ec2560009010001581c3e00601000000|@3335,123041|44,4,@3332 80,4,@3334 3332:C2,16|9e13e002d003600481c3e00601000000|@3333,161| 3333:S36|5452414e535f54414228292e6f766572537461636b2832296d6b49746572283129283129 3334:C2,152|9e13e002f606201880a1001b8bd02018de213ffcda213ff8fa03600cfa213ff4c403600888013ff4b820a001b91f2004ae072001811f200036800005ec0120049010001710800011da012000ea05a004a610001792100013d005600c7ffeba7e0100000080a22001328000079010001384100013f606201880a1001b8bd0201830bfffeada012000de012008f403600081c6a0048801200c|@3333,131071|92,5,@608 3335:S33|5452414e535f54414228292e6f766572537461636b2832296d6b49746572283129 3336:C2,160|9e13e002c4036004ee00a01cec05e000b825a001ba222001811f401c36800003aa102001aa1020058c21a00c8b19600cba102002ac100006fa21bffc293f0172a80521fce825a000d025a0048c21a0148b196014ba102004a8100006fa21bffc273f0172a604e228e6252000da25200cd0252008c42520048c21a0108b196010ba10200390100006fa21bffcea222008ec222004e822200081c3e00601000000|@3335,129185|60,4,@3337 96,4,@3338 3337:C2,16|9e13e002d003600481c3e00601000000|@3333,161| 3338:C2,164|9e13e002f606201880a1001b8bd02018de213ffcda213ff8fa03600cfa213ff4c403600888013ff4b820a001b9172004ae072001ec012004ea05a004e805601ce6052000ba24e001811f001d26800005a4100017901000171080000fda01200092100012d005600c7ffeba090100000080a22001328000079010001284100012f606201880a1001b8bd0201830bfffe7da012000de012008f403600081c6a0048801200c|@3333,131071|104,5,@608 3339:S24|5452414e535f54414228292e6f766572537461636b283229 3340:C2,428|9e13e002f606201880a1001b8bd0201880a2600132800005de213ffc9010200181c3e00601000000d4213ff8fa026000fa213ff4fa026004fa213ff0fa026008fa213fecfa02600cfa213fe892103ffd7ffeb3ad88013fe8da012010f40360009fc6a0000100000090102081da012010f40360009fc6a0000100000092103ffdd00120087ffeb3a001000000da012010f40360009fc6a0000100000090102081da012010f40360009fc6a00001000000d2012010d001200c400000440100000092102001d0012004400001190100000080a2200122800010c4012000113f01749002209cda012010f40360009fc6a00001000000d00120047ffffdf801000000da012010f40360009fc6a00001000000c401200080a0bffd32800004010000001080001e90102029113f0174900220a8da012010f40360009fc6a00001000000ee012000b825e001ba10001cbb17401db917401dba102000b91f401cac07200192103ffd901000167ffeb36701000000da012010f40360009fc6a00001000000901020a5da012010f40360009fc6a0000100000090102029da012010de012014f403600081c6a00488012018|@3351,131071|80,5,@509 132,5,@509 184,5,@3341 200,5,@3347 220,4,@3349 248,5,@3324 296,4,@3350 360,5,@509 3341:C2,692|9e13e002f606201880a1001b8bd02018c402200080a0a0093280000c80a0bff9de213ffcd2213ff8d00220047ffffdb988013ff8da012000de012004f403600081c6a004880120083280002180a0a001ee022004808de00122800019901020fd808de00122800005de213ffcac10001710800009de213ffc113f002990022348f40620209fc6a00088013ffcac102001de213ffcd2213ff892103ffd901000167ffeb32788013ff8da012000de012004f403600081c6a004880120089a100009f403600081c6a004010000003280001880a0a005de213ffcd2213ff8fa022004fa213ff4901020a19a100009f40360009fc6a00088013ff4d00120004000007501000000da012004f40360009fc6a00001000000901020a5da012004de012008f403600081c6a0048801200c3280002180a0bff5de213ffcd2213ff8fa022008fa213ff4d00220047ffffd7288013ff4da012004f40360009fc6a00001000000113f0173900223f0da012004f40360009fc6a0000100000092103ffdd00120007ffeb2ef01000000da012004f40360009fc6a00001000000901020a5da012004de012008f403600081c6a0048801200c3280001ade213ffcde213ffcd2213ff8fa022004fa213ff4113f0173900223fc9a100009f40360009fc6a00088013ff492103ffdd00120007ffeb2d501000000da012004f40360009fc6a00001000000901020a5da012004de012008f403600081c6a0048801200cd2213ff8fa022004fa213ff49010216d9a100009f40360009fc6a00088013ff4ee01200080a5e00132800004fa05e0041080001690102175fa213ffc92103ffdd005e0007ffeb2b888013ffcda012008f40360009fc6a0000100000090102081da012008f40360009fc6a00001000000ee01200088012004f606201880a1001b8bd0201830bfffe8da012004de012008f403600081c6a0048801200c|@3346,131071|44,5,@3324 120,4,@542 160,5,@509 252,5,@3342 328,5,@3324 352,4,@3344 384,5,@509 456,4,@3345 488,5,@509 604,5,@509 3342:C2,16|9e13e002d002201481c3e00601000000|@3343,129| 3343:S27|5350415243434f4445434f4e5328292e70726f634e616d65283129 3344:S2|4028 3345:S6|626173654028 3346:S30|5452414e535f54414228292e7072696e74537461636b556e696f6e283229 3347:C2,40|9e13e002b8226001ba222001811f401c3280000384102001841020059018a00481c3e00601000000|@3348,65667| 3348:S25|5350415243434f4445434f4e5328292e7265674e6571283229 3349:S4|20696e20 3350:S10|20746f20626173654028 3351:S25|5452414e535f54414228292e7072696e74456e747279283329 3352:S25|5452414e535f54414228292e7072696e74537461636b283329 3353:S25|5452414e535f54414228292e7075736850737461636b283329 3354:S34|475f434f444528292e67656e636f6465283229636c6f73757265416464722d283129 3355:O1|@3356 3356:C2,32|9e13e002de213ffc113f017490022198f40620209fc6a00088013ffc90102001|@3354,129|8,4,@3357 3357:O3|@24,@397,@3358 3358:S15|4e6f7420737461746963206c696e6b 3359:O1|@3360 3360:C2,32|9e13e002de213ffc113f017490022198f40620209fc6a00088013ffc90102001|@3354,129|8,4,@3357 3361:O1|@3362 3362:C2,16|9e13e0029010200181c3e00601000000|@3354,129| 3363:C2,1864|9e13e002f606201880a1001b8bd02018de213ffcd0213ff8d2213ff4d4213ff0d6213fecd0012000400001cf88013fec84100008921020019010203d400003560100000080a2200122800012c4213ffcc4213ffc901000024000036988013ffcd0213ffc15000f429402a10192100008d00120001b3f01789a03612c400003a488013ffcee0120001080001bec0120289410203dd2012008901000021b3f017a9a0361d0400005c488013ffcd4012000133f01999202619c113f0199900221a87ffff9a601000000d0213ffc15000f429402a0fd92100008d00120001b3f01789a03612c4000038a88013ffcee012000ec012028aa1da004b8256001811f200024800021a8103ffdee213ffcea213ff894102035d2012010d00120041b3f017a9a0361d0400005a488013ff8d401200c133f0199920261b8113f0199900221a87ffff98601000000e6012000b824e001b91f2004a4072001d0213ffc9410001292100008d001200c1b3f01789a03612c4000036788013ffce801200010800007e8213ffcee213ffcd0213ff8d0213ff488013ff4e8213ffc94103ffd92102101901020151b0000829a036338f40360009fc6a00088013ffca8102011e8222000d0213ffc901020019a0120284000247088013ffc8c21a0188b196018ba102005a6100006fa21bffc253f019aa404a074e424e000e2012038e224e010e0012010e024e00cde012024de24e008c2012018c224e0048c21a0108b196010ba1020039a100006fa21bffc193f01ac980322d0d8236000de236008c22360048c21a0108b196010ba10200396100006fa21bffc153f01af9402a1f8d422e000de22e008c222e0048c21a0248b196024ba10200892100006fa21bffc113f01af9002236cd0226000c4012020c422601cde226018ee01203cee226014ec012004ec226010e222600cea012000ea226008c22260048c21a0188b196018ba102005a8100006fa21bffc253f01b1a404a138e4252000ee252010ec25200ce2252008ea2520048c21a0348b1960343b100000ba07600c98100006fa21bffc153f01b39402a190d423200090102001d0232004a4102001e423200894102001d423200c90102001d0232010a4102001e423201494102001d423201890102001d023201ca4102001e423202094102001d423202490102001d0232028a4102001e423202c8c21a0448b1960443b100000ba07601094100006fa21bffc113f01e99002217cd022a000a4102001e422a00490102001d022a008a4102001e422a00c90102001d022a010a4102001e422a01490102001d022a018a4102001e422a01c90102001d022a020a4102001e422a02490102001d022a028a4102001e422a02c90102001d022a030a4102001e422a03490102001d022a038a4102001e422a03c8c21a0208b1960203b100000ba07600790100006fa21bffc253f01f4a404a268e4222000a4102001e4222004a4102001e4222008a4102001e422200ca4102001e4222010a4102001e4222014a4102001e42220188c21a03c8b19603c3b100000ba07600ea4100006fa21bffc1f3f01f59e03e3f8de24a0009e102001de24a0049e102001de24a0089e102001de24a00c9e102001de24a0109e102001de24a0149e102001de24a0189e102001de24a01c9e102001de24a0209e102001de24a0249e102001de24a0289e102001de24a02c9e102001de24a0309e102001de24a0348c21a0148b1960143b100000ba0760049e100006fa21bffc053f02168400a064c423e00084102001c423e00484102001c423e00884102001c423e00c8c21a00c8b19600c3b100000ba07600284100006fa21bffc033f021a820063f4c220a00082102001c220a0048c21a0148b196014ba10200482100006fa21bffc213f021ba00421e4e0206000d820600ce0012024e0206008e0012018e0206004d820a004c028bffce023e004e0012024e023e008d823e00cc02bfffcd024a004e0012018e024a008e0012024e024a00cd824a010da24a014ec24a018e0012040e024a01cec012044ec24a020ee24a024ea01201cea24a028e224a02cea012010ea24a030c424a034c02cbffcc4012018c4222004c4012024c4222008c222200cd8222010e6222014de222018c02a3ffc1f3f021b9e03e390de22a004de012030de22a008c4012018c422a00cc4012000c422a010c4012024c422a014e222a018c4012004c422a01cee22a020e022a024ec22a028c401201cc422a02cc4012020c422a030da22a034d822a038d622a03cc02abffcd6012018d6232004c4012024c4232008c223200ce6232010e4232014d2232018d423201cd0232020e8232024ea232028da23202cc02b3ffce6213ffcaa102001ea213ff8173f01f49602e19094102001133f01bb920263dcd00120289a100001f40360009fc6a00088013ff8d001201c400046380100000080a2200132800008a810200190102001da012000f40360009fc6a00001000000a8100008d001201c4000a59601000000d0213ffcd001201c4000a59e88013ffc94100008d2012000d001202c1b3f021c9a0361e0de012034353f021cb406a21481c6a00488012050|@4440,131071|40,5,@3364 60,5,@3373 88,5,@3375 100,4,1000000 116,4,@3378 124,5,@3380 156,4,@3393 164,5,@3395 176,4,@3608 184,4,@3609 192,5,@3308 204,4,999999 220,4,@3378 228,5,@3380 284,4,@3393 292,5,@3395 304,4,@3610 312,4,@3609 320,5,@3308 360,4,@3378 368,5,@3380 420,4,I11 460,5,@3611 488,4,@3614 552,4,@3708 592,4,@3724 632,4,@3726 708,4,@3737 760,4,@3745 884,4,@4063 1040,4,@4152 1124,4,@4158 1264,4,@4280 1324,4,@4298 1364,4,@4302 1540,4,@4308 1708,4,@4146 1720,4,@3766 1752,5,@3772 1800,5,@4309 1816,5,@4310 1836,4,@4314 1848,4,@4316 3364:C2,1224|9e13e002f6062018ba21206080a7401b8bd02018d0213ffcd0213ff8de213ff4d0213ff094103ffd92102101901020191b0000829a036338f40360009fc6a00088013ff084102015c42220008c21a00c8b19600cba102002ae100006fa21bffcd025e004ac103ffdec25e0008c21a0088b1960083b100000ba076001aa100006fa21bffcee256000a8012008ea252000a6012008a4103ffde424e0048c21a00c8b19600cba102002a2100006fa21bffce0012008e0246000de01200cde246004d0213ffcd0213ff8e2213ff49410200192102101901020191b0000829a036338f40360009fc6a00088013ff482102015c22220008c21a00c8b19600cba1020029a100006fa21bffcd023600498103ffdd82360008c21a0088b1960083b100000ba07600196100006fa21bffcda22e00094012004d622a0009201200490102001d02260048c21a00c8b19600cba10200284100006fa21bffcee012004ee20a000ec012008ec20a004d0213ffcd0213ff8d0213ff4d0213ff0c4213fec9410200192102101901020491b0000829a036338f40360009fc6a00088013fecaa102045ea2220008c21a0088b1960083b100000ba076001a8100006fa21bffca6102041e62520008c21a0088b1960083b100000ba076001a4100006fa21bffc233f0031a2046124e224a0008c21a0088b1960083b100000ba076001a0100006fa21bffc9e102045de24200082012004d02060009a012004e823600498012004e423200896012004e022e00c8c21a0148b196014ba10200494100006fa21bffcd2012004d222a000d0012008d022a004c401200cc422a008ee012010ee22a00cd0213ffcd0213ff8d4213ff494102001921021019010202d1b0000829a036338f40360009fc6a00088013ff4ac102029ec2220008c21a00c8b19600cba102002aa100006fa21bffcd0256004a8103ffde82560008c21a0088b1960083b100000ba076001a6100006fa21bffcea24e000a4012004e624a000a2012004a0102001e02460048c21a00c8b19600cba1020029e100006fa21bffcc2012004c223e000da012008da23e0048c21a0088b1960083b100000ba07600198100006fa21bffc96102001d62320008c21a0088b1960083b100000ba07600194100006fa21bffc92102001d222a0008c21a0088b1960083b100000ba07600190100006fa21bffc84102005c42220008c21a0088b1960083b100000ba076001ae100006fa21bffcac102001ec25e0008c21a0088b1960083b100000ba076001aa100006fa21bffca8102001e82560008c21a0088b1960083b100000ba076001a6100006fa21bffca4102001e424e0008c21a0088b1960083b100000ba076001a2100006fa21bffca0102001e0246000de213ffcd8213ff8d4213ff4d0213ff0ee213fecea213fe8e6213fe4e2213fe0133f017792026280d001202c1b3f00389a0360407ffec0a988013fe0d0213ffc133f003a92026070d001204c1b3f00389a0360407ffec0a188013ffc8c21a0388b196038ba10200d9e100006fa21bffcc2012018c223e030da012004da23e02cd8012000d823e028d023e024d6012044d623e020d401201cd423e01cd2012014d223e018d001200cd023e014c4012024c423e010ee012020ee23e00cec012008ec23e008ea012030ea23e004e8012010e823e0009010000fe601205481c4e00688012060|@3372,131071|48,4,I11 216,4,I11 392,4,I11 476,4,@799 628,4,I11 1028,4,@3365 1040,4,@1112 1048,5,@1114 1060,4,@1187 1072,4,@1112 1080,5,@1114 3365:O3|@3367,@3369,@3366 3366:O2|@3371,@87 3367:O2|@3368,@87 3368:C2,44|9e13e002c4022000ee03600480a0801732800005901020019010200581c3e0060100000081c3e00601000000|@1106,98465| 3369:O2|@3370,@87 3370:C2,56|9e13e002841000088c21a0108b196010ba10200390100006fa21bffcc422200884102115c4222004c4036004c422200081c3e00601000000|@1106,65697| 3371:C2,60|9e13e002c4022000ee03600480a0801732800005de213ffcd002200881c3e00601000000113f003890022020f40620209fc6a00088013ffc90102001|@1106,98465|36,4,@1110 3372:S25|5452414e535f54414228292e74746162437265617465283129 3373:C2,44|9e13e002b8226001ba222001811f401c32800005901020019010200581c3e0060100000081c3e00601000000|@3374,131| 3374:S24|5350415243434f4445434f4e5328292e7265674571283229 3375:C2,176|9e13e002f606201880a1001b8bd02018c4022030ee00a000b825e001ba10001cbb17401db917401dba102000b91f401cac072001ee00a000b825e001b9172004aa072001ea20a000ee00a000ea022018e8056000b8252001ba25e001811f401c248000058c21a00cee00a000ee2560008c21a00c8b19600cba102002ae100006fa21bffcec25e004ac103ff5ec25e0009410000892100017113f017890022100353f016eb406a19081c6a00401000000|@3377,131071|152,4,@3376 160,4,@3308 3376:S5|696e637370 3377:S20|5452414e535f54414228292e696e637370283129 3378:O2|@3380,@3379 3379:O2|@3383,@3378 3380:C2,308|9e13e002f606201880a1001b8bd02018a610000fa410000da2100008a010000992100010d004600c7ffeb4520100000080a220013280001ede022004e6213ffc92103ffd901000107ffeae2088013ffc92100008113f0178900222947ffeacab010000008c21a0108b196010ba1020039e100006fa21bffcd023e008033f000f820063bcc223e0041b3ee0089a0361fcda23e0009010000ff40620209fc6a0000100000090102001de022004b822a001ba23e001b917401c82072001811f20003480000a8c21a014941000119210001090102005da04a0049e100013f403600081c6a004010000008b196014ba1020049a100006fa21bffcd802200cd823600cd6022008d6236008c2236004d4022000d42360009410000d92100010d004600c9e100013353f016eb406a31881c6a00401000000|@3382,131071|40,5,@608 72,5,@509 84,4,@3381 92,5,@496 124,4,@397 136,4,@24 292,4,@3309 3381:S23|696e6372557365436f756e743a206e6f20656e74727920 3382:S27|5452414e535f54414228292e696e6372557365436f756e74283329 3383:C2,648|9e13e002f606201880a1001b8bd02018a610000fa410000da2100008a010000992100010d002a00c7ffeb3ed0100000080a2200132800005c40220009010200181c4e00601000000ee02200892102001901000177fffff280100000080a220012280000580a46001ac10200110800030e6213ffc32800004ea00a00010800015e6213ffc80a560093280000580a57ff5ac1020051080000b80a5a00132800008ac102001e800a004b8252001811f200036800003ac102001ac10200580a5a00132800004e6213ffc1080000fac100017e4213ff8e0213ff4d4213ff0fa02a00cfa213fecc4213fe8d202a010901000174000006d88013fe8ac1020011080001492102001e6213ffce4213ff8e0213ff4d4213ff0fa02a00cfa213fecc4213fe888013fe81080000a92102001e4213ff8e0213ff4d4213ff0fa02a00cfa213fecc4213fe888013fe892102001901000167ffffee90100000080a22001228000388c21a01494102001d201200cd00120047ffff5b401000000ea012000e805600080a520093280000980a52005e6012008d204e010d0056004400000430100000010800022d00120083280000980a53ffde6012008d204e010d00560044000003a0100000010800019d001200832800017d0012008e605600480a4e00132800004e401201010800011d0012008fa04e004fa213ffc94103ffdd204e000d0012008da04a004f40360009fc6a00088013ffce601200088012004f606201880a1001b8bd0201830bfffedde012014353f017ab406a0e481c6a004880120188b196014ba102004aa100006fa21bffca8103ffde825600cec256008a6102001e6256004e4012000e425600094100015d201200cd0012004de012014353f016eb406a31881c6a00488012018|@3392,131071|40,5,@608 84,5,@3373 240,5,@3384 336,5,@3373 368,5,@3309 408,5,@3384 444,5,@3384 556,4,@3390 632,4,@3309 3384:C2,416|9e13e002f606201880a1001b8bd02018de213ffcd2213ff8fa02600cfa213ff44000006788013ff4c4012004b8222001811f200036800004ee00a0001080000aac100008ec05e000b825a001ba222001811f401c36800004ac10000810800009b8222001113f0004900223d0f40620209fc6a00001000000ae102001b8222001b9172004aa072001e805c01cae10001480a5e0013280001c80a5e00592103ffd7ffeacfc0100000092100008113f017a900220a07ffeab87010000008c21a0108b196010ba102003a6100006fa21bffcd024e008253f000fa404a3bce424e004233ee008a20461fce224e00090100013f40620209fc6a000010000009010200180a5e00532800009b825e001e6012000e404e000b824a001b9172004a2072001e224e000b825e001b91f2004a6072001b8222001811f200036800004e400a0001080000a01000000e204a000b8246001ba222001811f401c368000040100000010800009b8222001113f0004900223d0f40620209fc6a0000100000090102001b8222001b9172004a0072001e624801c90102001de01200881c3e0068801200c|@3389,131071|32,5,@3385 100,4,@224 160,5,@509 172,4,@3388 180,5,@496 212,4,@397 224,4,@24 360,4,@224 3385:C2,264|9e13e002f606201880a1001b8bd0201880a2200532800005b82220019010201981c3e00601000000811f20202680000b80a22009b8222001811f205c3480000780a22009b8222001b91f20209007200181c3e0060100000032800005de213ffc9010204181c3e0060100000092103ffd7ffeac9988013ffc8c21a00c8b19600cba10200284100006fa21bffcae102001ee20a004d020a0008c21a00c8b19600cba10200290100006fa21bffcc42220042d3f017aac05a05cec2220007ffeade4010000008c21a0108b196010ba102003aa100006fa21bffcd0256008293f000fa80523bce8256004273ee008a604e1fce625600090100015f40620209fc6a0000100000090102001|@3387,131071|112,5,@509 176,4,@3386 188,5,@520 220,4,@397 232,4,@24 3386:S26|6e5265673a20426164207265676973746572206e756d62657220 3387:S23|5350415243434f4445434f4e5328292e6e526567283129 3388:S29|667265653a20726567697374657220616c726561647920667265652023 3389:S19|5452414e535f54414228292e66726565283229 3390:C2,140|9e13e002f606201880a1001b8bd02018c402201cee00a000b825e001b91f2004ac072001ee022008ea05e000ba256001811f001d2680001490102001a610000fa4100008a210001692100011d004a00c7ffeb2600100000080a220013280000890102001de04a01ce223e000901000129e10001310bfffe5f606201881c4e0060100000081c3e00601000000|@3391,130723|80,5,@608 3391:S23|5452414e535f54414228292e636c6561724f6666283129 3392:S26|5452414e535f54414228292e72656d6f7665456e747279283329 3393:O2|@3395,@3394 3394:O3|@3417,@3571,@3416 3395:C2,316|9e13e002f606201880a1001b8bd020188c21a0108b196010ba10200384100006fa21bffc2f3f017aae05e344ee20a000d020a008d420a0048c21a00c8b19600cba102002ae100006fa21bffcac102001ec25e004d425e0008c21a0088b196008ba102001ac100006fa21bffcee25a000de213ffcd0213ff8d2213ff4d4213ff0fa022028fa213fecc4213fe8ec213fe4d0213fe09610000994100016133f017b9202604c90102005da036004f40360009fc6a00088013fe0d4012014d2012000d00120044000007e01000000ea012014e8056010e605200ce6213ffcd6052008d4052004d2052000d001200c4000019f88013ffce401200880a4a0012280000d90102001d0012010400002d901000000d4012014133f017d92026314de012018353f016fb406a1e881c6a0048801201ce201201881c460068801201c|@3415,131071|36,4,@3396 156,4,@3398 196,5,@3401 236,5,@3405 264,5,@3412 276,4,@3414 288,4,@3313 3396:C2,192|9e13e002f606201880a1001b8bd02018d0036008de213ffcfa022010fa213ff8d00360047ffffef488013ff8c4012000b8222001811f200036800004ee00a0001080000a01000000ec05e000b825a001ba222001811f401c368000040100000010800009b8222001113f0004900223d0f40620209fc6a00001000000ae102001b8222001b9172004aa072001e805c01cae100014b825e001811f2000248000069010200190102005e601200481c4e00688012008e601200481c4e00688012008|@3397,131071|36,5,@3385 104,4,@224 3397:S34|5452414e535f54414228292e6765745265676973746572283329696e557365283129 3398:O1|@3399 3399:C2,16|9e13e0029010200581c3e00601000000|@3400,129| 3400:S29|5452414e535f54414228292e6765745265676973746572283329283129 3401:C2,144|9e13e002f606201880a1001b8bd02018d0213ffcd4213ff8fa02a00cfa213ff4d2213ff0c402a01cee00a000de213fec92102005901000179a013ffc4000001c88013fec90102001da012010f40360009fc6a0000100000080a220012280000a9010200192102001901020059a0120104000000f01000000ec01200081c5a00688012014ec01200081c5a00688012014|@3404,131071|60,5,@3402 112,5,@3402 3402:C2,908|9e13e002f606201880a1001b8bd02018b8222001ba226001811f401c368000da90102001c4037ffca610000fa410000da2100008a010000992100010d000a00c7ffeb1480100000080a2200132800004c4022000108000b2e6213ffcee022004ec022008ea02200c92102001901000167ffffc820100000080a2200122800004e804bff4108000a0e6213ffc80a5200132800004e6213ffc10800023e6213ffce4213ff8e2213ff4e0213ff0c4213fecee213fe8ec213fe4ea213fe0de05200088013fe080a3e00132800005c403e004821020011080001080a06001d2012004d003e0007ffffc650100000080a22001228000059e100002821020051080000680a06001f606201880a1001b8bd0201830bfffed32800055e60120081080000cee01200ce4213ff8e2213ff4e0213ff0c4213fecee213fe8ec213fe4ea213fe088013fe010800049e6012008ea05e00080a560093280002080a56005e8012018e6053ff480a4e00132800005fa05e004ac1020051080003980a5a001fa213ffce404e00088013ffc80a4a00132800005d2012000ac1020011080002f88012004d004a0007ffffc350100000080a2200122800005e404a004ac1020051080002688012004f606201880a1001b8bd0201830bfffee32800020ac102001e8012018e6053ff480a4e00132800005fa05e004ac1020051080001980a5a001fa213ffce404e00088013ffc80a4a00132800005d2012000ac1020011080000f88012004d004a0007ffffc150100000080a2200122800005e404a004ac1020051080000688012004f606201880a1001b8bd0201830bfffee80a5a00132800004e6012008108000270100000080a4e0013280000ce4012018e4012018d404bffcd2012010901020011b3f01789a0361387ffffcbe010000001080001a01000000e204bffcd2046010d00120047ffffd6001000000e00120188c21a0148b196014ba1020049e100006fa21bffcc2012000c223e00c9a102001da23e008d8012008d823e004d601200cd623e0009410000fd2012010d0043ff87ffff2b4010000001080000c88012010e4213ff8e2213ff4e0213ff088013ff010800007de012008e4213ff8e2213ff4e0213ff088013ff0de01200890102001da03e000f40360009fc6a0000100000080a220012280000c90102001c2012000b8206001b91720049a0720019210000dd0012004da012008de01200c10bfff2588012010c201200c81c060068801201081c3e00601000000|@3403,131071|64,5,@608 112,5,@3373 228,5,@3373 420,5,@3373 548,5,@3373 644,4,@3379 652,5,@3383 680,5,@3384 756,5,@3309 3403:S38|5452414e535f54414228292e72656d6f766546726f6d4361636865283329636c656172283229 3404:S30|5452414e535f54414228292e72656d6f766546726f6d4361636865283329 3405:C2,476|9e13e002f606201880a1001b8bd02018de213ffcd0213ff8d2213ff4d6213ff07ffffd7188013ff0b8222001811f200036800004c40120041080000aae100008ee00a000b825e001ba222001811f401c36800004ae10000810800009b8222001113f0004900223d0f40620209fc6a0000100000084102001b8222001b9172004ac072001ea00801c8410001580a0a0013280003b92103ffdb8222001811f200036800004e80120041080000a01000000e6052000b824e001ba222001811f401c368000040100000010800008b8222001113f0004900223d0f40620209fc6a00001000000b8222001b9172004a4072001a2102005e225001c8c21a00c8b19600cba102002a0100006fa21bffc9e102001de242004c2012008c22420008c21a0088b196008ba1020019a100006fa21bffce0236000d8012000d60320009210000b9010000d4000002d01000000d4012000d022a000d2012010d0026000b8222001b91f200484072001c422600090102001ee01200c81c5e006880120147ffea9cf0100000092100008113f017d900222107ffea85a010000008c21a0108b196010ba102003a8100006fa21bffcd0252008273f000fa604e3bce6252004253ee008a404a1fce425200090100014f40620209fc6a0000100000090102001|@3411,131071|32,5,@3385 96,4,@224 208,4,@224 324,5,@3406 380,5,@509 392,4,@3410 400,5,@496 432,4,@397 444,4,@24 3406:C2,204|9e13e002f606201880a1001b8bd0201880a220013280000580a260019010200181c3e0060100000032800005de213ffc9010200181c3e00601000000d2026000d00220004000002988013ffcd0213ffc8410200188013ffc80a2200132800005b820a001ae1000021080000a80a5e045b9172004ac072001d002200484100016f606201880a1001b8bd0201830bffff3328000068c21a00890102001ec01200481c5a006880120088b196008ba10200190100006fa21bffcec012000ec222000ea01200481c5600688012008|@3409,131071|68,5,@3407 3407:C2,384|9e13e002f606201880a1001b8bd0201880a260013280000480a2200181c3e00601000000328000058410000f9010000981c3e00601000000ae100008ac100009d205a000d005e0007ffffad40100000080a2200122800015c4213ffcc4213ffcfa05e000fa213ff8d205a004d005e0047fffffe488013ff88c21a00c8b19600cba1020029e100006fa21bffcd023e004da012000da23e0009010000fd201200481c2600688012008ee213ff8ec213ff4fa05a000fa213ff0fa05a004fa213fecfa05e000fa213fe8fa05e004fa213fe4d0013fe87ffffc8c88013fe4d0213ffcd001200c7ffffc8888013ffcea012000b8222001ba256001811f401c36800012d201200cd2012014d00120047fffffbe9e13e0028c21a00c8b19600cba102002a8100006fa21bffcd0252004e6012008e625200090100014e401201c81c4a00688012020d00120187fffffaf9e13e0028c21a00c8b19600cba102002a8100006fa21bffcd0252004e6012010e625200090100014e401201c81c4a00688012020|@3408,131071|72,5,@3373 212,5,@3385 228,5,@3385 3408:S20|5452414e535f54414228292e6d65726765283229 3409:S26|5452414e535f54414228292e726567536574556e696f6e283229 3410:S29|676574527365743a2063616e2774206765742072656769737465722023 3411:S22|5452414e535f54414228292e67657452736574283529 3412:C2,120|9e13e002f606201880a1001b8bd02018c4022000ee00a000de213ffcee213ff8921020e9d00220147ffea77388013ff8ec012000b825a001ba10001cbb17401db917401daa072001d0213ffc92102005901000157ffea8d888013ffc92100008d0012000de012008353f0025b406a04c81c6a0048801200c|@3413,131071|40,5,@496 84,5,@509 104,4,@496 3413:S31|5350415243434f4445434f4e5328292e7472616365436f6e74657874283129 3414:S11|6765745265676973746572 3415:S26|5452414e535f54414228292e6765745265676973746572283329 3416:O2|@3588,@3587 3417:C2,148|9e13e002f606201880a1001b8bd02018c4012000da213ffcd4213ff8d0213ff4fa00a00cfa213ff0d6213fecd2213fe8de213fe4fa00a028fa213fe0901020019a013ffc4000001b88013fe0ee01200080a5e0012280000d90102001ec01202094100016133f01979202615c11000083900223d8de012004353f016fb406a1e881c6a00488012024ec01200481c5a00688012024|@3570,131071|68,5,@3418 100,4,@3569 108,4,I48 120,4,@3313 3418:C2,1688|9e13e002f606201880a1001b8bd02018c4036004ee00a01cec05e000b825a001ba222001811f401c3680019a90102001a610000fa410000da210000892100011d000a00c7ffeae9a01000000808a20013280017fe6213ffcde022000da03e00080a36005328000c180a36009d202200480a2600132800004e6213ffc10800017e6213ffce4213ff8e2213ff4fa03e004fa213ff0fa03e008fa213fecd2213fe8fa022008fa213fe4fa02200cfa213fe090100011da04bfecf40360009fc6a00088013fe080a220012280016ae001201410800010d0012018e4213ff8e2213ff4fa03e004fa213ff0fa03e008fa213fecd2213fe8fa022008fa213fe4fa02200cfa213fe088013fe01080015ae0012014c4023ffc80a0a00132800004ee00a00010800018ea01200880a5e00132800005d2012010ac1020011080000f80a5a001d005e0007ffff9a00100000080a2200122800005ee05e004ac1020051080000680a5a001f606201880a1001b8bd0201830bfffee2280013fe0012014ea01200880a560013280000ce8012018e8012018d4052004d2012014901020011b3f01789a0361387ffffa4b0100000010800131e0012014e6053ff880a4e0013280000892102001901020019a01201c4000013a0100000010800127e0012014d00120047ffff5930100000080a2200122800024e4012018e4053ffc80a4a00132800004e204a0001080001ee401201880a4600132800005d2012004a01020011080000f80a42001d00460007ffff9670100000080a2200122800005e2046004a01020051080000680a42001f606201880a1001b8bd0201830bfffee22800004d001200410800007e40120189a01201c40000dda01000000108000ffe0012014e204a004de04bffc80a3e00132800006c203e000213f0031a00421241080001afa04601080a0600132800005da04a000a010200110800010fa046010fa046010fa213ffc92100001d00360044000150688013ffc8c21a0088b196008ba102001a0100006fa21bffcd02420001080000992100010fa213ffc88013ffc1080000592100010fa213ffc88013ffc92100010d00120004000154d010000008210000892102001901000017ffff5420100000080a220012280000890102001901000019a01202040000da501000000108000c9880120049a012020400000d80100000088012004108000c4e0012014328000aee6213ffce6213ffce4213ff8e2213ff4fa03e004fa213ff0fa022004fa213fecfa022008fa213fe8fa02200cfa213fe490100011da04bfecf40360009fc6a00088013fe480a2200132800004d8012014108000a1d0213ffcd6033ffc80a2e00132800004d402e00010800018d001200880a2a00132800005d201200c921020011080000f80a26001d002a0007ffff8f30100000080a2200122800005d402a004921020051080000680a26001f606201880a1001b8bd0201830bfffee22800086d0213ffcd001200880a220013280000cc4012014c4012014d400a004d2012010901020011b3f01789a0361387ffff99e0100000010800078d0213ffcee00bff880a5e0013280000892102001901020019a01201840001654010000001080006ed0213ffcd00120047ffff4e60100000080a2200122800025ec012014ec012014ea05bffc80a5600132800004e80560001080001eec01201480a5200132800005d2012004a61020011080000f80a4e001d00520007ffff8b90100000080a2200122800005e8052004a61020051080000680a4e001f606201880a1001b8bd0201830bfffee22800004d001200410800007ec0120149a012018400016a90100000010800045d0213ffcea05a004e605bffc80a4e00132800006e404e000293f0031a80521241080001afa05601080a4a00132800005e205a000a810200110800010fa056010fa056010fa213ffc92100012d00460044000145888013ffc8c21a0088b196008ba102001a8100006fa21bffcd02520001080000992100014fa213ffc88013ffc1080000592100014fa213ffc88013ffc92100014d00120004000149f01000000a410000892102001901000127ffff4940100000080a220012280000890102001901000129a01201c40001674010000001080000f880120049a01201c400015f101000000880120041080000ad0213ffce4213ff8e2213ff4d0213ff0d0213fecd0213fe8d0213fe488013fe4d0213ffc88013ffc1080000be0012014e4213ff8e2213ff4d0213ff0d0213fecd0213fe8d0213fe4d0213fe088013fe0e0012014b8242001b91720049e0720019010000fda012018de01201c10bffe5f8801202081c3e00601000000|@3568,131071|68,5,@608 324,5,@3373 412,4,@3379 420,5,@3383 460,5,@3419 480,5,@3347 552,5,@3373 620,5,@3493 656,4,@799 712,5,@3552 784,5,@3554 804,5,@3347 832,5,@3493 852,5,@3419 1016,5,@3373 1104,4,@3379 1112,5,@3383 1152,5,@3560 1172,5,@3347 1248,5,@3373 1316,5,@3562 1352,4,@799 1408,5,@3552 1480,5,@3554 1500,5,@3347 1528,5,@3562 1548,5,@3560 3419:C2,468|9e13e002f606201880a1001b8bd02018d0037ffcc4022000de213ffcda213ff8d4037fe4d2023ff0d0022004da00a008f40360009fc6a00088013ff8ee01200092102001d005ffe87ffff44c0100000080a220012280000bec05fffcec05fffcd205bff0d005ffe81b3f01809a0360ac400000680100000010800014ea012000fa05bff0fa213ffcd6013ffc94102075d205fff4d005fff01b3f018b9a03632040000bf688013ffcd2012000901020751b3f01809a0360ac400000560100000088012004ea012000e8057ffce6052004d204e010d0057ff47ffff97a01000000e4012000e204bffce0046004de042030c203e000b8206001ba10001cbb17401db917401dba102000b91f401c9a0720018c21a00c8b19600cba10200298100006fa21bffcda23200496103ff5d62320008c21a0148b196014ba10200494100006fa21bffcc222a00cd204bfe8d222a008d004bfecd022a004d822a000d204bff8d0047ff47fffeebe01000000c4012000ee00bffcec05e004ea05a030e8056000b8252001b9172004a6072001e6256000e4056000e205a018e0046000b8242001ba24a001811f401c2480000890102001de056000de24600090102001c201200481c0600688012008de01200481c3e00688012008|@3492,131071|72,5,@3347 104,4,@3420 112,5,@3422 152,4,@3489 160,5,@3490 176,4,@3420 184,5,@3422 216,5,@3384 356,5,@3309 3420:O3|@3422,@3424,@3421 3421:O3|@3487,@3432,@3425 3422:C2,280|9e13e002f606201880a1001b8bd02018c4026030ee00a000b825e001b91f2004ac072001ba10001cbb17401db917401dae072001808de00122800013de213ffc2d3ffff0ac05a001b825e001ba25a001811f401c3480000cde213ffc2d000010ac05a001b825a001ba25e001811f401c36800005de213ffcaa1020011080000dde213ffcda213ff8d0213ff4d2213ff090100009da036008f40360009fc6a00088013ff0aa10000810800007e8012008da213ff8d0213ff4d2213ff088013ff0e8012008a6103fd5e6213ffcd60120009410201192103ff1d0012004da052004f40360009fc6a00088013ffce4012000e204a030e0046000b8242001b91f20049e072001de24600090102001c201200c81c0600688012010|@3423,131071|64,4,-4096 92,4,4096 3423:S26|5350415243434f4445434f4e5328292e67656e50757368283229 3424:O4|@3426,@3432,@3425,@3421 3425:O2|@3471,@499 3426:C2,476|9e13e002f606201880a1001b8bd0201880a220113280001084102001de213ffcda213ff8d0213ff4d2213ff0d4213fecd6213fe89010000bda03600cf40360009fc6a00088013fe8841000081080000aec012004de213ffcda213ff8d0213ff4d2213ff0d4213fecd6213fe888013fe8ec01200480a5a0113280000eee012008ea012000e8056030e6052000b824e001ba10001cbb17401db917401da4072001e2012008ba246001b917401cae072001d0213ffcd0213ff8ea01201092013ff890100017da056008f40360009fc6a00088013ff8e801200080a52001328000040100000010800015d001202080a5200132800004e601201810800010d0012020fa052004fa213ffcd2012008d0052000da04e004f40360009fc6a00088013ffce801200088012004f606201880a1001b8bd0201830bfffee4000003001000000e6012004e204e00080a47ffd32800005e004e004e404e00410800013da012014b8242001811f2000368000089e1000100300002082006001b8242001ba206001b917401c9e0720010300002082006001b8206001ba23e001b917401ca4072001da012014da213ffc96100012d401200c921000089010200d4000013088013ffcd8012018d2012008da032004de01201cf403600081c6a00488012024|@3431,131071|312,5,@3427 368,4,8192 392,4,8192 440,5,@3429 3427:C2,1084|9e13e002808a20012280004d0100000080a23f812680004a0100000080a220793480004701000000053f01818400a07eba02207dfa00801d81c0801d0100000000000166000003ee000003d6000003be000003a60000033a000003220000030a000002f20000026e0000024a000001ae0000018a000001ba0000014e000002b6000002da0000039a0000015a000003760000014200000136000001de000001d2000002620000023e0000023200000292000002aa000001ea00000352000001c600000106000003460000012a0000036a00000286000001720000017e000001a2000001120000011e000002e6000001f600000202000003820000021a0000038e000002ce000002c20000020e0000027a0000019600000226000002560000029e000002fe000003160000032e0000035e000003b2000003ca000003e2901020fd81c3e006010000009010200181c3e006010000009010200581c3e006010000009010200981c3e006010000009010200d81c3e006010000009010201181c3e006010000009010201581c3e006010000009010201981c3e006010000009010201d81c3e006010000009010202181c3e006010000009010202581c3e006010000009010202981c3e006010000009010202d81c3e006010000009010203181c3e006010000009010203581c3e006010000009010203981c3e006010000009010203d81c3e006010000009010204181c3e006010000009010204581c3e006010000009010204981c3e006010000009010204d81c3e006010000009010205181c3e006010000009010205581c3e006010000009010205981c3e006010000009010205d81c3e006010000009010206181c3e006010000009010206581c3e006010000009010206981c3e006010000009010206d81c3e006010000009010207181c3e006010000009010207581c3e006010000009010207981c3e006010000009010207d81c3e006010000009010208181c3e006010000009010208581c3e006010000009010208981c3e006010000009010208d81c3e006010000009010209181c3e006010000009010209581c3e006010000009010209981c3e006010000009010209d81c3e00601000000901020a181c3e00601000000901020a581c3e00601000000901020a981c3e00601000000901020ad81c3e00601000000901020b181c3e00601000000901020b581c3e00601000000901020b981c3e00601000000901020bd81c3e00601000000901020c181c3e00601000000901020c581c3e00601000000901020c981c3e00601000000901020cd81c3e00601000000901020d181c3e00601000000901020d581c3e00601000000901020d981c3e00601000000901020dd81c3e00601000000901020e181c3e00601000000901020e581c3e00601000000901020e981c3e006010000009010211581c3e00601000000901020f181c3e00601000000901020f581c3e00601000000901020f981c3e00601000000|@3428,65665|40,4,$3427+66 3428:S29|5350415243434f4445434f4e5328292e6f70335f33546f496e74283129 3429:C2,424|9e13e002808a200122800005de213ffc8410000810800009808a6001113f002990022348f40620209fc6a00088013ffc84102001808a600122800005de213ffcae10000910800009d2012000113f002990022348f40620209fc6a00088013ffcae102001d2012000808a600122800005de213ffc9010000910800009808aa001113f002990022348f40620209fc6a00088013ffc90102001808aa00122800005de213ffcac10000a1080000b808ae001ac100008113f002990022348f40620209fc6a00088013ffc94100016ac102001808ae00122800005de213ffcaa10000b1080000bb820a001aa100008113f002990022348f40620209fc6a00088013ffc96100015aa102001b820a001b92f200696072001b8222001b92f200194072001bb35e005b82f600390072001841280089410800b900de07db8222001b92f200384072001bb35a002b82f6003ae0720019615c002900da00db8222001b92f200684072001bb356008b82f6003ae072001ac15c002900d63fd8c21a0148b196014ba10200484100006fa21bffcd020a00cec20a008d620a004d420a0009010000281c3e00688012004|@3430,123023|28,4,@542 76,4,@542 128,4,@542 180,4,@542 236,4,@542 3430:S30|5350415243434f4445434f4e5328292e666f726d61743351756164283529 3431:S29|5350415243434f4445434f4e5328292e67656e53746f72654f70283529 3432:O2|@3434,@3433 3433:O4|1,0,0,0 3434:C2,256|9e13e002f606201880a1001b8bd02018c402603cee00a00080a5e0013280000ad2213ffcee026004ec05e00080a5a00122800005d2213ffc9010200181c3e00601000000d0213ff8da213ff4ec00a00080a5a0011280000488013ff41080000cde213ffcde213ffcc4213ff8901000169a0120084000002a88013ff8ea012000d0256000108000038801200488013ffcea01200ce8056004e605200080a4e0013280001590102001e4056000e204a000e2213ffcd405600892100011d0012008400001b488013ffce0012010de012000b823e001b917200482072001da042000c223600090102001d801200481c3200688012014e401200081c4a00688012010|@3470,131071|116,5,@3435 192,5,@3444 3435:C2,448|9e13e002f606201880a1001b8bd0201880a2200132800005c40220009010200181c3e00601000000b820a001b9172004ae072001ec036000de213ffcda213ff8c4213ff4fa022004fa213ff0d205a008901000174000006288013ff0ea012008e8057ff8d2052004400001530100000080a220012280001de6012008e6012008e4012004b824a001b9172004a2072001e004e000d404200892100011d004fffc4000017501000000d0012000da0120087fffffd59e13e0028c21a00c8b19600cba1020029e100006fa21bffcd023e004c2012004c223e0009010000fda01200c81c3600688012010e404e000e204a000e0046000de012004b823e001ba242001b91f401c82072001c2213ffcd204a0089010000f4000003288013ffc1b3fe0009a036001d8012000b8232001ba236001811f401c3480000901000000170020009602e001b822e001ba232001811f401c268000099210000c113f01879002225cf40620209fc6a00001000000941020019210000c4000044501000000d401200cd202a000d4026008d20120084000013a0100000094100008d001200cc4022000ee00a004ac102001ec25e000d0012004da01200cde01201010bfff9388012014|@3469,131071|84,5,@3436 104,5,@3442 160,5,@3444 276,5,@3436 284,4,-2097152 316,4,2097152 344,4,@3463 372,5,@3465 396,5,@3444 3436:C2,352|9e13e002f606201880a1001b8bd02018b8222001ba10001cbb17401db917401d84072001de213ffcd2213ff8c4213ff492100002d0013ff84000005188013ff4d0213ffcd0213ff8ae013ff8ac102001ec25e000aa013ff8d0256004e8012000b825200188013ff8b9172004a607200192100013d001200c4000004101000000d0213ffcd0213ff8a4013ff8a2102001e224a000a0013ff8d0242004de012008b823e00188013ff8b91720088207200192100001d00120144000003101000000d0213ffcd0213ff89a013ff898102001d823600096013ff8d022e004d4012010b822a00188013ff8b917200c92072001d001201c4000002201000000d0213ffcd0213ff884013ff8ae102001ee20a000ac013ff8d025a0048c21a01488013ff88b196014ba102004aa100006fa21bffce8012004e825600ce601200ce6256008e4012014e4256004e201201ce225600090100015e001202881c420068801202c|@3441,131071|56,5,@3437 120,5,@3437 184,5,@3437 244,5,@3437 3437:C2,460|9e13e002f606201880a1001b8bd02018c4022000d000a004fa023ffcbb2f6008b9376006ae072001811f200036800008ac1000172b3f000eaa056330b825e001ba256001b917401cac072001b825a001ba10001cbb17401db917401daa072001b8226001811f200026800019de213ffcb8256001ba226001811f401c36800014de213ffc808a600122800005de213ffca810000910800009bb3d2002113f002990022348f40620209fc6a00088013ffca8102001bb3d2002fa0a001db92f60029007200181c3e00601000000ea213ff8a810000992103ffd901000147ffea27388013ff8d0213ffc92103ffdd00120007ffea26e88013ffc8c21a00c8b19600cba102002a6100006fa21bffca4102001e424e004d024e0008c21a00c8b19600cba102002a2100006fa21bffce6246004213f0184a004214ce02460008c21a00c8b19600cba1020029e100006fa21bffce223e004c2012000c223e0008c21a00c8b19600cba10200290100006fa21bffcde2220041b3f01849a036168da2220007ffea3a8010000008c21a0108b196010ba10200398100006fa21bffcd0232008173f000f9602e3bcd6232004153ee0089402a1fcd42320009010000cf40620209fc6a0000100000090102001|@3440,131071|52,4,@349 156,4,@542 220,5,@509 240,5,@509 304,4,@3438 372,4,@3439 384,5,@520 416,4,@397 428,4,@24 3438:S17|206f7574206f662072616e676520302e2e 3439:S15|637365674765743a20496e64657820 3440:S19|434f44455f5345472e63736567476574283229 3441:S26|5350415243434f4445434f4e5328292e67657451756164283229 3442:C2,128|9e13e002c4026000ee02200080a080173280001a90102001ec026004ea02200480a580153280001390102001e8026008e602200880a500133280000c90102001e402600ce202200c80a4801132800005901020019010200581c3e0060100000081c3e0060100000081c3e0060100000081c3e0060100000081c3e00601000000|@3443,130691| 3443:S26|65712d5350415243434f4445434f4e5328292e71756164283229 3444:C2,372|9e13e002f606201880a1001b8bd02018b8226001ba10001cbb17401db917401d84072001d0213ffcd0213ff892013ff8ae102001ee22600092013ff8ee022000ee226004d2013ffcac0a63fdde213ff4d4213ff0fa022004fa213fecfa022008fa213fe8fa02200cfa213fe4c4213fe09410001692100002d0013ff04000004588013fe0ea012000b8256001b9172004a8072001d0213ffcd0213ff8a6013ff8a4102001e424e000a2013ff8e001200ce0246004de013ffc820be3fd9410000192100014d00120104000003288013ff8da012008b8236001b917200898072001d0213ffcd0213ff896013ff894102001d422e00092013ff8d0012010d0226004c4013ffcae08a3fd941000179210000cd00120184000001f88013ff8ec012010b825a001b917200caa072001d0213ffcd0213ff8a8013ff8a6102001e6252000a4013ff8e2012014e224a004e0013ffc9e0c23fd9410000f92100015d0012020de012024353f0185b406a01081c6a00488012030|@3462,131071|124,5,@3445 200,5,@3445 276,5,@3445 356,4,@3445 3445:C2,884|9e13e002f606201880a1001b8bd02018c4022000ee00a00080a5fffd3280000aec00a004de213ffc113f0185900223a0f40620209fc6a00088013ffc90102001ec00a004fa05bffcbb2f6008b9376006aa072001811f200036800008a8100015273f000ea604e330b8256001ba24e001b917401ca8072001b8252001ba10001cbb17401db917401da6072001b8226001811f20003680002eb824e001de213ffca410000992103ffd901000127ffea15488013ffc8c21a00c8b19600cba102002a2100006fa21bffc213f0185a00423e4e0246004d02460008c21a00c8b19600cba10200290100006fa21bffce22220041f3f01869e03e014de2220007ffea29e010000008c21a0108b196010ba10200382100006fa21bffcd02060081b3f000f9a0363bcda206004193ee008980321fcd820600090100001f40620209fc6a0000100000090102001b824e001ba226001811f401c3680001480a5e001808a600122800005de213ffca410000910800009bb32a002113f002990022348f40620209fc6a00088013ffca4102001bb32a002b93ca002fa2d801c9010200181c3e006010000002280000ab8252001de213ffc113f01869002202cf40620209fc6a00088013ffc90102001b8252001ba10001cbb17401db917401ca4072001b8226001811f200026800003a2102001a210200580a4600532800005b8226001a010000910800005de213ffcb91f200ca0072001de213ffcd0213ff8d2213ff4d4213ff0e6213fece4213fe892102011901000101b0000859a036378f40360009fc6a00088013fe8b8222001b91720049e072001c2012000ba206001811f401c248000039a10000f9a100001808b600122800005010000009810000d1080000994102001113f002990022348f40620209fc6a000010000009810200194102001921020059010000c1b0000829a036338f40360009fc6a000010000008c21a00c8b19600cba10200296100006fa21bffcd022e00494102001d422e0008c21a0088b1960083b100000ba07600192100006fa21bffcd6226000d0213ffcd6213ff896102001d4012004d00120104000005488013ff8d0012014808a200122800005010000008410000810800009ee012004113f002990022348f40620209fc6a0000100000084102001ee012004ec012010bb35a002b938a002fa2dc01cea012018e8012000e825600090102001e601201c81c4e00688012020|@3461,131071|40,4,@3446 96,4,@349 172,5,@509 200,4,@3448 240,4,@3450 252,5,@520 284,4,@397 296,4,@24 372,4,@542 432,4,@3451 560,4,I109 640,4,@542 676,4,I11 776,5,@3453 812,4,@542 3446:O3|@24,@397,@3447 3447:S42|637365675365743a2063616e2774206368616e6765206c6f636b656420636f646520736567656d656e74 3448:O2|@3449,0 3449:S25|206f7574206f662072616e676520302e2e696e66696e697479 3450:S15|637365675365743a20496e64657820 3451:O3|@24,@397,@3452 3452:S34|637365675365743a2063616e277420657874656e6420636f6465207365676d656e74 3453:C2,944|9e13e002f606201880a1001b8bd02018c4022000d000a00080a22001328000dfde213ffcee026000d205e00080a26001328000d3de213ffcec00a004fa05bffcbb2f6008b9376006aa072001811f200036800008a8100015273f000ea604e330b8256001ba24e001b917401ca8072001e605e004fa04fffcbb2f6008b9376006aa072001811f200036800008a4100015233f000ea2046330b8256001ba246001b917401ca4072001b8252001ba10001cbb17401db917401da2072001b824a001ba10001cbb17401db917401daa072001b822e001ba10001cbb17401db917401da8072001e6213ffcec213ff8d4213ff4b822a001ba25600188013ff4b91f401ca4072001b822a001811f200036800004b822a00110800008de213ffcba246001811f401c26800004de213ffc10800042b8252001e2213ff892103ffd9010000a7ffea01988013ff8d0213ffc92103ffdd00120007ffea01488013ffc8c21a00c8b19600cba102002a2100006fa21bffca0102001e0246004d02460008c21a00c8b19600cba1020029e100006fa21bffce223e004033f01848200614cc223e0008c21a00c8b19600cba1020029a100006fa21bffcde236004d8012000d82360008c21a00c8b19600cba10200290100006fa21bffcda222004173f01879602e034d62220007ffea14e010000008c21a0108b196010ba10200394100006fa21bffcd022a008133f000f920263bcd222a004113ee008900221fcd022a0009010000af40620209fc6a0000100000090102001b8252001811f200036800004b825200110800008de213ffcba24a001811f401c26800004de213ffc10800042a210000fe4213ff892103ffd901000147ffe9fce88013ff8d0213ffc92103ffdd00120007ffe9fc988013ffc8c21a00c8b19600cba102002a2100006fa21bffca0102001e0246004d02460008c21a00c8b19600cba1020029e100006fa21bffce223e004033f01848200614cc223e0008c21a00c8b19600cba1020029a100006fa21bffcde236004d8012000d82360008c21a00c8b19600cba10200290100006fa21bffcda222004173f01879602e058d62220007ffea103010000008c21a0108b196010ba10200394100006fa21bffcd022a008133f000f920263bcd222a004113ee008900221fcd022a0009010000af40620209fc6a0000100000090102001a210000f92102001901000149a0120084000002a0100000081c460068801200c113f0187900221b0f40620209fc6a00088013ffc90102001de213ffc113f0187900221b0f40620209fc6a00088013ffc90102001|@3460,131071|88,4,@349 144,4,@349 320,5,@509 340,5,@509 404,4,@3438 472,4,@3454 484,5,@520 516,4,@397 528,4,@24 620,5,@509 640,5,@509 704,4,@3438 772,4,@3455 784,5,@520 816,4,@397 828,4,@24 876,5,@3456 892,4,@3458 920,4,@3458 3454:S25|63736567436f70795365673a2042797465206c656e67746820 3455:S25|63736567436f70795365673a2042797465206f666673657420 3456:C2,236|9e13e002f606201880a1001b8bd02018c4037ff8b820a001ba226001811f401c32800005808a60019010200181c3e0060100000022800005de213ffcae1000091080000bec037ffcae100008113f002990022348f40620209fc6a00088013ffc90100017ae102001ec037ffcbb3de002fa0d801db92f6002aa072001808a200122800005de213ffca81000081080000bee036000a8100008113f002990022348f40620209fc6a00088013ffc90100014a8102001ee036000bb356002b93d2002fa2dc01cb8226001b9172004aa072001b8222001b9172004a8072001921000159010001410bfffc9f6062018|@3457,127139|76,4,@542 152,4,@542 3457:S35|434f44455f5345472e63736567436f7079536567283429636f70794279746573283229 3458:O3|@24,@397,@3459 3459:S49|63736567436f70795365673a2063616e206f6e6c7920636f7079206265747765656e206279746520736567656d656e7473 3460:S23|434f44455f5345472e63736567436f7079536567283429 3461:S19|434f44455f5345472e63736567536574283329 3462:S26|5350415243434f4445434f4e5328292e73657451756164283329 3463:O3|@24,@397,@3464 3464:S30|67656e496e737472756374696f6e3a206a756d7020746f6f206c61726765 3465:C2,268|9e13e002c402200c80a0a0013280003ade213ffcee02200880a5e00132800036de213ffcec022004aa0da0fd80a5600132800031de213ffcb8226001811f200036800008a81000092b004000aa056001b8226001ba256001b917401ca8072001808d200122800005de213ffca61000141080000c920ce3fde8022000e6022004113f002990022348f40620209fc6a00088013ffc92100013a6102001920ce3fdbb34e008b82f6003aa072001a80d63fdbb34e010b82f6003aa072001a61580158c21a0148b196014ba102004aa100006fa21bffcd225600ce8256008e6256004e8022000e82560009010001581c3e00601000000113f0187900223bcf40620209fc6a00088013ffc90102001|@3468,129155|72,4,4194304 128,4,@542 244,4,@3466 3466:O3|@24,@397,@3467 3467:S29|66697875704272616e63683a20616c72656164792066697865642d7570 3468:S30|5350415243434f4445434f4e5328292e66697875704272616e6368283229 3469:S46|5350415243434f4445434f4e5328292e67656e496e737472756374696f6e28322966696c6c44656c617973283129 3470:S33|5350415243434f4445434f4e5328292e67656e496e737472756374696f6e283229 3471:C2,732|9e13e002f606201880a1001b8bd02018808a20012280001cd0213ffc053ffff08400a001b8222001ba20a001811f401c34800015d0213ffc050000108400a001b820a001ba222001811f401c3680000ed0213ffcde213ffcd2213ff8400000a788013ff8ee012000ac102001ec25e000d025e00490102001ea01200481c5600688012008d0213ff8de213ff4da213ff0d2213fec92013ff84000010388013fecd0213ffcd0213ff8c4012004ee012010ec05e00080a5bffd1280001088013ff8ea00a004e805600080a53ffd3280003190103ff9e605e004e4056004b824a001ba24e001811f401c3280002a90103ff91080001090103ff9ea00a004e805600080a520013280002390103ff9e605e004e4056004b824a001ba24e001811f401c2280000490103ff91080001a90103ff94000012e01000000e2012014b8246001811f200036800008a01000111f0040009e03e001b8246001ba23e001b917401ca00720019410206d921000104000015601000000a0012000d02420009e01200082102001c223e004108000448c21a00c4000011601000000e2012014b8246001811f200036800008a01000111f0040009e03e001b8246001ba23e001b917401ca00720019410206d921000104000013e01000000a0100008901020014000019201000000de012018da03e00080a37ffd32800005d803e004c203e004108000139210206db8232001811f2000368000089610000c150000209402a001b8232001ba22a001b917401c96072001150000209402a001b822a001ba22e001b917401c820720019210206dd2213ffc961000019410206d92100008901020097ffff97888013ffc8c21a00c8b19600cba10200284100006fa21bffcae102001ee20a004d020a000ac012000e025a000aa012000c42560048c21a00c8b19600cba102002a8100006fa21bffce6012000e6252000e4012004e4252004e2012008e8246000213f018ba0042128e024600490102001de01201081c3e0068801201c|@3486,131071|28,4,-4096 56,4,4096 92,5,@3472 152,5,@3477 304,5,@3479 332,4,4194304 364,5,@3481 400,5,@3479 428,4,4194304 460,5,@3481 476,5,@3483 532,4,8192 556,4,8192 604,5,@3429 704,4,@3485 3472:C2,288|9e13e002f606201880a1001b8bd02018808a20012280001bde213ffc053ffff08400a001b8222001ba20a001811f401c34800014de213ffc050000108400a001b820a001ba222001811f401c3680000dde213ffc841000088c21a00c8b19600cba10200290100006fa21bffcc422200484102001c422200081c3e0060100000092103ffd7ffe9d8488013ffc8c21a00c8b19600cba10200284100006fa21bffc2f3f0189ae05e0b4ee20a004d020a0008c21a00c8b19600cba10200290100006fa21bffcc42220042d3f0189ac05a0e0ec2220007ffe9ece010000008c21a0108b196010ba102003aa100006fa21bffcd0256008293f000fa80523bce8256004273ee008a604e1fce625600090100015f40620209fc6a0000100000090102001|@3476,131071|28,4,-4096 56,4,4096 132,5,@509 160,4,@3473 200,4,@3475 212,5,@520 244,4,@397 256,4,@24 3473:O2|@3474,0 3474:S22|20696e746f2031332d62697420696d6d656469617465 3475:S23|696d6d656431333a2063616e277420636f6e7665727420 3476:S26|5350415243434f4445434f4e5328292e696d6d65643133283129 3477:C2,260|9e13e002f606201880a1001b8bd02018de213ffcd0213ff8d2213ff413000004920260011b0000859a036398f40360009fc6a00088013ff480a2200132800004b82220011080000f01000000811f200026800003841020018410200580a0a0052280000801000000050000048400a001b820a001ba222001b917401c900720017fffff7501000000ee012004b825e001811f200026800003ac102001ac10200580a5a00532800005b825e001aa10001710800005d0213ffcb91f2ffcaa072001d0213ffc1300000492026001901000151b0000859a036378f40360009fc6a00088013ffce8012004d0252000e6012000e625200490102001e401200c81c4a00688012010|@3478,131071|28,4,1024 36,4,I110 104,4,1024 128,5,@3472 196,4,1024 208,4,I109 3478:S28|5350415243434f4445434f4e5328292e73706c697448694c6f283229 3479:C2,156|9e13e00280a220093280000580a23ff59010200181c3e006010000003280000580a220019010200581c3e006010000003280000580a2200d9010200981c3e006010000003280000580a23ff99010200d81c3e006010000003280000580a23ff19010201181c3e006010000003280000580a220059010201581c3e00601000000328000059010201d9010201981c3e0060100000081c3e00601000000|@3480,129| 3480:S27|5350415243434f4445434f4e5328292e6f7032546f496e74283129 3481:C2,284|9e13e002808aa00122800005de213ffc8410000a1080000b808a200184100008113f002990022348f40620209fc6a00088013ffc9410000284102001808a200122800005de213ffcae10000810800009808a6001113f002990022348f40620209fc6a00088013ffcae102001808a600122800005de213ffcac10000910800009b820a001113f002990022348f40620209fc6a00088013ffcac102001b820a001b92f200194072001bb35e002b82f6003920720019012400a840de00db820a001b92f2006ae072001bb35a010b82f60039407200192128017bb35a008b82f600384072001ae08a3fd940da3fd8c21a0148b196014ba10200484100006fa21bffcd420a00cee20a008d220a004d020a0009010000281c3e00601000000|@3482,114823|32,4,@542 84,4,@542 132,4,@542 3482:S30|5350415243434f4445434f4e5328292e666f726d61743251756164283329 3483:C2,1088|9e13e002808a20012280004e0100000080a23f812680004b0100000080a2207d3480004801000000053f018a8400a0e6ba02207dfa00801d81c0801d01000000000001ee0000021e0000034a0000036e00000176000003f2000003320000031a000002720000024e00000236000001b20000018e000003c2000002960000028a0000025a0000013a000002de000003da000003e600000302000002f60000021200000122000003aa000003860000039e000001d600000146000001ca0000016a0000010a0000022a0000011600000206000003920000037a000003ce000002ba00000152000001e20000030e000002ea000003b6000002c6000002d20000019a000001fa000002a2000002ae00000182000001a6000001be00000242000002660000027e000003260000033e000000fe00000356000003620000015e0000012e901020fd81c3e006010000009010200181c3e006010000009010200581c3e006010000009010200981c3e006010000009010200d81c3e006010000009010201181c3e006010000009010201581c3e006010000009010201981c3e006010000009010201d81c3e006010000009010202181c3e006010000009010202581c3e006010000009010202981c3e006010000009010202d81c3e006010000009010203181c3e006010000009010203581c3e006010000009010203981c3e006010000009010203d81c3e006010000009010204181c3e006010000009010204581c3e006010000009010204981c3e006010000009010204d81c3e006010000009010205181c3e006010000009010205581c3e006010000009010205981c3e006010000009010205d81c3e006010000009010206181c3e006010000009010206581c3e006010000009010206981c3e006010000009010206d81c3e006010000009010207181c3e006010000009010207581c3e006010000009010207981c3e006010000009010207d81c3e006010000009010208181c3e006010000009010208581c3e006010000009010208981c3e006010000009010208d81c3e006010000009010209181c3e006010000009010209581c3e006010000009010209981c3e006010000009010209d81c3e00601000000901020a181c3e00601000000901020a581c3e00601000000901020a981c3e00601000000901020ad81c3e00601000000901020b181c3e00601000000901020b581c3e00601000000901020b981c3e00601000000901020bd81c3e00601000000901020c181c3e00601000000901020c581c3e00601000000901020c981c3e00601000000901020cd81c3e00601000000901020d181c3e00601000000901020d581c3e00601000000901020d981c3e00601000000901020dd81c3e00601000000901020e181c3e00601000000901020e581c3e00601000000901020e981c3e00601000000901020ed81c3e00601000000901020f181c3e00601000000901020f581c3e00601000000901020f981c3e00601000000|@3484,65665|40,4,$3483+66 3484:S29|5350415243434f4445434f4e5328292e6f70335f32546f496e74283129 3485:O2|-1,27 3486:S34|5350415243434f4445434f4e5328292e696d6d6564436f64654f6666736574283229 3487:C2,368|9e13e002f606201880a1001b8bd02018c4022030ee00a00080a5e00132800005b825e0019010200181c3e00601000000ba10001cbb17401db917401dac072001d0213ffcd0213ff8de213ff4da213ff0d0213fec92013ff890100016da036008f40360009fc6a00088013fecea012000e8056030a6102001e6252000e401200c80a4a00132800004e20120041080001090102001fa04a004fa213ffcd2012000d004a000da046004f40360009fc6a00088013ffce401200088012004f606201880a1001b8bd0201830bfffee7ffffe9e01000000e2012010de04600080a3fffd32800005c2046004e00460041080001396102011b8206001811f2000368000089a1000011900002098032001b8206001ba232001b917401c9a0720011900002098032001b8232001ba236001b917401ca007200196102011d6213ffc961000109410201192100008901020097ffff68488013ffcd4012004d2012000da02a004de012008f403600081c6a00488012014|@3488,131071|204,5,@3483 260,4,8192 284,4,8192 332,5,@3429 3488:S43|5350415243434f4445434f4e5328292e646f50656e64696e67537461636b41646a7573746d656e74283129 3489:O4|@3490,@3432,@3425,@3421 3490:C2,544|9e13e002f606201880a1001b8bd02018c402e00cee00a00080a5e00132800004ec05e0001080000baa102001b822a001ba25a001811f401c22800004a810200110800004aa102001e820a000aa10200180a2a01132800010aa102001de213ffcda213ff8d0213ff4d2213ff0d4213fecd6213fe89010000bda03600cf40360009fc6a00088013fe8aa1000081080000ae6012008de213ffcda213ff8d0213ff4d2213ff0d4213fecd6213fe888013fe8e601200880a4e0113280000ee801200ce4012000e204a030e0046000b8242001ba10001cbb17401db917401d9e072001c201200cba206001b917401ca8072001d0213ffcd0213ff8e401201092013ff890100014da04a008f40360009fc6a00088013ff8e201200080a460013280000401000000108000159010200180a4600132800004e00120181080001090102001fa046004fa213ffcd2012008d0046000da042004f40360009fc6a00088013ffce201200088012004f606201880a1001b8bd0201830bfffee7ffff4e401000000e0012004c204200080a07ffd32800005da042004de04200410800013d401200cb8236001811f2000368000089810000d170000209602e001b8236001ba22e001b917401c98072001170000209602e001b822e001ba232001b917401c9e072001d401200cd4213ffc9610000fd4012010921000089010200d7ffff5e488013ffcd2012018c4026004d20120089a100002de01201cf403600081c6a00488012020|@3491,131071|376,5,@3427 432,4,8192 456,4,8192 504,5,@3429 3491:S26|5350415243434f4445434f4e5328292e67656e4c6f6164283429 3492:S62|5452414e535f54414228292e7075736852656769737465727328352970757368456e7472696573283129736176654469726563744f6e537461636b283129 3493:C2,352|9e13e002f606201880a1001b8bd02018c4037ffcee00a004de213ffcda213ff8d0213ff4d205e010d0037ff47fffecdd88013ff4ec012004d2012000d005bfe87fffeb6c0100000080a22001228000049210200110800025e0012004d005bfe87fffeb640100000080a220012280000dea05bffcea05bffcd6057ff0d4012000d205bff4d005bff01b3f018b9a0363207fffff320100000010800014e0012004e8057ff0e8213ffcd601200094102001d205bfe890103fe91b3f018c9a0363584000004088013ffce6012004e404fffce204a004d2046010d004ffe87fffecb101000000e0012004de043ffc8c21a00c8b19600cba10200282100006fa21bffcda012000da20600498102009d82060008c21a0148b196014ba10200496100006fa21bffcd4043fe4d422e00c92102001d222e008d0043fecd022e004c222e0009410000bd2043ff8d003fff4de012008353f016eb406a31881c6a0048801200c|@3551,131071|44,5,@3384 64,5,@3373 96,5,@3373 136,4,@3489 144,5,@3490 184,4,@3494 192,5,@3496 220,5,@3384 336,4,@3309 3494:O13|@3496,@3516,@3420,@3522,@3526,@3529,@3540,@3545,@3517,@3530,@3548,@3495,@3424 3495:O2|0,2 3496:C2,2048|9e13e002f606201880a1001b8bd02018808a2001228000270100000080a23fcd268000240100000080a2202d3480002101000000053f018c8400a3eaba022031fa00801d81c0801d010000000000053a000000620000037a00000062000003da000000c20000043e0000007e0000065200000062000005d6000000620000031e000000e2000004e60000045a000005ba000005f200000476000003020000049200000252000007460000019a0000059ede213ffc113f018e900223b8f40620209fc6a00088013ffc901020018c21a00c8b19600cba10200294100006fa21bffcd222a00492103ffdd222a000d00120008410000a941000089210000b90100002da036004f403600081c6a00488012004ee012000ac1000099210001790100016da036008f403600081c6a00488012004de213ffcda213ff8d6213ff4ae10000ad4012000ac1000099210001790100016da036014f40360009fc6a00088013ff4ea012004a8102045e8213ffcd601200c94102071d2022004d0022000da056010f40360009fc6a00088013ffce601200ce4012004fa04e00cfa213ffc92100013d0012000da04a00cf40360009fc6a00088013ffc8c21a0088b196008ba102001a2100006fa21bffce0012004e0246000de012000e223e00090102001c201200c81c0600688012014de213ffcda213ff8d6213ff4ae10000ad4012000ac1000099210001790100016da036014f40360009fc6a00088013ff4ea012004a8102049e8213ffcd601200c94102071d2022004d0022000da056010f40360009fc6a00088013ffce601200ce4012004fa04e00cfa213ffc92100013d0012000da04a00cf40360009fc6a00088013ffc8c21a0088b196008ba102001a2100006fa21bffce0012004e0246000de012000e223e00090102001c201200c81c0600688012014de213ffcda213ff8d6213ff4ae10000ad401200090100017da036014f40360009fc6a00088013ff4ec012004aa102049ea213ffcd601200c94102071d2022004d0022000da05a010f40360009fc6a00088013ffce801200ce6012004fa05200cfa213ffc92100014d0012000da04e00cf40360009fc6a00088013ffc8c21a0088b196008ba102001a4100006fa21bffce2012004e224a000e0012000e424200090102001de01200c81c3e00688012014de213ffc113f018e900223ecf40620209fc6a00088013ffc90102001de213ffcda213ff8d6213ff4ae10000ad4012000ac1000099210001790100016da03601cf40360009fc6a00088013ff4ea012004e801200c96100014d4012000d2022004d0022000da056018de012008f403600081c6a00488012010de213ffcda213ff8d2213ff4d6213ff0d20120009010000ada036024f40360009fc6a00088013ff0ee012008ec012010aa103fc5ea21201096100016d4012000133f018f9202602cd0012004da05e020de01200cf403600081c6a00488012010de213ffcda213ff8d4213ff4d6213ff0ae100009d201200090100017da036024f40360009fc6a00088013ff0ec012008ea012010a8103fc5e821201096100015d4012000133f018f9202602cd0012004da05a020de01200cf403600081c6a00488012010de213ffc113f018f90022038f40620209fc6a00088013ffc90102001de213ffc113f018f90022078f40620209fc6a00088013ffc90102001de213ffc113f018f900220b8f40620209fc6a00088013ffc901020018c21a00c8b19600cba102002ae100006fa21bffcd425e004ac103ffdec25e000ea012000a8103fe1e8212000a610000b9610001594100013a41000099210001790100012da036020f403600081c6a004010000008c21a00c8b19600cba102002ae100006fa21bffcd425e004ac103ffdec25e000ea012000a8102009e8212000a610000b9610001594100013a41000099210001790100012da036020f403600081c6a00401000000de213ffcda213ff8d6213ff4ae10000ad4012000ac1000099210001790100016da03601cf40360009fc6a00088013ff4ea012004e801200ca610207de621200c96100014d4012000d2022004d0022000da056020de012008f403600081c6a0048801200cde213ffc113f018f900220f8f40620209fc6a00088013ffc90102001de213ffc113f018f9002213cf40620209fc6a00088013ffc90102001de213ffc113f018f90022184f40620209fc6a00088013ffc90102001de213ffcda213ff8d2213ff4d6213ff0d20120009010000ada036024f40360009fc6a00088013ff0ee012008ec012010aa102001ea21201096100016d4012000133f018f9202602cd0012004da05e028de01200cf403600081c6a00488012010de213ffcda213ff8d2213ff4d6213ff0ae103fc9ee213fecd6012000ac10000a94102075d203602c90100016da036020f40360009fc6a00088013fecea012008a8102021e8213ffcd601201094102075133f018f920261d0d0012004da056028f40360009fc6a00088013ffce6012008a4102035e4213ffcd601201094102071d204e02c90102075da04e020f40360009fc6a00088013ffce2012010e0012008fa04600cfa213ffc92100011d0012000da04200cf40360009fc6a00088013ffc8c21a0088b196008ba1020019e100006fa21bffcc2012004c223e000da012000de23600090102001d801201081c3200688012018de213ffcda213ff8d2213ff4ae103fc9ee213ff0d6012000ac10000a94102075d203602c90100016da036020f40360009fc6a00088013ff0ea012004e801200ca6103fd5e621200c96100014d40120009210200190102075da056030de012008f403600081c6a0048801200c|@3515,131071|52,4,$3496+78 180,4,@3497 852,4,@3499 1032,4,@3501 1132,4,@3501 1168,4,@3502 1196,4,@3504 1224,4,@3506 1520,4,@3508 1548,4,@3510 1576,4,@3512 1664,4,@3501 1776,4,@3514 3497:O3|@24,@397,@3498 3498:S28|67656e52523a20756e737570706f72746564206f7065726174696f6e 3499:O3|@24,@397,@3500 3500:S40|67656e52523a20756e737570706f72746564206f7065726174696f6e202d20696e7374724d756c41 3501:O2|-1,28 3502:O3|@24,@397,@3503 3503:S40|67656e52523a20756e737570706f72746564206f7065726174696f6e202d20696e7374724d756c57 3504:O3|@24,@397,@3505 3505:S40|67656e52523a20756e737570706f72746564206f7065726174696f6e202d20696e73747244697657 3506:O3|@24,@397,@3507 3507:S40|67656e52523a20756e737570706f72746564206f7065726174696f6e202d20696e7374724d6f6457 3508:O3|@24,@397,@3509 3509:S44|67656e52523a20756e737570706f72746564206f7065726174696f6e202d20696e7374725570736869667457 3510:O3|@24,@397,@3511 3511:S46|67656e52523a20756e737570706f72746564206f7065726174696f6e202d20696e737472446f776e736869667457 3512:O3|@24,@397,@3513 3513:S51|67656e52523a20756e737570706f72746564206f7065726174696f6e202d20696e737472446f776e7368696674417269746857 3514:O2|-1,29 3515:S24|5350415243434f4445434f4e5328292e67656e5252283529 3516:O3|@3518,@3432,@3517 3517:O3|@3520,@3432,@3421 3518:C2,488|9e13e002f606201880a1001b8bd02018c402200080a0bffd3280006bae103fe1ee02200480a5e01132800067ae103fe180a2601122800064ae103fe1ec02a030ea05a000b8256001ba10001cbb17401db917401da8072001808d200122800051a6103fe12b3ffff0aa056001b8252001ba256001811f401c3480004aa6103fe12b000010aa056001b8256001ba252001811f401c36800043a6103fe1ea02a00ce605600080a4e00132800004e404e0001080000ba2102001b8226001ba24a001811f401c22800004a010200110800004a2102001e0256000a2102001de213ffcda213ff8d2213ff4d4213ff0901000147ffff91b88013ff0a2100008901020017ffffa6201000000de04600080a3fffd32800005c2046004e004600410800013d6012004b8206001811f2000368000089a1000011900002098032001b8206001ba232001b917401c9a0720011900002098032001b8232001ba236001b917401ca0072001d6012004d6213ffc961000109410201192100008901020097ffff24988013ffcd4012008d2012000da02a004de01200cf403600081c6a00488012010e6213ffc9610000a941000099210000890102001da036008f403600081c6a00488013ffcee213ffc9610000a941000099210000890102001da036008f403600081c6a00488013ffc|@3519,131071|100,4,-4096 128,4,4096 240,5,@3472 256,5,@3483 308,4,8192 332,4,8192 380,5,@3429 3519:S26|5350415243434f4445434f4e5328292e67656e4d6f7665283329 3520:C2,396|9e13e002f606201880a1001b8bd02018c402e00cee00a00080a5e00132800004ec05e0001080000baa102001b822a001ba25a001811f401c22800004a810200110800004aa102001e820a000aa10200180a220113280000480a2a0111080000ede213ffc32800004ea0260001080000ade213ffc80a57ffd32800014aa102001e802600480a5201132800010aa102001de213ffcda213ff8d0213ff4d2213ff0d4213fecd6213fe89010000bda036008f40360009fc6a00088013fe8aa1000081080000ad0012018de213ffcda213ff8d0213ff4d2213ff0d4213fecd6213fe888013fe8d00120187ffff9de01000000e8012008e405200080a4bffd32800005e2052004e605200410800013c2012004b8246001811f200036800008a01000111f0000209e03e001b8246001ba23e001b917401ca00720011f0000209e03e001b823e001ba242001b917401ca6072001c2012004c2213ffc96100013d401200c92100008901020097ffff1c488013ffcda012010d2012000da036004de012014f403600081c6a0048801201c|@3521,131071|232,5,@3483 288,4,8192 312,4,8192 360,5,@3429 3521:S24|5350415243434f4445434f4e5328292e7479706532283529 3522:O3|@3524,@3432,@3523 3523:O2|0,1 3524:C2,200|9e13e002f606201880a1001b8bd02018ae10000fac10000daa100008901020017ffff99701000000de05a008da03e00080a37ffd32800005c403e004c203e00410800013a8100017b820a001811f200036800008a81000020300002082006001b820a001ba206001b917401ca80720010300002082006001b8206001ba252001b917401c82072001a8100017a6100016a4100009ea213ffc961000019410207192100008901020097ffff17b88013ffc92100012da04e0049e100014f403600081c6a00401000000|@3525,131071|32,5,@3483 88,4,8192 112,4,8192 168,5,@3429 3525:S30|5350415243434f4445434f4e5328292e67656e546167496e737472283229 3526:O3|@3527,@3432,@3421 3527:C2,240|9e13e002f606201880a1001b8bd02018c402e00cae102001ee20a000de213ffcda213ff8d0213ff4d2213ff0d4213fecd6213fe89010000bda036008f40360009fc6a00088013fe8d00120187ffff94501000000ec012008e805a00080a53ffd32800005e605a004ea05a00410800013e0012004b824e001811f200036800008a410001323000020a2046001b824e001ba246001b917401ca407200123000020a2046001b8246001ba24a001b917401caa072001e0012004e0213ffc96100015d401200c92100008901020097ffff12b88013ffcde012010d2012000da03e004de012014f403600081c6a0048801201c|@3528,131071|76,5,@3483 132,4,8192 156,4,8192 204,5,@3429 3528:S25|5350415243434f4445434f4e5328292e747970653254283529 3529:O5|@3531,@3516,@3517,@3523,@3530 3530:O2|@3536,@3535 3531:C2,472|9e13e002f606201880a1001b8bd02018c402a00cee00a00080a5e00132800004ec05e0001080003ade213ffcb8222001ba25a001811f401c22800004de213ffc10800033de213ffcda213ff8d2213ff4d4213ff09210000ada036010f40360009fc6a00088013ff0ea012000e805600ce605200080a4e00132800004e404e00010800014e0012008e2012004b8246001ba24a001811f401c22800004e00120081080000ce00120089410001592102075113f018f9002202cda042004f40360009fc6a000010000001080000c010000009e103fc5de213ffc9610001594102075d204200cd0012004da042008f40360009fc6a00088013ffc113f01919002228cc201200c81c0600688012010da213ff8d0213ff4d4213ff0aa1000099210000a90100015da036010f40360009fc6a00088013ff0e8012000e605200ce404e00080a4a00132800004e204a00010800014de012008e0012004b8242001ba246001811f401c22800004de0120081080000cde0120089410001492102075113f018f9002202cda03e004f40360009fc6a000010000001080000c0100000082103fc5c2213ffc9610001494102075d203e00cd0012004da03e008f40360009fc6a00088013ffc113f019190022298da01200c81c3600688012010|@3534,131071|176,4,@3501 248,4,@3532 380,4,@3501 452,4,@3533 3532:O2|28,@3514 3533:O2|29,@3501 3534:S32|5350415243434f4445434f4e5328292e756e746167426f746841726773283329 3535:O3|@3538,@3432,@3523 3536:C2,224|9e13e002f606201880a1001b8bd02018c402600cee00a00080a5e00132800016ec05e000de213ffcd0213ff8c4213ff4da036004f40360009fc6a00088013ff48c21a0088b196008ba102001ac100006fa21bffcea012004ea25a000e8012000ec25200090102001e601200881c4e0068801200cb8222001ba25a001811f401c32800005de213ffc9010200181c3e00601000000d0213ff8c4213ff4da036004f40360009fc6a00088013ff48c21a0088b196008ba102001aa100006fa21bffce8012004e8256000e6012000ea24e00090102001e401200881c4a0068801200c|@3537,131071| 3537:S28|5350415243434f4445434f4e5328292e726561644361636865283229 3538:C2,204|9e13e002f606201880a1001b8bd02018ae10000fac10000daa10000890103fc57ffff82201000000de05a008da03e00080a37ffd32800005c403e004c203e00410800013a8100017b820a001811f200036800008a81000020300002082006001b820a001ba206001b917401ca80720010300002082006001b8206001ba252001b917401c82072001a8100017a6100016a410000996102071d6213ffc961000019410001592100008901020097ffff00588013ffc92100012da04e0049e100014f403600081c6a00401000000|@3539,131071|32,5,@3483 88,4,8192 112,4,8192 172,5,@3429 3539:S32|5350415243434f4445434f4e5328292e67656e556e746167496e737472283229 3540:O3|@3541,@3432,@3517 3541:C2,508|9e13e002f606201880a1001b8bd0201880a22011328000758410200180a2a0112280007284102001c402600080a0bffd2280006e8410200180a0bffd3280000bee026004de213ffcac100008113f019290022334f40620209fc6a00088013ffcae102001ee026004ec02e030ea05a000b8256001ba10001cbb17401db917401da8072001ba25e001b917401caa072001808d600122800050a8102001293ffff0a8052001b8256001ba252001811f401c34800049a81020012f000010ae05e001b825e001ba256001811f401c36800042a8102001e802e00cd005200080a2200132800004ee0220001080000bde213ffcb822a001ba25e001811f401c22800004a610200110800004de213ffce6252000de213ffcda213ff8d4213ff4d6213ff0901000157ffff64e88013ff0ac100008901020017ffff79501000000e805a00080a53ffd32800005e605a004ea05a00410800013e0012004b824e001811f200036800008a410001323000020a2046001b824e001ba246001b917401ca407200123000020a2046001b8246001ba24a001b917401caa072001e0012004e0213ffc961000159410201192100008901020097fffef7c88013ffcde012008d2012000da03e004de01200cf403600081c6a00488012010e8213ffcda036008f403600081c6a00488013ffcc4213ffcda036008f403600081c6a00488013ffc|@3544,131071|76,4,@3542 156,4,-4096 184,4,4096 292,5,@3472 308,5,@3483 360,4,8192 384,4,8192 432,5,@3429 3542:O3|@24,@397,@3543 3543:S8|676574496d6d3133 3544:S25|5350415243434f4445434f4e5328292e67656e416464283429 3545:O2|@3546,@3530 3546:C2,252|9e13e002f606201880a1001b8bd02018d0213ffcd0213ff8c402a00cee00a00080a5e0011280000488013ff810800019de213ffcec05e000b8222001ba25a001811f401c22800004de213ffc10800011de213ffcd2213ff89210000ada036004f40360009fc6a00088013ff8aa012008e8012000e8256000a6012008253f018fa404a02ce424e004108000128c21a00cd0213ff8aa1000099210000a90100015da036004f40360009fc6a00088013ff8a8012008e6012000e6252000a4012008233f018fa204602ce224a0048c21a00c8b19600cba10200290100006fa21bffce0012008e0222000de01200cde222004c201200481c0600688012010|@3547,131071|124,4,@3501 192,4,@3501 3547:S30|5350415243434f4445434f4e5328292e756e7461674f6e65417267283329 3548:O3|@3549,@3432,@3421 3549:C2,396|9e13e002f606201880a1001b8bd02018c402e00cee00a00080a5e00132800004ec05e0001080000baa102001b822a001ba25a001811f401c22800004a810200110800004aa102001e820a000aa10200180a2a0113280000480a220111080000ede213ffc32800004ea0260001080000ade213ffc80a57ffd32800014aa102001e802600480a5201132800010aa102001de213ffcda213ff8d0213ff4d2213ff0d4213fecd6213fe89010000bda036008f40360009fc6a00088013fe8aa1000081080000ad0012018de213ffcda213ff8d0213ff4d2213ff0d4213fecd6213fe888013fe8d00120187fffeda001000000e8012008e405200080a4bffd32800005e2052004e605200410800013c2012004b8246001811f200036800008a01000111f0000209e03e001b8246001ba23e001b917401ca00720011f0000209e03e001b823e001ba242001b917401ca6072001c2012004c2213ffc96100013d401200c921000089010200d7fffeea088013ffcda012010d2012000da036004de012014f403600081c6a0048801201c|@3550,131071|232,5,@3427 288,4,8192 312,4,8192 360,5,@3429 3550:S31|5350415243434f4445434f4e5328292e67656e4c6f6164496e737472283529 3551:S60|5452414e535f54414228292e7075736852656769737465727328352970757368456e747269657328312973617665446972656374496e526567283129 3552:C2,288|9e13e002f606201880a1001b8bd02018808a20013280004101000000808a60013280003c010000008410000fae100008ac100009d205a000d005e0007fffe42a0100000080a2200122800007c4213ffcd205a004d005e0049e10000210bfffebf6062018ee213ff8ec213ff4fa05e000fa213ff0fa05e004fa213fecfa05a000fa213fe8fa05a004fa213fe4d0013ff07fffe5f088013fe4d0213ffcd00120047fffe5ec88013ffcea012000b8222001ba256001811f401c36800012d2012004d2012014d001200c7fffffcf9e13e0028c21a00c8b19600cba102002a8100006fa21bffcd0252004e6012010e625200090100014e401201c81c4a00688012020d0012018de01201c10bfffbf8801202081c3e0060100000081c3e00601000000|@3553,131071|60,5,@3373 144,5,@3385 160,5,@3385 3553:S32|5452414e535f54414228292e696e766572736553657428312964696666283229 3554:C2,128|9e13e002f606201880a1001b8bd02018c4022004ee00a000fa02200cfa213ffcc4213ff8fa022008fa213ff4fa022000fa213ff0ee213fecd2213fe8d0013ffcec02200080a5a0011280000588013fe89010200181c3e00688012018de213ffc92102001901000179a0120144000000c88013ffcea01200081c560068801201c|@3559,131071|108,5,@3555 3555:C2,728|9e13e002f606201880a1001b8bd02018b8222001811f200036800004c4037ff41080000ade213ffcee00a000b825e001ba222001811f401c36800004de213ffc1080000ab8222001ae100008113f0004900223d0f40620209fc6a00088013ffc84102001b8222001b9172004ae072001ec00801c84100016de213ffcda213ff8d0213ff4d2213ff0c4213fec7fffdc3c88013fecea01200ce8057ff8e605200080a4e00132800005d0213ffca410200510800018e4213ffce204e00088013ffc80a4600132800005d2012000a41020011080000f88012004d00460007fffe3820100000080a2200122800005e2046004a41020051080000688012004f606201880a1001b8bd0201830bfffeee4213ffcd00120087fffdc1a88013ffce0012010c2043fec80a0600132800005d0213ffc9e10200510800019d6012004da00600088013ffc80a3600132800005d80360049e1020011080001088012004d2012000d00360007fffe3600100000080a22001228000059a10000c9e1020051080000688012004f606201880a1001b8bd0201830bfffedd601200480a2e00132800012d201200cd401200080a2a0012280000ed201200c80a3e0012280000bd201200cd001200c7fffdbee01000000da012010de012014353f0194b406a3dc81c6a0048801201880a2600132800005b822600194102041108000058410000fb91f2004940720018410000f92102001d00120087fffe3350100000080a220012280000fee01200880a2e0013280000cee01200880a0a00122800009ee012008d4213ffcd001200c7fffdbce88013ffcae10000810800005ec012014d4213ffc88013ffcec012014ea012000e805bff0b8252001ba256001811f401c328000139210001792102001901000177fffe3170100000080a22001228000069010001790102001e601201881c4e0068801201c9a100016de012018353f0194b406a3dc81c6a0048801201c901000159a100016de01201810bfff4d8801201c|@3558,131071|76,4,@224 140,5,@3321 220,5,@3373 276,5,@3321 356,5,@3373 452,5,@3321 468,4,@3556 528,5,@3373 580,5,@3321 648,5,@3373 692,4,@3556 3556:C2,324|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d0213ff47fffe4d088013ff4c4012004b8222001811f200036800004ee00bff41080000aae100008ec05e000b825a001ba222001811f401c36800004ae10000810800008b8222001113f0004900223d0f40620209fc6a00001000000b8222001b9172004aa072001a8102005e825c01c8c21a00c8b19600cba102002a6100006fa21bffca4102001e424e004e2012000e224e0008c21a0088b196008ba102001a0100006fa21bffce6242000de00bff8c203e000d0213ffcde213ff892100001901000107fffe7a588013ff8da012000d0236000d801200cd401200480a2a00132800005b822a0019610204110800005d2033ffcb91f200496072001d2033ffcd6226000d0032000c4022000b820a001b91f2004ae072001ee222000d0012008ec01201081c5a00688012014|@3557,131071|28,5,@3385 96,4,@224 220,5,@3406 3557:S47|5452414e535f54414228292e67657441636365707461626c655265676973746572283229616c6c6f63526567283129 3558:S47|5452414e535f54414228292e67657441636365707461626c65526567697374657228322966696e6446726565283229 3559:S36|5452414e535f54414228292e67657441636365707461626c655265676973746572283229 3560:C2,408|9e13e002f606201880a1001b8bd02018d0037ffcc4022000de213ffcda213ff8d4037fe8d2023ff0d0022004da00a008f40360009fc6a00088013ff8ee012000ec05fffcd205bff0d005fff41b3f01809a0360ac7fffeaa801000000ea01200092102001d0057fec7fffe2630100000080a2200122800005e8057ffce8057ff41080000ae2012000e6052004d204e010d0057ff47fffe3c401000000e4012000e804bfece2012000e0047ffcde042004c203e030da006000b8236001ba10001cbb17401db917401dba102000b91f401c980720018c21a00c8b19600cba10200296100006fa21bffcd822e00494103ff5d422e0008c21a0148b196014ba10200492100006fa21bffcda22600ce8226008d0047ff0d0226004d622600094100009d2047ff8d0043ff47fffd90601000000c4012000ee00bffcec05e004ea05a030e8056000b8252001b9172004a6072001e6256000e4056000e205a018e0046000b8242001ba24a001811f401c2480000890102001de056000de24600090102001c201200481c0600688012008de01200481c3e00688012008|@3561,131071|76,4,@3420 84,5,@3422 104,5,@3373 148,5,@3384 296,5,@3309 3561:S59|5452414e535f54414228292e7075736852656769737465727328352970757368456e7472696573283129736176655265674f6e537461636b283129 3562:C2,276|9e13e002f606201880a1001b8bd02018d0213ffcda213ff8c4037ffcee00a004de213ff4d205e010d0037ff47fffe36088013ff4ec012004d2012008d005bfec7fffe1ef0100000080a2200122800004ea05bffc1080000de6012004e8057ff0e8213ffcd601200894102001d205bff490103fe91b3f018c9a0363587ffff6d488013ffce6012004d004fff89a0120084000002801000000e4012004e204bffc8c21a00c8b19600cba102002a0100006fa21bffcde012008de24200482102009c22420008c21a0148b196014ba1020049a100006fa21bffcd804bfe8d823600c96102001d6236008d404bff0d4236004e02360009410000dd204bff8d0047ff4de012000353f016eb406a31881c6a0048801200c|@3567,131071|44,5,@3384 64,5,@3373 116,4,@3494 124,5,@3496 144,5,@3563 260,4,@3309 3563:C2,528|9e13e002f606201880a1001b8bd02018c4037ffcee00bffcec05e004ea05a01ce8056000b8252001ba222001811f401c3680007690102001a610000fa410000da210000892100011d005a00c7ffe965a01000000808a20013280005ce6213ffcde022000da03e00080a360053280004ee6213ffcd204bffcc403e008ee022004ec022008ea02200cd2027ff4d003e0047fffe18f0100000080a2200122800039e6213ffce804bffcde053ffcda03e004e6213ffce4213ff8e2213ff4c4213ff0ee213fecec213fe8ea213fe4d2036010d0053ff47fffe2ea88013fe4d8012014d6033ffcd402fffcd202a004d2026010d00320004000004e01000000d0012014c4023ffcee00bffc8c21a0108b196010ba102003ac100006fa21bffcea01200cea25a008e8022000e825a004a6102005e625a0008c21a0148b196014ba102004a4100006fa21bffce2012000e224a00ce0012004e024a008de012008de24a004ec24a00094100012d2012010d005fff47fffd82a010000001080001ce0012010e4213ff8e2213ff4d0213ff0d0213fecd0213fe8d0213fe488013fe410800013e0012010e4213ff8e2213ff4d0213ff0d0213fecd0213fe8d0213fe488013fe41080000ae0012010e4213ff8e2213ff4d0213ff0d0213fecd0213fe8d0213fe488013fe4e0012010b8242001b91720049e0720019010000fda012014de01201810bfff818801201c81c3e00601000000|@3566,131071|76,5,@608 144,5,@3373 212,5,@3384 244,5,@3564 368,5,@3309 3564:C2,304|9e13e002f606201880a1001b8bd02018de213ffcd2213ff8fa02600cfa213ff47fffe2fb88013ff4c4012004b8222001811f200036800004ee00a0001080000aac100008ec05e000b825a001ba222001811f401c36800004ac10000810800009b8222001113f0004900223d0f40620209fc6a00001000000ae102001b8222001b9172004aa072001e805c01cae10001480a5e00132800009b825e001e6012000e404e000b824a001b91f2004a2072001e224e000b825e001b9172004a6072001b8222001811f200036800004e400a0001080000a01000000e204a000b8246001ba222001811f401c368000040100000010800009b8222001113f0004900223d0f40620209fc6a0000100000090102001b8222001b9172004a0072001e624801c90102001de01200881c3e0068801200c|@3565,131071|32,5,@3385 100,4,@224 248,4,@224 3565:S19|5452414e535f54414228292e696e6372283229 3566:S70|5452414e535f54414228292e7075736852656769737465727328352970757368456e747269657328312973617665526567496e5265672831297265674368616e676564283129 3567:S57|5452414e535f54414228292e7075736852656769737465727328352970757368456e747269657328312973617665526567496e526567283129 3568:S42|5452414e535f54414228292e7075736852656769737465727328352970757368456e7472696573283129 3569:S13|70757368526567697374657273 3570:S28|5452414e535f54414228292e70757368526567697374657273283529 3571:O2|8,@3572 3572:O2|9,@3573 3573:O2|10,@3574 3574:O2|11,@3575 3575:O2|12,@3576 3576:O2|13,@3577 3577:O2|1,@3578 3578:O2|15,@3579 3579:O2|16,@3580 3580:O2|17,@3581 3581:O2|18,@3582 3582:O2|19,@3583 3583:O2|20,@3584 3584:O2|21,@3585 3585:O2|22,@3586 3586:O2|23,@366 3587:O2|@3598,@3394 3588:C2,532|9e13e002f606201880a1001b8bd02018b822a001811f200036800047c4022030d4022030c402a000ee02201cec05e000b825a001b91f2004aa072001de213ffcda213ff8d0213ff4d2213ff0c4213fec901000151b3f01989a036094f40360009fc6a00088013fece8012000e602200880a4e00122800029a4100014d0213ffce8213ff8e2022004901020019a100011f40360009fc6a00088013ff8e001201092100008d004200c7ffe94ea01000000808a20013280000cde012000c202200cb8206001b91720049a072001d8012000ba232001811f001d248000039e10000c9e10000dc2012004de213ffc90102001da006000f40360009fc6a00088013ffce80120008801200cf606201880a1001b8bd0201830bfffd694100012d2012004d0012008da01200cde01201010bfffb688012014ee00a000b825e001ba22a001811f401c3680000aec00a000de213ffcac100008113f01989002221cf40620209fc6a00088013ffcec00a000b825a001ba22a001811f401c32800005de213ffc9010200181c3e00601000000da213ff8d0213ff4d2213ff0d4213fecda036004f40360009fc6a00088013fec80a22001228000049010200110800011d40120007fffd89001000000d20120041b3f01809a0360ac7fffe82501000000ea012008e8056030e6052000b824e001b9172004a4072001e4252000d4012000d2012004d0012008da01200cde01201010bfff7e88012014|@3597,131071|84,4,@3589 168,5,@608 340,4,@3595 448,5,@3321 460,4,@3420 468,5,@3422 3589:O1|@3590 3590:C2,148|9e13e002b8222001811f20002680000384102001841020058c21a0108b196010ba102003ae100006fa21bffc2d3f0198ac05a14cec25e0002d3f0198ac05a094ec25e008d025e0048c21a00c8b19600cba102002ac100006fa21bffc2b3f0198aa0561c8ea25a000d025a0048c21a0108b196010ba10200390100006fa21bffcc4222008ec222004ee22200081c3e00601000000|@3594,123009|44,4,@3591 56,4,@3589 92,4,@3593 3591:C2,52|9e13e002f606201880a1001b8bd02018c4036004b820a001b91f2004ae07200190100017da036008f403600081c6a00401000000|@3592,131071| 3592:S34|5452414e535f54414228292e696e64446f776e746f28322970726576283129283129 3593:C2,16|9e13e002d003600481c3e00601000000|@3592,161| 3594:S31|5452414e535f54414228292e696e64446f776e746f28322970726576283129 3595:O3|@24,@397,@3596 3596:S32|707573685265676973746572733a20756e707573686564207265676973746572 3597:S25|5452414e535f54414228292e616c69676e537461636b283329 3598:C2,168|9e13e002f606201880a1001b8bd02018c4022030ee00a0008c21a0108b196010ba102003ac100006fa21bffc2b3f0198aa05633cea25a000d025a008ee25a004de213ffcd0213ff8ee213ff4d0213ff096100009941020019210001690102001da036004f40360009fc6a00088013ff0e8012004e6052030e404e000e2012000b8246001ba24a001811f401c32800003a0102001a0102005901c2004e001200881c420068801200c|@3607,131071|44,4,@3599 3599:C2,284|9e13e002f606201880a1001b8bd02018c4036008a610000fa410000d92100008d000a00c7ffe93d50100000080a220013280000ade022000e6213ffc113f019990022074f40620209fc6a00088013ffc90102001de022000da03e00080a37ff532800013d202200cd203e004c404a004b820a001ba226001811f401c2480000a90102001e6213ffc113f0199900220b0f40620209fc6a00088013ffc901020019010200181c4e00601000000b8226001811f200026800010c404a004c404a004b820a001ba226001811f401c3680000ac404a004e6213ffc113f0199900220f0f40620209fc6a00088013ffc90102001c404a004b820a001ba226001811f401c32800005901020019010200581c4e0060100000081c4e00601000000|@3606,130211|36,5,@608 60,4,@3600 136,4,@3602 216,4,@3604 3600:O3|@24,@397,@3601 3601:S33|70757368416e79456e747279417443757272656e7453503a206e6f20656e747279 3602:O3|@24,@397,@3603 3603:S40|70757368416e79456e747279417443757272656e7453503a20656e7472792061626f766520727370 3604:O3|@24,@397,@3605 3605:S39|70757368416e79456e747279417443757272656e7453503a20756e70757368656420656e747279 3606:S52|5452414e535f54414228292e70757368416e79456e747279417443757272656e74535028322973656c656374456e747279283129 3607:S38|5452414e535f54414228292e70757368416e79456e747279417443757272656e745350283229 3608:O2|2,15 3609:S7|70757368526567 3610:O2|2,13 3611:C2,580|9e13e002f606201880a1001b8bd02018c403600cb820a001ba222001811f401c3680008790102001b8222001811f20103680008390102001b8222001811f20103680000cde213ffcb8222001811f200026800008de213ffcb8222001b9172020ac072001ae1000161080002ede213ffcda213ff8d0213ff4fa037fd4fa213ff092103ffd7ffe8cf188013ff08c21a00c8b19600cba102002ae100006fa21bffcac102001ec25e004d025e0008c21a00c8b19600cba10200290100006fa21bffcee2220042b3f019aaa056024ea2220007ffe8e3c010000008c21a0108b196010ba102003a8100006fa21bffcd0252008273f000fa604e3bce6252004253ee008a404a1fce425200090100014f40620209fc6a00001000000ae102001de213ffcda213ff8d0213ff4fa037fd4fa213ff0ee213fec94100017d2037ff8d0037fec1b3f017a9a0361d07fffe0b888013fecea01200c8c21a00c8b19600cba102002a8100006fa21bffce6012000e6252004a4102009e4252000d4057fec92100014113f0199900221a87fffd49101000000e201200cd0213ffc9410200192100008d0047fec1b3f01789a03612c7fffde7588013ffce001200cb8242001811f200036800004de0120081080000a01000000c203e000b8206001ba242001811f401c368000040100000010800009b8242001113f0004900223d0f40620209fc6a000010000009e102001b8242001b91720049a072001d8012000d823c01c9e102001b8242001b917200490072001da012010de01201410bfff748801201881c3e00601000000|@3613,131071|132,5,@509 196,4,@3612 208,5,@520 240,4,@397 252,4,@24 320,4,@3393 328,5,@3395 384,4,@3609 392,5,@3308 420,4,@3378 428,5,@3380 496,4,@224 3612:S28|6172675265673a20626164207265676973746572206e756d62657220 3613:S34|475f434f444528292e636f646567656e283130297075736841726752656773283129 3614:C2,452|9e13e002f606201880a1001b8bd02018d0036010b8222001811f201036800005b82220018410200110800005ae10000fb91f201084072001ae10000fac10000d921020019010203d7fffddc40100000080a2200122800025ee213ffc92100002d005a0044000005f01000000b8222001b91f200484072001aa100017a8100016a6100009d2052008901000024000006101000000de052008da03e030d2036000b824e001ba226001b917401c90072001d0236000ea213ffce8213ff89610000f9410200192102001113f019a900222f41b3f019a9a0363004000007688013ff810800033da012000ec213ff8d0213ff4d0213ff0c4213fecaa013ff0ea213fe896102001d405a00cd205a004d005a0081b3f019c9a036058400001b988013fe8e801200c94103ffdd2012008d00520041b3f01789a03612c7fffdde601000000e601200cd004e0044000002601000000d204e0084000002f01000000e404e008e204a030e0046000de012000b823e001ba242001b917401c82072001c22460009610001294102001d2012004113f019a900222f41b3f019a9a03630040000045010000008801200cda012000d0036004de012004353f01acb406a24881c6a00488012008|@3707,131071|72,5,@3373 100,5,@3615 140,5,@3616 200,4,@3618 208,4,@3619 216,5,@3621 272,4,@3629 280,5,@3631 304,4,@3378 312,5,@3380 328,5,@3615 340,5,@3616 396,4,@3618 404,4,@3619 412,5,@3621 436,4,@3705 3615:C2,20|9e13e002c4022030d000a00081c3e00601000000|@2430,65665| 3616:C2,44|9e13e002c4026030ee00a000b8222001ba25e001b917401cac072001ec20a0009010200181c3e00601000000|@3617,114819| 3617:S29|5350415243434f4445434f4e5328292e7265736574537461636b283229 3618:O2|0,6 3619:O3|@3621,@3432,@3620 3620:O4|@3623,@3433,@3432,@3425 3621:C2,336|9e13e002f606201880a1001b8bd02018c402e00cae102001ee20a000de213ffcda213ff8d0213ff4d2213ff0d4213fecd6213fe89010000bda036008f40360009fc6a00088013fe8ac10000890103fe57fffef4c01000000ea01200ce605600080a4fffd32800005e4056004e80560041080001382100016b824a001811f200036800008a210001221000020a0042001b824a001ba242001b917401ca207200121000020a0042001b8242001ba246001b917401ca807200182100016da012004da213ffc96100014d401200892100008901020097fffe73188013ffcd8012010c2213ffcd2012000da032004f40360009fc6a00088013ffcd6012014d2012004d0012000da02e004f40360009fc6a00001000000d401200880a2a0013280000a90102001d2012004d002600484102005c422200090102001ee01201881c5e0068801201cd201201881c260068801201c|@3622,131071|80,5,@3483 136,4,8192 160,4,8192 212,5,@3429 3622:S26|5350415243434f4445434f4e5328292e67656e4a6d706c283429 3623:C2,480|9e13e002f606201880a1001b8bd02018c4022000ee00a000ec02203cea05a00080a5600132800005e8022004a810200110800012de213ffca6102001e6252000de213ffcda213ff8d0213ff4ec213ff094100015921000174000006988013ff0e4012000a2102001e224a000a81020011080000588012004da213ff8d0213ff488013ff4e6012000e404e030e204a000b8246001ba10001cbb17401db917401da007200180a4200132800007d0213ffcde012004d003e004c201200881c060068801200cd0213ff8de01200492013ff890100010da03e00cf40360009fc6a00088013ff8c201200080a0600132800005d801200c9a10200110800010d8012008fa006004fa213ffcd2012008d0006000da032008f40360009fc6a00088013ffcc201200088012004f606201880a1001b8bd0201830bfffedd603203094102001d422e000901020017fffeeaa01000000d2012004ee02600080a5fffd32800005ec026004c402600410800013a6102011b825a001811f200036800008aa10001629000020a8052001b825a001ba252001b917401caa07200129000020a8052001b8252001ba256001b917401c84072001a6102011e4012010e6212010961000029410201192100008901020099e100012353f0182b406a0bc81c6a00488012010|@3628,131071|88,5,@3624 328,5,@3483 384,4,8192 408,4,8192 464,4,@3429 3624:C2,244|9e13e002f606201880a1001b8bd0201880a2a00132800005c402a0009010200181c3e00601000000b820a001ba226001b91f401cae072001de213ffcd0213ff8d2213ff4c4213ff0fa02a004fa213fecee213fe8d2022008901000027fffe7b788013fe82d3fe000ac05a001ea012000b8256001ba25a001811f401c348000090100000029002000a8052001b8252001ba256001811f401c2680000992100015113f019b900223c0f40620209fc6a00001000000a6102001921000157fffebca01000000e6012010d404e008d20120087fffe8c001000000a6100008d4012004d201200cd0012010de01201410bfffc688012018|@3627,131071|92,5,@3436 100,4,-2097152 132,4,2097152 160,4,@3625 188,5,@3465 208,5,@3444 3625:O3|@24,@397,@3626 3626:S35|7265616c6c7946697875704272616e636865733a206a756d7020746f6f206c61726765 3627:S38|5350415243434f4445434f4e5328292e7265616c6c7946697875704272616e63686573283329 3628:S36|5350415243434f4445434f4e5328292e70757450656e64696e67496e44656c6179283129 3629:O2|@3631,@3630 3630:O2|@3695,@3394 3631:C2,724|9e13e002f606201880a1001b8bd02018d0213ffcd0213ff8a610000fa410000da2100008a01000099210000ad004200c7ffe908588013ff880a22001328000249e012000e6213ffce4213ff8e2213ff4e0213ff0d4213fecd6213fe8fa04200cfa213fe492103ffd9010000a7ffe8a4c88013fe492100008113f019c900223607ffe88d7010000008c21a0108b196010ba1020039e100006fa21bffcd023e008033f000f820063bcc223e0041b3ee0089a0361fcda23e0009010000ff40620209fc6a000010000009e012000d423e00082012000d0206004da012004d8036000c2036004fa036008fa213ffcfa03600cfa213ff89210000ad004200c7ffe905288013ff880a220013280000ad2022004e6213ffc113f019c90022384f40620209fc6a00088013ffc9a102001d202200480a26005328000039a1020019a102005d4213ffce0213ff8c2213ff4d8213ff0fa04200cfa213fecd6213fe8e2213fe4da213fe0e4213fdcc403200080a0a0091280004188013fdc80a2e0013280000980a36001ee012034ec032004ec25e000d425e0049010200181c4e006880120382280001e921020018c21a00c8b19600cba10200290100006fa21bffcae102001ee222004ec032004ec222000e6213ffcec213ff84000005c88013ff8d401202492100008113f019d900220f47fffde9301000000ea01203ce8012000e8256000e6012028e625600490102001e401200481c4a00688012040d00120287fffd76a0100000080a220012280000be6213ffce6213ffcd2012034901020019a012030400000ab88013ffcee01200081c5e0068801203cd2012034901020019a0120304000010288013ffcee01200081c5e0068801203c92102001d00120287fffd7520100000080a220012280000be6213ffce6213ffcd2012034901020019a0120304000009388013ffcee01200081c5e0068801203cd2012034901020019a012030400000ea88013ffcee01200081c5e0068801203c|@3694,131071|48,5,@608 108,5,@509 120,4,@3632 128,5,@496 160,4,@397 172,4,@24 252,5,@608 276,4,@3633 468,5,@3635 484,4,@3637 492,5,@3401 540,5,@3347 576,5,@3640 608,5,@3642 636,5,@3347 672,5,@3640 704,5,@3642 3632:S28|70737461636b5265616c456e7472793a206e6f7420656e7472793a20 3633:O3|@24,@397,@3634 3634:S23|6c6173745265666572656e63653a206e6f20656e747279 3635:C2,260|9e13e002f606201880a1001b8bd02018de213ffc8410200188013ffc80a22001328000058c21a00cae10000210800017ee213ffc8b19600cba1020029e100006fa21bffcae102001ee23e004ee022000ee23e000fa022004fa213ffc921000029010000f7fffe00788013ffc84100008d001200088012004f606201880a1001b8bd0201830bfffe6ac10200188013ffc80a5e00132800005b825a001aa1000161080000a80a56045b9172004a8072001ee05e004ac100014f606201880a1001b8bd0201830bffff3328000068c21a00890102001e801200481c52006880120088b196008ba10200190100006fa21bffce8012000e8222000e601200481c4e00688012008|@3636,131071|100,5,@3407 3636:S24|5452414e535f54414228292e6c697374546f536574283129 3637:O1|@3638 3638:C2,16|9e13e0029010200581c3e00601000000|@3639,129| 3639:S42|5452414e535f54414228292e72656d6f766552656769737465727346726f6d4361636865283229283129 3640:C2,300|9e13e002f606201880a1001b8bd02018d0037fdc80a220012280001ac4037fec8c21a0148b196014ba102004ae100006fa21bffcec037ff4ec25e00caa102001ea25e008ea037fe8ea25e004e8037fe4e825e000de213ffcda213ff8d2213ff494100017d2037ffcd0037fe07fffd15488013ff4841000081080000bee012004de213ffcda213ff8d2213ff4d200a010d0037ff87ffff94f88013ff484100008ee0120048c21a00c8b19600cba102002ac100006fa21bffcea05fff8ea25a004a8102009e825a000d405ffec92100016113f0199900221a87fffd0d701000000e6012004d0213ffc94103ffdd204fff0d004ffec1b3f01789a03612c7fffdabb88013ffce4012008e2012004e004bff8e0246000de012000de24600490102001c201200c81c0600688012010|@3641,131071|108,5,@3309 148,5,@3564 208,4,@3609 216,5,@3308 244,4,@3378 252,5,@3380 3641:S43|5452414e535f54414228292e6c6f6164456e74727928352975736543616368655265676973746572283229 3642:C2,752|9e13e002f606201880a1001b8bd02018c4037fd0de213ffcda213ff8d2213ff4d2037fd8d0037fecda00a004f40360009fc6a00088013ff4ee012004ec05ffeca6100008d205fffcd005a00c7ffe8ee40100000080a2200132800009e4012004113f019e900221e4f40620209fc6a0000100000090102001e4012004e204bfdc80a4600132800021a0102001c2022000d8022004d6022008d402200c921020019010000b7fffda140100000080a220012280001aa0102001d200600080a260053280000580a27ff5a01020051080001480a4200132800011a0102001d0006004b8222001811f200026800005c404bfd4a01020051080000a80a42001a018a0041080000780a42001d402200cd6022008d8022004c202200080a42001228000129e102001e6213ffcc2213ff8d8213ff4d6213ff0d4213fece0213fe894102005d204bff0d004bfec1b3f01789a03612c7fffda4788013fe89e1000081080000ae001201ce6213ffcc2213ff8d8213ff4d6213ff0d4213fece0213fe888013fe8e001201cd6043fecd4043ff0d2012014d0043fd84000006a01000000de01201c8c21a00c8b19600cba10200282100006fa21bffcda012014da20600498102009d8206000d403ffec92100001113f0199900221a87fffd03901000000d601200080a2e00122800039d0213ffc9410000892102001d00120087fffd5d90100000080a220012280000bd4213ffcd201201cd0027fecd4213ffcd2022010d00120087fffdb2188013ffc10800004d201202088013ffcd20120208c21a0148b196014ba10200490100006fa21bffcc4012008c422200cee012018ee222008ec012010ec222004ea012014ea22200094100008e8027fe0e6027ffc92100013901000147fffd07001000000e4012020e204bfecd2046010d00120187ffff86f01000000e001202094103ffdd2043ff0d0043fec1b3f01789a03612c7fffd9ed0100000010800004d401201c88013ffcd401201cd2012018d222a000d0012000d022a00490102001c401202481c0a00688012028|@3693,131071|76,5,@608 96,4,@3643 164,5,@3373 328,4,@3378 336,5,@3380 404,5,@3645 460,4,@3609 468,5,@3308 504,5,@3347 544,5,@3384 640,5,@3309 664,5,@3564 688,4,@3378 696,5,@3380 3643:O3|@24,@397,@3644 3644:S24|6c6f6164456e7472793a20656e7472792064656c65746564 3645:C2,1432|9e13e002f606201880a1001b8bd02018d0213ffcd0213ff8a610000fa4100008a21000099210000ad002e00c7ffe8e1d88013ff880a2200132800023a0012000e6213ffce4213ff8e2213ff4d4213ff0d6213fecfa02e028fa213fe892103ffd9010000a7ffe87e588013fe892100008113f019c900223607ffe8670010000008c21a0108b196010ba102003a0100006fa21bffcd02420081f3f000f9e03e3bcde242004033ee008820061fcc224200090100010f40620209fc6a00001000000a0012000d42420009e012000d023e004c201200492102001d00060087fffd5510100000080a2200122800022da00600092100011d00060087fffd54a0100000080a2200122800013e6213ffce6213ffce4213ff8d4213ff4d6213ff0fa02e028fa213fece4213fe89610001194102001d200600890103fe91b3f018c9a0363587fffee1288013fe8108000fc94103ffde4213ff8d4213ff4d6213ff0fa02e028fa213fec88013fec108000f494103ffdd803600080a320093280002380a33ff9ee03600492100011901000177fffd5250100000080a2200122800013e6213ffce6213ffce4213ff8d4213ff4d6213ff0fa02e028fa213fece4213fe896100011941020019210001790103fe91b3f018c9a0363587fffeded88013fe8108000d794103ffde4213ff8d4213ff4d6213ff0fa02e028fa213fec88013fec108000cf94103ffd3280001380a32001e6213ffce4213ff8d4213ff4d6213ff0fa02e028fa213fece4213fe896100011d40360049210200190103fe91b3f019f9a0363c8400000f688013fe8108000bc94103ffd3280002880a32005d204a03cd002600080a2200132800009a0100013c404a004ee00a00080a5e00122800004a010001310800014e6213ffce0213ffce4213ff892100012d003600440000b6788013ff8d4213ffcd6213ff8fa02e028fa213ff4d4012000921000111b3f01a69a0362904000077388013ff41080009c94103ffde4213ff8d4213ff4d6213ff0fa02e028fa213fec88013fec1080009494103ffd3280001280a33ff5e6213ffce4213ff8d4213ff4d6213ff0fa02e028fa213fec9610001294100011d2036004d00360081b3f018b9a0363207fffec7e88013fec1080008294103ffd32800021d2036004d202e030d0026000b8222001b91f200484072001ba10001cbb17401db917401dba102000b91f401cae072001ec036004ba25a001b91f401caa072001e6213ffce4213ff8d4213ff4d6213ff0fa02e028fa213fec961000129410001192102011901000151b3f018b9a0363207fffec5d88013fec1080006194103ffd808a600132800005e6213ffcd002600010800009e6213ffc113f00bc900220f0f40620209fc6a00088013ffc90102001e6213ffce4213ff8d4213ff4d6213ff0fa02e028fa213fecd0213fe8d0213fe4a010000892100010d002e00c7ffe8d2288013fe480a220013280001d9e012000e2213ffc92103ffd901000107ffe86f088013ffc92100008113f019c900223607ffe857b010000008c21a0108b196010ba1020039e100006fa21bffcd023e008033f000f820063bcc223e0041b3ee0089a0361fcda23e0009010000ff40620209fc6a000010000009e012000e023e0009a012000d0236004d8012004d2032000d002600080a23ff53280001a01000000c402e030ee00a000b825e001b91f2004ac072001ba10001cbb17401db917401dba102000b91f401caa072001e8026004ba252001b91f401ca00720019410001292100010901000111b3f01ab9a03602840000b47010000001080000888012008113f01ab90022150f40620209fc6a000010000008801200894103ffdd2012008d00120041b3f01789a03612c7fffd87a01000000de01200080a3e0012280000d90102001d001200c7fffddb801000000d4012004133f01ab92026198de012010353f016fb406a1e881c6a0048801201cc201201081c060068801201c|@3692,131071|44,5,@608 100,5,@509 112,4,@3632 120,5,@496 152,4,@397 164,4,@24 220,5,@3347 248,5,@3347 312,4,@3494 320,5,@3496 396,5,@3347 460,4,@3494 468,5,@3496 568,4,@3646 576,5,@3648 664,5,@3682 696,4,@3659 704,5,@3660 800,4,@3489 808,5,@3490 932,4,@3489 940,5,@3490 980,4,@2144 1048,5,@608 1080,5,@509 1092,4,@3632 1100,5,@496 1132,4,@397 1144,4,@24 1284,4,@3686 1292,5,@3687 1308,4,@3689 1344,4,@3378 1352,5,@3380 1380,5,@3412 1392,4,@3691 1404,4,@3313 3646:O17|@3648,@3656,@3659,@3522,@3526,@3530,@3516,@3517,@3662,@3548,@3495,@3618,@3663,@3489,@3664,@3673,@3647 3647:O6|@3677,@3676,@3517,@3523,@3526,@3530 3648:C2,4272|9e13e002f606201880a1001b8bd02018808a2001228000280100000080a23fcd268000250100000080a220313480002201000000053f01a08400a07aba022031fa00801d81c0801d010000000000084a00000e3a000005aa00000f0a0000063a00000066000000660000008200000c5e0000006600000ace000000660000051a00000192000007b200000066000009ce00000bce00000066000004be0000071a0000039a0000006600000296000008da00000d5ede213ffc113f01a4900220f8f40620209fc6a00088013ffc90102001808aa001228000348c21a00c808aa00122800005de213ffcae10000a10800009b825e001113f002990022348f40620209fc6a00088013ffcae102001b825e001811f3000268000248c21a00c1300000492026001b8226001ba25e001811f401c3680001d8c21a00c808aa00122800005de213ffc9010000a10800009b8222001113f002990022348f40620209fc6a00088013ffc90102001b8222001ba10001cbb17401db917401d84072001b9172004ae072001ec012000941000169210000b90100017da036004f403600081c6a004880120048b19600cba102002ae100006fa21bffcd425e004ac102005ec25e000ea012000941000159210000b90100017da036008f403600081c6a00488012004808aa00122800005de213ffcae10000a10800009de213ffc113f002990022348f40620209fc6a00088013ffcae102001de213ffcda213ff8d6213ff4ee213ff0ac100009d201200090100016da036014f40360009fc6a00088013ff0ea012000b8256001ba10001cbb17401db917401d900720017fffe83e01000000e8012008a6102045e6213ffcd6012010941020719210000890102071da052010f40360009fc6a00088013ffce4012010e2012008fa04a00cfa213ffc92100012d0012004da04600cf40360009fc6a00088013ffc8c21a0088b196008ba102001a0100006fa21bffcde012008de242000c2012000e020600090102001da01201081c3600688012018808aa00122800005de213ffcae10000a10800009de213ffc113f002990022348f40620209fc6a00088013ffcae102001de213ffcda213ff8d6213ff4ee213ff0ac100009d201200090100016da036014f40360009fc6a00088013ff0ea012000b8256001ba10001cbb17401db917401d900720017fffe7fd01000000e8012008a6102049e6213ffcd6012010941020719210000890102071da052010f40360009fc6a00088013ffce4012010e2012008fa04a00cfa213ffc92100012d0012004da04600cf40360009fc6a00088013ffc8c21a0088b196008ba102001a0100006fa21bffcde012008de242000c2012000e020600090102001da01201081c3600688012018808aa00122800005de213ffcae10000a10800009de213ffc113f002990022348f40620209fc6a00088013ffcae102001de213ffcda213ff8d6213ff4ee213ff0ac100009d201200090100016da036014f40360009fc6a00088013ff0ea012000b8256001ba10001cbb17401db917401d900720017fffe7bc01000000e8012008d401201092102075da052018f40360009fc6a00001000000e6012008a4102049e4213ffcd601201094102071133f018f9202602c90102075da04e010f40360009fc6a00088013ffce2012010e0012008fa04600cfa213ffc92100011d0012004da04200cf40360009fc6a00088013ffc8c21a0088b196008ba1020019e100006fa21bffcc2012008c223e000da012000de23600090102001d801201081c3200688012018808aa00122800005de213ffcae10000a10800009da213ffc113f002990022348f40620209fc6a00088013ffcae102001da213ffcd6213ff8d2213ff4de213ff0901000179a013ffc400002ec88013ff0ec01200081c5a00688012014808aa00122800005de213ffcae10000a10800009b825e001113f002990022348f40620209fc6a00088013ffcae102001b825e001ba10001cbb17401db917401d90072001de213ffcda213ff8d2213ff4d6213ff07fffe76488013ff0ec012008ea012010a8103ff9e821201096100015d401200092100008d0012004da05a01cde01200cf403600081c6a00488012010808aa00122800005de213ffcae10000a10800009b825e001113f002990022348f40620209fc6a00088013ffcae102001b825e001ba10001cbb17401db917401d90072001de213ffcda213ff8d2213ff4d6213ff07fffe74088013ff0ec012008ea012010a8102041e821201096100015d401200092100008d0012004da05a01cde01200cf403600081c6a00488012010808aa00122800005de213ffcae10000a10800009b825e001113f002990022348f40620209fc6a00088013ffcae102001b825e001ba10001cbb17401db917401dac072001b9172004aa072001b917200490072001de213ffcda213ff8d2213ff4d6213ff07fffe71888013ff0e8012008d401201092102075da052018f40360009fc6a000010000008c21a00c8b19600cba102002a6100006fa21bffce4012004e424e004a2103ffde224e000e0012008de01201082102041c22120109610000fd40120009210001390102075da04201cde01200cf403600081c6a00488012010808aa00122800005de213ffcae10000a10800009b825e001113f002990022348f40620209fc6a00088013ffcae102001b825e001ba10001cbb17401db917401dac072001b917200490072001de213ffcda213ff8d2213ff4d6213ff07fffe6e288013ff0ea012008e8012010a6103fe1e621201096100014d401200092100008d0012004da05601cde01200cf403600081c6a00488012010808aa00122800005de213ffcae10000a10800009b825e001113f002990022348f40620209fc6a00088013ffcae102001b825e001ba10001cbb17401db917401dac072001b917200490072001de213ffcda213ff8d2213ff4d6213ff07fffe6bc88013ff0ea012008e8012010a6102009e621201096100014d401200092100008d0012004da05601cde01200cf403600081c6a00488012010808aa00122800005de213ffcae10000a10800009b825e001113f002990022348f40620209fc6a00088013ffcae102001b825e001ba10001cbb17401db917401d90072001de213ffcda213ff8d2213ff4d6213ff07fffe69888013ff0ec012008ea012010a810207de821201096100015d401200092100008d0012004da05a01cde01200cf403600081c6a00488012010de213ffcda213ff8d4213ff4d6213ff0ae100009d201200090100017da036014f40360009fc6a00088013ff0ec012004808da0012280000501000000aa1000161080000990100015113f002990022348f40620209fc6a00001000000aa102001901000157fffe67001000000e8012008a6102035e6213ffcd6012010941020719210000890102071da05201cf40360009fc6a00088013ffce4012010e2012008fa04a00cfa213ffc92100012d0012000da04600cf40360009fc6a00088013ffc8c21a0088b196008ba102001a0100006fa21bffcde012004de242000c2012000e020600090102001da01201081c3600688012018808aa00122800005de213ffcae10000a10800009de213ffc113f002990022348f40620209fc6a00088013ffcae102001de213ffcda213ff8d2213ff4d6213ff0901000177fffe63b88013ff0ec012008aa102039ea213ffcd60120109410207592100008d0012004da05a01cf40360009fc6a00088013ffce8012008a6103ff5e6213ffcd601201094102071d205202090102075da05201cf40360009fc6a00088013ffce4012010e2012008fa04a00cfa213ffc92100012d0012000da04600cf40360009fc6a00088013ffc8c21a0088b196008ba102001a0100006fa21bffcde012004de242000c2012000e020600090102001da01201081c3600688012018808aa00122800005de213ffcae10000a10800009de213ffc113f002990022348f40620209fc6a00088013ffcae102001de213ffcda213ff8d2213ff4d6213ff0901000177fffe5fb88013ff0ec012008aa103fc9ea213ffcd60120109410207592100008d0012004da05a01cf40360009fc6a00088013ffce8012008a6103ff5e6213ffcd601201094102071d205202090102075da05201cf40360009fc6a00088013ffce4012010e2012008fa04a00cfa213ffc92100012d0012000da04600cf40360009fc6a00088013ffc8c21a0088b196008ba102001a0100006fa21bffcde012004de242000c2012000e020600090102001da01201081c3600688012018808aa00122800005de213ffcae10000a10800009b825e001113f002990022348f40620209fc6a00088013ffcae102001b825e001ba10001cbb17401db917401d90072001de213ffcda213ff8d2213ff4d6213ff07fffe5b788013ff0ec012008ea012010a8102001e821201096100015d401200092100008d0012004da05a024de01200cf403600081c6a00488012010808aa00122800005de213ffcae10000a10800009de213ffc113f002990022348f40620209fc6a00088013ffcae102001de213ffcda213ff8d2213ff4d6213ff0901000177fffe59788013ff0ec012008aa102021ea213ffcd60120109410207592100008d0012004da05a024f40360009fc6a00088013ffce8012008a6102035e6213ffcd601201094102071d205202890102075da05201cf40360009fc6a00088013ffce4012010e2012008fa04a00cfa213ffc92100012d0012000da04600cf40360009fc6a00088013ffc8c21a0088b196008ba102001a0100006fa21bffcde012004de242000c2012000e020600090102001da01201081c3600688012018de213ffcda213ff8d6213ff4d60120009410207590103ff1da036034f40360009fc6a00088013ff4ee012004ac102035ec213ffcd601200c94102075d205e03090102075da05e01cf40360009fc6a00088013ffcea012004a8102039e8213ffcd601200c94102071d205602c90102075da05601cf40360009fc6a00088013ffce601200ce4012004fa04e00cfa213ffc92100013d0012000da04a00cf40360009fc6a00088013ffc8c21a0088b196008ba102001a2100006fa21bffce0012004e0246000de012000e223e00090102001c201200c81c0600688012014de213ffcda213ff8d2213ff4d6213ff090103ff17fffe52c88013ff0ee012008ac102021ec213ffcd60120109410207592100008d0012004da05e024f40360009fc6a00088013ffcea012008a8102035e8213ffcd601201094102071d205602890102075da05601cf40360009fc6a00088013ffce6012010e4012008fa04e00cfa213ffc92100013d0012000da04a00cf40360009fc6a00088013ffc8c21a0088b196008ba102001a2100006fa21bffce0012004e0246000de012000e223e00090102001c201201081c0600688012018de213ffcda213ff8d2213ff4d6213ff0d6012000153f000f9402a10c92102001d0013ff4da036040f40360009fc6a00088013ff0ee012008d0213ffcd601201094102071d201200490102001da05e034f40360009fc6a00088013ffcec01200caa102035ea213ffcd601201494102071d205a02890102071da05a01cf40360009fc6a00088013ffce801200cd0012014da05203cf40360009fc6a00001000000e601200cd0213ffcd2012014d0012000da04e038f40360009fc6a00088013ffce4012010d40120189210207190102011da04a004f40360009fc6a00001000000e2012010d2012018d0012000da046038f40360009fc6a00001000000e0012018de012010fa04200cfa213ffc92100010d0012008da03e00cf40360009fc6a00088013ffc8c21a0088b196008ba10200182100006fa21bffcda01200cda206000d8012000c223200090102001d601201881c2e00688012020|@3655,131071|52,4,$3648+78 184,4,@3649 244,4,@542 284,4,1024 336,4,@542 504,4,@542 596,5,@3472 764,4,@542 856,5,@3472 1024,4,@542 1116,5,@3472 1172,4,@3501 1316,4,@542 1364,5,@3651 1408,4,@542 1468,5,@3472 1552,4,@542 1612,5,@3472 1696,4,@542 1772,5,@3472 1920,4,@542 1988,5,@3472 2072,4,@542 2140,5,@3472 2224,4,@542 2284,5,@3472 2416,4,@542 2444,5,@3472 2612,4,@542 2656,5,@3472 2868,4,@542 2912,5,@3472 3124,4,@542 3184,5,@3472 3268,4,@542 3312,5,@3472 3740,5,@3472 3948,4,@380 3649:O3|@24,@397,@3650 3650:S32|67656e52493a20556e696d706c656d656e74656420696e737472756374696f6e 3651:C2,600|9e13e002f606201880a1001b8bd02018da213ffc80a220011280000f88013ffcde213ffc901020057fffe48888013ffcc4012004ee00a000d400a004d200bffcda05e018de012000f403600081c6a0048801200880a2200532800013b82220018c21a00c8b19600cba10200284100006fa21bffcee037ff8ee20a004ac103ffdec20a000ea036000d4036004d2037ffc90100002da056018f403600081c6a00488012004811f200036800045c4036000c4036000de213ffcd0213ff8d2036004d0037ff8da00a014f40360009fc6a00088013ff8ee012000b825e001ba102000b91f401cac07200192102071901000169a0120084000006001000000ea012008e8056000d40560049210207590102001da052004f40360009fc6a00001000000e6012008e404e000a2102049e2213ffcd604e00494102071133f018f9202602c90102075da04a010f40360009fc6a00088013ffce0012008de042004c2042000fa043ffcfa213ffcfa03e00cfa213ff89210000fd0013ffcda00600cf40360009fc6a00088013ff88c21a0088b196008ba1020019a100006fa21bffcd8012004d8236000d6012000da22e00090102001d401200c81c2a00688012014de213ffcd0213ff8d2036004d0037ff8da00a014f40360009fc6a00088013ff892102071d00120009a0120084000002301000000ee012008ec05e004ea05e000fa05fffcfa213ffcfa05a00cfa213ff892100016d0013ffcda05600cf40360009fc6a00088013ff88c21a0088b196008ba102001a8100006fa21bffce6012004e6252000e4012000e824a00090102001e201200c81c4600688012014|@3654,131071|40,5,@3472 244,5,@3652 312,4,@3501 488,5,@3652 3652:C2,940|9e13e002f606201880a1001b8bd0201880a220013280000a80a22005d0036000c4022000d402200490102001da00a004f403600081c6a0040100000032800010de213ffc80a2607132800005c40360009010200181c3e00601000000ee00a000d400a004113f018f9002202cda05e018f403600081c6a00401000000da213ff8d0213ff4d2213ff0921020211b0000859a036398f40360009fc6a00088013ff080a2200132800004b82220011080000c84100008811f200026800003841020018410200580a0a0052280000584100008b8222001b91720208407200180a0a01d3280003b92102009c4012004b820a001b9172004ae072001811f200026800003ac102001ac10200580a5a00532800005b825e001aa1000171080000592102009b91f2004aa07200192102009901000151b0000859a036378f40360009fc6a0000100000092102075da0120087fffffae9e13e002e8012008e6052000e404e000a2102045e2213ffcd604e00494102075133f018f920261d090102075da04a010f40360009fc6a00088013ffce0012008de042000c203e0009a102049d801200cda21200cd603e004d4012000133f018f9202602c90102075da0060109e10000cf403600081c6a0048801200cd00120041b0000859a036398f40360009fc6a0000100000080a2200132800004b82220011080000c84100008811f200026800003841020018410200580a0a0052280000584100008b8222001b91720088407200180a0a0053280003ac4012004c4012004b820a001811f200026800003ae102001ae10200580a5e00532800005b820a001ac1000021080000592102009b91f2004ac07200192102009901000161b0000859a036378f40360009fc6a0000100000092102075da0120087fffff5f9e13e002ea012008e8056000e6052000a4102045e4213ffcd605200494102075133f018f920261d090102075da04e010f40360009fc6a00088013ffce2012008e0046000de04200082102045da01200cc221200cd6042004d4012000133f018f9202602c901020759810000dda03e0109e10000cf403600081c6a0048801200cb820a001811f200026800003ae102001ae10200580a5e00532800005b820a001ac1000021080000592102009b91f2004ac07200192102009901000161b0000859a036378f40360009fc6a0000100000092102075da0120087fffff289e13e002ea012008e8056000e6052000a4102045e201200ce421200cd6052004d4012000133f018f920261d090102075da04e0109e100011f403600081c6a0048801200c|@3653,131071|100,4,@3501 140,4,I110 304,4,I109 368,4,@3514 428,4,@3501 464,4,I110 620,4,I109 684,4,@3514 744,4,@3501 840,4,I109 908,4,@3514 3653:S45|5350415243434f4445434f4e5328292e67656e52492835296d756c436f6e737428312967656e4d756c74283229 3654:S35|5350415243434f4445434f4e5328292e67656e52492835296d756c436f6e7374283129 3655:S24|5350415243434f4445434f4e5328292e67656e5249283529 3656:O6|@3657,@3516,@3540,@499,@3432,@3421 3657:C2,576|9e13e002f606201880a1001b8bd02018c402a00cee00a00080a5e00132800004ec05e0001080000baa102001b8226001ba25a001811f401c22800004a810200110800004aa102001e820a000aa10200180a260113280000faa102001de213ffcda213ff8d0213ff4d2213ff0d4213fec9010000ada036014f40360009fc6a00088013fecaa10000810800009e8012008de213ffcda213ff8d0213ff4d2213ff0d4213fec88013fece8012008808d20012280001bd0213ffc273ffff0a604e001b8252001ba24e001811f401c34800014d0213ffc25000010a404a001b824a001ba252001811f401c3680000dd0213ffc901000147fffe29e01000000e201200cd4012000d2012004da046004de012010f403600081c6a00488012014d0213ff892013ff8901000147fffe2fc88013ff890103ff97fffe34a01000000e6012000b824e001811f200036800008a410001323004000a2046001b824e001ba246001b917401ca4072001d401200c921000127fffe37201000000e4012014d2012008da04a010f40360009fc6a00001000000e2012014e0012004de04200080a3fffd32800010c204600cc204600cda00600080a37ffd3280001bd6012008d8042004d6006004b822e001ba232001811f401c32800014d60120081080000f90102001da00600080a360013280000ed6012008d8042004d6006004b822e001ba232001811f401c228000049010200110800005d6012008d401201881c2a0068801201cd401200c92100010d001200cda046008de012018f403600081c6a0048801201c|@3658,131071|184,4,-4096 212,4,4096 244,5,@3472 296,5,@3477 308,5,@3479 336,4,4194304 368,5,@3481 3658:S31|5350415243434f4445434f4e5328292e67656e4c6f6164496d6d6564283329 3659:O3|@3660,@3540,@3432 3660:C2,492|9e13e002f606201880a1001b8bd02018c402a03cee00a00080a5e0013280000aec02a000ee02a004ec05e00080a5a00122800005ec02a0009010200181c3e00601000000ee05a000ea00a00080a5600132800004e802a00410800019de213ffca6102001e6252000de213ffcda213ff8d0213ff4d2213ff0d4213fecec213fe8fa02a010fa213fe4fa02a034fa213fe0c4213fdc9410001592100017d0013fec7ffff4dc88013fdce4012000a2102001e224a0001080000c88012004da213ff8d0213ff4d2213ff0d4213fecec213fe8fa02a010fa213fe4fa02a034fa213fe088013fe0e8012000e6052000b824e001b9172004a4072001e4252000e2012008e00460008c21a00c8b19600cba1020029e100006fa21bffce023e004c2012014c223e000da012004d80360008c21a00c8b19600cba10200296100006fa21bffcd822e004de22e000d6236000d0213ffcd0213ff892013ff8901020057fffe24a88013ff890103ff97fffe29801000000d4012000b822a001811f2000368000089210000a050040008400a001b822a001ba20a001b917401c92072001d40120187fffe2c101000000d2012020c4026008d20120149a100002f40360009fc6a00001000000ee012020d6012014d4012018d2012004d0012018da05e004de012024f403600081c6a00488012028|@3661,131071|160,5,@3624 348,5,@3477 360,5,@3479 388,4,4194304 416,5,@3481 3661:S34|5350415243434f4445434f4e5328292e67656e4c6f6164436f6e7374616e74283329 3662:O2|0,3 3663:O2|0,8 3664:O4|@3666,@3421,@3433,@3665 3665:O4|16,128,0,0 3666:C2,244|9e13e002f606201880a1001b8bd02018d2213ffcda213ff880a220011280000588013ff89010200181c3e00688012008c402600cae102001ee20a000de213ffcd0213ff890100009da036004f40360009fc6a00088013ff8ec01200cea05a004e805600080a520012280000be6012000fa05a03cfa213ffcd00120009a01200c4000002488013ffca610000810800006e4012010fa05a03cfa213ffc88013ffce4012010e204a03ce004600080a4200132800005e0213ffc9e10001310800009c2012000901000139a012010400000eb88013ffc9e10000888012004c2012000de20600090102001da01200881c3600688012014|@3672,131071|128,5,@3667 204,5,@3671 3667:C2,488|9e13e002f606201880a1001b8bd0201880a2200132800005c40360009010200181c3e00601000000ee00a000ec05e000ea022000b8256001ba25a001b91f401ca807200180a5200932800057de213ffcde213ffcda213ff8ea213ff4fa022004fa213ff0d200a008901000157fffdbd688013ff0e6012008e404fffcd204a00c400000610100000080a220012280003a8c21a00ce2012004b8246001b9172004a0072001de012008c203e000d2006008901000107fffdbc401000000da012008d8036000d6032000d4012004d422e000d2037ffca0100008d202600890100010400000700100000080a22001328000169e102001c2012008da006000d4036000d202a000da213ffcd2213ff8d4036008901000107fffdcd288013ff8d0012004c4012000b820a001b9172004ae072001ec022000ee25a0009e10200110800006de012010d0213ffcd0213ff888013ff8de012010c203e000da00600498102001d8236000d0012008d601201481c2e006880120188b19600cba102002a2100006fa21bffce0012000e0246004de012004de24600090100011c201200c81c0600688012010da213ff8ea213ff4d00220047fffff9488013ff48c21a00c8b19600cba102002a6100006fa21bffcd024e004e4012000e424e00090100013e201200881c460068801200c|@3670,131071|108,5,@3436 128,5,@3668 180,5,@3436 224,5,@3669 276,5,@3444 3668:C2,128|9e13e002c4026000ee02200080a080173280001a90102001ec026004ea02200480a580153280001390102001e8026008e602200880a500133280000c90102001e402600ce202200c80a4801132800005901020019010200581c3e0060100000081c3e0060100000081c3e0060100000081c3e0060100000081c3e00601000000|@3443,130691| 3669:C2,128|9e13e002c4026000ee02200080a080173280001a90102001ec026004ea02200480a580153280001390102001e8026008e602200880a500133280000c90102001e402600ce202200c80a4801132800005901020019010200581c3e0060100000081c3e0060100000081c3e0060100000081c3e0060100000081c3e00601000000|@3443,130691| 3670:S36|5350415243434f4445434f4e5328292e6669787570283229636865636b4c616273283129 3671:C2,112|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffcd0037fec81c3e00601000000da213ff8fa022000fa213ff4d00220047ffffff288013ff48c21a00c8b19600cba1020029e100006fa21bffcd023e004da012000da23e0009010000fde01200881c3e0068801200c|@1966,161| 3672:S24|5350415243434f4445434f4e5328292e6669787570283229 3673:O5|@3674,@3433,@3665,@3432,@3620 3674:C2,528|9e13e002f606201880a1001b8bd02018c402203cee00a00080a5e0013280000aec022030ee022004ec05e00080a5a00122800005ec0220309010200181c3e00601000000ee05a00080a5e00132800048de213ffcee022004ea05e00080a5600122800005e8022000e800a00010800035de213ffcea052000de213ffcda213ff8d0213ff4ea213ff0d402200892100015d00360087fffdbe788013ff0e8012004e6012000b824e001b9172004a4072001e2052000e4246000e0012008de046000de213ffcd40520089210000fd00420047fffdbd888013ffcc2012008da012000b8236001b917200498072001d6006000d822e000d400600492102005d222a000d002e000b8222001b9173ff884072001ee00603cec05e0008c21a00c8b19600cba102002aa100006fa21bffcec256004c4256000a81000151080000588012008d0213ff8d0213ff488013ff4e6012000e404e03ca2102001e224a00090100014e001200881c420068801200cda213ff8d0213ff4da036010f40360009fc6a00088013ff4ec012004d0213ffcd2012000d005a008da05a00cf40360009fc6a00088013ffcea012008d2012004d0012000da05600cf40360009fc6a00001000000e8012004e6052004a4102005e424e000e2052000e0046000b8242001b9173ff89e0720018c21a00c8b19600cba10200290100006fa21bffc82102001c2222004de222000da01200c81c3600688012010|@3675,131071|148,5,@3444 208,5,@3444 3675:S38|5350415243434f4445434f4e5328292e756e636f6e646974696f6e616c4272616e6368283129 3676:O4|@3679,@3432,@3433,@3620 3677:C2,788|9e13e002f606201880a1001b8bd02018c402a00080a0a0053280001580a0bffdde213ffcda213ff8d6213ff4ae103ff1ee213ff094102001d203600cda036008f40360009fc6a00088013ff0ec012004d201200090102025da05a004de012008f403600081c6a0048801200c32800015808a6001de213ffcda213ff8d6213ff4ae103ff1ee213ff094102001d203600cda036008f40360009fc6a00088013ff0ec012004d201200090102005da05a004de012008f403600081c6a0048801200c22800005de213ffcae1000091080000b80a0bff9ae100008113f002990022348f40620209fc6a00088013ffcac100017ae10200180a0bff932800032ea02a000b825e001ba10001cbb17401db917401dac072001aa100008b917200490072001de213ffcda213ff8ea213ff4d4213ff0d6213fec7fffdf6188013fece801200ca6102041e6213ffcd60120009410200192100008d0012008da052008f40360009fc6a00088013ffce4012004e004a00080a43ff93280000501000000e204a00410800009de01200c113f003890022020f40620209fc6a00001000000a2102001de01200cd201200090100011da03e004de012010f403600081c6a0048801201480a5600132800005de213ffcec02a0041080000a80a5a005a8100008113f003890022020f40620209fc6a00088013ffcac10200180a5a00522800006b825e00180a5a0253280001ede213ffcb825e001ba10001cbb17401db917401da8072001a6100008b917200490072001de213ffcda213ff8e6213ff4d6213ff0ec213fec7fffdf1e88013fece401200ca2102041e2213ffcd60120049410200192100008d0012008da04a008f40360009fc6a00088013ffc10800021e201200cda213ff8d0213ff4d6213ff0ec213fecee213fe89210000bda036014f40360009fc6a00088013fe8e8012000b8252001ba10001cbb17401db917401d900720017fffdeff01000000e6012010a4102049e4213ffcd6012008941020019210000890102071da04e010f40360009fc6a00088013ffc88012004e201200cd2012004d0012000da046004de012010f403600081c6a00488012014|@3678,131071|216,4,@542 308,5,@3472 392,4,@1110 476,4,@1110 576,5,@3472 700,5,@3472 3678:S37|5350415243434f4445434f4e5328292e636f6d70617265416e644272616e63685249283429 3679:C2,324|9e13e002f606201880a1001b8bd02018c402603cee00a00080a5e0013280000aec02600cee026004ec05e00080a5a00122800005ec02600c9010200181c3e00601000000ae102001ee25a000de213ffcda213ff8d0213ff4d2213ff090100009da03600cf40360009fc6a00088013ff0ec012008a0100008d205a00890100010400000380100000080a2200122800006de012004c2012004b8206001b91720409e0720018210000f901020017fffdf670100000094100001921020017fffdf9a01000000da012008e0213ffcd2012000da036004f40360009fc6a00088013ffcd801200cd2012004d0012000da032004f40360009fc6a00001000000d6012004d402e000d202a000b8226001b9173ff890072001841000088c21a00c8b19600cba10200290100006fa21bffcae102001ee222004c4222000ec01201081c5a00688012014|@3681,131071|128,5,@3680 172,5,@3479 188,5,@3481 3680:C2,128|9e13e002c4026000ee02200080a080173280001a90102001ec026004ea02200480a580153280001390102001e8026008e602200880a500133280000c90102001e402600ce202200c80a4801132800005901020019010200581c3e0060100000081c3e0060100000081c3e0060100000081c3e0060100000081c3e00601000000|@3443,130691| 3681:S33|5350415243434f4445434f4e5328292e707574436f6e646974696f6e616c283229 3682:C2,364|9e13e002c402201cee00a000d0213ffcd0213ff8808de0011280001788013ff8d205e000ec026000e805a00080a520013280000aea05a004de213ffc113f01aa900223d0f40620209fc6a00088013ffcaa102001ea05a004a6012000a4102005e424e000a6012000ea24e00410800033de213ffcec02202cea05a000de213ffcd0213ff8d2213ff4ea213ff088013ff080a5600132800005e6012004a81020011080000f80a52001e4056000de04e01cd204a01c80a3c00932800005ea056004a81020051080000680a52001f606201880a1001b8bd0201830bfffee22800004d00120081080000ea80120108c21a00c8b19600cba10200284100006fa21bffcee012000ee20a004ec012004ec20a000ea02202cc4256000a8012010a6102001e6252000a4012010de012008de24a004108000038801200c88013ffc8c21a00c8b19600cba10200290100006fa21bffce4012004e4222000de012008de222004d201200081c260068801200c|@3685,130179|60,4,@3683 3683:O3|@24,@397,@3684 3684:S28|63736567416464723a206e6f74206120636f6465207365676d656e74 3685:S28|5350415243434f4445434f4e5328292e636f6465436f6e7374283229 3686:O4|@3687,@3540,@3432,@3425 3687:C2,204|9e13e002f606201880a1001b8bd02018d0213ffcd0213ff8de213ff4da213ff0d0213fecd4213fe88410000992013ff890100002da03600cf40360009fc6a00088013fe8ee01201080a5e001328000040100000010800015ec01200880a5e00132800004ec01200810800010ec012008fa05e004fa213ffcd2012000d005e000da05a008f40360009fc6a00088013ffcee01200088012004f606201880a1001b8bd0201830bfffeed6012000d4012004d201201490102011da05a004de01200cf403600081c6a00488012018|@3688,131071| 3688:S33|5350415243434f4445434f4e5328292e67656e537461636b4f6666736574283329 3689:O3|@24,@397,@3690 3690:S48|6c6f616450737461636b456e7472793a20636f6e7461696e657220656e747279206973206e6f74206f6e20737461636b 3691:S15|6c6f616450737461636b456e747279 3692:S30|5452414e535f54414228292e6c6f616450737461636b456e747279283429 3693:S41|5452414e535f54414228292e6c6f6164456e7472792835297573654e65775265676973746572283229 3694:S24|5452414e535f54414228292e6c6f6164456e747279283529 3695:C2,592|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d0213ff4d2213ff0fa022028fa213fecc6213fe8053f01ac8400a01ac4213fe4ae102001ee213fe086013fe092102001d00220107fffe87588013fe0ac10000892102001901000167fffc86a0100000080a22001228000058c21a00caa10001610800049d601200c8b19600cba102002aa100006fa21bffc293f01aca8052098e8256000e6012014e6256004ea213ffc9410001392102001901000157fffcf7288013ffce401201892102001d004a0107fffe85601000000a210000892102001901000117fffc84b0100000080a2200122800005e001201caa1000111080002988012004de012018de213ffcd601201494102001133f01ac9202618490102001da042004f40360009fc6a00088013ffcd401201892102001d00120007fffcf5201000000c201201892102001d00060107fffe8360100000098100008921020019010000c7fffc82b0100000080a220012280000501000000aa10000c1080000988012004113f01ac900221dcf40620209fc6a00001000000aa10200188012004d601200c80a2e0012280000dea213ffcea213ffcd00120107fffd19f88013ffcd4012018133f01ac920262087fffc37e0100000010800004d001200088013ffcd0012000c601200cd401202081c2a00688012024d202200080a260053280000ad0213ffc84100008113f00059002201cf40620209fc6a0000100000090102001d0213ffcd00120047fffd18388013ffcd401200c133f01ac920262087fffc36201000000d0012000f40620209fc6a0000100000090102001|@3704,131071|44,4,$3695+494 76,5,@3554 96,5,@3347 144,4,@3696 180,5,@3401 200,5,@3554 220,5,@3347 268,4,@3698 308,5,@3401 328,5,@3554 348,5,@3347 380,4,@3701 432,5,@3412 444,4,@3703 452,5,@3313 512,4,@227 544,5,@3412 556,4,@3703 564,5,@3313 3696:C2,148|9e13e002f606201880a1001b8bd02018d0036004de213ffcfa022010fa213ff892102001d0013ff87fffe7e388013ff8ae10000892102001901000177fffc7d80100000080a220012280000aac102001ee213ffcd2012000901000177fffcd2288013ffcac1000081080000592102001ee213ffc88013ffc92102001d0012000de012008353f0177b406a3cc81c6a0048801200c|@3697,131071|40,5,@3554 60,5,@3347 92,5,@3384 132,4,@3373 3697:S52|5452414e535f54414228292e676574416e795265676973746572283229722d756e74696c536f6d657468696e6746726565283129 3698:O1|@3699 3699:C2,16|9e13e0029010200581c3e00601000000|@3700,129| 3700:S25|5452414e535f54414228292e70757368416c6c283229283129 3701:O3|@24,@397,@3702 3702:S17|4e6f206672656520726567697374657273 3703:S14|676574416e795265676973746572 3704:S29|5452414e535f54414228292e676574416e795265676973746572283229 3705:C2,40|9e13e002c4022014ae102005ee20a000ee022000ac102005ec25e0009010200181c3e00601000000|@3706,114817| 3706:S22|5452414e535f54414228292e65786974696e67283129 3707:S27|475f434f444528292e636f646567656e2831302965786974283129 3708:C2,284|9e13e002f606201880a1001b8bd02018808aa00132800012de213ffcde213ffcda213ff8d0213ff4d2213ff0fa02a000fa213fecd4013fecd2036008d00360041b3f017a9a0361d07fffcdb588013fecc40120001080000fee01200cda213ff8d0213ff4d2213ff0d2036008d00360041b3f019c9a0360647ffffeb988013ff084100008d0213ffc88013ffcee01200cc4213ffcd605e00894100002d2012004d00120081b3f01ad9a0360084000002f88013ffcec0120108c21a00c8b19600cba102002aa100006fa21bffce8012000e8256004a6102009e6256000d405a00492100015113f0199900221a87fffc17501000000e4012010a2100008d2012000d004a0044000026a0100000090100011e001201481c4200688012018|@3723,131071|64,4,@3393 72,5,@3395 112,4,@3630 120,5,@3695 164,4,@3709 172,5,@3711 228,4,@3609 236,5,@3308 260,5,@3721 3709:O8|@3711,@3424,@3516,@3716,@3526,@3517,@3432,@3710 3710:O2|@3719,@499 3711:C2,488|9e13e002f606201880a1001b8bd02018b8222001811f200436800004010000001080000bde213ffc050100008400a001b8222001ba20a001811f401c24800004de213ffc10800009b8222001113f01ad9002223cf40620209fc6a00088013ffc90102001b8222001b917200484072001ba10001cbb17401db917401dae072001d0213ffcd0213ff8de213ff4da213ff0d0213fecd2213fe8d4213fe4d6213fe092013ff890100017da03601cf40360009fc6a00088013fe0ec01201880a5a001328000040100000010800015ea01201080a5a00132800004ea01201010800010ea012010fa05a004fa213ffcd2012000d005a000da056018f40360009fc6a00088013ffcec01200088012004f606201880a1001b8bd0201830bfffeea8103fc5e8213ffcd601200094102019d201201c90102019da056014f40360009fc6a00088013ffce6012010a4102049e4213ffcd601200094102015d201201c90102015da04e010f40360009fc6a00088013ffce2012010d601200094102075d201200cd0012008da04600cf40360009fc6a00001000000e0012010d4012000d2012004113f01ad9002226cda042008f40360009fc6a00001000000de01201082103fd5c221201cd60120009410201992103ff190102075da03e004de012014f403600081c6a0048801201c|@3715,131071|40,4,16777216 76,4,@3712 416,4,@3714 3712:O3|@24,@397,@3713 3713:S22|616c6c6f6353746f72653a20626164206c656e677468 3714:O2|-1,6 3715:S29|5350415243434f4445434f4e5328292e616c6c6f6353746f7265283429 3716:O6|@3717,@3516,@3540,@499,@3432,@3421 3717:C2,848|9e13e002f606201880a1001b8bd02018c402e00cee00a00080a5e00132800004ec05e0001080000baa102001b822a001ba25a001811f401c22800004a810200110800004aa102001e820a000aa10200180a2a01132800010aa102001de213ffcda213ff8d0213ff4d2213ff0d4213fecd6213fe89010000bda036014f40360009fc6a00088013fe8aa1000081080000ae801200cde213ffcda213ff8d0213ff4d2213ff0d4213fecd6213fe888013fe8e801200c80a520013280001f01000000e6012008808ce0012280001b01000000253ffff0a404a001b824e001ba24a001811f401c348000140100000023000010a2046001b8246001ba24e001811f401c3680000d01000000901000137fffdaec01000000e0012010d4012000d2012004da042004de012014f403600081c6a004880120181300004092026001901000141b0000859a036358f40360009fc6a00001000000e6012008b824e001811f200026800003a4102001a410200580a4a00532800005b824e001a210001310800005d0213ffcb91f2ffca2072001d0213ffc1300000492026001901000111b0000859a036378f40360009fc6a00088013ffce0012000b8222001ba242001b917401c9e072001de213ffc1300000492026001d001200c1b0000859a036398f40360009fc6a00088013ffc80a2200132800004b82220011080000f01000000811f200026800003821020018210200580a0600522800008010000000300000482006001b8206001ba222001b917401c900720017fffdaa3010000009810000890103ff97fffdb5b01000000d6012000b822e001811f2000368000089410000b1300400092026001b822e001ba226001b917401c940720019210000ad401200c7fffdb8301000000c4012018d8213ffcd2012008da00a010f40360009fc6a00088013ffcee01201cec012000ea05a00080a57ffd32800010e805e00ce805e00ce605200080a4fffd3280001bd601200ce405a004e2052004b8246001ba24a001811f401c32800014d601200c1080000f90102001e605200080a4e0013280000ed601200ce405a004e2052004b8246001ba24a001811f401c228000049010200110800005d601200ce001202081c4200688012024d401201092100016d0012010da05e008de012020f403600081c6a00488012024|@3718,131071|208,4,-4096 236,4,4096 268,5,@3472 308,4,16384 320,4,I108 400,4,1024 412,4,I109 456,4,1024 468,4,I110 536,4,1024 560,5,@3472 576,5,@3479 604,4,4194304 636,5,@3481 3718:S41|5350415243434f4445434f4e5328292e67656e4c6f61644c656e677468576f7264496d6d6564283429 3719:C2,732|9e13e002f606201880a1001b8bd02018808a20012280001cd0213ffc053ffff08400a001b8222001ba20a001811f401c34800015d0213ffc050000108400a001b820a001ba222001811f401c3680000ed0213ffcde213ffcd2213ff87fffda3088013ff8ee012000ac102001ec25e000d025e00490102001ea01200481c5600688012008d0213ff8de213ff4da213ff0d2213fec92013ff87fffda8c88013fecd0213ffcd0213ff8c4012004ee012010ec05e00080a5bffd1280001088013ff8ea00a004e805600080a53ffd3280003190103ff9e605e004e4056004b824a001ba24e001811f401c3280002a90103ff91080001090103ff9ea00a004e805600080a520013280002390103ff9e605e004e4056004b824a001ba24e001811f401c2280000490103ff91080001a90103ff97fffdab701000000e2012014b8246001811f200036800008a01000111f0040009e03e001b8246001ba23e001b917401ca007200194102075921000107fffdadf01000000a0012000d02420009e01200082102001c223e004108000448c21a00c7fffda9f01000000e2012014b8246001811f200036800008a01000111f0040009e03e001b8246001ba23e001b917401ca007200194102075921000107fffdac701000000a0100008901020017fffdb1b01000000de012018da03e00080a37ffd32800005d803e004c203e0041080001392102075b8232001811f2000368000089610000c150000209402a001b8232001ba22a001b917401c96072001150000209402a001b822a001ba22e001b917401c8207200192102075d2213ffc961000019410207592100008901020097fffd30188013ffc8c21a00c8b19600cba10200284100006fa21bffcae102001ee20a004d020a000ac012000e025a000aa012000c42560048c21a00c8b19600cba102002a8100006fa21bffce6012000e6252000e4012004e4252004e2012008e8246000213f018fa00421d0e024600490102001de01201081c3e0068801201c|@3720,131071|28,4,-4096 56,4,4096 92,5,@3472 152,5,@3477 304,5,@3479 332,4,4194304 364,5,@3481 400,5,@3479 428,4,4194304 460,5,@3481 476,5,@3483 532,4,8192 556,4,8192 604,5,@3429 704,4,@3514 3720:S32|5350415243434f4445434f4e5328292e696d6d6564436f646544617461283229 3721:C2,16|9e13e0029010200181c3e00601000000|@3722,131| 3722:S28|5452414e535f54414228292e636f6e7461696e734c6f63616c283229 3723:S33|475f434f444528292e636f646567656e2831302963616c6c676574766563283329 3724:C2,300|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d0213ff4d2213ff09410200592100008d00360041b3f01789a03612c7fffc8c688013ff0c4012008d0213ffcd0213ff8ae013ff8ee213ff496102001d4012004d200a004d000a0081b3f019c9a0360587fffec8488013ff4ec012010ea01200880a560013280000efa05a008a8103fd1e8213ffcd605a008d401200092103ff1901020011b3f01809a0362247fffd0ea88013ffc10800016e6012010fa213ffcd4013ffc92102075901000151b3f01a59a0363f07ffff65288013ffca8103fd1e8213ffcd6012000d401200492103ff1901020751b3f01809a0362247fffd0d688013ffc88012004e601201094103ffdd2012004d004e0041b3f01789a03612cde012014353f0178b406a14481c6a00488012018|@3725,131071|44,4,@3378 52,5,@3380 96,4,@3629 104,5,@3631 156,4,@3424 164,5,@3426 196,4,@3656 204,5,@3657 236,4,@3424 244,5,@3426 272,4,@3378 284,4,@3380 3725:S34|475f434f444528292e636f646567656e283130296c6f636b5365676d656e74283229 3726:C2,624|9e13e002f606201880a1001b8bd0201880a26001228000628c21a010b8222001811f200036800044a610000fd403600cb8222001ba22a001b917401c92072001811f201036800030b8222001b8226001811f200036800004d00360081080000ade213ffcc4022000b820a001ba226001811f401c36800004de213ffc10800009b8226001113f0004900223d0f40620209fc6a00088013ffc90102001b8226001b917200484072001d202001c9010000980a2e00122800004de213ffc1080000cde213ffcd0213ff89410200592100008d00360041b3f01789a03612c7fffc83f88013ff810800005d0012000d0213ff888013ff8d0012000c401200481c0a00688012008ba10001cbb17401db917401dba102000b91f401c8407200192100002d0036004353f01b0b406a1f881c6a00401000000a410000d92100008d004a004400000db0100000080a2e00122800004e6213ffc1080000ce6213ffcd0213ff89410200592100008d004a0041b3f01789a03612c7fffc81988013ff810800005d0012000d0213ff888013ff8d0012000e201200481c46006880120088b196010ba10200384100006fa21bffc2f3f01b1ae05e07cee20a000ec036004ec20a008ea036010ea20a004a81000088c21a0148b196014ba10200490100006fa21bffce6036018e622200cec222008c4222004e8222000de213ffcda213ff8d6213ff4da03601cf40360009fc6a00088013ff4e401200080a4a00122800011d0213ffce2012004e004601480a420013280000cd0213ffcd0213ffc94103ffdd2046010d00460041b3f01789a03612c7fffc7e388013ffc10800004d001200088013ffcd0012000e201200c81c4600688012010|@3736,131071|132,4,@224 212,4,@3378 220,5,@3380 292,4,@3727 320,5,@3732 364,4,@3378 372,5,@3380 428,4,@3734 580,4,@3378 588,5,@3380 3727:C2,56|9e13e002f606201880a1001b8bd02018d2213ffcd0213ff8de213ff4901020019a013ffc4000000c88013ff4c401200081c0a0068801200c|@3731,131071|36,5,@3728 3728:C2,336|9e13e002f606201880a1001b8bd02018c4037ffcee00a01cec05e000b825a001ba222001811f401c26800013a610000f8c21a00c8b19600cba10200290100006fa21bffcec036000ec222004aa103ff5ea2220009410000292100008113f01b0900223b8353f016eb406a19081c6a00401000000a410000da210000892100011d000a00c7ffe7bf901000000808a200132800029b8246001e0022000de04200080a3fff53280001db8246001c2042004da04a000b8236001ba206001811f401c3280000fb8246001e6213ffce2213ff89410200592100011d004bffc1b3f01789a03612c7fffc78588013ff8d0012000d801200481c3200688012008b9172004980720019010000c9a1000129e10001310bfffbef6062018b917200482072001901000019a1000129e10001310bfffb7f6062018b9172004a0072001901000109a1000129e10001310bfffb0f6062018|@3730,131071|92,4,@3729 100,4,@3308 132,5,@608 220,4,@3378 228,5,@3380 3729:S9|70757368537461636b 3730:S33|5452414e535f54414228292e70757368537461636b283229736561726368283129 3731:S24|5452414e535f54414228292e70757368537461636b283229 3732:C2,36|9e13e002f606201880a1001b8bd02018d0022020353f002cb406a2b481c6a00401000000|@3733,127139|20,4,@608 3733:S27|5452414e535f54414228292e70737461636b466f72446563283229 3734:C2,72|9e13e002f606201880a1001b8bd02018de213ffcda213ff894102005d2036004d00360081b3f01789a03612c7fffc72788013ff8c4012000d000a004ee01200481c5e00688012008|@3735,131071|36,4,@3378 44,5,@3380 3735:S37|475f434f444528292e636f646567656e283130296c6f63616464722834296465632d283129 3736:S30|475f434f444528292e636f646567656e283130296c6f6361646472283429 3737:C2,88|9e13e002841000088c21a0208b196020ba10200790100006fa21bffc2f3f01b1ae05e1acee222000ee036010ee222018ec03600cec222014d2222010d2036008d222200cea036004ea222008c422200481c3e00601000000|@3744,123043|28,4,@3738 3738:C2,280|9e13e002f606201880a1001b8bd02018d0213ffcd0213ff8de213ff4da213ff0d0213fec9410200192102101901020151b0000829a036338f40360009fc6a00088013fec84102011c42220008c21a00c8b19600cba102002ae100006fa21bffcd025e004ac103ffdec25e0008c21a0088b1960083b100000ba076001aa100006fa21bffcee256000a801200cea252000a601200ca4102001e424e0048c21a00c8b19600cba102002a2100006fa21bffce001200ce0246000de012010de246004e2213ffcc2012004da00600488013ffc80a3600132800006fa03600490102001d801200c81c3200688012018fa213ffcd00360009a0120144000000f88013ffcda01200088012004f606201880a1001b8bd0201830bfffef|@3743,131071|48,4,I11 248,5,@3739 3739:C2,1488|9e13e002f606201880a1001b8bd02018c40220008088a001228000220100000080a0bfdd2680001f0100000080a0a0293480001c010000002f3f01b1ae05e332ba00a021fa05c01d81c5c01d01000000000004a6000003ce0000004e0000042600000096000002720000004e0000004e00000366000000660000004e0000004e0000004e0000020a0000004e000002aa0000004e0000005a000002b60000030e9010200181c3e006010000009010200181c3e00601000000de213ffcda213ff8fa022008fa213ff4d00220047fffffcd88013ff4d0012000da012004de01200810bfffc98801200cc402200880a0a0053280004cee037ff4ee022004b825e001811f20003680002ea610000fec037ff4ea05a00cb825e001ba256001b917401ca8072001811f20103680002390102001e602201080a4e0012280001f90102001b8252001811f200036800004e405a0081080000ade213ffce204a000b8246001ba252001811f401c36800004de213ffc10800009b8252001113f0004900223d0f40620209fc6a00088013ffc90102001b8252001b9172004a0072001c204801c90100001da037ff0f403600081c6a0040100000081c3e00601000000a410000da2100017e002201092100011d004bfec7ffe7a810100000080a220013280000f9010200180a420012280000c90102001de04bff492100011d003e0107ffffecf01000000da04bff09e100013f403600081c6a0040100000081c4e00601000000ec05e01880a5a0013280000b90102001ea02201080a560012280000790102001d005e014da037ff0f403600081c6a0040100000081c3e00601000000de213ffcda213ff8fa022004fa213ff4d00220087fffff6488013ff4ec01200080a5a00132800006fa05a00490102001ea01200881c560068801200cfa213ffcd005a000da0120047fffff5788013ffcec01200088012004f606201880a1001b8bd0201830bfffefde213ffcda213ff8fa022008fa213ff494102005d2022004d0037fec7fffbc5688013ff4d0012000da012004de01200810bfff448801200cd002200410bfff42f6062018de213ffcda213ff8ec02200488013ff880a5a00132800006fa05a00490102001ea01200481c5600688012008fa213ffcd005a000da0120007fffff3088013ffcec01200088012004f606201880a1001b8bd0201830bfffefde213ffcda213ff8ec02200488013ff880a5a00132800006fa05a00490102001ea01200481c5600688012008fa213ffcd005a000da0120007fffff1a88013ffcec01200088012004f606201880a1001b8bd0201830bfffefde213ffcda213ff8fa022004fa213ff4ec02200888013ff480a5a00132800004fa05a0041080000dd0012000fa213ffcd005a000da0120047fffff0488013ffcec01200088012004f606201880a1001b8bd0201830bffff1da012004de01200810bffefb8801200cde213ffcda213ff8ec02200488013ff880a5a00132800006fa05a00490102001ea01200481c5600688012008fa213ffcd005a000da0120007ffffeea88013ffcec01200088012004f606201880a1001b8bd0201830bfffefde213ffcda213ff8fa022004fa213ff4fa022008fa213ff0ec02200c88013ff080a5a00132800004fa05a0041080000dd0012004fa213ffcd005a000da0120087ffffed288013ffcec01200088012004f606201880a1001b8bd0201830bffff1da0120087ffffeca9e13e002d0012000da012008de01200c10bffec588012010de213ffcda213ff8fa022004fa213ff4ec013ff488013ff480a5a00132800004ea05a0001080001bea012000e805600080a53ff13280000c01000000e6012004fa05a004fa213ffc94102005d2056004d004ffec7fffbbbb88013ffc10800008ec012000113f01b3900220ccf40620209fc6a00001000000ec01200088012004f606201880a1001b8bd0201830bfffe380a5600132800006fa05600490102001e801200881c520068801200cfa213ffcd0056000da0120047ffffe9488013ffcea01200088012004f606201880a1001b8bd0201830bfffef|@3742,131071|56,4,$3739+82 376,4,@224 464,5,@608 508,5,@3732 736,5,@3309 1356,5,@3309 1372,4,@3740 3740:O3|@24,@397,@3741 3741:S22|4d757475616c446563733a206e6f74204465636c6172 3742:S47|475f434f444528292e636f646567656e283130296964656e746966794c6f6164732832292831296c6f616473283129 3743:S39|475f434f444528292e636f646567656e283130296964656e746966794c6f616473283229283129 3744:S36|475f434f444528292e636f646567656e283130296964656e746966794c6f616473283229 3745:C2,6500|9e13e002f606201880a1001b8bd0201880a2a001328000038410200184102005ae18a004c40220008088a001228000250100000080a0bfd5268000220100000080a0a02d3480001f010000002d3f01b3ac05a1f6ba00a029fa05801d81c5801d010000000000149a00000b1e000012fe000008de0000066a00000cda000005260000041e000006ba000017be0000078e000000e6000011ba0000071a0000145a000003e20000005a000005aa00001156000000760000075e0000136a000016f6de213ffc113f01b990022310f40620209fc6a00088013ffcac102001de213ffcda213ff8ee213ff490102001da012004f40360009fc6a00088013ff4ea01200080a5600122800614ac102001e8012004d4052004133f01b992026350113f01b99002235c7fffbab7010000008c21a0088b196008ba102001ac100006fa21bffcd025a0001080060590100016a610000fa410000de2022004e0022008d004a004400006200100000082100008d004a0044000061c010000008c21a0088b1960083b100000ba0760019a100006fa21bffc98102001d82360008c21a0148b196014ba10200492100006fa21bffc053f01ba8400a00cc4226000ee04a004ee22600cec04a008ec226008da226004e6213ffce4213ff8d6213ff4e2213ff0e0213fecc2213fe8d0213fe4da213fe0d2213fdcaa10000a9410000b9210001590100017400007dc88013fdce801201cd0213ffce6012024e6213ff8d6012000d401201892100008d0012014da05200cf40360009fc6a00088013ff8e401201c80a4a00132800013a0100008e2012020a0100008d0046004400008830100000080a220013280000c9e102001e0213ffc90102001da046010f40360009fc6a00088013ffc9e10000810800006e20120249e102001e0213ffc88013ffce2012024e0046004de042014c203e00080a0600122800005e0213ffc9a1020011080001fee01200cfa046008fa213ff8d2013ff8901000104000062e88013ff8da012004d803601496102005d6232000d0213ffcd00120001b3f01a89a0362387ffff47288013ffc8c21a0108b196010ba10200394100006fa21bffcd201200cd222a008c4012000c422a004d022a0009a10000a8801200cee01200cec05e000ea012024da213ffcfa056004fa213ff8fa056008fa213ff4a810200188013ff480a5a00132800005fa05a004a610001410800014e4012004fa213ffce401201ce4213ff896100014d4012000d2012004d005a0001b3f01bc9a0362204000084a88013ff8a8100008ec01200088012004f606201880a1001b8bd0201830bfffe9e201201ce004a008de046004de242000c2012030da012038da213ffcd601203cd401202cd2012010d0012024da00600cf40360009fc6a00088013ffcd8012030fa032004fa213ffcd6012020d6213ff896100008d4032008d2013ffcd00120081b3f01bc9a0362204000082788013ff8d4012000d2012024c402a008ee026004ee20a000ac1000081080054588012030de213ffcd6213ff8ea012004ea213ff49610000a94100009d2022004d0022008da036014f40360009fc6a00088013ff4ac10000810800527d0213ffcde213ffcda213ff8fa022004fa213ff4fa022008fa213ff0fa02200cfa213fecea012004ea213fe8a8102001e8213fe496103ffd94103ffd92102005d0013ff07ffffecf88013fe4808a20013280000501000000e602200010800009e4012004113f01cb900220b8f40620209fc6a00001000000a6102001e4012004e004a00080a43fe532800008a2102001de04a004c203e01c80a0600132800003a2102001a2102005de01200cc201200080a06001328000039a1020019a102005981b6004e6213ffcd8213ff8e2213ff4d601200894100013d203e008d003e0044000167e88013ff48c21a0088b196008ba102001ac100006fa21bffcd6012000d625a000108004e488012014de213ffcda213ff8ee213ff4d6022010d402200cd2022008d0022004da036018f40360009fc6a00088013ff4ea01200080a560012280000ae80120048c21a0088b196008ba102001ac100006fa21bffcd025a000108004c9d0213ffc94103ffd92100008d00520041b3f01789a03612c7fffc36e01000000ac102001108004bfd0213ffcea022008b8256001ba10001cbb17401db917401da8072001de213ffcda213ff8e8213ff4e6012004e6213ff0a4102001e4213fec96103ffd94103ffd92102005d00220047ffffe6b88013fec808a20013280000501000000e202200010800009e0012004113f01cb900220b8f40620209fc6a00001000000a2102001e0012004d6042004d404200892100011d00120001b3f01cb9a0362c4400016a6010000008c21a0088b196008ba102001ac100006fa21bffcd025a0001080048fd0213ffcde213ffcea012004ea213ff89610000a94102005133f01cd920262dcd0022004da03601cf40360009fc6a00088013ff88c21a0088b196008ba102001ac100006fa21bffcd025a00010800478d0213ffc8c21a00c8b19600cba102002aa100006fa21bffce8022004e8256004a6103ff9e6256000de213ffcd403600492100015113f01b99002235c7fffb92a88013ffc8c21a0088b196008ba102001ac100006fa21bffcd025a00010800460d0213ffcde213ffcd6213ff8ea012004ea213ff4e8012000e8213ff09610000ad402200cd2022008d0022004da036020f40360009fc6a00088013ff0ac1000081080044fd0213ffcde213ffcda213ff8ee213ff4d6213ff0d20220049010000a9a013ffc4000187488013ff0ac100008108004428801200cde213ffcda213ff8d0213ff4d6213ff0d4213fecfa022004fa213fe8fa022008fa213fe4fa036004fa213fe0fa036008fa213fdcd2013fe0d0013fe4da036024f40360009fc6a00088013fdc9610200194100008d2012000d00120041b3f01ce9a03611c400018d001000000d00120089a012020400019dc01000000ea01201cd0213ffcd405600492102001113f01d0900220587fffc5a488013ffce8012020d2052004d001200040001aa101000000e6012020d0213ffcd004e0081b3f01d09a03636440001b4a88013ffce4012024a2100008d004a0047fffe4fe010000008c21a0108b196010ba102003a0100006fa21bffcde012000de242008d0242004e22420008c21a0088b196008ba10200182100006fa21bffce0206000da012030da213ffcc2213ff8d601201cd401201892102005d00120149a1000127ffffdb488013ff8ac100008108003ed8801201cea012000808d600132800005de213ffce80560001080000bde213ffce8022004113f01d19002205cf40620209fc6a00088013ffca6100014a8102001de213ffcda213ff8ee213ff4fa052000fa213ff0fa052004fa213fecfa052008fa213fe8d2013fe8d00220049a013ffc40001b5488013fe8d20120009a01201440001bb201000000d0213ffce601200088013ffc80a4e00132800004e404e00010800028e4012000e204a00080a460013280001afa04e004e0012014de042004fa04e004fa213ffcde213ff8fa03e028fa213ff4d203e010d004a0047fffc37488013ff4c201200080a0600122800010e6012008d4012004133f01d59202617411000083900223d87fffb9840100000010800007e6012008fa213ffcd0213ff8d0213ff488013ff4e60120088801200cf606201880a1001b8bd0201830bfffd680a4a00132800004e201201410800011e2012014fa04a004fa213ffc94103ffdd204a000d00460041b3f01789a03612c7fffc24188013ffce401200088012004f606201880a1001b8bd0201830bfffedd00460047fffe47c01000000e0012008b8242001ba222001b91f401c9e072001d20460089010000f7fffe47f01000000fa046004fa213ffcd404600892102005d001200c1b3f01d69a0361bc4000205088013ffcc2012000da00601498102005d8236000d601201480a2e00122800368ac102001d4012018d402a004133f01b992026350113f01b99002235c7fffb829010000008c21a0088b196008ba102001ac100006fa21bffcd025a00010800359d0213ffc8c21a00c8b19600cba102002aa100006fa21bffc293f01d7a8052064e8256000e6036028e6256004de213ffcda213ff8ee213ff4fa022004fa213ff0e4036004e4213fecd60360089410200192100015901020011b3f017a9a0361dc7fffc77a88013fece2012014e2213ffca0102001e0213ff896103ffd94103ffd92102005d0012000da0120087ffffcfd88013ff8808a20013280000501000000de02200010800009c2012008113f01cb900220b8f40620209fc6a000010000009e102001c20120089a102005da213ffc9610000f94102021d2006004d00060081b3f01c09a0361f84000131c88013ffcd8012008d0213ffcfa032008fa213ff8d6013ff89410206992102061901020811b3f018b9a0363207fffd54388013ff8d60120009410203d92102069113f00259002227c1b3f019a9a0363007fffe43601000000d601201094103ffdd2012004d002e0041b3f01789a03612c7fffc1b601000000d4012010d002a0047ffff5f301000000d201200c80a26001228002f5ac102001d402a004133f01b992026350113f01b99002235c7fffb7ba010000008c21a0088b196008ba102001ac100006fa21bffcd025a000108002e7d0213ffc8c21a00c8b19600cba102002aa100006fa21bffce802200ce8256004e6022004e6256000de213ffcda213ff8d4213ff4d6213ff0e6213fecfa022008fa213fe8e8213fe4fa036004fa213fe0fa036008fa213fdcd2013fe090100015da036024f40360009fc6a00088013fdc9610200194100008d2012000d00120041b3f01ce9a03611c4000177501000000e401201ce204a004e0046010de042008c203e000de213ffc92102001901000017fffc5f488013ffcda012000d0236000d8012020d00320047fffe3b00100000096100008d0032004400002f301000000d6213ffcd0213ff8d20320089010200d1b3f01809a0360ac7fffc94288013ff8d4012028d002a0047fffc11801000000d201202894103ffdc402600492100008901000021b3f01789a03612c7fffc15301000000ee012014ac10200180a5e001328000058c21a00caa1000161080000f901000158b19600cba102002a8100006fa21bffcec252004e605e000e6252000ac100014ee05e004f606201880a1001b8bd0201830bfffee9a01202c4000202101000000a810200180a22001328000058c21a00ca61000141080000fe40120288b19600cba102002a4100006fa21bffce824a004e2022000e224a000a8100012d0022004f606201880a1001b8bd0201830bfffeee6213ffce204a008e2213ff89610200d941020019210201190103fe91b3f018c9a0363587fffd5b288013ff8e001202cd4012024d2012028d00420044000048501000000de01202cd0213ffcc2012034c2213ff8d601203894103ffd92100008d0012020da03e00cf40360009fc6a00088013ff8da01203098100008d00360047fffe34901000000d601200cb822e001ba222001b91f401c94072001b91f200492072001ba10001cbb17401db917401d90072001c4012030d8213ffcd600a0089410200d921020111b3f018b9a0363207fffd46d88013ffcee01202c80a5e0013280000faa102001ec012034d005a004400005140100000080a2200132800008aa10200190102001da05a010f40360009fc6a00001000000aa100008ec012034ea05a004e8056014e605200080a4e00122800005ea213ffca41020011080001fd8012000fa05a008fa213ff8d2013ff890100015400002c588013ff8e4012004e204a014a0102005e0246000d0213ffcd00120001b3f01a89a0362387ffff10988013ffc8c21a0108b196010ba1020039e100006fa21bffcc201200cc223e008da012000da23e004d023e000a410000f8801200cd8012000808b20013280000f96102001d4012034e4213ffcd202a00494103ffd90100009d20320001b3f01789a03612c7fffc0ac88013ffc9610000810800005d001200ce4213ffc88013ffcd001200c9a01203c4000222001000000d6012038d4012040d4213ffcd202e00cd6012044d401203090100009d201200884100008d00120289a100002f40360009fc6a00088013ffcee012038fa05e004fa213ffcec012010ec213ff896100008d405e008d2013ffcd00120001b3f01bc9a036220400004ca88013ff8ea012000e8012014e6056008e4052004e424e000ac100008108001c78801202cde213ffcda213ff894102021d2036008d00360041b3f017a9a0361d07fffc2a188013ff8ea012000d4056004133f01da920263b4113f0199900221a87fffb682010000008c21a0088b196008ba102001ac100006fa21bffcd025a0001080019ed0213ffcea022004e8056010e605200080a4fff932800003a4102001a4102005a21ca00480a4a0012280000da010200180a5e0012280000aa0102001de213ffc113f01da900223c0f40620209fc6a00088013ffca0102001a0102001de213ffcda213ff8d4213ff4d6213ff0fa056000fa213fecfa056004fa213fe8fa05600cfa213fe4e8213fe0e4213fdce2213fd8e0012004e0213fd482102001c2213fd096103ffd94103ffd92102005d00560087ffffb4d88013fd0808a20013280000501000000da02200010800009d8012020113f01cb900220b8f40620209fc6a000010000009a102001d8012020da213ffcd4012018d201201cd00320044000039688013ffcd0213ffcd00120101b3f01da9a0363ecf40360009fc6a00088013ffcd6012018d401201c92100008d00120149a01202c4000230401000000ac1000081080014c880120288c21a01c8b19601cba102006aa100006fa21bffc293f01e5a80523c8e8256000da256014e6036004e6256010e4036008e425600ce2012004e2256008e003601ce0256004de213ffcda213ff8d00220049a100015f40360009fc6a00088013ff8ac10200110800126d0213ffcde213ffcda213ff8d4213ff4fa022004fa213ff0aa102001e8013ff088013ff080a5200132800005b8256001a61000151080000ad0213ffcb9172004a4072001e8052004aa100012f606201880a1001b8bd0201830bffff380a4e0011280000e88013ffce401200cd404a004133f01b992026350113f01b99002235c7fffb5ed01000000a2012000d0246000108000118c21a008e6213ffcd2012004901020019a01201040002e3a88013ffce4012010a2100008d004a00840002f7701000000a0012004e2242000880120048c21a0088b196008ba102001ac100006fa21bffcde012000de25a000108000e98801200cde213ffcd4022004d2036008d00360041b3f01e89a03604c40002f7c88013ffc8c21a0088b196008ba102001ac100006fa21bffcd025a000108000d4d0213ffcde213ffcda213ff8d4213ff4fa022004fa213ff0fa022008fa213fecea012004ea213fe8a8102001e8213fe496103ffd94103ffd92102005d002200c7ffffab188013fe4808a20013280000501000000e602200010800009e4012000113f01cb900220b8f40620209fc6a00001000000a6102001e4012000e204a00080a460293280003ce6213ffce6213ffce004a0049e10200188013ffc80a4200132800004de213ffc10800051da012010fa042004fa213ff8c201201cc2213ff49a102001da213ff096103ffd94103ffd92102005d0042000da0120107ffffa8a88013ff0808a20013280000501000000d802200010800009d6012018113f01cb900220b8f40620209fc6a0000100000098102001d6012018d402e008d4213ffcd202e004d2213ff896103ffdd40120049210000cd00120081b3f01e79a03602840002e1a88013ff8d0012004b8222001b9172010840720019e100002e001200088012008f606201880a1001b8bd0201830bfffcbe0012018e0213ff89e102001de213ff496103ffd94103ffd9210200590100012da01200c7ffffa5b88013ff4808a20013280000501000000c202200010800009c2213ffc113f01cb900220b8f40620209fc6a0000100000082102001c2213ffc901020019a01201440002f7588013ffc88012004da01201094103ffdd2012000d00360041b3f01789a03612c7fffbf2e01000000d801200c80a3200132800005d6012010ac1020011080004b88012014d402e004133f01b992026350113f01b99002235c7fffb533010000008c21a0088b196008ba102001ac100006fa21bffcd025a0001080003c88012014de213ffcda213ff8d4213ff4fa022008fa213ff0ea012004ea213feca8102001e8213fe896103ffd94103ffd92102005d00220047ffffa1c88013fe8808a20013280000501000000e602200010800009e4012008113f01cb900220b8f40620209fc6a00001000000a6102001e4012008e6213ffcd401200492102001d0012000da04a02cf40360009fc6a00088013ffcd0213ffc901020019a01201040002f8e88013ffc8c21a0088b196008ba102001ac100006fa21bffce2012000e225a0001080000a88012014de213ffc113f01e990022110f40620209fc6a00088013ffcac10200188012014d0213ffcd0213ff8d0213ff4d0213ff088013ff08801200cd0213ffcd0213ff8d0213ff4d0213ff0d0213fecd0213fe8d0213fe4d0213fe0d0213fdcd0213fd888013fd888012028d0213ffcd0213ff8d0213ff4d0213ff0d0213fecd0213fe8d0213fe4d0213fe0d0213fdcd0213fd8d0213fd4d0213fd0d0213fccd0213fc8d0213fc488013fc48801202cd0213ffcd0213ff888013ff8d0213ffcd0213ff8d0213ff488013ff48801201c8801200cd0213ffcd0213ff888013ff8d0213ffcd0213ff8d0213ff488013ff488012014d0213ffcd0213ff8d0213ff4d0213ff0d0213fecd0213fe8d0213fe4d0213fe0d0213fdcd0213fd8d0213fd4d0213fd0d0213fccd0213fc888013fc88801203090100016e001200881c4200688012014|@4062,131071|76,4,$3745+102 196,4,@3746 276,4,@3748 284,4,@3749 292,5,@3308 352,5,@3750 368,5,@3750 428,4,@3752 512,5,@3765 596,5,@3772 720,5,@3753 752,4,@3673 760,5,@3674 908,4,@3773 916,5,@3775 1048,4,@3773 1056,5,@3775 1252,4,@3865 1376,5,@3867 1524,4,@3378 1532,5,@3380 1652,4,@3865 1696,4,@3872 1704,5,@3873 1764,4,@3880 1872,4,@3749 1880,5,@3308 2016,5,@3883 2128,4,@3885 2136,5,@3886 2152,5,@3893 2176,4,@3900 2184,5,@3401 2204,5,@3903 2224,4,@3912 2232,5,@3913 2252,5,@3615 2404,4,@3915 2480,5,@3917 2496,5,@3921 2588,5,@3384 2616,4,@3940 2624,4,I48 2632,5,@3313 2728,4,@3378 2736,5,@3380 2772,5,@3615 2808,5,@3616 2836,4,@3948 2844,5,@3950 2892,4,@3748 2900,4,@3749 2908,5,@3308 2968,4,@3952 3032,4,@3394 3040,5,@3417 3116,4,@3865 3168,4,@3795 3176,5,@3861 3216,4,@3489 3224,5,@3490 3244,4,@499 3252,4,@3619 3260,5,@3621 3284,4,@3378 3292,5,@3380 3308,5,@3705 3336,4,@3748 3344,4,@3749 3352,5,@3308 3516,4,@3885 3524,5,@3886 3564,5,@3406 3588,5,@3615 3604,5,@3750 3628,4,@3420 3636,5,@3422 3652,5,@3375 3680,4,@3378 3688,5,@3380 3784,5,@3954 3900,4,@3494 3908,5,@3496 3932,5,@3765 4000,5,@3615 4072,4,@3489 4080,5,@3490 4112,5,@3772 4212,5,@3753 4244,4,@3673 4252,5,@3674 4348,4,@3378 4356,5,@3380 4392,5,@3974 4492,4,@3773 4500,5,@3775 4560,4,@3393 4568,5,@3395 4584,4,@3983 4592,4,@3609 4600,5,@3308 4700,4,@3984 4844,4,@3865 4888,5,@3765 4904,4,@3986 4944,5,@3989 4984,4,@4038 5180,4,@3748 5188,4,@3749 5196,5,@3308 5236,5,@4044 5256,5,@4049 5328,4,@4051 5336,5,@4052 5468,4,@3865 5624,4,@3865 5684,4,@4045 5692,5,@4046 5812,4,@3865 5848,5,@4057 5876,4,@3378 5884,5,@3380 5924,4,@3748 5932,4,@3749 5940,5,@3308 6064,4,@3865 6136,5,@4059 6184,4,@4060 3746:O3|@24,@397,@3747 3747:S40|67656e6364653a2063616e277420636f64652d67656e657261746520476c6f62616c2076616c7565 3748:O2|-2,0 3749:S9|70757368436f6e7374 3750:C2,96|9e13e002c4022008ee00a000ec02201cea05a000ea20a000d0213ffcd0213ff8a8013ff8ea252000aa013ff8ee2560048c21a00c88013ff88b19600cba10200290100006fa21bffce8012000e8222000c4012004c422200481c3e00688012008|@3751,127105| 3751:S24|5452414e535f54414228292e6d61726b537461636b283129 3752:C2,240|9e13e002f606201880a1001b8bd02018d003600cc4022014ee00a00080a5e00122800005de213ffcac10200110800020de213ffcda213ff8d0213ff4fa036008fa213ff0d2013ff04000003188013ff0ec012004ea05a014a8102005e8256000d0213ffcd00120001b3f01a89a0362387fffee7588013ffc8c21a0108b196010ba102003a6100006fa21bffca4102001e424e008e2012000e224e004d024e000ac100013108000048801200cda213ff888013ff8ea012000e8056004e60520008c21a00c8b19600cba102002a4100006fa21bffce624a004ec24a000e425200090102001e201200481c4600688012008|@3764,131071|72,5,@3753 104,4,@3673 112,5,@3674 3753:C2,532|9e13e002f606201880a1001b8bd02018c402201cee00a000d0213ffcd0213ff8b825e00188013ff8b9172004ac072001de213ffcd0213ff8d2213ff4fa022024fa213ff0fa022028fa213fecee213fe89410200192102101901000161b0000829a036338f40360009fc6a00088013fe8ea012000ea2220008c21a00c8b19600cba102002a8100006fa21bffcd0252004a6103ffde62520008c21a0088b1960083b100000ba076001a4100006fa21bffce824a000a2012018e4246000a00120189e102001de2420048c21a00c8b19600cba10200282100006fa21bffcda012018da206000d801201cd8206004d6012010d402e01cd202a000d002e030c4022000ee02e010ec05e004ea05a000c2213ffcd2213ff8c4213ff4ea213ff0d001200c7fffc30888013ff08c21a0188b196018ba102005a8100006fa21bffce6012004e6252010e4012008e425200ce2012000e2252008d0252004e001200ce0252000e8213ffc9e10200188013ffcc2012024da00601cd8036000b8232001ba23e001811f401c36800017d60120189610000f9210000bd000600c7ffe720101000000d6213ffc941000089210000bd00120107fffb41488013ffcd4012000b822a001b9172004920720019e10000988012004f606201880a1001b8bd0201830bfffe480a2e00122800009d0012000d401201cd2012000113f01ba900223484000001201000000d0012000d401202881c2a00688012034|@3763,131071|92,4,I11 288,5,@3412 408,5,@608 432,5,@3309 500,4,@3754 508,5,@3755 3754:S9|736176655374617465 3755:C2,432|9e13e002f606201880a1001b8bd02018de213ffcd2213ff8d4213ff4fa026004fa213ff0fa02600cfa213fecfa026010fa213fe89a10000af40360009fc6a00088013fe890102029da01200cf40360009fc6a00001000000113f01bb90022128da01200cf40360009fc6a00001000000d0012008da01200cf40360009fc6a00001000000113f01bb90022138da01200cf40360009fc6a0000100000092103ffdd00120047ffe6b8301000000da01200cf40360009fc6a00001000000113f017090022054da01200cf40360009fc6a0000100000092103ffdd00120007ffe6b7501000000da01200cf40360009fc6a0000100000090102029da01200cf40360009fc6a00001000000d00120041b3f01bb9a036148f40360009fc6a00001000000c402200880a0a0012280001f90102001d0213ffcee022004901020019a100017f40360009fc6a00088013ffcec012014a610000892100013d005a0007ffe717f01000000d401201092100008901000137fffb78f01000000e401200090102001da04a000f40360009fc6a0000100000088012004f606201880a1001b8bd0201830bfffe0ee01201481c5e00688012018|@3762,131071|88,4,@3756 132,4,@3757 164,5,@509 188,4,@3317 220,5,@509 268,4,@3758 348,5,@608 368,5,@3340 3756:S8|636f6e746578743d 3757:S5|207073703d 3758:O1|@3759 3759:C2,148|9e13e002b8222001811f20002680000384102001841020058c21a0108b196010ba102003ae100006fa21bffc2d3f01bbac05a200ec25e0002d3f01bbac05a148ec25e008d025e0048c21a00c8b19600cba102002ac100006fa21bffc2b3f01bbaa056250ea25a000d025a0048c21a0108b196010ba10200390100006fa21bffcc4222008ec222004ee22200081c3e00601000000|@3594,123009|44,4,@3760 56,4,@3758 92,4,@3761 3760:C2,52|9e13e002f606201880a1001b8bd02018c4036004b820a001b91f2004ae07200190100017da036008f403600081c6a00401000000|@3592,131071| 3761:C2,16|9e13e002d003600481c3e00601000000|@3592,161| 3762:S25|5452414e535f54414228292e7072696e745374617465283329 3763:S24|5452414e535f54414228292e736176655374617465283229 3764:S53|475f434f444528292e636f646567656e2831302967656e636465283629726573756c742d6e65774d617463684661696c466e283129 3765:C2,192|9e13e002f606201880a1001b8bd0201880a2a0013280000680a27ffd113f01bb900223dc81c3e006010000003280002390100009c4022010de213ffcd600a00cd400a008d200a004d000a0004000002688013ffcd0213ffcae10000892102001901000177fffbc1a88013ffc80a2200122800007ac012000ac012000aa102021ea25a000108000048c21a008ee25a0008c21a0088b196008ba10200190100006fa21bffcea012000ea222000e801200481c520068801200881c3e00601000000|@3771,131071|28,4,@3766 76,5,@3767 100,5,@3373 3766:O1|8 3767:C2,64|9e13e002f606201880a1001b8bd02018d6026000d2213ffcd6213ff8d0213ff4de213ff09010000b9a013ffc4000000c88013ff0d401200081c2a00688012010|@3770,131071|44,5,@3768 3768:C2,252|9e13e002f606201880a1001b8bd02018b8222001811f200036800004c4037ff81080000ade213ffcee00a000b825e001ba222001811f401c36800004de213ffc1080000ab8222001ae100008113f0004900223d0f40620209fc6a00088013ffc84102001b8222001b9172004ae072001ec00801c8410001680a0a0013280001080a2200180a2200132800005b8222001aa10204110800005c4036000b91f2004aa072001c4036000ea20a000353f0170b406a26481c6a0040100000032800005b8222001aa10204110800005e8037ffcb91f2004aa072001e8037ffcb8252001ba256001811f401c32bfffc7901000159010200181c3e00601000000|@3769,131071|76,4,@224 172,4,@3321 3769:S52|5452414e535f54414228292e63686f6f7365526567697374657228312963686f6f736552656728342966696e6446726565283129 3770:S41|5452414e535f54414228292e63686f6f7365526567697374657228312963686f6f7365526567283429 3771:S31|475f434f444528292e63686f6f73654d657267655265676973746572283329 3772:C2,20|9e13e002c4022000d000a00081c3e00601000000|@2430,65665| 3773:O3|@3775,@3777,@3774 3774:O6|@3796,@3587,@3630,@3393,@3394,@3795 3775:C2,1092|9e13e002f606201880a1001b8bd0201880a2200132800005c40260149010000b81c3e00688012004ee00a00080a5e0012280004d808a2001808a200132800005de213ffcec0220041080000b808a2001ac100008113f003890022020f40620209fc6a00088013ffc96100016ac102001808a200132800005de213ffcea0220081080000bd6012000aa100008113f003890022020f40620209fc6a00088013ffc96100015aa102001d6012000de213ffcd0213ff8d2213ff4d4213ff0ee02e000ee213feca8102005e8213fe89610001590100016da036004f40360009fc6a00088013fe8e6012004e404e014a2102001e224a000e004e0009e102001de242000c201200880886001328000059a100008da0060001080000ad0213ffc113f003890022020f40620209fc6a000010000009810000d9a102001d0213ffcd20120009010000d1b3f01a79a0360ec7fffea5f88013ffcd0012000d801201081c320068801201832800005de213ffcec0220041080000b808a2001ac100008113f003890022020f40620209fc6a00088013ffcaa100016ac102001808a200132800005de213ffcea0220081080000bd0213ffcaa100008113f003890022020f40620209fc6a00088013ffca8100015aa102001d0213ffcd0213ff8de213ff4da213ff0d0213fecd2213fe8d4213fe4d4213fe0e8012000e8213fdca6013ff8e6213fd8941000099210001590100016da036008f40360009fc6a00088013fd8e401201480a4a00122800072e2012008e2012004e0046014de04200080a3e00122800005d2012000821020011080001cd0012008901000117ffffd1e01000000c2012004da00601498102005d8236000d0213ffcd00120001b3f01a89a0362387fffeb6288013ffc8c21a0108b196010ba10200396100006fa21bffcd401201cd422e008d2012000d222e004d022e0008210000b88012004d0012008808a20013280000501000000c402200410800009808a2001113f003890022020f40620209fc6a0000100000084102001808a20013280000501000000ee02200810800009ec01201c113f003890022020f40620209fc6a00001000000ae102001ec01201cea01200cc2213ffce805a000e8213ff8a6102005e6213ff496100017d4012000d201200490100002da056004f40360009fc6a00088013ff4e4012008e204a000a0102001e0246000de04a01482102001c223e000da01200c808b60013280000598100008d80360001080000ad0213ffc113f003890022020f40620209fc6a000010000009610000c98102001d0213ffcd20120049010000c1b3f01a79a0360ec7fffe9c388013ffcd6012024d6212024d6012000d4012008d201200cd0012004da012014de01201810bfff0888012024808c60013280000501000000e004600010800009d2012000113f003890022020f40620209fc6a00001000000a0102001d2012000901000101b3f01a79a0360ec7fffe9a701000000d0012018de01201081c3e00688012020|@3776,131071|84,4,@1110 140,4,@1110 284,4,@1110 324,4,@3664 332,5,@3666 380,4,@1110 436,4,@1110 596,5,@3753 628,4,@3673 636,5,@3674 720,4,@1110 768,4,@1110 908,4,@1110 948,4,@3664 956,5,@3666 1028,4,@1110 1060,4,@3664 1068,5,@3666 3776:S23|5452414e535f54414228292e6d657267654c6162283529 3777:O2|@3778,@3393 3778:C2,864|9e13e002f606201880a1001b8bd02018c402602880a0a00122800014ae102001de213ffcda213ff8d0213ff4d2213ff0d4213fecd6213fe8fa02600cfa213fe4c4213fe0d402602492100008113f01be900222547ffffd0c88013fe0ae1000081080000dee012010de213ffcda213ff8d0213ff4d2213ff0d4213fecd6213fe8fa02600cfa213fe4c4213fe088013fe0ee012010ec012014ea05e010e8056004e605a008e6252000e201200880a4600132800005d0213ffca41020011080002fd2012010d0213ff8d2046000d005a0007ffe6ec388013ff880a2200132800008a0012000113f01be90022264f40620209fc6a00001000000a0012000de046000de24200082012000d0206004da012004d8036000d603200080a2e00932800005d4036008e40320041080001388012008921020019010000a7fffb6090100000080a220012280000501000000a410000a1080000988012008113f01be90022298f40620209fc6a00001000000a410200188012008d2012010d002601cc4022000b820a001b91f2004ae0720018c21a00c8b19600cba102002ac100006fa21bffc2b3f01beaa0562c8ea25a000e8012024e825a004e4213ffc901000179a100016f40360009fc6a00088013ffce602200880a4e0012280001b90102001d0213ffce4022004901020019a100012f40360009fc6a00088013ffcd401201892100008901020051b3f01789a0361387fffba7d01000000e201200090102001da046000f40360009fc6a0000100000088012004f606201880a1001b8bd0201830bfffe49a012020400000b601000000e4012014e2012018e004a030de046010de242000c204a01cda006000d804600cd8206000da213ffc901020019a0120204000011188013ffcd6012010808ae0013280002194102001d2012020d4012004d0026004d201201484100008d00120189a100002f40360009fc6a000010000008c21a00c8b19600cba102002ae100006fa21bffcec012004ec25e004aa102009ea25e000d401201892100017113f0199900221a87fffaff2010000008c21a0088b196008ba10200194100006fa21bffcd022a000d201200880a260012280000dd4213ffcd4213ffcd00120147fffbf1688013ffcd401201c133f01be920262547fffb0f50100000010800004d001200088013ffcd0012000c401202881c0a00688012034|@3794,131071|76,4,@3779 84,5,@3755 208,5,@608 228,4,@3780 312,5,@3347 344,4,@3782 416,4,@3784 516,4,@3379 524,5,@3383 580,5,@3787 636,5,@3789 744,4,@3609 752,5,@3308 808,5,@3412 820,4,@3779 828,5,@3313 3779:S8|7365745374617465 3780:O3|@24,@397,@3781 3781:S25|70537461636b5265616c456e7472793a206e6f20656e747279 3782:O3|@24,@397,@3783 3783:S24|73657453746174653a206e6f742061207265676973746572 3784:C2,148|9e13e002c4036004b820a001ba222001811f401c26800003ae102001ae1020058c21a0108b196010ba102003ac100006fa21bffc2b3f01beaa056378ea25a000da25a008d025a0048c21a00c8b19600cba102002aa100006fa21bffc293f01bea80523c8e8256000d02560048c21a0108b196010ba10200390100006fa21bffcee222008ea222004ec22200081c3e00601000000|@3594,127137|52,4,@3785 92,4,@3786 3785:C2,52|9e13e002f606201880a1001b8bd02018c4036004b820a001b91f2004ae07200190100017da036008f403600081c6a00401000000|@3592,131071| 3786:C2,16|9e13e002d003600481c3e00601000000|@3592,161| 3787:C2,352|9e13e002f606201880a1001b8bd02018c4037ff4ee00a01cec05e000b825a001ba222001811f401c26800005a610000f9010200181c3e00601000000a410000da210000892100011d000a00c7ffe6d9d0100000080a2200132800004de02200010800034e6213ffcda03e00080a360093280000e80a36005d204bff4e6213ffce4213ff8e2213ff4fa022008fa213ff0d2026010d003e0047fffba3c88013ff010800016921020013280000ee6213ffcd804bff4e6213ffce4213ff8e2213ff4fa022008fa213ff0d2032010d003e0047fffba2e88013ff01080000892102001e4213ff8e2213ff4fa022008fa213ff088013ff092102001d00120007fffb4d10100000080a220012280000801000000d8012008d6033ff4d202e010d00120007fffba1a010000001080000588012004e4213ff8e2213ff488013ff4e0012000b8242001b91720049e0720019010000fda012004de01200810bfffab8801200c|@3788,131071|76,5,@608 152,5,@3384 208,5,@3384 252,5,@3347 288,5,@3384 3788:S31|5452414e535f54414228292e73657453746174652836296672656573283129 3789:C2,948|9e13e002f606201880a1001b8bd02018c4037ff8ee00a00cb825e001ba222001811f401c26800005a610000f9010200181c3e00601000000a410000da210000892100011d000a0007ffe6d3501000000de04bfdcb823e001ba246001811f401c26800006c204bff4033f01c0820061681080001de6213ffc9810000892100011d000600c7ffe6d260100000080a2200132800006d2006000033f01c082006168108000109010000cc402600080a0a00122800003ee02200cae103ffd8c21a00c8b19600cba10200282100006fa21bffcee206004ee022004ee2060009010000ce6213ffce4213ff8e2213ff4d0213ff0fa006000fa213fecfa006004fa213fe89410000892100011d004bfe87fffaf1d88013fe8ec01200880a5a0013280000bea05a000ea01200cb8256001b9172004a807200190100014da012010de01201410bfffb188012018e805600080a520093280001180a52005e6012010e404fff4ea213ffcfa05a004fa213ff8fa05a008fa213ff4fa05a00cfa213ff0d204a010d00560047fffd70488013ff01080001b9210200132800011ea213ffce6012010e404fff4ea213ffcfa05a004fa213ff8fa05a008fa213ff4fa05a00cfa213ff0d204a010d00560047fffd6f388013ff01080000a92102001fa05a004fa213ff8fa05a008fa213ff4fa05a00cfa213ff088013ff092102001d00120047fffb4280100000080a2200122800009e6012010e6012020e404fff4d204a010d00120047fffd6dd01000000e6012010b824e001811f200036800004e401200010800024d801201cb824a001811f20002680000ee2012020b824e001ba24a001811f401c2280001bd801201c113f01c090022174f40620209fc6a0000100000010800014d801201c8c21a0148b196014ba102004a0100006fa21bffce624200cde012004de242008c2012008c2242004da01200cda24200094100010d201201cd0047fe87fffaeb001000000d801201cb8232001b9172004960720019010000bda0120207fffff499e13e002d4012020d202a00480a260012280002d90102001d002bff4c402201cee00a000ec01201cb825e001ba25a001811f401c2680000592100016aa1020011080000ae8012014d002200c7ffe6c7b0100000080a2200132800003ea022004aa102001e8012014b8256001ba252001811f401c3680001190102001b8256001ba252001b91f401ca6072001e402bff494100013d201201c901000121b3f01789a03612cde012024353f0178b406a14481c6a00488012028e601202481c4e00688012028c401202481c0a00688012028|@3793,131071|72,5,@608 104,4,@3790 132,5,@608 152,4,@3790 268,5,@3309 388,5,@3564 456,5,@3564 508,5,@3347 544,5,@3564 616,4,@3791 704,5,@3309 816,5,@608 896,4,@3378 908,4,@3380 3790:O2|0,-1 3791:O3|@24,@397,@3792 3792:S28|446966666572656e7420737461636b2064657374696e6174696f6e73 3793:S38|5452414e535f54414228292e73657453746174652836297075744f6e456e7472696573283129 3794:S23|5452414e535f54414228292e7365745374617465283629 3795:O2|@3861,@3393 3796:C2,3216|9e13e002f6062018ba21205880a7401b8bd02018de213ffcda213ff8d0213ff4d2213ff0d4213fecd6213fe8fa02a00cfa213fe4fa02a024fa213fe0fa02a028fa213fdcc6213fd8053f01c38400a1f6c4213fd4ae102001ee213fd086013fd08c21a00888013fd08b1960083b100000ba076001aa100006fa21bffca8102001e8256000e601200c80a4e00122800013ea213ffcea213ffcd00120387fffbcee88013ffcd4012020133f01c3920262b07fffaecd01000000d4012014d2012028113f01c3900222c47ffffa240100000010800004e401202088013ffce4012020e204a008e0046000de012038c203e000b8206001ba242001811f401c22800008da012024113f01c3900222d8f40620209fc6a00001000000da012024808b600132800059d801201cd601201c808ae0013280004d01000000d0213ffcd0213ff8d4012028e603600092100013d002a0007ffe6bd888013ff880a2200132800008a0012000113f01be90022264f40620209fc6a00001000000a0012000e62420009e012000d023e004c2012004da006000d203600080a260093280000592102001d803600410800012d0012034d00060087fffb3200100000080a220012280000501000000d800600810800009d0012034113f01c3900222f8f40620209fc6a0000100000098102001d0012034d8213ffc84102005c4213ff8d602e0009410000c92100012ee022014d00120449a100017f40360009fc6a00088013ff894103ffd92100008d001202c1b3f01789a03612c7fffb74401000000ec012038d4012000d2012048d001202cda05a00cf40360009fc6a00001000000d80120001080001bd601202c113f01c390022320f40620209fc6a000010000009810200110800013d601202c80a3200132800005010000009810200110800009d0213ffc113f01c390022320f40620209fc6a0000100000098102001d0213ffcd0213ff8d0213ff488013ff4d601202cd402e01cd202a000b8226001b91f200490072001c40120448c21a00c8b19600cba102002ae100006fa21bffc2d3f01c3ac05a360ec25e000ea00a000ea25e004d8213ffc9a100017f40360009fc6a00088013ffce802200880a520012280001be6012030d0213ffce6022004901020019a100013f40360009fc6a00088013ffcd401203492100008901020051b3f01789a0361387fffb75e01000000e401200090102001da04a000f40360009fc6a0000100000088012004f606201880a1001b8bd0201830bfffe4e404e01ce204a000b8246001b91f2004a0072001901000101b3f01c49a03608cf40360009fc6a00001000000de02200880a3e001228000c5c2012030d0213ffcc2022004901020019a100001f40360009fc6a00088013ffcda012034981000089210000cd003600c7ffe6b2e01000000d601203c941000089210000cd002e0007ffe6b280100000080a2a0013280000480a22001108000a3ea0120003280000bd202a00cd40120349210000c901020011b3f01789a0361387fffb7230100000010800098ea012000b8226001811f200026800015c402200cee02200cb825e001811f20002680001084100009b825e001ba226001811f401c2280000b84100009ec022000ea022004e8022008113f01c4900221c0f40620209fc6a0000100000084100009ee02a00480a5e00132800004ec02200410800007ec02200080a5a00122800004ec02200010800061b820a001d2022008d002a0087fffb2520100000080a220012280000bea02a000d40120349210000c901020011b3f01789a0361387fffb6f10100000010800066ea012000e805600080a520053280002680a53ff5e605a00080a4e0053280001ad4012034d205a004d00560047fffb6200100000080a220012280000bd4012034e4056008e205a008b8246001ba24a001811f401c32800004d40120341080004eea0120009210000c901020011b3f01789a0361387fffb6d10100000010800046ea0120009210000c901020011b3f01789a0361387fffb6c9010000001080003eea0120003280001fd4012034e605a00080a4fff532800013d4012034e4056004e205a004b8246001ba24a001811f401c32800004d40120341080002fea0120009210000c901020011b3f01789a0361387fffb6b20100000010800027ea0120009210000c901020011b3f01789a0361387fffb6aa010000001080001fea0120009210000c901020011b3f01789a0361387fffb6a20100000010800017ea012000ba226001811f401c22800013ea0120008c21a0148b196014ba102004aa100006fa21bffcc425600ce802a008e8256008ee256004e602a000e6256000941000159210000cd001202c7fffac9c01000000ea01200090102001da056000f40360009fc6a0000100000088012004f606201880a1001b8bd0201830bfff3ada00601cd8036000b8232001b91f2004960720019010000b1b3f01c49a0361f8f40360009fc6a0000100000094102001d202200880a260012280001c8410000ad0213ffcd4213ff8ee022004901020019a100017f40360009fc6a00088013ff892100008d00120009a0120484000027901000000ec012004d0213ffc90102001da05a000f40360009fc6a00088013ffcd40120008801200cf606201880a1001b8bd0201830bfffe3c4213ffcee012038ec012030ea05a01ce8056000b825200188013ffcb91f2004a6072001fa05e010fa213ffc901000131b3f01c59a036064f40360009fc6a00088013ffce4012000e202200880a460012280001ca0100012d0213ffce4213ff8de022004901020019a10000ff40360009fc6a00088013ff892100008d00120009a012050400002e401000000c2012004d0213ffc90102001da006000f40360009fc6a00088013ffce40120008801200cf606201880a1001b8bd0201830bfffe3de012004b8242001ba23e001811f401c24800003821000108210000fda012038d8036030d6032000b822e001ba206001811f401c368000108c21a010d4032000b8206001ba22a001b91f401c9207200184100009d2012054901000027fffd7f901000000ee012038ec05e030c225a0008c21a0108b196010ba10200394100006fa21bffc133f01c592026384d222a000d0012038d022a008c4012040c422a004ee012044d0213ffcd6012054ac10000a941020019210001690102001da05e010f40360009fc6a00088013ffcea012038e805601ce6052000b824e001b91f2004a4072001901000121b3f01c69a036094f40360009fc6a00001000000e202200880a4600122800017e0012038d0213ffce0022004901020019a100010f40360009fc6a00088013ffc9a01204c4000039601000000de01200090102001da03e000f40360009fc6a0000100000088012004f606201880a1001b8bd0201830bfffe8de04201cc203e000b8206001b91f20049a0720019010000d1b3f01c79a0362f0f40360009fc6a00001000000d802200880a3200122800017d6012040d0213ffcd6022004901020019a10000bf40360009fc6a00088013ffc9a01204c4000050901000000d401200090102001da02a000f40360009fc6a0000100000088012004f606201880a1001b8bd0201830bfffe8d4012038d202a030c4026000ee02e010b820a001ba25e001811f401c36800006ec012018ec012018aa102005ea25a000ec012018ea05a00080a5600122800004010000001080002ade012034e8012040e6012038e404e030e204a000e0052010b8246001ba242001811f401c24800020de012034de012044d201205490100013da03e004f40360009fc6a0000100000080a22001228000049010200110800011f60620187fffad6301000000d20120541b3f01809a0360ac7fffbcf801000000c2012038da006030d8036000b8232001b917200496072001d6236000f606201880a1001b8bd0201830bfffd9808be00132800017821020018c21a00c8b19600cba1020029a100006fa21bffcd8012008d823600496102009d6236000d40120389210000d113f0199900221a87fffab0c010000008c21a0088b196008ba10200182100006fa21bffcd0206000da01202880a360012280000dc2213ffcc2213ffcd00120547fffba3088013ffcd401203c133f01c3920262b07fffac0f0100000010800004d801201c88013ffcd801201cd60320008c21a00c8b19600cba102002ac100006fa21bffcd4012000d425a004d625a000c601202810800022d2012050d202200080a260053280000ad0213ffc84100008113f00059002201cf40620209fc6a00001000000ac102001d0213ffcd001202c7fffba0c88013ffcd4012014133f01c3920262b07fffabeb01000000d4012008d201201c113f01c3900222c47ffff74201000000d0012000f40620209fc6a00001000000ac102001d2012050d005a000d0226000c405a004c422600490102001ee01204c81c5e0068801205c|@3860,131071|72,4,$3796+3058 156,5,@3412 168,4,@3797 176,5,@3313 192,4,@3798 200,5,@3755 260,4,@3799 336,5,@608 356,4,@3780 432,5,@3347 464,4,@3801 552,4,@3378 560,5,@3380 612,4,@3803 668,4,@3803 756,4,@3805 852,4,@3379 860,5,@3383 936,4,@3808 1016,5,@608 1040,5,@608 1088,4,@3379 1096,5,@3383 1180,4,@3812 1256,5,@3347 1288,4,@3379 1296,5,@3383 1352,5,@3373 1416,4,@3379 1424,5,@3383 1448,4,@3379 1456,5,@3383 1540,4,@3379 1548,5,@3383 1572,4,@3379 1580,5,@3383 1604,4,@3379 1612,5,@3383 1700,5,@3309 1776,4,@3814 1860,5,@3818 1968,4,@3820 2052,5,@3824 2204,5,@3616 2244,4,@3828 2344,4,@3830 2412,5,@3834 2488,4,@3840 2556,5,@3844 2772,5,@3321 2784,4,@3420 2792,5,@3422 2900,4,@3609 2908,5,@3308 2964,5,@3412 2976,4,@3797 2984,5,@3313 3076,4,@227 3108,5,@3412 3120,4,@3797 3128,5,@3313 3144,4,@3798 3152,5,@3755 3797:S10|6d657267655374617465 3798:S11|7361766564207374617465 3799:O3|@24,@397,@3800 3800:S6|4d61726b6572 3801:O3|@24,@397,@3802 3802:S14|4e6f742061207265676973746572 3803:O3|@24,@397,@3804 3804:S37|6d657267655374617465202d204d69736d61746368656420726573756c7420737461746573 3805:C2,148|9e13e002c4036004b820a001ba222001811f401c26800003ae102001ae1020058c21a0108b196010ba102003ac100006fa21bffc2b3f01c4aa056010ea25a000da25a008d025a0048c21a00c8b19600cba102002aa100006fa21bffc293f01c4a8052060e8256000d02560048c21a0108b196010ba10200390100006fa21bffcee222008ea222004ec22200081c3e00601000000|@3594,127137|52,4,@3806 92,4,@3807 3806:C2,52|9e13e002f606201880a1001b8bd02018c4036004b820a001b91f2004ae07200190100017da036008f403600081c6a00401000000|@3592,131071| 3807:C2,16|9e13e002d003600481c3e00601000000|@3592,161| 3808:O1|@3809 3809:C2,148|9e13e002b8222001811f20002680000384102001841020058c21a0108b196010ba102003ae100006fa21bffc2d3f01c4ac05a144ec25e0002d3f01c4ac05a08cec25e008d025e0048c21a00c8b19600cba102002ac100006fa21bffc2b3f01c4aa056194ea25a000d025a0048c21a0108b196010ba10200390100006fa21bffcc4222008ec222004ee22200081c3e00601000000|@3594,123009|44,4,@3810 56,4,@3808 92,4,@3811 3810:C2,52|9e13e002f606201880a1001b8bd02018c4036004b820a001b91f2004ae07200190100017da036008f403600081c6a00401000000|@3592,131071| 3811:C2,16|9e13e002d003600481c3e00601000000|@3592,161| 3812:O3|@24,@397,@3813 3813:S29|6d657267653a206d69736d6174636865642064657374696e6174696f6e 3814:O1|@3815 3815:C2,148|9e13e002b8222001811f20002680000384102001841020058c21a0108b196010ba102003ae100006fa21bffc2d3f01c4ac05a2b0ec25e0002d3f01c4ac05a1f8ec25e008d025e0048c21a00c8b19600cba102002ac100006fa21bffc2b3f01c4aa056300ea25a000d025a0048c21a0108b196010ba10200390100006fa21bffcc4222008ec222004ee22200081c3e00601000000|@3594,123009|44,4,@3816 56,4,@3814 92,4,@3817 3816:C2,52|9e13e002f606201880a1001b8bd02018c4036004b820a001b91f2004ae07200190100017da036008f403600081c6a00401000000|@3592,131071| 3817:C2,16|9e13e002d003600481c3e00601000000|@3592,161| 3818:C2,240|9e13e002f606201880a1001b8bd02018c4037ff0a610000fa4100008d000a00c7ffe67da01000000808a20013280002f90100012de022000da03e00080a37ff53280002890100012d203e004b8226001811f200026800003841020018410200580a0a00132800005b8226001ae10000910800005e6213ffcb91f3ff4ae072001e6213ffce4213ff892103ff1901000171b0000859a036378f40360009fc6a00088013ff8b8222001b9172004ac072001ea012000ba256001811f001d248000069010001590100016e801200481c5200688012008e801200481c520068801200881c4e0060100000081c4e00601000000|@3819,131071|32,5,@608 144,4,I109 3819:S36|5452414e535f54414228292e6d657267655374617465283729676574496e557365283229 3820:O1|@3821 3821:C2,148|9e13e002b8222001811f20002680000384102001841020058c21a0108b196010ba102003ae100006fa21bffc2d3f01c5ac05a11cec25e0002d3f01c5ac05a064ec25e008d025e0048c21a00c8b19600cba102002ac100006fa21bffc2b3f01c5aa05616cea25a000d025a0048c21a0108b196010ba10200390100006fa21bffcc4222008ec222004ee22200081c3e00601000000|@3594,123009|44,4,@3822 56,4,@3820 92,4,@3823 3822:C2,52|9e13e002f606201880a1001b8bd02018c4036004b820a001b91f2004ae07200190100017da036008f403600081c6a00401000000|@3592,131071| 3823:C2,16|9e13e002d003600481c3e00601000000|@3592,161| 3824:C2,364|9e13e002f606201880a1001b8bd02018c4037ff0a610000fa410000da2100008a010000992100010d000a00c7ffe673c01000000de04bff88210000892100010d003e0007ffe673601000000808860013280004590100011da006000d203600080a27ff532800005808a20019010001181c4e006010000003280003990100011c4022000ee00a00080a5fff53280003290100011ec00a004b825a001811f200026800003aa102001aa10200580a5600132800005b825a001a810001610800005e6213ffcb91f3ff4a8072001e6213ffce4213ff8e2213ff492103ff1901000141b0000859a036378f40360009fc6a00088013ff4e6012000b824e001ba222001811f401c36800003a4100013a4100008e2012004e0047fbcb8242001ba24a001811f401c3680000990100012113f01c590022320f40620209fc6a000010000009010200190100012de01200881c3e0068801200c81c4e0060100000081c4e0060100000081c4e00601000000|@3827,131071|44,5,@608 68,5,@608 224,4,I109 300,4,@3825 3825:O3|@24,@397,@3826 3826:S28|6d6572676553746174653a20756e70757368656420656e7472696573 3827:S39|5452414e535f54414228292e6d6572676553746174652837296765744d696e537461636b283229 3828:C2,200|9e13e002f606201880a1001b8bd02018c4036008a610000fa410000da210000892100011d000a00c7ffe66c201000000de04a0048210000892100011d003e0007ffe66bc01000000808860013280001d90102001da006000d203600080a27ff53280000a808a2001808a200132800005901020019010200181c4e0060100000081c4e006010000003280000c90102001c4022000ee00a00080a5fff532800005901020019010200581c4e0060100000081c4e0060100000081c4e0060100000081c4e00601000000|@3829,130787|40,5,@608 64,5,@608 3829:S36|5452414e535f54414228292e6d6572676553746174652837296d75737450757368283129 3830:O1|@3831 3831:C2,148|9e13e002b8222001811f20002680000384102001841020058c21a0108b196010ba102003ae100006fa21bffc2d3f01c6ac05a14cec25e0002d3f01c6ac05a094ec25e008d025e0048c21a00c8b19600cba102002ac100006fa21bffc2b3f01c6aa05619cea25a000d025a0048c21a0108b196010ba10200390100006fa21bffcc4222008ec222004ee22200081c3e00601000000|@3594,123009|44,4,@3832 56,4,@3830 92,4,@3833 3832:C2,52|9e13e002f606201880a1001b8bd02018c4036004b820a001b91f2004ae07200190100017da036008f403600081c6a00401000000|@3592,131071| 3833:C2,16|9e13e002d003600481c3e00601000000|@3592,161| 3834:C2,564|9e13e002f606201880a1001b8bd02018c4037ff0a610000fa410000da210000892100011d000a00c7ffe663101000000de04bff88210000892100011d003e0007ffe662b01000000808860013280007890102001da006000d203600080a27ff53280000580a260059010200181c4e0060100000032800055808a2001808a20013280005090102001c4022000ee00a00080a5e0093280001080a5e005ec006004ec213ffcea00600cea213ff8d60060089410000dd200a004901000119a1000129e100013353f01c7b406a01881c6a00488013ff83280003990102001ec036008ea00a008b8256001ba25a001811f401c2280000ae8022008e6213ffce8022008113f01c79002228cf40620209fc6a00088013ffce8022008d200a004d00360047fffad530100000080a22001228000219010200192102001901000147fffad4c0100000080a220012280000592102001a01000141080000ade006004d00060087fffad430100000080a2200122800003a0102011e0006008de006004de213ffcda00600cda213ff8d6006008d400600092100010901000119a1000129e100013353f01c7b406a01881c6a00488013ff881c4e0060100000081c4e0060100000081c4e006010000003280001790102001c4022000ee00a00080a5e0093280001090102001ec006004ec213ffcea00600cea213ff8d60060089410000dd200a004901000119a1000129e100013353f01c7b406a01881c6a00488013ff881c4e0060100000081c4e0060100000081c4e00601000000|@3839,131071|40,5,@608 64,5,@608 196,4,@3835 256,4,@3837 288,5,@3347 316,5,@3347 352,5,@3347 416,4,@3835 524,4,@3835 3835:C2,552|9e13e002f606201880a1001b8bd020188410000fae10000dac100008aa10000992102011901000157fffb0e30100000080a2200122800017e802a000e605fffcc4213ffcee213ff8ec213ff4d205e00cd005fff0da04e008f40360009fc6a00088013ff4e4012004d0213ffcd604bff0d401200092100008d004a00c7fffd76088013ffce801200010800035e201200880a520093280000b9210001592100015d002a0047fffb0c40100000080a2200122800004921000151080000ae605fff09010000b7fffb0bc0100000080a2200132800004e605fff01080000de605fffcc4213ffcee213ff8ec213ff4ea213ff0d204e010901000157fffcf8788013ff0e801200010800016e2012008c4213ffcee213ff8ec213ff4ea213ff094100015d205e00cd005fff0da04e00cf40360009fc6a00088013ff0e4012008d604bff0d4012004d2012000d004a00c7fffd72c01000000e8012000e2012008e0047ff082100014d2012004d004200c7ffe654c0100000080a2200132800004c2213ffc1080000bc2213ffc94100010d2012004901020011b3f01789a0361387fffb14988013ffc10800004da01200c88013ffcda01200c8c21a00c8b19600cba10200298100006fa21bffcd6012000d623200494102009d42320008c21a0148b196014ba10200492100006fa21bffcd0012014d022600c84102001c4226008ee012018ee226004d822600094100009d2012008d0037fe8de012010353f016eb406a31881c6a0048801201c|@3836,131071|40,5,@3373 124,5,@3645 164,5,@3373 196,5,@3373 248,5,@3564 332,5,@3645 364,5,@608 404,4,@3379 412,5,@3383 536,4,@3309 3836:S37|5452414e535f54414228292e6d6572676553746174652837296c6f6164546f526567283629 3837:O3|@24,@397,@3838 3838:S25|6d657267653a206d69736d617463686564206f666673657473 3839:S39|5452414e535f54414228292e6d6572676553746174652837296c6f6164456e7472696573283129 3840:O1|@3841 3841:C2,148|9e13e002b8222001811f20002680000384102001841020058c21a0108b196010ba102003ae100006fa21bffc2d3f01c7ac05a3a8ec25e0002d3f01c7ac05a2f0ec25e008d025e0048c21a00c8b19600cba102002ac100006fa21bffc2b3f01c7aa0563f8ea25a000d025a0048c21a0108b196010ba10200390100006fa21bffcc4222008ec222004ee22200081c3e00601000000|@3594,123009|44,4,@3842 56,4,@3840 92,4,@3843 3842:C2,52|9e13e002f606201880a1001b8bd02018c4036004b820a001b91f2004ae07200190100017da036008f403600081c6a00401000000|@3592,131071| 3843:C2,16|9e13e002d003600481c3e00601000000|@3592,161| 3844:C2,908|9e13e002f606201880a1001b8bd02018c4037ff0a610000fa410000da210000892100011d000a00c7ffe649a01000000de04bff88210000892100011d003e0007ffe64940100000080886001328000ce90102001808a2001328000c990102001fa00600cfa213ffcfa006004fa213ff8fa006000fa213ff4e2213ff0e4213fecfa006008fa213fe8fa022008fa213fe4da013ff4d203600080a260091280002f88013fe4c4022000ee03600492100017d00120007fffafbd0100000080a2200122800005ec00a0009010200181c4e0068801201c80a5a0093280001180a5bff5d200a004901000177fffabca0100000080a220012280000890102001ea04bfd0a8102005e82560009010200181c4e0068801201c81c4e0068801201c3280000aea04bfd0e6213ffc113f01c8900223ccf40620209fc6a00088013ffc90102001ea04bfd0a8102005e82560009010200181c4e0068801201c80a27ff93280001680a26001c4022000ee00a00080a5fff93280000ae6213ffce6213ffc901020019a0120184000009588013ffcec01200081c5a00688012020113f01c990022128f40620209fc6a00088013ffc9010200180a260013280001680a26005c4022000ee00a00080a5e0013280000ae6213ffce6213ffc901020019a0120184000007f88013ffcec01200081c5a00688012020113f01c990022150f40620209fc6a00088013ffc9010200180a260053280002c80a27ff5c4022000ee036004d2012004d00120007fffaf610100000080a2200122800005ec00a0009010200181c4e0068801201c80a5a00532800016e6213ffcd200a004901000177fffaf540100000080a220012280000aea04bfd0e6213ffc901020019a0120184000005888013ffcea01200081c5600688012020a8102005e82560009010200181c4e0068801201c113f01c990022178f40620209fc6a00088013ffc9010200180a27ff532800022c4022000c4022000ee00a00080a5fff532800018ec04bfd0ec036004ea00a004b8256001ba25a001811f401c32800004e6213ffc10800008e6213ffc113f01c9900221a8f40620209fc6a00088013ffce6213ffc901020019a0120184000002f88013ffce801200081c5200688012020aa102005ea25a0009010200181c4e0068801201cee00a00080a5fffd32800005e6213ffc9010200181c4e0068801201c113f01c9900221e0f40620209fc6a00088013ffc901020019010200181c4e0060100000081c4e00601000000|@3859,131071|40,5,@608 64,5,@608 180,5,@3373 232,5,@3347 296,4,@3845 388,5,@3847 408,4,@3849 476,5,@3847 496,4,@3851 548,5,@3373 600,5,@3373 632,5,@3847 672,4,@3853 764,4,@3855 796,5,@3847 864,4,@3857 3845:O3|@24,@397,@3846 3846:S21|6d657267653a20756e70757368656420656e747279 3847:C2,208|9e13e002f606201880a1001b8bd02018ae10000fac10000d92102001d005bfec7fffab060100000080a220012280002790102001d205bfe8d005bfec7fffaaff0100000080a220012280002090102001de05bff0da03fff0ee213ffcec213ff8d2036010d005bfec7fffb04688013ff8d8012000d6033ff08c21a0148b196014ba10200494100006fa21bffcd2032000d222a00c90102001d022a008c4033ffcc422a004ee033ff8ee22a000d2033ff4d002ffe8de012004353f016eb406a31881c6a0048801200881c5e00601000000|@3848,131071|32,5,@3347 60,5,@3347 104,5,@3384 184,4,@3309 3848:S53|5452414e535f54414228292e6d657267655374617465283729636865636b456e7472696573283129666c7573684361636865283129 3849:O3|@24,@397,@3850 3850:S16|4c69746572616c206d69736d61746368 3851:O3|@24,@397,@3852 3852:S16|436f6465726566206d69736d61746368 3853:O3|@24,@397,@3854 3854:S24|6d657267653a206d69736d61746368656420446972656374 3855:O3|@24,@397,@3856 3856:S31|6d657267653a206d69736d61746368656420737461636b20656e7472696573 3857:O3|@24,@397,@3858 3858:S27|6d657267653a206d69736d61746368656420436f6e7461696e6572 3859:S40|5452414e535f54414228292e6d657267655374617465283729636865636b456e7472696573283129 3860:S25|5452414e535f54414228292e6d657267655374617465283729 3861:C2,1284|9e13e002f606201880a1001b8bd02018d0213ffcd0213ff8a610000fa410000da2100008a01000099210000bd004200c7ffe630788013ff880a22001328000229e012000e6213ffce4213ff8e2213ff4e0213ff0d4213fecd6213fe892103ffd9010000b7ffe5cd088013fe892100008113f019c900223607ffe5b5b010000008c21a0108b196010ba1020039e100006fa21bffcd023e008033f000f820063bcc223e0041b3ee0089a0361fcda23e0009010000ff40620209fc6a000010000009e012000d623e00082012000d0206004da012004d8036000c20360089210000bd004200c7ffe62da0100000080a220013280000ad2022004e6213ffc113f019c90022384f40620209fc6a00088013ffc9a102001d202200480a26005328000039a1020019a102005c403200080a0a00932800038ae10000dae10000d9210000ad00320047fffae080100000080a22001228000319210000aec01200880a5a0012280002a9010000b80a5e001328000279010000be6213ffce0213ff8d4213ff4d6213ff09210001190100010da04a004f40360009fc6a00088013ff08c21a00c8b19600cba102002aa100006fa21bffce8012004e8256004a6102009e6256000d401200892100015113f0199900221a87fffa45601000000d0213ffc94103ffdd2012000d00120081b3f01789a03612c7fffae3b88013ffcd0012000e401201081c4a0068801202081c4e0068801200c9210000a901000017fffadd30100000080a22001228000378c21a00cec01200880a5a00122800011e6213ffc80a5e0013280000ee6213ffce6213ffce0213ff8d4213ff4d6213ff09210001190100010da04a004f40360009fc6a00088013ff01080000a8c21a00ce0213ff8d4213ff4d6213ff0d20420109010000a7fffcc8e88013ff08c21a00c8b19600cba102002aa100006fa21bffce8012004e8256004a6102009e6256000d401200892100015113f0199900221a87fffa41801000000d0213ffc94103ffdd2012000d00120081b3f01789a03612c7fffadfd88013ffcd0012000e401201081c4a006880120208b19600cba102002ac100006fa21bffcaa102001ea25a004d425a0008c21a0088b196008ba102001a8100006fa21bffcec2520008c21a0108b196010ba1020039e100006fa21bffc033f01ca82006388c223e000e023e008d423e004e6213ffce4213ff8e2213ff4e0213ff0d4213fecd6213fe8d8213fe4ee213fe094100010921000149010000f7fffb0ae88013fe0da01200080a3600122800033d0213ffcd8012010fa032010fa213ffcd001200c7fffaf4888013ffcd6012000b8222001811f200036800004d402e0001080000a01000000d202a000b8226001ba222001811f401c368000040100000010800009b8222001113f0004900223d0f40620209fc6a0000100000094102001b8222001b917200484072001ee02801c9410001780a2a00532800019d801201cec012008ea05a00080a5600532800014d801201cd2012010d005a0047fffad470100000080a220012280000dd801201c10800005e801201488013ffc10800008d801201cd2052010d00120107fffcc13010000001080000ad6012014d4012010d2012018d0012014da032004f40360009fc6a00001000000d6012014d401200cd2012010d00120187fffd3be010000008c21a00c8b19600cba10200296100006fa21bffcd4012010d422e00492102009d222e000d40120149210000b113f0199900221a8de012020353f016eb406a19081c6a00488012030|@3864,131071|48,5,@608 100,5,@509 112,4,@3632 120,5,@496 152,4,@397 164,4,@24 228,5,@608 252,4,@3633 324,5,@3373 456,4,@3609 464,5,@3308 488,4,@3378 496,5,@3380 536,5,@3373 652,5,@3564 704,4,@3609 712,5,@3308 736,4,@3378 744,5,@3380 840,4,@3862 904,5,@3401 944,5,@3385 1012,4,@224 1096,5,@3373 1144,5,@3564 1204,5,@3645 1256,4,@3609 1268,4,@3308 3862:C2,192|9e13e002f606201880a1001b8bd02018d0036008de213ffcfa022010fa213ff8d00360047fffaee388013ff8c4012000b8222001811f200036800004ee00a0001080000a01000000ec05e000b825a001ba222001811f401c368000040100000010800009b8222001113f0004900223d0f40620209fc6a00001000000ae102001b8222001b9172004aa072001e805c01cae100014b825e001811f2000248000069010200190102005e601200481c4e00688012008e601200481c4e00688012008|@3863,131071|36,5,@3385 104,4,@224 3863:S35|5452414e535f54414228292e6c6f6164546f5370656369666963526567283529283129 3864:S32|5452414e535f54414228292e6c6f6164546f5370656369666963526567283529 3865:O3|@24,@397,@3866 3866:S21|67656e546f537461636b3a206e6f20726573756c74 3867:C2,356|9e13e002f606201880a1001b8bd02018de213ffcd0213ff8d4213ff4d6213ff0fa022024fa213fecfa022028fa213fe8d40120009210000bd00220047fffa37d88013fe8c4012010d401200cd2012008d000a0207fffa37701000000ee01201cb825e001b91f2004ac07200194100016d201200cd00120101b3f01789a03612c7fffacf701000000ea01200080a560012280003290102001113f01cb90022268da012004f40360009fc6a0000100000092103ffdd001200c7ffe5b1b01000000da012004f40360009fc6a00001000000113f01cb90022284da012004f40360009fc6a0000100000092103ffdd00120087ffe5b0d01000000da012004f40360009fc6a00001000000113f01cb90022294da012004f40360009fc6a0000100000092103ffdd001201c7ffe5aff01000000da012004f40360009fc6a0000100000090102029da012004de012014f403600081c6a00488012020e801201481c5200688012020|@3871,131071|60,5,@3309 84,5,@3309 120,4,@3378 128,5,@3380 152,4,@3868 184,5,@509 208,4,@3869 240,5,@509 264,4,@3870 296,5,@509 3868:S17|6d616b65456e7472793a20696e6465783d 3869:S6|206c6f636e3d 3870:S5|207573653d 3871:S24|5452414e535f54414228292e6d616b65456e747279283629 3872:O2|@3873,@3629 3873:C2,1356|9e13e002f606201880a1001b8bd02018d0213ffcd0213ff8a610000fa410000da2100008a010000992100010d002e00c7ffe60ed88013ff880a22001328000229e012000e6213ffce4213ff8e2213ff4e0213ff0d4213fecd6213fe892103ffd901000107ffe5ab688013fe892100008113f019c900223607ffe5941010000008c21a0108b196010ba1020039e100006fa21bffcd023e008033f000f820063bcc223e0041b3ee0089a0361fcda23e0009010000ff40620209fc6a000010000009e012000e023e00082012000d0206004da012004d8036000d203200080a27ffd3280004580a27ff9b8246001811f200026800003901020019010200580a2200532800005b82460018410001110800005e6213ffcb91f200c84072001e6213ffce0213ff8d6213ff4fa032004fa213ff092102011901000021b0000859a036378f40360009fc6a00088013ff0ee01200080a5e0013280000980a22001113f0004900223d0f40620209fc6a00001000000ac10200180a2200132800005b8222001ec05e0001080000aec213ffcb91f2004aa07200190100015ee05e004f606201880a1001b8bd0201830bfffea9410200592100016d00120041b3f01789a03612c7fffac2d88013ffc94103ffdd201200cd00120081b3f01789a03612c7fffac2601000000d0012000ea01201081c560068801201c328000b2d0213ffcd0032004808a20012280001b808a2001808a200122800005e6213ffc841000081080000980a0a001113f002990022348f40620209fc6a00088013ffc8410200180a0a0013280000c808a20019410000b133f01b992026350113f01b99002235c9e100013353f016eb406a19081c6a0048801200822800004808a20011080003ce6213ffc2280000a84100008e6213ffc113f002990022374f40620209fc6a00088013ffc8410200184100008fa00bffcbb2f6008b9376006ae072001b8246001811f200026800003ac102001ac10200580a5a00532800005b8246001aa10001110800005e6213ffcb91f200caa072001e6213ffce2213ff8e0213ff4d6213ff0d0213fecee213fe892102011901000151b0000859a036378f40360009fc6a00088013fe8808a20012280000501000000a810000810800009e60120001b0000879a0360d8f40360009fc6a00001000000a8100008e601200080a4c0142880000a010000001080000f94103ffde2213ff8e0213ff4d6213ff0d0213fecd0213fe888013fe8113f01cd90022038f40620209fc6a000010000009010200194103ffdd201200cd00120081b3f01789a03612c7fffabb201000000e4012004808ca00122800009a2100012113f002990022374f40620209fc6a00001000000a2102001a2100012e0012010b8242001811f2000268000039e1020019e10200580a3e00532800005b82420018210001010800005e2213ffcb91f200c82072001e2213ffc92102011901000011b0000859a036378f40360009fc6a00088013ffc808a200122800005010000009a10000810800009d8012000113f002990022348f40620209fc6a000010000009a102001d8012000b8236001d603001c8c21a00c8b19600cba10200294100006fa21bffcd622a00492103ff9d222a0009010000ad401200c92100008113f01b99002235cde012018353f016eb406a19081c6a00488012024d0213ff8e6213ff4e2213ff0d6213fec90013ff8d0213fe8961020018410000a94100010d2013fec90100002da04a004f40360009fc6a00088013fe894103ffdd2012010d00120001b3f01789a03612c7fffab5a01000000ee012000ec05e02cea05a000e805e01ce60520009410001592100013901020019a0120184000001b01000000e401200881c4a0068801201c|@3879,131071|48,5,@608 100,5,@509 112,4,@3632 120,5,@496 152,4,@397 164,4,@24 312,4,I109 348,4,@224 440,4,@3378 448,5,@3380 468,4,@3378 476,5,@3380 548,4,@542 588,4,@3748 596,4,@3749 608,4,@3308 652,4,@545 780,4,I109 824,4,I152 896,4,@3874 932,4,@3378 940,5,@3380 964,4,@545 1060,4,I109 1104,4,@542 1184,4,@3749 1196,4,@3308 1284,4,@3378 1292,5,@3380 1336,5,@3876 3874:O3|@24,@397,@3875 3875:S35|696e646972656374202d20696e76616c696420636f6e7374616e742061646472657373 3876:C2,500|9e13e002f606201880a1001b8bd02018b8226001ba22a001811f401c2680002ac4037fe8d4037fe8de213ffcda213ff8d202a010d0037ff47fffc9a088013ff8d2012000d0027fe8c402202cee00a000ec02201cea05a000b8256001ba25e001811f401c248000058c21a010e805a000e820a0008c21a0108b196010ba102003a8100006fa21bffce6027fece6252008e4027ff4e4252004a2102005e22520009410000892100014113f01cd90022284de012004353f016eb406a19081c6a00488012008a610000fa410000da2100008a01000099210000ad000a00c7ffe5f5901000000808a20013280003ab822a001de022000c203e00080a060053280002cb822a00180a4600132800006d803e008da04bfe8d803602cd4232000d803e008d204bff4d003e0047fffaa8c0100000080a2200122800015b822a001d604bfecb822e001ba232001811f401c3280000fb822a001e6213ffcd4213ff894102005d2013ff8d004bfe81b3f01789a03612c7fffaad888013ff8d0012000d401200481c2a00688012008b9172004960720019410000b92100010901020059a1000129e10001310bfff99f6062018b91720049a0720019410000d92100010901000119a1000129e10001310bfff90f6062018b91720049e0720019410000f92100010901000119a1000129e10001310bfff87f6062018|@3878,131071|56,5,@3564 168,4,@3877 180,4,@3308 220,5,@608 296,5,@3373 360,4,@3378 368,5,@3380 3877:S8|696e646972656374 3878:S32|5452414e535f54414228292e696e646972656374283429736561726368283329 3879:S23|5452414e535f54414228292e696e646972656374283429 3880:O1|@3881 3881:C2,16|9e13e0029010200181c3e00601000000|@3882,129| 3882:S39|475f434f444528292e636f646567656e2831302967656e636465283629726573756c742d283129 3883:C2,392|9e13e002f606201880a1001b8bd0201880a260013280001bc4026000d2037ff880a260012280001590102001d0037ffcde213ffcd4022004133f01b992026350113f01b99002235c7fffa08288013ffc841000088c21a0088b196008ba10200190100006fa21bffcc4222000ee01200081c5e0068801200481c3e00601000000ee00a00080a5fff13280001aec026004de213ffcda213ff8d0213ff4fa026004fa213ff0ec036008ec213fecea036004ea213fe896103ffd94102001e80260009210200590100014da037ffcf40360009fc6a00088013fe8d2012000d0012004da012008de01200c10bfffc78801201080a5a0013280000fde213ffcea036008ea213ffce8036004e8213ff8d6037ff494100008e60260009210200590100013da037ffcf403600081c6a00488013ff8da213ff8d0213ff4ec213ff0ea036008ea213fece8036004e8213fe896103ffd94102001e60260009210200590100013da037ffcf40360009fc6a00088013fe8d2012000d0012004da012008de01200c10bfffa188012010|@3884,131071|56,4,@3748 64,4,@3749 72,5,@3308 3884:S47|475f434f444528292e636f646567656e2831302967656e636465283629726573756c742d636f64654c697374283229 3885:O2|@3886,@3394 3886:C2,376|9e13e002f606201880a1001b8bd02018d0213ffcd0213ff8de213ff4da213ff0d0213fecd2213fe8d4213fe4d6213fe0fa02200cfa213fdc94102001921021019010202d1b0000829a036338f40360009fc6a00088013fdc84102029c42220008c21a00c8b19600cba102002ae100006fa21bffcd025e004ac103ffdec25e0008c21a0088b1960083b100000ba076001aa100006fa21bffcee256000a801201cea252000a601201ca4102001e424e0048c21a00c8b19600cba102002a2100006fa21bffce001201ce0246000de012020de2460048c21a0108b196010ba10200390100006fa21bffc033f01ce820062bcc2222000da012010da222008e2222004e2213ffcda012008f40360009fc6a00088013ffc8c21a0148b196014ba10200498100006fa21bffc173f01ce9602e3f8d6232000d4012014d423200cd2012000d2232008d0012004d0232004c4012018d4212024d6012010d40120089210000c90102001da00a004de01201cf403600081c6a00488012024|@3892,131071|68,4,I11 232,4,@3887 296,4,@3889 3887:C2,252|9e13e002f606201880a1001b8bd02018d0213ffcd0213ff8c4036008a610000fa410000da210000892100011d000a00c7ffe5df288013ff880a220013280001ea0012000e6213ffce4213ff892103ffd901000117ffe57bf88013ff892100008113f019c900223607ffe564a010000008c21a0108b196010ba102003a0100006fa21bffcd02420081f3f000f9e03e3bcde242004033ee008820061fcc224200090100010f40620209fc6a00001000000a0012000e22420009e012000d023e004d2012000d004a0047ffe5dcc01000000b8222001b91720048207200194100001d2012000d004a0049e100013353f016eb406a31881c6a00488012008|@3888,131071|48,5,@608 84,5,@509 96,4,@3632 104,5,@496 136,4,@397 148,4,@24 200,5,@608 236,4,@3309 3888:S28|5452414e535f54414228292e70757368416c6c427574283429283129 3889:C2,260|9e13e002f606201880a1001b8bd02018c403600ca610000fa410000da210000892100011d000a00c7ffe5da50100000080a220013280000ae0022000e6213ffc113f01cf90022118f40620209fc6a00088013ffc90102001e0022000c2022004d8022008d602200c92100011d004a0087ffe5d9301000000b8222001ba206001811f401c24800005b822e0019010200581c4e00601000000811f2000348000048c21a01410800013e6213ffc8b196014ba10200492100006fa21bffc90103ffdd022600cd8226008c2226004e0226000e6213ffc9410000992100011d004a0047fff9f9088013ffc108000049010200188013ffc90102001d401200081c2a00688012004|@3888,131071|40,5,@608 64,4,@3890 112,5,@608 224,5,@3309 3890:O3|@24,@397,@3891 3891:S20|70757368416c6c4275743a206e6f20656e747279 3892:S25|5452414e535f54414228292e70757368416c6c427574283429 3893:C2,132|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffc9010200181c3e00601000000da213ff8fa022004fa213ff4d00220004000001a88013ff4d0213ffcd0012000da0120047fffffed88013ffc8c21a00c8b19600cba10200284100006fa21bffcd020a004ee012000ee20a00090100002ec01200c81c5a00688012010|@586,131071|56,5,@3894 3894:C2,392|9e13e002f606201880a1001b8bd02018c402200080a0bff132800056de213ffcde213ffcda213ff8fa022004fa213ff4fa022008fa213ff0fa02200cfa213fecee036008ee213fe8ac102001ec213fe496103ffd94103ffd92102005d0013ff0da037ffcf40360009fc6a00088013fe4808a20013280000501000000ea02200010800009e801200c113f01cb900220b8f40620209fc6a00001000000aa102001e801200ce6053ffcd0213ffcd0213ff8a4013ff8e4213ff49610200594100015d204e004d004e0081b3f019c9a0360587fffcc6688013ff4e201200cde04600080a3ffe53280000ea0102001c2046004da00601c80a3600132800009a0102001113f01cf900223acf40620209fc6a00001000000a0102001a0102001c2012014da007ffcd801200880a32001328000039610200196102005941ae004d4213ffc92102001d2213ff8d6012010d4012004d2036008d00360047ffffb6288013ff8d0012004c401201881c0a0068801201c113f01cf900223e4f40620209fc6a00088013ffc90102001|@3899,131071|136,4,@3865 200,4,@3629 208,5,@3631 256,4,@3895 344,5,@3867 368,4,@3897 3895:O3|@24,@397,@3896 3896:S29|4c6f6f704172673a20737461746963206c696e6b2066756e6374696f6e 3897:O3|@24,@397,@3898 3898:S29|67656e4c6f6f704172673a206e6f742061206465636c61726174696f6e 3899:S49|475f434f444528292e636f646567656e2831302967656e636465283629726573756c742d67656e4c6f6f70417267283129 3900:O1|@3901 3901:C2,16|9e13e0029010200581c3e00601000000|@3902,129| 3902:S28|5452414e535f54414228292e636c6561724361636865283129283129 3903:C2,44|9e13e002f606201880a1001b8bd02018d2213ffc8210000f9a013ffc4000000b88013ffc81c0600688012004|@3911,131043|28,5,@3904 3904:C2,140|9e13e002f606201880a1001b8bd0201880a2200132800005a410000f9010200181c3e00601000000a210000de0022004d00220009a1000114000001c01000000e4213ffce2213ff8d0213ff4901000109a1000117fffffeb88013ff48c21a00c8b19600cba1020029e100006fa21bffcd023e004da012000da23e0009010000fd201200881c260068801200c|@586,130979|56,5,@3905 3905:C2,220|9e13e002f606201880a1001b8bd02018c4036000a610000f92100008d000a00c7ffe5c3d0100000080a220013280000ade022000e6213ffc113f01d090022298f40620209fc6a00088013ffc90102001de022000da03e00080a37ff53280000d80a360098c21a00c8b19600cba10200290100006fa21bffcd203e004d222200484103ffdc422200081c4e006010000003280000de6213ffc8c21a00c8b19600cba10200290100006fa21bffcd203e004d222200484102001c422200081c4e00601000000113f01d0900222c8f40620209fc6a00088013ffc90102001|@3910,129187|32,5,@608 56,4,@3906 196,4,@3908 3906:O3|@24,@397,@3907 3907:S21|6765744c6f6f70446573743a206e6f20656e747279 3908:O3|@24,@397,@3909 3909:S29|6765744c6f6f70446573743a2077726f6e6720656e7472792074797065 3910:S48|5452414e535f54414228292e6765744c6f6f7044657374696e6174696f6e732832296765744c6f6f7044657374283129 3911:S34|5452414e535f54414228292e6765744c6f6f7044657374696e6174696f6e73283229 3912:O2|@3913,@3421 3913:C2,176|9e13e002f606201880a1001b8bd02018c402200cae102001ee20a000de213ffcd0213ff8da036004f40360009fc6a00088013ff8ec012000ea05a000e8056000e605a03ce404e00080a4a00132800004e205a0041080000fda012000a0102001e0246000e6213ffc9410001292100014901000167fffcab388013ffcde01200082102001c223e00088012004da012000d803600496102001d6232000d4036000d002a000d201200481c2600688012008|@3914,131071|116,5,@3624 3914:S22|5350415243434f4445434f4e5328292e69632d283129 3915:O3|@24,@397,@3916 3916:S27|4e6f20426567696e4c6f6f7020666f72204c6f6f7020696e737472 3917:C2,296|9e13e002f606201880a1001b8bd02018808a20013280004390102001808a60013280003e90102001c4026000ec00a00080a5a00132800009ae103ffd8c21a0088b196008ba102001ae100006fa21bffcea00a004ea25e000de213ffcda213ff8fa022004fa213ff4fa026004fa213ff0ea036008ea213feca8102001e8213fe896103ffd9410001792102005d0022000da037ffcf40360009fc6a00088013fe8808a20013280000501000000e602200010800009e6213ffc113f01d1900221d4f40620209fc6a00001000000a6102001e6213ffcd2012000d0012004da0120087fffffc888013ffc8c21a00c8b19600cba102002a4100006fa21bffcd024a004e2012000e224a00090100012e001201081c420068801201481c3e0060100000081c3e00601000000|@3920,131071|184,4,@3918 3918:O3|@24,@397,@3919 3919:S18|6576616c4172673a206e6f20726573756c74 3920:S15|4c697374506169722e6d6170283329 3921:C2,444|9e13e002f606201880a1001b8bd0201880a220013280000f808a600180a2600132800005de213ffc9010200181c3e00601000000113f01d1900223f0f40620209fc6a00088013ffc90102001808a600132800055de213ffcc4026000ee00a00080a5e0013280003cec037ffcde213ffcda213ff8fa022000fa213ff4fa00a004fa213ff0d2026004d00220047fffffdd88013ff0de012008da03fffcd0213ffc98102001d8213ff8d6012004d4012000d2036004d00360081b3f01c09a0361f87ffff7e488013ff8d601200cd402fffcd202a004d0213ffcd2213ff8fa026028fa213ff4d2026010d00120047fffc50a88013ff4d001200080a220012280000a8c21a00cd4012004133f01d29202602811000083900223d87fff9dae010000008c21a00c8b19600cba10200284100006fa21bffcee01200cee20a004ec012008ec20a00090100002ea01201c81c5600688012020de213ffcda213ff8fa022004fa213ff4fa026004fa213ff0d600a004d4022000d205a004d005a0081b3f01d29a03603c4000002f88013ff0d2012000d0012004da012008de01200c10bfff9a88012010113f01d1900223f0f40620209fc6a00088013ffc90102001|@3947,131071|52,4,@3922 184,4,@3795 192,5,@3861 236,5,@3564 264,4,@3924 272,4,I48 280,5,@3313 380,4,@3925 388,5,@3927 420,4,@3922 3922:O3|@24,@397,@3923 3923:S30|6d6f7665417267733a204d69736d61746368656420617267756d656e7473 3924:S12|6c6f636b5265676973746572 3925:O3|@3927,@3926,@3629 3926:O2|@3943,@3630 3927:C2,780|9e13e002f606201880a1001b8bd02018d2213ffcd0213ff8d6213ff4da213ff0d4213fecc4026030ee00a000b822e001ba25e00188013fec811f401c32800003ac102001ac102005d0213ffcd0213ff8a610000fa4100016de02600c9210000a9010000f7ffe5a7e88013ff880a220013280001e82012000e6213ffce4213ff892103ffd9010000a7ffe544b88013ff892100008113f019c900223607ffe52d6010000008c21a0108b196010ba10200382100006fa21bffcd02060081b3f000f9a0363bcda206004193ee008980321fcd820600090100001f40620209fc6a0000100000082012000d42060009a012000d0236004d8012004d2032000d002600080a23ff93280005780a2200580a4a0012280002eec026004ec0260049210001690103fe1400000810100000080a220012280002794102001ea01200ce6213ffcec213ff8d4012014d20120189010000bda056004f40360009fc6a00088013ff8e801201ce8213ffc96102001d40120009210200190103fe11b3f019f9a0363c87fffcd9588013ffc94103ffdd2012010d00120201b3f01789a03612c7fffa5d401000000e6012020e404e030e204a000b8246001b9172004a0072001e024a00010800041c40120209410200192103ffd90100016400001800100000080a2200122800018e6213ffcc401200ce6213ffcd4012014d20120189010000bda00a004f40360009fc6a00088013ffc113f01d49002207cf40620209fc6a0000100000094103ffdd201200cd001201c1b3f01789a03612c7fffa5ae01000000e6213ffc901020019a0120184000018488013ffcd0213ffc88013ffc1080001bc40120203280000980a23ff5e6213ffc901020019a0120184000017988013ffc10800010d0213ffc32800009e6213ffce6213ffc901020019a0120184000017088013ffc10800007d0213ffc901020019a0120184000016a88013ffcd0213ffc88013ffcc4012020ee00a030ec05e000ea00a018e8056000b8252001ba25a001811f401c2480000890102001e605e000e625600090102001e401200481c4a00688012024e601200481c4e00688012024|@3942,131071|100,5,@608 136,5,@509 148,4,@3632 156,5,@496 188,4,@397 200,4,@24 292,5,@3928 376,4,@3646 384,5,@3648 404,4,@3378 412,5,@3380 468,5,@3930 524,4,@3932 556,4,@3378 564,5,@3380 584,5,@3934 628,5,@3934 664,5,@3934 688,5,@3934 3928:C2,1132|9e13e002808a2001228000270100000080a23fd1268000240100000080a220313480002101000000053f01d28400a3c2ba02202dfa00801d81c0801d01000000000002c200000062000004120000006200000106000002aa000000fa000002ce0000040600000212000000ee00000062000000620000006200000292000001920000037a0000029e0000006200000062000000620000041e0000006200000112000002b6808a60012280002090102001808a600122800005de213ffcae10000910800009b825e001113f002990022348f40620209fc6a00088013ffcae102001b825e001811f30002680000e901020011300000492026001b8226001ba25e001811f401c36800005901020019010200581c3e0060100000081c3e0060100000081c3e0060100000081c3e006010000009010200181c3e006010000009010200581c3e006010000009010200181c3e00601000000808a60012280001d90102001808a600122800005de213ffcae10000910800009b825e001113f002990022348f40620209fc6a00088013ffcae102001b825e001811f20002680000b90102001b825e001811f207836800005901020019010200581c3e0060100000081c3e0060100000081c3e0060100000081c3e00601000000808a60012280001d90102001808a600122800005de213ffcae10000910800009b825e001113f002990022348f40620209fc6a00088013ffcae102001b825e001811f20002680000b90102001b825e001811f207836800005901020019010200581c3e0060100000081c3e0060100000081c3e0060100000081c3e00601000000808a60012280001d90102001808a600122800005de213ffcae10000910800009b825e001113f002990022348f40620209fc6a00088013ffcae102001b825e001811f20002680000b90102001b825e001811f207836800005901020019010200581c3e0060100000081c3e0060100000081c3e0060100000081c3e006010000009010200181c3e006010000009010200181c3e006010000009010200181c3e006010000009010200581c3e006010000009010200581c3e00601000000808a60012280002890102001808a600122800005de213ffcae10000910800009808de001113f002990022348f40620209fc6a00088013ffcae102001808de0012280001790102001133ffff092026001b825e001ba226001811f401c3480000e901020011100001090022001b8222001ba25e001811f401c36800005901020019010200581c3e0060100000081c3e0060100000081c3e0060100000081c3e0060100000081c3e00601000000808a60012280002090102001808a600122800005de213ffcae10000910800009b825e001113f002990022348f40620209fc6a00088013ffcae102001b825e001811f30002680000e901020011300000492026001b8226001ba25e001811f401c36800005901020019010200581c3e0060100000081c3e0060100000081c3e0060100000081c3e006010000009010200181c3e006010000009010200581c3e006010000009010200181c3e00601000000|@3929,98435|40,4,$3928+66 200,4,@542 240,4,1024 376,4,@542 504,4,@542 632,4,@542 820,4,@542 856,4,-4096 884,4,4096 992,4,@542 1032,4,1024 3929:S28|5350415243434f4445434f4e5328292e696e73747249735249283229 3930:C2,16|9e13e0029010200181c3e00601000000|@3931,135| 3931:S27|5350415243434f4445434f4e5328292e697353746f726549283329 3932:O3|@24,@397,@3933 3933:S26|4e6f7420696d706c656d656e7465643a2067656e53746f726549 3934:C2,504|9e13e002f606201880a1001b8bd02018d0213ffcd0213ff8c4037ff4de213ff4da213ff0ae013ff8ee213fec96102001d4037ff0d2036000d0037ffcda00a008f40360009fc6a00088013fecec012000ea05a000ea213ffcfa056028fa213ff8d2056010d00120087fffc28588013ff8e801200080a520012280000ae6012008d4012004133f01d29202602811000083900223d87fff9b2901000000e6012008e404fff4d404fffcd204e000d004fff8da04a004f40360009fc6a00001000000e2012008e0046000de042030c203e000da047ff8b8236001ba206001811f401c32800012d803e000d2047ffcd00120101b3f01809a0360ac7fffabc901000000d8012008d6032000d402e030d202a000b8226001b917200490072001d022a00010800018ee012008b8236001ba232001b91f401c96072001b91f200494072001ba10001cbb17401db917401d9207200190102001d0213ffcc4047ffcc4213ff896103ffd94102011d00120101b3f01d49a0362c44000002f88013ff8ee012008ec05e000ec213ffcfa05a028fa213ff8d205a010d00120107fffa4cd88013ff8ea01200080a560012280000ae8012010d4012004133f01d59202617411000083900223d87fff9add01000000e801201094103ffdd201201cd00520001b3f01789a03612cde012014353f0178b406a14481c6a00488012020|@3941,131071|104,5,@3564 132,4,@3924 140,4,I48 148,5,@3313 240,4,@3420 248,5,@3422 364,4,@3935 372,5,@3936 408,5,@3384 436,4,@3940 444,4,I48 452,5,@3313 476,4,@3378 488,4,@3380 3935:O6|@3936,@3424,@3432,@3530,@3517,@3495 3936:C2,528|9e13e002f606201880a1001b8bd0201880a2fffd32800036de213ffcd601200480a2e0013280000a80a26001c4012000ae103fd5ee21200496100002da036004f403600081c6a0048801200432800004de213ffc10800009de213ffc92100008113f01d59002210cf40620209fc6a00088013ffcde213ffcda213ff8d0213ff4d4213ff0d20120009010000bda03600cf40360009fc6a00088013ff090103fd57fffac2f01000000d4012004d4213ffc96102071d4012000921000089010200d7fffad4788013ffcd2012008c4012010ee026008921000029a100017de01200cf403600081c6a00488012018da213ff8d2213ff4d4213ff084102039c4213fecd601200094102075d2036014da036010f40360009fc6a00088013fecee01201480a5e0013280000fec012004ec012008ea012010a8103fd1e821201496100015d4012000d201200490102075da05a004de01200cf403600081c6a0048801201480a5a001328000040100000010800008ea012010113f01d59002210cf40620209fc6a00001000000ea012010e805600ca6102001e6252000e4012008a2103fc9e2213ffc9610001594102071d204a01490100017da04a010f40360009fc6a00088013ffc90103fd17fffabe501000000a0102075e0213ffc96102071d4012000921000089010200d7fffacfd88013ffcde012008c201201092100001da03e008de01200cf403600081c6a00488012018|@3939,131071|96,4,@3937 160,5,@3427 192,5,@3429 372,4,@3937 456,5,@3427 488,5,@3429 3937:O3|@24,@397,@3938 3938:S44|67656e53746f72653a20696e64657820726567697374657220616e64206e6f6e2d7a65726f206f6666736574 3939:S27|5350415243434f4445434f4e5328292e67656e53746f7265283629 3940:S14|756e6c6f636b5265676973746572 3941:S49|5452414e535f54414228292e73746f7265496e537461636b28342967656e6572616c53746f7265496e537461636b283129 3942:S27|5452414e535f54414228292e73746f7265496e537461636b283429 3943:C2,148|9e13e002f606201880a1001b8bd02018b8222001811f20002680001d90102001c4026030ee00a000b825e001ba222001811f401c3680001690102001fa02600cfa213ffcd4213ff8d2213ff4da213ff0d0213fecec02601cea05a000b825600188013fecb91f2004a8072001de213ffc901000149a0120104000000e88013ffce601200081c4e0068801201881c3e00601000000|@3946,131071|120,5,@3944 3944:C2,600|9e13e002f606201880a1001b8bd02018b8222001811f200036800005c4037ff89010200181c3e00601000000a610000fa410000da210000892100011d000a00c7ffe56f601000000808a200132800075e6213ffcde022000da03e00080a37ff532800069e6213ffcd204bff0b8226001ba10001cbb17401db917401dba102000b91f401c84072001ee03e004ba25e001811f401c32800055e6213ffcec022004ea02200892102001901000157fff9e3b0100000080a2200122800005e804bff4a810001510800028e6213ffce6213ffce4213ff8e2213ff4ee213ff0ec213fecd204bffcd004bff8da052004f40360009fc6a00088013fece601200ce404fff8e204a030e0046000b8242001b91f20049e072001ba10001cbb17401db917401d82072001da012004ba236001b917401c98072001d0213ffcd604fffc94100008921020119010000c1b3f018b9a0363207fffb5d288013ffce80120001080000788012004e4213ff8e2213ff4d0213ff0ec213fec88013fec8c21a00c8b19600cba102002a6100006fa21bffce824e004a4102009e424e0008c21a0148b196014ba102004a2100006fa21bffca0103ffde024600c9e102001de246008c2012000c2246004e6246000da01200c94100011d2012008d00360007fff98a90100000010800016e0012008e4213ff8e2213ff4d0213ff0d0213fec88013fec1080000fe0012008e4213ff8e2213ff4d0213ff0d0213fec88013fec10800008e0012008e4213ff8e2213ff4d0213ff0d0213fec88013fece0012008b8242001b91f20049e0720019010000fda01200cde01201010bfff6d88012014|@3945,131071|64,5,@608 172,5,@3347 328,4,@3489 336,5,@3490 472,5,@3309 3945:S56|5452414e535f54414228292e6c6f6164456e7472794265666f72654f76657277726974696e6728332966696e64546865456e747279283129 3946:S41|5452414e535f54414228292e6c6f6164456e7472794265666f72654f76657277726974696e67283329 3947:S47|475f434f444528292e636f646567656e2831302967656e636465283629726573756c742d6d6f766541726773283229 3948:O6|@3950,@3432,@3949,@3421,@3517,@3489 3949:O4|139,208,32,24 3950:C2,568|9e13e002f606201880a1001b8bd02018c402a00cae102001ee20a000de213ffcda213ff8d0213ff4d2213ff0d4213fec9010000ada03600cf40360009fc6a00088013fecec01200480a5a0012280003eea012000ea01200cd60120009410206d9210206190102061da056014f40360009fc6a00001000000e8012000e6052000e404e000e205203ce004600080a4200132800004de0520041080000fd601200c82102001c223e000e2213ffc9410001092100012901000147fffc50388013ffcda01200098102001d823600088012004d601200c94102041d4213ffcd202e010d60120009410200190100009133f018b9202612884100008901020119a100002f40360009fc6a00088013ffcee01200cd0012000da05e00cf40360009fc6a00001000000ec01200cd2012000d005a008da05a004f40360009fc6a00001000000ea012000e8056000e6052000e405603ce204a00080a4600132800004e00560041080000fd80120009e102001de242000e4213ffc9410001192100013901000157fffc4d188013ffcc20120009a102001da20600088012004d8012000d6032000d402e000d2012008b822a001ba226001b91f401c9007200184100008901020017fffb2af01000000b820a001811f200036800008ae1000022d004000ac05a001b820a001ba25a001b917401cae07200194102061921000177fffb2d801000000ee01200c9210000cda05e004f40360009fc6a00001000000ec012000ea05a004a8102005e825600090102001e601201081c4e00688012014|@3951,131071|184,5,@3624 236,4,@3485 384,5,@3624 448,5,@3479 472,4,4194304 504,5,@3481 3951:S27|5350415243434f4445434f4e5328292e6a756d706261636b283329 3952:C2,48|9e13e002c4036004b820a001ba222001811f401c32800005901020019010200581c3e0060100000081c3e00601000000|@3953,65697| 3953:S35|5452414e535f54414228292e707573685370656369666963456e747279283329283129 3954:C2,132|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffc9010200181c3e00601000000da213ff8fa022004fa213ff4d00220004000001a88013ff4d0213ffcd0012000da0120047fffffed88013ffc8c21a00c8b19600cba10200284100006fa21bffcd020a004ee012000ee20a00090100002ec01200c81c5a00688012010|@586,131071|56,5,@3955 3955:C2,368|9e13e002f606201880a1001b8bd02018c4037ffcae10000fac10000daa100008d000a0047fffc32d01000000de05bffcb8222001b91720049a072001d0213ffcd0213ff8ee213ff4ec213ff0ea213fecd0213fe896013ff89410000dd203e008d003e0041b3f01d79a0363084000005088013fe88c21a00c8b19600cba10200298100006fa21bffcd6012010d6232000d4012014d4232004d2012008d8213ffcd0026008d0213ff884102001c4213ff496103ffd94103ffdee027ffc92102005d00120049a100017f40360009fc6a00088013ff4808a20013280000501000000ec02200010800009ea01200c113f01cb900220b8f40620209fc6a00001000000ac102001ea01200ce8057ffce6012004b824e001b9172008a40720019610001294100016d2052004d00520081b3f01d79a0363184000008401000000e201200ce0047ffc94103ffd92100008d00420041b3f01789a03612c7fffa09c01000000d0012000de01201081c3e0068801201c|@3973,131071|36,5,@3615 100,4,@3956 108,5,@3958 236,4,@3865 300,4,@3957 308,5,@3961 336,4,@3378 344,5,@3380 3956:O3|@3958,@3957,@3630 3957:O3|@3961,@3960,@3925 3958:C2,332|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d0213ff4d2213ff0d4213fecd6213fe8da036008f40360009fc6a00088013fe8c401200cee00a01cec05e0008c21a0088b1960083b100000ba076001aa100006fa21bffca8102001e82560008c21a00c8b19600cba102002a6100006fa21bffcea24e004a4103ffde424e000d0213ffcec213ff8ea213ff4d401200892100008901000131b3f01a69a0362907fffceb588013ff48c21a00c8b19600cba102002a2100006fa21bffce0012008e02460049e102009de246000d401201892100011113f0199900221a87fff966201000000c201201cd601201094100008d2012018d0012014da006004f40360009fc6a0000100000094103ffd92100008d00120181b3f01789a03612c7fffa03f01000000da01200cd8012000d8236000d6012004d623600490102001d401202081c2a00688012024|@3959,131071|156,4,@3659 164,5,@3660 216,4,@3609 224,5,@3308 280,4,@3378 288,5,@3380 3959:S26|5452414e535f54414228292e7075736841646472657373283429 3960:O2|@3966,@3630 3961:C2,308|9e13e002f606201880a1001b8bd02018b822e001b91f200484072001de213ffcda213ff8d0213ff4d2213ff0d6213fec96100002da036008f40360009fc6a00088013fecee012004ec05e030ea05a000e8012000b8252001ba256001811f401c2480000ba6102001e401200c9410001492100017d0012008da04a004f40360009fc6a00001000000a6100008e6012000b824e001b91f2004a4072001ba10001cbb17401db917401dba102000b91f401ca20720018c21a00c8b19600cba102002a0100006fa21bffce22420049e103ff5de242000d401200492100010113f01d8900222107fff95fb01000000c2012004da006030d8036000d6012000b822e001ba232001811f401c22800009d401201094100008113f01d890022228f40620209fc6a00001000000d401201081c2a00688012014|@3965,131071|220,4,@3962 228,5,@3308 276,4,@3963 3962:S16|7075736856616c7565546f537461636b 3963:O3|@24,@397,@3964 3964:S40|7075736856616c7565546f537461636b3a20436f756c646e2774207075736820746f20737461636b 3965:S31|5452414e535f54414228292e7075736856616c7565546f537461636b283429 3966:C2,276|9e13e002f606201880a1001b8bd02018c4026030ee00a000fa02600cfa213ffcd0213ff8d2213ff4da213ff0d4213fecec02601cea05a000b825600188013fecb91f2004a8072001de213ffcfa026028fa213ff8ee213ff4901000149a0120104000003488013ff4e6012014e404e030e204a000e0012000b8242001ba246001811f401c22800008de04a000113f01d990022278f40620209fc6a00001000000de04a000c201200cb8206001ba23e001b91f401c9a072001d20120189010000d7fffc1cd01000000c224a000d801200480a320012280000d90102001d00120187fffa4ba01000000d4012014133f01d9920262c0de012008353f016fb406a1e881c6a00488012020d601200881c2e00688012020|@3972,131071|96,5,@3967 140,4,@3969 192,5,@3616 224,5,@3412 236,4,@3971 248,4,@3313 3967:C2,616|9e13e002f606201880a1001b8bd02018b8222001811f200036800005c4037ff89010200181c3e00601000000a610000fa410000da210000892100011d000a00c7ffe53ad01000000808a200132800079e6213ffcde022000da03e00080a37ff53280006de6213ffcd204bff0b8226001b91f200484072001ba10001cbb17401db917401dba102000b91f401cae072001ec03e004ba25a001811f401c36800057e6213ffcea022004e802200892102001901000147fff9af00100000080a2200122800005e004bff4a01000141080002ae6213ffce6213ffce4213ff8e2213ff4ec213ff0ea213fecd204bffcd004bff8da042004f40360009fc6a00088013fecde01200cc203fff8da006030d8036000b8232001b91f200496072001ba10001cbb17401db917401dba102000b91f401c94072001d2012004ba226001b91f401c84072001d0213ffcd603fffc9410000892102011901000021b3f018b9a0363207fffb28588013ffce00120001080000788012004e4213ff8e2213ff4d0213ff0ea213fec88013fecde01200c8c21a00c8b19600cba10200282100006fa21bffce02060049a102009da2060008c21a0148b196014ba10200498100006fa21bffc96103ffdd623200c94102001d4232008d2012000d2232004c22320009410000cd2012008d003e0007fff955c0100000010800016e0012008e4213ff8e2213ff4d0213ff0d0213fec88013fec1080000fe0012008e4213ff8e2213ff4d0213ff0d0213fec88013fec10800008e0012008e4213ff8e2213ff4d0213ff0d0213fec88013fece0012008b8242001b91f20049e0720019010000fda01200cde01201010bfff6988012014|@3968,131071|64,5,@608 180,5,@3347 344,4,@3489 352,5,@3490 488,5,@3309 3968:S43|5452414e535f54414228292e726573657442757452656c6f61642833296c6f6164456e7472696573283129 3969:O3|@24,@397,@3970 3970:S47|726573657442757452656c6f61643a206d75737420686176652070757368656420736f6d657468696e67206d6f7265 3971:S14|726573657442757452656c6f6164 3972:S29|5452414e535f54414228292e726573657442757452656c6f6164283329 3973:S45|475f434f444528292e636f646567656e2831302967656e636465283629726573756c742d67656e546167283129 3974:C2,148|9e13e002f606201880a1001b8bd0201880a2200132800005c4037ffc9010200181c3e00601000000de213ffcda213ff8fa022004fa213ff4d600a008d400a004d2037fd8d00220004000001a88013ff4d0213ffcd0012000da0120047fffffe988013ffc8c21a00c8b19600cba102002ae100006fa21bffcd025e004ec012000ec25e00090100017ea01200c81c5600688012010|@586,131071|72,5,@3975 3975:C2,336|9e13e002f606201880a1001b8bd02018de213ffcd2213ff8d4213ff4d6213ff0fa022000fa213fecfa022004fa213fe892102001113f01d0900220587fffa12188013fe8c401200cee00a030ec012010ec25e000ea00a000a8102001e8256000e600a014a4102001e424e000e200a01ce0046000b8242001b91f20049e0720018c21a00c8b19600cba10200282100006fa21bffc1b3f01da9a036154da206000d8012000d82060049010000f9a100001f40360009fc6a00001000000d602200880a2e0012280001bd2012008d0213ffcd4022004901020019a10000af40360009fc6a00088013ffcd401201092100008901020011b3f01789a0361387fff9e7d01000000d201200090102001da026000f40360009fc6a0000100000088012004f606201880a1001b8bd0201830bfffe4d00120041b3f01da9a036280de012014353f01dab406a28c81c6a00488012018|@3982,131071|52,4,@3900 60,5,@3401 148,4,@3976 244,4,@3379 252,5,@3383 308,4,@3979 320,4,@3980 3976:C2,148|9e13e002c4036004b820a001ba222001811f401c26800003ae102001ae1020058c21a0108b196010ba102003ac100006fa21bffc2b3f01daaa056204ea25a000da25a008d025a0048c21a00c8b19600cba102002aa100006fa21bffc293f01daa8052254e8256000d02560048c21a0108b196010ba10200390100006fa21bffcee222008ea222004ec22200081c3e00601000000|@3594,127137|52,4,@3977 92,4,@3978 3977:C2,52|9e13e002f606201880a1001b8bd02018c4036004b820a001b91f2004ae07200190100017da036008f403600081c6a00401000000|@3592,131071| 3978:C2,16|9e13e002d003600481c3e00601000000|@3592,161| 3979:O2|@3980,@3421 3980:C2,196|9e13e002f606201880a1001b8bd02018c402600cae102001ee20a000de213ffcd0213ff8d2213ff490100009da036004f40360009fc6a00088013ff4ec012000ea05a000e8056000e605a03ce404e00080a4a00132800004e205a0041080000fda012000a0102001e0246000e6213ffc9410001292100014901000167fffc0ea88013ffcde01200082102001c223e00088012004da012000d803600496102001d6232000d4036000d202a000d0012004d222200090102001c401200881c0a0068801200c|@3981,131071|124,5,@3624 3981:S31|5350415243434f4445434f4e5328292e666978757048616e646c6572283229 3982:S21|5452414e535f54414228292e666978757048283429 3983:O2|2,8 3984:O3|@24,@397,@3985 3985:S17|43617365202d206e6f2064656661756c74 3986:O1|@3987 3987:C2,164|9e13e002f606201880a1001b8bd0201880a2200132800005c40220009010200181c3e00601000000de213ffcfa022004fa213ff8ae102001ec00a00488013ff880a5a00132800005b825e001aa1000171080000aea213ffcb91720049e072001ec05a004ae10000ff606201880a1001b8bd0201830bffff3d00120007fffffe188013ffcde012000b8222001ba23e001b917401c90072001c401200881c0a0068801200c|@3988,123009| 3988:S49|475f434f444528292e636f646567656e2831302967656e636465283629726573756c742d636f756e744361736573283129 3989:C2,2364|9e13e002f6062018ba21206480a7401b8bd0201880a2200132800015de213ffcd6037fdc80a2e0012280000f90102001d4037ffcd2036004d2213ffcd6036008d002a00cd4037ff4d2037fd484100008d0037fe49a100002f403600081c6a00488013ffc81c3e00601000000da213ff8d2213ff4d4213ff0d6213fecfa022000fa213fe8fa022004fa213fe4d6037fe094100009d2013ff0d0013fec4000022f88013fe480a2200122800146c4012014c4012014ee00bffcd005e0047fffde7101000000ec012014ea05bffcd0213ffcd0213ff8d0213ff4a8013ff8e8213ff096102005d405bfd8d2056004d00560081b3f019c9a0360587fffc0a288013ff0e6012020e404fffc94103ffdd2012008d004a0041b3f01789a03612c7fff9cce01000000e2012020e0047ffcde042004de213ffcfa03e028fa213ff8d203e010d00120047fffbb3e88013ff8c201200080a060012280000a9a102001d4012004133f01d29202602811000083900223d87fff93e2010000009a100008da012028d8037ffcd2032008d00320041b3f019c9a0360647fffcfea01000000d6012028d402fffcd202a004d0213ffcd20260107fff9db788013ffcd001202cc4023ffcee00a004ee213ffcfa05e028fa213ff8d205e010d00120107fff9dad88013ff8ec01200080a5a0012280000aaa102001d4012004133f01d59202617411000083900223d87fff93bd01000000aa100008ea012034e8057ffce6057fe0e6213ffce4052008e4213ff8d601202cd4012028d2012008d00120181b3f01dd9a0363744000021c88013ff8e2012034e0047ffcd0213ffcd2042008d00420047fffde7388013ffcde012038c203fffcda006004d803601cd6032000d0213ffcda213ff8fa006008fa213ff4d6213ff094102001d4213fec96102001d4013ff49210000d1b3f01bd9a0362cc7fffe1d088013fecd2012004d002600084102001c4222000ee026014ac102001ec25e000d00120001b3f01d09a0363647ffff4ea01000000ea012044e8057fdc80a5200122800064e6057ffce4057ffcd0213ffce2056004e2213ff8d6056008d4057ff4d2057fd4d0057fe4da04a00cf40360009fc6a00088013ff8e0012048de043ff480a3e0013280001398100008c2043ffc98100008d00060047fffe06f0100000080a220013280000c96102001d8213ffc90102001da006010f40360009fc6a00088013ffc9610000810800006c201204c96102001d8213ffc88013ffcc201204cda007ffcd8036004d6032014d402e00080a2a00122800005d8213ffc921020011080001fe6012000fa036008fa213ff8d2013ff89010000c7fffde1988013ff8d2012004c4026014ae102005ee20a000d0213ffcd00120001b3f01a89a0362387fffcc5d88013ffc8c21a0108b196010ba102003ac100006fa21bffcea01200cea25a008e8012000e825a004d025a000921000168801200ce6012000808ce0013280000fa4102001e201204ce0047ffcd2213ffc94103ffdd204e000d00420041b3f01789a03612c7fff9c0088013ffca410000810800032e6012000d2213ffc88013ffce60120001080002e8c21a00ce404e004e204a014e004600080a4200122800005d0213ffca610200110800020d0213ffce4213ff8fa04e008fa213ff4d2013ff4901000127fffdddd88013ff4de012004c203e0149a102005da206000d0213ffcd00120001b3f01a89a0362387fffcc2188013ffc8c21a0108b196010ba10200398100006fa21bffc96102001d6232008d4012000d4232004d0232000a610000c108000038801200c88013ffcd0213ffcd0213ff888013ff88c21a00c8b19600cba1020029e100006fa21bffcc201203cc223e004da012040da23e000e6213ffc9210000f901020019a0120544000028988013ffcd8012054d6033ffcfa02e004fa213ffcd4012034d4213ff8d202e0089610000894100009d2013ffcd00120001b3f01bc9a0362207fffdff188013ff8c4012000ee012038ec00a008ea05e004ea25a000e801205c81c5200688012060ee00bffcd005e0047fffdd2e01000000ec012014ea01200080a5600132800003a8102001a810200580a5200132800011a6102001e405bffcd0213ffcfa05bfe0fa213ff8e8213ff494102005d205bfd8d004a0041b3f01789a03612c7fff9b8e88013ff4a610000810800008e8012010d0213ffcfa05bfe0fa213ff8e8213ff488013ff4e8012010fa052000fa213ffcfa052004fa213ff8d0013ff89a012024400004e588013ff8e601200880a4e0013280000fa4102001e2012028e0047ffcd0213ffc94103ffdd2047fd8d00420041b3f01789a03612c7fff9b6f88013ffca410000810800005e401202cd0213ffc88013ffce401202ce204bffce004a004e0213ffcd604a008d404bff4d204bfd4d0012008da04600cf40360009fc6a00088013ffcde01202cc203fff480a060013280001598100008da03fffc98100008d00360047fffdf7f0100000080a220013280000e96102001d401202cd202bffcd8213ffc90102001da026010f40360009fc6a00088013ffc9610000810800006da01203096102001d8213ffc88013ffcda012030d8037ffcd6032004d402e014d202a00080a2600122800005d6213ffc901020011080001fe4012000fa032008fa213ff8d2013ff89010000b7fffdd2788013ff8c4012004ee00a014ac102005ec25e000d0213ffcd00120001b3f01a89a0362387fffcb6b88013ffc8c21a0108b196010ba102003aa100006fa21bffce801200ce8256008e6012000e6256004d0256000901000158801200ce4012000808ca0013280000fa2102001e0012030de043ffcd0213ffc94103ffdd204a000d003e0041b3f01789a03612c7fff9b0e88013ffca210000810800005e2012034d0213ffc88013ffce2012034e0047ffcd4042008d2042004d00120081b3f01e59a0361ec4000082d01000000de01201880a3e0012280000582102001c20120041080001ed0012034da01200c80a3600132800005b8206001981000011080000ad6012030b917200496072001da0360048210000bf606201880a1001b8bd0201830bffff3b8232001ba22e001b91f401c94072001d60120289210000ad401202cd0012020da0120347ffffdcb9e13e00282100008d0012034c4023ffcfa00a004fa213ffcee01201cee213ff896100001d400a008d2013ffcd00120001b3f01bc9a0362207fffdf1288013ff8ec012000ea012020e805a008e6056004e6252000e401203c81c4a00688012040|@4037,131071|156,5,@3990 188,5,@3750 240,4,@3629 248,5,@3631 276,4,@3378 284,5,@3380 324,5,@3564 352,4,@3924 360,4,I48 368,5,@3313 396,4,@3630 404,5,@3695 432,5,@3384 472,5,@3384 500,4,@3940 508,4,I48 516,5,@3313 568,4,@3992 576,5,@3993 604,5,@3753 672,4,@3777 680,5,@3778 720,4,@3912 728,5,@3913 836,5,@3772 964,5,@3753 996,4,@3673 1004,5,@3674 1100,4,@3378 1108,5,@3380 1204,5,@3753 1236,4,@3673 1244,5,@3674 1372,5,@3998 1424,4,@3773 1432,5,@3775 1480,5,@3750 1556,4,@3378 1564,5,@3380 1632,5,@4014 1680,4,@3378 1688,5,@3380 1796,5,@3772 1932,5,@3753 1964,4,@3673 1972,5,@3674 2068,4,@3378 2076,5,@3380 2124,4,@4032 2132,5,@4033 2316,4,@3773 2324,5,@3775 3990:C2,228|9e13e002f606201880a1001b8bd02018808a20012280003290102001808a60012280002d90102001b822a001811f201c2480002790102001b8222001ba226001b91f401c96072001811f200026800003921020019210200580a2600532800005b822e0019010000b10800005de213ffcb91f200890072001de213ffcd4213ff89210200d1b0000859a036378f40360009fc6a00088013ff8c4012000b8222001ba20a001811f401c268000069010200190102005ee01200481c5e00688012008ee01200481c5e0068801200881c3e0060100000081c3e0060100000081c3e00601000000|@3991,131071|132,4,I109 3991:S33|5350415243434f4445434f4e5328292e757365496e646578656443617365283429 3992:O10|@3993,@3664,@3979,@3619,@3548,@3540,@3432,@3710,@3659,@3647 3993:C2,872|9e13e002f606201880a1001b8bd02018c401200480a0a00122800005de213ffcae1020011080003fde213ffcda213ff8d0213ff4d2213ff0d4213fecd6213fe8d6012000153f000f9402a0cc92102001da036024f40360009fc6a00088013fe8ee012010d0213ffcd6012018153f00369402a010d2012004d001200cda05e024f40360009fc6a00088013ffcec012014d0213ffcd601201c153f01de9402a324d2012004d0012010da05a024f40360009fc6a00088013ffc80a2200132800005d0213ffcea0120001080000980a56001d00120009a01201c400000ae88013ffcaa1000088801200480a5600132800005ea213ffcee0120041080000801000000d00120049a01201c400000c588013ffcae100008880120041080000888012008da213ff8d0213ff4d2213ff0d4213fecd6213fe888013fe88c21a0088b1960083b100000ba076001ac100006fa21bffcaa102001ea25a0008c21a00c8b19600cba102002a8100006fa21bffcec252004a6103ffde6252000e4012010ee213ffcec213ff8d4012018d201200890100014da04a020f40360009fc6a00088013ff8e201200cb8246001ba10001cbb17401db917401da0072001b91720049e072001b917200882072001ba102000b91f401c9a072001d0213ffcd0213ff8d801201892013ff89010000dda03201cf40360009fc6a00088013ff8d601200080a2e001328000040100000010800015d401202080a2e00132800004d401202010800010d4012020fa02e004fa213ffcd2012028d002e000da02a018f40360009fc6a00088013ffcd601200088012004f606201880a1001b8bd0201830bfffeed6012028d202a0149410207590100009d201200484100008d001201c9a100002f40360009fc6a00001000000ee012020ac102001ec213ffcd601202894102075133f018f920261d0d0012018da05e010f40360009fc6a00088013ffcea012020d601202894102001d2012018113f018f900221d0da05600cf40360009fc6a00001000000e8012020d2012028d0012008da052008f40360009fc6a00001000000e6012028e404e000e204a000e0012010de012014b823e001ba242001b91f401c82072001b91720049a072001ba246001b917401c98072001d824a000d6012020e2213ffc92100013d001200cda02e004f40360009fc6a00088013ffcd0012000d401202881c2a00688012034|@3997,131071|68,4,@375 108,4,@1085 152,4,@3994 216,5,@3995 264,5,@3996 668,4,@3514 712,4,@3514 3994:O2|-2,10 3995:C2,112|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffcd0037fe081c3e00601000000da213ff8fa022000fa213ff4d00220047ffffff288013ff48c21a00c8b19600cba1020029e100006fa21bffcd023e004da012000da23e0009010000fde01200881c3e0068801200c|@1966,161| 3996:C2,112|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffcd0037fe081c3e00601000000da213ff8fa022000fa213ff4d00220047ffffff288013ff48c21a00c8b19600cba1020029e100006fa21bffcd023e004da012000da23e0009010000fde01200881c3e0068801200c|@1966,161| 3997:S30|5350415243434f4445434f4e5328292e696e646578656443617365283629 3998:C2,904|9e13e002f606201880a1001b8bd02018808a6001328000d7de213ffcc4026000ee037ffcec05fffcea05a004e805601ce6052000de213ffcda213ff8d0213ff4fa00a000fa213ff0fa00a004fa213fecfa026004fa213fe8ea213fe4fa05a008fa213fe0e6213fdca4102001e4213fd896102001d4013fe092100015d0037fc01b3f01bd9a0362cc7fffde7888013fd8e2012004e00460009e102001de242000c20460149a102001da206000d00120001b3f01d09a0363647ffff19201000000d8012018d6033ffcd402fffc92100008d002a0047fffda8b01000000d2213ffca8100008d001200c9a01201c400000ae88013ffce401201880a4a001328000059a012020a610000810800006e8213ffc400000ea01000000a6100008e8213ffce6213ff8e202e004e2213ff4e002ffd4de02fff4c202e00896100001da02a00c9410000f92100010d0012014f40360009fc6a00088013ff4d8012024d6033ffcd402fff480a2a00132800013ae100008d202fffcae100008d00260047fffdd010100000080a220013280000cac102001ee213ffc90102001da026010f40360009fc6a00088013ffcac10000810800006d2012018ac102001ee213ffc88013ffcd201201880a2600132800013d0012028d0012028c4023ffcee00bffcec023ff4ec213ffcea05e008ea213ff8d6023ff0d4023fb4d2012004d0023fc4400000d288013ff8d0012000e801202c81c5200688012030c4023ffcee00bffcec05e004ea05a014e805600080a5200122800005ec213ffca61020011080001fda012000fa05e008fa213ff8d2013ff8901000167fffda9688013ff8e6012004e404e014a2102005e224a000d0213ffcd00120001b3f01a89a0362387fffc8da88013ffc8c21a0108b196010ba102003a0100006fa21bffcde01200cde242008c2012000c2242004d0242000a61000108801200cda012000808b60013280001098102001d6012028d402fffcd202bffce6213ffc94103ffdd0026004d20360001b3f01789a03612c7fff987c88013ffc9810000810800005d201201ce6213ffc88013ffcd201201cd0012008da01202c7fffff3e9e13e002d801202cd6033ffcd402fffcfa02a004fa213ffcd201200cd2213ff896100008d402a008d2013ffcd00120001b3f01bc9a0362207fffdca588013ff8c4012000ee012010ec00a008ea05e004ea25a000e801203481c5200688012038113f01e190022270f40620209fc6a00088013ffc90102001|@4013,131071|128,4,@3777 136,5,@3778 176,4,@3912 184,5,@3913 212,5,@3750 236,5,@3999 272,5,@4002 380,5,@3772 508,5,@4003 592,5,@3753 624,4,@3673 632,5,@3674 732,4,@3378 740,5,@3380 832,4,@3773 840,5,@3775 880,4,@4011 3999:C2,168|9e13e002f606201880a1001b8bd0201880a2200132800005c40220009010200181c3e00601000000ee0220048c21a00c8b19600cba10200290100006fa21bffcec037fe0ec222004c42220008410000faa10000d4000001c01000000c4213ffcea213ff8d0213ff4901000179a1000157fffffe488013ff48c21a00c8b19600cba1020029e100006fa21bffcd023e004da012000da23e0009010000fc401200881c0a0068801200c|@586,123041|84,5,@4000 4000:C2,12|9e13e00281c3e00601000000|@4001,129| 4001:S30|5350415243434f4445434f4e5328292e636f6e7374724361736573283129 4002:C2,112|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffcd0037ff881c3e00601000000da213ff8fa022000fa213ff4d00220047ffffff288013ff48c21a00c8b19600cba1020029e100006fa21bffcd023e004da012000da23e0009010000fde01200881c3e0068801200c|@1966,161| 4003:C2,80|9e13e002f606201880a1001b8bd02018d6213ffcd0213ff8d4213ff4de213ff0d2213fec9010000b9a013ffc4000001088013fecd00120009a012010400000cf01000000c401200481c0a0068801201c|@4010,131071|44,5,@4004 60,5,@4008 4004:C2,216|9e13e002f606201880a1001b8bd02018c4036008b820a001ba222001811f401c3480002c90102001ee037ff8ec037ffcb825a001ba25e001b91f401caa072001ba10001cbb17401db917401da8072001ea036000b8256001ba222001b91f401ca6072001ba25a001b917401ca4072001a2100008b8252001b91f200890072001de213ffcda213ff8e2213ff4e4213ff04000001988013ff0e0012008de042004d403e008d20120007fffa3ee01000000c2012004b8206001b917200490072001da012008de01200c10bfffcf8801201081c3e00601000000|@4007,131071|144,5,@4005 168,5,@3444 4005:C2,416|9e13e002f606201880a1001b8bd02018b8222001811f200026800003841020018410200580a0a0053280000501000000ae10000810800009de213ffc050000ff8400a3fdb820a001ba222001b91f401cae072001de213ffcd0213ff81300010092026001901000171b0000859a036378f40360009fc6a00088013ff8808a20012280000501000000ae10000810800009ee213ffc113f002990022348f40620209fc6a00001000000ae102001ee213ffc1300010092026001d00120001b0000859a036398f40360009fc6a00088013ffc80a2200132800004b82220011080000fac100008811f200026800003ac102001ac10200580a5a00522800008ac1000082d000100ac05a001b825a001ba222001b917401cac072001808da0012280000501000000aa10001610800009e8012000113f002990022348f40620209fc6a00001000000aa102001e8012000bb352008b82f6003a6072001a40d23fdbb356008b82f6003a2072001a00d63fd8c21a0148b196014ba1020049e100006fa21bffce023e00ce223e008e423e004e623e0009010000fc201200881c060068801200c|@4006,131071|60,4,65535 92,4,65536 104,4,I109 148,4,@542 176,4,65536 188,4,I110 256,4,65536 304,4,@542 4006:S25|5350415243434f4445434f4e5328292e746f51756164283129 4007:S48|5350415243434f4445434f4e5328292e6d616b654a756d705461626c65283629707574496e44656661756c7473283129 4008:C2,200|9e13e002f606201880a1001b8bd0201880a2200132800005c40220009010200181c3e00601000000ee00a004ec037ffcb825a001ba25e001b91f401caa072001ba10001cbb17401db917401da8072001ea00a000e6036000b824e001ba256001b91f401ca4072001ba25a001b917401ca2072001e0022004b8252001b91f200890072001de213ffcda213ff8e0213ff4e2213ff07fffff5588013ff0de012008c203e004d4006008d20120007fffa32a01000000d0012004da012008de01200c10bfffd188012010|@4009,131071|148,5,@4005 172,5,@3444 4009:S45|5350415243434f4445434f4e5328292e6d616b654a756d705461626c65283629707574496e4361736573283129 4010:S32|5350415243434f4445434f4e5328292e6d616b654a756d705461626c65283629 4011:O3|@24,@397,@4012 4012:S24|67656e43617365202d206e756c6c2063617365206c697374 4013:S58|475f434f444528292e636f646567656e2831302967656e636465283629726573756c742d63617365436f646528342967656e4361736573283229 4014:C2,584|9e13e002f606201880a1001b8bd0201880a220013280000ac4022004de213ffc113f01e290022148f40620209fc6a00088013ffc90102001c402200480a0a0013280002aee037ffcee037ffcec05fffc8c21a00c8b19600cba102002aa100006fa21bffce8022000e8256004a6103ff9e6256000de213ffcda213ff8d405a00492100015113f01b99002235c7fff8c8888013ff8e4012000e204bffce0047ffcde042004c2012004de212004da042008da212000173f01e29602e178153f01e29402a17892100008d0047fd81b3f01e29a0361849e100001353f01e2b406a19081c6a00401000000ec05fffca610000fa410000da2100002e0022000d005a0047fffd7e301000000de04bffcc203fffce6213ffce4213ff8e2213ff4e0213ff0d0213fec94102005d203ffd8d00060041b3f01789a03612c7fff964a88013fecda01200cd8037ffcd6033ffc8c21a00c8b19600cba10200294100006fa21bffcd2012004d222a00490103ff9d022a0008410000ad402e00492100002113f01b99002235c7fff8c4a01000000ee01200cec05fffcea05bffce8056004e8213ffce6056008e6213ff8173f01909602e21c153f01909402a21c92100008d005bfd81b3f01e29a0361844000003988013ff8d0213ffcd0012008da01200c7fffff8988013ffce4012010e204bffce0047ffcd0213ffcfa042004fa213ff8de012004de213ff496102001d4042008d2013ff8d00120001b3f01bc9a0362207fffda5388013ff4c2012000da01200cd8006008d6036004d6232000d0012004d401201c81c2a00688012020|@4031,131071|32,4,@4015 132,4,@3749 140,5,@3308 180,4,@4017 188,4,@4017 204,4,@4018 216,4,@4019 256,5,@3750 304,4,@3378 312,5,@3380 380,4,@3749 388,5,@3308 424,4,@3523 432,4,@3523 448,4,@4018 456,5,@4019 532,4,@3773 540,5,@3775 4015:O3|@24,@397,@4016 4016:S23|707574496e436173657320686173206e6f206361736573 4017:O2|0,9 4018:O2|@4019,@3629 4019:C2,1692|9e13e002f606201880a1001b8bd02018c4012004d0213ffcd0213ff8a610000fa410000da2100008a0100009c200a02892100011d000a00c7ffe4a3b88013ff880a22001328000239a012000e6213ffce4213ff8e2213ff4e0213ff0d4213fecd6213fe8c2213fe492103ffd901000117ffe440388013fe492100008113f019c900223607ffe428e010000008c21a0108b196010ba1020039a100006fa21bffcd0236008193f000f980323bcd8236004173ee0089602e1fcd62360009010000df40620209fc6a000010000009a012000e223600098012000d0232004d2012004d0213ffcd0213ff8d001200cd802600092100010d002200c7ffe4a0b88013ff880a220013280002492012000e6213ffce4213ff8e2213ff4e0213ff0d4213fecd6213fe8c2213fe4d8213fe092103ffd901000107ffe43d288013fe092100008113f019c900223607ffe425d010000008c21a0108b196010ba10200396100006fa21bffcd022e008153f000f9402a3bcd422e004133ee008920261fcd222e0009010000bf40620209fc6a0000100000092012000e022600084012000d020a004ee012004e4213ffce0213ff8e2213ff4ea03200080a57ff9128000c088013ff4e805e000de05200080a3fff932800077d2032004d20320049010000b400001370100000080a220012280002cd2052004d0213ffcd0213ff8e6213ff4d6213ff0c2213fecfa032004fa213fe89a013ff8da213fe49610200194100010d2012020d001201cda04a004f40360009fc6a00088013fe494103ffdd2012014d00120381b3f01789a03612c7fff955b0100000094103ffdd2012018d00120381b3f01789a03612c7fff955401000000d6012034d4012008d2012000d00120101b3f01a09a0360107fffc62b01000000ac100008108000e3c20120049010000a400001070100000080a220012280002fd0213ffcd0213ffcd0213ff8e6213ff4d0213ff0c2213fecd0213fe8d0213fe4d4213fe0fa052004fa213fdc9a013fe4da213fd89610200194100011d2012020d001201cda04a004f40360009fc6a00088013fd894103ffdd201200cd00120441b3f01789a03612c7fff95280100000094103ffdd2012028d00120441b3f01789a03612c7fff952101000000d6012040d4012004d2012000d00120081b3f01a09a0360107fffc5f801000000ac100008108000af8801200cd0213ff8e6213ff4d0213ff0c2213fec9010000a9a0120184000010e88013fecac100008d0213ffcd0213ff8d0213ff4d0213ff088013ff08801200c1080009fc20120049010000b400000c30100000080a220012280002fd0213ffcd0213ffcd0213ff8e6213ff4d0213ff0c2213fecd0213fe8d0213fe4d6213fe0fa032004fa213fdc9a013fe4da213fd89610200194100010d2012020d001201cda04a004f40360009fc6a00088013fd894103ffdd201200cd00120441b3f01789a03612c7fff94e40100000094103ffdd2012024d00120441b3f01789a03612c7fff94dd01000000d6012040d4012004d2012000d00120081b3f01a09a0360107fffc5b401000000ac1000081080006b8801200cd0213ff8e6213ff4d0213ff0c2213fec9010000a9a012018400000ca88013fecac100008d0213ffcd0213ff8d0213ff4d0213ff088013ff08801200c1080005bc2012004e805e000de05200080a3fff932800046d0213ffcd20520049010000a400000790100000080a220012280002fd0213ffcd0213ffcd0213ff8e6213ff4d0213ff0c2213fecd0213fe8d0213fe4d4213fe0fa052004fa213fdc9a013fe4da213fd89610200194100011d2012020d001201cda04a004f40360009fc6a00088013fd894103ffdd201200cd00120441b3f01789a03612c7fff949a0100000094103ffdd2012028d00120441b3f01789a03612c7fff949301000000d6012040d4012004d2012000d00120081b3f01a09a0360107fffc56a01000000ac100008108000218801200cd0213ff8e6213ff4d0213ff0c2213fec9010000a9a0120184000008088013fecac100008d0213ffcd0213ff8d0213ff4d0213ff088013ff0108000118801200cd0213ff8e6213ff4d0213ff0c2213fec9010000a9a0120184000007088013fecac100008d0213ffcd0213ff8d0213ff4d0213ff088013ff08801200cc201200480a060012280000cec213ffcec213ffcd4012038133f01e59202616811000083900223d87fff8b8688013ffc10800004d201203888013ffcd2012038d001203c7fffd64b010000008c21a0108b196010ba1020039a100006fa21bffc98102001d8236008d0236004d6012000d62360009010000dd401201081c2a00688012040|@4030,131071|56,5,@608 112,5,@509 124,4,@3632 132,5,@496 164,4,@397 176,4,@24 248,5,@608 308,5,@509 320,4,@3632 328,5,@496 360,4,@397 372,4,@24 476,5,@4020 576,4,@3378 584,5,@3380 604,4,@3378 612,5,@3380 636,4,@3647 644,5,@3677 668,5,@4020 780,4,@3378 788,5,@3380 808,4,@3378 816,5,@3380 840,4,@3647 848,5,@3677 892,5,@4022 940,5,@4020 1052,4,@3378 1060,5,@3380 1080,4,@3378 1088,5,@3380 1112,4,@3647 1120,5,@3677 1164,5,@4022 1236,5,@4020 1348,4,@3378 1356,5,@3380 1376,4,@3378 1384,5,@3380 1408,4,@3647 1416,5,@3677 1460,5,@4022 1524,5,@4022 1584,4,@4029 1592,4,I48 1600,5,@3313 1628,5,@3753 4020:C2,188|9e13e002c402200080a0bffd3280000580a0a0059010200581c3e0060100000032800005808a60019010200581c3e006010000002280002090102001808a600122800005de213ffcae10000910800009b825e001113f002990022348f40620209fc6a00088013ffcae102001b825e001811f30002680000e901020011300000492026001b8226001ba25e001811f401c36800005901020019010200581c3e0060100000081c3e0060100000081c3e0060100000081c3e00601000000|@4021,98435|84,4,@542 124,4,1024 4021:S27|5350415243434f4445434f4e5328292e6973436f6d705249283229 4022:C2,416|9e13e002f606201880a1001b8bd02018d0213ffcd0213ff8c4037ff0de213ff4da213ff0d0213fecae013ff8ee213fe896102001d4037fe8d2036008d0036004da00a004f40360009fc6a00088013fe8ec012004ea05a008ea213ffcfa056028fa213ff8d2056010d001200c7fffb25f88013ff8e801200080a520012280000aa6102001d4012004133f01d29202602811000083900223d87fff8b0301000000a6100008e601200cd0213ffcd0213ff8e404fff0a2013ff8e2213ff496102001d404ffecd204e008d004e004da04a004f40360009fc6a00088013ff4e0012014de042008de213ffcfa03e028fa213ff8d203e010d001201c7fff94d088013ff8c201200080a060012280000a9a102001d4012004133f01d59202617411000083900223d87fff8ae0010000009a100008da01201c94103ffdd2012028d00360081b3f01789a03612c7fff93ae01000000d801201c94103ffdd201200cd00320081b3f01789a03612c7fff93a601000000d601201cd602e004d4012018d2012008d00120241b3f01e49a036300de012020353f01e4b406a31881c6a0048801202c|@4028,131071|108,5,@3564 136,4,@3924 144,4,I48 152,5,@3313 248,5,@3384 276,4,@3940 284,4,I48 292,5,@3313 320,4,@3378 328,5,@3380 352,4,@3378 360,5,@3380 388,4,@4023 400,4,@4024 4023:O5|@4024,@3676,@3526,@3529,@3517 4024:C2,400|9e13e002f606201880a1001b8bd02018c402a00080a0a0013280002c80a0bff9de213ffcda213ff8d4213ff4d6213ff09410000bda03600cf40360009fc6a00088013ff0ee012008ac102049ec213ffcd601200094102001d2022004d0022000da05e008f40360009fc6a00088013ffcea012004e605600080a4e0013280000501000000e805600410800009e4012008113f003890022020f40620209fc6a00001000000a8102001e4012008d201200090100014da04a004de01200cf403600081c6a004880120103280002cde213ffc8c21a00c8b19600cba102002ae100006fa21bffcd225e004ac103ffdec25e000de213ffcda213ff8d4213ff4d6213ff0aa102041ea213fec9410200192100017da036010f40360009fc6a00088013fece8012004e405200080a4bff93280000501000000e605200410800009e2012008113f003890022020f40620209fc6a00001000000a6102001e2012008d201200090100013da046004de01200cf403600081c6a00488012010113f01e5900220c4f40620209fc6a00088013ffc90102001|@4027,131071|144,4,@1110 320,4,@1110 376,4,@4025 4025:O3|@24,@397,@4026 4026:S38|636f6d70617265416e644272616e636852523a20556e696d706c656d656e7465642074657374 4027:S37|5350415243434f4445434f4e5328292e636f6d70617265416e644272616e63685252283429 4028:S43|5452414e535f54414228292e636f6d70617265416e644272616e636828362967656e436f6d705252283129 4029:S16|636f6d70617265416e644272616e6368 4030:S31|5452414e535f54414228292e636f6d70617265416e644272616e6368283629 4031:S60|475f434f444528292e636f646567656e2831302967656e636465283629726573756c742d63617365436f6465283429707574496e4361736573283129 4032:O2|@4033,@3777 4033:C2,316|9e13e002f606201880a1001b8bd02018c4026014ee00a00080a5e0013280000a80a22001de213ffc113f01e590022350f40620209fc6a00088013ffc9010200180a2200132800005808a20019010200181c3e0060100000032800005de213ffcec0220041080000bee02601cac100008113f003890022020f40620209fc6a00088013ffc90100016ac102001ee02601cea05e000de213ffcd0213ff8d2213ff4d4213ff0ea213feca8102001e8213fe89610200190100016da036004f40360009fc6a00088013fe8e6012004e404e014a2102001e224a000e004e0009e102001de242000c2012008808860013280000501000000da00600010800009d2012000113f003890022020f40620209fc6a000010000009a102001d20120009010000d1b3f01a79a0360ecde01200c353f01a7b406a11481c6a00488012010|@4036,131071|40,4,@4034 112,4,@1110 256,4,@1110 288,4,@3664 300,4,@3666 4034:O3|@24,@397,@4035 4035:S12|4e6f74206272616e63686564 4036:S20|5452414e535f54414228292e6669787570283329 4037:S47|475f434f444528292e636f646567656e2831302967656e636465283629726573756c742d63617365436f6465283429 4038:C2,460|9e13e002f606201880a1001b8bd0201880a2200132800005c40220009010200181c3e00601000000ee00a00080a5fff132800061de213ffcec00a008ea05a00080a57fe53280002ade213ffce805a0048c21a0248b196024ba102008a6100006fa21bffc253f01e6a404a1b0e424e000e4036010e424e01ce203600ce224e018e000a004e024e014c200a00cc224e010d805201cd824e00cda24e008d6022004d624e00480a2e001328000039410200194102005de213ffcd2036008d2213ff896103ffd9210001390100014da036004f40360009fc6a00088013ff890102001c401200081c0a00688012004da213ff8fa00a004fa213ff4fa00a00cfa213ff0fa022004fa213fecfa036010fa213fe8fa03600cfa213fe4e8036008e8213fe0a6102001e6213fdc96103ffd94103ffd9210200590100016da036014f40360009fc6a00088013fdc808a20013280000501000000e402200010800009e201200c113f01cb900220b8f40620209fc6a00001000000a4102001e201200ce2213ffca0102001e0213ff8d601201094100012d2012000d00120047fffe4e288013ff8d0012008da012014de01201810bfff968801201c113f01e690022274f40620209fc6a00088013ffc90102001|@4043,131071|100,4,@4039 352,4,@3865 408,5,@3867 436,4,@4041 4039:C2,96|9e13e002f606201880a1001b8bd02018c403600cae18a004de213ffcda213ff8ec036010ec213ff4ee213ff0d603601494100008d2036018d003601c7fffe4bf88013ff0ea012000d0056004da056008de012004f403600081c6a00488012008|@4040,131071|60,5,@3867 4040:S63|475f434f444528292e636f646567656e2831302967656e636465283629726573756c742d67656e4d757475616c44656373283129646973636172642d283129 4041:O3|@24,@397,@4042 4042:S33|67656e4d757475616c44656373202d204e6f742061206465636c61726174696f6e 4043:S52|475f434f444528292e636f646567656e2831302967656e636465283629726573756c742d67656e4d757475616c44656373283129 4044:C2,288|9e13e002f606201880a1001b8bd0201880a260013280000ade213ffcc4037ffcd4037ff892102001d0037fecda00a02cf403600081c6a00401000000da213ff8d0213ff4fa026004fa213ff0c4036008c4213fecae102001ee213fe896103ffd94103ffdec0260009210200590100016da037ffcf40360009fc6a00088013fe8808a20013280000501000000ea02200010800009e8012004113f01cb900220b8f40620209fc6a00001000000aa102001e8012004b8252001b9172010a6072001ea213ffcd201200090100013da0120087fffffcc88013ffce401200ce204bffcd0213ffce0046008e0213ff8de046004de213ff496103ffdd4012008d20120001b3f01e79a0360284000001088013ff4d0012000c201201481c0600688012018|@4048,131071|152,4,@3865 256,4,@4045 264,5,@4046 4045:O2|@4046,@3629 4046:C2,836|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d0213ff4d2213ff0d4213fecd6213fe89410200592100008d00120001b3f01789a03612c7fff913588013fe8d0213ffcd0213ff8c4012010ae013ff8ee213ff496102001d401200cd2012018d001201cda00a004f40360009fc6a00088013ff4ec012020fa05a028fa213ffcd205a010d00120007fffaf9b88013ffcea01200080a560012280000aa8102001d4012024133f01d29202602811000083900223d87fff883f01000000a8100008d0213ffcd0213ff8e8012024d2012014d005200c7ffe456a88013ff880a220013280001ca601200092103ffdd001201c7ffe3f390100000092100008113f019c900223607ffe3dc4010000008c21a0108b196010ba102003a6100006fa21bffcd024e008253f000fa404a3bce424e004233ee008a20461fce224e00090100013f40620209fc6a00001000000a6012000e401201ce424e000a2012000d0246004e0012004de042000c203e00080a07ff932800038d0213ffc94102001d2012014d003e0047fffec9c0100000080a220012280000fd0213ffc113f01d49002207cf40620209fc6a0000100000094103ffd92100012d001202c1b3f01789a03612c7fff90d301000000d0213ffcd0213ff8da01202498013ff8d8213ff49610200194100012d201202cd0012030da036004f40360009fc6a00088013ff496102001d6213ffcd4012038d4213ff8d601201cd4012014d2012020d00120001b3f01d49a0362c47fffed2188013ff894103ffdd2012004d00120341b3f01789a03612c7fff90b30100000010800022d2012034d0213ff8da01202498013ff8d8213ff49610200194100012d201202cd0012030da036004f40360009fc6a00088013ff496102001d6213ffcd4012038d4213ff8d601201cd4012014d2012020d00120001b3f01d49a0362c47fffed0088013ff894103ffdd2012004d00120341b3f01789a03612c7fff909201000000d2012034fa026028fa213ffcd2026010d00120147fff919988013ffcd001200080a220012280000ac4012038d4012038133f01d59202617411000083900223d87fff87a901000000c401203894103ffdd201201c901000021b3f01789a03612cde012034353f0178b406a14481c6a00488012040|@4047,131071|52,4,@3378 60,5,@3380 140,5,@3564 168,4,@3924 176,4,I48 184,5,@3313 216,5,@608 244,5,@509 256,4,@3632 264,5,@496 296,4,@397 308,4,@24 392,5,@3930 412,4,@3932 444,4,@3378 452,5,@3380 544,4,@3935 552,5,@3936 572,4,@3378 580,5,@3380 676,4,@3935 684,5,@3936 704,4,@3378 712,5,@3380 740,5,@3384 768,4,@3940 776,4,I48 784,5,@3313 808,4,@3378 820,4,@3380 4047:S24|5452414e535f54414228292e6d6f7665546f566563283629 4048:S54|475f434f444528292e636f646567656e2831302967656e636465283629726573756c742d6c6f6164536d616c6c566563746f72283229 4049:C2,16|9e13e0029010200181c3e00601000000|@4050,129| 4050:S35|5350415243434f4445434f4e5328292e636f6d706c6574655365676d656e742d283129 4051:O2|@4052,@3416 4052:C2,136|9e13e002f606201880a1001b8bd02018de213ffcd0213ff8d2213ff4d4213ff094103ffdda036004f40360009fc6a00088013ff0d00120009a01200c4000001a010000008c21a00c8b19600cba10200284100006fa21bffcd020a004ae103ffdee20a000d401200892100002113f01e8900221f8de01200c353f016eb406a19081c6a00488012010|@4056,131071|60,5,@4053 108,4,@4055 120,4,@3308 4053:C2,168|9e13e002f606201880a1001b8bd0201880a2200132800005b82220019010200181c3e00601000000b91f200490072001de213ffcda213ff87ffffff288013ff8d0213ffc901020017fff884888013ffcc4012004d200bff81b3f01809a0360ac7fff97dc01000000ee012004d005fffc7fff8fb2010000008c21a00c8b19600cba102002ac100006fa21bffcea012000ea25a004d025a00090100016e801200881c520068801200c|@4054,131071|72,5,@3321 88,4,@3420 96,5,@3422 112,5,@3375 4054:S46|5452414e535f54414228292e72657365727665537461636b537061636528332970757368456e7472696573283129 4055:S17|72657365727665537461636b5370616365 4056:S32|5452414e535f54414228292e72657365727665537461636b5370616365283329 4057:C2,308|9e13e002f606201880a1001b8bd02018c4037ff4b820a001ba222001811f401c32800005b82220019010200181c3e00601000000ba10001cbb17401db917401dae072001b820a001b91f2004ac072001ba222001811f401c32800005ea037ffcaa10200110800010de213ffcde213ffcda213ff8d0213ff4ee213ff094102005d2037fe8d00560041b3f01789a03612c7fff8f9e88013ff0aa10000810800007e8012008da213ff8d0213ff4ee213ff088013ff0e8012008e6053ffcd604e004d404e008d2053fe8d00120001b3f01cb9a0362c47fffe2f001000000e4012008e204bffce0046008e0213ffcde046004de213ff896103ffdd401200092100008d004bfec1b3f01e79a0360287ffffe3b88013ff8c2012004b8206001b917200490072001da012008de01200c10bfffb688012010|@4058,131071|136,4,@3378 144,5,@3380 204,4,@3872 212,5,@3873 260,4,@4045 268,5,@4046 4058:S43|475f434f444528292e636f646567656e2831302967656e636465283629726573756c742d636f7079283129 4059:C2,308|9e13e002f606201880a1001b8bd02018c4037ff4b820a001ba222001811f401c32800005b82220019010200181c3e00601000000ba10001cbb17401db917401dae072001b820a001b91f2004ac072001ba222001811f401c32800005ea037ffcaa10200110800010de213ffcde213ffcda213ff8d0213ff4ee213ff094102005d2037ff0d00560041b3f01789a03612c7fff8f3d88013ff0aa10000810800007e8012008da213ff8d0213ff4ee213ff088013ff0e8012008e6053ffcd604e004d404e008d2053ff0d00120001b3f01cb9a0362c47fffe28f01000000e4012008e204bffce0046008e0213ffcde046004de213ff896103ffdd401200092100008d004bfec1b3f01e79a0360287ffffdda88013ff8c2012004b8206001b917200490072001da012008de01200c10bfffb688012010|@4058,131071|136,4,@3378 144,5,@3380 204,4,@3872 212,5,@3873 260,4,@4045 268,5,@4046 4060:O3|@24,@397,@4061 4061:S41|67656e6364653a2063616e277420636f64652d67656e657261746520436f64654e696c2076616c7565 4062:S29|475f434f444528292e636f646567656e2831302967656e636465283629 4063:C2,2004|9e13e002f606201880a1001b8bd02018c402201c80a0a001328000a6de213ffcde213ffcda213ff8d2213ff4fa022000fa213ff0fa02200cfa213fecfa022010fa213fe8fa022018fa213fe4d4036008d2022004901020057fff83a388013fe4ee0120148c21a0208b196020ba102007ac100006fa21bffc2b3f01ebaa05616cea25a000e8012008e825a018e605e030e625a014e405e01ce425a010e205e018e225a00ce005e00ce025a008de05e010de25a0048c21a0148b196014ba10200482100006fa21bffc1b3f01ed9a0360bcda206000e820600cd805e02cd8206008e02060048c21a0208b196020ba10200796100006fa21bffc153f01ed9402a334d422e000e822e018d205e028d222e014e022e010e422e00cec22e008d022e0048c21a0148b196014ba10200484100006fa21bffc2b3f01eeaa0562e8ea20a000e820a00cda05e024da20a008e020a004d0213ffcec213ff8c2213ff4d6213ff0c4213fec88013fec80a5200132800005fa052004981020011080000dd6012028fa213ffcd00520009a01202c4000069688013ffce801200088012004f606201880a1001b8bd0201830bffff08c21a00c8b19600cba10200294100006fa21bffcd2012010d222a00490102001d022a0008410000ad402e00c92100002113f016e9002217c7fff848c01000000d0213ffcda012024f40360009fc6a00088013ffc8c21a00c8b19600cba102002ae100006fa21bffc2d3f01f1ac05a0a4ec25e000ea012010ea25e0048c21a00c8b19600cba102002a8100006fa21bffc273f01f1a604e124e6252000e4012008e4252004e201202ce8213ffce0012004e0213ff89e102001de213ff4c201201cc2213ff0da012018da213fecd8046008d8213fe8d601200c94100017d2012014d0012024da046004f40360009fc6a00088013fe8d0012000d601203081c2e00688012038da213ff8d2213ff4d4213ff0d6213fecfa022000fa213fe8fa022004fa213fe4fa02200cfa213fe0fa022010fa213fdcfa022018fa213fd8ee013fe088013fd880a5e00132800005ea05e000ac1020051080000c80a5a001e805600080a53ff532800007ac102001ee05e004f606201880a1001b8bd0201830bffff280a5a0012280004c8c21a00ce6012020d404e008d201200c901020017fff82e7010000008c21a0108b196010ba102003a4100006fa21bffc233f01f1a20461e4e224a000e0012008e024a008d024a0048c21a00c8b19600cba1020029e100006fa21bffc033f01f18200636cc223e000e423e004da012020193f01f1980323b8d8213ffc173f01f29602e034d6213ff894102005d4213ff4d2012004d2213ff0c4012000c4213fecee036008ee213fe8173f01f29602e0789410000f92100008d0012010da036004f40360009fc6a00088013fe8ec0120208c21a00c8b19600cba102002aa100006fa21bffcd0256004a8103ff9e8256000d405a00c92100015113f01b99002235c7fff83f801000000d0213ffcda01201cf40360009fc6a00088013ffcd0012000e601202881c4e006880120308b19600cba102002a6100006fa21bffc253f01f2a404a0ace424e000e2012008e224e004e0012020e6213ffcd4042008d201200c901020057fff829388013ffc8c21a00c8b19600cba1020029e100006fa21bffc033f01f382006010c223e000da012000da23e004d8012024173f01f39602e05cd6213ffc153f01f39402a0d4d4213ff892102001d2213ff4c4012008c4213ff0ee012004ee213fecec032008ec213fe8173f01f39602e1189410000f92100008d0012014da032004f40360009fc6a00088013fe8ea01201c80a5600122800017d0213ffcd0213ffcd201200c901020059a012028400008a288013ffce8012028a6100008d00520147ffffd4701000000e6213ffc90100013da012024f40360009fc6a00088013ffcd0012000e401203081c4a00688012038d001200c1b3f01f39a036388f40360009fc6a00088013ffcb8222001b9172004a8072001e6012028e8213ffcd401201c9210210190100014da04e034f40360009fc6a00088013ffce401202c8c21a00c8b19600cba102002a2100006fa21bffce0012004e02460049e103ff9de246000d0213ffcd404a00c92100011113f01b99002235c7fff838188013ffcc2012030da006014da213ffcd800600cd8213ff896103ffd9410200192100008d00120001b3f01e79a0360287ffffc1d88013ff8d6012030d402e00c133f01b992026350113f01b99002235c7fff836c01000000d4012004b822a001b91f200492072001c4012030b91f2004ae072001d0213ffcd2213ff89410001792100008d000a00c1b3f01789a03612c7fff8d4988013ff8ac102005ea012000b8256001ba25a001811f401c24800005b825a001a81020011080001ee6012038ba10001cbb17401db917401da8072001e6012038ec213ffce404e014e4213ff8e204e00ce2213ff496103ffd94100014d2012004d00120081b3f01e79a0360287ffffbe988013ff4e0012000b8242001b91720049e072001ac10000f88012004f606201880a1001b8bd0201830bfffdc94102005d2012008d004e00c1b3f01789a03612c7fff8d1c01000000d0012008da012034f40360009fc6a00001000000d2012020901020119a01203c400008d401000000e401203892102001d0012008da04a03cf40360009fc6a00001000000e201203894103ffdd2012008d004600c1b3f01789a03612c7fff8d0301000000d0012008e001203c81c4200688012044|@4151,131071|88,5,@3297 120,4,@4064 200,4,@4079 248,4,@4085 308,4,@4091 396,5,@4105 476,4,@3307 484,5,@3308 532,4,@4110 572,4,@4112 840,5,@3297 868,4,@4114 912,4,@4117 932,4,@4118 944,4,@4121 988,4,@4123 1068,4,@3749 1076,5,@3308 1136,4,@4125 1176,5,@3297 1204,4,@4132 1228,4,@4133 1240,4,@4136 1284,4,@4138 1352,5,@4140 1372,5,@4049 1424,4,@4142 1544,4,@3749 1552,5,@3308 1596,4,@4045 1604,5,@4046 1620,4,@3748 1628,4,@3749 1636,5,@3308 1692,4,@3378 1700,5,@3380 1804,4,@4045 1812,5,@4046 1872,4,@3378 1880,5,@3380 1920,5,@4145 1972,4,@3378 1980,5,@3380 4064:C2,828|9e13e002f606201880a1001b8bd0201880a2200132800007de213ffc901020019a100009f403600081c6a00401000000da213ff8d2213ff4d4213ff0d6213fecc403601888013fec8088a001328000100100000080a2200532800005b8222001ee00a00010800011ec05e000b91f2004ac072001c400a00490100016f606201880a1001b8bd0201830bffff0113f01ec900220c4f40620209fc6a00001000000ae102001ec05e00080a5bff53280001480a5bfed8c21a00c8b19600cba102002aa100006fa21bffce805e004e8256004a6103ff9e6256000d401200492100015113f01b99002235cde012010353f016eb406a19081c6a004880120143280008a01000000ea05e00880a5600532800065e801200ce805e004b8252001811f20003680004ee601200ce601200ce404e00cb8252001ba24a001b917401ca2072001811f20103680002db8252001b8246001811f200036800004e004e0041080000a01000000de042000b823e001ba246001811f401c368000040100000010800009b8246001113f0004900223d0f40620209fc6a00001000000a0102001b8246001b917200482072001da04001ca010000dd8012000d6012010d82120109410000bd60120089210000a9410001090100009d201200484100008d004e0081b3f01ec9a0360e89e100002353f01ecb406a0f481c6a00488012010ba102000b91f401ca0072001ba10001cbb17401db917401d9e072001de213ffc90102001da012008f40360009fc6a00088013ffcd6012008d401200492100008d00120001b3f01cb9a0362c4de012014353f01cbb406a2d081c6a0048801201892100014d004e0087fffc51301000000e4012000e2012010e4212010d601200894100008d2012004d004e0081b3f01ec9a0360e89e100011353f01ecb406a0f481c6a004880120108c21a01c8b19601cba102006a6100006fa21bffc253f01eca404a3bce424e000e2052008e224e014e0012004e024e010de052010de24e00cc2012008c224e008da012000da24e0048c21a0148b196014ba10200490100006fa21bffcda22200ce0222008e6222004d805e004d8222000da052014de012010f403600081c6a00488012014113f01ed9002204cf40620209fc6a0000100000090102001|@4078,131071|140,4,@4065 224,4,@3749 236,4,@3308 388,4,@224 476,4,@4067 488,4,@4068 572,4,@3872 584,4,@3873 608,5,@3732 644,4,@4067 656,4,@4068 692,4,@4074 804,4,@4076 4065:O3|@24,@397,@4066 4066:S11|66696e64436c6f73757265 4067:O2|@4068,@3872 4068:C2,528|9e13e002f606201880a1001b8bd02018d0213ffcd0213ff8a610000fa410000da21000099210000ad002200c7ffe406588013ff880a2200132800020a0012000e6213ffce4213ff8e2213ff4d6213ff092103ffd9010000a7ffe3a3088013ff092100008113f019c900223607ffe38bb010000008c21a0108b196010ba102003a0100006fa21bffcd02420081f3f000f9e03e3bcde242004033ee008820061fcc224200090100010f40620209fc6a00001000000a0012000d42420009e012000d023e004c2012004da006004b8236001811f200034800009d8006000e6213ffc113f01ec90022320f40620209fc6a00088013ffcd8006000d403200080a2bff93280001380a2a0018c21a00c8b19600cba10200292100006fa21bffcd0032004d022600484103ff9c422600094100011113f01b99002235c9e100013353f016eb406a19081c6a0048801200c3280001380a2bff58c21a00c8b19600cba10200292100006fa21bffcd0032004d022600484102001c422600094100011113f016e9002217c9e100013353f016eb406a19081c6a0048801200c32800018e6213ffce6213ffce4213ff8e2213ff4fa032004fa213ff0901020019a10000bf40360009fc6a00088013ff0d2012008c4012018d601200494100002ee02600492100008d00120009a100017de01200cf403600081c6a0048801201c113f01ec90022354f40620209fc6a00088013ffc90102001|@4073,131071|44,5,@608 88,5,@509 100,4,@3632 108,5,@496 140,4,@397 152,4,@24 224,4,@4069 304,4,@3749 316,4,@3308 380,4,@3307 392,4,@3308 504,4,@4071 4069:O3|@24,@397,@4070 4070:S28|707573684e6f6e4c6f63616c3a207a65726f2075736520636f756e74 4071:O3|@24,@397,@4072 4072:S43|707573684e6f6e4c6f63616c3a206e6f74204c69746572616c2c20436f6465526566206f7220537461636b 4073:S27|5452414e535f54414228292e707573684e6f6e4c6f63616c283529 4074:C2,64|9e13e002f606201880a1001b8bd02018c4036004c4213ffcd6036008d403600cd2036010d00360141b3f01ec9a0360e8353f01ecb406a0f481c6a00488013ffc|@4075,131071|40,4,@4067 48,4,@4068 4075:S44|475f434f444528292e636f646567656e2831302967656e50726f6328352970726576696f7573283429283129 4076:O3|@24,@397,@4077 4077:S33|70726576696f75733a2062616420636f64657472656520696e20636c6f73757265 4078:S41|475f434f444528292e636f646567656e2831302967656e50726f6328352970726576696f7573283429 4079:C2,396|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffc9010200581c3e00601000000da213ff8c403600c88013ff88088a001328000100100000080a2200532800005b8222001ee00a00010800011de05e000b91f20049e072001c400a0049010000ff606201880a1001b8bd0201830bffff0113f01ec900220c4f40620209fc6a00001000000ae102001de05e00080a3fff53280001b80a3ffedda05e004808b6001228000099810000d113f002990022374f40620209fc6a00001000000981020019810000dfa0b3ffcb92f600290072001840a200d80a0a009328000069010200190102005d801200481c3200688012008d801200481c32006880120083280001c01000000da05e00880a3600532800012d8012000d805e004b8232001811f20002480000a90102001d00120009210000cd0022004de012004353f01edb406a26481c6a00488012008d201200481c2600688012008d005e004da032008de012004f403600081c6a00488012008113f01ed900222c4f40620209fc6a0000100000090102001|@4084,131071|120,4,@4065 176,4,@545 320,4,@4080 372,4,@4082 4080:C2,36|9e13e002f606201880a1001b8bd02018d0022004353f002cb406a2b481c6a00401000000|@4081,127139|20,4,@608 4081:S22|5452414e535f54414228292e697350726f6342283229 4082:O3|@24,@397,@4083 4083:S38|6973536c3a2062616420636f64657472656520696e2066756e6374696f6e20636c6f73757265 4084:S37|475f434f444528292e636f646567656e2831302967656e50726f632835296973536c283129 4085:C2,676|9e13e002f606201880a1001b8bd0201880a220013280002ede213ffcde213ffcda213ff8d4213ff4d6213ff0901020019a100009f40360009fc6a00088013ff084102001c4213ffc9610000894102035d2012004d00120001b3f01c09a0361f87fffdbb588013ffcee0120088c21a00c8b19600cba102002ac100006fa21bffcea05e004ea25a004a8102001e825a000d0213ffcd401200492100016113f016e9002217c7fff806e88013ffce6012014d024e000e4012000e424e00490102001e201201081c4600688012018da213ff8d0213ff4d2213ff0d4213fecd6213fe8c403601888013fe88088a001328000100100000080a2200532800005b8222001ee00a00010800011ec05e000b91f2004ac072001c400a00490100016f606201880a1001b8bd0201830bffff0113f01ec900220c4f40620209fc6a00001000000ae102001ec05e00080a5bfed3280005001000000ea05e00880a5600122800023e801201090102001da012008f40360009fc6a00001000000a8102001e8213ffc9610000894102035d2012004d00120001b3f01c09a0361f87fffdb6788013ffce6012010d0213ffcd6012000d4012004d2012008d001200cda04e008f40360009fc6a00088013ffce401201cd024a000e2012000e224a00490102001e001201881c42006880120208c21a01c8b19601cba102006a6100006fa21bffc253f01eea404a1f4e424e000e2052010e224e014e0012004e024e010de05200cde24e00cc2012008c224e008da012000da24e0048c21a0148b196014ba10200490100006fa21bffcda22200ce0222008e6222004d805e004d8222000da052014f40360009fc6a00001000000d6012018d4022000d422e000d2022004d222e00490102001c401201481c0a0068801201c113f01ee90022284f40620209fc6a0000100000090102001|@4090,131071|88,4,@3795 96,5,@3861 156,4,@3307 164,5,@3308 300,4,@4065 400,4,@3795 408,5,@3861 508,4,@4086 652,4,@4088 4086:C2,64|9e13e002f606201880a1001b8bd02018c4036004c4213ffcd6036008d403600cd2036010d00360141b3f01ec9a0360e8353f01ecb406a0f481c6a00488013ffc|@4087,131071|40,4,@4067 48,4,@4068 4087:S42|475f434f444528292e636f646567656e2831302967656e50726f632835296c6f6164536c283529283129 4088:O3|@24,@397,@4089 4089:S28|6c6f6164536c202d20636c6f73757265206e6f742065787472616374 4090:S39|475f434f444528292e636f646567656e2831302967656e50726f632835296c6f6164536c283529 4091:C2,348|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffc9010200181c3e00601000000da213ff8c403600c88013ff88088a001328000100100000080a2200532800005b8222001ee00a00010800011de05e000b91f20049e072001c400a0049010000ff606201880a1001b8bd0201830bffff0113f01ec900220c4f40620209fc6a00001000000ae102001de05e00080a3fff53280000880a3ffedd005e004de012004353f01efb406a06081c6a004880120083280002301000000c205e00880a0600532800019da012000da05e004b8236001811f20002480000d01000000d80120009210000dd00320047fffc21001000000d2032004de012004353f01efb406a28881c6a00488012008113f01f0900220bcf40620209fc6a0000100000090102001da012000d005e004da036008de012004f403600081c6a00488012008113f01f0900220e8f40620209fc6a0000100000090102001|@4104,131071|120,4,@4065 168,4,@4092 240,5,@3732 256,4,@4096 272,4,@4100 324,4,@4102 4092:C2,92|9e13e002f606201880a1001b8bd02018de213ffc921000089010219d1b0000879a036098f40360009fc6a00088013ffcd0213ffc92102041901020019a0120004000000e88013ffcde012004353f019cb406a3b481c6a00488012008|@4095,131071|28,4,I150 64,5,@4093 76,4,@3635 4093:C2,312|9e13e002f606201880a1001b8bd02018b8226001811f200036800004808a600181c3e0060100000022800005de213ffc8410000910800010de213ffcda213ff8d0213ff4d2213ff0fa037ffcfa213fec901000091b0000879a0360d8f40360009fc6a00088013fec841000081080000992100002da213ff8d0213ff4d2213ff0fa037ffcfa213fec88013fec92100002901020051b00008a9a036078f40360009fc6a00001000000ee012000ac0dc00880a5a00122800018ea012004ea012004b8256001b91f2004a8072001e8213ffc901000157fff812e88013ffc8c21a00c8b19600cba102002a6100006fa21bffce401200ce424e004d024e000d201200090100013da012010de01201410bfffbe88012018b8256001b91f2004a807200192100014d0012008da01200cde01201010bfffb588012014|@4094,131071|84,4,I152 148,4,I245 212,5,@3321 4094:S42|5452414e535f54414228292e67657452656769737465725365742831296465636f646542697473283229 4095:S29|5452414e535f54414228292e6765745265676973746572536574283129 4096:C2,308|9e13e002f606201880a1001b8bd02018d0213ffcd0213ff8a610000fa4100008de02600c921000129010000f7ffe3d0088013ff880a220013280001d82012000e6213ffc92103ffd901000127ffe36ce88013ffc92100008113f019c900223607ffe3559010000008c21a0108b196010ba10200382100006fa21bffcd02060081b3f000f9a0363bcda206004193ee008980321fcd820600090100001f40620209fc6a0000100000082012000e42060009a012000d0236004d8012004d6032000d402e00080a2bff93280000880a2a001d002e0049e100013353f01efb406a06081c6a00488012008328000119010200192100013d002e0044000001601000000808a20013280000890102001d00220009e100009353f01efb406a06081c6a0048801200881c260068801200881c4e00688012008|@4099,131071|44,5,@608 76,5,@509 88,4,@3632 96,5,@496 128,4,@397 140,4,@24 216,4,@4092 248,5,@4097 276,4,@4092 4097:C2,120|9e13e002c402201cee00a000808de0013280001890102001ec05e000ea05a000e605600080a4e0013280000ae8056004de213ffc113f01aa900223d0f40620209fc6a00088013ffca8102001e80560048c21a0088b196008ba10200190100006fa21bffce822200081c3e0060100000081c3e00601000000|@4098,129153|52,4,@3683 4098:S30|5350415243434f4445434f4e5328292e636f646541646472657373283129 4099:S32|5452414e535f54414228292e67657446756e6374696f6e526567536574283229 4100:O3|@24,@397,@4101 4101:S18|736c5265675365743a20617267756d656e74 4102:O3|@24,@397,@4103 4103:S42|736c5265675365743a2062616420636f64657472656520696e2066756e6374696f6e20636c6f73757265 4104:S41|475f434f444528292e636f646567656e2831302967656e50726f63283529736c526567536574283129 4105:C2,528|9e13e002f606201880a1001b8bd02018c402200080a0bfed3280007c90102001ee02200880a5e0053280005cec037ffcec022004b825a001811f20003680003bea037ffcea037ffce8056018b825a001ba252001b917401ca6072001811f20103680003090102001b824e001811f200036800004e40560101080000ade213ffce204a000b8246001ba24e001811f401c36800004de213ffc10800009b824e001113f0004900223d0f40620209fc6a00088013ffca4102001b824e001b9172004a2072001e604801ca41000138c21a00c8b19600cba102002a2100006fa21bffc273f01f0a604e38ce6246000e4246004e405600ce4213ffcd60560149410200192100011901020011b3f017a9a0361dc353f017db406a35881c6a00488013ffc81c3e00601000000a610000fe405600ce205601492100016901000127fffc05f010000008c21a00c8b19600cba102002a0100006fa21bffc1f3f01f09e03e3d8de242000d0242004e4213ffc961000119410200192100010901020011b3f017a9a0361dc9e100013353f017db406a35881c6a00488013ffcea05a02080a56001228000058c21a00c9010200181c3e006010000008b19600cba102002a8100006fa21bffc273f01f1a604e024e6252000e405a01ce4252004e205a00ce2213ffcd605a0149410200192100014901020011b3f017a9a0361dc353f017db406a35881c6a00488013ffc81c3e00601000000|@4109,131071|160,4,@224 224,4,@4106 264,4,@3394 272,4,@3417 316,5,@3732 344,4,@4107 380,4,@3394 392,4,@3417 452,4,@4108 496,4,@3394 504,4,@3417 4106:C2,48|9e13e002c4036004b820a001ba222001811f401c32800005901020019010200581c3e0060100000081c3e00601000000|@3953,65697| 4107:C2,48|9e13e002c4036004b820a001ba222001811f401c32800005901020019010200581c3e0060100000081c3e00601000000|@3953,65697| 4108:C2,48|9e13e002c4036004b820a001ba222001811f401c32800005901020019010200581c3e0060100000081c3e00601000000|@3953,65697| 4109:S44|475f434f444528292e636f646567656e2831302967656e50726f6328352970757368436c6f73757265283129 4110:C2,48|9e13e002f606201880a1001b8bd02018d602200cd4022008d2022004d0022000da036004f403600081c6a00401000000|@4111,131071| 4111:S41|475f434f444528292e636f646567656e2831302967656e50726f6328352970726576696f7573283129 4112:C2,116|9e13e002f606201880a1001b8bd02018d0213ffcd0213ff8de213ff484013ff8c4213ff0d602200cd4022008d2022004d0022000da036004f40360009fc6a00088013ff08c21a00c8b19600cba10200290100006fa21bffcee012004ee222000ec012008ec222004ea01200081c560068801200c|@4113,131071| 4113:S39|475f434f444528292e636f646567656e2831302967656e50726f632835296c6f6164536c283129 4114:C2,308|9e13e002f606201880a1001b8bd0201880a2200132800012de213ffc8c21a00c8b19600cba10200296100006fa21bffcd2036004d222e00490102001d022e0009210000b113f016e9002217c353f016eb406a19081c6a00401000000d4213ff8c403600888013ff88088a001328000100100000080a2200532800005b8222001ee00a00010800011ec05e000b91f2004ac072001c400a00490100016f606201880a1001b8bd0201830bffff0113f01ec900220c4f40620209fc6a00001000000ae102001ec05e00080a5bff532800014010000008c21a00c8b19600cba102002aa100006fa21bffce805e004e8256004a6103ff9e6256000d401200092100015113f01b99002235cde012004353f016eb406a19081c6a00488012008113f01f190022334f40620209fc6a0000100000090102001|@4078,131071|68,4,@3307 76,4,@3308 172,4,@4065 256,4,@3749 268,4,@3308 284,4,@4115 4115:O3|@24,@397,@4116 4116:S30|70726576696f75733a20636c6f73757265206e6f7420636f6e7374616e74 4117:C2,48|9e13e002f606201880a1001b8bd02018d602200cd4022008d2022004d0022000da036004f403600081c6a00401000000|@4111,131071| 4118:O1|@4119 4119:C2,32|9e13e002de213ffc113f017490022198f40620209fc6a00088013ffc90102001|@4120,129|8,4,@3357 4120:S45|475f434f444528292e636f646567656e2831302967656e50726f63283529636c6f73757265416464722d283129 4121:O1|@4122 4122:C2,32|9e13e002de213ffc113f017490022198f40620209fc6a00088013ffc90102001|@4120,129|8,4,@3357 4123:O1|@4124 4124:C2,16|9e13e0029010200181c3e00601000000|@4120,129| 4125:C2,364|9e13e002f606201880a1001b8bd0201880a2200132800007de213ffc901020019a100009f403600081c6a00401000000da213ff8d0213ff4d2213ff0d4213fecd6213fe8c403600488013fe88088a001328000100100000080a2200532800005b8222001ee00a00010800011ec05e000b91f2004ac072001c400a00490100016f606201880a1001b8bd0201830bffff0113f01ec900220c4f40620209fc6a00001000000ae102001ec05e00080a5bff532800014ea0120108c21a00c8b19600cba102002aa100006fa21bffce805e004e8256004a6103ff9e6256000d401200492100015113f01b99002235cde012014353f016eb406a19081c6a00488012018d2056004d001200c4000002001000000d0213ffc90102001da012008f40360009fc6a00088013ffce8012000b8252001ba10001cbb17401db917401da6072001d6012008d401200492100008901000131b3f01cb9a0362c4de012018353f01cbb406a2d081c6a0048801201c|@4078,131071|144,4,@4065 228,4,@3749 240,4,@3308 264,5,@4126 336,4,@3872 348,4,@3873 4126:C2,212|9e13e002f606201880a1001b8bd02018808a60013280002ade213ffcc4026000ee00a00080a5fff53280001380a2200580a220053280000ab8222001de213ffc113f01f290022324f40620209fc6a00088013ffc90102001b8222001b91f2004ac072001d20260049010001610bfffe7f606201832800005b82220019010200581c3e00601000000b91f2004ac072001de213ffcd2026004901000167fffffd988013ffcb8222001b917200490072001de01200081c3e00688012004113f01f290022380f40620209fc6a00088013ffc90102001|@4131,114819|64,4,@4127 188,4,@4129 4127:O3|@24,@397,@4128 4128:S65|7472616e736c617465436c6f73757265496e6465783a20636f6e7374616e747320646f6e27742062656c6f6e6720696e20706879736963616c20636c6f73757265 4129:O3|@24,@397,@4130 4130:S53|7472616e736c617465436c6f73757265496e6465783a2062616420696e64657820696e746f206c6f676963616c20636c6f73757265 4131:S54|475f434f444528292e636f646567656e2831302967656e50726f632835297472616e736c617465436c6f73757265496e646578283229 4132:C2,48|9e13e002f606201880a1001b8bd02018d602200cd4022008d2022004d0022000da036004f403600081c6a00401000000|@4111,131071| 4133:O1|@4134 4134:C2,32|9e13e002de213ffc113f017490022198f40620209fc6a00088013ffc90102001|@4135,129|8,4,@3357 4135:S42|475f434f444528292e636f646567656e2831302967656e50726f63283529636f6465416464722d283129 4136:O1|@4137 4137:C2,32|9e13e002de213ffc113f017490022198f40620209fc6a00088013ffc90102001|@4135,129|8,4,@3357 4138:O1|@4139 4139:C2,16|9e13e0029010200181c3e00601000000|@4135,129| 4140:C2,492|9e13e002f606201880a1001b8bd0201880a260013280002fc4026000c4037ffcde213ffcda213ff8d4037ff092102001da00a034f40360009fc6a00088013ff8ee012000ec05fffc8c21a00c8b19600cba102002aa100006fa21bffce805ffd4e8256004a6103ff9e6256000d0213ffcd405a00c92100015113f01b99002235c7fff7af188013ffce4012004e204bffce0046014e0213ffcde04600cde213ff896103ffd9410200192100008d00120001b3f01e79a0360287ffff38c88013ff8d0012000c201200881c060068801200cee00a00080a5fff532800005ec037ffcd202600410bfffc9f6062018de213ffcda213ff8d0213ff4fa026004fa213ff0ea036004ea213feca8102001e8213fe896103ffd94103ffde60260009210200590100013da05a038f40360009fc6a00088013fe8808a20013280000501000000e402200010800009e2012004113f01cb900220b8f40620209fc6a00001000000a4102001e2012004b8246001b9172004a0072001e4213ffcd201200090100010da0120087fffff9f88013ffcde012008b823e001ba10001cbb17401db917401d82072001da01200cd8037ffcd0213ffcd6032014d6213ff8d403200cd4213ff496103ffd94100001d20120001b3f01e79a0360287ffff34588013ff4d0012000d201201481c2600688012018|@4141,131071|120,4,@3749 128,5,@3308 176,4,@4045 184,5,@4046 332,4,@3865 460,4,@4045 468,5,@4046 4141:S42|475f434f444528292e636f646567656e2831302967656e50726f632835296c6f61644974656d73283229 4142:O1|@4143 4143:C2,104|9e13e002f606201880a1001b8bd0201880a2200132800005c40220009010200181c3e00601000000ee00a00080a5fff532800005de213ffcd002200410bffff3f6062018d00220047fffffee88013ffcb8222001b917200490072001de01200081c3e00688012004|@4144,98433| 4144:S48|475f434f444528292e636f646567656e2831302967656e50726f632835296e6f6e436f6e73746e74436f756e74283129 4145:C2,296|9e13e002f606201880a1001b8bd0201880a2600132800005c40260009010200181c3e00601000000ee00a00080a5fff532800005ec037ffcd202600410bffff3f6062018de213ffcda213ff8d0213ff4fa026004fa213ff0fa037fccfa213fec2b3f01f4aa056190ea213fe8a8102001e8213fe496103ffd94103ffde60260009210200590100013da05a038f40360009fc6a00088013fe4808a20013280000501000000e402200010800009e201200c113f01cb900220b8f40620209fc6a00001000000a4102001e201200ce0047ffcde042014de213ffcc204200cc2213ff896103ffdd401200892100012d00120001b3f01e79a0360287ffff2bc88013ff8da012008b8236001b917201098072001d20120049010000cda01200cde01201010bfffb988012014|@4141,131071|96,4,@4146 176,4,@3865 240,4,@4045 248,5,@4046 4146:O1|@4147 4147:C2,32|9e13e002de213ffc113f01f4900221d4f40620209fc6a00088013ffc90102001|@4150,129|8,4,@4148 4148:O3|@24,@397,@4149 4149:S40|636f646567656e3a20756e68616e646c6564207061747465726e2d6d61746368206661696c757265 4150:S34|475f434f444528292e636f646567656e283130296d617463684661696c6564283129 4151:S30|475f434f444528292e636f646567656e2831302967656e50726f63283529 4152:C2,1164|9e13e002f606201880a1001b8bd0201880a2e001328000038410200184102005ae18a004a610000fa410000da2100008a0100017d004a0047fffc53401000000e6213ffce4213ff8d2213ff4d4213ff0d6213fece0213fe8d0213fe4d40120049210200190100011da04a018f40360009fc6a00088013fe4de01200cc203e00080a07ff93280003a98100008da012014d0213ffcd801201cd8213ff8d6012020d401202492102001d0012010da03600cf40360009fc6a00088013ff8d6012018fa02e004fa213ffcd4012004d4213ff8d202e0089610200194100009d2013ffcd00120001b3f01bc9a0362207fffc7be88013ff8d0012000c4012008ee022008ec00a004ec25e000ea01200c80a560012280001490102001e801201cd4052004133f01b992026350113f01b99002235c7fff797e01000000a61000088c21a0088b196008ba10200190100006fa21bffce6222000e401202081c4a00688012030e801202081c52006880120309010000c400000ce0100000080a2200122800016d6012014d6012014d2012000d002e004400000df01000000d4012024d2012020d001201cd2212024d0212020c402e0109610000ad401200892102005d00120109a100002de012018f403600081c6a00488012020d002e0047fffc76c0100000080a220012280001dd8213ffcd2012000d002e004400000c601000000d402e008d202e0049010000c1b3f01e59a0361ec7ffff06001000000d4012014d2012024d0012020c401201cd0212024c421202096100009ee02a010d401200892102005d001200c9a100017de012018f403600081c6a00488012020d4012024d2012008d002e0047fffc68d88013ffcd4012018d0213ffcd2012020d2213ff8d6012024c402a00cd401202892100008d00120149a100002f40360009fc6a00088013ff8ee01202c80a5e00132800013aa100008ec01201caa100008d005a0047fffc7330100000080a220013280000ca8102001ea213ffc90102001da05a014f40360009fc6a00088013ffca810000810800006ec012020a8102001ea213ffc88013ffcec012020ea05a004e8056014e605200080a4e00122800005ea213ffca41020011080001fd8012000fa05a008fa213ff8d2013ff8901000157fffc4de88013ff8e4012004e204a014a0102005e0246000d0213ffcd00120001b3f01a89a0362387fffb32288013ffc8c21a0108b196010ba1020039e100006fa21bffcc201200cc223e008da012000da23e004d023e000a410000f8801200cd8012000808b20013280000f96102001d4012020e4213ffcd202a00494103ffd90100009d20320001b3f01789a03612c7fff82c588013ffc9610000810800005d6012024e4213ffc88013ffcd6012024d402e008d202e004d001200c1b3f01e59a0361ec7fffefe501000000d4012024d201202cd2213ffcd6012030d002a00cd4012034d201200884100008d001201c9a100002f40360009fc6a00088013ffcee012024fa05e004fa213ffcec012010ec213ff896100008d405e008d2013ffcd00120001b3f01bc9a0362207fffc6e088013ff8ea012000e8012014e6056008e4052004e424e000e201202c81c460068801203c|@4157,131071|56,5,@3750 228,4,@3773 236,5,@3775 288,4,@3748 296,4,@3749 304,5,@3308 368,5,@4153 400,5,@4155 472,5,@3772 500,5,@4155 520,4,@4032 528,5,@4033 612,5,@3765 700,5,@3772 824,5,@3753 856,4,@3673 864,5,@3674 960,4,@3378 968,5,@3380 1012,4,@4032 1020,5,@4033 1116,4,@3773 1124,5,@3775 4153:C2,36|9e13e00280a2200132800005901020019010200581c3e0060100000081c3e00601000000|@4154,129| 4154:S27|5452414e535f54414228292e6973456d7074794c6162656c283129 4155:C2,28|9e13e002c4022008ee026004ee20a0009010200181c3e00601000000|@4156,98435| 4156:S26|5452414e535f54414228292e756e6d61726b537461636b283229 4157:S30|475f434f444528292e636f646567656e2831302967656e436f6e64283729 4158:C2,3440|9e13e002f606201880a1001b8bd0201880a2e001328000038410200184102005ae18a004de213ffcda213ff8d0213ff4d2213ff0d4213fecd6213fe8ee213fe48410200188013fe480a2600132800005b820a001ae1000021080000aee213ffcb91720049e072001d20260048410000ff606201880a1001b8bd0201830bffff3de012010da03e00080a37ff51280021088013ffcd603e004808ae001228000099410000b113f002990022374f40620209fc6a00001000000941020019410000bd6213ffc9210000a901021991b0000879a036098f40360009fc6a00088013ffc80a22001228001ee8c21a008d401200013000082920263b880a280093280000b010000009410203192103ff9901020019a0120204000031e01000000c401202081c0a0068801202c11000082900223f880a280083280000b0100000094103fd192103ff9901020019a0120204000031001000000c401202081c0a0068801202c050000878400a0d880a280023280000b0100000094103ff192103ff9901020019a0120204000030201000000ee01202081c5e0068801202c2f000089ae05e1b880a280173280000b0100000094103fd992103ff9901020019a012020400002f401000000ec01202081c5a0068801202c2d000087ac05a0b880a280163280000a010000009210202590103ff99a0120204000184601000000ea01202081c560068801202c2b000085aa05631880a280153280000a0100000092102001901020019a0120204000183901000000e801202081c520068801202c29000085a805233880a280143280000a0100000092102029901020219a0120204000182c01000000e601202081c4e0068801202c27000085a604e35880a280133280000a0100000092102019901020199a0120204000181f01000000e401202081c4a0068801202c25000085a404a3b880a280123280000b010000009410202192102029901020019a012020400002b201000000e201202081c460068801202c23000089a204611880a280113280000b0100000094103fcd92103fcd901020059a012020400002a401000000e001202081c420068801202c2100008aa004201880a280103280000a010000009210201d9010201d9a012020400017f601000000de01202081c3e0068801202c1f00008a9e03e03880a2800f3280000a0100000092102005901020059a012020400017e901000000c201202081c060068801202c0300008a8200605880a280013280000a0100000092103fcd90103fcd9a012020400017dc01000000da01202081c360068801202c1b00008a9a03607880a2800d3280000a010000009210202d90103ff99a012020400017cf01000000d801202081c320068801202c19000089980320d880a2800c3280000a010000009210200d90103ff99a012020400017c201000000d601202081c2e0068801202c170000889602e25880a2800b3280000a0100000092103ff590103ff99a012020400017b501000000d401202081c2a0068801202c1300008a9202605880a280093280000a0100000092103fcd90103fcd9a012020400017a801000000c401202081c0a0068801202c110000899002239880a280083280000a0100000092103fe590103fe59a0120204000179b01000000c401202081c0a0068801202c050000898400a3b880a280023280000a0100000092103ffd90103ffd9a0120204000178e01000000ee01202081c5e0068801202c2f000089ae05e3d880a280173280000a0100000092103fd590103fdd9a0120204000178101000000ec01202081c5a0068801202c2d000089ac05a3f880a280163280000a010000009210200990103ff99a0120204000177401000000ea01202081c560068801202c2b00008aaa05609880a280153280000a010000009210201590103ff99a0120204000176701000000e801202081c520068801202c2900008aa805215880a280143280000a0100000092103fed90103ff99a0120204000175a01000000e601202081c4e0068801202c2700008aa604e17880a280133280000a010000009210201190103ff99a0120204000174d01000000e401202081c4a0068801202c25000082a404a33880a280123280000901000000901020019a0120204000181701000000e201202081c460068801202c2300008aa20461b880a28011328000090100000090103ffd9a0120204000195201000000e001202081c420068801202c2100008aa004219880a2801032800009de012010901020019a0120204000194601000000de01202081c3e0068801202c80a3e0012280007c8c21a008030000898200627880a280013280000401000000108000558c21a0141b0000899a03629880a2800d32800004010000001080004e8c21a0141900008a9803213880a2800c3280000401000000108000478c21a014170000899602e0f880a2800b3280000401000000108000408c21a01413000085920263f880a280093280000401000000108000398c21a01411000089900222b880a280083280000401000000108000328c21a014050000898400a2d880a2800232800004010000001080002b8c21a0142f000089ae05e2f880a280173280000401000000108000248c21a0142d000089ac05a31880a2801632800004010000001080001d8c21a0142b00008aaa0560b880a280153280000401000000108000168c21a0142900008aa80520d880a2801432800004010000001080000f8c21a0142700008aa604e0f880a280133280000401000000108000088c21a0142500008aa404a11880a28012328000238c21a0088c21a0148b196014ba1020049a100006fa21bffc98102001d823600cd6012018d6236008d4012014d423600492102011d2236000d001201cc4012028ee012024c4212028ee212024ac102001ea012020ec212020d601200c153f002f9402a08c133f002d92026150e80220049010000d9a1000149e100015f403600081c6a004880120208b196008ba10200190100006fa21bffcc2012018c22220009a012020400006f801000000da01202081c360068801202c8b196008ba10200190100006fa21bffcd4012018d42220009a012020400006ec01000000d201202081c260068801202c80a37fed3280011d8c21a008d803e00880a320013280000b96102001d403e00c80a2a0013280000796102001d203e00480a2600132800003961020019610200580a3200122800015d4012018d203e004b8226001811f20002480000c94102001d0012018a6100009e403e01092100013d00220087ffff54b010000009410000810800014e6213ffce403e010a610000910800010e6213ffcfa03e004fa213ffcd8213ff8fa03e010fa213ff4d6213ff0d0013ffcda02a028f40360009fc6a00088013ff0941000081080000780a2a001d8213ff8e4213ff4d6213ff088013ff080a2a001228000bfd0012000c401203480a0a0013280000490102001ee012008901de004ee0120288c21a0248b196024ba102008ac100006fa21bffc2b3f0214aa056048ea25a000e8012000e825a01ce6012008e625a018e405e020e425a014e201200ce225a010e005e018e025a00cde05e00cde25a008c205e008c225a004d0213ffcec213ff8901020019a01202c40001ca988013ff88c21a00c8b19600cba1020029a100006fa21bffcd023600498102035d82360009010000d7fffa45501000000d601200880a2e00122800005d4012010941020011080002ed001200880a2a0012280001ed2012030d2012014b8226001811f200036800009c4012030113f02159002229cf40620209fc6a0000100000094102001c4012030a6100008d000a0087fffb85401000000e4012030e6213ffcd204a0087ffff6eb88013ffc92100008d00120007fff841801000000941000081080000e88012004d0213ffcd0012014da02601cf40360009fc6a00088013ffc92100008d00120007fff840b010000009410000888012004d001200880a2200122800004c401203010800010d4213ffcee00a008ec05e010ea05a008e8056000d4213ffcea213ff89210000a901000147fff83f988013ff8e6012000d024e000108000038801200488013ffcc401201080a0a00122800004ee0120141080001cea01200880a5e00122800011ec012034ec012034e605a008d2012018901000137fffb818010000009410200592100008901000131b3f01789a03612c7fff7f5c010000001080000aea01200894102005d205a018d005a0081b3f01789a03612c7fff7f5301000000ea01200880a56001228000148c21a00c8c21a00c8b19600cba102002a8100006fa21bffc273f0215a604e2d8e6252000e4012004e425200492100014d001202c9a012038400008ce01000000e201203881c46006880120448b19600cba102002a8100006fa21bffc273f0215a604e3a8e6252000e4012004e425200496100014d401200092102001d001202c9a01203840000e9901000000e201203881c460068801204480a2200122800013c4012000c401200480a0a0013280000fc4012000ee012028ec05e02480a5a0013280000ac401200094102005d205e018d005e0081b3f01789a03612c7fff7f1701000000c401200080a0a001228000058c21a00890102001108000099a01202c8b196008ba10200190100006fa21bffcee012024ee2220009a01202c400005ce01000000ec01202c81c5a006880120388b196008ba10200190100006fa21bffcde2220009a01201c400005c301000000d801201c81c3200688012028|@4279,131071|164,4,@545 204,4,I150 240,4,I15 276,5,@4159 296,4,I17 332,5,@4159 352,4,I152 388,5,@4159 408,4,I223 444,5,@4159 464,4,I151 496,5,@4251 516,4,I106 548,5,@4251 568,4,I107 600,5,@4251 620,4,I108 652,5,@4251 672,4,I111 708,5,@4159 728,4,I218 764,5,@4159 784,4,I242 816,5,@4251 836,4,I243 868,5,@4251 888,4,I244 920,5,@4251 940,4,I245 972,5,@4251 992,4,I216 1024,5,@4251 1044,4,I196 1076,5,@4251 1096,4,I244 1128,5,@4251 1148,4,I238 1180,5,@4251 1200,4,I239 1232,5,@4251 1252,4,I240 1284,5,@4251 1304,4,I241 1336,5,@4251 1356,4,I246 1388,5,@4251 1408,4,I252 1440,5,@4251 1460,4,I253 1492,5,@4251 1512,4,I11 1540,5,@4255 1560,4,I255 1588,5,@4257 1608,4,I254 1636,5,@4257 1668,4,I229 1696,4,I230 1724,4,I251 1752,4,I217 1780,4,I113 1808,4,I231 1836,4,I232 1864,4,I233 1892,4,I234 1920,4,I247 1948,4,I248 1976,4,I249 2004,4,I250 2112,4,@660 2120,4,@622 2184,5,@4174 2232,5,@4174 2368,5,@4080 2536,4,@4268 2620,5,@4272 2664,5,@3635 2732,4,@4274 2768,5,@3732 2788,5,@4096 2804,5,@3406 2856,5,@3406 2928,5,@3406 3008,5,@3732 3028,4,@3378 3036,5,@3380 3064,4,@3378 3072,5,@3380 3116,4,@4276 3148,5,@4182 3184,4,@4278 3224,5,@4211 3304,4,@3378 3312,5,@3380 3376,5,@4174 3420,5,@4174 4159:C2,576|9e13e002f606201880a1001b8bd02018c4037ff48088a00132800084de213ffcee00a00480a5e00132800079de213ffcaa10000fa810000da6100008e400a0009010000a400000860100000080a2200122800004ac1000091080000bac100009921000139010000a7fffd9650100000080a2200132800005e2053ffc108000588c21a008e2053ffcea213ffce8213ff8e6213ff4ec213ff0d4213fece0052004e0213fe89e102001de213fe496103ffd94103ffd9210200590100012da046010f40360009fc6a00088013fe4808a20013280000501000000c202200010800009da01200c113f01cb900220b8f40620209fc6a0000100000082102001da01200cd8037ffc8c21a00c8b19600cba10200296100006fa21bffcd4012008d422e00492103ff9d222e000c2213ffcd40320089210000b113f01b99002235c7fff74b488013ffcc4012010ee00bfec808de00132800009ac102001aa100008d005e0004000009e01000000ac10000810800004e8012010aa100008e8012010e6053ffce404e008e4213ffce204e00ce2213ff8ec213ff4d6012008d401200492100015d00120001b3f01fa9a0361b0400000a588013ff4a01000088c21a0088b196008ba10200190100006fa21bffce0222000de01201481c3e006880120188b196008ba10200190100006fa21bffce6053ff8e62220009a1000149e100015353f01ffb406a06081c6a00401000000113f020e90022288f40620209fc6a00088013ffc90102001de213ffc113f020e90022288f40620209fc6a00088013ffc90102001|@4250,131071|68,5,@4160 104,5,@3928 228,4,@3865 308,4,@3749 316,5,@3308 352,5,@4162 420,4,@4164 428,5,@4165 508,4,@4174 524,4,@4248 552,4,@4248 4160:C2,316|9e13e002841000088088a001228000270100000080a0bfd1268000240100000080a0a03134800021010000002f3f01faae05e026ba00a02dfa05c01d81c5c01d01000000000000ba000000620000006200000062000000620000008a0000006200000062000000ea000000de0000006200000062000000620000006200000096000000d200000062000000a20000007e00000062000000620000006200000062000000c6000000ae80a23fd932800003ac102001ac102005901da00481c3e006010000009010200181c3e006010000009010200181c3e006010000009010200181c3e006010000009010200181c3e006010000009010200181c3e006010000009010200181c3e006010000009010200181c3e006010000009010200181c3e006010000009010200181c3e006010000009010200181c3e00601000000|@4161,114817|44,4,$4160+70 4161:S28|5350415243434f4445434f4e5328292e696e73747249735252283129 4162:C2,40|9e13e002841000088c21a0088b196008ba10200190100006fa21bffcc422200081c3e00601000000|@4163,65665| 4163:S6|557365526567 4164:O4|@4165,@3630,@3629,@3393 4165:C2,948|9e13e002f606201880a1001b8bd02018c4012008d0213ffcd0213ff8a610000fa410000da2100008a0100009c200a02892100011d000a00c7ffe322e88013ff880a22001328000239a012000e6213ffce4213ff8e2213ff4e0213ff0d4213fecd6213fe8c2213fe492103ffd901000117ffe2bf688013fe492100008113f019c900223607ffe2a81010000008c21a0108b196010ba1020039a100006fa21bffcd0236008193f000f980323bcd8236004173ee0089602e1fcd62360009010000df40620209fc6a000010000009a012000e223600098012000d0232004d2012004d0213ffcd0213ff8d0012010d802600092100010d002200c7ffe31fe88013ff880a220013280002492012000e6213ffce4213ff8e2213ff4e0213ff0d4213fecd6213fe8c2213fe4d8213fe092103ffd901000107ffe2bc588013fe092100008113f019c900223607ffe2a50010000008c21a0108b196010ba10200396100006fa21bffcd022e008153f000f9402a3bcd422e004133ee008920261fcd222e0009010000bf40620209fc6a0000100000092012000e022600084012000d020a004ee012004e2213ffcd6213ff8e4213ff4e0213ff0d4213fecea03200080a57ff91280004588013fece805e000de05200080a3fff932800029d2032004d20320049010000b7fffd7f60100000080a220012280000bd2052004e6213ffcc2213ff8d00320049a0120204000007288013ff8ac10000810800054c20120009010000a7fffd7e70100000080a220012280000be6213ffce6213ffcc2213ff8d00520049a0120204000016488013ff8ac10000810800045c2012000c2213ff8901020019a0120204000025d88013ff8ac1000081080003dc20120009010000b7fffd7d00100000080a220012280000be6213ffce6213ffcc2213ff8d00320049a0120204000004c88013ff8ac1000081080002ec2012000c2213ff8901020019a0120204000024688013ff8ac10000810800026c2012000e805e000de05200080a3fff93280001ae6213ffcd20520049010000a7fffd7b30100000080a220012280000be6213ffce6213ffcc2213ff8d00520049a0120204000013088013ff8ac10000810800011c2012000c2213ff8901020019a0120204000022988013ff8ac10000810800009c2012000c2213ff8901020019a0120204000022188013ff8ac100008c201200080a060012280000d9a102001ec213ffcd4012034133f01ff9202603011000083900223d87fff742788013ffc9a10000810800005d0012000ec213ffc88013ffcd0012000da01200881c360068801203c|@4173,131071|56,5,@608 112,5,@509 124,4,@3632 132,5,@496 164,4,@397 176,4,@24 248,5,@608 308,5,@509 320,4,@3632 328,5,@496 360,4,@397 372,4,@24 484,5,@3928 520,5,@4166 544,5,@3928 580,5,@4168 612,5,@4170 636,5,@3928 672,5,@4166 704,5,@4170 752,5,@3928 788,5,@4168 820,5,@4170 852,5,@4170 888,4,@4172 896,4,I48 904,5,@3313 4166:C2,952|9e13e002f606201880a1001b8bd02018d0213ffcd0213ff8c4037fe8de213ff4da213ff0d0213fecae013ff8ee213fe896102001d4037fe4d203600cd0036008da00a008f40360009fc6a00088013fe8ec012004ea05a00cea213ffcfa056028fa213ff8d2056010d001200c7fff9b4b88013ff8e801200080a520012280000aa6102001d4012004133f01d29202602811000083900223d87fff73ef01000000a6100008e601200cd0213ffcd0213ff8d0213ff4e404e00480a4a0011280001388013ff4e204ffe8d204e008d004e00cda046004f40360009fc6a00001000000a0012000de012020de24200082012000da012024da20600498012000d02320081080006ad4012018d2012020d004a0007fff7c4a0100000080a2200122800049e204ffe8e204e00ce2213ffcfa046028fa213ff8d2046010d00120207fff7dab88013ff8e001200080a420012280000a9e102001d4012004133f01d59202617411000083900223d87fff73bb010000009e100008de012020d0213ffcd0213ff8c203ffe89a013ff8da213ff496102005d401202cd203e00cd003e008da006008f40360009fc6a00088013ff4d8012028d603200cd202e010d00120007fff9af701000000d4012028d202a00cd2213ffcfa026028fa213ff8d2026010d00120007fff9aee88013ff8d001200080a220012280000a84102001d4012004133f01d29202602811000083900223d87fff7392010000008410000884012018ee012008ee20a000ac012018ea01200cea25a004a8012018ee2520081080001b88012018fa04a000fa213ffcd4013ffcd204e008d004e00cda04600cf40360009fc6a00088013ffca0012004de012024de24200082012004da012028da20600498012004d6012000d6232008d0213ffcd0213ff8d0213ff4d0213ff0d0213fec88013fec88012018d4012018d202a008d2213ffcd6012008d002bfecd4012014d20120001b3f019f9a0363c87fffa3f488013ffcc40120188c21a00c8b19600cba102002ae100006fa21bffcec012008ec25e004aa102009ea25e000d400a00c92100017113f0199900221a87fff723d01000000e8012018e605200cd0213ffce6213ff8fa04e028fa213ff4d204e010d00120007fff7d2e88013ff4e401200080a4a0012280000aa2102001d4012004133f01d59202617411000083900223d87fff733e01000000a2100008e201202494103ffdd2012010d004600c1b3f01789a03612c7fff7c0c01000000e001202494103ffdd2043ff0d004200c1b3f01789a03612c7fff7c0401000000d0012008de01202881c3e00688012034|@4167,131071|108,5,@3564 136,4,@3924 144,4,I48 152,5,@3313 272,5,@3373 316,5,@3384 344,4,@3940 352,4,I48 360,5,@3313 444,5,@3564 480,5,@3564 508,4,@3924 516,4,I48 524,5,@3313 704,4,@3646 712,5,@3648 768,4,@3609 776,5,@3308 816,5,@3384 844,4,@3940 852,4,I48 860,5,@3313 888,4,@3378 896,5,@3380 920,4,@3378 928,5,@3380 4167:S37|5452414e535f54414228292e62696e6172794f7028372967656e42696e6172794952283129 4168:C2,952|9e13e002f606201880a1001b8bd02018d0213ffcd0213ff8c4037fe8de213ff4da213ff0d0213fecae013ff8ee213fe896102001d4037ff0d203600cd0036008da00a008f40360009fc6a00088013fe8ec012004ea05a00cea213ffcfa056028fa213ff8d2056010d001200c7fff9a4a88013ff8e801200080a520012280000aa6102001d4012004133f01d29202602811000083900223d87fff72ee01000000a6100008e601200cd0213ffcd0213ff8d0213ff4e404e00480a4a0011280001388013ff4e204ffe8d204e008d004e00cda046004f40360009fc6a00001000000a0012000de012020de24200082012000da012024da20600498012000d02320081080006ad4012018d2012020d004a0007fff7b490100000080a2200122800049e204ffe8e204e00ce2213ffcfa046028fa213ff8d2046010d00120207fff7caa88013ff8e001200080a420012280000a9e102001d4012004133f01d59202617411000083900223d87fff72ba010000009e100008de012020d0213ffcd0213ff8c203ffe89a013ff8da213ff496102005d401202cd203e00cd003e008da006008f40360009fc6a00088013ff4d8012028d603200cd202e010d00120007fff99f601000000d4012028d202a00cd2213ffcfa026028fa213ff8d2026010d00120007fff99ed88013ff8d001200080a220012280000a84102001d4012004133f01d29202602811000083900223d87fff7291010000008410000884012018ee012008ee20a000ac012018ea01200cea25a004a8012018ee2520081080001b88012018fa04a000fa213ffcd4013ffcd204e008d004e00cda04600cf40360009fc6a00088013ffca0012004de012024de24200082012004da012028da20600498012004d6012000d6232008d0213ffcd0213ff8d0213ff4d0213ff0d0213fec88013fec88012018d4012018d202a008d2213ffcd6012008d002bfe0d4012014d20120001b3f019f9a0363c87fffa2f388013ffcc40120188c21a00c8b19600cba102002ae100006fa21bffcec012008ec25e004aa102009ea25e000d400a00c92100017113f0199900221a87fff713c01000000e8012018e605200cd0213ffce6213ff8fa04e028fa213ff4d204e010d00120007fff7c2d88013ff4e401200080a4a0012280000aa2102001d4012004133f01d59202617411000083900223d87fff723d01000000a2100008e201202494103ffdd2012010d004600c1b3f01789a03612c7fff7b0b01000000e001202494103ffdd2043fe4d004200c1b3f01789a03612c7fff7b0301000000d0012008de01202881c3e00688012034|@4169,131071|108,5,@3564 136,4,@3924 144,4,I48 152,5,@3313 272,5,@3373 316,5,@3384 344,4,@3940 352,4,I48 360,5,@3313 444,5,@3564 480,5,@3564 508,4,@3924 516,4,I48 524,5,@3313 704,4,@3646 712,5,@3648 768,4,@3609 776,5,@3308 816,5,@3384 844,4,@3940 852,4,I48 860,5,@3313 888,4,@3378 896,5,@3380 920,4,@3378 928,5,@3380 4169:S37|5452414e535f54414228292e62696e6172794f7028372967656e42696e6172795249283129 4170:C2,1608|9e13e002f6062018ba21205480a7401b8bd02018d0213ffcd0213ff8c4037fe8de213ff4da213ff0ae013ff8ee213fec96102001d4037ff0d203600cd0036008da00a008f40360009fc6a00088013fecec012000ea05a00cea213ffcfa056028fa213ff8d2056010d00120087fff994988013ff8e801200080a520012280000aa6102001d4012004133f01d29202602811000083900223d87fff71ed01000000a6100008e6012008d0213ffcd0213ff8e404ffe8a2013ff8e2213ff496102001d404ffe4d204e00cd004e008da04a008f40360009fc6a00088013ff4e0012010de04200cde213ffcfa03e028fa213ff8d203e010d00120007fff992688013ff8c201200080a060012280000a9a102001d4012004133f01d29202602811000083900223d87fff71ca010000009a100008da012018d0213ffcd0213ff8d0213ff4d0213ff0d0213fecd803600480a320011280001988013fecd6037fe8d2036008d003600cda02e004f40360009fc6a0000100000094012000d2012034d222a00084012000ee012038ee20a004ac012000ea01201cea25a008a8012000e6012020e625200ca4012000d024a010108000cdda01202cd2012034d00320007fff7a1d0100000080a220012280004fd201201cd601202cd402e00cd4213ffcfa02a028fa213ff8d202a010d00120347fff7b7d88013ff8d201200080a260012280000990102001d4012004133f01d59202617411000083900223d87fff718d01000000d0012034d0213ffcd0213ff8c4023fe8ae013ff8ee213ff496102005d4012040d202200cd0022008da00a008f40360009fc6a00088013ff4ec01203cea05a00cd2056010d00120007fff98ca01000000e801203ce605200ce6213ffcfa04e028fa213ff8d204e010d00120007fff98c188013ff8e401200080a4a0012280000aa2102001d4012004133f01d29202602811000083900223d87fff716501000000a2100008a2012018e0012008e02460009e012018c201200cc223e0049a012018d8012034d823600896012018d4012038d422e00c92012018e02260101080007888012018d00320007fff79ca0100000080a220012280004fd601202cd601202cd402e00cd4213ffcfa02a028fa213ff8d202a010d001201c7fff7b2a88013ff8d201200080a260012280000990102001d4012004133f01d59202617411000083900223d87fff713a01000000d0012034d0213ffcd0213ff8c4023fe8ae013ff8ee213ff496102005d4012028d202200cd0022008da00a008f40360009fc6a00088013ff4ec01203cea05a00cd2056010d00120007fff987701000000e801203ce605200ce6213ffcfa04e028fa213ff8d204e010d00120007fff986e88013ff8e401200080a4a0012280000aa2102001d4012004133f01d29202602811000083900223d87fff711201000000a2100008a2012018e001204ce02460009e012018c2012050c223e0049a012018d8012008d823600896012018d401200cd422e00c92012018d82260101080002588012018d402ffe8fa032000fa213ffcd202a00cd4013ffc90100009d202e00884100008d002e00c9a100002f40360009fc6a00088013ffcae012004ec012038ec25e000aa012004e801203ce8256004a6012004e4012020e424e008a2012004e0012024e024600c9e012004c2012000c223e010d0213ffcd0213ff8d0213ff4d0213ff0d0213fec88013fec88012018da01202cd8036008d8213ffcd6012010d4012008d2012000d0037fe01b3f018c9a0363587fff8e4088013ffcd601202c8c21a00c8b19600cba10200294100006fa21bffcd2012010d222a00490102009d022a0008410000ad402e00c92100002113f0199900221a87fff6fac01000000ee01202cec05e00cd0213ffcec213ff8fa05a028fa213ff4d205a010d00120007fff7a9d88013ff4ea01200080a560012280000aa8102001d4012004133f01d59202617411000083900223d87fff70ad01000000a8100008e8012038e605200ce6213ffcfa04e028fa213ff8d204e010d00120147fff7a8888013ff8e401200080a4a0012280000aa2102001d4012004133f01d59202617411000083900223d87fff709801000000a2100008e201204094103ffdd2012020d004600c1b3f01789a03612c7fff796601000000e001204094103ffdd2012018d004200c1b3f01789a03612c7fff795e01000000d0012010de01204481c3e00688012050|@4171,131071|108,5,@3564 136,4,@3924 144,4,I48 152,5,@3313 248,5,@3564 276,4,@3924 284,4,I48 292,5,@3313 444,5,@3373 492,5,@3384 520,4,@3940 528,4,I48 536,5,@3313 616,5,@3564 652,5,@3564 680,4,@3924 688,4,I48 696,5,@3313 776,5,@3373 824,5,@3384 852,4,@3940 860,4,I48 868,5,@3313 948,5,@3564 984,5,@3564 1012,4,@3924 1020,4,I48 1028,5,@3313 1272,4,@3494 1280,5,@3496 1340,4,@3609 1348,5,@3308 1388,5,@3384 1416,4,@3940 1424,4,I48 1432,5,@3313 1472,5,@3384 1500,4,@3940 1508,4,I48 1516,5,@3313 1544,4,@3378 1552,5,@3380 1576,4,@3378 1584,5,@3380 4171:S37|5452414e535f54414228292e62696e6172794f7028372967656e42696e6172795252283129 4172:S8|62696e6172794f70 4173:S23|5452414e535f54414228292e62696e6172794f70283729 4174:C2,748|9e13e002f606201880a1001b8bd02018c403600880a0a00132800003ae102001ae102005da213ffcde213ff8d0213ff4ee213ff0901020019a013ffc400000b388013ff0ee012004808de00132800024ac102001ea05e000e805600080a53ff53280001aac1020018c21a00c8b19600cba102002a6100006fa21bffcd024e004a4102035e424e000fa056004fa213ffc901000137fff9db088013ffcd0213ffcd00120007fffefd788013ffc92100008d00120007fff7d8e01000000ac1000081080000be801200cd0213ffcd0213ff888013ff810800006e801200cd0213ffcd0213ff888013ff8e801200c80a5200132800005e6012014aa10200110800012ec213ffce404fffce204a008e0046010de042008c203e000ec213ffcde213ff892100016901000017fff7d7188013ff8da012000d0236000aa102001108000038801200488013ffce6012010808ce00132800023a4103ffde204e000e004600080a43ff532800005de012018a4103ffd1080001ce2012018c203fffcda03e004da213ffc98102001d8213ff896103ffd94103ffd9210200590100011da006010f40360009fc6a00088013ff8808a20013280000501000000e402200010800009e2012018113f01cb900220b8f40620209fc6a00001000000a4102001e2012018e0047ffc8c21a0208b196020ba1020079e100006fa21bffc033f020082006140c223e000da012010da23e018d8042024d823e014d6042018d623e010e423e00cd404200cd423e008d2042008d223e004d001200c80a22001228000138c21a00c8c21a00c8b19600cba10200284100006fa21bffc2f3f0201ae05e2a0ee20a000de20a00492100002d0047ff49a100011de012014353f0201b406a37c81c6a0048801201c8b19600cba10200284100006fa21bffcae102001ee20a004e420a0008c21a00c8b19600cba102002ac100006fa21bffc2b3f0207aa056260ea25a000de25a00496100016d401200092100002d0047ff49a100011de012014353f0207b406a2f481c6a0048801201c|@4247,131071|60,5,@4175 148,5,@3635 164,5,@4092 180,5,@3406 296,5,@3406 452,4,@3865 504,4,@4177 596,4,@4180 628,4,@4182 692,4,@4210 732,4,@4211 4175:C2,376|9e13e002f606201880a1001b8bd02018b8222001811f201026800004c40360001080000a90102001ee00bfe4b825e001ba222001811f401c368000049010200110800004b822200181c3e00601000000811f20103680000cde213ffcb8222001811f200026800008de213ffcb8222001b9172020aa072001ac1000151080002cb8222001da213ff8d0213ff492103ffd7ffe268588013ff48c21a00c8b19600cba102002ac100006fa21bffcaa102001ea25a004d025a0008c21a00c8b19600cba10200290100006fa21bffcec222004293f019aa8052024e82220007ffe27d0010000008c21a0108b196010ba102003a6100006fa21bffcd024e008253f000fa404a3bce424e004233ee008a20461fce224e00090100013f40620209fc6a00001000000ac102001b8222001b917200490072001de213ffcda213ff8ec213ff47fffffb088013ff48c21a00c8b19600cba102002a8100006fa21bffcd0252004e6012000e625200090100014e401200881c4a0068801200c|@4176,131071|144,5,@509 208,4,@3612 220,5,@520 252,4,@397 264,4,@24 4176:S57|475f434f444528292e636f646567656e2831302967656e4576616c28362963616c6c436c6f7375726528312967657441726752656773283129 4177:C2,1264|9e13e002f606201880a1001b8bd02018d0036018808a2001328000f1c4036014c4022000ee00a00080a5fff5328000b7de213ffcec00a004808da0012280000aaa100016de213ffc113f002990022374f40620209fc6a00088013ffcaa102001aa100016de213ffcda213ff8d2213ff4ec213ff0ea213fec92100015901021991b0000879a036098f40360009fc6a00088013fec80a2200122800024ea012000ea01200c8c21a00c8b19600cba102002a8100006fa21bffce6012004e6252004a4103ff9e4252000d405600492100014113f01b99002235c7fff6dde010000008c21a0088b196008ba102001a2100006fa21bffcd0246000e0012008e22420009e102005de24200482102001c22420089a102001da24200c90102001d801201081c3200688012014e8056000e601200c8c21a00c8b19600cba102002a4100006fa21bffce824a004a2103ff9e224a000d404e00492100012113f01b99002235c7fff6dbc01000000e0012000fa043ffcbb2f6008b93760069e07200180a3e005328000148c21a0088c21a0088b196008ba10200182100006fa21bffcd0206000da012008c223600098102001d823600496102001d623600894102001d423600c90102001d201201081c26006880120148b196008ba10200182100006fa21bffcd0206000da01200c8c21a00c8b19600cba10200298100006fa21bffcd6012004d623200494103ff9d4232000c2213ffcd40360049210000c113f01b99002235c7fff6d8c88013ffcd201201084102001c4213ffc9610000894102035ee026008ec02600492100016901000171b3f01c09a0361f87fffc8b588013ffcea012010e8056004d0213ffce8213ff8fa052028fa213ff4d2052010901020357fff95dc88013ff4e601200080a4e0012280000a8c21a00cd4012004133f01d29202602811000083900223d87fff6e80010000008c21a00c8b19600cba102002a4100006fa21bffca2102001e224a004e0012008e024a000de012018c201200cc223e0009a102001da23e004e423e008193f02019803224cd823e00c90102001d601202081c2e00688012024da213ff8d2213ff4ac102001ec213ff0d603600c94102035d2036004d00360081b3f01c09a0361f87fffc87e88013ff0ea012004e8056004d0213ffce8213ff8fa052028fa213ff4d2052010901020357fff95a588013ff4e601200080a4e0012280000a8c21a008d4012004133f01d29202602811000083900223d87fff6e49010000008c21a0088b196008ba102001a4100006fa21bffce2012008e224a000e001200ce42420009e102005de24200482102001c22420081b3f02019a03624cda24200c90102001d801201481c320068801201880a0a0012280000dde213ffcae102001ee226000ac102001ec226004aa102001ea226008a8102001e822600c9010200181c3e00601000000da213ff8d2213ff4ae102001ee213ff0d603601094102035d2036004d00360081b3f01c09a0361f87fffc83b88013ff0ec012004ea05a004d0213ffcea213ff8fa056028fa213ff4d2056010901020357fff956288013ff4e801200080a520012280000a8c21a00cd4012004133f01d29202602811000083900223d87fff6e06010000008c21a00c8b19600cba102002a6100006fa21bffca4102001e424e004e2012008e224e000e001200c9e102001de24200082102001c2242004e62420081b3f02019a03624cda24200c90102001d801201481c3200688012018|@4179,131071|72,4,@545 128,4,I150 208,4,@3749 216,5,@3308 344,4,@3749 352,5,@3308 536,4,@3749 544,5,@3308 588,4,@3795 596,5,@3861 636,5,@3564 664,4,@3924 672,4,I48 680,5,@3313 748,4,@4178 808,4,@3795 816,5,@3861 856,5,@3564 884,4,@3924 892,4,I48 900,5,@3313 960,4,@4178 1076,4,@3795 1084,5,@3861 1124,5,@3564 1152,4,@3924 1160,4,I48 1168,5,@3313 1236,4,@4178 4178:O2|13,0 4179:S62|475f434f444528292e636f646567656e2831302967656e4576616c28362963616c6c436c6f737572652831296c6f6164436c6f7375726550726f63283229 4180:C2,120|9e13e002f606201880a1001b8bd02018d0213ffcd0213ff8d0213ff4d0213ff0de213fec92013ff0da036004f40360009fc6a00088013fec8c21a0148b196014ba10200490100006fa21bffcc4012004c4222000ee012008ee222004ec01200cec222008ea012010ea22200ce801200081c5200688012014|@4181,131071| 4181:S62|475f434f444528292e636f646567656e2831302967656e4576616c28362963616c6c436c6f737572652831296c6f6164436c6f7375726550726f63283129 4182:C2,1064|9e13e002f606201880a1001b8bd02018da213ffcde213ff8d2213ff4921020019a013ffc4000010888013ff492100008901020019a012008400001e001000000d0213ffc90102001da012000f40360009fc6a00088013ffcc4022000ee022004ec022008ea02200c921020019010203d7fff75f80100000080a2200122800039e801200ce601200ce404fffce204ffe4e004a02cb8242001ba246001811f401c32800004b824200110800025a8102001811f201034800007d0213ffcb8246001811f20102480001ea8102001d0213ffcd0213ff8c4213ff4ee213ff0ec213fecea213fe89e013ff8de213fe496102001d404a030d204a008d004a00c1b3f019c9a0360587fff99fc88013fe4c2012024da007ffc94103ffdd2012014d00360081b3f01789a03612c7fff762801000000e801201010800027de012024d0213ffcd0213ff8c4213ff4ee213ff0ec213fecea213fe888013fe81080001ede012024e6053ffcd0213ffcd0213ff8c4213ff4ee213ff0ec213fecea213fe8a4102001e4213fe4d604e0309410203dd204e008d004e00c1b3f01c09a0361f87fffc75488013fe4e2012024e0047ffc94103ffd92100008d00420081b3f01789a03612c7fff760201000000a810203dde012024c203fffcda00602cb8236001811f201034800005b82360019810200110800005d603ffe4b91f201098072001d603ffe4b822e001811f201034800005b822e0019410200110800005b822a001b91f201094072001b822a001ba232001b91f401c920720018410000992102001901000147fff758401000000ee012024ec05fffcaa100002a6100008d005a0087fff981f01000000b8256001ba222001b917401ca4072001ba24e001b91f001da2072001d205a00c901000117fff982001000000e001200c80a420013280000ede012024de012024c203fffcd400600c92100014113f002b9002225c1b3f02049a0362444000020d010000001080000cd8012000c203fffcda00600cda213ffcd600600894100014d2012008d00420004000030e88013ffcd801200080a3200132800004d60120241080001ed4012004d402fffcd202a008fa032004fa213ffcd2213ff8fa026028fa213ff4d2026010d00320007fff76b488013ff4d001200080a220012280000ad8012008d4012004133f01d59202617411000083900223d87fff6cc401000000d80120088801200cf606201880a1001b8bd0201830bfffe080a2a00132800005d0012018d601201810800006010000009a012024400003dd010000009610000880a2e00132800004d201202410800012d2012024d0027ffcfa02e004fa213ffc94103ffdd202e000d00220081b3f01789a03612c7fff757c88013ffcd601200088012004f606201880a1001b8bd0201830bfffecd0027ffcd602200894102005c4027fe4ee027fe89210001790100002de012020353f0206b406a31481c6a00488012028|@4209,131071|36,5,@4183 56,5,@4188 112,5,@3373 252,4,@3629 260,5,@3631 288,4,@3378 296,5,@3380 404,4,@3795 412,5,@3861 440,4,@3378 448,5,@3380 576,5,@3373 604,5,@3615 648,5,@3616 688,4,@581 696,4,@4190 704,5,@4192 748,5,@4195 816,5,@3384 844,4,@3940 852,4,I48 860,5,@3313 920,5,@4205 976,4,@3378 984,5,@3380 1048,4,@4206 4183:C2,220|9e13e002f606201880a1001b8bd0201880a2200132800005c40360009010200181c3e00601000000ee00bffcde213ffcda213ff8d2213ff4fa022004fa213ff0d400a004d2022000d0013ff4da05e034f40360009fc6a00088013ff0ec012008ea05a000e8057ffc94100008d2052008d005200c1b3f02039a0360b84000002201000000e6012004b824e001b9172004a4072001d0213ffc92100012d0012000da0120087fffffd788013ffc8c21a00c8b19600cba102002a2100006fa21bffcd0246004e0012000e024600090100011de01201081c3e00688012014|@4187,131071|116,4,@4184 124,5,@4185 4184:O2|@4185,@3629 4185:C2,500|9e13e002f606201880a1001b8bd02018d0213ffcd0213ff8a610000fa410000da2100008a01000099210000ad004200c7ffe297088013ff880a22001328000219e012000e6213ffce4213ff8e2213ff4e0213ff0d4213fec92103ffd9010000a7ffe233a88013fec92100008113f019c900223607ffe21c5010000008c21a0108b196010ba1020039e100006fa21bffcd023e008033f000f820063bcc223e0041b3ee0089a0361fcda23e0009010000ff40620209fc6a000010000009e012000d423e00082012000d0206004d0213ffcd0213ff89210000ad004200c7ffe294588013ff880a22001328000219a012000e6213ffce4213ff8e2213ff4e0213ff0d4213fec92103ffd9010000a7ffe230f88013fec92100008113f019c900223607ffe219a010000008c21a0108b196010ba1020039a100006fa21bffcd0236008193f000f980323bcd8236004173ee0089602e1fcd62360009010000df40620209fc6a000010000009a012000d423600098012000d0232004d6012004d202e000d002600080a23ff5328000199010000ac4026004b820a001811f2000248000129010000ad0213ffcd0213ff8e6213ff4ae013ff8ee213ff0961020019210001090100011da04a004f40360009fc6a00088013ff0d0012008ec01200081c5a0068801201c81c4e0068801201081c4e00688012010|@4186,131071|48,5,@608 96,5,@509 108,4,@3632 116,5,@496 148,4,@397 160,4,@24 220,5,@608 268,5,@509 280,4,@3632 288,5,@496 320,4,@397 332,4,@24 4186:S24|5452414e535f54414228292e6c6f61644966417267283329 4187:S56|475f434f444528292e636f646567656e2831302967656e4576616c2836296a756d70546f50726f6328322967656e4172674c697374283229 4188:C2,692|9e13e002f606201880a1001b8bd0201880a2600132800005b82220019010200181c3e00601000000811f20103680007ac4036000b8222001b917200484072001de213ffcda213ff8d0213ff4fa026000fa213ff0d2026004901000027fffffe988013ff0de012004b823e001811f20103680000cd0213ffcb823e001811f200026800008d0213ffcb823e001b91720209a0720018210000d1080002bd801200892103ffd9010000f7ffe228c88013ffc8c21a00c8b19600cba10200282100006fa21bffc9a102001da206004d02060008c21a00c8b19600cba10200290100006fa21bffcc2222004193f019a98032024d82220007ffe23d7010000008c21a0108b196010ba10200396100006fa21bffcd022e008153f000f9402a3bcd422e004133ee008920261fcd222e0009010000bf40620209fc6a0000100000082102001d8012008d6032000d402fffcd0213ffcc2213ff892102001d2213ff4d6012000c402a00cee02a0089410000192100017901000021b3f01c09a0361f87fffc56e88013ff4ec012010ea05a000e8057ffce6052008d0213ffce6213ff8fa04e028fa213ff4d204e010d00120007fff929388013ff4e401200080a4a0012280000a8c21a00cd4012004133f01d29202602811000083900223d87fff6b37010000008c21a00c8b19600cba102002a2100006fa21bffce0012010e0246004de012008de24600090100011c201202081c0600688012024ee00bffcec05e02cb825a001811f201036800007b825a001b8222001b91f2010aa07200110800006de213ffcba222001b91f401caa072001de213ffcda213ff8d0213ff4fa026004fa213ff096100015d4026000d205e008d005e00c1b3f01d29a03603c7fffcdab88013ff0ea012004b8256001b9172004a8072001d201200090100014da0120087fffff5a9e13e00290102001e601200c81c4e00688012010|@4189,131071|168,5,@509 232,4,@3612 244,5,@520 276,4,@397 288,4,@24 372,4,@3795 380,5,@3861 428,5,@3564 456,4,@3924 464,4,I48 472,5,@3313 624,4,@3925 632,5,@3927 4189:S54|475f434f444528292e636f646567656e2831302967656e4576616c2836296a756d70546f50726f632832296d6f766541726773283229 4190:O7|@4192,@3673,@3619,@4191,@3489,@3659,@3516 4191:O2|0,4 4192:C2,860|9e13e002f606201880a1001b8bd02018c402a03cee00a00080a5e0013280000a80a2603dee02a004ec05e00080a5a0012280000580a2603d9010200181c3e00601000000328000058c21a00cac10200110800016de213ffc8b19600cba102002ae100006fa21bffcd225e004ac103ffdec25e000de213ffcda213ff8d0213ff4d4213ff09210203d90100017da036018f40360009fc6a00088013ff0ac10000810800007ea012004da213ff8d0213ff4d4213ff088013ff0ea012004e805600080a53ff93280001f80a52005e6012000e404e040a2102005e224a000e001200890100013da042004f40360009fc6a00001000000de012000c203e024da00600080a3600132800005da213ffc9810000810800008d82060009a01200c4000009788013ffc9810000888012004d820600090102001d601200c81c2e006880120103280001980a53ffde6012000e404e040a2102005e224a000e001200896100013941020699210203590102001da042010f40360009fc6a00001000000de012008d60120009410200192102069d003e00cda03e008de01200cf403600081c6a004880120103280004be6012000e605600880a4e001328000248c21a00ce4012000e204a040a0102005e02460008c21a00c8b19600cba1020029e100006fa21bffcc2056004c223e0049a102005da23e000d801200894100012921020699010000fda032014f40360009fc6a00001000000d6012008d402e00cd202e008d60120009010000a9410200184100009921020699a100002de01200cf403600081c6a004880120108b19600cba102002a4100006fa21bffce2056004e224a004a0102005e024a000de012008d40120009210203590100012da03e014f40360009fc6a00001000000c2012008d6012000941020699210203590102001da006010f40360009fc6a00001000000da012008d60120009410200192102069d003600cda036008de01200cf403600081c6a00488012010e404e040a2102005e224a000e004e03cde04200080a3e0013280000992100013c204e004da00600080a3600122800004921000131080000dda012008d00560047fffa53201000000c2012008d401200092102069da006014f40360009fc6a00001000000da012008d60120009410200192102069d003600cda036008de01200cf403600081c6a00488012010|@4194,131071|284,5,@4193 784,5,@3682 4193:C2,112|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffcd0037ff081c3e00601000000da213ff8fa022000fa213ff4d00220047ffffff288013ff48c21a00c8b19600cba1020029e100006fa21bffcd023e004da012000da23e0009010000fde01200881c3e0068801200c|@1966,161| 4194:S33|5350415243434f4445434f4e5328292e6a756d70546f46756e6374696f6e283329 4195:C2,636|9e13e002f606201880a1001b8bd02018d0213ffcd0213ff8a610000fa4100008a210000992100012d002e00c7ffe26fa88013ff880a2200132800021a0012000e6213ffce4213ff8e2213ff4d4213ff0d6213fec92103ffd901000127ffe20c488013fec92100008113f019c900223607ffe1f4f010000008c21a0108b196010ba102003a0100006fa21bffcd02420081f3f000f9e03e3bcde242004033ee008820061fcc224200090100010f40620209fc6a00001000000a0012000e42420009e012000d023e004c2012004da006000d803600080a33ff93280001880a320018c21a00c8b19600cba10200290100006fa21bffce2222004d2036004d22220004000006601000000e6213ffce4213ff8d6213ff48410000ad4012008921000021b3f02049a0362447ffffeaa88013ff41080004a94103ffd3280002280a3200980a46001228000098c21a00ce6213ffc113f0206900221a0f40620209fc6a00088013ffc8c21a00c8b19600cba10200292100006fa21bffcd0036004d022600484102001c4226000e6213ffce4213ff8d6213ff4ae10000ad4012008ac10000992100017901000161b3f02049a0362447ffffe8888013ff41080002894103ffd32800020e6213ffc80a4600122800016e6213ffc92102035d00360047fff71d40100000080a220012280000fe6213ffce6213ffce4213ff8d6213ff49210000ad4012008113f000f9002210c1b3f02049a0362447ffffe6f88013ff41080000f94103ffd113f0206900221dcf40620209fc6a00088013ffc1080000894103ffd113f020690022224f40620209fc6a00088013ffc94103ffdd2012004d00120001b3f01789a03612cde012008353f0178b406a14481c6a00488012018|@4204,131071|44,5,@608 92,5,@509 104,4,@3632 112,5,@496 144,4,@397 156,4,@24 256,5,@4196 288,4,@4190 296,5,@4192 336,4,@4198 424,4,@4190 432,5,@4192 476,5,@3373 516,4,@380 524,4,@4190 532,5,@4192 548,4,@4200 576,4,@4202 608,4,@3378 620,4,@3380 4196:C2,56|9e13e002c4022000ee0220048c21a0108b196010ba10200390100006fa21bffcee222008c422200484103ffdc422200081c3e00601000000|@4197,98433| 4197:S11|436f6e7374616e7446756e 4198:O3|@24,@397,@4199 4199:S36|6a756d70546f436f64653a20696e6469726563742063616c6c20746f20636f6465526566 4200:O3|@24,@397,@4201 4201:S47|6a756d70546f436f64653a204e6f7420696e646972656374696f6e207468726f75676820636c6f7375726520726567 4202:O3|@24,@397,@4203 4203:S38|6a756d70546f436f64653a204e6f74206120636f6e7374616e74206f72207265676973746572 4204:S25|5452414e535f54414228292e6a756d70546f436f6465283529 4205:C2,112|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffcd0037fe081c3e00601000000da213ff8fa022000fa213ff4d00220047ffffff288013ff48c21a00c8b19600cba1020029e100006fa21bffcd023e004da012000da23e0009010000fde01200881c3e0068801200c|@1966,161| 4206:C2,696|9e13e002f606201880a1001b8bd02018b8222001811f2010368000038410201184100008b820a001b91f2004ae072001de213ffcd0213ff8d2213ff4d4213ff0d6213fecc4213fe8ee213fe4ac10200188013fe4de012000b823e001ba25a001811f401c24800004b825a00110800054c201200c811f20103680000cec213ffcb825a001811f200026800008ec213ffcb825a001b9172020960720018210000b1080002bd401200892103ffd901000167ffe1f9288013ffc8c21a00c8b19600cba10200282100006fa21bffc9a102001da206004d02060008c21a00c8b19600cba10200290100006fa21bffcc2222004193f019a98032024d82220007ffe20dd010000008c21a0108b196010ba10200396100006fa21bffcd022e008153f000f9402a3bcd422e004133ee008920261fcd222e0009010000bf40620209fc6a0000100000082102001d4012008ec213ffcfa02a028fa213ff8d202a010901000017fff724288013ff8d201200080a260012280000ad0012004d4012010133f01d59202617411000083900223d87fff685201000000d0012004b8222001b917200484072001ac10000288012008f606201880a1001b8bd0201830bfffa780a0600122800006da012014d00120087fffa55a01000000da012014d8012004b8232001ba236001811f401c24800018d6012010b8232001ba236001b91f401c96072001d4012008d202a030d0026000ba222001b91f401c84072001c4226000ee02a02880a5e00122800009d6012010133f0207920261e811000083900223d87fff682601000000d601201080a2e00132800006d401200890102001d401201881c2a0068801201cd202a010901020217fff8f6b01000000d4012008133f01da920263b4113f0199900221a87fff66fd01000000921000088c21a0088b196008ba10200190100006fa21bffcd2222000c401201881c0a0068801201c|@4208,131071|176,5,@509 240,4,@3612 252,5,@520 284,4,@397 296,4,@24 352,5,@3384 380,4,@3940 388,4,I48 396,5,@3313 460,5,@3705 556,4,@4207 564,4,I48 572,5,@3313 620,5,@3564 632,4,@3983 640,4,@3609 648,5,@3308 4207:S5|6465637370 4208:S44|475f434f444528292e636f646567656e2831302967656e4576616c2836297365747570526573756c74283429 4209:S43|475f434f444528292e636f646567656e2831302967656e4576616c2836296a756d70546f50726f63283229 4210:C2,120|9e13e002f606201880a1001b8bd02018d0213ffcd0213ff8d0213ff4d0213ff0de213fec92013ff0da036004f40360009fc6a00088013fec8c21a0148b196014ba10200490100006fa21bffcc4012004c4222000ee012008ee222004ec01200cec222008ea012010ea22200ce801200081c5200688012014|@4181,131071| 4211:C2,796|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d2213ff4d4213ff0d6213fec400000c588013fecc401200cee00bffc80a2200132800005d0213ffcec01200810800009d0213ffcd00120089a012010400001a888013ffcac10000810800004d601200888013ffcd601200894100016d205e00cd005e0081b3f02099a036274400001c201000000d0213ffcd0012000da0120104000033388013ffcfa022000fa213ffcfa022004fa213ff890102001da012008f40360009fc6a00088013ff8ea012004b8256001811f200026800015fa022000e801201ce6053ffcfa022000fa213ffcfa022004fa213ff8fa022008fa213ff4fa02200cfa213ff094100015d204e008d004e00c1b3f01d89a0360b47fffd0a288013ff01080000be801200cfa213ffcfa022004fa213ff8fa022008fa213ff4fa02200cfa213ff088013ff0e801200c80a520013280000de601202ce601202ce404fffcd204a00c113f002b9002225c1b3f020c9a0360d44000042a010000001080000ae0012000e404fffcd604a00cd404a008d2012008d00520004000054701000000e001200080a4200132800005d0012018e201201810800006010000009a0120304000061601000000a210000880a4600132800004de01202c1080001ec2012010c203fffcda006008fa046004fa213ffcda213ff8fa036028fa213ff4d2036010d00460007fff712288013ff4d801200080a320012280000ae2012008d4012004133f01d59202617411000083900223d87fff673201000000e20120088801200cf606201880a1001b8bd0201830bfffe080a0600132800005d0012004de01200410800006010000009a0120304000060e010000009e10000880a3e00132800004da01202c10800012da01202cd8037ffcfa03e004fa213ffc94103ffdd203e000d00320081b3f01789a03612c7fff6fea88013ffcde01200088012004f606201880a1001b8bd0201830bfffecd8037ffcd4032008d2012024113f019d900220f47fff72b601000000d601202cd402fffcd202ffe4d002ffe8d602a00894102001841000099210000890100002de012030353f0206b406a31481c6a00488012034|@4246,131071|36,5,@4212 84,5,@4218 124,4,@4219 132,5,@4220 152,5,@4228 268,4,@3960 276,5,@3966 352,4,@581 360,4,@4232 368,5,@4234 404,5,@4236 444,5,@4244 512,5,@3384 540,4,@3940 548,4,I48 556,5,@3313 616,5,@4245 672,4,@3378 680,5,@3380 724,4,@3637 732,5,@3401 780,4,@4206 4212:C2,56|9e13e002f606201880a1001b8bd02018da213ffcde213ff892100008901020019a013ffc4000000c88013ff8c401200081c0a00688012008|@4217,131071|36,5,@4213 4213:C2,688|9e13e002f606201880a1001b8bd0201880a2600132800005b82220019010200181c3e00601000000811f20103680006cc4036000b8222001811f20103680000cde213ffcb8222001811f200026800008de213ffcb8222001b9172020ac072001ae10001610800030ea026000da213ff8d0213ff4fa026000fa213ff0fa026004fa213fec92103ffd7ffe1dc188013fec8c21a00c8b19600cba102002ae100006fa21bffcac102001ec25e004d025e0008c21a00c8b19600cba10200290100006fa21bffcee2220042b3f019aaa056024ea2220007ffe1f0c010000008c21a0108b196010ba102003a8100006fa21bffcd0252008273f000fa604e3bce6252004253ee008a404a1fce425200090100014f40620209fc6a00001000000ae102001ea026000e605600080a4fff5328000058c21a008a8103ffd10800008e40360008b196008ba102001a8100006fa21bffcee252000e4036000e204bffcde213ffcda213ff8d0213ff4fa026004fa213ff0e004a004e0213fec82102001c2213fe896103ffd94100014d8026000921020059010000cda046010f40360009fc6a00088013fe8808a20013280000501000000c40220001080002ae6012004113f02099002214cf40620209fc6a000010000008410200110800022e6012004ee00bffcde213ffcda213ff8d0213ff4fa026004fa213ff0ec00a004ec213fecaa102001ea213fe896103ffd94103ffde80260009210200590100014da05e010f40360009fc6a00088013fe8808a20013280000501000000c402200010800009e6012004113f01cb900220b8f40620209fc6a0000100000084102001e6012004b824e001b9172004a4072001c4213ffcd201200090100012da0120087fffff6288013ffc8c21a00c8b19600cba102002a2100006fa21bffcd0246004e0012000e024600090100011de01201081c3e00688012014|@4216,131071|136,5,@509 200,4,@3612 212,5,@520 244,4,@397 256,4,@24 444,4,@4214 576,4,@3865 4214:O3|@24,@397,@4215 4215:S17|6c64417267733a204e6f20726573756c74 4216:S50|475f434f444528292e636f646567656e2831302967656e4576616c2836296576616c417267732831296c6441726773283229 4217:S41|475f434f444528292e636f646567656e2831302967656e4576616c2836296576616c41726773283129 4218:C2,112|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffcd0037fec81c3e00601000000da213ff8fa022000fa213ff4d00220047ffffff288013ff48c21a00c8b19600cba1020029e100006fa21bffcd023e004da012000da23e0009010000fde01200881c3e0068801200c|@1966,161| 4219:O2|@4220,@3394 4220:C2,172|9e13e002f606201880a1001b8bd02018d0213ffcd4213ff88c21a01488013ff88b196014ba10200484100006fa21bffc2f3f0209ae05e348ee20a000d020a00cd420a008d402200cd420a00480a2e00132800003ae102001ae102005ac1de004de213ffcd0213ff8aa10000b96100009941000159210000290100016da036004f40360009fc6a00088013ff892102001901020019a0120084000009401000000e801200081c520068801200c|@4227,131071|48,4,@4221 152,5,@4225 4221:C2,420|9e13e002f606201880a1001b8bd02018c403600ca610000fa410000da210000892100011d000a00c7ffe22d10100000080a220013280000ade022004e6213ffc113f020a90022108f40620209fc6a00088013ffc90102001de022004b823e001811f200424800004e6213ffc10800024e6213ffce4213ff8e2213ff4fa022000fa213ff0de213fecfa022008fa213fe8fa02200cfa213fe4da04a00888013fe480a3600132800005d2036000981020011080000f80a32001d0012010b8222001ba226001811f401c32800005da036004981020051080000680a32001f606201880a1001b8bd0201830bfffee2280000f9010200510800010c4012000e4213ff8e2213ff4fa022000fa213ff0de213fecfa022008fa213fe8fa02200cfa213fe488013fe490102005da01201881c360068801201cb820a001811f200034800004ee01201410800015901020018c21a0148b196014ba102004ac100006fa21bffcaa103ffdea25a00ce8012004e825a008e6012008e625a004e401200ce425a00094100016d2012010d005e0047fff64910100000090102001e201201881c460068801201c|@4224,131071|40,5,@608 64,4,@4222 396,5,@3309 4222:O3|@24,@397,@4223 4223:S26|707573684e6f6e417267756d656e74733a206e6f20656e747279 4224:S34|5452414e535f54414228292e707573684e6f6e417267756d656e7473283429283129 4225:C2,624|9e13e002f606201880a1001b8bd02018c4036000ee00a01cec05e000b825a001ba226001811f401c3680009001000000de213ffcda213ff8d0213ff4d2213ff0ec037ffc88013ff080a5a00132800005de05a000aa1020011080000f80a56001da012000b8236001ba23e001811f401c32800005ec05a004aa1020051080000680a56001f606201880a1001b8bd0201830bfffee2280000cd2012008d2012000b8226001b91720049007200192100008d0012004da012008de01200c10bfffd288012010d0026000d2012000d002200c7ffe221f01000000808a200132800059c4012004ee022000ec05e00080a5a0053280002b80a5a009ea02200480a5600132800005e8012008c40120041080004eee012000de052000fa05e004fa213ffcde213ff8fa03e028fa213ff4d203e010d0013ffc7fff8c2488013ff4c201200080a060012280000a8c21a00cd4012004133f01d29202602811000083900223d87fff64c8010000008c21a00c8b19600cba1020029a100006fa21bffcd8012010d8236004d6012008d62360008410000d8801200c1080002cee01200032800029c4012004ea02200480a5600132800005e8012008c401200410800023ee012000e6052000fa05e004fa213ffce6213ff8fa04e028fa213ff4d204e010d0013ffc7fff8bf988013ff4e401200080a4a0012280000a8c21a00cd4012004133f01d29202602811000083900223d87fff649d010000008c21a00c8b19600cba102002a2100006fa21bffce0012010e0246004de012008de246000841000118801200cee012000b825e001b9172004ac0720019210001690100002da012008de01200c10bfff698801201081c3e00601000000|@4226,131071|208,5,@608 308,5,@3564 336,4,@3924 344,4,I48 352,5,@3313 480,5,@3564 508,4,@3924 516,4,I48 524,5,@3313 4226:S49|5452414e535f54414228292e707573684e6f6e417267756d656e747328342967657452656769737465724c697374283229 4227:S31|5452414e535f54414228292e707573684e6f6e417267756d656e7473283429 4228:C2,108|9e13e002f606201880a1001b8bd02018da213ffcd0213ff8d0213ff4de213ff096013ff49410000892103ffd901020019a013ffc4000001588013ff08c21a00c8b19600cba10200290100006fa21bffcc4012004c4222000ee012008ee222004ec01200081c5a00688012010|@4231,131071|52,5,@4229 4229:C2,872|9e13e002f606201880a1001b8bd0201880a2a00132800008b8222001d222e0009a102001da22e0049010200181c3e00601000000811f201036800084b8226001b8222001811f20103680000cde213ffcb8222001811f200026800008de213ffcb8222001b9172020ae0720018410001710800032b8222001da213ff8d0213ff4d2213ff0d6213fecfa02a000fa213fe8fa02a004fa213fe492103ffd7ffe1b2488013fe48c21a00c8b19600cba10200284100006fa21bffcae102001ee20a004d020a0008c21a00c8b19600cba10200290100006fa21bffcc42220042d3f019aac05a024ec2220007ffe1c6f010000008c21a0108b196010ba102003aa100006fa21bffcd0256008293f000fa80523bce8256004273ee008a604e1fce625600090100015f40620209fc6a0000100000084102001b8222001b9172004ac072001d0213ffcd0213ff8de213ff4da213ff0d6213fecfa02a000fa213fe8c4213fe496013ff8d402a004901000167fffffa588013fe4ea01200ce8056000e6053ffca4102001e4213ffcd6012004d4012000d204e008d004e00c1b3f01c09a0361f87fffbdfa88013ffce201200ce0046000de043ffcc203e008d0213ffcc2213ff8fa006028fa213ff4d2006010d00120007fff8b1f88013ff4da01200080a360012280000a8c21a00cd4012004133f01d29202602811000083900223d87fff63c3010000008c21a00c8b19600cba10200298100006fa21bffcd6012024d6232004d4012008d4232000d2012014d0012020d0226000d822600490102001c401201c81c0a00688012028811f20003680000d84100009ee036000ec05fffcaa10000fa810000da6100008d005a0087fff8ec2010000008410000810800006ee052000a6100008a810000daa10000fee052000ec05fffcb820a001b9172004a4072001ea213ffce8213ff8e6213ff4d6213ff0fa02a004fa213fecc4213fe896100012d402a000d205a008d005a00c1b3f01d79a0363187fffcc4388013fe8e2012000b8246001b9172004a0072001de01200cb823e001b917200482072001d0213ffcd0213ff8d0213ff496013ff8d40120049210001090100001da0120107fffff3988013ff48c21a00c8b19600cba1020029a100006fa21bffcd8012008d8236004d6012000d6236000d4012014d2012004d222a000da22a00490102001c401202081c0a00688012024|@4230,131071|156,5,@509 220,4,@3612 232,5,@520 264,4,@397 276,4,@24 408,4,@3795 416,5,@3861 464,5,@3564 492,4,@3924 500,4,I48 508,5,@3313 620,5,@3615 716,4,@3957 724,5,@3961 4230:S50|475f434f444528292e636f646567656e2831302967656e4576616c28362970757368417267732831296c6441726773283429 4231:S41|475f434f444528292e636f646567656e2831302967656e4576616c2836297075736841726773283129 4232:O8|@4234,@3432,@4233,@3620,@3619,@499,@3489,@3659 4233:O4|64,0,0,0 4234:C2,1108|9e13e002f606201880a1001b8bd02018c402603cee00a00080a5e0013280000aec026040ee026004ec05e00080a5a00122800005ec0260409010200181c3e00601000000ae102005ee25a000ee02200080a5fff93280003080a5e005ea02600ca8102001e8256000de213ffcda213ff8d2213ff490100009da03600cf40360009fc6a00088013ff4e6012004d0213ffcd2012000d004e008da04e004f40360009fc6a00088013ffce4012008d2012004d0012000da04a004f40360009fc6a00001000000e2012004e0046000de042000b823e001b9173ff882072001da046020d80360008c21a00c8b19600cba10200296100006fa21bffcd822e004c222e000d623600090102001d401200c81c2a006880120103280001780a5fffdde213ffcda213ff8d2213ff496100009941020699210203590102001da036018f40360009fc6a00088013ff4ec012004d60120009410203d92102069d005a014da05a010de012008f403600081c6a0048801200c32800075ea02600cea02200880a560013280004c8c21a00ce802600ca6102001e6252000de213ffcda213ff8d2213ff4fa026010fa213ff0fa026034fa213fecfa022004fa213fe890100009da03600cf40360009fc6a00088013fe8e4012010d0213ffcd201200cd004a008da04a004f40360009fc6a00088013ffce2012014d2012010d0012000da046004f40360009fc6a00001000000e0012010de042000c203e000b8206001b9173ff89a072001d8012008d6032000b822e001b917200494072001d42320008c21a00c8b19600cba10200292100006fa21bffcd0012004d022600484102005c42260008c21a00c8b19600cba102002ae100006fa21bffcda25e004d225e000ec01200cea05a0008c21a00c8b19600cba102002a8100006fa21bffcea252004ee252000e825a00090102001e601201881c4e0068801201c8b19600cba102002a8100006fa21bffce6022004e6252004a4102005e4252000de213ffcda213ff8d2213ff4941000099210203590100014da03601cf40360009fc6a00088013ff4e2012004d6012000941020699210203590102001da046018f40360009fc6a00001000000e0012004d60120009410203d92102069d0042014da042010de012008f403600081c6a0048801200ca8102001e8256000de213ffcda213ff8d2213ff4fa026010fa213ff0fa026034fa213fecfa022004fa213fe890100009da03600cf40360009fc6a00088013fe8e6012010d0213ffcd201200cd004e008da04e004f40360009fc6a00088013ffce4012014d2012010d0012000da04a004f40360009fc6a00001000000e2012010e0046000de042000b823e001b9173ff882072001da012008d8036000b8232001b917200496072001d623600092100011d00120047fff9d51010000008c21a00c8b19600cba10200294100006fa21bffcc222a004d022a000d201200cd00260008c21a00c8b19600cba10200284100006fa21bffcd020a004d420a000c422600090102001ee01201881c5e0068801201c|@4235,131071|1016,5,@3682 4235:S31|5350415243434f4445434f4e5328292e63616c6c46756e6374696f6e283229 4236:C2,616|9e13e002f606201880a1001b8bd02018d0213ffcd0213ff8a610000fa4100008a210000992100012d002a00c7ffe1f3988013ff880a2200132800021a0012000e6213ffce4213ff8e2213ff4d4213ff0d6213fec92103ffd901000127ffe190388013fec92100008113f019c900223607ffe178e010000008c21a0108b196010ba102003a0100006fa21bffcd02420081f3f000f9e03e3bcde242004033ee008820061fcc224200090100010f40620209fc6a00001000000a0012000e42420009e012000d023e004c2012004da006000d803600080a33ff93280001680a320018c21a00c8b19600cba10200290100006fa21bffce2222004d2036004d22220007ffff8a501000000e6213ffce4213ff8d4213ff49210000b1b3f020c9a0360d47ffffe9288013ff41080004794103ffd3280002080a3200980a46001228000098c21a00ce6213ffc113f020e90022028f40620209fc6a00088013ffc8c21a00c8b19600cba10200292100006fa21bffcd0036004d022600484102001c4226000e6213ffce4213ff8d4213ff4ae1000099210000b901000171b3f020c9a0360d47ffffe7288013ff41080002794103ffd3280001fe6213ffc80a4600122800015e6213ffc92102035d00360047fff6a170100000080a220012280000ee6213ffce6213ffce4213ff8d4213ff49210000b113f000f9002210c1b3f020c9a0360d47ffffe5a88013ff41080000f94103ffd113f020e90022064f40620209fc6a00088013ffc1080000894103ffd113f020e900220acf40620209fc6a00088013ffc94103ffdd2012004d00120001b3f01789a03612cde012008353f0178b406a14481c6a00488012014|@4243,131071|44,5,@608 92,5,@509 104,4,@3632 112,5,@496 144,4,@397 156,4,@24 256,5,@4196 280,4,@4232 288,5,@4234 328,4,@4237 408,4,@4232 416,5,@4234 460,5,@3373 496,4,@380 504,4,@4232 512,5,@4234 528,4,@4239 556,4,@4241 588,4,@3378 600,4,@3380 4237:O3|@24,@397,@4238 4238:S34|63616c6c436f64653a20696e6469726563742063616c6c20746f20636f6465526566 4239:O3|@24,@397,@4240 4240:S45|63616c6c436f64653a204e6f7420696e646972656374696f6e207468726f75676820636c6f7375726520726567 4241:O3|@24,@397,@4242 4242:S36|63616c6c436f64653a204e6f74206120636f6e7374616e74206f72207265676973746572 4243:S23|5452414e535f54414228292e63616c6c436f6465283429 4244:C2,112|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffcd0037fd081c3e00601000000da213ff8fa022000fa213ff4d00220047ffffff288013ff48c21a00c8b19600cba1020029e100006fa21bffcd023e004da012000da23e0009010000fde01200881c3e0068801200c|@1966,161| 4245:C2,112|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffcd0037fe081c3e00601000000da213ff8fa022000fa213ff4d00220047ffffff288013ff48c21a00c8b19600cba1020029e100006fa21bffcd023e004da012000da23e0009010000fde01200881c3e0068801200c|@1966,161| 4246:S41|475f434f444528292e636f646567656e2831302967656e4576616c28362963616c6c50726f63283429 4247:S44|475f434f444528292e636f646567656e2831302967656e4576616c28362963616c6c436c6f73757265283129 4248:O3|@24,@397,@4249 4249:S46|67656e553a20636f6d70696c696e6720756e617279206f70657261746f722028617267636f756e74203c3e203129 4250:S37|475f434f444528292e636f646567656e2831302967656e4576616c28362967656e55283329 4251:C2,708|9e13e002f606201880a1001b8bd02018c4037ff48088a001328000a5de213ffcee00a004808de0013280009ade213ffcec05e00480a5a0013280008fde213ffcaa10000fa810000da6100008e405e000e200a000901000097fffeb220100000080a2200122800004de0460001080001aac10000980a3fff53280000cac100009ac100009d2046004901000137fffc3fd0100000080a2200122800005da04a0001080000ee0053ffcda04a00080a37ff5328000658c21a008d204a004901000167fffc3f00100000080a220012280005e8c21a008e0053ffcea213ffce8213ff8e6213ff4ec213ff0e4213fecde052004de213fe882102001c2213fe496103ffd94103ffd9210200590100011da042010f40360009fc6a00088013fe4808a20013280000501000000da02200010800009d801200c113f01cb900220b8f40620209fc6a000010000009a102001d801200cd6033ffcda213ffcd4032004d4213ff892102001d2213ff4d002e01096103ffd94103ffd9210200584100008d00120009a100002f40360009fc6a00088013ff4808a20013280000501000000ee02200010800009ec012010113f01cb900220b8f40620209fc6a00001000000ae102001ec012010ea05bfec808d600132800006a8102001d00560007fffeb2101000000a8100008e605bffce404e008e4213ffce204e00ce2213ff8e8213ff4d601200cd401200892100017d00120001b3f01fa9a0361b07fffeb2c88013ff4a01000088c21a0088b196008ba10200190100006fa21bffce0222000de01201481c3e006880120188b196008ba10200190100006fa21bffcd8053ff8d82220009a1000149e100015353f01ffb406a06081c6a00401000000113f020f900221e0f40620209fc6a00088013ffc90102001de213ffc113f020f900221e0f40620209fc6a00088013ffc90102001de213ffc113f020f900221e0f40620209fc6a00088013ffc90102001|@4254,131071|88,5,@4160 140,5,@3928 192,5,@3928 308,4,@3865 424,4,@3865 472,5,@4162 524,4,@4164 532,5,@4165 612,4,@4174 628,4,@4252 656,4,@4252 684,4,@4252 4252:O3|@24,@397,@4253 4253:S47|67656e423a20636f6d70696c696e672062696e617279206f70657261746f722028617267636f756e74203c3e203229 4254:S37|475f434f444528292e636f646567656e2831302967656e4576616c28362967656e42283229 4255:C2,1224|9e13e002f606201880a1001b8bd02018d0037ff4808a2001328001228c21a008c4022000ee00a00080a5fff5328001138c21a008ec022004808da001328001058c21a008ea05a000e805600080a53ff5328000f68c21a008e605a004808ce001328000e88c21a008e404e00480a4a001328000da8c21a008e200a004808c6001228000cc8c21a008e0056004808c2001228000c88c21a008808c200122800005de213ffc8210001010800009d0213ffc113f002990022348f40620209fc6a00088013ffc82102001d0213ffcd0213ff898013ff896102001d623200098013ff8c2232004d6013ffc820ae3fd9810610180a32101128000a488013ff8808c600122800005de213ffc9410001110800009b822a001113f002990022348f40620209fc6a00088013ffc94102001b822a001811f2000368000089210000a033f000e82006330b822a001ba206001b917401c92072001b8226001811f2000248000808c21a008b8226001811f20143680007c8c21a008c2037ffcde213ffcda213ff8d8213ff4d2213ff0d4036004d4213fecae102001ee213fe896103ffd94103ffd92102005d004e000da006010f40360009fc6a00088013fe8808a20013280000501000000ec02200010800009ea012008113f01cb900220b8f40620209fc6a00001000000ac102001ea012008e8057ffce6012000b824e001b91f2004a4072001ec213ffc9410001292100016d00520081b3f01789a03612c7fff683588013ffce201200ce0047ffcd4047fecd2012008d0012004da042014f40360009fc6a00001000000d0213ffcd0213ff8de01200880a3e1011280000a88013ff8820120009a103ffdda2060009801200096102011d623200410800009d401200c820120009a102001da2060009801200096102005d6232004d401200cb822a001b91f200492072001ba10001cbb17401db917401d84072001d0213ffc88013ffcb820a001811f200036800004ee0120181080001b8c21a008ec05fffcc4213ffcea05a00cea213ff8e805a008e8213ff4d601200494100002d201200cd00120001b3f01e79a0360287fffd6b688013ff4e6012000e401200cb824a001ba24e001b91f401c8407200188012004f606201880a1001b8bd0201830bfffe28b196008ba10200190100006fa21bffcee012000ee222000ec01201c81c5a006880120288b196008ba10200190100006fa21bffcd2037ff8d2222000353f01ffb406a06081c6a004880120088c21a0088b196008ba10200190100006fa21bffcd4037ff8d4222000353f01ffb406a06081c6a004880120088b196008ba10200190100006fa21bffce0037ff8e0222000353f01ffb406a06081c6a004010000008b196008ba10200190100006fa21bffce2037ff8e2222000353f01ffb406a06081c6a004010000008b196008ba10200190100006fa21bffce4037ff8e4222000353f01ffb406a06081c6a004010000008b196008ba10200190100006fa21bffce6037ff8e6222000353f01ffb406a06081c6a004010000008b196008ba10200190100006fa21bffcea037ff8ea222000353f01ffb406a06081c6a004010000008b196008ba10200190100006fa21bffcec037ff8ec222000353f01ffb406a06081c6a004010000008b196008ba10200190100006fa21bffcc4037ff8c4222000353f01ffb406a06081c6a00401000000|@4256,131071|176,4,@542 276,4,@542 316,4,@349 464,4,@3865 528,4,@3378 536,5,@3380 764,4,@4045 772,5,@4046 884,4,@4174 928,4,@4174 968,4,@4174 1008,4,@4174 1048,4,@4174 1088,4,@4174 1128,4,@4174 1168,4,@4174 1208,4,@4174 4256:S46|475f434f444528292e636f646567656e2831302967656e4576616c28362967656e416c6c6f6353746f7265283129 4257:C2,820|9e13e002f606201880a1001b8bd02018c4037ff48088a001328000c1de213ffcee00a004808de001328000b6de213ffcec05e004808da001328000abde213ffcea05a00480a56001328000a0de213ffca810000fa610000da410000890100012400000bc0100000080a2200122800004de05e0001080000ce204fffcda03e00080a37ff5328000858c21a008d003e004808a200132800004e204fffc1080007f8c21a008e8213ffce6213ff8e4213ff4fa05a000fa213ff0fa05e000fa213fece004e004e0213fe89e102001de213fe496103ffd94103ffd92102005d000a000da046010f40360009fc6a00088013fe4808a20013280000501000000c202200010800009da01200c113f01cb900220b8f40620209fc6a0000100000082102001da01200cd8037ffcc2213ffcd6036004d6213ff894102001d4213ff496103ffd94103ffd92102005d0012000da032010f40360009fc6a00088013ff4808a20013280000501000000d202200010800009d0012010113f01cb900220b8f40620209fc6a0000100000092102001d0012010c4023ffcd2213ffcee022004ee213ff8ac102001ec213ff496103ffd94103ffd92102005d0012008da00a010f40360009fc6a00088013ff4808a20013280000501000000ea02200010800009e8012014113f01cb900220b8f40620209fc6a00001000000aa102001e8012014e6053ffce404e008e4213ffce204e00ce2213ff8d601201094100015d2012000d00120041b3f02119a03631c4000006388013ff8e0012014de043fe880a3e0012280001490102001c2043ffcd4006008133f01b992026350113f01b99002235c7fff5cf0010000009a1000088c21a0088b196008ba10200190100006fa21bffcda222000d801201881c320068801201cc201201881c060068801201c8b196008ba10200190100006fa21bffce404fff8e42220009a1000139e100014353f01ffb406a06081c6a00401000000113f0213900223e0f40620209fc6a00088013ffc90102001de213ffc113f0213900223e0f40620209fc6a00088013ffc90102001de213ffc113f0213900223e0f40620209fc6a00088013ffc90102001de213ffc113f0213900223e0f40620209fc6a00088013ffc90102001|@4267,131071|96,5,@4258 264,4,@3865 372,4,@3865 480,4,@3865 544,4,@4260 552,5,@4261 588,4,@3748 596,4,@3749 604,5,@3308 696,4,@4174 712,4,@4265 740,4,@4265 768,4,@4265 796,4,@4265 4258:C2,16|9e13e0029010200581c3e00601000000|@4259,129| 4259:S33|5350415243434f4445434f4e5328292e6973496e646578656453746f7265283129 4260:O2|@4261,@3629 4261:C2,1660|9e13e002f6062018ba21205080a7401b8bd02018d0213ffcd0213ff8c4012004a610000fa410000da2100008a010000992100010d000a00c7ffe1ad588013ff880a22001328000229e012000e6213ffce4213ff8e2213ff4e0213ff0d4213fecd6213fe892103ffd901000107ffe149e88013fe892100008113f019c900223607ffe1329010000008c21a0108b196010ba1020039e100006fa21bffcd023e008033f000f820063bcc223e0041b3ee0089a0361fcda23e0009010000ff40620209fc6a000010000009e012000e023e00082012000d0206004da012004d0213ffcd0213ff8d801200cc20360009210000ad003200c7ffe1aa688013ff880a22001328000239a012000e6213ffce4213ff8e2213ff4e0213ff0d4213fecd6213fe8c2213fe492103ffd9010000a7ffe146e88013fe492100008113f019c900223607ffe12f9010000008c21a0108b196010ba1020039a100006fa21bffcd0236008193f000f980323bcd8236004173ee0089602e1fcd62360009010000df40620209fc6a000010000009a012000d423600092012000d0226004d0012004d0213ffcd0213ff8e6213ff4e4213ff0e0213fecd4213fe8d6213fe4c2213fe0fa022000fa213fdc84013ff8c4213fd896102001941000119210000cd0012010da04a004f40360009fc6a00088013fd8ee012038fa05e028fa213ffcd205e010d001201c7fff848188013ffcec01200080a5a0012280000aaa102001d401203c133f01d29202602811000083900223d87fff5d2501000000aa100008e801200c80a53ffd32800003aa102005aa102011e6012008e404e00080a4bff9328000b2e2012004e2012004e004600080a43ff932800064de04e004de04e004808be00122800005010000008210000f10800009b8206001113f002990022348f40620209fc6a0000100000082102001b8206001811f2000368000089a100001193f000e98032330b8206001ba232001b917401c9a072001fa046004fa213ffc921000159010000d1b0000859a036358f40360009fc6a00088013ffc9810000894102001d2012010d00120007fffc1800100000080a220012280000fd0213ffc113f01d49002207cf40620209fc6a0000100000094103ffdd2012014d00120401b3f01789a03612c7fff65b701000000d0213ffcd0213ff8d601201cd8213ff494013ff8d4213ff0d202e00496102001d401201490100009d201204084100008d001203c9a100002f40360009fc6a00088013ff0ae102001ee213ffcec012048ec213ff8d601201cd4012030d2012000d00120041b3f01d49a0362c47fffc20188013ff894103ffdd2012008d001204c1b3f01789a03612c7fff65930100000094103ffdd2012024d001204c1b3f01789a03612c7fff658c0100000010800086de01204c808be00122800005010000008210000f10800009b8206001113f002990022348f40620209fc6a0000100000082102001b8206001811f2000368000089a100001193f000e98032330b8206001ba232001b917401c9a072001921000159010000d1b0000859a036358f40360009fc6a00001000000d0213ffcd0213ff8da012018d0213ff498013ff8d8213ff096102001d4012010d201203cd0012038da036004f40360009fc6a00088013ff096102001d6213ffcd4012044d4213ff8d6012018d401202cd2012000d00120041b3f01d49a0362c47fffc1ba88013ff894103ffdd2012008d00120481b3f01789a03612c7fff654c0100000094103ffdd2012020d00120481b3f01789a03612c7fff654501000000d0213ffc88013ffc1080003dde01204ce004600080a43ff932800030901020019410200592103ffdd00460047fffc0f20100000080a220012280002390102001d0213ffcd0213ff8de01201882013ff8c2213ff496102001d4012014d201203cd0012038da03e004f40360009fc6a00088013ff4113f01d49002207cf40620209fc6a0000100000094103ffdd2012018d00120441b3f01789a03612c7fff651c0100000094103ffdd2012004d00120441b3f01789a03612c7fff651501000000901020019a012034400000300100000010800006d0213ffc9a0120344000002b01000000d0213ffcd0213ff8d0213ff4d0213ff088013ff0de01204cfa03e028fa213ffcd203e010d00120307fff660e88013ffcc201200080a060012280000ada012050d4012050133f01d59202617411000083900223d87fff5c1e01000000da01205094103ffdd20120389010000d1b3f01789a03612cde012030353f0178b406a14481c6a00488012054|@4264,131071|56,5,@608 108,5,@509 120,4,@3632 128,5,@496 160,4,@397 172,4,@24 244,5,@608 300,5,@509 312,4,@3632 320,5,@496 352,4,@397 364,4,@24 512,5,@3564 540,4,@3924 548,4,I48 556,5,@3313 656,4,@542 696,4,@349 736,4,I108 772,5,@3930 792,4,@3932 824,4,@3378 832,5,@3380 940,4,@3935 948,5,@3936 968,4,@3378 976,5,@3380 996,4,@3378 1004,5,@3380 1044,4,@542 1084,4,@349 1116,4,I108 1224,4,@3935 1232,5,@3936 1252,4,@3378 1260,5,@3380 1280,4,@3378 1288,5,@3380 1340,5,@3930 1412,4,@3932 1444,4,@3378 1452,5,@3380 1472,4,@3378 1480,5,@3380 1496,5,@4262 1516,5,@4262 1564,5,@3384 1592,4,@3940 1600,4,I48 1608,5,@3313 1632,4,@3378 1644,4,@3380 4262:C2,424|9e13e002f606201880a1001b8bd02018d0213ffcd0213ff8c4037fe4de213ff4da213ff0ae013ff8ee213fec96102001d4037fe0d2036008d0036004da00a004f40360009fc6a00088013fecec012000ea05a008ea213ffcfa056028fa213ff8d2056010d00120087fff834188013ff8e801200080a520012280000aa6102001d4012004133f01d29202602811000083900223d87fff5be501000000a6100008e6012008d0213ffcd0213ff8e404ffe4a2013ff8e2213ff496102001d404ffdcd204e008d004e004da04a004f40360009fc6a00088013ff4e0012010de012018de213ffcc2042004c2213ff8d6043fd8d4043fec92102001d00120001b3f01d49a0362c47fffc10788013ff8da01201094103ffdd2012004d00360081b3f01789a03612c7fff649801000000d8012010d6032008d6213ffcfa02e028fa213ff8d202e010d00120187fff659d88013ff8d401200080a2a0012280000ad2012018d4012004133f01d59202617411000083900223d87fff5bad01000000d201201894103ffdd0026008d20120241b3f01789a03612cde01201c353f0178b406a14481c6a00488012028|@4263,131071|104,5,@3564 132,4,@3924 140,4,I48 148,5,@3313 252,4,@3935 260,5,@3936 284,4,@3378 292,5,@3380 328,5,@3384 356,4,@3940 364,4,I48 372,5,@3313 396,4,@3378 408,4,@3380 4263:S49|5452414e535f54414228292e61737369676e4f7028362973746f7265496e64657865645669615265676973746572283129 4264:S23|5452414e535f54414228292e61737369676e4f70283629 4265:O3|@24,@397,@4266 4266:S25|67656e41737369676e3a20617267636f756e74203c3e203329 4267:S42|475f434f444528292e636f646567656e2831302967656e4576616c28362967656e41737369676e283129 4268:C2,968|9e13e002f606201880a1001b8bd02018d003601c80a220012280003bc4036018de213ffcda213ff8d2213ff484102001c4213ff0d603600c94102035d2036004d00360081b3f01c09a0361f87fffb57588013ff0ee012004ec05e004d0213ffcec213ff8fa05a028fa213ff4d205a010901020357fff829c88013ff4ea01200080a560012280000aa8102001d4012004133f01d29202602811000083900223d87fff5b4001000000a81000088c21a00c8b19600cba102002a8100006fa21bffca6102001e6252004e4012008e4252000e201200ca0102001e02460009e102001de246004e8246008033f02018200624cc224600c90102001da01201481c360068801201880a0a001228000608c21a00ca610000fa410000da2100009d204a010d004a0047fff9cab01000000e6213ffce4213ff8e2213ff4d0213ff094102035d204a008d004a0041b3f017a9a0361d07fff661588013ff0e0012008d4042004133f0199920261b8113f0199900221a87fff59f601000000de012008c203e004d0213ffcc2213ff8fa006028fa213ff4d2006010901020357fff825388013ff4da01200080a360012280000a98102001d4012004133f01d29202602811000083900223d87fff5af70100000098100008d8012014d00320047fff860d01000000b8222001b91f200496072001ba10001cbb17401db917401d940720019210000ad4032008901020351b3f01ab9a0360287fff9679010000008c21a0088b196008ba10200190100006fa21bffcc401200cc42220008c21a00c8b19600cba102002ae100006fa21bffcac102001ec25e004ea012008ea25e000e8012010d0252000a6102001e6252004ee252008253f0201a404a24ce425200c90102001e201201881c460068801201c8b19600cba102002ae100006fa21bffc2d3f0215ac05a02cec25e000ea03600cea25e0048c21a0148b196014ba10200490100006fa21bffce8036008e822200ce6036004e6222008ee222004e4036010e4222000de213ffcda213ff8d2213ff4da036014f40360009fc6a00088013ff4e2012004e0046004fa022000fa213ffcfa022004fa213ff8e0213ff4fa042028fa213ff0d2042010901020357fff81f088013ff0de01200080a3e0012280000a8c21a008d4012004133f01d29202602811000083900223d87fff5a94010000008c21a0088b196008ba10200182100006fa21bffcda01200cda2060008c21a00c8b19600cba10200298100006fa21bffc96102001d6232004d4012008d4232000d2012010c222600090102001d0226004d8226008053f02018400a24cc422600c90102001ee01201881c5e0068801201c|@4271,131071|68,4,@3795 76,5,@3861 116,5,@3564 144,4,@3924 152,4,I48 160,5,@3313 232,4,@4178 292,5,@3732 328,4,@3393 336,5,@3395 352,4,@3610 360,4,@3609 368,5,@3308 408,5,@3564 436,4,@3924 444,4,I48 452,5,@3313 472,5,@3615 520,4,@3686 528,5,@3687 620,4,@4178 664,4,@4269 804,5,@3564 832,4,@3924 840,4,I48 848,5,@3313 940,4,@4178 4269:C2,16|9e13e002d003600481c3e00601000000|@4270,161| 4270:S60|475f434f444528292e636f646567656e2831302967656e4576616c2836296c6f61645374617469634c696e6b50726f63283229707573684974283129 4271:S51|475f434f444528292e636f646567656e2831302967656e4576616c2836296c6f61645374617469634c696e6b50726f63283229 4272:C2,372|9e13e002f606201880a1001b8bd02018b8222001811f201026800004c4037fe41080000990102001b820a001ba222001811f401c368000049010200110800004b822200181c3e00601000000811f20103680000cde213ffcb8222001811f200026800008de213ffcb8222001b9172020ac072001ae1000161080002cb8222001da213ff8d0213ff492103ffd7ffe112a88013ff48c21a00c8b19600cba102002ae100006fa21bffcac102001ec25e004d025e0008c21a00c8b19600cba10200290100006fa21bffcee2220042b3f019aaa056024ea2220007ffe1275010000008c21a0108b196010ba102003a8100006fa21bffcd0252008273f000fa604e3bce6252004253ee008a404a1fce425200090100014f40620209fc6a00001000000ae102001b8222001b917200490072001de213ffcda213ff8ee213ff47fffffb188013ff48c21a00c8b19600cba102002aa100006fa21bffcd0256004e8012000e825600090100015e601200881c4e0068801200c|@4273,131071|140,5,@509 204,4,@3612 216,5,@520 248,4,@397 260,4,@24 4273:S43|475f434f444528292e636f646567656e2831302967656e4576616c28362967657441726752656773283129 4274:O3|@24,@397,@4275 4275:S35|737461746963206c696e6b2066756e6374696f6e20697320616e20617267756d656e74 4276:C2,120|9e13e002f606201880a1001b8bd02018d0213ffcd0213ff8d0213ff4d0213ff0de213fec92013ff0da036004f40360009fc6a00088013fec8c21a0148b196014ba10200490100006fa21bffcc4012004c4222000ee012008ee222004ec01200cec222008ea012010ea22200ce801200081c5200688012014|@4277,131071| 4277:S51|475f434f444528292e636f646567656e2831302967656e4576616c2836296c6f61645374617469634c696e6b50726f63283129 4278:C2,120|9e13e002f606201880a1001b8bd02018d0213ffcd0213ff8d0213ff4d0213ff0de213fec92013ff0da036004f40360009fc6a00088013fec8c21a0148b196014ba10200490100006fa21bffcc4012004c4222000ee012008ee222004ec01200cec222008ea012010ea22200ce801200081c5200688012014|@4277,131071| 4279:S30|475f434f444528292e636f646567656e2831302967656e4576616c283629 4280:C2,3684|9e13e002f606201880a1001b8bd02018da213ffcd2213ff8d4213ff4d0213ff0c402200080a0a009128000e788013ff0a610000fe4022004e2022008e002200cd00360047fffa3b201000000de01200c82100008d003e0047fffa3ad01000000e6213ffce2213ff8e0213ff4c2213ff0d0213fec9210200190100012da01200c7fffffe088013fec941000089010000a7fffdf870100000080a2200122800013d2012020d2012020d0026004d20120007fffdf9801000000c4012020d2012004d000a0047fffdf9301000000d4012018d201201cd001200cda012020de01201010bfffc988012024d00260047fffa6280100000080a220012280001bd4213ffcd0026004d20120007fffdf8201000000c4012020d2012004d000a0047fffdf7d01000000ee012020ac10000ad405e008d205e004901000161b3f01e59a0361ec7fffcf1501000000d4012018d201201cd0012008da012020de01201010bfffaa88012024d4012018d201201cd001200cda0120207fffffa388013ffcc4012024ee00a004ec05e014ea05a00080a5600122800005d0213ffca810200110800020d0213ffcee213ff8fa00a008fa213ff4d2013ff4901000177fffa3bf88013ff4e8012004e6052014a4102005e424e000d0213ffcd00120001b3f01a89a0362387fff920388013ffc8c21a0108b196010ba102003a2100006fa21bffca0102001e0246008de012000de246004d0246000a8100011108000038801200c88013ffce6012028e8213ffcd404e008d204e004d00120041b3f01e59a0361ec7fffced688013ffce4012028a21ca004d401202492100011d0012014da01202c7fffff6a9e13e002e001202cd0213ffcfa042004fa213ff8de01200cde213ff496102001d4042008d2013ff8d00120041b3f01bc9a0362207fffa5d588013ff4c2012000da012014d8006008d6036004d6232000d4012034d202a004d0026014c402200080a0a00122800005d2213ffcae1020011080001fe2012034fa02a008fa213ff8d2013ff8d0013ffc7fffa37388013ff8ee012004ec05e014aa102005ea25a000d0213ffcd00120001b3f01a89a0362387fff91b788013ffc8c21a0108b196010ba102003a8100006fa21bffca6102001e6252008e4012000e4252004d0252000ae1000148801200ce2012034ee213ffcd4046008d2046004d00120081b3f01e59a0361ec7fffce8c88013ffce0012038fa042004fa213ffcde01201cde213ff896102001d4042008d2013ffcd00120081b3f01bc9a0362207fffa59488013ff8c2012000da012020d8006008d6036004d6232000d0012004d401202c81c2a0068801204080a0a0053280006680a0bff5ee022004ec05e00c808da0013280005ade213ffcea05a000e8056004808d20013280004ede213ffce605200480a4e00132800043de213ffce405a00480a4a00132800038de213ffc8c21a00c8b19600cba102002a2100006fa21bffce0052000e024600482103ff5c22460008c21a00c8b19600cba10200298100006fa21bffc96102001d6232004e22320008c21a00c8b19600cba102002a2100006fa21bffcd8246004c205e008c22460008c21a0148b196014ba10200498100006fa21bffc96102005d623200c173f02199602e2e4d6232008e2232004a2102011e22320008c21a0148b196014ba10200496100006fa21bffce205e010e222e00cda056000da22e008d822e00498102009d822e0009010000bda01200c10bffec788012010901020019a01200c4000026588013ffce201200081c4600688012014901020019a01200c4000025e88013ffce401200081c4a00688012014901020019a01200c4000025788013ffce601200081c4e00688012014901020019a01200c4000025088013ffcea01200081c56006880120143280003480a0a025ee02200480a5e00532800003ac102001ac10200580a580093280002a90102001ec036004ea05a014e805600080a5200122800005de213ffc9010200181c3e00688012010ec213ff8fa036008fa213ff4d2013ff4901000167fffa2bd88013ff4e6012004e404e014a2102005e224a000d0213ffcd00120001b3f01a89a0362387fff910188013ffc8c21a0108b196010ba102003a0100006fa21bffc9e102001de242008c2012000c2242004d024200090100010da01200c81c360068801202081c3e006880120103280002980a0a011de213ffcee02200488013ffc80a5e00132800006ec05e00490102001ec01200081c5a0068801201480a5a00132800009ea012010d4012008d201200cd005e000da012010de01200010bffe6188012014ec213ffce8012008e8213ff8a6102001e6213ff496103ffd9410200192102005d005e000da05600cf40360009fc6a00088013ff4ee01200088012004f606201880a1001b8bd0201830bfffdd328001ddde213ffcee022008ec05e00080a5bff5328001d1de213ffcea02200480a560013280000ae8056004de213ffc901020019a01200c400001e088013ffce801200081c520068801201480a5200132800078e6052004e605e00425000089a404a11880a4c0123280000701000000a21a600492100011d005600010bffe2d8801201023000085a20462f880a4c01132800061de213ffce0056000c204200080a07ff53280000e9810000fd8042004808b20012280000601000000113f002d9002215010bffe1b88012010113f002f9002208c10bffe178801201092102001113f000f9002210c7fffcc0a0100000080a2200122800041d8213ffcd601200cd8213ffcd4213ff894102001d4213ff4d202e00c96103ffd94103ffd901000099210200584100008901000109a100002f40360009fc6a00088013ff4808a20013280000501000000ee02200010800009ec012010113f01cb900220b8f40620209fc6a00001000000ae102001ec012010ee213ffcd405a004133f01b992026350113f01b99002235c7fff563488013ffcea01201080a560012280000601000000293f000fa805210c10800005e6012014293f000fa80520cce6012014e404e004e4212014e204e008e2212010961000149410001492100008d00120001b3f01e29a036184de012004353f01e2b406a19081c6a00488012010901020019a01200c4000016e88013ffcd601200081c2e00688012014901020019a01200c4000016788013ffce001200081c420068801201480a4e00132800142de213ffce405e00423000089a204627880a480113280001501000000de213ffc213f021aa004202ce0213ff8033f021a82006020c2213ff4173f021a9602e020153f021a9402a02cd2052000d00560009a01200c400001b688013ff4da01200081c360068801201421000089a004229880a480103280001501000000de213ffc033f021a82006020c2213ff8193f021a9803202cd8213ff4173f021a9602e02c153f021a9402a020d2052000d00560009a01200c4000019e88013ff4d601200081c2e006880120140300008a8200613880a480013280001501000000de213ffc193f021a9803202cd8213ff8173f021a9602e020d6213ff4173f021a9602e020153f021a9402a02cd2052000d00560009a01200c4000018688013ff4d401200081c2a0068801201419000089980320f880a4800c3280001501000000de213ffc173f021a9602e020d6213ff8153f021a9402a02cd4213ff4173f021a9602e02c153f021a9402a020d2052000d00560009a01200c4000016e88013ff4d201200081c2600688012014170000859602e3f880a4800b3280001501000000de213ffc153f01909402a21cd4213ff8133f01e292026178d2213ff4173f01e29602e178153f01909402a21cd2052000d00560009a01200c4000015688013ff4c401200081c0a00688012014150000899402a2b880a4800a3280001501000000de213ffc133f018c92026390d2213ff8233f021aa2046390e2213ff4173f01a79602e0d4153f021a9402a39cd2052000d00560009a01200c4000013e88013ff4e001200081c420068801201413000089920262d880a480093280001501000000de213ffc233f021aa204639ce2213ff8213f01a7a00420d4e0213ff4173f021a9602e390153f018c9402a390d2052000d00560009a01200c4000012688013ff4de01200081c3e0068801201423000089a20462f880a480113280001501000000de213ffc213f01a7a00420d4e0213ff8033f021a8200639cc2213ff4173f018c9602e390153f021a9402a390d2052000d00560009a01200c4000010e88013ff4da01200081c360068801201421000089a004231880a480103280001501000000de213ffc033f021a82006390c2213ff8193f018c98032390d8213ff4173f021a9602e39c153f01a79402a0d4d2052000d00560009a01200c400000f688013ff4d601200081c2e006880120140300008a820060b880a480013280001501000000de213ffc193f000e980323e4d8213ff8173f021a9602e3a8d6213ff4173f021a9602e3b4153f021a9402a3c0d2052000d00560009a01200c400000de88013ff4d401200081c2a006880120141900008a980320d880a4800c3280001501000000de213ffc173f021a9602e3c0d6213ff8153f021a9402a3b4d4213ff4173f021a9602e3a8153f000e9402a3e4d2052000d00560009a01200c400000c688013ff4d201200081c26006880120141700008a9602e0f880a4800b3280001501000000de213ffc153f021a9402a3b4d4213ff8133f021a920263c0d2213ff4173f000e9602e3e4153f021a9402a3a8d2052000d00560009a01200c400000ae88013ff4c401200081c0a006880120141500008a9402a11880a4800a32800015de213ffcde213ffc133f021a920263a8d2213ff8233f000ea20463e4e2213ff4173f021a9602e3c0153f021a9402a3b4d2052000d00560009a01200c4000009688013ff4e001200081c4200688012014901020019a01200c4000002488013ffcd201200081c2600688012014901020019a01200c4000001d88013ffce401200081c4a00688012014901020019a01200c4000001688013ffcea01200081c5600688012014901020019a01200c4000000f88013ffcee01200081c5e00688012014|@4297,131071|68,5,@3750 88,5,@3750 144,5,@4153 176,5,@4155 196,5,@4155 236,5,@3772 264,5,@4155 284,5,@4155 312,4,@4032 320,5,@4033 440,5,@3753 472,4,@3673 480,5,@3674 564,4,@4032 572,5,@4033 652,4,@3773 660,5,@3775 744,5,@3753 776,4,@3673 784,5,@3674 860,4,@4032 868,5,@4033 912,4,@3773 920,5,@3775 1176,4,@4281 1272,5,@4282 1300,5,@4282 1328,5,@4282 1356,5,@4282 1472,5,@3753 1504,4,@3673 1512,5,@3674 1804,5,@4282 1840,4,I218 1880,4,I105 1936,4,@622 1952,4,@660 1972,4,@380 1980,5,@4020 2088,4,@3865 2124,4,@3748 2132,4,@3749 2140,5,@3308 2164,4,@380 2180,4,@375 2224,4,@4018 2236,4,@4019 2260,5,@4282 2288,5,@4282 2324,4,I229 2348,4,@4284 2360,4,@4283 2372,4,@4283 2380,4,@4284 2400,5,@4288 2420,4,I230 2444,4,@4283 2456,4,@4284 2468,4,@4284 2476,4,@4283 2496,5,@4288 2516,4,I251 2540,4,@4284 2552,4,@4283 2564,4,@4283 2572,4,@4284 2592,5,@4288 2612,4,I217 2636,4,@4283 2648,4,@4284 2660,4,@4284 2668,4,@4283 2688,5,@4288 2708,4,I113 2732,4,@3523 2744,4,@4017 2756,4,@4017 2764,4,@3523 2784,5,@4288 2804,4,I231 2828,4,@3495 2840,4,@4292 2852,4,@3662 2860,4,@4293 2880,5,@4288 2900,4,I232 2924,4,@4293 2936,4,@3662 2948,4,@4292 2956,4,@3495 2976,5,@4288 2996,4,I233 3020,4,@3662 3032,4,@4293 3044,4,@3495 3052,4,@4292 3072,5,@4288 3092,4,I234 3116,4,@4292 3128,4,@3495 3140,4,@4293 3148,4,@3662 3168,5,@4288 3188,4,I247 3212,4,@359 3224,4,@4294 3236,4,@4295 3244,4,@4296 3264,5,@4288 3284,4,I248 3308,4,@4296 3320,4,@4295 3332,4,@4294 3340,4,@359 3360,5,@4288 3380,4,I249 3404,4,@4295 3416,4,@4296 3428,4,@359 3436,4,@4294 3456,5,@4288 3476,4,I250 3500,4,@4294 3512,4,@359 3524,4,@4296 3532,4,@4295 3552,5,@4288 3580,5,@4282 3608,5,@4282 3636,5,@4282 3664,5,@4282 4281:O2|-3,I113 4282:C2,276|9e13e002f606201880a1001b8bd02018c4036000de213ffcda213ff8ee037ff8ee213ff4ac102001ec213ff096103ffd94103ffd92102001d0037ff4da00a00cf40360009fc6a00088013ff0ea012000e8057ffc80a520012280000601000000273f021aa604e02010800005e4056000273f021aa604e02ce4056000d0213ffce6213ff8d404a004133f01b992026350113f01b99002235c7fff548288013ff8e2012004808c60013280001501000000e0012008de042000c203e004da01200cc221200cd803e008d8212008d6012000d401200092100008d00460008410000d1b3f01e29a0361849e100002353f01e2b406a19081c6a00488012008113f021a90022038f40620209fc6a0000100000090102001|@4287,131071|96,4,@4283 112,4,@4284 136,4,@3748 144,4,@3749 152,5,@3308 224,4,@4018 236,4,@4019 252,4,@4285 4283:O2|-2,9 4284:O2|-2,1 4285:O3|@24,@397,@4286 4286:S18|67656e546573743a204e6f20726573756c74 4287:S46|475f434f444528292e636f646567656e2831302967656e5465737428332967656e4f746865725465737473283129 4288:C2,532|9e13e002f606201880a1001b8bd02018c4037ffc80a0a00122800003ae10000bae10000a80a0a00122800003ec012000ec0120049610000f9410000daa100008901000174000007b0100000080a2200122800004de0560001080001e9810001780a3fff53280000d981000178210000998100017d2056004901000167fffc9cc0100000080a2200122800006da00600010800012e802a00082100009da00600080a37ff53280005690102001d20060049010000c7fffc9be0100000080a220012280004f9010200110800004e802a00082100009e802a000d6213ffcd4213ff8c2213ff4d8213ff0ec213fece602bff8e6213fe8a4102001e4213fe496103ffd94103ffd9210200590100015da05200cf40360009fc6a00088013fe4808a20013280000501000000e202200010800009e001200c113f01cb900220b8f40620209fc6a00001000000a2102001e001200cde042000e2213ffcc2043ff8c2213ff89a102001da213ff496103ffd94103ffd92102005d0012008da03e00cf40360009fc6a00088013ff4808a20013280000501000000d802200010800009d6012010113f01cb900220b8f40620209fc6a0000100000098102001d6012010d402e000d202a004d221201cd002a008d0212018d6012004d40120089210000cd00120001b3f01e29a036184de012014353f01e2b406a19081c6a004880120189a10000a9e10000b353f0219b406a2f081c6a00488012008|@4291,131071|68,5,@4289 124,5,@4020 180,5,@4020 308,4,@3865 416,4,@3865 480,4,@4018 492,4,@4019 516,4,@4282 4289:C2,80|9e13e002c402200080a0a0053280000580a0bffd9010200181c3e006010000003280000580a0bff99010200181c3e0060100000032800005901020059010200581c3e0060100000081c3e00601000000|@4290,65665| 4290:S27|5350415243434f4445434f4e5328292e6973436f6d705252283129 4291:S43|475f434f444528292e636f646567656e2831302967656e5465737428332967656e436f6d70617265283629 4292:O2|0,10 4293:O2|0,11 4294:O2|-2,12 4295:O2|-2,5 4296:O2|-2,13 4297:S30|475f434f444528292e636f646567656e2831302967656e54657374283329 4298:C2,384|9e13e002f606201880a1001b8bd02018b8222001811f20103680004084103ffdb8222001811f20103680000cde213ffcb8222001811f200026800008de213ffcb8222001b9172020ac072001ae1000161080002d8c21a008da213ff8d2213ff4d4213ff092103ffd7ffe0b6c88013ff08c21a00c8b19600cba102002ae100006fa21bffcac102001ec25e004d025e0008c21a00c8b19600cba10200290100006fa21bffcee2220042b3f019aaa056024ea2220007ffe0cb7010000008c21a0108b196010ba102003a8100006fa21bffcd0252008273f000fa604e3bce6252004253ee008a404a1fce425200090100014f40620209fc6a00001000000ae1020018c21a0088b196008ba10200184100006fa21bffcee20a000de213ffcd4213ff8ae102001ee213ff496103ffd94100002ac1000099210200590100016da036004f40360009fc6a00088013ff4808a20013280000601000000d0022000ea01200081c5600688012004113f021b90022190f40620209fc6a0000100000090102001|@4301,131071|104,5,@509 168,4,@3612 180,5,@520 212,4,@397 224,4,@24 360,4,@4299 4299:O3|@24,@397,@4300 4300:S17|67656e4172673a206e6f20726573756c74 4301:S29|475f434f444528292e636f646567656e2831302967656e417267283329 4302:C2,252|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d2213ff4d6213ff0c4012000c4213fec9610000a9410000992102005da03600cf40360009fc6a00088013fecee01200080a5e00132800006808de00190102001ec01200881c5a006880120103280002001000000808a20013280001701000000ec012004aa102005ea213ffcd6022000d405e000d205a004d005a0081b3f01c09a0361f87fffadfa88013ffca81000088c21a0088b196008ba10200190100006fa21bffce8222000e601200881c4e00688012010113f021b900222fcf40620209fc6a0000100000090102001113f021b9002232cf40620209fc6a0000100000090102001|@4307,131071|148,4,@3795 156,5,@3861 204,4,@4303 228,4,@4305 4303:O3|@24,@397,@4304 4304:S24|67656e546f52656769737465723a206e6f20726573756c74 4305:O3|@24,@397,@4306 4306:S29|67656e546f52656769737465723a206e6f742061207265676973746572 4307:S36|475f434f444528292e636f646567656e2831302967656e546f5265676973746572283529 4308:O1|@3363 4309:C2,20|9e13e002c4022018d000a00081c3e00601000000|@2430,65665| 4310:C2,68|9e13e002f606201880a1001b8bd02018c4022010ee00a008ec05e000ec213ffcde213ff892102001901020419a013ffc4000000c88013ff8ea01200081c5600688012008|@4313,131071|48,5,@4311 4311:C2,320|9e13e002f606201880a1001b8bd02018b8222001811f200036800005de213ffc9010000981c3e00601000000da213ff8d0213ff4d2213ff07fff548188013ff0c4012008ee00a00080a5e00132800004d0213ffc1080001bd0213ffcec05e00088013ffc80a5a00132800005d2012000aa1020011080000f80a56001d005a0007fff5bc90100000080a2200122800005ec05a004aa1020051080000680a56001f606201880a1001b8bd0201830bfffee32800006ec01200810800019e801200888013ffcec012008b825a001b91f2004aa072001ea213ffc901000167fff545888013ffc8c21a00c8b19600cba102002a8100006fa21bffce6012008e6252004d025200092100014d0012000da012010de01201410bfffbc88012018b8252001b91f2004a6072001d201200490100013da01200cde01201010bfffb388012014|@4312,131071|56,5,@3321 128,5,@3373 220,5,@3321 4312:S41|5452414e535f54414228292e6765744d6f646966656452656753657428312967657452656773283229 4313:S31|5452414e535f54414228292e6765744d6f6469666564526567536574283129 4314:O8|@4316,@4344,@4424,@4315,@3433,@3949,@3710,@3495 4315:O3|@4430,@3433,@4233 4316:C2,3312|9e13e002f6062018ba21207c80a7401b8bd02018c4022000ee00a000ec022040ea05a000a810000fa610000da410000890103fe17fff6d9701000000de04e01cda03e00080a37ffd32800005c403e004c203e00410800013a2100009b820a001811f200036800008a21000020300002082006001b820a001ba206001b917401ca20720010300002082006001b8206001ba246001b917401c82072001a2100009a010000a98100017ea213ffc9610203dd6213ff8961000019410203d92100008901020097fff657988013ff88c21a00c8b19600cba10200294100006fa21bffc92102001d222a004d022a000b8246001811f2050268000a3c4012000e8213ffce6213ff8e4213ff4e2213ff0e0213fecfa04a038fa213fe8fa04a044fa213fe4d8213fe0d0213fdcd4213fd8901020617fff6c0d88013fd8ae100008901020017fff643a01000000ea05e00080a57ffd32800005e805e004ec05e00410800013a210206db8252001811f200036800008a610001425000020a404a001b8252001ba24a001b917401ca607200125000020a404a001b824a001ba24e001b917401cac072001a210206de2213ffc9610001694102061921000089010200d7fff653b88013ffce0012018b8242001ba10001cbb17401db917401d9e072001d0213ffcd0213ff8c2012020d0213ff492013ff89010000fda006018f40360009fc6a00088013ff490103fc57fff6d2201000000da012008d603600080a2fffd32800005d4036004d803600410800013ae102075b822a001811f2000368000089210000a050000208400a001b822a001ba20a001b917401c92072001050000208400a001b820a001ba226001b917401c98072001ae102075ee213ffc9610000c9410201192100008901020097fff650888013ffcac100008901020417fff6cfe01000000a8100016a6102001e6213ffc9610206d9410207592100008901020097fff64fb88013ffce401202c8c21a00c8b19600cba102002a2100006fa21bffca0102001e0246004de04a014de2460008c21a00c8b19600cba10200282100006fa21bffce2206004d02060008c21a00c8b19600cba1020029a100006fa21bffcc2236004e823600080a3600132800005da213ffcd8012004108000098c21a00cd00120049a0120344000027288013ffc98100008880120048c21a00c8b19600cba10200296100006fa21bffcd822e004d4012000d422e0008410000b1080006fc4213ffc80a0a0012280005a84102001e8213ffce6213ff8e4213ff4d0213ff0e0213fecfa04a038fa213fe8fa04a044fa213fe4d8213fe0d0213fdcd4213fd8901020617fff6b6988013fd8ae100008901020017fff639601000000ea05e00080a57ffd32800005e805e004ec05e00410800013a210206db8252001811f200036800008a610001425000020a404a001b8252001ba24a001b917401ca607200125000020a404a001b824a001ba24e001b917401cac072001a210206de2213ffc9610001694102061921000089010200d7fff649788013ffca0100008901020417fff6c8d010000009e102001de213ffc9610206d9410201192100008901020097fff648b88013ffcc20120208c21a00c8b19600cba1020029a100006fa21bffc98102001d8236004d6006014d62360008c21a00c8b19600cba10200294100006fa21bffcda22a004d022a0008c21a00c8b19600cba10200284100006fa21bffcd420a004e020a00010800010d0213ffce8213ffce6213ff8e4213ff4d0213ff0e0213fecfa04a038fa213fe8fa04a044fa213fe4d8213fe0d0213fdcd4213fd888013fd8d0213ffcd0213ff8d0213ff488013ff4c4213ffcae10200188013ffc80a0a00132800005b825e001ac1000171080000ab825a001b9172004aa072001c400a004ae100015f606201880a1001b8bd0201830bffff3b9172004aa072001d0213ffcd0213ff8d0213ff492013ff4901000159a0120384000020188013ff4a8102001e601200c80a4e00132800005b8252001a41000141080000ab824a001b9172004a2072001e604e004a8100011f606201880a1001b8bd0201830bffff3ba102000b91f401ca2072001e001200c808c200132800005de01203cde04200010800004e2213ffcde03e010e2213ffcde213ff88210200188013ff880a4200132800005b82060019a1000011080000ab8236001b917200498072001e00420048210000cf606201880a1001b8bd0201830bffff3b917200498072001ba102000b91f401c96072001d4012024808aa00132800003d2012000d2012028d001202cc4012008b820a001ba222001b917401cae072001b917200cac072001ea012040e8056020e6052000e4012044ee213ffcec213ff8a210000b961000139410001190100015da04a00cf40360009fc6a00088013ff8e0012048de042024c203e000da01204c96100001d401200cd201200890100010da036008f40360009fc6a00001000000d8012014808b200122800005010000009610000c1080000994102001113f002990022348f40620209fc6a000010000009610200194102001921021059010000b1b0000829a036338f40360009fc6a000010000008c21a00c8b19600cba10200294100006fa21bffcd022a00492102001d222a0008c21a0088b1960083b100000ba07600190100006fa21bffcd4222000c4012048ee012034b825e001ba10001cbb17401db917401dac072001d0213ffcd60120109410001692100008d000a0087fff67a588013ffcaa102001e801201c80a5200132800005ea213ffca61020011080001490102001fa052004fa213ff8d401200092100015d00520007fff661c88013ff8e4012004b824a001b9172004a2072001e8012000aa10001188012008f606201880a1001b8bd0201830bfffe97fffc23401000000d4012000d20120087fff660b01000000e4012008b824a001b9172004a2072001ba10001cbb17401db917401d90072001e2213ffc7fffc22588013ffcd4012004d20120007fff65fc01000000e001200cb8242001b91720089e072001de213ffc901020017fffc21988013ffcd4012008d20120007fff65f001000000c201200cb8206001b91720089a072001da213ffc901020097fffc20d88013ffcd401200cd20120007fff65e401000000d801200cd6032000d202e00080a260013280001901000000fa02e004fa213ffc92102109d0013ffc1b0000889a0362d8f40360009fc6a00088013ffc8c21a00c8b19600cba10200290100006fa21bffcc4012000c4222004ae102005ee222000ec012010d025a0009410200110800009ea01205c113f0220900221d8f40620209fc6a0000100000094102001ea01205c8c21a00c8b19600cba102002a8100006fa21bffce6012024e6252004ec252000e405601ce824a000fa056014fa213ffc13000083920263d8d0013ffc1b0000839a0360d8f40360009fc6a00088013ffc80a2200122800003e2012000a210200194100011d2012018d00120144000018901000000e2012018b8246001b9172004a0072001e0213ffcde0120588210200188013ffc80a3e00132800005c2213ffc9a100001108000239410000dfa03e004fa213ff8d003e0007fff5abe88013ff8808a2001228000050100000098100008108000099210000c1b0000879a0360d8f40360009fc6a00001000000981000089210000c901020051b00008a9a036078f40360009fc6a00001000000d80120049612000c8210000bde01200088012008f606201880a1001b8bd0201830bfffdad2012000d00120184000015601000000d8012064d6032010d402e00080a2a00132800005d002a000921020011080000fd0012064fa02a004fa213ffcd2022004d00220009a012070400001e788013ffcd401200088012004f606201880a1001b8bd0201830bfffeec4022034ee00a00080a5e00132800027ac102001ea012018e8056000e605200080a4e0053280001901000000fa052004fa213ffc92102009d0013ffc1b0000889a0362d8f40360009fc6a00088013ffc8c21a00c8b19600cba102002a4100006fa21bffce2012000e224a004a0103ffde024a000de01201ce423e000ac1020011080000dec012068113f0222900221f8f40620209fc6a00001000000ac10200110800005ec012068d0213ffc88013ffcec012068ea05a01880a5600122800011e801201ce601201ce404e000e204a00080a4600132800027e804a004113f01aa900223d0f40620209fc6a00001000000a8102001e804a0041080001fe8213ffce6052000e204e00080a4600132800009e404e004113f01aa900223d0f40620209fc6a00001000000a4102001e404e0048c21a0088b1960083b100000ba076001a0100006fa21bffce4242000e0213ffc901000101b0000839a0363b8f40360009fc6a00088013ffce801200088012004e8213ffc92100014d0012068400002e988013ffcde01205c80a3e0012280001282102001da01206cd8012070d6012060d4012028d2036014d0012020da032004f40360009fc6a0000100000090102029da012060f40360009fc6a0000100000082100008d0012000c201207481c060068801207c|@4343,131071|52,5,@3483 108,4,8192 132,4,8192 196,5,@3429 304,5,@3472 320,5,@3427 372,4,8192 396,4,8192 444,5,@3429 520,5,@3483 576,4,8192 600,4,8192 648,5,@3429 664,5,@3483 700,5,@3429 836,5,@4317 960,5,@3472 976,5,@3427 1028,4,8192 1052,4,8192 1100,5,@3429 1116,5,@3483 1148,5,@3429 1428,5,@4318 1820,4,@542 1856,4,I11 1984,5,@3453 2044,5,@3444 2096,5,@4005 2112,5,@3444 2156,5,@4005 2172,5,@3444 2204,5,@4005 2220,5,@3444 2252,5,@4005 2268,5,@3444 2316,4,I200 2392,4,@4321 2468,4,I48 2480,4,I24 2528,5,@4323 2604,5,@3385 2636,4,I152 2668,4,I245 2732,5,@4323 2796,5,@4328 2888,4,I200 2964,4,@4335 3048,4,@3683 3104,4,@3683 3168,4,I47 3208,5,@4337 4317:C2,112|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffcd0037fc881c3e00601000000da213ff8fa022000fa213ff4d00220047ffffff288013ff48c21a00c8b19600cba1020029e100006fa21bffcd023e004da012000da23e0009010000fde01200881c3e0068801200c|@1966,161| 4318:C2,336|9e13e002f606201880a1001b8bd02018c4037fe0b8222001ba20a001b917401cae072001b9172018ac072001ee037fc880a5e00132800003aa100017aa10200180a5600132800003a8100015a810200180a5200132800005e8213ffce6037fd810800010de213ffcaa10000fa610000da4100008d004ffd89a013ffc4000003c88013ffc9e100013a6100008901000129a10000f9e10001588012004de213ffcda213ff8d0213ff4d2213ff0ec213fece6213fe88410200188013fe880a4e00132800005b820a001ae1000021080000aec01200cb9172004ac072001e604e00484100016f606201880a1001b8bd0201830bffff3b825a001ba25e001811f401c3280000cb825a001ea012008ec256000e8012004e8256004e6012000e625600890102001e401201481c4a00688012018b9172004aa072001d201200890100015da012010de01201410bfffaf88012018|@4320,130211|124,5,@4319 4319:C2,112|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffcd003600081c3e00601000000da213ff8fa022000fa213ff4d00220047ffffff288013ff48c21a00c8b19600cba1020029e100006fa21bffcd023e004da012000da23e0009010000fde01200881c3e0068801200c|@1966,161| 4320:S44|5350415243434f4445434f4e5328292e636f7079436f64652833296765745072656c756465436f6465283229 4321:O3|@24,@397,@4322 4322:S37|63736567436f6e76657274546f436f64653a206e6f7420612062797465207365676d656e74 4323:C2,488|9e13e002f606201880a1001b8bd02018c4022000d000a00080a220053280006dde213ffcee00a004fa05fffcbb2f6008b9376006ac072001811f200036800008aa100016293f000ea8052330b825a001ba252001b917401caa072001b8226001811f200036800004b822600110800008de213ffcba256001811f401c24800004de213ffc10800043808a6001ea213ff8a810000992103ffd901000147ffe05d688013ff8d0213ffc92103ffdd00120007ffe05d188013ffc8c21a00c8b19600cba102002a6100006fa21bffca4102001e424e004d024e0008c21a00c8b19600cba102002a2100006fa21bffce6246004213f0184a004214ce02460008c21a00c8b19600cba1020029e100006fa21bffce223e004c2012000c223e0008c21a00c8b19600cba10200290100006fa21bffcde2220041b3f02219a03601cda2220007ffe070b010000008c21a0108b196010ba10200398100006fa21bffcd0232008173f000f9602e3bcd6232004153ee0089402a1fcd42320009010000cf40620209fc6a0000100000090102001808a600122800005de213ffcaa10000910800009b8256001113f002990022348f40620209fc6a00088013ffcaa102001b8256001d425c01c9010200181c3e00601000000113f022190022038f40620209fc6a00088013ffc90102001|@4327,131071|68,4,@349 156,5,@509 176,5,@509 240,4,@3438 308,4,@4324 320,5,@520 352,4,@397 364,4,@24 420,4,@542 464,4,@4325 4324:S19|63736567507574576f72643a20496e64657820 4325:O3|@24,@397,@4326 4326:S41|63736567507574576f72643a206e6f7420616e20756e6c6f636b656420636f6465207365676d656e74 4327:S23|434f44455f5345472e63736567507574576f7264283329 4328:C2,608|9e13e002f606201880a1001b8bd02018c402200080a0a0053280002f80a0bffdee037ff4ec05e01cea05a000808d600132800005de213ffca81000151080000bea052004e8022004113f003890022020f40620209fc6a00088013ffc90100014a8102001ea052004b8256001ba226001b917401ca6072001ba10001cbb17401db917401d92072001de213ffcda213ff896102001d4022004d00520004000007888013ff8d0012000c4023ff4ee00a034ec05e000b825a001b91f2004aa072001ea25e00090102001e801200481c52006880120083280006190102001ee022004ec05e000ea037fbcb8256001ba25a001b917401ca8072001ba10001cbb17401db917401da6072001e4037fa8e204a000c204600080a060013280000ae0046004de213ffc113f01aa900223d0f40620209fc6a00088013ffca0102001e0046004b824e001b917200898072001808b200122800005de213ffc9610000c108000099410000f113f002990022348f40620209fc6a00088013ffc961020019410000fac10000da81000099210000b901000101b0000899a0360b8f40360009fc6a00001000000e605bff4e004e01cde042000808be00132800005d4213ffc9a10000f1080000bd80360049a100008113f003890022020f40620209fc6a00088013ffc9810000d9a102001d8036004b8232001ba252001b917401c96072001ba10001cbb17401db917401d92072001d4213ffcec213ff89610200194100008d00360004000001788013ff8d0012000c4023ff4ee00a034ec05e000b825a001b91f2004aa072001ea25e00090102001e801200481c520068801200881c3e00601000000|@4334,131071|72,4,@1110 156,5,@4329 292,4,@3683 356,4,@542 400,4,I215 460,4,@1110 544,5,@4329 4329:C2,516|9e13e002f606201880a1001b8bd02018c4022000d000a00080a2200532800074de213ffcee00a004fa05fffcbb2f6008b9376006ac072001811f200036800008aa100016293f000ea8052330b825a001ba252001b917401caa072001b8256001ba10001cbb17401db917401da8072001b8226001811f200036800004b822600110800008de213ffcba252001811f401c24800004de213ffc10800043808a6001ea213ff8a610000992103ffd901000137ffe049188013ff8d0213ffc92103ffdd00120007ffe048c88013ffc8c21a00c8b19600cba102002a4100006fa21bffca2102001e224a004d024a0008c21a00c8b19600cba102002a0100006fa21bffce42420041f3f01849e03e14cde2420008c21a00c8b19600cba10200282100006fa21bffce0206004da012000da2060008c21a00c8b19600cba10200290100006fa21bffcc2222004193f022298032138d82220007ffe05c6010000008c21a0108b196010ba10200396100006fa21bffcd022e008153f000f9402a3bcd422e004133ee008920261fcd222e0009010000bf40620209fc6a0000100000090102001808a600122800005de213ffca61000091080000992100013113f002990022348f40620209fc6a00088013ffca610200192100013901000171b0000889a036218f403600081c6a00401000000113f022290022158f40620209fc6a00088013ffc90102001|@4333,131071|68,4,@349 176,5,@509 196,5,@509 260,4,@3438 328,4,@4330 340,5,@520 372,4,@397 384,4,@24 440,4,@542 472,4,I194 492,4,@4331 4330:S23|63736567507574436f6e7374616e743a20496e64657820 4331:O3|@24,@397,@4332 4332:S45|63736567507574436f6e7374616e743a206e6f7420616e20756e6c6f636b656420636f6465207365676d656e74 4333:S27|434f44455f5345472e63736567507574436f6e7374616e74283429 4334:S43|5350415243434f4445434f4e5328292e636f7079436f64652833297075744c6f63616c436f6e7374283229 4335:O3|@24,@397,@4336 4336:S47|63736567436f6e76657274546f436f64653a206e6f7420616e20756e6c6f636b656420636f6465207365676d656e74 4337:C2,112|9e13e002f606201880a1001b8bd02018c402202cee00a000d2213ffcd0213ff8de213ff488013ff480a5e00132800006fa05e00490102001de01200081c3e0068801200cfa213ffcd005e0009a0120084000000f88013ffcee01200088012004f606201880a1001b8bd0201830bfffef|@4342,131071|80,5,@4338 4338:C2,360|9e13e002f606201880a1001b8bd02018fa022034fa213ffcda213ff8d0213ff4c4022010ee00a000de213ff088013ff080a5e00132800004ec05e0001080000fec01200cfa05e004fa213ffcd205a004d005a0009a01200c4000004b88013ffcee01200088012004f606201880a1001b8bd0201830bfffefea05a00080a560013280003790102001e8012004e605201ce404e000808ca0013280000501000000a210001210800009e0046000113f003890022020f40620209fc6a00001000000a2102001e0046000de042000c203e00080a060053280001b01000000e0213ffcfa03e004fa213ff892102009d0013ff81b0000889a0362d8f40360009fc6a00088013ff88c21a00c8b19600cba1020029a100006fa21bffcd8012000d823600496103ffdd6236000d4012004da22a00090102001d201200881c2600688012018113f0222900221f8f40620209fc6a000010000009010200190102001e801200081c5200688012010|@4341,131071|88,5,@4339 172,4,@1110 240,4,I200 320,4,@4335 4339:C2,248|9e13e002f606201880a1001b8bd02018c402200080a0a0013280003690102001ee037ffcec022004ea05fffce805a01ce605601c80a500133280002c90102001e4037ff8e204a01ce0046000808c200132800005de213ffc8210001010800009e0006004113f003890022020f40620209fc6a00088013ffc82102001e0006004b8242001ba226001b917401c98072001ba10001cbb17401db917401d92072001de213ffcda213ff896102001d405e000d00060007ffffe8588013ff8d0012000c4022000ee00a000b825e001b91f2004ac072001ec20a00090102001ea01200481c560068801200881c3e0060100000081c3e00601000000|@4340,131071|100,4,@1110 180,5,@4329 4340:S59|5350415243434f4445434f4e5328292e6669784f74686572526566732832296669785265662831297075744e6f6e4c6f63616c436f6e7374283229 4341:S40|5350415243434f4445434f4e5328292e6669784f7468657252656673283229666978526566283129 4342:S31|5350415243434f4445434f4e5328292e6669784f7468657252656673283229 4343:S27|5350415243434f4445434f4e5328292e636f7079436f6465283329 4344:O2|@4345,@3433 4345:C2,4896|9e13e002f606201880a1001b8bd02018d6213ffcde213ff8da213ff4d0213ff0d2213fecd4213fe813000083920263d8d0013fec1b0000839a0360d8f40360009fc6a00088013fe880a2200122800009d0012004901020fdda012014f40360009fc6a000010000001080000601000000da012014f40360009fc6a00001000000113f02289002216cda012014f40360009fc6a000010000008c21a0088b1960083b100000ba07600184100006fa21bffcae102001ee20a000c4213ffc88013ffcec012000ea05a000e8012004b8252001ba256001811f401c3680048f90102001e605a000b824e001b9172004a4072001e425a000e6213ffcd201200c901000137fff5fae88013ffce2022000b8246001b92f2008a0072001de0220048214000fda022008b8236001b92f200898072001d602200c9413000bd4213ffc1300010092026001901000011b0000859a036358f40360009fc6a00088013ffcd2012000b8226001ba222001b917401c84072001ee012004b825e001ba10001cbb17401db917401dac072001c4213ffcec213ff892100016d00120147fff5fe788013ff8b8222001811f200026800003aa102001aa10200580a5600532800005b8222001a81000081080000592102101b91f20fca807200192102101901000141b0000859a036378f40360009fc6a00001000000d0213ffc92102005d00120007ffe027888013ffcda01202cf40360009fc6a0000100000090102025da01202cf40360009fc6a00001000000e401200080a4a0013280019d80a4a005e2012008b8246001811f200026800003a0102001a010200580a4200532800005010000009e100011108000080100000003003fff820063fdb8206001ba246001b91f401c9e07200113004000920260019010000f1b0000859a036378f40360009fc6a00001000000921020211b0000859a036398f40360009fc6a0000100000080a2200132800004b82220011080000c9a100008811f2000268000039a1020019a10200580a36005228000059a100008b8222001b91720209a07200180a360113280009180a36009da012024d8036004d6032000b822e001b92f200894072001d203200490128009c4032008b820a001b92f2008ae072001ec03200caa15c016ea213ffc13000100920260011b0000859a036358f40360009fc6a00088013ffce8012000b8252001ba222001b917401ca6072001e401200cba24a001811f401c3280000b01000000113f022890022178da012030f40360009fc6a00001000000a6100008108003d590102029113f022890022184da012030f40360009fc6a000010000001300400092026001d001200c1b0000859a036398f40360009fc6a0000100000080a2200132800004b82220011080000fa2100008811f200026800003a2102001a210200580a4600522800008a210000823004000a2046001b8246001ba222001b917401ca207200192102005901000117ffe01ec01000000da012030f40360009fc6a00001000000901020b1da012030f40360009fc6a00001000000e001200cb8242001811f2000268000039e1020019e10200580a3e00532800005010000008210001010800008010000001b01ffff9a0363fdb8236001ba242001b91f401c820720011302000092026001901000011b0000859a036378f40360009fc6a00001000000921020811b0000859a036398f40360009fc6a0000100000080a2200132800004b82220011080000c98100008811f200026800003981020019810200580a320052280000598100008b8222001b9172080980720019010000c7fff4c2601000000da012030f40360009fc6a00001000000a61000081080036f90102029328000b480a360011300400092026001d00120081b0000859a036398f40360009fc6a0000100000080a2200132800004b82220011080000f9a100008811f2000268000039a1020019a10200580a36005228000089a1000081b0040009a036001b8236001ba222001b917401c9a0720011900200098032001b8232001ba236001811f401c36800005010000009610000d10800009b822e001170040009602e001b822e001ba236001b91f401c96072001b822e001ba10001cbb17401db917401d94072001d2012008b8226001811f200026800003901020019010200580a2200532800005010000008410000910800009d6213ffc2f01ffffae05e3fdb825e001ba226001b91f401c84072001d6213ffcd4213ff81302000092026001901000021b0000859a036378f40360009fc6a00088013ff8921020411b0000859a036398f40360009fc6a0000100000080a2200132800004b82220011080000cac100008811f200026800003ac102001ac10200580a5a00522800005ac100008b8222001b9172040ac07200190100016400003270100000092100008901021897ffdffd101000000da012034f40360009fc6a00001000000ec012010b825a001811f200026800003aa102001aa10200580a560053280000501000000a81000161080000801000000271fffffa604e3fdb824e001ba25a001b91f401ca8072001133f0228920263c0901000141b0000859a036378f40360009fc6a0000100000080a220053280000990102025113f0228900223ccda012034f40360009fc6a0000100000090102025da012034f40360009fc6a0000100000092102005d00120047ffe011101000000da012034f40360009fc6a00001000000113f0228900223d8da012034f40360009fc6a00001000000e401200ce2012000b8246001ba24a001b917401ca007200192102005901000107ffe00fd01000000da012034f40360009fc6a00001000000a6100008108002ba880120043280001892102005113f0228900223e8da01202cf40360009fc6a0000100000090102025da01202cf40360009fc6a0000100000092102005d00120087ffe00e501000000da01202cf40360009fc6a00001000000a61000081080000bd0213ffcd00120087ffe00db01000000da01202cf40360009fc6a00001000000a6100008d0213ffcd0213ff888013ff88801200410800295901020293280004480a4a009e2012008213f000ea0042330b8242001ba246001b91f401c9e072001033f0228820063c0ba206001811f001d36800005010000009a10000f10800009b82360011b3f000e9a036330b8236001ba23e001b91f401c9a072001b8236001ba10001cbb17401db917401d98072001da213ffcd8213ff8113f0228900223f8da01202cf40360009fc6a00088013ff892102005d00120047ffe00a701000000da012034f40360009fc6a00001000000113f0228900223d8da012034f40360009fc6a00001000000d601200cd4012000b822a001ba22e001b917401c9207200190100009921020057ffe009301000000da012034f40360009fc6a00001000000a6100008108002508801200432800115e2012008e2012008b8246001811f200026800003a0102001a010200580a4200532800005010000009e1000111080000801000000030007ff820063fdb8206001ba246001b91f401c9e07200113000800920260019010000f1b0000859a036378f40360009fc6a00001000000921021011b0000859a036398f40360009fc6a0000100000080a2200132800004b82220011080000c9a100008811f2000268000039a1020019a10200580a36005228000059a100008b8222001b91721009a072001d8012008b8232001811f200026800003961020019610200580a2e00532800005010000009410000c10800009da213ffc1300003f920263fdb8226001ba232001b91f401c94072001da213ffc13000040920260019010000a1b0000859a036378f40360009fc6a00088013ffc921020811b0000859a036398f40360009fc6a0000100000080a2200132800004b82220011080000c84100008811f200026800003841020018410200580a0a0052280000584100008b8222001b917208084072001d001200cb8222001811f200026800003ae102001ae10200580a5e0053280000501000000ac10000810800009c4213ffc2b01ffffaa0563fdb8256001ba222001b91f401cac072001c4213ffc1302000092026001901000161b0000859a036378f40360009fc6a00088013ffc921020811b0000859a036398f40360009fc6a0000100000080a2200132800004b82220011080000ca8100008811f200026800003a8102001a810200580a5200522800005a8100008b8222001b9172080a807200190103fe17fff639e01000000e6012004b8222001ba24e001811f401c32800007a4102001e201200080a4600132800003a4102001a410200590103fb57fff639001000000b8222001ba24e001811f401c32800003a2102001a210200580a4a0012280000d80a46001e8213ffce4213ff8e2213ff4113f022990022008da012034f40360009fc6a00088013ff4108000339010202522800028e8213ffce8213ffce4213ff8e2213ff492102041901000141b0000859a036398f40360009fc6a00088013ff480a2200132800004b82220011080000ca4100008811f200026800003a4102001a410200580a4a00522800005a4100008b8222001b9172040a4072001901000124000019a0100000092100008901021d17ffdfe4401000000da012040f40360009fc6a000010000001080000b90102025e4213ff8e2213ff492100013113f0229900220149a012034400002b188013ff490102025da012040f40360009fc6a00001000000e401200480a4a00122800004d001200c1080000ed001201c7fff4a0e01000000da012040f40360009fc6a00001000000901020b1da012040f40360009fc6a00001000000d001201c9a012040400002d601000000e201200080a4600122800005901020b1a6102001108001488801200cda012040f40360009fc6a00001000000d00120087fff49f301000000da012040f40360009fc6a00001000000a61000081080013a8801200cb8246001811f200026800003a0102001a010200580a4200532800005010000009e1000111080000801000000030007ff820063fdb8206001ba246001b91f401c9e07200113000800920260019010000f1b0000859a036378f40360009fc6a00001000000921021011b0000859a036398f40360009fc6a0000100000080a2200132800004b82220011080000c9a100008811f2000268000039a1020019a10200580a36005228000059a100008b8222001b91721009a072001d8012008b8232001811f200026800003961020019610200580a2e00532800005010000009410000c10800009da213ffc1300003f920263fdb8226001ba232001b91f401c94072001da213ffc13000040920260019010000a1b0000859a036378f40360009fc6a00088013ffc921020811b0000859a036398f40360009fc6a0000100000080a2200132800004b82220011080000c84100008811f200026800003841020018410200580a0a0052280000584100008b8222001b917208084072001d001200cb8222001811f200026800003ae102001ae10200580a5e0053280000501000000ac10000810800009c4213ffc2b01ffffaa0563fdb8256001ba222001b91f401cac072001c4213ffc1302000092026001901000161b0000859a036378f40360009fc6a00088013ffc921020811b0000859a036398f40360009fc6a0000100000080a2200132800004b82220011080000ca8100008811f200026800003a8102001a810200580a5200522800005a8100008b8222001b9172080a8072001e601200480a4e0012280000680a4e00180a4e0053280003a80a4e01180a4e0013280000be8213ffce8213ffc113f022a900221b8da012034f40360009fc6a00088013ffc1080000801000000113f022a900221c4da012034f40360009fc6a00088013ffc113f022a900221d0da012038f40360009fc6a00001000000d00120047fff493c01000000da012038f40360009fc6a00001000000901020adda012038f40360009fc6a00001000000d00120149a0120384000020401000000113f022a900221dcda012038f40360009fc6a00001000000d00120007fff492601000000da012038f40360009fc6a00001000000a61000081080006ad0213ffc2280000680a4e01180a4e0153280003ae8213ffc80a4e0113280000601000000113f022a900221e810800005e8213ffc113f022a900221f4e8213ffcda012034f40360009fc6a00088013ffc90102025da012038f40360009fc6a00001000000d00120007fff490401000000da012038f40360009fc6a00001000000113f022a90022200da012038f40360009fc6a00001000000d00120047fff48f701000000da012038f40360009fc6a00001000000901020adda012038f40360009fc6a00001000000d00120149a012038400001bf0100000090102175da012038f40360009fc6a00001000000a61000081080002dd0213ffc92102005901000137ffdfe6988013ffcda012038f40360009fc6a0000100000090102025da012038f40360009fc6a00001000000d00120047fff48d201000000da012038f40360009fc6a00001000000901020b1da012038f40360009fc6a00001000000d00120149a0120384000019a01000000901020b1da012038f40360009fc6a00001000000d00120007fff48bd01000000da012038f40360009fc6a00001000000a6100008d0213ffcd0213ff888013ff88801200c8801200490102029da012030f40360009fc6a0000100000088012018f606201880a1001b8bd0201830bffb6ce601201481c4e0068801201c|@4423,131071|40,4,I48 52,4,I24 128,4,@4346 256,5,@3436 316,4,65536 328,4,I108 408,5,@3437 476,4,I109 508,5,@509 616,4,4194303 640,4,4194304 652,4,I109 676,4,I110 828,4,65536 836,4,I108 896,4,@4347 932,4,@4348 956,4,4194304 968,4,I110 1036,4,4194304 1068,5,@509 1160,4,33554431 1184,4,33554432 1196,4,I109 1220,4,I110 1304,5,@3324 1348,4,4194304 1360,4,I110 1428,4,4194304 1452,4,2097152 1492,4,4194304 1584,4,33554431 1616,4,33554432 1628,4,I109 1652,4,I110 1736,5,@4349 1752,5,@496 1824,4,536870911 1848,4,@4362 1860,4,I109 1892,4,@4363 1944,5,@509 1968,4,@4364 2024,5,@509 2068,4,@4365 2120,5,@509 2160,5,@509 2224,4,@349 2248,4,@4362 2284,4,@349 2336,4,@4366 2368,5,@509 2392,4,@4364 2448,5,@509 2540,4,524287 2564,4,524288 2576,4,I109 2600,4,I110 2728,4,16383 2756,4,16384 2768,4,I109 2792,4,I110 2920,4,33554431 2948,4,33554432 2960,4,I109 2984,4,I110 3068,5,@3483 3124,5,@3483 3180,4,@4367 3240,4,I110 3324,5,@4349 3340,5,@496 3384,4,@4368 3396,5,@4412 3448,5,@3324 3500,5,@4414 3556,5,@3324 3636,4,524287 3660,4,524288 3672,4,I109 3696,4,I110 3824,4,16383 3852,4,16384 3864,4,I109 3888,4,I110 4016,4,33554431 4044,4,33554432 4056,4,I109 4080,4,I110 4204,4,@4416 4236,4,@4417 4260,4,@4418 4288,5,@3324 4340,5,@4414 4348,4,@4419 4376,5,@3324 4444,4,@4420 4460,4,@4421 4512,5,@3324 4536,4,@4422 4564,5,@3324 4616,5,@4414 4664,5,@509 4712,5,@3324 4764,5,@4414 4796,5,@3324 4346:S2|3a0a 4347:S3|6e6f70 4348:S6|736574686909 4349:C2,360|9e13e002808a20012280001d0100000080a220012680001a0100000080a220393480001701000000053f02288400a1d6ba023ffdfa00801d81c0801d010000000000004a0000005600000062000000720000007e0000008e0000009e000000ae000000be000000ca000000da000000e6000000f60000010600000116113f02289002231881c3e00601000000901021b981c3e006010000009010219581c3e00601000000113f02289002232481c3e00601000000901021b181c3e00601000000113f02289002233081c3e00601000000113f02289002233c81c3e00601000000113f02289002234881c3e00601000000113f02289002235481c3e006010000009010218581c3e00601000000113f02289002236081c3e006010000009010219d81c3e00601000000113f02289002236c81c3e00601000000113f02289002237881c3e00601000000113f02289002238481c3e00601000000113f02289002239081c3e00601000000|@4361,65665|40,4,$4349+66 124,4,@4350 164,4,@4351 192,4,@4352 208,4,@4353 224,4,@4354 240,4,@4355 268,4,@4356 296,4,@4357 312,4,@4358 328,4,@4359 344,4,@4360 4350:S2|7663 4351:S2|6c65 4352:S3|6c6575 4353:S2|6373 4354:S3|6e6567 4355:S2|7673 4356:S2|6e65 4357:S2|6765 4358:S2|6775 4359:S2|6363 4360:S3|706f73 4361:S26|5350415243434f4445434f4e5328292e74737452657072283129 4362:B8|0000002000000000 4363:S2|2c61 4364:S6|09093b746f20 4365:S5|756e696d70 4366:S5|63616c6c09 4367:S3|6d6f76 4368:O2|@4370,@4369 4369:O2|@4373,@4372 4370:O2|0,@4371 4371:S3|616464 4372:O2|@4375,@4374 4373:O2|2,@1351 4374:O2|@4378,@4377 4375:O2|-8,@4376 4376:S2|6f72 4377:O2|@4381,@4380 4378:O2|31,@4379 4379:S3|786f72 4380:O2|@4384,@4383 4381:O2|-3,@4382 4382:S4|616e646e 4383:O2|@4387,@4386 4384:O2|-15,@4385 4385:S3|737562 4386:O2|@4390,@4389 4387:O2|-2,@4388 4388:S5|6164646363 4389:O2|@4393,@4392 4390:O2|-4,@4391 4391:S5|616e646363 4392:O2|@4396,@4395 4393:O2|16,@4394 4394:S5|7375626363 4395:O2|@4399,@4398 4396:O2|17,@4397 4397:S8|7461646463637476 4398:O2|@4402,@4401 4399:O2|18,@4400 4400:S8|7473756263637476 4401:O2|@4405,@4404 4402:O2|13,@4403 4403:S3|736c6c 4404:O2|@4408,@4407 4405:O2|14,@4406 4406:S3|73726c 4407:O2|@4410,0 4408:O2|-14,@4409 4409:S3|737261 4410:O2|-7,@4411 4411:S4|6a6d706c 4412:C2,168|9e13e002f606201880a1001b8bd0201880a220013280000ec4022000de213ffcfa036000fa213ff892102005d0037fd07ffdfce988013ff8da012000de012004f403600081c6a00488012008ae10000fac10000dea00a004e8022004d000a0007fff608301000000b8222001ba226001811f401c32800008d205bfd090100015da05a0009e100017f403600081c6a00401000000901000149a1000169e10001710bfffdaf6062018|@4413,131071|48,5,@509 96,5,@3483 4413:S47|5350415243434f4445434f4e5328292e7072696e74436f6465283429552d7072696e7446726f6d5461626c65283229 4414:C2,568|9e13e002f606201880a1001b8bd02018b8222001811f200026800003841020018410200580a0a0053280000501000000ae10000810800009de213ffc0500001f8400a3fdb820a001ba222001b91f401cae072001de213ffcda213ff8d0213ff41300002092026001901000171b0000859a036378f40360009fc6a00088013ff4921020091b0000859a036398f40360009fc6a0000100000080a2200132800004b82220011080000cae100008811f200026800003ae102001ae10200580a5e00522800005ae100008b8222001b9172008ae07200180a5e00532800038921020811300002092026001d00120001b0000859a036398f40360009fc6a0000100000080a2200132800004b82220011080000fae100008811f200026800003ae102001ae10200580a5e00522800008ae1000082f000020ae05e001b825e001ba222001b917401cae0720012d000010ac05a001b825a001ba25e001811f401c3680000501000000aa10001710800009e80120042b000020aa056001b8256001ba25e001b91f401caa072001e8012004fa052000fa213ffc92102005901000157ffdfc4f88013ffcda012000de01200cf403600081c6a00488012010d00120001b0000859a036398f40360009fc6a0000100000080a2200132800004b82220011080000cae100008811f200026800003ae102001ae10200580a5e00522800005ae100008b8222001b9172080ae072001ec012004fa05a000fa213ffc901000177fff46a488013ffcda012000de01200cf403600081c6a00488012010|@4415,131071|60,4,8191 96,4,8192 108,4,I109 132,4,I110 224,4,8192 236,4,I110 304,4,8192 328,4,4096 368,4,8192 412,5,@509 444,4,I110 540,5,@3324 4415:S40|5350415243434f4445434f4e5328292e7072696e74436f64652834297072696e7452696d6d283129 4416:S2|6c64 4417:S4|6c647562 4418:S2|095b 4419:S2|5d2c 4420:S2|7374 4421:S3|737462 4422:S2|2c5b 4423:S28|5350415243434f4445434f4e5328292e7072696e74436f6465283429 4424:O2|@4425,@3433 4425:C2,488|9e13e002f606201880a1001b8bd0201880a2e00132800005c402e0009010200181c3e00601000000b820a001b9172004ae072001de213ffcda213ff8d0213ff4d2213ff0d4213fecc4213fe8fa02e004fa213fe4ee213fe0d2022008901000027fff58d388013fe0ec012014d0213ffcd205a008d00120007fff58cd88013ffcea01201cd20560044000005f0100000080a2200132800025e8012010e8012010e601200cb824e001ba252001b91f401ca4072001233fe000a2046001ba246001811f401c348000090100000021002000a0042001b8242001ba24a001811f401c2680000892100012113f022b900220dcf40620209fc6a0000100000092100012d00120007fff5cd501000000de012018d403e008d201200c7fff59cb010000001080002bd6012008b8252001b9172004a6072001e401200cba24a001b91f001da2072001213fe000a0042001ba242001811f401c34800009010000001f0020009e03e001b823e001ba246001811f401c2680000892100011113f022b900220dcf40620209fc6a0000100000092100011d00120007fff5cb101000000c2012018d4006008921000127fff59a701000000da012018d4036008d2012004d00120147fff59a101000000d6012008d4012010d2012014d0012018da01201cde01202010bfff8988012024|@4429,131071|96,5,@3436 120,5,@3436 136,5,@4426 180,4,-2097152 204,4,2097152 232,4,@4427 260,5,@3465 280,5,@3444 324,4,-2097152 348,4,2097152 376,4,@4427 404,5,@3465 424,5,@3444 448,5,@3444 4426:C2,128|9e13e002c4026000ee02200080a080173280001a90102001ec026004ea02200480a580153280001390102001e8026008e602200880a500133280000c90102001e402600ce202200c80a4801132800005901020019010200581c3e0060100000081c3e0060100000081c3e0060100000081c3e0060100000081c3e00601000000|@3443,130691| 4427:O3|@24,@397,@4428 4428:S38|66697875705265637572736976654272616e636865733a206a756d7020746f6f206c61726765 4429:S41|5350415243434f4445434f4e5328292e66697875705265637572736976654272616e63686573283429 4430:C2,460|9e13e002f606201880a1001b8bd0201880a2e00132800005c402e0009010200181c3e00601000000b820a001b9172004ae072001de213ffcda213ff8d0213ff4d2213ff0d4213fecc4213fe8fa02e004fa213fe4ee213fe0d2022008901000027fff580e88013fe0ec012014d0213ffcd205a008d00120007fff580888013ffcea01201ca0100008d2056008d0012000400000560100000080a2200132800008de01201c113f022b900223d4f40620209fc6a00001000000de01201cd203e00490100010400000810100000080a220013280001ac2012010c2012010da01200cb8236001ba206001b91f401c98072001808b2001328000089010000c113f022c900220b4f40620209fc6a000010000009010000c400000a301000000d6012018d402e008d201200c7fff59020100000010800020d6012008b8206001b91720049a072001d801200cba232001b91f001d96072001808ae001328000089010000b113f022c900220b4f40620209fc6a000010000009010000b4000008a01000000d4012018d402a0089210000c7fff58e901000000d2012018d4026008d2012004d00120147fff58e301000000d6012008d4012010d2012014d0012018da01201cde01202010bfff9088012024|@4439,131071|96,5,@3436 120,5,@3436 144,5,@4431 164,4,@4432 196,5,@4434 252,4,@4435 276,5,@4437 296,5,@3444 352,4,@4435 376,5,@4437 396,5,@3444 420,5,@3444 4431:C2,128|9e13e002c4026000ee02200080a080173280001a90102001ec026004ea02200480a580153280001390102001e8026008e602200880a500133280000c90102001e402600ce202200c80a4801132800005901020019010200581c3e0060100000081c3e0060100000081c3e0060100000081c3e0060100000081c3e00601000000|@3443,130691| 4432:O3|@24,@397,@4433 4433:S43|666978757052656375727369766543616c6c733a206e6f7420612063616c6c20696e737472756374696f6e 4434:C2,128|9e13e002c4026000ee02200080a080173280001a90102001ec026004ea02200480a580153280001390102001e8026008e602200880a500133280000c90102001e402600ce202200c80a4801132800005901020019010200581c3e0060100000081c3e0060100000081c3e0060100000081c3e0060100000081c3e00601000000|@3443,130691| 4435:O3|@24,@397,@4436 4436:S35|666978757052656375727369766543616c6c733a206a756d7020746f6f206c61726765 4437:C2,156|9e13e002808a200122800005de213ffc84100008108000099008a3fd113f002990022348f40620209fc6a00088013ffc841020019008a3fdbb30a008b82f6003ae072001ac0de3fdbb30a010b82f6003ae072001aa0de3fdbb30a018b82f6003ae072001840de0fdae10a1018c21a0148b196014ba10200484100006fa21bffcd020a00cec20a008ea20a004ee20a0009010000281c3e00601000000|@4438,123009|28,4,@542 4438:S27|5350415243434f4445434f4e5328292e63616c6c51756164283129 4439:S38|5350415243434f4445434f4e5328292e666978757052656375727369766543616c6c73283429 4440:S20|475f434f444528292e636f646567656e28313029 4441:C2,16|9e13e002d003600481c3e00601000000|@4442,161| 4442:S22|475f434f444528292e67656e636f6465283229283129 4443:S11|3c746f70206c6576656c3e 4444:O1|@4445 4445:C2,32|9e13e002de213ffc113f017490022198f40620209fc6a00088013ffc90102001|@3354,129|8,4,@3357 4446:O1|@4447 4447:C2,32|9e13e002de213ffc113f017490022198f40620209fc6a00088013ffc90102001|@3354,129|8,4,@3357 4448:O1|@4449 4449:C2,16|9e13e0029010200181c3e00601000000|@3354,129| 4450:O1|@4451 4451:C2,32|9e13e002de213ffc113f022c90022378f40620209fc6a00088013ffc90102001|@3354,129|8,4,@4452 4452:O3|@24,@397,@4453 4453:S17|746f70206c6576656c2072656163686564 4454:C2,60|9e13e0028c21a00c8b19600cba10200290100006fa21bffc84102001c4222004ee036004ee2220001b0000889a036358f403600081c6a00401000000|@4442,131071|40,4,I204 4455:S19|475f434f444528292e67656e636f6465283229 4456:S40|434f44455452454528292e67656e436f6465283229636f646547656e416e645072696e742d283129 4457:C2,36|9e13e002f606201880a1001b8bd02018d2036004353f016cb406a29481c6a00401000000|@4456,131071|20,4,@3296 4458:C2,224|9e13e002f606201880a1001b8bd02018ee02600080a5fffd3280000680a5e005ec026004c405a00810800006ec00a00032800003c4026004c4026008ec00a00080a5bfed32800013de213ffc8c21a0088b196008ba102001aa100006fa21bffcd2256000de213ffcda213ff8d0213ff4d2213ff094100015d200a004d00360087fff418488013ff010800007ea012008da213ff8d0213ff4d2213ff088013ff0ea0120088c21a0088b196008ba102001a8100006fa21bffce6012000e625200094100014d2012004d0056004de01200c353f016eb406a31881c6a00488012010|@4459,131071|128,5,@3309 208,4,@3309 4459:S45|434f44455452454528292e67656e436f6465283229696e736572746564436f64652d656e746572446563283229 4460:C2,300|9e13e002f606201880a1001b8bd02018c403601080a0a0012280002cd0213ffcd0213ffcd0213ff8d0213ff4d0213ff0d0213fecd0213fe8d0213fe4de213fe0da213fdcd0213fd894013fe4d203600c901021357ffde8c088013fd88c21a0208b196020ba102007ae100006fa21bffcec01200cec25e000ea012010ea25e004e8012014e825e008e6012018e625e00ce401201ce425e010e2012020e225e014e0012024e025e01892100017d00120001b3f001f9a0362687ffdf203010000001080000dee012004d0213ff8d0213ff4d0213ff0d0213fecd0213fe8d0213fe4de213fe0da213fdcd0213fd888013fd8ee012004d2012000d005e004da05e008f40360009fc6a00001000000ec01200492100008d005a004de012008353f022db406a30481c6a00488012028|@4472,131071|84,5,@428 176,4,@486 184,5,@488 284,4,@4461 4461:C2,804|9e13e002f606201880a1001b8bd02018c402600080a0bff53280000580a0a0119010000981c3e006010000003280008fde213ffcde213ffcd0213ff8d2213ff4fa026004fa213ff0d20260087fffffed88013ff0de02200080a3ffd93280000580a3fff5d201200c81c26006880120103280001801000000d2022004808a600122800009808a6001113f022e90022244f40620209fc6a0000100000082102001808a60012280001182100009113f002990022374f40620209fc6a00001000000821020018210000910800009c2213ffc113f022e9002227cf40620209fc6a0000100000082102001c2213ffcc401200080a0a0011280003288013ffcc6213ffc2f3f022eae05e08aee213ff8ac102001ec213ff486013ff48c21a00c88013ff48b19600cba10200290100006fa21bffcaa102001ea222004c22220001b0000889a036358f40360009fc6a00001000000a81000088c21a00c8b19600cba10200290100006fa21bffce8222004a6103ff5e6222000c6012008e401201c81c4a00688012020e202200080a4600532800009d0012008113f00059002201cf40620209fc6a0000100000090102001d0012008e001201081c4200688012014ae10200180a0a00132800005b825e001ac1000171080000a808da001b9172004aa072001c400a004ae100015f606201880a1001b8bd0201830bffff32280000501000000aa1000161080000994102001113f002990022348f40620209fc6a00001000000aa1020019410200192102101901000151b0000829a036338f40360009fc6a0000100000094100008d2012004901020019a0120104000005701000000e801201081c5200688012014d2213ff8ae100008901000099a100017f40360009fc6a00088013ff8c6213ffc2d3f022eac05a1f2ec213ff8aa102001ea213ff486013ff4a8100008901020019a100014f40360009fc6a00088013ff4a61000088c21a00c8b19600cba10200290100006fa21bffce6222004a4103ff5e4222000c6012008e201201081c4600688012014e002200080a4200532800009d0012000113f00059002201cf40620209fc6a0000100000090102001d0012000de01200481c3e00688012008|@4471,131071|136,4,@4462 172,4,@545 208,4,@4464 256,4,$4461+390 316,4,I204 404,4,@227 524,4,@542 560,4,I11 596,5,@4466 648,4,$4461+750 764,4,@227 4462:O3|@24,@397,@4463 4463:S30|436f64652061646472657373206973206e6f7420616e2061646472657373 4464:O3|@24,@397,@4465 4465:S30|436f64652061646472657373206973206e6f74206120636f6e7374616e74 4466:C2,488|9e13e002f606201880a1001b8bd0201880a260013280003ede213ffcde213ffcda213ff8d4213ff49010000a1b0000839a0363b8f40360009fc6a00088013ff4c6213ffc053f022e8400a386c4213ff8ae102001ee213ff486013ff4ec0120048c21a00c88013ff48b19600cba10200290100006fa21bffcea01200cea222004e805bff0e82220001b0000889a036358f40360009fc6a00001000000a61000088c21a00c8b19600cba10200290100006fa21bffce6222004a4103ff5e4222000c6012008e201201481c4600688012018e002200080a4200532800009de012004113f00059002201cf40620209fc6a0000100000090102001de012004d003fff8c201200881c060068801200cda213ff8d0213ff4d4213ff0fa026004fa213fecd2026000d0037ffc1b3f022f9a0360b8f40360009fc6a00088013fecc402200080a0bfd93280000580a0bff5ee01201081c5e006880120143280001e01000000ee012008808de00122800005ec022004ac1000171080000aea012004113f002990022348f40620209fc6a00001000000aa100016ac102001ea012004e8022004b825a001e825401cb825e001b9172004a607200194100015d201200090100013da01200cde01201010bfff8f88012014113f022f900220c0f40620209fc6a0000100000090102001|@4470,131071|44,4,I47 68,4,$4466+210 136,4,I204 224,4,@227 296,4,@4467 380,4,@542 464,4,@4468 4467:O1|@4461 4468:O3|@24,@397,@4469 4469:S36|526573756c74206f66206576616c75617465206973206e6f74206120636f6e7374616e74 4470:S33|434f44455452454528292e6576616c756174652832296c6f616441726773283329 4471:S22|434f44455452454528292e6576616c75617465283229 4472:S41|434f44455452454528292e67656e436f6465283229696e736572746564436f64652d6576616c283129 4473:C2,216|9e13e002f606201880a1001b8bd02018c402200880a0a0013280002ade213ffcee022000a610000fe4022004e205e00092100011d00360047ffdfd400100000080a2200132800019d20220008c21a0188b196018ba1020059e100006fa21bffc9a102001da23e010e423e00c92102005d223e008e223e00490103fedd023e0008c21a00c8b19600cba10200290100006fa21bffcde22200484102001c422200081c4e00601000000901000129e100013353f000fb406a3d481c6a00401000000113f022f90022270f40620209fc6a00088013ffc90102001|@4476,131071|56,5,@608 176,4,@398 192,4,@4474 4474:O3|@24,@397,@4475 4475:S36|6f75746572206c6576656c207265616368656420696e206c6f6f6b75704e657741646472 4476:S50|434f44455452454528292e67656e436f6465283229696e736572746564436f64652d6c6f6f6b75704e657741646472283129 4477:C2,40|9e13e002f606201880a1001b8bd02018d2022004d0022000da036004f403600081c6a00401000000|@4478,131071| 4478:S45|434f44455452454528292e67656e436f6465283229696e736572746564436f64652d656e746572446563283129 4479:C2,72|9e13e002f606201880a1001b8bd020188c21a0088b196008ba10200184100006fa21bffcee022004ee20a00094100002d2022000d0036004353f016eb406a31881c6a00401000000|@4480,131071|56,4,@3309 4480:S48|434f44455452454528292e67656e436f6465283229696e736572746564436f64652d656e7465724e6577446563283129 4481:C2,388|9e13e002f606201880a1001b8bd02018d2022000c402600080a0a00132800005ee0260049010200181c3e00601000000ec05e00080a5a00132800006de213ffc2b000083aa0563f810800033de213ffcd0213ff8ee213ff4ec213ff0c6213fec293f0230a80520aae8213fe8a6102001e6213fe486013fe49410200192102001901000161b0000829a036338f40360009fc6a00088013fe4a4100008c601200810800009e4213ffc113f0007900223e4f40620209fc6a00001000000a4102001e4213ffce201200ce2213ff8961020019410001292102005d00120101b0000889a036238f40360009fc6a00088013ff8d00120001b0000839a0363b8f40360009fc6a00001000000ea0120001080000488012018d0213ff888013ff88c21a00c8b19600cba102002a8100006fa21bffcea252004a6102001e6252000e4012000e824a000808ca0012280000990100012113f002990022374f40620209fc6a000010000009010200190100012de0120041b0000839a0363b8f403600081c6a00488012008|@4482,131071|64,4,I49 96,4,$4481+170 132,4,I11 168,4,@251 220,4,I195 244,4,I47 336,4,@545 368,4,I47 4482:S22|5374726574636841727261792e667265657a65283229 4483:C2,40|9e13e002f606201880a1001b8bd02018d2022004d0022000353f0230b406a20481c6a00401000000|@4486,131071|24,4,@4484 4484:C2,900|9e13e002f606201880a1001b8bd0201880a2000932800005808a20019010200581c3e0060100000022800005808a60019010200181c3e0060100000022800005fa023ffc9010200181c3e00601000000bb2f6008b937600684072001fa027ffcbb2f6008b9376006ae07200180a0801722800005fa0a3ffc9010200181c3e00601000000b92f6002ae072001fa0a7ffcb92f6002ac072001aa15c016ae0d610180a5e00122800005ac0d60059010200181c3e0060100000080a5a0012280004580a0a005b820a001811f200036800008aa1000022f3f000eae05e330b820a001ba25e001b917401caa072001b8256001ba10001cbb17401db917401d840720018088a00122800005de213ffcae1000021080000dde213ffcd0213ff8d2213ff4901000021b0000879a0360d8f40360009fc6a00088013ff4ae10000810800006ee213ffcd0213ff8d2213ff488013ff4ee213ffcac10200188013ffcea01200080a5801532800006e801200890102005e801200c81c5200688012010bb3da002fa0d001db92f6002a6072001e4012004bb3da002fa0c801db92f6002a207200180a4c0113280000890102001a085a004ac100010f606201880a1001b8bd0201830bfffe7e001200c81c42006880120103280000880a0a009ea022000e8026000921000149010001510bfff88f606201832800038aaa0a004ea022000e8022004e6026000e4026004808d60012280000b808ce00180a540133280000690102001921000129010001410bfff78f606201881c3e0060100000022800005808d20019010200181c3e006010000002280000b808ca00180a500123280000690102001921000139010001510bfff68f606201881c3e0060100000022800005de213ffc9010200181c3e00601000000e8213ff8e4213ff492100013901000157fffff5988013ff480a220012280000790102001d2012000d0012004de01200810bfff528801200ce201200881c460068801200cde213ffcd0213ff8d2213ff488013ff480a5600132800005e6012004a81020051080001780a52001b8256001e404c01ce2012000e004401cea213ffc92100010901000127fffff3b88013ffc80a2200122800009a8102001de012000aaa3e00488012004f606201880a1001b8bd0201830bfffe88801200480a520012280000b90102001de012004c203e000da012000d80360009210000c90100001de01200810bfff258801200cde01200881c3e0068801200c|@4485,131071|212,4,@349 292,4,I152 4485:S32|537472756374757265457175616c6974792e7374727563747572654571283229 4486:S32|537472756374757265457175616c6974792e7374727563747572654571283129 4487:C2,112|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffcd0037fb881c3e00601000000da213ff8fa022000fa213ff4d00220047ffffff288013ff48c21a00c8b19600cba1020029e100006fa21bffcd023e004da012000da23e0009010000fde01200881c3e0068801200c|@1966,161| 4488:C2,236|9e13e002808a20013280002f84100008c402200480a0a00132800021ae100008ee022000ec05e00080a5bff13280000d80a5bfddaa1000088c21a00c8b19600cba10200290100006fa21bffcea222004a8102025e822200081c3e006010000003280000dd0022000aa1000088c21a00c8b19600cba10200290100006fa21bffcea222004a8102025e822200081c3e0060100000081c3e006010000008c21a00c8b19600cba10200290100006fa21bffcee222004ac102025ec22200081c3e006010000008c21a00c8b19600cba10200290100006fa21bffcc4222004ae102025ee22200081c3e00601000000|@4489,127105| 4489:S21|434f44455452454528292e77726170456e76283129 4490:C2,16|9e13e002d003600481c3e00601000000|@4491,161| 4491:S24|434f44455452454528292e67656e436f6465283229283129 4492:C2,148|9e13e002f606201880a1001b8bd02018de213ffc90102001da036004f40360009fc6a00088013ffc8c21a00c8b19600cba10200284100006fa21bffcd020a004ae103ff5ee20a0008c21a00c8b19600cba102002ac100006fa21bffcc425a004aa102001ea25a0008c21a00c8b19600cba10200290100006fa21bffcec222004a8102015e8222000e601200081c4e00688012004|@4491,131071| 4493:C2,48|9e13e0028c21a00c8b19600cba10200290100006fa21bffcc4036004c4222004ae102015ee22200081c3e00601000000|@4491,98465| 4494:C2,228|9e13e002f606201880a1001b8bd0201880a2200132800005c40220009010200181c3e00601000000ee00a00080a5ffdd3280001a80a5fff1de213ffcfa022004fa213ff8d000a0047fffffee88013ff8d0213ffcd00120007fffffea88013ffc80a2200132800006d0213ffcd0012000de01200881c3e0068801200cd00120009a0120084000001f88013ffcde01200c81c3e0068801201032bfffdbd0022004de213ffcc4213ff8d00220047fffffd588013ff88c21a00c8b19600cba1020029e100006fa21bffcd023e004da012000da23e0009010000fc401200481c0a00688012008|@4496,98465|132,5,@4495 4495:C2,112|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffcd0037ff481c3e00601000000da213ff8fa022000fa213ff4d00220047ffffff288013ff48c21a00c8b19600cba1020029e100006fa21bffcd023e004da012000da23e0009010000fde01200881c3e0068801200c|@1966,161| 4496:S36|434f44455452454528292e67656e436f6465283229657870616e644d757475616c283129 4497:C2,220|9e13e002f606201880a1001b8bd0201880a2600132800005c40260009010200181c3e00601000000ee00a00080a5fff132800025de213ffcec00a004b8222001ba25a001811f401c36800005d0213ffcd202600410bfffedf6062018a010000f901000099a013ffc4000002488013ffcde012000b823e001b91720049a072001e0213ffcd0213ff89010000d7fffffdd88013ff88c21a00c8b19600cba10200292100006fa21bffcd0226004d0012000d022600090100009c401200481c0a0068801200c113f023390022154f40620209fc6a00088013ffc90102001|@4504,130979|104,5,@4498 196,4,@4502 4498:C2,304|9e13e002f606201880a1001b8bd0201880a2200132800006c4022000113f002f9002208c81c3e00601000000ee00a00080a5fff132800039de213ffcec00a004ea036000b8256001ba25a001811f401c22800005e800a008d002200410bfffebf6062018e605200080a4e00d3280001c8c21a0188c21a0188b196018ba102005a4100006fa21bffca2102001e224a010a2102001e224a00ca2102005e224a008ea24a004a2103fede224a0008c21a0108b196010ba10200390100006fa21bffce2052004e2222008e4222004a410202de422200081c3e006010000008b196018ba10200590100006fa21bffca4102001e4222010a2102001e222200ca4102005e4222008ea222004a2103fede222200081c3e00601000000113f0233900220ecf40620209fc6a00088013ffc90102001|@4501,130721|28,4,@660 280,4,@4499 4499:O3|@24,@397,@4500 4500:S21|66696e64456e7472793a206e6f74204465636c6172 4501:S45|434f44455452454528292e67656e436f646528322967657456616c75657328322966696e64456e747279283129 4502:O3|@24,@397,@4503 4503:S23|67657456616c7565733a206e6f742061204465636c6172 4504:S33|434f44455452454528292e67656e436f646528322967657456616c756573283229 4505:C2,112|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffcd0037fb481c3e00601000000da213ff8fa022000fa213ff4d00220047ffffff288013ff48c21a00c8b19600cba1020029e100006fa21bffcd023e004da012000da23e0009010000fde01200881c3e0068801200c|@1966,161| 4506:C2,536|9e13e002f606201880a1001b8bd02018de213ffcda213ff890102001da03600cf40360009fc6a00088013ff8808a200122800009808a2001113f023490022070f40620209fc6a0000100000084102001808a20012280000984100008113f002990022374f40620209fc6a0000100000084102001841000088c21a00c8b19600cba102002ae100006fa21bffc2d3f002dac05a18cec25e000c425e004ea00a0008c21a00c8b19600cba102002a8100006fa21bffcea252004a6103ff5e6252000e4012000e204a008de04600080a3fffd3280000601000000c2046004e0006004108000058c21a010213f0234a00420a88c21a0108b196010ba10200382100006fa21bffc1b3f000f9a03616cda206000ee206008e020600480a3fffd328000068c21a008d6046004d802e00c1080000a8c21a0188b1960083b100000ba07600198100006fa21bffc96102001d62320008c21a0188b196018ba10200594100006fa21bffcd204a004d222a010d822a00ce822a008c222a00490102001d022a000d0213ffcd0213ff8c402600080a0bff91280000988013ff8ae012000ac102001ec25e000aa012000e8256004108000088c21a00cae012000ac103ffdec25e000aa012000d42560048c21a00c8b19600cba102002a8100006fa21bffce6012000e6252000e0012004e02520048c21a00c8b19600cba10200290100006fa21bffce822200482102015c2222000da01200c81c3600688012010|@4491,131071|56,4,@4507 92,4,@545 140,4,@626 232,4,@4509 260,4,@387 4507:O3|@24,@397,@4508 4508:S31|526573756c7420766563746f72206973206e6f7420616e2061646472657373 4509:O1|@4510 4510:C2,32|9e13e002de213ffc113f002c9002208cf40620209fc6a00088013ffc90102001|@593,129|8,4,@591 4511:S21|434f44455452454528292e67656e436f6465283229 4512:O2|@4514,@4513 4513:O2|@4636,@4635 4514:C2,272|9e13e002f606201880a1001b8bd02018da213ffcd0213ff8d0213ff4d0213ff0de213fecd2213fe89410200192102101901020191b0000829a036338f40360009fc6a00088013fe884102015c42220008c21a00c8b19600cba102002ae100006fa21bffcd025e004ac103ffdec25e0008c21a0088b1960083b100000ba076001aa100006fa21bffcee256000a8012008ea252000a6012008a4102001e424e0048c21a00c8b19600cba102002a2100006fa21bffce0012008e0246000de01200cde2460048c21a0088b1960083b100000ba07600182100006fa21bffc9a102001da2060009610000194100011133f023492026250d00120009a0120144000003701000000d801200481c3200688012018|@4634,131071|52,4,I11 236,4,@4515 252,5,@4520 4515:O1|@4516 4516:C2,32|9e13e002de213ffc113f023490022294f40620209fc6a00088013ffc90102001|@4519,129|8,4,@4517 4517:O3|@24,@397,@4518 4518:S31|6f75746572206c6576656c207265616368656420696e20636f7079436f6465 4519:S37|434f44455452454528292e707265436f6465283229696e736572746564436f64652d283129 4520:C2,572|9e13e002f606201880a1001b8bd02018d0213ffcd0213ff8de213ff4da213ff0d0213fecd2213fe8d4213fe4d6213fe09410200192102101901020191b0000829a036338f40360009fc6a00088013fe084102015c42220008c21a00c8b19600cba102002ae100006fa21bffcd025e004ac103ffdec25e0008c21a0088b1960083b100000ba076001aa100006fa21bffcee256000a8012018ea252000a6012018a4102001e424e0048c21a00c8b19600cba102002a2100006fa21bffce0012018e0246000de01201cde246004d0213ffcd0213ff8e2213ff49410200192102101901020191b0000829a036338f40360009fc6a00088013ff482102015c22220008c21a00c8b19600cba1020029a100006fa21bffcd023600498103ffdd82360008c21a0088b1960083b100000ba07600196100006fa21bffcda22e00094012004d622a0009201200490102001d02260048c21a00c8b19600cba10200284100006fa21bffcee012004ee20a000ec012008ec20a004d0213ffcd0213ff8c4213ff49410200192102101901020191b0000829a036338f40360009fc6a00088013ff4aa102015ea2220008c21a00c8b19600cba102002a8100006fa21bffcd0252004a6103ffde62520008c21a0088b1960083b100000ba076001a4100006fa21bffce824a000a2012004e4246000a00120049e102001de2420048c21a00c8b19600cba10200282100006fa21bffcda012004da206000d8012008d8206004c2213ffcd00120249a0120344000000c88013ffcd601203081c2e0068801203c|@4633,131071|60,4,I11 228,4,I11 396,4,I11 552,5,@4521 4521:C2,2168|9e13e002f606201880a1001b8bd02018da213ffcc40220008088a0010280002588013ffc80a0bfd5268000220100000080a0a02d3480001f010000002f3f0235ae05e1aaba00a029fa05c01d81c5c01d010000000000071e000003da0000005a000003960000053e000005ca000001ca0000005a00000266000000e20000026e0000007e000006520000041a00000716000000f2000007e2000002160000053600000076000004360000046a00000792de213ffc113f0237900221e8f40620209fc6a00088013ffc9010200181c3e00688012004de213ffcfa022004fa213ff8d00220087fffffc788013ff8d0213ffcd0012000da0120087fffffc288013ffc9e1000088c21a0108b196010ba10200390100006fa21bffcda012000da222008de22200484102001c4222000ee01200881c5e00688012010113f002b9002225c81c3e00688012004de213ffcfa022008fa213ff8d00220049a012000400001d988013ff8ec012000e805a00080a53fed32800018d0213ffc8c21a0148b196014ba102004a6100006fa21bffce405a010e424e00ce205a00ce224e008e005a008e024e004de05a004de24e000d0213ffc9210001390102001da012008400001f788013ffcaa100008108000088c21a01490100016da0120087fffff8a88013ffcaa1000088c21a0148b196014ba10200490100006fa21bffca6102001e622200cea222008e4012000e4222004a2102011e2222000e001200881c42006880120108c21a0148b196014ba102004ac100006fa21bffcea022010ea25a00ce802200ce825a008e6022008e625a004e4022004e425a0009210001690102005353f0237b406a2ec81c6a00488012004de213ffcfa022008fa213ff8d00220047fffff6188013ff8ac1000088c21a0108b196010ba10200390100006fa21bffcea012000ea222008ec222004a8102019e8222000e601200481c4e0068801200c81c3e00688012004de213ffcfa022004fa213ff8fa022008fa213ff4ec013ff488013ff480a5a00132800005e805a000aa10200110800029d0012004e605200080a4fff13280001a01000000e401200cfa05a004fa213ffcfa052004fa213ff894102001d2013ff8d004bfd87fff38a788013ff8e201201494102001d2012000d0047fcc7fff38a101000000e001201494102001d2012000d0043fc87fff389b0100000010800008ec012004113f02389002213cf40620209fc6a00001000000ec01200488012008f606201880a1001b8bd0201830bfffd4da01200c7fffff1b9e13e002d0213ffcd00120009a01200c4000021d88013ffca81000088c21a0108b196010ba10200390100006fa21bffce8222008e6012000e6222004a4103ffde4222000e201200c81c4600688012014de213ffcd00220049a0120004000026488013ffcac1000088c21a00c8b19600cba10200290100006fa21bffcec222004aa103fe1ea222000e801200081c5200688012008de213ffcd00220047ffffef288013ffcac1000088c21a00c8b19600cba10200290100006fa21bffcec222004aa103fd9ea222000e801200081c5200688012008d402200cd2022008d0022004353f0238b406a38081c6a00488012004de213ffcd00220049a01200040000c6a88013ffc9a0120044000146c01000000de012000353f0231b406a28081c6a00488012008de213ffcd00220049a012000400015c188013ffc8c21a00c8b19600cba102002ac100006fa21bffcd025a004aa102029ea25a000ec213ffc88013ffc80a2200132800005e6022000a81020051080000c80a52001e404e00080a4bff532800007a8102001d0022004f606201880a1001b8bd0201830bffff280a5200122800011d0012000d00120007fff2faa01000000a21000088c21a00c8b19600cba10200290100006fa21bffce2222004a0103ff5e0222000de01200481c3e0068801200ce201200481c460068801200c81c3e006880120048c21a0088b1960083b100000ba076001ac100006fa21bffcaa102005ea25a000e8022004de213ffce605200ce6213ff8e4052010e4213ff4e2052014e2213ff0e0052018e0213fecc205201cc2213fe8d6052008d4052004d2052000901000169a01200040000d5088013fe892100008901020059a0120044000107a01000000da01200081c3600688012008de213ffcfa022004fa213ff8fa02200cfa213ff4d00220087ffffe7288013ff4d0213ffcd0012004da01200c7ffffe6d88013ffcd0213ffcd00120049a0120104000158588013ffcac1000088c21a0148b196014ba10200490100006fa21bffcec22200cea012004ea222008e8012000e8222004a6103fe9e6222000e401201081c4a00688012018ec022004de213ffcfa05a000fa213ff8fa05a004fa213ff4fa05a008fa213ff0fa05a010fa213fecd005a00c9a0120004000159088013fecd0213ffcd0012000da0120147ffffe4588013ffcd0213ffcd0012008da0120187ffffe4088013ffc8c21a0188b196018ba102005aa100006fa21bffce8012000e8256010e6012004e625600cd0256008e4012010e4256004e2012014e22560008c21a00c8b19600cba10200290100006fa21bffcea222004a0102005e0222000de01201881c3e0068801202081c3e00688012004de213ffcfa022004fa213ff8fa022008fa213ff4d002200c7ffffe1d88013ff4d0213ffcd0012000da01200c7ffffe1888013ffcac1000088c21a0148b196014ba10200490100006fa21bffcea012000ea22200cec222008e8012008e8222004a6103fd5e6222000e401200c81c4a00688012014de213ffcfa022008fa213ff8d00220047ffffe0288013ff8ac1000088c21a0108b196010ba10200390100006fa21bffcea012000ea222008ec222004a810202de8222000e601200481c4e0068801200cec022004ea05a00080a57ffd3280000680a56005e805a004d005200881c3e0068801200432800005d005a004d005a00881c3e0068801200481c3e00688012004|@4632,131071|60,4,$4521+86 180,4,@4522 312,4,@581 348,5,@4524 444,5,@4526 604,4,@4526 808,5,@3309 832,5,@3309 856,5,@3309 872,4,@4528 940,5,@4530 1016,5,@4533 1148,4,@4534 1176,5,@4579 1188,5,@4622 1200,4,@4488 1228,5,@4629 1352,5,@3258 1528,5,@4580 1548,5,@4595 1632,5,@4630 1752,5,@4631 4522:O3|@24,@397,@4523 4523:S19|756e6b6e6f776e20696e737472756374696f6e 4524:C2,136|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffc9010200181c3e00601000000da213ff8fa022000fa213ff4d00220047ffffff288013ff4d0213ffcd0012000c4012004da00a0007ffffdbc88013ffc8c21a00c8b19600cba102002ae100006fa21bffcec012000ec25e004d025e00090100017ea01200c81c5600688012010|@4525,131071|80,5,@4521 4525:S41|434f44455452454528292e707265436f6465283229636f7079436f64652834297265766d6170283229 4526:C2,512|9e13e002f606201880a1001b8bd02018c402600880a0a00122800004ee02600010800007ae10000880a5e00122800004ae1000081080000eb825e0018c21a0108b196010ba10200390100006fa21bffcee222008c4222004d2222000da037fecf403600081c6a00401000000811f200036800029a610000fb825e001ba102000b91f401cac072001a610000fa410000da2100017a010001692100010d004bfe87ffdf4ca01000000e6213ffce2213ff8d0213ff49410200592100010d004bfe87fff36db88013ff4de012000821be0048c21a0188b196018ba10200590100006fa21bffcc22220109a102001da22200c98102005d8222008d6012004d622200494103fedd4222000d201200881c260068801200ca410000da2100008a010001792100010d004bfc87ffdf4a801000000808a20013280000592100010d002200081c4e00601000000d004bfd87ffdf49f0100000080a460012280000de6213ffce6213ffce4213ff8e0213ff4d0213ff09410200592100010d004bfcc7fff36ac88013ff010800007de012008e4213ff8e0213ff4d0213ff088013ff0de01200894102005d2012004d003ffd87fff36a001000000c20120009a1860048c21a0188b196018ba10200590100006fa21bffcda22201098102001d822200c96102005d6222008d4012004d422200492103fedd2222000c401200c81c0a00688012010|@4527,131071|160,5,@608 192,5,@3309 296,5,@608 332,5,@608 380,5,@3309 428,5,@3309 4527:S42|434f44455452454528292e707265436f6465283229636f7079436f64652834296c6f6361646472283229 4528:O3|@24,@397,@4529 4529:S29|6465636c6172654172673a206e6f742061206465636c61726174696f6e 4530:C2,280|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffc9010200181c3e00601000000da213ff8fa022000fa213ff4d00220047ffffff288013ff4de012000da03e00080a37ff13280002198100008d8012004d6032000d0213ffcfa03e004fa213ff8fa03e008fa213ff494102001d2013ff8d002ffd87fff364a88013ff4d0012000d4012010da02a0007ffffcd4010000008c21a0148b196014ba10200482100006fa21bffc92102005d220600cd0206008d0012004d020600484103ff1c4206000108000098c21a00c113f0238900222a8f40620209fc6a00001000000821020018c21a00c8b19600cba102002ae100006fa21bffcec012008ec25e004c225e00090100017ea01201481c5600688012018|@4525,131071|124,5,@3309 144,5,@4521 208,4,@4531 4531:O3|@24,@397,@4532 4532:S26|636f70794465633a206e6f742061206465636c61726174696f6e 4533:C2,136|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffc9010200181c3e00601000000da213ff8fa022000fa213ff4d00220047ffffff288013ff4d0213ffcd0012000c4012004da00a0007ffffc8a88013ffc8c21a00c8b19600cba102002ae100006fa21bffcec012000ec25e004d025e00090100017ea01200c81c5600688012010|@4525,131071|80,5,@4521 4534:C2,1852|9e13e002f6062018ba21207080a7401b8bd02018de213ffcda213ff8d0213ff4d2213ff090102001400001cc88013ff0d4213ffcd0213ff8d0012000da0120087ffffc6588013ff89410000890102001da012010400001c101000000d4213ffcd0213ff8d0012000da0120104000027788013ff8d001200cda0120187ffffc56010000009410000890102001da012018400001b201000000d0213ffcd0213ff8d4213ff4d0213ff094013ff892100008d00120004000033788013ff0d0012010da012028400004d101000000d0012024da0120287ffffc4001000000d0213ffc4000052488013ffc80a220013280001ad0213ffcd2012010d00120184000079101000000a8100008d201200cd00120084000078c01000000a61000088c21a0148b196014ba10200490100006fa21bffce622200ce8222008e4012000e4222004a2102009e2222000e001203081c4200688012034d0213ff8d2012008c402600080a0a0051280012a88013ff8ee026004d6022000d4022004fa022008fa213ffcfa02200cfa213ff8fa05e000fa213ff4fa05e004fa213ff0fa05e008fa213fecfa05e00cfa213fe8fa05e010fa213fe4d2013fecd0013ff84000067f88013fe4808a2001328000e1d2012034d202200c80a260053280009ad2012034a810000ae6022000e40220089410001292100013d0012028400007fa01000000d0213ffcd0213ff8d6213ff4e8213ff0e6213fece4213fe894013ff8d2012028d0012038400002dc88013fe8d4012000d2012004d00120504000087d0100000080a2200122800041d2012014d2012014d00120544000073c010000008c21a00c8b19600cba102002a2100006fa21bffce0012030e0246004d024600082100011d001201c9a01206c400008be010000008c21a00c8b19600cba1020029a100006fa21bffcd0236004c22360009810000dd2012010d00120184000072301000000d6012008d4012024b822a001ba22e001811f401c368000039210000a9210000bc401200cee012028b825e001ba20a001811f401c24800003ac100017ac1000028c21a0188b196018ba102005aa100006fa21bffcd0256010d825600ce801202ce8256008d2256004ec256000a6012034a4102005e424e000a2012034ea246004108000f58c21a00cd0012054400006fe010000008c21a00c8b19600cba102002a2100006fa21bffce0012030e0246004d024600082100011d001201c9a01206c400008b3010000008c21a00c8b19600cba1020029a100006fa21bffcd0236004c22360009810000dd2012010d0012018400006e501000000d6012008d4012024b822a001ba22e001811f401c368000039210000a9210000bc401200cee012028b825e001ba20a001811f401c24800003ac100017ac1000028c21a0188b196018ba102005aa100006fa21bffcd0256010d825600ce8012020e8256008d2256004ec256000a6012034a4102005e424e000a2012034ea246004108000b78c21a00cd001203c400006c0010000008c21a00c8b19600cba10200284100006fa21bffcee012018ee20a004d020a000a0100002d00120049a012054400008a8010000008c21a00c8b19600cba1020029e100006fa21bffcd023e004e023e0008210000fd2012030d0012000400006a701000000da01200cb8236001ba22a001811f401c368000039810000d9810000ad4012010b822a001ba22e001811f401c248000039210000a9210000b8c21a0188b196018ba10200584100006fa21bffcd020a010c220a00cee012008ee20a008d820a004d220a000ac01201caa102005ea25a000a801201cc4252004d0213ffcd0213ff8d0213ff4d0213ff0d0213fecd0213fe888013fe8108000748c21a00cd001203c4000067d010000008c21a00c8b19600cba10200292100006fa21bffcc4012018c4226004d02260008c21a00c8b19600cba102002ae100006fa21bffcac102001ec25e004d225e000a8100017d2012030d001202c40000668010000008c21a0188b196018ba102005a6100006fa21bffcd024e010e824e00ce4012014e424e008d424e004d624e000a201201ca0102005e02460009e01201ce623e004d0213ffcd0213ff8d0213ff4d0213ff0d0213fecd0213fe888013fe8108000438c21a00ce8022000e6022004e4022008e202200cd2012018d001202040000647010000008c21a00c8b19600cba102002a0100006fa21bffce4242004d02420008c21a00c8b19600cba1020029e100006fa21bffc82102001c223e004e023e000da012010d603600080a2fff9328000049810000d193f002f9803208c9410000fd20120149010000c4000062c010000008c21a0188b196018ba10200592100006fa21bffcd0226010d422600ce2226008e6226004e82260009001200084102005c4222000ae012000d225e004d0213ffcd0213ff8d0213ff4d0213ff0d0213fecd0213fe8d0213fe4d0213fe0d0213fdcd0213fd8d0213fd4d0213fd0d0213fcc88013fcc8c21a00c8b19600cba10200290100006fa21bffcec012034ec222000ea012038ea222004e801206c81c5200688012070|@4578,131071|40,5,@4535 64,5,@4521 84,5,@4535 108,5,@4537 124,5,@4521 144,5,@4535 180,5,@4543 196,5,@4553 212,5,@4521 224,5,@4555 252,5,@4565 272,5,@4565 440,5,@4559 500,5,@4569 544,5,@4543 564,5,@4573 592,5,@4565 644,5,@4575 692,5,@4565 840,5,@4565 892,5,@4576 940,5,@4565 1088,5,@4565 1140,5,@4577 1188,5,@4565 1356,5,@4565 1440,5,@4565 1572,5,@4565 1660,4,@660 1680,5,@4565 4535:C2,668|9e13e002f606201880a1001b8bd02018d0037ffcc4022000ec00a00080a5bffd32800007ea00a004ea00a004e8056000ae10001410800008e8037fe8fa057ffcbb2f6008b9376006a8072001ae100014e8037fe8e6052000e404e000e004a00080a43ffd32800007c204a004c204a004d8006000a210000c10800008de213ffcfa007ffcbb2f6008b937600698072001a210000cde213ffcda213ff8ee213ff4e2213ff0fa037fd8fa213fec981020019610200188013fecd0012008b8222001ba22e001811f401c328000059210000b8410000c1080001fee01200cd00120007ffdf1bf0100000080a2200122800012b822e001b822e001b9172004840720018c21a00c8b19600cba102002ae100006fa21bffcd825e004d625e0009610000298100017f606201880a1001b8bd0201830bfffe2b91720048407200196100002f606201880a1001b8bd0201830bfffdbc4213ffcfa05ffe8fa213ff8ac102001aa10200188013ff8e801200cb8252001ba256001811f401c32800005a6100016a6100016108000228c21a008a410001592100012d00120007ffdf1910100000080a2200122800012b824a001b824a001b9172004a20720018c21a00c8b19600cba102002a0100006fa21bffce6242004e4242000aa100011ac100010f606201880a1001b8bd0201830bfffe0b9172004a2072001aa100011ac100013f606201880a1001b8bd0201830bfffd88b1960083b100000ba076001a4100006fa21bffce2012004e224a0008c21a0088b1960083b100000ba076001a0100006fa21bffce6242000de012014c203ffe4da0060008c21a0088b1960083b100000ba07600198100006fa21bffcda2320008c21a0108b196010ba10200396100006fa21bffce422e008d822e004e022e0009010000bd201201881c260068801201c|@4536,131067|224,5,@608 408,5,@608 4536:S45|434f44455452454528292e707265436f6465283229636f7079436f646528342973617665557361676573283129 4537:C2,288|9e13e002f606201880a1001b8bd02018c4022000ee00a000ec022008ea05a000e8037fe8e6052000e404e000e004a00080a43ffd32800007c204a004c204a004d8006000a210000c10800008b8246001fa007ffcbb2f6008b937600698072001a210000cb8246001b91f200498072001de213ffcda213ff8ea213ff4fa022004fa213ff09410000c92100017901000144000002b88013ff0d6012008d402fffcd202a000c402600080a0bffd32800007ee026004ee026004ec05e0009010001610800008b8222001fa05fffcbb2f6008b9376006ac07200190100016b8222001b91f2004aa07200194100015d2012004d002ffd84000001201000000e8012008e6012000e404e000e2053fe4e424600090102001e001200c81c4200688012010|@4542,131071|144,5,@4538 244,5,@4538 4538:C2,324|9e13e002f606201880a1001b8bd02018b822a001811f20003680000f80a2600180a2600132800005de213ffc9010200181c3e00601000000113f023c90022064f40620209fc6a00088013ffc9010200180a2600132800013c4026000de213ffcd0213ff8d4213ff494102001d2013ff47fff32e988013ff4c4012000b820a001b91f2004ae0720019410001792102001d0012004de01200810bfffdb8801200cb822a001ba20a001811f401c32800015de213ffcde213ffcd0213ff8d4213ff4fa026004fa213ff094102005d2013ff47fff32d188013ff0ee012004b825e001b91f2004ac07200194100016d2012000d0012008de01200c10bfffc388012010d0213ff8d2213ff4d4213ff094102001d2013ff07fff32c088013ff0ee012000b825e001b91f2004ac07200194100016d2012004d0012008de01200c10bfffb288012010|@4541,131071|56,4,@4539 112,5,@3309 208,5,@3309 276,5,@3309 4539:O3|@24,@397,@4540 4540:S21|736574546f53617665643a206e6f7420656d707479 4541:S57|434f44455452454528292e707265436f6465283229636f7079436f6465283429736574546f5361766564283129636f70794172726179283329 4542:S45|434f44455452454528292e707265436f6465283229636f7079436f6465283429736574546f5361766564283129 4543:C2,428|9e13e002f606201880a1001b8bd02018c4022000ee00a000ec022008ea05a000e8026000e6052000e4026008e204a000d0213ffcd0213ff8de213ff4d4213ff0ea213fecfa022004fa213fe8e2213fe4fa026004fa213fe0213f023ca00422d8e0213fdc82013ff8c2213fd8961000179410001392102001901020014000006388013fd8d0213ffcd0213ff81b3f023d9a0362bcda213ff498013ff8d8213ff0d601200cd4012004d2012018d001201c4000005688013ff0d0213ffcd0213ff8d6012010d402e000d2012008d002600080a280081280000a88013ff884012000ee012008ee20a000ac012000ea01200cea25a00410800026e2012020c402e00080a0a001228000138c21a00c8c21a00c8b19600cba102002ae100006fa21bffcec012008ec25e0042b3f023daa056334ea25e000a8012000ee252000a6012000e401200ce424e00410800011e20120208b19600cba102002ae100006fa21bffcec01200cec25e0042b3f023daa056334ea25e000a8012000e6012008e6252000a4012000ee24a004e2012020e0012000e0246000de012004de24600490102001c201202481c0600688012030|@4552,131071|88,4,@4544 124,5,@4546 140,4,@4548 176,5,@4546 296,4,@4551 360,4,@4551 4544:O1|@4545 4545:C2,28|9e13e002b8222001ba102000b91f401c9007200181c3e00601000000|0,129| 4546:C2,832|9e13e002f606201880a1001b8bd0201880a2e0013280003580a2a00180a2a00132800008de213ffcd6012000d222e000d022e0049010200181c3e00688012008d0213ff8d2213ff4fa02a004fa213ff0d002a000da012004f40360009fc6a00088013ff08c21a0188b196018ba10200584100006fa21bffcae102005ee20a010ac102001ec20a00caa102005ea20a008d020a004a8103fede820a0008c21a00c8b19600cba102002a6100006fa21bffce4012008e424e004c424e000e2012014e0012010e2212014e021201096102001d4012000d201200490100013de01200c10bfffc9880120103280002dc402e000de213ffcd0213ff8d2213ff4fa02e004fa213ff0d002e000da012004f40360009fc6a00088013ff08c21a0188b196018ba10200584100006fa21bffcae102005ee20a010ac102001ec20a00caa102005ea20a008d020a004a8103fede820a0008c21a00c8b19600cba102002a6100006fa21bffce4012004e424e004c424e000e2012014e0012010e2212014e0212010d60120009410200192100013d0012008de01200c10bfff9c88012010ee02a000b825e001ba20a001811f401c3280000ab825e001ec012004ea012000ec212004ea212000d602e004d402a00410bfff8ff6062018ba20a001811f401c3680002ede213ffcde213ffcd0213ff8d2213ff4d6213ff0fa02a004fa213fec90100017da012004f40360009fc6a00088013fec8c21a0188b196018ba102005ac100006fa21bffcaa102005ea25a010a8102001e825a00ca6102005e625a008d025a004a4103fede425a0008c21a00c8b19600cba102002a2100006fa21bffce001200ce0246004ec246000de012018c2012014de212018c2212014d6012004d4012000d201200890100011de01201010bfff5e88012014d0213ff8d2213ff4d4213ff0fa02e004fa213fec90100002da012004f40360009fc6a00088013fec8c21a0188b196018ba102005ac100006fa21bffcaa102005ea25a010a8102001e825a00ca6102005e625a008d025a004a4103fede425a0008c21a00c8b19600cba102002a2100006fa21bffce0012008e0246004ec246000de012018c2012014de212018c2212014d6012000d401200492100011d001200cde01201010bfff3388012014|@4547,131071| 4547:S61|434f44455452454528292e707265436f6465283229636f7079436f6465283429636f6d707574654b696c6c536574732833296b696c6c53657473283629 4548:O1|@4549 4549:C2,12|9e13e00281c3e00601000000|@4550,129| 4550:S63|434f44455452454528292e707265436f6465283229636f7079436f6465283429636f6d707574654b696c6c536574732833293c7061747465726e3e2d283129 4551:O5|-5,0,0,0,1 4552:S50|434f44455452454528292e707265436f6465283229636f7079436f6465283429636f6d707574654b696c6c53657473283329 4553:C2,276|9e13e002f606201880a1001b8bd02018c4022000ee00a000ec022008ea05a000de213ffcda213ff8ea213ff4fa022004fa213ff0fa037fe8fa213fec88013fec80a5e00132800004fa05e0041080000ee801200cfa213ffc94102005d205e000d00120007fff30cb88013ffcee01200088012004f606201880a1001b8bd0201830bffff0fa053fd8fa213ffce601200888013ffc80a4e00132800004fa04e0041080000ee4012008fa213ffc94102005d204e000d00120007fff30b688013ffce601200088012004f606201880a1001b8bd0201830bffff0e204a00080a460012280000a90102001e0012010de043fe482102005c223e00090102001da01201481c3600688012018e001201481c4200688012018|@4554,131071|100,5,@3309 184,5,@3309 4554:S47|434f44455452454528292e707265436f6465283229636f7079436f646528342961646446726f6d5361766564283129 4555:C2,1108|9e13e002f606201880a1001b8bd02018c402200080a0a011328000b280a0a005ee022008ec05e00080a5bff5328000ab90102001ea05e00429000089a805227880a5401432800004010000001080000fe802200429000085a80523f880a54014328000040100000010800008e80220042900008aa805213880a540143280009590102001e8022004808d20013280008f90102001e6052004808ce0013280008990102001e404e00480a4a0013280008390102001e204e000e004600080a43ff532800052c2052000c2052000da00600080a37ff532800028d8046004d8006004808b20012280002290102001808b200122800005de213ffc9610000c108000098c21a00c113f002990022348f40620209fc6a00088013ffc961020018c21a00c8b19600cba10200294100006fa21bffc92102001d222a004d622a0008c21a0148b196014ba10200492100006fa21bffce222600cd4226008d6226004d62260009010000981c3e0060100000081c3e00601000000808b20012280002290102001808b200122800005de213ffc9610000c108000098c21a00c113f002990022348f40620209fc6a00088013ffc961020018c21a00c8b19600cba10200294100006fa21bffc92102001d222a004d622a0008c21a0148b196014ba10200492100006fa21bffcc222600cd4226008d6226004d62260009010000981c3e0060100000081c3e00601000000da00600080a37ff53280002890102001d8006004808b20012280002290102001808b200122800005de213ffc9610000c108000098c21a00c113f002990022348f40620209fc6a00088013ffc961020018c21a00c8b19600cba10200294100006fa21bffc92102001d222a004d622a0008c21a0148b196014ba10200492100006fa21bffce222600cd4226008d6226004d62260009010000981c3e0060100000081c3e0060100000081c3e0060100000081c3e0060100000081c3e0060100000081c3e0060100000081c3e0060100000081c3e006010000003280005b90102001ee022004de213ffcfa05e000fa213ff8fa05e004fa213ff4fa05e008fa213ff0fa05e00cfa213fecd005e0107fffff3b88013feca6100008d00120004000005301000000808ce0013280004490102001808a20013280003e90102001d604e000d404e004fa04e008fa213ffcfa04e00cfa213ff8fa022000fa213ff4d2013ff8d0012004400000b688013ff492102001400001200100000080a220013280002990102001d001200880a2200132800005d0012000d201200010800007c40120149a01201c400001560100000092100008c4012014b822a001ba20a001811f401c36800003ae10000aae100002ec012018b822e001ba25a001811f401c24800003aa10000baa1000168c21a0148b196014ba102004a8100006fa21bffce6012004e625200cd2252008ee252004ea25200090100014e401201c81c4a00688012020d201201c81c2600688012020e401201081c4a00688012014e401201081c4a0068801201481c3e00601000000|@4564,131071|56,4,I229 84,4,I113 112,4,I251 260,4,@542 408,4,@542 576,4,@542 804,5,@4556 876,5,@4559 888,5,@4561 940,5,@4563 4556:C2,224|9e13e002f606201880a1001b8bd0201880a2200132800006c4022000113f00319002212481c3e00601000000ee00a000ec05e00080a5bff53280002890102001ea05e00480a560053280002490102001de213ffcfa00a004fa213ff8d00220047fffffe888013ff880a2200132800006de02200090102001de01200481c3e0068801200880a3e00132800005de213ffce8012000108000098c21a008d00120009a0120044000001688013ffca8100008880120048c21a0088b196008ba10200190100006fa21bffce8222000da01200481c360068801200881c3e00601000000|@4558,127137|28,4,@799 164,5,@4557 4557:C2,112|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffcd0037ff881c3e00601000000da213ff8fa022000fa213ff4d00220047ffffff288013ff48c21a00c8b19600cba1020029e100006fa21bffcd023e004da012000da23e0009010000fde01200881c3e0068801200c|@1966,161| 4558:S67|434f44455452454528292e707265436f6465283229636f7079436f6465283429636f7079436f6e6428332966696e6443617365283129636865636b4361736573283129 4559:C2,344|9e13e002f606201880a1001b8bd02018c402600080a0bfed3280003980a0a0198c21a0148b196014ba102004ae100006fa21bffcec026010ec25e00cea02600cea25e008e8026008e825e004e6026004e625e000e402200080a4bfed32800026901020018c21a0148b196014ba102004a2100006fa21bffce0022010e024600cc202200cc2246008da022008da246004d8022004d8246000b8232001ba24e001811f401c3280001290102001b8206001ba256001811f401c3280000d9010200180a5000d3280000a9010200180a5a00122800005901000119010001781c3e0060100000081c3e0060100000081c3e0060100000081c3e006010000003280001590102001ee02200080a5e0193280000f90102001ec026008ea022008b8256001ba25a001811f401c22800005d20260049010200181c3e00601000000d002200410bfffb2f606201881c3e0060100000081c3e00601000000|@4560,131059| 4560:S53|434f44455452454528292e707265436f6465283229636f7079436f6465283429636f7079436f6e6428332973696d696c6172283229 4561:C2,204|9e13e00280a2400832800005808a60019010200581c3e006010000003280002a90102001808a20013280002590102001c4026000ee022000b825e001ba20a001811f401c3280001c90102001ec026004ea02200480a580153280001590102001e8026008e6022008b824e001ba252001811f401c3280000c90102001e402600ce202200c80a4801132800005901020019010200581c3e0060100000081c3e0060100000081c3e0060100000081c3e0060100000081c3e0060100000081c3e0060100000081c3e00601000000|@4562,130691| 4562:S27|65712d434f44455452454528292e73696d696c6172697479283229 4563:C2,112|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffcd0037fec81c3e00601000000da213ff8fa022000fa213ff4d00220047ffffff288013ff48c21a00c8b19600cba1020029e100006fa21bffcd023e004da012000da23e0009010000fde01200881c3e0068801200c|@1966,161| 4564:S54|434f44455452454528292e707265436f6465283229636f7079436f6465283429636f7079436f6e6428332966696e6443617365283129 4565:C2,296|9e13e002f606201880a1001b8bd0201880a2600132800004d0213ffc81c3e00601000000d0213ff8c402200080a0a0251280001888013ff8ec02200480a5a00132800005ec213ffcae1000091080000b9a012000ae10000f901000099a0120044000003988013ffc9e100017ae100008880120049a01200092102025d223600090012000ee2220041080001e8c21a00c8c21a00c8b19600cba102002ae100006fa21bffcac102001ec25e004d025e00080a5e00132800005ee213ffcaa1000091080000b9a012000ac10000f901000099a0120044000003f88013ffcaa1000089e100016880120049a01200092102025d223600090012000ea2220048c21a00c8b19600cba10200290100006fa21bffcc4012000c4222000ee012004ee22200481c3e00688012008|@4568,123043|96,5,@4566 212,5,@4567 4566:C2,112|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffcd0037ff881c3e00601000000da213ff8fa022000fa213ff4d00220047ffffff288013ff48c21a00c8b19600cba1020029e100006fa21bffcd023e004da012000da23e0009010000fde01200881c3e0068801200c|@1966,161| 4567:C2,112|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffcd0037ff881c3e00601000000da213ff8fa022000fa213ff4d00220047ffffff288013ff48c21a00c8b19600cba1020029e100006fa21bffcd023e004da012000da23e0009010000fde01200881c3e0068801200c|@1966,161| 4568:S56|434f44455452454528292e707265436f6465283229636f7079436f6465283429636f7079436f6e642833296164644b696c6c536574283229 4569:C2,164|9e13e002f606201880a1001b8bd02018b822a001811f200024800008b8226001d402200492102001d222a0009010200181c3e00601000000811f20003680000ec4022008d4022000c402a000d2213ffcaa10000f901000029a013ffc4000001988013ffcd022a0009010200181c5600688012004ee00a000d2213ffcac10000faa100002901000179a013ffc4000003988013ffcd02560009010200181c5a00688012004|@4572,123047|92,5,@4570 140,5,@4571 4570:C2,148|9e13e002f606201880a1001b8bd0201880a2200132800005c40360009010200181c3e00601000000b820a001ba102000b91f401cae072001ec022000ba25a001811f401c22bffff0d0022004de213ffcda213ff8ec213ff4d00220047fffffe988013ff48c21a00c8b19600cba1020029e100006fa21bffcd023e004da012000da23e0009010000fc401200881c0a0068801200c|@328,114849| 4571:C2,136|9e13e002f606201880a1001b8bd0201880a2200132800005c40220009010200181c3e00601000000ee036000b825e001ba20a001811f401c22bffff3d0022004de213ffcda213ff8c4213ff4d00220047fffffec88013ff48c21a00c8b19600cba1020029e100006fa21bffcd023e004da012000da23e0009010000fc401200881c0a0068801200c|@328,98465| 4572:S45|434f44455452454528292e707265436f6465283229636f7079436f646528342972656d6f76654974656d283329 4573:C2,264|9e13e002c4022000ee00a000ec022008ea05a000b822a001811f200024800006b8226001d4022004d002a00081c3e00601000000811f20003680001dde213ffcde213ffcd2213ff888013ff880a5e00132800006de01200090102001de01200481c3e00688012008b823e001ba102000b91f401c94072001d205e000ba226001811f401c32800006ee05e00490102005c401200481c0a00688012008f606201880a1001b8bd0201830bfffe9d2213ff888013ff880a5600132800006de05600090102001de01200481c3e00688012008d4012000b822a001ba23e001811f401c32800006ea05600490102005d201200481c2600688012008f606201880a1001b8bd0201830bfffec|@4574,123015| 4574:S40|434f44455452454528292e707265436f6465283229636f7079436f6465283429696e536574283329 4575:C2,176|9e13e002f606201880a1001b8bd0201880a2200132800005c40220009010200181c3e00601000000a810000fa610000de4022004e200a004d204ffa4d000a0007ffffe61010000008c21a00c8b19600cba1020029e100006fa21bffce223e004d023e000e8213ffce6213ff8de213ff4901000129a1000137fffffe288013ff48c21a00c8b19600cba1020029a100006fa21bffcd0236004d2012000d22360009010000dc401200881c0a0068801200c|@586,130723|64,5,@4565 4576:C2,176|9e13e002f606201880a1001b8bd0201880a2200132800005c40220009010200181c3e00601000000a810000fa610000de4022004e200a004d204ffa4d000a0007ffffe2e010000008c21a00c8b19600cba1020029e100006fa21bffce223e004d023e000e8213ffce6213ff8de213ff4901000129a1000137fffffe288013ff48c21a00c8b19600cba1020029a100006fa21bffcd0236004d2012000d22360009010000dc401200881c0a0068801200c|@586,130723|64,5,@4565 4577:C2,176|9e13e002f606201880a1001b8bd0201880a2200132800005c40220009010200181c3e00601000000a810000fa610000de4022004e200a004d204ffdcd000a0007ffffdfb010000008c21a00c8b19600cba1020029e100006fa21bffce223e004d023e000e8213ffce6213ff8de213ff4901000129a1000137fffffe288013ff48c21a00c8b19600cba1020029a100006fa21bffcd0236004d2012000d22360009010000dc401200881c0a0068801200c|@586,130723|64,5,@4565 4578:S43|434f44455452454528292e707265436f6465283229636f7079436f6465283429636f7079436f6e64283329 4579:C2,1244|9e13e002f606201880a1001b8bd0201880a2200132800005c40220009010200181c3e00601000000ee00a00080a5fff1328000ad80a5ffddec036000de213ffcda213ff8fa00a004fa213ff4fa00a008fa213ff0fa022004fa213fec94102001d2013ff4d005bfd87fff2bc788013fecea01200ce805600094102001d2012008d0053fcc7fff2bc001000000e6012004e204e00080a47ff532800012e001200ce001200cde0420008c21a0088b196008ba10200182100006fa21bffce620600094100001d2012008d003ffc87fff2bae01000000a41000081080000ad0012000de04200094102001d2012008d003ffc87fff2ba501000000a4100008d0012000da01200c7fffffc09e13e002c201200cda00600098100008d2012008d0037fd87ffde9800100000080a2200132800011d8213ffcd6006000d402fff4d202a000d8213ffcd0213ff8d0012004da026004f40360009fc6a00088013ff880a220012280000bd601200c10800006d0012004d0213ff888013ff810800005d601200cc401201881c0a0068801201cd202e00080a27fe53280002c9010000bd0012014c4022000d2012010d000bfcc7ffde95d010000008c21a0088b1960083b100000ba076001ae100006fa21bffcd025e000ec02e004ee213ffcea05a00cea213ff8e805a010e8213ff4e605a014e6213ff0e405a018e4213fece205a01ce2213fe8d605a008d405a004d205a00090100017da012014400000b988013fe8e0012000de042000921000089010000fda012018400003e101000000941000081080000aee012018c4012014da00a0007ffff1dd0100000094100008d0213ffc88013ffcee012018ec05e000d4213ffc94102001d2012014d005bfd87fff2b4388013ffc8c21a0148b196014ba102004aa100006fa21bffce8012008e825600ce6012000e6256008e4012018e4256004a2103ff1e22560008c21a00c8b19600cba102002a0100006fa21bffcde01200cde242004ea24200090100010c201202081c060068801202432800056de213ffcda213ffcde213ff8fa00a004fa213ff4fa022004fa213ff0ec013ff488013ff080a5a00132800005fa05a004aa1020011080000dd0012000fa213ffcd005a0009a01200c4000045d88013ffcec01200088012004f606201880a1001b8bd0201830bffff0da01200c7fffff2c9e13e002d0213ffcd00120049a01200c400004b388013ffc9410000892102001901020019a0120104000057a010000009a0120104000065e0100000080a2200132800006e8022004d0012000e801200c81c520068801201480a520013280000f8c21a00c8c21a00c8b19600cba102002a6100006fa21bffce4012000e424e004e2022000e224e00090100013e001200c81c42006880120148b19600cba102002a6100006fa21bffcd024e004a4103fdde424e0008c21a00c8b19600cba102002a2100006fa21bffce0012000e0246004e624600090100011de01200c81c3e00688012014da213ff8c4213ff4d00220047ffffeee88013ff4d0213ffcd0012000ec012004da05a0007ffff15888013ffcea02200080a56025328000108c21a00ce801200080a5200132800006d0022004d0022004e601200c81c4e006880120109a01200c400006aa01000000e601200c81c4e006880120108b19600cba102002a8100006fa21bffce6012000e6252004d025200090100014e401200c81c4a00688012010|@4621,131071|104,5,@3309 132,5,@3309 204,5,@3309 240,5,@3309 288,5,@608 428,5,@608 532,5,@4580 560,5,@4595 588,5,@4521 632,5,@3309 816,5,@4600 872,5,@4604 896,5,@4609 908,5,@4616 1120,5,@4521 1180,5,@4620 4580:C2,944|9e13e002f606201880a1001b8bd020188c21a0088b1960083b100000ba07600184100006fa21bffcae102001ee20a0008c21a0088b1960083b100000ba076001ae100006fa21bffcac102001ec25e0008c21a0088b1960083b100000ba076001ac100006fa21bffcaa102001ea25a000ea0360008c21a0248b196024ba102008a8100006fa21bffc273f0245a604e058e6252000e6057fece625201ce4057fc8e4252018e2057fcce2252014c4252010ee25200cd0252008ec252004d001200cb8222001b9172004ae072001d0213ffcd0213ff888013ff8b9172004a0072001de213ffcda213ff8d2213ff4d4213ff0d6213fecc4213fe8ec213fe4e8213fe0ee213fdc9410200192102101901000101b0000829a036338f40360009fc6a00088013fdcde012000de2220008c21a00c8b19600cba10200282100006fa21bffcd02060049a103ffdda2060008c21a0088b1960083b100000ba07600198100006fa21bffcc223200096012024d822e0009401202492102001d222a0048c21a00c8b19600cba10200290100006fa21bffcc4012024c4222000ee012028ee2220048c21a00c8b19600cba102002ac100006fa21bffc2b3f0246aa056278ea25a000e8012004e825a004d0213ffcd60120089410000892100016d0012018e601201ce404e000da04bff47ffff02288013ffca0100008901020059a01202c400002200100000080a22001328000058c21a00c9e1000101080001dd40120108b19600cba10200282100006fa21bffc9a102001da206004e020600080a0600132800005c2213ffc98100008108000088c21a00c9a01202c4000026788013ffc98100008880120048c21a00c8b19600cba1020029e100006fa21bffcd823e00496102025d623e000d4012010d202a00080a2600132800029d002a000d001200cc40220008c21a0248b196024ba102008ae100006fa21bffcac102005ec25e01cc425e018ea012038ea25e014e801203ce825e010a6102001e625e00ce4012014e425e008e2012018e225e004de25e0008c21a00c8b19600cba102002a0100006fa21bffcee2420049e103fe5de242000c2012020da006000d8037ff492100010d0033ffcde012024353f022db406a30481c6a00488012044c401200cee00a0008c21a0248b196024ba102008ac100006fa21bffcaa102001ea25a01cee25a018e8012038e825a014e601203ce625a010d025a00ce4012014e425a008e2012018e225a004de25a0008c21a00c8b19600cba10200290100006fa21bffcec222004a0103fe5e0222000de01202481c3e00688012044|@4594,131071|136,4,@4581 272,4,I11 436,4,@4589 488,5,@4520 508,5,@4591 596,5,@4593 804,4,@4461 4581:C2,796|9e13e002f606201880a1001b8bd02018da213ffcfa022004fa213ff8d2213ff4fa022000fa213ff080a260011280003188013ff0d201200080a2600122800004d001200810800007de213ffc80a2200132800004de213ffc1080000990102001113f024590022390f40620209fc6a00088013ffc901020019010200180a2a0012280000684102001d403600892102005d222a00084102001c4036004d400a00092102005d220a000901aa004941000088c21a0188b196018ba10200590100006fa21bffcd422201092102001d222200c94102001d422200892102001d222200494103fedd422200081c3e0068801201080a260053280003e80a26005c4012000b820a001811f20002480003980a26005d201200880a260013280000a90102001de213ffc113f024590022390f40620209fc6a00088013ffc9010200190102001a610000f92100002d00360187ffde74401000000808a20013280000580a2a001d002200081c4e006880120102280000ca4102001de01200ce6213ffc94102005d2012000d003e0147fff294e88013ffca410000810800005e4012010e6213ffc88013ffce4012010e204a004e00460009e102005de246000c204a010da006000d804a00cd60320009410000d9210000b901000109a0120104000006401000000d401200081c2a0068801201432800024b8226001c4012000b820a001811f20003680001fb8226001ee01200880a5e0013280000aac102001de213ffc113f024590022390f40620209fc6a00088013ffcac102001ac102001ec036004ea05a000a8102005e825a000e6036010e404e000e203600ce00460008210000f9410001292100010901000159a01200c4000003f0100000081c0600688012010b91f200484072001ae1000088c21a0108b196010ba10200390100006fa21bffcd4222008c4222004ee222000de213ffcda03601cf40360009fc6a00088013ffcec02200080a5bff532800005ea012010ea01200081c5600688012014e8056004e6052000a4102005e4252000e2056010e0046000de05600cc203e0009410001092100001901000139a0120104000001801000000da01200081c3600688012014|@4588,131071|96,4,@4582 292,4,@4582 332,5,@608 392,5,@3309 472,5,@4584 540,4,@4582 620,5,@4584 776,5,@4584 4582:O3|@24,@397,@4583 4583:S23|707265763a206261646c792d666f726d6564206c6f6164 4584:C2,444|9e13e002f606201880a1001b8bd0201880a2a00132800035c402a000d4036000d2037ff8b8226001b91f2004840720018c21a0188b196018ba102005ae100006fa21bffcac102001ec25e010c425e00cc4037ffcc425e008ec037ff4ec25e004aa103fedea25e000ea02a010e80560008c21a00c8b19600cba102002a6100006fa21bffce824e004ee24e000e6256000ee02a00ce805e000b8252001b9172004a6072001e625e000a81a20048c21a0188b196018ba10200590100006fa21bffce8222010a8102001e822200ca8102001e8222008e6222004a6103fede622200081c3e00601000000ee00a00080a5ffed3280002dde213ffcec00a004ea037ff4b8256001ba25a001811f401c32800020b8226001e8037ff8b8252001b91f2004a6072001e400a00cba24a001811f401c32800017b8226001e600a008e2037ffc80a4c01132800012b8226001a01a20048c21a0188b196018ba10200590100006fa21bffce0222010a0102001e022200ca0102001e0222008d222200492103fedd222200081c3e00601000000b91f2004a8072001d402a0049210001410bfff9bf6062018113f024690022198f40620209fc6a00088013ffc90102001|@4587,130983|420,4,@4585 4585:O3|@24,@397,@4586 4586:S40|6d616b65436c6f73757265456e7472793a20636c6f73757265206973206e6f742045787472616374 4587:S80|434f44455452454528292e707265436f6465283229636f7079436f6465283429696e73657274283129636f70794c616d626461283929707265762833296d616b65436c6f73757265456e747279283329 4588:S61|434f44455452454528292e707265436f6465283229636f7079436f6465283429696e73657274283129636f70794c616d62646128392970726576283329 4589:C2,44|9e13e002f606201880a1001b8bd02018d4022008d2022004d0022000da036004f403600081c6a00401000000|@4590,131071| 4590:S61|434f44455452454528292e707265436f6465283229636f7079436f6465283429696e73657274283129636f70794c616d62646128392970726576283129 4591:C2,268|9e13e002f606201880a1001b8bd02018c4036010b820a001ba222001811f401c24800005a610000f9010200181c3e00601000000a410000da210000892100011d004bfd47ffde5da0100000080a2200132800029b8246001b8246001ba102000b91f401c9e0720018c21a0188b196018ba1020059a100006fa21bffc92102005d223601090102001d023600c84102005c4236008de236004ae103fedee236000b8246001b917200490072001e6213ffce4213ff8da213ff49a1000127fffffd188013ff48c21a00c8b19600cba102002ac100006fa21bffcd025a004ea012000ea25a00090100016e801200881c520068801200cb9172004900720019a1000129e10001310bfffc1f6062018|@4592,130723|68,5,@608 4592:S65|434f44455452454528292e707265436f6465283229636f7079436f6465283429696e73657274283129636f70794c616d6264612839296164644b696c6c73283129 4593:C2,112|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffcd0037fd081c3e00601000000da213ff8fa022000fa213ff4d00220047ffffff288013ff48c21a00c8b19600cba1020029e100006fa21bffcd023e004da012000da23e0009010000fde01200881c3e0068801200c|@1966,161| 4594:S54|434f44455452454528292e707265436f6465283229636f7079436f6465283429696e73657274283129636f70794c616d626461283929 4595:C2,320|9e13e002f606201880a1001b8bd02018c402600080a0bfe53280004890100009ee026004da213ffcd0213ff8de213ff4fa05e000fa213ff0fa05e004fa213fecfa05e008fa213fe8fa05e010fa213fe4fa05e014fa213fe0fa05e018fa213fdcd005e00c9a013ffc4000003d88013fdcac10200180a22001328000058c21a00caa1000161080000f8c21a0248b19600cba102002a8100006fa21bffcec252004e6022000e6252000ac100014d0022004f606201880a1001b8bd0201830bfffee8b196024ba102008a8100006fa21bffce601201ce625201ce4012000e4252018e2012004e2252014e0012008e0252010ea25200cde01200cde252008c2012010c2252004da012014da2520008c21a00c8b19600cba10200290100006fa21bffce822200498103fe5d8222000d601201881c2e0068801202481c3e00601000000|@4599,131071|104,5,@4596 4596:C2,256|9e13e002f606201880a1001b8bd0201880a2200132800005c40220009010200181c3e00601000000ec00a00080a5bfed3280001cde213ffc8c21a0148b196014ba102004aa100006fa21bffce800a010e825600ce600a00ce6256008e400a008e4256004e200a004e2256000de213ffcda213ff8fa022004fa213ff492100015d0037ffce0036000da0420007fffefef88013ff4ae1000081080000aee213ffcea022004113f0247900223c0f40620209fc6a00088013ffcae102001ee213ffcd0012000da0120047fffffce88013ffc8c21a00c8b19600cba1020029e100006fa21bffcd023e004c2012000c223e0009010000fda01200c81c3600688012010|@586,131071|140,5,@4526 164,4,@4597 4597:O3|@24,@397,@4598 4598:S26|6d616b654c6f616473202d206e6f7420616e2045787472616374 4599:S59|434f44455452454528292e707265436f6465283229636f7079436f6465283429696e73657274283129636f707950726f63436c6f73757265283229 4600:C2,244|9e13e002f606201880a1001b8bd02018c402200080a0bff132800031de213ffcee022008ec05e00080a5bff532800015de213ffcea036000e80560008c21a0088b196008ba102001a6100006fa21bffcee24e000de213ffcda213ff8fa022004fa213ff494100013d2013ff4d0053fc87fff269c88013ff410800007ea012004da213ff8fa022004fa213ff488013ff4ea012004e8056000e605200094102001d2012000d004ffd87fff268e01000000e4012004e204a000e004600094102001d2012000d0043fccde012008353f016eb406a31881c6a0048801200c113f024890022148f40620209fc6a00088013ffc90102001|@4603,131071|112,5,@3309 168,5,@3309 204,4,@3309 220,4,@4601 4601:O3|@24,@397,@4602 4602:S21|6170706c79466e3a206e6f742061204465636c6172 4603:S70|434f44455452454528292e707265436f6465283229636f7079436f6465283429696e73657274283129636f70794465636c61726174696f6e732831296170706c79466e283129 4604:C2,132|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffc9010200181c3e00601000000da213ff8fa022004fa213ff4d00220004000001a88013ff4d0213ffcd0012000da0120047fffffed88013ffc8c21a00c8b19600cba10200284100006fa21bffcd020a004ee012000ee20a00090100002ec01200c81c5a00688012010|@586,131071|56,5,@4605 4605:C2,504|9e13e002f606201880a1001b8bd02018c402200080a0bff132800072de213ffcee036000ec05e000a610000fa410000de2022004e002200892100011d005bfcc7ffde403010000008c21a0088b1960083b100000ba0760019e100006fa21bffcd023e000da04200080a37fe53280001be6213ffcd8042004e6213ffce4213ff8e2213ff4de213ff0d603200cd6213fecd4032010d4213fe8d2032014d2213fe4d0032018d0213fe0c403201cc4213fdcd6032008d4032004d20320009010000fda04a0007ffffb5888013fdc821000081080000cd4006000e4213ff8e2213ff4de213ff090100010d804a000da0320007fffec7f88013ff082100008d400600080a2bff532800014d2012008d2012008d0026000c40220008c21a0088b196008ba102001ae100006fa21bffcc225e000c2213ffc94100017d2012004d000bfc87fff25dc88013ffc961000081080000cee01200cd0026000c4022000c2213ffc94102001d2012004d000bfc87fff25d188013ffc96100008ee01200cec05e000ea05a000e8012004e605200094100013d2012008d0057fcc7fff25c6010000008c21a0148b196014ba10200490100006fa21bffca4102001e422200ce2012000e2222008e0012008e02220049e103ff1de222000c201201081c0600688012014113f02499002207cf40620209fc6a00088013ffc90102001|@4608,131071|64,5,@608 196,5,@4580 240,5,@4521 320,5,@3309 364,5,@3309 408,5,@3309 480,4,@4606 4606:O3|@24,@397,@4607 4607:S21|636f70794465633a206e6f742061204465636c6172 4608:S70|434f44455452454528292e707265436f6465283229636f7079436f6465283429696e73657274283129636f70794465636c61726174696f6e73283129636f7079446563283129 4609:C2,416|9e13e002f606201880a1001b8bd0201880a2a00132800012c402a00080a2200532800007da213ffc94100009921020019010200110bffff5f6062018de213ff8901000099a013ffc4000005d88013ff8c401200081c0a00688012008ee00a00080a5fff132800049de213ffcec036000ea05a000a610000fa410000da2100008a0100009c200a004d800a00892100001d0057fcc7ffde3490100000080a220012280002c8c21a00ce6213ffce4213ff8e0213ff4c2213ff0fa02a004fa213fec9210000c90102005da04a0007ffffde088013fec8c21a0148b196014ba10200496100006fa21bffc94102001d422e00cd022e008d2012004d222e00490103ff1d022e000d6213ffcd4012000d201200890102005da01200c7fffffba88013ffc8c21a00c8b19600cba10200284100006fa21bffcd020a004ee012000ee20a00090100002ec01201481c5a006880120188b19600cba10200296100006fa21bffce022e004d202a000d222e000d402a0049210000b901000119a1000129e10001310bfffa2f6062018113f024a90022008f40620209fc6a00088013ffc90102001|@4615,131071|72,5,@4610 148,5,@608 204,5,@4595 392,4,@4613 4610:C2,256|9e13e002f606201880a1001b8bd0201880a2200132800005c40220009010200181c3e00601000000ec00a00080a5bff13280001cde213ffcde213ffcda213ff8fa022004fa213ff4fa00a004fa213ff0d200a00890102001ea036000da0560007ffffd8c88013ff08c21a0148b196014ba102004ae100006fa21bffca8102001e825e00cd025e008e6012000e625e004a4103ff1e425e0001080000aee213ffcea022004113f0249900223d4f40620209fc6a00088013ffcae102001ee213ffcd0012004da0120087fffffce88013ffc8c21a00c8b19600cba102002a2100006fa21bffcd0246004e0012000e024600090100011de01201081c3e00688012014|@586,131071|96,5,@4595 164,4,@4611 4611:O3|@24,@397,@4612 4612:S28|6d6b4c69676874436c6f737572653a206e6f742061204465636c6172 4613:O3|@24,@397,@4614 4614:S29|70726f63657373436c6f73757265733a206e6f742061204465636c6172 4615:S78|434f44455452454528292e707265436f6465283229636f7079436f6465283429696e73657274283129636f70794465636c61726174696f6e7328312970726f63657373436c6f7375726573283329 4616:C2,412|9e13e002f606201880a1001b8bd0201880a2200132800005c40220009010200181c3e00601000000ee00a00080a5fff132800055de213ffcec036000ea05a000a610000fa410000de200a004e000a008c202200492100011d0057fd87ffde2700100000080a2200132800016e6213ffcda04a000d8036000d6033ff4d402e000e6213ffce4213ff8e2213ff4e0213ff0c2213fecd0213fe890100010da02a004f40360009fc6a00088013fe880a2200122800010da0120101080000ad0012004e4213ff8e2213ff4e0213ff0c2213fecd0213fe888013fe810800006da012010da012010de01201410bfffc788012018d8036000d603200094102001d201200cd002ffd87fff245f010000008c21a0148b196014ba10200494100006fa21bffcd2012000d222a00cd0012008d022a008c401200cc422a004ae103ff1ee22a000d4213ffcd0012004da0120107fffffad88013ffc8c21a00c8b19600cba102002ac100006fa21bffcd025a004ea012000ea25a00090100016e801201881c520068801201c113f024a90022250f40620209fc6a00088013ffc90102001|@4619,131071|92,5,@608 260,5,@3309 388,4,@4617 4617:O3|@24,@397,@4618 4618:S25|636f7079456e74726965733a204e6f742061204465636c6172 4619:S74|434f44455452454528292e707265436f6465283229636f7079436f6465283429696e73657274283129636f70794465636c61726174696f6e73283129636f7079456e7472696573283129 4620:C2,112|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffcd0037ff481c3e00601000000da213ff8fa022000fa213ff4d00220047ffffff288013ff48c21a00c8b19600cba1020029e100006fa21bffcd023e004da012000da23e0009010000fde01200881c3e0068801200c|@1966,161| 4621:S60|434f44455452454528292e707265436f6465283229636f7079436f6465283429696e73657274283129636f70794465636c61726174696f6e73283129 4622:C2,132|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffc9010200181c3e00601000000da213ff8fa022004fa213ff4d00220004000001a88013ff4d0213ffcd0012000da0120047fffffed88013ffc8c21a00c8b19600cba10200284100006fa21bffcd020a004ee012000ee20a00090100002ec01200c81c5a00688012010|@586,131071|56,5,@4623 4623:C2,364|9e13e002f606201880a1001b8bd02018c402200080a0bff13280003d80a0bfddee022008ec05e00080a5a0293280003601000000de213ffcda213ff8fa022004fa213ff4fa02200cfa213ff0d00220084000004e88013ff0ea02200080a57ff532800012e8012008e8012008e60520008c21a0088b196008ba102001a4100006fa21bffcd024a000d0213ffc94100012d2012004d004ffc87fff238e88013ffc1080000a8c21a014e6052000d0213ffc94102001d2012004d004ffc87fff238588013ffc8c21a0148b196014ba10200490100006fa21bffce4012004e422200ce2012000e2222008e0012008e02220049e103ff1de222000c201201081c060068801201481c3e006010000003280001401000000da213ffcde213ff8d00220049a013ffc400000b388013ff8ae1000088c21a00c8b19600cba10200290100006fa21bffcee222004ac103fddec222000ea01200081c5600688012008353f024bb406a1d081c6a00401000000|@4628,131071|80,5,@4624 152,5,@3309 188,5,@3309 292,5,@4627 348,4,@4624 4624:C2,360|9e13e002f606201880a1001b8bd02018c402200080a0a0293280003680a0bfedda213ffcde213ff8d00220049a013ffc4000005588013ff88c21a00c8b19600cba102002ae100006fa21bffcd025e004ac102029ec25e000ee213ffc88013ffc80a2200132800005e8022000aa1020051080000c80a56001e605200080a4fff532800007aa102001d0022004f606201880a1001b8bd0201830bffff280a5600122800011d0012000d00120007fff1ab201000000a41000088c21a00c8b19600cba10200290100006fa21bffce4222004a2103ff5e2222000e001200481c420068801200ce401200481c4a0068801200c3280001c01000000ee02200c80a5e0013280001601000000ec022004b825a001811f20002480001101000000ea036000a610000fa410000892100016d0057fc87ffde0ed01000000808a20013280000590100012d002200081c4e0060100000081c4e0060100000081c3e0060100000081c3e00601000000|@4626,131071|48,5,@4625 172,5,@3258 304,5,@608 4625:C2,136|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffc9010200181c3e00601000000da213ff8fa022004fa213ff4d0022000da0360007fffff9088013ff4d0213ffcd0012000da0120047fffffec88013ffc8c21a00c8b19600cba10200284100006fa21bffcd020a004ee012000ee20a00090100002ec01200c81c5a00688012010|@586,131071|60,5,@4624 4626:S55|434f44455452454528292e707265436f6465283229636f7079436f6465283429696e736572742831297265636f707956616c7565283129 4627:C2,136|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffc9010200181c3e00601000000da213ff8fa022004fa213ff4d0022000da0360007ffffef588013ff4d0213ffcd0012000da0120047fffffec88013ffc8c21a00c8b19600cba10200284100006fa21bffcd020a004ee012000ee20a00090100002ec01200c81c5a00688012010|@586,131071|60,5,@4623 4628:S61|434f44455452454528292e707265436f6465283229636f7079436f6465283429696e736572742831297265636f70794465636c61726174696f6e283129 4629:C2,136|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffc9010200181c3e00601000000da213ff8fa022000fa213ff4d00220047ffffff288013ff4d0213ffcd0012000c4012004da00a0007fffe8f888013ffc8c21a00c8b19600cba102002ae100006fa21bffcec012000ec25e004d025e00090100017ea01200c81c5600688012010|@4525,131071|80,5,@4521 4630:C2,136|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffc9010200181c3e00601000000da213ff8fa022004fa213ff4d0022000da0360007fffe8d488013ff4d0213ffcd0012000da0120047fffffec88013ffc8c21a00c8b19600cba10200284100006fa21bffcd020a004ee012000ee20a00090100002ec01200c81c5a00688012010|@586,131071|60,5,@4521 4631:C2,212|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffc9010200181c3e00601000000da213ff8fa022000fa213ff4d00220047ffffff288013ff4d0213ffcd0213ff8de012000d0213ff4fa03e004fa213ff0d003e000c2012004da0060007fffe8a188013ff09a012008d023600098012008d6012000d62320048c21a00c8b19600cba10200294100006fa21bffcd2012008d222a000d001200cd022a0048c21a00c8b19600cba10200284100006fa21bffcee012004ee20a004d420a00090100002ec01201881c5a0068801201c|@4525,131071|100,5,@4521 4632:S41|434f44455452454528292e707265436f6465283229636f7079436f6465283429696e73657274283129 4633:S32|434f44455452454528292e707265436f6465283229636f7079436f6465283429 4634:S21|434f44455452454528292e707265436f6465283229 4635:O3|@4639,@4641,@4638 4636:C2,1224|9e13e002f606201880a1001b8bd02018c40220008088a001228000230100000080a0bfdd268000200100000080a0a02d3480001d010000002f3f024dae05e03aba00a021fa05c01d81c5c01d01000000000002be000000520000006a00000182000000820000008e000000760000005e0000005200000052000000520000009a0000045e0000032e00000052000002b2000000520000005200000112000002420000046a9010200181c3e006010000009010200581c3e006010000009010200581c3e006010000009010200581c3e006010000009010200581c3e00601000000d002200810bfffc9f6062018de213ffcda213ff8fa022008fa213ff4fa02200cfa213ff0d00220047fffffbe88013ff080a220012280001190102001d0012004da0120087fffffb89e13e00280a220012280000790102001d0012000da012008de01200c10bfffb088012010de01200c81c3e00688012010de01200c81c3e00688012010de213ffcda213ff8c402200488013ff880a0a00132800006fa00a00490102005ee01200481c5e00688012008fa213ffcd000a000da0120007fffff9988013ffc80a220012280000890102001c401200088012004f606201880a1001b8bd0201830bfffecee01200881c5e0068801200cde213ffcda213ff8fa022008fa213ff4fa02200cfa213ff0d00220047fffff8488013ff080a220012280002390102001de01200080a3e00132800005fa03e004821020051080001280a06001fa213ffcd003e000da0120087fffff7588013ffc80a220012280000882102001de01200088012004f606201880a1001b8bd0201830bfffed8801200480a060012280000790102001d0012004da012008de01200c10bfff6488012010da01200c81c3600688012010de01200c81c3e00688012010de213ffcda213ff8c202200488013ff880a0600132800006fa00600490102005da01200481c3600688012008fa213ffcd0006000da0120007fffff4d88013ffc80a220012280000890102001c201200088012004f606201880a1001b8bd0201830bfffecda01200881c360068801200cd002200410bfff40f6062018de213ffcda213ff8c202200488013ff880a0600132800006fa00600490102005da01200481c3600688012008fa213ffcd0006000da0120007fffff2e88013ffc80a220012280000890102001c201200088012004f606201880a1001b8bd0201830bfffecda01200881c360068801200cc2022008c400600080a0bff53280004790102001ee006004808de0012280000bac100017de213ffcea022004113f002990022374f40620209fc6a00088013ffcac102001ac100017de213ffcda213ff8fa022004fa213ff4ee213ff092100016901021991b0000879a036098f40360009fc6a00088013ff080a220012280002890102001ec012008d2012004d0012000da05a004f40360009fc6a0000100000080a220012280001b90102001ea01200480a5600132800006fa05600490102005e801200c81c5200688012010fa213ffcd0056000da0120087ffffeea88013ffc80a220012280000890102001ea01200088012004f606201880a1001b8bd0201830bfffece801201081c5200688012014ea01200c81c5600688012010ec01200c81c5a0068801201081c3e006010000009010200581c3e00601000000d002200410bffed2f6062018|@4637,131071|56,4,$4636+82 940,4,@545 996,4,I150 4637:S28|434f44455452454528292e7369646545666665637446726565283129 4638:O2|I15,@4645 4639:C2,484|9e13e002de213ffcda213ff8d0213ff4d2213ff0c4036008ae10200188013ff080a0a0013280000580a5e001ac1000171080001280a5a00122800005ea012004aa10200510800008ae100015de00a00080a5400f32800003aa102001aa102005ae100015c400a004f606201880a1001b8bd0201830bfffeb22800006ea01200890102005ea01200c81c5600688012010de0560049a10200180a3e0013280000580a360019810000d1080001280a3200122800005d601200496102005108000089a10000bd203e00080a2c0093280000396102001961020059a10000bde03e004f606201880a1001b8bd0201830bfffeb2280003a90102001d6012000808ae0013280003390102001d202e004808a60013280002c90102001d0026000c402200080a0bff53280002490102001ee02600480a5e0013280001d90102001ec022004808da00132800006808da00190102005ea01200c81c56006880120102280000501000000aa1000161080000980a56001113f002990022348f40620209fc6a00001000000aa10200180a5600132800003a8102001a8102005901d2004e801200c81c5200688012010ec01200c81c5a00688012010ee01200c81c5e00688012010c401200c81c0a00688012010d201200c81c2600688012010d601200c81c2e00688012010|@4640,127163|368,4,@542 4640:S35|434f44455452454528292e736964654566666563744672656552545343616c6c283229 4641:O2|I109,@4642 4642:O2|I110,@4643 4643:O2|I241,@4644 4644:O2|I246,0 4645:O2|I17,@4646 4646:O2|I24,@4647 4647:O2|I25,@4648 4648:O2|I26,@4649 4649:O2|I27,@4650 4650:O2|I28,@4651 4651:O2|I29,@4652 4652:O2|I105,@4653 4653:O2|I106,@4654 4654:O2|I107,@4655 4655:O2|I108,@4656 4656:O2|I111,@4657 4657:O2|I112,@4658 4658:O2|I113,@4659 4659:O2|I114,@4660 4660:O2|I115,@4661 4661:O2|I117,@4662 4662:O2|I118,@4663 4663:O2|I119,@4664 4664:O2|I120,@4665 4665:O2|I121,@4666 4666:O2|I122,@4667 4667:O2|I123,@4668 4668:O2|I125,@4669 4669:O2|I126,@4670 4670:O2|I127,@4671 4671:O2|I128,@4672 4672:O2|I130,@4673 4673:O2|I136,@4674 4674:O2|I137,@4675 4675:O2|I138,@4676 4676:O2|I139,@4677 4677:O2|I140,@4678 4678:O2|I141,@4679 4679:O2|I189,@4680 4680:O2|I196,@4681 4681:O2|I213,@4682 4682:O2|I214,@4683 4683:O2|I216,@4684 4684:O2|I217,@4685 4685:O2|I218,@4686 4686:O2|I223,@4687 4687:O2|I229,@4688 4688:O2|I230,@4689 4689:O2|I231,@4690 4690:O2|I232,@4691 4691:O2|I233,@4692 4692:O2|I234,@4693 4693:O2|I238,@4694 4694:O2|I239,@4695 4695:O2|I240,@4696 4696:O2|I242,@4697 4697:O2|I243,@4698 4698:O2|I244,@4699 4699:O2|I245,@4700 4700:O2|I247,@4701 4701:O2|I248,@4702 4702:O2|I249,@4703 4703:O2|I250,@4704 4704:O2|I251,@4705 4705:O2|I252,@4706 4706:O2|I253,@4707 4707:O2|I152,0 4708:O2|@5029,@4513 4709:C2,64|9e13e002f606201880a1001b8bd02018da213ffcd2213ff8d4213ff4d6213ff0de213fecd20120089a013ffc4000000c88013fecc401200081c0a00688012034|@5028,131071|44,5,@4710 4710:C2,14008|9e13e002f6062018ba21208080a7401b8bd02018c40220008088a001228000250100000080a0bfd5268000220100000080a0a02d3480001f010000002f3f024fae05e30aba00a029fa05c01d81c5c01d01000000000034fa00001b1e0000005a000019ee00000da20000317e00000d3a0000005a000016260000013e00001652000000a20000005a00001b8a000032420000014e0000365600002e86000031520000007600002bea00002c120000326ede213ffc113f0237900221e8f40620209fc6a00088013ffc901020019a1000088c21a00c8b19600cba10200290100006fa21bffcda22200492102001d222200081c3e00601000000de213ffcda213ff8fa022008fa213ff492102001d00220047fffffbc88013ff440000d6f01000000d0213ffc92102001d0012000da0120047fffffb488013ffc40000d67010000008c21a0108b196010ba102003ac100006fa21bffcd025a008ea012000ea25a004a8102001e825a0008c21a00c8b19600cba10200290100006fa21bffcec222004a6102001e6222000de01200c81c3e00688012010113f025d9002238481c3e00601000000de213ffcda213ff8d2213ff4fa022004fa213ff0fa02200cfa213fec92102001d00220087fffff8e88013fecea02200080a57ffd328000068c21a008e8022004ec05200c1080000ad0213ffc8b1960083b100000ba076001ac100006fa21bffca8102001e825a000d0213ffce601200cec213ff8de04e00888013ff880a3e00132800005da03e0008210200110800013c4012004d2036004d001200080a240083280000ade03e0048c21a0088b196008ba10200182100006fa21bffcda20600010800006c4012004f606201880a1001b8bd0201830bfffeaec00a00080a5bffd3280000601000000ea00a004ee05601010800005808860012f3f002bae05e25c8088600132800009ea05e000901000019a01201840000d8901000000ea01201881c560068801201c80a57fe5328002aa90102001e805e004d0213ffcd0213ff8fa052000fa213ff4fa052004fa213ff0fa052014fa213fec94102001921021019010202d1b0000829a036338f40360009fc6a00088013feca6102029e62220008c21a00c8b19600cba102002a4100006fa21bffcd024a004a2103ffde224a0008c21a0088b1960083b100000ba076001a0100006fa21bffce42420009e01200ce023e0008201200c9a102001da2060048c21a00c8b19600cba10200298100006fa21bffcd601200cd6232000d4012010d4232004d0213ffcd0213ff8d8213ff494102001921021019010202d1b0000829a036338f40360009fc6a00088013ff492102029d22220008c21a00c8b19600cba10200284100006fa21bffcd020a004ae103ffdee20a0008c21a0088b1960083b100000ba076001ac100006fa21bffcc425a000aa012004ec256000a8012004a6102001e62520048c21a00c8b19600cba102002a4100006fa21bffce2012004e224a000e0012008e024a004d0213ffcd0213ff8e4213ff494102001921021019010202d1b0000829a036338f40360009fc6a00088013ff49e102029de2220008c21a00c8b19600cba10200282100006fa21bffcd02060049a103ffdda2060008c21a0088b1960083b100000ba07600198100006fa21bffcc223200096012004d822e0009401200492102001d222a0048c21a00c8b19600cba10200290100006fa21bffcc4012004c4222000ee012008ee222004d0213ffcac102001ea01203888013ffc80a5600132800005b825a001a81000161080000ab8252001b9172004a6072001ea056004ac100013f606201880a1001b8bd0201830bffff3ba102000b91f401ca6072001e8213ffcd201203c901000139a01204840000ff088013ffcd0213ffcd201201cd0012018400012c088013ffc8c21a0108b196010ba102003a4100006fa21bffc233f0264a2046064e224a000e0012008e024a008de012018de24a004c201204c8c21a0148b196014ba1020049a100006fa21bffc193f0264980321d0d8236000e023600cd600601cd6236008d4007ffcd4236004921000088c21a00c8b19600cba10200290100006fa21bffc84102001c4222004ee012024ee222000d2213ffce4213ff8da213ff47fffdf4288013ff480a22001228000048c21a00c10800011ea0120588b19600cba10200290100006fa21bffcac102005ec222004ea012030ea2220007fffdf330100000080a2200132800004ea012058108000578c21a0088c21a0188b196018ba102005a8100006fa21bffc273f0264a604e324e6252000e4012048e4252010e2012008e225200ce0012024e0252008de05601cde2520048c21a00c8b19600cba10200282100006fa21bffc1b3f02659a0361f4da206000d8012000d82060048c21a00c8b19600cba10200296100006fa21bffc153f02659402a280d422e000e822e0048c21a00c8b19600cba10200292100006fa21bffc113f026590022310d0226000c4012004c42260048c21a00c8b19600cba102002ae100006fa21bffc2d3f0265ac05a394ec25e000e8012014e825e004e605601480a4e00122800003e201204ca2102005ee213ffcde213ff8e0056018e0213ff4e2213ff0da056010da213fecd8012054d8213fe8d4056008d4213fe4d0056004d0213fe08410000b961000099410000292100001d0012038da056000f40360009fc6a00088013fe0ac100008108000dfec213ffc8b1960083b100000ba076001a8100006fa21bffca6102001e62520008c21a0088b1960083b100000ba076001a4100006fa21bffca2102001e224a000d0213ffcd0213ff8e8213ff4e4213ff094102001921021019010202d1b0000829a036338f40360009fc6a00088013ff0a0102029e02220008c21a00c8b19600cba1020029e100006fa21bffcd023e00482103ffdc223e0008c21a0088b1960083b100000ba0760019a100006fa21bffcde23600098012008da2320009601200894102001d422e0048c21a00c8b19600cba10200292100006fa21bffcd0012008d0226000c401200cc4226004ee012068ec05e018ea05a000e8012020b8252001ba256001b917401ca6072001e625a0008c21a0208b196020ba102007a4100006fa21bffc233f0266a204603ce224a000e0012018e024a018de05e01cde24a014d224a010c2012004c224a00cda012000da24a008e824a004d2213ffce4213ff8ea213ff4901020019a01206c4000155288013ff4d801200cd603200080a2e0012280005fd4012010d4012074d202a018c4026000b820a001b9172004ae072001ee2260008c21a0188b196018ba102005ac100006fa21bffcaa102001ea25a010a8102001e825a00ca6102005e625a008c425a004a4103fede425a000821000089810000296100016d201202c901020059a01207840001bf6010000008c21a0148b196014ba10200494100006fa21bffc92102001d222a00cd622a008d022a00490102011d022a0009010000140000b3f010000008c21a0148b196014ba10200484100006fa21bffcae102001ee20a00cd020a008d820a004ac103ff1ec20a0008c21a00c8b19600cba102002aa100006fa21bffca8102001e8256004c42560008c21a0088b1960083b100000ba076001a6100006fa21bffca4102001e424e00080a560013280000c8c21a0108c21a00c8b19600cba102002ac100006fa21bffcd425a004a2102001e225a0001080002a8801201c8b196010ba102003ac100006fa21bffcd425a008ea25a004a2102005e225a000108000208801201cd202a00080a260012280001bac10000840000b070100000082100008d201202c901020019a01207840001baa010000008c21a0108b196010ba1020039a100006fa21bffcd0236008c223600498103ffdd82360008c21a00c8b19600cba102002ac100006fa21bffcda25a00496102001d625a0008801201cec213ffcd2012040d001203c7fffdd8888013ffcd2012024d00120207fffdd8401000000d0012000ee02200080a5fffd3280000680a5e005ec022004c405a0081080000680a5fffd32800003c4022004c402200880a5fffd3280000601000000ea022004ec0560101080000580a5fffd2d3f002bac05a25c80a5fffd3280000601000000e8022004ea05200410800005e801204c2b3f026eaa05625ce801204ce405200080a4bffd3280000680a4a005e2052004e60460001080000680a5fffd32800003a6102001e605200480a5fffd3280000680a5e005e0022004e20420001080000680a4600132800003a2102001e202200480a4600132800005e2213ffce00120101080000980a42001d00120109a01206040001bee88013ffca01000088801200480a4200132800005e0213ffc9e10001310800009c2012000901000139a01206040001c0588013ffc9e10000888012004c2012000d800600080a33ffd328000068c21a008d6006004da02e00c1080000a8c21a0188b1960083b100000ba0760019a100006fa21bffc96102001d62360008c21a0188b196018ba10200594100006fa21bffcec22a010da22a00cc422a008ea22a004de22a000d205a00080a27ff93280001b8c21a00c80a3e0013280000d8c21a0108c21a00c8b19600cba10200290100006fa21bffcc422200484102001c4222000ee01206081c5e006880120648b196010ba10200390100006fa21bffcc4222008de22200484102005c4222000ee01206081c5e006880120648b19600cba10200290100006fa21bffcd422200484103ffdc4222000ee01206081c5e006880120649a01201840000ad801000000e801201881c520068801201c8c21a0148b196014ba102004ac100006fa21bffcea022010ea25a00ce802200ce825a008e6022008e625a004e4022004e425a0008c21a0108b196010ba10200390100006fa21bffce8222008e203601ce2222004ec222000da037ff8f403600081c6a00401000000ec022004ea03601cb8256001b9172004a8072001d0213ffcd0213ff8de213ff4da213ff0d0213fecfa05a000fa213fe8fa05a004fa213fe4fa05a010fa213fe0fa05a014fa213fdce8213fd894102001921021019010202d1b0000829a036338f40360009fc6a00088013fd8a6102029e62220008c21a00c8b19600cba102002a4100006fa21bffcd024a004a2103ffde224a0008c21a0088b1960083b100000ba076001a0100006fa21bffce42420009e012020e023e000820120209a102001da2060048c21a00c8b19600cba10200298100006fa21bffcd6012020d6232000d4012024d4232004d0213ffcd0213ff8d8213ff494102001921021019010202d1b0000829a036338f40360009fc6a00088013ff492102029d22220008c21a00c8b19600cba10200284100006fa21bffcd020a004ae103ffdee20a0008c21a0088b1960083b100000ba076001ac100006fa21bffcc425a000aa012004ec256000a8012004a6102001e62520048c21a00c8b19600cba102002a4100006fa21bffce2012004e224a000e0012008e024a004de0120248c21a0148b196014ba10200482100006fa21bffc1b3f026e9a0363b8da206000d803fff8d820600cd6012000d6206008d401200cd42060048c21a0148b196014ba10200492100006fa21bffc113f026f90022178d0226000c403fffcc422600ce4226008d42260048c21a0108b196010ba102003ae100006fa21bffc2d3f026fac05a380ec25e000e425e008d625e0048c21a00c8b19600cba102002aa100006fa21bffc293f0270a80520e4e8256000d22560048c21a00c8b19600cba102002a6100006fa21bffc1b3f02709a03616cda24e000c224e0048c21a00c8b19600cba10200296100006fa21bffc133f0270920261f4d222e000ee22e0048c21a00c8b19600cba10200290100006fa21bffc2f3f0270ae05e270ee222000e42220048c21a0088b1960083b100000ba076001ac100006fa21bffca8102005e825a000d0213ffcd4213ff8ec213ff4a4102001e4213ff0c203e010c2213fec9a102001da213fe8d203e008d2213fe4d003e004d0213fe09410001392100015d001201cda03e000f40360009fc6a00088013fe08c21a0088b1960083b100000ba07600184100006fa21bffcae102001ee20a000ec0120248c21a0108b196010ba102003aa100006fa21bffc293f0270a8052310e8256000e605a01ce6256008c42560048c21a0108b196010ba102003a4100006fa21bffc233f0271a2046130e224a000e005bffce024a008ea24a004821000024000094e010000008c21a00c8b19600cba1020029a100006fa21bffc193f027198032334d8236000e4236004d6012024d402e000c2213ffcd202a004d401200c841000099210000d9a100002f40360009fc6a00088013ffcd0213ffcd0213ff8ee01201480a5e0051280003c88013ff88c21a0248b196024ba102008ac100006fa21bffcaa102001ea25a01ca8102001e825a018a6102005e625a014e4012020e425a010a2102001e225a00ce0012018e025a008de012024de25a004d025a0008c21a00c8b19600cba10200282100006fa21bffcec2060049a103fe5da2060008c21a0088b1960083b100000ba07600198100006fa21bffc96102001d6232000d40120308c21a0188b196018ba10200592100006fa21bffcc2226010d822600c113f002f9002208cd0226008c402bffcc4226004ae102001ee226000ac012000aa103ffdea25a000a8012000d2252004108000cf8c21a00c80a5e00132800046ac100008ec012008ea05a0008c21a0248b196024ba102008a8100006fa21bffca6102001e625201ca4102001e4252018a2102001e2252014e0012020e0252010ea25200cde012018de252008c2012024c2252004d02520008c21a00c8b19600cba1020029a100006fa21bffce823600498103fe5d82360008c21a0088b1960083b100000ba07600196100006fa21bffc94102001d422e000d20120308c21a0188b196018ba10200590100006fa21bffcc401202cc4222010d622200cda222008ee027ff8ee222004ac102001ec222000ea00a00080a57ff932800009a8012000a8012000a6102001e6252000a4012000da24a0041080008e8c21a00ca6103ffde6252000a4012000d024a004108000888c21a00c8c21a00c8b19600cba10200290100006fa21bffcaa103ffdea222004ee222000ec213ffc7fffdbb688013ffc80a2200122800012d0213ffce8012034fa052004fa213ffcd00120001b3f02719a0363bc40001d3088013ffce6012000b824e001ba222001811f401c36800006e401202410800004a4103ff988013ffce4012024e8012010e60520008c21a0248b196024ba102008a2100006fa21bffca0102001e024601c9e102001de246018e4246014c2012028c2246010e624600cda012020da246008d801202cd8246004d6012004d62460008c21a00c8b19600cba10200294100006fa21bffce222a00492103fe5d222a000d005200080a220013280000c8410000aee012038e4213ffc9010000ada05e010f40360009fc6a00088013ffc84100008108000058c21a024e4213ffc88013ffc8c21a0248b196024ba102008ae100006fa21bffcac102001ec25e01caa102001ea25e018e8012000e825e014e601202ce625e010a4102001e425e00ce2012024e225e008e0012030e025e004de012008de25e0008c21a00c8b19600cba10200282100006fa21bffcee2060049a103fe5da2060008c21a0088b1960083b100000ba07600198100006fa21bffc96102001d6232000d401203c8c21a0188b196018ba10200592100006fa21bffcc2226010d822600cc4226008d002bffcd022600484102001c4226000ae01200cac103ffdec25e000aa01200cd22560048801200c8c21a00c8b19600cba102002a8100006fa21bffce6012000e6252000e4012004e4252004e8213ffcd201203cd00120387fffdabe88013ffcd2012018d00120147fffdaba01000000d0012000e201203881c4600688012044ac1000088c21a00c8b19600cba10200290100006fa21bffcec222004aa102001ea22200081c3e006010000008c21a0088b1960083b100000ba076001ac100006fa21bffcaa102001ea25a0008c21a0088b1960083b100000ba076001a8100006fa21bffca6102001e62520008c21a00c8b19600cba102002a4100006fa21bffca2102001e224a004e0022004e024a00080a4a00132800005e4213ffcc20220081080000dd40220089810000f9610000dd40220089010000a9a013ffc40001fb488013ffc821000089a10000b9e10000c880120048c21a00c8b19600cba10200298100006fa21bffcc223200496102025d62320008c21a0088b196008ba10200190100006fa21bffce82220008c21a00c8b19600cba10200284100006fa21bffc2f3f0275ae05e148ee20a000ec20a0048c21a00c8b19600cba102002aa100006fa21bffce8256004c42560008c21a00c8b19600cba102002a6100006fa21bffce4036008e424e004ea24e000de213ffcda213ff8d2213ff4e0213ff0d4213fecec213fe8e8213fe4e2036020e2213fe0c203601cc2213fdcd6036018d6213fd8c4036014c4213fd4ee036010ee213fd0d0213fcce6213fc8ea036004ea213fc4d6037ff4d4037ff8d2037ffc9010000cda036000f40360009fc6a00088013fc4e8012004e605200080a4e00132800025d00120088c21a00c8b19600cba102002a4100006fa21bffca2102001e224a004e001200ce024a00080a4a00132800005e4213ffcde012008108000098c21a00cd00120089a01201840001f9588013ffc9e100008880120048c21a00c8b19600cba10200282100006fa21bffcde2060049a102025da206000d201201090100001da012014de01201810bff9c48801201c9a01201840001fa501000000e40120148c21a0088b196008ba102001a2100006fa21bffce0012000e02460008c21a00c8b19600cba1020029e100006fa21bffc033f0276820060c4c223e000da012004da23e0048c21a00c8b19600cba10200298100006fa21bffce0232004de2320008c21a00c8b19600cba10200296100006fa21bffcd404a008d422e004d822e000d0213ffcd204a020d2213ff8c404a01cc4213ff4ee04a018ee213ff0ec04a014ec213fecea04a010ea213fe8e2213fe4d6213fe0e804a004e8213fdcd604bff4d404bff8d204bffcd001200cda04a000f40360009fc6a00088013fdc4000073b010000008c21a0108b196010ba102003a6100006fa21bffce4012000e424e008d024e004a2103ffde224e0008c21a00c8b19600cba10200290100006fa21bffce6222004a0102001e0222000de01201c81c3e00688012020808a600132800045de213ffcec036008808da0013280003ade213ffcea05a000e8026000e605600480a500132280000ada213ffcde213ffc113f0276900220fcf40620209fc6a00088013ffc90102001da213ffcde213ff8fa056000fa213ff4d00220049a013ffc40001ff488013ff4e4012008a21000088c21a0108b196010ba10200390100006fa21bffce004a01ce02220089e102005de222004e2222000da012000f40360009fc6a000010000008c21a00c8b19600cba10200282100006fa21bffcd02060049a103fe1da2060008c21a00c8b19600cba10200290100006fa21bffcc222200498102001d8222000d601200481c2e0068801200c113f0276900221e0f40620209fc6a00088013ffc90102001de213ffc113f0276900221e0f40620209fc6a00088013ffc90102001de213ffcda213ff892102001d00220047ffff91f88013ff8400006d2010000008c21a00c8b19600cba102002ac100006fa21bffcd025a004aa103fd9ea25a0008c21a00c8b19600cba10200290100006fa21bffcec222004a8102001e8222000e601200481c4e00688012008de213ffcda213ff8d2213ff4fa022008fa213ff0fa02200cfa213fec92102001d00220047ffff8ff88013fec400006b201000000ec02200080a5bff53280001ad0213ffcea02200480a5600132800011d2012008e8012000e605200080a4fff932800007d2012008113f027690022218e401201081c4a0068801201490100014da01200cde01201010bff8e788012014d0012004da01200cde01201010bff8e288012014d2012008d0012004da01200c7ffff8dc88013ffcd0213ffcd201200cd0012004da0120107ffff8d688013ffcd0213ffcea012000e605600080a4fffd1280000688013ffce4056004e804a0081080000780a4fffd80a4e00532800003e8056004e805600880a4fffd3280000680a4e005e2056004e404600010800006e002200032800003a4102001e4056004e002200080a43ffd3280000680a42005de022004e203e0081080000680a43ffd32800003e2022004e202200880a43ffd3280000680a42005c2022004de00600010800006c2052000328000039e102001de022004c205200080a07ff5328000ed80a0602980a4a001328000ce90100015da04600080a37ff5328000ae9010001580a3e0013280008f90100015d8052004d604600480a3000b3280003dd0213ffcd4012018d202a000e8213ffcd0012008da026008f40360009fc6a00088013ffc80a22001228000068c21a00cd0012008c401202081c0a006880120248b19600cba10200290100006fa21bffc84102001c4222004ee01200cee2220008c21a0088b1960083b100000ba076001ac100006fa21bffcaa102001ea25a00080a220013280000ea81000088c21a00c8b19600cba10200290100006fa21bffce8012000e8222004a6102001e6222000e401202081c4a006880120248c21a0108b196010ba10200390100006fa21bffce6012000e6222008e8222004a4102005e4222000e201202081c4600688012024d0213ff880a320051280000d88013ff880a2e0013280000b80a320019401200092102001d222a00084012000ee012010ee20a004108000358c21a00c80a32001328000228c21a01480a2e0053280001f8c21a0148c21a00c8b19600cba10200294100006fa21bffc92102001d222a004c4012010c422a0008c21a0148b196014ba102004ae100006fa21bffcac102005ec25e00c253f0031a404a250e425e008d425e0049e102011de25e0009401200092102001d222a00084012000ee20a004108000128c21a00c8b196014ba10200494100006fa21bffce222a00ce822a008d2012010d222a00484102009c422a000ae012000ac102001ec25e000a4012000d424a0048c21a00c8b19600cba10200290100006fa21bffce0012000e0222000de012004de222004d401202481c2a00688012028400005c10100000098100008d0012000400005bd010000008c21a0148b196014ba10200496100006fa21bffcd022e00cd822e008d4012008d422e00492102009d222e0008c21a00c8b19600cba10200290100006fa21bffcd622200484102001c4222000ee01201c81c5e00688012020400005a50100000098100008d0012000400005a1010000008c21a0148b196014ba10200496100006fa21bffcd022e00cd822e008d4012008d422e00492102009d222e0008c21a00c8b19600cba10200290100006fa21bffcd622200484102001c4222000ee01201c81c5e00688012020400005890100000098100008d001200040000585010000008c21a0148b196014ba10200496100006fa21bffcd022e00cd822e008d4012008d422e00492102009d222e0008c21a00c8b19600cba10200290100006fa21bffcd622200484102001c4222000ee01201c81c5e006880120203280013b80a0602dda04600080a360293280006c80a3602dfa052004fa213ffcfa046004fa213ff898102001d6013ffc88013ff880a2e00132800005b82320019410000c1080000ad4213ffcb917200492072001d602e00498100009f606201880a1001b8bd0201830bffff392102001d001200088013ffc80a2200132800005b8226001841000091080000aee012000b9172004ae072001d002200492100017f606201880a1001b8bd0201830bffff3b820a001ba25e001811f401c32800025d0012010ac102001ea01200880a5600132800005b825a001a81000161080000ae6012024b9172004a6072001ea056004ac100013f606201880a1001b8bd0201830bffff3e404e018e204a000b8246001b9172004a0072001e024a000de012004de213ffce8213ff8d60120089410200192102001901000119a01202840001e4888013ff8c201202881c060068801202c4000051901000000a4100008d001200c40000515010000008c21a0148b196014ba102004a2100006fa21bffcd024600ce4246008e0012014e02460049e102009de2460008c21a00c8b19600cba10200290100006fa21bffce222200482102001c2222000da01202881c360068801202c328000af90100015d8046004d603200080a2ffed3280008e90100015d403200880a2a0053280006e90100015d203200c80a260013280004e90100015fa052004fa213ffcfa046008fa213ff8fa032004fa213ff484102001ee013ffc88013ff480a5e00132800005b820a001ac1000021080000aea012004b9172004aa072001ee05e00484100015f606201880a1001b8bd0201830bffff3b825a001ba256001811f401c32800016d00120108c21a0088b196008ba102001a8100006fa21bffce6012000e6252000a4102001e4213ffcea213ff8d60120089410001492102001901000139a01202840001ded88013ff8e201202881c460068801202c400004be01000000a4100008d001200c400004ba010000008c21a0148b196014ba102004a2100006fa21bffcd024600ce4246008e0012014e02460049e102009de2460008c21a00c8b19600cba10200290100006fa21bffce222200482102001c2222000da01202881c360068801202c400004a201000000a4100008d00120004000049e010000008c21a0148b196014ba102004a0100006fa21bffcd024200ce4242008de012008de24200482102009c22420008c21a00c8b19600cba10200290100006fa21bffce02220049a102001da222000c401201c81c0a00688012020400004860100000092100008d001200040000482010000008c21a0148b196014ba10200484100006fa21bffcd020a00cd220a008ee012008ee20a004ac102009ec20a0008c21a00c8b19600cba10200290100006fa21bffcc4222004aa102001ea222000e801201c81c52006880120204000046a0100000094100008d001200040000466010000008c21a0148b196014ba10200492100006fa21bffcd022600cd4226008d0012008d022600484102009c42260008c21a00c8b19600cba10200290100006fa21bffcd2222004ae102001ee222000ec01201c81c5a006880120204000044e0100000098100008d00120004000044a010000008c21a0148b196014ba10200496100006fa21bffcd022e00cd822e008d4012008d422e00492102009d222e0008c21a00c8b19600cba10200290100006fa21bffcd622200484102001c4222000ee01201c81c5e006880120203280017190100015da052004d803600080a33fed3280015090100015d603600880a2e0053280013090100015d403600c80a2a0013280011090100015d204600080a260293280004e80a2602dfa052008fa213ffcfa036004fa213ff8fa046004fa213ff484102001ee013ff488013ff480a5e00132800005b820a001ac1000021080000aea012008b9172004aa072001ee05e00484100015f606201880a1001b8bd0201830bffff3b825a001ba256001811f401c32800016d00120108c21a0088b196008ba102001a8100006fa21bffce6012004e6252000e4012000e4213ffcea213ff8961020019410200192100014901000139a01202840001d1e88013ff8e201202881c460068801202c400003ef01000000a4100008d001200c400003eb010000008c21a0148b196014ba102004a2100006fa21bffcd024600ce4246008e0012014e02460049e102009de2460008c21a00c8b19600cba10200290100006fa21bffce222200482102001c2222000da01202881c360068801202c328000a290100015c4046004ee00a00080a5ffed3280008190100015ec00a00880a5a0053280006190100015e400a00c80a4a0013280004190100015de052008ea046008b8256001ba23e001811f401c3280001ed00120048c21a0088b196008ba102001a6100006fa21bffce0036004e024e0008c21a0088b196008ba10200190100006fa21bffcc200a004c22220009e102001de213ffcde052008de213ff8961020019410000892100013901000019a01201c40001cd088013ff8c201201c81c0600688012020400003a101000000a4100008d00120004000039d010000008c21a0148b196014ba102004a0100006fa21bffcd024200ce4242008de012008de24200482102009c22420008c21a00c8b19600cba10200290100006fa21bffce02220049a102001da222000d801201c81c32006880120204000038501000000a0100008d001200040000381010000008c21a0148b196014ba1020049e100006fa21bffcd023e00ce023e008c2012008c223e0049a102009da23e0008c21a00c8b19600cba10200290100006fa21bffcde22200498102001d8222000d601201c81c2e006880120204000036901000000a4100008d001200040000365010000008c21a0148b196014ba102004a0100006fa21bffcd024200ce4242008de012008de24200482102009c22420008c21a00c8b19600cba10200290100006fa21bffce02220049a102001da222000d801201c81c32006880120204000034d01000000a4100008d001200040000349010000008c21a0148b196014ba102004a0100006fa21bffcd024200ce4242008de012008de24200482102009c22420008c21a00c8b19600cba10200290100006fa21bffce02220049a102001da222000d801201c81c32006880120204000033101000000a4100008d00120004000032d010000008c21a0148b196014ba102004a0100006fa21bffcd024200ce4242008de012008de24200482102009c22420008c21a00c8b19600cba10200290100006fa21bffce02220049a102001da222000d801201c81c3200688012020400003150100000092100008d001200040000311010000008c21a0148b196014ba10200484100006fa21bffcd020a00cd220a008ee012008ee20a004ac102009ec20a0008c21a00c8b19600cba10200290100006fa21bffcc4222004aa102001ea222000e801201c81c5200688012020400002f90100000094100008d0012000400002f5010000008c21a0148b196014ba10200492100006fa21bffcd022600cd4226008d0012008d022600484102009c42260008c21a00c8b19600cba10200290100006fa21bffcd2222004ae102001ee222000ec01201c81c5a00688012020400002dd0100000096100008d0012000400002d9010000008c21a0148b196014ba10200494100006fa21bffcd022a00cd622a008d2012008d222a00490102009d022a0008c21a00c8b19600cba10200290100006fa21bffcd422200484102001c4222000ee01201c81c5e00688012020400002c10100000098100008d0012000400002bd010000008c21a0148b196014ba10200496100006fa21bffcd022e00cd822e008d4012008d422e00492102009d222e0008c21a00c8b19600cba10200290100006fa21bffcd622200484102001c4222000ee01201c81c5e00688012020da213ffcd2213ff8de213ff4d00220049a013ffc40001f9188013ff4ec01200081c5a0068801200cd0213ffcd0213ff8de213ff4da213ff0fa022004fa213fec94102001921021019010202d1b0000829a036338f40360009fc6a00088013fecac102029ec2220008c21a00c8b19600cba102002aa100006fa21bffcd0256004a8103ffde82560008c21a0088b1960083b100000ba076001a6100006fa21bffcea24e000a401200ce624a000a201200ca0102001e02460048c21a00c8b19600cba1020029e100006fa21bffcc201200cc223e000da012010da23e0048c21a0088b1960083b100000ba07600198100006fa21bffc96102005d6232000d8213ffcde213ff8d0213ff4d0213ff0d0213fec94013fecd2012000901020059a0120104000287d88013fec8c21a00c8b19600cba10200294100006fa21bffcd2012004d222a00490102029d022a000c4012010ee00a00080a5e0012280000dac10000a9010000a7fff0b3b010000008c21a00c8b19600cba102002ac100006fa21bffcd025a004aa103ff5ea25a0008c21a00c8b19600cba102002aa100006fa21bffce8012008e8256004a6102029e6256000ec213ffcea213ff8d2012024d00120204000089888013ff8e40120208c21a0108b196010ba102003a2100006fa21bffc213f000fa00422ace0246000d0246008de04a01cde2460048c21a0088b1960083b100000ba07600182100006fa21bffc9a102001da2060008c21a00c8b19600cba10200298100006fa21bffc173f000f9602e204d6232000e22320048c21a0188b196018ba10200594100006fa21bffcd2012000d222a010c222a00cd0012004d022a008d822a004c4012008c422a0008c21a00c8b19600cba10200290100006fa21bffcd4222004ae103ffdee222000ec01202481c5a00688012030de213ffcda213ff8fa022008fa213ff492102001d00220047ffff44388013ff4ea02200080a57ffd3280000601000000e8022004ec0520101080000580a57ffd2d3f002bac05a25c80a57ffd3280000680a56005e6022004e804e00810800006d0213ffc32800003e8022004e8022008d0213ffce605a00080a4e0291280000988013ffc901000169a01200c400028ff01000000e401200c81c4a00688012010e405200080a4bff532800035e002200092100014d00120047fff08f301000000e2012000de04600080a3fffd3280000680a3e005c2046004e0006000108000068c21a00832800003a0102001e00460048c21a0088b1960083b100000ba07600182100006fa21bffc9a102001da20600080a420013280000e98100008981000088c21a00c8b19600cba10200290100006fa21bffcd822200496102001d6222000d401200c81c2a006880120108c21a0108b196010ba10200390100006fa21bffcd8222008e022200496102005d6222000d401200c81c2a0068801201080a43ffd3280000680a42005de022004e203e00810800006c204600032800003e2022004e2022008c204600080a060153280000980a07ff592100011d00120047fff08b2010000009e10000810800015d6012000328000098c21a01092100011d00120047fff08a9010000009e1000081080000cd60120008b196010ba1020039e100006fa21bffcda012004da23e008e223e00498102019d823e000d6012000d202e00080a27ffd3280000680a26005d002e004d4022000108000068c21a0083280000394102001d402e0048c21a0088b1960083b100000ba07600190100006fa21bffc84102001c422200080a2a0013280000d8c21a0108c21a00c8b19600cba10200290100006fa21bffcde222004ae102001ee222000ec01200c81c5a006880120108b196010ba10200390100006fa21bffcde222008d4222004ae102005ee222000ec01200c81c5a00688012010ac1000088c21a00c8b19600cba10200290100006fa21bffcec222004aa102001ea22200081c3e00601000000de213ffcda213ff8d2213ff4fa022008fa213ff0fa02200cfa213fec92102001d00220047ffff38288013fec4000013501000000d0213ffcd00120009a0120104000296e88013ffcd0213ffcd201200cd0012008da0120107ffff37588013ffc40000128010000008c21a0148b196014ba102004ac100006fa21bffcea012000ea25a00cd025a008e8012004e825a004a6103fe9e625a0008c21a00c8b19600cba10200290100006fa21bffcec222004a4102001e4222000e201201881c460068801201cac1000088c21a00c8b19600cba10200290100006fa21bffcec222004aa102001ea22200081c3e00601000000de213ffcda213ff8fa022008fa213ff492102001d00220047ffff34988013ff4ea02200080a57ffd3280000680a56005e8022004ec05200810800006e605a00032800003ec022004ec022008e605a00080a4ffed32800005a4100008a810200110800009e4012004113f028590022330f40620209fc6a00001000000a8102001e4012004e204a018e0046000de012000b823e001ba242001b917401c82072001c22460008c21a0108b196010ba1020039a100006fa21bffc193f02859803236cd8236000e0236008d0236004d0213ffce0213ff89210000d9010000f40001cd588013ff88c21a00c8b19600cba10200296100006fa21bffc153f02869402a0dcd422e000d2012000d222e004d0213ffc9210000bd001200840001cc688013ffcc4012008ec00a00080a5bffd3280000680a5a005ea00a004ee056008108000068c21a01032800003ee00a004ee00a0088c21a0108b196010ba102003aa100006fa21bffce801200ce8256008ee256004a610202de62560008c21a00c8b19600cba102002a4100006fa21bffcd024a004a2102029e224a00080a5bffd3280000680a5a005de00a004e003e00010800006c201200032800003a0102001e000a004c201200080a0600132800005901000109e100010108000078c21a0089a0120144000298e010000009e1000088c21a0088b1960083b100000ba0760019a100006fa21bffc98102001d8236000d60120108c21a00c8b19600cba10200294100006fa21bffc133f02869202621cd222a000d002e01cd022a0048c21a0188b196018ba102005ae100006fa21bffce425e010da25e00cea25e008d425e004de25e0008c21a00c8b19600cba10200290100006fa21bffcee222004aa103ffdea222000e801201481c5200688012018ec022008ea05a00080a560093280000e80a56025de213ffcda213ff8d402200492100016d002200c40001b3688013ff892102001da012000de01200410bff29e880120083280000ede213ffcde213ffcda213ff8d402200492100016d002200c40001b2888013ff892102001da012000de01200410bff29088012008da213ff8fa022004fa213ff4ec213ff092102001d002200c7ffff28788013ff04000003a01000000d0213ffc92102001d0012000da0120087ffff27f88013ffc4000003201000000921020019a0120104000298201000000a810200180a22001328000058c21a00c901000141080000f010000008b19600cba102002a6100006fa21bffce824e004e4022000e424e000a8100013d0022004f606201880a1001b8bd0201830bfffee7fffd45601000000a61000088c21a00c8b19600cba10200290100006fa21bffce6222004a4102001e4222000e201201081c4600688012014d002200481c3e00601000000|@5027,131071|60,4,$4710+86 180,4,@4522 280,5,@4711 312,5,@4711 404,4,@4714 668,4,@581 696,5,@4715 776,4,I11 944,4,I11 1112,4,I11 1356,5,@4795 1376,5,@4811 1404,4,@4813 1456,4,@4815 1540,5,@4483 1600,5,@4483 1648,4,@4817 1712,4,@4823 1752,4,@4825 1788,4,@4827 1828,4,@4829 2056,4,I11 2256,4,@4831 2328,5,@4837 2464,5,@4873 2520,5,@4711 2744,5,@4711 2768,5,@4873 2860,5,@4481 2876,5,@4481 2960,4,@581 2996,4,@4875 3124,5,@4877 3172,5,@4878 3452,5,@4715 3664,4,I11 3832,4,I11 4000,4,@4879 4056,4,@4881 4104,4,@4883 4144,4,@4885 4180,4,@4887 4216,4,@4889 4252,4,@4891 4436,4,@4893 4480,4,@4897 4508,5,@4711 4536,4,@4899 4796,4,@660 5172,5,@4483 5208,4,@4901 5216,5,@4903 5716,5,@4481 5732,5,@4481 5944,5,@4916 6044,4,@4917 6324,5,@4919 6400,5,@4920 6460,4,@4925 6632,5,@4711 6780,4,@4926 6828,5,@4928 6976,4,@4929 7004,4,@4929 7052,5,@4711 7180,5,@4711 7240,4,@4931 7984,4,@817 8144,5,@4711 8160,5,@4711 8256,5,@4711 8272,5,@4711 8368,5,@4711 8384,5,@4711 8796,5,@4933 8816,5,@4711 8832,5,@4711 9160,5,@4933 9180,5,@4711 9196,5,@4711 9292,5,@4711 9308,5,@4711 9404,5,@4711 9420,5,@4711 9516,5,@4711 9532,5,@4711 9628,5,@4711 9644,5,@4711 9988,5,@4933 10008,5,@4711 10024,5,@4711 10300,5,@4933 10320,5,@4711 10336,5,@4711 10432,5,@4711 10448,5,@4711 10544,5,@4711 10560,5,@4711 10656,5,@4711 10672,5,@4711 10768,5,@4711 10784,5,@4711 10880,5,@4711 10896,5,@4711 10992,5,@4711 11008,5,@4711 11104,5,@4711 11120,5,@4711 11216,5,@4711 11232,5,@4711 11348,5,@4955 11404,4,I11 11616,5,@5001 11684,5,@3258 11776,5,@4811 11808,4,@394 11884,4,@391 12060,4,@581 12136,5,@5005 12180,5,@3251 12440,5,@3251 12476,5,@3251 12800,5,@4711 12820,5,@5014 12852,5,@4711 13100,4,@5015 13180,4,@5017 13216,5,@4948 13244,4,@5019 13276,5,@4948 13476,5,@5021 13544,4,@5022 13688,5,@4939 13744,5,@4939 13804,5,@4711 13836,5,@4711 13852,5,@5023 13940,5,@4488 4711:C2,292|9e13e002f606201880a1001b8bd02018ee02200080a5fffd3280000680a5e005ec022004c405a0001080000680a0a0013280000384102001c402200480a0a0013280001080a5fffd80a5fffd3280000680a5e005ec022004d005a00881c3e0060100000032800005d0022004d002200881c3e0060100000081c3e006010000003280000680a5e005ec022004ec05a008108000068c21a00c32800003ec022004ec0220088c21a00c8b19600cba102002aa100006fa21bffca8102001e8256004ec25600080a5600132800005ea213ffca61000021080000b8c21a00cac10000f901000029a013ffc4000001688013ffca61000089e100016880120048c21a00c8b19600cba10200290100006fa21bffce6222004aa102025ea22200081c3e00601000000|@4713,129185|232,5,@4712 4712:C2,112|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffcd003600081c3e00601000000da213ff8fa022000fa213ff4d00220047ffffff288013ff48c21a00c8b19600cba1020029e100006fa21bffcd023e004da012000da23e0009010000fde01200881c3e0068801200c|@1966,161| 4713:S40|434f44455452454528292e6f7074696d69736550726f632831322967657447656e6572616c283129 4714:O2|0,@581 4715:C2,1144|9e13e002f606201880a1001b8bd020188c21a0088b1960083b100000ba07600184100006fa21bffcae102005ee20a000c4213ffcda213ff8de213ff4d0213ff0d0037ff49a013ffc4000011388013ff0ec012008ea05bfece605600080a4fffd3280000680a4e005e4056004e804a00810800006e405bff032800003e8056004e8056008e405bff080a4a00122800005e205bffca210200510800004e001200ce2046014e001200cde04200080a3e001228000568210200180a4fffd3280000680a4e005d8056004da03200810800006d803600032800003da056004da056008d803600080a33ff5328000428210200180a460012280000580a4fffd8210200510800037d0213ffc3280000680a4e005d4056004d602a00810800006d402e00032800003d6056004d6056008d402e00080a2bff53280002382102001d202e004808a60012280000a84100009ae100008113f002990022374f40620209fc6a000010000008410200184100009d0213ffce8213ff8e2213ff4d2213ff092100002901021991b0000879a036098f40360009fc6a00088013ff080a220012280000e82102001d201200cd0012000400000f001000000821000081080000701000000d0213ffce8213ff8e2213ff4d0213ff088013ff01080001188012004e8213ff8e2213ff488013ff41080000d80a06001d0213ffce8213ff8e2213ff488013ff41080000780a06001d0213ffce8213ff8e2213ff488013ff480a0600122800018c201200cda012014d8037ffc8c21a0148b196014ba10200490100006fa21bffcd6012000d622200cd4012004d4222008d2012008d222200484102011c4222000da032010f40360009fc6a000010000008210000810800054d201201480886001328000448c21a014da006000d8012014d6033ff8808ae00132800021d4033ffcd4036004d202e00080a280093280001cd4033ffcd0033ffcc402201c8c21a0108b196010ba10200390100006fa21bffcc4222008ae102005ee222004ec012008ec222000da036000f40360009fc6a000010000008c21a00c8b19600cba10200282100006fa21bffcd0206004aa103fe1ea2060001080002cd20120148c21a0108b196010ba10200390100006fa21bffcd202a01cd222200884102001c4222004ee012008ee222000da036000f40360009fc6a000010000008c21a0148b196014ba10200482100006fa21bffcec012000ec20600cea012004ea206008d0206004a8102011e82060001080000fd20120148b196014ba10200482100006fa21bffcda012000da20600cd8012004d8206008d6012008d620600494102011d4206000d2012014d0027fecee02200080a5fffd3280000680a5e005ec022004c405a000108000068c21a0083280000384102001c40220048c21a0088b1960083b100000ba076001ac100006fa21bffcaa102001ea25a00080a0a0013280000d8c21a0108c21a00c8b19600cba10200290100006fa21bffcc2222004a8102001e8222000e601201081c4e0068801201c8b196010ba10200390100006fa21bffcc2222008c4222004a8102005e8222000e601201081c4e0068801201c|@4794,131071|72,5,@4716 336,4,@545 388,4,I150 428,5,@4717 4716:C2,188|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffc9010200181c3e00601000000da213ff8fa022004fa213ff492102001d0022000c4037ffcda00bffc7ffff09388013ff47ffffe4601000000ee02200080a5fff532800004ec01200410800006d0213ffcea05a000a8102001e8256000d0213ffcd0012000da0120047fffffdf88013ffc8c21a00c8b19600cba102002ac100006fa21bffcd025a004ea012000ea25a00090100016e801200c81c5200688012010|@586,131071|68,5,@4710 76,5,@4711 4717:C2,444|9e13e002f606201880a1001b8bd02018de213ffcd0213ff8d2213ff4053f025f8400a2d4ae10200188013ff480a0a0013280000580a5e001ac1000171080001e80a5a00122800005fa00a004aa10200510800010fa00a004fa213ffcd000a0001b0000889a036178f40360009fc6a00088013ffcea01200880a5400832800007aa102001aa10200510800005ae100015fa213ffc88013ffcae100015c401200088012004f606201880a1001b8bd0201830bfffdf228000060100000090102005ea01200881c560068801200c2b3f0260aa056204a810200180a560013280000580a52001a61000141080001e80a4e00122800005fa056004a410200510800010fa056004fa213ffcd00560001b0000889a036178f40360009fc6a00088013ffce401200880a4800832800007a4102001a410200510800005a8100012fa213ffc88013ffca8100012ea01200088012004f606201880a1001b8bd0201830bfffdf2280001490102001e4012000a210200580a4a001328000069210001190100011e001200881c420068801200cd004a000400000e701000000a2100008e404a004f606201880a1001b8bd0201830bffff1e401200881c4a0068801200c|@4793,131071|28,4,@4718 96,4,I189 204,4,@4786 268,4,I189 400,5,@4789 4718:O2|15,@4719 4719:O2|24,@4720 4720:O2|25,@4721 4721:O2|26,@4722 4722:O2|27,@4723 4723:O2|28,@4724 4724:O2|29,@4725 4725:O2|105,@4726 4726:O2|106,@4727 4727:O2|107,@4728 4728:O2|108,@4729 4729:O2|109,@4730 4730:O2|110,@4731 4731:O2|111,@4732 4732:O2|112,@4733 4733:O2|113,@4734 4734:O2|114,@4735 4735:O2|115,@4736 4736:O2|117,@4737 4737:O2|118,@4738 4738:O2|119,@4739 4739:O2|120,@4740 4740:O2|121,@4741 4741:O2|122,@4742 4742:O2|123,@4743 4743:O2|125,@4744 4744:O2|126,@4745 4745:O2|127,@4746 4746:O2|128,@4747 4747:O2|130,@4748 4748:O2|133,@4749 4749:O2|134,@4750 4750:O2|135,@4751 4751:O2|136,@4752 4752:O2|137,@4753 4753:O2|138,@4754 4754:O2|139,@4755 4755:O2|140,@4756 4756:O2|141,@4757 4757:O2|189,@4758 4758:O2|196,@4759 4759:O2|213,@4760 4760:O2|214,@4761 4761:O2|216,@4762 4762:O2|217,@4763 4763:O2|218,@4764 4764:O2|223,@4765 4765:O2|229,@4766 4766:O2|230,@4767 4767:O2|231,@4768 4768:O2|232,@4769 4769:O2|233,@4770 4770:O2|234,@4771 4771:O2|238,@4772 4772:O2|239,@4773 4773:O2|240,@4774 4774:O2|241,@4775 4775:O2|242,@4776 4776:O2|243,@4777 4777:O2|244,@4778 4778:O2|245,@4779 4779:O2|246,@4780 4780:O2|247,@4781 4781:O2|248,@4782 4782:O2|249,@4783 4783:O2|250,@4784 4784:O2|251,@4785 4785:O2|152,0 4786:O2|17,@4787 4787:O2|252,@4788 4788:O2|253,0 4789:C2,176|9e13e002c402200080a0bff532800023de213ffc80a260012280001e90102001d2022004808a600122800005808a60019010200581c3e006010000002280000aae100009de213ffc113f002990022374f40620209fc6a00088013ffcae102001ae100009fa0dfffcb92f6002ac072001ae0da10180a5e10132800003ac102001ac102005901da00481c3e0060100000081c3e00601000000113f0260900222f4f40620209fc6a00088013ffc90102001|@4792,114819|72,4,@545 152,4,@4790 4790:O3|@24,@397,@4791 4791:S29|6973496d6d757461626c653a20617267206e6f7420636f6e7374616e74 4792:S40|434f44455452454528292e6561726c7952747343616c6c2832296973496d6d757461626c65283229 4793:S26|434f44455452454528292e6561726c7952747343616c6c283229 4794:S54|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d6973652832296e6f74496e6c696e6543616c6c283129 4795:C2,252|9e13e002f606201880a1001b8bd0201880a26001328000058c21a00c9010200181c3e006010000008b19600cba10200284100006fa21bffc2f3f0261ae05e0d8ee20a000ee037fbcee20a004de213ffcda213ff8d0213ff4fa026004fa213ff0c4213fecec0260009210200190100016da037ffc7fffeea088013fec96102001d401200892100008d0012000ea01200cda057ffc4000004f01000000e8012008b8252001b9172004a6072001d0213ffcd201200490100013da01200c7fffffd188013ffc80a2200132800006d0213ffcd0012000e401201481c4a00688012018d00120009a0120144000026a88013ffce401201881c4a0068801201c|@4810,131071|56,4,@4796 116,5,@4710 148,5,@4798 232,5,@4809 4796:C2,92|9e13e002f606201880a1001b8bd02018c4022000b820a001ba102000b91f401cae0720018c21a0088b196008ba102001ac100006fa21bffcea022004ea25a0009410001692100017d0036004353f016eb406a31881c6a00401000000|@4797,131071|76,4,@3309 4797:S54|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f7079283229736574546162283129 4798:C2,644|9e13e002f606201880a1001b8bd02018ee02600080a5fffd3280000680a5e005ec026004c405a00810800006c4213ffc32800003c4026004c4026008c4213ffcd2213ff8d4213ff4d0213ff0d6213fecda213fe8ec00a00080a5bff51280005388013fe880a5fffd3280000601000000e8026004ea05201010800005e80560002b3f002baa05625ce805600080a53fe532800022a410000fe6056004e404e01480a4bffd328000169610000f80a2e0053280000c9610000f8c21a00c8b19600cba102002a8100006fa21bffcc425200496102001d6252000108000168c21a00c901000094000006f01000000a81000089e10000b1080000f8c21a00c901000094000006801000000a81000089e10000b108000088c21a00c901000094000006101000000a81000089e1000128c21a00c8b19600cba10200290100006fa21bffce8222004d4222000de213ffcda012008f40360009fc6a00088013ffce2012014e004600080a43ffd3280000780a42005de046004d003e000c201200081c060068801201c3280000690102001d0046004de01200081c3e0068801201cde01200081c3e0068801201c80a5bfed32800030de213ffcea00a00c80a5600132800026de213ffca410000f901000094000003501000000a21000088c21a00c8b19600cba10200290100006fa21bffce2222004d4222000e4213ffcda012008f40360009fc6a00088013ffce0012014de04200080a3fffd3280000780a3e005c2042004d0006000da01200081c360068801201c3280000690102001d0042004c201200081c060068801201cc201200081c060068801201c9a0120144000009888013ffce801200081c520068801201c9a0120144000009288013ffcea01200081c560068801201c|@4808,131071|128,4,@581 228,5,@4799 256,5,@4799 284,5,@4799 460,5,@4799 600,5,@4803 624,5,@4803 4799:C2,392|9e13e002ee02200080a5fffd3280000680a5e005ec022004c405a0001080000680a0a0013280000384102001c402200480a0a0013280000480a5fffd81c3e006010000003280000680a5e005c4022004ec00a0081080000680a5fffd32800003ec022004ec02200880a5fffd3280000601000000c4022004ea00a0101080000580a5fffd2b3f002baa05625c80a5fffd3280000601000000c4022004e800a0041080000580a5fffd293f0262a80521d480a5fffd328000068c21a008c4022004e600a00c1080000a8c21a0188b1960083b100000ba076001a6100006fa21bffc84102001c424e0008c21a0188b196018ba10200584100006fa21bffcea20a010e620a00cec20a008e820a004a8102001e820a000d0213ffcd0213ff8e605600080a4fff91280000988013ff884012000a8102001e820a00084012000ec20a004108000088c21a00cac012000a8103ffde825a000ac012000c425a0048c21a00c8b19600cba10200290100006fa21bffce8012000e8222000c4012004c422200481c3e00688012008|@4802,129153|132,4,@581 168,4,@4800 4800:O1|@4801 4801:C2,32|9e13e002de213ffc113f002c9002208cf40620209fc6a00088013ffc90102001|@593,129|8,4,@591 4802:S39|434f44455452454528292e6f7074696d69736550726f6328313229737472697044656373283129 4803:C2,700|9e13e002f606201880a1001b8bd02018c4037fecee00a018ec05e000b825a001b9172004aa072001ea25e000ea037ffce605600080a4fffd3280000601000000e4056004e804a01010800005e4052000293f002ba805225ce405200080a4bfe53280000da4100014e2052004e004601480a43ffd32800008a4100014c2037ff080a0600532800004a4100014253f002ba404a25c8c21a0188b196018ba102005a2100006fa21bffca0102001e024601082102001c224600ca8102005e8246008ec246004a0103fede024600080a4fffd3280000601000000e8056004c20520041080000580a4fffd033f02638200612080a4fffd328000068c21a008e8056004d805200c1080000a8c21a0188b1960083b100000ba07600198100006fa21bffca8102001e82320008c21a0188b196018ba102005a0100006fa21bffce4242010d824200ce2242008c224200482102001c2242000d0213ffcd0213ff8d804a00080a33ff91280000988013ff8a8012000a0102001e025200082012000e2206004108000088c21a00ca8012000a2103ffde225200082012000e02060048c21a00c8b19600cba102002a8100006fa21bffce2012000e2252000e0012004e02520048c21a00c8b19600cba10200290100006fa21bffce8222004c2037ff8c2222000de213ffcda213ff8ec213ff4da037ff4f40360009fc6a00088013ff4da012004d8037ffcd403200080a2bffd3280000680a2a005d2032004d6026000108000068c21a0143280000396102001d60320048c21a0148b196014ba10200492100006fa21bffc90102001d022600cc4036000c4226008ee012000ee226004ac103ff1ec2260008c21a00c8b19600cba102002aa100006fa21bffca8102001e8256004d225600080a5600132800006ea213ffc9010000be601200881c4e006880120149010000b9a0120104000001d88013ffce601200c81c4e00688012018|@4807,131071|80,4,@581 140,4,@581 232,4,@4804 680,5,@4806 4804:O1|@4805 4805:C2,32|9e13e002de213ffc113f002c9002208cf40620209fc6a00088013ffc90102001|@593,129|8,4,@591 4806:C2,112|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffcd0037fec81c3e00601000000da213ff8fa022000fa213ff4d00220047ffffff288013ff48c21a00c8b19600cba1020029e100006fa21bffcd023e004da012000da23e0009010000fde01200881c3e0068801200c|@1966,161| 4807:S39|434f44455452454528292e6f7074696d69736550726f63283132296e65774465636c2834292f33 4808:S37|434f44455452454528292e6f7074696d69736550726f63283132296e65774465636c283429 4809:C2,112|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffcd0037fe881c3e00601000000da213ff8fa022000fa213ff4d00220047ffffff288013ff48c21a00c8b19600cba1020029e100006fa21bffcd023e004da012000da23e0009010000fde01200881c3e0068801200c|@1966,161| 4810:S45|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f7079283229 4811:C2,276|9e13e002f606201880a1001b8bd02018d2022000d002600080a23ffd3280003cd0026004c4026004ee00a00080a5e00132800006de213ffc11000083900223f881c3e00601000000c4213ff8ee213ff4c6213ff02d3f0263ac05a3b2ec213fecaa102001ea213fe886013fe89410200192102001901000171b0000829a036338f40360009fc6a00088013fe8a8100008c601200810800009e8213ffc113f0007900223e4f40620209fc6a00001000000a8102001e8213ffce601200ce6213ff8961020019410001492102005d00120101b0000889a036238f40360009fc6a00088013ff8d00120001b0000839a0363b8f40360009fc6a00001000000d0012000e401201881c4a0068801201c81c3e00601000000|@4812,131071|56,4,I49 84,4,$4811+158 120,4,I11 156,4,@251 208,4,I195 232,4,I47 4812:S22|5374726574636841727261792e766563746f72283229 4813:C2,272|9e13e002f606201880a1001b8bd02018ee02600080a5fffd3280000680a5e005ec026004c405a00810800006ec00a00032800003c4026004c4026008ec00a00080a5bfed3280001fde213ffcea00a004b8256001811f2000348000048c21a00810800012de213ffc8b196008ba102001a8100006fa21bffcd2252000de213ffcda213ff8d0213ff4d2213ff09410001492100015d00360087fff0a8788013ff01080000dea012008da213ff8d0213ff4d2213ff088013ff010800007ea012008da213ff8d0213ff4d2213ff088013ff0ea0120088c21a0088b196008ba102001a8100006fa21bffce6012000e625200094100014d2012004d0056004de01200c353f016eb406a31881c6a00488012010|@4814,131071|152,5,@3309 256,4,@3309 4814:S56|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229736574546162466f72496e6c696e65283229 4815:C2,244|9e13e002f606201880a1001b8bd0201880a2a00122800004c40220001080000884100008b820a001811f200024800004841000081080000ea610000f8c21a0108b196010ba10200390100006fa21bffcd4222008d2222004c4222000da036004f403600081c6a00401000000a410000da2100008a010000992100002d004a00c7ffdc81901000000808a20013280000e8c21a010de04a008b823e001ba242001b91f401c82072001d2022000901000019e100013353f000fb406a3d481c6a004010000008b196010ba10200390100006fa21bffcd4222008e0222004e2222000da04a0049e100013f403600081c6a00401000000|@4816,131071|128,5,@608 180,4,@398 4816:S59|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d6973652832296c6f6f6b75704c6f63616c4e657741646472283329 4817:C2,492|9e13e002f606201880a1001b8bd0201880a2a0013280005cc4036010d402200080a2a0013280000ab822a001de213ffc113f02659002212cf40620209fc6a00088013ffc90102001b822a001811f200024800017b822a001a610000fa410000da21000099210000ad004a0087ffdc7c901000000808a200132800005e6213ffcc402200010800035e804a004113f000f9002239cf40620209fc6a00088013ffc841020011080002de804a004ba102000b91f401c84072001811f200036800004ee03600c1080000cde213ffcfa05fffcbb2f6008b9376006ac072001ba20a001811f401c36800004de213ffc10800009b820a001113f0004900223d0f40620209fc6a00088013ffcae102001b820a001ea05c01cae100015808de00132800005de213ffcc405e00010800009a2100009113f000f9002239cf40620209fc6a00088013ffc84102001a2100009a410000da610000fe804a004b8252001ba246001b91f401c9e072001921000029010000f9e100013353f000fb406a3d481c6a00401000000ec00a00080a5bffd3280000601000000ea00a004ee05600410800005b822a0012f3f0265ae05e168b822a001b91f2004aa072001a81000088c21a0108b196010ba10200390100006fa21bffcea222008d2222004e82220009a100017f403600081c6a00401000000|@4822,131071|48,4,@4818 108,5,@608 140,4,@395 244,4,@224 304,4,@395 372,4,@398 420,4,@4820 4818:O3|@24,@397,@4819 4819:S35|6c6f6f6b75704465633a20496e6c696e652066756e6374696f6e207265637572736573 4820:O1|@4821 4821:C2,32|9e13e002de213ffc113f002c9002208cf40620209fc6a00088013ffc90102001|@593,129|8,4,@591 4822:S61|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d6c6f6f6b7570446563283329 4823:C2,44|9e13e002f606201880a1001b8bd02018d4022008d2022004d0022000da036004f403600081c6a00401000000|@4824,131071| 4824:S59|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d6973652832296c6f6f6b75704c6f63616c4e657741646472283129 4825:C2,44|9e13e002f606201880a1001b8bd02018d4022008d2022004d0022000da036004f403600081c6a00401000000|@4826,131071| 4826:S61|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d6c6f6f6b7570446563283129 4827:C2,40|9e13e002f606201880a1001b8bd02018d2022004d0022000da036004f403600081c6a00401000000|@4828,131071| 4828:S56|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229736574546162466f72496e6c696e65283129 4829:C2,72|9e13e002f606201880a1001b8bd020188c21a0088b196008ba10200184100006fa21bffcee022004ee20a00094100002d2022000d0036004353f016eb406a31881c6a00401000000|@4830,131071|56,4,@3309 4830:S59|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d6973652832297365744e6577546162466f72496e6c696e65283129 4831:C2,208|9e13e002f606201880a1001b8bd02018da213ffcd4213ff8c403600cae102005ee20a00080a260010280000488013ff810800006de213ffcd2036008ae102005ee226000de213ffcd0213ff89210200188013ff880a2200132800005b8226001841000091080000aee01200cb9172004ae072001d002200492100017f606201880a1001b8bd0201830bffff3de05e004b823e001ba20a001811f401c228000069210000fd0012000da01200481c3600688012010d00120009a01200c4000000c01000000c201200481c0600688012010|@4836,131071|188,5,@4832 4832:C2,760|9e13e002f606201880a1001b8bd0201880a220013280000fc403600080a2600132800005de213ffc9010200181c3e00601000000113f02679002203cf40620209fc6a00088013ffc90102001c4036000b8226001811f200036800004ee00a0181080000cde213ffcfa05fffcbb2f6008b9376006ac072001ba226001811f401c36800004de213ffc1080000cb8226001ec022000ee022004113f0004900223d0f40620209fc6a00088013ffc90100017ae102001b8226001ec05c01cae100016808de00132800005de213ffcea05e0001080000cee056000ea022000ee022004113f000f9002239cf40620209fc6a00088013ffcac100015aa102001ee05600080a5fffd3280000680a5e005ec056004e805a00810800006ec02200032800003e8056004e8056008ec022000e405a00080a4bff53280000e80a4bfede205200080a47ff53280002da6102001e005a004c205200480a4000132800028a6102001a61020051080002680a4e00132800023a6102001e205200080a47fed3280001fa6102001e005a004c2052004b8206001ba242001811f401c32800018a6102001e605a008d805200880a4c00c32800013a6102001d605200cd4037ffcb822a001ba22e001b917401c84072001ee036000ea05e014ba256001b91f001da4072001c405a00cba20a001811f401c32800003a6102001a610200580a4e00122800004e20360001080000fde213ffcde213ffcda213ff8d2213ff4fa022000fa213ff0fa022004fa213fec94102005d00460107fff07f088013fec1080000ae201200cda213ff8d2213ff4fa022000fa213ff0fa022004fa213fec88013fece201200ce0046000d2012008d00420107ffdc5c80100000080a2200122800017de012008de012008b823e001b91f20048207200192100001d00120009a1000117fffff5a9e13e0028c21a00c8b19600cba1020029a100006fa21bffcd0236004d8012004d82360009010000dd601201081c2e00688012014b823e001b91f20048207200192100001d00120009a100011de01201010bfff4588012014|@4835,131071|52,4,@4833 152,4,@224 224,4,@395 560,5,@3309 620,5,@608 4833:O3|@24,@397,@4834 4834:S33|66696c74657241726773273a2077726f6e67206e756d626572206f662061726773 4835:S76|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d66696c7465724172677328332966696c7465724172677327283229 4836:S62|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d66696c74657241726773283329 4837:C2,936|9e13e002f606201880a1001b8bd02018c4037ffc8c21a0248b196024ba102008ae100006fa21bffc2d3f0268ac05a0d8ec25e000ec037f90ec25e01cea037facea25e018e8037f88e825e014e6037fb4e625e010e4037fc8e425e00ce2037fece225e008e000a01ce025e0048c21a00c8b19600cba10200282100006fa21bffc193f026998032038d8206000d8037fa4d82060048c21a00c8b19600cba10200296100006fa21bffc153f02699402a080d422e000ee22e0048c21a00c8b19600cba102002ae100006fa21bffc153f02699402a120d425e000d4037fa8d425e0048c21a00c8b19600cba10200292100006fa21bffc053f02698400a164c4226000e0037fb8e0226004c4037ffce200a01480a4600122800006d0213ffcd0213ffc901020051080000488013ffcd0037ff088013ffc8c21a0088b196008ba102001a4100006fa21bffce6037fe8e624a0008c21a00c8b19600cba102002a8100006fa21bffc2b3f0269aa0561c8ea252000ea037f8cea2520048c21a00c8b19600cba102002ac100006fa21bffce625a004e825a0008c21a00c8b19600cba102002a8100006fa21bffcd800a008d8252004ec252000de213ffcda213ff8d2213ff4d200a01cd2213ff0ec00a018ec213fecd0213fe8d000a010d0213fe4e4213fe0e8213fdce800a004e8213fd8a410000b961000179410001292100001d0037fdcda00a000f40360009fc6a00088013fd8e2012000e0047f94de04200080a3e0012280002bc2047f98c2047fb49a10200180a0600132800005d80120009010000d1080001eda0120009610000d92100001d0033f907ffdc4d30100000080a220012280000eb8206001b822e001b917200494072001b8206001b91f2004920720019a10000a82100009f606201880a1001b8bd0201830bfffe7b91f2004940720019a10000b8210000af606201880a1001b8bd0201830bfffdfde012004353f0269b406a25881c6a0048801200cda00600080a3600122800033d8012004d0213ffcd8047fb49610200188013ffc80a3200132800005d20120049410000b1080001cd201200cd0027f909210000c7ffdc4a50100000080a220012280000eb8232001b822e001b917200484072001b8232001b91f2004ae0720019610000298100017f606201880a1001b8bd0201830bfffe8b91f20048407200198100002f606201880a1001b8bd0201830bfffe1b8226001ba22a001811f401c24800007d00120009010000ada012004de01200810bfff1e88012010c401200881c0a0068801201081c320068801200c|@4872,131071|40,4,@4838 128,4,@4842 168,4,@4843 204,4,@4845 244,4,@4846 356,4,@4847 596,5,@608 700,4,@4849 780,5,@608 4838:C2,680|9e13e002f606201880a1001b8bd0201880a2a0013280008bc4036008d402200080a2a0013280000ab822a001a410000fa210000dd00460087ffff9c8010000008410000810800074d0046004811f200024800017b822a001a610000fa410000da21000099210000ad004a00c7ffdc45c01000000808a200132800005e6213ffcc40220001080006192100011113f000f9002239cf40620209fc6a00088013ffc841020011080005992100011ba102000b91f401c84072001a610000fa410000da210000992100002d004a01c7ffdc4440100000080a2200122800024b822a001de04a014da04a010b8236001ba23e001b917401c92072001ba22a001b917001d900720018c21a0188b196018ba10200584100006fa21bffcae102001ee20a010ac102001ec20a00caa102005ea20a008d020a004a8103fede820a000941000028c21a00c8b19600cba10200284100006fa21bffcd420a00492102001d220a0001080002a92100011ba102000b91f401c9e072001811f200036800004da04a0181080000ce6213ffcfa037ffcbb2f6008b937600694072001ba23e001811f401c36800004e6213ffc10800009b823e001113f0004900223d0f40620209fc6a00088013ffc82102001b823e001d203401c821000098088600132800005e6213ffcc40060001080000992100011113f000f9002239cf40620209fc6a00088013ffc8410200192100011a2100012a4100013d0046004b8222001ba226001b91f401cae07200192100002901000179e100012353f000fb406a3d481c6a00401000000ec00a00080a5bffd3280000601000000ea00a004ee05600410800005b822a0012f3f0268ae05e39cb822a001b91f2004aa072001a81000088c21a0108b196010ba10200390100006fa21bffcea222008d2222004e82220009a100017f403600081c6a00401000000|@4841,131071|56,5,@4799 108,5,@608 140,4,@395 204,5,@608 432,4,@224 492,4,@395 560,4,@398 608,4,@4839 4839:O1|@4840 4840:C2,32|9e13e002de213ffc113f002c9002208cf40620209fc6a00088013ffc90102001|@593,129|8,4,@591 4841:S77|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d636865636b466f724c6f6f70496e7374727328312970726576283329 4842:C2,44|9e13e002f606201880a1001b8bd02018d4022008d2022004d0022000da036004f403600081c6a00401000000|@4824,131071| 4843:C2,44|9e13e002f606201880a1001b8bd02018d4022008d2022004d0022000da036004f403600081c6a00401000000|@4844,131071| 4844:S77|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d636865636b466f724c6f6f70496e7374727328312970726576283129 4845:C2,40|9e13e002f606201880a1001b8bd02018d2022004d0022000da036004f403600081c6a00401000000|@4828,131071| 4846:C2,72|9e13e002f606201880a1001b8bd020188c21a0088b196008ba10200184100006fa21bffcee022004ee20a00094100002d2022000d0036004353f016eb406a31881c6a00401000000|@4830,131071|56,4,@3309 4847:C2,44|9e13e002f606201880a1001b8bd02018d4022008d2022004d0022000da036004f403600081c6a00401000000|@4848,131071| 4848:S62|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d66696c74657241726773283129 4849:C2,1204|9e13e002f606201880a1001b8bd02018c4037ffcee00a01cb825e001b9172004ac0720018c21a0208b196020ba102007aa100006fa21bffc293f026aa8052328e8256000e8037fece8256018e6037face6256014e4037f90e4256010e2037fc8e225600cec256008e0037fe8e0256004d0213ffcd0213ff8de213ff4da213ff0d0213fecec213fe8ea213fe494102001921021019010202d1b0000829a036338f40360009fc6a00088013fe49e102029de2220008c21a00c8b19600cba10200282100006fa21bffcd02060049a103ffdda2060008c21a0088b1960083b100000ba07600198100006fa21bffcc223200096012014d822e0009401201492102001d222a0048c21a00c8b19600cba10200290100006fa21bffcc4012014c4222000ee012018ee222004ec01200cea05bffc8c21a0148b196014ba102004a8100006fa21bffc273f026ca604e0f4e6252000e4057ffce425200cd0252008e2012004e22520048c21a0108b196010ba102003a0100006fa21bffc1f3f026c9e03e31cde242000d0242008c205bfc8c22420048c21a00c8b19600cba1020029a100006fa21bffc193f026d980320a0d8236000e82360048c21a00c8b19600cba10200296100006fa21bffc153f026d9402a148d422e000d2012000d222e0048c21a00c8b19600cba10200284100006fa21bffc293f026da80521e8e820a000e020a0048c21a00c8b19600cba102002a6100006fa21bffc213f026da0042284e024e000d024e0048c21a0088b1960083b100000ba0760019e100006fa21bffc98102005d823e000d405601480a2a00122800003d205bff0921020058c21a00c8b19600cba10200290100006fa21bffc293f026da8052344e8222000e005bf8ce02220048c21a00c8b19600cba10200298100006fa21bffce805bfe8e8232004d02320008c21a00c8b19600cba10200290100006fa21bffce2056008e2222004d8222000d801200cee033ffce401200cc204bffce6213ffce6012004e6213ff8de213ff4d2213ff0de056010de213fec92102001d2213fe8d0213fe4d005e004d0213fe0a610000b96100002941000139210000dd005bfdcda006000f40360009fc6a00088013fe0e401200cd0213ffce204bfb4a010200188013ffc80a4600132800005c20120109e1000101080001cc201200c92100011d0007f907ffdc2410100000080a220012280000eb8246001b8242001b91720049a072001b8246001b91f200498072001a010000da210000cf606201880a1001b8bd0201830bfffe8b91f20049a072001a210000df606201880a1001b8bd0201830bfffe1b8206001ba23e001811f401c24800007d00120009010000fda012010de01201410bfff0b880120207ffff2d401000000da012010d8037ffcd603201cb822e001b9172004940720018c21a0248b196024ba10200892100006fa21bffc84102001c422601cae102001ee226018ac103ffdec226014c2226010aa102001ea22600cd4226008e8037fd8e8226004d02260008c21a00c8b19600cba102002a6100006fa21bffcd224e004a4103fe5e424e0008c21a0088b1960083b100000ba076001a2100006fa21bffca0102001e02460008c21a00c8b19600cba10200290100006fa21bffce62220049e102001de222000c201201481c0600688012020|@4871,131071|56,4,@4850 152,4,I11 324,4,@4858 376,4,@4860 420,4,@4862 456,4,@4864 496,4,@4866 532,4,@4868 620,4,@4870 856,5,@608 992,5,@4711 4850:C2,936|9e13e002f606201880a1001b8bd0201880a2a001328000cbc4036018d402200080a2a0013280003fb822a001c4036008b820a001ba226001b91f401cae0720018c21a0188b196018ba102005ac100006fa21bffcaa102001ea25a010ee25a00cae102001ee25a008aa102001ea25a004ae103fedee25a000b820a001ba226001b91f401caa0720018c21a0188b196018ba10200592100006fa21bffcae102001ee226010ea22600caa102001ea226008ae102001ee226004aa103fedea2260008c21a0188b196018ba102005ae100006fa21bffcd225e010ea036004ea25e00cec25e008133f026b920262ecd225e004ac102001ec25e0008c21a00c8b19600cba10200290100006fa21bffcee22200494103ffdd422200081c3e00601000000811f200024800021b822a001a610000fa410000da21000099210000ad004a00c7ffdc19301000000808a200132800005e6213ffce002200010800009de04a008113f000f9002239cf40620209fc6a00088013ffca0102001de04a008b823e001ba246001b91f401c9a072001921000109010000d9e100013353f000fb406a3d481c6a00401000000ba102000b91f401c84072001a610000fa410000da210000992100002d004a0107ffdc1710100000080a2200122800026b822a001e4213ffca0100013821000119010000a9a013ffc4000008688013ffcda012000d8036008b8232001ba206001b91f401c960720018c21a0188b196018ba10200594100006fa21bffc92102001d222a010d622a00c84102005c422a008d022a004ae103fedee22a0008c21a00c8b19600cba10200290100006fa21bffcd4222004ac102001ec22200081c4200688012004ba102000b91f401ca0072001811f200036800004de04a0141080000ce6213ffcfa03fffcbb2f6008b937600682072001ba242001811f401c36800004e6213ffc10800009b8242001113f0004900223d0f40620209fc6a00088013ffc9e102001b8242001da03c01c9e10000d808be00132800005e6213ffcd803e00010800009d604a008113f000f9002239cf40620209fc6a00088013ffc98102001d604a008b822e001ba246001b91f401c94072001b917200492072001901000099210000c9e100013353f000fb406a3d481c6a00401000000ec00a00080a5bffd3280000601000000ea00a004ee05600410800005b822a0012f3f026cae05e058b822a001b91f2004aa072001a81000088c21a0108b196010ba10200390100006fa21bffcea222008d2222004e82220009a100017f403600081c6a00401000000|@4857,131071|228,4,@4851 320,5,@608 352,4,@395 408,4,@398 456,5,@608 496,5,@4853 692,4,@224 752,4,@395 816,4,@398 864,4,@4855 4851:O1|@4852 4852:C2,32|9e13e002de213ffc113f002c9002208cf40620209fc6a00088013ffc90102001|@593,129|8,4,@591 4853:C2,176|9e13e002f606201880a1001b8bd0201880a2200132800005c40360009010200181c3e00601000000b8222001ba102000b91f401cae072001a610000fa410000da210000892100017d000a0107ffdc0ce0100000080a2200122800010b8246001b8246001b917200490072001e6213ffce4213ff89a1000127fffffe288013ff8b8222001b91f200490072001de01200481c3e00688012008b9172004900720019a1000129e10001310bfffd8f6062018|@4854,130723|76,5,@608 4854:S84|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d636865636b52656375727369766543616c6c73283129676574506172616d4e6f283129 4855:O1|@4856 4856:C2,32|9e13e002de213ffc113f002c9002208cf40620209fc6a00088013ffc90102001|@593,129|8,4,@591 4857:S78|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d636865636b52656375727369766543616c6c7328312970726576283329 4858:C2,428|9e13e002f606201880a1001b8bd0201880a2a00132800057b822a001d4022000b822a001811f200024800033c4036004a610000fa410000da21000099210000ad004a0087ffdc05f0100000080a220013280001ede04a004de04a004b823e001ba246001b91f401c9a0720018c21a0188b196018ba10200592100006fa21bffc90102001d0226010da22600c84102005c4226008d4226004ae103fedee2260008c21a00c8b19600cba10200290100006fa21bffcd2222004ac102001ec22200081c4e00601000000b823e001ba246001b91f401c9a072001d20220009010000d9e100013353f000fb406a3d481c6a00401000000b820a001ba226001b91f401cae07200180a2a00132800003ac102001ac102005aa1da0048c21a0188b196018ba102005a8100006fa21bffca6102001e6252010ee25200cea252008d4252004a4103fede42520008c21a00c8b19600cba10200290100006fa21bffce8222004a2102001e222200081c3e00601000000b91f200484072001ae1000088c21a0108b196010ba10200390100006fa21bffcc4222008d2222004ee222000da03600cf403600081c6a00401000000|@4859,131071|68,5,@608 228,4,@398 4859:S86|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d636865636b52656375727369766543616c6c732831296c6f63616c4e657741646472283329 4860:C2,272|9e13e002f606201880a1001b8bd02018ee02600080a5fffd3280000680a5e005ec026004c405a00810800006ec00a00032800003c4026004c4026008ec00a00080a5bfed3280001fde213ffcea00a004b8256001811f2000348000048c21a00810800012de213ffc8b196008ba102001a8100006fa21bffcd2252000de213ffcda213ff8d0213ff4d2213ff09410001492100015d00360087fff01d988013ff01080000dea012008da213ff8d0213ff4d2213ff088013ff010800007ea012008da213ff8d0213ff4d2213ff088013ff0ea0120088c21a0088b196008ba102001a8100006fa21bffce6012000e625200094100014d2012004d0056004de01200c353f016eb406a31881c6a00488012010|@4861,131071|152,5,@3309 256,4,@3309 4861:S80|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d636865636b52656375727369766543616c6c73283129736574546162283229 4862:C2,44|9e13e002f606201880a1001b8bd02018d4022008d2022004d0022000da036004f403600081c6a00401000000|@4863,131071| 4863:S86|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d636865636b52656375727369766543616c6c732831296c6f63616c4e657741646472283129 4864:C2,44|9e13e002f606201880a1001b8bd02018d4022008d2022004d0022000da036004f403600081c6a00401000000|@4865,131071| 4865:S78|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d636865636b52656375727369766543616c6c7328312970726576283129 4866:C2,40|9e13e002f606201880a1001b8bd02018d2022004d0022000da036004f403600081c6a00401000000|@4867,131071| 4867:S80|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d636865636b52656375727369766543616c6c73283129736574546162283129 4868:C2,72|9e13e002f606201880a1001b8bd020188c21a0088b196008ba10200184100006fa21bffcee022004ee20a00094100002d2022000d0036004353f016eb406a31881c6a00401000000|@4869,131071|56,4,@3309 4869:S83|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d636865636b52656375727369766543616c6c732831297365744e6577546162283129 4870:C2,44|9e13e002f606201880a1001b8bd02018d4022008d2022004d0022000da036004f403600081c6a00401000000|@4848,131071| 4871:S71|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d636865636b52656375727369766543616c6c73283129 4872:S70|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d636865636b466f724c6f6f70496e73747273283129 4873:C2,464|9e13e002f606201880a1001b8bd0201880a2600132800005a610000f9010200181c3e00601000000a410000da2100008a010000992100010d004bf907ffdbe930100000080a220013280000bb8242001b8242001b91f20049e0720019210000f901000119a1000129e10001310bfffe7f6062018811f200036800004de04bfac1080000ce6213ffcfa03fffcbb2f6008b93760069a072001ba242001811f401c36800004e6213ffc10800009b8242001113f0004900223d0f40620209fc6a00088013ffc9e102001b8242001d203c01c9e100009808be00132800005e6213ffcd003e0001080000992100013113f000f9002239cf40620209fc6a00088013ffc90102001921000137fffef150100000080a4600122800005c404bf888410000810800016b8242001ee04bfb4b825e001ba20a001b917401cac072001ba242001b91f001daa0720018c21a0148b196014ba10200484100006fa21bffca8102001e820a00cd020a008ea20a004a6103ff1e620a000b8242001b91f20049e072001d2213ffce4213ff8c4213ff49210000f901000119a1000127fffff9a88013ff48c21a00c8b19600cba1020029a100006fa21bffcd0236004d2012000d22360009010000dc401200881c0a0068801200c|@4874,130979|60,5,@608 176,4,@224 236,4,@395 264,5,@4711 4874:S60|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d6d616b6544656373283229 4875:O1|@4876 4876:C2,32|9e13e002de213ffc113f002c9002208cf40620209fc6a00088013ffc90102001|@593,129|8,4,@591 4877:C2,112|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffcd0037f9c81c3e00601000000da213ff8fa022000fa213ff4d00220047ffffff288013ff48c21a00c8b19600cba1020029e100006fa21bffcd023e004da012000da23e0009010000fde01200881c3e0068801200c|@1966,161| 4878:C2,112|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffcd0037f9c81c3e00601000000da213ff8fa022000fa213ff4d00220047ffffff288013ff48c21a00c8b19600cba1020029e100006fa21bffcd023e004da012000da23e0009010000fde01200881c3e0068801200c|@1966,161| 4879:C2,356|9e13e002f606201880a1001b8bd0201880a2a00132800045b822a001d4022000b822a001811f200024800021c4036004a610000fa410000da21000099210000ad004a0087ffdbdae01000000808a200132800005e6213ffce002200010800009de04a004113f000f9002239cf40620209fc6a00088013ffca0102001de04a004b823e001ba246001b91f401c9a072001921000109010000d9e100013353f000fb406a3d481c6a00401000000b820a001ba226001b91f401cae07200180a2a00132800003ac102001ac102005aa1da0048c21a0188b196018ba102005a8100006fa21bffca6102001e6252010ee25200cea252008d4252004a4103fede42520008c21a00c8b19600cba10200290100006fa21bffce8222004a2102001e222200081c3e00601000000b91f200484072001ae1000088c21a0108b196010ba10200390100006fa21bffcc4222008d2222004ee222000da03600cf403600081c6a00401000000|@4880,131071|68,5,@608 100,4,@395 156,4,@398 4880:S53|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d6973652832296c6f63616c4f6c6441646472283329 4881:C2,428|9e13e002f606201880a1001b8bd0201880a2a00132800057b822a001d4022000b822a001811f200024800033c4036004a610000fa410000da21000099210000ad004a0087ffdbd3e0100000080a220013280001ede04a004de04a004b823e001ba246001b91f401c9a0720018c21a0188b196018ba10200592100006fa21bffc90102001d0226010da22600c84102005c4226008d4226004ae103fedee2260008c21a00c8b19600cba10200290100006fa21bffcd2222004ac102001ec22200081c4e00601000000b823e001ba246001b91f401c9a072001d20220009010000d9e100013353f000fb406a3d481c6a00401000000b820a001ba226001b91f401cae07200180a2a00132800003ac102001ac102005aa1da0048c21a0188b196018ba102005a8100006fa21bffca6102001e6252010ee25200cea252008d4252004a4103fede42520008c21a00c8b19600cba10200290100006fa21bffce8222004a2102001e222200081c3e00601000000b91f200484072001ae1000088c21a0108b196010ba10200390100006fa21bffcc4222008d2222004ee222000da03600cf403600081c6a00401000000|@4882,131071|68,5,@608 228,4,@398 4882:S53|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d6973652832296c6f63616c4e657741646472283329 4883:C2,272|9e13e002f606201880a1001b8bd02018ee02600080a5fffd3280000680a5e005ec026004c405a00810800006ec00a00032800003c4026004c4026008ec00a00080a5bfed3280001fde213ffcea00a004b8256001811f2000348000048c21a00810800012de213ffc8b196008ba102001a8100006fa21bffcd2252000de213ffcda213ff8d0213ff4d2213ff09410001492100015d00360087ffefec088013ff01080000dea012008da213ff8d0213ff4d2213ff088013ff010800007ea012008da213ff8d0213ff4d2213ff088013ff0ea0120088c21a0088b196008ba102001a8100006fa21bffce6012000e625200094100014d2012004d0056004de01200c353f016eb406a31881c6a00488012010|@4884,131071|152,5,@3309 256,4,@3309 4884:S47|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229736574546162283229 4885:C2,44|9e13e002f606201880a1001b8bd02018d4022008d2022004d0022000da036004f403600081c6a00401000000|@4886,131071| 4886:S53|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d6973652832296c6f63616c4e657741646472283129 4887:C2,44|9e13e002f606201880a1001b8bd02018d4022008d2022004d0022000da036004f403600081c6a00401000000|@4888,131071| 4888:S53|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d6973652832296c6f63616c4f6c6441646472283129 4889:C2,40|9e13e002f606201880a1001b8bd02018d2022004d0022000da036004f403600081c6a00401000000|@4890,131071| 4890:S47|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229736574546162283129 4891:C2,72|9e13e002f606201880a1001b8bd020188c21a0088b196008ba10200184100006fa21bffcee022004ee20a00094100002d2022000d0036004353f016eb406a31881c6a00401000000|@4892,131071|56,4,@3309 4892:S50|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d6973652832297365744e6577546162283129 4893:C2,404|9e13e002c4036008b820a001ba226001b91f401cae072001d2022008ba226001b91f401cac072001ee036004ea05e000de213ffcda213ff8fa022000fa213ff4fa022004fa213ff0ec213fec88013fec80a5600132800005de056000a81020011080002a80a52001da03e00080a37fed3280001701000000d2012008d003e004b8222001ba226001811f401c3280001aea056004c4012000ee03e00cb825e001ba20a001811f401c32800013ea056004ec012004e803e00880a580143280000eea05600410800010a8102005113f0271900220c0f40620209fc6a000010000009210200180a2600132800007a8102005ea056004f606201880a1001b8bd0201830bfffd480a5200122800006de01200c90102001de01201081c3e006880120148c21a0188b196018ba1020059a100006fa21bffc92102001d2236010d0012000d023600cc4012004c4236008ee012008ee236004ac103fedec236000ea03e004e80560008c21a00c8b19600cba10200292100006fa21bffce8226004da226000d225600090102001c401201081c0a00688012014|@4896,127139|204,4,@4894 4894:O3|@24,@397,@4895 4895:S25|66696e644e6f6e4c6f63616c3a206e6f742045787472616374 4896:S52|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d6973652832296164644e6f6e4c6f63616c283229 4897:C2,424|9e13e002f606201880a1001b8bd02018841000088c21a0108b196010ba10200390100006fa21bffcd2222008d4222004c4222000de213ffcda213ff8d2213ff4d4213ff0fa00a004fa213fecda036008f40360009fc6a00088013fecec02200080a5bffd3280000680a5a005ea022004ee05600810800006ea05e00032800003ee022004ee022008ea05e00080a57fed32800043901000178c21a0148b196014ba102004a8100006fa21bffce605e010e625200ce405e00ce4252008e205e008e2252004e005e004e025200080a4200132800028de01200c80a460013280001ade01200cde01200880a3e00132800008c201200cc201200080a0600122800004c201200c1080000bee213ffcee213ffcd201200490100014da006004f40360009fc6a00088013ffc10800004d001200088013ffcd0012000da01201481c3600688012018ee213ffcd201200490100014da03e004f40360009fc6a00088013ffcd0012000c201201481c0600688012018ee213ffcd201200490100014da03e004f40360009fc6a00088013ffcd0012000c201201481c0600688012018e801201081c5200688012014|@4898,131071| 4898:S55|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636865636b526563757273696f6e283329 4899:C2,44|9e13e002f606201880a1001b8bd02018d4022008d2022004d0022000da036004f403600081c6a00401000000|@4900,131071| 4900:S55|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636865636b526563757273696f6e283129 4901:O2|@4903,@4902 4902:O2|@4914,@4901 4903:C2,1676|9e13e002f606201880a1001b8bd02018c40220008088a001228000250100000080a0bfd5268000220100000080a0a02d3480001f010000002f3f0272ae05e026ba00a029fa05c01d81c5c01d01000000000004f6000003aa0000027e0000037a000001e6000003e2000001ae0000015600000186000000e60000032a000000fe0000005a000002a2000004ea0000022600000602000001ba000003d6000000f200000162000004ba000005bec4022004de213ffcda213ff8fa00a00cfa213ff4fa00a010fa213ff0d000a0087fffffcd88013ff0d0213ffcd0012000da0120087fffffc888013ffcee012000b8222001ba25e001b917401c9e072001c201200cde213ffcd0012008da006004f40360009fc6a00088013ffcda012000b8222001ba236001b917401c90072001d801201481c32006880120189010200181c3e006010000009010200581c3e00601000000de213ffcda213ff8fa022008fa213ff4d00220047fffffa788013ff4d0213ffcd0012000da0120047fffffa288013ffcec012000b8222001ba25a001b917401caa072001b917200490072001e801200c81c5200688012010d002200810bfff97f6062018da213ffcde213ff8d00220049a013ffc4000013988013ff8ec01200081c5a00688012008ac10000fd00220041b0000859a0362f8f40360009fc6a00001000000901a200481c5a006010000009010200581c3e00601000000de213ffcda213ff8d00220047fffff7a88013ff8b8222001b917200490072001ec01200481c5a00688012008ec022004de213ffcda213ff8fa05a010fa213ff4d005a0007fffff6c88013ff4ea012000b8256001ba222001b917401c90072001e801200881c520068801200cde213ffcda213ff8fa022004fa213ff4d00220087fffff5d88013ff4d0213ffcd00120009a0120084000013388013ffcec012000b8222001ba25a001b917401caa072001b917200890072001e801200c81c5200688012010da213ffcde213ff8d00220049a013ffc4000014988013ff8ec01200081c5a00688012008de213ffcda213ff8fa022008fa213ff4fa02200cfa213ff0d00220047fffff3c88013ff0d0213ffcd0012004da0120087fffff3788013ffcec012000b8222001ba25a001b917401caa072001ea213ffcd0012004da01200c7fffff2d88013ffce8012000b8222001ba252001b917401ca6072001b917200890072001e401201481c4a00688012018de213ffcda213ff8fa022008fa213ff4d00220047fffff1c88013ff4d0213ffcd00120009a0120084000013e88013ffcec012000b8222001ba25a001b917401c90072001ea01200c81c5600688012010da213ffcde213ff8d00220049a013ffc4000015688013ff8b8222001b917200490072001ec01200081c5a00688012008de213ffcda213ff8d00220047ffffefe88013ff8b8222001b917200490072001ec01200481c5a006880120089010200581c3e00601000000de213ffcda213ff8fa022008fa213ff4fa02200cfa213ff0d00220047ffffeec88013ff0d0213ffcd0012004da0120087ffffee788013ffcec012000b8222001ba25a001b917401caa072001ea213ffcd00120049a0120104000015088013ffce8012000b8222001ba252001b917401ca6072001e6213ffca4102001e201200888013ffc80a4600132800005b824a001a01000121080000ade012000b91720049e072001e2046004a410000ff606201880a1001b8bd0201830bffff3b8242001ba23e001b917401c90072001c201201881c060068801201cda213ffcde213ff8d00220049a013ffc4000015288013ff8b8222001b917200890072001ec01200081c5a006880120089010200581c3e00601000000ec022008ea05a00080a5602932800017de213ffcda213ffcde213ff8fa02200cfa213ff4d005a0049a013ffc4000016288013ff4d0213ffcd0012000da0120087ffffe9e88013ffce8012000b8222001ba252001b917401c90072001e601200881c4e00688012010da213ff8fa022004fa213ff4ec213ff0d002200c7ffffe8f88013ff0d0213ffcd0012000da0120087ffffe8a88013ffce8012000b8222001ba252001b917401ca6072001e4012008ba24a001b917001d90072001e201201081c4600688012014de213ffcda213ff8fa022008fa213ff4d00220047ffffe7788013ff4ec012000b8222001ba25a001b917401caa072001b917200890072001e801200881c520068801200cec022004ea05a00080a57ffd3280000680a56005e805a004d005200810bffe66f606201832bffe63d005a004d005a00810bffe61f6062018|@4913,131071|56,4,$4903+82 452,5,@4904 480,4,I105 672,5,@4906 736,5,@4907 932,5,@4908 988,5,@4909 1164,5,@4910 1308,5,@4911 1396,5,@4912 4904:C2,124|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffc9010200181c3e00601000000da213ff8fa022004fa213ff4d0022000da036000f40360009fc6a00088013ff4d0213ffcd0012000da0120047fffffeb88013ffcc4012000b8222001ba20a001b917401c90072001ee01200c81c5e00688012010|@4905,131071| 4905:S34|42617365436f6465547265652e6973536d616c6c28322973697a654c697374283129 4906:C2,124|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffc9010200181c3e00601000000da213ff8fa022004fa213ff4d0022000da037ffcf40360009fc6a00088013ff4d0213ffcd0012000da0120047fffffeb88013ffcc4012000b8222001ba20a001b917401c90072001ee01200c81c5e00688012010|@4905,131071| 4907:C2,124|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffc9010200181c3e00601000000da213ff8fa022004fa213ff4d0022000da036000f40360009fc6a00088013ff4d0213ffcd0012000da0120047fffffeb88013ffcc4012000b8222001ba20a001b917401c90072001ee01200c81c5e00688012010|@4905,131071| 4908:C2,124|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffc9010200181c3e00601000000da213ff8fa022004fa213ff4d0022000da037ffcf40360009fc6a00088013ff4d0213ffcd0012000da0120047fffffeb88013ffcc4012000b8222001ba20a001b917401c90072001ee01200c81c5e00688012010|@4905,131071| 4909:C2,124|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffc9010200181c3e00601000000da213ff8fa022004fa213ff4d0022000da036000f40360009fc6a00088013ff4d0213ffcd0012000da0120047fffffeb88013ffcc4012000b8222001ba20a001b917401c90072001ee01200c81c5e00688012010|@4905,131071| 4910:C2,124|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffc9010200181c3e00601000000da213ff8fa022004fa213ff4d0022000da037ffcf40360009fc6a00088013ff4d0213ffcd0012000da0120047fffffeb88013ffcc4012000b8222001ba20a001b917401c90072001ee01200c81c5e00688012010|@4905,131071| 4911:C2,124|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffc9010200181c3e00601000000da213ff8fa022004fa213ff4d0022000da036000f40360009fc6a00088013ff4d0213ffcd0012000da0120047fffffeb88013ffcc4012000b8222001ba20a001b917401c90072001ee01200c81c5e00688012010|@4905,131071| 4912:C2,124|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffc9010200181c3e00601000000da213ff8fa022004fa213ff4d0022000da036000f40360009fc6a00088013ff4d0213ffcd0012000da0120047fffffeb88013ffcc4012000b8222001ba20a001b917401c90072001ee01200c81c5e00688012010|@4905,131071| 4913:S30|42617365436f6465547265652e6973536d616c6c28322973697a65283129 4914:C2,224|9e13e002f606201880a1001b8bd0201880a2200132800005c40220009010200181c3e00601000000de213ffcda213ff8fa00a004fa213ff4fa022004fa213ff0d000a000da036004f40360009fc6a00088013ff0d0213ffcae102001ec01200488013ffc80a5a00132800005b825e001aa1000171080000ae8012000b9172004a8072001ec05a004ae100014f606201880a1001b8bd0201830bffff3b8256001ba252001b917401ca6072001e6213ffcd0012004da01200c7fffffd288013ffce4012000b8222001ba24a001b917401c90072001e201201481c4600688012018|@4915,131071| 4915:S38|42617365436f6465547265652e6973536d616c6c28322973697a65436173654c697374283129 4916:C2,112|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffcd003600081c3e00601000000da213ff8fa022000fa213ff4d00220047ffffff288013ff48c21a00c8b19600cba1020029e100006fa21bffcd023e004da012000da23e0009010000fde01200881c3e0068801200c|@1966,161| 4917:C2,28|9e13e002c4036004ae102005ee20a000d002200081c3e00601000000|@4918,98465| 4918:S51|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d69736528322966696c74657241726773283129 4919:C2,112|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffcd0037fe481c3e00601000000da213ff8fa022000fa213ff4d00220047ffffff288013ff48c21a00c8b19600cba1020029e100006fa21bffcd023e004da012000da23e0009010000fde01200881c3e0068801200c|@1966,161| 4920:C2,132|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffc9010200181c3e00601000000da213ff8fa022004fa213ff4d00220004000001a88013ff4d0213ffcd0012000da0120047fffffed88013ffc8c21a00c8b19600cba10200284100006fa21bffcd020a004ee012000ee20a00090100002ec01200c81c5a00688012010|@586,131071|56,5,@4921 4921:C2,348|9e13e002f606201880a1001b8bd02018c402200080a0bff13280004bde213ffcde213ffcda213ff8fa022004fa213ff492102001d0022008da037ffc7fffd9e488013ff4ee012004ec05fffcea05a018e8056000b8252001b9172004a6072001e62560008c21a0188b196018ba102005a4100006fa21bffca2102001e224a010a0102001e024a00c9e102005de24a008e824a00482103fedc224a0008c21a00c8b19600cba1020029a100006fa21bffce423600498102001d8236000961000088c21a00c8b19600cba10200290100006fa21bffcda222004d4012000d4222000d6213ffce8213ff8da05bff4f40360009fc6a00088013ff8d00120047fffe76901000000921000088c21a0148b196014ba10200490100006fa21bffc84102001c422200cd2222008ee012000ee222004ac103ff1ec222000ea01201081c5600688012014113f027690022060f40620209fc6a00088013ffc90102001|@4924,131071|60,5,@4710 252,5,@4711 324,4,@4922 4922:O3|@24,@397,@4923 4923:S19|6465636c4172673a206e6f74204465636c6172 4924:S48|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d6973652832296465636c417267283129 4925:C2,28|9e13e002c4036004ae102005ee20a000d002200081c3e00601000000|@4918,98465| 4926:O3|@24,@397,@4927 4927:S26|4c6f6f703a206d69736d61746368656420426567696e4c6f6f70 4928:C2,148|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffc9010200181c3e00601000000da213ff8fa022004fa213ff492102001d0022000da0360007fffd95188013ff47fffe70401000000d0213ffcd0012000da0120047fffffe988013ffc8c21a00c8b19600cba10200284100006fa21bffcd020a004ee012000ee20a00090100002ec01200c81c5a00688012010|@586,131071|64,5,@4710 72,5,@4711 4929:O3|@24,@397,@4930 4930:S30|4c6f6f703a206e6f74206174207461696c206f6620426567696e4c6f6f70 4931:O2|0,@4932 4932:O2|9,0 4933:C2,832|9e13e002f606201880a1001b8bd02018c4037fe8ec00a00080a5bffd3280000680a5a005ea00a004ee05600010800006ea037fe432800003ae102001ee00a004ea037fe4e605600080a4fffd3280000680a4e005e4056004e804a00010800006d0213ffc32800003a8102001e8056004d0213ffcde213ff8da213ff4d4213ff0e8213fec94100009921000179010000b9a013ffc400000b288013fecd0213ffcd4012004d2012000d00120189a012010400000ab88013ffce401200ce204bffce0046018de042000c2012018b8206001ba23e001b917401c9a072001da2420008c21a0108b196010ba10200398100006fa21bffc173f02799602e090d6232000de232008d4012014d4232004d0213ffcde213ff89210000c901000014000029788013ff88c21a00c8b19600cba10200292100006fa21bffc053f02798400a348c4226000ee012000ee226004d0213ffcd00120204000028988013ffc8c21a0188b196018ba102005ac100006fa21bffcaa102001ea25a010a8102001e825a00ca6102005e625a008e4012020e425a004a2103fede225a0008c21a0108b196010ba102003a0100006fa21bffcde012024de242008ec2420048210202dc22420008c21a00c8b19600cba1020029a100006fa21bffcd023600498102029d82360008c21a00c8b19600cba10200296100006fa21bffcde22e0049410200dd422e0008c21a0148b196014ba10200492100006fa21bffc90102001d022600cd6226008e422600484103ff1c4226000ee0120188c21a0148b196014ba102004ac100006fa21bffcea012008ea25a00ce801200ce825a008e605ffece625a004a2102009e225a0008c21a00c8b19600cba10200282100006fa21bffcd8012000d8206004ec2060008c21a00c8b19600cba10200296100006fa21bffcc222e004d222e0008c21a0088b1960083b100000ba07600194100006fa21bffc92102001d222a000d005fffc8c21a00c8b19600cba10200284100006fa21bffc2d3f027aac05a00cec20a000ea02201cea20a0048c21a0188b196018ba102005a8100006fa21bffcda252010d425200ce0252008c4252004d62520008c21a00c8b19600cba10200290100006fa21bffce8222004a2103ffde2222000e001201c81c420068801202c|@4954,131071|148,5,@4934 176,5,@4934 244,4,@4946 284,5,@4948 312,4,@4950 340,5,@4948 728,4,@4952 4934:C2,292|9e13e002f606201880a1001b8bd02018808aa0013280000f8c21a018a410000fa210000d9e100009d202a0009010000f9a10001140000043010000009e100012353f0231b406a28081c6a004010000008b196018ba10200584100006fa21bffcae102001ee20a010ac102001ec20a00caa102005ea20a008e8036000e820a004a6103fede620a0008c21a00c8b19600cba102002a4100006fa21bffcd024a004a2102029e224a000de213ffcd2213ff8d40360049210001290100002400000af88013ff88c21a00c8b19600cba102002a0100006fa21bffc9e102001de242004d024200080a4200132800005e0213ffcd001200010800008de012004d00120009a0120044000014988013ffc88012004de012004353f0231b406a28081c6a00488012008|@4945,131071|52,5,@4935 64,4,@4488 188,5,@4939 260,5,@4944 276,4,@4488 4935:C2,412|9e13e002f606201880a1001b8bd0201880a220013280000ac4022000de213ffc113f027890022084f40620209fc6a00088013ffc90102001c4022000ee00a00080a5fff132800045de213ffcec00a004b8226001ba25a001811f401c3280002ede213ffcd2036000b8226001ba25a001811f401c328000058c21a018d002200481c3e006010000008b196018ba102005aa100006fa21bffca8102001e8256010a8102001e825600ca8102005e8256008d2256004a8103fede82560008c21a0148b196014ba102004a8100006fa21bffca6102001e625200cea252008ec252004aa103ff1ea2520008c21a00c8b19600cba102002a6100006fa21bffcea022004ea24e004e824e0009010001381c3e00601000000da213ff8c4213ff4d00220047fffffb888013ff48c21a00c8b19600cba102002aa100006fa21bffcd0256004e8012000e825600090100015e601200881c4e0068801200cda213ff8c4213ff4d00220047fffffa788013ff48c21a00c8b19600cba102002ac100006fa21bffcd025a004ea012000ea25a00090100016e801200881c520068801200c|@4938,129187|32,4,@4936 4936:O3|@24,@397,@4937 4937:S19|7265706c616365436f6e7461696e6572446563 4938:S76|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f6d62696e655475706c65732836297265706c616365436f6e7461696e6572446563283229 4939:C2,312|9e13e002f606201880a1001b8bd02018c402600080a0a0093280002280a0a025de213ffcd0213ff8d4213ff4fa026004fa213ff0fa02600cfa213fecd20260087ffffff088013fecd0213ffcd4012008d2012000d001200c7fffffea88013ffc9e1000088c21a0148b196014ba10200490100006fa21bffcde22200cd4012000d4222008d2012008d222200484102009c4222000de01201481c3e006880120183280001580a0bfd9d4213ffcd0213ff8de213ff4d00260049a013ffc4000002688013ff4ae1000088c21a00c8b19600cba10200290100006fa21bffcee222004ac102025ec222000ea01200081c560068801200c32800005ae1000089010000981c3e006010000008c21a0148b196014ba10200490100006fa21bffcee22200cd2222008d4222004ac103fd5ec22200081c3e00601000000|@4943,131071|188,5,@4940 4940:C2,228|9e13e002f606201880a1001b8bd0201880a220013280000ac4022004de213ffc113f00bc900220f0f40620209fc6a00088013ffc90102001c402200480a0a00132800017de213ffcde213ffcd4036000d2022000d0037ffc1b3f02789a036358f40360009fc6a00088013ffcae1000088c21a00c8b19600cba10200290100006fa21bffcac102001ec222004ee222000ea01200081c5600688012004da213ff8fa022000fa213ff4d00220047fffffd588013ff48c21a00c8b19600cba102002ae100006fa21bffcd025e004ec012000ec25e00090100017ea01200881c560068801200c|@4942,131071|32,4,@2144 88,4,@4941 4941:O1|@4939 4942:S40|434f44455452454528292e6d6b536574436f6e7461696e65722833296170706c794c617374283129 4943:S28|434f44455452454528292e6d6b536574436f6e7461696e6572283329 4944:C2,112|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffcd0037ff881c3e00601000000da213ff8fa022000fa213ff4d00220047ffffff288013ff48c21a00c8b19600cba1020029e100006fa21bffcd023e004da012000da23e0009010000fde01200881c3e0068801200c|@1966,161| 4945:S69|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f6d62696e655475706c65732836296372656174654272616e6368283329 4946:C2,172|9e13e002c4036008b820a001ba222001b917401cae0720018c21a0188b196018ba102005ac100006fa21bffcaa102001ea25a010aa102001ea25a00caa102005ea25a008ea036004ea25a004a8103fede825a0008c21a0108b196010ba102003a8100006fa21bffcd0252008ec25200490102019d02520008c21a0148b196014ba10200490100006fa21bffcac102001ec22200ce8222008ee222004a8103ff1e822200081c3e00601000000|@4947,127137| 4947:S69|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f6d62696e655475706c65732836297370656369616c446563732d283129 4948:C2,364|9e13e002f606201880a1001b8bd02018b8222001811f20003680000bb8222001de213ffcae100008113f0007900223e4f40620209fc6a00088013ffc84102001b8222001b917200484072001de213ffcd0213ff8d2213ff49410200192102101901000021b0000829a036338f40360009fc6a00088013ff4ee012004ee22200084100008c4213ffcac10200188013ffcea012008b825a001ba256001811f401c34800004ec213ffc10800015e801200090100016da012004f40360009fc6a00088013ffce8012000b8252001b9172004a6072001e4012004d024801cb8252001b9172004ac07200188012004f606201880a1001b8bd0201830bfffe6e6052000a410200180a4e00132800006a2a4e00490100012e201200c81c4600688012010a0a4e004b8242001b91720049e072001c2012000da00401c8c21a00c8b19600cba10200298100006fa21bffce4232004da232000a6100011a410000cf606201880a1001b8bd0201830bfffe7|@4949,131071|40,4,@251 100,4,I11 4949:S16|4c6973742e746162756c617465283229 4950:C2,88|9e13e002c4036004b820a001ba222001b917401cae0720018c21a0188b196018ba10200590100006fa21bffcac102001ec222010ac102001ec22200cac102005ec222008ee222004ae103fedee22200081c3e00601000000|@4951,114849| 4951:S72|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f6d62696e655475706c65732836297370656369616c456e74726965732d283129 4952:C2,160|9e13e002f606201880a1001b8bd02018c40220008c21a0188b196018ba102005ae100006fa21bffcec00a00cec25e010ea00a008ea25e00ce800a004e825e008e600a000e625e004a4103fede425e0008c21a00c8b19600cba102002a4100006fa21bffcee24a004ae102001ee24a000ee022004e2036004b8246001ba25e001b91f401ca00720019210001290100010353f000fb406a3d481c6a00401000000|@4953,131071|144,4,@398 4953:S60|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f6d62696e655475706c6573283629656e76283129 4954:S54|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f6d62696e655475706c6573283629 4955:C2,820|9e13e002f606201880a1001b8bd02018da213ffc80a220011280000688013ffc113f02769002221881c3e00688012004c4022000ee00a00080a5fff13280000c80a5ffddde213ffcd400a004d200a008d00220049a012000400000be88013ffcec01200081c5a006880120083280000bec022004de213ffcd200a004d00220049a0120004000019d88013ffcec01200081c5a0068801200880a5a00132800009de213ffcd2037ffcd0022000da036000353f024fb406a2b481c6a00488012004ec213ff892102001d0022000da0360007fffd52688013ff8d0213ffcd0012000da0120087fffffc788013ffce802200080a53ffd3280000680a52005e6022004ea04e0081080000680a53ffd32800003ea022004ea02200880a53ffd3280000601000000e4022004e604a0101080000580a53ffd273f002ba604e25c80a53ffd3280000601000000e2022004e404600410800005e2012000253f0283a404a0f4e2012000de04600080a3fffd3280000680a3e005c2046004e00060001080000680a3fffd32800003a0102001e004600480a3fffd3280000680a3e005da046004c20360081080000680a53ffd32800003c2046004c204600880a53ffd3280000680a52005d8022004da032000108000068c21a00c328000039a102001da0220048c21a00c8b19600cba10200298100006fa21bffcda232004c223200080a3200132800005d8213ffc961000101080000bc402200094100008901000109a01200c4000087388013ffc961000089010000a88012004c402200080a0bffd328000068c21a008ee022004d205e00c1080000a8c21a0188b1960083b100000ba07600192100006fa21bffcae102001ee2260008c21a0188b196018ba102005ac100006fa21bffce625a010d225a00cea25a008e425a004d625a000e804e00080a53ff93280001b8c21a00c80a2e0013280000d8c21a0108c21a00c8b19600cba10200290100006fa21bffcea222004a4102001e4222000e201200881c46006880120108b196010ba10200390100006fa21bffcea222008d6222004a4102005e4222000e201200881c46006880120108b19600cba10200290100006fa21bffcec222004a4103ffde4222000e201200881c4600688012010|@5000,131071|32,4,@4931 88,5,@4956 132,5,@4961 176,4,@4710 208,5,@4710 308,4,@581 344,4,@4997 544,5,@4999 4956:C2,632|9e13e002f606201880a1001b8bd02018c4036000ee00a000de213ffcda213ff8d0213ff4d4213ff0fa05fff4fa213fecac10000992102001901000169a1000177fffd47688013fec96102005d401200492100008d0012000ea01200ce8056000da0520007fffe62401000000d0213ffcd0012008e601200cda04e0007fffff0d88013ffce401200080a4a00132800005e0022000e201201481c460068801201880a43ffd3280000680a42005de022004e203e0081080000680a43ffd32800003e2022004e202200880a43ffd3280000601000000c2022004de0060101080000580a43ffd1f3f002b9e03e25c80a43ffd3280000601000000da022004c20360041080000580a43ffd033f027b8200633080a43ffd3280000680a42005d8022004da0320001080000680a36001328000039a102001da02200480a3600132800005da213ffc981000121080000dc4022000961000089410000f901000129a0120144000005e88013ffc981000089e10000a9010000b88012004c402200080a0bffd328000068c21a008ee022004d205e00c1080000a8c21a0188b1960083b100000ba07600192100006fa21bffcae102001ee2260008c21a0188b196018ba102005ac100006fa21bffcde25a010d225a00ce225a008c225a004d825a000ea03e00080a57ff93280001b8c21a00c80a320013280000d8c21a0108c21a00c8b19600cba10200290100006fa21bffce2222004a8102001e8222000e601201481c4e006880120188b196010ba10200390100006fa21bffce2222008d8222004a8102005e8222000e601201481c4e006880120188b19600cba10200290100006fa21bffcec222004a8103ffde8222000e601201481c4e00688012018|@4960,131071|64,5,@4710 100,5,@4798 124,5,@4955 228,4,@581 264,4,@4957 352,5,@4959 4957:O1|@4958 4958:C2,32|9e13e002de213ffc113f002c9002208cf40620209fc6a00088013ffc90102001|@593,129|8,4,@591 4959:C2,112|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffcd0037fe881c3e00601000000da213ff8fa022000fa213ff4d00220047ffffff288013ff48c21a00c8b19600cba1020029e100006fa21bffcd023e004da012000da23e0009010000fde01200881c3e0068801200c|@1966,161| 4960:S59|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70794465636c61726174696f6e732831292f32 4961:C2,1836|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d0213ff4053f00258400a27c88013ff480a2600132800005c2026004ae1000021080000dec012004da026000921000029010000d400001bf010000008410000892100001f606201880a1001b8bd0201830bffff0ea05a000e8056000e6052018e404e000fa05e000fa213ffcfa05e004fa213ff8e4213ff4d0013ff89a0120084000021b88013ff4e2012010e0046000de042000c203e018da006000d0213ffcda213ff8d801200888013ff880a3200132800005d403200096102001108000308c21a008d202a00080a27ff13280002101000000d0012018c4022000ee00a000fa032004fa213ffcfa02a004fa213ff8fa05fff4fa213ff492102001d002a008ec012018ea05a000da0560007fffd35388013ff4a81000088c21a00c8b19600cba10200290100006fa21bffce8222004e6012004e6222000da012000f40360009fc6a0000100000010800008d8012008113f027e900222dcf40620209fc6a00001000000d80120088801200cf606201880a1001b8bd0201830bfffcd8b1960083b100000ba07600194100006fa21bffc92102001d222a0008c21a0148b196014ba10200490100006fa21bffc053f027e8400a30cc4222000ee012008ee22200cec012000ec222008d4222004d0213ffcd4213ff8901020019a01201c4000028188013ff8d0213ffcaa10200588013ffc80a2200132800005e6022000a810001510800012e6012004e204e00080a47ff132800008a4102001e004e008de04200080a3fff532800003a4102001a4100015aa100012d0022004f606201880a1001b8bd0201830bfffebe404e00080a4a0012280000480a5200110800087e201200032800085e2012000d00120001b3f02819a036254f40360009fc6a000010000008c21a00c8b19600cba102002a2100006fa21bffce0012000e02460049e103fddde2460008c21a00c8b19600cba10200282100006fa21bffcd02060049a102029da206000e2213ffcc2213ff888013ff880a2200132800005d6022000981020051080000c80a32001d402e00080a2bff53280000798102001d0022004f606201880a1001b8bd0201830bffff280a320012280000dd2012000d00120007ffee973010000008c21a00c8b19600cba10200292100006fa21bffcd022600490103ff5d02260008c21a00c8b19600cba10200290100006fa21bffc84102001c4222004d22220008c21a00c8b19600cba102002ae100006fa21bffcd025e004ec012004ec25e0008c21a00c8b19600cba102002aa100006fa21bffcee256004a8102025e8256000e601202ce404e000e204a00090100015da046010f40360009fc6a00001000000d0213ffce0012020de012018033f00258200627c88013ffc808c2001328000239a100001808be001328000209a100001d0213ffcd0213ff8fa042004fa213ff4fa03e004fa213ff096013ff894100001d203e000d00420009a012034400004c188013ff08c21a00c8b19600cba10200298100006fa21bffcd6012008d6232000d401200cd42320048210000cde012000e001200488012010f606201880a1001b8bd0201830bfffdde20360048801200ce2213ffcd0012020da012024da0360007ffffd1b88013ffcd601200080a2e00132800005d0213ffc9810200110800027e2022000d0213ff8d402e00480a2a0011280000a88013ff892012000c402e000c4226000ae012000ac102001ec25e004108000108c21a00c8c21a00c8b19600cba10200292100006fa21bffcd622600484103fddc4226000ae012000d225e000ac012000aa102001ea25a0048c21a00c8b19600cba10200298100006fa21bffce8012000e8232000e6012004e623200488012008e202200080a47ffd3280000680a46005e0022004e40420081080000680a47ffd32800003e4022004e402200880a47ffd3280000601000000de022004e003e0101080000580a47ffd213f002ba004225c80a47ffd3280000601000000c2022004de0060041080000580a47ffd1f3f02829e03e3e080a47ffd3280000680a46005da022004c20360001080000680a060013280000382102001c202200480a0600132800005c2213ffc9a10000c1080000dc4022000961000089410000f9010000c9a01202c4000057388013ffc9a1000089e10000a9010000b88012004c402200080a0bffd328000068c21a008ee022004d205e00c1080000a8c21a0188b1960083b100000ba07600192100006fa21bffcae102001ee2260008c21a0188b196018ba102005ac100006fa21bffce025a010d225a00ce425a008de25a004da25a000ea04200080a57ff93280001b8c21a00c80a360013280000d8c21a0108c21a00c8b19600cba10200290100006fa21bffce4222004a8102001e8222000e601202c81c4e006880120308b196010ba10200390100006fa21bffce4222008da222004a8102005e8222000e601202c81c4e006880120308b19600cba10200290100006fa21bffcec222004a8103ffde8222000e601202c81c4e00688012030|@4996,131071|28,4,@499 76,5,@4962 152,5,@4964 292,5,@4710 360,4,@4965 452,4,@4967 500,5,@4969 644,4,@4983 820,5,@3258 1000,4,@499 1080,5,@4987 1180,5,@4955 1432,4,@581 1468,4,@4993 1556,5,@4995 4962:C2,336|9e13e002d0213ffcd0213ff8c402200080a0bff11280003788013ff8ee022008ec05e00080a5bfe5328000248c21a00cea05e004e805601480a52001328000118c21a00c8c21a00c8b19600cba102002a6100006fa21bffce4026000e424e004d024e000a2012000e6246000a6012000e2026004e224e0041080002c8c21a00c8b19600cba102002a6100006fa21bffce4026004e424e004d024e000a2012000e0026000e0246000a2012000e62460041080001e8c21a00c8b19600cba102002aa100006fa21bffce8026004e8256004d0256000a6012000e4026000e424e000a2012000ea246004108000108c21a00c8c21a00c8b19600cba102002ae100006fa21bffcec026004ec25e004d025e000aa012000e8026000e8256000a6012000ee24e0048c21a00c8b19600cba10200290100006fa21bffce4012000e4222000e2012004e222200481c3e00688012008|@4963,130947| 4963:S70|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70794465636c61726174696f6e732831293c7061747465726e3e2d283229 4964:C2,376|9e13e002f606201880a1001b8bd0201880a2200132800005c40220009010200181c3e00601000000ec00a00080a5bff13280003bde213ffcea037ffce8056000e6052000e404e018e204a0008c21a0188b196018ba102005a0100006fa21bffc82102001c224201098102001d824200c96102005d6242008e224200494103fedd42420008c21a00c8b19600cba10200292100006fa21bffce0226004ae102001ee226000e00220048c21a00c8b19600cba10200290100006fa21bffcd2222004c200a004c2222000de213ffcda213ff8e0213ff4e2213ff0da04fff4f40360009fc6a00088013ff0da012008d8037ffcd6032000d402e000d202a018d0026000b8222001b917200484072001c4226000ee0120001080000aee213ffcea022004113f027e900222dcf40620209fc6a00088013ffcae102001ee213ffcd00120047fffffb088013ffc8c21a00c8b19600cba102002ae100006fa21bffcd025e004ec012000ec25e00090100017ea01201081c5600688012014|@586,131071|288,4,@4965 4965:O3|@24,@397,@4966 4966:S22|6d757475616c446563733a206e6f74204465636c6172 4967:C2,196|9e13e002c402200080a0bfed32800029ee036004ee02200880a5e00532800020ec036004ec02200c80a5a00132800017ea036004ea022004e803600cb8252001ba256001811f401c2680000be6036004e6036008b824e001ba256001811f401c36800005e60360049010200181c3e00601000000a4102005e424e0009010200181c3e00601000000a8102005e82560009010200181c3e00601000000aa102005ea25a0009010200181c3e00601000000ac102005ec25e0009010200181c3e00601000000|@4968,130209| 4968:S72|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70794465636c61726174696f6e73283129636865636b436c6f73757265283129 4969:C2,92|9e13e002f606201880a1001b8bd02018da213ffcde213ff8d2037fe8d0037ff09a013ffc4000001588013ff8c402200480a0a00122800007d002200090102001da012004de01200010bfffef88012008ee01200081c5e00688012008|@4982,131071|36,5,@4970 4970:C2,200|9e13e002f606201880a1001b8bd02018808a20013280002901000000808a60013280002201000000de213ffcda213ff8fa022000fa213ff4fa026000fa213ff0d2026004d00220047fffffee88013ff0d0213ffcd0213ff896013ff894100008d2012000d0012004c4012008da00a0004000001d88013ff88c21a00c8b19600cba10200290100006fa21bffcee012000ee222000ec012004ec222004ea01201481c5600688012018113f00259002227c81c3e00601000000113f00259002227c81c3e00601000000|@4981,131071|112,5,@4971 168,4,@499 184,4,@499 4971:C2,1788|9e13e002f606201880a1001b8bd02018c402200080a0bff1328001b3de213ffcee037ffcec05e000ea05a0008c21a0148b196014ba102004a8100006fa21bffca6102001e625200ca4102001e4252008a2102005e2252004e0022004e0252000c20220088c21a0108b196010ba10200390100006fa21bffc98102001d8222008c405601cc4222004e8222000de213ffcda213ff8d2213ff4d6213ff0e0213fecc2213fe8fa02a000fa213fe4fa02a004fa213fe0da057ff8f40360009fc6a00088013fe0ec02200080a5bffd3280000680a5a005ea022004ee05600810800006ea05e00032800003ee022004ee022008ea05e00080a57ff53280001ee80120188c21a0148b196014ba102004a8100006fa21bffca6102001e625200cee252008e4012014e4252004a2103ff1e22520008c21a00c8b19600cba102002a0100006fa21bffcde012004de242004e8242000c2012010e0206000da012000da20600490102001d801201c81c3200688012020e6053ffce404e000e204a000a01000088c21a00c8b19600cba10200290100006fa21bffc1f3f02819e03e0b0de222004c201200cc2222000e0213ffcda047ff4f40360009fc6a00088013ffcda01201cd8037ffcd6032000d402e0008c21a00c8b19600cba10200290100006fa21bffc133f0281920260b0d2222004c4012018c4222000da02a020f40360009fc6a0000100000092102001d001200cee01201cec05fffcea05a000da0560007fffcfc001000000e602200080a4fffd3280000680a4e005e4022004e804a0081080000680a4fffd32800003e8022004e802200880a4fffd3280000601000000e2022004e404601010800005e0052000253f002ba404a25ce005200080a43ff532800003a2102001a210200580a43ff53280000580a43fe59e10001410800037d0213ffc3280002d82100008c2052004da01201cd0213ffce8213ff8e4213ff4e2213ff0fa037fe0fa213fecd800600c88013fec80a3200132800004fa0320041080000e8c21a018fa213ffcd0032000da012000f40360009fc6a00088013ffcd801200088012004f606201880a1001b8bd0201830bffff08b196018ba1020059e100006fa21bffc96102001d623e01094102001d423e00c92102005d223e008d001202cd023e00484103fedc423e0001080000801000000113f0281900220d4f40620209fc6a000010000009e1020011080000688012004e8213ff8e4213ff4e2213ff088013ff0c201202cda007ffcd8036000d60320008c21a00c8b19600cba10200294100006fa21bffcde22a00492102001d222a0008c21a00c8b19600cba10200290100006fa21bffcd4222004c4012028c4222000de213ffcda02e020f40360009fc6a00088013ffcee012008ea05e00080a57fe532800017e8012010e805e004e605201480a4fffd32800006e40120102d3f002bac05a25c10800019e405a000e204a00080a47ffd3280000601000000e004a004ec04201010800011e405a0002d3f002bac05a25c1080000de405a000e605200080a4fffd3280000601000000e4052004ec04a01010800005e405a0002d3f002bac05a25ce405a00080a4bff922800012a2102001e0012014c204200080a07ffd3280000601000000da042004de03601010800005da03e0001f3f002b9e03e25cda03e00080a37ff932800003a2102001a2102005e0012030de043ffcc203e000da006000d8012010d403200080a2bffd3280000601000000d2032004d60260041080000580a2bffd173f02819602e11080a2bffd3280000680a2a005d0032004d20220001080000680a2bffd3280000392102001d203200480a2bffd328000068c21a008c4032004d000a00c1080000a8c21a0188b1960083b100000ba07600190100006fa21bffc84102001c42220008c21a0188b196018ba102005a8100006fa21bffcec252010d025200ce6012000e6252008d6252004d225200080a4bff9328000198c21a00c80a260013280000c8c21a0108c21a00c8b19600cba10200296100006fa21bffce622e00492102001d222e000108000148c21a00c8b196010ba10200396100006fa21bffce622e008d222e00492102005d222e0001080000a8c21a00c8b19600cba10200296100006fa21bffce822e00492103ffdd222e0008c21a00c8b19600cba10200290100006fa21bffcd6222004c4012024c4222000e2213ffcda037ff4f40360009fc6a00088013ffc8c21a0148b196014ba102004ae100006fa21bffcac102001ec25e00cea012010ea25e008e8012030e825e004a6103ff1e625e0008c21a00c8b19600cba102002a4100006fa21bffce2012020e224a004ee24a000e001201c80a4200122800005de0120089e10200510800007c201202c80a3e00122800003de0120009e102005c201202ce4206000de20600490102001da01203881c360068801203c113f028190022154f40620209fc6a00088013ffc90102001|@4980,131071|404,4,@4972 480,4,@4972 540,5,@4710 620,4,@581 852,4,@4974 1040,4,@581 1088,4,@581 1136,4,@581 1196,4,@581 1276,4,@4976 1764,4,@4978 4972:O2|0,@4973 4973:O5|-5,0,0,-1,0 4974:O3|@24,@397,@4975 4975:S33|70726f636573734e6f6e496e6c696e65733a204e6f7420612066756e6374696f6e 4976:O1|@4977 4977:C2,32|9e13e002de213ffc113f002c9002208cf40620209fc6a00088013ffc90102001|@593,129|8,4,@591 4978:O3|@24,@397,@4979 4979:S29|70726f636573734e6f6e496e6c696e65733a206e6f74204465636c6172 4980:S77|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70794465636c61726174696f6e7328312970726f636573734e6f6e496e6c696e6573283429 4981:S17|4c697374506169722e666f6c6472283429 4982:S73|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70794465636c61726174696f6e7328312972657065617450726f63657373283129 4983:O1|@4984 4984:C2,220|9e13e002f606201880a1001b8bd0201880a2200132800005c40220009010200181c3e00601000000ec00a00080a5bff132800013de213ffc8c21a0188b196018ba102005ae100006fa21bffcaa102001ea25e010aa102001ea25e00caa102005ea25e008ea00a004ea25e004a8103fede825e0001080000ade213ffcea022004113f028190022354f40620209fc6a00088013ffcae102001de213ffcee213ff8d00220047fffffd788013ff88c21a00c8b19600cba1020029e100006fa21bffcd023e004d0012000d023e0009010000fc401200481c0a00688012008|@586,127105|128,4,@4985 4985:O3|@24,@397,@4986 4986:S20|65787472616374733a206e6f74204465636c6172 4987:C2,888|9e13e002f606201880a1001b8bd02018c402200080a0bff1328000d2de213ffcee037ffcec05e000ea05a0008c21a0148b196014ba102004a8100006fa21bffca6102001e625200ca4102001e4252008a2102005e2252004e0022004e02520008c21a0108b196010ba10200390100006fa21bffc82102001c2222008d805601cd8222004e8222000de213ffcda213ff8d2213ff4d6213ff0e0213fecfa02a000fa213fe8fa02a004fa213fe4da057ff8f40360009fc6a00088013fe4d6012014d0213ffcd202ffccd00120047ffee27288013ffcd4012018d202bffcc4026000ee00a0008c21a00c8b19600cba102002ac100006fa21bffcd025a004aa102001ea25a000a81000088c21a00c8b19600cba10200290100006fa21bffcec222004e6012014e6222000e8213ffcda05e020f40360009fc6a00088013ffce401201ce204bffce0046000de042000c2012004d800600080a33ffd3280000601000000d6006004da02e0101080000580a33ffd1b3f002b9a03625c80a33ffd3280000601000000d4006004d602a0041080000580a33ffd173f02829602e31480a33ffd3280000680a32005d2006004d40260001080000680a33ffd3280000394102001d400600480a33ffd328000068c21a008d0006004d202200c1080000a8c21a0188b1960083b100000ba07600192100006fa21bffc90102001d02260008c21a0188b196018ba10200584100006fa21bffcda20a010d220a00cee012000ee20a008d620a004d420a000ea03600080a57ff9328000198c21a00c80a2a0013280000c8c21a0108c21a00c8b19600cba102002ac100006fa21bffcee25a004a8102001e825a000108000148c21a00c8b196010ba102003ac100006fa21bffcee25a008d425a004a8102005e825a0001080000a8c21a00c8b19600cba102002ac100006fa21bffcc425a004a8103ffde825a0008c21a00c8b19600cba10200290100006fa21bffcec222004e6012010e6222000da03fff4f40360009fc6a00001000000e401200cb824a001b9172004a20720018c21a0148b196014ba102004a0100006fa21bffc9e102001de24200cc2012000c2242008da012018da24200498103ff1d82420008c21a00c8b19600cba10200296100006fa21bffcd4012008d422e004e022e000d2012014e2226000d622600490102001c401202081c0a00688012024113f028290022358f40620209fc6a00088013ffc90102001|@4992,131071|204,5,@3251 368,4,@581 404,4,@4988 864,4,@4990 4988:O1|@4989 4989:C2,32|9e13e002de213ffc113f002c9002208cf40620209fc6a00088013ffc90102001|@593,129|8,4,@591 4990:O3|@24,@397,@4991 4991:S24|726570726f636573734465633a206e6f74204465636c6172 4992:S77|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70794465636c61726174696f6e73283129646563732d726570726f63657373446563283429 4993:O1|@4994 4994:C2,32|9e13e002de213ffc113f002c9002208cf40620209fc6a00088013ffc90102001|@593,129|8,4,@591 4995:C2,112|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffcd0037fd081c3e00601000000da213ff8fa022000fa213ff4d00220047ffffff288013ff48c21a00c8b19600cba1020029e100006fa21bffcd023e004da012000da23e0009010000fde01200881c3e0068801200c|@1966,161| 4996:S59|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70794465636c61726174696f6e732831292f33 4997:O1|@4998 4998:C2,32|9e13e002de213ffc113f002c9002208cf40620209fc6a00088013ffc90102001|@593,129|8,4,@591 4999:C2,112|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffcd0037ff081c3e00601000000da213ff8fa022000fa213ff4d00220047ffffff288013ff48c21a00c8b19600cba1020029e100006fa21bffcd023e004da012000da23e0009010000fde01200881c3e0068801200c|@1966,161| 5000:S57|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70794465636c61726174696f6e73283129 5001:C2,712|9e13e002f606201880a1001b8bd0201880a260013280000b8c21a00c9a102001da22a00092102001d222a00490102001d022a0089010200181c3e006010000008b19600cba10200284100006fa21bffc2f3f0284ae05e0ecee20a000ee037fe8ee20a004de213ffcda213ff8d0213ff4d4213ff0fa026004fa213fecc4213fe8ec0260009210200190100016da037ff47fffcc0788013fe896102005d401200c92100008d0012000ea012010da057ff47fffddb601000000e8012010a6100008d201200cd0053fe87ffda8f901000000808a20013280000501000000e402200010800009e201200c113f000f9002239cf40620209fc6a00001000000a4102001e201200cb8246001b9172004a0072001d0213ffcd0213ff8d0213ff4e6213ff0e4213fec94013ff4d201200490100010da0120107fffffb388013fecde012000da03e00080a37ffd3280000680a36005d803e004c20320081080000680a37ffd32800003c203e004c203e00880a37ffd3280000601000000d603e004d802e01010800005d6006000193f002b9803225cd600600080a2fff532800004d20120241080000694102001d0027fec84102001c422200094102001d403200080a2bff9328000108c21a01880a2fff53280000d8c21a0188c21a00c8b19600cba10200290100006fa21bffcc4012010c4222004c2222000921000081080001a8c21a00c8b196018ba10200592100006fa21bffc90102001d022601084102001c422600cae102005ee226008ec012020ec226004aa103fedea2260008c21a00c8b19600cba102002a8100006fa21bffce6012010e6252004d2252000921000148c21a00c8b19600cba102002a4100006fa21bffce201200ce224a004c224a000d001200880a2200132800005d0012004e001200410800007c401201c9a0120284000002b01000000a0100008c401201ce020a000e420a004d220a00890102001ee01202881c5e0068801202c|@5004,131071|80,4,@5002 144,5,@4710 176,5,@4798 200,5,@608 232,4,@395 392,4,@581 668,5,@5003 5002:C2,72|9e13e002f606201880a1001b8bd020188c21a0088b196008ba10200184100006fa21bffcee022004ee20a00094100002d2022000d0036004353f016eb406a31881c6a00401000000|@4890,131071|56,4,@3309 5003:C2,112|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffcd0037fe081c3e00601000000da213ff8fa022000fa213ff4d00220047ffffff288013ff48c21a00c8b19600cba1020029e100006fa21bffcd023e004da012000da23e0009010000fde01200881c3e0068801200c|@1966,161| 5004:S49|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d6973652832296d616b6544656373283329 5005:C2,708|9e13e002f606201880a1001b8bd02018de213ffcda213ff892100008d0037ff87ffedff788013ff8c4012000ee00bff4ea05e00080a57ffd3280000601000000e805e004ec05200410800005e800bffc2d3f0285ac05a0f8e800bffce6052020e6213ffce405201ce4213ff8e2052018e2213ff4e0052014e0213ff0de052010de213fec82102001c2213fe8da052008da213fe4d8052004d8213fe0d6053ff494100016133f02859202613cda052000f40360009fc6a00088013fe0d402200080a2bffd3280000680a2a005d2022004d60260081080000680a2bffd32800003d6022004d602200880a2bffd3280000601000000c4022004d200a0101080000580a2bffd133f002b9202625c80a2bffd3280000601000000ee022004c405e00410800005ee012000053f02858400a180ee012000ec05fff4e805a00080a53ffd3280000680a52005e605a004ea04e0001080000680a2bffd32800003aa102001ea05a00480a2bffd3280000680a2a005e4022004e604a0001080000680a4e00132800003a6102001e602200480a4e00132800005e6213ffca41000151080000bde022000a2100008901000159a0120044000007f88013ffca41000089010001188012004de02200080a3fffd328000068c21a008c2022004e000600c1080000a8c21a0188b1960083b100000ba076001a0100006fa21bffc82102001c22420008c21a0188b196018ba1020059a100006fa21bffcd2236010e023600cd6236008c4236004e4236000d802600080a33ff93280001b8c21a00c80a4a0013280000d8c21a0108c21a00c8b19600cba10200290100006fa21bffcd622200496102001d6222000d401200481c2a006880120088b196010ba10200390100006fa21bffcd6222008e422200496102005d6222000d401200481c2a006880120088b19600cba10200290100006fa21bffcda22200496103ffdd6222000d401200481c2a00688012008|@5013,131071|32,5,@3251 80,4,@5006 164,4,@5008 260,4,@581 296,4,@5010 432,5,@5012 5006:O1|@5007 5007:C2,32|9e13e002de213ffc113f002c9002208cf40620209fc6a00088013ffc90102001|@593,129|8,4,@591 5008:O1|@5009 5009:C2,32|9e13e002de213ffc113f002c9002208cf40620209fc6a00088013ffc90102001|@593,129|8,4,@591 5010:O1|@5011 5011:C2,32|9e13e002de213ffc113f002c9002208cf40620209fc6a00088013ffc90102001|@593,129|8,4,@591 5012:C2,112|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffcd0037ff881c3e00601000000da213ff8fa022000fa213ff4d00220047ffffff288013ff48c21a00c8b19600cba1020029e100006fa21bffcd023e004da012000da23e0009010000fde01200881c3e0068801200c|@1966,161| 5013:S40|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d6973652832292f31 5014:C2,148|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffc9010200181c3e00601000000da213ff8fa022004fa213ff492102001d0022000da037ffc7fffc9fd88013ff47fffd7b001000000d0213ffcd0012000da0120047fffffe988013ffc8c21a00c8b19600cba10200284100006fa21bffcd020a004ee012000ee20a00090100002ec01200c81c5a00688012010|@586,131071|64,5,@4710 72,5,@4711 5015:O3|@24,@397,@5016 5016:S35|6f7074696d697365202d20636f6e7461696e6572206973206e6f742045787472616374 5017:C2,276|9e13e002f606201880a1001b8bd02018c4036008b820a001ba222001b917401cae072001ec036004e805a00080a53ffd3280000680a52005e605a004ea04e00810800006e605600032800003ea05a004ea05a008e605600080a4e0153280000a80a4fff5de213ffcee213ff8921000157ffede8e88013ff8a6100008108000188c21a0143280000a8c21a010de213ffcee213ff8921000157ffede8488013ff8a61000081080000e8c21a0148b196010ba102003a6100006fa21bffcd024e008ea24e004a4102019e424e000de213ffcee213ff888013ff88c21a0148b196014ba10200490100006fa21bffca2102001e222200ce6222008e0012000e02220049e103ff1de222000c201200481c0600688012008|@5018,131071|112,5,@3251 152,5,@3251 5018:S53|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d6973652832297370656369616c446563732d283129 5019:C2,88|9e13e002c4036004b820a001ba222001b917401cae0720018c21a0188b196018ba10200590100006fa21bffcac102001ec222010ac102001ec22200cac102005ec222008ee222004ae103fedee22200081c3e00601000000|@5020,114849| 5020:S56|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d6973652832297370656369616c456e74726965732d283129 5021:C2,112|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffcd0037fec81c3e00601000000da213ff8fa022000fa213ff4d00220047ffffff288013ff48c21a00c8b19600cba1020029e100006fa21bffcd023e004da012000da23e0009010000fde01200881c3e0068801200c|@1966,161| 5022:C2,160|9e13e002f606201880a1001b8bd02018c40220008c21a0188b196018ba102005ae100006fa21bffcec00a00cec25e010ea00a008ea25e00ce800a004e825e008e600a000e625e004a4103fede425e0008c21a00c8b19600cba102002a4100006fa21bffcee24a004ae102001ee24a000ee022004e2036004b8246001ba25e001b91f401ca00720019210001290100010353f000fb406a3d481c6a00401000000|@392,131071|144,4,@398 5023:C2,1348|9e13e002f606201880a1001b8bd02018c402200080a0a0093280005780a0a025de213ffcda213ff8d2213ff4fa022004fa213ff0fa02200cfa213fec92102001d00220087fffffef88013fecae10200180a22001328000058c21a00c901000171080000f010000008b19600cba102002ac100006fa21bffcee25a004ea022000ea25a000ae100016d0022004f606201880a1001b8bd0201830bfffee7fffaac301000000d0213ffc92102001d0012000da01200c7fffffd388013ffcac10200180a22001328000058c21a00c901000161080000f010000008b19600cba102002aa100006fa21bffcec256004e8022000e8256000ac100015d0022004f606201880a1001b8bd0201830bfffee7fffaaa7010000008c21a0148b196014ba102004aa100006fa21bffcd025600ce8012000e8256008de012008de2560049a102009da2560008c21a00c8b19600cba10200292100006fa21bffcd001200cd0226004ea22600090100009c401201481c0a006880120183280002580a0a02dde213ffcda213ff8ee02200488013ff880a5e00132800009ec05e004113f00bc900220f0f40620209fc6a0000100000090102001ec05e00480a5a001328000078c21a00cd005e000da012000de01200410bfff8e880120088b19600cba102002aa100006fa21bffcd2256004e805e000e8256000ee05e00492100015f606201880a1001b8bd0201830bfffe2328000ba8c21a014ee022004ec05e00080a5bfed328000a08c21a014ea05e00880a56005328000878c21a014e805e00c80a520013280006e8c21a014e6022008e4037ff8b824a001ba24e001811f401c328000538c21a014e2037ff0e004600080a43fed3280003b8c21a014c204600880a06005328000248c21a014d804600c80a320013280000d8c21a014fa046004fa213ffcfa05e004fa213ff89610000f901000099a013ffc400000ac88013ff881c2e006880120088b196014ba10200496100006fa21bffce222e00cd022e008e422e00494103fd5d422e0008c21a00c8b19600cba10200294100006fa21bffcd222a004d622a0009010000a81c3e006010000008b196014ba10200498100006fa21bffce223200cd0232008e423200496103fd5d62320008c21a00c8b19600cba10200294100006fa21bffcd222a004d822a0009010000a81c3e006010000008b196014ba10200482100006fa21bffce220600cd0206008e420600498103fd5d82060008c21a00c8b19600cba10200296100006fa21bffcd222e004c222e0009010000b81c3e006010000008b196014ba102004a2100006fa21bffce0037ff0e024600cd0246008e424600482103fd5c22460008c21a00c8b19600cba10200298100006fa21bffcd2232004e22320009010000c81c3e006010000008b196014ba102004a6100006fa21bffce4037ff0e424e00cd024e008e2037ff8e224e004a0103fd5e024e0008c21a00c8b19600cba10200282100006fa21bffcd2206004e62060009010000181c3e006010000008b196014ba102004a8100006fa21bffce6037ff0e625200cd0252008e4037ff8e4252004a2103fd5e22520008c21a00c8b19600cba102002a0100006fa21bffcd2242004e82420009010001081c3e006010000008b196014ba102004aa100006fa21bffce8037ff0e825600cd0256008e6037ff8e6256004a4103fd5e42560008c21a00c8b19600cba102002a2100006fa21bffcd2246004ea2460009010001181c3e006010000008b196014ba102004ae100006fa21bffcec037ff0ec25e00cd025e008ea037ff8ea25e004a8103fd5e825e0008c21a00c8b19600cba102002a6100006fa21bffcd224e004ee24e0009010001381c3e00601000000|@5026,131071|156,5,@4488 268,5,@4488 408,4,@2144 688,5,@5024 5024:C2,388|9e13e002f606201880a1001b8bd0201880a220013280000ac4022000de213ffc113f027890022084f40620209fc6a00088013ffc90102001c4022000ee00a00080a5fff13280003fde213ffcec00a004ea037ffcb8256001ba25a001811f401c32800027de213ffc8c21a0188b196018ba102005a8100006fa21bffca6102001e6252010a6102001e625200ca6102005e6252008e6036000e6252004a4103fede42520008c21a0148b196014ba102004a4100006fa21bffca2102001e224a00ce824a008ec24a004a8103ff1e824a0008c21a00c8b19600cba102002a2100006fa21bffce8022004e8246004e42460009010001181c3e00601000000da213ff8c4213ff4d00220047fffffbe88013ff48c21a00c8b19600cba102002a8100006fa21bffcd0252004e6012000e625200090100014e401200881c4a0068801200cda213ff8c4213ff4d00220047fffffad88013ff48c21a00c8b19600cba102002ac100006fa21bffcd025a004ea012000ea25a00090100016e801200881c520068801200c|@5025,130721|32,4,@4936 5025:S79|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d69736528322970757368536574436f6e7461696e65722832297265706c616365436f6e7461696e6572446563283129 5026:S57|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d69736528322970757368536574436f6e7461696e6572283229 5027:S38|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229 5028:S27|434f44455452454528292e6f7074696d69736550726f6328313229 5029:C2,232|9e13e002f606201880a1001b8bd02018d0213ffcd0213ff8de213ff4da213ff0d0213fecd2213fe8d4213fe49410200192102101901020191b0000829a036338f40360009fc6a00088013fe484102015c42220008c21a00c8b19600cba102002ae100006fa21bffcd025e004ac103ffdec25e0008c21a0088b1960083b100000ba076001aa100006fa21bffcee256000a8012014ea252000a6012014a4102001e424e0048c21a00c8b19600cba102002a2100006fa21bffce0012014e0246000de012018de246004e2213ffcd00120089a0120184000000c88013ffcc201201481c0600688012020|@5055,131071|56,4,I11 212,5,@5030 5030:C2,1984|9e13e002f606201880a1001b8bd02018c40220008088a001228000250100000080a0bfd5268000220100000080a0a02d3480001f010000002f3f0289ae05e01eba00a029fa05c01d81c5c01d0100000000000546000004160000005a000003ce000001760000046a000000a20000005a000002060000075e000003660000019e0000005a000002da0000053e000002620000005a0000020e0000045a0000018e00000076000004f60000070ade213ffc113f028a900223a8f40620209fc6a00088013ffc90102001da213ffcde213ff8d00220049a013ffc400001cd88013ff8de012000353f0231b406a28081c6a004880120088c21a0148b196014ba102004ac100006fa21bffcea022010ea25a00ce802200ce825a008e6022008e625a004e4022004e425a00080a5200132800018b8252001b824a001811f20002680000ede213ffc80a4e0012280000bde213ffcde213ffcd0213ff89410200592100012d0037fe47ffee57a88013ff810800005d0012000d0213ff888013ff8d0012000e201200481c4600688012008b91f2004a20720018c21a0108b196010ba10200390100006fa21bffce0037fe8e0222008e2222004ec222000da037fecf403600081c6a00401000000d202200490102001353f028cb406a02481c6a00401000000113f01bb900223dc81c3e00601000000de213ffcda213ff8fa022008fa213ff4d00220047fffff7f88013ff4d0213ffcd0012000da0120047fffff7a88013ffcac1000088c21a0108b196010ba10200390100006fa21bffcec222008ea012000ea222004a8102001e8222000e601200c81c4e0068801201081c3e00601000000de213ffcda213ff8fa022008fa213ff4d00220047fffff6388013ff4ac1000088c21a0108b196010ba10200390100006fa21bffcea012000ea222008ec222004a8102019e8222000e601200881c4e0068801200cde213ffcda213ff8fa022004fa213ff4fa02200cfa213ff0d00220087fffff4c88013ff0d0213ffcd00120049a01200c4000043e88013ffcac1000088c21a0148b196014ba10200490100006fa21bffcea012004ea22200ce8012000e8222008ec222004a6102011e6222000e401201081c4a00688012014de213ffcda213ff8fa022008fa213ff4fa02200cfa213ff0d00220047fffff2e88013ff0d0213ffcd0012004da0120087fffff2988013ffcd0213ffcd0012004da01200c7fffff2488013ffcac1000088c21a0148b196014ba10200490100006fa21bffcec22200cea012000ea222008e8012004e8222004a6102009e6222000e401201481c4a00688012018de213ffcda213ff8fa022008fa213ff4d00220047fffff0d88013ff4d0213ffcd00120009a0120084000042888013ffcac1000088c21a0108b196010ba10200390100006fa21bffcec222008ea012000ea222004a8103ffde8222000e601200c81c4e00688012010da213ffcde213ff8d00220049a013ffc4000045988013ff8ac1000088c21a00c8b19600cba10200290100006fa21bffcec222004aa103fe1ea222000e801200081c5200688012008de213ffcda213ff8d00220047ffffee388013ff8ac1000088c21a00c8b19600cba10200290100006fa21bffcec222004aa103fd9ea222000e801200481c5200688012008113f028e9002220481c3e00601000000de213ffcda213ff8fa022008fa213ff4fa02200cfa213ff0d00220047ffffeca88013ff0d0213ffcd00120009a01200c4000045588013ffcd0213ffcd0012008da01200c7ffffec088013ffcac1000088c21a0148b196014ba10200490100006fa21bffcea012000ea22200cec222008e8012004e8222004a6103fe9e6222000e401201481c4a00688012018da213ffcde213ff8d00220049a013ffc4000046388013ff8ac1000088c21a00c8b19600cba10200290100006fa21bffcec222004aa102029ea222000e801200081c520068801200881c3e00601000000ec02200ce805a00080a53fed3280002daa102005e605a00880a4e00532800024aa102005e405a00c80a4a0013280001baa102005e205a004b8246001811f200034800005a010000faa1020051080000f941000168210000dd8022004d60220089410001692100011d0007fe47ffda23901000000aa1000089a1000019e10001010800014e602e000d6022008d802200410800010e602e00094100016d6022008d80220041080000be602e00094100016d6022008d802200410800006e602e00094100016d6022008d8022004e602e00080a4e0093280000e80a4e025de213ffcda213ff8a410000a9410000c9210000b901000127fffedab88013ff8da012000de01200410bffe5a880120083280000e80a4ffd9de213ffcda213ff8a410000a9410000c9210000b901000127fffed9d88013ff8da012000de01200410bffe4c8801200832800005de213ffc9010000b10bffe48f6062018da213ff8d8213ff4d6213ff09010000a7ffffe4088013ff0d0213ffcd0012000da0120087ffffe3b88013ffca41000088c21a0148b196014ba10200490100006fa21bffce2012000e222200ce4222008e0012008e02220049e103fd5de222000c201201081c0600688012014de213ffcda213ff8fa022008fa213ff4d00220047ffffe2488013ff4ac1000088c21a0108b196010ba10200390100006fa21bffcea012000ea222008ec222004a810202de8222000e601200881c4e0068801200c113f002b9002225c81c3e00601000000|@5054,131071|56,4,$5030+82 176,4,@5031 216,5,@5033 228,4,@4488 356,5,@3309 464,4,@5034 480,4,@3766 740,5,@5048 992,5,@5049 1072,5,@5050 1196,4,@5051 1260,5,@5052 1368,5,@5053 1540,5,@608 1676,5,@4939 1732,5,@4939 1968,4,@581 5031:O3|@24,@397,@5032 5032:S24|636c65616e436f64653a20756e6b6e6f776e20696e737472 5033:C2,1072|9e13e002f606201880a1001b8bd0201880a2200132800005c40220009010200181c3e00601000000ee00a00080a5fff13280005e80a5ffddec036000de213ffcda213ff8fa00a004fa213ff4fa00a008fa213ff0fa00a00cfa213fecfa022004fa213fe894102001d2013ff4d005bfe47ffee3b488013fe8d0012000da0120107fffffe19e13e002ea012010e8056000a6100008d201200cd0053fe47ffda1900100000080a2200122800004e40120101080000fe6213ffce204a000e0047ff4e6213ffcd0012008da042004f40360009fc6a00088013ffc80a2200122800006e401200c1080002ed001200088013ffce401200ce004a00080a43fe53280000b90100012d204a004d0012010de012014da03e000400000ce01000000a2100008108000088c21a014de012014da03e0007ffffdb101000000a21000088c21a0148b196014ba10200482100006fa21bffcda012008da20600ce2206008d8012010d820600496103ff1d62060008c21a00c8b19600cba10200294100006fa21bffcd2012000d222a004c222a0009010000ac401201881c0a0068801201cde01201881c3e0068801201c3280005e80a5e025de213ffcda213ff8fa00a004fa213ff4fa022004fa213ff0ec013ff488013ff080a5a00132800005e805a000aa1020011080001cd0012000e605200080a4fff13280000d01000000e4012008e204a000fa05a004fa213ffc94102001d2052004d0047fe47ffee34b88013ffc10800008ec012000113f028d90022038f40620209fc6a00001000000ec01200088012004f606201880a1001b8bd0201830bfffe1da0120087fffff6c9e13e002d0213ffcd401200492102001901020019a01200c4000018888013ffc80a2200132800006e8022004d0012000e801201081c520068801201480a520013280000f8c21a00c8c21a00c8b19600cba102002a6100006fa21bffce4012000e424e004e2022000e224e00090100013e001201081c42006880120148b19600cba102002a6100006fa21bffcd024e004a4103fdde424e0008c21a00c8b19600cba102002a2100006fa21bffce0012000e0246004e624600090100011de01201081c3e006880120143280001ade213ffcde213ffcda213ff8fa00a004fa213ff4d00220047fffff3188013ff4d0213ffcd0012000da0120047fffff2c88013ffcec01200080a5a001328000059a01200cea01200c81c5600688012010400001e501000000ea01200c81c5600688012010da213ff8c4213ff4d00220047fffff1b88013ff4d0213ffcd0012000ec012004da05a0007ffffd1288013ffcea012008e8056000e6053ff4d0213ffcda04e004f40360009fc6a00088013ffc80a220012280000a8c21a00ce401200480a4a001228000068c21a00c90100012e201201081c46006880120148b19600cba102002a4100006fa21bffce2012004e224a004e0012000e024a00090100012de01201081c3e00688012014|@5047,131071|112,5,@3309 156,5,@608 276,5,@5034 304,5,@5030 532,5,@3309 548,4,@5040 624,5,@5042 884,5,@5046 940,5,@5030 5034:C2,300|9e13e002f606201880a1001b8bd020188c21a0188b196018ba10200584100006fa21bffc2f3f028cae05e16cee20a000ee037fecee20a010d020a00cd0037fe4d020a008ec026008ec20a0048c21a00c8b19600cba102002aa100006fa21bffc293f028ca8052388e8256000c4256004de213ffcfa026004fa213ff8ec213ff4fa026010fa213ff0fa026014fa213fec94100016e60260009210001590100013da037ff4f40360009fc6a00088013fec8c21a0248b196024ba102008a4100006fa21bffca2102001e224a01ca0102001e024a018de012000de24a014c2012004c224a0109a102001da24a00cd8012008d824a008d601200cd624a004d024a0008c21a00c8b19600cba10200290100006fa21bffce422200494103fe5d4222000d201201081c2600688012014|@5039,131071|36,4,@5035 96,4,@5037 5035:C2,456|9e13e002f606201880a1001b8bd0201880a260013280005eb8226001d0213ffcd0213ff8d0213ff4d0213ff0d0213fecd2022000c403600cb820a001ba22600188013fec811f401c3280001bb8226001ee02200480a5e00122800017b8226001ec036004b825a001ba22a001b91f401caa07200194012000a8103fede822a00094012000a8102001e822a00494012000a8102001e822a00894012000ea22a00caa012000a8102001e825601010800025de213ffc811f20002680000ede213ffcee02200480a5e0012280000ade213ffcde213ffcd0213ff894102005d00360087ffee23388013ff810800005ee012000d0213ff888013ff8ee012000ac012008aa103fedea25a000a8012008e605e000e6252004a4012008e205e004e224a008a0012008de05e008de24200c82012008da05e00cda206010108000038801200488013ffc8c21a0188b196018ba10200590100006fa21bffce6012004e6222000e4012008e4222004e201200ce2222008e0012010e022200cde012014de222010c201200081c0600688012018b91f200484072001ae1000088c21a0108b196010ba10200390100006fa21bffcd4222008c4222004ee222000da036010f403600081c6a00401000000|@5036,131071|224,5,@3309 5036:S46|434f44455452454528292e636c65616e50726f63283329636c65616e4c616d6264612832296c6f6f6b7570283329 5037:C2,44|9e13e002f606201880a1001b8bd02018d4022008d2022004d0022000da036004f403600081c6a00401000000|@5038,131071| 5038:S46|434f44455452454528292e636c65616e50726f63283329636c65616e4c616d6264612832296c6f6f6b7570283129 5039:S37|434f44455452454528292e636c65616e50726f63283329636c65616e4c616d626461283229 5040:O3|@24,@397,@5041 5041:S23|736574456e7472793a20756e6b6e6f776e20696e737472 5042:C2,476|9e13e002f606201880a1001b8bd0201880a2a0013280000cc402a00080a22005328000079010200194100009921020019010200110bffff5f606201881c3e00601000000ee00a00080a5fff13280005ede213ffcec037ffcea05a000a610000fa410000da2100008a0100009c200a004d800a008d600a00c92100001d0057fe47ffd9f730100000080a2200132800010d00320008c21a00c8b19600cba10200292100006fa21bffce0226004d002a000d0226000d402a004901000119a1000129e10001310bfffd1f606201880a23fe532800012e6213ffce6213ffce4213ff8e0213ff4c2213ff0d6213fecfa02a004fa213fe8d203200490100001c404bffcda00a0007ffffeae88013fe8921000081080000f8c21a014e4213ff8e0213ff4c2213ff0d6213fecfa02a004fa213fe89010000cc404bffcda00a0007ffffb8a88013fe8921000088c21a0148b196014ba102004ae100006fa21bffcec012004ec25e00cd225e008ea012008ea25e004a8103ff1e825e000ee213ffcd4012000d201200c90102005da0120107fffff9d88013ffc8c21a00c8b19600cba102002a6100006fa21bffcd024e004e4012000e424e00090100013e201201881c460068801201c113f028d90022260f40620209fc6a00088013ffc90102001|@5045,131071|128,5,@608 260,5,@5034 316,5,@5030 452,4,@5043 5043:O3|@24,@397,@5044 5044:S28|70726f636573734d757475616c3a20756e6b6e6f776e20696e737472 5045:S66|434f44455452454528292e636c65616e50726f63283329636c65616e436f646528312970726f636573734465637328312970726f636573734d757475616c73283329 5046:C2,112|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffcd0037ff481c3e00601000000da213ff8fa022000fa213ff4d00220047ffffff288013ff48c21a00c8b19600cba1020029e100006fa21bffcd023e004da012000da23e0009010000fde01200881c3e0068801200c|@1966,161| 5047:S49|434f44455452454528292e636c65616e50726f63283329636c65616e436f646528312970726f6365737344656373283129 5048:C2,136|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffc9010200181c3e00601000000da213ff8fa022004fa213ff4d0022000da037ffc7ffffafa88013ff4d0213ffcd0012000da0120047fffffec88013ffc8c21a00c8b19600cba10200284100006fa21bffcd020a004ee012000ee20a00090100002ec01200c81c5a00688012010|@586,131071|60,5,@5030 5049:C2,248|9e13e002f606201880a1001b8bd0201880a2200132800005c40220009010200181c3e00601000000ec00a00080a5bff13280001ade213ffcde213ffcda213ff8fa022004fa213ff4fa00a004fa213ff0d000a008da037ffc7ffffaca88013ff08c21a0148b196014ba102004ae100006fa21bffcaa102001ea25e00cd025e008e8012000e825e004a6103ff1e625e0001080000aee213ffcea022004113f0238900222a8f40620209fc6a00088013ffcae102001ee213ffcd0012004da0120087fffffd088013ffc8c21a00c8b19600cba102002a4100006fa21bffcd024a004e2012000e224a00090100012e001201081c4200688012014|@586,131071|88,5,@5030 156,4,@4531 5050:C2,136|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffc9010200181c3e00601000000da213ff8fa022004fa213ff4d0022000da0360007ffffa8c88013ff4d0213ffcd0012000da0120047fffffec88013ffc8c21a00c8b19600cba10200284100006fa21bffcd020a004ee012000ee20a00090100002ec01200c81c5a00688012010|@586,131071|60,5,@5030 5051:O1|7 5052:C2,136|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffc9010200181c3e00601000000da213ff8fa022004fa213ff4d0022000da037ffc7ffffa6188013ff4d0213ffcd0012000da0120047fffffec88013ffc8c21a00c8b19600cba10200284100006fa21bffcd020a004ee012000ee20a00090100002ec01200c81c5a00688012010|@586,131071|60,5,@5030 5053:C2,136|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffc9010200181c3e00601000000da213ff8fa022004fa213ff4d0022000da0360007ffffa3888013ff4d0213ffcd0012000da0120047fffffec88013ffc8c21a00c8b19600cba10200284100006fa21bffcd020a004ee012000ee20a00090100002ec01200c81c5a00688012010|@586,131071|60,5,@5030 5054:S35|434f44455452454528292e636c65616e50726f63283329636c65616e436f6465283129 5055:S23|434f44455452454528292e636c65616e50726f63283329 5056:S39|56414c55455f4f505328292e6372656174654e756c6c617279436f6e7374727563746f72283229 5057:C2,180|9e13e002f606201880a1001b8bd02018de213ffcd0213ff88410200188013ff880a2200132800005de022000ae10000210800011b825e001ee03e00080a5e00132800005b820a001821000021080000584100001b91720048207200184100001d0022004f606201880a1001b8bd0201830bfffec811f2004348000099210200192102001d0012000de012004353f028fb406a0a081c6a00488012008d0012000de012004353f0293b406a27881c6a00488012008|@5091,131071|140,4,@5058 164,4,@5089 5058:C2,692|9e13e002f606201880a1001b8bd0201880a2200132800005c40220009010200181c3e00601000000ee00a00080a5e0013280003380a5e0058c21a00c8b19600cba102002ac100006fa21bffcd225a004aa102005ea25a000de213ffcd2213ff8fa022004fa213ff4d200a004901000167ffed2fd88013ff4e8012004b8252001811f200036800008b8252001b8252001ba102000b91f401ca607200110800008d0213ffcb9172004a6072001ba102000b91f401ca6072001d0213ffc92100013d00120007fffffcf88013ffc8c21a00c8b19600cba102002a4100006fa21bffcd024a004e2012000e224a00090100012e001200c81c42006880120103280001c80a5fffdde213ffcd2213ff8fa022004fa213ff4d200a004113f0031900221244000006c88013ff4d0213ffcd2012004d00120007fffffb388013ffc8c21a00c8b19600cba102002ac100006fa21bffcd025a004ea012000ea25a00090100016e801200c81c52006880120103280001cec05e000de213ffcd2213ff8fa022004fa213ff4d200a004113f0293900222444000005088013ff4d0213ffcd2012004d00120007fffff9788013ffc8c21a00c8b19600cba102002ac100006fa21bffcd025a004ea012000ea25a00090100016e801200c81c520068801201080a5a0013280001cde213ffcde213ffcd2213ff8fa022004fa213ff4d200a004113f0031900221244000003388013ff4d0213ffcd2012004d00120007fffff7a88013ffc8c21a00c8b19600cba102002aa100006fa21bffcd0256004e8012000e825600090100015e601200c81c4e00688012010d2213ff8fa022004fa213ff4d200a004113f0293900222444000001a88013ff4d0213ffcd2012004d00120007fffff6188013ffc8c21a00c8b19600cba102002aa100006fa21bffcd0256004e8012000e825600090100015e601200c81c4e00688012010|@5088,131071|112,5,@3249 280,4,@799 288,5,@5059 392,4,@5087 400,5,@5059 508,4,@799 516,5,@5059 608,4,@5087 616,5,@5059 5059:C2,688|9e13e002f606201880a1001b8bd02018de213ffcd0213ff8d2213ff492100008113f002d9002215c7ffed2c288013ff48c21a0248b196024ba10200884100006fa21bffcae102001ee20a01cac102001ec20a018aa102001ea20a014a8102005e820a010a6102001e620a00ca4102001e420a008e2012000e220a004d020a0008c21a00c8b19600cba102002a0100006fa21bffcc42420049e103fe5de242000d00120044000008a01000000e0213ffc82100008113f002d9002215c9a100001f40360009fc6a00088013ffc8c21a0248b196024ba1020089a100006fa21bffc98102001d823601c96102001d623601894102001d423601492102005d223601084102001c423600cae102001ee236008ec012004ec236004d02360008c21a00c8b19600cba102002aa100006fa21bffcda256004a8103fe5e8256000ea213ffcd2012008113f002d9002215c4000021688013ffc8c21a0248b196024ba102008a6100006fa21bffca4102001e424e01ca2102001e224e018a0102001e024e0149e102005de24e01082102001c224e00c9a102001da24e008d8012008d824e004d024e0008c21a00c8b19600cba10200296100006fa21bffce622e00494103fe5d422e0008c21a00c8b19600cba10200292100006fa21bffc90102001d0226004d62260008c21a00c8b19600cba10200284100006fa21bffcd220a004ee012000ee20a0008c21a00c8b19600cba102002ac100006fa21bffcc425a004ea012004ea25a0008c21a00c8b19600cba102002a8100006fa21bffcec252004a6102029e625200080a5a0013280000da4100014901000147ffed5e0010000008c21a00c8b19600cba102002a4100006fa21bffcd024a004a2103ff5e224a00092102001901000121b3f01699a0361847ffed8ea01000000a2100008901020019a100011de012010f403600081c6a00488012014|@5086,131071|32,4,@623 40,5,@3250 164,5,@5060 180,4,@623 324,4,@623 332,5,@5080 596,5,@3258 644,4,@3278 652,5,@3280 5060:C2,244|9e13e002c402200080a0bff13280000680a0a001113f02909002234c81c3e006010000003280000680a0a009113f0290900223a481c3e006010000003280000680a0bff5113f0291900220d881c3e006010000003280000e80a0a00dee0220048c21a00c8b19600cba10200290100006fa21bffc053f02918400a1c8c4222000ee22200481c3e006010000003280001080a0bff9ee022004ec0220088c21a0108b196010ba10200390100006fa21bffc053f02918400a374c4222000ec222008ee22200481c3e006010000003280000601000000113f02909002234c81c3e00601000000113f02929002205081c3e00601000000|@5079,114817|20,4,@5061 44,4,@5064 68,4,@5067 116,4,@5070 176,4,@5072 212,4,@5061 228,4,@5074 5061:O1|@5062 5062:C2,12|9e13e00281c3e00601000000|@5063,129| 5063:S32|56414c55455f4f505328292e6964656e746974794170706c79436f6465283129 5064:O1|@5065 5065:C2,236|9e13e002f606201880a1001b8bd020188c21a00c8b19600cba10200284100006fa21bffcae102001ee20a004d020a0008c21a00c8b19600cba10200290100006fa21bffcc4222004ae102029ee222000de213ffcd0213ff888013ff880a0a00132800005de00a000ac1020051080000c80a5a001d003e00080a23ff532800007ac102001c400a004f606201880a1001b8bd0201830bffff280a5a00122800011d0012000d00120007ffed53c01000000841000088c21a00c8b19600cba10200290100006fa21bffcc4222004ae103ff5ee222000ec01200481c5a00688012008c401200481c0a00688012008|@5066,131071|168,5,@3258 5066:S27|56414c55455f4f505328292e626f784170706c79436f6465283129 5067:O1|@5068 5068:C2,168|9e13e0028c21a00c8b19600cba10200284100006fa21bffcae102001ee20a004d020a0008c21a00c8b19600cba10200290100006fa21bffcc4222004053f01608400a3fcc42220008c21a00c8b19600cba102002ae100006fa21bffcd025e004113f002d90022150d025e0008c21a0148b196014ba10200490100006fa21bffc84102001c422200c053f01608400a3d8c4222008ee222004ae102011ee22200081c3e00601000000|@5069,98433|60,4,@3223 96,4,@622 136,4,@3220 5069:S27|56414c55455f4f505328292e7265664170706c79436f6465283129 5070:C2,356|9e13e002f606201880a1001b8bd02018c40360048088a00122800005de213ffcae1000021080000b8c21a00cae100008113f002990022348f40620209fc6a00088013ffc90100017ae1020018c21a00c8b19600cba102002ac100006fa21bffcee25a004ae103ff5ee25a0008c21a00c8b19600cba102002ae100006fa21bffcaa102001ea25e004d025e0008c21a00c8b19600cba10200290100006fa21bffcee222004ec2220008c21a00c8b19600cba102002ae100006fa21bffcd025e004ac102029ec25e000de213ffcee213ff888013ff880a2200132800005de022000aa1020051080000c80a56001da03e00080a37ff532800007aa102001d0022004f606201880a1001b8bd0201830bffff280a5600122800011d0012000d00120007ffed49701000000981000088c21a00c8b19600cba10200290100006fa21bffcd822200496103ff5d6222000d401200481c2a00688012008d801200481c3200688012008|@5071,131071|48,4,@542 288,5,@3258 5071:S33|56414c55455f4f505328292e746167426f784170706c79436f6465283129283129 5072:C2,144|9e13e002f606201880a1001b8bd02018de213ffcd0213ff8d4036004d203600811000083900223d87ffed6b388013ff88c21a00c8b19600cba10200284100006fa21bffcae102001ee20a004ec012000ec20a000aa1000088c21a0148b196014ba10200490100006fa21bffca8102005e822200cea222008c4222004a6102011e6222000e401200481c4a00688012008|@5073,131071|32,4,I48 40,5,@3273 5073:S38|56414c55455f4f505328292e7461675475706c654170706c79436f6465283129283129283129 5074:O1|@5075 5075:C2,32|9e13e002de213ffc113f029290022094f40620209fc6a00088013ffc90102001|@5078,129|8,4,@5076 5076:O3|@24,@397,@5077 5077:S25|636f6e7374616e742063616e2774206265206170706c696564 5078:S29|56414c55455f4f505328292e636f6e7374724170706c79283129283129 5079:S26|56414c55455f4f505328292e636f6e7374724170706c79283129 5080:C2,460|9e13e002f606201880a1001b8bd02018c402600080a0bff13280000480a0a00181c3e006010000003280002080a0a009ee02200080a5e0153280000880a5fff59210000890102001353f0164b406a21481c6a0040100000032800008ac1000089210000890102001353f0164b406a21481c6a004010000008c21a0108b196010ba10200390100006fa21bffcaa102001ea222008ec222004a8102019e822200081c3e006010000003280001a80a0bff58c21a00c8b19600cba102002ae100006fa21bffc2d3f002fac05a11cec25e004d025e0008c21a0148b196014ba10200490100006fa21bffcaa102001ea22200c293f0161a8052070e8222008ee222004a6102011e622200081c3e006010000003280002080a0a00dee02200080a5e0153280000880a5fff59210000890102005353f0164b406a21481c6a0040100000032800008ac1000089210000890102005353f0164b406a21481c6a004010000008c21a0108b196010ba10200390100006fa21bffcaa102005ea222008ec222004a8102019e822200081c3e006010000003280000780a0bff9d2026008353f0292b406a2fc81c6a00401000000328000040100000081c3e00601000000113f002f9002208c81c3e00601000000|@5085,131071|72,4,@3251 104,4,@3251 196,4,@668 240,4,@3229 304,4,@3251 336,4,@3251 412,4,@5081 444,4,@660 5081:C2,416|9e13e002f606201880a1001b8bd02018d2213ffcaa10000fa8100008901020059a013ffc4000006688013ffc8c21a00c8b19600cba1020029e100006fa21bffcd023e0049a102029da23e000ea213ffce8213ff8de213ff488013ff480a2200132800005d2022000981020051080000c80a32001c402600080a0bff53280000798102001d0022004f606201880a1001b8bd0201830bffff280a320012280000dee012000d00120007ffed368010000008c21a00c8b19600cba102002ae100006fa21bffcd025e004ac103ff5ec25e0008c21a0248b196024ba102008ac100006fa21bffcaa102001ea25a01ca8102001e825a018a6102001e625a014a4102005e425a010a2102001e225a00ca0102001e025a0081f0000839e03e3d8de25a004ee25a0008c21a00c8b19600cba10200282100006fa21bffcec2060049a103fe5da2060008c21a00c8b19600cba10200298100006fa21bffc96102001d6232004d4012004d42320008c21a0148b196014ba10200490100006fa21bffc92102005d222200cc2222008d822200484102011c4222000ee01200881c5e00688012010|@5084,131071|36,5,@5082 168,5,@3258 276,4,I48 5082:C2,172|9e13e002f606201880a1001b8bd02018c4036000b820a001ba222001811f401c34800021901020018c21a0108b196010ba102003ae100006fa21bffcd025e0082d3f002dac05a15cec25e004ac102019ec25e000b8222001b917200490072001de213ffcda213ff8ee213ff47fffffe588013ff48c21a00c8b19600cba1020029e100006fa21bffcd023e004da012000da23e0009010000fc401200881c0a0068801200c81c3e00601000000|@5083,114849|64,4,@623 5083:S50|56414c55455f4f505328292e7461676765645475706c654465737472756374436f64652832296765744669656c6473283129 5084:S38|56414c55455f4f505328292e7461676765645475706c654465737472756374436f6465283229 5085:S29|56414c55455f4f505328292e636f6e7374724465737472756374283229 5086:S37|56414c55455f4f505328292e637265617465556e617279436f6e7374727563746f72283229 5087:O1|-4 5088:S35|56414c55455f4f505328292e63686f6f73654f7074696d697365645265707231283229 5089:C2,636|9e13e002f606201880a1001b8bd0201880a2200132800005c40220009010200181c3e00601000000ec00a00080a5a0013280002680a5a0058c21a0088b1960083b100000ba076001aa100006fa21bffcd2256000de213ffcd2213ff8fa022004fa213ff4fa00a004fa213ff0ea213fec901000151b0000839a0363b8f40360009fc6a00088013fec8c21a00c8b19600cba102002a8100006fa21bffce6012000e6252004a4103ffde4252000d2012004901000147ffece7601000000ae1000081080004fe401200c3280001580a5bffd8c21a00c8b19600cba102002aa100006fa21bffcd2256004a8103ff5e8256000de213ffcd2213ff8fa022004fa213ff4d200a004901000157ffffbfc88013ff4ae10000810800037d0213ffc32800015ea05a0008c21a00c8b19600cba102002aa100006fa21bffcd2256004a8103ff5e8256000de213ffcd2213ff8fa022004fa213ff4d200a004901000157ffffbe788013ff4ae10000810800022d0213ffcb8256001811f20103480000d8c21a00c8c21a0108b196010ba102003a8100006fa21bffcea252008d2252004a610200de62520001080000ade213ffc8b19600cba102002a8100006fa21bffcd2252004a6103ff5e6252000de213ffcd2213ff8fa022004fa213ff4d200a004901000147ffffbc688013ff4ae100008d0213ffcd0213ff888013ff8e401200cb824a001811f200036800008b824a001b824a001ba102000b91f401ca207200110800008ee213ffcb9172004a2072001ba102000b91f401ca2072001ee213ffc92100011d00120087fffff6f88013ffc8c21a00c8b19600cba102002a0100006fa21bffcd0242004de012000de24200090100010c201201481c0600688012018|@5090,131071|116,4,I47 180,5,@3249 264,5,@5059 348,5,@5059 480,5,@5059 5090:S35|56414c55455f4f505328292e63686f6f73654f7074696d697365645265707232283229 5091:S46|56414c55455f4f505328292e63686f6f7365436f6e7374725265707228312963686f6f7365526570722831292f35 5092:S44|56414c55455f4f505328292e63686f6f7365436f6e7374725265707228312963686f6f736552657072283129 5093:C2,172|9e13e002f606201880a1001b8bd02018808a20013280002490102001808a60013280001f90102001de213ffcda213ff8fa022004fa213ff4fa026004fa213ff0d2026000d0022000da037ffc4000001f88013ff0d0213ffcd2012000d0012004da0120087fffffe788013ffc8c21a00c8b19600cba10200284100006fa21bffcd020a004ee012000ee20a00090100002ec01201081c5a0068801201481c3e0060100000081c3e00601000000|@3920,131071|76,5,@5094 5094:C2,368|9e13e002f606201880a1001b8bd02018ae10000fac10000dea022000e8022004901000147ffe23e30100000080a220012280000e8c21a00c9010000940000054010000009610000894102005d205bfe0901000154000006101000000a61000081080001ade05bffc8b19600cba10200290100006fa21bffce605bfe0e6222004e8222000961000177ffdd1fa0100000094100008901000094000003d01000000ae10000b96100008a810000a9410200192100014901000154000004801000000a6100008de05bffcda03fff4d6036000ee213ffcec213ff8ea213ff4e6213ff0d4037ff4d202e000901000157ffdc6f588013ff0d4012008d202bffcd0027ff4c4022000ae102005ee213ffcd6023ff4d400a000d2023ffcd00120047ffeae4988013ffcec012008ea05bffc8c21a00c8b19600cba10200290100006fa21bffce8012000e8222004e6012004e6222000da057fd4f40360009fc6a00001000000d0012000e401200c81c4a00688012010|@5098,131071|36,5,@2102 60,5,@5095 84,5,@5096 136,5,@1630 152,5,@5095 184,5,@5096 236,5,@1545 284,5,@3002 5095:C2,48|9e13e002841000088c21a00c8b19600cba10200290100006fa21bffcc422200484103ffdc422200081c3e00601000000|@2734,65665| 5096:C2,76|9e13e0028c21a0088b196008ba10200184100006fa21bffcd420a0008c21a0148b196014ba10200494100006fa21bffcd222a00cd622a008c422a004d022a0009010000a81c3e00601000000|@5097,65679| 5097:S32|5354525543545f56414c5328292e6d616b6556616c7565436f6e737472283429 5098:S83|50415253455f5452454528292e706173733228362961737369676e56616c7565732836296173734162734461746128342967656e56616c7565436f6e7374727328322970726f63657373436f6e737472283229 5099:S77|50415253455f5452454528292e706173733228362961737369676e56616c7565732836296173734162734461746128342967656e56616c7565436f6e73747273283229646563436f6e73283129 5100:S67|50415253455f5452454528292e706173733228362961737369676e56616c7565732836296173734162734461746128342967656e56616c7565436f6e73747273283229 5101:O1|@5102 5102:C2,80|9e13e002de213ffc8c21a01088013ffc8b196010ba10200384100006fa21bffcd020a008113f000f900223bcd020a004113ee008900221fcd020a00090100002f40620209fc6a0000100000090102001|@5103,65665|36,4,@397 48,4,@24 5103:S54|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737341627344617461283429552d283129 5104:C2,976|9e13e002f606201880a1001b8bd02018d0213ffcd0213ff8a810000fa6100008a410000992013ff8113f0296900222784000010b88013ff88c21a0188b1960183b100000ba0760059e100006fa21bffc1b3f02979a036334da23e00092102001d223e00490102001d023e00884102001c423e00cae102001ee23e0108c21a00c8b19600cba102002ac100006fa21bffc2b3f0298aa056210ea25a000de25a004da012000da23e004ec23e008d423e00cd4012004d423e010c02bfffce8213ffce6213ff8e4213ff4de213ff088013ff080a4e00132800004d004e00010800079d20120087ffdcf3401000000fa04e000fa213ffcfa04e004fa213ff8da012014f40360009fc6a00088013ff880a220013280000dc40220008c21a00c8b19600cba10200292100006fa21bffc90102001d0226004c4012004c422600010800045d0012004ec00a00080a5a0013280000501000000ee00a004108000098c21a00c113f003890022020f40620209fc6a00001000000ae1020018c21a00c8b19600cba102002aa100006fa21bffcee256004e8012004e8256000a6100017a4100015901000147ffe50ef0100000080a2200122800004808ce00110800014e4213ffc3280000501000000d004e0001080000801000000113f00bc900220f0f40620209fc6a00001000000901020017ffe50dd0100000080a2200132800004e4213ffc10800010e4213ffc88013ffc80a4a00132800004921020051080000cd2012000d004a0007ffe922f01000000e404a004f606201880a1001b8bd0201830bffff488013ffcd201200088012004d00120047ffdced9010000008c21a00c8b19600cba102002a2100006fa21bffcd2246004a0102001e02460009e1000088c21a00c8b19600cba10200290100006fa21bffce2222004de222000da012018f40360009fc6a00001000000e601200088012008f606201880a1001b8bd0201830bfff8580a2600132800006d002600090102001c401200c81c0a006880120187ffdceb601000000fa026000fa213ffcfa026004fa213ff8d0213ff4da012000f40360009fc6a00088013ff480a23ffd3280001a8c21a00cd00120087ffe50920100000080a2200122800026d2012004d00120087ffe24390100000092100008113f00ee900221847ffd8e9f01000000133f0299920261187ffd8e9b01000000da012010f40360009fc6a0000100000010800014d20120048b19600cba10200290100006fa21bffc053f02998400a13cc4222004ee012000ee222000da01201cf40360009fc6a0000100000092102005d00120087ffe91cc01000000d20120048801200cf606201880a1001b8bd0201830bfffbd|@5126,131071|40,4,@5105 48,5,@5108 80,4,@5116 144,4,@5120 228,5,@1613 352,4,@1110 420,5,@2436 468,4,@2144 492,5,@2436 548,5,@2852 592,5,@1613 732,5,@1613 792,5,@2436 816,5,@2128 828,4,@2502 836,5,@496 844,4,@5124 852,5,@496 900,4,@5125 944,5,@2852 5105:O1|@5106 5106:C2,40|9e13e002f606201880a1001b8bd02018d2022004d0022000353f00e9b406a05881c6a00401000000|@5107,98547|24,4,@2452 5107:S27|5354525543545f56414c5328292e73616d65547970654964283129 5108:C2,136|9e13e0028c21a0088b1960083b100000ba07600184100006fa21bffcae102001ee20a0008c21a0108b196010ba102003ae100006fa21bffc2d3f0296ac05a38cec25e000d025e008c425e0048c21a0108b196010ba102003ac100006fa21bffc2b3f0297aa0561f8ea25a000c425a008d025a004ee226000ec2260049010200181c3e00601000000|@5115,123011|56,4,@5109 96,4,@5113 5109:C2,276|9e13e002f606201880a1001b8bd02018c4036004ee00a000de213ffcda213ff8d0213ff4fa022000fa213ff0ee213fec88013fec80a5e00132800005ea01200cac1020011080001e80a5a001e805e0008c21a00c8b19600cba10200290100006fa21bffce6012004e6222004e4052000e4222000fa05e004fa213ffcda056008f40360009fc6a00088013ffc80a2200122800005ee012000ac102005108000078801200488012004f606201880a1001b8bd0201830bfffe080a5a00122800007e2012000d00120009a0120104000001901000000a2100008e001200c8c21a00c8b19600cba1020029e100006fa21bffce223e004c2012008c223e000da042004de23600090102001d801201081c3200688012014|@5112,131071|204,5,@5110 5110:C2,204|9e13e002f606201880a1001b8bd0201880a2200132800005c4037ffc9010200181c3e00601000000ee022000ec0220048c21a00c8b19600cba10200290100006fa21bffcea037ff4ea222004e805e000e8222000de213ffcda213ff8ee213ff4ec213ff0da00a008f40360009fc6a00088013ff080a2200122800006d0012000d0012000e601200c81c4e00688012010da0120087fffffdc9e13e0028c21a00c8b19600cba102002a6100006fa21bffcd024e004e4012004e424e00090100013e201200c81c4600688012010|@5111,131071| 5111:S33|5554494c49544945535f28292e6d61705461626c6528322964656c657465283229 5112:S32|5554494c49544945535f28292e6d61705461626c65283229656e746572283129 5113:C2,212|9e13e002f606201880a1001b8bd02018c4036008ee00a000de213ffcda213ff8d0213ff488013ff480a5e00132800006de05e00090102001de01200881c3e0068801200cc20120048c21a00c8b19600cba10200290100006fa21bffcda012000da222004d803e000d8222000fa03e004fa213ffcfa05e004fa213ff8da006004f40360009fc6a00088013ff880a220012280000cee0120008c21a0088b196008ba10200190100006fa21bffcd6012004d6222000d401201081c2a0068801201488012008f606201880a1001b8bd0201830bfffd6|@5114,131071| 5114:S33|5554494c49544945535f28292e6d61705461626c652832296c6f6f6b7570283129 5115:S24|5554494c49544945535f28292e6d61705461626c65283229 5116:C2,620|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d0213ff4da036010f40360009fc6a00088013ff4808a20013280000501000000c402200010800005ee00a000053f02988400a1bcee00a00080a5fffd32800010ec01200480a5fffd3280000601000000d000a004ec01200881c5a0068801200c113f003890022020f40620209fc6a0000100000090102001ec0120048c21a00c8b19600cba10200290100006fa21bffc2b3f0298aa0561c8ea222004e8012000e8222000c4213ffcda05a004f40360009fc6a00088013ffce6012000e204e00080a460013280000501000000e404e00410800009a0102005113f003890022020f40620209fc6a00001000000a4102001a010200580a4a0013280000580a43ffd9e10001010800036c201200832800005da01200882103ffd10800028fa04a004d803600c80a3200122800011d004a000d00120047ffe8f670100000080a220013280000bd004a000d004a0007ffe4ed50100000080a2200132800005d004a00082103ffd10800011fa04a0047ffe561701000000d6012008fa04a004fa213ffcd404a0009210000890100010da02e008f40360009fc6a00088013ffc8210000810800009a0100001fa213ffc88013ffc10800005a0100001fa213ffc88013ffca0100001e401200088012004f606201880a1001b8bd0201830bfffc780a3e001328000058c21a00cda0120001080000a8c21a00c8b19600cba1020029a100006fa21bffcde23600498103ffdd82360008c21a00c8b19600cba10200290100006fa21bffcda222004d6012004d6222000de213ffcda006004f40360009fc6a00088013ffcd0012000d401201081c2a00688012014|@5119,131071|68,4,@5117 120,4,@1110 168,4,@5118 240,4,@1110 332,5,@2848 356,5,@2436 388,5,@2500 5117:O2|-1,-1 5118:O2|-1,0 5119:S49|545950455f5452454528292e67656e457175616c69747946756e6374696f6e7328332967656e457175616c697479283129 5120:C2,364|9e13e002f606201880a1001b8bd0201880a26001328000048410000f81c3e00601000000ae10000dac100008d00260007ffe72cd01000000aa100002a8100008901000147ffe240e0100000080a2200122800008d2026004a6100017901000147ffe24180100000010800007d0026000901000169a1000179e10001510bfffe3f60620187ffe72b801000000ae100008901000177ffe23fa0100000080a2200122800008ea213ffc901000177ffe240501000000a8100008108000098c21a00c113f003890022020f40620209fc6a00088013ffca81020018c21a00c8b19600cba1020029e100006fa21bffc1b3f02989a036398da23e000d423e004ea213ffce6213ff8ec213ff4d4213ff0fa026004fa213fec9410000fd204e004d00520007ffe4ee488013fec80a23ffd3280000680a2200190103ffdd801201081c320068801201432800003d801200898102001d4012004d20120009010000cda01200cde01201010bfffa888012014|@5123,131071|48,5,@2659 68,5,@2148 96,5,@2149 132,5,@2659 148,5,@2148 172,5,@2149 192,4,@1110 236,4,@5121 288,5,@2445 5121:C2,240|9e13e002f606201880a1001b8bd020188410000fae100008d00360047ffe4e8a01000000c4213ffcee213ff888013ff880a2200132800005ee022000ac1020011080002380a5a001ec022004901000177ffdcbc70100000080a220012280000801000000901000177ffdcbd201000000aa10000810800009d2012000113f003890022020f40620209fc6a00001000000aa102001d2012000901000157ffe1b980100000080a220012280000590100016ac1020051080000680a5a001f606201880a1001b8bd0201830bfffda2280000690103ffd90102005de01200481c3e00688012008de01200481c3e00688012008|@5122,123043|28,5,@2438 80,5,@1606 104,5,@1607 124,4,@1110 156,5,@2088 5122:S52|545950455f5452454528292e67656e457175616c69747946756e6374696f6e73283329636f6e737472457128332965712d283129 5123:S46|545950455f5452454528292e67656e457175616c69747946756e6374696f6e73283329636f6e7374724571283329 5124:S27|2920646f6573206e6f74207265737065637420657175616c697479 5125:O2|-1,1 5126:S35|545950455f5452454528292e67656e457175616c69747946756e6374696f6e73283329 5127:C2,76|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d0213ff4da036008f40360009fc6a00088013ff4c4012004ee00a004d0012000da05e008de012008f403600081c6a0048801200c|@5128,131071| 5128:S71|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737341627344617461283429552d646563456e762d656e74657256616c466e283129 5129:C2,136|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d0213ff4da03600cf40360009fc6a00088013ff480a2200132800014c4012008c4012004d0012000da00a008f40360009fc6a0000100000080a2200132800009ee012008ee012004d0012000da05e004de012008f403600081c6a0048801200c81c5e0068801200c81c0a0068801200c|@1463,131071| 5130:S49|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737341627344617461283429 5131:C2,52|9e13e002f606201880a1001b8bd02018d0213ffcd6036004d403600892102005d003600c353f0137b406a27c81c6a00488013ffc|@2936,131071|36,4,@2932 5132:C2,52|9e13e002f606201880a1001b8bd02018d0213ffcd6036004d403600892102005d003600c353f0137b406a27c81c6a00488013ffc|@2936,131071|36,4,@2932 5133:S18|206973206e6f742061206461746174797065 5134:C2,164|9e13e002f606201880a1001b8bd02018d0213ffcd0213ff8de213ff4da213ff0d0213fec84102001c4213fe8ae013ff8ee213fe49610200194102001130000279202603d113f000f900220cc7ffdbe8e88013fe48c21a00c8b19600cba10200290100006fa21bffcec01200cec222000ea012010ea2220047ffdbecc01000000d0213ffcd00120009a0120104000000d88013ffcd0012000e801200c81c5200688012018|@5139,131071|60,4,9999 68,4,@375 76,5,@1515 120,5,@1517 140,5,@5135 5135:C2,228|9e13e002f606201880a1001b8bd0201880a2200132800005c4037ff49010200181c3e00601000000de213ffcda213ff8fa022004fa213ff4d200bffcd0022000da037ff47ffe964688013ff4ee012004ec05fff4ea05a0008c21a0108b196010ba102003a8100006fa21bffc273f029aa604e188e6252000e405bffce4252008e2056000e22520048c21a0148b196014ba102004a0100006fa21bffc1f3f029a9e03e240de242000e224200cc205bff4c2242008e824200496100010153f00f49402a074d205ffec7ffe5c1f01000000d0012000da012004de01200810bfffca8801200c|@5138,131071|68,5,@2928 108,4,@5136 156,4,@5137 188,4,@2554 200,5,@2575 5136:C2,156|9e13e002f606201880a1001b8bd02018c4036004de213ffcd0213ff8fa036008fa213ff4133f00d3920262f4d000a0241b3f00389a0360407ffd9da688013ff4ee012004d0213ffc113f00d49002201cda05e00cf40360009fc6a00088013ffcec012008113f001f9002225cda05a000f40360009fc6a00001000000d4012008d2012000d0012004de01200c353f00c1b406a19c81c6a00488012010|@2965,131071|36,4,@2272 48,4,@1112 56,5,@1114 72,4,@2279 100,4,@485 140,4,@2180 5137:C2,88|9e13e002f606201880a1001b8bd02018c4022008c4213ffcee03600cee213ff8ec036008ec213ff4ea036004ea213ff0d6022004153f004c9402a0a0d2022000113f013b900222fc353f00f5b406a28881c6a00488013ff0|@2969,131071|52,4,@1345 64,4,@2968 72,4,@2570 5138:S61|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737369676e4c6973742831296170706c794c697374283129 5139:S49|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737369676e4c697374283129 5140:C2,136|9e13e002f606201880a1001b8bd02018c40360108c21a0148b196014ba102004ae100006fa21bffc2d3f029aac05a3dcec25e000ec036008ec25e00cea03600cea25e008e8036004e825e004273f0121a604e0b8e6213ffc253f0065a404a010e4213ff8ee213ff4173f01219602e0d0d400a030d200a020353f00e1b406a19c81c6a00488013ff4|@3026,131071|40,4,@5141 76,4,@2804 88,4,@1611 104,4,@2805 120,4,@2400 5141:C2,52|9e13e002f606201880a1001b8bd02018d0213ffcd6036004d403600892102005d003600c353f0137b406a27c81c6a00488013ffc|@2936,131071|36,4,@2932 5142:C2,156|9e13e002f606201880a1001b8bd02018c4036004de213ffcd0213ff8fa036008fa213ff4133f00d3920262f4d000a0241b3f00389a0360407ffd9cfd88013ff4ee012004d0213ffc113f00d49002201cda05e00cf40360009fc6a00088013ffcec012008113f001f9002225cda05a000f40360009fc6a00001000000d4012008d2012000d0012004de01200c353f00c1b406a19c81c6a00488012010|@2965,131071|36,4,@2272 48,4,@1112 56,5,@1114 72,4,@2279 100,4,@485 140,4,@2180 5143:C2,88|9e13e002f606201880a1001b8bd02018c4022008c4213ffcee03600cee213ff8ec036008ec213ff4ea036004ea213ff0d6022004153f004c9402a0a0d2022000113f013b900222fc353f00f5b406a28881c6a00488013ff0|@2969,131071|52,4,@1345 64,4,@2968 72,4,@2570 5144:C2,104|9e13e002f606201880a1001b8bd02018de213ffcfa03600cfa213ff8fa036008fa213ff4fa036004fa213ff0133f029b920261dc7ffd89b088013ff0c401200cd021200cd6012000d401200492102005d00120089e100002353f0137b406a27c81c6a0048801200c|@3155,131071|44,4,@5145 52,5,@496 88,4,@2932 5145:S37|2068617320616c7265616479206265656e20626f756e6420696e2074686973206d61746368 5146:C2,92|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d0213ff4da036008f40360009fc6a00088013ff480a2200132800009c4012008c4012004d0012000da00a004de012008f403600081c6a0048801200c81c0a0068801200c|@1463,131071| 5147:C2,52|9e13e002f606201880a1001b8bd02018d0213ffcd6036004d403600892102005d003600c353f0137b406a27c81c6a00488013ffc|@2936,131071|36,4,@2932 5148:C2,92|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d0213ff4da036008f40360009fc6a00088013ff480a2200132800009c4012008c4012004d0012000da00a004de012008f403600081c6a0048801200c81c0a0068801200c|@1463,131071| 5149:C2,92|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d0213ff4da036008f40360009fc6a00088013ff480a2200132800009c4012008c4012004d0012000da00a004de012008f403600081c6a0048801200c81c0a0068801200c|@1463,131071| 5150:C2,92|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d0213ff4da036008f40360009fc6a00088013ff480a2200132800009c4012008c4012004d0012000da00a004de012008f403600081c6a0048801200c81c0a0068801200c|@1463,131071| 5151:O1|@5152 5152:C2,16|9e13e0029010200181c3e00601000000|@5153,129| 5153:S60|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c7565732832296c6f63616c456e762d283129 5154:C2,120|9e13e002f606201880a1001b8bd02018c403600cee00a0008c21a00c8b19600cba102002ac100006fa21bffcee25a004ee022004ee25a000ec20a000de213ffcda213ff8d0213ff4da036008f40360009fc6a00088013ff4ec012004ea05a004d0012000da056008de012008f403600081c6a0048801200c|@5155,131071| 5155:S59|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c756573283229626f6479456e762d283129 5156:C2,76|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d0213ff4da036008f40360009fc6a00088013ff4c4012004ee00a004d0012000da05e00cde012008f403600081c6a0048801200c|@5155,131071| 5157:C2,76|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d0213ff4da036008f40360009fc6a00088013ff4c4012004ee00a004d0012000da05e024de012008f403600081c6a0048801200c|@5155,131071| 5158:C2,52|9e13e002f606201880a1001b8bd02018d0213ffcd6036004d403600892102005d003600c353f0137b406a27c81c6a00488013ffc|@2936,131071|36,4,@2932 5159:C2,104|9e13e002f606201880a1001b8bd02018de213ffcfa03600cfa213ff8fa036008fa213ff4fa036004fa213ff0133f00d29202631c7ffd885b88013ff0c401200cd021200cd6012000d401200492102005d00120089e100002353f0137b406a27c81c6a0048801200c|@3155,131071|44,4,@2263 52,5,@496 88,4,@2932 5160:C2,1336|9e13e002f606201880a1001b8bd02018c4037ff4ee00a0008c21a0188b196018ba102005ac100006fa21bffc2b3f029eaa056084ea25a000ea00bff8ea25a010e8037ff0e825a00ce605e000e625a008e400bff4e425a004de213ffcda213ff8fa022000fa213ff4fa022004fa213ff0fa022008fa213fecfa02200cfa213fe8961000129410001392100016d0013fec7ffe84a288013fe8d00120047ffe1b950100000080a2200122800005d0213ffca21020011080003fe6012000d0213ff8a2102005e2213ff4a0013ff8e0213ff09610200194102001130000279202603d113f000f900220cc7ffdbb8d88013ff08c21a00c8b19600cba10200290100006fa21bffcde012000de222000c2012004c22220047ffdbbcb01000000da012018d8037ff4d60320008c21a0108b196010ba10200394100006fa21bffc133f029e92026178d222a000c4037ff0c422a008ee02e000ee22a0048c21a0148b196014ba102004ac100006fa21bffc2b3f029eaa056230ea25a000ee25a00ce8033ff4e825a008d425a00496100016153f00f49402a07492100008d001200c7ffe594001000000a210000888012008e6012000e204e00080a47fed3280002a80a47fe18c21a0088b1960083b100000ba076001a0100006fa21bffc9e102001de2420008c21a0088b1960083b100000ba07600182100006fa21bffc9a102001da2060008c21a0108b196010ba10200398100006fa21bffcc2232008e023200496102005d62320008c21a0148b196014ba10200494100006fa21bffcd2012004d222a00cd822a00890102001d022a004c401200cc422a000a410000a10800082d20120083280007801000000e0012010de043ff4c203fff8da03e0008c21a0148b196014ba10200498100006fa21bffc173f029e9602e2a4d6232000d4036000d423200cd2043ff0d2232008d003fff4d0232004fa04e004fa213ffcfa04e008fa213ff8053f029e8400a2f4c4213ff42f3f0075ae05e274ee213ff0d8213fec173f01389602e110d4006030d2006018d0013ffc7ffe43df88013fecac100008901000167ffe9b8d01000000ea02200480a5600132800004e80120181080001cec213ffce6053ff4e404e000ec213ffcfa04a000fa213ff8fa053ff0fa213ff4fa04fff4fa213ff0d2012004901020a17ffd877488013ff0133f029e920263087ffd877001000000d0213ffcd6012000d401200492102005d00120087ffe99f588013ffc108000038801200c88013ffce8012004e6012000e6252000901000137ffe6daa010000008c21a0088b1960083b100000ba076001a4100006fa21bffca2102001e224a0008c21a0088b1960083b100000ba076001a0100006fa21bffc9e102001de2420008c21a0108b196010ba10200382100006fa21bffce0206008e42060049a102005da2060008c21a0148b196014ba10200498100006fa21bffcd023200cc223200896102001d6232004d4012018d4232000a410000c108000098801200c113f029e90022328f40620209fc6a00001000000a41020018801200cd2012008e4226000d0012010c4023ffc8c21a00c8b19600cba10200290100006fa21bffc2f3f000fae05e0ccee222004ec01200cec222000e4213ffc9a100002f40360009fc6a00088013ffcea012014e8057ff4e6052000d4053ff4d204e000d00120107ffdbdd001000000e4012014e204bff4e00460009e102005de213ffcd6047ff4d4042000d204bff0d00120107ffea52588013ffcc2012014da007ff4d8037ff88c21a00c8b19600cba10200290100006fa21bffcd6012000d6222004d4012010d4222000da032008de012018f403600081c6a0048801201c|@5170,131071|44,4,@5161 144,5,@2812 156,5,@2102 216,4,9999 224,4,@375 232,5,@1515 276,5,@1517 316,4,@5163 364,4,@5164 396,4,@2554 412,5,@2575 652,4,@5165 704,4,@5166 716,4,@1702 732,4,@2938 752,5,@2400 768,5,@2944 844,5,@496 852,4,@5167 860,5,@496 888,5,@2932 924,5,@2659 1088,4,@5168 1152,4,@375 1216,5,@1545 1260,5,@3002 5161:C2,136|9e13e002f606201880a1001b8bd02018c40360108c21a0148b196014ba102004ae100006fa21bffc2d3f029eac05a128ec25e000ec036008ec25e00cea03600cea25e008e8036004e825e004273f0121a604e0b8e6213ffc253f0065a404a010e4213ff8ee213ff4173f01219602e0d0d400a030d200a020353f00e1b406a19c81c6a00488013ff4|@3026,131071|40,4,@5162 76,4,@2804 88,4,@1611 104,4,@2805 120,4,@2400 5162:C2,52|9e13e002f606201880a1001b8bd02018d0213ffcd6036004d403600892102005d003600c353f0137b406a27c81c6a00488013ffc|@2936,131071|36,4,@2932 5163:C2,156|9e13e002f606201880a1001b8bd02018c4036004de213ffcd0213ff8fa036008fa213ff4133f00d3920262f4d000a0241b3f00389a0360407ffd99aa88013ff4ee012004d0213ffc113f00d49002201cda05e00cf40360009fc6a00088013ffcec012008113f001f9002225cda05a000f40360009fc6a00001000000d4012008d2012000d0012004de01200c353f00c1b406a19c81c6a00488012010|@2965,131071|36,4,@2272 48,4,@1112 56,5,@1114 72,4,@2279 100,4,@485 140,4,@2180 5164:C2,88|9e13e002f606201880a1001b8bd02018c4022008c4213ffcee03600cee213ff8ec036008ec213ff4ea036004ea213ff0d6022004153f004c9402a0a0d2022000113f013b900222fc353f00f5b406a28881c6a00488013ff0|@2969,131071|52,4,@1345 64,4,@2968 72,4,@2570 5165:C2,52|9e13e002f606201880a1001b8bd02018d0213ffcd6036004d403600892102005d003600c353f0137b406a27c81c6a00488013ffc|@2936,131071|36,4,@2932 5166:S9|457863657074696f6e 5167:S22|29206973206e6f7420616e20657863657074696f6e2e 5168:O3|@24,@397,@5169 5169:S41|70726f63657373457863657074696f6e3a206261646c792d666f726d65642070617273652d74726565 5170:S67|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c75657328322970726f63657373457863657074696f6e283129 5171:C2,156|9e13e002f606201880a1001b8bd02018c4036004de213ffcd0213ff8fa036008fa213ff4133f00d3920262f4d000a0241b3f00389a0360407ffd991a88013ff4ee012004d0213ffc113f00d49002201cda05e00cf40360009fc6a00088013ffcec012008113f001f9002225cda05a000f40360009fc6a00001000000d4012008d2012000d0012004de01200c353f00c1b406a19c81c6a00488012010|@2965,131071|36,4,@2272 48,4,@1112 56,5,@1114 72,4,@2279 100,4,@485 140,4,@2180 5172:C2,88|9e13e002f606201880a1001b8bd02018c4022008c4213ffcee03600cee213ff8ec036008ec213ff4ea036004ea213ff0d6022004153f004c9402a0a0d2022000113f013b900222fc353f00f5b406a28881c6a00488013ff0|@2969,131071|52,4,@1345 64,4,@2968 72,4,@2570 5173:C2,156|9e13e002f606201880a1001b8bd02018c4036004de213ffcd0213ff8fa036008fa213ff4133f00d3920262f4d000a0241b3f00389a0360407ffd98cf88013ff4ee012004d0213ffc113f00d49002201cda05e00cf40360009fc6a00088013ffcec012008113f001f9002225cda05a000f40360009fc6a00001000000d4012008d2012000d0012004de01200c353f00c1b406a19c81c6a00488012010|@2965,131071|36,4,@2272 48,4,@1112 56,5,@1114 72,4,@2279 100,4,@485 140,4,@2180 5174:C2,88|9e13e002f606201880a1001b8bd02018c4022008c4213ffcee03600cee213ff8ec036008ec213ff4ea036004ea213ff0d6022004153f004c9402a0a0d2022000113f013b900222fc353f00f5b406a28881c6a00488013ff0|@2969,131071|52,4,@1345 64,4,@2968 72,4,@2570 5175:C2,156|9e13e002f606201880a1001b8bd02018c4036004de213ffcd0213ff8fa036008fa213ff4133f00d3920262f4d000a0241b3f00389a0360407ffd988488013ff4ee012004d0213ffc113f00d49002201cda05e00cf40360009fc6a00088013ffcec012008113f001f9002225cda05a000f40360009fc6a00001000000d4012008d2012000d0012004de01200c353f00c1b406a19c81c6a00488012010|@2965,131071|36,4,@2272 48,4,@1112 56,5,@1114 72,4,@2279 100,4,@485 140,4,@2180 5176:C2,88|9e13e002f606201880a1001b8bd02018c4022008c4213ffcee03600cee213ff8ec036008ec213ff4ea036004ea213ff0d6022004153f004c9402a0a0d2022000113f013b900222fc353f00f5b406a28881c6a00488013ff0|@2969,131071|52,4,@1345 64,4,@2968 72,4,@2570 5177:C2,156|9e13e002f606201880a1001b8bd02018c4036004de213ffcd0213ff8fa036008fa213ff4133f00d3920262f4d000a0241b3f00389a0360407ffd983988013ff4ee012004d0213ffc113f00d49002201cda05e00cf40360009fc6a00088013ffcec012008113f001f9002225cda05a000f40360009fc6a00001000000d4012008d2012000d0012004de01200c353f00c1b406a19c81c6a00488012010|@2965,131071|36,4,@2272 48,4,@1112 56,5,@1114 72,4,@2279 100,4,@485 140,4,@2180 5178:C2,156|9e13e002f606201880a1001b8bd02018c4036004de213ffcd0213ff8fa036008fa213ff4133f00d3920262f4d000a0241b3f00389a0360407ffd980b88013ff4ee012004d0213ffc113f00d49002201cda05e00cf40360009fc6a00088013ffcec012008113f001f9002225cda05a000f40360009fc6a00001000000d4012008d2012000d0012004de01200c353f00c1b406a19c81c6a00488012010|@2965,131071|36,4,@2272 48,4,@1112 56,5,@1114 72,4,@2279 100,4,@485 140,4,@2180 5179:C2,88|9e13e002f606201880a1001b8bd02018c4022008c4213ffcee03600cee213ff8ec036008ec213ff4ea036004ea213ff0d6022004153f004c9402a0a0d2022000113f013b900222fc353f00f5b406a28881c6a00488013ff0|@2969,131071|52,4,@1345 64,4,@2968 72,4,@2570 5180:C2,156|9e13e002f606201880a1001b8bd02018c4036004de213ffcd0213ff8fa036008fa213ff4133f00d3920262f4d000a0241b3f00389a0360407ffd97c088013ff4ee012004d0213ffc113f00d49002201cda05e00cf40360009fc6a00088013ffcec012008113f001f9002225cda05a000f40360009fc6a00001000000d4012008d2012000d0012004de01200c353f00c1b406a19c81c6a00488012010|@2965,131071|36,4,@2272 48,4,@1112 56,5,@1114 72,4,@2279 100,4,@485 140,4,@2180 5181:C2,88|9e13e002f606201880a1001b8bd02018c4022008c4213ffcee03600cee213ff8ec036008ec213ff4ea036004ea213ff0d6022004153f004c9402a0a0d2022000113f013b900222fc353f00f5b406a28881c6a00488013ff0|@2969,131071|52,4,@1345 64,4,@2968 72,4,@2570 5182:C2,156|9e13e002f606201880a1001b8bd02018c4036004de213ffcd0213ff8fa036008fa213ff4133f00d3920262f4d000a0241b3f00389a0360407ffd977588013ff4ee012004d0213ffc113f00d49002201cda05e00cf40360009fc6a00088013ffcec012008113f001f9002225cda05a000f40360009fc6a00001000000d4012008d2012000d0012004de01200c353f00c1b406a19c81c6a00488012010|@2965,131071|36,4,@2272 48,4,@1112 56,5,@1114 72,4,@2279 100,4,@485 140,4,@2180 5183:C2,88|9e13e002f606201880a1001b8bd02018c4022008c4213ffcee03600cee213ff8ec036008ec213ff4ea036004ea213ff0d6022004153f004c9402a0a0d2022000113f013b900222fc353f00f5b406a28881c6a00488013ff0|@2969,131071|52,4,@1345 64,4,@2968 72,4,@2570 5184:C2,156|9e13e002f606201880a1001b8bd02018c4036004de213ffcd0213ff8fa036008fa213ff4133f00d3920262f4d000a0241b3f00389a0360407ffd972a88013ff4ee012004d0213ffc113f00d49002201cda05e00cf40360009fc6a00088013ffcec012008113f001f9002225cda05a000f40360009fc6a00001000000d4012008d2012000d0012004de01200c353f00c1b406a19c81c6a00488012010|@2965,131071|36,4,@2272 48,4,@1112 56,5,@1114 72,4,@2279 100,4,@485 140,4,@2180 5185:C2,88|9e13e002f606201880a1001b8bd02018c4022008c4213ffcee03600cee213ff8ec036008ec213ff4ea036004ea213ff0d6022004153f004c9402a0a0d2022000113f013b900222fc353f00f5b406a28881c6a00488013ff0|@2969,131071|52,4,@1345 64,4,@2968 72,4,@2570 5186:O3|@24,@397,@5187 5187:S27|61737369676e54797065733a2077696c646361726420666f756e64 5188:O3|@24,@397,@5189 5189:S34|61737369676e54797065733a206c617965726564207061747465726e20666f756e64 5190:S48|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c756573283229 5191:S36|50415253455f5452454528292e706173733228362961737369676e56616c756573283629 5192:S21|50415253455f5452454528292e7061737332283629 5193:C2,92|9e13e002f606201880a1001b8bd02018a810000fa610000da4100008901000127ffe4cd701000000e6213ffce8213ff8e4213ff49a013ffc4000001088013ff492100008d0012000de012004353f0116b406a05481c6a0048801200c|@5195,131071|32,5,@2500 56,5,@5194 76,4,@2736 5194:C2,192|9e13e002f606201880a1001b8bd0201880a2200132800005c40360009010200181c3e00601000000ee00bffcec05e000aa10000fa810000de6022000e4022004901000137ffe29b001000000ea213ffce8213ff8e6213ff4e4213ff0da05a018f40360009fc6a00088013ff0808a200132800003e2012004e2022000e2213ffcd0012000da0120087fffffde88013ffc8c21a00c8b19600cba102002a2100006fa21bffcd0246004e0012000e024600090100011de01201081c3e00688012014|@586,131071|68,5,@2194 5195:S98|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296d616b65536967496e746f28362970726f63657373536967283329757064617465436f6e7374724c697374283129 5196:O3|@24,@397,@5197 5197:S27|70726f636573735369673a206e6f742061207369676e6174757265 5198:S79|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296d616b65536967496e746f28362970726f63657373536967283329 5199:C2,136|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d0213ff4da03600cf40360009fc6a00088013ff480a2200132800014c4012008c4012004d0012000da00a008f40360009fc6a0000100000080a2200132800009ee012008ee012004d0012000da05e004de012008f403600081c6a0048801200c81c5e0068801200c81c0a0068801200c|@1463,131071| 5200:C2,136|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d0213ff4da03600cf40360009fc6a00088013ff480a2200132800014c4012008c4012004d0012000da00a008f40360009fc6a0000100000080a2200132800009ee012008ee012004d0012000da05e004de012008f403600081c6a0048801200c81c5e0068801200c81c0a0068801200c|@1463,131071| 5201:C2,104|9e13e002f606201880a1001b8bd02018de213ffcfa03600cfa213ff8fa036008fa213ff4fa036004fa213ff0133f0124920263807ffd82bb88013ff0c401200cd021200cd6012004d401200892102005d00120009e100002353f00d2b406a35081c6a0048801200c|@5202,131071|44,4,@2839 52,5,@496 88,4,@2264 5202:S82|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296d616b65536967496e746f2836296c6f6f6b75704661696c757265283129 5203:C2,236|9e13e002f606201880a1001b8bd02018c4036014ee0360108c21a0108b196010ba102003ac100006fa21bffc2b3f02a2aa056314ea25a000ea00a020ea25a008e805e020e825a0048c21a0108b196010ba102003a6100006fa21bffc253f02a2a404a38ce424e000e400a02ce424e008e205e02ce224e0048c21a0148b196014ba102004a0100006fa21bffc033f02a382006004c2242000c2036004c224200cd803600cd8242008d6036008d6242004153f01219402a0b8d4213ffc133f006592026010d2213ff8e0213ff4173f01219602e0d09410001392100016353f00e1b406a19c81c6a00488013ff4|@5207,131071|44,4,@5204 92,4,@5205 140,4,@5206 176,4,@2804 188,4,@1611 204,4,@2805 220,4,@2400 5204:C2,92|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d0213ff4da036008f40360009fc6a00088013ff480a2200132800009c4012008c4012004d0012000da00a004de012008f403600081c6a0048801200c81c0a0068801200c|@1463,131071| 5205:C2,92|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d0213ff4da036008f40360009fc6a00088013ff480a2200132800009c4012008c4012004d0012000da00a004de012008f403600081c6a0048801200c81c0a0068801200c|@1463,131071| 5206:C2,52|9e13e002f606201880a1001b8bd02018d0213ffcd6036004d403600892102005d003600c353f00d2b406a35081c6a00488013ffc|@2302,131071|36,4,@2264 5207:S81|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296d616b65536967496e746f2836296c6f6f6b7570476c6f62616c283129 5208:C2,52|9e13e002f606201880a1001b8bd02018d0213ffcd6036004d403600892102005d003600c353f00d2b406a35081c6a00488013ffc|@2302,131071|36,4,@2264 5209:C2,1284|9e13e002f606201880a1001b8bd02018d4213ffc8410000fae100008901000177ffdc1c888013ffcac1000027ffdc1da0100000080a2200122800005901000179010200181c5a006880120047ffe43880100000084100008901000097ffe438401000000b8222001ba20a001811f401c22800014a8100016901000177ffe174901000000ec213ffc92100008113f02a4900222207ffd81ae88013ffc133f00e6920263c87ffd81aa01000000da012004de012000f403600081c6a00488012008a6100017901000137ffe434601000000a4100008901000097ffe434201000000a2100008901000127ffe150e0100000080a220013280004290100011901000127ffe16e70100000080a220012280002b90100013901000127ffe16f201000000e0022000c2022008901000137ffe43ec010000009810001496100013a410000992100010400001030100000080a22001228000099010000b901000017ffe16f601000000921000129e10000c10bfffa6880120047ffe170b01000000d8213ffc92100008113f02a49002238c7ffd817088013ffc133f0127920262007ffd816c01000000da012004de012000f403600081c6a004880120087ffe16fa01000000e8213ffc92100008113f02a49002238c7ffd815f88013ffc133f0127920262007ffd815b01000000da012004de012000f403600081c6a004880120087ffe16a80100000080a220012280002596100009901000117ffe16b301000000901000117ffe169f0100000080a2200122800008e8213ffc901000117ffe16aa01000000a01000081080000990100009113f003890022020f40620209fc6a00088013ffca0102001901000097ffe439d01000000821000149810001396100009d2042000400000b40100000080a22001228000219010000c108000069010001198100013821000141080001b9010000c7ffe167c0100000080a2200122800008c2213ffc901000117ffe1687010000009210000810800009d0026008113f003890022020f40620209fc6a00088013ffc92102001d00260087ffe169001000000921000089010000c9e10000110bfff3f880120047ffdc10c01000000a01000019210000c7ffe837f0100000080a220013280001490100009901000097ffe169a01000000e0213ffc92100008113f02a49002238c7ffd80ff88013ffc133f02a4920263b47ffd80fb01000000da012004de012000f403600081c6a004880120087ffe42dc0100000080a220012280000de0213ffce0213ffcd2213ff8d6213ff49010000b7ffe42e888013ff480a2200132800019d001200410800007d0012004d2213ff8d6213ff488013ff410800012d00120047ffe16740100000092100008113f02a49002238c7ffd80da01000000133f02a4920263d07ffd80d601000000da01200cde012008f403600081c6a004880120107ffe4a010100000080a2200122800033d2012004d00120007ffe49fb0100000080a220013280001fd0012004d00120047ffe16580100000092100008113f02a49002238c7ffd80be01000000133f02a5920260107ffd80ba0100000084100008d00120007ffe164b0100000092100008901000027ffd80b201000000133f02a5920260307ffd80ae01000000da01200cde012008f403600081c6a004880120107ffdc0a40100000084100008d00120007ffdc0a00100000092100008901000027ffe845d0100000090102001ee01200881c5e00688012010d00120009a01200c4000009501000000c401200881c0a00688012010|@5220,131071|32,5,@1613 44,5,@1615 76,5,@2432 92,5,@2432 124,5,@2128 140,4,@5210 148,5,@496 156,4,@2435 164,5,@496 200,5,@2429 216,5,@2429 232,5,@2102 256,5,@2124 280,5,@2125 300,5,@2438 324,5,@5211 348,5,@2126 372,5,@2128 388,4,@5213 396,5,@496 404,4,@2847 412,5,@496 440,5,@2128 456,4,@5213 464,5,@496 472,4,@2847 480,5,@496 508,5,@2124 532,5,@2125 544,5,@2124 568,5,@2125 588,4,@1110 616,5,@2438 640,5,@5211 684,5,@2124 708,5,@2125 728,4,@1110 756,5,@2126 784,5,@1613 800,5,@2848 824,5,@2128 840,4,@5213 848,5,@496 856,4,@5214 864,5,@496 892,5,@2436 928,5,@2437 976,5,@2128 988,4,@5213 996,5,@496 1004,4,@5215 1012,5,@496 1040,5,@2500 1064,5,@2500 1088,5,@2128 1100,4,@5213 1108,5,@496 1116,4,@5216 1124,5,@496 1140,5,@2128 1156,5,@496 1164,4,@5217 1172,5,@496 1200,5,@1613 1216,5,@1613 1232,5,@2857 1264,5,@5218 5210:S38|43616e6e6f74206170706c792074797065207265616c69736174696f6e3a2054797065732028 5211:C2,244|9e13e002f606201880a1001b8bd0201880a260013280000aae10000f80a2200132800005901020019010200581c3e0060100000081c3e00601000000ac100008d00260007ffdc01c0100000080a220012280002790102001aa100017d00260007ffdc02601000000808da0013280001e90102001ae100008d005a0007ffdc00e0100000080a220012280001590102001a8100017d005a0007ffdc01801000000e602600492100008901000147ffe0fe60100000080a22001228000079010200192100013d005a0049e10001510bfffcff606201881c560060100000081c560060100000081c560060100000081c5e00601000000|@5212,129187|68,5,@1606 96,5,@1607 124,5,@1606 152,5,@1607 172,5,@2088 5212:S36|545950455f5452454528292e736574576865726554797065283329657141726773283229 5213:S32|43616e6e6f74206170706c792074797065207265616c69736174696f6e3a2028 5214:S18|2920697320616c726561647920667265652e 5215:S53|2920697320616e206571747970652062757420746865207479706520646f6573206e6f74207065726d697420657175616c6974792e 5216:S21|292069732061206461746174797065206275742028 5217:S9|29206973206e6f742e 5218:C2,596|9e13e002f606201880a1001b8bd020188410000fae10000dac100008901000167ffe158f01000000aa100008901000097ffe425a01000000d0213ffcd0213ff8a8100008901000167ffdbfed88013ff8a61000027ffdbfff0100000080a22001228000109e0120008c21a0088b1960083b100000ba0760019e100006fa21bffcec23e0009a01200090103ffdd023600084012000de20a004108000078c21a00c9a102001da23e00090012000ec2220048c21a00c8b19600cba10200284100006fa21bffcde012000de20a000da012004da20a0048c21a0108b196010ba10200390100006fa21bffcc4222008ea222004e8222000aa100017a81000167ffdbfef01000000a4100015a2100008901000097ffe41a60100000080a2200122800042e6213ffc901000147ffdbfb5010000007ffe822a0100000080a2200122800012e6213ffc901000147ffe4155010000007ffe13230100000080a220012280000ae6213ffc821000139810000992102005901000147ffe82ed0100000010800023c2213ffce4213ff8e8213ff4d2213ff0e2213fec901000147ffe419988013fec80a2200132800016d0213ffce001200cd00120087ffe152a01000000fa042000fa213ffc92100008901020a17ffd7f8f88013ffc133f00ee920260f87ffd7f8b01000000da012000f40360009fc6a00001000000108000030100000088013ffc1080000e88012004d0213ff8d0213ff4d8213ff0e2213fec88013fec10800008d2012000d0213ff8d0213ff4d2213ff0e2213fec88013fecd2012000d0012004de012010353f0128b406a23c81c6a0048801201c|@5219,131071|32,5,@2128 48,5,@2438 72,5,@1613 84,5,@1615 252,5,@1617 272,5,@2436 296,5,@1613 304,5,@2848 328,5,@2429 336,5,@2102 372,5,@2852 408,5,@2437 436,5,@2128 460,5,@496 468,4,@2499 476,5,@496 580,4,@2854 5219:S38|545950455f5452454528292e7365745768657265547970652833297365744571756976283229 5220:S27|545950455f5452454528292e736574576865726554797065283329 5221:O3|@24,@397,@5222 5222:S40|6d616b65536967496e746f3a206e6f742061205369674964656e74206e6f72206120536967446563 5223:S66|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296d616b65536967496e746f283629 5224:S63|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c28352973696756616c7565283429 5225:C2,52|9e13e002f606201880a1001b8bd02018d0213ffcd6036004d403600892102005d003600c353f00d2b406a35081c6a00488013ffc|@2302,131071|36,4,@2264 5226:C2,220|9e13e002f606201880a1001b8bd020188c21a0088b1960083b100000ba07600194100006fa21bffcd222a0008c21a00c8b19600cba10200284100006fa21bffc2f3f02a6ae05e124ee20a000d420a004de213ffcd0213ff8d2213ff4d4213ff09a100002f40360009fc6a00088013ff0d00120087ffe680201000000ec012000ea05a000e8012008d0213ffcea213ff8d00520007ffe685488013ff88c21a0148b196014ba102004a6100006fa21bffce401200ce424e00ce2012000e224e008e0012004e024e004d024e00090100013de01201481c3e00688012018|@5244,131071|64,4,@5227 116,5,@2684 148,5,@2690 5227:C2,140|9e13e002f606201880a1001b8bd020188410000fae10000d7ffe3ea7010000008c21a0108b196010ba1020039e100006fa21bffc1b3f02a69a0361ccda23e000da05e004da23e008ee23e0048c21a00c8b19600cba10200298100006fa21bffc173f02a89602e09cd6232000de232004941020019210000c9e100002353f00eeb406a27881c6a00401000000|@5243,131071|24,5,@2425 52,4,@5228 96,4,@5241 124,4,@2508 5228:C2,532|9e13e002f606201880a1001b8bd020189410000fac10000d901000091b3f00de9a0362347ffe38140100000080a220012280002990100009901000091b3f00de9a0362287ffe38360100000080a2200132800018d0022008d4213ffcfa05a004fa213ff8901020297ffe031f88013ff88c21a0148b196014ba102004aa100006fa21bffca8102001e825600ca6102001e625600825000083a404a3d8e4256004d02560009010001510800007da012000d4213ffcfa05a004fa213ff888013ff8da012000de012004f403600081c6a004880120081b3f00df9a0360847ffe387a0100000080a220012280004990102001901000091b3f00df9a0360787ffe389c010000008c21a00c8b19600cba102002aa100006fa21bffc293f02a6a80523fce8256000e605a008e6256004a4100008901000127ffdbe5001000000a2100016a010001582100008901000127ffe3ff201000000981000089010000c7ffe11be0100000080a220013280000bd4213ffcd4213ffce2213ff8c2213ff4921000109010000c4000005188013ff410800006d0012000e2213ff8c2213ff488013ff4d00120007ffe80ab0100000080a220012280001490102001d6012004d402e008d202a000b8226001b917200490072001d022a000901000097ffe2b100100000092100008d00120007ffe81e40100000090102001c401200881c0a0068801200cd601200881c2e0068801200c81c2a00601000000|@5240,131071|28,4,@2357 36,5,@2358 60,4,@2356 68,5,@2361 104,5,@1992 148,4,I48 212,4,@2371 220,5,@2372 244,4,@2370 252,5,@2375 280,4,@5229 308,5,@1613 332,5,@2429 348,5,@2102 388,5,@5231 420,5,@2848 472,5,@2256 488,5,@2857 5229:C2,60|9e13e002f606201880a1001b8bd02018d0036004c4022000b820a001b9172004ae072001ee22200090100002353f00d1b406a3e481c6a00401000000|@5230,98465|44,4,@2256 5230:S56|535452554354555245535f28292e72656e616d655661726961626c654173426f756e642833297365745374616d7073283129283329283129 5231:C2,176|9e13e002f606201880a1001b8bd020188c21a0108b196010ba10200384100006fa21bffc2f3f02a7ae05e160ee20a000d220a008133f02a792026330d220a004ae1000088c21a00c8b19600cba10200290100006fa21bffc2d3f02a7ac05a338ec222000c4222004aa10000fa81000177ffe56b001000000ea213ffca6100008901000149a100013f40360009fc6a00088013ffca4100008901020019a100012de012000f403600081c6a00488012004|@5239,131071|36,4,@5232 52,4,@5234 88,4,@5235 112,5,@2587 5232:C2,384|9e13e002f606201880a1001b8bd02018ae10000fac10000d901000097ffe13080100000080a220012280005490102001aa100017a8100016901000097ffe131101000000901000097ffe12fd0100000080a2200122800008ea213ffc901000097ffe130801000000a610000810800009d004e008113f003890022020f40620209fc6a00088013ffca6102001d004e0087ffe13110100000092100008901000097ffdbd9001000000a6100015a4100008901000097ffe3f3301000000ae100008901000177ffe10ff0100000080a220013280000fe6213ffce6213ffcd2213ff8fa052008fa213ff4e4213ff0d2013ff490100017da052004f40360009fc6a00088013ff010800008d0012000d2213ff8fa052008fa213ff4e4213ff088013ff0d00120007ffe7fe60100000080a220012280000f90102001d0012008da012004f40360009fc6a0000100000092100008d00120007ffe81240100000090102001ec01200c81c5a00688012010ec01200c81c5a0068801201081c5e00601000000|@5233,131071|28,5,@2124 60,5,@2125 72,5,@2124 96,5,@2125 116,4,@1110 144,5,@2126 160,5,@1613 180,5,@2429 196,5,@2102 292,5,@2848 340,5,@2857 5233:S42|545950455f5452454528292e736574547970657328322973657454797065436f6e73747256616c283229 5234:O1|@5231 5235:C2,60|9e13e002841000088c21a0108b196010ba10200390100006fa21bffc2f3f02a7ae05e390ee222000ee036004ee222008c422200481c3e00601000000|@5238,98465|28,4,@5236 5236:C2,36|9e13e002f606201880a1001b8bd02018d2036004da036008f403600081c6a00401000000|@5237,131071| 5237:S45|545950455f5452454528292e736574547970657328322973657454797065436f6e73747256616c283129283129 5238:S42|545950455f5452454528292e736574547970657328322973657454797065436f6e73747256616c283129 5239:S23|545950455f5452454528292e7365745479706573283229 5240:S53|535452554354555245535f28292e72656e616d655661726961626c654173426f756e642833297365745374616d7073283129283329 5241:C2,44|9e13e002f606201880a1001b8bd02018d4022008d2022004d0022000da036004f403600081c6a00401000000|@5242,131071| 5242:S53|535452554354555245535f28292e72656e616d655661726961626c654173426f756e642833297365745374616d7073283129283129 5243:S50|535452554354555245535f28292e72656e616d655661726961626c654173426f756e642833297365745374616d7073283129 5244:S38|535452554354555245535f28292e72656e616d655661726961626c654173426f756e64283329 5245:S52|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c283529 5246:C2,256|9e13e002f606201880a1001b8bd02018ae10000fac10000daa100008901000157ffe3af70100000080a220012280003390102001ee213ffcec213ff888013ff8de05600080a3fff93280000fa8100015c2056004da006000d803600080a3200532800005aa10000da810001510800007da052000f606201880a1001b8bd0201830bffff0da05200080a360013280000501000000c205200410800009d8012000113f00e390022284f40620209fc6a0000100000082102001d8012000d00320047ffe39a001000000b8222001ba206001811f401c268000069010200190102005c401200481c0a00688012008c401200481c0a0068801200881c5e00601000000|@5247,127217|32,5,@2414 160,4,@2416 192,5,@2408 5247:S72|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973747275637456616c75652835296d757374436f707954797065283129 5248:S57|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973747275637456616c7565283529 5249:C2,256|9e13e002f606201880a1001b8bd02018ae10000fac10000daa100008901000157ffe3a8b0100000080a220012280003390102001ee213ffcec213ff888013ff8de05600080a3fff93280000fa8100015c2056004da006000d803600080a3200532800005aa10000da810001510800007da052000f606201880a1001b8bd0201830bffff0da05200080a360013280000501000000c205200410800009d8012000113f00e390022284f40620209fc6a0000100000082102001d8012000d00320047ffe393401000000b8222001ba206001811f401c268000069010200190102005c401200481c0a00688012008c401200481c0a0068801200881c5e00601000000|@5250,127217|32,5,@2414 160,4,@2416 192,5,@2408 5250:S109|535452554354555245535f28292e70617373325374727563747328332970617373325374727563742835297061737332537472756374757265446563283229706173733253747275637475726542696e64283629726573756c745369672d6d757374436f707954797065283129 5251:C2,148|9e13e0028c21a0088b1960083b100000ba07600184100006fa21bffcae102001ee20a0008c21a0088b1960083b100000ba076001ae100006fa21bffcac102001ec25e0008c21a0108b196010ba102003ac100006fa21bffcee25a008c425a00484102005c425a0008c21a0108b196010ba102003ae100006fa21bffcd225e008ec25e004d025e0009010001781c3e00601000000|@5252,114819| 5252:S32|5354525543545f56414c5328292e6d616b654c6f63616c537472756374283229 5253:S84|535452554354555245535f28292e70617373325374727563747328332970617373325374727563742835297061737332537472756374757265446563283229706173733253747275637475726542696e64283629 5254:S63|535452554354555245535f28292e70617373325374727563747328332970617373325374727563742835297061737332537472756374757265446563283229 5255:C2,264|9e13e002f606201880a1001b8bd02018c40360008c21a0148b196014ba102004ae100006fa21bffc2d3f02a9ac05a3b0ec25e000ec00a000ec25e00cd025e008ea037ff0ea25e004d0213ffcd0213ff8d0213ff4a810000fa610000da4100008a210000992013ff4901000177ffe2a7588013ff4e6213ffce4213ff8e8213ff488013ff480a4600132800004e004600010800017e0012008fa046004fa213ffcde042010de213ff8c2042014c2213ff4da042018da213ff0d604200cd4042008d2042004d00420009a0120144000005488013ff0e201200088012004f606201880a1001b8bd0201830bfffe7de043ffcd003e01cda01200cde012000f403600081c6a00488012018|@5282,131071|40,4,@5256 108,5,@2283 204,5,@5259 5256:C2,124|9e13e002f606201880a1001b8bd02018de213ffcfa03600cfa213ff8fa036008fa213ff4fa036004fa213ff092100008113f02aa900220487ffd7b1988013ff0133f00d29202631c7ffd7b1501000000c401200cd021200cd6012000d401200492102005d00120089e100002353f00d2b406a35081c6a0048801200c|@5258,131071|48,4,@5257 56,5,@496 64,4,@2263 72,5,@496 108,4,@2264 5257:S8|46756e63746f7220 5258:S69|535452554354555245535f28292e7061737332537472756374732833297061737332537472756374283529706173733246756e63746f7244656328322973456e762d283129 5259:C2,1828|9e13e002f6062018ba21206880a7401b8bd02018c402200080a0a005328001bcde213ffcde213ffcda213ff8d2213ff4d4213ff0d6213fecfa022004fa213fe8fa022008fa213fe4fa02200cfa213fe0901020297ffdff6d88013fe08c21a0148b196014ba102004ae100006fa21bffcac102001ec25e00caa102001ea25e00829000083a80523d8e825e004d025e000901000171b3f00d99a0363387ffe2f8901000000e6012000e204e00080a47fe93280000580a47feda41000131080001cda0120183280000580a47fdda410001310800017da012018328000058c21a00ca410001310800012da0120188b19600cba102002a0100006fa21bffc9e102001de242004e62420008c21a00c8b19600cba102002a4100006fa21bffce024a00482103fedc224a000da012018d8037ff4d0213ffc170000839602e3d8d6213ff8d6012010d4033ffc9210200190100012da037ff47ffe6e5a88013ff8941000089210000ad001200c7ffffec001000000d4213ffcd0213ff813000083920263d8d001200c1b0000839a0360d8f40360009fc6a00088013ff880a2200132800012d0012004d20120088c21a00c8b19600cba10200290100006fa21bffcc4012000c4222004ee012014ee222000da026024f40360009fc6a000010000001080001ee60120107ffe3a53010000008c21a0108b196010ba10200392100006fa21bffc053f02ab8400a3e8c4226000ee012000ee226008ec012008ec2260048c21a00c8b19600cba102002aa100006fa21bffc293f02aca8052250e8256000d225600494102001921000157ffe43e201000000e6012010e4012000e424e000e2012008e0012024de043ff4c203fffc8c21a0108b196010ba1020039a100006fa21bffc193f02ac980322f4d8236000d6046018d6236008d4006018d42360048c21a0108b196010ba10200392100006fa21bffc113f02ac9002236cd0226000c4046020c4226008ee006020ee2260048c21a0108b196010ba102003ac100006fa21bffc2b3f02acaa0563e4ea25a000e804602ce825a008e600602ce625a0048c21a0348b196034ba10200c98100006fa21bffcec23202cd0006028d0232028ec006024ec232024d2232020ea00601cea23201cda232018da006014da232014d2006010d2232010e400600ce423200cd6006008d6232008e0006004e02320041f3f02ad9e03e05cde232000d00120047ffe3752010000008c21a0088b1960083b100000ba0760019a100006fa21bffcd02360008c21a00c8b19600cba10200290100006fa21bffc1f3f02ad9e03e0f8de222000da222004de012024d403fff4d8213ffcda213ff8d0213ff4d2012018d002a0047ffd79f588013ff4133f02ad920261b47ffd79f101000000d201202cd2213ffcd6012004d4012008d2012028c4012030da00bff47ffe2b3c88013ffcee012038ea05e00080a5600132800005a8100008ac1000081080008590100016d00120107ffe372101000000e6012030e404fff4e8213ffcd0213ff8d2012024d004a0047ffd79d588013ff8133f02ad920261b47ffd79d101000000d0213ffcd6012030d4012010d2012000d0012040e2012038da047ff47ffe6d8e88013ffca0100008901000107ffe36f40100000082100008901000107ffe370401000000d0213ffcd0213ff8e0213ff494013ff892100008901000017ffe371088013ff48c21a00c8b19600cba1020029a100006fa21bffcd8012004d8236000d6012008d62360048c21a00c8b19600cba10200294100006fa21bffc133f02ad920261c0d222a000d0012000d022a004c401205480a0a0012280001dae10000dac10000d7ffe36ce01000000aa100008d00120007ffe36de01000000d0213ffcd0213ff8ec213ff4d4213ff094013ff892100008901000157ffe36e988013ff08c21a00c8b19600cba102002ae100006fa21bffce8012008e825e000e601200ce625e00410800008ec012054d0213ffcd0213ff8da213ff4d4213ff088013ff0ec012054ea05bff4e8056000ee213ffce601204ce6213ff8e4052000e4213ff4d605bff0d4012004d2012010d00120207ffe38e988013ff4e2012058e0047ff4d201204cd00420047ffd796d01000000133f02ad920261b47ffd796901000000d0213ffcd6012000d4012028d2012004d00120141b3f010d9a0362907ffe61f788013ffcac10000888012028901000167ffe627201000000de012004c203e000d0213ffcc2213ff8d005a0007ffe62c588013ff88c21a0148b196014ba1020049a100006fa21bffc98102001d823600cd6012000d6236008d4012004d4236004d02360009210000d9010200140000205010000009610000894100009d2012014d001202c4000022c01000000c4012038ae1000088c21a00c8b19600cba10200290100006fa21bffcee222004ec01202cec222000ee213ffcda00bffcf40360009fc6a00088013ffcea012048e8012000e825600090102001e601204081c4e00688012050113f02ae90022078f40620209fc6a00088013ffc90102001|@5281,131071|84,5,@1992 128,4,I48 148,4,@2307 156,5,@2309 308,4,I48 340,5,@2771 360,5,@5251 376,4,I48 388,4,I24 484,5,@2425 512,4,@5260 560,4,@5262 584,5,@2508 640,4,@5264 688,4,@5265 736,4,@5266 860,4,@5267 876,5,@2410 932,4,@5270 976,5,@496 984,4,@5272 992,5,@496 1028,5,@2298 1072,5,@2410 1104,5,@496 1112,4,@5272 1120,5,@496 1156,5,@2771 1172,5,@2408 1188,5,@2410 1220,5,@2412 1284,4,@5273 1324,5,@2408 1340,5,@2410 1376,5,@2412 1496,5,@2423 1520,5,@496 1528,4,@5272 1536,5,@496 1564,4,@2681 1572,5,@2683 1592,5,@2684 1620,5,@2690 1684,5,@5275 1708,5,@5277 1804,4,@5279 5260:C2,496|9e13e002f606201880a1001b8bd020189410000fac10000daa100008901000091b3f00df9a0360847ffe33200100000080a220012280001590100009e805a004901000091b3f00df9a0360787ffe334101000000a61000088c21a00c8b19600cba10200290100006fa21bffce6222004ea222000da05200c9e10000af403600081c6a004010000001b3f00df9a03619c7ffe334c0100000080a220012280003190100009e805a004901000091b3f00df9a0361907ffe336d01000000e6022008e204e00080a460013280001aa41000088c21a0108b196010ba102003a0100006fa21bffcde05a008de242008c204e004c22420049a102009da2420008c21a0148b196014ba10200498100006fa21bffcd602200cd623200ce0232008d2022004d2232004c4022000c4232000a410000c8c21a00c8b19600cba10200290100006fa21bffce4222004ea222000da0520089e10000af403600081c6a004010000001b3f00de9a0362347ffe323c0100000080a220012280001d90102001e805a004901000091b3f00de9a0362287ffe325d01000000d4213ffcea213ff8fa052024fa213ff4d205a0087ffe336c88013ff4a61000088c21a00c8b19600cba10200290100006fa21bffce6222004e4012004e4222000da012000de012008f403600081c6a0048801200c81c2a00601000000|@5261,131071|32,4,@2371 40,5,@2372 68,4,@2370 76,5,@2375 136,4,@2377 144,5,@2378 172,4,@2376 180,5,@2381 352,4,@2357 360,5,@2358 388,4,@2356 396,5,@2361 424,5,@2383 5261:S83|535452554354555245535f28292e7061737332537472756374732833297061737332537472756374283529706173733246756e63746f72446563283229706173733246756e63746f7242696e64283729283329 5262:C2,44|9e13e002f606201880a1001b8bd02018d4022008d2022004d0022000da036004f403600081c6a00401000000|@5263,131071| 5263:S83|535452554354555245535f28292e7061737332537472756374732833297061737332537472756374283529706173733246756e63746f72446563283229706173733246756e63746f7242696e64283729283129 5264:C2,92|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d0213ff4da036008f40360009fc6a00088013ff480a2200132800009c4012008c4012004d0012000da00a004de012008f403600081c6a0048801200c81c0a0068801200c|@1463,131071| 5265:C2,92|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d0213ff4da036008f40360009fc6a00088013ff480a2200132800009c4012008c4012004d0012000da00a004de012008f403600081c6a0048801200c81c0a0068801200c|@1463,131071| 5266:C2,92|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d0213ff4da036008f40360009fc6a00088013ff480a2200132800009c4012008c4012004d0012000da00a004de012008f403600081c6a0048801200c81c0a0068801200c|@1463,131071| 5267:O1|@5268 5268:C2,16|9e13e0029010200181c3e00601000000|@5269,129| 5269:S95|535452554354555245535f28292e7061737332537472756374732833297061737332537472756374283529706173733246756e63746f72446563283229706173733246756e63746f7242696e64283729656e7657697468417267732d283129 5270:C2,60|9e13e002f606201880a1001b8bd02018d0036004c4022000b820a001b9172004ae072001ee22200090100002353f00d1b406a3e481c6a00401000000|@5271,98465|44,4,@2256 5271:S92|535452554354555245535f28292e7061737332537472756374732833297061737332537472756374283529706173733246756e63746f72446563283229706173733246756e63746f7242696e642837296e6577547970654964283129 5272:S3|28292e 5273:C2,256|9e13e002f606201880a1001b8bd02018ae10000fac10000daa100008901000157ffe35fa0100000080a220012280003390102001ee213ffcec213ff888013ff8de05600080a3fff93280000fa8100015c2056004da006000d803600080a3200532800005aa10000da810001510800007da052000f606201880a1001b8bd0201830bffff0da05200080a360013280000501000000c205200410800009d8012000113f00e390022284f40620209fc6a0000100000082102001d8012000d00320047ffe34a301000000b8222001ba206001811f401c268000069010200190102005c401200481c0a00688012008c401200481c0a0068801200881c5e00601000000|@5274,127217|32,5,@2414 160,4,@2416 192,5,@2408 5274:S105|535452554354555245535f28292e7061737332537472756374732833297061737332537472756374283529706173733246756e63746f72446563283229706173733246756e63746f7242696e64283729726573756c745369672d6d757374436f707954797065283129 5275:C2,116|9e13e0028c21a0088b1960083b100000ba07600190100006fa21bffc84102001c42220008c21a0088b1960083b100000ba07600184100006fa21bffcae102001ee20a000ae1000088c21a0108b196010ba10200390100006fa21bffcc4222008ee22200484102005c422200081c3e00601000000|@5276,98433| 5276:S26|5354525543545f56414c5328292e6d616b654c6f63616c283129 5277:C2,52|9e13e0028c21a0148b196014ba10200484100006fa21bffcd420a00cd620a008d020a004d220a0009010000281c3e00601000000|@5278,65679| 5278:S28|5354525543545f56414c5328292e6d616b6546756e63746f72283429 5279:O3|@24,@397,@5280 5280:S16|706173733246756e63746f7242696e64 5281:S80|535452554354555245535f28292e7061737332537472756374732833297061737332537472756374283529706173733246756e63746f72446563283229706173733246756e63746f7242696e64283729 5282:S61|535452554354555245535f28292e7061737332537472756374732833297061737332537472756374283529706173733246756e63746f72446563283229 5283:C2,232|9e13e002f606201880a1001b8bd02018c40360008c21a0148b196014ba102004ae100006fa21bffc2d3f02aeac05a244ec25e000ec00a000ec25e00cd025e008d0037ff0d025e004d0213ffcd0213ff8d0213ff4a810000fa610000da410000992013ff4901000177ffe25c988013ff4e6213ffce8213ff888013ff880a4a00132800004e204a00010800011e2012004fa04a004fa213ffcd604600cd4046008d2046004d00460009a0120104000005588013ffce401200088012004f606201880a1001b8bd0201830bfffede0047ffcd0042004da012008de012000f403600081c6a00488012014|@5289,131071|40,4,@5284 104,5,@2283 172,5,@5287 5284:C2,124|9e13e002f606201880a1001b8bd02018de213ffcfa03600cfa213ff8fa036008fa213ff4fa036004fa213ff092100008113f02ae900222dc7ffd767488013ff0133f00d29202631c7ffd767001000000c401200cd021200cd6012000d401200492102005d00120089e100002353f00d2b406a35081c6a0048801200c|@5286,131071|48,4,@5285 56,5,@496 64,4,@2263 72,5,@496 108,4,@2264 5285:S10|5369676e617475726520 5286:S71|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352970617373325369676e617475726544656328322973456e762d283129 5287:C2,272|9e13e002f606201880a1001b8bd02018c4037ff4de213ffcda213ff8d0213ff4d2213ff0d4213fecd6213fe8fa00bffcfa213fe4d000a0047ffd763588013fe4921020b97ffd763201000000d0213ffcd6012010d401200092102001d0012004ee012014da05fff47ffe69ef88013ffcac100008901000167ffe335501000000aa100008901000167ffe336501000000ea213ffcd0213ff8d005a0007ffe5f8d88013ff88c21a0148b196014ba102004a8100006fa21bffce6012004e625200ce4012000e4252008e2012014e2252004d0252000e0012010e8242000de01201c8c21a00c8b19600cba10200290100006fa21bffce8222004e2222000da03fffcde012020f403600081c6a00488012024|@5288,131071|56,5,@496 68,5,@496 104,5,@2771 120,5,@2408 136,5,@2410 156,5,@2690 5288:S84|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352970617373325369676e617475726544656328322970617373325369676e617475726542696e64283429 5289:S63|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352970617373325369676e6174757265446563283229 5290:C2,800|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d0213ff4d2213ff0901020297ffdfa5f88013ff08c21a0148b196014ba10200484100006fa21bffcae102001ee20a00cac102001ec20a0082b000083aa0563d8ea20a004d020a000901000021b3f00d99a0363387ffe2a7b01000000e8012008e6053ffc8c21a0108b196010ba102003a4100006fa21bffc233f02b0a204604ce224a000e0022018e024a008de04e018de24a0048c21a0108b196010ba10200382100006fa21bffc1b3f02b09a0360c4da206000d8022020d8206008d604e020d62060048c21a0108b196010ba10200394100006fa21bffc133f02b09202613cd222a000c402202cc422a008ee04e02cee22a0048c21a0348b196034ba10200cac100006fa21bffcd425a02cea04e028ea25a028e2022024e225a024c225a020da02201cda25a01ce425a018d204e014d225a014e0022010e025a010e802200ce825a00cde022008de25a008d8022004d825a004173f02b09602e1b4d625a000d6012008d0213ffce4213ff8c2213ff4e0213ff0d4213fecd2213fe8ea213fe4da213fe0e402e004e4213fdce402fff4fa02fff0fa213fd8d6013fd89410001692100012d0012004e2012008da0460007ffe21d388013fdce00120288c21a0108b196010ba1020039e100006fa21bffc033f02b082006238c223e000da01201cda23e008d8043ffcd823e0048c21a0108b196010ba10200396100006fa21bffc153f02b09402a2f4d422e000da22e008d822e0048c21a0108b196010ba10200392100006fa21bffc113f02b090022360d0226000da226008d82260048c21a0108b196010ba10200384100006fa21bffc2f3f02b0ae05e3ccee20a000da20a008d820a0048c21a0348b196034ba10200cac100006fa21bffcea01200cea25a02ce8012004e825a028d225a024e6012014e625a020e4012000e425a01ce2012018e225a018c2012008c225a014da012010da25a010d625a00cde25a008c425a004173f02b09602e1b4d625a000d4042004d201202cd421202cd6043ff09410001690100009d2043ff484100008d0012020da0420009e100002353f00d1b406a22481c6a0048801202c|@5302,131071|36,5,@1992 80,4,I48 100,4,@2307 108,5,@2309 144,4,@5291 192,4,@5292 240,4,@5293 364,4,@5294 456,5,@2252 488,4,@5297 536,4,@5299 576,4,@5300 616,4,@5301 728,4,@5294 784,4,@2252 5291:C2,92|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d0213ff4da036008f40360009fc6a00088013ff480a2200132800009c4012008c4012004d0012000da00a004de012008f403600081c6a0048801200c81c0a0068801200c|@1463,131071| 5292:C2,92|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d0213ff4da036008f40360009fc6a00088013ff480a2200132800009c4012008c4012004d0012000da00a004de012008f403600081c6a0048801200c81c0a0068801200c|@1463,131071| 5293:C2,92|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d0213ff4da036008f40360009fc6a00088013ff480a2200132800009c4012008c4012004d0012000da00a004de012008f403600081c6a0048801200c81c0a0068801200c|@1463,131071| 5294:O1|@5295 5295:C2,16|9e13e0029010200181c3e00601000000|@5296,129| 5296:S71|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352970617373324c6f63616c6465632832296c6f63616c456e762d283129 5297:C2,80|9e13e002f606201880a1001b8bd02018c4036008de213ffcda213ff8d0213ff4da00a008f40360009fc6a00088013ff4ee012004ec05e004d0012000da05a008de012008f403600081c6a0048801200c|@5298,131071| 5298:S70|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352970617373324c6f63616c646563283229626f6479456e762d283129 5299:C2,80|9e13e002f606201880a1001b8bd02018c4036008de213ffcda213ff8d0213ff4da00a00cf40360009fc6a00088013ff4ee012004ec05e004d0012000da05a00cde012008f403600081c6a0048801200c|@5298,131071| 5300:C2,80|9e13e002f606201880a1001b8bd02018c4036008de213ffcda213ff8d0213ff4da00a024f40360009fc6a00088013ff4ee012004ec05e004d0012000da05a024de012008f403600081c6a0048801200c|@5298,131071| 5301:C2,80|9e13e002f606201880a1001b8bd02018c4036008de213ffcda213ff8d0213ff4da00a004f40360009fc6a00088013ff4ee012004ec05e004d0012000da05a004de012008f403600081c6a0048801200c|@5298,131071| 5302:S59|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352970617373324c6f63616c646563283229 5303:C2,336|9e13e002f606201880a1001b8bd02018c4037ffc8c21a0108b196010ba102003ae100006fa21bffc2d3f02b1ac05a1e8ec25e000c425e008d225e0048c21a0108b196010ba102003ac100006fa21bffc2b3f02b1aa0563c4ea25a000c425a008d225a0048c21a0108b196010ba102003aa100006fa21bffc293f02b2a8052134e8256000c4256008d22560048c21a0108b196010ba102003a8100006fa21bffc273f02b2a604e2ace6252000c4252008d22520048c21a0348b196034ba10200c92100006fa21bffce600a02ce622602ce400a028e4226028e8226024e800a020e8226020e200a01ce222601ce000a018e0226018c200a014c2226014d800a010d8226010ec22600cee226008ee00a004ee226004ea226000ec036000de213ffcd4213ff8ea036004ea213ff4d605a00094100009d2037ff87ffe7e9488013ff490102001e801200081c5200688012004|@5313,131071|40,4,@5304 80,4,@5307 120,4,@5309 160,4,@5311 312,5,@2922 5304:C2,228|9e13e002f606201880a1001b8bd02018c4036008de213ffcda213ff8fa022004fa213ff4da00a008f40360009fc6a00088013ff4ee012004ec05e004ea05a000e80120008c21a0188b196018ba102005a6100006fa21bffce405200ce424e010e2052008e224e00ce0052004e024e008de052000de24e00482103ff9c224e0008c21a00c8b19600cba1020029a100006fa21bffc98102001d8236004e623600080a3600132800005da213ffc9610001510800009d625a000901000159a0120084000001088013ffc9610000888012004d625a00090102001d401200881c2a0068801200c|@5306,131071|192,5,@5305 5305:C2,112|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffcd0037ff481c3e00601000000da213ff8fa022000fa213ff4d00220047ffffff288013ff48c21a00c8b19600cba1020029e100006fa21bffcd023e004da012000da23e0009010000fde01200881c3e0068801200c|@1966,161| 5306:S70|535452554354555245535f28292e7061737332537472756374732833297061737332537472756374283529706173733253696e676c65746f6e2833296e6577456e762d283129 5307:C2,200|9e13e002f606201880a1001b8bd02018c4036008de213ffcda213ff8fa022004fa213ff4da00a00cf40360009fc6a00088013ff4ee012004ec05e004ea05a0008c21a00c8b19600cba102002a8100006fa21bffce6012000e6252004a4102005e42520008c21a00c8b19600cba102002a2100006fa21bffca0102001e0246004e824600080a4600132800005e2213ffc9e10001510800009de25a000901000159a0120084000001088013ffc9e10000888012004de25a00090102001c201200881c060068801200c|@5306,131071|164,5,@5308 5308:C2,112|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffcd0037ff481c3e00601000000da213ff8fa022000fa213ff4d00220047ffffff288013ff48c21a00c8b19600cba1020029e100006fa21bffcd023e004da012000da23e0009010000fde01200881c3e0068801200c|@1966,161| 5309:C2,208|9e13e002f606201880a1001b8bd02018c4036008de213ffcda213ff8d0213ff4da00a000f40360009fc6a00088013ff4ee012004ec05e004ea05a000e80120008c21a0108b196010ba102003a6100006fa21bffce4052004e424e008e2052000e224e004a0102001e024e0008c21a00c8b19600cba1020029e100006fa21bffc82102001c223e004e623e00080a3e00132800005de213ffc9a10001510800009da25a000901000159a0120084000001088013ffc9a10000888012004da25a00090102001d801200881c320068801200c|@5306,131071|172,5,@5310 5310:C2,112|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffcd0037ff481c3e00601000000da213ff8fa022000fa213ff4d00220047ffffff288013ff48c21a00c8b19600cba1020029e100006fa21bffcd023e004da012000da23e0009010000fde01200881c3e0068801200c|@1966,161| 5311:C2,200|9e13e002f606201880a1001b8bd02018c4036008de213ffcda213ff8fa022004fa213ff4da00a024f40360009fc6a00088013ff4ee012004ec05e004ea05a0008c21a00c8b19600cba102002a8100006fa21bffce6012000e6252004a4103ffde42520008c21a00c8b19600cba102002a2100006fa21bffca0102001e0246004e824600080a4600132800005e2213ffc9e10001510800009de25a000901000159a0120084000001088013ffc9e10000888012004de25a00090102001c201200881c060068801200c|@5306,131071|164,5,@5312 5312:C2,112|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffcd0037ff481c3e00601000000da213ff8fa022000fa213ff4d00220047ffffff288013ff48c21a00c8b19600cba1020029e100006fa21bffcd023e004da012000da23e0009010000fde01200881c3e0068801200c|@1966,161| 5313:S60|535452554354555245535f28292e7061737332537472756374732833297061737332537472756374283529706173733253696e676c65746f6e283329 5314:S54|535452554354555245535f28292e70617373325374727563747328332970617373325374727563742835297061737332446563283129 5315:S43|535452554354555245535f28292e7061737332537472756374732833297061737332537472756374283529 5316:S29|535452554354555245535f28292e706173733253747275637473283329 5317:C2,240|9e13e002f606201880a1001b8bd020188c21a00c8b19600cba10200284100006fa21bffc2f3f02b3ae05e208ee20a000d620a004ac1000088c21a00c8b19600cba10200290100006fa21bffc2b3f02b6aa056314ea222000d6222004de213ffcd2213ff8d4213ff4c4213ff09a100016f40360009fc6a00088013ff08c21a00c8b19600cba10200290100006fa21bffc293f02b6a80523a8e8222000e6012000e6222004da012008f40360009fc6a000010000008c21a00c8b19600cba10200290100006fa21bffc253f02b7a404a07ce4222000e2012000e2222004da012004de01200cf403600081c6a00488012010|@5346,131071|36,4,@5318 76,4,@5342 144,4,@5344 200,4,@5345 5318:C2,148|9e13e002f606201880a1001b8bd020188c21a0148b196014ba10200484100006fa21bffc2f3f02b3ae05e2b8ee20a000ee036004ee20a00cd020a008da20a004ac10000faa10000d901000097ffe3161010000008c21a00c8b19600cba1020029e100006fa21bffc1b3f02b69a036248da23e000c423e004941020019210000f9e100016353f00eeb406a27881c6a00401000000|@5341,131071|36,4,@5319 76,5,@2425 104,4,@5339 132,4,@2508 5319:C2,388|9e13e002f606201880a1001b8bd020189410000fac10000daa100008901000091b3f00de9a0362347ffe2ad80100000080a220012280003390100009d4213ffcec213ff8d2213ff492100015d005a0087ffd715188013ff4921020b97ffd714e01000000a8100008d00120001b3f00de9a0362287ffe2aef0100000080a2200132800016e6022008e8213ffc901020297ffdf5da88013ffc8c21a0148b196014ba102004a4100006fa21bffca2102001e224a00ca0102001e024a0081f0000839e03e3d8de24a004d024a000a610001210800005e4012008e8213ffc88013ffce401200892100013d0012000da04a004de01200cf403600081c6a004880120101b3f00df9a03619c7ffe2b7a0100000080a220012280001a90102001d4213ffcec213ff8d2213ff492100015d005a0087ffd711988013ff4a8100008d00120001b3f00df9a0361907ffe2b94010000007ffe575b01000000e6012004d404e00c9210000890100014de012008353f02b4b406a05881c6a0048801200c81c2a00601000000|@5338,131071|32,4,@2357 40,5,@2358 80,5,@496 92,5,@496 108,4,@2356 116,5,@2361 144,5,@1992 188,4,I48 256,4,@2377 264,5,@2378 304,5,@496 320,4,@2376 328,5,@2381 336,5,@2659 364,4,@5320 5320:C2,208|9e13e002f606201880a1001b8bd020188c21a0088b1960083b100000ba07600184100006fa21bffcae102001ee20a0008c21a0148b196014ba102004ae100006fa21bffc2d3f02b4ac05a144ec25e000c425e00cd425e008d025e0048c21a00c8b19600cba10200290100006fa21bffc2b3f02b6aa0560b8ea222000ee222004a810000f7ffe49ba01000000e8213ffca6100008901000099a100013f40360009fc6a00088013ffca4100008901020019a100012f40360009fc6a0000100000090102001e201200081c4600688012004|@5337,131071|68,4,@5321 112,4,@5333 132,5,@2587 5321:C2,844|9e13e002f606201880a1001b8bd02018ae10000fac10000d901000097ffdb0690100000080a22001228000c790102001aa100017901000097ffdb0730100000084100008d200a004d000a0007ffe041001000000ae1000027ffe04210100000080a22001228000b690102001d205e004d005e0007ffe05600100000080a22005328000af90102001e805a00cd0052000ea213ffcec213ff8ee213ff4400000b388013ff4921000089010217d7ffd709701000000e6012004e404e00ce204a000b8246001b9172004a0072001e024a00082100008901020017ffe1d4e01000000da01200098100008d2036004d00360007ffe003201000000d0213ffc96102001d6213ff89610000c153f000f9402a0cc92102001901000014000010788013ff8d0213ffcd0213ff8941000089010000a7ffdb07388013ff87ffdb0860100000080a2200122800010920120008c21a0088b1960083b100000ba07600192100006fa21bffcd42260009001200084103ffdc4222000ae012000d225e004108000078c21a00c90102001d022600084012000d420a0048c21a00c8b19600cba102002ae100006fa21bffcec012000ec25e000ea012004ea25e0048c21a0108b196010ba10200390100006fa21bffcee222008c2222004a8102001e82220007ffdb07701000000e204e008d0213ffce2213ff8e0046010e0213ff4de046014de213ff0c2046018c2213fecda04601cda213fe8d8046020d8213fe4d6046024d6213fe0d604600cd4046008d2046004d00460007ffda18a88013fe0d40120148c21a00c8b19600cba10200292100006fa21bffc053f02b58400a3b0c4226004ee02a004ee226000ac1000088c21a00c8b19600cba10200290100006fa21bffcd22220042b3f02b6aa05601cea222000ec213ffc7ffd72ec88013ffc8c21a00c8b19600cba102002a8100006fa21bffc273f02b6a604e034e6252000d0252004e4012004e204a004e2213ffce004a008e0213ff8de04a00cde213ff4c204a010c2213ff0da04a014da213fecd804a018d8213fe8d604a01cd6213fe4d404a020d4213fe0d204a024d2213fdcd604a00094102001d2012000901000147ffd8cfd88013fdcd2012008d0012014de01201c353f0064b406a39481c6a0048801202081c560060100000081c5e00601000000|@5332,131071|28,5,@1606 56,5,@1607 76,5,@2100 88,5,@2102 116,5,@2110 156,5,@5322 172,5,@496 216,5,@2254 240,5,@2090 264,4,@375 280,5,@5324 304,5,@1613 312,5,@1615 476,5,@1617 560,5,@1484 592,4,@5326 640,4,@5330 656,5,@520 684,4,@5331 792,5,@1265 812,4,@1608 5322:C2,372|9e13e002f606201880a1001b8bd02018b8222001811f20682680002001000000b8222001811f200026800003ae102001ae10200580a5e00532800005b8222001ac10000810800005de213ffcb91f2064ac072001de213ffcd0213ff892102069901000161b0000859a036378f40360009fc6a00088013ff8b8222001b91f2004900720017fffffe09e13e0028410000810800008c4213ffc050000838400a3d8de213ffcd0213ff888013ff8c4213ffc92102069d00120001b0000859a036398f40360009fc6a00088013ffc80a2200132800004b82220011080000c84100008811f200026800003841020018410200580a0a0052280000584100008b8222001b917206884072001b820a001b9172184ae072001811f200036800004b825e0011080000701000000811f23fc348000040100000010800009ac100017113f0027900220f8f40620209fc6a00001000000ac102001ac10001792100016d0012000de012008353f0025b406a04c81c6a0048801200c|@5323,131071|100,4,I109 152,4,I48 184,4,I110 316,4,@511 356,4,@496 5323:S50|545950455f5452454528292e636865636b466f7246726565547970655661726961626c657328332967656e4e616d65283129 5324:C2,236|9e13e002de213ffcd0213ff8d2213ff4d4213ff0d6213fec8410200188013fec80a2600132800005b820a001ae1000021080000a8c21a010b91720049e072001d20260048410000ff606201880a1001b8bd0201830bffff38b196010ba1020039e100006fa21bffc96102001d623e008d4012004d423e004d2012018d223e0008c21a00c8b19600cba10200290100006fa21bffcde22200484102001c42220008c21a01c8b19601cba1020069e100006fa21bffcd6012000d623e014d023e010d4012008d423e00cd0012014d023e008ee23e004c401200cc423e0009010000fee01201081c5e0068801201c|@5325,98447| 5325:S38|5354525543545f56414c5328292e6d616b6546726f7a656e54797065436f6e73747273283629 5326:O2|@5328,@5327 5327:O2|@5329,0 5328:S33|2920636f6e7461696e73206120667265652074797065207661726961626c652e0a 5329:S32|53657474696e6720697420746f206120756e69717565206d6f6e6f747970652e 5330:S13|5468652074797065206f662028 5331:C2,40|9e13e002f606201880a1001b8bd02018c402200cd00360049a100002f403600081c6a00401000000|@1668,131071| 5332:S53|545950455f5452454528292e636865636b466f7246726565547970655661726961626c6573283329636865636b5479706573283229 5333:C2,60|9e13e002841000088c21a0108b196010ba10200390100006fa21bffc2f3f02b6ae05e110ee222000ee036004ee222008c422200481c3e00601000000|@5336,98465|28,4,@5334 5334:C2,36|9e13e002f606201880a1001b8bd02018d2036004da036008f403600081c6a00401000000|@5335,131071| 5335:S56|545950455f5452454528292e636865636b466f7246726565547970655661726961626c6573283329636865636b5479706573283129283129 5336:S53|545950455f5452454528292e636865636b466f7246726565547970655661726961626c6573283329636865636b5479706573283129 5337:S40|545950455f5452454528292e636865636b466f7246726565547970655661726961626c6573283329 5338:S64|535452554354555245535f28292e636865636b466f72467265655479706556617273283429636865636b537472756374283229636865636b456e747279283329 5339:C2,44|9e13e002f606201880a1001b8bd02018d4022008d2022004d0022000da036004f403600081c6a00401000000|@5340,131071| 5340:S64|535452554354555245535f28292e636865636b466f72467265655479706556617273283429636865636b537472756374283229636865636b456e747279283129 5341:S51|535452554354555245535f28292e636865636b466f72467265655479706556617273283429636865636b537472756374283229 5342:C2,72|9e13e002f606201880a1001b8bd020188410000fae10000dec022000d00220047ffe549001000000d405e00492100008901000169e100002353f02b4b406a05881c6a00401000000|@5343,131071|32,5,@2659 56,4,@5320 5343:S40|535452554354555245535f28292e636865636b466f72467265655479706556617273283429283129 5344:C2,184|9e13e002f606201880a1001b8bd02018de213ffcda213ff8fa022004fa213ff4921020b9d00220007ffd6e1f88013ff4ee01200080a5e00132800016c405e008d0213ffc901020297ffdf2b088013ffc8c21a0148b196014ba102004ac100006fa21bffcaa102001ea25a00ca8102001e825a00827000083a604e3d8e625a004d025a0008410001610800005ec012008d0213ffc88013ffcec01200892100002d0012000da05a004de01200cf403600081c6a00488012010|@5343,131071|40,5,@496 72,5,@1992 116,4,I48 5345:C2,100|9e13e002f606201880a1001b8bd02018de213ffcda213ff8fa022004fa213ff4133f02ad920261b4d00220007ffd6de988013ff484100008d00120007ffe2ad801000000ee0120049210000890100002da05e004de012008f403600081c6a0048801200c|@5343,131071|32,4,@5272 44,5,@496 60,5,@2404 5346:S37|535452554354555245535f28292e636865636b466f72467265655479706556617273283429 5347:O3|103,@522,@5348 5348:S21|537461746963206572726f72732028706173733229 5349:C2,616|9e13e002f606201880a1001b8bd020188c21a0088b1960083b100000ba07600184100006fa21bffcae102005ee20a0008c21a00c8b19600cba102002ae100006fa21bffc2d3f02b7ac05a3e0ec25e000c425e0048c21a0088b1960083b100000ba076001ac100006fa21bffcaa102001ea25a0008c21a0188b1960183b100000ba076005aa100006fa21bffc293f02b8a8052054e8256000a8102001e8256004a8102001e8256008a8102001e825600ca8102001e82560108c21a0188b196018ba102005a8100006fa21bffc273f0335a604e030e6252000ee252010d225200cea252008ec252004e8256004ec256008c425600cd2256010c02d7ffc8c21a00c8b19600cba10200292100006fa21bffc053f033d8400a020c4226000ea226004d0213ffcd0213ff8d0213ff4de213ff096013ff49410000992100008113f033d900220b84000022e88013ff08c21a00c8b19600cba102002ae100006fa21bffcec012008ec25e004aa102029ea25e000ee213ffc88013ffc80a5a00132800005e605a000a81020051080000c80a52001e404e00080a4bff532800007a8102001ec05a004f606201880a1001b8bd0201830bffff280a520012280000de2012000d00120007ffeae89010000008c21a00c8b19600cba102002a2100006fa21bffcd0246004a0103ff5e02460008c21a00c8b19600cba102002a0100006fa21bffc9e102001de242004e224200080a4200132800005e0213ffcc2012008108000098c21a00cd00120089a0120104000856988013ffc82100008880120048c21a00c8b19600cba10200290100006fa21bffcc22220049a102025da222000d801200481c3200688012014|@6148,131071|68,4,@5350 140,4,@5352 204,4,@6120 272,4,@6142 316,4,@6143 324,5,@5359 452,5,@3258 556,5,@6147 5350:C2,40|9e13e002d0036004c4022000b820a001b9172004ae072001ee2220009010000281c3e00601000000|@5351,98465| 5351:S40|535452554354555245535f28292e67656e636f6465537472756374732832296d6b41646472283129 5352:C2,772|9e13e002f606201880a1001b8bd02018c402600080a0a01d3280002280a0a0098c21a0188b196018ba102005ae100006fa21bffc2d3f02b8ac05a374ec25e000ec03600cec25e010ea036008ea25e00cd025e008d0036004d025e0048c21a00c8b19600cba102002a8100006fa21bffc273f02b9a604e27ce6252000ee252004a410000a94100014d202600490100012353f02b9b406a35881c6a004010000003280002480a0a00d8c21a01c8b19601cba102006ae100006fa21bffc2d3f02baac05a1e8ec25e000d025e014ea036010ea25e010e8036004e825e00ce603600ce625e008e4036008e425e0048c21a00c8b19600cba102002a2100006fa21bffc213f02bca00420a4e0246000ee2460048210000a94100011d202600490100001353f02b9b406a35881c6a004010000003280004680a0a0198c21a0108b196010ba102003ae100006fa21bffc2d3f02bcac05a17cec25e000d025e008da25e004d0213ffcd0213ff8d0213ff4de213ff0da213fecd0213fe8d6213fe4fa026004fa213fe096013ff4aa10000a94100017d2026008901000154000015b88013fe08c21a0108b196010ba102003a8100006fa21bffc273f02bca604e248e6252000e4012008e4252008e201200ce2252004d0213ffcd0213ff8d0213ff496013ff494100014d2012000d001201c4000014688013ff4de01200080a3e00132800005d0012020e001202010800007c20120109a0120284000041d01000000a0100008c2012010e0206000da012004da206004d8012008d820600890102001d601201c81c2e0068801202c32800028ae102001ee036008ec05e000de213ffcda213ff8d6213ff4fa02600cfa213ff0ea03600cea213fecd0213fe8e8026008e8213fe496100016e6026004d2036010901000134000042188013fe4e4012000e204a000fa022000fa213ffcfa022004fa213ff8901000119a01200c40007bd988013ff8e001200cde012004de242000d0242004c2012000c224200890102001da01201481c3600688012018ee22e000ac102001ec22e004d422e0089010200181c3e00601000000|@6119,131071|52,4,@5353 112,4,@5357 144,4,@5359 188,4,@5363 256,4,@5382 288,4,@5359 332,4,@5384 408,5,@5359 436,4,@5386 492,5,@5359 532,5,@5387 656,5,@5388 696,5,@6117 5353:C2,520|9e13e002f606201880a1001b8bd02018c4036010ee00a000b825e001b9172004ac072001ec20a000ea022010ec022004e8022008d0056000a610000fa410000d7ffe595601000000a2100016a0100015821000174000007401000000da022000c2236000c404a00cee00a000ec022004ee25a000e6213ffce4213ff8d2213ff4d4213ff0e8213fece0213fe8c2213fe492100011d004a0087ffd6c1088013fe4921020b97ffd6c0d01000000ea012004e805600080a5200132800016e6052008d0213ffc901020297ffdf09d88013ffc8c21a0148b196014ba102004a4100006fa21bffca2102001e224a00ca0102001e024a0081f0000839e03e3d8de24a004d024a000a610001210800005e4012018d0213ffc88013ffce4012018d6012014d401200092100013d001200cda04a004f40360009fc6a000010000008c21a0148b196014ba102004a2100006fa21bffca0102001e024600cd0246008de012004de24600482103ff1c22460008c21a00c8b19600cba1020029a100006fa21bffc98102001d8236004e22360008c21a0188b196018ba10200596100006fa21bffc94102001d422e01092102001d222e00c90102005d022e008de22e00484103fedc422e0008c21a00c8b19600cba102002ae100006fa21bffcac102001ec25e004d625e000ea012010da256000ee256004e8012014e825600890102001e601201c81c4e00688012020|@5356,131071|64,5,@2710 84,5,@5354 152,5,@496 164,5,@496 200,5,@1992 244,4,I48 5354:C2,92|9e13e002c402200080a0a0053280000ede213ffc8c21a00c8b19600cba102002ae100006fa21bffcec022008ec25e004ea022004ea25e0009010001781c3e00601000000113f003890022020f40620209fc6a00088013ffc90102001|@5355,123009|68,4,@1110 5355:S24|5354525543545f56414c5328292e76614c6f63616c283129 5356:S65|535452554354555245535f28292e67656e636f646553747275637473283229636f646553747264656373283429636f646553747275637475726542696e64283329 5357:C2,116|9e13e002f606201880a1001b8bd02018d0213ffcd0213ff8d0213ff4de213ff094013ff4d2022004d0022000da036004f40360009fc6a00088013ff08c21a0108b196010ba10200390100006fa21bffcc4012004c4222000ee012008ee222004ec01200cec222008ea01200081c5600688012010|@5358,131071| 5358:S65|535452554354555245535f28292e67656e636f646553747275637473283229636f646553747264656373283429636f646553747275637475726542696e64283129 5359:C2,296|9e13e002f606201880a1001b8bd0201880a260013280000a8410000894102001d422e00092102001d222e004d022e0089010200181c3e006010000008c21a00c8b19600cba10200290100006fa21bffcc4222004ee026000ee222000de213ffcd4213ff8d6213ff4fa026004fa213ff09a10000af40360009fc6a00088013ff0d0213ffcd0213ff8d0213ff4d0213ff096013ff4d4012008d2012000d00220087fffffd888013ff0ec012000e801200480a5200132800005d005a000ea05a00010800007e40120089a01201c4000001e01000000aa100008e401200880a4a00132800005d005a004e605a00410800007e20120149a01201c4000003601000000a6100008e2012014ea246000e6246004e001200ce024600890102001de01201c81c3e00688012020|@5362,131071|204,5,@5360 248,5,@5361 5360:C2,112|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffcd0037fe881c3e00601000000da213ff8fa022000fa213ff4d00220047ffffff288013ff48c21a00c8b19600cba1020029e100006fa21bffcd023e004da012000da23e0009010000fde01200881c3e0068801200c|@1966,161| 5361:C2,112|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffcd0037fec81c3e00601000000da213ff8fa022000fa213ff4d00220047ffffff288013ff48c21a00c8b19600cba1020029e100006fa21bffcd023e004da012000da23e0009010000fde01200881c3e0068801200c|@1966,161| 5362:S41|535452554354555245535f28292e67656e636f6465537472756374732832296d617050616972283429 5363:C2,752|9e13e002f606201880a1001b8bd02018c4022000ee00a00080a5e005328000afde213ffcec036004ea05a000b8256001b9172004a8072001e825a000ea036008e8056000a6102005e6256000e600a008e4022004e202200ce0022014d004e0008210000f9810000d7ffe57af010000007ffffed001000000c4022000ae103ffdee20a000ec032004ea05a000e6022004ea24e000de042000c2213ffcd8213ff8d2213ff4d4213ff0e4213fece8213fe8de213fe492100011d00320147ffd6a6a88013fe4c2012014da006010d0213ffc133f02bb920260f4d00360241b3f00389a0360407ffd7d6388013ffc80a220012280000601000000193f02bb9803221c10800005d0012004193f02bb980322e4d00120047ffe274701000000d8213ffcd0213ff8133f02ad920261b4d00120007ffd6a4d88013ff8d8012020d601201c94100008d2012000d0012014da03200cf40360009fc6a00001000000d6012020d402e004d202a000841000088c21a0148b196014ba10200490100006fa21bffcee012008ee22200cac102005ec222008d2222004c4222000da012004f40360009fc6a00001000000ea012020e8056004e6052000b824e001b91f2004a4072001e4252000e2012010b8246001b9172004a0072001de056008e023e00082100008d001200c400000f6010000007ffffe7101000000da022000e2236000d8012020d6032004d402e000d2022004d42260008c21a0148b196014ba10200484100006fa21bffcae102001ee20a00cc220a008e220a004ac103ff1ec20a0008c21a00c8b19600cba102002aa100006fa21bffca8102001e8256004c42560008c21a0188b196018ba102005a6100006fa21bffca4102001e424e010a0102001e024e00c9e102005de24e008e224e00482103fedc224e0008c21a00c8b19600cba10200294100006fa21bffc84102001c422a004e622a000ee012018ea25e000d425e004ec01201cec25e00890102001ea01202481c5600688012028113f02bc90022020f40620209fc6a00088013ffc90102001|@5381,131071|104,5,@2710 112,5,@5354 188,5,@496 208,4,@5364 220,4,@1112 228,5,@1114 248,4,@5371 264,4,@5374 276,5,@2404 292,4,@5272 304,5,@496 484,5,@5377 492,5,@5354 728,4,@5379 5364:O3|@5366,@5368,@5365 5365:O2|@5370,@83 5366:O2|@5367,@83 5367:C2,44|9e13e002c4022000ee03600480a0801732800005901020019010200581c3e0060100000081c3e00601000000|@1106,98465| 5368:O2|@5369,@83 5369:C2,56|9e13e002841000088c21a0108b196010ba10200390100006fa21bffcc422200884102115c4222004c4036004c422200081c3e00601000000|@1106,65697| 5370:C2,60|9e13e002c4022000ee03600480a0801732800005de213ffcd002200881c3e00601000000113f003890022020f40620209fc6a00088013ffc90102001|@1106,98465|36,4,@1110 5371:O1|@5372 5372:C2,128|9e13e0028c21a0248b196024ba10200884100006fa21bffcae102001ee20a01cae102001ee20a018ae102005ee20a014ee022008ee20a010ac102001ec20a00cec022004ec20a008ea02200cea20a004e8022000e820a0008c21a00c8b19600cba10200290100006fa21bffcc422200484103fe5c422200081c3e00601000000|@5373,127105| 5373:S25|434f44455452454528292e6d6b4d6163726f50726f63283129 5374:O1|@5375 5375:C2,128|9e13e0028c21a0248b196024ba10200884100006fa21bffcae102001ee20a01cae102001ee20a018ae103ffdee20a014ee022008ee20a010ac102001ec20a00cec022004ec20a008ea02200cea20a004e8022000e820a0008c21a00c8b19600cba10200290100006fa21bffcc422200484103fe5c422200081c3e00601000000|@5376,127105| 5376:S20|434f44455452454528292e6d6b50726f63283129 5377:C2,56|9e13e00280a220013280000ad0022008de213ffc113f003890022020f40620209fc6a00088013ffc90102001d002200881c3e00601000000|@5378,129|20,4,@1110 5378:S30|5354525543545f56414c5328292e66756e63746f72416363657373283129 5379:O3|@24,@397,@5380 5380:S34|636f646546756e63746f7242696e643a206e6f7420612046756e63746f7242696e64 5381:S63|535452554354555245535f28292e67656e636f646553747275637473283229636f646553747264656373283429636f646546756e63746f7242696e64283329 5382:C2,116|9e13e002f606201880a1001b8bd02018d0213ffcd0213ff8d0213ff4de213ff094013ff4d2022004d0022000da036004f40360009fc6a00088013ff08c21a0108b196010ba10200390100006fa21bffcc4012004c4222000ee012008ee222004ec01200cec222008ea01200081c5600688012010|@5383,131071| 5383:S63|535452554354555245535f28292e67656e636f646553747275637473283229636f646553747264656373283429636f646546756e63746f7242696e64283129 5384:C2,120|9e13e002f606201880a1001b8bd02018d0213ffcd0213ff8d0213ff4de213ff096013ff4d4022004d2022000d0036008da036004f40360009fc6a00088013ff08c21a0108b196010ba10200390100006fa21bffcc4012004c4222000ee012008ee222004ec01200cec222008ea01200081c5600688012010|@5385,131071| 5385:S47|535452554354555245535f28292e67656e636f6465537472756374732832296d617053747264656373283329283129 5386:C2,120|9e13e002f606201880a1001b8bd02018d0213ffcd0213ff8d0213ff4de213ff096013ff4d4022004d2022000d0036008da036004f40360009fc6a00088013ff08c21a0108b196010ba10200390100006fa21bffcc4012004c4222000ee012008ee222004ec01200cec222008ea01200081c5600688012010|@5385,131071| 5387:C2,112|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffcd0037fd881c3e00601000000da213ff8fa022000fa213ff4d00220047ffffff288013ff48c21a00c8b19600cba1020029e100006fa21bffcd023e004da012000da23e0009010000fde01200881c3e0068801200c|@1966,161| 5388:C2,1440|9e13e002f606201880a1001b8bd020188c21a00c8b19600cba10200284100006fa21bffc2f3f02beae05e124ee20a000ee012008ee20a0048c21a0088b1960083b100000ba076001ac100006fa21bffcd625a0008c21a0088b1960083b100000ba07600196100006fa21bffcaa102001ea22e000de213ffcd0213ff8d2213ff4d4213ff0c4213fecec213fe8d6213fe4e8026024133f02be92026190901000141b3f00389a0360407ffd7b1288013fe4e6012010d0213ffc133f02be920262b8d004e0241b3f00389a0360407ffd7b0988013ffce4012014d0213ffce204a02488013ffc80a4600132800005d0046000a010200110800016808c20011b3f02be9a0363e0400001e00100000080a220012280000be20460048c21a0088b196008ba102001a0100006fa21bffcde046000de24200010800006808c2001f606201880a1001b8bd0201830bfffe73280000a01000000d00420001b3f02bf9a036034400001de0100000082100008108000058c21a018033f02bf820060988c21a0188b196018ba1020059a100006fa21bffc193f02bf980320ecd8236000c2236010d6012004d623600cd4012008d4236008d201200cd22360048c21a0148b196014ba10200490100006fa21bffc053f02c48400a29cc4222000ee012000ee22200cec012010ec222008d22220048c21a01c8b19601cba102006aa100006fa21bffc293f02c6a80520b4e8256000ee256014d2256010e6012018e625600ce4012024e4256008d02560048c21a01c8b19601cba102006a2100006fa21bffc213f02f6a0042274e0246000ee246014c2246010d624600ce4246008d22460048c21a00c8b19600cba1020029e100006fa21bffc033f02f9820060c4c223e000e623e0048c21a0108b196010ba10200398100006fa21bffc173f02fa9602e014d6232000de232008e62320048c21a00c8b19600cba10200284100006fa21bffc293f0306a8052330e820a000d820a0048c21a0148b196014ba102004a0100006fa21bffc033f0307820060fcc2242000d601202cd624200cd0242008d2242004d0213ffcd0213ff8a8013ff882102001c2252000a8013ff8033f0308820061d0c22520048c21a00c88013ff88b19600cba102002a8100006fa21bffcc2012000c2252000c2012004c2252004d0213ffcd0213ff882013ff8a6102001e620600082013ff8273f0308a604e1dce62060048c21a00c88013ff88b19600cba10200282100006fa21bffce6012000e6206000e6012004e6206004d0213ffcd0213ff8a6013ff8ac102001ec24e000a6013ff82d3f0308ac05a200ec24e0048c21a00c88013ff88b19600cba102002a6100006fa21bffcec012000ec24e000ec012004ec24e0048c21a0148b196014ba102004ac100006fa21bffc133f030892026234d225a000e025a00ce825a008e8012024e825a0048c21a0108b196010ba102003a0100006fa21bffc133f031392026324d2242000d0242008e82420048c21a0248b196024ba10200890100006fa21bffc133f0316920260c0d2222000c422201cd2012028d2222018e8222014d6222010c222200cec222008e02220048c21a01c8b19601cba102006a0100006fa21bffc033f031a820063b4c2242000d8242014d2242010e624200cec242008e82420048c21a0408b196040ba10200f98100006fa21bffc2d3f031bac05a3e0ec232000c4232038de232034d0232030d423202cda232028e6012030e6232024e4232020e023201cee232018e2232014d6232010d223200ce8232008ea2320048c21a00c8b19600cba102002a2100006fa21bffce4246004e0012034e02460008c21a00c8b19600cba1020029e100006fa21bffc82102001c223e004e223e000d0213ffcd0213ff896013ff8d4012040d201202c9010000f9a10000cf40360009fc6a00088013ff88c21a00c8b19600cba10200290100006fa21bffcda012000da222000d8012004d8222004d601204081c2e00688012050|@6116,131071|36,4,@5389 148,4,@5391 160,4,@1112 168,5,@1114 184,4,@5398 196,4,@1112 204,5,@1114 252,4,@5405 260,5,@5406 344,4,@5407 352,5,@5408 372,4,@5409 400,4,@5412 460,4,@5451 512,4,@5460 572,4,@5792 624,4,@5807 660,4,@5814 700,4,@5877 736,4,@5884 788,4,@5894 864,4,@5895 940,4,@5898 1012,4,@5902 1060,4,@5947 1100,4,@5960 1164,4,@5986 1216,4,@5995 5389:C2,40|9e13e002d0036004c4022000b820a001b9172004ae072001ee2220009010000281c3e00601000000|@5390,98465| 5390:S32|50415253455f5452454528292e67656e636f64652837296d6b41646472283129 5391:O3|@5393,@5395,@5392 5392:O2|@5397,@82 5393:O2|@5394,@82 5394:C2,44|9e13e002c4022000ee03600480a0801732800005901020019010200581c3e0060100000081c3e00601000000|@1106,98465| 5395:O2|@5396,@82 5396:C2,56|9e13e002841000088c21a0108b196010ba10200390100006fa21bffcc422200884102115c4222004c4036004c422200081c3e00601000000|@1106,65697| 5397:C2,60|9e13e002c4022000ee03600480a0801732800005de213ffcd002200881c3e00601000000113f003890022020f40620209fc6a00088013ffc90102001|@1106,98465|36,4,@1110 5398:O3|@5400,@5402,@5399 5399:O2|@5404,@97 5400:O2|@5401,@97 5401:C2,44|9e13e002c4022000ee03600480a0801732800005901020019010200581c3e0060100000081c3e00601000000|@1106,98465| 5402:O2|@5403,@97 5403:C2,56|9e13e002841000088c21a0108b196010ba10200390100006fa21bffcc422200884102115c4222004c4036004c422200081c3e00601000000|@1106,65697| 5404:C2,60|9e13e002c4022000ee03600480a0801732800005de213ffcd002200881c3e00601000000113f003890022020f40620209fc6a00088013ffc90102001|@1106,98465|36,4,@1110 5405:O2|@5406,@120 5406:C2,44|9e13e002c4022000ee03600480a0801732800005901020019010200581c3e0060100000081c3e00601000000|@1106,98465| 5407:O2|@5408,@120 5408:C2,60|9e13e002c4022000ee03600480a0801732800005de213ffcd002200881c3e00601000000113f003890022020f40620209fc6a00088013ffc90102001|@1106,98465|36,4,@1110 5409:O1|@5410 5410:C2,16|9e13e0029010200181c3e00601000000|@5411,129| 5411:S24|44454255474745525f28292e6e756c6c4465627567283129 5412:C2,244|9e13e002f606201880a1001b8bd020188c21a01c8b19601cba10200684100006fa21bffc2f3f02bfae05e1fcee20a000ee026000ee20a014ec036010ec20a010ea03600cea20a00cd020a008d420a004d0036008d42220008c21a00c8b19600cba10200294100006fa21bffcc422a00484103ff5c422a000e8036004d0052000de213ffcd4213ff8da026004f40360009fc6a00088013ff88c21a00c8b19600cba102002a6100006fa21bffca4102001e424e004d024e0008c21a0148b196014ba10200490100006fa21bffca2102001e222200ce0012000e0222008e62220049e102011de222000c201200481c0600688012008|@5450,131071|36,4,@5413 5413:C2,80|9e13e002f606201880a1001b8bd02018c403600cc4213ffcee036008ee213ff8ec036004ec213ff4173f002b9602e25cd4036010d20360141b3f02bf9a036268353f02bfb406a28881c6a00488013ff4|@5449,131071|40,4,@581 56,4,@5414 64,4,@5416 5414:O2|@5416,@5415 5415:O4|I48,-1,@734,@766 5416:C2,1348|9e13e002f6062018ba21207080a7401b8bd02018c40120048088a00132800004b8102004f800a000b92f2002ae072001ac10000faa10000da8100008a6100009a410000a9410001792102001901000024000014401000000ec213ffcea213ff8e8213ff4e6213ff0e4213fecd6213fe81b3f02c19a0360fcf40360009fc6a00088013fe8d00220047ffd678701000000d0213ffc133f00cc920262a0400001f088013ffc80a2200122800011e2012000e0012000808c200132800004b8102004f8042000b92f20029e072001b91f2008820720019410000192102001901000107ffda22601000000a2100008e2213ffc921020b590100011400001d988013ffc80a2200122800011e2012000e0012000808c200132800004b8102004f8042000b92f20029e072001b91f2004820720019410000192102001901000107ffda20f01000000a2100008d0213ffcd0213ff8e0012008de04200080a3e0011280001888013ff88c21a00c8b19600cba10200282100006fa21bffcda042004da20600498103ff5d820600094100001d204200811000083900223d84000022c010000009601200094102005d422e00092012000d02260041080003bd0213ffc80a3e0053280001880a3fffd8c21a00c8b19600cba10200282100006fa21bffcda042004da20600498103ff5d820600094100001d204200811000083900223d840000213010000009601200094102009d422e00092012000d022600410800022d0213ffc32800019c20120208c21a00c8b19600cba10200282100006fa21bffcda042004da20600498103ff5d820600094100001133f010c9202632c11000083900223d8400001fa01000000960120009410200dd422e00092012000d022600410800009d0213ffc9a01200098102011d823600096012000d4006004d422e004d0213ffcd0213ff8d0213ff4d0213ff0d0213fecd0213fe8d0213fe4d0213fe0d0213fdcd0213fd8d0213fd4d0213fd0d0213fccd0213fc8d0213fc4d0213fc0d0213fbcd0213fb88c21a01088013fb88b196010ba10200392100006fa21bffc113f02c290022168d0226000c4012060c4226008ee012064ee2260048c21a0108b196010ba102003ac100006fa21bffc2b3f02c3aa05614cea25a000c425a008ee25a004a8012000273f02c4a604e0b4e6252000a4012000213f02c4a00420b4e024a0049e012000ec23e008820120001b3f02c49a0360b4da20600c98012000173f02c49602e0b4d623201094012000113f02c490022114d022a014840120002f3f02c4ae05e114ee20a018ac0120002b3f02c4aa056114ea25a01ca8012000273f02c4a604e0b4e6252020a4012000213f02c4a0042114e024a0249e012000033f02c4820061bcc223e0289a012000193f02c4980321bcd823602c96012000d222e03094012000133f02c492026114d222a03490012000053f02c48400a1bcc4222038ae0120002d3f02c4ac05a114ec25e03caa012000293f02c4a80521bce8256040a6012000253f02c4a404a1bce424e0448c21a04c8b19604cba102012a0100006fa21bffcde012000de242000c2012004c2242004da012008da242008d801200cd824200cd6012010d6242010d4012014d4242014d2012018d2242018d001201cd024201cc4012020c4242020ee012024ee242024ec012028ec242028ea01202cea24202ce8012030e8242030e6012034e6242034e4012038e4242038e401203ce424203ce4012040e4242040de012044de2420448c21a01c8b19601cba10200690100006fa21bffce0222014e2222010c2012078c222200cda012070da222008d801204cd8222004d6012048d6222000da01205cde01206cf403600081c6a0048801207c|@5448,131071|80,5,@5417 112,4,@5419 136,5,@514 148,4,@2210 156,5,@5423 224,5,@1585 248,5,@5423 316,5,@1585 400,4,I48 408,5,@5427 500,4,I48 508,5,@5427 592,4,@2671 600,4,I48 608,5,@5427 764,4,@5429 812,4,@5433 836,4,@5437 852,4,@5437 876,4,@5437 892,4,@5437 908,4,@5440 924,4,@5440 940,4,@5440 956,4,@5437 972,4,@5440 988,4,@5445 1004,4,@5445 1028,4,@5440 1044,4,@5445 1060,4,@5440 1076,4,@5445 1092,4,@5445 5417:C2,208|9e13e002808a200122800010de213ffc80a2a0012280000dde213ffc941000088c21a00c8b19600cba10200290100006fa21bffc92102001d2222004d422200081c3e00601000000d0213ff8d2213ff48410200188013ff480a2a001328000069ea2a00490100002de01200881c3e0068801200cd2012000b82260019002801c94a220049282a010d0012004bb3a6002fa0a001db92f6002940720018c21a00c8b19600cba10200292100006fa21bffcc4226004d4226000841000099410000ff606201880a1001b8bd0201830bfffe3|@5418,65671| 5418:S31|4c696272617279537570706f72742e737472696e674578706c6f6465283329 5419:O1|@5420 5420:C2,140|9e13e002f606201880a1001b8bd0201880a2200132800006de213ffc113f00259002227c81c3e00601000000fa022000fa213ff8d00220047ffffff288013ff8d0213ffcd0213ff894013ff892100008d00120004000001588013ff88c21a00c8b19600cba10200290100006fa21bffcc4012000c4222000ee012004ee222004ec01200c81c5a00688012010|@2590,114855|28,4,@499 84,5,@5421 5421:C2,236|9e13e00280a220a53280001180a220a18c21a00c8b19600cba10200290100006fa21bffcc4026004c4222004ae1020a5ee222000ae102005ee22a000d022a0049010200181c3e0060100000032800011c40260008c21a00c8b19600cba10200284100006fa21bffcee026004ee20a004901020a1d020a00090102001d022a000c422a0049010200181c3e0060100000080a0a005328000098c21a00cae102005ee22a000d0026004d022a0049010200181c3e006010000008b19600cba102002ae100006fa21bffcec026004ec25e004d025e00090102001d022a000ee22a0049010200181c3e00601000000|@5422,114823| 5422:S40|44454255474745525f28292e646562756746756e6374696f6e283729636865636b43686172283329 5423:C2,252|9e13e002f606201880a1001b8bd02018808a600132800004b8102004f8026000b92f200284072001808a200132800004b8102004f8022000b92f2002ae072001ba20a001811f401c3480002b9010200180a0a0053280001cb820a00180a5e0053280000ab825e001ac10000992100008901000161b0000839a0360d8f403600081c6a00401000000b91f2004ac072001aa85a010bb3d6002fa0a001db92f6002a807200180a2401432800005901020019010200581c3e0060100000081c3e00601000000ba25e001b91f401cac072001d2213ffc96100008941020019210001690100002353f02c1b406a3fc81c6a00488013ffc81c3e00601000000|@5426,131071|116,4,I24 228,4,@5424 5424:C2,136|9e13e002f606201880a1001b8bd0201880a22001328000058482a0109010200581c3e00688012004ee012000bb38a002fa0dc01db92f6002ac07200184826010bb38a002fa0ac01db92f6002aa07200180a580153280000b901020018482a004ac826004aaa22004ee21200094100002921000169010001510bfffe4f606201881c3e00688012004|@5425,123023| 5425:S12|627974654d61746368283529 5426:S18|537472696e672e6973537566666978283229 5427:C2,88|9e13e0028c21a00c8b19600cba10200284100006fa21bffcd420a00494103ffdd420a0008c21a0148b196014ba10200494100006fa21bffcd222a00cc422a00892103ffdd222a004d022a0009010000a81c3e00601000000|@5428,65671| 5428:S28|5354525543545f56414c5328292e6d616b65476c6f62616c56283329 5429:C2,40|9e13e002f606201880a1001b8bd02018d4036004d2036008353f02c2b406a1ac81c6a00401000000|@5432,131071|24,4,@5430 5430:C2,800|9e13e002f606201880a1001b8bd02018808a6001328000c190102001c4026000ee00a00080a5fff93280003a80a5e001808aa0013280003590102001de213ffcd0213ff8fa00a004fa213ff4fa00a008fa213ff0fa026004fa213fecfa02a000fa213fe8fa02a004fa213fe492100008d0013ff41b0000839a0360d8f40360009fc6a00088013fe480a220012280001ad40120008c21a00c8b19600cba102002ac100006fa21bffcea012004ea25a004a8103ff5e825a00094100016d201200cd00120107fffff9801000000a61000088c21a0088b196008ba10200190100006fa21bffce6222000e401201881c4a0068801201cd2012008d0012014de01201810bfffc18801201c81c3e006010000003280004380a5e005808aa0013280003e90102001de213ffcd0213ff8fa00a004fa213ff4fa00a008fa213ff0fa026004fa213fecfa02a000fa213fe8fa02a004fa213fe492100008d0013ff41b0000839a0360d8f40360009fc6a00088013fe480a2200122800023d40120008c21a00c8b19600cba102002ac100006fa21bffcea012004ea25a004a8103ff5e825a000901000167fffd22b010000008c21a0148b196014ba102004a6100006fa21bffce401200ce424e00cd024e008a2102001e224e004e0012010e024e0008c21a0088b196008ba10200190100006fa21bffce6222000de01201881c3e0068801201cd2012008d0012014de01201810bfff7e8801201c81c3e0060100000032bfff7ad2026004808aa0013280003a90102001de213ffcd0213ff8fa00a004fa213ff4fa00a008fa213ff0fa00a00cfa213fecfa026004fa213fe8fa02a000fa213fe4fa02a004fa213fe092100008d0013ff41b0000839a0360d8f40360009fc6a00088013fe080a220012280001dd40120008c21a00c8b19600cba10200290100006fa21bffcec012004ec222004aa103ff5ea2220007fffd1e70100000096100008d401200cd2012010d00120147fffd1f401000000a81000088c21a0088b196008ba10200190100006fa21bffce8222000e601201c81c4e00688012020d2012008d0012018de01201c10bfff3f8801202081c3e0060100000081c3e00601000000|@5431,131071|116,4,I24 196,5,@5427 348,4,I24 420,5,@5095 624,4,I24 692,5,@5095 716,5,@5096 5431:S39|44454255474745525f28292e6d616b6553706163652833296c6f6f6b757056616c756573283329 5432:S42|44454255474745525f28292e6d616b6553706163652833296c6f6f6b757056616c756573283129283129 5433:C2,40|9e13e002f606201880a1001b8bd02018d2036004d0036008353f02c3b406a19081c6a00401000000|@5436,130735|24,4,@5434 5434:C2,696|9e13e002f606201880a1001b8bd02018808a2001328000a790102001c4022000ee00a00080a5fff93280003280a5e001808a60013280002d901020018c21a00c8b19600cba102002ac100006fa21bffcea026000ea25a004a8103ff5e825a000a810000fe600a004e4022004e202600494100016d200a008901000137ffffeb1010000008c21a00c8b19600cba1020029e100006fa21bffcd023e004e623e000e8213ffcde213ff892100011901000127fffffd488013ff88c21a00c8b19600cba1020029a100006fa21bffcd0236004d4012000d42360009010000dd201200481c260068801200881c3e006010000003280003a80a5e005808a600132800035901020018c21a00c8b19600cba102002ac100006fa21bffcea026000ea25a004a8103ff5e825a000a610000fe400a004e200a008d4022004901000167fffd14c010000008c21a0148b196014ba10200484100006fa21bffce220a00cd020a008ae102001ee20a004e420a0008c21a00c8b19600cba102002ac100006fa21bffcc425a004e425a000e6213ffcec213ff8d20260049010000a7fffff9a88013ff88c21a00c8b19600cba102002aa100006fa21bffcd0256004e8012000e825600090100015e601200481c4e0068801200881c3e0060100000032bfff8bd0022004808a60013280003190102001ec0220048c21a00c8b19600cba10200290100006fa21bffcea026000ea222004a8103ff5e8222000a610000fe400a004e200a008d400a00c7fffd11201000000ee0260049610000892100011901000127fffd11f010000008c21a00c8b19600cba102002aa100006fa21bffcd0256004e4256000e6213ffcea213ff892100017901000167fffff6488013ff88c21a00c8b19600cba102002a8100006fa21bffcd0252004e6012000e625200090100014e401200481c4a0068801200881c3e0060100000081c3e00601000000|@5435,130735|124,5,@5427 316,5,@5095 548,5,@5095 572,5,@5096 5435:S36|44454255474745525f28292e6d616b655370616365283329616c6c56616c756573283229 5436:S27|44454255474745525f28292e6d616b655370616365283329283129 5437:O1|@5438 5438:C2,16|9e13e0029010200181c3e00601000000|@5439,129| 5439:S35|44454255474745525f28292e6d616b655370616365283329616c6c456d707479283129 5440:O1|@5441 5441:C2,32|9e13e002de213ffc113f02c490022158f40620209fc6a00088013ffc90102001|@5444,129|8,4,@5442 5442:O3|103,@522,@5443 5443:S29|43616e6e6f74207570646174652074686973206e616d65207370616365 5444:S34|44454255474745525f28292e6d616b6553706163652833296e6f456e746572283129 5445:O1|@5446 5446:C2,16|9e13e0029010200181c3e00601000000|@5447,129| 5447:S33|44454255474745525f28292e6d616b6553706163652833296e6f4c6f6f6b283129 5448:S28|44454255474745525f28292e646562756746756e6374696f6e283729 5449:S34|44454255474745525f28292e646562756746756e6374696f6e283129283129283129 5450:S38|50415253455f5452454528292e67656e636f6465283729616464446562756743616c6c283329 5451:C2,648|9e13e002f606201880a1001b8bd02018c403600c80a0a0013280000bee03600494102001d422e000d0026000d022e004d4026004d422e0089010200181c3e00601000000ac100008d005e000de213ffcda213ff8ec213ff4d4213ff0d6213fecfa026000fa213fe8da026004f40360009fc6a00088013fe88c21a00c8b19600cba102002aa100006fa21bffca8102001e8256004d02560008c21a00c8b19600cba102002a6100006fa21bffcea24e004e4012008e424e0008c21a00c8b19600cba102002a2100006fa21bffce6246004a0102029e0246000e2213ffc88013ffc80a4e00132800005c204e0009e1020051080000c80a3e001da00600080a37ff5328000079e102001e604e004f606201880a1001b8bd0201830bffff280a3e0012280000dd8012000d00120007ffea15f010000008c21a00c8b19600cba10200298100006fa21bffcd023200496103ff5d6232000d6012014d402e004d202a000d0213ffcd0213ff8d002e00896013ff894100009921000089010000c4000004a88013ff8d00120187ffe741001000000ee02200480a5e0013280000f808de0018c21a0108b196010ba10200384100006fa21bffcec02200cec20a008ea022000ea20a004a8102001e820a0001080001e8c21a00c328000118c21a0108c21a0148b196014ba10200484100006fa21bffcec05e000ec20a00cea02200cea20a008e8022000e820a004a6102005e620a0001080000d8c21a00c8b196010ba10200384100006fa21bffcec02200cec20a008ea022000ea20a004a8103ff9e820a0008c21a00c8b19600cba102002a6100006fa21bffce401200ce424e004c424e000e2012010e0012000e0246000e6246004de012004de24600890102001c201202081c0600688012024|@5459,131071|300,5,@3258 380,5,@5452 392,5,@2944 5452:C2,364|9e13e002f606201880a1001b8bd02018c402200080a0bff53280001180a0bfed8c21a00c8b19600cba10200294100006fa21bffc133f02c5920262c8d222a000d022a00492102001d222e000d422e0049010200181c3e0060100000032800016de213ffc8c21a0188b196018ba10200592100006fa21bffc2f3f02c5ae05e31cee226000ee022004ee226010ec02200cec22600cd4226008d022600494102001d422e000d222e0049010200181c3e00601000000d0213ff8d4213ff4d6213ff0901020019a100009f40360009fc6a00088013ff08c21a0108b196010ba102003ae100006fa21bffc2d3f02c5ac05a3e8ec25e000d025e008ea012004ea25e0048c21a0148b196014ba102004a8100006fa21bffca6102001e625200ce4012008e4252008d0252004a2103ff1e22520008c21a00c8b19600cba102002a0100006fa21bffc9e102001de242004e8242000c2012000e0206000ee20600490102001da01200c81c3600688012010|@5458,131071|52,4,@5453 120,4,@5455 232,4,@5457 5453:C2,16|9e13e002d003600481c3e00601000000|@5454,161| 5454:S29|434f44455452454528292e6d756c7469706c6555736573283429283129 5455:C2,132|9e13e002c4036008b820a001ba222001811f401c32800005b820a001d003600481c3e00601000000ba222001b91f401cae072001d003600cba222001b917401cac0720018c21a0188b196018ba10200590100006fa21bffcae102001ee222010ec22200cac102005ec222008ee036010ee222004ac103fedec22200081c3e00601000000|@5456,114849| 5456:S35|434f44455452454528292e6d756c7469706c65557365732834296c6f6164466e283129 5457:C2,88|9e13e002c4036004b820a001ba222001b91f401cae0720018c21a0188b196018ba10200590100006fa21bffcac102001ec222010ee22200cae102005ee222008ec036008ec222004ae103fedee22200081c3e00601000000|@5456,114849| 5458:S26|434f44455452454528292e6d756c7469706c6555736573283429 5459:S42|50415253455f5452454528292e67656e636f64652837296372656174654465627567456e747279283429 5460:C2,256|9e13e002f606201880a1001b8bd02018c403601480a0a00122800035ae102001da213ffc8c21a00c88013ffc8b19600cba102002ae100006fa21bffcd225e00492102001d225e000de213ffcd4213ff888013ff880a2200132800005d0213ffc841000171080001aee012000d0213ff8fa022004fa213ff494013ff892100017d00220009a0120084000002588013ff48c21a00c8b19600cba102002ae100006fa21bffcec012004ec25e000ea012008ea25e004d00120008801200cf606201880a1001b8bd0201830bfffe3ec00a000ec25e000ea00a004ea25e00490102001e801200481c520068801200cee22a000d222a0049010200181c3e00601000000|@5791,131071|136,5,@5461 5461:C2,284|9e13e002f606201880a1001b8bd02018c4036000ee00a010ec05e000aa10000fa810000da6100008901000137ffe44de01000000ea213ffce8213ff8e6213ff4d4213ff0fa026000fa213fecfa026004fa213fe8e400a008e4213fe4d600a00c9410000892100016901000131b3f02c69a0363084000003988013fe4d0213ffcd0213ff8d0213ff4e2012010e004600096013ff494100008d2012000d001200cda042004f40360009fc6a00088013ff4c201200080a0600132800005d0012010de012010108000078c21a00c9a01202040002fb6010000009e1000088c21a00c8b19600cba1020029a100006fa21bffcd8012008d8236004d6012004d6236000d4012014de22a000da22a00490102001d201202081c2600688012024|@5790,131071|44,5,@2659 108,4,@5462 116,5,@5464 208,5,@5789 5462:O4|@5464,@5637,@5639,@5463 5463:O2|@5641,@5462 5464:C2,3076|9e13e002f606201880a1001b8bd02018ae10000fac10000daa100008d00560087ffe4f230100000080a2200122800007de056008d00560087ffe4f320100000081c5e00688012004da03e00080a360053280004380a36009d603e004d402e000d003e008c4022000b820a001ba226001b91f401cac072001d0213ffcd0213ff8d0213ff4d0213ff0d0213fec80a2a0011280001588013fecb825a001b91f2004940720019201200084103fedc4226000ac01200092102001d225a00484012000ac102001ec20a00892012000d422600c84012000ac102001ec20a010108000108c21a0189201200084103fedc422600092012000d42260048401200094102005d420a00892012000ec22600c84012000ac102001ec20a0108c21a0188b196018ba10200590100006fa21bffcd4012000d4222000d2012004d2222004c4012008c4222008ec01200cec22200cd4012010d422201081c5e006880120183280003980a36001d603e004d403e0089010000a7ffe19a70100000080a22001228000069010000a113f002b9002225c1080000aee213ffc7ffe4b1401000000ee213ffcd6213ff84000029f88013ff810800005c4022000d6213ff888013ff8c402200080a0a0153280000980a0bff592100008d0012000de012004353f0164b406a21481c6a0048801200c32800009ae10000892100008d0012000de012004353f0164b406a21481c6a0048801200c8c21a0108b196010ba10200390100006fa21bffcec012000ec222008ee222004aa102019ea222000e801200481c520068801200c3280000a9010000fee213ffc113f02ca900221fcf40620209fc6a00088013ffc901020019010000f7ffe500f01000000d0213ffcd0213ff880a2200d1280008488013ff89010000a7ffdf5370100000080a220012280000801000000981000179010000a7ffdf54101000000108000069010000a193f00319803212410800017ee213ffc7ffdf5280100000080a2200122800008d8213ffc9010000a7ffdf5330100000092100008108000099010000c113f003890022020f40620209fc6a00088013ffc921020019010000cd8026000ae100008ee213ffcec213ff8d6213ff4d8213ff0133f02ca92026224d002e0241b3f00389a0360407ffd707e88013ff0c4012004d0213ffc133f02ca9202634cd000a0241b3f00389a0360407ffd707588013ffcee01200cec012008d0213ffcfa05e008fa213ff8ea05a02488013ff880a5600132800005fa056000a81020011080001c808d2001fa213ffcfa056004fa213ff8d0013ffcda012000f40360009fc6a00088013ff880a220012280000bea0120008c21a0088b196008ba102001a8100006fa21bffce6012004e6252000108000078801200888012008f606201880a1001b8bd0201830bfffe2808d20013280000b01000000e2012014d0052000da046004f40360009fc6a00001000000a4100008108000058c21a018253f02cba404a0748c21a0188b196018ba102005a2100006fa21bffc213f02cca0042090e0246000de01200cde246010c2012008c224600cda012004da246008e42460049801201c96103ff5d62320009401201ce222a004108001d58c21a00c80a23ff13280003980a23ff99010000a7ffdf4b20100000080a220012280002001000000961000179010000a7ffdf4bc01000000d40220009010000a7ffdf0a20100000080a2200122800011010000009010000a7ffdf0ad01000000d2022004808a60013280000601000000c4026000d800a0041080000e8c21a00c193f0031980321241080000a8c21a00c193f003198032124108000068c21a00c193f003198032124961000178c21a00c8b19600cba10200294100006fa21bffc133f02d792026220d222a000d822a0049001200084103ff5c4222000ae012000d425e00410800192d6213ffc3280006c80a220099010000a7ffdf4790100000080a220012280000801000000981000179010000a7ffdf48301000000108000069010000a193f00319803212410800017ee213ffc7ffdf46a0100000080a2200122800008d8213ffc9010000a7ffdf4750100000092100008108000099010000c113f003890022020f40620209fc6a00088013ffc921020019010000cd8026000ae100008ee213ffcec213ff8d8213ff4fa05a008fa213ff0c402e02488013ff080a0a00132800005fa00a000ae1020011080001c808de001fa213ffcfa00a004fa213ff8d0013ffcda012000f40360009fc6a00088013ff880a220012280000bc40120008c21a0088b196008ba102001ae100006fa21bffcec012004ec25e000108000078801200888012008f606201880a1001b8bd0201830bfffe2808de0013280000b01000000e8012008d005e000da052004f40360009fc6a00001000000aa100008108000058c21a0102b3f02cbaa0560748c21a0108b196010ba102003a8100006fa21bffc273f02d7a604e318e6252000e4012004e4252008ea252004a2012010a0103ff5e02460009e012010e823e00410800124010000003280003980a220059010000a7ffdf40d0100000080a220012280002001000000961000179010000a7ffdf41701000000d40220009010000a7ffdeffd0100000080a2200122800011010000009010000a7ffdf00801000000d2022004808a60013280000601000000c4026000d800a0041080000e8c21a00c193f0031980321241080000a8c21a00c193f003198032124108000068c21a00c193f003198032124961000178c21a00c8b19600cba10200294100006fa21bffc133f02d89202637cd222a000d822a0049001200084103ff5c4222000ae012000d425e004108000e6d6213ffc328000b7ee213ffcee213ffcd0213ff8d0213ff49010000a7ffdf3d188013ff480a2200122800091980120009010000a7ffdf3dc01000000d80220009010000c7ffdf3c70100000080a220012280007b960120009010000c7ffdf3d201000000d60220049010000b7ffdf3bd0100000080a2200122800065940120009010000b7ffdf3c801000000d40220049010000a7ffdf3b30100000080a220012280004f920120009010000a7ffdf3be01000000d2022000ee022004901000177ffdf3a80100000080a2200122800038ac012000901000177ffdf3b301000000d2213ffcec02200088013ffce805a00080a5200d32800011aa100016d205a008d005a0047ffdef6801000000e602200080a4fffd32800005ac100008aa10001610800007ea213ffcf606201880a1001b8bd0201830bfffeeea213ffce601200088013ffce204e00080a4600d32800011a4100013d204e008d004e0047ffdef5201000000e002200080a43ffd32800005a6100008a410001310800007a0012008f606201880a1001b8bd0201830bfffeea0012008de012000de24200082012008e42060041080003d8c21a0102b3f0031aa056124ea25a000a8012000273f0031a604e124e6252004d0213ffcd0213ff888013ff8108000318c21a010113f003190022124d0226000840120002f3f0031ae05e124ee20a004d0213ffcd0213ff888013ff8108000258c21a010133f003192026124d222a00090012000053f00318400a124c4222004d0213ffcd0213ff888013ff8108000198c21a010153f00319402a124d422e00092012000113f003190022124d0226004d0213ffcd0213ff888013ff81080000d8c21a010173f00319602e124d623200094012000133f003192026124d222a004d0213ffcd0213ff888013ff88c21a0108b196010ba10200390100006fa21bffc053f02d98400a290c4222000ee01200cee222008ec012008ec222004aa012014a8103ff5e8256000a6012014d024e0041080002d01000000d6213ff8d8012008d8213ff49610000a94100009133f002d9202615c90100015da05a00cf40360009fc6a00088013ff48c21a0248b196024ba10200896100006fa21bffc94102001d422e01c92102001d222e01884103ffdc422e014ae102005ee22e010ac102001ec22e00caa102005ea22e00829000083a80523d8e822e004d022e000a6012004a4103fe5e424e000a2012004d6246004d0213ffcd0213ff8d0213ff4d0213ff088013ff0108000038801201088013ffcd0213ffcd0213ff8d0213ff488013ff4108000038801200c88013ffcd0213ffcd0213ff8d0213ff4d0213ff0d0213fecd0213fe888013fe88c21a00c8b19600cba10200290100006fa21bffcec01201cec222000ea012020ea222004e801201881c5200688012028|@5636,131071|32,5,@2733 56,5,@2735 368,5,@2389 388,4,@581 404,5,@2710 420,5,@5465 472,4,@3251 508,4,@3251 588,4,@5469 616,5,@2754 648,5,@2148 676,5,@2149 692,4,@799 708,5,@2148 732,5,@2149 752,4,@1110 804,4,@5471 816,4,@1112 824,5,@1114 840,4,@5478 852,4,@1112 860,5,@1114 1068,4,@5485 1096,4,@5523 1180,5,@2148 1208,5,@2149 1224,5,@2104 1248,5,@2105 1288,4,@799 1304,4,@799 1320,4,@799 1352,4,@5577 1408,5,@2148 1436,5,@2149 1452,4,@799 1468,5,@2148 1492,5,@2149 1512,4,@1110 1748,4,@5485 1776,4,@5578 1840,5,@2148 1868,5,@2149 1884,5,@2104 1908,5,@2105 1948,4,@799 1964,4,@799 1980,4,@799 2012,4,@5595 2080,5,@2148 2104,5,@2149 2120,5,@2148 2144,5,@2149 2160,5,@2148 2184,5,@2149 2200,5,@2148 2224,5,@2149 2244,5,@2148 2268,5,@2149 2312,5,@2100 2400,5,@2100 2480,4,@799 2496,4,@799 2528,4,@799 2544,4,@799 2576,4,@799 2592,4,@799 2624,4,@799 2640,4,@799 2672,4,@799 2688,4,@799 2732,4,@5601 2808,4,@623 2904,4,I48 5465:C2,592|9e13e002f606201880a1001b8bd02018ae10000fac100008901000167ffe4c1c0100000080a2200122800007de05a000901000167ffe4c2b0100000081c5e0060100000080a3e0053280004380a3e009da05a004d0036000c405a008ea00a000b8256001ba226001b91f401ca8072001d0213ffcd0213ff8d0213ff4d0213ff0d0213fec80a220011280001588013fecb8252001b91f20049207200190012000aa103fedea222000a801200090102001d0252004aa012000a8102001e825600890012000d222200caa012000a8102001e8256010108000108c21a01892012000aa103fedea22600092012000d022600490012000aa102005ea22200892012000e822600c90012000aa102001ea2220108c21a0188b196018ba10200590100006fa21bffce8012000e8222000d2012004d2222004ea012008ea222008e601200ce622200cd2012010d222201081c5e0068801201432800039ee213ffcd005a0087ffe16a30100000080a2200122800006d005a008033f002b8200625c1080000cee213ffc7ffe481001000000ee213ffcfa05a004fa213ff87fffff9a88013ff88210000810800006da006000fa05a004fa213ff888013ff8da00600080a360153280000980a37ff592100001d0012000de012004353f0164b406a21481c6a00488012008328000098c21a01092100001d0012000de012004353f0164b406a21481c6a004880120088b196010ba10200390100006fa21bffcd8012000d8222008c222200496102019d6222000d401200481c2a00688012008113f02ca900221b4f40620209fc6a00088013ffc90102001|@5468,131071|28,5,@2733 52,5,@2735 352,5,@2389 372,4,@581 388,5,@2710 468,4,@3251 504,4,@3251 568,4,@5466 5466:O3|@24,@397,@5467 5467:S9|4e6f20616363657373 5468:S25|56414c55455f4f505328292e636f6465416363657373283229 5469:O3|@24,@397,@5470 5470:S16|636f646556616c202d20466f726d616c 5471:O3|@5473,@5475,@5472 5472:O2|@5477,@93 5473:O2|@5474,@93 5474:C2,44|9e13e002c4022000ee03600480a0801732800005901020019010200581c3e0060100000081c3e00601000000|@1106,98465| 5475:O2|@5476,@93 5476:C2,56|9e13e002841000088c21a0108b196010ba10200390100006fa21bffcc422200884102115c4222004c4036004c422200081c3e00601000000|@1106,65697| 5477:C2,60|9e13e002c4022000ee03600480a0801732800005de213ffcd002200881c3e00601000000113f003890022020f40620209fc6a00088013ffc90102001|@1106,98465|36,4,@1110 5478:O3|@5480,@5482,@5479 5479:O2|@5484,@98 5480:O2|@5481,@98 5481:C2,44|9e13e002c4022000ee03600480a0801732800005901020019010200581c3e0060100000081c3e00601000000|@1106,98465| 5482:O2|@5483,@98 5483:C2,56|9e13e002841000088c21a0108b196010ba10200390100006fa21bffcc422200884102115c4222004c4036004c422200081c3e00601000000|@1106,65697| 5484:C2,60|9e13e002c4022000ee03600480a0801732800005de213ffcd002200881c3e00601000000113f003890022020f40620209fc6a00088013ffc90102001|@1106,98465|36,4,@1110 5485:O18|@5487,@5490,@5492,@5494,@5496,@5498,@5500,@5502,@5504,@5506,@5508,@5510,@5512,@5514,@5516,@5518,@5520,@5486 5486:O1|@5522 5487:O1|@5488 5488:C2,16|9e13e0029010200181c3e00601000000|@5489,129| 5489:S31|56414c55455f4f505328292e6e756c6c456e7669726f6e6d656e742d283129 5490:O1|@5491 5491:C2,16|9e13e0029010200181c3e00601000000|@5489,129| 5492:O1|@5493 5493:C2,16|9e13e0029010200181c3e00601000000|@5489,129| 5494:O1|@5495 5495:C2,16|9e13e0029010200181c3e00601000000|@5489,129| 5496:O1|@5497 5497:C2,16|9e13e0029010200181c3e00601000000|@5489,129| 5498:O1|@5499 5499:C2,16|9e13e0029010200181c3e00601000000|@5489,129| 5500:O1|@5501 5501:C2,16|9e13e0029010200181c3e00601000000|@5489,129| 5502:O1|@5503 5503:C2,16|9e13e0029010200181c3e00601000000|@5489,129| 5504:O1|@5505 5505:C2,16|9e13e0029010200181c3e00601000000|@5489,129| 5506:O1|@5507 5507:C2,16|9e13e0029010200181c3e00601000000|@5489,129| 5508:O1|@5509 5509:C2,16|9e13e0029010200181c3e00601000000|@5489,129| 5510:O1|@5511 5511:C2,16|9e13e0029010200181c3e00601000000|@5489,129| 5512:O1|@5513 5513:C2,16|9e13e0029010200181c3e00601000000|@5489,129| 5514:O1|@5515 5515:C2,16|9e13e0029010200181c3e00601000000|@5489,129| 5516:O1|@5517 5517:C2,16|9e13e0029010200181c3e00601000000|@5489,129| 5518:O1|@5519 5519:C2,16|9e13e0029010200181c3e00601000000|@5489,129| 5520:O1|@5521 5521:C2,16|9e13e0029010200181c3e00601000000|@5489,129| 5522:C2,16|9e13e0029010200181c3e00601000000|@5489,129| 5523:C2,240|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d0213ff4fa036010fa213ff090102001da03600cf40360009fc6a00088013ff0c4012008d0213ffcd0213ff8d0213ff4d0213ff0d0213fecd0213fe8d0213fe4d0213fe094013fe4d200a008901021357ffd4a0688013fe08c21a0208b196020ba102007ae100006fa21bffcec012004ec25e000ea012008ea25e004e801200ce825e008e6012010e625e00ce4012014e425e010e2012018e225e014e001201ce025e018de012028c203e004c2213ffc96100017d4012000d2012020d00120244000000d88013ffcd0012024da01202c81c3600688012030|@5576,131071|104,5,@428 216,5,@5524 5524:C2,172|9e13e002f606201880a1001b8bd020188c21a00c8b19600cba10200284100006fa21bffc2f3f02ccae05e264ee20a000ee012000ee20a0048c21a00c8b19600cba102002ac100006fa21bffc2b3f02cfaa056148ea25a000d625a0048c21a0188b196018ba102005aa100006fa21bffc293f02d0a8052098e8256000e805e028e8256010ec25600cc4256008d6256004a6102001e621200096103ffd9a100015f403600081c6a00401000000|@5575,131071|36,4,@5525 76,4,@5542 112,4,@5544 5525:C2,300|9e13e002f606201880a1001b8bd02018c4036004de213ffcda213ff8d0213ff490102001da00a008f40360009fc6a00088013ff4ee012004ec05e004d0213ffc90102001da05a020f40360009fc6a00088013ffcd0213ffcaa102001e801200088013ffc80a5200132800005e4052000a610001510800010e6213ffc8c21a00c8b19600cba102002a2100006fa21bffcea246004e004a004e0246000e8052004aa100011f606201880a1001b8bd0201830bfffeda4102001e201200088013ffc80a4600132800005de046000a010001210800010941000108c21a00c8b19600cba10200282100006fa21bffce4206004da03e004da206000e2046004a4100001f606201880a1001b8bd0201830bfffedd2012000d001200cde012014353f02ccb406a3ac81c6a00488012018|@5541,131071|284,4,@5526 5526:C2,448|9e13e002f606201880a1001b8bd02018d0213ffcde213ff8d4213ff488013ff480a2600132800005d402600484102001108000108088a001d0026000921020019a012008400000660100000080a2200132800007841000089210000af606201880a1001b8bd0201830bfffee8088a00132800006c401200090100002c401200481c0a0068801200c80a0a00132800006d000a00090102001ee01200481c5e0068801200c7ffe452f01000000ee00a000ec00a004aa100008901000157ffe48db0100000080a220012280002fa8102001901000157ffe48ea0100000080a5e00132800017a6100008ec213ffcd0213ff8901020297ffddc8488013ff88c21a0148b196014ba102004a6100006fa21bffca4102001e424e00ca2102001e224e00821000083a00423d8e024e004d024e000901000131080000601000000d005e008ec213ffce6213ff888013ff87ffe17b801000000a4100008d00120004000007e0100000092100008901000129a012010400000c001000000a81000081080000680a52001ec213ffcd0213ff888013ff880a520013280000890100014c401200488012008f606201880a1001b8bd0201830bfffb6e801200c81c5200688012014|@5540,131071|68,5,@5527 164,5,@2710 188,5,@2733 212,5,@2735 244,5,@1992 288,4,I48 332,5,@2425 348,5,@5528 368,5,@5533 5527:C2,348|9e13e002f606201880a1001b8bd02018c402200480a0a0013280004f90102001ae10000fac10000daa100008d00560087ffe48870100000080a2200122800018e8056008d00560087ffe48960100000092100017a8100016a61000154000004701000000de05200080a2000f3280000a901020018c21a0088b196008ba10200190100006fa21bffce622200081c260060100000081c2600601000000e605200080a4e0013280002a90102001808a60012280000aa4100009ee213ffc113f002990022374f40620209fc6a00088013ffca4102001a4100009de052004808be00122800005ee213ffc8210000f10800009b8206001113f002990022348f40620209fc6a00088013ffc82102001b8206001da04801cd205a00080a340093280000a901020018c21a0088b196008ba10200190100006fa21bffcea22200081c5e0060100000081c5e0060100000081c5e0060100000081c3e00601000000|@5532,130275|48,5,@2733 72,5,@2735 92,5,@5528 188,4,@545 244,4,@542 5528:C2,132|9e13e002f606201880a1001b8bd02018c402200080a0bff53280000580a0a015d002200481c3e0060100000032800010de213ffcee022004ec05e00080a5bffd3280000680a5a005ea05e004d005600810bfffeef606201832bfffebd005e004d005e00810bfffe9f6062018113f02cd900223a0f40620209fc6a00088013ffc90102001|@5531,123009|108,4,@5529 5529:O3|@24,@397,@5530 5530:S22|6576616c75653a204e6f74206120636f6e7374616e74 5531:S20|434f44455452454528292e6576616c7565283129 5532:S40|56414c55455f4f505328292e66696e64457863657074696f6e2833297465737456616c7565283229 5533:C2,156|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d2213ff47ffe20d388013ff41b3f02ce9a0360d4f40360009fc6a0000100000080a2200132800006c402200090102001c401200881c0a0068801200cfa022004fa213ffcd200a004d000a0009a0120084000004a88013ffc80a2200132800008ee01200cd001200088012004f606201880a1001b8bd0201830bfffea81c5e00688012010|@5539,131071|28,5,@2509 36,4,@5534 104,5,@5537 5534:O1|@5535 5535:C2,156|9e13e002f606201880a1001b8bd02018c402200880a0a0012280001f90102001de213ffcd0213ff8ee022004901020019a100017f40360009fc6a00088013ff8ec012000d0213ffc90102001da05a000f40360009fc6a00088013ffc7fffffea9e13e0028c21a00c8b19600cba102002aa100006fa21bffcd0256004e8012000e825600090100015e601200881c4e0068801200c81c3e00601000000|@5536,131071| 5536:S16|4d6973632e697465724c697374283129 5537:C2,692|9e13e002f606201880a1001b8bd02018ac10000faa10000d901000091b3f00df9a03619c7ffe10f60100000080a220012280000e90100009901000091b3f00df9a0361907ffe111801000000d2057ff8da057ffc9e100016353f02cdb406a18881c6a004010000001b3f00de9a0362347ffe10090100000080a220012280008c90102001901000091b3f00de9a0362287ffe102b01000000a8100008901000147ffe43b001000000a6100008901000137ffe475e0100000080a2200122800032e404e000901000137ffe476d0100000080a5200132800018a4100008ec213ffcea213ff8d0213ff4901020297ffddb0688013ff48c21a0148b196014ba102004a4100006fa21bffca2102001e224a00ca0102001e024a0081f0000839e03e3d8de24a004d024a000901000121080000701000000d0052008ec213ffcea213ff8e4213ff488013ff47ffe163901000000a2100008d00120007ffffeff010000009210000890100011e0012004da043ffcde012008353f02ceb406a01c81c6a0048801200c80a4a001328000479010200180a5200132800019d0052008ec213ffcea213ff8fa04e004fa213ff4901020297ffddad588013ff48c21a0148b196014ba102004a2100006fa21bffca0102001e024600c9e102001de24600803000083820063d8c2246004d0246000901000111080000701000000ec213ffcea213ff8fa04e004fa213ff488013ff47ffe160801000000e2012004e0047ff8808c20012280000a9e10001082100008113f002990022374f40620209fc6a000010000009e1020019e100010c201200080886001228000059a1000089a1000011080000ab8236001113f002990022348f40620209fc6a000010000009810000d9a102001b8236001d803c01c9210000cda047ffcde012008353f02ceb406a01c81c6a0048801200c81c5a0060100000081c5a00601000000|@5538,131071|28,4,@2377 36,5,@2378 60,4,@2376 68,5,@2381 88,4,@5527 104,4,@2357 112,5,@2358 136,4,@2356 144,5,@2361 160,5,@2710 176,5,@2733 200,5,@2735 236,5,@1992 280,4,I48 328,5,@2425 344,5,@5528 372,4,@5533 432,5,@1992 476,4,I48 524,5,@2425 556,4,@545 612,4,@542 660,4,@5533 5538:S53|56414c55455f4f505328292e66696e64457863657074696f6e283329736561726368537061636528322966696e644974656d283229 5539:S42|56414c55455f4f505328292e66696e64457863657074696f6e2833297365617263685370616365283229 5540:S28|56414c55455f4f505328292e66696e64457863657074696f6e283329 5541:S44|56414c55455f4f505328292e7072696e74537472756374283529657863657074696f6e536561726368283129 5542:C2,776|9e13e002f606201880a1001b8bd0201880a2e00132800005c402e0049010200181c3e0068801201080a0a00132800042ee01200080a2600132800013808aa001ae1000088c21a0148b196014ba10200490100006fa21bffcec012004ec22200cea012000ea222008e802e000e8222004d42220009a100017f403600081c6a004880120102280000bae10000ade213ffcac100008113f002990022374f40620209fc6a00088013ffcae102001ae10000a808a600122800005de213ffcac1000091080000bb825a001ac100008113f002990022348f40620209fc6a00088013ffcaa100016ac102001b825a001ea05c01ca81000088c21a0148b196014ba10200490100006fa21bffce6012004e622200ce4012000e4222008e202e000e2222004ea2220009a100014f403600081c6a00488012010b825e001811f200034800009808aa001ec036004113f005690022110da05a00cf403600081c6a004880120102280000bac10000ade213ffcaa100008113f002990022374f40620209fc6a00088013ffcac102001ac10000a808a600122800005de213ffcaa1000091080000bb8256001aa100008113f002990022348f40620209fc6a00088013ffca8100015aa102001b8256001e805801ca61000088c21a0148b196014ba10200490100006fa21bffce4012008e422200cee222008e202e000e2222004e8222000de213ffcda213ff8e6213ff4d2213ff0d4213fecc4213fe89a100013f40360009fc6a00088013fe8921020b1d00120241b0000839a0360d8f40360009fc6a0000100000080a220013280000be0012010e0012010de042004113f001f9002225cda03e000f40360009fc6a00001000000e0012010de042004d0012024da03e00cf40360009fc6a00001000000c2012010da006004113f001f9002225cda036000f40360009fc6a00001000000d8012008b8232001b917200496072001d4012018b822a001b91f200492072001d0012024c4012020ee01201cd0212024c4212020ee21201cd2212018ac10000bd6012000d401200492100016d001200cda012010de01201410bfff4188012018|@5543,131071|148,4,@545 204,4,@542 328,4,@1478 368,4,@545 424,4,@542 556,4,I24 596,4,@485 656,4,@485 5543:S33|56414c55455f4f505328292e7072696e7453747275637428352970566563283829 5544:C2,2504|9e13e002f606201880a1001b8bd02018da213ffcd6213ff8d4213ff4d0213ff0de213fecd2213fe8c401200088013fe880a0a00132800005de012008ae1020011080000d80a5e001da00a00080a3c00d32800005c400a004ae1020051080000680a5e001f606201880a1001b8bd0201830bffff02280000bd8012000d6012014d402e004113f005690022110da02a00cde012004f403600081c6a0048801201cd603200080a2e00d3280001b9010000cd2032008d00320047ffde82001000000d402200080a2bffd3280000ad2012018d2012014c4026004901020fdda00a00cde012004f403600081c6a0048801201cd2212018d6012010d401200c92100008d0012008da012014de01200410bfffbe880120187ffde9fc0100000080a22001228001739010000c9010000c7ffdea0701000000d4022000d00220087ffdea180100000092100008901000097ffd9497010000007ffd94aa0100000080a220012280000a90100009d0012014c4022004901020fdda00a00cde012004f403600081c6a0048801201c7ffd94880100000084100008113f0030900223547ffd948301000000ac10000992100008901000027ffe18840100000080a220012280000b90100016ea012014e8056004113f00cc900222a0da05200cde012004f403600081c6a0048801201c7ffd947001000000aa100008113f002f900221cc7ffd946b0100000092100008901000157ffe186d0100000080a220012280005680a2a001e8012008808d200122800009a6100014113f002990022374f40620209fc6a00001000000a6102001a6100014e404e004e2012014808d200122800009a0100014113f002990022374f40620209fc6a00001000000a0102001a0100014d0042000e4213ffcda046008f40360009fc6a00088013ffc808a20013280002fe0012018d00220007ffe3a8e01000000e002200080a43ffd3280000ade01200cde012018c203e004d0012000da00600cde012008f403600081c6a00488012020808be0012280000a8210000f9a100008113f002990022374f40620209fc6a00001000000821020018210000fda0060088c21a00c8b19600cba10200298100006fa21bffcd601201cd6232004de2320009610000c9410000d92100008d00120009a012018400001a901000000d401200881c2a00688012020de042004d0012000da03e00cde012008f403600081c6a0048801202032800006e602a004293f002fa805208c10800052d4213ffc80a4e0013280001ca41000168c21a0188b196018ba102005a4100006fa21bffc233f02d5a2046138e224a000e002a000e024a010de012008de24a00cc2012018c224a008da012014da24a0048c21a00c8b19600cba102002a8100006fa21bffce425200498103ff5d825200010800031d4213ffc9010000a9a01201440000454010000008c21a00c8b19600cba102002a2100006fa21bffcd0246004a0102029e0246000d4213ffce4213ff8e2213ff488013ff480a2200132800005c20220009e1020051080000c80a3e001da00600080a37ff5328000079e102001d0022004f606201880a1001b8bd0201830bffff280a3e0012280000de8012000d00120007ffe9509010000008c21a00c8b19600cba102002a8100006fa21bffcd025200498103ff5d82520001080000888012004ec213ff888013ff810800005c6213ffcec213ff888013ff8c6213ffc273f02d1a604e282e6213ff8a410202de4213ff486013ff4d00120007ffd93ae88013ff4233ee00aa204616ce0046000e8213ffcd0213ff888013ff880a4200132800009c2042000113f0004900223d0f40620209fc6a000010000009e102001c2042000d6006004d2012000d00060007ffe179f0100000080a2200122800005e00420049e10000b10800006d4012030f606201880a1001b8bd0201830bfffe8d002a0049a10000ff40360009fc6a0000100000092100008d00120289a100009f40360009fc6a00001000000a8100008d00120047ffffc30010000009a100014f40360009fc6a00001000000a6100008d00120249a100013f40360009fc6a00001000000c6012010e401202081c4a00688012038e202200080a4602d3280003bf4062020a0100008d00120007ffe1c9f0100000080a220012280000dd0012000d00120007ffe1c9901000000e0213ffcd20120049a01201c4000042188013ffcde01201081c3e006880120287ffe150201000000de02200080a3fffd2280001cc201201cd00120007ffe14fb0100000082100008d00120007ffe15b601000000d20120047ffe183301000000e0213ffc9410200592100008901000017ffe187a88013ffcda012024da212024d601201cd401201892100008d0012014da012020de01201010bffe5388012024da006004901020fdda03600cde01200cf403600081c6a004880120249fc6a00001000000901020019010000c7ffdeac20100000080a220012280000e9010000c9010000c7ffdeacd01000000d4012014d202a004113f004c90022100da02600cde012004f403600081c6a0048801201c7ffde6ac0100000080a220012280009bd40120149010000c7ffde6b701000000d401200cb822a001811f20003480000cfa022004d2012014d0026004c402200c113f0056900221109a100002de012004f403600081c6a0048801201cfa213ffc9010000c4000047f88013ffc80a220012280003dd2012018d2012018d0026004c4022018113f00bf900223589a100002f40360009fc6a00001000000ee012018ec05e004901020a1da05a00cf40360009fc6a000010000008c21a0108b196010ba102003aa100006fa21bffc293f02d6a8052378e8256000e601201ce6256008e4012018e4256004a21020b1e2213ffca0103ffde0213ff89e103ffdde213ff4c2012010c2213ff0d6012000d401200c9210200190100015da04a00cf40360009fc6a00088013ff0da012018d8036004901020a5da03200cf40360009fc6a00001000000d6012018d402e00490102001da02a008de012008f403600081c6a00488012020d0026004c4022018113f00bf900223589a100002f40360009fc6a00001000000ee012018ec05e004901021edda05a00cf40360009fc6a00001000000ea0120188c21a0148b196014ba102004a8100006fa21bffc273f02d7a604e000e6252000e401201ce425200cea252008e2056004e22520048c21a00c8b19600cba102002a0100006fa21bffc1f3f02d79e03e148de242000e8242004821020b1c2213ffc9a103ffdda213ff898103ffdd8213ff4d6012010d6213ff0d6012000d401200c9210200190100010da05600cf40360009fc6a00088013ff0d4012018d202a004901021f5da02600cf40360009fc6a00001000000d0012018c402200490102001da00a008de012008f403600081c6a00488012020d202a004113f02d790022194da02600cde012004f403600081c6a0048801201c|@5574,131071|132,4,@1478 184,5,@2100 276,5,@2124 300,5,@2125 316,5,@2126 332,5,@1613 340,5,@1615 392,5,@1613 404,4,@769 412,5,@1613 432,5,@2452 460,4,@2210 488,5,@1613 500,4,@681 508,5,@1613 524,5,@2452 560,4,@545 608,4,@545 676,5,@2659 748,4,@545 832,5,@5545 888,4,@660 936,4,@5558 1028,5,@5560 1160,5,@3258 1236,4,$5544+1514 1264,5,@1613 1272,4,@121 1308,4,@224 1348,5,@2452 1448,5,@5528 1536,5,@2500 1560,5,@2500 1580,5,@5562 1600,5,@2429 1628,5,@2429 1644,5,@2438 1656,5,@2462 1680,5,@2464 1772,5,@2148 1796,5,@2149 1812,4,@1353 1840,5,@2104 1864,5,@2105 1904,4,@1478 1940,5,@5566 1972,4,@2166 2044,4,@5568 2204,4,@2166 2280,4,@5570 2332,4,@5572 2476,4,@5573 5545:C2,1196|9e13e002f606201880a1001b8bd02018c4036000de213ffcda213ff8d0213ff4d2213ff0d4213fecd6213fe8da00a010f40360009fc6a00088013fe8808a20013280000501000000ee02200010800005ec0120102f3f000fae05e10cec012010ea05a000e8056004ee213ffc113f0025900222b4da052018f40360009fc6a00088013ffce6012000e404e00080a4a0013280007c80a4bffdd001200c7ffde5d80100000080a220012280006e9a012018d001200c7ffde5e301000000e2022004808c60013280005f9a012018e0046000fa04e004fa213ffce2213ff8d2042000901020c51b0000839a0360d8f40360009fc6a00088013ff880a220012280004b9a012020de012000c203e00480886001328000409a012020da006000c2213ffcd2036000901020c91b0000839a0360d8f40360009fc6a00088013ffc80a22001228000309a012024d8012000d603200480a2e001328000279a012024d4012020d2012008d002bffcb8222001ba226001811f401c368000038410200184102005ee02a0008c21a0248b196024ba102008ac100006fa21bffc2b3f02d3aa056344ea25a000e8012014e825a01ce6012004e625a018e401201ce425a014d225a010e2012010e225a00cee25a008e005e00ce025a00492100002901000169a0120244000011801000000108000a9e20120204000016601000000108000a5e20120204000016201000000108000a1e20120204000015e01000000d0213ffc88013ffc1080009be20120204000015801000000d0213ffc88013ffc10800095e20120204000015201000000d0213ffcd0213ff8d0213ff488013ff41080008de20120204000014a01000000d0213ffcd0213ff8d0213ff488013ff410800085e20120203280007c9a012018d001200c7ffde55c0100000080a220012280006e9a012018d001200c7ffde56701000000e2022004808c60013280005f9a012018e0046000fa04e004fa213ffce2213ff8d2042000901020c51b0000839a0360d8f40360009fc6a00088013ff880a220012280004b9a012020de012000c203e00480886001328000409a012020da006000c2213ffcd2036000901020c91b0000839a0360d8f40360009fc6a00088013ffc80a22001228000309a012024d8012000d603200480a2e001328000279a012024d4012020d2012008d002bffcb8222001ba226001811f401c368000038410200184102005ee02a0008c21a0248b196024ba102008ac100006fa21bffc2b3f02d5aa056004ea25a000e8012014e825a01ce6012004e625a018e401201ce425a014d225a010e2012010e225a00cee25a008e005e00ce025a00492100002901000169a0120244000009c010000001080002de2012020400000ea0100000010800029e2012020400000e60100000010800025e2012020400000e201000000d0213ffc88013ffc1080001fe2012020400000dc01000000d0213ffc88013ffc10800019e2012020400000d601000000d0213ffcd0213ff8d0213ff488013ff410800011e2012020400000ce01000000d0213ffcd0213ff8d0213ff488013ff410800009e2012020400000c601000000d0213ffcd0213ff8d0213ff488013ff4e2012020e0046000de04200490102001da03e008de012024f403600081c6a00488012028|@5557,131071|84,4,@380 108,4,@501 156,5,@2104 180,5,@2105 228,4,I24 296,4,I24 408,4,@5546 480,5,@5550 496,5,@5552 512,5,@5552 528,5,@5552 552,5,@5552 576,5,@5552 608,5,@5552 652,5,@2104 676,5,@2105 724,4,I24 792,4,I24 904,4,@5555 976,5,@5550 992,5,@5552 1008,5,@5552 1024,5,@5552 1048,5,@5552 1072,5,@5552 1104,5,@5552 1136,5,@5552 5546:C2,132|9e13e002f606201880a1001b8bd02018c4036010b820a001b9172004ae0720018c21a0108b196010ba102003ac100006fa21bffc2b3f02d3aa0563e4ea25a000ea03600cea25a008e8036008e825a004e6036014e6213ffcc4213ff8ee213ff4d0213ff0d6036018d403601c9210200190100016da036004f403600081c6a00488013ff0|@5549,131071|52,4,@5547 5547:C2,60|9e13e002f606201880a1001b8bd02018c4022004ee036008ee213ffcd602200cd4022008d200a004d0022000da036004f403600081c6a00488013ffc|@5548,131071| 5548:S56|56414c55455f4f505328292e7072696e745374727563742835297072696e74732835297072696e74496e6669786564283429283129283129 5549:S53|56414c55455f4f505328292e7072696e745374727563742835297072696e74732835297072696e74496e6669786564283429283129 5550:C2,224|9e13e002f606201880a1001b8bd0201880a260053280002dc4037ffcd2037ffcc4027ff8b820a001811f20043480000aee026000d0026000ee022004113f005690022110da05e00cf403600081c6a00401000000ec05e004de213ffcda213ff8d0213ff4901020a1da05a00cf40360009fc6a00088013ff4ea012004e8057ffce6053ff8b824e001b91f200490072001da012000f40360009fc6a00001000000e4012004e204bffce0046000de042004901020a5da03e00cde012008f403600081c6a0048801200cae100008d000bff89a100017f403600081c6a00401000000|@5551,131071|60,4,@1478 5551:S68|56414c55455f4f505328292e7072696e745374727563742835297072696e74732835297072696e74496e66697865642834296d6179506172656e74686573697365283229 5552:C2,152|9e13e002f606201880a1001b8bd02018c4037ffcee00bffc80a5ef9d32800003ac102001ac102005ea00a0008c21a0248b196024ba102008a8100006fa21bffc273f02d4a604e2b8e6252000e6037fe8e625201ce4037ff8e4252018e2056004e2252014e0037ff0e0252010c2037ff4c225200cd8037fecd8252008ea2520049210001690100014353f02d4b406a0bc81c6a00401000000|@5554,131071|64,4,@5553 136,4,@5550 5553:C2,244|9e13e002f606201880a1001b8bd02018c403601cee00a00080a5e00532800004ec03601410800015de213ffcde213ffcda213ff8d0213ff4113f004c900221e4da05a00cf40360009fc6a00088013ff4ea012004e8056014113f001f9002225cda052000f40360009fc6a0000100000010800006ec012004da213ff8d0213ff488013ff4ec012004ea05a014d005a018da05600cf40360009fc6a00001000000e8012004e6052014113f001f9002225cda04e000f40360009fc6a00001000000e4012004e204a008e0012008e221200896102f9dd4012000d204a00cd004a010da04a0049e100010f403600081c6a00488012008|@5549,131071|56,4,@1371 88,4,@485 168,4,@485 5554:S52|56414c55455f4f505328292e7072696e745374727563742835297072696e74732835297072696e74496e66697865642834292f33 5555:C2,132|9e13e002f606201880a1001b8bd02018c4036010b820a001b9172004ae0720018c21a0108b196010ba102003ac100006fa21bffc2b3f02d5aa0560a4ea25a000ea03600cea25a008e8036008e825a004e6036014e6213ffcee213ff8c4213ff4d0213ff0d6036018d403601c9210200190100016da036004f403600081c6a00488013ff0|@5549,131071|52,4,@5556 5556:C2,60|9e13e002f606201880a1001b8bd02018c4022004ee036008ee213ffcd602200cd4022008d200a004d0022000da036004f403600081c6a00488013ffc|@5548,131071| 5557:S50|56414c55455f4f505328292e7072696e745374727563742835297072696e74732835297072696e74496e6669786564283429 5558:C2,88|9e13e002f606201880a1001b8bd020188c21a00c8b19600cba10200284100006fa21bffcee036008ee20a004ec03600cec20a000c4213ffc96103ffdd4022004d2036010d0022000da036004f403600081c6a00488013ffc|@5559,131071| 5559:S56|56414c55455f4f505328292e7072696e745374727563742835297072696e74732835296d616b654172672831297072696e74417267283129 5560:C2,204|9e13e002f606201880a1001b8bd0201880a22001328000058c21a0189010200181c3e006010000008b196018ba10200584100006fa21bffc2f3f02d5ae05e2d4ee20a000ee022000ee20a010ec037ff4ec20a00cea036004ea20a008e8036000e820a0048c21a00c8b19600cba102002a6100006fa21bffcc424e00484103ff5c424e000de213ffcda213ff8e6213ff4d00220047fffffdb88013ff48c21a00c8b19600cba102002ae100006fa21bffcd025e004ec012000ec25e00090100017ea01200881c560068801200c|@586,129185|56,4,@5561 5561:C2,88|9e13e002f606201880a1001b8bd020188c21a00c8b19600cba10200284100006fa21bffcee036008ee20a004ec03600cec20a000c4213ffc96103ffdd4022004d2036010d0022000da036004f403600081c6a00488013ffc|@5559,131071| 5562:C2,608|9e13e002f606201880a1001b8bd0201880a220013280000ac4022000de213ffc113f02d6900221c4f40620209fc6a00088013ffc90102001c4022000ee00a004808de00132800081ec036000ac10000faa10000da8100008e600a008901000137ffe400b0100000080a2200122800070e4056000901000137ffe401a01000000de052000a6100016a4100015e205e000e003e000c203e00c7ffff7c801000000808a20012280000a9a100008e6213ffc113f002990022374f40620209fc6a00088013ffc9a1020019a100008d0036000e6213ffce4213ff8d2213ff4e2213ff0e0213fecc2213fe8fa052004fa213fe4da213fe084100008d004bff49a100002f40360009fc6a00088013fe080a2200132800008ee012010d2012014d0012004da012018de01201c10bfffb78801202080a5e0012280000bec012018ec012018ea05a000e8056004d001200cda05200cde01201cf403600081c6a00488012020ea05bff8b8256001811f20003480000be8012000e805a000e6052004113f005690022110da04e00cde01201cf403600081c6a00488012020e6052008d005bff49a100013f40360009fc6a00001000000d0213ffcd2012014d00120087ffe8b2a88013ffce401201ce2012000e004bff480a44010328000058c21a00cde04a0041080000a9610000f8b19600cba1020029e100006fa21bffcc204a004c223e004e023e0009610000f9410001192100008d00120109a100012de012020353f02d2b406a27c81c6a00488012024e204a004901020fdda04600c9e100016f403600081c6a00401000000ea05a004901020fdda05600cf403600081c6a00401000000|@5565,131071|32,4,@5563 96,5,@2733 120,5,@2735 152,5,@5528 176,4,@545 380,4,@1478 444,5,@3244 540,4,@5545 5563:O3|@24,@397,@5564 5564:S12|6e6f6e65206d617463686573 5565:S55|56414c55455f4f505328292e7072696e745374727563742835297072696e74732835297072696e74436f6e737472756374696f6e283229 5566:C2,272|9e13e002f606201880a1001b8bd02018ae10000fac100008901000167ffde20d0100000080a220012280003890102001aa100017901000167ffde21701000000de02200080a3e0053280002e90102001ea213ffc9a102005c402200488013ffc80a0a00132800006ee00a00090102005ee01200081c5e00688012004da213ffcfa05e000fa213ff8fa00a004fa213ff492103ffd9010000d7ffd4fd388013ff492100008d00120041b0000839a0360d8f40360009fc6a0000100000080a220012280000d90102001ec012008b825a001b9172004aa072001c40120009a1000158801200cf606201880a1001b8bd0201830bfffdcec01200c81c5a0068801201081c560060100000081c5e00601000000|@5567,131071|28,5,@2104 56,5,@2105 152,5,@509 168,4,I24 5567:S28|56414c55455f4f505328292e697350726f6475637454797065283129 5568:C2,60|9e13e002f606201880a1001b8bd02018c4022004ee036008ee213ffcd602200cd4022008d200a004d0022000da036004f403600081c6a00488013ffc|@5569,131071| 5569:S38|56414c55455f4f505328292e7072696e745374727563742835297072696e7473283529283129 5570:C2,252|9e13e002f606201880a1001b8bd02018c4036004de213ffcda213ff8d0213ff4d4213ff0fa026000fa213fecfa026004fa213fe8113f00259002227cda00a018f40360009fc6a00088013fe8ee012010ec05e004fa05a00cfa213ffc133f00b392026104d00120047ffd4df988013ffcda012000f40360009fc6a00001000000ea012014e8056004113f001f9002225cda052000f40360009fc6a00001000000e601200cb824e001b91f2004a4072001e2012014e004600ce0213ffc96103ffd94100012d2012004d0012010da046008f40360009fc6a00088013ffcde012014c203e00490102001da006008de012018f403600081c6a0048801201c|@5571,131071|52,4,@499 92,4,@2075 104,5,@496 136,4,@485 5571:S38|56414c55455f4f505328292e7072696e745374727563742835297072696e7473283529283429 5572:C2,48|9e13e002f606201880a1001b8bd02018d602200cd4022008d2022004d0022000da036004f403600081c6a00401000000|@5569,131071| 5573:S7|3c656d7074793e 5574:S35|56414c55455f4f505328292e7072696e745374727563742835297072696e7473283529 5575:S26|56414c55455f4f505328292e7072696e74537472756374283529 5576:S34|56414c55455f4f505328292e636f646556616c2835297072696e7450726f63283129 5577:C2,220|9e13e002f606201880a1001b8bd02018d0213ffcd0213ff8d0213ff4d0213ff0d0213fecd0213fe8d0213fe4de213fe0fa022000fa213fdcfa022004fa213fd8fa02200cfa213fd4fa036004fa213fd094013fe4d2022008901021357ffd3ea588013fd08c21a0208b196020ba10200784100006fa21bffcee012014ee20a000ec012018ec20a004ea01201cea20a008e8012020e820a00ce6012024e620a010e4012028e420a014e201202ce220a018e0012008e021202c96100002d4012004d2012000d001200cde012010353f02ccb406a19c81c6a0048801202c|@5576,131071|92,5,@428 204,4,@5524 5578:C2,388|9e13e002f606201880a1001b8bd020188c21a0088b1960083b100000ba07600184100006fa21bffc2f000083ae05e3d8ee20a0008c21a00c8b19600cba102002ae100006fa21bffc2d3f02d8ac05a0b8ec25e000c425e004d0213ffcd0213ff8d0213ff4d0213ff0d0213fecd0213fe8d0213fe48c21a00c88013fe48b19600cba102002ac100006fa21bffc2b3f02d8aa056150ea25a000c425a004aa012000ec256000ac0120002b3f02d8aa056224ea25a004ac0120002b3f02d8aa056280ea25a008ac012000ee25a00caa0120002f3f02d8ae05e2b4ee256010ac0120002b3f02d8aa0562e8ea25a014ae0120002d3f02d8ac05a31cec25e0188c21a0208b196020ba102007aa100006fa21bffcee012000ee256000ec012004ec256004e8012008e8256008e601200ce625600ce4012010e4256010e2012014e2256014ee012018ee256018de213ffcc4213ff8ec036004ec213ff496100015150000279402a041d20360087ffff44788013ff4ea012000d0056000e801200481c5200688012024|@5594,131071|40,4,I48 72,4,@5579 140,4,@5581 168,4,@5583 184,4,@5586 208,4,@5588 224,4,@5590 240,4,@5592 348,4,10000 360,5,@5524 5579:C2,72|9e13e002f606201880a1001b8bd02018c4036004ee00a000de213ffcc4213ff892100008901000177ffd4cdb88013ff8ec012000d025a00090102001ea01200481c5600688012008|@5580,131071|40,5,@496 5580:S41|56414c55455f4f505328292e636f646556616c2835296d616b65537472696e6728312970702d283129 5581:C2,140|9e13e002f606201880a1001b8bd02018de213ffcda213ff8c402200088013ff8b820a001811f200034800006de01200090102001de01200481c3e00688012008da03e004d0036000c4213ffcda213ff8921020817ffd4caa88013ff8c4012000d020a000ee012004b825e001b91f2004ac0720018410001688012008f606201880a1001b8bd0201830bfffe6|@5582,131071|84,5,@496 5582:S34|5072657474795072696e7465722e75676c795072696e74283229627265616b283129 5583:O1|@5584 5584:C2,16|9e13e0029010200581c3e00601000000|@5585,129| 5585:S29|5072657474795072696e7465722e75676c795072696e74283229283129 5586:O1|@5587 5587:C2,16|9e13e0029010200181c3e00601000000|@5585,129| 5588:O1|@5589 5589:C2,16|9e13e0029010200181c3e00601000000|@5585,129| 5590:O1|@5591 5591:C2,16|9e13e0029010200181c3e00601000000|@5585,129| 5592:O1|@5593 5593:C2,16|9e13e0029010200181c3e00601000000|@5585,129| 5594:S35|56414c55455f4f505328292e636f646556616c2835296d616b65537472696e67283129 5595:C2,392|9e13e002f606201880a1001b8bd020188c21a0088b1960083b100000ba07600184100006fa21bffc2f000083ae05e3d8ee20a0008c21a00c8b19600cba102002ae100006fa21bffc2d3f02d9ac05a120ec25e000c425e004d0213ffcd0213ff8d0213ff4d0213ff0d0213fecd0213fe8d0213fe48c21a00c88013fe48b19600cba102002ac100006fa21bffc2b3f02d9aa0561b4ea25a000c425a004aa012000ec256000ac0120002b3f02d8aa056224ea25a004ac0120002b3f02d8aa056280ea25a008ac012000ee25a00caa0120002f3f02d8ae05e2b4ee256010ac0120002b3f02d8aa0562e8ea25a014ae0120002d3f02d9ac05a25cec25e0188c21a0208b196020ba102007aa100006fa21bffcee012000ee256000ec012004ec256004e8012008e8256008e601200ce625600ce4012010e4256010e2012014e2256014ee012018ee256018de213ffcc4213ff8ec022004ec213ff496100015150000279402a041d2036004d00220007ffff32d88013ff4ea012000d0056000e801200481c5200688012024|@5576,131071|40,4,I48 72,4,@5596 140,4,@5598 168,4,@5583 184,4,@5586 208,4,@5588 224,4,@5590 240,4,@5599 348,4,10000 364,5,@5524 5596:C2,72|9e13e002f606201880a1001b8bd02018c4036004ee00a000de213ffcc4213ff892100008901000177ffd4bc188013ff8ec012000d025a00090102001ea01200481c5600688012008|@5597,131071|40,5,@496 5597:S40|56414c55455f4f505328292e636f646556616c2835297072696e7450726f6328332970702d283129 5598:C2,140|9e13e002f606201880a1001b8bd02018de213ffcda213ff8c402200088013ff8b820a001811f200034800006de01200090102001de01200481c3e00688012008da03e004d0036000c4213ffcda213ff8921020817ffd4b9188013ff8c4012000d020a000ee012004b825e001b91f2004ac0720018410001688012008f606201880a1001b8bd0201830bfffe6|@5582,131071|84,5,@496 5599:O1|@5600 5600:C2,16|9e13e0029010200181c3e00601000000|@5585,129| 5601:C2,116|9e13e002f606201880a1001b8bd02018da213ffc8c21a00c88013ffc8b19600cba10200284100006fa21bffc2f3f02d9ae05e320ee20a000d020a004de213ffcc4213ff8d00360049a0120004000003a88013ff8d20120001b3f02dc9a036380de012004353f02dcb406a38c81c6a0048801200c|@5635,131071|44,4,@5602 76,5,@5604 88,4,@5630 100,4,@5631 5602:C2,84|9e13e002f606201880a1001b8bd02018c402200cee022018ec022000ea0220088c21a0148b196014ba10200490100006fa21bffcea22200cec222008ee222004c4222000da036004f403600081c6a00401000000|@5603,131071| 5603:S42|56414c55455f4f505328292e636f646556616c283529696e7374616c6c50702831297070726f63283129 5604:C2,516|9e13e002f606201880a1001b8bd02018ae10000fac10000daa100008901000157ffde06e0100000080a2200122800070ee213ffca8100017a6100016901000157ffde07701000000ea022000d00220087ffde08801000000a4100015a2100008901000117ffe0cae01000000de02200080a3fffd3280004890100011901000117ffd8aff0100000080a4a00132800004da04a0041080002fe8213ffc80a360013280000bd804e000c404e000e8213ffcd0213ff8d200a008d004a0004000005988013ff810800026d0012000e8213ffcd0213ff8e6213ff4e4213ff0d00320087ffffc6188013ff080a2200132800008d6012004113f02dc9002209cf40620209fc6a00001000000d6012004d402e000d002a0087ffdde680100000080a220012280000e88012008d002a0087ffdde7301000000d2022004d0012000400001f3010000008801200810800005d0012000d0213ff888013ff8d00120004000023c0100000080a2200132800008d0012000113f02dc900222ccf40620209fc6a00001000000d0012000c201200481c06006880120087ffe0c620100000082100008901000117ffe0d1d010000009810001496100013921000127ffe0f9801000000d8213ffcd6213ff89410200592100008901000017ffe0fde88013ff8da012000de01200410bfff8888012008113f02dc90022308f40620209fc6a00088013ffc90102001|@5629,131071|32,5,@2124 64,5,@2125 80,5,@2126 100,5,@2429 128,5,@1613 188,5,@5605 224,5,@5566 244,4,@5617 276,5,@2104 300,5,@2105 316,5,@5619 348,5,@5623 368,4,@5625 404,5,@2429 420,5,@2438 440,5,@2462 468,5,@2464 492,4,@5627 5605:C2,1188|9e13e002f606201880a1001b8bd02018ae10000fac100008901000097ffde2230100000080a2200122800119ee213ffcaa100017901000097ffde22d01000000ea213ffcec213ff8de02200088013ff8da03e00080a3600d328000128210000f8410000fd200a008d000a0047ffddde001000000ee02200080a5fffd328000059e100008821000021080000790100001f606201880a1001b8bd0201830bfffed901000017ffdddfc0100000080a22001228000f001000000901000017ffdde0701000000d202200080a26005328000e301000000c40220048088a001328000d901000000ee00a000c4213ffcee213ff8d205e000901020c51b0000839a0360d8f40360009fc6a00088013ff880a22001228000c601000000ec012000ea012004e8056004808d2001328000ba01000000e6052000fa05a004fa213ffce8213ff8e6213ff4d204e000901020c91b0000839a0360d8f40360009fc6a00088013ff480a22001228000a501000000e4012000e2012004e004600480a420013280009901000000fa04a004fa213ffcde01201488013ffcda03e00080a3600d328000128210000f9810000fd2032008d00320047ffddd8f01000000d602200080a2fffd328000059e1000088210000c10800007c2213ffcf606201880a1001b8bd0201830bfffedc2213ffcd801200c88013ffcd403200080a2a00d328000119610000cd2032008d00320047ffddd7901000000d202200080a27ffd32800005981000089610000c10800007d0012000f606201880a1001b8bd0201830bfffeed00120007ffd89b80100000080a220012280005f01000000d00120007ffd89c301000000921000089010000b7ffd89ae0100000080a2200122800055010000009010000b7ffd89b9010000008410000992100008901000027ffdd9870100000080a220012280004a01000000ee012004ea05e00080a5600d32800011ac100017d205e008d005e0047ffddd4a01000000e802200080a53ffd32800005ae100008ac1000171080000790100016f606201880a1001b8bd0201830bfffee901000167ffddf2f0100000080a220012280002a01000000901000167ffddf3a01000000e802200080a520013280001d01000000d00220087ffddf48010000007ffd89c901000000a6100008113f002f900222e47ffd89c40100000092100008901000137ffe0dc60100000080a22001228000060100000090102001e401202081c4a00688012024113f02db900222a4f40620209fc6a0000100000090102001113f02db90022300f40620209fc6a0000100000090102001113f02db90022300f40620209fc6a0000100000090102001113f02db90022360f40620209fc6a0000100000090102001113f02db900223b4f40620209fc6a0000100000090102001113f02db900223b4f40620209fc6a0000100000090102001113f02db900223b4f40620209fc6a0000100000090102001113f02db900223b4f40620209fc6a0000100000090102001113f02db900223b4f40620209fc6a0000100000090102001113f02db900223b4f40620209fc6a0000100000090102001113f02db900223b4f40620209fc6a0000100000090102001ee213ffc113f02dc90022004f40620209fc6a00088013ffc90102001|@5616,131071|28,5,@2148 56,5,@2149 108,5,@2100 164,5,@2104 188,5,@2105 248,4,I24 332,4,I24 432,5,@2100 520,5,@2100 576,5,@1606 600,5,@1607 616,5,@1606 640,5,@1607 660,5,@2088 708,5,@2100 764,5,@2124 788,5,@2125 816,5,@2126 824,5,@1613 836,4,@698 844,5,@1613 860,5,@2452 896,4,@5606 920,4,@5608 944,4,@5608 968,4,@5610 992,4,@5612 1016,4,@5612 1040,4,@5612 1064,4,@5612 1088,4,@5612 1112,4,@5612 1136,4,@5612 1164,4,@5614 5606:O3|103,@522,@5607 5607:S65|417267756d656e74207072696e746572206d757374206861766520747970652027612a696e742d3e756e697420287365636f6e6420617267206e6f7420696e7429 5608:O3|103,@522,@5609 5609:S70|417267756d656e74207072696e746572206d757374206861766520747970652027612a696e742d3e756e697420287365636f6e6420617267206e6f74207479706520696e7429 5610:O3|103,@522,@5611 5611:S60|417267756d656e74207072696e746572206d757374206861766520747970652027612a696e742d3e756e697420286d69736d61746368656420276129 5612:O3|103,@522,@5613 5613:S55|417267756d656e74207072696e746572206d757374206861766520747970652027612a696e742d3e756e697420286e6f74207061697229 5614:O3|103,@522,@5615 5615:S59|417267756d656e74207072696e746572206d757374206861766520747970652027612a696e742d3e756e697420286e6f742066756e6374696f6e29 5616:S59|56414c55455f4f505328292e636f646556616c283529696e7374616c6c5070283129666f6c6c6f775479706573283129636865636b46756e283229 5617:O3|103,@522,@5618 5618:S24|417267756d656e74206d7573742062652061207475706c65 5619:C2,172|9e13e002f606201880a1001b8bd0201880a220013280000f808a600180a2600132800005de213ffc9010200181c3e00601000000113f02dc90022194f40620209fc6a00088013ffc90102001808a600132800011de213ffcc4026000de213ffcfa022004fa213ff8fa026004fa213ff4d200a004d00220007ffffe2888013ff4d2012000d0012004de01200810bfffde8801200c113f02dc90022194f40620209fc6a00088013ffc90102001|@5622,131071|52,4,@5620 120,5,@5605 148,4,@5620 5620:O3|103,@522,@5621 5621:S30|5475706c652073697a6520646f6573206e6f74206d617463682074797065 5622:S60|56414c55455f4f505328292e636f646556616c283529696e7374616c6c5070283129666f6c6c6f775479706573283129636865636b46756e73283229 5623:C2,124|9e13e002de213ffc88013ffcde02200080a3fff93280000f84100008c2022004da006000d803600080a32005328000059010000d8410000810800007c200a000f606201880a1001b8bd0201830bffff0c200a00080a07ffd328000069010200190102005da01200081c3600688012004da01200081c3600688012004|@5624,65777| 5624:S25|5354525543545f56414c5328292e6973467265654964283129 5625:O3|103,@522,@5626 5626:S36|496e76616c6964207479706520286e6f74206672656520617420746f702d6c6576656c29 5627:O3|103,@522,@5628 5628:S38|496e76616c6964207479706520286e6f742061207479706520636f6e737472756374696f6e29 5629:S48|56414c55455f4f505328292e636f646556616c283529696e7374616c6c5070283129666f6c6c6f775479706573283129 5630:O2|@5631,@121 5631:C2,128|9e13e002f606201880a1001b8bd020188c21a00c8b19600cba10200284100006fa21bffcd220a004d020a000d2036004ee026000d0213ffca410000fa2100009a0100002901000179a013ffc4000001488013ffc8c21a00c8b19600cba1020029e100006fa21bffcd023e004e023e000de2460009010200181c4a00688012004|@5634,131059|76,5,@5632 5632:C2,176|9e13e002f606201880a1001b8bd0201880a2200132800005c40220009010200181c3e00601000000ac10000faa10000da8100002e6022004d2056000d000a0007ffe0bfc0100000080a2200122800007ec213ffc901000139a1000159e10001610bfffeaf6062018ea213ff8e8213ff4901000139a1000157fffffe288013ff48c21a00c8b19600cba1020029e100006fa21bffcd023e004c2012000c223e0009010000fda01200881c360068801200c|@5633,129267|64,5,@2452 5633:S31|5052494e545f5441424c4528292e616464507028322966696c746572283129 5634:S22|5052494e545f5441424c4528292e6164645070283229 5635:S34|56414c55455f4f505328292e636f646556616c283529696e7374616c6c5070283129 5636:S22|56414c55455f4f505328292e636f646556616c283529 5637:O2|@5638,@122 5638:C2,60|9e13e002c4022000ee03600480a0801732800005de213ffcd002200881c3e00601000000113f003890022020f40620209fc6a00088013ffc90102001|@1106,98465|36,4,@1110 5639:O2|@5640,@122 5640:C2,44|9e13e002c4022000ee03600480a0801732800005901020019010200581c3e0060100000081c3e00601000000|@1106,98465| 5641:C2,2532|9e13e002f606201880a1001b8bd02018c402200480a0a001328000618088a001de213ffcd0213ff8d2213ff4ee012000ee213ff0ac10000bd6012004aa10000a9410001692100015da036004f40360009fc6a00088013ff0a8100008d00120047ffded9d010000008c21a00c8b19600cba102002a6100006fa21bffcd024e004a4103ff5e424e0008c21a00c8b19600cba102002a2100006fa21bffca0102001e0246004de012000de2460008c21a00c8b19600cba10200282100006fa21bffce2206004e62060008c21a00c8b19600cba1020029a100006fa21bffcc2236004e82360008c21a00c8b19600cba10200298100006fa21bffcda23200496102029d6232000d8213ffc88013ffc80a3600132800005d2036000941020051080000c80a2a001d002600080a23ff53280000794102001da036004f606201880a1001b8bd0201830bffff280a2a00122800011d0012000d00120007ffe886b01000000841000088c21a00c8b19600cba10200290100006fa21bffcc4222004ae103ff5ee222000ec01200c81c5a00688012018c401200c81c0a0068801201832800043ae10000fde213ffcd2213ff8ee012000ee213ff4ac10000bd6012004aa10000a9410001692100015da036004f40360009fc6a00088013ff4e602200080a4e0153280000980a4fff592100008901020057ffe867901000000a8100008108000158c21a00c328000098c21a01092100008901020057ffe867001000000a81000081080000c8c21a00c8b196010ba102003a8100006fa21bffca4102005e4252008d0252004a2102019e22520008c21a00c8b19600cba102002a0100006fa21bffc9e102001de242004c2012000c22420008c21a0148b196014ba10200490100006fa21bffc9a102001da22200ce8222008e022200498102011d8222000d601200481c2e00688012010ac10000daa100008d00560087ffe39200100000080a22001228001a4ee213ffcd00560087ffe39300100000080a23ffd32800020a8100008ee213ffcd2213ff89210000a9010000b400001c488013ff88c21a00c8b19600cba102002a8100006fa21bffca6102001e6252004e4012000e4252000a21000088c21a0148b196014ba10200490100006fa21bffca0102005e022200ce2222008e82220049e102011de222000c201200481c060068801201090100014400011c40100000080a220012280003480a52011ee213ffcd2213ff89210000a9010000b400001a088013ff88c21a00c8b19600cba102002a6100006fa21bffca4102001e424e004e2012000e224e0008c21a0148b196014ba102004a0100006fa21bffc9e102005de24200cd0242008e624200482102011c22420008c21a00c8b19600cba1020029a100006fa21bffc98102001d8236004e02360008c21a0148b196014ba10200490100006fa21bffc96102005d622200c153f00319402a250d4222008da22200492102011d2222000c401200481c0a006880120103280002990100014d0213ffcd0213ff8ee213ff4d2213ff0e6012000e6213feca4013ff8e4213fe8a210000bd60120049410200192100011d00560004000119288013fe88c21a00c8b19600cba102002a0100006fa21bffc9e102001de242004c2012000c22420008c21a0148b196014ba10200490100006fa21bffc9a102005da22200cd8012008d8222008e022200496102011d6222000d401200481c2a00688012018400015990100000080a22001228000f5ee213ffc9010000b7ffdddd60100000080a220012280008c01000000a41000179010000b7ffddde001000000e2022000901000117ffdddcb0100000080a220012280007801000000901000117ffdddd601000000e4213ffcd2213ff8fa022004fa213ff4e002200088013ff4c204200080a0600d3280000b9e100010d2042008d00420047ffdd98801000000a0100008f606201880a1001b8bd0201830bffff49810000f9010000c7ffdd9a90100000080a22001228000539010000c9010000c7ffdd9b401000000d6022004808ae001328000449010000cd402e004808aa001328000389010000cd202a00480a260013280002c9010000cc402e000ee00a004ea05e00080a5600d3280000bac100017d205e008d005e0047ffdd96301000000ae100008f606201880a1001b8bd0201830bffff4ec213ffce801200088013ffce405200080a4a00d3280000ba6100014d2052008d00520047ffdd95301000000a8100008f606201880a1001b8bd0201830bffff4a21000138c21a00c8b19600cba102002a6100006fa21bffce224e004e0012000e024e000108000338c21a0109a0120084000154101000000a6100008d0213ffc88013ffc1080002b8c21a0109a0120084000153901000000a6100008d0213ffc88013ffc108000238c21a0109a0120084000153101000000a6100008d0213ffc88013ffc1080001b8c21a0109a0120084000152901000000a6100008d0213ffc88013ffc108000138c21a010273f02f4a604e2e8e4213ffcd2213ff8d0213ff4d0213ff088013ff01080000a8c21a010273f02f4a604e2e8ee213ffcd2213ff8d0213ff4d0213ff088013ff08c21a0108b196010ba102003a4100006fa21bffc233f02f4a20462f4e224a000e004e000e024a008de04e004de24a004e0213ffcde213ff8e4213ff4c6213ff0033f02df82006256c2213fec9a102001da213fe886013fe8d00120087fffee4688013fe88c21a0148b196014ba10200498100006fa21bffc173f02f69602e050d6232000d4012020d423200ce0232008d2012010d22320048c21a00c8b19600cba10200290100006fa21bffcd822200484103ff5c4222000c6012008ee01202481c5e00688012030ec02200080a5a005328000098c21a00c113f00059002201cf40620209fc6a00001000000901020018c21a00c8b19600cba102002aa100006fa21bffce8012000e8256004a6103ff5e62560008c21a00c8b19600cba102002a4100006fa21bffca2102001e224a004e0012014e024a0008c21a0148b196014ba10200490100006fa21bffc9e102001de22200cea222008e422200482102011c2222000da01201881c3600688012024d2213ff8e6012000e6213ff4a410000bd6012004a210000a941000129210001190100015da05a004f40360009fc6a00088013ff48c21a00c8b19600cba102002a0100006fa21bffc9e102001de242004c2012000c22420009a1000088c21a0148b196014ba10200490100006fa21bffc98102001d822200cda222008e022200496102011d6222000d401200481c2a00688012010d2213ff8e8012000e8213ff4a610000bd6012004a410000a941000139210001290100015da05a004f40360009fc6a00088013ff48c21a00c8b19600cba102002a2100006fa21bffca0102001e0246004de012000de246000821000088c21a0148b196014ba10200490100006fa21bffc9a102001da22200cc2222008e222200498102011d8222000d601200481c2e00688012010|@5788,131071|96,5,@2194 344,5,@3258 496,5,@3251 532,5,@3251 692,5,@2752 716,5,@2754 752,5,@5642 860,5,@5746 896,5,@5642 1044,4,@817 1140,5,@5748 1244,5,@5770 1268,5,@2148 1296,5,@2149 1312,5,@2148 1336,5,@2149 1392,5,@2100 1428,5,@2104 1452,5,@2105 1540,5,@2100 1604,5,@2100 1680,5,@5772 1712,5,@5772 1744,5,@5772 1776,5,@5772 1804,4,@5774 1840,4,@5774 1888,4,@5775 1932,4,$5641+2070 1960,5,@5528 1988,4,@5787 2084,4,@227 5642:C2,776|9e13e002f606201880a1001b8bd02018b8226001b9172004840720018c21a0088b1960083b100000ba07600192100006fa21bffcae102001ee2260008c21a0088b1960083b100000ba076001ae100006fa21bffcac102001ec25e0008c21a0088b1960083b100000ba076001ac100006fa21bffcaa102001ea25a0008c21a00c8b19600cba102002aa100006fa21bffc293f02e0a8052364e8256000d22560048c21a01c8b19601cba102006a8100006fa21bffc273f02e2a604e0ece6252000d2252014ee252010c425200cec252008ea252004de213ffcc4213ff8ee213ff4e8213ff07ffe5a2188013ff0153f02ef9402a3d892102001da012000f40360009fc6a00001000000e402200080a4a00132800011e2022004e20220048c21a00c8b19600cba10200290100006fa21bffca0102001e0222004de012008de2220009a100011de01200cf403600081c6a004880120108c21a00c8b19600cba10200290100006fa21bffca0102001e0222004de012008de2220009a100011f40360009fc6a00001000000c2012004da006000808b6001328000128c21a00cd603600480a2e001328000058c21a00cd8036000108000138c21a0148b19600cba10200298100006fa21bffcda23200494103fddd42320001080000a8c21a0148b19600cba10200298100006fa21bffcda23200496103fddd62320008c21a0148b196014ba10200494100006fa21bffc92102005d222a00cd022a008113f02f090022048d022a00484102011c422a0008c21a00c8b19600cba102002ae100006fa21bffcac102001ec25e004d425e0008c21a00c8b19600cba102002aa100006fa21bffcee256004d82560008c21a00c8b19600cba102002a8100006fa21bffcea252004a6102025e62520008c21a0248b196024ba102008a4100006fa21bffca2102001e224a01ca0102001e024a0189e102001de24a01482102005c224a0109a102001da24a00cd8012008d824a008173f02f09602e070d624a004e824a0008c21a00c8b19600cba10200290100006fa21bffce422200494103fe5d4222000d201200c81c2600688012010|@5745,131071|144,4,@5643 180,4,@5655 228,5,@2957 236,4,@5738 536,4,@5741 716,4,@5744 5643:C2,248|9e13e002d0213ffcd0213ff8808a60011280001688013ff88c21a0148b196014ba1020049a100006fa21bffc193f02e198032078d8236000d023600cd0026000d0236008d8026004d82360049601200094102001d422e00096012000da22e0041080001c8c21a00c8c21a0108b196010ba10200398100006fa21bffc173f02e19602e11cd6232000d4036004d4232008d02320048c21a00c8b19600cba10200292100006fa21bffc113f02e290022028d0226000d82260049801200096103ffdd623200090012000d22220048c21a00c8b19600cba10200290100006fa21bffcda012000da222000d8012004d822200481c3e00688012008|@5654,191|44,4,@5644 124,4,@5646 168,4,@5652 5644:C2,76|9e13e002f606201880a1001b8bd02018841000088c21a0108b196010ba10200390100006fa21bffcc4222008ee036004ee222004ec036008ec222000da03600cf403600081c6a00401000000|@5645,131071| 5645:S50|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e28322972657475726e436f6465283229283129 5646:C2,340|9e13e002f606201880a1001b8bd02018d2036008c4026000b820a001b9172004ae072001ee226000c4026000b8222001b9172004ae0720018c21a00c8b19600cba102002ac100006fa21bffc2b3f02e1aa05628cea25a000ee25a0048c21a00c8b19600cba102002a8100006fa21bffc273f02e1a604e354e6252000ee2520048c21a00c8b19600cba102002a4100006fa21bffcc424a004ee24a0008c21a0108b196010ba10200390100006fa21bffce4222008e8222004ec222000de213ffcee213ff8da036004f40360009fc6a00088013ff88c21a0248b196024ba102008a2100006fa21bffca0102001e024601c9e102001de24601882103ffdc22460149a102009da24601098102001d824600cd6012000d6246008153f02e19402a3ccd4246004d02460008c21a00c8b19600cba10200290100006fa21bffce222200492103fe5d2222000c401200481c0a00688012008|@5651,131071|76,4,@5647 112,4,@5649 280,4,@5650 5647:C2,92|9e13e002c4022000ee036004b825e001ba20a001b91f401cac0720018c21a0188b196018ba10200590100006fa21bffc84102001c4222010ec22200cac102005ec22200884103ffdc4222004ac103fedec22200081c3e00601000000|@5648,114849| 5648:S69|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e28322972657475726e436f646528322977726170706564436f6465283229636f64652d283129 5649:C2,92|9e13e002c4022000ee036004b825e001ba20a001b91f401cac0720018c21a0188b196018ba10200590100006fa21bffc84102001c4222010ec22200cac102005ec22200884103ff9c4222004ac103fedec22200081c3e00601000000|@5648,114849| 5650:S10|65717b2e2e2e7d283229 5651:S61|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e28322972657475726e436f646528322977726170706564436f6465283229 5652:C2,40|9e13e002f606201880a1001b8bd02018d2022004d0022000da036004f403600081c6a00401000000|@5653,131071| 5653:S61|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e28322972657475726e436f646528322977726170706564436f6465283129 5654:S47|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e28322972657475726e436f6465283229 5655:C2,932|9e13e002f606201880a1001b8bd02018da213ffcd4213ff8d2213ff4c402200080a0a00d1280002488013ff48c21a00c8b19600cba102002ae100006fa21bffcec022008ec25e004ea022004ea25e000a810000f92100016d00220047ffdd62201000000de02200080a3fffd3280000ed2012000e8213ffc901000179a10000af40360009fc6a00088013ffcd2012004de012000353f02e3b406a0ac81c6a00488012010da0120089e10001410bfffd68801200cae10000fac100008901000167ffdd7fc0100000080a220012280008a90100016aa100017901000167ffdd80601000000e8022000d00220087ffdd81701000000a6100008901000137ffd829601000000ea213ffce8213ff8e6213ff4d0213ff0153f02e49402a0e892100013901020f51b3f00e89a0363007ffe063d88013ff0e402200080a4bff92280001a010000008c21a00c8b19600cba102002a2100006fa21bffc213f02e4a0042160e0246000d02460048c21a00c8b19600cba1020029e100006fa21bffce223e00482102001c223e000d20120109010000fde01200c353f02e3b406a0ac81c6a0048801201c113f0030900223547ffd826a0100000092100008d00120007ffe066c0100000080a220012280000bd0012004e2012018d2012010113f02e4900221c4da046004de01200cf403600081c6a0048801201c7ffe0b8d0100000080a2200132800025e2022000d00120047ffe03fa01000000e202200080a47ffd22800017d2012010d00120047ffe03f301000000a0100008d00120047ffe04ae01000000d20120087ffe072b010000009410200592100008901000107ffe077301000000d4012014d2012010da012018de01200c10bfff658801201c113f02e4900221fcde01200c353f02e3b406a0ac81c6a0048801201ce0046008de04200080a3e0013280000a94100008d2012010113f02e4900221fcde01200c353f02e3b406a0ac81c6a0048801201cd2012008d00120049a012018400002ac01000000d2012010de01200c353f02e3b406a0ac81c6a0048801201c7ffdd5a60100000080a220012280002201000000aa100017901000167ffdd5b001000000e8022004808d200132800013ea213ffce605200480a4e00132800008ea213ffce4052000d004a004da0120089e10001510bfff2f8801200cd00220049a01200840000b5f88013ffce401200081c4a00688012010d00220049a01200840000b5888013ffce601200081c4e00688012010113f02e4900221fc9e100017353f02e3b406a0ac81c6a0048801200c|@5737,131071|92,5,@2100 148,4,@5656 192,5,@2124 220,5,@2125 236,5,@2126 252,5,@1613 276,4,@5661 292,4,@2449 300,5,@2450 344,4,@5664 404,4,@5656 420,4,@769 428,5,@1613 444,5,@2452 472,4,@5666 500,5,@2500 524,5,@2429 552,5,@2429 568,5,@2438 580,5,@2462 600,5,@2464 632,4,@5668 644,4,@5656 684,4,@5668 696,4,@5656 724,5,@5676 740,4,@5656 756,5,@2104 784,5,@2105 856,5,@5726 884,5,@5726 904,4,@5668 916,4,@5656 5656:C2,248|9e13e00280a2600132800004d0213ffc81c3e00601000000d0213ff8c402200080a0bffd1280001788013ff88c21a0148b196014ba102004ae100006fa21bffc2d3f02e3ac05a1c0ec25e000ec022004ec25e00cea026000ea25e008e8026004e825e004a6012000a4102001e424e000a6012000ee24e004108000168c21a00c8c21a0148b196014ba102004ae100006fa21bffc2d3f02e3ac05a2f8ec25e000ea022004ea25e00ce8026000e825e008e6026004e625e004a4012000ac102001ec24a000a4012000ee24a0048c21a00c8b19600cba10200290100006fa21bffcd2012000d2222000c4012004c422200481c3e00688012008|@5660,130179|64,4,@5657 148,4,@5659 5657:C2,224|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d0213ff4da03600cf40360009fc6a00088013ff4c4012004d0213ffcd0012000da00a008f40360009fc6a00088013ffcee012008d0213ffcd0012004da05e004f40360009fc6a00088013ffc8c21a00c8b19600cba102002ac100006fa21bffcaa102001ea25a004d025a0008c21a00c8b19600cba102002a8100006fa21bffcec252004e6012000e62520008c21a0148b196014ba10200490100006fa21bffca4102005e422200ce2012004e2222008e8222004a0102011e0222000de01201081c3e00688012014|@5658,131071| 5658:S49|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e28322972657475726e46756e283229283129 5659:C2,412|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d0213ff4da03600cf40360009fc6a00088013ff4c4012004d0213ffcd0012000da00a008f40360009fc6a00088013ffcee012008d0213ffcd0012004da05e004f40360009fc6a00088013ffc8c21a00c8b19600cba102002ac100006fa21bffcaa102001ea25a004d025a0008c21a00c8b19600cba102002a8100006fa21bffcec252004e6012000e62520008c21a00c8b19600cba102002a4100006fa21bffce824a004a2102029e224a000e4213ffc88013ffc80a5200132800005de052000a01020051080000c80a42001c203e00080a07ff532800007a0102001e8052004f606201880a1001b8bd0201830bffff280a420012280000dda012000d00120007ffe824d010000008c21a00c8b19600cba1020029a100006fa21bffcd023600498103ff5d82360008c21a00c8b19600cba10200298100006fa21bffc96102001d6232004da2320008c21a0148b196014ba10200490100006fa21bffc94102005d422200cd2012008d2222008d822200484102011c4222000ee01201481c5e00688012018|@5658,131071|280,5,@3258 5660:S46|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e28322972657475726e46756e283229 5661:O1|@5662 5662:C2,20|9e13e002113f002b9002225c81c3e00601000000|@5663,129|4,4,@581 5663:S54|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b6545712833297370656369616c2d283129 5664:C2,16|9e13e002d003600481c3e00601000000|@5665,161| 5665:S46|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329283129 5666:O1|@5667 5667:C2,20|9e13e002113f002d9002215081c3e00601000000|@5665,129|4,4,@622 5668:O2|0,@5669 5669:O1|@5670 5670:C2,20|9e13e002113f02e49002224081c3e00601000000|@5675,129|4,4,@5671 5671:O2|-3,@5672 5672:O1|@5673 5673:C2,40|9e13e002f606201880a1001b8bd02018d2022004d0022000353f02e4b406a29881c6a00401000000|@4486,131071|24,4,@5674 5674:C2,900|9e13e002f606201880a1001b8bd0201880a2000932800005808a20019010200581c3e0060100000022800005808a60019010200181c3e0060100000022800005fa023ffc9010200181c3e00601000000bb2f6008b937600684072001fa027ffcbb2f6008b9376006ae07200180a0801722800005fa0a3ffc9010200181c3e00601000000b92f6002ae072001fa0a7ffcb92f6002ac072001aa15c016ae0d610180a5e00122800005ac0d60059010200181c3e0060100000080a5a0012280004580a0a005b820a001811f200036800008aa1000022f3f000eae05e330b820a001ba25e001b917401caa072001b8256001ba10001cbb17401db917401d840720018088a00122800005de213ffcae1000021080000dde213ffcd0213ff8d2213ff4901000021b0000879a0360d8f40360009fc6a00088013ff4ae10000810800006ee213ffcd0213ff8d2213ff488013ff4ee213ffcac10200188013ffcea01200080a5801532800006e801200890102005e801200c81c5200688012010bb3da002fa0d001db92f6002a6072001e4012004bb3da002fa0c801db92f6002a207200180a4c0113280000890102001a085a004ac100010f606201880a1001b8bd0201830bfffe7e001200c81c42006880120103280000880a0a009ea022000e8026000921000149010001510bfff88f606201832800038aaa0a004ea022000e8022004e6026000e4026004808d60012280000b808ce00180a540133280000690102001921000129010001410bfff78f606201881c3e0060100000022800005808d20019010200181c3e006010000002280000b808ca00180a500123280000690102001921000139010001510bfff68f606201881c3e0060100000022800005de213ffc9010200181c3e00601000000e8213ff8e4213ff492100013901000157fffff5988013ff480a220012280000790102001d2012000d0012004de01200810bfff528801200ce201200881c460068801200cde213ffcd0213ff8d2213ff488013ff480a5600132800005e6012004a81020051080001780a52001b8256001e404c01ce2012000e004401cea213ffc92100010901000127fffff3b88013ffc80a2200122800009a8102001de012000aaa3e00488012004f606201880a1001b8bd0201830bfffe88801200480a520012280000b90102001de012004c203e000da012000d80360009210000c90100001de01200810bfff258801200cde01200881c3e0068801200c|@4485,131071|212,4,@349 292,4,I152 5675:S45|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e28322964656661756c742d283129 5676:C2,728|9e13e002f606201880a1001b8bd020188410000fae10000dac100008901000167ffd7f6c01000000aa100008901000167ffdd50001000000de05e000da03e008d8036000c4213ffcee213ff8ec213ff4d2213ff0d4213fecea213fe8d0213fe488013fe480a3200132800005d40320009610200110800017de012014ec032004d2012004d002a0047ffe03580100000080a220012280000b981000168c21a0088b196008ba10200196100006fa21bffcea02a000ea22e00010800006de012014f606201880a1001b8bd0201830bfffe68c21a0148b196014ba10200482100006fa21bffc1b3f02e69a036164da206000d803fffcd820600cd603e000d6206008d4012000d42060048c21a0188b196018ba10200592100006fa21bffc113f02e6900223dcd0226000c4012010c4226010ee01200cee22600cc2226008ec02e00cec226004ea02e008da056000c2213ffcd2213ff888013ff880a3600132800005d60360009810200110800017d0213ffcd4036004d201200cd002e0047ffe031b0100000080a220012280000b9a10000a8c21a0088b196008ba10200198100006fa21bffcd202e000d223200010800006d0213ffcf606201880a1001b8bd0201830bfffe6d0213ff8808b20011280001788013ff88c21a0148b196014ba10200490100006fa21bffc053f02e88400a1ecc4222000ee012008ee22200cec032000ec222008ea01201cea2220049e01200082103ffdc223e0009a012000d0236004108000238c21a00cd2012018d0012020da0120244000027d01000000c401201c80a0a001328000098c21a014ae012000ac103ffdec25e000aa012000d0256004108000138c21a00c8b196014ba102004ae100006fa21bffc2d3f02edac05a3d0ec25e000d025e00cc425e008ea01200cea25e004a8012000a6103ffde6252000a4012000ee24a0048c21a00c8b19600cba10200290100006fa21bffce2012000e2222000e0012004e0222004de01202881c3e0068801202c|@5725,131071|32,5,@1613 48,5,@2128 136,5,@2452 228,4,@5677 284,4,@5686 380,5,@2452 488,4,@5690 564,5,@5692 632,4,@5722 5677:C2,416|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d2213ff4fa026000fa213ff0fa026004fa213fecd403600c92102001da036008f40360009fc6a00088013fecc402200080a0a0013280004fee022004ee012004b825e001b9172004ac072001ea0220048c21a00c8b19600cba10200290100006fa21bffce8012000e8222004ec2220009a100015f40360009fc6a000010000008c21a0148b196014ba102004a6100006fa21bffca4102005e424e00cd024e008233f02e6a2046320e224e004a0102011e024e000de012004b823e001b917200482072001da01200ce6213ffcc2213ff8d2036004113f02e6900223687ffd3e7d88013ff8133f02e6920263747ffd3e79010000008c21a0248b196024ba10200898100006fa21bffc96102001d623201c94102001d423201892102001d223201484102009c4232010ae102001ee23200cec012000ec232008d0232004ea012004ea2320008c21a00c8b19600cba10200290100006fa21bffcd8222004a8103fe5e8222000e601201881c4e0068801201cd00120089a100017de012010f403600081c6a00488012014|@5685,131071|184,4,@5678 236,4,@5683 244,5,@496 252,4,@5684 260,5,@496 5678:O2|@5679,0 5679:O2|10,@5680 5680:O2|@623,@5681 5681:O2|@5682,0 5682:O5|-5,-2,1,0,0 5683:S3|65712d 5684:S5|282e2e2e29 5685:S78|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329657175616c697479466f72436f6e737472756374696f6e283329676574417267283229 5686:C2,1080|9e13e002f606201880a1001b8bd020188c21a00c8b19600cba10200284100006fa21bffcd220a004d020a00080a2e00132800046b8226001d0213ffcd0213ff8d0213ff4d0213ff0d0213fecb8226001ba22a00188013fec811f401c32800019d6036004d6036004b822e001ba222001b91f401c94072001b91f2004920720019001200084103fedc42220009401200090102001d022a0048401200094102001d420a00890012000d222200c8401200094102001d420a010108000148c21a018b822e001ba222001b91f401c920720019001200084103fedc422200090012000d42220048401200094102005d420a00890012000d222200c8401200094102001d420a0108c21a0188b196018ba10200590100006fa21bffcd2012000d2222000c4012004c4222004d4012008d4222008ee01200cee22200cd4012010d422201081c3e00688012014ba22a001811f401c2280002cae10000fee036004b825e001ba222001b91f401c960720018c21a0188b196018ba10200592100006fa21bffc90102001d0226010d622600c96102005d6226008d422600494103fedd4226000c4213ffcda213ff8de213ff4d2213ff0d003600c9a013ffc400000a788013ff0921000088c21a0148b196014ba10200490100006fa21bffc84102005c422200cee012000ee222008d2222004ac102011ec222000ea01200481c5600688012010ac10000daa100008d005a0107ffdfffd01000000ee213ffcec213ff8ea213ff4c4213ff0e805a00ca610200588013ff0808d200132800039a4100013808a200132800036a410001380a4e0012280002ba2102001e0052000de04200080a3e00d32800023a21020018c21a00c8b19600cba10200282100006fa21bffcda042008da206004d8042004d8206000d6022000d402e00080a2a00d32800012a21020018c21a00c8b19600cba10200292100006fa21bffcc402e008c4226004ee02e004ee226000ec022004901000017ffdccfb01000000a21000081080000aa6100011ec02200410800007a6100011ec02200410800004a6100011ec022004a610001190100016e8052004f606201880a1001b8bd0201830bfffc780a4a0012280001ce4012008e4012008e2012004e004a004b8242001ba246001b91f401c9e072001b91f2008820720018c21a0188b196018ba10200590100006fa21bffc9a102001da222010c222200c98102001d822200896102001d622200494103fedd4222000d201200c81c2600688012010e2012004e004a004b8242001ba246001b91f401c9e072001b91f2004820720018c21a0188b196018ba1020059a100006fa21bffc98102001d8236010c223600c96102001d623600894102001d423600492103fedd2236000da213ffcd004a00c9a01200c4000004588013ffc841000088c21a0148b196014ba10200490100006fa21bffcae102005ee22200cec012000ec222008c4222004aa102011ea222000e801201081c5200688012014|@5689,131071|440,5,@5687 524,5,@2438 716,5,@2088 1008,5,@5688 5687:C2,148|9e13e002f606201880a1001b8bd0201880a2200132800005c4037ffc9010200181c3e00601000000de213ffcda213ff8fa022004fa213ff4d2036000d0022000da00a008f40360009fc6a00088013ff4d0213ffcd0012000da0120047fffffe988013ffc8c21a00c8b19600cba102002ae100006fa21bffcd025e004ec012000ec25e00090100017ea01200c81c5600688012010|@586,131071| 5688:C2,148|9e13e002f606201880a1001b8bd0201880a2200132800005c4037ffc9010200181c3e00601000000de213ffcda213ff8fa022004fa213ff4d2037ff4d0022000da00a008f40360009fc6a00088013ff4d0213ffcd0012000da0120047fffffe988013ffc8c21a00c8b19600cba102002ae100006fa21bffcd025e004ec012000ec25e00090100017ea01200c81c5600688012010|@586,131071| 5689:S83|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329657175616c697479466f72436f6e737472756374696f6e2833297265637572736976654571283429 5690:C2,48|9e13e002f606201880a1001b8bd02018d6036004d4036008d2022004d0022000da03600cf403600081c6a00401000000|@5691,131071| 5691:S86|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329657175616c697479466f72436f6e737472756374696f6e2833297265637572736976654571283129283129 5692:C2,1212|9e13e002f606201880a1001b8bd020188410000fae10000dac100008901000167ffd7c6201000000aa100008901000167ffdd1f601000000de05e000da03e014d8036000b8232001b917200496072001d6236000d80360008c21a00c8b19600cba10200296100006fa21bffcea22e004d822e000ea03e008e80560008c21a00c8b19600cba102002a6100006fa21bffce824e004d624e000e625600096100008901000167ffdfea801000000c4213ffcee213ff8d2213ff4d6213ff0d8213fecd0213fe8ac10200188013fe880a2200132800005b825a001aa1000161080000ae8012010b9172004a8072001d0022004ac100014f606201880a1001b8bd0201830bffff3e6052000de04e00cb823e001b91720049a07200180a5600132800005b82360019810000d108000058c21a018b9172004980720018c21a0188b196018ba10200596100006fa21bffc133f02e992026370d222e000da22e010d0053ffcd022e00cc4012000c422e008ea22e004d6213ffcd8213ff8ee01200c808de0011280003388013ff8d205e00480a260013280001aea213ffca4100015a210000dd005e000400001a90100000080a2200122800006e4213ffc2d3f002dac05a1501080000ae4213ffce2213ff8d00120149a01201c400001ec88013ff8ac10000810800030ec213ffce2213ff888013ff81080002cec213ffcda213ff8901000179a01201c400001e088013ff88c21a0148b196014ba102004ac100006fa21bffcd025a00c113f002d90022150d025a008053f02ed8400a1fcc425a004ae102009ee25a00010800017ec213ffcea213ffcda213ff8901000179a01201c400001ca88013ff88c21a0148b196014ba102004ac100006fa21bffcd025a00c2b3f002daa056150ea25a008293f02eda80521fce825a004a6102009e625a000ec213ffcd2012018113f02e6900223687ffd3bc288013ffc133f02ed9202621c7ffd3bbe010000008c21a0248b196024ba102008a4100006fa21bffca2102001e224a01ca0102001e024a0189e103ffdde24a01482102009c224a0109a102001da24a00cd801200cd824a008d024a004d6012000d624a0008c21a00c8b19600cba10200294100006fa21bffce422a00492103fe5d222a000c401200880a0a00132800005d4213ffc9010000a10800029c2012024d201201c113f02e6900223687ffd3b9688013ffc133f02ed920262287ffd3b92010000008c21a0248b196024ba102008ae100006fa21bffcac102001ec25e01caa102001ea25e018a8103ffde825e014e601200ce625e010a4102001e425e00ce2012008e225e008d025e004e0012000e025e0008c21a00c8b19600cba10200290100006fa21bffcee2220049e103fe5de22200088012004c2012024da006000d8036010d60320008c21a0148b196014ba10200494100006fa21bffc92102001d222a00cd022a008d0012018d022a00484103ff1c422a0008c21a00c8b19600cba102002ae100006fa21bffcac102001ec25e004d425e00080a5e00132800005ee213ffcaa10000b10800009ea2320009010000b9a012028400003cd88013ffcaa10000888012004ea232000e80060008c21a0108b196010ba10200390100006fa21bffc273f02eda604e2c0e6222000e4012018e4222008e205200ce2222004e001202881c420068801202c|@5721,131071|32,5,@1613 48,5,@2128 164,5,@2438 332,4,@5693 420,5,@5701 440,4,@622 468,5,@5703 516,5,@5703 548,4,@622 560,4,@5714 604,5,@5703 636,4,@622 648,4,@5714 676,4,@5683 684,5,@496 692,4,@5716 700,5,@496 852,4,@5683 860,5,@496 868,4,@5717 876,5,@496 1128,5,@5718 1172,4,@5719 5693:C2,84|9e13e002f606201880a1001b8bd02018d0213ffcda213ff8c4036004b820a001ba10200088013ff8b91f401cae072001de213ffcd2036008901000179a0120044000000c88013ffcec01200081c5a0068801200c|@5700,131071|64,5,@5694 5694:C2,292|9e13e002f606201880a1001b8bd0201880a2600132800008c4026000c4037ffcd0036000da00a00cf403600081c6a00401000000ee00a00080a5e00d32800034de213ffc8c21a00c8b19600cba102002ac100006fa21bffcea00a008ea25a004e800a004e825a000a610000fa410000da2100008e002600492100016d004a0007ffdca8d0100000080a2200122800018b8246001de04bffc8c21a0108b196010ba10200382100006fa21bffc1b3f02ea9a036120da206000e2206008d803e010d82060048c21a00c8b19600cba10200290100006fa21bffcc222200496103ffdd622200081c4e00601000000b91720049e072001921000109010000f9a1000129e10001310bfffc1f6062018113f02ea900221f8f40620209fc6a00088013ffc90102001|@5699,131071|128,5,@2088 172,4,@5695 268,4,@5697 5695:C2,92|9e13e002c4022000ee036004b825e001ba20a001b91f401cac0720018c21a0188b196018ba10200590100006fa21bffc84102001c4222010ec22200cac102005ec222008c4036008c4222004ac103fedec22200081c3e00601000000|@5696,114849| 5696:S88|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329657175616c697479466f7244617461747970652832296e6577547646756e28312966696e645476283229283129 5697:O3|@24,@397,@5698 5698:S27|66696e6454763a206e6f7420612074797065207661726961626c65 5699:S85|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329657175616c697479466f7244617461747970652832296e6577547646756e28312966696e645476283229 5700:S76|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329657175616c697479466f7244617461747970652832296e6577547646756e283129 5701:C2,204|9e13e002f606201880a1001b8bd02018c40220048088a0013280002b90102001ee00a00080a5e0053280002590102001ac10000fea022008901000157ffe2b2e0100000080a220012280001b90102001901000157ffe2b3d01000000a81000167fffe2f001000000808a20012280000aa6100008e8213ffc113f002990022374f40620209fc6a00088013ffca6102001a6100008de04e0049010000f9e1000141b0000859a0362f8f403600081c6a0040100000081c5a0060100000081c3e0060100000081c3e00601000000|@5702,129201|60,5,@2733 84,5,@2735 96,5,@5528 120,4,@545 160,4,I105 5702:S74|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329657175616c697479466f7244617461747970652832296973456e756d283129 5703:C2,668|9e13e002f606201880a1001b8bd0201880a2200132800006c4022000113f002f9002208c81c3e00601000000a410000fa210000de000a004c200a008d600a00cd4022004d00220007fffff9f0100000080a2200122800007e4213ffc9010000a9a1000119e10001210bfffe8f6062018e2213ff8e0213ff4c2213ff0d6213fecd4213fe8d2047fe4901000017fffdea888013fe8d0213ffcd201200c808a60011280007988013ffcc402600080a0a005328000709a012018ec02200080a5a0153280000980a5bff592100008901020017ffe794a01000000ae100008108000158c21a014328000098c21a01092100008901020017ffe794101000000ae1000081080000c8c21a0148b196010ba102003ae100006fa21bffcaa102001ea25e008d025e004a8102019e825e0008c21a0148b196014ba102004a6100006fa21bffca4102005e424e00cee24e008233f002da2046144e224e004a0102011e024e000de012000da03e00080a360153280000a80a37ff5e6213ffc9210000f901020017ffe791e88013ffc82100008108000188c21a0143280000a8c21a010e6213ffc9210000f901020017ffe791488013ffc821000081080000e8c21a0148b196010ba10200382100006fa21bffc98102001d8206008de20600496102019d6206000e6213ffc88013ffc8c21a0148b196014ba10200494100006fa21bffc92102005d222a00cc222a008113f02e690022344d022a00484102011c422a000d4213ffcd0012008da0120187fffff7688013ffcae1000088c21a0148b196014ba10200490100006fa21bffcee22200cec012000ec222008ea012004ea222004a8102009e8222000e601202081c4e006880120244000001201000000ee01201881c5e0068801201c9a0120184000000c01000000c401201881c0a0068801201c|@5713,131071|28,4,@660 72,5,@5701 140,5,@5465 208,5,@3251 244,5,@3251 332,4,@621 384,5,@3251 424,5,@3251 520,4,@5681 624,5,@5704 648,5,@5704 5704:C2,856|9e13e002f606201880a1001b8bd02018c4037ffcde213ffcda213ff8d200bfecd0037ff07ffe75ad88013ff8ee012000ec05fffc8c21a0108b196010ba102003aa100006fa21bffc293f02eca8052248e8256000e605fff4e6256008e405bfe4e42560048c21a00c8b19600cba102002a2100006fa21bffc213f02eda004201ce0246000ea2460048c21a00c8b19600cba1020029e100006fa21bffc033f02ed820060ccc223e000ea23e0048c21a00c8b19600cba1020029a100006fa21bffcd805bff0d8236004e42360008c21a00c8b19600cba10200296100006fa21bffcde22e004e222e000d405bffcda213ffcd202a000d405bfe8841000099210000b9a100002f40360009fc6a00088013ffcec02200080a5a0013280000b01000000ea022004d00120009a100015f40360009fc6a00001000000ae10000810800009e8012004113f02ed90022114f40620209fc6a00001000000ae102001e8012004e6053fe8e204e00080a460153280000a80a47ff5ee213ffc92100013901020017ffe787088013ffca4100008108000188c21a0143280000a8c21a010ee213ffc92100013901020017ffe786688013ffca41000081080000e8c21a0148b196010ba102003a4100006fa21bffca0102001e024a008e624a0049e102019de24a000ee213ffc88013ffc8c21a0148b196014ba10200482100006fa21bffc9a102005da20600ce4206008193f002d98032144d820600496102011d6206000d4012008d202bfe8c402600080a0a0153280000880a0bff5c2213ffc901020017ffe784188013ffc108000168c21a014328000088c21a010c2213ffc901020017ffe783988013ffc1080000e8c21a0148b196010ba10200390100006fa21bffcae102001ee222008d2222004ac102019ec222000c2213ffc88013ffc8c21a0148b196014ba102004aa100006fa21bffca8102005e825600cd0256008273f02e6a604e344e6256004a4102011e42560008c21a0148b196014ba102004a2100006fa21bffc213f002fa004208ce024600cde012004de246008ea24600482102009c2246000da01200ce2213ffcd0037fecda037ffc7ffffe8e88013ffc981000088c21a0148b196014ba10200490100006fa21bffcd822200cd6012000d6222008d4012004d422200492102009d2222000c401201481c0a00688012018|@5712,131071|36,5,@3244 72,4,@5705 120,4,@5707 156,4,@5709 324,4,@5710 384,5,@3251 424,5,@3251 520,4,@621 572,5,@3251 604,5,@3251 696,4,@5681 736,4,@660 784,5,@5703 5705:C2,336|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d0213ff4d4213ff092100008d00360087fffdd3688013ff0ee02200080a5e0153280000980a5fff592100008901020097ffe77e1010000008410000810800015e8012008328000098c21a01092100008901020097ffe77d801000000841000081080000ce80120088b196010ba10200384100006fa21bffcac102009ec20a008d020a004aa102019ea20a000e8012008e6012004e4052004b824a001ba24e001b91f401ca20720018c21a0188b196018ba102005a0100006fa21bffc9e102001de242010e224200c82102005c2242008da012000da24200498103fedd82420008c21a00c8b19600cba10200296100006fa21bffc94102001d422e004e022e0008c21a0148b196014ba10200490100006fa21bffc92102005d222200cc4222008d622200484102011c4222000ee01200c81c5e00688012010|@5706,131071|40,5,@5465 72,5,@3251 108,5,@3251 5706:S93|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329657175616c697479466f72446174617479706528322970726f63657373436f6e737472732831296465737472756374283329 5707:C2,44|9e13e002f606201880a1001b8bd0201894103ffdd2022004d0022000da036004f403600081c6a00401000000|@5708,131071| 5708:S96|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329657175616c697479466f72446174617479706528322970726f63657373436f6e737472732831296465737472756374283129283129 5709:C2,44|9e13e002f606201880a1001b8bd0201894103ff9d2022004d0022000da036004f403600081c6a00401000000|@5708,131071| 5710:O3|@24,@397,@5711 5711:S21|6170706c7945713a2077726f6e6720726573756c74 5712:S84|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329657175616c697479466f72446174617479706528322970726f63657373436f6e737472732831292f32 5713:S82|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329657175616c697479466f72446174617479706528322970726f63657373436f6e73747273283129 5714:O4|4,@5680,@5715,1 5715:O2|-3,I251 5716:S3|283229 5717:S3|283129 5718:C2,112|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffcd0037fd481c3e00601000000da213ff8fa022000fa213ff4d00220047ffffff288013ff48c21a00c8b19600cba1020029e100006fa21bffcd023e004da012000da23e0009010000fde01200881c3e0068801200c|@1966,161| 5719:C2,92|9e13e002c4022000ee036004b825e001ba20a001b91f401cac0720018c21a0188b196018ba10200590100006fa21bffc84102001c4222010ec22200cac102005ec222008c4036008c4222004ac103fedec22200081c3e00601000000|@5720,114849| 5720:S68|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329657175616c697479466f724461746174797065283229283129 5721:S65|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329657175616c697479466f724461746174797065283229 5722:C2,132|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d0213ff4da03600cf40360009fc6a00088013ff4c4012004d0213ffcd000a0089a0120084000001988013ffcae1000088c21a0148b196014ba10200490100006fa21bffcac102005ec22200cea012000ea222008ee222004a8102011e8222000e601200c81c4e00688012010|@5724,131071|60,5,@5723 5723:C2,148|9e13e002f606201880a1001b8bd0201880a2200132800005c4037ffc9010200181c3e00601000000de213ffcda213ff8fa022004fa213ff4d2037ff8d0022000da00a004f40360009fc6a00088013ff4d0213ffcd0012000da0120047fffffe988013ffc8c21a00c8b19600cba102002ae100006fa21bffcd025e004ec012000ec25e00090100017ea01200c81c5600688012010|@586,131071| 5724:S72|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329657175616c697479466f72436f6e737472756374696f6e283329283129 5725:S69|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329657175616c697479466f72436f6e737472756374696f6e283329 5726:C2,124|9e13e002f606201880a1001b8bd020188c21a0148b196014ba10200484100006fa21bffc2f3f02eeae05e258ee20a000ee037ffcee20a00cec036000ec20a008d020a0048c21a00c8b19600cba10200290100006fa21bffc2b3f02efaa0562e4ea222000c4222004d2037ff8da05a004f403600081c6a00401000000|@5736,131071|36,4,@5727 88,4,@5734 5727:C2,68|9e13e002f606201880a1001b8bd02018da213ffcd4213ff8d2213ff4d0213ff0de213fec92102001d00360049a013ffc4000000c88013fecc401200081c0a00688012014|@5733,131071|48,5,@5728 5728:C2,404|9e13e002f606201880a1001b8bd0201880a2200132800006c4022000113f002d9002215081c3e006010000008c21a0108b196010ba102003ae100006fa21bffc2d3f02efac05a068ec25e000d225e008ec037ff4ec25e0048c21a0108b196010ba102003aa100006fa21bffc293f02efa8052188e8256000d2256008e8037ff8e8256004e60360008c21a00c8b19600cba102002a4100006fa21bffcea24a004ee24a000de213ffcda213ff8d2213ff4fa022004fa213ff0fa037ffcfa213fecd404e00c92100012d000a004da04e008f40360009fc6a00088013fece002200080a420013280000b01000000de022004d00120009a10000ff40360009fc6a00001000000a210000810800009c2012008113f02ed90022114f40620209fc6a00001000000a2102001c2012008b8206001b91720049a072001e2213ffc9210000dd0012004da01200c7fffffae88013ffc981000088c21a0148b196014ba10200490100006fa21bffc173f002f9602e08cd622200cd8222008d4012000d422200492102009d2222000c401201481c0a00688012018|@5732,131071|28,4,@622 64,4,@5729 108,4,@5731 272,4,@5710 360,4,@660 5729:C2,176|9e13e002f606201880a1001b8bd02018de213ffcfa036008fa213ff8da036004f40360009fc6a00088013ff8c402200080a0a0153280000980a0bff592100008d0012000de012004353f0164b406a21481c6a0048801200832800009ae10000892100008d0012000de012004353f0164b406a21481c6a004880120088c21a0108b196010ba10200390100006fa21bffcec012000ec222008ee222004aa102019ea222000e801200481c5200688012008|@5730,131071|72,4,@3251 108,4,@3251 5730:S73|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b65457128332965715475706c65283329636f6d62696e65456e7472696573283229283129 5731:C2,176|9e13e002f606201880a1001b8bd02018de213ffcfa036008fa213ff8da036004f40360009fc6a00088013ff8c402200080a0a0153280000980a0bff592100008d0012000de012004353f0164b406a21481c6a0048801200832800009ae10000892100008d0012000de012004353f0164b406a21481c6a004880120088c21a0108b196010ba10200390100006fa21bffcec012000ec222008ee222004aa102019ea222000e801200481c5200688012008|@5730,131071|72,4,@3251 108,4,@3251 5732:S70|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b65457128332965715475706c65283329636f6d62696e65456e7472696573283229 5733:S53|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b65457128332965715475706c65283329 5734:C2,44|9e13e002f606201880a1001b8bd02018d4022008d2022004d0022000da036004f403600081c6a00401000000|@5735,131071| 5735:S53|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b65457128332965715475706c65283129 5736:S45|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b6545712833292f34 5737:S43|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329 5738:O1|@5739 5739:C2,20|9e13e002113f02e4900221fc81c3e00601000000|@5740,129|4,4,@5668 5740:S48|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e283229726573756c74436f64652d283129 5741:O2|@1032,@5742 5742:O2|@5743,0 5743:O3|6,@623,1 5744:S8|657175616c697479 5745:S34|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e283229 5746:C2,36|9e13e00280a23ff532800005901020019010200581c3e0060100000081c3e00601000000|@5747,129| 5747:S8|4e6f74457175616c 5748:C2,192|9e13e002f606201880a1001b8bd02018de213ffcd0213ff8d2213ff4d6213ff0901000097ffe4a2288013ff04000002c010000008c21a0188b196018ba10200584100006fa21bffc2f3f02f2ae05e384ee20a000ec012004ec20a010ea012008ea20a00ce8012000e820a008e6012014e620a004d0213ffc9410000292100008901000151b3f00e89a0363007ffdf86188013ffca4100008d00120007ffdca4201000000e2012014e4246000d024600490102001e001201081c420068801201c|@5769,131071|36,5,@2957 44,5,@5749 72,4,@5757 132,4,@2449 140,5,@2450 156,5,@2128 5749:C2,2288|9e13e002f606201880a1001b8bd02018ae10000fac100008901000167ffd74440100000080a220012280020190100016aa100017901000167ffd744e0100000084100008d200a004d000a0007ffdc7eb01000000ae100002ac100008901000167ffdc9b00100000080a22001228001ec01000000901000167ffdc9c001000000ea213ffcee213ff8d0213ff488013ff4808a20013280001baa102001d2022000c4022004113f002f900222e47ffd746f01000000ae100008901000097ffd746b01000000ac10000292100008901000177ffdf86c0100000080a220012280000590100016aa1020051080000780a56001f606201880a1001b8bd0201830bfffe580a5600122800045ea012000113f002f900222e47ffdc9ed01000000d0213ffcd0213ff8aa100008113f002f900222e47ffd744e88013ff87ffd74610100000080a22001228000129e0120008c21a0088b1960083b100000ba0760019e100006fa21bffc033f002f820062e4c223e0009a01200098103ffdd823600092012000de226004108000098c21a00c82102001c223e0009a012000193f002f980322e4d82360048c21a00c8b19600cba10200292100006fa21bffcd0012000d0226000c4012004c42260048c21a0108b196010ba10200390100006fa21bffcd2222008ea222004ae102001ee2220007ffd744e0100000092100008d001200c7ffd73f001000000113f002f900222e4ec01201081c5a00688012014808d600132800018a8102001113f00e9900222b07ffd740f0100000082100008d00560007ffd740b0100000092100008901000017ffdf80d0100000080a2200122800005ea056004a81020051080000780a52001f606201880a1001b8bd0201830bfffe880a5200122800045e8012000113f00e9900222b07ffdc98e01000000d0213ffcd0213ff8a8100008113f00e9900222b07ffd73ef88013ff87ffd74020100000080a22001228000129e0120008c21a0088b1960083b100000ba0760019e100006fa21bffc033f00e9820062b0c223e0009a01200098103ffdd823600092012000de226004108000098c21a00c82102001c223e0009a012000193f00e9980322b0d82360048c21a00c8b19600cba10200292100006fa21bffcd0012000d0226000c4012004c42260048c21a0108b196010ba10200390100006fa21bffcd2222008e8222004ae102001ee2220007ffd73ef0100000092100008d001200c7ffd739101000000113f00e9900222b0ec01201081c5a00688012014808d200132800018a6102001113f02f2900222e47ffd73b00100000082100008d00520007ffd73ac0100000092100008901000017ffdf7ae0100000080a2200122800005e8052004a61020051080000780a4e001f606201880a1001b8bd0201830bfffe880a4e00122800045e6012000113f02f2900222e47ffdc92f01000000d0213ffcd0213ff8a6100008113f02f2900222e47ffd739088013ff87ffd73a30100000080a22001228000129e0120008c21a0088b1960083b100000ba0760019e100006fa21bffc033f02f2820062e4c223e0009a01200098103ffdd823600092012000de226004108000098c21a00c82102001c223e0009a012000193f02f2980322e4d82360048c21a00c8b19600cba10200292100006fa21bffcd0012000d0226000c4012004c42260048c21a0108b196010ba10200390100006fa21bffcd2222008e6222004ae102001ee2220007ffd73900100000092100008d001200c7ffd733201000000113f02f2900222e4ec01201081c5a00688012014808ce00132800018a4102001113f02f2900223187ffd73510100000082100008d004e0007ffd734d0100000092100008901000017ffdf74f0100000080a2200122800005e604e004a41020051080000780a4a001f606201880a1001b8bd0201830bfffe880a4a00122800045e4012000113f02f2900223187ffdc8d001000000d0213ffcd0213ff8a4100008113f02f2900223187ffd733188013ff87ffd73440100000080a22001228000129e0120008c21a0088b1960083b100000ba0760019e100006fa21bffc033f02f282006318c223e0009a01200098103ffdd823600092012000de226004108000098c21a00c82102001c223e0009a012000193f02f298032318d82360048c21a00c8b19600cba10200292100006fa21bffcd0012000d0226000c4012004c42260048c21a0108b196010ba10200390100006fa21bffcd2222008e4222004ae102001ee2220007ffd73310100000092100008d001200c7ffd72d301000000113f02f290022318ec01201081c5a00688012014808ca00132800018a2102001113f002f900223447ffd72f20100000082100008d004a0007ffd72ee0100000092100008901000017ffdf6f00100000080a2200122800005e404a004a21020051080000780a46001f606201880a1001b8bd0201830bfffe880a460012280004501000000113f002f900223447ffdc87101000000d0213ffcd0213ff8a2100008113f002f900223447ffd72d288013ff87ffd72e50100000080a22001228000129e0120008c21a0088b1960083b100000ba0760019e100006fa21bffc033f002f82006344c223e0009a01200098103ffdd823600092012000de226004108000098c21a00c82102001c223e0009a012000193f002f98032344d82360048c21a00c8b19600cba10200292100006fa21bffcd0012000d0226000c4012004c42260048c21a0108b196010ba10200390100006fa21bffcd2222008e2222004ae102001ee2220007ffd72d20100000092100008d001200c7ffd727401000000113f002f90022344ec01201081c5a00688012014113f006590022010e201200881c460068801200c113f00659002201081c56006010000007ffdc7e60100000080a220012280002a01000000aa100017901000167ffdc7f001000000e8022000d00220087ffdc80101000000a6100015a4100008901000127ffdf427010000007ffdc5f50100000080a2200122800005901000129010001281c4e006010000007ffdf41d01000000a2100008901000127ffdf4d80100000082100013921000147ffdf75401000000c2213ffc9410200592100008901000117ffdf79b88013ffcde01200010bffdcb88012004113f00659002201081c5e00601000000|@5756,131071|28,5,@1606 56,5,@1607 76,5,@2100 96,5,@2120 120,5,@2122 164,4,@698 172,5,@1613 188,5,@1613 208,5,@2452 268,4,@698 276,5,@2128 296,4,@698 304,5,@1613 312,5,@1615 356,4,@698 408,4,@698 492,5,@1617 508,5,@1608 516,4,@698 548,4,@2456 556,5,@1613 572,5,@1613 588,5,@2452 648,4,@2456 656,5,@2128 676,4,@2456 684,5,@1613 692,5,@1615 736,4,@2456 788,4,@2456 872,5,@1617 888,5,@1608 896,4,@2456 928,4,@5750 936,5,@1613 952,5,@1613 968,5,@2452 1028,4,@5750 1036,5,@2128 1056,4,@5750 1064,5,@1613 1072,5,@1615 1116,4,@5750 1168,4,@5750 1252,5,@1617 1268,5,@1608 1276,4,@5750 1308,4,@5753 1316,5,@1613 1332,5,@1613 1348,5,@2452 1408,4,@5753 1416,5,@2128 1436,4,@5753 1444,5,@1613 1452,5,@1615 1496,4,@5753 1548,4,@5753 1632,5,@1617 1648,5,@1608 1656,4,@5753 1688,4,@704 1696,5,@1613 1712,5,@1613 1728,5,@2452 1788,4,@704 1796,5,@2128 1816,4,@704 1824,5,@1613 1832,5,@1615 1876,4,@704 1928,4,@704 2012,5,@1617 2028,5,@1608 2036,4,@704 2056,4,@1611 2076,4,@1611 2092,5,@2124 2120,5,@2125 2136,5,@2126 2156,5,@2429 2164,5,@2102 2196,5,@2429 2212,5,@2438 2228,5,@2462 2252,5,@2464 2272,4,@1611 5750:O6|@5752,0,0,0,@700,@5751 5751:O2|-1,@123 5752:S4|776f7264 5753:O6|@5755,0,0,0,@700,@5754 5754:O2|-1,@124 5755:S4|63686172 5756:S48|545950455f5452454528292e74797065436f6e73747246726f6d4f7665726c6f61642832297072656654797065283129 5757:C2,168|9e13e002f606201880a1001b8bd02018de213ffcda213ff8921020f5d003600c1b0000839a0360d8f40360009fc6a00088013ff880a2200122800007c4012000113f02e490022240c401200481c0a00688012008d000a00c1b3f01399a0361807ffe466a010000004000001701000000ee012000ec05e004ec213ffcd605e00894100008d205e00cd005e0104000004f88013ffc113f002b9002225cea01200481c5600688012008|@5768,131071|32,4,I24 64,4,@5671 88,4,@2946 96,5,@2947 104,5,@5758 140,5,@5760 148,4,@581 5758:C2,160|9e13e002f606201880a1001b8bd0201880a2200132800006c402200411000083900223d881c3e0060100000080a0a00132800008ee022000ee022000d005e000353f00bab406a2a081c6a00401000000ac10000fd005e0007ffdc78001000000ec213ffcc4213ff8921020bd7ffd31e688013ff8d0213ffcd00120007fffffe188013ffc92100008d0012000de012008353f0025b406a04c81c6a0048801200c|@5759,131071|28,4,I48 64,4,@2128 88,5,@2128 108,5,@496 144,4,@496 5759:S64|56414c55455f4f505328292e6765744f7665726c6f6164496e7374616e63652836296e6f74466f756e642831296d616b654f7665726c6f61644c697374283129 5760:C2,468|9e13e002f606201880a1001b8bd02018de213ffcd2213ff8d4213ff4d6213ff07ffe470f88013ff0c4012000d0213ffc133f00d3920262f4d000a0241b3f00389a0360407ffd44b288013ffcae100008d00120007ffd71590100000080a22001228000318c21a018ac100017d00120007ffd716301000000d201200c113f02f39002233c7ffd319f010000008c21a00c8b19600cba102002aa100006fa21bffc293f02f3a8052368e8256000d0256004e6012014e4012004e204a004e2212014e004a008de012010e0212010c204a00cc221200cda04a010da212008d804a014d8212004d604a018d6212000d404a01cd4213ffcd204a020d2213ff8d004a024d0213ff4d604a000941020059210001390100015353f0042b406a05081c6a00488013ff48b196018ba102005ac100006fa21bffc2b3f02f3aa0563acea25a000e801200ce825a010e6012008e625a00ce4012000e425a008ee25a004e2012014e0012004de042004de212014c2042008da012010c2212010d804200cd821200cd6042010d6212008d4042014d4212004d2042018d2212000d004201cd0213ffcc4042020c4213ff8ee042024ee213ff4d60420009410200592100011901000169e10000d353f0042b406a05081c6a00488013ff4|@5767,131071|32,5,@2957 48,4,@2272 60,4,@1112 68,5,@1114 84,5,@1606 112,5,@1607 124,4,@5761 132,5,@496 160,4,@5762 276,4,@1265 308,4,@5763 452,4,@1265 5761:S34|556e61626c6520746f207265736f6c7665206f7665726c6f6164696e6720666f7220 5762:C2,40|9e13e002f606201880a1001b8bd02018c402200cd00360049a100002f403600081c6a00401000000|@1264,131071| 5763:C2,216|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d0213ff4c4022018113f00bf900223589a100002f40360009fc6a00088013ff4ee012000ec012004fa05e00cfa213ffc133f02f4920260a0d005a0107ffd311388013ffcea012008d205600c7ffd310f01000000133f02f4920260bc7ffd310b01000000da012000f40360009fc6a00001000000e8012008901020017ffdc00c01000000a6102005e6213ffc96100008d4012004d2052004d00520087ffdc14888013ffce401200490102001da04a008de01200cf403600081c6a00488012010|@5766,131071|32,4,@2166 72,4,@5764 84,5,@496 100,5,@496 108,4,@5765 116,5,@496 148,5,@2086 180,5,@2097 5764:S18|206973206f7665726c6f61646564206f6e20 5765:S9|20627574206e6f7420 5766:S31|545950455f5452454528292e6f7665726c6f61644572726f72283529283129 5767:S28|545950455f5452454528292e6f7665726c6f61644572726f72283529 5768:S45|56414c55455f4f505328292e6765744f7665726c6f6164496e7374616e63652836296e6f74466f756e64283129 5769:S34|56414c55455f4f505328292e6765744f7665726c6f6164496e7374616e6365283629 5770:C2,36|9e13e00280a2200132800005901020019010200581c3e0060100000081c3e00601000000|@5771,129| 5771:S11|4164644f7665726c6f6164 5772:C2,200|9e13e002f606201880a1001b8bd02018de213ffcda213ff888013ff8de02200080a3e00d3280000a84100008d2022008d00220047ffdc3f201000000f606201880a1001b8bd0201830bffff5da012000c4213ffcd2037ff888013ffcc402600080a0a00d3280000d90100009de026004da0260089210000d9010000f7ffdc3e00100000092100008f606201880a1001b8bd0201830bffff29e1000088c21a00c8b19600cba10200290100006fa21bffcde222004da012000da222000de01200881c3e0068801200c|@5773,65699|52,5,@2100 124,5,@2100 5773:S40|56414c55455f4f505328292e6170706c7946756e6374696f6e2836293c7061747465726e3e2d2f32 5774:O2|@799,@799 5775:C2,96|9e13e0028c21a00c8b19600cba10200284100006fa21bffcd020a00490103ff5d020a0008c21a0148b196014ba10200490100006fa21bffc2f3f02f4ae05e370ee222000c422200cc4036008c4222008ee036004ee22200481c3e00601000000|@5786,98465|56,4,@5776 5776:C2,232|9e13e002f606201880a1001b8bd02018808a200132800004b8102004f8022000b92f200284072001811f201024800017de213ffcde213ffcda213ff8d0213ff4fa03600cfa213ff094102011921020017ffd6d1088013ff0133f02f5920260741b0000839a0360d8f40360009fc6a0000100000080a220012280000eee01200810800009ec012008da213ff8d0213ff4fa03600cfa213ff088013ff010800005ee012008ee05a0041080000490100017ee05e008901000174000001601000000d401200092100008d00120041b3f02f59a0361b8de01200c353f02f5b406a1c481c6a00488012010|@5785,131071|80,5,@1585 88,4,@5777 96,4,I24 184,5,@5778 204,4,@5780 216,4,@5781 5777:S4|636f6e76 5778:C2,232|9e13e002f606201880a1001b8bd02018ae10000fac100008901000167ffdc5400100000080a220012280002aee213ffcaa100017901000167ffdc54a01000000e8022000d00220087ffdc55b01000000a6100015a4100008901000127ffdf18101000000de02200080a3fffd32800005901000129010001281c4e006010000007ffdf1780100000084100008901000127ffdf23301000000a4100013a2100002921000147ffdf4ae01000000e4213ffc9410200592100008901000117ffdf4f588013ffcde01200010bfffcf88012004113f02dc90022308f40620209fc6a00088013ffc90102001|@5779,131071|28,5,@2124 56,5,@2125 72,5,@2126 92,5,@2429 128,5,@2429 144,5,@2438 164,5,@2462 188,5,@2464 208,4,@5627 5779:S42|56414c55455f4f505328292e6170706c7946756e6374696f6e283629666f6c6c6f775479706573283129 5780:O2|@5781,@110 5781:C2,148|9e13e002f606201880a1001b8bd02018d2213ffcd0213ff88c21a01088013ff88b196010ba10200384100006fa21bffcd420a008d220a004d020a000ee036004d005e000de213ffcee213ff8c4213ff49a0120044000001788013ff48c21a00c8b19600cba102002ac100006fa21bffcd025a004ea012000ea25a000e8012004ec25200090102001e601200881c4e00688012014|@5784,131071|84,5,@5782 5782:C2,248|9e13e002f606201880a1001b8bd0201880a2200132800005c40220009010200181c3e00601000000de213ffcda213ff8c4213ff4fa00a004fa213ff0fa022004fa213fecd2037ffcd000a0001b0000839a0360d8f40360009fc6a00088013fec80a2200122800016d0012000ee01200cd005e0007ffd6f5601000000ac100008d00120047ffd6f520100000092100008901000167ffdf3540100000080a2200122800007d0012000d0012000da01200cde01201010bfffd488012014da01200c7fffffd19e13e0028c21a00c8b19600cba102002ae100006fa21bffcd025e004ec012008ec25e00090100017ea01201081c5600688012014|@5783,131071|76,4,I24 116,5,@1613 132,5,@1613 148,5,@2452 5783:S37|5052494e545f5441424c4528292e6164644f7665726c6f616428332966696c746572283129 5784:S28|5052494e545f5441424c4528292e6164644f7665726c6f6164283329 5785:S48|56414c55455f4f505328292e6170706c7946756e6374696f6e2836296164644f7665726c6f6164696e67283129283129 5786:S49|56414c55455f4f505328292e6170706c7946756e6374696f6e2836296164644f7665726c6f616447656e6572616c283129 5787:C2,232|9e13e002f606201880a1001b8bd02018808a200132800004b8102004f8022000b92f200284072001811f201024800017de213ffcde213ffcda213ff8d0213ff4fa03600cfa213ff094102011921020017ffd6bd888013ff0133f02f5920260741b0000839a0360d8f40360009fc6a0000100000080a220012280000eee01200810800009ec012008da213ff8d0213ff4fa03600cfa213ff088013ff010800005ee012008ee05a0041080000490100017ee05e008901000177ffffede01000000d401200092100008d00120041b3f02f59a0361b8de01200c353f02f5b406a1c481c6a00488012010|@5785,131071|80,5,@1585 88,4,@5777 96,4,I24 184,5,@5778 204,4,@5780 216,4,@5781 5788:S28|56414c55455f4f505328292e6170706c7946756e6374696f6e283629 5789:C2,112|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffcd0037fe081c3e00601000000da213ff8fa022000fa213ff4d00220047ffffff288013ff48c21a00c8b19600cba1020029e100006fa21bffcd023e004da012000da23e0009010000fde01200881c3e0068801200c|@1966,161| 5790:S52|50415253455f5452454528292e67656e636f64652837296d616b654465627567456e74726965732833296c6f6164566172283329 5791:S42|50415253455f5452454528292e67656e636f64652837296d616b654465627567456e7472696573283329 5792:C2,1500|9e13e002f606201880a1001b8bd02018c4012000ee03601480a5e001328000048c21a02081c3e006880120088b196020ba102007ac100006fa21bffc2b3f02f8aa05606cea25a000ea036010ea25a018d625a014d603600cd625a010d225a00ce8036008e825a008e600a000e625a0048c21a0208b196020ba102007a4100006fa21bffc233f02f8a20461c8e224a000ea24a018e2012004e224a014d624a010d224a00ce824a008e624a0048c21a01c8b19601cba102006a0100006fa21bffc033f02f882006334c2242000ea242014d6242010d224200ce8242008e62420048c21a00c8b19600cba10200292100006fa21bffcec226004ac103ff5ec226000c203600498100008d0006000de213ffcda213ff8d8213ff4d4213ff0fa00a004fa213fece4213fe8e0213fe4d2213fe0da013fecf40360009fc6a00088013fe08c21a00c8b19600cba10200296100006fa21bffc94102001d422e004d2012010d222e0008c21a00c8b19600cba10200284100006fa21bffcd620a004d020a0008c21a00c8b19600cba102002ae100006fa21bffcc425e004ac102029ec25e000ee213ffc88013ffc80a0a00132800005e800a000aa1020051080000c80a56001e605200080a4fff532800007aa102001c400a004f606201880a1001b8bd0201830bffff280a560012280000de4012000d00120007ffe6f37010000008c21a00c8b19600cba102002a4100006fa21bffcd024a004a2103ff5e224a0008c21a00c8b19600cba102002a2100006fa21bffca0102001e0246004e42460008c21a0148b196014ba1020049e100006fa21bffc82102001c223e00cda012004da23e008e223e00498102011d823e0008c21a00c8b19600cba10200296100006fa21bffcd401200cd422e00492103ff5d222e000d001201cc4022004d000a000de213ffcd6213ff8da012010f40360009fc6a00088013ff88c21a00c8b19600cba102002ae100006fa21bffcec012010ec25e004aa103ff5ea25e000e8012024e6052004a4100008d004e000e4213ffcee213ff8da012018f40360009fc6a00088013ff88c21a00c8b19600cba102002a2100006fa21bffc213f02f9a0042080e0246004d02460008c21a00c8b19600cba1020029e100006fa21bffce223e00482102029c223e000de213ffc88013ffc80a4600132800005d80460009a1020051080000c80a36001d603200080a2fff5328000079a102001e2046004f606201880a1001b8bd0201830bffff280a360012280000dd4012000d00120007ffe6ece010000008c21a00c8b19600cba10200294100006fa21bffcd022a00492103ff5d222a0008c21a00c8b19600cba10200292100006fa21bffc90102001d0226004d42260008c21a0148b196014ba10200484100006fa21bffcae102001ee20a00cec012004ec20a008d220a004aa102011ea20a0008c21a0148b196014ba102004a8100006fa21bffc273f002fa604e11ce625200cc4252008e401202ce4252004a2103fe9e22520008c21a00c8b19600cba102002a0100006fa21bffc9e102001de242004e82420008c21a00c8b19600cba10200282100006fa21bffce0206004da012008da2060008c21a00c8b19600cba10200298100006fa21bffcc223200496102029d6232000d8213ffc88013ffc80a0600132800005d2006000941020051080000c80a2a001d002600080a23ff53280000794102001c2006004f606201880a1001b8bd0201830bffff280a2a0012280000dc4012000d00120007ffe6e76010000008c21a00c8b19600cba10200284100006fa21bffcd020a004ae103ff5ee20a0008c21a00c8b19600cba102002ae100006fa21bffcac102001ec25e004c425e0008c21a0148b196014ba102004aa100006fa21bffca8102001e825600ce6012010e6256008ee256004a4102011e42560008c21a00c8b19600cba102002a2100006fa21bffca0102001e0246004ea2460008c21a00c8b19600cba1020029e100006fa21bffce223e004c2012014c223e0008c21a00c8b19600cba10200290100006fa21bffcde2220049a102025da222000d801203881c3200688012044|@5806,131071|60,4,@5793 132,4,@5797 192,4,@5801 500,5,@3258 788,4,@5805 920,5,@3258 1060,4,@668 1272,5,@3258 5793:C2,144|9e13e002f606201880a1001b8bd02018c4022000ee0220048c21a00c8b19600cba10200290100006fa21bffcec036014ec222004ee222000aa10000fa810000da61000024000001a01000000e4052010e4213ffce205200ce2213ff8e0052008e0213ff496100008d4052018d2052004901000131b3f02bf9a0362689e100015353f02bfb406a28881c6a00488013ff4|@5796,131071|68,5,@5794 116,4,@5414 128,4,@5416 5794:C2,56|9e13e002c4022000ee0220048c21a0108b196010ba10200390100006fa21bffcee222008c422200484102001c422200081c3e00601000000|@5795,98433| 5795:S10|4465627567456e746572 5796:S61|50415253455f5452454528292e67656e636f64652837297772617046756e6374696f6e496e4465627567283629656e74657246756e6374696f6e283129 5797:C2,160|9e13e002f606201880a1001b8bd02018c4022000ee0220048c21a00c8b19600cba10200290100006fa21bffcec036014ec222004ee222000aa10000fa810000da6100002a41000174000001d01000000ea213ffce4213ff8e2052010e2213ff4e005200ce0213ff0de052008de213fec96100008d4052018d2052004901000131b3f02bf9a0362687fffc70e88013fecd0012000c201200481c0600688012008|@5800,131071|72,5,@5798 128,4,@5414 136,5,@5416 5798:C2,56|9e13e002c4022000ee0220048c21a0108b196010ba10200390100006fa21bffcee222008c422200484102005c422200081c3e00601000000|@5799,98433| 5799:S10|44656275674c65617665 5800:S61|50415253455f5452454528292e67656e636f64652837297772617046756e6374696f6e496e44656275672836296c6561766546756e6374696f6e283129 5801:C2,128|9e13e002f606201880a1001b8bd02018ae10000fac10000dea022000e8022004901000144000001e01000000ee213ffce8213ff8e605a010e6213ff4e405a00ce4213ff0e205a008e2213fec96100008d405a014d205a004901000151b3f02bf9a0362687fffc6bc88013fecd0012000f40620209fc6a0000100000090102001|@5804,131071|36,5,@5802 92,4,@5414 100,5,@5416 5802:C2,48|9e13e002841000088c21a00c8b19600cba10200290100006fa21bffcc422200484103ffdc422200081c3e00601000000|@5803,65665| 5803:S14|4465627567457863657074696f6e 5804:S65|50415253455f5452454528292e67656e636f64652837297772617046756e6374696f6e496e4465627567283629657863657074696f6e46756e6374696f6e283129 5805:O2|@5051,0 5806:S45|50415253455f5452454528292e67656e636f64652837297772617046756e6374696f6e496e4465627567283629 5807:C2,592|9e13e002f606201880a1001b8bd020188410000fae10000d7ffdd20e01000000d0213ffcd0213ff8c4213ff4ee213ff0d2213fecd6213fe8d6213fe4ac013ff8ec213fe0d605e004aa10000a94102005921000157ffff6f988013fe0c6213ffc293f02f9a805218ee8213ff8a6102001e6213ff486013ff4d00120107fffd47088013ff4a4100008d00120109a100012f40360009fc6a00001000000a21000088c21a0088b196008ba10200190100006fa21bffce2222000c6012008e001201881c4200688012028de02200080a3e1953280000780a3e0218210000890102001da01200c81c360068801201c3280002480a3e015c2012008d0213ffcfa006004fa213ff8d2022008113f02f9900223307ffd2b9e88013ff8133f02f9920263507ffd2b9a01000000d201200c7ffd2b9701000000133f02f9920263747ffd2b9301000000d201201c7ffd2b9001000000d0213ffcd6012008d401202092102005d00120007ffe3e1588013ffc90102001da01201481c36006880120243280001cc2012008c2012008fa006004fa213ffcd2012004113f02f9900223807ffd2b7b88013ffc133f02f9920263747ffd2b7701000000d20120187ffd2b7401000000d0213ffcd6012004d401201c92102005d00120007ffe3df988013ffc90102001da01201081c3600688012020fa006004fa213ffcd2012004113f02f9900223b47ffd2b6288013ffc133f02f9920263747ffd2b5e01000000d20120187ffd2b5b01000000d0213ffcd6012004d401201c92102005d00120007ffe3de088013ffc90102001da01201081c3600688012020|@5813,131071|24,5,@2194 84,5,@5748 96,4,$5807+202 124,5,@5528 264,4,@5808 272,5,@496 280,4,@5809 288,5,@496 300,5,@496 308,4,@5810 316,5,@496 328,5,@496 356,5,@2932 404,4,@5811 412,5,@496 420,4,@5810 428,5,@496 440,5,@496 468,5,@2932 504,4,@5812 512,5,@496 520,4,@5810 528,5,@496 540,5,@496 568,5,@2932 5808:S22|436f6e76657273696f6e20657863657074696f6e2028 5809:S26|2920726169736564207768696c6520636f6e76657274696e6720 5810:S4|20746f20 5811:S43|4f766572666c6f7720657863657074696f6e20726169736564207768696c6520636f6e76657274696e6720 5812:S34|457863657074696f6e20726169736564207768696c6520636f6e76657274696e6720 5813:S41|50415253455f5452454528292e67656e636f64652837296765744c69746572616c56616c7565283529 5814:C2,2028|9e13e002f606201880a1001b8bd02018da213ffcd0213ff8d4213ff4c402e0008088a0010280002d88013ff480a0bfc12680002a0100000080a0a03934800027010000002f3f02faae05e072ba00a03dfa05c01d81c5c01d01000000000005b20000007a0000007a0000007a0000007a0000007a00000612000006c2000000860000007a0000007a0000007a0000007a000006b60000007a0000007a0000007a000004aa0000007a0000007a0000007a0000007a0000007a0000007a0000030a000005ce0000007a0000007a0000007a000001c2000005969010000a81c3e0068801200cc402e008ee00a000ac10000f901000177ffe3ed701000000de022004808be0013280001980a3e0018c21a0148b196014ba1020049a100006fa21bffc193f02fc9803201cd8236000d223600cd8012004d8236008d8012008d8236004961000179410000d84100009d2012000901000029e100016353f02fcb406a09c81c6a0048801200c3280000fec213ffcec213ffc96100017153f007a9402a20c82100009d2012000901000019a0120084000049d88013ffcda01200081c3600688012010ee213ff8821000099210000a901000014000064388013ff88c21a00c8b19600cba1020029a100006fa21bffcd8022000d8236004d6012000d62360008c21a0148b196014ba10200494100006fa21bffcd202200cd222a00cc4022008c422a008ee022004ee22a004da22a0009010000aec01200481c5a00688012014ec02a004ea05a00080a560093280002480a57ff9d2213ffcde213ff8fa02a000fa213ff4fa02a00cfa213ff0d002e0049a0120084000076388013ff08c21a00c8b19600cba102002a8100006fa21bffcd0252004a6103ff9e62520008c21a0148b196014ba102004a4100006fa21bffce2012000e224a00ca0102001e024a008e824a004de012004de24a00090100012c201200881c060068801201c32800025de213ffcd2213ffcde213ff8fa02a000fa213ff4fa02a00cfa213ff0d202e004d005a0049a0120084000077a88013ff08c21a00c8b19600cba102002a8100006fa21bffcd0252004a6103ff9e62520008c21a0148b196014ba102004a4100006fa21bffce2012000e224a00ca0102001e024a008e824a004de012004de24a00090100012c201200881c060068801201c113f030290022244f40620209fc6a00088013ffc90102001ec02e008ea05a000de213ffcd2213ff8d6213ff4ec213ff0fa02e00cfa213fec88013fec901000157ffd69d80100000080a220012280000e90100015901000157ffd69e301000000d2022004d00220007ffdbd8101000000aa100008f606201880a1001b8bd0201830bfffef7ffdbda40100000080a2200122800007a8102001901000157ffdbdaf01000000e8022000a81d200480a520012280000da8102001e601201c253f0302a404a27ce4213ffcd6012018d401200892102005d004e0047ffe3c9088013ffca8100008e8012004d005200040000795010000001b3f03039a036044f40360009fc6a00001000000e601200080a4e00132800005e204e000a4100008108000188c21a00ce0012004de042000d0213ffcfa04e004fa213ff8fa046004fa213ff49210000fd00460004000081888013ff4d401200892100008d00120004000088c01000000e60120048801200cf606201880a1001b8bd0201830bfffe58b19600cba102002a2100006fa21bffce4246004a0102035e024600096100011d4012014d201200cd0012018da01201cde01201010bffec188012020ec02e004ea05a00080a57fe1328000369010000ae805a008e6052000a410000f901000137ffe3dc901000000e2022004808c60013280001b80a460018c21a0188b196018ba102005a0100006fa21bffc1f3f03049e03e020de242000c202e008c2242010d224200cda012004da242008d8012008d8242004961000139410001084100009d2012000901000029e100012353f02fcb406a09c81c6a0048801200c3280000f9010000ae4213ffce002e00896100013941000109e100009d20120009010000f9a0120084000038d88013ffcc201200081c060068801201081c4a0068801200c81c3e0068801200cac1000099210000a90100016353f0300b406a2d481c6a0048801200cac1000099210000a90100016353f0300b406a2d481c6a0048801200c8c21a0148b196014ba102004ac100006fa21bffc2b3f0304aa05606cea25a000d025a00cda25a008d225a004d202e0049010000a9a100016f403600081c6a0048801200cec02e004ea05a000d0213ffcd0213ff8de213ff4d2213ff0d6213fecfa02e008fa213fe8fa02e00cfa213fe4ea213fe0d0213fdca8013ff8e8213fd8d60360049410200192100015901020f57ffff48b88013fd8e6012028e401200ce4213ffcd6012024d4012000d2012008d0012004da04e008f40360009fc6a00088013ffcd601201894100008d2012020d0012010de012014353f0305b406a1f881c6a0048801202cd602e00810bffe3b8801200cde213ffcfa02e004fa213ff8d602e0087ffffe3488013ff8d0213ffcec01200088013ffce805a00080a53fe13280000680a53ff5e605a008ea04e0001080000ce60120003280000701000000ec05a008f606201880a1001b8bd0201830bffff22b3f0075aa056274e60120008c21a00c8b19600cba102002a4100006fa21bffce204e000e224a004ea24a0008c21a0148b196014ba102004a0100006fa21bffcde04e00cde24200cc204e008c2242008da04e004da242004e424200090100010d801200881c3200688012018|@5876,131071|68,4,$5814+94 244,5,@2944 288,4,@5815 344,4,@5817 376,4,@1723 400,5,@5828 436,5,@5834 596,5,@5840 744,5,@5841 848,4,@5845 912,5,@1606 936,5,@1607 952,5,@2100 980,5,@2104 1004,5,@2105 1036,4,@5847 1064,5,@2932 1084,5,@5848 1092,4,@5852 1176,5,@5855 1196,5,@5857 1324,5,@2944 1368,4,@5861 1432,4,@5817 1488,5,@5828 1536,4,@5834 1564,4,@5834 1600,4,@5862 1724,5,@5748 1796,4,@5870 1920,4,@1702 5815:C2,52|9e13e002f606201880a1001b8bd02018173f007a9602e20c94100008d203600cd0036008da036004f403600081c6a00401000000|@5816,131071|16,4,@1723 5816:S37|50415253455f5452454528292e67656e636f64652837296275696c64416f74283429283129 5817:C2,704|9e13e002f606201880a1001b8bd020188410000fae1000089010000b7ffdcf1701000000de026004da03e00080a360093280007480a360019010000b7ffe0f2701000000c4213ffcee213ff8d2213ff4d4213ff0d6213fecfa026000fa213fe8fa02600cfa213fe44000009d88013fe49810200180a2200132800005b82320019610000c1080000a8c21a00cb917200494072001d00220049810000af606201880a1001b8bd0201830bffff38b19600cba10200294100006fa21bffc92102001d222a004d0012014d022a000c40120108c21a0148b196014ba102004ae100006fa21bffcec00a00cec25e00caa102001ea25e008293f02fda80520e8e825e004a6102001e625e000d6213ffcd4213ff890100017da01200cf40360009fc6a00088013ff8d0213ffcd0213ff8d0213ff4a4013ff4e2012000e224a000a0013ff4d02420049e013ff4c2012010c223e0088c21a01088013ff48b196010ba1020039a100006fa21bffcd8012000d8236000d6012004d6236004d4012008d42360088c21a00c8b19600cba10200292100006fa21bffc90102001d0226004da2260008c21a00c8b19600cba10200284100006fa21bffcd220a004ae102001ee20a0008c21a0148b196014ba102004ac100006fa21bffcea012014ea25a00ce8012010e825a008c425a004e6012018e625a00090100016e401202c81c4a006880120303280002ac4213ffcd2213ffcd4213ff8ee213ff4d6213ff0d0213fecc4213fe8fa026000fa213fe4fa026008fa213fe0fa02600cfa213fdcd003e0049a013ffc4000008588013fdc8c21a00c8b19600cba10200298100006fa21bffcd023200496102001d62320008c21a0148b196014ba10200494100006fa21bffcd2012000d222a00cd0012004d022a008d822a004c4012008c422a0009010000aee01200c81c5e00688012024113f02fe900223a4f40620209fc6a00088013ffc90102001|@5827,131071|28,5,@2194 60,5,@2659 104,5,@5818 244,4,@5820 576,5,@5821 680,4,@5825 5818:C2,304|9e13e002f606201880a1001b8bd02018ae10000fac100008901000167ffdbd820100000080a220012280003390100016aa100017901000167ffdbd8c01000000e8022000d00220087ffdbd9d01000000a6100015a4100008901000127ffdf1500100000080a2200132800020a2100008a2100008901000127ffde9bc010000007ffdbb8a0100000080a220013280001890100011901000127ffde9b40100000084100008901000127ffdea6f01000000a4100013a2100002921000147ffdecea01000000e4213ffc9410200592100008901000117ffded3188013ffcde01200010bfffc9880120049010001181c4e006010000007ffdbf880100000080a220012280000a90102001aa100017901000167ffdbf9201000000d00220049e10001510bfffbaf606201881c5e00601000000|@5819,131071|28,5,@2124 56,5,@2125 72,5,@2126 92,5,@2500 120,5,@2429 128,5,@2102 152,5,@2429 168,5,@2438 188,5,@2462 212,5,@2464 244,5,@2148 272,5,@2149 5819:S28|545950455f5452454528292e676574436f6e7374724c697374283129 5820:O1|2 5821:C2,668|9e13e002f606201880a1001b8bd0201880a2200132800045c40220008c21a00c8b19600cba10200290100006fa21bffc84102001c4222004c4037ff8c4222000ee0360008c21a0148b196014ba102004ac100006fa21bffcea05e00cea25a00ca8102001e825a008273f02fda604e0e8e625a004a4102001e425a000de213ffcfa037ff4fa213ff8d0213ff490100016da037ffcf40360009fc6a00088013ff4d0213ffcd0213ff8d0213ff4a2013ff4e0012000e02460009e013ff4d023e00482013ff4da012004da2060088c21a01088013ff48b196010ba10200398100006fa21bffcd6012000d6232000d4012004d4232004d2012008d22320088c21a00c8b19600cba10200290100006fa21bffc84102001c4222004d8222000ee01201481c5e00688012018ae10000fac10000dea022004d000a0087ffdcdbb01000000ee213ffcec213ff8c4213ff4ea213ff0d205bff01b0000839a0360d8f40360009fc6a00088013ff080a220012280003dd0012000e80120088c21a00c8b19600cba102002a6100006fa21bffca4102001e424e004e2053ff8e224e000e0012004c2053ff4d2042000901000134000004301000000da012008c2213ffcd0213ff8d0042004da037ffcf40360009fc6a00088013ff8d0213ffcd0213ff8d0213ff498013ff4d6012000d623200094013ff4d022a00492013ff4d0012004d02260088c21a01088013ff48b196010ba10200384100006fa21bffcee012000ee20a000ec012004ec20a004ea012008ea20a0088c21a00c8b19600cba102002a8100006fa21bffce6012014e6252004c425200090100014e401202081c4a00688012024da0120087fffff689e13e0028c21a00c8b19600cba102002a8100006fa21bffcd0252004e6012004e625200090100014e401200c81c4a00688012010|@5824,131071|104,4,@5820 312,5,@2194 340,4,I24 428,5,@5822 5822:C2,884|9e13e002f606201880a1001b8bd0201880a220013280000580a260019010000981c3e0060100000032800004808a200181c3e0060100000032800005de213ffcc40220001080000b808a600184100008113f00bc900220f0f40620209fc6a00088013ffc9010000284102001808a600132800005de213ffcee0260001080000bb825e001ae100008113f00bc900220f0f40620209fc6a00088013ffc90100017ae102001b825e001ba20a001811f401c3280003a808a2001808a200132800005de213ffcec0220001080000b808a2001ac100008113f00bc900220f0f40620209fc6a00088013ffc90100016ac102001808a200132800005de213ffcea02200410800009808a6001113f00bc900220f0f40620209fc6a00088013ffcaa102001808a600132800005de213ffce802600410800009de213ffc113f00bc900220f0f40620209fc6a00088013ffca8102001de213ffcec213ff892100014901000157fffffa888013ff88c21a00c8b19600cba1020029e100006fa21bffcd023e004d2012000d223e0009010000fc401200481c0a0068801200832800005de213ffcec0220001080000b808a6001ac100008113f00bc900220f0f40620209fc6a00088013ffcaa100016ac102001808a600132800005de213ffcea0260001080000bb8256001aa100008113f00bc900220f0f40620209fc6a00088013ffca8100015aa102001b8256001ba25a001811f401c3680002d808a6001808a200132800005de213ffce80220001080000b808a2001a8100008113f00bc900220f0f40620209fc6a00088013ffc90100014a8102001808a200132800005de213ffce602200410800009de213ffc113f00bc900220f0f40620209fc6a00088013ffca6102001de213ffce8213ff8901000137fffff5d88013ff88c21a00c8b19600cba1020029e100006fa21bffcd023e004d2012000d223e0009010000fc401200481c0a0068801200832800005de213ffce80260001080000b808a6001a8100008113f00bc900220f0f40620209fc6a00088013ffca6100014a8102001808a600132800005de213ffce60260041080000bde213ffca6100008113f00bc900220f0f40620209fc6a00088013ffc92100013a6102001de213ffce8213ff8921000137fffff3188013ff88c21a00c8b19600cba1020029e100006fa21bffcd023e004d2012000d223e0009010000fc401200481c0a00688012008|@5823,129155|80,4,@2144 136,4,@2144 212,4,@2144 264,4,@2144 312,4,@2144 432,4,@2144 488,4,@2144 564,4,@2144 616,4,@2144 732,4,@2144 788,4,@2144 5823:S30|50415253455f5452454528292e67656e636f6465283729706c7573283229 5824:S57|50415253455f5452454528292e67656e636f64652837296275696c64416f74283429616464436f6e737472283429616464436c697374283129 5825:O3|@24,@397,@5826 5826:S35|616464436f6e7374723a206261646c792d666f726d656420616e642d6f722074726565 5827:S46|50415253455f5452454528292e67656e636f64652837296275696c64416f74283429616464436f6e737472283429 5828:C2,1180|9e13e002f606201880a1001b8bd020188410000fae10000dac1000089010000b7ffdcc3701000000de026004da03e00080a360093280005f80a37ffd8c21a00c8b19600cba10200290100006fa21bffcaa102001ea222004ec222000ea05fff88c21a0148b196014ba102004a8100006fa21bffce605600ce625200ca4102001e4252008253f02fda404a0e8e4252004a4102001e4252000c4213ffcd6213ff8fa026000fa213ff4fa02600cfa213ff0d0213fec9610000a9410001492100016d005fffcda05e000f40360009fc6a00088013fecd0213ffcd0213ff8d0213ff4a2013ff4e0012000e02460009e013ff4d023e00482013ff4da01200cda2060088c21a01088013ff48b196010ba10200398100006fa21bffcd6012000d6232000d4012004d4232004d2012008d22320088c21a00c8b19600cba10200290100006fa21bffc84102001c4222004d82220008c21a00c8b19600cba102002ae100006fa21bffcd025e004ac103ffdec25e0008c21a0148b196014ba102004aa100006fa21bffce8012010e825600ca6102001e6256008ee256004e4012014e425600090100015e201201c81c4600688012020328000b5c4213ffcd803e004808b2001328000aac4213ffcd0032000c4213ffcee213ff8ec213ff4fa026000fa213ff0fa02600cfa213fec9210000bd0022008400000b288013fec80a22001228000408c21a00c8c21a00c8b19600cba102002ae100006fa21bffcac102001ec25e004ea012008ea25e000e8032000d2052000901000177ffffe5701000000e6032000e401200cd6213ffcfa032004fa213ff8d0213ff49610000ad404e004d2012008d004bffcda04a000f40360009fc6a00088013ff4d0213ffcd0213ff8d0213ff4a2013ff4e0012000e02460009e013ff4d023e00482013ff4da012008da2060088c21a01088013ff48b196010ba10200398100006fa21bffcd6012000d6232000d4012004d4232004d2012008d22320088c21a00c8b19600cba10200290100006fa21bffcc4012010c4222004d822200084100008108000468c21a00c8b19600cba10200284100006fa21bffcae102001ee20a004ec012008ec20a000ea01200ce8057ff88c21a0148b196014ba102004a6100006fa21bffce405200ce424e00ca2102001e224e008213f02fda00420e8e024e0049e102001de24e000d6213ffcd8213ff8c4213ff49610000a9410001392100016d0057ffcda056000f40360009fc6a00088013ff4d0213ffcd0213ff8d0213ff482013ff4da012000da20600098013ff4d023200496013ff4d4012008d422e0088c21a01088013ff48b196010ba10200392100006fa21bffcd0012000d0226000c4012004c4226004ee012008ee2260088c21a00c8b19600cba102002ac100006fa21bffcea012010ea25a004d225a000841000168c21a00c8b19600cba102002a8100006fa21bffcc4252004a6103ffde62520008c21a0148b196014ba102004a4100006fa21bffce2012018e224a00ca0102001e024a008e824a004de01201cde24a00090100012c201202881c060068801202c113f03009002225cf40620209fc6a00088013ffc90102001c4213ffc113f03009002225cf40620209fc6a00088013ffc90102001|@5833,131071|32,5,@2194 132,4,@5820 496,5,@5829 564,5,@5822 840,4,@5820 1128,4,@5831 1156,4,@5831 5829:C2,324|9e13e002f606201880a1001b8bd02018ae10000fec022008901000167ffe15ba0100000080a2200122800022ea05a000901000167ffe15c901000000ac100008d00260087ffe15b00100000080a220012280001690102001d00260087ffe15bf0100000092100017a8100008901000167fffcd7001000000a6100008901000147fffcd6c0100000080a4c00832800005901020019010200581c260060100000081c260060100000081c5e0060100000080a560053280002290102001e805a004e6052000de05a008da03e000d0026008c402200080a0a0053280001790102001e4022004e204a000e0022008c2042000b8246001ba24e001811f401c3280000c90102001b8206001ba236001811f401c32800005901020019010200581c5e0060100000081c5e0060100000081c5e0060100000081c5e0060100000081c5e00601000000|@5830,131043|28,5,@2733 52,5,@2735 68,5,@2733 92,5,@2735 112,5,@5528 128,5,@5528 5830:S33|56414c55455f4f505328292e697354686553616d65457863657074696f6e283229 5831:O3|@24,@397,@5832 5832:S37|6164644578636f6e7374723a206261646c792d666f726d656420616e642d6f722074726565 5833:S48|50415253455f5452454528292e67656e636f64652837296275696c64416f742834296164644578636f6e737472283429 5834:C2,468|9e13e002f606201880a1001b8bd02018c4026004ec00a00080a5bff93280001880a5a001d0213ffcde213ff8fa026000fa213ff4fa026008fa213ff0fa02600cfa213fecd000a0049a013ffc4000006988013fec8c21a00c8b19600cba102002ae100006fa21bffcd025e004aa103ff9ea25e0001080003c8c21a00c3280001880a5bffdd0213ffcde213ff8fa026000fa213ff4fa026008fa213ff0fa02600cfa213fecd000a0049a013ffc4000007f88013fec8c21a00c8b19600cba102002ae100006fa21bffcd025e004aa102001ea25e000108000248c21a00c32800018ae100002d0213ffcde213ff8fa026000fa213ff4fa026008fa213ff0fa02600cfa213fecd000a0049a013ffc400000af88013fec8c21a00c8b19600cba102002ae100006fa21bffcd025e004aa103ffdea25e0001080000c8c21a00cd0213ffcde213ff8fa026000fa213ff4fa026008fa213ff0fa02600cfa213fec88013fec8c21a00c8b19600cba102002aa100006fa21bffca8102001e8256004e6012010e6256000a410001792100015d00120007ffffcd1010000008c21a0148b196014ba102004a2100006fa21bffcd024600ce0012004e0246008e4246004de012008de24600090100011c201200c81c0600688012014|@5839,131071|76,5,@5835 172,5,@5837 268,5,@5838 400,5,@5822 5835:C2,148|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffc9010200181c3e00601000000da213ff8fa022004fa213ff4d2022000d00360001b3f03019a036174f40360009fc6a00088013ff4d0213ffcd0012000da0120047fffffe988013ffc8c21a00c8b19600cba10200284100006fa21bffcd020a004ee012000ee20a00090100002ec01200c81c5a00688012010|@586,131071|60,4,@5836 5836:O1|@5834 5837:C2,260|9e13e002f606201880a1001b8bd0201880a2200132800005c40220009010200181c3e00601000000de213ffcda213ff8fa022004fa213ff4fa00a000fa213ff0fa00a008fa213fecd200a004d00360001b3f03019a036174f40360009fc6a00088013fecd0213ffcd0213ff8d0213ff4ae013ff4ec012004ec25e000aa013ff4d0256004a8013ff4e6012000e62520088c21a01088013ff48b196010ba102003a4100006fa21bffce2012000e224a000e0012004e024a004de012008de24a008e4213ffcd0012014da0120187fffffcd88013ffc8c21a00c8b19600cba10200282100006fa21bffcd0206004da012000da20600090100001d801202081c3200688012024|@586,131071|80,4,@5836 5838:C2,260|9e13e002f606201880a1001b8bd0201880a2200132800005c40220009010200181c3e00601000000de213ffcda213ff8fa022004fa213ff4fa00a000fa213ff0fa00a008fa213fecd200a004d00360001b3f03019a036174f40360009fc6a00088013fecd0213ffcd0213ff8d0213ff4ae013ff4ec012004ec25e000aa013ff4d0256004a8013ff4e6012000e62520088c21a01088013ff48b196010ba102003a4100006fa21bffce2012000e224a000e0012004e024a004de012008de24a008e4213ffcd0012014da0120187fffffcd88013ffc8c21a00c8b19600cba10200282100006fa21bffcd0206004da012000da20600090100001d801202081c3200688012024|@586,131071|80,4,@5836 5839:S47|50415253455f5452454528292e67656e636f64652837296275696c64416f7428342961646444656661756c74283229 5840:C2,212|9e13e002f606201880a1001b8bd0201880a2200132800005c4037ff89010200181c3e006010000008c21a0148b196014ba102004ae100006fa21bffcec00a00cec25e00caa102001ea25e0082b3f02fdaa0560e8ea25e004aa102001ea25e000de213ffcda213ff8fa022004fa213ff4d602200094100017d2037ff4d0037ffcda036000f40360009fc6a00088013ff4d0213ffcd0012000da0120047fffffd988013ffc8c21a00c8b19600cba102002a8100006fa21bffcd0252004e6012000e625200090100014e401200c81c4a00688012010|@586,131071|76,4,@5820 5841:C2,240|9e13e002f606201880a1001b8bd0201880a260013280000f808a200180a2200132800005de213ffc9010200181c3e00601000000113f0302900221f0f40620209fc6a00088013ffc90102001808a200132800022de213ffcde213ffcda213ff8fa026004fa213ff4fa022004fa213ff0d6026000d4022000d2037ff4d0037ffcda036000f40360009fc6a00088013ff0d0213ffcd2012004d0012000da0120087fffffd888013ffc8c21a00c8b19600cba10200284100006fa21bffcd020a004ee012000ee20a00090100002ec01201081c5a00688012014113f0302900221f0f40620209fc6a00088013ffc90102001|@5844,131071|52,4,@5842 216,4,@5842 5842:O3|@24,@397,@5843 5843:S6|6d657267656c 5844:S43|50415253455f5452454528292e67656e636f64652837296275696c64416f742834296d657267656c283229 5845:O3|@24,@397,@5846 5846:S31|7061747465726e206973206e6f742061207475706c6520696e20612d6f2d74 5847:S31|43616e27742066696e642061206669786564207265636f726420747970652e 5848:C2,300|9e13e002f606201880a1001b8bd02018ae10000fac100008901000167ffdb5ee0100000080a220012280001990100016aa100017901000167ffdb5f801000000ea213ffc9e102001da02200488013ffc80a3600132800006b823e0019010000fc401200081c0a00688012004b917200490072001da0360049e100008f606201880a1001b8bd0201830bffff27ffd61f50100000080a220012280000d90100016aa100017901000167ffd61ff01000000d2022004d00220007ffdb59d010000009e10001510bfffd1f60620187ffdb78b0100000080a220012280000fee213ffcaa100017901000167ffdb79501000000d00220087ffdb7a701000000921000157ffde3cf010000009e10000910bfffbff6062018113f0302900223ecf40620209fc6a00088013ffc90102001|@5851,123043|28,5,@2104 56,5,@2105 140,5,@1606 168,5,@1607 184,5,@2100 204,5,@2124 232,5,@2125 244,5,@2126 256,5,@2429 276,4,@5849 5849:O3|@24,@397,@5850 5850:S26|656e7472794e756d626572202d206e6f742061207265636f7264 5851:S26|545950455f5452454528292e7265636f72645769647468283129 5852:O1|@5853 5853:C2,112|9e13e002f606201880a1001b8bd0201880a2200132800005b82220019010200181c3e00601000000b91f200490072001de213ffc7ffffff388013ffc8c21a00c8b19600cba1020029e100006fa21bffcd023e004113f007a9002220cd023e0009010000fde01200081c3e00688012004|@5854,129|84,4,@1723 5854:S43|50415253455f5452454528292e67656e636f64652837296275696c64416f742834296275696c646c283129 5855:C2,420|9e13e002f606201880a1001b8bd02018ae10000fac100008901000097ffdb5540100000080a220012280003290100009aa100017a8100016901000097ffdb55d01000000ea213ffce8213ff89e102001da02200488013ff8808b60013280001e01000000d2036000de213ffcfa036004fa213ff8d0026000d20120001b0000839a0360d8f40360009fc6a00088013ff880a2200122800006c4012004d0012004c401200c81c0a00688012010b820a001b9172004ae072001da0120009e10001788012008f606201880a1001b8bd0201830bfffe2113f003890022020f40620209fc6a0000100000090102001901000097ffd61420100000080a220012280000f90100009aa100017901000097ffd614c01000000d2022004d00220007ffdb4ea0100000092100008901000169e10001510bfffb6f60620187ffdb6d60100000080a2200122800012ee213ffcaa100017a8100016901000097ffdb6df01000000d00220087ffdb6f101000000a61000157ffde3190100000092100008901000149e10001310bfffa1f6062018113f0302900223ecf40620209fc6a00088013ffc90102001|@5856,131071|28,5,@2104 60,5,@2105 124,4,I24 212,4,@1110 240,5,@1606 268,5,@1607 284,5,@2100 312,5,@2124 344,5,@2125 356,5,@2126 368,5,@2429 396,4,@5849 5856:S26|545950455f5452454528292e656e7472794e756d626572283229 5857:C2,192|9e13e002f606201880a1001b8bd02018808aa00132800025de213ffc80a260013280000db82260018c21a00c8b19600cba10200292100006fa21bffcc402a004c4226004d02260009010000981c3e00601000000b91f200484072001de213ffcfa02a000fa213ff8d402a004921000027fffffe488013ff88c21a00c8b19600cba1020029e100006fa21bffcd023e004d4012000d423e0009010000fd201200481c2600688012008113f0303900223ccf40620209fc6a00088013ffc90102001|@5860,65671|168,4,@5858 5858:O3|@24,@397,@5859 5859:S6|6d657267656e 5860:S43|50415253455f5452454528292e67656e636f64652837296275696c64416f742834296d657267656e283329 5861:C2,48|9e13e002f606201880a1001b8bd02018d603601094100008d203600cd0036008da036004f403600081c6a00401000000|@5816,131071| 5862:C2,228|9e13e002f606201880a1001b8bd0201880a26001328000198c21a0208c21a0148b196014ba10200492100006fa21bffc053f03048400a16cc4226000c4036004c422600cee03600cee226008ec036008ec226004173f00329602e0a8941000099210000890100002353f02fcb406a09c81c6a004010000008b196020ba10200784100006fa21bffc2f3f0304ae05e1f8ee20a000ec026000ec20a018ea036004ea20a014e803600ce820a010e6036008e620a00ce4026004e420a008da20a004173f00319602e0f4941000029210000890100015353f02fcb406a09c81c6a00401000000|@5869,131071|48,4,@5863 84,4,@849 104,4,@5817 136,4,@5865 192,4,@796 212,4,@5817 5863:C2,52|9e13e002f606201880a1001b8bd02018173f007a9602e20c94100008d203600cd0036008da036004f403600081c6a00401000000|@5864,131071|16,4,@1723 5864:S51|50415253455f5452454528292e67656e636f64652837296275696c64416f7428342970726f636573734c697374283229283129 5865:C2,812|9e13e002f606201880a1001b8bd02018c4022004ee00a00080a5fff93280006380a5e009ec00a004808da00132800058de213ffcea05a004808d60013280004dde213ffce805600480a5200132800042de213ffcde213ffcda213ff8fa056000fa213ff4fa022000fa213ff0fa02200cfa213fecd6036018d405a000d2036014d0036010da03600cf40360009fc6a00088013fece601200cd0213ffcd204e008d0012008da04e004f40360009fc6a00088013ffc8c21a00c8b19600cba102002a4100006fa21bffca2102001e224a004d024a0008c21a00c8b19600cba102002a0100006fa21bffce4242004de012000de2420008c21a00c8b19600cba10200282100006fa21bffce02060049a103ff9da2060008c21a0148b196014ba10200498100006fa21bffcd6012004d623200c94102001d4232008c2232004d2012008d22320009010000cc401201481c0a00688012018113f030590022140f40620209fc6a00088013ffc90102001de213ffc113f030590022140f40620209fc6a00088013ffc90102001de213ffc113f030590022140f40620209fc6a00088013ffc9010200180a5e0093280005bde213ffc8c21a0148b196014ba102004ac100006fa21bffcea02200cea25a00ca8102001e825a008273f02fda604e0e8e625a004a4102001e425a0008c21a0148b196014ba102004a2100006fa21bffcea24600ca0102001e0246008033f02fd820060e8c224600498102001d8246000de213ffcda213ff8fa022000fa213ff4ea213ff0e2213fecd603601894100016d2036014d0036010da03600cf40360009fc6a00088013fecd601200cd0213ffcd202e008d0012000da02e004f40360009fc6a00088013ffc8c21a00c8b19600cba10200294100006fa21bffc92102001d222a004d022a0008c21a00c8b19600cba10200290100006fa21bffcd4222004c4012000c42220008c21a00c8b19600cba102002ae100006fa21bffcd025e004ac103ff9ec25e0008c21a0148b196014ba102004aa100006fa21bffce8012008e825600ca6102001e6256008ee256004e401200ce425600090100015e201201481c4600688012018113f030590022140f40620209fc6a00088013ffc90102001|@5868,131071|340,4,@5866 368,4,@5866 396,4,@5866 468,4,@5820 520,4,@5820 788,4,@5866 5866:O3|@24,@397,@5867 5867:S34|6d6b436f6e735061743a206261646c792d666f726d65642070617273652d74726565 5868:S60|50415253455f5452454528292e67656e636f64652837296275696c64416f7428342970726f636573734c6973742832296d6b436f6e73506174283129 5869:S48|50415253455f5452454528292e67656e636f64652837296275696c64416f7428342970726f636573734c697374283229 5870:C2,452|9e13e002f606201880a1001b8bd02018c4026004ee00a00080a5e0093280003e80a5e0058c21a00c8b19600cba102002ac100006fa21bffcaa102001ea25a004d025a000d0213ffcd0213ff8d0213ff490013ff4d6222000aa013ff4ec25600496013ff4d422e0088c21a01088013ff48b196010ba10200394100006fa21bffcd0012000d022a000ec012004ec22a004ea012008ea22a0088c21a00c8b19600cba10200296100006fa21bffc90102001d022e004d422e0008c21a00c8b19600cba102002ac100006fa21bffcd625a00496102005d625a0008c21a0148b196014ba10200494100006fa21bffcd002600cd022a00c96102001d622a008ec22a004ec026000ec22a0009010000a81c3e0068801200c32800026de213ffcd0213ffcd4213ff8d6213ff4de213ff0fa026000fa213fecfa02600cfa213fe8d000a0049a013ffc4000002788013fe88c21a00c8b19600cba102002ac100006fa21bffcd025a004aa102005ea25a0008c21a0148b196014ba102004a8100006fa21bffce6012000e625200ca4102001e4252008ec252004e2012004e225200090100014e001200881c4200688012018113f030690022290f40620209fc6a00088013ffc90102001|@5875,131071|324,5,@5871 428,4,@5873 5871:C2,600|9e13e002f606201880a1001b8bd0201880a220013280002dc40220008c21a00c8b19600cba10200290100006fa21bffc84102001c4222004c4036000c4222000d0213ffcd0213ff8d0213ff4ae013ff4ec037ff8ec25e000ae013ff4d025e00490013ff4ee037ffcee2220088c21a01088013ff48b196010ba10200390100006fa21bffcea012000ea222000e8012004e8222004ea012008ea222008a81000088c21a00c8b19600cba10200290100006fa21bffca6102001e6222004e822200081c3e0068801200cee037ffc808de0013280001bde213ffcec00a008808da00132800010de213ffcde213ffcda213ff8c4213ff4fa022004fa213ff0d205a000d005e0007fffde6f88013ff080a2200122800043d001200010800010ea012008da213ff8c4213ff4fa022004fa213ff088013ff01080003ad0012000da213ff8c4213ff4fa022004fa213ff088013ff010800033d00120008c21a00c8b19600cba102002a8100006fa21bffca6102001e6252004e4056000e4252000e2012004e0057ff8c2057ffcd2046004901000147ffff79001000000d0213ffcd0213ff8d0213ff49a013ff4e023600098013ff4d023200496013ff4c222e0088c21a01088013ff48b196010ba10200394100006fa21bffcd2012000d222a000d0012004d022a004c4012008c422a0088c21a00c8b19600cba102002ae100006fa21bffcec01200cec25e004d425e00090100017ea01201881c560068801201cda0120087fffff799e13e0028c21a00c8b19600cba102002ac100006fa21bffcd025a004ea012004ea25a00090100016e801200c81c5200688012010|@5872,131071|260,5,@5674 400,5,@5822 5872:S58|50415253455f5452454528292e67656e636f64652837296275696c64416f7428342961646453636f6e737472283429616464436c697374283129 5873:O3|@24,@397,@5874 5874:S36|61646453636f6e7374723a206261646c792d666f726d656420616e642d6f722074726565 5875:S47|50415253455f5452454528292e67656e636f64652837296275696c64416f7428342961646453636f6e737472283429 5876:S34|50415253455f5452454528292e67656e636f64652837296275696c64416f74283429 5877:C2,64|9e13e002f606201880a1001b8bd02018da213ffcde213ff89410000892102005113f03069002238c9a013ffc4000001188013ff8c401200081c0a00688012008|@5883,131071|32,4,@5878 44,5,@5879 5878:O4|0,@5820,0,0 5879:C2,168|9e13e002f606201880a1001b8bd0201880a2a00132800004c402a00081c3e00601000000ee00a00080a5ffd532800019de213ffcec00a004b8226001b9172004aa072001e8036000de213ffcda213ff8fa02a004fa213ff4ea213ff0d605a00894100008d005a004da052004f40360009fc6a00088013ff0d4012004d2012000da012008de01200c10bfffdf88012010113f030790022064f40620209fc6a00088013ffc90102001|@5882,131071|144,4,@5880 5880:O3|@24,@397,@5881 5881:S30|6d616b6574202d206261646c7920666f726d656420706172736574726565 5882:S43|50415253455f5452454528292e67656e636f64652837296275696c64547265652831296d616b6574283329 5883:S35|50415253455f5452454528292e67656e636f64652837296275696c6454726565283129 5884:C2,404|9e13e002f606201880a1001b8bd02018c403600cee00a000b825e001b9172004ac072001ec20a0008c21a0148b196014ba102004ac100006fa21bffcaa102001ea25a00cd225a008ee25a00492103ff1d225a0008c21a0188b196018ba102005aa100006fa21bffc92102001d225601092102001d225600c92102005d2256008ee25600492103fedd2256000da213ffcee213ff8ea213ff48c21a00c88013ff48b19600cba10200292100006fa21bffcd422600494102001d4226000de213ffcd6213ff8ec213ff4d402200088013ff480a2a00132800005d0213ffc901000091080001b8c21a00cd0213ff8fa02a004fa213ff4c402a00094013ff8901000029a0120144000002b88013ff48c21a00c8b19600cba102002ae100006fa21bffcec012004ec25e000ea012008ea25e00492100017d40120008801200cf606201880a1001b8bd0201830bfffe28b19600cba10200284100006fa21bffcee022000ee20a004ec012000ec20a000ea012004e8022004e8256000c4256004e601200ce625600890102001e401200881c4a00688012018|@5893,131071|260,5,@5885 5885:C2,340|9e13e002f606201880a1001b8bd020188410000fae10000dac100008901000167ffe316601000000aa100002e8022008901000144000004f0100000080a220012280003fea213ffca6100017901000144000005d01000000d0213ffcd0213ff8d0213ff4e404e000ea213ff0e6213fecd4213fe8fa022000fa213fe4fa022004fa213fe0fa026000fa213fdc96013ff4d404fff8d202600490100016da04a008f40360009fc6a00088013fdce2012010e0012008de047ffcde242000c2046000da006004d8036000d6012004d822e000d201201880a2600132800005d0012000d4012000108000078c21a00c9a0120204000004801000000941000088c21a00c8b19600cba10200290100006fa21bffcc4012020c4222004ee01201cee222000ec01200cd425a000d025a00490102001ea01201481c5600688012024113f030890022148f40620209fc6a00088013ffc90102001|@5892,131071|32,5,@2944 52,5,@5886 80,5,@5888 240,5,@5889 316,4,@5890 5886:C2,40|9e13e002c402200080a0a00532800005901020019010200581c3e0060100000081c3e00601000000|@5887,65665| 5887:S5|4c6f63616c 5888:C2,48|9e13e002c4022004ee0220088c21a00c8b19600cba10200290100006fa21bffcee222004c422200081c3e00601000000|@5887,98433| 5889:C2,112|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffcd0037ff881c3e00601000000da213ff8fa022000fa213ff4d00220047ffffff288013ff48c21a00c8b19600cba1020029e100006fa21bffcd023e004da012000da23e0009010000fde01200881c3e0068801200c|@1966,161| 5890:O3|@24,@397,@5891 5891:S7|73657441646472 5892:S47|50415253455f5452454528292e67656e636f64652837296465636c6172655661727328342973657441646472283329 5893:S37|50415253455f5452454528292e67656e636f64652837296465636c61726556617273283429 5894:O2|@3766,0 5895:O2|@5896,0 5896:O2|-10,@5897 5897:O2|-3,@1110 5898:O2|@5899,0 5899:O2|-10,@5900 5900:O2|-3,@5901 5901:O3|100,@3256,0 5902:C2,804|9e13e002f606201880a1001b8bd02018c4012000d0213ffcd0213ff8d0213ff4de213ff0da213fecd2213fe8d4213fe4d6213fe0fa00a004fa213fdcfa00a008fa213fd8fa00a00cfa213fd496013ff494100008d201200490100002da03600cf40360009fc6a00088013fd4d2012034d0012000400000b301000000d0213ffc92102001d00120344000016688013ffc80a2200122800004d20120001080000a8c21a010d00120384000015e0100000080a22001328000048c21a01010800013ee01200c8b196010ba10200390100006fa21bffcec012024ec222008ea012014ea222004e8012038e8222000da012010f40360009fc6a00001000000ae10000810800069e205e004ec05e00080a5bff93280002680a5a001ea05e004808d60013280001c90100015e805600480a520013280001290100015e6012038e6213ffce401202ce4213ff8e2056000e2213ff4d6012010d4012014d2012018d0012024da01201c7fffffa788013ff4ae1000081080004de205e0049a01202c4000018b01000000ae10000810800047e205e0049a01202c4000018501000000ae10000810800041e205e0043280000a80a5bffdd205e004d00120089a01202c400004f801000000ae10000810800037e205e0043280001c80a5a005ea05e004a810200180a56001328000058c21a00c901000141080000f9a01202c8b19600cba102002a6100006fa21bffce824e004e4056000e424e000a8100013ea056004f606201880a1001b8bd0201830bfffee400007a901000000ae1000081080001be205e004328000098c21a010d005e0049a01202c4000090601000000ae10000810800012e205e0048b196010ba10200390100006fa21bffcea012024ea222008e8012014e8222004e6012000e6222000da012010f40360009fc6a00001000000ae100008e205e00480a4600132800005e2213ffce401202810800009d0213ffcd00120289a01202c40000a5d88013ffca410000888012004d0213ffcd0213ff8a0013ff8de05e000de24200082013ff8e42060048c21a00c88013ff88b19600cba10200290100006fa21bffcda012000da222000d8012004d8222004d601202881c2e00688012044|@5946,131071|116,5,@5903 136,5,@5905 168,5,@5905 380,5,@5907 404,5,@5907 444,5,@5923 556,5,@5939 592,5,@5943 708,5,@5945 5903:C2,664|9e13e002f606201880a1001b8bd0201880a220013280000480a260011080000690102001228000049010200110800004808a200181c3e0060100000032800005de213ffcc40220001080000b808a600184100008113f00bc900220f0f40620209fc6a00088013ffc9010000284102001808a600132800005de213ffcee0260001080000bb825e001ae100008113f00bc900220f0f40620209fc6a00088013ffc90100017ae102001b825e001ba20a001811f401c3280003a808a2001808a200132800005de213ffcec0220001080000b808a2001ac100008113f00bc900220f0f40620209fc6a00088013ffc90100016ac102001808a200132800005de213ffcea02200410800009808a6001113f00bc900220f0f40620209fc6a00088013ffcaa102001808a600132800005de213ffce802600410800009de213ffc113f00bc900220f0f40620209fc6a00088013ffca8102001de213ffcec213ff892100014901000157fffffa788013ff88c21a00c8b19600cba1020029e100006fa21bffcd023e004d2012000d223e0009010000fc401200481c0a0068801200832800005de213ffcec0220001080000b808a6001ac100008113f00bc900220f0f40620209fc6a00088013ffcaa100016ac102001808a600132800005de213ffcea0260001080000bb8256001aa100008113f00bc900220f0f40620209fc6a00088013ffca8100015aa102001b8256001ba25a001811f401c36800011808a6001808a200132800005de213ffce802200410bfff7690100014113f00bc900220f0f40620209fc6a00088013ffca81020019010001410bfff6ef606201832800005de213ffce802600410bfff6892100014a8100008113f00bc900220f0f40620209fc6a00088013ffc92100014a81020019210001410bfff5ef6062018|@5904,127107|84,4,@2144 140,4,@2144 216,4,@2144 268,4,@2144 316,4,@2144 436,4,@2144 492,4,@2144 564,4,@2144 624,4,@2144 5904:S35|50415253455f5452454528292e67656e636f6465283729696e74657273656374283229 5905:C2,328|9e13e002f606201880a1001b8bd0201880a220013280000a80a2600180a2600132800005901020019010200581c3e0060100000081c3e0060100000032800005808a20019010200181c3e0060100000032800005de213ffcc40220001080000b808a600184100008113f00bc900220f0f40620209fc6a00088013ffc9010000284102001808a600132800005de213ffcee0260001080000bb825e001ae100008113f00bc900220f0f40620209fc6a00088013ffc90100017ae102001b825e001ba20a001811f401c3280001e90102001808a200132800005de213ffcec02200410800009808a6001113f00bc900220f0f40620209fc6a00088013ffcac102001808a600132800005de213ffcea0260041080000992100015113f00bc900220f0f40620209fc6a00088013ffcaa102001921000159010001610bfffb4f606201881c3e00601000000|@5906,123011|104,4,@2144 160,4,@2144 232,4,@2144 280,4,@2144 5906:S28|50415253455f5452454528292e67656e636f64652837296571283229 5907:C2,244|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d0213ff48410200188013ff480a2200132800005b820a001ae1000021080000ade012004b91720049e072001d00220048410000ff606201880a1001b8bd0201830bffff38c21a0208b196020ba1020079a100006fa21bffc113f030a900222ecd0236000ee236018c4012000c4236014d003e000d0236010c403ffecc423600cec03fff0ec236008ea03ffe4ea236004b825e001b91f2004a8072001e8213ffca610000d901020019a0120084000030c88013ffcde01200896100008d403fff8d203ffe8d003e00c9a100013de01200cf403600081c6a00488012010|@5922,131071|112,4,@5908 196,5,@5920 5908:C2,596|9e13e002f606201880a1001b8bd02018d0213ffcda213ff8d6213ff4a810000fa6100009921020019010000b7fffff4f88013ff480a2200122800004921020011080000ae4012004d00120087fffff470100000080a2200132800004e401200410800010a21000148c21a0108b196010ba10200390100006fa21bffcd4222008e6222004e2012008e2222000da04a0049e100014f403600081c6a0048801200ca0100013d4213ffc9410200192102001901020019a0120084000006e88013ffcde012008e2213ffce0213ff8d0213ff4c203e01488013ff480a060013280000980a22001113f0004900223d0f40620209fc6a000010000009a10200180a2200132800005b8222001da0060001080000ad8012014b91f2004980720019010000cc2006004f606201880a1001b8bd0201830bfffead6032010d202e00080a260153280000a80a27ff5da213ffc9210000bd00120007ffe597588013ffc94100008108000188c21a00c3280000a8c21a010da213ffc9210000bd00120007ffe596b88013ffc941000081080000e8c21a00c8b196010ba10200394100006fa21bffcd0012000d022a008d622a00484102019c422a000da213ffc88013ffc8c21a00c8b19600cba102002ae100006fa21bffcac102001ec25e004ea012004ea25e00092100017d001201440000195010000008c21a0108b196010ba102003a8100006fa21bffc273f030da604e200e6252000e4012018e4252008d0252004e201201ce221201cd4212018e0012000e021201496100014d4012008d204a00cd0012010da04a008de01200cf403600081c6a00488012014|@5919,131071|44,5,@5905 76,5,@5905 184,5,@5909 228,4,@224 340,5,@3251 380,5,@3251 488,5,@5915 516,4,@5917 5909:C2,360|9e13e002f606201880a1001b8bd02018c4037ffcee00a018b825e001ba22a001811f401c32800005aa10000f9010000981c3e00601000000a810000da6100008a4100009d2053ff89010000a4000004e0100000080a220012280003bb822a001de053ffcea213ffce8213ff8e6213ff4e4213ff0d4213fecc203e01488013fec80a060013280000980a2a001113f0004900223d0f40620209fc6a000010000009010200180a2a00132800005b822a001d00060001080000ada01200cb91f20049a0720019410000dc2006004f606201880a1001b8bd0201830bfffea4000007f01000000da012008b8236001ba222001811f401c2480000bd8012000d8012000b8232001b9172004940720019210000cda01200cde01201010bfffbb88012014b8232001b917200494072001d20120049010000dda01200cde01201010bfffb288012014b91720049e0720019410000f92100012901000139a1000149e10001510bfffaaf6062018|@5914,130295|76,5,@5910 140,4,@224 220,5,@5912 5910:C2,272|9e13e002f606201880a1001b8bd0201880a2600132800005808a60019010200181c3e0060100000032800005de213ffcc40260001080000bb820a00184100008113f00bc900220f0f40620209fc6a00088013ffc9010000284102001b820a001ba222001811f401c32800005808a60019010200581c3e0060100000032800005de213ffcee0260001080000bb825e001ae100008113f00bc900220f0f40620209fc6a00088013ffc90100017ae102001b825e001ba222001811f401c36800005808a60019010200181c3e0060100000032800005de213ffcec02600410bfffca92100016ac100008113f00bc900220f0f40620209fc6a00088013ffc92100016ac1020019210001610bfffc0f6062018|@5911,114819|64,4,@2144 148,4,@2144 232,4,@2144 5911:S32|50415253455f5452454528292e67656e636f6465283729696e73696465283229 5912:C2,576|9e13e002f606201880a1001b8bd02018c4022004ee00a00080a5fff9328000228210000fde213ffcda213ff8ec00a004aa10200188013ff880a5a00132800006ea213ffc90100015de01200481c3e00688012008fa05a004fa213ff8d005a000da0120007fffffe788013ff8de012004b823e001ba222001811f401c248000038210000f82100008aa100001ec01200088012008f606201880a1001b8bd0201830bfffe698100002d2036000d002200c7ffffd2401000000a810000892102001901000147ffffdd70100000080a2200122800051808d2001de03200080a3e0013280001980a3fffdc2213ffc9a102001d203200488013ffc80a2600132800005b82360019010000d1080000ab8222001b917200484072001d20260049a100002f606201880a1001b8bd0201830bffff3b917200490072001c401200081c0a006880120043280001980a3e005c2213ffc9a102001d203200488013ffc80a2600132800005b82360019010000d1080000ab8222001b917200484072001d20260049a100002f606201880a1001b8bd0201830bffff3b917200490072001c401200081c0a006880120043280001990102001c2213ffc9a102001d203200488013ffc80a2600132800005b82360019010000d1080000ab8222001b917200484072001d20260049a100002f606201880a1001b8bd0201830bffff3b917200490072001c401200081c0a0068801200481c060060100000032800005c2213ffcd005200081c0600601000000113f00bc900220f0f40620209fc6a00088013ffc90102001|@5913,127219|176,5,@5903 196,5,@5905 552,4,@2144 5913:S66|50415253455f5452454528292e67656e636f6465283729636f64655061747428372970617474436f64652d6465737061746368283429706174744465707468283129 5914:S68|50415253455f5452454528292e67656e636f6465283729636f64655061747428372970617474436f64652d646573706174636828342966696e6444656570657374283329 5915:C2,660|9e13e002f606201880a1001b8bd0201880a220013280000580a260019010200181c3e0060100000032800004808a200181c3e0060100000032800005de213ffcc40220001080000b808a600184100008113f00bc900220f0f40620209fc6a00088013ffc9010000284102001808a600132800005de213ffcee0260001080000bb825e001ae100008113f00bc900220f0f40620209fc6a00088013ffc90100017ae102001b825e001ba20a001811f401c3280001e808a2001808a200132800005de213ffcec02200410800009808a6001113f00bc900220f0f40620209fc6a00088013ffcac102001808a600132800005de213ffcea0260041080000992100015113f00bc900220f0f40620209fc6a00088013ffcaa102001921000159010001610bfffbaf606201832800005de213ffcec0220001080000b808a6001ac100008113f00bc900220f0f40620209fc6a00088013ffcaa100016ac102001808a600132800005de213ffcea0260001080000bb8256001aa100008113f00bc900220f0f40620209fc6a00088013ffc90100015aa102001b8256001ba25a001811f401c3680002d808a6001808a200132800005de213ffce80220001080000b808a2001a8100008113f00bc900220f0f40620209fc6a00088013ffc90100014a8102001808a200132800005de213ffce602200410800009de213ffc113f00bc900220f0f40620209fc6a00088013ffca6102001de213ffce8213ff8901000137fffff7988013ff88c21a00c8b19600cba1020029e100006fa21bffcd023e004d2012000d223e0009010000fc401200481c0a0068801200832800005de213ffce802600410bfff6992100014a8100008113f00bc900220f0f40620209fc6a00088013ffca6100014a81020019210001410bfff5ff6062018|@5916,129155|80,4,@2144 136,4,@2144 208,4,@2144 256,4,@2144 320,4,@2144 376,4,@2144 452,4,@2144 504,4,@2144 620,4,@2144 5916:S30|50415253455f5452454528292e67656e636f646528372964696666283229 5917:C2,48|9e13e002f606201880a1001b8bd02018d6036004d4022008d2022004d0022000da036008f403600081c6a00401000000|@5918,131071| 5918:S57|50415253455f5452454528292e67656e636f6465283729636f64655061747428372970617474436f64652d6465737061746368283129283129 5919:S54|50415253455f5452454528292e67656e636f6465283729636f64655061747428372970617474436f64652d6465737061746368283429 5920:C2,132|9e13e002f606201880a1001b8bd02018c4037ff4b820a001ba222001811f401c24800005b82220019010200181c3e00601000000b9172004ae072001de213ffcda213ff8d0213ff4901000177fffffed88013ff48c21a00c8b19600cba1020029e100006fa21bffcd023e004da012000da23e0009010000fc401200881c0a0068801200c|@5921,98465| 5921:S30|50415253455f5452454528292e67656e636f646528372966726f6d283229 5922:S45|50415253455f5452454528292e67656e636f6465283729636f64655061747428372970617474436f64652d2f32 5923:C2,1300|9e13e002f606201880a1001b8bd0201880a2600132800011c40260008c21a0108b196010ba10200390100006fa21bffcc4037ff8c4222008ee037fe8ee222004ec037fd4ec222000da037fe4f403600081c6a00401000000a610000fa410000da2100008a0100002c2026004d204a00cd000a0007ffffb4c0100000098100008921020019010000c7ffffbff0100000080a220012280000880a4600592100001901000119a1000129e10001310bfffd7f606201832800026d604bff0d604bff0d402e004d202a000e6213ffce4213ff8d8213ff4fa042004fa213ff094100009d204a000d00420081b3f030f9a0361004000011388013ff0c4012008a4100008d200bfd4d00120047fffefb401000000e2012008e001200cd021200ce4212008de012000de212004d6047fe4d4047fe8d2047fecd0047ff8da047ff09e100010f403600081c6a00488012004d402e004d202a000e6213ffce4213ff8e2213ff4e0213ff0c2213fecd8213fe894100009d204a000d00420081b3f030f9a0363c04000019f88013fe8c4012008ee012010ec05fff0ea05a004e8056000d0213ffcfa00a004fa213ff894100014d205e000d000a0081b3f030f9a036100400000e088013ff8e6012018a4100008d204ffd4d00120087fffef8101000000e2012018d0213ffce4213ff8e0012000e0213ff4d6047fe4d4047fe8d2047fecd0047ff8da047ff0f40360009fc6a00088013ff4de012014b823e001b91f200482072001d0213ffcd201200c90100001da0120187fffff7488013ffcda01201cd8037fec80a3200122800056d60120008c21a00c8b19600cba10200296100006fa21bffc94102001d422e004d2012008d222e0008c21a0148b196014ba10200484100006fa21bffcae102005ee20a00c2d3f0031ac05a250ec20a008d620a004aa102011ea20a000e602200480a4e00132800006e404e004293f0276a8052224108000108c21a01480a4a001328000058c21a00ce804e0001080000a8c21a0148b19600cba102002a8100006fa21bffce6252004a2102025e22520008c21a0148b196014ba102004a0100006fa21bffc1f3f002b9e03e25cde24200ce8242008c424200482102009c2242000d60120008c21a00c8b19600cba10200294100006fa21bffcd202e004d222a004e022a000d0213ffcd0213ff884013ff8ae103ffdee20a000ac013ff8d425a0048c21a00c88013ff88b19600cba10200290100006fa21bffcea012000ea222000e8012004e8222004e601202881c4e0068801202cd402e000d2022000b8226001ba22a001811f401c32800009ee02e004b822a001811f200026800005ee02e004c401202081c0a0068801202480a5e00132800006ec05e004053f02768400a22410800010e602200480a5a001328000058c21a00cc405e0001080000ae60220048b19600cba10200284100006fa21bffcee20a004aa102025ea20a000e602200480a4e00132800006e404e004293f0276a8052224108000108c21a01480a4a001328000058c21a00ce804e0001080000a8c21a0148b19600cba102002a8100006fa21bffce6252004a2102025e22520008c21a0148b196014ba102004a0100006fa21bffce824200cc4242008de012008de24200482102009c22420008c21a00c8b19600cba10200284100006fa21bffcac102001ec20a004e020a000d0213ffcd0213ff8aa013ff8a8103ffde8256000a4013ff8c424a0048c21a00c88013ff88b19600cba10200290100006fa21bffce2012000e2222000e0012004e0222004de01202881c3e0068801202c|@5938,131071|116,5,@5903 136,5,@5905 232,4,@5924 240,5,@5925 264,5,@5822 376,4,@5933 384,5,@5934 436,4,@5924 444,5,@5925 468,5,@5822 652,4,@817 692,4,@4932 780,4,@581 992,4,@4932 1076,4,@4932 5924:O2|@5925,@5462 5925:C2,468|9e13e002f606201880a1001b8bd02018c40220048088a0013280004c80a0a001ee00a00080a5e0013280004401000000de213ffcd2213ff8ac102001ec213ff4173f030f9602e2fcaa10000a153f000f9402a0cc92100015da036004f40360009fc6a00088013ff4e602200080a4e0153280000980a4fff592100008901020097ffe552201000000a8100008108000158c21a00c328000098c21a01092100008901020097ffe551901000000a81000081080000c8c21a00c8b196010ba102003a8100006fa21bffca4102009e4252008d0252004a2102019e22520008c21a00c8b19600cba102002a0100006fa21bffc9e102001de242004c2012000c22420008c21a0148b196014ba10200490100006fa21bffc9a102001da22200ce8222008e022200498102011d8222000d601200481c2e00688012008113f002f9002208c81c3e006010000003280001dde213ffcee02600080a5e0153280000780a5fff590102009353f0164b406a21481c6a00401000000328000078c21a01090102009353f0164b406a21481c6a004010000008b196010ba10200390100006fa21bffcac102009ec222008d2222004aa102019ea22200081c3e00601000000113f030f90022378f40620209fc6a00088013ffc90102001|@5932,131071|64,4,@5926 76,4,@375 128,5,@3251 164,5,@3251 312,4,@660 356,4,@3251 384,4,@3251 444,4,@5930 5926:O10|@126,@127,@128,@129,@1131,@5927,@130,@125,@1120,0 5927:O1|@5928 5928:C2,16|9e13e0029010200181c3e00601000000|@5929,129| 5929:S18|4c45585f28292e6e756c6c4c65782d283129 5930:O3|@24,@397,@5931 5931:S11|6d616b65496e7665727365 5932:S26|56414c55455f4f505328292e6d616b65496e7665727365283329 5933:O2|@5934,@5462 5934:C2,672|9e13e002f606201880a1001b8bd02018c40220048088a0013280004480a0a001de213ffcd2213ff8ae102001ee213ff4173f030f9602e2fcac10000a153f000f9402a0cc92100016da036004f40360009fc6a00088013ff4e802200080a520153280000980a53ff592100008901020017ffe547601000000aa100008108000158c21a00c328000098c21a01092100008901020017ffe546d01000000aa1000081080000c8c21a00c8b196010ba102003aa100006fa21bffca6102001e6256008d0256004a4102019e42560008c21a00c8b19600cba102002a2100006fa21bffca0102001e0246004de012000de2460008c21a0148b196014ba10200490100006fa21bffc82102005c222200cea222008e22220049a102011da222000d801200481c320068801200832800058de213ffcec02600080a5a0153280000c80a5bff5de213ffcda213ff8d0213ff4d4213ff0901020017ffe543d88013ff0ae1000081080001de60120083280000c8c21a010de213ffcda213ff8d0213ff4d4213ff0901020017ffe543188013ff0ae10000810800011e60120088b196010ba102003ae100006fa21bffcaa102001ea25e008d225e004a8102019e825e000de213ffcda213ff8d0213ff4d4213ff088013ff0e6012008ee213ffca4102001e4213ff8173f030f9602e2fc153f000f9402a0ccd2012000d0012004da04e004f40360009fc6a00088013ff88c21a00c8b19600cba102002a2100006fa21bffca0102001e0246004d02460008c21a00c8b19600cba1020029e100006fa21bffce223e004c2012000c223e0008c21a0148b196014ba10200490100006fa21bffc9a102005da22200c193f02ed98032210d8222008de22200496102011d6222000d401201081c2a00688012014113f031090022288f40620209fc6a00088013ffc90102001|@5937,131071|48,4,@5926 60,4,@375 112,5,@3251 148,5,@3251 340,5,@3251 388,5,@3251 480,4,@5926 488,4,@375 612,4,@5715 648,4,@5935 5935:O3|@24,@397,@5936 5936:S9|6d616b654775617264 5937:S24|56414c55455f4f505328292e6d616b654775617264283329 5938:S47|50415253455f5452454528292e67656e636f6465283729636f64655061747428372967656e436f6e73747273283229 5939:C2,1204|9e13e002f606201880a1001b8bd0201880a2200132800011c40220008c21a0108b196010ba10200390100006fa21bffcc4037ff8c4222008ee037fe8ee222004ec037fd4ec222000da037fe4f403600081c6a00401000000a610000fa410000da2100002e0022004d204a00cd000a0007ffff880010000008210000892102001901000017ffff9330100000080a2200122800007e6213ffc901000109a1000129e10001310bfffd9f6062018e4213ff8e2213ff4c2213ff0901000109a1000127fffffd088013ff0da012008d8037ff08c21a0148b196014ba10200496100006fa21bffc153f03119402a3d4d422e000d2037fecd222e00cc4032008c422e008d022e004ee012004ec032004ea05a000d0213ffcd6213ff894100015d2036000d005e0081b3f030f9a0363c07ffffee788013ff8e801200ce6012010e404fff0e204a004e0046000d0213ffcfa052004fa213ff894100010d204e000d00520081b3f030f9a0361007ffffe2888013ff8de012018c2012010c2213ffcd0213ff8da012000da213ff4d603ffe4d4012008d203ffecd003fff8da03fff0f40360009fc6a00088013ff4d8012018d6033fec80a2e00122800056d401200c8c21a00c8b19600cba10200294100006fa21bffc92102001d222a004c4012004c422a0008c21a0148b196014ba102004ae100006fa21bffcac102005ec25e00c2b3f0031aa056250ea25e008d425e004a8102011e825e000e601200ce204e00480a4600132800006e0046004253f0276a404a224108000108c21a01480a42001328000058c21a00ce40460001080000a8c21a0148b19600cba102002a4100006fa21bffce224a0049e102025de24a0008c21a0148b196014ba10200482100006fa21bffc1b3f002b9a03625cda20600ce4206008ee20600494102009d42060008c21a00c8b19600cba10200292100006fa21bffcc4022004c4226004c2226000d0213ffcd0213ff8ae013ff8ac103ffdec25e000aa013ff8d22560048c21a00c88013ff88b19600cba10200290100006fa21bffce8012000e8222000e4012004e4222004e001202481c4200688012028d2022000c402a000b820a001ba226001811f401c3280000aec022004b8226001811f200026800006ec0220049010000aee01201c81c5e0068801202080a5a00132800006ea05a0042f3f0276ae05e224108000108c21a01480a56001328000058c21a00cee05a0001080000a8c21a0148b19600cba102002ae100006fa21bffcec25e004a8102025e825e0008c21a0148b196014ba102004a6100006fa21bffc253f01bba404a3dce424e00cee24e008e2012004e224e004a0102009e024e000c202a00480a0600132800006da0060041f3f02769e03e224108000108c21a01080a36001328000058c21a00cde0060001080000a8c21a0108b19600cba1020029e100006fa21bffcc223e004ae102025ee23e0008c21a0108b196010ba102003aa100006fa21bffcde256008e6256004a8102001e82560008c21a00c8b19600cba102002a6100006fa21bffca4102001e424e004ea24e000d0213ffcd0213ff8a2013ff8a0103ffde02460009e013ff8e623e0048c21a00c88013ff88b19600cba10200290100006fa21bffcda012000da222000d2012004d2222004ee01202481c5e00688012028|@5942,131071|112,5,@5903 132,5,@5905 228,4,@5940 292,4,@5933 300,5,@5934 352,4,@5924 360,5,@5925 508,4,@817 552,4,@4932 640,4,@581 852,4,@4932 940,4,@3766 988,4,@4932 5940:C2,40|9e13e002d003600c80a2200122800005d0036008d003600481c3e0060100000081c3e00601000000|@5941,161| 5941:S64|50415253455f5452454528292e67656e636f6465283729636f64655061747428372967656e45786e436f6e73747273283129636f646544656661756c74283129 5942:S50|50415253455f5452454528292e67656e636f6465283729636f64655061747428372967656e45786e436f6e73747273283129 5943:C2,1392|9e13e002f606201880a1001b8bd0201880a2200132800011c40220008c21a0108b196010ba10200390100006fa21bffcc4037ff8c4222008ee037fe8ee222004ec037fd4ec222000da037fe4f403600081c6a00401000000a610000fa410000da2100002e0022004d204a00cd000a0047ffff71a010000008210000892102001901000017ffff7cd0100000080a2200122800007d8046008901000109a1000129e10001310bfffd9f606201880a32001328000068c21a00c1b3f002f9a03608c1080000b8c21a00c8b19600cba1020029a100006fa21bffcd6032000d623600494103ff5d42360008c21a00c8b19600cba10200292100006fa21bffc90102001d0226004c404a000c42260008c21a00c8b19600cba102002ae100006fa21bffcd225e004da25e0008c21a00c8b19600cba102002ac100006fa21bffcee25a004aa102029ea25a000e6213ffce4213ff8e0213ff4c2213ff0fa046000fa213fecec213fe888013fe880a5e00132800005e605e000a81020051080000c80a52001e404e00080a4bff532800007a8102001ee05e004f606201880a1001b8bd0201830bffff280a520012280000de2012000d00120007ffe53bd010000008c21a00c8b19600cba102002a2100006fa21bffcd0246004a0103ff5e02460008c21a00c8b19600cba102002a0100006fa21bffc9e102001de242004e22420008c21a0148b196014ba10200482100006fa21bffc9a102005da20600cd8012004d8206008e020600496102011d6206000d4012010d202bfd4d00120087fffeb3501000000921000088c21a0108b196010ba10200390100006fa21bffcc402bff8c4222008ee02bfe8ee222004d2222000c2213ffcda02bfe4f40360009fc6a00088013ffcd0213ffcd0012010da0120147fffff5d88013ffcec012018ea05bfec80a5600122800056e80120008c21a00c8b19600cba102002a8100006fa21bffca6102001e6252004e4012004e42520008c21a0148b196014ba102004a2100006fa21bffca0102005e024600c1f3f00319e03e250de246008e824600482102011c2246000d802200480a3200132800006d60320041b3f02769a036224108000108c21a01480a2e001328000058c21a00cda0320001080000a8c21a0148b19600cba1020029a100006fa21bffcd823600494102025d42360008c21a0148b196014ba10200492100006fa21bffc053f002b8400a25cc422600cda226008e2226004ae102009ee226000e80120008c21a00c8b19600cba102002a6100006fa21bffce4052004e424e004d224e000d0213ffcd0213ff8a2013ff8a0103ffde02460009e013ff8e623e0048c21a00c88013ff88b19600cba10200290100006fa21bffcc2012000c2222000da012004da222004d801202481c3200688012028e6052000e4022000b824a001ba24e001811f401c32800009e0052004b824e001811f200026800005e0052004e201201c81c460068801202080a4200132800006de042004233f0276a204622410800010d802200480a3e001328000058c21a00ce20420001080000ad80220048b19600cba102002a2100006fa21bffce024600482102025c2246000d802200480a3200132800006d60320041b3f02769a036224108000108c21a01480a2e001328000058c21a00cda0320001080000a8c21a0148b19600cba1020029a100006fa21bffcd823600494102025d42360008c21a0148b196014ba10200492100006fa21bffcda22600ce2226008c4012004c4226004ae102009ee2260008c21a00c8b19600cba102002a2100006fa21bffc9e102001de246004d2246000d0213ffcd0213ff882013ff89a103ffdda20600096013ff8e222e0048c21a00c88013ff88b19600cba10200290100006fa21bffcd4012000d4222000d2012004d2222004c401202481c0a00688012028|@5944,131071|112,5,@5903 132,5,@5905 184,4,@660 436,5,@3258 568,5,@5822 744,4,@817 784,4,@4932 872,4,@581 1084,4,@4932 1168,4,@4932 5944:S57|50415253455f5452454528292e67656e636f6465283729636f64655061747428372970617474436f64652d666f6c64436f6e73747273283129 5945:C2,112|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffcd0037fd081c3e00601000000da213ff8fa022000fa213ff4d00220047ffffff288013ff48c21a00c8b19600cba1020029e100006fa21bffcd023e004da012000da23e0009010000fde01200881c3e0068801200c|@1966,161| 5946:S34|50415253455f5452454528292e67656e636f6465283729636f646550617474283729 5947:C2,1312|9e13e002f6062018ba21206880a7401b8bd02018c401200080a0a00132800005ee00a0009010200181c3e00688012018ec05e00080a5bfd532800134de213ffcea05e004e8012004808d200132800128de213ffcde213ffcda213ff8d0213ff4d2213ff0d4213fecd6213fe8fa056000fa213fe4fa056004fa213fe0fa00a004fa213fdcfa052000fa213fd8fa052004fa213fd4a6102001e4013fd888013fd480a4a00132800005b824e001a21000131080000ade012038b91720049e072001e404a004a610000ff606201880a1001b8bd0201830bffff3b823e001b91f20049a072001811f200036800004d601203c1080000a01000000d402e000b822a001ba236001811f401c368000040100000010800009b8236001113f0004900223d0f40620209fc6a0000100000098102001b8236001b917200492072001d002c01c9810000880a320013280001c84102001e2213ffcda213ff8d8213ff492103ffd9010000f7ffd126188013ff492100008113f0315900220607ffd10ec01000000133f0315920260707ffd10e801000000d0213ffcd6012018d401202c92102001d00120287ffe236d88013ffc8410000810800007ee012030e2213ffcda213ff8d8213ff488013ff4ee012030ec05e004ea05a000b8256001b9172004a8072001e825a0008c21a0108b196010ba102003a6100006fa21bffce4012020e424e008a2102001e224e004e0012008e024e000de01201080a3e00132800005d0213ffc821000131080001e8c21a014d0213ff8d0213ff4fa03e004fa213ff094013ff492100013d003e0009a012034400000c688013ff08c21a0108b196010ba1020039a100006fa21bffcd8012004d8236000d6012008d6236004d401200cd4236008a610000dde01200088012010f606201880a1001b8bd0201830bfffdf8b196014ba10200490100006fa21bffcda012018da22200cd801204cd8222008d6006008d6222004d401201cd4222000fa006004fa213ffcda012024f40360009fc6a00088013ffc8c21a00c8b19600cba10200292100006fa21bffc84102001c4226004d022600080a2600132800005d2213ffcee012000108000098c21a00cd00120009a0120384000013788013ffcae100008880120048c21a00c8b19600cba102002ac100006fa21bffcee25a004aa102025ea25a000e8012034e6052004e404e000b824a001b91f2004a2072001e224e000de01200480a3e0053280000601000000213f0315a00423b010800005c204e000213f02bba00422e4c204e000ec213ffce0213ff8c2213ff4921020bdd00120507ffd105e88013ff4d0213ffc92103ffdd00120547ffd11c988013ffc92100008d00120007ffd1055010000009a1000088c21a0148b196014ba10200490100006fa21bffcda22200cd801201cd8222008d6012004d6222004d401200cd4222000da012008f40360009fc6a00001000000d2012054c4012018b820a001ba226001b917401cae0720018c21a0148b196014ba102004ac100006fa21bffcaa102001ea25a00cd025a008ee25a004a8103ff1e825a000e6012058b824e001b9172004a4072001ec213ffce2012060e2213ff8e001205ce0213ff4e4213ff0d2213fecde012020de213fe8c2012028c2213fe4d6012034d4012038d201203cd0012040da0120447ffffed388013fe48c21a00c8b19600cba1020029a100006fa21bffcd0236004d8012000d82360009010000dd601204c81c2e00688012068113f031690022074f40620209fc6a00088013ffc90102001de213ffc113f031690022074f40620209fc6a00088013ffc90102001|@5959,131071|280,4,@224 356,5,@509 368,4,@5948 376,5,@496 384,4,@5949 392,5,@496 420,5,@2932 588,5,@5950 804,5,@5953 896,4,@5954 912,4,@5374 944,5,@496 964,5,@509 980,5,@496 1260,4,@5957 1288,4,@5957 5948:S8|5061747465726e20 5949:S14|20697320726564756e64616e742e 5950:C2,448|9e13e002f606201880a1001b8bd020188410000fae10000dac100008901000167ffe23ef01000000aa100002e8022008901000147ffff2d80100000080a220012280005aea213ffca6100017901000147ffff2e601000000de026000b823e001ba102000b91f401c9a0720018c21a0188b196018ba10200584100006fa21bffcae102001ee20a010a8102001e820a00cae102005ee20a008da20a004a8103fede820a000d0213ffcd0213ff8d0213ff4e404fffcea213ff0e6213fecd4213fe8fa022000fa213fe4fa022004fa213fe0de213fdcfa026004fa213fd896013ff494100002d202600890100016da04a008f40360009fc6a00088013fd8e2012004b8246001ba102000b91f401ca0072001de01200ce023e000c2012014da007ffcd8036004d6032000d4012008d622a000b8246001b91f200492072001c401201c80a0a00132800005d0012000d0012000108000068c21a00c9a01202440000020010000008c21a00c8b19600cba102002ae100006fa21bffcec012024ec25e004ea012020ea25e000e8012010d2252000d0252004ee25200890102001e601201881c4e00688012028113f030890022148f40620209fc6a00088013ffc90102001|@5952,131071|32,5,@2944 52,5,@5886 80,5,@5888 348,5,@5951 424,4,@5890 5951:C2,112|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffcd0037ff881c3e00601000000da213ff8fa022000fa213ff4d00220047ffffff288013ff48c21a00c8b19600cba1020029e100006fa21bffcd023e004da012000da23e0009010000fde01200881c3e0068801200c|@1966,161| 5952:S43|50415253455f5452454528292e67656e636f64652837296367457870732831302973657441646472283329 5953:C2,112|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffcd0037fc481c3e00601000000da213ff8fa022000fa213ff4d00220047ffffff288013ff48c21a00c8b19600cba1020029e100006fa21bffcd023e004da012000da23e0009010000fde01200881c3e0068801200c|@1966,161| 5954:O1|@5955 5955:C2,128|9e13e0028c21a0248b196024ba10200884100006fa21bffcae102001ee20a01cae102001ee20a018ae102001ee20a014ee022008ee20a010ac102001ec20a00cec022004ec20a008ea02200cea20a004e8022000e820a0008c21a00c8b19600cba10200290100006fa21bffcc422200484103fe5c422200081c3e00601000000|@5956,127105| 5956:S23|434f44455452454528292e6d6b496e6c70726f63283129 5957:O3|@24,@397,@5958 5958:S6|636745787073 5959:S33|50415253455f5452454528292e67656e636f646528372963674578707328313029 5960:C2,1324|9e13e002f6062018ba21205c80a7401b8bd02018de213ffcda213ff8d0213ff4d2213ff0d4213fecd6213fe88410200188013fe880a2600132800005b820a001ae1000021080000aec012010b91720049e072001d20260048410000ff606201880a1001b8bd0201830bffff3ee213ffcd0012008da05a01cf40360009fc6a00088013ffcd0213ffcd001200c1b3f03179a036208f40360009fc6a00088013ffcea012010808d600132800013a8100008e6056000e404e00080a4bfd532800006a2100008e204e004e804600410800012e0012018113f003890022020f40620209fc6a00001000000a81020011080000ae0012018113f003890022020f40620209fc6a00001000000a6100014a8102001e0012018de042014c203e000d0213ffcd0213ff8d0213ff4e8213ff096013ff894100001d2042018d001200c7fffaed188013ff0da012028d8036014d0032000da01200cf40360009fc6a00001000000d6012028d402e010d202a000c4012014b820a001ba226001b917401cae072001ee22a000b820a001b9172004ac072001d0213ffcd2213ff89410200192102101901000161b0000829a036338f40360009fc6a00088013ff8ea01201cea2220008c21a0088b1960083b100000ba076001a8100006fa21bffca6102005e6252000e401203880a4a0012280000ee20120308c21a00c8b19600cba102002a2100006fa21bffc213f0318a0042148e0246000de012004de2460041080000e82100008e004600c8c21a0108b196010ba102003a2100006fa21bffc1f3f03189e03e234de246000e8246008e024600482100008901020059a012034400001d5010000008c21a0248b196024ba1020089a100006fa21bffc193f03189803230cd8236000c223601cea236018d601200cd6236014d4012000d4236010d2012028d223600cc401203cc4236008ee012044ee2360048c21a00c8b19600cba102002ac100006fa21bffc273f031aa604e144e625a000da25a004e0012030c2213ffce8213ff8d0213ff4de012004de213ff0da012018da213fec961000169410001192102001d0012040da042008f40360009fc6a00088013fecd8012000d603200080a2e0013280000f94102001d0213ffc133f031a920261c0d2213ff8d6012010d401203492102001d00120287ffe209d88013ff89410000810800005d4012028d0213ffc88013ffcd401202880a2a00532800029d201203cd2012000c402600480a0a00132800005c4213ffcd001201c1080000880a22001d001201c9a0120404000036288013ffc8801200480a2200132800007ee022004113f027690022224ee01204081c5e0068801205480a5e00132800006ac100008d0022000ec01204081c5a006880120548c21a00c8b19600cba10200290100006fa21bffcec222004aa102025ea222000e801204081c5200688012054d0012050d0213ffcc4012008c4213ff8ae102005ee213ff4ec01200cec213ff0ea012018ea213fece8012034e8213fe8d601204cd4012048e6026004d201202cd00120389a100013f40360009fc6a00088013fe8e4012000e004a00480a4200132800005e0213ffca21000081080000880a460019a0120404000034a88013ffca21000088801200480a4600132800005e2213ffcde01201c1080000980a3e001d001201c9a0120404000036188013ffc9e1000088801200480a3e00132800007c203e004113f027690022224c201204081c060068801205480a06001328000068c21a00cd003e000da01204081c36006880120548b19600cba10200290100006fa21bffcde2220049a102025da222000d801204081c3200688012054|@5985,131071|140,4,@5961 212,4,@1110 244,4,@1110 316,5,@5452 420,4,I11 516,4,@5967 568,4,@5969 600,5,@5970 628,4,@5971 708,4,@5979 812,4,@5981 840,5,@2932 924,5,@5982 948,4,@4932 1160,5,@5983 1208,5,@5984 1236,4,@4932 5961:O1|@5962 5962:C2,192|9e13e002f606201880a1001b8bd0201880a2200132800005c40220009010200181c3e00601000000ec00a00080a5bfd53280000cde213ffcea00a004a610000fe4022004d2056008901020014000002401000000ae1000081080000ae6213ffcea022004113f03189002210cf40620209fc6a00088013ffcae102001e6213ffcee213ff8901000127fffffde88013ff88c21a00c8b19600cba1020029e100006fa21bffcd023e004da012000da23e0009010000fd201200481c2600688012008|@586,130211|76,5,@5963 100,4,@5965 5963:C2,472|9e13e002f606201880a1001b8bd02018c402600080a0bfe13280001880a0a035ee026008ec05e000aa10000fa8100008901000167ffdffb60100000080a22001228000058c21a00c9010001481c56006010000008b19600cba1020029e100006fa21bffce823e004ec23e0009010000f81c56006010000003280001580a0a021de213ffcee02600488013ffc80a5e00132800005fa05e004ec01200081c5a00688012004fa213ffcd205e0007fffffd588013ffcee01200088012004f606201880a1001b8bd0201830bffff13280001680a0a005de213ffcee02600c88013ffc80a5e00132800005ec05e000ec01200081c5a00688012004fa05e004fa213ffcd205a0047fffffbf88013ffcee01200088012004f606201880a1001b8bd0201830bffff03280000580a0a025d202600810bfffb6f60620183280001580a0bff5de213ffcee02600488013ffc80a5e00132800005fa05e004ec01200081c5a00688012004fa213ffcd205e0007fffffa588013ffcee01200088012004f606201880a1001b8bd0201830bffff13280000580a0bfddd202600810bfff9cf60620183280000c01000000de213ffcfa026008fa213ff8d20260047fffff9288013ff8d2012000de01200410bfff8f8801200881c3e00601000000|@5964,127139|52,5,@2755 5964:S34|50415253455f5452454528292e67656e636f646528372966696e6456617273283229 5965:O3|@24,@397,@5966 5966:S36|66696e64416c6c56617273202d206261646c7920666f726d656420706172736574726565 5967:C2,148|9e13e0028c21a00c8b19600cba10200290100006fa21bffcc4036004c4222004ae103fd9ee2220008c21a00c8b19600cba102002ae100006fa21bffcac102001ec25e004d025e000d0213ffcd0213ff890013ff8ac102001ec22200090013ff8ee2220048c21a00c88013ff88b19600cba10200290100006fa21bffcee012000ee222000ec012004ec22200481c3e00688012008|@5968,114849| 5968:S50|50415253455f5452454528292e67656e636f6465283729636f64654d61746368283829636f646544656661756c742d283129 5969:C2,28|9e13e002d003600884102001c4222000d003600481c3e00601000000|@5968,65697| 5970:C2,132|9e13e002f606201880a1001b8bd02018c4037fe8b820a001ba222001811f401c24800005b82220019010200181c3e00601000000b9172004ae072001de213ffcda213ff8d0213ff4901000177fffffed88013ff48c21a00c8b19600cba1020029e100006fa21bffcd023e004da012000da23e0009010000fc401200881c0a0068801200c|@5921,98465| 5971:C2,1064|9e13e002f606201880a1001b8bd02018a810000fa610000da4100008a210000992102001901000127ffff1480100000080a2200122800008808ca001901020019a1000119e100014f403600081c6a0040100000032800005e8213ffce004a00010800009b8242001113f00bc900220f0f40620209fc6a00088013ffca0102001b8242001b91f20049e072001811f200036800004c204e01c1080000ae8213ffcda006000b8236001ba23e001811f401c36800004e8213ffc10800009b823e001113f0004900223d0f40620209fc6a00088013ffc82102001b823e001b917200498072001d600401c8210000bb8206001b917200492072001b823e001811f200036800004d004e01c1080000ae8213ffcc4022000b820a001ba23e001811f401c36800004e8213ffc10800008b823e001113f0004900223d0f40620209fc6a00088013ffcb823e001b9172004ae072001d222001cec04e01880a5a00532800048e8213ffcea04e00c808d60013280003de8213ffce4056000e204a00080a47fd532800031e8213ffcde04a0048c21a0148b196014ba10200490100006fa21bffcc203e004c222200cda04e004da222008d4222004d803e000d8222000e8213ffce0213ff8da04e008f40360009fc6a00088013ff88c21a00c8b19600cba10200296100006fa21bffc94102001d422e004d022e000d0213ffcd0213ff892013ff8d0012000d022600084013ff8d620a0048c21a00c88013ff88b19600cba10200290100006fa21bffcee012000ee222000ec012004ec222004ea01200c81c5600688012010113f031990022350f40620209fc6a00088013ffc90102001e8213ffc113f031990022350f40620209fc6a00088013ffc90102001e8213ffce6213ff8e0213ff4de213ff0ea04e01488013ff080a560013280000980a3e001113f0004900223d0f40620209fc6a00001000000a810200180a3e00132800005b823e001e80560001080000ae8213ffcb91f2004a60720019e100013ea056004f606201880a1001b8bd0201830bfffeaa610200188013ffc80a5200132800005b824e001a41000131080000ad2012000b9172004a2072001e8052004a6100011f606201880a1001b8bd0201830bffff3901000124000005401000000e201200ce0046010de012004b823e001ba242001b917401c820720018c21a0188b196018ba1020059a100006fa21bffc98102001d823601096102001d623600c94102005d4236008c223600492103fedd22360008c21a0148b196014ba10200484100006fa21bffcae102001ee20a00cda20a008d020a004ac102011ec20a0008c21a00c8b19600cba102002aa100006fa21bffca8102001e8256004c4256000d0213ffcd0213ff8a6013ff8e4012008e424e0009e013ff8ea23e0048c21a00c88013ff88b19600cba10200290100006fa21bffcc2012000c2222000da012004da222004d801201881c320068801201c|@5978,131071|40,5,@5905 104,4,@2144 192,4,@224 304,4,@224 580,4,@5972 608,4,@5972 668,4,@224 816,5,@5974 5972:O3|@24,@397,@5973 5973:S34|636f64654d61746368202d206261646c7920666f726d656420706172736574726565 5974:C2,276|9e13e002f606201880a1001b8bd0201880a26001328000058410000f9010200181c3e00601000000ae100008d00260007ffe1f2a01000000ac100002ea022008901000157fffee130100000080a220012280002bec213ffca8100017901000157fffee2101000000de022000da03e0008c21a0188b196018ba10200584100006fa21bffcae102001ee20a010aa102001ea20a00cae102005ee20a008da20a004aa103fedea20a000b8252001b91f20049a072001ec213ffcc4213ff8d20260049010000d7fffffcf88013ff88c21a00c8b19600cba10200292100006fa21bffcd0226004d0012000d022600090100009c401200481c0a00688012008113f031a900220bcf40620209fc6a00088013ffc90102001|@5977,127139|48,5,@2944 68,5,@5886 96,5,@5888 252,4,@5975 5975:O3|@24,@397,@5976 5976:S11|6d616b654172674c697374 5977:S37|50415253455f5452454528292e67656e636f64652837296d616b654172676c697374283229 5978:S43|50415253455f5452454528292e67656e636f6465283729636f64654d61746368283829636f64652d283329 5979:C2,44|9e13e002f606201880a1001b8bd02018d4022008d2022004d0022000da036004f403600081c6a00401000000|@5980,131071| 5980:S43|50415253455f5452454528292e67656e636f6465283729636f64654d61746368283829636f64652d283129 5981:S27|4d61746368657320617265206e6f7420657868617573746976652e 5982:C2,112|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffcd0037fbc81c3e00601000000da213ff8fa022000fa213ff4d00220047ffffff288013ff48c21a00c8b19600cba1020029e100006fa21bffcd023e004da012000da23e0009010000fde01200881c3e0068801200c|@1966,161| 5983:C2,112|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffcd0037fbc81c3e00601000000da213ff8fa022000fa213ff4d00220047ffffff288013ff48c21a00c8b19600cba1020029e100006fa21bffcd023e004da012000da23e0009010000fde01200881c3e0068801200c|@1966,161| 5984:C2,112|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffcd0037fbc81c3e00601000000da213ff8fa022000fa213ff4d00220047ffffff288013ff48c21a00c8b19600cba1020029e100006fa21bffcd023e004da012000da23e0009010000fde01200881c3e0068801200c|@1966,161| 5985:S35|50415253455f5452454528292e67656e636f6465283729636f64654d61746368283829 5986:C2,468|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d0213ff4d2213ff0d4213fecd6213fe8d6012004153f03069402a38c92102005d0013ff0da036014f40360009fc6a00088013fe8c4012010ee00a004ec05e000d0213ffcd0213ff8d0213ff496013ff894100016d200a010d00120007fffaa4688013ff4ea01201ce8056004d0052000da012008f40360009fc6a000010000008c21a0088b1960083b100000ba076001a6100006fa21bffca4102005e424e000e201201c8c21a0108b196010ba102003a0100006fa21bffc1f3f031b9e03e1a4de242000e6242008c204600cc2242004e6213ffc1b3f001f9a03625cda213ff8d0213ff4d8012000d8213ff0173f031b9602e2149410001092102005d0012018da046008f40360009fc6a00088013ff0d6012000d402e00080a2a00132800016ac102001d2012020c4026004ee00a000b825e001811f20002480000fac102001d0213ffc2b3f031baa056304ea213ff8d6012018d401202892102001d00120147ffe1c5488013ff8ac10000810800005d2012000d0213ffc88013ffcd2012000d002600480a2200132800006d0213ffcd001200cc401202881c0a00688012034d001200c9a0120284000006d88013ffcc401202c81c0a00688012038|@5994,131071|44,4,@5878 116,5,@5452 208,4,@5987 236,4,@485 260,4,@5989 348,4,@5992 376,5,@2932 448,5,@5993 5987:C2,28|9e13e002d003600884102001c4222000d003600481c3e00601000000|@5988,65697| 5988:S48|50415253455f5452454528292e67656e636f6465283729636f646542696e64283629636f646544656661756c74283129 5989:O1|@5990 5990:C2,152|9e13e002f606201880a1001b8bd02018a810000fe602200492102001d00220007fffee860100000080a2200122800008d0213ffc901020019a1000139e100014f403600081c6a00401000000d0213ff8a4013ff8a2103ffde224a000a0013ff89e102001de2420048c21a00c88013ff88b19600cba10200290100006fa21bffcc2012000c2222000da012004da22200481c5200688012008|@5991,131071|32,5,@5905 5991:S42|50415253455f5452454528292e67656e636f6465283729636f646542696e64283629636f64652d283129 5992:S26|5061747465726e206973206e6f7420657868617573746976652e 5993:C2,112|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffcd0037fd481c3e00601000000da213ff8fa022000fa213ff4d00220047ffffff288013ff48c21a00c8b19600cba1020029e100006fa21bffcd023e004da012000da23e0009010000fde01200881c3e0068801200c|@1966,161| 5994:S34|50415253455f5452454528292e67656e636f6465283729636f646542696e64283629 5995:C2,2596|9e13e002f6062018ba21205880a7401b8bd020188c21a0348b1960343b100000ba07600c84100006fa21bffc2f3f031eae05e220ee20a000ae102001ee20a004ae102001ee20a008ae102001ee20a00cae102001ee20a010ae102001ee20a014ae102001ee20a018ae102001ee20a01cae102001ee20a020ae102001ee20a024ae102001ee20a028ae102001ee20a02c8c21a0208b1960203b100000ba076007ae100006fa21bffc2d3f0325ac05a2f4ec25e000ac102001ec25e004ac102001ec25e008ac102001ec25e00cac102001ec25e010ac102001ec25e014ac102001ec25e0188c21a01c8b19601cba102006ac100006fa21bffc2b3f0329aa0563ccea25a000ea036024ea25a014e8036018e825a010e6036028e625a00cc425a008e4036030e425a004e2036008e225e004e003600ce025e008c2036010c225e00cd8036014d825e010ec25e014d225e018c02dfffcea20a004e220a008e4036034e420a00cee20a010da20a014e6036030e620a018e8036038e820a01ce020a020ea036028ea20a024e203602ce220a028e0036018e020a02cc028bffc80a2200132800008808a200194102001d422e000d222e0049010200181c3e0060100000032800008d0213ffcd0213ffcfa022000fa213ff8d0013ff81080000988013ff8de213ff8113f00bc900220f0f40620209fc6a00088013ff89010200180a4200132800004c20460001080002082102001d8022004b8206001ba232001811f401c2280001a82102001de213ffcda213ff8d2213ff4d4213ff0d6213fecc4213fe8ee213fe4ec213fe09410000cd0013ff0da036028f40360009fc6a00088013fe08c21a00c8b19600cba10200282100006fa21bffc96102001d6206004d02060001080000cda012024de213ffcda213ff8d2213ff4d4213ff0d6213fecc4213fe8ee213fe4ec213fe088013fe0da012024808b60013280000501000000d803600010800009d0213ffc113f00bc900220f0f40620209fc6a0000100000098102001d0213ffcd0213ff8d6032000d402e00080a2bfe51280006d88013ff8c2213ffcd6213ff8fa02e004fa213ff4d2013ff488013ff480a2600132800005d0026000901020011080000ad00120009a01203840000dbd01000000d2026004f606201880a1001b8bd0201830bffff39a01203840000dfd01000000d0213ffcd00120001b3f032f9a0362fcf40360009fc6a00088013ffcd0213ffcd0213ff8c401203094013ff8d201202cda00a004f40360009fc6a00088013ff8ee012008808de0013280002c8c21a00cec05e00480a5a001328000128c21a00c8c21a00c8b19600cba102002aa100006fa21bffce8012000e8256004e605e000e6256000a4012018ea24a000a2012018e0012004e024600410800159ec0120448b19600cba102002aa100006fa21bffcee256004a8103fdde82560008c21a00c8b19600cba102002a6100006fa21bffce4012000e424e004ea24e000a2012018e6246000a0012018de012004de24200410800143ec0120448b19600cba102002ac100006fa21bffcee25a004aa103fddea25a0008c21a00c8b19600cba102002a8100006fa21bffce6012000e6252004ec252000a4012018e824a000a2012018e0012004e02460041080012dec01204480a2bfc53280002880a2a029d202e010d0026000c2213ffcd6213ff8d0213ff4d002e0049a01202c400012b988013ff4d0213ffcd0213ff8c401202cd0213ff494013ff8d2012028d0012000da00a004f40360009fc6a00088013ff4ec01200480a5a00132800005d0012000ee01200010800007aa0120189a0120444000152a01000000ae100008aa012018ee256000a8012018e6012008e625200410800104ec0120443280004380a2a015d202e010d0026000c2213ffcd0213ff8d0213ff4fa02e008fa213ff0d0213fecc402e00c96013ff4d4012018d201201c90100002da0120207ffffe9d88013fecd0213ffcd0213ff896013ff8d401202cd201200cd0012004da0120347ffffe9488013ff8d0213ffcd0213ff8ee01203c94013ff8d2012038d0012008da05e004f40360009fc6a00088013ff8ea01200080a5600132800005d0012008ec0120081080000780a5a0019a0120504000151601000000ac10000880a5a00132800005ec213ffce801201810800009a6012024d00120189a0120504000152e88013ffca810000888012004a6012024e824e000a4012024e2012004e224a004108000c08801200c3280002c80a2a001c2213ffcfa02e004fa213ff8d0013ff89a01202c4000153f88013ff8d0213ffcd00120001b3f03339a036248f40360009fc6a00088013ffcd0213ffcd0213ff8d201202c94013ff8c4026004d20120289a100002f40360009fc6a00088013ff8ec01200080a5a00132800005d0012008ee01200810800007aa0120149a0120404000160801000000ae100008aa012014ee256000a8012014e6012004e62520041080008fd0213ffc3280003f80a2a00dc2213ffcfa02e004fa213ff8fa02e008fa213ff4d2013ff488013ff480a2600132800005c40260009010200110800010d0213ffcee00a004ec05e000ea00a010e8056000e402600492100014901000167ffdf8450100000092100012f606201880a1001b8bd0201830bfffedd0213ff896013ff8d4012024d2012028d0012004da01202c7ffffe1b88013ff8c401200880a0a00132800005ec00a000ae1020011080000eac012014ea05a004e8056000e400a00492102001901000147ffdf82a0100000084100012f606201880a1001b8bd0201830bfffefea012000ea25a000a8012014e6012004e625200410800050d0213ffc3280003380a2a02d8c21a00c8b19600cba10200292100006fa21bffcd001201cd022600484102001c4226000c2213ffcee02e00888013ffc80a5e00132800005d0213ffcac1000091080001aaa012004d0213ff8fa05e004fa213ff494013ff8d005e0009a012030400015c888013ff48c21a00c8b19600cba102002aa100006fa21bffce8012004e8256000e6012008e625600492100015ee0120008801200cf606201880a1001b8bd0201830bfffe3e805a000e8256000a6012004e405a004e424e00410800018d0213ffc3280000e92012000d202e008d0026000c4012020c2213ffc94012000d201201cda00a004f40360009fc6a00088013ffc1080000ad0213ffc90102001d022600084012000ee01201cee20a004c2213ffc88013ffcd0213ffcd0213ff8d0213ff4d0213ff088013ff0d0213ffcd0213ff8d0213ff4d0213ff088013ff08801200cec012044808da0013280000501000000ea05a00410800009d0213ffc113f00bc900220f0f40620209fc6a00001000000aa102001d0213ffcd0213ff896013ff8d4012030d201201c90100015da0120387ffffd9888013ff8e601200080a4e00132800005d0012020e80120201080000780a520019a01204c400015d801000000a810000880a5200132800005e8213ffce401201c10800009e2012034d001201c9a01204c400015f088013ffca410000888012004e2012034e4246000e0012004e024600490102001de01204481c3e00688012050|@6115,131071|44,4,@5996 168,4,@6028 248,4,@6049 484,4,@2144 712,4,@2144 816,5,@6053 848,5,@6055 864,4,@6076 1232,5,@6078 1316,5,@6096 1536,5,@6097 1580,5,@6098 1652,5,@6099 1668,4,@6107 1760,5,@6109 1888,5,@2736 1996,5,@2736 2156,5,@6110 2412,4,@2144 2504,5,@6113 2548,5,@6114 5996:C2,3396|9e13e002f606201880a1001b8bd02018da213ffcd4213ff8d6213ff4d2213ff0c40220008088a0010280002b88013ff080a0bfcd268000280100000080a0a03d34800025010000002f3f031eae05e282ba00a031fa05c01d81c5c01d01000000000004e200000c6600000072000001f20000007200000082000000720000087a0000007200000072000006f200000b6600000bea000000720000026e0000036e000000720000007200000072000006fe0000093600000472000006d2000007a600000072000008f60000040e000006c200000a82113f002b9002225c81c3e00688012010d4022008d202a0008410000fee02200c901000097ffe1a5301000000de02200480a3e00132800013808be001da01200cd4036008ec02a000ea05e000d621200cd603600494100015a810000992100016901000141b3f03219a0363809e100002353f0321b406a38c81c6a0048801200c32800031c201200cc201200cda006008d8036000d405e000c4213ffcd6213ff8d6006004ae1000099210000c901000171b3f02c69a0363087fffa7df88013ff8ec02200080a5a0153280000980a5bff59210000890102005de012000353f0164b406a21481c6a0048801201432800009aa1000089210000890102005de012000353f0164b406a21481c6a004880120148c21a0108b196010ba10200390100006fa21bffca8102005e8222008ea222004a6102019e6222000e401200081c4a00688012014da006008d8036000d405e000d621200cd6006004ae1000099210000c901000171b3f02c69a0363089e100002353f02c6b406a32881c6a0048801200cec022004ea05a000de213ffcd0213ff894100015d2022008d002200cda03600cf40360009fc6a00088013ff8808a20013280000e01000000e80220008c21a00c8b19600cba10200290100006fa21bffce8222004a6103ff5e6222000e401200081c4a00688012014113f002b9002225ce801200081c5200688012014de213ffcfa022004fa213ff8d00220087fffff4888013ff8ec012000ea05a00080a57fe132800018d0213ffce805a008e6052000e405a00ce204a000e0012014de042008c203e000da042004da212014d801200cd8212010961000119410000192100008901000131b3f02c69a03631cde012004353f02ddb406a24081c6a00488012010d601200cd4012010d201200890100016da0120147fffff2688013ffc8c21a00c8b19600cba102002a8100006fa21bffca6102001e6252004e4012000e4252000a21000088c21a0148b196014ba10200490100006fa21bffca0102001e022200ce2222008e82220049e102011de222000c201200881c060068801201cde213ffcfa022008fa213ff8fa02200cfa213ff4d00220047fffff0688013ff4d0213ffcd6012010d4012014d201200cd0012000da0120187ffffefe88013ffcd0213ffcd6012014d4012018d2012010d0012008da01201c7ffffef688013ffcac1000088c21a0148b196014ba10200490100006fa21bffcec22200cea012000ea222008e8012004e8222004a6102009e6222000e401201081c4a00688012024ec022004808da00132800010de213ffcea05a00480a5600132800005de213ffcd005a00010bffedc88012010d00220049a01200c4000028d88013ffce801200081c5200688012014d00220049a01200c4000028688013ffcea01200081c5600688012014ec02200c808da00132800012de213ffcea05a00480a5600132800006de213ffce805a000d005200410bffec28801201092100016d00220089a01200c400002ed88013ffce801200081c520068801201492100016d00220089a01200c400002e588013ffcea01200081c5600688012014de213ffcd0213ff8fa022004fa213ff4fa02200cfa213ff0ec013ff088013ff0901000167ffd44df0100000080a220012280000e90100016901000167ffd44ea01000000d2022004d00220007ffd988801000000ac100008f606201880a1001b8bd0201830bfffef7ffd98ab0100000080a2200122800007aa102001901000167ffd98b601000000ea022000aa1d600480a560012280000daa102001e801201c273f0302a604e27ce6213ffcd6012014d401200892102005d00520047ffe179788013ffcaa100008d00120007fffe29d0100000080a2200532800006d20120002b3f002daa05615c10800011e401201cd00120047fffe32d010000008c21a0108b196010ba102003aa100006fa21bffcd0256008293f002da805215ce8256004a6102019e6256000e401201ce204a008e0046000b8242001b91720049e072001ea213ffcde213ff89210208dd00120187ffd04e688013ff8d201200c7ffd04e3010000008c21a0248b196024ba10200882100006fa21bffc9a102001da20601c98102001d820601896102001d620601494102005d420601092102001d220600cc4012000c4206008d0206004ee012004ee2060008c21a00c8b19600cba10200290100006fa21bffcc2222004ac103fe5ec222000ea01201481c5600688012028113f002f9002208c81c3e00688012010de213ffcd00220049a01200c400003ba88013ffcec01200081c5a00688012014d002200810bffe2b880120108c21a0088b1960083b100000ba076001ac100006fa21bffcaa102001ea25a000de213ffc961000089210200190100016da036010f40360009fc6a00088013ffc80a2200132800007e8022004113f027690022224e801200081c520068801201480a5200132800006a6100008d0022000e601200081c4e006880120148c21a00c8b19600cba10200290100006fa21bffce6222004a4102025e4222000e201200081c4600688012014d0213ffcd0213ff8de213ff4fa022008fa213ff096013ff8d002200cda036014f40360009fc6a00088013ff0d201200cd00120009a01201c400003eb0100000080a2200132800005d0213ffcec0120081080000980a5a001d00120089a01201c4000047c88013ffcac1000088801200480a5a00132800007ea05a004113f027690022224ea01200481c560068801202080a56001328000068c21a00cd005a000e801200481c52006880120208b19600cba10200290100006fa21bffcec222004a8102025e8222000e601200481c4e00688012020de213ffcd00220049a01200c400003c188013ffc80a2200132800007ec022004113f027690022224ec01200081c5a0068801201480a5a00132800006aa100008d0022000ea01200081c56006880120148c21a00c8b19600cba10200290100006fa21bffcea222004a8102025e8222000e601200081c4e00688012014de213ffcd00220047ffffda888013ffcac1000088c21a00c8b19600cba10200290100006fa21bffcec222004aa103fd9ea222000e801200081c5200688012014de213ffcd0213ff8fa022008fa213ff4d00220047ffffd9588013ff4ec012018d0213ffcd0012000da05a01cf40360009fc6a00088013ffcea022004e605600080a4fffd3280001501000000e405600492102001d002200c7fffe9110100000080a220012280000901000000901000129a01201c4000043601000000a810000810800009e401201c293f002fa805211c10800005e401201c293f002fa805211ce401201c8c21a00c8b19600cba102002a2100006fa21bffc213f0325a00421d4e0246000e4246004e8213ffcde012018de213ff8c2012010c2213ff4e2213ff09a102005da213fecd604a004153f028e9402a204d2012004d0012008da04a018f40360009fc6a00088013fec981000088c21a0148b196014ba10200490100006fa21bffcd6012000d622200cd8222008d4012004d422200492103fe9d2222000c401201081c0a00688012024de213ffcfa022004fa213ff8d00220087ffffd4388013ff8d0213ffcd601200cd4012010d2012008d0012000da0120147ffffd3b88013ffc8c21a00c8b19600cba102002ac100006fa21bffc2b3f0325aa056258ea25a004d025a0008c21a00c8b19600cba102002a8100006fa21bffcec252004a6102025e62520008c21a0148b196014ba102004a4100006fa21bffc233f002fa204608ce224a00ce824a008e0012000e024a0049e102009de24a0008c21a0108b196010ba10200390100006fa21bffc82102001c2222008e42220049a103ffdda222000d801200881c320068801201cde213ffcd0213ff8fa022008fa213ff4d00220047ffffd0988013ff4ec0120188c21a00c8b19600cba102002aa100006fa21bffc293f0325a8052270e8256000ec256004e6012014e6212018e401200ce4212014ea212010a2102001e221200cd605a00494100008d2012000d0012004da05a018de012008f403600081c6a0048801200cde213ffcfa022008fa213ff8d00220047ffffce988013ff8d0213ffcd601200cd4012010d2012008d0012000da0120147ffffce188013ffcac1000088c21a0148b196014ba10200490100006fa21bffc2b3f002faa05608cea22200cec222008e8012000e8222004a6102009e6222000e401200881c4a0068801201cde213ffcfa022008fa213ff8d00220047ffffcca88013ff8d0213ffcd601200cd4012010d2012008d0012000da0120147ffffcc288013ffcac1000088c21a0148b196014ba10200490100006fa21bffcec22200c2b3f002daa056150ea222008e8012000e8222004a6102009e6222000e401200881c4a0068801201c|@6027,131071|72,4,$5996+98 212,4,@581 248,5,@2944 312,4,@5997 324,4,@5998 388,4,@5462 396,5,@5464 432,4,@3251 468,4,@3251 568,4,@5462 580,4,@5464 700,4,@581 824,4,@5463 836,4,@5641 1188,5,@6000 1216,5,@6000 1296,5,@6003 1328,5,@6003 1384,5,@1606 1408,5,@1607 1424,5,@2100 1452,5,@2104 1476,5,@2105 1508,4,@5847 1536,5,@2932 1552,5,@5848 1572,4,@623 1592,5,@5855 1624,4,@623 1684,5,@496 1696,5,@496 1828,4,@660 1856,5,@6015 1964,4,@4932 2112,5,@6017 2152,5,@6020 2180,4,@4932 2280,5,@6017 2300,4,@4932 2544,5,@5905 2572,5,@6021 2592,4,@668 2608,4,@668 2640,4,@6022 2692,4,@5051 2864,4,@6024 2932,4,@660 3068,4,@6026 3228,4,@660 3356,4,@622 5997:O2|@5998,@5463 5998:C2,296|9e13e002f606201880a1001b8bd020188410000fae10000dac100008901000167ffde97201000000de02200080a3fffd3280000fb8226001c2012000d6212000c2213ffc9610000a94100009133f002f9202608c90100016da05e0049e100002f403600081c6a00488013ffcb917200482072001c4213ffcd6213ff8da012000da213ff49610000a94100001133f002d9202615c90100016da05e004f40360009fc6a00088013ff48c21a0248b196024ba10200898100006fa21bffc96102001d623201c94102001d423201892103ffdd223201484102005c4232010ae102001ee23200cac102005ec2320082b000083aa0563d8ea232004d02320008c21a00c8b19600cba10200290100006fa21bffcd8222004a8103fe5e8222000e601200081c4e00688012008|@5999,131071|32,5,@2659 76,4,@660 140,4,@623 236,4,I48 5999:S29|56414c55455f4f505328292e636f6465457846756e6374696f6e283529 6000:C2,220|9e13e002f606201880a1001b8bd02018da213ffcde213ff89a013ffc4000003788013ff88c21a00c8b19600cba10200284100006fa21bffcd020a004ae102029ee20a000c4213ffc88013ffc80a2200132800005ea022000ac1020051080000c80a5a001e805600080a53ff532800007ac102001d0022004f606201880a1001b8bd0201830bffff280a5a00122800011d0012000d00120007ffe43ed01000000a61000088c21a00c8b19600cba10200290100006fa21bffce6222004a4103ff5e4222000e201200481c460068801200ce601200481c4e0068801200c|@6002,131071|28,5,@6001 152,5,@3258 6001:C2,156|9e13e002f606201880a1001b8bd0201880a2200132800005c40360009010200181c3e00601000000de213ffcda213ff8fa022004fa213ff4d600bff8d400bffcd200bff4d0022000da00a000f40360009fc6a00088013ff4d0213ffcd0012000da0120047fffffe788013ffc8c21a00c8b19600cba102002ae100006fa21bffcd025e004ec012000ec25e00090100017ea01200c81c5600688012010|@586,131071| 6002:S50|50415253455f5452454528292e67656e636f6465283729636f646553657175656e6365283429636f646567656e2834292f36 6003:C2,168|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d0213ff4d2213ff08410200188013ff080a2600132800005b820a001ae1000021080000aee213ffcb91720049e072001d20260048410000ff606201880a1001b8bd0201830bffff3d2012000113f0322900223a89a01200c4000004088013ffcac1000088c21a00c8b19600cba10200290100006fa21bffcec222004aa102025ea222000e801201081c5200688012014|@6014,131071|100,4,@6004 112,5,@6009 6004:O1|@6005 6005:C2,32|9e13e002de213ffc113f0322900223ecf40620209fc6a00088013ffc90102001|@6008,129|8,4,@6006 6006:O3|@24,@397,@6007 6007:S17|6d697373696e6720696e207265636f7264 6008:S51|50415253455f5452454528292e67656e636f6465283729636f646553657175656e6365283429636f646567656e283429283129 6009:C2,536|9e13e002f606201880a1001b8bd0201880a2600132800039c4026000de213ffc92100008d0037ff07fff564b88013ffc8c21a00c8b19600cba10200284100006fa21bffcd020a004ae102029ee20a000c4213ffc88013ffc80a2200132800005ea022000ac1020051080000c80a5a001e805600080a53ff532800007ac102001d0022004f606201880a1001b8bd0201830bffff280a5a0012280000de6012000d00120007ffe4313010000008c21a00c8b19600cba102002a6100006fa21bffcd024e004a4103ff5e424e0008c21a00c8b19600cba10200290100006fa21bffca4102001e4222004e6222000e201200481c4600688012008ee037ffcde213ffcda213ff8d0213ff4fa00a000fa213ff0fa026004fa213fecd605fff8d405fffcd205fff4d000a004da05e000f40360009fc6a00088013fecec01200cea05bffce8056000e6052008e404e000d0213ffcd0213ff896013ff894100012d20520207fffa1e388013ff8e2012014e0047ff8de0420009210000fd001200c7fffdfcf01000000c2012014da007ffcd80360008c21a0188b196018ba10200596100006fa21bffc153f03239402a288d422e000d022e010d2012010d222e00cd0012004d022e008c4032008c422e004d20120089010000b9a1000017fffff8b9e13e00280a2200132800006d0213ffcd0012000ee01201881c5e0068801201cd00120009a0120184000003988013ffcee01201c81c5e00688012020|@6013,131071|40,5,@4948 164,5,@3258 352,5,@5452 380,5,@5855 420,4,@6010 516,5,@6012 6010:C2,76|9e13e002f606201880a1001b8bd02018c4036010b820a001ba222001811f401c32800008da03600cee036004d005e000da036008f403600081c6a00401000000f403600081c6a00401000000|@6011,131071| 6011:S67|50415253455f5452454528292e67656e636f6465283729636f646553657175656e6365283429636f646567656e2834296465636c6973742832296c6f6f6b466e283129 6012:C2,112|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffcd0037fe481c3e00601000000da213ff8fa022000fa213ff4d00220047ffffff288013ff48c21a00c8b19600cba1020029e100006fa21bffcd023e004da012000da23e0009010000fde01200881c3e0068801200c|@1966,161| 6013:S58|50415253455f5452454528292e67656e636f6465283729636f646553657175656e6365283429636f646567656e2834296465636c697374283229 6014:S50|50415253455f5452454528292e67656e636f6465283729636f646553657175656e6365283429636f646567656e2834292f38 6015:C2,356|9e13e002f606201880a1001b8bd0201880a2200132800006de213ffc113f002f9002208c81c3e00601000000da213ff8fa022004fa213ff4d6037ff8d4037ffcd2037ff4d0022000da036000f40360009fc6a00088013ff4d0213ffcd0012000da0120047fffffe788013ffc8c21a00c8b19600cba10200284100006fa21bffcae102001ee20a004d020a0008c21a00c8b19600cba102002ac100006fa21bffcc425a004ea012000ea25a0008c21a00c8b19600cba102002a8100006fa21bffcec252004a6102029e6252000e8213ffc88013ffc80a5a00132800005e205a000a41020051080000c80a4a001e004600080a43ff532800007a4102001ec05a004f606201880a1001b8bd0201830bffff280a4a00122800011d0012000d00120007ffe41f7010000009e1000088c21a00c8b19600cba10200290100006fa21bffcde22200482103ff5c2222000da01201081c3600688012014de01201081c3e00688012014|@6016,131071|28,4,@660 288,5,@3258 6016:S59|50415253455f5452454528292e67656e636f6465283729636f646553657175656e6365283429636f646567656e283429636f6e734c697374283129 6017:C2,384|9e13e002f606201880a1001b8bd0201880a2200132800005c40220009010200181c3e00601000000ee036000ec05e02c80a5a00132800004ea05e02810800021aa102001e8056000e600a004b8252001ba24e001811f401c2280001aaa102001de213ffcda213ff8d2213ff4fa00a000fa213ff0e6213fecfa022004fa213fe894100013d0037ffcda05e024f40360009fc6a00088013fe88c21a00c8b19600cba102002aa100006fa21bffca4102001e4256004d02560001080000de8012010de213ffcda213ff8d2213ff4fa00a000fa213ff0fa00a004fa213fecfa022004fa213fe888013fe8e8012010ea213ffcd6012004d4053ffcd201200cd0012008da052000f40360009fc6a00088013ffcd0213ffcd2012010d0012004da0120147fffffb888013ffc8c21a00c8b19600cba102002a6100006fa21bffcd024e004e4012000e424e00080a4e00132800006e6213ffcd0012004e201201c81c4600688012020d00120049a01201c4000000c88013ffce201202081c4600688012024|@6019,131071|364,5,@6018 6018:C2,112|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffcd0037fe081c3e00601000000da213ff8fa022000fa213ff4d00220047ffffff288013ff48c21a00c8b19600cba1020029e100006fa21bffcd023e004da012000da23e0009010000fde01200881c3e0068801200c|@1966,161| 6019:S59|50415253455f5452454528292e67656e636f6465283729636f646553657175656e6365283429636f646567656e283429636f64654c697374283229 6020:C2,112|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffcd0037fe081c3e00601000000da213ff8fa022000fa213ff4d00220047ffffff288013ff48c21a00c8b19600cba1020029e100006fa21bffcd023e004da012000da23e0009010000fde01200881c3e0068801200c|@1966,161| 6021:C2,180|9e13e002f606201880a1001b8bd0201880a2200132800005c40220009010200181c3e00601000000ee036000ec05e008ea05a000de213ffcda213ff8fa022004fa213ff4e8037ff8e8213ff0d605e004153f000f9402a0cc92100015d000a0081b3f02c69a0363087fffa16f88013ff0d0213ffcd0012000da0120047fffffe188013ffc8c21a00c8b19600cba102002a6100006fa21bffcd024e004e4012000e424e00090100013e201200c81c4600688012010|@586,131071|80,4,@375 96,4,@5462 104,5,@5464 6022:C2,48|9e13e002f606201880a1001b8bd02018d602200cd4022008d2022004d0022000da036004f403600081c6a00401000000|@6023,131071| 6023:S48|50415253455f5452454528292e67656e636f6465283729636f646553657175656e6365283429636f646567656e283129 6024:O2|@6025,0 6025:O2|-8,0 6026:C2,48|9e13e002f606201880a1001b8bd02018d602200cd4022008d2022004d0022000da036004f403600081c6a00401000000|@6023,131071| 6027:S48|50415253455f5452454528292e67656e636f6465283729636f646553657175656e6365283429636f646567656e283429 6028:C2,1860|9e13e002f6062018ba21205c80a7401b8bd02018de213ffcda213ff8d0213ff4d2213ff0d4213fecd6213fe888013fe8de02e00080a3fff53280000780a3e019d602e008f606201880a1001b8bd0201830bffff83280000501000000c402e00410800009da012010113f032790022254f40620209fc6a0000100000084102001da012010d4036004d202a000b8226001b917200490072001d022a000d203600cd0026000ae102005ee2260008088a0013280001fac100008ee00a000ec05e00080a5bfd532800012aa100008ea05e004e805600ce6052000e4056010e204a0008c21a0108b196010ba102003ac100006fa21bffce625a008e225a004e6056008e625a00010800012a2100002113f032790022298f40620209fc6a00001000000ac1020011080000aa2100002113f032790022298f40620209fc6a00001000000aa100016ac102001a2100002a0100008c205a004d805a008d005a000400001a30100000080a22005228000eed601200ce2213ffce0213ff8c2213ff4d8213ff0d0213fec921020a1d00120047ffcfef388013fecd0213ffc92103ffdd00120007ffd005e88013ffc92100008d00120007ffcfeea01000000921020a57ffcfee701000000d6012028d0213ffcd0213ff8d402e0188c21a00c88013ff88b19600cba10200292100006fa21bffcc402a000c42260042f3f000fae05e0ccee226000ac012000d225a000aa012000e802a004e82560048c21a00c8b19600cba102002a6100006fa21bffce4012000e424e000e2012004e224e004d0213ffce6213ff8d201200c901020054000024a88013ff8e0012038d0213ffcde012000de213ff8d601200494100008d2012024d0012028da042014f40360009fc6a00088013ff8c201203cda012020da213ffcd8012004d8213ff8d601201cd4012000d2012008da006010f40360009fc6a00088013ff8d601203cd402e004d202a0008c21a0248b196024ba10200884100006fa21bffcae102001ee20a01cac102001ec20a018aa103ffdea20a014e8012018e820a010a6102001e620a00cd220a008e4012008e420a004d020a0008c21a00c8b19600cba102002a2100006fa21bffcc4246004a0103fe5e0246000de02a000b823e001b91f200482072001c222a000da02e00cd8012024d8236000d202a000d0213ffcd0213ff8d002e00896013ff89410000992100008901000117fff9eb988013ff8c4012044ee00a004ec05e000b825a001b917200490072001da012004f40360009fc6a00001000000d0213ffcd2012020113f002d9002215c4000029988013ffc8c21a0148b196014ba102004aa100006fa21bffca8102001e825600ce6012000e6256008d0256004a4102011e4256000e2012048e0046004de042000b823e001b917200482072001ea213ffcc2213ff8133f02ed92026228d001203c7ffcfe5388013ff88c21a0248b196024ba1020089a100006fa21bffc98102001d823601c96102001d623601894102001d423601492102005d223601084102001c423600cee012000ee236008d0236004ec012004ec2360008c21a00c8b19600cba102002aa100006fa21bffcda256004a8103fe5e8256000e601204880a4e0012280000fa4100015e201204ce00460008c21a0148b196014ba102004a4100006fa21bffc9e102001de24a00cea24a008e024a00482103ff1c224a0008c21a00c8b19600cba102002a2100006fa21bffca0102001e0246004e424600080a4600132800006e2213ffcd001200cde01205481c3e00688012058d001200c9a012054400002c188013ffcde01205881c3e0068801205cd402e00092102001d222e000e2213ffce0213ff8c2213ff4d8213ff0d4213fec133f02ed92026228d00120047ffcfe0388013fecc4012024d0213ffcd0213ff8ee00a0188c21a00c88013ff88b19600cba102002ac100006fa21bffcea05e000ea25a004293f000fa80520cce825a000a6012000ec24e000a4012000e205e004e224a0048c21a00c8b19600cba102002a0100006fa21bffcde012000de242000c2012004c2242004d0213ffce0213ff8e0213ff496100008153f002d9402a15cd2012018d001201cda00a014f40360009fc6a00088013ff4da012034d8012018d8213ffcd6012000d6213ff8d6012014153f002d9402a15cd2012004da036010f40360009fc6a00088013ff8d4012030d2012010d222a000c4012034ee00a004ec05e000b825a001b91f2004aa072001ea25e000e800a00ce601201ce6252000e405e000b824a001b9172004a20720018c21a0248b196024ba102008a0100006fa21bffc9e102001de24201c82102001c22420189a103ffdda24201498102005d824201096102001d624200ce2242008d4012004d4242004d02420008c21a00c8b19600cba10200290100006fa21bffce0222004ac103fe5ec222000ea01202c80a560012280000da61000088c21a0148b196014ba102004a6100006fa21bffca4102001e424e00cd024e008d224e004a2103ff1e224e0008c21a00c8b19600cba10200290100006fa21bffca4102001e4222004e6222000e201203881c460068801203c|@6048,131071|104,4,@6029 268,4,@6031 300,4,@6031 348,5,@6033 396,5,@496 416,5,@509 432,5,@496 444,5,@496 500,4,@375 584,5,@6039 872,5,@5452 928,4,@623 936,5,@6043 1024,4,@5717 1036,5,@496 1292,5,@6047 1344,4,@5717 1356,5,@496 1412,4,@375 1496,4,@623 1552,4,@623 6029:O3|@24,@397,@6030 6030:S42|676574466e426f64793a206e6f74206120636f6e73747261696e656420666e2d65787072657373696f6e 6031:O3|@24,@397,@6032 6032:S41|636f646550726f633a20626f6479206f6620666e206973206e6f74206120636c61757365206c697374 6033:C2,756|9e13e002f606201880a1001b8bd02018c402200080a0a0353280001580a0a021de213ffcae102001ec02200488013ffc80a5a00132800006b825e00190100017de01200081c3e00688012004b91720049e072001ec05a004ae10000ff606201880a1001b8bd0201830bffff23280003080a0a009ee022008ec05e000de213ffcee213ff888013ff8901000167ffd3ce70100000080a220012280000e90100016901000167ffd3cf201000000d2022004d00220007ffd909001000000ac100008f606201880a1001b8bd0201830bfffef7ffd90b30100000080a2200122800007aa102001901000167ffd90be01000000ea022000aa1d600480a5600122800006ea01200090102005ea01200481c5600688012008d0056000de012004353f0302b406a2a481c6a004880120083280001180a0bff5de213ffcfa022008fa213ff8d002200c7fffffaf88013ff880a2200532800006ee012004d0012000de01200410bfffa98801200881c5e006880120083280000580a0a01dd002200810bfffa3f60620183280000580a0a029d002200410bfff9ef60620183280002680a0bff9ee02200880a5e0013280000ade213ffcde213ffc113f0328900221ecf40620209fc6a00088013ffc90102001de213ffc88013ffc80a5e00132800009ea05e004113f00bc900220f0f40620209fc6a00001000000ac102001ea05e00480a5600132800005ee05e004ec05e00010800006d005a000f606201880a1001b8bd0201830bfffedde01200010bfff77880120043280002f90102005de213ffcee022008ac10200588013ffc80a5e0013280000680a5a00590100016ea01200081c560068801200432800018aa100016de05e000da03e00080a37fd53280000b01000000d203e004fa05e004fa213ffcd00260007fffff5c88013ffcaa1000081080000eac100015113f032890022220f40620209fc6a00001000000aa10200110800006ac100015fa05e004fa213ffc88013ffcac100015ee01200088012004f606201880a1001b8bd0201830bfffd881c3e00601000000|@6038,123043|140,5,@1606 164,5,@1607 180,5,@2100 208,5,@2104 232,5,@2105 284,4,@5848 436,4,@6034 480,4,@2144 676,4,@6036 6034:O3|@24,@397,@6035 6035:S26|7475706c6557696474683a20656d707479206c6f63616c646563 6036:O3|@24,@397,@6037 6037:S8|6765745769647468 6038:S26|50415253455f5452454528292e7475706c655769647468283129 6039:C2,328|9e13e002f606201880a1001b8bd02018b8222001ba226001811f401c32800017d0213ffcb8226001ba102000b91f401c90072001921000088c21a0188b196018ba10200590100006fa21bffc84102001c422201084102001c422200c84102005c4222008d222200492103fedd222200081c3e00601000000a810000f901000099a013ffc4000003888013ffc8c21a00c8b19600cba1020029e100006fa21bffcd023e0049a102029da23e000e8213ffcde213ff888013ff880a2200132800005d2022000981020051080000c80a32001c402600080a0bff53280000798102001d0022004f606201880a1001b8bd0201830bffff280a3200122800011d0012000d00120007ffe3d7701000000ae1000088c21a00c8b19600cba10200290100006fa21bffcee222004ac103ff5ec222000ea01200481c560068801200cee01200481c5e0068801200c|@6042,131071|132,5,@6040 260,5,@3258 6040:C2,200|9e13e002f606201880a1001b8bd02018c4036000b820a001ba222001811f401c36800005b82220019010200181c3e00601000000ba102000b91f401cae0720018c21a0188b196018ba102005ac100006fa21bffcaa102001ea25a010aa102001ea25a00caa102005ea25a008ee25a004ae103fedee25a000b8222001b91f200490072001de213ffcda213ff8ec213ff47fffffdc88013ff48c21a00c8b19600cba102002ac100006fa21bffcd025a004ea012000ea25a00090100016de01200881c3e0068801200c|@6041,123041| 6041:S38|50415253455f5452454528292e6d6b4172675475706c652832296d6b4172674c697374283129 6042:S26|50415253455f5452454528292e6d6b4172675475706c65283229 6043:C2,108|9e13e002f606201880a1001b8bd0201880a260053280000dd0213ffc921000088c21a00c8b19600cba10200290100006fa21bffc84102001c4222004d222200081c3e00601000000d2213ff8de213ff4901020019a013ffc4000000c88013ff4c401200081c0a0068801200c|@6046,131071|88,5,@6044 6044:C2,276|9e13e002f606201880a1001b8bd02018c4037ffcb820a001ba222001811f401c32800005ee0360009010200181c3e00601000000ea05e00080a560153280000b80a57ff5de213ffcda213ff8d0213ff4921000177ffe3b0e88013ff4ac1000081080001ae60120003280000b8c21a010de213ffcda213ff8d0213ff4921000177ffe3b0388013ff4ac1000081080000fe60120008b196010ba102003ac100006fa21bffcd025a008ee25a004a8102019e825a000de213ffcda213ff8d0213ff488013ff4e6012000b824e001b917200490072001ec213ffcda0120047fffffc988013ffc8c21a00c8b19600cba102002a4100006fa21bffcd024a004e2012000e224a00090100012e001200c81c4200688012010|@6045,131071|84,5,@3251 128,5,@3251 6045:S33|50415253455f5452454528292e6c6f6164417267732832296d6b61726773283129 6046:S24|50415253455f5452454528292e6c6f616441726773283229 6047:C2,112|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffcd0037fa881c3e00601000000da213ff8fa022000fa213ff4d00220047ffffff288013ff48c21a00c8b19600cba1020029e100006fa21bffcd023e004da012000da23e0009010000fde01200881c3e0068801200c|@1966,161| 6048:S49|50415253455f5452454528292e67656e636f6465283729636f646553657175656e6365283429636f646550726f63283429 6049:C2,116|9e13e002f606201880a1001b8bd020188c21a0148b196014ba10200484100006fa21bffc2f3f032aae05e05cee20a000ee036010ee20a00cec03600cec20a008ea036008ea20a004e8012000d6212000e8213ffcc4213ff8a6102001e6213ff4d6036014da036004f403600081c6a00488013ff4|@6052,131071|36,4,@6050 6050:C2,276|9e13e002f606201880a1001b8bd02018c403600c80a0a00122800038d602200cde213ffcda213ff8fa022000fa213ff4fa022004fa213ff0fa022008fa213fecfa02200cfa213fe8d4013fe8d2013ff0d0013fecda036008f40360009fc6a00088013fe8ee012010d0213ffcd6012000d4012004d2012008d001200cda05e004f40360009fc6a00088013ffc8c21a00c8b19600cba102002ac100006fa21bffcaa102001ea25a004d025a0008c21a00c8b19600cba102002a8100006fa21bffcec252004e6012000e62520008c21a00c8b19600cba10200290100006fa21bffce8222004a4102025e4222000e201201881c460068801201cd4022008d2022004d0022000da036004f403600081c6a00401000000|@6051,131071| 6051:S56|50415253455f5452454528292e67656e636f6465283729636f646553657175656e6365283429636f6465416c742835296367457870283129 6052:S48|50415253455f5452454528292e67656e636f6465283729636f646553657175656e6365283429636f6465416c74283529 6053:C2,192|9e13e002f606201880a1001b8bd02018c4022008ee00a000ac10000faa10000d901000177ffe0e8f01000000ee022008901000177fffdd790100000080a220012280001aec213ffc901000177fffdd8801000000de057ff4da03e010c4036000b820a001b9172004ae072001ee236000ee036000b825e001b9172004a8072001e8236000ee022000c425e000e803e008c4052000e6022004c424e0009010200181c5a00601000000113f030890022148f40620209fc6a00088013ffc90102001|@6054,129185|36,5,@2944 52,5,@5886 76,5,@5888 168,4,@5890 6054:S58|50415253455f5452454528292e67656e636f6465283729636f646553657175656e63652834293c7061747465726e3e2d73657441646472283129 6055:C2,2012|9e13e002f6062018ba21206480a7401b8bd0201880a2200132800005c40220009010200181c3e00601000000ee00a000ec05e000ea00a008e8056000e600a00ce404e000e200a010e00460008210000f9810000dd6022004901000147ffe0e3901000000d400a004d2022008901000097fffdd220100000080a2200122800008c2213ffc901000097fffdd3101000000d002200010800009c4022000113f032c9002231cf40620209fc6a00088013ffc90102001c4022000ae100008901000147ffda04c01000000c2213ffcd8213ff8ec213ff4d4213ff0e4213fece0213fe8d6213fe4ee213fe0c4213fdc92100008d0033fec7ffcfa0d88013fdcec012014808da0013280000daa100008e805a000d0213ffcd4052000133f032c9202633c90102001400001bf88013ffcaa1000081080000aea213ffc113f032d90022050f40620209fc6a00001000000a8100015aa102001ea213ffce6012018a410200588013ffc80a4e0013280000580a4a005a21000121080000fe001202432800007a0100012de04e000d003e0047ffffc8b01000000a0100008a4100010e604e004f606201880a1001b8bd0201830bfffeede043ff4c203e01880a06001228000039a1000119a10200580a36005328000039810200198102005961b2004da213ffcd6213ff8d401200088013ff880a2a00132800005d002a0009210000b1080000cc4012020b822e001ba222001b917401c8407200196100002d402a004f606201880a1001b8bd0201830bffff180a0a005328000069010200180a2600532800003901020019010200580a2200122800006ae102001ec012014aa102001ea25a000ae102001ee01202cec05fff4ea05a008e8056000b8252001b9172004a6072001e6256000e405a010e204a000a0102005e024a000d2213ffcd0213ff8e2213ff4d00120249a012030400001ad88013ff4c201202c80a060053280000ed0213ffcda01200cb8236001b917200498072001d0213ffcd20120089010000c7ffffd1988013ffc9e10000810800032de213ffcd2012014d001200c1b3f032d9a0362ccf40360009fc6a00088013ffc8c21a00c8b19600cba1020029a100006fa21bffcd023600498102029d8236000da213ffc88013ffc80a2200132800005d4022000961020051080000c80a2e001d202a00080a27ff53280000796102001d0022004f606201880a1001b8bd0201830bffff280a2e0012280000dde012000d00120007ffe3aa8010000008c21a00c8b19600cba1020029e100006fa21bffcd023e00490103ff5d023e00088012004de213ffc92103ffdd001200c7ffcfacc88013ffc8c21a00c8b19600cba10200284100006fa21bffc2f3f0028ae05e304ee20a004d020a0008c21a00c8b19600cba102002ac100006fa21bffcc425a004aa1020a1ea25a0008c21a00c8b19600cba10200290100006fa21bffcec222004e8012020e82220007ffcfc0f01000000e6012040d0213ffcd0213ff8e404fff08c21a00c88013ff88b19600cba102002a2100006fa21bffce004a000e02460041f3f000f9e03e0ccde24600082012000e22060009a012000d804a004d82360048c21a00c8b19600cba10200296100006fa21bffcd4012000d422e000d2012004d222e004d0213ffcd6213ff896100008d4012008d201200cd004ffccda04ffdcf40360009fc6a00088013ff8ee01202480a5e00532800005941000178410000810800009ec01204c92100008113f002d9002215c7fff4c3c0100000084100008ec01204cd0213ffcd0213ff8ea05bff08c21a00c88013ff88b19600cba102002a8100006fa21bffce6056000e6252004253f000fa404a0cce4252000a2012000e8246000a0012000de056004de2420048c21a00c8b19600cba10200282100006fa21bffcda012000da206000d8012004d8206004d605bff4d4012044d4213ffcc2213ff8d202e014d6012050d401201490100009d2012034ae100008901000029a100017f40360009fc6a00088013ff8ec012054ea05bff4e8056008e6052000b824e001b91f2004a4072001e4252000e2056010e001201ce0246000de052000b823e001b9172004820720018c21a0248b196024ba1020089a100006fa21bffc98102001d823601c96102001d623601894103ffdd4236014d2012024d223601084102001c423600cc2236008ee012008ee236004d02360008c21a00c8b19600cba102002a6100006fa21bffcda24e004a4103fe5e424e000e001203cde012038de242000c201202080a060012280001eb823e0018c21a0148b196014ba1020049a100006fa21bffc98102001d823600ce6236008de23600496103ff1d6236000da213ffcd00120409a1000167ffffe5688013ffc8c21a00c8b19600cba10200294100006fa21bffcd022a004d2012000d222a0009010000ac401205c81c0a00688012060b91720049a0720018c21a0148b196014ba10200498100006fa21bffc96102001d623200ce6232008da23200494103ff1d4232000d2012048b8226001b91f200490072001d8213ffcd0213ff8d601203494102001d2012030901020019a0120584000016988013ff88c21a0148b196014ba10200484100006fa21bffcae102001ee20a00cd020a008ec01203cec20a004aa103ff1ea20a000c4213ffcd0012044da0120587ffffe1f88013ffc8c21a00c8b19600cba102002a8100006fa21bffcd0252004e6012000e62520008c21a00c8b19600cba102002a4100006fa21bffce824a004e2012004e224a00090100012e001206081c4200688012064|@6075,131071|92,5,@2944 112,5,@5886 136,5,@5888 156,4,@6056 192,5,@2194 244,5,@496 280,4,@6058 292,5,@6059 312,4,@6061 396,5,@6033 680,5,@6063 732,5,@6039 760,4,@6067 896,5,@3258 952,5,@509 980,4,@525 1060,5,@520 1116,4,@375 1256,4,@623 1264,5,@4939 1324,4,@375 1856,5,@6070 6056:O3|@24,@397,@6057 6057:S6|6c7641646472 6058:O1|@6033 6059:C2,156|9e13e002f606201880a1001b8bd02018c402a00080a0bff53280000580a0a005d402a00810bffff9f60620183280001a01000000de213ffcd0213ff8d2213ff4fa02a004fa213ff0d002a0089a100009f40360009fc6a00088013ff08c21a00c8b19600cba102002ae100006fa21bffcec012008ec25e004d025e000d4012000d201200490100017de01200c10bfffde8801201081c3e00601000000|@6060,131071| 6060:S73|50415253455f5452454528292e67656e636f6465283729636f646553657175656e63652834293c7061747465726e3e2d6c6f616446756e446563732831296765745061747473283329 6061:O3|@24,@397,@6062 6062:S23|6261646c7920666f726d65642070617273652074726565 6063:C2,420|9e13e002f606201880a1001b8bd0201880a2200132800005c40220009010200181c3e00601000000de213ffcda213ff8fa022004fa213ff4fa00a004fa213ff0fa00a008fa213fecd400a000133f032d92026240901020017fffff9b88013fecee01200cec05fff080a5a005328000108c21a00c808a20013280000501000000ea022000108000128c21a008113f00bc900220f0f40620209fc6a00001000000aa1020011080000a8c21a0088b19600cba102002aa100006fa21bffcd0256004a8102035e82560008c21a0088b1960083b100000ba076001a6100006fa21bffc253f0031a404a124e424e0008c21a0088b1960083b100000ba076001a2100006fa21bffc213f0031a0042124e02460008c21a0188b196018ba1020059e100006fa21bffce223e010e623e00cea23e008c2012000c223e004da012004da23e0008c21a00c8b19600cba10200298100006fa21bffcde23200496103fd5d6232000d8213ffcd00120089a1000177fffffa588013ffc8c21a00c8b19600cba10200294100006fa21bffcd022a004d2012000d222a0009010000ac401201481c0a00688012018|@586,131071|76,4,@6064 88,5,@6059 140,4,@2144 224,4,@799 260,4,@799 6064:O1|@6065 6065:C2,12|9e13e00281c3e00601000000|@6066,129| 6066:S84|50415253455f5452454528292e67656e636f6465283729636f646553657175656e63652834293c7061747465726e3e2d6c6f616446756e446563732831296d6174636865732d2831297061744c6973742d283129 6067:O1|@6068 6068:C2,196|9e13e002f606201880a1001b8bd0201880a2600132800005c40260009010200181c3e00601000000b820a001ba222001b917401cae072001b8222001b9172004ac072001de213ffcd0213ff8c4213ff4fa026004fa213ff092100017901000167ffffacc88013ff0ea012008e8012004b8252001ba256001b917401ca6072001d0213ffcd2012000901000137fffffdd88013ffc8c21a00c8b19600cba102002a4100006fa21bffcd024a004e2012000e224a00090100012e001201081c4200688012014|@6069,131071|96,5,@6039 6069:S73|50415253455f5452454528292e67656e636f6465283729636f646553657175656e63652834293c7061747465726e3e2d6c6f616446756e446563732831296d616b6541726773283229 6070:C2,1176|9e13e002f606201880a1001b8bd0201880a26001328000abc4037ffcd6037fd480a2e005328000218c21a00cd2037fe0b8226001b9172004900720018c21a0188b196018ba10200584100006fa21bffcae102001ee20a010ee037ff0ee20a00cac102005ec20a008d020a00490103fedd020a0008c21a0148b196014ba10200490100006fa21bffcac102001ec22200cc4222008d422200494102011d422200081c3e006880120048b19600cba10200292100006fa21bffcd62260049010200dd0226000c4037ffcee00bff4ec05e008d005a000d0213ffcd0213ff8de213ff4da213ff0d4213fec96013ff894100008aa100009d205e00c901000157fff970f88013fece8012004e6053ffce404fff4e204a008d0046000da012010f40360009fc6a00001000000e0012004de043fe0b823e001b9172004820720018c21a0188b196018ba1020059a100006fa21bffc98102001d8236010d6043ff0d623600c94102005d4236008c223600492103fedd22360008c21a00c8b19600cba10200284100006fa21bffcae102001ee20a004d020a00080a0a00132800005c4213ffcec0120001080000d8c21a014aa100008a810000dd00120009a012010400000be88013ffcac1000089a10001490100015880120048c21a0148b196014ba102004a6100006fa21bffca4102001e424e00cda24e008ec24e004a2102011e224e0008c21a0108b196010ba1020039e100006fa21bffcc2043fd4c223e008d023e0049a10202dda23e0008c21a00c8b19600cba10200298100006fa21bffc94102001d4232004de2320008c21a00c8b19600cba10200292100006fa21bffcd8226004e622600080a2600132800005d2213ffcd001200c1080000884100008d001200c9a012010400000af88013ffc88012004841000088c21a00c8b19600cba10200290100006fa21bffcc4222004ae102025ee222000ec01200881c5a00688012018ee00bff4ec05e008ea05a000b8256001b9172004a8072001e825a000e605e010e404e000a2102005e224e000de213ffcda213ff8d0213ff4d4213ff0fa026000fa213fecfa026004fa213fe8e4213fe4133f02ed920262289010000b7ffcf64a88013fe48c21a0188b196018ba102005a0100006fa21bffc9e102001de242010c201201cc224200c9a102005da24200898103ffdd824200496103fedd6242000d0213ffcd2012008901000107ffffa6388013ffcd201201080a26001328000059a01201c9410000810800006d00120204000008f0100000094100008d0012020b8222001b91f200484072001ee012014ec01200cb825a001ba25e001b917401caa072001c4213ffcd6012000d201200890100015da0120187fffff0a88013ffce8012018e6053ffce404fff4e204a008e0046000b8242001b91f20049e072001de246000c204a010da012004da206000d8046000b8232001b9172004960720018c21a0248b196024ba10200894100006fa21bffc92102001d222a01c84102001c422a018ae102001ee22a014ac102005ec22a010aa102001ea22a00cd622a008e0012000e022a004d022a0008c21a00c8b19600cba10200290100006fa21bffcd42220049e103fe5de222000da01201c81c3600688012024|@6074,131071|252,5,@5452 444,5,@6071 644,5,@6072 784,4,@5717 796,5,@496 876,5,@6043 912,5,@6073 6071:C2,112|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffcd0037fec81c3e00601000000da213ff8fa022000fa213ff4d00220047ffffff288013ff48c21a00c8b19600cba1020029e100006fa21bffcd023e004da012000da23e0009010000fde01200881c3e0068801200c|@1966,161| 6072:C2,112|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffcd0037fec81c3e00601000000da213ff8fa022000fa213ff4d00220047ffffff288013ff48c21a00c8b19600cba1020029e100006fa21bffcd023e004da012000da23e0009010000fde01200881c3e0068801200c|@1966,161| 6073:C2,112|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffcd0037ff481c3e00601000000da213ff8fa022000fa213ff4d00220047ffffff288013ff48c21a00c8b19600cba1020029e100006fa21bffcd023e004da012000da23e0009010000fde01200881c3e0068801200c|@1966,161| 6074:S73|50415253455f5452454528292e67656e636f6465283729636f646553657175656e63652834293c7061747465726e3e2d6c6f616446756e446563732831296d616b6546756e73283529 6075:S62|50415253455f5452454528292e67656e636f6465283729636f646553657175656e63652834293c7061747465726e3e2d6c6f616446756e44656373283129 6076:O1|@6077 6077:C2,116|9e13e002f606201880a1001b8bd0201880a2200132800005c40220009010200181c3e00601000000ee00a008ec05e000de213ffcec213ff8d00220047ffffff188013ff88c21a00c8b19600cba1020029e100006fa21bffcd023e004d0012000d023e0009010000fc401200481c0a00688012008|@586,114817| 6078:C2,496|9e13e002f606201880a1001b8bd0201880a2200132800005c40220009010200181c3e0060100000080a0a00132800031aa10000fde213ffcda213ff8d00220044000007388013ff880a2200132800004808a200110800013ee01200432800005ae100008ee0220041080000a80a5e001113f00bc900220f0f40620209fc6a00001000000ac100017ae10200180a5e00122800004ee012004108000048c21a00c81c5e006880120088b19600cba102002ac100006fa21bffcd025a004aa103fddea25a0008c21a00c8b19600cba10200290100006fa21bffca8102001e8222004ec222000e601200481c4e00688012008a810000de600a000e400a004e202200490100013400001d301000000ea213ffce8213ff8e6213ff4e4213ff0e2213fec92100008d0053fec7ffcf4e488013fec921020b57ffcf4e101000000e001200cde043ff4fa043fccfa213ffcd603e02094100008d2043ff0d0012004da043fe4f40360009fc6a00088013ffcc2012010da007ff4d801200cd8213ffcd6012000d6213ff896100008d4036024d2036020d0007ff0da03601cf40360009fc6a00088013ff8d0213ffcd0012004da0120107fffff9488013ffc80a2200132800006d0213ffcd0012000d401201881c2a0068801201cd00120009a012018400001db88013ffcd401201c81c2a00688012020|@6095,131071|64,5,@6079 112,4,@2144 260,5,@6091 296,5,@496 308,5,@496 476,5,@6094 6079:C2,472|9e13e002f606201880a1001b8bd0201880a2200132800005c40220009010200181c3e0060100000080a0a00132800005ae10000fd002200410bffff4f6062018ac10000dea00a004e8022004d000a0004000006901000000de05bff4da03e010d8036000b8232001b917200484072001c4236000ec213ffcd8213ff8ee213ff4ea213ff0e8213fecd0213fe888013fe880a2200132800005d8022004ae1020011080000bd0012004d00220009a012014400000c4010000009010000cf606201880a1001b8bd0201830bffff2da0120147fffffcd9e13e002ec01200080a5a00132800005ea05a000ea01200c81c5600688012018e805600080a53fe13280003101000000e6056008e404e00098100008901000127ffe086c01000000ee022008901000177fffd7560100000080a220012280000801000000901000177fffd76501000000e402200010800009e2012014113f032c9002231cf40620209fc6a00001000000a4102001e2012014d8213ffcd6012008d40560049210200590100012da047fe0f40360009fc6a00088013ffce001200080a42001328000059a012018de01201081c3e0068801201c400000e301000000de01201081c3e0068801201c113f033190022364f40620209fc6a0000100000090102001|@6090,131071|80,5,@6080 176,5,@6083 276,5,@2944 292,5,@5886 316,5,@5888 336,4,@6056 428,5,@6087 448,4,@6088 6080:C2,208|9e13e002f606201880a1001b8bd02018c402200080a0bff53280000580a0bfddd002200810bffff9f60620183280001a80a0bfe1de213ffcfa022008fa213ff8d00220047fffffef88013ff8d0213ffcd00120007fffffeb88013ffc80a2200132800006d0213ffcd0012000de01200881c3e0068801200cd00120009a0120084000001b88013ffcde01200c81c3e006880120103280000d901020019a1000088c21a00c8b19600cba10200290100006fa21bffc98102001d8222004da22200081c3e0060100000081c3e00601000000|@6082,65713|128,5,@6081 6081:C2,112|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffcd0037ff481c3e00601000000da213ff8fa022000fa213ff4d00220047ffffff288013ff48c21a00c8b19600cba1020029e100006fa21bffcd023e004da012000da23e0009010000fde01200881c3e0068801200c|@1966,161| 6082:S74|50415253455f5452454528292e67656e636f6465283729636f646553657175656e63652834293c7061747465726e3e2d636f646552656375727369766528312967657456617273283129 6083:C2,200|9e13e002f606201880a1001b8bd02018c402200080a0bfe132800026de213ffcee022008ec05e000aa10000fa810000d901000167ffe07b401000000ee022008901000177fffd69e0100000080a2200122800011ea213ffc901000177fffd6ad01000000ec022000de053ffcde25a000da052000c4037ff4ee00a008e605e000e4022004e624a0009010200181c5600601000000113f033190022244f40620209fc6a00088013ffc90102001de213ffc113f033190022244f40620209fc6a00088013ffc90102001|@6086,130209|52,5,@2944 68,5,@5886 92,5,@5888 148,4,@6084 176,4,@6084 6084:O3|@24,@397,@6085 6085:S36|7365744164647265737320202d206261646c7920666f726d656420706172736574726565 6086:S77|50415253455f5452454528292e67656e636f6465283729636f646553657175656e63652834293c7061747465726e3e2d636f646552656375727369766528312973657441646472657373283129 6087:C2,112|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffcd0037fe881c3e00601000000da213ff8fa022000fa213ff4d00220047ffffff288013ff48c21a00c8b19600cba1020029e100006fa21bffcd023e004da012000da23e0009010000fde01200881c3e0068801200c|@1966,161| 6088:O3|@24,@397,@6089 6089:S31|56616c4465636c61726174696f6e202d206e6f742061207661726961626c65 6090:S64|50415253455f5452454528292e67656e636f6465283729636f646553657175656e63652834293c7061747465726e3e2d636f6465526563757273697665283129 6091:C2,120|9e13e002f606201880a1001b8bd02018c402200080a0bfe13280000580a0bff5d002200481c3e006010000003280000580a0bfddd002200810bffff4f60620183280000a01000000ee022004ec05e00080a5bfe132bfffecd0022008d005e00481c3e00601000000113f03329002207881c3e00601000000|@6093,114817|104,4,@6092 6092:S9|3c7061747465726e3e 6093:S69|50415253455f5452454528292e67656e636f6465283729636f646553657175656e63652834293c7061747465726e3e2d636f6465446563732831296765744e616d65283129 6094:C2,112|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffcd0037fe481c3e00601000000da213ff8fa022000fa213ff4d00220047ffffff288013ff48c21a00c8b19600cba1020029e100006fa21bffcd023e004da012000da23e0009010000fde01200881c3e0068801200c|@1966,161| 6095:S59|50415253455f5452454528292e67656e636f6465283729636f646553657175656e63652834293c7061747465726e3e2d636f646544656373283129 6096:C2,112|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffcd0037fc081c3e00601000000da213ff8fa022000fa213ff4d00220047ffffff288013ff48c21a00c8b19600cba1020029e100006fa21bffcd023e004da012000da23e0009010000fde01200881c3e0068801200c|@1966,161| 6097:C2,112|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffcd0037fb081c3e00601000000da213ff8fa022000fa213ff4d00220047ffffff288013ff48c21a00c8b19600cba1020029e100006fa21bffcd023e004da012000da23e0009010000fde01200881c3e0068801200c|@1966,161| 6098:C2,112|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffcd0037fac81c3e00601000000da213ff8fa022000fa213ff4d00220047ffffff288013ff48c21a00c8b19600cba1020029e100006fa21bffcd023e004da012000da23e0009010000fde01200881c3e0068801200c|@1966,161| 6099:C2,132|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffc9010200181c3e00601000000da213ff8fa022004fa213ff4d00220004000001a88013ff4d0213ffcd0012000da0120047fffffed88013ffc8c21a00c8b19600cba10200284100006fa21bffcd020a004ee012000ee20a00090100002ec01200c81c5a00688012010|@586,131071|56,5,@6100 6100:C2,428|9e13e002f606201880a1001b8bd02018c4022004ee00a000ac10000faa10000de802200c901000177ffe061301000000ee022008901000177fffd4fd0100000080a2200122800010ec213ffc901000177fffd50c010000008c21a00c8b19600cba102002a6100006fa21bffcde022004de24e004da022000da24e00010800009c4057ff4113f032c9002231cf40620209fc6a00088013ffca6102001c4057ff4ee00a010e405e000b824a001b9172004a2072001e225e000e204e000e4246000e400a008e004a000c204e004e0206000e0046000d605200080a2ffed3280000680a2ffe1193f0333980321b81080001fec213ffc32800015ec213ffcd8052008d4032000d204a000ec213ffce0213ff8da00a020da213ff4d600a024d4213ff0153f000f9402a0ccd0013ff01b3f02c69a0363087fff938188013ff4981000081080000d8c21a014113f0333900221e4f40620209fc6a00088013ffc98102001108000058c21a014e0213ff888013ff88c21a0148b196014ba10200490100006fa21bffc94102001d422200cd8222008d2012000d222200484103ff1c4222000ee01200481c5e00688012008|@6106,131071|40,5,@2944 56,5,@5886 80,5,@5888 132,4,@6056 228,4,@6101 288,4,@375 300,4,@5462 308,5,@5464 328,4,@6104 6101:O4|4,@6102,@3220,0 6102:O2|@622,@6103 6103:O2|@3223,@668 6104:O3|@24,@397,@6105 6105:S6|636f64654578 6106:S57|50415253455f5452454528292e67656e636f6465283729636f646553657175656e63652834293c7061747465726e3e2d636f64654578283129 6107:O1|@6108 6108:C2,116|9e13e002f606201880a1001b8bd0201880a2200132800005c40220009010200181c3e00601000000ee00a004ec05e000de213ffcec213ff8d00220047ffffff188013ff88c21a00c8b19600cba1020029e100006fa21bffcd023e004d0012000d023e0009010000fc401200481c0a00688012008|@586,114817| 6109:C2,112|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffcd0037fc081c3e00601000000da213ff8fa022000fa213ff4d00220047ffffff288013ff48c21a00c8b19600cba1020029e100006fa21bffcd023e004da012000da23e0009010000fde01200881c3e0068801200c|@1966,161| 6110:C2,172|9e13e002f606201880a1001b8bd02018c4022004ee00a000a810000fa610000d901000177ffdba6101000000d0213ffcd0213ff8e404fff4e8213ff4d4213ff0fa026000fa213fec94013ff8d2026004da04a004f40360009fc6a00088013fece001200c80a4200132800005d0012000e201200010800007de0120049a0120104000001201000000a2100008de012004e223e000c2012010c223e00490102001da01200881c3600688012014|@6112,131071|36,5,@2500 128,5,@6111 6111:C2,112|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffcd0037ffc81c3e00601000000da213ff8fa022000fa213ff4d00220047ffffff288013ff48c21a00c8b19600cba1020029e100006fa21bffcd023e004da012000da23e0009010000fde01200881c3e0068801200c|@1966,161| 6112:S61|50415253455f5452454528292e67656e636f6465283729636f646553657175656e63652834293c7061747465726e3e2d676574436f6e73747273283329 6113:C2,112|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffcd0037fb481c3e00601000000da213ff8fa022000fa213ff4d00220047ffffff288013ff48c21a00c8b19600cba1020029e100006fa21bffcd023e004da012000da23e0009010000fde01200881c3e0068801200c|@1966,161| 6114:C2,112|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffcd0037fb081c3e00601000000da213ff8fa022000fa213ff4d00220047ffffff288013ff48c21a00c8b19600cba1020029e100006fa21bffcd023e004da012000da23e0009010000fde01200881c3e0068801200c|@1966,161| 6115:S38|50415253455f5452454528292e67656e636f6465283729636f646553657175656e6365283429 6116:S23|50415253455f5452454528292e67656e636f6465283729 6117:C2,336|9e13e002f606201880a1001b8bd0201880a2200132800005c40220009010200181c3e00601000000ec00a00080a5bff93280002aae1020018c21a0148b196014ba102004aa100006fa21bffce800a010e825600ce600a00ce6256008e400a008e4256004e200a004e2256000e0037ffcc2042008d8006000de213ffcda213ff8fa022004fa213ff496102001d6213ff0173f030f9602e2fc153f00319402a1249210000c901000151b3f02c69a0363087fff920288013ff08c21a0088b196008ba102001ae100006fa21bffcd025e00010800008808de001de213ffcda213ff8fa022004fa213ff488013ff4808de00132800014d0012000fa05e000fa213ffcd0012000da0120047fffffbe88013ffc8c21a00c8b19600cba102002aa100006fa21bffcd0256004e8012000e825600090100015e601200c81c4e00688012010da012004de01200810bfffaf8801200c|@6118,131071|144,4,@5926 152,4,@799 168,4,@5462 176,5,@5464 6118:S18|4c6973742e6d61705061727469616c283229 6119:S45|535452554354555245535f28292e67656e636f646553747275637473283229636f646553747264656373283429 6120:C2,1596|9e13e002f606201880a1001b8bd020188c21a0148b196014ba10200484100006fa21bffc2f3f0336ae05e288ee20a000ee036010ee20a00cec03600cec20a008ea036004ea20a004e802200080a53ff93280006080a53fe1e602200ce404e000a210000fa010000dc2022004901000127fff86c101000000da056000e2213ffce0213ff8d2213ff4d4213ff0d6213fecc4213fe8c2213fe4e4213fe09210000d7fff949e88013fe098100008d00120007ffdaced0100000080a2200132800016d6022008d8213ffc901020297ffd746d88013ffc8c21a0148b196014ba10200494100006fa21bffc92102001d222a00c84102001c422a0082f000083ae05e3d8ee22a004d022a0009610000a108000059410000bd8213ffc88013ffc9410000bd60120109210000ad4012014d0012008da01201c7fffffb49e13e0028c21a00c8b19600cba10200284100006fa21bffcae102001ee20a004d020a0008c21a0148b196014ba102004ac100006fa21bffcaa102001ea25a00ce8012000e825a008c425a004a6102011e625a000d00120047ffdac9601000000d0213ffcd0213ff896013ff8d40120189210000890100016da01200cf40360009fc6a00088013ff8d0012000e401202881c4a0068801202c3280004880a5200de6022008e404e000e2056000a010000f901000127ffdab460100000080a2200122800006901000121f3f002b9e03e25c1080000ee0213ffc7ffddcb301000000e0213ffcd2213ff8c4213ff4e4213ff0921000117fff943b88013ff09e10000810800007da012000d2213ff8c4213ff4e4213ff088013ff0da01200080a3600132800016c2036008de213ffc901020297ffd740688013ffc8c21a0148b196014ba10200498100006fa21bffc96102001d623200c94102001d423200813000083920263d8d2232004d02320008210000c10800005d0213ffcde213ffc88013ffcd0213ffcd0213ff896013ff8d401200c92100001d0012000da012008f40360009fc6a00088013ff8d0012000d801201881c320068801201c3280005980a53fe5e6022004808ce0013280004ede213ffce404e00480a4a00132800043de213ffc8c21a0108b196010ba102003a2100006fa21bffc213f033ca0042130e0246000d4246008c2036008c2246004d0213ffcd0213ff8d0213ff4de213ff0da213fecd2213fe8d4213fe4fa04e000fa213fe09810000b96013ff494100011d20220089010000c7fff83eb88013fe0d601201cd4012004d2012008d0012000da01200c7fffff1b9e13e0028c21a00c8b19600cba10200296100006fa21bffc94102001d422e004d022e00080a2e00132800005d6213ffcd2012014108000098c21a00cd00120149a01201c4000067d88013ffc92100008880120048c21a00c8b19600cba10200290100006fa21bffcd222200484102025c4222000ee01201081c5e00688012020113f033c90022290f40620209fc6a00088013ffc90102001de213ffc113f033c90022290f40620209fc6a00088013ffc9010200180a53fe53280006f80a520118c21a0108b196010ba102003a6100006fa21bffc253f033ca404a2c8e424e000d424e008e2036008e224e004d0213ffcd0213ff8d0213ff4de213ff0da213fecd2213fe8c4213fe4fa022008fa213fe0a010000b96013ff494100013d2022004901000107fff839a88013fe08c21a00c8b19600cba1020029e100006fa21bffcc2012018c223e0049a102029da23e000de213ffc88013ffc80a0600132800005d6006000981020051080000c80a32001d402e00080a2bff53280000798102001c2006004f606201880a1001b8bd0201830bffff280a320012280000dd2012000d00120007ffe2ff5010000008c21a00c8b19600cba10200292100006fa21bffcd022600490103ff5d0226000d0213ffcd0213ff896013ff8d401200c90100009d2012004da012008f40360009fc6a00088013ff88c21a00c8b19600cba10200284100006fa21bffcae102001ee20a004ec012000ec20a00080a0a00132800005c4213ffcea012020108000098c21a00cd00120209a0120284000065688013ffcaa100008880120048c21a00c8b19600cba10200290100006fa21bffcea222004a8102025e8222000e601201c81c4e0068801202c32800005de213ffcd002200410bffe7bf6062018113f033c90022290f40620209fc6a00088013ffc90102001|@6141,131071|36,4,@6121 112,5,@5377 160,5,@5465 176,5,@2406 204,5,@1992 248,4,I48 400,5,@2404 492,5,@2389 512,4,@581 528,5,@2710 556,5,@5465 616,5,@1992 660,4,I48 812,4,@6134 892,5,@5359 992,5,@6136 1052,4,@6137 1080,4,@6137 1136,4,@6139 1216,5,@5359 1344,5,@3258 1492,5,@6140 1572,4,@6137 6121:C2,932|9e13e002f606201880a1001b8bd02018c4036004ee00a000d0213ffcd0213ff8de213ff4da213ff0d0213fecd2213fe8d4213fe4d6213fe096013ff894100017d203600c7fff8e9d88013fe0ec012010ea05a004d0056000da01201cf40360009fc6a000010000008c21a0088b1960083b100000ba076001a8100006fa21bffca6102005e6252000d0213ffcd0213ff8d0213ff4e8213ff0153f002f9402a08c921021019010202d1b0000829a036338f40360009fc6a00088013ff0a4102029e42220008c21a00c8b19600cba102002a2100006fa21bffcd0246004a0103ffde02460008c21a0088b1960083b100000ba0760019e100006fa21bffce223e00082012008de2060009a012008193f002f9803208cd82360048c21a00c8b19600cba10200296100006fa21bffcd4012008d422e000d201200cd222e0048c21a0088b1960083b100000ba07600190100006fa21bffc84102001c4222000ae100008d00120147ffdadfb01000000ec0120208c21a02c8b19602cba10200aaa100006fa21bffc293f0337a8052248e8256000e605a008e6256024e401202ce4256020e2012018e225601ce005a004e0256018de012004de256014ec256010c2012000c225600cd6256008ee2560048c21a00c8b19600cba1020029a100006fa21bffc193f033b9803232cd8236000ea236004d6213ffcee213ff8941020019210000d7ffdb77c88013ff8d6012008d402e00080a2a0012280000bd2012000d2012018d0012024d022600084102005c422600490102001ee01202c81c5e00688012038d00260008c21a00c8b19600cba10200284100006fa21bffc2f3f033bae05e3c4ee20a000ec012004ec20a004921000027fff422c010000008c21a00c8b19600cba102002aa100006fa21bffcd0256004a8102029e8256000ea213ffc88013ffc80a2200132800005e4022000a61020051080000c80a4e001e204a00080a47ff532800007a6102001d0022004f606201880a1001b8bd0201830bffff280a4e0012280000de0012000d00120007ffe2ef4010000008c21a00c8b19600cba102002a0100006fa21bffcd02420049e103ff5de2420008c21a00c8b19600cba1020029e100006fa21bffc82102001c223e004e023e00080a3e00132800005de213ffcda012034108000098c21a00cd00120349a012038400004a088013ffc9a100008880120048c21a00c8b19600cba10200298100006fa21bffcda23200496102025d6232000d401201cd822a00092102001d222a00490102001c401203081c0a0068801203c|@6133,131071|68,5,@5452 152,4,@660 168,4,I11 268,4,@660 356,5,@2425 388,4,@6122 480,4,@6128 512,5,@2508 600,4,@6130 624,5,@4948 748,5,@3258 852,5,@6132 6122:C2,3428|9e13e002f606201880a1001b8bd020189410000fac10000daa100008901000091b3f00de9a0362347ffda6f40100000080a22001228000e990100009901000091b3f00de9a0362287ffda7160100000092100008901000097ffdda9b010000007ffddab80100000080a22001228000d990102001901000097ffdda93010000007ffddaca0100000084100008d005a01c7ffdad4001000000d4213ffcec213ff8d2213ff4c4213ff094100015133f00de920262187ffda2cd88013ff0808a20013280000501000000ee0220001080000990100017113f0074900220b8f40620209fc6a00001000000ae102001901000177ffdda7501000000ac100008901000167ffdda900100000080a2200122800035ea012008901000167ffddaa401000000e8012000b8252001ba222001811f401c22800007a6102001e4012008e204a00ca0102001e0246000a6102001901000167ffdda9601000000e6012008e404e014e204a00080a460153280000980a47ff5ee213ffc921000127ffe2c9588013ffcaa10000810800031de012000328000098c21a010ee213ffc921000127ffe2c8c88013ffcaa10000810800028de0120008b196010ba102003aa100006fa21bffcd0256008e4256004a0102019e0256000ee213ffc88013ffc1080001cde012000e805600ca6102001e6252000e4056018e204a000901000177ffda8bd0100000080a2200122800006901000172b3f002baa05625c1080000bee213ffc7ffdda2a01000000ee213ffc921000117fff91b588013ffcaa10000810800004de01200088013ffcde01200080a3e00132800016e003e008ea213ffc901020297ffd718388013ffc8c21a0148b196014ba10200482100006fa21bffc9a102001da20600c98102001d8206008170000839602e3d8d6206004d0206000a010000110800005da01200cea213ffc88013ffcda01200c80a3600132800016c2036008e0213ffc901020297ffd716988013ffc8c21a0148b196014ba10200498100006fa21bffc96102001d623200c94102001d423200813000083920263d8d2232004d02320008210000c10800005d0213ffce0213ffc88013ffcd0213ffcd0213ff8d801201496013ff894100001d2012000d0012004da032010f40360009fc6a00088013ff8d601200480a2e0013280000794102001d201201cd002600c84102001c422200094102001d401201cd202a008d401200090100009d20120147ffe365601000000c401201cee00a004ec05e000ea012014b825a001ba256001811f401c2680000a90102001b8256001b9172004a8072001e825e00090102001e601202081c4e00688012024e801202081c520068801202481c2a006010000001b3f00df9a03619c7ffda6e00100000080a220012280021590100009901000091b3f00df9a0361907ffda70201000000e8022008e605200080a4e0013280020990102001a4100008d005a01c7ffdac5b01000000d4213ffcec213ff8e4213ff4fa052004fa213ff094100015133f00d9920263587ffda1e788013ff0808a20013280000501000000e202200010800009e0012004113f0074900220b8f40620209fc6a00001000000a2102001e0012004d00420044000023d0100000080a22001228000079e102001c204600480a06001328000039e1020019e1020058210000fd0042004400002310100000080a22001228000079a102001d8046004808b2001328000039a1020019a102005d8046008d403200080a2a0013280016cd2012008d2032004d0012000b8222001ba226001811f401c2280000480a0600110800009ee0120082280000480a3600110800005ee0120082280000784102001ee012008ec05e00caa102001ea25a0008410200180a06001228000f580a36001901000107ffdd275010000007ffdd3c80100000080a2200122800064c4012008c4012008ee00a014ea05e00080a560153280000980a57ff592100017d00320047ffe2b8e01000000ac10000810800014d0012004328000098c21a01092100017d00320047ffe2b8501000000ac1000081080000bd00120048b196010ba102003ac100006fa21bffcd225a008ee25a004a8102019e825a000d00120047ffd9237010000008c21a00c8b19600cba102002a6100006fa21bffcd024e004a4103ff5e424e0008c21a00c8b19600cba102002a2100006fa21bffc213f002fa004211ce0246004e62460008c21a00c8b19600cba1020029e100006fa21bffce223e004ec23e0008c21a00c8b19600cba10200282100006fa21bffcde2060049a102029da206000c2213ffc88013ffc80a3e00132800005d603e000981020051080000c80a32001d402e00080a2bff53280000798102001de03e004f606201880a1001b8bd0201830bffff280a3200122800144d6012000d00120007ffe2d0c010000008c21a00c8b19600cba10200296100006fa21bffcd022e00492103ff5d222e00010800138e401200cee00a018ec05e000b825a001b917200490072001d2213ffcda00a020f40360009fc6a00088013ffce802200080a520153280000980a53ff592100008d00120007ffe2b2401000000aa10000810800015d0012008328000098c21a01092100008d00120007ffe2b1b01000000aa1000081080000cd00120088b196010ba102003aa100006fa21bffce6012000e6256008d0256004a4102019e4256000d00120087ffd91cc010000008c21a00c8b19600cba102002a2100006fa21bffcd0246004a0103ff5e02460008c21a00c8b19600cba1020029e100006fa21bffc033f002d82006144c223e004e223e0008c21a00c8b19600cba1020029a100006fa21bffcde236004ea2360008c21a00c8b19600cba10200298100006fa21bffcda23200496102029d6232000d8213ffc88013ffc80a3600132800005d2036000941020051080000c80a2a001d002600080a23ff53280000794102001da036004f606201880a1001b8bd0201830bffff280a2a0012280000dc4012000d00120007ffe2ca1010000008c21a00c8b19600cba10200284100006fa21bffcd020a004ae103ff5ee20a0008c21a0248b196024ba102008ae100006fa21bffcac102001ec25e01caa102001ea25e018a8103ffde825e014a6102005e625e010a4102001e425e00ca2102005e225e00821000083a00423d8e025e004c425e0008c21a00c8b19600cba10200296100006fa21bffcee22e0049e103fe5de22e00088012004108000afe401200c2280003fc4012008c4012008ee00a014ea05e00080a560153280000980a57ff592100017d00320047ffe2aa101000000ac10000810800014e605a000328000098c21a01092100017d00320047ffe2a9801000000ac1000081080000be605a0008b196010ba102003ac100006fa21bffcd225a008ee25a004a8102019e825a000e605a00080a4e0153280000980a4fff592100016901020057ffe2a85010000009610000810800034d0213ffc328000098c21a01092100016901020057ffe2a7c01000000961000081080002bd0213ffc8b196010ba10200396100006fa21bffca4102005e422e008ec22e004a2102019e222e00010800020d0213ffcee00a014ec05e00080a5a0153280000980a5bff592100017d00320047ffe2a65010000009610000810800014d0213ffc328000098c21a01092100017d00320047ffe2a5c01000000961000081080000bd0213ffc8b196010ba10200396100006fa21bffcd222e008ee22e004aa102019ea22e000d0213ffc88013ffc1080004fe401200cd002600c84102001c422200080a0600122800014ee026018ee026018ec05e000901000107ffdd11a01000000aa102001ea213ffcd60260249410000892100016901000111b3f03219a0363807fffe79688013ffc9610000810800035d0213ffcec05e000aa10000d901000107ffdd10801000000ea213ffca8102001e8213ff8d60260249410000892100016901000111b3f02c69a0363087fff8c6a88013ff8e601200080a4e0012280001f96100008e402200080a4a0153280000980a4bff592100008901020057ffe2a1901000000961000081080001588012004328000098c21a01092100008901020057ffe2a1001000000961000081080000c880120048b196010ba10200396100006fa21bffca2102005e222e008d022e004a0102019e022e00088012004d0213ffc88013ffce401200c9410000bd2012004d004a0087ffe343c01000000e201200ce0046004de042000c2012004b823e001ba206001811f401c2680000a90102001b8206001b91720049a072001da24200090102001d801201081c3200688012014da01201081c360068801201481c2a006010000001b3f00df9a0360847ffda4800100000080a220012280004290102001901000091b3f00df9a0360787ffda4a201000000a8100008d005a01c7ffdaa4601000000d4213ffcec213ff8e8213ff494100015133f00df920260687ffd9fd488013ff4808a20013280000501000000e602200010800009d0012000113f0074900220b8f40620209fc6a00001000000a6102001d00120007ffdb37e01000000a4100008901000137ffdb37a01000000808ca0013280001890102001808a20013280001290102001fa04a004fa213ffcfa022004fa213ff8d2022000d004a0009a0120084000002d88013ff8d0012000e401200488012008f606201880a1001b8bd0201830bfffebe201200881c460068801200ce201200881c460068801200c81c2a00601000000|@6127,131071|32,4,@2357 40,5,@2358 64,4,@2356 72,5,@2361 88,5,@2710 96,5,@2712 120,5,@2710 128,5,@2714 144,5,@2425 172,4,@2355 180,5,@2311 212,4,@1695 240,5,@2710 256,5,@2712 280,5,@2714 336,5,@2714 376,5,@3251 412,5,@3251 504,5,@2389 524,4,@581 540,5,@2710 556,5,@5465 604,5,@1992 648,4,I48 708,5,@1992 752,4,I48 888,5,@3309 984,4,@2377 992,5,@2378 1016,4,@2376 1024,5,@2381 1060,5,@2425 1092,4,@2308 1100,5,@2311 1132,4,@1695 1164,5,@6123 1212,5,@6123 1368,5,@2659 1376,5,@2669 1428,5,@3251 1464,5,@3251 1520,5,@2194 1580,4,@668 1740,5,@3258 1852,5,@3251 1888,5,@3251 1948,5,@2194 2008,4,@621 2168,5,@3258 2276,4,I48 2376,5,@3251 2412,5,@3251 2488,5,@3251 2524,5,@3251 2616,5,@3251 2652,5,@3251 2756,5,@2659 2788,4,@5997 2796,5,@5998 2828,5,@2659 2864,4,@5462 2872,5,@5464 2920,5,@3251 2956,5,@3251 3040,5,@3309 3136,4,@2371 3144,5,@2372 3168,4,@2370 3176,5,@2375 3192,5,@2425 3216,4,@2369 3224,5,@2311 3256,4,@1695 3284,5,@2500 3300,5,@2500 3360,5,@6125 6123:C2,36|9e13e00280a23ffd32800005901020019010200581c3e0060100000081c3e00601000000|@6124,129| 6124:S11|53696d706c6556616c7565 6125:C2,576|9e13e002f606201880a1001b8bd02018c4022008ee00a00080a5e0013280008790102001ec026008ea05a00080a5600132800051e8037ffce805a004e600a004b824e001ba252001811f401c22800007e4037ffce4037ffce204a00ca0102001e0246000e4037ffce204a014e004600080a420153280000c80a43ff5de213ffcda213ff8e6213ff492100011901000147ffe295a88013ff4a01000081080001bda0120043280000c8c21a010de213ffcda213ff8e6213ff492100011901000147ffe294e88013ff4a01000081080000fda0120048b196010ba102003a0100006fa21bffce8242008e224200482102019c2242000de213ffcda213ff8e6213ff488013ff4da012004d8037ffc94100010d2012000d00320087ffe337901000000d6012004d402fffcd202a004d0026000c4012000b8222001ba20a001811f401c2680000a90102001b820a001b9172004ae072001ee22600090102001ec01200881c5a0068801200cee01200881c5e0068801200ce605200ca4102001e424e000e2052018e0046000de213ffcda213ff8fa00a004fa213ff482102001c2213ff0d6052024d402200c98100009921000109010000c1b3f02c69a0363087fff8b5488013ff0d6012004d402fffcd202a0089410000890100009d20120007ffe334801000000c4012004ee00bffcec05e004ea05a000e8012000b8256001ba252001811f401c2680000a90102001b8252001b9172004a6072001e625a00090102001e401200881c4a0068801200ce601200881c4e0068801200c81c3e00601000000|@6126,131071|144,5,@3251 192,5,@3251 280,5,@3309 436,4,@5462 444,5,@5464 476,5,@3309 6126:S90|535452554354555245535f28292e67656e636f646553747275637473283229737472756374757265436f64652834296d61746368537472756374757265283429552d28332970726f63657373436f6e7374727563746f72283229 6127:S69|535452554354555245535f28292e67656e636f646553747275637473283229737472756374757265436f64652834296d61746368537472756374757265283429552d283329 6128:C2,44|9e13e002f606201880a1001b8bd02018d4022008d2022004d0022000da036004f403600081c6a00401000000|@6129,131071| 6129:S69|535452554354555245535f28292e67656e636f646553747275637473283229737472756374757265436f64652834296d61746368537472756374757265283429552d283129 6130:C2,40|9e13e002f606201880a1001b8bd0201892100008d0036004353f002cb406a2b481c6a00401000000|@6131,127139|24,4,@608 6131:S76|535452554354555245535f28292e67656e636f646553747275637473283229737472756374757265436f64652834296d61746368537472756374757265283429636f64654c6973742d283129 6132:C2,112|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffcd0037fc481c3e00601000000da213ff8fa022000fa213ff4d00220047ffffff288013ff48c21a00c8b19600cba1020029e100006fa21bffcd023e004da012000da23e0009010000fde01200881c3e0068801200c|@1966,161| 6133:S64|535452554354555245535f28292e67656e636f646553747275637473283229737472756374757265436f64652834296d61746368537472756374757265283429 6134:C2,120|9e13e002f606201880a1001b8bd02018d0213ffcd0213ff8d0213ff4de213ff096013ff4d4022004d2022000d0036008da036004f40360009fc6a00088013ff08c21a0108b196010ba10200390100006fa21bffcc4012004c4222000ee012008ee222004ec01200cec222008ea01200081c5600688012010|@6135,131071| 6135:S56|535452554354555245535f28292e67656e636f646553747275637473283229737472756374757265436f6465283429636f6465642d283129 6136:C2,112|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffcd0037fe081c3e00601000000da213ff8fa022000fa213ff4d00220047ffffff288013ff48c21a00c8b19600cba1020029e100006fa21bffcd023e004da012000da23e0009010000fde01200881c3e0068801200c|@1966,161| 6137:O3|@24,@397,@6138 6138:S30|737472756374757265436f64653a206e6f74206120737472756374757265 6139:C2,120|9e13e002f606201880a1001b8bd02018d0213ffcd0213ff8d0213ff4de213ff096013ff4d4022004d2022000d0036008da036004f40360009fc6a00088013ff08c21a0108b196010ba10200390100006fa21bffcc4012004c4222000ee012008ee222004ec01200cec222008ea01200081c5600688012010|@5385,131071| 6140:C2,112|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffcd0037fd481c3e00601000000da213ff8fa022000fa213ff4d00220047ffffff288013ff48c21a00c8b19600cba1020029e100006fa21bffcd023e004da012000da23e0009010000fde01200881c3e0068801200c|@1966,161| 6141:S47|535452554354555245535f28292e67656e636f646553747275637473283229737472756374757265436f6465283429 6142:C2,124|9e13e002f606201880a1001b8bd02018d0213ffcd0213ff8d0213ff4de213ff096013ff4d4022004d202200011000083900223d8da036004f40360009fc6a00088013ff08c21a0108b196010ba10200390100006fa21bffcc4012004c4222000ee012008ee222004ec01200cec222008ea01200081c5600688012010|@5385,131071|44,4,I48 6143:O2|0,@6144 6144:O1|@6145 6145:C2,20|9e13e002113f002f9002208c81c3e00601000000|@6146,129|4,4,@660 6146:S40|535452554354555245535f28292e67656e636f646553747275637473283229636f6465642d283129 6147:C2,112|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffcd0037fec81c3e00601000000da213ff8fa022000fa213ff4d00220047ffffff288013ff48c21a00c8b19600cba1020029e100006fa21bffcd023e004da012000da23e0009010000fde01200881c3e0068801200c|@1966,161| 6148:S31|535452554354555245535f28292e67656e636f646553747275637473283229 6149:O3|103,@522,@6150 6150:S21|537461746963206572726f72732028706173733329 6151:C2,1128|9e13e002f6062018ba21206c80a7401b8bd02018d0213ffcd0213ff8d0213ff4d0213ff0de213fecda213fe8fa036024fa213fe4921020019010201d1b0000859a036198f40360009fc6a00088013fe4d0213ffc92102001901020211b0000859a036198f40360009fc6a00088013ffcd0213ffc92102001901020251b0000859a036198f40360009fc6a00088013ffcd0213ffc92102001901020351b0000859a036198f40360009fc6a00088013ffc84012018d020a000ae012018ec012000ec25e004aa012018e8012004e8256008a6012018e4012008e424e00ce201200c80a4600122800009a0102001901000111b0000859a0360d8f40360009fc6a00001000000a0100008c6213ffc213f033da004235ee0213ff89e102001de213ff486013ff4da01201090102001da036020f40360009fc6a00088013ff482100008c60120081080005dd8012018d801200c80a320012280000c96102001d0213ffc901020011b0000859a0360d8f40360009fc6a00088013ffc9610000810800005d0213ffcd0213ffc88013ffcd0213ffcd0213ff8921020019010201d1b0000859a036198f40360009fc6a00088013ff8d6012030b822e001ba222001b91f401c94072001d4213ffc92102001901020211b0000859a036198f40360009fc6a00088013ffcd2012030b8226001ba222001b91f401c84072001ae012004c425e000ac012004ea012000ea25a004e8012008e6012004b824e001ba252001b917401ca4072001e201201c80a460012280000ca0102001e4213ffc901020011b0000859a0360d8f40360009fc6a00088013ffca010000810800005e0012024e4213ffc88013ffce0012024de04201880a3e0012280000dd0012010c2012000c2213ffcda042014da213ff8d6042004d4042008d204200cd00420104000007b88013ff8d0012010f40620209fc6a0000100000082102001d801201880a320012280000c96102001c2213ffc901020011b0000859a0360d8f40360009fc6a00088013ffc9610000810800005d0213ffcc2213ffc88013ffcd0213ffcd0213ff8921020019010201d1b0000859a036198f40360009fc6a00088013ff8d601203cb822e001ba222001b91f401c94072001d4213ffc92102001901020211b0000859a036198f40360009fc6a00088013ffcd201203cb8226001ba222001b91f401c84072001ae012004c425e000ac012004ea012000ea25a004e8012008e6012004b824e001ba252001b917401ca4072001e201202cd0213ffcd0213ff8d0213ff4d0213ff0d0213fecd0213fe8e4213fe494013fe8d204601cd001200c4000083288013fe48c21a01c8b19601cba102006a0100006fa21bffcde012004de242000c2012008c2242004da01200cda242008d8012010d824200cd6012014d6242010d4012018d4242014d2012048d002601880a2200122800011e0213ffce0213ffcc4012000c4213ff8ee026014ee213ff4d6026004d4026008ec026010ea02600c92100015901000164000001088013ff410800004d001200088013ffcd0012000c401205081c0a00688012064|@1449,131071|60,4,I94 92,4,I94 124,4,I94 156,4,I94 240,4,I88 268,4,$6151+334 356,4,I88 412,4,I94 464,4,I94 572,4,I88 664,5,@6152 716,4,I88 772,4,I94 824,4,I94 952,5,@6221 1092,5,@6152 6152:C2,452|9e13e002f606201880a1001b8bd02018de213ffcd0213ff8d2213ff4d4213ff0d6213fec113f033f90022074da012000f40360009fc6a00088013fec92102005d001200c1b3f033f9a03608c4000007101000000da012014f40360009fc6a00001000000113f03469002221cda012014f40360009fc6a00001000000c4012008ee01200cb825e001ba20a001b91f401cac07200192102005901000161b3f033f9a03608c4000005b01000000da012014f40360009fc6a00001000000113f034690022230da012014f40360009fc6a00001000000ea012004e8012008b8252001ba256001b91f401ca607200192102005901000131b3f033f9a03608c4000004501000000da012014f40360009fc6a00001000000113f034690022244da012014f40360009fc6a00001000000e4012000e2012004b8246001ba24a001b91f401ca007200192102005901000101b3f033f9a03608c4000002f01000000da012014f40360009fc6a00001000000113f034690022258da012014f40360009fc6a0000100000092102005d00120181b3f033f9a03608c4000001f01000000da012014f40360009fc6a0000100000090102029da012014de012010f403600081c6a0048801201c|@6220,131071|36,4,@6153 68,4,@6154 76,5,@6156 100,4,@6216 156,4,@6154 164,5,@6156 188,4,@6217 244,4,@6154 252,5,@6156 276,4,@6218 332,4,@6154 340,5,@6156 364,4,@6219 396,4,@6154 404,5,@6156 6153:S15|54696d696e67202d2070617273653a 6154:O2|@6156,@6155 6155:B8|412e848000000000 6156:C2,184|9e13e002f606201880a1001b8bd02018b8226001811f20002480000384102001841000098c21a0088b196008ba10200192100006fa21bffcc42260008c21a00c8b19600cba10200284100006fa21bffcd220a00492103ffdd220a000de213ffcda213ff8c4213ff41b3f033f9a036178f40360009fc6a00088013ff4c4012004d200a0041b0000869a0361d8f40360009fc6a00001000000d20120001b3f033f9a036290de012008353f033fb406a2a881c6a0048801200c|@6215,131071|104,4,@6157 132,4,I128 156,4,@6161 168,4,@6163 6157:O1|@6158 6158:C2,208|9e13e002f606201880a1001b8bd02018808a200122800007de213ffc1b0000869a0362b8f403600081c6a00401000000d0213ff813000080920260011b0000859a036378f40360009fc6a00088013ff87fffffed9e13e00292100008113f033f9002226c1b0000869a0361b8f40360009fc6a00001000000d0213ffc1300008092026001d00120001b0000859a036398f40360009fc6a00088013ffc1b0000869a0362b8f40360009fc6a0000100000092100008d0012000de0120081b0000869a036178f403600081c6a0048801200c|@6160,131071|28,4,I135 52,4,32768 60,4,I109 92,4,@6159 100,4,I127 124,4,32768 136,4,I110 156,4,I135 188,4,I125 6159:B8|40e0000000000000 6160:S15|5265616c2e66726f6d496e74283129 6161:O2|@6163,@6162 6162:O2|@6208,@6207 6163:C2,492|9e13e002f606201880a1001b8bd02018c402600080a0bff93280002180a0bffdda02600480a3600132800007d803600092102019353f0340b406a0b081c6a00401000000b8232001811f200036800004b823200110800007de213ffc811f232034800004de213ffc108000099210000c113f0007900223e4f40620209fc6a00088013ffc901020019210000c353f0340b406a0b081c6a004010000003280002180a0a005ee02600480a5e00132800007ec05e00092102019353f0341b406a25c81c6a00401000000b825a001811f200036800004b825a00110800007de213ffc811f232034800004de213ffc1080000992100016113f0007900223e4f40620209fc6a00088013ffc9010200192100016353f0341b406a25c81c6a0040100000032800021d0213ffcee02600480a5e00132800007ec05e00092102031353f0343b406a14081c6a00401000000b825a001811f200436800004b825a00110800007de213ffc811f232034800004de213ffc1080000992100016113f0007900223e4f40620209fc6a00088013ffc9010200192100016353f0343b406a14081c6a00401000000d0213ff8d0213ff4d0213ff0de213fec92013ff0da036004f40360009fc6a00088013fecd6012010d401200cd2012008d0012004de012000353f0344b406a26481c6a00488012014|@6206,131071|52,4,@6164 112,4,@251 140,4,@6164 184,4,@6176 244,4,@251 272,4,@6176 316,4,@6190 376,4,@251 404,4,@6190 476,4,@6197 6164:C2,932|9e13e002f606201880a1001b8bd02018de213ffcd0213ff8d2213ff4921000089010203d1b0000869a036158f40360009fc6a00088013ff480a2200132800029c4012000d2012004901020451b0000869a036158f40360009fc6a0000100000080a220012280000501000000841021f910800005c4213ffc050000838400a3d8c4213ffcd2012004901020411b0000869a036158f40360009fc6a00088013ffc80a220012280000601000000053f03418400a0701080000592100002053f03418400a07c92100002d0012000de01200c353f0025b406a04c81c6a00488012010b820a001b9172004ae0720019410001792102009d00120041b0000869a036078f40360009fc6a00001000000ec022000808da00132800004b8102004f805a000b92f2002aa07200180a560013280002580a56005e401200080a4a00132800006fa02200827000083a604e3d810800010fa022008fa213ffc901000121b3f03419a036088f40360009fc6a00088013ffc92100008901020b97ffce48901000000a61000081080000592100013fa213ffc88013ffc92100013901020c17ffce48001000000133f0341920261307ffce47c01000000a81000081080006ed401200032800027fa022008e201200080a4600132800006fa02200825000083a404a3d810800013fa022008fa213ffcec213ff8fa022004fa213ff4901000111b3f03419a03613cf40360009fc6a00088013ff492100008901020b97ffce46101000000a41000081080000892100012fa213ffcec213ff8fa022004fa213ff488013ff492100012d00120047ffce45501000000a61000081080003492102115fa213ffcd0213ff8fa022004fa213ff4ec213ff0ea213fec9410200592102001901000167ffd213488013fec921020b97ffce44401000000e4012000b824a001b91f2004a2072001d0213ffc9410001192102005d00120047ffd212788013ffc92100008d00120007ffce43601000000e0012018de012004b823e001ba242001b91f401c82072001b91720049a072001d0213ffc9010000d1b3f03419a0361c0f40360009fc6a00088013ffc92100008d00120007ffce42301000000a61000088801201092102115901000137ffce41d01000000d8012000b8232001b91f200496072001d0213ffc92103ffd9010000b7ffce58488013ffc92100008d00120007ffce41001000000a81000088801200cd401200080a2a001228000099010001492100014901021f9de01200c353f0025b406a04c81c6a00488012010d201200c81c2600688012010|@6175,131071|36,4,I124 76,4,I124 120,4,I48 140,4,I124 172,4,@6165 188,4,@6166 208,4,@496 248,4,I117 324,4,I48 348,4,@6167 376,5,@496 412,5,@496 420,4,@6170 428,5,@496 472,4,I48 508,4,@6171 536,5,@496 584,5,@496 640,5,@1585 652,5,@496 692,5,@1585 708,5,@496 756,4,@6173 784,5,@496 808,5,@496 844,5,@509 860,5,@496 904,4,@496 6165:S3|6e616e 6166:S3|696e66 6167:O1|@6168 6168:C2,96|9e13e002f606201880a1001b8bd02018b8222001811f200034800006b822200111000083900223d881c3e00601000000b91f200490072001de213ffc7ffffff188013ffc92100008901020c1de012000353f0025b406a04c81c6a00488012004|@6169,131071|32,4,I48 80,4,@496 6169:S25|5265616c2e736369466d742832296164645a65726f73283129 6170:S2|4530 6171:O1|@6172 6172:C2,96|9e13e002f606201880a1001b8bd02018b8222001811f200034800006b822200111000083900223d881c3e00601000000b91f200490072001de213ffc7ffffff188013ffc92100008901020c1de012000353f0025b406a04c81c6a00488012004|@6169,131071|32,4,I48 80,4,@496 6173:O1|@6174 6174:C2,96|9e13e002f606201880a1001b8bd02018b8222001811f200034800006b822200111000083900223d881c3e00601000000b91f200490072001de213ffc7ffffff188013ffc92100008901020c1de012000353f0025b406a04c81c6a00488012004|@6169,131071|32,4,I48 80,4,@496 6175:S14|5265616c2e736369466d74283229 6176:C2,1016|9e13e002f606201880a1001b8bd02018de213ffcd0213ff8d2213ff4921000089010203d1b0000869a036158f40360009fc6a00088013ff480a2200132800029d4012000d2012004901020451b0000869a036158f40360009fc6a0000100000080a220012280000501000000841021f910800005c4213ffc050000838400a3d8c4213ffcd2012004901020411b0000869a036158f40360009fc6a00088013ffc80a220012280000601000000053f03418400a0701080000592100002053f03418400a07c92100002d0012000de01200c353f0025b406a04c81c6a004880120109210200dd00120041b0000869a036078f40360009fc6a00001000000c40220008088a00132800004b8102004f800a000b92f2002ae072001ec022004b825a001811f20003480003db825a001e801200080a5200132800005b825a001aa1020c110800030d0213ffcba102000b91f401ca6072001c4213ffcec213ff8fa022008fa213ff4ee213ff0901000131b3f03429a036270f40360009fc6a00088013ff092100008113f03429002230c7ffce31901000000d201200c7ffce31601000000e4012010e2012000b8246001ba24a001b91f401ca0072001de012008ba23e001b917001d82072001d0213ffc901000011b3f03429a036318f40360009fc6a00088013ffc92100008d00120007ffce30101000000aa1000081080007288012008d0213ff8fa022008fa213ff488013ff41080006dda012000ba25e001811f401c34800032d0213ffcb825e001ba25a001b91f401caa072001d0213ffcd0213ff8fa022008fa213ff4c4213ff0901000151b3f03429a03639cf40360009fc6a00088013ff092100008d00120007ffce2e101000000e601201080a4e00132800006d0213ffc29000083a80523d81080000fd0213ffc901000131b3f03439a036020f40360009fc6a00088013ffc92100008901020b97ffce2cf01000000a8100008108000049210001488013ffc92100014d00120007ffce2c701000000aa1000081080003888012008d0213ff8fa022008fa213ff4c4213ff0ec213fecee213fe89410001692102001901000027ffd1fa688013fe8921020b97ffce2b601000000ea012000e8012004b8252001ba256001b91f401ca6072001d0213ffc9410001392100014d00120087ffd1f9788013ffc92100008d00120007ffce2a601000000e401201ce2012004b8246001ba24a001b91f401ca0072001de012008ba23e001b917001d82072001d0213ffc901000011b3f03439a0360a4f40360009fc6a00088013ffc92100008d00120007ffce29101000000aa1000088801200c88012008da01200080a36001228000099010001592100015901021f9de012014353f0025b406a04c81c6a00488012018d801201481c3200688012018|@6189,131071|36,4,I124 76,4,I124 120,4,I48 140,4,I124 172,4,@6165 188,4,@6166 208,4,@496 232,4,I117 364,4,@6177 388,4,@6180 396,5,@496 408,5,@496 464,4,@6181 492,5,@496 592,4,@6183 620,5,@496 644,4,I48 664,4,@6185 692,5,@496 724,5,@496 780,5,@1585 792,5,@496 840,5,@1585 856,5,@496 912,4,@6187 940,5,@496 988,4,@496 6177:O1|@6178 6178:C2,96|9e13e002f606201880a1001b8bd02018b8222001811f200034800006b822200111000083900223d881c3e00601000000b91f200490072001de213ffc7ffffff188013ffc92100008901020c1de012000353f0025b406a04c81c6a00488012004|@6179,131071|32,4,I48 80,4,@496 6179:S16|5265616c2e6164645a65726f73283129 6180:S2|302e 6181:O1|@6182 6182:C2,96|9e13e002f606201880a1001b8bd02018b8222001811f200034800006b822200111000083900223d881c3e00601000000b91f200490072001de213ffc7ffffff188013ffc92100008901020c1de012000353f0025b406a04c81c6a00488012004|@6179,131071|32,4,I48 80,4,@496 6183:O1|@6184 6184:C2,96|9e13e002f606201880a1001b8bd02018b8222001811f200034800006b822200111000083900223d881c3e00601000000b91f200490072001de213ffc7ffffff188013ffc92100008901020c1de012000353f0025b406a04c81c6a00488012004|@6179,131071|32,4,I48 80,4,@496 6185:O1|@6186 6186:C2,96|9e13e002f606201880a1001b8bd02018b8222001811f200034800006b822200111000083900223d881c3e00601000000b91f200490072001de213ffc7ffffff188013ffc92100008901020c1de012000353f0025b406a04c81c6a00488012004|@6179,131071|32,4,I48 80,4,@496 6187:O1|@6188 6188:C2,96|9e13e002f606201880a1001b8bd02018b8222001811f200034800006b822200111000083900223d881c3e00601000000b91f200490072001de213ffc7ffffff188013ffc92100008901020c1de012000353f0025b406a04c81c6a00488012004|@6179,131071|32,4,I48 80,4,@496 6189:S14|5265616c2e666978466d74283229 6190:C2,988|9e13e002f606201880a1001b8bd02018de213ffcd0213ff8d2213ff4921000089010203d1b0000869a036158f40360009fc6a00088013ff480a2200132800029d4012000d2012004901020451b0000869a036158f40360009fc6a0000100000080a220012280000501000000841021f910800005c4213ffc050000838400a3d8c4213ffcd2012004901020411b0000869a036158f40360009fc6a00088013ffc80a220012280000601000000053f03418400a0701080000592100002053f03418400a07c92100002d0012000de01200c353f0025b406a04c81c6a0048801201092102009d00120041b0000869a036078f40360009fc6a00001000000c40220008088a00132800004b8102004f800a000b92f2002ae072001ec022004ea012000b8256001ba25a001811f401c24800004b825a0011080000780a5e005811f3fec2680000480a5e0051080003cb825a00132800005c4213ffca61000021080001fd0213ffcec213ff8fa022008fa213ff4ee213ff09410200592102001901000027ffd1e5088013ff0921020b97ffce16001000000e4012000b824a001b91f2004a2072001d0213ffc9410001192102005d001200c7ffd1e4388013ffc92100008d00120007ffce15201000000a61000081080000688012008ec213ff8fa022008fa213ff488013ff492102115901000137ffce14701000000e4012004b824a001b91f2004a2072001d0213ffc92103ffd901000117ffce2ae88013ffc92100008d00120007ffce13a01000000a81000081080005ee2012004811f20003480001cb825a001b825a001ba102000b91f401ca8072001d0213ffcd0213ff8fa022008fa213ff4c4213ff0901000141b3f03449a036138f40360009fc6a00088013ff092100008113f03429002230c7ffce12001000000d20120007ffce11d01000000a810000810800041e2012004ba25e001811f401c3480001cd0213ffcb825e001ba25a001b91f401ca8072001d0213ffcd0213ff8fa022008fa213ff4c4213ff0901000141b3f03449a0361bcf40360009fc6a00088013ff092100008d00120007ffce10301000000133f0344920262407ffce0ff01000000a810000810800023e2012004d0213ff8fa022008fa213ff4c4213ff0ec213fecee213fe89410001692102001901000027ffd1dde88013fe8921020b97ffce0ee01000000e8012000e6012004b824e001ba252001b91f401ca4072001d0213ffc9410001292100013d00120087ffd1dcf88013ffc92100008d00120007ffce0de01000000a81000088801200ce201200480a46001228000099010001492100014901021f9de012018353f0025b406a04c81c6a0048801201ce001201881c420068801201c|@6196,131071|36,4,I124 76,4,I124 120,4,I48 140,4,I124 172,4,@6165 188,4,@6166 208,4,@496 232,4,I117 384,5,@1585 396,5,@496 436,5,@1585 452,5,@496 496,5,@496 532,5,@509 548,5,@496 620,4,@6191 644,4,@6180 652,5,@496 664,5,@496 740,4,@6193 768,5,@496 776,4,@6195 784,5,@496 840,5,@1585 852,5,@496 900,5,@1585 916,5,@496 960,4,@496 6191:O1|@6192 6192:C2,96|9e13e002f606201880a1001b8bd02018b8222001811f200034800006b822200111000083900223d881c3e00601000000b91f200490072001de213ffc7ffffff188013ffc92100008901020c1de012000353f0025b406a04c81c6a00488012004|@6179,131071|32,4,I48 80,4,@496 6193:O1|@6194 6194:C2,96|9e13e002f606201880a1001b8bd02018b8222001811f200034800006b822200111000083900223d881c3e00601000000b91f200490072001de213ffc7ffffff188013ffc92100008901020c1de012000353f0025b406a04c81c6a00488012004|@6179,131071|32,4,I48 80,4,@496 6195:S2|2e30 6196:S14|5265616c2e67656e466d74283229 6197:C2,356|9e13e002f606201880a1001b8bd0201880a260053280000d80a2bffdde213ffc921020017ffffff788013ffc92100008901021f9de012000353f0025b406a04c81c6a004880120043280001480a2a001de213ffc9010000b1b3f03449a0363e4f40360009fc6a00088013ffc92100008113f0345900220947ffce05c01000000921020a5de012000353f0025b406a04c81c6a004880120043280000680a2a009113f03419002207c81c3e0060100000032800006de213ffc113f0345900220a081c3e00601000000d0213ff89010000b1b3f03459a0360acf40360009fc6a00088013ff892100008113f03429002230c7ffce03e01000000ee01200080a5e00132800006d0213ffc050000838400a3d81080000dd0213ffc92103ffd901000177ffce1a288013ffc92100008901021157ffce02e0100000084100008108000049210000288013ffc92100002d0012000de012008353f0025b406a04c81c6a0048801200c|@6205,131071|56,4,@496 88,4,@6198 112,4,@6201 120,5,@496 136,4,@496 160,4,@6166 184,4,@6202 208,4,@6203 232,4,@6180 240,5,@496 264,4,I48 288,5,@509 304,5,@496 340,4,@496 6198:O1|@6199 6199:C2,112|9e13e002f606201880a1001b8bd0201880a2200132800006de213ffc11000083900223d881c3e00601000000fa022004fa213ff892103ffdd00220007ffce17988013ff8d0213ffcd00120007fffffed88013ffc92100008d0012000de012008353f0025b406a04c81c6a0048801200c|@6200,131071|28,4,I48 60,5,@509 96,4,@496 6200:S20|494545455265616c2e646f646967697473283129 6201:S4|6e616e28 6202:S3|302e30 6203:O1|@6204 6204:C2,112|9e13e002f606201880a1001b8bd0201880a2200132800006de213ffc11000083900223d881c3e00601000000fa022004fa213ff892103ffdd00220007ffce14788013ff8d0213ffcd00120007fffffed88013ffc92100008d0012000de012008353f0025b406a04c81c6a0048801200c|@6200,131071|28,4,I48 60,5,@509 96,4,@496 6205:S20|494545455265616c2e746f537472696e67283429 6206:S11|5265616c2e666d74283229 6207:B8|0010000000000000 6208:C2,632|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d0213ff4d2213ff092100008901020451b0000869a036158f40360009fc6a00088013ff0d0213ffcd20120049010203d1b0000869a036158f40360009fc6a00088013ffc80a2200122800032d2012008133f034692026010d00120081b0000869a036118f40360009fc6a0000100000080a220012280000501000000841020091080002f80a0a009133f034692026010d00120081b0000869a036098f40360009fc6a0000100000080a2200122800005d0012008ee01200810800009ec01200c1b0000869a036218f40360009fc6a00001000000ae100008ec01200cd205a004901000171b0000869a036098f40360009fc6a0000100000080a220012280000f84103ff9841020051080000d80a0a009901020411b0000869a036158f40360009fc6a0000100000080a22001228000038410200184103ffd80a0a0093280000f80a0a001c4012004ae102001ee20a000ec012000ec20a004aa102009ea20a008a8102001e820a00c90102001e601201081c4e006880120143280000f80a0bffdc4012004ae102001ee20a000ec012000ec20a004aa102001ea20a008a8102001e820a00c90102001e601201081c4e006880120143280000fc4213ffcc4012004ae102001ee20a000ec012000ec20a004aa103ffdea20a008a8102001e820a00c90102001e601201081c4e006880120149410200192102001d00120081b0000869a036078f40360009fc6a00088013ffce8022004e6022008d00220004000001b0100000080a4e00132800003a4102001a4102005a21ca004e0012008e8242000e2242004de012000de242008d024200c90102001c201201481c0600688012018|@6214,131071|40,4,I124 72,4,I124 104,4,@6209 116,4,I122 160,4,@6209 172,4,I118 216,4,I130 252,4,I118 300,4,I124 532,4,I117 564,5,@6210 6209:B8|0000000000000000 6210:C2,96|9e13e002f606201880a1001b8bd02018d0213ffc808a20011280000688013ffcf8022000b92f20021080000484072001b810200484072001b91f2004ae072001aa10000f92100017901020019a0120004000000b0100000081c5600688012004|@6213,123043|80,5,@6211 6211:C2,240|9e13e002f606201880a1001b8bd02018b8226001811f200036800004b822600181c3e00601000000b91f200484072001b8226001811f200036800004ee0360001080000ede213ffc808de00132800004b8102004f805e000b92f2002ac072001ba226001811f401c36800004de213ffc1080000a808de001ac100008113f0004900223d0f40620209fc6a00088013ffcae102001808de00122800004ac82601010800007b825e001bb3da002fa0dc01db92f6002ae072001b825e001b91f20c0920720018c21a00c8b19600cba102002ae100006fa21bffcd025e004d225e000921000029010001710bfffc8f6062018|@6212,114851|124,4,@224 6212:S32|5265616c2e737472546f44696769744c69737428312967657444696773283229 6213:S22|5265616c2e737472546f44696769744c697374283129 6214:S17|5265616c2e746f446563696d616c283229 6215:S11|54696d652e666d74283229 6216:S12|2c2073656d616e746963733a 6217:S12|2c207472616e736c6174653a 6218:S11|2c2067656e65726174653a 6219:S6|2c2072756e3a 6220:S29|434f4d50494c45525f424f445928292e7072696e7454696d6573283629 6221:C2,372|9e13e002f606201880a1001b8bd02018d0213ffcde213ff8d4213ff4053f03478400a02088013ff480a2600132800005d0213ffcae1000021080001cec05e004d0213ff8fa026004fa213ff494013ff8ec02600092100002901000169a0120084000004f88013ff48c21a00c8b19600cba102002aa100006fa21bffce8012004e8256000e6012008e625600484100015d20120008801200cf606201880a1001b8bd0201830bfffe1ec213ffc92102001d005a0004000068788013ffcea012000d0213ffc92102001d00560084000068188013ffce8012004d0213ffc92102001d00520144000067b88013ffce6012008d0213ffc92102001d004e00c4000067588013ffce401200cd0213ffc92102001d004a0044000066f88013ffce2012010d0213ffc92102001d00460104000066988013ffce0012018de012010de242000c2012000c2242004da01200cda242008d8012004d824200cd0242010d6012008d624201490102001d401201c81c2a00688012024|@6251,131071|28,4,@6222 96,5,@6223 180,5,@6248 204,5,@6248 228,5,@6248 252,5,@6248 276,5,@6248 300,5,@6248 6222:O2|0,@1448 6223:C2,1304|9e13e002f606201880a1001b8bd02018c4026004ee02200080a5e0093280005280a5e01dda213ffc8c21a00c88013ffc8b19600cba102002ac100006fa21bffcea00a00cea25a004e8026000e825a000de213ffcd4213ff8fa00a000fa213ff4fa00a004fa213ff0fa00a008fa213fecfa00a010fa213fe8fa00a014fa213fe4e602200488013fe480a4e00132800005d0213ffca41000161080001b8c21a01cd0213ff8fa04e004fa213ff494013ff892100016d004e0009a01201c4000011e88013ff48c21a00c8b19600cba102002a2100006fa21bffce0012004e0246000de012008de246004ac100011e60120008801200cf606201880a1001b8bd0201830bfffe28b19601cba102006a2100006fa21bffce0012000e0246014de012004de246010c204a004c224600cda012008da246008d801200cd8246004d6012010d6246000d4012014d204a000d222a000e222a00490102001c401201881c0a006880120203280005280a5e00dda213ffc8c21a00c88013ffc8b19600cba102002ac100006fa21bffcea00a014ea25a004e8026000e825a000de213ffcd4213ff8fa00a000fa213ff4fa00a004fa213ff0fa00a008fa213fecfa00a00cfa213fe8fa00a010fa213fe4e602200488013fe480a4e00132800005d0213ffca41000161080001b8c21a01cd0213ff8fa04e004fa213ff494013ff892100016d004e0009a01201c4000017788013ff48c21a00c8b19600cba102002a2100006fa21bffce0012004e0246000de012008de246004ac100011e60120008801200cf606201880a1001b8bd0201830bfffe28b19601cba102006a2100006fa21bffce004a004e0246014de012000de246010c2012004c224600cda012008da246008d801200cd8246004d6012010d6246000d4012014d204a000d222a000e222a00490102001c401201881c0a006880120203280002d80a5e019de213ffcda213ff8d4213ff4ec02200488013ff480a5a00132800005d0213ffcaa1000091080001ae8012000d0213ff8fa05a004fa213ff494013ff8d005a000da0120047fffff4288013ff48c21a00c8b19600cba102002a8100006fa21bffce6012004e6252000e4012008e425200492100014ec0120008801200cf606201880a1001b8bd0201830bfffe3e6056000e6252000e4056004e425200490102001e201200881c460068801200c3280002e80a5e015da213ffcec02200cea05a000de213ff8d4213ff488013ff480a5600132800005d0213ffca81000091080001ae6012000d0213ff8fa056004fa213ff494013ff8d00560009a0120084000037088013ff48c21a00c8b19600cba102002a6100006fa21bffce4012004e424e000e2012008e224e00492100013ea0120008801200cf606201880a1001b8bd0201830bfffe3e4052000e424e000e2052004e224e00490102001e001200481c420068801200c3280003aec026000de213ffcd4213ff8fa026000fa213ff4fa00a000fa213ff0fa00a004fa213fecfa00a008fa213fe8fa00a00cfa213fe4fa00a010fa213fe0fa00a014fa213fdcd00220041b3f034c9a0363e4f40360009fc6a00088013fdcea01200480a56001328000059a012020ac100008108000068c21a01c400004f701000000ac1000088c21a01c8b19601cba102006a8100006fa21bffce6012000e6252014ec252010e4012008e425200ce201200ce2252008e0012010e0252004de012014de252000c201201cda012018da206000e820600490102001d801202081c3200688012024ec22a000ea026004ea22a0049010200181c3e00601000000|@6247,131071|188,5,@6224 516,5,@6228 944,5,@6242 1124,4,@6244 1172,5,@6246 6224:C2,460|9e13e002f606201880a1001b8bd02018c4036000ee00a000ea05e00080a560153280001380a57ff5de213ffcd4213ff8fa02200cfa213ff4fa022014fa213ff0fa026000fa213fecfa026004fa213fe892100017d0013fec7ffe1c1788013fe8ac10000810800029e4012008328000138c21a010de213ffcd4213ff8fa02200cfa213ff4fa022014fa213ff0fa026000fa213fecfa026004fa213fe892100017d0013fec7ffe1c0488013fe8ac10000810800016e40120088b196010ba102003ac100006fa21bffce8026000e825a008ee25a004a6102019e625a000de213ffcd4213ff8fa02200cfa213ff4fa022014fa213ff0e8213fecfa026004fa213fe888013fe8e4012008e204a000901000114000003601000000a0100008901000117ffd99850100000082100008901000117ffd99620100000098100008901000167fff4c5701000000961000089410000c92100001901000107fff655301000000d6012004b822e001b9172004940720018c21a00c8b19600cba10200292100006fa21bffcd0226004d001200cd02260008c21a00c8b19600cba10200284100006fa21bffcee012000ee20a004d220a000ec012010d425a000c425a00490102001ea01201481c5600688012018|@6227,131071|88,5,@3251 164,5,@3251 272,5,@6225 288,5,@2406 304,5,@2404 320,5,@5095 344,5,@5277 6225:C2,56|9e13e00280a220013280000ad0022004de213ffc113f003890022020f40620209fc6a00088013ffc90102001d002200481c3e00601000000|@6226,129|20,4,@1110 6226:S28|5354525543545f56414c5328292e66756e63746f724e616d65283129 6227:S66|535452554354555245535f28292e706173733453747275637473283329657874726163745374727563742833296578747261637446756e63746f7242696e64283329 6228:C2,620|9e13e002f606201880a1001b8bd02018c4022010ee00a00080a5e0013280001eec05e008de213ffcda213ff8d4213ff4fa022004fa213ff0fa026000fa213fecfa026004fa213fe8901020297ffd609688013fe88c21a0148b196014ba102004aa100006fa21bffca8102001e825600ca6102001e625600825000083a404a3d8e4256004d0256000ac1000151080000dea012010de213ffcda213ff8d4213ff4fa022004fa213ff0fa026000fa213fecfa026004fa213fe888013fe8ea012010e8056000e6052000e204e00080a460153280000a80a47ff5ec213ffc92100013d00120047ffe1b4988013ffca410000810800018e4213ffc3280000a8c21a010ec213ffc92100013d00120047ffe1b3f88013ffca41000081080000ee4213ffc8b196010ba102003a4100006fa21bffce0012004e024a008e624a0049e102019de24a000ec213ffc88013ffce4213ffcd2012000901000124000004c88013ffcc201200cb8206001b91720049a072001d8012004da213ffcfa03200cfa213ff8fa032008fa213ff4d00320007ffdc51e88013ff48c21a0148b196014ba10200496100006fa21bffcd4012004d422e00cd2012000d222e008050000838400a3d8c422e004d022e0008c21a00c8b19600cba102002ae100006fa21bffcec01200cec25e004aa103ffdea25e0008c21a0108b196010ba102003a8100006fa21bffcd6252008ee252004e601201ce62520008c21a00c8b19600cba102002a4100006fa21bffce824a004e624a0008c21a00c8b19600cba102002a2100006fa21bffce0012014e0246004e4246000de012020c2012008c223e000e223e00490102001da01202881c360068801202c|@6241,131071|76,5,@1992 120,4,I48 228,5,@3251 268,5,@3251 344,5,@6229 396,5,@2690 440,4,I48 6229:C2,148|9e13e002f606201880a1001b8bd020188410000fae100008901000097ffd9b4a010000008c21a0108b196010ba1020039e100006fa21bffc1b3f03499a036344da23e000ee23e008133f034b9202608cd223e0048c21a00c8b19600cba102002ae100006fa21bffc1b3f034b9a036094da25e000de25e00494102001921000179e100002353f00eeb406a27881c6a00401000000|@6240,131071|28,5,@2425 56,4,@6230 72,4,@6237 104,4,@6238 132,4,@2508 6230:C2,624|9e13e002f606201880a1001b8bd020189410000fac10000d901000091b3f00de9a0362347ffd94b60100000080a220012280007190100009901000091b3f00de9a0362287ffd94d80100000092100008901000097ffdc85d01000000ee02200080a5e0013280002caa100008de05a008da03e00080a360153280000c80a37ff5d4213ffcec213ff8d2213ff49210000fd00220047ffe1a8f88013ff48410000810800034e60120003280000c8c21a010d4213ffcec213ff8d2213ff49210000fd00220047ffe1a8388013ff48410000810800028e60120008b196010ba10200384100006fa21bffcd8022004d820a008de20a00496102019d620a000d4213ffcec213ff8d2213ff488013ff410800019e6012000901000157ffdcbde0100000080a2200122800008d4213ffc901000157ffdcbed010000008410000810800009d4213ffc113f034a900221d0f40620209fc6a00088013ffc84102001d4213ffcec213ff8d2213ff488013ff4e601200080a4e00132800016e804e008c4213ffc901020297ffd5f7a88013ffc8c21a0148b196014ba102004a4100006fa21bffca2102001e224a00ca0102001e024a0081f0000839e03e3d8de24a004d024a000a810001210800005e4012008c4213ffc88013ffce401200892100014d0012000da04a004de01200cf403600081c6a004880120101b3f00df9a0360847ffd94d40100000080a220012280001890102001901000091b3f00df9a0360787ffd94f601000000ec213ffca8100008901000147ffda3e888013ffcd4213ffce8213ff89a0120004000001f88013ff892100008d0012000de012004353f0116b406a05481c6a0048801200c81c2a00601000000|@6236,131071|28,4,@2357 36,5,@2358 60,4,@2356 68,5,@2361 84,5,@2710 148,5,@3251 196,5,@3251 280,5,@2733 304,5,@2735 324,4,@6231 388,5,@1992 432,4,I48 500,4,@2371 508,5,@2372 532,4,@2370 540,5,@2375 560,5,@2500 580,5,@6233 600,4,@2736 6231:O3|@24,@397,@6232 6232:S28|6578747261637456616c73546f5369673a2062616420616363657373 6233:C2,132|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffc9010200181c3e00601000000da213ff8fa022004fa213ff4d00220004000001a88013ff4d0213ffcd0012000da0120047fffffed88013ffc8c21a00c8b19600cba10200284100006fa21bffcd020a004ee012000ee20a00090100002ec01200c81c5a00688012010|@586,131071|56,5,@6234 6234:C2,320|9e13e002f606201880a1001b8bd02018c4022008ee00a00080a5e0013280004701000000ec036000ea05a008e805600080a520153280000f80a53ff5de213ffcfa022000fa213ff8fa022004fa213ff4fa02200cfa213ff092100015d000a0047ffe19c488013ff010800022010000003280000fe6022000de213ffcfa022000fa213ff8fa022004fa213ff4fa02200cfa213ff092100015d000a0047ffe19b588013ff01080001301000000e4022004e202200c8c21a0108b196010ba10200390100006fa21bffce000a004e0222008ea22200482102019c2222000de213ffce6213ff8e4213ff4e2213ff088013ff07fff4a1a010000008c21a0148b196014ba1020049a100006fa21bffcd8012000d823600cd0236008d6012004d6236004d4012008d42360009010000dd201200c81c260068801201081c3e00601000000|@6235,131071|96,5,@3251 156,5,@3251 240,5,@5095 6235:S70|535452554354555245535f28292e7061737334537472756374732833296578747261637456616c73546f536967283229283329636f707941436f6e7374727563746f72283129 6236:S51|535452554354555245535f28292e7061737334537472756374732833296578747261637456616c73546f536967283229283329 6237:O1|@6229 6238:C2,44|9e13e002f606201880a1001b8bd02018d4022008d2022004d0022000da036004f403600081c6a00401000000|@6239,131071| 6239:S51|535452554354555245535f28292e7061737334537472756374732833296578747261637456616c73546f536967283229283129 6240:S48|535452554354555245535f28292e7061737334537472756374732833296578747261637456616c73546f536967283229 6241:S68|535452554354555245535f28292e706173733453747275637473283329657874726163745374727563742833296578747261637453747275637475726542696e64283329 6242:C2,1516|9e13e002f606201880a1001b8bd02018c402200080a0bff9328000da80a0bffd8c21a0148b196014ba102004ae100006fa21bffcec022010ec25e00cea02200cea25e008e8022008e825e004e6022004e625e000e4026004a210000fa010000d901000157ffdcbdd0100000080a2200122800031de042000901000157ffdcbed01000000de026000b823e001b91720049a0720018410000d901000177ffd7fb7010000008c21a00c8b19600cba102002ac100006fa21bffcee25a004d025a0008c21a00c8b19600cba102002aa100006fa21bffce804a008e8256004ec2560008c21a01c8b19601cba102006a6100006fa21bffce004a014e024e014de04a010de24e010da04a00cda24e00cea24e008d004a004d024e004ee04a000ee24e000c422a000e622a0049010200181c4600601000000da03e000d003600080a220153280001c80a23ff5e2213ffcd4213ff8e8213ff4ec213ff0ee213fecfa026000fa213fe8fa04a000fa213fe4fa04a004fa213fe0fa04a008fa213fdcfa04a00cfa213fd8fa04a010fa213fd4fa04a014fa213fd09210000dd0013fe87ffe18b788013fd0981000081080003bd001201c3280001c8c21a010e2213ffcd4213ff8e8213ff4ec213ff0ee213fecfa026000fa213fe8fa04a000fa213fe4fa04a004fa213fe0fa04a008fa213fdcfa04a00cfa213fd8fa04a010fa213fd4fa04a014fa213fd09210000dd0013fe87ffe189b88013fd0981000081080001fd001201c8b196010ba10200398100006fa21bffcc4026000c4232008da232004aa102019ea232000e2213ffcd4213ff8e8213ff4ec213ff0ee213fecc4213fe8fa04a000fa213fe4fa04a004fa213fe0fa04a008fa213fdcfa04a00cfa213fd8fa04a010fa213fd4fa04a014fa213fd088013fd0d001201c7ffd7f3901000000a81000089010000c7fff48ef010000008c21a0148b196014ba102004a6100006fa21bffce4012020e424e00cd024e008e2012024e224e004e824e000e0012018b8242001b91720049e0720018c21a00c8b19600cba10200282100006fa21bffce6206004e82060008c21a00c8b19600cba1020029a100006fa21bffcd801200cd8236004c22360008c21a01c8b19601cba10200696100006fa21bffcd4012000d422e014d2012004d222e010d0012008d022e00cda22e008c4012010c422e004ee012014ee22e000ec012028de25a000d625a00490102001ea01202c81c56006880120303280002d80a0a001ee026004ac10000fea022004901000157ffdc64d010000008c21a00c8b19600cba102002a8100006fa21bffcea252004d02520008c21a00c8b19600cba102002a6100006fa21bffce405e014e424e004e824e0008c21a01c8b19601cba102006a2100006fa21bffce6246014e005e010e0246010de05e00cde24600cc205e008c2246008da05e004da246004d805e000d8246000d6026000d622a000e222a0049010200181c5a006010000003280002aee0260048c21a00c8b19600cba102002ae100006fa21bffcec022008ec25e004ea022004ea25e000e80260048c21a00c8b19600cba102002a6100006fa21bffce4052000e424e004ee24e0008c21a01c8b19601cba102006a2100006fa21bffce0052014e0246014c2052010c2246010da05200cda24600cd8052008d8246008d6052004d6246004e6246000ee026000ee22a000e222a0049010200181c3e00601000000ac10000fea022004901000157ffd6e0701000000d0213ffcd0213ff8ec213ff4d4213ff0ea213fecfa026000fa213fe8fa05e000fa213fe4fa05e004fa213fe0fa05e008fa213fdcfa05e00cfa213fd8fa05e010fa213fd4fa05e014fa213fd092013ff87ffd6e0488013fd08c21a00c8b19600cba102002a8100006fa21bffce601201ce6252004e401202ce42520008c21a00c8b19600cba102002a2100006fa21bffce0012010e0246004e82460008c21a01c8b19601cba1020069e100006fa21bffcc2012000c223e014da012004da23e010d8012008d823e00cd601200cd623e008e223e004d4012014d423e000d2012020d0012018d0226000de22600490102001c401202481c0a00688012030|@6243,131071|100,5,@2752 124,5,@2754 156,5,@2194 412,5,@3251 524,5,@3251 660,5,@2194 676,5,@5095 920,5,@2716 1256,5,@2128 1344,5,@2130 6243:S56|535452554354555245535f28292e706173733453747275637473283329657874726163745374727563742833296d616b6544656373283329 6244:O1|@6245 6245:C2,148|9e13e002f606201880a1001b8bd0201880a2200132800005c40220009010200181c3e00601000000ee00a008ec05e0008c21a00c8b19600cba102002aa100006fa21bffcec256004ec00a004ec256000de213ffcea213ff8d00220047fffffe988013ff88c21a00c8b19600cba102002aa100006fa21bffcd0256004de012000de25600090100015c401200481c0a00688012008|@586,123009| 6246:C2,112|9e13e002f606201880a1001b8bd0201880a2200132800005de213ffcd0037fe481c3e00601000000da213ff8fa022000fa213ff4d00220047ffffff288013ff48c21a00c8b19600cba1020029e100006fa21bffcd023e004da012000da23e0009010000fde01200881c3e0068801200c|@1966,161| 6247:S45|535452554354555245535f28292e70617373345374727563747328332965787472616374537472756374283329 6248:C2,128|9e13e002f606201880a1001b8bd0201880a2200132800005c40220009010000981c3e00601000000fa00a000fa213ffcde213ff8d2213ff4c4213ff0d00220049a013ffc4000001688013ff08c21a00c8b19600cba102002ae100006fa21bffcec012004ec25e004ea012000ea25e00092100017de01200810bfffe388012010|@6250,131071|68,5,@6249 6249:C2,196|9e13e002f606201880a1001b8bd0201880a2200132800005c40220009010200181c3e00601000000ee0220048c21a00c8b19600cba10200290100006fa21bffcec00a000ec222004ea036000ea222000de213ffcda213ff8c4213ff4ee213ff07ffee2d988013ff080a2200132800012d0012000d0012000da0120087fffffe29e13e0028c21a00c8b19600cba102002a8100006fa21bffcd0252004e6012004e625200090100014e401200c81c4a00688012010da012008de01200c10bfffd288012010|@328,131071|96,5,@4483 6250:S41|535452554354555245535f28292e70617373345374727563747328332972657646696c746572283229 6251:S29|535452554354555245535f28292e706173733453747275637473283329 6252:S31|434f4d50494c45525f424f445928292e62617365436f6d70696c6572283329 6253:O1|@6254 6254:C2,36|9e13e00280a2200132800005901020019010200581c3e0060100000081c3e00601000000|@1255,129| 6255:O3|1,@766,@6276 6256:O4|-2,1,@6257,0 6257:O2|@6259,@6258 6258:O2|@6261,@6260 6259:O2|49,@752 6260:O2|@6267,0 6261:O2|50,@6262 6262:O3|1,@766,@6263 6263:O4|-3,@6264,@973,@971 6264:O2|@6265,0 6265:O4|-3,0,@5755,@6266 6266:O2|0,@5753 6267:O2|51,@6268 6268:O4|-3,@6269,@787,@774 6269:O2|@6270,0 6270:O4|-3,0,@6272,@6271 6271:O2|0,@6273 6272:S9|756e6976657273616c 6273:O6|@6272,0,0,0,@6275,@6274 6274:O2|-1,@132 6275:O2|-1,@131 6276:O4|-2,1,@6277,0 6277:O2|@6279,@6278 6278:O2|@6282,@6281 6279:O2|@6280,@765 6280:S5|6669786573 6281:O2|@6285,@6284 6282:O2|@6283,@906 6283:S5|7479706573 6284:O2|@6288,@6287 6285:O2|@6286,@890 6286:S6|76616c756573 6287:O2|@6291,@6290 6288:O2|@6289,@922 6289:S8|66756e63746f7273 6290:O2|@6293,0 6291:O2|@6292,@874 6292:S10|7369676e617475726573 6293:O2|@6294,@950 6294:S10|73747275637475726573 6295:O2|@6297,@6296 6296:O2|@6298,0 6297:S16|7072696e74496e4e616d655370616365 6298:O3|@21,69,@6299 6299:O4|@6297,-1,@6301,@6300 6300:O3|1,@6302,@766 6301:O2|-2,-4 6302:O4|-2,1,@6303,0 6303:O2|@6305,@6304 6304:O2|@751,@6307 6305:O2|49,@6306 6306:O3|3,@133,79992 6307:O2|@6309,@6308 6308:O2|@6311,0 6309:O2|51,@6310 6310:O3|1,@694,@766 6311:O2|52,@695 6312:O2|@6314,@6313 6313:O2|@6315,0 6314:S10|6d616b65737472696e67 6315:O3|@21,69,@6316 6316:O4|@6314,-1,@6318,@6317 6317:O3|1,@6319,@694 6318:O2|-2,-2 6319:O3|3,@134,79992 6320:O2|@6322,@6321 6321:O2|@6323,0 6322:S10|696e7374616c6c5f7070 6323:O3|@21,69,@6324 6324:O4|@6322,-1,@4284,@6325 6325:O3|1,@6326,@766 6326:O3|1,@6328,@6327 6327:O3|1,@695,@6349 6328:O4|-2,1,@6329,0 6329:O2|@6331,@6330 6330:O2|@6333,@6332 6331:O2|49,@6310 6332:O2|@6341,@6340 6333:O2|50,@6334 6334:O3|1,@6335,@766 6335:O4|-2,1,@6336,0 6336:O2|@6338,@6337 6337:O2|@6339,0 6338:O2|49,@695 6339:O2|50,@360 6340:O2|@6347,0 6341:O2|51,@6342 6342:O3|1,@6343,@766 6343:O4|-2,1,@6344,0 6344:O2|@6338,@6345 6345:O2|@6346,0 6346:O2|50,@695 6347:O2|52,@6348 6348:O3|1,@766,@766 6349:O3|1,@6351,@6350 6350:O3|1,@6352,@766 6351:O3|3,@135,79992 6352:O3|3,@136,79992 6353:O2|@6355,0 6354:S9|4e616d655370616365 6355:O3|@39,69,@6356 6356:O3|@6354,@734,@6357 6357:O4|@6358,I48,0,0 6358:O4|-1,@138,@139,@137 6359:O2|@882,@6378 6360:O2|@898,@6361 6361:O2|@6362,0 6362:O3|@34,69,@899 6363:O2|@914,@6364 6364:O2|@6365,0 6365:O3|@34,69,@915 6366:O2|@930,@6367 6367:O2|@6368,0 6368:O3|@34,69,@931 6369:O2|@754,@6370 6370:O2|@6371,0 6371:O3|@34,69,@755 6372:O2|@958,@6373 6373:O2|@6374,0 6374:O3|@34,69,@959 6375:O2|@783,@6376 6376:O2|@6377,0 6377:O3|@34,69,@784 6378:O2|@6379,0 6379:O3|@34,69,@883 6380:O2|@6382,@6381 6381:O2|@6383,0 6382:S3|6d6f64 6383:O3|@21,69,@6384 6384:O4|@6382,-1,@359,@6385 6385:O3|1,@361,@365 6386:O2|@787,@6387 6387:O2|@6388,0 6388:O3|@34,69,@788 6389:O2|33,@6390 6390:O2|@6391,0 6391:O3|@21,69,@6392 6392:O4|33,-1,@6394,@6393 6393:O3|1,@6399,@6398 6394:O2|-1,@6395 6395:O2|-7,@6396 6396:O8|@3228,@6397,0,0,1,0,0,0 6397:S4|21283129 6398:O3|3,@141,79992 6399:O4|-3,@6401,@2809,@6400 6400:O2|0,@3190 6401:O2|@6398,0 6402:O2|@973,@6403 6403:O2|@6404,0 6404:O3|@34,69,@974 6405:O2|@984,@6406 6406:O2|@6407,0 6407:O3|@21,69,@982 6408:O2|42,@6409 6409:O2|@6410,0 6410:O3|@21,69,@6411 6411:O4|42,-1,@359,@6385 6412:O2|@5755,@6413 6413:O2|@6414,0 6414:O3|@34,69,@5753 6415:O2|43,@6416 6416:O2|@6417,0 6417:O3|@21,69,@6418 6418:O4|43,-1,@359,@6385 6419:O2|126,@6420 6420:O2|@6421,0 6421:O3|@21,69,@6422 6422:O4|126,-1,@359,@724 6423:O2|45,@6424 6424:O2|@6425,0 6425:O3|@21,69,@6426 6426:O4|45,-1,@359,@6385 6427:O2|@6429,@6428 6428:O2|@6430,0 6429:S9|426f6f747374726170 6430:O3|@39,69,@6431 6431:O3|@6429,@734,@6432 6432:O4|@6433,I48,0,0 6433:O4|-1,@143,@144,@142 6434:O2|@7167,@7166 6435:O2|@6437,@6436 6436:O2|@6438,0 6437:S10|646973706c6179536967 6438:O3|@21,69,@6439 6439:O4|@6437,-1,@6441,@6440 6440:O3|1,@6478,@766 6441:O2|-1,@6442 6442:O2|-3,@6443 6443:O1|@6444 6444:C2,228|9e13e002f606201880a1001b8bd02018d0213ffcd0213ff8d0213ff4d0213ff0d0213fecd0213fe8d0213fe4de213fe0fa022000fa213fdcfa022004fa213fd8fa022008fa213fd4fa02200cfa213fd094013fe4d2022010901021357ffcc58c88013fd08c21a0208b196020ba10200784100006fa21bffcee012014ee20a000ec012018ec20a004ea01201cea20a008e8012020e820a00ce6012024e620a010e4012028e420a014e201202ce220a018e0012000e021202cd601200494100002d2012008d001200c1b3f03509a036384de012010353f0350b406a3a081c6a0048801202c|@6477,131071|92,5,@428 200,4,@6445 212,4,@6447 6445:O2|@6447,@6446 6446:O3|@6451,@6445,@6450 6447:C2,284|9e13e002f606201880a1001b8bd02018b8226001811f200034800008de213ffc113f005690022110da02a00cf403600081c6a00488012004da213ff8d0213ff4d2213ff0d4213fecd6213fe8113f00259002227cda02a018f40360009fc6a00088013fe8c4012004d001200c7ffdbd2701000000fa00a00cfa213ffc92100008113f0351900220d87ffcd40988013ffc133f00b3920261047ffcd40501000000da012000f40360009fc6a00001000000ee012008113f00c090022030da05e000f40360009fc6a00001000000ec012014ea012004ea213ffce801201ce8213ff896102005d4012008d201200cd0012010da05a004f40360009fc6a00088013ff8e601200890102001da04e008de012018f403600081c6a00488012020|@6449,131071|32,4,@1478 76,4,@499 108,5,@2684 128,4,@6448 136,5,@496 144,4,@2075 152,5,@496 180,4,@2170 6448:S10|7369676e617475726520 6449:S32|56414c55455f4f505328292e646973706c61795369676e617475726573283529 6450:O2|@6474,@6446 6451:C2,532|9e13e002f606201880a1001b8bd02018da213ffcd4213ff8d2213ff4de213ff0d0213fec113f01909002221cda02a018f40360009fc6a00088013fecc401200c113f004c9002233cda00a00cf40360009fc6a00001000000ee012008b825e001811f2004348000128c21a008ec01200c113f001f9002225cda05a000f40360009fc6a00001000000ea01200c113f005690022110da05600cf40360009fc6a0000100000010800048e201200c8b1960083b100000ba076001ac100006fa21bffcaa102001ea25a000d00120007ffd937b01000000ec213ffc7ffd9d6388013ffce802200880a520012280001ee6012000d0213ffce6022004901020019a100013f40360009fc6a00088013ffce4012004e204a0008c21a00c8b19600cba102002a0100006fa21bffce2242004d0242000e024a000de01200090102001da03e000f40360009fc6a0000100000088012004f606201880a1001b8bd0201830bfffe1e404e000133f035192026350901000127ffe0c730100000080a2200132800004e20220001080000f88012004fa022004fa213ffcd2046004d00460009a0120144000007e88013ffcd001200088012004f606201880a1001b8bd0201830bfffefe201200c113f001f9002225cda046000f40360009fc6a00001000000e001200c113f004c9002213cda04200cf40360009fc6a00001000000de01200c90102001da03e008de012004f403600081c6a0048801201c|@6473,131071|36,4,@3523 64,4,@1396 112,4,@485 140,4,@1478 204,5,@2425 216,5,@2509 356,4,@6452 368,5,@3180 416,5,@6459 452,4,@485 480,4,@1358 6452:O1|@6453 6453:C2,52|9e13e002841000088c21a00c8b19600cba10200290100006fa21bffc2f3f0351ae05e3a8ee222000c422200481c3e00601000000|@6458,98433|28,4,@6454 6454:C2,52|9e13e002f606201880a1001b8bd02018c4036004d600a004d400a000d2022004d0022000353f0351b406a3f881c6a00401000000|@6457,131071|36,4,@6455 6455:C2,32|9e13e002921000089010000a1b0000839a036178f403600081c6a00401000000|@6456,131071|12,4,I29 6456:S33|56414c55455f4f505328292e646973706c61795369672836296f72646572283429 6457:S36|56414c55455f4f505328292e646973706c61795369672836296f72646572283129283129 6458:S33|56414c55455f4f505328292e646973706c61795369672836296f72646572283129 6459:C2,756|9e13e002f606201880a1001b8bd02018ac10000faa10000d901000091b3f00de9a03610c7ffd8c0f0100000080a220012280002290100009e8057ffcec213ffcea213ff8d2213ff4113f00c090022030da052000f40360009fc6a00088013ff4d00120001b3f00de9a0361007ffd8c2701000000e6012004e404fff8b824a001b91f2004a2072001e004e000de04e004c2012008de212008d604e008d404fffc92100011da0420049e100001f403600081c6a004880120081b3f00de9a0362347ffd8c320100000080a220012280002290100009e8057ffcec213ffcea213ff8d2213ff4113f00c090022030da052000f40360009fc6a00088013ff4d00120001b3f00de9a0362287ffd8c4a01000000e6012004e404fff8b824a001b91f2004a2072001e004e000de04e004c2012008de212008d604e008d404fffc92100011da0420089e100001f403600081c6a004880120081b3f00df9a0360847ffd8c9f0100000080a220012280001a90100009e8057ffcec213ffcea213ff8d2213ff4113f00c090022030da052000f40360009fc6a00088013ff4d00120001b3f00df9a0360787ffd8cb701000000e6012004d604e004d404fffcd204fff8de012008353f0352b406a3c881c6a0048801200c1b3f00df9a03619c7ffd8cc60100000080a220012280002490100009901000091b3f00df9a0361907ffd8ce801000000e8022004808d200132800005e6057ffc9010200181c5a00601000000ec213ffcea213ff8d0213ff4113f00c090022030da04e000f40360009fc6a00088013ff4e4012004e204a004e0012008e2212008d604a008d404bffcd204bff8d00120009e100010353f0355b406a01c81c6a004880120081b3f00de9a03635c7ffd8c0d0100000080a220012280001990102001e8057ffcec213ffcea213ff8d2213ff4113f00c090022030da052000f40360009fc6a00088013ff4d00120001b3f00de9a0363507ffd8c2501000000e6012004d404fffcd204fff8de012008353f00ceb406a1e881c6a0048801200c81c5a00601000000|@6472,131071|28,4,@2350 36,5,@2351 72,4,@2170 100,4,@2349 108,5,@2354 184,4,@2357 192,5,@2358 228,4,@2170 256,4,@2356 264,5,@2361 340,4,@2371 348,5,@2372 384,4,@2170 412,4,@2370 420,5,@2375 448,4,@6460 464,4,@2377 472,5,@2378 496,4,@2376 504,5,@2381 552,4,@2170 612,4,@6468 628,4,@2364 636,5,@2365 672,4,@2170 700,4,@2363 708,5,@2368 732,4,@2228 6460:C2,676|9e13e002f606201880a1001b8bd02018aa10000fa8100008901020017ffd612301000000b8226001811f200034800009a6100015113f005690022110da02a00c9e100015f403600081c6a00401000000a4100008901000147ffd9b3d0100000080a220012280004d90100014d4213ffcd6213ff8e4213ff4901000147ffd679788013ff4d0213ffcd0213ff8e6213ff4e8213ff0d2213fec92013ff87ffd67a288013fece201201c113f00259002227cda046018f40360009fc6a00001000000e001201c113f004c900221c8da04200cf40360009fc6a00001000000de01201c113f00c090022030da03e000f40360009fc6a00001000000d00120047ffd944601000000c2012018c2213ffcd601201cd4012014d20120007ffd6cf588013ffcda01201cfa03600cfa213ffc133f00b392026104d00120107ffcd1d388013ffcda012000f40360009fc6a00001000000d00120087ffd9afe01000000d8012004b8232001b91f2004960720019210000b9a0120204000005301000000d401202090102001da02a008de01200cf403600081c6a004880120247ffd675001000000d0213ffcd0213ff8e6213ff4e8213ff0d2213fecd4213fe8d6213fe4e4213fe092013ff87ffd675888013fe0e2012008113f0025900222b4da046018f40360009fc6a00001000000e0012008d00120107ffd938d0100000080a220012280000601000000113f004c9002219010800005da04200c113f004c90022050da04200cf40360009fc6a00001000000de012008113f001f9002225cda03e000f40360009fc6a00001000000d00120107ffd93f201000000c2012004c2213ffcd6012008d4012000d201200c7ffd6ca188013ffcda012008d001201cda03600cf40360009fc6a00001000000d801200890102001da032008de012014f403600081c6a00488012020|@6467,131071|28,5,@2086 52,4,@1478 88,5,@2500 124,5,@2128 156,5,@2130 168,4,@499 196,4,@1369 224,4,@2170 252,5,@2438 280,5,@2173 300,4,@2075 312,5,@496 340,5,@2500 372,5,@6461 408,5,@2128 452,5,@2130 464,4,@501 496,5,@2436 516,4,@1365 532,4,@1339 560,4,@485 588,5,@2438 616,5,@2173 6461:C2,344|9e13e002f606201880a1001b8bd0201880a2200132800005c40360009010200181c3e00601000000de213ffcda213ff8d2213ff4fa022000fa213ff0fa022004fa213fec113f0353900223fcda00a018f40360009fc6a00088013fecd00120047ffd778b01000000ae100008d00120047ffdb79f01000000d6012008941000089210001790102005da01200c4000003d01000000ec012008b825a001b91f2004aa072001e801200080a5200132800004b825600110800022e601200c811f200036800004d00520001080001de601200c7ffd776f01000000a6100008d00520007ffdb78301000000ea213ffcfa052004fa213ff896100015941000089210001390102001da01200c4000001e88013ff8e4012004b824a001b91f2004a2072001aa100011e801200088012008f606201880a1001b8bd0201830bfffdce404e00090102001da04a008de012010f403600081c6a00488012014|@6466,131071|68,4,@6462 96,5,@2194 112,5,@2659 140,5,@6463 208,5,@2194 224,5,@2659 264,5,@6463 6462:O2|2,1 6463:C2,844|9e13e002f606201880a1001b8bd0201880a2200122800012c4036000ee036000de213ffcda213ff8d0213ff4d2213ff0d4213fecd6213fe8113f00c090022030da05e000f40360009fc6a00088013fe88410000810800010ee012010de213ffcda213ff8d0213ff4d2213ff0d4213fecd6213fe8113f001f9002225cda00a000f40360009fc6a00088013fe884100008ee012010ec05e000113f00259002227cda05a018f40360009fc6a00001000000ea012010e8056000113f00259002227cda052018f40360009fc6a00001000000e601200c80a4e0012280000ce4012010e4012010e204a000113f018c90022390da046000f40360009fc6a0000100000010800020d4012000e204a000113f00259002227cda046018f40360009fc6a00001000000e0012010de042000901021f1da03e00cf40360009fc6a00001000000c2012010da006000113f00c090022030da036000f40360009fc6a00001000000d8012010d603200090102001da02e008f40360009fc6a00001000000d4012000b822a001811f20003480000dd2012010d2012010d0026000c402200c113f0056900221109a100002f40360009fc6a0000100000010800023ee012010d0026000c402200cd00120089a100002f40360009fc6a00001000000d00120047ffd682a0100000080a2200122800016ee012010d00120047ffd683501000000ee012010ec05e000113f035490022370da05a000f40360009fc6a00001000000ea012010e8056000113f004c90022000da05200cf40360009fc6a00001000000ee012010ec05e00090102001da05a008f40360009fc6a00001000000d00120047ffd680a0100000080a2200122800032ea012010d00120047ffd681501000000ea012000b8256001811f20002480002aea012010e8012010e6052000113f035490022370da04e000f40360009fc6a00001000000d00120047ffd67f40100000080a220012280000801000000d00120047ffd67ff01000000a410000810800009e2012000113f003890022020f40620209fc6a00001000000a4102001e2012000b8246001b91f2004a0072001de012010c203fffcc2213ffcd603fff8d403e00092100010d004a0007ffd609588013ffcea012010e805600090102001da052008de012014f403600081c6a00488012018|@6465,131071|56,4,@2170 116,4,@485 152,4,@499 184,4,@499 232,4,@3495 268,4,@499 328,4,@2170 412,4,@1478 476,5,@2148 500,5,@2149 516,4,@6464 548,4,@1333 604,5,@2148 628,5,@2149 664,4,@6464 692,5,@2148 716,5,@2149 736,4,@1110 804,5,@2097 6464:O2|1,4 6465:S46|545950455f5452454528292e646973706c617954797065436f6e737472732834297056616c436f6e737472283429 6466:S50|545950455f5452454528292e646973706c617954797065436f6e737472732834297056616c436f6e7374724c697374283229 6467:S33|545950455f5452454528292e646973706c617954797065436f6e73747273283429 6468:C2,1208|9e13e002f606201880a1001b8bd02018b8226001811f2000348000088410000f113f005690022110da02a00cf403600081c6a00488012004ee022000ec022004ea022008e802200c901000167fffe5d80100000080a22001228000c980a5a001a6100002901000157ffdc0d40100000080a220012280008fe6213ffc901000157ffdc0e301000000e6213ffcd2213ff8d4213ff4d6213ff0ee213fece8213fe8d0213fe4113f00259002227cda02a018f40360009fc6a00088013fe4e4012010113f004c90022288da04a00cf40360009fc6a00001000000e2012010113f001f9002225cda046000f40360009fc6a00001000000e0012010fa04200cfa213ffc133f00b392026104d00120087ffccfc988013ffcda012000f40360009fc6a00001000000de012014113f0356900220f0da03e000f40360009fc6a00001000000c6213ffc033f0355820061aec2213ff89a102001da213ff486013ff4d00120047fff786188013ff4d801201cd8213ffcd6012020d4012024d20120147fff770188013ffcc601200810800017d2012020d602200080a2e00532800008d4012014113f00059002201cf40620209fc6a00001000000d4012014113f007590022288da02a00cf40360009fc6a00001000000d0213ffcd0213ff8d0213ff488013ff4d2012020113f001f9002225cda026000f40360009fc6a00001000000d0012020c4022018113f00259002227c9a100002f40360009fc6a00001000000ee012020901020e9da05e00cf40360009fc6a00001000000ec012020113f0356900220f0da05a000f40360009fc6a00001000000901020017ffd5e8001000000ea01202cea213ffc96100008d4012020d2012024d00120147ffd5fbc88013ffce801202090102001da052008f40360009fc6a00001000000e601202090102001da04e008de012028f403600081c6a00488012030d2213ff8d4213ff4ee213ff0e8213fec113f00259002227cda02a018f40360009fc6a00088013fece4012008fa04a00cfa213ffcd2012004113f0356900220fc7ffccf5088013ffc133f00b3920260f87ffccf4c01000000da012000f40360009fc6a00001000000e201200c113f0356900220f0da046000f40360009fc6a00001000000901020017ffd5e4701000000e0012018e0213ffc96100008d401200cd2012010d00120047ffd5f8388013ffcde01200c90102001da03e008de012014f403600081c6a0048801201c3280004d90102001c4213ffcd2213ff8d4213ff4ee213ff0e8213fec113f00259002227cda02a018f40360009fc6a00088013fece6012008113f004c90022300da04e00cf40360009fc6a00001000000e4012008113f00249002228cda04a000f40360009fc6a00001000000e2012008d0012004da04600cf40360009fc6a00001000000e0012000de04200080a3fffd22800023c2012008c2012008113f00249002228cda006000f40360009fc6a00001000000da012008113f004c90022000da03600cf40360009fc6a00001000000d8012008113f0356900220f0da032000f40360009fc6a00001000000901020017ffd5dfa01000000d6012014d6213ffc96100008d4012008d201200cd00120007ffd5f3688013ffcc201200890102001da006008de012010f403600081c6a0048801201881c0a00688012004|@6471,131071|32,4,@1478 76,5,@6123 104,5,@2733 128,5,@2735 164,4,@499 192,4,@1383 220,4,@485 256,4,@2075 268,5,@496 296,4,@6469 324,4,$6468+402 352,5,@5528 380,5,@5524 416,4,@227 440,4,@1703 484,4,@485 516,4,@499 568,4,@6469 596,5,@2086 628,5,@2097 704,4,@499 744,4,@6470 752,5,@496 760,4,@2074 768,5,@496 796,4,@6469 824,5,@2086 856,5,@2097 920,4,@499 948,4,@1392 976,4,@489 1048,4,@489 1076,4,@1333 1104,4,@6469 1132,5,@2086 1164,5,@2097 6469:O2|1,3 6470:S4|76616c20 6471:S28|56414c55455f4f505328292e646973706c617956616c756573283529 6472:S39|56414c55455f4f505328292e646973706c6179536967283629646973706c617953706563283229 6473:S25|56414c55455f4f505328292e646973706c6179536967283629 6474:C2,660|9e13e002f606201880a1001b8bd02018b8226001811f2000348000088410000f113f005690022110da02a00cf403600081c6a00488012004ae10000dac100008901000167ffd8a5c0100000080a220012280000990100016113f00b290022300da02a00c9e100002f403600081c6a004880120047ffdbc1d0100000080a5a0013280001caa100008c4213ffcee213ff8ec213ff4d2213ff0d4213fecd6213fe8d0213fe4901020297ffd532288013fe48c21a0148b196014ba102004aa100006fa21bffca8102001e825600ca6102001e625600825000083a404a3d8e4256004d0256000901000151080000b01000000d005a008c4213ffcee213ff8ec213ff4d2213ff0d4213fecd6213fe8ea213fe488013fe47ffdb78501000000e8012008d0213ffc113f00259002227cda052018f40360009fc6a00088013ffce601200cfa04e00cfa213ffcd2012004113f0357900220307ffcce5e88013ffc133f00b3920260f87ffcce5a01000000da012000f40360009fc6a00001000000e4012010113f00c090022030da04a000f40360009fc6a0000100000013000083920263d8d00120041b0000839a0360d8f40360009fc6a0000100000080a220013280000ae0012018e2012010d0012004da04600cf40360009fc6a0000100000010800028d401201080a4200132800013e2042008901020297ffd52cf010000008c21a0148b196014ba1020049e100006fa21bffc82102001c223e00c9a102001da23e00819000083980323d8d823e004d023e000a210000fde012014b823e001b91f200482072001da01201cd801200cd8213ffcd6012024d6213ff896102005d40120109210000190100011da036004f40360009fc6a00088013ff8d401201090102001da02a008de012020f403600081c6a00488012028|@6476,131071|32,4,@1478 68,5,@2389 88,4,@2071 116,5,@2716 168,5,@1992 212,4,I48 276,5,@2684 292,4,@499 332,4,@6475 340,5,@496 348,4,@2074 356,5,@496 384,4,@2170 408,4,I48 420,4,I24 500,5,@1992 544,4,I48 6475:S10|73747275637475726520 6476:S32|56414c55455f4f505328292e646973706c617953747275637475726573283529 6477:S43|494e495449414c4953455f28292e696e6974476c6f62616c456e76283129646973706c6179536967283129 6478:O4|-2,1,@6479,0 6479:O2|@6481,@6480 6480:O2|@6346,@6482 6481:O2|49,@880 6482:O2|@6484,@6483 6483:O2|@6486,@6485 6484:O2|51,@752 6485:O2|@6487,0 6486:O2|52,@360 6487:O2|53,@6310 6488:O2|@6490,@6489 6489:O2|@6491,0 6490:S12|646973706c617946756e6374 6491:O3|@21,69,@6492 6492:O4|@6490,-1,@6494,@6493 6493:O3|1,@6503,@766 6494:O2|-1,@6495 6495:O2|-3,@6496 6496:O1|@6497 6497:C2,220|9e13e002f606201880a1001b8bd02018d0213ffcd0213ff8d0213ff4d0213ff0d0213fecd0213fe8d0213fe4de213fe0fa022000fa213fdcfa022004fa213fd8fa022008fa213fd4fa02200cfa213fd094013fe4d2022010901021357ffcbec588013fd08c21a0208b196020ba10200784100006fa21bffcee012014ee20a000ec012018ec20a004ea01201cea20a008e8012020e820a00ce6012024e620a010e4012028e420a014e201202ce220a018e0012000e021202cd601200494100002d2012008d001200cde012010353f0357b406a29881c6a0048801202c|@6502,131071|92,5,@428 204,4,@6498 6498:C2,676|9e13e002f606201880a1001b8bd02018b8226001811f200034800008de213ffc113f005690022110da02a00cf403600081c6a00488012004d0213ff8d2213ff4d4213ff0d6213fec113f00259002227cda02a018f40360009fc6a00088013fecc4012004d001200c7ffff11201000000fa00a00cfa213ffc92100008113f0358900221587ffccd4c88013ffc133f0029920263d07ffccd4801000000da012000f40360009fc6a00001000000ee012008113f00259002227cda05e000f40360009fc6a00001000000d00120107ffd8a4c010000007ffdbabf0100000013000083920263d81b0000839a0360d8f40360009fc6a0000100000080a220013280001bd0213ffcec012008d00120107ffd8a3c010000007ffdbaaf01000000fa05a00cfa213ffc133f00b3920260f87ffccd2288013ffcda012000f40360009fc6a00001000000ea01200c113f0356900220f0da056000f40360009fc6a0000100000010800004d001201488013ffcd00120147ffd8a230100000080a2200132800013ec022008901020297ffd51a4010000008c21a0148b196014ba102004aa100006fa21bffca8102001e825600ca6102001e625600825000083a404a3d8e4256004d0256000ac100015ea012010b8256001b91f2004a8072001e6012008e6213ffce401201ce4213ff896102001d401200c92100014901000161b3f03509a0363907ffff92288013ff8e201200c113f035890022168da04600cf40360009fc6a00001000000e001200c113f0356900220f0da042000f40360009fc6a00001000000d00120147ffd89cf01000000de012010b823e001b91f200482072001da012008da213ffcd801201cd8213ff896102005d401200c921000011b3f03509a0363907ffff90288013ff8d601200c90102001da02e008de012018f403600081c6a00488012020|@6501,131071|32,4,@1478 72,4,@499 104,5,@6225 124,4,@6499 132,5,@496 140,4,@550 148,5,@496 176,4,@499 204,5,@2406 212,5,@2716 220,4,I48 228,4,I24 268,5,@2406 276,5,@2716 292,4,@2074 300,5,@496 328,4,@6469 368,5,@2406 392,5,@1992 436,4,I48 504,4,@6446 512,5,@6451 524,4,@6500 552,4,@6469 580,5,@2404 632,4,@6446 640,5,@6451 6499:S8|66756e63746f7220 6500:S3|29203a 6501:S30|56414c55455f4f505328292e646973706c617946756e63746f7273283529 6502:S45|494e495449414c4953455f28292e696e6974476c6f62616c456e76283129646973706c617946756e6374283129 6503:O4|-2,1,@6504,0 6504:O2|@6505,@6480 6505:O2|49,@928 6506:O2|@6508,@6507 6507:O2|@6509,0 6508:S16|6d6178496e6c696e6553697a65546167 6509:O3|@21,69,@6510 6510:O4|@6508,-1,@6512,@6511 6511:O4|-3,@6515,@6516,@6514 6512:O2|-1,@6513 6513:O2|-3,@3288 6514:O2|0,@6517 6515:O2|@695,0 6516:S3|746167 6517:O6|@6516,1,0,@6519,@6521,@6518 6518:O2|-1,@148 6519:O2|@6520,0 6520:O3|3,@146,79992 6521:O2|-1,@147 6522:O2|@6524,@6523 6523:O2|@6525,0 6524:S19|636f64657472656541667465724f7074546167 6525:O3|@21,69,@6526 6526:O4|@6524,-1,@6528,@6527 6527:O4|-3,@6530,@6516,@6514 6528:O2|-1,@6529 6529:O2|-3,@3281 6530:O2|@360,0 6531:O2|@6533,@6532 6532:O2|@6534,0 6533:S14|636f6e76537472696e674e616d65 6534:O3|@21,69,@6535 6535:O4|@6533,-1,@6536,@694 6536:O2|-1,@6537 6537:O2|-3,@1738 6538:O2|@6540,@6539 6539:O2|@6541,0 6540:S17|696e6c696e6546756e63746f7273546167 6541:O3|@21,69,@6542 6542:O4|@6540,-1,@6543,@6527 6543:O2|-1,@6544 6544:O2|-3,@5364 6545:O2|@6547,@6546 6546:O2|@6548,0 6547:S7|6d6c3930546167 6548:O3|@21,69,@6549 6549:O4|@6547,-1,@6550,@6527 6550:O2|-1,@6551 6551:O2|-3,@1507 6552:O2|@6554,@6553 6553:O2|@6555,0 6554:S13|6572726f724465707468546167 6555:O3|@21,69,@6556 6556:O4|@6554,-1,@6557,@6511 6557:O2|-1,@6558 6558:O2|-3,@2272 6559:O2|@6561,@6560 6560:O2|@6562,0 6561:S10|646973706c617956616c 6562:O3|@21,69,@6563 6563:O4|@6561,-1,@6565,@6564 6564:O3|1,@6570,@766 6565:O2|-1,@6566 6566:O2|-3,@6567 6567:O1|@6568 6568:C2,220|9e13e002f606201880a1001b8bd02018d0213ffcd0213ff8d0213ff4d0213ff0d0213fecd0213fe8d0213fe4de213fe0fa022000fa213fdcfa022004fa213fd8fa022008fa213fd4fa02200cfa213fd094013fe4d2022010901021357ffcbcc188013fd08c21a0208b196020ba10200784100006fa21bffcee012014ee20a000ec012018ec20a004ea01201cea20a008e8012020e820a00ce6012024e620a010e4012028e420a014e201202ce220a018e0012000e021202cd601200494100002d2012008d001200cde012010353f0355b406a01c81c6a0048801202c|@6569,131071|92,5,@428 204,4,@6468 6569:S43|494e495449414c4953455f28292e696e6974476c6f62616c456e76283129646973706c617956616c283129 6570:O4|-2,1,@6571,0 6571:O2|@6572,@6480 6572:O2|49,@896 6573:O2|@6575,@6574 6574:O2|@6576,0 6575:S17|636f6d70696c65724f7574707574546167 6576:O3|@21,69,@6577 6577:O4|@6575,-1,@6579,@6578 6578:O4|-3,@6581,@6516,@6514 6579:O2|-1,@6580 6580:O2|-3,@1187 6581:O2|@6310,0 6582:O2|@6584,@6583 6583:O2|@6585,0 6584:S12|706172736574726565546167 6585:O3|@21,69,@6586 6586:O4|@6584,-1,@6587,@6527 6587:O2|-1,@6588 6588:O2|-3,@1237 6589:O2|@6591,@6590 6590:O2|@6592,0 6591:S15|617373656d626c79436f6465546167 6592:O3|@21,69,@6593 6593:O4|@6591,-1,@6594,@6527 6594:O2|-1,@6595 6595:O2|-3,@3298 6596:O2|@6598,@6597 6597:O2|@6599,0 6598:S14|70737461636b5472616365546167 6599:O3|@21,69,@6600 6600:O4|@6598,-1,@6601,@6527 6601:O2|-1,@6602 6602:O2|-3,@3365 6603:O2|@6605,@6604 6604:O2|@6606,0 6605:S11|676c6f62616c5370616365 6606:O3|@21,69,@6607 6607:O4|@6605,-1,@6608,@752 6608:O2|-1,@6609 6609:O2|-3,@6610 6610:O18|@6612,@6629,@6634,@6639,@6644,@6649,@6654,@6657,@6660,@6665,@6668,@6673,@6676,@6679,@6682,@6685,@6688,@6611 6611:O2|@6691,@344 6612:O2|@6613,@344 6613:C2,84|9e13e002f606201880a1001b8bd02018d00360048c21a00c8b19600cba10200284100006fa21bffc2f3f035aae05e214ee20a000ee022004ee20a004d202200090100002353f035cb406a00881c6a00401000000|@6628,131071|40,4,@6614 68,4,@6625 6614:C2,64|9e13e002f606201880a1001b8bd02018de213ffc133f00de92026340d00360044000000f88013ffc1b3f035b9a036328de012000f403600081c6a00488012004|@6624,131071|20,4,@2362 32,5,@6615 40,4,@6622 6615:C2,240|9e13e002f606201880a1001b8bd020188c21a00c8b19600cba10200284100006fa21bffc2f3f035aae05e37cee20a000d220a004de213ffcd2213ff8c4213ff47ffd943588013ff4ec02200880a5a00122800024da012000ea012004d0213ffcfa056000fa213ff8e8022004901020019a100014f40360009fc6a00088013ff8d0022004da012000f40360009fc6a0000100000080a2200122800008e6012004d0012004da012008de012010f403600081c6a0048801201490102001da04e000f40360009fc6a0000100000088012008f606201880a1001b8bd0201830bfffdbde012008f403600081c6a0048801200c|@6621,131071|36,4,@6616 64,5,@2509 6616:C2,332|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d0213ff488013ff4de02200880a3e0012280002282102001da012004d8036004d0213ffcfa032000fa213ff8d6022004901020019a10000bf40360009fc6a00088013ff8d0022004da012000f40360009fc6a0000100000080a2200122800005d40120048210200510800010da01200c90102001da02a000f40360009fc6a0000100000088012008f606201880a1001b8bd0201830bfffddd0213ffcd0213ff888013ff8da01200c8c21a0148b196014ba10200498100006fa21bffc173f035b9602e0e4d6232000d4012008d423200cd2036004d2232008da2320048c21a0108b196010ba10200390100006fa21bffc053f035b8400a220c4222000d4222008d22220048c21a0108b196010ba102003ae100006fa21bffcc225e008d025e004d825e00090100017ec01201081c5a00688012014|@6620,131071|212,4,@6617 264,4,@6619 6617:C2,232|9e13e002f606201880a1001b8bd02018d003600cde213ffcda213ff8c4022000901020019a100002f40360009fc6a00088013ff8ee02200880a5e00122800026ec012000ec012000ea05a008d0213ffcfa056000fa213ff8e8022004901020019a100014f40360009fc6a00088013ff8d0022004da012000f40360009fc6a0000100000080a2200122800009e6012004e6012008d0012004da04e004de01200cf403600081c6a0048801201090102001da04e000f40360009fc6a0000100000088012008f606201880a1001b8bd0201830bfffd9da05a004de012004f403600081c6a00488012008|@6618,131071| 6618:S48|556e6976657273616c5461626c652e756e69764f76657253706563696669632832296d616b6549746572283129283129 6619:C2,136|9e13e002f606201880a1001b8bd02018d0036008de213ffcda213ff8c4022004901020019a100002f40360009fc6a00088013ff8ee012000ec05e004fa022000fa213ffcd0022004da05a008f40360009fc6a00088013ffcaa1000088c21a00c8b19600cba10200290100006fa21bffcea222004e8012000e8222000e601200881c4e0068801200c|@6618,131071| 6620:S45|556e6976657273616c5461626c652e756e69764f76657253706563696669632832296d616b6549746572283129 6621:S34|556e6976657273616c5461626c652e756e69764f7665725370656369666963283229 6622:O1|@6623 6623:C2,156|9e13e002f606201880a1001b8bd02018c402200880a0a0012280001f90102001de213ffcd0213ff8ee022004901020019a100017f40360009fc6a00088013ff8ec012000d0213ffc90102001da05a000f40360009fc6a00088013ffc7fffffea9e13e0028c21a00c8b19600cba102002aa100006fa21bffcd0256004e8012000e825600090100015e601200881c4e0068801200c81c3e00601000000|@5536,131071| 6624:S22|4d414b455f28292e6462456e76416c6c283329283129 6625:C2,572|9e13e002f606201880a1001b8bd02018ae10000fac100008901020017ffca9fd01000000ee213ffcec213ff8d2213ff4d0213ff0113f035c900222607ffcaa4d88013ff0aa102001e8012004e605200080a4e0053280000501000000a410200110800013901000142500004ea404a081b824a001ba256001811f401c32800005b8256001a41020011080000990100014b9172004a2072001aa100011f606201880a1001b8bd0201830bfffe81b0000849a0362b8f40360009fc6a0000100000080a220013280000592100014a21020011080000cc6213ffc901020051b0000849a0362f8f40360009fc6a00001000000f606201880a1001b8bd0201830bfffd2213f035ca0042146e0213ff89e102001de213ff486013ff490102001da012008f40360009fc6a00088013ff482100008c601200810800024d001201096100008d00120041b0000849a036298f40360009fc6a0000100000080a2200532800004d40120041080000ed6213ffc92102005d222a000d6213ffc9210000a901020091b0000849a0362f8f40360009fc6a00088013ffc10800004d001200488013ffcd00120047ffca9f301000000d0012000f40620209fc6a0000100000082102001d00120101b0000849a036298f40360009fc6a0000100000080a2200532800004da0120101080000ec2213ffc98102005d8236000c2213ffc9210000d901020091b0000849a0362f8f40360009fc6a00088013ffc10800004d001201088013ffcd00120107ffca9d301000000d0012000da01201c81c3600688012020|@6627,131071|28,5,@236 52,4,@6626 60,5,@240 104,4,20000 172,4,I71 220,4,I73 256,4,$6625+318 324,4,I70 384,4,I73 420,5,@240 452,4,I70 512,4,I73 548,5,@240 6626:O2|@5125,0 6627:S18|4d414b455f28292e70726f74656374283229 6628:S25|4d414b455f28292e6462456e76416c6c283129283129283129 6629:O2|@6630,@344 6630:C2,84|9e13e002f606201880a1001b8bd02018d00360048c21a00c8b19600cba10200284100006fa21bffc2f3f035cae05e328ee20a000ee022004ee20a004d202200090100002353f035cb406a00881c6a00401000000|@6628,131071|40,4,@6631 68,4,@6625 6631:C2,64|9e13e002f606201880a1001b8bd02018de213ffc133f00de920260f0d00360047ffffdca88013ffc1b3f035c9a036384de012000f403600081c6a00488012004|@6624,131071|20,4,@2348 32,5,@6615 40,4,@6632 6632:O1|@6633 6633:C2,156|9e13e002f606201880a1001b8bd02018c402200880a0a0012280001f90102001de213ffcd0213ff8ee022004901020019a100017f40360009fc6a00088013ff8ec012000d0213ffc90102001da05a000f40360009fc6a00088013ffc7fffffea9e13e0028c21a00c8b19600cba102002aa100006fa21bffcd0256004e8012000e825600090100015e601200881c4e0068801200c81c3e00601000000|@5536,131071| 6634:O2|@6635,@344 6635:C2,84|9e13e002f606201880a1001b8bd02018d00360048c21a00c8b19600cba10200284100006fa21bffc2f3f035dae05e0c0ee20a000ee022004ee20a004d202200090100002353f035cb406a00881c6a00401000000|@6628,131071|40,4,@6636 68,4,@6625 6636:C2,64|9e13e002f606201880a1001b8bd02018de213ffc133f00d992026358d00360047ffffd6488013ffc1b3f035d9a03611cde012000f403600081c6a00488012004|@6624,131071|20,4,@2308 32,5,@6615 40,4,@6637 6637:O1|@6638 6638:C2,156|9e13e002f606201880a1001b8bd02018c402200880a0a0012280001f90102001de213ffcd0213ff8ee022004901020019a100017f40360009fc6a00088013ff8ec012000d0213ffc90102001da05a000f40360009fc6a00088013ffc7fffffea9e13e0028c21a00c8b19600cba102002aa100006fa21bffcd0256004e8012000e825600090100015e601200881c4e0068801200c81c3e00601000000|@5536,131071| 6639:O2|@6640,@344 6640:C2,84|9e13e002f606201880a1001b8bd02018d00360048c21a00c8b19600cba10200284100006fa21bffc2f3f035dae05e258ee20a000ee022004ee20a004d202200090100002353f035cb406a00881c6a00401000000|@6628,131071|40,4,@6641 68,4,@6625 6641:C2,64|9e13e002f606201880a1001b8bd02018de213ffc133f00df92026068d00360047ffffcfe88013ffc1b3f035d9a0362b4de012000f403600081c6a00488012004|@6624,131071|20,4,@2369 32,5,@6615 40,4,@6642 6642:O1|@6643 6643:C2,156|9e13e002f606201880a1001b8bd02018c402200880a0a0012280001f90102001de213ffcd0213ff8ee022004901020019a100017f40360009fc6a00088013ff8ec012000d0213ffc90102001da05a000f40360009fc6a00088013ffc7fffffea9e13e0028c21a00c8b19600cba102002aa100006fa21bffcd0256004e8012000e825600090100015e601200881c4e0068801200c81c3e00601000000|@5536,131071| 6644:O2|@6645,@344 6645:C2,84|9e13e002f606201880a1001b8bd02018d00360048c21a00c8b19600cba10200284100006fa21bffc2f3f035dae05e3f0ee20a000ee022004ee20a004d202200090100002353f035cb406a00881c6a00401000000|@6628,131071|40,4,@6646 68,4,@6625 6646:C2,64|9e13e002f606201880a1001b8bd02018de213ffc133f00dd920263c8d00360047ffffc9888013ffc1b3f035e9a03604cde012000f403600081c6a00488012004|@6624,131071|20,4,@2341 32,5,@6615 40,4,@6647 6647:O1|@6648 6648:C2,156|9e13e002f606201880a1001b8bd02018c402200880a0a0012280001f90102001de213ffcd0213ff8ee022004901020019a100017f40360009fc6a00088013ff8ec012000d0213ffc90102001da05a000f40360009fc6a00088013ffc7fffffea9e13e0028c21a00c8b19600cba102002aa100006fa21bffcd0256004e8012000e825600090100015e601200881c4e0068801200c81c3e00601000000|@5536,131071| 6649:O2|@6650,@344 6650:C2,100|9e13e002f606201880a1001b8bd02018c40360048c21a0148b196014ba102004ae100006fa21bffc2d3f035eac05a198ec25e000ec00a004ec25e00cea022000ea25e008e8022004e825e004d200a00090100017353f035cb406a00881c6a00401000000|@6653,131071|40,4,@6651 84,4,@6625 6651:C2,52|9e13e002f606201880a1001b8bd02018d6036004d4036008133f00de92026340d003600c353f00dbb406a12881c6a00401000000|@6652,131071|24,4,@2362 36,4,@2320 6652:S24|4d414b455f28292e6462456e76456e746572283429283129 6653:S27|4d414b455f28292e6462456e76456e746572283129283129283129 6654:O2|@6655,@344 6655:C2,100|9e13e002f606201880a1001b8bd02018c40360048c21a0148b196014ba102004ae100006fa21bffc2d3f035eac05a2b8ec25e000ec00a004ec25e00cea022000ea25e008e8022004e825e004d200a00090100017353f035cb406a00881c6a00401000000|@6653,131071|40,4,@6656 84,4,@6625 6656:C2,52|9e13e002f606201880a1001b8bd02018d6036004d4036008133f00de920260f0d003600c353f00dbb406a12881c6a00401000000|@6652,131071|24,4,@2348 36,4,@2320 6657:O2|@6658,@344 6658:C2,100|9e13e002f606201880a1001b8bd02018c40360048c21a0148b196014ba102004ae100006fa21bffc2d3f035eac05a394ec25e000ec00a004ec25e00cea022000ea25e008e8022004e825e004d200a00090100017353f035cb406a00881c6a00401000000|@6653,131071|40,4,@6659 84,4,@6625 6659:C2,52|9e13e002f606201880a1001b8bd02018d6036004d4036008133f00d992026358d003600c353f00dbb406a12881c6a00401000000|@6652,131071|24,4,@2308 36,4,@2320 6660:O2|@6661,@344 6661:C2,84|9e13e002f606201880a1001b8bd02018d00360048c21a00c8b19600cba10200284100006fa21bffc2f3f035fae05e060ee20a000ee022004ee20a004d202200090100002353f035cb406a00881c6a00401000000|@6628,131071|40,4,@6662 68,4,@6625 6662:C2,64|9e13e002f606201880a1001b8bd02018de213ffc133f00de92026218d00360047ffffb7c88013ffc1b3f035f9a0360bcde012000f403600081c6a00488012004|@6624,131071|20,4,@2355 32,5,@6615 40,4,@6663 6663:O1|@6664 6664:C2,156|9e13e002f606201880a1001b8bd02018c402200880a0a0012280001f90102001de213ffcd0213ff8ee022004901020019a100017f40360009fc6a00088013ff8ec012000d0213ffc90102001da05a000f40360009fc6a00088013ffc7fffffea9e13e0028c21a00c8b19600cba102002aa100006fa21bffcd0256004e8012000e825600090100015e601200881c4e0068801200c81c3e00601000000|@5536,131071| 6665:O2|@6666,@344 6666:C2,100|9e13e002f606201880a1001b8bd02018c40360048c21a0148b196014ba102004ae100006fa21bffc2d3f035fac05a208ec25e000ec00a004ec25e00cea022000ea25e008e8022004e825e004d200a00090100017353f035cb406a00881c6a00401000000|@6653,131071|40,4,@6667 84,4,@6625 6667:C2,52|9e13e002f606201880a1001b8bd02018d6036004d4036008133f00df92026068d003600c353f00dbb406a12881c6a00401000000|@6652,131071|24,4,@2369 36,4,@2320 6668:O2|@6669,@344 6669:C2,88|9e13e002f606201880a1001b8bd02018c40360048c21a0108b196010ba102003ae100006fa21bffc2d3f035fac05a2d8ec25e000ec00a004ec25e008d025e004d200a00090100017353f035cb406a00881c6a00401000000|@6672,131071|40,4,@6670 72,4,@6625 6670:C2,48|9e13e002f606201880a1001b8bd02018d4036004133f00de92026340d0036008353f00dab406a23081c6a00401000000|@6671,131071|20,4,@2362 32,4,@2311 6671:S25|4d414b455f28292e6462456e764c6f6f6b7570283329283129 6672:S28|4d414b455f28292e6462456e764c6f6f6b7570283129283129283129 6673:O2|@6674,@344 6674:C2,88|9e13e002f606201880a1001b8bd02018c40360048c21a0108b196010ba102003ae100006fa21bffc2d3f035fac05a3ecec25e000ec00a004ec25e008d025e004d200a00090100017353f035cb406a00881c6a00401000000|@6672,131071|40,4,@6675 72,4,@6625 6675:C2,48|9e13e002f606201880a1001b8bd02018d4036004133f00de920260f0d0036008353f00dab406a23081c6a00401000000|@6671,131071|20,4,@2348 32,4,@2311 6676:O2|@6677,@344 6677:C2,88|9e13e002f606201880a1001b8bd02018c40360048c21a0108b196010ba102003ae100006fa21bffc2d3f0360ac05a0b8ec25e000ec00a004ec25e008d025e004d200a00090100017353f035cb406a00881c6a00401000000|@6672,131071|40,4,@6678 72,4,@6625 6678:C2,48|9e13e002f606201880a1001b8bd02018d4036004133f00d992026358d0036008353f00dab406a23081c6a00401000000|@6671,131071|20,4,@2308 32,4,@2311 6679:O2|@6680,@344 6680:C2,100|9e13e002f606201880a1001b8bd02018c40360048c21a0148b196014ba102004ae100006fa21bffc2d3f0360ac05a190ec25e000ec00a004ec25e00cea022000ea25e008e8022004e825e004d200a00090100017353f035cb406a00881c6a00401000000|@6653,131071|40,4,@6681 84,4,@6625 6681:C2,52|9e13e002f606201880a1001b8bd02018d6036004d4036008133f00dd920263c8d003600c353f00dbb406a12881c6a00401000000|@6652,131071|24,4,@2341 36,4,@2320 6682:O2|@6683,@344 6683:C2,88|9e13e002f606201880a1001b8bd02018c40360048c21a0108b196010ba102003ae100006fa21bffc2d3f0360ac05a260ec25e000ec00a004ec25e008d025e004d200a00090100017353f035cb406a00881c6a00401000000|@6672,131071|40,4,@6684 72,4,@6625 6684:C2,48|9e13e002f606201880a1001b8bd02018d4036004133f00df92026068d0036008353f00dab406a23081c6a00401000000|@6671,131071|20,4,@2369 32,4,@2311 6685:O2|@6686,@344 6686:C2,100|9e13e002f606201880a1001b8bd02018c40360048c21a0148b196014ba102004ae100006fa21bffc2d3f0360ac05a338ec25e000ec00a004ec25e00cea022000ea25e008e8022004e825e004d200a00090100017353f035cb406a00881c6a00401000000|@6653,131071|40,4,@6687 84,4,@6625 6687:C2,52|9e13e002f606201880a1001b8bd02018d6036004d4036008133f00de92026218d003600c353f00dbb406a12881c6a00401000000|@6652,131071|24,4,@2355 36,4,@2320 6688:O2|@6689,@344 6689:C2,88|9e13e002f606201880a1001b8bd02018c40360048c21a0108b196010ba102003ae100006fa21bffc2d3f0361ac05a008ec25e000ec00a004ec25e008d025e004d200a00090100017353f035cb406a00881c6a00401000000|@6672,131071|40,4,@6690 72,4,@6625 6690:C2,48|9e13e002f606201880a1001b8bd02018d4036004133f00dd920263c8d0036008353f00dab406a23081c6a00401000000|@6671,131071|20,4,@2341 32,4,@2311 6691:C2,88|9e13e002f606201880a1001b8bd02018c40360048c21a0108b196010ba102003ae100006fa21bffc2d3f0361ac05a0c8ec25e000ec00a004ec25e008d025e004d200a00090100017353f035cb406a00881c6a00401000000|@6672,131071|40,4,@6692 72,4,@6625 6692:C2,48|9e13e002f606201880a1001b8bd02018d4036004133f00de92026218d0036008353f00dab406a23081c6a00401000000|@6671,131071|20,4,@2355 32,4,@2311 6693:O2|@6695,@6694 6694:O2|@6696,0 6695:S3|757365 6696:O3|@21,69,@6697 6697:O4|@6695,-1,@6698,@6310 6698:O2|-1,@6699 6699:O2|-3,@6700 6700:O3|@6702,@344,@6701 6701:O18|@6774,@6779,@6784,@6789,@6794,@6799,@6802,@6805,@6808,@6813,@6816,@6819,@6822,@6825,@6828,@6831,@6834,@6773 6702:C2,1800|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d0213ff413000083920263d81b0000839a0360d8f40360009fc6a00088013ff480a2200122800006d0012000053f03638400a0f4108000068c21a008400001b701000000841000088c21a0088b1960083b100000ba076001ae100006fa21bffcac102005ec25e0008c21a0088b1960083b100000ba076001aa100006fa21bffca8102001e82560008c21a0148b196014ba102004a6100006fa21bffc253f0364a404a178e424e000c424e00cea24e008ee24e0048c21a00c8b19600cba102002a2100006fa21bffc213f036ca0042358e0246000de012000de246004c4213ffcee213ff8ea213ff4e6213ff0e2213fecc6213fe8033f0362820063bec2213fe49a102001da213fe086013fe088013fe0d8012014d603200080a2e0013280016dc6012008d4012024113f036d900221841b3f003a9a0360e07ffcd87301000000921000088c21a00c8b19600cba10200290100006fa21bffc053f036d8400a224c4222000ee012018ee2220041b3f00399a0362747ffcd7c901000000ac1000088c21a00c8b19600cba10200290100006fa21bffc2b3f036daa056280ea222000e801200ce82220041b3f00379a0363687ffcd5f701000000a6100008901020c91b3f016c9a0360f07ffe0a53010000008c21a00c8b19600cba102002a4100006fa21bffca2102001e224a004d024a0008c21a00c8b19600cba102002a0100006fa21bffce4242004e62420008c21a00c8b19600cba1020029e100006fa21bffce023e004ec23e0008c21a00c8b19600cba10200282100006fa21bffcde206004d2206000da02a00894100001d20120109010000d1b3f00369a0360ac7ffcd43b0100000098100008901020019a10000cf40360009fc6a00001000000fa022004fa213ffcfa022008fa213ff8fa02200cfa213ff4fa022010fa213ff0fa022014fa213fecd602200088013fec80a2e00132800004d402e0001080001ed401200cd2012038d00260048c21a0148b196014ba10200484100006fa21bffc2f3f036dae05e2f8ee20a000ec022004ec20a00cea02a000ea20a008e802a004e820a004fa02e004fa213ffcd2022000901000027ffff9c488013ffcd601200088012004f606201880a1001b8bd0201830bfffe080a2a00132800004d202a0001080001ed2012000d0012038c40220048c21a0148b196014ba102004ae100006fa21bffc2d3f036dac05a348ec25e000ea00a004ea25e00ce8026000e825e008e6026004e625e004fa02a004fa213ffcd200a000901000177ffff9a388013ffcd401200088012004f606201880a1001b8bd0201830bfffe080a2600132800004d00260001080001ed0012004c4012038ee00a0048c21a0148b196014ba102004ac100006fa21bffc2b3f036daa056398ea25a000e805e004e825a00ce6022000e625a008e4022004e425a004fa026004fa213ffcd205e000901000167ffff98288013ffcd201200088012004f606201880a1001b8bd0201830bfffe080a2200132800004c40220001080001ec4012008ee012038ec05e0048c21a0148b196014ba102004aa100006fa21bffc293f036da80523e8e8256000e605a004e625600ce400a000e4256008e200a004e2256004fa022004fa213ffcd205a000901000157ffff96188013ffcd001200088012004f606201880a1001b8bd0201830bfffe080a0a00132800004ee00a0001080001eee012010ec012038ea05a0048c21a0148b196014ba102004a8100006fa21bffc273f036ea604e038e6252000e4056004e425200ce205e000e2252008e005e004e0252004fa00a004fa213ffcd2056000901000147ffff94088013ffcc401200088012004f606201880a1001b8bd0201830bfffe080a5e00132800004ec05e0001080001e88012014ea012038e80560048c21a0148b196014ba102004a6100006fa21bffc253f036ea404a088e424e000e2052004e224e00ce005a000e024e008de05a004de24e004fa05e004fa213ffcd2052000901000137ffff91f88013ffcee01200088012004f606201880a1001b8bd0201830bfffe0f606201880a1001b8bd0201830bffed0d402200080a2a19d3280001bd2022004d0213ffcfa022008fa213ff8133f036e920260d8d0012010400008fe88013ff88c21a0108b196010ba10200392100006fa21bffcd0012000d0226008053f00288400a2d0c4226004ae10219dee22600090100009f40620209fc6a00001000000d2022004d0213ffc113f003c900222887ffcc20488013ffc133f036e920262547ffcc20001000000053ee0088400a204ee00a00092100008901000177ffcaefd010000002d3ee008ac05a204ea05a000d4056010133f00089202629c901000157ffca21401000000133f036e920260d8d0012014400008cf01000000d0012000f40620209fc6a00001000000133f036e920260d8d001201cde012028353f036bb406a3dc81c6a0048801202c|@6772,131071|28,4,I48 36,4,I24 68,4,@6703 84,5,@6704 180,4,@6709 224,4,@6745 268,4,$6702+1518 320,4,@6752 328,4,@1191 336,5,@1192 368,4,@6755 388,4,@1176 396,5,@1177 428,4,@6757 448,4,@1107 456,5,@1108 472,4,@3292 480,5,@3293 620,4,@1096 628,5,@1100 756,4,@6759 808,5,@6625 888,4,@6760 940,5,@6625 1020,4,@6761 1072,5,@6625 1152,4,@6762 1204,5,@6625 1284,4,@6763 1336,5,@6625 1416,4,@6764 1468,5,@6625 1544,4,@6765 1556,5,@6742 1592,4,@522 1636,4,@1218 1644,5,@496 1652,4,@6771 1660,5,@496 1668,4,@25 1688,5,@402 1696,4,@25 1712,4,@264 1724,5,@235 1732,4,@6765 1744,5,@6742 1768,4,@6765 1784,4,@6742 6703:O2|@5,@7488 6704:C2,644|9e13e002f606201880a1001b8bd02018de213ffcd0213ff8c6213ff4053f03638400a166c4213ff0ae102001ee213fec86013fec94100008921020019010200d1b0000849a036178f40360009fc6a00088013fecac100008c60120081080002dec213ffce8022000273ee000a604e01c80a500133280000580a52005aa1000081080001f90100015328000068c21a0102b3f0005aa05601c10800019901000158b196010ba102003a4100006fa21bffc233f0363a20463a0e224a008d024a004e0012000e024a0008c21a0108b196010ba102003aa100006fa21bffce42560081f3f00059e03e050de256004033ee0008200601cc225600090100015f40620209fc6a00001000000ac102001ec213ffcc6213ff82b3f0363aa05625eea213ff4a8102001e8213ff086013ff094102001921000169010203d1b0000849a036178f40360009fc6a00088013ff0a6100008c6012008108000099210208127000004a604e001d0213ffcd0213ff8d0213ff488013ff492102081901000134000004f010000008c21a0088b1960083b100000ba076001a4100006fa21bffca2102001e224a0008c21a0088b1960083b100000ba076001a0100006fa21bffc9e103ffdde2420008c21a0188b196018ba10200582100006fa21bffce0206010d020600cda01200cda206008d801201cd8206004e42060008c21a00c8b19600cba10200296100006fa21bffcc222e00494102001d422e0008c21a0088b1960083b100000ba07600192100006fa21bffcd6226000d2213ffc9410200592102121901020051b0000829a036338f40360009fc6a00088013ffc8c21a00c8b19600cba10200284100006fa21bffcd020a004ee012000ee20a00090100002ec01202481c5a00688012028|@6708,131071|28,4,$6704+102 64,4,I61 104,4,@3 144,4,@227 176,4,@6705 224,4,@230 236,4,@3 276,4,$6704+350 312,4,I61 348,4,1024 380,5,@6706 576,4,I11 6705:S13|54657874494f2e6f70656e496e 6706:C2,368|9e13e002f606201880a1001b8bd02018808a200122800009de213ffcb8222001811f200026800005de213ffc841000081080000980a0a001113f0007900223e4f40620209fc6a00088013ffc8410200180a0a0013280000501000000ae1020051080001cde213ffc1103ffff900223e180a080082880000aae80a010de213ffc113f0007900223e4f40620209fc6a00088013ffcae102001ae80a01090a5e004de213ffcd2213ff8c4213ff4921020111b0000899a0363f8f40360009fc6a00088013ff4ae1000081080000694102001d2213ff8c4213ff488013ff49410200192102105901000171b0000829a036338f40360009fc6a00001000000d0213ffcac10200188013ffcea01200480a5401638800004e80120001080000b8c21a00ce6012008bb34e002b93da002fa2d001cac85a004f606201880a1001b8bd0201830bffff28b19600cba102002a8100006fa21bffce6012000e6252004ea25200090100014e401200c81c4a00688012010|@6707,131071|56,4,@251 104,4,67108856 128,4,@251 176,4,I241 232,4,I11 6707:S18|4368617241727261792e6172726179283229 6708:S16|54657874494f2e6f70656e496e283129 6709:C2,148|9e13e002f606201880a1001b8bd02018de213ffcda213ff8133f036492026228d003600c4000079088013ff8808a200132800012c4012000c402200080a0a0293280000cee012004ee012000ec05e004ea05a000b8256001b9172004a8072001e825a000e601200481c4e0068801200881c5e00688012008ee00a008ac102005ec25e00090102001ea01200481c5600688012008|@6744,131071|24,4,@6710 36,5,@6742 6710:O2|@6712,@6711 6711:O2|@6720,@6719 6712:C2,736|9e13e002f606201880a1001b8bd02018c4022000d000a00080a23ffd32800053ee00a004ee00a004ec05e000d0213ffcd0213ff88c21a00c88013ff88b19600cba102002aa100006fa21bffc293f0365a805213ce8256000e8036004e8256004de213ffcda213ff8ee213ff4d405a00c92100015901000167ffca08988013ff4fa022004fa213ffcd00220007ffcc32e88013ffca6012010d024e000a4012010e2012000e224a004e0012004de012014de242000c20120108088600132800004b8102004f8006000b92f20029a07200180a36001328000068088600190102001d801200c81c320068801201832800004b8102004f8006000b92f200298072001811f20003480000980886001113f0004900223d0f40620209fc6a00001000000961020018088600122800005fa08600496100001108000058c21a008b92f6002960720018c21a0088b196008ba10200190100006fa21bffcd6222000d601200c81c2e00688012018ec05e010ea05a00080a5600132800007e805e000a8103ffde825a0009010200181c3e00601000000e6052000e405a000b824a001ba24e001811f401c26800010de213ffcde213ffce8213ff8fa05e00cfa213ff4ec213ff0ec213fecd6013ff4d405e008d205e004901000144000007488013fec10800008e2012000e8213ff8fa05e00cfa213ff4ec213ff088013ff0e2012000e004600080a4200132800008de0120089e103ffdde24600090102001c201200c81c0600688012010c203e000da012004808860012280000901000000b8206001811f200026800005010000009810000110800009d6036000113f0004900223d0f40620209fc6a0000100000098102001d603600080a3000b2a800009d4036004113f0004900223d0f40620209fc6a0000100000094102001d4036004bb3b2002fa0a801db92f600294072001d203e000b8226001b917200490072001d023e0008c21a0088b196008ba10200190100006fa21bffcd4222000c401200c81c0a00688012010|@6718,131071|76,4,@6713 120,5,@235 140,5,@520 268,4,@224 468,5,@6715 596,4,@224 636,4,@224 6713:C2,100|9e13e002f606201880a1001b8bd02018d0213ffcd0213ff8de213ff494013ff892102005da036004f40360009fc6a00088013ff48c21a00c8b19600cba10200290100006fa21bffcc4012004c4222000ee012008ee222004ec01200081c5a0068801200c|@6714,131071| 6714:S32|426173696353747265616d494f28292e696e7075744e4c697374283129283129 6715:C2,352|9e13e002f606201880a1001b8bd0201884102001c4222000d001200084103ffdc4222000de213ffcd2213ff8c6213ff42f3f0365ae05e29eee213ff0ac102001ec213fec86013fec8c21a01088013fec8b196010ba102003aa100006fa21bffce802e000e8256008a6102001e6256004e402e004e4256000a210000a9410001592100011901020211b0000849a036178f40360009fc6a00001000000e0012014d024200090102001c6012008de01201081c3e00688012018da022000193ee0009803201c80a3400c3280000580a36005821000081080001f90100001328000068c21a010033f00058200601c10800019901000018b196010ba10200396100006fa21bffc153f03659402a360d422e008d022e004d2012000d222e0008c21a0108b196010ba10200382100006fa21bffcd6206008053f00058400a050c42060042f3ee000ae05e01cee20600090100001f40620209fc6a0000100000090102001|@6717,131071|48,4,$6715+186 136,4,I61 188,4,@3 228,4,@227 260,4,@6716 308,4,@230 320,4,@3 6716:S17|54657874494f2e66696c6c427566666572 6717:S20|54657874494f2e66696c6c427566666572283529 6718:S17|54657874494f2e696e7075743127283129 6719:O2|@6723,I48 6720:C2,1128|9e13e002f606201880a1001b8bd02018c4022004ee00a00080a5fffd32800008808de0019a102001da22a000d022a0049010200181c3e00601000000328000ecd0213ffc8c21a0148b196014ba102004ac100006fa21bffcea02200cea25a00ce8022008e825a008e605e004e625a004e4022000e425a000e205e00c80a4600132800008b82260019a102001da22a000ec22a0049010200181c3e00601000000ba246001811f401c3280002eb82260018c21a0088b196008ba1020019a100006fa21bffce22360009810000f9610000aa01000169410000dd205e008d005e0007ffcae4101000000d0213ffcd0213ff8d0213ff492013ff47ffca1b088013ff4d8213ffcd6213ff8e0213ff4d4012008d2012004d00120007ffcfc1188013ff48c21a00c8b19600cba1020029e100006fa21bffc82102001c223e004d023e000da012004de236000d8012000d823600490102001d601200881c2e00688012018ba246001811f401c2480005f8c21a0148c21a0088b196008ba102001a0100006fa21bffcd22420008210000f981000099610000aea213ffcfa05e000fa213ff8fa05e008fa213ff494100010d2013ff4d0013ff87ffcae0c88013ff4d0213ffcd0213ff8d0213ff492013ff47ffca17b88013ff4c2213ffcd8213ff8d6213ff4e4213ff0e8213fece6213fe8e2213fe4d4012008d2012004d00120007ffcfbd888013fe4d4012028d2012014b8226001ba22a001b917401c84072001ee012000b8226001ba25e001b91f401cac0720018c21a0148b196014ba102004aa100006fa21bffcec25600cc4256008e8012004e8256004e601202ce62560008c21a00c8b19600cba102002a4100006fa21bffca2102001e224a004d024a0008c21a0088b1960083b100000ba076001a0100006fa21bffcea2420008c21a0148b196014ba1020049e100006fa21bffcc2012030c223e00cda012008da23e008e023e004d801200cd823e000d6012010e422e000de22e00490102001d401201881c2a006880120348b196014ba102004a0100006fa21bffcea24200ce8242008e6242004e4242000b8246001ba226001b91f401c82072001d0213ffcd0213ff8de213ff4da213ff0d4213fecfa05e000fa213fe8fa05e008fa213fe4e2213fe094013ff892100001901000107fffff2e88013fe08c21a0088b196008ba1020019a100006fa21bffcd8012000d82360009410000dd2012004d00120087ffcad9b01000000d0213ffcd0213ff8d0213ff492013ff47ffca10a88013ff4d4012008d2012004d00120007ffcfb6e010000008c21a00c8b19600cba10200296100006fa21bffcd4012024d422e004d022e000d2012018d6226000d0012028d022600490102001c401202081c0a0068801202cd0213ff8d0213ff4de213ff0d4213fecac013ff4ec213fe8173f03679602e0449410000992102005da036004f40360009fc6a00088013fe88c21a00c8b19600cba102002aa100006fa21bffca8102001e8256004e6012008e6256000e4012000ea24a000e201200ce224a00490102001e001200481c4200688012014|@6722,131071|224,5,@414 248,5,@249 280,5,@1586 436,5,@414 460,5,@249 508,5,@1586 888,5,@414 912,5,@249 932,5,@1586 1028,4,@6721 6721:S6|696e7075744e 6722:S29|426173696353747265616d494f28292e696e7075744e4c697374283329 6723:C2,2188|9e13e002f606201880a1001b8bd02018d0213ffcd0213ff8c402200880a0a0011280004988013ff880a2600122800020de213ffcde213ffcda213ff8d0213ff4d4213ff09410000bd2013ff0d00220004000021688013ff07ffcc0ac01000000808a200132800004b8102004f8022000b92f2002ae072001ec012000ba25a001811f001d32800003aa102001aa102005a81d6004a6012010d024e000a4012010e824a00410800199e6012010da213ff8d0213ff4ae10000a9410000b92100017d0022000400002d088013ff480a220013280000bec022000ec012004aa01200ce805a004e8256000a601200ca4102001e424e00410800011d0213ffc808da00132800004b8102004f805a000b92f2002aa07200180a5600132800003a8102001a8102005a601200cec24e000a401200ce824a004d0213ffc88013ffc10800173e6012010ee00a008ec05e000ea00a004e8056000b8252001ba25a001b91f401ca6072001ba22a001811f001d26800029e405e000e40560008c21a0088b196008ba102001a2100006fa21bffcd4246000a010000f8210000d981000089610000aa81000159410001192100012d000a0007ffc9f8201000000e0213ffcc2213ff8d8213ff4d6213ff0e8213fec7ffc9feb88013fece6012000e404e000e2012004b8246001ba24a001b917401ca0072001e024e0009e012014d023e000820120149a102001da2060041080013f88012004e2056000b8246001ba24a001b91f401ca0072001ba22a001b91f401c82072001d800a000ec032000ba25a001811f001d348000a3e805e000e805e000e6056000b824e001ba252001b91f401ca4072001e20560008c21a0088b196008ba102001a0100006fa21bffce42420008210000fa810000da6100008c2213ffce8213ff8e6213ff4d2213ff0d4213fecea213fe8ee213fe494100010921000119010000c7ffc9f4288013fe4d6213ffcfa04e000fa213ff8d8213ff4e4213ff07ffc9fab88013ff0e4012018e2012000b8246001ba24a001b91f401ca0072001de012010c203e000da012014c2236000d801201c80a3200122800012d0213ffcd0213ffce0213ff8d601200c94100010d2012004d0012008400002bc88013ff88c21a0088b196008ba10200196100006fa21bffcd022e0001080000b80a2e001e0213ff8d601200c94100010d2012004d00120084000036d88013ff89610000880a2e0013280000ad402e00096012034d4012004d422e0009201203490102001d0226004108000dc8801202080a2a0013280000ad201200092012034d0012004d022600084012034ae102005ee20a004108000d188012020b822a001ba226001811f401c368000039010000a901000098c21a0088b196008ba10200184100006fa21bffcd020a000a81000089410000292102001d001200c7ffc9eed01000000fa02e000fa213ffce8213ff87ffc9f5888013ff8e6012020e4012004e424e000e2012024e0012000e02460008c21a00c8b19600cba1020029e100006fa21bffc82102001c223e004d023e0008c21a00c8b19600cba10200290100006fa21bffcde222004da01200cda2220007ffcbfa401000000d801202c80a320012280000a96102001d4012004d2012008b8226001ba22a001811f401c3680000396102001961020059401203cd022a0009201203cd6226004880120081080008f88012020e6056000b824e001ba252001b91f401ca4072001e20560008c21a0088b196008ba102001a0100006fa21bffce42420008210000fa810000da6100008c2213ffce8213ff8e6213ff4d2213ff0d4213fecea213fe8ee213fe494100010921000119010000c7ffc9ea288013fe4d6213ffcfa04e000fa213ff8e4213ff47ffc9f0c88013ff4e4012014e2012000b8246001ba24a001b91f401ca0072001de01200cc203e000da012010c2236000d801201880a3200122800025d0213ffcd0213ffcd401200892100010d0012004400000c488013ffc8c21a00c8b19600cba10200296100006fa21bffcd022e004d4012000d422e0009010000b7ffcbf5101000000808a200132800004b8102004f8022000b92f200292072001c4012018ba20a001811f001d36800003ae102001ae102005ac01202cd025a000aa01202cee2560041080003ad0213ffcd401200892100010d00120044000017988013ffc80a220013280000ad60220009601202cd4012000d422e0009201202c90102001d02260041080002ad0213ffc808ae00132800004b8102004f802e000b92f20029407200180a2a0013280000a8c21a00c9201202cc4012000c4226000ae01202cac102005ec25e00410800019d0213ffc8b19600cba10200292100006fa21bffc84102001c4226004d62260008c21a00c8b19600cba10200290100006fa21bffcd2222004ee012000ee2220007ffcbf0d01000000ac01202cd025a000aa01202ca8102001e8256004d0213ffcd0213ff888013ff88801202088012004e6012010808ce00132800004b8102004f804e000b92f2002a4072001811f20002480002ae2012004808ce00132800004b8102004f804e000b92f2002a0072001de0120048c21a0088b1960083b100000ba07600182100006fa21bffc9a102001da2060008c21a0148b196014ba10200498100006fa21bffcd603e00cd623200cd403e008d4232008c2232004d203e000d22320008c21a0148b196014ba10200490100006fa21bffce022200c84102001c4222008c2222004e6222000ee03e004d025e000a210000ce001201480a42001228000269e100011c20120088c21a0088b1960083b100000ba0760019a100006fa21bffc98102001d82360008c21a0148b196014ba10200496100006fa21bffcd404600cd422e00cd2046008d222e008da22e004d0046000d022e0008c21a0148b196014ba10200484100006fa21bffcae102001ee20a00cac102001ec20a008da20a004ea006004ea20a000e8046004c42520009e10000bc2012018e6206000de206004e020600890102001da01200c81c360068801201c|@6741,131071|80,5,@6724 88,5,@520 196,5,@6730 432,5,@247 460,5,@248 688,5,@247 716,5,@248 804,5,@6734 864,5,@6738 1028,5,@247 1048,5,@248 1144,5,@520 1328,5,@247 1352,5,@248 1432,5,@6724 1476,5,@520 1568,5,@6730 1748,5,@520 6724:C2,212|9e13e002f606201880a1001b8bd020188410000f4000003701000000de022024808be0013280000fc4213ffcd4213ffcfa022000fa213ff8fa03e000fa213ff4c4213ff0901000099a013ffc4000003688013ff0c201200081c06006880120108c21a01088013ffc8b196010ba10200382100006fa21bffcd42060081b3f00059a03608cda206004d8022000d82060008c21a0108b196010ba10200396100006fa21bffcc222e008153f00059402a050d422e004133ee0009202601cd222e0009010000bf40620209fc6a0000100000090102001|@6729,131071|20,5,@6725 76,5,@6727 124,4,@232 168,4,@230 180,4,@3 6725:C2,12|9e13e00281c3e00601000000|@6726,129| 6726:S2|5244 6727:C2,448|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d0213ff4c6213ff0053f03698400a2a2c4213fecae102001ee213fe886013fe8da037ff8f40360009fc6a00088013fe8ac100008c60120081080002d808da001ea012004e6022000253ee000a404a01c80a4c0123280000580a4e005a81000081080001e90100014328000068c21a010293f0005a805201c10800018901000148b196010ba102003a2100006fa21bffce0056000e0246008d0246004de057ffcde2460008c21a0108b196010ba102003a8100006fa21bffce2252008033f000582006050c22520041b3ee0009a03601cda25200090100014f40620209fc6a00001000000ac102001808da00132800004b8102004f805a000b92f2002aa07200180a5600132800006e801200c90102001e801201481c5200688012018b8252001ba256001811f401c2680000db82560018c21a00c8b19600cba10200290100006fa21bffca6102001e6222004ec222000e401201481c4a00688012018ba252001b91f401c90072001ec213ffcda0120107fffff9e88013ffc8c21a00c8b19600cba102002a6100006fa21bffcd024e004e4012000e424e00090100013e201201881c460068801201c|@6728,131071|32,4,$6727+90 96,4,@3 136,4,@227 212,4,@230 224,4,@3 6728:S41|426173696353747265616d494f28292e72656164566563466f72636564283329646f52656164283129 6729:S32|426173696353747265616d494f28292e72656164566563466f72636564283329 6730:C2,416|9e13e002f606201880a1001b8bd020188410000f7fffff6001000000de022034808be00132800040c4213ffcc4213ffcd4213ff8fa022000fa213ff4c6213ff0033f036a820060fec2213fec9a102001da213fe886013fe890100009da03e000f40360009fc6a00088013fe8c6012008d801201481c3200688012018d4022000133ee0009202601c80a280093280000580a2a005961000081080001e9010000b328000068c21a010173f00059602e01c108000189010000b8b196010ba10200384100006fa21bffcee012004ee20a008d020a004ec012000ec20a0008c21a0108b196010ba10200396100006fa21bffcc422e0082b3f0005aa056050ea22e004293ee000a805201ce822e0009010000bf40620209fc6a0000100000090102001c4213ffc8c21a01088013ffc8b196010ba10200382100006fa21bffc1b3f03679a036044da206008193f036a9803223cd8206004d6022000d62060008c21a0108b196010ba10200394100006fa21bffcc222a008133f000592026050d222a0042f3ee000ae05e01cee22a0009010000af40620209fc6a0000100000090102001|@6733,131071|20,5,@6725 64,4,$6730+126 128,4,@3 168,4,@227 244,4,@230 256,4,@3 316,4,@6721 328,4,@6731 372,4,@230 384,4,@3 6731:O3|@149,@6732,0 6732:S23|4e6f6e626c6f636b696e674e6f74537570706f72746564 6733:S28|426173696353747265616d494f28292e726561645665634e42283329 6734:C2,220|9e13e002f606201880a1001b8bd020188410000f7ffffedc01000000de022020808be00132800011c4213ffcd4213ffcd6213ff8fa022000fa213ff4d2213ff0fa03e000fa213fecc4213fe8901020019a013ffc4000002988013fe8c201200081c06006880120188c21a01088013ffc8b196010ba10200382100006fa21bffcd62060081b3f00059a03608cda206004d8022000d82060008c21a0108b196010ba10200396100006fa21bffcc222e008153f00059402a050d422e004133ee0009202601cd222e0009010000bf40620209fc6a0000100000090102001|@6737,131071|20,5,@6725 84,5,@6735 132,4,@232 176,4,@230 188,4,@3 6735:C2,404|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d0213ff4c6213ff0053f036a8400a3fac4213fecae102001ee213fe886013fe8e8037ff09410200192100008d0037ff47ffc9c1988013fe89a100014f40360009fc6a00001000000ac100008c60120081080002d80a5a001e6012004e2022000213ee000a004201c80a440103280000580a46005a41000081080001e90100012328000068c21a010253f0005a404a01c10800018901000128b196010ba1020039e100006fa21bffcc204fffcc223e008d023e004da04fff8da23e0008c21a0108b196010ba102003a4100006fa21bffcde24a008193f000598032050d824a004173ee0009602e01cd624a00090100012f40620209fc6a00001000000ac10200180a5a00132800004e601200c1080000ee601200cb824e001ba25a001b917401ca4072001e2012010e0046000ba242001811f001d36800004e601200c10800009b824e001b824e001ba25a001b917401c90072001e401201481c4a00688012018ba25a001b917401c900720019a100011de01201410bfff9e88012018|@6736,131071|32,4,$6735+114 72,5,@247 120,4,@3 160,4,@227 236,4,@230 248,4,@3 6736:S38|426173696353747265616d494f28292e66696c6c427566666572283429646f52656164283129 6737:S29|426173696353747265616d494f28292e66696c6c427566666572283429 6738:C2,460|9e13e002f606201880a1001b8bd020189410000f7ffffe1c01000000de022030808be0013280004bd4213ffcd4213ffcd6213ff8fa022000fa213ff4c6213ff0033f036b8200623ac2213fec9a102001da213fe886013fe88c21a01088013fe88b196010ba10200398100006fa21bffcd2232008c4026000c4232004ae102001ee2320009010000cda03e000f40360009fc6a00001000000c6012008ec01201481c5a00688012018e8022000273ee000a604e01c80a500133280000580a52005aa1000081080001e90100015328000068c21a0102b3f0005aa05601c10800018901000158b196010ba102003a4100006fa21bffce2012004e224a008d024a004e0012000e024a0008c21a0108b196010ba102003aa100006fa21bffce42560081f3f00059e03e050de256004033ee0008200601cc225600090100015f40620209fc6a0000100000090102001d4213ffc8c21a01088013ffc8b196010ba10200382100006fa21bffc1b3f036b9a036378da206008193f036a9803223cd8206004d6022000d62060008c21a0108b196010ba10200392100006fa21bffcc2226008053f00058400a050c42260042f3ee000ae05e01cee22600090100009f40620209fc6a0000100000090102001|@6740,131071|20,5,@6725 64,4,$6738+170 172,4,@3 212,4,@227 288,4,@230 300,4,@3 360,4,@6739 372,4,@6731 416,4,@230 428,4,@3 6739:S8|63616e496e707574 6740:S31|426173696353747265616d494f28292e66696c6c4275666665724e42283429 6741:S33|426173696353747265616d494f28292e7265616446726f6d526561646572283529 6742:C2,788|9e13e002f606201880a1001b8bd02018ae10000fec022000ea022004901020017ffc9a0701000000ee213ffcd2213ff8ec213ff4ea213ff0d0213fec88013fec80a2200132800005de022000a810200110800012808d2001da03e00080a37ffd3280000ad00220048c21a0088b196008ba102001a8100006fa21bffcde25200010800006808d2001f606201880a1001b8bd0201830bfffeb3280001c01000000d6052000d202e00080a27ffd3280001001000000d002e00480a220053280000501000000981020011080001501000000113f0006900221607ffc9a3101000000981000081080000e01000000113f0006900221607ffc9a2a01000000981000081080000701000000113f0006900221607ffc9a23010000009810000898102001d6012004d402e00080a2a005328000050100000092102001108000139010000b1300004e92026081b8226001ba232001811f401c32800005b823200192102001108000099010000bb91720049007200198100008f606201880a1001b8bd0201830bfffe81b0000849a0362b8f40360009fc6a0000100000080a22001328000059210000b841020011080000cc6213ffc901020051b0000849a0362f8f40360009fc6a00001000000f606201880a1001b8bd0201830bfffd22f3f036cae05e1f2ee213ff8ac102001ec213ff486013ff4d0012008da01200cf40360009fc6a00088013ff4aa100008c601200810800024d0012010a8100008d00120041b0000849a036298f40360009fc6a0000100000080a2200532800004e60120041080000ee8213ffca4102005e424e000e8213ffc92100013901020091b0000849a0362f8f40360009fc6a00088013ffc10800004d001200488013ffcd00120047ffc99c801000000d0012000f40620209fc6a00001000000aa102001d00120101b0000849a036298f40360009fc6a0000100000080a2200532800004e80120101080000eea213ffca6102005e6252000ea213ffc92100014901020091b0000849a0362f8f40360009fc6a00088013ffc10800004d001201088013ffcd00120107ffc99a801000000d0012000e801202081c5200688012024|@6743,131071|32,5,@236 208,4,@238 216,5,@240 236,4,@238 244,5,@240 264,4,@238 272,5,@240 320,4,20000 388,4,I71 436,4,I73 472,4,$6742+534 540,4,I70 600,4,I73 636,5,@240 668,4,I70 728,4,I73 764,5,@240 6743:S17|54657874494f2e70726f74656374283229 6744:S37|4d414b455f28292e757365496e746f456e7628312975736528312967657443686172283129 6745:C2,404|9e13e002f606201880a1001b8bd0201880a260012280000601000000053f036d8400a10810800005de213ffc053f036d8400a118de213ffcd0213ff8c4213ff4fa036004fa213ff092103ffd9010000a7ffcb99988013ff08c21a00c8b19600cba10200284100006fa21bffcae102001ee20a004ec012008ec20a0008c21a00c8b19600cba102002aa100006fa21bffcc4256004293f036da8052128e82560008c21a00c8b19600cba102002a6100006fa21bffcea24e004d024e0008c21a00c8b19600cba102002a4100006fa21bffce624a004233f036da2046134e224a0008c21a00c8b19600cba102002a0100006fa21bffce4242004de012000de2420008c21a00c8b19600cba10200282100006fa21bffce02060041b3f036d9a036144da2060008c21a00c8b19600cba10200290100006fa21bffcc2222004d8012004d82220007ffcbaba01000000173ee0089602e204d402e000921000089010000a7ffca4e901000000133ee00892026204d0026000d4022010133f00089202629cde01200c353f0005b406a0dc81c6a00488012010|@6751,131071|28,4,@6746 44,4,@6747 80,5,@509 148,4,@6748 212,4,@6749 280,4,@6750 324,5,@520 332,4,@25 352,5,@402 360,4,@25 376,4,@264 388,4,@235 6746:S6|4572726f722d 6747:S8|5761726e696e672d 6748:S2|2e0a 6749:S8|272c206c696e6520 6750:S5|20696e2027 6751:S39|4d414b455f28292e757365496e746f456e762831297573652831296572726f7250726f63283329 6752:O2|@6753,@25 6753:C2,96|9e13e002f606201880a1001b8bd02018c4036004ee00a000de213ffcda213ff892100008901000177ffca4a988013ff8ec012000ea05a004e8056000d4052010133f00089202629c90100014de012004353f0005b406a0dc81c6a00488012008|@6754,131071|40,5,@402 64,4,@264 80,4,@235 6754:S15|54657874494f2e7072696e74283129 6755:C2,20|9e13e002d0036004d002200081c3e00601000000|@6756,161| 6756:S35|4d414b455f28292e757365496e746f456e76283129757365283129636f64652d283129 6757:C2,44|9e13e002f606201880a1001b8bd02018d4022008d2022004d0022000da036004f403600081c6a00401000000|@6758,131071| 6758:S39|4d414b455f28292e757365496e746f456e762831297573652831296572726f7250726f63283129 6759:C2,52|9e13e002f606201880a1001b8bd02018d6036004d4036008133f00de92026340d003600c353f00dbb406a12881c6a00401000000|@6652,131071|24,4,@2362 36,4,@2320 6760:C2,52|9e13e002f606201880a1001b8bd02018d6036004d4036008133f00d992026358d003600c353f00dbb406a12881c6a00401000000|@6652,131071|24,4,@2308 36,4,@2320 6761:C2,52|9e13e002f606201880a1001b8bd02018d6036004d4036008133f00de92026218d003600c353f00dbb406a12881c6a00401000000|@6652,131071|24,4,@2355 36,4,@2320 6762:C2,52|9e13e002f606201880a1001b8bd02018d6036004d4036008133f00de920260f0d003600c353f00dbb406a12881c6a00401000000|@6652,131071|24,4,@2348 36,4,@2320 6763:C2,52|9e13e002f606201880a1001b8bd02018d6036004d4036008133f00dd920263c8d003600c353f00dbb406a12881c6a00401000000|@6652,131071|24,4,@2341 36,4,@2320 6764:C2,52|9e13e002f606201880a1001b8bd02018d6036004d4036008133f00df92026068d003600c353f00dbb406a12881c6a00401000000|@6652,131071|24,4,@2369 36,4,@2320 6765:O1|@6766 6766:C2,108|9e13e002f606201880a1001b8bd02018c4022000d000a00080a23ffd3280000cee00a004ee00a004ec05e000d405a00c133f036e9202616890100016353f0005b406a0dc81c6a0040100000094102001d205e0089010201d1b0000849a036178f403600081c6a00401000000|@6770,131071|48,4,@6767 60,4,@235 88,4,I61 6767:O1|@6768 6768:C2,136|9e13e002f606201880a1001b8bd020188410000fae100008d005e0007ffffb2201000000c4213ffcfa02200cfa213ff8de05e00488013ff8da03e00080a37ffd32800004808b60011080000b901020013280000790103ffdde036004f606201880a1001b8bd0201830bffff4d023e00090102001da012000de012004f403600081c6a00488012008|@6769,131071|28,5,@6725 6769:S27|426173696353747265616d494f28292e636c6f7365496e27283129 6770:S18|54657874494f2e636c6f7365496e27283129 6771:S8|207261697365640a 6772:S27|4d414b455f28292e757365496e746f456e76283129757365283129 6773:O2|@6837,@344 6774:O2|@6775,@344 6775:C2,84|9e13e002f606201880a1001b8bd02018d00360048c21a00c8b19600cba10200284100006fa21bffc2f3f036eae05e310ee20a000ee022004ee20a004d202200090100002353f035cb406a00881c6a00401000000|@6628,131071|40,4,@6776 68,4,@6625 6776:C2,64|9e13e002f606201880a1001b8bd02018de213ffc133f00de92026340d00360047fffebd088013ffc1b3f036e9a03636cde012000f403600081c6a00488012004|@6624,131071|20,4,@2362 32,5,@6615 40,4,@6777 6777:O1|@6778 6778:C2,156|9e13e002f606201880a1001b8bd02018c402200880a0a0012280001f90102001de213ffcd0213ff8ee022004901020019a100017f40360009fc6a00088013ff8ec012000d0213ffc90102001da05a000f40360009fc6a00088013ffc7fffffea9e13e0028c21a00c8b19600cba102002aa100006fa21bffcd0256004e8012000e825600090100015e601200881c4e0068801200c81c3e00601000000|@5536,131071| 6779:O2|@6780,@344 6780:C2,84|9e13e002f606201880a1001b8bd02018d00360048c21a00c8b19600cba10200284100006fa21bffc2f3f036fae05e0a8ee20a000ee022004ee20a004d202200090100002353f035cb406a00881c6a00401000000|@6628,131071|40,4,@6781 68,4,@6625 6781:C2,64|9e13e002f606201880a1001b8bd02018de213ffc133f00de920260f0d00360047fffeb6a88013ffc1b3f036f9a036104de012000f403600081c6a00488012004|@6624,131071|20,4,@2348 32,5,@6615 40,4,@6782 6782:O1|@6783 6783:C2,156|9e13e002f606201880a1001b8bd02018c402200880a0a0012280001f90102001de213ffcd0213ff8ee022004901020019a100017f40360009fc6a00088013ff8ec012000d0213ffc90102001da05a000f40360009fc6a00088013ffc7fffffea9e13e0028c21a00c8b19600cba102002aa100006fa21bffcd0256004e8012000e825600090100015e601200881c4e0068801200c81c3e00601000000|@5536,131071| 6784:O2|@6785,@344 6785:C2,84|9e13e002f606201880a1001b8bd02018d00360048c21a00c8b19600cba10200284100006fa21bffc2f3f036fae05e240ee20a000ee022004ee20a004d202200090100002353f035cb406a00881c6a00401000000|@6628,131071|40,4,@6786 68,4,@6625 6786:C2,64|9e13e002f606201880a1001b8bd02018de213ffc133f00d992026358d00360047fffeb0488013ffc1b3f036f9a03629cde012000f403600081c6a00488012004|@6624,131071|20,4,@2308 32,5,@6615 40,4,@6787 6787:O1|@6788 6788:C2,156|9e13e002f606201880a1001b8bd02018c402200880a0a0012280001f90102001de213ffcd0213ff8ee022004901020019a100017f40360009fc6a00088013ff8ec012000d0213ffc90102001da05a000f40360009fc6a00088013ffc7fffffea9e13e0028c21a00c8b19600cba102002aa100006fa21bffcd0256004e8012000e825600090100015e601200881c4e0068801200c81c3e00601000000|@5536,131071| 6789:O2|@6790,@344 6790:C2,84|9e13e002f606201880a1001b8bd02018d00360048c21a00c8b19600cba10200284100006fa21bffc2f3f036fae05e3d8ee20a000ee022004ee20a004d202200090100002353f035cb406a00881c6a00401000000|@6628,131071|40,4,@6791 68,4,@6625 6791:C2,64|9e13e002f606201880a1001b8bd02018de213ffc133f00df92026068d00360047fffea9e88013ffc1b3f03709a036034de012000f403600081c6a00488012004|@6624,131071|20,4,@2369 32,5,@6615 40,4,@6792 6792:O1|@6793 6793:C2,156|9e13e002f606201880a1001b8bd02018c402200880a0a0012280001f90102001de213ffcd0213ff8ee022004901020019a100017f40360009fc6a00088013ff8ec012000d0213ffc90102001da05a000f40360009fc6a00088013ffc7fffffea9e13e0028c21a00c8b19600cba102002aa100006fa21bffcd0256004e8012000e825600090100015e601200881c4e0068801200c81c3e00601000000|@5536,131071| 6794:O2|@6795,@344 6795:C2,84|9e13e002f606201880a1001b8bd02018d00360048c21a00c8b19600cba10200284100006fa21bffc2f3f0370ae05e170ee20a000ee022004ee20a004d202200090100002353f035cb406a00881c6a00401000000|@6628,131071|40,4,@6796 68,4,@6625 6796:C2,64|9e13e002f606201880a1001b8bd02018de213ffc133f00dd920263c8d00360047fffea3888013ffc1b3f03709a0361ccde012000f403600081c6a00488012004|@6624,131071|20,4,@2341 32,5,@6615 40,4,@6797 6797:O1|@6798 6798:C2,156|9e13e002f606201880a1001b8bd02018c402200880a0a0012280001f90102001de213ffcd0213ff8ee022004901020019a100017f40360009fc6a00088013ff8ec012000d0213ffc90102001da05a000f40360009fc6a00088013ffc7fffffea9e13e0028c21a00c8b19600cba102002aa100006fa21bffcd0256004e8012000e825600090100015e601200881c4e0068801200c81c3e00601000000|@5536,131071| 6799:O2|@6800,@344 6800:C2,100|9e13e002f606201880a1001b8bd02018c40360048c21a0148b196014ba102004ae100006fa21bffc2d3f0370ac05a318ec25e000ec00a004ec25e00cea022000ea25e008e8022004e825e004d200a00090100017353f035cb406a00881c6a00401000000|@6653,131071|40,4,@6801 84,4,@6625 6801:C2,52|9e13e002f606201880a1001b8bd02018d6036004d4036008133f00de92026340d003600c353f00dbb406a12881c6a00401000000|@6652,131071|24,4,@2362 36,4,@2320 6802:O2|@6803,@344 6803:C2,100|9e13e002f606201880a1001b8bd02018c40360048c21a0148b196014ba102004ae100006fa21bffc2d3f0370ac05a3f4ec25e000ec00a004ec25e00cea022000ea25e008e8022004e825e004d200a00090100017353f035cb406a00881c6a00401000000|@6653,131071|40,4,@6804 84,4,@6625 6804:C2,52|9e13e002f606201880a1001b8bd02018d6036004d4036008133f00de920260f0d003600c353f00dbb406a12881c6a00401000000|@6652,131071|24,4,@2348 36,4,@2320 6805:O2|@6806,@344 6806:C2,100|9e13e002f606201880a1001b8bd02018c40360048c21a0148b196014ba102004ae100006fa21bffc2d3f0371ac05a0d0ec25e000ec00a004ec25e00cea022000ea25e008e8022004e825e004d200a00090100017353f035cb406a00881c6a00401000000|@6653,131071|40,4,@6807 84,4,@6625 6807:C2,52|9e13e002f606201880a1001b8bd02018d6036004d4036008133f00d992026358d003600c353f00dbb406a12881c6a00401000000|@6652,131071|24,4,@2308 36,4,@2320 6808:O2|@6809,@344 6809:C2,84|9e13e002f606201880a1001b8bd02018d00360048c21a00c8b19600cba10200284100006fa21bffc2f3f0371ae05e19cee20a000ee022004ee20a004d202200090100002353f035cb406a00881c6a00401000000|@6628,131071|40,4,@6810 68,4,@6625 6810:C2,64|9e13e002f606201880a1001b8bd02018de213ffc133f00de92026218d00360047fffe92d88013ffc1b3f03719a0361f8de012000f403600081c6a00488012004|@6624,131071|20,4,@2355 32,5,@6615 40,4,@6811 6811:O1|@6812 6812:C2,156|9e13e002f606201880a1001b8bd02018c402200880a0a0012280001f90102001de213ffcd0213ff8ee022004901020019a100017f40360009fc6a00088013ff8ec012000d0213ffc90102001da05a000f40360009fc6a00088013ffc7fffffea9e13e0028c21a00c8b19600cba102002aa100006fa21bffcd0256004e8012000e825600090100015e601200881c4e0068801200c81c3e00601000000|@5536,131071| 6813:O2|@6814,@344 6814:C2,100|9e13e002f606201880a1001b8bd02018c40360048c21a0148b196014ba102004ae100006fa21bffc2d3f0371ac05a344ec25e000ec00a004ec25e00cea022000ea25e008e8022004e825e004d200a00090100017353f035cb406a00881c6a00401000000|@6653,131071|40,4,@6815 84,4,@6625 6815:C2,52|9e13e002f606201880a1001b8bd02018d6036004d4036008133f00df92026068d003600c353f00dbb406a12881c6a00401000000|@6652,131071|24,4,@2369 36,4,@2320 6816:O2|@6817,@344 6817:C2,88|9e13e002f606201880a1001b8bd02018c40360048c21a0108b196010ba102003ae100006fa21bffc2d3f0372ac05a014ec25e000ec00a004ec25e008d025e004d200a00090100017353f035cb406a00881c6a00401000000|@6672,131071|40,4,@6818 72,4,@6625 6818:C2,48|9e13e002f606201880a1001b8bd02018d4036004133f00de92026340d0036008353f00dab406a23081c6a00401000000|@6671,131071|20,4,@2362 32,4,@2311 6819:O2|@6820,@344 6820:C2,88|9e13e002f606201880a1001b8bd02018c40360048c21a0108b196010ba102003ae100006fa21bffc2d3f0372ac05a0e0ec25e000ec00a004ec25e008d025e004d200a00090100017353f035cb406a00881c6a00401000000|@6672,131071|40,4,@6821 72,4,@6625 6821:C2,48|9e13e002f606201880a1001b8bd02018d4036004133f00de920260f0d0036008353f00dab406a23081c6a00401000000|@6671,131071|20,4,@2348 32,4,@2311 6822:O2|@6823,@344 6823:C2,88|9e13e002f606201880a1001b8bd02018c40360048c21a0108b196010ba102003ae100006fa21bffc2d3f0372ac05a1acec25e000ec00a004ec25e008d025e004d200a00090100017353f035cb406a00881c6a00401000000|@6672,131071|40,4,@6824 72,4,@6625 6824:C2,48|9e13e002f606201880a1001b8bd02018d4036004133f00d992026358d0036008353f00dab406a23081c6a00401000000|@6671,131071|20,4,@2308 32,4,@2311 6825:O2|@6826,@344 6826:C2,100|9e13e002f606201880a1001b8bd02018c40360048c21a0148b196014ba102004ae100006fa21bffc2d3f0372ac05a284ec25e000ec00a004ec25e00cea022000ea25e008e8022004e825e004d200a00090100017353f035cb406a00881c6a00401000000|@6653,131071|40,4,@6827 84,4,@6625 6827:C2,52|9e13e002f606201880a1001b8bd02018d6036004d4036008133f00dd920263c8d003600c353f00dbb406a12881c6a00401000000|@6652,131071|24,4,@2341 36,4,@2320 6828:O2|@6829,@344 6829:C2,88|9e13e002f606201880a1001b8bd02018c40360048c21a0108b196010ba102003ae100006fa21bffc2d3f0372ac05a354ec25e000ec00a004ec25e008d025e004d200a00090100017353f035cb406a00881c6a00401000000|@6672,131071|40,4,@6830 72,4,@6625 6830:C2,48|9e13e002f606201880a1001b8bd02018d4036004133f00df92026068d0036008353f00dab406a23081c6a00401000000|@6671,131071|20,4,@2369 32,4,@2311 6831:O2|@6832,@344 6832:C2,100|9e13e002f606201880a1001b8bd02018c40360048c21a0148b196014ba102004ae100006fa21bffc2d3f0373ac05a02cec25e000ec00a004ec25e00cea022000ea25e008e8022004e825e004d200a00090100017353f035cb406a00881c6a00401000000|@6653,131071|40,4,@6833 84,4,@6625 6833:C2,52|9e13e002f606201880a1001b8bd02018d6036004d4036008133f00de92026218d003600c353f00dbb406a12881c6a00401000000|@6652,131071|24,4,@2355 36,4,@2320 6834:O2|@6835,@344 6835:C2,88|9e13e002f606201880a1001b8bd02018c40360048c21a0108b196010ba102003ae100006fa21bffc2d3f0373ac05a0fcec25e000ec00a004ec25e008d025e004d200a00090100017353f035cb406a00881c6a00401000000|@6672,131071|40,4,@6836 72,4,@6625 6836:C2,48|9e13e002f606201880a1001b8bd02018d4036004133f00dd920263c8d0036008353f00dab406a23081c6a00401000000|@6671,131071|20,4,@2341 32,4,@2311 6837:C2,88|9e13e002f606201880a1001b8bd02018c40360048c21a0108b196010ba102003ae100006fa21bffc2d3f0373ac05a1bcec25e000ec00a004ec25e008d025e004d200a00090100017353f035cb406a00881c6a00401000000|@6672,131071|40,4,@6838 72,4,@6625 6838:C2,48|9e13e002f606201880a1001b8bd02018d4036004133f00de92026218d0036008353f00dab406a23081c6a00401000000|@6671,131071|20,4,@2355 32,4,@2311 6839:O2|@6841,@6840 6840:O2|@6842,0 6841:S11|636f646574726565546167 6842:O3|@21,69,@6843 6843:O4|@6841,-1,@6844,@6527 6844:O2|-1,@6845 6845:O2|-3,@1230 6846:O2|@6848,@6847 6847:O2|@6849,0 6848:S8|6465627567546167 6849:O3|@21,69,@6850 6850:O4|@6848,-1,@6851,@6527 6851:O2|-1,@6852 6852:O2|-3,@5398 6853:O2|@6855,@6854 6854:O2|@6856,0 6855:S14|7072696e74537472696e67546167 6856:O3|@21,69,@6857 6857:O4|@6855,-1,@6858,@6578 6858:O2|-1,@6859 6859:O2|-3,@5478 6860:O2|@6862,@6861 6861:O2|@6863,0 6862:S10|45786e4d657373616765 6863:O3|@39,69,@6864 6864:O3|@6862,@734,@6865 6865:O4|@6866,I48,0,0 6866:O4|-1,@151,@152,@150 6867:O2|@6869,@6868 6868:O2|@6870,0 6869:S10|65786e4d657373616765 6870:O3|@21,69,@6871 6871:O4|@6869,-1,@6318,@6872 6872:O3|1,@2671,@694 6873:O2|@6875,@6874 6874:O2|@6876,0 6875:S13|646973706c6179537472756374 6876:O3|@21,69,@6877 6877:O4|@6875,-1,@6879,@6878 6878:O3|1,@6884,@766 6879:O2|-1,@6880 6880:O2|-3,@6881 6881:O1|@6882 6882:C2,228|9e13e002f606201880a1001b8bd02018d0213ffcd0213ff8d0213ff4d0213ff0d0213fecd0213fe8d0213fe4de213fe0fa022000fa213fdcfa022004fa213fd8fa022008fa213fd4fa02200cfa213fd094013fe4d2022010901021357ffca20788013fd08c21a0208b196020ba10200784100006fa21bffcee012014ee20a000ec012018ec20a004ea01201cea20a008e8012020e820a00ce6012024e620a010e4012028e420a014e201202ce220a018e0012000e021202cd601200494100002d2012008d001200c1b3f03519a036114de012010353f0356b406a18081c6a0048801202c|@6883,131071|92,5,@428 200,4,@6450 212,4,@6474 6883:S46|494e495449414c4953455f28292e696e6974476c6f62616c456e76283129646973706c6179537472756374283129 6884:O4|-2,1,@6885,0 6885:O2|@6886,@6480 6886:O2|49,@956 6887:O2|@6889,@6888 6888:O2|@6890,0 6889:S13|6c696e654c656e677468546167 6890:O3|@21,69,@6891 6891:O4|@6889,-1,@6892,@6511 6892:O2|-1,@6893 6893:O2|-3,@6894 6894:O3|@6896,@6898,@6895 6895:O2|@6900,@94 6896:O2|@6897,@94 6897:C2,44|9e13e002c4022000ee03600480a0801732800005901020019010200581c3e0060100000081c3e00601000000|@1106,98465| 6898:O2|@6899,@94 6899:C2,56|9e13e002841000088c21a0108b196010ba10200390100006fa21bffcc422200884102115c4222004c4036004c422200081c3e00601000000|@1106,65697| 6900:C2,60|9e13e002c4022000ee03600480a0801732800005de213ffcd002200881c3e00601000000113f003890022020f40620209fc6a00088013ffc90102001|@1106,98465|36,4,@1110 6901:O2|@6903,@6902 6902:O2|@6904,0 6903:S11|6465627567676572546167 6904:O3|@21,69,@6905 6905:O4|@6903,-1,@6907,@6906 6906:O4|-3,@6912,@6516,@6514 6907:O2|-1,@6908 6908:O2|-3,@6909 6909:O3|@5405,@6910,@5407 6910:O2|@6911,@120 6911:C2,56|9e13e002841000088c21a0108b196010ba10200390100006fa21bffcc422200884102115c4222004c4036004c422200081c3e00601000000|@1106,65697| 6912:O2|@6913,0 6913:O3|1,@6914,@766 6914:O4|-2,1,@6915,0 6915:O2|@6338,@6916 6916:O2|@895,@6917 6917:O2|@6919,@6918 6918:O2|@6921,@6920 6919:O2|51,@695 6920:O2|@6923,@6922 6921:O2|52,@694 6922:O2|@6924,0 6923:O2|53,@694 6924:O2|54,@752 6925:O2|@6927,@6926 6926:O2|@6928,0 6927:S11|646973706c617954797065 6928:O3|@21,69,@6929 6929:O4|@6927,-1,@6931,@6930 6930:O3|1,@6936,@766 6931:O2|-1,@6932 6932:O2|-3,@6933 6933:O1|@6934 6934:C2,204|9e13e002f606201880a1001b8bd02018d0213ffcd0213ff8d0213ff4d0213ff0d0213fecd0213fe8d0213fe4de213fe0fa022000fa213fdcfa022004fa213fd8fa022008fa213fd494013fe4d202200c901021357ffca0c688013fd48c21a0208b196020ba10200784100006fa21bffcee012010ee20a000ec012014ec20a004ea012018ea20a008e801201ce820a00ce6012020e620a010e4012024e420a014e2012028e220a018d601200094100002d2012004d0012008de01200c353f0352b406a3c881c6a0048801202c|@6935,131071|84,5,@428 188,4,@6460 6935:S44|494e495449414c4953455f28292e696e6974476c6f62616c456e76283129646973706c617954797065283129 6936:O4|-2,1,@6937,0 6937:O2|@6939,@6938 6938:O2|@6346,@6940 6939:O2|49,@912 6940:O2|@6942,@6941 6941:O2|@6943,0 6942:O2|51,@360 6943:O2|52,@6310 6944:O2|@6946,@6945 6945:O2|@6947,0 6946:S13|6c696e654e756d626572546167 6947:O3|@21,69,@6948 6948:O4|@6946,-1,@6950,@6949 6949:O4|-3,@6952,@6516,@6514 6950:O2|-1,@6951 6951:O2|-3,@1172 6952:O2|@6953,0 6953:O3|1,@766,@695 6954:O2|@6956,@6955 6955:O2|@6957,0 6956:S9|74696d696e67546167 6957:O3|@21,69,@6958 6958:O4|@6956,-1,@6959,@6527 6959:O2|-1,@6960 6960:O2|-3,@1223 6961:O2|@1750,@6962 6962:O2|@6963,0 6963:O3|@21,69,@6964 6964:O4|@1750,-1,@6966,@6965 6965:O3|1,@694,@6987 6966:O2|-1,@6967 6967:O2|-3,@6968 6968:O1|@6969 6969:C2,272|9e13e002f606201880a1001b8bd02018808a200132800004b8102004f8022000b92f200284072001811f20082480001fae103ffd808a200132800004b8102004f8022000b92f200284072001811f20083480000b808a2001de213ffc84100008113f0004900223d0f40620209fc6a00088013ffcae102001808a200122800005fa0a2006ae1000081080000580a5e1e1b92f6002ae07200180a5e1e132800003ae103ffdae1020058c21a00c8b19600cba10200284100006fa21bffc2d3f0376ac05a1c4ec20a000ee20a004de213ffc921000027ffd1c5488013ffc80a2200132800009d0022000113f03799002205cf40620209fc6a0000100000090102001d0022000ea01200081c5600688012004|@6986,131071|96,4,@224 188,4,@6970 212,5,@1879 232,4,@6983 6970:C2,60|9e13e002841000088c21a0108b196010ba10200390100006fa21bffc2f3f0376ae05e21cee222000c4222008c4036004c422200481c3e00601000000|@6982,98465|28,4,@6971 6971:C2,260|9e13e002f606201880a1001b8bd02018de213ffcd4036004d20360084000004188013ffc80a2200132800006c402200090102001c401200081c0a00688012004ee00a0002d3f0378ac05a3f0b825a001ba25e001811f401c24800009808de001113f0378900223fcf40620209fc6a0000100000090102001808de00122800005fa00a004aa1000171080000cfa00a004fa213ffc901000171b0000879a0360d8f40360009fc6a00088013ffcaa100008108000058c21a00cfa213ffc88013ffc8c21a00c8b19600cba102002a8100006fa21bffce6012000e6252004ea2520008c21a0088b196008ba10200190100006fa21bffce8222000e401200481c4a00688012008|@6981,131071|28,5,@6972 68,4,@6978 96,4,@6979 152,4,I152 6972:C2,1020|9e13e002f606201880a1001b8bd0201880a2a0013280000580a2bff9841020091080000bc4213ffc3280000580a2bffd8410202110800006c4213ffc328000038410204184102029c4213ffcd2213ff8de213ff4d0213ff0d4213fec9a100009f40360009fc6a00088013fec80a2200132800006ee02200090102001ee01200881c5e00688012014ec05e00080a5a0c1328000b780a5a025fa05e004fa213ffcd0013ffcda01200cf40360009fc6a00088013ffc80a2200132800005e8022000aa1020011080009380a56001e605200080a4e1dd3280005a80a4e1e1e401200480a4a0053280004180a4a005fa052004fa213ffcd0013ffcda012010f40360009fc6a00088013ffc80a2200132800005e2022000aa1020011080007d88012004e004600080a421e13280000480a4216110800006de01200822800004de01200810800016de01200880a3e0053280000bd4046004d404600492102001901020019a012018400000ad01000000aa100008108000678801200492102001901020019a0120184000014f01000000aa1000081080005f8801200480a3e0053280000bd4012000d401200092102001901020019a0120184000009901000000aa100008108000538801200492102001901020019a0120184000013b01000000aa1000081080004b880120043280000bd4052004d405200492102001901020019a0120144000008601000000aa10000810800009d0213ffc92102001901020019a0120144000012801000000aa100008d0213ffc88013ffc10800036880120043280000480a4e16110800006e401200422800004e401200410800019e401200480a4a00532800016e401200480a4a0053280000bd4052004d405200492102001901020019a0120144000006501000000aa1000081080001dd0213ffc92102001901020019a0120144000010701000000aa10000810800015d0213ffc80a4a0053280000bd4012008d401200892102001901020019a0120144000005101000000aa10000810800009d0213ffc92102001901020019a012014400000f301000000aa100008d0213ffc88013ffc8801200480a5600132800014901000158c21a00c8b19600cba102002a2100006fa21bffce0012000e02460049e102001de2460008c21a0088b196008ba10200190100006fa21bffce2222000c201200c81c0600688012018e201200c81c46006880120182a80000780a5a08180a5a0353880000480a5a08110800006d401200022800004d401200010800007ea012000d201200cd005e004de01200810bfff188801201480a560053280000bd4012004d401200492102001901020019a0120104000001401000000e801200881c520068801201492102001901020019a012010400000b601000000e801200881c5200688012014|@6977,131071|356,5,@6973 388,5,@6975 436,5,@6973 468,5,@6975 512,5,@6973 544,5,@6975 644,5,@6973 676,5,@6975 724,5,@6973 756,5,@6975 968,5,@6973 1000,5,@6975 6973:C2,612|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d0213ff4d2213ff0d4213fec9010000ada037ffcf40360009fc6a00088013fec80a220013280001bc4022000c401200880a0a00122800014901020018c21a00c8b19600cba102002ae100006fa21bffcec012000ec25e004ea012004ea25e0008c21a0088b196008ba10200190100006fa21bffcee222000e801201081c5200688012014ee01201081c5e00688012014ee00a000b825e001811f20c02680001ab825e001b825e001811f20e434800016b825e001ec012004b825a001ba10001cbb17401dbb17401dbb17401db917401daa072001ba25e001b917001da8072001b91f20c0a6072001d400a0049210001390102005da01200cde01201010bfffbc88012014811f21042680001cb825e001b825e001811f211834800018b825e001ec012004b825a001ba10001cbb17401dbb17401dbb17401db917401daa072001ba25e001b917001da8072001b91f2104a6072001b9172028a4072001d400a0049210001290102005da01200cde01201010bfff9f88012014811f21842680001cec012008b825e001811f219834800018ec012008ec012004b825a001ba10001cbb17401dbb17401dbb17401db917401daa072001ba25e001b917001da8072001b91f2184a6072001b9172028a4072001d400a0049210001290102005da01200cde01201010bfff828801201480a5a00122800014901020018c21a00c8b19600cba102002aa100006fa21bffce8012000e8256004e6012004e62560008c21a0088b196008ba10200190100006fa21bffcea222000e401201081c4a00688012014ea01201081c5600688012014|@6974,131071| 6974:S29|7363616e576f7264283329726561645f6865785f646967697473283329 6975:C2,416|9e13e002f606201880a1001b8bd02018de213ffcda213ff8d0213ff4d2213ff0d4213fec9010000ada037ffcf40360009fc6a00088013fec80a220013280001bc4022000c401200880a0a00122800014901020018c21a00c8b19600cba102002ae100006fa21bffcec012000ec25e004ea012004ea25e0008c21a0088b196008ba10200190100006fa21bffcee222000e801201081c5200688012014ee01201081c5e00688012014ee00a000b825e001811f20c026800023ec012008ec01200cea05a000b8256001b91720c0a8072001ba25e001811f401c3680001aec012008ee213ffcfa00a004fa213ff892100015d00120041b0000859a036358f40360009fc6a00088013ff8e6012004b824e001ba222001b917401ca4072001b91f20c0a2072001d40120009210001190102005da012014de01201810bfffb38801201c80a5a00122800014901020018c21a00c8b19600cba102002aa100006fa21bffce8012000e8256004e6012004e62560008c21a0088b196008ba10200190100006fa21bffcea222000e401201081c4a00688012014ea01201081c5600688012014|@6976,131071|244,4,I108 6976:S25|7363616e576f7264283329726561645f646967697473283329 6977:S11|7363616e576f7264283329 6978:B8|ffffff3f00000000 6979:O3|5,@6980,0 6980:S8|4f766572666c6f77 6981:S24|576f7264732e576f72642e7363616e283129283129283129 6982:S21|576f7264732e576f72642e7363616e283129283129 6983:O3|8,@6985,@6984 6984:S21|496e76616c696420776f726420636f6e7374616e74 6985:S10|436f6e76657273696f6e 6986:S45|494e495449414c4953455f28292e696e6974476c6f62616c456e76283129776f72644f66537472696e67283129 6987:O4|-3,0,@5752,@6988 6988:O2|0,@5750 6989:O2|@1738,@6990 6990:O2|@6991,0 6991:O3|@21,69,@6992 6992:O4|@1738,-1,@6994,@6993 6993:O3|1,@694,@694 6994:O2|-1,@6995 6995:O2|-3,@6996 6996:O1|@6997 6997:C2,128|9e13e002f606201880a1001b8bd02018808a200132800004b8102004f8022000b92f2002840720018c21a0108b196010ba102003ae100006fa21bffc2d3f0379ac05a200ec25e000c425e008d025e004ee213ffcc4213ff8de213ff4901020019a013ffc4000005c88013ff4de012000353f0027b406a12c81c6a0048801200c|@7010,131071|60,4,@6998 100,5,@7000 112,4,@514 6998:C2,248|9e13e002c4036008b820a001ba222001811f401c32800005b82220019010200181c3e00601000000811f200036800004ee0360041080000ede213ffc808de00132800004b8102004f805e000b92f2002ac072001ba222001811f401c36800004de213ffc1080000a808de001ac100008113f0004900223d0f40620209fc6a00088013ffcae102001808de00122800004ac82201010800007b8222001bb3da002fa0dc01db92f6002ae072001b8222001b9172004ac0720018c21a00c8b19600cba10200290100006fa21bffcec222004ee222000ae1000088c21a0088b196008ba10200190100006fa21bffcee22200081c3e00601000000|@6999,114849|112,4,@224 6999:S28|4d6973632e756e657363617065537472696e67283129726472283129 7000:C2,420|9e13e002f606201880a1001b8bd02018c4037ffcb820a001ba222001811f401c32800005de213ffc9010200181c3e00601000000da213ff8fa036000fa213ff488013ff4d20120004000005e0100000080a2200132800005ec022000ae1020011080003680a5e001ec213ffcfa05a000fa213ff8d2013ff811000083900223d81b0000839a0360d8f40360009fc6a00088013ff880a2200122800015ea012004ea012004fa056004fa213ffcd0013ffcda012008f40360009fc6a00088013ffc80a2200132800005d0012000ae102001108000198801200c8801200cf606201880a1001b8bd0201830bfffd78c21a00c8b19600cba102002a8100006fa21bffce6056004e6252004e4012000e42520008c21a0088b196008ba102001ae100006fa21bffce825e000d0213ffc88013ffc8801200c80a5e00132800009e205e000113f037d9002231cf40620209fc6a0000100000090102001e205e000fa046000fa213ffcd0046004da0120047fffffa588013ffc8c21a00c8b19600cba102002a0100006fa21bffcd0242004de012000de24200090100010c201200c81c0600688012010|@7009,131071|72,5,@7001 120,4,I48 128,4,I24 320,4,@7007 7001:C2,1892|9e13e002f606201880a1001b8bd02018de213ffcd0213ff8d2213ff49a100009f40360009fc6a00088013ff480a2200132800015c40220008c21a00c8b19600cba10200284100006fa21bffcee012004ee20a0042d000083ac05a3d8ec20a0008c21a0088b196008ba10200190100006fa21bffcc4222000ea01200881c560068801200cee00a00080a5e0813a80000480a5e1f9108000069010200138800004901020011080000580a5e171ec01200881c5a0068801200c3280019b8c21a00cfa00a004fa213ffcd0013ffcda012000f40360009fc6a00088013ffc80a2200132800006ec02200090102001ec01200c81c5a00688012010ea05a00080a561853280001480a561898c21a00c8b19600cba102002a8100006fa21bffce605a004e6252004a410201de42520008c21a0088b196008ba10200190100006fa21bffce8222000e201200c81c46006880120103280001480a561d18c21a00c8b19600cba102002a8100006fa21bffce605a004e6252004a4102021e42520008c21a0088b196008ba10200190100006fa21bffce8222000e201200c81c46006880120103280001480a561b98c21a00c8b19600cba102002a8100006fa21bffce605a004e6252004a4102025e42520008c21a0088b196008ba10200190100006fa21bffce8222000e201200c81c46006880120103280001480a561d98c21a00c8b19600cba102002a8100006fa21bffce605a004e6252004a4102029e42520008c21a0088b196008ba10200190100006fa21bffce8222000e201200c81c46006880120103280001480a561998c21a00c8b19600cba102002a8100006fa21bffce605a004e6252004a410202de42520008c21a0088b196008ba10200190100006fa21bffce8222000e201200c81c46006880120103280001480a561c98c21a00c8b19600cba102002a8100006fa21bffce605a004e6252004a4102031e42520008c21a0088b196008ba10200190100006fa21bffce8222000e201200c81c46006880120103280001480a561718c21a00c8b19600cba102002a8100006fa21bffce605a004e6252004a4102035e42520008c21a0088b196008ba10200190100006fa21bffce8222000e201200c81c46006880120103280001480a560898c21a00c8b19600cba102002a8100006fa21bffce605a004e6252004a4102171e42520008c21a0088b196008ba10200190100006fa21bffce8222000e201200c81c46006880120103280001480a561798c21a00c8b19600cba102002a8100006fa21bffce605a004e6252004a4102089e42520008c21a0088b196008ba10200190100006fa21bffce8222000e201200c81c46006880120103280003f80a561d5d005a004da012004f40360009fc6a0000100000080a2200132800006e802200090102001e801200c81c5200688012010e6052000b824e001811f21002680002b90102001b824e001811f217c3480002790102001b824e001b91f2100a4072001811f200036800004b824a0011080000701000000811f23fc348000040100000010800009a2100012113f0027900220f8f40620209fc6a00001000000a2102001a21000128c21a00c8b19600cba102002a0100006fa21bffcde052004de242004e22420008c21a0088b196008ba10200190100006fa21bffce0222000c201200c81c0600688012010e401200c81c4a006880120103280002180a56025d6012004d405a0049210201190102001400000a70100000080a2200132800006e802200090102001e801200c81c52006880120108c21a00c8b19600cba102002a6100006fa21bffce4052004e424e004e2052000e224e0008c21a0088b196008ba10200190100006fa21bffce6222000e001200c81c42006880120102a80000780a5608180a560353880000480a5608110800006e805a00422800004e805a0041080004580a560c1e8213ffc90100014da012004f40360009fc6a00088013ffc80a2200132800005e6022000d001200010800015da012008e404e00080a4a0252a80000780a4a08180a4a0353880000480a4a08110800006e804e00422800004e804e00410800007d001200088012004f606201880a1001b8bd0201830bfffe3da012008f40360009fc6a0000100000080a2200132800006e202200090102001e201201081c4600688012014e004600080a42171228000068c21a00c90102001de01201081c3e006880120148b19600cba1020029e100006fa21bffcc2046004c223e0041b0000839a0363d8da23e0008c21a0088b196008ba10200190100006fa21bffcde222000d801201081c32006880120142a8000249010200180a560c93880002190102001d6012004d40120009210200d901020014000013c0100000080a2200132800006e802200090102001e801200c81c52006880120108c21a00c8b19600cba102002a6100006fa21bffce4052004e424e004e2052000e224e0008c21a0088b196008ba10200190100006fa21bffce6222000e001200c81c4200688012010e801200c81c52006880120108b19600cba102002ac100006fa21bffcea00a004ea25a004ee25a0008c21a0088b196008ba10200190100006fa21bffcec222000e801200881c520068801200c|@7006,131071|84,4,I48 1120,4,@511 1252,5,@7002 1624,4,I48 1708,5,@7004 7002:C2,1000|9e13e002f606201880a1001b8bd0201880a2600132800029de213ffcb8222001811f23fc24800005b82220019010200181c3e00601000000811f200036800004b822200110800007de213ffc811f23fc34800004de213ffc1080000984100008113f0027900220f8f40620209fc6a00088013ffc84102001841000088c21a00c8b19600cba10200296100006fa21bffcd422e004c422e0008c21a0088b196008ba10200190100006fa21bffcd622200081c3e00601000000d0213ff8d2213ff4d4213ff0d6213fec9010000a9a10000bf40360009fc6a00088013fec80a2200132800034c4022000c4012008b820a001811f3ffc26800004ee01200c1080000890102001b825e001811f23fc348000049010200110800005b825e001ee01201081c5e00688012014811f200036800004b825e0011080000701000000811f23fc348000040100000010800009ac100017113f0027900220f8f40620209fc6a00001000000ac102001ac1000178c21a00c8b19600cba102002aa100006fa21bffce8012004e8256004ec2560008c21a0088b196008ba10200190100006fa21bffcea222000e601201081c4e00688012014ee00a00080a5e0c12a80001d80a5e18580a5e0e53880001a80a5e185ec012008b825a001b91f2004aa072001e801200cb8252001ba10001cbb17401dbb17401dbb17401db917401da6072001ba25e001b917001da4072001b91f20c0a2072001d6012000d400a0049210001590100011de01201010bfff78880120142a80001f80a5e10580a5e1993880001c80a5e105ec012008b825a001b91f2004aa072001e801200cb8252001ba10001cbb17401dbb17401dbb17401db917401da6072001ba25e001b917001da4072001b91f2184a2072001b9172028a0072001d6012000d400a0049210001590100010de01201010bfff59880120142a80001fec01200880a5e1193880001cec012008ec012008b825a001b91f2004aa072001e801200cb8252001ba10001cbb17401dbb17401dbb17401db917401da6072001ba25e001b917001da4072001b91f2104a2072001b9172028a0072001d6012000d400a0049210001590100010de01201010bfff3a88012014b825a001811f3ffc26800004ea01200c1080000890102001b8256001811f23fc348000049010200110800005b8256001ea01201081c5600688012014811f200036800004b82560011080000701000000811f23fc348000040100000010800009a8100015113f0027900220f8f40620209fc6a00001000000a8102001a81000158c21a00c8b19600cba102002a6100006fa21bffce4012004e424e004e824e0008c21a0088b196008ba10200190100006fa21bffce6222000e201201081c4600688012014|@7003,131071|96,4,@511 336,4,@511 904,4,@511 7003:S16|436861722e7265616448657827283429 7004:C2,572|9e13e002f606201880a1001b8bd0201880a2600132800029de213ffcb8222001811f23fc24800005b82220019010200181c3e00601000000811f200036800004b822200110800007de213ffc811f23fc34800004de213ffc1080000984100008113f0027900220f8f40620209fc6a00088013ffc84102001841000088c21a00c8b19600cba10200296100006fa21bffcd422e004c422e0008c21a0088b196008ba10200190100006fa21bffcd622200081c3e00601000000d0213ff8d2213ff4d4213ff0d6213fec9010000a9a10000bf40360009fc6a00088013fec80a2200132800034c4022000c401200cb820a001811f23fc24800004ee0120081080000890102001b825e001811f2000348000049010200110800005b820a001ee01201081c5e00688012014811f200036800004b820a0011080000701000000811f23fc348000040100000010800009ac100002113f0027900220f8f40620209fc6a00001000000ac102001ac1000028c21a00c8b19600cba102002aa100006fa21bffce8012004e8256004ec2560008c21a0088b196008ba10200190100006fa21bffcea222000e601201081c4e00688012014ee00a00080a5e0c12a80001e90102001b825e001811f20e43480001a90102001ec012008b825a001b91f2004aa072001e801200cb8252001ba10001cbb17401dbb17401dbb17401cb917401da6072001ba25e001b917001da4072001b91f20c0a2072001d6012000d400a0049210001590100011de01201010bfff7788012014ec01201081c5a00688012014|@7005,131071|96,4,@511 336,4,@511 7005:S15|436861722e72656164446563283429 7006:S16|436861722e7363616e42617365283229 7007:O3|8,@6985,@7008 7008:S23|496e76616c696420737472696e6720636f6e7374616e74 7009:S34|4d6973632e756e657363617065537472696e67283129636f6e764368617273283129 7010:S22|4d6973632e756e657363617065537472696e67283129 7011:O2|@7013,@7012 7012:O2|@7014,0 7013:S15|636f6d70696c657256657273696f6e 7014:O3|@21,69,@7015 7015:O4|@7013,-1,@7016,@694 7016:O2|-1,@7017 7017:O2|-3,@7018 7018:S11|352e322052656c65617365 7019:O2|@7021,@7020 7020:O2|@7022,0 7021:S11|66696c654e616d65546167 7022:O3|@21,69,@7023 7023:O4|@7021,-1,@7025,@7024 7024:O4|-3,@7027,@6516,@6514 7025:O2|-1,@7026 7026:O2|-3,@5391 7027:O2|@694,0 7028:O2|@7030,@7029 7029:O2|@7031,0 7030:S8|7072696e7456616c 7031:O3|@21,69,@7032 7032:O4|@7030,-1,@7034,@7033 7033:O3|1,@7042,@766 7034:O2|-1,@7035 7035:O2|-3,@7036 7036:O1|@7037 7037:C2,404|9e13e002f606201880a1001b8bd02018d0213ffcd0213ff8d0213ff4d0213ff0d0213fecd0213fe8d0213fe48c21a00c88013fe48b19600cba10200284100006fa21bffc2f3f037eae05e2ccee20a000ee02200cee20a004ac012000c425a000840120002d3f02d8ac05a224ec20a004840120002d3f02d8ac05a280ec20a00884012000ee20a00cac012000053f02d88400a2b4c425a010ac012000053f02d88400a2e8c425a014ac012000053f037e8400a368c425a0188c21a0208b196020ba102007ac100006fa21bffcc4012000c425a000ea012004ea25a004e8012008e825a008e601200ce625a00ce4012010e425a010e2012014e225a014c4012018c425a018ea022000a810000fe6022004e4022008d00560047fffbc650100000080a220012280001a90102001d00560087ffd97620100000080a220012280001290102001d00560087ffd977101000000a2100016e005600c7fff4f2301000000e42120189610001194100013921000109e100014353f02ccb406a19c81c6a0048801201881c520068801201c81c520068801201c|@7041,131071|68,4,@7038 100,4,@5583 116,4,@5586 140,4,@5588 156,4,@5590 172,4,@7039 280,5,@6123 304,5,@2733 328,5,@2735 344,5,@5528 372,4,@5524 7038:C2,128|9e13e002f606201880a1001b8bd02018de213ffcda213ff8c402200088013ff8b820a001811f200034800006ee01200090102001de01200481c3e00688012008c4213ffc90102081da05e004f40360009fc6a00088013ffcec012000b825a001b91f2004aa0720018410001588012004f606201880a1001b8bd0201830bfffe9|@5582,131071| 7039:O1|@7040 7040:C2,16|9e13e0029010200181c3e00601000000|@5585,129| 7041:S41|494e495449414c4953455f28292e696e6974476c6f62616c456e762831297072696e7456616c283129 7042:O4|-2,1,@7043,0 7043:O2|@6572,@7044 7044:O2|@6346,@7045 7045:O2|@6484,@6941 7046:O2|@7048,@7047 7047:O2|@7049,0 7048:S19|6572726f724d65737361676550726f63546167 7049:O3|@21,69,@7050 7050:O4|@7048,-1,@7052,@7051 7051:O4|-3,@7054,@6516,@6514 7052:O2|-1,@7053 7053:O2|-3,@1102 7054:O2|@7055,0 7055:O3|1,@7056,@766 7056:O4|-2,1,@7057,0 7057:O2|@779,@7058 7058:O2|@6339,@7059 7059:O2|@6919,0 7060:O2|@7062,@7061 7061:O2|@7063,0 7062:S16|7072696e74446570746846756e546167 7063:O3|@21,69,@7064 7064:O4|@7062,-1,@7065,@6949 7065:O2|-1,@7066 7066:O2|-3,@5471 7067:O2|@7069,@7068 7068:O2|@7070,0 7069:S15|7072696e74456e7669726f6e546167 7070:O3|@21,69,@7071 7071:O4|@7069,-1,@7073,@7072 7072:O4|-3,@7078,@6516,@6514 7073:O2|-1,@7074 7074:O2|-3,@7075 7075:O3|@5639,@7076,@5637 7076:O2|@7077,@122 7077:C2,56|9e13e002841000088c21a0108b196010ba10200390100006fa21bffcc422200884102115c4222004c4036004c422200081c3e00601000000|@1106,65697| 7078:O2|@752,0 7079:O2|@7081,@7080 7080:O2|@7082,0 7081:S9|556e6976657273616c 7082:O3|@39,69,@7083 7083:O3|@7081,@734,@7084 7084:O4|@7085,I48,0,0 7085:O4|-1,@155,@156,@154 7086:O2|@6272,@7135 7087:O2|@6516,@7088 7088:O2|@7089,0 7089:O3|@34,69,@6517 7090:O2|@7092,@7091 7091:O2|@7093,0 7092:S10|74616750726f6a656374 7093:O3|@21,69,@7094 7094:O4|@7092,-1,@7096,@7095 7095:O3|1,@7102,@7101 7096:O2|-1,@7097 7097:O2|-3,@7098 7098:O1|@7099 7099:C2,16|9e13e002d002200881c3e00601000000|@7100,129| 7100:S29|556e6976657273616c2e74616750726f6a6563742d2370726f6a656374 7101:O3|1,@6270,@7104 7102:O4|-3,@7103,@6516,@6514 7103:O2|@7104,0 7104:O3|3,@158,79992 7105:O2|@7107,@7106 7106:O2|@7108,0 7107:S9|746167496e6a656374 7108:O3|@21,69,@7109 7109:O4|@7107,-1,@7111,@7110 7110:O3|1,@7117,@7116 7111:O2|-1,@7112 7112:O2|-3,@7113 7113:O1|@7114 7114:C2,16|9e13e002d002200481c3e00601000000|@7115,129| 7115:S27|556e6976657273616c2e746167496e6a6563742d23696e6a656374 7116:O3|1,@7119,@6270 7117:O4|-3,@7118,@6516,@6514 7118:O2|@7119,0 7119:O3|3,@159,79992 7120:O2|@7122,@7121 7121:O2|@7123,0 7122:S5|7461674973 7123:O3|@21,69,@7124 7124:O4|@7122,-1,@7126,@7125 7125:O3|1,@7132,@7131 7126:O2|-1,@7127 7127:O2|-3,@7128 7128:O1|@7129 7129:C2,16|9e13e002d002200081c3e00601000000|@7130,129| 7130:S19|556e6976657273616c2e74616749732d236973 7131:O3|1,@6270,@360 7132:O4|-3,@7133,@6516,@6514 7133:O2|@7134,0 7134:O3|3,@160,79992 7135:O2|@7136,0 7136:O3|@34,69,@6273 7137:O2|@1741,@7138 7138:O2|@7139,0 7139:O3|@21,69,@7140 7140:O4|@1741,-1,@7142,@7141 7141:O3|1,@694,@695 7142:O2|-1,@7143 7143:O2|-3,@7144 7144:O1|@7145 7145:C2,340|9e13e002f606201880a1001b8bd02018808a200132800004b8102004f8022000b92f200284072001811f200c26800014de213ffcde213ffcd0213ff894102009921020017ffce14788013ff8133f00499202601c1b0000839a0360d8f40360009fc6a0000100000080a2200122800007ee0120001080001eae102005d0213ff888013ff8ee012000808de00132800004b8102004f805e000b92f2002ac072001811f201026800012ae103ffd9410200d92102001901000177ffce12a01000000133f0381920260101b0000839a0360d8f40360009fc6a0000100000080a2200132800003ae102005ae103ffd8c21a00c8b19600cba102002aa100006fa21bffc293f0381a805201ce8256000ee25600492100015d00120007ffd11c10100000080a2200132800009d0022000113f0381900220b8f40620209fc6a0000100000090102001d0022000e601200481c4e00688012008|@7151,131071|68,5,@1585 76,4,@1294 84,4,I24 184,5,@1585 192,4,@7146 200,4,I24 256,4,@7147 280,5,@1879 300,4,@7149 7146:S3|7e3078 7147:C2,60|9e13e002841000088c21a0108b196010ba10200390100006fa21bffc2f3f0381ae05e074ee222000c4222008c4036004c422200481c3e00601000000|@1878,98465|28,4,@7148 7148:C2,40|9e13e002f606201880a1001b8bd02018d4036004d2036008353f0090b406a21881c6a00401000000|@1877,131071|24,4,@1869 7149:O3|8,@6985,@7150 7150:S24|496e76616c696420696e746567657220636f6e7374616e74 7151:S44|494e495449414c4953455f28292e696e6974476c6f62616c456e76283129696e744f66537472696e67283129 7152:O2|@7154,@7153 7153:O2|@7155,0 7154:S12|70726f66696c696e67546167 7155:O3|@21,69,@7156 7156:O4|@7154,-1,@7157,@6511 7157:O2|-1,@7158 7158:O2|-3,@1244 7159:O2|@7161,@7160 7160:O2|@7162,0 7161:S16|7472616365436f6d70696c6572546167 7162:O3|@21,69,@7163 7163:O4|@7161,-1,@7164,@6527 7164:O2|-1,@7165 7165:O2|-3,@1180 7166:O2|@7168,0 7167:S10|646973706c6179466978 7168:O3|@21,69,@7169 7169:O4|@7167,-1,@7171,@7170 7170:O3|1,@7178,@766 7171:O2|-1,@7172 7172:O2|-3,@7173 7173:O1|@7174 7174:C2,40|9e13e002f606201880a1001b8bd02018d2022004d0022000353f0381b406a2a881c6a00401000000|@7177,131071|24,4,@7175 7175:C2,272|9e13e002f606201880a1001b8bd02018d0213ffcd0213ff8d0213ff4d0213ff0d0213fecd0213fe8d0213fe4de213fe0fa022000fa213fdcfa022004fa213fd894013fe4901021357ffc948888013fd88c21a0208b196020ba10200784100006fa21bffcee01200cee20a000ec012010ec20a004ea012014ea20a008e8012018e820a00ce601201ce620a010e4012020e420a014e2012024e220a018c4213ffc113f00259002227c9a100011f40360009fc6a00088013ffcd401200092102f9dd00120047ffd4c9f01000000113f001f9002225cda012010f40360009fc6a00001000000d0012008da01201cf40360009fc6a0000100000090102001da012018de01200cf403600081c6a0048801202c|@7176,131071|72,5,@428 160,4,@499 196,5,@2228 204,4,@485 7176:S43|494e495449414c4953455f28292e696e6974476c6f62616c456e76283129646973706c6179466978283229 7177:S43|494e495449414c4953455f28292e696e6974476c6f62616c456e76283129646973706c6179466978283129 7178:O4|-2,1,@7179,0 7179:O2|@7181,@7180 7180:O2|@7182,0 7181:O2|49,@776 7182:O2|50,@6310 7183:O2|47,@7184 7184:O2|@7185,0 7185:O3|@21,69,@7186 7186:O4|47,-1,@359,@6385 7187:O2|@7189,@7188 7188:O2|@7190,0 7189:S3|646976 7190:O3|@21,69,@7191 7191:O4|@7189,-1,@359,@6385 7192:O2|@7194,@7193 7193:O2|@7195,0 7194:S6|766563746f72 7195:O3|@34,69,@7196 7196:O6|@7194,1,0,@7198,@700,@7197 7197:O2|-1,@162 7198:O2|@7199,0 7199:O3|3,@161,79992 7200:O2|60,@7201 7201:O2|@7202,0 7202:O3|@21,69,@7203 7203:O4|60,-1,@359,@358 7204:O2|62,@7205 7205:O2|@7206,0 7206:O3|@21,69,@7207 7207:O4|62,-1,@359,@358 7208:O2|@7210,@7209 7209:O2|@7211,0 7210:S7|52756e43616c6c 7211:O3|@39,69,@7212 7212:O3|@7210,@734,@7213 7213:O4|@7214,I48,0,0 7214:O4|-1,@164,@165,@163 7215:O2|@347,20 7216:O2|@7427,@7426 7217:O2|@7219,@7218 7218:O2|@7220,0 7219:S14|52756e5f657863657074696f6e31 7220:O3|@107,69,@7221 7221:O4|@7223,@7219,@7238,@7222 7222:O4|@7241,I48,1,0 7223:O3|I48,@7225,@7224 7224:O4|@7226,I48,1,0 7225:O3|1,@168,@167 7226:O3|0,@736,@7227 7227:O10|0,0,0,0,0,0,0,@7229,@7228,0 7228:O2|@7235,@7234 7229:O2|@7231,@7230 7230:O2|@7232,0 7231:S7|65785f6964656e 7232:O3|@21,69,@7233 7233:O4|@7231,-1,@499,@695 7234:O2|@7236,0 7235:S7|65785f74797065 7236:O3|@34,69,@7237 7237:O6|@7235,0,0,0,@683,@499 7238:O2|-1,@7239 7239:O2|-7,@7240 7240:O8|@623,@7219,0,0,1,0,0,0 7241:O3|0,@736,@7242 7242:O10|0,@7243,0,0,0,0,0,0,0,0 7243:O2|@7245,@7244 7244:O2|@7246,0 7245:S2|6578 7246:O3|@21,69,@7247 7247:O4|@7245,0,@499,@7248 7248:O4|-3,0,@7235,@7249 7249:O2|0,@7237 7250:O2|@7252,@7251 7251:O2|@7253,0 7252:S10|756e7361666543617374 7253:O3|@21,69,@7254 7254:O4|@7252,-1,@7256,@7255 7255:O3|1,@7261,@7260 7256:O2|-1,@7257 7257:O2|-7,@7258 7258:O8|@623,@7259,1,0,1,0,0,0 7259:S13|756e7361666543617374283129 7260:O3|3,@170,79992 7261:O3|3,@169,79992 7262:O2|@7264,@7263 7263:O2|@7265,0 7264:S9|72756e5f63616c6c30 7265:O3|@21,69,@7266 7266:O4|@7264,-1,@7268,@7267 7267:O3|1,@695,@7282 7268:O2|-1,@7269 7269:O2|-7,@7270 7270:O8|@7271,@7264,1,0,1,0,0,0 7271:O2|9,@7272 7272:O2|@7274,@7273 7273:O2|@7277,0 7274:O4|-4,1,@7275,0 7275:O4|4,@621,@7276,1 7276:O2|-3,I189 7277:O2|-7,@7278 7278:O8|@7280,@7279,2,0,1,0,0,0 7279:S12|72756e5f63616c6c30283129 7280:O4|4,0,@7281,0 7281:O5|-5,1,1,1,0 7282:O3|1,@766,@7283 7283:O3|3,@171,79992 7284:O2|@7286,@7285 7285:O2|@7287,0 7286:S9|72756e5f63616c6c31 7287:O3|@21,69,@7288 7288:O4|@7286,-1,@7290,@7289 7289:O3|1,@695,@7294 7290:O2|-1,@7291 7291:O2|-7,@7292 7292:O8|@7275,@7293,1,0,1,0,0,0 7293:S12|72756e5f63616c6c31283129 7294:O3|1,@7283,@7295 7295:O3|3,@172,79992 7296:O2|@7298,@7297 7297:O2|@7299,0 7298:S9|72756e5f63616c6c32 7299:O3|@21,69,@7300 7300:O4|@7298,-1,@7302,@7301 7301:O3|1,@695,@7312 7302:O2|-1,@7303 7303:O2|-7,@7304 7304:O8|@7305,@7298,1,0,1,0,0,0 7305:O2|9,@7306 7306:O2|@7274,@7307 7307:O2|@7308,0 7308:O2|-7,@7309 7309:O8|@7311,@7310,2,0,1,0,0,0 7310:S12|72756e5f63616c6c32283129 7311:O4|4,@5741,@7281,0 7312:O3|1,@7314,@7313 7313:O3|3,@173,79992 7314:O4|-2,1,@7315,0 7315:O2|@7317,@7316 7316:O2|@7318,0 7317:O2|49,@7283 7318:O2|50,@7295 7319:O2|@7321,@7320 7320:O2|@7322,0 7321:S9|72756e5f63616c6c34 7322:O3|@21,69,@7323 7323:O4|@7321,-1,@7325,@7324 7324:O3|1,@695,@7341 7325:O2|-1,@7326 7326:O2|-7,@7327 7327:O8|@7328,@7321,1,0,1,0,0,0 7328:O2|9,@7329 7329:O2|@7274,@7330 7330:O2|@7331,0 7331:O2|-7,@7332 7332:O8|@7334,@7333,2,0,1,0,0,0 7333:S12|72756e5f63616c6c34283129 7334:O4|4,@7335,@7281,0 7335:O2|@1032,@7336 7336:O2|@5743,@7337 7337:O2|@7339,@7338 7338:O2|@7340,0 7339:O3|6,@623,2 7340:O3|6,@623,3 7341:O3|1,@7343,@7342 7342:O3|3,@175,79992 7343:O4|-2,1,@7344,0 7344:O2|@7317,@7345 7345:O2|@7318,@7346 7346:O2|@7348,@7347 7347:O2|@7349,0 7348:O2|51,@7313 7349:O2|52,@7350 7350:O3|3,@174,79992 7351:O2|@7353,@7352 7352:O2|@7354,0 7353:S9|72756e5f63616c6c33 7354:O3|@21,69,@7355 7355:O4|@7353,-1,@7357,@7356 7356:O3|1,@695,@7370 7357:O2|-1,@7358 7358:O2|-7,@7359 7359:O8|@7360,@7353,1,0,1,0,0,0 7360:O2|9,@7361 7361:O2|@7274,@7362 7362:O2|@7363,0 7363:O2|-7,@7364 7364:O8|@7366,@7365,2,0,1,0,0,0 7365:S12|72756e5f63616c6c33283129 7366:O4|4,@7367,@7281,0 7367:O2|@1032,@7368 7368:O2|@5743,@7369 7369:O2|@7339,0 7370:O3|1,@7371,@7350 7371:O4|-2,1,@7372,0 7372:O2|@7317,@7373 7373:O2|@7318,@7374 7374:O2|@7348,0 7375:O2|@7377,@7376 7376:O2|@7378,0 7377:S9|72756e5f63616c6c35 7378:O3|@21,69,@7379 7379:O4|@7377,-1,@7381,@7380 7380:O3|1,@695,@7397 7381:O2|-1,@7382 7382:O2|-7,@7383 7383:O8|@7384,@7377,1,0,1,0,0,0 7384:O2|9,@7385 7385:O2|@7274,@7386 7386:O2|@7387,0 7387:O2|-7,@7388 7388:O8|@7390,@7389,2,0,1,0,0,0 7389:S12|72756e5f63616c6c35283129 7390:O4|4,@7391,@7281,0 7391:O2|@1032,@7392 7392:O2|@5743,@7393 7393:O2|@7339,@7394 7394:O2|@7340,@7395 7395:O2|@7396,0 7396:O3|6,@623,4 7397:O3|1,@7399,@7398 7398:O3|3,@176,79992 7399:O4|-2,1,@7400,0 7400:O2|@7317,@7401 7401:O2|@7318,@7402 7402:O2|@7348,@7403 7403:O2|@7349,@7404 7404:O2|@7405,0 7405:O2|53,@7342 7406:O2|@7408,@7407 7407:O2|@7409,0 7408:S14|52756e5f657863657074696f6e30 7409:O3|@107,69,@7410 7410:O4|@7412,@7408,@7417,@7411 7411:O4|@7420,I48,0,0 7412:O3|I48,@7414,@7413 7413:O4|@7415,I48,0,0 7414:O3|1,@178,@177 7415:O3|0,@736,@7416 7416:O10|0,0,0,0,0,0,0,0,@7229,0 7417:O2|-1,@7418 7418:O2|-7,@7419 7419:O8|@623,@7408,0,0,1,0,0,0 7420:O3|0,@736,@7421 7421:O10|0,@7422,0,0,0,0,0,0,0,0 7422:O2|@7245,@7423 7423:O2|@7424,0 7424:O3|@21,69,@7425 7425:O4|@7245,0,@499,@375 7426:O2|@7428,0 7427:S11|6164644f7665726c6f6164 7428:O3|@21,69,@7429 7429:O4|@7427,-1,@3748,@7430 7430:O3|1,@7431,@6310 7431:O3|1,@7433,@7432 7432:O3|3,@180,79992 7433:O3|3,@179,79992 7434:O2|@851,@7435 7435:O2|@7436,0 7436:O3|@21,69,@849 7437:O2|@2458,@7438 7438:O2|@7439,0 7439:O3|@34,69,@2456 7440:O2|@2809,@7441 7441:O2|@7443,@7442 7442:O2|@7444,0 7443:O3|@34,69,@3190 7444:O3|@21,69,@3197 7445:O2|@768,@7446 7446:O2|@7447,0 7447:O3|@34,69,@769 7448:O2|61,@7449 7449:O2|@7450,0 7450:O3|@21,69,@7451 7451:O4|61,-1,@7453,@7452 7452:O3|1,@7454,@360 7453:O2|-2,-1 7454:O4|-2,1,@7455,0 7455:O2|@7457,@7456 7456:O2|@7459,0 7457:O2|49,@7458 7458:O3|3,@181,79996 7459:O2|50,@7458 7460:O2|@5752,@7461 7461:O2|@7462,0 7462:O3|@34,69,@5750 7463:O2|@798,@7464 7464:O2|@7465,0 7465:O3|@21,69,@796 7466:O2|@1006,@7467 7467:O2|@7468,0 7468:O3|@21,69,@1004 7469:O2|@703,@7470 7470:O2|@7471,0 7471:O3|@34,69,@704 7472:O2|@369,@7473 7473:O2|@7474,0 7474:O3|@34,69,@370 7475:O2|@7476,0 7476:O3|@34,69,@698 7477:C2,900|9e13e0028c21a00c8b19600cba10200284100006fa21bffc2f3f0371ae05e3a0ee20a000d020a0048c21a00c8b19600cba102002ae100006fa21bffc2d3f0372ac05a138ec25e000d025e0048c21a00c8b19600cba102002ac100006fa21bffc2b3f0372aa0562e0ea25a000d025a0048c21a00c8b19600cba102002aa100006fa21bffc293f0372a805206ce8256000d02560048c21a00c8b19600cba102002a8100006fa21bffc273f0373a604e148e6252000d02520048c21a00c8b19600cba102002a6100006fa21bffc253f0373a404a088e424e000d024e0048c21a00c8b19600cba102002a4100006fa21bffc233f0370a2046298e224a000d024a0048c21a00c8b19600cba102002a2100006fa21bffc213f0371a0042050e0246000d02460048c21a00c8b19600cba102002a0100006fa21bffc033f0371820062c4c2242000d02420048c21a00c8b19600cba10200282100006fa21bffc1b3f03729a0363acda206000d02060048c21a00c8b19600cba1020029a100006fa21bffc193f037098032374d8236000d02360048c21a00c8b19600cba10200298100006fa21bffc173f03729602e204d6232000d02320048c21a00c8b19600cba10200296100006fa21bffc153f036e9402a2a0d422e000d022e0048c21a00c8b19600cba10200294100006fa21bffc133f036f920261d0d222a000d022a0048c21a00c8b19600cba10200292100006fa21bffcde213ffcd0213ff8c4213ff4ee213ff0ec213fecea213fe8e8213fe4e6213fe0e4213fdce2213fd8e0213fd4c2213fd0da213fccd8213fc8d6213fc4d4213fc0d2213fbc113f036f90022368d0226000d0013ff8d02260048c21a00c88013fbc8b19600cba10200290100006fa21bffc053f036f8400a038c4222000c401203cc42220048c21a00c8b19600cba10200284100006fa21bffc2f3f0371ae05e12cee20a000ee01203cee20a0048c21a00c8b19600cba102002ae100006fa21bffc2d3f0370ac05a100ec25e000ec01203cec25e0048c21a04c8b19604cba102012ac100006fa21bffce825a044e625a040c225a03ce8012030e825a038d825a034e6012034e625a030ea25a02cc2012038c225a028e025a024c425a020e225a01cda25a018e425a014ee25a010d225a00cd425a008d025a004d625a0008c21a0108b196010ba1020039a100006fa21bffc193f0361980321d0d8236000ec236008d601203cd62360049010000d81c3e00688012044|@7478,131071|24,4,@6817 60,4,@6823 96,4,@6829 132,4,@6820 168,4,@6837 204,4,@6835 240,4,@6800 276,4,@6806 312,4,@6814 348,4,@6832 384,4,@6803 420,4,@6826 456,4,@6775 492,4,@6785 596,4,@6790 640,4,@6780 680,4,@6809 720,4,@6795 864,4,@6702 7478:S21|4d414b455f28292e757365496e746f456e76283129 7479:S6|69742d283129 0:MO1|@189 1:MO1|0 2:MO1|@216 3:MO1|0 4:MO1|0 5:MO1|@257 6:MO1|1209 7:MO1|1208 8:MB4096|282a0a09436f707972696768742028632920323030362d372020446176696420432e204a2e204d617474686577730a0a0954686973206c696272617279206973206672656520736f6674776172653b20796f752063616e2072656469737472696275746520697420616e642f6f720a096d6f6469667920697420756e64657220746865207465726d73206f662074686520474e55204c65737365722047656e6572616c205075626c69630a094c6963656e7365206173207075626c697368656420627920746865204672656520536f66747761726520466f756e646174696f6e3b206569746865720a0976657273696f6e20322e31206f6620746865204c6963656e73652c206f722028617420796f7572206f7074696f6e2920616e79206c617465722076657273696f6e2e0a090a0954686973206c69627261727920697320646973747269627574656420696e2074686520686f706520746861742069742077696c6c2062652075736566756c2c0a0962757420574954484f555420414e592057415252414e54593b20776974686f7574206576656e2074686520696d706c6965642077617272616e7479206f660a094d45524348414e544142494c495459206f72204649544e45535320464f52204120504152544943554c415220505552504f53452e20205365652074686520474e550a094c65737365722047656e6572616c205075626c6963204c6963656e736520666f72206d6f72652064657461696c732e0a090a09596f752073686f756c642068617665207265636569766564206120636f7079206f662074686520474e55204c65737365722047656e6572616c205075626c69630a094c6963656e736520616c6f6e6720776974682074686973206c6962726172793b206966206e6f742c20777269746520746f20746865204672656520536f6674776172650a09466f756e646174696f6e2c20496e632e2c203531204672616e6b6c696e2053742c20466966746820466c6f6f722c20426f73746f6e2c204d41202030323131302d3133303120205553410a2a290a0a282a20436f6d70696c65722074686520636f6d70696c657220616e64206578706f7274206974206173206120706f727461626c652066696c652e20205468652072657374206f66207468650a202020626f6f7473747261702070726f63657373206973207468656e20646f6e65207768656e2074686520706f727461626c652066696c6520697320696d706f727465642e202a290a0a506f6c794d4c2e7072696e745f646570746820303b0a0a506f6c794d4c2e6d616b6520226d6c736f757263652f4d4c436f6d70696c65722f426f6f74223b0a506f6c794d4c2e6d616b6520226d6c736f757263652f4d4c436f6d70696c6572223b0a0a506f6c794d4c2e7368617265436f6d6d6f6e44617461204d4c436f6d70696c65722e7368656c6c3b0a0a506f6c794d4c2e6578706f7274506f727461626c652822706f6c7974656d70222c0a20202020666e202829203d3e20284d4c436f6d70696c65722e7368656c6c28293b204f532e50726f636573732e65786974204f532e50726f636573732e73756363657373292068616e646c65205f203d3e204f532e50726f636573732e65786974204f532e50726f636573732e6661696c757265293b0a20202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020 9:MO1|@267 10:MO1|1 11:MO1|0 12:MO1|0 13:MO1|-1 14:MB4096|23206561746564207369676e6174757265204d4c436f6d70696c65720a73696f6e0a790a730a0a6d706f72740a20202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020 15:MO1|0 16:MO1|0 17:MO1|@20 18:MO1|@346 19:MO1|38 20:MO81|80,0,0,0,0,0,0,0,@353,0,@669,@674,@677,0,@685,@706,0,0,0,@719,@725,0,@728,0,0,0,@6380,@6386,0,0,0,0,0,0,@6389,0,@6402,0,0,0,0,@6405,@6408,@6412,@6415,@6419,@6423,@6427,@7183,0,0,0,0,@7187,@7192,@7200,@7204,@7208,@7434,@7437,@7440,@7445,@7448,@7460,0,@7463,0,0,0,0,0,0,0,0,0,0,0,@7466,@7469,@7472,@352 21:MO1|0 22:MO1|@366 23:MO1|@373 24:MO1|0 25:MO1|@298 26:MO1|0 27:MO1|0 28:MO1|0 29:MO1|0 30:MO1|0 31:MO1|0 32:MO1|0 33:MO1|0 34:MO1|0 35:MO1|0 36:MO1|0 37:MO1|0 38:MO1|@375 39:MO1|0 40:MO1|@43 41:MO1|@736 42:MO1|7 43:MO11|10,@739,@1079,0,0,@1087,@6295,0,@6312,@6320,@738 44:MO1|@375 45:MO1|@758 46:MO1|0 47:MO1|@684 48:MO1|0 49:MO1|@375 50:MO1|@793 51:MO1|0 52:MO1|0 53:MO1|0 54:MO1|0 55:MO1|0 56:MO1|0 57:MO1|0 58:MO1|@684 59:MO1|0 60:MO1|@684 61:MO1|0 62:MO1|@684 63:MO1|0 64:MO1|@684 65:MO1|0 66:MO1|@684 67:MO1|0 68:MO1|@375 69:MO1|@979 70:MO1|0 71:MO1|0 72:MO1|0 73:MO1|0 74:MO1|0 75:MO1|0 76:MO1|0 77:MO1|0 78:MO1|@375 79:MO1|0 80:MO1|0 81:MO1|0 82:MO1|0 83:MO1|0 84:MO1|0 85:MO1|0 86:MO1|0 87:MO1|0 88:MO1|0 89:MO1|0 90:MO1|0 91:MO1|0 92:MO1|0 93:MO1|0 94:MO1|0 95:MO1|0 96:MO1|0 97:MO1|0 98:MO1|0 99:MO1|@102 100:MO1|@1326 101:MO1|49 102:MO273|272,0,0,@1328,@1330,0,0,0,0,0,@1332,0,0,@1334,0,0,0,0,0,0,@1336,0,0,@1338,0,0,0,0,@1340,0,0,0,0,0,0,0,@1342,0,0,0,0,0,0,@1343,0,0,0,0,0,0,0,@1344,0,0,@1346,@1348,@1350,@1352,@1354,@1355,@1357,@1359,@1360,0,@1362,0,0,@1364,0,0,0,0,0,@1366,0,0,0,@1368,0,0,@1370,0,0,0,0,0,0,@1372,0,0,0,0,0,@1374,0,0,0,@1376,0,0,0,0,0,@1378,0,@1380,@1382,0,0,@1384,0,0,0,@1386,0,0,0,0,0,0,0,0,0,0,0,@1388,0,0,0,0,0,0,0,0,0,0,0,0,0,0,@1389,0,0,0,@1391,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,@1393,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,@1395,0,0,@1397,0,0,0,0,0,0,0,0,0,0,0,0,0,0,@1399,0,0,0,@1401,0,@1403,0,0,0,0,0,0,0,0,0,0,@1405,0,0,@1407,0,0,0,0,0,0,0,0,@1409,0,0,0,0,0,0,0,0,0,0,@1411,0,0,0,0,@1413,0,0,0,0,0,@1415,0,@1417,0,0,0,0,0,0,0,@1327,0,0,0,0,0,0,0 103:MO1|0 104:MO1|0 105:MO1|@366 106:MO1|0 107:MO1|0 108:MO1|0 109:MO1|0 110:MO1|0 111:MO1|0 112:MO1|@375 113:MO1|@3195 114:MO1|0 115:MO1|0 116:MO1|0 117:MO1|0 118:MO1|@375 119:MO1|0 120:MO1|0 121:MO1|0 122:MO1|0 123:MO1|0 124:MO1|0 125:MO1|0 126:MO1|32 127:MO1|I48 128:MO1|57 129:MO1|0 130:MO1|68 131:MO1|@684 132:MO1|0 133:MO1|@375 134:MO1|@375 135:MO1|@375 136:MO1|@375 137:MO1|@140 138:MO1|@736 139:MO1|7 140:MO11|10,@6360,@6363,@6366,0,0,0,@6369,@6372,@6375,@6359 141:MO1|@375 142:MO1|@145 143:MO1|@346 144:MO1|38 145:MO81|80,0,@6435,@6488,0,@6506,0,0,@6522,@6531,@6538,0,0,@6545,0,0,@6552,0,@6559,@6573,0,0,0,@6582,@6589,0,0,@6596,@6603,0,0,@6693,@6839,0,@6846,0,@6853,@6860,0,0,@6873,@6887,@6901,0,0,@6925,@6944,0,0,@6954,0,@6961,@6989,0,0,0,0,0,@7011,0,@7019,@7028,@7046,0,@7060,0,@7067,@7079,@7137,@7152,0,0,0,0,0,@7159,0,0,@6434,0,0 146:MO1|@375 147:MO1|@684 148:MO1|0 149:MO1|0 150:MO1|@153 151:MO1|@736 152:MO1|1 153:MO11|10,0,0,0,0,0,0,0,0,@6867,0 154:MO1|@157 155:MO1|@736 156:MO1|5 157:MO11|10,0,0,@7087,0,@7090,@7105,@7120,0,0,@7086 158:MO1|@375 159:MO1|@375 160:MO1|@375 161:MO1|@375 162:MO1|0 163:MO1|@166 164:MO1|@7215 165:MO1|10 166:MO21|20,0,0,@7217,@7250,0,0,0,0,0,@7262,@7284,@7296,@7319,@7351,@7375,@7406,0,0,0,@7216 167:MO1|0 168:MO1|0 169:MO1|@375 170:MO1|@375 171:MO1|@375 172:MO1|@375 173:MO1|@375 174:MO1|@375 175:MO1|@375 176:MO1|@375 177:MO1|0 178:MO1|0 179:MO1|@375 180:MO1|@375 181:MO1|@375 7480:MVO1|1 7481:MVO1|0 7482:MVO1|1 7483:MVO1|1 7484:MVO1|1 7485:MVO1|1 7486:MVO1|1 7487:MVO1|1 7488:MVO1|1 polyml.5.2.1/imports/polymlx86_64.txt0000644000175000017500000702303511020453522016431 0ustar daviddavidObjects 7544 Root 0 0:O3|@2,@7353,@1 1:O1|@161 2:C2,248|90909090909090483b65187303ff5548488b42084c8b3048ff72104c89f048ba68c1ecacaa2a0000ff1248b80100000000000000488b1424ff1248ff750849bdbac0ecacaa2a000049556a014889650848bb010000000000000048b8270000000000000048ba30386000000000009090ff124989c448ff742410488f4508eb20909048b8010000000000000048baf0126000000000009090ff124989c450505048ff750849bb0ac1ecacaa2a000049536a014889650848b801000000000000004c89e290ff1248ff742410488f4508eb04905050504883c430483b65187303ff5548e953ffffff48b801000000000000004883c438c39090|@6,8191|32,0,@3 44,0,0 64,0,$2+130 82,0,0 92,0,19 102,0,I150 132,0,0 142,0,I1 166,0,$2+210 184,0,0 233,0,0 3:O1|@4 4:C2,120|90909090909090483b65187303ff55484883f801750b48b80100000000000000c348ff30488b400890e8d9ffffff48ff750849bedec1ecacaa2a000049566a014889650848b80100000000000000488b54241890ff1248ff742410488f45084883c420c3909048b801000000000000004883c408c3909090|@5,8191|24,0,0 52,0,$4+102 70,0,0 104,0,0 5:S20|506f6c794d4c2e72756e4f6e456e747279283129 6:S24|506f6c794d4c2e72756e46756e6374696f6e283129283129 7:O2|@9,@8 8:O2|@32,@31 9:O1|@10 10:C3,176|90909090909090483b65187303ff554850504989e149b8010000000000000048bb010000000000000048b8010000000000000090ff159e0000004c8b7424084d89f54983f5fe4d89ec4983e4054c8b1c244d89da4d0bd44d8d7fe84c3b7d107303ff554049c747f8020000004d89f94d89510849b8a8c3ecacaa2a00004d89014c89cb48b80f0000000000000048baf02460000000000090ff1248b801000000000000004883c410c390909090909090|@30,8191,@24|23,0,0 33,0,0 43,0,0 117,0,@11 133,0,7 143,0,I73 156,0,0 11:O1|@12 12:C4,376|90909090909090483b65187303ff554848bb010000000000000048b8030000000000000048ba30226000000000009090ff1248f7c001000000753848ff750849be26c4ecacaa2a000049566a01488965084c8b284c8b60084c89e04c89ea9090ff1248ff742410488f4508eb6e90505050eb6d49be08c0ecadaa2a00004d8b2e4983fd03753a48b808c0ecadaa2a000048ba70246000000000009090ff124883f801751c48bb030000000000000048b80100000000000000ff15e2000000eb6d50504989e149b8010000000000000048bb0100000000000000eb0ae985000000e98000000048b8010000000000000090ff15b20000004c8b6424084d89e34983f3fe4d89da4983e2054c8b0c244d89c84d0bc24d8d7fe84c3b7d107303ff554049c747f8020000004c89ffeb05e9300000004c89470848be78c5ecacaa2a00004889374889fb48b80f0000000000000048baf0246000000000009090ff124883c41050505048b801000000000000004883c418e98ffeffff|@28,8191,@15,@24|18,0,0 28,0,1 38,0,I62 65,0,$12+110 117,0,@7535 136,0,@7535 146,0,I71 166,0,1 176,0,0 199,0,0 209,0,0 231,0,0 312,0,@13 328,0,7 338,0,I73 359,0,0 13:O1|@14 14:C3,32|90909090909090483b65187303ff554848bb0100000000000000ff2528000000|@20,8191,@15|18,0,0 15:C3,328|90909090909090483b65187303ff55484883fb017402eb5d48bb010000000000000048b808c0ecadaa2a00004c8b304983fe03750c49bd0100000000000000eb434881fb419c0000750c49bd0100000000000000eb2ef6c3017503ff55704989dd4983c50270f44c89eb483b65187303ff5548ebade95600000049bd010000000000000048b808c0ecadaa2a000048ba7024600000000000ff124883f8017502eb2e48bb08c0ecadaa2a000048b8030000000000000048baf024600000000000ff12483b65187303ff5548e948ffffff48bb70c7ecacaa2a000048b830c8ecacaa2a0000ff158600000048b808c0ecadaa2a000048ba30246000000000009090ff124883f803750b48b80100000000000000c349bd08c0ecadaa2a000049c745000300000048bb08c0ecadaa2a000048b8050000000000000048baf024600000000000ff22909090|@22,8191,@21|26,0,0 36,0,@7535 55,0,0 76,0,0 124,0,0 134,0,@7535 144,0,I71 164,0,@7535 174,0,1 184,0,I73 210,0,@16 220,0,@19 236,0,@7535 246,0,I70 266,0,0 277,0,@7535 295,0,@7535 305,0,2 315,0,I73 16:O1|@17 17:C2,72|90909090909090483b65187303ff55484883f801750b48b80100000000000000c348ff7008488b1848b8090000000000000048baf024600000000000ff12488b04244883c408ebbf|@18,8191|24,0,0 42,0,4 52,0,I73 18:S30|5468726561642e436f6e646974696f6e5661722e77616b65416c6c283129 19:O2|@7537,@7536 20:S38|5369676e616c2e73696754687265616428312962726f6164436173745765616b283129283129 21:C2,664|90909090909090483b65187303ff55484c8b304c8b680848bab024600000000000909090ff12488b50084889d04883e00d4883f801750c49bc0300000000000000eb2e4883f805750c49bcfdffffffffffffffeb1c4883f809750c49bc0100000000000000eb0a49bcffffffffffffffff4983fc037502eb3348bab02460000000000090ff124989c348bab02460000000000090ff12488b50084889d04883e0f34889c24883ca05498953085349564955495448b801000000000000004c8b7424104d8b2e4983fd03750c49bc0100000000000000eb3d4881f8419c0000750c49bc0100000000000000eb28a8017503ff55704989c44983c40270f44c89e0483b65187303ff5548ebb349bc01000000000000004c89f048ba7024600000000000909090ff124883f8017502eb2a4c89f348b8030000000000000048baf024600000000000909090ff12483b65187303ff5548e95bffffff4c8b642408498b0424488b5424189090ff124c8b5c2408498903488b44241048ba3024600000000000909090ff124883f8037502eb284c8b54241049c702030000004c89d348b8050000000000000048baf024600000000000909090ff1248bab024600000000000ff124c8b04244983f803750c49b90100000000000000eb2e4983f8fd750c49b90500000000000000eb1c4983f801750c49b90900000000000000eb0a49b90d000000000000004889c748bab02460000000000090ff12488b70084889f34883e3f34c89ca480bd3488957084983f8017502eb084983f8ff7402eb4c48bab024600000000000909090ff12488b48184883f901742448bb010000000000000048b817000000000000004883c42048baf024600000000000ff2248b801000000000000004883c420c348b801000000000000004883c420c39090|@23,8191|25,0,I72 57,0,1 75,0,-2 93,0,0 105,0,-1 123,0,I72 139,0,I72 181,0,0 205,0,0 226,0,0 268,0,0 281,0,I71 307,0,1 317,0,I73 377,0,I70 415,0,2 425,0,I73 440,0,I72 462,0,0 480,0,2 498,0,4 510,0,6 523,0,I72 573,0,I72 598,0,0 608,0,11 622,0,I73 634,0,0 649,0,0 22:S35|5369676e616c2e73696754687265616428312962726f6164436173745765616b283229 23:S40|5468726561642e436f6e646974696f6e5661722e7369676e616c4f7242726f616463617374283229 24:C2,328|90909090909090483b65187303ff55484883f80175124989194d89410848b80100000000000000c34c8b304d8b2e4983fd0175724d8b66084983fc0375414989db4983cb034c89c34883e3034883fb01741a48b840cdecacaa2a0000909090ff555848b801000000000000004c89c34883cb034989d84c89db488b4008eb884d89c34983e3034983fb01741848b840cdecacaa2a000090ff555848b80100000000000000eb05e9130000004d89c34983cb034d89d8488b4008e949ffffff4d8b5e084983fb03750c49bc0100000000000000eb2e4983fbfd750c49bc0500000000000000eb1c4983fb01750c49bc0900000000000000eb0a49bc0d000000000000004d89e24c0bd34c89c34883e30d4883fb01741748b840cdecacaa2a0000ff555848b801000000000000004d89c44983cc0d4d89e04c89d3488b4008e9c5feffff909090909090|@29,8137|31,0,0 84,0,@25 100,0,0 142,0,@25 156,0,0 202,0,0 220,0,2 238,0,4 250,0,6 279,0,@25 292,0,0 25:O3|12,@27,@26 26:S53|5468652073616d65206174747269627574652061707065617273206d6f7265207468616e206f6e636520696e20746865206c697374 27:S6|546872656164 28:S19|5369676e616c2e736967546872656164283129 29:S38|5468726561642e5468726561642e6174747273546f576f7264283129636f6e76657274283429 30:S20|5369676e616c2e666f726b546872656164283129 31:O2|@149,@148 32:O4|@33,@137,@36,@7354 33:C2,144|488b42184c8b30524983fe017502eb1d498b16488b420848c700010000004d8b7608483b65187303ff5548ebdb488b142448b828c06cadaa2a00004c8b304d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8970084c8b72104c893049bd28c06cadaa2a000049894500488b5a0848b825000000000000004883c40848ba3038600000000000ff22909090|@136,8191|51,0,@7355 99,0,@7355 117,0,18 131,0,I150 34:O2|@36,@35 35:O2|@63,@62 36:O2|@37,@7354 37:C3,192|90909090909090483b65187303ff55484c8b72084d8b2e525049554983fd017502eb32498b550049ff75084c8b422048bb98d0ecacaa2a00004889d0ff15a60000004c8b2c244883c408483b65187303ff5548ebc648b80100000000000000488b542408ff124c8b6424104d8b5c24084c8b14244d89134d8b0b4983f901750f48b801000000000000004883c418c34d8b01498b780848c707010000004d8b4908483b65187303ff5548ebce48b801000000000000004883c418c39090909090|@56,8191,@53|49,0,@38 87,0,0 130,0,0 174,0,0 38:O1|@39 39:C3,240|90909090909090483b65187303ff55484c8b70084d8b2e4c8b60104983fd01750b48b80100000000000000c34d8b5c243849f7c301000000752d495549ff342448ff3049ff3349c7060100000048b80100000000000000488d542420ff15b60000004883c420c34d8d7fe04c3b7d107303ff554049c747f8030000004d89fa49b9d8d1ecacaa2a00004d894a1049b8f0d1ecacaa2a00004d894208498b3c2449893a4d8d7fe04c3b7d107303ff554049c747f8030000004c89fe4c89561048bb38d2ecacaa2a000048895e0848ba48c06cadaa2a00004889164889f0909090ff555848b8010000000000000090909090|@47,8191,@44|35,0,0 79,0,0 129,0,@40 143,0,@41 192,0,@43 206,0,@7357 228,0,0 40:S8|666c7573684f7574 41:O3|@7356,@42,0 42:S20|426c6f636b696e674e6f74537570706f72746564 43:S2|496f 44:C3,456|90909090909090483b65187303ff5548525048ff750849beded2ecacaa2a000049566a01488965084c8b62f84d89e34c23d841f6c3017503ff55704d89e34c2bd84d8d5b0170f14d8d7ff04c3b7d107303ff554049c747f8010000004d89fa4d891a4c8b4ae04d89d04889c3488b42e8ff157a0100004c89ca909090ff124989c548ff742410488f4508eb7090904c8b442408488b3048bb48c06cadaa2a0000483bf3750f4889c7eb5748bf01000000000000004883fe03751648bf58d4ecacaa2a0000eb6f48bf01000000000000004d8d7fe04c3b7d107303ff554049c747f8030000004c89fa48b9d8d1ecacaa2a000048894a1048894208eb0ae95b000000e9450000004d8b70f04c89324d8d7fe04c3b7d107303ff554049c747f8030000004c89ff4889571049bd38d2ecacaa2a0000eb05e9110000004c896f0849bc48c06cadaa2a00004c89274889f890ff555849bd01000000000000004c8b4424184c89ef4923f840f6c7017503ff5570498d7dff4903f870f4488b742420488b5ef853480bdff6c3015b7503ff5570483bfb750f48b801000000000000004883c428c34c89e84923c0a8017503ff5570498d45ff4903c070f44889f24883c428e942feffff909090|@51,8191,@48|24,0,$44+142 152,0,@7357 172,0,0 188,0,@45 200,0,0 234,0,@40 299,0,@43 320,0,@7357 340,0,0 406,0,0 45:O3|1,@46,0 46:S9|496e74657272757074 47:S28|426173696353747265616d494f28292e666c7573684f757427283129 48:C2,352|4983f801756d48f7c3010000007413f6c3017503ff55704883fb017c054989deeb1d4989c648b860d6ecacaa2a0000ff55584d89f049be01000000000000004c8b004d3bf077384c89c3492bde4883c3014d8d7fe04c3b7d107303ff554049c747f8030000004c89fa4889421048895a08eb05e9200000004c89324889d0c348b860d6ecacaa2a00009090ff555848b8010000000000000048f7c3010000007413f6c3017503ff55704883fb017c054989deeb1f4989c648b860d6ecacaa2a00009090ff55584c89f349be0100000000000000498b1848f7c3010000007413f6c3017503ff55704883fb017c054889daeb1d4889c248b860d6ecacaa2a0000ff55584889d048ba0100000000000000488d4aff4903ce4c8b28493bcd77274d8d7fe04c3b7d107303ff554049c747f8030000004c89f948894110488951084c89314889c8c348b860d6ecacaa2a0000ff555848b8010000000000000090909090|@52,6223|39,0,@49 55,0,0 129,0,@49 144,0,0 185,0,@49 203,0,0 247,0,@49 263,0,0 327,0,@49 340,0,0 49:O3|11,@50,0 50:S9|537562736372697074 51:S40|426173696353747265616d494f28292e666c7573684f757427283129666c75736842756666283129 52:S32|566563746f72536c6963654f7065726174696f6e7328292e736c696365283329 53:C9,688|90909090909090483b65187303ff55484989c448b80100000000000000909090ff15b20200004954534950504883f801750c49bb0100000000000000eb424c8b00498b184883fbff751d4d8d7ff04c3b7d107303ff554049c747f8010000004d89fb4d8903eb19488b4008483b65187303ff5548ebb649bb010000000000000049f7c3010000007552498b034c8b304983feff752e4c8b68084983fd03750c48ba0100000000000000eb4648b828daecacaa2a0000909090ff15220200004889c2eb2e48b828daecacaa2a0000909090ff15120200004889c2eb1648b828daecacaa2a0000909090ff15020200004889c248b828daecacaa2a000090ff15f601000048ba0100000000000000488b4c2408488b014883f803750c49be0100000000000000eb3e4881fa419c0000750c49be0100000000000000eb29f6c2017503ff55704989d64983c60270f44c89f2483b65187303ff5548ebb249be01000000000000004889c848ba7024600000000000909090ff124883f801750c49be0100000000000000eb324889cb48b8030000000000000048baf02460000000000090ff12483b65187303ff5548e952ffffff49be010000000000000048ff750849bdf6d8ecacaa2a000049556a0148896508488b442430488b5424289090ff124989c448ff742410488f4508eb6890904989c3488b44240848ba3024600000000000ff124883f8037502eb2a4c8b54240849c7020300000049534c89d348b8050000000000000048baf02460000000000090ff12eb024953488b44240890ff15be000000488b042490ff555849bc0100000000000000488b44242048ba302460000000000090ff124883f8037502eb2a4c8b5c242049c7030300000049544c89db48b8050000000000000048baf02460000000000090ff12eb024954488b44242090ff1562000000488b04244883c440c390|@58,8191,@59,@57,@57,@57,@57,@57,@57|21,0,0 52,0,0 120,0,0 161,0,0 173,0,@54 197,0,@54 221,0,@54 243,0,@54 260,0,0 284,0,0 305,0,0 348,0,0 361,0,I71 382,0,0 397,0,1 407,0,I73 434,0,0 448,0,$53+494 504,0,I70 541,0,2 551,0,I73 588,0,0 603,0,I70 641,0,2 651,0,I73 54:O2|@55,0 55:O2|-1,-2 56:S27|426173696353747265616d494f28292e646f4f6e4c6f6164283129 57:C3,232|90909090909090483b65187303ff55484989c648bab024600000000000909090ff12488b500850504889d14989e149b8010000000000000048bb01000000000000004c89f0909090ff15c200000048bab024600000000000ff124c8b7424084d89f54983f5fe4d89ec4c23e14c8b1c244d89da4d0bd44c8950084d89d94983e1094983f909754c48bab024600000000000909090ff124c8b40184983f801742448bb010000000000000048b817000000000000004883c41048baf024600000000000ff2248b801000000000000004883c410c348b801000000000000004883c410c3909090909090|@61,8191,@24|21,0,I72 48,0,0 58,0,0 80,0,I72 137,0,I72 162,0,0 172,0,11 186,0,I73 198,0,0 213,0,0 58:S26|426173696353747265616d494f28292e70726f74656374283329 59:C2,280|90909090909090483b65187303ff554848bab0246000000000009090ff12488b50084889d04883e0034883f803750c49be0300000000000000eb0a49be01000000000000004d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89700848c700010000004989d64983e60d4983fe01750c49bd0300000000000000eb2e4983fe05750c49bdfdffffffffffffffeb1c4983fe09750c49bd0100000000000000eb0a49bdffffffffffffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa4c896a0848c702ffffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fe49c74608010000004989164989c54d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8970084c8928c3|@60,6149|18,0,I72 49,0,1 61,0,0 119,0,1 137,0,-2 155,0,0 167,0,-1 60:S30|5468726561642e5468726561642e67657441747472696275746573283129 61:S30|5468726561642e5468726561642e73657441747472696275746573283129 62:O2|@80,@79 63:O2|@64,@7358 64:C5,256|90909090909090483b65187303ff55484c8b72084d8b2e4d8b65004983fc01756d4d8b5d084d8b134d8b0a4d8b4320498b384889fe4923f140f6c6017503ff55704889fe492bf1488d760170f14d8d7ff04c3b7d107303ff554049c747f8010000004c89fb4889334889c64989d84c89cb498b4318909090ff15aa000000564952495149ff73205749ff7318eb05e95800000090ff15960000005048b80100000000000000488b5424309090ff124c8b0424488b5c2408488b442420ff1576000000488b5c2428488b542420488913488b4c2418488b44241048890148b801000000000000004883c438c34989c348b801000000000000004c89daff22909090|@66,8191,@67,@68,@65|157,0,0 222,0,0 240,0,0 65:C2,208|49f7c001000000740c49be0300000000000000eb084d8b304f8d74360148f7c0010000007412a8017503ff55704883f8017c054989c5eb1848b860d6ecacaa2a000090ff555849bd0100000000000000498d46ff4903c54c8b23493bc4761948b860d6ecacaa2a00009090ff555848b8010000000000000049f7c0010000007423488b430849d1e849d1ed4e8804284f8d4400014f8d6c2d0148b80100000000000000c34d89f24d89e94d89c34c8b430848bb11000000000000004c89d848ba3044600000000000ff22909090909090|@74,8191|11,0,1 58,0,@49 72,0,0 97,0,@49 112,0,0 155,0,0 179,0,8 192,0,I198 66:S16|54657874494f2e6f6e4c6f6164283129 67:C2,352|4983f801756d48f7c3010000007413f6c3017503ff55704883fb017c054989deeb1d4989c648b860d6ecacaa2a0000ff55584d89f049be01000000000000004c8b004d3bf077384c89c3492bde4883c3014d8d7fe04c3b7d107303ff554049c747f8030000004c89fa4889421048895a08eb05e9200000004c89324889d0c348b860d6ecacaa2a00009090ff555848b8010000000000000048f7c3010000007413f6c3017503ff55704883fb017c054989deeb1f4989c648b860d6ecacaa2a00009090ff55584c89f349be0100000000000000498b1848f7c3010000007413f6c3017503ff55704883fb017c054889daeb1d4889c248b860d6ecacaa2a0000ff55584889d048ba0100000000000000488d4aff4903ce4c8b28493bcd77274d8d7fe04c3b7d107303ff554049c747f8030000004c89f948894110488951084c89314889c8c348b860d6ecacaa2a0000ff555848b8010000000000000090909090|@52,6223|39,0,@49 55,0,0 129,0,@49 144,0,0 185,0,@49 203,0,0 247,0,@49 263,0,0 327,0,@49 340,0,0 68:C3,304|90909090909090483b65187303ff55485050504889e39090ff153a0100004c8b34244c8b6c24104983fd01750f48b8b01e6000000000004883c418c34983fd0375214d8b6608488b5c24084889da48d1ea490fb61414488d5412014889d04883c418c34d8d6520498d5c24fe4889da48c1ea034883ca0149ff760848ff750848b992e2ecacaa2a0000516a014889650849b8010000000000000048bb83000000000000004889d048ba7015600000000000909090ff1248ff742410488f4508eb1b9048b840e3ecacaa2a0000909090ff555848b8010000000000000049d1ed4c89284f8d6c2d015049564d89ea49b911000000000000004989c0488b5c2438488b44242848ba30446000000000009090ff12488b44240848ba701e600000000000909090ff12488b4424084883c448c3|@72,8191,@71|47,0,I48 129,0,$68+194 146,0,0 156,0,65 169,0,I11 196,0,@69 212,0,0 239,0,8 262,0,I198 281,0,I47 69:O3|4,@70,0 70:S4|53697a65 71:C2,40|4c8b70104c89334c8b284c896b084c8b60084c89631048b80100000000000000c390909090909090|@73,7177|24,0,0 72:S24|436861724172726179536c6963652e766563746f72283129 73:S31|566563746f72536c6963654f7065726174696f6e7328292e62617365283229 74:S20|4368617241727261792e636f7079566563283329 75:O2|0,@76 76:O5|@7360,@77,I148,@78,@7359 77:S5|737464496e 78:O2|4096,@7361 79:O2|@36,@134 80:O2|@81,@7362 81:C3,192|90909090909090483b65187303ff55484c8b72084d8b2e525049554983fd017502eb32498b550049ff75084c8b422048bb00e6ecacaa2a00004889d0ff15a60000004c8b2c244883c408483b65187303ff5548ebc648b80100000000000000488b542408ff124c8b6424104d8b5c24084c8b14244d89134d8b0b4983f901750f48b801000000000000004883c418c34d8b01498b780848c707010000004d8b4908483b65187303ff5548ebce48b801000000000000004883c418c39090909090|@56,8191,@53|49,0,@82 87,0,0 130,0,0 174,0,0 82:O1|@83 83:C3,240|90909090909090483b65187303ff55484c8b70084d8b2e4c8b60104983fd01750b48b80100000000000000c34d8b5c243849f7c301000000752d495549ff342448ff3049ff3349c7060100000048b80100000000000000488d542420ff15b60000004883c420c34d8d7fe04c3b7d107303ff554049c747f8030000004d89fa49b9d8d1ecacaa2a00004d894a1049b8f0d1ecacaa2a00004d894208498b3c2449893a4d8d7fe04c3b7d107303ff554049c747f8030000004c89fe4c89561048bb38d2ecacaa2a000048895e0848ba48c06cadaa2a00004889164889f0909090ff555848b8010000000000000090909090|@47,8191,@84|35,0,0 79,0,0 129,0,@40 143,0,@41 192,0,@43 206,0,@7357 228,0,0 84:C3,456|90909090909090483b65187303ff5548525048ff750849becee7ecacaa2a000049566a01488965084c8b62f84d89e34c23d841f6c3017503ff55704d89e34c2bd84d8d5b0170f14d8d7ff04c3b7d107303ff554049c747f8010000004d89fa4d891a4c8b4ae04d89d04889c3488b42e8ff157a0100004c89ca909090ff124989c548ff742410488f4508eb7090904c8b442408488b3048bb48c06cadaa2a0000483bf3750f4889c7eb5748bf01000000000000004883fe03751648bf58d4ecacaa2a0000eb6f48bf01000000000000004d8d7fe04c3b7d107303ff554049c747f8030000004c89fa48b9d8d1ecacaa2a000048894a1048894208eb0ae95b000000e9450000004d8b70f04c89324d8d7fe04c3b7d107303ff554049c747f8030000004c89ff4889571049bd38d2ecacaa2a0000eb05e9110000004c896f0849bc48c06cadaa2a00004c89274889f890ff555849bd01000000000000004c8b4424184c89ef4923f840f6c7017503ff5570498d7dff4903f870f4488b742420488b5ef853480bdff6c3015b7503ff5570483bfb750f48b801000000000000004883c428c34c89e84923c0a8017503ff5570498d45ff4903c070f44889f24883c428e942feffff909090|@51,8191,@67|24,0,$84+142 152,0,@7357 172,0,0 188,0,@45 200,0,0 234,0,@40 299,0,@43 320,0,@7357 340,0,0 406,0,0 85:O2|@87,@86 86:O2|@116,0 87:O6|@78,@7364,@88,@7365,@7538,@7363 88:O14|@90,@91,@95,0,0,@97,0,@98,@102,@106,4096,0,@109,@89 89:O1|@113 90:S6|737464457272 91:O1|@92 92:O2|@93,I202 93:C2,40|49b80100000000000000488b5a0848b83b0000000000000048baf021600000000000ff2290909090|@94,8191|2,0,0 16,0,29 26,0,I61 94:S50|4c696272617279494f537570706f72742e777261704f757446696c654465736372283529746578745072696d57722d283129 95:O2|@96,I202 96:C2,40|49b80100000000000000488b5a0848b80f0000000000000048baf021600000000000ff2290909090|@94,8191|2,0,0 16,0,7 26,0,I61 97:O1|I202 98:O1|@99 99:O2|@100,I202 100:C3,232|90909090909090483b65187303ff55485050504989d34889e3909090ff15ee000000488b1c24488b54240848f7c2010000007413f6c2017503ff55704883fa017c054889d1eb1948b860d6ecacaa2a00009090ff555848b90100000000000000488b44241048f7c0010000007412a8017503ff55704883f8017c054989c6eb1848b860d6ecacaa2a000090ff555849be01000000000000004d8d7fe04c3b7d107303ff554049c747f8030000004d89fd4d89751049894d084c8b63084d8965004d89e8498b5b0848b817000000000000004883c41848baf021600000000000ff2290909090909090|@101,8191,@71|73,0,@49 88,0,0 130,0,@49 144,0,0 201,0,11 215,0,I61 101:S49|4c696272617279494f537570706f72742e777261704f757446696c65446573637228352977726974654172726179283129 102:O1|@103 103:O2|@104,I202 104:C3,232|90909090909090483b65187303ff55485050504989d34889e3909090ff15ee000000488b5c240848f7c3010000007413f6c3017503ff55704883fb017c054889daeb1948b860d6ecacaa2a00009090ff555848ba0100000000000000488b44241048f7c0010000007412a8017503ff55704883f8017c054989c6eb1848b860d6ecacaa2a000090ff555849be01000000000000004c8d6a104d8d7fe04c3b7d107303ff554049c747f8030000004d89fc4d897424104d896c2408488b1c2449891c244d89e0498b5b0848b817000000000000004883c41848baf021600000000000ff229090909090|@105,8191,@71|69,0,@49 84,0,0 126,0,@49 140,0,0 203,0,11 217,0,I61 105:S50|4c696272617279494f537570706f72742e777261704f757446696c6544657363722835297772697465566563746f72283129 106:O1|@107 107:O2|@108,I202 108:C2,96|90909090909090483b65187303ff554849b80100000000000000488b5a0848b8390000000000000048baf0216000000000009090ff12a8017503ff55704883f8017e0b48b80300000000000000c348b80100000000000000c390909090909090|@94,8191|18,0,0 32,0,28 42,0,I61 69,0,1 80,0,0 109:O1|@110 110:O3|@111,@99,@107 111:C2,112|90909090909090483b65187303ff5548525048b80100000000000000488b5210ff124883f80174354c8b742408488b0424498b5608909090ff124989c54d8d7ff04c3b7d107303ff554049c747f8010000004c89f84c89284883c410c348b801000000000000004883c410c390909090|@112,8191|20,0,0 95,0,0 112:S40|5072696d494f28292e6175676d656e7457726974657228312977726974654172724e42272d283129 113:O3|@114,@103,@107 114:C2,112|90909090909090483b65187303ff5548525048b80100000000000000488b5210ff124883f80174354c8b742408488b0424498b5608909090ff124989c54d8d7ff04c3b7d107303ff554049c747f8010000004c89f84c89284883c410c348b801000000000000004883c410c390909090|@115,8191|20,0,0 95,0,0 115:S40|5072696d494f28292e6175676d656e7457726974657228312977726974655665634e42272d283129 116:O6|@117,@7368,@118,@7369,@7539,@7366 117:O2|4096,@7367 118:O14|@120,@121,@123,0,0,@124,0,@125,@127,@129,4096,0,@131,@119 119:O1|@133 120:S6|7374644f7574 121:O1|@122 122:O2|@93,I149 123:O2|@96,I149 124:O1|I149 125:O1|@126 126:O2|@100,I149 127:O1|@128 128:O2|@104,I149 129:O1|@130 130:O2|@108,I149 131:O1|@132 132:O3|@111,@126,@130 133:O3|@114,@128,@130 134:O2|@63,@135 135:O2|@80,0 136:S28|426173696353747265616d494f28292e646f4f6e456e747279283129 137:O3|@139,@138,@7354 138:O2|@142,@141 139:C3,176|90909090909090483b65187303ff5548488b42104c8b305249bd01000000000000004983fe0175084c89e84883c408c349ff760848ff750849bcbef4ecacaa2a000049546a01488965084c8b5424204d8b0e4d8b4120498b5a084c89c8909090ff15720000004989c348ff742410488f4508eb0f909049bb01000000000000005050504d89dd4c8b7424184883c420483b65187303ff5548eb8848b801000000000000004883c428c390909090909090|@140,8191,@53|26,0,0 58,0,$139+118 120,0,0 156,0,0 140:S27|426173696353747265616d494f28292e636c6f7365416c6c283129 141:O3|@144,@7540,@7354 142:C2,56|90909090909090483b65187303ff55484c8b701049ff7610488b5208ff1248b80100000000000000488b14244883c408ff22909090909090|@143,8191|32,0,0 143:S28|426173696353747265616d494f28292e636c6f73654f757427283129 144:C4,336|90909090909090483b65187303ff55484c8b70184d8b2e4983fd03750b48b80100000000000000c349c706030000005250495648ff720848ba0100000000000000488b04244c8b304983fe03750c49bd0100000000000000eb3e4881fa419c0000750c49bd0100000000000000eb29f6c2017503ff55704989d54983c50270f44c89ea483b65187303ff5548ebb349bd010000000000000048ba70246000000000009090ff124883f8017502eb2a488b1c2448b8030000000000000048baf0246000000000009090ff12483b65187303ff5548e95fffffff4c8b6c24184d8b65104d8b1c244d89e24c89d8488d542420ff15820000004989024c8b4c2418498b410848ba3024600000000000ff124883f8037502eb244d8b410849c700030000004c89c348b8050000000000000048baf024600000000000ff12488b4424104883c420ff253700000090909090909090|@146,8191,@145,@39|31,0,0 57,0,0 80,0,0 101,0,0 144,0,0 154,0,I71 180,0,1 190,0,I73 260,0,I70 294,0,2 304,0,I73 145:C2,112|90909090909090483b65187303ff55484883f801750b48b80100000000000000c34c8b304d8b6e184c8b62e84d3bec7438524956488b400890e8c9ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b04244889024889d04883c410c3488b4008eb9890|@147,7173|24,0,0 146:S35|426173696353747265616d494f28292e7465726d696e61746553747265616d27283129 147:S14|4c6973742e66696c746572283229 148:O2|@152,0 149:O2|@150,@63 150:C2,80|48b828c06cadaa2a00004c8b304d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8970084c8b72084c893049bd28c06cadaa2a00004989450048b80100000000000000c390909090909090|@151,6149|2,0,@7355 50,0,@7355 64,0,0 151:S20|54657874494f2e3c7061747465726e3e2d283129 152:O4|@154,@153,@80,@7362 153:O3|@156,@155,@7362 154:C2,144|488b42184c8b30524983fe017502eb1d498b16488b420848c700010000004d8b7608483b65187303ff5548ebdb488b142448b828c06cadaa2a00004c8b304d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8970084c8b72104c893049bd28c06cadaa2a000049894500488b5a0848b825000000000000004883c40848ba3038600000000000ff22909090|@136,8191|51,0,@7355 99,0,@7355 117,0,18 131,0,I150 155:O2|@158,@157 156:C3,176|90909090909090483b65187303ff5548488b42104c8b305249bd01000000000000004983fe0175084c89e84883c408c349ff760848ff750849bc3efbecacaa2a000049546a01488965084c8b5424204d8b0e4d8b4120498b5a084c89c8909090ff15720000004989c348ff742410488f4508eb0f909049bb01000000000000005050504d89dd4c8b7424184883c420483b65187303ff5548eb8848b801000000000000004883c428c390909090909090|@140,8191,@53|26,0,0 58,0,$156+118 120,0,0 156,0,0 157:O3|@159,@7541,@7362 158:C2,56|90909090909090483b65187303ff55484c8b701049ff7610488b5208ff1248b80100000000000000488b14244883c408ff22909090909090|@143,8191|32,0,0 159:C4,336|90909090909090483b65187303ff55484c8b70184d8b2e4983fd03750b48b80100000000000000c349c706030000005250495648ff720848ba0100000000000000488b04244c8b304983fe03750c49bd0100000000000000eb3e4881fa419c0000750c49bd0100000000000000eb29f6c2017503ff55704989d54983c50270f44c89ea483b65187303ff5548ebb349bd010000000000000048ba70246000000000009090ff124883f8017502eb2a488b1c2448b8030000000000000048baf0246000000000009090ff12483b65187303ff5548e95fffffff4c8b6c24184d8b65104d8b1c244d89e24c89d8488d542420ff15820000004989024c8b4c2418498b410848ba3024600000000000ff124883f8037502eb244d8b410849c700030000004c89c348b8050000000000000048baf024600000000000ff12488b4424104883c420ff253700000090909090909090|@146,8191,@160,@83|31,0,0 57,0,0 80,0,0 101,0,0 144,0,0 154,0,I71 180,0,1 190,0,I73 260,0,I70 294,0,2 304,0,I73 160:C2,112|90909090909090483b65187303ff55484883f801750b48b80100000000000000c34c8b304d8b6e184c8b62e84d3bec7438524956488b400890e8c9ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b04244889024889d04883c410c3488b4008eb9890|@147,7173|24,0,0 161:C3,464|90909090909090483b65187303ff554848ff750849be9affecacaa2a000049566a014889650848b89800edacaa2a0000ff15c20100004989c548b8b01e6000000000004c89ea9090ff1248ff750849bc1affecacaa2a000049546a014889650848bb010000000000000048b8270000000000000048ba30386000000000009090ff124989c348ff742410488f4508eb20909048b8010000000000000048baf0126000000000009090ff124989c350505048ff750849ba6affecacaa2a000049526a014889650848b801000000000000004c89da90ff1248ff742410488f4508eb04905050504883c430483b65187303ff5548e953ffffff48b8010000000000000048ff742440488f45084883c448c390909048ff750849b9e2ffecacaa2a000049516a014889650848bb010000000000000048b8270000000000000048ba30386000000000009090ff124989c048ff742410488f4508eb20909048b8030000000000000048baf0126000000000009090ff124989c050505048ff750848bf3200edacaa2a0000576a014889650848b801000000000000004c89c29090ff1248ff742410488f4508eb04905050504883c430483b65187303ff5548e953ffffff48b801000000000000004883c430c39090|@7351,8191,@7350|22,0,$161+274 40,0,@162 59,0,I48 80,0,$161+146 98,0,0 108,0,19 118,0,I150 148,0,0 158,0,I1 182,0,$161+226 200,0,0 249,0,0 280,0,$161+346 298,0,0 308,0,19 318,0,I150 348,0,1 358,0,I1 382,0,$161+426 399,0,0 449,0,0 162:O2|@7542,@163 163:O4|-1,@7371,@7372,@7370 164:O2|@165,80 165:C3,32|90909090909090483b65187303ff5548488b5a08ff252e000000909090909090|@168,7181,@166| 166:C2,336|48f7c001000000740c49be0300000000000000eb084c8b304f8d743601505349bd01000000000000004983fe0175054d89eceb6e498d5efe498d46fe4c8b74240849f7c60100000074054d89f4eb174c8d60104c89e048d1e8490fb60406488d4400014989c449f7c40100000074054d89e6eb1449f64424ff104d8b3424740349f7de4f8d74360149bc0f00000000000000524c89e248d1ea498d45ff48f7e2eb05e927000000488d40015a4c8d68ff4d03ee4989de483b65187303ff5548e965ffffff49bc0100000000000000488b1c2448f7c30100000074054889daeb1248f643ff10488b13740348f7da488d5412015251498d4424ff4889d14883e9017503ff55684833d248f7f1488d4201595aa8017503ff55704883f8017d2a49bed802edacaa2a00004d89f54c23e841f6c5017503ff55704d8d6eff4c03e870f44c89e84883c410c34883c410c3909090|@169,7181|11,0,1 33,0,0 138,0,7 198,0,0 288,0,@167 167:B16|00000000000000800000000000000000 168:S25|486173685461626c652e6861736856616c7565283129283129 169:S22|486173685461626c652e6861736856616c7565283229 170:O2|@515,@7348 171:O2|@173,@172 172:O2|@174,0 173:S2|3c3d 174:O3|@7374,69,@175 175:O4|@173,-1,@177,@176 176:O3|1,@179,@178 177:O2|-2,4 178:O4|-3,0,@187,@186 179:O4|-2,1,@180,0 180:O2|@182,@181 181:O2|@185,0 182:O2|49,@183 183:O3|3,@7375,79992 184:O2|2,0 185:O2|50,@183 186:O2|0,@188 187:S4|626f6f6c 188:O6|@187,0,0,0,@190,@189 189:O2|-1,@7386 190:O2|-1,@7376 191:O3|1,@193,@192 192:O2|@195,@194 193:O1|-1 194:O2|@459,0 195:O4|@197,@198,@196,@178 196:O2|-1,@199 197:S4|74727565 198:O1|1 199:O2|5,@200 200:O2|-1,@201 201:O5|0,@203,@456,@7383,@202 202:O2|10,@457 203:O3|@205,@207,@204 204:O2|@444,@443 205:C2,40|90909090909090483b65187303ff55484c8b4a084c8b4010488b5808488b00488b5210ff22909090|@206,8191| 206:S40|434f44455452454528292e67656e436f64652832292831296e6577456e7669726f6e283129283129 207:O2|@209,@208 208:O3|@212,0,@211 209:C2,40|90909090909090483b65187303ff55484c8b4010488b5808488b00488b5208ff2290909090909090|@210,8191| 210:S44|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229656e76283129 211:O10|0,@419,@418,0,0,0,0,0,0,0 212:C3,200|90909090909090483b65187303ff55484c8b0041f6c0017503ff55704983f8017d02eb2c488b7a10488b77f848c1e60848c1ee08488d74360149504c23c641f6c00149587503ff55704c3bc67d02eb1848b860d6ecacaa2a000090ff555848bf01000000000000004a8b7487fc4889f748f7c7010000007505488b0feb1a48b8f009edacaa2a0000909090ff555848b90100000000000000488b7a084889de4823f740f6c6017503ff55704889de482bf7488d760170f14889cb4889f0ff252d0000009090909090|@227,8191,@216|82,0,@49 96,0,0 128,0,@213 144,0,0 213:O3|@7377,@215,@214 214:S7|676574536f6d65 215:S13|496e7465726e616c4572726f72 216:C4,680|90909090909090483b65187303ff55484883f80175044889d8c3504c8b2b4983fdff750b4c8b63084d8b742410eb104983fd0375064c8b7310eb044c8b73084d8b264983fcf775655348bb01000000000000004c89f0488d54241090ff156e0200004c8b1c244d8b0b4983f9ff750a4d8b43084d8b5020eb0a49ba380dedacaa2a00004983f9ff750a498b7b084c8b4708eb0a49b8480dedacaa2a00004983f9ff750f498b7308488b7e18eb29e9af0000004d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89ff48c707010000004d8d7fd04c3b7d107303ff554049c747f8050000004c89fe4c89562048897e18488946104c89460848c706010000005050498b1a4883fbfd75134889e248c702010000004889e148894108eb114889e248c702ffffffff4889e1488971084d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b34244c89304c8b6c24084c8968084883c420c34983fcfb75084889d84883c408c34983fcf375645348bb01000000000000004c89f0488d542410ff154a0100004c8b1c244d8b0b4983f9ff750a4d8b43084d8b5020eb0a49ba380dedacaa2a00004983f9ff750a498b7b084c8b4708eb0a49b8100eedacaa2a00004983f9ff750f498b7308488b7e18eb29e9af0000004d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89ff48c707010000004d8d7fd04c3b7d107303ff554049c747f8050000004c89fe4c89562048897e18488946104c89460848c706010000005050498b1a4883fbfd75134889e248c702010000004889e148894108eb114889e248c702ffffffff4889e1488971084d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b34244c89304c8b6c24084c8968084883c420c348b8700eedacaa2a0000ff555848b8010000000000000090909090|@356,8191,@228,@228|75,0,0 123,0,@217 149,0,@218 376,0,0 423,0,@217 449,0,@223 655,0,@225 668,0,0 217:O1|-2 218:O1|@219 219:C2,24|48b8a80dedacaa2a000090ff555848b80100000000000000|@222,1|2,0,@220 16,0,0 220:O3|@7377,@215,@221 221:S9|6572726f7220656e76 222:S22|434f44455452454528292e6572726f72456e76283129 223:O1|@224 224:C2,24|48b8a80dedacaa2a000090ff555848b80100000000000000|@222,1|2,0,@220 16,0,0 225:O3|@7377,@215,@226 226:S26|6368616e67654c6576656c3a20556e6b6e6f776e20656e747279 227:S44|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229656e76283329 228:C6,1192|90909090909090483b65187303ff55484c8b3049f7c601000000741e4983fef37c1d4983fe177f1c49bd4a0fedacaa2a00004f8d6cb53441ffe5e9a3000000e99e000000e99900000090e9f7010000909090e98b000000909090e965010000909090e972030000909090e973000000909090e96b000000909090e963000000909090e95b000000909090e953000000909090e94b000000909090e9c2030000909090e989020000909090e933000000909090e9df020000909090e923000000909090e91b000000909090e956030000909090e90b000000909090e98303000090909050505050505050504c8d44240848bb0014edacaa2a000048b89b0000000000000090ff15c60300004d8d7fc04c3b7d107303ff554049c747f8070000004d89fc4c8b5c24084d891c244c8b5424104d895424084c8b4c24184d894c24104c8b4424204d89442418488b7c242849897c2420488b7424304989742428488b5c243849895c2430495448b8b027edacaa2a00004889da9090ff12488b1c24488b44240848bac827edacaa2a0000909090ff154203000048b80100000000000000488b542420909090ff1248b8585bedacaa2a0000909090ff555848b801000000000000004c8b601841f6c4017503ff55704983fc017c1649544c23e341f6c401495c7503ff55704c3be37d01c34c8b5af84d89e24d23d341f6c2017503ff55704d8d5424ff4d03d370f34c8b48084c8b40104d8d7fd04c3b7d107303ff554049c747f8050000004c89f848c74020010000004c8950184c8940104c89480848c700f7ffffffc34c8b6008f6c3017503ff55704989db4983c30270f45249ff74240849ff74241049ff74241849ff74242049ff74242849ff74243049ff7424384c89db498b0424909090e879fdffff4c8b5424384c8b4c24284d8b42f84c89cf4923f840f6c7017503ff5570498d79ff4903f870f44d8d7fb84c3b7d107303ff554049c747f8080000004c89fe488b1c2448895e38488b54240848895630488b4c241048894e284c8b7424184c8976204c8b6c24204c896e1848897e104c8b6424304c8966084889064d8d7fe84c3b7d107303ff554049c747f8020000004c89f84889700848c700f3ffffff4883c440c3525348ff700848ff7018488b4010909090e8c1fcffff50488b442410488d542428909090ff15860100004989c44d8d7fd84c3b7d107303ff554049c747f8040000004c89f84c8b5c24084c8958184c8b14244c8950104c89600848c700090000004883c428c35248ff7010488b40089090e861fcffff4989c44d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c8b1c244c8958104c89600848c7000d0000004883c410c35248ff7008488b4010909090e81dfcffff4989c44d8d7fd84c3b7d107303ff554049c747f8040000004c89f848c74018010000004c8960104c8b1c244c89580848c700f9ffffff4883c410c35253488b4008488d542410ff15b20000004989c44d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89600848c700130000004883c410c3c35248ff7010488b40089090e895fbffff4989c44d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c8b1c244c8958104c89600848c700170000004883c410c3909090|@358,8191,@359,@260,@416,@357|42,0,$228+74 241,0,@229 251,0,77 363,0,@257 389,0,@258 408,0,0 428,0,@354 444,0,0 229:O1|@230 230:C3,48|90909090909090483b65187303ff554849be08e46cadaa2a00004d8b2e4889c34c89e8ff252f00000090909090909090|@251,8191,@231|18,0,@7378 231:C13,728|90909090909090483b65187303ff55484989c44c89e09090ff15e20200004883f8ff756f48f7c301000000740c48ba0300000000000000eb08488b13488d541201534c89e14889d0488d542408909090ff15b20200004883f801756f48f7c301000000740c48b80300000000000000eb08488b03488d4400014d8d7fe04c3b7d107303ff554049c747f8030000004d89feeb05e9c10100004989461049c746080100000049891e4d8d7fe84c3b7d107303ff554049c747f8020000004d89fd49bce817edacaa2a0000eb05e91c0000004d8965004d8975084c8b41204c89eb4889c84883c408ff25240200004d8d7ff04c3b7d107303ff554049c747f8010000004d89fe4989064989cc4989c34d89f048bb0100000000000000488b04249090ff15f20100005050504d89e24889e390ff15ea0100004d8d7fe04c3b7d107303ff554049c747f8030000004d89f94c8b4424104d894110488b7c240849897908488b34244989314d8d7fe84c3b7d107303ff554049c747f8020000004c89fb48ba5024edacaa2a00004889134c894b08495249534d8b42204c89d090ff1586010000488b4c24084c8b412048bb00e6ecacaa2a00004889c8ff157201000049b80100000000000000488b1c24488b442428909090ff155e0100005050504889e3ff155a0100004d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c8b7424104c8970104c8b6c24084c8968084c8b24244c89204d8d7fe84c3b7d107303ff554049c747f8020000004d89fb49bab024edacaa2a00004d8913498943084c8b4c24204d8b41204c89db4c89c84883c448ff25ef00000048f7c301000000740c49bb0300000000000000eb084c8b1b4f8d5c1b014d8d7fe04c3b7d107303ff554049c747f8030000004d89fa4d895a1049c742080100000049891a4d8d7fe84c3b7d107303ff554049c747f8020000004d89f949b81025edacaa2a00004d89014d8951084d8b4424204c89cb4c89e0ff257900000090|@253,8191,@254,@252,@53,@243,@71,@53,@53,@243,@71,@53,@53|47,0,1 103,0,1 193,0,@232 274,0,0 385,0,@248 429,0,@82 448,0,0 561,0,@249 612,0,1 695,0,@250 232:C3,32|90909090909090483b65187303ff5548488b5a08ff252e000000909090909090|@237,8191,@233| 233:C6,328|90909090909090483b65187303ff55484c8b70104c8b68184d8b65004983fc0375704d8d7fe04c3b7d107303ff554049c747f8030000004c89fb49bce819edacaa2a00004c89631049bc001aedacaa2a00004c8963084d8b264c89234d8d7fe04c3b7d107303ff554049c747f8030000004d89fb49895b1048bb38d2ecacaa2a000049895b0848bb48c06cadaa2a0000eb05e91500000049891b4c89d89090ff555848b801000000000000004c8b1848ff731048ff700848ff33495348ff73085049ff33488b5c24304c8b2424534923dcf6c3015b7503ff5570493bdc7e2590ff158a0000004c8b4c24304c8b442410488b5c2420488b4424084883c438ff25740000004c8b50284d8b0a4983f90375174989d94c8b442410488b5c24204883c438ff255800000048b80100000000000000488d54243890ff154a0000004883c438c39090909090|@239,8191,@83,@240,@240,@238|60,0,@234 74,0,@235 122,0,@43 136,0,@7357 164,0,0 298,0,0 234:S6|6f7574707574 235:O3|@7379,@236,0 236:S12|436c6f73656453747265616d 237:S34|426173696353747265616d494f28292e6f7574707574566563746f72283129283129 238:C9,568|90909090909090483b65187303ff5548488b42f04c8b304c8b6ac84d89ec4d23e641f6c4017503ff55704d89ec4d2be64d8d64240170f04c8b72f849544d23e641f6c401495c7503ff55704d3bf47d6e4c8b204d8d7ff04c3b7d107303ff554049c747f8010000004d89fb4d89334989d24d89d8498b5ad8498b42e8ff15de01000049524989c0498b5ae04c89e09090ff15d20100004c8b0c244d8b41f0498b38498b71f84889fb4823def6c3017503ff5570488d5fff4803de70f4eb05e91200000049891848b801000000000000004883c408c34c8b204d89eb4d23dc41f6c3017503ff55704d89eb4d2bdc4d8d5b0170f14c8b104d8d7ff04c3b7d107303ff554049c747f8010000004d89f94d89194889d74d89c8488b5fd8488b47e890ff154a0100005749534989c0488b5fe04c89d090ff153e010000488b742408488b5ef0488b13488b0c244889d04823c1a8017503ff5570488d42ff4803c170f4488903488b46d090ff15120100004c8b7424084d8b6ed84c8b24244d89eb4d23dc41f6c3017503ff55704d8d5dff4d03dc70f44d8b56f84d89d14d23cc41f6c1017503ff55704d89d14d2bcc4d8d490170f14d8d7ff04c3b7d107303ff554049c747f8010000004d89f84d8908498b7ee04c89db498b46e8ff15aa0000004989c04889fb48b801000000000000009090ff159a000000488b742408488b5ef8488b14244889d94823caf6c1017503ff55704889d9482bca488d490170f1488b46f048890848b801000000000000004883c410c39090909090|@246,8191,@243,@245,@243,@245,@83,@243,@245|200,0,0 486,0,0 550,0,0 239:S31|426173696353747265616d494f28292e6f7574707574566563746f72283229 240:C3,208|90909090909090483b65187303ff55484c8b70104d8b6e4049f7c5010000007526495149ff3649505349ff750048b80100000000000000488d542428ff15b60000004883c428c34d8d7fe04c3b7d107303ff554049c747f8030000004d89fc49bbe819edacaa2a00004d895c241049baf0d1ecacaa2a00004d895424084d8b0e4d890c244d8d7fe04c3b7d107303ff554049c747f8030000004d89f84d89601048bf38d2ecacaa2a00004989780848be48c06cadaa2a00004989304c89c090ff555848b8010000000000000090909090|@242,8191,@241|47,0,0 97,0,@234 112,0,@41 162,0,@43 176,0,@7357 196,0,0 241:C3,480|90909090909090483b65187303ff5548525048ff750849be0a1fedacaa2a000049566a01488965084c8b62e84989c34d23dc41f6c3017503ff55704c8d58ff4d03dc70f44c8b52f84d89d14c23c841f6c1017503ff55704d89d14c2bc84d8d490170f14d8d7ff04c3b7d107303ff554049c747f8010000004d89f84d8908488b7ad84c89db488b42e0909090ff15760100004889fa909090ff124989c548ff742410488f4508eb709090488b742408488b1048b948c06cadaa2a0000483bd1750f4889c3eb5748bb01000000000000004883fa03751648bb58d4ecacaa2a0000eb6f48bb01000000000000004d8d7fe04c3b7d107303ff554049c747f8030000004d89fe49bde819edacaa2a00004d896e1049894608eb0ae95b000000e9450000004c8b66f04d89264d8d7fe04c3b7d107303ff554049c747f8030000004c89fb4c89731049bb38d2ecacaa2a0000eb05e9110000004c895b0849ba48c06cadaa2a00004c89134889d890ff555849bd0100000000000000488b7424184c89eb4823def6c3017503ff5570498d5dff4803de70f4488b542420488b4af853480bd9f6c3015b7503ff5570483bd9750f48b801000000000000004883c428c34c89e84823c6a8017503ff5570498d45ff4803c670f44883c428e92afeffff909090|@244,8191,@243|24,0,$241+170 180,0,@7357 200,0,0 216,0,@45 228,0,0 262,0,@234 327,0,@43 348,0,@7357 368,0,0 433,0,0 242:S27|426173696353747265616d494f28292e7772697465566563283429 243:C2,400|4983f801757148f7c3010000007413f6c3017503ff55704883fb017c054989deeb1d4989c648b860d6ecacaa2a0000ff55584d89f049be010000000000000048f7c001000000740c49b80300000000000000eb084c8b004f8d4400014d3bf077384c89c3492bde4883c3014d8d7fe04c3b7d10730aeb05e934000000ff554049c747f8030000004d89f849894010498958084d89304c89c0c348b860d6ecacaa2a0000ff555848b8010000000000000048f7c001000000740c49be0300000000000000eb084c8b304f8d74360148f7c3010000007413f6c3017503ff55704883fb017c054989ddeb1e4989c548b860d6ecacaa2a000090ff55584c89eb49bd0100000000000000498b1848f7c3010000007413f6c3017503ff55704883fb017c054889daeb1d4889c248b860d6ecacaa2a0000ff55584889d048ba0100000000000000488d4aff4903cd493bce77274d8d7fe04c3b7d107303ff554049c747f8030000004d89fe49894610498956084d892e4c89f0c348b860d6ecacaa2a0000909090ff555848b80100000000000000|@52,6223|39,0,@49 55,0,0 74,0,1 155,0,@49 168,0,0 187,0,1 238,0,@49 255,0,0 299,0,@49 315,0,0 376,0,@49 392,0,0 244:S38|426173696353747265616d494f28292e7772697465566563283429666f7263654f7574283129 245:C3,240|90909090909090483b65187303ff55485050504989c34c8b134c8b4b084889e34c89c090ff15ee00000049f7c301000000741441f6c3017503ff55704983fb017c054d89d8eb1948b860d6ecacaa2a00009090ff555849b80100000000000000488b5c2410488d53ff4903d0493bd2761748b860d6ecacaa2a0000ff555848b80100000000000000488b042448f7c001000000742f4c8b7424084d8d6eff4d03e848d1e849d1ed4b880429488d4400014f8d6c2d0148b801000000000000004883c418c34c8b7424084d8d6e104989da4d89cc4d89c14d89e04c89eb4883c41848ba3044600000000000ff2290909090|@247,8191,@71|73,0,@49 88,0,0 115,0,@49 128,0,0 183,0,0 226,0,I198 246:S46|426173696353747265616d494f28292e6f7574707574566563746f72283229616464566563546f42756666283129 247:S25|436861724172726179536c6963652e636f7079566563283329 248:C3,32|90909090909090483b65187303ff5548488b5a08ff252e000000909090909090|@237,8191,@233| 249:C3,32|90909090909090483b65187303ff5548488b5a08ff252e000000909090909090|@237,8191,@233| 250:C3,32|90909090909090483b65187303ff5548488b5a08ff252e000000909090909090|@237,8191,@233| 251:S45|434f44455452454528292e6368616e67654c6576656c2832296368616e67654c283229707072696e742d283129 252:C2,224|90909090909090483b65187303ff55484883f801750b48b80100000000000000c3a8017503ff55704989c64983ee0270f441f6c6017503ff55704983fe017d02eb394c8b6af849f7c501000000740c49bc0300000000000000eb094d8b65004f8d64240149544d23e641f6c401495c7503ff55704d3bf47d02eb1d4989c448b860d6ecacaa2a0000909090ff555849bd010000000000000049f7c5010000007402eb184d8d66104d89e649d1ee4f0fb67435004f8d7436014d89f54983fd157501c3a8017503ff55704989c54983ed0270f44c89e8e92dffffff909090909090|@256,7173|24,0,0 81,0,1 128,0,@49 144,0,0 253:S29|54657874494f2e5465787453747265616d494f2e6f7574707574283229 254:C2,16|4c8b70284d8b2e4c89e8c39090909090|@255,6145| 255:S32|426173696353747265616d494f28292e6765744275666665724d6f6465283129 256:S43|54657874494f2e5465787453747265616d494f2e6f75747075742832296c6173744e65776c696e65283129 257:O2|1,0 258:O2|@260,@259 259:O2|@352,@258 260:C52,4760|90909090909090483b65187303ff554853524c8b3049f7c601000000741e4983feeb7c1d4983fe177f1c49bd4628edacaa2a00004f8d6cb55441ffe5e9c5000000e9c0000000e9bb000000909090e955100000909090e9500b0000909090e9bc0f0000909090e9180b0000909090e94c070000909090e9cc0b0000909090e93c030000909090e9f4010000909090e998090000909090e9dc000000909090e9040a0000909090e9f4000000909090e9600c0000909090e99d090000909090e9ac0f0000909090e9f8000000909090e933000000909090e96c060000909090e91c0c0000909090e9a0000000909090e98c090000909090e94c0f0000909090e9bc10000090909048ff700848b8583cedacaa2a0000488b5330ff124c8b64241048b8703cedacaa2a0000498b5424189090ff124c8b5c2408488b5c2410488b0424498b5308ff124c8b54241048b8883cedacaa2a0000498b5218909090ff124c8b4c241048b80100000000000000498b51104883c418ff2248b8a83cedacaa2a0000488b53184883c410ff2248b8c03cedacaa2a0000488b53184883c410ff2249b8e03cedacaa2a0000488b5810488b4008488d5424109090ff15021100004883c410c348ff700848ff701048ff701848b8f83cedacaa2a0000488b5330909090ff12488b5c2420488b442408488b542418e811feffff4c8b64242048b8103dedacaa2a0000498b1424909090ff124c8b1c244983fb01742a4c8b54242048b8283dedacaa2a0000498b521890ff124c8b4c242048b8103dedacaa2a0000498b11ff1249b84900000000000000488b5c241048b85900000000000000488d542428ff15621000004c8b54242048b80100000000000000498b52104883c428ff2248ff700848ff701048ff701848b8b027edacaa2a0000488b5330909090ff124c8b64242049ff74241848bbffffffffffffffff488b44241890ff15121000005048bbffffffffffffffff488b4424109090ff15021000004d8d7fe84c3b7d107303ff554049c747f8020000004d89fb49ba403dedacaa2a00004d8953084989034d8d7fe84c3b7d107303ff554049c747f8020000004d89f94d89590849c701f70000004d8d7fe84c3b7d107303ff554049c747f8020000004d89f84d894808488b3c244989384d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89400848be703dedacaa2a00004889309090ff156a0f0000488b54240890ff12488b5c243048b8b027edacaa2a0000488b13ff12488b5c2430488b442418488b542428e861fcffff488b54243048b80100000000000000488b52104883c438ff224c8b60204983fc01740c49bb883dedacaa2a0000eb0a49bbb01e6000000000004c8b50104983fa01756f48ff7008495348bbffffffffffffffff488b4018909090ff15e20e00005048bbffffffffffffffff488b4424109090ff15d20e00004d8d7fe84c3b7d107303ff554049c747f8020000004d89f848bfa03dedacaa2a000049897808488b7424084989304d8d7fe84c3b7d10730aeb05e992000000ff554049c747f8020000004c89fb4c8943084889034d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48895a0848c702590000004d8d7fe84c3b7d107303ff554049c747f8020000004c89f948895108488b04244889014d8d7fe84c3b7d107303ff554049c747f8020000004c89f84889480849beb83dedacaa2a00004c8930909090ff150e0e00004989c1eb6d4c8b480841f6c1017503ff55704983f9017d5f4951495348bbffffffffffffffff488b4018ff15e60d00004c8b44240848bf01000000000000004c89c64823f740f6c6017503ff55704889fe492bf0488d760170f15048bbffffffffffffffff4889f09090ff15ae0d0000eb0ae9d4010000e9cd0000004d8d7fe84c3b7d107303ff554049c747f8020000004c89fb48baa03dedacaa2a000048895308488b4c240848890b4d8d7fe84c3b7d107303ff554049c747f8020000004d89fe49895e084989064d8d7fe84c3b7d107303ff554049c747f8020000004d89fd4d89750849c74500590000004d8d7fe84c3b7d107303ff554049c747f8020000004d89fc4d896c24084c8b1c244d891c244d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89600849bad03dedacaa2a00004c8910909090ff15e20c00004989c1eb6d4951495348bbffffffffffffffff488b4018909090ff15ca0c00005048bbffffffffffffffff488b4424109090ff15ba0c00004d8d7fe84c3b7d107303ff554049c747f8020000004d89f848bfa03dedacaa2a000049897808488b7424084989304d8d7fe84c3b7d10730aeb05e990000000ff554049c747f8020000004c89fb4c8943084889034d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48895a0848c702590000004d8d7fe84c3b7d107303ff554049c747f8020000004c89f948895108488b04244889014d8d7fe84c3b7d107303ff554049c747f8020000004c89f84889480849bee83dedacaa2a00004c8930909090ff15f60b00004989c14c8b6c24204c89c8498b55184883c428ff2248ff700848bbffffffffffffffff488b4010909090ff15ce0b00004889c348b8003eedacaa2a000090ff15c20b000048bb203eedacaa2a0000ff15ba0b00004c8b642410498b542418ff12488b5c2410488b0424488b54240890e861f8ffff4c8b5c241048b85300000000000000498b53184883c418ff224c8b60084d8b5424284983faff750c49bbb01e600000000000eb2e4983fa01750c49bb383eedacaa2a0000eb1c4983fafd750c49bb503eedacaa2a0000eb0a49bb683eedacaa2a000049ff342449ff74240849ff74241049ff74241849ff74242049ff74243049ff742438495348b8583cedacaa2a0000488b53309090ff124c8b4c244849ff7118488b5c240848b8883eedacaa2a00009090ff15ea0a000048bb5100000000000000ff15e20a0000488b14249090ff124c8b44245048b8b027edacaa2a0000498b10ff12488b7c2450488b442438488b5718ff12488b74245048b8b027edacaa2a0000488b16ff12488b5c2450488b4c24104883f903750c48ba4806edacaa2a0000eb0a48baa03eedacaa2a000048ff73184889d348b8b83eedacaa2a0000909090ff156a0a0000488b14249090ff12488b44245848ff701848bbffffffffffffffff488b4424289090ff154a0a00004889c348b8d03eedacaa2a000090ff153e0a0000488b14249090ff124c8b74246049ff761848bbffffffffffffffff488b4424489090ff151e0a00004889c348b8e83eedacaa2a000090ff15120a0000488b14249090ff124c8b6c246849ff751848bbffffffffffffffff488b4424409090ff15f20900004889c348b8003fedacaa2a000090ff15e6090000488b14249090ff1249b8183fedacaa2a0000488b5c244848b85900000000000000488d542478ff15c20900004c8b64247048b8b027edacaa2a0000498b1424909090ff12488b5c2470488b442460488b542468e80df6ffff4c8b5c247048b8303fedacaa2a0000498b5318909090ff124c8b54247048b80100000000000000498b52104883c478ff2248ff7318488b400890ff155e0900004889c348b8503fedacaa2a000090ff1552090000488b14244883c418ff2249b9683fedacaa2a00004c8b4018488b5810488b4008488d54241090ff152e0900004883c410c349b8803fedacaa2a0000488b580848b87700000000000000488d542410ff150e0900004883c410c348ff700848ff701048b8f83cedacaa2a0000488b5330909090ff1249b8983fedacaa2a0000488b1c2448b85900000000000000488d54242090ff15d20800004c8b64241848b8103dedacaa2a0000498b1424909090ff124c8b5c241848b85100000000000000498b5318909090ff124c8b54241848b8103dedacaa2a0000498b12ff12488b5c2418488b442408488b542410e8c9f4ffff4c8b4c241848b8103dedacaa2a0000498b11ff124c8b44241848b85300000000000000498b5018909090ff12488b7c241848b80100000000000000488b57104883c420ff2249b8b83fedacaa2a0000488b580848b85900000000000000488d542410ff151a0800004883c410c348ff700848b8583cedacaa2a0000488b5330909090ff124c8b64241049ff74241848bb510000000000000048b8d03fedacaa2a0000ff15e2070000488b14249090ff12488b5c2418488b442408488b542410e805f4ffff4c8b5c241848b8103dedacaa2a0000498b13ff124c8b54241848b85300000000000000498b5218909090ff124c8b4c241848b80100000000000000498b51104883c420ff2248ff700848ff701048b8f83cedacaa2a0000488b5330909090ff124c8b64241848b8e83fedacaa2a0000498b5424189090ff12488b5c2418488b442408488b542410e879f3ffff4c8b5c241848b80040edacaa2a0000498b5318909090ff124c8b54241848b8b027edacaa2a0000498b12ff12488b5c2418488b0424488b54241090e839f3ffff4c8b4c241848b85300000000000000498b5118909090ff124c8b44241848b80100000000000000498b50104883c420ff2248b81840edacaa2a0000488b53184883c410ff224c8b600849ff342449ff74240849ff74241049ff74241849ff74242048b8583cedacaa2a0000488b5330909090ff124c8b5c243049ff731848bbffffffffffffffff488b4424209090ff156e0600005048bbffffffffffffffff488b4424309090ff155e0600004d8d7fe84c3b7d107303ff554049c747f8020000004d89fa49b93040edacaa2a00004d894a084989024d8d7fe84c3b7d107303ff554049c747f8020000004d89f84d89500849c7005b0000004d8d7fe84c3b7d107303ff554049c747f8020000004c89ff4c894708488b34244889374d8d7fe84c3b7d107303ff554049c747f8020000004c89f84889780848bb4840edacaa2a00004889189090ff15c6050000488b54240890ff12488b5c2440488b442420488b542438e8d1f1ffff488b54244048b85300000000000000488b5218909090ff12488b4c244048b8b027edacaa2a0000488b11ff12488b4424404c8b701848b851000000000000004c89f2ff124c8b6c244048b8b027edacaa2a0000498b5500909090ff124d8d7fe04c3b7d107303ff554049c747f8030000004d89fc49bb6040edacaa2a00004d891c244c8b5424384d895424104c8b4c24404d894c24084d8d7fe84c3b7d107303ff554049c747f8020000004d89f848bf9049edacaa2a00004989384d8960084c89c64c8b44241848bb59000000000000004889f0488d54244890ff15d2040000488b5c2410488b134883fafd7502eb6d488b4c244048b8b027edacaa2a0000488b11ff12488b4424404c8b703048b8b027edacaa2a00004c89f2ff124c8b6c244048b8184aedacaa2a0000498b5518909090ff124c8b64244048b8b027edacaa2a0000498b1424909090ff12488b5c2440488b442410488b542438eb05e91e00000090e869f0ffff4c8b5c244048b80100000000000000498b5310909090ff124c8b54244048b8b027edacaa2a0000498b12ff124c8b4c244049ff711848bb304aedacaa2a000048b8484aedacaa2a000090ff150204000048bbfb00000000000000ff15fa030000488b14249090ff124c8b44244848b80100000000000000498b50104883c450ff2249b8604aedacaa2a0000488b580848b8784aedacaa2a0000488d542410ff15be0300004883c410c349b8904aedacaa2a0000488b580848b85900000000000000488d542410ff159e0300004883c410c348ff731848bbffffffffffffffff488b4008909090ff15860300004889c348b8b04aedacaa2a000090ff157a030000488b14244883c418ff2248ff700848ff701048ff701848b8f83cedacaa2a0000488b53309090ff124c8b64242049ff74241848bbffffffffffffffff488b44241890ff153a0300004889c348b8d04aedacaa2a000090ff152e03000048bb203eedacaa2a0000ff1526030000488b14249090ff12488b5c2428488b442408488b542420e8e1eeffff4c8b5c242848b8103dedacaa2a0000498b13ff124c8b54242848b85900000000000000498b5218909090ff124c8b4c242848b8b027edacaa2a0000498b11ff12488b5c2428488b442410488b542420e88deeffff4c8b44242848b8103dedacaa2a0000498b10ff12488b7c242848b85300000000000000488b5718909090ff12488b74242848b80100000000000000488b56104883c430ff2248ff700848ff701048b8f83cedacaa2a0000488b5330909090ff124c8b64241849ff74241848bbffffffffffffffff488b44240890ff153e0200004889c348b8f04aedacaa2a000090ff153202000048bb203eedacaa2a0000ff152a020000488b14249090ff124c8b5c242048b8103dedacaa2a0000498b13ff12488b5c2420488b442410488b542418e8b9edffff4c8b54242048b8103dedacaa2a0000498b12ff124c8b4c242048b85300000000000000498b5118909090ff124c8b44242048b80100000000000000498b50104883c428ff229090909090|@328,8191,@329,@325,@305,@305,@331,@305,@305,@331,@305,@305,@331,@305,@305,@331,@305,@303,@303,@303,@303,@303,@305,@303,@305,@303,@305,@303,@325,@335,@303,@347,@325,@325,@325,@303,@305,@305,@331,@349,@303,@303,@325,@325,@305,@303,@305,@303,@303,@305,@303,@303|44,0,$260+78 268,0,@261 289,0,@262 333,0,@263 357,0,0 377,0,@264 397,0,@265 417,0,@266 465,0,@267 509,0,@268 543,0,@269 565,0,@268 580,0,36 595,0,44 621,0,0 653,0,@257 682,0,-1 705,0,-1 752,0,@270 867,0,@272 901,0,@257 941,0,0 971,0,@273 983,0,I48 1009,0,-1 1033,0,-1 1080,0,@274 1238,0,@275 1288,0,-1 1313,0,0 1351,0,-1 1408,0,@274 1562,0,@276 1593,0,-1 1617,0,-1 1664,0,@274 1822,0,@277 1869,0,-1 1895,0,@278 1912,0,@279 1965,0,41 2000,0,I48 2018,0,@280 2036,0,@281 2048,0,@282 2094,0,@261 2126,0,@283 2144,0,40 2173,0,@257 2209,0,@257 2240,0,@197 2252,0,@284 2269,0,@285 2305,0,-1 2331,0,@286 2365,0,-1 2391,0,@287 2425,0,-1 2451,0,@288 2476,0,@289 2491,0,44 2517,0,@257 2561,0,@290 2585,0,0 2623,0,@291 2650,0,@292 2689,0,@293 2703,0,59 2737,0,@267 2756,0,@294 2770,0,44 2797,0,@268 2821,0,40 2845,0,@268 2885,0,@268 2905,0,41 2929,0,0 2949,0,@295 2963,0,44 2993,0,@261 3022,0,40 3032,0,@296 3081,0,@268 3101,0,41 3125,0,0 3153,0,@267 3177,0,@297 3221,0,@298 3245,0,@257 3285,0,41 3309,0,0 3329,0,@299 3377,0,@261 3405,0,-1 3429,0,-1 3476,0,@300 3591,0,@301 3645,0,41 3669,0,@257 3693,0,40 3713,0,@257 3756,0,@302 3814,0,@314 3839,0,44 3885,0,@257 3909,0,@257 3929,0,@316 3953,0,@257 4005,0,0 4029,0,@257 4053,0,@317 4063,0,@318 4080,0,125 4109,0,0 4129,0,@319 4143,0,@320 4169,0,@321 4183,0,44 4213,0,-1 4239,0,@322 4278,0,@267 4306,0,-1 4331,0,@323 4348,0,@279 4397,0,@268 4417,0,44 4441,0,@257 4481,0,@268 4501,0,41 4525,0,0 4553,0,@267 4582,0,-1 4607,0,@324 4624,0,@279 4653,0,@268 4693,0,@268 4713,0,41 4737,0,0 261:O2|1,1 262:S7|474c4f42414c20 263:S11|20282a474c4f42414c2a29 264:S3|4e494c 265:S9|4d415443484641494c 266:S8|414c544d41544348 267:O2|3,0 268:O2|0,0 269:S7|7b6561726c797d 270:O2|@271,0 271:S8|20757365737d203d 272:S6|4445434c2023 273:S6|2c206c617374 274:O2|41,0 275:S5|434c4f5328 276:S6|504152414d28 277:S6|4c4f43414c28 278:S9|494e44495245435428 279:S2|2c20 280:S6|494e4c494e45 281:S5|534d414c4c 282:S10|4f4e4c59494e4c494e45 283:S6|4c414d424441 284:S5|66616c7365 285:S3|434c3d 286:S4|2043523d 287:S5|204c45563d 288:S6|20415247533d 289:S6|20434c4f533d 290:S9|297b4c414d4244417d 291:S3|4c4954 292:S2|4946 293:S5|424c4f434b 294:S9|424547494e4c4f4f50 295:S4|4c4f4f50 296:S5|5241495345 297:S7|48414e444c4528 298:S4|57495448 299:S5|4c44455843 300:O2|40,0 301:S5|4341534520 302:C4,216|90909090909090483b65187303ff55484c8b720852505348b8583cedacaa2a0000498b5630909090ff124c8b2c244983fd017502eb6c4c8b6424104d8b5c240849ff750849ff731848bbffffffffffffffff498b45009090ff15a200000048bb7500000000000000ff159a000000488b14249090ff124c8b5424204d8b4a0848b8b027edacaa2a0000498b11ff124c8b6c24084883c410483b65187303ff5548eb8c4c8b642410498b5c2408488b442408498b5424109090ff124c8b5c24104d8b530848b80100000000000000498b52104883c418ff2290|@304,8191,@305,@303|25,0,@261 74,0,-1 96,0,58 129,0,@257 197,0,0 303:C2,456|90909090909090483b65187303ff554848f7c001000000740c49be0300000000000000eb084c8b304f8d74360148f7c301000000740c49bd0300000000000000eb084c8b2b4f8d6c2d014983fe0175044889d8c34983fd017501c34d8d65ff4d03e64d8d5c24204d8d53fe4d89d349c1eb034983cb01505349564955495448ff750849ba4a42edacaa2a000049526a014889650849b8010000000000000048bb83000000000000004c89d848ba7015600000000000909090ff124989c148ff742410488f4508eb1c909048b840e3ecacaa2a0000909090ff555849b9010000000000000049d1ec4d89214f8d6424014983fe037513488b7c2438504889f848d1e84988410858eb34495149504d89f249b911000000000000004c8b44240848bb1100000000000000488b44244848ba304460000000000090ff12eb0449514950488b7424304883fe037529488b5c2438488d5310488b4c2408488b44244048d1e848d1ea48880411488d440001488d541201eb32488b5c2438488d53104989f24989d14c8b44240848bb1100000000000000488b44244048ba3044600000000000909090ff12488b44240848ba701e600000000000909090ff12488b4424084883c450c390909090|@313,8191|27,0,1 56,0,1 132,0,$303+202 150,0,0 160,0,65 173,0,I11 204,0,@69 220,0,0 273,0,8 288,0,8 303,0,I198 394,0,8 409,0,I198 429,0,I47 304:S25|42617365436f6465547265652e707265747479283229283229 305:C6,304|90909090909090483b65187303ff5548a8017503ff55704883f8017d6e4883fb01750c49be0500000000000000eb2e4883fbfd750c49be1100000000000000eb1c4883fbff750c49be1500000000000000eb0a49be210000000000000049bd01000000000000004989c44d23e541f6c4017503ff55704d89ec4c2be04d8d64240170f04d89f04c89e3eb05e93e00000048b801000000000000009090ff15b60000004d8d7fe84c3b7d107303ff554049c747f8020000004d89fb4989430849c703fd0000004c89d8ff25920000004883fb01750c49be0500000000000000eb2e4883fbfd750c49be1100000000000000eb1c4883fbff750c49be1500000000000000eb0a49be21000000000000004d89f04889c348b801000000000000009090ff1542000000ff254400000090909090|@307,8191,@308,@306,@308,@306|37,0,2 55,0,8 73,0,10 85,0,16 95,0,0 146,0,0 214,0,2 232,0,8 250,0,10 262,0,16 278,0,0 306:C2,408|90909090909090483b65187303ff55484883f801750b48b8b01e600000000000c35048ff3049be01000000000000004883f80175054d89f5eb2e41f6c6017503ff55704d89f54983c50270f4488b40084d89ee483b65187303ff5548ebd149bd010000000000000049f7c501000000741441f6c5017503ff55704983fd017c054d89eceb1748b840e3ecacaa2a0000ff555849bc01000000000000004983fc037509488b04244883c410c3498d4424204c8d70fe4d89f549c1ed034983cd01495448ff750849bb4246edacaa2a000049536a014889650849b8010000000000000048bb83000000000000004c89e848ba7015600000000000ff124989c248ff742410488f4508eb1c909048b840e3ecacaa2a0000909090ff555849ba010000000000000049d1ec4d89224f8d6424014952495149b81100000000000000488b7c24384883ff017502eb32488b742408488b1f48d1eb49d1e84a881c06488d5c1b014f8d440001498d5002488b7f084989d0483b65187303ff5548ebc6488b44240848ba701e60000000000090ff12488b4424084883c440c3|@312,8191|24,0,I48 39,0,0 96,0,0 135,0,@69 148,0,0 199,0,$306+266 217,0,0 227,0,65 240,0,I11 268,0,@69 284,0,0 309,0,8 387,0,I47 307:S10|496e742e666d74283229 308:C2,400|90909090909090483b65187303ff5548505349504c89c3488b44240848ba302e6000000000009090ff12a8017503ff55704883f8157d52a8017503ff55704989c54983c56070f441f6c5017503ff55704983fd017d02eb1441f6c5017503ff55704981fdff0100007f02eb1848b8f048edacaa2a000090ff555849be01000000000000004d89eeeb66a8017503ff55704989c64981c68200000070f141f6c6017503ff55704d89f54983ed1470f441f6c5017503ff55704983fd017d02eb1441f6c5017503ff55704981fdff0100007f02eb1948b8f048edacaa2a00009090ff555849be01000000000000004d89ee4c8b6424084c8b1c2449544d23e341f6c401495c7503ff55704d3be37d2c4d8d7fe84c3b7d107303ff554049c747f8020000004d89fa4c8b4c24104d894a084d89324c89d04883c418c349564c89db4c89e048baf02d60000000000090ff124d8d7fe84c3b7d107303ff554049c747f8020000004d89fa4c8b4c24184d894a084c8b04244d89024c8b4424084889c34c89d04883c420e97dfeffff909090909090|@311,8191|30,0,I110 110,0,@309 124,0,0 213,0,@309 228,0,0 323,0,I109 309:O3|@7380,@310,0 310:S3|436872 311:S14|496e742e746f4368617273283329 312:S31|4c696272617279537570706f72742e737472696e67496d706c6f6465283129 313:S4|5e283229 314:C2,32|90909090909090483b65187303ff5548488b5808488b00488b5208ff22909090|@315,8191| 315:S25|42617365436f6465547265652e707265747479283229283129 316:S5|454c53453a 317:S4|43415345 318:S3|29207b 319:S6|4d555455414c 320:S5|20414e4420 321:S9|524543434f4e535452 322:S10|434f4e5441494e455220 323:S13|534554434f4e5441494e455228 324:S15|5455504c45434f4e5441494e455228 325:C4,248|90909090909090483b65187303ff55484c8b72f8525053495048b8583cedacaa2a0000498b563090ff124c8b6c24184d8b65f849ff74241848bb5100000000000000488b44240890ff15d2000000488b14249090ff124c8b5c24204d8d7fe04c3b7d107303ff554049c747f8030000004d89fa49b9504cedacaa2a00004d890a4d8b43f84d894210498b7bf049897a084c8b442410488b5c24184c89d04c89daff1582000000488b742420488b5ef848b8103dedacaa2a0000488b13ff12488b542420488b4af848b85300000000000000488b5118909090ff12488b4424204c8b70f848b80100000000000000498b56104883c428ff2290|@351,8191,@303,@349|27,0,@261 58,0,40 117,0,@326 177,0,@268 201,0,41 229,0,0 326:C2,32|90909090909090483b65187303ff5548488b5a10488b5208ff22909090909090|@327,8191| 327:S37|42617365436f6465547265652e7072657474792832297072696e744c697374283329283129 328:S22|42617365436f6465547265652e707265747479283229 329:C3,264|90909090909090483b65187303ff55484c8b72f8525053495048b8583cedacaa2a0000498b563090ff124c8b6c24184d8b65f849ff74241848bb5100000000000000488b44240890ff15e2000000488b14249090ff124c8b5c2420498b5bf8488b442418498b53f0ff124c8b5424204d8b4af848b8203eedacaa2a0000498b5118909090ff124c8b442420498b78f848b8103dedacaa2a0000488b17ff12488b742420488b5ef8488b442410488b56f0ff12488b5c2420488b53f848b8103dedacaa2a0000488b12ff12488b4c2420488b41f84c8b701848b853000000000000004c89f2ff124c8b6c24204d8b65f848b80100000000000000498b5424104883c428ff2290909090|@330,8191,@303|27,0,@261 58,0,40 117,0,@279 145,0,@268 189,0,@268 217,0,41 241,0,0 330:S34|42617365436f6465547265652e7072657474792832297072696e7444696164283329 331:C2,704|90909090909090483b65187303ff55484883f801750b48b8b01e600000000000c34c8b70084983fe017504488b00c35049bd01000000000000004883f80175054d89eceb544c8b3049f7c601000000740c49bc0300000000000000eb084d8b264f8d6424014d89eb4d23dc41f6c3017503ff55704d8d5dff4d03dc70f44d89dd488b4008483b65187303ff5548ebab49bc01000000000000004983fc01750f48b8b01e6000000000004883c408c34983fc03755d4c8b1c244983fb01751a48b88051edacaa2a0000909090ff555848b80100000000000000498b1b48b8b01e60000000000048bab01860000000000090ff124883f80174234d8b5b08483b65187303ff5548ebb148b80100000000000000e90d0000004883c408c3498b034883c408c349f7c401000000741441f6c4017503ff55704983fc017c054d89e3eb1848b840e3ecacaa2a000090ff555849bb0100000000000000498d7b20488d77fe4889f348c1eb034883cb01495348ff750848ba3e50edacaa2a0000526a014889650849b801000000000000004889d848bb830000000000000048ba701560000000000090ff124889c148ff742410488f4508eb1c909048b840e3ecacaa2a0000909090ff555848b9010000000000000049d1eb4c89194f8d5c1b0151495649bd11000000000000004c8b6424304983fc017502eb6c4d8b1c2449f7c301000000740c49ba0300000000000000eb084d8b134f8d5412014983fa03751b4c8b4c240849d1eb49d1ed4f881c294f8d5c1b014f8d6c2d01eb35495549ff74240849524d89e94c8b44242048bb11000000000000004c89d848ba3044600000000000eb05e9390000009090ff12eb09495549ff74240849524c8b442410488b3c24488d77ff4903f04c8b6424084989f54883c418483b65187303ff5548e94effffff488b44240848ba701e6000000000009090ff12488b4424084883c438c390909090|@334,8191|24,0,I48 50,0,0 83,0,1 145,0,0 161,0,I48 192,0,@332 208,0,0 221,0,I48 231,0,I24 265,0,0 322,0,@69 336,0,0 371,0,$331+438 388,0,0 401,0,65 411,0,I11 440,0,@69 456,0,0 480,0,8 516,0,1 586,0,8 599,0,I198 678,0,I47 332:O3|103,@333,I48 333:S4|4661696c 334:S16|537472696e672e636f6e636174283129 335:C7,808|90909090909090483b65187303ff554848f7c001000000745a48f7c00100000074054989c6eb1948b86055edacaa2a00009090ff555849be010000000000000041f6c6017503ff55704983fe017d2948b8d802edacaa2a00004989c54d23ee41f6c5017503ff55704c8d68ff4d03ee70f4eb08e9160000004d89f548bb03000000000000004c89e8ff25c202000048f7c001000000741d4989c548b8b055edacaa2a0000909090ff555849be01000000000000004989c6504c89f348b8cd0000000000000048ba303860000000000090ff124883f801746d49be01000000000000004981fe01020000751948b8f055edacaa2a00009090ff555848b8010000000000000049564c89f048baf04160000000000090ff124c8b6c24084c3be8753448bbffffffffffffffff488b04249090ff15220200004889c348b83856edacaa2a0000eb05e9410000004883c410ff250c0200004c8b242441f6c4017503ff55704d89e64983c60270f44883c408483b65187303ff5548e966ffffff48b801000000000000004883c410c34c8b342449f7c601000000741848b8b055edacaa2a000090ff555849bd01000000000000004d89f54d0fb665ff4f8d6424014d89e34983e3074983fb01756949f7c601000000741948b8b055edacaa2a00009090ff555849ba01000000000000004d89f24d8b4af849c1e10849c1e9084f8d4c090141f6c1017503ff55704983f9017d2948bfd802edacaa2a00004989f84d23c141f6c0017503ff55704c8d47ff4d03c170f4eb08e9dd0000004d89c841f6c0017503ff55704983f8037c6e49f7c601000000741948b8b055edacaa2a00009090ff555849b801000000000000004d89f0498b3848f7c701000000756a48f7c701000000741848b8b055edacaa2a000090ff555848be01000000000000004889fe480fb65eff488d5c1b014889da4883e2074883fa057550eb05e9580000004889fb48b8d30000000000000048ba3038600000000000ff124889c348b85056edacaa2a0000eb05e91c0000009090ff157600000048bb53000000000000004883c408ff256a00000048b86856edacaa2a00004883c408c348b86856edacaa2a00004883c408c390909090|@346,8191,@305,@305,@303,@303,@303|41,0,@336 56,0,0 81,0,@167 125,0,1 156,0,@339 172,0,0 189,0,102 199,0,I150 218,0,0 237,0,@341 252,0,0 267,0,I189 290,0,-1 315,0,@343 382,0,0 410,0,@339 424,0,0 469,0,@339 484,0,0 529,0,@167 597,0,@339 612,0,0 646,0,@339 660,0,0 706,0,105 716,0,I150 731,0,@344 756,0,41 776,0,@345 791,0,@345 336:O3|@7381,@338,@337 337:S7|746f53686f7274 338:S4|43617374 339:O3|@7381,@338,@340 340:S9|746f41646472657373 341:O3|@7377,@215,@342 342:S17|556e6b6e6f776e2052545320656e747279 343:S4|20525453 344:S2|2028 345:S6|3c6c6f6e673e 346:S28|42617365436f6465547265652e737472696e674f66576f7264283129 347:C3,344|90909090909090483b65187303ff55484c8b72f85250534950495148b8583cedacaa2a0000498b5630909090ff124c8b6c24204d8b65f849ff74241848bb5100000000000000488b44240890ff152e010000488b14249090ff124c8b5c2428498b5bf8488b442420498b53f0ff124c8b5424284d8b4af848b8203eedacaa2a0000498b5118909090ff124c8b442428498b78f848b8103dedacaa2a0000488b17ff12488b742428488b5ef8488b442418488b56f0ff12488b5c2428488b53f848b8203eedacaa2a0000488b5218909090ff12488b4c2428488b41f84c8b3048b8103dedacaa2a00004c89f290ff124c8b6c2428498b5df8488b442410498b55f0ff124c8b6424284d8b5c24f848b8103dedacaa2a0000498b13909090ff124c8b5424284d8b4af848b85300000000000000498b5118909090ff124c8b442428498b78f848b80100000000000000488b57104883c430ff2290|@348,8191,@303|29,0,@261 62,0,40 121,0,@279 149,0,@268 193,0,@279 224,0,@268 270,0,@268 297,0,41 325,0,0 348:S35|42617365436f6465547265652e7072657474792832297072696e745472696164283429 349:C2,224|90909090909090483b65187303ff55484983f801750b48b80100000000000000c34d8b70084983fe01750b4989c5498b004c89eaff224c8b6af8525053495649ff3048b8103dedacaa2a0000498b5530ff12488b0424488b54241890ff124c8b6424204d8b5c24f848b8103dedacaa2a0000498b13909090ff124c8b5424204d8b4af8488b442410498b5118ff124c8b442420498b78f848b80100000000000000488b5710909090ff12488b742420488b5ef848b8b027edacaa2a0000488b13ff124c8b442408488b5c2410488b442418488b5424204883c428e928ffffff90|@350,8191|24,0,0 68,0,@268 106,0,@268 153,0,0 181,0,@257 350:S30|42617365436f6465547265652e707265747479283229704c697374283329 351:S34|42617365436f6465547265652e7072657474792832297072696e744c697374283329 352:C2,240|90909090909090483b65187303ff554852505348b85100000000000000488b5318909090ff124c8b7424084d8b264983fcff750a4d8b5e084d8b6b10eb104983fc0375064d8b6e10eb044d8b6e084c8b5c2410488b1c244c89e8498b53089090ff124c8b142448b8203eedacaa2a0000498b5218ff124c8b0c2448b8b027edacaa2a0000498b1190ff124c8b442408498b304883feff750a498b5808488b7b20eb0a48bf380dedacaa2a0000488b5c2410488b5308488b1c244889f8ff12488b0c2448b8b027edacaa2a0000488b1190ff12488b04244c8b701848b853000000000000004c89f24883c418ff22909090|@353,8191|21,0,40 104,0,@279 124,0,@257 164,0,@217 196,0,@257 220,0,41 353:S28|42617365436f6465547265652e7072657474794f707456616c283229 354:O3|@7377,@215,@355 355:S21|6368616e67654c3a20556e6b6e6f776e20636f6465 356:S25|434f44455452454528292e6368616e67654c6576656c283229 357:C3,120|90909090909090483b65187303ff55484883f801750b48b80100000000000000c35248ff7008488b5af0488b00488b52f8909090ff156600000050488b442408488b542410e8bdffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fe498946084c8b2c244d892e4c89f04883c418c3909090|@417,8191,@228|24,0,0 358:S35|434f44455452454528292e6368616e67654c6576656c2832296368616e67654c283229 359:C2,1752|90909090909090488dbc2460ffffff483b7d187303ff55504d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fe4989064d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fd49c74500010000004d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fc49c70424010000004d8d7fc84c3b7d107303ff554049c747f8060000004d89fb49bad063edacaa2a00004d8913498943284d8963204d896b184d89731049895b0848bb07000000000000004989dd4c23e841f6c5017503ff557050524889da48d1fa488d40ff48f7ea4c8d68015a5870e64d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fc49c70424010000004d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fa49c702010000004d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89fb48c703010000004d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89fa48c7020100000041f6c5017503ff55704c89e94883c10270f44989c14c89c6535249b87069edacaa2a000048bb81000000000000004889c848ba701560000000000090ff124c89284d8d7fc84c3b7d107303ff554049c747f8060000004c89fb48ba8869edacaa2a0000488913488b4c240848894b284c896b204c896318488943104c8953084d8d7fc04c3b7d107303ff554049c747f8070000004d89f848bf006cedacaa2a00004989384d896830498940284d8950204d8960184d895810488b14244989500849bd07000000000000004c89ef4923f940f6c7017503ff557050524c89ea48d1fa498d41ff48f7ea488d78015a5870e640f6c7017503ff55704989fd4983c50270f4505349505749b8010000000000000048bb81000000000000004c89e848ba7015600000000000ff124c8b04244c89004d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89ff48c707010000004d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89fb48c703010000004d8d7fd84c3b7d107303ff554049c747f8040000004c89fa48b9786eedacaa2a000048890a48895a184889421048897a084d8d7fd04c3b7d107303ff554049c747f8050000004d89fd48b9e86fedacaa2a000049894d004d89452049895d184989451049897d084d8d7fd04c3b7d107303ff554049c747f8050000004c89f949b83072edacaa2a00004c89014889592048894118488979104c8b04244c8941084d8d7fd04c3b7d107303ff554049c747f8050000004d89f8495156495649534954495250575352495551495049b95874edacaa2a00004d8908498978204c8b4c24684d89481849894010498958084d8d7fc04c3b7d107303ff554049c747f8070000004c89f849b99876edacaa2a00004c89084c8b8c24900000004c89483048895028488b942480000000488950204889781848895810488948084d8d7f904c3b7d107303ff554049c747f80d0000004c89f948be107cedacaa2a0000488931488b742478488971604c8951584c8961504c8949484c8bb424880000004c8971404c8b5c24504c89593848897930488959284c894120488951184c8b4424704c894110488b542448488951084d8d7fa84c3b7d107303ff554049c747f80a0000004d89fb48ba007fedacaa2a000049891349897b4849895b404d8963384d897330498943284d894b20498973184d896b104d8953084d8d7fe04c3b7d107303ff554049c747f8030000004c89fa49bc7080edacaa2a00004c89224c8b6424604c8962104c895a084d8d7fd04c3b7d107303ff554049c747f8050000004d89fc49ba1881edacaa2a00004d8914244c8b5424604d895424204d895c241849894424104d894424084d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fa49c702010000004d8d7fa84c3b7d107303ff554049c747f80a0000004d89f949bef081edacaa2a00004d89314d89514849897940498959384c8b7424404d8971304c8bb424880000004d8971284c8bb424900000004d897120498971184d8969104c8b7424384d8971084d8d7f984c3b7d107303ff554049c747f80c0000004d89fe48be6883edacaa2a000049893649897e5849895e50488b5c247849895e484d896e404c8b6c24384d896e38488b7c244849897e304d895628488b742460498976204d895e18498946104d8946084d8d7fe84c3b7d107303ff554049c747f8020000004c89fb48b80085edacaa2a00004889034c895b084d8d7fe84c3b7d107303ff554049c747f8020000004d89fd49bb9085edacaa2a00004d895d004d894d084c8b54245849891a49b92886edacaa2a00004d894a084d89721049894a184d896220498952284d896a3048b801000000000000004881c498000000c39090|@415,8191|156,0,@360 189,0,3 408,0,@366 418,0,64 431,0,I11 471,0,@367 533,0,@371 574,0,3 645,0,0 655,0,64 668,0,I11 783,0,@373 832,0,@377 886,0,@381 963,0,@385 1021,0,@389 1098,0,@396 1211,0,@398 1284,0,@400 1334,0,@402 1433,0,@404 1532,0,@406 1633,0,@408 1674,0,@410 1700,0,@412 1734,0,0 360:C5,856|90909090909090483b65187303ff55484c8b304983feff756f5248ff70104c8b6a184d8b65004983fc01751b48b80100000000000000488d54241090ff153e0300004883c410c34d8b1c244d8b134983faff75714c8b4a104d8b01488b78084c89c64823f740f6c6017503ff55704c89c6482bf7488d760170f149893140f6c7017503ff5570eb05e9460100004883ff017f0f48b801000000000000004883c410c3488b5c24085748b84100000000000000488b53089090ff12488b1424f6c201750aeb05e92a000000ff55704889d74883ef0270ed4883c408483b65187303ff5548eb9848b801000000000000004883c418c34983fa017515498b4308488d54241090ff157e0200004883c410c34c8b4a104d8b01534923d8f6c3015b7503ff5570493bd87f6f498b39488b70084889fb4823def6c3017503ff55704889fb482bde488d5b0170f149891940f6c6017503ff55704883fe017f0f48b801000000000000004883c410c3488b5424085648b84100000000000000488b52089090ff12488b0c24f6c1017503ff55704889ce4883ee02eb05e92000000070ed4883c408483b65187303ff5548eb9f48b801000000000000004883c418c3498b4308488d542410909090ff15c20100004883c410c34983fe01756e4c8b6a104d8b6500534923dcf6c3015b7503ff5570493bdc7f0c49bbe005edacaa2a0000eb6d4c8b5a204d8b134c8b48084d89d04d23c141f6c0017503ff55704d8d42ff4d03c170f44d89035050488b78104883ff01741b498b334889e348c703010000004889e148897108eb19e97b000000498b334889e348c703030000004889e1488971084d8d7fe84c3b7d10730aeb05e922000000ff554049c747f8020000004d89fb4c8b24244d89234c8b5424084d8953084883c4104c8b4a184d8b014d8d7fe84c3b7d107303ff554049c747f8020000004c89ff4c8947084c891f49893948b80100000000000000c34983fefd75514c8b6a104d8b6500534923dcf6c3015b7503ff5570493bdc7e0a49c7450001000000eb234d8b5d004d89da4c23d341f6c2017503ff55704d89da4c2bd34d8d520170f14d895500488b4008488b5208ff224c8b6a184d8b65004983fc01751848b87867edacaa2a000090ff555848b801000000000000004d8b5c24084d895d0048b80100000000000000c3|@364,8191,@363,@363,@363|46,0,0 149,0,0 170,0,32 231,0,0 349,0,0 370,0,32 431,0,0 501,0,@193 702,0,0 814,0,@361 828,0,0 847,0,0 361:O3|@7377,@215,@362 362:S32|706f705072696e74537461636b3a207072696e7420737461636b20656d707479 363:C2,240|90909090909090483b65187303ff55484c8b72f84c8b6af04d89ec4c23e041f6c4017503ff55704d8d65ff4c03e070f4498b46204c89204c8b204d8b5e284d89da4d23d441f6c2017503ff55704d89da4d2bd44d8d520170f14d8b66104d8914245248b81500000000000000498b5608ff124c8b1c244d8b53f84d8b4a204d8b0141f6c0017503ff55704983f8017f0f48b801000000000000004883c408c3488b3c24488b77f8495048b84100000000000000488b560890ff12488b1c24f6c3017503ff55704989d84983e80270f44883c408483b65187303ff5548eba348b801000000000000004883c410c3909090|@365,8191|100,0,10 146,0,0 171,0,32 224,0,0 364:S39|5072657474795072696e7465722e7072657474795072696e742833297072696e744f7574283229 365:S52|5072657474795072696e7465722e7072657474795072696e742833297072696e744f75742832297573654e65774c696e65283129 366:O2|@198,0 367:C2,456|90909090909090483b65187303ff55484c8b72284d8b2e4d89ec4d23e041f6c4017503ff55704d8d65ff4d03e070f44d89264c8b42084d8b2841f6c5017503ff55704d89ec4983c40270f4525053495048ff7220488b1c244c89e048ba302e600000000000909090ff124883f8017502eb534c8b1c2441f6c3017503ff55704983fb017c0c49ba0300000000000000eb0a49ba0100000000000000a8017503ff55704883f8017c0c49b90300000000000000eb0a49b901000000000000004d3bd17402eb054989c3eb1b4989c24d23d341f6c2017503ff55704c8d50ff4d03d370f44d89d34c8b4c24084d89194c8b442420498b7808488b37498b5818488b1352480bd6f6c2015a7503ff5570483bf2751a48b8886bedacaa2a0000909090ff555848b80100000000000000488b0f4d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b7424104c8970084c8b6c24184c8928f6c1017503ff55704883f9017d02eb1c4d8b60104d8b1c24514923cbf6c101597503ff5570493bcb7d02eb1848b860d6ecacaa2a000090ff555848b80100000000000000f6c1017503ff55704989ca4983c20270f44b894494fc48b801000000000000004883c428c390909090909090|@370,8191|93,0,I110 135,0,1 147,0,0 170,0,1 182,0,0 276,0,@368 292,0,0 390,0,@49 404,0,0 436,0,0 368:O3|@7377,@215,@369 369:S16|746f6b656e2071756575652066756c6c 370:S38|5072657474795072696e7465722e7072657474795072696e74283329656e5175657565283329 371:C2,520|90909090909090483b65187303ff5548488b42184c8b3041f6c6017503ff55704d89f54983c50270f45248ff7230488b1c244c89e848ba302e60000000000090ff124883f8017502eb534c8b242441f6c4017503ff55704983fc017c0c49bb0300000000000000eb0a49bb0100000000000000a8017503ff55704883f8017c0c49ba0300000000000000eb0a49ba01000000000000004d3bda7402eb054989c4eb1b4989c34d23dc41f6c3017503ff55704c8d58ff4d03dc70f44d89dc4c8b54240841f6c4017503ff55704983fc017d02eb1e4d8b4a284d8b0149544d23e041f6c401495c7503ff55704d3be07d02eb1748b860d6ecacaa2a0000ff555849b9010000000000000041f6c4017503ff55704c89e74883c70270f4498b74b9fc4989f1498b5908f6c3017503ff55704883fb017c6e498b5220488b0a498b42184c8b3051490bcef6c101597503ff5570493bce746e4c892049ff3153488b442408498b5210ff124c8b6c24084d8b65004983fcff75324c8b5c24184d8b53084d8b0a4d8b45084c89cf4923f840f6c7017503ff5570498d79ff4903f870f449893aeb3de9500000004983fcfd75324c8b5c24184d8b53084d8b0a4c8b04244c89cfeb05e9300000004923f840f6c7017503ff5570498d79ff4903f870f449893a48b80100000000000000488b5424184883c420e910feffff48b801000000000000004883c410c39090|@372,8191|55,0,I110 95,0,1 107,0,0 130,0,1 142,0,0 243,0,@49 256,0,0 481,0,0 505,0,0 372:S38|5072657474795072696e7465722e7072657474795072696e7428332964655175657565283129 373:C2,168|488b42084c8b304c8b6a184d8b650049544d0be641f6c401495c7503ff55704d3bf4751848b8586fedacaa2a000090ff555848b801000000000000004c8b3041f6c6017503ff55704983fe017d02eb1f4c8b62104d8b1c2449534d23de41f6c301495b7503ff55704d3bf37d02eb1948b860d6ecacaa2a00009090ff555848b8010000000000000041f6c6017503ff55704d89f34983c30270f44f8b749cfc4c89f0c39090909090|@376,7685|38,0,@374 52,0,0 113,0,@49 128,0,0 374:O3|@7377,@215,@375 375:S34|5072657474795072696e7465722e7363616e546f703a20737461636b20656d707479 376:S38|5072657474795072696e7465722e7072657474795072696e742833297363616e546f70283129 377:C2,384|90909090909090483b65187303ff55484c8b72084d8b2e41f6c5017503ff55704d89ec4983c40270f45250495648ff7220488b1c244c89e048ba302e6000000000009090ff124883f8017502eb534c8b1c2441f6c3017503ff55704983fb017c0c49ba0300000000000000eb0a49ba0100000000000000a8017503ff55704883f8017c0c49b90300000000000000eb0a49b901000000000000004d3bd17402eb054989c3eb1b4989c24d23d341f6c2017503ff55704c8d50ff4d03d370f44d89d34c8b4c24084d89194c8b442418498b7808488b37498b5818488b1352480bd6f6c2015a7503ff5570483bf2751a48b8a071edacaa2a0000909090ff555848b80100000000000000488b0ff6c1017503ff55704883f9017d02eb1b498b40104c8b30514923cef6c101597503ff5570493bce7d02eb1a48b860d6ecacaa2a0000909090ff555848b80100000000000000f6c1017503ff55704989cd4983c50270f44c8b6424104e8964a8fc48b801000000000000004883c420c3909090909090|@380,8191|58,0,I110 99,0,1 111,0,0 134,0,1 146,0,0 240,0,@378 256,0,0 312,0,@49 328,0,0 365,0,0 378:O3|@7377,@215,@379 379:S34|5072657474795072696e7465722e7363616e507573683a20737461636b2066756c6c 380:S39|5072657474795072696e7465722e7072657474795072696e742833297363616e50757368283129 381:C2,368|90909090909090483b65187303ff5548488b42104c8b304c8b6a204d8b650049544d0be641f6c401495c7503ff55704d3bf4751848b8d873edacaa2a000090ff555848b801000000000000004c8b3041f6c6017503ff55704983fe017d02eb1f4c8b62184d8b1c2449534d23de41f6c301495b7503ff55704d3bf37d02eb1948b860d6ecacaa2a00009090ff555849bc010000000000000041f6c6017503ff55704d89f34983c30270f44f8b749cfc4d89f44c8b1841f6c3017503ff55704d89de4983ee0270f450495448ff7208488b1c244c89f048ba302e60000000000090ff124883f8017502eb534c8b2c2441f6c5017503ff55704983fd017c0c49bc0300000000000000eb0a49bc0100000000000000a8017503ff55704883f8017c0c49bb0300000000000000eb0a49bb01000000000000004d3be37402eb054989c5eb1b4989c44d23e541f6c4017503ff55704c8d60ff4d03e570f44d89e54c8b5c24104d892b488b4424084883c418c390|@384,8191|54,0,@382 68,0,0 129,0,@49 144,0,0 215,0,I110 255,0,1 267,0,0 290,0,1 302,0,0 382:O3|@7377,@215,@383 383:S20|7363616e506f703a20737461636b20656d707479 384:S38|5072657474795072696e7465722e7072657474795072696e742833297363616e506f70283129 385:C2,368|90909090909090483b65187303ff5548488b42204c8b304c8b6a084d8b650049544d0be641f6c401495c7503ff55704d3bf4751848b80076edacaa2a000090ff555848b801000000000000004d8b750041f6c6017503ff55704d89f44983c40270f452495548ff7218488b1c244c89e048ba302e6000000000009090ff124883f8017502eb534c8b1c2441f6c3017503ff55704983fb017c0c49ba0300000000000000eb0a49ba0100000000000000a8017503ff55704883f8017c0c49b90300000000000000eb0a49b901000000000000004d3bd17402eb054989c3eb1b4989c24d23d341f6c2017503ff55704c8d50ff4d03d370f44d89d34c8b4c24084d89194c8b442410498b7808488b3740f6c6017503ff55704883fe017d02eb1b498b5810488b13524823d6f6c2015a7503ff5570483bf27d02eb1748b860d6ecacaa2a0000ff555848b8010000000000000040f6c6017503ff55704889f14883c10270f4488b448bfc4883c418c390909090|@388,8191|54,0,@386 68,0,0 114,0,I110 155,0,1 167,0,0 190,0,1 202,0,0 315,0,@49 328,0,0 386:O3|@7377,@215,@387 387:S40|5072657474795072696e7465722e7363616e506f70426f74746f6d3a20737461636b20656d707479 388:S44|5072657474795072696e7465722e7072657474795072696e742833297363616e506f70426f74746f6d283129 389:C6,464|90909090909090483b65187303ff55485248b80100000000000000488d542408ff15d20100004883f80174704c8b342448b80100000000000000498b56089090ff124c8b2c24a8017503ff55704883f8017d02eb1b4d8b65204d8b1c24504923c3a801587503ff5570493bc37d02eb1c4989c348b860d6ecacaa2a00009090ff555849bc0100000000000000a8017503ff55704989c24983c202eb05e91e01000070ed4f8b4c94fc4d89cc4d8b0424498b384883ff037572a8017503ff55704883f8017d02eb1a498b7520488b1e504823c3a801587503ff5570483bc37d02eb0d48b860d6ecacaa2a0000ff5558a8017503ff55704889c24883c20270f448b9c078edacaa2a000048894c96fc48b80100000000000000488d542408ff15de0000004883f8017425eb05e97e00000048b80100000000000000488b1424e8c5feffff483b65187303ff5548ebc0488b04244c8b70184d8b2e4c8b60104d8b1c2449534d0bdd41f6c301495b7503ff55704d3beb74214c8b500848b801000000000000004c89d29090ff12488d54240890ff157200000048b80100000000000000488b14244883c408e95afeffff488d5424089090ff15560000004883c408c348b801000000000000004883c408c39090|@392,8191,@393,@393,@391,@391|19,0,0 50,0,0 117,0,@49 132,0,0 227,0,@49 256,0,@390 271,0,0 305,0,0 379,0,0 408,0,0 449,0,0 390:O2|@198,1 391:C2,264|4c8b72f8a8017503ff55704883f8017d02eb1b4d8b6e204d8b6500504923c4a801587503ff5570493bc47d02eb1a4989c448b860d6ecacaa2a0000ff555849bd0100000000000000a8017503ff55704989c44983c40270f44f8b5ca5fc4d89dd4d8b66304d8b1c244d8b55084d89d14d23cb41f6c1017503ff55704d8d4aff4d03cb70f44d8d7fe84c3b7d107303ff554049c747f8020000004d89fb4d894b084d8b4d004d890ba8017503ff55704883f8017d02eb1a4d8b4620498b38504823c7a801587503ff5570483bc77d02eb1848b860d6ecacaa2a000090ff555848b80100000000000000a8017503ff55704889c74883c70270f44d895cb8fc48b80100000000000000c3|@395,8165|51,0,@49 64,0,0 210,0,@49 224,0,0 255,0,0 392:S43|5072657474795072696e7465722e7072657474795072696e74283329736574546f6b656e53697a65283129 393:C2,232|90909090909090483b65187303ff5548488b42f84c8b70184d8b2e4c8b60104d8b1c2449534d0bdd41f6c301495b7503ff55704d3beb750b48b80100000000000000c348ff70204c8b502848b801000000000000004c89d2ff12a8017503ff55704883f8017d02eb1a4c8b0c244d8b01504923c0a801587503ff5570493bc07d02eb1948b860d6ecacaa2a00009090ff555849b90100000000000000a8017503ff55704889c74883c70270f4498b74b9fc4989f1498b19488b134883fa01750c48b90300000000000000eb0a48b901000000000000004889c84883f0024883c408c3909090909090|@394,8191|58,0,0 77,0,0 133,0,@49 148,0,0 194,0,1 206,0,0 394:S57|5072657474795072696e7465722e7072657474795072696e74283329736574546f6b656e53697a65283129746f704e6f74426567696e283129 395:S56|5072657474795072696e7465722e7072657474795072696e74283329736574546f6b656e53697a6528312961646a75737453697a65283129 396:C2,640|90909090909090483b65187303ff554848f7c001000000740c49be0300000000000000eb084c8b304f8d7436014c8b6a304d8b65004c8b5a284d8b1349544d0be241f6c401495c7503ff55704d3be275314d8d7fe84c3b7d107303ff554049c747f8020000004d89fc498944240849c70424fdffffff4c89f34c89e0488b5208ff224d8d7fe84c3b7d107303ff554049c747f8020000004d89f94989410849c701fdffffff5249564d89f04c89f34c89c8488b5260909090ff124c8b442408498b7858488b37498b5850488b1352480bd6f6c2015a7503ff5570483bf27471498b4848488b014d8b70404d8b2e4989c44d23e541f6c4017503ff55704989c44d2be54d8d64240170f04d8b58384d8b1349544d23e241f6c401495c7503ff55704d3be27e684d8b4830498b31498b5028488b0250480bc6a801587503ff5570483bf0746e48b80100000000000000eb05e91a010000498b5020909090ff124c8b742408a8017503ff55704883f8017d02eb204d8b6e184d8b6500504923c4a801587503ff5570493bc47d07eb1fe9dd0000004989c448b860d6ecacaa2a0000ff555849bd0100000000000000a801750aeb05e9b8000000ff55704989c34983c30270ed4f8b549dfc4d89d54d8d7fe84c3b7d107303ff554049c747f8020000004d89f949c74108cf0700004d8b45004d8901a8017503ff55704883f8017d02eb1a498b7e18488b37504823c6a801587503ff5570483bc67d02eb0f48b860d6ecacaa2a00009090ff5558a8017503ff55704889c34883c30270f44c894c9ffc48b80100000000000000498b5610909090ff12483b65187303ff5548e95afeffff48b801000000000000004883c410c348b801000000000000004883c410c39090|@397,8191|27,0,1 326,0,0 407,0,@49 420,0,0 541,0,@49 577,0,0 610,0,0 625,0,0 397:S40|5072657474795072696e7465722e7072657474795072696e74283329616464537472696e67283129 398:C2,256|90909090909090483b65187303ff55484c8b72484d8b2e4c8b62404d8b1c2449534d0bdd41f6c301495b7503ff55704d3beb752d4c8b6a3849c74500010000004c8b5a0849c703010000004c8b523049c702010000004c8b4a2049c7010100000052505348b80100000000000000488b52289090ff124d8d7fe04c3b7d107303ff554049c747f8030000004d89fa4c8b0c244d894a104c8b4424084d89420849c702ffffffff488b7c2410488b7720488b1e48ba01000000000000004889d94823caf6c1017503ff55704889d1482bcb488d490170f14889cb4c89d0488b5718ff12488b4424104c8b70084c8b6810498b064c89ea4883c418ff229090909090|@399,8191|102,0,0 180,0,0 399:S36|5072657474795072696e7465722e7072657474795072696e74283329627265616b283229 400:C2,56|90909090909090483b65187303ff5548488b4210a8017503ff55704989c64983c60270f448bb01000000000000004c89f0488b5208ff2290|@401,8191|38,0,0 401:S40|5072657474795072696e7465722e7072657474795072696e742833296c696e65427265616b283129 402:C2,104|90909090909090483b65187303ff5548488b4220a8017503ff55704989c64983c60270f45248bb01000000000000004c89f0488b52189090ff124c8b2c2448b80100000000000000498b5510ff124c8b242448b80100000000000000498b5424084883c408ff2290|@403,8191|39,0,0 64,0,0 84,0,0 403:S40|5072657474795072696e7465722e7072657474795072696e74283329656e6453747265616d283129 404:C2,256|90909090909090483b65187303ff55484c8b72484d8b2e41f6c5017503ff55704d89ec4983c40270f44d89264c8b6a404d8b65004c8b5a384d8b1349544d0be241f6c401495c7503ff55704d3be2752d4c8b623049c70424010000004c8b520849c702010000004c8b4a2849c701010000004c8b422049c700010000004d8d7fe04c3b7d107303ff554049c747f8030000004d89f9498959104989410849c701010000004c8b4220498b1848b801000000000000004989dc4c23e041f6c4017503ff55704989c44c2be34d8d64240170f05249b801000000000000004c89e34c89c8488b52189090ff124c8b1c244d8b5308498b02498b53104883c408ff2290|@405,8191|173,0,0 212,0,0 405:S41|5072657474795072696e7465722e7072657474795072696e74283329626567696e426c6f636b283229 406:C2,296|90909090909090483b65187303ff5548488b42584c8b304c8b6a504d8b650049544d0be641f6c401495c7503ff55704d3bf475205248bb010000000000000048b86006edacaa2a0000488b5230909090ff12eb3a5249b8010000000000000048bbffffffffffffffff48b86006edacaa2a0000488b524890ff124c8b1c244d8b5338498b02498b5340909090ff124c8b0c244d8b4128498b3840f6c7017503ff55704889fe4883ee0270f4498930498b184883fb01755b498b5120f6c2017503ff55704889d14883c10270f448bb01000000000000004889c8498b5118909090ff12488b04244c8b701048b801000000000000004c89f290ff124c8b2c2448b80100000000000000498b55084883c408ff2248b801000000000000004883c408c390909090909090|@407,8191|55,0,0 65,0,@198 87,0,0 97,0,-1 107,0,@198 206,0,0 236,0,0 256,0,0 276,0,0 407:S39|5072657474795072696e7465722e7072657474795072696e74283329656e64426c6f636b283129 408:C2,32|90909090909090483b65187303ff5548488b5808488b00488b5208ff22909090|@409,8191| 409:S36|5072657474795072696e7465722e7072657474795072696e74283329627265616b283129 410:C2,32|90909090909090483b65187303ff5548488b5808488b00488b5208ff22909090|@411,8191| 411:S41|5072657474795072696e7465722e7072657474795072696e74283329626567696e426c6f636b283129 412:O1|@413 413:C2,16|48b80100000000000000c39090909090|@414,1|2,0,0 414:S38|5072657474795072696e7465722e7072657474795072696e74283329656c6964696e67283129 415:S28|5072657474795072696e7465722e7072657474795072696e74283329 416:C3,120|90909090909090483b65187303ff55484883f801750b48b80100000000000000c35248ff7008488b5af0488b00488b52f8909090ff156600000050488b442408488b542410e8bdffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fe498946084c8b2c244d892e4c89f04883c418c3909090|@417,8191,@228|24,0,0 417:S11|4c6973742e6d6170283229 418:O1|@442 419:O1|@420 420:O2|-1,@421 421:O5|0,@423,@434,@7382,@422 422:O2|-7,@435 423:O2|@425,@424 424:O2|@431,0 425:C4,128|90909090909090483b65187303ff55484c8b70104983fe01754a4c8b284c8b4808498b5d00488b4208909090ff157600000048f7c00100000075054c8b00eb1848b8f009edacaa2a000090ff555849b801000000000000004c89c34c89c8ff254c00000048b83889edacaa2a000090ff555848b8010000000000000090909090|@429,8191,@428,@216|66,0,@213 80,0,0 102,0,@426 116,0,0 426:O3|@7377,@215,@427 427:S36|6f75746572206c6576656c207265616368656420696e206c6f6f6b75704f6c6441646472 428:C2,280|4c8b304d8b2e4d8b65004983fcff75704d8b5d084d8b13534923daf6c3015b7503ff5570493bda7d5cf6c3017503ff55704883fb017d02eb174d8b13534923daf6c3015b7503ff5570493bda7d02eb1848b860d6ecacaa2a000090ff555848b80100000000000000f6c3017503ff55704989da4983c20270f44b8b5c93fceb0ae90e000000e9040000004889d8c3488b4008c34d8b5d084d8b53f849c1e20849c1ea084f8d541201534923daf6c3015b7503ff5570493bda7d57f6c3017503ff55704883fb017d02eb254d8b53f849c1e20849c1ea084f8d541201534923daf6c3015b7503ff5570493bda7d02eb1948b860d6ecacaa2a00009090ff555848b801000000000000004d8b549bfc4c89d0c3488b4008c39090|@430,7945|82,0,@49 96,0,0 241,0,@49 256,0,0 429:S50|434f44455452454528292e67656e436f6465283229696e736572746564436f64652d6c6f6f6b75704f6c6441646472283129 430:S19|5374726574636841727261792e737562283229 431:O1|@432 432:O2|0,@433 433:O10|0,0,0,0,0,0,0,0,0,0 434:O5|-5,1,1,0,0 435:O8|@436,@197,0,0,1,0,0,0 436:O4|4,@438,@437,1 437:O2|-3,I229 438:O2|@440,@439 439:O2|@441,0 440:O2|-3,1 441:O5|-5,-1,1,0,0 442:O2|0,@440 443:O2|@454,@453 444:C3,536|90909090909090483b65187303ff55484989c64d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c894010488958084c8930524c89ca9090ff124c8b204983fcff750a4c8b58084d8b6b20eb0a49bd380dedacaa2a00004d8b55004983fafd750c49bb888fedacaa2a0000eb4b4983fcff750a4c8b40084d8b4808eb0a49b9e88fedacaa2a00004d8d7fe04c3b7d107303ff554049c747f8030000004d89fb49b84890edacaa2a00004d8903488b3c2449897b104d894b084983fcff750d488b70084889c3488b4610eb194983fc0375094889c6488b4610eb074889c6488b46084889f34c89e94d89d8488d54240890ff1546010000488b334883feff7509488b5308488b3aeb164883fe037506488b7b08eb0a48bf01000000000000004883feff750a4c8b7308498b5618eb244d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89fa48c702010000004d8d7fd04c3b7d107303ff554049c747f8050000004d89fe49894e2049895618498946104d89460849893e4c8b294983fdfd75604883ff01752b4989c44d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89600848c700010000004883c408c34989c44d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c8960104889780848c700030000004883c408c34d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89700848c700ffffffff4883c408c3909090909090|@451,8191,@450|83,0,@217 103,0,@445 131,0,@447 165,0,@449 282,0,0 445:O1|@446 446:C2,24|48b8a80dedacaa2a000090ff555848b80100000000000000|@222,1|2,0,@220 16,0,0 447:O1|@448 448:C2,24|48b8a80dedacaa2a000090ff555848b80100000000000000|@222,1|2,0,@220 16,0,0 449:C2,40|90909090909090483b65187303ff55484c8b4a084c8b4010488b5808488b00488b5210ff22909090|@206,8191| 450:C2,296|90909090909090483b65187303ff55484c8b304983fef7755c4c8b6af84c8b600849f7c40100000074054d89e3eb1948b86055edacaa2a00009090ff555849bb01000000000000004d8b55084f8b4c9afc4d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89480848c700fbffffffc34983fe0d7570525048ff7010488b4008e87dffffff4c8b284983fdfb755d4c8b600849f7c401000000741848b8b055edacaa2a000090ff555849bb01000000000000004d89e34c8b142449f7c20100000074054d89d1eb1748b86055edacaa2a0000ff555849b901000000000000004b8b548bfceb0ae937000000e9280000004d8d7fe84c3b7d107303ff554049c747f8020000004c89f84889500848c700fbffffff4883c418c3488b4424084883c418c3c3|@452,8069|49,0,@336 64,0,0 162,0,@339 176,0,0 207,0,@336 220,0,0 451:S37|434f44455452454528292e67656e436f64652832292831296e6577456e7669726f6e283429 452:S44|434f44455452454528292e67656e436f64652832292831296e6577456e7669726f6e2834296c6f6f6b283129 453:O1|@455 454:O2|@453,1 455:C2,32|4883f803750b48b80300000000000000c348b80100000000000000c390909090|@197,1|8,0,1 19,0,0 456:O2|-3,@454 457:O2|@434,@458 458:O2|@440,0 459:O4|@284,@198,@460,@178 460:O2|-1,@461 461:O2|5,@462 462:O2|-1,@463 463:O5|0,@465,@484,@7385,@464 464:O2|10,@485 465:O3|@205,@467,@466 466:O2|@444,@480 467:O2|@209,@468 468:O3|@212,0,@469 469:O10|0,@471,@470,0,0,0,0,0,0,0 470:O1|@479 471:O1|@472 472:O2|-1,@473 473:O5|0,@423,@434,@7384,@474 474:O2|-7,@475 475:O8|@476,@284,0,0,1,0,0,0 476:O4|4,@477,@437,1 477:O2|@478,@439 478:O2|-3,0 479:O2|0,@478 480:O2|@482,@481 481:O1|@483 482:O2|@481,0 483:C2,32|4883f801750b48b80300000000000000c348b80100000000000000c390909090|@284,1|8,0,1 19,0,0 484:O2|-3,@482 485:O2|@434,@486 486:O2|@478,0 487:O2|@489,@488 488:O2|@490,0 489:S2|3e3d 490:O3|@7374,69,@491 491:O4|@489,-1,@177,@176 492:O2|@197,@493 493:O2|@494,0 494:O3|@7374,69,@195 495:O2|@497,@496 496:O2|@498,0 497:S3|65786e 498:O3|@7387,69,@499 499:O6|@497,0,0,0,@501,@500 500:O2|-1,@7388 501:O2|0,@502 502:O3|0,@193,0 503:O2|@505,@504 504:O2|@506,0 505:S3|636872 506:O3|@7374,69,@507 507:O4|@505,-1,@509,@508 508:O3|1,@513,@512 509:O2|-1,@510 510:O2|-7,@511 511:O8|@441,@505,0,0,1,0,0,0 512:O4|-3,0,@521,@520 513:O4|-3,0,@515,@514 514:O2|0,@516 515:S3|696e74 516:O6|@515,0,0,0,@518,@517 517:O2|-1,@7389 518:O2|0,@519 519:O3|1,@193,0 520:O2|0,@522 521:S6|737472696e67 522:O6|@521,0,0,0,@518,@523 523:O2|-1,@7390 524:O2|@526,@525 525:O2|@527,0 526:S2|3c3e 527:O3|@7374,69,@528 528:O4|@526,-1,@530,@529 529:O3|1,@531,@178 530:O2|-2,-3 531:O4|-2,1,@532,0 532:O2|@534,@533 533:O2|@536,0 534:O2|49,@535 535:O3|3,@7391,79996 536:O2|50,@535 537:O2|@539,@538 538:O2|@540,0 539:S3|616273 540:O3|@7374,69,@541 541:O4|@539,-1,@177,@542 542:O3|1,@183,@183 543:O2|@284,@544 544:O2|@545,0 545:O3|@7374,69,@459 546:O2|@548,@547 547:O2|@549,0 548:S6|506f6c794d4c 549:O3|@7392,69,@550 550:O3|@548,@552,@551 551:O4|@553,I48,0,0 552:O2|-1,@478 553:O4|-1,@7394,@7395,@7393 554:O2|@555,10 555:C3,32|90909090909090483b65187303ff5548488b5a08ff252e000000909090909090|@168,7181,@166| 556:O2|@6227,@6226 557:O2|@559,@558 558:O2|@560,0 559:S21|6d616b65737472696e67496e4e616d655370616365 560:O3|@7374,69,@561 561:O4|@559,-1,@563,@562 562:O3|1,@564,@512 563:O2|-2,2 564:O4|-2,1,@565,0 565:O2|@567,@566 566:O2|@569,0 567:O2|49,@568 568:O3|3,@7397,79992 569:O2|50,@570 570:O4|-3,0,@572,@571 571:O2|0,@573 572:S9|6e616d655370616365 573:O6|@572,0,0,0,@575,@574 574:O2|-1,@7430 575:O2|-1,@7398 576:O3|0,@577,0 577:O4|-2,1,@578,0 578:O2|@580,@579 579:O2|@689,@688 580:O2|@582,@581 581:O3|1,@584,@583 582:S6|616c6c466978 583:O4|-3,@593,@605,@592 584:O4|-3,0,@586,@585 585:O2|0,@587 586:S4|756e6974 587:O6|@586,0,0,0,@589,@588 588:O2|-1,@7399 589:O2|0,@590 590:O3|1,@591,0 591:O4|-2,1,0,0 592:O2|0,@606 593:O2|@594,0 594:O4|-2,1,@595,0 595:O2|@597,@596 596:O2|@598,0 597:O2|49,@512 598:O2|50,@599 599:O4|-3,0,@601,@600 600:O2|0,@602 601:S9|66697869747956616c 602:O6|@601,0,0,0,@604,@603 603:O2|-1,@7401 604:O2|-1,@7400 605:S4|6c697374 606:O6|@605,1,0,@608,@610,@607 607:O2|-1,@7410 608:O2|@609,0 609:O3|3,@7402,79992 610:O2|-1,@7403 611:O3|1,@193,@612 612:O2|@614,@613 613:O2|@667,0 614:O4|@616,@617,@618,@615 615:O3|1,@661,@660 616:S2|3a3a 617:O1|0 618:O2|-1,@619 619:O2|5,@620 620:O2|-1,@621 621:O5|0,@623,@656,@7407,@622 622:O2|10,@657 623:O3|@205,@625,@624 624:O2|@444,@648 625:O2|@209,@626 626:O3|@212,0,@627 627:O10|0,@629,@639,@628,0,0,0,0,0,0 628:O1|@645 629:O1|@630 630:O2|-1,@631 631:O5|0,@423,@434,@7404,@632 632:O2|-7,@633 633:O8|@634,@616,0,0,1,0,0,0 634:O4|4,@636,@635,1 635:O2|-3,I218 636:O2|@637,0 637:O4|4,@439,@638,1 638:O2|-3,I105 639:O1|@640 640:O2|-1,@641 641:O5|0,@423,@643,@7405,@642 642:O2|-7,@644 643:O5|-5,2,1,0,0 644:O8|@441,@616,0,0,1,0,0,0 645:O2|-1,@646 646:O5|0,@423,@647,@7406,@642 647:O5|-5,3,1,0,0 648:O4|@650,@652,@651,@649 649:O1|@655 650:O3|@652,@651,@649 651:O1|@654 652:O1|@653 653:C2,48|90909090909090483b65187303ff554848baf02c6000000000009090ff124889c24883f2024889d0c390909090909090|@616,5|18,0,I105 654:C2,8|c390909090909090|@616,1| 655:C2,8|c390909090909090|@616,1| 656:O2|-3,@650 657:O2|@434,@658 658:O2|@643,@659 659:O2|@647,0 660:O4|-3,@608,@605,@666 661:O4|-2,1,@662,0 662:O2|@664,@663 663:O2|@665,0 664:O2|49,@609 665:O2|50,@660 666:O2|0,@606 667:O4|@669,@198,@668,@660 668:O2|-1,@670 669:S3|6e696c 670:O2|5,@671 671:O2|-1,@672 672:O5|0,@673,@687,@7408,@464 673:O3|@205,@675,@674 674:O2|@444,@683 675:O2|@209,@676 676:O3|@212,0,@677 677:O10|0,@678,@470,0,0,0,0,0,0,0 678:O1|@679 679:O2|-1,@680 680:O5|0,@423,@434,@7409,@681 681:O2|-7,@682 682:O8|@476,@669,0,0,1,0,0,0 683:O2|@685,@684 684:O1|@686 685:O2|@684,0 686:C2,32|4883f801750b48b80300000000000000c348b80100000000000000c390909090|@669,1|8,0,1 19,0,0 687:O2|-3,@685 688:O2|@705,@704 689:O2|@691,@690 690:O3|1,@584,@692 691:S6|616c6c536967 692:O4|-3,@693,@605,@592 693:O2|@694,0 694:O4|-2,1,@695,0 695:O2|@597,@696 696:O2|@697,0 697:O2|50,@698 698:O4|-3,0,@700,@699 699:O2|0,@701 700:S12|7369676e617475726556616c 701:O6|@700,0,0,0,@703,@702 702:O2|-1,@7412 703:O2|-1,@7411 704:O2|@721,@720 705:O2|@707,@706 706:O3|1,@584,@708 707:S6|616c6c56616c 708:O4|-3,@709,@605,@592 709:O2|@710,0 710:O4|-2,1,@711,0 711:O2|@597,@712 712:O2|@713,0 713:O2|50,@714 714:O4|-3,0,@716,@715 715:O2|0,@717 716:S8|76616c756556616c 717:O6|@716,0,0,0,@719,@718 718:O2|-1,@7414 719:O2|-1,@7413 720:O2|@737,@736 721:O2|@723,@722 722:O3|1,@584,@724 723:S7|616c6c54797065 724:O4|-3,@725,@605,@592 725:O2|@726,0 726:O4|-2,1,@727,0 727:O2|@597,@728 728:O2|@729,0 729:O2|50,@730 730:O4|-3,0,@732,@731 731:O2|0,@733 732:S7|7479706556616c 733:O6|@732,0,0,0,@735,@734 734:O2|-1,@7416 735:O2|-1,@7415 736:O2|@753,@752 737:O2|@739,@738 738:O3|1,@584,@740 739:S8|616c6c46756e6374 740:O4|-3,@741,@605,@592 741:O2|@742,0 742:O4|-2,1,@743,0 743:O2|@597,@744 744:O2|@745,0 745:O2|50,@746 746:O4|-3,0,@748,@747 747:O2|0,@749 748:S10|66756e63746f7256616c 749:O6|@748,0,0,0,@751,@750 750:O2|-1,@7418 751:O2|-1,@7417 752:O2|@757,@756 753:O2|@755,@754 754:O3|1,@594,@584 755:S8|656e746572466978 756:O2|@761,@760 757:O2|@759,@758 758:O3|1,@694,@584 759:S8|656e746572536967 760:O2|@765,@764 761:O2|@763,@762 762:O3|1,@710,@584 763:S8|656e74657256616c 764:O2|@781,@780 765:O2|@767,@766 766:O3|1,@584,@768 767:S9|616c6c537472756374 768:O4|-3,@769,@605,@592 769:O2|@770,0 770:O4|-2,1,@771,0 771:O2|@597,@772 772:O2|@773,0 773:O2|50,@774 774:O4|-3,0,@776,@775 775:O2|0,@777 776:S12|73747275637475726556616c 777:O6|@776,0,0,0,@779,@778 778:O2|-1,@7420 779:O2|-1,@7419 780:O2|@785,@784 781:O2|@783,@782 782:O3|1,@726,@584 783:S9|656e74657254797065 784:O2|@861,@860 785:O2|@787,@786 786:O3|1,@512,@788 787:S9|6c6f6f6b7570466978 788:O4|-3,@790,@791,@789 789:O2|0,@792 790:O2|@599,0 791:S6|6f7074696f6e 792:O6|@791,1,0,@794,@796,@793 793:O2|-1,@7429 794:O2|@795,0 795:O3|3,@7421,79992 796:O2|-1,@7422 797:O3|1,@193,@798 798:O2|@800,@799 799:O2|@822,0 800:O4|@802,@198,@803,@801 801:O4|-3,@794,@791,@789 802:S4|4e4f4e45 803:O2|-1,@804 804:O2|5,@805 805:O2|-1,@806 806:O5|0,@807,@821,@7423,@464 807:O3|@205,@809,@808 808:O2|@444,@817 809:O2|@209,@810 810:O3|@212,0,@811 811:O10|0,@812,@470,0,0,0,0,0,0,0 812:O1|@813 813:O2|-1,@814 814:O5|0,@423,@434,@7424,@815 815:O2|-7,@816 816:O8|@476,@802,0,0,1,0,0,0 817:O2|@819,@818 818:O1|@820 819:O2|@818,0 820:C2,32|4883f801750b48b80300000000000000c348b80100000000000000c390909090|@802,1|8,0,1 19,0,0 821:O2|-3,@819 822:O4|@824,@617,@825,@823 823:O3|1,@795,@801 824:S4|534f4d45 825:O2|-1,@826 826:O2|5,@827 827:O2|-1,@828 828:O5|0,@829,@859,@7425,@622 829:O3|@205,@831,@830 830:O2|@444,@851 831:O2|@209,@832 832:O3|@212,0,@833 833:O10|0,@835,@840,@834,0,0,0,0,0,0 834:O1|@846 835:O1|@836 836:O2|-1,@837 837:O5|0,@423,@434,@7426,@838 838:O2|-7,@839 839:O8|@634,@824,0,0,1,0,0,0 840:O1|@841 841:O2|-1,@842 842:O5|0,@423,@643,@7427,@843 843:O2|-7,@844 844:O8|@845,@824,0,0,1,0,0,0 845:O2|10,@439 846:O2|-1,@847 847:O5|0,@423,@647,@7428,@848 848:O2|-7,@849 849:O8|@850,@824,0,0,1,0,0,0 850:O3|6,@441,0 851:O4|@853,@855,@854,@852 852:O1|@858 853:O3|@855,@854,@852 854:O1|@857 855:O1|@856 856:C2,48|90909090909090483b65187303ff554848baf02c6000000000009090ff124889c24883f2024889d0c390909090909090|@824,5|18,0,I105 857:C2,32|4989c64d8d7ff04c3b7d107303ff554049c747f8010000004c89f84c8930c390|@824,4097| 858:C2,8|488b00c390909090|@824,1| 859:O2|-3,@853 860:O2|@867,@866 861:O2|@863,@862 862:O3|1,@512,@864 863:S9|6c6f6f6b7570536967 864:O4|-3,@865,@791,@789 865:O2|@698,0 866:O2|@873,@872 867:O2|@869,@868 868:O3|1,@512,@870 869:S9|6c6f6f6b757056616c 870:O4|-3,@871,@791,@789 871:O2|@714,0 872:O2|@877,@876 873:O2|@875,@874 874:O3|1,@742,@584 875:S10|656e74657246756e6374 876:O2|@883,@882 877:O2|@879,@878 878:O3|1,@512,@880 879:S10|6c6f6f6b757054797065 880:O4|-3,@881,@791,@789 881:O2|@730,0 882:O2|@887,@886 883:O2|@885,@884 884:O3|1,@770,@584 885:S11|656e746572537472756374 886:O2|@892,0 887:O2|@889,@888 888:O3|1,@512,@890 889:S11|6c6f6f6b757046756e6374 890:O4|-3,@891,@791,@789 891:O2|@746,0 892:O2|@894,@893 893:O3|1,@512,@895 894:S12|6c6f6f6b7570537472756374 895:O4|-3,@896,@791,@789 896:O2|@774,0 897:O2|@899,@898 898:O2|@900,0 899:S5|7072696e74 900:O3|@7374,69,@901 901:O4|@899,-1,@903,@902 902:O3|1,@904,@904 903:O2|-2,3 904:O3|3,@7431,79992 905:O2|@907,@906 906:O2|@908,0 907:S10|6d616b65737472696e67 908:O3|@7374,69,@909 909:O4|@907,-1,@911,@910 910:O3|1,@912,@512 911:O2|-2,-2 912:O3|3,@7432,79992 913:O2|@915,@914 914:O2|@916,0 915:S10|696e7374616c6c5f7070 916:O3|@7374,69,@917 917:O4|@915,-1,@919,@918 918:O3|1,@920,@584 919:O2|-2,1 920:O3|1,@922,@921 921:O3|1,@513,@944 922:O4|-2,1,@923,0 923:O2|@925,@924 924:O2|@928,@927 925:O2|49,@926 926:O3|1,@512,@584 927:O2|@936,@935 928:O2|50,@929 929:O3|1,@930,@584 930:O4|-2,1,@931,0 931:O2|@933,@932 932:O2|@934,0 933:O2|49,@513 934:O2|50,@178 935:O2|@942,0 936:O2|51,@937 937:O3|1,@938,@584 938:O4|-2,1,@939,0 939:O2|@933,@940 940:O2|@941,0 941:O2|50,@513 942:O2|52,@943 943:O3|1,@584,@584 944:O3|1,@946,@945 945:O3|1,@947,@584 946:O3|3,@7433,79992 947:O3|3,@7434,79992 948:O2|@950,@949 949:O2|@951,0 950:S8|636f6d70696c6572 951:O3|@7374,69,@952 952:O4|@950,-1,@954,@953 953:O3|1,@6171,@6170 954:O2|-1,@955 955:O2|-3,@956 956:O2|@958,@957 957:O2|@961,@960 958:C2,40|90909090909090483b65187303ff55484c8b4010488b5808488b00488b5208ff2290909090909090|@959,8191| 959:S27|434f4d50494c45525f424f445928292e636f6d70696c6572283129 960:O2|@1083,@1082 961:C12,1056|90909090909090488dbc2460ffffff483b7d187303ff555050505050505050505050525049504c8d4424184989de488b1c244c89f0909090ff150a0400004d8d7fa84c3b7d107303ff554049c747f80a0000004d89fd4c8b6424184d8965004c8b5c24204d895d084c8b5424284d8955104c8b4c24304d894d184c8b4424384d894520488b7c244049897d28488b74244849897530488b5c245049895d38488b54245849895540488b4c246049894d48495548bbe0d5edacaa2a0000488b44240848bae8d7edacaa2a000090ff157e0300005048bbc8e0edacaa2a0000488b44241048bae8d7edacaa2a0000ff15660300005048ff750849beded2edacaa2a000049566a01488965084c8b6c24204983fd0174604c8b6424404d8d7fd04c3b7d107303ff554049c747f8050000004d89fb49ba70e2edacaa2a00004d89134c8b4c24284d894b204c8b4424384d894318488b7c243049897b10498b742408498973084c89d848ba301a60000000000090ff12eb1e4c8b6424404c8b442430488b5c2438488b442428498b542408909090ff1248ff742410488f45084881c498000000c39090904c8b184983fb03756b4c8b54244849c702010000004c8b4c243049c701410000004c8b44244049c70073000000488b7c246048c70789000000488b74246848c706010000005048b800e3edacaa2a0000488b54240890ff1248b858d4ecacaa2a0000909090ff555848b80100000000000000eb1ae9150000004989c248b801000000000000004881c480000000c34981fbcf000000755a4d8d7fe04c3b7d107303ff554049c747f8030000004d89fa4c8b48104d894a1049b8a051edacaa2a00004d89420849c702cf0000004889c74c89d0909090ff555848b80100000000000000eb1a4989c248b80100000000000000e9080000004881c480000000c349baf8e36cadaa2a00004d3bda756e5048bb28e3edacaa2a0000488b40109090ff15960100004889c348b878e8edacaa2a000090ff158a01000048bba8e8edacaa2a0000ff15820100005048bb1500000000000000909090ff1576010000488b54241090ff124d8d7fe04c3b7d107303ff554049c747f803000000eb05e9490000004d89f94c8b04244d89411048bfa051edacaa2a00004989790849c701cf0000004c89c89090ff555848b80100000000000000eb154989c148b801000000000000004881c480000000c348f7c001000000741848b8b055edacaa2a000090ff555849b901000000000000004989c14d8b41084c89c348b8d0e8edacaa2a0000ff15d600000048bbf0e8edacaa2a0000ff15ce0000005048bb1500000000000000909090ff15c2000000488b54240890ff124d8d7fe04c3b7d107303ff554049c747f8030000004c89ff488b34244889771048bba051edacaa2a000048895f0848c707cf0000004889f890ff555848b8010000000000000090909090|@1062,8191,@1063,@974,@974,@1061,@303,@303,@303,@303,@303,@303|180,0,@962 195,0,@972 213,0,@1032 228,0,@972 249,0,$961+422 307,0,@1039 359,0,I30 494,0,@1041 512,0,@45 528,0,0 548,0,0 607,0,@333 640,0,0 655,0,0 678,0,@7377 694,0,@1042 719,0,@1057 736,0,@1058 753,0,10 819,0,@333 848,0,0 863,0,0 890,0,@339 904,0,0 924,0,@1059 940,0,@1060 957,0,10 1016,0,@333 1044,0,0 962:O3|@964,@967,@963 963:O2|@969,@7435 964:O2|@965,@7435 965:C2,48|4c8b304c8b6a084d3bf5751648b80300000000000000c348b80100000000000000c348b80100000000000000c3909090|@966,6149|14,0,1 25,0,0 36,0,0 966:S19|556e6976657273616c2e746167283229283129 967:O2|@968,@7435 968:C2,48|4989c64d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c89701048c740088b0000004c8b72084c8930c390|@966,4101| 969:C2,56|4c8b304c8b6a084d3bf57510488b4010c348b80100000000000000c348b8b0d7edacaa2a000090ff555848b8010000000000000090909090|@966,6149|19,0,0 30,0,@970 44,0,0 970:O3|101,@971,0 971:S5|4d61746368 972:O2|@974,@973 973:O2|@979,@978 974:C2,344|90909090909090483b65187303ff5548525348ff334883f801750c49be0100000000000000eb5c48ff3048ff7008488b442408488b542410ff124883f80174224d8d7ff04c3b7d107303ff554049c747f8010000004d89fe4c8b6c24084d892eeb1d488b04244883c410483b65187303ff5548eba049be01000000000000004883c41049f7c60100000075134c8b642408498b06498b5424104883c418ff224c8b6424084c8b5c241049ff34244d8b53084983fa01750c49b90100000000000000eb5c49ff3249ff7208488b442408488b542410ff124883f80174224d8d7ff04c3b7d107303ff554049c747f8010000004d89f94c8b4424084d8901eb1d4c8b14244883c410483b65187303ff5548eba049b901000000000000004883c41049f7c1010000007512488b7c2410498b01488b57104883c420ff2248b8a8d9edacaa2a0000909090ff555848b8010000000000000090909090|@977,8191|29,0,0 119,0,0 185,0,0 275,0,0 316,0,@975 332,0,0 975:O3|@7377,@215,@976 976:S11|746167206d697373696e67 977:S21|44656275672e676574506172616d65746572283229 978:O2|@986,@985 979:O3|@7436,69,@980 980:O1|@981 981:C2,24|48b8a8daedacaa2a000090ff555848b80100000000000000|@984,1|2,0,@982 16,0,0 982:O3|103,@333,@983 983:S16|6572726f7220696e2070726f6772616d 984:S18|44656275672e64656661756c74732d283129 985:O2|@990,@989 986:O3|@7437,69,@987 987:O1|@988 988:C2,16|48b80100000000000000c39090909090|@984,1|2,0,0 989:O2|@994,@993 990:O3|@7438,69,@991 991:O1|@992 992:C2,16|48b80100000000000000c39090909090|@984,1|2,0,0 993:O2|@996,@995 994:O3|@7439,69,I48 995:O2|@998,@997 996:O3|@7440,69,1 997:O2|@1000,@999 998:O3|@7441,69,40 999:O2|@1002,@1001 1000:O3|@7442,69,0 1001:O2|@1004,@1003 1002:O3|@7443,69,0 1003:O2|@1006,@1005 1004:O3|@7444,69,0 1005:O2|@1008,@1007 1006:O3|@7445,69,0 1007:O2|@1010,@1009 1008:O3|@7446,69,0 1009:O2|@1012,@1011 1010:O3|@7447,69,0 1011:O2|@1014,@1013 1012:O3|@7448,69,0 1013:O2|@1016,@1015 1014:O3|@7449,69,6 1015:O2|@1020,@1019 1016:O3|@7450,69,@1017 1017:O1|@1018 1018:C2,16|48b80100000000000000c39090909090|@984,1|2,0,0 1019:O2|@1022,@1021 1020:O3|@7451,69,77 1021:O2|@1024,@1023 1022:O3|@7435,69,0 1023:O2|@1026,@1025 1024:O3|@7452,69,0 1025:O2|@1027,0 1026:O3|@7453,69,0 1027:O3|@7454,69,@1028 1028:O1|@1029 1029:C2,24|48b888e0edacaa2a000090ff555848b80100000000000000|@984,1|2,0,@1030 16,0,0 1030:O3|103,@333,@1031 1031:S9|4e6f2073747265616d 1032:O3|@1034,@1036,@1033 1033:O2|@1038,@7437 1034:O2|@1035,@7437 1035:C2,48|4c8b304c8b6a084d3bf5751648b80300000000000000c348b80100000000000000c348b80100000000000000c3909090|@966,6149|14,0,1 25,0,0 36,0,0 1036:O2|@1037,@7437 1037:C2,48|4989c64d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c89701048c740088b0000004c8b72084c8930c390|@966,4101| 1038:C2,56|4c8b304c8b6a084d3bf57510488b4010c348b80100000000000000c348b8b0d7edacaa2a000090ff555848b8010000000000000090909090|@966,6149|19,0,0 30,0,@970 44,0,0 1039:C2,40|90909090909090483b65187303ff55484c8b4210488b5a18488b4220488b5208ff22909090909090|@1040,8191| 1040:S30|434f4d50494c45525f424f445928292e636f6d70696c6572283329283129 1041:S24|436f6d70696c6174696f6e20696e7465727275707465640a 1042:O1|@1043 1043:C5,360|90909090909090483b65187303ff55484881f8b9000000750b48b8f0e4edacaa2a0000c34883f845750b48b808e5edacaa2a0000c34883f843720b4881f8fd0000007702eb084883f8417402eb01c34883f80f750b48b820e5edacaa2a0000c34883f811750b48b838e5edacaa2a0000c34883f813750b48b850e5edacaa2a0000c34883f815750b48b868e5edacaa2a0000c34883f817750b48b880e5edacaa2a0000c34883f819750b48b898e5edacaa2a0000c34883f81b750b48b8b0e5edacaa2a0000c34883f8417366a8017503ff55704989c64981c68000000070f141f6c6017503ff55704983fe017d02eb1441f6c6017503ff55704981feff0100007f02eb1848b8f048edacaa2a000090ff555849bd01000000000000004d89f54c89eb48b8c8e5edacaa2a0000ff255e00000049b8150000000000000048bb07000000000000009090ff154a0000004889c348b8b900000000000000ff253f00000090909090909090|@1055,8191,@303,@1054,@303|27,0,@1044 44,0,@1045 87,0,@1046 104,0,@1047 121,0,@1048 138,0,@1049 155,0,@1050 172,0,@1051 189,0,@1052 262,0,@309 276,0,0 292,0,@1053 308,0,10 318,0,3 339,0,92 1044:S2|5c5c 1045:S2|5c22 1046:S2|5c61 1047:S2|5c62 1048:S2|5c74 1049:S2|5c6e 1050:S2|5c76 1051:S2|5c66 1052:S2|5c72 1053:S2|5c5e 1054:C3,528|90909090909090483b65187303ff55484883fb01750b48b8b01e600000000000c3f6c3017503ff55704989de4983ee0270f4a8017503ff55704883f8017c0c49bd0300000000000000eb0a49bd010000000000000041f6c0017503ff55704983f8017c0c49bc0300000000000000eb0a49bc01000000000000004d3bec75054989c5eb6a4983fc01743341f6c0017503ff55704d89c54983ed0270f44989c44d23e541f6c4017503ff55704989c44d2be54d8d64240170f04d89e5eb3141f6c0017503ff55704d89c54983c50270f44989c44d23e541f6c4017503ff55704989c44d2be54d8d64240170f04d89e550495049564c89c34c89e848baf02d60000000000090ff124c8b442408488b1c249090e8f1feffff50488b5c2410488b44241848ba302e60000000000090ff124883f8017502eb544c8b5c241041f6c3017503ff55704983fb017c0c49ba0300000000000000eb0a49ba0100000000000000a8017503ff55704883f8017c0c49b90300000000000000eb0a49b901000000000000004d3bd17402eb054989c3eb1b4989c24d23d341f6c2017503ff55704c8d50ff4d03d370f44d89d341f6c3017503ff55704d89d94983c16070f441f6c1017503ff55704983f9017d02eb1441f6c1017503ff55704981f9ff0100007f02eb1748b8f048edacaa2a0000ff555849b801000000000000004d89c84c89c3488b04244883c420ff252c00000090909090|@1056,8191,@303|24,0,I48 65,0,1 77,0,0 102,0,1 114,0,0 251,0,I109 291,0,I110 332,0,1 344,0,0 367,0,1 379,0,0 483,0,@309 496,0,0 1055:S16|436861722e746f537472696e67283129 1056:S18|436861722e6f6374496e7452657072283329 1057:S26|457863657074696f6e2d20496e7465726e616c4572726f723a20 1058:S23|20726169736564207768696c6520636f6d70696c696e67 1059:S11|457863657074696f6e2d20 1060:S36|20756e65787065637465646c7920726169736564207768696c6520636f6d70696c696e67 1061:C3,504|90909090909090483b65187303ff554848f7c001000000740c49be0300000000000000eb084c8b304f8d7436014983fe0375054889daff225053495649bd010000000000000049bc01000000000000004c8b1c244d3be375054d89eaeb6e4d8d5424024d8d4c24104c8b4424104c89c848d1e8490fb60400488d44000149554952488b5424189090ff1248f7c001000000740c48bf0300000000000000eb08488b38488d7c3f01488b7424084889f34823dff6c3017503ff5570488d5eff4803df70f44c8b24244989ddeb05e91c0000004883c410483b65187303ff5548e96dffffff49ba010000000000000049f7c201000000741441f6c2017503ff55704983fa017c054d89d1eb1a48b840e3ecacaa2a0000909090ff555849b901000000000000004d3bcb750a488b4424104883c418c34d8d4120498d78fe4889fe48c1ee034883ce01495148ff750848bbbaeaedacaa2a0000536a014889650849b8010000000000000048bb83000000000000004889f048ba70156000000000009090ff124889c248ff742410488f4508eb1c909048b840e3ecacaa2a0000909090ff555848ba010000000000000049d1e94c890a4f8d4c0901525148bb010000000000000048b81100000000000000488d5424489090ff1546000000488b44240848ba701e600000000000909090ff12488b4424084883c448c3|@1080,8191,@1079|27,0,1 62,0,0 72,0,0 149,0,1 229,0,0 268,0,@69 284,0,0 334,0,$1061+402 351,0,0 361,0,65 374,0,I11 404,0,@69 420,0,0 443,0,0 453,0,8 481,0,I47 1062:S27|434f4d50494c45525f424f445928292e636f6d70696c6572283329 1063:C4,384|90909090909090483b65187303ff55485053495048bb58ededacaa2a0000488b44240848bae8d7edacaa2a0000909090ff15720100005048bb00efedacaa2a0000488b44241048bae8d7edacaa2a0000ff155a0100004d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fe49c706410000004d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fd49c74500730000004d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fc49bbb01e6000000000004d891c244d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fa49c702010000004d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89f949c701890000004d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89f849c70001000000488b7c24084c89374c8967084c896f104c89571848894720488b742418488977284c894f304c894738488b1c2448895f40488b5424104889574848b801000000000000004883c420c390|@1078,8191,@974,@974|22,0,@1064 37,0,@972 57,0,@1071 72,0,@972 190,0,I48 370,0,0 1064:O3|@1066,@1068,@1065 1065:O2|@1070,@7436 1066:O2|@1067,@7436 1067:C2,48|4c8b304c8b6a084d3bf5751648b80300000000000000c348b80100000000000000c348b80100000000000000c3909090|@966,6149|14,0,1 25,0,0 36,0,0 1068:O2|@1069,@7436 1069:C2,48|4989c64d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c89701048c740088b0000004c8b72084c8930c390|@966,4101| 1070:C2,56|4c8b304c8b6a084d3bf57510488b4010c348b80100000000000000c348b8b0d7edacaa2a000090ff555848b8010000000000000090909090|@966,6149|19,0,0 30,0,@970 44,0,0 1071:O3|@1073,@1075,@1072 1072:O2|@1077,@7438 1073:O2|@1074,@7438 1074:C2,48|4c8b304c8b6a084d3bf5751648b80300000000000000c348b80100000000000000c348b80100000000000000c3909090|@966,6149|14,0,1 25,0,0 36,0,0 1075:O2|@1076,@7438 1076:C2,48|4989c64d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c89701048c740088b0000004c8b72084c8930c390|@966,4101| 1077:C2,56|4c8b304c8b6a084d3bf57510488b4010c348b80100000000000000c348b8b0d7edacaa2a000090ff555848b8010000000000000090909090|@966,6149|19,0,0 30,0,@970 44,0,0 1078:S17|4c45585f28292e696e697469616c283329 1079:C2,232|90909090909090483b65187303ff55484c8b72e8493bde750b48b80100000000000000c34c8d6b104c8b62f84989c34c89e848d1e8490fb60404488d44000152495353488b52f090ff1248f7c001000000740c49ba0300000000000000eb084c8b104f8d5412014983fa0375244c8b4c24104d8b41c0488b7c240848d1e848d1ef49880438488d440001488d7c3f01eb2b4c8b4c241049524d8b41c04c8b4c241048bb110000000000000048ba3044600000000000909090ff12eb024952488b742408488d5e02488b542410488b0c24488d41ff4803c2488b5424184883c420e922ffffff909090|@1081,8191|27,0,0 85,0,1 163,0,8 173,0,I198 1080:S19|537472696e672e746f537472696e6773283229 1081:S31|537472696e672e746f537472696e6773283229636f7079546f4f7574283229 1082:O3|@1337,@6168,@1112 1083:C35,3528|90909090909090488dbc24a0fdffff483b7d187303ff5550525053495048bbc8e0edacaa2a00004c89c048bae8d7edacaa2a0000ff15b60d00005048bb7001eeacaa2a0000488b44240848bae8d7edacaa2a0000ff159e0d00005048bb1803eeacaa2a0000488b44241048bae8d7edacaa2a0000ff15860d00005048bbc004eeacaa2a0000488b44241848bae8d7edacaa2a0000ff156e0d00005048bb6806eeacaa2a0000488b44242048bae8d7edacaa2a0000ff15560d00004c8b742428505050505049ff765049ff766049ff767049ff765849ffb68800000049ffb68000000048bb010000000000000048b80f0000000000000048ba302a600000000000ff125048bb010000000000000048b8110000000000000048ba302a600000000000909090ff125048bb010000000000000048b8130000000000000048ba302a600000000000909090ff125048bb010000000000000048b81b0000000000000048ba302a600000000000909090ff124c8d6c2450498945004c8d6424504c8b1c244d895c24084c8d5424504c8b4c24084d894a104c8d442450488b7c241049897818488bb424a000000048ff762848ff763048ff763848ff764048ff76484c8b56204c8b4e184c8b4610488b5e08488b06ff15420c0000488b5e10488b13488b4e30488b014881f88900000074054989c6eb034989d648bb1008eeacaa2a00004c89f09090ff15160c00004883f801741f488b8424a000000048ba9808eeacaa2a00009090ff15fe0b00004989c6eb0a49be01000000000000004c8bb424a00000004d8b6e104d8b65004d8b5e304d8b134981fa8900000074054d89d1eb034d89e14c8b8424a8000000498b58084c89c8ff15ba0b00004883f8017476488bbc24a000000048ff772848ff773048ff773848ff774048ff77484c8b57204c8b4f184c8b4710488b5f08488b0790ff15860b00004883f801744c48ff772848ff773048ff773848ff774048ff77484c8b57204c8b4f184c8b4710488b5f08488b0790ff155a0b000048b8d04deeacaa2a0000eb05e91f000000ff555848b8010000000000000048b8184eeeacaa2a00004881c4b0000000c35050504889e348b801000000000000009090ff151a0b00004d8d7fe04c3b7d107303ff554049c747f8030000004c89ff48bee04eeeacaa2a0000488937488b5c241048895f10488b54245848895708488b8c24c00000004d8d7fe84c3b7d107303ff554049c747f8020000004c89f8488978084c8b7424084c8930574989c0488b9c24c0000000488b410848ba784feeacaa2a000090ff159e0a000050505048bb010000000000000048b80f0000000000000048ba302a60000000000090ff124c8bac24a00000004989c44d23e541f6c4017503ff55704989c44d2be54d8d64240170f0495448bb010000000000000048b8110000000000000048ba302a6000000000009090ff124c8b9c24a00000004989c24d23d341f6c2017503ff55704989c24d2bd34d8d520170f14c8d4c24104d89114c8d442410488b3c2449897808488b742418488b5c24104889f24823d3f6c2017503ff5570488d56ff4803d370f4488b8c24b00000004883f901747050505050505050524c8d442408488b9c240801000048b89b00000000000000ff15ae0900004d8d7fc04c3b7d107303ff554049c747f8070000004d89fe4c8b6c24084d892e4c8b6424104d8966084c8b5c24184d895e104c8b5424204d8956184c8b4c24284d894e204c8b442430eb05e9520000004d894628488b7c243849897e30495648b8103dedacaa2a00004889fa9090ff124c8b042448bb214e000000000000488b442450909090ff152a09000048b80100000000000000488b542420909090ff12eb1348b80100000000000000505050505050505250488b84242801000048ff702848ff703048ff703848ff704048ff70484c8b50204c8b48184c8b4010488b5808488b009090ff15d20800004883f80174504c8bac242801000049ff752849ff753049ff753849ff754049ff75484d8b55204d8b4d184d8b4510498b5d08498b4500ff159e08000048b8d04deeacaa2a0000909090ff555849be010000000000000049be01000000000000005050504889e348b801000000000000009090ff156a0800005050504889e348b801000000000000009090ff155a0800005050504889e348b801000000000000009090ff154a0800005050504889e348b801000000000000009090ff153a0800005050504889e348b801000000000000009090ff152a0800004d8d7fe04c3b7d107303ff554049c747f8030000004d89fe49bd38f4efacaa2a00004d892e4c8b6424704d8966104c8b9c24380100004d895e084d8d7fe04c3b7d107303ff554049c747f8030000004d89fa49b9a8f4efacaa2a00004d890a4c8b4424584d894210488bbc243001000049897a084d8d7fe04c3b7d107303ff554049c747f8030000004c89fe48bb18f5efacaa2a000048891e488b54244048895610488b8c242001000048894e084d8d7fe04c3b7d107303ff554049c747f8030000004c89f849bd88f5efacaa2a00004c89284c8b6424284c8960104c8b9c24280100004c8958084d8d7fe04c3b7d107303ff554049c747f8030000004d89f949b8f8f5efacaa2a00004d8901488b7c241049897910488b9c2418010000498959084d8d7f984c3b7d107303ff554049c747f80c0000004c89fa488972584c894a50488b4c243848894a484c8952404c8b6c24084c896a384c897230488942284c8ba424e00000004c8962204c8b5c24504c895a184c8b5424684c8952104c8b4c24204c894a084c8b8424f00000004c89024989d0488b9c24a0010000488b8424c800000048ba68f6efacaa2a0000909090ff157a060000488bbc24a001000048ff772848ff773048ff773848ff774048ff77484c8b57204c8b4f184c8b4710488b5f08488b07909090ff154a0600004883f801740c48be0100000000000000eb1d4989f94c8b0424488b5c2430488b442460909090ff15260600004889c6505048bb010000000000000048b80f0000000000000048ba302a600000000000909090ff12488bb424780100004889c34823def6c3017503ff55704889c3482bde488d5b0170f15348bb010000000000000048b8110000000000000048ba302a60000000000090ff12488b9424780100004889c14823caf6c1017503ff55704889c1482bca488d490170f1488d4424084889084c8d7424084c8b2c244d896e084c8b6424104c8b5c24084d89e24d23d341f6c2017503ff55704d8d5424ff4d03d370f34c8b8c24b80100004c89d749ff712849ff713049ff713849ff714049ff71484d8b5120498b31498b5908498b4910498b41184989c14989c84889f090ff15260500004883f80174504c8bac24b801000049ff752849ff753049ff753849ff754049ff75484d8b55204d8b4d184d8b4510498b5d08498b4500ff15f204000048b8c835f9acaa2a0000909090ff555849be010000000000000049be010000000000000057488b9c24c0010000488b8424e800000090ff15be04000050505048bb010000000000000048b80f0000000000000048ba302a60000000000090ff124c8bb424a00100004989c54d23ee41f6c5017503ff55704989c54d2bee4d8d6d0170f1495548bb010000000000000048b8110000000000000048ba302a600000000000909090ff124c8ba424a00100004989c34d23dc41f6c3017503ff55704989c34d2bdc4d8d5b0170f14c8d5424104d891a4c8d4c24104c8b04244d894108488b7c2418488b7424104889fb4823def6c3017503ff5570488d5fff4803de70f4488b9424e00100004889d948ff722848ff723048ff723848ff724048ff72484c8b52204c8b4a184c8b4210488b5a08488b02909090ff15c60300004883f80174504c8bb424e001000049ff762849ff763049ff763849ff764049ff76484d8b56204d8b4e184d8b4610498b5e08498b0690ff159203000048b81036f9acaa2a0000909090ff555848b8010000000000000048b80100000000000000488b8424b80100004883f801746d50505050505050514c8d442408488b9c240802000048b89b0000000000000090ff15420300004d8d7fc04c3b7d107303ff554049c747f8070000004d89fd4c8b6424084d8965004c8b5c24104d895d084c8b5424184d8955104c8b4c24204d894d184c8b4424284d894520eb05e959000000488b7c243049897d28488b74243849897530495548b8103dedacaa2a00004889f290ff12488b1c24488b44245048bac827edacaa2a0000909090ff15be02000048b80100000000000000488b542420909090ff124989c6eb1349be0100000000000000505050505050505150488b9c2418020000488b44245048bac068f3acaa2a0000909090ff157a02000050505048bb010000000000000048b80f0000000000000048ba302a60000000000090ff124c8bb424080200004989c54d23ee41f6c5017503ff55704989c54d2bee4d8d6d0170f1495548bb010000000000000048b8110000000000000048ba302a600000000000909090ff124c8ba424080200004989c34d23dc41f6c3017503ff55704989c34d2bdc4d8d5b0170f14c8d5424104d891a4c8d4c24104c8b04244d894108488b7c2418488b7424104889fb4823def6c3017503ff5570488d5fff4803de70f44d8d7fa84c3b7d107303ff554049c747f80a0000004c89f848ba5836f9acaa2a0000488910488b8c24f0010000488948484c8b7424084c8970404c8bac24700100004c8968384c8ba424280200004c8960304c8b9c24300200004c8958284c8b9424280100004c8950204c8b8c24880000004c8948184c8b4424284c894010488958084881c458020000c39090|@5323,8191,@974,@974,@974,@974,@974,@5322,@1333,@1117,@1333,@5324,@5322,@1481,@1309,@359,@1972,@5324,@5322,@1481,@1481,@1481,@1481,@1481,@1930,@5324,@5326,@5324,@5322,@5356,@5324,@5322,@359,@260,@3247|31,0,@1032 44,0,@972 61,0,@1084 76,0,@972 93,0,@1091 108,0,@972 125,0,@1098 140,0,@972 157,0,@1105 172,0,@972 228,0,0 238,0,7 248,0,I94 261,0,0 271,0,8 281,0,I94 297,0,0 307,0,9 317,0,I94 333,0,0 343,0,13 353,0,I94 503,0,@1112 538,0,@1115 561,0,0 744,0,@1299 764,0,0 774,0,@1301 798,0,0 840,0,@1305 931,0,@1307 951,0,0 961,0,7 971,0,I94 1022,0,0 1032,0,8 1042,0,I94 1180,0,77 1291,0,@268 1312,0,10000 1336,0,0 1358,0,0 1492,0,@1299 1508,0,0 1518,0,0 1534,0,0 1558,0,0 1582,0,0 1606,0,0 1630,0,0 1672,0,@1924 1730,0,@1925 1788,0,@1926 1846,0,@1927 1904,0,@1928 2069,0,@1929 2150,0,0 2193,0,0 2203,0,7 2213,0,I94 2263,0,0 2273,0,8 2283,0,I94 2512,0,@5217 2528,0,0 2538,0,0 2575,0,0 2585,0,7 2595,0,I94 2645,0,0 2655,0,8 2665,0,I94 2888,0,@5219 2904,0,0 2914,0,0 2959,0,77 3072,0,@268 3097,0,@258 3116,0,0 3141,0,0 3173,0,@3245 3195,0,0 3205,0,7 3215,0,I94 3265,0,0 3275,0,8 3285,0,I94 3413,0,@5221 1084:O3|@1086,@1088,@1085 1085:O2|@1090,@7447 1086:O2|@1087,@7447 1087:C2,48|4c8b304c8b6a084d3bf5751648b80300000000000000c348b80100000000000000c348b80100000000000000c3909090|@966,6149|14,0,1 25,0,0 36,0,0 1088:O2|@1089,@7447 1089:C2,48|4989c64d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c89701048c740088b0000004c8b72084c8930c390|@966,4101| 1090:C2,56|4c8b304c8b6a084d3bf57510488b4010c348b80100000000000000c348b8b0d7edacaa2a000090ff555848b8010000000000000090909090|@966,6149|19,0,0 30,0,@970 44,0,0 1091:O3|@1093,@1095,@1092 1092:O2|@1097,@7443 1093:O2|@1094,@7443 1094:C2,48|4c8b304c8b6a084d3bf5751648b80300000000000000c348b80100000000000000c348b80100000000000000c3909090|@966,6149|14,0,1 25,0,0 36,0,0 1095:O2|@1096,@7443 1096:C2,48|4989c64d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c89701048c740088b0000004c8b72084c8930c390|@966,4101| 1097:C2,56|4c8b304c8b6a084d3bf57510488b4010c348b80100000000000000c348b8b0d7edacaa2a000090ff555848b8010000000000000090909090|@966,6149|19,0,0 30,0,@970 44,0,0 1098:O3|@1100,@1102,@1099 1099:O2|@1104,@7442 1100:O2|@1101,@7442 1101:C2,48|4c8b304c8b6a084d3bf5751648b80300000000000000c348b80100000000000000c348b80100000000000000c3909090|@966,6149|14,0,1 25,0,0 36,0,0 1102:O2|@1103,@7442 1103:C2,48|4989c64d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c89701048c740088b0000004c8b72084c8930c390|@966,4101| 1104:C2,56|4c8b304c8b6a084d3bf57510488b4010c348b80100000000000000c348b8b0d7edacaa2a000090ff555848b8010000000000000090909090|@966,6149|19,0,0 30,0,@970 44,0,0 1105:O3|@1107,@1109,@1106 1106:O2|@1111,@7448 1107:O2|@1108,@7448 1108:C2,48|4c8b304c8b6a084d3bf5751648b80300000000000000c348b80100000000000000c348b80100000000000000c3909090|@966,6149|14,0,1 25,0,0 36,0,0 1109:O2|@1110,@7448 1110:C2,48|4989c64d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c89701048c740088b0000004c8b72084c8930c390|@966,4101| 1111:C2,56|4c8b304c8b6a084d3bf57510488b4010c348b80100000000000000c348b8b0d7edacaa2a000090ff555848b8010000000000000090909090|@966,6149|19,0,0 30,0,@970 44,0,0 1112:O1|@1113 1113:C2,32|4883f873750b48b80300000000000000c348b80100000000000000c390909090|@1114,1|8,0,1 19,0,0 1114:S15|496e745365742e6d6b283129283129 1115:O2|@1117,@1116 1116:O4|@1130,@1177,@1178,@1129 1117:C3,200|90909090909090483b65187303ff55484c8b70304d8b2e4981fd89000000741249c7068900000048b80100000000000000c34c8b68104d8b65004983fc017572525049554c8b582048b801000000000000004c89da909090ff124c8b54240849ff721049ff721849ff722049ff722849ff723049ff723849ff724049ff72484d8b0a4d8b42084d89c249b803000000000000004889c348b8e009eeacaa2a0000ff154a00000048b8b80aeeacaa2a0000eb05e903000000ff555849c7450089000000488b5208ff22|@1127,8191,@1124|41,0,0 74,0,0 139,0,1 152,0,@1118 168,0,@1122 1118:O1|@1119 1119:C2,40|90909090909090483b65187303ff55484c8b701848b8500aeeacaa2a00004c89f2ff229090909090|@1121,8191|22,0,@1120 1120:S34|756e657870656374656420656e64206f662066696c6520656e636f756e7465726564 1121:S25|4c45585f28292e6572726f724d657373616765283329283129 1122:O3|@7377,@215,@1123 1123:S11|656e64206f662066696c65 1124:C4,464|90909090909090483b65187303ff55484d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fa49c702010000004d8d7fe84c3b7d107303ff554049c747f8020000004d89f948bf100deeacaa2a00004989394d895108505050505050505053495049524c8d4424204c89cb48b89b00000000000000ff15760100004d8d7fc04c3b7d107303ff554049c747f8070000004c89fe488b5c242048891e488b54242848895608488b4c243048894e10488b442438488946184c8b7424404c8976204c8b6c24484c896e284c8b6424504c8966304c8b5c24084983fb01740f4c8b94249000000049c702030000005648b8103dedacaa2a00004c89e2ff12488b0424488b54242090ff1248b80100000000000000488b542438909090ff124c8b5424084d8b0a49b801000000000000004983f90175054c89c0eb3e4d8d7fe84c3b7d107303ff554049c747f8020000004c89ff4c894708498b314889374989f84d8b4908483b65187303ff5548ebc148b80100000000000000909090ff157a0000004889c74d8d7fe04c3b7d107303ff554049c747f8030000004c89f8488b74241848897010488b5c241048895808488938488b542470488b4c24604881c4a800000051ff22909090909090|@1128,8191,@359,@331|78,0,@1125 116,0,77 245,0,@268 272,0,0 300,0,0 373,0,0 1125:C2,56|4c8b72084d8b2e4d8d7fe84c3b7d107303ff554049c747f8020000004d89fc4d896c2408498904244d892648b80100000000000000c39090|@1126,7173|45,0,0 1126:S27|4c45585f28292e657750726f6328313329707072696e742d283129 1127:S18|4c45585f28292e696e73796d626f6c283129 1128:S17|4c45585f28292e657750726f6328313329 1129:O2|@1285,@7459 1130:C20,1984|90909090909090483b65187303ff5548525048ff3048ff700848ff7010909090ff15c20700004881f8fd000000756a4c8b74241849ff762849ff763049ff763849ff764049ff76484d8b56204d8b4e184d8b4610498b5e08498b0690ff158e0700004c8b6c24104d8b65004983fc61723f4983fc737739488b442418ff15760700004c8b5c24084d8b134c89d348b8fd00000000000000eb05e9320000009090ff155a0700004c8b4c2408498901eb704c8b5c24204c8b442418498b5b1048b8fd00000000000000498b5308ff12eb554883f847756d4c8b74241849ff762849ff763049ff763849ff764049ff76484d8b56204d8b4e184d8b4610498b5e08498b069090ff15fe0600004c8b6c24104d8b65004983fc45752f4c8b5c2420eb0ae965060000e960060000488b442418498b531890ff124c8b142449c70287000000eb6de9200000004c8b5c24204c8b442418498b5b1048b84700000000000000498b5308ff12eb714883f845751e4c8b742420488b442418498b5618ff124c8b2c2449c745007f000000eb6f4883f87775234c8b342449c706730000004c8b6c24184d8b650049c7042441000000eb70e9d50500004883f85975234c8b342449c706710000004c8b6c24184d8b650049c7042441000000eb68e9ac0500004883f85175624c8b74241849ff762849ff763049ff763849ff7640eb05e98a05000049ff76484d8b56204d8b4e184d8b4610498b5e08498b0690ff15f2050000eb05e9650500004c8b6c24104d8b65004983fc5574174c8b1c2449c70369000000eb62e944050000e90d000000488b442418ff15c2050000eb6f4883f853751e4c8b342449c7066b0000004c8b6c24184d8b650049c7042441000000eb5a4881f8b700000075234c8b342449c7066d0000004c8b6c24184d8b650049c7042441000000eb5fe9e20400004881f8bb000000752a4c8b342449c7066f0000004c8b6c24184d8b6500eb05e9be04000049c7042441000000eb58e9af0400004881f8bf00000075234c8b342449c706670000004c8b6c24184d8b650049c7042441000000eb58e9830400004881f8f700000075234c8b342449c706750000004c8b6c24184d8b650049c7042441000000eb6ee9570400004881f8fb00000075234c8b342449c706770000004c8b6c24184d8b650049c7042441000000eb6be92b0400004883f85d75654c8b74241849ff762849ff763049ff763849ff764049ff76484d8b56204d8b4e184d8b4610498b5e08498b06909090ff1586040000eb05e9e90300004c8b6c24104d8b65004983fc5d746e4c8b5c241848b80100000000000000498b5320eb0ae9c0030000e9aa01000090ff124c8b5424104d8b0a504c89cb48b8a016eeacaa2a0000ff153a0400004d8d7fe84c3b7d107303ff554049c747f8020000004d89f848bfc016eeacaa2a000049893849894008488b742420eb05e94900000048ff761048ff761848ff762048ff762848ff763048ff763848ff764048ff76484c8b56084c8b0e4c89c349b803000000000000004889da488b5c24404889d09090ff15c6030000eb6e4c8b5c241849ff732849ff733049ff733849ff734049ff73484d8b53204d8b4b184d8b4310498b5b08498b03ff159a0300004c8b5424104d8b0a4983f95d746e4c8b44241848b80100000000000000498b502090ff12488b7c2410488b37504889f348b81817eeacaa2a0000eb05e9a702000090ff155a0300004d8d7fe84c3b7d107303ff554049c747f8020000004c89fb48ba4017eeacaa2a000048891348894308488b4c242048ff7110eb05e93d00000048ff711848ff712048ff712848ff713048ff713848ff714048ff71484c8b51084c8b0949b803000000000000004889d8488b5c2440ff15ee020000eb604c8b042449c7007b000000488b7c2418488b3748c7064100000050eb624883f809750d4c8b342449c70601000000eb744883f86172164883f8737710488b442418909090ff15aa020000eb5d4881f88300000072104881f8b50000007707eb24e9c50100004881f8c300000072094881f8f5000000760d4883f84f7407eb39e9a60100004c8b7424204c8b44241848bb9817eeacaa2a000048b8b01e600000000000eb0ae980010000e97b010000498b56089090ff12eb555049be29000000000000004983fe01750c49bd0100000000000000eb594d8d66fe4d8d5c241049ba7818eeacaa2a00004d89d949d1e94f0fb60c0a4f8d4c09014c8b04244d3bc8751149bd0300000000000000eb21e917010000498d7efe4989fe483b65187303ff5548eb9f49bd01000000000000004983fd017420488b7c24284c8b442420488b5f1048b8b01e600000000000488b5708ff12eb6e488b0424ff159e010000488b7c24205048b80100000000000000488b57209090ff1250488b5c240848b8a018eeacaa2a00009090ff157601000048bb4500000000000000ff156e0100004d8d7fe84c3b7d107303ff554049c747f8020000004c89fe48bbc818eeacaa2a0000eb05e95e00000048891e48894608488b54243048ff721048ff721848ff722048ff722848ff723048ff723848ff724048ff72484c8b52084c8b0a49b80300000000000000488b5c24404889f0ff1502010000488b4c2430488b0148c700410000004883c4104883c408504883c4084c8b34244d8b2e4981fd890000007513488b442418488b5424204883c428e95af8ffff48b801000000000000004883c428c390909090|@1159,8191,@1160,@1161,@1141,@303,@1161,@1161,@1164,@1161,@303,@1124,@1161,@303,@1124,@1141,@1043,@303,@303,@1124|143,0,126 192,0,126 344,0,35 951,0,0 992,0,@1131 1032,0,@1132 1103,0,1 1203,0,0 1232,0,@1133 1280,0,@1134 1348,0,1 1516,0,@1135 1526,0,I48 1559,0,20 1575,0,0 1596,0,@1138 1631,0,1 1666,0,0 1696,0,I48 1730,0,0 1754,0,@1139 1772,0,34 1812,0,@1140 1880,0,1 1967,0,0 1131:S16|756e6b6e6f776e2073796d626f6c202e 1132:C2,32|90909090909090483b65187303ff55484c8b7018488b42084c89f2ff22909090|@1121,8191| 1133:S17|756e6b6e6f776e2073796d626f6c202e2e 1134:C2,32|90909090909090483b65187303ff55484c8b7018488b42084c89f2ff22909090|@1121,8191| 1135:O1|@1136 1136:C2,112|4881f883000000720b4881f8b50000007702eb204881f8c300000072094881f8f5000000760e4883f86172134883f8737602eb0b48b80300000000000000c34883f84f750b48b80300000000000000c34881f8bf000000750b48b80300000000000000c348b80100000000000000c390|@1137,1|54,0,1 71,0,1 91,0,1 102,0,0 1137:S24|4c45585f28292e6973416c7068614e756d65726963283129 1138:S20|3a3d3c3e2b2a215e2f7c26257e2d3f60405c2423 1139:S19|756e6b6e6f776e206368617261637465722022 1140:C2,32|90909090909090483b65187303ff55484c8b7018488b42084c89f2ff22909090|@1121,8191| 1141:C30,2448|90909090909090483b65187303ff55484c8b701049c706810000005048ff3048ff7008495648ff70384989c048bbc823eeacaa2a000048b8b01e600000000000ff15720900004c8b6c2410498945004c8b6424184d8b1c244981fbef000000756f4d8b550048bb61000000000000004c89d048bab018600000000000ff124883f801746d4c8b4c240849c701850000004c8b44242049ff702849ff703049ff703849ff704049ff70484d8b50204d8b4818498b38498b7008498b58104989d84889f34889f8909090ff15f2080000eb05e9e1020000488b542418488b0a4881f9f10000007566488b44242048ff7028eb05e9c002000048ff703048ff703848ff704048ff70484c8b50204c8b48184c8b4010488b5808488b00909090ff15a60800004c8b7424184d8b2e4983fd6172084983fd737702eb2b4981fdc300000072104981fdcd0000007707eb17e92e0100004981fd8300000072404981fd8d00000077374c8b44242048bb6024eeacaa2a000048b83825eeacaa2a0000ff154e0800004c8b6424104989042448b801000000000000004883c428c34c8b64242048b80100000000000000498b5424209090ff124c8b5c24104d8b13504c89d348b85025eeacaa2a0000ff150a0800004c8b4c24204d8b014c89c3909090ff15fe0700004d8d7fe84c3b7d107303ff554049c747f8020000004c89ff48be8025eeacaa2a000048893748894708488b5c2428488b5310488b4c24304889542430488b431848894424284c8b73204c897424204c8b6b284c896c24184c8b63304c896424104c8b5b384c895c24084c8b53404c8b0c244c89142448ff73484c8b53084d89c84c8b0b4c89c649b803000000000000004889f34889f851ff2569070000488b024883f861723d4883f87377374c8b44242048bbc823eeacaa2a000048b8d825eeacaa2a000090ff15420700004c8b74241049890648b801000000000000004883c428c34c8b74242048b80100000000000000498b5620ff124c8b6c24104d8b6500504c89e348b85025eeacaa2a0000909090ff15fe0600004c8b5c24204d8b134c89d3909090ff15f20600004d8d7fe84c3b7d107303ff554049c747f8020000004d89f949b8f025eeacaa2a00004d890149894108488b7c2428488b7710488b5c24304889742430488b57184889542428488b4f2048894c2420488b472848894424184c8b77304c897424104c8b6f384c896c24084c8b67404c8b1c244c89242448ff77484c8b57084d89c84c8b0f495049b80300000000000000534c89db488b4424084c8b1c244883c4104953ff25520600004d8b14244981faf1000000756d4d8b4d0048bb61000000000000004c89c848bab0186000000000009090ff124883f801745b4c8b44242049ff702849ff703049ff703849ff704049ff70484d8b50204d8b4818498b38498b7008498b58104989d84889f34889f8909090ff15ea050000488b542418488b0aeb05e9650100004883f961720d4883f9737707eb2be9520100004881f9c3000000720b4881f9cd0000007702eb124881f98300000072404881f98d00000077374c8b44242048bb6024eeacaa2a000048b84826eeacaa2a000090ff158a0500004c8b74241049890648b801000000000000004883c428c3488b4424204c8b702048b801000000000000004c89f290ff124c8b6c24104d8b6500504c89e348b86026eeacaa2a0000909090ff15420500004c8b5c24204d8b134c89d3909090ff15360500004d8d7fe84c3b7d107303ff554049c747f8020000004d89f949b89026eeacaa2a00004d890149894108488b7c2428488b7710488b5c24304889742430488b57184889542428488b4f2048894c2420488b472848894424184c8b77304c897424104c8b6f384c896c24084c8b67404c8b1c244c89242448ff77484c8b57084d89c84c8b0f495049b80300000000000000534c89db488b4424084c8b1c244883c4104953ff25960400004d8b0c244983f95d7502eb1c4d8b04244981f88b0000007502eb0d498b3c244881ffcb000000756e4d8b04244983f85d7569488b7c240848c70783000000498b750048bb5d000000000000004889f0909090ff1546040000488b5c2410488903488b54242048ff722848ff723048ff723848ff724048ff72484c8b52204c8b4a184c8b4210488b5a08488b029090ff1512040000eb0ae949030000e908010000488b4c2418488b014883f86172064883f87376704c8b74242048b80100000000000000498b5620909090ff124c8b6c24104d8b6500504c89e348b8e826eeacaa2a0000909090ff15c20300004c8b5c24204d8b134c89d3909090ff15b60300004d8d7fe84c3b7d107303ff554049c747f8020000004d89f949b81027eeacaa2a0000eb05e9510000004d890149894108488b7c242848ff771048ff771848ff772048ff772848ff773048ff773848ff774048ff77484c8b57084c89ce4c8b0f49b80300000000000000488b5c24404889f090ff1546030000eb2f4c8b7424104d8b2e4c8b44242048bbc823eeacaa2a00004c89e89090ff152a0300004c8b6424104989042450eb0150488b7c2420488b374881fe8b0000007502eb0e488b1f4881fbcb0000007402eb6e488b1f488b5424285348ff722848ff723048ff723848ff724048ff72484c8b52204c8b4a184c8b4210488b5a08488b02ff15ce020000488b4c2428488b014881f8fd00000075704c8b74243049ff762849ff763049ff763849ff764049ff76484d8b56204d8b4e184d8b4610eb05e998010000498b5e08498b069090ff158a0200004c8b6c24284d8b65004983fc6172644983fc73775e4c8b5c241849c703830000004c8b5424204d8b0a48bb6827eeacaa2a0000eb05e9a20000004c89c890ff154e0200004c8b44243048bbc823eeacaa2a0000909090ff153e0200004c8b44242049890048b801000000000000004883c438c34d8b5d004d8d7fe84c3b7d107303ff554049c747f8020000004d89fa49c74208010000004d891a4d8d7fe84c3b7d107303ff554049c747f8020000004d89f94d89510849c701fd0000004c8b4424104d8908488b3c2449897d0048b801000000000000004883c438c34c8b314983fe61725e4983fe7377584c8b6c241849c74500830000004c8b6424204d8b1c2448bb8b000000000000004c89d8ff158e0100004c8b44243048bbc823eeacaa2a0000909090ff157e0100004c8b54242049890248b801000000000000004883c438c34c8b294d8d7fe84c3b7d107303ff554049c747f8020000004d89fc49c7442408010000004d892c244c8b5c24104d89234c8b14244c891148b801000000000000004883c438c348b801000000000000004883c430c348b801000000000000004883c428c3909090|@1173,8191,@1172,@1161,@1161,@1172,@303,@303,@1124,@1172,@303,@303,@1124,@1161,@1172,@303,@303,@1124,@303,@1161,@303,@303,@1124,@1172,@1161,@1161,@303,@1172,@303,@1172|46,0,@1142 56,0,I48 103,0,48 116,0,I24 362,0,@1145 372,0,@1148 397,0,0 417,0,0 448,0,@1149 508,0,@1150 618,0,1 661,0,@1142 671,0,@1151 696,0,0 716,0,0 745,0,@1149 808,0,@1152 917,0,1 969,0,48 982,0,I24 1141,0,@1145 1151,0,@1153 1176,0,0 1200,0,0 1229,0,@1154 1292,0,@1155 1401,0,1 1502,0,46 1621,0,0 1653,0,@1156 1716,0,@1157 1787,0,1 1827,0,@1142 2065,0,@1158 2097,0,@1142 2124,0,0 2229,0,0 2281,0,69 2305,0,@1142 2332,0,0 2402,0,0 2417,0,0 2432,0,0 1142:O1|@1143 1143:C2,48|4883f861721c4883f873770b48b80300000000000000c348b80100000000000000c348b80100000000000000c3909090|@1144,1|14,0,1 25,0,0 36,0,0 1144:S15|436861722e69734469676974283129 1145:O1|@1146 1146:C2,104|4883f86172114883f873770b48b80300000000000000c34881f8c300000072144881f8cd000000770b48b80300000000000000c34881f883000000721f4881f88d000000770b48b80300000000000000c348b80100000000000000c348b80100000000000000c390|@1147,1|14,0,1 43,0,1 72,0,1 83,0,0 94,0,0 1147:S18|436861722e69734865784469676974283129 1148:S3|307778 1149:S25|6d616c666f726d656420776f726420636f6e7374616e743a20 1150:C2,32|90909090909090483b65187303ff55484c8b7018488b42084c89f2ff22909090|@1121,8191| 1151:S2|3077 1152:C2,32|90909090909090483b65187303ff55484c8b7018488b42084c89f2ff22909090|@1121,8191| 1153:S2|3078 1154:S28|6d616c666f726d656420696e746567657220636f6e7374616e743a20 1155:C2,32|90909090909090483b65187303ff55484c8b7018488b42084c89f2ff22909090|@1121,8191| 1156:S23|6d616c666f726d6564207265616c206e756d6265723a20 1157:C2,32|90909090909090483b65187303ff55484c8b7018488b42084c89f2ff22909090|@1121,8191| 1158:S2|457e 1159:S20|4c45585f28292e7061727365546f6b656e283129 1160:C3,104|90909090909090483b65187303ff55484c8b304d8b2e4983fd1372084983fd1b7702eb084983fd417402eb385048ff702848ff703048ff703848ff704048ff70484c8b50204c8b48184c8b4010488b5808488b00ff1536000000488b04244883c408eba34c89e8c3|@1162,8191,@1161| 1161:C2,128|90909090909090483b65187303ff55484c8b5424184d8b0a4983f90175445048b80100000000000000488b5424309090ff1248f7c00100000075054c8b00eb0a49b80900000000000000488b3c244c890748b801000000000000004883c408c228004d8b41084d8902498b3948893848b80100000000000000c2280090909090|@1163,8191|33,0,0 66,0,4 83,0,0 113,0,0 1162:S24|4c45585f28292e736b697057686974655370616365283129 1163:S17|4c45585f28292e6e657874436828313029 1164:C3,72|90909090909090483b65187303ff554848ff70285048ff3048b80100000000000000488d54241890ff15420000004c8b342449890648b801000000000000004883c418c390909090|@1166,8191,@1165|26,0,0 55,0,0 1165:C3,112|90909090909090483b65187303ff5548488b42f0524c8b702048b801000000000000004c89f29090ff12504c8b6c240848b80100000000000000498b55f89090ff1248f7c0010000007505488b00eb0a48b80900000000000000488d54241090ff15320000004883c410c39090909090|@1170,8191,@1167|27,0,0 50,0,0 82,0,4 1166:S22|4c45585f28292e7061727365436f6d6d656e74283129 1167:C7,472|90909090909090483b65187303ff55484883f80975734c8b72f84d8b6ef05250495548b80100000000000000498b5520ff124c8b6424105048bbffffffffffffffff498b4424f090ff15b20100004889c348b8f02ceeacaa2a000090ff15a601000048bb5300000000000000ff159e0100004d8d7fe84c3b7d107303ff554049c747f802000000eb05e9620000004d89fb49ba302deeacaa2a00004d8913498943084c8b4c240849ff711049ff711849ff712049ff712849ff713049ff713849ff714049ff71484d8b51084d8b0949b80300000000000000488b5c24404c89d8ff1532010000488b4424104883c420c34c8b72f8525048b80100000000000000498b56f8ff1248f7c00100000075054c8b28eb0a49bd09000000000000004c8b24244983fc5575534983fd53753c4c8b5c24084d8b53f848b80100000000000000498b52f8909090ff1248f7c0010000007508488b004883c410c348b809000000000000004883c410c34c89e8488b5424084883c410e98cfeffff4983fc5175404983fd55752948b801000000000000004c8b5c2408498b53f89090ff157e000000488b5424084883c410e957feffff4c89e8488b5424084883c410e946feffff4c89e8488b5424084883c410e935feffff909090909090|@1171,8191,@305,@303,@303,@1124,@1165|36,0,0 58,0,-1 83,0,@1168 100,0,41 147,0,@1169 208,0,1 248,0,0 278,0,4 313,0,0 349,0,4 393,0,0 1168:S45|656e64206f662066696c6520666f756e6420696e20636f6d6d656e742028737461727473206174206c696e6520 1169:C2,32|90909090909090483b65187303ff55484c8b7018488b42084c89f2ff22909090|@1121,8191| 1170:S36|4c45585f28292e7061727365436f6d6d656e74283129736b6970436f6d6d656e74283129 1171:S54|4c45585f28292e7061727365436f6d6d656e74283129736b6970436f6d6d656e74283129736b6970436f6d6d656e74426f6479283129 1172:C4,96|90909090909090483b65187303ff554849505349ff305048b80100000000000000488d5424209090ff155a0000004d8d7fe84c3b7d107303ff554049c747f8020000004d89fe498946084c8b2c244d892e4c89f04883c420ff25320000009090|@1175,8191,@1174,@331|25,0,0 1173:S21|4c45585f28292e70617273654e756d626572283129 1174:C3,200|90909090909090483b65187303ff5548488b42e84c8b305249564c89f0488b52f0909090ff124883f801746d4c8b6c24084d8b65f849ff74242849ff74243049ff74243849ff74244049ff7424484d8b5424204d8b4c24184d8b442410498b5c2408498b04249090ff158200000048b80100000000000000488b542408e885ffffff4d8d7fe84c3b7d107303ff554049c747f802000000eb05e9160000004d89fb498943084c8b14244d89134c89d84883c410c348b801000000000000004883c410c39090909090|@1176,8191,@1161|112,0,0 182,0,0 1175:S19|4c45585f28292e726561644368617273283329 1176:S26|4c45585f28292e7265616443686172732833296c6f6f70283129 1177:O2|@1179,@1178 1178:O1|@1283 1179:C11,912|90909090909090483b65187303ff554852495049ff3049ff700849ff70109090ff15920300004c8b7424104d8b2e4983fd5d755a4c8b6424185049ff74242849ff74243049ff74243849ff74244049ff7424484d8b5424204d8b4c24184d8b442410498b5c2408498b042490ff154e0300004c8b5c24184d8b134981fa8300000072104981fab50000007707eb19e9e60100004981fac3000000723f4981faf50000007602eb3448bb5d00000000000000488b0424909090ff150a0300004c8b44242048bb9817eeacaa2a0000488b5424284883c430e92cffffff495249b929000000000000004983f901750c49b80100000000000000eb53498d79fe488d771048bb7818eeacaa2a00004889f248d1ea480fb61413488d541201488b0c24483bd1750c49b80300000000000000eb1c498d41fe4989c1483b65187303ff5548eba549b801000000000000004983f8017437488b44243048ff700848bb5d00000000000000488b4424109090ff155e0200004c8b442430488b1c24488b5424384883c440e97efeffff488b4424284c8b702048b801000000000000004c89f290ff1250488b5c241048b87034eeacaa2a00009090ff151e02000048bb5d00000000000000ff1516020000488b5c240890ff15120200004d8d7fe84c3b7d107303ff554049c747f8020000004d89fd49bc9834eeacaa2a00004d896500498945084c8b5c24304d8b53104c8b4c24404c895424404d8b43184c89442438498b7b2048897c2430498b73284889742428498b5b3048895c2420498b53384889542418498b4b4048894c2410498b434848894424084d8b53084d89ce4d8b0b49b80300000000000000488b1c244c89e84883c4084956ff25770100004c8b6424084989042448f7c001000000740c49bb0300000000000000eb084c8b184f8d5c1b0141f6c3017503ff55704983fb017e6d48f7c001000000740c49ba0300000000000000eb084c8b104f8d54120141f6c2017503ff55704983fa017f1a4989c048b860d6ecacaa2a0000ff555849b9010000000000000048f7c00100000074054989c1eb0a4c0fb648084f8d4c09014989c048bb4f00000000000000eb05e91a0000004c89c848bab018600000000000909090ff124883f8017413eb054989c0eb0c48bf7d00000000000000eb2b4c89c348b8f034eeacaa2a0000ff159a00000048f7c0010000007505488b38eb0a48bf03000000000000004c8b142449893a48b801000000000000004883c428c390909090|@1278,8191,@1172,@1161,@303,@303,@303,@303,@303,@1124,@1277|169,0,46 197,0,@1135 223,0,20 239,0,0 259,0,@1138 294,0,1 324,0,0 349,0,46 404,0,0 426,0,@1180 444,0,46 496,0,@1181 606,0,1 653,0,1 697,0,1 735,0,@49 748,0,0 785,0,39 805,0,I24 833,0,62 848,0,@1182 878,0,1 895,0,0 1180:S20|696e76616c6964206964656e7469666572202d20 1181:C2,32|90909090909090483b65187303ff55484c8b7018488b42084c89f2ff22909090|@1121,8191| 1182:O4|-1,@7456,@7457,@7455 1183:O2|@555,272 1184:O2|@1276,14 1185:O2|@1186,28 1186:S4|7468656e 1187:O2|@1188,15 1188:S2|6966 1189:O2|@1190,22 1190:S2|6f66 1191:O2|@1192,37 1192:S7|73686172696e67 1193:O2|@1194,35 1194:S6|737472756374 1195:O2|@1196,29 1196:S4|74797065 1197:O2|@1198,33 1198:S9|737472756374757265 1199:O2|35,43 1200:O2|42,48 1201:O2|@1202,31 1202:S4|77697468 1203:O2|@1204,24 1204:S4|6f70656e 1205:O2|@1206,13 1206:S3|66756e 1207:O2|@1208,3 1208:S3|616e64 1209:O2|@1210,12 1210:S2|666e 1211:O2|58,47 1212:O2|@1213,16 1213:S2|696e 1214:O2|@1215,10 1215:S3|656e64 1216:O2|61,45 1217:O2|@1218,8 1218:S2|646f 1219:O2|@1220,9 1220:S4|656c7365 1221:O2|@1222,40 1222:S6|657174797065 1223:O2|@1224,17 1224:S5|696e666978 1225:O2|@1226,7 1226:S8|6461746174797065 1227:O2|@1228,23 1228:S2|6f70 1229:O2|@1230,5 1230:S2|6173 1231:O2|@1232,2 1232:S7|61627374797065 1233:O2|@1234,34 1234:S9|7369676e6174757265 1235:O2|@1236,18 1236:S6|696e66697872 1237:O2|@1238,39 1238:S8|7769746874797065 1239:O2|@1240,30 1240:S3|76616c 1241:O2|@1242,26 1242:S5|7261697365 1243:O2|@1244,21 1244:S6|6e6f6e666978 1245:O2|124,44 1246:O2|@1247,38 1247:S7|66756e63746f72 1248:O2|@1249,11 1249:S9|657863657074696f6e 1250:O2|@1251,42 1251:S5|7768657265 1252:O2|@1253,36 1253:S3|736967 1254:O2|@1255,25 1255:S6|6f72656c7365 1256:O2|@1257,20 1257:S5|6c6f63616c 1258:O2|@1259,49 1259:S2|2d3e 1260:O2|@1261,32 1261:S5|7768696c65 1262:O2|@1263,50 1263:S2|3a3e 1264:O2|@1265,46 1265:S2|3d3e 1266:O2|@1267,27 1267:S3|726563 1268:O2|@1269,19 1269:S3|6c6574 1270:O2|@1271,41 1271:S7|696e636c756465 1272:O2|@1273,4 1273:S7|616e64616c736f 1274:O2|@1275,6 1275:S4|63617365 1276:S6|68616e646c65 1277:C4,112|90909090909090483b65187303ff55484c8b304983feff752e4c8b68084d8b65004c8b58184d8b134952534889d84c89e2909090ff12488d54241090ff15560000004883c410c348ff7010534c8b68084889d84c89ea9090ff12488d54241090ff153a0000004883c410c39090909090|@1280,8191,@1281,@1279| 1278:S20|4c45585f28292e70617273654964656e74283329 1279:C2,256|90909090909090483b65187303ff5548a8017503ff55704883f8017d02eb284c8b72f84d8b6ef849c1e50849c1ed084f8d6c2d01504923c5a801587503ff5570493bc57d02eb1d4989c548b860d6ecacaa2a0000909090ff555849be01000000000000004d8b6c86fc4d89ee4983fe01750b48b80100000000000000c34989d54989c4498b1e498b45f048bab018600000000000ff124883f80174204d8d7ff04c3b7d107303ff554049c747f8010000004c89f8498b7e08488938c34983fc01751a498b7df8488b77f848c1e60848c1ee08488d7436014989f3eb034d89e341f6c3017503ff55704c89d84883e80270f44c89eae90effffff90909090909090|@1282,7743|76,0,@49 92,0,0 116,0,0 140,0,I24 1280:S20|486173685461626c652e68617368537562283229 1281:C2,240|90909090909090483b65187303ff5548a8017503ff55704883f8017d02eb1a4c8b72f84d8b2e504923c5a801587503ff5570493bc57d02eb1b4989c548b860d6ecacaa2a000090ff555849be0100000000000000a8017503ff55704989c54983c50270f44f8b64aefc4d89e64983fe01750b48b80100000000000000c34989d54989c4498b1e498b45f048bab018600000000000ff124883f80174204d8d7ff04c3b7d107303ff554049c747f8010000004c89f8498b7e08488938c34983fc01750c498b7df8488b374989f3eb034d89e341f6c3017503ff55704c89d84883e80270f44c89eae91cffffff9090909090|@1282,7743|62,0,@49 76,0,0 116,0,0 140,0,I24 1282:S27|486173685461626c652e6861736853756228322966696e64283129 1283:C2,128|5049be29000000000000004983fe01750f48b801000000000000004883c408c3498d46fe4c8d681048b87818eeacaa2a00004d89ec49d1ec4e0fb624204f8d642401488b04244c3be0750f48b803000000000000004883c408c34d8d6efe4d89ee483b65187303ff5548eb9f48b801000000000000004883c408c39090909090|@1284,7169|3,0,20 19,0,0 42,0,@1138 77,0,1 110,0,0 1284:S27|436861722e636f6e7461696e732831296d61746368283129283129 1285:C6,456|90909090909090483b65187303ff5548505248ff3048ff700848ff702848ff703048ff703848ff704048ff70484c8b50204c8b48184c8b4010488b5c2428488b00909090ff15a601000048ff750849be7a43eeacaa2a000049564c8b6c242049ff75084889650848b80100000000000000488d5424389090ff157a01000049bc01000000000000004883f80175054c89e0eb3e4d8d7fe84c3b7d107303ff554049c747f8020000004d89fb4d8963084c8b104d89134d89dc488b4008483b65187303ff5548ebc148b80100000000000000909090ff15260100004c8b5c241849890348b8010000000000000048ff742410488f45084883c438c34c8b5424104c8b084d8b42084d3bc8756d488b7c24185048b80100000000000000488b572090ff12488b742420488b5e10488b54242848895c2428488b4e1848894c24204c8b76204c897424184c8b6e284c8b6424104c896c24104c8b5e304c895c24084c8b56384c8b0c244c89142448ff764048ff76484c8b5608eb05e9390000004d89c84c8b0e4c89c749b803000000000000004889c348b8a044eeacaa2a000052ff25640000004889c748b801000000000000004883c420c390ff555848b8010000000000000090909090|@1297,8191,@1161,@1289,@306,@1124|80,0,$1285+250 105,0,0 128,0,0 201,0,0 228,0,0 275,0,0 392,0,1 405,0,@1286 425,0,0 444,0,0 1286:O1|@1287 1287:C2,40|90909090909090483b65187303ff55484c8b701848b81045eeacaa2a00004c89f2ff229090909090|@1121,8191|22,0,@1288 1288:S36|6e6f206d61746368696e672071756f746520666f756e64206f6e2074686973206c696e65 1289:C18,1552|90909090909090483b65187303ff55484c8b72e84d8b2e4983fd4575114c8b6af84d8b650049c7042441000000c34983fd1575724c8b62f85249ff74242849ff74243049ff74243849ff74244049ff7424484d8b5424204d8b4c24184d8b442410498b5c2408498b04249090ff15c60500004c8b1c244d8b53f04d8d7fe04c3b7d107303ff554049c747f8030000004d89f949c741100100000049b8104ceeacaa2a0000eb05e91d0000004d894108498b7a084989394c89c89090ff555848b801000000000000004981fdb9000000756d4c8b62f8525049ff74242849ff74243049ff74243849ff74244049ff7424484d8b5424204d8b4c24184d8b442410498b5c2408498b0424ff15320500004c8b5c24084d8b53e84d8b0a4d8b43f8495149ff702849ff703049ff703849ff704049ff70484d8b50204d8b4818eb05e90f030000498b38498b7008498b58104989d84889f34889f890ff15ea040000488b14244883fa1372084883fa1b7702eb084883fa417402eb6d488b4c2410488b41f8909090ff15c60400004881f8b90000007502eb55488b4424104c8b70f8495648b80100000000000000498b56209090ff124c8b6c24184d8b65e84d8b1c245048bb28e3edacaa2a00004c89d8909090ff15820400004889c348b8304ceeacaa2a0000eb0ae93f010000e9ee00000090ff156a04000048bb584ceeacaa2a0000ff15620400004d8d7fe84c3b7d107303ff554049c747f8020000004d89fa49b9784ceeacaa2a00004d890a498942084c8b44240849ff701049ff701849ff702049ff702849ff703049ff703849ff704049ff70484c89d74d8b50084d8b0849b80300000000000000488b5c24404889f8ff15fa030000488b742420488b5ee8488b134881fab9000000744e488b0b4883f9457445488b034883f809743c4c8b76f849ff762849ff763049ff763849ff764049ff76484d8b56204d8b4e184d8b4610498b5e08498b06ff15aa030000483b65187303ff5548eb9d4883c410488b4c2410488b41f848ff702848ff703048ff703848ff704048ff70484c8b50204c8b48184c8b4010488b5808488b00909090ff156a030000488b442408488b5424104883c418e9defcffff4881fabd0000007570488b4c2410488b41e84c8b304c8b69f8495649ff752849ff753049ff753849ff754049ff75484d8b55204d8b4d184d8b4510498b5d08498b4500ff15160300004d8d7fe84c3b7d107303ff554049c747f8020000004d89fc4c8b5c24104d895c240849c70424b90000004d8d7fe8eb05e9530000004c3b7d107303ff554049c747f8020000004d89fa4d89620849c702bd0000004d8d7fe84c3b7d107303ff554049c747f8020000004d89f94d8951084c8b04244d89014c89c8488b5424184883c420e90dfcffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89f9488b4424084889410848c701b90000004d8d7fe84c3b7d107303ff554049c747f8020000004d89fe49894e084989164c89f0488b5424104883c418e9b5fbffff4c8b62f85250495549ff74242849ff74243049ff74243849ff74244049ff7424484d8b5424204d8b4c24184d8b442410498b5c2408498b042490ff15fe0100004c8b1c244983fb0975504c8b5424104d8b4af04d8d7fe04c3b7d107303ff554049c747f8030000004d89f849c740100100000048bf104ceeacaa2a000049897808498b71084989304c89c09090ff555848b801000000000000004983fb43720b4981fbfd0000007702eb084983fb417402eb354d8d7fe84c3b7d107303ff554049c747f8020000004d89fa4c8b4c24084d894a084d891a4c89d0488b5424104883c418e9cdfaffff4c8b5424104d8b4af8495148b80100000000000000498b512090ff1250488b442410ff15360100004889c348b8d04ceeacaa2a000090ff152a01000048bbf84ceeacaa2a0000ff15220100004d8d7fe84c3b7d107303ff554049c747f8020000004d89f848bf184deeacaa2a000049893849894008488b74240848ff761048ff761848ff762048ff762848ff763048ff763848ff764048ff76484c8b56084c8b0e4c89c349b803000000000000004889da488b5c24404889d090ff15b6000000488b442418488b5424204883c428e9faf9ffff909090|@1298,8191,@1161,@1161,@1161,@1160,@1061,@303,@303,@1124,@1161,@1161,@1161,@1161,@1043,@303,@303,@1124|156,0,@1290 192,0,0 418,0,0 450,0,@1042 475,0,@1291 504,0,@1292 544,0,@1293 608,0,1 1223,0,@1290 1252,0,0 1351,0,0 1383,0,@1294 1400,0,@1295 1440,0,@1296 1504,0,1 1290:S9|456e644f664c696e65 1291:S21|756e65787065637465642063686172616374657220 1292:S11|20696e205c202e2e2e205c 1293:C2,32|90909090909090483b65187303ff55484c8b7018488b42084c89f2ff22909090|@1121,8191| 1294:S22|756e7072696e7461626c652063686172616374657220 1295:S16|20666f756e6420696e20737472696e67 1296:C2,32|90909090909090483b65187303ff55484c8b7018488b42084c89f2ff22909090|@1121,8191| 1297:S21|4c45585f28292e7061727365537472696e67283129 1298:S33|4c45585f28292e7061727365537472696e67283129676574537472696e67283129 1299:O3|103,@333,@1300 1300:S22|537461746963206572726f7273202870617373203129 1301:O1|@1302 1302:C2,16|48b8704eeeacaa2a0000c39090909090|@1304,1|2,0,@1303 1303:O6|0,0,0,0,0,0 1304:S34|434f4d50494c45525f424f445928292e62617365436f6d70696c6572283329283129 1305:C2,56|90909090909090483b65187303ff55485250488b52109090ff124883f80175134c8b742408488b0424498b56084883c410ff224883c410c3|@1306,8191| 1306:S24|4d6973632e6c6f6f6b757044656661756c74283229283129 1307:O31|@1309,@1881,@1882,@1889,@1891,@1892,@1893,@1894,@1884,@1897,@1899,@1900,@1901,@1902,@1903,@1905,@1906,@1907,@1910,@1913,@1914,@1915,@1918,@1919,@1396,@1920,@1921,@1922,@1898,@1923,@1308 1308:O3|@1337,@1386,@1922 1309:C8,1232|90909090909090483b65187303ff55484d8d7fe84c3b7d107303ff554049c747f8020000004d89fe49bdd055eeacaa2a00004d892e49895e084d8d7fe84c3b7d107303ff554049c747f8020000004d89fd49bc9072eeacaa2a00004d89650049895d084d8d7fd84c3b7d107303ff554049c747f8040000004d89fc49bb6875eeacaa2a00004d891c244d897424184d896c241049895c24084d8d7fc84c3b7d107303ff554049c747f80600000049c647ff404d89fb49bad8b5eeacaa2a00004d891349c743080100000049c743100100000049c743180100000049c743200100000049c74328010000004d8d7fd04c3b7d107303ff554049c747f80500000049c647ff404d89fa49b9e8c0eeacaa2a00004d890a49c742080100000049c742100100000049c742180100000049c74220010000004d8d7fd84c3b7d107303ff554049c747f8040000004d89f948bf38caeeacaa2a00004989394d897118498959104d89510849895a08488bbae800000049897a104d896a18488bb2f00000004989722049c642ff0049895b084d8963104d894b184d8953204d89732849c643ff004d8d7fe84c3b7d107303ff554049c747f8020000004d89fa48b9c8cceeacaa2a000049890a49895a084d8dbf40ffffff4c3b7d107303ff554049c747f8170000004c89f948bfe0d0eeacaa2a0000488939488bbae00000004889b9b0000000488bb2d80000004889b1a8000000488bb2d00000004889b1a0000000488bb2c80000004889b198000000488bb2c00000004889b190000000488bb2b80000004889b188000000488bb2b00000004889b180000000488b722848897178488bb2a800000048897170488bb2a000000048897168488bb29800000048897160488bb29000000048897158488bb28800000048897150488b722048897148488bb28000000048897140488b7278488971384c8949304c8959284c896120488959184c8951104c897108524953534954495249554956514d8d7fe84c3b7d107303ff554049c747f8020000004d89f948bbb87defacaa2a0000498919488b5c2428498959084d8d7fe04c3b7d107303ff554049c747f8030000004c89fb4c894b104d8b48084c894b084d8b084c890b504d8d7fe84c3b7d107303ff554049c747f8020000004c89f849b8f07fefacaa2a00004c8940084c8b0c244c89084989d8ff1596010000495050488b7c2440488b7710488b1e488b57304c8b324981fe8900000074054d89f5eb034989dd4c8b4c2450498b59084c89e8909090ff15620100004883f801741b4c8b442450498b4008488d5424589090ff154e0100004883c458c34c8b44244049ff702849ff703049ff703849ff704049ff70484d8b50204d8b4818498b38498b7008498b58104989d84889f34889f8ff1516010000504c8b4c24084c8b44244848bb0100000000000000488b442410488b542420909090ff12488b1c249090ff15ee000000488b542448488b4a104c8b314c8b6a304d8b65004981fc8900000074054d89e3eb034d89f34983fb7374424c8b194d8b55004981fa8900000074054d89d1eb034d89d94983f9017424504889d348b8770000000000000048ba2858eeacaa2a000090ff158e0000004989c1eb0b49b90100000000000000504d8d7fe84c3b7d107303ff554049c747f8020000004c89f848c74008010000004c8b1c244c89184883c468c39090|@1758,8191,@1390,@1333,@1759,@1329,@1757,@1315|42,0,@1310 83,0,@1373 125,0,@1379 183,0,@1501 265,0,@1517 334,0,@1531 443,0,@1533 487,0,@1539 749,0,@1750 838,0,@1755 1031,0,0 1145,0,59 1155,0,@1313 1177,0,0 1310:C7,424|90909090909090483b65187303ff55485248ff73085048ff33488b5a08488b4b104c8b314c8b6b304d8b65004981fc8900000074054d89e3eb034d89f34983fb7d754248b80100000000000000488d5424209090ff15760100004989c34d8d7fe84c3b7d107303ff554049c747f8020000004c89f848c74008010000004c89184883c420c34c8b194d8b55004981fa8900000074054d89d1eb034d89d94983f969756e4889d848ba9808eeacaa2a0000ff15220100004c8b4c24184d8b4108498b7810488b37498b5830488b134881fa8900000074054889d1eb034889f14883f97d7437488b0b4881f989000000740e48b8d857eeacaa2a000090ff555848c7036900000048b80100000000000000eb05e9810000004883c420c34950488d5424289090ff15b6000000488b4c24204c8b71084d8b6e104d8b65004d8b5e304d8b134981fa8900000074054d89d1eb034d89e14983f96b7517504c89f048ba9808eeacaa2a000090ff157a000000eb1e504c89f348b8530000000000000048ba2858eeacaa2a0000ff1562000000488b04244883c430c348b801000000000000004883c420c39090|@1352,8191,@1353,@1117,@1348,@1117,@1315|69,0,0 168,0,@1115 242,0,@1311 263,0,0 351,0,@1115 374,0,41 384,0,@1313 409,0,0 1311:O3|@7377,@215,@1312 1312:S31|417474656d707420746f20707573682074776f20706172656e746865736573 1313:O2|@1315,@1314 1314:O3|@1337,@1339,@1336 1315:C12,640|90909090909090483b65187303ff55484c8b73104d8b2e4c8b63304d8b1c244981fb8900000074054d89daeb034d89ea4983fa7f755d4989c54989db49ff7328495449ff733849ff734049ff73484d8b53204d8b4b184d89f0498b5b08498b03ff1542020000495549534889c348b8450000000000000090ff153202000048bb4500000000000000ff152a0200004989c2eb6c4d8b164d8b0c244981f98900000074054d89c8eb034d89d05053488b5a084c89c0ff15060200004883f80174444c8b042449ff702849ff703049ff703849ff704049ff70484d8b50204d8b4818498b38498b7008498b58104989d84889f34889f8ff15ce0100004989c2eb71e9790000004c8b0424498b7810488b37498b5830488b134881fa8900000074054889d1eb034889f1f6c1017503ff55704883f9017d02eb13f6c1017503ff55704881f98b0000007d02eb1a48b860d6ecacaa2a0000909090ff555849ba010000000000000048b8685beeacaa2a0000eb05e9080000004c8b7488fc4d89f24c8b2c24495249ff752849ff753049ff753849ff754049ff75484d8b55204d8b4d184d8b4510498b5d08498b450090ff151e0100005048bbc85eeeacaa2a0000488b4424189090ff150e010000488b5c240890ff150a01000048bbe85eeeacaa2a0000ff15020100004d8d7fe84c3b7d107303ff554049c747f8020000004d89fc49bb085feeacaa2a00004d891c2449894424084c8b5424104d8b4a104c8b4424204c894c2420498b7a1848897c2418498b72204889742410498b5a2848895c2408498b5230488b0c244889142449ff723849ff724049ff7248498b024d8b72084d89f24989c14d89c549b803000000000000004889cb4c89e04955ff257100000090|@1330,8191,@1331,@303,@303,@1333,@1331,@1329,@303,@303,@303,@1124|111,0,34 128,0,34 332,0,@49 348,0,0 358,0,@1316 437,0,@1326 472,0,@1327 512,0,@1328 617,0,1 1316:O69|7,@1318,@1232,@1208,@1273,@1230,@1275,@1226,@1218,@1220,@1215,@1249,@1210,@1206,@1276,@1188,@1213,@1224,@1236,@1269,@1257,@1244,@1190,@1228,@1204,@1255,@1242,@1267,@1186,@1196,@1240,@1202,@1261,@1198,@1234,@1194,@1253,@1192,@1247,@1238,@1222,@1271,@1251,35,124,61,@1265,58,42,@1259,@1263,95,40,41,91,93,44,59,123,125,46,@1319,@1320,@1321,@1322,@1323,@1324,@1325,@1317 1317:S14|756e6b6e6f776e2073796d626f6c 1318:S12|3c6964656e7469666965723e 1319:S3|2e2e2e 1320:S17|3c74797065206964656e7469666965723e 1321:S17|3c737472696e6720636f6e7374616e743e 1322:S18|3c696e746567657220636f6e7374616e743e 1323:S15|3c7265616c20636f6e7374616e743e 1324:S15|3c776f726420636f6e7374616e743e 1325:S15|3c6368617220636f6e7374616e743e 1326:S14|2065787065637465642062757420 1327:S10|2077617320666f756e64 1328:C2,32|90909090909090483b65187303ff55484c8b7018488b42084c89f2ff22909090|@1121,8191| 1329:C2,48|90909090909090483b65187303ff554848b801000000000000004c89d24c8b34244883c4304956ff2290909090909090|@1335,8191|18,0,0 1330:S20|534b4950535f28292e6e6f74666f756e64283229 1331:C2,16|4c8b134c89d0c2280090909090909090|@1332,457| 1332:S13|4c45585f28292e696428313029 1333:C2,24|90909090909090483b65187303ff55484889daff22909090|@1334,8191| 1334:S19|53594d5f53455428292e696e73696465283229 1335:S17|4c45585f28292e6c696e656e6f28313029 1336:O1|@1347 1337:C2,72|90909090909090483b65187303ff55485250488b52109090ff124883f801740f48b803000000000000004883c410c34c8b742408488b0424498b56084883c410ff22909090909090|@1338,8191|34,0,1 1338:S17|496e745365742e706c7573283229283129 1339:O3|@1337,@1341,@1340 1340:O1|@1346 1341:O3|@1337,@1343,@1342 1342:O1|@1345 1343:O1|@1344 1344:C2,32|4883f803750b48b80300000000000000c348b80100000000000000c390909090|@1114,1|8,0,1 19,0,0 1345:C2,32|4883f87d750b48b80300000000000000c348b80100000000000000c390909090|@1114,1|8,0,1 19,0,0 1346:C2,32|4881f881000000750b48b80300000000000000c348b80100000000000000c390|@1114,1|11,0,1 22,0,0 1347:C2,32|4881f883000000750b48b80300000000000000c348b80100000000000000c390|@1114,1|11,0,1 22,0,0 1348:C4,160|90909090909090483b65187303ff55485248b8010000000000000090ff15a60000004c8b3424504d8b46d848bb0062eeacaa2a000048b8710000000000000048ba6864eeacaa2a0000909090ff157e0000004883f801740f488b542408e8a5ffffff4989c5eb0a49bd01000000000000004d8d7fe84c3b7d107303ff554049c747f8020000004d89fc4d896c24084c8b1c244d891c244c89e04883c410c39090|@1372,8191,@1353,@1350|19,0,0 45,0,@1342 55,0,56 65,0,@1349 105,0,0 1349:O2|@1350,@1313 1350:C5,312|90909090909090483b65187303ff55484d8b70104d8b2e4d8b60304d8b1c244981fb8900000074054d89daeb034d89ea49524c0bd041f6c201495a7503ff55704c3bd075204c89c048ba9808eeacaa2a00009090ff150601000048b80300000000000000c34d8b164d8b0c244981f98900000074054c89cfeb034c89d7525049504889f8ff15de0000004883f80174704c8b44240841f6c0017503ff55704983f8017d02eb1441f6c0017503ff55704981f88b0000007d02eb1a48b860d6ecacaa2a0000909090ff555848bf010000000000000048bf685beeacaa2a00004a8b7487fc4889f7488b5c2410488b5308488b1c244889f89090ff12488b0424eb05e92000000048ba9808eeacaa2a000090ff155a00000048b803000000000000004883c418c348b801000000000000004883c418c390909090|@1351,8191,@1117,@1333,@1117|74,0,@1115 92,0,1 188,0,@49 204,0,0 214,0,@1316 263,0,@1115 280,0,1 295,0,0 1351:S19|534b4950535f28292e74657374666f72283329 1352:S37|50415253455f44454328292e70617273654465632833296765745479706556617273283229 1353:C9,720|90909090909090483b65187303ff5548488b42f84c8b70084d8b6e104d8b65004d8b5e304d8b134981fa8900000074054d89d1eb034d89e14983f97d744349564c89f348b8f05deeacaa2a000048ba2858eeacaa2a000090ff159a020000488b042448ba9808eeacaa2a0000ff158e02000048b878a6edacaa2a00004883c408c34889d749ff7628495349ff763849ff764049ff76484d8b56204d8b4e184d89e8498b5e08498b06ff155a020000488b77f84889c34d8d7fe04c3b7d107303ff554049c747f8030000004c89f848baa869eeacaa2a000048891048895810488b4e08488948085753488b57e0ff12488b4424084c8b70e84983fe01746a4c8b242449f7c401000000740c49bb0300000000000000eb094d8b1c244f8d5c1b0141f6c3017503ff55704983fb037e5c49f7c401000000740c49ba0300000000000000eb094d8b14244f8d54120141f6c2017503ff55704983fa037f2148b860d6ecacaa2a0000eb05e95b000000909090ff555849b9010000000000000049f7c401000000740a4d89e1eb10e92c0000004d0fb64c24094f8d4c090148bb4f000000000000004c89c848bab018600000000000909090ff124989c5eb1649bd0100000000000000eb0a49bd01000000000000004c8b6424084d8b5c24e84983fb01741e4d8b4c24f84955498b5908488b442408909090ff15160100004989c2eb0c49ba0100000000000000495550504989e1495149b903000000000000004c8b44241848bb1f4e00000000000048b8e005edacaa2a0000909090ff15da0000004d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b04244c8900488b7c2408488978089090ff15b2000000488b7424204889c34d8d7fe84c3b7d107303ff554049c747f8020000004c89f848895808488b54241848891053488b56f090ff12488b4c2428488b41f8488b400848ba9808eeacaa2a0000909090ff1566000000488b04244883c430c39090909090|@1359,8191,@1315,@1117,@1331,@1360,@1369,@1358,@1117|69,0,@1320 79,0,@1313 100,0,@1115 116,0,@617 207,0,@1354 268,0,1 313,0,1 349,0,@49 372,0,0 412,0,39 425,0,I24 445,0,0 457,0,0 513,0,0 532,0,1 547,0,9999 557,0,@193 689,0,@1115 1354:C5,296|90909090909090483b65187303ff55484989d64c8b28498b5e104c89e848bab01860000000000090ff124883f80174714d8b66084955495449ff74242849ff74243049ff74243849ff74244049ff7424484d8b5424204d8b4c24184d8b442410498b5c2408498b0424909090ff15de0000005048bb206beeacaa2a0000488b4424109090ff15ce0000004d8d7fe84c3b7d107303ff554049c747f802000000eb05e9730000004d89fb49ba486beeacaa2a00004d8913498943084c8b4c24084d8b4110488b7c24184c89442418498b71184889742410498b592048895c2408498b5128488b0c244889142449ff713049ff713849ff714049ff71484d8b51084d8b0949b803000000000000004889cb4c89d857ff254700000048b80100000000000000c390909090|@1357,8191,@1329,@303,@1124|31,0,I24 117,0,@1355 171,0,@1356 260,0,1 283,0,0 1355:S23|2068617320616c7265616479206265656e20757365642e 1356:C2,32|90909090909090483b65187303ff55484c8b7018488b42084c89f2ff22909090|@1121,8191| 1357:S55|50415253455f44454328292e7061727365446563283329676574547970655661727328322967657454797065566172283129552d283129 1358:C2,48|4c8b304c8b68084d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c8968104c89700848c70007000000c390|@1371,6145| 1359:S50|50415253455f44454328292e7061727365446563283329676574547970655661727328322967657454797065566172283129 1360:C3,656|90909090909090483b65187303ff5548504c8b734848bb686feeacaa2a00004c89f048bae8d7edacaa2a0000ff15860200004883f801750f48b803000000000000004883c408c34c8b2c2449f7c501000000740c49bc0300000000000000eb094d8b65004f8d64240141f6c4017503ff55704983fc037e7549f7c501000000740c49bb0300000000000000eb094d8b5d004f8d5c1b0141f6c3017503ff55704983fb037f1748b860d6ecacaa2a0000ff555849ba010000000000000049f7c50100000074054d89eaeb0a4d0fb655094f8d54120148bbbf000000000000004c89d048bab018600000000000eb05e9190000009090ff124883f801740f48b803000000000000004883c408c349f7c501000000740c49bb0300000000000000eb094d8b5d004f8d5c1b0141f6c3017503ff55704983fb037e7549f7c501000000740c49ba0300000000000000eb094d8b55004f8d54120141f6c2017503ff55704983fa037f1748b860d6ecacaa2a0000ff555849b9010000000000000049f7c50100000074054d89e9eb0a4d0fb64d094f8d4c090148bb4f000000000000004c89c848bab018600000000000eb05e9ce0000009090ff124883f801747649f7c501000000740c49b90300000000000000eb094d8b4d004f8d4c090141f6c1017503ff55704983f9057e5c49f7c501000000740c49b80300000000000000eb094d8b45004f8d44000141f6c0017503ff55704983f8057f1a48b860d6ecacaa2a0000909090ff555848bf0100000000000000eb05e94900000049f7c501000000740a4c89efeb0fe927000000490fb67d0a488d7c3f0148bbbf000000000000004889f84883c40848bab018600000000000ff2248b801000000000000004883c408c348b801000000000000004883c408c390|@1368,8191,@974|23,0,@1361 36,0,@972 58,0,1 86,0,1 131,0,1 167,0,@49 180,0,0 214,0,95 227,0,I24 254,0,1 278,0,1 323,0,1 359,0,@49 372,0,0 406,0,39 419,0,I24 455,0,1 500,0,1 536,0,@49 552,0,0 598,0,95 615,0,I24 627,0,0 642,0,0 1361:O3|@1363,@1365,@1362 1362:O2|@1367,@7452 1363:O2|@1364,@7452 1364:C2,48|4c8b304c8b6a084d3bf5751648b80300000000000000c348b80100000000000000c348b80100000000000000c3909090|@966,6149|14,0,1 25,0,0 36,0,0 1365:O2|@1366,@7452 1366:C2,48|4989c64d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c89701048c740088b0000004c8b72084c8930c390|@966,4101| 1367:C2,56|4c8b304c8b6a084d3bf57510488b4010c348b80100000000000000c348b8b0d7edacaa2a000090ff555848b8010000000000000090909090|@966,6149|19,0,0 30,0,@970 44,0,0 1368:S21|50415253455f44454328292e69735765616b283229 1369:C2,176|4d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fe49890648f7c30100000074054989ddeb1248f643ff104c8b2b740349f7dd4f8d6c2d01498d5dff48c1e3034883cb014983f801740c48ba0900000000000000eb0a48ba01000000000000004889d8480bc24983f901740c49bd0500000000000000eb0a49bd01000000000000004989c14d0bcd4d89c84d0bc2488b5c24084c89334c89430848b80100000000000000c2080090|@1370,6605|84,0,4 96,0,0 118,0,2 130,0,0 164,0,0 1370:S23|5354525543545f56414c5328292e6d616b655476283629 1371:S7|54797065566172 1372:S29|534b4950535f28292e6765744c697374283429666f724c697374283129 1373:C2,56|4d8d7fe04c3b7d107303ff554049c747f8030000004c89f848bb0073eeacaa2a00004889184c8940104c8b42084c894008c3909090909090|@1378,77|26,0,@1374 1374:C5,264|90909090909090483b65187303ff55485250488b52109090ff1248f7c0010000007508488b004883c410c34c8b7424084d8b6e08495549ff752849ff753049ff753849ff754049ff75484d8b55204d8b4d184d8b4510498b5d08498b45009090ff15ca0000005048bb5874eeacaa2a0000488b4424109090ff15ba0000004d8d7fe84c3b7d107303ff554049c747f8020000004d89fc49bb9874eeacaa2a00004d891c2449894424084c8b54240849ff721049ff721849ff722049ff722849ff723049ff723849ff724049ff72484d8b0a4d8b42084d89c249b80300000000000000488b5c24404c89e09090ff154e00000048b878a6edacaa2a00004883c420c390909090909090|@1377,8191,@1329,@303,@1124|105,0,@1375 152,0,@1376 218,0,1 244,0,@617 1375:S42|20686173206e6f74206265656e206465636c6172656420696e2074797065206465636c61726174696f6e 1376:C2,32|90909090909090483b65187303ff55484c8b7018488b42084c89f2ff22909090|@1121,8191| 1377:S42|50415253455f44454328292e706172736544656328332967656e54797065566172456e76283329283129 1378:S39|50415253455f44454328292e706172736544656328332967656e54797065566172456e76283329 1379:C12,656|90909090909090483b65187303ff55485050504989d14989c04889e348b801000000000000009090ff158a0200004d8d7fe04c3b7d107303ff554049c747f8030000004c89fb488b1424488913488b442408488943084c8b7424104c89731049514950495248b80100000000000000498b511890ff124989c54d8d7fe84c3b7d107303ff554049c747f8020000004c89f849bc8078eeacaa2a00004c8960084c8b5c24084c89184d89ea9090ff150e0200004c8b4c2410495249ff71084c8b04244889c348b81062eeacaa2a000048bae878eeacaa2a0000ff15ea0100004c8b04245049ff702849ff703049ff703849ff704049ff70484d8b50204d8b4818498b38498b7008498b58104989d84889f34889f890ff15b60100004989c0488b5c2408488b04249090ff15aa010000488b5424284c8b442440488b5c2438488b442430488b52109090ff12488b4c24504883f90174314c8b7424284d8b6e084d8b65104d8b1c244d8b55304d8b0a4981f98900000074054d89c8eb034d89d84983f85b7402eb0d4c8b7424184983fe017502eb0c49b8e005edacaa2a0000eb6e4c8b6c24284d8b65084d8b5c24104d8b134d8b4c24304d8b014981f88900000074054c89c7eb034c89d74883ff5b7519504c89e048ba9808eeacaa2a0000909090ff15fa000000eb1e504c89e348b87b0000000000000048ba2858eeacaa2a0000ff15e2000000488b7c2430eb05e95b0000004c8b4f0849b85036eeacaa2a0000488b5c242848b8e07aeeacaa2a000048ba787beeacaa2a0000909090ff15ae000000488b7424304c8b0424488b5e08488b44242848ba487eeeacaa2a00009090ff15920000004989c04883c4084c8b4c2418488b5c2410488b0424488b5424484883c45852ff25750000009090909090|@1480,8191,@1481,@1390,@1383,@1329,@1493,@1117,@1315,@1389,@1397,@1479|30,0,0 103,0,0 147,0,@1380 198,0,@1343 208,0,@1382 405,0,@193 469,0,@1115 494,0,61 504,0,@1313 536,0,@1196 551,0,@1386 561,0,@1388 598,0,@1395 1380:O1|@1381 1381:C2,32|4883f85b750b48b80300000000000000c348b80100000000000000c390909090|@1114,1|8,0,1 19,0,0 1382:O2|@1383,@1313 1383:C7,312|90909090909090483b65187303ff55484d8b70104d8b2e4d8b60304d8b1c244981fb8900000074054d89daeb034d89ea525349504889c34c89d09090ff151e0100004883f80174674c8b142449ff722849ff723049ff723849ff724049ff72484d8b0a4d8b4208498b7a10498b7218498b5a204989da4c89ca4989f14c89c14989f84889cb4889d0ff15da00000050488b44240848ba9808eeacaa2a00009090ff15ca000000488b04244883c420c34c8b542410488b1c2448b8987aeeacaa2a0000498b52089090ff124c8b0c244d8b4110498b38498b7130488b1e4881fb8900000074054889daeb034889fa488b5c24084889d0909090ff157a0000004883f8017521488b042448ba9808eeacaa2a00009090ff1566000000483b65187303ff5548eba548b8b01e6000000000004883c418c390909090|@1385,8191,@1333,@1331,@1117,@1333,@1117|150,0,@1115 186,0,@1384 266,0,@1115 295,0,I48 1384:S10|4964656e746966696572 1385:S17|534b4950535f28292e6765746964283329 1386:O1|@1387 1387:C2,80|4883f875750b48b80300000000000000c34883f869750b48b80300000000000000c34883f803750b48b80300000000000000c34883f87d750b48b80300000000000000c348b80100000000000000c390|@1338,1|8,0,1 25,0,1 42,0,1 59,0,1 70,0,0 1388:O2|@1389,@1313 1389:C6,296|90909090909090483b65187303ff55484d8b71104d8b2e4d8b61304d8b1c244981fb8900000074054d89daeb034d89ea525053495049514889c34c89d0909090ff150a0100004883f80175704c8b542420488b1c24488b442408498b52089090ff124c8b0c244d8b4110498b38498b7130488b1e4881fb8900000074054889daeb034889fa4d8d7fe84c3b7d107303ff554049c747f8020000004c89f8488b4c2410488948084c8b7424184c89304989d4909090ff159e000000eb05e9550000004889c34c89e090ff15920000004883f8017533488b042448ba9808eeacaa2a00009090ff157e000000483b65187303ff5548e96affffff48b801000000000000004883c428c348b801000000000000004883c428c348b801000000000000004883c428c3909090|@1391,8191,@1333,@1390,@1333,@1117|218,0,@1115 250,0,0 265,0,0 280,0,0 1390:C3,32|90909090909090483b65187303ff5548488b5808488b00ff252b000000909090|@1393,6157,@1392| 1391:S18|534b4950535f28292e736b69706f6e283429 1392:C2,56|4d8d7fe04c3b7d107303ff554049c747f8030000004d89fe49bd0861eeacaa2a00004d892e49895e10498946084c89f0c390909090909090|@1394,6153|26,0,@1337 1393:S14|496e745365742e706c7573283129 1394:S14|496e745365742e706c7573283229 1395:O3|@1397,@1472,@1396 1396:O3|@1337,@1474,@1477 1397:C7,272|90909090909090483b65187303ff5548535249504989c64d8d7fe84c3b7d107303ff554049c747f8020000004c89f849bdf87feeacaa2a00004c8968084c89304d89f490ff15ee0000004954488d542420909090ff15e6000000504c8b44242048bb6080eeacaa2a000048b8630000000000000048ba6864eeacaa2a00009090ff15c20000004883f801744a4c8b442410488b5c2420488b442408488b54241890e861ffffff4989c34d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8958084c8b14244c89104883c428ff257a0000004c8b4c242049b8d880eeacaa2a000048bb6080eeacaa2a0000488b44240848ba787beeacaa2a00009090ff1552000000488b04244883c428c390|@1405,8191,@1390,@1406,@1350,@1404,@1389|49,0,@1398 98,0,@1400 108,0,49 118,0,@1349 221,0,@1403 231,0,@1400 246,0,@1388 1398:O1|@1399 1399:C2,32|4883f863750b48b80300000000000000c348b80100000000000000c390909090|@1114,1|8,0,1 19,0,0 1400:O1|@1401 1401:C2,16|48b80100000000000000c39090909090|@1402,1|2,0,0 1402:S16|496e745365742e656d7074792d283129 1403:S11|456e64206f662074797065 1404:C2,48|4c8b304c8b68084d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c8968104c89700848c70003000000c390|@1471,6145| 1405:S25|50415253455f5459504528292e706172736554797065283329 1406:C7,208|90909090909090483b65187303ff5548524989c64d8d7fe84c3b7d107303ff554049c747f8020000004c89f849bdc082eeacaa2a00004c8968084c8930909090ff15b200000050488d542410ff15ae0000004c8b642408504d8b4424f848bb6080eeacaa2a000048b8610000000000000048ba6864eeacaa2a000090ff15860000004883f801743e488d542418909090ff157a0000004d8d7fe84c3b7d107303ff554049c747f8020000004d89fb498943084c8b14244d89134c89d84883c418ff2552000000488b04244883c418c390|@1413,8191,@1390,@1414,@1350,@1468,@1409|46,0,@1407 95,0,@1400 105,0,48 115,0,@1349 1407:O1|@1408 1408:C2,32|4883f861750b48b80300000000000000c348b80100000000000000c390909090|@1114,1|8,0,1 19,0,0 1409:C3,96|90909090909090483b65187303ff554848bb030000000000000048bac883eeacaa2a0000ff124989c64d8d7fe04c3b7d107303ff554049c747f8030000004c89f848c74010010000004c89700848c70003000000ff252e000000909090909090|@1470,8191,@1456|18,0,1 28,0,@1410 1410:O1|@1411 1411:C3,184|90909090909090483b65187303ff55484883f801750b48b80100000000000000c35348ff3048ff700848bbffffffffffffffff488b442410ff15a20000004d8d7fe84c3b7d107303ff554049c747f8020000004d89fe4c8b6c24084d896e084989064c8b64241041f6c4017503ff55704d89e34983c30270f449564c89db488b4424089090e87dffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fa498942084c8b0c244d890a4c89d04883c420c3909090|@1412,8191,@305|24,0,0 43,0,-1 1412:S26|545950455f5452454528292e6d6170746f5265636f7264283229 1413:S37|50415253455f5459504528292e7061727365547970652833297475706c6554797065283129 1414:C25,1552|90909090909090483b65187303ff55484c8b72f84d8b6ef84d8b65104d8b1c244d8b55304d8b0a4981f98900000074054d89c8eb034d89d84983f869755952504c89e848ba9808eeacaa2a0000909090ff15e205000048b80100000000000000488d542410909090ff15d2050000488b7c2408488b77f8488b5ef8488b5310488b0a4c8b73304d8b2e4981fd89000000740a4d89eceb08e9440000004989cc4983fc6b7517504889d848ba9808eeacaa2a000090ff158e050000eb1e5048b8530000000000000048ba2858eeacaa2a0000909090ff15760500004c8b0424eb714c8b42f8498b78f8488b7710488b1e488b4f304c8b194981fb8900000074054d89d9eb034989d94983f975757452504889f848ba9808eeacaa2a0000ff153605000050504c8b5424184d8b4af84d8b41f848bb6080eeacaa2a000048b8770000000000000048ba6864eeacaa2a0000eb05e9010400009090ff15020500004883f80174224989e048bf88a2edacaa2a00004989384889e648c7460801000000eb67e91f0100004c8b442418498b78f848ff77f8488d542428ff15ca040000488b742420488b5ef8488b53f8488b4a104c8b314c8b6a304d8b65004981fc8900000074054d89e3eb034d89f34983fb77751c504889d048ba9808eeacaa2a000090ff158a040000eb26e98e00000050488b5bf848b8fb0000000000000048ba2858eeacaa2a00009090ff156a0400004c8b5c24284d8b53f84d8d7fe84c3b7d107303ff554049c747f8020000004d89f949b8388ceeacaa2a00004d8901498b7af8498979084c89cb488b042490ff152e04000048bb0300000000000000ff1526040000488d742410488906488d5c241048c74308010000004883c4104d8d7fe84c3b7d107303ff554049c747f8020000004d89f8488b1424498910488b4c240849894808eb6c4c8b4af8498b59f84c8b5b104d8b334c8b63304d8b14244981fa8900000074054d89d5eb034d89f54983fd7d75704989d64d8b69e848ff7328495448ff733848ff734048ff73484c8b53204c8b4b184d89d84c8b234c8b5b084c89db4c89e0ff158603000049564c89eaeb05e93d0200009090ff124d8d7fe84c3b7d107303ff554049c747f8020000004d89fa49c74208010000004989024c8b0c24eb05e96c0000004d8b41f8498b78f8488b7710488b1e488b5730488b0a4881f98900000074054889c8eb034889d84883f87d751749524889f848ba9808eeacaa2a0000ff150e030000eb2249524889fb48b8f05deeacaa2a000048ba2858eeacaa2a0000909090ff15f20200004c8b0424eb6b4c8b72f84d8b6ef84d8b55104d8b02498b7530488b0e4881f98900000074054889cfeb034c89c74883ff03756e524d89e84889c348b81062eeacaa2a000048bae878eeacaa2a0000ff15a602000050504989c648b8008eeeacaa2a0000909090ff15960200004d89f5eb05e92d010000ff158e0200004883f80174454d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fceb05e9b700000049bb008eeeacaa2a00004d891c244989e249c702ffffffff4989e14d896108eb1c4989e449c70424010000004989e349ba008eeeacaa2a00004d8953084d8d7fe84c3b7d107303ff554049c747f8020000004d89f94c8b04244d8901488b7c2408498979084d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c8948104c89680848c70001000000ff15da0100004d8d7fe84c3b7d107303ff554049c747f8020000004d89f849c7400801000000498900eb425249554c89eb48b8b85deeacaa2a000048ba2858eeacaa2a0000909090ff159a010000488b042448ba9808eeacaa2a0000ff158e01000049b80100000000000000504883c40850504883c408488b4424104c8b70f84d8b6ef84d8b65104d8b1c244d8b55304d8b0a4981f98900000074054c89cfeb034c89df4883ff0375154c89c0488d5424189090ff153e0100004883c418c34983f801750f48b878a6edacaa2a00004883c418c3498b78084883ff017508498b004883c418c3495549ff304c89eb48b8b85deeacaa2a000048ba2858eeacaa2a00009090ff15f6000000488b44240848ba9808eeacaa2a0000909090ff15e6000000488b04244883c428c39090909090|@1421,8191,@1117,@1422,@1117,@1315,@1117,@1350,@1424,@1117,@1315,@1445,@1453,@1331,@1117,@1315,@1383,@1461,@1463,@1465,@1315,@1117,@1420,@1315,@1117|69,0,@1115 88,0,0 171,0,@1115 191,0,41 201,0,@1313 276,0,@1115 307,0,@1400 317,0,59 327,0,@1349 361,0,@584 471,0,@1115 500,0,125 510,0,@1313 561,0,@1415 596,0,1 892,0,@1115 915,0,@1320 925,0,@1313 1002,0,@1343 1012,0,@1382 1033,0,@1418 1110,0,@1418 1157,0,@1418 1299,0,@1318 1309,0,@1313 1332,0,@1115 1348,0,0 1447,0,@617 1488,0,@1318 1498,0,@1313 1521,0,@1115 1415:C4,216|90909090909090483b65187303ff55484c8b720850495649ff762849ff763049ff763849ff764049ff76484d8b56204d8b4e184d8b4610498b5e08498b069090ff15ba0000004d8d7fe84c3b7d107303ff554049c747f8020000004d89fd49bc588deeacaa2a00004d8965004c8b5c24084d895d084c8b14244d8b4a104c8b4424104c894c2410498b7a1848897c2408498b72204889342449ff722849ff723049ff723849ff724049ff7248498b1a498b52084989d24989d94c89c149b803000000000000004889c34c89e851ff25350000009090909090|@1417,8191,@1329,@1124|96,0,@1416 190,0,1 1416:C2,32|90909090909090483b65187303ff55484c8b7018488b42084c89f2ff22909090|@1121,8191| 1417:S58|50415253455f5459504528292e7061727365547970652833297475706c655479706528312962617369635479706528312974795365712d283129 1418:O6|@1419,0,0,0,@501,@198 1419:S9|756e646566696e6564 1420:C7,448|90909090909090483b65187303ff55484c8b72f84d8b6ef84d8b55f84889d74889c649ff722849ff723049ff723849ff724049ff7248498b1a498b5208498b42104d8b4a184d8b42204d89c24989c04889d84889d3909090ff158a01000050504989c248b8008eeeacaa2a0000909090ff157a0100009090ff157a0100004883f801743d4d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89f949b8008eeeacaa2a00004d89014889e348c703ffffffff4889e24c894a08eb1b4989e149c701010000004989e048bb008eeeacaa2a0000498958084d8d7fe84c3b7d107303ff554049c747f8020000004c89fa488b04244889024c8b7424084c8972084d8d7fe04c3b7d107303ff554049c747f8030000004c89f8488950104c89500848893090ff15d20000004c8b6ff84d8b65f85750498b4424f848ba9808eeacaa2a000090ff15ba0000004c8b5c24084d8b53f84d8b4af84d8b41f8498b7810488b37498b5830488b134881fa8900000074054889d1eb034889f14883f90375334d8d7fe84c3b7d107303ff554049c747f8020000004c89f848c7400801000000488b0c244889084c89da4883c420e950feffff488b04244883c420c3|@1467,8191,@1331,@1461,@1463,@1465,@1117|101,0,@1418 163,0,@1418 208,0,@1418 319,0,@1115 1421:S49|50415253455f5459504528292e7061727365547970652833297475706c6554797065283129626173696354797065283129 1422:C7,432|90909090909090483b65187303ff5548488b42f84c8b70f84d8b6ef84d8b65104d8b1c244d8b55304d8b0a4981f98900000074054d89c8eb034d89d85248bbe07aeeacaa2a00004c89c09090ff15860100004883f8017457488b3c24488b77f8488b5ef8488b53f04d8d7fe84c3b7d107303ff554049c747f8020000004c89f8488b4a08488948084c8b77f04c893090ff154a0100004c8b6ef84d8b45e8498b5df8498b55f09090ff124989c0eb514c8b0424498b78f8488b77f848ff76f8488b1c2448b8f05deeacaa2a000048ba2858eeacaa2a000090ff150a010000488b042448ba9808eeacaa2a0000ff15fe00000049b878a6edacaa2a00004883c408488b1c24488b53f8488b4af849504c8b41f848bbe07aeeacaa2a000048b8710000000000000048ba6864eeacaa2a0000ff15c20000004883f801744148b80100000000000000488b5424089090e8b5feffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fe498946084c8b2c244d892e4c89f04883c410c34d8d7fe84c3b7d107303ff554049c747f8020000004c89f848c74008010000004c8b34244c89304883c410c390909090909090|@1423,8191,@1333,@1390,@1315,@1117,@1350|63,0,@1386 197,0,@1320 207,0,@1313 228,0,@1115 244,0,@617 276,0,@1386 286,0,56 296,0,@1349 318,0,0 1423:S69|50415253455f5459504528292e7061727365547970652833297475706c655479706528312962617369635479706528312974795365712d70726f636573734c697374283129 1424:C4,160|90909090909090483b65187303ff55485248b8010000000000000090ff15a60000004c8b3424504d8b46d848bb6080eeacaa2a000048b8710000000000000048ba6864eeacaa2a0000909090ff157e0000004883f801740f488b542408e8a5ffffff4989c5eb0a49bd01000000000000004d8d7fe84c3b7d107303ff554049c747f8020000004d89fc4d896c24084c8b1c244d891c244c89e04883c410c39090|@1372,8191,@1425,@1350|19,0,0 45,0,@1400 55,0,56 65,0,@1349 105,0,0 1425:C8,360|90909090909090483b65187303ff55484d8d7fe84c3b7d107303ff554049c747f8020000004c89f849bee095eeacaa2a00004c8970084c8b6af04c89284989d4ff154a010000498b5c24f8488b53f84954488b5af848ba4896eeacaa2a000090ff1532010000488b0c244c8b71f84d8b6ef84d8b65f84d8b5c24104d8b134d8b4c24304d8b014981f88900000074054c89c7eb034c89d74883ff5f7517504c89e048ba9808eeacaa2a000090ff15ee000000eb1e504c89e348b8750000000000000048ba2858eeacaa2a0000ff15d6000000488b7c2408488b77f8488b5ef8488b53f04d8d7fe84c3b7d107303ff554049c747f8020000004c89f8488b4a10488948084c8b77f04c89309090ff159e0000004c8b6ef84d8b45e8498b5df8498b55f09090ff1250504989e04889c3488b44241090ff157e0000004d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b24244c89204c8b5c24084c8958084883c420c390|@1437,8191,@1390,@1429,@1117,@1315,@1390,@1436|42,0,@1426 87,0,@1428 163,0,@1115 186,0,58 196,0,@1313 1426:O1|@1427 1427:C2,32|4883f85f750b48b80300000000000000c348b80100000000000000c390909090|@1114,1|8,0,1 19,0,0 1428:O2|@1429,@1382 1429:C6,496|90909090909090483b65187303ff55484c8b73104d8b2e4c8b63304d8b1c244981fb8900000074054d89daeb034d89ea4981fa81000000756c4989dd49ff7528495449ff753849ff754049ff75484d8b55204d8b4d184d89f0498b5d08498b4500909090ff15ae01000048f7c001000000740c49bb0300000000000000eb084c8b184f8d5c1b0141f6c3017503ff55704983fb017f224989c148b860d6ecacaa2a0000eb05e92a01000090ff555849ba010000000000000048f7c00100000074054989c2eb0a4c0fb650084f8d54120149555049524c89e848ba9808eeacaa2a00009090ff153601000048bbfd00000000000000488b042448bab0186000000000009090ff124883f8017402eb2448bb6100000000000000488b042448bab0186000000000009090ff124883f8017502eb6f4c8b54241049ff722849ff723049ff723849ff724049ff72484d8b0a4d8b4208498b7a10498b7218498b5a204989da4c89ca4989f14c89c14989f84889cb4889d090ff15ae0000004c8b74241049ff761049ff761849ff762049ff762849ff763049ff763849ff764049ff7648eb05e9240000004d8b56084d8b0e49b803000000000000004889c348b8a898eeacaa2a0000ff1566000000488b4424084883c418c34989d84889c348b84899eeacaa2a0000488b5208ff22909090909090|@1435,8191,@1331,@1117,@1329,@1124|117,0,1 155,0,@49 176,0,0 218,0,@1115 236,0,126 250,0,I24 272,0,48 286,0,I24 431,0,1 444,0,@1430 476,0,@1433 1430:O1|@1431 1431:C2,40|90909090909090483b65187303ff55484c8b701848b81899eeacaa2a00004c89f2ff229090909090|@1121,8191|22,0,@1432 1432:S25|4c6162656c73206d75737420626520312c322c332c2e2e2e2e 1433:O1|@1434 1434:C2,48|4883f861750b48b80300000000000000c34883f803750b48b80300000000000000c348b80100000000000000c3909090|@1338,1|8,0,1 25,0,1 36,0,0 1435:S20|534b4950535f28292e6765744c6162656c283229 1436:C3,64|90909090909090483b65187303ff554853495090ff154e0000004c8b34244989064c8b6c24084d896e0848b801000000000000004883c410c390909090909090|@1439,8191,@1438|44,0,0 1437:S60|50415253455f5459504528292e7061727365547970652833297475706c655479706528312962617369635479706528312974795365712d6c2d283129 1438:C3,288|90909090909090483b65187303ff554848f7c001000000740c49be0300000000000000eb084c8b304f8d74360141f6c6017503ff55704983fe037f02eb6d48f7c001000000740c49be0300000000000000eb084c8b304f8d74360141f6c6017503ff55704983fe017f1a4989c648b860d6ecacaa2a0000ff555849bd010000000000000048f7c00100000074054989c5eb0a4c0fb668084f8d6c2d014989c648bb6100000000000000eb05e91a0000004c89e848bab018600000000000909090ff124883f8017405eb074989c64c89f0c349f7c601000000740c49bd0300000000000000eb084d8b2e4f8d6c2d0141f6c5017503ff55704c89ef4883ef0270f44989f848bb03000000000000004c89f0ff1532000000e9ecfeffff9090909090|@1441,8191,@1440|27,0,1 73,0,1 111,0,@49 124,0,0 161,0,48 181,0,I24 220,0,1 261,0,1 1439:S27|545950455f5452454528292e6d6b4c6162656c456e747279283329 1440:C3,216|90909090909090483b65187303ff554848f7c001000000740c49be0300000000000000eb084c8b304f8d74360148f7c3010000007413f6c3017503ff55704883fb017c054989ddeb1e4989c548b860d6ecacaa2a000090ff55584c89eb49bd010000000000000049f7c001000000741441f6c0017503ff55704983f8017c054d89c4eb1f4989c448b860d6ecacaa2a00009090ff55584d89e049bc01000000000000004d8d4424ff4d03c54d3bc6761848b860d6ecacaa2a000090ff555848b801000000000000004d89e04c89ebff252c00000090909090|@1443,8191,@1442|27,0,1 78,0,@49 95,0,0 137,0,@49 155,0,0 178,0,@49 192,0,0 1441:S40|545950455f5452454528292e6d6b4c6162656c456e74727928332973747269705a65726f73283129 1442:C2,328|90909090909090483b65187303ff554848f7c001000000740c49be0300000000000000eb084c8b304f8d7436014883fb0175064d3bc67501c34983f801750b48b8b01e600000000000c34983f80375184c8d43104c89c348d1eb480fb61c18488d5c1b014889d8c34d8d70204d8d6efe4d89ee49c1ee034983ce015053495048ff750849bd629eeeacaa2a000049556a014889650849b8010000000000000048bb83000000000000004c89f048ba70156000000000009090ff124989c448ff742410488f4508eb1c909048b840e3ecacaa2a0000909090ff555849bc01000000000000004c8b5c241849d1eb4d891c244f8d5c1b014c8b4c24204d8d4110495449524d89da49b911000000000000004c89c74d89e04889fb488b44243848ba304460000000000090ff12488b44240848ba701e600000000000909090ff12488b4424084883c440c3|@1444,8191|27,0,1 65,0,I48 133,0,$1442+202 151,0,0 161,0,65 174,0,I11 204,0,@69 220,0,0 263,0,8 287,0,I198 305,0,I47 1443:S19|537472696e672e737562737472696e67283329 1444:S33|4c696272617279537570706f72742e756e73616665537562737472696e67283329 1445:C3,80|90909090909090483b65187303ff55484883f801750b48b80100000000000000c3534c8b30495649ff36488b4008909090e8d1ffffff4c8b442408488b1c24488d542418ff152e0000004883c418c390|@1449,8191,@1446|24,0,0 1446:C5,320|90909090909090483b65187303ff55484883f80175244d8d7fe84c3b7d107303ff554049c747f8020000004c89f848c74008010000004c8900c34c8b304989d44989c34989da498b1e4c89d0ff15160100004883f8017544495449534952495049ff3349ff73085049ff7424f84c89d348b898a1eeacaa2a00009090ff15ee00000048bbb0a1eeacaa2a0000ff15e6000000488b14249090ff12eb11495449534952495049ff3349ff730850504c8b4c240841f6c1017503ff55704983f9017f314d8d7fe84c3b7d107303ff554049c747f8020000004d89f8488b7c243049897808488b7424204989304c89c04883c440c34c8b442420488b5c2428488b442410488b542438909090e8f9feffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89f849894008488b7c24184989384c89c04883c440c3909090909090|@1451,8191,@1450,@303,@303|114,0,@1447 132,0,@1448 1447:S7|4c6162656c2028 1448:S25|292061707065617273206d6f7265207468616e206f6e63652e 1449:S25|545950455f5452454528292e736f72744c6162656c73283229 1450:C2,288|90909090909090483b65187303ff554848f7c001000000740c49be0300000000000000eb084c8b304f8d74360148f7c301000000740c49bd0300000000000000eb084c8b2b4f8d6c2d0149554d0bee41f6c501495d7503ff55704d3bf5755b4989c64989dd4c89eb4c89f048bab018600000000000909090ff124883f801740b48b80100000000000000c34c89eb4c89f048ba701960000000000090ff124883f801740b48b8ffffffffffffffffc348b80300000000000000c348f7c001000000740c48bf0300000000000000eb08488b38488d7c3f0148f7c301000000740c48be0300000000000000eb08488b33488d743601564823f740f6c6015e7503ff5570483bfe7d0b48b8ffffffffffffffffc348b80300000000000000c3909090|@1452,6207|27,0,1 56,0,1 109,0,I24 130,0,0 147,0,I27 166,0,-1 177,0,1 197,0,1 226,0,1 265,0,-1 276,0,1 1451:S33|545950455f5452454528292e736f72744c6162656c73283229656e746572283329 1452:S28|545950455f5452454528292e636f6d706172654c6162656c73283229 1453:C10,320|90909090909090483b65187303ff55484989c64d8d7fe04c3b7d107303ff554049c747f8030000004c89f848c74010010000004c8970084889189090ff15260100004883fb017401c350504989c44989e2495249ba010000000000000049b9010000000000000049b8010000000000000048bb1f4e00000000000048b8e005edacaa2a0000909090ff15e20000004d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b0c244c89084c8b4424084c8940089090ff15ba0000004889c34889d8ff15b60000004883f801745b4889d890ff15ae0000004889d8909090ff15aa0000004883f801740f4889d890ff15a20000004889c1eb1948b8b0d7edacaa2a00009090ff555848b901000000000000004989dd4c89e34889c8909090ff157a0000004889c2eb0d48ba01000000000000004989dd4c89e84883c410c3|@1455,7631,@1456,@1369,@1358,@1458,@1459,@1458,@1459,@1454|85,0,0 95,0,0 105,0,0 115,0,9999 125,0,@193 253,0,@970 268,0,0 301,0,0 1454:C2,24|4c8b3049891e48b80100000000000000c390909090909090|@1460,4105|8,0,0 1455:S25|545950455f5452454528292e6d6b4c6162656c6c6564283229 1456:C2,56|4c8b304c8b68084c8b60104d8d7fd84c3b7d107303ff554049c747f8040000004c89f84c8960184c8968104c89700848c700fdffffffc390|@1457,7169| 1457:S12|4c6162656c6c656454797065 1458:C2,32|4c8b304983fe07750b48b80300000000000000c348b80100000000000000c390|@1371,4097|11,0,1 22,0,0 1459:C2,40|4c8b70084c8b68104d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8968084c8930c3|@1371,6145| 1460:S27|5354525543545f56414c5328292e747653657456616c7565283229 1461:C2,8|488b4028c3909090|@1462,1| 1462:S29|5354525543545f56414c5328292e74634964656e746966696572283129 1463:C2,32|4c8b304983fe03750b48b80300000000000000c348b80100000000000000c390|@1464,4097|11,0,1 22,0,0 1464:S26|5354525543545f56414c5328292e6973556e7365744964283129 1465:C2,56|4c8b304c8b68084c8b60104d8d7fd84c3b7d107303ff554049c747f8040000004c89f84c8960184c8968104c89700848c700fbffffffc390|@1466,7169| 1466:S16|54797065436f6e737472756374696f6e 1467:S64|50415253455f5459504528292e7061727365547970652833297475706c6554797065283129626173696354797065283129636f6e7374727563746f7273283129 1468:C4,160|90909090909090483b65187303ff554852488b42f0909090ff15aa0000004c8b34244d8b6ef8504d8b45f848bb6080eeacaa2a000048b8610000000000000048ba6864eeacaa2a0000909090ff157e0000004883f801740f488b542408e8a5ffffff4989c4eb0a49bc01000000000000004d8d7fe84c3b7d107303ff554049c747f8020000004d89fb4d8963084c8b14244d89134c89d84883c410c390909090|@1469,8191,@1414,@1350|45,0,@1400 55,0,48 65,0,@1349 105,0,0 1469:S49|50415253455f5459504528292e7061727365547970652833297475706c6554797065283129706172736552657374283129 1470:S28|545950455f5452454528292e6d6b50726f6475637454797065283129 1471:S12|46756e6374696f6e54797065 1472:O3|@1337,@1474,@1473 1473:O1|@1476 1474:O1|@1475 1475:C2,32|4883f871750b48b80300000000000000c348b80100000000000000c390909090|@1114,1|8,0,1 19,0,0 1476:C2,32|4883f86b750b48b80300000000000000c348b80100000000000000c390909090|@1114,1|8,0,1 19,0,0 1477:O1|@1478 1478:C2,32|4883f877750b48b80300000000000000c348b80100000000000000c390909090|@1114,1|8,0,1 19,0,0 1479:C2,48|4d8d7fd84c3b7d107303ff554049c747f8040000004d89fe49895e184d894e104d8946084989064c89f0c39090909090|@1500,4297| 1480:S37|50415253455f44454328292e70617273654465632833297479706542696e64696e67283629 1481:C2,232|4d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89f848c700010000004d8d7fe84c3b7d107303ff554049c747f8020000004d89fe49bdf0adeeacaa2a00004d892e498946084d8d7fe84c3b7d107303ff554049c747f8020000004d89fd49bc80afeeacaa2a00004d896500498945084d8d7fe84c3b7d107303ff554049c747f8020000004d89fc49bb48b0eeacaa2a00004d891c2449894424084d8d7fe84c3b7d107303ff554049c747f8020000004c89f849bb48b1eeacaa2a00004c89184c8968084c8933488943084c89631048b80100000000000000c390909090909090|@1492,7689|62,0,@1482 103,0,@1486 145,0,@1488 188,0,@1490 216,0,0 1482:C3,48|90909090909090483b65187303ff55484c8b72084d8b2e504c89e8488d542408ff15320000004883c408c39090909090|@1484,8191,@1483| 1483:C2,112|90909090909090483b65187303ff55484883f801750b48b80100000000000000c34c8b305249ff3649ff7608488b400890e8d1ffffff4c8b6c24104d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b24244c8960084c8b5c24084c8918498b55f84883c418ff22909090|@1485,8191|24,0,0 1484:S34|5554494c49544945535f28292e7365617263684c6973742832296170706c79283129 1485:S41|5554494c49544945535f28292e7365617263684c6973742832296170706c792831296170706c283129 1486:C2,88|4d8d7fe84c3b7d107303ff554049c747f8020000004d89fe49895e08498906488b5a08488b034d8d7fe84c3b7d107303ff554049c747f8020000004d89fd498945084d8975004c892b48b80100000000000000c390909090|@1487,6157|75,0,0 1487:S34|5554494c49544945535f28292e7365617263684c697374283229656e746572283229 1488:C2,144|90909090909090483b65187303ff55484c8b72084d8b2e504983fd01750f48b801000000000000004883c408c3498b55004c8b7208488b1c24488b0248bab0186000000000009090ff124883f80174204d8d7ff04c3b7d107303ff554049c747f8010000004c89f84c89304883c408c34d8b6d08483b65187303ff5548eb9948b801000000000000004883c408c39090|@1489,6207|32,0,0 62,0,I24 129,0,0 1489:S35|5554494c49544945535f28292e7365617263684c6973742832296c6f6f6b7570283129 1490:C2,32|90909090909090483b65187303ff5548488b5808488b00488b5208ff22909090|@1491,8191| 1491:S34|5554494c49544945535f28292e7365617263684c697374283229656e746572283129 1492:S26|5554494c49544945535f28292e7365617263684c697374283229 1493:C3,48|90909090909090483b65187303ff55485049505348b80300000000000000488d54241890ff152e0000004883c418c390|@1498,8191,@1494|22,0,1 1494:C5,480|90909090909090483b65187303ff55484c8b72f849f7c601000000740c49bd0300000000000000eb084d8b2e4f8d6c2d01504923c5a801587503ff5570493bc57e0b48b80100000000000000c3a8017503ff55704989c54983ed0270f441f6c5017503ff55704983fd017d02eb3449f7c601000000740c49bc0300000000000000eb084d8b264f8d64240149544d23e541f6c401495c7503ff55704d3bec7d02eb1a4989c548b860d6ecacaa2a0000ff555849bc010000000000000049f7c60100000074054d89f4eb174d8d65104d89e549d1ed4f0fb62c2e4f8d6c2d014d89ec4989d54989c348bb5d000000000000004c89e048bab0186000000000009090ff124883f801747049ff75e849ff75f04c89f348b8a8b4eeacaa2a0000909090ff15e200000048bbc8b4eeacaa2a0000ff15da0000004d8d7fe84c3b7d107303ff554049c747f8020000004d89fa49b9e8b4eeacaa2a00004d890a498942084c8b442408498b7810488b74241048897c2410498b5818eb05e94300000048895c2408498b5020488b0c244889142449ff702849ff703049ff703849ff704049ff70484c89d04d8b50084d8b0849b803000000000000004889cb56ff255800000041f6c3017503ff55704c89d84883c00270f44c89eae92dfeffff909090909090|@1499,8191,@303,@303,@1124|31,0,1 68,0,0 121,0,1 167,0,@49 180,0,0 233,0,46 246,0,I24 277,0,@1495 296,0,@1496 336,0,@1497 430,0,1 1495:S15|7175616c6966696564206e616d6520 1496:S13|20696c6c6567616c2068657265 1497:C2,32|90909090909090483b65187303ff55484c8b7018488b42084c89f2ff22909090|@1121,8191| 1498:S28|5554494c49544945535f28292e636865636b466f72446f7473283329 1499:S36|5554494c49544945535f28292e636865636b466f72446f7473283329636865636b283129 1500:S29|50415253455f5452454528292e6d6b5479706542696e64696e67283429 1501:C23,1152|90909090909090488dbc2458ffffff483b7d187303ff55505250534950488b420848ba9808eeacaa2a000090ff15760400005050504889e348b801000000000000009090ff15660400004d8d7fe04c3b7d107303ff554049c747f8030000004d89fe4c8b2c244d892e4c8b6424084d8966084c8b5c24104d895e104c8b54243049564c89f348b80300000000000000498b522890ff124989c14d8d7fe84c3b7d107303ff554049c747f8020000004c89f849b88078eeacaa2a00004c894008488b7c242048893890ff15ea030000488b742438495148ff76084c8b04244889c348b81062eeacaa2a000048bae878eeacaa2a0000ff15c6030000488b1c245048ff732848ff733048ff733848ff734048ff73484c8b53204c8b4b184c8b4310488b13488b4b084889cb4889d0ff15960300004989c0488b5c2408488b04249090ff158a030000488b4424504c8b70084d8b6e104d8b65004d8b5e304d8b134981fa8900000074054d89d1eb034d89e14983f95b751a488b400848ba9808eeacaa2a000090ff154e0300004989c1eb224c89f348b87b0000000000000048ba2858eeacaa2a00009090ff15320300004989c14c8b4c24504d8b4108498b7810488b37498b5830488b134881fa8900000074054889d1eb034889f14883f90f756d488b4424104883f801750c48b90100000000000000eb5b495049ff70285349ff703849ff704049ff70484d8b50204d8b48184d8b70104d8b284d8b60084d89f04c89e34c89e8909090ff15ba0200004c8b1c2449ff731049ff731849ff732049ff732849ff733049ff7338eb0ae98a000000e93300000049ff734049ff73484d8b53084d8b0b49b803000000000000004889c348b838bbeeacaa2a0000ff156e0200004889c14883c4084c8b542450498b420848ba9808eeacaa2a0000ff15560200004c8b4c24504d8b4108488b5c243848b81062eeacaa2a000048bae878eeacaa2a0000ff15360200004889c3488b04244883c458ff252d0200004d8d7fe84c3b7d107303ff554049c747f8020000004c89f848b9f0bbeeacaa2a0000488948084c8b7424384c8930909090ff15fe0100004989c54d8d7fe84c3b7d107303ff554049c747f8020000004c89f849bc58bceeacaa2a00004c8960084c89289090ff15d2010000504c8b5424484d8b59204c8b4c24084c8b442418488b5c2420488b4424504c89da90ff124c8b542450504d8b420848bb6080eeacaa2a000048b8070000000000000048ba6864eeacaa2a00009090ff15860100004883f80174474d8d7fe84c3b7d107303ff554049c747f8020000004c89f849b8f0bbeeacaa2a00004c894008488b7c24404889389090ff155201000050488d542468ff154e0100004989c1eb0b49b90100000000000000504c8b44246049514d8b400848bb6080eeacaa2a000048b84f0000000000000048ba6864eeacaa2a000090ff15160100004883f8017413488d542470909090ff150a0100004889c7eb0a48bf01000000000000004d8d7fe84c3b7d107303ff554049c747f8020000004c89fe488b1c2448895e08488b5424104889164889fb4889f04883c470ff25cb000000909090|@1510,8191,@1117,@1481,@1390,@1383,@1329,@1493,@1117,@1315,@1329,@1124,@1117,@1383,@1511,@1390,@1390,@1350,@1390,@1513,@1350,@1515,@1509|35,0,@1115 58,0,0 135,0,1 179,0,@1380 226,0,@1343 236,0,@1382 379,0,@1115 404,0,61 414,0,@1313 492,0,0 615,0,1 628,0,@1502 660,0,@1115 690,0,@1343 700,0,@1382 757,0,@1505 815,0,@1507 886,0,@1400 896,0,3 906,0,@1349 954,0,@1505 1001,0,0 1023,0,@1400 1033,0,39 1043,0,@1349 1085,0,0 1502:O1|@1503 1503:C2,40|90909090909090483b65187303ff55484c8b701848b8a8bbeeacaa2a00004c89f2ff229090909090|@1121,8191|22,0,@1504 1504:S52|4461746174797065207265706c69636174696f6e206d757374206e6f7420636f6e7461696e2074797065207661726961626c6573 1505:O1|@1506 1506:C2,32|4883f84f750b48b80300000000000000c348b80100000000000000c390909090|@1114,1|8,0,1 19,0,0 1507:O1|@1508 1508:C2,32|4883f807750b48b80300000000000000c348b80100000000000000c390909090|@1114,1|8,0,1 19,0,0 1509:C2,56|4989c64d8d7fd84c3b7d107303ff554049c747f8040000004c89f8488958184c89701048c740080100000048c70007000000c39090909090|@1516,4105| 1510:S43|50415253455f44454328292e706172736544656328332964617461747970654465634f725265706c283329 1511:C2,48|4989c64d8d7fe04c3b7d107303ff554049c747f8030000004c89f8488958104c89700848c700f9ffffffc39090909090|@1512,4105| 1512:S37|50415253455f5452454528292e6d6b44617461747970655265706c69636174696f6e283229 1513:C4,224|90909090909090483b65187303ff55484d8d7fe84c3b7d107303ff554049c747f8020000004c89f849be58bceeacaa2a00004c8970084c8b6a984c89284989d4ff15c20000004d8b5c24f849544989c0498b5c24e8498b4424f0498b53189090ff124c8b14244d8b4af8504d8b410848bb6080eeacaa2a000048b8070000000000000048ba6864eeacaa2a0000909090ff157a0000004883f801740f488b542408e861ffffff4989c0eb0a49b801000000000000004d8d7fe84c3b7d107303ff554049c747f8020000004c89ff4c894708488b34244889374889f84883c410c3|@1514,8191,@1390,@1350|42,0,@1507 113,0,@1400 123,0,3 133,0,@1349 173,0,0 1514:S37|50415253455f44454328292e7061727365446563283329616e6442696e64696e6773283229 1515:C4,248|90909090909090483b65187303ff55484d8d7fe84c3b7d107303ff554049c747f8020000004c89f849be58bceeacaa2a00004c8970084c8b6ae04c89284989d4ff15da0000004d8b5c24f84d8b5424e849546a014d8b0a4d8b4208498b7a1049ba01000000000000004c89ce4989f94889f3498b53109090ff12488b1c24488b53f8504c8b420848bb6080eeacaa2a000048b8070000000000000048ba6864eeacaa2a0000909090ff157a0000004883f801740f488b542408e849ffffff4889c1eb0a48b901000000000000004d8d7fe84c3b7d107303ff554049c747f8020000004c89f8488948084c8b34244c89304883c410c3909090|@1514,8191,@1390,@1350|42,0,@1507 97,0,0 137,0,@1400 147,0,3 157,0,@1349 197,0,0 1516:S37|50415253455f5452454528292e6d6b44617461747970654465636c61726174696f6e283229 1517:C4,256|90909090909090483b65187303ff55485250534950495149524c8b4a0849b85036eeacaa2a0000488b5c2438488b422048ba787beeacaa2a00009090ff15e60000004c8b7424284c8b6c24184d8b4510498b5d08498b4500498b5618ff1250488b442440488d542438909090ff15be0000004d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fc49bb008eeeacaa2a00004d891c244d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fa49c702010000004d8d7fd04c3b7d107303ff554049c747f8050000004d89f94d8951204c8b4424184d894118498941104d896108488b7c24104989394c89c84883c438c20800|@1521,8191,@1389,@1518|31,0,@1196 50,0,@1388 145,0,@1418 1518:C10,656|90909090909090483b65187303ff55484c8b72f84d8b6e084d8b65104d8b1c244d8b55304d8b0a4981f98900000074054d89c8eb034d89d84983f82f750c49b80300000000000000eb0a49b801000000000000004983f801741d525049504c89e848ba9808eeacaa2a000090ff15460200004889c7eb0e48bf0100000000000000525049504c8b04244983f801740c48bf0300000000000000eb09488b7c2410488b7ff0488b742410488b5ef84d8d7fe84c3b7d107303ff554049c747f8020000004c89f8488b531048895008488b4c2408488908909090ff15e20100004c8b76f84c8b6ed0ff35dc010000574989c24d8b4e084d8b4510498b5d08498b4500ff15ca01000050504c8b6424204d8b5c24f84d8b53084d8b4a104d8b01498b7a30488b374881fe8900000074054889f3eb034c89c34883fb2d7571504c89d048ba9808eeacaa2a0000909090ff15860100004d8d7fe84c3b7d107303ff554049c747f8020000004c89f848bb38c5eeacaa2a000048895808488b542420488910ff155a010000488b4c24284c8b71f84c8b41c8498b5e0848ba487eeeacaa2a0000909090ff153e010000eb05e9180000004c8d6c24084c8b24244d8965004c8d5c240849894308eb184889e34889034889e248b9e005edacaa2a000048894a08504d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b7424084c89304c8b6c24104c8968084c8b6424284d8b5c24f8504d8b430848bb6080eeacaa2a000048b8590000000000000048ba6864eeacaa2a000090ff15b20000004883f8017417488b442428488b542430909090e8b1fdffff4989c2eb0a49ba01000000000000004d8d7fe84c3b7d107303ff554049c747f8020000004d89f94d8951084c8b04244d89014c89c84883c438c3|@1526,8191,@1117,@1390,@1433,@1522,@1117,@1390,@1397,@1350|64,0,1 76,0,0 99,0,@1115 121,0,0 145,0,1 321,0,@1115 364,0,@1519 409,0,@1395 468,0,@193 539,0,@1400 549,0,44 559,0,@1349 605,0,0 1519:O1|@1520 1520:C2,32|4883f859750b48b80300000000000000c348b80100000000000000c390909090|@1114,1|8,0,1 19,0,0 1521:S38|50415253455f44454328292e7061727365446563283329646174617479706542696e64283629 1522:C11,488|90909090909090483b65187303ff55485349514d89c84c89d3488b44242048bae878eeacaa2a0000ff15e20100004c8b34245049ff762849ff763049ff763849ff764049ff76484d8b56204d8b4e184d8b4610498b5e08498b069090ff15b60100004989c0488b5c2408488b04249090ff15aa010000488b0424488b54241090ff1248f7c001000000754d4c8b204c89e0909090ff158e0100004883f80174164c89e090ff158601000049bd0300000000000000eb2c4d8b1c244983fbff750c49bd0300000000000000eb1649bd0100000000000000eb0a49bd01000000000000004983fd0174724c8b6c24204983fd01756c4c8b5c240849ff732849ff733049ff733849ff734049ff73484d8b53204d8b4b184d8b4310498b5b08498b0390ff151201000050488b5c240848b851000000000000009090ff150201000048bb40c8eeacaa2a0000ff15fa0000004d8d7fe84c3b7d10730feb0ae970000000e96b000000ff554049c747f8020000004d89fa49b980c8eeacaa2a00004d890a498942084c8b44241049ff701049ff701849ff702049ff702849ff703049ff703849ff704049ff70484c89d74d8b50084d8b0849b80100000000000000488b5c24404889f8ff15860000004989c4eb0b49bc010000000000000050488b4424084883c420c210009090|@1528,8191,@1383,@1329,@1493,@1529,@1527,@1329,@303,@303,@1124|32,0,@1382 172,0,1 194,0,1 206,0,0 218,0,0 302,0,40 320,0,@1523 372,0,@1524 436,0,0 465,0,0 1523:S46|292068617320696e666978207374617475732062757420776173206e6f74207072656365646564206279206f702e 1524:C2,32|90909090909090483b65187303ff55484c8b7018488b42084c89f2ff22909090|@1525,8191| 1525:S27|4c45585f28292e7761726e696e674d657373616765283329283129 1526:S48|50415253455f44454328292e7061727365446563283329646174617479706542696e64283629636f6e73747273283129 1527:C2,8|488b4008c3909090|@1530,1| 1528:S42|50415253455f44454328292e706172736544656328332967657453686f72744e6f6e496e666978283729 1529:C2,32|4c8b304983fe01750b48b80300000000000000c348b80100000000000000c390|@1530,4097|11,0,1 22,0,0 1530:S5|496e666978 1531:C9,480|90909090909090483b65187303ff55485050504989d24989c14889df4889e348b80100000000000000909090ff15d60100004d8d7fe04c3b7d107303ff554049c747f8030000004c89fb488b1424488913488b442408488943084c8b7424104c897310495249515749505348b80300000000000000498b5218909090ff124989c54d8d7fe84c3b7d107303ff554049c747f8020000004c89f849bc8078eeacaa2a00004c8960084c8b5c24084c89184d89ea9090ff15560100004c8b4c2420495249ff71104c8b04244889c348b81062eeacaa2a000048bae878eeacaa2a0000ff15320100004c8b04245049ff702849ff703049ff703849ff704049ff70484d8b50204d8b4818498b38498b7008498b58104989d84889f34889f890ff15fe0000004989c0488b5c2408488b04249090ff15f2000000488b542438488b4a10488b41104c8b304c8b69304d8b65004981fc8900000074054d89e3eb034d89f34983fb5b751a4889c848ba9808eeacaa2a00009090ff15b60000004989c3eb224889cb48b87b0000000000000048ba2858eeacaa2a00009090ff159a0000004989c34c8b5c24384c8b5424204c8b4c24584c895424584c8b5424284d89c84c8b0c244c89c74c8b442410488b5c2418488b442430498b53084883c45857ff229090|@1532,8191,@1481,@1390,@1383,@1329,@1493,@1117,@1315|33,0,0 109,0,1 155,0,@1380 206,0,@1343 216,0,@1382 362,0,@1115 388,0,61 398,0,@1313 1532:S41|50415253455f44454328292e7061727365446563283329646174617479706542696e64696e67283329 1533:C3,192|90909090909090483b65187303ff55485050504989d24989d94889e348b801000000000000009090ff15ba0000004d8d7fe04c3b7d107303ff554049c747f8030000004c89fb48bac8cdeeacaa2a0000488913498b4208488943104c8b7424084c8973084d8d7fe04c3b7d107303ff554049c747f8030000004d89fd49bcf0cfeeacaa2a00004d8965004c8b5c24104d895d1049895d08488b1c244989194d8971084d8959104d89691848b801000000000000004883c418c390909090909090|@1538,8077,@1481|30,0,0 72,0,@1534 126,0,@1536 172,0,0 1534:C5,400|90909090909090483b65187303ff554848f7c001000000740c49be0300000000000000eb084c8b304f8d74360141f6c6017503ff55704983fe037e5648f7c001000000740c49be0300000000000000eb084c8b304f8d74360141f6c6017503ff55704983fe037f1c4989c648b860d6ecacaa2a00009090ff555849bd010000000000000048f7c001000000740a4989c5eb0fe9300000004c0fb668094f8d6c2d014989d64989c448bb4f000000000000004c89e848bab0186000000000009090ff124989c5eb1049bd01000000000000004989c44989d6495649544955498b5e104c89e0ff15ce00000050504989e549554989c249b903000000000000004c8b44241848bb1f4e00000000000048b8e005edacaa2a000090ff15a20000004d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b24244c89204c8b5c24084c8958089090ff157a0000004c8b5424204989c14d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8948084c8b4424184c89004951498b5208ff12488b04244883c430c39090909090|@1535,8191,@1360,@1369,@1358|27,0,1 71,0,1 109,0,@49 124,0,0 169,0,39 182,0,I24 201,0,0 246,0,1 261,0,9999 271,0,@193 1535:S50|50415253455f44454328292e70617273654465632833296d616b6554797065566172456e762832296c6f6f6b757054283129 1536:C2,64|90909090909090483b65187303ff55485250488b52109090ff1248f7c0010000007508488b004883c410c34c8b742408488b0424498b56084883c410ff229090|@1537,8191| 1537:S43|50415253455f44454328292e70617273654465632833296d616b6554797065566172456e76283229283129 1538:S40|50415253455f44454328292e70617273654465632833296d616b6554797065566172456e76283229 1539:C59,4352|90909090909090488dbc2448ffffff483b7d187303ff55504d8d7fd84c3b7d107303ff554049c747f8040000004d89fe49bde0e3eeacaa2a00004d892e4c8baab00000004d896e18498956104d8946084d8d7fe84c3b7d107303ff554049c747f8020000004d89fc49bb18e8eeacaa2a00004d891c244d894424084d8d7fb84c3b7d107303ff554049c747f8080000004d89fb49ba60f6eeacaa2a00004d89134c8b92a80000004d8953384d894330488bba9000000049897b28488b727849897320488b4a7049894b184c8baaa00000004d896b104d8963084d8d7f804c3b7d107303ff554049c747f80f0000004d89fd48b9c01aefacaa2a000049894d004d895d704d897568488b8a9800000049894d6049897d58488bb28800000049897550488bba8000000049897d484c8b52784d8955404c8b52704d8955384c8b52684d8955304d8965284c8b62604d8965204c8b62584d8965184c8b62504d8965104d8945084883fb017402eb5a498b58104c8b234d8b5030498b3a4881ff8900000074084989c44889f8eb104889c74c89e04c8b2749544989fceb0449ff34245249544950495149564953495548bbe8e5eeacaa2a00009090ff156a0f00004883f8017511eb5c48ff305250495049514956495349554c8b5c24204d8b53104d8b0a4d8b4330498b384881ff8900000074054889feeb034c89ce4889f348f7c30100000074224883fb057c214883fb3d7f2048ba16d3eeacaa2a0000488d549aecffe2e9f50c0000e9f2000000e9ed000000e9e8000000e93c050000909090e9db000000909090e9d3000000909090e9cb000000909090e9c3000000909090e9f1040000909090e9b3000000909090e9ab000000909090e9a3000000909090e9ef060000909090e993000000909090e91d030000909090e983000000909090e97b000000909090e973000000909090e9a7090000909090e99f090000909090e95b000000909090e9d1060000909090e987090000909090e943000000909090e93b000000909090e933000000909090e92b000000909090e923000000909090e91b000000909090e913000000909090e915040000909090e9ed0000009090904d89d848bb6080eeacaa2a000048b8310000000000000048ba6864eeacaa2a000090ff15ea0d00004883f8017460488b4c2420488b41104c8b304c8b69304d8b65004981fc8900000074054d89e3eb034d89f348bbe830efacaa2a00004c89d89090ff15b20d00004883f801742548b80100000000000000488d54244090ff159e0d00004883c440ff259c0d0000e948000000488b5c242048b8b85deeacaa2a000048ba2858eeacaa2a00009090ff157e0d0000488b44242048ba9808eeacaa2a0000909090ff156e0d000048b8a00cefacaa2a00004883c440c348b8a00cefacaa2a00004883c440c34c89d848ba9808eeacaa2a0000909090ff15420d000050505050488b4c24504889e348b80100000000000000488b5110ff1250505050488b4424704889e34c8b701048b801000000000000004c89f290ff124c8b6c24684d8d7fe04c3b7d107303ff554049c747f8030000004d89fc49bba851efacaa2a00004d891c244c8b5424104d895424104c8b4c24384d894c24084d8d7fe04c3b7d107303ff554049c747f8030000004d89f84d896010498b7d0849897808498b75004989304d8d7fe04c3b7d107303ff554049c747f8030000004c89fb4c895310488b54240848895308488b0c2448890b488b44247049504c8b700848b803000000000000004c89f2ff124d8d7fe84c3b7d107303ff554049c747f8020000004c89f849bd58bceeacaa2a00004c8968084c8b6424604c8920ff152a0c0000488d9424880000009090ff15220c00004d8d7fe84c3b7d107303ff554049c747f8020000004d89fb4c8b5424184d8953084c8b4c24084d890b4d8d7fe84c3b7d107303ff554049c747f8020000004d89f8488b7c243849897808488b7424284989304c89db4881c488000000ff25c80b00004c89d848ba9808eeacaa2a0000909090ff15ba0b000050505050488b4c24504889e348b80100000000000000488b5110ff1250505050488b4424704889e34c8b701048b801000000000000004c89f290ff124c8b6c24684d8d7fe04c3b7d107303ff554049c747f8030000004d89fc49bb5852efacaa2a00004d891c244c8b5424104d895424104c8b4c24384d894c24084d8d7fe04c3b7d107303ff554049c747f8030000004d89f84d896010498b7d0849897808498b75004989304d8d7fe04c3b7d107303ff554049c747f8030000004c89fb4c895310488b54240848895308488b0c2448890b488b44247049504c8b700848b803000000000000004c89f2ff12488d9424880000009090ff15c60a00004d8d7fe84c3b7d107303ff554049c747f8020000004d89fd4c8b6424184d8965084c8b5c24084d895d004d8d7fe84c3b7d107303ff554049c747f8020000004d89fa4c8b4c24384d894a084c8b4424284d89024d89d04c89eb4881c488000000ff25680a00004c89d848ba9808eeacaa2a0000909090ff155a0a0000488d54244090ff15560a00004883c440ff25540a0000488b4c24304c8b442418488b5c242848b80100000000000000488b51284883c440ff224c89d848ba9808eeacaa2a0000ff15260a0000488b4c24304d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b71384c8970084c8b6c24184c892890ff15fa09000050488d542448ff15f6090000504c8b44243048bb6080eeacaa2a000048b84f0000000000000048ba6864eeacaa2a00009090ff15d20900004883f80174474d8d7fe84c3b7d107303ff554049c747f8020000004c89f849bbd052efacaa2a00004c8958084c8b5424284c89109090ff159e09000050488d542458ff159a0900004989c4eb0b49bc0100000000000000504c8b5c24384d8b53104d8b0a4d8b4330498b384881ff8900000074054889feeb034c89ce4883fe3f751b49544c89d848ba9808eeacaa2a000090ff15520900004889c6eb2249544c89db48b8e836eeacaa2a000048ba2858eeacaa2a0000ff15360900004889c64d8d7fe84c3b7d107303ff554049c747f8020000004c89f848be3853efacaa2a000048897008488b5c243848891890ff15060900004889c3488b442448488b54243090ff12488b542440488b4a104c8b314c8b6a304d8b65004981fc8900000074054d89e3eb034d89f34983fb157517504889d048ba9808eeacaa2a000090ff15be080000eb1e504889d348b82038eeacaa2a000048ba2858eeacaa2a0000ff15a60800004c8b0424488b5c2408488b4424184883c468ff25960800004c89d848ba9808eeacaa2a000090ff158a080000488d54244090ff15860800004883c440ff25840800004c89d848ba9808eeacaa2a0000909090ff1576080000505050488b4c24405050504889e348b801000000000000009090ff155e0800004d8d7fe04c3b7d107303ff554049c747f8030000004c89f849bea053efacaa2a00004c89304c8b6c24104c8968104c8b61084c8960084c8d5c24184c8b5424084d89134c8d4c2418498941084c8d442418488b7910498978104d8d7fe04c3b7d107303ff554049c747f8030000004c89fe488b5c241848891e488b54242048895608488b442428488946104c8b7424604d8d7fe84c3b7d107303ff554049c747f8020000004c89f84d8b6e484c8968084c8b5c24484c89189090ff15a60700004889c34889f0488b542440909090ff124c8b5424504d8b4a104d8b01498b7a30488b374881fe8900000074054889f3eb034c89c34883fb21751b504c89d048ba9808eeacaa2a00009090ff155e0700004889c3eb22504c89d348b8f037eeacaa2a000048ba2858eeacaa2a000090ff15420700004889c35050504d8d7fe04c3b7d107303ff554049c747f8030000004c89fb48ba1054efacaa2a0000488913488b4c243848894b10488b842488000000488943084989e649891e4989e54c8b6424404d8965084989e34c8b5424484d8953104d8d7fe04c3b7d107303ff554049c747f8030000004d89f94c8b04244d8901488b7c240849897908488b742410498971104d8d7fe84c3b7d107303ff554049c747f8020000004c89f848bb3853efacaa2a000048895808488b54246848891090ff15860600004889c34c89c8488b542460909090ff12488b4c24704c8b71104d8b2e4c8b61304d8b1c244981fb8900000074054d89daeb034d89ea4983fa157517504889c848ba9808eeacaa2a000090ff153e060000eb1e504889cb48b82038eeacaa2a000048ba2858eeacaa2a0000ff152606000049b80300000000000000488b1c24488b4424204881c498000000ff250e060000564c89d848ba9808eeacaa2a0000ff1502060000488b04244883f82b750c48b96006edacaa2a0000eb754c8b7424284d8b6e104d8b65004d8b5e304d8b134981fa8900000074054d89d1eb034d89e14981f981000000757249ff7628495349ff763849ff764049ff76484d8b56204d8b4e184d89e8498b5e08498b069090ff159a05000048bbb054efacaa2a0000ff159205000048f7c001000000750ceb05e9c80100004c8b00eb1948b830f2eeacaa2a00009090ff555849b8010000000000000041f6c001750aeb05e950010000ff55704983f8017d02eb1141f6c0017503ff55704983f8137f02eb6f488b7c2428495048ff772848ff773048ff773848ff774048ff77484c8b57204c8b4f184c8b4710488b5f08488b0790ff150e050000488b7424304889c148ff762848ff763048ff763848ff764048ff76484c8b56204c8b4e184c8b4610488b5e08488b06909090ff15de040000eb05e99f000000514889c348b8a85fefacaa2a000090ff15ca04000048bbc85fefacaa2a0000ff15c20400004d8d7fe84c3b7d107303ff554049c747f8020000004d89fe49bd0060efacaa2a00004d892e498946084c8b64243849ff74241049ff74241849ff74242049ff74242849ff74243049ff74243849ff74244049ff7424484d8b5424084d8b0c2449b80300000000000000488b5c24404c89f090ff1552040000eb03495050488b44243848ba9808eeacaa2a00009090ff153e0400004c8b4c2408eb0c49b9010000000000000050504c8b4424104983f823750f4c89c890ff151e0400004889c1eb234d8d7fe84c3b7d107303ff554049c747f8020000004c89f94c89490848c701ffffffff4883c410514c8b4c243049b85860efacaa2a0000488b5c242848b8e830efacaa2a000048ba787beeacaa2a000090ff15ca03000048b80100000000000000488d542450909090ff15ba030000488b1c244883c450ff25b4030000505050504c8b5c24504889e348b80100000000000000498b53109090ff12505050504c8b5424704889e348b80100000000000000498b5210ff124c8b4c24684d8d7fe04c3b7d107303ff554049c747f8030000004d89f8488b7c243849897810498b710849897008498b19498918488b542460495048ff722848ff723048ff723848ff724048ff72484c8b52204c8b4a184c8b4210488b5a08488b02ff151a03000050488b5c2468488b442408488b5424509090ff124d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89f949be78a6edacaa2a00004c89314d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fd49bc38efeeacaa2a00004d8965004d8d7fd84c3b7d107303ff554049c747f8040000004d89fb49894b184d896b1049ba7060efacaa2a00004d89530849c703f1ffffff4c8b04244889c34c89d89090ff15720200004d8d7fe84c3b7d107303ff554049c747f8020000004d89f949c74108010000004989014d8d7fe84c3b7d107303ff554049c747f8020000004d89f8488b7c242049897808488b7424104989304d8d7fe84c3b7d107303ff554049c747f8020000004c89fb488b54244048895308488b4c243048890b4c89c04989d84889c34c89c84881c490000000ff25ec01000090909090|@1711,8191,@1333,@1350,@1333,@1712,@1714,@1315,@1117,@1117,@1390,@1716,@1710,@1117,@1720,@1727,@1117,@1729,@1730,@1117,@1390,@1732,@1350,@1390,@1733,@1117,@1315,@1390,@1117,@1315,@1734,@1117,@1736,@1739,@1117,@1481,@1390,@1117,@1315,@1390,@1117,@1315,@1638,@1117,@1331,@1741,@1329,@1331,@303,@303,@1124,@1117,@1745,@1389,@1746,@1747,@1329,@1717,@1710|50,0,@1540 106,0,@1544 149,0,@1565 243,0,@1618 430,0,@1541 531,0,$1539+566 803,0,@1400 813,0,24 823,0,@1349 883,0,@1627 910,0,0 952,0,@1318 962,0,@1313 985,0,@1115 1004,0,@1598 1019,0,@1598 1037,0,@1115 1068,0,0 1100,0,0 1145,0,@1682 1277,0,1 1316,0,@1507 1461,0,@1115 1492,0,0 1524,0,0 1569,0,@1684 1701,0,1 1837,0,@1115 1893,0,0 1916,0,@1115 2002,0,@1400 2012,0,39 2022,0,@1349 2070,0,@1685 2117,0,0 2175,0,@1115 2202,0,@1202 2212,0,@1313 2255,0,@1687 2347,0,@1115 2370,0,@1215 2380,0,@1313 2423,0,@1115 2465,0,@1115 2498,0,0 2540,0,@1689 2770,0,@1115 2797,0,@1213 2807,0,@1313 2854,0,@1690 2991,0,@1687 3083,0,@1115 3106,0,@1215 3116,0,@1313 3132,0,1 3168,0,@1115 3194,0,@198 3296,0,@1692 3333,0,@1555 3348,0,0 3519,0,@1705 3536,0,@1706 3576,0,@1707 3647,0,1 3682,0,@1115 3707,0,0 3790,0,@1708 3805,0,@1627 3815,0,@1388 3832,0,0 3882,0,0 3912,0,0 4081,0,@617 4123,0,@1551 4169,0,@1709 1540:C6,432|90909090909090483b65187303ff55484c8b72084d8b6e104d8b65004d8b5e304d8b134981fa8900000074054d89d1eb034d89e14983f973752c5250534c89f048ba9808eeacaa2a00009090ff1586010000488b1c24488b442408488b5424104883c418eba14d8b4d004d8b034981f88900000074054c89c7eb034c89cf52505348bbe8e5eeacaa2a00004889f89090ff154a0100004883f801746a488b7c2410488b770848ff762848ff763048ff763848ff764048ff76484c8b56204c8b4e184c8b4610488b5e08488b06ff1516010000488b5c24104889c24d8d7fe84c3b7d107303ff554049c747f8020000004c89f8488b4b18488948084c8b34244c89304989d4eb05e99200000090ff15de0000004c8b5c241049544989c14d8b430848bb0300000000000000488b442410498b531090ff124d8d7fe84c3b7d107303ff554049c747f8020000004d89fa4c8b0c244d894a084989024952488b5c2410488b442418488b542420909090e895feffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89f849894008488b3c244989384c89c04883c428c348b801000000000000004883c418c390909090|@1543,8191,@1117,@1333,@1329,@1390|66,0,@1115 131,0,@1541 290,0,1 415,0,0 1541:O1|@1542 1542:C2,424|4989c649f7c601000000741e4983fe057c1d4983fe3b7f1c49bd32e6eeacaa2a00004f8d6cb5ec41ffe5e9eb000000e9e6000000e9e100000090e94f010000909090e9d3000000909090e9cb000000909090e9c3000000909090e9bb000000909090e9cf000000909090e9ab000000909090e9a3000000909090e99b000000909090e9fc000000909090e98b000000909090e9aa000000909090e97b000000909090e973000000909090e96b000000909090e9b6000000909090e9a3000000909090e953000000909090e9a9000000909090e980000000909090e93b000000909090e933000000909090e95d000000909090e923000000909090e91b000000909090e913000000909090e90b000000909090e9820000009090904883f83d750b48b80300000000000000c348b80100000000000000c348b80300000000000000c348b80300000000000000c348b80300000000000000c348b80300000000000000c348b80300000000000000c348b80300000000000000c348b80300000000000000c348b80300000000000000c348b80300000000000000c348b80300000000000000c390909090|@1338,6145|26,0,$1542+58 290,0,1 301,0,0 312,0,1 323,0,1 334,0,1 345,0,1 356,0,1 367,0,1 378,0,1 389,0,1 400,0,1 411,0,1 1543:S43|50415253455f44454328292e706172736544656328332964656328342964656353657175656e6365283229 1544:C5,208|90909090909090483b65187303ff55484d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89500849be38e9eeacaa2a00004c89304989d04889df90ff15b2000000495249514950575050505050504889e348b80100000000000000488d542450909090ff1592000000488b74242040f6c6017503ff55704883fe017d0c488b4424104883c450c2100048ff742418564c8b5424204c8b4c24184c8b44241048bb010000000000000048b85d00000000000000488d542460ff1546000000488b40104883c450c21000909090|@1553,8191,@1390,@1554,@1547|46,0,@1545 88,0,0 165,0,0 175,0,46 1545:O1|@1546 1546:C2,32|4883f82f750b48b80300000000000000c348b80100000000000000c390909090|@1114,1|8,0,1 19,0,0 1547:C9,1120|90909090909090488dbc2458ffffff483b7d187303ff5550505050505052505349514952488d5c242848b8010000000000000090ff154e0400004d8d7fd04c3b7d107303ff554049c747f8050000004d89fe4c8b6c24284d892e4c8b6424304d8966084c8b5c24384d895e104c8b5424404d8956184c8b4c24484d894e204c8b442420498b78e8488b7708495648bb686feeacaa2a0000488b464848bae8d7edacaa2a0000909090ff15e20300004883f801740c48bb0100000000000000eb6d488b5c2450488b54246053480bdaf6c3015b7503ff5570483bda7556488b4c2410488b442438483bc8746d4c8b7424284d8b6ee84d8b6508495449ff74242849ff74243049ff74243849ff74244049ff7424484d8b5424204d8b4c24184d8b442410498b5c2408498b0424eb0ae970000000e95c00000090ff155a0300004c8b1c2449ff731049ff731849ff732049ff732849ff7330eb05e93600000049ff733849ff734049ff73484d8b53084d8b0b49b803000000000000004889c348b870eeeeacaa2a000090ff15120300004889c3eb0b48bb0100000000000000504883c408488b4c2450488b442460514823c8f6c101597503ff5570483bc87e02eb5e4c8b7424104983fe0174584c8b6c24284d8b65e84d8b5c240848bb686feeacaa2a0000498b434848bae8d7edacaa2a0000909090ff15ae0200004883f8017428488b5c2468488b44244848bab018600000000000ff124883f801752beb70e924000000e99a0000004c8b5424504c8b4c246049524d0bd141f6c201495a7503ff55704d3bd175714c8b6c246041f6c5017503ff55704d89ec4983c40270f44c8b5c24104983fb0174074c8b542468eb0a49ba5d0000000000000048ff74244848ff7424584d89d14c8b542450eb05e92f0000004d89c84c8b4c24484c89c74c8b4424404c89e34889f8488b542438909090e851fdffffeb05e9050000004989c6eb044c8b34244d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fa49b978a6edacaa2a00004d890a4d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89f848bf38efeeacaa2a00004989384d8d7fd84c3b7d107303ff554049c747f8040000004c89fe4c8956184c894610488b5c246848895e0848c706f1ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48c7420801000000498b4e1048890a4d8d7fe84c3b7d107303ff554049c747f8020000004c89f8488950084c8b6c24084c89284d89f4ff15120100004889c34889f0ff150e0100004d8d7fd04c3b7d107303ff554049c747f8050000004d89fb4d8b5424204d8953204d8b4c24184d894b18498943104d8b4424084d894308498b3c2449893b488b74241849524c23d641f6c201495a7503ff55704c3bd67c02eb224989c6488b5c24204c89c848bab018600000000000909090ff124883f8017505eb2f4989c64c894c24684c895424604d89f24d89c14d8b0424488b5c2418488b442420488b5424284883c458e9b2fbffff4c89d84883c458c2100090|@1563,8191,@1554,@974,@1329,@1124,@974,@1562,@1559|43,0,0 143,0,@1361 157,0,@972 182,0,0 370,0,1 383,0,@1548 405,0,0 475,0,@1361 489,0,@972 524,0,I24 626,0,46 741,0,@617 783,0,@1551 1041,0,I24 1548:O1|@1549 1549:C2,40|90909090909090483b65187303ff55484c8b701848b8e0eeeeacaa2a00004c89f2ff229090909090|@1121,8191|22,0,@1550 1550:S66|4d6978656420726967687420616e64206c656674206173736f63696174697665206f70657261746f7273206f66207468652073616d6520707265636564656e63652e 1551:O4|@1552,-1,@552,@617 1552:S11|3c756e646566696e65643e 1553:S42|50415253455f44454328292e70617273654465632833296465632834297061727365496e666978283729 1554:C9,512|90909090909090483b65187303ff55484d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b72104c8970084c8b6a084c89284989d44989db909090ff15e20100004989c24d8d7fe84c3b7d107303ff554049c747f8020000004c89f84d8b4c24d84c8948084d8b4424084c89009090ff15b6010000495449534952498b5424f0909090ff12488b1c24488b54241090ff159e010000488b7c2410488b77e8488b5e08488b5310488b0a4c8b73304d8b2e4981fd8900000074054d89eceb034989cc50488b5f104c89e09090ff156a0100004883f801742b4c8b5c24184d8b53e84d8b4208498b5b08498b431048bae878eeacaa2a000090ff15460100004989c4eb0a49bcb01e60000000000048bbb01e6000000000004c89e048bab018600000000000ff124883f801740c49bb6006edacaa2a0000eb3a4c8b5c241849544c89e0498b53e09090ff1248f7c00100000075054c8b18eb1c48b830f2eeacaa2a000090ff555849bb0100000000000000eb0249544c89d890ff15ce0000004883f801740f4c89d890ff15c60000004989c2eb194d8b134983faff75064d8b5308eb0a49baffffffffffffffff4d8b034983f8ff750c49b90300000000000000eb0a49b90100000000000000488b7c24184c891f4c894f08488b74240848897710488b1c2448895f184c89572048b801000000000000004883c428c390|@1558,8191,@1390,@1390,@1557,@1333,@1383,@1529,@1527|243,0,@1382 265,0,I48 275,0,I48 288,0,I24 306,0,@198 350,0,@1555 364,0,0 424,0,-1 443,0,1 455,0,0 498,0,0 1555:O3|@7460,@1556,0 1556:S6|4f7074696f6e 1557:C9,408|90909090909090483b65187303ff55484c8b72e84d8b6e084d8b65104d8b1c244d8b55304d8b0a4981f98900000074054d89c8eb034d89d8525053488b5af84c89c09090ff15760100004883f801746d4c8b442410498b78e8488b7708488b5e10488b13488b4e30488b014881f88900000074054989c6eb034989d6498b58104c89f090ff153e0100004883f80174704c8b7424104d8b6ee84d8b650849ff74242849ff74243049ff74243849ff74244049ff7424484d8b542420eb05e9ca0000004d8b4c24184d8b442410498b5c2408498b0424909090ff15f2000000498b56e09090ff1248f7c001000000753c4c8b184c89d8909090ff15da000000eb05e9260000004883f801740d4c89d89090ff15ca000000eb094d8b134983faff750a488b4424084883c418c34c8b7424104d8d7fe84c3b7d107303ff554049c747f8020000004c89f84d8b6ef84c8968084c8b24244c89204d8b5ef090ff15860000004c89da909090ff124889c3488b4424089090ff1576000000488b1c24488b5424104883c418e97bfeffff488b4424084883c418c39090|@1560,8191,@1333,@1333,@1331,@1529,@1527,@1390,@1559| 1558:S56|50415253455f44454328292e70617273654465632833296465632834297061727365496e666978283729726561644e6578744f7073283229 1559:C2,48|4989c64d8d7fe04c3b7d107303ff554049c747f8030000004c89f8488958104c89700848c70003000000c39090909090|@1561,4105| 1560:S61|50415253455f44454328292e70617273654465632833296465632834297061727365496e66697828372970617273654170706c69636174696f6e283229 1561:S24|50415253455f5452454528292e6d6b4170706c6963283229 1562:C2,40|4989c64d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89700848c7001b000000c390|@1564,4097| 1563:S54|50415253455f44454328292e70617273654465632833296465632834297061727365496e6669782837296e6578744c6576656c283729 1564:S9|5475706c6554726565 1565:C6,400|90909090909090483b65187303ff55484d8d7fd04c3b7d107303ff554049c747f8050000004d89fe49bd48f8eeacaa2a00004d892e4c8b6a304d896e2049895e1849894610498956084d8d7fa84c3b7d107303ff554049c747f80a0000004d89fc49bb28feeeacaa2a00004d891c244c8b5a384d895c24484d896c24404c8b52284d895424384d897424304c8b4a204d894c2428488b7a1849897c24204989442418498954241049895c24085250534950495649544989d949b8880cefacaa2a0000488b5c241048b86819efacaa2a000048ba787beeacaa2a000090ff15d6000000488b7424284d8d7fe84c3b7d107303ff554049c747f8020000004c89f8488b5e1048895808488b54241048891090ff15aa000000488b4c2420ff35a70000005049ba6819efacaa2a00004c8b4c24104c8b4110488b5908488b01488b5608ff124889c3488b442410488b54240890ff12504c8b4c242049b8681aefacaa2a000048bb6080eeacaa2a0000488b44241848ba787beeacaa2a000090ff154e000000488b04244883c438c39090909090|@1617,8191,@1389,@1390,@1433,@1389|42,0,@1566 99,0,@1579 186,0,@1597 201,0,@1614 211,0,@1388 292,0,@1614 346,0,@1616 356,0,@1400 371,0,@1388 1566:C12,592|90909090909090483b65187303ff55484989d54989c44889d8909090ff15560200004889c24d8d7fe84c3b7d107303ff554049c747f8020000004c89f849be20fbeeacaa2a00004c8970084c89204d89eb4989da4989d190ff15220200004953495449515049ff7310488b1c24488b542420495248ff73104c8b422048bb6080eeacaa2a000048b85f0000000000000048ba6864eeacaa2a00009090ff15e60100004883f801746b4d8d7fe84c3b7d107303ff554049c747f8020000004c89f849bee095eeacaa2a00004c8970084c8b6c24184c89289090ff15b20100004c8b6424304c8b0424498b5c242048ba487eeeacaa2a00009090ff159a0100004889c3488b4424089090ff15920100004989c2eb05e91c0000004883c410483b65187303ff5548e93fffffff48b90100000000000000488b4c2408488b442430514c8b401848bb6080eeacaa2a000048b80b0000000000000048ba6864eeacaa2a0000909090ff153e0100004883f80174704c8b7424284983fe01756a4c8b6c24384d8b6518495449ff74242849ff74243049ff74243849ff74244049ff7424484d8b5424204d8b4c24184d8b442410498b5c2408498b042490ff15f20000004c8b1c2449ff731049ff731849ff732049ff732849ff733049ff733849ff7340eb0ae95b000000e92a00000049ff73484d8b53084d8b0b49b803000000000000004889c348b888fbeeacaa2a0000ff15a6000000eb01504c8b6c24404c8b442438498b5d18498b4510498b550890ff124889c3488b4424084883c448ff2580000000488b04244883c440c390909090909090|@1573,8191,@1574,@1390,@1350,@1390,@1397,@1576,@1350,@1329,@1124,@1572|63,0,@1567 126,0,@1400 136,0,47 146,0,@1349 194,0,@1426 238,0,@1395 300,0,0 325,0,@1400 335,0,5 345,0,@1349 503,0,1 516,0,@1569 1567:O1|@1568 1568:C2,32|4883f80b750b48b80300000000000000c348b80100000000000000c390909090|@1114,1|8,0,1 19,0,0 1569:O1|@1570 1570:C2,40|90909090909090483b65187303ff55484c8b701848b8f8fbeeacaa2a00004c89f2ff229090909090|@1121,8191|22,0,@1571 1571:S32|4578706563746564206964206f722069643a7479206265666f72652060617327 1572:C2,48|4989c64d8d7fe04c3b7d107303ff554049c747f8030000004c89f8488958104c89700848c700efffffffc39090909090|@1578,4105| 1573:S61|50415253455f44454328292e70617273654465632833296465632834297061747465726e283329636f6e73747261696e744f724c617965726564283229 1574:C2,32|4c8b304983fef1750b48b80300000000000000c348b80100000000000000c390|@1575,4097|11,0,1 22,0,0 1575:S23|50415253455f5452454528292e69734964656e74283129 1576:C2,48|4989c64d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c8970104889580848c700fbffffffc39090909090|@1577,4105| 1577:S28|50415253455f5452454528292e6d6b436f6e73747261696e74283229 1578:S25|50415253455f5452454528292e6d6b4c617965726564283229 1579:C38,2744|90909090909090483b65187303ff55484c8b72084d8b6e104d8b65004d8b5e304d8b134981fa8900000074054d89d1eb034d89e14983f967751f4c89f048ba9808eeacaa2a000090ff15920a000048b8380aefacaa2a0000c34983f96d755852504c89f048ba9808eeacaa2a00009090ff15720a00004c8b4c24084d8b4108498b7810488b37498b5830488b134881fa8900000074054889d1eb034889f14883f96f7418488d542410909090ff153e0a00004889c1eb0fe98300000048b90100000000000000488b4424084c8b70084d8b6e104d8b65004d8b5e304d8b134981fa8900000074054d89d1eb034d89e14983f96f751a51488b400848ba9808eeacaa2a0000ff15ee0900004989c1eb22514c89f348b8bb0000000000000048ba2858eeacaa2a000090ff15d20900004989c1488b04244883c418ff25c90900004983f969756d5250488b420848ba9808eeacaa2a0000909090ff15b20900004c8b4c24084d8b4108498b7810488b37498b5830488b134881fa8900000074054889d1eb034889f14883f96b74754d8d7fe84c3b7d107303ff554049c747f8020000004c89f84d8b71284c8970084c8b2c24eb05e9230100004c89289090ff15560900004989c0498b5908498b4118498b5110909090ff124c8b642408504d8b44240848bb6080eeacaa2a000048b8710000000000000048ba6864eeacaa2a0000eb05e9530000009090ff15120900004883f801743f488d542418909090ff15060900004d8d7fe84c3b7d107303ff554049c747f8020000004d89fb498943084c8b14244d89134c89d8ff15e20800004889c1eb11488b0c24eb0b48b9480aefacaa2a000050488b4424104c8b70084d8b6e104d8b65004d8b5e304d8b134981fa8900000074054d89d1eb034d89e14983f96b751c51488b400848ba9808eeacaa2a00009090ff158e0800004989c1eb22514c89f348b8530000000000000048ba2858eeacaa2a000090ff15720800004989c1488b04244883c420c34c8b4208498b7810488b37498b5830488b0b4881f98900000074054989cceb034989f44983fc75755c52504c89c048ba9808eeacaa2a00009090ff152e080000488b4424084c8b400848bb6080eeacaa2a000048b8770000000000000048ba6864eeacaa2a0000909090ff15060800004883f801741448b8480aefacaa2a00004883c410c3e9e800000050504889e348b80100000000000000488d542420ff15da0700004c8b7424184d8b6e084d8b65104d8b1c244d8b55304d8b0a4981f98900000074054d89c8eb034d89d84983f877751a4c89e848ba9808eeacaa2a00009090ff159e0700004989c0eb224c89eb48b8fb0000000000000048ba2858eeacaa2a00009090ff15820700004989c04d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89f848bfe005edacaa2a00004989384d8d7fd84c3b7d107303ff554049c747f8040000004c89f8488b742408488970184c894010488b1c244889580848c700110000004883c420c34983f97f7575488b42404989d448ff702848ff703048ff703848ff704048ff70484c8b50204c8b48184c8b4010488b5808488b00ff15ea06000050498b44244048ba9808eeacaa2a00009090ff15da0600004d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fb49ba78a6edacaa2a0000eb05e9410000004d89134d8d7fd84c3b7d107303ff554049c747f8040000004c89f849b9580aefacaa2a00004c8948184c8b04244c8940104c89580848c700edffffff4883c408c34981f9810000007575488b42404989d448ff702848ff703048ff703848ff704048ff70484c8b50204c8b48184c8b4010488b5808488b00ff153606000050498b44244048ba9808eeacaa2a00009090ff15260600004d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fb49ba78a6edacaa2a0000eb05e9410000004d89134d8d7fd84c3b7d107303ff554049c747f8040000004c89f849b9e00aefacaa2a00004c8948184c8b04244c8940104c89580848c700edffffff4883c408c34981f983000000756f488b42085248bb686feeacaa2a0000488b404848bae8d7edacaa2a000090ff15920500004883f8017402eb6d4c8b34244d8b6e08495549ff752849ff753049ff753849ff754049ff75484d8b55204d8b4d184d8b4510498b5d08498b4500ff155a0500004c8b242449ff742410eb05e92301000049ff74241849ff74242049ff74242849ff74243049ff74243849ff74244049ff742448eb05e92a0000004d8b5424084d8b0c2449b803000000000000004889c348b8200befacaa2a0000ff15020500004883c4084c8b1c244d8b534049ff722849ff723049ff723849ff724049ff72484d8b0a4d8b4208498b7a10498b7218498b5a204989da4c89ca4989f14c89c14989f84889cb4889d09090ff15ba04000050498b434048ba9808eeacaa2a0000909090ff15aa0400004d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89f849be78a6edacaa2a00004c89304989c54d8d7fd84c3b7d107303ff554049c747f8040000004c89f849bcc80befacaa2a00004c8960184c8b1c244c8958104c89680848c700edffffff4883c410c34981f9870000007575488b42404989d448ff702848ff703048ff703848ff704048ff70484c8b50204c8b48184c8b4010488b5808488b00ff150a04000050498b44244048ba9808eeacaa2a00009090ff15fa0300004d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fb49ba78a6edacaa2a0000eb05e9410000004d89134d8d7fd84c3b7d107303ff554049c747f8040000004c89f849b9080cefacaa2a00004c8948184c8b04244c8940104c89580848c700edffffff4883c408c34981f9850000007575488b42404989d448ff702848ff703048ff703848ff704048ff70484c8b50204c8b48184c8b4010488b5808488b00ff155603000050498b44244048ba9808eeacaa2a00009090ff15460300004d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fb49ba78a6edacaa2a0000eb05e9410000004d89134d8d7fd84c3b7d107303ff554049c747f8040000004c89f849b9480cefacaa2a00004c8948184c8b04244c8940104c89580848c700edffffff4883c408c34c8b62084d8b5424104d8b0a498b742430488b0e4881f98900000074084989c14889c8eb094889c14c89c84989c9524951488b5a489090ff15a20200004883f8017467488b4424084c8b70084d8b6e104d8b65004d8b5e304d8b134981fa8900000074054d89d1eb034d89e14983f92f750c49b90300000000000000eb0a49b901000000000000004983f90174214951488b400848ba9808eeacaa2a000090ff15420200004989c0eb11e9cd00000049b8010000000000000049514c8b4c24104d8b4118ff352502000048ff7424084c8b5424184d8b4908498b38498b7008498b58104989d84889f34889f8909090ff15020200004d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89fa48b978a6edacaa2a000048890a4d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fe49bd38efeeacaa2a00004d892e4989c44d8d7fd84c3b7d107303ff554049c747f8040000004c89f8488950184c8970104c89600848c700f1ffffff4883c418c3488b4424084c8b480849b8880cefacaa2a0000488b1c2448b86080eeacaa2a000048ba787beeacaa2a0000ff155201000048b8a00cefacaa2a00004883c410c3909090|@1601,8191,@1117,@1117,@1602,@1117,@1315,@1604,@1117,@1390,@1350,@1606,@1562,@1117,@1315,@1117,@1350,@1608,@1117,@1315,@1331,@1117,@1331,@1117,@974,@1329,@1124,@1331,@1117,@1331,@1117,@1331,@1117,@1333,@1117,@1433,@1599,@1389|63,0,@1115 80,0,@1580 102,0,@1115 190,0,0 252,0,@1115 277,0,93 287,0,@1313 333,0,@1115 483,0,@1400 493,0,56 503,0,@1349 603,0,@1581 666,0,@1115 693,0,41 703,0,@1313 778,0,@1115 805,0,@1400 815,0,59 825,0,@1349 850,0,@1581 875,0,0 946,0,@1115 972,0,125 982,0,@1313 1032,0,@193 1166,0,@1115 1213,0,@617 1257,0,@1582 1362,0,@1115 1409,0,@617 1453,0,@1586 1505,0,@1361 1519,0,@972 1667,0,1 1680,0,@1588 1781,0,@1115 1829,0,@617 1869,0,@1591 1974,0,@1115 2021,0,@617 2065,0,@1593 2170,0,@1115 2217,0,@617 2261,0,@1595 2413,0,1 2425,0,0 2447,0,@1115 2474,0,0 2573,0,@617 2615,0,@1551 2688,0,@1597 2702,0,@1400 2712,0,@1388 2728,0,@1598 1580:O1|-16 1581:O1|14 1582:O4|@1584,-1,@177,@1583 1583:O3|1,@512,@1585 1584:S10|636f6e76537472696e67 1585:O3|3,@7461,79992 1586:O4|@1587,-1,@177,@1583 1587:S7|636f6e76496e74 1588:O1|@1589 1589:C2,40|90909090909090483b65187303ff55484c8b701848b8900befacaa2a00004c89f2ff229090909090|@1121,8191|22,0,@1590 1590:S38|5265616c20636f6e7374616e7473206e6f7420616c6c6f77656420696e207061747465726e73 1591:O4|@1592,-1,@177,@1583 1592:S8|636f6e765265616c 1593:O4|@1594,-1,@177,@1583 1594:S8|636f6e7643686172 1595:O4|@1596,-1,@177,@1583 1596:S8|636f6e76576f7264 1597:S7|5061747465726e 1598:O1|-5 1599:C9,408|90909090909090483b65187303ff55485349514d89c84c89d3488b44242048bae878eeacaa2a0000ff159201000050488b542410ff1248f7c001000000754d4c8b284c89e8909090ff157a0100004883f80174164c89e890ff157201000049be0300000000000000eb2c4d8b65004983fcff750c49be0300000000000000eb1649be0100000000000000eb0a49be01000000000000004983fe0174724c8b7424204983fe01756c4c8b6c240849ff752849ff753049ff753849ff754049ff75484d8b55204d8b4d184d8b4510498b5d08498b4500ff15fe00000050488b5c240848b851000000000000009090ff15ee00000048bb40c8eeacaa2a0000ff15e60000004d8d7fe84c3b7d10730feb0ae971000000e96c000000ff554049c747f8020000004d89fc49bbb80eefacaa2a00004d891c2449894424084c8b54241049ff721049ff721849ff722049ff722849ff723049ff723849ff724049ff72484d8b0a4d8b42084d89c249b80100000000000000488b5c24404c89e09090ff156e000000eb0150488b4424084883c420c2100090909090909090|@1613,8191,@1383,@1529,@1527,@1329,@303,@303,@1124|32,0,@1382 96,0,1 118,0,1 130,0,0 142,0,0 226,0,40 244,0,@1523 296,0,@1600 362,0,0 1600:C2,32|90909090909090483b65187303ff55484c8b7018488b42084c89f2ff22909090|@1525,8191| 1601:S55|50415253455f44454328292e70617273654465632833296465632834297061747465726e28332961746f6d69635061747465726e283129 1602:C4,224|90909090909090483b65187303ff55484c8b72f84d8d7fe84c3b7d107303ff554049c747f8020000004c89f84d8b6e204c896808488b5af04889184889d19090ff15c20000004c8b71f8514989c0498b5e08498b4618498b56109090ff124c8b2c244d8b65f8504d8b44240848bb6080eeacaa2a000048b8710000000000000048ba6864eeacaa2a00009090ff157e0000004883f801740f488b542408e865ffffff4989c3eb0a49bb01000000000000004d8d7fe84c3b7d107303ff554049c747f8020000004d89fa4d895a084c8b0c244d890a4c89d04883c410c390909090|@1603,8191,@1390,@1350|110,0,@1400 120,0,56 130,0,@1349 169,0,0 1603:S68|50415253455f44454328292e70617273654465632833296465632834297061747465726e28332961746f6d69635061747465726e283129702d766172734c697374283129 1604:C2,40|4989c64d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89700848c70013000000c390|@1605,4097| 1605:S4|4c697374 1606:C4,224|90909090909090483b65187303ff55484c8b72f84d8d7fe84c3b7d107303ff554049c747f8020000004c89f84d8b6e284c896808488b5af04889184889d19090ff15c20000004c8b71f8514989c0498b5e08498b4618498b56109090ff124c8b2c244d8b65f8504d8b44240848bb6080eeacaa2a000048b8710000000000000048ba6864eeacaa2a00009090ff157e0000004883f801740f488b542408e865ffffff4989c3eb0a49bb01000000000000004d8d7fe84c3b7d107303ff554049c747f8020000004d89fa4d895a084c8b0c244d890a4c89d04883c410c390909090|@1607,8191,@1390,@1350|110,0,@1400 120,0,56 130,0,@1349 169,0,0 1607:S66|50415253455f44454328292e70617273654465632833296465632834297061747465726e28332961746f6d69635061747465726e283129702d7475706c6573283129 1608:C10,1248|90909090909090483b65187303ff5548488b42f852534c8b400848bb6080eeacaa2a000048b87b0000000000000048ba6864eeacaa2a0000ff15ca0400004883f80174224c8b342449c7060100000049c746080100000048b801000000000000004883c410c34c8b7424084d8b6ef84d8d7fe84c3b7d107303ff554049c747f8020000004c89f84d8b65384c8960084d8b5ef04c89189090ff15720400004989c24d8d7fe84c3b7d107303ff554049c747f8020000004c89f849b98078eeacaa2a00004c8948084c89109090ff15460400004c8b442408498b78f84952488b5f0848ba4896eeacaa2a000090ff152e040000488b742410488b5ef8504c8b430848bb6080eeacaa2a000048b85b0000000000000048ba6864eeacaa2a00009090ff15020400004883f8017427488b4c2418488b41f84c8b442408488b58084c8b70184c8b68104c89f04c89eaff124889c2eb73488b142448f7c201000000740c48b90300000000000000eb08488b0a488d4c0901f6c1017503ff55704883f9017e5748f7c201000000740c48b80300000000000000eb08488b02488d440001a8017503ff55704883f8017f1848b860d6ecacaa2a000090ff555849be0100000000000000eb05e90a02000048f7c201000000740a4989d6eb0fe9520100004c0fb672084f8d74360148bb63000000000000004c89f048bab01960000000000090ff124883f80174564c8b342449f7c601000000740c49bd0300000000000000eb084d8b2e4f8d6c2d0141f6c5017503ff55704983fd017f1848b860d6ecacaa2a000090ff555849bc010000000000000049f7c601000000740a4d89f4eb0fe9cd0000004d0fb666084f8d64240148bb73000000000000004c89e048baf019600000000000ff124883f80174704c8b6424184d8b5c24f84d8b5308495249ff722849ff723049ff723849ff724049ff72484d8b0a4d8b4208498b7a10498b7218498b5a204989da4c89ca4989f14c89c14989f84889cb4889d0ff15520200004c8b342449ff761049ff761849ff762049ff762849ff763049ff7638eb05e92f00000049ff764049ff76484d8b56084d8b0e49b803000000000000004889c348b82818efacaa2a000090ff150a020000eb01504d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89f849be78a6edacaa2a00004c89304d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fd49bc38efeeacaa2a00004d8965004d8d7fd84c3b7d107303ff554049c747f8040000004d89fb498943184d896b104c8b5424084d89530849c703f1ffffff4c8b4c24204d8b41f84c89db488b442410498b503090ff124889c24883c4084d8d7fe84c3b7d107303ff554049c747f8020000004c89ff48895708488b3424488937488b5c2418488b53f8574c8b420848bb4899eeacaa2a000048b8710000000000000048ba6864eeacaa2a0000ff15160100004883f801746350504889e348b80100000000000000488b54243090e8bdfbffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89f9488b442408488941084c8b7424104c89314c8b6c24284c8b24244d89650049894d0848b801000000000000004883c438c34d8d7fe84c3b7d107303ff554049c747f8020000004c89f948c7410801000000488b04244889014c8b74241849c7060300000049894e0848b801000000000000004883c428c390909090909090|@1612,8191,@1350,@1390,@1390,@1429,@1350,@1329,@1124,@1350|28,0,@1400 38,0,61 48,0,@1349 89,0,0 187,0,@1380 227,0,@1428 258,0,@1400 268,0,45 278,0,@1349 354,0,1 397,0,1 430,0,@49 444,0,0 490,0,49 503,0,I28 535,0,1 570,0,@49 584,0,0 623,0,57 636,0,I29 786,0,1 799,0,@1609 848,0,@617 890,0,@1551 1032,0,@1433 1042,0,56 1052,0,@1349 1079,0,0 1158,0,0 1228,0,0 1609:O1|@1610 1610:C2,40|90909090909090483b65187303ff55484c8b701848b89818efacaa2a00004c89f2ff229090909090|@1121,8191|22,0,@1611 1611:S35|203d20706174206578706563746564206166746572206e756d65726963206c6162656c 1612:S67|50415253455f44454328292e70617273654465632833296465632834297061747465726e28332961746f6d69635061747465726e2831296765744c6162656c73283229 1613:S41|50415253455f44454328292e70617273654465632833296765744c6f6e674e6f6e496e666978283729 1614:O1|@1615 1615:C2,184|4883f82f750b48b80300000000000000c34883f875750b48b80300000000000000c34883f86d750b48b80300000000000000c34883f869750b48b80300000000000000c34881f887000000742d4881f88500000074244881f883000000741b4881f88100000074124883f87f740c4883f86174064883f803750b48b80300000000000000c34883f86174064883f803750b48b80300000000000000c34883f867750b48b80300000000000000c348b80100000000000000c3|@1338,1|8,0,1 25,0,1 42,0,1 59,0,1 124,0,1 147,0,1 164,0,1 175,0,0 1616:S14|456e64206f66207061747465726e 1617:S39|50415253455f44454328292e70617273654465632833296465632834297061747465726e283329 1618:C9,488|90909090909090483b65187303ff55484d8d7fe04c3b7d107303ff554049c747f8030000004d89fe49bd181defacaa2a00004d892e4c8b6a084d896e104989560852504d8d7f984c3b7d107303ff554049c747f80c0000004d89fc49bb381fefacaa2a00004d891c244c8b5a684d895c24584c8b52604d895424504c8b4a584d894c24484c8b42504d89442440488b7a4849897c24384d897424304c8b72404d89742428488b72384989742420498944241849895424104d896c24084954534d89e949b89839efacaa2a000048b8b839efacaa2a000048ba787beeacaa2a0000ff152a010000488b5c2418488b5308488b4a10488b014c8b72304d8b2e4981fd8900000074054d89eceb034989c448bbb839efacaa2a00004c89e090ff15f60000004883f80174674d8d7fe84c3b7d107303ff554049c747f8020000004c89f849bcd83aefacaa2a00004c8960084c8b1c244c8918909090ff15c2000000488d54242090ff15be0000004c8b5424184d8b4a084d8b4110498b38498b7130488b1e4881fb89000000740a4889daeb08e9440000004889fa4883fa1d7536504c89c848ba9808eeacaa2a000090ff157e000000488b442408488d542428ff15760000004889c3488b04244883c428ff256d0000004883c420c348b8a00cefacaa2a00004883c420c390|@1647,8191,@1389,@1333,@1390,@1648,@1117,@1669,@1646|42,0,@1619 93,0,@1622 196,0,@1641 206,0,@1642 216,0,@1388 272,0,@1642 322,0,@1644 419,0,@1115 474,0,@1598 1619:C3,48|90909090909090483b65187303ff554848ff72105352504950488d5424289090ff15320000004883c428c39090909090|@1621,8191,@1620| 1620:C4,280|90909090909090483b65187303ff554850504c8b72e84d8b6e105249ff752849ff753049ff753849ff754049ff75484d8b55204d8b4d184d8b4510498b5d08498b450090ff15f60000004c8b24244d8b5c24e850498b5c24d8498b4424e0498b53089090ff124c8d5424104989024c8d4c24104c8b04244d8941084d8d7fe84c3b7d107303ff554049c747f8020000004c89ff488b742410488937488b5c241848895f08488b542408574c8b42f848bb6080eeacaa2a0000488b42f048ba6864eeacaa2a00009090ff157a0000004883f801740f488b542410e829ffffff4889c1eb0a48b901000000000000004d8d7fe84c3b7d107303ff554049c747f8020000004c89f8488948084c8b34244c89304883c428c3909090|@1372,8191,@1329,@1350|176,0,@1400 190,0,@1349 229,0,0 1621:S63|50415253455f44454328292e706172736544656328332964656328342965787072657373696f6e28322965787072657373696f6e4c696e654c697374283329 1622:C55,3792|90909090909090483b65187303ff55484c8b72084d8b6e104d8b65004d8b5e304d8b134981fa8900000074054d89d1eb034d89e14983f96d756f52504c89f048ba9808eeacaa2a0000909090ff15a60e00004c8b4c24084d8b4108498b7810488b37498b5830488b134881fa8900000074054889d1eb034889f14883f96f744f4d8d7fe84c3b7d107303ff554049c747f8020000004c89f84d8b71204c8970084c8b2c244c8928eb05e9a90000009090ff154a0e0000495049ff711850488d5424289090ff153e0e00004889c1eb0d48b90100000000000000505050488b4424204c8b70084d8b6e104d8b65004d8b5e304d8b134981fa8900000074054d89d1eb034d89e14983f96f751c51488b400848ba9808eeacaa2a00009090ff15ee0d00004989c1eb22514c89f348b8bb0000000000000048ba2858eeacaa2a000090ff15d20d00004989c1488b04244883c430ff25c90d00004c8b4a084d8b4110498b38498b7130488b1e4881fb8900000074054889d9eb034889f94883f969755b52504c89c848ba9808eeacaa2a000090ff15920d0000488b5424084c8b420848bb6080eeacaa2a000048b86b0000000000000048ba6864eeacaa2a0000909090ff156a0d00004883f801741448b8480aefacaa2a00004883c410c3e99e020000488b4c2408488b410848ff702848ff703048ff703848ff704048ff70484c8b50204c8b48184c8b4010488b5808488b00ff15220d00004c8b7424084989c54d8d7fe84c3b7d107303ff554049c747f8020000004c89f84d8b66404c8960084c8b1c244c89184d89eaff15f20c00004c8b4c240849524889c3498b4118498b5110ff124c8b442410504d8b400848bb6080eeacaa2a000048b8710000000000000048ba6864eeacaa2a00009090ff15b60c00004883f801746d488b7424184d8d7fe84c3b7d107303ff554049c747f8020000004c89f8488b5e2848895808488b542410488910909090ff15820c000048ff760848ff761850488d542438ff15760c00004d8d7fe84c3b7d107303ff554049c747f8020000004c89f948894108488b442418eb05e9110000004889014889c8ff154a0c00004889c7eb6e488b7c24184c8b470848bb6080eeacaa2a000048b8730000000000000048ba6864eeacaa2a00009090ff151e0c00004883f80174724d8d7fe84c3b7d107303ff554049c747f8020000004c89fe488b5c240848895e08488b1424488916488b4c24184d8d7fe84c3b7d10730aeb05e980000000ff554049c747f8020000004c89f84c8b71384c8970084c8b6c24104c8928ff15be0b0000564989c048bb7300000000000000eb05e940000000488b4118488b513090ff124d8d7fe84c3b7d107303ff554049c747f8020000004d89fc49894424084c8b1c244d891c244c89e09090ff15760b00004889c7eb05488b3c24505050488b742430488b5e08488b5310488b0a488b43304c8b304981fe8900000074054d89f5eb034989cd4983fd6b751b574889d848ba9808eeacaa2a00009090ff152e0b00004989c5eb1e5748b8530000000000000048ba2858eeacaa2a0000ff15160b00004989c5488b04244883c440c3488b4a084c8b61104d8b1424488b7930488b1f4881fb8900000074084989c24889d8eb094889c34c89d04989da4883f875755e5249524889c848ba9808eeacaa2a0000909090ff15c60a0000488b5424084c8b420848bb6080eeacaa2a000048b8770000000000000048ba6864eeacaa2a0000909090ff159e0a00004883f801741448b8480aefacaa2a00004883c410c3e9e6000000488b4c240848ff7108488d5424189090ff15760a00004d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fe49bde005edacaa2a00004d892e4d8d7fd84c3b7d107303ff554049c747f8040000004d89fc49894424184d8974241049c74424080300000049c70424110000004c8b5c24104d8b53084d8b4a104d8b01498b7a30488b374881fe8900000074054889f3eb034c89c34883fb77751a49544c89d048ba9808eeacaa2a0000ff15de0900004889c3eb2249544c89d348b8fb0000000000000048ba2858eeacaa2a0000ff15c20900004889c3488b04244883c420c3488b4208488b58104c8b2b4c8b58304d8b334981fe8900000074054c89f0eb034c89e84883f827756f524952488b420848ba9808eeacaa2a0000ff157e0900004c8b6c24085050504d8b65185050504d8b5424084d8b4c24104889e348b80100000000000000ff155a0900004d8d7fe04c3b7d107303ff554049c747f8030000004d89f848bfe82fefacaa2a0000498938488b742410eb05e91c020000498970104d895008488d5c2418488b542408488913488d4c24184c894108488d4424184c8948104d8d7fe04c3b7d107303ff554049c747f8030000004d89fe4c8b6c24184d892e4c8b6424204d8966084c8b5c24284d895e104d8d7fe84c3b7d107303ff554049c747f8020000004c89f849ba5830efacaa2a00004c8950084c8b4c24304c89084d89f0909090ff159e080000488b7c243849504889c34c89c0488b575890ff12488b742440488b5e08488b5310488b0a4c8b73304d8b2e4981fd8900000074054d89eceb034989cc4983fc21751b504889d848ba9808eeacaa2a00009090ff154e0800004989c4eb1e5048b8f037eeacaa2a000048ba2858eeacaa2a0000ff15360800004989c44c8b6424484d8d7fe84c3b7d107303ff554049c747f8020000004c89f84d8b5c24504c8958084c8b5424404c891090ff15060800004989c048bb7300000000000000488b442408498b542430909090ff124c8b4c24484d8b4108498b7810488b37498b5830488b134881fa8900000074054889d1eb034889f14883f915751b504c89c048ba9808eeacaa2a00009090ff15ae0700004889c1eb22504c89c348b82038eeacaa2a000048ba2858eeacaa2a000090ff15920700004889c1488b4c24504c8b490849b8c030efacaa2a000048bb6080eeacaa2a0000488b44244848ba787beeacaa2a0000909090ff156207000049b80100000000000000488b1c24488b4424084883c458ff254d0700004c8b6a084d8b5d10498b1b498b45304c8b304981fe8900000074054c89f0eb034889d84883f82f750c48bb0300000000000000eb0a48bb01000000000000004883fb01741c524952534c89e848ba9808eeacaa2a0000909090ff15f6060000eb0e48b80100000000000000524952534c8b6c24104d8b65084d8b5c24104d8b134d8b4c24304d8b014981f88900000074054c89c7eb034c89d75748bbe830efacaa2a00004889f89090ff15ae0600004883f801746f488b7c2418488b7718ff35a106000048ff7424104c8b5424204c8b4f084c8b4610488b5e08488b06ff158a0600004d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89fb48ba78a6edacaa2a00004889134d8d7ff04c3b7d107303ff554049c747f801000000eb05e94800000049c647ff404c89f949be38efeeacaa2a00004c89314989c54d8d7fd84c3b7d107303ff554049c747f8040000004c89f848895818488948104c89680848c700f1ffffff4883c420c3488b3c244883ff577546488b742418488b460848ba9808eeacaa2a0000909090ff15de050000488b5c2418488b5b08488b44241048ba4896eeacaa2a00009090ff15c60500004883c420ff25c40500004883ff7f7570488b742418488b5e0848ff732848ff733048ff733848ff734048ff73484c8b53204c8b4b184c8b4310488b13488b4b084889cb4889d0ff158a05000050488b460848ba9808eeacaa2a0000909090ff157a0500004d8d7ff04c3b7d107303ff554049c747f80100000049c647ff40eb05e9510000004c89f849be78a6edacaa2a00004c89304989c54d8d7fd84c3b7d107303ff554049c747f8040000004c89f849bc580aefacaa2a00004c8960184c8b1c244c8958104c89680848c700edffffff4883c428c34881ff810000007571488b742418488b5e0848ff732848ff733048ff733848ff734048ff73484c8b53204c8b4b184c8b4310488b13488b4b084889cb4889d090ff15ca04000050488b460848ba9808eeacaa2a0000909090ff15ba0400004d8d7ff04c3b7d107303ff554049c747f80100000049c647ff40eb05e9510000004c89f849be78a6edacaa2a00004c89304989c54d8d7fd84c3b7d107303ff554049c747f8040000004c89f849bce00aefacaa2a00004c8960184c8b1c244c8958104c89680848c700edffffff4883c428c34881ff830000007571488b742418488b5e0848ff732848ff733048ff733848ff734048ff73484c8b53204c8b4b184c8b4310488b13488b4b084889cb4889d090ff150a04000050488b460848ba9808eeacaa2a0000909090ff15fa0300004d8d7ff04c3b7d107303ff554049c747f80100000049c647ff40eb05e9510000004c89f849be78a6edacaa2a00004c89304989c54d8d7fd84c3b7d107303ff554049c747f8040000004c89f849bcc80befacaa2a00004c8960184c8b1c244c8958104c89680848c700edffffff4883c428c34881ff850000007571488b742418488b5e0848ff732848ff733048ff733848ff734048ff73484c8b53204c8b4b184c8b4310488b13488b4b084889cb4889d090ff154a03000050488b460848ba9808eeacaa2a0000909090ff153a0300004d8d7ff04c3b7d107303ff554049c747f80100000049c647ff40eb05e9510000004c89f849be78a6edacaa2a00004c89304989c54d8d7fd84c3b7d107303ff554049c747f8040000004c89f849bc480cefacaa2a00004c8960184c8b1c244c8958104c89680848c700edffffff4883c428c34881ff870000007571488b742418488b5e0848ff732848ff733048ff733848ff734048ff73484c8b53204c8b4b184c8b4310488b13488b4b084889cb4889d090ff158a02000050488b460848ba9808eeacaa2a0000909090ff157a0200004d8d7ff04c3b7d107303ff554049c747f80100000049c647ff40eb05e9510000004c89f849be78a6edacaa2a00004c89304989c54d8d7fd84c3b7d107303ff554049c747f8040000004c89f849bc080cefacaa2a00004c8960184c8b1c244c8958104c89680848c700edffffff4883c428c3488b74241848ff7608488b1c2448b8b85deeacaa2a000048ba2858eeacaa2a0000909090ff15e6010000488b042448ba9808eeacaa2a0000ff15da01000048b8a00cefacaa2a00004883c428c3909090|@1630,8191,@1117,@1390,@1631,@1117,@1315,@1604,@1117,@1350,@1329,@1390,@1350,@1390,@1632,@1562,@1350,@1390,@1633,@1117,@1315,@1117,@1350,@1635,@1117,@1315,@1117,@1481,@1390,@1117,@1315,@1390,@1117,@1315,@1389,@1638,@1117,@1333,@1627,@1599,@1117,@1429,@1629,@1331,@1117,@1331,@1117,@1331,@1117,@1331,@1117,@1331,@1117,@1315,@1117|65,0,@1115 209,0,0 274,0,@1115 301,0,93 311,0,@1313 391,0,@1115 417,0,@1400 427,0,53 437,0,@1349 462,0,@1581 622,0,@1400 632,0,56 642,0,@1349 806,0,@1400 816,0,57 826,0,@1349 952,0,57 1090,0,@1115 1114,0,41 1124,0,@1313 1209,0,@1115 1237,0,@1400 1247,0,59 1257,0,@1349 1282,0,@1581 1353,0,@193 1468,0,@1115 1494,0,125 1504,0,@1313 1580,0,@1115 1624,0,0 1664,0,@1623 1802,0,@1624 1906,0,@1115 1930,0,@1213 1940,0,@1313 2015,0,57 2090,0,@1115 2117,0,@1215 2127,0,@1313 2156,0,@1626 2166,0,@1400 2181,0,@1388 2200,0,0 2270,0,1 2282,0,0 2305,0,@1115 2326,0,0 2383,0,@1627 2485,0,@617 2534,0,@1551 2617,0,@1115 2650,0,@1428 2749,0,@1115 2804,0,@617 2844,0,@1582 2957,0,@1115 3012,0,@617 3052,0,@1586 3165,0,@1115 3220,0,@617 3260,0,@1591 3373,0,@1115 3428,0,@617 3468,0,@1595 3581,0,@1115 3636,0,@617 3676,0,@1593 3727,0,@1318 3737,0,@1313 3760,0,@1115 3776,0,@1598 1623:C2,56|90909090909090483b65187303ff55485250488b52109090ff124883f80175134c8b742408488b0424498b56084883c410ff224883c410c3|@1306,8191| 1624:O1|@1625 1625:C2,32|4883f821750b48b80300000000000000c348b80100000000000000c390909090|@1114,1|8,0,1 19,0,0 1626:S21|456e64206f66206c65742065787072657373696f6e 1627:O1|@1628 1628:C2,64|4883f85b750b48b80300000000000000c34883f861750b48b80300000000000000c34883f803750b48b80300000000000000c348b80100000000000000c39090|@1338,1|8,0,1 25,0,1 42,0,1 53,0,0 1629:C7,352|90909090909090483b65187303ff554850504989c44989e2495249ba010000000000000049b9010000000000000049b8010000000000000048bb1f4e00000000000048b8e005edacaa2a0000ff15360100004d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b0c244c89084c8b4424084c8940089090ff150e01000050504954504c8d4424104889c34c89e09090ff15fe0000004d8d7fe84c3b7d107303ff554049c747f8020000004c89ff488b742410488937488b5c241848895f084d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48c742080100000048893a48bb01000000000000004889d090ff15a60000004889c14d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b34244c897008488908ff15820000004989c54d8d7fd84c3b7d107303ff554049c747f8040000004c89f8488948184c8968104c8b6424084c89600848c700e7ffffff4883c430c39090|@1640,8191,@1369,@1358,@1436,@1453,@1404|28,0,0 38,0,0 48,0,0 58,0,9999 68,0,@193 232,0,0 1630:S61|50415253455f44454328292e706172736544656328332964656328342965787072657373696f6e28322961746f6d696345787072657373696f6e283129 1631:C3,160|90909090909090483b65187303ff55484c8b72f852488b5ad8488b42e0498b5610909090ff124c8b2c24504d8b45e848bb6080eeacaa2a000048b8710000000000000048ba6864eeacaa2a0000909090ff15720000004883f801740f488b542408e8a1ffffff4989c4eb0a49bc01000000000000004d8d7fe84c3b7d107303ff554049c747f8020000004d89fb4d8963084c8b14244d89134c89d84883c410c3|@1372,8191,@1350|49,0,@1400 59,0,56 69,0,@1349 109,0,0 1632:C3,160|90909090909090483b65187303ff55484c8b72f852488b5ac8488b42d0498b5610909090ff124c8b2c24504d8b45d848bb6080eeacaa2a000048b8710000000000000048ba6864eeacaa2a0000909090ff15720000004883f801740f488b542408e8a1ffffff4989c4eb0a49bc01000000000000004d8d7fe84c3b7d107303ff554049c747f8020000004d89fb4d8963084c8b14244d89134c89d84883c410c3|@1372,8191,@1350|49,0,@1400 59,0,56 69,0,@1349 109,0,0 1633:C2,40|4989c64d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89700848c700f5ffffffc390|@1634,4097| 1634:S6|457870536571 1635:C4,160|90909090909090483b65187303ff55485248b8010000000000000090ff15a60000004c8b3424504d8b46e848bb6080eeacaa2a000048b8710000000000000048ba6864eeacaa2a0000909090ff157e0000004883f801740f488b542408e8a5ffffff4989c5eb0a49bd01000000000000004d8d7fe84c3b7d107303ff554049c747f8020000004d89fc4d896c24084c8b1c244d891c244c89e04883c410c39090|@1372,8191,@1636,@1350|19,0,0 45,0,@1400 55,0,56 65,0,@1349 105,0,0 1636:C7,320|90909090909090483b65187303ff55484d8d7fe84c3b7d107303ff554049c747f8020000004c89f849be8078eeacaa2a00004c8970084c8b6af04c89284989d4ff1522010000498b5c24f84954488b5b0848ba4896eeacaa2a000090ff150e010000488b1424488b4af84c8b71084d8b6e104d8b65004d8b5e304d8b134981fa8900000074054d89d1eb034d89e14983f95b7518504c89f048ba9808eeacaa2a00009090ff15ce000000eb1e504c89f348b87b0000000000000048ba2858eeacaa2a0000ff15b60000004c8b4c24084d8b41f84d8d7fe84c3b7d107303ff554049c747f8020000004c89f8498b784848897808498b71f04889309090ff15860000004889c3498b4018498b5010909090ff124889c34d8d7fe84c3b7d107303ff554049c747f8020000004c89f848895808488b14244889104883c410c3909090|@1637,8191,@1390,@1429,@1117,@1315,@1390|42,0,@1380 83,0,@1428 154,0,@1115 178,0,61 188,0,@1313 1637:S73|50415253455f44454328292e706172736544656328332964656328342965787072657373696f6e28322961746f6d696345787072657373696f6e2831296c6162656c6c65642d283129 1638:C2,88|4d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fe49c706010000004989c54d8d7fd04c3b7d107303ff554049c747f8050000004c89f84c8970204c896818488958104c89400848c70015000000c390|@1639,6217| 1639:S34|50415253455f5452454528292e6d6b4c6f63616c4465636c61726174696f6e283329 1640:S26|50415253455f5452454528292e6d6b53656c6563746f72283129 1641:S10|45787072657373696f6e 1642:O1|@1643 1643:C2,216|4883f85774664881f887000000745d4881f88500000074544881f883000000744b4881f88100000074424883f87f743c4883f86174364883f80374304883f85b742a4883f86174244883f803741e4883f87574184883f86974124883f86d740c4883f82f74064883f827750b48b80300000000000000c34883f819750b48b80300000000000000c34883f80d750b48b80300000000000000c34883f841750b48b80300000000000000c34883f81f750b48b80300000000000000c34883f835750b48b80300000000000000c348b80100000000000000c390|@1338,1|110,0,1 127,0,1 144,0,1 161,0,1 178,0,1 195,0,1 206,0,0 1644:O1|@1645 1645:C2,32|4883f81d750b48b80300000000000000c348b80100000000000000c390909090|@1114,1|8,0,1 19,0,0 1646:C2,48|4989c64d8d7fe04c3b7d107303ff554049c747f8030000004c89f8488958104c89700848c7000f000000c39090909090|@1681,4105| 1647:S42|50415253455f44454328292e706172736544656328332964656328342965787072657373696f6e283229 1648:C6,200|90909090909090483b65187303ff55484989c64d8d7fe84c3b7d107303ff554049c747f8020000004c89f849bd083defacaa2a00004c8968084c89304989d44d89f39090ff15a6000000495449534c89e2909090ff159e0000004c8b5424084d8b4af84d8b4108498b7810488b37498b5830488b134881fa8900000074054889d1eb034889f14883f9337537504c89c048ba9808eeacaa2a00009090ff155e000000488b442408488b54241090e855ffffff4889c3488b04244883c418ff25450000004883c410c3|@1652,8191,@1390,@1653,@1117,@1651|45,0,@1649 146,0,@1115 1649:O1|@1650 1650:C2,32|4883f833750b48b80300000000000000c348b80100000000000000c390909090|@1114,1|8,0,1 19,0,0 1651:C2,48|4989c64d8d7fe04c3b7d107303ff554049c747f8030000004c89f8488958104c89700848c700e9ffffffc39090909090|@1680,4105| 1652:S56|50415253455f44454328292e706172736544656328332964656328342965787072657373696f6e28322970617273654f72656c7365283129 1653:C6,200|90909090909090483b65187303ff55484989c64d8d7fe84c3b7d107303ff554049c747f8020000004c89f849bd403fefacaa2a00004c8968084c89304989d44d89f39090ff15a6000000495449534c89e2909090ff159e0000004c8b5424084d8b4af84d8b4108498b7810488b37498b5830488b134881fa8900000074054889d1eb034889f14883f9097537504c89c048ba9808eeacaa2a00009090ff155e000000488b442408488b54241090e855ffffff4889c3488b04244883c418ff25450000004883c410c3|@1657,8191,@1390,@1658,@1117,@1656|45,0,@1654 146,0,@1115 1654:O1|@1655 1655:C2,32|4883f809750b48b80300000000000000c348b80100000000000000c390909090|@1114,1|8,0,1 19,0,0 1656:C2,48|4989c64d8d7fe04c3b7d107303ff554049c747f8030000004c89f8488958104c89700848c700ffffffffc39090909090|@1679,4105| 1657:S57|50415253455f44454328292e706172736544656328332964656328342965787072657373696f6e2832297061727365416e64616c736f283129 1658:C35,1656|90909090909090483b65187303ff55484c8b72f84d8b6e084d8b65104d8b1c244d8b55304d8b0a4981f98900000074054d89c8eb034d89d84983f81f756f52504c89e848ba9808eeacaa2a0000909090ff154a0600004c8b442408498b78f84d8d7fe84c3b7d107303ff554049c747f8020000004c89f8488b771848897008488b1c244889189090ff151a0600004889c3498b40f04889faff12488b542408488b4af84c8b71084d8b6e10eb05e93e0100004d8b65004d8b5e304d8b134981fa8900000074054d89d1eb034d89e14983f939751b504c89f048ba9808eeacaa2a00009090ff15c60500004989c1eb22504c89f348b86035eeacaa2a000048ba2858eeacaa2a000090ff15aa0500004989c14c8b4c24104d8b41f84d8d7fe84c3b7d107303ff554049c747f8020000004c89f8498b781048897808488b7424084889309090ff15760500004889c3498b41f04c89c2ff12488b5c2410488b53f8488b4a084c8b71104d8b2e4c8b61304d8b1c244981fb8900000074054d89daeb034d89ea4983fa13751a504889c848ba9808eeacaa2a000090ff152a0500004989c2eb22504889cb48b89838eeacaa2a000048ba2858eeacaa2a000090ff150e0500004989c24c8b542418488b5c2410498b42f0498b52f890ff124989c0488b1c24488b4424084883c420ff25e80400004983f841756f4c8b42f85250498b400848ba9808eeacaa2a00009090ff15ce0400004d8d7fe84c3b7d107303ff554049c747f8020000004c89f848bf1848efacaa2a000048897808488b342448893090ff15a2040000488b5c2408488b53f0488b4bf84889c34889d04889caff124c8b742408eb05e9ab0000004d8b6ef84d8b65084d8b5c24104d8b134d8b4c24304d8b014981f88900000074054c89c7eb034c89d74883ff11753a504c89e048ba9808eeacaa2a000090ff1542040000488b7c2410488b5c2408488b47f0488b57f8ff124889c3488b04244883c418ff252504000049544c89e348b86838eeacaa2a000048ba2858eeacaa2a0000ff150e040000488b042448ba9808eeacaa2a0000ff150204000048b8a00cefacaa2a00004883c418c34983f80d756e4c8b42f85250498b400848ba9808eeacaa2a000090ff15da030000488b7c2408488b77f84d8d7fe84c3b7d107303ff554049c747f8020000004c89f8488b5e2048895808488b14244889109090ff15aa0300004889c3488b47f04889f2ff12488b4c24084c8b71f84d8b6e08eb05e9850000004d8b65104d8b1c244d8b55304d8b0a4981f98900000074054d89c8eb034d89d84983f82d751b504c89e848ba9808eeacaa2a00009090ff15560300004989c0eb22504c89eb48b8c035eeacaa2a000048ba2858eeacaa2a000090ff153a0300004989c0488b442408488b54241090ff152e0300004889c3488b04244883c418ff25250300004983f835753b4c8b42f85250498b400848ba9808eeacaa2a0000909090ff150a030000488b7c2408488b1c24488b47f0488b57f890ff124883c410ff25f40200004c8b42f8498b7808488b7710488b1e488b4f304c8b194981fb8900000074054d89d9eb034989d94983f919755f52504889f848ba9808eeacaa2a0000ff15ba0200004d8d7fe84c3b7d107303ff554049c747f8020000004c89f849ba1008eeacaa2a00004c8950084c8b0c244c890890ff158e020000488b54240890ff158a0200004883c410ff25880200004989c14d8d7fe84c3b7d107303ff554049c747f8020000004c89f8498b5830488958084c89084989d3909090ff155e0200004d8b53f049534951ff355802000050498b1a498b5208498b421049ba8048efacaa2a00004d8b4be84d8b70284989c04989dd4889d34c89e84c89f2909090ff124989c44d8d7fe84c3b7d107303ff554049c747f8020000004c89f849bb403fefacaa2a00004c8958084c8b14244c89109090ff15f60100004c8b4c24085049ff71f04c8b0424488b7c2418488b77f8495449ff70104c8b460848bb6080eeacaa2a000048b85f0000000000000048ba6864eeacaa2a0000909090ff15b60100004883f801746f4d8d7fe84c3b7d107303ff554049c747f8020000004c89f848bbe095eeacaa2a000048895808488b5424184889109090ff1582010000488b4c24284c8b71f84c8b0424498b5e0848ba487eeeacaa2a0000909090ff15660100004889c3488b4424089090ff155e0100004989c4eb05e9210000004883c410483b65187303ff5548e936ffffff48b801000000000000004883c430c3488b4424084883c430c390|@1664,8191,@1117,@1390,@1117,@1315,@1390,@1117,@1315,@1665,@1117,@1390,@1117,@1667,@1315,@1117,@1117,@1390,@1117,@1315,@1669,@1674,@1117,@1676,@1117,@1390,@1669,@1663,@1390,@1627,@1390,@1350,@1390,@1397,@1576|69,0,@1115 218,0,@1115 245,0,@1186 255,0,@1313 399,0,@1115 425,0,@1220 435,0,@1313 514,0,@1115 556,0,@1659 671,0,@1115 730,0,@1218 740,0,@1313 760,0,@1115 776,0,@1598 807,0,@1115 954,0,@1115 981,0,@1190 991,0,@1313 1061,0,@1115 1160,0,@1115 1200,0,@1112 1326,0,@1661 1391,0,@1654 1453,0,@1400 1463,0,47 1473,0,@1349 1522,0,@1426 1569,0,@1395 1632,0,0 1659:O1|@1660 1660:C2,32|4883f811750b48b80300000000000000c348b80100000000000000c390909090|@1114,1|8,0,1 19,0,0 1661:O1|@1662 1662:C2,208|4883f857750b48b80300000000000000c34881f887000000742d4881f88500000074244881f883000000741b4881f88100000074124883f87f740c4883f86174064883f803750b48b80300000000000000c34883f85b740c4883f86174064883f803750b48b80300000000000000c34883f875750b48b80300000000000000c34883f869750b48b80300000000000000c34883f86d750b48b80300000000000000c34883f82f750b48b80300000000000000c34883f827750b48b80300000000000000c348b80100000000000000c390|@1338,1|8,0,1 73,0,1 102,0,1 119,0,1 136,0,1 153,0,1 170,0,1 187,0,1 198,0,0 1663:C2,40|4989c64d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89700848c7000d000000c390|@1678,4097| 1664:S55|50415253455f44454328292e706172736544656328332964656328342965787072657373696f6e2832296b6579576f7264457870283129 1665:C2,48|4989c64d8d7fd84c3b7d107303ff554049c747f8040000004c89f8488958184c8940104c89700848c70005000000c390|@1666,4169| 1666:S22|50415253455f5452454528292e6d6b436f6e64283329 1667:C2,48|4989c64d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c8970104889580848c7001f000000c39090909090|@1668,4105| 1668:S23|50415253455f5452454528292e6d6b5768696c65283229 1669:C11,848|90909090909090483b65187303ff55484c8b72f852504d8b4e0849b8d0d7edacaa2a00004889c348b86819efacaa2a000048ba787beeacaa2a000090ff15360300004c8b6c24084d8b65f84d8b5c240849ff732849ff733049ff733849ff734049ff73484d8b53204d8b4b184d8b4310498b5b08498b0390ff15020300004989c24d8d7fe84c3b7d107303ff554049c747f8020000004c89f849b9304fefacaa2a00004c8948084c8b04244c89009090ff15d2020000488b7c2408488b77f849524989c0488b5e08488b47f0488b5670ff12488b5c2410488b53f8488b4a084c8b71104d8b2e4c8b61304d8b1c244981fb8900000074054d89daeb034d89ea4983fa5d751a504889c848ba9808eeacaa2a000090ff15760200004989c2eb6c504889cb48b8e03ceeacaa2a000048ba2858eeacaa2a000090ff155a0200004c8b5424184d8b4af84d8b4108498b7810488b37498b5830488b134881fa8900000074054889d1eb034889f14883f95b75204c89c048ba9808eeacaa2a0000909090ff151a0200004989c2eb0fe90a00000049ba01000000000000004d8d7fe84c3b7d107303ff554049c747f8020000004c89f848b938c5eeacaa2a0000488948084c8b7424104c8930ff15da0100004c8b6c24184889c3498b45f0498b55f89090ff124d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fc49bb78a6edacaa2a00004d891c244d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fa49b978a6edacaa2a00004d890a4d8d7fd04c3b7d107303ff554049c747f8050000004d89f84d8950204d896018488b3c2449897810488b742408498970084989004d8d7fe84c3b7d107303ff554049c747f8020000004c89fb4c89430848c703ebffffff488b542418488b4af8534c8b410848bb6080eeacaa2a000048b8590000000000000048ba6864eeacaa2a00009090ff15ee0000004883f8017414488b442418488b542420909090e82dfdffffeb0a48b801000000000000004d8d7fe84c3b7d107303ff554049c747f8020000004d89fe498946084c8b2c244d892e4c8b6424204d8b5c24f849564d8b4b0849b8984fefacaa2a000048bb6080eeacaa2a0000488b44242048ba787beeacaa2a0000ff1576000000488b04244883c430c39090909090|@1673,8191,@1389,@1329,@1390,@1117,@1315,@1117,@1390,@1350,@1389|28,0,@971 41,0,@1614 51,0,@1388 155,0,@1670 267,0,@1115 293,0,@1265 303,0,@1313 373,0,@1115 402,0,0 436,0,@1519 513,0,@617 556,0,@617 670,0,@1400 680,0,44 690,0,@1349 734,0,0 795,0,@1672 805,0,@1400 820,0,@1388 1670:O1|@1671 1671:C2,32|4883f85d750b48b80300000000000000c348b80100000000000000c390909090|@1114,1|8,0,1 19,0,0 1672:S12|456e64206f66206d61746368 1673:S50|50415253455f44454328292e706172736544656328332964656328342965787072657373696f6e2832296d61746368283129 1674:C2,48|4989c64d8d7fe04c3b7d107303ff554049c747f8030000004c89f8488958104c89700848c700fdffffffc39090909090|@1675,4105| 1675:S22|50415253455f5452454528292e6d6b43617365283229 1676:C2,40|4989c64d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89700848c70019000000c390|@1677,4097| 1677:S5|5261697365 1678:S2|466e 1679:S25|50415253455f5452454528292e6d6b416e64616c736f283229 1680:S24|50415253455f5452454528292e6d6b4f72656c7365283229 1681:S28|50415253455f5452454528292e6d6b48616e646c6554726565283229 1682:C2,64|90909090909090483b65187303ff55485250488b52109090ff1248f7c0010000007508488b004883c410c34c8b742408488b0424498b56084883c410ff229090|@1683,8191| 1683:S39|50415253455f44454328292e70617273654465632833296465632834296e6577456e762d283129 1684:C2,64|90909090909090483b65187303ff55485250488b52109090ff1248f7c0010000007508488b004883c410c34c8b742408488b0424498b56084883c410ff229090|@1683,8191| 1685:O1|@1686 1686:C2,32|4883f83f750b48b80300000000000000c348b80100000000000000c390909090|@1114,1|8,0,1 19,0,0 1687:O1|@1688 1688:C2,32|4883f815750b48b80300000000000000c348b80100000000000000c390909090|@1114,1|8,0,1 19,0,0 1689:C2,56|90909090909090483b65187303ff55485250488b52109090ff124883f80175134c8b742408488b0424498b56084883c410ff224883c410c3|@1306,8191| 1690:C2,48|90909090909090483b65187303ff55485250488b52109090ff124c8b742408488b0424498b56084883c410ff22909090|@1691,8191| 1691:S35|50415253455f44454328292e6d6b4c6f63616c426f6479466978456e76283529283129 1692:O1|@1693 1693:C2,48|4989c64d8d7fe84c3b7d107303ff554049c747f8020000004c89f849bd2855efacaa2a00004c89284c897008c3909090|@1704,6145|29,0,@1694 1694:C3,40|90909090909090483b65187303ff554849b8ffffffffffffffff488b5a08ff252c00000090909090|@1696,8191,@1695|18,0,-1 1695:C5,392|90909090909090483b65187303ff55484983f801750c49be0500000000000000eb2e4983f8fd750c49be1100000000000000eb1c4983f8ff750c49be1500000000000000eb0a49be21000000000000004956535049504889da909090ff124883f801750f48b801000000000000004883c420c34c8b284d8b65004983fc1372084983fc1b7702eb084983fc417402eb164c8b0424488b5c2410498b45084883c420e961ffffff4983fc577517498b4508488d542420909090ff15f20000004883c420c34983fc5b7502eb0b4981fcfd0000007402eb6e498b4508488d54242090ff15d20000004883f801750f48b801000000000000004883c420c34c8b184d8b1349b901000000000000004d89d04d23c141f6c0017503ff55704d89c84d2bc24d8d400170f14d8d7fe84c3b7d107303ff554049c747f8020000004c89ff498b7308eb05e927000000488977084c89074d8d7ff04c3b7d107303ff554049c747f8010000004c89f84889384883c420c3488b442408488d5424209090ff153e0000004883c420c390|@1698,8191,@1697,@1697,@1697|24,0,2 42,0,8 60,0,10 72,0,16 102,0,0 238,0,0 259,0,0 1696:S17|496e742e7363616e283129283129283129 1697:C6,432|90909090909090483b65187303ff55484c8b72f84983fe2175705250488b52f0ff124883f801750f48b801000000000000004883c410c34c8b284d8b65004983fc6174274c8b042448bb010000000000000048b80100000000000000488b5424084883c410ff256d0100004c8b5c240849ff7508488b0424498b53f0ff124883f801754e4d8d7fe8eb05e9040100004c3b7d107303ff554049c747f8020000004d89fa4c8b0c244d894a0849c702010000004d8d7ff04c3b7d107303ff554049c747f8010000004c89f84c89104883c418c34c8b104d8b0a4981f9f10000007502eb0b4981f9b10000007402eb6e4d8b420848bb010000000000000048b80100000000000000488b54241090ff15ce0000004883f801754e4d8d7fe84c3b7d107303ff554049c747f8020000004d89f8488b3c244989780849c700010000004d8d7ff04c3b7d107303ff554049c747f8010000004c89f84c8900eb05e90a0000004883c418c34883c418c34c8b44240848bb010000000000000048b80100000000000000488b5424104883c418ff25550000004989c048bb010000000000000048b80100000000000000ff2540000000|@1700,8191,@1701,@1701,@1701,@1699|42,0,0 74,0,0 84,0,0 244,0,0 254,0,0 370,0,0 380,0,0 408,0,0 418,0,0 1698:S11|496e742e7363616e283329 1699:C2,432|90909090909090483b65187303ff554852505349504c89c0488b52f0ff124883f80175634c8b7424104983fe0174494d8d7fe84c3b7d107303ff554049c747f8020000004d89fd4c8b24244d8965084c8b5c24084d895d004d8d7ff04c3b7d107303ff554049c747f8010000004c89f84c89284883c420c348b801000000000000004883c420c34c8b304d8b2e41f6c5017503ff55704983fd617c6d4c8b6424184d8b5c24f841f6c3017503ff55704d89da4983c26070f449524d23d541f6c201495a7503ff55704d3bea7d6f4c8b4c24084d89c84d23c341f6c0017503ff557050524c89ca48d1fa498d43ff48f7ea4c8d40015a5870e64c89c74923fd40f6c7017503ff5570eb05e93f000000498d78ff4903fd70ed40f6c7017503ff55704889fe4883ee6070f44d8b46084889f348b80300000000000000eb05e90c0000004c89e24883c420e9bafeffff4c8b6424104983fc0174484d8d7fe84c3b7d107303ff554049c747f8020000004d89fb4c8b14244d8953084c8b4c24084d890b4d8d7ff04c3b7d107303ff554049c747f8010000004c89f84c89184883c420c348b801000000000000004883c420c390|@1703,8191|122,0,0 306,0,1 418,0,0 1700:S25|496e742e7363616e283329726561645f6e756d626572283129 1701:C2,800|90909090909090483b65187303ff554852505349504c89c0488b52f0ff124883f80175634c8b7424104983fe0174494d8d7fe84c3b7d107303ff554049c747f8020000004d89fd4c8b24244d8965084c8b5c24084d895d004d8d7ff04c3b7d107303ff554049c747f8010000004c89f84c89284883c420c348b801000000000000004883c420c34c8b304d8b2e41f6c5017503ff55704983fd617c6e41f6c5017503ff55704983fd737f644c8b64240849bb21000000000000004d89e24d23d341f6c2017503ff557050524c89e248d1fa498d43ff48f7ea4c8d50015a5870e64d89d14d23cd41f6c1017503ff55704d8d4aff4d03cd70f441f6c1017503ff55704d89c84983e860eb0ae929000000e92400000070e84c89c74d8b46084889fb48b80300000000000000488b5424184883c420e9cffeffff41f6c5017503ff55704981fd830000007c6d41f6c5017503ff55704981fd8d0000007f604c8b64240849bb21000000000000004d89e24d23d341f6c2017503ff557050524c89e248d1fa498d43ff48f7ea4c8d50015a5870e64d89d14d23cd41f6c1017503ff55704d8d4aff4d03cd70f441f6c1017503ff55704d89c8eb0ae93f000000e93a0000004981e88200000070e541f6c0017503ff55704c89c74883c71470f44d8b46084889fb48b80300000000000000488b5424184883c420e90cfeffff41f6c5017503ff55704981fdc30000007c6d41f6c5017503ff55704981fdcd0000007f604c8b64240849bb21000000000000004d89e24d23d341f6c2017503ff557050524c89e248d1fa498d43ff48f7ea4c8d50015a5870e64d89d14d23cd41f6c1017503ff55704d8d4aff4d03cd70f441f6c1017503ff55704d89c8eb0ae93f000000e93a0000004981e8c200000070e541f6c0017503ff55704c89c74883c71470f44d8b46084889fb48b80300000000000000488b5424184883c420e949fdffff4c8b6424104983fc0174484d8d7fe84c3b7d107303ff554049c747f8020000004d89fb4c8b14244d8953084c8b4c24084d890b4d8d7ff04c3b7d107303ff554049c747f8010000004c89f84c89184883c420c348b801000000000000004883c420c3|@1702,8191|122,0,0 178,0,16 290,0,1 355,0,16 485,0,1 550,0,16 680,0,1 787,0,0 1702:S29|496e742e7363616e283329726561645f6865785f646967697473283329 1703:S25|496e742e7363616e283329726561645f646967697473283329 1704:S14|496e742e7363616e283129283129 1705:S11|507265636564656e636520 1706:S37|206e6f7420616c6c6f7765642c206d757374206265206265747765656e203020616e642039 1707:C2,32|90909090909090483b65187303ff55484c8b7018488b42084c89f2ff22909090|@1121,8191| 1708:S8|5661726961626c65 1709:S2|6974 1710:C2,88|4d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fe49c706010000004989c54d8d7fd04c3b7d107303ff554049c747f8050000004c89f84c8970204c894018488958104c89680848c700e3ffffffc390|@1749,6217| 1711:S29|50415253455f44454328292e7061727365446563283329646563283429 1712:C4,296|90909090909090483b65187303ff5548488b42e04c8b70104d8b2e4c8b60304d8b1c244981fb8900000074054d89daeb034d89ea5248bbe830efacaa2a00004c89d09090ff15060100004883f80174704c8b14244d8b42e0498b5ad848b8e830efacaa2a000048bae878eeacaa2a0000ff15e200000050504d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89f949c701010000004989e04989004889e74c894f084d8d7fe84c3b7d107303ff554049c747f802000000eb05e9540000004c89fe488b1c2448891e488b542408488956085648b80100000000000000488b54241890e819ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89f948894108488b04244889014889c84883c420c348b801000000000000004883c408c3|@1713,8191,@1333,@1383|55,0,@1627 94,0,@1627 104,0,@1382 219,0,0 283,0,0 1713:S36|50415253455f44454328292e706172736544656328332964656328342976617273283129 1714:C2,80|4d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fe49c706010000004989c54d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c8970104c89680848c70017000000c390|@1715,6145| 1715:S26|50415253455f5452454528292e6d6b4f70656e54726565283129 1716:C9,640|90909090909090483b65187303ff55484c8b72e04d8b6e104d8b65004d8b5e304d8b134981fa8900000074054d89d1eb034d89e14983f937750c49b90300000000000000eb0a49b90100000000000000525049514c8b4c2410498b51e0488b42104c8b304c8b6a304d8b65004981fc8900000074054d89e3eb034d89f34983fb37751e4889d048ba9808eeacaa2a0000ff1512020000483b65187303ff5548ebb34c8b1c244983fb01743a488b4424084c89ca9090e84dffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fa4989420849c702010000004c89d04883c418c348ff7228495548ff723848ff724048ff72484c8b52204c8b4a184989c0488b5a08488b02909090ff159e0100004989c24d8d7fe84c3b7d107303ff554049c747f8020000004c89f849b98078eeacaa2a00004c8948084c8b4424084c890090ff156e010000488b7c241049524989c0488b5fe0488b8778ffffff488b57c890ff12488b742418488b5ee0488b5310488b0a4c8b73304d8b2e4981fd8900000074054d89eceb034989cc4983fc5b751b504889d848ba9808eeacaa2a00009090ff15160100004989c4eb1e5048b87b0000000000000048ba2858eeacaa2a0000ff15fe0000004989c44c8b642420488b5c2418498b842478ffffff498b5424c0ff124c8b4424084889c3488b04249090ff15d60000004c8b5c2420504d8b43e048bb6080eeacaa2a000048b8070000000000000048ba6864eeacaa2a00009090ff15ae0000004883f8017417488b442420488b542428909090e8c5fdffff4989c2eb0a49ba01000000000000004d8d7fe84c3b7d107303ff554049c747f8020000004d89f94d8951084c8b04244d89014c89c84883c430c390909090|@1718,8191,@1117,@1329,@1390,@1117,@1315,@1717,@1350|60,0,1 72,0,0 136,0,@1115 303,0,@1380 410,0,@1115 434,0,61 444,0,@1313 518,0,@1400 528,0,3 538,0,@1349 585,0,0 1717:C2,40|4d8d7fe04c3b7d107303ff554049c747f8030000004d89fe4d89461049895e084989064c89f0c390|@1719,4169| 1718:S36|50415253455f44454328292e706172736544656328332964656328342976616c42283129 1719:S28|50415253455f5452454528292e6d6b56616c42696e64696e67283329 1720:C5,208|90909090909090483b65187303ff55484d8d7fe84c3b7d107303ff554049c747f8020000004c89f849be58bceeacaa2a00004c8970084c8b6ad84c89284989d4ff15b200000049544c89e290ff15ae0000004c8b1c244d8b53f0504d8b421848bb6080eeacaa2a000048b8070000000000000048ba6864eeacaa2a0000909090ff15820000004883f801740f488b542408e871ffffff4989c1eb0a49b901000000000000004d8d7fe84c3b7d107303ff554049c747f8020000004d89f84d894808488b3c244989384c89c04883c410c3|@1514,8191,@1390,@1721,@1350|42,0,@1507 97,0,@1400 107,0,3 117,0,@1349 157,0,0 1721:C3,256|90909090909090483b65187303ff5548525048b80100000000000000488d542410909090ff15fe0000004d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fe49c706010000004d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fd49bc38efeeacaa2a00004d8965004d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fb49ba78a6edacaa2a00004d89134d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89f949b878a6edacaa2a00004d89014d8d7fd04c3b7d107303ff554049c747f8050000004c89ff4c894f204c8977184c896f10488947084c891f4889f84883c410c3|@1723,8191,@1722|20,0,0 109,0,@1551 152,0,@617 194,0,@617 1722:C10,616|90909090909090483b65187303ff5548488b42f84c8b70e05249ff762849ff763049ff763849ff764049ff76484d8b56204d8b4e184d8b4610498b5e08498b06ff154a0200004c8b2c244989c44d8d7fe84c3b7d107303ff554049c747f8020000004c89f849bb8078eeacaa2a00004c8958084d8b55f04c89109090ff15160200004c8b0c244d8b41f84954498b78e0498bb078ffffff498b58c84989c04889da4889fb4889f090ff12488b4c24084c8b71f84d8b6ee04d8b65104d8b1c244d8b55304d8b0a4981f98900000074054d89c8eb034d89d84983f85b751a504c89e848ba9808eeacaa2a000090ff15ae0100004989c0eb6c504c89eb48b87b0000000000000048ba2858eeacaa2a000090ff15920100004c8b442410498b78f8488b77e0488b5e10488b13488b4e30488b014881f88900000074054989c6eb034989d64983fe5d75204889f048ba9808eeacaa2a0000909090ff15520100004989c0eb0fe90a00000049b801000000000000004c8b7424104d8d7fe84c3b7d107303ff554049c747f8020000004c89f849bd38c5eeacaa2a00004c8968084d8b66f04c8920ff150e0100004c8b5c24104d8b53f84889c3498b8278ffffff498b52c0909090ff124c8b4424084889c3488b04249090ff15e60000004c8b4c24104d8b41f8504d8b40e048bb6080eeacaa2a000048b8590000000000000048ba6864eeacaa2a00009090ff15ba0000004883f801741b48b80100000000000000488b5424189090e8ddfdffff4889c7eb0a48bf01000000000000004d8d7fe84c3b7d107303ff554049c747f8020000004c89fe48897e08488b1c2448891e4889f04883c420c390909090|@1725,8191,@1329,@1390,@1117,@1315,@1117,@1390,@1724,@1350|103,0,@1380 227,0,@1115 253,0,61 263,0,@1313 333,0,@1115 362,0,0 401,0,@1519 490,0,@1400 500,0,44 510,0,@1349 534,0,0 561,0,0 1723:S36|50415253455f44454328292e706172736544656328332964656328342966756e42283129 1724:C2,40|4d8d7fe04c3b7d107303ff554049c747f8030000004d89fe4d89461049895e084989064c89f0c390|@1726,4169| 1725:S47|50415253455f44454328292e706172736544656328332964656328342966756e4228312962696e64696e6773283129 1726:S24|50415253455f5452454528292e6d6b436c61757365283329 1727:C2,48|4989c64d8d7fd84c3b7d107303ff554049c747f8040000004c89f84c894018488958104c89700848c700f3ffffffc390|@1728,4169| 1728:S32|50415253455f5452454528292e6d6b46756e4465636c61726174696f6e283329 1729:C4,248|90909090909090483b65187303ff55484d8d7fe84c3b7d107303ff554049c747f8020000004c89f849be58bceeacaa2a00004c8970084c8b6ad84c89284989d4ff15da0000004d8b5c24f04d8b5424e849546a014d8b0a4d8b4208498b7a1049ba01000000000000004c89ce4989f94889f3498b53209090ff12488b1c24488b53f0504c8b421848bb6080eeacaa2a000048b8070000000000000048ba6864eeacaa2a0000909090ff157a0000004883f801740f488b542408e849ffffff4889c1eb0a48b901000000000000004d8d7fe84c3b7d107303ff554049c747f8020000004c89f8488948084c8b34244c89304883c410c3909090|@1514,8191,@1390,@1350|42,0,@1507 97,0,0 137,0,@1400 147,0,3 157,0,@1349 197,0,0 1730:C2,40|4989c64d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89700848c700e5ffffffc390|@1731,4097| 1731:S15|547970654465636c61726174696f6e 1732:C4,232|90909090909090483b65187303ff55484d8d7fe84c3b7d107303ff554049c747f8020000004c89f849be58bceeacaa2a00004c8970084c8b6ab84c89284989d4ff15ca0000004d8b5c24f049544989c0498b5c24e848b80100000000000000498b533090ff124c8b14244d8b4af0504d8b411848bb6080eeacaa2a000048b8070000000000000048ba6864eeacaa2a0000909090ff157e0000004883f801740f488b542408e85dffffff4989c0eb0a49b801000000000000004d8d7fe84c3b7d107303ff554049c747f8020000004c89ff4c894708488b34244889374889f84883c410c390909090|@1514,8191,@1390,@1350|42,0,@1507 87,0,0 117,0,@1400 127,0,3 137,0,@1349 177,0,0 1733:C4,248|90909090909090483b65187303ff55484d8d7fe84c3b7d107303ff554049c747f8020000004c89f849be58bceeacaa2a00004c8970084c8b6aa84c89284989d4ff15da0000004d8b5c24f04d8b5424e849546a014d8b0a4d8b4208498b7a1049ba01000000000000004c89ce4989f94889f3498b53209090ff12488b1c24488b53f0504c8b421848bb6080eeacaa2a000048b8070000000000000048ba6864eeacaa2a0000909090ff157a0000004883f801740f488b542408e849ffffff4889c1eb0a48b901000000000000004d8d7fe84c3b7d107303ff554049c747f8020000004c89f8488948084c8b34244c89304883c410c3909090|@1514,8191,@1390,@1350|42,0,@1507 97,0,0 137,0,@1400 147,0,3 157,0,@1349 197,0,0 1734:C2,48|4989c64d8d7fd84c3b7d107303ff554049c747f8040000004c89f8488958184c8970104c89400848c70001000000c390|@1735,4169| 1735:S36|50415253455f5452454528292e6d6b416273747970654465636c61726174696f6e283329 1736:C5,208|90909090909090483b65187303ff55484d8d7fe84c3b7d107303ff554049c747f8020000004c89f849be58bceeacaa2a00004c8970084c8b6ad84c89284989d4ff15b200000049544c89e290ff15ae0000004c8b1c244d8b53f0504d8b421848bb6080eeacaa2a000048b8070000000000000048ba6864eeacaa2a0000909090ff15820000004883f801740f488b542408e871ffffff4989c1eb0a49b901000000000000004d8d7fe84c3b7d107303ff554049c747f8020000004d89f84d894808488b3c244989384c89c04883c410c3|@1514,8191,@1390,@1737,@1350|42,0,@1507 97,0,@1400 107,0,3 117,0,@1349 157,0,0 1737:C11,888|90909090909090483b65187303ff55484c8b72f04989c54d8d7fe84c3b7d107303ff554049c747f8020000004c89f8498b5e40488958084c89284889d14d89ecff155a03000051495448ff71e04c8b04244889c348b8e830efacaa2a000048bae878eeacaa2a0000ff153a0300004c8b1c245049ff732849ff733049ff733849ff734049ff73484d8b53204d8b4b184d8b4310498b5b08498b039090ff150e0300004989c0488b5c2408488b04249090ff15020300004c8b5424184d8b42e048bb6080eeacaa2a000048b82d0000000000000048ba6864eeacaa2a0000909090ff15da0200004883f80174714d8d7fe84c3b7d107303ff554049c747f8020000004c89f849b98078eeacaa2a00004c8948084c8b4424104c89009090ff15a6020000488b7c2418488b77e84c8b4610488b5fe048ba487eeeacaa2a0000909090ff158a0200004d8d7ff04c3b7d107303ff554049c747f801000000eb05e95200000049c647ff404c89fb48ba38efeeacaa2a00004889134d8d7fd84c3b7d107303ff554049c747f8040000004c89f949bea00cefacaa2a00004c89711848894110488959084c8b2c244c89294889c84883c420c34c8b4c24184d8b41e048bb6080eeacaa2a000048b85b0000000000000048ba6864eeacaa2a000090ff15f60100004883f80174704c8b4424184d8b40e0488b5c241048b8e830efacaa2a000048bae878eeacaa2a00009090ff15ce0100004d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89ff48be78a6edacaa2a00004889374d8d7ff04c3b7d107303ff554049c747f80100000049c647ff40eb05e9a30000004c89fb48ba38efeeacaa2a00004889134d8d7fd84c3b7d107303ff554049c747f8040000004c89f948897918488959104889410848c701f1ffffff4d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89f849be38efeeacaa2a00004c89304d8d7fd84c3b7d107303ff554049c747f8040000004d89fd49894d1849bce005edacaa2a00004d896510498945084c8b1c244d895d004c89e84883c420c34d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89f848bf38efeeacaa2a00004989384d8d7fd84c3b7d107303ff554049c747f8040000004c89fe48bba00cefacaa2a000048895e1848bae005edacaa2a0000488956104c894608488b0c2448890e4889f04883c420c390909090909090|@1738,8191,@1390,@1383,@1329,@1493,@1350,@1390,@1397,@1350,@1383|86,0,@1627 96,0,@1382 193,0,@1400 203,0,22 213,0,@1349 262,0,@1380 309,0,@1395 364,0,@1551 401,0,@1598 447,0,@1400 457,0,45 467,0,@1349 504,0,@1627 514,0,@1382 561,0,@617 610,0,@1551 695,0,@1551 736,0,@193 799,0,@1551 836,0,@1598 850,0,@193 1738:S48|50415253455f44454328292e7061727365446563283329646563283429657863657074696f6e42696e64696e67283129 1739:C2,40|4989c64d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89700848c7000b000000c390|@1740,4097| 1740:S13|45784465636c61726174696f6e 1741:C2,176|90909090909090483b65187303ff554848f7c001000000740c49be0300000000000000eb084c8b304f8d7436014d8d7fe04c3b7d107303ff554049c747f8030000004d89fd49bcc879efacaa2a00004d8965004d897510498945084c89e84889da909090ff124989c348b801000000000000004c89da9090ff124883f801750b48b80100000000000000c34c8b104d8d7ff04c3b7d107303ff554049c747f8010000004c89f84d8b0a4c8908c3909090|@1744,8191|27,0,1 71,0,@1742 107,0,0 130,0,0 1742:C2,128|4c8b7210493bc6750b48b80100000000000000c34c8b6a0849f7c50100000074054d89eceb184c8d60104d89e349d1eb4f0fb65c1d004f8d5c1b014d89dc4c8d58024d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8958084c89204989c44d8d7ff04c3b7d107303ff554049c747f8010000004c89f84c8920c3|@1743,7685|11,0,0 1743:S29|537472696e674376742e7363616e537472696e67283229726472283129 1744:S23|537472696e674376742e7363616e537472696e67283229 1745:C2,40|4989c64d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89700848c70001000000c390|@1530,4097| 1746:C6,352|90909090909090483b65187303ff5548488b42e04c8b70104d8b2e4c8b60304d8b1c244981fb8900000074054d89daeb034d89ea5248bbe830efacaa2a00004c89d09090ff153e0100004883f80174704c8b142449ff72e04c8b0424498b5ad848b8e830efacaa2a000048bae878eeacaa2a0000ff15160100004c8b0c245049ff712849ff713049ff713849ff714049ff71484d8b51204d8b01498b7908498b7110498b59184989d94c89c24989f04889fb4889d0909090ff15da000000eb05e98c0000004989c0488b5c2408488b0424909090ff15c6000000488b4c2410488b41e84c8b304d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b69b04c8968084c8b24244c89204c89f2ff1248b80100000000000000488b542410e8e1feffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fb498943084c8b14244d89134c89d84883c418c348b801000000000000004883c408c3|@1713,8191,@1333,@1383,@1329,@1493|55,0,@1627 98,0,@1627 108,0,@1382 276,0,0 339,0,0 1747:C2,48|4989c64d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c8970104889580848c70009000000c39090909090|@1748,4105| 1748:S27|50415253455f5452454528292e6d6b446972656374697665283229 1749:S32|50415253455f5452454528292e6d6b56616c4465636c61726174696f6e283329 1750:C6,264|90909090909090483b65187303ff55484c8b7208495649ff762849ff763049ff763849ff764049ff76484d8b56204d8b4e184d8b4610498b5e08498b06909090ff15ea0000004c8b2c2449ff751049ff751849ff752049ff752849ff753049ff753849ff754049ff75484d8b55084d8b4d0049b803000000000000004889c348b8187fefacaa2a0000909090ff15a600000050504989e4495449ba030000000000000049b9030000000000000049b8010000000000000048bb1f4e00000000000048b8e005edacaa2a000090ff156e0000004d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b1c244c89184c8b5424084c8950084883c418ff254400000090909090|@1754,8191,@1329,@1124,@1369,@1358|116,0,1 129,0,@1751 155,0,1 165,0,1 175,0,0 185,0,9999 195,0,@193 1751:O1|@1752 1752:C2,40|90909090909090483b65187303ff55484c8b701848b8887fefacaa2a00004c89f2ff229090909090|@1121,8191|22,0,@1753 1753:S31|467265652074797065207661726961626c6573206e6f7420616c6c6f776564 1754:S36|50415253455f44454328292e7061727365446563283329676c6f62616c456e762d283129 1755:O1|@1756 1756:C2,672|4989c649f7c60100000074214983fe037c204981fe870000007f1c49bd3e80efacaa2a00004f8d6cb5f441ffe5e924020000e91f020000e91a0200009090e92f020000909090e932020000909090e903020000909090e9fb010000909090e9f3010000909090e907020000909090e90a020000909090e9db010000909090e9d3010000909090e9cb010000909090e9ea010000909090e9d7010000909090e9da010000909090e9ab010000909090e9bf010000909090e99b010000909090e9ba010000909090e9b2010000909090e99f010000909090e9a2010000909090e99a010000909090e96b010000909090e97f010000909090e982010000909090e953010000909090e967010000909090e943010000909090e93b010000909090e95a010000909090e952010000909090e923010000909090e937010000909090e913010000909090e93d010000909090e903010000909090e9fb000000909090e9f3000000909090e928010000909090e9e3000000909090e9db000000909090e9d3000000909090e9cb000000909090e9df000000909090e9bb000000909090e9cf000000909090e9ab000000909090e9a3000000909090e9b7000000909090e993000000909090e98b000000909090e983000000909090e997000000909090e973000000909090e987000000909090e963000000909090e95b000000909090e953000000909090e967000000909090e943000000909090e93b000000909090e933000000909090e92b000000909090e93f000000909090e937000000909090e92f000000909090e927000000909090e91f0000009090904883f843750b48b80300000000000000c348b80100000000000000c348b80300000000000000c348b80300000000000000c348b80300000000000000c348b80300000000000000c39090|@1338,6145|29,0,$1756+62 606,0,1 617,0,0 628,0,1 639,0,1 650,0,1 661,0,1 1757:C2,88|4d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fe49c706010000004989c54d8d7fd84c3b7d107303ff554049c747f8040000004c89f84c897018488958104c89680848c7000d000000c39090909090|@1880,6153| 1758:S23|50415253455f44454328292e7061727365446563283329 1759:C14,888|90909090909090483b65187303ff55484c8b72e84d8b6e104d8b65004d8b5e304d8b134981fa8900000074054d89d1eb034d89e14983f97374064983f901750b48b80100000000000000c34c8b62f852504951498b5c24084c89c890ff153e0300004883f8017470488b5c2408488b0424909090ff152e0300004883f801755d4c8b5c24104d8b53e848bb686feeacaa2a0000498b424848bae8d7edacaa2a0000909090ff15060300004883f80174704c8b442410498b78e85748ff772848ff773048ff773848ff774048ff77484c8b57204c8b4f18eb0ae964020000e9690000004c8b4710488b5f08488b07909090ff15c2020000488b342448ff761048ff761848ff762048ff762848ff763048ff763848ff764048ff76484c8b5608eb05e9260000004c8b0e49b801000000000000004889c348b8a087efacaa2a000090ff157a0200004989c1eb0b49b901000000000000005050504c8b5c24184983fb4d75344c8b5424284d8b42a8498b5ae8498b42b04c89d290ff154a0200004989e14989014989e048bf7088efacaa2a000049897808eb6d4983fb4575364c8b5424284d8b42a8498b5ae8498b42b04c89d2909090ff15160200004989e14989014989e048bfd888efacaa2a000049897808eb6e4983fb4375404c8b5424284d8b42a8498b5ae8498b42b04c89d2909090ff15e20100004c8b4c24284d8b41f84889e7eb05e9fc0000004889074889e6498b581048895e08eb6e4983fb29753e4c8b5424284d8b42a8498b5ae8498b42b04c89d290ff15a60100004c8b4c2428eb05e9bf0000004d8b41f84889e74889074889e6498b581048895e08eb6f4c8b5424284d8b4ae849ff712849ff713049ff713849ff714049ff71484d8b51204d8b01498b7908eb05e979000000498b7110498b59184989d94c89c24989f04889fb4889d090ff153e010000488b4c2428504c8b49a84c8b41e848bb0300000000000000488b41b0488b51c0eb05e934000000909090ff12488b1c249090ff150e0100004c8b7424304d8b6ef84c8d642408498904244c8d5c24084d8b55104d8953084883c408488b442408488b5424289090e8f1fcffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89f9498941084c8b04244d89014c89c84883c430c34c8b5c2410498b5be848b8770000000000000048ba2858eeacaa2a00009090ff159200000048b801000000000000004883c418c3909090|@1770,8191,@1333,@1333,@974,@1329,@1124,@1771,@1866,@1767,@1767,@1329,@1757,@1315|66,0,0 139,0,@1361 153,0,@972 298,0,0 311,0,@1760 333,0,0 393,0,@1763 453,0,@1765 698,0,1 844,0,59 854,0,@1313 872,0,0 1760:O1|@1761 1761:C2,40|90909090909090483b65187303ff55484c8b701848b81088efacaa2a00004c89f2ff229090909090|@1525,8191|22,0,@1762 1762:S74|4d4c205374616e6461726420726571756972657320273b27206265747765656e20646966666572656e74206b696e6473206f6620746f702d6c6576656c206465636c61726174696f6e2e 1763:O1|@1764 1764:C2,32|4883f84d750b48b80300000000000000c348b80100000000000000c390909090|@1114,1|8,0,1 19,0,0 1765:O1|@1766 1766:C2,32|4883f845750b48b80300000000000000c348b80100000000000000c390909090|@1114,1|8,0,1 19,0,0 1767:C17,944|90909090909090483b65187303ff5548525053495048ff304989d848bb6080eeacaa2a000048b8430000000000000048ba6864eeacaa2a0000909090ff15960300004883f8017418488d542428909090ff158a0300004883c428ff25880300004c8b44241048bb6080eeacaa2a000048b8290000000000000048ba6864eeacaa2a000090ff15660300004883f801746d4c8b74241049ff762849ff763049ff763849ff764049ff76484d8b56204d8b4e184d8b4610498b5e08498b06ff15360300005050504c8b6c24305050504989c24d8b4d084d8b45104889e348b80100000000000000909090ff15120300004d8d7fe04c3b7d107303ff5540eb05e99802000049c747f8030000004c89ff48bea08defacaa2a0000488937488b5c241048895f104c894f08488d542418488b4c240848890a488d442418488978084c8d7424184d8946104d8d7fe04c3b7d107303ff554049c747f8030000004d89fd4c8b6424184d8965004c8b5c24204d895d084c8b4c24284d894d104c8b442450498b78f84d8d7fe84c3b7d107303ff554049c747f8020000004c89f8488b772048897008488b5c24384889184c89e9909090ff155202000049524989c0488b5c24484889c8488b542458ff15420200004c8b7424484d8b6e104d8b65004d8b5e304d8b134981fa8900000074054d89d1eb034d89e14983f921751a504c89f048ba9808eeacaa2a000090ff150a0200004989c1eb22504c89f348b8f037eeacaa2a000048ba2858eeacaa2a000090ff15ee0100004989c15050504d8d7fe04c3b7d107303ff554049c747f8030000004d89f949b8108eefacaa2a00004d8901488b7c244049897910488b742458498971084889e34c890b4889e2488b4c244848894a084889e04c8b7424504c8970104d8d7fe04c3b7d107303ff554049c747f8030000004d89fd4c8b24244d8965004c8b5c24084d895d084c8b5424104d8955104d8d7fe84c3b7d107303ff554049c747f8020000004c89f849b93853efacaa2a00004c8948084c8b4424604c89004c89efff15320100004989c0488b5c24684889f8488b5424789090ff1522010000488b742468488b5e10488b13488b4e304c8b314981fe8900000074054d89f5eb034989d54983fd15751b504889f048ba9808eeacaa2a00009090ff15ea0000004989c5eb22504889f348b82038eeacaa2a000048ba2858eeacaa2a000090ff15ce0000004989c54c8b4c242849b80300000000000000488b1c24488b4424204881c488000000ff25ae00000048b878a6edacaa2a00004883c428c390909090909090|@1877,8191,@1350,@1876,@1832,@1350,@1329,@1481,@1390,@1855,@1117,@1315,@1390,@1855,@1117,@1315,@1860|29,0,@1400 39,0,33 49,0,@1349 103,0,@1400 113,0,20 123,0,@1349 221,0,0 271,0,@1768 511,0,@1115 537,0,@1213 547,0,@1313 594,0,@1769 729,0,@1687 830,0,@1115 857,0,@1215 867,0,@1313 892,0,1 924,0,@617 1768:C2,56|90909090909090483b65187303ff55485250488b52109090ff124883f80175134c8b742408488b0424498b56084883c410ff224883c410c3|@1306,8191| 1769:C2,48|90909090909090483b65187303ff55485250488b52109090ff124c8b742408488b0424498b56084883c410ff22909090|@1691,8191| 1770:S38|50415253455f44454328292e70617273654465632833297061727365546f7044656373283129 1771:C5,64|90909090909090483b65187303ff554852505349504889d848ba9808eeacaa2a00009090ff153e000000488d54242090ff153a0000004883c420ff2538000000|@1773,8191,@1117,@1774,@1772|26,0,@1115 1772:C2,40|4989c64d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89700848c70005000000c390|@1865,4097| 1773:S36|50415253455f44454328292e706172736544656328332966756e63746f72446563283329 1774:C4,160|90909090909090483b65187303ff55485248b8010000000000000090ff15a60000004c8b3424504d8b46e848bbc090efacaa2a000048b8070000000000000048ba6864eeacaa2a0000909090ff157e0000004883f801740f488b542408e8a5ffffff4989c5eb0a49bd01000000000000004d8d7fe84c3b7d107303ff554049c747f8020000004d89fc4d896c24084c8b1c244d891c244c89e04883c410c39090|@1372,8191,@1777,@1350|19,0,0 45,0,@1775 55,0,3 65,0,@1349 105,0,0 1775:O1|@1776 1776:C2,32|4883f847750b48b80300000000000000c348b80100000000000000c390909090|@1114,1|8,0,1 19,0,0 1777:C31,2000|90909090909090483b65187303ff55484c8b72e85249ff762849ff763049ff763849ff764049ff76484d8b56204d8b4e184d8b4610498b5e08498b06ff15b60700004c8b2c244d8b65f84d8b5c24f84989c24d8d7fe84c3b7d107303ff554049c747f8020000004c89f84d8b4b184c8948084d8b45e04c8900909090ff157e070000488b3c24495248ff77e84c8b04244889c348b84899eeacaa2a000048bae878eeacaa2a000090ff155a070000488b34245048ff762848ff763048ff763848ff764048ff76484c8b56204c8b4e184c8b4610488b5e08488b069090ff152e0700004989c0488b5c2408488b04249090ff1522070000488b5c2418488b53e8488b4a10488b014c8b72304d8b2e4981fd8900000074054d89eceb034989c44983fc69751b4889d048ba9808eeacaa2a0000909090ff15e60600004989c4eb22488b5be848b8510000000000000048ba2858eeacaa2a000090ff15ca0600004989c44c8b6424184d8b5c24f84d8b53f84d8d7fe84c3b7d107303ff554049c747f8020000004c89f84d8b4a284c8948084d8b4424e04c890090ff159206000050505050498b7c24e8488b7710488b1e488b5730488b0a4881f98900000074054989ceeb034989de4983fe6b756248b801000000000000009090ff155a0600004d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fe49c706010000004989e549c74500030000004889e348bab01e600000000000488953084889e14c8971104989e649894618eb6f4c8b364c8b2a4981fd8900000074054c89ebeb034c89f3504889d948bb189aefacaa2a00004889c89090ff15e20500004883f8017474488b4424404c8b0424488b58e8488b40f04c8b742440498b56f89090ff15c20500009090ff15c20500004d8d7ff04c3b7d107303ff5540eb05e91902000049c747f80100000049c647ff404d89fd49c74500010000004c8d64240849c70424030000004c8d5c240849bab01e600000000000eb05e9180000004d8953084c8d4c24084d8969104c8d44240849894018eb704d8d7fe84c3b7d107303ff554049c747f8020000004c89f849bee095eeacaa2a00004c8970084c8b2c244c89289090ff152e0500004c8b64244049ff7424e84c8b04244889c348b84899eeacaa2a000048bae878eeacaa2a000090ff150a0500004c8b1c245049ff732849ff7330eb05e94d01000049ff733849ff734049ff73484d8b53204d8b4b184d8b4310498b5b08498b03909090ff15d60400004989c0488b5c2408488b04249090ff15ca0400004c8b5424504d8b4ae84d8b4110498b38498b7130488b1e4881fb8900000074054889daeb034889fa4883fa5f751b4c89c848ba9808eeacaa2a0000909090ff158e0400004889c2eb224c89cb48b8750000000000000048ba2858eeacaa2a00009090ff15720400004889c24d8d7fe84c3b7d107303ff554049c747f8020000004c89f848baf89aefacaa2a000048895008488b4c241048890890ff15420400004c8b7424504989c0498b5ee8498b46f0498b56f89090ff152e0400004d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fd49c74500010000004c8d64241849c70424030000004c8d5c24184c8b14244d8953084c8d4c24184d8969104c8d442418498940184883c4104883c4084d8d7fd84c3b7d107303ff554049c747f8040000004c89ff488b3424488937488b5c240848895f08488b54241048895710488b4c241848894f18488b4424384c8b70e84d8b6e104d8b65004d8b5e304d8b134981fa8900000074054d89d1eb034d89e14983f96b751b57488b40e848ba9808eeacaa2a000090ff155e0300004989c1eb22574c89f348b8530000000000000048ba2858eeacaa2a000090ff15420300004989c14c8b4c24404d8b41e8498b7810488b37498b5830488b134881fa8900000074054889d1eb034889f14883f965750c48b90300000000000000eb0a48b901000000000000005148bb6080eeacaa2a000048b85f0000000000000048ba6864eeacaa2a0000ff15de0200004883f8017402eb38488b4c24484c8b41e848bb6080eeacaa2a000048b8650000000000000048ba6864eeacaa2a0000909090ff15ae0200004883f8017502eb5d488b4424484c8b70e04d8d7fe84c3b7d107303ff554049c747f8020000004c89f849bd8078eeacaa2a00004c8968084c8930ff15760200004c8b6424484989c0498b5c24e8498b4424f0498b5424f8909090ff155e0200004889c1eb0a48b978a6edacaa2a0000488b4424484c8b70e84d8b6e104d8b65004d8b5e304d8b134981fa8900000074054d89d1eb034d89e14983f95b751b51488b40e848ba9808eeacaa2a000090ff15120200004989c1eb22514c89f348b87b0000000000000048ba2858eeacaa2a000090ff15f60100004989c14c8b4c24504d8b41e0498b59e8498b41f0498b51f89090ff15de010000505050505050504d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89f849c700010000004889e7488b7424484889374889e3488943084889e2488b8c248000000048894a104889e04c8b7424704c8970184989e54c8b6424404d8965204989e34d8943284989e24c8b4c24384d894a304d8d7fc04c3b7d107303ff554049c747f8070000004c89f84c8b04244c8900488b7c240848897808488b74241048897010488b5c241848895818488b54242048895020488b4c2428488948284c8b7424304c8970304881c490000000c39090|@1789,8191,@1329,@1390,@1383,@1329,@1493,@1117,@1315,@1390,@1790,@1333,@1792,@1790,@1390,@1383,@1329,@1493,@1117,@1315,@1390,@1821,@1117,@1315,@1350,@1350,@1390,@1821,@1117,@1315,@1782|149,0,@1433 159,0,@1382 297,0,@1115 325,0,40 335,0,@1313 462,0,0 530,0,I48 587,0,@1778 718,0,I48 783,0,@1426 829,0,@1433 839,0,@1382 985,0,@1115 1012,0,58 1022,0,@1313 1067,0,@1780 1323,0,@1115 1349,0,41 1359,0,@1313 1425,0,1 1437,0,0 1448,0,@1400 1458,0,47 1468,0,@1349 1501,0,@1400 1511,0,50 1521,0,@1349 1581,0,@1380 1641,0,@617 1703,0,@1115 1729,0,61 1739,0,@1313 1778:O1|@1779 1779:C2,152|4883f853750b48b80300000000000000c34883f84b750b48b80300000000000000c34883f843750b48b80300000000000000c34883f817750b48b80300000000000000c34883f83d750b48b80300000000000000c34883f851750b48b80300000000000000c34883f83b750b48b80300000000000000c34883f80f750b48b80300000000000000c348b80100000000000000c39090909090|@1338,1|8,0,1 25,0,1 42,0,1 59,0,1 76,0,1 93,0,1 110,0,1 127,0,1 138,0,0 1780:O1|@1781 1781:C2,32|4883f84b750b48b80300000000000000c348b80100000000000000c390909090|@1114,1|8,0,1 19,0,0 1782:C31,1952|90909090909090483b65187303ff55485253504c8b72f84d8d7fe84c3b7d107303ff554049c747f8020000004c89f84d8b6e384c89680849bcc090efacaa2a00004c8920ff157e07000049504c8b4c241049b820a4efacaa2a0000488b1c2448ba787beeacaa2a0000909090ff155e0700004d8d7fe84c3b7d107303ff554049c747f8020000004c89f849bbe095eeacaa2a00004c8958084c8b14244c891090ff15320700004989c14d8d7fe84c3b7d107303ff554049c747f8020000004c89f849b850a4efacaa2a00004c8940084c89089090ff1506070000504c8b44241848bb6080eeacaa2a000048b8470000000000000048ba6864eeacaa2a00009090ff15e20600004883f8017457488b0424488d542428909090ff15d2060000488b742418488b5e10488b13488b4e304c8b314981fe8900000074054d89f5eb034989d54983fd157520504889f048ba9808eeacaa2a00009090ff159a0600004989c5eb26e927000000504889f348b82038eeacaa2a000048ba2858eeacaa2a0000ff157a0600004989c5488b3c24eb6d4c8b44241848bb6080eeacaa2a000048b8270000000000000048ba6864eeacaa2a00009090ff154e0600004883f8017471488b7c241848ff772848ff773048ff773848ff774048ff77484c8b57204c8b4f184c8b4710488b5f08488b07ff151e060000505050488b742428eb05e9850500005050504889c14889e348b80100000000000000ff15fe0500004d8d7fe04c3b7d107303ff554049c747f803000000eb05e9310200004c89f849beb8a4efacaa2a00004c89304c8b6c24104c8968104c8b66084c8960084c8d5c24184c8b5424084d89134c8d4c2418498941084c8d442418488b7e10498978104d8d7fe04c3b7d107303ff554049c747f8030000004c89fb488b542418488913488b442420488943084c8b7424284c8973104c8b6c24504d8b5df84d8d7fe84c3b7d107303ff554049c747f8020000004c89f84d8b53204c8950084c8b4c24304c89084989d8ff153a0500005149504989c0488b5c2458488b0424488b5424609090ff1526050000488b7c2458488b7710488b1e488b5730488b0a4881f98900000074054989ceeb034989de4983fe21751b504889f848ba9808eeacaa2a00009090ff15ee0400004989c6eb22504889fb48b8f037eeacaa2a000048ba2858eeacaa2a000090ff15d20400004989c64d8d7fe84c3b7d107303ff554049c747f8020000004c89f849be3853efacaa2a00004c8970084c8b6c24484c892890ff15a20400004989c0488b5c2460488b442408488b54246890e851fcffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fc49c744240801000000498904244c8b5c24604d8b53104d8b0a4d8b4330498b384881ff8900000074054889feeb034c89ce4883fe15751a49544c89d848ba9808eeacaa2a0000ff152e0400004889c6eb2249544c89db48b82038eeacaa2a000048ba2858eeacaa2a0000ff15120400004889c64c8b4c241849b80100000000000000488b1c24488b442408909090ff15f60300004889c7eb734d8d7fe84c3b7d107303ff554049c747f8020000004c89f848bf28a5efacaa2a000048897808488b3424488930ff15c60300004c8b4424184889c348b84899eeacaa2a000048bae878eeacaa2a00009090ff15aa030000504c8b44242048bb6080eeacaa2a000048b86900000000000000eb05e9a302000048ba6864eeacaa2a0000909090ff157e0300004883f8017470488b5c2420488b5310488b0a488b43304c8b304981fe8900000074054d89f5eb034989cd4983fd6b756e48b81500000000000000ff15460300004d8d7fd84c3b7d107303ff554049c747f8040000004d89fc49c74424180100000049c74424100100000049bbb01e600000000000eb05e9bd0100004d895c2408498904244d8d7fe04c3b7d107303ff554049c747f8030000004d89fdeb05e9160000004d89651049c745080100000049c74500f3ffffffeb5c4c8b6c24284d8b65f84d8d7fe84c3b7d107303ff554049c747f8020000004c89f84d8b5c24284c8958084c8b5424084c8910909090ff159a0200004c8b4c24204d8b4110498b38498b7130488b1e4881fb89000000740a4889daeb08e9590000004889fa488b4c24284c8b71f850498b5e304889d0ff15620200004883f8017417488b0424488d542438909090ff15520200004989c5eb1e4c8b0424488b5c2428488b442420488b542430909090e8a9f9ffff4989c54883c4084c8b6424204d8b5c24104d8b134d8b4c24304d8b014981f88900000074054c89c7eb034c89d74883ff6b751a49554c89e048ba9808eeacaa2a0000ff15f20100004889c7eb2249554c89e348b8530000000000000048ba2858eeacaa2a0000ff15d60100004889c74d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89ff48c707010000004889fe4d8d7fd84c3b7d107303ff554049c747f8040000004c89ff48897718488b5c240848895f10488b14244889570848c707fdffffffeb504d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89fb48c703010000004d8d7fe04c3b7d107303ff554049c747f8030000004c89ff48895f10488b14244889570848c707f1ffffff5050505050505050504883c4484889f8488d5424309090ff15120100004883c430c39090909090|@1849,8191,@1390,@1389,@1390,@1390,@1350,@1850,@1117,@1315,@1350,@1329,@1481,@1390,@1855,@1117,@1315,@1390,@1117,@1315,@1860,@1390,@1383,@1350,@1852,@1390,@1333,@1850,@1117,@1315,@1848|57,0,@1775 83,0,@1783 97,0,@1388 140,0,@1426 195,0,@1784 226,0,@1400 236,0,35 246,0,@1349 334,0,@1115 366,0,@1215 376,0,@1313 406,0,@1400 416,0,19 426,0,@1349 524,0,0 571,0,@1786 818,0,@1115 845,0,@1213 855,0,@1313 899,0,@1687 1036,0,@1115 1062,0,@1215 1072,0,@1313 1096,0,0 1153,0,@1787 1188,0,@1433 1198,0,@1382 1222,0,@1400 1232,0,52 1249,0,@1349 1316,0,10 1374,0,I48 1688,0,@1115 1714,0,41 1724,0,@1313 1783:S29|737472756374206f722066756e63746f72206170706c69636174696f6e 1784:O1|@1785 1785:C2,32|4883f865750b48b80300000000000000c348b80100000000000000c390909090|@1114,1|8,0,1 19,0,0 1786:C2,56|90909090909090483b65187303ff55485250488b52109090ff124883f80175134c8b742408488b0424498b56084883c410ff224883c410c3|@1306,8191| 1787:O1|@1788 1788:C2,32|4883f869750b48b80300000000000000c348b80100000000000000c390909090|@1114,1|8,0,1 19,0,0 1789:S49|50415253455f44454328292e706172736544656328332966756e63746f72446563283329646f46756e6374446563283129 1790:C2,40|4989c64d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89700848c700f7ffffffc390|@1791,4097| 1791:S6|536967446563 1792:C3,80|90909090909090483b65187303ff554850505050525053495048ff7010488d5c242848b80100000000000000488b52d8ff1248b80100000000000000488d542448909090ff152e0000004883c448c390|@1802,8191,@1793|36,0,0 52,0,0 1793:C39,1768|90909090909090483b65187303ff55484c8b72d84d8b6ef84d8d7fe84c3b7d107303ff554049c747f8020000004c89f8498b5d5848895808488b4ac04889084989d49090ff15c606000049544d8b4c24c849b828afefacaa2a00004889cb48ba787beeacaa2a0000ff15aa0600004c8b1c244d8b53c84d8b4a104d8b01498b7a30488b374881fe8900000074054889f3eb034c89c34883fb0f756f49ff72285749ff723849ff724049ff7248498b4a10498b024d8b72084d8b6a184d8b62204d89e24d89e94989c84c89f390ff154e0600004c8b1c244d8b53d84d8b4af84989c04d8d7fe84c3b7d107303ff554049c747f8020000004c89f8498b796048897808498b73c0488930eb05e9ac00000090ff1512060000498b5bd04d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48b948afefacaa2a000048890a4d8b73c84c8972084d8d7fe04c3b7d107303ff554049c747f8030000004d89fd498955104c8b63084d896508488b134989550049504989c04c89eb48b80300000000000000498b52f0ff12488b1c249090ff159a0500004d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48c7420801000000488902eb6d4883fb3b756c498b4bc848ff712848ff713048ff713848ff714048ff71484c8b51204c8b49184c8b4110488b5908488b01ff15460500004c8b34244d8b6ed84d8b65f84989c34d8d7fe84c3b7d107303ff554049c747f8020000004c89f84d8b5424604c8950084d8b4ec0eb0ae9db030000e9750000004c8908909090ff15020500004c8b0424495350498b40c848ba9808eeacaa2a000090ff15ee040000488b7c241048ff77d0488d542420ff15e20400009090ff15e2040000488b5c241090ff15de0400004d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48c7420801000000488902eb6d4883fb51756c498b4bc848ff712848ff713048ff713848ff714048ff71484c8b51204c8b49184c8b4110488b5908488b01ff158a0400004c8b34244d8b6ed84d8b65f84989c34d8d7fe84c3b7d107303ff554049c747f8020000004c89f84d8b5424604c8950084d8b4ec0eb0ae9eb020000e9750000004c8908909090ff15460400004c8b0424495350498b40c848ba9808eeacaa2a000090ff1532040000488b7c241048ff77d0488d542420ff15260400009090ff1526040000488b5c241090ff15220400004d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48c7420801000000488902eb684883fb3d752e498b43c848ba9808eeacaa2a000090ff15ea030000488b0c2448ff71c8488d54241090ff15de0300004889c2eb714883fb177533498b43c848ba9808eeacaa2a000090ff15c6030000488b0c2448ff71c8488d54241090ff15ba0300004889c2eb67e9040200004883fb437561498b43c848ba9808eeacaa2a0000ff159e030000488b0c2448ff71c8488d54241090ff15920300009090ff1592030000eb05e9c50100004d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48c7420801000000488902eb6ee99b0100004883fb537568498b43c848ba9808eeacaa2a000090ff154e03000048b830b1efacaa2a0000ff1546030000488b0c244c8b49c849b8b0b1efacaa2a0000488b59c048ba787beeacaa2a00009090ff1526030000488b04244c8b70d84d8b6ef84c8b60c04d8d7fe8eb0ae92d010000e9e90000004c3b7d107303ff554049c747f8020000004c89f84d8b5d604c8958084c8920909090ff15e60200004989c24d8d7fe84c3b7d107303ff554049c747f8020000004c89f849b94899eeacaa2a00004c8948084c89109090ff15ba0200004c8b0424498b78c8498b70d04989c04889fb4889f0488b1424488b52d890ff159e0200005048b80100000000000000488d5424109090ff158e0200004d8d7fe84c3b7d107303ff554049c747f8020000004c89f948894108488b04244889014889c8ff156a0200004d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48c7420801000000488902eb3f4883fb4b752e498b43c848ba9808eeacaa2a000090ff1532020000488b0c2448ff71c8488d54241090ff15260200004889c2eb0b48ba01000000000000005050504883c410488b4c2408488b41c84c8b70104d8b2e4c8b60304d8b1c244981fb8900000074054d89daeb034d89ea4983fa7375185248ba9808eeacaa2a00009090ff15d60100004989c2eb0b49ba0100000000000000524c8b5424104d8b4ac84d8b4110498b38498b7130488b1e4881fb8900000074054889daeb034889fa498b4ad8488b41f8488b58584889d0909090ff158e0100004883f801743b48b80100000000000000488b5424109090e851f9ffff4883f8017509488b04244883c418c350488b442408488d542420ff155a0100004883c420c3488b04244883c418c390909090|@1804,8191,@1390,@1389,@1329,@1390,@1757,@1329,@1390,@1117,@1805,@1730,@1757,@1329,@1390,@1117,@1806,@1730,@1757,@1117,@1807,@1117,@1812,@1117,@1819,@1832,@1117,@1390,@1389,@1390,@1390,@1821,@1834,@1836,@1117,@1838,@1117,@1333,@1803|83,0,@1794 96,0,@1388 308,0,@1795 380,0,1 587,0,@1115 823,0,@1115 927,0,@1115 979,0,@1115 1036,0,@1115 1139,0,@1115 1156,0,@1798 1180,0,@1801 1194,0,@1388 1311,0,@1433 1373,0,0 1487,0,@1115 1529,0,0 1594,0,@1115 1617,0,0 1698,0,0 1794:S9|5369676e6174757265 1795:C5,224|90909090909090483b65187303ff55484c8b720850495649ff762849ff763049ff763849ff764049ff76484d8b56204d8b4e184d8b4610498b5e08498b069090ff15c20000005048bb5874eeacaa2a0000488b4424109090ff15b20000004d8d7fe84c3b7d107303ff554049c747f8020000004d89fd49bc78b0efacaa2a00004d896500498945084c8b5c240849ff731049ff731849ff732049ff732849ff733049ff733849ff734049ff73484d8b53084d8b0b49b80300000000000000488b5c24404c89e89090ff154a00000048b878a6edacaa2a00004883c418c3909090|@1797,8191,@1329,@303,@1124|73,0,@1375 120,0,@1796 182,0,1 208,0,@617 1796:C2,32|90909090909090483b65187303ff55484c8b7018488b42084c89f2ff22909090|@1121,8191| 1797:S75|50415253455f44454328292e70617273654465632833297369676e6174757265537065632833297061727365536967456e7472696573283129746869735369672d6e6577656e762d283129 1798:O2|@1433,@1799 1799:O1|@1800 1800:C2,32|4883f849750b48b80300000000000000c348b80100000000000000c390909090|@1114,1|8,0,1 19,0,0 1801:S18|5374617274206f66207369676e6174757265 1802:S39|50415253455f44454328292e70617273654465632833297369676e617475726553706563283329 1803:C2,88|90909090909090483b65187303ff55484883f8017505488b42e0c35248ff30488b40089090e8ddffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b04244889024889d04883c410c3909090|@1847,5| 1804:S57|50415253455f44454328292e70617273654465632833297369676e6174757265537065632833297061727365536967456e7472696573283129 1805:C4,264|90909090909090483b65187303ff55484d8d7fe84c3b7d107303ff554049c747f8020000004c89f849be58bceeacaa2a00004c8970084c8b6ae84c89284989d4ff15ea0000004d8b5c24f84d8b53d84d8b4c24e049546a034d8b42e049ba0100000000000000498b39498b7108498b59104989d94c89c24989f04889fb909090ff12488b0c244c8b71f84d8b6ed8504d8b45e848bb6080eeacaa2a000048b8070000000000000048ba6864eeacaa2a0000909090ff157e0000004883f801740f488b542408e83dffffff4989c4eb0a49bc01000000000000004d8d7fe84c3b7d107303ff554049c747f8020000004d89fb4d8963084c8b14244d89134c89d84883c410c390909090|@1514,8191,@1390,@1350|42,0,@1507 94,0,0 149,0,@1400 159,0,3 169,0,@1349 209,0,0 1806:C4,264|90909090909090483b65187303ff55484d8d7fe84c3b7d107303ff554049c747f8020000004c89f849be58bceeacaa2a00004c8970084c8b6ae84c89284989d4ff15ea0000004d8b5c24f84d8b53d84d8b4c24e049546a034d8b42e049ba0300000000000000498b39498b7108498b59104989d94c89c24989f04889fb909090ff12488b0c244c8b71f84d8b6ed8504d8b45e848bb6080eeacaa2a000048b8070000000000000048ba6864eeacaa2a0000909090ff157e0000004883f801740f488b542408e83dffffff4989c4eb0a49bc01000000000000004d8d7fe84c3b7d107303ff554049c747f8020000004d89fb4d8963084c8b14244d89134c89d84883c410c390909090|@1514,8191,@1390,@1350|42,0,@1507 94,0,1 149,0,@1400 159,0,3 169,0,@1349 209,0,0 1807:C4,160|90909090909090483b65187303ff55485248b8010000000000000090ff15a60000004c8b3424504d8b46f048bb6080eeacaa2a000048b8070000000000000048ba6864eeacaa2a0000909090ff157e0000004883f801740f488b542408e8a5ffffff4989c5eb0a49bd01000000000000004d8d7fe84c3b7d107303ff554049c747f8020000004d89fc4d896c24084c8b1c244d891c244c89e04883c410c39090|@1372,8191,@1808,@1350|19,0,0 45,0,@1400 55,0,3 65,0,@1349 105,0,0 1808:C12,480|90909090909090483b65187303ff5548488b42f84c8b70c85249ff762849ff763049ff763849ff764049ff76484d8b56204d8b4e184d8b4610498b5e08498b06ff15c20100004c8b2c244d8b65f84989c34d8d7fe84c3b7d107303ff554049c747f8020000004c89f849bae095eeacaa2a00004c8950084d8b4c24c04c890890ff158a0100004c8b0424498b78f8495348ff77c84c8b04244889c348b84899eeacaa2a000048bae878eeacaa2a000090ff1562010000488b34245048ff762848ff763048ff763848ff764048ff76484c8b56204c8b4e184c8b4610488b5e08488b069090ff15360100004989c0488b5c2408488b04249090ff152a010000488b5c2418488b53f8488b4ac8488b41104c8b304c8b69304d8b65004981fc8900000074054d89e3eb034d89f34983fb5f751a4889c848ba9808eeacaa2a00009090ff15ea0000004989c3eb224889cb48b8750000000000000048ba2858eeacaa2a00009090ff15ce0000004989c34c8b5c24184d8b53f84d8b4ad84d8b41f84d8d7fe84c3b7d107303ff554049c747f8020000004c89f8498b786848897808498b72c0488930909090ff15920000004d8b42f8498b5ac848ba487eeeacaa2a0000ff15820000004c8b4424104889c3488b04244883c420ff257400000090909090|@1810,8191,@1329,@1390,@1383,@1329,@1493,@1117,@1315,@1390,@1397,@1809|107,0,@1426 157,0,@1433 167,0,@1382 310,0,@1115 336,0,58 346,0,@1313 440,0,@1395 1809:C2,48|4989c64d8d7fd84c3b7d107303ff554049c747f8040000004c89f8488958184c8970104c89400848c70011000000c390|@1811,4169| 1810:S73|50415253455f44454328292e70617273654465632833297369676e6174757265537065632833297061727365536967456e7472696573283129746869735369672d646f56616c283129 1811:S25|535452554354555245535f28292e6d6b56616c536967283329 1812:C4,160|90909090909090483b65187303ff55485248b8010000000000000090ff15a60000004c8b3424504d8b46f048bb6080eeacaa2a000048b8070000000000000048ba6864eeacaa2a0000909090ff157e0000004883f801740f488b542408e8a5ffffff4989c5eb0a49bd01000000000000004d8d7fe84c3b7d107303ff554049c747f8020000004d89fc4d896c24084c8b1c244d891c244c89e04883c410c39090|@1372,8191,@1813,@1350|19,0,0 45,0,@1400 55,0,3 65,0,@1349 105,0,0 1813:C11,456|90909090909090483b65187303ff5548488b42f84c8b70c85249ff762849ff763049ff763849ff764049ff76484d8b56204d8b4e184d8b4610498b5e08498b06ff15aa0100004c8b2c244d8b65f84989c34d8d7fe84c3b7d107303ff554049c747f8020000004c89f849ba08bdefacaa2a00004c8950084d8b4c24c04c890890ff15720100004c8b0424498b78f8495348ff77c84c8b04244889c348b8e830efacaa2a000048bae878eeacaa2a000090ff154a010000488b34245048ff762848ff763048ff763848ff764048ff76484c8b56204c8b4e184c8b4610488b5e08488b069090ff151e0100004989c0488b5c2408488b04249090ff1512010000488b5c2418488b53f84c8b42c848bb6080eeacaa2a000048b82d0000000000000048ba6864eeacaa2a0000909090ff15e60000004883f801746f488b4424184c8b70f84d8b6ed84d8b65f84d8d7fe84c3b7d107303ff554049c747f8020000004c89f84d8b5c24684c8958084d8b56c04c8910909090ff15a60000004c8b4c24184d8b41f8498b78c8498b70b84989f04889fb48ba487eeeacaa2a000090ff15860000004889c1eb0a48b9e005edacaa2a00004c8b4424104889cb488b04244883c420ff256900000090|@1817,8191,@1329,@1390,@1383,@1329,@1493,@1350,@1390,@1397,@1816|107,0,@1814 157,0,@1627 167,0,@1382 269,0,@1400 279,0,22 289,0,@1349 403,0,@1395 425,0,@193 1814:O1|@1815 1815:C2,32|4883f82d750b48b80300000000000000c348b80100000000000000c390909090|@1114,1|8,0,1 19,0,0 1816:C2,48|4989c64d8d7fd84c3b7d107303ff554049c747f8040000004c89f8488958184c8970104c89400848c700ffffffffc390|@1818,4169| 1817:S72|50415253455f44454328292e70617273654465632833297369676e6174757265537065632833297061727365536967456e7472696573283129746869735369672d646f4578283129 1818:S24|535452554354555245535f28292e6d6b4578536967283329 1819:C4,160|90909090909090483b65187303ff55485248b8010000000000000090ff15a60000004c8b3424504d8b46f048bb6080eeacaa2a000048b8070000000000000048ba6864eeacaa2a0000909090ff157e0000004883f801740f488b542408e8a5ffffff4989c5eb0a49bd01000000000000004d8d7fe84c3b7d107303ff554049c747f8020000004d89fc4d896c24084c8b1c244d891c244c89e04883c410c39090|@1372,8191,@1820,@1350|19,0,0 45,0,@1400 55,0,3 65,0,@1349 105,0,0 1820:C10,592|90909090909090483b65187303ff5548488b42f84c8b70c85249ff762849ff763049ff763849ff764049ff76484d8b56204d8b4e184d8b4610498b5e08498b06ff15320200004c8b2c244d8b65f85049ff7424c84c8b042448bb6080eeacaa2a000048b8e830efacaa2a000048bae878eeacaa2a00009090ff15020200004c8b1c245049ff732849ff733049ff733849ff734049ff73484d8b53204d8b4b184d8b4310498b5b08498b039090ff15d60100004989c0488b5c2408488b04249090ff15ca0100004c8b5424184d8b4af84d8b41c8498b7810488b37498b5830488b134881fa8900000074054889d1eb034889f14883f95f751b4c89c048ba9808eeacaa2a0000909090ff158a0100004889c1eb224c89c348b8750000000000000048ba2858eeacaa2a00009090ff156e0100004889c1488b4c2418488b41f84c8b70d84d8b6ef84c8b60c04d8d7fe84c3b7d107303ff554049c747f8020000004c89f84d8b5d684c8958084c8920909090ff15320100004c8b51f84989c0498b5ac8498b42d0498b52d8909090ff151e0100005050505050504d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89f949c701010000004989e0488b7c24404989384889e6488b5c243048895e084889e248b978a6edacaa2a000048894a104989e649c74618010000004989e54d894d204989e449894424284d8d7fc84c3b7d107303ff554049c747f8060000004c89f84c8b1c244c89184c8b5424084c8950084c8b4c24104c8948104c8b4424184c894018488b7c242048897820488b742428488970284883c450c390|@1824,8191,@1329,@1383,@1329,@1493,@1117,@1315,@1390,@1821|90,0,@1400 100,0,@1627 110,0,@1382 253,0,@1115 280,0,58 290,0,@1313 472,0,@617 1821:C19,760|90909090909090483b65187303ff55484989d44989c34989da48b830b1efacaa2a000090ff15f602000049544953495249504d89d149b8b0b1efacaa2a0000488b1c2448ba787beeacaa2a0000909090ff15d20200004c8b44240848bb6080eeacaa2a000048b8490000000000000048ba6864eeacaa2a0000909090ff15ae0200004883f801746f4d8d7fe84c3b7d107303ff554049c747f8020000004c89f849b83853efacaa2a00004c894008488b3c24488938909090ff157a0200004889c64d8d7fe84c3b7d107303ff554049c747f8020000004c89f848bbc0c5efacaa2a0000488958084889309090ff154e0200004889c2eb05e9b80000004d8d7fe84c3b7d107303ff554049c747f8020000004c89f848b91008eeacaa2a000048894808488910909090ff151a0200004989c0488b5c2408488b442410488b542418ff150a0200009090ff150a0200004c8b7424084d8b6e104d8b65004d8b5e304d8b134981fa8900000074054d89d1eb034d89e14983f9157517504c89f048ba9808eeacaa2a000090ff15d2010000eb1e504c89f348b82038eeacaa2a000048ba2858eeacaa2a0000ff15ba0100004c8b0c24eb704c8b4c24084d8b4110498b38498b7130488b1e4881fb8900000074054889daeb034889fa4883fa0375704d8d7fe84c3b7d107303ff554049c747f8020000004c89f848bac0c5efacaa2a000048895008488b0c2448890890ff155e0100004d89c84889c348b84899eeacaa2a0000eb05e97d00000048bae878eeacaa2a000090ff153e0100004c8b7424085049ff762849ff763049ff7638eb05e94800000049ff764049ff76484d8b56204d8b4e184d8b4610498b5e08498b069090ff150a0100004989c0488b5c2410488b04249090ff15fe000000488b04249090ff15fa0000004989c1eb0b49b978a6edacaa2a00005049514c8b44241848bb6080eeacaa2a000048b8550000000000000048ba6864eeacaa2a000090ff15c60000004883f8017417488b0424488d542430909090ff15b60000004883c430c3488b04244883c430c3|@1826,8191,@1390,@1389,@1350,@1390,@1390,@1390,@1792,@1790,@1117,@1315,@1390,@1383,@1329,@1493,@1827,@1350,@1825|27,0,@1798 55,0,@1801 69,0,@1388 93,0,@1400 103,0,36 113,0,@1349 162,0,@1687 219,0,@1822 278,0,@1112 383,0,@1115 406,0,@1215 416,0,@1313 504,0,@1822 538,0,@1433 555,0,@1382 669,0,@617 687,0,@1400 697,0,42 707,0,@1349 1822:O1|@1823 1823:C2,32|4883f855750b48b80300000000000000c348b80100000000000000c390909090|@1114,1|8,0,1 19,0,0 1824:S79|50415253455f44454328292e70617273654465632833297369676e6174757265537065632833297061727365536967456e7472696573283129746869735369672d646f537472756374757265283129 1825:C17,1016|90909090909090483b65187303ff55484c8b72e84d8b6e104d8b65004d8b5e304d8b134981fa8900000074054d89d1eb034d89e14983f93b751d52504c89f048ba9808eeacaa2a0000909090ff15ce0300004989c1eb2252504c89f348b85036eeacaa2a000048ba2858eeacaa2a0000ff15b20300004989c14c8b4c24084d8b41e849ff702849ff703049ff703849ff704049ff70484d8b50204d8b4818498b38498b7008498b58104989d84889f34889f89090ff15760300005050504889c14889e348b80100000000000000909090ff15620300004d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c8b34244c89304c8b6c24084c8968084c8b6424104c8960104c8b5c24204d8b53f8514889c348b80100000000000000498b52c89090ff124c8b4c24284989c04d8d7fe84c3b7d107303ff554049c747f8020000004c89f848bf8078eeacaa2a000048897808498b71e048893090ff15de02000049504d8b41e84889c348b81062eeacaa2a000048bae878eeacaa2a000090ff15c2020000488b5c2430488b53f8504c8b442428488b5c2420488b442418488b52d090ff12488b4c24384c8b71e84d8b6e104d8b65004d8b5e304d8b134981fa8900000074054d89d1eb034d89e14983f95b751a504c89f048ba9808eeacaa2a000090ff15660200004989c1eb22504c89f348b87b0000000000000048ba2858eeacaa2a000090ff154a0200004989c14c8b4c24404d8b41e0498b79e84989f94c89c649b85036eeacaa2a00004889f348b8e07aeeacaa2a000048ba787beeacaa2a0000909090ff1512020000488b5c24404d8d7fe84c3b7d107303ff554049c747f8020000004c89f848bac0c5efacaa2a000048895008488b4be0488908ff15e20100004989c64d8d7fe84c3b7d107303ff554049c747f8020000004c89f849bd58bceeacaa2a00004c8968084c89309090ff15b60100004c8b6424404c8b0424498b5c24e848ba487eeeacaa2a00009090ff159e0100004c8b5424184989c14c8b442408488b5c2410488b442438909090ff15860100004c8b5c2440504d8b43e848bb6080eeacaa2a000048b8550000000000000048ba6864eeacaa2a00009090ff155e0100004883f8017412488b0424488b5424484883c450e9c5fcffff4c8b5424484d8b42e848bb6080eeacaa2a000048b8070000000000000048ba6864eeacaa2a0000909090ff151e0100004883f80174674c8b4c24484d8b41e8498b7810488b37498b5830488b134881fa8900000074054889d1eb034889f14883f93b7510488b04244c89ca4883c450e951fcffff488b0b4881f989000000741048b8d857eeacaa2a0000909090ff555848c70307000000488b0424eb05e9050000004883c450c3488b04244883c450c3909090909090|@1830,8191,@1117,@1315,@1329,@1481,@1390,@1383,@1117,@1315,@1389,@1390,@1390,@1397,@1829,@1350,@1350|65,0,@1115 94,0,@1196 104,0,@1313 197,0,0 278,0,0 328,0,@1380 365,0,@1343 375,0,@1382 475,0,@1115 501,0,61 511,0,@1313 550,0,@1196 563,0,@1386 573,0,@1388 621,0,@1822 675,0,@1507 714,0,@1395 774,0,@1400 784,0,42 794,0,@1349 845,0,@1400 855,0,3 865,0,@1349 964,0,@1311 1826:S40|50415253455f44454328292e706172736544656328332970617273655369676e6174757265283329 1827:C2,40|4989c64d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89700848c700f5ffffffc390|@1828,4097| 1828:S14|5369676e61747572654964656e74 1829:C2,80|4d8d7fd04c3b7d107303ff554049c747f8050000004d89fe4d894e2049895e184d894610498946084d89164d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89700848c700efffffffc390|@1831,4553| 1830:S56|50415253455f44454328292e706172736544656328332970617273655369676e617475726528332967657457686572655479706573283129 1831:S28|535452554354555245535f28292e6d6b576865726554797065283529 1832:C2,40|4989c64d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89700848c7000f000000c390|@1833,4097| 1833:S12|537472756374757265446563 1834:C6,288|90909090909090483b65187303ff5548488b42f84c8b70c84d8b6e104d8b65004d8b5e304d8b134981fa8900000074054d89d1eb034d89e14983f903756d5249564d89f0488b58c048b84899eeacaa2a000048bae878eeacaa2a0000ff15e60000004c8b0c245049ff712849ff713049ff713849ff714049ff71484d8b51204d8b01498b7908498b7110498b59184989d94c89c24989f04889fb4889d0909090ff15aa0000004989c0eb05e961000000488b5c2408488b0424909090ff1596000000488b04249090ff15920000005048b80100000000000000488b542418909090e821ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89f948894108488b04244889014889c84883c420c348b80100000000000000c390909090|@1835,8191,@1383,@1329,@1493,@1827|74,0,@1433 84,0,@1382 209,0,0 275,0,0 1835:S74|50415253455f44454328292e70617273654465632833297369676e6174757265537065632833297061727365536967456e7472696573283129746869735369672d736967696473283129 1836:C2,40|4989c64d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89700848c700fbffffffc390|@1837,4097| 1837:S10|496e636c756465536967 1838:C4,160|90909090909090483b65187303ff55485248b8010000000000000090ff15a60000004c8b3424504d8b46f048bb4899eeacaa2a000048b8070000000000000048ba6864eeacaa2a0000909090ff157e0000004883f801740f488b542408e8a5ffffff4989c5eb0a49bd01000000000000004d8d7fe84c3b7d107303ff554049c747f8020000004d89fc4d896c24084c8b1c244d891c244c89e04883c410c39090|@1372,8191,@1839,@1350|19,0,0 45,0,@1433 55,0,3 65,0,@1349 105,0,0 1839:C13,680|90909090909090483b65187303ff5548488b42f84c8b70c85249ff762849ff763049ff763849ff764049ff76484d8b56204d8b4e184d8b4610498b5e08498b06ff158a0200004c8b2c244d8b65f8504d8b4424c848bb6080eeacaa2a000048b83b0000000000000048ba6864eeacaa2a00009090ff155e0200004c8b5c24084d8b53f84d8b4ad84d8b41f84889c74d8d7fe84c3b7d107303ff554049c747f8020000004c89f8498b707048897008498b5ac0488918909090ff1522020000574d8b42c84889c348b84899eeacaa2a000048bae878eeacaa2a00009090ff1506020000488b542410488b4af84c8b71c84d8b6e104d8b65004d8b5e304d8b134981fa8900000074054d89d1eb034d89e14983f95b751a504c89f048ba9808eeacaa2a000090ff15c60100004989c1eb22504c89f348b87b0000000000000048ba2858eeacaa2a000090ff15aa0100004989c14c8b4c24184d8b41f849ff70c8488d54242890ff15960100004d8d7fe84c3b7d107303ff554049c747f8020000004c89ff48894708488b7424084889374c8b4424184889fb488b44241090ff1566010000488b5c2420488b53f8488b4ac84c8b71104d8b2e4c8b61304d8b1c244981fb8900000074054d89daeb034d89ea4983fa0775295048bb686feeacaa2a0000488b414848bae8d7edacaa2a00009090ff151a0100004883f8017570eb0350eb704c8b5424284d8b4af84d8b41c8495049ff702849ff703049ff703849ff704049ff70484d8b50204d8b4818498b38498b7008498b58104989d84889f34889f8ff15d2000000488b142448ff721048ff721848ff722048ff722848ff723048ff723848ff724048ff7248eb0ae92b000000e9260000004c8b52084c8b0a49b803000000000000004889c348b8e0d3efacaa2a0000ff1586000000eb0150488b4424084883c438c390|@1844,8191,@1329,@1350,@1390,@1383,@1117,@1315,@1845,@1843,@974,@1329,@1124|86,0,@1400 96,0,29 106,0,@1349 200,0,@1433 210,0,@1382 283,0,@1115 309,0,61 319,0,@1313 472,0,@1361 486,0,@972 639,0,1 652,0,@1840 1840:O1|@1841 1841:C2,40|90909090909090483b65187303ff55484c8b701848b850d4efacaa2a00004c89f2ff229090909090|@1121,8191|22,0,@1842 1842:S42|73686172696e67202e2e2e20616e64202e2e2e206973206e6f7420616c6c6f77656420696e204d4c3937 1843:C2,48|4989c64d8d7fd84c3b7d107303ff554049c747f8040000004c89f8488958184c8970104c89400848c700f9ffffffc390|@1846,4169| 1844:S77|50415253455f44454328292e70617273654465632833297369676e6174757265537065632833297061727365536967456e7472696573283129746869735369672d646f53686172696e67283129 1845:C5,248|90909090909090483b65187303ff55484c8b72f84d8b6ef8498b5dd8488b43f84c8b60704d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8960084d8b65c04c89204989d39090ff15ce000000498b5bf8488b53f849534c8b42c84889c348b84899eeacaa2a000048bae878eeacaa2a000090ff15aa000000488b0c24504c8b41d848bb1062eeacaa2a000048b85b0000000000000048ba6864eeacaa2a0000909090ff15820000004883f801740c488b542408e849ffffffeb0a48b801000000000000004d8d7fe84c3b7d107303ff554049c747f8020000004d89fe498946084c8b2c244d892e4c89f04883c410c3909090|@1372,8191,@1390,@1383,@1350|101,0,@1433 111,0,@1382 137,0,@1343 147,0,45 157,0,@1349 194,0,0 1846:S26|535452554354555245535f28292e6d6b53686172696e67283329 1847:S15|4c6973742e40283229617070283129 1848:C8,264|90909090909090483b65187303ff554852504c8b42f048bb6080eeacaa2a000048b85f0000000000000048ba6864eeacaa2a0000ff15f60000004883f80174444c8b7424084d8b46d8498b5ef0498b46e8498b56f8909090ff15da00000049b801000000000000004889c3488b042490ff15ca000000488b5424084883c410e983ffffff4c8b7424084d8b46f048bb6080eeacaa2a000048b8650000000000000048ba6864eeacaa2a000090ff15960000004883f80174444c8b6c24084d8b45d8498b5df0498b45e8498b55f8909090ff157a00000049b803000000000000004889c3488b042490ff156a000000488b5424084883c410e90bffffff488b04244883c410c3909090|@1863,8191,@1350,@1821,@1862,@1350,@1821,@1862|24,0,@1400 34,0,47 44,0,@1349 96,0,0 143,0,@1400 153,0,50 163,0,@1349 216,0,1 1849:S35|50415253455f44454328292e706172736544656328332973747275637456616c283329 1850:C6,400|90909090909090483b65187303ff55485050504c8b72e85050504989d24989c14d8b4608498b7e104889e348b80100000000000000909090ff157a0100004d8d7fe04c3b7d107303ff554049c747f8030000004c89fb48ba80daefacaa2a0000488913488b442410488943104c8943084c8d7424184c8b6c24084d892e4c8d64241849895c24084c8d5c241849897b104d8d7fe04c3b7d107303ff554049c747f8030000004d89f8488b7c2418498938488b5c242049895808488b542428498950104d8d7fe84c3b7d107303ff554049c747f8020000004c89f849be3853efacaa2a00004c8970084c890890ff15ce00000049524d89c54989c0498b5af04c89e8498b52f8909090ff15ba0000005048b81500000000000000909090ff15ae0000004d8d7fd84c3b7d107303ff554049c747f8040000004d89fc49c74424180100000049c74424100100000049bbb01e6000000000004d895c2408498904244d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c8960104c8b14244c89500848c700f3ffffff4883c440c390|@1854,8191,@1481,@1390,@1855,@1852|45,0,0 88,0,@1851 220,0,@1687 273,0,10 334,0,I48 1851:C2,56|90909090909090483b65187303ff55485250488b52109090ff124883f80175134c8b742408488b0424498b56084883c410ff224883c410c3|@1306,8191| 1852:C4,472|90909090909090483b65187303ff55485048ff750849be1edcefacaa2a000049566a09488965084d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fd49c7450001000000a8017503ff55704989c44983c40270f449b8010000000000000048bb81000000000000004c89e048ba7015600000000000909090ff124c8b5c24184c89184d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fa4989024d8d7fe84c3b7d107303ff554049c747f8020000004d89f949b8d89eedacaa2a00004d89014d8959084d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89ff4c890f4d8d7fd84c3b7d107303ff554049c747f8040000004c89f84c8950184c8968104889780848c700ffffffff48ff742410488f45084883c420c39090488b304883fe09756d5048bbffffffffffffffff488b44240890ff15b20000004889c348b810ddefacaa2a000090ff15a60000004d8d7fe04c3b7d107303ff554049c747f8030000004c89fb4889431048ba280aedacaa2a00004889530848b9f8e36cadaa2a000048890b4889d8909090ff5558eb05e91e00000048b80100000000000000eb124889c348b801000000000000004883c408c3ff555848b8010000000000000090909090|@1859,8191,@305,@303|23,0,$1852+302 94,0,0 104,0,64 117,0,I11 196,0,@555 314,0,-1 339,0,@1853 384,0,@215 398,0,@7377 427,0,0 442,0,0 460,0,0 1853:S16|486173685461626c652e686173683a20 1854:S47|50415253455f44454328292e706172736544656328332973747275637456616c283329737472756374456e64283129 1855:C3,48|90909090909090483b65187303ff5548535250495048b80100000000000000488d542420ff152e0000004883c420c390|@1857,8191,@1856|23,0,0 1856:C9,608|90909090909090483b65187303ff55484c8b72f04d8b6ef84d8d7fe84c3b7d107303ff554049c747f8020000004c89f8498b5d4848895808488b4ae04889084989d49090ff153e020000498b5c24f8488b53104c8b324c8b6b304d8b5d004981fb8900000074054d89daeb034d89f24983fa73752c49544889d848ba9808eeacaa2a0000ff150602000048b80100000000000000488b14244883c408e966ffffff4c8b124d8b4d004981f98900000074054d89c8eb034d89d0498b7c24f0488b77f8495450488b5e404c89c0ff15c60100004883f8017467488b5c24084c8b0424488b53f8488b4be84889d34889c84c8b742408498b56f0ff15a20100005048b80100000000000000488b542410909090e8f1feffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fd498945084c8b24244d8965004c89e8eb05e9050000004883c418c3488b5c2408488b53f8488b4a10488b014c8b72304d8b2e4981fd8900000074054d89eceb034989c448bbe8e5eeacaa2a00004c89e09090ff15220100004883f80174704c8b6424084d8b5c24f849ff732849ff733049ff733849ff734049ff73484d8b53204d8b4b184d8b4310498b5b08498b03909090ff15ea0000004c8b5424084d8b4af0504d8b41c04c8b4c24084c89c74d8b42f848bb0300000000000000498b42e84889fa909090ff12488b1c24eb05e94c000000909090ff15ae0000005048b80100000000000000488b542418909090e8e5fdffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fe48894608488b1c2448891e4889f04883c420c348b801000000000000004883c410c390909090|@1858,8191,@1390,@1117,@1333,@1767,@1333,@1329,@1757|124,0,@1115 140,0,0 257,0,0 371,0,@1541 482,0,1 525,0,0 591,0,0 1857:S32|50415253455f44454328292e7061727365446563283329737472446563283329 1858:S42|50415253455f44454328292e706172736544656328332973747244656328332967657444656373283129 1859:S21|486173685461626c652e686173684d616b65283129 1860:C2,56|4989c64d8d7fd04c3b7d107303ff554049c747f8050000004c89f84c8940204c8948184c8970104889580848c70007000000c39090909090|@1861,4297| 1861:S27|535452554354555245535f28292e6d6b4c6f63616c646563283429 1862:C2,48|4989c64d8d7fd84c3b7d107303ff554049c747f8040000004c89f84c894018488958104c89700848c70009000000c390|@1864,4169| 1863:S51|50415253455f44454328292e706172736544656328332973747275637456616c283329646f436f6e73747261696e7473283129 1864:S32|535452554354555245535f28292e6d6b536967436f6e73747261696e74283329 1865:S10|46756e63746f72446563 1866:C5,64|90909090909090483b65187303ff554852505349504889d848ba9808eeacaa2a00009090ff153e000000488d54242090ff153a0000004883c420ff2538000000|@1868,8191,@1117,@1869,@1867|26,0,@1115 1867:C2,40|4989c64d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89700848c7000b000000c390|@1875,4097| 1868:S38|50415253455f44454328292e70617273654465632833297369676e6174757265446563283329 1869:C4,160|90909090909090483b65187303ff55485248b8010000000000000090ff15a60000004c8b3424504d8b46e848bb6080eeacaa2a000048b8070000000000000048ba6864eeacaa2a0000909090ff157e0000004883f801740f488b542408e8a5ffffff4989c5eb0a49bd01000000000000004d8d7fe84c3b7d107303ff554049c747f8020000004d89fc4d896c24084c8b1c244d891c244c89e04883c410c39090|@1372,8191,@1870,@1350|19,0,0 45,0,@1400 55,0,3 65,0,@1349 105,0,0 1870:C10,544|90909090909090483b65187303ff55484c8b72e85249ff762849ff763049ff763849ff764049ff76484d8b56204d8b4e184d8b4610498b5e08498b06ff15060200004c8b2c245049ff75e84c8b042448bb6080eeacaa2a000048b8e830efacaa2a000048bae878eeacaa2a0000909090ff15da0100004c8b24245049ff74242849ff74243049ff74243849ff74244049ff7424484d8b5424204d8b4c24184d8b442410498b5c2408498b0424ff15a60100004989c0488b5c2408488b04249090ff159a0100004c8b5c24184d8b53e84d8b4a104d8b01498b7a30488b374881fe8900000074054889f3eb034c89c34883fb5b751b4c89d048ba9808eeacaa2a0000909090ff155e0100004889c3eb224c89d348b87b0000000000000048ba2858eeacaa2a00009090ff15420100004889c3488b5c2418488b53f8488b4af84d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b71504c8970084c8b6be04c8928909090ff150a0100004c8b6424184989c0498b5c24e8498b4424f0498b5424f8909090ff15f2000000505050504d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fb49ba90e7efacaa2a00004d89134989e14c8b4424304d89014889e7488b742420488977084889e34c895b104889e2488942184d8d7fd84c3b7d107303ff554049c747f8040000004c89f8488b0c244889084c8b7424084c8970084c8b6c24104c8968104c8b6424184c8960184883c440c3|@1874,8191,@1329,@1383,@1329,@1493,@1117,@1315,@1390,@1821|81,0,@1400 91,0,@1627 101,0,@1382 249,0,@1115 276,0,61 286,0,@1313 433,0,@1871 1871:O4|@1873,@1872,0,0 1872:S9|554e444546494e4544 1873:O3|0,@554,@433 1874:S49|50415253455f44454328292e70617273654465632833297369676e6174757265446563283329646f536967446563283129 1875:S12|5369676e6174757265446563 1876:C4,160|90909090909090483b65187303ff55485248b8010000000000000090ff15a60000004c8b3424504d8b46e848bbc090efacaa2a000048b8070000000000000048ba6864eeacaa2a0000909090ff157e0000004883f801740f488b542408e8a5ffffff4989c5eb0a49bd01000000000000004d8d7fe84c3b7d107303ff554049c747f8020000004d89fc4d896c24084c8b1c244d891c244c89e04883c410c39090|@1372,8191,@1878,@1350|19,0,0 45,0,@1775 55,0,3 65,0,@1349 105,0,0 1877:S38|50415253455f44454328292e7061727365446563283329737472756374757265446563283329 1878:C14,856|90909090909090483b65187303ff55484c8b72e85249ff762849ff763049ff763849ff764049ff76484d8b56204d8b4e184d8b4610498b5e08498b06ff153e0300004c8b2c244d8b65f84d8b5c24f84989c24d8d7fe84c3b7d107303ff554049c747f8020000004c89f84d8b4b184c8948084d8b45e04c8900909090ff1506030000488b3c24495248ff77e84c8b04244889c348b84899eeacaa2a000048bae878eeacaa2a000090ff15e2020000488b34245048ff762848ff763048ff763848ff764048ff76484c8b56204c8b4e184c8b4610488b5e08488b069090ff15b60200004989c0488b5c2408488b04249090ff15aa020000488b5c2418488b53e8488b4a10488b014c8b72304d8b2e4981fd8900000074054d89eceb034989c44983fc65750c49bc0300000000000000eb0a49bc010000000000000049544989d048bb6080eeacaa2a000048b85f0000000000000048ba6864eeacaa2a0000909090ff15420200004883f8017402eb384c8b6424204d8b4424e848bb6080eeacaa2a000048b8650000000000000048ba6864eeacaa2a00009090ff15120200004883f8017502eb554c8b5c24204d8d7fe84c3b7d107303ff554049c747f8020000004c89f849ba8078eeacaa2a00004c8950084d8b4be04c8908ff15da0100004989c0498b5be8498b43f0498b53f8909090ff15ca0100004989c4eb0a49bc78a6edacaa2a00004c8b5c24204d8b53e84d8b4a104d8b01498b7a30488b374881fe8900000074054889f3eb034c89c34883fb5b751c49544c89d048ba9808eeacaa2a00009090ff157e0100004889c3eb2249544c89d348b87b0000000000000048ba2858eeacaa2a0000ff15620100004889c3488b5c24284c8b43e0488b53e8488b4bf04889d34889c84c8b742428498b56f8909090ff153e0100005050505050504d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fd49c74500010000004989e44c8b5c24504d891c244989e24c8b4c24404d894a084989e0498940104889e7488b742438488977184889e34c896b204889e2488b4c243048894a284d8d7fc84c3b7d107303ff554049c747f8060000004c89f84c8b34244c89304c8b6c24084c8968084c8b6424104c8960104c8b5c24184c8958184c8b5424204c8950204c8b4c24284c8948284883c460c390909090|@1879,8191,@1329,@1390,@1383,@1329,@1493,@1350,@1350,@1390,@1821,@1117,@1315,@1782|149,0,@1433 159,0,@1382 294,0,1 306,0,0 321,0,@1400 331,0,47 341,0,@1349 378,0,@1400 388,0,50 398,0,@1349 453,0,@1380 509,0,@617 570,0,@1115 598,0,61 608,0,@1313 1879:S49|50415253455f44454328292e7061727365446563283329737472756374757265446563283329646f537472446563283129 1880:S27|535452554354555245535f28292e6d6b546f704c6576656c283229 1881:O3|@1337,@1883,@1882 1882:O3|@1337,@1884,@1541 1883:O3|@1337,@1763,@1765 1884:O3|@1337,@1886,@1885 1885:O1|@1888 1886:O1|@1887 1887:C2,32|4883f843750b48b80300000000000000c348b80100000000000000c390909090|@1114,1|8,0,1 19,0,0 1888:C2,32|4883f829750b48b80300000000000000c348b80100000000000000c390909090|@1114,1|8,0,1 19,0,0 1889:O3|@1337,@1890,@1380 1890:O3|@1337,@1426,@1784 1891:O3|@1337,@1624,@1687 1892:O3|@1337,@1473,@1474 1893:O3|@1337,@1541,@1886 1894:O3|@1337,@1433,@1895 1895:O1|@1896 1896:C2,32|4883f827750b48b80300000000000000c348b80100000000000000c390909090|@1114,1|8,0,1 19,0,0 1897:O3|@1337,@1898,@1886 1898:O3|@1337,@1112,@1541 1899:O3|@1337,@1687,@1507 1900:O3|@1337,@1778,@1112 1901:O3|@1337,@1778,@1687 1902:O3|@1337,@1901,@1507 1903:O3|@1337,@1904,@1507 1904:O3|@1337,@1473,@1380 1905:O3|@1337,@1505,@1685 1906:O3|@1337,@1814,@1380 1907:O3|@1337,@1908,@1642 1908:O1|@1909 1909:C2,32|4883f813750b48b80300000000000000c348b80100000000000000c390909090|@1114,1|8,0,1 19,0,0 1910:O3|@1337,@1911,@1642 1911:O1|@1912 1912:C2,32|4883f839750b48b80300000000000000c348b80100000000000000c390909090|@1114,1|8,0,1 19,0,0 1913:O3|@1337,@1814,@1614 1914:O3|@1337,@1654,@1426 1915:O3|@1337,@1474,@1916 1916:O1|@1917 1917:C2,32|4883f86f750b48b80300000000000000c348b80100000000000000c390909090|@1114,1|8,0,1 19,0,0 1918:O3|@1337,@1473,@1112 1919:O3|@1337,@1918,@1474 1920:O3|@1337,@1112,@1687 1921:O3|@1337,@1426,@1567 1922:O3|@1337,@1433,@1545 1923:O3|@1337,@1814,@1519 1924:C2,56|90909090909090483b65187303ff55485250488b52109090ff124883f80175134c8b742408488b0424498b56084883c410ff224883c410c3|@1306,8191| 1925:C2,56|90909090909090483b65187303ff55485250488b52109090ff124883f80175134c8b742408488b0424498b56084883c410ff224883c410c3|@1306,8191| 1926:C2,56|90909090909090483b65187303ff55485250488b52109090ff124883f80175134c8b742408488b0424498b56084883c410ff224883c410c3|@1306,8191| 1927:C2,56|90909090909090483b65187303ff55485250488b52109090ff124883f80175134c8b742408488b0424498b56084883c410ff224883c410c3|@1306,8191| 1928:C2,56|90909090909090483b65187303ff55485250488b52109090ff124883f80175134c8b742408488b0424498b56084883c410ff224883c410c3|@1306,8191| 1929:O2|@1930,@1871 1930:C4,160|90909090909090483b65187303ff554853524d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fe49c706ffffffff504950495648ff732848ff733048ff733848ff734048ff73484c8b53204c8b4b184c8b43104c8b2b4c8b63084c89e34c89e8ff155a00000049bab01e6000000000004989c14c8b442408488b1c24488b442410488d5424289090ff153a0000004883c428c39090909090|@1938,8191,@1329,@1931|112,0,I48 1931:C3,144|90909090909090483b65187303ff5548524d8d7fe84c3b7d107303ff554049c747f8020000004d89fe49bd38f8efacaa2a00004d892e49895e084950495249565349514883f801750f48b801000000000000004883c430c348ff7008488b00488d542438ff154e000000488b04244883c408483b65187303ff5548ebc648b801000000000000004883c438c390909090|@1940,8191,@1939|43,0,@1932 75,0,0 127,0,0 1932:C4,88|90909090909090483b65187303ff5548488b42084c8b3041f6c6017503ff55704983fe017d1048b80100000000000000ff254a00000041f6c6017503ff55704d89f54983c50270f44c89284c89f0ff253400000090909090|@1934,6149,@1935,@1933|40,0,0 1933:C2,40|4989c64d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89700848c70001000000c390|@1937,4097| 1934:S56|535452554354555245535f28292e70617373325374727563747328332970617373325374727563742835296d616b65547970654964283129 1935:C2,80|4d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89f848c700010000004989c64d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89700848c700ffffffffc39090909090|@1936,4097| 1936:S27|5354525543545f56414c5328292e6d616b65467265654964283129 1937:S5|426f756e64 1938:S29|535452554354555245535f28292e706173733253747275637473283329 1939:C7,128|90909090909090483b65187303ff55484c8b304983fe0f750a488b5808ff25850000004983fe05750a488b5808ff257d0000004983fe0b750a488b5808ff25750000004983fe07750e488b5808488b4010ff25690000004983fe0d75124c8b4010488b5818488b4008ff255900000048b80100000000000000c3909090909090|@1951,8191,@1952,@5168,@5196,@5203,@1941|113,0,0 1940:S43|535452554354555245535f28292e7061737332537472756374732833297061737332537472756374283529 1941:C3,352|90909090909090483b65187303ff55484c8b72f04d8d7fe04c3b7d107303ff554049c747f8030000004d89fd49bc40fdefacaa2a00004d8965004d89751049895d084d8d7fe04c3b7d107303ff554049c747f8030000004d89fc49bb30ffefacaa2a00004d891c244d8974241049895c24084d8d7fe04c3b7d107303ff554049c747f8030000004d89fb49bab000f0acaa2a00004d89134d89731049895b084d8d7fe04c3b7d107303ff554049c747f8030000004d89fa49b93802f0acaa2a00004d890a4d89721049895a084d8d7f984c3b7d107303ff554049c747f80c0000004c89fb4d8b4e584c894b58498b7e5048897b504c8953484d8b56404c895340498b763848897338498b4e3048894b30498b4e2848894b284d8b56204c8953204c8963184c896b104d8b6e084c896b084c891b4c8b62f848ff72e84d89c24d8b4c24f84989d8488b5ae09090ff153600000048b80100000000000000c3909090|@5216,8191,@2845|46,0,@1942 92,0,@1945 140,0,@1947 185,0,@1949 340,0,0 1942:C3,200|90909090909090483b65187303ff55484c8b72105248ff7008498b5610909090ff124c8b6c24084d8b65084d8b1c244c8b14244d8d7fd04c3b7d107303ff554049c747f8050000004d89f94d8b42184d894120498b7a1049897918498b720849897110498b1a4989590849c701fdffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48c74208010000004c890a4883fa0175054c89d9eb16524c89d8488d542418ff15420000004889c14883c40849890c2448b801000000000000004883c410c3|@1944,8191,@1943|187,0,0 1943:C2,88|90909090909090483b65187303ff55484883f8017505488b42e8c35248ff30488b40089090e8ddffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b04244889024889d04883c410c3909090|@1847,5| 1944:S70|535452554354555245535f28292e7061737332537472756374732833297061737332537472756374283529706173733253696e676c65746f6e2833296e6577456e762d283129 1945:C3,176|90909090909090483b65187303ff55484c8b72105248ff7008498b5618909090ff124c8b6c24084d8b65084d8b1c244d8d7fe84c3b7d107303ff554049c747f8020000004d89fa4c8b0c244d894a0849c702030000004d8d7fe84c3b7d107303ff554049c747f8020000004d89f849c74008010000004d89104983f80175054c89dfeb1949504c89d8488d5424189090ff15420000004889c74883c40849893c2448b801000000000000004883c410c3|@1944,8191,@1946|163,0,0 1946:C2,88|90909090909090483b65187303ff55484883f8017505488b42e8c35248ff30488b40089090e8ddffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b04244889024889d04883c410c3909090|@1847,5| 1947:C3,184|90909090909090483b65187303ff55484c8b72105250498b16909090ff124c8b6c24084d8b65084d8b1c244c8b14244d8d7fe04c3b7d107303ff554049c747f8030000004d89f94d8b42084d894110498b3a4989790849c701010000004d8d7fe84c3b7d107303ff554049c747f8020000004c89fe48c74608010000004c890e4883fe0175054c89dbeb16564c89d8488d542418ff15460000004889c34883c40849891c2448b801000000000000004883c410c390909090|@1944,8191,@1948|167,0,0 1948:C2,88|90909090909090483b65187303ff55484883f8017505488b42e8c35248ff30488b40089090e8ddffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b04244889024889d04883c410c3909090|@1847,5| 1949:C3,176|90909090909090483b65187303ff55484c8b72105248ff7008498b5648909090ff124c8b6c24084d8b65084d8b1c244d8d7fe84c3b7d107303ff554049c747f8020000004d89fa4c8b0c244d894a0849c702ffffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89f849c74008010000004d89104983f80175054c89dfeb1949504c89d8488d5424189090ff15420000004889c74883c40849893c2448b801000000000000004883c410c3|@1944,8191,@1950|163,0,0 1950:C2,88|90909090909090483b65187303ff55484883f8017505488b42e8c35248ff30488b40089090e8ddffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b04244889024889d04883c410c3909090|@1847,5| 1951:S54|535452554354555245535f28292e70617373325374727563747328332970617373325374727563742835297061737332446563283129 1952:C4,208|90909090909090483b65187303ff55484c8b72f84d8d7fd84c3b7d107303ff554049c747f8040000004d89fd49bc1805f0acaa2a00004d8965004d8b66f84d896518498945104c8b5ad04d895d085050504989d24989c14989d84889e34c89e8ff1592000000495249514983f8017502eb3f498b3849ff700848ff77284c8b57204c8b4f184c8b4710488b5f08488b07488d542438909090ff15620000004c8b04244883c408483b65187303ff5548ebb9488b7c2408488b77f0488b4648488b5424104883c428ff2290909090909090|@2327,8191,@2328,@2151|46,0,@1953 1953:C5,104|90909090909090483b65187303ff554848ff721848ff721048ff72084889c348b8d005f0acaa2a0000909090ff155e00000048bbf005f0acaa2a0000ff15560000004989c24c8b0c244c8b44240848bb0300000000000000488b4424104883c418ff253900000090|@2149,8191,@303,@303,@1956|33,0,@1954 52,0,@1955 80,0,1 1954:S10|53747275637475726520 1955:S43|2068617320616c7265616479206265656e20626f756e6420696e2074686973206465636c61726174696f6e 1956:C2,144|90909090909090483b65187303ff55484883fb01740c49bef806f0acaa2a0000eb0a49bed007f0acaa2a00004d8d7fd84c3b7d107303ff554049c747f8040000004d89fd49bca808f0acaa2a00004d896500498945184d8955104d8945084989c34d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c8968104c8948084c89184c89f2ff2290909090909090|@2150,8191|24,0,@1957 36,0,@1960 70,0,@1963 1957:O1|@1958 1958:C3,96|90909090909090483b65187303ff55484c8b304d8b6e104c8b24244c892c2449ff761849ff762049ff762849ff763049ff763849ff764049ff76484d8b56084d8b0e49b80300000000000000488b5808488b40104954ff252c00000090909090|@1959,8191,@1124|68,0,1 1959:S19|4c45585f28292e6572726f7250726f63283129 1960:O1|@1961 1961:C3,96|90909090909090483b65187303ff55484c8b304d8b6e104c8b24244c892c2449ff761849ff762049ff762849ff763049ff763849ff764049ff76484d8b56084d8b0e49b80100000000000000488b5808488b40104954ff252c00000090909090|@1962,8191,@1124|68,0,0 1962:S21|4c45585f28292e7761726e696e6750726f63283129 1963:C4,312|90909090909090483b65187303ff55484c8b7218525048bb280af0acaa2a0000498b464848bae8d7edacaa2a00009090ff152a0100004c8b2c245048b8103dedacaa2a0000498b5530909090ff124c8b6424084c8b5c2410498b4310498b542418909090ff124c8b54240848b8f83cedacaa2a0000498b12ff124c8b4c240848b8103dedacaa2a0000498b5130909090ff124c8b44240848b8d00bf0acaa2a0000498b5018909090ff12488b7c240848b8b027edacaa2a0000488b17ff12488b7424104d8d7fe84c3b7d107303ff554049c747f8020000004c89fb48c7430801000000488b56084889134c8b4424084889d9488b1c244889c8909090ff1566000000488b4424084c8b701048b801000000000000004c89f2ff124c8b6c240848b80100000000000000498b55104883c418ff229090909090|@2147,8191,@974,@1972|24,0,@1964 38,0,@972 61,0,@268 109,0,@267 129,0,@268 153,0,@1971 177,0,@257 269,0,0 289,0,0 1964:O3|@1966,@1968,@1965 1965:O2|@1970,@7449 1966:O2|@1967,@7449 1967:C2,48|4c8b304c8b6a084d3bf5751648b80300000000000000c348b80100000000000000c348b80100000000000000c3909090|@966,6149|14,0,1 25,0,0 36,0,0 1968:O2|@1969,@7449 1969:C2,48|4989c64d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c89701048c740088b0000004c8b72084c8930c390|@966,4101| 1970:C2,56|4c8b304c8b6a084d3bf57510488b4010c348b80100000000000000c348b8b0d7edacaa2a000090ff555848b8010000000000000090909090|@966,6149|19,0,0 30,0,@970 44,0,0 1971:S10|466f756e64206e656172 1972:C2,176|90909090909090483b65187303ff55484d8d7fe84c3b7d107303ff554049c747f8020000004d89fe49bdd80cf0acaa2a00004d892e4d8946084d8d7fe04c3b7d107303ff554049c747f8030000004d89fd49bc580ff0acaa2a00004d8965004d8975104d8945084d8d7fe84c3b7d107303ff554049c747f8020000004d89f849bc009cf0acaa2a00004d89204d8968084989d94d89c349b8b01e6000000000004889c34c89d84c89f2ff229090909090|@2148,8191|42,0,@1973 83,0,@1975 129,0,@2146 152,0,I48 1973:C2,520|90909090909090483b65187303ff55484883fb01750b48b80100000000000000c34c8b73084983fe01754d41f6c1017503ff55704983f9017f144c8b6a0848b8d85deeacaa2a0000498b5518ff224989c54d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8948084c8b234c89204c89eaff2241f6c1017503ff55704983f9017f144c8b6a0848b8d85deeacaa2a0000498b5518ff224989d54989c44c8b1b48bb59000000000000004c89c048bab01860000000000090ff124883f801740c49ba0300000000000000eb1d48bb77000000000000004c89c048bab01860000000000090ff124989c24c89d74883f702498b75084955495449504951495649535748b8103dedacaa2a0000488b563090ff124d8d7fe84c3b7d107303ff554049c747f8020000004c89f8488b5c241848895808488b542408488910488b542428ff12488b4c2430488b41084c8b304d8d7fe84c3b7d107303ff554049c747f8020000004c89f848c74008010000004c8b2c244c89284c89f2ff124c8b6424304d8b5c2408488b442420498b5318909090ff124c8b5424304d8b4a0848b80100000000000000498b5110909090ff124c8b442430498b780848b8b027edacaa2a0000488b17ff12488b74241840f6c6017503ff55704889f34883eb0270f44989d94c8b442420488b5c2410488b442428488b5424304883c438e906feffff90909090909090|@1974,8191|24,0,0 64,0,@1319 141,0,@1319 166,0,44 179,0,I24 198,0,1 210,0,59 223,0,I24 263,0,@268 417,0,0 445,0,@257 1974:S45|535452554354555245535f28292e646973706c617953747275637473283329646973706c61794c697374283429 1975:C15,4072|90909090909090483b65187303ff5548f6c3017503ff55704883fb017f144c8b720848b8d85deeacaa2a0000498b5618ff224c8b3049f7c601000000741e4983feef7c1d4983fe117f1c49bdc60ff0acaa2a00004f8d6cb54441ffe5e99d000000e998000000e993000000909090e9440a0000909090e991010000909090e998010000909090e979030000909090e980030000909090e918090000909090e9b80d0000909090e969070000909090e95c050000909090e943000000909090e91f080000909090e950060000909090e9b40b0000909090e96e0e0000909090e928020000909090e93c0e0000909090e920000000909090e9080400009090904c8b620848b8e01ff0acaa2a0000498b542418ff224d8d7fe04c3b7d107303ff554049c747f8030000004d89fc49bbf81ff0acaa2a00004d891c2449895424104c8b52084d89542408525348ff7008495448b8f83cedacaa2a0000498b5230909090ff124c8b4c24184d8b410848b88036eeacaa2a0000498b5018909090ff12488b7c2418488b770848b8b027edacaa2a0000488b16ff124d8d7fe84c3b7d107303ff554049c747f8020000004c89fb48ba3822f0acaa2a0000488913488b0c2448894b08488b4424184c8b4c241049b87837eeacaa2a00004989de488b5c24084c8b68104c89f04c89ea909090ff124c8b6424184d8b5c240848b80100000000000000498b53104883c420ff224c8b6208488b4008498b542418ff224c8b6208525348ff700848b8583cedacaa2a0000498b542430ff124c8b5c24104d8b530848b82036eeacaa2a0000498b5218909090ff124c8b4c24104d8b410848b8b027edacaa2a0000498b10ff124d8d7fe84c3b7d107303ff554049c747f8020000004c89ff48bee022f0acaa2a0000488937488b5c241048895f084c8b4c240849b8b01e600000000000488b5310488b1c244889f89090ff12488b4c2410488b41084c8b3048b8b027edacaa2a00004c89f290ff124c8b6c24104d8b650848b82038eeacaa2a0000498b5424189090ff124c8b5c24104d8b530848b80100000000000000498b52104883c418ff224d8d7fe04c3b7d107303ff554049c747f8030000004d89fc49bb7823f0acaa2a00004d891c2449895424104c8b52084d89542408525348ff7008495448b8f83cedacaa2a0000498b5230909090ff124c8b4c24184d8b410848b8e839eeacaa2a0000498b5018909090ff12488b7c2418488b770848b8b027edacaa2a0000488b16ff124d8d7fe84c3b7d107303ff554049c747f8020000004c89fb48bac824f0acaa2a0000488913488b0c2448894b08488b4424184c8b4c241049b87837eeacaa2a00004989de488b5c24084c8b68104c89f04c89ea909090ff124c8b6424184d8b5c240848b80100000000000000498b53104883c420ff224c8b6208488b4008498b542418ff224c8b6208525348ff700848b8583cedacaa2a0000498b542430ff124c8b5c24104d8b530848b8c03beeacaa2a0000498b5218909090ff124c8b4c24104d8b410848b8b027edacaa2a0000498b10ff124d8d7fe84c3b7d107303ff554049c747f8020000004c89ff48be7025f0acaa2a0000488937488b5c241048895f084c8b4c240849b8b01e600000000000488b5310488b1c244889f89090ff12488b4c2410488b41084c8b3048b8b027edacaa2a00004c89f290ff124c8b6c24104d8b650848b82038eeacaa2a0000498b5424189090ff124c8b5c24104d8b530848b80100000000000000498b52104883c418ff224c8b6208525348ff701048ff701848b8103dedacaa2a0000498b542430ff124c8b5c24184d8b530848b8803aeeacaa2a0000498b5218909090ff124c8b4c24184d8b410848b8583cedacaa2a0000498b10ff12488b7c2418488b770848ff761848bbb821f0acaa2a0000488b4424109090ff15960a0000488b14249090ff12488b5c2420488b530848b8b027edacaa2a0000488b12ff12488b4c2418f6c1017503ff55704889c84883e80270f44c8b7424204989c34d8b560848b801000000000000009090ff154a0a00004d89d149ba03000000000000004d89c84989c14c89db488b442408909090ff152e0a0000488b7c2420488b770848b80100000000000000488b56104883c428ff224c8b6208525348ff701048ff701848b8103dedacaa2a0000498b542430ff124c8b5c24184d8b530848b8583beeacaa2a0000498b5218909090ff124c8b4c24184d8b410848b8583cedacaa2a0000498b10ff12488b7c2418488b770848ff761848bbb821f0acaa2a0000488b4424109090ff15a2090000488b14249090ff12488b5c2420488b530848b8b027edacaa2a0000488b12ff12488b4c2418f6c1017503ff55704889c84883e80270f44c8b7424204989c34d8b560848b801000000000000009090ff15560900004d89d149ba03000000000000004d89c84989c14c89db488b442408909090ff153a090000488b7c2420488b770848b80100000000000000488b56104883c428ff224d8d7fe04c3b7d107303ff554049c747f8030000004d89fc49bbc825f0acaa2a00004d891c2449895424104c8b52084d89542408525348ff7008495448b8f83cedacaa2a0000498b5230909090ff124c8b4c24184d8b410848b8283beeacaa2a0000498b5018909090ff12488b7c2418488b770848b8b027edacaa2a0000488b16ff124d8d7fe84c3b7d107303ff554049c747f8020000004c89fb48ba9028f0acaa2a0000488913488b0c2448894b08488b4424184c8b4c241049b87837eeacaa2a00004989de488b5c24084c8b68104c89f04c89ea909090ff124c8b6424184d8b5c240848b80100000000000000498b53104883c420ff224c8b6208525348ff700848ff701048b8b027edacaa2a0000498b542430909090ff124c8b5c24184d8b530849ff721848bb5100000000000000488b4424089090ff15e6070000488b14249090ff124c8b4c24204d8b410848b8103dedacaa2a0000498b10ff12488b5c2418488b442410488b542420e879f7ffff488b7c2420488b770848b8103dedacaa2a0000488b16ff12488b5c2420488b530848b85300000000000000488b5218909090ff12488b4c2420488b41084c8b701048b801000000000000004c89f24883c428ff224c8b6208525348ff700848ff701848b8b027edacaa2a0000498b54243090ff1248bbb01e600000000000488b44240848bab01860000000000090ff124883f8017402eb484c8b5c24184d8b530849ff721848bbb821f0acaa2a0000488b4424109090ff15fe060000488b14249090ff124c8b4c24204d8b410848b83829f0acaa2a0000498b10ff124883c408488b7c241040f6c7017503ff55704889fe4883ee0270f44889f3488b0424488b542418e871f6ffff488b5c2418488b530848b80100000000000000488b52104883c420ff224c8b6208525348ff701048ff701848b8f83cedacaa2a0000498b542430ff124c8b5c24184d8b530848b8f035eeacaa2a0000498b5218909090ff124c8b4c24184d8b410848b8b027edacaa2a0000498b10ff12488b7c24084883ff017502eb33488b742418488b5e0848b85036eeacaa2a0000488b53189090ff12488b542418488b4a0848b8b027edacaa2a0000488b11ff12488b4424184d8d7fe84c3b7d107303ff554049c747f8020000004d89fe49bd5029f0acaa2a00004d892e4c8b60084d8966084c8b4c241049b87b00000000000000488b1c244c8b58104c89f04c89da909090ff124c8b5424184d8b4a0848b80100000000000000498b51104883c420ff224c8b60084c8b5a08525349ff74240849ff74241049ff74241849ff74242048b8f83cedacaa2a0000498b533090ff12488b5c2420488b442418488b542428e80df5ffff4c8b5424284d8b4a0848b8b027edacaa2a0000498b11ff124c8b442428498b780848b8903beeacaa2a0000488b5718909090ff12488b742428488b5e0848b8b027edacaa2a0000488b13ff12488b542428488b4a0848b85036eeacaa2a0000488b5118909090ff12488b4424284c8b700848b8b027edacaa2a0000498b16ff124c8b6c24284d8b5d0848b80100000000000000909090ff15ba04000049ba03000000000000004d89d94989c0488b5c2420488b442408ff15a20400004c8b5424284d8b4a08488b442410498b5118ff124c8b442428498b780848b8b027edacaa2a0000488b17ff12488b742428488b5e0848b87b00000000000000488b5318909090ff12488b542428488b4a0848b8b027edacaa2a0000488b11ff12488b442420a8017503ff55704989c64983ee0270f44c8b6c24284d89f34d8b550848b80100000000000000909090ff15160400004d89d149ba03000000000000004d89c84989c14c89db488b0424ff15fe030000488b7c2428488b770848b80100000000000000488b56104883c430ff224c8b6208525348ff700848ff701048ff702048b8f83cedacaa2a0000498b542430ff124c8b5c24204d8b53084c8b0c244983f901740c48b8203ceeacaa2a0000eb0a48b8403deeacaa2a0000498b521890ff124c8b442420498b780848b8b027edacaa2a0000488b17ff12488b74241840f6c6017503ff55704889f34883eb0270f44d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48b9e829f0acaa2a000048890a488b442420488942084989d949b87700000000000000488b5c24084c8b70104889d04c89f290ff124c8b6c24204d8b650848b8b027edacaa2a0000498b1424909090ff124c8b5c24204d8b530848b8f037eeacaa2a0000498b5218909090ff124c8b4c24204d8b410848b8b027edacaa2a0000498b10ff12488b7c241840f6c7017503ff55704889fe4883ee0270f44d8d7fe84c3b7d107303ff554049c747f8020000004c89fb48ba402af0acaa2a0000488913488b4c242048894b084989f149b877000000000000004889d8488b5c2410488b5110ff124c8b7424204d8b6e0848b8b027edacaa2a0000498b5500909090ff124c8b6424204d8b5c240848b82038eeacaa2a0000498b53189090ff124c8b5424204d8b4a0848b80100000000000000498b51104883c428ff224c8b6208525348ff700848b82828f0acaa2a0000498b542430ff124c8b5c24104d8b530848b8703deeacaa2a0000498b5218909090ff124c8b4c24104d8b410848b8b027edacaa2a0000498b10ff12488b7c240840f6c7017503ff55704889fe4883ee0270f44d8d7fe84c3b7d107303ff554049c747f8020000004c89fb48ba982af0acaa2a0000488913488b4c241048894b084989f149b8b01e6000000000004889d8488b1c24488b511090ff124c8b7424104d8b6e0848b80100000000000000498b55104883c418ff22f6c3017503ff55704989dc4983ec0270f44c8b42084c89e3488b4008ff2527010000f6c3017503ff55704989dc4983ec0270f4525348ff701048ff70184c89e3488b40089090e895f0ffff4c8b5c24184d8b53084c8b0c244983f901740c48b8a021f0acaa2a0000eb0a48b8b821f0acaa2a0000498b521890ff124c8b442418498b780848b8b027edacaa2a0000488b17ff12488b74241040f6c6017503ff55704889f34883eb0270f4488b442408488b5424184883c420e923f0ffff90909090|@2133,8191,@303,@2017,@2013,@303,@2017,@2013,@303,@303,@2017,@2093,@2017,@2013,@2002|36,0,@1319 76,0,$1975+110 260,0,@1976 301,0,@1977 337,0,@267 365,0,@1198 393,0,@257 432,0,@1982 463,0,@1208 506,0,0 551,0,@261 577,0,@1194 605,0,@257 644,0,@1984 671,0,I48 708,0,@257 733,0,@1215 761,0,0 805,0,@1986 841,0,@267 869,0,@1234 897,0,@257 936,0,@1988 967,0,@1208 1010,0,0 1055,0,@261 1081,0,@1253 1109,0,@257 1148,0,@1990 1175,0,I48 1212,0,@257 1237,0,@1215 1265,0,0 1299,0,@268 1325,0,@1240 1353,0,@261 1381,0,@1979 1421,0,@257 1470,0,0 1491,0,1 1533,0,0 1567,0,@268 1593,0,@1249 1621,0,@261 1649,0,@1979 1689,0,@257 1738,0,0 1759,0,1 1801,0,0 1845,0,@1991 1881,0,@267 1909,0,@1247 1937,0,@257 1976,0,@1994 2007,0,@1208 2050,0,0 2084,0,@257 2117,0,40 2157,0,@268 2201,0,@268 2225,0,41 2257,0,0 2290,0,@257 2308,0,I48 2323,0,I24 2357,0,@1979 2397,0,@1996 2465,0,0 2499,0,@267 2525,0,@1192 2553,0,@257 2590,0,@1196 2617,0,@257 2661,0,@1997 2687,0,61 2725,0,0 2775,0,@267 2821,0,@257 2845,0,@1251 2873,0,@257 2897,0,@1196 2925,0,@257 2949,0,0 2968,0,1 3029,0,@257 3053,0,61 3081,0,@257 3129,0,0 3151,0,1 3189,0,0 3227,0,@267 3263,0,@1257 3275,0,@1269 3301,0,@257 3363,0,@1999 3388,0,59 3425,0,@257 3453,0,@1213 3481,0,@257 3543,0,@2000 3568,0,59 3601,0,@257 3630,0,@1215 3657,0,0 3687,0,@1992 3713,0,@1271 3741,0,@257 3803,0,@2001 3828,0,I48 3861,0,0 3975,0,@1978 3987,0,@1979 4013,0,@257 1976:S5|3c6261643e 1977:C2,368|90909090909090483b65187303ff55484c8b7208525348ff700848ff701048ff701848ff702848b8f83cedacaa2a0000498b5630ff124c8b6c24284d8b6508488b442418498b542418909090ff124c8b1c244d8b134983fa017502eb6d4c8b4c24284d8b4108488b7c24084883ff01740c48b8a021f0acaa2a0000eb0a48b8b821f0acaa2a0000498b501890ff12488b742428488b5e0848b8b027edacaa2a0000488b13ff12488b542420f6c2017503ff55704889d14883e90270f4488b4424284889cb4c8b7010eb05e90b000000488b04244c89f29090ff124c8b6c24104d8b65004983fc017502eb5f4c8b5c24284d8b530848b8d021f0acaa2a0000498b52189090ff124c8b4c24284d8b410848b8b027edacaa2a0000498b10ff12488b7c242040f6c7017503ff55704889fe4883ee0270f4488b5c2428488b53104889f3488b4424109090ff12488b4c2428488b41084c8b701048b801000000000000004c89f24883c430ff22909090909090|@1981,8191|40,0,@267 115,0,@1978 127,0,@1979 153,0,@257 246,0,@1980 273,0,@257 345,0,0 1978:S3|203a3e 1979:S2|203a 1980:S2|203d 1981:S61|535452554354555245535f28292e646973706c617953747275637473283329646973706c6179283229646973706c617953747275637442696e64283229 1982:C2,32|90909090909090483b65187303ff5548488b5808488b00488b5208ff22909090|@1983,8191| 1983:S61|535452554354555245535f28292e646973706c617953747275637473283329646973706c6179283229646973706c617953747275637442696e64283129 1984:C2,32|90909090909090483b65187303ff5548488b5808488b00488b5208ff22909090|@1985,8191| 1985:S41|535452554354555245535f28292e646973706c617953747275637473283329646973706c6179283129 1986:C3,192|90909090909090483b65187303ff55484c8b7208525348ff700848ff701848b8f83cedacaa2a0000498b5630ff124c8b6c24184d8b650849ff74241848bbd021f0acaa2a0000488b44241090ff1596000000488b14249090ff124c8b5c24204d8b530848b8b027edacaa2a0000498b12ff124c8b4c241841f6c1017503ff55704d89c84983e80270f4488b7c24204c89c3488b442408488b57109090ff12488b742420488b5e0848b80100000000000000488b53104883c428ff229090909090|@1987,8191,@303|32,0,@267 62,0,@1980 101,0,@257 169,0,0 1987:S58|535452554354555245535f28292e646973706c617953747275637473283329646973706c6179283229646973706c617953696742696e64283229 1988:C2,32|90909090909090483b65187303ff5548488b5808488b00488b5208ff22909090|@1989,8191| 1989:S58|535452554354555245535f28292e646973706c617953747275637473283329646973706c6179283229646973706c617953696742696e64283129 1990:C2,32|90909090909090483b65187303ff5548488b5808488b00488b5208ff22909090|@1985,8191| 1991:C3,544|90909090909090483b65187303ff55484c8b7208525348ff3048ff700848ff701848ff702048ff703048b8f83cedacaa2a0000498b563090ff124c8b6c24304d8b650849ff74241848bb5100000000000000488b44241890ff15ea010000488b14249090ff124c8b5c24384d8b530848b8b027edacaa2a0000498b12ff124c8b4c24384d8b410848b82828f0acaa2a0000498b5030909090ff12488b7c243040f6c7017503ff55704889fe4883ee0270f4488b5c2438488b53104889f3488b4424289090ff12488b4c2438488b41084c8b701048b801000000000000004c89f2ff124c8b6c24384d8b650848b85300000000000000498b5424189090ff124c8b5c24084d8b134983fa01746e4c8b4c24384d8b4108488b7c24104883ff01740c48b8a021f0acaa2a0000eb0a48b8b821f0acaa2a0000498b50189090ff12488b742438488b5e0848b8b027edacaa2a0000488b13ff12488b542430f6c2017503ff55704889d14883e90270f4488b4424384889cb4c8b7010eb05e90b000000488b4424084c89f290ff124c8b4c24384d8b410848b8b027edacaa2a0000498b10ff12488b7c2438488b770848b87b00000000000000488b5618909090ff12488b5c2438488b530848b8b027edacaa2a0000488b12ff12488b4c2430f6c1017503ff55704889c84883e80270f44c8b7424384889c3488b442420498b5610909090ff124c8b6c24384d8b650848b80100000000000000498b5424104883c440ff22|@1993,8191,@303|43,0,@267 74,0,40 113,0,@257 137,0,@1992 213,0,0 237,0,41 290,0,@1978 302,0,@1979 329,0,@257 405,0,@257 429,0,61 457,0,@257 525,0,0 1992:O2|3,1 1993:S60|535452554354555245535f28292e646973706c617953747275637473283329646973706c6179283229646973706c617946756e637442696e64283229 1994:C2,32|90909090909090483b65187303ff5548488b5808488b00488b5208ff22909090|@1995,8191| 1995:S60|535452554354555245535f28292e646973706c617953747275637473283329646973706c6179283229646973706c617946756e637442696e64283129 1996:O2|1,2 1997:C2,32|90909090909090483b65187303ff55484c8b7208488b00498b5618ff22909090|@1998,8191| 1998:S44|535452554354555245535f28292e646973706c617953747275637473283329646973706c6179283229283129 1999:C2,32|90909090909090483b65187303ff5548488b5808488b00488b5208ff22909090|@1985,8191| 2000:C2,32|90909090909090483b65187303ff5548488b5808488b00488b5208ff22909090|@1985,8191| 2001:C2,32|90909090909090483b65187303ff5548488b5808488b00488b5208ff22909090|@1985,8191| 2002:C13,7264|90909090909090483b65187303ff55484d8d7fe84c3b7d107303ff554049c747f8020000004d89fe49bde047f0acaa2a00004d892e4d8946084d8d7fe84c3b7d107303ff554049c747f8020000004d89fd49bc684af0acaa2a00004d89650049bcf84af0acaa2a00004d8965084d8d7fe84c3b7d107303ff554049c747f8020000004d89fc49bb084bf0acaa2a00004d891c244d89742408f6c3017503ff55704883fb017f1048b8d85deeacaa2a0000498b5018ff224c8b1049f7c201000000741e4983fae17c1d4983fa1f7f1c49b9e22bf0acaa2a00004f8d4c917c41ffe1e90d010000e908010000e903010000909090e9140c0000909090e9a3050000909090e9880d0000909090e9281b0000909090e990190000909090e9780a0000909090e9e5000000909090e9a0090000909090e9cb000000909090e960060000909090e96c120000909090e9a3000000909090e95c0f0000909090e99f080000909090e944170000909090e970180000909090e92c100000909090e92f010000909090e9f4020000909090e9cf0d0000909090e9ef120000909090e988130000909090e9c00a0000909090e9f8140000909090e9b8190000909090e97c070000909090e9540b0000909090e9d0060000909090e94c140000909090e900040000909090e9140b0000909090e9c115000090909048b8c084f0acaa2a0000498b5018ff22488b4008498b5018ff22488b7810488b4018ff156e1a00004989fe48bba00aefacaa2a000048bab018600000000000909090ff124883f801745b4d8d7fe84c3b7d107303ff554049c747f8020000004d89fc49bbd884f0acaa2a00004d895c24084d8934244d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89600848c700450000004950ff15fe1900004989c5eb054d89f549504c8b24244c89e8498b5424184883c408ff2253495048ff700848ff701048b8103dedacaa2a0000498b503090ff124c8b442408498b384883ff0374064883fff1752a488b74241840f6c6017503ff55704889f34883eb0270f44c8b442410488b4424089090e801fdffffeb71488b74241048b85100000000000000488b561890ff12488b5c241048b8103dedacaa2a0000488b13ff12488b542418f6c2017503ff55704889d14883e90270f44c8b4424104889cb488b442408e8adfcffff488b4424104c8b3048b8103dedacaa2a00004c89f290ff124c8b6c2410eb05e91000000048b85300000000000000498b5518ff124c8b64241048b8103dedacaa2a0000498b1424909090ff124c8b1c244d8b134983fa1b752d4c8b4c241841f6c1017503ff55704d89c84983e80270f44c89c74c8b4424104889fb4c89d890e829fcffffeb6d4c8b4c241048b85100000000000000498b511890ff124c8b44241048b8103dedacaa2a0000498b10ff12488b7c241840f6c7017503ff55704889fe4883ee0270f44c8b4424104889f3488b0424e8d5fbffff488b5c241048b8103dedacaa2a0000488b13ff12488b542410eb05e91000000048b85300000000000000488b5218ff12488b4c241048b80100000000000000488b51104883c420ff2253495048ff700848ff701048ff701848b8103dedacaa2a0000498b5030ff124c8b44241848b89035eeacaa2a0000498b5018909090ff12488b7c241848b8b027edacaa2a0000488b17ff12488b74242040f6c6017503ff55704889f34883eb0270f44c8b442418488b4424109090e819fbffff488b54241848b8b027edacaa2a0000488b12ff12488b4c241848b86035eeacaa2a0000488b5118909090ff12488b4424184c8b3048b8b027edacaa2a00004c89f290ff124c8b6c242041f6c5017503ff55704d89ec4983ec0270f44c8b4424184c89e3488b0424e8adfaffff4c8b5c241848b8b027edacaa2a0000498b13ff124c8b54241848b89838eeacaa2a0000498b5218909090ff124c8b4c241848b8b027edacaa2a0000498b11ff124c8b44242041f6c0017503ff55704c89c74883ef0270f44c8b4424184889fb488b442408909090e841faffff488b74241848b80100000000000000488b56104883c428ff225349504956495548ff700848b82828f0acaa2a0000498b5030ff124c8b44241848b85100000000000000498b5018909090ff12488b7c241848b8b027edacaa2a0000488b17ff12488b74242040f6c6017503ff55704889f34883eb0270f44c8b4c24084989d848bb5900000000000000488b0424488b542410ff12488b54241848b8103dedacaa2a0000488b12ff12488b4c241848b85300000000000000488b5118909090ff12488b4424184c8b701048b801000000000000004c89f24883c428ff224d8d7fe84c3b7d107303ff554049c747f8020000004c89ff48bef084f0acaa2a000048893748baf84af0acaa2a000048895708534950495648ff70085748b82828f0acaa2a0000498b5030909090ff12488b4c241848b8803aeeacaa2a0000488b5118909090ff12488b4424184c8b3048b8b027edacaa2a00004c89f290ff124d8d7fe84c3b7d107303ff554049c747f8020000004d89fd49bc7886f0acaa2a00004d8965004c8b1c244d895d084c8b54242041f6c2017503ff55704d89d14983e90270f44d89c84d89e948bb7837eeacaa2a0000488b442408488b542410909090ff12488b7c241848b80100000000000000488b57104883c428ff224d8d7fe84c3b7d107303ff554049c747f8020000004c89ff48be1087f0acaa2a000048893748baf84af0acaa2a000048895708534950495648ff70085748b82828f0acaa2a0000498b50309090ff12488b4c241848b84837eeacaa2a0000488b5118909090ff12488b4424184c8b3048b8b027edacaa2a00004c89f290ff124d8d7fe04c3b7d107303ff554049c747f8030000004d89fd49bc6888f0acaa2a00004d8965004c8b1c244d895d104c8b5424104d8955084c8b4c242041f6c1017503ff55704d89c84983e80270f44d89e948bb7837eeacaa2a0000488b4424084c89d2909090ff12488b7c241848b80100000000000000488b57104883c428ff22534950495648ff700848b82828f0acaa2a0000498b50309090ff124c8b44241048b81837eeacaa2a0000498b5018909090ff12488b7c241048b8b027edacaa2a0000488b17ff12488b74241840f6c6017503ff55704889f34883eb0270f449b9f089f0acaa2a00004989d848bbb01e600000000000488b0424488b542408909090ff12488b54241048b80100000000000000488b52104883c420ff225349504956495548ff700848b82828f0acaa2a0000498b5030ff124c8b44241848b8b700000000000000498b5018909090ff12488b7c241848b8b027edacaa2a0000488b17ff12488b74242040f6c6017503ff55704889f34883eb0270f44c8b4c24084989d848bb5900000000000000488b0424488b542410ff12488b54241848b8103dedacaa2a0000488b12ff12488b4c241848b8bb00000000000000488b5118909090ff12488b4424184c8b701048b801000000000000004c89f24883c428ff2253495048ff700848ff701048b8f83cedacaa2a0000498b503090ff124c8b44241841f6c0017503ff55704c89c74883ef0270f44c8b4424104889fb488b0424e8c5f5ffff488b74241048b8b027edacaa2a0000488b16ff12488b5c241048b87500000000000000488b5318909090ff12488b54241048b8b027edacaa2a0000488b12ff1248b80100000000000000ff150612000049ba03000000000000004989c14c8b442410488b5c2418488b4424089090ff15ea110000488b4c241048b80100000000000000488b51104883c420ff2253495048ff700848ff701048b82828f0acaa2a0000498b5030ff124c8b44241841f6c0017503ff55704c89c74883ef0270f44c8b4424104889fb488b442408909090e8f1f4ffff488b74241048b8b027edacaa2a0000488b16ff12488b5c241048b88839eeacaa2a0000488b5318909090ff12488b54241048b8b027edacaa2a0000488b12ff12488b4c2418f6c1017503ff55704889c84883e80270f44c8b4424104889c3488b042490e889f4ffff4c8b74241048b80100000000000000498b56104883c420ff22488b780853495048ff3748ff771048b8103dedacaa2a0000498b503090ff12488b74241840f6c6017503ff55704889f34883eb0270f44c8b442410488b0424909090e829f4ffff488b54241048b8b027edacaa2a0000488b12ff12488b4c241048b8e03ceeacaa2a0000488b5118909090ff12488b4424104c8b3048b8b027edacaa2a00004c89f290ff124c8b6c241841f6c5017503ff55704d89ec4983ec0270f44c8b4424104c89e3488b442408909090e8b9f3ffff4c8b5c241048b80100000000000000498b53104883c420ff225349504956495548ff700848b82828f0acaa2a0000498b5030ff124c8b44241848b8a837eeacaa2a0000498b5018909090ff12488b7c241848b8b027edacaa2a0000488b17ff12488b74242040f6c6017503ff55704889f34883eb0270f44c8b4c24084989d848bbf900000000000000488b0424488b542410ff12488b54241848b80100000000000000488b52104883c428ff2248b8908af0acaa2a0000498b5018ff2248b8bf00000000000000498b5018ff225349504956495548ff700848ff701048ff701848b8f83cedacaa2a0000498b5030ff124c8b442428488b7c24104883ff01740c48b8203ceeacaa2a0000eb0a48b8403deeacaa2a0000498b5018ff12488b74242848b8b027edacaa2a0000488b16ff1250504889e3488b442410ff151a0f0000488b5c2440f6c3017503ff55704889da4883ea0270f44c8b4c24284989d048bb7700000000000000488b0424488b54243090ff12488b4c243848b8b027edacaa2a0000488b11ff12488b4424384c8b701848b8f037eeacaa2a00004c89f2ff124c8b6c243848b8b027edacaa2a0000498b5500909090ff1250504889e3488b442428ff159a0e00004c8b64245041f6c4017503ff55704d89e34983eb0270f44c8b4c24384d89d848bb7700000000000000488b0424488b542440ff124c8b54244848b8b027edacaa2a0000498b12ff124c8b4c244848b82038eeacaa2a0000498b5118909090ff124c8b44244848b80100000000000000498b50104883c458ff22488b780848f7c7010000007525488b17488b4a104883f903750c48bec838eeacaa2a0000eb1648be5036eeacaa2a0000eb0a48be5036eeacaa2a00005349504956575648b82828f0acaa2a0000498b5030ff12488b742418488b0424488b561890ff12488b5c241848b8b027edacaa2a0000488b13ff12488b542420f6c2017503ff55704889d14883e90270f449b9a88af0acaa2a00004989c848bb7837eeacaa2a0000488b442408488b542410909090ff12488b4424184c8b701048b801000000000000004c89f24883c428ff225349504956495448ff701048ff701848b82828f0acaa2a0000498b503090ff124c8b44242048b82839eeacaa2a0000498b5018909090ff12488b7c242048b8b027edacaa2a0000488b17ff124d8d7fe84c3b7d107303ff554049c747f8020000004c89fe48bb208df0acaa2a000048891e488b54241048895608488b4c2428f6c1017503ff55704889c84883e80270f44989f14989c048bb7837eeacaa2a0000488b442408488b542418ff124c8b34244983fe017502eb744c8b6c242048b8b027edacaa2a0000498b5500909090ff124c8b64242048b8503aeeacaa2a0000498b5424189090ff124c8b5c242048b8b027edacaa2a0000498b13ff124c8b54242841f6c2017503ff55704d89d14983e90270f44d89c849b9c08df0acaa2a000048bb7837eeacaa2a0000eb05e90b000000488b0424488b542418ff12488b7c242048b80100000000000000488b57104883c430ff22495048ff700848ff701048b82828f0acaa2a0000498b503090ff124c8b44241048b82839eeacaa2a0000498b5018909090ff12488b7c241048b8b027edacaa2a0000488b17ff12488b742410488b442408488b5618ff12488b5c241048b8b027edacaa2a0000488b13ff12488b54241048b87b00000000000000488b5218909090ff12488b4c241048b8b027edacaa2a0000488b11ff12488b4424104c8b701848b82839eeacaa2a00004c89f2ff124c8b6c241048b8b027edacaa2a0000498b5500909090ff124c8b642410488b0424498b542418ff124c8b5c241048b80100000000000000498b53104883c418ff2253495049564955495448ff700848ff701048ff701848b82828f0acaa2a0000498b50309090ff124c8b44243048b8b839eeacaa2a0000498b5018909090ff12488b7c243048b8b027edacaa2a0000488b17ff124d8d7fe84c3b7d107303ff554049c747f8020000004c89fe48bb388ef0acaa2a000048891e488b54241848895608488b4c2438f6c1017503ff55704889c84883e80270f44989f14989c048bb7837eeacaa2a0000488b442408488b542428ff124c8b74243048b8b027edacaa2a0000498b16ff124c8b2c244983fd017502eb6f4c8b64243048b8503aeeacaa2a0000498b5424189090ff124c8b5c243048b8b027edacaa2a0000498b13ff124c8b54243841f6c2017503ff55704d89d14983e90270f44d89c849b9988ef0acaa2a000048bb7837eeacaa2a0000488b0424488b542428909090ff12488b7c2430eb05e91000000048b8b027edacaa2a0000488b1790ff12488b74243048b8e836eeacaa2a0000488b5618909090ff12488b5c243048b8b027edacaa2a0000488b13ff12488b54243048b82828f0acaa2a0000488b5230909090ff1250504889e3488b442420ff156a090000488b4c2448f6c1017503ff55704889c84883e80270f44c8b4c24304989c048bb7700000000000000488b0424488b54243890ff124c8b74244048b80100000000000000498b5610909090ff124c8b6c244048b80100000000000000498b55104883c450ff225349504956495548ff700848b82828f0acaa2a0000498b5030ff124c8b44241848b85100000000000000498b5018909090ff12488b7c241848b8103dedacaa2a0000488b17ff1250504889e3488b442410ff15b6080000488b74243040f6c6017503ff55704889f34883eb0270f44c8b4c24184989d848bb7700000000000000488b0424488b542420ff12488b54242848b8103dedacaa2a0000488b12ff12488b4c242848b85300000000000000488b5118909090ff12488b4424284c8b701048b801000000000000004c89f24883c438ff22534950495648ff700848ff701048b82828f0acaa2a0000498b5030909090ff124c8b442418488b5c2420488b442408909090ff150a0800004c8b44241848b8b027edacaa2a0000498b10ff12488b7c242040f6c7017503ff55704889fe4883ee0270f449b9108ff0acaa2a00004989f048bbb01e600000000000488b0424488b542410909090ff12488b5c241848b80100000000000000488b53104883c428ff224d8d7fe84c3b7d107303ff554049c747f8020000004c89ff48bea88ff0acaa2a000048893748baf84af0acaa2a000048895708534950495648ff70085748b82828f0acaa2a0000498b50309090ff12488b4c241848b8583beeacaa2a0000488b5118909090ff12488b4424184c8b3048b8b027edacaa2a00004c89f290ff124d8d7fe84c3b7d107303ff554049c747f8020000004d89fd49bca891f0acaa2a00004d8965004c8b1c244d895d084c8b54242041f6c2017503ff55704d89d14983e90270f44d89c84d89e948bb7837eeacaa2a0000488b442408488b542410909090ff12488b7c241848b80100000000000000488b57104883c428ff2253495048ff700848b8103dedacaa2a0000498b5030ff124c8b44240848b8b03aeeacaa2a0000498b5018909090ff12488b7c240848b8b027edacaa2a0000488b17ff12488b74241040f6c6017503ff55704889f34883eb0270f44c8b442408488b0424909090e879e9ffff488b54240848b80100000000000000488b52104883c418ff225349504956495548ff700848ff701048b8103dedacaa2a0000498b5030ff124c8b44242841f6c0017503ff55704c89c74883ef0270f44c8b4424204889fb488b442408909090e815e9ffff488b74242048b8b027edacaa2a0000488b16ff12488b5c242048b82828f0acaa2a0000488b5330909090ff12488b54242048b8e83deeacaa2a0000488b5218909090ff12488b4c242048b8b027edacaa2a0000488b11ff12488b442428a8017503ff55704989c64983ee0270f44c8b4c24104d89f048bbf900000000000000488b0424488b5424189090ff124c8b6c242048b80100000000000000498b5510909090ff124c8b64242048b80100000000000000498b5424104883c430ff2253495048ff700848ff701048b8103dedacaa2a0000498b5030909090ff124c8b44241048b8803ceeacaa2a0000498b5018909090ff12488b7c241048b8b027edacaa2a0000488b17ff12488b74241840f6c6017503ff55704889f34883eb0270f44c8b442410488b0424909090e8e5e7ffff488b54241048b8b027edacaa2a0000488b12ff12488b4c241048b86838eeacaa2a0000488b5118909090ff12488b4424104c8b3048b8b027edacaa2a00004c89f290ff124c8b6c241841f6c5017503ff55704d89ec4983ec0270f44c8b4424104c89e3488b442408909090e875e7ffff4c8b5c241048b80100000000000000498b53104883c420ff225349504956495548ff700848ff701048b82828f0acaa2a0000498b5030ff124c8b44242048b8103dedacaa2a0000498b5030909090ff12488b7c242048b8d03deeacaa2a0000488b5718909090ff12488b74242048b8b027edacaa2a0000488b16ff12488b5c2428f6c3017503ff55704889da4883ea0270f44c8b4424204889d3488b442408e8d1e6ffff488b4c242048b8b027edacaa2a0000488b11ff12488b4424204c8b701848b8c035eeacaa2a00004c89f2ff124c8b6c242048b80100000000000000498b5510909090ff124c8b64242048b8b027edacaa2a0000498b1424909090ff124c8b5c242841f6c3017503ff55704d89da4983ea0270f44c8b4c24104d89d048bbf900000000000000488b0424488b542418ff124c8b4c242048b80100000000000000498b51104883c430ff2253495048ff700848ff701048b82828f0acaa2a0000498b5030ff124c8b44241841f6c0017503ff55704c89c74883ef0270f44c8b4424104889fb488b442408909090e8e1e5ffff488b74241048b8b027edacaa2a0000488b16ff12488b5c241048b8a03deeacaa2a0000488b5318909090ff12488b54241048b8b027edacaa2a0000488b12ff12488b4c2418f6c1017503ff55704889c84883e80270f44c8b4424104889c3488b042490e879e5ffff4c8b74241048b80100000000000000498b56104883c420ff2253495048ff700848ff701048b82828f0acaa2a0000498b5030ff124c8b44241841f6c0017503ff55704c89c74883ef0270f44c8b4424104889fb488b442408909090e819e5ffff488b74241048b8b027edacaa2a0000488b16ff12488b5c241048b8f03beeacaa2a0000488b5318909090ff12488b54241048b8b027edacaa2a0000488b12ff12488b4c2418f6c1017503ff55704889c84883e80270f44c8b4424104889c3488b042490e8b1e4ffff4c8b74241048b80100000000000000498b56104883c420ff2249505348ff700848ff701848b8e004edacaa2a0000498b5030ff124c8b44241848b8f700000000000000498b5018909090ff12488b7c241040f6c7017503ff55704889fe4883ee0270f44889f3488b0424488d542420909090ff1502010000488b5c24084883fb017402eb2b488b542418488b0c244883f901750c48b8d85deeacaa2a0000eb0a48b8f05ff0acaa2a0000488b5218ff12488b4424184c8b701848b8fb000000000000004c89f2ff124c8b6c241848b80100000000000000498b55104883c420ff2249ff7018488b580848b84700000000000000909090ff1586000000488b14244883c408ff2290909090|@2135,8191,@2136,@331,@2017,@2013,@2138,@2140,@2141,@2142,@2143,@2134,@303|42,0,@2003 83,0,@2005 97,0,@2007 135,0,@2008 168,0,@1319 208,0,$2002+242 500,0,@2098 543,0,@1584 553,0,I24 598,0,@2099 699,0,@268 783,0,40 805,0,@268 868,0,@268 896,0,41 917,0,@268 999,0,40 1021,0,@268 1081,0,@268 1108,0,41 1129,0,0 1164,0,@268 1185,0,@1188 1209,0,@257 1269,0,@257 1289,0,@1186 1316,0,@257 1377,0,@257 1397,0,@1220 1421,0,@257 1485,0,0 1516,0,@1992 1537,0,40 1561,0,@257 1607,0,44 1633,0,@268 1653,0,41 1681,0,0 1724,0,@2100 1737,0,@2007 1761,0,@1992 1785,0,@1240 1812,0,@257 1852,0,@2102 1903,0,@1208 1933,0,0 1977,0,@2104 1990,0,@2007 2014,0,@1992 2037,0,@1206 2064,0,@257 2104,0,@2106 2161,0,@1208 2189,0,0 2218,0,@1992 2241,0,@1204 2265,0,@257 2303,0,@2110 2316,0,I48 2345,0,0 2376,0,@1992 2397,0,91 2421,0,@257 2467,0,44 2493,0,@268 2513,0,93 2541,0,0 2571,0,@267 2633,0,@257 2653,0,58 2677,0,@257 2692,0,0 2708,0,1 2749,0,0 2780,0,@1992 2845,0,@257 2865,0,@1230 2889,0,@257 2949,0,0 2983,0,@268 3045,0,@257 3065,0,@1265 3092,0,@257 3157,0,0 3188,0,@1992 3209,0,@1210 3233,0,@257 3279,0,124 3305,0,0 3325,0,@2113 3341,0,95 3376,0,@267 3408,0,@1257 3420,0,@1269 3441,0,@257 3502,0,59 3529,0,@257 3553,0,@1213 3573,0,@257 3639,0,59 3665,0,@257 3685,0,@1215 3709,0,0 3755,0,@1222 3767,0,@1196 3779,0,@1196 3796,0,@1992 3833,0,@257 3870,0,@2114 3883,0,@1208 3917,0,0 3951,0,@1992 3973,0,@1226 3997,0,@257 4036,0,@2119 4086,0,@1208 4125,0,@257 4149,0,@1238 4173,0,@257 4214,0,@2121 4224,0,@1208 4257,0,0 4287,0,@1992 4309,0,@1226 4333,0,@257 4369,0,@257 4389,0,61 4413,0,@257 4437,0,@1226 4457,0,@257 4497,0,0 4538,0,@1992 4561,0,@1232 4585,0,@257 4624,0,@2123 4674,0,@1208 4701,0,@257 4733,0,@1238 4757,0,@257 4798,0,@2124 4808,0,@1208 4844,0,@257 4865,0,@1202 4889,0,@257 4909,0,@1992 4974,0,59 5001,0,0 5025,0,0 5056,0,@1992 5077,0,40 5101,0,@268 5163,0,59 5189,0,@268 5209,0,41 5237,0,0 5269,0,@1992 5317,0,@257 5355,0,@2126 5368,0,I48 5397,0,0 5441,0,@2129 5454,0,@2007 5478,0,@1992 5501,0,@1249 5528,0,@257 5568,0,@2131 5619,0,@1208 5649,0,0 5676,0,@268 5697,0,@1242 5721,0,@257 5781,0,0 5816,0,@268 5881,0,@257 5901,0,@1992 5925,0,@1276 5949,0,@257 5993,0,124 6021,0,0 6045,0,0 6077,0,@268 6101,0,@1261 6125,0,@257 6185,0,@257 6205,0,@1218 6232,0,@257 6297,0,0 6332,0,@1992 6353,0,@268 6377,0,@1275 6401,0,@257 6461,0,@257 6485,0,@1190 6505,0,0 6529,0,@257 6579,0,124 6605,0,0 6636,0,@1992 6701,0,@257 6721,0,@1273 6745,0,@257 6805,0,0 6836,0,@1992 6901,0,@257 6921,0,@1255 6945,0,@257 7005,0,0 7036,0,@184 7057,0,123 7148,0,@1319 7160,0,@2033 7185,0,125 7205,0,0 7233,0,35 2003:C2,536|90909090909090483b65187303ff554841f6c0017503ff55704983f8017f144c8b720848b8d85deeacaa2a0000498b5618ff224883f801750b48b80100000000000000c34c8b70084983fe01752f4c8b284d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c8b62084c8960104c8940084c89284c89caff224c8b6a08525349504951495648ff3048b8103dedacaa2a0000498b55309090ff124c8b6424284d8d7fe04c3b7d107303ff554049c747f8030000004c89f84d8b5c24084c8958104c8b5424184c8950084c8b0c244c8908488b542410909090ff124c8b442428498b78084c8b3748bb5900000000000000488b44242048bab01860000000000090ff124883f801740c49bd0300000000000000eb5148bb7700000000000000488b44242048bab018600000000000909090ff124883f801740c49bd0300000000000000eb2148bbb01e600000000000488b44242048bab018600000000000909090ff124989c54d89ec4983f4024d8d7fe84c3b7d107303ff554049c747f8020000004c89f848c74008010000004c89204c89f29090ff124c8b5c24284d8b5308488b442420498b5218ff124c8b4c24284d8b410848b80100000000000000498b5010909090ff12488b7c2428488b770848b8b027edacaa2a0000488b16ff12488b5c2418f6c3017503ff55704889da4883ea0270f44c8b4c24104989d0488b5c2420488b442408488b5424284883c430e9effdffff|@2004,8191|37,0,@1319 59,0,0 142,0,@268 236,0,44 251,0,I24 270,0,1 282,0,59 297,0,I24 318,0,1 330,0,I48 345,0,I24 441,0,0 469,0,@257 2004:S37|50415253455f5452454528292e7074446973706c61792833297072696e744c697374283429 2005:C2,40|90909090909090483b65187303ff55484c8b4010488b5808488b00488b5208ff2290909090909090|@2006,8191| 2006:S25|50415253455f5452454528292e7074446973706c6179283129 2007:O1|@2002 2008:C4,280|90909090909090483b65187303ff55485253495048ff3048ff701048ff701848b82828f0acaa2a0000498b5030909090ff1248b80100000000000000ff15fe00000049ba03000000000000004c8b4c24184989c0488b5c2420488b0424909090ff15e20000004c8b742418488b442410498b5618ff124c8b6c241848b8b027edacaa2a0000498b5500909090ff124c8b64241848b87b00000000000000498b5424189090ff124c8b5c241848b8b027edacaa2a0000498b13ff124c8b54242041f6c2017503ff55704d89d14983e90270f44c8b4424284c89cf49b9684cf0acaa2a0000498b70084989f848bbf900000000000000488b4424084889f2ff12488b5c241848b80100000000000000488b53104883c430ff2290|@2094,8191,@2017,@2093|33,0,@1992 52,0,0 68,0,1 125,0,@257 149,0,61 173,0,@257 219,0,@2009 236,0,124 261,0,0 2009:O1|@2010 2010:C3,40|90909090909090483b65187303ff55484c8b4010488b5808488b00ff252f00000090909090909090|@2012,8191,@2011| 2011:C5,232|90909090909090483b65187303ff554853495048ff3048ff700848b8e004edacaa2a0000498b5030ff124c8b742410488b442408498b5618ff12488b04249090ff15ca0000004883f8017402eb6d4c8b6c241048b8b027edacaa2a0000498b5500909090ff124c8b64241048b8c035eeacaa2a0000498b5424189090ff124c8b5c241048b8b027edacaa2a0000498b13ff1248b80100000000000000ff157600000049ba03000000000000004989c14c8b442410488b5c2418eb05e90a000000488b0424ff15560000004c8b54241048b80100000000000000498b52104883c420ff229090909090|@2014,8191,@2015,@2017,@2013|28,0,@184 85,0,@257 109,0,@1190 133,0,@257 148,0,0 164,0,1 209,0,0 2012:S44|50415253455f5452454528292e7074446973706c61792833297072696e74436f6e7374727563746f72283129 2013:C3,40|90909090909090483b65187303ff5548495149504952488d54241890ff152e0000004883c418c390|@2036,8191,@2028| 2014:S44|50415253455f5452454528292e7074446973706c61792833297072696e74436f6e7374727563746f72283329 2015:C2,32|4c8b304983feff750b48b80300000000000000c348b80100000000000000c390|@2016,4097|11,0,1 22,0,0 2016:S9|456d70747954797065 2017:C2,128|4d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89f848c700ffffffff4d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fe49c706010000004989c54d8d7fe04c3b7d107303ff554049c747f8030000004c89f849bc3050f0acaa2a00004c89204c8968104c897008c390909090909090|@2027,7169|101,0,@2018 2018:C6,368|90909090909090483b65187303ff55484c8b72084d8b2e52504983fd01750c49bc0100000000000000eb5a498b55004989d44d8b5d08488b1c24488b42089090ff15520100004883f80174214c89e34d8d7ff04c3b7d107303ff554049c747f8010000004d89fc49891c24eb184d89dd483b65187303ff5548eb9e49bc01000000000000004983fc017570488b542408488b42104c8b3041f6c6017503ff55704d89f54983c50270f44c89284c8b2424498b5c2408498b0424909090ff15de0000004883f801740c49bbf851f0acaa2a0000eb0a49bb4f000000000000004c8b5424084d8b4a10498b014953ff15b60000004889c3488b0424eb05e95d000000ff15aa0000004c8b4424104d8d7fe84c3b7d107303ff554049c747f8020000004c89ff488b74240848897708488907498b5808488b134d8d7fe84c3b7d107303ff554049c747f8020000004c89f94889510848893948890b4883c418c3498b1424488b024883c410c390909090909090|@2021,8191,@2022,@2024,@2020,@303|33,0,0 125,0,0 202,0,@2019 214,0,39 2019:S2|2727 2020:C3,376|90909090909090483b65187303ff5548a8017503ff55704883f8357c6ea8017503ff55704883f8017c0c49bd0300000000000000eb0a49bd01000000000000004983fd0375054989c4eb10a8017503ff55704989c44983ec3270f45048bb35000000000000004c89e048baf02d60000000000090ff12a8017503ff55704989c34983eb0270f44c89d8eb05e90b00000090e871ffffff4989c6eb0b49beb01e60000000000050495648bb3500000000000000488b44240848ba302e600000000000909090ff124883f8017502eb2ba8017503ff55704883f8017c0c49be0300000000000000eb0a49be01000000000000004983fe037402eb054989c6eb10a8017503ff55704989c64983c63470f441f6c6017503ff55704d89f54981c5c200000070f141f6c5017503ff55704983fd017d02eb1441f6c5017503ff55704981fdff0100007f02eb1848b8f048edacaa2a000090ff555849bc01000000000000004d89ec4c89e3488b04244883c410ff252c00000090909090|@2026,8191,@303|44,0,1 56,0,0 94,0,26 107,0,I109 157,0,I48 170,0,26 185,0,I110 221,0,1 233,0,0 330,0,@309 344,0,0 2021:S33|545950455f5452454528292e7661724e616d6553657175656e6365283129283129 2022:C2,40|4c8b304c8b2b4d3bf5750b48b80300000000000000c348b80100000000000000c390909090909090|@2023,6153|13,0,1 24,0,0 2023:S23|5354525543545f56414c5328292e73616d655476283229 2024:C2,48|4889d84883e0094883f801750c49be0300000000000000eb0a49be01000000000000004c89f04883f002c39090909090|@2025,4105|15,0,1 27,0,0 2025:S27|5354525543545f56414c5328292e7476457175616c697479283229 2026:S40|545950455f5452454528292e7661724e616d6553657175656e63652831292831296e616d65283129 2027:S30|545950455f5452454528292e7661724e616d6553657175656e6365283129 2028:C40,2080|90909090909090483b65187303ff554852539090ff152e0800004989c54c89e8ff152a0800004883f80174654c89e890ff15220800004989c4498b5c2408498b04249090ff15160800004989c34c89d8ff15120800004883f80174204c8b5424084d8b4af049ff71184c89e0498b52f8ff12488b14244883c418ff22488b1c244c89d8488b5424084883c410e976ffffff4c89e8ff15d60700004883f801746d4c89e890ff15ce0700004c8b204983fc01755f4c8b58084c8b50104c89d09090ff15ba0700009090ff15ba0700009090ff15ba0700004883f80174054d89d9eb144c89d0ff15ae0700009090ff15ae0700004989c14c8b442408498b78f0498b70e84883fe01740f4c89c8eb28e90d030000e92e000000505048ff7718488d5c24084c89c8909090ff157a070000488b442410eb06505048ff7718488b14244883c428ff224c8b1c2441f6c3017503ff55704983fb017f1d4c8b5424084d8b4af048b8d85deeacaa2a0000498b51184883c410ff2249f7c40100000075114c8b104c8b48084c8b4010498b0424eb254c8b104c8b48084c8b401048b8105ff0acaa2a0000909090ff555848b801000000000000004952495149509090ff15ee060000488b7c241048f7c7010000007506488b7708eb1d4889c648b8105ff0acaa2a0000ff55584889f348be01000000000000004889c3488b04249090ff15b60600009090ff15b60600009090ff15b60600004883f8017407488b542408eb16488b042490ff15a60600009090ff15a60600004889c2488b4c2420488b41f05356524c8b703048b8103dedacaa2a00004c89f29090ff124c8b6c24084983fd017402eb33488b442410ff15720600004883f8017402eb20488b44241090ff15660600004883f801746f488b442410909090ff155a0600004c8b64243041f6c4017503ff55704983fc037f1e4c8b5c24384d8b53f048b8d85deeacaa2a0000498b5218909090ff12eb6f4c8b5c24384d8b53f048b8103dedacaa2a0000498b523090ff124c8b4c24384d8b41f048b85100000000000000eb05e9b0000000498b5018ff12488b7c2438488b77f048b8103dedacaa2a0000488b16ff12488b5c2430f6c3017503ff55704889da4883ea0270f44c8b442428eb05e99a0000004889d348b85900000000000000488d5424409090ff15a2050000488b4c2438488b41f04c8b3048b8103dedacaa2a00004c89f290ff124c8b6c24384d8b65f048b85300000000000000498b5424189090ff124c8b5c24384d8b53f048b80100000000000000498b5210909090ff12eb2a4c8b64243041f6c4017503ff55704d89e34983eb0270f44c89db488b442410488b54243890e831fcffff4c8b5424384d8b4af048b8b027edacaa2a0000498b11ff124c8b442438498b78f0488b0424488b571890ff12488b742438488b5ef048b80100000000000000488b53104883c440ff224c89e89090ff15d60400004883f801746c4c89e890ff15ce0400004c8b242441f6c4017503ff55704983fc017f1d4c8b5c24084d8b53f048b8d85deeacaa2a0000498b52184883c410ff2248ff7008488b00909090ff15960400004c8b5c24104d8b53f05048b8103dedacaa2a0000498b52309090ff12488b0424eb05e9f2000000909090ff156e0400004883f8017420488b0424ff1566040000488b5c2410488b0424488d542420ff155a040000eb2a4c8b4c241041f6c1017503ff55704d89c84983e80270f44c89c3488b0424488b5424189090e80dfbffff488b7c2418488b77f048b8b027edacaa2a0000488b16ff12488b5c2418488b53f048b8503ceeacaa2a0000488b5218909090ff12488b4c2418488b41f04c8b3048b8b027edacaa2a00004c89f290ff124c8b6c241041f6c5017503ff55704d89ec4983ec0270f44c89e3488b442408488b542418909090e891faffff4c8b5c24184d8b53f048b80100000000000000498b52104883c420ff224c89e89090ff15920300004883f801746d4d89eb4c89d89090ff15860300004c8b142441f6c2017503ff55704983fa017f1d4c8b4c24084d8b41f048b8d85deeacaa2a0000498b50184883c410ff2248ff3048ff70084c89d8ff154e0300004883f801746b4c8b4c24184d8b41f048b8103dedacaa2a0000498b5030eb05e92e0100009090ff12488b042448ba485ff0acaa2a0000ff124989c0488b5c241048b85500000000000000488d542420909090ff15fe020000488b7c2418488b77f048b80100000000000000488b5610eb05e9060000004883c420ff224c8b4c24184d8b41f048b8e004edacaa2a0000498b5030909090ff12488b7c2418488b77f048b8f700000000000000488b5618909090ff12488b5c2410f6c3017503ff55704889da4883ea0270f4488b1c244889d0488d542420ff1582020000488b4c24084883f90175314c8b34244983fe01750c48b8d85deeacaa2a0000eb0a48b8f05ff0acaa2a00004c8b6c24184d8b65f0498b54241890ff12488b4424184c8b70f048b8fb00000000000000498b5618909090ff124c8b6c24184d8b65f048b80100000000000000498b5424104883c420ff224c89e890ff150a0200004883f801746f4c89e890ff15020200004883f801751e4c8b6424084d8b5c24f048b80860f0acaa2a0000498b53184883c410ff224c8b6424084d8b5c24f05048b8103dedacaa2a0000498b533090ff12488b0424488d54241890ff15ba0100004c8b5424104d8b4af048b80100000000000000eb05e90a000000498b51104883c418ff224c89e8909090ff15920100004883f801741e4c8b6424084d8b5c24f048b80860f0acaa2a0000498b53184883c410ff224c8b6424084d8b5c24f048b82060f0acaa2a0000498b53184883c410ff22|@2038,8191,@2039,@1458,@1459,@2044,@2015,@2062,@2063,@2064,@1461,@1463,@2064,@2066,@2068,@2039,@2064,@1461,@1463,@2064,@2066,@2082,@2084,@2085,@2086,@2084,@2085,@2039,@2084,@2085,@2087,@2046,@2047,@2082,@2086,@2090,@2060,@2042,@2037,@2015|355,0,@1319 412,0,@2029 428,0,0 475,0,@2029 491,0,0 583,0,@268 693,0,@1319 723,0,@268 749,0,40 781,0,@268 833,0,44 868,0,@268 893,0,41 921,0,0 993,0,@257 1037,0,0 1112,0,@1319 1158,0,@268 1285,0,@257 1309,0,@1259 1340,0,@257 1409,0,0 1488,0,@1319 1539,0,@268 1568,0,@2031 1588,0,42 1621,0,0 1657,0,@184 1685,0,123 1765,0,@1319 1777,0,@2033 1813,0,125 1841,0,0 1904,0,@2034 1935,0,@268 1977,0,0 2032,0,@2034 2062,0,@2035 2029:O3|@7462,@2030,0 2030:S5|456d707479 2031:O1|@2032 2032:C2,96|90909090909090483b65187303ff55484883f801750b48b80100000000000000c34c8b3049ff7608488b400890e8d5ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fe49894608488b04244989064c89f04883c408c3909090|@417,4097|24,0,0 2033:S5|2c202e2e2e 2034:S7|6e6f2074797065 2035:S3|626164 2036:S20|545950455f5452454528292e7444697370283529 2037:C4,184|90909090909090483b65187303ff55484883f801750b48b80100000000000000c34c8b70084983fe01751a4c8b6af84d8b65f0488b009090ff15a2000000498b542418ff224c8b6af84d8b65f04989d3488b0090ff158e00000049534956498b54241890ff124c8b5424084d8b4af84d8b41f048b8103dedacaa2a0000498b10ff12488b7c2408488b77f8488b5ef048b85f00000000000000488b5318909090ff12488b0424488b5424084883c410e953ffffff90909090|@2092,8191,@2066,@2066|24,0,0 117,0,@268 145,0,47 2038:S28|545950455f5452454528292e74446973702835296469737050283229 2039:C17,520|90909090909090483b65187303ff55484989c54c89e89090ff15120200004883f80174664d89ec4c89e09090ff15060200004989c6498b5e08498b06ff15fe01000049544956509090e8b9ffffff4c8b2c244c3be87502eb144989c44c89e3488b442408ff15de0100004c89e04889c34889d890ff15d60100004883f801740f488b4424104883c418c3e9750100004889d89090ff15be0100004883f801746c4889d890ff15b6010000488b104883fa01755e4c8b701049f7c60100000075564d8b2e4c8b6008498b5d08498b450090ff15920100004c89f34889c14889c890ff158a0100004883f801745e4d89e34889c89090ff157e0100005348ff304c89db488b4008488d542428eb0fe9c7000000e9ba000000e9ab00000090ff155e0100004989c24d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b0c244c8948084c8910eb1a48b84864f0acaa2a0000909090ff555848b801000000000000004c8b00488b78084d8d7fe04c3b7d107303ff554049c747f8030000004c89f8488b742408488970104c89400848893890ff15ee0000004889c14889cb488b442418909090ff15e20000004883ff0174084889c84883c428c3488b4424204883c428c3488b4424104883c418c34889d84883c418c34889d890ff15b60000004883f80174144889d890ff15ae000000488b4424104883c418c34889d84883c418c34c89e8c3|@2043,8191,@1458,@1459,@2044,@1454,@2015,@2046,@2047,@2044,@2046,@2047,@2048,@1456,@1454,@2060,@2042|332,0,@2040 348,0,0 2040:O3|@7377,@215,@2041 2041:S35|756e6966795265636f7264733a204e6f742061206c6162656c6c6564207265636f7264 2042:C2,8|488b4008c3909090|@2061,1| 2043:S23|545950455f5452454528292e6576656e7475616c283129 2044:C2,8|488b184889d8c390|@2045,9| 2045:S24|5354525543545f56414c5328292e747656616c7565283229 2046:C2,32|4c8b304983fefd750b48b80300000000000000c348b80100000000000000c390|@1457,4097|11,0,1 22,0,0 2047:C2,48|4c8b70084c8b68104c8b60184d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c8960104c8968084c8930c3|@1457,7169| 2048:C5,504|90909090909090483b65187303ff55484883f801752a4883fb01750b48b80100000000000000c348b87868f0acaa2a00009090ff555848b801000000000000004c8b304883fb01756d50505248ff70084c8d442410498b5e08498b06ff15be0100004d8d7fe84c3b7d107303ff554049c747f8020000004d89fd4c8b6424104d8965004c8b5c24184d895d08495548bb0100000000000000488b442408488b542410909090e85dffffff4d8d7fe84c3b7d10730aeb05e921000000ff554049c747f8020000004d89fa498942084c8b0c244d890a4c89d04883c428c34c8b2b4989d44989db4d89f24c8b4808498b5d00498b0690ff152e0100004883f8017541495449ff33498b5b084c89c84c89e29090e8f1feffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89f849894008488b3c244989384c89c04883c410c3a8017503ff55704883f8017d6f50504954495349514c8d442418498b5a08498b024c89e2909090ff15c20000004d8d7fe84c3b7d107303ff554049c747f8020000004d89f8488b7c2418498938488b742420498970084950488b5c2410488b442408488b54241890e859feffff4d8d7fe84c3b7d107303ff5540eb05e91e00000049c747f8020000004c89fb48894308488b14244889134889d84883c430c348b87868f0acaa2a000090ff555848b80100000000000000|@2054,8191,@2051,@1450,@2051|30,0,0 41,0,@2049 56,0,0 144,0,0 482,0,@2049 496,0,0 2049:O3|@7377,@215,@2050 2050:S51|616464546f496e7374616e63653a20456e74727920696e20696e7374616e636520627574206e6f7420696e2067656e65726963 2051:C11,344|90909090909090483b65187303ff55484989d54989c44889d8909090ff155e0100004883f801746e4d89eb4889d89090ff1552010000498b5bf04989c64c8b2b488b53084889d34c89e89090ff153e0100004d8b6bf04d89f24989c1498b5d08498b4500ff152e0100004883f801740c48bf0300000000000000eb11498b5a08498b0290ff15160100004889c7498b5a08498b02eb05e9a100000090ff15060100004883f801740c48be0300000000000000eb11498b5d08498b4500ff15ee0000004889c650504c89c14889e0504989f24d89ce49b901000000000000004989f84c89f348b8e005edacaa2a00009090ff15c20000004d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b2c244c89284c8b5c24084c8958089090ff159a0000004c89214889410848b801000000000000004883c410c348b8b86af0acaa2a000090ff555848b8010000000000000090909090|@2056,8191,@1458,@1459,@2057,@2024,@2024,@2055,@2055,@1369,@1358|114,0,1 170,0,1 214,0,0 230,0,@193 303,0,0 318,0,@2052 332,0,0 2052:O3|@7377,@215,@2053 2053:S43|6372656174654e65774669656c643a204e6577206669656c64206973206e6f742061207479706520766172 2054:S39|545950455f5452454528292e6576656e7475616c283129616464546f496e7374616e6365283229 2055:C2,48|4889d84883e0034883f801750c49be0300000000000000eb0a49be01000000000000004c89f04883f002c39090909090|@2059,4105|15,0,1 27,0,0 2056:S40|545950455f5452454528292e6576656e7475616c2831296372656174654e65774669656c64283329 2057:C2,64|4889d848c1e8034883c801a8017503ff55704883f8017d2548bbd802edacaa2a00004889da4823d0f6c2017503ff5570488d53ff4803d070f44889d0c3c39090|@2058,13|26,0,@167 2058:S24|5354525543545f56414c5328292e74764c6576656c283229 2059:S23|5354525543545f56414c5328292e74765765616b283229 2060:C2,32|4c8b304983fe05750b48b80300000000000000c348b80100000000000000c390|@2061,4097|11,0,1 22,0,0 2061:S11|4f7665726c6f6164536574 2062:C2,32|4c8b304983fefb750b48b80300000000000000c348b80100000000000000c390|@1466,4097|11,0,1 22,0,0 2063:C2,48|4c8b70084c8b68104c8b60184d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c8960104c8968084c8930c3|@1466,7169| 2064:C2,32|4c8b304983fe017505488b4008c34c8b68084d8b65004c89e0c3909090909090|@2065,7169| 2065:S22|5354525543545f56414c5328292e706c696e67283129 2066:C2,8|488b00c390909090|@2067,1| 2067:S23|5354525543545f56414c5328292e74634e616d65283129 2068:C11,416|90909090909090483b65187303ff554848f7c001000000740c49be0300000000000000eb084c8b304f8d7436014d8d7fe04c3b7d107303ff554049c747f8030000004d89fd498945104d89750849c7450001000000505348bbf870f0acaa2a00004c89e8ff155e0100004c8b204c8b58084c89e0ff15560100004883f80174294c8b142449b9b01e6000000000004d890a4c8b4424084d89420848b801000000000000004883c410c34c89e0ff15260100004c8b500841f6c2017503ff55704983fa037d3a4c8b00488b78104d8d7fe04c3b7d107303ff554049c747f8030000004c89f84889781048c74008010000004c890090ff15e60000004989c1eb3a4d8d4afe4c8b00488b78104d8d7fe04c3b7d107303ff554049c747f8030000004c89f8488978104c8948084c8900909090ff15b20000004989c14c89c8ff15ae00000049534c8b4008488b18488b401090ff15a20000004889c6488b0424909090ff159a000000564c8b4008488b18488b40109090ff158e000000488b5c2410488b14244889134889430848b801000000000000004883c420c390909090909090|@2073,8191,@2074,@2080,@2072,@2077,@2077,@2072,@1442,@2072,@1442|27,0,1 89,0,@2069 134,0,I48 156,0,0 396,0,0 2069:O1|@2070 2070:C2,40|4883f85d750c49be0300000000000000eb0a49be01000000000000004c89f04883f002c390909090|@2071,4097|8,0,1 20,0,0 2071:S40|5554494c49544945535f28292e73706c6974537472696e672832293c7061747465726e3e2d283129 2072:C2,8|c390909090909090|@2079,1| 2073:S27|5554494c49544945535f28292e73706c6974537472696e67283229 2074:C4,120|90909090909090483b65187303ff5548ff158a00000048ff701048ff700848ff3053488b542408488b4424104c8d70ff4c03f250504889e34c89f0488d542430ff15620000004d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b2c244c89284c8b6424084c8960084883c430c39090909090|@2076,8191,@2072,@2075| 2075:C6,432|90909090909090483b65187303ff55484c8b72e8493bc6756f4989c54d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c8b62f84c89601048c74008010000004c89284989d59090ff15860100004889c24d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c896010498b4df0488948084c89304989d390ff155a010000eb05e9120000004c891b4889430848b80100000000000000c34c8d68fe4c8b62f849f7c40100000074084989c34c89e0eb1a4d8d5d104989c24c89d848d1e8490fb60404488d4400014d89d352495353488b52e09090ff124883f801741e4c8b4c24084d8d41fe488b1c244c89c0488b5424104883c418e905ffffff4c8b4c24104c8b442408498b79e84c89c6482bf74883c6014d8d7fe04c3b7d107303ff554049c747f8030000004c89f8498b59f84889581048897008488938909090ff159e000000498b51f0488d4fff4803ca4989ce4d2bf04983c6014989c54d8d7fe04c3b7d107303ff554049c747f8030000004c89f8488958104c8970084c8900909090ff15620000004c8b24244d892c24498944240848b801000000000000004883c418c3909090909090|@2078,8191,@2077,@2077,@2077,@2077|150,0,0 413,0,0 2076:S19|537562737472696e672e73706c697472283229 2077:C2,8|c390909090909090|@2079,1| 2078:S26|537562737472696e672e73706c69747228322966696e64283229 2079:S5|536c696365 2080:C2,32|4c8b70084983fe01750b48b80300000000000000c348b80100000000000000c3|@2081,4097|12,0,1 23,0,0 2081:S34|566563746f72536c6963654f7065726174696f6e7328292e6973456d707479283129 2082:C5,320|90909090909090483b65187303ff55484989c54c89e89090ff154a0100004883f801746f4c89e890ff15420100004c8b204983fc037561488b500848f7c20100000075594c8b720849f7c601000000756d49bd03000000000000004883fa01750b48b80300000000000000c34c8b22495549ff342448ff720848bbffffffffffffffff4c89e89090ff15ea0000004889c3eb0fe99a000000e98a000000e97a000000488b44240848bab018600000000000909090ff124883f8017446eb05e94e0000004c8b5c241041f6c3017503ff55704d89da4983c20270f4488b14244d89d54883c418483b65187303ff5548e968ffffff48b801000000000000004883c418c348b801000000000000004883c418c348b80100000000000000c348b80100000000000000c348b80100000000000000c348b80100000000000000c3909090|@2083,8191,@2046,@2047,@305|83,0,1 99,0,1 123,0,-1 169,0,I24 245,0,0 260,0,0 275,0,0 286,0,0 297,0,0 308,0,0 2083:S28|545950455f5452454528292e697350726f6475637454797065283129 2084:C2,32|4c8b304983fe03750b48b80300000000000000c348b80100000000000000c390|@1471,4097|11,0,1 22,0,0 2085:C2,40|4c8b70084c8b68104d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8968084c8930c3|@1471,6145| 2086:C14,664|90909090909090483b65187303ff55484983f801750b48b80100000000000000c34d8b70084983fe017555525053498b00909090ff15860200004989c548bb5500000000000000488b44240848bab0186000000000009090ff124883f801743e4c89e890ff155e0200004883f80174154d89ec4c89e09090ff1552020000eb1ae95200000049554c89e89090ff15460200004883f801750aeb204954eb044955eb18488b5c2408488b0424488b5424184883c420ff2526020000488b5c2408488b04244c8b642418498b5424f84883c420ff2511020000f6c3017503ff55704883fb017f194c8b6af84d8b65f048b8d85deeacaa2a0000498b542418ff225250534956498b009090ff15e20100004c8b6c24184d8b65f84d8b5c24f05048b8103dedacaa2a0000498b533090ff1248bb5500000000000000488b44241848bab01860000000000090ff124883f8017444488b0424ff159e0100004883f801740c488b0424ff1596010000eb12488b0424ff15920100004883f8017502eb16488b5c2410488b0424488b542420ff157e010000eb1a488b5c2410488b04244c8b542420498b52f89090ff156a0100004c8b4c24204d8b41f8498b78f04c8b3748bb5900000000000000488b44241848bab01860000000000090ff124989c54983f5024d8d7fe84c3b7d107303ff554049c747f8020000004c89f848c74008010000004c89284c89f290ff124c8b6424204d8b5c24f84d8b53f0488b442418498b5218909090ff124c8b4c24204d8b41f8498b78f048b80100000000000000488b5710909090ff12488b742420488b5ef8488b53f048b8b027edacaa2a0000488b12ff12488b4c2410f6c1017503ff55704889c84883e80270f44c8b4424084889c3488b442418488b5424204883c428e974fdffff9090909090|@2088,8191,@2039,@2084,@2085,@2082,@2087,@2028,@2039,@2084,@2085,@2082,@2087,@2028|24,0,0 63,0,42 78,0,I24 239,0,@1319 287,0,@268 304,0,42 319,0,I24 448,0,44 463,0,I24 565,0,0 597,0,@257 2087:C3,280|90909090909090483b65187303ff5548f6c3017503ff55704883fb037f18488b5af8488b4bf048b8d85deeacaa2a0000488b5118ff224c8b72f84d8b6ef052505348b8103dedacaa2a0000498b553090ff124c8b6424104d8b5c24f84d8b53f048b85100000000000000498b52189090ff124c8b4c24104d8b41f8498b78f048b8103dedacaa2a0000488b17ff12488b342440f6c6017503ff55704889f34883eb0270f4488b442408488b542410488b52f89090ff1586000000488b4c2410488b41f84c8b70f048b8103dedacaa2a0000498b16ff124c8b6c24104d8b65f84d8b5c24f048b85300000000000000498b53189090ff124c8b5424104d8b4af84d8b41f048b80100000000000000498b50104883c418ff2290|@2089,8191,@2028|40,0,@1319 67,0,@268 98,0,40 129,0,@268 201,0,@268 230,0,41 261,0,0 2088:S41|545950455f5452454528292e744469737028352964697370502832297072657474794c697374283329 2089:S43|545950455f5452454528292e74446973702835296469737050283229706172656e74686573697365283229 2090:C4,512|90909090909090483b65187303ff55484883fb01750b48b80100000000000000c34c8b33a8017503ff55704883f8017f18488b42f84c8b68f048b8d85deeacaa2a0000498b5518ff224c8b6af84d8b65f0525049ff3649ff760848ff730848b8103dedacaa2a0000498b542430909090ff124c8b5c24204d8b53f84d8b4af048b8103dedacaa2a0000498b5130909090ff124c8b442420498b78f8488b77f048ff761848bb7500000000000000488b4424189090ff156e010000488b14249090ff12488b5c2428488b53f8488b4af048b8b027edacaa2a0000488b11ff12488b442420a8017503ff55704989c64983ee0270f44c89f3488b4424104c8b6c2428498b55f8ff15260100004c8b6424284d8b5c24f84d8b53f048b80100000000000000498b52109090ff124c8b4c24084983f9017502eb3f4c8b442428498b78f8488b77f048b8103dedacaa2a0000488b16909090ff12488b5c2428488b53f8488b4af048b85900000000000000488b5118909090ff12488b4424284c8b70f84d8b6ef048b80100000000000000498b5510909090ff124c8b6424084983fc01750f48b801000000000000004883c430c34c8b5c24284d8b53f84d8b4af048b8b027edacaa2a0000498b119090ff124c8b44242041f6c0017503ff55704c89c74883ef0270f4488b5c24084889f8488b5424284883c430e90cfeffff9090909090|@2091,8191,@303,@2028|24,0,0 59,0,@1319 96,0,@268 129,0,@268 165,0,58 209,0,@257 282,0,0 326,0,@268 357,0,44 389,0,0 419,0,0 447,0,@257 2091:S35|545950455f5452454528292e7444697370283529646973705028322970526563283229 2092:S42|545950455f5452454528292e744469737028352964697370502832297072696e745443636f6e73283129 2093:C4,448|90909090909090483b65187303ff5548505349504951495249be01000000000000004883f80175054d89f5eb2e41f6c6017503ff55704d89f24983c20270f4488b40084d89d6483b65187303ff5548ebd149bd01000000000000004983fd0375654c8b54242049f7c20100000075054d8b0aeb1848b8105ff0acaa2a000090ff555849b901000000000000004c8b14244d89c84c8b4c24104c89c74c8b442408488b5c24184889f8ff153a010000488b74240848b8b027edacaa2a0000488b164883c428ff2241f6c5017503ff55704983fd037e6e4c8b64241841f6c4017503ff55704983fc037f194c8b5c240848b8d85deeacaa2a0000498b53184883c428ff224c8b5c240848b8103dedacaa2a0000498b5330909090ff124c8b54240848b85100000000000000498b5218909090ff124c8b4c240848b8103dedacaa2a0000eb05e966000000498b1190ff12488b5c2420488b442418488d542428909090ff158a0000004c8b44240848b85300000000000000498b5018909090ff12488b7c240848b80100000000000000488b5710909090ff12488b74240848b8b027edacaa2a0000488b164883c428ff2248b801000000000000004883c428c3909090|@2096,8191,@2013,@2095|26,0,0 83,0,0 118,0,@2029 132,0,0 181,0,@257 240,0,@1319 265,0,@268 289,0,40 313,0,@268 365,0,41 389,0,0 413,0,@257 432,0,0 2094:S45|50415253455f5452454528292e7074446973706c61792833297072696e74446174617479706542696e64283329 2095:C3,376|90909090909090483b65187303ff5548a8017503ff55704883f8017f144c8b72e048b8d85deeacaa2a0000498b5618ff224883fb01747248f7c30100000075054c8b33eb1e4989c648b8105ff0acaa2a000090ff55584d89f549be01000000000000005250534c8b52d84c8b4ae84c8b42e04889c34c89f0ff15220100004c8b6c24104d8b65e048b8103dedacaa2a0000498b1424909090ff124c8b1c2449f7c301000000750deb05e9bf0000004d8b5308eb1848b8105ff0acaa2a000090ff555849ba01000000000000004983fa01746d4c8b4c24104d8b41e048b85900000000000000498b5018909090ff12488b7c2410488b77e048b8b027edacaa2a0000488b16ff12488b1c2448f7c3010000007506488b5308eb1748b8105ff0acaa2a0000ff555848ba0100000000000000488b4c2408f6c1017503ff5570eb05e91a0000004889c84883e80270ed4889d3488b5424104883c418e9a9feffff48b801000000000000004883c418c348b80100000000000000c3|@2097,8191,@2013|35,0,@1319 74,0,@2029 91,0,0 137,0,@268 182,0,@2029 196,0,0 221,0,44 249,0,@257 283,0,@2029 296,0,0 352,0,0 367,0,0 2096:S28|545950455f5452454528292e7072696e745479706556617273283529 2097:S36|545950455f5452454528292e7072696e7454797065566172732835297056617273283229 2098:S7|3c456d7074793e 2099:O2|34,0 2100:C2,280|90909090909090483b65187303ff55484883f801752b495048b8103deeacaa2a0000498b50189090ff124c8b342448b8b027edacaa2a0000498b164883c408ff225253495048ff3048ff700848b82828f0acaa2a0000498b50309090ff124c8b74241841f6c6017503ff55704d89f54983ed0270f44c8b6424204c8b4424104c89eb488b442408498b542408ff124c8b5c241048b8b027edacaa2a0000498b13ff124c8b54241048b87b00000000000000498b5218909090ff124c8b4c241048b8b027edacaa2a0000498b11ff124c8b44241841f6c0017503ff55704c89c74883ef0270f4488b7424204c8b4424104889fb488b0424488b56089090ff12488b5c241048b80100000000000000488b53104883c428ff2290|@2101,8191|26,0,@1267 48,0,@257 78,0,@1992 149,0,@257 169,0,61 193,0,@257 261,0,0 2101:S40|50415253455f5452454528292e7074446973706c61792833297072696e7456616c42696e64283329 2102:C2,40|90909090909090483b65187303ff55484c8b4010488b5808488b00488b5208ff2290909090909090|@2103,8191| 2103:S40|50415253455f5452454528292e7074446973706c61792833297072696e7456616c42696e64283129 2104:C2,232|90909090909090483b65187303ff55485253495048ff3048ff700848b82828f0acaa2a0000498b5030909090ff124c8b74241841f6c6017503ff55704d89f54983ed0270f44c8b6424204c8b4424104c89eb488b442408498b542408ff124c8b5c241048b8b027edacaa2a0000498b13ff124c8b54241048b87b00000000000000498b5218909090ff124c8b4c241048b8b027edacaa2a0000498b11ff124c8b44241841f6c0017503ff55704c89c74883ef0270f4488b7424204c8b4424104889fb488b0424488b56089090ff12488b5c241048b80100000000000000488b53104883c428ff2290|@2105,8191|29,0,@1992 101,0,@257 121,0,61 145,0,@257 213,0,0 2105:S39|50415253455f5452454528292e7074446973706c61792833297072696e74436c61757365283329 2106:C2,120|90909090909090483b65187303ff55484c8b304d8d7fe84c3b7d107303ff554049c747f8020000004d89fd49bc1889f0acaa2a00004d8965004c8b62104d8965084c8b580841f6c3017503ff55704d89da4983ea0270f44d89e94d89d048bbf900000000000000498b4608488b5208ff2290909090909090|@2109,8191|45,0,@2107 95,0,124 2107:C2,40|90909090909090483b65187303ff55484c8b4010488b5808488b00488b5208ff2290909090909090|@2108,8191| 2108:S39|50415253455f5452454528292e7074446973706c61792833297072696e74436c61757365283129 2109:S41|50415253455f5452454528292e7074446973706c61792833297072696e746676616c62696e64283129 2110:O1|@2111 2111:C2,32|90909090909090483b65187303ff55484c8b304c8b6810498b06498b5518ff22|@2112,8191| 2112:S40|50415253455f5452454528292e7074446973706c61792833297072696e745374724e616d65283129 2113:S2|2829 2114:O1|@2115 2115:C3,40|90909090909090483b65187303ff55484c8b4010488b5808488b00ff252f00000090909090909090|@2117,8191,@2116| 2116:C7,288|90909090909090483b65187303ff554853495048ff3048ff700848ff701848b82828f0acaa2a0000498b5030ff1248b80100000000000000ff150a01000049ba03000000000000004c8b4c24184989c0488b5c2420488b0424909090ff15ee0000004c8b742418488b442410498b5618ff12488b44240890ff15da0000004883f8017402eb6d4c8b6c241848b8b027edacaa2a0000498b5500909090ff124c8b64241848b87b00000000000000498b5424189090ff124c8b5c241848b8b027edacaa2a0000498b13ff1248b80100000000000000ff158600000049ba03000000000000004989c14c8b442418488b5c2420eb05e90e000000488b442408909090ff15620000004c8b54241848b80100000000000000498b52104883c428ff2290|@2118,8191,@2017,@2093,@2015,@2017,@2013|32,0,@1992 48,0,0 64,0,1 141,0,@257 165,0,61 189,0,@257 204,0,0 220,0,1 269,0,0 2117:S41|50415253455f5452454528292e7074446973706c61792833297072696e745479706542696e64283129 2118:S41|50415253455f5452454528292e7074446973706c61792833297072696e745479706542696e64283329 2119:C2,40|90909090909090483b65187303ff55484c8b4010488b5808488b00488b5208ff2290909090909090|@2120,8191| 2120:S45|50415253455f5452454528292e7074446973706c61792833297072696e74446174617479706542696e64283129 2121:O1|@2122 2122:C3,40|90909090909090483b65187303ff55484c8b4010488b5808488b00ff252f00000090909090909090|@2117,8191,@2116| 2123:C2,40|90909090909090483b65187303ff55484c8b4010488b5808488b00488b5208ff2290909090909090|@2120,8191| 2124:O1|@2125 2125:C3,40|90909090909090483b65187303ff55484c8b4010488b5808488b00ff252f00000090909090909090|@2117,8191,@2116| 2126:O1|@2127 2127:C2,32|90909090909090483b65187303ff55484c8b7010488b00498b5618ff22909090|@2128,8191| 2128:S28|50415253455f5452454528292e7074446973706c6179283329283129 2129:C5,376|90909090909090483b65187303ff55485253495048ff3048ff701048ff701848b8103dedacaa2a0000498b5030909090ff124c8b742418488b442410498b5618ff12488b44240890ff15520100004883f8017402eb6d4c8b6c241848b8b027edacaa2a0000498b5500909090ff124c8b64241848b8c035eeacaa2a0000498b5424189090ff124c8b5c241848b8b027edacaa2a0000498b13ff1248b80100000000000000ff15fe00000049ba03000000000000004989c14c8b442418488b5c2420eb05e90e000000488b442408909090ff15da0000004c8b14244d8b0a4983f9f77502eb6e4c8b44241848b8b027edacaa2a0000498b1090ff12488b7c241848b87b00000000000000488b5718909090ff12488b74241848b8b027edacaa2a0000488b16ff12488b5c2420f6c3017503ff55704889da4883ea0270f4488b4c24284c8b4424184889d3488b0424488b5108eb05e902000000ff12488b4424184c8b701048b801000000000000004c89f24883c430ff229090|@2130,8191,@2015,@2017,@2013|33,0,@268 93,0,@257 117,0,@1190 141,0,@257 156,0,0 172,0,1 236,0,@257 257,0,61 281,0,@257 357,0,0 2130:S39|50415253455f5452454528292e7074446973706c61792833297072696e74457842696e64283329 2131:C2,40|90909090909090483b65187303ff55484c8b4010488b5808488b00488b5208ff2290909090909090|@2132,8191| 2132:S39|50415253455f5452454528292e7074446973706c61792833297072696e74457842696e64283129 2133:S41|535452554354555245535f28292e646973706c617953747275637473283329646973706c6179283229 2134:C4,640|90909090909090483b65187303ff5548f6c3017503ff55704883fb017f144c8b72f848b8d85deeacaa2a0000498b5618ff224883f801750b48b80100000000000000c34c8b70084983fe0175704c8b284c8b62f8525349ff750049ff750848b8103dedacaa2a0000498b542430909090ff124c8b5c24184d8b53f849ff721848bbd021f0acaa2a0000488b4424109090ff1512020000488b14249090ff124c8b4c24204d8b41f848b8b027edacaa2a0000498b10ff12488b7c2418eb05e94d00000040f6c7017503ff55704889fe4883ee0270f4488b5c24204c8b43f84889f3488b44240848baf84af0acaa2a000090ff12488b542420488b4af848b80100000000000000488b51104883c428ff224c8b284c8b62f85253495649ff750049ff750848b8103dedacaa2a0000498b542430909090ff124c8b5c24204d8b53f848b8103dedacaa2a0000498b5230909090ff124c8b4c24204d8b41f849ff701848bbd021f0acaa2a0000488b4424109090ff153a010000488b14249090ff12488b7c2428488b77f848b8b027edacaa2a0000488b16ff12488b5c2420f6c3017503ff55704889da4883ea0270f4488b4c24284c8b41f84889d3488b44240848baf84af0acaa2a000090ff12488b4424284c8b70f848b80100000000000000498b5610909090ff124c8b6c24284d8b65f848b8103dedacaa2a0000498b1424909090ff124c8b5c24284d8b53f848b85900000000000000498b5218909090ff124c8b4c24284d8b41f848b80100000000000000498b5010909090ff12488b7c2428488b77f848b8b027edacaa2a0000488b16ff12488b5c2420f6c3017503ff55704889da4883ea0270f44889d3488b442418488b5424284883c430e989fdffff9090|@2145,8191,@303,@303|36,0,@1319 58,0,0 96,0,@268 129,0,@1980 169,0,@257 231,0,@2007 253,0,0 292,0,@268 321,0,@268 353,0,@1980 393,0,@257 447,0,@2007 469,0,0 497,0,@268 525,0,44 553,0,0 581,0,@257 2135:S25|50415253455f5452454528292e7074446973706c6179283329 2136:C2,8|488b00c390909090|@2137,1| 2137:S24|5354525543545f56414c5328292e76616c4e616d65283129 2138:C2,200|90909090909090483b65187303ff554848f7c001000000756d4c8b3050505349ff3649ff7608488d5c2418488b40089090e8d1ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fb488b442418488943084c8b7424084c89334d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b7424204c8970084c8b3424eb05e91e0000004c89304c8b74241049891e4989460848b801000000000000004883c428c348c7030100000048c743080100000048b80100000000000000c39090909090|@2139,4105|156,0,0 186,0,0 2139:S17|4c697374506169722e756e7a6970283229 2140:C2,200|90909090909090483b65187303ff554848f7c001000000756d4c8b3050505349ff3649ff7608488d5c2418488b40089090e8d1ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fb488b442418488943084c8b7424084c89334d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b7424204c8970084c8b3424eb05e91e0000004c89304c8b74241049891e4989460848b801000000000000004883c428c348c7030100000048c743080100000048b80100000000000000c39090909090|@2139,4105|156,0,0 186,0,0 2141:C2,200|90909090909090483b65187303ff554848f7c001000000756d4c8b3050505349ff3649ff7608488d5c2418488b40089090e8d1ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fb488b442418488943084c8b7424084c89334d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b7424204c8970084c8b3424eb05e91e0000004c89304c8b74241049891e4989460848b801000000000000004883c428c348c7030100000048c743080100000048b80100000000000000c39090909090|@2139,4105|156,0,0 186,0,0 2142:C2,200|90909090909090483b65187303ff554848f7c001000000756d4c8b3050505349ff3649ff7608488d5c2418488b40089090e8d1ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fb488b442418488943084c8b7424084c89334d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b7424204c8970084c8b3424eb05e91e0000004c89304c8b74241049891e4989460848b801000000000000004883c428c348c7030100000048c743080100000048b80100000000000000c39090909090|@2139,4105|156,0,0 186,0,0 2143:C4,320|90909090909090483b65187303ff5548488b184883fb03751048b8e03aeeacaa2a0000498b5018ff224883fb01756d495048ff700848b8103dedacaa2a0000498b503090ff12488b54240848b8f838eeacaa2a0000488b5218909090ff12488b4c240848b8b027edacaa2a0000488b11ff12488b44240848ff701848bbffffffffffffffff488b4424089090ff15d6000000488b14249090ff12eb05e9190000004c8b74241048b80100000000000000498b56104883c418ff22495048ff700848b8103dedacaa2a0000498b50309090ff12488b54240848b8203aeeacaa2a0000488b5218909090ff12488b4c240848b8b027edacaa2a0000488b11ff12488b44240848ff701848bbffffffffffffffff488b4424089090ff1552000000488b14249090ff124c8b74241048b80100000000000000498b56104883c418ff2290|@2144,8191,@305,@305|27,0,@1244 55,0,@268 77,0,@1224 101,0,@257 125,0,-1 168,0,0 194,0,@268 217,0,@1236 241,0,@257 265,0,-1 301,0,0 2144:S31|56414c55455f4f505328292e646973706c6179466978537461747573283329 2145:S42|50415253455f5452454528292e7074446973706c6179283329646973706c61795265634c697374283229 2146:C2,32|90909090909090483b65187303ff5548488b5808488b00488b5208ff22909090|@1985,8191| 2147:S29|535452554354555245535f28292e6572726f724e656172283529283129 2148:S31|535452554354555245535f28292e646973706c617953747275637473283329 2149:S71|535452554354555245535f28292e7061737332537472756374732833297061737332537472756374283529706173733253747275637475726544656328322973456e762d283129 2150:S26|535452554354555245535f28292e6572726f724e656172283529 2151:C19,744|90909090909090488dbc2460ffffff483b7d187303ff55504c8b72e052505349504951495249ff76d849ff76f0498b46e8909090ff15d602000048bb5d00000000000000ff15ce0200004c8b5424204c8b4c24084c8b0424488b5c24304c8b6c2438498b55e09090ff15b20200004c8b6424484d8b14244983fa0175054989c3eb714c8b4c24384d8b41e0498b78d8488b3740f6c6017503ff55704883fe017e054889f3eb0a48bb0100000000000000505349ff70f0488b5c2440498b40e890ff156202000048bb5d00000000000000ff155a0200004989c24c8b4c24484c8b0424488b5c2408488b442460488b542450eb05e98d010000488b52e0ff15360200004889c14889c8ff15320200004989c64889c8ff152e02000050504989c94989e04889c34c89f0ff15220200004d8d7fe84c3b7d107303ff554049c747f8020000004d89f8488b3c24498938488b742408498970084d8d7fe84c3b7d107303ff554049c747f8020000004c89fb48bae8a0f0acaa2a00004889134c894b08488b4c24404883f901745b4c89c8909090ff15c20100004989c64c89c8ff15be01000050504c89c6534c8d4424084889c34c89f090ff15ae0100004d8d7fe84c3b7d107303ff554049c747f8020000004c89f8488b5c2408488918488b54241048895008eb094c89c05050534c89c64c8b7424784d8b6ee04d8b65f849515049ff7424f84c8b9424880000004d8b4ed84989f0488b5c2410488b442450ff154e0100004c8b9c24880000004d8b53e049ff72e0488b9c2480000000498b42e89090ff153201000048bb5d00000000000000ff152a0100004989c24c8b4c24084c8b0424488b5c2418488b44241048ba10a4f0acaa2a00009090ff150a0100004989c34883c4584c89db488b442428909090ff15fa0000004c8b4c24384989c04d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c894008488b7c24284889384950498b51f0ff12488b742418488b1c2448891e48b801000000000000004883c448c2080090|@2343,8191,@303,@303,@2344,@303,@303,@2649,@2155,@2208,@2642,@2155,@2208,@2642,@2422,@303,@303,@2162,@2342|60,0,46 168,0,0 200,0,46 368,0,@2152 584,0,46 622,0,@2160 728,0,0 2152:C4,224|90909090909090483b65187303ff55484989d14989c04c89c0909090ff15e60000004883f801746e4951498b104883fafd752d498b40084c8b304d8b2e4983fd0375054c89c7eb1b4d89f0483b65187303ff5548ebd448bf01000000000000004c89c7488b074883f8017506488b4f08eb1a48b810a2f0acaa2a0000909090ff555848b901000000000000004c8b3424498b4608eb05e93700000090ff156e000000514823c8f6c101597503ff5570483bc87c0f48b803000000000000004883c408c348b801000000000000004883c408c348b80100000000000000c3909090|@2156,8167,@2157,@2155|88,0,0 116,0,@2153 132,0,0 182,0,1 197,0,0 212,0,0 2153:O3|@7377,@215,@2154 2154:S21|6f666673657449643a206e6f74206120426f756e64 2155:C2,8|488b4018c3909090|@2159,1| 2156:S109|535452554354555245535f28292e70617373325374727563747328332970617373325374727563742835297061737332537472756374757265446563283229706173733253747275637475726542696e64283629726573756c745369672d6d757374436f707954797065283129 2157:C2,96|4c8b284983fdfd752e4c8b60084d8b1c244d8b134983fa0375054989c6eb1b4c89d8483b65187303ff5548ebd349be01000000000000004989c64d8b264983fc01750b48b80300000000000000c348b80100000000000000c390909090909090|@2158,7937|47,0,0 69,0,1 80,0,0 2158:S26|5354525543545f56414c5328292e6973426f756e644964283129 2159:S28|5354525543545f56414c5328292e7369674d696e5479706573283129 2160:O2|@2162,@2161 2161:O2|@2211,@2160 2162:C9,472|90909090909090483b65187303ff55484989d64989c54c89e8909090ff15de01000049564955534950495149525048b81500000000000000ff15ca0100004d8d7fd84c3b7d107303ff554049c747f8040000004d89fc49c74424180100000049c7442410010000004c8b1c244d895c2408498904244989c24c89e090ff158e0100004d8d7fe84c3b7d107303ff554049c747f8020000004d89f949b888a6f0acaa2a00004d8901498941084d8d7fe84c3b7d107303ff554049c747f8020000004c89ff48be68b2f0acaa2a0000488937488947084d8d7fe84c3b7d107303ff554049c747f8020000004c89fb48ba80b4f0acaa2a0000488913488943084d8d7fe04c3b7d107303ff554049c747f8030000004c89f9488979104c894908488919488b4424304952495448ff74242048ff7424204c8b5424384c8b4c24404989c8488b5c24484c8b700848b801000000000000004c89f29090ff12488b44243890ff15b20000004989c5488b0424909090ff15aa0000004989c4488b0424909090ff15a20000004955495450488b442420ff159a0000004d8d7fd84c3b7d107303ff554049c747f8040000004d89fb4c8b5424084d8953184c8b0c244d894b104c8b4424104d8943084989034c89d84883c460c39090909090|@2203,8191,@2204,@1852,@2206,@2204,@2155,@2208,@2202|48,0,10 156,0,@2163 197,0,@2186 238,0,@2194 331,0,0 2163:C3,48|90909090909090483b65187303ff55484c8b48084c8b0048bbf8a6f0acaa2a0000488b4208ff252d0000009090909090|@2172,8191,@2171|25,0,@2164 2164:O3|@2166,@2168,@2165 2165:O2|@2170,@7387 2166:O2|@2167,@7387 2167:C2,48|4c8b304c8b6a084d3bf5751648b80300000000000000c348b80100000000000000c348b80100000000000000c3909090|@966,6149|14,0,1 25,0,0 36,0,0 2168:O2|@2169,@7387 2169:C2,48|4989c64d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c89701048c740088b0000004c8b72084c8930c390|@966,4101| 2170:C2,56|4c8b304c8b6a084d3bf57510488b4010c348b80100000000000000c348b8b0d7edacaa2a000090ff555848b8010000000000000090909090|@966,6149|19,0,0 30,0,@970 44,0,0 2171:C5,144|90909090909090483b65187303ff5548505349504c89c8488b530890ff1250488b5c2408488b442418909090ff158600000048f7c0010000007514488b00488d54242090ff15760000004989c6eb274d8d7fe84c3b7d107303ff554049c747f8020000004d89fe49c74608010000004c8b2c244d892e4d89f0488b5c2408488b4424184883c420ff253b000000909090|@2176,8191,@1277,@2177,@2173| 2172:S36|535452554354555245535f28292e636f70795369672835296c617374416464722d283129 2173:C6,584|90909090909090483b65187303ff55484c8b304983fe01756348b858acf0acaa2a000090ff154602000048bb90acf0acaa2a0000ff153e0200004d8d7fe04c3b7d107303ff554049c747f8030000004d89fd4989451049bca051edacaa2a00004d89650849c74500cf0000004c89e8ff555848b801000000000000004c8b68184d8b65004d8b1c244c8b50084d8b0a534950495248ff70104955495449534889d84c89caff124d8d7fe84c3b7d107303ff554049c747f8020000004d89f8488b7c242849897808488b7424304989304889c3488b44240890ff15a2010000488b5c2418488b13f6c2017503ff55704889d14883c10270f448890b488b0349be0b000000000000004989c54d23ee41f6c5017503ff557050524889c248d1fa498d46ff48f7ea4c8d68015a5870e64c8b242449bb09000000000000004d89e24d23d341f6c2017503ff557050524c89e248d1fa498d43ff48f7ea4c8d50015a5870e649524d23d541f6c201495a7503ff55704d3bea7e7341f6c4017503ff55704d8d4c24ff4d03cc70f341f6c1017503ff55704d89c84983c00270f44c89c749b8010000000000000048bb81000000000000004889f848ba701560000000000090ff124c89084d8d7fe84c3b7d107303ff554049c747f8020000004c89fe48bbf000edacaa2a0000eb05e94500000048891e4c894e08495150488b542420488902488b4c2430488931488b4424184c8b3041f6c6017503ff55704c89f04883e80270f4488d54244890ff155a0000004883c448c348b801000000000000004883c438c3909090909090|@2180,8191,@303,@303,@2181,@2179|27,0,@2174 44,0,@2175 88,0,@333 116,0,0 255,0,5 307,0,4 416,0,0 426,0,64 439,0,I11 479,0,@165 565,0,0 2174:S34|417474656d707420746f2073657420612076616c75652077697468206e616d652028 2175:S24|2920696e20612066726f7a656e2068617368207461626c65 2176:S27|556e6976657273616c5461626c652e756e6976456e746572283429 2177:C2,208|90909090909090483b65187303ff55484883f80175284d8d7fe84c3b7d107303ff554049c747f8020000004c89f848c74008010000004c8b72e04c8930c34c8b72f05248ff3048ff7008488b442408498b169090ff124883f80174364c8b6c24104d8d7fe84c3b7d107303ff554049c747f8020000004d89fc4c8b1c244d895c24084d8b55e04d8914244c89e04883c418c3488b0424488b5424109090e865ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fd498945084c8b6424084d8965004c89e84883c418c390|@2178,8191| 2178:S36|556e6976657273616c5461626c652e756e6976456e746572283429736561726368283129 2179:C4,224|90909090909090483b65187303ff5548a8017503ff55704883f8017d0b48b80100000000000000c3a8017503ff55704883f8017d02eb1a4c8b72d04d8b2e504923c5a801587503ff5570493bc57d02eb1b4989c548b860d6ecacaa2a000090ff555849be0100000000000000a8017503ff55704989c54983c50270f44f8b64aefc4d89e64983fe017502eb2f4989d34989c24d89f1498b5bc0498b01ff156600000049534d89c84889c3498b43b89090ff155a0000004c89d0eb0152a8017503ff55704989c34983eb0270f44c89d8488b14244883c408e92bffffff90909090|@2185,8191,@166,@2181|31,0,0 86,0,@49 100,0,0 2180:S20|486173685461626c652e68617368536574283329 2181:C3,64|90909090909090483b65187303ff55484983f801750b48b80100000000000000c349505049ff304889d8488d54241890ff15320000004883c418c39090909090|@2183,7807,@2182|24,0,0 2182:C2,416|90909090909090483b65187303ff5548a8017503ff55704883f8017d02eb1a4c8b72f04d8b2e504923c5a801587503ff5570493bc57d02eb1b4989c548b860d6ecacaa2a000090ff555849be0100000000000000a8017503ff55704989c54983c50270f44f8b64aefc4d89e64983fe017566a8017503ff55704883f8017d02eb1a4c8b72f04d8b2e504923c5a801587503ff5570493bc57d02eb1948b860d6ecacaa2a00009090ff555848b80100000000000000a8017503ff55704989c44983c40270f4488b42f84b8944a6fc48b80100000000000000c34989d54989c4498b5de8498b0648bab01860000000000090ff124883f801746f41f6c4017503ff55704983fc017d02eb1e498b7df0488b3749544c23e641f6c401495c7503ff55704c3be67d02eb1948b860d6ecacaa2a00009090ff555848b8010000000000000041f6c4017503ff55704c89e34883c30270f4498b55f84889549ffc48b80100000000000000eb05e901000000c34983fc01750c498b7df0488b374989f3eb034d89e341f6c3017503ff55704c89d84883e80270f44c89eae96bfeffff90909090|@2184,7743|62,0,@49 76,0,0 157,0,@49 172,0,0 207,0,0 231,0,I24 297,0,@49 312,0,0 349,0,0 2183:S31|486173685461626c652e68617368536574283329656e746572546162283329 2184:S39|486173685461626c652e68617368536574283329656e746572546162283329656e746572283129 2185:S31|486173685461626c652e68617368536574283329636f70794f766572283129 2186:C3,48|90909090909090483b65187303ff55484c8b48084c8b0048bbd8b2f0acaa2a0000488b4208ff252d0000009090909090|@2172,8191,@2171|25,0,@2187 2187:O3|@2189,@2191,@2188 2188:O2|@2193,@7392 2189:O2|@2190,@7392 2190:C2,48|4c8b304c8b6a084d3bf5751648b80300000000000000c348b80100000000000000c348b80100000000000000c3909090|@966,6149|14,0,1 25,0,0 36,0,0 2191:O2|@2192,@7392 2192:C2,48|4989c64d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c89701048c740088b0000004c8b72084c8930c390|@966,4101| 2193:C2,56|4c8b304c8b6a084d3bf57510488b4010c348b80100000000000000c348b8b0d7edacaa2a000090ff555848b8010000000000000090909090|@966,6149|19,0,0 30,0,@970 44,0,0 2194:C3,48|90909090909090483b65187303ff55484c8b48084c8b0048bbf0b4f0acaa2a0000488b4208ff252d0000009090909090|@2172,8191,@2171|25,0,@2195 2195:O3|@2197,@2199,@2196 2196:O2|@2201,@7374 2197:O2|@2198,@7374 2198:C2,48|4c8b304c8b6a084d3bf5751648b80300000000000000c348b80100000000000000c348b80100000000000000c3909090|@966,6149|14,0,1 25,0,0 36,0,0 2199:O2|@2200,@7374 2200:C2,48|4989c64d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c89701048c740088b0000004c8b72084c8930c390|@966,4101| 2201:C2,56|4c8b304c8b6a084d3bf57510488b4010c348b80100000000000000c348b8b0d7edacaa2a000090ff555848b8010000000000000090909090|@966,6149|19,0,0 30,0,@970 44,0,0 2202:C2,304|90909090909090483b65187303ff55484c8b304983feff756f4c8b68084d8b65004c8b58184d8b134d8b0a4983f901750c49b8f01e600000000000eb5649544952495148ff750848bf32b7f0acaa2a0000576a014889650849b8010000000000000048bb01000000000000004c89c848ba7015600000000000909090ff124889c648ff742410eb05e9a1000000488f4508eb21e964000000909048b840e3ecacaa2a0000909090ff555848be0100000000000000564d89ca49b901000000000000004989f048bb0300000000000000488b44242848ba70436000000000009090ff12488b042448ba701e600000000000ff124c8b04244883c430eb0249544d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c894010488b3c244889780848c700010000004883c408c3c390|@2210,8191|51,0,I49 73,0,$2202+154 90,0,0 100,0,0 113,0,I11 156,0,@69 172,0,0 186,0,0 199,0,1 214,0,I195 232,0,I47 2203:S24|535452554354555245535f28292e636f7079536967283529 2204:C2,8|488b4008c3909090|@2205,1| 2205:S24|5354525543545f56414c5328292e7369674e616d65283129 2206:C2,8|488b00c390909090|@2207,1| 2207:S23|5354525543545f56414c5328292e736967546162283129 2208:C2,8|488b4010c3909090|@2209,1| 2209:S28|5354525543545f56414c5328292e7369674d61785479706573283129 2210:S23|486173685461626c652e68617368467265657a65283129 2211:C5,312|90909090909090483b65187303ff55484d8d7fd04c3b7d107303ff554049c747f8050000004d89fe49bd18bbf0acaa2a00004d892e4d894e204d8956184c8b6c24104d896e104c8b6424084d89660852505349504951495249564d89e24d89e94c8b442408488b5c2410488b44242090ff15ea000000488b44242090ff15e60000004c8b5c24304d8d7fb04c3b7d107303ff554049c747f8090000004d89fa49b9a8caf0acaa2a00004d890a4c8b04244d894240488b7c241049897a38488b74240849897230488b5c244849895a28488b54244049895220498b4b0849894a184c8b7424284d8972104c8b6c24184d896a084d8d7fe84c3b7d107303ff554049c747f8020000004d89fc49b928e8f0acaa2a00004d890c244d895424084d89f04c89e3488b7c24384883c45057ff253d0000009090909090|@2286,8191,@2287,@2206,@2285|42,0,@2212 161,0,@2243 268,0,@2283 2212:C3,64|90909090909090483b65187303ff55484c8b72084c8b2c244c89342449ba98bbf0acaa2a00004c8b4a104c8b4218488b5a204955ff252e000000909090909090|@2223,8191,@2216|30,0,@2213 2213:O1|@2214 2214:C2,8|c390909090909090|@2215,1| 2215:S46|535452554354555245535f28292e66756c6c436f7079536967283729636f707954797065436f6e73283129283129 2216:C14,528|90909090909090483b65187303ff55484989c24c89d09090ff151a0200004889c74c89d0ff15160200004989c54c89e8ff15120200004883f80174054d89eceb6f4d8d7fc84c3b7d107303ff554049c747f8060000004d89fc49bbd0bef0acaa2a00004d891c2449895c24284d894424204d894c2418488b542408498954241048b800c0f0acaa2a00004989442408495253495049ff3149ff71085749554d89e048bb48bff0acaa2a00004c89e8eb05e90e000000909090ff15920100004989c4eb0f495253495049ff3149ff71085749554954488b442410488b5424309090ff124883f8017402eb104c8b5c24084c8b14244d3bda7502eb61488b442410488b542418ff1248f7c001000000750a488b004883c440c20800488b4424089090ff15320100004883f8017434488b442438909090ff152601000050504889e390ff1522010000488b5c2408488b442458ff151a0100004989c3eb18e99d000000488b442438909090ff150a0100004989c35050488b442448ff150201000049535048b80100000000000000488b542448ff124989c2488b4424589090ff15e60000006a014d89d14989c24c8b442428488b5c2408488b442410909090ff15ce0000004989c04d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c894008488b7c24304889384950488b542448ff12488b04244883c468c20800488b4424384883c440c2080090909090909090|@2225,8191,@1461,@2226,@2015,@2228,@2015,@2066,@2068,@303,@2066,@2239,@2241,@2224|91,0,@2217 130,0,@2222 163,0,@2218 387,0,0 2217:C2,64|90909090909090483b65187303ff55484c8b72104c8b2c244c89342449ba48bff0acaa2a00004c8b4a184c8b4220488b5a28488b52084955ff22909090909090|@2221,8191|30,0,@2218 2218:O1|@2219 2219:C2,8|c390909090909090|@2220,1| 2220:S22|545950455f5452454528292e747269764d6170283129 2221:S44|545950455f5452454528292e636f707954797065436f6e737472283629636f7069656445717569762d283129 2222:O1|@2216 2223:S43|535452554354555245535f28292e66756c6c436f7079536967283729636f707954797065436f6e73283129 2224:C2,272|505349504951495249be01000000000000004883fb0175054d89f5eb2e41f6c6017503ff55704d89f24983c20270f4488b5b084d89d6483b65187303ff5548ebd149bd01000000000000004d8d7fe04c3b7d107303ff554049c747f8030000004d89fa49c74210010000004c8b4c24104d894a084c8b04244d89024d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89fb4c89134d8d7fe84c3b7d107303ff554049c747f8020000004c89f84889580848c700ffffffff4d8d7fc84c3b7d107303ff554049c747f8060000004d89fe4c8b5424084d895628498946204c8b4c24184d894e184c8b4424304d8946104d896e08488b5c242049891e4c89f04883c428c208009090909090|@2242,6601|10,0,0 67,0,0 2225:S29|545950455f5452454528292e636f707954797065436f6e737472283629 2226:C2,40|4c8b70204d8b264983fc0175064d8b6e08eb0b4d8b6e084d8b5d004d89dd498b4508c39090909090|@2227,7681| 2227:S7|6f283229283129 2228:C24,824|90909090909090483b65187303ff554849505390ff15460300004989c54c89e8ff15420300004883f801741b4d89ec4c89e09090ff15360300004c89e0488b14244883c410ff224c89e89090ff15260300004883f801746a4d89eb4c89d89090ff151a030000495348ff3048ff7010488b442408488d542428909090ff15060300004989c2488b0424909090ff15fe0200004952488b542428909090ff124989c14c89c8ff15ee0200004c8b0424488b7c24104c3bc7752b4889c6488b442408eb05e9de00000090ff15d20200004c3bc8751f488b5c2408488b134883fa017511eb054889c6eb0a488b4424184883c430c350504c89c890ff15aa0200009090ff15aa0200004883f80174334d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89fb4c890b4889e248c702ffffffff4889e148895908eb114889e348c703010000004889e24c894a084d8d7fe84c3b7d107303ff554049c747f8020000004c89f9488b04244889014c8b7424084c8971084d8d7fe04c3b7d107303ff554049c747f8030000004c89f848894810488970084c89004883c440ff25130200004c89e8ff15120200004883f80174684d89ec4c89e09090ff1506020000495448ff3048ff70084c8b442420488b5c2418488b442408909090e825feffff504c8b442428488b5c2420488b442408909090e80dfeffff4c8b1c244c8b5424104d3bda75194c8b4c2408493bc1750f488b4424184883c430c3e92c0000004989c14d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8948084c89184883c430ff25830100004c89e8ff15820100004883f801746a4d89eb4c89d89090ff1576010000495348ff3048ff7008488b0424488d542428ff15660100004c8b1424493bc2750a488b4424104883c428c34989c14d8d7fe04c3b7d107303ff554049c747f8030000004c89f848c74010010000004c8948084c8b4424084c8900eb05e90a0000004883c428ff251b0100004c89e8ff151a0100004883f801740f48b8e005edacaa2a00004883c410c34c89e89090ff15020100004883f801740f48b878a6edacaa2a00004883c410c34c89e89090ff15ea00000048b860c6f0acaa2a0000909090ff555848b80100000000000000|@2232,8191,@2039,@1458,@1459,@2062,@2063,@2233,@2064,@2066,@2064,@1461,@1463,@1465,@2084,@2085,@1404,@2046,@2047,@2236,@1456,@2015,@2231,@2042|742,0,@193 774,0,@617 800,0,@2229 816,0,0 2229:O3|@7377,@215,@2230 2230:S27|636f7079547970653a204f7665726c6f616453657420666f756e64 2231:C2,32|4c8b304983fe01750b48b80300000000000000c348b80100000000000000c390|@2238,4097|11,0,1 22,0,0 2232:S23|545950455f5452454528292e636f707954797065283329 2233:C2,168|90909090909090483b65187303ff55484883f801750b48b80100000000000000c3525048ff3048ff70084c8b42f8488b5af0488b44240848ba10c8f0acaa2a0000909090ff1250488b442408488b542420e8b1ffffff4c8b34244c8b6c24104d3bf575144c8b642408493bc4750a488b4424184883c428c34d8d7fe84c3b7d107303ff554049c747f8020000004d89fc49894424084d8934244c89e04883c428c390909090909090|@2235,8191|24,0,0 57,0,@2234 2234:O1|@2228 2235:S34|545950455f5452454528292e636f707954797065283329636f70794c697374283129 2236:C2,200|90909090909090483b65187303ff55484883f801750b48b80100000000000000c34c8b30525049ff3649ff760848ff70084c8b42f8488b5af0488b44240848ba10c8f0acaa2a0000ff1250488b442408488b542428e8adffffff4c8b2c244c8b6424104d3bec75144c8b5c2408493bc3750a488b4424204883c430c34d8d7fe84c3b7d107303ff554049c747f8020000004d89fb4d896b084c8b5424184d89134d8d7fe84c3b7d107303ff554049c747f8020000004d89f9498941084d89194c89c84883c430c390|@2237,8191|24,0,0 64,0,@2234 2237:S40|545950455f5452454528292e636f707954797065283329636f70795265636f72644c697374283129 2238:S7|42616454797065 2239:C2,8|488b4018c3909090|@2240,1| 2240:S27|5354525543545f56414c5328292e74635479706556617273283129 2241:C2,40|4c8b70204d8b264983fc0175064d8b6e08eb0b4d8b6e084d8b5d004d89dd498b4500c39090909090|@2227,7681| 2242:S32|5354525543545f56414c5328292e6d616b6554797065436f6e73747273283629 2243:C32,1736|90909090909090483b65187303ff55484989d44989c34889d848ba10b3f0acaa2a000090ff15c60600004883f801746e4889d848baf8b2f0acaa2a0000909090ff15b20600004883f80175574954495349505048b81500000000000000909090ff159a0600004d8d7fd84c3b7d107303ff554049c747f8040000004d89f949c741180100000049c741100100000049b8b01e6000000000004d894108eb0ae95f010000e9080000004989014d89caeb0b4c8b5010495449534950504c8b4c2418495249ff713849ff713049ff7128488b5c2430498b412090ff152a06000048bb5d00000000000000ff15220600004c8b4424384989c24c8b0c24498b78184c8b442408488b5c2410488b4424184889faff124889c6488b4424209090ff15f60500009090ff15f60500004883f8017438488b442420909090ff15ea0500009090ff15ea050000488b542438488b4a104889c34823d9f6c3017503ff5570488d58ff4803d970f4eb05488b5c2428488b4424209090ff15be0500004889d94989c84889f390ff15b60500004c8b7424384d8b6e084989c44d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8960084c8b5c24304c891851498b551090ff124c8b142441f6c2017503ff55704d89d14983c10270f44c8b44243049504d23c141f6c00149587503ff55704d3bc17e084c89c04883c448c34c89c84883c448c34889d848ba30a7f0acaa2a000090ff15320500004883f80174714d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fa4d89024889d848ba18a7f0acaa2a0000909090ff15fe04000049544953495049525049ff74242049ba98bbf0acaa2a00004d8b4c24284d8b442430498b5c2438909090ff15d60400004c8b0c24493bc17513eb05e9f701000049b80300000000000000eb0a49b801000000000000004c89c74883f7024d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89fe48893e4889c34c89c8909090ff15820400004889c14889d8ff157e0400004989db4889cbff157a0400004d8d7fe84c3b7d107303ff554049c747f8020000004d89fa49b898d2f0acaa2a00004d8902498942084c89df4c89c8909090ff154a04000056495257488d54244090ff1542040000488b742410488b1e4883fb01746f4889c1488b042490ff152e0400004883f8017460488b0424ff15260400004989c6488b0424909090ff151e0400004989c5488b0424909090ff15160400004d89f24d89e94989c0488b042490ff150a0400006a014c89d74989c24c89ce4d89c149b8e005edacaa2a00004889f3eb0ae95c000000e90b0000004889f8ff15e2030000eb04488b04244989c24889cb4c89d0909090ff15d20300004c8b4c24384d8b41084d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c895008488b7c2430488938498b500890ff12eb3a488b542438488b4a084d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b34244c8970084c8b6c24304c8928488b5108909090ff124c8b6424204d8b1c244c8b54242849524d23d341f6c201495a7503ff55704d3bd37e084c89d04883c440c34c89d84883c440c34889d848ba28b5f0acaa2a00009090ff15220300004883f801746d4889d848ba10b5f0acaa2a0000909090ff150e0300004c8b50104d8b0a4983f901756f495449505049ff720848ff3048ff700848ff70184d8b44244048bbf0d3f0acaa2a0000488b04249090ff15da0200004c8b442430488b7c2418498b70104889fb4823def6c301750aeb05e9ae010000ff5570488d5fff4803de70ed53480bdff6c3015b7503ff5570483bfb7407eb10e9d7000000488b1424483bc27502eb594d8d7fe84c3b7d107303ff554049c747f8020000004c89f94889590848c701010000004d8d7fd84c3b7d107303ff554049c747f8040000004d89fe4989461849894e104c8b6c24084d896e084c8b6424104d89264c89f2eb05488b542420498b48084d8d7fe84c3b7d107303ff554049c747f8020000004c89f8488950084c8b7424104c893053488b11ff124c8b2c2441f6c5017503ff55704d89ec4983c40270f44c8b5c243049534d23dc41f6c301495b7503ff55704d3bdc7e084c89d84883c440c34c89e04883c440c34954495050495248ff3048ff700848ff70184d8b44244048bbf0d3f0acaa2a0000488b042490ff159a0100004c8b0424493bc0743b4d8d7fd84c3b7d107303ff554049c747f8040000004c89fe48894618488b5c241848895e10488b54240848895608488b4c241048890e4889f7eb05488b7c2420488b742430488b5e084d8d7fe84c3b7d107303ff554049c747f8020000004c89f848897808488b542410488910488b1390ff12488b4424284883c438c34c89c0c3|@2252,8191,@2190,@2193,@1852,@303,@303,@2253,@2255,@2253,@2257,@2259,@2261,@2167,@2170,@2216,@2239,@2239,@2263,@2265,@2266,@2265,@2066,@2239,@1461,@2241,@2224,@2249,@2198,@2201,@2228,@2228|27,0,@2189 53,0,@2188 85,0,10 144,0,I48 224,0,46 519,0,@2166 577,0,@2165 610,0,@2213 660,0,1 672,0,0 784,0,@2244 942,0,@193 1166,0,@2197 1193,0,@2196 1250,0,@2246 1579,0,@2246 2244:C7,184|90909090909090483b65187303ff5548504c8b72084983fe017509488b04244883c408c3498b16488b0a4c8b6a084d8b6608488b04249090ff15a20000004883f80174424d89eb488b042490ff15960000004989c54889c8ff15920000004883f801742f4d89ea4889c89090ff15860000004889c34c89d0ff15820000004883f801740feb054d89ebeb084c89d84883c408c34d89e6483b65187303ff5548e971ffffff48b801000000000000004883c408c39090909090|@2245,7951,@1458,@1459,@1458,@1459,@2022|166,0,0 2245:S45|535452554354555245535f28292e66756c6c436f7079536967283729283329636f707954797065566172283129 2246:O1|@2247 2247:C2,8|c390909090909090|@2248,1| 2248:S41|535452554354555245535f28292e66756c6c436f7079536967283729636f7079547970283129283129 2249:C2,120|4c8b70204d8b264983fc0175064d8b6e08eb0b4d8b6e084d8b5d004d89dd4d8d7fe04c3b7d107303ff554049c747f8030000004d89fb49895b10498b5d0849895b08498b55004989134983fcff7512498b4e084c891948b80100000000000000c348b830d5f0acaa2a0000ff555848b80100000000000000|@2282,7695|88,0,0 99,0,@2250 112,0,0 2250:O3|103,@333,@2251 2251:S24|41737369676e6d656e7420746f2066726f7a656e20726566 2252:S31|535452554354555245535f28292e66756c6c436f7079536967283729283329 2253:C2,40|4883f801751a48b8b0d7edacaa2a0000909090ff555848b80100000000000000488b4008c3909090|@2254,1|8,0,@970 24,0,0 2254:S29|5354525543545f56414c5328292e737472756374416363657373283129 2255:C2,32|4c8b304983fe01750b48b80300000000000000c348b80100000000000000c390|@2256,4097|11,0,1 22,0,0 2256:S25|5354525543545f56414c5328292e6973466f726d616c283129 2257:C2,40|4c8b304983fe017505488b4008c348b8b0d7edacaa2a0000909090ff555848b80100000000000000|@2258,4097|16,0,@970 32,0,0 2258:S25|5354525543545f56414c5328292e7661466f726d616c283129 2259:C2,24|4883f801750b48b8b01e600000000000c3488b00c3909090|@2260,1|8,0,I48 2260:S27|5354525543545f56414c5328292e7374727563744e616d65283129 2261:C2,80|4d8d7fe84c3b7d107303ff554049c747f8020000004d89fe4d89460849c706010000004d8d7fe04c3b7d107303ff554049c747f8030000004d89f8498958104d8970084989004c89c0c3909090909090|@2262,4169| 2262:S33|5354525543545f56414c5328292e6d616b65466f726d616c537472756374283329 2263:C2,160|90909090909090483b65187303ff554848f7c301000000756848f7c00100000075644d8d7fe84c3b7d107303ff554049c747f8020000004d89fe4c8b284d896e084c8b234d89264956488b5b08488b4008e8b1ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fb48894308488b04244889034889d84883c408c3e90b00000048b80100000000000000c348b80100000000000000c390909090|@2264,7177|136,0,0 147,0,0 2264:S45|535452554354555245535f28292e66756c6c436f70795369672837292833297a69705479706556617273283229 2265:C2,40|4c8b70204d8b264983fc0175064d8b6e08eb0b4d8b6e084d8b5d004d89dd498b4510c39090909090|@2227,7681| 2266:C6,592|90909090909090483b65187303ff55484883f801750b48b80100000000000000c34c8b304c8b6af852495648ff700849ff3649ff760849ff761049ff76184d8b4540488b5ac8488b04249090ff15260200004c8b2424493bc4750c49bb0300000000000000eb0a49bb01000000000000004d89da4983f20250504c8b4c24184d8b014983f801755b488b7c2440488b77f8498b5908488b56104889d94823caf6c1017503ff5570488d4bff4803ca70f4f6c1017503ff55704989ce4983c60270f44c8b6fe04d8b650049544d23e641f6c401495c7503ff55704d3bf47e0a4d89f3eb08e95d0000004d89e34d895d004d8d7fe84c3b7d107303ff554049c747f8020000004d89fb49894b0849c703010000004883fa01750c48b90300000000000000eb0a48b901000000000000004989ce4983f6024989e44d891c244989e34d897308eb114889e74c890f4889e648c74608010000004983fa017402eb0d488b5c24084883fb017502eb684d8d7fd84c3b7d107303ff554049c747f8040000004c89fa48894218488b0c2448894a10488b442420488942084c8b7424284c89324952524889d09090ff15d20000004989c5498b4510909090ff15ca0000004883f8017414498b4510ff15c20000004c89ebeb13e906000000488b1c24eb08488b5c2438495250488b5424084883fa017402eb0d488b4c24184883f9017502eb10488b4c2450488b41d048c7000300000053488b442448488b5424589090e8e5fdffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fe498946084c8b2c244d892e4c89f04883c460c3909090|@417,8191,@2228,@2268,@2280,@2267|24,0,0 93,0,1 105,0,0 282,0,1 294,0,0 2267:C2,8|488b4008c3909090|@2281,1| 2268:C15,440|90909090909090483b65187303ff55484989c64c89f09090ff15c20100004989c54c89f0ff15be0100004d89f44989c34c89e890ff15b60100004883f801744e4d89ea4c89d09090ff15aa0100004c89d0909090ff15a60100004883f801740f4c89d090ff159e0100004989c0eb1948b8b0d7edacaa2a00009090ff555849b801000000000000004d8b4808eb064d89e94d89ea4c89c890ff15720100004883f80174164d89e04c89c89090ff15660100004c89c24989c0eb1a48b8b0d7edacaa2a0000909090ff555849b801000000000000004989d1498b401090ff153e0100004d89d8909090ff153a0100004951495249504883f801750c48bf0100000000000000eb5b4c8b304c8b68084c89f0ff151a010000488b1c2448bab018600000000000ff124883f801741d4d8d7ff04c3b7d107303ff554049c747f8010000004c89ff4c8937eb184c89e8483b65187303ff5548eb9d48bf010000000000000048f7c7010000007541488b07909090ff15c200000048ff374889c3488b44241048ba48dff0acaa2a000090ff15ae0000004883f8017409488b04244883c420c3488b4424184883c420c3488b4424104883c418c3909090|@2278,8191,@2277,@2136,@2084,@2085,@2084,@2085,@2062,@2063,@2064,@2265,@2136,@2277,@2271|113,0,@970 128,0,0 188,0,@970 204,0,0 252,0,0 284,0,I24 345,0,0 387,0,@2269 2269:O2|@2271,@2270 2270:O2|@2275,@2269 2271:C28,784|90909090909090483b65187303ff55484989d54989c44889d8909090ff15160300004883f801746c4d89eb4d89e24889d8909090ff15060300004889c34c89d0ff15020300004883f80174724c89d090ff15fa0200004989c2488b4310909090ff15f20200009090ff15f20200004989c1498b4210909090ff15ea0200009090ff15ea0200004d89d84889df4889c34c89c8eb05e9d5000000909090ff15d60200004883f801746f4950498b1a488b174883fa01752b4883fb017516eb05e9a000000048b803000000000000004883c408c348b801000000000000004883c408c348f7c301000000755f48ff720848ff7308488b0b488b1a4889c8488b54241090e801ffffff4883f801742e488b542408488b1c24eb05e93c0000004883c410483b65187303ff5548eb8548b801000000000000004883c418c348b801000000000000004883c418c348b801000000000000004883c408c348b80100000000000000c348b80100000000000000c34889d8909090ff15060200004883f80174634d89eb4889d89090ff15fa0100004989c24c89e0ff15f60100004883f80174574c89e090ff15ee0100004953495250498b1a488b004c89da90e849feffff4883f80174244c8b4c24084c8b0424498b5908498b4008488b5424104883c418e924feffffe91a00000048b801000000000000004883c418c348b80100000000000000c34889d8909090ff15920100004883f80174594d89eb4d89e24889d8909090ff15820100004989c14c89d0ff157e0100004883f80174454c89d090ff15760100004d8b014983f8017427488b384883ff01740e498b5908488b4008498b5308ff2248b80100000000000000c3e91600000048b80100000000000000c348b80100000000000000c34889d890ff152e0100004883f801743d4889d890ff15260100004989c34c89e0ff15220100004883f80174164c89e090ff151a0100004889c34c89d8ff251601000048b80100000000000000c34889d8ff150a0100004883f80174094c89e0ff25030100004889d8ff15020100004883f80174094c89e0ff25fb00000048b80100000000000000c3|@2273,8191,@2062,@2063,@2062,@2063,@2064,@1461,@2064,@1461,@2272,@2084,@2085,@2084,@2085,@2046,@2047,@2046,@2047,@1458,@1459,@1458,@1459,@2022,@2231,@2231,@2015,@2015|197,0,1 212,0,0 301,0,0 316,0,0 331,0,0 346,0,0 357,0,0 490,0,0 505,0,0 612,0,0 628,0,0 639,0,0 716,0,0 775,0,0 2272:C2,384|53488b184883fbfd752d488b5008488b0a4c8b314983fe0375054989c6eb1b4889c8483b65187303ff5548ebd449be01000000000000004989c64956488b542408488b024883f8fd752d4c8b7208498b1e488b0b4883f90375054889d1eb1b4889da483b65187303ff5548ebd448b901000000000000004889d14c8b3424498b1e4883fbfd75434c8b294983fdfd752b4d8b66084c8b59084d3be3750f48b803000000000000004883c410c348b801000000000000004883c410c348b801000000000000004883c410c34883fbff75434c8b294983fdff752b4d8b66084c8b59084d3be3750f48b803000000000000004883c410c348b801000000000000004883c410c348b801000000000000004883c410c34883fb0175534c8b294983fd01753b4d8b66084c8b590849544d0be341f6c401495c7503ff55704d3be3750f48b803000000000000004883c410c348b801000000000000004883c410c348b801000000000000004883c410c348b801000000000000004883c410c39090909090|@2274,7695|47,0,0 111,0,0 159,0,1 174,0,0 189,0,0 232,0,1 247,0,0 262,0,0 321,0,1 336,0,0 351,0,0 366,0,0 2273:S25|545950455f5452454528292e657175616c5479706573283229 2274:S27|5354525543545f56414c5328292e73616d65547970654964283229 2275:C2,200|90909090909090483b65187303ff55484883fb01751c4883f801750b48b80300000000000000c348b80100000000000000c348f7c00100000075604c8b334c8b284989d44c8b5b084c8b5008498b5d00498b0648bab018600000000000909090ff124883f8017447495449534952498b5e08498b4508498b54240890ff124883f801741c488b5c2408488b0424488b5424104883c418e96cffffffe91a00000048b801000000000000004883c418c348b80100000000000000c348b80100000000000000c3909090|@2276,8191|30,0,1 41,0,0 85,0,I24 162,0,0 177,0,0 188,0,0 2276:S31|545950455f5452454528292e657175616c5265636f72644c69737473283229 2277:C2,8|488b4018c3909090|@2279,1| 2278:S35|545950455f5452454528292e66696e6456616c7565436f6e7374727563746f72283129 2279:S26|5354525543545f56414c5328292e76616c547970654f66283129 2280:C2,32|4c8b304983feff750b48b80300000000000000c348b80100000000000000c390|@2281,4097|11,0,1 22,0,0 2281:S6|476c6f62616c 2282:S34|5354525543545f56414c5328292e7463536574436f6e7374727563746f7273283229 2283:C2,40|90909090909090483b65187303ff55484c8b4010488b5808488b00488b5208ff2290909090909090|@2284,8191| 2284:S31|535452554354555245535f28292e66756c6c436f7079536967283729283129 2285:C3,208|90909090909090483b65187303ff554853495090ff15de0000004c8b34244c8b68104983fd0175084c89f04883c410c35049564c8b600848b801000000000000004c89e2ff124c8b5c240848ff3048ff700848b80100000000000000498b1390ff124989c24d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c8b4c24104c8948104c8b04244c894008488b7c24084889384952488b542430909090ff124889c6488b04244989f64883c428483b65187303ff5548e960ffffff48b801000000000000004883c438c3909090|@2311,8191,@2297|57,0,0 84,0,0 192,0,0 2286:S28|535452554354555245535f28292e66756c6c436f7079536967283729 2287:C4,152|90909090909090483b65187303ff5548ff15aa0000004d8d7fc84c3b7d107303ff554049c747f8060000004c89fa48b9d8eaf0acaa2a000048890a48895a284c8942204c894a184c89521049baa0edf0acaa2a00004c8952084d8d7fe84c3b7d107303ff554049c747f8020000004d89f949b8b0edf0acaa2a00004d89014989510849b801000000000000004c89cbff2533000000909090|@2296,8191,@2206,@2285|48,0,@2288 77,0,@2293 115,0,@2294 132,0,0 2288:C10,384|90909090909090483b65187303ff55484989d04889c74889d848ba10b3f0acaa2a000090ff157e0100004883f801746d4889d848baf8b2f0acaa2a0000909090ff156a0100004883f801755649505748b81500000000000000909090ff15560100004d8d7fd84c3b7d107303ff554049c747f8040000004c89fb48c743180100000048c743100100000048bab01e60000000000048895308488903eb0ae96d000000e9050000004889deeb07488b7010495057488b5c24085648ff732848ff732048ff7318488b5310488b5c24204889d0909090ff15e600000048bb5d00000000000000ff15de000000488b4c24284989c24c8b0c244c8b442408488b5c2410488b442418488b51084883c430ff224889d848ba30a7f0acaa2a0000ff15ae0000004883f80174494889d848ba18a7f0acaa2a0000909090ff159a00000049ff701049bad0ecf0acaa2a00004d8b4818498b7028498b58204989d84889f39090ff157a00000048b80100000000000000c348b80100000000000000c390909090|@2292,8191,@2190,@2193,@1852,@303,@303,@2167,@2170,@2216|27,0,@2189 53,0,@2188 81,0,10 140,0,I48 220,0,46 276,0,@2166 301,0,@2165 324,0,@2289 360,0,0 371,0,0 2289:O1|@2290 2290:C2,8|c390909090909090|@2291,1| 2291:S55|535452554354555245535f28292e636f707954797065436f6e7374727563746f7273283529636f707954797065436f6e73283129283129 2292:S40|535452554354555245535f28292e636f707954797065436f6e7374727563746f7273283529283329 2293:O1|@2287 2294:C2,40|90909090909090483b65187303ff55484c8b4010488b5808488b00488b5208ff2290909090909090|@2295,8191| 2295:S40|535452554354555245535f28292e636f707954797065436f6e7374727563746f7273283529283129 2296:S37|535452554354555245535f28292e636f707954797065436f6e7374727563746f7273283529 2297:C4,312|90909090909090483b65187303ff5548ff154a01000050504c8b70104983fe01746e504c8b680848b801000000000000004c89eaff124c8b60084983fc0175554c8b1c2448b80100000000000000498b13909090ff124c8b50104983fa017456504c8b480848b801000000000000004c89ca9090ff124c8b40084983f801751f4c8b1c244883c408483b6518730feb0ae951000000e934000000ff5548eba5488d7c2410488b3424488937488d5c24104c894308eb454c8d4c24084989014c8d44240849c740080100000050eb2d4c8d5c24084c8b14244d89134c8d4c24084d89610850eb154989e5498945004989e449c74424080100000050504d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b5c24104c89184c8b5424184c89500848ba00f0f0acaa2a00004883c420ff2530000000|@2325,8191,@2312,@2300|41,0,0 70,0,0 103,0,0 294,0,@2298 2298:O2|@2300,@2299 2299:O2|@2307,@2298 2300:C2,176|4c8b70084983fe01750c49bd0300000000000000eb0a49bd01000000000000004d89ec4983f4024d8d7fe04c3b7d107303ff554049c747f8030000004d89fd49bb18f1f0acaa2a00004d895d00498945104c8b5a084d895d084d8d7fe84c3b7d107303ff554049c747f8020000004d89fa49b9b0f1f0acaa2a00004d890a498942084d8d7fe04c3b7d107303ff554049c747f8030000004d89f94d8961104d8951084d89294c89c8c390909090909090|@2306,8069|12,0,1 24,0,0 65,0,@2301 115,0,@2303 2301:C2,40|90909090909090483b65187303ff55484c8b7210498b5e08498b06488b5208ff2290909090909090|@2302,8191| 2302:S40|556e6976657273616c5461626c652e756e69764f7665722831296d616b6549746572283129283129 2303:C2,144|90909090909090483b65187303ff55485050488b42084c8b70084983fe01750e48b878f2f0acaa2a000090ff55584c8b2849ff3648b80100000000000000498b55089090ff124c8d6424084c8b184d891c244c8d5424084c8b0c244d894a084d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b4424084c8900488b7c2410488978084883c418c3909090|@2302,8191|34,0,@2304 54,0,0 2304:O3|@7377,@215,@2305 2305:S29|556e6976657273616c5461626c652e756e69764f7665722e76616c7565 2306:S37|556e6976657273616c5461626c652e756e69764f7665722831296d616b6549746572283129 2307:C2,288|90909090909090483b65187303ff55484883fb01751a48b858f4f0acaa2a0000909090ff555848b801000000000000004c8b73084983fe017555505048ff72084c8b2848b801000000000000004c89eaff124c8b60104983fc01744f504c8b580848b801000000000000004c89da9090ff124c8b50084983fa017518488b04244883c408483b65187303ff5548ebb1e9610000004c8d4c24104c8b04244d8901488d7c24104c895708eb164c8d5c24084989034c8d54240849c7420801000000504d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b4c24104c89084c8b4424184c894008488b5424084883c420ff224989c54d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8970084c8928488b5208ff22909090|@2310,8191|24,0,@2308 40,0,0 69,0,0 99,0,0 2308:O3|@7377,@215,@2309 2309:S28|556e6976657273616c5461626c652e756e69764f7665722e6e657874 2310:S33|556e6976657273616c5461626c652e756e69764f7665722831296e657874283229 2311:S26|556e6976657273616c5461626c652e756e6976466f6c64283329 2312:C2,368|90909090909090483b65187303ff554850504c8b304983feff75454c8b68184d8b65004d8b1c244d8d7fe84c3b7d107303ff554049c747f8020000004d89fa49b9b8f6f0acaa2a00004d890a4d8962084989e44d891c244989e34d895308eb4c4c8b68104d8b65f849c1e40849c1ec084f8d6424014d8d7fe84c3b7d107303ff554049c747f8020000004d89fb49ba80f7f0acaa2a00004d89134d896b084989e14d89214989e44d895c24084d8d7fe04c3b7d107303ff554049c747f8030000004d89fb49ba18f8f0acaa2a00004d89134c8b0c244d894b104c8b6c24084d896b08495349bcffffffffffffffff41f6c4017503ff55704d89e34983c30270f44c8b54240849534d23da41f6c301495b7503ff55704d3bda7c0d4c89d8488b14244883c418ff2249534c89d8488b542418909090ff124883f80175224c8b24244883c408483b65187303ff5548eb9f48b801000000000000004883c420c3488b0424488b5424084883c420ff22909090|@2326,8191|65,0,@2313 143,0,@2315 198,0,@2316 230,0,-1 337,0,0 2313:C2,88|a8017503ff55704883f8017d02eb1a4c8b72084d8b2e504923c5a801587503ff5570493bc57d02eb1748b860d6ecacaa2a0000ff555848b80100000000000000a8017503ff55704989c54983c50270f44b8b44aefcc39090|@2314,6149|43,0,@49 56,0,0 2314:S34|486173685461626c652e686173684f7665722831293c7061747465726e3e2d283129 2315:C2,96|a8017503ff55704883f8017d02eb284c8b72084d8b6ef849c1e50849c1ed084f8d6c2d01504923c5a801587503ff5570493bc57d02eb1948b860d6ecacaa2a00009090ff555848b801000000000000004d8b6c86fc4c89e8c390909090909090|@2314,6149|57,0,@49 72,0,0 2316:C2,192|4c8b7210504923c6a801587503ff5570493bc67d0c49bd0300000000000000eb0a49bd01000000000000004d8d7fd04c3b7d107303ff554049c747f8050000004d89fc49bb10f9f0acaa2a00004d891c2449894424204d897424184c8b5a084d895c241049895424084d8d7fd84c3b7d107303ff554049c747f8040000004d89fa49b920faf0acaa2a00004d890a498942184d8972104d895a084d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c8968104c8950084c8920c39090|@2324,8069|23,0,1 35,0,0 69,0,@2317 131,0,@2319 2317:C2,160|90909090909090483b65187303ff554852488b4220a8017503ff55704889c24883c20270f4488b04244c8b7018524923d6f6c2015a7503ff5570493bd67c104c8b68084889d04c89ea4883c408ff22524c8b68104889d04c89ea9090ff124883f8017522488b04244883c408483b65187303ff5548eb9e48b801000000000000004883c410c34c8b642408488b0424498b5424084883c410ff22909090909090|@2318,8191|121,0,0 2318:S35|486173685461626c652e686173684f7665722831296d616b6549746572283129283129 2319:C2,104|90909090909090483b65187303ff5548488b42184c8b7210504923c6a801587503ff5570493bc67d28488b5208909090ff124883f801751848b8c0faf0acaa2a000090ff555848b80100000000000000c348b810fbf0acaa2a0000ff555848b80100000000000000|@2318,8191|58,0,@2320 72,0,0 83,0,@2322 96,0,0 2320:O3|@7377,@215,@2321 2321:S31|486173685461626c652e686173684f7665722e76616c756520284e6f6e6529 2322:O3|@7377,@215,@2323 2323:S39|486173685461626c652e686173684f7665722e76616c756520286c696d69742070617373656429 2324:S32|486173685461626c652e686173684f7665722831296d616b6549746572283129 2325:S26|556e6976657273616c5461626c652e756e69764f766572283129 2326:S21|486173685461626c652e686173684f766572283129 2327:S63|535452554354555245535f28292e70617373325374727563747328332970617373325374727563742835297061737332537472756374757265446563283229 2328:C2,232|4d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fe49c706010000004d8d7fe84c3b7d107303ff554049c747f8020000004d89fd49bc60fdf0acaa2a00004d8965004d8975084d8d7fe04c3b7d107303ff554049c747f8030000004d89fc49bbf0fef0acaa2a00004d891c2449894424104d897424084d8d7fe84c3b7d107303ff554049c747f8020000004c89f849bbc800f1acaa2a00004c89184c8970084d8d7fe84c3b7d107303ff554049c747f8020000004d89fe49bbc801f1acaa2a00004d891e4d8966084c892b4c8973084889431048b80100000000000000c39090|@2341,7689|62,0,@2329 104,0,@2333 152,0,@2337 193,0,@2339 221,0,0 2329:C3,48|90909090909090483b65187303ff55484c8b72084d8b2e504c89e8488d542408ff15320000004883c408c39090909090|@2331,8191,@2330| 2330:C2,112|90909090909090483b65187303ff55484883f801750b48b80100000000000000c34c8b305249ff3649ff7608488b400890e8d1ffffff4c8b6c24104d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b24244c8960084c8b5c24084c8918498b55f84883c418ff22909090|@2332,8191|24,0,0 2331:S36|5554494c49544945535f28292e6e6f4475706c6963617465732832296170706c79283129 2332:S43|5554494c49544945535f28292e6e6f4475706c6963617465732832296170706c792831296170706c283129 2333:C3,48|90909090909090483b65187303ff55485253504c8b7208498b06488d54241890ff15320000004883c418c39090909090|@2335,8191,@2334| 2334:C2,184|90909090909090483b65187303ff55484883f801755f488b42f84d8d7fe84c3b7d107303ff554049c747f8020000004d89fe4c8b6af04d896e084c8b62e84d89264c8b58084d8b134d8d7fe84c3b7d107303ff554049c747f8020000004d89f94d8951084d89314d890b48b80100000000000000c34c8b304989d54c8b6008498b5de8498b0648bab018600000000000ff124883f801740e4d8b5df8498b45e8498b5310ff224c89e04c89eae956ffffff90909090909090|@2336,8191|108,0,0 136,0,I24 2335:S36|5554494c49544945535f28292e6e6f4475706c696361746573283229656e746572283229 2336:S43|5554494c49544945535f28292e6e6f4475706c696361746573283229656e7465722832296c6f6f6b283129 2337:C2,144|90909090909090483b65187303ff55484c8b72084d8b2e504983fd01750f48b801000000000000004883c408c3498b55004c8b7208488b1c24488b0248bab0186000000000009090ff124883f80174204d8d7ff04c3b7d107303ff554049c747f8010000004c89f84c89304883c408c34d8b6d08483b65187303ff5548eb9948b801000000000000004883c408c39090|@2338,6207|32,0,0 62,0,I24 129,0,0 2338:S37|5554494c49544945535f28292e6e6f4475706c6963617465732832296c6f6f6b7570283129 2339:C2,32|90909090909090483b65187303ff5548488b5808488b00488b5208ff22909090|@2340,8191| 2340:S36|5554494c49544945535f28292e6e6f4475706c696361746573283229656e746572283129 2341:S28|5554494c49544945535f28292e6e6f4475706c696361746573283229 2342:C2,160|4d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fe49c706010000004d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fd49c74500010000004d8d7fe04c3b7d107303ff554049c747f8030000004d89fc4d896c24104d8974240849c70424030000004d8d7fe04c3b7d107303ff554049c747f8030000004d89fe49895e104d8966084989064c89f0c3909090909090|@5167,7177| 2343:S84|535452554354555245535f28292e70617373325374727563747328332970617373325374727563742835297061737332537472756374757265446563283229706173733253747275637475726542696e64283629 2344:C32,2656|90909090909090488dbc2460ffffff483b7d187303ff55504d8d7fe84c3b7d107303ff554049c747f8020000004d89fe49bd500ff1acaa2a00004d892e4d894e084d8b2a4983fdf175704c8b4af84d8d7fd84c3b7d107303ff554049c747f8040000004c89f849be4810f1acaa2a00004c89304d8b71f84c8970184c895010488958085249ff72104989c14d8b60584d8b42084c89e348b8e810f1acaa2a0000ff15e20900004989c34c89d8ff15de0900004883f801741deb05e97d0000004c8b5424084d8b4af84d8b41f0498b40084883c410c34c8b14244d891a4983fb01755148b81500000000000000ff15a60900004d8d7fd84c3b7d107303ff554049c747f8040000004d89f949c741180100000049c741100100000049b8b01e6000000000004d8941084989014c89c84883c410c3498b43104883c410c34983fdfd756f4c8b62f84d8d7fd84c3b7d107303ff554049c747f8040000004d89fb48bf0811f1acaa2a000049893b498b7424f8498973184d89531049895b08525053495049514952495649ff720849ff72186a014953498b4a1049ba7811f1acaa2a000049b99011f1acaa2a00004d8b6850eb05e99a0100004d8b58584d89d84c89eb4889c890ff15d60800004989c24c89d0ff15d20800004883f80174164c8b4c24404d8b41f8498b78f0488b47084883c448c34c8b0c244d89114c89d0ff15ae0800004989c04c89d0ff15aa0800004889c74c89c0ff15a60800004889c64c89c0ff15a208000050504d89c1574c8d4424084889c34889f090ff15920800004d8d7fe84c3b7d107303ff554049c747f8020000004d89f8488b7c2408498938488b74241049897008495149504c8b5424304c8b4c24484c8b442450488b5c245848b8b01e600000000000488b542468909090e871fdffff488b5424104883fa01754f5048b81500000000000000ff15260800004d8d7fd84c3b7d107303ff554049c747f8040000004c89f948c741180100000048c741100100000049beb01e6000000000004c8971084889014889cbeb05488b5a1050488b4c2470488b41f848ff70f84c8b5424684c8b4c24504c8b442410488b4424089090ff15c20700004c8b5424684c8b4c24084c8b44244048bbb821f1acaa2a0000488b44241048ba10a4f0acaa2a00004883c478ff25980700004983fdf375725250534950495149ff720849ff7210488b042448ba7012f1acaa2a000090ff15760700004989c4488b0424909090ff156e07000049545048b8150000000000000090ff15620700004d8d7fd84c3b7d107303ff554049c747f8040000004d89fb49c743180100000049c7431001000000eb05e96e0200004c8b14244d89530849890349534c89d848ba7012f1acaa2a000090ff151a0700004d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89f949c701010000004d8d7fe04c3b7d107303ff554049c747f8030000004d89f848bfc821f1acaa2a0000498938488b74241049897010498940084d8d7fe04c3b7d107303ff554049c747f8030000004c89fb48ba9022f1acaa2a000048891348897310488943084d8d7fe04c3b7d107303ff554049c747f8030000004c89f949be0023f1acaa2a00004c893148897110488941084d8d7fd84c3b7d107303ff554049c747f8040000004d89fd49bc7023f1acaa2a00004d896500498975184d894d10498945084d8d7fd84c3b7d107303ff554049c747f8040000004d89fb49ba5026f1acaa2a00004d891349897318498943104d894b084c8b4c24304d8d7fe04c3b7d107303ff554049c747f8030000004c89ff48baa027f1acaa2a0000488917488b4630488947104d8b71304c8977084d8d7fe04c3b7d107303ff554049c747f8030000004d89fc49ba1028f1acaa2a00004d891424488b564049895424104d8b51404d895424084d8d7fe04c3b7d107303ff554049c747f8030000004c89f849be8028f1acaa2a00004c89304c8b76584c897010498b5158488950084c8b5424304d8d7f984c3b7d107303ff554049c747f80c0000004c89fe48894658498b4250488946504c895e484c89664048894e3848897e304d8b72284c8976284d8b62204c8966204c8946184c896e1048895e0849bbf028f1acaa2a00004c891e4c8b5424404c8b4c24384989f0488b5c2428488b442420488b7c2448488b57f89090ff15de040000488b04244883c450c34983fd0775714d8b620849f7c40100000075694d8b5c24084983fb01756352504950495149ff721049ff721849ff342448b81500000000000000909090ff159a0400004d8d7fd84c3b7d107303ff554049c747f8040000004d89fa49c742180100000049c742100100000049b9b01e600000000000eb0fe9bd010000e9a0010000e9830100004d894a084989024c89d048ba7012f1acaa2a0000909090ff15420400004c8b4424204d8d7fe04c3b7d107303ff554049c747f8030000004c89ff48be4829f1acaa2a0000488937488b583048895f10498b5030488957084d8d7fe04c3b7d107303ff554049c747f8030000004c89f949beb829f1acaa2a00004c89314c8b68404c8969104d8b60404c8961084d8d7fe04c3b7d107303ff554049c747f8030000004d89fb49ba282af1acaa2a00004d89134c8b48584d894b10498b7058498973084d8d7f984c3b7d107303ff554049c747f80c0000004d89fe4d895e584d8b58504d895e504c8b50484d89564849894e40488b483849894e3849897e30498b782849897e28488b582049895e20488b5018498956184c8b68104d896e104c8b60084d89660848bb982af1acaa2a000049891e49564c8b5424304c8b4c24104d89f0488b5c2420488b442418488b542438488b52f8909090ff150a0300004c8b5424084c8b4c24204c8b0424488b5c2410488b442430488b5424384883c440e9c3f7ffff48b8482bf1acaa2a000090ff555848b8010000000000000048b8482bf1acaa2a000090ff555848b801000000000000004983fd09756f52505349504951495649ff720849ff721049ff72184c8b54241090e86df7ffff4c8b6424204d8b1c2441f6c3017503ff55704983fb017e054d89daeb0a49ba0100000000000000504d89d14c8b5424404d89c84c8b4c24384c89c74c8b4424304889fb488b442410488b542448eb05e9560100009090ff153a0200004889c64889f0ff15360200004889c34889f0ff153202000050504989e04889da4889c34889d0ff15260200004d8d7fe84c3b7d107303ff554049c747f8020000004c89f9488b04244889014c8b7424084c8971084d8d7fe84c3b7d107303ff554049c747f8020000004d89fd49bc902bf1acaa2a00004d896500498975084c8b5c24184983fb01745a4889f09090ff15c60100004989c14889f0ff15c201000050505149554c8d4424104889c34c89c89090ff15b20100004d8d7fe84c3b7d107303ff554049c747f8020000004d89fa4c8b4424104d8902488b7c241849897a08eb084989ca50505149554c8b4c24784d8b41f856495249ff70f84c8b9424800000004c8b4c24604c8b4424204889f3488b44244890ff15560100004c8b9424800000004c8b0c244c8b442460488b5c2410488b44240848ba10a4f0acaa2a00004881c490000000ff252c01000048b8482bf1acaa2a000090ff555848b8010000000000000090909090|@2617,8191,@2618,@2631,@1852,@2634,@2636,@2638,@2640,@2155,@2208,@2642,@1852,@2422,@2162,@2356,@2204,@1852,@2356,@1931,@1852,@2356,@1931,@2649,@2155,@2208,@2642,@2155,@2208,@2642,@2422,@2162|50,0,@2345 104,0,@2347 152,0,@2349 228,0,10 284,0,I48 352,0,@2350 409,0,@2351 419,0,@2352 641,0,I48 676,0,10 732,0,I48 815,0,@2395 830,0,@2160 875,0,@2354 911,0,10 991,0,@2354 1068,0,@2396 1118,0,@2398 1163,0,@2399 1208,0,@2400 1258,0,@2406 1312,0,@2407 1365,0,@2408 1421,0,@2409 1535,0,@2410 1645,0,10 1704,0,I48 1741,0,@2354 1789,0,@2412 1842,0,@2413 1895,0,@2414 2024,0,@2415 2118,0,@2418 2132,0,0 2142,0,@2418 2156,0,0 2233,0,0 2404,0,@2420 2607,0,@2160 2630,0,@2418 2644,0,0 2345:C4,88|90909090909090483b65187303ff5548488b42084c8b3041f6c6017503ff55704983fe017d1048b80100000000000000ff254a00000041f6c6017503ff55704d89f54983c50270f44c89284c89f0ff253400000090909090|@2346,6149,@1935,@1933|40,0,0 2346:S69|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973747275637456616c75652835296e6577547970654964283129 2347:C3,48|90909090909090483b65187303ff55484989c24c8b4a084c8b421048bb0300000000000000488b4218ff252900000090|@2348,8191,@1956|29,0,1 2348:S29|535452554354555245535f28292e676976654572726f72283329283129 2349:S9|537472756374757265 2350:C3,48|90909090909090483b65187303ff55484989c24c8b4a084c8b421048bb0300000000000000488b4218ff252900000090|@2348,8191,@1956|29,0,1 2351:S7|46756e63746f72 2352:O1|@2353 2353:C4,136|90909090909090483b65187303ff55484883f801754f48b81500000000000000ff158a0000004d8d7fd84c3b7d107303ff554049c747f8040000004d89fd49c745180100000049c745100100000049bcb01e6000000000004d896508498945004d89eeeb044c8b70104c89f048ba7012f1acaa2a00009090ff153a000000488b4050c39090909090|@2394,8191,@1852,@2356|24,0,10 80,0,I48 110,0,@2354 2354:O7|@2356,@2374,@2381,@2187,@2355,@2164,@2195 2355:O3|@2389,@2391,@2388 2356:C2,744|4d8d7fe04c3b7d107303ff554049c747f8030000004d89fe49bdf015f1acaa2a00004d892e4c8b284d896e104c8b62304d8966084d8d7fe04c3b7d107303ff554049c747f8030000004d89fb49bab817f1acaa2a00004d89134d896b104c8b52284d8953084d8d7fe04c3b7d107303ff554049c747f8030000004d89f949b82018f1acaa2a00004d89014d8969104c8b42204d8941084d8d7fe04c3b7d107303ff554049c747f8030000004c89ff48be8818f1acaa2a00004889374c896f10488b7218488977084d8d7fe04c3b7d107303ff554049c747f8030000004c89fb48b9f018f1acaa2a000048890b4c896b10488b4a1048894b084d8d7fe04c3b7d107303ff554049c747f8030000004d89fd49bc5819f1acaa2a00004d8965004c8b204d8965104c8b62084d8965084d8d7fe04c3b7d107303ff554049c747f8030000004d89fa49b8c019f1acaa2a00004d89024c8b004d8942104c8b42304d8942084d8d7fe04c3b7d107303ff554049c747f8030000004c89fe48b9581af1acaa2a000048890e488b0848894e10488b4a2848894e084d8d7fe04c3b7d107303ff554049c747f8030000004d89fc49b8c01af1acaa2a00004d8904244c8b004d894424104c8b42204d894424084d8d7fe04c3b7d107303ff554049c747f8030000004c89f949b8281bf1acaa2a00004c89014c8b004c8941104c8b42184c8941084d8d7fe04c3b7d107303ff554049c747f8030000004d89f85248ff304956495349515753495549525649545148ff7210495048ba901bf1acaa2a0000498910488b44246049894010488b54240849895008488b5424684d8d7fe04c3b7d107303ff554049c747f8030000004c89f849bef81bf1acaa2a00004c89304c8b7424604c8970104c8b72084c8970084d8d7f984c3b7d107303ff554049c747f80c0000004d89fb49897b584d896b5049894b48488b7c245049897b4049894338488b4c245849894b3049895b284d894b20498973184d8953104d8943084d89234c89d84883c470c3909090|@2373,8191|26,0,@2357 78,0,@2361 127,0,@2362 176,0,@2363 225,0,@2364 274,0,@2365 327,0,@2366 379,0,@2368 431,0,@2369 486,0,@2370 564,0,@2371 624,0,@2372 2357:C3,40|90909090909090483b65187303ff55484989c0488b5a08488b4210ff252f00000090909090909090|@2359,8191,@2358| 2358:C3,192|90909090909090483b65187303ff5548534c89c3ff15ce0000004883f801750f48b801000000000000004883c408c34c8b304983fe01750f48b801000000000000004883c408c34c8b2c2449ff3649ff7608488b442408498b550090ff124883f80174354c8b642410488b442408498b54241090ff124989c34d8d7ff04c3b7d107303ff554049c747f8010000004c89f84c89184883c418c34c8b34244883c410483b65187303ff5548eb8648b801000000000000004883c418c39090909090|@2360,8191,@1277|34,0,0 58,0,0 174,0,0 2359:S28|5354525543545f56414c5328292e6d616b654c6f6f6b283229283129 2360:S28|556e6976657273616c5461626c652e756e69764c6f6f6b7570283329 2361:C3,40|90909090909090483b65187303ff55484989c0488b5a08488b4210ff252f00000090909090909090|@2359,8191,@2358| 2362:C3,40|90909090909090483b65187303ff55484989c0488b5a08488b4210ff252f00000090909090909090|@2359,8191,@2358| 2363:C3,40|90909090909090483b65187303ff55484989c0488b5a08488b4210ff252f00000090909090909090|@2359,8191,@2358| 2364:C3,40|90909090909090483b65187303ff55484989c0488b5a08488b4210ff252f00000090909090909090|@2359,8191,@2358| 2365:C3,40|90909090909090483b65187303ff55484989c0488b5a08488b4210ff252f00000090909090909090|@2359,8191,@2358| 2366:C3,40|90909090909090483b65187303ff55484c8b48084c8b00488b5a08488b4210ff252b000000909090|@2367,8191,@2171| 2367:S29|5354525543545f56414c5328292e6d616b65456e746572283229283129 2368:C3,40|90909090909090483b65187303ff55484c8b48084c8b00488b5a08488b4210ff252b000000909090|@2367,8191,@2171| 2369:C3,40|90909090909090483b65187303ff55484c8b48084c8b00488b5a08488b4210ff252b000000909090|@2367,8191,@2171| 2370:C3,40|90909090909090483b65187303ff55484c8b48084c8b00488b5a08488b4210ff252b000000909090|@2367,8191,@2171| 2371:C3,40|90909090909090483b65187303ff55484c8b48084c8b00488b5a08488b4210ff252b000000909090|@2367,8191,@2171| 2372:C3,40|90909090909090483b65187303ff55484c8b48084c8b00488b5a08488b4210ff252b000000909090|@2367,8191,@2171| 2373:S24|5354525543545f56414c5328292e6d616b65456e76283129 2374:O3|@2376,@2378,@2375 2375:O2|@2380,@7463 2376:O2|@2377,@7463 2377:C2,48|4c8b304c8b6a084d3bf5751648b80300000000000000c348b80100000000000000c348b80100000000000000c3909090|@966,6149|14,0,1 25,0,0 36,0,0 2378:O2|@2379,@7463 2379:C2,48|4989c64d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c89701048c740088b0000004c8b72084c8930c390|@966,4101| 2380:C2,56|4c8b304c8b6a084d3bf57510488b4010c348b80100000000000000c348b8b0d7edacaa2a000090ff555848b8010000000000000090909090|@966,6149|19,0,0 30,0,@970 44,0,0 2381:O3|@2383,@2385,@2382 2382:O2|@2387,@7464 2383:O2|@2384,@7464 2384:C2,48|4c8b304c8b6a084d3bf5751648b80300000000000000c348b80100000000000000c348b80100000000000000c3909090|@966,6149|14,0,1 25,0,0 36,0,0 2385:O2|@2386,@7464 2386:C2,48|4989c64d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c89701048c740088b0000004c8b72084c8930c390|@966,4101| 2387:C2,56|4c8b304c8b6a084d3bf57510488b4010c348b80100000000000000c348b8b0d7edacaa2a000090ff555848b8010000000000000090909090|@966,6149|19,0,0 30,0,@970 44,0,0 2388:O2|@2393,@7465 2389:O2|@2390,@7465 2390:C2,48|4c8b304c8b6a084d3bf5751648b80300000000000000c348b80100000000000000c348b80100000000000000c3909090|@966,6149|14,0,1 25,0,0 36,0,0 2391:O2|@2392,@7465 2392:C2,48|4989c64d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c89701048c740088b0000004c8b72084c8930c390|@966,4101| 2393:C2,56|4c8b304c8b6a084d3bf57510488b4010c348b80100000000000000c348b8b0d7edacaa2a000090ff555848b8010000000000000090909090|@966,6149|19,0,0 30,0,@970 44,0,0 2394:S67|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973747275637456616c756528352966756e6374722d283129 2395:O1|@2157 2396:C2,56|90909090909090483b65187303ff55484c8b72105250498b56189090ff124c8b6c24084d8b6508488b0424498b5424184883c410ff229090|@2397,8191| 2397:S67|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973747275637456616c75652835296e6577456e762d283129 2398:C2,56|90909090909090483b65187303ff55484c8b72105250498b56089090ff124c8b6c24084d8b6508488b0424498b5424084883c410ff229090|@2397,8191| 2399:C2,56|90909090909090483b65187303ff55484c8b72105250498b56389090ff124c8b6c24084d8b6508488b0424498b5424384883c410ff229090|@2397,8191| 2400:C5,312|90909090909090483b65187303ff55484c8b7218525048ff3048ff7008498b5610909090ff124c8b2c24498b45109090ff152a0100004883f8017423498b4510ff15220100004c8b6424184d8b5c2408488b442410498b53104883c420ff224c89e89090ff15060100004989c44983f4024c8b5c24184d8b53104d8b0a4d8b43084d8d7fe84c3b7d107303ff554049c747f8020000004c89ff4c894f0848c707010000004d8d7fd84c3b7d107303ff554049c747f8040000004c89fe498b5d1848895e1848897e10498b550848895608488b4c240848890e4d8d7fe84c3b7d107303ff554049c747f8020000004c89f8488970084889084951498b5010909090ff12488b4424204c8b342441f6c6017503ff55704d89f54983c50270f44c8b60104d892c2448b801000000000000004883c428c390909090|@2397,8191,@2402,@2404,@2401|295,0,0 2401:C2,56|4c8b700849f7c601000000750b48b80300000000000000c34983fe01750b48b80300000000000000c348b80100000000000000c390909090|@2405,4097|15,0,1 32,0,1 43,0,0 2402:C2,32|4c8b304983fefd750b48b80300000000000000c348b80100000000000000c390|@2403,4097|11,0,1 22,0,0 2403:S10|4f7665726c6f61646564 2404:C2,8|488b4008c3909090|@2403,1| 2405:S30|5354525543545f56414c5328292e6973436f6e7374727563746f72283129 2406:C4,264|90909090909090483b65187303ff55484c8b72185248ff3048ff7008498b5648ff124c8b24244983fc01755048b815000000000000009090ff15f20000004d8d7fd84c3b7d107303ff554049c747f8040000004d89fb49c743180100000049c743100100000049bab01e6000000000004d8953084989034d89ddeb054d8b6c24104c8b5c24104d8b53084d8b0a4d8b4310498b78484d89c84c89eb488b442408ff15920000004889c64d8d7fe84c3b7d107303ff554049c747f8020000004c89f848897008488b5c240848891849514889fa9090ff12488b542418488b0c24f6c1017503ff55704889c84883c00270f44c8b720849890648b801000000000000004883c420c39090|@2397,8191,@1852,@2261|46,0,10 104,0,I48 249,0,0 2407:C2,56|90909090909090483b65187303ff55485250488b52109090ff124883f80175134c8b742408488b0424498b56084883c410ff224883c410c3|@1306,8191| 2408:C2,56|90909090909090483b65187303ff55485250488b52109090ff124883f80175134c8b742408488b0424498b56084883c410ff224883c410c3|@1306,8191| 2409:C2,56|90909090909090483b65187303ff55485250488b52109090ff124883f80175134c8b742408488b0424498b56084883c410ff224883c410c3|@1306,8191| 2410:O1|@2411 2411:C2,16|48b80100000000000000c39090909090|@2397,1|2,0,0 2412:C2,56|90909090909090483b65187303ff55485250488b52109090ff124883f80175134c8b742408488b0424498b56084883c410ff224883c410c3|@1306,8191| 2413:C2,56|90909090909090483b65187303ff55485250488b52109090ff124883f80175134c8b742408488b0424498b56084883c410ff224883c410c3|@1306,8191| 2414:C2,56|90909090909090483b65187303ff55485250488b52109090ff124883f80175134c8b742408488b0424498b56084883c410ff224883c410c3|@1306,8191| 2415:O1|@2416 2416:C2,16|48b80100000000000000c39090909090|@2417,1|2,0,0 2417:S69|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973747275637456616c75652835296c6f63616c456e762d283129 2418:O3|@7377,@215,@2419 2419:S24|73747275637456616c75653a206e6f7420612076616c7565 2420:C4,224|90909090909090483b65187303ff55484989d14989c04c89c0909090ff15e60000004883f801746e4951498b104883fafd752d498b40084c8b304d8b2e4983fd0375054c89c7eb1b4d89f0483b65187303ff5548ebd448bf01000000000000004c89c7488b074883f8017506488b4f08eb1a48b810a2f0acaa2a0000909090ff555848b901000000000000004c8b3424498b4608eb05e93700000090ff156e000000514823c8f6c101597503ff5570483bc87c0f48b803000000000000004883c408c348b801000000000000004883c408c348b80100000000000000c3909090|@2421,8167,@2157,@2155|88,0,0 116,0,@2153 132,0,0 182,0,1 197,0,0 212,0,0 2421:S72|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973747275637456616c75652835296d757374436f707954797065283129 2422:C2,192|90909090909090483b65187303ff55484d8d7fd04c3b7d107303ff554049c747f8050000004d89fe49bd082ef1acaa2a00004d892e4d8946204c8b6c24084d896e184d894e104d89560850534951495249ff70084c89f290ff124d8d7fd04c3b7d107303ff554049c747f8050000004d89fc49bb8850f1acaa2a00004d891c244c8b14244d895424204c8b4c24304d894c24184c8b4424104d89442410488b7c240849897c2408488b5c2418488b4424204c89e2488b7424284883c43856ff22|@5166,8191|42,0,@2423 116,0,@2487 2423:C4,176|90909090909090483b65187303ff55484989d64989c54889d8909090ff15b60000004d8d7fc04c3b7d107303ff554049c747f8070000004c89fb48ba002ff1acaa2a00004889134c8973304c896b284d8b6e204c896b20498b561848895318498b4e1048894b104d8b66084c8963084d8d7fe84c3b7d107303ff554049c747f8020000004d89fb49bab04ff1acaa2a00004d891349895b0849b801000000000000004c89dbff25350000009090909090|@2486,8191,@2206,@2285|60,0,@2424 137,0,@2484 154,0,0 2424:C39,1200|90909090909090483b65187303ff55484989d04889c74889d848ba30a7f0acaa2a000090ff15ae0400004883f80174704889d848ba18a7f0acaa2a0000909090ff159a0400004889c3498b4028909090ff1592040000495057534989f848bbf8a6f0acaa2a000090ff158204000048f7c001000000756e488b08488b04249090ff15720400009090ff15720400004883f8017556488b442410514c8b4020eb05e95e0200004889cb488b442408909090ff1552040000488b44240890ff154e0400004989c6488b0424909090ff154604000050490bc6a801587503ff55704c3bf0746ceb0ae9bb010000e9a70100004c8b6c2418488b442408909090ff151e04000049ff751849ff751049ff75084889c348b81035f1acaa2a000090ff150604000048bb2835f1acaa2a0000ff15fe0300004989c24c8b0c244c8b44240848bb0300000000000000488b442410eb05e90a0000004883c438ff25da030000488b44240890ff15d60300004883f801746f488b0424ff15ce0300004883f80175644c8b6c2418488b0424909090ff15be03000049ff751849ff751049ff75084889c348b8510000000000000090ff15a603000048bb5835f1acaa2a0000ff159e0300004989c24c8b0c244c8b44240848bb0300000000000000488b442410eb0ae90f000000e90a0000004883c438ff2575030000488b442408ff15720300004883f801746f488b0424ff156a0300004883f80175644c8b6c2418488b0424909090ff155a03000049ff751849ff751049ff75084889c348b8510000000000000090ff154203000048bb8035f1acaa2a0000ff153a0300004989c24c8b0c244c8b44240848bb0300000000000000488b442410eb0ae90f000000e90a0000004883c438ff251103000048b801000000000000004883c420c348b801000000000000004883c418c3488b54241048ff721848ff721048ff7208488b5c242048b8a835f1acaa2a0000909090ff15d202000048bbc035f1acaa2a0000ff15ca0200004989c24c8b0c244c8b44240848bb0300000000000000488b4424104883c430ff25ad0200004889d848ba10b3f0acaa2a0000ff15a20200004883f801746e4889d848baf8b2f0acaa2a0000909090ff158e0200004889c6498b4028909090ff1586020000495057564989f848bbd8b2f0acaa2a000090ff157602000048f7c0010000007560488b104883fa01755c48b815000000000000009090ff155a0200004d8d7fd84c3b7d10730aeb05e910010000ff554049c747f8040000004c89f948c741180100000048c741100100000049beb01e6000000000004c8971084889014889cbeb09e97b000000488b5a10488b04244883f80175525348b81500000000000000909090ff15f60100004d8d7fd84c3b7d107303ff554049c747f8040000004d89fe49c746180100000049c746100100000049bdb01e6000000000004d896e084989064c89f1eb05488b4810534c8b7424184889cb488b0424498b56304883c420ff22488b5c241048ff731848ff731048ff7308488b5c242048b8e835f1acaa2a000090ff157e01000048bbc035f1acaa2a0000ff15760100004989c24c8b0c244c8b44240848bb0300000000000000488b4424104883c430ff255901000048b80100000000000000c3909090909090|@2438,8191,@2167,@2170,@2206,@2358,@1461,@1463,@2439,@2441,@2441,@2066,@303,@303,@1956,@2241,@2432,@2066,@303,@303,@1956,@2265,@2265,@2066,@303,@303,@1956,@303,@303,@1956,@2190,@2193,@2206,@2358,@1852,@1852,@303,@303,@1956|27,0,@2166 53,0,@2165 95,0,@2164 275,0,@2425 292,0,@2426 320,0,1 419,0,40 436,0,@2427 464,0,1 567,0,40 584,0,@2428 612,0,1 649,0,0 664,0,0 701,0,@2429 720,0,@2430 748,0,1 776,0,@2189 801,0,@2188 843,0,@2187 878,0,10 943,0,I48 985,0,10 1044,0,I48 1115,0,@2431 1132,0,@2430 1160,0,1 1185,0,0 2425:S7|54797065732028 2426:S25|29206861766520646966666572656e7420617269746965732e 2427:S18|29206973206e6f7420616e20657174797065 2428:S19|29206973206e6f742061206461746174797065 2429:S6|547970652028 2430:S23|29206d697373696e6720696e207374727563747572652e 2431:S11|5374727563747572652028 2432:C11,368|90909090909090483b65187303ff55484989c24c89d09090ff157a0100004883f801740b48b80300000000000000c34c89d09090ff15660100009090ff15660100004883f801740b48b80100000000000000c34c89d09090ff15520100004989c64c89d0ff154e01000050504989c54c89d09090ff15460100004d89f4909090ff15420100004883f80174334d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fb4d89134989e249c702ffffffff4889e24c895a08eb114989e349c703010000004889e24c8952084d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b34244c89304c8b5c24084c8958084989c24d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c8950104c8960084c89289090ff15aa00000049b8f837f1acaa2a000048bb8838f1acaa2a00009090ff15960000004883f8ff750c49b90300000000000000eb0a49b901000000000000004c89c84883f0024883c410c3909090909090|@2459,8191,@2241,@2226,@2015,@2066,@2239,@1461,@1463,@1465,@2443|38,0,1 74,0,0 296,0,@2433 306,0,@2436 330,0,1 342,0,0 2433:O1|@2434 2434:C2,16|48b80300000000000000c39090909090|@2435,1|2,0,1 2435:S33|545950455f5452454528292e7065726d697473457175616c697479283129283129 2436:O1|@2437 2437:C2,16|48b8ffffffffffffffffc39090909090|@2435,1|2,0,-1 2438:S42|535452554354555245535f28292e6d61746368536967732836296d617463684e616d6573283229283329 2439:C12,312|90909090909090483b65187303ff55484989c24c89d09090ff15420100004989c64c89d0ff153e0100004d89d14c89f7ff153a0100004883f80174384c89c890ff15320100004889c64d8d7fe84c3b7d107303ff554049c747f8020000004c89f84889580848893053495057498b1090ff12eb0453495057488b0424ff15fe0000004883f8017475488b0424ff15f6000000488b04249090ff15f20000004883f801740f488b0424ff15ea0000004889c6eb1948b8b0d7edacaa2a00009090ff555848be0100000000000000488b4610ff15ca000000488b5c24084889c14889c8909090ff15be00000051488b530890ff1248f7c0010000007516eb05e92600000048b801000000000000004883c420c34c8b442410488b5c2418488b04244883c420e9dffeffff48b801000000000000004883c418c390|@2440,8191,@2226,@1461,@2157,@1461,@2062,@2063,@2062,@2063,@2064,@1461|181,0,@970 196,0,0 260,0,0 298,0,0 2440:S31|545950455f5452454528292e656e74657254797065436f6e73747273283329 2441:C2,8|488b4008c3909090|@2442,1| 2442:S24|5354525543545f56414c5328292e74634172697479283129 2443:C36,856|90909090909090483b65187303ff554849505390ff15660300004989c54c89e8ff15620300004883f801746e4c89e890ff155a0300004989c4498b5c2408498b04249090ff154e0300004883f801740f48b803000000000000004883c410c3498b5c2408498b0424ff15320300004989c34c89d8ff152e0300004883f801744e4d89e24c89d89090ff152203000049534c89d0488b542410eb05e93d00000090ff124883f8ff750f48b8ffffffffffffffff4883c418c34c8b442410488b5c2408488b04244883c418e939ffffff4c89e0488b5424084883c410ff224c89e890ff15d20200004883f80174194c89e890ff15ca02000048b8ffffffffffffffff4883c410c34c89e8ff15ba0200004883f801746a4c89e890ff15b20200004c8b18488b4010909090ff15aa0200004989c24c89d0ff15a60200009090ff15a60200004883f801740f48b8ffffffffffffffff4883c410c34953495249b81840f1acaa2a00004c89d348b87b0000000000000048baa040f1acaa2a0000eb05e93a01000090ff15660200004c8b084983f9fd740f48b803000000000000004883c420c3488b04249090ff154a0200004989c048b89042f1acaa2a000090ff153e0200004889c34c89c0ff153a0200004883f801740f48b8ffffffffffffffff4883c420c3488b042490ff15220200004883f801741f48bb0300000000000000488b442408488d542420ff150a0200004883c420c3488b042490ff15020200009090ff15020200004883f801743f488b0424ff15fa010000488b54241090ff124883f8ff750f48b8ffffffffffffffff4883c420c34889c3488b442408488d542420ff15d20100004883c420c3488b042490ff15ca0100004889c7488b0424909090ff15c2010000488b5c240890ff15be01000049b803000000000000004889c34889f89090ff15ae0100004c8b442418488b5c24104883c420e94afdffff4c89e8ff159a0100004883f80174374c89e890ff1592010000488b400848baf842f1acaa2a0000ff1248bb0300000000000000488d542410909090ff15720100004883c410c34c89e89090ff156a0100004883f80174244c89e890ff156201000048b8a043f1acaa2a0000909090ff555848b801000000000000004c89e890ff154601000048b8ffffffffffffffff4883c410c390909090909090|@2462,8191,@2039,@1458,@1459,@2024,@2044,@2046,@2047,@2084,@2085,@2062,@2063,@2064,@1461,@1463,@2448,@1461,@1461,@2272,@2241,@2460,@2226,@2015,@1461,@2460,@2226,@2239,@2463,@2465,@2046,@2047,@2460,@2060,@2042,@2231|82,0,1 170,0,-1 248,0,-1 330,0,-1 349,0,@2444 362,0,61 372,0,@2447 405,0,1 435,0,@2452 470,0,-1 502,0,1 582,0,-1 660,0,1 732,0,@2455 744,0,1 800,0,@2457 816,0,0 836,0,-1 2444:O1|@2445 2445:C2,16|48b8380dedacaa2a0000c39090909090|@2446,1|2,0,@217 2446:S26|545950455f5452454528292e657175616c697479283329283129 2447:O2|@2448,@7466 2448:C3,48|90909090909090483b65187303ff5548495053504c8b7208498b06488d542418ff15320000004883c418c39090909090|@2450,8191,@2449| 2449:C5,168|90909090909090483b65187303ff55484883f801751048b80100000000000000488b52f8ff224c8b304989d54c8b6008498b1e498b45e848bab018600000000000909090ff124883f801743a498b45f0ff157a0000004989c3498b4608909090ff15720000004d89ea4d8b4e104d89e04889c34c89d89090ff15620000004883f8017412eb0c4d89e04d8b4e104d89eaeb044c89c8c34c89c04c89d2e966ffffff90909090909090|@2451,8191,@1461,@1461,@2272|24,0,0 57,0,I24 2450:S28|5052494e545f5441424c4528292e6765744f7665726c6f6164283329 2451:S41|5052494e545f5441424c4528292e6765744f7665726c6f61642833297365617263684c697374283129 2452:O6|@2454,0,0,0,@501,@2453 2453:O2|-1,@7467 2454:S4|7265616c 2455:O1|@2456 2456:C2,96|90909090909090483b65187303ff55484883f801750b48b80100000000000000c34c8b3049ff7608488b400890e8d5ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fe49894608488b04244989064c89f04883c408c3909090|@417,4097|24,0,0 2457:O3|@7377,@215,@2458 2458:S28|657175616c697479202d204f7665726c6f616473657420666f756e64 2459:S30|545950455f5452454528292e7065726d697473457175616c697479283129 2460:C2,136|90909090909090483b65187303ff55484883f80175044889d8c3525348ff70084c8b42f8488b5af0488b0048bae044f1acaa2a0000909090ff124883f8ff750f48b8ffffffffffffffff4883c418c34883f801751948bb0100000000000000488b0424488b5424104883c418eb99488b5c2408488b0424488b5424104883c418e982ffffff909090|@2483,8191|45,0,@2461 66,0,-1 87,0,0 2461:O1|@2443 2462:S23|545950455f5452454528292e657175616c697479283329 2463:C4,224|90909090909090483b65187303ff554848f7c001000000757048f7c301000000756c4c8b284c8b60084c89e8ff15d60000004883f801740f4c89e890ff15ce0000004989c3eb1948b8b0d7edacaa2a00009090ff555849bb01000000000000004d8d7fe84c3b7d107303ff554049c747f8020000004c89fa4c895a08488b0348890252488b5b08eb0ae946000000e9360000004c89e0909090e869ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fe498946084c8b2c244d892e4c89f04883c408c348b80100000000000000c348b80100000000000000c390|@2464,7693,@1458,@1459|73,0,@970 88,0,0 203,0,0 214,0,0 2464:S23|545950455f5452454528292e636f707956617273283229 2465:C4,104|90909090909090483b65187303ff55484989c44889da4c89c34889d0ff156e0000004d8d7fe84c3b7d107303ff554049c747f8020000004d89fe49bd1847f1acaa2a00004d892e4989460849b8a04af1acaa2a00004c89f34c89e0ff253700000090909090909090|@2481,8191,@2476,@2228|60,0,@2466 77,0,@2473 2466:C15,440|90909090909090483b65187303ff55484989d54989c44c89e0909090ff15be0100004883f801746c4d89eb4c89e09090ff15b20100004989c6498b5e08498b06ff15aa0100004881f81f4e000074044c89e0c3495349564c89e0498b53089090ff124c8b2c244989c4498b5d08498b4500909090ff157e0100004989c34c89d8ff157a0100004883f801746e4d89e24c89d8eb05e914010000909090ff1566010000495248ff701049b87049f1acaa2a0000488b5c24184c89d89090ff154e0100004989c14c89c8ff154a0100004883f801746e4c89c890ff15420100004c8b00488b7808488b4424089090ff15360100004883f8017417eb05e9a1000000488b442408ff15260100004889c6eb1948b8b0d7edacaa2a00009090ff555848be01000000000000004d8d7fe84c3b7d107303ff554049c747f8020000004c89fbeb05e949000000488b142448895308488b4c241048890b4d8d7fe04c3b7d107303ff554049c747f8030000004c89f848895810488978084c89009090ff15b60000004889c34889f0ff15b2000000eb1348b8004af1acaa2a000090ff5558eb03495450488b4424084883c420c34c89e0c390909090909090|@2472,8191,@1458,@1459,@2057,@2044,@2046,@2047,@2228,@2046,@2047,@1458,@1459,@1456,@1454|170,0,@2467 273,0,@970 288,0,0 402,0,@2470 2467:O1|@2468 2468:C2,8|c390909090909090|@2469,1| 2469:S47|545950455f5452454528292e67656e6572616c6973655479706573283329636f707954797065566172283129283129 2470:O3|@7377,@215,@2471 2471:S48|436f7079206f66206c6162656c6c6564207265636f7264206973206e6f742061206c6162656c6c6564207265636f7264 2472:S44|545950455f5452454528292e67656e6572616c6973655479706573283329636f707954797065566172283129 2473:O1|@2474 2474:C2,8|c390909090909090|@2475,1| 2475:S33|545950455f5452454528292e67656e6572616c6973655479706573283329283129 2476:C2,80|4d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fe4989064d8d7fe04c3b7d107303ff554049c747f8030000004c89f849bdb04bf1acaa2a00004c8928488958104c897008c39090|@2482,6153|58,0,@2477 2477:C5,112|90909090909090483b65187303ff55484989d54989c44c89e0909090ff15760000004883f80174134d89ea4c89e09090ff156a0000004989c3eb1948b8b0d7edacaa2a00009090ff555849bb0100000000000000495249534d8b4a08498b01488d542410ff153e0000004883c410c390|@2479,8143,@1458,@1459,@2478|61,0,@970 76,0,0 2478:C11,440|90909090909090483b65187303ff55484883f80175764c8b72f04989d5498b5e08498b06ff15b6010000498b5df04889c1488b034c8b73084c89f390ff15a60100004883f801740a498b5df84c8b6310eb0a49bc010000000000000050504d89eb4989e249524d89e249b901000000000000004989c848bb1f4e00000000000048b8e005edacaa2a0000eb05e9f1000000909090ff15560100004d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b0c244c89084c8b4424084c8940089090ff152e0100004889c34889d8ff152a0100004883f801740f4889d890ff15220100004889c2eb1948b8b0d7edacaa2a00009090ff555848ba0100000000000000498b4bf04989de4989d5488b5908488b01909090ff15f20000004d89f44889c34c89e890ff15ea0000004d8b53f84d8d7fe84c3b7d107303ff554049c747f8020000004d89f9498949084d89214d8b4208498b184d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48895a084c890a4989104c89e04883c410c34c8b304989d44d8b1e4c8b5008498b5c24f0498b4608ff15820000004883f80174044c89d8c34c89d04c89e2e954feffff9090909090|@2480,8143,@2024,@2055,@1369,@1358,@1458,@1459,@2044,@1454,@2022|84,0,0 107,0,0 120,0,9999 130,0,@193 237,0,@970 252,0,0 2479:S30|545950455f5452454528292e7476617253657175656e6365283229283129 2480:S41|545950455f5452454528292e7476617253657175656e63652832292831297054797065566172283129 2481:S30|545950455f5452454528292e67656e6572616c6973655479706573283329 2482:S27|545950455f5452454528292e7476617253657175656e6365283229 2483:S35|545950455f5452454528292e657175616c6974792833296571466f724c697374283229 2484:C2,40|90909090909090483b65187303ff55484c8b4010488b5808488b00488b5208ff2290909090909090|@2485,8191| 2485:S42|535452554354555245535f28292e6d61746368536967732836296d617463684e616d6573283229283129 2486:S39|535452554354555245535f28292e6d61746368536967732836296d617463684e616d6573283229 2487:C6,352|90909090909090483b65187303ff55484989d64989c54889d8909090ff15660100004d8d7fc04c3b7d107303ff554049c747f8070000004c89fa48b94052f1acaa2a000048890a4c8972304c896a28498b4e2048894a204d8b66184c8962184d8b5e104c895a104d8b56084c8952084d8d7fe84c3b7d107303ff554049c747f8020000004d89f949b878bdf1acaa2a00004d890149895108495649555349b801000000000000004c89cb9090ff15de000000488b04249090ff15da000000488b7c24104d8d7fc84c3b7d107303ff554049c747f8060000004c89fe48bb30bef1acaa2a000048891e488b54240848895628488b4f2048894e204c8b77184c8976184c8b6f104c896e104c8b67084c8966084d8d7fe84c3b7d107303ff554049c747f8020000004d89fb49bad8c6f1acaa2a00004d89134989730849b801000000000000004c89db90ff155200000048b801000000000000004883c418c3909090|@2616,8191,@2206,@2285,@2206,@2285|60,0,@2488 137,0,@2599 159,0,0 221,0,@2601 299,0,@2614 316,0,0 336,0,0 2488:C13,616|90909090909090483b65187303ff55484989d04889c74889d848ba30a7f0acaa2a000090ff15660200004883f80174704889d848ba18a7f0acaa2a0000909090ff15520200004889c3498b4028909090ff154a0200004950534989f848bbf8a6f0acaa2a00009090ff153a02000048f7c001000000756e488b5424084d8d7fd04c3b7d107303ff554049c747f8050000004c89f949be3855f1acaa2a0000eb05e9660000004c89314c8b6a204c8969204c8b62084c8961184c8b5a104c8959104c8b52184c8951084c8b4c24104c895c24104c896424084d89c84989c94c89c74d89e8eb05e912000000488b1c24488b004883c40857ff25b401000048b801000000000000004883c410c34889d848ba10b3f0acaa2a0000ff159a0100004883f801746e4889d848baf8b2f0acaa2a0000909090ff15860100004889c6498b4028909090ff157e0100004950564989f848bbd8b2f0acaa2a00009090ff156e01000048f7c0010000007560488b104883fa01755c48b815000000000000009090ff15520100004d8d7fd84c3b7d10730aeb05e9c3000000ff554049c747f8040000004c89f948c741180100000048c741100100000049beb01e6000000000004c8971084889014889cbeb09e97b000000488b5a10488b04244883f80175525348b81500000000000000909090ff15ee0000004d8d7fd84c3b7d107303ff554049c747f8040000004d89fe49c746180100000049c746100100000049bdb01e6000000000004d896e084989064c89f1eb05488b4810534c8b7424104889cb488b0424498b56304883c418ff2248b801000000000000004883c410c348b80100000000000000c3909090|@2591,8191,@2167,@2170,@2206,@2358,@2589,@2190,@2193,@2206,@2358,@1852,@1852|27,0,@2166 53,0,@2165 94,0,@2164 150,0,@2489 254,0,0 272,0,@2189 297,0,@2188 338,0,@2187 374,0,10 439,0,I48 481,0,10 540,0,I48 589,0,0 604,0,0 2489:C3,120|90909090909090483b65187303ff55484d8d7fd84c3b7d107303ff554049c747f8040000004d89fe49bdf055f1acaa2a00004d892e4c8b6a084d896e184c8b60104d8966104c8b5a104d895e084c8b14244c8934244d89d14c8b52184d89c84d89e94c89c74c8b4220488b5808488b0057ff252900000090|@2512,8191,@2494|42,0,@2490 2490:C6,208|90909090909090483b65187303ff55484c8b7218525048bb280af0acaa2a0000498b464848bae8d7edacaa2a00009090ff15c20000004c8b2c244c8b6424085049ff7518498b5c241048b81857f1acaa2a000090ff15a600000048bb3857f1acaa2a0000ff159e000000488b14249090ff124c8b5c241048b83829f0acaa2a0000498b13ff124c8b5424184d8d7fe84c3b7d107303ff554049c747f8020000004d89f949c74108010000004d8b42084d89014c8b442410488b5c24084c89c84883c420ff254700000090909090909090|@2493,8191,@974,@303,@303,@1972|24,0,@1964 38,0,@972 75,0,@2491 92,0,@2492 121,0,@1996 2491:S16|5768696c6520636865636b696e672028 2492:S6|29206e656172 2493:S29|535452554354555245535f28292e666f756e644e656172283329283129 2494:C4,192|90909090909090483b65187303ff55484d8d7fe84c3b7d107303ff554049c747f8020000004d89fe49bd8858f1acaa2a00004d892e4d8946085349514952495649b8030000000000000048bb0100000000000000ff158e0000004d8d7fd84c3b7d107303ff554049c747f8040000004d89fc49bb885bf1acaa2a00004d891c244c8b5424104d895424184c8b4c24084d894c24104c8b4424284d894424084d89e14c8b0424488b5c2418488b7c24204883c43057ff2536000000909090909090|@2514,8191,@2465,@2513|42,0,@2495 66,0,1 76,0,0 116,0,@2504 2495:C3,80|90909090909090483b65187303ff55484d8d7fe84c3b7d107303ff554049c747f8020000004d89fe49bd1859f1acaa2a00004d892e4c8b6a084d896e084d89f048bb48bff0acaa2a0000ff2528000000|@2503,8191,@2228|42,0,@2496 66,0,@2218 2496:C3,168|90909090909090483b65187303ff55484d8d7fe84c3b7d107303ff554049c747f8020000004d89fe49bd005af1acaa2a00004d892e4c8b6a084d896e084d8d7fe84c3b7d107303ff554049c747f8020000004d89fc4d896c240849bba85af1acaa2a00004d891c2449bab01e6000000000004c8b0c244c89142449ba48bff0acaa2a00004d89c84d89e14c89c749b8005bf1acaa2a00004c89f357ff252f00000090909090909090|@2502,8191,@2216|42,0,@2497 92,0,@2499 106,0,I48 124,0,@2218 143,0,@2501 2497:C2,48|90909090909090483b65187303ff5548488b5208ff1248baf02c600000000000ff124989c64983f6024c89f0c3909090|@2498,8191|24,0,I105 2498:S44|545950455f5452454528292e6d617463685479706573283629636f7079546172676574283129283129283129 2499:O1|@2500 2500:C2,16|48b80100000000000000c39090909090|@2498,1|2,0,0 2501:O1|@1935 2502:S41|545950455f5452454528292e6d617463685479706573283629636f7079546172676574283129283129 2503:S38|545950455f5452454528292e6d617463685479706573283629636f7079546172676574283129 2504:C3,80|90909090909090483b65187303ff55484c8b72184c8b2c244c89342448ff721048ff72084c8b50104c8b480849b8185cf1acaa2a0000488b1848b8305cf1acaa2a00004955ff252d0000009090909090|@2510,8191,@2507|46,0,@2505 59,0,@2506 2505:S2|746f 2506:S11|43616e2774206d61746368 2507:C3,192|90909090909090483b65187303ff55484d8d7fb84c3b7d107303ff554049c747f8080000004d89fe49bd505df1acaa2a00004d892e4c8b6c24184d896e384989463049895e284d8946204d894e184d8956104c8b5424084d8956084c8b4c24104d8b45104c89442418498b7d1848897c2410498b75204889742408498b5d28488b142448891c2449ff753049ff753849ff754049ff75484d8b55084c89c94d8b4d0049b803000000000000004889cb4c89f052ff252f00000090909090909090|@2511,8191,@1124|42,0,@2508 164,0,1 2508:C6,400|90909090909090483b65187303ff55484989d34989c248b80100000000000000ff1592010000498b5338495349525048bb280af0acaa2a0000488b424848bae8d7edacaa2a000090ff1572010000488b4c24085048b8f83cedacaa2a0000488b51309090ff12488b4424104c8b7424184c8b6818498b46304c89ea90ff124c8b64241048b8b027edacaa2a0000498b1424909090ff124c8b5c241849ba03000000000000004c8b4c24084c8b442410488b1c24498b432890ff150a0100004c8b54241048b8b027edacaa2a0000498b12ff124c8b4c24104c8b442418498b4020498b5118ff12488b7c241048b8b027edacaa2a0000488b17ff12488b74241849ba03000000000000004c8b4c24084c8b442410488b1c24488b461890ff15ae000000488b5c241048b8b027edacaa2a0000488b13ff12488b542410488b4c2418488b4110488b5218ff12488b4424104c8b3048b8b027edacaa2a00004c89f290ff124c8b6c2418488b442410498b5508ff124c8b64241048b80100000000000000498b5424104883c420ff2290909090|@2509,8191,@2017,@974,@2013,@2013|24,0,0 49,0,@1964 63,0,@972 86,0,@267 133,0,@257 157,0,1 197,0,@257 237,0,@257 257,0,1 297,0,@257 340,0,@257 377,0,0 2509:S28|545950455f5452454528292e6d617463684572726f72283829283129 2510:S37|545950455f5452454528292e6d61746368547970657328362963616e744d61746368283129 2511:S25|545950455f5452454528292e6d617463684572726f72283829 2512:S68|535452554354555245535f28292e6d61746368536967732836296d6174636856616c73283229636865636b5479706573416e64537472756374757265732d283329283129 2513:C3,40|90909090909090483b65187303ff55484951488d54240890ff15320000004883c408c39090909090|@2520,8191,@2515| 2514:S25|545950455f5452454528292e6d617463685479706573283629 2515:C171,4672|90909090909090483b65187303ff55485253495050909090ff154a12000050488b442418ff154612000050488b442408ff15421200004883f801740f48b801000000000000004883c430c3488b442408ff152a1200004883f8017471488b442408909090ff151e1200004989c5488b0424909090ff15161200004883f801740f48b801000000000000004883c430c3488b042490ff15fe1100004883f801746e4d89ec488b042490ff15f2110000498b5c2408498b042490ff15ea110000495450488b442410488b542428eb05e9690400009090ff124989c34c89d8ff15ce1100004883f801746c4c89d890ff15c61100004989c24c89d3488b442408909090ff15ba1100004883f8017416eb05e91204000048b801000000000000004883c440c34c8b4c2408498b5908498b019090ff15921100004883f8017422488b5c24184c89d0488d542440909090ff157e110000eb05e9ac0300004883c440c3498b5a08498b02909090ff156a1100004989c0488b0424909090ff15621100004883f801746d488b0424ff155a1100004889c74c89c0ff15561100004883f80174564c89c090ff154e1100004889c648bbe005edacaa2a00004c89d09090ff153e11000048bbe005edacaa2a00004c89c890ff15321100004953495249ba48bff0acaa2a00004d89c14c8b4424104889f3eb0ae9c7000000e9400000004889f8488d54245090ff15061100004889c3488b0424488d5424509090ff15fa100000488b5c2408488b442418488d542450909090ff15ea1000004883c450c34c89c09090ff15e21000004883f801741b488b5c24184c89d0488d542440909090ff15ce1000004883c440c3488b74243848ff76f8488b442438488b5424309090ff124889c34d8d7fe04c3b7d107303ff554049c747f8030000004c89f848ba8078f1acaa2a00004889501048895808488b4c2428488908488b14244883c448ff22488b0424909090ff156e1000004883f8017470488b0424ff15661000004889c74c89c0ff15621000004883f80174594c89c090ff155a100000574c89de4d89d0488d5424489090ff154e1000004883f8017561488b74244048ff76f8488b442440488b54243890ff124889c34d8d7fe04c3b7d107303ff554049c747f803000000eb0ae914010000e98d0000004c89f848baa878f1acaa2a00004889501048895808488b4c2430488908488b14244883c450ff224889c148bbe005edacaa2a00004c89c0909090ff15d60f000048bbe005edacaa2a00004c89c890ff15ca0f00004d89c34889c8ff15c60f0000564889c34c89d8488d5424509090ff15ba0f0000488b1c24488b442418488d542450ff15ae0f00004883c450c34c89c09090ff15a60f00004883f801741b488b5c24184c89d0488d542440909090ff15920f00004883c440c3488b74243848ff76f8488b442438488b5424309090ff124889c34d8d7fe04c3b7d107303ff554049c747f8030000004c89f848ba8078f1acaa2a00004889501048895808488b4c2428488908488b14244883c448ff22488b0424909090ff15320f00004883f80174174c89db4c89c8488d54244090ff15220f00004883c440c34c89c09090ff151a0f00004883f801741b488b5c24184c89d0488d542440909090ff15060f00004883c440c3488b7c243848ff77f8488b442438488b5424309090ff124889c64d8d7fe04c3b7d107303ff554049c747f8030000004c89f848bb8078f1acaa2a00004889581048897008488b542428488910488b14244883c448ff2249b848bff0acaa2a00004c89db488b442418488b5424384883c440e9e2faffff4c89e8488d542430909090ff15820e00004883c430c3488b442408ff157a0e00004883f8017463488b442408909090ff156e0e00004c8b284c8b6010488b0424909090ff15620e00004883f801740f48b801000000000000004883c430c3488b042490ff154a0e00004883f8017420488b0424ff15420e0000488d54243090ff153e0e00004883c430c3e969050000488b0424ff15320e00004883f80174694d89eb4d89e2488b04249090ff15220e00004c8b084c8b40104c89d0ff151a0e00004889c74c89c0ff15160e00004889c64889f8ff15120e00009090ff15120e00004883f8017402eb734c89db4889f8ff15060e00009090ff15060e00004883f801740a4989dbeb54e95e0200004889f8909090ff15f20d00004889c14889f8ff15ee0d00009090ff15ee0d000049b803000000000000004889c34889c89090ff15de0d00004c8b442418488b1c24488b5424284883c430e986f9ffff4889f0ff15c60d00009090ff15c60d00004883f8017402eb734c89d94889f0ff15ba0d00009090ff15ba0d00004883f80174054989cbeb544889f0ff15ae0d00004989c64889f0ff15aa0d00004d89f24c89cbff15a60d000049b803000000000000004889c34c89d09090ff15960d00004c8b4424184889c3488b442408488b5424284883c430e9faf8ffff495357488b442410488b5424289090ff124989c54c89e8ff15660d00004883f80174564d89eb4c89d89090ff155a0d00004c8b10488b4010909090ff15520d00004989c14c89c8ff154e0d00009090ff154e0d00004883f80175234d89d84c89c89090ff15420d00009090ff15420d00004883f8017566eb0ae9e50000004d89d8eb5a4c89c890ff152e0d00004889c74c89c8ff152a0d00004c89d3909090ff15260d000049b803000000000000004889c34889f89090ff15160d000049b848bff0acaa2a00004889c3488b442418488b5424384883c440e91df8ffff488b04249090ff15f20c00004889c74c89c8ff15ee0c00004889c34889f8ff15ea0c00004883f801741b488b5c24084c89d0488d542440909090ff15d60c00004883c440c3488b7424384d8d7fe04c3b7d107303ff554049c747f8030000004c89f848bbd878f1acaa2a0000488958104c894008488b542418488910488b56f84883c440ff2249b848bff0acaa2a00004c89eb488b442418488b5424384883c440e977f7ffff488b0424ff156e0c00004883f8017455488b0424ff15660c00004d89eb4989c24c89e090ff155e0c00004989c14c89c8ff155a0c00009090ff155a0c00004883f8017402eb774d89d84c89c8ff154e0c00009090ff154e0c00004883f801740a4d89c3eb58e9330100004c89c8909090ff153a0c00004889c74c89c8ff15360c00004c89c3909090ff15320c000049b803000000000000004889c34889f89090ff15220c00004c8b442418488b1c24488b5424284883c430e9baf6ffff4983fb01755a495149f7c2010000007554488b04249090ff15f60b00004889c6498b02ff15f20b00004889c34889f0ff15ee0b00004883f801740c48bf0300000000000000eb284d8b5208483b65187303ff5548ebb248bf0100000000000000e91200000048bf01000000000000004883ff017414eb0350eb0f48b801000000000000004883c438c3488b7c243048ff77f8488b442410488b542428909090ff124889c64d8d7fe04c3b7d107303ff554049c747f8030000004c89f848bb0879f1acaa2a00004889581048897008488b542418488910488b14244883c440ff224d89eb4c89e090ff153e0b00004989c24c89d0ff153a0b00009090ff153a0b00004883f8017402eb734d89d94c89d0ff152e0b00009090ff152e0b00004883f80174054d89cbeb544c89d0ff15220b00004989c04c89d0ff151e0b00004c89cb909090ff151a0b00004c89c749b803000000000000004889c34889f8909090ff15060b00004c8b442418488b1c24488b5424284883c430e93ef5ffff4c8b44242849ff70f8488b442408488b542420ff124889c74d8d7fe04c3b7d107303ff554049c747f8030000004c89f848be8078f1acaa2a00004889701048897808488b5c2410488918488b14244883c438ff22488b4424089090ff15960a00004883f801745f488b442408909090ff158a0a00004989c5488b0424909090ff15820a00004883f801740f48b801000000000000004883c430c3488b042490ff156a0a00004883f8017420488b0424ff15620a0000488d54243090ff155e0a00004883c430c3e905030000488b0424ff15520a00004883f80174594d89eb488b042490ff15460a00004c8b10488b4010909090ff153e0a00004989c14c89c8ff153a0a00009090ff153a0a00004883f8017402eb6f4d89d84c89c8ff152e0a00009090ff152e0a00004883f801740a4d89c3eb55e9400200004c89c8909090ff151a0a00004889c74c89c8ff15160a00004c89d3909090ff15120a000049b803000000000000004889c34889f89090ff15020a00004c8b4424184889c3488b442408eb0ae913000000e90e000000488b5424284883c430e9a2f3ffff49534951488b442410488b54242890ff124889c74889f8ff15c60900004883f801746e4889f890ff15be090000488b30488b4010909090ff15b60900004889c34889d8ff15b20900009090ff15b20900004883f801740f48b801000000000000004883c440c34889d89090ff159a0900009090ff159a0900004883f80175624889d890ff15920900004889c14889d8eb05e92701000090ff15860900004889f3909090ff158209000049b803000000000000004889c34889c89090ff157209000049b848bff0acaa2a00004889c3488b442418488b5424384883c440e9c1f2ffff4883fe01755e57488b54241048f7c201000000755e4c8b324c8b6a08488b44240890ff15320900004989c44c89f0ff152e0900004d89ea4889c34c89e090ff15260900004883f801740c48b90300000000000000eb274c89d2483b65187303ff5548eba8e91c00000048b9010000000000000048b901000000000000004883f9017414eb0357eb0f48b801000000000000004883c448c3488b5424404d8d7fe04c3b7d107303ff554049c747f8030000004c89f848b90879f1acaa2a0000488948104c8b34244c8970084c8b6c24204c8928488b52f84883c448ff2249b848bff0acaa2a00004889fb488b442418488b5424384883c440e9c5f1ffff4c8b64242849ff7424f8488b442408488b5424209090ff124989c34d8d7fe04c3b7d107303ff554049c747f8030000004c89f849ba8078f1acaa2a00004c8950104c8958084c8b4c24104c8908488b14244883c438ff22488b4424089090ff15120800004883f8017463488b442408909090ff15060800004c8b284c8b6008488b0424909090ff15fa0700004883f801740f48b801000000000000004883c430c3488b042490ff15e20700004883f8017420488b0424ff15da070000488d54243090ff15d60700004883c430c3e9e1000000488b0424ff15ca0700004883f8017423488b0424ff15c2070000488b5810488b00488d5424309090ff15b60700004883c430c3488b042490ff15ae0700004883f80174464d89eb488b042490ff15a2070000495448ff70084c8b442428488b184c89d8488b54243890e885f0ffff4c8b442428488b1c24488b442408488b5424384883c440e969f0ffff4c8b5c242849ff73f8488b442408488b542420909090ff124989c24d8d7fe04c3b7d107303ff554049c747f8030000004c89f849b98078f1acaa2a00004c8948104c8950084c8b4424104c8900488b14244883c438ff22488b4424089090ff150e0700004883f801746f488b0424ff15060700004883f801740f48b801000000000000004883c430c3488b042490ff15ee0600004883f801741b488b0424ff15e6060000488d54243090ff15e20600004883c430c3488b042490ff15da0600004883f801742b488b0424ff15d2060000488b5810488b00eb05e989000000488d542430909090ff15be0600004883c430c3488b042490ff15b60600004883f801740f48b801000000000000004883c430c34c8b74242849ff76f8488b442408488b5424209090ff124989c54d8d7fe04c3b7d107303ff554049c747f8030000004c89f849bc8078f1acaa2a00004c8960104c8968084c8b5c24104c8918488b14244883c438ff22488b4424089090ff15460600004989c5488b0424909090ff153e0600004883f801740f48b801000000000000004883c430c3488b042490ff15260600004883f801741b488b0424ff151e060000488d54243090ff151a0600004883c430c3488b042490ff15120600004883f8017423488b0424ff150a060000488b5810488b00488d5424309090ff15fe0500004883c430c3488b042490ff15f60500004883f801743d4d89eb488b042490ff15ea0500004c8b5424184c8b0c244c8b4424084889c34c89d8488d54243090ff15d205000048b801000000000000004883c430c34c8b64242849ff7424f8488b442408488b542420909090ff124989c34d8d7fe04c3b7d107303ff554049c747f8030000004c89f849ba8078f1acaa2a00004c8950104c8958084c8b4c24104c8908488b14244883c438ff22909090|@2524,8191,@2039,@2039,@2231,@1458,@1459,@2231,@1458,@1459,@2044,@1458,@1459,@2022,@2525,@2527,@2044,@2046,@2047,@2046,@2047,@1454,@1454,@2521,@2527,@2527,@2015,@2527,@2060,@2042,@2060,@2042,@2562,@1454,@1454,@2564,@2527,@2527,@2015,@2527,@2015,@2527,@2015,@2527,@2566,@2062,@2063,@2231,@1458,@1459,@2568,@2062,@2063,@2064,@2064,@1461,@1463,@2226,@2015,@2226,@2239,@2463,@2465,@1461,@1463,@2226,@2015,@2226,@2239,@2463,@2465,@2062,@2063,@2064,@1461,@1463,@2226,@2015,@2226,@2239,@2463,@2465,@1461,@1461,@2272,@2570,@2060,@2042,@2064,@1461,@1463,@2226,@2015,@2226,@2239,@2463,@2465,@1461,@1461,@2272,@2064,@1461,@1463,@2226,@2015,@2226,@2239,@2463,@2465,@2060,@2042,@2231,@1458,@1459,@2568,@2062,@2063,@2064,@1461,@1463,@2226,@2015,@2226,@2239,@2463,@2465,@2062,@2063,@2064,@1461,@1463,@2226,@2015,@2226,@2239,@2463,@2465,@1461,@1461,@2272,@2084,@2085,@2231,@1458,@1459,@2568,@2062,@2063,@2573,@2084,@2085,@2015,@2231,@1458,@1459,@2568,@2062,@2063,@2573,@2015,@2047,@2231,@1458,@1459,@2568,@2062,@2063,@2573,@2046,@2047,@2521|62,0,0 130,0,0 277,0,0 431,0,@193 452,0,@193 476,0,@2218 667,0,@2516 847,0,@2517 886,0,@193 908,0,@193 1079,0,@2516 1251,0,@2516 1287,0,@2218 1398,0,0 1620,0,1 1756,0,1 1972,0,1 1996,0,@2218 2126,0,@2518 2162,0,@2218 2336,0,1 2442,0,1 2469,0,0 2484,0,0 2505,0,0 2571,0,@2519 2715,0,1 2811,0,@2516 2902,0,0 3112,0,1 3262,0,0 3344,0,1 3368,0,@2218 3474,0,1 3505,0,0 3515,0,0 3536,0,0 3580,0,@2519 3620,0,@2218 3703,0,@2516 3798,0,0 4051,0,@2516 4122,0,0 4258,0,0 4323,0,@2516 4394,0,0 4568,0,0 4635,0,@2516 2516:S20|28496e636f6d70617469626c6520747970657329 2517:S27|28496e636f6d70617469626c65206f7665726c6f6164696e677329 2518:S29|28446966666572656e74207479706520636f6e7374727563746f727329 2519:S35|284f7665726c6f6164696e6720646f6573206e6f7420696e636c756465207479706529 2520:S24|545950455f5452454528292e747970654d61746368283429 2521:C15,576|90909090909090483b65187303ff55484951495249505248ff701048ff3048ff731048ff33488b5b08488b4008488d5424409090ff152e0200004c8b7424104983fe0174734c8b2c244983fd017402eb6c4c8b6424084983fc017502eb644d8b1c24498b5b08498b03909090ff15fe0100004989c24c89d0ff15fa0100004883f80174644d8b4c24084c89d0ff15ee0100004c8b40084d8d7fe04c3b7d107303ff554049c747f8030000004c89f848c7401001000000eb0fe954000000e945000000e9400000004c89400848c700030000009090ff15ae0100004889c34c89d8ff15aa010000eb0e48b8487cf1acaa2a000090ff55584d89cc483b65187303ff5548e94fffffff488b4424284883c440c34c8b2c244983fd01746d4983fe017402eb6a4c8b6424184983fc017502eb624d8b1c24498b5b08498b0390ff15560100004989c24c89d0ff15520100004883f80174644d8b4c24084c89d0ff15460100004c8b40084d8d7fe04c3b7d107303ff554049c747f8030000004c89f848c7401001000000eb0fe954000000e945000000e9400000004c89400848c700030000009090ff15060100004889c34c89d8ff1502010000eb0e48b8487cf1acaa2a000090ff55584d89cc483b65187303ff5548e951ffffff488b4424384883c440c34c8b5c24084983fb0175074c8b642418eb194989c2488b442418488d542440ff15ba0000004989c44c89d04989c14d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c8960104c89480848c700010000004883c440ff2588000000|@2576,8191,@2577,@2044,@2046,@2047,@1456,@1454,@2044,@2046,@2047,@1456,@1454,@2575,@1456|234,0,@2522 442,0,@2522 2522:O3|@7377,@215,@2523 2523:S36|667265657a6547656e657269633a204e6f742061206c6162656c6c6564207265636f7264 2524:S32|545950455f5452454528292e747970654d617463682834296d61746368283329 2525:C2,48|4889d84883e0054883f801750c49be0300000000000000eb0a49be01000000000000004c89f04883f002c39090909090|@2526,4105|15,0,1 27,0,0 2526:S31|5354525543545f56414c5328292e74764e6f6e556e69666961626c65283229 2527:C16,760|90909090909090483b65187303ff55484c8b72f84d8d7fc84c3b7d107303ff554049c747f8060000004d89fd49bc0881f1acaa2a00004d8965004d8b66f84d8965284c8b5ae04d895d204c8b52e84d8955184c8b4af04d894d10498945084989d04889c74889de488b5f08488b079090ff15aa0200004889c34889d8ff15a60200004883f80174344c89e94889d89090ff159a020000495057565149b848bff0acaa2a00004889d84889f34c8b742418498b56f8ff157e020000eb4a4889d890ff157a0200004883f80174344889d890ff157202000049505756495549b848bff0acaa2a00004889da4889f34889d0488b4c2418488b51f8ff1552020000eb06495057564955488b542410488b5a08488b029090ff153e0200004883f8017402eb604d8d7fe84c3b7d107303ff554049c747f8020000004c89f848b95085f1acaa2a00004889084c8b34244c89700890ff150a0200004989c5488b4424084c89ea909090ff124989c448b803000000000000004c89e29090ff124883f8017402eb6f488b442408488d542420ff15d60100004883f801745e488b4c2410488b5908488b01ff15c60100004883f801740c48b8b886f1acaa2a0000eb0a48b8f886f1acaa2a00004c8b7424184d8b6ef85049ff75f849ff76e0498b46f0498b56e8ff124989c44d8d7fe04c3b7d10730feb0ae941000000e92d000000ff554049c747f8030000004c89f84c8b5c24104c8958104c8960084c8b14244c8910488b5424084883c438ff2248b801000000000000004883c420c34c8b5c2410498b5b08498b0390ff152e0100004883f801746d49b83887f1acaa2a000048bb288df1acaa2a0000488b442408909090ff150e0100004883f8ff75644c8b5424184d8b4af849ff71f849ff72e0498b42f0498b52e8909090ff124989c04d8d7fe04c3b7d107303ff554049c747f8030000004c89f848bfc08df1acaa2a0000eb05e91a000000488978104c894008488b3424488930488b5424089090ff12eb025050488b5c2418488b4424204883c430ff2596000000909090909090|@2549,8191,@2044,@2046,@2047,@2515,@2060,@2042,@2515,@2525,@2550,@2548,@2525,@2024,@2443,@1454|46,0,@2528 157,0,@2218 222,0,@2218 316,0,@2531 363,0,1 434,0,@2535 446,0,@2536 554,0,0 594,0,@2537 604,0,@2544 691,0,@2547 2528:C23,728|90909090909090483b65187303ff55484883f801750b48b80100000000000000c34989d54889d890ff15d20200004883f801746a4d89ec4889d89090ff15c6020000498b5c24084989c64c8b2b488b53084889d34c89e890ff15b20200004989c5498b5e08498b06ff15aa020000504923c5a801587503ff55704c3be87d054d89ebeb034989c3498b5c24084d89f5488b13488b43084889c34889d0eb05e92a02000090ff15760200004883f8017402eb18498b5d08498b45009090ff15660200004883f8017502eb44498b5d08498b45009090ff15560200004889c34889d8ff15520200004883f80174164889d890ff154a02000049be0100000000000000eb1649be0300000000000000eb0a49be0100000000000000498b5d08498b4500ff152202000050490bc3a801587503ff5570493bc37402eb184d89f2498b5d08498b4500ff1506020000493bc27505eb6c4d89f2498b5d08498b4500ff15f60100004883f801745a4954495549ff74242849ff742420498b442410498b542418ff124989c64d8d7fe04c3b7d107303ff554049c747f8030000004c89f849bdc084f1acaa2a00004c8968104c8970084c8b24244c8920488b542408eb0ae9e2000000e90500000090ff12eb6f498b5d08498b4500ff15860100004954495550504989e6495649b901000000000000004989c04c89db48b8e005edacaa2a000090ff15620100004d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b2c244c89284c8b5c24084c8958089090ff153a0100004989c2eb05e96a0000004c89d090ff152e0100004883f801740f4c89d090ff15260100004989c1eb1948b8b0d7edacaa2a00009090ff555849b901000000000000004c8b442410498b5808498b00ff15fe0000004889c34c89c8ff15fa0000004c89d34c89c0ff15f6000000eb064954495550504c8b4c2418498b5908488b442410ff15e20000004989c04983f0024c89c04883c420c348b80300000000000000c3|@2530,8191,@1458,@1459,@2057,@2057,@2055,@2055,@2044,@2060,@2042,@2057,@2055,@2525,@2024,@1369,@1358,@1458,@1459,@2044,@1454,@1454,@2022|24,0,0 248,0,0 260,0,1 272,0,0 415,0,@2529 487,0,0 503,0,@193 609,0,@970 624,0,0 719,0,1 2529:S44|2854797065207661726961626c65206973206672656520696e20737572726f756e64696e672073636f706529 2530:S57|545950455f5452454528292e747970654d617463682834296d6174636828332961737369676e283229636865636b466f724c6f6f7073283229 2531:C2,56|4989c64d8d7fe04c3b7d107303ff554049c747f8030000004c89f849bdc085f1acaa2a00004c89284c8b6a084c8968104c897008c3909090|@2534,6149|29,0,@2532 2532:C2,32|90909090909090483b65187303ff5548488b5a08488b5210ff22909090909090|@2533,8191| 2533:S60|545950455f5452454528292e747970654d617463682834296d6174636828332961737369676e283229636865636b466f724c6f6f7073283129283129 2534:S57|545950455f5452454528292e747970654d617463682834296d6174636828332961737369676e283229636865636b466f724c6f6f7073283129 2535:S42|2843616e6e6f7420756e6966792077697468206578706c696369742074797065207661726961626c6529 2536:S44|2854797065207661726961626c6520746f20626520756e6966696564206f636375727320696e207479706529 2537:O1|@2538 2538:C26,808|90909090909090483b65187303ff55484989c5498b5d08498b450090ff152e0300004883f801740b48b80300000000000000c3498b5d08498b450090ff15160300004883f801740b48b8ffffffffffffffffc3498b5d08498b450090ff15fe0200004989c4498b5d08498b4500909090ff15f202000050504d89eb4989e249524989c249b9010000000000000049b803000000000000004c89e348b8e005edacaa2a0000ff15c60200004d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b0c244c89084c8b4424084c8940089090ff159e0200004989c6498b5b08498b03ff15960200004d89f54989c44c89eb4c89d89090ff158a0200004c89e0909090ff15860200004883f801745b4c89e090ff157e020000495548ba688bf1acaa2a00009090ff124883f801750f48b8ffffffffffffffff4883c418c34c8b58084983fb01756d4c8b10488b0424ff154a0200004883f8017414488b0424ff15420200004989c1eb1de95d01000048b8b0d7edacaa2a000090ff555849b901000000000000004c89d090ff151e02000050504989c04c89d09090ff15160200009090ff15160200004883f801743a4d8d7ff0eb05e9b20000004c3b7d107303ff554049c747f80100000049c647ff404c89ff4c89174889e648c706ffffffff4889e348897b08eb114889e748c707010000004889e64c8956084d8d7fe84c3b7d107303ff554049c747f8020000004c89fb488b1424488913488b4c240848894b084d8d7fe04c3b7d107303ff554049c747f8030000004c89f8488958104c89400848c700010000009090ff15760100004889c34c89c8ff157201000048b803000000000000004883c428c34989c2488b0424ff155e0100004883f801740f488b0424ff15560100004989c1eb1948b8b0d7edacaa2a00009090ff555849b901000000000000004c89d090ff15360100004889c34c89c8ff153201000048b803000000000000004883c418c34c89e8ff15220100004883f801740f4c89e890ff151a0100004989c3eb1948b8b0d7edacaa2a00009090ff555849bb01000000000000004c89e34c89d89090ff15f600000048b803000000000000004883c410c390909090909090|@2543,8191,@2024,@2525,@2057,@2055,@1369,@1358,@2044,@1454,@2060,@2042,@1458,@1459,@2066,@1461,@1463,@1465,@1454,@1458,@1459,@2542,@1454,@1458,@1459,@1454|42,0,1 74,0,-1 133,0,0 143,0,1 156,0,@193 286,0,@2539 306,0,-1 370,0,@970 384,0,0 608,0,1 657,0,@970 672,0,0 704,0,1 749,0,@970 764,0,0 788,0,1 2539:O1|@2540 2540:C3,120|90909090909090483b65187303ff55484883f801750b48b80100000000000000c34c8b104c8b48084c89d090ff156e0000004883f801743549524c89c8e8c5ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b04244889024889d04883c408c34c89c8eb95909090909090|@2541,8069,@2241|24,0,0 2541:S62|545950455f5452454528292e747970654d617463682834296d6174636828332961737369676e28322963616e4d6b4571547628312966696c746572283129 2542:C2,40|4989c64d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89700848c70005000000c390|@2061,4097| 2543:S53|545950455f5452454528292e747970654d617463682834296d6174636828332961737369676e28322963616e4d6b45715476283129 2544:O1|@2545 2545:C2,16|48b8ffffffffffffffffc39090909090|@2546,1|2,0,-1 2546:S44|545950455f5452454528292e747970654d617463682834296d6174636828332961737369676e283229283129 2547:S24|28526571756972657320657175616c697479207479706529 2548:C15,264|90909090909090483b65187303ff55484989d54989c44c89e0909090ff150e0100004883f801746e4d89eb4c89e09090ff15020100004c8b10488b4010909090ff15fa0000004d89d94989c04c89c090ff15f20000009090ff15f20000004883f801740b48b80300000000000000c34c89c09090ff15de0000004889c74c89c0ff15da0000004c89d3909090ff15d60000004951eb05e92c00000049b803000000000000004889c34889f890ff15be0000009090ff15be000000488b14244883c408e940ffffff4c89e09090ff15ae0000004883f80174254d89eb4c89e09090ff15a2000000498b5bf09090ff159e0000004989c24983f2024c89d0c348b80300000000000000c3|@2561,8191,@2062,@2063,@2064,@2226,@2015,@2226,@2239,@2463,@2465,@2039,@1458,@1459,@2022|102,0,1 157,0,1 255,0,1 2549:S41|545950455f5452454528292e747970654d617463682834296d6174636828332961737369676e283229 2550:C2,88|4d8d7fe84c3b7d107303ff554049c747f8020000004d89fe49bd6090f1acaa2a00004d892e498946084d8d7fe84c3b7d107303ff554049c747f8020000004c89f849bdc893f1acaa2a00004c89284c897008c39090909090|@2560,6145|26,0,@2551 67,0,@2556 2551:C17,368|90909090909090483b65187303ff554852504889d8909090ff157a0100004c8b74240850498b5608ff124989c5488b4424084c89ea909090ff124989c4488b0424909090ff15560100004883f801742b488b0424ff154e010000488b5808488b00909090ff15460100004889c34c89e0488b5424104883c418eb8c488b042490ff15320100004883f80174234d89e3488b042490ff15260100004953488b00488d542420ff151e0100004883c420c3488b042490ff15160100004883f8017430488b0424ff150e01000048ff30488b58084c89e0488b542418e829ffffff488b1c24488b5424184883c420e917ffffff488b0424ff15e60000004883f80174274d89e3488b042490ff15da0000004953488b4008488d542420909090ff15ce0000004883c420c3488b042490ff15c60000004883f80174084c89e04883c418c3488b0424ff15b60000004883f80174084c89e04883c418c3488b0424ff15a60000004c89e04883c418c3909090909090|@2553,8191,@2039,@1458,@1459,@2044,@2062,@2063,@2554,@2084,@2085,@2046,@2047,@2552,@2231,@2015,@2042| 2552:C2,72|90909090909090483b65187303ff55484883f8017505488b42e0c35248ff30488b40089090e8ddffffff488b1424488b4c2408488b5a08488b51f84883c410ff2290909090909090|@2555,8191| 2553:S31|545950455f5452454528292e666f6c6454797065283129666f6c6454283229 2554:C2,64|90909090909090483b65187303ff55484883f8017505488b42e0c35248ff30488b40089090e8ddffffff4c8b742408488b1c24498b56f84883c410ff22909090|@2555,8191| 2555:S13|4c6973742e666f6c6472283329 2556:C2,56|4989c64d8d7fe04c3b7d107303ff554049c747f8030000004c89f849bd3894f1acaa2a00004c89284c8b6a084c8968104c897008c3909090|@2559,6149|29,0,@2557 2557:C2,32|90909090909090483b65187303ff5548488b5a08488b5210ff22909090909090|@2558,8191| 2558:S34|545950455f5452454528292e666f6c6454797065283129666f6c6454283129283129 2559:S31|545950455f5452454528292e666f6c6454797065283129666f6c6454283129 2560:S23|545950455f5452454528292e666f6c6454797065283129 2561:S58|545950455f5452454528292e747970654d617463682834296d6174636828332961737369676e283229636865636b5265616c4572726f72283129 2562:C5,240|90909090909090483b65187303ff55484883f801750b48b80100000000000000c35248ff3048ff7008488b42b848f7c001000000755a4c8b284c8b6008488b4424089090ff15ce0000004989c34c89e8ff15ca0000004d89e24889c34c89d890ff15c20000004883f801740c49be0300000000000000eb224c89d0483b65187303ff5548eba749be010000000000000049be01000000000000004983fe01743a488b0424488b542410e859ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fe498946084c8b6c24084d892e4c89f04883c418c3488b0424488b5424104883c418e91bffffff90909090|@2563,7951,@1461,@1461,@2272|24,0,0 110,0,1 136,0,0 146,0,0 2563:S44|545950455f5452454528292e747970654d617463682834296d61746368283329696e74657273656374283229 2564:C18,688|90909090909090483b65187303ff554848f7c001000000756e4c8b70084983fe0175694c8b284c89e8909090ff15a602000050504989c64c89e89090ff159e0200004d89f4909090ff159a0200004883f801743d4d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89fa4c892a4889e048c700ffffffff4989e649895608eb1be946010000e96a0000004889e248c702010000004889e04c8968084d8d7fe84c3b7d107303ff554049c747f8020000004d89fe4c8b2c244d892e488b542408498956084d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c8970104c89600848c700010000004883c410ff25f501000050504989c44989e2495249ba010000000000000049b9010000000000000049b8010000000000000048bb1f4e00000000000048b8e005edacaa2a000090ff15ba0100004d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b0c244c89084c8b4424084c8940089090ff15920100004889c34c89e0ff158e0100004989c54889d8ff158a0100004883f80174134d89ea4889d89090ff157e0100004989c4eb1948b8b0d7edacaa2a00009090ff555849bc01000000000000004989d94c89d34c89e0909090ff15560100004c89c84883c410c350504989c44989e2495249ba010000000000000049b9010000000000000049b8010000000000000048bb1f4e00000000000048b8e005edacaa2a00009090ff15120100004d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b0c244c89084c8b4424084c8940089090ff15ea0000004889c34c89e0ff15e60000004989c54889d8ff15e20000004883f80174134d89ea4889d89090ff15d60000004989c4eb1948b8b0d7edacaa2a00009090ff555849bc01000000000000004989d94c89d34c89e0909090ff15ae0000004c89c84883c410c3909090909090|@2565,7629,@2066,@1461,@1463,@1465,@1369,@1358,@2542,@1458,@1459,@1454,@1369,@1358,@2542,@1458,@1459,@1454|263,0,0 273,0,0 283,0,0 293,0,9999 303,0,@193 417,0,@970 432,0,0 478,0,0 488,0,0 498,0,0 508,0,9999 518,0,@193 633,0,@970 648,0,0 2565:S28|545950455f5452454528292e6d6b4f7665726c6f6164536574283129 2566:C33,672|90909090909090483b65187303ff55484989d54989c4498b5c2408498b042490ff15a20200004883f8017472498b45d0ff159a0200004883f80174674c89eb4c89e1488b43d09090ff158a0200004c8b18488b4010909090ff15820200004989c64c89f0ff157e0200004d89f5909090ff157a0200004883f8017402eb2a4d89da4d89e94c89c890ff156a0200009090ff156a0200004883f8017512eb64e9d9010000e9ad0100004d89e94d89da5351488b43d0488b53e8ff124989c44c89e0ff15420200004883f801745a4c89e090ff153a0200004c8b18488b4010909090ff15320200004989c24c89d0ff152e0200009090ff152e0200004883f8017407eb29e9e10000004d89d94c89d0909090ff151a0200009090ff151a0200004883f801750aeb2ee9970000004d89d94c8b4c2408498b41d0498b51e890ff124889c3488b0424488b5424084883c410ff25ec0100004c8b4424084c89d0ff15e60100004889c74c89d0ff15e20100004c89cb909090ff15de01000049ff70d849b803000000000000004889c34889f89090ff15ca0100009090ff15ca01000049b848bff0acaa2a00004889c3488b0424488b742410488b56f84883c418ff25ae0100004c8b5c2408498b43d0498b53e890ff124889c3488b0424488b5424084883c410ff25900100004c89c890ff158e0100004989c04c89c8ff158a0100004889df4c89d3ff15860100005748ff77d84c89c649b803000000000000004889c34889f09090ff156e0100009090ff156e010000488b5c24084c8b43e84889c3488b0424488b542408488b52f84883c410ff255301000049554954498b45d0498b55e8909090ff124889c3488b0424488b5424084883c410ff253401000049554954498b45d0498b55e8ff124889c3488b0424488b5424084883c410ff2518010000|@2567,8191,@2525,@2062,@2063,@2064,@1461,@1463,@2226,@2015,@2062,@2063,@2064,@1461,@1463,@2226,@2015,@2527,@2226,@2239,@2463,@2465,@2039,@2515,@2527,@2226,@2239,@2463,@2465,@2039,@2515,@2527,@2527|384,0,1 416,0,@2218 532,0,1 2567:S34|545950455f5452454528292e747970654d617463682834296d617463682833292f34 2568:C28,600|90909090909090483b65187303ff55484989d5488b5808488b009090ff155e0200004883f801746a498b45d8ff15560200004883f801745f4c89eb488b43d890ff154a020000488b08488b4010909090ff15420200004989c64c89f0ff153e0200004d89f5909090ff153a0200004883f8017402eb264d89ea4c89d0ff152e0200009090ff152e0200004883f801750feb5ae94c010000e9d40000004d89ea53488b43d0488b53e8ff124989c44c89e0ff150a0200004883f80174354c89e090ff15020200004c8b1c2450498b43d8498b53e890ff124889c3488b0424488b5424084883c410ff25e4010000e9230000004c8b1c2449b848bff0acaa2a00004c89e3498b43d8498b53f84883c408ff25c40100004c89d090ff15c20100004989c14c89d0ff15be0100004989d84889cbff15ba010000495049b803000000000000004889c34c89c8ff15aa0100009090ff15aa010000488b3c244c8b47e8488b5fd0488b57f84883c408ff25980100004955498b45d0498b55e89090ff124989c44c89e0ff15860100004883f80174304c89e090ff157e0100004c8b1c2450498b43d8498b53e890ff124889c3488b0424488b5424084883c410ff25600100004c8b1c2449b848bff0acaa2a00004c89e3498b43d8498b53f84883c408ff25450100004955498b45d0498b55e8909090ff124989c44c89e0ff15320100004883f80174304c89e090ff152a0100004c8b1c2450498b43d8498b53e890ff124889c3488b0424488b5424084883c410ff250c0100004c8b1c2449b848bff0acaa2a00004c89e3498b43d8498b53f84883c408ff25f100000090|@2569,8191,@2525,@2062,@2063,@2064,@1461,@1463,@2226,@2015,@1458,@1459,@2527,@2515,@2226,@2239,@2463,@2465,@2039,@2515,@1458,@1459,@2527,@2515,@1458,@1459,@2527,@2515|247,0,@2218 314,0,1 454,0,@2218 570,0,@2218 2569:S34|545950455f5452454528292e747970654d617463682834296d617463682833292f35 2570:C3,288|90909090909090483b65187303ff55484883fb0175674883f801750b48b80100000000000000c34c8b72f849ff76f848ff72e0488b42f0488b52e890ff124989c54d8d7fe04c3b7d107303ff554049c747f8030000004c89f849bc88a3f1acaa2a00004c8960104c8968084c8b1c244c8918488b5424084883c410ff2248f7c001000000753f5248ff730848ff700849b848bff0acaa2a00004c8b33488b184c89f0488b52f89090ff159a000000488b5c2408488b0424488b5424104883c418e942ffffff4c8b72f849ff76f848ff72e0488b42f0488b52e8909090ff124989c54d8d7fe04c3b7d107303ff554049c747f8030000004c89f849bc88a3f1acaa2a00004c8960104c8968084c8b1c244c8918488b5424084883c410ff22909090|@2572,8191,@2515|30,0,0 91,0,@2571 145,0,@2218 251,0,@2571 2571:S32|28446966666572656e74206e756d62657273206f6620617267756d656e747329 2572:S45|545950455f5452454528292e747970654d617463682834296d617463682833296d617463684c69737473283229 2573:C25,544|90909090909090483b65187303ff55484989d34989c24889d8909090ff15260200004889c34889d8ff15220200009090ff15220200004883f8017402eb6e4c89d94889d8ff15160200009090ff15160200004883f80174054989cbeb674889d8ff150a0200004989c64889d8ff15060200004d89f14c89d3ff15020200005148ff71d849b803000000000000004889c34c89c890ff15ee0100004c8b4424084d8b40e84889c3488b0424eb05e913000000488b7c2408488b57f84883c410ff25cc0100004953498b43d0498b53e89090ff124989c54c89e8ff15ba0100004883f801746d4d89eb4c89d89090ff15ae0100004c8b10488b4010909090ff15a60100004989c14c89c8ff15a20100009090ff15a20100004883f801740f48b801000000000000004883c408c34d89d84c89c8909090ff15860100009090ff15860100004883f801756e488b3c244c89c8eb05e9a30000009090ff15720100004889c64c89c8ff156e0100004c89d3909090ff156a01000048ff77d849b803000000000000004889c34889f09090ff155601000049b848bff0acaa2a00004889c3488b0424488b542408488b52f84883c410ff253a010000488b3c24488b77f84d8d7fe04c3b7d107303ff554049c747f8030000004c89f848bb8078f1acaa2a000048895810488b57d8488950084c8900488b56f84883c408ff224c8b242449b848bff0acaa2a00004c89eb498b4424d8498b5424f84883c408ff25da0000009090|@2574,8191,@2064,@1461,@1463,@2226,@2015,@2226,@2239,@2463,@2465,@2515,@2062,@2063,@2064,@1461,@1463,@2226,@2015,@2226,@2239,@2463,@2465,@2515,@2515|133,0,1 286,0,0 380,0,1 404,0,@2218 472,0,@2516 511,0,@2218 2574:S35|545950455f5452454528292e747970654d617463682834296d617463682833292f3130 2575:C2,88|90909090909090483b65187303ff55484883f8017505488b42c8c35248ff30488b40089090e8ddffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b04244889024889d04883c410c3909090|@1847,5| 2576:S47|545950455f5452454528292e747970654d617463682834296d61746368283329756e6966795265636f726473283529 2577:C16,1368|90909090909090483b65187303ff55484883f801756d4883fb01750b48b80100000000000000c3488b034c8b72d04983fe01746e4c8b6ae04d8b65f85348ff3049ff7424f848ff72e8488b42f8488b52f0909090ff1250488b5c241848b810aef1acaa2a00009090ff151205000048bb28aef1acaa2a0000ff150a0500004989c3eb05e9b30000004d8d7fe04c3b7d107303ff554049c747f8030000004c89f8eb05e91d0000004c8958104c8b14244c8950084c8b4c24084c8908488b542410ff12eb6553524883fb017502eb604c8b2b4c8b242448ff730849ff75004d8b5c24d84983fb017502eb2b49ff7308488b5c2408498b03488b54241890ff158e0400004c8b1c244883c408483b65187303ff5548ebcd488b5c24084883c410483b65187303ff5548eb9de903000000505050488b4424204883c428c34c8b304883fb01756f4c8b6ac04983fd01746a4c8b62e04d8b5c24f85049ff3649ff73f848ff72e8488b42f8488b52f090ff1250488b5c241848b810aef1acaa2a00009090ff151204000048bb28aef1acaa2a0000ff150a0400004989c24d8d7fe04c3b7d107303ff554049c747f8030000004c89f8eb0ae99b000000e91f0000004c8950104c8b0c244c8948084c8b4424084c8900488b5424109090ff12eb6550524883f8017502eb604c8b204c8b1c2448ff700849ff34244d8b53c84983fa017502eb2c49ff7208488b5c2408498b02488b5424189090ff158e0300004c8b14244883c408483b65187303ff5548ebcc488b4424084883c410483b65187303ff5548eb9de903000000505050488b4424204883c428c34c8b2b4989d44989c34989da4d8b0e4d8b460849ff750049ff7508488b5c24084c89c89090ff15320300004883f801756b495449ff3349ff730849ff72084c89c74d8b4424f0488b5c24204889f8498b7424e0488b56f89090ff1506030000488b1c24488b442408488b54241890e841fdffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fb48894308488b5424104889134889d8eb05e9050000004883c430c3a8017503ff55704883f8017d72498b7c24c04883ff01746c498b7424e0488b5ef84953495148ff73f849ff7424e8498b4424f8498b5424f0909090ff1250488b5c241848b810aef1acaa2a00009090ff157202000048bb28aef1acaa2a0000ff156a0200004889c24d8d7fe04c3b7d107303ff554049c747f803000000eb0ae9b5000000e92a0000004c89f848895010488b0c24488948084c8b7424084c8930488b5424109090ff12488b4424204883c438c34954495249ff33495149ff7308498b7424c84883fe017502eb2b48ff7608488b5c2410488b06488b54242890ff15f2010000488b34244883c408483b65187303ff5548ebcd488b5c2418488b0424488b5424209090e801fcffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fb48894308488b5424104889134889d84883c438c3498b7c24d04883ff01746e498b7424e0488b5ef8495248ff73f849ff7424e8498b4424f8498b5424f090ff1250488b5c242848b810aef1acaa2a00009090ff156201000048bb28aef1acaa2a0000ff155a0100004889c24d8d7fe04c3b7d107303ff554049c747f8030000004c89f848895010488b0c24eb05e920000000488948084c8b7424084c8930488b542410909090ff12488b4424184883c430c34954495349ff3249ff7208498b7424d84883fe017502eb2d48ff7608488b5c2430488b06488b542420909090ff15e6000000488b34244883c408483b65187303ff5548ebcb488b1c24488b442410488b5424189090e8ddfaffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fb48894308488b5424084889134889d84883c430c39090|@2583,8191,@303,@303,@2580,@303,@303,@2580,@1450,@2515,@303,@303,@2580,@303,@303,@2580|30,0,0 94,0,@2578 112,0,@2579 374,0,@2578 392,0,@2579 830,0,@2578 848,0,@2579 1126,0,@2578 1144,0,@2579 2578:S7|284669656c6420 2579:S9|206d697373696e6729 2580:C15,424|90909090909090483b65187303ff55484989d64989c54989dc498b5d08498b4500909090ff15a60100004d89f34989c2498b5d08498b4500ff159a0100004989c1498b5d08498b4500909090ff158e0100004989c0498b5d08498b4500909090ff158201000050504c89ef4889e3534c89d24989c24c89c84d89c14989c04889d348b8e005edacaa2a000090ff155e0100004d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b34244c89304c8b6c24084c8968089090ff15360100004d8d7fe84c3b7d107303ff554049c747f8020000004d89fa498942084d892249524954488b5f08488b07ff150e0100004989c14c89c8ff150a0100004883f801746a4c89c890ff15020100004c8b004983f801755c4989f9488b4008488d54242090ff15ee0000004989c04d8d7fe04c3b7d107303ff554049c747f8030000004c89f848c74010010000004c89400848c70001000000ff15c20000004889c34c89c84883c420ff25ba000000e9180000004953488b4008488d5424289090ff15aa0000004883c428c348b890b0f1acaa2a00009090ff555848b8010000000000000090909090|@2585,8191,@2057,@2024,@2525,@2055,@1369,@1358,@2044,@2046,@2047,@2586,@1456,@1454,@2584|131,0,@193 397,0,@2581 412,0,0 2581:O3|@7377,@215,@2582 2582:S40|6164644669656c64546f47656e657269633a204e6f742061206c6162656c6c6564207265636f7264 2583:S63|545950455f5452454528292e747970654d617463682834296d61746368283329756e6966795265636f7264732835296d617463684c6162656c6c6564283229 2584:C5,232|90909090909090483b65187303ff55484883f801750b48b80100000000000000c34c8b304989d44d8b1e4c8b5008498b5c24e04c89d89090ff15d20000004883f801750b48b80100000000000000c3a8017503ff55704883f8017d084c89d04c89e2eba34d8b4c24d84d8b41e0498b78f8495348ff77f849ff71e8498b41f8498b51f090ff1250488b5c241848b810aef1acaa2a00009090ff157a00000048bb28aef1acaa2a0000ff15720000004889c64d8d7fe04c3b7d107303ff554049c747f8030000004c89f848897010488b1c2448895808488b542408488910488b5424104883c420ff22|@2588,8191,@1450,@303,@303|24,0,0 70,0,0 142,0,@2578 160,0,@2579 2585:S67|545950455f5452454528292e747970654d617463682834296d61746368283329756e6966795265636f7264732835296164644669656c64546f47656e65726963283229 2586:C3,280|90909090909090483b65187303ff55484883f80175284d8d7fe84c3b7d107303ff554049c747f8020000004c89f848c74008010000004c8b72e84c8930c34c8b304989d44d89f34c8b5008498b5c24e0498b0690ff15e60000004883f80175234d8d7fe84c3b7d107303ff554049c747f8020000004c89ff4c8957084c891f4889f8c3a8017503ff55704883f8017d3d495449534c89d04c89e2909090e865ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89ff48894708488b34244889374889f84883c410c34d8d7fe84c3b7d107303ff554049c747f8020000004c89ff4c8957084c891f4d8d7fe84c3b7d107303ff554049c747f8020000004c89fe48897e08498b5c24e848891e4889f0c390909090|@2587,7999,@1450| 2587:S78|545950455f5452454528292e747970654d617463682834296d61746368283329756e6966795265636f7264732835296164644669656c64546f47656e65726963283229616464456e747279283129 2588:S82|545950455f5452454528292e747970654d617463682834296d61746368283329756e6966795265636f7264732835296164644669656c64546f47656e65726963283229636865636b456e7472696573283129 2589:C17,672|90909090909090483b65187303ff55484989c64c89f09090ff15aa0200004989c54889d8ff15a60200004955495249514989c44c89f09090ff159a0200004989c34889d8ff159602000049534c0bd841f6c301495b7503ff55704c3bd8741148b801000000000000004883c418c210004889d890ff156e02000050504989c34c89f09090ff15660200004c89f7909090ff15620200004883f80174334d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89fa48893a4889e048c700ffffffff4989e649895608eb114889e248c702010000004889e0488978084d8d7fe84c3b7d107303ff554049c747f8020000004d89fe488b1424498916488b442408498946084d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c8970104c8968084c89184c89e69090ff15ca01000050504989c64889d89090ff15c20100004d89f5909090ff15be0100004883f80174344d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fc49891c244889e248c702ffffffff4889e04c896008eb124989e449c70424010000004889e248895a084d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b34244c89304c8b6424084c8960084889c24d8d7fe04c3b7d107303ff554049c747f8030000004c89f848895010488970084c89184d89eb90ff15220100004d8d7fd84c3b7d107303ff554049c747f8040000004c89fa49be38b8f1acaa2a00004c89324c895218488972104c8b6c24484c896a085753524c8b5424584c8b4c24404889c34c89d890ff15da000000488b44240890ff15d60000004989c2488b0424909090ff15ce0000004883f8017502eb084983fa017402eb1148b801000000000000004883c448c210004889c34c89d0488d5424489090ff15a20000004883c448c21000909090|@2597,8191,@2066,@2066,@2441,@2441,@2239,@1461,@1463,@1465,@1461,@1463,@1465,@2494,@2265,@2265,@2592|97,0,0 528,0,@2590 628,0,0 2590:C6,208|90909090909090483b65187303ff55484c8b7218525048bb280af0acaa2a0000498b464848bae8d7edacaa2a00009090ff15c20000004c8b2c244c8b6424085049ff7518498b5c241048b81857f1acaa2a000090ff15a600000048bb3857f1acaa2a0000ff159e000000488b14249090ff124c8b5c241048b83829f0acaa2a0000498b13ff124c8b5424184d8d7fe84c3b7d107303ff554049c747f8020000004d89f949c74108010000004d8b42084d89014c8b442410488b5c24084c89c84883c420ff254700000090909090909090|@2493,8191,@974,@303,@303,@1972|24,0,@1964 38,0,@972 75,0,@2491 92,0,@2492 121,0,@1996 2591:S65|535452554354555245535f28292e6d61746368536967732836296d6174636856616c73283229636865636b5479706573416e64537472756374757265732d283329 2592:C16,488|90909090909090483b65187303ff55484883fb0175694883f801750b48b80100000000000000c348ff72f048ff721048ff7208488b5af848b848bcf1acaa2a0000909090ff15c601000048bb5300000000000000ff15be0100004989c24c8b0c244c8b44240848bb0300000000000000488b4424104883c418ff25a10100004883f801755648ff72f048ff721048ff7208488b5af848b880bcf1acaa2a000090ff158201000048bb5300000000000000ff157a0100004989c24c8b0c244c8b44240848bb0300000000000000488b4424104883c418ff255d0100004989d64c8b284c8b60084c89e8ff15520100004989c3488b03ff154e0100004c8b134c8b4b084989c04c89c34c89d848bab018600000000000ff124883f8017563495349ff76f049ff761049ff76084c89c348b8b8bcf1acaa2a000090ff151201000048bbe0bcf1acaa2a0000ff150a010000488b5c241890ff15060100004989c24c8b0c244c8b44240848bb0300000000000000488b4424104883c420ff25e90000004c89e89090ff15e60000004889c74c89d0ff15e20000004889c64d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c89581048897008488938495649514954498b56e89090ff12488b5c2408488b0424488b5424104883c418e926feffff90909090909090|@2598,8191,@303,@303,@1956,@303,@303,@1956,@2136,@2136,@303,@303,@303,@1956,@2277,@2277|30,0,0 57,0,@2593 76,0,41 104,0,1 151,0,@2594 168,0,41 196,0,1 268,0,I24 303,0,@2595 320,0,@2596 360,0,1 2593:S37|546f6f206d616e7920636f6e7374727563746f727320746f206d6174636820747970652028 2594:S39|4e6f7420656e6f75676820636f6e7374727563746f727320746f206d6174636820747970652028 2595:S24|4c6f6f6b696e6720666f7220636f6e7374727563746f7220 2596:S11|2062757420666f756e6420 2597:S33|535452554354555245535f28292e636865636b54797065436f6e73747273283729 2598:S48|535452554354555245535f28292e636865636b54797065436f6e73747273283729636865636b436f6e73747273283229 2599:C2,40|90909090909090483b65187303ff55484c8b4010488b5808488b00488b5208ff2290909090909090|@2600,8191| 2600:S65|535452554354555245535f28292e6d61746368536967732836296d6174636856616c73283229636865636b5479706573416e64537472756374757265732d283129 2601:C22,840|90909090909090483b65187303ff55484989d04889c74889d848ba28b5f0acaa2a000090ff15460300004883f80174714889d848ba10b5f0acaa2a0000909090ff15320300004889c3488b4308909090ff152a0300004883f8017415488b4308ff152203000048b80100000000000000c3498b4028909090ff1512030000495057534989f848bbf0b4f0acaa2a000090ff150203000048f7c001000000756deb05e995020000488b1424488b4a084883f901750c49be0300000000000000eb0a49be01000000000000004c8b284d8b65084983fc01750c49bb0300000000000000eb0a49bb01000000000000004983fb0175684983fe0174624c8b5c241049ff731849ff731049ff7308eb05e9cc010000488b5c242048b850c2f1acaa2a0000ff157a02000048bb68c2f1acaa2a0000ff15720200004989c24c8b0c244c8b44240848bb0300000000000000488b4424104883c430ff25550200004983fb01746a4983fe017569488b009090ff15460200004989c34c89d8ff15420200004883f801740c49baa8c2f1acaa2a0000eb354d8d7fe84c3b7d107303ff554049c747f8020000004c89f849baa8c2f1acaa2a00004c8950084c8918909090ff15060200004989c2488b0424eb0ae981000000e97c000000909090ff15f20100004c8b4c24104d8d7fd84c3b7d107303ff554049c747f8040000004d89f848bfe8c2f1acaa2a0000498938498b711849897018488b5c240849895810498b511049895008488b4c24184c894424184d89d64d8b51084d8b69204d8b61184d89e14d89e84889c34c89f04883c41851ff2587010000488b00ff15860100004989c3488b0424909090ff157e0100004c8b5424104d8d7fd84c3b7d107303ff554049c747f8040000004d89f949b810c4f1acaa2a00004d8901498b7a1849897918488b74240849897110498b5a1049895908488b5424184c894c2418498b4a204d8b72184d8b4a084d89ca4d89f14989c84889c34c89d84883c41852ff2513010000488b54241048ff721848ff721048ff7208488b5c242048b850c2f1acaa2a0000909090ff15f200000048bbc035f1acaa2a0000ff15ea0000004989c24c8b0c244c8b44240848bb0300000000000000488b4424104883c430ff25cd00000048b80100000000000000c39090|@2609,8191,@2198,@2201,@2610,@2612,@2206,@2358,@303,@303,@1956,@2277,@2608,@1404,@2277,@2494,@2277,@2277,@2494,@303,@303,@1956|27,0,@2197 53,0,@2196 104,0,0 135,0,@2195 182,0,1 194,0,0 217,0,1 229,0,0 280,0,@2602 296,0,@2603 324,0,1 390,0,@2604 426,0,@2604 509,0,@2606 649,0,@2607 757,0,@2602 776,0,@2430 804,0,1 829,0,0 2602:S7|56616c75652028 2603:S46|29206d75737420626520616e20657863657074696f6e20746f206d6174636820746865207369676e61747572652e 2604:O4|-3,0,@497,@2605 2605:O2|0,@499 2606:C6,208|90909090909090483b65187303ff55484c8b7218525048bb280af0acaa2a0000498b464848bae8d7edacaa2a00009090ff15c20000004c8b2c244c8b6424085049ff7518498b5c241048b81857f1acaa2a000090ff15a600000048bb3857f1acaa2a0000ff159e000000488b14249090ff124c8b5c241048b83829f0acaa2a0000498b13ff124c8b5424184d8d7fe84c3b7d107303ff554049c747f8020000004d89f949c74108010000004d8b42084d89014c8b442410488b5c24084c89c84883c420ff254700000090909090909090|@2493,8191,@974,@303,@303,@1972|24,0,@1964 38,0,@972 75,0,@2491 92,0,@2492 121,0,@1996 2607:C6,208|90909090909090483b65187303ff55484c8b7218525048bb280af0acaa2a0000498b464848bae8d7edacaa2a00009090ff15c20000004c8b2c244c8b6424085049ff7518498b5c241048b81857f1acaa2a000090ff15a600000048bb3857f1acaa2a0000ff159e000000488b14249090ff124c8b5c241048b83829f0acaa2a0000498b13ff124c8b5424184d8d7fe84c3b7d107303ff554049c747f8020000004d89f949c74108010000004d8b42084d89014c8b442410488b5c24084c89c84883c420ff254700000090909090909090|@2493,8191,@974,@303,@303,@1972|24,0,@1964 38,0,@972 75,0,@2491 92,0,@2492 121,0,@1996 2608:C2,32|4c8b304983feff750b48b80300000000000000c348b80100000000000000c390|@2613,4097|11,0,1 22,0,0 2609:S66|535452554354555245535f28292e6d61746368536967732836296d6174636856616c73283229636865636b56616c756573416e64457863657074696f6e732d283329 2610:C2,48|90909090909090483b65187303ff554848baf02c6000000000009090ff124889c24883f2024889d0c390909090909090|@2611,5|18,0,I105 2611:S11|436f6e7374727563746f72 2612:C2,8|488b00c390909090|@2611,1| 2613:S24|5354525543545f56414c5328292e6973456d707479283129 2614:C2,40|90909090909090483b65187303ff55484c8b4010488b5808488b00488b5208ff2290909090909090|@2615,8191| 2615:S66|535452554354555245535f28292e6d61746368536967732836296d6174636856616c73283229636865636b56616c756573416e64457863657074696f6e732d283129 2616:S38|535452554354555245535f28292e6d61746368536967732836296d6174636856616c73283229 2617:S57|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973747275637456616c7565283529 2618:C3,56|90909090909090483b65187303ff5548504951534c89c348b890c8f1acaa2a0000488d5424189090ff15320000004883c418c39090909090|@2630,8191,@2626|25,0,@2619 2619:O1|@2620 2620:C4,192|90909090909090483b65187303ff55484883f80175535048b81500000000000000909090ff15be0000004d8d7fd84c3b7d107303ff554049c747f8040000004d89fd49c745180100000049c745100100000049bcb01e6000000000004d896508498945004d89eeeb054c8b7010504c89f048ba7012f1acaa2a000090ff156e0000004c8b68584d8d7fe04c3b7d107303ff554049c747f8030000004c89f849bca8c9f1acaa2a00004c89204c8968104c8b1c244c8958084883c408c390909090|@2625,8191,@1852,@2356|25,0,10 84,0,I48 115,0,@2354 160,0,@2621 2621:C3,104|90909090909090483b65187303ff554852488b5210909090ff1248f7c00100000075364c8b3424498b5e08488b009090ff155a0000004989c54d8d7ff04c3b7d107303ff554049c747f8010000004c89f84c89284883c408c348b801000000000000004883c408c3|@2623,8191,@2622|91,0,0 2622:C3,296|90909090909090483b65187303ff55484883f801751a4989c548b8b0d7edacaa2a0000ff555849be01000000000000004c8b70084d8b2e4983fd01756d4883f801750c49bcb01e600000000000eb034c8b204883f80175575349ff7608495448b81500000000000000909090ff15de0000004d8d7fd84c3b7d107303ff554049c747f8040000004d89fa49c742180100000049c742100100000049b9b01e6000000000004d894a08eb0ae978000000e9080000004989024d89d3eb0b4c8b58105349ff760849544d8d7fe04c3b7d107303ff554049c747f8030000004d89fa4c8b4c24104d894a104c8b4424084d89420849c702050000004d8d7fe04c3b7d107303ff554049c747f8030000004c89ff4c895f104c895708488b34244889374889f84883c418c3c3|@2624,8191,@1852|27,0,@970 40,0,0 69,0,I48 97,0,10 156,0,I48 2623:S36|56414c55455f4f505328292e6c6f6f6b7570537472756374757265283429283129283129 2624:S35|5354525543545f56414c5328292e6d616b6553656c6563746564537472756374283229 2625:S33|56414c55455f4f505328292e6c6f6f6b7570537472756374757265283429283129 2626:C9,400|90909090909090483b65187303ff5548505052504989de488d5c24104c89f090ff159201000048bbb01e600000000000488b44241048bab01860000000000090ff124883f80174174c8b642408488b442418498b5424e890ff124989c5eb664c8b6c24084d8b4df04c8b442410498b5de848b8e810f1acaa2a000048ba60cef1acaa2a0000909090ff124989c44c89e0ff152a0100004883f801740c49bd78a6edacaa2a0000eb1d4c89e0488b142490ff124989c3488b4424184c89da909090ff124989c549f7c5010000007509498b45004883c420c34c8b54240849ff72f048bb5056edacaa2a0000498b42f89090ff15d2000000488b5c242090ff15ce00000048bb70cef1acaa2a0000ff15c60000004989c148bbb01e600000000000488b44241848bab0186000000000009090ff124883f801740c49b8b01e600000000000eb1f4951488b5c242048b898cef1acaa2a0000909090ff15820000004989c0eb0249514c89c3488b0424ff1576000000488b54240890ff1248b801000000000000004883c430c390909090909090|@2632,8191,@2068,@2631,@303,@303,@303,@303,@303|40,0,I48 55,0,I24 115,0,@2349 125,0,@2627 158,0,@617 226,0,@344 260,0,@2628 279,0,I48 294,0,I24 314,0,I48 333,0,@2629 380,0,0 2627:O1|@2618 2628:S23|2920686173206e6f74206265656e206465636c61726564 2629:S14|20696e2073747275637475726520 2630:S30|56414c55455f4f505328292e6c6f6f6b7570537472756374757265283429 2631:C2,32|4883f801750b48b80300000000000000c348b80100000000000000c390909090|@2633,1|8,0,1 19,0,0 2632:S42|56414c55455f4f505328292e6c6f6f6b75705374727563747572652834296c6f6f6b7570537472283229 2633:S34|5354525543545f56414c5328292e6973556e646566696e6564537472756374283129 2634:C10,400|90909090909090483b65187303ff5548505053495049514952488d5c24209090ff159201000048bbb01e600000000000488b44242048bab01860000000000090ff124883f8017413488b442428488b5424189090ff124989c6eb6c4c8b4c24384c8b442420488b5c241048b8e810f1acaa2a0000ff15460100004989c64c89f0ff15420100004883f80174224d8d7ff04c3b7d107303ff554049c747f8010000004d89fe4c8b6c24404d892eeb234c89f0488b5424089090ff124989c5488b4424284c89eaeb05e905000000ff124989c649f7c601000000750a498b064883c430c2100048bb5056edacaa2a0000488b04249090ff15d6000000488b5c242890ff15d200000048bb70cef1acaa2a0000ff15ca0000004989c448bbb01e600000000000488b44242048bab0186000000000009090ff124883f801740c49bbb01e600000000000eb1f4954488b5c242848b898cef1acaa2a0000909090ff15860000004989c3eb0249544c89db488b0424ff157a000000488b54244090ff12488b4424484883c438c21000909090909090|@2635,8191,@2068,@2618,@2631,@303,@303,@303,@303,@303|40,0,I48 55,0,I24 108,0,@2349 230,0,@344 264,0,@2628 283,0,I48 298,0,I24 318,0,I48 337,0,@2629 2635:S24|56414c55455f4f505328292e6c6f6f6b7570416e79283729 2636:C2,32|4883f801750b48b80300000000000000c348b80100000000000000c390909090|@2637,1|8,0,1 19,0,0 2637:S35|5354525543545f56414c5328292e6973556e646566696e656446756e63746f72283129 2638:C2,40|4883f801751a48b8b0d7edacaa2a0000909090ff555848b80100000000000000488b4018c3909090|@2639,1|8,0,@970 24,0,0 2639:S30|5354525543545f56414c5328292e66756e63746f72526573756c74283129 2640:C2,40|4883f801751a48b8b0d7edacaa2a0000909090ff555848b80100000000000000488b00c390909090|@2641,1|8,0,@970 24,0,0 2641:S27|5354525543545f56414c5328292e66756e63746f72417267283129 2642:C2,272|90909090909090483b65187303ff5548f6c3017503ff55704883fb017d0c49be0100000000000000eb034989de41f6c6017503ff55704d89f54983c50270f44989c44989db4d89c249b8008eeeacaa2a000048bb81000000000000004c89e848ba7015600000000000909090ff124c89304d8d7fd84c3b7d107303ff554049c747f8040000004d89f848bfe0d4f1acaa2a00004989384d8960184d895810498940084d8d7fd84c3b7d107303ff554049c747f8040000004c89fb48bad0d7f1acaa2a00004889134c8963184c895b10488943084d8d7fe84c3b7d107303ff554049c747f8020000004c89f948b880daf1acaa2a00004889014889590849890a4d89420848b80100000000000000c39090|@2648,8047|32,0,0 74,0,@1418 84,0,64 97,0,I11 139,0,@2643 188,0,@2645 237,0,@2647 261,0,0 2643:C5,624|90909090909090483b65187303ff55484989d14989c04c89c0909090ff15760200004883f8017502eb6d49514950498b104883fafd752d498b40084c8b304d8b2e4983fd0375054c89c7eb1b4d89f0483b65187303ff5548ebd448bf01000000000000004c89c7488b074883f8017506488b4f08eb1a48b810a2f0acaa2a0000909090ff555848b901000000000000004c8b742408eb05e9a70000004d8b6e18514923cdf6c101597503ff5570493bcd7d02eb6f4c8b24244d8b14244983fafd752e4d8b4c24084d8b01498b384883ff0375054d89e3eb1b4d89c4483b65187303ff5548ebd249bb01000000000000004d89e34d8b034983f80175064d8b4b08eb1a48b810a2f0acaa2a0000909090ff555849b90100000000000000488b7c2408eb05e91f000000488b571049514c23ca41f6c10149597503ff55704c3bca7c15eb044951495048b801000000000000004883c410c348ff7708488b4c24084c8b314983fefd752f4c8b69084d8b65004d8b1c244983fb0375054889c8eb1b4c89e1483b65187303ff5548ebd248b801000000000000004889c84c8b204983fc0175064c8b6808eb1748b810a2f0acaa2a0000ff555849bd010000000000000041f6c5017503ff55704983fd017d02eb1e4c8b1c244d8b1349524d23d541f6c201495a7503ff55704d3bea7d02eb1948b860d6ecacaa2a00009090ff555849bb010000000000000041f6c5017503ff55704d89e94983c10270f44f8b448bfc4d89c34c89d8909090ff15720000009090ff15720000004883f801740f48b801000000000000004883c418c34d8d7ff04c3b7d107303ff554049c747f8010000004c89f84c89184883c418c39090909090|@2644,8167,@2157,@1461,@1463|92,0,0 120,0,@2153 136,0,0 232,0,0 260,0,@2153 276,0,0 329,0,0 399,0,0 427,0,@2153 440,0,0 497,0,@49 512,0,0 574,0,0 2644:S32|535452554354555245535f28292e747970654d61746368546162283329283129 2645:C3,576|90909090909090483b65187303ff55484989d14989c04c89c0909090ff15460200004883f801746f4951495053498b184883fbfd752d498b5008488b024c8b304983fe0375054c89c7eb1b4989c0483b65187303ff5548ebd448bf01000000000000004c89c7488b074883f8017506488b5708eb1748b810a2f0acaa2a0000ff555848ba01000000000000004c8b7424104d8b6e18eb05e99f000000524923d5f6c2015a7503ff5570493bd57c6d4c8b6424084d8b14244983fafd752e4d8b4c24084d8b01498b384883ff0375054d89e3eb1b4d89c4483b65187303ff5548ebd249bb01000000000000004d89e34d8b034983f80175064d8b4b08eb1748b810a2f0acaa2a0000ff555849b90100000000000000488b7c2410eb05e90b010000488b5f1049514c23cb41f6c10149597503ff55704c3bcb7d5beb074951495053eb5748ff7708488b542410488b024883f8fd752e4c8b72084d8b2e4d8b65004983fc0375054889d1eb1b4c89ea483b65187303ff5548ebd348b901000000000000004889d14c8b294983fd0175104c8b7108eb24e992000000e98d00000048b810a2f0acaa2a0000909090ff555849be010000000000000041f6c6017503ff55704983fe017d02eb1f4c8b24244d8b1c2449534d23de41f6c301495b7503ff55704d3bf37d02eb1848b860d6ecacaa2a000090ff555848b8010000000000000041f6c6017503ff55704d89f24983c20270f44c8b4c24084f894c94fc48b801000000000000004883c420c348b801000000000000004883c418c3909090909090|@2646,8175,@2157|91,0,0 119,0,@2153 132,0,0 227,0,0 255,0,@2153 268,0,0 378,0,0 416,0,@2153 432,0,0 490,0,@49 504,0,0 542,0,0 557,0,0 2646:S32|535452554354555245535f28292e747970654d61746368546162283329283229 2647:C2,32|90909090909090483b65187303ff5548488b5808488b00488b5208ff22909090|@2644,8191| 2648:S29|535452554354555245535f28292e747970654d61746368546162283329 2649:C5,280|90909090909090483b65187303ff55485250495149504c8b304983fef5756e4c8b52f84d8d7fd84c3b7d107303ff554049c747f8040000004c89fb48b970dcf1acaa2a000048890b498b4af848894b18488943104c894b084d8b4af0498b7908488b74242048897c242048895c241849ba28afefacaa2a000049b9e0dcf1acaa2a0000498b5828498b5058eb05e9120000004989d0488b40084883c41856ff259c000000534d89d14c8b442410488b5c2408488d54242890ff158a0000004c8b6c24204d8b65f84d8d7fd84c3b7d107303ff554049c747f8040000004d89fb49ba20def1acaa2a00004d89134d8b4c24f84d894b184c8b4424184d894310488b7c241049897b084d89d8488b1c244883c428ff2538000000|@2677,8191,@2634,@2678,@2655|61,0,@2650 113,0,@1794 123,0,@2651 225,0,@2654 2650:C3,48|90909090909090483b65187303ff55484989c24c8b4a084c8b421048bb0300000000000000488b4218ff252900000090|@2348,8191,@1956|29,0,1 2651:O1|@2652 2652:C4,136|90909090909090483b65187303ff55484883f801754f48b81500000000000000ff158a0000004d8d7fd84c3b7d107303ff554049c747f8040000004d89fd49c745180100000049c745100100000049bcb01e6000000000004d896508498945004d89eeeb044c8b70104c89f048ba7012f1acaa2a00009090ff153a000000488b4028c39090909090|@2653,8191,@1852,@2356|24,0,10 80,0,I48 110,0,@2354 2653:S73|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296c6f6f6b5369672832296c6f6f6b7570466e283129 2654:C3,48|90909090909090483b65187303ff55484989c24c8b4a084c8b421048bb0300000000000000488b4218ff252900000090|@2348,8191,@1956|29,0,1 2655:C4,200|90909090909090483b65187303ff55484d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89f84989184d8d7fe84c3b7d107303ff554049c747f8020000004c89ff48bea0dff1acaa2a00004889374c894708505349504889faff12488b44241090ff1582000000488b1c24488b13488b4c24105052488b0190ff15720000004d8d7fd84c3b7d107303ff554049c747f8040000004d89fe4c8b6c24184d896e184c8b24244d8966104c8b5c24084d895e084989064c89f04883c428c39090909090|@5165,8191,@2204,@2202|74,0,@2656 2656:C4,136|90909090909090483b65187303ff55484989d690ff15960000004d8d7fe04c3b7d107303ff554049c747f8030000004c89fa48b970e0f1acaa2a000048890a498b4e0848894a104c8972084d8d7fe84c3b7d107303ff554049c747f8020000004d89fd49bc50ebf1acaa2a00004d8965004989550849b801000000000000004c89ebff2530000000|@2676,8191,@2206,@2285|52,0,@2657 101,0,@2674 119,0,0 2657:C14,472|90909090909090483b65187303ff55484989d04889d848ba10b3f0acaa2a0000ff15da0100004883f801746d4889d848baf8b2f0acaa2a0000909090ff15c60100004883f801755649ff700848b815000000000000009090ff15b20100004d8d7fd84c3b7d107303ff554049c747f8040000004c89ff48c747180100000048c747100100000048beb01e60000000000048897708488907eb0ae91c000000e9050000004889f8eb08488b401049ff7008488b14244883c408ff224889d848ba30a7f0acaa2a000090ff154a0100004883f80174724889d848ba18a7f0acaa2a0000909090ff15360100004d8d7fe84c3b7d107303ff554049c747f8020000004c89ff48bee0e2f1acaa2a0000488937498b581048895f084889c14889c8909090ff15020100004989c24889c8ff15fe0000004989c14c89c8ff15fa0000004883f801751ceb05e981000000495049524889fb4c89c8909090ff15e2000000eb0449504952488b0424ff15da0000004883f80174494c8b442408498b7810488b3740f6c6017503ff55704889f34883c30270f448891f4889f0ff15b20000004889c3488b0424909090ff15aa00000048b801000000000000004883c410c348b801000000000000004883c410c348b80100000000000000c390|@2661,8191,@2190,@2193,@1852,@2167,@2170,@1461,@2226,@2015,@2662,@2664,@1933,@2660|24,0,@2189 49,0,@2188 78,0,10 136,0,I48 191,0,@2166 217,0,@2165 260,0,@2658 432,0,0 447,0,0 462,0,0 2658:C3,56|90909090909090483b65187303ff5548488b42084c8b3041f6c6017503ff55704d89f54983c50270f44c89284c89f0ff252b000000909090|@2659,6149,@1933| 2659:S56|535452554354555245535f28292e72656e616d655661726961626c654173426f756e642833297365745374616d7073283129283329283129 2660:C2,488|53488b184883fbfd752d488b5008488b0a4c8b314983fe0375054989c6eb1b4889c8483b65187303ff5548ebd449be01000000000000004989c64956488b542408488b024883f8fd752d4c8b7208498b1e488b0b4883f90375054889d1eb1b4889da483b65187303ff5548ebd448b901000000000000004889d14c8b3424498b1e4883fb0175614c8b294983fd01753b4d8b66084c8b590849544d0be341f6c401495c7503ff55704d3be3750f48b803000000000000004883c410c348b801000000000000004883c410c34983fdfd751c4c8b61084d89342448b803000000000000004883c410c3e90f00000048b801000000000000004883c410c34883fbff75604c8b294983fdff752b4d8b66084c8b59084d3be3750f48b803000000000000004883c410c348b801000000000000004883c410c34983fdfd75174c8b61084d89342448b803000000000000004883c410c348b801000000000000004883c410c34883fbfd754f4c8b294983fdfd752f4d8b66084c8b59084d3be3750f48b803000000000000004883c410c349890c2448b803000000000000004883c410c34d8b660849890c2448b803000000000000004883c410c34c8b294983fdfd75174c8b61084d89342448b803000000000000004883c410c348b801000000000000004883c410c39090|@2673,7695|47,0,0 111,0,0 175,0,1 190,0,0 219,0,1 239,0,0 282,0,1 297,0,0 326,0,1 341,0,0 384,0,1 403,0,1 426,0,1 458,0,1 473,0,0 2661:S53|535452554354555245535f28292e72656e616d655661726961626c654173426f756e642833297365745374616d7073283129283329 2662:C3,160|90909090909090483b65187303ff55484d8d7fe04c3b7d107303ff554049c747f8030000004d89fe49bde8e6f1acaa2a00004d892e49895e1048bba0e9f1acaa2a000049895e084889c24d8d7fe84c3b7d107303ff554049c747f8020000004c89f848b9b0e9f1acaa2a00004889084c8970084989d49090ff154a0000004989c34c89e04c89da90ff124989c248b801000000000000004c89d2ff2290909090|@2672,8191,@2550|42,0,@2663 59,0,@2667 100,0,@2668 143,0,0 2663:C12,296|90909090909090483b65187303ff55484989d54889d89090ff15320100004883f80174704d89eb4889d89090ff15260100004889d8909090ff15220100004883f801740f4889d890ff151a0100004989c2eb1948b8b0d7edacaa2a00009090ff555849ba0100000000000000498b4210ff15fa0000004889c34889d8ff15f60000004d89da4989c14889d890ff15ee000000eb05e97f0000004989c54c89e890ff15e20000004883f80175185349ff72104951488b5c24084c89e8498b520890ff12eb075349ff72104951488b042490ff15ba0000004883f801742d488b442410488b5424089090ff124889c3488b0424909090ff159e00000048b801000000000000004883c418c348b801000000000000004883c418c348b80100000000000000c39090909090|@2665,8191,@2062,@2063,@2062,@2063,@2064,@1461,@2226,@2015,@2664,@2660|85,0,@970 100,0,0 252,0,0 267,0,0 282,0,0 2664:C2,96|4c8b284983fdfd752e4c8b60084d8b1c244d8b134983fa0375054989c6eb1b4c89d8483b65187303ff5548ebd349be01000000000000004989c64d8b264983fcfd750b48b80300000000000000c348b80100000000000000c390909090909090|@2666,7937|47,0,0 69,0,1 80,0,0 2665:S42|545950455f5452454528292e736574547970657328322973657454797065436f6e73747256616c283229 2666:S29|5354525543545f56414c5328292e69735661726961626c654964283129 2667:O1|@2662 2668:C2,56|4989c64d8d7fe04c3b7d107303ff554049c747f8030000004c89f849bd20eaf1acaa2a00004c89284c8b6a084c8968104c897008c3909090|@2671,6149|29,0,@2669 2669:C2,32|90909090909090483b65187303ff5548488b5a08488b5210ff22909090909090|@2670,8191| 2670:S45|545950455f5452454528292e736574547970657328322973657454797065436f6e73747256616c283129283129 2671:S42|545950455f5452454528292e736574547970657328322973657454797065436f6e73747256616c283129 2672:S23|545950455f5452454528292e7365745479706573283229 2673:S29|5354525543545f56414c5328292e756e69667954797065496473283229 2674:C2,40|90909090909090483b65187303ff55484c8b4010488b5808488b00488b5208ff2290909090909090|@2675,8191| 2675:S53|535452554354555245535f28292e72656e616d655661726961626c654173426f756e642833297365745374616d7073283129283129 2676:S50|535452554354555245535f28292e72656e616d655661726961626c654173426f756e642833297365745374616d7073283129 2677:S52|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c283529 2678:C8,808|90909090909090483b65187303ff55484c8b284983fdf575064c8b7008eb0a49beb01e60000000000052505349504951495648b81500000000000000ff150e0300004d8d7fd84c3b7d107303ff554049c747f8040000004d89fc49c74424180100000049c7442410010000004c8b1c244d895c2408498904245049544c89e048ba7012f1acaa2a0000909090ff15c60200004c8b5424384d8b4af84d8b41f84d8d7fd84c3b7d107303ff554049c747f8040000004c89ff48be18f0f1acaa2a0000488937498b58f848895f18488b54243048895710488b4c242048894f084d8d7fd84c3b7d107303ff554049c747f8040000004d89fe49bd40f2f1acaa2a00004d892e49897e184c8b60304d8966104c8b58104d895e084d8d7fd84c3b7d107303ff554049c747f8040000004c89fe49bd28f3f1acaa2a00004c892e48897e184c8b68404c896e10488b5018488956084d8d7fd84c3b7d107303ff554049c747f8040000004c89f949baa8f3f1acaa2a00004c8911488979184c8b50584c8951104c8b48484c8949084d8d7fd84c3b7d107303ff554049c747f8040000004d89f848bb10f4f1acaa2a000049891849897818488b5820498958104c8b204d8960084d8d7fd84c3b7d107303ff554049c747f8040000004d89fd48bb90f4f1acaa2a000049895d0049897d18488b582849895d104c8b50084d8955084d8d7fd84c3b7d107303ff554049c747f8040000004c89fb49bbf8f4f1acaa2a00004c891b48897b18488b785048897b104c8b58384c895b084d8d7f984c3b7d107303ff554049c747f80c0000004c89ff488b505848895758488b50504889575048894f48488b484048894f4048895f38488b583048895f30488b582848895f28488b482048894f20488977184c8977104c896f084c89076a014c8b5424204c8b4c24284c8b4424304889fb488b442438488b542440909090ff15a6000000488b04249090ff15a20000004989c6488b0424909090ff159a000000495650488b4424189090ff15920000004d8d7fd84c3b7d107303ff554049c747f8040000004d89fd4c8b6424084d8965184c8b1c244d895d104c8b5424204d895508498945004c89e84883c450c390909090|@2714,8191,@1852,@2356,@2692,@2155,@2208,@2202|33,0,I48 52,0,10 129,0,@2354 185,0,@2679 248,0,@2682 305,0,@2685 362,0,@2687 419,0,@2688 475,0,@2690 533,0,@2691 2679:C7,304|90909090909090483b65187303ff55484c8b721852505349504951495248bb686feeacaa2a0000498b464848bae8d7edacaa2a0000909090ff151a0100004883f80174334d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b6c24184c8968084c8b6424204c8920488b14244883c430ff22488b442420488b542408909090ff1248f7c00100000075684c8b6c242849ff751849ff751049ff750848bb5056edacaa2a0000488b44242890ff15aa000000488b5c243890ff15a600000048bba8f1f1acaa2a0000ff159e0000004989c24c8b0c244c8b44240848bb0300000000000000488b4424104883c448ff25810000004d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b6c24184c8968084c8b6424204c8920488b14244883c430ff22909090909090|@2681,8191,@974,@303,@303,@303,@1956|31,0,@1361 45,0,@972 162,0,@344 196,0,@2680 224,0,1 2680:S39|2920697320616c72656164792070726573656e7420696e2074686973207369676e61747572652e 2681:S79|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c28352973696756616c7565283429636865636b416e64456e746572283529 2682:C2,48|90909090909090483b65187303ff55484c8b52084c8b4a1049b8a8f2f1acaa2a0000488b5808488b00488b5218ff2290|@2684,8191|26,0,@2683 2683:S5|56616c7565 2684:S88|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c28352973696756616c7565283429636865636b416e64456e746572283129283129283129283129 2685:C2,48|90909090909090483b65187303ff55484c8b52084c8b4a1049b890f3f1acaa2a0000488b5808488b00488b5218ff2290|@2684,8191|26,0,@2686 2686:S4|54797065 2687:C2,48|90909090909090483b65187303ff55484c8b52084c8b4a1049b8e810f1acaa2a0000488b5808488b00488b5218ff2290|@2684,8191|26,0,@2349 2688:C2,48|90909090909090483b65187303ff55484c8b52084c8b4a1049b878f4f1acaa2a0000488b5808488b00488b5218ff2290|@2684,8191|26,0,@2689 2689:S6|466978697479 2690:C2,48|90909090909090483b65187303ff55484c8b52084c8b4a1049b828afefacaa2a0000488b5808488b00488b5218ff2290|@2684,8191|26,0,@1794 2691:C2,48|90909090909090483b65187303ff55484c8b52084c8b4a1049b87811f1acaa2a0000488b5808488b00488b5218ff2290|@2684,8191|26,0,@2351 2692:C16,1352|90909090909090483b65187303ff55484c8b304983fef575704c8b42f8498b78f84d8d7fd84c3b7d107303ff554049c747f8040000004c89fe48b950fbf1acaa2a000048890e488b4ff848894e184c8b6af04c896e104c894e084c8b4ae04c8b67f053495249ff7424085649ba28afefacaa2a00004d8b5928498b715849b9e0dcf1acaa2a0000eb05e90f0100004989f04c89db488b4008ff15d20400004889c34889d8ff15ce0400004889c14889d8ff15ca04000050504989d94989e04889c34889c8ff15be0400004d8d7fe84c3b7d107303ff554049c747f8020000004d89f8488b3c24498938488b74240849897008505050488b5c24304889e2488b4b1048890a4889e04c8b73184c8970084989e54c8b63484d8965104d8d7fe04c3b7d107303ff554049c747f8030000004d89fb4c8b14244d8913488b7c240849897b08488b74241049897310488b5424404c89442440488b4424284c8b6c2438488944243849bac0fbf1acaa2a00004d89c849b9b821f1acaa2a00004c89c74d89d84889fb4889d048ba28a4f0acaa2a00004883c4384955ff25f30300004983fef775555352495249505049514c8b68084c8b6424384983fd01750a4c89e04883c430c2080049ff75084c8b4424084c89e3498b4500488d5424389090ff15b60300004989c44c8b2c244883c408483b65187303ff5548ebbde91100000048b801000000000000004883c438c208004983feef75764c8b68085050504889d74889c64889d949ff750049ff750849ff751049ff751849ff7520488d5c242848b8010000000000000090ff15520300005050504889e348b801000000000000009090ff15420300004d8d7fd84c3b7d107303ff554049c747f8040000004c89f849be90fcf1acaa2a0000eb05e99e0200004c89304c8b6c24504c8968184c8b61404c8960104d8b58404c8958084d8d7fd84c3b7d107303ff554049c747f8040000004c89fb48ba20fdf1acaa2a00004889134c8b7424104c897318488b5158488953104d8b68584c896b084d8d7f984c3b7d107303ff554049c747f80c0000004d89fe49895e58488b595049895e504c8b6424084d89664849894640488b4138498946384c8b61304d8966304c8b61284d8966284c8b59204d895e204c8b5c24484d895e184c8b59104d895e10488b5108498956084c8b294d892e575651495048ffb424800000004c89f3488b4424584889fae891fcffff4c8b6424184d8b5c24f84d8b53f84d8d7fd84c3b7d107303ff554049c747f8040000004d89f949b8b0fdf1acaa2a00004d8901488b7c241049897918488b74245849897110498b5af84989590850ff35e6010000495149bad8fef1acaa2a000049b9f8fef1acaa2a00004c8b442448488b9c2488000000488b4424609090ff15be010000488b542420488b4af84c8b71f84d8d7fc84c3b7d107303ff554049c747f8060000004d89fd49bc0800f2acaa2a00004d8965004c8b5c24104d895d284c8b5424084d8955204c8b4c24184d894d184c8b4424604d894510498b7ef849897d08504d89c14989f84c89eb488b442448ff155201000048b80100000000000000ff154a0100006a0149ba01000000000000004989c14c8b442450488b5c2458488b442460ff152e010000488b742428488b5ef8488b53f84d8d7fd84c3b7d107303ff554049c747f8040000004c89f949be0003f2acaa2a00004c89314c8b6af84c8969184c8b6424204c8961104c8b5c24684c8959084989c84889c3488b0424ff15da0000004c8b542418498b4218488b542470ff124c8b4c2418498b4148488b542430ff12488b4424084881c488000000c2080048b87003f2acaa2a0000ff555848b8010000000000000090909090|@2723,8191,@2634,@2155,@2208,@2642,@2211,@2724,@1481,@1481,@1418,@2634,@2758,@2695,@2224,@2715|59,0,@2693 109,0,@1794 127,0,@2651 358,0,@2694 371,0,@2395 393,0,@2161 511,0,0 575,0,0 598,0,0 640,0,@2697 709,0,@2698 926,0,@2699 974,0,@2702 984,0,@2703 1057,0,@2706 1136,0,0 1154,0,0 1225,0,@2711 1327,0,@2712 1340,0,0 2693:C3,48|90909090909090483b65187303ff55484989c24c8b4a084c8b421048bb0300000000000000488b4218ff252900000090|@2348,8191,@1956|29,0,1 2694:O1|@2695 2695:C2,88|4d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89f849be6006edacaa2a00004c89304989c64d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89700848c700fdffffffc390909090909090|@2696,4097|31,0,@198 2696:S31|5354525543545f56414c5328292e6d616b655661726961626c654964283129 2697:C2,88|90909090909090483b65187303ff55485250488b52189090ff124883f80175304c8b742408488b0424498b5610909090ff124883f80175134c8b6c2408488b0424498b55084883c410ff224883c410c34883c410c3909090|@1306,8191| 2698:C2,88|90909090909090483b65187303ff55485250488b52189090ff124883f80175304c8b742408488b0424498b5610909090ff124883f80175134c8b6c2408488b0424498b55084883c410ff224883c410c34883c410c3909090|@1306,8191| 2699:C4,88|90909090909090483b65187303ff554848ff721848ff721048ff720848bb50fef1acaa2a00009090ff15520000004989c24c8b4c24084c8b44241048bb0300000000000000488b04244883c418ff25350000009090909090|@2701,8191,@303,@1956|30,0,@2700 61,0,1 2700:S14|20696e207369676e61747572652e 2701:S82|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296d616b65536967496e746f2836296c6f6f6b75704661696c757265283129 2702:S16|5479706520636f6e7374727563746f72 2703:O1|@2704 2704:C4,136|90909090909090483b65187303ff55484883f801754f48b81500000000000000ff158a0000004d8d7fd84c3b7d107303ff554049c747f8040000004d89fd49c745180100000049c745100100000049bcb01e6000000000004d896508498945004d89eeeb044c8b70104c89f048ba7012f1acaa2a00009090ff153a000000488b4040c39090909090|@2705,8191,@1852,@2356|24,0,10 80,0,I48 110,0,@2354 2705:S27|56414c55455f4f505328292e6c6f6f6b7570547970283329283129 2706:C3,256|90909090909090483b65187303ff55484c8b72284c8b6a204d8d7fe04c3b7d107303ff554049c747f8030000004d89fc49bb4801f2acaa2a00004d891c244d8b5e404d895c24104d8b55404d895424084d8d7fe04c3b7d107303ff554049c747f8030000004d89f949b8b801f2acaa2a00004d89014d8b46584d894110498b7d58498979084d8d7fd84c3b7d107303ff554049c747f8040000004c89fe48bb2802f2acaa2a000048891e488b5a0848895e18488b4a1848894e104c8b5a104c895e0849ba008eeeacaa2a00004c8b04244c8914245649bad8fef1acaa2a00004c89ce49b9f8fef1acaa2a00004d89c64989f04c89e34956ff252b000000909090|@2710,8191,@2634|50,0,@2707 106,0,@2708 159,0,@2709 196,0,@1418 215,0,@2702 228,0,@2703 2707:C2,56|90909090909090483b65187303ff55485250488b52109090ff124883f80175134c8b742408488b0424498b56084883c410ff224883c410c3|@1306,8191| 2708:C2,56|90909090909090483b65187303ff55485250488b52109090ff124883f80175134c8b742408488b0424498b56084883c410ff224883c410c3|@1306,8191| 2709:C3,48|90909090909090483b65187303ff55484989c24c8b4a084c8b421048bb0300000000000000488b4218ff252900000090|@2348,8191,@1956|29,0,1 2710:S81|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296d616b65536967496e746f2836296c6f6f6b7570476c6f62616c283129 2711:C3,48|90909090909090483b65187303ff55484989c24c8b4a084c8b421048bb0300000000000000488b4218ff252900000090|@2348,8191,@1956|29,0,1 2712:O3|@7377,@215,@2713 2713:S40|6d616b65536967496e746f3a206e6f742061205369674964656e74206e6f72206120536967446563 2714:S63|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c28352973696756616c7565283429 2715:C54,1040|90909090909090483b65187303ff554849504989c64c89f0ff151a0400004d89f5909090ff15160400004883f801740f48b801000000000000004883c408c34c89e89090ff15fe0300004989c64889d8ff15fa03000050490bc6a801587503ff55704c3bf074394c89e89090ff15e60300004889c348b8000af2acaa2a000090ff15da03000048bb2835f1acaa2a0000ff15d2030000488b14244883c408ff224d89ea4c89d09090ff15c20300004989c14889d8ff15be0300004889c74c89c8ff15ba0300004883f80175564c89c890ff15b20300004883f80174764c89c890ff15aa030000488b30488b48104c89d0ff15a20300004d89d14889df4889f390ff159a0300004883f801741b4889c890ff15920300004889fb4883c408e9e5feffffe9790000004c89c89090ff157e0300004889c348b8380af2acaa2a000090ff157203000048bb680af2acaa2a0000eb05e91100000090ff1562030000488b14244883c408ff224c89d090ff15560300004889c348b8380af2acaa2a000090ff154a03000048bb680af2acaa2a0000ff1542030000488b14244883c408ff224889f890ff15360300004883f80174664889f890ff152e0300004889f8909090ff152a0300004883f801740f4889f890ff15220300004889c6eb1948b8b0d7edacaa2a00009090ff555848be01000000000000004889d890ff15020300004c89d14989d9488b1e90ff15fa0200004883f801745deb084989d94c89d1eb534889f8909090ff15e60200004883f801740f4889f890ff15de0200004889c6eb1948b8b0d7edacaa2a00009090ff555848be0100000000000000488b4610ff15be0200004889c34889c84883c408e996fdffff4889c8ff15ae0200009090ff15ae0200004883f80175384889c890ff15a60200004889c348b8380af2acaa2a000090ff159a02000048bb900af2acaa2a0000ff1592020000488b14244883c408ff224889c890ff15860200004883f80174165149514c89c89090ff157a0200004883f8017541eb05514951eb3a488b442408ff156a0200004889c348b8380af2acaa2a000090ff155e02000048bbb80af2acaa2a0000ff1556020000488b5424104883c418ff22488b4424089090ff15460200004883f801746a488b0424ff153e0200004883f801755f488b442408909090ff15320200004889c348b8380af2acaa2a000090ff152602000048bb000bf2acaa2a0000ff151e0200004889c6488b0424909090ff15160200004889c34889f0ff151202000048bb280bf2acaa2a0000eb0ae94e000000e911000000ff15fe010000488b5424104883c418ff22488b4424089090ff15ee0100004889c6488b0424909090ff15e60100004889c34889f0ff15e201000048b801000000000000004883c418c3488b5c2408488b0424488d54241890ff15c60100004883c418c390|@5161,8191,@1461,@1463,@2441,@2441,@2066,@303,@303,@2226,@2226,@2015,@2062,@2063,@2239,@5162,@2064,@2066,@303,@303,@2066,@303,@303,@2062,@2063,@2062,@2063,@2239,@5162,@2062,@2063,@2064,@1461,@2664,@2066,@303,@303,@2241,@2432,@2066,@303,@303,@2265,@2265,@2066,@303,@303,@2066,@303,@303,@1461,@1461,@2660,@5160|50,0,0 119,0,@2716 136,0,@2426 311,0,@2717 328,0,@2718 375,0,@2717 392,0,@2718 477,0,@970 492,0,0 577,0,@970 592,0,0 663,0,@2717 680,0,@2719 763,0,@2717 780,0,@2720 859,0,@2717 876,0,@2721 920,0,@2722 1000,0,0 2716:S38|43616e6e6f74206170706c792074797065207265616c69736174696f6e3a2054797065732028 2717:S32|43616e6e6f74206170706c792074797065207265616c69736174696f6e3a2028 2718:S20|29206973206120747970652066756e6374696f6e 2719:S18|2920697320616c726561647920667265652e 2720:S53|2920697320616e206571747970652062757420746865207479706520646f6573206e6f74207065726d697420657175616c6974792e 2721:S21|292069732061206461746174797065206275742028 2722:S9|29206973206e6f742e 2723:S66|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296d616b65536967496e746f283629 2724:C19,2560|90909090909090483b65187303ff55484c8b304983fe0f751e524989dd488b58084c89e8488d542408909090ff15f60900004883c408c34983fe11756d4c8b6af04d8b65f84d8b5c24f84d8d7fd84c3b7d107303ff554049c747f8040000004d89fa49b96016f2acaa2a00004d890a4d8b43f84d89421849894210488b780849897a084d8d7fd84c3b7d107303ff554049c747f8040000004c89fe48b9d016f2acaa2a000048890eeb05e94a0200004c8b4af84c894e18488b4ae048894e104c8956085250535748ff701048ff701849505648bb686feeacaa2a0000498b404848bae8d7edacaa2a00009090ff153e0900004883f8017402eb6c48bb4806edacaa2a0000488b44241848bab01860000000000090ff124883f8017402eb7048bba03eedacaa2a0000488b44241848bab01860000000000090ff124883f8017402eb6c48bb68adedacaa2a0000488b44241848bab01860000000000090ff124883f8017407eb56e99b00000048bb60a6edacaa2a0000488b44241848bab018600000000000ff124883f8017407eb2ee92900000048bb2019f2acaa2a0000488b44241848bab018600000000000eb05e90900000090ff124883f801744a488b5c241848b83819f2acaa2a000090ff156608000048bb5819f2acaa2a0000ff155e0800004989c24c8b4c24204c8b44243048bb0300000000000000488b4424089090ff1542080000488b4424384c8b70f04d8b6ef84d8b65f84c8b4c24204d8b4424f8488b1c24488b4424109090ff151e0800004c8b5c24384d8b53f849ff721049b87819f2acaa2a000048bb301af2acaa2a0000488b442418ff15fa0700004d8d7fe84c3b7d107303ff554049c747f8020000004d89f94c8b4424304d89410849c701010000004d8d7fd84c3b7d107303ff554049c747f8040000004c89ff488947184c894f1048c74708ffffffff488b7424204889374d8d7fe84c3b7d107303ff554049c747f8020000004c89f848897808488930488b1424909090ff12488b5c2430f6c3017503ff55704889d84883c00270f44883c448c34983feff756d4c8b6af04d8b65f84d8b5c24f84d8d7fd84c3b7d107303ff554049c747f8040000004d89fa49b9801af2acaa2a00004d890a4d8b43f84d89421849894210488b780849897a084d8d7fd84c3b7d107303ff554049c747f8040000004c89fe48b9f01af2acaa2a000048890eeb05e9540200004c8b4af84c894e18488b4ae048894e104c8956085250535748ff701048ff701849505648bb686feeacaa2a0000498b404848bae8d7edacaa2a0000ff15ae0600004883f8017402eb6c48bb4806edacaa2a0000488b44241848bab01860000000000090ff124883f8017402eb7048bba03eedacaa2a0000488b44241848bab01860000000000090ff124883f8017402eb6c48bb68adedacaa2a0000488b44241848bab01860000000000090ff124883f8017407eb58e9c700000048bb60a6edacaa2a0000488b44241848bab018600000000000ff124883f8017407eb58e95300000048bb2019f2acaa2a0000488b44241848bab018600000000000eb05e93300000090ff124883f8017407eb28e92300000048bb7060efacaa2a0000488b44241848bab018600000000000ff124883f8017502eb4c488b5c241848b83819f2acaa2a0000909090ff15aa05000048bb5819f2acaa2a0000ff15a20500004989c24c8b4c24204c8b44243048bb0300000000000000488b4424089090ff1586050000488b4424384c8b70f04d8b6ef84d8b65f84c8b4c24204d8b4424f8488b1c24488b4424109090ff15620500004c8b5c24384d8b53f84d8d7fe84c3b7d107303ff554049c747f8020000004d89f94c8b4424284d89410849c701010000004d8d7fd84c3b7d107303ff554049c747f8040000004c89ff488b742410488977184c894f1048c7470801000000488b5c241848891f4d8d7fe84c3b7d107303ff554049c747f8020000004c89f848897808488918498b521090ff12488b542428f6c2017503ff55704889d04883c00270f44883c440c34983fefb75595249504c8b68084983fd0175084889d84883c410c34c8b64240849ff7508534d8b5424e84c8b4c24104d8b4424e0498b5c24f8498b4500498b5424f090ff157a0400004889c34c8b2c244883c408483b65187303ff5548ebaee90f00000048b801000000000000004883c418c34983fef975714d8d7fe04c3b7d107303ff554049c747f8030000004d89fd4c8b60184d8965104c8b58104d895d084c8b50084d8955004c8b4af04d8b41f8498b78f8488b77f85253495548bb686feeacaa2a0000488b464848bae8d7edacaa2a00009090ff15ee0300004883f801746d488b542410eb05e918010000488b4af8488b42e04d8d7fe04c3b7d107303ff554049c747f8030000004d89fe49bdd81cf2acaa2a00004d892e4c8b61404d8966104c8b58404d895e084d8d7fe04c3b7d107303ff554049c747f8030000004d89fa49b9481df2acaa2a0000eb05e9860000004d890a4c8b41584d894210488b785849897a084d8d7f984c3b7d107303ff554049c747f80c0000004c89fe4c895658488b595048895e504c8b69484c896e484c8976404c8b51384c8956384c8b49304c894e304c8b71284c8976284c8b49204c894e204c8b61184c896618488b5110488956104c8b59084c895e084c8b094c890e4889f3eb09488b5c2410488b5bf8488b5424104c8b42d8488b0424488b52f09090ff15d6020000488b4424084883c418c34983fe0d75724d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fd49895d004d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fc49c70424010000004c8b5af84c8b52e04d8d7fe04c3b7d107303ff554049c747f8030000004d89f949b8b81df2acaa2a0000eb05e99b0100004d8901498b7b4049897910498b7240498971084d8d7fe04c3b7d107303ff554049c747f8030000004c89fb48b9281ef2acaa2a000048890b4d8b43584c894310498b4a5848894b084d8d7fe04c3b7d107303ff554049c747f8030000004d89fe48bf981ef2acaa2a000049893e4d896e10488b7af849897e084d8d7fe04c3b7d107303ff554049c747f8030000004c89ff48bef01ff2acaa2a00004889374c896710488b72f8488977084d8d7f984c3b7d107303ff554049c747f80c0000004c89fe48895e58498b5b5048895e504d8b43484c8946484c894e404d8b4b384c894e38498b4b3048894e304d8b53284c895628498b4b2048894e2048897e184c8976104d8b73084c897608498b3b48893e488b4af04c8b51f8498b5af8524955495448ff72e84c8b50104c8b4bf84989f048bbc0fbf1acaa2a0000488b400890ff1512010000488b1424488b0a4883f901750c48b80100000000000000eb3048ff7108488b01488d54242090ff15ee000000488b0c244883c408483b65187303ff5548ebc848b801000000000000004c8b742408498b064883c418c348b83021f2acaa2a000090ff555848b8010000000000000090909090|@2753,8191,@2754,@974,@303,@303,@1956,@2758,@2228,@974,@303,@303,@1956,@2758,@2692,@974,@2772,@2845,@2752|100,0,@2725 157,0,@2726 212,0,@1361 226,0,@972 252,0,@197 267,0,I24 288,0,@284 303,0,I24 324,0,@669 339,0,I24 365,0,@616 380,0,I24 405,0,@2730 420,0,I24 451,0,@2731 468,0,@2732 497,0,1 577,0,@2733 587,0,@2736 806,0,@2738 863,0,@2739 918,0,@1361 932,0,@972 956,0,@197 971,0,I24 992,0,@284 1007,0,I24 1028,0,@669 1043,0,I24 1069,0,@616 1084,0,I24 1109,0,@2730 1124,0,I24 1157,0,@1709 1172,0,I24 1197,0,@2731 1216,0,@2732 1245,0,1 1579,0,0 1668,0,@1361 1682,0,@972 1750,0,@2742 1803,0,@2743 2106,0,@2744 2166,0,@2745 2219,0,@2746 2268,0,@2748 2427,0,@2694 2461,0,0 2511,0,0 2534,0,@2750 2548,0,0 2725:C3,48|90909090909090483b65187303ff55484989c24c8b4a084c8b421048bb0300000000000000488b4218ff252900000090|@2348,8191,@1956|29,0,1 2726:C3,200|90909090909090483b65187303ff55484c8b72184c8b6a104d8d7fe04c3b7d107303ff554049c747f8030000004d89fc49bbd817f2acaa2a00004d891c244d8b5e404d895c24104d8b55404d895424084d8d7fe04c3b7d107303ff554049c747f8030000004d89f949b84818f2acaa2a00004d89014d8b46584d894110498b7d584989790848be008eeeacaa2a0000488b1c244889342448ff720849bad8fef1acaa2a00004c89c949b9f8fef1acaa2a00004989c84889de4c89e356ff252e000000909090909090|@2729,8191,@2634|50,0,@2727 106,0,@2728 135,0,@1418 157,0,@2702 170,0,@2703 2727:C2,56|90909090909090483b65187303ff55485250488b52109090ff124883f80175134c8b742408488b0424498b56084883c410ff224883c410c3|@1306,8191| 2728:C2,56|90909090909090483b65187303ff55485250488b52109090ff124883f80175134c8b742408488b0424498b56084883c410ff224883c410c3|@1306,8191| 2729:S88|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296d616b65536967496e746f28362970726f636573735369672833296c6f6f6b7570283129 2730:S3|726566 2731:S12|53706563696679696e672022 2732:S13|2220697320696c6c6567616c2e 2733:O1|@2734 2734:C2,8|c390909090909090|@2735,1| 2735:S82|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296d616b65536967496e746f28362970726f63657373536967283329283129 2736:O1|@2737 2737:C2,8|c390909090909090|@2735,1| 2738:C3,48|90909090909090483b65187303ff55484989c24c8b4a084c8b421048bb0300000000000000488b4218ff252900000090|@2348,8191,@1956|29,0,1 2739:C3,200|90909090909090483b65187303ff55484c8b72184c8b6a104d8d7fe04c3b7d107303ff554049c747f8030000004d89fc49bbf81bf2acaa2a00004d891c244d8b5e404d895c24104d8b55404d895424084d8d7fe04c3b7d107303ff554049c747f8030000004d89f949b8681cf2acaa2a00004d89014d8b46584d894110498b7d584989790848be008eeeacaa2a0000488b1c244889342448ff720849bad8fef1acaa2a00004c89c949b9f8fef1acaa2a00004989c84889de4c89e356ff252e000000909090909090|@2729,8191,@2634|50,0,@2740 106,0,@2741 135,0,@1418 157,0,@2702 170,0,@2703 2740:C2,56|90909090909090483b65187303ff55485250488b52109090ff124883f80175134c8b742408488b0424498b56084883c410ff224883c410c3|@1306,8191| 2741:C2,56|90909090909090483b65187303ff55485250488b52109090ff124883f80175134c8b742408488b0424498b56084883c410ff224883c410c3|@1306,8191| 2742:C2,56|90909090909090483b65187303ff55485250488b52109090ff124883f80175134c8b742408488b0424498b56084883c410ff224883c410c3|@1306,8191| 2743:C2,56|90909090909090483b65187303ff55485250488b52109090ff124883f80175134c8b742408488b0424498b56084883c410ff224883c410c3|@1306,8191| 2744:C2,56|90909090909090483b65187303ff55485250488b52109090ff124883f80175134c8b742408488b0424498b56084883c410ff224883c410c3|@1306,8191| 2745:C2,56|90909090909090483b65187303ff55485250488b52109090ff124883f80175134c8b742408488b0424498b56084883c410ff224883c410c3|@1306,8191| 2746:C2,176|90909090909090483b65187303ff55484c8b70084c8b6a104d8b650041f6c4017503ff55704d89e34983c30270f44d895d004c8b52084d8d7fe84c3b7d107303ff554049c747f8020000004d89f94d89610849c701010000004d8d7fd84c3b7d107303ff554049c747f8040000004d89f8498b7e18498978184d894810498b760849897008488b184989184d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c894008488918498b5210ff22|@2747,8191| 2747:S90|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296d616b65536967496e746f28362970726f63657373536967283329656e74657256616c283129 2748:C4,136|90909090909090483b65187303ff55484989d24c8b084c8b40084c89c0909090ff158a0000009090ff158a0000004883f8017429498b5210488b024d8d7fe84c3b7d107303ff554049c747f8020000004d89fe498946084d89064c8932498b7a084d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8940084c8908488b5718ff229090|@2749,8191,@2226,@2608| 2749:S91|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296d616b65536967496e746f28362970726f63657373536967283329656e74657254797065283129 2750:O3|@7377,@215,@2751 2751:S27|70726f636573735369673a206e6f742061207369676e6174757265 2752:C5,72|90909090909090483b65187303ff55484989d24989c14c89c8909090ff154e00000049524951488d54241090ff15460000004889c3488b04244883c410ff253d0000009090909090|@5159,8191,@2265,@5158,@2249| 2753:S79|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296d616b65536967496e746f28362970726f63657373536967283329 2754:C6,504|90909090909090483b65187303ff55484883fb017501c34c8b334c8b6af84d8b65f84d8b5de04d8d7fe04c3b7d107303ff554049c747f8030000004d89fa49b9c824f2acaa2a00004d890a4d8b4c24404d894a104d8b43404d8942084d8d7fe04c3b7d107303ff554049c747f8030000004c89ff48be3825f2acaa2a0000488937498b74245848897710498b4b5848894f084d8d7f984c3b7d107303ff554049c747f80c0000004d89f949897958498b7c2450498979504d8b6c24484d8969484d8951404d8b5424384d8951384d8b4424304d8941304d8b4424284d894128498b74242049897120498b74241849897118498b4c2410498949104d8b5c24084d8959084d8b04244d8901488b7af8525049ff3649ff760849ff762848ff73084951488b5c2418488b47e89090ff15ee00000048bb5d00000000000000ff15e60000004989c14c8b442420488b1c24488b442410488b742430488b56f8488b52f0ff15ca000000488b4c2428f6c1017503ff55704989ce4983c60270f450488b5c24104c89f0488b542438909090e875feffff4989c54c8b442430488b1c24488b44242090ff158e0000004c8b6424384d8b5c24f84d8b53f84989c14d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8948084c8b4424204c89004955498b5248909090ff12488b04244883c448c39090909090|@2757,8191,@303,@303,@2678,@2261|64,0,@2755 118,0,@2756 308,0,46 2755:C2,56|90909090909090483b65187303ff55485250488b52109090ff124883f80175134c8b742408488b0424498b56084883c410ff224883c410c3|@1306,8191| 2756:C2,56|90909090909090483b65187303ff55485250488b52109090ff124883f80175134c8b742408488b0424498b56084883c410ff224883c410c3|@1306,8191| 2757:S89|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296d616b65536967496e746f28362970726f6365737353696728332970537472756374283229 2758:C3,152|90909090909090483b65187303ff55484d8d7fd84c3b7d107303ff554049c747f8040000004d89fe49bdf026f2acaa2a00004d892e49895e184d8946104d894e084989c44d8d7fe84c3b7d107303ff554049c747f8020000004c89f849bb602cf2acaa2a00004c89184c897008909090ff154a0000004989c24c89e04c89d290ff124989c148b801000000000000004c89caff2290909090|@2771,8191,@2550|42,0,@2759 94,0,@2767 135,0,0 2759:C16,816|90909090909090483b65187303ff55484989d54889d89090ff153a0300004883f80174724d89eb4889d89090ff152e030000488b18488b48084c8b50104c89d0ff15220300009090ff15220300009090ff15220300004883f801746749535349524889c8498b5318ff124989c14c89cb488b0424ff15060300004c89c8909090ff15020300009090ff15020300004883f8017558eb05e9850200004c89c89090ff15f202000049515049b80100000000000000488b7c24184883ff01750a4c89c6eb38e94d02000041f6c0017503ff55704c89c34883c30270f4488b7f084989d8483b65187303ff5548ebcce91502000048be0100000000000000488b1c2453480bdef6c3015b7503ff5570483bde746f488b542420488b4a104c8b7208488b44240890ff1576020000565149565048bbffffffffffffffff488b4424209090ff15620200005048bbffffffffffffffff488b4424209090ff15520200004d8d7fe84c3b7d107303ff554049c747f8020000004d89fd49c7450801000000eb05e972010000498945004d8d7fe84c3b7d107303ff554049c747f8020000004d89fc4d896c240849bbc82af2acaa2a00004d891c244d8d7fe84c3b7d107303ff554049c747f8020000004d89fa4d8962084c8b0c244d890a4d8d7fe84c3b7d107303ff554049c747f8020000004d89f84d89500848bfe82af2acaa2a00004989384d8d7fe84c3b7d107303ff554049c747f8020000004c89fe4c894608488b5c240848891e4d8d7fe84c3b7d107303ff554049c747f8020000004c89f84889700848ba082bf2acaa2a0000488910909090ff15620100004d8d7fe84c3b7d107303ff554049c747f8020000004c89f949be302bf2acaa2a00004c8931488941084c8b6c24184d8b65104c8b5c24504c896424504d8b55184c895424484d8b4d204c894c24404d8b45284c89442438498b7d3048897c2430498b75384889742428498b5d4048895c2420498b554848895424184d8b55084d8b4d0049b80300000000000000488b5c24104889c84883c4184953ff25c900000048b801000000000000004883c428c348b801000000000000004883c418c348b80100000000000000c348b80100000000000000c39090909090|@2765,8191,@2062,@2063,@2064,@1461,@1463,@2764,@1461,@1463,@2441,@2066,@305,@305,@331,@1124|171,0,0 243,0,0 305,0,-1 329,0,-1 424,0,@2760 501,0,@2761 578,0,@2762 624,0,@2763 731,0,1 761,0,0 776,0,0 791,0,0 802,0,0 2760:S13|2074797065287329206e6f7420 2761:S11|2920726571756972657320 2762:S18|5479706520636f6e7374727563746f722028 2763:C2,32|90909090909090483b65187303ff55484c8b7018488b42084c89f2ff22909090|@1121,8191| 2764:C2,56|4c8b304983feff75134c8b680849895d0048b80100000000000000c348b830d5f0acaa2a000090ff555848b8010000000000000090909090|@2766,6153|19,0,0 30,0,@2250 44,0,0 2765:S37|545950455f5452454528292e61737369676e54797065732834296173735479706573283229 2766:S25|5354525543545f56414c5328292e7570646174655052283229 2767:C2,56|4989c64d8d7fe04c3b7d107303ff554049c747f8030000004c89f849bdd02cf2acaa2a00004c89284c8b6a084c8968104c897008c3909090|@2770,6149|29,0,@2768 2768:C2,32|90909090909090483b65187303ff5548488b5a08488b5210ff22909090909090|@2769,8191| 2769:S40|545950455f5452454528292e61737369676e54797065732834296173735479706573283129283129 2770:S37|545950455f5452454528292e61737369676e54797065732834296173735479706573283129 2771:S26|545950455f5452454528292e61737369676e5479706573283429 2772:C11,584|90909090909090483b65187303ff55485249504c8b72f84d8b6ef84d8d7fd84c3b7d107303ff554049c747f8040000004d89fc49bb9030f2acaa2a00004d891c244c8b5af04d895c24184c8b104d895424104d8b4df84d894c2408488b78084883ff01746e488b701048f7c6010000007505488b0eeb24488b084c8b501048b8105ff0acaa2a0000909090ff55584889cf48b90100000000000000534952564954ff35c9010000495449bad8fef1acaa2a000049b9f8fef1acaa2a00004c8b4358488b5b404889c8ff15aa0100004989c6eb05e9360100004c89f090ff159e0100004d89f5909090ff159a0100004883f801756e4c8b64240849f7c40100000075074d8b5c2408eb1748b8105ff0acaa2a0000ff555849bb010000000000000049554983fb01750f48b801000000000000004883c438c34c8b54242049ff7308ff354a01000048ff7424184d8b4a404d8b425849bad8fef1acaa2a00004c89cfeb05e99800000049b9f8fef1acaa2a00004889fb498b0390ff151a010000488b742438488b5ef8488b53f84d8d7fd84c3b7d107303ff554049c747f8040000004c89f949bea031f2acaa2a00004c89314c8b6af84c8969184c8b6424304c8961104c8b5c24204c8959084989c8488b5c24089090ff15c60000004c8b1c244883c408483b65187303ff5548e932ffffff48b801000000000000004883c440c348b801000000000000004883c430c34954534952488b4010488d542428ff158600000048ba1032f2acaa2a0000ff12488b1c24488d54242890ff15720000004883c428c39090909090|@2804,8191,@1418,@2634,@1461,@1463,@1418,@2634,@2805,@2820,@2778|53,0,@2773 128,0,@2029 147,0,0 171,0,@2702 181,0,@2703 267,0,@2029 280,0,0 298,0,0 341,0,@2702 361,0,@2703 421,0,@2775 498,0,0 513,0,0 548,0,@2776 2773:C4,88|90909090909090483b65187303ff554848ff721848ff721048ff720848bb50fef1acaa2a00009090ff15520000004989c24c8b4c24084c8b44241048bb0300000000000000488b04244883c418ff25350000009090909090|@2774,8191,@303,@1956|30,0,@2700 61,0,1 2774:S93|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296170706c7953686172696e67436f6e73747261696e742833296c6f6f6b75704661696c757265283129 2775:C3,48|90909090909090483b65187303ff55484989c24c8b4a084c8b421048bb0300000000000000488b4218ff252900000090|@2348,8191,@1956|29,0,1 2776:O1|@2777 2777:C2,128|90909090909090483b65187303ff55484883f801750b48b80100000000000000c34d8d7fe84c3b7d107303ff554049c747f8020000004d89fe49c74608010000004c8b284d892e4956488b4008e8b5ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fe498946084c8b2c244d892e4c89f04883c408c3909090|@417,6145|24,0,0 2778:C4,120|90909090909090483b65187303ff55484883f801751a48b89833f2acaa2a0000909090ff555848b80100000000000000525048bae033f2acaa2a0000ff12488d54241090ff1556000000488b042448ba4039f2acaa2a0000ff12488d54241090ff154200000048b801000000000000004883c410c3909090|@2825,8191,@2826,@2824|24,0,@2779 40,0,0 52,0,@2781 80,0,@2794 104,0,0 2779:O3|@7377,@215,@2780 2780:S18|456d7074792073686172696e67206c697374 2781:O1|@2782 2782:C4,88|90909090909090483b65187303ff55484883f801750b48b80100000000000000c348ff7008488b00ff155200000050488b44240890e8cdffffff49b89034f2acaa2a0000488b1c244883c410ff2536000000909090909090|@2786,8191,@2787,@2785|24,0,0 60,0,@2783 2783:O1|@2784 2784:C2,24|488b5808488b0048bab018600000000000ff229090909090|0,63|9,0,I24 2785:C2,256|90909090909090483b65187303ff55484883fb017501c350495048ff3348ff73084883f801750c49be0100000000000000eb5c4c8b284c8b60084d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8968084c8b5c24084c89184954488b542418909090ff124883f801740c49be0300000000000000eb22488b04244883c408483b65187303ff5548eb92e90e00000049be01000000000000004883c4084983fe0174174c8b442410488b1c24488b4424184883c420e948ffffff4c8b442410488b1c24488b442418e835ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fa498942084c8b4c24084d890a4c89d04883c420c39090|@2793,8191|41,0,0 114,0,1 150,0,0 2786:S88|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296170706c7953686172696e67436f6e73747261696e74283329756e696f6e4d6170283329 2787:C5,112|90909090909090483b65187303ff55484883f801750b48b80100000000000000c34c8b7008488b00ff156a000000495649b8010000000000000048bb5037f2acaa2a0000ff155600000050488b44240890e8b1ffffff49b87838f2acaa2a0000488b1c244883c410ff253a0000009090|@2786,8191,@2206,@2285,@2785|24,0,0 50,0,0 60,0,@2788 88,0,@2791 2788:O1|@2789 2789:C3,96|90909090909090483b65187303ff55484c8b204c8b5810488b400848ba30a7f0acaa2a0000909090ff155a0000004883f80174234d8d7fe84c3b7d107303ff554049c747f8020000004c89fa4c895a084c89224889d0c34c89d8c39090909090|@2790,7685,@2167|29,0,@2166 2790:S98|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296170706c7953686172696e67436f6e73747261696e7428332974797065436f6e7374724e616d6573283129283129 2791:O1|@2792 2792:C2,24|488b5808488b0048bab018600000000000ff229090909090|0,63|9,0,I24 2793:S85|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296170706c7953686172696e67436f6e73747261696e74283329756e696f6e283329 2794:O1|@2795 2795:C4,88|90909090909090483b65187303ff55484883f801750b48b80100000000000000c348ff7008488b00ff155200000050488b44240890e8cdffffff49b8f039f2acaa2a0000488b1c244883c410ff2536000000909090909090|@2786,8191,@2798,@2785|24,0,0 60,0,@2796 2796:O1|@2797 2797:C2,24|488b5808488b0048bab018600000000000ff229090909090|0,63|9,0,I24 2798:C5,112|90909090909090483b65187303ff55484883f801750b48b80100000000000000c34c8b7008488b00ff156a000000495649b8010000000000000048bb103bf2acaa2a0000ff155600000050488b44240890e8b1ffffff49b8383cf2acaa2a0000488b1c244883c410ff253a0000009090|@2786,8191,@2206,@2285,@2785|24,0,0 50,0,0 60,0,@2799 88,0,@2802 2799:O1|@2800 2800:C3,96|90909090909090483b65187303ff55484c8b204c8b5810488b400848ba10b3f0acaa2a0000909090ff155a0000004883f80174234d8d7fe84c3b7d107303ff554049c747f8020000004c89fa4c895a084c89224889d0c34c89d8c39090909090|@2801,7685,@2190|29,0,@2189 2801:S100|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296170706c7953686172696e67436f6e73747261696e742833297375625374727563747572654e616d6573283129283129 2802:O1|@2803 2803:C2,24|488b5808488b0048bab018600000000000ff229090909090|0,63|9,0,I24 2804:S77|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296170706c7953686172696e67436f6e73747261696e74283329 2805:C87,1768|90909090909090483b65187303ff554849504989c64c89f0ff15f20600004d89f5909090ff15ee0600004883f8017402eb1c4889d8909090ff15e20600009090ff15e20600004883f8017502eb0f48b801000000000000004883c408c34c89e8ff15ca0600004989c64889d8ff15c606000050490bc6a801587503ff55704c3bf074394c89e89090ff15b20600004889c348b8c046f2acaa2a000090ff15a606000048bb2835f1acaa2a0000ff159e060000488b14244883c408ff224d89ea4c89d09090ff158e0600004989c14889d8ff158a0600004889c74c89c8ff15860600004883f80175704c89c890ff157e0600004883f80174654c89c890ff15760600004c89c8909090ff15720600004883f801740f4c89c890ff156a0600004889c6eb1948b8b0d7edacaa2a00009090ff555848be01000000000000004c89d090ff154a0600004c89d14889df488b1e90ff1542060000eb0ae99f000000e9080000004883f801745aeb084889df4c89d1eb504c89c8909090ff15220600004883f801740f4c89c890ff151a0600004889c6eb1948b8b0d7edacaa2a00009090ff555848be0100000000000000488b4610ff15fa0500004889fb4883c408e945feffff4889c8909090ff15ea0500004889c348b8e846f2acaa2a000090ff15de05000048bb680af2acaa2a0000ff15d6050000488b14244883c408ff224889f890ff15ca0500004883f80175704889f890ff15c20500004883f80174654889f890ff15ba0500004889f8909090ff15b60500004883f801740f4889f890ff15ae0500004889c6eb1948b8b0d7edacaa2a00009090ff555848be01000000000000004889d890ff158e0500004c89d14989d9488b1e90ff1586050000eb0ae99f000000e9080000004883f801745deb084989d94c89d1eb534889f8909090ff15660500004883f801740f4889f890ff155e0500004889c6eb1948b8b0d7edacaa2a00009090ff555848be0100000000000000488b4610ff153e0500004889c34889c84883c408e91efdffff4c89c8ff152e0500004889c348b8e846f2acaa2a000090ff152205000048bb680af2acaa2a0000ff151a050000488b14244883c408ff224c89d090ff150e0500004889c64889d8ff150a0500004989d94889c34889f090ff15020500004883f801740f48b801000000000000004883c408c34c89d09090ff15ea0400004883f801750c48bf0300000000000000eb0a48bf01000000000000004889fe4883f6024c89c8ff15c60400004883f801750c48bb0300000000000000eb0a48bb01000000000000004889da4883f2024889d14c89d090ff159e0400004c89d7909090ff159a0400004883f80175384889f890ff15920400004889c348b8e846f2acaa2a000090ff158604000048bb0847f2acaa2a0000ff157e040000488b14244883c408ff224c89c890ff15720400009090ff15720400004883f80175384c89c890ff156a0400004889c348b8e846f2acaa2a000090ff155e04000048bb0847f2acaa2a0000ff1556040000488b14244883c408ff224889f890ff154a0400009090ff154a0400004883f801741f4883fe0175194889fb4c89c8488d542408909090ff15320400004883c408c34c89c89090ff152a0400009090ff152a0400004883f801741f4883f90175194c89cb4889f8488d542408909090ff15120400004883c408c34889f89090ff150a0400009090ff150a0400004883f8017402eb1c4c89c8909090ff15fe0300009090ff15fe0300004883f8017502eb5a5749514889f8ff15f203000050488b442408ff15ee030000488b34244883fe01746a4883f8017569488b44240890ff15da0300009090ff15da0300004883f801741d48bb0300000000000000488b44240890ff15c6030000eb70e91c010000488b4424089090ff15ba0300004889c348b8e846f2acaa2a000090ff15ae03000048bb5835f1acaa2a0000eb0ae915000000e910000000ff159a030000488b54241890ff12eb764883f80174754883fe017574488b442410909090ff157e0300009090ff157e030000eb05e96f0000004883f801741948bb0300000000000000488b4424109090ff1562030000eb50488b442410909090ff155a0300004889c348b8e846f2acaa2a000090ff154e03000048bb5835f1acaa2a0000eb0fe94b000000e918000000e913000000909090ff1532030000488b54241890ff12eb2e488b442410909090ff15220300004889c3488b4424089090ff151a0300004889da4889c34889d090ff151203000048b801000000000000004883c420c34889f8ff150203000049514889c348b8e846f2acaa2a0000909090ff15f202000048bb3047f2acaa2a0000ff15ea0200004889c6488b0424909090ff15e20200004889c34889f0ff15de02000048bb4847f2acaa2a0000ff15d6020000488b5424084883c410ff22909090|@2812,8191,@1461,@1463,@1461,@1463,@2441,@2441,@2066,@303,@303,@2226,@2226,@2015,@2062,@2063,@2062,@2063,@2239,@2813,@2062,@2063,@2064,@2066,@303,@303,@2015,@2062,@2063,@2062,@2063,@2239,@2813,@2062,@2063,@2064,@2066,@303,@303,@1461,@1461,@2272,@2265,@2265,@1461,@2664,@2066,@303,@303,@1461,@2664,@2066,@303,@303,@1461,@2664,@2815,@1461,@2664,@2815,@1461,@2664,@1461,@2664,@2432,@2432,@1461,@2664,@2811,@2066,@303,@303,@1461,@2664,@2811,@2066,@303,@303,@1461,@1461,@2660,@2066,@303,@303,@2066,@303,@303|80,0,0 147,0,@2806 164,0,@2426 293,0,@970 308,0,0 405,0,@970 420,0,0 467,0,@2807 484,0,@2718 585,0,@970 600,0,0 697,0,@970 712,0,0 759,0,@2807 776,0,@2718 846,0,0 878,0,1 890,0,0 922,0,1 934,0,0 995,0,@2807 1012,0,@2808 1075,0,@2807 1092,0,@2808 1350,0,1 1395,0,@2807 1412,0,@2427 1497,0,1 1539,0,@2807 1556,0,@2427 1648,0,0 1677,0,@2807 1696,0,@2809 1740,0,@2810 2806:S21|43616e6e6f742073686172653a2054797065732028 2807:S15|43616e6e6f742073686172653a2028 2808:S17|29206973206e6f7420666c657869626c65 2809:S7|2920616e642028 2810:S21|292061726520646966666572656e74207479706573 2811:C2,120|4c8b70204d8b264983fc0175064d8b6e08eb0b4d8b6e084d8b5d004d89dd4d8d7fe04c3b7d107303ff554049c747f8030000004d89fb4d8b55104d8953104d8b4d084d894b0849891b4983fcff7512498b5e084c891b48b80100000000000000c348b830d5f0acaa2a0000ff555848b80100000000000000|@2819,8073|88,0,0 99,0,@2250 112,0,0 2812:S35|545950455f5452454528292e6c696e6b54797065436f6e7374727563746f7273283329 2813:C7,216|90909090909090483b65187303ff55484883fb01751c4883f801750b48b80300000000000000c348b80100000000000000c34989c5488b03ff15c20000004883f801745d4d89ec488b039090ff15b600000049f7c40100000075564989c5498b04249090ff15a60000004883f80174464d89eb498b042490ff159a0000004c8b53084889c34c89d8ff15920000004883f80174124c89d3498b442408e966ffffffe92600000048b80100000000000000c3e90b00000048b80100000000000000c348b80100000000000000c348b80100000000000000c390|@2814,7949,@1458,@1459,@1458,@1459,@2022|30,0,1 41,0,0 168,0,0 184,0,0 195,0,0 206,0,0 2814:S44|545950455f5452454528292e6c696e6b54797065436f6e7374727563746f7273283329657141726773283229 2815:C18,480|90909090909090483b65187303ff55484989d64989c54c89e8909090ff15e60100004989c44889d8ff15e201000050504989c34c89e89090ff15da0100004d89f2909090ff15d60100004883f80174334d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89fa4c892a4889e048c700ffffffff4989e649895608eb114889e248c702010000004889e04c8968084d8d7fe84c3b7d107303ff554049c747f8020000004d89fe488b1424498916488b442408498946084d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c8970104c8960084c89184d89eb9090ff153e0100004d89d94989c04889d890ff15360100004883f80174704c89c890ff152e0100004c89d7909090ff152a0100004883f80174304c89c890ff15220100009090ff15220100004883f80174184889df48bb03000000000000004c89c8ff150e010000eb645749515349504c89c8909090ff15020100004883f8017551488b742418488b442410eb05e94e000000909090ff15ea00000048ff76f84889c348b8e846f2acaa2a000090ff15da00000048bb5835f1acaa2a0000ff15d2000000488b14249090ff12eb06e907000000504883c408eb0c5050574950eb055050534950488b1c24488b4424084883c430ff25a50000009090909090|@2817,8191,@2066,@2239,@1461,@1463,@1465,@2241,@1461,@2664,@2226,@2015,@2811,@2432,@2066,@303,@303,@2816|313,0,1 391,0,@2807 408,0,@2427 2816:C2,120|4c8b70204d8b264983fc0175064d8b6e08eb0b4d8b6e084d8b5d004d89dd4d8d7fe04c3b7d107303ff554049c747f8030000004d89fb4d8b55104d89531049895b08498b5d0049891b4983fcff7512498b56084c891a48b80100000000000000c348b830d5f0acaa2a0000ff555848b80100000000000000|@2818,7949|88,0,0 99,0,@2250 112,0,0 2817:S46|545950455f5452454528292e6c696e6b54797065436f6e7374727563746f72732833297365744571756976283229 2818:S32|5354525543545f56414c5328292e74635365744571756976616c656e74283229 2819:S30|5354525543545f56414c5328292e7463536574457175616c697479283229 2820:C4,256|90909090909090483b65187303ff55484883f801750b48b80100000000000000c34c8b72e05248ff700849ff76586a0148ff72e849bae810f1acaa2a000049b9004ff2acaa2a00004c8b442410488b5c2410488b00909090ff15ca0000004883f801755448b815000000000000009090ff15ba0000004d8d7fd84c3b7d107303ff554049c747f8040000004d89fc49c74424180100000049c74424100100000049bbb01e6000000000004d895c2408498904244d89e5eb044c8b68104955488b442410488b54241890e839ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fc49894424084c8b1c244d891c244c89e04883c420c39090909090|@417,8191,@2634,@1852|24,0,0 54,0,@2349 64,0,@2821 102,0,10 162,0,I48 2821:O1|@2822 2822:C4,136|90909090909090483b65187303ff55484883f801754f48b81500000000000000ff158a0000004d8d7fd84c3b7d107303ff554049c747f8040000004d89fd49c745180100000049c745100100000049bcb01e6000000000004d896508498945004d89eeeb044c8b70104c89f048ba7012f1acaa2a00009090ff153a000000488b4058c39090909090|@2823,8191,@1852,@2356|24,0,10 80,0,I48 110,0,@2354 2823:S41|56414c55455f4f505328292e6c6f6f6b75705374727563747572654469726563746c79283429283129 2824:C4,152|90909090909090483b65187303ff55484883f801750b48b80100000000000000c348ff305248ff7008488b42f0488d5424189090ff15860000004c8b7424084d8b6ef84d8b65f8498b5c24e84c89ea90ff157200000050488b442408488b542410e8a1ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fb498943084c8b14244d89134c89d84883c420c390909090909090|@417,8191,@2839,@2778|24,0,0 2825:S96|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296170706c7953686172696e67436f6e73747261696e7428332973686172655669727453747275637473283229 2826:C3,112|90909090909090483b65187303ff55484883f801750b48b80100000000000000c35248ff7008488b00909090ff156600000050488b442408488b542410e8c5ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fe498946084c8b2c244d892e4c89f04883c418c3909090|@417,8191,@2827|24,0,0 2827:C4,48|90909090909090483b65187303ff554852488b5af0909090ff153a000000488d54240890ff15360000004883c408c390|@2830,8191,@2831,@2828| 2828:C3,232|90909090909090483b65187303ff55484883f801750b48b80100000000000000c35248ff3048ff7008488b04244883f801750c49be0100000000000000eb71488b5424104c8b72f84d8b6ef84d8b65f84d8b5c24f84d8b53f84d8d7fd84c3b7d107303ff554049c747f8040000004d89f949b8c053f2acaa2a00004d89014d8b42f84d894118498b7df049897910498b7424e84989710848ff70084d89c8488b18488b4424109090ff1562000000eb05e920000000488b04244883c408483b65187303ff5548e962ffffff49be0100000000000000488b0424488b5424104883c418e920ffffff90|@2838,8191,@2805|24,0,0 53,0,0 115,0,@2829 205,0,0 2829:C3,48|90909090909090483b65187303ff55484989c24c8b4a084c8b421048bb0300000000000000488b4218ff252900000090|@2348,8191,@1956|29,0,1 2830:S118|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296170706c7953686172696e67436f6e73747261696e742833297368617265566972745374727563747328322973686172655669727454797065436f6e737472283129 2831:C3,40|90909090909090483b65187303ff5548504889d8488d542408909090ff152e0000004883c408c390|@2833,8191,@2832| 2832:C4,104|90909090909090483b65187303ff55484883f801750b48b80100000000000000c35248ff30488b4008e8d9ffffff488b54240850488b5c2408488b42f8909090ff154a000000488b0c244883f90175054883c418c3488d5424189090ff15360000004883c418c390|@2555,8191,@2835,@2834|24,0,0 2833:S99|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296170706c7953686172696e67436f6e73747261696e742833296c6973745669727454797065436f6e73747273283229 2834:C2,88|90909090909090483b65187303ff55484883f8017505488b42e8c35248ff30488b40089090e8ddffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b04244889024889d04883c410c3909090|@1847,5| 2835:C3,40|90909090909090483b65187303ff5548504889d8488d542408909090ff152e0000004883c408c390|@2837,8191,@2836| 2836:C4,160|90909090909090483b65187303ff55484883f801750b48b80100000000000000c35248ff30488b4008e8d9ffffff4989c6488b0424909090ff158a000000488b54240849564c8b42f848bbf8a6f0acaa2a000090ff157600000048f7c001000000752e4d8d7fe84c3b7d107303ff554049c747f8020000004c89f94c8b34244c8971084c8b284c89294889c84883c418c3488b04244883c418c3909090909090|@2555,8191,@2206,@2358|24,0,0 75,0,@2164 2837:S98|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296170706c7953686172696e67436f6e73747261696e742833296765745669727454797065436f6e73747273283229 2838:S129|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296170706c7953686172696e67436f6e73747261696e742833297368617265566972745374727563747328322973686172655669727454797065436f6e7374722831297368617265416c6c283129 2839:C3,120|90909090909090483b65187303ff55484883f801750b48b80100000000000000c35248ff30488b4008e8d9ffffff488b54240850488b5c2408488b42f8909090ff155a0000004d8d7fe84c3b7d107303ff554049c747f8020000004c89f94c8b34244c8971084889014889c84883c418c390909090909090|@2555,8191,@2840|24,0,0 2840:C3,40|90909090909090483b65187303ff5548504889d8488d542408909090ff152e0000004883c408c390|@2842,8191,@2841| 2841:C3,72|90909090909090483b65187303ff55484883f801750b48b80100000000000000c35248ff30488b4008e8d9ffffff4889c3488b0424488b5424084883c410ff252c00000090909090|@2555,8191,@2843|24,0,0 2842:S99|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296170706c7953686172696e67436f6e73747261696e7428332967657456697274537562537472756374757265283229 2843:C5,216|90909090909090483b65187303ff55484989d690ff15e6000000534d8b46f848bbd8b2f0acaa2a0000909090ff15d600000048f7c00100000075594c8b204983fc01755548b815000000000000009090ff15ba0000004d8d7fd84c3b7d107303ff554049c747f8040000004d89fb49c743180100000049c743100100000049bab01e6000000000004d8953084989034d89ddeb0ae9300000004d8b6c24104d8d7fe84c3b7d107303ff554049c747f8020000004d89fb4c8b14244d8953084d892b4c89d84883c408c3488b04244883c408c3909090909090|@2844,8191,@2206,@2358,@1852|33,0,@2187 70,0,10 128,0,I48 2844:S113|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296170706c7953686172696e67436f6e73747261696e74283329676574566972745375625374727563747572652832297375627374724c6973742d283229 2845:C3,208|90909090909090483b65187303ff55484951534d8d7f904c3b7d107303ff554049c747f80d0000004d89fe4d8b68584d896e6049bc185ef2acaa2a00004d8966584d8b60504d8966504d8b58484d895e48498b784049897e40498b703849897638498b503049895630498b482849894e28498b582049895e204d8b48184d894e18498b501049895610498b780849897e08498b1849891e506a03495249ba01000000000000004c8b0c244d89f04889c3488d5424284883c408909090ff15360000004883c418c2080090909090909090|@2850,8191,@2849|53,0,@2846 158,0,0 2846:O1|@2847 2847:C2,16|48b80100000000000000c39090909090|@2848,1|2,0,0 2848:S28|50415253455f5452454528292e7061737332283629656e762d283129 2849:C3,48|90909090909090483b65187303ff55485250495049524951488d542428909090ff15320000004883c428c20800909090|@2934,8191,@2851| 2850:S21|50415253455f5452454528292e7061737332283629 2851:C70,6856|90909090909090488dbc2428ffffff483b7d187303ff55504c8b3049f7c601000000741e4983fee17c1d4983fe1f7f1c49bd8a5ff2acaa2a00004f8d6cb57c41ffe5e90b010000e906010000e90101000090e93d1a0000909090e9c5040000909090e996050000909090e9b0040000909090e952180000909090e9bf0b0000909090e990010000909090e91d1a0000909090e9d5000000909090e99b040000909090e92e120000909090e9a3000000909090e9d7060000909090e9640a0000909090e926160000909090e9a0160000909090e99b060000909090e9b7010000909090e930020000909090e967060000909090e92e190000909090e968120000909090e92d0b0000909090e91d140000909090e989030000909090e9fa080000909090e9700d0000909090e91d040000909090e9db120000909090e944030000909090e9450d0000909090e9d414000090909048b8587cf2acaa2a0000909090ff555848b801000000000000004c8b72e84c8b6af84d8d7fd84c3b7d107303ff554049c747f8040000004d89fc49bba87cf2acaa2a00004d891c244d8b5df84d895c241849895c2410488b5ad849895c240848ff701048ff7018ff3531190000495449bac87ff2acaa2a000049b9f07ff2acaa2a00004d8b4660498b5e30488b4008909090ff150e190000504889c348b80300000000000000ff1502190000488b542410488b0c2448890a4c8b7424084989064883c418c3525348ff700848bb0300000000000000488b401890ff15d61800004c8b6424104d8b5c24f84d8d7fe04c3b7d107303ff554049c747f8030000004d89fa49b90883f2acaa2a00004d890a4c8b4424084d894210498b7bf849897a084d8b4c24d84989f848bbd899edacaa2a0000ff1586180000488b34244889064883c418c3525348ff7010488b400890e861fdffff50488b5c2410488b442408488b542418909090e849fdffff4c8b6424184d8b5c24f84d8d7fe04c3b7d107303ff554049c747f8030000004d89fa49b91084f2acaa2a00004d890a4c8b4424104d894210498b7bf849897a084d8b4c24d84989f84889c3488b04244883c420ff2501180000525048ff701048ff70184889c3488b400890e8d9fcffff4c8b6424184d8b5c24f84d8d7fe04c3b7d107303ff554049c747f8030000004d89fa49b9e084f2acaa2a00004d890a4c8b4424104d894210498b7bf849897a084d8d7fd84c3b7d107303ff554049c747f8040000004c89fe48bbb085f2acaa2a000048891e48897e18498b5424d8488956104c8956084989f149b848bff0acaa2a000048bb2804edacaa2a000090ff155e170000488b5c2410488b0424488b54241890e831fcffff50488b5c2418488b442410488b542420909090e819fcffff488b4c24204c8b71f84d8d7fe04c3b7d107303ff554049c747f8030000004d89fd49bc9086f2acaa2a00004d8965004c8b5c24184d895d104d8b56f84d8955084d8d7fd84c3b7d107303ff554049c747f8040000004d89f949b86087f2acaa2a00004d89014d895118488b79d8498979104d89690849b848bff0acaa2a00004889c3488b0424ff15ae160000488b04244883c428c35352488b4008488d5424109090ff159a1600004883c410ff25981600004c8b62f84d8d7fd84c3b7d107303ff554049c747f8040000004d89fb49baf087f2acaa2a00004d89134d8b4c24f84d894b18498943104c8b42d84d894308525048ff700848ff70104953488b4018488d54242890ff1546160000488b1c249090ff1542160000488b5c241090ff153e160000488b7c24084889074883c428c3488b4010c34c8b48084c8b4010488b5818488b4020ff251e1600004c8b4008488b5810488b4018ff2514160000525048ff700848ff701048b81500000000000000ff150216000050488b442410488d542428909090ff15f61500004883f801750c49bc0100000000000000eb2f48ff7008488b00488d542430ff15da150000488b04244883c408483b65187303ff5548ebc949bc0100000000000000488b1c2448b8a888f2acaa2a0000909090ff15ae1500004989c348b801000000000000004c89da9090ff124c8b54240849890248b878a6edacaa2a00004883c428c34c8b62f84d8d7fd84c3b7d107303ff554049c747f8040000004d89fb49bab88af2acaa2a00004d89134d8b4c24f84d894b18498943104c8b42d84d8943085050504889d74889c64889e34c89d89090ff1536150000575648ff7608488b1c244883fb01750c48ba0100000000000000eb6e488b0b488b4424104c8b70f84d8d7fd04c3b7d107303ff554049c747f8050000004d89fd49bca88bf2acaa2a00004d8965004c8b58e84d895d204c8b5424084d8955184d8b4ef84d894d104c8b40d84d89450848ff73084d89c14d8b46f84c89eb488b410890ff15b6140000eb05e920000000488b1c244883c408483b65187303ff5548e965ffffff48ba0100000000000000488b0c244883f901750c48b80100000000000000eb3048ff7108488b01488d54243890ff156e140000488b0c244883c408483b65187303ff5548ebc848b8010000000000000048b878a6edacaa2a00004883c430c349b901000000000000004c8b4010488b5818488b4008ff252e14000049b903000000000000004c8b4010488b5818488b4008ff251a1400004c8b62e84c8b5af84d8d7fd84c3b7d107303ff554049c747f8040000004d89fa49b9308df2acaa2a00004d890a4d8b43f84d89421849895a10488b7ad849897a08525048ff700848ff7010ff35d1130000495249bad8fef1acaa2a000049b9f8fef1acaa2a00004d8b442460498b5c2440488b442410ff15ae130000505050488d5c2408488b44241890ff15a213000048bbb01e600000000000488b44240848bab01860000000000090ff124883f801740c48be0100000000000000eb70488b742430488b5ee8488b56f84d8d7fd84c3b7d107303ff554049c747f8040000004c89f948b8a08df2acaa2a00004889014c8b72f84c8971184c8b6c24284c8969104c8b66d84c8961084989c94c8b442408488b5b6048b8e810f1acaa2a0000909090ff15121300004d8d7ff0eb05e9170000004c3b7d107303ff554049c747f8010000004c89fe4889064c8b5c24304d8b53f856488b5c2428498b420890ff15de1200004c8b04244889c3488b4424089090ff15d21200004989c14c89c8ff15ce1200004883f80175504c8b442438498b78f849515048ff77f849ff70d848bb108ef2acaa2a0000488b44244090ff15a61200004989c24c8b0c244c8b44245048bb0300000000000000488b442408909090ff158a120000eb0549515050504c8b4424104983f8017502eb57488b7c2458488b77e8498b009090ff156a1200004889c34d8d7fe84c3b7d107303ff554049c747f8020000004c89f8498b104889500848891849ff7008488b561090ff124c8b04244883c408483b65187303ff5548eba1488b7c2458488b77e84d8d7fe84c3b7d107303ff554049c747f8020000004c89f8488b5c241848895808488b542448488910488b561890ff1248b878a6edacaa2a00004883c460c352488b40089090ff15da1100004d8d7fe84c3b7d107303ff554049c747f8020000004d89fc49c74424080100000049890424505048b828a5edacaa2a000090ff15aa1100009090ff15aa1100004883f801743d4d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fb49ba28a5edacaa2a00004d89134989e149c701ffffffff4989e04d895808eb1b4989e349c703010000004989e249b928a5edacaa2a00004d894a084d8d7fe84c3b7d107303ff554049c747f8020000004d89f8488b3c24498938488b742408498970084d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c89401048bb10a5edacaa2a0000488958084c89204883c418ff25f5100000525048ff7008488b4010e8d5f4ffff4c8b6424104d8b5c24f84d8d7fd04c3b7d107303ff554049c747f8050000004d89fa49b9388ef2acaa2a00004d890a4d8b4424e84d894220488b7c240849897a18498b73f849897210498b5c24d849895a08504989d94989f04c89d3488b44240890ff1586100000488b542418488b4af84d8d7fe04c3b7d107303ff554049c747f8030000004c89f849be788ff2acaa2a00004c89304c8b6c24104c8968104c8b61f84c8960084d8d7fd84c3b7d107303ff554049c747f8040000004d89fb49ba4890f2acaa2a00004d89134d8963184c8b4ad84d894b10498943084d89d949b848bff0acaa2a0000488b5c2408488b0424ff15fe0f0000488b4424084883c420c3488b4008ff25f20f00004c8b60084c8b5af84d8d7fd84c3b7d107303ff554049c747f8040000004d89fa49b9d890f2acaa2a00004d890a4d8b43f84d89421849894210498b7c240849897a085050504889d64889c14d8b0c2449ff74241049ff74241849ff742420488d5c24184c89d0ff158e0f00004c8b460841f6c0017503ff55704c89c34883c30270f456514951575348ff7424384c8b5424504989d949b8010000000000000048bb01000000000000004889f84889f2909090ff154a0f0000488b542420488b4ae84d8d7fe04c3b7d107303ff554049c747f8030000004d89fe49bdb091f2acaa2a00004d892e4c8b6424504d8966104c8b59304d895e084d8d7f904c3b7d107303ff554049c747f80d0000004d89fa4c8b49604d894a604c8b41584d894258488b795049897a50488b714849897248488b594049895a404c8b69384d896a384d8972304c8b61284d8962284c8b71204d897220488b5118498952184c8b59104d895a10488b590849895a084c8b314d89324c8b4c24205048ff74240849524d8b51e04c8b4c24204c8b0424488b5c2430488b4424284c8b642438498b5424f84883c408909090ff155e0e00004c8b5c24304989034c8b5424384c8b0c244d890a4c8b442428498b78f84d8d7fd84c3b7d107303ff554049c747f8040000004c89fe48bb2092f2acaa2a000048891e488b57f848895618488b4c242048894e104c8b7424104c897608504d8b68e04989f04c89eb4c89c8ff15f60d00004d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b24244c8960084c8b5c24084c89184883c468ff25cc0d000048b888a2edacaa2a0000c35050504989d24989c14889e348b80100000000000000909090ff15aa0d00005050504889e348b801000000000000009090ff159a0d00005050504889e348b801000000000000009090ff158a0d00004d8b41084983f8017406498b7ae0eb19498b7ae040f6c7017503ff55704889fe4883c60270f44889f7498b5ae84d8d7fe04c3b7d107303ff554049c747f8030000004c89fa48b99092f2acaa2a000048890a488b442440488942104c8b73304c8972084d8d7fe04c3b7d107303ff554049c747f8030000004d89fd49bc0093f2acaa2a00004d8965004c8b5c24284d895d10488b7340498975084d8d7fe04c3b7d107303ff554049c747f8030000004c89f948b87093f2acaa2a00004889014c8b6424104c8961104c8b5b604c8959084d8d7f904c3b7d107303ff554049c747f80d0000004c89f8488948604c8b63584c8960584c8b43504c8940504c8b7424084c8970484c8968404c8b73384c89703848895030488b7328488970284c8b5b204c8958204c8b5c24204c8958184c8b5c24384c8958104c8b5b084c89580848bee093f2acaa2a00004889304952495149ff710849ff711049ff71205752495548ff73205148ff73284950495450498b711849ba78a6edacaa2a00004883fe0175054d89d1eb554c8b06488b7c246848ff760848ff77084c8b5424504d8b4808498b304c8b442410488b5ff04889f0488b57f8909090ff15d60b00004989c2488b34244883c408483b65187303ff5548ebaa49b901000000000000004c8b4424684d8d7fd84c3b7d107303ff554049c747f8040000004c89ff48be8894f2acaa2a0000488937488b5c244848895f18488b9424a800000048895710498b48e848894f084d8d7fe04c3b7d107303ff554049c747f8030000004c89f849be7895f2acaa2a00004c89304c8bac24900000004c896810488948084d8d7fe04c3b7d107303ff554049c747f8030000004d89fc49bbe895f2acaa2a00004d891c244c8b5424784d8954241049894c24084d8d7f904c3b7d107303ff554049c747f80d0000004d89f9488b74242049897160488b5c240849895958488b542410498951504d8961484c8b7424304d8971404c8b69384d8969384c8b6424384d8961304c8b5c24184d8959284c8b5424284d8951204989411849897910488b790849897908488b314989314951488b5c245848ba78a6edacaa2a00004883fb0175054889d1eb52488b034c8b74247048ff730849ff76084c8b5424584c8b48084c8b442410498b5ef0488b00498b56f8909090ff15460a00004889c2488b1c244883c408483b65187303ff5548ebad48b90100000000000000488b4424604883f8017402eb614c8b7424704d8b6ef84d8d7fd84c3b7d107303ff554049c747f8040000004d89fc49bb5896f2acaa2a00004d891c244d8b55f84d895424184c8b4c24684d894c24104d8b46d84d89442408514d89e0498b5ee04889c8909090ff15c2090000eb0151488b04244881c4c8000000c35248ff72e848ff72e04c8b600849bb78a6edacaa2a00004983fc0175084c89d84883c418c34d8b14244c8b4c241049ff74240849ff71084d8b02498b7a084c8b542410498b71f04989f94c89c34c8b4424184889da4889f34889d0488b4c2420488b51f8909090ff154e0900004989c34c8b24244883c408483b65187303ff5548eb9448b801000000000000004883c420c34c8b62f84d8d7fd84c3b7d107303ff554049c747f8040000004d89fb49bac896f2acaa2a00004d89134d8b4c24f84d894b18498943104c8b42d84d8943085050504889d74889c64889e34c89d8ff15de0800005756488b5e084883fb01750c48ba0100000000000000eb3148ff7308488b03488d5424309090ff15ba080000488b1c244883c408483b65187303ff5548ebc748ba010000000000000048b878a6edacaa2a00004883c428c352504889c3488b40089090e8e5ebffff4c8b6424084d8b5c24f84d8d7fe04c3b7d107303ff554049c747f8030000004d89fa49b96897f2acaa2a00004d890a4c8b04244d894210498b7bf849897a084d8d7fd84c3b7d107303ff554049c747f8040000004c89fe48bb3898f2acaa2a000048891e48897e18498b5424d8488956104c8956084989f149b848bff0acaa2a00004889c348b8a8c2f1acaa2a0000909090ff15ee07000050504889e15149ba010000000000000049b9010000000000000049b8010000000000000048bb1f4e00000000000048b8e005edacaa2a00009090ff15b60700004d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b34244c89304c8b6c24084c8968084883c420ff258c070000525048ff70104889c3488b4008e8c9eaffff50488b442408488b542418909090ff156e0700004989c44d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b1c244c89580849baa8c2f1acaa2a00004c89109090ff153e0700004c8b4c24184d8b41f84d8d7fe04c3b7d107303ff554049c747f8030000004c89ff48bec898f2acaa2a0000488937488b5c241048895f10498b50f8488957084d8d7fd84c3b7d107303ff554049c747f8040000004c89f949be9899f2acaa2a00004c8931488951184d8b69d84c896910488979084989c949b848bff0acaa2a00004889c34c89e0909090ff15b6060000488b04244883c420c3525048ff70084889c3488b401090e8d1e9ffff4c8b6424104d8b5c24f84d8d7fe04c3b7d107303ff554049c747f8030000004d89fa49b9289af2acaa2a00004d890a4c8b4424084d894210498b7bf849897a084d8d7fd84c3b7d107303ff554049c747f8040000004c89fe48bbf89af2acaa2a000048891e48897e18498b5424d8488956104c8956084989f149b848bff0acaa2a000048bb2804edacaa2a000090ff150e060000488b5c2408488b0424488b54241090e829e9ffff48b888a2edacaa2a00004883c418c3525048ff7008488b401090ff15e205000050488b5c2410488b442408488b542418909090e8f1e8ffff4c8b6424184d8b5c24f84d8d7fe04c3b7d107303ff554049c747f8030000004d89fa49b9889bf2acaa2a00004d890a4c8b4424104d894210498b7bf849897a084d8b4c24d84989f84889c3488b04244883c420ff2579050000525048ff70104889c3488b400890e885e8ffff4c8b6424104d8b5c24f84d8d7fe04c3b7d107303ff554049c747f8030000004d89fa49b9589cf2acaa2a00004d890a4c8b4424084d894210498b7bf849897a084d8d7fd84c3b7d107303ff554049c747f8040000004c89fe48bb289df2acaa2a000048891e48897e18498b5424d8488956104c8956084989f149b848bff0acaa2a000048bb2804edacaa2a000090ff15da040000488b5c2408488b0424488b54241090e8dde7ffff488b4c24104c8b71f84d8d7fe04c3b7d107303ff554049c747f8030000004d89fd49bcb89df2acaa2a00004d8965004c8b5c24084d895d104d8b56f84d8955084d8d7fd84c3b7d107303ff554049c747f8040000004d89f949b8889ef2acaa2a00004d89014d895118488b79d8498979104d89690849b848bff0acaa2a000048bb2804edacaa2a000090ff153e04000048b82804edacaa2a00004883c418c3525048ff70104889c3488b4008909090e829e7ffff4c8b6424104d8b5c24f84d8d7fe04c3b7d107303ff554049c747f8030000004d89fa49b9189ff2acaa2a00004d890a4c8b4424084d894210498b7bf849897a084d8d7fd84c3b7d107303ff554049c747f8040000004c89fe48bbe89ff2acaa2a000048891e48897e18498b5424d8488956104c8956084989f149b848bff0acaa2a000048bb2804edacaa2a000090ff158e030000488b5c2408488b0424488b54241090e881e6ffff488b4c24104c8b71f84d8d7fe04c3b7d107303ff554049c747f8030000004d89fd49bc78a0f2acaa2a00004d8965004c8b5c24084d895d104d8b56f84d8955084d8d7fd84c3b7d107303ff554049c747f8040000004d89f949b848a1f2acaa2a00004d89014d895118488b79d8498979104d89690849b848bff0acaa2a000048bb2804edacaa2a000090ff15f202000048b82804edacaa2a00004883c418c35248ff70084c8b60104983fc017502eb4f4c8b5c24084d8b53e84d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b0c244c8948084d8b04244c890049ff742408498b129090ff124c8b24244883c408483b65187303ff5548eba948b878a6edacaa2a00004883c410c348b8d8a1f2acaa2a000090ff555848b8010000000000000048b828a2f2acaa2a000090ff555848b8010000000000000090909090|@2938,8191,@1551,@2634,@2939,@2940,@2935,@2935,@2513,@2513,@2962,@1409,@2963,@1445,@1453,@2964,@3061,@1852,@3105,@3107,@3123,@2328,@2758,@3127,@3129,@3129,@1418,@2634,@2068,@2618,@303,@3109,@2265,@303,@2855,@2136,@5140,@1461,@1463,@1465,@2758,@2513,@5140,@2328,@2986,@2849,@3031,@1404,@1481,@1481,@1481,@2849,@2849,@3031,@2849,@2328,@5146,@2513,@1369,@1358,@5140,@1404,@2513,@2513,@5140,@2935,@2513,@2513,@2513,@2513|50,0,$2851+82 340,0,@2852 356,0,0 398,0,@2854 451,0,@2860 461,0,@2861 496,0,1 543,0,1 598,0,@2868 636,0,@512 738,0,@2870 850,0,@2871 904,0,@2872 937,0,@2218 947,0,@178 1041,0,@2875 1096,0,@2876 1125,0,@2218 1214,0,@2877 1368,0,10 1410,0,0 1459,0,0 1473,0,@2879 1495,0,0 1520,0,@617 1563,0,@2887 1636,0,0 1684,0,@2889 1785,0,0 1805,0,0 1855,0,0 1865,0,@617 1880,0,0 1908,0,1 1968,0,@2892 2019,0,@2702 2029,0,@2703 2080,0,I48 2095,0,I24 2114,0,0 2163,0,@2893 2213,0,@2349 2350,0,@2894 2384,0,1 2572,0,@617 2639,0,@606 2699,0,@606 2744,0,@606 2826,0,@605 2902,0,@2895 3005,0,@2897 3059,0,@2898 3091,0,@2218 3168,0,@2899 3285,0,0 3295,0,0 3353,0,@2901 3617,0,@2902 3726,0,@584 3749,0,0 3774,0,0 3798,0,0 3885,0,@2903 3939,0,@2904 3994,0,@2905 4135,0,@2906 4186,0,@617 4282,0,0 4321,0,@2909 4387,0,@2911 4440,0,@2912 4597,0,@617 4690,0,0 4746,0,@2913 4836,0,@617 4954,0,0 4997,0,@2914 5064,0,0 5115,0,0 5125,0,@617 5190,0,@2915 5243,0,@2916 5276,0,@2218 5289,0,@2604 5314,0,0 5324,0,0 5334,0,0 5344,0,9999 5354,0,@193 5495,0,@2604 5549,0,@2917 5603,0,@2918 5635,0,@2218 5722,0,@2919 5776,0,@2920 5809,0,@2218 5819,0,@178 5856,0,@584 5946,0,@2921 6054,0,@2922 6108,0,@2923 6141,0,@2218 6151,0,@178 6221,0,@2924 6276,0,@2925 6305,0,@2218 6315,0,@178 6332,0,@178 6402,0,@2926 6456,0,@2927 6489,0,@2218 6499,0,@178 6569,0,@2928 6624,0,@2929 6653,0,@2218 6663,0,@178 6680,0,@178 6791,0,@617 6806,0,@2930 6820,0,0 6830,0,@2932 6844,0,0 2852:O3|@7377,@215,@2853 2853:S28|61737369676e54797065733a20656d7074797472656520666f756e64 2854:C3,48|90909090909090483b65187303ff55484989c24c8b4a084c8b421048bb0300000000000000488b4218ff252900000090|@2858,8191,@2855|29,0,1 2855:C2,144|90909090909090483b65187303ff55484883fb01740c49bef806f0acaa2a0000eb0a49bed007f0acaa2a00004d8d7fd84c3b7d107303ff554049c747f8040000004d89fd49bce07df2acaa2a00004d896500498945184d8955104d8945084989c34d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c8968104c8948084c89184c89f2ff2290909090909090|@2859,8191|24,0,@1957 36,0,@1960 70,0,@2856 2856:C4,264|90909090909090483b65187303ff55484c8b7218525048bb280af0acaa2a0000498b464848bae8d7edacaa2a00009090ff15fa0000004c8b2c245048b8103dedacaa2a0000498b5530909090ff124c8b6424084c8b5c2410498b4310498b542418909090ff124c8b54240848b8f83cedacaa2a0000498b12ff124c8b4c240848b8103dedacaa2a0000498b5130909090ff124c8b44240848b8d00bf0acaa2a0000498b5018909090ff12488b7c240848b8b027edacaa2a0000488b17ff12488b7424104c8b442408488b1c24488b4608ff1562000000488b5c240848b80100000000000000488b5310909090ff12488b54240848b80100000000000000488b52104883c418ff2290|@2857,8191,@974,@2002|24,0,@1964 38,0,@972 61,0,@268 109,0,@267 129,0,@268 153,0,@1971 177,0,@257 221,0,0 245,0,0 2857:S28|50415253455f5452454528292e6572726f724e656172283529283129 2858:S36|50415253455f5452454528292e7061737332283629676976654572726f72283329283129 2859:S25|50415253455f5452454528292e6572726f724e656172283529 2860:S20|56616c7565206f7220636f6e7374727563746f72 2861:O1|@2862 2862:C4,192|90909090909090483b65187303ff55484883f80175535048b81500000000000000909090ff15be0000004d8d7fd84c3b7d107303ff554049c747f8040000004d89fd49c745180100000049c745100100000049bcb01e6000000000004d896508498945004d89eeeb054c8b7010504c89f048ba7012f1acaa2a000090ff156e0000004c8b68304d8d7fe04c3b7d107303ff554049c747f8030000004c89f849bc0881f2acaa2a00004c89204c8968104c8b1c244c8958084883c408c390909090|@2867,8191,@1852,@2356|25,0,10 84,0,I48 115,0,@2354 160,0,@2863 2863:C3,224|90909090909090483b65187303ff554852488b5210909090ff1248f7c001000000756d4c8b34244c8b284d8b65104d8b14244983fa01755d4d8d7fe84c3b7d107303ff554049c747f8020000004c89f84d8b4e084c8948084d8b4424084c8900498b7d00498b7508498b5d18ff15960000004d8d7fd84c3b7d107303ff554049c747f8040000004c89fa48895a18eb0ae938000000e910000000488942104889720848893a4989d3eb034d89eb4d8d7ff04c3b7d107303ff554049c747f8010000004c89f84c89184883c408c348b801000000000000004883c408c390909090|@2865,8191,@2864|207,0,0 2864:C2,48|4c8b304c8b68084d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c8968104c89700848c70005000000c390|@2866,6145| 2865:S32|56414c55455f4f505328292e6c6f6f6b757056616c7565283429283129283129 2866:S8|53656c6563746564 2867:S29|56414c55455f4f505328292e6c6f6f6b757056616c7565283429283129 2868:C4,136|90909090909090483b65187303ff55484c8b72085048ff721048bb280af0acaa2a0000498b464848bae8d7edacaa2a0000909090ff15760000004c8b6c24085048b8d00bf0acaa2a0000498b55189090ff124c8b64241048b8b027edacaa2a0000498b1424909090ff124c8b442410488b1c24488b4424084883c418ff2536000000909090909090|@2869,8191,@974,@2002|27,0,@1964 41,0,@972 66,0,@1971 89,0,@257 2869:S36|50415253455f5452454528292e7061737332283629666f756e644e656172283129283129 2870:C4,136|90909090909090483b65187303ff55484c8b72085048ff721048bb280af0acaa2a0000498b464848bae8d7edacaa2a0000909090ff15760000004c8b6c24085048b8d00bf0acaa2a0000498b55189090ff124c8b64241048b8b027edacaa2a0000498b1424909090ff124c8b442410488b1c24488b4424084883c418ff2536000000909090909090|@2869,8191,@974,@2002|27,0,@1964 41,0,@972 66,0,@1971 89,0,@257 2871:C4,136|90909090909090483b65187303ff55484c8b72085048ff721048bb280af0acaa2a0000498b464848bae8d7edacaa2a0000909090ff15760000004c8b6c24085048b8d00bf0acaa2a0000498b55189090ff124c8b64241048b8b027edacaa2a0000498b1424909090ff124c8b442410488b1c24488b4424084883c418ff2536000000909090909090|@2869,8191,@974,@2002|27,0,@1964 41,0,@972 66,0,@1971 89,0,@257 2872:C3,80|90909090909090483b65187303ff55484c8b72184c8b2c244c89342448ff721048ff72084c8b50104c8b480849b8e836eeacaa2a0000488b1848b84086f2acaa2a00004955ff252d0000009090909090|@2874,8191,@2507|46,0,@1202 59,0,@2873 2873:S11|43616e277420756e696679 2874:S32|545950455f5452454528292e756e69667928352963616e744d61746368283129 2875:C4,136|90909090909090483b65187303ff55484c8b72085048ff721048bb280af0acaa2a0000498b464848bae8d7edacaa2a0000909090ff15760000004c8b6c24085048b8d00bf0acaa2a0000498b55189090ff124c8b64241048b8b027edacaa2a0000498b1424909090ff124c8b442410488b1c24488b4424084883c418ff2536000000909090909090|@2869,8191,@974,@2002|27,0,@1964 41,0,@972 66,0,@1971 89,0,@257 2876:C3,80|90909090909090483b65187303ff55484c8b72184c8b2c244c89342448ff721048ff72084c8b50104c8b480849b8e836eeacaa2a0000488b1848b84086f2acaa2a00004955ff252d0000009090909090|@2874,8191,@2507|46,0,@1202 59,0,@2873 2877:C3,48|90909090909090483b65187303ff55484989c24c8b4a084c8b421048bb0300000000000000488b4218ff252900000090|@2878,8191,@2855|29,0,1 2878:S56|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c7565732832296d7367466e283129 2879:O1|@2880 2880:C2,16|48b80089f2acaa2a0000c39090909090|@2886,1|2,0,@2881 2881:O1|@2882 2882:C2,48|4989c64d8d7fe84c3b7d107303ff554049c747f8020000004c89f849bd7889f2acaa2a00004c89284c897008c3909090|@2885,6145|29,0,@2883 2883:C2,40|4d8d7fe84c3b7d107303ff554049c747f8020000004d89fe49894608488b42084989064c89f0c390|@2884,4101| 2884:S57|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c756573283229283129283129283129 2885:S54|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c756573283229283129283129 2886:S51|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c756573283229283129 2887:C4,88|90909090909090483b65187303ff554848ff721848ff721048ff720848bbf005f0acaa2a00009090ff15520000004989c24c8b0c244c8b44240848bb0300000000000000488b4424104883c418ff25350000009090909090|@2888,8191,@303,@2855|30,0,@1955 60,0,1 2888:S57|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c7565732832296d657373466e283129 2889:C3,144|90909090909090483b65187303ff55484c8b72204d8d7fd84c3b7d107303ff554049c747f8040000004d89fd49bc788cf2acaa2a00004d8965004c8b62104d8965184c8b5a184d895d104c8b52084d89550849b9008eeeacaa2a00004c8b04244c890c24495549bad8fef1acaa2a000049b9f8fef1acaa2a00004c89c74d8b4660498b5e4057ff252c00000090909090|@2891,8191,@2634|46,0,@2890 84,0,@1418 104,0,@2702 114,0,@2703 2890:C3,48|90909090909090483b65187303ff55484989c24c8b4a084c8b421048bb0300000000000000488b4218ff252900000090|@2858,8191,@2855|29,0,1 2891:S55|50415253455f5452454528292e706173733228362961737369676e56616c756573283629707441737369676e5479706573283329283129 2892:C3,48|90909090909090483b65187303ff55484989c24c8b4a084c8b421048bb0300000000000000488b4218ff252900000090|@2858,8191,@2855|29,0,1 2893:C3,48|90909090909090483b65187303ff55484989c24c8b4a084c8b421048bb0300000000000000488b4218ff252900000090|@2858,8191,@2855|29,0,1 2894:S18|206973206e6f742061206461746174797065 2895:C3,144|90909090909090483b65187303ff55484c8b72204d8d7fd84c3b7d107303ff554049c747f8040000004d89fd49bc088ff2acaa2a00004d8965004c8b62104d8965184c8b5a184d895d104c8b52084d89550849b9008eeeacaa2a00004c8b04244c890c24495549bad8fef1acaa2a000049b9f8fef1acaa2a00004c89c74d8b4660498b5e4057ff252c00000090909090|@2891,8191,@2634|46,0,@2896 84,0,@1418 104,0,@2702 114,0,@2703 2896:C3,48|90909090909090483b65187303ff55484989c24c8b4a084c8b421048bb0300000000000000488b4218ff252900000090|@2858,8191,@2855|29,0,1 2897:C4,136|90909090909090483b65187303ff55484c8b72085048ff721048bb280af0acaa2a0000498b464848bae8d7edacaa2a0000909090ff15760000004c8b6c24085048b8d00bf0acaa2a0000498b55189090ff124c8b64241048b8b027edacaa2a0000498b1424909090ff124c8b442410488b1c24488b4424084883c418ff2536000000909090909090|@2869,8191,@974,@2002|27,0,@1964 41,0,@972 66,0,@1971 89,0,@257 2898:C3,80|90909090909090483b65187303ff55484c8b72184c8b2c244c89342448ff721048ff72084c8b50104c8b480849b8e836eeacaa2a0000488b1848b84086f2acaa2a00004955ff252d0000009090909090|@2874,8191,@2507|46,0,@1202 59,0,@2873 2899:C4,88|90909090909090483b65187303ff554848ff721848ff721048ff720848bb7891f2acaa2a00009090ff15520000004989c24c8b0c244c8b44240848bb0300000000000000488b4424104883c418ff25350000009090909090|@2888,8191,@303,@2855|30,0,@2900 60,0,1 2900:S37|2068617320616c7265616479206265656e20626f756e6420696e2074686973206d61746368 2901:C2,56|90909090909090483b65187303ff55485250488b52109090ff124883f80175134c8b742408488b0424498b56084883c410ff224883c410c3|@1306,8191| 2902:C3,48|90909090909090483b65187303ff55484989c24c8b4a084c8b421048bb0300000000000000488b4218ff252900000090|@2858,8191,@2855|29,0,1 2903:C2,56|90909090909090483b65187303ff55485250488b52109090ff124883f80175134c8b742408488b0424498b56084883c410ff224883c410c3|@1306,8191| 2904:C2,56|90909090909090483b65187303ff55485250488b52109090ff124883f80175134c8b742408488b0424498b56084883c410ff224883c410c3|@1306,8191| 2905:C2,56|90909090909090483b65187303ff55485250488b52109090ff124883f80175134c8b742408488b0424498b56084883c410ff224883c410c3|@1306,8191| 2906:O1|@2907 2907:C2,16|48b80100000000000000c39090909090|@2908,1|2,0,0 2908:S60|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c7565732832296c6f63616c456e762d283129 2909:C2,104|90909090909090483b65187303ff55484c8b72184d8b2e4d8d7fe84c3b7d107303ff554049c747f8020000004d89fc4d896c24084c8b68084d892c244d89265250488b5210909090ff124c8b6424084d8b5c2408488b0424498b53104883c410ff22909090909090|@2910,8191| 2910:S59|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c756573283229626f6479456e762d283129 2911:C2,56|90909090909090483b65187303ff55485250488b52109090ff124c8b7424084d8b6e08488b0424498b55184883c410ff2290909090909090|@2910,8191| 2912:C2,56|90909090909090483b65187303ff55485250488b52109090ff124c8b7424084d8b6e08488b0424498b55484883c410ff2290909090909090|@2910,8191| 2913:C3,48|90909090909090483b65187303ff55484989c24c8b4a084c8b421048bb0300000000000000488b4218ff252900000090|@2858,8191,@2855|29,0,1 2914:C4,88|90909090909090483b65187303ff554848ff721848ff721048ff720848bbf005f0acaa2a00009090ff15520000004989c24c8b0c244c8b44240848bb0300000000000000488b4424104883c418ff25350000009090909090|@2888,8191,@303,@2855|30,0,@1955 60,0,1 2915:C4,136|90909090909090483b65187303ff55484c8b72085048ff721048bb280af0acaa2a0000498b464848bae8d7edacaa2a0000909090ff15760000004c8b6c24085048b8d00bf0acaa2a0000498b55189090ff124c8b64241048b8b027edacaa2a0000498b1424909090ff124c8b442410488b1c24488b4424084883c418ff2536000000909090909090|@2869,8191,@974,@2002|27,0,@1964 41,0,@972 66,0,@1971 89,0,@257 2916:C3,80|90909090909090483b65187303ff55484c8b72184c8b2c244c89342448ff721048ff72084c8b50104c8b480849b8e836eeacaa2a0000488b1848b84086f2acaa2a00004955ff252d0000009090909090|@2874,8191,@2507|46,0,@1202 59,0,@2873 2917:C4,136|90909090909090483b65187303ff55484c8b72085048ff721048bb280af0acaa2a0000498b464848bae8d7edacaa2a0000909090ff15760000004c8b6c24085048b8d00bf0acaa2a0000498b55189090ff124c8b64241048b8b027edacaa2a0000498b1424909090ff124c8b442410488b1c24488b4424084883c418ff2536000000909090909090|@2869,8191,@974,@2002|27,0,@1964 41,0,@972 66,0,@1971 89,0,@257 2918:C3,80|90909090909090483b65187303ff55484c8b72184c8b2c244c89342448ff721048ff72084c8b50104c8b480849b8e836eeacaa2a0000488b1848b84086f2acaa2a00004955ff252d0000009090909090|@2874,8191,@2507|46,0,@1202 59,0,@2873 2919:C4,136|90909090909090483b65187303ff55484c8b72085048ff721048bb280af0acaa2a0000498b464848bae8d7edacaa2a0000909090ff15760000004c8b6c24085048b8d00bf0acaa2a0000498b55189090ff124c8b64241048b8b027edacaa2a0000498b1424909090ff124c8b442410488b1c24488b4424084883c418ff2536000000909090909090|@2869,8191,@974,@2002|27,0,@1964 41,0,@972 66,0,@1971 89,0,@257 2920:C3,80|90909090909090483b65187303ff55484c8b72184c8b2c244c89342448ff721048ff72084c8b50104c8b480849b8e836eeacaa2a0000488b1848b84086f2acaa2a00004955ff252d0000009090909090|@2874,8191,@2507|46,0,@1202 59,0,@2873 2921:C4,136|90909090909090483b65187303ff55484c8b72085048ff721048bb280af0acaa2a0000498b464848bae8d7edacaa2a0000909090ff15760000004c8b6c24085048b8d00bf0acaa2a0000498b55189090ff124c8b64241048b8b027edacaa2a0000498b1424909090ff124c8b442410488b1c24488b4424084883c418ff2536000000909090909090|@2869,8191,@974,@2002|27,0,@1964 41,0,@972 66,0,@1971 89,0,@257 2922:C4,136|90909090909090483b65187303ff55484c8b72085048ff721048bb280af0acaa2a0000498b464848bae8d7edacaa2a0000909090ff15760000004c8b6c24085048b8d00bf0acaa2a0000498b55189090ff124c8b64241048b8b027edacaa2a0000498b1424909090ff124c8b442410488b1c24488b4424084883c418ff2536000000909090909090|@2869,8191,@974,@2002|27,0,@1964 41,0,@972 66,0,@1971 89,0,@257 2923:C3,80|90909090909090483b65187303ff55484c8b72184c8b2c244c89342448ff721048ff72084c8b50104c8b480849b8e836eeacaa2a0000488b1848b84086f2acaa2a00004955ff252d0000009090909090|@2874,8191,@2507|46,0,@1202 59,0,@2873 2924:C4,136|90909090909090483b65187303ff55484c8b72085048ff721048bb280af0acaa2a0000498b464848bae8d7edacaa2a0000909090ff15760000004c8b6c24085048b8d00bf0acaa2a0000498b55189090ff124c8b64241048b8b027edacaa2a0000498b1424909090ff124c8b442410488b1c24488b4424084883c418ff2536000000909090909090|@2869,8191,@974,@2002|27,0,@1964 41,0,@972 66,0,@1971 89,0,@257 2925:C3,80|90909090909090483b65187303ff55484c8b72184c8b2c244c89342448ff721048ff72084c8b50104c8b480849b8e836eeacaa2a0000488b1848b84086f2acaa2a00004955ff252d0000009090909090|@2874,8191,@2507|46,0,@1202 59,0,@2873 2926:C4,136|90909090909090483b65187303ff55484c8b72085048ff721048bb280af0acaa2a0000498b464848bae8d7edacaa2a0000909090ff15760000004c8b6c24085048b8d00bf0acaa2a0000498b55189090ff124c8b64241048b8b027edacaa2a0000498b1424909090ff124c8b442410488b1c24488b4424084883c418ff2536000000909090909090|@2869,8191,@974,@2002|27,0,@1964 41,0,@972 66,0,@1971 89,0,@257 2927:C3,80|90909090909090483b65187303ff55484c8b72184c8b2c244c89342448ff721048ff72084c8b50104c8b480849b8e836eeacaa2a0000488b1848b84086f2acaa2a00004955ff252d0000009090909090|@2874,8191,@2507|46,0,@1202 59,0,@2873 2928:C4,136|90909090909090483b65187303ff55484c8b72085048ff721048bb280af0acaa2a0000498b464848bae8d7edacaa2a0000909090ff15760000004c8b6c24085048b8d00bf0acaa2a0000498b55189090ff124c8b64241048b8b027edacaa2a0000498b1424909090ff124c8b442410488b1c24488b4424084883c418ff2536000000909090909090|@2869,8191,@974,@2002|27,0,@1964 41,0,@972 66,0,@1971 89,0,@257 2929:C3,80|90909090909090483b65187303ff55484c8b72184c8b2c244c89342448ff721048ff72084c8b50104c8b480849b8e836eeacaa2a0000488b1848b84086f2acaa2a00004955ff252d0000009090909090|@2874,8191,@2507|46,0,@1202 59,0,@2873 2930:O3|@7377,@215,@2931 2931:S27|61737369676e54797065733a2077696c646361726420666f756e64 2932:O3|@7377,@215,@2933 2933:S34|61737369676e54797065733a206c617965726564207061747465726e20666f756e64 2934:S36|50415253455f5452454528292e706173733228362961737369676e56616c756573283629 2935:C12,504|90909090909090483b65187303ff55485349504951495290ff15020200004989c54c89e8ff15fe0100004883f801746f4d89ec4c89e09090ff15f20100004c89e0909090ff15ee0100004883f801740f4c89e090ff15e60100004989c3eb1948b8b0d7edacaa2a00009090ff555849bb01000000000000004d8d7fd84c3b7d107303ff554049c747f8040000004d89fa49b938a5f2acaa2a00004d890aeb05e9470000004c8b4424104d894218488b7c240849897a10488b34244989720849534d89d149b848bff0acaa2a0000488b5c2420498b03909090ff156a010000488b1c24488b43084883c428c350504d89ec4989e3495349ba010000000000000049b9010000000000000049b8010000000000000048bb1f4e00000000000048b8e005edacaa2a000090ff15220100004d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b14244c89104c8b4c24084c8948089090ff15fa0000004989c04d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c894008488b7c2428488938909090ff15d20000004d8d7fd84c3b7d107303ff554049c747f8040000004c89fe48bbc8a5f2acaa2a000048891e488b54242048895618488b4c241848894e104c8b7424104c89760849504989f149b848bff0acaa2a00004889c34c89e090ff157e000000488b04244883c438c39090909090|@5157,8191,@2039,@2084,@2085,@2084,@2085,@2513,@1369,@1358,@1404,@2513|97,0,@970 112,0,0 146,0,@2936 197,0,@2218 247,0,0 257,0,0 267,0,0 277,0,9999 287,0,@193 424,0,@2937 469,0,@2218 2936:C3,80|90909090909090483b65187303ff55484c8b72184c8b2c244c89342448ff721048ff72084c8b50104c8b480849b8e836eeacaa2a0000488b1848b84086f2acaa2a00004955ff252d0000009090909090|@2874,8191,@2507|46,0,@1202 59,0,@2873 2937:C3,80|90909090909090483b65187303ff55484c8b72184c8b2c244c89342448ff721048ff72084c8b50104c8b480849b8e836eeacaa2a0000488b1848b84086f2acaa2a00004955ff252d0000009090909090|@2874,8191,@2507|46,0,@1202 59,0,@2873 2938:S48|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c756573283229 2939:C9,208|90909090909090483b65187303ff55484989c64889d89090ff15da000000488b50084883fa01754e488b58184889d890ff15ca0000004883f801740b48b8a8c2f1acaa2a0000c34d8d7fe84c3b7d107303ff554049c747f8020000004c89f848baa8c2f1acaa2a000048895008488918ff25920000004d89f54989c4498b442410909090ff15860000004883f8017424498b442410909090ff157a0000004989db48bb01000000000000004c89d8ff256c0000004d89e848bb0100000000000000498b442418ff255c00000090909090|@2949,8191,@2950,@2015,@1404,@2402,@2404,@2940,@2465|62,0,@2604 97,0,@2604 163,0,0 185,0,0 2940:C9,200|90909090909090483b65187303ff55484989c5498b451090ff15d20000004883f801745c498b4510ff15ca0000009090ff15ca0000004883f80174494989db4d8b5518498b450048ba10a9f2acaa2a0000909090ff15ae0000004953495248baf0aaf2acaa2a0000ff124c8b4424084889c3488b04244883c410ff2590000000e91e00000049b8030000000000000048bb0100000000000000498b4518ff257500000049b8030000000000000048bb0100000000000000498b4518ff255f00000090909090909090|@2956,8191,@2402,@2404,@2957,@2942,@2951,@2465,@2465|73,0,@2941 96,0,@2946 135,0,1 145,0,0 165,0,1 175,0,0 2941:O2|@2942,@7466 2942:C3,48|90909090909090483b65187303ff5548504c8b7208498b06488d542408909090ff15320000004883c408c39090909090|@2944,7231,@2943| 2943:C2,176|90909090909090483b65187303ff55484883f801750b48b80100000000000000c34c8b304989d54c8b6008498b1e498b45f848bab018600000000000ff124883f80174614d8d7fe84c3b7d107303ff554049c747f8020000004c89ff498b761048897708498b5e0848891f4955574c89e04c89ea90e88dffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b0c2448890a4889d04883c410c34c89e04c89eae957ffffff|@2945,7231|24,0,0 52,0,I24 2944:S29|5052494e545f5441424c4528292e6765744f7665726c6f616473283129 2945:S42|5052494e545f5441424c4528292e6765744f7665726c6f6164732831297365617263684c697374283129 2946:O1|@2947 2947:C2,96|90909090909090483b65187303ff55484883f801750b48b80100000000000000c34c8b3049ff36488b40089090e8d5ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fe49894608488b04244989064c89f04883c408c3909090|@2948,4097|24,0,0 2948:S38|56414c55455f4f505328292e6f7665726c6f6164547970652832296765745479706573283129 2949:S51|50415253455f5452454528292e706173733228362961737369676e56616c756573283629696e7374616e636554797065283229 2950:C2,8|c390909090909090|@2683,1| 2951:C10,280|90909090909090483b65187303ff55484983f801744c4989c04c89c0ff151e0100004883f801741f4c89c090ff1516010000495053488b4008909090ff150e0100004989c6eb2648b8e8adf2acaa2a00009090ff555849be0100000000000000eb0b5053ff15ee0000004989c64d89f54c89e890ff15e60000004883f80174704c89e890ff15de0000004989c3488b0424909090ff15d60000004d8d7fe84c3b7d107303ff554049c747f8020000004d89fa4d895a084989024d8d7fe84c3b7d107303ff554049c747f8020000004d89f949c74108010000004d891149b803000000000000004c89cb488b442408eb05e90a0000004883c410ff257900000048b838aef2acaa2a00009090ff555848b80100000000000000|@2960,8191,@2084,@2085,@2039,@2959,@1458,@1459,@2564,@2465|73,0,@2952 88,0,0 222,0,1 257,0,@2954 272,0,0 2952:O3|@7377,@215,@2953 2953:S26|676574526573756c74202d206e6f7420612066756e6374696f6e 2954:O3|@7377,@215,@2955 2955:S42|67656e6572616c6973654f7665726c6f6164202d20617267206973206e6f742061207479706520766172 2956:S27|56414c55455f4f505328292e6f7665726c6f616454797065283229 2957:C2,32|4883f809750b48b80300000000000000c348b80100000000000000c390909090|@2958,1|8,0,1 19,0,0 2958:S7|54797065446570 2959:C10,136|90909090909090483b65187303ff55484989c54c89e89090ff15920000004883f80174564c89e890ff158a0000004c8b284c89e8ff15860000004883f80174314d89eb4c89d89090ff157a000000488b500848f7c201000000750d4c8b32498b4608ff25680000004c89d8ff25670000004c89e8ff25660000004c89e8ff25650000009090909090|@2961,8191,@2084,@2085,@2046,@2047,@2039,@2039,@2039,@2039| 2960:S33|545950455f5452454528292e67656e6572616c6973654f7665726c6f6164283329 2961:S23|545950455f5452454528292e6669727374417267283129 2962:C3,120|90909090909090483b65187303ff55484883f801750b48b80100000000000000c35248ff7008488b5af8488b00488b52f0909090ff156600000050488b442408488b542410e8bdffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fe498946084c8b2c244d892e4c89f04883c418c3909090|@417,8191,@2851|24,0,0 2963:C3,192|90909090909090483b65187303ff55484883f801750b48b80100000000000000c350504c8b305248ff700849ff36488b5af0498b4608488b52f89090ff15a60000004c8d6c24184c8b24244d8965004c8d5c2418498943084d8d7fe84c3b7d107303ff554049c747f8020000004d89fa4c8b4c24184d890a4c8b4424204d8942084952488b442410488b542418e875ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89ff48894708488b34244889374889f84883c430c3909090|@417,8191,@2851|24,0,0 2964:C7,448|90909090909090483b65187303ff55484c8b720841f6c6017503ff55704d89f54983c50270f44989c44d8d7fe84c3b7d107303ff554049c747f8020000004c89f849bb70b4f2acaa2a00004c89184c89680852495453495049514955498b1090ff124c8b5424184c8b4c24284d8d7fe04c3b7d107303ff554049c747f8030000004c89f849b8b0b6f2acaa2a00004c8900498b79e848897810488b342448897008498b12ff12488b5c2428488b53f84d8d7fd84c3b7d107303ff554049c747f8040000004c89f948b858b9f2acaa2a00004889014c8b72f84c8971184c8b6bf04c8969104c8b63d84c8961085050504889e34889c8909090ff15ea0000005050504889e348b801000000000000009090ff15da000000488b5c243848b80100000000000000488d5424609090ff15c6000000504989c0488b5c244048b80100000000000000488d5424689090ff15ae000000488b1c24488b442440488d542468ff15a20000004c8b5c24604d8d7fe04c3b7d107303ff554049c747f8030000004c89f849ba50baf2acaa2a00004c89104d8b4be84c8948104c8b4424584c894008488b5424209090ff1248b878a6edacaa2a00004883c468c390909090909090|@2981,8191,@2328,@1481,@2982,@3022,@2976|67,0,@2965 134,0,@2969 201,0,@2973 262,0,0 285,0,0 317,0,0 389,0,@2975 428,0,@617 2965:C3,32|90909090909090483b65187303ff5548488b5a08488b4008ff252a0000009090|@2967,8191,@2966| 2966:C10,232|90909090909090483b65187303ff554853909090ff15f60000004989c54c89e8ff15f20000004883f801740f4c89e890ff15ea0000004989c4eb1948b8b0d7edacaa2a00009090ff555849bc0100000000000000498b5c2408498b0424909090ff15c20000004989c3498b5c2408498b04249090ff15b600000050504989e249524989c249b903000000000000004d89d8488b5c241848b8e005edacaa2a0000ff15920000004d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b0c244c89084c8b4424084c8940089090ff156a0000004889c34c89e04883c418ff25620000009090|@2968,8191,@2039,@1458,@1459,@2024,@2055,@1369,@1358,@1454|61,0,@970 76,0,0 134,0,1 152,0,@193 2967:S61|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c4465636c61726174696f6e283429552d283129 2968:S27|545950455f5452454528292e736574547661724c6576656c283229 2969:C4,88|90909090909090483b65187303ff55484c8b72105248ff7008488b00498b5658ff1248f7c0010000007511488b1c24488b004883c410ff25440000004c8b6c2408498b5d08488b04244883c410ff25350000009090909090|@2971,8191,@2970,@2966| 2970:C12,248|90909090909090483b65187303ff554850539090ff15060100004989c54c89e8ff15020100004883f801740f4c89e890ff15fa0000004989c4eb1948b8b0d7edacaa2a00009090ff555849bc01000000000000004954488b44240890ff15d60000004989c34c89d8ff15d20000004883f801740f4c89d890ff15ca0000004989c2eb1948b8b0d7edacaa2a00009090ff555849ba01000000000000004c8b0c24498b5908498b0190ff15a20000004989c0498b5a08498b02ff159a00000049504c23c041f6c00149587503ff55704c3bc07e12488b5c24084c89c84883c418ff257b000000488b5c24104c89d04883c418ff257100000090|@2972,8191,@2039,@1458,@1459,@2039,@1458,@1459,@2057,@2057,@1454,@1454|61,0,@970 76,0,0 133,0,@970 148,0,0 2971:S69|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c4465636c61726174696f6e2834293c7061747465726e3e2d283129 2972:S27|545950455f5452454528292e6c696e6b5479706556617273283229 2973:C4,88|90909090909090483b65187303ff554848ff721848ff721048ff720848bbf005f0acaa2a00009090ff15520000004989c24c8b0c244c8b44240848bb0300000000000000488b4424104883c418ff25350000009090909090|@2974,8191,@303,@2855|30,0,@1955 60,0,1 2974:S66|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c4465636c61726174696f6e2834296e6577456e762d283129 2975:C2,104|90909090909090483b65187303ff55484c8b72105248ff7008498b5610909090ff124c8b6c24084d8b65084d8b1c244d8d7fe84c3b7d107303ff554049c747f8020000004d89fa4d895a084c8b0c244d890a4d89142448b801000000000000004883c410c3909090|@2967,8191|88,0,0 2976:C5,344|90909090909090483b65187303ff55484883f801750b48b80100000000000000c34c8b304983fe017506488b4008ebd748f7c301000000756e5249ff761048ff700848ff3348ff730848ff72d0498b4608909090ff15260100004c8b6c24284d8b65f84d8b5c24f84d8d7fe04c3b7d107303ff554049c747f8030000004d89fa49b998bcf2acaa2a00004d890a4d8b4424f04d894210498b7bf849897a0849524c8b542428eb05e98e0000004989f94989c0488b5c2408488b442418ff15c6000000488b742428488b5ef8488b53f84d8d7fd84c3b7d107303ff554049c747f8040000004c89f948b868bdf2acaa2a00004889014c8b72f84c8971184c8b6bf04c8969104c8b6424204c8961084989c8488b5be0488b442410909090ff156e000000488b5c2408488b442418488b5424284883c430e9cdfeffff48b8d8bdf2acaa2a0000909090ff555848b8010000000000000090909090|@3041,8191,@3042,@3046,@3031|24,0,0 130,0,@2977 233,0,@2978 316,0,@2979 332,0,0 2977:C4,136|90909090909090483b65187303ff55484c8b72085048ff721048bb280af0acaa2a0000498b464848bae8d7edacaa2a0000909090ff15760000004c8b6c24085048b8d00bf0acaa2a0000498b55189090ff124c8b64241048b8b027edacaa2a0000498b1424909090ff124c8b442410488b1c24488b4424084883c418ff2536000000909090909090|@2869,8191,@974,@2002|27,0,@1964 41,0,@972 66,0,@1971 89,0,@257 2978:C3,48|90909090909090483b65187303ff55484989c24c8b4a084c8b421048bb0300000000000000488b4218ff252900000090|@2858,8191,@2855|29,0,1 2979:O3|@7377,@215,@2980 2980:S33|616c6c6f7747656e3a206261646c792d666f726d65642070617273652d74726565 2981:S56|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c4465636c61726174696f6e283429 2982:C5,424|90909090909090483b65187303ff55484883fb01750b48b80100000000000000c34c8b334983fe017510488b5b0848b80300000000000000ebcd4d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fd49c74500030000004d8d7fd04c3b7d107303ff554049c747f8050000004d89fc49bb70c0f2acaa2a00004d891c244d896c24204c8b5ac04d895c241849894424104c8b52a84d89542408525049ff3649ff761048ff7308495548ff7424184d89e24c8b4ad049b801000000000000004889c3488b442418488b52f89090ff15f60000004c8b0c244d8b014983f8017446488b7c2428488b77f8488b5e084883fb037430488b56f8488b4af85048bb686feeacaa2a0000488b414848bae8d7edacaa2a000090ff15b60000004883f801743eeb0650eb3950eb36488b4424304c8b70f84d8b6ef849ba68c1f2acaa2a00004c8b4c24184c8b44242048bb0100000000000000498b45f890ff157a000000488b5c2410488b442428488b542430e88dfeffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89ff48894708488b34244889374889f84883c438c3909090|@3003,8191,@2986,@974,@2855|24,0,0 48,0,1 121,0,@2983 190,0,0 261,0,@1361 275,0,@972 319,0,@2985 339,0,0 2983:C2,88|90909090909090483b65187303ff55484c8b722049c706010000005250488b5218909090ff124c8b6c24084d8b65104983fc01740e488b0424498b55084883c410ff2248b801000000000000004883c410c3909090909090|@2984,8191|69,0,0 2984:S81|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c4465636c61726174696f6e2834296d617050726f63657373283229656e74657256616c73283129 2985:S39|5061747465726e20646f6573206e6f74206465636c61726520616e79207661726961626c65732e 2986:C45,3096|90909090909090483b65187303ff55484c8b7424084d8b2e49f7c501000000741e4983fde17c1d4983fd1d7f1c49bceec1f2acaa2a00004f8d64ac7c41ffe4e902010000e9fd000000e9f8000000e94b0b0000909090e9eb000000909090e9e3000000909090e9db000000909090e9d3000000909090e9cb000000909090e995040000909090e91f0a0000909090e9c0000000909090e9ab000000909090e9a3000000909090e99b000000909090e993000000909090e9da080000909090e983000000909090e97b000000909090e973000000909090e9c5040000909090e963000000909090e95b000000909090e953000000909090e94b000000909090e943000000909090e93b000000909090e9d4060000909090e95d070000909090e923000000909090e91b000000909090e913000000909090e980060000909090e94e0a000090909048b878a6edacaa2a0000c20800505052505349504951495249ff760849ff761049ff7618488d5c2448488b442410ff15c60a00004c8b5c24404d8b53f84d8b4af848bb686feeacaa2a0000498b414848bae8d7edacaa2a000090ff15a20a00004883f80175174c8b4424304983f801740c48bf38efeeacaa2a0000eb6d48bbb01e600000000000488b44244848bab018600000000000ff124883f80174304c8b442440498b78e8488b442410488b57309090ff1248f7c0010000007505488b38eb7248bf38efeeacaa2a0000eb6b4c8b442440498b78e8498b70f84d8d7fd84c3b7d107303ff5540eb05e97000000049c747f8040000004c89fb48ba48cff2acaa2a0000488913488b4ef848894b18488b442460488943104c8b7424384c897308ff35e30900005349ba50c6f1acaa2a0000eb0ae926000000e92100000049b9f07ff2acaa2a00004c8b4760488b5f30488b44242090ff15b60900004889c74889f8ff15b20900004883f80174704c8b6424284983fc01743d4c8b5c24404d8b53f8574d8b4af849bab8cff2acaa2a00004d89c84c8b4c24404c89c64c8b44246848bb03000000000000004889f0ff156e090000eb01574c8b5c24104c8b14244d89134c89d0ff155e0900004989c1498b4108909090ff1556090000eb05e9760000004883f8017410498b410890ff15460900004989c0eb0e498b411890ff153e0900004989c04983f8017402eb314c8b442448498b78f849baf8cff2acaa2a00004c8b4c24404c8b44246848bb0300000000000000488b47f8ff150a090000488b1c2448b80100000000000000ff15fe0800004989c5eb6d50504989e5495549ba010000000000000049b9010000000000000049b80100000000000000488b5c243848b8e005edacaa2a000090ff15c60800004d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b24244c89204c8b5c24084c8958089090ff159e080000eb05e9f40000004d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fa49c702010000004d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89f949c701010000004d89d04889c3488b442420ff15460800004c8b442450498b78f8504c8b442450488b5ff8488b4424289090ff152e080000488b742458488b5ef849ba01000000000000004c8b4c24504c8b43f8488b5ef0488b44242890ff150a0800004d8d7fe84c3b7d107303ff554049c747f8020000004c89f8488b142448895008488b4c2428488908488b54243090ff12488b4424204c8b34244c89304c89f0909090ff15ca0700004989c54883c4104c8b6424084d892c244c89e84883c460c20800525049ff760848bb0300000000000000498b4618ff159e0700004c8b5c24104d8b53f84d8d7fe04c3b7d107303ff554049c747f8030000004d89f949b838d0f2acaa2a00004d8901488b7c242049897910498b72f849897108498b5af84d89ca4c8b4c24084989d848bbd899edacaa2a00009090ff1546070000488b14244889024883c418c208004d8b5e08498b334883fef17574488b4ae84c8b6af84d8d7fd84c3b7d107303ff554049c747f8040000004d89fc48bf08d1f2acaa2a000049893c24498b7df849897c24184d89742410498944240852505349504951495249ff761049ff730849ff7310ff35d7060000495449ba50c6f1acaa2a000049b9f07ff2acaa2a0000eb05e9c00000004c8b4160488b5930488b44241890ff15ae0600004889c64889f0ff15aa0600004883f801741f488b1c244889334889f348b80100000000000000ff15920600004889c7eb764889f09090ff158a0600004883f801740c48bb0100000000000000eb4d488b5c2440488b53f848ff72f848bb78d1f2acaa2a0000488b442410ff155e0600004989c24c8b4c24404c8b44245848bb0300000000000000488b0424909090ff15420600004889c34883c40848bf78a6edacaa2a0000eb49e944000000488b4af852505349504951495249ff761049baa0d1f2acaa2a00004989c14d89f048bb0300000000000000488b41f8909090ff15fa05000048bf78a6edacaa2a000050505748ff7424184c8b5424284c8b4c24304c8b442438488b5c2440488b442448488b542450909090e8b1f8ffff4c8b7424484d8b6ef84d8d7fe04c3b7d107303ff554049c747f8030000004d89fc49bbe0d1f2acaa2a00004d891c244c8b5424584d895424104d8b4df84d894c24084d89e24c8b4c24404d8b45f84889c3488b0424488b7c24504883c46057ff2565050000525053495049514952498b4608488d542430909090ff15520500004c8b5c24304883c4404953ff254905000052505349504951495249ff760849ff7610498b4618488d542440909090ff152e0500004c8b5c24384d8b53f84d8d7fd84c3b7d107303ff554049c747f8040000004d89f949b8b0d2f2acaa2a00004d8901498b7af849897918488b74244849897110488b5c2430498959084c89cb909090ff15e2040000488b5c240890ff15de040000488b14244889024883c440c20800525053495049514952498b4608488d5424309090ff15be0400004d8d7fe84c3b7d107303ff554049c747f8020000004d89fb49c7430801000000498903505048b828a5edacaa2a0000909090ff158e0400009090ff158e0400004883f801743d4d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fa49b928a5edacaa2a00004d890a4989e049c700ffffffff4889e74c895708eb1b4989e249c702010000004989e149b828a5edacaa2a00004d8941084d8d7fe84c3b7d107303ff554049c747f8020000004c89ff488b3424488937488b5c240848895f084d8d7fe04c3b7d107303ff554049c747f8030000004c89f84889781048ba10a5edacaa2a0000488950084c8918488b4c24404883c45051ff25d3030000525049ff760849ff76109090e861f6ffff4c8b5c24104d8b53f84d8d7fd04c3b7d107303ff554049c747f8050000004d89f949b870d3f2acaa2a00004d8901498b7be849897920488b74242049897118498b5af849895910488b54240849895108504c89c94989d14989d84889cb488b442408ff1562030000488b4424184c8b70f84d8d7fe04c3b7d107303ff554049c747f8030000004d89fd49bcb0d4f2acaa2a00004d8965004c8b5c24284d895d104d8b56f84d8955084d8d7fd84c3b7d107303ff554049c747f8040000004d89f949b880d5f2acaa2a00004d89014d895118488b7c2410498979104d89690849b848bff0acaa2a0000488b5c2408488b042490ff15da020000488b4424084883c420c2080052505349504951495249ff761049ff760849b80300000000000000e83df5ffff5048ff7424084c8b5424184c8b4c24204c8b442428488b5c2430488b442438488b542440909090e811f5ffff4c8b5c24384d8b53f84d8d7fe04c3b7d107303ff554049c747f8030000004d89f949b810d6f2acaa2a00004d8901488b7c244849897910498b72f8498971084d8d7fd84c3b7d107303ff554049c747f8040000004c89fb48bae0d6f2acaa2a000048891348897318488b4c243048894b104c894b084989d949b848bff0acaa2a00004889c3488b042490ff15fa010000488b04244883c440c2080048b888a2edacaa2a0000c2080050504989e3495349ba010000000000000049b9010000000000000049b8010000000000000048bb1f4e00000000000048b8e005edacaa2a000090ff15aa0100004d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b14244c89104c8b4c24084c8948084c8b4424104883c4204950ff257901000090|@3005,8191,@2068,@974,@1551,@2634,@2401,@2855,@2950,@2610,@2612,@2015,@2855,@2939,@1369,@1358,@3006,@1493,@3008,@2277,@2940,@2935,@1551,@2634,@2401,@2939,@3012,@303,@2855,@2855,@2935,@3014,@1409,@3015,@1445,@1453,@3004,@1461,@1463,@1465,@2758,@2513,@2513,@1369,@1358|47,0,$2986+78 328,0,@617 393,0,@1361 407,0,@972 441,0,@1551 453,0,I48 468,0,I24 522,0,@1551 578,0,@2987 624,0,@2611 646,0,@2861 719,0,@2988 745,0,1 864,0,@2989 884,0,1 908,0,0 936,0,0 946,0,0 956,0,0 971,0,@193 1173,0,0 1312,0,1 1365,0,@2990 1410,0,@512 1487,0,@2991 1549,0,@2611 1559,0,@2861 1624,0,0 1662,0,0 1687,0,@2992 1721,0,1 1751,0,@617 1785,0,@2993 1801,0,1 1824,0,@617 1913,0,@2994 2093,0,@2995 2233,0,@606 2295,0,@606 2340,0,@606 2422,0,@605 2505,0,@2997 2609,0,@2999 2664,0,@3000 2694,0,@2218 2749,0,1 2841,0,@3001 2895,0,@3002 2928,0,@2218 2963,0,@584 2983,0,0 2993,0,0 3003,0,0 3013,0,9999 3023,0,@193 2987:C3,48|90909090909090483b65187303ff55484989c24c8b4a084c8b421048bb0300000000000000488b4218ff252900000090|@2858,8191,@2855|29,0,1 2988:S48|4964656e746966696572206265666f72652060617327206d757374206e6f74206265206120636f6e7374727563746f72 2989:S41|436f6e7374727563746f72206d757374206265206170706c69656420746f20736f6d657468696e672e 2990:C4,136|90909090909090483b65187303ff55484c8b72085048ff721048bb280af0acaa2a0000498b464848bae8d7edacaa2a0000909090ff15760000004c8b6c24085048b8d00bf0acaa2a0000498b55189090ff124c8b64241048b8b027edacaa2a0000498b1424909090ff124c8b442410488b1c24488b4424084883c418ff2536000000909090909090|@2869,8191,@974,@2002|27,0,@1964 41,0,@972 66,0,@1971 89,0,@257 2991:C3,48|90909090909090483b65187303ff55484989c24c8b4a084c8b421048bb0300000000000000488b4218ff252900000090|@2858,8191,@2855|29,0,1 2992:S21|206973206e6f74206120636f6e7374727563746f72 2993:S46|436f6e7374727563746f7220696e2061207061747465726e20776173206e6f7420616e206964656e746966696572 2994:C4,136|90909090909090483b65187303ff55484c8b72085048ff721048bb280af0acaa2a0000498b464848bae8d7edacaa2a0000909090ff15760000004c8b6c24085048b8d00bf0acaa2a0000498b55189090ff124c8b64241048b8b027edacaa2a0000498b1424909090ff124c8b442410488b1c24488b4424084883c418ff2536000000909090909090|@2869,8191,@974,@2002|27,0,@1964 41,0,@972 66,0,@1971 89,0,@257 2995:C3,48|90909090909090483b65187303ff55484989c24c8b4a084c8b421048bb0300000000000000488b4218ff252900000090|@2996,8191,@2855|29,0,1 2996:S64|50415253455f5452454528292e706173733228362961737369676e56616c75657328362970726f636573735061747465726e283629706174547970652d283129 2997:C3,144|90909090909090483b65187303ff55484c8b72204d8d7fd84c3b7d107303ff554049c747f8040000004d89fd49bc40d4f2acaa2a00004d8965004c8b62104d8965184c8b5a184d895d104c8b52084d89550849b9008eeeacaa2a00004c8b04244c890c24495549bad8fef1acaa2a000049b9f8fef1acaa2a00004c89c74d8b4660498b5e4057ff252c00000090909090|@2891,8191,@2634|46,0,@2998 84,0,@1418 104,0,@2702 114,0,@2703 2998:C3,48|90909090909090483b65187303ff55484989c24c8b4a084c8b421048bb0300000000000000488b4218ff252900000090|@2858,8191,@2855|29,0,1 2999:C4,136|90909090909090483b65187303ff55484c8b72085048ff721048bb280af0acaa2a0000498b464848bae8d7edacaa2a0000909090ff15760000004c8b6c24085048b8d00bf0acaa2a0000498b55189090ff124c8b64241048b8b027edacaa2a0000498b1424909090ff124c8b442410488b1c24488b4424084883c418ff2536000000909090909090|@2869,8191,@974,@2002|27,0,@1964 41,0,@972 66,0,@1971 89,0,@257 3000:C3,80|90909090909090483b65187303ff55484c8b72184c8b2c244c89342448ff721048ff72084c8b50104c8b480849b8e836eeacaa2a0000488b1848b84086f2acaa2a00004955ff252d0000009090909090|@2874,8191,@2507|46,0,@1202 59,0,@2873 3001:C4,136|90909090909090483b65187303ff55484c8b72085048ff721048bb280af0acaa2a0000498b464848bae8d7edacaa2a0000909090ff15760000004c8b6c24085048b8d00bf0acaa2a0000498b55189090ff124c8b64241048b8b027edacaa2a0000498b1424909090ff124c8b442410488b1c24488b4424084883c418ff2536000000909090909090|@2869,8191,@974,@2002|27,0,@1964 41,0,@972 66,0,@1971 89,0,@257 3002:C3,80|90909090909090483b65187303ff55484c8b72184c8b2c244c89342448ff721048ff72084c8b50104c8b480849b8e836eeacaa2a0000488b1848b84086f2acaa2a00004955ff252d0000009090909090|@2874,8191,@2507|46,0,@1202 59,0,@2873 3003:S69|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c4465636c61726174696f6e2834296d617050726f63657373283229 3004:C5,168|90909090909090483b65187303ff554850504989d44989c34989e2495249ba010000000000000049b9010000000000000049b8010000000000000048bb1f4e00000000000048b8e005edacaa2a000090ff157a0000004d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b0c244c89084c8b4424084c8940089090ff15520000004954504c89d8488d542420909090ff1546000000488b04244883c420c39090909090|@3020,8191,@1369,@1358,@3017|31,0,0 41,0,0 51,0,0 61,0,9999 71,0,@193 3005:S53|50415253455f5452454528292e706173733228362961737369676e56616c75657328362970726f636573735061747465726e283629 3006:C2,88|4d8d7fe04c3b7d107303ff554049c747f8030000004d89fe4d894e104d89460849c706030000004d8d7fd84c3b7d107303ff554049c747f8040000004d89f9498959184d89711049c74108ffffffff4989014c89c8c39090|@3007,4297| 3007:S27|5354525543545f56414c5328292e6d616b654c6f63616c56283429 3008:C6,424|90909090909090483b65187303ff5548505349504951495248bb686feeacaa2a0000498b404848bae8d7edacaa2a0000ff159a0100004883f801740f48b801000000000000004883c428c348bb4806edacaa2a0000488b44242048bab018600000000000ff124883f8017402eb6c48bba03eedacaa2a0000488b44242048bab01860000000000090ff124883f8017402eb7048bb68adedacaa2a0000488b44242048bab01860000000000090ff124883f8017402eb7648bb60a6edacaa2a0000488b44242048bab01860000000000090ff124883f8017407eb57e96300000048bb2019f2acaa2a0000488b44242048bab018600000000000ff124883f8017407eb40e93b0000004c8b34244983fe01747248bb7060efacaa2a0000488b44242048bab018600000000000eb0ae911000000e90c0000009090ff124883f8017502eb55488b5c242048b8c8dbf2acaa2a0000909090ff157e00000048bbf8dbf2acaa2a0000ff15760000004989c24c8b4c24084c8b44241848bb0300000000000000eb05e90f000000488b4424104883c428ff255100000048b801000000000000004883c428c39090|@3011,8191,@974,@303,@303,@2855|26,0,@1361 40,0,@972 62,0,0 77,0,@197 92,0,I24 112,0,@284 127,0,I24 148,0,@669 163,0,I24 184,0,@616 199,0,I24 225,0,@2730 240,0,I24 275,0,@1709 290,0,I24 329,0,@3009 348,0,@3010 377,0,1 409,0,0 3009:S25|526562696e64696e67206f722073706563696679696e672022 3010:S12|2220697320696c6c6567616c 3011:S39|50415253455f5452454528292e7061737332283629636865636b466f724275696c74496e283529 3012:C2,72|90909090909090483b65187303ff5548488b1848b860efeeacaa2a000048bab01860000000000090ff124883f801740b48b80300000000000000c348b80100000000000000c39090|@3013,63|21,0,@1552 31,0,I24 50,0,1 61,0,0 3013:S33|5354525543545f56414c5328292e6973556e646566696e656456616c7565283129 3014:C3,136|90909090909090483b65187303ff55484883f801750b48b80100000000000000c35248ff700848ff304c8b52d04c8b4ad84c8b42e0488b5ae8488b42f0488b52f8909090ff156600000050488b442408488b542410e8adffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fe498946084c8b2c244d892e4c89f04883c418c3909090|@417,8191,@2986|24,0,0 3015:C4,208|90909090909090483b65187303ff55484883f801750b48b80100000000000000c34c8b305249ff3648ff700849ff76084c8b52d04c8b4ad84c8b42e0488b5ae8488b42f0488b52f8ff15aa00000050504989e04889c3488b44241890ff159e0000004d8d7fe84c3b7d107303ff554049c747f8020000004d89fd4c8b24244d8965004c8b5c24084d895d084955488b442418488b5424289090e869ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fa498942084c8b0c244d890a4c89d04883c430c390909090909090|@3016,8191,@2986,@1436|24,0,0 3016:S65|50415253455f5452454528292e706173733228362961737369676e56616c75657328362970726f636573735061747465726e2836296d61704c6162656c73283129 3017:C4,248|90909090909090483b65187303ff55484883f801750b48b80100000000000000c34c8b72e85248ff700848ff304d8b56d04d8b4ed84d8b46e0498b5ee8498b46f0498b56f8909090ff15d20000004c8b6c24084d8b65e84d8b5c24f84d8b53f84d8d7fe04c3b7d107303ff554049c747f8030000004d89f949b880e0f2acaa2a00004d8901498b7c240849897910498b72f8498971084d8d7fd84c3b7d107303ff554049c747f8040000004c89fb48ba50e1f2acaa2a000048891348897318498b4c24f048894b104c894b084989d949b848bff0acaa2a0000498b5de0909090ff1542000000488b0424488b5424084883c410e90fffffff|@3021,8191,@2986,@2513|24,0,0 122,0,@3018 176,0,@3019 209,0,@2218 3018:C4,136|90909090909090483b65187303ff55484c8b72085048ff721048bb280af0acaa2a0000498b464848bae8d7edacaa2a0000909090ff15760000004c8b6c24085048b8d00bf0acaa2a0000498b55189090ff124c8b64241048b8b027edacaa2a0000498b1424909090ff124c8b442410488b1c24488b4424084883c418ff2536000000909090909090|@2869,8191,@974,@2002|27,0,@1964 41,0,@972 66,0,@1971 89,0,@257 3019:C3,80|90909090909090483b65187303ff55484c8b72184c8b2c244c89342448ff721048ff72084c8b50104c8b480849b8e836eeacaa2a0000488b1848b84086f2acaa2a00004955ff252d0000009090909090|@2874,8191,@2507|46,0,@1202 59,0,@2873 3020:S67|50415253455f5452454528292e706173733228362961737369676e56616c75657328362970726f636573735061747465726e28362970726f636573734c697374283129 3021:S79|50415253455f5452454528292e706173733228362961737369676e56616c75657328362970726f636573735061747465726e28362970726f636573734c6973742831296170706c794c697374283129 3022:C5,800|90909090909090483b65187303ff55484883fb01752a4983f801750b48b80100000000000000c348b808e6f2acaa2a00009090ff555848b801000000000000004c8b334983fe017510488b5b0848b80300000000000000ebae49f7c00100000075704883f80174414c8b62f84d8b5c24e84d8d7fe04c3b7d107303ff554049c747f8030000004d89fd49ba60e6f2acaa2a00004d8955004c8b52b04d8955104d8b4b304d894d08eb0d4c8b6af84d8b65e84d8b6c24304c8b5af84d8b53e84c8b4ae04c8b62e84d8d7fd84c3b7d10730aeb05e92f020000ff554049c747f8040000004c89ff48bed0e6f2acaa2a0000488937498b710848897718498b4c240848894f104d8b5a584c895f084c8b4af8498b71e84d8d7f904c3b7d107303ff554049c747f80d0000004c89f94d8b62604c89616048897958498b7a50488979504c8b66484c896148498b7a4048897940488b7e38488979384c8969304d8b6a284c8969284d8b6a204c8969204c8b6e184c8969184c8b5e104c8959104c8b56084c8951084c8b0e4c89094c8b5af8525049ff760849ff761048ff730849ff3049ff700848ff72d04d8b53e04c8b4c24204989c8488b5c2428488b442428498b53f8ff15820100004c8b5424304d8b4af84d8b41f84d8d7fe04c3b7d107303ff554049c747f8030000004c89ff48be60e7f2acaa2a0000488937498b59f048895f10498b50f8488957084d8d7fd84c3b7d107303ff554049c747f8040000004c89f949be30e8f2acaa2a00004c8931488951184c8b6c24184c896910488979084989c949b848bff0acaa2a00004889c3488b44240890ff15f60000004c8b6424284983fc0174754c8b5c24204d8b0b4983f9fb75194d8b5b10483b65187303ff5548ebe849ba01000000000000004983f90d750c49ba0300000000000000eb0a49ba01000000000000004983fa01753c4c8b442430498b78f8488b77f849bac0e8f2acaa2a00004c8b4c24184c8b47f048bb0300000000000000eb05e90b000000488b46f890ff156e0000004c8b0424488b5c2410488b442428488b5424304883c438e901fdffff48b808e6f2acaa2a0000909090ff555848b80100000000000000|@3030,8191,@2849,@2513,@2855|30,0,0 41,0,@3023 56,0,0 79,0,1 139,0,@3025 231,0,@3026 493,0,@3027 546,0,@3028 579,0,@2218 644,0,0 660,0,1 672,0,0 701,0,@3029 720,0,1 776,0,@3023 792,0,0 3023:O3|@7377,@215,@3024 3024:S35|636865636b54797065733a206261646c792d666f726d65642070617273652d74726565 3025:C2,56|90909090909090483b65187303ff55485250488b52109090ff124883f80175134c8b742408488b0424498b56084883c410ff224883c410c3|@1306,8191| 3026:C2,88|90909090909090483b65187303ff55485250488b52189090ff124883f80175304c8b742408488b0424498b5610909090ff124883f80175134c8b6c2408488b0424498b55084883c410ff224883c410c34883c410c3909090|@1306,8191| 3027:C4,136|90909090909090483b65187303ff55484c8b72085048ff721048bb280af0acaa2a0000498b464848bae8d7edacaa2a0000909090ff15760000004c8b6c24085048b8d00bf0acaa2a0000498b55189090ff124c8b64241048b8b027edacaa2a0000498b1424909090ff124c8b442410488b1c24488b4424084883c418ff2536000000909090909090|@2869,8191,@974,@2002|27,0,@1964 41,0,@972 66,0,@1971 89,0,@257 3028:C3,80|90909090909090483b65187303ff55484c8b72184c8b2c244c89342448ff721048ff72084c8b50104c8b480849b8e836eeacaa2a0000488b1848b84086f2acaa2a00004955ff252d0000009090909090|@2874,8191,@2507|46,0,@1202 59,0,@2873 3029:S51|526563757273697665206465636c61726174696f6e206973206e6f74206f662074686520666f726d2060666e206d6174636827 3030:S69|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c4465636c61726174696f6e283429636865636b5479706573283329 3031:C3,160|90909090909090483b65187303ff55484d8d7fe04c3b7d107303ff554049c747f8030000004d89fe49bd40eaf2acaa2a00004d892e49895e104d8946084989c44d8d7fe84c3b7d107303ff554049c747f8020000004c89f849bb88ecf2acaa2a00004c89184c897008909090ff15560000004989c24c89e04c89d290ff124989c148b803000000000000004c89ca9090ff1248b80100000000000000c3909090|@3060,8191,@2550|42,0,@3032 90,0,@3037 131,0,1 148,0,0 3032:C10,232|90909090909090483b65187303ff55484989d54989c44889d8909090ff15ee0000004883f80174714d89eb4d89e24889d8909090ff15de0000004983fa01742d488b58104889d890ff15d20000009090ff15d2000000498b5310504823c2a801587503ff5570483bc27e62eb06488b5810eb5a4889d89090ff15b20000009090ff15b200000049ff73084889c348b8a0ebf2acaa2a0000eb05e93a0000009090ff159a00000048bb5300000000000000ff1592000000488b14249090ff1248b801000000000000004883c408c348b80300000000000000c348b80300000000000000c39090909090|@3035,8191,@2062,@2063,@2064,@3034,@2064,@2066,@303,@303|143,0,@3033 168,0,41 192,0,0 207,0,1 218,0,1 3033:S30|5479706520636f6e7461696e73206c6f63616c2064617461747970652028 3034:C2,8|488b4010c3909090|@3036,1| 3035:S50|545950455f5452454528292e636865636b466f724c6f63616c446174617479706573283329636865636b5479706573283229 3036:S27|5354525543545f56414c5328292e74634c65744465707468283129 3037:C2,56|4989c64d8d7fe04c3b7d107303ff554049c747f8030000004c89f849bdf8ecf2acaa2a00004c89284c8b6a084c8968104c897008c3909090|@3040,6149|29,0,@3038 3038:C2,32|90909090909090483b65187303ff5548488b5a08488b5210ff22909090909090|@3039,8191| 3039:S53|545950455f5452454528292e636865636b466f724c6f63616c446174617479706573283329636865636b5479706573283129283129 3040:S50|545950455f5452454528292e636865636b466f724c6f63616c446174617479706573283329636865636b5479706573283129 3041:S67|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c4465636c61726174696f6e283429616c6c6f7747656e283229 3042:C8,1128|90909090909090483b65187303ff55484c8b3049f7c601000000741e4983fee77c1d4983fe1d7f1c49bd82eef2acaa2a00004f8d6cb56441ffe5e9eb000000e9e6000000e9e100000090e9d9030000909090e9d3000000909090e9cb000000909090e9b8010000909090e9bb000000909090e9c9000000909090e9ab000000909090e9a3000000909090e99b000000909090e993000000909090e977010000909090e983000000909090e97b000000909090e973000000909090e9eb020000909090e963000000909090e95b000000909090e953000000909090e94b000000909090e94e000000909090e93b000000909090e9f7010000909090e94c000000909090e923000000909090e91b000000909090e913000000909090e916010000909090e90301000090909048b80100000000000000c348b80300000000000000c348b80300000000000000c34c8b70084983fe01750b48b80300000000000000c34c8b6af84d8b65f84d8b5c24f852495648bb686feeacaa2a0000498b434848bae8d7edacaa2a0000ff15020300004883f801755f4c8b142449b903000000000000004983fa0175084c89c84883c410c34983f901741949ff7208498b02488b542410909090e83dfeffff4989c0eb0e49b8010000000000000049ff72084d89c14c8b14244883c408483b65187303ff5548ebafe90f00000048b801000000000000004883c418c348b801000000000000004883c410c3488b4010e9e8fdffff48b80300000000000000c348b80300000000000000c34c8b62f84d8b5c24f84d8b53f85248ff700848bb686feeacaa2a0000498b424848bae8d7edacaa2a000090ff15320200004883f801755f4c8b0c2449b803000000000000004983f90175084c89c04883c410c34983f801741949ff7108498b01488b542410909090e865fdffff4889c7eb0e48bf010000000000000049ff71084989f84c8b0c244883c408483b65187303ff5548ebafe90f00000048b801000000000000004883c418c348b801000000000000004883c410c34c8b62f84d8b5c24f84d8b53f85248ff701848bb686feeacaa2a0000498b424848bae8d7edacaa2a0000ff15820100004883f80175634c8b0c2449b803000000000000004983f90175084c89c04883c410c3498b394983f801741a49ff7108488b4708488b542410909090e8a9fcffff4889c6eb0e48be010000000000000049ff71084989f04c8b0c244883c408483b65187303ff5548ebabe90f00000048b801000000000000004883c418c348b801000000000000004883c410c34c8b62f84d8b5c24f84d8b53f85248ff700848ff701048bb686feeacaa2a0000498b424848bae8d7edacaa2a0000ff15ca0000004883f8017535488b442408909090ff15be0000004883f8017412488b0424488b5424104883c418e9fdfbffff48b801000000000000004883c418c348b801000000000000004883c418c34c8b62f84d8b5c24f84d8b53f848bb686feeacaa2a0000498b424848bae8d7edacaa2a0000909090ff15620000004989c14983f1024c89c8c390909090909090|@3044,8191,@974,@974,@974,@974,@3043,@974|42,0,$3042+74 300,0,0 311,0,1 322,0,1 343,0,1 370,0,@1361 384,0,@972 410,0,1 465,0,0 506,0,0 521,0,0 545,0,1 556,0,1 585,0,@1361 599,0,@972 626,0,1 681,0,0 722,0,0 737,0,0 770,0,@1361 784,0,@972 810,0,1 869,0,0 910,0,0 925,0,0 962,0,@1361 976,0,@972 1036,0,0 1051,0,0 1079,0,@1361 1093,0,@972 3043:C3,128|90909090909090483b65187303ff55484c8b304983fef1754b4c8b68104d8b65004c8b58084c89e0ff157a0000004883f801742548bb2019f2acaa2a00004c89d848bab01860000000000090ff124889c74883f7024889f8c348b80100000000000000c34983fefb7506488b4010eb9748b80100000000000000c39090909090|@3045,7743,@2401|54,0,@2730 67,0,I24 91,0,0 114,0,0 3044:S71|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c4465636c61726174696f6e2834296e6f6e457870616e73697665283129 3045:S78|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c4465636c61726174696f6e28342969734e6f6e526566436f6e7374727563746f72283129 3046:C3,224|90909090909090483b65187303ff55484d8d7fd04c3b7d107303ff554049c747f8050000004d89fe49bda0f5f2acaa2a00004d892e4d8956204d894e18498946104c8b5424084d8956084d8d7fd04c3b7d107303ff554049c747f8050000004d89fd49bc80f8f2acaa2a00004d8965004d89452049895d184d894d104d8975084989c34d8d7fe84c3b7d107303ff554049c747f8020000004c89f849b968fdf2acaa2a00004c89084c896808ff15560000004989c04c89d84c89c290ff124889c748b803000000000000004889fa9090ff1248b80100000000000000c2080090|@3059,8191,@2550|42,0,@3047 100,0,@3051 157,0,@3055 195,0,1 212,0,0 3047:C3,160|90909090909090483b65187303ff55484d8d7fc84c3b7d107303ff554049c747f8060000004d89fe49bd80f6f2acaa2a00004d892e4c8b6a184d896e2849894620488b42104989461849895e10488b5a0849895e08498b4d104c8b242448890c2449ff751849ff752049ff752849ff753049ff753849ff754049ff75484d8b55084d8b4d0049b80300000000000000488b5a204c89f04954ff252a0000009090|@3050,8191,@1124|42,0,@3048 135,0,1 3048:C5,296|90909090909090483b65187303ff55484989d34989c248b80100000000000000ff152a010000498b5328495349525048bb280af0acaa2a0000488b424848bae8d7edacaa2a000090ff150a010000488b4c24085048b8f83cedacaa2a0000488b51309090ff12488b4424104c8b7424184c8b6818498b46204c89ea90ff124c8b64241048b8b027edacaa2a0000498b1424909090ff124c8b5c241849ba03000000000000004c8b4c24084c8b442410488b1c24498b431890ff15a20000004c8b54241048b8b027edacaa2a0000498b12ff124c8b4c24104c8b442418498b4010498b5118ff12488b7c241048b8b027edacaa2a0000488b17ff12488b742418488b442410488b5608ff12488b5c241048b80100000000000000488b53104883c420ff229090909090|@3049,8191,@2017,@974,@2013|24,0,0 49,0,@1964 63,0,@972 86,0,@267 133,0,@257 157,0,1 197,0,@257 237,0,@257 273,0,0 3049:S49|545950455f5452454528292e616c6c6f7747656e6572616c69736174696f6e283629676976654572726f72283229283129 3050:S46|545950455f5452454528292e616c6c6f7747656e6572616c69736174696f6e283629676976654572726f72283229 3051:C23,864|90909090909090483b65187303ff55484989d54989c44889d8909090ff15660300004883f80174724d89eb4889d89090ff155a0300004989c6498b5e08498b06ff15520300004d8b6b18504923c5a801587503ff5570493bc57c5b498b5e08498b069090ff15360300004881f81f4e00007476498b5e08498b069090ff15260300004c89f34889c14889c890ff151e0300004883f8017423eb05e9bb0200004889c89090ff150e03000048b80300000000000000eb0fe99b02000048b801000000000000004d8b731049534954535048bb686feeacaa2a0000498b464848bae8d7edacaa2a0000eb05e9680200009090ff15ca0200004c8b6c24184d8b65204983fc0175314c8b5c24084989c2498b5b08498b03ff15ae0200004883f8017402eb084983fa017402eb0c49b90300000000000000eb044c8b0c244983f90174184d8b551841f6c2017503ff55704d89d34983eb0270f4eb0a49bb1f4e0000000000004d8b55104951495348bb686feeacaa2a0000498b424848bae8d7edacaa2a00009090ff15460200004c8b4c24184989c0498b5908498b01909090ff15360200004883f8017442488b7c24084883ff017437488b7424204883fe01742c488b54242848bbc0fcf2acaa2a000048b890f3f1acaa2a0000488b520890ff1248bb0100000000000000eb59488b3c244883ff03754a488b7424204883fe01743f4983f8017439488b5c24104883fb01752e488b54242848bbf0fcf2acaa2a000048b890f3f1acaa2a0000488b5208909090ff1248bb0100000000000000eb05488b5c2420488b7424184889d9488b5e08488b069090ff15860100004c8b7424084983fe0174164989c4488b5e08488b0690ff15720100004989c5eb0d49bd01000000000000004989c4488b5e08488b0690ff155a01000050504989e349534989c24d89e94d89e0488b5c241848b8e005edacaa2a0000909090ff153a0100004d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b14244c89104c8b4c24084c8948089090ff15120100004989c04c89c0ff150e0100004883f801740f4c89c090ff15060100004889c7eb1948b8b0d7edacaa2a00009090ff555848bf0100000000000000488b5e08488b0690ff15e20000004889c34889f8ff15de0000004c89c34889f0ff15da0000004889c84883c440c34c89e0c34c89e0c39090|@3054,8191,@1458,@1459,@2057,@2057,@2044,@2060,@2042,@974,@2055,@974,@2525,@2024,@2525,@2055,@1369,@1358,@1458,@1459,@2044,@1454,@1454|172,0,1 189,0,0 209,0,@1361 223,0,@972 300,0,1 346,0,9999 364,0,@1361 378,0,@972 453,0,@3052 463,0,@2686 480,0,0 535,0,@3053 545,0,@2686 564,0,0 637,0,0 685,0,@193 785,0,@970 800,0,0 3052:S29|696e636c75646573206120667265652074797065207661726961626c65 3053:S40|696e636c756465732061206672656520696d70657261746976652074797065207661726961626c65 3054:S44|545950455f5452454528292e616c6c6f7747656e6572616c69736174696f6e28362967656e6572616c283229 3055:C2,56|4989c64d8d7fe04c3b7d107303ff554049c747f8030000004c89f849bdd8fdf2acaa2a00004c89284c8b6a084c8968104c897008c3909090|@3058,6149|29,0,@3056 3056:C2,32|90909090909090483b65187303ff5548488b5a08488b5210ff22909090909090|@3057,8191| 3057:S47|545950455f5452454528292e616c6c6f7747656e6572616c69736174696f6e28362967656e6572616c283129283129 3058:S44|545950455f5452454528292e616c6c6f7747656e6572616c69736174696f6e28362967656e6572616c283129 3059:S34|545950455f5452454528292e616c6c6f7747656e6572616c69736174696f6e283629 3060:S37|545950455f5452454528292e636865636b466f724c6f63616c446174617479706573283329 3061:C5,520|90909090909090483b65187303ff55484c8b720841f6c6017503ff55704d89f54983c50270f44989c44d8d7fe84c3b7d107303ff554049c747f8020000004c89f849bb7801f3acaa2a00004c89184c8968085249545349504955488b13909090ff124c8b5424184c8b4c24204d8d7fe04c3b7d107303ff554049c747f8030000004c89f849b82802f3acaa2a00004c8900498b79e848897810488b342448897008498b12ff12488b5c2420488b53f84d8d7fd84c3b7d107303ff554049c747f8040000004c89f948b82003f3acaa2a00004889014c8b72f84c8971184c8b6bf04c8969104c8b63d84c8961085050504889e34889c8909090ff15320100004c8b5c24204983fb01750c49ba0100000000000000eb3249ff7308498b03488d542448909090ff150e0100004c8b1c244883c408483b65187303ff5548ebc649ba01000000000000004c8b4c24204983f901750c49b80100000000000000eb3149ff7108498b01488d5424489090ff15ce0000004c8b0c244883c408483b65187303ff5548ebc749b80100000000000000488b7c2438488b77f84d8d7fc04c3b7d107303ff554049c747f8070000004c89f848bb1004f3acaa2a0000488918488b54241848895030488b4fe0488948284c8b77f04c8970204c8b6ef84c8968184c8b67d84c8960104c8b5fe84c895808488b14249090ff1248b878a6edacaa2a00004883c440c3909090|@3072,8191,@2328,@3073,@3071|67,0,@3062 134,0,@3064 201,0,@3066 267,0,0 319,0,0 340,0,0 391,0,0 434,0,@3068 504,0,@617 3062:C3,32|90909090909090483b65187303ff5548488b5a08488b4008ff252a0000009090|@3063,8191,@2966| 3063:S61|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737346756e4465636c61726174696f6e283329552d283129 3064:C4,88|90909090909090483b65187303ff55484c8b72105248ff7008488b00498b5658ff1248f7c0010000007511488b1c24488b004883c410ff25440000004c8b6c2408498b5d08488b04244883c410ff25350000009090909090|@3065,8191,@2970,@2966| 3065:S69|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737346756e4465636c61726174696f6e2833293c7061747465726e3e2d283129 3066:C4,88|90909090909090483b65187303ff554848ff721848ff721048ff720848bbf005f0acaa2a00009090ff15520000004989c24c8b0c244c8b44240848bb0300000000000000488b4424104883c418ff25350000009090909090|@3067,8191,@303,@2855|30,0,@1955 60,0,1 3067:S64|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737346756e4465636c61726174696f6e2833296d7367466e283129 3068:C5,232|90909090909090483b65187303ff55484989d64989c5498b45089090ff15ee0000004d8d7fe04c3b7d107303ff554049c747f8030000004c89fa48b94805f3acaa2a000048890a498b4e2048894a104d8b66184c8962084956495550524d8b56104d89e149b80300000000000000498b5e309090ff159e0000004c8b5c24104d8d7fd84c3b7d107303ff554049c747f8040000004d89fa49b91806f3acaa2a00004d890a4d8b43184d894218498b7b2049897a10498b7310498972084d89d0498b5b28488b042490ff1552000000488b5c2410488b5308488b442408488b52104883c418ff229090|@3063,8191,@2277,@3046,@3031|60,0,@3069 102,0,1 153,0,@3070 3069:C4,136|90909090909090483b65187303ff55484c8b72085048ff721048bb280af0acaa2a0000498b464848bae8d7edacaa2a0000909090ff15760000004c8b6c24085048b8d00bf0acaa2a0000498b55189090ff124c8b64241048b8b027edacaa2a0000498b1424909090ff124c8b442410488b1c24488b4424084883c418ff2536000000909090909090|@2869,8191,@974,@2002|27,0,@1964 41,0,@972 66,0,@1971 89,0,@257 3070:C3,48|90909090909090483b65187303ff55484989c24c8b4a084c8b421048bb0300000000000000488b4218ff252900000090|@2858,8191,@2855|29,0,1 3071:C3,120|90909090909090483b65187303ff55484c8b70104d8b2e5248ff702048ff3048ff701849554c8b60084983fc01750f48b801000000000000004883c428c349ff742408498b0424488d542430ff154e0000004c8b24244883c408483b65187303ff5548ebc448b801000000000000004883c430c390909090|@3091,8191,@3083|49,0,0 103,0,0 3072:S56|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737346756e4465636c61726174696f6e283329 3073:C14,960|90909090909090483b65187303ff55484c8b700849f7c601000000755d4d8b2e5249ff750049ff751048ff701048ff70184c8b642418498b14244883fafb751a4d8b642410483b65187303ff5548ebe649bb01000000000000004883fa03751f4d8b642408483b65187303ff5548ebc649bb0100000000000000e9240300004883faf175074d8b5c2408eb0a49bbb01e6000000000004953488b44242048bae00bf3acaa2a000090ff12488b4c242850504989c44989e3495349ba010000000000000049b9010000000000000049b80100000000000000488b59d848b8e005edacaa2a0000909090ff15fa0200004d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b14244c89104c8b4c24084c8948089090ff15d20200004d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89f849c700010000004d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89ff48c707010000004989f94889c3488b442410909090ff157e020000488b7424184c89264983fc017537488b51f84c8b72f85049bad00cf3acaa2a00004c8b4c24304c8b42f048bb0300000000000000498b46f89090ff15460200004889c3eb0b48bb01000000000000005048bbb01e600000000000488b44241848bab01860000000000090ff124883f801756a488b542440488b4af8488b41f84c8b442430488b58f8488b44241890ff15fa0100004c8b7424404d8b6ef84d8b65f849ba01000000000000004c8b4c24304d8b4424f8498b5df0488b442418ff15d20100004c8b5c24404d8b53f84d8b4ae8488b442418498b5130eb05e93901000090ff1248f7c00100000075054c8b00eb0a49b838efeeacaa2a0000488b7c2440488b77f8488b5ef8488b53f8495048bb686feeacaa2a0000488b424848bae8d7edacaa2a0000909090ff156e0100004883f8017476488b0424ff15660100004883f801746b488b4424484c8b70f84d8b6ef849ff75f849ff76f048bb28e3edacaa2a0000488b442430ff153e0100004889c348b8100df3acaa2a000090ff153201000048bb300df3acaa2a0000ff152a0100004989c24c8b4c24484c8b042448bb0300000000000000eb0ae918000000e913000000488b442408909090ff15020100004889c1eb0c48b901000000000000005050488b4c2440488b4424184889014c8b7424584d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b6c24184c8968084c8b6424304c8920498b56c84883c460ff2248b801000000000000004883c448c348b8680df3acaa2a00009090ff555848b8010000000000000090909090|@3082,8191,@1369,@1358,@3006,@2855,@1493,@3008,@974,@2401,@1061,@303,@303,@2855|82,0,0 114,0,0 142,0,I48 159,0,@3074 187,0,0 197,0,0 207,0,0 221,0,@193 403,0,@3077 422,0,1 449,0,0 460,0,I48 475,0,I24 541,0,0 622,0,@1551 651,0,@1361 665,0,@972 727,0,@1042 751,0,@3078 768,0,@3079 796,0,1 837,0,0 918,0,0 933,0,@3080 948,0,0 3074:O1|@3075 3075:C2,80|90909090909090483b65187303ff55484c8b304983fefb7506488b4010ebe84983fe03751d488b4008e8d9ffffffa8017503ff55704989c64983c60270f44c89f0c348b80100000000000000c3909090|@3076,4097|68,0,0 3076:S67|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737346756e4465636c61726174696f6e2833296765744172697479283129 3077:S46|436c617573616c2066756e6374696f6e20646f6573206e6f74206861766520616e7920706172616d65746572732e 3078:S9|5661726961626c6520 3079:S34|20616c7265616479206465636c61726564206173206120636f6e7374727563746f72 3080:O3|@7377,@215,@3081 3081:S41|66696e644e616d65416e6450617474733a206261646c792d666f726d65642070617273652d74726565 3082:S75|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737346756e4465636c61726174696f6e28332966696e644e616d65416e645061747473283129 3083:C7,848|90909090909090483b65187303ff55484c8b72f84d8b6ef84d8b65f84d8d7fd84c3b7d107303ff554049c747f8040000004d89fb49bad811f3acaa2a00004d89134d8b5424f84d8953184c8b084d894b104c8b40104d8943085050504889d7488b70084889e34c89d8909090ff1506030000488b5ff8488b53d8f6c2017503ff55704889d04883c00270f45749514950504c8b77e04d8b2e5050564c8d4424084c89cb4c89e8488d54245090ff15ce0200004c8b6424304c8b5424104983fa01750c49bb78a6edacaa2a0000eb5d4d8b4a084983f90175054d8b1aeb5d49ff7424e849b801000000000000004983fa0175054c89c0eb484d8d7fe84c3b7d107303ff554049c747f8020000004c89ff4c894708498b324889374989f84d8b5208483b65187303ff5548ebc1e92200000048b80100000000000000e90c00000090ff15420200004989c3eb0c49ff7424e8eb0549ff7424e84c8b0c244d89194c8b442438498b78f8488b77f8488b5ee84d8d7fd84c3b7d107303ff554049c747f8040000004c89fa48b92013f3acaa2a000048890a488b442450488942184c8b77d04c8972104c8b6b304c896a084c8b67e84c8b5ff04d8d7fd84c3b7d107303ff554049c747f8040000004d89fa49b9b013f3acaa2a00004d890a498b4c240849894a18498b4308498942104c8b4b584d894a084d8d7f904c3b7d107303ff554049c747f80d0000004d89f84c8b73604d8970604d8950584c8b53504d895050488b7348498970484c8b6b404d8968404c8b6b384d89683849895030488b5328498950284c8b73204d8970204c8b73184d897018488b5310498950104c8b53084d895008488b0b4989084c8b642438498b7c24f8488b47f848ff7424204c8b50e04c8b4c2430488b5c2410488b4424104c8b7424404d8b6ef84d8b5df8498b53f8ff15ea0000004c8b5424384d8b4af04989014d8b42f8498b78f8488b77f84d8d7fe04c3b7d107303ff554049c747f8030000004c89fb48ba4014f3acaa2a0000488913488b4c243048894b104c8b76f84c8973084d8d7fd84c3b7d107303ff554049c747f8040000004d89fd49bc1015f3acaa2a00004d8965004d8975184c8b5c24284d895d1049895d084d89e949b848bff0acaa2a00004889c3488b4424104883c458ff254e000000909090909090|@3103,8191,@2328,@3092,@1409,@2849,@2513|54,0,@3084 196,0,@617 228,0,0 306,0,0 393,0,@3087 463,0,@3088 728,0,@3089 782,0,@3090 816,0,@2218 3084:C4,88|90909090909090483b65187303ff554848ff721848ff721048ff720848bb7812f3acaa2a00009090ff15520000004989c24c8b0c244c8b44240848bb0300000000000000488b4424104883c418ff25350000009090909090|@3086,8191,@303,@2855|30,0,@3085 60,0,1 3085:S39|2068617320616c7265616479206265656e20626f756e6420696e207468697320636c617573652e 3086:S94|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737346756e4465636c61726174696f6e28332970726f6365737346756e28312970726f63657373436c617573652831296d657373466e283129 3087:C2,88|90909090909090483b65187303ff55485250488b52189090ff124883f80175304c8b742408488b0424498b5610909090ff124883f80175134c8b6c2408488b0424498b55084883c410ff224883c410c34883c410c3909090|@1306,8191| 3088:C2,88|90909090909090483b65187303ff55485250488b52189090ff124883f80175304c8b742408488b0424498b5610909090ff124883f80175134c8b6c2408488b0424498b55084883c410ff224883c410c34883c410c3909090|@1306,8191| 3089:C4,136|90909090909090483b65187303ff55484c8b72085048ff721048bb280af0acaa2a0000498b464848bae8d7edacaa2a0000909090ff15760000004c8b6c24085048b8d00bf0acaa2a0000498b55189090ff124c8b64241048b8b027edacaa2a0000498b1424909090ff124c8b442410488b1c24488b4424084883c418ff2536000000909090909090|@2869,8191,@974,@2002|27,0,@1964 41,0,@972 66,0,@1971 89,0,@257 3090:C3,80|90909090909090483b65187303ff55484c8b72184c8b2c244c89342448ff721048ff72084c8b50104c8b480849b8e836eeacaa2a0000488b1848b84086f2acaa2a00004955ff252d0000009090909090|@2874,8191,@2507|46,0,@1202 59,0,@2873 3091:S69|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737346756e4465636c61726174696f6e28332970726f6365737346756e283129 3092:C15,1184|90909090909090483b65187303ff55484c8b334983fefb756f50505253495048ff73084c8d442420488b5b1090e8d5ffffff4c8b442418498b58e0488b53f8488b42f84c8b70f84d8d7fd04c3b7d107303ff554049c747f8050000004d89fd49bc381bf3acaa2a00004d8965004c8b60e84d8965204c8b5c24104d895d184d8b5ef84d895d10eb05e9de0000004d8b50d04d8955084d89d14d89d84c89eb488b04249090ff151e0400004c8b4c24184d8b41e0498b78f8488b77f8488b5ef84d8d7fe04c3b7d107303ff554049c747f8030000004c89fa48b9781cf3acaa2a000048890a498b41d8488942104c8b73f84c8972084d8d7fd84c3b7d107303ff554049c747f8040000004d89fd49bc481df3acaa2a00004d8965004d8975184d8b59d04d895d10498955084d89e949b848bff0acaa2a0000488b1c24488b442420ff158a0300004c8b5424084c8b4c24204d890a4c8b4424284d89420848b801000000000000004883c430c34983fe03756fa8017503ff55704989c54983ed0270f4505052495048ff73104c8d442418488b5b084c89e8909090e869feffff4c8b64241048ff34244d8b5424f04d8b4c24c849b8010000000000000048bb0100000000000000498b4424d04d8b5c24e0498b7bf8488b57f890ff15fa020000eb05e9a8000000488b742410488b5ee0488b53f8488b4af84c8b71f84d8d7fe04c3b7d107303ff554049c747f8030000004d89fd49bcd81df3acaa2a00004d8965004c8b5ed84d895d104d8b56f84d895508504d89ea4c8b4ed04d8b46f84889c3488b442420ff15960200004d8d7fe84c3b7d107303ff554049c747f8020000004d89f94c8b4424284d894108488b3c24498939488b7424104889064c894e0848b801000000000000004883c430c34983fef1756c4c8b6ae04989d44989c3498b45d8909090ff153e0200004c8b53084c8b4b10504889c34c89d048bab01860000000000090ff124883f8017402eb70498b7df8488b77f8488b5ef8495449534950495148ff73f849ff7424d849ff7424d04c89d348b8a81ef3acaa2a0000eb05e909010000ff15e601000048bbe01ef3acaa2a0000ff15de010000488b5c243890ff15da0100004989c24c8b0c244c8b44240848bb0300000000000000eb05e911000000488b442410ff15ba0100004883c418eb0849544953495049514c8b4424104983f8017502eb65488b7c2418488b77e0488b5ef8488b53f8488b4af848ff71f848ff77d848ff77d048bb081ff3acaa2a000048b8381ff3acaa2a00009090ff156a0100004989c24c8b0c244c8b44240848bb0300000000000000488b442410909090ff154e0100004883c418488b4424184c8b70e04c8b2c244d8b66d84d8965004c89e09090ff15320100004c8b5c240849890349c743080100000048b801000000000000004883c428c34983fef7752049bd78a6edacaa2a00004d892849c740080100000048b80100000000000000c34c8b6ae04d8b65f84d8b5c24f84d8b53f849504d8b4af849ba701ff3acaa2a00004c89cf4c8b4ad04989d848bb03000000000000004889f890ff15b6000000488b342448bb78a6edacaa2a000048891e48c746080100000048b801000000000000004883c408c3909090909090|@3104,8191,@2758,@2513,@2986,@2935,@2136,@303,@303,@303,@2855,@303,@2855,@2277,@2855|97,0,@3093 217,0,@3095 270,0,@3096 303,0,@2218 350,0,0 435,0,0 445,0,0 532,0,@3097 640,0,0 699,0,I24 757,0,@3098 780,0,@3099 820,0,1 908,0,@3100 918,0,@3101 948,0,1 1024,0,0 1045,0,@617 1066,0,0 1100,0,@3102 1120,0,1 1144,0,@617 1165,0,0 3093:C3,144|90909090909090483b65187303ff55484c8b72204d8d7fd84c3b7d107303ff554049c747f8040000004d89fd49bc081cf3acaa2a00004d8965004c8b62104d8965184c8b5a184d895d104c8b52084d89550849b9008eeeacaa2a00004c8b04244c890c24495549bad8fef1acaa2a000049b9f8fef1acaa2a00004c89c74d8b4660498b5e4057ff252c00000090909090|@2891,8191,@2634|46,0,@3094 84,0,@1418 104,0,@2702 114,0,@2703 3094:C3,48|90909090909090483b65187303ff55484989c24c8b4a084c8b421048bb0300000000000000488b4218ff252900000090|@2858,8191,@2855|29,0,1 3095:C4,136|90909090909090483b65187303ff55484c8b72085048ff721048bb280af0acaa2a0000498b464848bae8d7edacaa2a0000909090ff15760000004c8b6c24085048b8d00bf0acaa2a0000498b55189090ff124c8b64241048b8b027edacaa2a0000498b1424909090ff124c8b442410488b1c24488b4424084883c418ff2536000000909090909090|@2869,8191,@974,@2002|27,0,@1964 41,0,@972 66,0,@1971 89,0,@257 3096:C3,80|90909090909090483b65187303ff55484c8b72184c8b2c244c89342448ff721048ff72084c8b50104c8b480849b8e836eeacaa2a0000488b1848b84086f2acaa2a00004955ff252d0000009090909090|@2874,8191,@2507|46,0,@1202 59,0,@2873 3097:C4,136|90909090909090483b65187303ff55484c8b72085048ff721048bb280af0acaa2a0000498b464848bae8d7edacaa2a0000909090ff15760000004c8b6c24085048b8d00bf0acaa2a0000498b55189090ff124c8b64241048b8b027edacaa2a0000498b1424909090ff124c8b442410488b1c24488b4424084883c418ff2536000000909090909090|@2869,8191,@974,@2002|27,0,@1964 41,0,@972 66,0,@1971 89,0,@257 3098:S39|496e20636c617573616c2066756e6374696f6e206f6e6520636c6175736520646566696e657320 3099:S21|20616e6420616e6f7468657220646566696e657320 3100:S29|646966666572656e74206e756d62657273206f66207061747465726e73 3101:S39|436c617573616c2066756e6374696f6e20636f6e7461696e7320636c6175736573207769746820 3102:S43|5374617274206f6620636c617573616c2066756e6374696f6e206973206e6f742061207661726961626c65 3103:S85|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737346756e4465636c61726174696f6e28332970726f6365737346756e28312970726f63657373436c61757365283129 3104:S98|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737346756e4465636c61726174696f6e28332970726f6365737346756e28312970726f63657373436c61757365283129646f5061747465726e73283329 3105:C3,208|90909090909090483b65187303ff55484883f801750b48b80100000000000000c34c8b304c8b6af84d8b65e84d8b5df84d8d7fd84c3b7d107303ff554049c747f8040000004d89fa49b9a021f3acaa2a00004d890a4d8b4bf84d894a184c8b42f04d894210498b7dd849897a085248ff70084d89d14d8b06498b5c246048b8e810f1acaa2a000090ff156a00000050488b442408488b542410e869ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fe48894608488b1c2448891e4889f04883c418c390909090909090|@417,8191,@2618|24,0,0 74,0,@3106 127,0,@2349 3106:C3,48|90909090909090483b65187303ff55484989c24c8b4a084c8b421048bb0300000000000000488b4218ff252900000090|@2858,8191,@2855|29,0,1 3107:C6,296|90909090909090483b65187303ff55484989d64989c54c89e8909090ff152e0100004883f801740b48b80100000000000000c34983fd0175534956495548b8150000000000000090ff150a0100004d8d7fd84c3b7d107303ff554049c747f8040000004d89fb49c743180100000049c743100100000049bab01e6000000000004d8953084989034d89dceb084d8b6510495649554c8b5c24084d8b53f84d8d7fd84c3b7d107303ff554049c747f8040000004d89f949b89023f3acaa2a00004d8901498b7bd849897918498b72e849897110488b1c24498959084c89e0909090ff157a0000004d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48b9102cf3acaa2a000048890a4c894a0849b801000000000000004889d34883c410ff25420000009090|@3122,8191,@2631,@1852,@2206,@2285|42,0,0 63,0,10 120,0,I48 183,0,@3108 256,0,@3120 273,0,0 3108:C14,624|90909090909090483b65187303ff55484989d04889c74889d848ba30a7f0acaa2a000090ff156e0200004883f801746c4889d848ba18a7f0acaa2a0000909090ff155a020000498b70104889c34889d8ff15520200004883f80175054889daeb4e4889d8ff15460200004d8d7ff04c3b7d107303ff554049c747f8010000004c89fa498b480848890a5748ff76184989d04989de4889c34c89f0eb05e941000000909090ff150e0200004889c2eb055748ff76184d8d7fe84c3b7d107303ff554049c747f8020000004c89f848895008488b4c2408488908488b14244883c410ff224889d848ba28b5f0acaa2a000090ff15ca0100004883f801746e4889d848ba10b5f0acaa2a0000909090ff15b6010000488b7010488b164883fa01756f488b084c8b70084c8b68184d8d7fe84c3b7d107303ff554049c747f8020000004c89f84d8b60084c8960084c8b5e084c89184d89f24d89e990ff15720100004d8d7fd84c3b7d10730aeb05e976000000ff554049c747f8040000004c89fb4c894b18488943104c89530848890beb034889c349505753498b48184989d84889fb4889c89090ff152e010000488b4424104c8b70104d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b2c244c8968084c8b6424084c8920498b56104883c418ff224889d848ba10b3f0acaa2a00009090ff15e60000004883f801745f4889d848baf8b2f0acaa2a0000909090ff15d2000000495057498b5808909090ff15ca000000488b742408488b5e104889c24d8d7fe84c3b7d107303ff554049c747f8020000004c89f848895008488b0c24488908488b53484883c410ff2248b80100000000000000c3909090909090|@3110,8191,@2167,@2170,@2265,@2066,@3109,@2198,@2201,@2864,@2173,@2190,@2193,@2622|27,0,@2166 53,0,@2165 231,0,@2197 257,0,@2196 490,0,@2189 517,0,@2188 609,0,0 3109:C10,176|90909090909090483b65187303ff55484989c64c89f09090ff15ba0000004989c54c89f0ff15b60000004d89f24d89e94889c74c89d09090ff15aa0000004989c64c89d0ff15a60000004d89d44d89c34c89ce504d89f24989f149b8e005edacaa2a00004889da4889fb4889d0909090ff1582000000495350564c89e0909090ff157a000000488d54241890ff15760000004889c3488b4424089090ff156e000000488b4424084883c418c390909090|@3112,8191,@1461,@2239,@2241,@3034,@2224,@2265,@3111,@2249|92,0,@193 3110:S74|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c756573283229636f7079456e7472696573283129636f7079456e747279283329 3111:C3,112|90909090909090483b65187303ff55484883f801750b48b80100000000000000c35248ff7008488b00909090ff156600000050488b442408488b542410e8c5ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fe498946084c8b2c244d892e4c89f04883c418c3909090|@417,8191,@3113|24,0,0 3112:S29|56414c55455f4f505328292e6d6b53656c656374656454797065283329 3113:C4,264|90909090909090483b65187303ff55484d8d7fe04c3b7d107303ff554049c747f8030000004d89fe49bd502af3acaa2a00004d892e4c8b6ae84d896e104c8b62f04d8966085248ff3048ff700848ff70104d89f048bb302bf3acaa2a0000488b40189090ff15c60000004c8b5c24184c8b14244d8b024983f801754b498b7bf848f7c70100000075364889c64d8d7fe84c3b7d107303ff554049c747f8020000004c89f8488b1f48895808498b52084889109090ff157e0000004989c1eb0e4d89d14889c6eb064d89d14889c64d8d7fd84c3b7d107303ff554049c747f8040000004c89ff488977184c894f10488b74240848897708488b5c241048891f4889f84883c420c39090|@3119,8191,@2228,@2864|42,0,@3114 86,0,@3116 3114:C4,72|90909090909090483b65187303ff55484989d64989c54c89e8909090ff154e0000004d89f24d89e9498b5a10ff15460000004883f8017405498b4208c34c89c8c390909090909090|@3115,8079,@1461,@2272| 3115:S63|56414c55455f4f505328292e6d6b53656c656374656454797065283329636f707941436f6e7374727563746f72283129636f707954797065436f6e73283129 3116:O1|@3117 3117:C2,8|c390909090909090|@3118,1| 3118:S61|56414c55455f4f505328292e6d6b53656c656374656454797065283329636f707941436f6e7374727563746f72283129636f7079547970283129283129 3119:S48|56414c55455f4f505328292e6d6b53656c656374656454797065283329636f707941436f6e7374727563746f72283129 3120:C2,40|90909090909090483b65187303ff55484c8b4010488b5808488b00488b5208ff2290909090909090|@3121,8191| 3121:S74|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c756573283229636f7079456e7472696573283129636f7079456e747279283129 3122:S62|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c756573283229636f7079456e7472696573283129 3123:C3,88|90909090909090483b65187303ff5548504889d8ff15660000004989c64d8d7fe04c3b7d107303ff554049c747f8030000004c89f849bdb82df3acaa2a00004c89284c8970104c8b24244c8960084883c408c39090909090|@3126,8191,@2312|55,0,@3124 3124:C2,176|90909090909090483b65187303ff5548524c8b7210498b56104883fa0175054883c408c350495648b80100000000000000498b5608909090ff12488b0c2448ff3048ff700848b80100000000000000488b119090ff124c8b74242050488b442410498b5608909090ff124989c5488b4424084c89ea909090ff124989c4488b4424204c89e2909090ff124c8b34244883c428483b65187303ff5548e975ffffff48b801000000000000004883c430c390|@3125,8191|41,0,0 71,0,0 162,0,0 3125:S32|486173685461626c652e68617368466f6c64283229666f6c6446283129283129 3126:S21|486173685461626c652e68617368466f6c64283229 3127:C5,280|90909090909090483b65187303ff55484c8b72e04d8b6ef85248ff3048ff700848ff701048ff7018488b5c2418498b4508909090ff15060100004c8b6424204d8b5c24e04d8b53f85048b80100000000000000498b52f090ff126a014c8b5424184989c14c8b442420488b5c2410488b44240890ff15ce0000004c8b4c24284d8b41e0498b78f8504d8b40d8488b5ff8488b442428909090ff15b2000000488b7424304d8d7fe84c3b7d107303ff554049c747f8020000004c89f8488b1c2448895808488b542428488910488b56f090ff12488b4c2430488b41e04c8b70e84d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b2c244c8968084c8b6424284c8920498b56184883c438ff2290909090909090|@3128,8191,@303,@2224,@1493|75,0,0 3128:S62|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c75657328322970726f6365737354797065283129 3129:C14,1192|90909090909090488dbc2460ffffff483b7d187303ff55504c8b72f84d8d7fd84c3b7d107303ff554049c747f8040000004d89fd49bcf035f3acaa2a00004d8965004d8b66f84d8965184c8b5af04d895d104c8b52d84d8955085050504889d74889c64889d94889e34c89e8ff155e040000575651495049514c89c0488d542440909090ff154e040000504c8b7424184983fe01750c49bd0100000000000000eb6e4d8b264c8b5c24284d8b53f84d8d7fd04c3b7d107303ff554049c747f8050000004d89f949b8e036f3acaa2a00004d8901498b7be849897920498b73f049897118498b5af849895910498b53d84989510849ff76084c89c94989d14989d84889cb498b442408ff15d2030000eb05e9200000004c8b34244883c408483b65187303ff5548e965ffffff49bd01000000000000004c8b6424184983fc01750c49bb0100000000000000eb3349ff742408498b0424488d5424509090ff15860300004c8b24244883c408483b65187303ff5548ebc549bb01000000000000004c8b5424284d8b4af84d8d7fd84c3b7d107303ff554049c747f8040000004d89f848bf2038f3acaa2a0000498938498b71f849897018498b5af049895810498b52d8498950085050504889e34c89c09090ff151a030000488b4c2428488b44241848f7c101000000755348f7c001000000753e48ff710848ff7008488b18488b01488d542470909090ff15ea020000488b0424488b4c24084883c410483b65187303ff5548ebba49be010000000000000049be0100000000000000eb0a49be010000000000000049b8010000000000000048bb0839f3acaa2a0000488b44241890ff159a0200004c8b7424204983fe01751a4c8b6424404d8b5c24e8498b4310488b142490ff124989c5eb6f5050504889e348b8010000000000000090ff15660200004c8b6c24584d8d7fe04c3b7d107303ff554049c747f8030000004d89fc49bbe039f3acaa2a00004d891c244c8b5424084d895424104d8b4de84d894c24084d8d7fd84c3b7d107303ff554049c747f8040000004d89f8eb05e99801000048bfa83af3acaa2a0000498938488b74241049897018488b5c242849895810498b5130498950084d8d7f904c3b7d107303ff554049c747f80d0000004c89f9498b4160488941604d8b71584c8971584d8b59504c8959504d8b51484c895148498b794048897940498b7138488971384c894130498b5928488959284d8b41204c8941204d8b69184c8969184c8961104d8b61084c896108498b11488911488b7c24585148ff77e0488b7c246049b878a6edacaa2a00004883ff0175054c89c6eb52488b1f488b54246848ff770848ff72084c8b5424104c8b4b084c8b442418488b0b488b5af04889c8488b52f8ff151e0100004989c0488b3c244883c408483b65187303ff5548ebad48be0100000000000000488b5c24504883fb01750c49bd0100000000000000eb5b488b13488b4a08488b014c8b43084889c7488b722048bb01000000000000004889f890ff15c60000004889f8909090ff15c200000048890648bb01000000000000004889f89090ff15b20000004c89c3483b65187303ff5548eb93e90a00000049bd01000000000000004883c42848b878a6edacaa2a00004883c460c39090|@3156,8191,@2328,@3157,@2758,@3160,@2328,@3162,@3142,@1481,@2849,@2811,@2265,@2249|54,0,@3130 152,0,0 200,0,@3132 301,0,0 322,0,0 375,0,0 418,0,@3134 552,0,0 562,0,0 574,0,0 584,0,0 594,0,@3136 659,0,0 705,0,@3139 769,0,@3141 941,0,@617 1034,0,0 1055,0,0 1088,0,0 1123,0,0 1163,0,0 1177,0,@617 3130:C4,88|90909090909090483b65187303ff554848ff721848ff721048ff720848bbf005f0acaa2a00009090ff15520000004989c24c8b0c244c8b44240848bb0300000000000000488b4424104883c418ff25350000009090909090|@3131,8191,@303,@2855|30,0,@1955 60,0,1 3131:S58|50415253455f5452454528292e706173733228362961737369676e56616c756573283629617373416273446174612834296d657373466e283129 3132:C3,144|90909090909090483b65187303ff55484c8b72204d8d7fd84c3b7d107303ff554049c747f8040000004d89fd49bcb037f3acaa2a00004d8965004c8b62104d8965184c8b5a184d895d104c8b52084d89550849b9008eeeacaa2a00004c8b04244c890c24495549bad8fef1acaa2a000049b9f8fef1acaa2a00004c89c74d8b4660498b5e4057ff252c00000090909090|@2891,8191,@2634|46,0,@3133 84,0,@1418 104,0,@2702 114,0,@2703 3133:C3,48|90909090909090483b65187303ff55484989c24c8b4a084c8b421048bb0300000000000000488b4218ff252900000090|@2858,8191,@2855|29,0,1 3134:C4,88|90909090909090483b65187303ff554848ff721848ff721048ff720848bbc038f3acaa2a00009090ff15520000004989c24c8b0c244c8b44240848bb0300000000000000488b4424104883c418ff25350000009090909090|@3131,8191,@303,@2855|30,0,@3135 60,0,1 3135:S52|2068617320616c7265616479206265656e2075736564206173206120636f6e7374727563746f7220696e20746869732074797065 3136:O1|@3137 3137:C2,72|4d8d7fe04c3b7d107303ff554049c747f8030000004d89fe4989461048b8280aedacaa2a00004989460848b8f8e36cadaa2a00004989064c89f090ff555848b80100000000000000|@3138,4097|30,0,@215 44,0,@7377 64,0,0 3138:S54|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737341627344617461283429552d283129 3139:C2,56|90909090909090483b65187303ff55485250488b52109090ff124c8b7424084d8b6e08488b0424498b55104883c410ff2290909090909090|@3140,8191| 3140:S71|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737341627344617461283429552d646563456e762d656e74657256616c466e283129 3141:C2,88|90909090909090483b65187303ff55485250488b52189090ff124883f80175304c8b742408488b0424498b5610909090ff124883f80175134c8b6c2408488b0424498b55084883c410ff224883c410c34883c410c3909090|@1306,8191| 3142:C14,864|90909090909090483b65187303ff554850504989c24989d94889e348b8303ff3acaa2a0000909090ff155a0300004d8d7fd04c3b7d107303ff554049c747f80500000049c647ff404c89fb48bad03ff3acaa2a000048891348c743080100000048c743100100000048c743180100000048c74320010000004d8d7fe84c3b7d107303ff554049c747f8020000004c89f849be9042f3acaa2a00004c8930488958084c8b2c244c896b08488943104c8943184c8b6424084c89632048c643ff0049524951534983fa017502eb5c498b0290ff15ba02000049ff3249ff7208488b5424309090ff124883f801752a4d8d7fe84c3b7d107303ff554049c747f8020000004d89fb49c74308010000004c8b5424084d8913eb644c8b104d8b024983f801750b4d8b4a08eb1ce92701000048b8b0d7edacaa2a0000ff555849b901000000000000004d8d7fe84c3b7d107303ff554049c747f8020000004c89ff4c894f08488b7424084889374889f090ff15260200004883f8017407eb38e96700000049f7c1010000007505498b01eb1748b8105ff0acaa2a0000ff555848b80100000000000000ff15f60100004883f8017502eb2b574883ff017502eb2348bb0300000000000000488b07ff15da010000488b7f08483b65187303ff5548ebd6574c8b1c244883c408488b44240890ff15be0100004d8d7fe84c3b7d107303ff554049c747f8020000004c89fb4c895b0848c703010000004889c24d8d7fe84c3b7d107303ff554049c747f8020000004c89f848895808488910488b542428ff124c8b14244883c410483b65187303ff5548e970feffff4c8b5c24104983fb01750f48b801000000000000004883c428c3498b03909090ff153e01000049ff3349ff730850488b54241890ff124883f8ff7550488b442410909090ff15220100004883f8017470488b442410909090ff15160100004889c348b8a835f1acaa2a000090ff150a01000048bbe045f3acaa2a0000ff1502010000488b54242090ff12eb564d8d7fe84c3b7d107303ff554049c747f8020000004c89f849ba1046f3acaa2a00004c8950084c8b0c244c8908488b542430eb05e91d000000909090ff1248bb0300000000000000488b442410909090ff15aa0000004c8b5c24084883c418483b65187303ff5548e90cffffff48b801000000000000004883c440c390909090|@5138,8191,@5131,@1461,@2241,@2241,@2811,@1461,@1461,@2241,@2066,@303,@303,@2811|29,0,@3143 77,0,@3146 146,0,@3150 303,0,@970 316,0,0 399,0,@2029 412,0,0 445,0,1 609,0,0 695,0,@2429 712,0,@3154 762,0,@3155 800,0,1 847,0,0 3143:O1|@3144 3144:C3,32|90909090909090483b65187303ff5548488b5808488b00ff252b000000909090|@3145,7695,@2272| 3145:S27|5354525543545f56414c5328292e73616d65547970654964283129 3146:C5,504|90909090909090483b65187303ff55485250488b52209090ff1248f7c00100000075054c8b30eb0a49be1842f3acaa2a00004d8b2e4983fdff75294983fdff7509498b46084883c410c348b8b0d7edacaa2a0000909090ff555848b801000000000000004c8b6424084d8d7fe84c3b7d107303ff554049c747f8020000004c89f849bb3042f3acaa2a00004c8958084c8b14244c89104956498b542408909090ff124c8b0c24498b394883ff0175064d8b4108eb1748b8b0d7edacaa2a0000ff555849b8010000000000000048be03000000000000004983f80175054889f3eb6c4883feff750c48baffffffffffffffffeb5f488b4c2410488b41184883f801742e488b44240890ff15120100004883f801751c498b0090ff150a0100004883f801750c48baffffffffffffffffeb2f498b0090ff15f600000049ff70084d8b004889c34889f0488b5110eb0ae93a000000e90e00000090ff124889c2eb0a49ff7008eb0449ff70084889d64c8b04244883c408483b65187303ff5548e954ffffff48bb0100000000000000488b5424104883fb017506488b0c24eb234d8d7fe84c3b7d107303ff554049c747f8020000004c89f94889590848c701ffffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89f8488948084c8b7424084c893053488b5208909090ff12488b04244883c420c390|@3149,8191,@2664,@2241,@2265|42,0,@3147 76,0,@970 92,0,0 131,0,@3148 183,0,@970 196,0,0 206,0,1 233,0,-1 294,0,-1 388,0,0 3147:O2|-1,-1 3148:O2|-1,0 3149:S49|545950455f5452454528292e67656e457175616c69747946756e6374696f6e7328332967656e457175616c697479283129 3150:C9,296|90909090909090483b65187303ff55484883fb017501c34989d64989c5488b03ff152a0100004d89f44989c34c89d890ff15220100004883f80174104d89ea4c89d89090ff1516010000eb0c488b5b084c89e84c89e2ebaf488b0390ff15060100004989c54c89e8ff15020100004883f801740f4c89e890ff15fa0000004989c3eb1948b8b0d7edacaa2a00009090ff555849bb01000000000000004d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48b82844f3acaa2a00004889024c89420849544952495048ff73084989d0498b5c2408498b039090ff159e0000004883f8ff750f48b8ffffffffffffffff4883c420c34883f801750c49be0100000000000000eb054c8b7424104c8b442408488b1c244c89f0488b5424184883c420e9dffeffff|@3153,8191,@2277,@2084,@2085,@2277,@2084,@2085,@2443|133,0,@970 148,0,0 182,0,@3151 234,0,-1 255,0,0 3151:C6,216|90909090909090483b65187303ff55484989c6488b420890ff15e200000049564883f801750c49bd0100000000000000eb5e4c8b284c8b60084c89e8ff15c60000004883f801740f4c89e890ff15be0000004989c3eb1948b8b0d7edacaa2a00009090ff555849bb0100000000000000488b1c244c89d890ff159a0000004883f801741149bd0300000000000000eb20e91b0000004c89e0483b65187303ff5548e97affffff49bd01000000000000004983fd01740f48b803000000000000004883c408c348b8ffffffffffffffff4883c408c390909090|@3152,7693,@2239,@1458,@1459,@2022|40,0,0 89,0,@970 104,0,0 134,0,1 168,0,0 184,0,1 199,0,-1 3152:S52|545950455f5452454528292e67656e457175616c69747946756e6374696f6e73283329636f6e737472457128332965712d283129 3153:S46|545950455f5452454528292e67656e457175616c69747946756e6374696f6e73283329636f6e7374724571283329 3154:S27|2920646f6573206e6f74207265737065637420657175616c697479 3155:O2|-1,1 3156:S49|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737341627344617461283429 3157:C3,112|90909090909090483b65187303ff55484883f801750b48b80100000000000000c35248ff7008488b00909090ff156600000050488b442408488b542410e8c5ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fe498946084c8b2c244d892e4c89f04883c418c3909090|@417,8191,@3158|24,0,0 3158:C5,304|90909090909090483b65187303ff55484c8b72e04d8b6ef85248ff3048ff700848ff7018488b5c2410498b4508909090ff15220100004c8b6424184d8b5c24e04d8b53f85048b80100000000000000498b52f090ff124c8b4c24204d8b41e049ff70e049ba01000000000000004989c149b8e005edacaa2a0000488b5c2410488b442408ff15d6000000488b7c2410488907488b742420488b5ee0488b53f8504c8b43d8488b5af8488b442420909090ff15b2000000488b4c24284d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b34244c8970084c8b6c24204c8928488b51f090ff124c8b6424284d8b5c24e04d8b53e84d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b0c244c8948084c8b4424204c8900498b5218ff12488b04244883c430c390|@3159,8191,@303,@2224,@1493|71,0,0 101,0,0 114,0,@193 3159:S61|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737341627344617461283429656e74657254636f6e283129 3160:C5,280|90909090909090483b65187303ff55484c8b72e04d8b6ef85248ff3048ff700848ff7018488b5c2410498b4508909090ff150a0100004c8b6424184d8b5c24e04d8b53f85048b80100000000000000498b52f090ff126a0149ba01000000000000004989c14c8b442418488b5c2410488b442408ff15ce0000004c8b4c24204d8b41e0498b78f8504d8b40d8488b5ff8488b442420909090ff15b2000000488b7424284d8d7fe84c3b7d107303ff554049c747f8020000004c89f8488b1c2448895808488b542420488910488b56f090ff12488b4c2428488b41e04c8b70e84d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b2c244c8968084c8b6424204c8920498b56184883c430ff2290909090909090|@3161,8191,@303,@2224,@1493|71,0,0 90,0,0 3161:S65|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737341627344617461283429656e7465725769746854797065283129 3162:C8,352|90909090909090483b65187303ff5548525348ff3048ff701048ff701848b801000000000000004c8b7424084983fe0175054989c5eb2ca8017503ff55704889c34883c30270f44d8b76084889d8483b65187303ff5548ebd349bd01000000000000005050488b4424289090ff15160100009090ff15160100004883f80174384d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89fb488b5424284889134889e048c700ffffffff4989e649895e08eb164889e348c703010000004889e2488b442428488942084d8d7fe84c3b7d107303ff554049c747f8020000004d89fe4c8b2c244d892e488b5c240849895e084d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c897010488b542420488950084c8b7424104c893090ff156e0000005048bb784cf3acaa2a0000488b4424209090ff155e000000488d54244090ff155a0000004889c3488b4424304883c440ff2550000000|@3173,8191,@1461,@1463,@1465,@3174,@3170,@2249|31,0,0 91,0,0 301,0,@3163 3163:O1|@3164 3164:C2,48|4989c64d8d7fe84c3b7d107303ff554049c747f8020000004c89f849bdf04cf3acaa2a00004c89284c897008c3909090|@3169,6145|29,0,@3165 3165:C3,48|90909090909090483b65187303ff55484c8b4a084d8b01498b79084989f9488b5808488b00ff252d0000009090909090|@3167,255,@3166| 3166:C2,24|4889c34c89c048ba7019600000000000ff22909090909090|@3168,255|8,0,I27 3167:S76|50415253455f5452454528292e706173733228362961737369676e56616c7565732836296173734162734461746128342967656e56616c7565436f6e737472732832296c6571283129283129 3168:S73|50415253455f5452454528292e706173733228362961737369676e56616c7565732836296173734162734461746128342967656e56616c7565436f6e737472732832296c6571283429 3169:S73|50415253455f5452454528292e706173733228362961737369676e56616c7565732836296173734162734461746128342967656e56616c7565436f6e737472732832296c6571283129 3170:C6,240|90909090909090483b65187303ff554852504883f801750c49be0100000000000000eb70488b104c8b7424084d8b6ef84d8b65e04d8b5c24f84d8d7fd04c3b7d107303ff554049c747f8050000004d89fa49b91850f3acaa2a00004d890a4d8b4c24e84d894a204d8b4424f04d894218498b7bf849897a10498b7424d84989720848ff70084989f14989f84c89d3488b4208eb05e929000000909090ff1576000000488b04244883c408483b65187303ff5548e95affffff49be0100000000000000488b04249090ff15520000009090ff15520000004889c3488b0424488d5424109090ff15460000004883c410c390|@3180,8191,@2758,@3181,@3240,@3179|26,0,0 83,0,@3171 186,0,0 3171:C3,144|90909090909090483b65187303ff55484c8b72204d8d7fd84c3b7d107303ff554049c747f8040000004d89fd49bce850f3acaa2a00004d8965004c8b62104d8965184c8b5a184d895d104c8b52084d89550849b9008eeeacaa2a00004c8b04244c890c24495549bad8fef1acaa2a000049b9f8fef1acaa2a00004c89c74d8b4660498b5e4057ff252c00000090909090|@2891,8191,@2634|46,0,@3172 84,0,@1418 104,0,@2702 114,0,@2703 3172:C3,48|90909090909090483b65187303ff55484989c24c8b4a084c8b421048bb0300000000000000488b4218ff252900000090|@2858,8191,@2855|29,0,1 3173:S67|50415253455f5452454528292e706173733228362961737369676e56616c7565732836296173734162734461746128342967656e56616c7565436f6e73747273283229 3174:C4,232|90909090909090483b65187303ff55484883f801750b48b80100000000000000c34c8b70084983fe017527488b184d8d7fe84c3b7d107303ff554049c747f8020000004c89f848c7400801000000488918c353495648ff30488b04244889da90ff12505050488d5c2408488b442420488d542430ff1596000000488b5c2428488b44241090e87dffffff50488b5c2430488b442410e86dffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fd498945084c8b6424204d8965004983fd017509488b04244883c438c34955488b442408488d5424409090ff15360000004883c440c390|@3176,8191,@3177,@3175|24,0,0 3175:C2,88|90909090909090483b65187303ff55484883f8017505488b42c0c35248ff30488b40089090e8ddffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b04244889024889d04883c410c3909090|@1847,5| 3176:S17|4d6973632e717569636b536f7274283229 3177:C2,256|90909090909090483b65187303ff55484883f801751a48c7030100000048c743080100000048b80100000000000000c3525348ff3048ff7008488b442408488b52d09090ff12505050488d5c2408488b442418488b54243090e8a9ffffff4c8b34244983fe01744a4d8d7fe84c3b7d107303ff554049c747f8020000004d89fd4c8b6424084d8965084c8b5c24204d895d004c8b5424284d892a4c8b4c24104d894a0848b801000000000000004883c438c34d8d7fe84c3b7d107303ff554049c747f8020000004d89fd4c8b6424104d8965084c8b5c24204d895d004c8b5424284c8b4c24084d890a4d896a0848b801000000000000004883c438c390909090|@3178,8191|39,0,0 165,0,0 239,0,0 3178:S17|4c6973742e706172746974696f6e283329 3179:C3,160|90909090909090483b65187303ff554848f7c001000000756848f7c30100000075645248ff700848ff7308488b1b488b00488b52f8909090ff158a00000050488b5c2408488b442410488b542418909090e8b1ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fe498946084c8b2c244d892e4c89f04883c420c3e90b00000048b80100000000000000c348b80100000000000000c390909090|@3911,8191,@5126|136,0,0 147,0,0 3180:S77|50415253455f5452454528292e706173733228362961737369676e56616c7565732836296173734162734461746128342967656e56616c7565436f6e73747273283229646563436f6e73283129 3181:C3,224|90909090909090483b65187303ff55484883f801750b48b80100000000000000c350504c8b304d8b6e084d8b65004983fcff75164989e349c703010000004989e34d8b164d895308eb2b48ff700849ff364c89e8ff15ae0000004c8d5c24104989034c8d5424104c8b0c244d894a084883c408eb0448ff70084d8d7fe84c3b7d107303ff554049c747f8020000004d89f94c8b4424084d8901488b7c2410498979084951488b442408e859ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fe48894608488b1c2448891e4889f04883c420c390909090909090|@417,8191,@3182|24,0,0 3182:C21,688|90909090909090483b65187303ff55484989c54c89e89090ff15ba0200004883f801746c4c89e890ff15b20200004c8b204983fc03755e488b500848f7c20100000075564c8b72084983fe0175094c8b2a498b4508ebb049bd01000000000000004883fa0175054d89eceb3d41f6c5017503ff55704c89e84883c00270f4488b52084989c5483b65187303ff5548ebd1e99a000000e98a000000e92600000049bc01000000000000004d8d7ff04c3b7d107303ff554049c747f8010000004c89f84c8920c349be01000000000000004883fa0175054d89f5eb2e41f6c6017503ff55704d89f44983c40270f4488b52084d89e6483b65187303ff5548ebd149bd01000000000000004d8d7ff04c3b7d107303ff554049c747f8010000004c89f84c8928c348b80300000000000000c34c89e89090ff15ae0100004883f80174154c89e890ff15a601000048b8ffffffffffffffffc34c89e8ff159a0100004883f80174734c89e890ff15920100004c8b18488b4010909090ff158a0100004d89da4989c14c89c890ff1582010000488b104883faff74454c89c89090ff15760100004989c64c89c8ff15720100004d89f14c89d3ff156e01000049b803000000000000004889c34c89c89090ff155e010000e930feffffe9c80000004c89c890ff15520100004889c148b8d85af3acaa2a000090ff15460100004889c34889c8ff15420100004883f801740b48b80300000000000000c34c89c89090ff152e01000048f7c001000000755e4c8b304989c5498b4608909090ff151a0100004883f801744a498b4608ff15120100004883f801752a4d8b65084983fc0175154c89d3498b4618909090ff15fa000000e994fdffff48b80300000000000000c348b80300000000000000c3e90b00000048b80300000000000000c348b80300000000000000c348b80300000000000000c390|@3238,8191,@2046,@2047,@2084,@2085,@2062,@2063,@2064,@2226,@2226,@2239,@2463,@2465,@1461,@1461,@2272,@2265,@2610,@2612,@3237|89,0,0 161,0,0 199,0,0 256,0,0 294,0,1 332,0,-1 444,0,1 491,0,@3183 526,0,1 629,0,1 640,0,1 656,0,1 667,0,1 678,0,1 3183:O6|@2730,1,0,@3185,@3187,@3184 3184:O2|-1,@7475 3185:O2|@3186,0 3186:O3|3,@7468,79992 3187:O2|-1,@7469 3188:O3|1,@193,@3189 3189:O2|@3190,0 3190:O4|@2730,@617,@3192,@3191 3191:O3|1,@3234,@3233 3192:O2|-1,@3193 3193:O2|5,@3194 3194:O2|-1,@3195 3195:O5|0,@3196,@3232,@7470,@622 3196:O3|@205,@3198,@3197 3197:O2|@444,@3224 3198:O2|@209,@3199 3199:O3|@212,0,@3200 3200:O10|0,@3202,@3207,@3201,0,0,0,0,0,0 3201:O1|@3217 3202:O1|@3203 3203:O2|-1,@3204 3204:O5|0,@423,@434,@7471,@3205 3205:O2|-7,@3206 3206:O8|@440,@2730,0,0,1,0,0,0 3207:O1|@3208 3208:O2|-1,@3209 3209:O5|0,@423,@643,@7472,@3210 3210:O2|-7,@3211 3211:O8|@3212,@2730,0,0,1,0,0,0 3212:O4|4,@3214,@3213,0 3213:O2|-3,I11 3214:O2|@440,@3215 3215:O2|@3216,@439 3216:O2|-3,64 3217:O2|-1,@3218 3218:O5|0,@423,@647,@7473,@3219 3219:O2|-7,@3220 3220:O8|@3221,@2730,0,0,1,0,0,0 3221:O4|4,@3223,@3222,0 3222:O2|-3,I253 3223:O2|@441,@486 3224:O4|@3226,@3228,@3227,@3225 3225:O1|@3231 3226:O3|@3228,@3227,@3225 3227:O1|@3230 3228:O1|@3229 3229:C2,16|48b80300000000000000c39090909090|@2730,1|2,0,1 3230:C2,40|4989c64d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89f84c8930c390909090|@2730,4097| 3231:C2,8|4c8b304c89f0c390|@2730,4097| 3232:O2|-3,@3226 3233:O4|-3,@3236,@2730,@3235 3234:O3|3,@7474,79993 3235:O2|0,@3183 3236:O2|@3234,0 3237:C8,176|90909090909090483b65187303ff55484989c54c89e89090ff15ba0000004883f801740f4c89e890ff15b20000004989c4eb1948b8b0d7edacaa2a00009090ff555849bc0100000000000000498b442408909090ff158e0000004883f80174174d8b1424498b442408909090ff157e0000004989c3eb1948b8b0d7edacaa2a00009090ff555849bb0100000000000000498b0390ff155e00000049b803000000000000004889c34c89d0ff2550000000|@3239,8191,@2084,@2085,@2062,@2063,@2463,@2465|53,0,@970 68,0,0 121,0,@970 136,0,0 156,0,1 3238:S27|56414c55455f4f505328292e6765745475706c654b696e64283129 3239:S32|545950455f5452454528292e636f6e7374727563746f72526573756c74283229 3240:C11,376|90909090909090483b65187303ff554848f7c001000000755a4c8b304d8b2e4983fd0175534c8b60084983fc01753e498b5e0848b8a065f3acaa2a0000909090ff155a0100004989c34d8d7fe84c3b7d107303ff554049c747f8020000004c89f848c74008010000004c8918c3ff2535010000e9f30000004983fd03754d4c8b60084983fc01753d498b5e0848b8380dedacaa2a00009090ff15120100004989c34d8d7fe84c3b7d107303ff554049c747f8020000004c89f848c74008010000004c8918c3ff25ed0000004983fdff754e4c8b60084983fc01753e498b5e0848b8380dedacaa2a0000909090ff15ce0000004989c34d8d7fe84c3b7d107303ff554049c747f8020000004c89f848c74008010000004c8918c3ff25a90000004c8b60084983fc01753c498b5e0848b8380dedacaa2a000090ff15920000004989c34d8d7fe84c3b7d107303ff554049c747f8020000004c89f848c74008010000004c8918c3ff256d000000ff256f00000090909090909090|@3243,8191,@3244,@3242,@5093,@3242,@5093,@3242,@5093,@3242,@3242|53,0,@3241 142,0,@217 225,0,@217 303,0,@217 3241:O1|4 3242:C4,168|90909090909090483b65187303ff55485049be01000000000000004883f80175054d89f5eb404c8b284d8b5d004983fb0175054d89f4eb1241f6c6017503ff55704d89f44983c40270f44d89e6488b4008483b65187303ff5548ebbf49bd010000000000000041f6c5017503ff55704983fd037f1848bb0100000000000000488b04244883c408ff254300000048bb0100000000000000488b04244883c408ff2533000000909090|@5122,8191,@5123,@5121|19,0,0 94,0,0 119,0,0 143,0,0 3243:S44|56414c55455f4f505328292e63686f6f7365436f6e7374725265707228312963686f6f736552657072283129 3244:C6,392|90909090909090483b65187303ff554850534889c348b8d08cedacaa2a000090ff158a0100004d8d7fb84c3b7d107303ff554049c747f8080000004d89fe49c746380100000049c746300100000049c746280100000049c746200300000049c746180100000049c74610010000004c8b2c244d896e084989064d8d7fe84c3b7d107303ff554049c747f8020000004d89fc4d8974240849c70424f3ffffff4954488b5c24104c89e8ff150a0100004d8d7fe84c3b7d107303ff554049c747f8020000004d89fb49c74308010000004989034d8d7fe84c3b7d107303ff554049c747f8020000004d89fa4d895a084c8b0c244d890a4d8d7fe84c3b7d107303ff554049c747f8020000004d89f84d89500849c700150000004983fa01752e4c89c0ff159a0000004d8d7fe84c3b7d107303ff554049c747f8020000004c89ff4889470848c707fbffffffeb034c89c748bb01000000000000004889f848bac068f3acaa2a0000909090ff155a0000004889c648b801000000000000004889f24883c418ff2290909090|@5081,8191,@5082,@5080,@4523,@3247|23,0,@441 336,0,0 349,0,@3245 371,0,0 3245:O3|@3247,@4527,@3246 3246:O3|@4724,@4723,@4528 3247:C19,2352|90909090909090488dbc2430ffffff483b7d187303ff555052505348bb1803eeacaa2a0000488b042448bae8d7edacaa2a000090ff151e0900005048bbf072f3acaa2a0000488b44240848bae8d7edacaa2a0000ff15060900005048bb9874f3acaa2a0000488b44241048bae8d7edacaa2a0000ff15ee0800005048bbc8e0edacaa2a0000488b44241848bae8d7edacaa2a0000ff15d60800004c8b7424084983fe0174354d8d7fe04c3b7d107303ff554049c747f8030000004d89fd49bc4076f3acaa2a00004d896500498945104c8b5c24184d895d08eb2f4d8d7fe84c3b7d107303ff554049c747f8020000004d89fd49bc681cf7acaa2a00004d8965004c8b5c24184d895d0850504989c249b8010000000000000048bb810000000000000048b8170000000000000048ba70156000000000009090ff1248c700150000004d8d7fe84c3b7d107303ff554049c747f8020000004d89f94989410849c701ffffffff4d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89f84d89084889e74c89074889e648c74608010000004d8d7fe84c3b7d107303ff554049c747f8020000004c89fb488b1424488913488b4c240848894b0850504989de49b8010000000000000048bb810000000000000048b8170000000000000048ba70156000000000009090ff1248c700150000004d8d7fe84c3b7d107303ff554049c747f8020000004d89fc498944240849c70424ffffffff4d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fb4d89234989e14d89194989e049c74008010000004d8d7fe84c3b7d107303ff554049c747f8020000004c89ff488b3424488937488b5c240848895f08488b542440488b024883f8f97506488b4a10eb034889d14d8d7fe04c3b7d107303ff554049c747f8030000004d89fc49bbc81cf7acaa2a00004d891c2449897c24104d897424084c8b4c24484d8d7fd04c3b7d107303ff554049c747f8050000004d89f849bb001ef7acaa2a00004d89184c8b5c24304d8958204d8950184d8b59084d8958104d8968084d8d7fe84c3b7d107303ff554049c747f8020000004c89fb48bed825f7acaa2a000048893348897b084d8d7fe84c3b7d107303ff554049c747f8020000004c89fe48ba7088edacaa2a00004889164c8976084d8d7fe84c3b7d107303ff554049c747f8020000004c89f849be8827f7acaa2a00004c89304c8960084d8d7fe84c3b7d107303ff554049c747f8020000004d89fc48ba2028f7acaa2a00004989142449897c24084d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fe49c70603000000488b7c2448495249556a0149566a0149506a016a0148ff7424604d89e24989c14989f04889c8488b5710909090ff1250488b5c2430488b442428909090ff156e050000488b5c2420488b442418ff1566050000488b3424488b164883faff750a488b4e08488b5910eb104883fa037506488b5e10eb04488b5e084883faff750a488b4608488b4820eb0a48b9380dedacaa2a00004883faff75094c8b7608498b06eb164883fa037506488b4608eb0a48b801000000000000004c8b294983fdf375424c8b61084989c34d8d7fe84c3b7d107303ff554049c747f8020000004c89f848c74008ffffffff4d8b5424284c89104989d94d89d89090ff15c20400004989c6eb224983fdfd750c49be0300000000000000eb0a49be01000000000000004989c04989d94983fe0174724d8d7fe84c3b7d107303ff554049c747f8020000004d89fc49c7442408010000004d890c244983fc0175054c89c0eb1749544c89c0488d542470909090ff155a0400004883c4089090ff15560400004c8b184983fbfb75384989c24d8d7fe84c3b7d107303ff554049c747f802000000eb05e91c0100004c89f849b9e028f7acaa2a00004c89084c8950084883c468c34c8b5424484983fa01746f50505050505050504c8d442408488b5c245048b89b000000000000009090ff15ee0300004d8d7fc04c3b7d107303ff554049c747f8070000004d89f94c8b4424084d8901488b7c241049897908488b74241849897110488b5c242049895918488b54242849895120488b4c2430eb05e92600000049894928488b442438498941304c89cb488b042448bac827edacaa2a0000ff1582030000eb0850505050505050504c8b8c24a0000000488b1c24488b442448498b5108909090ff12488b54244890ff124989c04d8d7fe84c3b7d107303ff554049c747f8020000004c89f848bf4829f7acaa2a00004889384c8940084881c4a8000000c34983f801752e4d8d7fe84c3b7d107303ff554049c747f8020000004c89f849bc102af7acaa2a00004c8920488970084883c468c34c89c0909090ff15ea020000495149504889c348b8030000000000000090ff15da0200004d8d7fe84c3b7d107303ff554049c747f8020000004d89fc49894424084c8b5c24084d891c244d8d7fe84c3b7d107303ff554049c747f8020000004d89fa4d89620849c702150000005149524983fc01750c49b90300000000000000eb314d8b0424498b384883fffb751a4d8b642408483b65187303ff5548ebd149b9010000000000000049b901000000000000004983f9017430488b042490ff15420200004d8d7fe84c3b7d107303ff554049c747f8020000004c89fe4889460848c706fbffffffeb04488b34244d8d7fe84c3b7d107303ff554049c747f8020000004c89fb48c74308010000004889334883fb017507488b542410eb1e53488b442418488d942490000000909090ff15da0100004889c24883c4084d8d7fe84c3b7d107303ff554049c747f8020000004c89f94889510848c70113000000488b4424684883f801746e50505050505050514c8d442408488b5c247048b89b0000000000000090ff158a0100004d8d7fc04c3b7d107303ff554049c747f8070000004d89fe4c8b6c24084d892e4c8b6424104d8966084c8b5c24184d895e104c8b5424204d8956184c8b4c24284d894e204c8b442430eb05e9260000004d894628488b7c243849897e304c89f3488b042448bac827edacaa2a0000ff151e010000eb0850505050505050514c8bb424c0000000488b1c24488b442468498b5608909090ff12488b54246890ff124989c54d8d7fd84c3b7d107303ff554049c747f8040000004c89f849bc702af7acaa2a00004c89204c8968184c8b5c24604c8958104c8b5424484c8950084881c4c8000000c390909090|@4502,8191,@974,@974,@974,@974,@4503,@4503,@4505,@4509,@4510,@359,@260,@4512,@4515,@4523,@4501,@359,@260|29,0,@1091 43,0,@972 61,0,@3248 76,0,@972 93,0,@3255 108,0,@972 125,0,@1032 140,0,@972 191,0,@3262 244,0,@4468 272,0,0 282,0,64 292,0,11 302,0,I11 452,0,0 462,0,64 472,0,11 482,0,I11 676,0,@4469 729,0,@4471 791,0,@4484 832,0,@425 873,0,@4488 914,0,@4490 1107,0,@217 1144,0,0 1235,0,1 1247,0,0 1391,0,@4492 1442,0,77 1560,0,@258 1647,0,@4494 1702,0,@4495 1743,0,1 1842,0,1 1883,0,0 1893,0,0 2103,0,77 2220,0,@258 2307,0,@4496 3248:O3|@3250,@3252,@3249 3249:O2|@3254,@7446 3250:O2|@3251,@7446 3251:C2,48|4c8b304c8b6a084d3bf5751648b80300000000000000c348b80100000000000000c348b80100000000000000c3909090|@966,6149|14,0,1 25,0,0 36,0,0 3252:O2|@3253,@7446 3253:C2,48|4989c64d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c89701048c740088b0000004c8b72084c8930c390|@966,4101| 3254:C2,56|4c8b304c8b6a084d3bf57510488b4010c348b80100000000000000c348b8b0d7edacaa2a000090ff555848b8010000000000000090909090|@966,6149|19,0,0 30,0,@970 44,0,0 3255:O3|@3257,@3259,@3256 3256:O2|@3261,@7441 3257:O2|@3258,@7441 3258:C2,48|4c8b304c8b6a084d3bf5751648b80300000000000000c348b80100000000000000c348b80100000000000000c3909090|@966,6149|14,0,1 25,0,0 36,0,0 3259:O2|@3260,@7441 3260:C2,48|4989c64d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c89701048c740088b0000004c8b72084c8930c390|@966,4101| 3261:C2,56|4c8b304c8b6a084d3bf57510488b4010c348b80100000000000000c348b8b0d7edacaa2a000090ff555848b8010000000000000090909090|@966,6149|19,0,0 30,0,@970 44,0,0 3262:C5,192|90909090909090483b65187303ff55485050505050505052504c8d442410488b5a1048b89b00000000000000ff15b60000004d8d7fc04c3b7d107303ff554049c747f8070000004d89fe4c8b6c24104d892e4c8b6424184d8966084c8b5c24204d895e104c8b5424284d8956184c8b4c24304d894e204c8b4424384d894628488b7c244049897e304c89f3488b042448bac827edacaa2a0000909090ff154e000000488b742408488b5e08488b04244883c448ff253f00000090909090909090|@3341,8191,@359,@260,@3263|36,0,77 145,0,@258 3263:C8,376|90909090909090483b65187303ff55484c8b304983fef3756d4c8b68085349ff750049ff752049ff75304989d8498b5d0848b8010000000000000090ff155e0100004d8d7fe84c3b7d107303ff554049c747f8020000004d89fc49bb3079f3acaa2a00004d891c244989442408ff35350100006a0348ff74241848ff74241848ff742438eb05e95800000049baa095f3acaa2a000049b94096f3acaa2a00004d89e04889c3488b4424389090ff15fe0000004989c24d8d7fe84c3b7d107303ff554049c747f8020000004c89f849b99896f3acaa2a00004c89084c8950084883c420c350534989d848bb0097f3acaa2a000048b80100000000000000ff15b6000000ff35b80000006a036a016a0148ff74242049ba2097f3acaa2a000049b98097f3acaa2a000049b8d897f3acaa2a00004889c3488b442430909090ff15860000004989c54d8d7fe84c3b7d107303ff554049c747f8020000004c89f849bc8098f3acaa2a00004c89204c8968084883c410c39090909090|@4281,8191,@4087,@4282,@3342,@4087,@4284,@3342|51,0,0 92,0,@3264 141,0,@3323 151,0,@3327 207,0,@3329 234,0,@3331 244,0,0 277,0,@3332 287,0,@3334 297,0,@3336 351,0,@3340 3264:C3,80|90909090909090483b65187303ff55484d8d7fe84c3b7d107303ff554049c747f8020000004d89fe4c8b6a084d896e0849c706010000004c8b40104c89f348b8c079f3acaa2a0000ff252a0000009090|@3268,8191,@3266|64,0,@3265 3265:S11|70757368436f6465526566 3266:C4,344|90909090909090483b65187303ff55484d8b70384d8b2e4c8b1b4983fbfb756d4c8b530841f6c2017503ff55704983fa017c0c49b90300000000000000eb0a49b901000000000000004983f90175054c89d7eb1241f6c2017503ff55704c89d74883eff270f45053495049ff701849ff7050495548bbf1ffffffffffffff4889f848baf02d600000000000eb05e9090000009090ff124989c4eb1849bcffffffffffffffff5053495049ff701849ff705049554d8d7fd84c3b7d107303ff554049c747f8040000004d89fa4d89621849b9807bf3acaa2a00004d894a1049c74208030000004c8b4424204d89024d89d0488b1c24488b442410909090ff157e000000488b7c2418488b342440f6c6017503ff55704889f34883c30270f4488b573848891a488b4c24084883f901741b4989f8488b5c242848b8b01e600000000000909090ff153e000000488b04244883c430c39090909090|@3275,8191,@3276,@3269|53,0,1 65,0,0 118,0,-8 131,0,I109 157,0,-1 209,0,@3267 313,0,I48 3267:O2|8,1 3268:S34|475f434f444528292e67656e636f6465283229636c6f73757265416464722d283129 3269:C13,504|90909090909090483b65187303ff554850495049ff704848b81500000000000000909090ff15f601000048bb5056edacaa2a0000ff15ee010000488b5c241090ff15ea01000048bb587ef3acaa2a0000ff15e2010000488b14249090ff1248b8707ef3acaa2a0000488b1424ff124c8b7424084d8b6e384d8b650048bbffffffffffffffff4c89e0ff15b2010000488b14249090ff1248b8887ef3acaa2a0000488b1424ff124c8b5c24084d8b53104d8b0a48bbffffffffffffffff4c89c890ff1582010000488b14249090ff1248b8a07ef3acaa2a0000488b1424ff124c8b442408498b7860488b3748bbffffffffffffffff4889f090ff1552010000488b14249090ff1248b81500000000000000488b1424ff1248b8b87ef3acaa2a0000488b1424ff12488b5c2408488b5320488b1c244889d09090ff151a01000048b81500000000000000488b1424ff12488b5c240848b80300000000000000909090ff15fa000000488b48104883f9017465504c8b700848b801000000000000004c89f29090ff124c8b6c24104989c14c89cb498b4518909090ff15ca0000004c8b4424084889c34c89c8909090ff15be0000004c8b042448b80100000000000000498b1090ff124883c408483b65187303ff5548eb91e90f00000048b801000000000000004883c420c348b801000000000000004883c418c3|@3283,8191,@303,@303,@303,@303,@305,@305,@305,@3284,@3304,@428,@3280|25,0,10 44,0,@344 72,0,@3270 96,0,@3271 125,0,-1 152,0,@3272 180,0,-1 208,0,@3273 236,0,-1 264,0,10 280,0,@3274 320,0,10 341,0,1 375,0,0 440,0,0 476,0,0 491,0,0 3270:S2|290a 3271:S4|7073703d 3272:S5|206c696d3d 3273:S5|207273703d 3274:S5|726567733d 3275:S25|5452414e535f54414228292e7075736850737461636b283329 3276:C2,608|90909090909090483b65187303ff55484c8b304d8b2e4d8b65004983fc01751848b89881f3acaa2a000090ff555848b801000000000000004d8b5d084d8b13534923daf6c3015b7503ff5570493bda7d60f6c3017503ff55704883fb017d02eb174d8b13534923daf6c3015b7503ff5570493bda7d02eb1848b860d6ecacaa2a000090ff555848b80100000000000000f6c3017503ff55704989da4983c20270f44f894493fc48b80100000000000000c34d8b1349b907000000000000004c89d74923f940f6c7017503ff557050524c89d248d1fa498d41ff48f7ea488d78015a5870e6f6c3017503ff55704989da4983c20270f449524c23d741f6c201495a7503ff5570493bfa7e054989f9eb034d89d141f6c1017503ff55704c89cf4883c70270f44989da4c89c64c8b400848bb81000000000000004889f848ba7015600000000000909090ff124c8908498b1bf6c3017503ff55704889da4883c20070f4488b08524823d1f6c2015a7503ff5570483bd17e104989c148b860d6ecacaa2a0000ff55584952564956504989da49b903000000000000004989c048bb03000000000000004c89d848ba704360000000000090ff124d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b34244c89700848c700ffffffff4c8b6c2408498945004c8b64241841f6c4017503ff55704983fc017d02eb1a4d8b1e49544d23e341f6c401495c7503ff55704d3be37d02eb1a48b860d6ecacaa2a0000909090ff555848b8010000000000000041f6c4017503ff55704d89e24983c20270f44c8b4c24104f894c96fc48b801000000000000004883c420c39090909090|@3279,8191|34,0,@3277 48,0,0 122,0,@49 136,0,0 168,0,0 182,0,3 304,0,64 317,0,I11 379,0,@49 401,0,1 414,0,1 427,0,I195 536,0,@49 552,0,0 590,0,0 3277:O3|103,@333,@3278 3278:S39|417474656d707420746f207570646174652061206c6f636b656420737472657463684172726179 3279:S22|5374726574636841727261792e757064617465283329 3280:C8,392|90909090909090483b65187303ff55484883fb01750b48b80100000000000000c3495048ff3348ff730848ff731048ff731848bbffffffffffffffffff156e010000488b54242090ff1248b84100000000000000488b542420909090ff1248bbffffffffffffffff488b442410909090ff1542010000488b54242090ff1248b84100000000000000488b542420909090ff12488b5c2420488b442418ff151e01000048bb807bf3acaa2a0000488b442408909090ff150e0100004883f801742648b80884f3acaa2a0000488b54242090ff12488b44240890ff15f2000000488b54242090ff124c8b34244983feff7502eb7048b82084f3acaa2a0000488b542420909090ff124c8b2c2449bcf1ffffffffffffff4d89eb4d23dc41f6c3017503ff557050524c89ea48d1fa498d4424ff48f7ea4c8d58015a5870e548bbffffffffffffffff4c89d8ff158a000000488b54242090ff1248b85300000000000000eb05e907000000488b542420ff1248b81500000000000000488b5424204883c428ff229090909090|@3315,8191,@305,@305,@3316,@3314,@3287,@305|24,0,0 52,0,-1 76,0,32 96,0,-1 128,0,32 164,0,@3267 194,0,@3281 244,0,@3282 268,0,-8 317,0,-1 344,0,41 368,0,10 3281:S4|20696e20 3282:S10|20746f20626173654028 3283:S25|5452414e535f54414228292e7072696e74537461636b283329 3284:C3,136|90909090909090483b65187303ff5548535049be010000000000000041f6c6017503ff55704983fe197e0f48b801000000000000004883c410c349564c89f0488d542418ff15660000004c8b2c2441f6c5017503ff55704d89ec4983c40270f44d89e64883c408483b65187303ff5548ebaa48b801000000000000004883c418c390909090909090|@3286,8191,@3285|20,0,0 45,0,0 116,0,0 3285:C5,288|90909090909090483b65187303ff55484c8b72f0a8017503ff55704883f8017d02eb1a4d8b2e4d8b6500504923c4a801587503ff5570493bc47d02eb1b4989c448b860d6ecacaa2a000090ff555849bd0100000000000000a8017503ff55704989c44983c40270f44f8b5ca5fc4d89dd41f6c5017503ff55704983fd017e6d5250495548b84100000000000000488b52f8909090ff124c8b542410488b442408ff15a200000049ff72f89090ff159e000000488b14249090ff124c8b4c241848b87b00000000000000498b51f8909090ff124c8b44241849ff70f848bbffffffffffffffff488b442410eb05e920000000909090ff155e000000488b14249090ff1248b801000000000000004883c428c348b80100000000000000c390909090|@3298,8191,@3299,@3287,@305|66,0,@49 80,0,0 133,0,32 193,0,61 221,0,-1 260,0,0 275,0,0 3286:S24|5452414e535f54414228292e7072696e7452656773283229 3287:C4,296|90909090909090483b65187303ff55484c8b70084983fe01755f4c8b284983fd0175114983fe01750b48b84088f3acaa2a0000c34983fd0775114983fe01750b48b85888f3acaa2a0000c34983fd0375114983fe01750b48b87088f3acaa2a0000c34983fd0575164983fe01751048b88888f3acaa2a0000c3e9670000004983fd0975114983fe01750b48b8a088f3acaa2a0000c34983fd0b75114983fe01750b48b8b888f3acaa2a0000c34983fd0d75114983fe01750b48b8d088f3acaa2a0000c34983fd0f75114983fe01750b48b8e888f3acaa2a0000c348b80089f3acaa2a0000c34c8b2841f6c5017503ff55704d89ec4983c41070f448bbffffffffffffffff4c89e090ff15420000004889c348b81889f3acaa2a0000ff253700000090909090909090|@3303,8191,@305,@303|43,0,@3288 66,0,@3289 89,0,@3290 112,0,@3291 140,0,@3292 163,0,@3293 186,0,@3294 209,0,@3295 220,0,@3296 252,0,-1 275,0,@3297 3288:S4|25726178 3289:S4|25726278 3290:S4|25726378 3291:S4|25726478 3292:S4|25727370 3293:S4|25726270 3294:S4|25727369 3295:S4|25726469 3296:S7|556e6b6e6f776e 3297:S2|2572 3298:S35|5452414e535f54414228292e7072696e74526567732832297072696e74526567283129 3299:C2,224|a8017503ff55704883f8017d02eb0fa8017503ff55704883f81b7d02eb1a48b8808af3acaa2a0000909090ff555848b80100000000000000a8017503ff55704883f8077f274d8d7fe84c3b7d107303ff554049c747f8020000004d89fe49c74608010000004989064c89f0c34883f80974064883f80b7534a8017503ff55704989c64983c60470f44d8d7fe84c3b7d107303ff554049c747f8020000004c89f848c74008010000004c8930c3a8017503ff55704989c64983ee0c70f44d8d7fe84c3b7d107303ff554049c747f8020000004c89f848c74008030000004c8930c3|@3302,4097|32,0,@3300 48,0,0 3300:O3|@7377,@215,@3301 3301:S19|426164207265676973746572206e756d626572 3302:S23|414d443634434f4445434f4e5328292e7265674e283129 3303:S26|414d443634434f4445434f4e5328292e72656752657072283129 3304:C4,360|90909090909090483b65187303ff55484883f80174594d8d7fe84c3b7d107303ff554049c747f8020000004c89f849bed08cf3acaa2a00004c8930488958084c8b6b384d8b6500535041f6c4017503ff55704d89e34983eb0270f441f6c3017503ff55704983fb017d0a4c89d8eb3ce9410000004c8b5424084d89d94c89cb498b421890ff15060100004883f80175184d89cc483b65187303ff5548ebab48b801000000000000004c89c8488b14244883c410ff224d8d7fe84c3b7d107303ff554049c747f8020000004d89fe49bd308ff3acaa2a00004d892e49895e0853495649bcffffffffffffffff41f6c4017503ff55704d89e34983c30270f44c8b5424084d8b4a384d8b0149534d23d841f6c301495b7503ff55704d3bd87c054c89d8eb344c89df4889fb498b4218909090ff15620000004883f80175184989fc483b65187303ff5548eba148b801000000000000004889f8488b14244883c410ff2290909090909090|@3313,8191,@428,@428|48,0,@3305 160,0,0 207,0,@3310 227,0,-1 332,0,0 3305:C2,176|a8017503ff55704883f8017c0c49be0300000000000000eb0a49be01000000000000004d8d7fe84c3b7d107303ff554049c747f8020000004d89fd49bcb88df3acaa2a00004d896500498945084d8d7fd84c3b7d107303ff554049c747f8040000004d89fc49bb308ef3acaa2a00004d891c2449895424184989442410488b420849894424084d8d7fe04c3b7d107303ff554049c747f8030000004d89fb4d8973104d896b084d89234c89d8c3909090|@3309,7685|15,0,1 27,0,0 61,0,@3306 103,0,@3308 3306:C2,8|488b4208c3909090|@3307,5| 3307:S36|5452414e535f54414228292e6f766572537461636b2832296d6b49746572283129283129 3308:C3,136|90909090909090483b65187303ff55485248ff72184c8b721041f6c6017503ff55704d89f54983ed0270f441f6c5017503ff55704983fd017d054c89e8eb3c4c8b6424084d8b5c24084d89e94c89cb498b431890ff15560000004883f80175184d89ce483b65187303ff5548ebab48b801000000000000004c89c8488b14244883c410ff22909090|@3307,8191,@428|112,0,0 3309:S33|5452414e535f54414228292e6f766572537461636b2832296d6b49746572283129 3310:C2,184|4c8b72084d8b6e384d8b6500504923c4a801587503ff5570493bc47d0c49bb0300000000000000eb0a49bb01000000000000004d8d7fe84c3b7d107303ff554049c747f8020000004d89fc49ba2090f3acaa2a00004d89142449894424084d8d7fd84c3b7d107303ff554049c747f8040000004d89fa49b96090f3acaa2a00004d890a49895218498942104d8972084d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c8958104c8960084c8910c39090909090|@3309,8069|31,0,1 43,0,0 77,0,@3311 120,0,@3312 3311:C2,8|488b4208c3909090|@3307,5| 3312:C3,152|90909090909090483b65187303ff55485248ff72184c8b721041f6c6017503ff55704d89f54983c50270f44c8b6424084d8b5c24084d8b53384d8b0a49514d23cd41f6c10149597503ff55704d3be97c054c89e8eb314d89e84c89c3498b4318ff155a0000004883f80175184d89c6483b65187303ff5548eb9f48b801000000000000004c89c0488b14244883c410ff2290909090909090|@3307,8191,@428|124,0,0 3313:S24|5452414e535f54414228292e6f766572537461636b283229 3314:C2,88|4c8b334c8b2849554d0bee41f6c501495d7503ff55704d3bf575254c8b5b084c8b50084d3bda750c49bc0300000000000000eb1649bc0100000000000000eb0a49bc01000000000000004c89e04883f002c3909090909090|@3322,7945|42,0,1 54,0,0 66,0,0 3315:S25|5452414e535f54414228292e7072696e74456e747279283329 3316:C9,528|90909090909090483b65187303ff55484c8b304983fe05751753488b40089090ff1512020000488b14244883c408ff224983fefd75614c8b680849f7c501000000744549f7c50100000074054d89eceb1748b86055edacaa2a0000ff555849bc01000000000000005348bbffffffffffffffff4c89e09090ff15c2010000488b14244883c408ff2248b87f000000000000004889daff224983fe01753e5348ff700848b851000000000000004889da90ff12488b04249090ff158a010000488b54240890ff1248b85300000000000000488b5424084883c410ff224983fe03755e5348ff7010488b40089090ff155e010000488b54240890ff1248b8a094f3acaa2a0000488b542408909090ff1248bbffffffffffffffff488b0424ff1536010000488b54240890ff1248b85300000000000000488b5424084883c410ff224983fefb75465348ff700848b8b894f3acaa2a00004889da90ff1248bbffffffffffffffff488b0424ff15f2000000488b54240890ff1248b85300000000000000488b5424084883c410ff225348ff700848b8b7000000000000004889da909090ff124c8b2c244983fd017502eb4749ff750848bbffffffffffffffff498b4500ff15a2000000488b54241090ff1248b84100000000000000488b542410909090ff124c8b2c244883c408483b65187303ff5548ebb148b8bb00000000000000488b5424084883c410ff22909090909090|@3320,8191,@3287,@305,@3319,@3287,@305,@305,@305|83,0,@336 96,0,0 107,0,-1 138,0,63 164,0,40 200,0,41 252,0,@3317 272,0,-1 300,0,41 332,0,@3318 348,0,-1 376,0,41 402,0,91 436,0,-1 464,0,32 503,0,93 3317:S2|4028 3318:S6|626173654028 3319:C2,8|488b4028c3909090|@3321,1| 3320:S30|5452414e535f54414228292e7072696e74537461636b556e696f6e283229 3321:S27|414d443634434f4445434f4e5328292e70726f634e616d65283129 3322:S25|414d443634434f4445434f4e5328292e7265674e6571283229 3323:O1|@3324 3324:C2,24|48b80096f3acaa2a000090ff555848b80100000000000000|@3268,1|2,0,@3325 16,0,0 3325:O3|@7377,@215,@3326 3326:S15|4e6f7420737461746963206c696e6b 3327:O1|@3328 3328:C2,16|48b80100000000000000c39090909090|@3268,1|2,0,0 3329:C2,8|488b4208c3909090|@3330,5| 3330:S22|475f434f444528292e67656e636f6465283229283129 3331:S11|3c746f70206c6576656c3e 3332:O1|@3333 3333:C2,24|48b80096f3acaa2a000090ff555848b80100000000000000|@3268,1|2,0,@3325 16,0,0 3334:O1|@3335 3335:C2,16|48b80100000000000000c39090909090|@3268,1|2,0,0 3336:O1|@3337 3337:C2,24|48b83898f3acaa2a000090ff555848b80100000000000000|@3268,1|2,0,@3338 16,0,0 3338:O3|@7377,@215,@3339 3339:S17|746f70206c6576656c2072656163686564 3340:C2,56|4d8d7fe84c3b7d107303ff554049c747f8020000004c89f848c74008010000004c8b72084c893048bab045600000000000ff229090909090|@3330,8191|41,0,I204 3341:S40|434f44455452454528292e67656e436f6465283229636f646547656e416e645072696e742d283129 3342:C17,1896|90909090909090483b65187303ff55485053495049514952488b442430909090ff156a0700004989c248bb807bf3acaa2a000048b8807bf3acaa2a0000909090ff15520700004883f801743849524c89d0909090ff15460700005049b881841e00000000004889c3488b44240848ba40a1f3acaa2a000090ff152a0700004c8b0c24eb6e495249b8807bf3acaa2a0000488b5c24204c89d048ba98aaf3acaa2a00009090ff15060700004c8b042448bb3058f4acaa2a000048b84858f4acaa2a00009090ff15ee0600005049b87f841e00000000004889c3488b44240848ba40a1f3acaa2a000090ff15d20600004c8b0c244c8b4424584c89c74883f70240f6c7017503ff55704883ff017e7649515749b8e004edacaa2a0000488b5c2438488b44241848ba98aaf3acaa2a00009090ff15920600004c8b44241848bb6058f4acaa2a000048b84858f4acaa2a000090ff157a060000488b1c24f6c3017503ff55704889da4883ea0270f4504989d04889c3488b44242048ba40a1f3acaa2a0000eb05e90c000000ff154a060000488b3424eb0e48beffffffffffffffff4951505049b8ffffffffffffffff48bb810000000000000048b80d0000000000000048ba70156000000000009090ff1248c7000b000000505648b80100000000000000488d5424609090ff15f20500004d8d7fd04c3b7d107303ff554049c747f8050000004c89fe48bb7858f4acaa2a000048891e488b54247848895620488b4c242048894e18488b442450488946104c8b7424304c8976084d8d7fe04c3b7d107303ff554049c747f8030000004d89fd49bc30a3f4acaa2a00004d896500498945104d8975084d8d7fb84c3b7d107303ff554049c747f8080000004d89fb49bad0a9f4acaa2a00004d89134c8b4c24484d894b38498943304c8b8424800000004d894328488b3c2449897b2049895318488b5c240849895b104d8973084d8d7fd04c3b7d107303ff554049c747f8050000004d89fc49ba58b0f4acaa2a00004d8914244d8944242049897c2418498954241049895c24084d8d7f984c3b7d107303ff554049c747f80c00000049c647ff404d89fa48b8e8b8f4acaa2a000049890249c742080100000049c742100100000049c742180100000049c742200100000049c742280100000049c742300100000049c742380100000049c742400100000049c742480100000049c742500100000049c74258010000004d8d7f804c3b7d107303ff554049c747f80f00000049c647ff404c89f849b9c8b2f5acaa2a00004c890848c740080100000048c740100100000048c740180100000048c740200100000048c740280100000048c740300100000048c740380100000048c740400100000048c740480100000048c740500100000048c740580100000048c740600100000048c740680100000048c74070010000004d8d7fc04c3b7d107303ff554049c747f80700000049c647ff404d89f949be08edf5acaa2a00004d893149c741080100000049c741100100000049c741180100000049c741200100000049c741280100000049c74130010000004d8d7f904c3b7d107303ff554049c747f80d00000049c647ff404d89fe48b940f3f5acaa2a000049890e49c746080100000049c746100100000049c746180100000049c746200100000049c746280100000049c746300100000049c746380100000049c746400100000049c746480100000049c746500100000049c746580100000049c74660010000004d8d7fd84c3b7d107303ff554049c747f80400000049c647ff404c89f948bfe07ff6acaa2a000048893948c741080100000048c741100100000048c74118010000004d8d7fd84c3b7d107303ff554049c747f8040000004c89ff48bb5895f6acaa2a000048891f4c895718488b5c245048895f10488b5c243048895f0848895908488b5c2450488959104c89511848c641ff004d894e08488b5c243049895e10488b5c245049895e184d8956204d896e28488b1c2449895e30488b9c248800000049895e38488b542438498956404d894648488b54244049895650488b542478498956584c8b4424204d89466049c646ff004c8b4424304d8941084c8b4424504d894110498979184d895120498971284989493049c641ff0048b94897f6acaa2a000048894808488b4c2468488948104c8b4424304c8940184c8b4424084c8940204c8b4424504c894028488950304c8b04244c8940384c8b8424800000004c89404048895848488b5c243848895850488b5c244048895858488b5c2448488958604c8968684c89507048c640ff00488b5c243049895a08488b5c245049895a1049897a18498972204d8972284d895a30498942384d894a404d896248488b442420498942504d896a5849c642ff005649ba010000000000000049b958def5acaa2a000049b8010000000000000048bb2847f5acaa2a0000488b4424604889fa9090ff12488b44243890ff15e20000004883f801751748b80100000000000000488b14249090ff124989c6eb0a49be0100000000000000488b4424389090ff15b60000004989c1488b4424389090ff15ae0000004989c04c89cb488b442458488b7c24684881c49800000057ff2598000000|@4299,8191,@4300,@3351,@3862,@3345,@3361,@3266,@3345,@3361,@3266,@3345,@4309,@3889,@4311,@4312,@4286|43,0,@3267 53,0,@3267 93,0,1000000 111,0,@3343 136,0,@3267 154,0,@3359 176,0,@3589 186,0,@3590 205,0,999999 223,0,@3343 274,0,@184 294,0,@3359 317,0,@3591 327,0,@3590 377,0,@3343 406,0,-1 420,0,-1 430,0,64 440,0,6 450,0,I11 473,0,0 520,0,@3592 593,0,@3670 639,0,@3681 726,0,@3692 789,0,@3700 919,0,@4009 1073,0,@4107 1163,0,@4113 1301,0,@4247 1362,0,@4274 1553,0,@4280 1736,0,0 1746,0,@4081 1756,0,0 1766,0,@3883 1806,0,0 1829,0,0 3343:O2|@3345,@3344 3344:O2|@3348,@3343 3345:C6,296|90909090909090483b65187303ff55484989d14889c74889de4889f3488b4718ff152a0100004883f801757448bbffffffffffffffff4889f0909090ff15160100004889c348b8f0a2f3acaa2a000090ff150a0100004d8d7fe04c3b7d107303ff554049c747f8030000004c89fb4889431048ba280aedacaa2a00004889530848b9f8e36cadaa2a000048890b4889d8909090ff555848b80100000000000000488b58084889da4923d0f6c2017503ff5570488d53ff4903d070f4f6c2017503ff55704883fa017f164989f84889f348b80300000000000000498b5108ff224d8d7fd84c3b7d107303ff554049c747f8040000004c89f94c8b70184c8971184c8b68104c896910488951084c8b204c89214989c84889f3488b4718ff254700000090909090909090|@3347,8191,@428,@305,@303,@3276|46,0,-1 71,0,@3346 116,0,@215 130,0,@7377 152,0,0 209,0,1 3346:S23|696e6372557365436f756e743a206e6f20656e74727920 3347:S27|5452414e535f54414228292e696e6372557365436f756e74283329 3348:C11,552|90909090909090483b65187303ff55484989d14889c74889de4889f3498b4018ff152a0200004883f801750b48b80100000000000000c34c8b10488b481048bb807bf3acaa2a00004889c890ff15060200004883f801740c48b8807bf3acaa2a0000eb604883ff017502eb5d4d8b324983fe05750c48b80300000000000000eb3b4983fefb752b4d8b6a0841f6c5017503ff55704983fd017d0c48b80300000000000000eb1648b80100000000000000eb0a48b801000000000000004883f8017507eb2ae935000000495156495049ff70184952498b58204889c890ff157e01000048b8807bf3acaa2a0000eb1b4889c8495156495049ff70184952eb0b495156495049ff701849524989c248bb807bf3acaa2a00004c89d0909090ff15460100004883f801745849b80100000000000000488b5c2418488b442408ff152e0100004c8b0c244d8b014983f8057515488b7c2410488b5f20498b4108ff1516010000eb694983f803751b488b7c2410488b5f20498b410890ff1502010000eb4de9570000004983f8ff7542498b79084883ff017502eb36488b74242048ff770849b8ffffffffffffffff488b1f488b442418488b56089090ff12488b3c244883c408483b65187303ff5548ebc2488b4424104883c428ff25ac0000004d8d7fd84c3b7d107303ff554049c747f8040000004d89f949c74118ffffffff4d89511049c74108010000004c8b04244d89014d89c8488b5c2418488b4424084883c428ff256a0000009090|@3350,8191,@428,@3351,@3353,@3351,@3276,@3353,@3353,@3349,@3276|46,0,0 64,0,@3267 90,0,@3267 119,0,1 156,0,1 168,0,0 180,0,0 228,0,@3267 270,0,@3267 298,0,0 418,0,-1 3349:C3,136|90909090909090483b65187303ff55484c8b70384d8b2e41f6c5017503ff55704d89ec4983ec0270f44c8b68104d8b5d0049544d23e341f6c401495c7503ff55704d3be37c314989c14d89e04c89c3498b411890ff15560000004883f801750c498b59384c89034c89c8eb9b48b80100000000000000c348b80100000000000000c3909090909090|@3358,8141,@428|110,0,0 121,0,0 3350:S26|5452414e535f54414228292e72656d6f7665456e747279283329 3351:C2,80|4c8b334c8b2849554d0bee41f6c501495d7503ff55704d3bf575234c8b63084c8b58084d3be3750b48b80300000000000000c348b80100000000000000c348b80100000000000000c390909090909090|@3352,7689|42,0,1 53,0,0 64,0,0 3352:S24|414d443634434f4445434f4e5328292e7265674571283229 3353:C5,384|90909090909090483b65187303ff5548ff1592010000a8017503ff55704883f8017d02eb194c8b334d8b2e504923c5a801587503ff5570493bc57d02eb1a4989c548b860d6ecacaa2a0000ff555849be0100000000000000a8017503ff55704889c24883c20270f44d8b6c96fc4d89ee4983fe01756e48bbffffffffffffffffff152a0100004889c348b868a9f3acaa2a000090ff151e0100004d8d7fe04c3b7d107303ff554049c747f8030000004d89fc498944241049bb280aedacaa2a00004d895c240849baf8e36cadaa2a00004d8914244c89e0ff555848b801000000000000004983fe03751e4c8b63184d8b1c2441f6c3017503ff55704d89da4983c20270f44d89142441f6c6017503ff55704d89f44983ec0270f4a8017503ff55704883f8017d02eb194c8b1b4d8b13504923c2a801587503ff5570493bc27d02eb1a48b860d6ecacaa2a0000909090ff555848b80100000000000000a8017503ff55704989c14983c10270f44f89648bfc48b80100000000000000c390909090|@3356,8191,@3355,@305,@303|67,0,@49 80,0,0 120,0,-1 139,0,@3354 185,0,@215 200,0,@7377 220,0,0 324,0,@49 340,0,0 371,0,0 3354:S29|667265653a20726567697374657220616c726561647920667265652023 3355:C2,80|4c8b70084983fe0175294c8b2841f6c5017503ff55704983fd0d7c1341f6c5017503ff55704c89e84883e80470f4c3488b00c34c8b2841f6c5017503ff55704c89e84883c00c70f4c390909090909090|@3357,6145| 3356:S19|5452414e535f54414228292e66726565283229 3357:S23|414d443634434f4445434f4e5328292e6e526567283129 3358:S23|5452414e535f54414228292e636c6561724f6666283129 3359:O2|@3361,@3360 3360:O3|@3383,@3549,@3382 3361:C6,304|90909090909090483b65187303ff55484d8d7fe04c3b7d107303ff554049c747f8030000004d89fe49bd58acf3acaa2a00004d892e498946104d8946084d8d7fe84c3b7d107303ff554049c747f8020000004d89fd49c74508010000004d8945004d8d7ff04c3b7d107303ff554049c747f8010000004d89fc4d892c245053495048ff7050495649544989c24989d94d89e048bb70adf3acaa2a000048b80300000000000000488b52089090ff124c8b442428488b1c24488b442408ff15960000004c8b5c24284d8b53204d8b0a4d8b4208498b7a10498b72184989f24c89cb4989f9488b442418ff1572000000488b5424104883fa017426488b4424209090ff15620000004c8b44242848bbf8adf3acaa2a00004883c430ff255100000048b801000000000000004883c430c39090|@3369,8191,@3370,@3374,@3368,@3269|42,0,@3362 148,0,@3364 158,0,1 269,0,@3367 289,0,0 3362:C3,160|90909090909090483b65187303ff5548488b42104c8b6020488b4208ff15a6000000a8017503ff55704883f8017d02eb1a498b14244c8b32504923c6a801587503ff5570493bc67d02eb1948b860d6ecacaa2a00009090ff555849bb0100000000000000a8017503ff55704989c54983c50270f44e8b5caafc41f6c3017503ff55704983fb017e0b48b80300000000000000c348b80100000000000000c39090|@3363,7685,@3355|77,0,@49 92,0,0 138,0,1 149,0,0 3363:S34|5452414e535f54414228292e6765745265676973746572283329696e557365283129 3364:O1|@3365 3365:C2,16|48b80300000000000000c39090909090|@3366,1|2,0,1 3366:S29|5452414e535f54414228292e6765745265676973746572283329283129 3367:S11|6765745265676973746572 3368:C5,88|90909090909090483b65187303ff55484c8b304d8b2e495548bb7500000000000000488b40289090ff15520000005048bb0300000000000000488b4424089090ff15420000004889c3488b04244883c410ff253900000090|@3381,8191,@303,@305,@303|26,0,58 49,0,1 3369:S26|5452414e535f54414228292e6765745265676973746572283329 3370:C4,144|90909090909090483b65187303ff554850495049ff7018534d8b70384d8b2e48bb03000000000000004c89e8488d542420909090ff157e00000048b80100000000000000488b542418909090ff124883f801742748bb010000000000000048b80300000000000000488d542420909090ff154a0000004883c420c348b801000000000000004883c420c3909090909090|@3372,8191,@3371,@3371|33,0,1 60,0,0 86,0,0 96,0,1 125,0,0 3371:C10,872|90909090909090483b65187303ff5548534823d8f6c3015b7503ff5570483bd87d5c4c8b72f04989d14989c04889df4889fb498b46189090ff15520300004883f8017502eb5b4c8b10488b7008488b481048ff701848bb807bf3acaa2a00004889c89090ff152e0300004883f8017402eb5a498b41e04883f8017507eb61e9d30200004951495057495256514c8b304983fe01751149bd0100000000000000eb4de9550200004d8b5608488b1c24498b06909090ff15e60200004883f801741149bd0300000000000000eb22e9230200004d89d6483b65187303ff5548ebb0e91200000049bd01000000000000004983fd017574eb0b495149505749525651eb6c4c8b4c2410498b394883ff057563488b742428488b5ee04883fb01750c49b80300000000000000eb5b49ff7108488b134883fa01750c49b80100000000000000eb51488b4a08488b1c24488b029090ff15520200004883f801741b49b80300000000000000eb2ce9ca000000e9c5000000e9230000004889ca483b65187303ff5548ebace9a500000049b801000000000000004883c408eb5e4883ff03755d488b742428488b5ee04883fb01750c49b80300000000000000eb5549ff7108488b134883fa01750c49b80100000000000000eb4b488b4a08488b1c24488b0290ff15ca0100004883f801741649b80300000000000000eb27e932000000e9230000004889ca483b65187303ff5548ebb2e91a00000049b801000000000000004883c408eb0a49b801000000000000004983f8017502eb6e4c8b7424084983fe01752a4c8b6c24284d8b45f0488b5c241848b8010000000000000048ba58a1f3acaa2a0000ff154e010000eb704c8b6c24284d8b65f0498b5c2420488b04249090ff153a0100004c8b5c24284d8d7fd84c3b7d107303ff554049c747f8040000004d89faeb05e9440000004c8b4c24304d894a1849b8807bf3acaa2a00004d894210488b7c240849897a08488b7424104989324d89d0488b5c2418eb05e90d000000498b43e8909090ff15da0000004883c418eb0d4951495057eb06504951495057488b74241048b80100000000000000488b56f8ff124883f801742b488b1c24f6c3017503ff55704889da4883c20270f44889d3488b442408488b5424104883c420e9c0fcffff48b801000000000000004883c420c348b80100000000000000c390909090909090|@3373,8191,@428,@3351,@3351,@3351,@3351,@3348,@3353,@3276|87,0,@3267 151,0,0 194,0,1 230,0,0 288,0,1 313,0,0 350,0,1 396,0,0 433,0,1 458,0,0 494,0,1 535,0,0 551,0,0 594,0,0 604,0,@3344 693,0,@3267 776,0,0 841,0,0 856,0,0 3372:S30|5452414e535f54414228292e72656d6f766546726f6d4361636865283329 3373:S38|5452414e535f54414228292e72656d6f766546726f6d4361636865283329636c656172283229 3374:C6,448|90909090909090483b65187303ff55484989c04c89c09090ff15ca010000a8017503ff55704883f8017d02eb16488b13504823c2a801587503ff5570483bc27d02eb1d4889c248b860d6ecacaa2a0000909090ff555848bf0100000000000000a8017503ff55704989c64983c60270f44e8b6cb3fc4c89ef4883ff01756fa8017503ff55704883f8017d02eb16488b3b504823c7a801587503ff5570483bc77d02eb0f48b860d6ecacaa2a00009090ff5558a8017503ff55704889c24883c20270f448c74493fc030000004d8d7fe84c3b7d107303ff554049c747f8020000004c89f848c7400801000000eb05e9590000004c89004d8d7ff04c3b7d107303ff554049c747f8010000004d89fe4989064d8b294d89c84c89d74c89eb4c89f090ff15ca000000498900488b1ff6c3017503ff55704889da4883ea0270f448891748b80100000000000000c348bbffffffffffffffff909090ff159a0000004889c348b828b6f3acaa2a000090ff158e0000004d8d7fe04c3b7d107303ff554049c747f8030000004d89fc498944241049bb280aedacaa2a00004d895c240849baf8e36cadaa2a00004d8914244c89e0ff555848b8010000000000000090909090|@3377,8191,@3355,@3376,@305,@303|72,0,@49 88,0,0 165,0,@49 322,0,0 333,0,-1 355,0,@3375 401,0,@215 416,0,@7377 436,0,0 3375:S29|676574527365743a2063616e2774206765742072656769737465722023 3376:C3,192|90909090909090483b65187303ff55484883f801750b48b80100000000000000c34883fb01750b48b80100000000000000c3488b1b488b00ff15aa0000005049be01000000000000004883f80175054d89f5eb2e41f6c6017503ff55704d89f44983c40270f4488b40084d89e6483b65187303ff5548ebd149bd01000000000000004983fd1b750f48b801000000000000004883c408c34d8d7ff04c3b7d107303ff554049c747f8010000004c89f84c8b24244c89204883c408c39090909090|@3379,8077,@3378|24,0,0 41,0,0 65,0,0 122,0,0 138,0,0 3377:S22|5452414e535f54414228292e67657452736574283529 3378:C5,288|90909090909090483b65187303ff55484883fb017501c34883f80175044889d8c34989c24989d9498b19498b02909090ff15120100004883f801743d49ff32498b5908498b42089090e8b9ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fb48894308488b14244889134889d84883c408c3498b02ff15ce0000004889c3498b01ff15ca000000534823d8f6c3015b7503ff5570483bd87d3d49ff324c89cb498b4208909090e855ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b04244889024889d04883c408c349ff31498b59084c89d09090e819ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b04244889024889d04883c408c390909090909090|@3380,8077,@3351,@3355,@3355| 3379:S26|5452414e535f54414228292e726567536574556e696f6e283229 3380:S20|5452414e535f54414228292e6d65726765283229 3381:S31|414d443634434f4445434f4e5328292e7472616365436f6e74657874283129 3382:O2|@3569,@3568 3383:C4,120|90909090909090483b65187303ff554849525249505049ff721849515349ff725048b80100000000000000488d542440ff156a0000004c8b34244983fe0174234c8b44243848bb50baf3acaa2a000048b8b01e6000000000004883c440ff254500000048b801000000000000004883c440c3909090909090|@3386,8191,@3385,@3269|35,0,0 71,0,@3384 81,0,I48 101,0,0 3384:S13|70757368526567697374657273 3385:C25,1488|90909090909090483b65187303ff55484c8b72f84d8b6e384d8b6500504923c4a801587503ff5570493bc47d5d4989d14989c04c89c3498b46189090ff15b605000048f7c001000000755c488b18488b134883fa0375554c8b70084983fe017502eb2c4951495048ff730848ff7310495648ff701048ff70184c89c0498b51c8ff124883f8017474eb27e9350500004951495048ff730848ff7310495648ff701048ff7018eb5ae9e7040000e94f0200004c8b6c24304d8b65e84983fc017502eb5c4d8b1c244983fb01750c49ba0100000000000000eb4b4d8b4b08488b5c2420498b03ff15160500004883f801741649ba0300000000000000eb27e99b040000e9960400004d89cb483b65187303ff5548ebb249ba0100000000000000e9060000004983fa01745f4c8b4424104983f801752c488b7c24304c8b47f8488b5c242848b8010000000000000048ba58a1f3acaa2a00009090ff15aa040000eb69488b7c2430488b77e04883fe01751e48b80100000000000000488d5424389090ff158a040000eb6ce90f04000048bb807bf3acaa2a0000488b442408ff15760400004883f801745f488b5fe84883fb017502eb58488b134883fa01751148b90100000000000000eb52e9ce0300004c8b5208488b5c2408488b029090ff153e0400004883f801741148b90300000000000000eb27e9a30300004c89d2483b65187303ff5548ebb0e92c000000e92700000048b901000000000000004883f9017402eb15488b442408488d542438909090ff15f2030000eb67488b5c2430488b53f8488b43e84883f801750c48b978a6edacaa2a0000eb534c8b304983fe01750c48b90100000000000000eb384c8b6bf04c8b42204c89f3498b450890ff15ae0300004d8d7ff04c3b7d107303ff554049c747f8010000004c89f9488901eb0fe9f80200004c8b4220eb044c8b42204889cb4c89c0ff157e0300004989c148bb807bf3acaa2a00004c89c89090ff156e0300004883f80174104c89c8488d542438ff1562030000eb5748b80100000000000000488d54243890ff1552030000eb594883fa0575584951495048ff730848ff700848ff701048ff70184c89c0498b51c8909090ff124883f8017502eb5a488b4c2428488b41e84883f8017507eb5ce9580200004c8b304983fe01751649bd0100000000000000eb51e93e020000e9250200004d8b5608488b5c2418498b0690ff15e20200004883f801741149bd0300000000000000eb22e9030200004d89d6483b65187303ff5548ebace91000000049bd01000000000000004983fd0174604c8b4c24104983f901752d4c8b4424284d8b40f8488b5c242048b8010000000000000048ba58a1f3acaa2a0000909090ff157a020000eb694c8b442428498b78e04883ff01751e48b80100000000000000488d5424309090ff155a020000eb6ce97b01000048bb807bf3acaa2a0000488b442408ff15460200004883f801745f498b70e84883fe017502eb58488b1e4883fb01751148ba0100000000000000eb52e93a010000488b4b08488b03488b5c24089090ff150e0200004883f801741148ba0300000000000000eb27e90f0100004889cb483b65187303ff5548ebb0e92c000000e92700000048ba01000000000000004883fa017402eb15488b442408488d542430909090ff15c2010000eb67488b742428488b5ef8488b4ee84883f901750c48ba78a6edacaa2a0000eb53488b014883f801750c48ba0100000000000000eb384c8b76f04c8b43204889c3498b460890ff157e0100004d8d7ff04c3b7d107303ff554049c747f8010000004c89fa488902eb0fe9640000004c8b4320eb044c8b43204889d34c89c0ff154e0100004989c148bb807bf3acaa2a00004c89c89090ff153e0100004883f80174104c89c8488d542430ff1532010000eb2048b80100000000000000488d54243090ff1522010000eb08495149505050505050eb09495149505050505050488b7c242840f6c7017503ff55704889fe4883c60270f44889f0488b5424304883c438e943faffff48b80100000000000000c390|@3388,8191,@428,@3351,@3348,@3389,@3314,@3351,@3483,@3534,@3536,@3314,@3483,@3389,@3351,@3348,@3387,@3314,@3351,@3542,@3534,@3536,@3314,@3542,@3387|206,0,0 242,0,1 278,0,0 324,0,0 334,0,@3344 369,0,0 399,0,@3267 447,0,0 490,0,1 531,0,0 589,0,@617 610,0,0 703,0,@3267 746,0,0 847,0,0 894,0,1 930,0,0 971,0,0 981,0,@3344 1017,0,0 1047,0,@3267 1095,0,0 1138,0,1 1179,0,0 1237,0,@617 1258,0,0 1351,0,@3267 1394,0,0 1478,0,0 3386:S28|5452414e535f54414228292e70757368526567697374657273283529 3387:C6,416|90909090909090483b65187303ff5548488b42f84c8b70f0524c8b42d0488b58d0488b40f8498b5610909090ff124c8b2c244d8b65f8498b5c24d0498b45e890ff15820100004c8b1c2448bb807bf3acaa2a0000498b43d8ff15720100004883f801740a4c8b0c244d8b51e8eb244c8b14244d8b4af84d8b41f8498b5820498b42e89090ff154e010000488b3c244c8b57d8488b3424488b5ef8488b53f8488b4a60488b0149bef1ffffffffffffff4989c54d23ee41f6c5017503ff557050524889c248d1fa498d46ff48f7ea4c8d68015a5870e64d8d7fe84c3b7d107303ff554049c747f8020000004d89fc4d896c240849c70424fbffffff4d8d7fd84c3b7d107303ff554049c747f8040000004d89fb498943184d8953104c8b56e04d8953084d89234d89d84c8b4bd8488b5ef04c89c890ff15a60000004c8b0424498b78f8488b77f8488b5e60488b13f6c2017503ff55704889d14883c10270f448890b488b034c8b76304d8b2e504923c5a801587503ff5570493bc57e154c8b234d892648b801000000000000004883c408c348b801000000000000004883c408c3|@3548,8191,@3394,@3351,@3353,@3276|76,0,@3267 167,0,-8 388,0,0 403,0,0 3388:S42|5452414e535f54414228292e7075736852656769737465727328352970757368456e7472696573283129 3389:C11,576|90909090909090483b65187303ff5548488b42f84c8b70f0524c8b42c8488b58d0488b40f8498b5610909090ff124c8b2c2448bb807bf3acaa2a0000498b45d0ff15220200004883f801741c4c8b24244d8b5c24f8498b5bd0498b4424d09090ff150a020000eb6a4c8b24244d8b5c24f84d8b5424e849ff7424e049ff73d049ff3249ff720848bb1f00000000000000488b442410909090ff15da0100004c8b0c2441f6c1017503ff55704d89c84981c09000000070f1488b5c24104c89c090ff15ba01000048b8a00cefacaa2a0000eb05e93700000090ff15aa010000488b5c241090ff15a60100004c8b4c241049b80d00000000000000488b5c2408488b44241890ff158e0100004883c420488b3c24488b77f8488b5ef8488b5b20488b47e89090ff1576010000488b1424488b4af8488b41f84c8b70604d8b2e49bcf1ffffffffffffff4d89eb4d23dc41f6c3017503ff557050524c89ea48d1fa498d4424ff48f7ea4c8d58015a5870e54d8d7fe84c3b7d107303ff554049c747f8020000004d89fa4d895a0849c702fbffffff4d8d7fd84c3b7d107303ff554049c747f8040000004d89f94d8969184c8b42d04d894110488b7ad8498979084d89114d89c8488b5af0488b41d890ff15d6000000488b3424488b5ef8488b53f8488b4a60488b01a8017503ff55704989c64983c60270f44c89314c8b294c8b62304d8b1c2449534d23dd41f6c301495b7503ff55704d3beb7e164c8b114d89142448b801000000000000004883c408c348b801000000000000004883c408c3909090|@3393,8191,@3314,@3394,@3399,@3453,@3439,@3453,@3390,@3353,@3276|52,0,@3267 136,0,15 200,0,@1598 241,0,6 319,0,-8 545,0,0 560,0,0 3390:C7,712|90909090909090483b65187303ff55484883f80175124883fb0b740c49be0100000000000000eb36a8017503ff55704881f801ffffff7c1ca8017503ff55704881f8010100007d0c49be0300000000000000eb0a49beffffffffffffffff4883fb09756f4983fe01750c49bd0100000000000000eb2e4983fe03750c49bd8100000000000000eb1c4983feff750c49bd0101000000000000eb0a49bd810100000000000049bc11000000000000004d89c34d23dc41f6c3017503ff557050524c89c248d1fa498d4424ff48f7ea4c8d5801eb05e96c0000005a5870de4d89e84d23c341f6c0017503ff55704d8d45ff4d03c370f441f6c0017503ff55704d89c54983c50870f45053495149564c89cb4c89e89090ff15d60100004c8b64241041f6c4017503ff55704d89e34983c34070f4488b5c24084c89d8909090ff15b6010000eb6f4983fe01750c49bd0100000000000000eb2e4983fe03750c49bd8100000000000000eb1c4983feff750c49bd0101000000000000eb0a49bd810100000000000049bc11000000000000004d89c34d23dc41f6c3017503ff557050524c89c248d1fa498d4424ff48f7ea4c8d5801eb05e9460000005a5870de4d89ea4d23d341f6c2017503ff55704d8d55ff4d03d370f44d89d04c23c341f6c0017503ff55704d8d42ff4c03c370f45050495149564c89cb4c89c0ff1502010000488b3c244883ff037514488b5c2408488b4424184883c420ff25ec0000004883ffff7569488b74240848bb01000000ffffffff488b542418534823daf6c3015b7503ff5570483bda7f5248b90100000001000000524823d1f6c2015a7503ff5570483bd17d36488b064c8b3041f6c6017503ff55704d89f54983c50870f44c89284c8b46104c89f34889d0eb05e9240000004883c420ff257600000048b880c9f3acaa2a0000909090ff555848b8010000000000000048b801000000000000004883c420c39090909090|@3482,8191,@3453,@3453,@3453,@3476,@3410|30,0,0 74,0,1 86,0,-1 108,0,0 126,0,64 144,0,128 156,0,192 166,0,8 332,0,0 350,0,64 368,0,128 380,0,192 390,0,8 553,0,-2147483648 586,0,2147483648 668,0,@3391 684,0,0 694,0,0 3391:O3|@7377,@215,@3392 3392:S20|67656e3332733a20696e76616c696420776f7264 3393:S62|5452414e535f54414228292e7075736852656769737465727328352970757368456e7472696573283129736176654469726563744f6e537461636b283129 3394:C8,248|90909090909090483b65187303ff55484c8b304983fe1375754c8b68084983fd0375705348bb1f00000000000000488b04249090ff15e6000000488b1c2448b89100000000000000ff15da00000048b8a00cefacaa2a0000ff15d2000000488b1c249090ff15ce0000004c8b0c2449b80d0000000000000048bb0b0000000000000048b81100000000000000eb0ae90f000000e90a0000004883c408ff259e0000004d8d7fe84c3b7d107303ff554049c747f8020000004d89fd4d89750849c74500250000004c8b60084983fc01740c49bb78cbf3acaa2a0000eb0a49bb01000000000000004989d84c89db4c89e8ff2553000000909090|@3398,8191,@3399,@3453,@3439,@3453,@3390,@3397|38,0,15 64,0,72 80,0,@1598 112,0,6 122,0,5 132,0,8 210,0,@3395 222,0,0 3395:O1|@3396 3396:O4|1,0,1,0 3397:C6,296|90909090909090483b65187303ff55485053495048bb1f000000000000004c89c0909090ff15260100004c8b7424084983fe017502eb6d4d8b2e4d8b65104983fc01740c49bb1100000000000000eb0a49bb010000000000000041f6c3017503ff55704d89da4981c28000000070f14d8b4d084983f901740c49b80900000000000000eb0a49b801000000000000004c89d74923f840f6c7017503ff5570498d7affeb05e9610000004903f870ed498b75184883fe01740c48bb0500000000000000eb0a48bb01000000000000004889fa4823d3f6c2017503ff5570488d57ff4803d370f4498b4d004889d04823c1a8017503ff5570488d42ff4803c170f4488b1c2490ff154e000000488b44241090ff154a000000488b1c244883c418ff254400000090909090|@3481,8191,@3399,@3453,@3439,@3453|22,0,15 70,0,8 82,0,0 123,0,4 135,0,0 186,0,2 198,0,0 3398:S26|414d443634434f4445434f4e5328292e67656e50757368283229 3399:C6,320|90909090909090483b65187303ff55484c8b70604d8b2e4983fd01750c49bc0300000000000000eb0a49bc01000000000000004d89e54983f5024c8b60084d8b1c244983fb017402eb454c8b98800000004d8b134983fa017502eb2b49c704240100000050534954495549534c89d390ff15f20000004c8b0c2449c701010000004883c408eb0e505349544955eb065053495449554c8b5424084d8b0a4c8b04244983f8017419488b74241040f6c6017503ff55704889f74883c70c70f4eb05488b7c24104c8b4424184c89cb4889f8ff159a000000488b7c2418488bb780000000488b1e4883fb017502eb24488b570848c70201000000564889f8ff1576000000488b0c2448c701010000004883c408488b4424184c8b70604d8b2e4983fd01750f48b801000000000000004883c420c34883c420ff254400000090909090|@3404,8191,@3405,@3446,@3405,@3400|31,0,1 43,0,0 293,0,0 3400:C15,744|90909090909090483b65187303ff55484c8bb0800000004d8b2e4983fd017502eb2d4c8b600849c70424010000005048ff706049564c89ebff15d20200004c8b1c2449c703010000004883c408eb055048ff70604c8b24244d8b1c2449ba11000000000000004d89d94d23ca41f6c1017503ff557050524c89da48d1fa498d42ff48f7ea4c8d48015a5870e649c704240100000041f6c1017503ff55704983f9017d1948b880d2f3acaa2a00009090ff555848b8010000000000000041f6c1017503ff55704981f901ffffff7c7041f6c1017503ff55704981f9010100007d634951488b5c241048b89100000000000000909090ff151e02000048b8c8d2f3acaa2a0000ff1516020000488b5c241090ff151202000048b8ffffffffffffffffff150a02000049b811000000000000004889c74923f840f6c701750feb0ae96a000000e965000000ff557050524889c248d1fa498d40ff48f7ea488d78015a5870da40f6c7017503ff55704889fe4881c68001000070f140f6c6017503ff55704889f34883c30870f44889da488b5c24104889d0ff159e010000488b5c2410488b04244883c418ff25930100004951488b5c241048b891000000000000009090ff158201000048b8380dedacaa2a0000ff157a010000488b5c241090ff157601000048b8ffffffffffffffffff156e01000049b811000000000000004889c74923f840f6c7017503ff557050524889c248d1fa498d40ff48f7ea488d78015a5870e640f6c7017503ff55704889fe4881c68001000070f140f6c6017503ff55704889f34883c30870f44889da488b5c24104889d0ff150e010000488b4c241048b801000000ffffffff4c8b3424504923c6a801587503ff5570493bc67f5049bd010000000100000049554d23ee41f6c501495d7503ff55704d3bf57d314c8b214d8b1c2441f6c3017503ff55704d89da4983c20870f44d8914244c8b41104c89db4c89f04883c418ff25a200000048b880c9f3acaa2a0000909090ff555848b80100000000000000|@3479,8191,@3405,@3453,@3439,@3453,@3440,@3453,@3476,@3453,@3439,@3453,@3440,@3453,@3410|94,0,8 165,0,@3401 180,0,0 233,0,72 252,0,@3403 280,0,-1 296,0,8 438,0,72 456,0,@217 484,0,-1 500,0,8 609,0,-2147483648 640,0,2147483648 720,0,@3391 736,0,0 3401:O3|@7377,@215,@3402 3402:S20|4e6567617469766520737461636b207265736574 3403:O1|2 3404:S28|414d443634434f4445434f4e5328292e646f50656e64696e67283229 3405:C13,856|90909090909090483b65187303ff55484883fb01750b48b80100000000000000c34c8b334d8b2e4d8b65004983fcff755c5048ff730848ff3048ff701048ff706849ff7508488b1c24488b4424109090ff152a030000a8017503ff55704881f8010100007c2ca8017503ff55704989c24981eafe01000070f141f6c2017503ff55704d89d34983eb0270f4eb08e90a0100004989c34c8b5424184d8b0a4c8b04244c89cf4923f840f6c7017503ff55704c89cf492bf8488d7f0170f140f6c7017503ff55704889fe4883ee0270f4498b1a488b54240848891a40f6c6017503ff55704881fe01ffffff7c1440f6c6017503ff55704881fe010100007d02eb0f48b8f0d6f3acaa2a00009090ff55584983fb01740e48b830d7f3acaa2a000090ff555840f6c6017503ff55704883fe017d1740f6c6017503ff55704889f14881c10002000070f1eb034889f148f7c10100000074054889c8eb1248f641ff10488b01740348f7d8488d4400014889c14881e1ff0100004989c8488b1c24488b442410909090ff15fe010000488b5c2428488b042490ff15f6010000eb725048ff730848ff3048ff701048ff706849ff7508488b5c2410488b0424909090ff15d60100004c8b5c24184d8b134c8b0c244d89d04d23c141f6c0017503ff55704d89d04d2bc14d8d400170f141f6c0017503ff55704c89c74883ef0870f4498b33488b5c24084889334883f8017416eb05e93001000048b830d7f3acaa2a00009090ff55584883ff01756d48b8380aefacaa2a00009090ff156601000048f7c00100000074054889c2eb1248f640ff10488b10740348f7da488d5412014889d14881e1ff01000041f6c1017503ff55704c89c84883e80270f4514989c84889c3488b4424189090ff151e0100004c8b0424488b5c2408eb05e992000000488b44241890ff150a0100004c8b74240841f6c6017503ff55704d89f54983c50270f44c8b04244c89eb488b442418909090ff15e60000004c8b64240841f6c4017503ff55704d89e34983c30470f44c8b04244c89db488b442418909090ff15c20000004c8b54240841f6c2017503ff55704d89d14983c10670f44c8b04244c89cb488b442418909090ff159e000000eb134c8b4424104c89cb4889f890ff1592000000504883c408488b5c2420488b4424284883c430e9b1fcffff9090|@3411,8191,@3412,@3416,@3433,@3437,@3439,@3416,@3416,@3416,@3416,@3416,@3410|24,0,0 257,0,@3406 278,0,@3408 533,0,@3408 554,0,@1580 3406:O3|@7377,@215,@3407 3407:S14|6a756d7020746f6f206c61726765 3408:O3|@7377,@215,@3409 3409:S39|7265616c6c794669784272616e636865733a206a756d7020616c72656164792070617463686564 3410:C3,720|90909090909090483b65187303ff5548a8017503ff55704883f8017c0c49be0300000000000000eb0a49be01000000000000004983fe0375054989c5eb13a8017503ff55704989c54981edfeff010070f15053495048bb01000200000000004c89e848baf02d600000000000ff125048bb0100020000000000488b44241848ba302e600000000000ff124883f8017502eb2ba8017503ff55704883f8017c0c49bc0300000000000000eb0a49bc01000000000000004983fc037402eb054989c4eb13a8017503ff55704989c44981c40000020070f14c8b1c2441f6c3017503ff55704983fb017c0c49ba0300000000000000eb0a49ba01000000000000004983fa0375054d89d9eb1541f6c3017503ff55704d89d94981e9fe01000070f1495448bb01020000000000004c89c848baf02d60000000000090ff125048bb0102000000000000488b44241048ba302e600000000000ff124883f8017502eb2ba8017503ff55704883f8017c0c49b80300000000000000eb0a49b801000000000000004983f8037402eb054989c0eb13a8017503ff55704989c04981c00002000070f1488b7c240840f6c7017503ff55704883ff017c0c48be0300000000000000eb0a48be01000000000000004883fe0375054889fbeb1540f6c7017503ff55704889fb4881ebfe01000070f149504889da48bb01020000000000004889d048baf02d60000000000090ff125048bb0102000000000000488b44241848ba302e600000000000ff124883f8017502eb2ba8017503ff55704883f8017c0c48b90300000000000000eb0a48b901000000000000004883f9037402eb054889c1eb13a8017503ff55704889c14881c10002000070f1488b442410a8017503ff55704883f8017d15a8017503ff55704989c64981c60002000070f1eb034989c64c8b6c24284c8b6424404c896c24404c8b5424304989c94c8b0424488b5c24084c89f04883c4404954ff252e000000909090909090|@3444,8191,@3443|31,0,1 43,0,0 87,0,65536 100,0,I109 113,0,65536 128,0,I110 161,0,1 173,0,0 234,0,1 246,0,0 290,0,256 303,0,I109 317,0,256 332,0,I110 365,0,1 377,0,0 439,0,1 451,0,0 498,0,256 511,0,I109 525,0,256 540,0,I110 573,0,1 585,0,0 3411:S36|414d443634434f4445434f4e5328292e7265616c6c794669784272616e63686573283229 3412:C5,520|90909090909090483b65187303ff55484c8b30498b46084c8b68f849c1e50849c1ed084f8d6c2d0141f6c5017503ff55704983fd017d2449bbd802edacaa2a00004d89dc4d23e541f6c4017503ff55704d8d63ff4d03e570f4eb034d89ec49bb11000000000000004d89dd4d23ec41f6c5017503ff557050524c89da48d1fa498d4424ff48f7ea4c8d68015a5870e5f6c3017503ff55704883fb017c4b534923ddf6c3015b7503ff5570493bdd7d3948f7c30100000074054989dceb1748b86055edacaa2a0000ff555849bc01000000000000004d89e349d1eb4e0fb61c184f8d5c1b014c89d8c349554989dc48bbffffffffffffffff4c89e09090ff152e0100005048bbffffffffffffffff488b4424089090ff151e0100004d8d7fe84c3b7d107303ff554049c747f8020000004d89fb49c74308010000004989034d8d7fe84c3b7d107303ff554049c747f8020000004d89fa4d895a0849b928ddf3acaa2a00004d890a4d8d7fe84c3b7d107303ff554049c747f8020000004d89f84d895008488b3c244989384d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89400848be50ddf3acaa2a00004889309090ff15860000004d8d7fe04c3b7d107303ff554049c747f8030000004c89fb4889431048ba280aedacaa2a00004889530848b9f8e36cadaa2a000048890b4889d8909090ff555848b8010000000000000090909090|@3415,8191,@305,@305,@331|57,0,@167 96,0,8 191,0,@336 204,0,0 239,0,-1 261,0,-1 347,0,@3413 423,0,@3414 472,0,@215 486,0,@7377 508,0,0 3413:S17|206f7574206f662072616e676520302e2e 3414:S15|637365674765743a20496e64657820 3415:S19|434f44455f5345472e63736567476574283229 3416:C5,976|90909090909090483b65187303ff55484c8b304d8b2e4983fdff751848b8b8e1f3acaa2a000090ff555848b801000000000000004d8b66084d8b5c24f849c1e30849c1eb084f8d5c1b0141f6c3017503ff55704983fb017d2449b9d802edacaa2a00004d89ca4d23d341f6c2017503ff55704d8d51ff4d03d370f4eb034d89da49b911000000000000004d89cb4d23da41f6c3017503ff557050524c89ca48d1fa498d42ff48f7ea4c8d58015a5870e6f6c3017503ff55704883fb017d6c4989da48bbffffffffffffffff4c89d09090ff15220300004d8d7fe84c3b7d107303ff554049c747f8020000004d89f949b818e2f3acaa2a00004d8941084989014d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89480848bf60e2f3acaa2a0000488938eb05e95100000090ff15ca0200004d8d7fe04c3b7d107303ff554049c747f8030000004c89fe4889461048bb280aedacaa2a000048895e0848baf8e36cadaa2a00004889164889f0909090ff555848b80100000000000000534923dbf6c3015b7503ff5570493bdb7d4548f7c30100000074054989daeb1848b86055edacaa2a000090ff555849ba010000000000000049d1e849d1ea4f8804144f8d4400014f8d54120148b80100000000000000c34983fd01741748b880e2f3acaa2a0000ff555848b8010000000000000049b907000000000000004c89cf4923fa40f6c7017503ff557050524c89ca48d1fa498d42ff48f7ea488d78015a5870e6f6c3017503ff55704883fb017c0c48be0300000000000000eb0a48be01000000000000004883fe0375054889daeb11f6c3017503ff55704889da4883ea0e70f45053495049535748bb11000000000000004889d048baf02d6000000000009090ff12a8017503ff55704889c14883c10270f4488b0424504823c1a801587503ff5570483bc17e054989c6eb034989ce49f7c60100000074054d89f5eb1748b86055edacaa2a0000ff555849bd010000000000000049b8010000000000000048bb03000000000000004c89e848ba7015600000000000909090ff124d8d7fe84c3b7d107303ff554049c747f8020000004d89fc498944240849c70424010000004d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fb4d892350495449b901000000000000004c8b4424184c89db488b442430909090ff15a20000004c8b54242849f7c20100000074054d89d1eb1748b86055edacaa2a0000ff555849b901000000000000004c8b442408488b7c2420504889f848d1e849d1e94b880408584f8d4c0901488b742430488b1c2448891e48b801000000000000004883c438c390909090909090|@3429,8191,@305,@331,@3424|30,0,@3417 44,0,0 91,0,@167 130,0,8 195,0,-1 240,0,@3419 285,0,@3421 340,0,@215 354,0,@7377 376,0,0 418,0,@336 432,0,0 462,0,0 479,0,@3422 492,0,0 502,0,3 564,0,1 576,0,0 621,0,8 634,0,I109 707,0,@336 720,0,0 730,0,0 740,0,1 753,0,I11 840,0,0 891,0,@336 904,0,0 956,0,0 3417:O3|@7377,@215,@3418 3418:S42|637365675365743a2063616e2774206368616e6765206c6f636b656420636f646520736567656d656e74 3419:O2|@3420,0 3420:S25|206f7574206f662072616e676520302e2e696e66696e697479 3421:S15|637365675365743a20496e64657820 3422:O3|@7377,@215,@3423 3423:S34|637365675365743a2063616e277420657874656e6420636f6465207365676d656e74 3424:C9,1112|90909090909090483b65187303ff55484c8b30498b064883f801756e4c8b2b498b5d004883fb017566498b5608488b4af848c1e10848c1e908488d4c0901f6c1017503ff55704883f9017d2449bbd802edacaa2a00004d89dc4c23e141f6c4017503ff55704d8d63ff4c03e170f4eb034989cc4d8b5d08498b4bf848c1e10848c1e908488d4c0901eb0ae9ad030000e98f030000f6c1017503ff55704883f9017d2448bfd802edacaa2a00004989fa4c23d141f6c2017503ff55704c8d57ff4c03d170f4eb034989ca48bf11000000000000004889f94923ccf6c1017503ff557050524889fa48d1fa498d4424ff48f7ea488d48015a5870e549bc11000000000000004c89e74923fa40f6c7017503ff557050524c89e248d1fa498d42ff48f7ea488d78015a5870e649bc11000000000000004d89e24d23d141f6c2017503ff557050524c89e248d1fa498d41ff48f7ea4c8d50015a5870e649535249504989f94d23c841f6c1017503ff55704989f94d2bc84d8d490170f141f6c0017503ff55704983f8017d02eb14514923c8f6c101597503ff5570493bc87c02eb6d5148bbffffffffffffffff4c89c0ff15ce0200005048bbffffffffffffffff488b4424089090ff15be0200004d8d7fe84c3b7d107303ff554049c747f8020000004d89f849c74008010000004989004d8d7fe84c3b7d107303ff554049c747f8020000004c89ff4c894708eb05e9ac00000048be28ddf3acaa2a00004889374d8d7fe84c3b7d107303ff554049c747f8020000004c89fb48897b08488b14244889134d8d7fe84c3b7d107303ff554049c747f8020000004c89f84889580848b9a0e7f3acaa2a0000488908909090ff151e0200004d8d7fe04c3b7d107303ff554049c747f8030000004d89fe4989461049bd280aedacaa2a00004d896e0849bcf8e36cadaa2a00004d89264c89f0909090ff555848b8010000000000000041f6c2017503ff55704983fa017d02eb1749514d23ca41f6c10149597503ff55704d3bca7c02eb6f495148bbffffffffffffffff4c89d090ff159e0100005048bbffffffffffffffff488b4424089090ff158e0100004d8d7fe84c3b7d107303ff554049c747f8020000004d89f849c74008010000004989004d8d7fe84c3b7d107303ff554049c747f8020000004c89ff4c894708eb05e9ac00000048be28ddf3acaa2a00004889374d8d7fe84c3b7d107303ff554049c747f8020000004c89fb48897b08488b14244889134d8d7fe84c3b7d107303ff554049c747f8020000004c89f84889580848b9d0e7f3acaa2a0000488908909090ff15ee0000004d8d7fe04c3b7d107303ff554049c747f8030000004d89fe4989461049bd280aedacaa2a00004d896e0849bcf8e36cadaa2a00004d89264c89f0909090ff555848b8010000000000000048bb01000000000000004c89d0488d5424189090ff15920000004883c418c348b800e8f3acaa2a00009090ff555848b8010000000000000048b800e8f3acaa2a000090ff555848b8010000000000000090909090|@3431,8191,@305,@305,@331,@305,@305,@331,@3430|78,0,@167 164,0,@167 203,0,8 251,0,8 299,0,8 417,0,-1 437,0,-1 530,0,@3413 606,0,@3425 656,0,@215 670,0,@7377 692,0,0 744,0,-1 765,0,-1 858,0,@3413 934,0,@3426 984,0,@215 998,0,@7377 1020,0,0 1030,0,0 1061,0,@3427 1076,0,0 1086,0,@3427 1100,0,0 3425:S25|63736567436f70795365673a2042797465206c656e67746820 3426:S25|63736567436f70795365673a2042797465206f666673657420 3427:O3|@7377,@215,@3428 3428:S49|63736567436f70795365673a2063616e206f6e6c7920636f7079206265747765656e206279746520736567656d656e7473 3429:S19|434f44455f5345472e63736567536574283329 3430:C2,232|90909090909090483b65187303ff55484c8b72e853490bdef6c3015b7503ff5570493bde750b48b80100000000000000c348f7c30100000074054989ddeb204989c548b86055edacaa2a0000909090ff55584c89e849bd01000000000000004c8b62f04d89eb49d1eb4f0fb61c1c4f8d5c1b0148f7c00100000074054989c2eb1e4989c248b86055edacaa2a000090ff55584c89d049ba01000000000000004c8b6af849d1eb49d1ea4f885c15004f8d5c1b014f8d541201f6c3017503ff55704989db4983c30270f4a8017503ff55704989c24983c20270f44c89db4c89d0e923ffffff90909090|@3432,7949|40,0,0 68,0,@336 87,0,0 134,0,@336 151,0,0 3431:S23|434f44455f5345472e63736567436f7079536567283429 3432:S35|434f44455f5345472e63736567436f7079536567283429636f70794279746573283229 3433:C3,88|90909090909090483b65187303ff554848ffb388000000504c8b74240849bdffffffffffffff014d892e4c8b6330498b0424488d54241090ff15420000004c8b5b3049890348b801000000000000004883c410c390909090|@3435,8141,@3434|31,0,72057594037927935 71,0,0 3434:C2,184|90909090909090483b65187303ff55484883f801750b48b80100000000000000c34c8b304d8b2e4d8b65004983fc017506488b4008ebd04d8b5d084c8b52f049534d0bda41f6c301495b7503ff55704d3bda7506488b4008ebad4c8b4af84d8b0149534d23d841f6c301495b7503ff55704d3bd87d034d8919524956488b400890e881ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b04244889024889d04883c410c390909090909090|@3436,8133|24,0,0 3435:S30|414d443634434f4445434f4e5328292e72656d6f76654c6162656c283229 3436:S44|414d443634434f4445434f4e5328292e72656d6f76654c6162656c28322972656d6f7665456e747279283129 3437:C6,424|90909090909090483b65187303ff554850534889c3488b0424909090ff15ae0100004c8b74240841f6c6017503ff55704d89f54983c50270f4504c89eb488b4424089090ff158e0100004c8b64241041f6c4017503ff55704d89e34983c30470f4504c89db488b4424109090ff156e0100004c8b54241841f6c2017503ff55704d89d14983c10670f4504c89cb488b4424189090ff154e010000a8017503ff55704881f8010100007c15a8017503ff55704989c04981e80002000070f1eb034989c048bf01020000000000004c89c64823f740f6c6017503ff557050524c89c248d1fa488d47ff48f7ea488d70015a5870e6488b1c244889f24823d3f6c2017503ff5570488d56ff4803d370f4488b4c240848b801020000000000004989ce4c23f041f6c6017503ff557050524889ca48d1fa488d40ff48f7ea4c8d70015a5870e64c8b6c24104d89f44d23e541f6c4017503ff55704d8d66ff4d03e570f449bb01000200000000004989d24d23d341f6c2017503ff5570505248d1fa498d43ff48f7ea4c8d50015a5870e94c89d04923c4a8017503ff5570498d42ff4903c470f44883c428c390|@3438,8191,@3412,@3412,@3412,@3412|196,0,256 276,0,256 353,0,65536 3438:S25|414d443634434f4445434f4e5328292e676574333273283229 3439:C3,976|90909090909090483b65187303ff55484c8b3049f7c60100000074214983fed97c204983fe297f1f49bd86eef3acaa2a00004f8dacb59c00000041ffe5e954010000e94f010000e94a0100009090e923030000909090e939020000909090e94a030000909090e9a8010000909090e9c5010000909090e968010000909090e9e5010000909090e963010000909090e9b0010000909090e93b020000909090e93e020000909090e917010000909090e944020000909090e95d020000909090e9f2010000909090e962010000909090e9ae020000909090e9c7020000909090e9c9000000909090e9e2000000909090e930020000909090e983010000909090e99e000000909090e98c020000909090e979020000909090e9d1010000909090e9a8010000909090e9d7010000909090e9da010000909090e97c000000909090e97d010000909090e95f010000909090e920010000909090e9f3000000909090e975000000909090e92b000000909090e916010000909090e93d020000909090e976000000909090e914010000909090e93002000090909048b86d01000000000000c348b80701000000000000c348b80301000000000000c348b8d701000000000000c348b8d301000000000000c348b8d101000000000000c348b81701000000000000c348b81301000000000000c348b81101000000000000c34c8b700841f6c6017503ff55704c89f04881c0a000000070f1c34c8b700841f6c6017503ff55704c89f04881c0b000000070f1c348b8ff01000000000000c348b82101000000000000c348b81b01000000000000c34c8b700841f6c6017503ff55704c89f04881c07001000070f1c348b88f01000000000000c348b88d01000000000000c348b81f00000000000000c348b81f01000000000000c348b88701000000000000c348b88501000000000000c348b8e100000000000000c348b8e500000000000000c348b8e700000000000000c348b8e900000000000000c348b8eb00000000000000c348b8ed00000000000000c348b8ef00000000000000c348b8f900000000000000c348b8fb00000000000000c348b8fd00000000000000c348b8ff00000000000000c34c8b7010488b400890ff15c600000049bd11000000000000004889c24923d5f6c2017503ff5570504889c248d1fa498d45ff48f7ea488d50015870e84889d04923c6a8017503ff5570488d42ff4903c670f4c348b8f301000000000000c348b8ef01000000000000c348b8ed01000000000000c348b88301000000000000c348b8a301000000000000c348b8d500000000000000c348b8d100000000000000c348b85101000000000000c39090|@3441,6149,@3440|42,0,$3439+78 408,0,182 419,0,131 430,0,129 441,0,235 452,0,233 463,0,232 474,0,139 485,0,137 496,0,136 559,0,255 570,0,144 581,0,141 618,0,199 629,0,198 640,0,15 651,0,143 662,0,195 673,0,194 684,0,112 695,0,114 706,0,115 717,0,116 728,0,117 739,0,118 750,0,119 761,0,124 772,0,125 783,0,126 794,0,127 820,0,8 888,0,249 899,0,247 910,0,246 921,0,193 932,0,209 943,0,106 954,0,104 965,0,168 3440:C2,136|4883f8ff750b48b80100000000000000c34883f805750b48b80300000000000000c34883f801750b48b80500000000000000c34883f8fb750b48b80700000000000000c34883f803750b48b80900000000000000c34883f807750b48b80b00000000000000c34883f8f9750b48b80d00000000000000c348b80f00000000000000c3909090909090|@3442,1|8,0,0 25,0,1 42,0,2 59,0,3 76,0,4 93,0,5 110,0,6 121,0,7 3441:S26|414d443634434f4445434f4e5328292e6f70546f496e74283129 3442:S31|414d443634434f4445434f4e5328292e61726974684f70546f496e74283129 3443:C6,360|90909090909090483b65187303ff554849f7c10100000074054d89ceeb1249f641ff104d8b31740349f7de4f8d7436014d89f14981e1ff0100005053495049524d89c84c89d3488b44242890ff153e0100004c8b042441f6c0017503ff55704c89c74883c70270f4488b74240848f7c60100000074054889f3eb1248f646ff10488b1e740348f7db488d5c1b014889da4881e2ff0100004989d04889fb488b4424289090ff15ee000000488b0c24f6c1017503ff55704889c84883c00470f44c8b74241049f7c60100000074054d89f5eb1249f646ff104d8b2e740349f7dd4f8d6c2d014d89ec4981e4ff0100004d89e04889c3488b442428909090ff159e0000004c8b1c2441f6c3017503ff55704d89da4983c20670f44c8b4c241849f7c10100000074054d89c8eb1249f641ff104d8b01740349f7d84f8d4400014c89c74881e7ff010000488b7424284989f84c89d34889f0488b5424204883c43052ff2543000000909090|@3445,8191,@3416,@3416,@3416,@3416| 3444:S25|414d443634434f4445434f4e5328292e736574333273283329 3445:S28|414d443634434f4445434f4e5328292e736574344279746573283629 3446:C9,544|90909090909090483b65187303ff55484883fb01740c49bec900000000000000eb0a49bef5000000000000004d89f54c23e841f6c5017503ff55704d89f54c2be84d8d6d0170f14883fb0174084d8b304d8b26eb1c4d8b204d8b342441f6c6017503ff55704d89f34983c30470f44d89dc50495449ffb0800000004d8b70304d8b1e4989d94c89ef4c89d8488d542418ff15b201000049ff30495049ffb08800000050488b5c2418488b134c8b7424084d8b2e4989d44d23e541f6c4017503ff55704989d44d2be54d8d64240170f049544c23e741f6c401495c7503ff55704c3be77e714d8b58604d8b1349c703010000004983f901740c49b90100000000000000eb564d8b480849c7010300000048b818f8f3acaa2a0000909090ff152e01000049ff7030495349524c89c3909090ff1522010000488b5c242848b80100000000000000909090ff15120100004c8b442430eb0ae9b0000000e948000000498b3840f6c7017503ff55704889fe4883c6fe70f4488b5c24284889f0ff15e60000004d8d7fe84c3b7d107303ff554049c747f8020000004d89f949c7410801000000498901eb0849ff7030495349524c8b44242048bfffffffffffffff01498938488b742410488b064951488d542458ff159a000000488b5c2418488903488b5c2430488b042490ff158a000000488b542410488b4c240848890a48b801000000000000004883c458c348b801000000000000004883c438c390909090909090|@3449,8191,@3450,@3439,@3453,@3453,@3457,@3459,@3448|24,0,100 36,0,122 250,0,0 273,0,@3447 317,0,0 438,0,72057594037927935 509,0,0 524,0,0 3447:O1|9 3448:C5,248|90909090909090483b65187303ff554848ff73085348ff3348ff73684883f801750f48b801000000000000004883c420c34c8b73604d8b2e4983fd017502eb145048ffb3800000004889d890ff15ce000000eb085048ffb3800000004c8b24244d8b1c244983fb0175074c8b542408eb1c4953488b442410488d542438909090ff15a20000004989c24883c4084c8b4c24184d8b014c89c14c89d0488d542430ff158a0000004c8b7424184d8b2e51490bcdf6c101597503ff55704c3be975054989c4eb184989c2483b65187303ff5548ebba49bc01000000000000004c8b1c244d892348b801000000000000004883c430c39090909090|@3473,8191,@3400,@3474,@3468|36,0,0 213,0,0 230,0,0 3449:S34|414d443634434f4445434f4e5328292e636865636b4272616e63684c697374283329 3450:C3,72|90909090909090483b65187303ff55484883f801750b48b80100000000000000c35248ff30488b4008e8d9ffffff4889c3488b0424488b5424084883c410ff252c00000090909090|@2555,7949,@3451|24,0,0 3451:C2,288|4c8b304d8b2e4983fdff75634c8b62e84d8b1c2452505349ff76084983fb01750c49ba0100000000000000eb32498b1b488b542410483bda750c49ba0300000000000000eb194d8b5b08483b65187303ff5548ebc649ba01000000000000004983fa01740f488b4424084883c420c3e9a4000000488b4424184c8b70f04c8b2c244d89f44d23e541f6c4017503ff55704d89f44d2be54d8d64240170f04c8b5c24084d89e24d23d341f6c2017503ff55704d8d5424ff4d03d370f348bbc900000000000000488b50f84989dd4c23ea41f6c5017503ff55704989dd4c2bea4d8d6d0170f149524d23d541f6c201495a7503ff55704d3bd57e1741f6c3017503ff55704c89d84883c00a70f44883c420c34c89d84883c420c34889d8c390909090|@3452,7949|35,0,0 60,0,1 87,0,0 189,0,100 3452:S45|414d443634434f4445434f4e5328292e636865636b4272616e63684c697374283329636865636b4c6162283229 3453:C3,160|90909090909090483b65187303ff5548a8017503ff55704883f8017c68a8017503ff55704881f8010200007d584c8b334d8b2e41f6c5017503ff55704d89ec4983c40270f44d892648f7c00100000074054989c3eb1248f640ff104c8b18740349f7db4f8d5c1b014c89d84881e0ff0100004989c04c8b73104c89eb4c89f0ff254300000048b8a8fcf3acaa2a0000ff555848b8010000000000000090909090|@3456,8191,@3416|135,0,@3454 148,0,0 3454:O3|@7377,@215,@3455 3455:S19|67656e38753a20696e76616c69642062797465 3456:S24|414d443634434f4445434f4e5328292e67656e3875283229 3457:C2,144|4d8d7fe84c3b7d107303ff554049c747f8020000004d89fe4989460849c706ffffffff4d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fd4d8975004c8bb3880000004d8b26504923c4a801587503ff5570493bc47d03498906488b43304c8b204d8d7fe84c3b7d107303ff554049c747f8020000004d89fb4d8963084d892b4c89184c89e8c390|@3458,7689| 3458:S33|414d443634434f4445434f4e5328292e6d616b6553686f72744c6162656c283229 3459:C6,728|90909090909090483b65187303ff55484883f801750b48b80100000000000000c35248ff30488b4008e8d9ffffff488b1424488b0a4c8b314983fe0175054883c410c34c8b6c24084d8b65e84d8b1c245048ff71084983fb01750c49ba0100000000000000eb32498b13488b4c2410483bd1750c49ba0300000000000000eb194d8b5b08483b65187303ff5548ebc649ba01000000000000004983fa01746e488b4424184c8b70c84983fe017502eb624c8b68e04d8b65004c8b1c244d89e24d23d341f6c2017503ff55704d89e24d2bd34d8d520170f148baff000000000000004889d14923cef6c1017503ff55704889d1492bce488d490170f149524c23d141f6c201495a7503ff5570eb0ae93e000000e9070000004c3bd17c02eb324d8d7fe84c3b7d107303ff554049c747f8020000004d89fd4c8b6424084d8965084c8b5c24104d895d004c89e84883c420c3488b4424184c8b70e04d8b2e4c8b24244d89eb4d23dc41f6c3017503ff55704d89eb4d2bdc4d8d5b0170f149bac900000000000000488b50f84c89d14823caf6c1017503ff55704c89d1482bca488d490170f149534c23d941f6c301495b7503ff55704c3bd97e6b4d8d7fe84c3b7d107303ff554049c747f8020000004d89fd49c74508010000004c8b6424104d8965004c89eb488b40d8ff151201000048b84801f4acaa2a0000ff150a0100004c8b5c2418498b5bd890ff15020100004c8b542418498b5ad848b80100000000000000eb05e959000000ff15ea0000004c8b4c24184d8b41e0498b3840f6c7017503ff55704889fe4883c6f870f44d8d7fe84c3b7d107303ff554049c747f8020000004c89fb4889730848c70301000000488b54241048891a488b4424084883c420c34c8b68d04d8b5d0049544d23e341f6c401495c7503ff55704d3be37d044d8965004d8d7fe84c3b7d107303ff554049c747f8020000004d89fa4c8b4c24084d894a084c8b4424104d89024c89d04883c420c39090909090|@3464,8191,@3405,@3439,@3453,@3461|24,0,0 93,0,0 118,0,1 145,0,0 217,0,127 381,0,100 496,0,@3460 537,0,0 3460:O1|-9 3461:C3,136|90909090909090483b65187303ff5548a8017503ff55704883f8017c5048f7c0010000007402eb1d49be0100000002000000504923c6a801587503ff5570493bc67c02eb284c8b334d8b2e41f6c5017503ff55704d89ec4983c40870f44d89264c8b43104c89ebff254300000048b82002f4acaa2a0000ff555848b8010000000000000090909090|@3466,8191,@3465|42,0,4294967296 111,0,@3462 124,0,0 3462:O3|@7377,@215,@3463 3463:S20|67656e3332753a20696e76616c696420776f7264 3464:S50|414d443634434f4445434f4e5328292e636865636b4272616e63684c697374283329636f6e766572744c6162656c73283129 3465:C3,680|90909090909090483b65187303ff5548a8017503ff55704883f8017c0c49be0300000000000000eb0a49be01000000000000004983fe0375054989c5eb13a8017503ff55704989c54981edfeff010070f15053495048bb01000200000000004c89e848baf02d600000000000ff125048bb0100020000000000488b44241848ba302e600000000000ff124883f8017502eb2ba8017503ff55704883f8017c0c49bc0300000000000000eb0a49bc01000000000000004983fc037402eb054989c4eb13a8017503ff55704989c44981c40000020070f14c8b1c2441f6c3017503ff55704983fb017c0c49ba0300000000000000eb0a49ba01000000000000004983fa0375054d89d9eb1541f6c3017503ff55704d89d94981e9fe01000070f1495448bb01020000000000004c89c848baf02d60000000000090ff125048bb0102000000000000488b44241048ba302e600000000000ff124883f8017502eb2ba8017503ff55704883f8017c0c49b80300000000000000eb0a49b801000000000000004983f8037402eb054989c0eb13a8017503ff55704989c04981c00002000070f1488b7c240840f6c7017503ff55704883ff017c0c48be0300000000000000eb0a48be01000000000000004883fe0375054889fbeb1540f6c7017503ff55704889fb4881ebfe01000070f149504889da48bb01020000000000004889d048baf02d60000000000090ff125048bb0102000000000000488b44241848ba302e600000000000ff124883f8017502eb2ba8017503ff55704883f8017c0c48b90300000000000000eb0a48b901000000000000004883f9037402eb054889c1eb13a8017503ff55704889c14881c10002000070f1488b4424284c8b74244048894424404c8b5424304989c94c8b0424488b5c2408488b4424104883c4404956ff252e000000909090909090|@3467,8191,@3443|31,0,1 43,0,0 87,0,65536 100,0,I109 113,0,65536 128,0,I110 161,0,1 173,0,0 234,0,1 246,0,0 290,0,256 303,0,I109 317,0,256 332,0,I110 365,0,1 377,0,0 439,0,1 451,0,0 498,0,256 511,0,I109 525,0,256 540,0,I110 573,0,1 585,0,0 3466:S25|414d443634434f4445434f4e5328292e67656e333275283229 3467:S25|414d443634434f4445434f4e5328292e736574333275283329 3468:C3,472|90909090909090483b65187303ff55484883f801750b48b80100000000000000c34c8b304d8b2e4d8b65004983fcff756f4c8b5ae84d8b134d8b4d084d89d04d23c141f6c0017503ff55704d89d04d2bc14d8d400170f14983f803756e4d8b134c8b42e0498b3849524c23d741f6c201495a7503ff55704c3bd77f124c8b700848b81008f4acaa2a000090ff555841f6c1017503ff55704d89ca4983c2feeb05e97000000070ed4d89134889d7488b7008488b5ff04c89c8ff1542010000488b5ff848c70301000000eb05e90b0000004889f04889fae92cffffff524956488b4008909090e81dffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89ff48894708488b34244889374889f84883c410c34c8b5ae84d8b134d8b4d084d89d04d23c141f6c0017503ff55704d89d04d2bc14d8d400170f14983f8097556498b3b488b72e0488b1e534823dff6c3015b7503ff5570483bfb7f114c8b700848b86008f4acaa2a0000ff555841f6c1017503ff55704d89ca4983c2fe70f44d89134c8b42f849c70001000000488b4008e970feffff524956488b4008909090e861feffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89ff48894708488b34244889374889f84883c410c390909090909090|@3475,8189,@3433|24,0,0 130,0,@3469 355,0,@3471 3469:O3|@7377,@215,@3470 3470:S25|4261636b696e6720757020746f6f2066617220283862697429 3471:O3|@7377,@215,@3472 3472:S26|4261636b696e6720757020746f6f206661722028333262697429 3473:S24|414d443634434f4445434f4e5328292e6669787570283229 3474:C2,88|90909090909090483b65187303ff55484883f8017505488b42c8c35248ff30488b40089090e8ddffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b04244889024889d04883c410c3909090|@1847,5| 3475:S36|414d443634434f4445434f4e5328292e6669787570283229636865636b4c616273283129 3476:C3,208|90909090909090483b65187303ff5548a8017503ff55704881f801ffffff7c5ea8017503ff55704881f8010100007d714c8b334d8b2e41f6c5017503ff55704d89ec4983c40270f44d8926a8017503ff55704883f8017d15a8017503ff55704989c34981c30002000070f1eb034989c349f7c301000000740a4d89daeb17e93600000049f643ff104d8b13740349f7da4f8d5412014d89d34981e3ff010000eb05e9130000004d89d84c8b53104c89eb4c89d0ff253f00000048b8b00af4acaa2a0000ff555848b80100000000000000|@3480,8191,@3416|187,0,@3477 200,0,0 3477:O3|@7377,@215,@3478 3478:S19|67656e38733a20696e76616c69642062797465 3479:S26|414d443634434f4445434f4e5328292e72657365745370283129 3480:S24|414d443634434f4445434f4e5328292e67656e3873283229 3481:S24|414d443634434f4445434f4e5328292e67656e6f70283329 3482:S28|414d443634434f4445434f4e5328292e67656e4541436f6465283429 3483:C9,360|90909090909090483b65187303ff55484c8b72f84d8b6ef85250498b5d20488b42e89090ff15660100004c8b642408488b1c24498b4424d0ff155a0100004883f8017402eb6d4c8b5c240848bb807bf3acaa2a0000498b43d0909090ff153e0100004883f80174244c8b5424084d8b4af84d8b49d04c8b0424498b5ae8498b42e0909090ff151e010000eb5a4c8b5424084d8b4af84d8b42d04d8b51d04c8b0c244c89c749b8807bf3acaa2a00004889fbeb05e92e00000048b8f5ffffffffffffff9090ff15e6000000488b742408488b5ef8488b53f8488b5a20488b46d090ff15d2000000488b4c2408488b41f84d8d7fe84c3b7d107303ff554049c747f8020000004d89fe4c8b2c244d896e0849c706050000004d8d7fd84c3b7d107303ff554049c747f8040000004d89fc4c8b59c84d895c241849ba807bf3acaa2a00004d895424104c8b49d84d894c24084d8934244d89e0488b59f0488b40d84883c410ff2558000000|@3503,8191,@3353,@3351,@3351,@3504,@3484,@3353,@3276|77,0,@3267 166,0,@3267 186,0,-6 313,0,@3267 3484:C79,3528|90909090909090483b65187303ff55484c8b334d8b2949554d0bee41f6c501495d7503ff55704d3bf5750f4c8b63084d8b59084d3be37502eb274d8b2049544d0be541f6c401495c7503ff55704d3be575204d8b5808498b79084c3bdf7402eb114889c748b8e81df4acaa2a000090ff555848f7c001000000741e4883f8e77c1d4883f8157f1c49bb2a0ef4acaa2a00004d8d5c836441ffe3e9cc000000e9c7000000e9c20000009090e9350b0000909090e9b3000000909090e96d070000909090e9a3000000909090e9c2070000909090e913010000909090e91e080000909090e99d000000909090e96e0b0000909090e973000000909090e96b000000909090e963000000909090e9da060000909090e9e2000000909090e9850a0000909090e91c0a0000909090e93b000000909090e9f10a0000909090e9140a0000909090e9b6030000909090e9140a0000909090e99a020000909090e9c90b0000909090e97e01000090909048b8381ef4acaa2a0000909090ff555848b801000000000000004983fd137547498b79084883ff03753d488b34244c89142449ba807bf3acaa2a000049b9ffffffffffffffff49b8881ef4acaa2a00004889da48bb11000000000000004889d056ff251f0c00004c89cf4d89d14989f848b8a01ef4acaa2a0000ff250e0c00004889df4c89d34889f8ff25070c00005349504951495249b90100000000000000488b44240890ff15f20b0000504c8b5424084c8b4c24104c8b44242048bbffffffffffffffff48b8b01ef4acaa2a00009090ff15ce0b00004c8b4c24084c8b442418488b5c241048b8c01ef4acaa2a000090ff15b60b00004c8b54240849ff3248bb1f000000000000004c89d090ff15a20b00004c8b0c244d8b0141f6c0017503ff55704c89c74883c70470f4488b7424084889f34823dff6c3017503ff55704889f3482bdf488d5b0170f148b8e01ef4acaa2a0000ff15620b000053488b5c2418ff155e0b0000488b5c2418488b04244883c438ff25530b00005349504951495249b90100000000000000488b44240890ff153e0b0000504c8b4c24084c8b442410488b5c242048b8a01ef4acaa2a0000ff15260b00004c8b4c24084c8b442418488b5c241048b8f01ef4acaa2a000090ff150e0b00004c8b5424084c8b4c24104c8b44241048bb030000000000000048b8b01ef4acaa2a0000909090ff15ea0a00004c8b54240849ff3248bb1f000000000000004c89d090ff15d60a00004c8b0c244d8b0141f6c0017503ff55704c89c74883c70470f4488b7424084889f34823dff6c3017503ff55704889f3482bdf488d5b0170f148b8e01ef4acaa2a0000ff15960a000053488b5c2418ff15920a0000488b5c2418488b04244883c438ff25870a00005349504951495249b90100000000000000488b44240890ff15720a0000504c8b4c24084c8b442410488b5c241848b8a01ef4acaa2a0000ff155a0a00004c8b4c24084c8b442420488b5c241048b8f01ef4acaa2a000090ff15420a00004c8b5424084c8b4c24104c8b44241048bb030000000000000048b8b01ef4acaa2a0000909090ff151e0a00004c8b54240849ff3248bb1f000000000000004c89d090ff150a0a00004c8b0c244d8b0141f6c0017503ff55704c89c74883c70470f4488b7424084889f34823dff6c3017503ff55704889f3482bdf488d5b0170f148b8e01ef4acaa2a0000ff15ca09000053488b5c2418ff15c6090000488b5c2418488b04244883c438ff25bb0900005349504951495249b90100000000000000488b44240890ff15a60900004c8b5424084d8b0a4983f901750a4d8b42084983f801741a50488b5c240848b8103dedacaa2a00009090ff157e090000eb0150488b7c2410488b374883fe05750a488b5f084883fb017415488b5c240848b8e004edacaa2a0000ff1556090000488b542418488b0a4883f9057568488b42084883f801755e4c8b54240849b9103dedacaa2a00004c8b44242048bbffffffffffffffff48b8b01ef4acaa2a00009090ff15160900004c8b4c240849b80f0000000000000048bbe004edacaa2a000048b8101ff4acaa2a0000909090ff15f2080000eb6d488b4424204c8b304983fe05750a4c8b68084983fd0174224c8b4c240849b8e004edacaa2a00004889c348b8a01ef4acaa2a0000ff15be0800004c8b4c240849b80f0000000000000048bbe004edacaa2a000048b8101ff4acaa2a0000909090ff159a0800004c8b542408eb05e92c00000049b9103dedacaa2a00004c8b44241848bbffffffffffffffff48b8b01ef4acaa2a0000909090ff156a0800004c8b4c240849b80b0000000000000048bbe004edacaa2a000048b8201ff4acaa2a0000909090ff15460800004c8b5424084c8b4c241049b8103dedacaa2a000048bb030000000000000048b8b01ef4acaa2a00009090ff151e0800004c8b6424104d8b1c244983fb05750b4d8b5424084983fa0174224c8b44240848bb010000000000000048b8301ff4acaa2a0000909090ff15ea0700004c8b4c24104d8b014983f801750a498b79084883ff0174204c8b44240848bb010000000000000048b8481ff4acaa2a000090ff15ba070000488b74240848ff3648bb1f000000000000004889f090ff15a6070000488b1c24488b13f6c2017503ff55704889d14883c10470f4488b4424084989c64c23f141f6c6017503ff55704989c64c2bf14d8d760170f14d89f448b8e01ef4acaa2a000090ff15620700004954488b5c2418909090ff155a070000488b5c2418488b04244883c438ff254f070000534951495248bbffffffffffffffff48b8b01ef4acaa2a00009090ff15360700004c8b0c244c8b442410488b5c240848b8c01ef4acaa2a00004883c418ff251c0700004950495149524d89d14c8b44240848b8a01ef4acaa2a0000ff15060700004c8b0c244c8b442410488b5c240848b8f01ef4acaa2a00009090ff15ee0600004c8b0c2449b80300000000000000488b5c240848b8ffffffffffffffff4883c418ff25cf06000053495149524d89d14c89c74c8b4424084889fb48b8a01ef4acaa2a00009090ff15b20600004c8b0c244c8b442410488b5c240848b8f01ef4acaa2a00009090ff159a0600004c8b0c2449b80300000000000000488b5c240848b8ffffffffffffffff4883c418ff257b060000498b394883ff01750a498b71084883fe01741c534950495149524c89d348b8103dedacaa2a0000ff1556060000eb0753495049514952488b5c2408488b134883fa05750a488b4b084883f9017417488b1c2448b8e004edacaa2a0000909090ff1526060000488b4424104c8b304983fe0575644c8b68084983fd01755a4c8b142449b9103dedacaa2a00004c8b44241848bbffffffffffffffff48b8b01ef4acaa2a0000909090ff15e60500004c8b0c2449b80b0000000000000048bbe004edacaa2a000048b8101ff4acaa2a0000ff15c6050000eb724c8b6c24184d8b65004983fc05750a4d8b5d084983fb0174214c8b0c2449b8e004edacaa2a00004c89eb48b8a01ef4acaa2a0000ff15920500004c8b0c2449b80b0000000000000048bbe004edacaa2a000048b8101ff4acaa2a0000ff15720500004c8b142449b9103dedacaa2a0000eb05e91f0000004c8b44241048bbffffffffffffffff48b8b01ef4acaa2a0000ff15460500004c8b0c2449b8090000000000000048bbe004edacaa2a000048b8201ff4acaa2a0000ff15260500004c8b14244c8b4c240849b8103dedacaa2a000048bb030000000000000048b8b01ef4acaa2a0000909090ff15fe0400004c8b5424084d8b0a4983f905750a4d8b42084983f80174204c8b042448bb010000000000000048b8301ff4acaa2a00009090ff15ce040000488b7c2408488b374883fe01750a488b5f084883fb0174224c8b042448bb010000000000000048b8481ff4acaa2a00004883c420ff259c04000048b801000000000000004883c420c348b80300000000000000ff258504000048b80100000000000000ff257d0400004950495149524d89d14c8b44240848b8a01ef4acaa2a000090ff15660400004c8b0c244c8b442410488b5c240848b8601ff4acaa2a00004883c418ff254c0400004950495149524d89d14c8b44240848b8a01ef4acaa2a0000ff15360400004c8b0c244c8b442410488b5c240848b8801ff4acaa2a00004883c418ff251c040000534951495248bbffffffffffffffff48b8b01ef4acaa2a0000909090ff15020400004c8b0c244c8b442410488b5c240848b8a01ff4acaa2a00004883c418ff25e8030000488b3c244c890c24495249ba03000000000000004d89c14989d848bbf9ffffffffffffff48b8480aefacaa2a000057ff25bb03000053495149524d89d14c89c74c8b4424084889fb48b8a01ef4acaa2a00009090ff159e0300004c8b0c2449b80b00000000000000488b5c240848b8101ff4acaa2a000090ff158203000048ff74240848ff74240849ba01000000000000004c8b4c24184c8b44242048bb010000000000000048b8c01ff4acaa2a0000ff1552030000488b742408488b5c24184889742418488b1424488954241049ba01000000000000004989f14989f04889d948bb030000000000000048b8b01ef4acaa2a00004883c41051ff251003000053495049524d89d149b80b00000000000000488b5c240848b8101ff4acaa2a0000909090ff15ee0200004c8b14244c8b4c24084c8b44241048bb010000000000000048b8a01ef4acaa2a0000ff15ce0200004c8b5424084c8b4c24184c895424184c8b04244c8944241049ba01000000000000004c89cf4c8b4c24084c8b44240848bb030000000000000048b8b01ef4acaa2a00004883c41057ff2588020000|@3512,8191,@3513,@3517,@3394,@3520,@3506,@3517,@3399,@3439,@3453,@3476,@3520,@3517,@3517,@3506,@3399,@3439,@3453,@3476,@3520,@3517,@3517,@3506,@3399,@3439,@3453,@3476,@3520,@3394,@3394,@3506,@3515,@3517,@3515,@3506,@3515,@3506,@3397,@3397,@3399,@3439,@3453,@3476,@3506,@3517,@3517,@3517,@3526,@3517,@3517,@3526,@3394,@3394,@3506,@3515,@3517,@3515,@3506,@3515,@3506,@3397,@3397,@3528,@3528,@3517,@3517,@3517,@3517,@3506,@3517,@3511,@3517,@3515,@3511,@3511,@3515,@3506,@3511|102,0,@3485 137,0,$3484+170 364,0,@3487 380,0,0 414,0,@3267 424,0,-1 434,0,@3489 447,0,8 476,0,@3490 514,0,0 552,0,-1 562,0,@3491 595,0,@3492 620,0,15 696,0,@3493 750,0,0 788,0,@3490 819,0,@3494 851,0,1 861,0,@3491 888,0,15 964,0,@3493 1018,0,0 1056,0,@3490 1087,0,@3494 1119,0,1 1129,0,@3491 1156,0,15 1232,0,@3493 1286,0,0 1338,0,@268 1388,0,@184 1433,0,@268 1448,0,-1 1458,0,@3491 1481,0,7 1491,0,@184 1501,0,@3495 1551,0,@184 1564,0,@3490 1585,0,7 1595,0,@184 1605,0,@3495 1636,0,@268 1651,0,-1 1661,0,@3491 1685,0,5 1695,0,@184 1705,0,@3496 1734,0,@268 1744,0,1 1754,0,@3491 1803,0,0 1813,0,@3497 1861,0,0 1871,0,@3498 1896,0,15 1975,0,@3493 2032,0,-1 2042,0,@3491 2074,0,@3492 2108,0,@3490 2138,0,@3494 2160,0,1 2175,0,-1 2214,0,@3490 2246,0,@3494 2268,0,1 2283,0,-1 2332,0,@268 2385,0,@184 2432,0,@268 2447,0,-1 2457,0,@3491 2480,0,5 2490,0,@184 2500,0,@3495 2547,0,@184 2560,0,@3490 2580,0,5 2590,0,@184 2600,0,@3495 2620,0,@268 2642,0,-1 2652,0,@3491 2672,0,4 2682,0,@184 2692,0,@3496 2717,0,@268 2727,0,1 2737,0,@3491 2784,0,0 2794,0,@3497 2840,0,0 2850,0,@3498 2870,0,0 2885,0,1 2901,0,0 2931,0,@3490 2962,0,@3499 2996,0,@3490 3026,0,@3500 3051,0,-1 3061,0,@3491 3094,0,@3501 3124,0,1 3140,0,-4 3150,0,@1581 3186,0,@3490 3208,0,5 3223,0,@3495 3250,0,0 3270,0,0 3280,0,@3502 3320,0,0 3339,0,1 3349,0,@3491 3378,0,5 3393,0,@3495 3426,0,0 3436,0,@3490 3476,0,0 3499,0,1 3509,0,@3491 3485:O3|@7377,@215,@3486 3486:S27|526567697374657273206d75737420626520646966666572656e74 3487:O3|@7377,@215,@3488 3488:S25|556e696d706c656d656e74656420696e737472756374696f6e 3489:O2|5,0 3490:O1|-15 3491:O1|-12 3492:O3|0,-1,3 3493:O1|11 3494:O3|0,3,3 3495:O1|-3 3496:O1|-4 3497:O2|-17,2 3498:O2|-17,0 3499:O3|0,2,3 3500:O3|0,1,3 3501:O3|0,-4,3 3502:O1|15 3503:S60|5452414e535f54414228292e7075736852656769737465727328352970757368456e747269657328312973617665446972656374496e526567283129 3504:C13,328|90909090909090483b65187303ff55484d8b304983fe13756f4d8b68084983fd03756a50495148ff3348ff730848bb1f000000000000004c89c89090ff152e0100004c8b242441f6c4017503ff55704d89e34981c39000000070f1488b5c24104c89d890ff150e01000048b8a00cefacaa2a0000ff1506010000488b5c241090ff1502010000eb0ae99e000000e9990000004c8b4c241049b80d00000000000000488b5c2408488b44241890ff15de00000048bb1f00000000000000488b442410909090ff15ce000000488b5c241048b89100000000000000909090ff15be00000048b8f821f4acaa2a0000ff15b6000000488b5c241090ff15b20000004c8b4c241049b8010000000000000048bb0b0000000000000048b811000000000000004883c420ff258d0000004d89ca4d89c14989d84889c348b8480aefacaa2a0000ff257900000090|@3509,8191,@3399,@3453,@3439,@3453,@3390,@3399,@3453,@3439,@3453,@3390,@3506|47,0,15 108,0,@1598 153,0,6 180,0,15 209,0,72 228,0,@3505 261,0,0 271,0,5 281,0,8 313,0,@1581 3505:O1|16 3506:C9,336|90909090909090483b65187303ff554850534950495249ff3049ff700849ff3149ff710848bb1f000000000000004c89d0909090ff153e0100004c8b34244983fe01740c49bd0900000000000000eb0a49bd010000000000000041f6c5017503ff55704d89ec4981c49000000070f141f6c4017503ff55704d89e34983c30070f44c8b5424104d89d94d23ca41f6c1017503ff55704d8d4bff4d03ca70f4488b5c24204c89c89090ff15d20000004c8b442438498b384883ff1f751e48b86006edacaa2a00009090ff15ba000000488b5c242090ff15b6000000488b74243040f6c6017503ff55704883fe017d28488b5c2428488b134883fa09751a488b4b084883f901751048b8c823f4acaa2a0000909090ff5558488b44243890ff1576000000488b5c242090ff15720000004c8b4c24204c8b442408488b5c2418488b4424304883c440ff255c00000090909090|@3510,8191,@3399,@3453,@3439,@3453,@3439,@3453,@3390|38,0,15 70,0,4 82,0,0 190,0,@198 264,0,@3507 3507:O3|@7377,@215,@3508 3508:S21|4e6567617469766520737461636b206f6666736574 3509:S26|414d443634434f4445434f4e5328292e67656e4c6f6164283429 3510:S26|414d443634434f4445434f4e5328292e67656e4f704541283529 3511:C13,1280|90909090909090483b65187303ff55484c8b7424104d8b284983fd11750c4d8b60084983fc037502eb0e4883fb0175144983fd0b7502eb0c49bb0100000000000000eb38f6c3017503ff55704881fb01ffffff7c1df6c3017503ff55704881fb010100007d0c49bb0300000000000000eb0a49bbffffffffffffffff4983fd1175164d8b60084983fc03750c48bf0b00000000000000eb034c89ef50534950495249ff700849ff3149ff710849ff3649ff760849535748bb1f00000000000000488b442460909090ff155a0400004c8b6424304983fc0174434c8b5424404d8b0a4983f9117522498b7a084883ff03750c49b80300000000000000eb1649b80100000000000000eb0a49b801000000000000004d89c34983f302eb0a49bb01000000000000004c8b5424104983fa01740c49b90900000000000000eb0a49b9010000000000000041f6c1017503ff55704d89c84981c09000000070f1488b7c24204883ff01740c48be0500000000000000eb0a48be01000000000000004c89c34823def6c3017503ff5570498d58ff4803de70f44889da4923d3f6c2017503ff5570488d53ff4903d370f4488b5c24604889d090ff1576030000488b4c2450488b014883f81f751e48b86006edacaa2a00009090ff155e030000488b5c246090ff155a030000488b44245090ff1556030000488b5c246090ff15520300004c8b6c24084983fd01750c49be0100000000000000eb2e4983fd03750c49be8100000000000000eb1c4983fdff750c49be0101000000000000eb0a49be81010000000000004c8b64241849bb11000000000000004d89e24d23d341f6c2017503ff557050524c89e248d1fa498d43ff48f7ea4c8d50015a5870e64d89f14d23ca41f6c1017503ff55704d8d4eff4d03ca70f441f6c1017503ff55704d89c84983c00870f4488b5c24604c89c09090ff15a6020000488b7424384883fe01750c48bf0100000000000000eb2e4883feff750c48bf8100000000000000eb1c4883fe03750c48bf0101000000000000eb0a48bf8101000000000000488b5c242848ba11000000000000004889d94823caf6c1017503ff55705052488d43ff48d1fa48f7ea488d48015a5870e94889f84823c1a8017503ff5570488d47ff4803c170f44c8b34244989c54d23ee41f6c5017503ff55704c8d68ff4d03ee70f4488b5c24604c89e89090ff15f60100004c8b6424084983fc03751e4c8b5c24604c89db488b4424484c8b5424584883c4704952ff25d50100004983fcff756f4c8b5c246049ba01000000ffffffff4c8b4c244849524d23d141f6c201495a7503ff55704d3bd17f5b49b8010000000100000049514d23c841f6c10149597503ff55704d3bc87d3c498b3b488b3740f6c6017503ff55704889f34883c30870f448891f4d8b43104889f34c89c8eb05e927000000488b5424584883c47052ff255301000048b880c9f3acaa2a0000ff555848b801000000000000004c8b5c24404d8b134983fa11756d4d8b4b084983f90375684c8b44246048bf01000000ffffffff488b742448564823f740f6c6015e7503ff5570483bfe7f5d48bb0100000001000000534823def6c3015b7503ff5570483bf37d41498b10488b0af6c1017503ff55704889c84883c00870f44889024d8b4010eb0ae934000000e92f0000004889cb4889f04c8b7424584883c4704956ff25a800000048b880c9f3acaa2a000090ff555848b8010000000000000048b801000000000000004883c458c2100090909090909090|@3533,8191,@3399,@3453,@3439,@3453,@3439,@3453,@3453,@3453,@3476,@3410,@3410|58,0,0 104,0,1 116,0,-1 142,0,5 184,0,15 243,0,1 255,0,0 267,0,0 286,0,0 307,0,4 319,0,0 361,0,2 373,0,0 458,0,@198 523,0,0 541,0,64 559,0,128 571,0,192 586,0,8 703,0,0 721,0,64 739,0,128 751,0,192 766,0,8 928,0,-2147483648 964,0,2147483648 1055,0,@3391 1068,0,0 1107,0,-2147483648 1141,0,2147483648 1234,0,@3391 1248,0,0 1258,0,0 3512:S24|414d443634434f4445434f4e5328292e67656e5252283529 3513:C13,912|90909090909090483b65187303ff55484983f9ff756f4d8b0a4983f911752e498b7a084883ff037524488b7424084989f24989c148b8a01ef4acaa2a0000488b14244883c41052ff256b030000f6c3017503ff55704889df4883ef0870f4488b7424084889442408488b1c24488934244c89d249ba03000000000000004989d14889d9eb05e9140000004889fb48b8a01ef4acaa2a000051ff25220300004c8b3041f6c6017503ff55704983fe077f054989c5eb614d8b284983fd01750a4d8b60084983fc01741f4d8b1a4983fb01750a4d8b4a084983f901740c49bd103dedacaa2a0000eb3e4983fd07750a4d8b58084983fb0174244d8b0a4983f907750a498b7a084883ff01741149bdf83cedacaa2a0000eb0fe90a00000049bdb027edacaa2a00004d8b4d0049514d0bce41f6c10149597503ff55704d3bce750f498b7d08488b7008483bfe7502eb3b5053495049524955488b5c24304c89e8909090ff15620200004c8b4c24304c8b0424488b5c242048b8a01ef4acaa2a00009090ff154a020000eb0850534950495249554c8b4c243049b80b00000000000000488b1c2448b8101ff4acaa2a0000909090ff1522020000488b5c2408488b134883fa11750c488b4b084883f9037502eb224c8b4c243049b80b0000000000000048b8101ff4acaa2a0000909090ff15ee010000488b4c2408488b014883f81175304c8b71084983fe0375264c8b5424304c8b0c244c8b442410488b5c241848b8482ef4acaa2a000090ff15ba010000eb3248ff342448ff74243849ba01000000000000004989c94c8b442420488b5c242848b8482ef4acaa2a00009090ff158e0100004c8b34244c8b6c24204d8b264d8b5d0049544d0be341f6c401495c7503ff55704d3be375414d8b56084d8b4d084d3bd17534495548ff74243849ba01000000000000004d89e94d89e848bb030000000000000048b8b01ef4acaa2a000090ff1532010000eb5a4d8d7fe84c3b7d107303ff554049c747f8020000004d89fa4d89620849c702dfffffff4d8b4e084983f901740c49b878cbf3acaa2a0000eb0a49b801000000000000004c89c74c8b4424304889fb4c89d0909090ff15de000000488b742408488b1e4883fb11751b488b56084883fa03751148b801000000000000004883c428c20800488b5424304889742430488b4c2428488954242849ba01000000000000004989f14989f048bb030000000000000048b8b01ef4acaa2a00004883c42851ff257a0000009090|@3516,8191,@3506,@3511,@3394,@3517,@3515,@3515,@3506,@3511,@3511,@3397,@3511|54,0,@3490 117,0,1 143,0,@3490 221,0,@268 268,0,@267 285,0,@257 374,0,@3490 407,0,5 421,0,@3495 471,0,5 481,0,@3495 543,0,@3514 571,0,0 594,0,@3514 669,0,0 685,0,1 695,0,@3491 759,0,@3395 771,0,0 828,0,0 865,0,0 881,0,1 891,0,@3491 3514:O1|-13 3515:C7,240|90909090909090483b65187303ff5548504950495148ff3348ff730848bb1f000000000000004c89c8909090ff15e60000004c8b342441f6c6017503ff55704d89f54981c59000000070f1488b5c24104c89e890ff15c6000000488b44242090ff15c2000000488b5c241090ff15be0000004c8b64241849bb11000000000000004d89e24d23d341f6c2017503ff557050524c89e248d1fa498d43ff48f7ea4c8d50015a5870e641f6c2017503ff55704d89d14981c18001000070f14c8b4424084c89cf4923f840f6c7017503ff5570498d79ff4903f870f4488b5c24104889f84883c428ff254d0000009090909090|@3519,8191,@3399,@3453,@3439,@3453,@3453|30,0,15 121,0,8 3516:S27|414d443634434f4445434f4e5328292e67656e53746f7265283629 3517:C7,320|90909090909090483b65187303ff554850495149ff3049ff700848ff3348ff730848bb1f000000000000004c89c89090ff15320100004c8b34244983fe01740c49bd0900000000000000eb0a49bd010000000000000041f6c5017503ff55704d89ec4981c49000000070f141f6c4017503ff55704d89e34983c30070f44c8b5424104d89d94d23ca41f6c1017503ff55704d8d4bff4d03ca70f4488b5c24204c89c89090ff15c6000000488b44242890ff15c2000000488b5c242090ff15be0000004c8b44240848bf11000000000000004c89c64823f740f6c6017503ff557050524c89c248d1fa488d47ff48f7ea488d70015a5870e640f6c6017503ff55704889f34881c38001000070f1488b5424184889d94823caf6c1017503ff5570488d4bff4803ca70f4488b5c24204889c84883c430ff254e000000909090909090|@3518,8191,@3399,@3453,@3439,@3453,@3453|35,0,15 66,0,4 78,0,0 201,0,8 3518:S27|414d443634434f4445434f4e5328292e67656e4f70526567283429 3519:S32|414d443634434f4445434f4e5328292e67656e4f70526567506c757332283429 3520:C19,1104|90909090909090483b65187303ff55484983f901740c49be0500000000000000eb0a49be03000000000000004c8b0b488b3849514c0bcf41f6c10149597503ff55704c3bcf756d488b7308488b5008483bf2756050534950495249ff3249564c89d39090ff150e0400004d8d7fe04c3b7d107303ff554049c747f8030000004c89f948c7411007000000488b04244889410848c701010000004c8b4c24104c8b442418488b5c24284889c890ff15ce030000eb70498b3057480bfe40f6c7015f7503ff5570483bf7755f498b5008488b4808483bd1755750534950495249ff3249564c89d3909090ff159a0300004d8d7fe04c3b7d107303ff554049c747f8030000004c89f848c74010070000004c8b34244c89700848c700010000004c8b4c2410eb0fe98d000000e91a000000e9150000004c8b442420488b5c2428909090ff154a030000eb6e50534950495249ff3249564d89d14989c048b8a01ef4acaa2a000090ff152e0300004d8d7fe04c3b7d107303ff554049c747f8030000004c89fb48c7431007000000488b14244889530848c703010000004c8b4c24104c8b4424184889d9488b5c24284889c89090ff15ea020000488b4424284c8b304983fe0175444c8b68084983fd01753a4c8b44241048bb010000000000000048b8e836f4acaa2a000090ff15ba020000488b5c241048b80300000000000000909090ff15aa020000eb6e4c8b68084983fd017402eb1141f6c6017503ff55704983fe097d02eb564d8d7fd84c3b7d107303ff554049c747f8040000004d89fb49c743180100000049c743100100000049c74308010000004d892b4d8d7ff04c3b7d107303ff554049c747f8010000004d89fc4d891c24eb0fe96b00000049bc010000000000000049564c8b4424184c89e348b8a065f3acaa2a0000909090ff15160200004c8b242441f6c4017503ff55704d89e34981c38001000070f1488b5c24184c89d890ff15f6010000488b5c241848b80300000000000000909090ff15e60100004883c4084c8b5424204c8b4c24284d8b02498b3949504c0bc741f6c00149587503ff55704c3bc7750f498b7208498b5908483bf37502eb29488b742418488b1e53480bdff6c3015b7503ff5570483bdf7566488b5608498b4908483bd17402eb574d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48897a0848c702dfffffff498b49084883f901740c48b878cbf3acaa2a0000eb0a48b801000000000000004c8b4424104889c34889d0909090ff1536010000488b5c241048b8f836f4acaa2a0000909090ff15260100004c8b7424084d8b2e5049554c8b44242048bb010000000000000048b8a00cefacaa2a00009090ff1502010000488b5c242048b8ab00000000000000909090ff15f2000000488b5c242048b8e100000000000000909090ff15e20000004d8d7fe84c3b7d107303ff554049c747f8020000004d89fc49c7442408010000004c8b5c24084d891c24488b5c24204c89e0ff15b2000000488b04244883c440c390|@3524,8191,@3394,@3517,@3394,@3517,@3517,@3517,@3397,@3453,@3397,@3453,@3453,@3397,@3523,@3397,@3453,@3453,@3448|24,0,2 36,0,1 347,0,@3490 469,0,0 479,0,@3521 501,0,1 637,0,0 657,0,@3241 721,0,1 882,0,@3395 894,0,0 929,0,@3522 964,0,0 974,0,@1598 997,0,85 1021,0,112 3521:O1|20 3522:O1|-11 3523:C7,152|90909090909090483b65187303ff55484c8b73604d8b2e4983fd017502eb11505348ff334889d890ff1592000000eb05505348ff33488b4424109090ff1586000000488b5c240890ff1582000000488b5c240848b80100000000000000909090ff15720000004c8b24244d8b1c2441f6c3017503ff55704d89da4983c2fe70f4488b5c24084c89d04883c418ff254e000000909090909090|@3525,8191,@3400,@3439,@3453,@3453,@3457|85,0,0 3524:S27|414d443634434f4445434f4e5328292e7461675465737432283529 3525:S33|414d443634434f4445434f4e5328292e707574436f6e646974696f6e616c283229 3526:C8,280|90909090909090483b65187303ff554841f6c0017503ff55704981f801ffffff7c4341f6c0017503ff55704981f8010100007d31ff1506010000495049514989c048b8c8d2f3acaa2a000090ff15f6000000488b1c24488b4424084883c410ff25eb000000909090ff15ea000000495049514989c048b8380dedacaa2a000090ff15da0000004c8b342449bd01000000ffffffff4c8b64240849544d23e541f6c401495c7503ff55704d3bec7f4e49bb010000000100000049544d23e341f6c401495c7503ff55704d3be37d2f4d8b164d8b0a41f6c1017503ff55704d89c84983c00870f44d89024d8b46104c89cb4c89e04883c410ff256c00000048b880c9f3acaa2a000090ff555848b8010000000000000090909090|@3527,8191,@3440,@3515,@3476,@3440,@3515,@3410|67,0,@3403 119,0,@217 140,0,-2147483648 176,0,2147483648 254,0,@3391 268,0,0 3527:S27|414d443634434f4445434f4e5328292e67656e496d6d6564283429 3528:C23,1240|90909090909090483b65187303ff55484d8b314983fe01750a4d8b69084983fd0174154983fe05750a4d8b69084983fd0174054d89cceb294c8b234983fc03750a4c8b5b084983fb01740c49bcb027edacaa2a0000eb0a49bcd03ff4acaa2a00004983fe01750a4d8b69084983fd01741f505349504951495249544c89d348b8103dedacaa2a0000ff1572040000eb0a505349504951495249544c8b6424104d8b1c244983fb05750b4d8b5424084983fa017416488b5c240848b8e004edacaa2a000090ff153e0400004c8b4c24104c8b0424498b39498b3056480bf740f6c6015e7503ff5570483bfe750d498b5908498b5008483bda7411488b5c24084c89c0909090ff1506040000488b4c2418488b014883f80175714c8b71084983fe01756c4c8b6c24204c8b24244d8b5d004d8b142449534d0bda41f6c301495b7503ff55704d3bda751e4d8b4d084d8b4424084d3bc8751048b8e83ff4acaa2a0000909090ff55584c8b4c24084d89e04889cb48b8a01ef4acaa2a000090ff15960300004c8b4c2408eb0ae956000000e95100000049b80300000000000000488b1c2448b8070000000000000090ff156e0300004c8b54240849b9103dedacaa2a00004c8b44242048bbffffffffffffffff48b8b01ef4acaa2a00009090ff1546030000eb6d4c8b54240849b9103dedacaa2a00004c8b44242048bbffffffffffffffff48b8b01ef4acaa2a0000ff151e0300004c8b4c24084c8b0424488b5c241848b8a01ef4acaa2a00009090ff15060300004c8b4c240849b80300000000000000488b1c2448b80700000000000000eb05e9080000009090ff15e2020000488b5c240848b8f836f4acaa2a0000909090ff15d20200004d8d7fe84c3b7d107303ff554049c747f8020000004d89fe49c746080100000049890649564c8b44241048bb010000000000000048b8a00cefacaa2a0000ff1596020000488b5c241048b8ab00000000000000909090ff1586020000488b5c241048b8d100000000000000909090ff1576020000488b5c2410488b042490ff156e0200004c8b4c241049b8e004edacaa2a000048bbe004edacaa2a000048b8a01ff4acaa2a0000909090ff154a0200004c8b4c241049b80d00000000000000488b5c240848b8201ff4acaa2a0000ff152e0200004c8b6c24304983fd01744748ff74241848ff74241849ba010000000000000049b9103dedacaa2a000049b8103dedacaa2a000048bb030000000000000048b8b01ef4acaa2a0000909090ff15e6010000eb2e4c8b5424104c8b4c241849b8e004edacaa2a000048bb030000000000000048b8b01ef4acaa2a0000ff15be0100004c8b6424184c8b5c24084d8b14244d8b0b49524d0bd141f6c201495a7503ff55704d3bd1750e4d8b442408498b7b084c3bc774544d8d7fe84c3b7d107303ff554049c747f8020000004c89fe4c894e0848c706dfffffff498b5b084883fb01740c48ba78cbf3acaa2a0000eb0a48ba01000000000000004c8b4424104889d34889f0ff153e010000488b742418488b1e4883fb05750a488b56084883fa0174204c8b44241048bb010000000000000048b8301ff4acaa2a000090ff150e010000488b4c2418488b014883f801750a4c8b71084983fe0174234c8b44241048bb010000000000000048b8481ff4acaa2a00004883c438ff25db00000048b801000000000000004883c438c390909090|@3532,8191,@3394,@3394,@3394,@3517,@3526,@3506,@3506,@3517,@3526,@3523,@3397,@3453,@3453,@3448,@3517,@3515,@3511,@3506,@3397,@3397,@3397|77,0,@257 89,0,@3529 128,0,@268 187,0,@184 344,0,@3530 371,0,@3490 405,0,1 419,0,3 441,0,@268 456,0,-1 466,0,@3491 491,0,@268 506,0,-1 516,0,@3491 546,0,@3490 569,0,1 583,0,3 613,0,@3522 674,0,0 684,0,@1598 705,0,85 729,0,104 769,0,@184 779,0,@184 789,0,@3501 813,0,6 828,0,@3496 865,0,0 875,0,@268 885,0,@268 895,0,1 905,0,@3491 936,0,@184 946,0,1 956,0,@3491 1069,0,@3395 1081,0,0 1137,0,0 1147,0,@3497 1193,0,0 1203,0,@3498 1223,0,0 3529:O2|6,0 3530:O3|@7377,@215,@3531 3531:S35|417373657274696f6e206661696c65643a20496e76616c696420726567697374657273 3532:S29|414d443634434f4445434f4e5328292e6469766d6f64576f7264283529 3533:S31|414d443634434f4445434f4e5328292e67656e4f70496e6465786564283729 3534:C5,200|90909090909090483b65187303ff554848f7c001000000756f48f7c301000000756b4989c24989d9498b19498b029090ff15ba0000004883f801740a498b5908498b4208ebc1498b02909090ff15a60000004889c3498b01ff15a2000000534823d8f6c3015b7503ff5570483bd87d4949ff324c89cb498b4208909090e885ffffff4d8d7fe8eb0ae939000000e9330000004c3b7d107303ff554049c747f8020000004c89fa48894208488b04244889024889d04883c408c3498b59084c89d0e942ffffffc3c390|@3535,8077,@3351,@3355,@3355| 3535:S32|5452414e535f54414228292e696e766572736553657428312964696666283229 3536:C3,104|90909090909090483b65187303ff55484c8b70084d8b2e48ff7018495648ff701048ff30495553488b4424284c8b204983fc01750f48b8807bf3acaa2a00004883c430c348bb807bf3acaa2a00004c89e8488d5424309090ff15320000004883c430c39090909090|@3538,8189,@3537|55,0,@3267 70,0,@3267 3537:C12,664|90909090909090483b65187303ff5548a8017503ff55704883f8017d02eb1a4c8b72e04d8b2e504923c5a801587503ff5570493bc57d02eb1b4989c548b860d6ecacaa2a000090ff555849be0100000000000000a8017503ff55704989c54983c50270f44f8b64aefc4d89e64989d54989c44d89f34c89e0ff1542020000498b55e84c8b324983fe01750c49ba0300000000000000eb5c49554954534953504d8b164983fa01750c49ba0100000000000000eb39488b1c24498b0290ff15060200004883f801740c49ba0300000000000000eb194d8b5208483b65187303ff5548ebbf49ba01000000000000004883c408eb0749554954534953488b44241090ff15ca010000488b5c24184c8b73d04983fe01750c48ba0300000000000000eb5d4952504d8b2e4983fd01750c48ba0100000000000000eb3f4d8b5508488b1c24498b4500909090ff158a0100004883f801740c48ba0300000000000000eb184d89d5483b65187303ff5548ebb948ba01000000000000004883c408eb0249524c8b6c24084983fd01752a4c8b24244983fc0174204883fa01741a488b442418ff153a010000488b5424204883c428ff25330100004c8b5c24184983fb01750c49bc1900000000000000eb1241f6c3017503ff55704d89dc4983ec0270f44989d24d89e148bb807bf3acaa2a0000488b44241090ff15f60000004883f80174234c8b4424084983f80175184983fa017412488b4424189090ff15da0000004889c7eb05488b7c24104c8b442420498b70d849514c0bce41f6c10149597503ff55704c3bce753948bb807bf3acaa2a00004889f890ff15a60000004883f801740f48b8807bf3acaa2a00004883c428c34889f84c89c24883c428ff25890000004889fb4c89c84c89c24883c428e976fdffff90909090909090|@3540,8189,@3299,@3351,@3299,@3351,@3299,@3539,@3351,@3299,@3351,@3539|62,0,@49 76,0,0 141,0,1 170,0,0 202,0,1 229,0,0 279,0,1 303,0,0 342,0,1 368,0,0 450,0,12 486,0,@3267 584,0,@3267 610,0,@3267 3538:S36|5452414e535f54414228292e67657441636365707461626c655265676973746572283229 3539:C4,296|90909090909090483b65187303ff55484989d44989c34c89d8909090ff152e010000a8017503ff55704883f8017d02eb1b498b5424e04c8b32504923c6a801587503ff5570493bc67d02eb124889c248b860d6ecacaa2a00009090ff5558a8017503ff55704989c54983c50270f44ac744aafc030000004d8d7fe84c3b7d107303ff554049c747f8020000004d89fe49c74608010000004d891e4d8d7ff04c3b7d107303ff554049c747f8010000004d89fd4d8975004d8b7424e84d8b164d89e04c89df4889c64c89d34c89e8909090ff1582000000498b58e84889034883fe01750c48ba1900000000000000eb1240f6c6017503ff55704889f24883ea0270f4498b40f04889104d8b70f84d8b2e41f6c5017503ff55704d89ec4983ec0270f44d89264889f8c3|@3541,8189,@3355,@3376|81,0,@49 229,0,12 3540:S47|5452414e535f54414228292e67657441636365707461626c65526567697374657228322966696e6446726565283229 3541:S47|5452414e535f54414228292e67657441636365707461626c655265676973746572283229616c6c6f63526567283129 3542:C7,272|90909090909090483b65187303ff554850524c8b72f84d8b6ef8498b5d20488b42e89090ff150e0100004c8b2424488b5c2408498b4424d8ff15020100004883f8017402eb304c8b1c244d8b53f84d8b52d04c8b4c240849b8807bf3acaa2a0000498b5be848b8f5ffffffffffffff90ff15d20000004c8b0c24498b41f0488d54241090ff15c60000004c8b0424498b78f84d8d7fe84c3b7d107303ff554049c747f8020000004c89fe488b5c240848895e0848c706050000004d8d7fd84c3b7d107303ff554049c747f8040000004c89fa498b48d048894a1848b8807bf3acaa2a0000488942104d8b70e04c8972084889324d8b68f04989d04c89eb488b47d84883c410ff254d0000009090909090|@3544,8191,@3353,@3351,@3484,@3543,@3276|89,0,@3267 103,0,-6 220,0,@3267 3543:C7,440|90909090909090483b65187303ff55484c8b72f04d8b6ef84d8b65f84d8b5c24384d8b13504923c2a801587503ff5570493bc27d6f4989d14989c04c89c3498b44241890ff159601000048f7c0010000007556488b18488b134883fa03756e4d8b71f04c8b5310488b7808488b7010488b4818488b4308498b5ee890ff15660100004883f80174714d8b71f04d8b6ef84d8b65f8495149504952575651498b5c2420eb0ae9ff000000e9ca000000498b46e89090ff15360100004c8b5c24284d8b53f04d8b4af84d8b41f8eb05e99c000000498b5820498b43f89090ff15160100004d8d7fe04c3b7d107303ff554049c747f803000000eb05e9660000004c89ff488b74241848897710498b5bf848895f0848c707030000004d8d7fd84c3b7d107303ff554049c747f8040000004c89fa488b0c2448894a18488b442408488942104c8b7424104c89720848893a4989d0488b5c2420498b41d89090ff159e000000eb1c4951495050505050eb124951495050505050eb084951495050505050488b7c242040f6c7017503ff55704889fe4883c60270f44889f0488b5424284883c430e95ffeffff48b80100000000000000c39090909090|@3546,8191,@428,@3351,@3353,@3545,@3276|426,0,0 3544:S57|5452414e535f54414228292e7075736852656769737465727328352970757368456e747269657328312973617665526567496e526567283129 3545:C3,264|90909090909090483b65187303ff5548ff151a010000a8017503ff55704883f8017d02eb194c8b334d8b2e504923c5a801587503ff5570493bc57d02eb1a4989c548b860d6ecacaa2a0000ff555849be0100000000000000a8017503ff55704889c24883c20270f44d8b6c96fc4d89ee4983fe01751c488b53184c8b2a41f6c5017503ff55704d89ec4983ec0270f44c892241f6c6017503ff55704d89f44983c40270f4a8017503ff55704883f8017d02eb19488b134c8b32504923c6a801587503ff5570493bc67d02eb1848b860d6ecacaa2a000090ff555848b80100000000000000a8017503ff55704989c54983c50270f44e8964aafc48b80100000000000000c390909090|@3547,7181,@3355|67,0,@49 80,0,0 206,0,@49 220,0,0 251,0,0 3546:S70|5452414e535f54414228292e7075736852656769737465727328352970757368456e747269657328312973617665526567496e5265672831297265674368616e676564283129 3547:S19|5452414e535f54414228292e696e6372283229 3548:S59|5452414e535f54414228292e7075736852656769737465727328352970757368456e7472696573283129736176655265674f6e537461636b283129 3549:O2|@268,@3550 3550:O2|@257,@3551 3551:O2|@184,@3552 3552:O2|@267,@3553 3553:O2|@3529,@3554 3554:O2|@3556,@3555 3555:O2|@3558,@3557 3556:O2|7,0 3557:O2|@261,@3559 3558:O2|0,1 3559:O2|@3561,@3560 3560:O2|@1992,@3562 3561:O2|2,1 3562:O2|@3564,@3563 3563:O2|@3566,@3565 3564:O2|4,1 3565:O2|@3567,0 3566:O2|5,1 3567:O2|6,1 3568:O2|@3579,@3360 3569:C5,496|90909090909090483b65187303ff554841f6c0017503ff55704983f8017d6d4c8b4060498b38488b7038488b0ef6c1017503ff55704989ce4983ee0270f4525053574c89f048bae851f4acaa2a000090ff124c8b2c244c8b60104983fc01746b5049554c8b500848b801000000000000004c89d2ff124c8b4c24204889c3498b41189090ff158e010000eb05e99f00000048f7c001000000753b488b781840f6c7017503ff55704889fe4883c60270f4488b1c24534823def6c3015b7503ff5570483bf37e0a4989f0eb0ee9420000004989d8eb044c8b0424488b7c2408495048b80100000000000000488b17909090ff124c8b2c244883c418483b65187303ff5548e94effffff49bb01000000000000004d89eb4d89d8488b5c2408488b442410488b5424184883c420e9d7feffff4c8b70604d8b2e49504d23c541f6c00149587503ff55704d3bc57d124989c448b8f053f4acaa2a00009090ff55584d8b2649504d0bc441f6c00149587503ff55704d3bc4750b48b80100000000000000c35250534950488b52089090ff124883f8017402eb3d48b80100000000000000ff157a000000488b5c240890ff15760000004c8b5c24104d8b53604d8b0a41f6c1017503ff55704d89c84983c00270f44d89024c8b0424488b5c2408488b442410488b5424184883c420e918feffff90|@3578,8191,@428,@3299,@3394|71,0,@3570 105,0,0 226,0,0 266,0,0 337,0,@3576 376,0,0 408,0,0 3570:O1|@3571 3571:C2,176|a8017503ff55704883f8017c0c49be0300000000000000eb0a49be01000000000000004d8d7fe04c3b7d107303ff554049c747f8030000004d89fd49bce052f4acaa2a00004d89650049bce851f4acaa2a00004d896510498945084d8d7fe84c3b7d107303ff554049c747f8020000004d89fc49bb8053f4acaa2a00004d891c2449894424084d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c8970104c8960084c8928c3909090909090|@3575,7681|15,0,1 27,0,0 61,0,@3572 75,0,@3570 117,0,@3574 3572:C2,48|90909090909090483b65187303ff55484c8b720841f6c6017503ff55704d89f54983ed0270f44c89e8488b5210ff2290|@3573,8191| 3573:S34|5452414e535f54414228292e696e64446f776e746f28322970726576283129283129 3574:C2,8|488b4208c3909090|@3573,5| 3575:S31|5452414e535f54414228292e696e64446f776e746f28322970726576283129 3576:O3|@7377,@215,@3577 3577:S32|707573685265676973746572733a20756e707573686564207265676973746572 3578:S25|5452414e535f54414228292e616c69676e537461636b283329 3579:C2,184|90909090909090483b65187303ff55484c8b70604d8b2e4d8d7fe04c3b7d107303ff554049c747f8030000004d89fc49bb6055f4acaa2a00004d891c2449894424104d896c24085049554989c24989d949b801000000000000004c89e348b80100000000000000488b520890ff124c8b5424084d8b4a604d8b01488b3c2449504c0bc741f6c00149587503ff55704c3bc7750c48be0300000000000000eb0a48be01000000000000004889f04883f0024883c410c3909090|@3588,8191|49,0,@3580 82,0,0 95,0,0 149,0,1 161,0,0 3580:C3,264|90909090909090483b65187303ff55484c8b72104989d14889c3498b46189090ff150a0100004883f801751848b8a856f4acaa2a000090ff555848b80100000000000000488b18488b134883fafb753f4c8b73084d8b690849554d23ee41f6c501495d7503ff55704d3bf57e1748b80057f4acaa2a0000ff555848b8010000000000000048b80100000000000000c34c8b701841f6c6017503ff55704983fe017c324d8b690849554d23ee41f6c501495d7503ff55704d3bf57d1948b85857f4acaa2a00009090ff555848b801000000000000004d8b690849554d0bee41f6c501495d7503ff55704d3bf5750b48b80300000000000000c348b80100000000000000c39090909090|@3587,8077,@428|46,0,@3581 60,0,0 111,0,@3583 124,0,0 134,0,0 189,0,@3585 204,0,0 239,0,1 250,0,0 3581:O3|@7377,@215,@3582 3582:S33|70757368416e79456e747279417443757272656e7453503a206e6f20656e747279 3583:O3|@7377,@215,@3584 3584:S40|70757368416e79456e747279417443757272656e7453503a20656e7472792061626f766520727370 3585:O3|@7377,@215,@3586 3586:S39|70757368416e79456e747279417443757272656e7453503a20756e70757368656420656e747279 3587:S52|5452414e535f54414228292e70757368416e79456e747279417443757272656e74535028322973656c656374456e747279283129 3588:S38|5452414e535f54414228292e70757368416e79456e747279417443757272656e745350283229 3589:O2|2,@3267 3590:S7|70757368526567 3591:O2|2,@184 3592:C12,368|90909090909090483b65187303ff5548488b4220a8017503ff55704883f80b7d0c49be0100000000000000eb10a8017503ff55704989c64983ee0a70f44989d24d89f148bb807bf3acaa2a000048b8807bf3acaa2a000090ff153a0100004883f8017448498b4208ff1532010000a8017503ff55704889c34883eb0270f44889da498b5a104889d0ff151a01000049524d8b42104c89cb48b8807bf3acaa2a0000909090ff1506010000eb714952505049514d8b4210498b7a08498b72184c8d54240849b901000000000000004c89c34989f04889da4889fb4889d048ba705af4acaa2a00009090ff15ca000000488b4c241849b8ffffffffffffffff488b5c2410488b410848ba40a1f3acaa2a0000ff15aa000000488b442418eb05e938000000488b40089090ff159a0000004c8b742418498b5e1090ff15920000004c8b6c24184d8b4510488b1c24488b442408ff15820000004883c4184c8b2424498b4424084883c408ff2573000000909090|@3657,8191,@3351,@3658,@3659,@3661,@3595,@3345,@3658,@3659,@3661,@3656|35,0,0 69,0,@3267 79,0,@3267 153,0,@3267 197,0,0 222,0,@3593 245,0,-1 264,0,@3343 3593:O2|@3595,@3594 3594:O2|@3646,@3360 3595:C14,664|90909090909090483b65187303ff554850504889d74889c64889d949524c89c3488b4118ff15960200004883f801756e5756514950495148ff711848bbffffffffffffffff4c89c0ff157a0200004889c348b8d05df4acaa2a000090ff156e0200004d8d7fe04c3b7d107303ff554049c747f8030000004d89fe4989461049bd280aedacaa2a00004d896e0849bcf8e36cadaa2a00004d89264c89f0eb05e903000000ff55584c8d7424084d89064c8d6c2408498945084c8b64241049ff342449ff74240849ff74241049ff7424184c89c3488b41189090ff15fa0100004883f801751848b8005ef4acaa2a000090ff555849bb01000000000000004c8b50084983fa03750c49bb0300000000000000eb0a49bb010000000000000049505148ff7118495156495357488b5c2450488b134883fa05756d4983f901751f488b4c24584c8b73084c89314c89410848b801000000000000004883c470c34983fb0174724d8d7fe84c3b7d107303ff554049c747f8020000004c89f848c74008010000004c8b73084c8930495690ff154e0100004989c84889c348b8485ef4acaa2a0000eb05e992000000909090ff15360100004c8b6c24604c8b24244d8965004c8b5c24384d895d0848b80100000000000000eb05e9050000004883c478c348bb807bf3acaa2a0000488b442440909090ff15fa0000004883f801741f488b5c245848b80100000000000000488d542470ff15e20000004883c470c3488b5c245848b80100000000000000488d54247090ff15ca0000004883c470c348bb807bf3acaa2a0000488b4424409090ff15b60000004883f801741f488b5c245848b80100000000000000488d542470ff159e0000004883c470c3488b5c245848b80100000000000000488d54247090ff15860000004883c470c390|@3605,8191,@428,@305,@303,@428,@3606,@3370,@3314,@3608,@3602,@3314,@3608,@3602|61,0,-1 83,0,@3596 128,0,@215 142,0,@7377 230,0,@3597 244,0,0 264,0,1 276,0,0 335,0,0 410,0,@3599 458,0,0 480,0,@3267 515,0,0 546,0,0 573,0,@3267 607,0,0 638,0,0 3596:S28|70737461636b5265616c456e7472793a206e6f7420656e7472793a20 3597:O3|@7377,@215,@3598 3598:S23|6c6173745265666572656e63653a206e6f20656e747279 3599:O1|@3600 3600:C2,16|48b80300000000000000c39090909090|@3601,1|2,0,1 3601:S42|5452414e535f54414228292e72656d6f766552656769737465727346726f6d4361636865283229283129 3602:C12,760|90909090909090483b65187303ff55484c8b72905253488b5aa0488b42b8498b56089090ff124c8b6c24084d8b65b84989c1498b5df0498b44241890ff15de0200004883f801751848b86062f4acaa2a000090ff555848b801000000000000004c8b442408498b78a84883ff017568488b084c8b5008488b701048ff701848bb807bf3acaa2a00004889f090ff15960200004883f8017457488b194883fb03750f4889f248be0300000000000000eb594883fbfb753e488b5108f6c2017503ff55704883fa017c144889f048be0300000000000000eb2de944000000498b40984989f64889c64883f6024c89f0eb15e91a0000004889f248be01000000000000004889d04889c2eb30e92b0000004889f348be01000000000000004889daeb1948be010000000000000048ff7018488b50104c8b5008488b084883fe01743449515149525256498b40b84d8b70c049b803000000000000004c89f348ba40a1f3acaa2a0000909090ff15c20100004889c3eb1148bb010000000000000049515149525256488b7424384c8b4eb84c8b46c0488b5c2420488b46a09090ff1596010000488b5c24384d8d7fe84c3b7d107303ff554049c747f8020000004c89fa488b4c242048894a0848c702050000004c8b43b84889d348b84858f4acaa2a0000ff155a0100004c8b34244983fe01746f4989c148bb807bf3acaa2a0000488b4424089090ff153e0100004883f801741c4c8b442438498b78b84951488b5f20488b442410ff1526010000eb0249514c8b4424404d8d7fd84c3b7d107303ff554049c747f8040000004c89ff488b74243048897718488b5c242848895f10eb05e96c000000488b54241848895708488b4c242048890f498b40b04d8b70f04989f84c89f390ff15ce0000004c8b6c24404d8b65b8498b5c2420488b442428909090ff15ba0000004c8b5c244049b8ffffffffffffffff498b5bc0498b43b848ba40a1f3acaa2a000090ff159a000000eb01504c8b6c24384c8b6424284d8965004c8b1c244d895d0848b801000000000000004883c448c39090|@3615,8191,@428,@3351,@3345,@3610,@3266,@3314,@3353,@3276,@3545,@3345|74,0,@3603 88,0,0 128,0,@3267 166,0,1 205,0,1 249,0,0 275,0,0 290,0,0 336,0,1 349,0,@3343 373,0,0 472,0,@3590 501,0,@3267 685,0,-1 703,0,@3343 745,0,0 3603:O3|@7377,@215,@3604 3604:S24|6c6f6164456e7472793a20656e7472792064656c65746564 3605:S24|5452414e535f54414228292e6c6f6164456e747279283529 3606:C3,248|90909090909090483b65187303ff554849be01000000000000004883f80175054d89f5eb544d8d7fe84c3b7d107303ff554049c747f8020000004d89fd49c74508010000004c8b204d8965004c8b40084c89f34c89e89090ff15c20000004989c64c89c0483b65187303ff5548ebab49bd0100000000000000495549bc01000000000000004983fd0175054d89e3eb2e41f6c4017503ff55704d89e24983c20270f44d8b6d084d89d4483b65187303ff5548ebd149bb01000000000000004983fb1b750f48b801000000000000004883c408c34d8d7ff04c3b7d107303ff554049c747f8010000004c89f84c8b14244c89104883c408c390|@3607,8141,@3378|18,0,0 113,0,0 125,0,0 182,0,0 198,0,0 3607:S24|5452414e535f54414228292e6c697374546f536574283129 3608:C6,312|90909090909090483b65187303ff5548488b42a84883f80174594d8d7fd84c3b7d107303ff554049c747f8040000004d89fd4c8b62c84d89651849bb807bf3acaa2a00004d895d104c8b5ad84d895d084c8b52e04d89550052534d89e8488b5af0488b42b0909090ff15f20000004989c6eb224c8b72b84989d34989da498b5e20498b43d0909090ff15da0000004989c6495349524c8b4c24084d8d7fe84c3b7d107303ff554049c747f8020000004d89f8498b79d04989780849c700050000004c89c64d8b41b84889f348b84858f4acaa2a0000909090ff1592000000488b5c24085049b8ffffffffffffffff488b53b8488b4bc04889cb4889d048ba40a1f3acaa2a00009090ff156a000000488b4424104c8b7424084c8b68d04d892e4c8b24244d89660848b801000000000000004883c418c39090|@3609,8191,@3276,@3545,@3266,@3345|60,0,@3267 205,0,@3590 230,0,-1 254,0,@3343 297,0,0 3609:S43|5452414e535f54414228292e6c6f6164456e74727928352975736543616368655265676973746572283229 3610:C23,1408|90909090909090483b65187303ff554850504889c74889de4c89c3498b411890ff15820500004883f801756e57564950495149ff715048bbffffffffffffffff4c89c090ff15660500004889c348b8d05df4acaa2a000090ff155a0500004d8d7fe04c3b7d107303ff554049c747f8030000004c89fb4889431048ba280aedacaa2a00004889530848b9f8e36cadaa2a000048890b4889d8eb05e903000000ff55584889e34c89034889e248894208488b4c240848bb807bf3acaa2a0000488b41109090ff15f60400004883f801744f4889f3488b411090ff15ea0400004883f8017430574950495149ff71504989fa4989f149b8807bf3acaa2a0000488b591048b8f5ffffffffffffff90ff15be040000eb60574950495149ff7150eb5a488b014c8b304983fe057553574950495149ff715048ff70084889f3488b042490ff15920400004883f80174684989fa4989f149b8807bf3acaa2a0000488b1c2448b8f5ffffffffffffff9090ff156e040000eb74e99f030000e99a0300004983fefd7535574950495149ff71504989fa4989f14c8b400848bb807bf3acaa2a000048b8f5ffffffffffffff90ff1536040000eb6fe95b0300004983fe0175694d8d7fe84c3b7d107303ff554049c747f8020000004d89fd4c8b264d89650849c745001b000000eb05e9270300004d8d7fd84c3b7d107303ff554049c747f8040000004d89fb49c743180100000049c743100300000049c74308010000004c8b5608eb0ae9eb020000e9570000004d89134d8d7ff04c3b7d107303ff554049c747f8010000004c89fb4c891b574950495149ff715048ff70084989f84c89e89090ff158a0300004c8b44242048bb0100000000000000488b0424909090ff1576030000eb6e4983fe037522574950495149ff71504989f94989f0488b5808488b4010909090ff1556030000eb6e4983fefb756d4d8b69604d8b650041f6c4017503ff55704d89e34983eb0270f449baf1ffffffffffffff4c89db4923daf6c3017503ff557050524c89da48d1fa498d42ffeb05e91802000048f7ea488d58015a5870df488b50084989d44c23e341f6c4017503ff55704989d4eb0ae9ef010000e9300000004c2be34d8d64240170e4574950495149ff71504989f94989f048bb606cf4acaa2a00004c89e09090ff15b6020000eb714c8b680849f7c50100000075064d8b6500eb1948b8105ff0acaa2a00009090ff555849bc0100000000000000574950495149ff7150505049544c89e3498b4118ff15760200004883f801756e5648bbffffffffffffffff488b442408ff15620200004889c348b8d05df4acaa2a0000eb05e9440100009090ff154e0200004d8d7fe04c3b7d107303ff554049c747f8030000004d89fb4989431049ba280aedacaa2a00004d89530849b9f8e36cadaa2a00004d890b4c89d8eb05e903000000ff55584c8d5c24084c8b14244d8913488d5c240848894308488b542410488b0a488b014883f8fb75704d8b71604d8b2e41f6c5017503ff55704d89ec4983ec0270f449bbf1ffffffffffffff4d89e24d23d341f6c2017503ff557050524c89e248d1fa498d43ff48f7ea4c8d50015a5870e6488b59084989dd4d23ea41f6c5017503ff55704989dd4d2bea4d8d6d0170f14983fd01752aeb05e94b0000004989f94989f048bb606cf4acaa2a000048b8a01ef4acaa2a000090ff1556010000eb364989fa4989f149b8606cf4acaa2a00004c89eb48b8b01ef4acaa2a0000909090ff1536010000eb0e48b8786cf4acaa2a000090ff55584883c418504883c408504883c40849b8ffffffffffffffff488b5c2410488b44240848ba40a1f3acaa2a00009090ff15fa0000004c8b24244983fc017427488b442418909090ff15ea0000004c8b44240848bbd86cf4acaa2a00004883c430ff25d900000048b801000000000000004883c430c39090|@3619,8191,@428,@305,@303,@3314,@3314,@3484,@3314,@3484,@3620,@3397,@3616,@3504,@3504,@428,@305,@303,@3517,@3506,@3345,@3368,@3269|56,0,-1 79,0,@3596 124,0,@215 138,0,@7377 182,0,@3267 245,0,@3267 259,0,-6 340,0,@3267 354,0,-6 409,0,@3267 419,0,-6 621,0,0 718,0,-8 831,0,@3611 873,0,@2029 888,0,0 931,0,-1 955,0,@3596 1008,0,@215 1022,0,@7377 1111,0,-8 1209,0,@3611 1219,0,@3490 1244,0,@3611 1257,0,@3491 1278,0,@3612 1306,0,-1 1326,0,@3343 1373,0,@3614 1393,0,0 3611:O2|4,0 3612:O3|@7377,@215,@3613 3613:S48|6c6f616450737461636b456e7472793a20636f6e7461696e657220656e747279206973206e6f74206f6e20737461636b 3614:S15|6c6f616450737461636b456e747279 3615:S41|5452414e535f54414228292e6c6f6164456e7472792835297573654e65775265676973746572283229 3616:C4,336|90909090909090483b65187303ff55484c8b70404d8b2e49f7c50100000075584d8b65004d8b1c244d8b0b4983f901751748b8d06ef4acaa2a0000ff555849ba01000000000000004d8b53084d8d7fe84c3b7d107303ff554049c747f8020000004c89ff4c89570848c707030000004889f8ff25000100004c8b60584d8b1c2450534950495449534983fb01750c49ba0100000000000000eb3a4c8b4c24104d8b03498b7920498b7020483bfe750c49ba0300000000000000eb194d8b5b08483b65187303ff5548ebbe49ba01000000000000004983fa017402eb304d8d7fe84c3b7d107303ff554049c747f8020000004c89fb488b142448895308488b4c241048890b488b4424084889184d8d7fe84c3b7d107303ff554049c747f8020000004d89fe4c8b6c24204d896e0849c706010000004c8b442410488b5c24184c89f04883c428ff25350000009090909090|@3645,8191,@3638,@3638|51,0,@3617 64,0,0 144,0,0 177,0,1 204,0,0 3617:O3|@7377,@215,@3618 3618:S28|63736567416464723a206e6f74206120636f6465207365676d656e74 3619:S30|5452414e535f54414228292e6c6f616450737461636b456e747279283429 3620:C99,6008|90909090909090483b65187303ff55484c8b334d8b2949554d0bee41f6c501495d7503ff55704d3bf575234c8b63084d8b59084d3be375164883f8f174104889c748b8e81df4acaa2a0000ff555848f7c001000000741e4883f8e77c1d4883f8197f1c49bcd66ff4acaa2a00004d8d64846441ffe4e9dc000000e9d7000000e9d20000009090e96d080000909090e92c140000909090e9d4060000909090e904160000909090e9ab000000909090e9ee010000909090e9720c0000909090e9ad000000909090e98b120000909090e95c140000909090e9530a0000909090e973000000909090e932060000909090e9f2030000909090e971070000909090e9ee0e0000909090e94b090000909090e9d9110000909090e96b100000909090e9df0a0000909090e9b6060000909090e923000000909090e91b000000909090e9be040000909090e92a080000909090e99012000090909048b8381ef4acaa2a0000909090ff555848b8010000000000000049f7c001000000745a49f7c00100000074054d89c3eb1948b86055edacaa2a00009090ff555849bb010000000000000041f6c3017503ff55704d8d43ff4d03c370f441f6c0017503ff55704c89c74883c70270f44d89d04889fb4c89c8ff25cd1500004d8d7fe84c3b7d107303ff554049c747f8020000004d89fb4d896b0849c7031b0000004d8d7fd84c3b7d107303ff554049c747f8040000004c89ff48c747180100000048c747100300000048c7470801000000498b71084889374d8d7ff04c3b7d107303ff554049c747f8010000004c89fa48893a495049524d89d04889d34c89d8909090ff154a1500004d8d7fe84c3b7d107303ff554049c747f8020000004c89f9488b4424084889410848c701030000004c8b042448bb01000000000000004889c84883c410ff250f15000049f7c001000000746549f7c00100000074054d89c3eb1848b86055edacaa2a000090ff555849bb010000000000000041f6c3017503ff55704981fb010000807c6d48bf010000800000000049534c23df41f6c301495b7503ff55704c3bdf7d6d49f7c001000000740a4c89c6eb1de95901000048b86055edacaa2a000090ff555848be010000000000000040f6c6017503ff5570488d56ff4803d670f4f6c2017503ff55704889d14883c102eb05e91901000070edf6c1017503ff55704881f901ffffff7c18f6c101750aeb05e9fa000000ff55704881f9010100007c6f4952514d89d048bb010000000000000048b8088af4acaa2a0000909090ff1516140000488b44240849be01000000ffffffff4c8b2c2449554d23ee41f6c501495d7503ff55704d3bf57f5549bc010000000100000049544d23e541f6c401495c7503ff55704d3bec7d364c8b18eb05e9450000004d8b1341f6c2017503ff55704d89d14983c10870f44d890b4c8b40104c89d34c89e84883c410ff25a113000048b880c9f3acaa2a00009090ff555848b801000000000000004952514d89d048bb010000000000000048b8188af4acaa2a00009090ff156e130000488b5c2408488b04244883c410ff2563130000495049524d89d048bb010000000000000048b8a00cefacaa2a0000ff154a130000488b1c2448b86b00000000000000ff153e1300004d8d7fe84c3b7d107303ff554049c747f8020000004d89fb4c8b5424084d89530849c703030000004c8b042448bb78a6edacaa2a00004c89d84883c410ff250313000049f7c00100000074054d89c3eb1948b86055edacaa2a00009090ff555849bb0100000000000000534951495249534c89d3488b44241890ff15ce120000504c8b4c24104c8b442418488b5c242048b8a01ef4acaa2a0000ff15b61200004c8b54240841f6c2017503ff55704d8d4aff4d03ca70f44d89c84c8b4c2410488b5c241848b8ffffffffffffffffff158a120000488b7c241048ff3748bb1f000000000000004889f890ff1576120000488b3424488b1ef6c3017503ff55704889da4883c20470f4488b4c24084889c84823c2a8017503ff55704889c8482bc2488d400170f14989c448b8e01ef4acaa2a0000909090ff15321200004954488b5c2420909090ff152a120000488b5c2420488b04244883c438ff251f12000049f7c00100000074054d89c3eb1948b86055edacaa2a00009090ff555849bb0100000000000000534951495249534c89d3488b44241890ff15ea110000504c8b4c24104c8b442418488b5c242048b8a01ef4acaa2a0000ff15d21100004c8b54240841f6c2017503ff55704d8d4aff4d03ca70f44d89c84c8b4c2410488b5c241848b80700000000000000ff15a6110000488b7c241048ff3748bb1f000000000000004889f890ff1592110000488b3424488b1ef6c3017503ff55704889da4883c20470f4488b4c24084889c84823c2a8017503ff55704889c8482bc2488d400170f14989c448b8e01ef4acaa2a0000909090ff154e1100004954488b5c2420909090ff1546110000488b5c2420488b04244883c438ff253b11000049f7c00100000074054d89c3eb1948b86055edacaa2a00009090ff555849bb010000000000000041f6c3017503ff55704d8d43ff4d03c370f44c89c74989d84889fb48b8b01ef4acaa2a0000ff25f110000049f7c00100000074054d89c3eb1748b86055edacaa2a0000ff555849bb010000000000000041f6c3017503ff55704d8d43ff4d03c370f448bf01000000000000004c89c64823f740f6c6017503ff55704889fe492bf0488d760170f14989d84889f348b8b01ef4acaa2a0000ff258710000049f7c00100000074054d89c3eb1948b86055edacaa2a00009090ff555849bb010000000000000041f6c3017503ff55704d8d43ff4d03c370f441f6c0017503ff55704c89c74883c70270f449514952574d89d14c8b44241048b8a01ef4acaa2a000090ff15261000004c8b4c24084c8b0424488b5c241048b805000000000000004883c418ff250c10000049f7c00100000074054d89c3eb1a48b86055edacaa2a0000909090ff555849bb010000000000000041f6c3017503ff55704d8d43ff4d03c370f441f6c0017503ff55704c89c74883c70270f449514952574d89d14c8b44241048b8a01ef4acaa2a000090ff15aa0f00004c8b4c24084c8b0424488b5c241048b803000000000000004883c418ff25900f000049f7c00100000074054d89c3eb1a48b86055edacaa2a0000909090ff555849bb01000000000000004951495249534d89d14c8b44241048b8a01ef4acaa2a0000ff15520f00004c8b142441f6c2017503ff55704d8d4aff4d03ca70f44d89c84c8b4c2408488b5c241048b8f9ffffffffffffff4883c418ff25230f000049f7c00100000074054d89c3eb1948b86055edacaa2a00009090ff555849bb010000000000000041f6c3017503ff55704983fb017d02eb1141f6c3017503ff55704983fb7f7f02eb164d89d048bb03000000000000004c89c8ff25cc0e00004951495249534989d848bbffffffffffffffff48b8b01ef4acaa2a0000909090ff15ae0e00004c8b4c240849b80900000000000000488b5c241048b8288af4acaa2a0000ff15920e0000488b5c2408488b042490ff158a0e00004c8b4c240849b80300000000000000488b5c241048b805000000000000004883c418ff256a0e000049f7c00100000074054d89c3eb1848b86055edacaa2a000090ff555849bb010000000000000041f6c3017503ff55704983fb017d02eb1141f6c3017503ff55704983fb7f7f02eb164d89d048bb03000000000000004c89c8ff25140e00004951495249534d89d14c8b44241048b8a01ef4acaa2a0000ff15fe0d00004c8b4c240849b80b00000000000000488b5c241048b8288af4acaa2a0000ff15e20d0000488b5c2408488b042490ff15da0d00004c8b4c240849b80300000000000000488b5c241048b805000000000000004883c418ff25ba0d000049f7c00100000074054d89c3eb1848b86055edacaa2a000090ff555849bb01000000000000004951495249534d89d14c8b44241048b8a01ef4acaa2a0000ff157e0d00004c8b4c240849b80f00000000000000488b5c241048b8288af4acaa2a0000ff15620d00004c8b142441f6c2017503ff55704983fa017d02eb1141f6c2017503ff55704983fa7f7f02eb0c49b97f00000000000000eb034d89d1488b5c24084c89c890ff15260d00004c8b4c240849b80300000000000000488b5c241048b805000000000000004883c418ff25060d000049f7c00100000074054d89c3eb1848b86055edacaa2a000090ff555849bb0100000000000000534951495249534c89d3488b44241890ff15d20c00004c8b14244983fa057502eb104989c148b8388af4acaa2a0000ff5558504c8b5424104c8b4c24184c8b44242048bbffffffffffffffff48b8b01ef4acaa2a00009090ff15920c00004c8b4c24104c8b442420488b5c241848b8c01ef4acaa2a000090ff157a0c00004c8b4c241049ff3148bb1f000000000000004c89c890ff15660c00004c8b0424498b3840f6c7017503ff55704889fe4883c60470f4488b5c24084889da4823d6f6c2017503ff55704889da482bd6488d520170f14889d148b8e01ef4acaa2a000090ff15220c000051488b5c2420ff151e0c0000488b5c2420488b04244883c438ff25130c000049f7c00100000074054d89c3eb1948b86055edacaa2a00009090ff555849bb010000000000000041f6c3017503ff55704983fb017f1948b8808af4acaa2a00009090ff555849b801000000000000005349514952495349b8010000000000000048bf0300000000000000488b3424564823f740f6c6015e7503ff5570483bfe7d3f40f6c7017503ff5570488d5fff4803df70f441f6c0017503ff55704c89c24883c20270f44889df4989d0483b65187303ff5548ebb449b8010000000000000056480bf740f6c6015e7503ff5570483bfe7502eb1a48b8808af4acaa2a0000909090ff555849b801000000000000004983f80175234c8b4c24084c8b442410488b5c241848b8a01ef4acaa2a00004883c420ff25030b00004983f803754d488b5c2410488b54242048895c2420488b4c2408488b44241848894c241849ba01000000000000004989c14989c048bbffffffffffffffff48b8b01ef4acaa2a00004883c41852ff25b80a00004983f8057554488b5c2410488b54242048895c2420488b4c2408488b44241848894c241849ba03000000000000004989c149b8807bf3acaa2a000048bbfbffffffffffffff48b8b01ef4acaa2a00004883c41852ff25660a00004983f8077554488b5c2410488b54242048895c2420488b4c2408488b44241848894c241849bafdffffffffffffff4989c149b8807bf3acaa2a000048bbf3ffffffffffffff48b8b01ef4acaa2a00004883c41852ff25140a000049504c8b4c24104c8b442418488b5c242048b8a01ef4acaa2a000090ff15fa0900004c8b4c241049b80900000000000000488b5c241848b8288af4acaa2a0000ff15de090000488b5c2410488b042490ff15d609000048bb0300000000000000488b5424084889d94823caf6c1017503ff55704889d9482bca488d490170f14c8b5424104c8b4c24184c8b4424184889cb48b8b01ef4acaa2a00004883c428ff258f09000049f7c00100000074054d89c3eb1948b86055edacaa2a00009090ff555849bb010000000000000041f6c3017503ff55704983fb017f1948b8808af4acaa2a00009090ff555849b801000000000000005349514952495349b8010000000000000048bf0300000000000000488b3424564823f740f6c6015e7503ff5570483bfe7d3f40f6c7017503ff5570488d5fff4803df70f441f6c0017503ff55704c89c24883c20270f44889df4989d0483b65187303ff5548ebb449b8010000000000000056480bf740f6c6015e7503ff5570483bfe7502eb1a48b8808af4acaa2a0000909090ff555849b801000000000000004983f80175234c8b4c24084c8b442410488b5c241848b8a01ef4acaa2a00004883c420ff257f08000049504c8b4c24104c8b442418488b5c242048b8a01ef4acaa2a0000ff15660800004c8b4c241049b80b00000000000000488b5c241848b8288af4acaa2a0000ff154a080000488b5c2410488b042490ff15420800004c8b4c241049b80300000000000000488b5c241848b805000000000000004883c428ff252208000049f7c00100000074054d89c3eb1848b86055edacaa2a000090ff555849bb010000000000000041f6c3017503ff55704983fb017f1948b8808af4acaa2a00009090ff555849b801000000000000005349514952495349b8010000000000000048bf0300000000000000488b3424564823f740f6c6015e7503ff5570483bfe7d3f40f6c7017503ff5570488d5fff4803df70f441f6c0017503ff55704c89c24883c20270f44889df4989d0483b65187303ff5548ebb449b8010000000000000056480bf740f6c6015e7503ff5570483bfe7502eb1a48b8808af4acaa2a0000909090ff555849b8010000000000000040f6c6017503ff55704889f34883eb0270f4f6c3017503ff5570488d53ff4803d370f4f6c2017503ff55704889d14883c10270f4514c8b4c24104c8b442418488b5c242048b8a01ef4acaa2a00009090ff15e60600004c8b4c24104c8b0424488b5c241848b803000000000000004883c428ff25cc06000049f7c00100000074054d89c3eb1a48b86055edacaa2a0000909090ff555849bb010000000000000049b811000000000000004c89df4923f840f6c7017503ff557050524c89da48d1fa498d40ff48f7ea488d78015a5870e64c89ce4d89d14989f04889f8ff256a06000049f7c00100000074054d89c3eb1848b86055edacaa2a000090ff555849bb0100000000000000495149524989d84c89db48b8c01ff4acaa2a0000ff15320600004c8b5424084c8b4c24104c895424104c8b04244c894424084c89d749ba01000000000000004c89ce4989f94989f848bb030000000000000048b8b01ef4acaa2a00004883c40856ff25ed050000495149524d89d14c8b44240848b8f1ffffffffffffff909090ff15d60500004c8b0c2449b80900000000000000488b5c240848b8288af4acaa2a000090ff15ba050000488b1c2448b81100000000000000ff15ae0500004c8b0c2449b80b00000000000000488b5c240848b8288af4acaa2a000090ff1592050000488b1c2448b81100000000000000ff15860500004c8b5c24084c8b5424104c895c24104c8b0c244c894c24084d89d049ba01000000000000004d89d94c89c74d89d848bb030000000000000048b8b01ef4acaa2a00004883c40857ff2541050000495149524989d848bbffffffffffffffff48b8c01ff4acaa2a00009090ff15260500004c8b5c24084c8b5424104c895c24104c8b0c244c894c24084d89d049ba01000000000000004d89d94c89c74d89d848bb030000000000000048b8b01ef4acaa2a00004883c40857ff25e1040000534951495248ff3348ff730848bb1f000000000000004c89d0ff15ca0400004c8b1c2441f6c3017503ff55704d89da4981c29000000070f1488b5c24104c89d090ff15aa04000048b8a065f3acaa2a0000ff15a2040000488b5c241090ff159e0400004c8b4c241049b80100000000000000488b5c240848b8ffffffffffffffffff1582040000488b5c241048b82100000000000000909090ff15720400004c8b4c24104c8b442418488b5c242048b8010000000000000090ff155a040000488b5c241048b8c88af4acaa2a0000909090ff154a0400004d8d7fe84c3b7d107303ff554049c747f8020000004d89f949c741080100000049890149514c8b4c241849b80700000000000000488b5c242048b8201ff4acaa2a0000909090ff1506040000488b5c2418488b042490ff15fe0300004c8b442420488b7c24304c89442430488b742418488974242849ba01000000000000004d89c148bb030000000000000048b8b01ef4acaa2a00004883c42857ff25c103000053495149524d89d149b8d88af4acaa2a000048bb0100000000000000488b442410ff15a2030000504c8b44240848bb0700000000000000488b44241090ff158e030000488b44240890ff158a03000050488b5c2410488b442408909090ff157e0300004c8b4c24104c8b442418488b5c242048b8010000000000000090ff156603000048ff74241848ff74241849ba01000000000000004c8b4c24284c8b44242848bb030000000000000048b8b01ef4acaa2a0000ff1536030000488b5c2410488b04244883c428ff252b030000909090|@3631,8191,@3632,@3397,@3638,@3397,@3410,@3397,@3476,@3397,@3453,@3638,@3640,@3517,@3526,@3399,@3439,@3453,@3476,@3640,@3517,@3526,@3399,@3439,@3453,@3476,@3506,@3506,@3517,@3526,@3517,@3526,@3517,@3526,@3632,@3506,@3515,@3476,@3526,@3632,@3517,@3515,@3476,@3526,@3517,@3515,@3476,@3526,@3640,@3506,@3517,@3399,@3439,@3453,@3476,@3517,@3511,@3511,@3511,@3517,@3515,@3476,@3506,@3517,@3517,@3515,@3476,@3526,@3517,@3526,@3504,@3506,@3511,@3504,@3515,@3476,@3515,@3476,@3511,@3506,@3511,@3399,@3453,@3439,@3453,@3390,@3453,@3504,@3523,@3515,@3448,@3511,@3642,@3632,@3630,@3448,@3504,@3511,@3448|67,0,@3485 101,0,$3620+134 344,0,@3487 360,0,0 393,0,@336 408,0,0 652,0,0 698,0,@336 712,0,0 740,0,1073741824 790,0,@336 804,0,0 903,0,0 913,0,@3621 937,0,-2147483648 972,0,2147483648 1057,0,@3391 1072,0,0 1088,0,0 1098,0,@3622 1142,0,0 1152,0,@1598 1172,0,53 1232,0,@617 1269,0,@336 1284,0,0 1332,0,@3490 1384,0,-1 1408,0,15 1485,0,@3493 1553,0,@336 1568,0,0 1616,0,@3490 1668,0,3 1692,0,15 1769,0,@3493 1837,0,@336 1852,0,0 1889,0,@3491 1919,0,@336 1932,0,0 1960,0,0 2003,0,@3491 2033,0,@336 2048,0,0 2107,0,@3490 2138,0,2 2172,0,@336 2188,0,0 2247,0,@3490 2278,0,1 2312,0,@336 2328,0,0 2352,0,@3490 2403,0,-4 2437,0,@336 2452,0,0 2499,0,1 2527,0,-1 2537,0,@3491 2561,0,4 2576,0,@3623 2613,0,1 2628,0,2 2662,0,@336 2676,0,0 2723,0,1 2756,0,@3490 2777,0,5 2792,0,@3623 2829,0,1 2844,0,2 2878,0,@336 2892,0,0 2916,0,@3490 2937,0,7 2952,0,@3623 3006,0,63 3041,0,1 3056,0,2 3090,0,@336 3104,0,0 3151,0,@3624 3180,0,-1 3190,0,@3491 3223,0,@3492 3248,0,15 3327,0,@3493 3389,0,@336 3404,0,0 3429,0,@3626 3444,0,0 3461,0,0 3471,0,1 3557,0,0 3588,0,@3626 3604,0,0 3635,0,@3490 3691,0,0 3707,0,-1 3717,0,@3491 3774,0,1 3787,0,@3267 3797,0,-3 3807,0,@3491 3864,0,-2 3877,0,@3267 3887,0,-7 3897,0,@3491 3935,0,@3490 3957,0,4 3972,0,@3623 4004,0,1 4063,0,@3491 4097,0,@336 4112,0,0 4137,0,@3626 4152,0,0 4169,0,0 4179,0,1 4265,0,0 4296,0,@3626 4312,0,0 4343,0,@3490 4380,0,@3490 4401,0,5 4416,0,@3623 4453,0,1 4468,0,2 4502,0,@336 4516,0,0 4541,0,@3626 4556,0,0 4573,0,0 4583,0,1 4669,0,0 4700,0,@3626 4716,0,0 4794,0,@3490 4826,0,1 4860,0,@336 4876,0,0 4886,0,8 4966,0,@336 4980,0,0 5000,0,@3502 5043,0,0 5062,0,1 5072,0,@3491 5105,0,-8 5128,0,4 5143,0,@3623 5164,0,8 5184,0,5 5199,0,@3623 5220,0,8 5263,0,0 5282,0,1 5292,0,@3491 5320,0,-1 5330,0,@3502 5375,0,0 5394,0,1 5404,0,@3491 5437,0,15 5496,0,@3241 5529,0,0 5544,0,-1 5565,0,16 5599,0,0 5621,0,@3628 5682,0,3 5697,0,@3496 5757,0,0 5770,0,1 5780,0,@3491 5809,0,@3629 5819,0,0 5846,0,3 5915,0,0 5942,0,0 5962,0,1 5972,0,@3491 3621:O1|17 3622:O1|-18 3623:O1|3 3624:O3|@7377,@215,@3625 3625:S24|4d756c7469706c79206e6f7420696d706c656d656e746564 3626:O3|@7377,@215,@3627 3627:S18|4e6f74206120706f776572206f662074776f 3628:O1|6 3629:O2|-1,@3628 3630:C4,200|90909090909090483b65187303ff55484c8b70604d8b2e4983fd01750c49bc0100000000000000eb1a5048ff700848ffb080000000909090ff15b20000004989c4eb0c5048ff700848ffb0800000004c8b1c244d8b1349c703010000004c8b4c24084d8b014983f80174084c89d04883c418c34952488b5c241848b818f8f3acaa2a0000ff156e000000488b7c241048c707030000004d8d7fe84c3b7d107303ff554049c747f8020000004c89fe488b1c2448895e084889064889f04883c420c390909090909090|@3644,8191,@3400,@3523|31,0,0 124,0,@3447 3631:S24|414d443634434f4445434f4e5328292e67656e5249283529 3632:C4,216|90909090909090483b65187303ff55484d8d7fe84c3b7d107303ff554049c747f8020000004d89fe4c8b284d896e0849c7061b0000004d8d7fd84c3b7d107303ff554049c747f8040000004d89fc49c74424180100000049c74424100300000049c7442408010000004c8b58084d891c244d8d7ff04c3b7d107303ff554049c747f8010000004d89fa4d89225349504c89d34c89f0909090ff15620000004c8b0c244d8b01498b3840f6c7017503ff55704889fe4883c61070f44989304d8b41104889fb488b4424084883c410ff25350000009090909090|@3634,8191,@3397,@3633| 3633:C4,368|90909090909090483b65187303ff5548a8017503ff55704883f8017c0c49be0300000000000000eb0a49be01000000000000004983fe0375054989c5eb2549beffffffffffffff014989c54d23ee41f6c5017503ff55704989c54d2bee4d8d6d0170f15053495048bb01000000000000024c89e848baf02d6000000000009090ff1248bb010200000000000048ba302e6000000000009090ff124883f8017502eb2ba8017503ff55704883f8017c0c49bd0300000000000000eb0a49bd01000000000000004983fd037402eb054989c5eb13a8017503ff55704989c54981c50002000070f1495549b90f000000000000004c8b442410488b5c2418488b442408ff15920000004c8b2c2441f6c5017503ff55704983fd017d1741f6c5017503ff55704d89ec4981c40002000070f1eb034d89ec4c8b5c241041f6c3017503ff55704d89da4983c20e70f449b903000000000000004d89d04c89e3488b4424084883c420ff253700000090909090909090|@3636,8191,@3635,@3635|31,0,1 43,0,0 64,0,72057594037927935 105,0,72057594037927936 118,0,I109 132,0,256 142,0,I110 177,0,1 189,0,0 233,0,7 332,0,1 3634:S27|414d443634434f4445434f4e5328292e67656e4d6f766549283329 3635:C3,376|90909090909090483b65187303ff55484983f901750b48b80100000000000000c350534950495148bb0102000000000000488b44241048ba302e600000000000ff124883f8017502eb2ba8017503ff55704883f8017c0c49be0300000000000000eb0a49be01000000000000004983fe037402eb054989c6eb13a8017503ff55704989c64981c60002000070f149f7c60100000074054d89f5eb1249f646ff104d8b2e740349f7dd4f8d6c2d014d89ee4981e6ff0100004d89f0488b5c2408488b442418ff15d60000004c8b6c241041f6c5017503ff55704983fd017c0c49bc0300000000000000eb0a49bc01000000000000004983fc0375054d89ebeb1541f6c5017503ff55704d89eb4981ebfe01000070f148bb01020000000000004c89d848baf02d60000000000090ff124c8b54240841f6c2017503ff55704d89d14983c10270f44c8b042441f6c0017503ff55704c89c74883ef0270f44c89ce4989f94989f04889c3488b4424184883c420e992feffff909090|@3637,8191,@3416|24,0,0 41,0,256 56,0,I110 89,0,1 101,0,0 224,0,1 236,0,0 278,0,256 291,0,I109 3636:S25|414d443634434f4445434f4e5328292e736574363473283329 3637:S27|414d443634434f4445434f4e5328292e7365744279746573283429 3638:C4,448|90909090909090483b65187303ff554848f7c30100000075424d8ba8980000004d8b650041f6c4017503ff55704d89e34983c30270f44d895d004d8b65004d8d7ff04c3b7d107303ff554049c747f8010000004d89fe4d8926eb034989de4989c54889d848baf02c6000000000009090ff124989c44983f4024d89e34983f302498b5070488b02a8017503ff55704989c44983c40270f44c8922498b004c8b204d8d7fe04c3b7d107303ff554049c747f8030000004d89fa4d896a104d8962084d89324d8b70184d8b2e4d8d7fe84c3b7d107303ff554049c747f8020000004d89fc4d896c24084d8914244d89264983fb01742f4c8b1841f6c3017503ff55704d89da4983c21070f44c89104d8b40104c89db48b80300000000000000ff25c50000004883fbff750c49bbf7ffffffffffffffeb0a49bb030000000000000049ba01000000ffffffff49524d23d341f6c201495a7503ff55704d3bd37f4749b9010000000100000049534d23d941f6c301495b7503ff55704d3bd97d28488b3840f6c7017503ff55704889fe4883c60870f44889304d8b40104889fb4c89d8ff254b00000048b880c9f3acaa2a0000ff555848b8010000000000000090909090|@3639,8191,@3633,@3410|102,0,I105 277,0,1 299,0,-5 311,0,1 321,0,-2147483648 352,0,2147483648 423,0,@3391 436,0,0 3639:S32|414d443634434f4445434f4e5328292e616464436f6e7374546f566563283329 3640:C12,504|90909090909090483b65187303ff55484c8b304983fe0175474c8b68084983fd01753d5348ff334989d848bb010000000000000048b8e836f4acaa2a00009090ff15da010000488b5c240848b80300000000000000909090ff15ca010000eb6e4c8b68084983fd017402eb1141f6c6017503ff55704983fe097d02eb564d8d7fd84c3b7d107303ff554049c747f8040000004d89fb49c743180100000049c743100100000049c74308010000004d892b4d8d7ff04c3b7d107303ff554049c747f8010000004d89fc4d891c24eb0fe96b00000049bc01000000000000005348ff3349564989d84c89e348b8a065f3acaa2a000090ff15360100004c8b242441f6c4017503ff55704d89e34981c38001000070f1488b5c24104c89d890ff1516010000488b5c241048b80300000000000000909090ff15060100004883c408488b5c240848b8f836f4acaa2a0000909090ff15f20000004c8b14244d8b0a5049514c8b44241848bb010000000000000048b8a00cefacaa2a0000909090ff15ce000000488b5c241848b8ab00000000000000909090ff15be000000488b5c241848b8e100000000000000909090ff15ae0000004d8d7fe84c3b7d107303ff554049c747f8020000004d89f849c7400801000000488b7c2408498938488b5c24184c89c09090ff157e000000488b04244883c420c39090909090|@3641,8191,@3397,@3453,@3397,@3453,@3453,@3523,@3397,@3453,@3453,@3448|44,0,0 54,0,@3521 77,0,1 213,0,0 235,0,@3241 297,0,1 325,0,@3522 359,0,0 369,0,@1598 393,0,85 417,0,112 3641:S27|414d443634434f4445434f4e5328292e7461675465737431283229 3642:C10,504|90909090909090483b65187303ff554848f7c30100000074054989deeb1d4989c648b86055edacaa2a0000ff55584c89f349be01000000000000005050498b184883fbff7563495149ff700849b801000000000000004889c348b8201ff4acaa2a000090ff15b6010000488b5c240848b80300000000000000909090ff15a6010000488b5c2408488b042490ff159e010000488d542410488902488d4c241048c7410801000000eb6c4883fb03756b41f6c6017503ff5570498d56ff4903d670f4f6c2017503ff55704889d14883c10270f4495149ff70084989c84889c348b8fdffffffffffffffff154a010000488b5c2408488b042490ff15420100004c8d7424104989064c8d6c241049c7450801000000eb6ee9ae000000498b5008488b0a4883f90d7502eb234883f9eb7502eb135049514956524c89cb9090ff1506010000eb0e504951495652eb06504951495652488b442408a8017503ff55704c8d70ff4c03f070f441f6c6017503ff55704d89f54983c50270f44c8b4c24104d89e8eb05e940000000488b5c241848b8fdffffffffffffff90ff15b2000000488b5c2410488b042490ff15aa0000004c8d642420498904244c8d5c242049c74308010000004883c4104d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b5424104c89104c8b4c24184c8948084883c420c39090|@3643,8191,@3515,@3461,@3523,@3526,@3523,@3640,@3526,@3523|35,0,@336 51,0,0 78,0,0 91,0,@3496 113,0,1 224,0,-2 399,0,-2 3643:S37|414d443634434f4445434f4e5328292e636f6d70617265416e644272616e63685249283429 3644:S38|414d443634434f4445434f4e5328292e756e636f6e646974696f6e616c4272616e6368283129 3645:S28|414d443634434f4445434f4e5328292e636f6465436f6e7374283329 3646:C14,616|90909090909090483b65187303ff554852505348ff705048ff750849be329bf4acaa2a000049566a014889650848bb0100000000000000488b402090ff154e0200004989c148bb807bf3acaa2a00004c89c89090ff153e0200004883f80174054d89c8eb744d8d7fe84c3b7d107303ff554049c747f8020000004d89f848bf409cf4acaa2a0000498938488b7424284989700849504989f048bb0100000000000000488b04249090ff15f2010000488b5c2430488b532048bb01000000000000004889d0ff15de0100004889c148bb807bf3acaa2a0000eb05e9ca0000004889c8909090ff15c60100004883f80174054989c8eb6a488b4424384c8b5424304c8b4c242849b8010000000000000048bb689df4acaa2a00004c8b700848b801000000000000004c89f2909090ff124c8b44243048bb0100000000000000488b0424909090ff156e0100004c8b6c243048bb0100000000000000498b4520eb05e940000000ff15560100004989c148bb807bf3acaa2a00004c89c89090ff15460100004883f80174054d89c8eb1748b8f09df4acaa2a0000ff555849b801000000000000004883c408488b7c24184883ff0174294950488b4424289090ff150e0100004c8b44243048bb389ef4acaa2a0000909090ff15fe000000eb024950488b042448ff742418488f45084883c440c39090488b304883fe0375314889c348b858d4ecacaa2a0000909090ff555848b80100000000000000eb124889c348b801000000000000004883c420c350488b4424109090ff15a60000004c8b44241848bb389ef4acaa2a0000909090ff1596000000488b042490ff555848b8010000000000000090909090|@3655,8191,@3536,@3314,@3370,@3536,@3314,@3370,@3536,@3314,@3368,@3269,@3368,@3269|29,0,$3646+498 47,0,0 71,0,@3267 127,0,@3647 154,0,0 185,0,0 207,0,@3267 262,0,0 272,0,@3649 286,0,0 309,0,0 337,0,0 367,0,@3267 399,0,@3652 412,0,0 457,0,@3654 512,0,@45 528,0,0 543,0,0 577,0,@3654 604,0,0 3647:C6,136|90909090909090483b65187303ff5548488b4208488b482048bb01000000000000004889c8909090ff15820000004989c148bb807bf3acaa2a00004c89c89090ff15720000004883f801741349514889cb4c89c8ff15660000004989c0eb0c49b80100000000000000495148bb807bf3acaa2a0000488b04244883c408ff25450000009090909090|@3648,8191,@3536,@3314,@3353,@3351|26,0,0 51,0,@3267 97,0,0 109,0,@3267 3648:S52|5452414e535f54414228292e676574416e795265676973746572283229722d756e74696c536f6d657468696e6746726565283129 3649:O1|@3650 3650:C2,16|48b80300000000000000c39090909090|@3651,1|2,0,1 3651:S25|5452414e535f54414228292e70757368416c6c283229283129 3652:O3|@7377,@215,@3653 3653:S17|4e6f206672656520726567697374657273 3654:S14|676574416e795265676973746572 3655:S29|5452414e535f54414228292e676574416e795265676973746572283229 3656:C2,40|4c8b702849c706030000004c8b2849c745000300000048b80100000000000000c390909090909090|@3669,6145|24,0,0 3657:S27|475f434f444528292e636f646567656e2831302965786974283129 3658:C2,8|4c8b7060498b06c3|@2227,4097| 3659:C2,48|4c8b73604d8b2e4d89ec4c23e041f6c4017503ff55704d8d65ff4c03e070f44d892648b80100000000000000c3909090|@3660,7177|36,0,0 3660:S29|414d443634434f4445434f4e5328292e7265736574537461636b283229 3661:C6,480|90909090909090483b65187303ff55484c8b304983fe11750a4c8b68084983fd03740f48b828a2f4acaa2a00009090ff55584883fb01752049ff700848bb010000000000000048b868a2f4acaa2a0000ff15b2010000eb7049bc11000000000000004989db4d23dc41f6c3017503ff557050524889da48d1fa498d4424ff48f7ea4c8d58015a5870e549ff70084950495348bb010000000000000048b878a2f4acaa2a0000909090ff156201000048bb0102000000000000488b042448ba302e600000000000eb05e9f9000000909090ff124883f8017502eb2ba8017503ff55704883f8017c0c49ba0300000000000000eb0a49ba01000000000000004983fa037402eb054989c2eb13a8017503ff55704989c24981c20002000070f1488b5c24084c89d0909090ff15ea0000004c8b142441f6c2017503ff55704983fa017c0c49b90300000000000000eb0a49b901000000000000004983f90375054d89d0eb1541f6c2017503ff55704d89d04981e8fe01000070f148bb01020000000000004c89c048baf02d6000000000009090ff12488b5c240890ff1582000000488b3c2440f6c7017503ff55704881ffffff00007e0e48b888a2f4acaa2a000090ff55584883c410488b342448c7060300000048b801000000000000004883c408c3|@3668,8191,@3397,@3397,@3453,@3476|37,0,@3662 62,0,0 72,0,@3664 90,0,8 147,0,0 157,0,@3665 176,0,256 190,0,I110 233,0,1 245,0,0 323,0,1 335,0,0 377,0,256 390,0,I109 438,0,@3666 467,0,0 3662:O3|@7377,@215,@3663 3663:S14|57726f6e6720617267756d656e74 3664:O1|-19 3665:O1|19 3666:O3|@7377,@215,@3667 3667:S23|52657475726e206f666673657420746f6f206c61726765 3668:S37|414d443634434f4445434f4e5328292e72657475726e46726f6d46756e6374696f6e283329 3669:S22|5452414e535f54414228292e65786974696e67283129 3670:C7,240|90909090909090483b65187303ff554849f7c001000000752b52505349ff304c8b0424488b5a10488b420848ba98aaf3acaa2a0000909090ff15da0000004c8b3424eb22525053488b5a10488b420848ba885af4acaa2a0000909090ff15be0000004989c6504c8b6c241849564d8b4d104d89f0488b5c2410488b4424189090ff15a20000004c8b6424204d8d7fe84c3b7d107303ff554049c747f8020000004d89fb4c8b14244d89530849c703050000004d8b4424084c89db48b84858f4acaa2a0000ff15660000004c8b4c24204989c0488b1c24498b41089090ff15560000004c89c04883c428c3909090909090|@3672,8191,@3361,@3646,@3673,@3266,@3671|45,0,@3359 81,0,@3594 188,0,@3590 3671:C2,16|48b80100000000000000c39090909090|@3680,9|2,0,0 3672:S33|475f434f444528292e636f646567656e2831302963616c6c676574766563283329 3673:C22,816|90909090909090483b65187303ff5548a8017503ff55704989c64983c60270f449bd11000000000000004d89f44d23e541f6c4017503ff557050524c89f248d1fa498d45ff48f7ea4c8d60015a5870e649be01000000000000004d89e54d23ee41f6c5017503ff55704d89f54d2bec4d8d6d0170f15053495049514d89ca49b908a9f4acaa2a000049b808a9f4acaa2a00004c89eb48b8b01ef4acaa2a000090ff15b20200004c8b142449b908a9f4acaa2a000049b8881ef4acaa2a000048bb210000000000000048b820a9f4acaa2a00009090ff1586020000488b1c2448b840a9f4acaa2a0000ff157a0200004d8d7fe84c3b7d107303ff554049c747f8020000004d89fc49c7442408010000004989042449544c8b44240848bb010000000000000048b8a00cefacaa2a00009090ff153a020000488b5c240848b8ab00000000000000909090ff152a020000488b5c240848b88100000000000000909090ff151a020000488b5c2408488b042490ff151202000048bb1f00000000000000488b442408909090ff1502020000488b5c240848b89300000000000000909090ff15f201000048b850a9f4acaa2a0000ff15ea010000488b5c240890ff15e60100004c8b4c240849b8010000000000000048bb0f0000000000000048b8f1ffffffffffffff909090ff15c20100004c8b5c240849ba01000000ffffffff4c8b4c242049524d23d141f6c201495a7503ff55704d3bd17f4d49b8010000000100000049514d23c841f6c10149597503ff55704d3bc87d2e498b3b488b3740f6c6017503ff55704889f34883c30870f448891f4d8b43104889f34c89c890ff1556010000eb0e48b880c9f3acaa2a000090ff5558488b5424184883fa01746e48bb1f00000000000000488b442408ff152e010000488b5c240848b89300000000000000909090ff151e01000048b860a9f4acaa2a0000ff1516010000488b5c240890ff15120100004c8b4c240849b8010000000000000048bb0f0000000000000048b8ffffffffffffffffeb05e916000000ff15ea000000488b5c2408488b442418ff15e20000004c8b4c24084c8b44241048bb08a9f4acaa2a000048b8a01ef4acaa2a00004883c428ff25c20000009090|@3679,8191,@3506,@3506,@3523,@3397,@3453,@3476,@3448,@3399,@3453,@3439,@3453,@3390,@3410,@3399,@3453,@3439,@3453,@3390,@3476,@3517|34,0,8 82,0,0 128,0,@3674 138,0,@3674 151,0,@3491 172,0,@3674 182,0,@3489 192,0,16 202,0,@3675 224,0,@3676 284,0,0 294,0,@1598 317,0,85 341,0,64 376,0,15 405,0,73 424,0,@3677 457,0,0 467,0,7 477,0,-8 501,0,-2147483648 537,0,2147483648 614,0,@3391 639,0,15 665,0,73 684,0,@3678 717,0,0 727,0,7 737,0,-1 786,0,@3674 796,0,@3490 3674:O2|7,1 3675:O3|0,-2,3 3676:O1|10 3677:O1|-14 3678:O1|12 3679:S29|414d443634434f4445434f4e5328292e616c6c6f6353746f7265283429 3680:S28|5452414e535f54414228292e636f6e7461696e734c6f63616c283229 3681:C7,560|90909090909090483b65187303ff55484883fb017461a8017503ff55704883f8017d594c8b42184c89c34823d8f6c3017503ff5570498d58ff4803d870f4f6c3017503ff55704883fb0b7d6df6c3017503ff55704883fb017d02eb25488b42104c8b30534923def6c3015b7503ff5570493bde7d0ceb21e9fe000000e9aa00000048b860d6ecacaa2a0000ff555848b90100000000000000f6c3017503ff55704889d94883c10270f44c8b7488fc4c89f14983f9017407eb2be9300000005149b803000000000000004889cb488b420848ba40a1f3acaa2a00009090ff1576010000eb0151488b04244883c408c348b9f1ffffffffffffff4989c64c23f141f6c6017503ff557050524889c248d1fa488d41ff48f7ea4c8d70015a5870e64c89f3488b4208ff25350100004989d04889c3498b4008909090ff152a0100004983f9017402eb2a50498b780849b803000000000000004889c34889f848ba40a1f3acaa2a0000909090ff1502010000eb0150488b04244883c408c34d8d7fe04c3b7d107303ff554049c747f8030000004d89fe49bd60acf4acaa2a00004d892e4c8b62084d8966104c8b5a204d895e084989c24d8d7fd84c3b7d107303ff554049c747f8040000004c89f84c8b42304c8940184c8960104c8970084c8910524951488b5238ff12488b3c244883ff017434488b742408488b5e284883fb0175255049b8ffffffffffffffff488b5e20488b460848ba40a1f3acaa2a0000ff1556000000eb0150488b04244883c418c39090|@3685,8191,@3345,@3686,@3684,@3345,@3345|131,0,@49 144,0,0 193,0,1 210,0,@3343 240,0,-8 333,0,1 349,0,@3343 404,0,@3682 514,0,-1 532,0,@3343 3682:C3,72|90909090909090483b65187303ff55485249b80300000000000000488b5a08488b421048ba40a1f3acaa2a0000909090ff153a0000004c8b3424498b46084883c408c39090909090|@3683,8191,@3345|19,0,1 37,0,@3343 3683:S37|475f434f444528292e636f646567656e283130296c6f63616464722834296465632d283129 3684:C3,32|90909090909090483b65187303ff5548488b4040ff252e000000909090909090|@3691,7949,@428| 3685:S30|475f434f444528292e636f646567656e283130296c6f6361646472283429 3686:C3,48|90909090909090483b65187303ff5548535048b80100000000000000488d542410909090ff152e0000004883c410c390|@3689,8191,@3687|20,0,0 3687:C5,312|90909090909090483b65187303ff55484c8b72f04d8b6e384d8b6500504923c4a801587503ff5570493bc47c3d4d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b62f84c89600848c700fbffffff4d89f04889c348b8a8aff4acaa2a0000ff25f60000004989d14989c04c89c3498b461890ff15ea00000048f7c0010000007571488b38488b374883fefb756a488b5f08498b51f853480bdaf6c3015b7503ff5570483bda752e495049b80300000000000000488b1c24498b41f048ba40a1f3acaa2a000090ff159e000000488b04244883c408c341f6c0017503ff55704c89c14883c10270f44889c84c89cae90fffffffe91d00000041f6c0017503ff55704c89c34883c30270f44889d84c89cae9edfeffff41f6c0017503ff55704c89c74883c70270f44889f84c89cae9d0feffff90|@3690,8191,@3266,@428,@3345|92,0,@3688 177,0,1 195,0,@3343 3688:S9|70757368537461636b 3689:S24|5452414e535f54414228292e70757368537461636b283229 3690:S33|5452414e535f54414228292e70757368537461636b283229736561726368283129 3691:S27|5452414e535f54414228292e70737461636b466f72446563283229 3692:C2,88|4989c64d8d7fc04c3b7d107303ff554049c747f8070000004c89f849bde8b0f4acaa2a00004c89284c8b6a204c8968304c8b62184c89602848895820488b5a1048895818488b4a08488948104c897008c390909090909090|@3699,7183|29,0,@3693 3693:C3,280|90909090909090483b65187303ff554850504989d64989c549b8010000000000000048bb810000000000000048b80b0000000000000048ba7015600000000000ff1248c700090000004d8d7fe84c3b7d107303ff554049c747f8020000004d89f84989400849c700ffffffff4d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89ff4c89074889e348893b4889e248c74208010000004d8d7fe84c3b7d107303ff554049c747f8020000004c89f9488b04244889014c8b4424084c8941084956495551498b7e084883ff01750f48b801000000000000004883c428c348ff7708488b07488d54243090ff154a000000488b3c244883c408483b65187303ff5548ebc548b801000000000000004883c430c3|@3697,8191,@3694|26,0,0 36,0,64 46,0,5 56,0,I11 214,0,0 267,0,0 3694:C6,1368|90909090909090483b65187303ff55484c8b3049f7c601000000741e4983feef7c1d4983fe157f1c49bd8ab2f4acaa2a00004f8d6cb54441ffe5e9ab000000e9a6000000e9a100000090e955040000909090e99c030000909090e98b000000909090e9dd030000909090e9b1000000909090e959020000909090e96b000000909090e963000000909090e919030000909090e969000000909090e94b000000909090e943000000909090e93b000000909090e9bd010000909090e92b000000909090e939020000909090e91b000000909090e91e000000909090e92a020000909090e97102000090909048b80100000000000000c348b80100000000000000c35248ff7010488b4008e8f9feffff488b0424488b5424084883c410e9e7feffff4c8b70104983fe03755e4c8b680841f6c5017503ff55704983fd017d6f4c8b62e84d8b5c24184d89da4d23d541f6c2017503ff55704d8d53ff4d03d570f441f6c2017503ff55704983fa0b7d6d4c8b48204983f901746841f6c2017503ff55704983fa017d07eb29e9ba0000004d8b442410498b3849524c23d741f6c201495a7503ff55704c3bd77d07eb1ce94e00000048b860d6ecacaa2a0000ff555848b8010000000000000041f6c2017503ff55704c89d64883c602eb0ae915000000e91000000070e8498b5cb0fc4889d8488b52e0ff2248b80100000000000000c34989d14d89e8488b78204c89c3498b41d8ff156a0300004883f80175204883ff01741a498b71e84c89c3488b4620909090ff1552030000498b51e0ff2248b80100000000000000c34c8b6ae84d8b65304983fc0175144c8b58204983fb01740a498b4528488b52e0ff2248b80100000000000000c35248ff7008488b4010e885fdffff4c8b24244983fc01750f48b801000000000000004883c410c349ff742408498b0424488b542410e859fdffff4c8b24244883c408483b65187303ff5548ebc548b801000000000000004883c418c35248ff701049b80300000000000000488b5808488b42d890ff15a2020000488b0424488b5424084883c410e907fdffff488b4008e9fefcffff524c8b60084983fc01750f48b801000000000000004883c408c349ff742408498b0424488b542408e8d1fcffff4c8b24244883c408483b65187303ff5548ebc548b801000000000000004883c410c3524c8b60084983fc01750f48b801000000000000004883c408c349ff742408498b0424488b54240890e881fcffff4c8b24244883c408483b65187303ff5548ebc448b801000000000000004883c410c35248ff70084c8b60104983fc017502eb2849ff742408498b0424488b5424109090e839fcffff4c8b24244883c408483b65187303ff5548ebd0488b0424488b5424084883c410e914fcffff524c8b60084983fc01750f48b801000000000000004883c408c349ff742408498b0424488b5424089090e8e5fbffff4c8b24244883c408483b65187303ff5548ebc348b801000000000000004883c410c35248ff700848ff70104c8b60184983fc017502eb2849ff742408498b0424488b5424189090e899fbffff4c8b24244883c408483b65187303ff5548ebd0488b442408488b5424109090e875fbffff488b0424488b5424104883c418e963fbffff5248ff70084c8b24244983fc017502eb544d8b1c244d8b134983faf975264c8b4c240849ff74240849b80300000000000000498b5b08498b41d89090ff15b2000000eb0e48b8f0b7f4acaa2a000090ff55584c8b24244883c408483b65187303ff5548eba44c8b1c244983fb01750f48b801000000000000004883c410c349ff7308498b03488b542410909090e8d1faffff4c8b1c244883c408483b65187303ff5548ebc448b801000000000000004883c418c3|@3698,8191,@428,@3684,@3276,@3276|42,0,$3694+74 236,0,0 247,0,0 435,0,@49 448,0,0 502,0,0 574,0,0 619,0,0 654,0,0 707,0,0 727,0,1 790,0,0 843,0,0 869,0,0 923,0,0 1024,0,0 1079,0,0 1230,0,1 1258,0,@3695 1301,0,0 1355,0,0 3695:O3|@7377,@215,@3696 3696:S22|4d757475616c446563733a206e6f74204465636c6172 3697:S39|475f434f444528292e636f646567656e283130296964656e746966794c6f616473283229283129 3698:S47|475f434f444528292e636f646567656e283130296964656e746966794c6f6164732832292831296c6f616473283129 3699:S36|475f434f444528292e636f646567656e283130296964656e746966794c6f616473283229 3700:C72,6344|90909090909090483b65187303ff55484983f801750c49be0300000000000000eb0a49be01000000000000004d89f54983f5024c8b3049f7c601000000741e4983feeb7c1d4983fe177f1c49bc56b9f4acaa2a00004f8d64b45441ffe4e9c4000000e9bf000000e9ba0000009090e9b1140000909090e9d90a0000909090e9fc120000909090e9bc080000909090e94d060000909090e9c50c0000909090e9e9040000909090e9d0030000909090e96d060000909090e989170000909090e90c070000909090e9e1000000909090e98a110000909090e9ae060000909090e907140000909090e970030000909090e933000000909090e90c050000909090e9ed100000909090e935000000909090e99c060000909090e9bf120000909090e95d16000090909048b818d4f4acaa2a0000909090ff555849bc010000000000000052495548b801000000000000004c89d2ff124c8b1c244983fb0174444c8b5424084d8b420848bb70d4f4acaa2a000048b888d4f4acaa2a0000909090ff156e1700004d8d7ff04c3b7d107303ff554049c747f8010000004d89fc49890424eb6d49bc0100000000000000eb664889d74c89d6488b5808488b4810488b47089090ff153217000050488b470890ff152e1700004d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fe49c706010000004d8d7fd84c3b7d107303ff554049c747f804000000eb0ae9a5160000e9a01600004d89fd49bca8d4f4acaa2a00004d8965004c8b5f084d895d184c8b57104d8955104d89750849515350495649554c89c24d89c84889d34c89d8ff15b2160000575651504c8b5424584c8b4c24204c8b4424404889c3488b442438488b5718909090ff12488b4c24404883f901751d4c8b7424184989c5498b4608909090ff15761600004883f8017523eb054989c5eb1c4c8b5c2418495548b80100000000000000498b5320ff124989c4eb0c49bc01000000000000004955488b4424204c8b70084d8b6e284d8b65004983fc01740c49bb0100000000000000eb63495648ff7010488b1c244c89f090ff15121600004c8b5c24084d8b532849c7020300000050488b442408ff15fe1500004d8d7fe04c3b7d107303ff554049c747f8030000004d89f94c8b4424184d894110488b3c24498979084989014d89cb4883c418488b742430488b1e488b542420495348ff720848ff721048b901000000000000004883fb0175054889c8eb4d48ff73084c8b5424584989c94c8b4424084c8b33488b5c24104c89f048ba60dcf4acaa2a000090ff157a1500004889c1488b1c244883c408483b65187303ff5548ebb248b801000000000000004c8b7424084c8b6c24504d8b66104d8b5d084d891c244c8b5424384d8b4a184c8b5424784d89c84c8b4c24304c89c74c8b442460488b5c2420488b4424284889fa90ff12488b74243848ff76084c8b5424704989c14c8b4610488b1c24488b44241848ba60dcf4acaa2a00009090ff15ee140000488b1c24488b542470488b4b104c8b72084c89314989c4eb6549524d89ca4d89c14989d8488b5808488b4010488b52289090ff124989c4eb715248ff700848ff701048ff70186a0149b9ffffffffffffffff49b8ffffffffffffffff48bb0300000000000000488b442410e855fbffff48f7c001000000750a4c8b18eb1ce9ee13000048b8a81df5acaa2a0000ff555849bb01000000000000004c8b5424084d8b024983f8f3752deb05e9b3130000498b7a08488b77384883fe01750c49b90300000000000000eb1649b90100000000000000eb0a49b90100000000000000488b7c2418488b34244883fe01750c48bb0300000000000000eb0a48bb01000000000000004889da4883f202495349514989d24c8b4c24204d89d8488b5f10488b4708ff15ce1300004d8d7ff04c3b7d107303ff554049c747f8010000004d89fc488b0c2449890c24eb765249554c8b48204c8b4018488b5810488b4008488b523090ff124c8b1c244983fb01741e4d8d7ff04c3b7d107303ff554049c747f8010000004d89fc49890424eb6d4c8b54240849b8ffffffffffffffff4889c3498b420848ba40a1f3acaa2a00009090ff154a13000049bc0100000000000000eb6ee9991200004c8b581049b911000000000000004d89d84d23c141f6c0017503ff557050524c89da48d1fa498d41ff48f7ea4c8d40015a58eb05e95d12000070df5249506a0149b9ffffffffffffffff49b8ffffffffffffffff48bb0300000000000000488b4008e899f9ffffeb05e92812000048f7c0010000007505488b38eb1948b8a81df5acaa2a00009090ff555848bf0100000000000000488b7424084c8b4e084c8b46104889fb488b042448baf01df5acaa2a00009090ff15861200004d8d7ff04c3b7d107303ff554049c747f8010000004d89fc49890424eb6d4d89c149b8030000000000000048bb5026f5acaa2a0000488b4008488b523890ff124d8d7ff04c3b7d107303ff554049c747f8010000004d89fc49890424eb644d8d7fe84c3b7d107303ff554049c747f8020000004d89fb4c8b50084d89530849c703fdffffff4c8b4208eb05e94b1100004c89db48b888d4f4acaa2a000090ff15ea1100004d8d7ff04c3b7d107303ff554049c747f8010000004d89fc49890424eb6fe912110000495248ff7424104d89ca4d89c14c8b4018488b5810488b4008488b52409090ff124989c4eb7152495549524951488b58084c89c0488d5424209090ff158e1100004989c4eb56525049524951495048ff700848ff701048ff720848ff7210488b5c2408488b442410eb05e9a3100000488b5248ff1249b901000000000000004989c0488b1c24488b44240848bae026f5acaa2a0000eb0ae976100000e96d1000009090ff152e110000488b442410488d542448ff15261100004c8b5c2440504d8b430848bb010000000000000048b8d02bf5acaa2a0000ff150a1100004c8b542448498b5a08488b042490ff15fe1000004c8b4c24484d8b41105049ff3049ff700849ff706848bb01000000000000004c89c0ff15de100000488b7c240848c70701000000488b742410488b1e488b142448891a488b0e488b442468488b4008909090ff15b61000004d8d7fe04c3b7d107303ff554049c747f8030000004d89fe4c8b6c24184d896e104989460849890e4d8d7ff04c3b7d107303ff554049c747f8010000004d89fc4d89342449544c8b5424604c8b4c24584c8b44245048bb0300000000000000488b442448488b5424709090e8c5f6ffff4989c4eb6f4c8b5c240849f7c30100000075054d8b0beb214c8b480848b8582cf5acaa2a0000909090ff55584d89c849b90100000000000000524952495549ff3149ff710849ff7110488b1c24488b4008488d542430ff15f20f0000488b1c24488d54243090ff15ea0f0000504c8b442408eb05e9d80e00004983f8017502eb5d498b38488b374883fe017556488b5c2430488b530849ff70085248ff7250488b5a20488b4708909090ff15ae0f0000488b0c244883f901742f4c8b44240848bba82cf5acaa2a000048b8b01e600000000000909090ff158a0f0000eb0be91d00000049ff700850504c8b4424104883c418483b65187303ff5548e972ffffff488b3c244883ff017502eb3f488b74243048ff770849b8ffffffffffffffff488b1f488b460848ba40a1f3acaa2a00009090ff15360f0000488b3c244883c408483b65187303ff5548ebb9488b742430488b46089090ff151a0f0000488b5c24104889c24823d3f6c2017503ff55704889c2482bd3488d520170f1488b5e104889d0ff15f60e000048ff76084c8b461048bb0300000000000000488b442420909090ff15de0e0000488b0c24488b412848c700030000004c8b7424284983fe0174444c8b6c24384d8b450848bb70d4f4acaa2a000048b888d4f4acaa2a0000909090ff15a60e00004d8d7ff04c3b7d107303ff554049c747f8010000004d89fc49890424eb6e49bc0100000000000000eb674d8d7fe84c3b7d107303ff554049c747f8020000004d89fb49b9c82cf5acaa2a00004d890b4c8b42504d89430850495252495548ff70084c8b52084c8b4a1049b801000000000000004c89db48b8010000000000000048bab0aaf3acaa2a0000eb0ae9d20c0000e9cd0c0000ff15120e00006a014c8b54242049b9ffffffffffffffff49b8ffffffffffffffff48bb0300000000000000488b442408488b542418e80df4ffff48f7c0010000007505488b38eb1848b8a81df5acaa2a000090ff555848bf0100000000000000488b74241049ba03000000000000004989f949b8103dedacaa2a0000488b5e08488b461048bad0ecf4acaa2a00009090ff158a0d0000488b5c24105048ff731048bb2500000000000000488b04249090ff15720d0000488b1c2448b80700000000000000ff15660d00004c8b042448bb010000000000000048b8a00cefacaa2a00009090ff154e0d0000488b1c2448b8ab00000000000000ff15420d0000488b1c2448b8b100000000000000ff15360d0000488b54242049b8ffffffffffffffff488b5c2408488b420848ba40a1f3acaa2a0000ff15160d0000488b4c2420488b410890ff150e0d0000488b4424184883f801743f4c8b410848bb70d4f4acaa2a000048b888d4f4acaa2a0000909090ff15ea0c00004d8d7ff04c3b7d107303ff554049c747f8010000004d89fc49890424eb6e49bc0100000000000000eb674d8d7fe84c3b7d107303ff554049c747f8020000004d89fb488b781849897b08488b7008498933524950495149525648ff70105748ff720848ff7210488b5c24084c89d8488b5248ff1249b901000000000000004989c0488b1c24488b442408eb0ae9c50a0000e9c00a000048bae026f5acaa2a00009090ff154a0c0000488b5c2440488b5308488b4a20488b41104c8b3048bb01000000000000004c89f090ff152a0c00004c8b6910498945004c8b642440498b442408ff151a0c00004989c1498b4424089090ff15120c00004c8b442440495150498b581048b8682df5acaa2a0000ff15fe0b0000488b7c2450488b470890ff15f60b0000488b74245049b8ffffffffffffffff4889c3488b460848ba40a1f3acaa2a00009090ff15d60b0000488b5c242048ba01000000000000004883fb0175054889d1eb3e4d8d7fe84c3b7d107303ff554049c747f8020000004c89f8488950084c8b334c89304889c2488b5b08483b65187303ff5548ebc148b901000000000000004889c8488d5424589090ff15760b000049be01000000000000004883f80175054d89f5eb404d8d7fe84c3b7d107303ff554049c747f8020000004d89fc4d897424084c8b184d891c244d89e6488b4008483b65187303ff5548ebbf49bd01000000000000004c8b64245049554d8b54241049b9682df5acaa2a000049b8807bf3acaa2a000048bb606cf4acaa2a000048b8f5ffffffffffffff90ff15ee0a00004c8b5c24584c8b442448488b5c2450498b4308909090ff15da0a00004c8b542458504d8b4a184c8b5424704d89c84c8b4c24484c89c749b8ffffffffffffffff4889c3488b4424404889fa909090ff12488b7424604889c3488b46089090ff159a0a0000488b5424184889c14823caf6c1017503ff55704889c1482bca488d490170f1f6c1017503ff55704889c84883e80270f449be11000000000000004989c54d23ee41f6c5017503ff557050524889c248d1fa498d46ff48f7ea4c8d68015a5870e6534c8b4e1049b8682df5acaa2a000048bb606cf4acaa2a00004c89e89090ff151e0a00004c8b6424584983fc01752e4c8b5c2468498b43089090ff150a0a00004883f801751748b80100000000000000498b53209090ff124989c2eb0a49ba01000000000000004c8b5c24684d8b53084d8b4a284d8b014983f801740c48bf0100000000000000eb62495249ff7310488b1c244c89d0ff15b6090000488b7c2408488b772848c7060300000050488b442408ff15a20900004d8d7fe04c3b7d107303ff554049c747f8030000004c89fb488b54241848895310488b0c2448894b084889034889df4883c418488b042448f7c001000000752d4c8b6c24685749b8ffffffffffffffff488b18498b450848ba40a1f3acaa2a000090ff15420900004989c6eb0b49be010000000000000057488b442418488d542478ff152a0900004c8b7424704c8b9424800000004c8b4c24584c8b442460488b5c2410488b442448498b561890ff124c8b6c247049ff75084c8b5424284989c14d8b4510488b1c24488b44240848ba60dcf4acaa2a00009090ff15da0800004c8b24244c8b5c24284d8b5424104d8b4b084d890a4989c4eb685249b8103dedacaa2a0000488b5a10488b420848ba98aaf3acaa2a0000909090ff15a20800004c8b1c244d8b430848bb802df5acaa2a000048b84858f4acaa2a00009090ff15860800004d8d7ff04c3b7d107303ff554049c747f8010000004d89fc49890424eb6ee92b0600004c8b5808498b7b20488b374883fefd750c48bb0300000000000000eb0a48bb01000000000000004889d94883f1024883fb01741f4983fd01741948b8982df5acaa2a00009090ff555849be010000000000000049be01000000000000005249504951495249ff33eb05e9ae05000049ff730849ff73185753516a0149b9ffffffffffffffff49b8ffffffffffffffff48bb0300000000000000498b4310909090e805edffff48f7c00100000075054c8b30eb1848b8a81df5acaa2a000090ff555849be01000000000000004c8b6c24484d89f24c8b442438488b5c2440498b45089090ff1582070000504952488b44242848bae02df5acaa2a0000ff124c8b4c24304c8b4424384889c3488b442428488d542460909090ff15560700004989c4eb704d8d7fc84c3b7d107303ff554049c747f8060000004d89fb49b9182ff5acaa2a00004d890b498953284c8b42084d894320488b7a1049897b184d895310488b72384989730852488b40084c89daff1249bc0100000000000000eb57524950495248ff700849bb0100000000000000eb05e9810400004c8b0c244983f90175054d89d8eb3341f6c3017503ff55704c89df4883c70270f44d8b49084989fb483b65187303ff5548ebd149b80100000000000000e934040000504983f801752d488b7c24204c8b470848bb70d4f4acaa2a000048b888d4f4acaa2a00009090ff15760600004889e6488906eb5e4950488b5c241048b80100000000000000488d542430ff155a060000488b7c2428488b7710488b5e60488b134883fa01750c48b90100000000000000eb0f504889f0ff15360600004889c1eb0150488d4424104c8b34244c89304883c4104d8d7ff04c3b7d107303ff554049c747f8010000004d89fc4c8b2c244d892c24eb6d4c8b4008488b5a10488b420848bac034f5acaa2a0000ff15ea0500004d8d7ff04c3b7d107303ff554049c747f8010000004d89fc49890424eb6d524950495248ff700848ff70106a0149b9ffffffffffffffff49b8ffffffffffffffff48bb0300000000000000488b4018eb05e90a03000090e8a5eaffff48f7c00100000075054c8b18eb1848b8a81df5acaa2a000090ff555849bb01000000000000004c8b14244d8b0aeb05e9cb0200004983f915756049534d8b420848bf01000000000000004983f8017502eb6f5749ff70086a014c8b54243049b9ffffffffffffffff498b3049b8ffffffffffffffff48bb03000000000000004889f0488b542440e819eaffff48f7c001000000750a488b18eb1ce98000000048b8a81df5acaa2a0000ff555848bb0100000000000000488b54243848ff7208eb05e9d60000004c8b521049b9ffffffffffffffff4c8b442410488b44241848ba6838f5acaa2a00009090ff15a6040000488b4c2408f6c1017503ff55704889c84883c01070f44889c74c8b04244883c410483b65187303ff5548e92bffffff49536a014c8b54242049b9ffffffffffffffff49b8ffffffffffffffff48bb0300000000000000488b442410488b542430909090e84de9ffff48f7c00100000075054c8b00eb1848b8a81df5acaa2a000090ff555849b80100000000000000495048b80100000000000000488d542438909090ff15060400004883c408488b7c242849b8ffffffffffffffff488b1c24488b470848ba40a1f3acaa2a000090ff15e2030000488b7424204883fe01750c49bc0100000000000000eb70488b5c24284c8b430848bb70d4f4acaa2a000048b888d4f4acaa2a00009090ff15ae0300004d8d7ff04c3b7d107303ff554049c747f8010000004d89fc49890424eb6e52495048ff70106a0149b9ffffffffffffffff49b8ffffffffffffffff48bb0300000000000000488b4008eb05e9ab000000909090e84de8ffff48f7c00100000075054c8b18eb1848b8a81df5acaa2a000090ff555849bb01000000000000004c8b54241049534c8b442410eb05e96a00000048bb0100000000000000488b442408498b52589090ff125048b80100000000000000488d5424289090ff15f60200004d8d7ff04c3b7d107303ff554049c747f8010000004d89fc4c8b0c244d890c24eb1848b85843f5acaa2a000090ff555849bc0100000000000000504883c43050505050504883c42050505050505050505050504883c4585050505050505050505050505050504883c448505050505050504883c4504883c42050505050504883c4285050505050505050505050505050504883c4684c89e04883c410c2080090909090909090|@3879,8191,@3266,@3880,@3880,@3882,@3889,@3706,@3630,@3720,@3720,@3848,@3345,@3813,@3266,@3890,@3824,@3892,@3370,@3899,@3399,@3658,@3908,@3912,@3353,@3269,@3345,@3658,@3659,@3928,@3266,@3383,@3806,@3399,@3930,@3397,@3453,@3453,@3345,@3656,@3266,@3824,@3376,@3658,@3880,@3394,@3862,@3345,@3932,@3484,@3882,@3658,@3504,@3889,@3706,@3630,@3345,@3952,@3720,@3361,@3266,@3882,@3958,@3266,@4005,@3400,@3858,@3867,@4007,@3345,@3266,@3878|24,0,1 36,0,0 77,0,$3700+110 296,0,@3701 312,0,0 325,0,0 359,0,@3703 369,0,@3704 418,0,0 540,0,@3705 688,0,0 709,0,0 744,0,0 878,0,0 927,0,@3718 966,0,0 1074,0,@3718 1164,0,-1 1174,0,-1 1184,0,1 1223,0,@3810 1236,0,0 1281,0,1 1293,0,0 1305,0,0 1330,0,1 1342,0,0 1493,0,-1 1510,0,@3343 1528,0,0 1549,0,8 1609,0,-1 1619,0,-1 1629,0,1 1669,0,@3810 1684,0,0 1714,0,@3812 1765,0,1 1775,0,@3820 1879,0,@3704 2048,0,0 2070,0,@3823 2126,0,0 2136,0,@3831 2193,0,0 2345,0,1 2400,0,@3834 2419,0,0 2563,0,@3836 2573,0,I48 2649,0,-1 2666,0,@3343 2772,0,1 2831,0,@3703 2841,0,@3704 2890,0,0 2926,0,@3837 2965,0,0 2978,0,0 2988,0,@3360 3023,0,-1 3033,0,-1 3043,0,1 3082,0,@3810 3096,0,0 3111,0,1 3124,0,@268 3142,0,@3740 3170,0,18 3196,0,3 3216,0,0 3226,0,@1598 3248,0,85 3268,0,88 3289,0,-1 3308,0,@3343 3355,0,@3703 3365,0,@3704 3414,0,0 3500,0,0 3534,0,@3823 3572,0,0 3644,0,@3839 3681,0,-1 3698,0,@3343 3721,0,0 3794,0,0 3820,0,0 3895,0,0 3917,0,@3839 3927,0,@3267 3937,0,@3611 3947,0,-6 4018,0,-1 4112,0,8 4165,0,@3839 4175,0,@3611 4230,0,0 4253,0,0 4285,0,0 4414,0,-1 4431,0,@3343 4453,0,0 4550,0,@3718 4595,0,@268 4613,0,@3359 4640,0,@3840 4650,0,@3590 4720,0,1 4732,0,0 4761,0,@3841 4776,0,0 4786,0,0 4826,0,-1 4836,0,-1 4846,0,1 4882,0,@3810 4896,0,0 4944,0,@3843 5017,0,@3846 5072,0,0 5093,0,0 5161,0,0 5192,0,@3703 5202,0,@3704 5235,0,0 5278,0,0 5368,0,@3857 5429,0,-1 5439,0,-1 5449,0,1 5490,0,@3810 5504,0,0 5540,0,0 5570,0,-1 5583,0,-1 5593,0,1 5635,0,@3810 5648,0,0 5678,0,-1 5698,0,@3866 5772,0,-1 5782,0,-1 5792,0,1 5834,0,@3810 5848,0,0 5860,0,0 5893,0,-1 5911,0,@3343 5939,0,0 5960,0,@3703 5970,0,@3704 6027,0,-1 6037,0,-1 6047,0,1 6090,0,@3810 6104,0,0 6133,0,0 6157,0,0 6214,0,@3876 6228,0,0 3701:O3|@7377,@215,@3702 3702:S40|67656e6364653a2063616e277420636f64652d67656e657261746520476c6f62616c2076616c7565 3703:O2|-2,0 3704:S9|70757368436f6e7374 3705:C4,208|90909090909090483b65187303ff5548488b42184c8b70284d8b2e4983fd01740c49bc0100000000000000eb65525048ff7210488b1c2490ff15ba0000004c8b6424084d8b5c242849c7030300000050488b442408909090ff15a20000004d8d7fe04c3b7d107303ff554049c747f8030000004d89fa49c74210010000004c8b0c244d894a084989024d89d44883c418eb01524c8b1c244d8b53084d8b0a4d8d7fe84c3b7d107303ff554049c747f8020000004d89f84d8948084d89204d890248b801000000000000004883c408c390|@3708,8191,@3706,@3630|35,0,0 194,0,0 3706:C6,488|90909090909090483b65187303ff55484c8b70384d8b2e505041f6c5017503ff55704d89ec4983c40270f44989c34989da49b8010000000000000048bb81000000000000004c89e048ba70156000000000009090ff124c89284d8d7fe84c3b7d107303ff554049c747f8020000004d89f84989400849c700ffffffff4d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89ff4c89074889e348893b4889e248c74208010000004d8d7fe84c3b7d107303ff554049c747f8020000004c89f9488b04244889014c8b6c24084c8969084d8b264d8b4360498b38498b5b20488b5308488b02495349ff734849ff735051495457504c89d0ff150e0100004d8d7fd04c3b7d107303ff554049c747f8050000004d89fe4c8b6c24084d896e204c8b6424104d8966184c8b1c244d895e10498946084c8b5424184d8916495649b901000000000000004c8b442438498b7838488b3749514c23ce41f6c10149597503ff55704c3bce7d484c89cb498b4018ff159e00000049514989c04c89cb488b44242890ff1592000000488b1c24f6c3017503ff55704889da4883c20270f44989d14883c408483b65187303ff5548eb97488b5c24284883fb01741a4c8b442430488b1c2448b800d8f4acaa2a000090ff154e000000488b04244883c450c39090909090|@3716,8191,@3368,@428,@3276,@3709|51,0,0 61,0,64 74,0,I11 324,0,0 459,0,@3707 3707:S9|736176655374617465 3708:S53|475f434f444528292e636f646567656e2831302967656e636465283629726573756c742d6e65774d617463684661696c466e283129 3709:C6,376|90909090909090483b65187303ff554853495048ff730848ff731848ff73204c89c29090ff1248b81500000000000000488b542418909090ff1248b838daf4acaa2a0000488b542418909090ff12488b442410488b542418ff1248b850daf4acaa2a0000488b542418909090ff1248bbffffffffffffffff488b442408909090ff151a010000488b54241890ff1248b8a07ef3acaa2a0000488b542418909090ff1248bbffffffffffffffff488b0424ff15f2000000488b54241890ff1248b81500000000000000488b542418909090ff12488b44240848ba68daf4acaa2a0000909090ff124c8b70104983fe017465504c8b680848b801000000000000004c89ea9090ff124c8b6424284989c14c89cb498b0424909090ff15920000004c8b4424204889c34c89c8909090ff15860000004c8b042448b80100000000000000498b1090ff124883c408483b65187303ff5548eb91e90f00000048b801000000000000004883c430c348b801000000000000004883c428c3|@3717,8191,@305,@305,@428,@3280|40,0,10 60,0,@3710 92,0,@3711 112,0,-1 144,0,@3273 164,0,-1 192,0,10 217,0,@3712 247,0,0 312,0,0 348,0,0 363,0,0 3710:S8|636f6e746578743d 3711:S5|207073703d 3712:O1|@3713 3713:C2,176|a8017503ff55704883f8017c0c49be0300000000000000eb0a49be01000000000000004d8d7fe04c3b7d107303ff554049c747f8030000004d89fd49bc60dbf4acaa2a00004d89650049bc68daf4acaa2a00004d896510498945084d8d7fe84c3b7d107303ff554049c747f8020000004d89fc49bbc8dbf4acaa2a00004d891c2449894424084d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c8970104c8960084c8928c3909090909090|@3575,7681|15,0,1 27,0,0 61,0,@3714 75,0,@3712 117,0,@3715 3714:C2,48|90909090909090483b65187303ff55484c8b720841f6c6017503ff55704d89f54983ed0270f44c89e8488b5210ff2290|@3573,8191| 3715:C2,8|488b4208c3909090|@3573,5| 3716:S24|5452414e535f54414228292e736176655374617465283229 3717:S25|5452414e535f54414228292e7072696e745374617465283329 3718:O3|@3720,@3722,@3719 3719:O6|@3741,@3568,@3594,@3359,@3360,@3740 3720:C7,880|90909090909090483b65187303ff55484883f80175044c89c8c34c8b73284d8b2e4983fd01746d48f7c00100000075064c8b6008eb1d4989c448b8b0d7edacaa2a0000ff55584d89e149bc010000000000000048f7c00100000075064c8b5810eb1d4989c348b8b0d7edacaa2a0000ff55584d89d949bb0100000000000000505349506a034d8b124d89d94c89e0488b5208eb05e96a000000909090ff124c8b5424084d8b4a2849c701010000004d8b0249c70001000000488b7c241048f7c7010000007505488b37eb204889c648b8b0d7edacaa2a0000909090ff55584889f348be010000000000000050488b5c24084889f0ff159e020000488b04244883c420c348f7c00100000075064c8b6008eb1d4989c448b8b0d7edacaa2a0000ff55584d89e349bc010000000000000048f7c00100000075064c8b5810eb1d4989c348b8b0d7edacaa2a0000ff55584c89df49bb01000000000000005050525053495049524952488d7c2430574d89c24989d84c89db4c89e0488b5210ff12488b7424284883fe017470488b5c2410488b5328488b0a4883f901740c48b80100000000000000eb57488b5c2408488b442410909090ff15e60100004c8b7424104d8b6e2849c745000300000050488b442410909090ff15ce0100004d8d7fe04c3b7d107303ff554049c747f8030000004d89fc4c8b5c2438eb0ae92a010000e9190000004d895c24104c8b14244d89542408498904244c89e04883c4084c8b4c241849f7c10100000075064d8b4108eb1f4989c048b8b0d7edacaa2a00009090ff55584c89c749b8010000000000000049f7c1010000007506498b7910eb1d4889c748b8b0d7edacaa2a0000ff55584889fe48bf0100000000000000488b3424488b5c2420506a034c8b164989f94c89c24c8b442418488b4b08488b5c24204889d04889caff124c8b7424184d8b2e49c74500010000004d8b662849c70424010000004c8b5c242049f7c30100000075054d8b13eb1e4989c248b8b0d7edacaa2a000090ff55584d89d149ba010000000000000050488b5c24184c89d0ff15ae0000004c8b5424104c8b0c244c8b442418488b5c2420488b442408488b5424304883c448e9dffcffff488b5c241848f7c3010000007505488b13eb1948b8b0d7edacaa2a00009090ff555848ba0100000000000000488b5c24084889d0ff1556000000488b4424304883c438c390909090|@3721,8191,@3448,@3706,@3630,@3448,@3448|59,0,@970 75,0,0 103,0,@970 119,0,0 208,0,@970 227,0,0 279,0,@970 295,0,0 323,0,@970 339,0,0 413,0,0 565,0,@970 583,0,0 611,0,@970 627,0,0 730,0,@970 747,0,0 829,0,@970 844,0,0 3721:S23|5452414e535f54414228292e6d657267654c6162283529 3722:O2|@3723,@3359 3723:C11,784|90909090909090483b65187303ff55484c8b73504983fe01742d52505349504951495248ff731849564c8b43484889c348b858e4f4acaa2a00009090ff15f60200004989c5eb1949bd010000000000000052505349504951495248ff731849564c8b6c24284c8b6424304d8b5d204d8b53084d8b4c24104d890a488b7c24184883ff01750c49b8807bf3acaa2a0000eb6d5050488b1f498b04249090ff159e0200004883f801750e48b870e4f4acaa2a000090ff55584889e6488b1f48891e4889e248894208488b4c2408488b014c8b304983fe0575064c8b4008eb3f48bb807bf3acaa2a0000488b411090ff15560200004883f801740b4c8b4110eb1ee91d00000048b8c0e4f4acaa2a00009090ff555849b801000000000000004883c4104c8b6c24284d8b65384d8b1c2441f6c3017503ff55704d89da4983ea0270f44d8d7fe84c3b7d107303ff554049c747f8020000004d89f948be08e5f4acaa2a0000498931488b5c24104989590849504c89d04c89ca909090ff12488b50104883fa01746150488b480848b801000000000000004889ca9090ff124c8b4424384889c348b8030000000000000048ba58a1f3acaa2a00009090ff1592010000488b04244c8b3048b801000000000000004c89f29090ff124883c408483b65187303ff5548eb9548b80100000000000000488d542448ff155e010000488b4c2430488b4424384c8b71604c8b68204d892e4c8b61384d8b1c244c8b50184d891424495348b80100000000000000488d542450ff152a0100004c8b4c242849f7c1010000007571488b7c24484c8b442408488b5c2430488b442438488b5708ff124d8d7fe84c3b7d107303ff554049c747f8020000004c89fe488b5c240848895e0848c706050000004c8b4424384889f348b84858f4acaa2a0000ff15ca0000004d8d7ff04c3b7d107303ff554049c747f801000000eb05e9080000004d89f8498900eb0a49b80100000000000000488b7c24104883ff0174294950488b4424389090ff158a0000004c8b44244048bb58e4f4acaa2a0000909090ff157a000000eb024950488b04244883c458c20800909090|@3736,8191,@3709,@428,@3314,@3348,@3737,@3732,@3266,@3368,@3269|50,0,@3724 73,0,0 135,0,@3267 170,0,@3725 223,0,@3267 261,0,@3727 276,0,0 345,0,@3729 395,0,0 420,0,1 430,0,@3344 455,0,0 487,0,0 547,0,0 656,0,@3590 708,0,0 749,0,@3724 3724:S8|7365745374617465 3725:O3|@7377,@215,@3726 3726:S25|70537461636b5265616c456e7472793a206e6f20656e747279 3727:O3|@7377,@215,@3728 3728:S24|73657453746174653a206e6f742061207265676973746572 3729:C2,168|4c8b7208504923c6a801587503ff5570493bc67c0c49bd0300000000000000eb0a49bd01000000000000004d8d7fe04c3b7d107303ff554049c747f8030000004d89fc49bbe8e5f4acaa2a00004d891c24498954241049894424084d8d7fe84c3b7d107303ff554049c747f8020000004d89fb49ba50e6f4acaa2a00004d8913498943084d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c8968104c8958084c8920c3|@3575,7941|23,0,1 35,0,0 69,0,@3730 117,0,@3731 3730:C2,48|90909090909090483b65187303ff55484c8b720841f6c6017503ff55704d89f54983ed0270f44c89e8488b5210ff2290|@3573,8191| 3731:C2,8|488b4208c3909090|@3573,5| 3732:C12,832|90909090909090483b65187303ff55484c8b72f04d8b6e18504923c5a801587503ff5570493bc57c0b48b80100000000000000c34989d14989c04c89c3498b06ff1522030000498b59b049504c23c341f6c00149587503ff55704c3bc37c0c48ba58eaf4acaa2a0000eb6f498b51e84889c14c89c3488b4218909090ff15ee0200004883f801750c48ba58eaf4acaa2a0000eb444d8b71e84d8b2e4d8b65004983fc01740c49bbffffffffffffffffeb044c8b58184d8d7fe84c3b7d107303ff554049c747f8020000004c89fa4c895a084c8b58084c891aeb05e9030000004889c8495149505048ff3248ff72084989c0488b5c2418498b41c89090ff15760200004c8b5424104983fa0175284c8b4c241841f6c1017503ff55704d89c84983c00270f44c89c0488b5424204883c428e9d2feffff4d8b0a4d8b014983f805751b488b7c2420488b77e8488b5e20498b41089090ff1526020000eb1e4983f8037518488b7c2420488b77e8488b5e20498b410890ff150e020000498b7a08498b7210498b4a1848bb807bf3acaa2a00004889f090ff15f60100004883f8017416488b4424204c8b70e8498b5e204889f0ff15e2010000488b0424a8017503ff55704883f8017d02eb6af6c1017503ff55704883f9017c2151480bc8f6c101597503ff5570483bc8745548b870eaf4acaa2a0000ff5558eb464c8b7424204d8d7fd84c3b7d107303ff554049c747f8040000004d89fd498945184989751049897d084d894d004d89e8488b5c2418498b46c8eb05e906000000ff15620100004c8b64241841f6c4017503ff55704d89e34983c30270f44c89d8488b542420e8a5fdffff4c8b5424204d8b4a084983f901746d4d8b42e8498b7838488b37488b5c2418534823def6c3015b7503ff5570483bde7c0c48ba0100000000000000eb21498b401890ff15fe0000004883f801750c48ba0100000000000000eb04488b5008488b4c2408514823caf6c101597503ff5570483bca7d47488b442420eb05e94a0000004989ce4c23f241f6c6017503ff55704989ce4c2bf24d8d760170f14d89f0488b5c2418488b40e848ba40a1f3acaa2a00004883c428ff259200000048b801000000000000004883c428c348b801000000000000004883c428c390909090|@3739,8191,@428,@428,@3276,@3545,@3545,@3314,@3545,@3276,@428,@3345|43,0,0 97,0,@3733 138,0,@3733 167,0,-1 392,0,@3267 491,0,@3734 661,0,0 690,0,0 780,0,@3343 800,0,0 815,0,0 3733:O2|0,-1 3734:O3|@7377,@215,@3735 3735:S28|446966666572656e7420737461636b2064657374696e6174696f6e73 3736:S23|5452414e535f54414228292e7365745374617465283629 3737:C7,288|90909090909090483b65187303ff55484c8b72e84d8b6e384d8b6500504923c4a801587503ff5570493bc47c0b48b80100000000000000c34989d14989c04c89c3498b4618909090ff15fa0000004883f8017502eb6a488b18488b134883fa0575224d8b71e84951495048ff70104c8b6b08498b5e204c89e8909090ff15ce000000eb2c4883fa03751e498b49e84951495048ff7010488b4308488b59209090ff15b2000000eb084951495048ff701048bb807bf3acaa2a0000488b0424eb05e92f000000909090ff15920000004883f801741a488b4c2410488b41e8488b5820488b0424909090ff157a0000004883c408eb0449514950488b3c2440f6c7017503ff55704889fe4883c60270f44889f0488b5424084883c410e9e8feffff90|@3738,8191,@428,@3353,@3353,@3314,@3353|47,0,0 178,0,@3267 3738:S31|5452414e535f54414228292e73657453746174652836296672656573283129 3739:S38|5452414e535f54414228292e73657453746174652836297075744f6e456e7472696573283129 3740:O2|@3806,@3359 3741:C34,3144|90909090909090488dbc2448ffffff483b7d187303ff555052505349504951495249ff701849ff704849ff705048ff750849be76f8f4acaa2a000049566a01488965084d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fc49c70424010000004c8b5c24184983fb01744149544c89d0ff15f20b00004c8b44244848bb68faf4acaa2a0000909090ff15e20b00004c8b442428488b5c245848b888faf4acaa2a00009090ff15ce0b0000eb0249544c8b5424484d8b4a104d8b01488b7c2478488b3749504c0bc641f6c00149587503ff55704c3bc6740f48b8a8faf4acaa2a00009090ff5558488b5c245048f7c301000000755e488b4c244048f7c10100000075555050488b4424684c8b034c89c3488b009090ff15660b00004883f801750e48b870e4f4acaa2a000090ff55584889e34c89034889e248894208488b4424084c8b304d8b264983fc0575104d8b6e08eb46e9cb000000e9ac0000004c8b481048bb807bf3acaa2a00004c89c8909090ff15120b00004883f80174054d89cdeb1748b8e0faf4acaa2a0000ff555849bd01000000000000004c8b442470495549ba03000000000000004c8b09498b58284d89e84889da488b5c2460488b442450ff1249b8ffffffffffffffff4889c3488b44246048ba40a1f3acaa2a00009090ff15aa0a0000488b4c24784c8b0424488b5c2450488b442460488b5118909090ff12488b1424eb4b48b820fbf4acaa2a000090ff555848ba0100000000000000eb31488b5424404883fa01750c48ba807bf3acaa2a0000eb1748b820fbf4acaa2a0000ff555848ba0100000000000000505050488b4c2460488b41384c8b3041f6c6017503ff55704d89f54983ed0270f44c8ba424900000004d8d7fe84c3b7d107303ff554049c747f8020000004d89fb49ba78fbf4acaa2a00004d89134d8b0c244d894b08524c89e84c89da909090ff124c8b40104983f801745d50488b780848b801000000000000004889fa9090ff124c8b4424704889c348b8030000000000000048ba58a1f3acaa2a00009090ff15a2090000488b342448b80100000000000000488b1690ff124883c408483b65187303ff5548eb99488b7c2468488b7738488b1ef6c3017503ff55704889da4883ea0270f44889d048ba00fdf4acaa2a000090ff12488b48104883f9017472504c8b700848b801000000000000004c89f29090ff124c8b6c24704989c14c89cb498b4518909090ff15220900004c8b8424800000004889c74c89cb498b0090ff15120900004883ff017502eb6e4883f801752c4c8b4424704c89cb48b8010000000000000048ba58a1f3acaa2a0000eb05e9ad02000090ff15e2080000eb5b488b771840f6c6017503ff55704883fe017c4d488b5018f6c2017503ff55704883fa017c3152480bd6f6c2015a7503ff5570483bf2741f488b08eb05e9390200004c8b70084c8b681048b8a0fef4acaa2a0000ff55584889f3eb09e91a020000488b5818488b57084883fa017502eb0c488b48084883f9017402eb6e488b08488b5810488b471090ff155a0800004883f80174244c8b4424704c89cb48b8010000000000000048ba58a1f3acaa2a0000ff153a080000eb70488b074c8b304983fe0375694c8b294983fd0375654c8b5010488b5908488b4008909090ff15160800004883f8017422eb05e932010000488b591049524c0bd341f6c201495a7503ff55704c3bd37502eb5a4c8b4424704c89cb48b8010000000000000048ba58a1f3acaa2a0000eb0fe94d010000e937000000e90900000090ff15c2070000eb574c8b4424704c89cb48b8010000000000000048ba58a1f3acaa2a0000ff15a6070000eb5ce9110100004983fefb75564c8b294983fdfb75524c8b60084c8b590849544d0be341f6c401495c7503ff55704d3be37507eb59e9de0000004c8b4424704c89cb48b8010000000000000048ba58a1f3acaa2a0000ff1552070000eb5ce9b5000000e92b0000004c8b4424704c89cb48b8010000000000000048ba58a1f3acaa2a00009090ff152a070000eb6de9850000004c8b4424704c89cb48b8010000000000000048ba58a1f3acaa2a0000909090ff1506070000eb5ee95900000053480bdef6c3015b7503ff5570483bf374474d8d7fd84c3b7d107303ff554049c747f8040000004d89fe49895e184c8b6f104d896e1049895608eb05e9180000004c8b274d89264d89f04c89cb488b44245890ff15ae060000488b04244c8b3048b801000000000000004c89f29090ff124883c408483b65187303ff5548e9d2fcffff4c8b7424684d8b6e384d8b650041f6c4017503ff55704d89e34983eb0270f44c89d848baf0fef4acaa2a0000ff1249ba01000000000000004c8b48104983f901745b504952488b780848b801000000000000004889fa9090ff124889c3488b0424488d942498000000909090ff151a060000488b7424085048b80100000000000000488b16909090ff124c8b14244883c418483b65187303ff5548eb9be90a00000049b801000000000000004d89d04950488bbc2480000000488b742470488b5e38488b13f6c2017503ff55704889d14883e90270f448ff77204889c848ba9000f5acaa2a000090ff124c8b34244c8b68104983fd0174595049564c8b580848b801000000000000004c89daff124889c3488b0424488d9424a8000000909090ff156e0500004c8b5424085048b80100000000000000498b12909090ff124c8b34244883c418483b65187303ff5548eb9de90a00000049bc01000000000000004d89f44c8b5c240849534d23dc41f6c301495b7503ff55704d3bdc7e054d89daeb034d89e24c8b4c24784d8b4160498b3849524c23d741f6c201495a7503ff55704c3bd77d33498b304889f34923daf6c3017503ff55704889f3492bda488d5b0170f14889da488b5c24684889d09090ff15c60400004d89104d8d7fe04c3b7d107303ff554049c747f8030000004c89fe48bb3002f5acaa2a000048891e4c894e10488b94248800000048895608488b8c24900000004d89ca4c8b4c246849b801000000000000004889f348b80100000000000000488b5120909090ff12488b4424784c8b70384d8b2e41f6c5017503ff55704d89ec4983ec0270f44c89e048ba7003f5acaa2a0000909090ff124c8b58104983fb017449504c8b500848b801000000000000004c89d29090ff12488d9424a00000009090ff15060400004c8b0c2448b80100000000000000498b1190ff124883c408483b65187303ff5548ebad4c8b5424784d8b4a384d8b0141f6c0017503ff55704c89c74883ef0270f44889f848ba1005f5acaa2a0000ff12488b70104883fe01744950488b580848b801000000000000004889da9090ff12488d9424a00000009090ff158e030000488b142448b80100000000000000488b1290ff124883c408483b65187303ff5548ebad488b9c2488000000488b542478488b4a604c8b314c8b6b2049564d23f541f6c601495e7503ff55704d3bee7d0d4c8b64243049c70424030000004c8b6424304d8b1c244983fb017402eb6d4c8b9424880000004c8b4c24784d8b4160498b38498b7220574823fe40f6c7015f7503ff5570483bf77e6e488b9c2490000000488b5308488b5c24684c89c890ff124883f8017402eb4448b80100000000000000ff15ce020000488b5c246890ff15ca020000488b4c2478eb05e931000000488b41604c8b3041f6c6017503ff55704d89f54983c50270f44c8928483b65187303ff5548eb05e905000000e95dffffff488b5c247048f7c301000000755e4d8d7fe84c3b7d107303ff554049c747f8020000004c89f9488b4424104889410848c701050000004c8b4424784889cb48b84858f4acaa2a000090ff15460200004d8d7ff04c3b7d107303ff554049c747f8010000004c89fa488902eb0a48ba0100000000000000488b4c24504883f901742852488b4424709090ff150e0200004c8b84248000000048bb68faf4acaa2a0000ff15fe010000eb0152488b4424384c8b304d8d7fe84c3b7d107303ff554049c747f8020000004d89fd4c8b24244d8965084d89750048ff742450488f4508eb7090904c8b184983fb0375294989c248b858d4ecacaa2a0000909090ff555849bd0100000000000000eb0a49bd010000000000000050488b4424209090ff158a0100004c8b44243048bb68faf4acaa2a0000909090ff157a0100004c8b442410488b5c244048b888faf4acaa2a0000eb05e91b000000909090ff155e010000488b042490ff555849bd01000000000000004c8b9c24a80000004d8b55004d89134d8b4d084d894b0848b801000000000000004881c4a0000000c2100090|@3790,8191,@3368,@3269,@3709,@428,@3314,@3345,@3348,@428,@428,@3348,@3314,@3348,@3351,@3348,@3348,@3348,@3348,@3348,@3276,@3791,@3793,@3659,@3797,@3777,@3299,@3394,@3266,@3368,@3269,@3368,@3269,@3709|51,0,$3741+2958 133,0,@3742 162,0,@3743 225,0,@3744 298,0,@3725 362,0,@3267 395,0,@3746 408,0,0 425,0,1 460,0,-1 478,0,@3343 530,0,@3748 544,0,0 567,0,@3267 579,0,@3748 592,0,0 667,0,@3750 715,0,0 740,0,1 750,0,@3344 772,0,0 835,0,@3753 863,0,0 950,0,0 960,0,@3344 1059,0,@3757 1142,0,0 1152,0,@3344 1260,0,0 1270,0,@3344 1314,0,0 1324,0,@3344 1406,0,0 1416,0,@3344 1452,0,0 1462,0,@3344 1495,0,0 1505,0,@3344 1627,0,0 1696,0,@3759 1708,0,0 1735,0,0 1782,0,0 1824,0,0 1883,0,@3763 1917,0,0 1962,0,0 2004,0,0 2159,0,@3767 2204,0,0 2217,0,0 2269,0,@3769 2299,0,0 2336,0,0 2400,0,@3773 2427,0,0 2464,0,0 2644,0,0 2795,0,@3590 2841,0,0 2884,0,@3742 2972,0,@45 2988,0,0 3000,0,0 3029,0,@3742 3058,0,@3743 3092,0,0 3125,0,0 3742:S10|6d657267655374617465 3743:S11|7361766564207374617465 3744:O3|@7377,@215,@3745 3745:S6|4d61726b6572 3746:O3|@7377,@215,@3747 3747:S14|4e6f742061207265676973746572 3748:O3|@7377,@215,@3749 3749:S37|6d657267655374617465202d204d69736d61746368656420726573756c7420737461746573 3750:C2,168|4c8b7208504923c6a801587503ff5570493bc67c0c49bd0300000000000000eb0a49bd01000000000000004d8d7fe04c3b7d107303ff554049c747f8030000004d89fc49bb58fcf4acaa2a00004d891c24498954241049894424084d8d7fe84c3b7d107303ff554049c747f8020000004d89fb49bac0fcf4acaa2a00004d8913498943084d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c8968104c8958084c8920c3|@3575,7941|23,0,1 35,0,0 69,0,@3751 117,0,@3752 3751:C2,48|90909090909090483b65187303ff55484c8b720841f6c6017503ff55704d89f54983ed0270f44c89e8488b5210ff2290|@3573,8191| 3752:C2,8|488b4208c3909090|@3573,5| 3753:O1|@3754 3754:C2,176|a8017503ff55704883f8017c0c49be0300000000000000eb0a49be01000000000000004d8d7fe04c3b7d107303ff554049c747f8030000004d89fd49bcf8fdf4acaa2a00004d89650049bc00fdf4acaa2a00004d896510498945084d8d7fe84c3b7d107303ff554049c747f8020000004d89fc49bb60fef4acaa2a00004d891c2449894424084d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c8970104c8960084c8928c3909090909090|@3575,7681|15,0,1 27,0,0 61,0,@3755 75,0,@3753 117,0,@3756 3755:C2,48|90909090909090483b65187303ff55484c8b720841f6c6017503ff55704d89f54983ed0270f44c89e8488b5210ff2290|@3573,8191| 3756:C2,8|488b4208c3909090|@3573,5| 3757:O3|@7377,@215,@3758 3758:S29|6d657267653a206d69736d6174636865642064657374696e6174696f6e 3759:O1|@3760 3760:C2,176|a8017503ff55704883f8017c0c49be0300000000000000eb0a49be01000000000000004d8d7fe04c3b7d107303ff554049c747f8030000004d89fd49bce8fff4acaa2a00004d89650049bcf0fef4acaa2a00004d896510498945084d8d7fe84c3b7d107303ff554049c747f8020000004d89fc49bb5000f5acaa2a00004d891c2449894424084d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c8970104c8960084c8928c3909090909090|@3575,7681|15,0,1 27,0,0 61,0,@3761 75,0,@3759 117,0,@3762 3761:C2,48|90909090909090483b65187303ff55484c8b720841f6c6017503ff55704d89f54983ed0270f44c89e8488b5210ff2290|@3573,8191| 3762:C2,8|488b4208c3909090|@3573,5| 3763:O1|@3764 3764:C2,176|a8017503ff55704883f8017c0c49be0300000000000000eb0a49be01000000000000004d8d7fe04c3b7d107303ff554049c747f8030000004d89fd49bc8801f5acaa2a00004d89650049bc9000f5acaa2a00004d896510498945084d8d7fe84c3b7d107303ff554049c747f8020000004d89fc49bbf001f5acaa2a00004d891c2449894424084d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c8970104c8960084c8928c3909090909090|@3575,7681|15,0,1 27,0,0 61,0,@3765 75,0,@3763 117,0,@3766 3765:C2,48|90909090909090483b65187303ff55484c8b720841f6c6017503ff55704d89f54983ed0270f44c89e8488b5210ff2290|@3573,8191| 3766:C2,8|488b4208c3909090|@3573,5| 3767:C4,192|90909090909090483b65187303ff55484c8b72104989d14989c04c89c3498b4618909090ff15be000000498b59084889c1488b034c89c390ff15b200000048f7c10100000075574c8b314d8b2e4983fdfb751f48f7c001000000750b48b80100000000000000c348b80100000000000000c348f7c00100000075284c8b204d8b1c244983fbfb750b48b80300000000000000c348b80100000000000000c3e90b00000048b80100000000000000c348b80100000000000000c390909090909090|@3768,8143,@428,@428|94,0,0 105,0,0 138,0,1 149,0,0 165,0,0 176,0,0 3768:S36|5452414e535f54414228292e6d6572676553746174652837296d75737450757368283129 3769:O1|@3770 3770:C2,176|a8017503ff55704883f8017c0c49be0300000000000000eb0a49be01000000000000004d8d7fe04c3b7d107303ff554049c747f8030000004d89fd49bc6804f5acaa2a00004d89650049bc7003f5acaa2a00004d896510498945084d8d7fe84c3b7d107303ff554049c747f8020000004d89fc49bbd004f5acaa2a00004d891c2449894424084d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c8970104c8960084c8928c3909090909090|@3575,7681|15,0,1 27,0,0 61,0,@3771 75,0,@3769 117,0,@3772 3771:C2,48|90909090909090483b65187303ff55484c8b720841f6c6017503ff55704d89f54983ed0270f44c89e8488b5210ff2290|@3573,8191| 3772:C2,8|488b4208c3909090|@3573,5| 3773:O1|@3774 3774:C2,176|a8017503ff55704883f8017c0c49be0300000000000000eb0a49be01000000000000004d8d7fe04c3b7d107303ff554049c747f8030000004d89fd49bc0806f5acaa2a00004d89650049bc1005f5acaa2a00004d896510498945084d8d7fe84c3b7d107303ff554049c747f8020000004d89fc49bb7006f5acaa2a00004d891c2449894424084d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c8970104c8960084c8928c3909090909090|@3575,7681|15,0,1 27,0,0 61,0,@3775 75,0,@3773 117,0,@3776 3775:C2,48|90909090909090483b65187303ff55484c8b720841f6c6017503ff55704d89f54983ed0270f44c89e8488b5210ff2290|@3573,8191| 3776:C2,8|488b4208c3909090|@3573,5| 3777:C12,816|90909090909090483b65187303ff55484c8b72e04989d14989c04c89c3498b4618909090ff152e030000498b59f04889c1488b034c89c390ff152203000048f7c101000000755848f7c001000000757248ff711848ff710848ff314950495148ff711048ff70104c8b7424204d8b2e4983fd0575694c8b10498b4e084889cb488b042490ff15de0200004883f801741448b801000000000000004883c438c3e97b020000498b024883f805754a498b5a084889c8ff15b60200004883f8017428eb05e94d0200004d8b719849c7060300000048b80100000000000000eb05e94b0000004883c438c348b801000000000000004883c438c34883f8fb751748b8680af5acaa2a0000ff555848b801000000000000004d8b719849c7060300000048b801000000000000004883c438c34983fdfd75404c8b204d8b1c244983fbfd751a48b80100000000000000488d542438ff15220200004883c438c348b8b00af5acaa2a00009090ff555848b801000000000000004983fd0175424c8b204d8b1c244983fb01751c48b80100000000000000488d5424389090ff15e20100004883c438c348b8f00af5acaa2a00009090ff555848b801000000000000004983fd0375654c8b10498b7e08488b5c2408488b04249090ff15ae0100004883f801740f48b801000000000000004883c438c3498b324883fe03754e498b5a084889f890ff158a0100004883f801742048b80100000000000000488d54243890ff15760100004883c438c3e934000000498b599848c7030300000048b801000000000000004883c438c348b8300bf5acaa2a0000909090ff555848b801000000000000004983fdfb75594c8b204d8b1c244983fbfb75514d8b56084d8b4c240849524d0bd141f6c201495a7503ff55704d3bd17502eb0f48b8780bf5acaa2a00009090ff555848b80100000000000000488d542438909090ff15e60000004883c438c3e91a0000004d8b519849c7020300000048b801000000000000004883c438c34c8b204d8b1c244983fbff750f48b801000000000000004883c438c348b8c80bf5acaa2a0000909090ff555848b8010000000000000048b80100000000000000c348b80100000000000000c3909090909090|@3804,8191,@428,@428,@3351,@3314,@3803,@3803,@3351,@3351,@3803,@3803|146,0,0 212,0,0 234,0,0 255,0,@3778 268,0,0 289,0,0 323,0,0 349,0,@3780 364,0,0 393,0,0 421,0,@3782 436,0,0 482,0,0 526,0,0 569,0,0 584,0,@3784 600,0,0 661,0,@3786 676,0,0 721,0,0 749,0,0 764,0,@3788 780,0,0 790,0,0 801,0,0 3778:O3|@7377,@215,@3779 3779:S21|6d657267653a20756e70757368656420656e747279 3780:O3|@7377,@215,@3781 3781:S16|4c69746572616c206d69736d61746368 3782:O3|@7377,@215,@3783 3783:S16|436f6465726566206d69736d61746368 3784:O3|@7377,@215,@3785 3785:S24|6d657267653a206d69736d61746368656420446972656374 3786:O3|@7377,@215,@3787 3787:S31|6d657267653a206d69736d61746368656420737461636b20656e7472696573 3788:O3|@7377,@215,@3789 3789:S27|6d657267653a206d69736d61746368656420436f6e7461696e6572 3790:S25|5452414e535f54414228292e6d657267655374617465283729 3791:C3,232|90909090909090483b65187303ff55484c8b72e04989c1498b461890ff15ee00000048f7c001000000756d488b18488b134883fafb75664c8b730841f6c6017503ff55704983fe017c0c49bd0300000000000000eb0a49bd01000000000000004983fd0175054d89f4eb1241f6c6017503ff55704d89f44983ecf270f4495148bbf1ffffffffffffff4c89e048baf02d600000000000eb0ae946000000e93d0000009090ff12a8017503ff55704989c34983c30270f44c8b142449534d23da41f6c301495b7503ff55704d3bda7e084c89d84883c408c34c89d04883c408c34c89c8c34c89c8c390|@3792,8191,@428|76,0,1 88,0,0 129,0,-8 142,0,I109 3792:S36|5452414e535f54414228292e6d657267655374617465283729676574496e557365283229 3793:C4,328|90909090909090483b65187303ff55484c8b72e04989d14989c04889df4889fb498b4618ff1546010000498b59f04889c1488b034889fb90ff153a01000048f7c101000000755b4c8b314d8b2e4983fdfb75044c89c0c348f7c00100000075764c8b204d8b1c244983fbfb756e4d8b54240841f6c2017503ff55704983fa017c0c48bf0300000000000000eb0a48bf01000000000000004883ff01750a4c89d6eb17e99d00000041f6c2017503ff55704c89d64883eef270f44951495048bbf1ffffffffffffff4889f048baf02d600000000000eb0ae965000000e95c000000ff12488b1c24504823c3a801587503ff5570483bc37d054889c2eb034889da488b4c2408488b8170ffffff524823d0f6c2015a7503ff5570483bd07d1748b8380ff5acaa2a0000ff555848b801000000000000004889d04883c410c34c89c0c34c89c0c34c89c0c3|@3796,8191,@428,@428|131,0,1 143,0,0 191,0,-8 204,0,I109 287,0,@3794 300,0,0 3794:O3|@7377,@215,@3795 3795:S28|6d6572676553746174653a20756e70757368656420656e7472696573 3796:S39|5452414e535f54414228292e6d6572676553746174652837296765744d696e537461636b283229 3797:C10,544|90909090909090483b65187303ff55484c8b72e04989d14989c04c89c3498b4618909090ff151e020000498b59f04889c1488b034c89c390ff151202000048f7c10100000075654c8b314d8b2e4983fdfb750b48b80100000000000000c34983fd03756e48f7c001000000756a4c8b204d8b1c244983fb0575374c8b5118488b3c244c8914244c8b51084c89ce4c8b49104c89c34d89f04889da498b5c24084889d04889f257ff25ac010000e9630100004983fb03756d4d8b5610498b7c241049524c0bd741f6c201495a7503ff5570eb0ae9df000000e9cf0000004c3bd77411488b701048b85812f5acaa2a0000ff5558488b7010498b5c2408498b460890ff155a0100004883f801746d48bb807bf3acaa2a00004889f0909090ff1546010000eb05e9770000004883f80174054889f3eb2c48bb807bf3acaa2a0000488b41109090ff15260100004883f8017406488b5910eb0a48bb606cf4acaa2a0000488b5118488b0424488914244c8b51084d89ce4c8b4910eb05e9170000004d89c54c8b014989c44c89e84c89f24954ff25e300000048b80100000000000000c348b80100000000000000c348b80100000000000000c348f7c001000000754a4c8b204d8b1c244983fb0575324c8b5118488b3c244c8914244c8b51084c89ce4c8b49104c89c34d89f04889da498b5c24084889d04889f257ff258200000048b80100000000000000c348b80100000000000000c348b80100000000000000c390|@3801,8191,@428,@428,@3800,@3314,@3314,@3314,@3800,@3800|85,0,0 231,0,@3798 270,0,@3267 310,0,@3267 344,0,@3611 407,0,0 418,0,0 429,0,0 512,0,0 523,0,0 534,0,0 3798:O3|@7377,@215,@3799 3799:S25|6d657267653a206d69736d617463686564206f666673657473 3800:C11,488|90909090909090483b65187303ff55484889d74889c64889d948bb606cf4acaa2a00004889c89090ff15e20100004883f80174384c8b77f857564952488b5fd0488b47e0498b5610ff124c8b6c2410504d8b4de04c8b4424104889c3498b45d0ff15b2010000488b0424eb6d498b004883f80575154889cb498b4008ff159e0100004883f8017402eb144889cb4c89c8ff15920100004883f8017502eb194c8b77e0498b5e204889c8909090ff157e0100004889c8eb494c8b77f857564952514989c8488b5fd0488b47e0498b561890ff124c8b6c2418eb05e9270000004d8b4de04c8b442410488b1c24498b45d090ff1542010000488b04244883c408eb0457564952504c8b6c24184d8b65e04989c1488b5c2410498b44241890ff151e0100004883f8017502eb2e4c8b44241849514d8b40e0488b5c241848b8010000000000000048ba58a1f3acaa2a00009090ff15f2000000eb0249514c8b4424204d8d7fe84c3b7d107303ff554049c747f8020000004c89ff488b34244889770848c707050000004d8d7fd84c3b7d107303ff554049c747f8040000004c89fb488b5424304889531848b9807bf3acaa2a000048894b10488b4424104889430848893b4d8b70c84989d8488b5c24184c89f04c8b6c24284883c4384955ff256f00000090909090909090|@3802,8191,@3351,@3610,@3351,@3351,@3545,@3610,@428,@3348,@3276|27,0,@3611 316,0,0 326,0,@3344 425,0,@3267 3801:S39|5452414e535f54414228292e6d6572676553746174652837296c6f6164456e7472696573283129 3802:S37|5452414e535f54414228292e6d6572676553746174652837296c6f6164546f526567283629 3803:C6,208|90909090909090483b65187303ff55484989d148bb807bf3acaa2a0000498b41d0909090ff15ce0000004883f801746e498b59c8498b41d0ff15c20000004883f801745f498b59d8488b53e04951488b5a20498b41d09090ff15aa000000488b0c24488b41d84d8d7fd84c3b7d107303ff554049c747f8040000004d89fe4c8b69f84d896e1849bc807bf3acaa2a00004d8966104c8b59f04d895e08eb0ae921000000e91c0000004c8b51e84d89164d89f0488b59e0488b40c84883c408ff254c00000048b80100000000000000c390|@3805,8191,@3314,@3314,@3353,@3276|21,0,@3267 136,0,@3267 198,0,0 3804:S40|5452414e535f54414228292e6d657267655374617465283729636865636b456e7472696573283129 3805:S53|5452414e535f54414228292e6d657267655374617465283729636865636b456e7472696573283129666c7573684361636865283129 3806:C19,1144|90909090909090483b65187303ff554850504889d74889c64889d949524c89cb488b4118ff15760400004883f801756a5756514950495148bbffffffffffffffff4c89c8ff155e0400004889c348b8d05df4acaa2a000090ff15520400004d8d7fe04c3b7d107303ff554049c747f8030000004d89fe4989461049bd280aedacaa2a00004d896e0849bcf8e36cadaa2a00004d89264c89f0eb05e903000000ff55584c8d7424084d890e4c8d6c2408498945084c8b64241049ff342449ff7424104c89cb488b4118ff15ea0300004883f801751848b8005ef4acaa2a000090ff555849bb01000000000000004c8b50084983fa03750c49bb0300000000000000eb0a49bb0100000000000000488b5c2408488b134883fa05751c49534c8b73084c89c34c89f09090ff15920300004883f801746aeb044953eb694c8b6c24184983fd0174634c8b24244983fc01755e51495049514889f34889c8488b57089090ff124d8d7fe84c3b7d107303ff554049c747f8020000004d89fb4c8b5424084d89530849c703050000004c8b4424104c89db48b84858f4acaa2a0000eb14e950000000e94b000000e93e000000e9390000009090ff150e0300005049b8ffffffffffffffff488b5c2408488b44241848ba40a1f3acaa2a0000909090ff15ee020000488b04244883c450c34c89c84883c430c34c89c3488b44240890ff15d60200004883f801746d488b4424184883f801741d4c8b34244983fe01751351495049514889f34889c8488b5708ff12eb13488b59204c89c090ff15a202000051495049514d8d7fe84c3b7d107303ff554049c747f8020000004d89fe4c8b6c24084d896e0849c706050000004c8b4424104c89f3eb05e94100000048b84858f4acaa2a0000ff155e0200005049b8ffffffffffffffff488b5c2408488b44241848ba40a1f3acaa2a0000909090ff153e020000488b04244883c450c34d8d7fe84c3b7d107303ff554049c747f8020000004c89f848c74008010000004c89004d8d7ff04c3b7d107303ff554049c747f8010000004d89fe4989064d8d7fe04c3b7d107303ff554049c747f8030000004d89fd49bc601cf5acaa2a00004d89650049894d104d894508575651495049514989c84c89f34c89e890ff15ba0100004c8b5c24284983fb01746e4c8b542410488b44240890ff15a60100004d8b4a20a8017503ff55704883f8017d02eb194d8b01498b38504823c7a801587503ff5570483bc77d02eb1a48b860d6ecacaa2a0000909090ff555849b80100000000000000a8017503ff55704889c64883c60270f4498b5cb0fceb05e93c0000004989d84983f8037533488b542438488b0a4883f9037525488b5c2408488b4208ff15260100004883f80174104c89cb488b442408ff151a010000eb1a4c8b5424204c8b442408488b5c2418488b442410498b5208ff124c8b4c24104c8b0424488b5c2408488b442418909090ff15ea0000004d8d7fe84c3b7d107303ff554049c747f8020000004d89f94c8b4424084d89410849c701050000004c8b4424104c89cb48b84858f4acaa2a00004883c458ff25ae000000909090909090|@3809,8191,@428,@305,@303,@428,@3351,@3266,@3345,@3351,@3545,@3266,@3345,@3370,@3355,@3351,@3545,@3610,@3266|57,0,-1 79,0,@3596 124,0,@215 138,0,@7377 214,0,@3597 228,0,0 248,0,1 260,0,0 404,0,@3590 445,0,-1 465,0,@3343 636,0,@3590 653,0,-1 673,0,@3343 787,0,@3807 904,0,@49 920,0,0 1120,0,@3590 3807:C3,160|90909090909090483b65187303ff5548488b42104c8b6020488b4208ff15a6000000a8017503ff55704883f8017d02eb1a498b14244c8b32504923c6a801587503ff5570493bc67d02eb1948b860d6ecacaa2a00009090ff555849bb0100000000000000a8017503ff55704989c54983c50270f44e8b5caafc41f6c3017503ff55704983fb017e0b48b80300000000000000c348b80100000000000000c39090|@3808,7685,@3355|77,0,@49 92,0,0 138,0,1 149,0,0 3808:S35|5452414e535f54414228292e6c6f6164546f5370656369666963526567283529283129 3809:S32|5452414e535f54414228292e6c6f6164546f5370656369666963526567283529 3810:O3|@7377,@215,@3811 3811:S21|67656e546f537461636b3a206e6f20726573756c74 3812:O2|@3813,@3593 3813:C12,1232|90909090909090483b65187303ff554850504889d74889c64889d94889cb498b41189090ff15ce0400004883f801756a5756514950495148bbffffffffffffffff4889c8ff15b60400004889c348b8d05df4acaa2a000090ff15aa0400004d8d7fe04c3b7d107303ff554049c747f8030000004d89fe4989461049bd280aedacaa2a00004d896e0849bcf8e36cadaa2a00004d89264c89f0eb05e903000000ff55584989e649890e4989e5498945084c8b6424084d8b1c244d8b134983faff757140f6c6017503ff55704883fe017c0c49b80300000000000000eb0a49b801000000000000004983f80375054889f7eb1240f6c6017503ff55704889f74883ef0e70f451495149ff730848bb11000000000000004889f848baf02d600000000000909090ff12488b34244883fe017520eb05e9a000000048b860d6ecacaa2a00009090ff555848bb01000000000000004883f8017505488b1eeb2ca8017503ff55704889c24883ea0270f44889d0488b7608483b65187303ff5548ebad48bb01000000000000005349b80300000000000000488b44241048ba40a1f3acaa2a0000909090ff156603000049b8ffffffffffffffff488b5c2418488b44241048ba40a1f3acaa2a0000ff154a030000488b04244883c430c34983fafd755a4d8b430849f7c001000000745249f7c00100000074054c89c7eb1848b86055edacaa2a000090ff555848bf01000000000000004883ff0175264d89c848bb70d4f4acaa2a000048b888d4f4acaa2a00004883c410ff25e9020000e91002000049f7c0010000007402eb6549f7c001000000741848b8b055edacaa2a000090ff555848bf01000000000000004c89c7488b5ff848c1e30848c1eb08488d5c1b0140f6c6017503ff55704883fe017c0c48ba0300000000000000eb0a48ba01000000000000004883fa03750a4889f0eb17e95c00000040f6c6017503ff55704889f04883e80e70f45651495149505348bb110000000000000048baf02d6000000000009090ff1248f7c00100000074054989c6eb1248f640ff104c8b30740349f7de4f8d7436014c8b2c244d3bee7609eb1f5651495149505048b86023f5acaa2a000090ff555848b8010000000000000049b8ffffffffffffffff488b5c2418488b44241048ba40a1f3acaa2a00009090ff15d60100004c8b64240849f7c401000000741848b8b055edacaa2a000090ff555849bb01000000000000004d89e34c8b54242041f6c2017503ff55704983fa017c0c49b90300000000000000eb0a49b901000000000000004983f90375054d89d0eb1241f6c2017503ff55704d89d04983e80e70f4495348bb11000000000000004c89c048baf02d60000000000090ff1248f7c00100000074054889c7eb1848b86055edacaa2a000090ff555848bf0100000000000000488b3424488b5cbefc4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48895a0848c702fdffffff4c8b4424184889d348b888d4f4acaa2a00004883c440ff25e400000050505649514c8d54241049b901000000000000004c89c34989c84889da488b1c244889d0488b5708ff1249b8ffffffffffffffff488b5c2418488b042448ba40a1f3acaa2a000090ff159e000000488b0c24488b41584c8b304c8b69384d8b65004d89f04c89e348b80100000000000000488d5424309090ff15760000004883c430c390|@3818,8191,@428,@305,@303,@3345,@3345,@3266,@3345,@3266,@3345,@3816|57,0,-1 79,0,@3596 124,0,@215 138,0,@7377 210,0,1 222,0,0 268,0,8 281,0,I109 313,0,@49 328,0,0 383,0,0 394,0,1 409,0,@3343 428,0,-1 448,0,@3343 506,0,@336 520,0,0 539,0,@3703 549,0,@3704 594,0,@339 608,0,0 653,0,1 665,0,0 716,0,8 726,0,I109 790,0,@3814 804,0,0 814,0,-1 834,0,@3343 866,0,@339 880,0,0 913,0,1 925,0,0 966,0,8 979,0,I109 1006,0,@336 1020,0,0 1082,0,@3704 1112,0,0 1144,0,-1 1163,0,@3343 1205,0,0 3814:O3|@7377,@215,@3815 3815:S35|696e646972656374202d20696e76616c696420636f6e7374616e742061646472657373 3816:C7,456|90909090909090483b65187303ff554849504c23c341f6c00149587503ff55704c3bc37c6d4c8b42d04889d7498b5820488b47e0ff15b6010000498b5858488b13498b40384c8b30524923d6f6c2015a7503ff5570493bd67e064c8b284c892b4d8d7fe04c3b7d107303ff554049c747f8030000004d89fd4c8b67d84d896510488b57e04989550849c7450003000000eb05e9130000004c89eb48b8e025f5acaa2a0000ff254e0100004c8b72d04989d14889c74889de4c89c3498b46189090ff153a01000048f7c001000000756b488b18488b134883fa0375644883ff01750b498b49d04c8b71584d8906488b4b10488b4308498b59e0ff150a0100004883f801744f4d8b71d851490bcef6c101597503ff5570493bce7539495049b80300000000000000488b1c24498b41d048ba40a1f3acaa2a0000eb0ae961000000e939000000ff15c6000000488b04244883c408c341f6c0017503ff55704d89c64983c60270f44d89f04889f348b803000000000000004c89cae98afeffff41f6c0017503ff55704c89c14883c10270f44989c84889f34889f84c89cae967feffff41f6c0017503ff55704c89c34883c30270f44989d84889f34889f84c89cae944feffff9090909090|@3819,8191,@3545,@3266,@428,@3351,@3345|156,0,@3817 286,0,1 304,0,@3343 365,0,1 3817:S8|696e646972656374 3818:S23|5452414e535f54414228292e696e646972656374283429 3819:S32|5452414e535f54414228292e696e646972656374283429736561726368283329 3820:O1|@3821 3821:C2,16|48b80100000000000000c39090909090|@3822,1|2,0,0 3822:S39|475f434f444528292e636f646567656e2831302967656e636465283629726573756c742d283129 3823:O2|@3824,@3360 3824:C2,376|90909090909090483b65187303ff554850504989d64989c54989dc4d89c349b8010000000000000048bb810000000000000048b8170000000000000048ba70156000000000009090ff1248c700150000004d8d7fe84c3b7d107303ff554049c747f8020000004d89f84989400849c700ffffffff4d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89ff4c89074889e348893b4889e248c74208010000004d8d7fe84c3b7d107303ff554049c747f8020000004c89f9488b04244889014c8b4424084c8941084d8d7fe04c3b7d107303ff554049c747f8030000004c89f848bfa828f5acaa2a00004889384c89681048894808495649554954495149ff7518514c89da9090ff124d8d7fd84c3b7d107303ff554049c747f8040000004c89fe48bb182af5acaa2a000048891e488b54242048895618488b0c2448894e10488b442408488946084c8b7424284989d24c8b4c24184c8b4424104889f348b80100000000000000498b56084883c440ff229090|@3830,8191|32,0,0 42,0,64 52,0,11 62,0,I11 231,0,@3825 296,0,@3827 356,0,0 3825:C7,224|90909090909090483b65187303ff554850504c8b72104989d14989c04c89c3498b461890ff15de0000004883f801756a495148bbffffffffffffffff4c89c090ff15ca0000004889c348b8d05df4acaa2a000090ff15be0000004d8d7fe04c3b7d107303ff554049c747f8030000004c89ff4889471048be280aedacaa2a00004889770848bbf8e36cadaa2a000048891f4889f8909090ff55584889e74c89074889e648894608488b1c24498b410890ff156a000000a8017503ff55704889c34883c30270f44989d8488b1c24498b41084883c410ff254d0000009090909090|@3826,8191,@428,@305,@303,@428,@3276|52,0,-1 75,0,@3596 120,0,@215 134,0,@7377 3826:S28|5452414e535f54414228292e70757368416c6c427574283429283129 3827:C5,240|90909090909090483b65187303ff55484c8b72184989d14989c04c89c3498b4618909090ff15ee0000004883f801751848b8582bf5acaa2a000090ff555848b80100000000000000488b38488b7008488b481048ff70184c89c3498b41109090ff15ba000000504823c6a801587503ff5570483bf07e0f48b803000000000000004883c408c3488b0424a8017503ff55704883f8017f02eb414d8d7fd84c3b7d107303ff554049c747f8040000004d89fe49c74618ffffffff49894e104989760849893e4d89c54d89f04c89eb498b4108909090ff154e00000048b801000000000000004883c408c390909090909090|@3826,8191,@428,@428,@3276|50,0,@3828 64,0,0 121,0,1 220,0,0 3828:O3|@7377,@215,@3829 3829:S20|70757368416c6c4275743a206e6f20656e747279 3830:S25|5452414e535f54414228292e70757368416c6c427574283429 3831:O1|@3832 3832:C2,16|48b80300000000000000c39090909090|@3833,1|2,0,1 3833:S28|5452414e535f54414228292e636c6561724361636865283129283129 3834:O3|@7377,@215,@3835 3835:S27|4e6f20426567696e4c6f6f7020666f72204c6f6f7020696e737472 3836:S14|756e6c6f636b5265676973746572 3837:C2,48|4c8b720850490bc6a801587503ff5570493bc6750b48b80300000000000000c348b80100000000000000c39090909090|@3838,4101|23,0,1 34,0,0 3838:S35|5452414e535f54414228292e707573685370656369666963456e747279283329283129 3839:O2|9,1 3840:O2|2,@268 3841:O3|@7377,@215,@3842 3842:S17|43617365202d206e6f2064656661756c74 3843:O1|@3844 3844:C2,168|90909090909090483b65187303ff55484883f801750b48b80100000000000000c34c8b3048ff700849bd01000000000000004d8b66084983fc0175054d89ebeb2f41f6c5017503ff55704c89e84883c00270f44d8b6424084989c5483b65187303ff5548ebd049bb01000000000000004953488b4424089090e889ffffff4c8b34244d89f54c23e841f6c5017503ff55704d8d6eff4c03e870f44c89e84883c410c3909090909090|@3845,7681|24,0,0 42,0,0 104,0,0 3845:S49|475f434f444528292e636f646567656e2831302967656e636465283629726573756c742d636f756e744361736573283129 3846:C3,424|90909090909090483b65187303ff55484883f801750b48b80100000000000000c34c8b304d8b2e4983fdf9756e4d8b66104d8b1c244983fbf375654d8b5424084d8d7fb84c3b7d107303ff554049c747f8080000004d89f949b80031f5acaa2a00004d89014c8b42204d894138488b7a1849897930498b760849897128498b5e1849895920498b4a3849894918498951104c8b68084d896908eb0ae9f1000000e94c0000004983fd01750c48b80300000000000000eb0a48b801000000000000004c8b52104c89c949b9ffffffffffffffff4989c04889cb498b442408488b5208909090ff1248b80100000000000000c35249ff760849ff761848ff700848ff722048ff72186a014c8b521049b9ffffffffffffffff49b8ffffffffffffffff48bb03000000000000004c89e0488b5228909090ff1248f7c00100000075054c8b10eb1848b8a81df5acaa2a000090ff555849ba01000000000000006a014d89d14c8b5424204d89c84c8b4c2428488b5c2408488b442410ff1552000000488b442410488b5424284883c430e976feffff48b82034f5acaa2a0000ff555848b80100000000000000|@3856,8191,@3848|24,0,0 90,0,@3847 173,0,1 185,0,0 202,0,-1 232,0,0 270,0,-1 280,0,-1 290,0,1 326,0,@3810 340,0,0 403,0,@3854 416,0,0 3847:C3,80|90909090909090483b65187303ff55484c8b72184d89f54983f5025249554c8b52204c8b4a284989c0488b5a30488b4238909090ff153e0000004c8b2424498b442408498b5424104883c408ff229090|@3852,8191,@3848| 3848:C8,344|90909090909090483b65187303ff55485049504951495248ff704848ff70504c8b4424384c89cb488b400890ff154e0100004c8b7424284c8b442420488b5c2418498b4640909090ff153a0100004c8b6c241041f6c5017503ff55704d89ec4983ec0270f44d89e0488b5c2420488b44242848ba40a1f3acaa2a0000ff150e0100004c8b1c244983fb01747248b85033f5acaa2a0000488b54240890ff1248bbffffffffffffffff488b442420909090ff15e2000000488b54240890ff1248b87833f5acaa2a0000488b542408909090ff1248bbffffffffffffffff488b442418909090ff15b6000000488b54240890ff1248b89033f5acaa2a0000eb05e943000000488b542408ff1248bbffffffffffffffff488b442410909090ff1586000000488b54240890ff1248b81500000000000000488b5424084c8b5424304883c4404952ff2248b801000000000000004883c430c2080090|@3853,8191,@3276,@3276,@3345,@305,@305,@305|116,0,@3343 142,0,@3849 160,0,-1 192,0,@3850 212,0,-1 244,0,@3851 268,0,-1 300,0,10 328,0,0 3849:S17|6d616b65456e7472793a20696e6465783d 3850:S6|206c6f636e3d 3851:S5|207573653d 3852:S63|475f434f444528292e636f646567656e2831302967656e636465283629726573756c742d67656e4d757475616c44656373283129646973636172642d283129 3853:S24|5452414e535f54414228292e6d616b65456e747279283629 3854:O3|@7377,@215,@3855 3855:S33|67656e4d757475616c44656373202d204e6f742061206465636c61726174696f6e 3856:S52|475f434f444528292e636f646567656e2831302967656e636465283629726573756c742d67656e4d757475616c44656373283129 3857:O2|@3858,@3382 3858:C4,120|90909090909090483b65187303ff55485053495049b8ffffffffffffffff488b52089090ff12488b0424488d54241890ff156a0000004d8d7fe84c3b7d107303ff554049c747f8020000004d89fe4989460849c706ffffffff4c8b4424104c89f348b89835f5acaa2a00004883c418ff2533000000909090|@3861,8191,@3860,@3266|22,0,-1 99,0,@3859 3859:S17|72657365727665537461636b5370616365 3860:C5,160|90909090909090483b65187303ff55484883f801750b48b80100000000000000c3a8017503ff55704989c64983ee0270f4524c89f0e8cdffffff4989c548b8010000000000000090ff157a000000488b14244955488b5af0ff1572000000488b4c2408488b41f890ff156a0000004d8d7fe84c3b7d107303ff554049c747f8020000004d89fe4c8b2c244d896e084989064c89f04883c410c390909090909090|@3864,8191,@3299,@3394,@3862|24,0,0 63,0,0 3861:S32|5452414e535f54414228292e72657365727665537461636b5370616365283329 3862:C3,200|90909090909090483b65187303ff55484c8b70604d8b2e49bcf1ffffffffffffff4d89eb4d23dc41f6c3017503ff557050524c89ea48d1fa498d4424ff48f7ea4c8d58015a5870e54d8b2e41f6c5017503ff55704d89ec4983c40270f44d89264d8b2e4c8b60304d8b142449524d23d541f6c201495a7503ff55704d3bea7e074d8b2e4d892c244d8d7fe84c3b7d107303ff554049c747f8020000004d89fd4d895d0849c74500fbffffff4989c04c89eb48b8e837f5acaa2a0000ff252f00000090909090909090|@3865,8191,@3266|25,0,-8 179,0,@3863 3863:S5|696e637370 3864:S46|5452414e535f54414228292e72657365727665537461636b537061636528332970757368456e7472696573283129 3865:S20|5452414e535f54414228292e696e637370283129 3866:O2|@3867,@3593 3867:C18,872|90909090909090483b65187303ff554852505349504951495249b803000000000000004889c3488b44243848ba40a1f3acaa2a0000909090ff155203000050504c8b7424384989e249b901000000000000004c8b442430488b5c2448488b442410498b5608909090ff124c8b6c24484d8b5d50498b5d20488b042490ff15160300004983fb0174274c8b44244848bba03cf5acaa2a000048b8b01e600000000000909090ff15f60200004989c2eb0a49ba010000000000000050504c8b542458488b5c2438498b4218909090ff15d60200004883f801756a48bbffffffffffffffff488b44243890ff15c20200004889c348b8d05df4acaa2a000090ff15b60200004d8d7fe04c3b7d107303ff554049c747f8030000004d89f94989411049b8280aedacaa2a00004d89410848bff8e36cadaa2a00004989394c89c8909090ff55584989e14c8b4424384d89014889e748894708488b742408488b1e488b134883fafd756d488b4b0849b80100000000000000488b5c24284889c890ff153e0200004883f801745848ff74242049ba807bf3acaa2a00004c8b4c24304c8b442418488b5c24384889c8909090ff151602000049b8ffffffffffffffff488b5c2438488b44245848ba40a1f3acaa2a0000eb05e99500000090ff15f2010000eb705050488b4424584989e249b901000000000000004c8b442448488b5c24684c8b7008488b4424304c89f29090ff1248ff74243049ba807bf3acaa2a00004c8b4c24404c8b442428488b5c2448488b442408909090ff159e01000049b8ffffffffffffffff488b5c2408488b442468eb05e99900000048ba40a1f3acaa2a000090ff157a0100004883c410eb725050488b4c24584989e249b90100000000000000488b5c2468488b442430488b51089090ff1248ff74243049ba807bf3acaa2a00004c8b4c24404c8b442428488b5c2448488b442408909090ff152a01000049b8ffffffffffffffff488b5c2408488b44246848ba40a1f3acaa2a0000eb05e90b00000090ff15060100004883c410488b44245848ff7050488b5820488b442418ff15f20000004c8b34244983fe0174224c8b44246048bba82cf5acaa2a000048b8b01e600000000000909090ff15ce0000004c8b6c246049b8ffffffffffffffff488b5c24204c89e848ba40a1f3acaa2a00004c8b6424584883c4684954ff25a400000090909090|@3872,8191,@3345,@3545,@3269,@428,@305,@303,@3873,@3869,@3345,@3513,@3345,@3513,@3345,@3353,@3269,@3345|27,0,1 45,0,@3343 74,0,0 143,0,@3868 153,0,I48 177,0,0 218,0,-1 243,0,@3596 288,0,@215 302,0,@7377 363,0,0 399,0,@3267 436,0,-1 456,0,@3343 492,0,0 533,0,@3267 572,0,-1 599,0,@3343 632,0,0 665,0,@3267 704,0,-1 724,0,@3343 791,0,@3836 801,0,I48 825,0,-1 843,0,@3343 3868:S12|6c6f636b5265676973746572 3869:C22,1032|90909090909090483b65187303ff55484983f9ff756c4d8b0a4983f9117568498b7a084883ff037563505349ff3049ff700848bb1f00000000000000488b442428909090ff15e6030000488b342440f6c6017503ff55704889f34881c39000000070f14889da488b5c24284889d09090ff15c203000048b850a9f4acaa2a0000eb0fe9b2010000e93c000000e937000000909090ff15a6030000488b5c242890ff15a20300004c8b4c242849b80100000000000000488b5c2408488b44241090ff158a030000eb45f6c3017503ff55704889df4883ef0870f450ff357803000048ff7424184c89d649ba03000000000000004989f14889fb48b850a9f4acaa2a00009090ff1556030000505050488b5c241848f7c301000000747348f7c30100000074054889daeb1748b86055edacaa2a0000ff555848ba0100000000000000f6c2017503ff5570488d4aff4803ca70f4f6c1017503ff55704889c84883c00270f44c8b74242849bd01000000ffffffff504923c5a801587503ff55704c3be87f5449bc0100000001000000eb05e95d000000504923c4a801587503ff5570493bc47d324d8b1e4d8b1341f6c2017503ff55704d89d14983c10870f44d890b4d8b46104c89d3488b7c24204883c43057ff259202000048b880c9f3acaa2a0000909090ff555848b801000000000000004d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48895a0848c70203000000488b4c24284989c848bb01000000000000004889d04c8b7424204883c4304956ff253702000048f7c001000000751a48b8a041f5acaa2a0000909090ff555848b8010000000000000048f7c00100000074054989c6eb1a48b86055edacaa2a0000909090ff555849be01000000000000004d8b2a4983fd11756f4d8b62084983fc03756a53495649ff3049ff700848bb1f00000000000000488b442428ff15c20100004c8b1c2441f6c3017503ff55704d89da4981c29000000070f1488b5c24284c89d090ff15a201000048b860a9f4acaa2a0000ff159a010000488b5c242890ff1596010000eb0ae943000000e93e0000004c8b4c242849b80100000000000000488b5c2408488b44241890ff15720100004c8b4c24284c89cb488b4424104c8b4424204883c4304950ff255c010000534950495249564c8b4c242849b80b000000000000004c89d348b8101ff4acaa2a000090ff153a010000ff353c01000048ff74243049ba01000000000000004c8b4c24184c8b442420488b5c242848b860a9f4acaa2a0000ff1516010000488b5c2428488b042490ff150e0100004c8b6424284c8b5c24084c895c24284c8b5424204c896424204d89d149ba01000000000000004d89c84d89d94c89c74d89d848bb030000000000000048b8b01ef4acaa2a00004883c42057ff25c50000009090909090|@3875,8191,@3399,@3453,@3439,@3453,@3390,@268,@3511,@3410,@3638,@3399,@3453,@3439,@3453,@3390,@3453,@3515,@268,@3511,@3453,@3511|52,0,15 120,0,@3677 173,0,0 234,0,1 250,0,@3677 299,0,@336 312,0,0 361,0,-2147483648 388,0,2147483648 472,0,@3391 488,0,0 541,0,0 580,0,@3870 596,0,0 620,0,@336 636,0,0 675,0,15 736,0,@3678 781,0,0 850,0,5 863,0,@3495 891,0,0 916,0,@3678 976,0,0 998,0,1 1008,0,@3491 3870:O3|@7377,@215,@3871 3871:S42|67656e53746f7265493a2073746f72696e67206c6f6e6720636f6e7374616e7420617320612062797465 3872:S24|5452414e535f54414228292e6d6f7665546f566563283629 3873:C2,152|48f7c001000000746348f7c00100000074054989c6eb1948b86055edacaa2a00009090ff555849be010000000000000041f6c6017503ff55704981fe010000807c3a49b8010000800000000049504d23c641f6c00149587503ff55704d3bf07d1048b80300000000000000c3e91600000048b80100000000000000c348b80100000000000000c348b80100000000000000c3909090909090|@3874,4169|25,0,@336 40,0,0 68,0,1073741824 99,0,1 115,0,0 126,0,0 137,0,0 3874:S27|414d443634434f4445434f4e5328292e697353746f726549283329 3875:S28|414d443634434f4445434f4e5328292e67656e53746f726549283629 3876:O3|@7377,@215,@3877 3877:S41|67656e6364653a2063616e277420636f64652d67656e657261746520436f64654e696c2076616c7565 3878:C5,336|90909090909090483b65187303ff55484c8b72e850490bc6a801587503ff5570493bc6750b48b80100000000000000c349bd11000000000000004989c44d23e541f6c4017503ff557050524889c248d1fa498d45ff48f7ea4c8d60015a5870e641f6c6017503ff55704d89f54983ed0270f450490bc5a801587503ff5570493bc5750c49bb0100000000000000eb304c8b5af85250495449b80300000000000000488b5ae0498b430848ba40a1f3acaa2a000090ff15be0000004989c3eb04525049544c8b5424104d8b4af84d8b4110498b79084989f9498b5ae0488b042448baf01df5acaa2a0000909090ff158e000000488b742410488b5ef848ff73084c8b531049b9ffffffffffffffff4c8b4424084889c3488b46d848ba6838f5acaa2a000090ff155e000000488b542408f6c2017503ff55704889d04883c00270f4488b5424104883c418e9b9feffff9090|@4008,8191,@3345,@3813,@3867|39,0,0 50,0,8 133,0,0 153,0,1 171,0,@3343 225,0,@3812 261,0,-1 283,0,@3866 3879:S29|475f434f444528292e636f646567656e2831302967656e636465283629 3880:C2,80|4c8b70104d8b2e4c8b60384d8b1c244d891e50504989e24d891a4989e34d896b084d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b14244c89104c8b7424084c8970084883c410c39090|@3881,7937| 3881:S24|5452414e535f54414228292e6d61726b537461636b283129 3882:C4,168|90909090909090483b65187303ff55484983f801750b48b82847f5acaa2a0000c34883fbff756f4c8b70204d8b4e184d8b4610498b5e08498b069090ff158e000000504989c148bb807bf3acaa2a00004c89c890ff157e0000004883f80174124989e048bb103dedacaa2a0000498918eb064989e04d89084d8d7ff04c3b7d107303ff554049c747f8010000004c89f8488b1c24eb05e9080000004889184883c408c34889d8c390|@3885,7885,@3884,@3351|24,0,@3883 72,0,@3267 101,0,@268 3883:O1|@268 3884:C3,48|90909090909090483b65187303ff55484c8b0b534951504c89c8488d54241890ff15320000004883c418c39090909090|@3887,7885,@3886| 3885:S31|475f434f444528292e63686f6f73654d657267655265676973746572283329 3886:C3,240|90909090909090483b65187303ff5548a8017503ff55704883f8017d02eb1a4c8b72e84d8b2e504923c5a801587503ff5570493bc57d02eb1b4989c548b860d6ecacaa2a000090ff555849be0100000000000000a8017503ff55704989c54983c50270f44f8b64aefc4d89e64983fe01752f4883f801750c49bb1900000000000000eb10a8017503ff55704989c34983eb0270f44c8b72f84d891eff25770000004883f801750c49bb1900000000000000eb10a8017503ff55704989c34983eb0270f4488b42f049534c0bd841f6c301495b7503ff55704c3bd8750b48b8807bf3acaa2a0000c34c89d8e918ffffff90|@3888,7685,@3299|62,0,@49 76,0,0 122,0,12 169,0,12 222,0,@3267 3887:S41|5452414e535f54414228292e63686f6f7365526567697374657228312963686f6f7365526567283429 3888:S52|5452414e535f54414228292e63686f6f7365526567697374657228312963686f6f736552656728342966696e6446726565283129 3889:C2,8|4c8b30498b06c390|@2227,4097| 3890:C3,352|90909090909090483b65187303ff55484883fb017556488b5af04883fb017441488b42f84c8b400848bb70d4f4acaa2a000048b888d4f4acaa2a0000ff15460100004989c64d8d7ff04c3b7d107303ff554049c747f8010000004c89f84c8930c348b80100000000000000c34c8b334d8b2e4983fdf97551525048ff730848ff72084c8b52e849b9ffffffffffffffff49b801000000000000004c8b2348bb03000000000000004c89e0488b52f89090ff12488b1c24488b442408488b5424104883c418e93effffff4c8b63084983fc0175374c8b5a084c8b14244c891c244d89d14c8b52e84d89c84c8b4ae04c89c74989c0488b3348bb03000000000000004889f0488b52f857ff225250495448ff72084c8b52e849b9ffffffffffffffff49b801000000000000004c8b1b48bb03000000000000004c89d8488b52f89090ff12488b1c24488b442408488b5424104883c418e9aefeffff90909090909090|@3891,8191,@3266|42,0,@3703 52,0,@3704 99,0,0 136,0,-1 146,0,0 159,0,1 248,0,1 280,0,-1 290,0,0 303,0,1 3891:S47|475f434f444528292e636f646567656e2831302967656e636465283629726573756c742d636f64654c697374283229 3892:C3,112|90909090909090483b65187303ff55484883f801750b48b80100000000000000c35248ff7008488b00909090ff156600000050488b442408488b542410e8c5ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fe498946084c8b2c244d892e4c89f04883c418c3909090|@417,8191,@3893|24,0,0 3893:C4,376|90909090909090483b65187303ff55484c8b304983fef9756f5248ff700848ff701048ff70186a014c8b52e849b9ffffffffffffffff49b8ffffffffffffffff48bb0300000000000000488b442410488b52f890ff1248f7c00100000075054c8b28eb1848b8a81df5acaa2a000090ff555849bd01000000000000004c8b6424184d8b5c24f8eb05e9d300000050504989e249b903000000000000004d89e8498b5b08498b431048ba705af4acaa2a0000909090ff15e60000004c8b5424184d8b024983f8f37534498b7a08488b77384883fe01751a48b8204ef5acaa2a0000909090ff555849b9010000000000000049b90100000000000000eb0a49b90100000000000000488b7c2428488b77f8488b5c24104883fb01750c48ba0300000000000000eb0a48ba01000000000000004889d14883f1026a014989ca4c8b4c24284c8b442410488b5e10488b46089090ff1552000000488b4424084883c430c348b8704ef5acaa2a000090ff555848b80100000000000000|@3898,8191,@3595,@3848|46,0,-1 56,0,-1 66,0,1 102,0,@3810 116,0,0 148,0,1 169,0,@3593 216,0,@3894 232,0,0 242,0,0 254,0,0 284,0,1 296,0,0 354,0,@3896 368,0,0 3894:O3|@7377,@215,@3895 3895:S29|4c6f6f704172673a20737461746963206c696e6b2066756e6374696f6e 3896:O3|@7377,@215,@3897 3897:S29|67656e4c6f6f704172673a206e6f742061206465636c61726174696f6e 3898:S49|475f434f444528292e636f646567656e2831302967656e636465283629726573756c742d67656e4c6f6f70417267283129 3899:C3,40|90909090909090483b65187303ff554853488d5424089090ff15320000004883c408c39090909090|@3901,8141,@3900| 3900:C3,120|90909090909090483b65187303ff55484883f801750b48b80100000000000000c34989d14c8b4008488b004c89ca9090ff156a0000004951504c89c04c89ca9090e8c1ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fb48894308488b14244889134889d84883c410c390909090909090|@417,8141,@3902|24,0,0 3901:S34|5452414e535f54414228292e6765744c6f6f7044657374696e6174696f6e73283229 3902:C3,192|90909090909090483b65187303ff55484c8b72f84889c3498b461890ff15c60000004883f801751848b86051f5acaa2a000090ff555848b801000000000000004c8b284d8b65004983fcfb75284d8d7fe84c3b7d107303ff554049c747f8020000004c89f84d8b5d084c89580848c700ffffffffc34983fc0575284d8d7fe84c3b7d107303ff554049c747f8020000004c89f84d8b5d084c89580848c70001000000c348b8a851f5acaa2a00009090ff555848b8010000000000000090909090|@3907,7949,@428|42,0,@3903 56,0,0 165,0,@3905 180,0,0 3903:O3|@7377,@215,@3904 3904:S21|6765744c6f6f70446573743a206e6f20656e747279 3905:O3|@7377,@215,@3906 3906:S29|6765744c6f6f70446573743a2077726f6e6720656e7472792074797065 3907:S48|5452414e535f54414228292e6765744c6f6f7044657374696e6174696f6e732832296765744c6f6f7044657374283129 3908:C2,280|90909090909090483b65187303ff554848f7c001000000757048f7c301000000756c4c8b334d8b264983fc0175224d8d7ff04c3b7d107303ff554049c747f8010000004d89fd4d8b5e084d895d00eb0a49bdffffffffffffffff5248ff700848ff73086a014c8b52f049b9ffffffffffffffff4d89e848bb0300000000000000488b00488b52f8eb0ae97a000000e96a00000090ff1248f7c00100000075054c8b18eb1848b88853f5acaa2a000090ff555849bb01000000000000004953488b5c2408488b442410488b542418e835ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fa498942084c8b0c244d890a4c89d04883c420c348b80100000000000000c348b80100000000000000c39090909090|@3911,8191|82,0,-1 107,0,-1 120,0,1 166,0,@3909 180,0,0 255,0,0 266,0,0 3909:O3|@7377,@215,@3910 3910:S18|6576616c4172673a206e6f20726573756c74 3911:S15|4c697374506169722e6d6170283329 3912:C6,400|90909090909090483b65187303ff55484883f801752a4883fb01750b48b80100000000000000c348b8d855f5acaa2a00009090ff555848b8010000000000000048f7c301000000756e4c8b334d8b2e4983fd0175675248ff3049ff7608488b5b08488b4008e89dffffff488b5c2410488b53f85049ba01000000000000004c8b4c24104c8b442408488b5a08488b421048bad0ecf4acaa2a00009090ff1516010000488b4c24184c8b71f84d8b6e084989c34d89eaeb0ae9bd000000e9710000004d8b4d50498b5d20488b4424089090ff15ea0000004983f901742449534d89d048bba03cf5acaa2a000048b8b01e600000000000909090ff15ca000000eb0249534d8d7fe84c3b7d107303ff554049c747f8020000004d89f8488b7c240849897808488b34244989304c89c04883c428c34c8b62f85248ff700848ff73084d8b4e084c8b00498b5c2408498b44241048ba2856f5acaa2a00009090ff156e000000488b1c24488b442408488b5424104883c418e98efeffff48b8d855f5acaa2a0000ff555848b80100000000000000|@3927,8191,@3806,@3545,@3269,@3917|30,0,0 41,0,@3913 56,0,0 118,0,0 146,0,@3740 227,0,@3868 237,0,I48 338,0,@3915 379,0,@3913 392,0,0 3913:O3|@7377,@215,@3914 3914:S30|6d6f7665417267733a204d69736d61746368656420617267756d656e7473 3915:O3|@3917,@3916,@3593 3916:O2|@3923,@3594 3917:C29,1608|90909090909090483b65187303ff5548535049515249504c8b73604d8b2e49514d0bcd41f6c10149597503ff55704d3be9750c49bc0300000000000000eb0a49bc010000000000000050504c89e74c8b73184c89c34c89f0ff15120600004883f801756a5748bbffffffffffffffff4c89c09090ff15fe0500004889c348b8d05df4acaa2a000090ff15f20500004d8d7fe04c3b7d107303ff554049c747f8030000004d89fd4989451049bc280aedacaa2a00004d89650849bbf8e36cadaa2a00004d895d004c89e89090ff55584989e54d8945004989e449894424084c8b5c24084d8b13498b324883fefd75724883ff017471498b5a0848b8f1ffffffffffffff9090ff157e0500004883f801745a488b5c241849ff72084c8b442430488b5308488b5c24384c89c89090ff124c8b54243049b9807bf3acaa2a00004c8b042448bb807bf3acaa2a000048b8f1ffffffffffffff909090ff1532050000eb0fe98c010000e94f000000e94a00000049b8ffffffffffffffff488b5c2418488b44243848ba40a1f3acaa2a0000909090ff1502050000488b4c2438488b41604c8b3041f6c6017503ff55704d89f54983c50270f44c8928eb6d49b8010000000000000048bbffffffffffffffff498b4208909090ff15c60400004883f8017470488b5c241849ff72084c8b442430488b5308488b5c24384c89c89090ff12488b4c2438488b41604c8b304c8b6c24284d89f44d23e541f6c4017503ff55704d89f44d2be5eb05e9d30300004d8d64240170e941f6c4017503ff55704d89e34983eb0270f449ba1100000000000000eb05e9830000004d89d94d23ca41f6c1017503ff557050524c89da48d1fa498d42ff48f7ea4c8d48015a5870e648ff74243049ba807bf3acaa2a00004d89c849b9ffffffffffffffff4c89c749b8606cf4acaa2a00004889fb488b442408ff15f603000049b8ffffffffffffffff488b5c2418488b44243848ba40a1f3acaa2a0000ff15da030000eb7048b80100000000000000488d54243890ff15ca03000050eb5c4883fe03755b4883ff01745a48bb807bf3acaa2a0000498b431090ff15ae0300004883f8017471488b5c241849ff720849ff72104c8b442438488b5308488b5c24404c89c89090ff12488b4c240848ff3148ff7108eb14e9b1020000e9ac020000e9e9000000e9c700000048bb1f00000000000000488b44244890ff1556030000488b0424a8017503ff55704989c64981c690000000eb05e99500000070ea488b5c24484c89f0ff153203000048b8a00cefacaa2a0000ff152a030000488b5c244890ff15260300004c8b4c244849b80d00000000000000488b5c2408488b44241090ff150e03000049b8ffffffffffffffff488b5c2430488b44245048ba40a1f3acaa2a0000ff15f20200004c8b6c24504d8b65604d8b1c2441f6c3017503ff55704d89da4983c20270f44d891424eb6e48b80100000000000000488d5424389090ff15be02000050505050eb564883fefb75554883ff01747548bb807bf3acaa2a0000498b43109090ff159e0200004883f801745e488b5c241849ff72084c8b442430488b5308488b5c24384c89c89090ff12488b4c2438488b4160eb0fe964010000e95f010000e93e0100004c8b3041f6c6017503ff55704d89f54983ed0270f449bc1100000000000000eb0ae9ff000000e9fa0000004d89eb4d23dc41f6c3017503ff557050524c89ea48d1fa498d4424ff48f7ea4c8d58015a5870e54c8b14244d89d14d23cb41f6c1017503ff55704d8d4aff4d03cb70f4495148bb1f00000000000000488b44243890ff15e2010000488b5c243848b89100000000000000909090ff15d201000048b8a00cefacaa2a0000ff15ca010000488b5c243890ff15c60100004c8b4c243849b80d0000000000000048bb0900000000000000488b042490ff15aa01000049b8ffffffffffffffff488b5c2420488b44244048ba40a1f3acaa2a0000ff158e0100004c8b442440498b7860488b3740f6c6017503ff55704889f34883c30270f448891feb3348b80100000000000000488d542438ff155e0100005050eb1a48b80100000000000000488d542438909090ff154a010000505050504883c418488b5c2438488b5360488b0a488b43304c8b30514923cef6c101597503ff5570493bce7e154c8b2a4c892848b801000000000000004883c440c348b801000000000000004883c440c390|@3919,8191,@428,@305,@303,@3920,@3620,@3345,@3873,@3869,@3345,@3918,@3351,@3399,@3453,@3439,@3453,@3390,@3345,@3918,@3351,@3399,@3453,@3439,@3453,@3390,@3345,@3918,@3918|53,0,1 65,0,0 103,0,-1 127,0,@3596 172,0,@215 186,0,@7377 250,0,-8 309,0,@3267 323,0,@3267 333,0,-8 369,0,-1 389,0,@3343 443,0,0 453,0,-1 582,0,8 642,0,@3267 655,0,-1 668,0,@3611 692,0,-1 712,0,@3343 730,0,0 767,0,@3267 862,0,15 928,0,@1598 961,0,6 988,0,-1 1008,0,@3343 1061,0,0 1102,0,@3267 1207,0,8 1298,0,15 1325,0,72 1344,0,@1598 1377,0,6 1387,0,4 1408,0,-1 1428,0,@3343 1479,0,0 1504,0,0 1579,0,0 1594,0,0 3918:C9,528|90909090909090483b65187303ff554850504c8b72e0524c8d54240849b901000000000000004c8b42d8488b5af8488b42f0498b56109090ff124c8b2c244d8b65f84d89e34d8b542450498b5c2420488b442408ff15de0100004983fa01741e4d89d848bba03cf5acaa2a000048b8b01e60000000000090ff15c20100004c8b0c244d8b41e0498b78084d8b41f0498b59f8498b41e84889fa909090ff12488b3424488b5ef8488b5360488b0a488b46e851480bc8f6c101597503ff5570483bc87537488b5ef0488b442408ff15760100004c8b34244d8b6ef84d8b65604d8b1c2441f6c3017503ff55704d89da4983c20270f44d891424eb734c8b324d89f54c23e841f6c5017503ff55704d89f54c2be84d8d6d0170f141f6c5017503ff55704d89ec4983ec0270f449bb11000000000000004d89e24d23d341f6c2017503ff557050524c89e248d1fa498d43ff48f7ea4c8d50015a5870e648ff76f04d89d149ba807bf3acaa2a0000eb05e9280000004d89c849b9ffffffffffffffff4c89c749b8606cf4acaa2a00004889fb488b442410ff15b6000000488b3424488b5ef85348ff7350488b5b20488b442418ff15a2000000488b14244883fa0174224c8b44240848bba82cf5acaa2a000048b8b01e600000000000909090ff157e000000488b4c241049b8ffffffffffffffff488b5c2420488b41f848ba40a1f3acaa2a00004883c428ff255a0000009090|@3922,8191,@3545,@3269,@3394,@3513,@3353,@3269,@3345|30,0,0 101,0,@3868 111,0,I48 300,0,8 355,0,@3267 375,0,-1 388,0,@3611 455,0,@3836 465,0,I48 489,0,-1 508,0,@3343 3919:S27|5452414e535f54414228292e73746f7265496e537461636b283429 3920:C2,1176|48f7c001000000741e4883f8ef7c1d4883f8137f1c49be9e60f5acaa2a00004d8d74864441ffe6e9a2000000e99d000000e998000000e936010000909090e944010000909090e99c010000909090e929010000909090e973000000909090e96b000000909090e963000000909090e9e8000000909090e953000000909090e94b000000909090e943000000909090e936020000909090e933000000909090e92b000000909090e9fe020000909090e9df000000909090e913000000909090e9a3000000909090e9be03000090909048f7c301000000745e48f7c30100000074054989ddeb1748b86055edacaa2a0000ff555849bd010000000000000041f6c5017503ff55704981fd010000807c3748bb0100008000000000534923ddf6c3015b7503ff55704c3beb7d1048b80300000000000000c3e91600000048b80100000000000000c348b80100000000000000c348b80100000000000000c348b80100000000000000c348b80100000000000000c348b80100000000000000c348b80300000000000000c348b80300000000000000c348f7c301000000744148f7c30100000074054989ddeb1748b86055edacaa2a0000ff555849bd01000000000000004983fd05750b48b80300000000000000c348b80100000000000000c348b80100000000000000c348f7c301000000746f48f7c30100000074054989ddeb1a48b86055edacaa2a0000909090ff555849bd010000000000000041f6c5017503ff55704983fd017e52495548bb0300000000000000488b0424534823d8f6c3015b7503ff5570483bd87d3af6c3017503ff55704c8d73ff4c03f370f44c89f3eb05e95a000000483b65187303ff5548ebc448b80100000000000000e9350000004883c408c353480bd8f6c3015b7503ff5570483bd8750f48b803000000000000004883c408c348b801000000000000004883c408c348b80100000000000000c348b80100000000000000c348f7c301000000746d48f7c30100000074054989ddeb1848b86055edacaa2a000090ff555849bd010000000000000041f6c5017503ff55704983fd017e52495548bb0300000000000000488b0424534823d8f6c3015b7503ff5570483bd87d3af6c3017503ff55704c8d73ff4c03f370f44c89f3eb05e95a000000483b65187303ff5548ebc448b80100000000000000e9350000004883c408c353480bd8f6c3015b7503ff5570483bd8750f48b803000000000000004883c408c348b801000000000000004883c408c348b80100000000000000c348b80100000000000000c348f7c301000000746d48f7c30100000074054989ddeb1848b86055edacaa2a000090ff555849bd010000000000000041f6c5017503ff55704983fd017e52495548bb0300000000000000488b0424534823d8f6c3015b7503ff5570483bd87d3af6c3017503ff55704c8d73ff4c03f370f44c89f3eb05e95a000000483b65187303ff5548ebc448b80100000000000000e9350000004883c408c353480bd8f6c3015b7503ff5570483bd8750f48b803000000000000004883c408c348b801000000000000004883c408c348b80100000000000000c348b80100000000000000c348b80100000000000000c390909090|@3921,6153|23,0,$3920+54 231,0,@336 244,0,0 272,0,1073741824 300,0,1 316,0,0 327,0,0 338,0,0 349,0,0 360,0,0 371,0,0 382,0,1 393,0,1 427,0,@336 440,0,0 456,0,1 467,0,0 478,0,0 512,0,@336 528,0,0 555,0,1 625,0,0 663,0,1 678,0,0 693,0,0 704,0,0 738,0,@336 752,0,0 779,0,1 849,0,0 887,0,1 902,0,0 917,0,0 928,0,0 962,0,@336 976,0,0 1003,0,1 1073,0,0 1111,0,1 1126,0,0 1141,0,0 1152,0,0 1163,0,0 3921:S28|414d443634434f4445434f4e5328292e696e73747249735249283229 3922:S49|5452414e535f54414228292e73746f7265496e537461636b28342967656e6572616c53746f7265496e537461636b283129 3923:C3,120|90909090909090483b65187303ff5548a8017503ff55704883f8017c4e4c8b73604d8b2e504923c5a801587503ff5570493bc57d3648ff731849505352504c8b63384d8b1c2441f6c3017503ff55704d89da4983ea0270f44c89d0488d542428ff153a0000004883c428c348b80100000000000000c39090|@3925,8191,@3924|109,0,0 3924:C6,600|90909090909090483b65187303ff5548a8017503ff55704883f8017d0b48b80100000000000000c34c8b72e84989d14989c04c89c3498b4618909090ff153e02000048f7c0010000007570488b18488b134883fafb75694d8b71d849bdf1ffffffffffffff4d89f44d23e541f6c4017503ff557050524c89f248d1fa498d45ff48f7ea4c8d60015a5870e64c8b5b0849534d0bdc41f6c301495b7503ff55704d3bdc756e4c89df488b7008488b481048bb807bf3acaa2a0000eb0ae968010000e95b0100004889c8ff15ba0100004883f80174054889c8eb6e498b41e0495149505756498b59f04c8b7008498b41e84c89f29090ff124c8b6c24184d8b65e84d8b5c24604d8b1341f6c2017503ff5570eb05e9010100004d89d14983e90270ed49b811000000000000004c89cf4923f840f6c7017503ff557050524c89ca48d1fa498d40ffeb05e95000000048f7ea488d78015a5870df488b7424084889f34823dff6c3017503ff5570488d5eff4803df70f4504d8b4df04989c04889da48bb606cf4acaa2a00004889d090ff15fe000000488b04244883c408eb064951495050564d8d7fe84c3b7d107303ff554049c747f8020000004d89fe4989460849c706050000004d8d7fd84c3b7d107303ff554049c747f8040000004d89fd49c74518ffffffff49bc807bf3acaa2a00004d8965104c8b1c244d895d084d8975004c8b5424184d89e8488b5c2410498b42f8ff1582000000eb16495149505050eb0e495149505050eb06495149505050488b7c241040f6c7017503ff55704889fe4883ee0270f44889f0488b5424184883c420e9b1fdffff9090|@3926,8191,@428,@3314,@3504,@3276|31,0,0 93,0,-8 177,0,@3267 290,0,8 384,0,@3611 487,0,@3267 3925:S41|5452414e535f54414228292e6c6f6164456e7472794265666f72654f76657277726974696e67283329 3926:S56|5452414e535f54414228292e6c6f6164456e7472794265666f72654f76657277726974696e6728332966696e64546865456e747279283129 3927:S47|475f434f444528292e636f646567656e2831302967656e636465283629726573756c742d6d6f766541726773283229 3928:C13,656|90909090909090483b65187303ff55484883fb01746e50495049ff3049ff70084d89c249b9606cf4acaa2a000049b8881ef4acaa2a000048bb310000000000000048b820a9f4acaa2a000090ff1566020000488b5c241048b840a9f4acaa2a0000909090ff15560200004d8d7fe84c3b7d107303ff554049c747f8020000004d89feeb05e96f00000049c746080100000049890649564c8b44241848bb010000000000000048b8a00cefacaa2a000090ff1512020000488b5c241848b8ab00000000000000909090ff1502020000488b5c241848b89100000000000000909090ff15f2010000488b5c2418488b042490ff15ea010000eb0b50495049ff3049ff70085048bb1f00000000000000488b4424189090ff15ce0100004c8b7424104d8b2e4c8b6424204d89e34d23dd41f6c3017503ff55704d89e34d2bdd4d8d5b0170f141f6c3017503ff55704d89da4983ea0470f441f6c2017503ff55704981fa01ffffff7c4641f6c2017503ff55704981fa010100007d3449524c8b44242048bb010000000000000048b818f8f3acaa2a000090ff1556010000488b5c2420488b042490ff154e010000eb6d49534c8b44242048bb010000000000000048b84801f4acaa2a000090ff15320100004c8b0c2441f6c1017503ff55704d89c84983e80a70f4488b7c242048be01000000ffffffff49504c23c641f6c00149587503ff5570493bf07f5848bb010000000100000049504c23c3eb05e95000000041f6c00149587503ff55704c3bc37d32488b17488b0af6c1017503ff55704889c84883c00870f44889024d89c64c8b47104889cb4c89f0909090ff15aa000000eb0e48b880c9f3acaa2a000090ff55584c8b6c241049c745000300000048b801000000000000004883c430c3909090909090|@3929,8191,@3506,@3523,@3397,@3453,@3453,@3448,@3399,@3397,@3476,@3397,@3410|37,0,@3611 47,0,@3489 57,0,24 67,0,@3675 89,0,@3676 157,0,0 167,0,@1598 189,0,85 213,0,72 261,0,15 385,0,0 395,0,@3447 437,0,0 447,0,@3460 491,0,-2147483648 522,0,2147483648 610,0,@3391 637,0,0 3929:S27|414d443634434f4445434f4e5328292e6a756d706261636b283329 3930:C3,240|90909090909090483b65187303ff5548505348ff33488b1c24488b0348bb090000000000000048ba302e600000000000ff124883f8017502eb2ba8017503ff55704883f8017c0c49be0300000000000000eb0a49be01000000000000004983fe037402eb054989c6eb10a8017503ff55704989c64983c60870f44c8b6c24104d89ec4d23e641f6c4017503ff55704d89ec4d2be64d8d64240170f04983fc01743e4c8b44240848bb010000000000000048b8380aefacaa2a00009090ff1556000000483b65187303ff5548e945ffffff48b801000000000000004883c418c348b801000000000000004883c418c39090|@3931,8191,@3397|30,0,4 40,0,I110 73,0,1 85,0,0 168,0,0 178,0,@1580 210,0,0 225,0,0 3931:S24|414d443634434f4445434f4e5328292e616c69676e283229 3932:C3,112|90909090909090483b65187303ff55484883f801750b48b80100000000000000c35248ff7008488b00909090ff156600000050488b442408488b542410e8c5ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fe498946084c8b2c244d892e4c89f04883c418c3909090|@417,8191,@3933|24,0,0 3933:C6,360|90909090909090483b65187303ff55484c8b72f84989d54989c4498b46089090ff156a010000498b55f8a8017503ff55704989c64983c60270f4505049554954504c8d4c24184d89f0488b5a10488b420848baf870f5acaa2a000090ff15360100004d8d7fe84c3b7d107303ff554049c747f8020000004d89fd4c8b6424184d8965004c8b5c24204d895d084c8b54241049556a014d8b4ae04d8b42f84d89ca49b9ffffffffffffffff4c89c749b8ffffffffffffffff48bb0300000000000000488b4424184889fa909090ff1248f7c0010000007505488b30eb1848b8a81df5acaa2a000090ff555848be0100000000000000488b5c2418488b53f8488b4c2408f6c1017503ff55704889c84883c00470f44989c14989f0488b5a08488b421048ba1871f5acaa2a000090ff156e0000004c8b7424184d8b6ef849b8ffffffffffffffff4889c3498b450848ba40a1f3acaa2a00009090ff154a000000488b04244883c430c390|@3951,8191,@3658,@3936,@3939,@3345|83,0,@3934 162,0,-1 175,0,-1 185,0,1 222,0,@3810 236,0,0 291,0,@3935 317,0,-1 334,0,@3343 3934:O3|@3936,@3935,@3594 3935:O3|@3939,@3938,@3915 3936:C6,464|90909090909090483b65187303ff554852505349504951488b521090ff124c8b7424184d8b6e384d8b65004d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fb49c703010000004d8d7fe84c3b7d107303ff554049c747f8020000004d89fa4c8b084d894a0849c7021b0000004d8d7fd84c3b7d107303ff554049c747f8040000004d89f849c740180100000049c740100300000049c7400801000000488b78084989384d8d7ff04c3b7d107303ff554049c747f8010000004c89fe4c890650495449534c8b4424284889f34c89d090ff151a0100004d8d7fe84c3b7d107303ff554049c747f8020000004c89fb488b14244889530848c703ffffffff4c8b4424284889d948bb01000000000000004889c89090ff15de0000004d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b7424104c89700848c700050000004c8b4424304889c348b84858f4acaa2a0000ff15a60000004c8b6c24384c8b4c24204989c0488b5c2430488b442428498b5508909090ff1249b8ffffffffffffffff4889c3488b44243048ba40a1f3acaa2a00009090ff156a0000004c8b6424184c8b1c244d891c244c8b5424084d8954240848b801000000000000004883c440c390909090|@3937,8191,@3397,@3638,@3266,@3345|271,0,0 340,0,@3590 388,0,-1 406,0,@3343 447,0,0 3937:S26|5452414e535f54414228292e7075736841646472657373283429 3938:O2|@3944,@3594 3939:C3,320|90909090909090483b65187303ff554841f6c1017503ff55704d89ce4983ee0270f452505349514d89f1488b52109090ff124c8b6c24084d8b65604d8b1c244c8b142449534d23da41f6c301495b7503ff55704d3bda7e1f4c8b442418498b78084d89d04c89eb488b4424104889fa90ff124989c1eb0a49b901000000000000004c8b0c2441f6c1017503ff55704d89c84983e80270f448bff1ffffffffffffff4c89c64823f740f6c6017503ff557050524c89c248d1fa488d47ff48f7ea488d70015a5870e64d8d7fe84c3b7d107303ff554049c747f8020000004c89fb4889730848c703fbffffff4c8b44240848b82875f5acaa2a0000909090ff1566000000488b542408488b4a604c8b314c8b2c2449554d0bee41f6c501495d7503ff55704d3bf574134989c448b84875f5acaa2a0000909090ff55584883c420c390|@3943,8191,@3266|121,0,0 153,0,-8 241,0,@3940 300,0,@3941 3940:S16|7075736856616c7565546f537461636b 3941:O3|@7377,@215,@3942 3942:S40|7075736856616c7565546f537461636b3a20436f756c646e2774207075736820746f20737461636b 3943:S31|5452414e535f54414228292e7075736856616c7565546f537461636b283429 3944:C6,248|90909090909090483b65187303ff55484c8b73604d8b2e48ff731850535249504c8b63384d8b1c2441f6c3017503ff55704d89da4983ea0270f448ff735049554c89d0488d542438ff15d20000004c8b4c24204d8b4160498b38488b342456480bf740f6c6015e7503ff5570483bfe740d48b82077f5acaa2a0000ff5558498b18488b5424104889d94823caf6c1017503ff55704889d9482bca488d490170f1488b5c24284889c8ff157a000000488b4424104989004c8b7424084983fe017426488b4424289090ff15620000004c8b44242048bb8077f5acaa2a00004883c438ff255100000048b801000000000000004883c438c39090|@3949,8191,@3948,@3659,@3368,@3269|115,0,@3945 213,0,@3947 233,0,0 3945:O3|@7377,@215,@3946 3946:S47|726573657442757452656c6f61643a206d75737420686176652070757368656420736f6d657468696e67206d6f7265 3947:S14|726573657442757452656c6f6164 3948:C6,632|90909090909090483b65187303ff5548a8017503ff55704883f8017d0b48b80100000000000000c34c8b72e84989d14989c04c89c3498b4618909090ff155e02000048f7c001000000756e488b18488b134883fafb75674d8b71d841f6c6017503ff55704d89f54983ed0270f449bcf1ffffffffffffff4d89eb4d23dc41f6c3017503ff557050524c89ea48d1fa498d4424ff48f7ea4c8d58015a5870e54c8b530849524d23d341f6c201495a7503ff55704d3bd37d6feb0ae986010000e9790100004c89d7488b7008488b481048bb807bf3acaa2a00004889c890ff15c60100004883f80174054889c8eb6e498b41e0495149505756498b59f04c8b7008498b41e84c89f29090ff124c8b6c24184d8b65e84d8b5c24604d8b1341f6c2017503ff5570eb05e9090100004d89d14983e90270ed49b8f1ffffffffffffff4c89cf4923f840f6c7017503ff557050524c89ca48d1fa498d40ffeb05e95400000048f7ea488d78015a5870df488b7424084889f34823dff6c3017503ff55704889f3482bdf488d5b0170f1504d8b4df04989c04889da48bb606cf4acaa2a00004889d09090ff1506010000488b04244883c408eb064951495050564c8b7424184d8d7fe84c3b7d107303ff554049c747f8020000004d89fd4989450849c74500050000004d8d7fd84c3b7d107303ff554049c747f8040000004d89fc49c7442418ffffffff49bb807bf3acaa2a00004d895c24104c8b14244d895424084d892c244d89e0488b5c2410498b46f8ff1586000000eb16495149505050eb0e495149505050eb06495149505050488b7c241040f6c7017503ff55704889fe4883ee0270f44889f0488b5424184883c420e995fdffff909090909090|@3950,8191,@428,@3314,@3504,@3276|31,0,0 111,0,-8 208,0,@3267 310,0,-8 407,0,@3611 518,0,@3267 3949:S29|5452414e535f54414228292e726573657442757452656c6f6164283329 3950:S43|5452414e535f54414228292e726573657442757452656c6f61642833296c6f6164456e7472696573283129 3951:S45|475f434f444528292e636f646567656e2831302967656e636465283629726573756c742d67656e546167283129 3952:C3,128|90909090909090483b65187303ff55484883f801750b48b80100000000000000c34c8b72f85248ff70084d8b4e104d8b4608488b5ab0488b00909090ff156600000050488b442408488b542410e8b5ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fd498945084c8b24244d8965004c89e84883c418c39090|@417,8191,@3953|24,0,0 3953:C6,400|90909090909090483b65187303ff5548534950495148ff3048ff700848bb010000000000000048b8d02bf5acaa2a0000ff15820100004c8b7424184d8b6e604c8b6424204d8965004d8b1e49c703010000004d8b562849c702010000004d8b4e384d8b0141f6c0017503ff55704c89c74883ef0270f44d8d7fe84c3b7d107303ff554049c747f8020000004c89fe48bbc87df5acaa2a000048891e488b1424488956084889f84889f2909090ff12488b48104883f901745d504c8b700848b801000000000000004c89f29090ff124c8b4424204889c348b8010000000000000048ba58a1f3acaa2a00009090ff15ce0000004c8b2c2448b80100000000000000498b5500ff124883c408483b65187303ff5548eb994c8b74241049ff3649ff760849ff766848bb25000000000000004c89f09090ff158e000000488b5c242848b80500000000000000909090ff157e0000004c8b6c240849c74500010000004c8b6424104d8b1c244c8b14244d891a4d8b0c244c8b4424204d890848b801000000000000004883c440c3909090909090|@3957,8191,@3370,@3348,@3399,@3930|30,0,0 40,0,@3831 144,0,@3954 191,0,0 216,0,0 226,0,@3344 248,0,0 295,0,18 321,0,2 381,0,0 3954:C2,168|4c8b7208504923c6a801587503ff5570493bc67c0c49bd0300000000000000eb0a49bd01000000000000004d8d7fe04c3b7d107303ff554049c747f8030000004d89fc49bba87ef5acaa2a00004d891c24498954241049894424084d8d7fe84c3b7d107303ff554049c747f8020000004d89fb49ba107ff5acaa2a00004d8913498943084d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c8968104c8958084c8920c3|@3575,7941|23,0,1 35,0,0 69,0,@3955 117,0,@3956 3955:C2,48|90909090909090483b65187303ff55484c8b720841f6c6017503ff55704d89f54983ed0270f44c89e8488b5210ff2290|@3573,8191| 3956:C2,8|488b4208c3909090|@3573,5| 3957:S21|5452414e535f54414228292e666978757048283429 3958:C34,2264|90909090909090488dbc2438ffffff483b7d187303ff55504883f80175364c8b4ab04983f90174214c8b42f84c8b52084c8b4ae0498b78184c8b42e8488b5aa8488b42c04889faff2248b80100000000000000c352534950495148ff3048ff70084c8b4ab84989d8488b5c2418488b4424109090ff15860800004883f80174704c8b7424284d8b6ef8498b4508909090ff15720800004c8b6424284d8b5c24f85050504c8d54240849b903000000000000004d8b4424a0498b5b08498b431048ba705af4acaa2a0000909090ff153e0800004c8b5424404d8b4af849b8ffffffffffffffff488b5c2410498b4108eb05e98204000048ba40a1f3acaa2a000090ff15120800004c8b442440498b78f8488b7708488b5e20488b442408ff15fe070000488b5e504883fb0174234989f048bba03cf5acaa2a000048b8b01e60000000000090ff15de0700004889c2eb0a48ba0100000000000000488b542440488b4af8488b5910488b410848ba885af4acaa2a0000ff15b60700004c8b7424404d8b6ef84d8b650850498b5c2420909090ff15a20700004c8b5c24484d8b53f84d8b4a08495149ff7150498b5920488b4424209090ff15860700004c8b04244983f80174274c8b44240848bba82cf5acaa2a000048b8b01e600000000000909090ff15620700004889c7eb0a48bf0100000000000000488b7c2458488b77f848ff76104c8b57b84c8b4c24504c8b442448488b5c2418488b4424289090ff152e070000488b5c2458488b53f850488b5a10488b4208ff151e070000488b4c24604c8b71f84d8b6e084d8b65384d8b1c2450495549ff76106a014d89da49b901000000000000004c8b4424084c89eb48bab0e0f4acaa2a000090ff15e20600004c8b5424084d8b0a49c701010000004d8b422849c70001000000488b3c2448ff3748ff770848ff776848bb01000000000000004889f8ff15ae060000488b74240848c70601000000488b5c2410488b13488b0c24488911488b034c8bb424900000004d8b6eb04983fd0174694d8b5ef8504d8b56084d8b4ee04d8b46e8498b5ea8498b46c0498b531890ff124c8b9424980000004d8b4ae84983f901751a4d8b42f84889c7498b400890ff15420600004883f8017524eb054889c7eb1d5748b80100000000000000498b50209090ff124889c6eb10e9e800000048be0100000000000000574c8b8424a0000000498b78f8488b7708488b5e28488b134883fa01740c48b90100000000000000eb625648ff7710488b1c244889f0ff15da050000488b4c24084c8b712849c7060300000050488b442408ff15c60500004d8d7fe04c3b7d107303ff554049c747f8030000004d89fd4c8b6424184d8965104c8b1c244d895d08498945004c89e94883c4184c8b142449f7c20100000075344c8b8424a0000000498b78f85149b8ffffffffffffffff498b1a488b470848ba40a1f3acaa2a000090ff155e0500004989c1eb0b49b90100000000000000514c8b2424eb6d4d8b66f84d8b5c24084d8b53284d8b0a4983f901740c49bc0100000000000000eb6f50495349ff742410488b1c244c89d8909090ff15160500004c8b442408498b782848c7070300000050488b442408ff15020500004d8d7fe04c3b7d107303ff554049c747f803000000eb05e9220000004c89fe48c7461001000000488b1c2448895e084889064989f44883c418eb015050504d8d7fe84c3b7d107303ff554049c747f8020000004d89f8488bbc248000000049897808488bb4248800000049893049544c89c348b80100000000000000488d9424b80000009090ff157e040000488b9c24b0000000488b53f848ff72084c8b5424784989c14c8b4210488b1c24488b44240848ba60dcf4acaa2a0000909090ff154e040000488b0c244c8b7424784c8b69104d8b66084d8965004881c4c0000000c34c8b7424284d8b6ef8498b4508ff15260400004c8b6424284c8b1c244983fb01750c49ba0300000000000000eb0a49ba01000000000000004983fa01753a4d8b4424f85049ff7424b84952498b780849b80300000000000000498b5c24a04889f848ba40a1f3acaa2a00009090ff15ce0300004989c1eb1249b901000000000000005049ff7424b849524c8b54242049ff3249ff7208488b0424488d5424589090ff15a20300004c8b4c24104983f9017532488b7c2450488b77f85049b8ffffffffffffffff488b5fa0488b460848ba40a1f3acaa2a000090ff15720300004989c0eb0b49b80100000000000000504c8b442458498b78f84d8b50084d8b48e0498b70a8498b58e84989d84889f3488b442410488b57189090ff12488b542458488b4ae84883f90175194c8b72f84989c5498b4608ff151e0300004883f8017527eb054989c5eb204c8b5c24584d8b53f8495548b80100000000000000498b5220ff124989c4eb0c49bc01000000000000004955488b4424604c8b70f84d8b6e084d8b65284d8b1c244983fb01740c49ba0100000000000000eb63495549ff7610488b1c244c89e890ff15b20200004c8b5424084d8b4a2849c7010300000050488b442408ff159e0200004d8d7fe04c3b7d107303ff554049c747f8030000004d89f8488b7c241849897810488b3424498970084989004d89c24883c418488b1c2448f7c3010000007531488b4c2460488b41f8495249b8ffffffffffffffff488b1b488b400848ba40a1f3acaa2a0000ff153a0200004889c2eb0c48ba01000000000000004952488b542468488b4af84c8b4110488b5908488b44241048ba8889f5acaa2a000090ff150a020000488b4424304883f80174074c8b742408eb6f49be01000000000000004c8b6c24184983fd0175054d89f4eb2e41f6c6017503ff55704d89f34983c30270f44d8b6d084d89de483b65187303ff5548ebd149bc01000000000000004c8b5c24604d89da4d23d441f6c2017503ff55704d89da4d2bd44d8d520170f14c8b4c2450eb05e91d0000004c8b4424584c89d3488b442440488b542468909090e881f7ffff4989c64c8b4c24684d8b41f849ff70084c8b5424404d89f14d8b4010488b1c24488b44240848ba60dcf4acaa2a0000909090ff153a010000488b3c24488b742440488b5f10488b56084889134883c478c390|@3981,8191,@3982,@3880,@3595,@3345,@3545,@3269,@3646,@3353,@3353,@3269,@3984,@3706,@3723,@3399,@3889,@3706,@3630,@3345,@3706,@3630,@3990,@3720,@3880,@3345,@3964,@3345,@3889,@3706,@3630,@3345,@3960,@3720|75,0,0 170,0,1 193,0,@3593 221,0,-1 247,0,@3343 305,0,@3868 315,0,I48 337,0,0 364,0,@3594 459,0,@3836 469,0,I48 493,0,0 605,0,0 623,0,@3722 681,0,0 830,0,0 858,0,0 898,0,0 1034,0,-1 1051,0,@3343 1073,0,0 1112,0,0 1290,0,0 1353,0,@3718 1435,0,1 1447,0,0 1480,0,1 1498,0,@3343 1521,0,0 1589,0,-1 1607,0,@3343 1629,0,0 1740,0,0 1761,0,0 1800,0,0 1935,0,-1 1952,0,@3343 1973,0,0 2007,0,@3959 2042,0,0 2104,0,0 2221,0,@3718 3959:O2|@3960,@3722 3960:C3,248|90909090909090483b65187303ff55484c8b73284d8b2e4983fd01751748b8d88af5acaa2a0000ff555848b801000000000000004883f801750b48b80100000000000000c348f7c00100000075064c8b6008eb1f4989c448b8b0d7edacaa2a00009090ff55584c89e049bc01000000000000004c8b6b384d8b5d00505349506a014d89da49b901000000000000004c89e0488b5208909090ff124c8b5424084d8b4a2849c701010000004d8b0249c70001000000488b7c241048f7c7010000007505488b37eb1948b8b0d7edacaa2a00009090ff555848be0100000000000000488b1c244889f04883c418ff252f00000090909090909090|@3963,8191,@3448|31,0,@3961 44,0,0 60,0,0 89,0,@970 107,0,0 134,0,0 201,0,@970 216,0,0 3961:O3|@7377,@215,@3962 3962:S12|4e6f74206272616e63686564 3963:S20|5452414e535f54414228292e6669787570283329 3964:C9,568|90909090909090483b65187303ff55484883f801751a48b8e88df5acaa2a0000909090ff555848b801000000000000004c8b70084983fe0175724c8b6af84d8b65f84d8d7fe84c3b7d107303ff554049c747f8020000004d89fb4c8b104d89530849c703fdffffff524d8b4424084c89db48b888d4f4acaa2a000090ff15de0100004c8b0c244d8b41f8498b78f8488b7710488b5c240848897424084c8b570849b9308ef5acaa2a0000eb05e92c000000498b50a049b8308ef5acaa2a00004889d94889c34889d048ba488ef5acaa2a00004883c40851ff258b0100004c8b6af84d8b65f84989d14d89f0488b38498b44240890ff1576010000498b71f8488b5ef849514950575049b80300000000000000488b5308488b5ea04889d048ba40a1f3acaa2a000090ff154a010000488b4c2418488b41f84c8b70f84d8d7fe84c3b7d107303ff554049c747f8020000004d89fd4c8b6424084d89650849c74500fdffffff4d8b46084c89eb48b888d4f4acaa2a0000909090ff15020100004c8b5c24184d8b53f84d8b4af849ff71104d8b42a04d8b510849b9d09af5acaa2a00004c89c749b8d09af5acaa2a00004889c34889f848ba488ef5acaa2a00009090ff15c200000050488b442418488b542420e831feffff488b742420488b5ef8488b53f85048ff72084c8b54241849b901000000000000004c8b4210488b1c24488b44241048ba60dcf4acaa2a00009090ff157a000000488b0c24488b4424184c8b71104c8b68084d892e488b4424084883c438c390909090|@4004,8191,@3266,@3969,@3880,@3345,@3266,@3969,@3720|24,0,@3965 40,0,0 115,0,@3704 162,0,@3967 183,0,@3967 202,0,@3968 266,0,1 287,0,@3343 365,0,@3704 409,0,@3980 422,0,@3980 438,0,@3968 495,0,0 518,0,@3718 3965:O3|@7377,@215,@3966 3966:S23|707574496e436173657320686173206e6f206361736573 3967:O2|0,@3522 3968:O2|@3969,@3593 3969:C30,1384|90909090909090483b65187303ff554850504889d74889c64889d9495249ff72504889f3498b4218ff15620500004883f801756a5756514950495148bbffffffffffffffff4889f0ff154a0500004889c348b8d05df4acaa2a000090ff153e0500004d8d7fe04c3b7d107303ff554049c747f8030000004d89fe4989461049bd280aedacaa2a00004d896e0849bcf8e36cadaa2a00004d89264c89f0eb05e903000000ff55584c8d7424104989364c8d6c2410498945084c8b64241850504c8b5c241849ff34244889cb498b43189090ff15d20400004883f801756a5756514950495148bbffffffffffffffff4889c8ff15ba0400004889c348b8d05df4acaa2a000090ff15ae0400004d8d7fe04c3b7d107303ff554049c747f8030000004d89fa4989421049b9280aedacaa2a00004d894a0849b8f8e36cadaa2a00004d89024c89d0eb05e903000000ff55584c8d54240849890a488d5c240848894308488b542410575156488b4424184c8b284983fdfd756d4c8b224d8b1c244983fbfd75654c8b50084c89d34c89c8ff152e0400004883f80174545050495149524c8d54241049b901000000000000004989c8488b5c2458488b442478488b57089090ff1249b8ffffffffffffffff488b5c2418488b44245848ba40a1f3acaa2a0000eb0fe900020000e923010000e94e000000909090ff15ce03000049b8ffffffffffffffff488b5c2420488b44245848ba40a1f3acaa2a0000ff15b20300004c8b4c24784c8b442408488b1c24488b442410909090ff159e0300004989c6eb73498b5c24084c89c090ff15920300004883f80174635050495049ff7424084c8d54241049b901000000000000004989f0488b5c2458488b442478488b5708909090ff1249b8ffffffffffffffff488b5c2418488b44245848ba40a1f3acaa2a0000ff154203000049b8ffffffffffffffffeb0ae932020000e93b000000488b5c2428488b44245848ba40a1f3acaa2a0000ff151a0300004c8b4c24784c8b442408488b1c24488b442410909090ff15060300004989c6eb714c89c0488d54245090ff15fa0200004989c650505050eb5e4c8b50084c89d34c89c8909090ff15e60200004883f80174705050495149524c8d54241049b901000000000000004989c8488b5c2458488b442478488b57089090ff1249b8ffffffffffffffff488b5c2418488b442458eb0ae97c010000e97701000048ba40a1f3acaa2a0000ff158e02000049b8ffffffffffffffff488b5c2420488b442458eb05e93200000048ba40a1f3acaa2a000090ff156a0200004c8b4c24784c8b442408488b1c24488b442410909090ff15560200004989c6eb734c89c0488d54245090ff154a0200004989c650505050eb604c8b224d8b1c244983fbfd7558498b5c24084c89c0ff152e0200004883f80174725050495049ff7424084c8d54241049b901000000000000004989f0488b5c2458488b442478488b5708909090ff1249b8ffffffffffffffffeb0fe9a2000000e99d000000e982000000488b5c2418488b44245848ba40a1f3acaa2a0000909090ff15ca01000049b8ffffffffffffffffeb05e93c000000488b5c2428488b44245848ba40a1f3acaa2a000090ff15a60100004c8b4c24784c8b442408488b1c24488b442410909090ff15920100004989c6eb2e4c89c0488d54245090ff15860100004989c650505050eb164c89c0488d54245090ff15760100004989c6505050504c8b5424504983fa01742449564c8b44246048bbe094f5acaa2a000048b8b01e60000000000090ff154a010000eb024956488b9c2480000000488b44246090ff153a0100004d8d7fe04c3b7d107303ff554049c747f8030000004d89f949c7411001000000498941084c8b04244d89014c89c84883c478c208009090909090|@3972,8191,@428,@305,@303,@428,@305,@303,@3973,@3345,@3345,@3642,@3973,@3345,@3345,@3642,@3971,@3973,@3345,@3345,@3642,@3971,@3973,@3345,@3345,@3642,@3971,@3971,@3269,@3706|61,0,-1 83,0,@3596 128,0,@215 142,0,@7377 229,0,-1 251,0,@3596 296,0,@215 310,0,@7377 421,0,0 452,0,-1 472,0,@3343 508,0,-1 528,0,@3343 612,0,0 644,0,-1 664,0,@3343 680,0,-1 712,0,@3343 821,0,0 852,0,-1 884,0,@3343 900,0,-1 927,0,@3343 1048,0,0 1080,0,-1 1117,0,@3343 1136,0,-1 1163,0,@3343 1277,0,@3970 1287,0,I48 3970:S16|636f6d70617265416e644272616e6368 3971:C9,408|90909090909090483b65187303ff554850504c8b72c052504c8d54241049b901000000000000004c8b42b0488b5ae8488b4208498b560890ff124c8b6c24084d8b65e84d89e34d8b542450498b5c2420488b442410909090ff15620100004983fa0174234d89d848bba03cf5acaa2a000048b8b01e60000000000090ff15460100004989c1eb0a49b901000000000000004c8b4c240850504d8b41c04989e2498b7908498b71e8498b59b849b90100000000000000498b50084989d84889f34889f89090ff12488b4c2418488b41e85048ff7050488b5820488b442430909090ff15ea0000004c8b34244983fe0174274c8b44240848bba82cf5acaa2a000048b8b01e600000000000909090ff15c60000004989c5eb0a49bd01000000000000004c8b6c242849b8ffffffffffffffff488b5c2438498b45e848ba40a1f3acaa2a000090ff15960000004c8b64242849b8ffffffffffffffff488b5c2418498b4424e848ba40a1f3acaa2a0000909090ff15720000004c8b5c24284d8b4b084c8b442420488b5c2410488b4424304883c440ff2558000000|@3978,8191,@3545,@3269,@3353,@3269,@3345,@3345,@3975|31,0,0 105,0,@3868 115,0,I48 137,0,0 173,0,0 247,0,@3836 257,0,I48 281,0,0 296,0,-1 315,0,@3343 337,0,-1 357,0,@3343 3972:S31|5452414e535f54414228292e636f6d70617265416e644272616e6368283629 3973:C2,168|4c8b304983feff750b48b80300000000000000c348f7c301000000746048f7c30100000074054989ddeb1948b86055edacaa2a00009090ff555849bd010000000000000041f6c5017503ff55704981fd010000807c3748bb0100008000000000534923ddf6c3015b7503ff55704c3beb7d1048b80300000000000000c3e91600000048b80100000000000000c348b80100000000000000c348b80100000000000000c39090909090|@3974,6153|11,0,1 45,0,@336 60,0,0 88,0,1073741824 116,0,1 132,0,0 143,0,0 154,0,0 3974:S27|414d443634434f4445434f4e5328292e6973436f6d705249283229 3975:C7,352|90909090909090483b65187303ff55484d8b304983fe037558495149ff70084989d84889c348b820a9f4acaa2a000090ff1552010000488b5c2408488b042490ff154a0100004989c54d8d7fe84c3b7d107303ff554049c747f8020000004c89f848c74008010000004c89284883c410c34983fe0175714c8b2841f6c5017503ff55704983fd097e054989dceb034989c44d8b5808498b3b4883ff0d750c49ba0300000000000000eb1c4883ffeb750c49ba0300000000000000eb0a49ba01000000000000005053495149534c89d64d89ca4989f14989d84889c34c89e09090ff15b2000000eb05e95c0000004c8b4c24084c8b442410488b5c241848b820a9f4acaa2a00009090ff1592000000488b5c2408488b042490ff158a0000004889c34d8d7fe84c3b7d107303ff554049c747f8020000004c89f848c74008010000004889184883c420c348b8089af5acaa2a0000ff555848b80100000000000000|@3979,8191,@3517,@3523,@3520,@3517,@3523|39,0,@3675 160,0,1 178,0,1 190,0,0 254,0,@3675 331,0,@3976 344,0,0 3976:O3|@7377,@215,@3977 3977:S31|53686f756c64206e6f7420686176652073686f72742f6c6f6e672068657265 3978:S43|5452414e535f54414228292e636f6d70617265416e644272616e636828362967656e436f6d705252283129 3979:S37|414d443634434f4445434f4e5328292e636f6d70617265416e644272616e63685252283429 3980:O2|0,@3628 3981:S47|475f434f444528292e636f646567656e2831302967656e636465283629726573756c742d63617365436f6465283429 3982:C2,272|90909090909090483b65187303ff554848f7c001000000746348f7c301000000745f41f6c0017503ff55704983f80f7e554989d94c23c841f6c1017503ff55704989d94c2bc84d8d490170f141f6c1017503ff55704983f9017c0c48bf0300000000000000eb0a48bf01000000000000004883ff0375144c89ceeb21e983000000e973000000e96300000041f6c1017503ff55704c89ce4883ee0470f4495048bb07000000000000004889f048baf02d6000000000009090ff12488b1c24534823d8f6c3015b7503ff5570483bd87c0f48b803000000000000004883c408c348b801000000000000004883c408c348b80100000000000000c348b80100000000000000c348b80100000000000000c390|@3983,8191|93,0,1 105,0,0 161,0,3 174,0,I109 210,0,1 225,0,0 240,0,0 251,0,0 262,0,0 3983:S33|414d443634434f4445434f4e5328292e757365496e646578656443617365283429 3984:C18,1360|90909090909090483b65187303ff55484c8b7424084983fa01740c49bd0100000000000000eb7541f6c0017503ff55704d8d68ff4d03e870f441f6c5017503ff55704d89ea4983c20270f441f6c1017503ff55704d8d69ff4d03e970f441f6c5017503ff55704d89ec4983c40270f450534950495149ff3649ff7608495249544d89f149b801000000000000004889c348b8201ff4acaa2a0000eb05e91a010000909090ff15ce040000488b5c244848b80300000000000000909090ff15be040000488b5c244848b8c88af4acaa2a0000909090ff15ae040000504c8b4c24504c8b442410488b5c244048b8fdffffffffffffffff1596040000488b5c245048b8b0a2f5acaa2a0000909090ff1586040000504c8b4c24584c8b442410488b5c244848b8fdffffffffffffffff156e040000488b5c245848b8c0a2f5acaa2a0000909090ff155e0400004d8d7fe84c3b7d107303ff554049c747f8020000004d89fb49c74308010000004989034d8d7fe84c3b7d107303ff554049c747f8020000004d89fa4d895a084c8b0c244d890a4d8d7fe84c3b7d107303ff554049c747f8020000004d89fd4d8955084c8b4424084d8945004883c420eb0d50534950495149ff3649ff76084d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fc49c70424010000004c8b5c24204d8d7fe84c3b7d107303ff554049c747f8020000004d89fa4d8b0b4d894a0849c7021b0000004d8d7fd84c3b7d107303ff554049c747f8040000004d89f849c740180100000049c740100300000049c7400801000000498b7b084989384d8d7ff04c3b7d107303ff554049c747f8010000004c89fe4c8906495549544951574c8b4424584889f34c89d0ff152e0300004d8d7fe84c3b7d107303ff554049c747f8020000004c89fb488b5424104889530848c703ffffffff4c8b4424584889d948bb01000000000000004889c890ff15f2020000488b44243849bef1ffffffffffffff4989c54d23ee41f6c5017503ff557050524889c248d1fa498d46ff48f7ea4c8d68015a5870e641f6c5017503ff55704d89ec4983ec0870f448ff74244048ff74246049ba03000000000000004c8b4c24584c8b4424504c89e348b8b01ef4acaa2a0000ff15820200004c8b1c244983fb0174504d8d7fd84c3b7d107303ff554049c747f8040000004d89f949c741180100000049c741100100000049c74108010000004d89194d8d7ff04c3b7d107303ff554049c747f8010000004d89fa4d890aeb0a49ba01000000000000004c8b4424584c89d348b8a00cefacaa2a0000ff150e0200004c8b54240841f6c2017503ff55704d89d14981c1c001000070f1488b5c24584c89c8ff15ee0100004c8b44242049c70003000000488b7c2430488b7424384889fb4823def6c3017503ff55704889fb482bde488d5b0170f1f6c3017503ff55704889da4883c20270f448b911000000000000004889d04823c1a8017503ff55705248d1fa488d41ff48f7ea488d40015a70eba8017503ff55704989c64983c60670f44c89f3488b442458ff156e0100004c8b6c24284d8b650048bb09000000000000004c89e048ba302e6000000000009090ff124883f8017502eb2ba8017503ff55704883f8017c0c49bb0300000000000000eb0a49bb01000000000000004983fb037402eb054989c3eb10a8017503ff55704989c34983c30870f44983fb0574304c8b44245848bb010000000000000048b8380aefacaa2a0000909090ff15e2000000483b65187303ff5548e95effffff4c8b5c24284d8b134c8b4c24104d89114952488b442440488d542458ff15ba000000488b5c2460488b442420ff15b2000000488b04244883c458c2080090909090909090|@3988,8191,@3515,@3461,@3523,@3526,@3523,@3526,@3523,@3397,@3638,@3511,@3397,@3453,@3399,@3397,@3987,@3448|29,0,0 133,0,0 146,0,@3496 177,0,1 201,0,@3628 236,0,-2 257,0,@3985 292,0,-2 313,0,@3986 692,0,0 717,0,-8 793,0,1 816,0,@3491 922,0,0 940,0,@1598 1061,0,8 1141,0,4 1154,0,I110 1189,0,1 1201,0,0 1251,0,0 1261,0,@1580 3985:O1|-8 3986:O1|-7 3987:C11,248|90909090909090483b65187303ff55484c8b72e0504923c6a801587503ff5570493bc67e0b48b80100000000000000c34989d44989c348b84801f4acaa2a0000ff15da00000049544953498b5c240890ff15d20000004c8b542408498b5a0848b80100000000000000909090ff15be00000048b8380aefacaa2a0000ff15b60000004c8b4c2408498b590890ff15ae00000048b8380aefacaa2a0000ff15a60000004c8b442408498b580890ff159e00000048b8380aefacaa2a0000ff1596000000488b7c2408488b5f0890ff158e000000488b342440f6c6017503ff55704889f04883c00270f4488b5424084883c410e911ffffff9090|@3989,8191,@3439,@3453,@3461,@3439,@3453,@3439,@3453,@3439,@3453|39,0,0 56,0,@3460 97,0,0 116,0,@1580 148,0,@1580 180,0,@1580 3988:S30|414d443634434f4445434f4e5328292e696e646578656443617365283629 3989:S48|414d443634434f4445434f4e5328292e696e646578656443617365283629696e697469616c6973655461626c65283129 3990:C13,872|90909090909090483b65187303ff554848f7c301000000756e4c8b334c8b6af84d8b65f84d8b5c24084d8b53384d8b0a525049ff3649ff760848ff7308495349ff7424106a014d89ca49b901000000000000004c8b4424084c89db488b429048bab0e0f4acaa2a0000909090ff151e0300004c8b442408498b3848c70701000000498b7028eb05e9c202000048c70601000000488b1c2448ff3348ff730848ff736848bb0100000000000000488b442418909090ff15de020000488b54240848c70201000000488b4c2410488b014c8b34244989064c8b294c8b6424484d8b5c24f84d8b53f84d89e9498b4208909090ff15aa02000049514989c0488b442438488d542458909090ff159a020000488b7424484883fe0175054889c7eb0f488d54245890ff15860200004889c7488b5c2450488b53f8488b4af84950574c8b52084c8b4ae04c8b42e8488b5aa8488b442450488b51189090ff124c8b7424604d8b6ef84d8b65e84983fc0175194d8b5df84989c2498b4308ff153a0200004883f801752beb054989c2eb244c8b442460498b78f8488b77f8495248b80100000000000000488b5620ff124989c1eb0c49b9010000000000000049524c8b5c24484983fb0175454c8b5424684d8b4af84d8b41f849ff7010498b7a98498bb260ffffff498b5ae0498b52e84989d24989d94989f0488b5c24104889f890ff15be010000488b04244883c470c34c8b5424684d8b4af84d8b41f8498b7808488b7728488b1e4883fb01740c48ba0100000000000000eb645749ff7010488b1c244889f8909090ff157e010000488b542408488b4a2848c7010300000050488b442408ff156a0100004d8d7fe04c3b7d107303ff554049c747f8030000004d89fe4c8b6c24184d896e104c8b24244d8966084989064c89f24883c4184c8b1c2449f7c30100000075354c8b4c24684d8b41f8498b78f85249b8ffffffffffffffff498b1b488b470848ba40a1f3acaa2a000090ff15020100004989c2eb0b49ba010000000000000052488b5c2450488b442410488b542470e80dfdffff4c8b5424704d8b4af84d8b41f849ff70084c8b5424204989c14d8b4010488b1c24488b44240848ba60dcf4acaa2a00009090ff15ae000000488b3c24488b742420488b5f10488b56084889134881c480000000c348b8b0a8f5acaa2a0000909090ff555848b80100000000000000|@3994,8191,@3723,@3399,@3880,@3995,@3998,@3889,@3993,@3706,@3630,@3345,@3720|75,0,0 97,0,@3722 164,0,0 412,0,0 433,0,0 555,0,0 694,0,-1 711,0,@3343 733,0,0 802,0,@3718 848,0,@3991 864,0,0 3991:O3|@7377,@215,@3992 3992:S24|67656e43617365202d206e756c6c2063617365206c697374 3993:C4,80|90909090909090483b65187303ff55484c8b74240849ff761049515049504952534c89c8488d542430909090ff1546000000488b0424488d54243090ff153e0000004883c430c2080090909090909090|@4000,8191,@4001,@3999| 3994:S58|475f434f444528292e636f646567656e2831302967656e636465283629726573756c742d63617365436f646528342967656e4361736573283229 3995:C3,152|90909090909090483b65187303ff55484883f801750b48b80100000000000000c34c8b304c8b68084d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b62a84c8960084c89304989d69090ff156a0000004956504c89e84c89f29090e8a1ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fd498945084c8b24244d8965004c89e84883c410c3909090909090|@417,7173,@3996|24,0,0 3996:C2,8|c390909090909090|@3997,1| 3997:S30|414d443634434f4445434f4e5328292e636f6e7374724361736573283129 3998:C2,88|90909090909090483b65187303ff55484883f8017505488b42f0c35248ff30488b40089090e8ddffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b04244889024889d04883c410c3909090|@1847,5| 3999:C3,256|90909090909090483b65187303ff55484883f801750b48b80100000000000000c34c8b304d8b2e4c8b62f04d89eb4d23dc41f6c3017503ff55704d89eb4d2bdc4d8d5b0170f149ba11000000000000004d89d94d23ca41f6c1017503ff557050524c89da48d1fa498d42ff48f7ea4c8d48015a5870e64c8b5ae84d89da4d23d141f6c2017503ff55704d8d53ff4d03d170f44d8b4e084d89c84d23c241f6c0017503ff55704d89c84d2bc24d8d400170f141f6c0017503ff55704c89c74883ef0a70f441f6c2017503ff55704d89d04983c00270f45248ff70084c89c64c8b42f84889f34889f890ff153a000000488b0424488b5424084883c410e907ffffff|@4003,8191,@3410|24,0,0 72,0,8 4000:S32|414d443634434f4445434f4e5328292e6d616b654a756d705461626c65283629 4001:C3,296|90909090909090483b65187303ff55484c8b72d8504923c6a801587503ff5570493bc67f6d4c8b6af04989c44d23e541f6c4017503ff55704989c44d2be54d8d64240170f049bb11000000000000004d89e24d23d341f6c2017503ff557050524c89e248d1fa498d43ff48f7ea4c8d50015a5870e64c8b62e84d89e34d23da41f6c3017503ff55704d8d5c24ff4d03daeb05e97f00000070ec4c8b52e04d89d14d23cb41f6c1017503ff55704d89d14d2bcb4d8d490170f141f6c1017503ff55704d89c84983e80a70f441f6c3017503ff55704d89d94983c10270f452504c89c74c8b42f84c89cb4889f890ff155e000000488b342440f6c6017503ff55704889f04883c00270f4488b5424084883c410e9f1feffff48b80100000000000000c390909090909090|@4002,8191,@3410|71,0,8 280,0,0 4002:S48|414d443634434f4445434f4e5328292e6d616b654a756d705461626c65283629707574496e44656661756c7473283129 4003:S45|414d443634434f4445434f4e5328292e6d616b654a756d705461626c65283629707574496e4361736573283129 4004:S60|475f434f444528292e636f646567656e2831302967656e636465283629726573756c742d63617365436f6465283429707574496e4361736573283129 4005:C3,256|90909090909090483b65187303ff55484883fb01751c4c8b72f84c8b42f048bb0100000000000000488b42d0498b5658ff22525048ff73086a014c8b52e849b9ffffffffffffffff49b8ffffffffffffffff4c8b3348bb03000000000000004c89f0488b52f89090ff1248f7c00100000075054c8b28eb1848b8a81df5acaa2a000090ff555849bd01000000000000004c8b64240841f6c4017503ff55704d89e34983c31070f44955488b5c24084c89d8488b542418909090e849ffffff4c8b5424184d8b4af85049ff71084d8b511049b9ffffffffffffffff4c8b442420488b5c241048ba6838f5acaa2a00009090ff1532000000488b04244883c428c390|@4006,8191,@3867|32,0,0 64,0,-1 74,0,-1 87,0,1 122,0,@3810 136,0,0 210,0,-1 230,0,@3866 4006:S54|475f434f444528292e636f646567656e2831302967656e636465283629726573756c742d6c6f6164536d616c6c566563746f72283229 4007:C5,336|90909090909090483b65187303ff55484c8b72e050490bc6a801587503ff5570493bc6750b48b80100000000000000c349bd11000000000000004989c44d23e541f6c4017503ff557050524889c248d1fa498d45ff48f7ea4c8d60015a5870e641f6c6017503ff55704d89f54983ed0270f450490bc5a801587503ff5570493bc5750c49bb0100000000000000eb304c8b5af85250495449b80300000000000000488b5ac8498b430848ba40a1f3acaa2a000090ff15be0000004989c3eb04525049544c8b5424104d8b4af84d8b4110498b79084989f9498b5ac8488b042448baf01df5acaa2a0000909090ff158e000000488b742410488b5ef848ff73084c8b531049b9ffffffffffffffff4c8b4424084889c3488b46d048ba6838f5acaa2a000090ff155e000000488b542408f6c2017503ff55704889d04883c00270f4488b5424104883c418e9b9feffff9090|@4008,8191,@3345,@3813,@3867|39,0,0 50,0,8 133,0,0 153,0,1 171,0,@3343 225,0,@3812 261,0,-1 283,0,@3866 4008:S43|475f434f444528292e636f646567656e2831302967656e636465283629726573756c742d636f7079283129 4009:C24,2216|90909090909090488dbc2460ffffff483b7d187303ff55504c8b70384983fe017570525348ff3048ff701848ff702048ff70304c8b4210488b580848b80300000000000000909090ff15820800004c8b6c24284d8d7fc04c3b7d107303ff554049c747f8070000004d89fc49bb58bcf5acaa2a00004d891c244c8b5424104d895424304d8b4d604d894c24284d8b4538eb05e90c0200004d89442420498b7d3049897c2418498b75184989742410498b5d2049895c24084d8d7fd84c3b7d107303ff554049c747f8040000004c89fa48b9a0c4f5acaa2a000048890a4c8952184d8b75584c897210488972084d8d7fc04c3b7d107303ff554049c747f8070000004d89fb48b958c7f5acaa2a000049890b4d895330498b4d5049894b28498973204d8943184d896310498943084d8d7fd84c3b7d107303ff554049c747f8040000004d89fa48bb88cbf5acaa2a000049891a488b5c241049895a18498b5d4849895a10498972085049545249534952488b4424384883f801750c49be0100000000000000eb3148ff7008488b00488d5424609090ff153e070000488b04244883c408483b65187303ff5548ebc749be01000000000000004c8b6c24504d8d7fe84c3b7d107303ff554049c747f8020000004d89fc4c8b5c24204d895c240849c70424010000004d8b45184c89e348b8c079f3acaa2a000090ff15e206000050488b542450ff124d8d7fe84c3b7d107303ff554049c747f8020000004d89fa49b990d2f5acaa2a00004d890a4c8b4424204d8942084d8d7fe84c3b7d107303ff554049c747f8020000004c89ff48be30d3f5acaa2a0000488937488b5c241048895f08488b54245848ff7424086a0148ff74244848ff74244848ff72104c89d14989fa4c8b4c24404989c8488b5c2450488b442470488b5208ff12488b04244883c460c3525349504951495248ff3048ff700848ff701848ff702048ff70304c8b6c24104983fd01750c49bc0300000000000000eb304d8b5d004d8b134983fafb75194d8b6d08483b65187303ff5548ebd249bc010000000000000049bc01000000000000004983fc0174754c8b4c24484d8b4110488b5c241848b8010000000000000090ff15be0500004d8d7fe04c3b7d107303ff554049c747f8030000004d89f848bff8d3f5acaa2a0000498938488b74241049897010498940084d8d7fe84c3b7d107303ff554049c747f8020000004c89fb48baa8d5f5acaa2a0000eb05e99a0000004889134c894308488b4c2448ff35590500006a0348ff74241848ff74241848ff711049ba08d6f5acaa2a000049b9a8d6f5acaa2a00004989d84889c3488b442448488b51089090ff124c8b7424484d8d7fe84c3b7d107303ff554049c747f8020000004d89fd4989450849c74500fdffffff4d8b46184c89eb48b888d4f4acaa2a0000ff15ea04000050488b542448ff12488b04244883c458c34d8d7fe84c3b7d107303ff554049c747f8020000004d89f949b800d7f5acaa2a00004d8901488b7c241049897908488b74244849514c8b4610488b5c242048b8030000000000000090ff15920400004d8d7fe84c3b7d107303ff554049c747f8020000004c89fb48bad0daf5acaa2a0000488913488b0c2448894b084c8b742450ff35620400006a0148ff74242048ff74242049ff761049ba30dbf5acaa2a000049b9d0dbf5acaa2a00004989d84889c3488b442450498b5608909090ff124c8b6c24404983fd01745a50488b5c242048b80300000000000000488d5424609090ff150a0400004c8b6424584d8b5c24284d8b53604d8b0a4983f9017502eb0d504c89d890ff15ee030000eb0150488b0424488b5424589090ff12488b04244883c468c350488b44242048ba28dcf5acaa2a000090ff12a8017503ff55704989c44983c40270f44c8b5c245849544c8b44244848bb81000000000000004c89e0498b536890ff124c8b5424604d8d7fe84c3b7d107303ff554049c747f8020000004d89f94c8b4424084d89410849c701fdffffff504d8b42184c89cb48b888d4f4acaa2a0000909090ff1552030000488b7c246848ff77184c8b572849b9ffffffffffffffff49b801000000000000004889c3488b44240848ba6838f5acaa2a0000909090ff151e030000488b7424684c8b461848bb70d4f4acaa2a000048b888d4f4acaa2a000090ff1502030000488b5c2408f6c3017503ff55704889da4883ea0270f4488b4c2468f6c2017503ff55704989d64983ee0270f450524d89f04889c3488b411848ba40a1f3acaa2a0000ff15c202000049bd03000000000000004c8b242449544d23e541f6c401495c7503ff55704d3bec7e0c49bb0100000000000000eb6f49bb11000000000000004d89ea4d23d341f6c2017503ff557050524c89ea48d1fa498d43ff48f7ea4c8d50015a5870e64c8b4c2478495549ff71184d89d04d8b512849b9ffffffffffffffff488b5c2418488b44242048ba6838f5acaa2a0000909090ff1532020000488b3c24eb05e93100000040f6c7017503ff55704889fe4883c60270f44989f54883c408483b65187303ff5548e940ffffff49bb01000000000000004c8b54247849b80300000000000000488b5c2410498b421848ba40a1f3acaa2a0000ff15d6010000488b442410488b542470ff12488b5c244048b81100000000000000488d942480000000909090ff15b20100004c8b4c247849b80300000000000000488b5c2410498b411848ba40a1f3acaa2a0000ff15920100004c8b44247850504989e249b90100000000000000498b7828498b70184c8b4424204889f34889f848ba705af4acaa2a000090ff1562010000488b9c248800000048ff732849ba807bf3acaa2a000049b901000000000000004c8b44240848bbffffffffffffffff48b8010000000000000090ff152a010000488b94248800000049b8ffffffffffffffff488b5c2408488b421848ba40a1f3acaa2a000090ff1506010000488b8c248800000049b8ffffffffffffffff488b5c2420488b411848ba40a1f3acaa2a000090ff15e2000000488b4424204881c490000000c39090909090|@4086,8191,@4087,@4096,@3266,@4087,@4101,@3266,@4087,@4103,@4105,@3400,@3266,@3867,@3266,@3345,@3867,@3345,@4080,@3345,@3595,@3869,@3345,@3345|61,0,1 109,0,@4010 209,0,@4025 262,0,@4031 327,0,@4037 380,0,0 431,0,0 495,0,@3265 544,0,@4051 590,0,@4053 715,0,1 755,0,0 765,0,0 795,0,0 836,0,@4055 886,0,@4058 937,0,@4059 947,0,@4062 1024,0,@3704 1081,0,@4064 1119,0,1 1160,0,@4071 1208,0,@4072 1218,0,@4075 1265,0,1 1355,0,@4077 1396,0,64 1469,0,@3704 1501,0,-1 1511,0,0 1529,0,@3866 1557,0,@3703 1567,0,@3704 1640,0,@3343 1656,0,1 1691,0,0 1703,0,8 1769,0,-1 1789,0,@3866 1858,0,0 1873,0,1 1892,0,@3343 1925,0,8 1957,0,1 1976,0,@3343 2002,0,0 2031,0,@3593 2060,0,@3267 2070,0,0 2085,0,-1 2095,0,0 2120,0,-1 2139,0,@3343 2164,0,-1 2183,0,@3343 4010:C7,824|90909090909090483b65187303ff55484883f801750f48b801000000000000004889daff225253495049514c8b723049f7c60100000075374883f80375054d8b2eeb45a8017503ff55704989c44983ec0270f44d8b76084c89e0483b65187303ff5548ebca49bd010000000000000048b8f0bff5acaa2a00009090ff555849bd01000000000000004d8b65004983fcfb75434d8d7fe84c3b7d107303ff554049c747f8020000004d89fb4d8b55084d89530849c703fdffffff4c8b4424084c89db48b888d4f4acaa2a00004883c420ff258b0200004983fcf7755e4d8b5d104983fb0375594d8b550841f6c2017503ff55704983fa017d664c8b4c24184d8b41184c89c74923fa40f6c7017503ff5570498d78ff4903fa70f440f6c7017503ff55704883ff0b7d6d40f6c7017503ff55704883ff017d0ceb2ae9dc010000e94e010000498b7108488b1e534823dff6c3015b7503ff5570483bfb7d07eb1ee9ec00000048b860d6ecacaa2a00009090ff555848be010000000000000040f6c7017503ff55704889fa4883c20270f4488b4c96fceb05e92c0000004889ce4c8b1424498b41104c8b4c24104989f0488b5c240848ba30c0f5acaa2a00004883c420ff25a201000048be01000000000000004c89d34823def6c3017503ff55704889f3492bda488d5b0170f148ba11000000000000004889d94823caf6c1017503ff55705052488d43ff48d1fa48f7ea488d48015a5870e95148b80100000000000000488b5424189090ff124c8b4c24104c8b4424084889c3488b042448baf01df5acaa2a00004883c428ff25210100004c8b4c24184c89d3498b411090ff15160100004c8b14244d8b41104c8b4c24104c89c74989c0488b5c24084889f848ba30c0f5acaa2a00004883c420ff25ef0000004c8b5424184d8d7fc84c3b7d107303ff554049c747f8060000004d89f949b850c3f5acaa2a00004d8901498b7a1049897928488b74240849897120498b5a2049895918488b54241049895110488b0c24498949084d8d7fd84c3b7d107303ff554049c747f8040000004c89f848894818488970104c8948084d8b75084c8930498b52284883c420ff2248b808c4f5acaa2a0000909090ff555848b8010000000000000090909090|@4024,8191,@3266,@4014,@3813,@3684,@4014|24,0,0 103,0,0 113,0,@4011 128,0,0 195,0,@3704 357,0,@49 372,0,0 436,0,@4013 456,0,0 492,0,8 537,0,0 573,0,@3812 639,0,@4013 688,0,@4020 796,0,@4022 812,0,0 4011:O3|@7377,@215,@4012 4012:S11|66696e64436c6f73757265 4013:O2|@4014,@3812 4014:C7,456|90909090909090483b65187303ff554850504889d74889de4c89d14c89c3488b40189090ff15c60100004883f801756a575649515148bbffffffffffffffff4c89c09090ff15ae0100004889c348b8d05df4acaa2a000090ff15a20100004d8d7fe04c3b7d107303ff554049c747f8030000004d89fe4989461049bd280aedacaa2a00004d896e0849bcf8e36cadaa2a00004d89264c89f0eb05e903000000ff55584989e64d89064989e5498945084c8b6424084d8b5c240841f6c3017503ff55704983fb017f0e48b870c2f5acaa2a000090ff55584d8b14244d8b024983f8fd75414d8d7fe84c3b7d107303ff554049c747f8020000004c89ff498b5a0848895f0848c707fdffffff4989f04889fb48b888d4f4acaa2a00004883c410ff25e40000004983f80175414d8d7fe84c3b7d107303ff554049c747f8020000004c89ff498b5a0848895f0848c707010000004989f04889fb48b8c079f3acaa2a00004883c410ff25a50000004983f8fb753957565149ff720848b801000000000000004c89ca909090ff12488b7c24184c8b4c24104c8b4424084889c3488b0424488b57084883c430ff2248b8c0c2f5acaa2a0000909090ff555848b8010000000000000090909090|@4019,8191,@428,@305,@303,@3266,@3266|55,0,-1 79,0,@3596 124,0,@215 138,0,@7377 202,0,@4015 274,0,@3704 345,0,@3265 378,0,0 428,0,@4017 444,0,0 4015:O3|@7377,@215,@4016 4016:S28|707573684e6f6e4c6f63616c3a207a65726f2075736520636f756e74 4017:O3|@7377,@215,@4018 4018:S43|707573684e6f6e4c6f63616c3a206e6f74204c69746572616c2c20436f6465526566206f7220537461636b 4019:S27|5452414e535f54414228292e707573684e6f6e4c6f63616c283529 4020:C3,56|90909090909090483b65187303ff55484c8b52084c8b4a104c8b4218488b5a20488b422848ba30c0f5acaa2a0000ff252c00000090909090|@4021,8191,@4014|38,0,@4013 4021:S44|475f434f444528292e636f646567656e2831302967656e50726f6328352970726576696f7573283429283129 4022:O3|@7377,@215,@4023 4023:S33|70726576696f75733a2062616420636f64657472656520696e20636c6f73757265 4024:S41|475f434f444528292e636f646567656e2831302967656e50726f6328352970726576696f7573283429 4025:C3,352|90909090909090483b65187303ff55484883f801750b48b80300000000000000c3524c8b721849f7c60100000075374883f80375054d8b2eeb46a8017503ff55704889c24883ea0270f44d8b76084889d0483b65187303ff5548ebca49bd010000000000000048b8f0bff5acaa2a0000909090ff555849bd0100000000000000498b55004883fafb755e498b450848f7c001000000741948b8b055edacaa2a00009090ff555849be01000000000000004989c64d0fb666ff4f8d6424014d89e64983e6074983fe05750f48b803000000000000004883c408c348b801000000000000004883c408c34883faf77554498b45104883f80375384d8b750841f6c6017503ff55704983fe017e164c8b24244c89f3498b4424084883c408ff256700000048b801000000000000004883c408c34c8b3424498b4508498b56104883c408ff2248b840c6f5acaa2a0000909090ff555848b8010000000000000090909090|@4029,8191,@4028|24,0,1 94,0,0 104,0,@4011 120,0,0 153,0,@339 168,0,0 204,0,1 219,0,0 291,0,0 324,0,@4026 340,0,0 4026:O3|@7377,@215,@4027 4027:S38|6973536c3a2062616420636f64657472656520696e2066756e6374696f6e20636c6f73757265 4028:C3,32|90909090909090483b65187303ff5548488b4008ff252e000000909090909090|@4030,7949,@428| 4029:S37|475f434f444528292e636f646567656e2831302967656e50726f632835296973536c283129 4030:S22|5452414e535f54414228292e697350726f6342283229 4031:C5,672|90909090909090483b65187303ff55484883f801756f5249504951495248b801000000000000004889da9090ff1249ba01000000000000004989c149b8e004edacaa2a0000488b5c2410488b44240848bad0ecf4acaa2a0000909090ff15660200004c8b7424184d8d7fe84c3b7d107303ff554049c747f8020000004d89fd4d8b6608eb05e9470000004d89650849c7450001000000504c8b4424184c89eb48b8c079f3acaa2a0000909090ff151e0200004c8b5c24084989034c8b14244d89530848b801000000000000004883c428c35250534950495149524c8b723049f7c60100000075374883f80375054d8b2eeb46a8017503ff55704989c44983ec0270f44d8b76084c89e0483b65187303ff5548ebca49bd010000000000000048b8f0bff5acaa2a0000909090ff555849bd01000000000000004d8b65004983fcf775704d8b5d104983fb01746b48b80100000000000000488b54241890ff1249ba01000000000000004989c149b8e004edacaa2a0000488b5c2410488b44240848bad0ecf4acaa2a0000909090ff15460100004c8b542428504c8b4c24104c8b442418488b5c2420488b442428498b5210eb0ae9d1000000e921000000ff124c8b4c24084989014c8b04244d89410848b801000000000000004883c438c34c8b5424284d8d7fc84c3b7d107303ff554049c747f8060000004d89f949b848caf5acaa2a00004d8901498b7a2049897928488b74241049897120498b5a1849895918488b54241849895110488b4c2408498949084d8d7fd84c3b7d107303ff554049c747f8040000004c89f848894818488970104c8948084d8b75084c8930498b5228909090ff124c8b2c244c8b204d8965004c8b58084d895d0848b801000000000000004883c430c348b800cbf5acaa2a000090ff555848b80100000000000000|@4036,8191,@3806,@3266,@3806|31,0,0 48,0,0 61,0,@184 81,0,@3740 161,0,@3265 196,0,0 278,0,0 288,0,@4011 304,0,0 334,0,0 352,0,0 365,0,@184 385,0,@3740 464,0,0 508,0,@4032 635,0,0 650,0,@4034 664,0,0 4032:C3,56|90909090909090483b65187303ff55484c8b52084c8b4a104c8b4218488b5a20488b422848ba30c0f5acaa2a0000ff252c00000090909090|@4033,8191,@4014|38,0,@4013 4033:S42|475f434f444528292e636f646567656e2831302967656e50726f632835296c6f6164536c283529283129 4034:O3|@7377,@215,@4035 4035:S28|6c6f6164536c202d20636c6f73757265206e6f742065787472616374 4036:S39|475f434f444528292e636f646567656e2831302967656e50726f632835296c6f6164536c283529 4037:C5,296|90909090909090483b65187303ff55484883f801750b48b80100000000000000c3524c8b721849f7c60100000075374883f80375054d8b2eeb46a8017503ff55704889c24883ea0270f44d8b76084889d0483b65187303ff5548ebca49bd010000000000000048b8f0bff5acaa2a0000909090ff555849bd0100000000000000498b55004883fafb750e498b45084883c408ff25b80000004883faf77567498b4d104883f903754c498b4508a8017503ff55704883f8017e234c8b34244889c3498b4608ff158e0000004c8b2c24498b5d084883c408ff258400000048b800cdf5acaa2a000090ff555848b80100000000000000488b04244c8b7010498b45084c89f2eb05e9060000004883c408ff2248b848cdf5acaa2a000090ff555848b80100000000000000|@4043,8191,@4044,@3684,@4042|24,0,0 94,0,0 104,0,@4011 120,0,0 222,0,@4038 236,0,0 274,0,@4040 288,0,0 4038:O3|@7377,@215,@4039 4039:S18|736c5265675365743a20617267756d656e74 4040:O3|@7377,@215,@4041 4041:S42|736c5265675365743a2062616420636f64657472656520696e2066756e6374696f6e20636c6f73757265 4042:C8,272|90909090909090483b65187303ff554850504989c1488b53184c89cb4889d090ff15120100004883f801756a48bbffffffffffffffff4c89c8909090ff15fe0000004889c348b8d05df4acaa2a000090ff15f20000004d8d7fe04c3b7d107303ff554049c747f8030000004c89f94889411048b8280aedacaa2a00004889410849bef8e36cadaa2a00004c89314889c8909090ff55584889e14c89094989e6498946084c8b6c24084d8b65004d8b1c244983fbfd750f498b4424084883c410ff258b0000004983fb017530498b442408ff158200000048f7c001000000750d488b004883c410ff257400000048b801000000000000004883c410c348b801000000000000004883c410c3909090909090|@4049,8191,@428,@305,@303,@4044,@4048,@4044|46,0,-1 71,0,@3596 116,0,@215 130,0,@7377 238,0,0 253,0,0 4043:S41|475f434f444528292e636f646567656e2831302967656e50726f63283529736c526567536574283129 4044:C4,88|90909090909090483b65187303ff55484889c348b8cf0000000000000048ba303860000000000090ff125048bb190000000000000048b80100000000000000488d542408ff15360000004883c408ff253400000090909090|@4046,8191,@4045,@3606|21,0,103 31,0,I150 45,0,12 55,0,0 4045:C3,224|90909090909090483b65187303ff5548f6c3017503ff55704883fb017d01c348f7c30100000074054989deeb1248f643ff104c8b33740349f7de4f8d7436014989d54989c44989db4c89f348b8030000000000000048baf04f60000000000090ff12498b5df84889da4823d04883fa01744941f6c3017503ff55704c89d94883e90270f44c89d890ff157a0000004d8d7fe84c3b7d107303ff554049c747f8020000004d89fe4d8966084989064889cb4c89f04c89eae94cffffff41f6c3017503ff55704c89d94883e90270f44889cb4c89e04c89eae92cffffff9090909090|@4047,7695,@3299|77,0,1 87,0,I245 4046:S29|5452414e535f54414228292e6765745265676973746572536574283129 4047:S42|5452414e535f54414228292e67657452656769737465725365742831296465636f646542697473283229 4048:C2,104|4c8b70404d8b2e49f7c50100000075484d8b65004d8b1c244d8b0b4983f901751748b8d06ef4acaa2a0000ff555849ba01000000000000004d8b53084d8d7ff04c3b7d107303ff554049c747f8010000004c89f84c8910c348b80100000000000000c39090909090|@4050,8065|35,0,@3617 48,0,0 90,0,0 4049:S32|5452414e535f54414228292e67657446756e6374696f6e526567536574283229 4050:S30|414d443634434f4445434f4e5328292e636f646541646472657373283129 4051:C2,40|90909090909090483b65187303ff55484c8b48184c8b4010488b5808488b00488b5208ff22909090|@4052,8191| 4052:S41|475f434f444528292e636f646567656e2831302967656e50726f6328352970726576696f7573283129 4053:C2,88|90909090909090483b65187303ff554850504989e24c8b48184c8b4010488b5808488b00488b5208ff124d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b34244c89304c8b6c24084c8968084883c410c390|@4054,8191| 4054:S39|475f434f444528292e636f646567656e2831302967656e50726f632835296c6f6164536c283129 4055:C4,280|90909090909090483b65187303ff55484883f801753a4d8d7fe84c3b7d107303ff554049c747f8020000004d89f9488b5a084989590849c701010000004c89cb48b8c079f3acaa2a0000ff25f000000049504c8b721049f7c60100000075374883f80375054d8b2eeb46a8017503ff55704989c44983ec0270f44d8b76084c89e0483b65187303ff5548ebca49bd010000000000000048b8f0bff5acaa2a0000909090ff555849bd01000000000000004d8b65004983fcfb75424d8d7fe84c3b7d107303ff554049c747f8020000004d89fb4d8b55084d89530849c703fdffffff4c8b04244c89db48b888d4f4acaa2a00004883c408ff254c00000048b858d5f5acaa2a000090ff555848b8010000000000000090909090|@4024,8191,@3266,@3266|66,0,@3265 142,0,0 152,0,@4011 168,0,0 234,0,@3704 254,0,@4056 268,0,0 4056:O3|@7377,@215,@4057 4057:S30|70726576696f75733a20636c6f73757265206e6f7420636f6e7374616e74 4058:C2,40|90909090909090483b65187303ff55484c8b48184c8b4010488b5808488b00488b5208ff22909090|@4052,8191| 4059:O1|@4060 4060:C2,24|48b80096f3acaa2a000090ff555848b80100000000000000|@4061,1|2,0,@3325 16,0,0 4061:S45|475f434f444528292e636f646567656e2831302967656e50726f63283529636c6f73757265416464722d283129 4062:O1|@4063 4063:C2,16|48b80100000000000000c39090909090|@4061,1|2,0,0 4064:C5,352|90909090909090483b65187303ff55484883f801750f48b801000000000000004889daff22525053495049514c8b720849f7c60100000075374883f80375054d8b2eeb44a8017503ff55704989c44983ec0270f44d8b76084c89e0483b65187303ff5548ebca49bd010000000000000048b8f0bff5acaa2a000090ff555849bd01000000000000004d8b65004983fcfb75434d8d7fe84c3b7d107303ff554049c747f8020000004d89fb4d8b55084d89530849c703fdffffff4c8b4424084c89db48b888d4f4acaa2a00004883c428ff25b30000004c8b5c2420498b5b08488b44241890ff15a60000005048b80100000000000000488b5424189090ff124c8b142449b911000000000000004d89d04d23c141f6c0017503ff557050524c89d248d1fa498d41ff48f7ea4c8d40015a5870e64c8b4c24104c89c74c8b4424084889c34889f848baf01df5acaa2a00004883c430ff253f00000090909090909090|@4024,8191,@3266,@4065,@3813|24,0,0 104,0,0 114,0,@4011 128,0,0 195,0,@3704 237,0,0 260,0,8 327,0,@3812 4065:C2,192|90909090909090483b65187303ff554848f7c30100000075554c8b334d8b2e4983fdfb75384883f803751948b8a8d9f5acaa2a00009090ff555848b80100000000000000a8017503ff55704989c44983ec0270f4488b5b084c89e0ebaa4883f803751048b80300000000000000c3e933000000a8017503ff55704989c44983ec0270f4488b5b084c89e0909090e875ffffffa8017503ff55704889c34883c30270f44889d8c348b820daf5acaa2a0000909090ff555848b80100000000000000|@4070,7177|45,0,@4066 60,0,0 101,0,1 168,0,@4068 184,0,0 4066:O3|@7377,@215,@4067 4067:S65|7472616e736c617465436c6f73757265496e6465783a20636f6e7374616e747320646f6e27742062656c6f6e6720696e20706879736963616c20636c6f73757265 4068:O3|@7377,@215,@4069 4069:S53|7472616e736c617465436c6f73757265496e6465783a2062616420696e64657820696e746f206c6f676963616c20636c6f73757265 4070:S54|475f434f444528292e636f646567656e2831302967656e50726f632835297472616e736c617465436c6f73757265496e646578283229 4071:C2,40|90909090909090483b65187303ff55484c8b48184c8b4010488b5808488b00488b5208ff22909090|@4052,8191| 4072:O1|@4073 4073:C2,24|48b80096f3acaa2a000090ff555848b80100000000000000|@4074,1|2,0,@3325 16,0,0 4074:S42|475f434f444528292e636f646567656e2831302967656e50726f63283529636f6465416464722d283129 4075:O1|@4076 4076:C2,16|48b80100000000000000c39090909090|@4074,1|2,0,0 4077:O1|@4078 4078:C2,88|90909090909090483b65187303ff55484883f801750b48b80100000000000000c34c8b304d8b2e4983fdfb7506488b4008ebd4488b40089090e8c9ffffffa8017503ff55704989c64983c60270f44c89f0c3909090909090|@4079,6145|24,0,0 4079:S48|475f434f444528292e636f646567656e2831302967656e50726f632835296e6f6e436f6e73746e74436f756e74283129 4080:C3,272|90909090909090483b65187303ff55484883fb01750b48b80100000000000000c34c8b334d8b2e4983fdfb7506488b5b08ebd44c8b62f8525048ff730848ff72906a0149ba58def5acaa2a000049b9ffffffffffffffff49b8ffffffffffffffff4c8b1b48bb03000000000000004c89d8498b5424709090ff1248f7c00100000075054c8b10eb1848b8a81df5acaa2a000090ff555849ba01000000000000004c8b4c24184d8b41f849ff70184c89d74d8b502849b9ffffffffffffffff4c8b4424184889fb488b44240848ba6838f5acaa2a0000909090ff155a000000488b74241040f6c6017503ff55704889f34883c31070f44889da488b5c24084889d0488b5424184883c420e9f9feffff9090|@4106,8191,@3867|24,0,0 69,0,@4081 79,0,-1 89,0,-1 102,0,1 138,0,@3810 152,0,0 182,0,-1 205,0,@3866 4081:O1|@4082 4082:C2,24|48b8b8def5acaa2a000090ff555848b80100000000000000|@4085,1|2,0,@4083 16,0,0 4083:O3|@7377,@215,@4084 4084:S40|636f646567656e3a20756e68616e646c6564207061747465726e2d6d61746368206661696c757265 4085:S34|475f434f444528292e636f646567656e283130296d617463684661696c6564283129 4086:S30|475f434f444528292e636f646567656e2831302967656e50726f63283529 4087:C4,1080|90909090909090488dbc2450ffffff483b7d187303ff55504989c64989dd4d89c449b8010000000000000048bb830000000000000048b81f0000000000000048ba7015600000000000909090ff124d8d7fe84c3b7d107303ff554049c747f8020000004d89f84989400849c700010000004d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89ff4c89074d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89fb48c703010000004d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89fa48c702010000004d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89f948c701010000004d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89f848c700010000004d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89f849c700010000004d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89fe48c706010000004d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fb49c703010000004d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fa49b9ffffffffffffff014d890a4d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89f949c7010100000049564955495457535251504950564953495249514d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fe49c706010000004d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fd49c74500010000004d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fc49c70424010000004d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89ff48c707010000004d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89fb48c703010000004d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89fa48c702010000004d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89f948c701010000004956495549545753525148bbf8e3f5acaa2a0000488b84248800000048bae8d7edacaa2a000090ff15460100005048bbc8e0edacaa2a0000488b84249000000048bae8d7edacaa2a000090ff152a0100004d8dbf50ffffff4c3b7d107303ff554049c747f8150000004d89fe4c8b2c244d89aea00000004c8b6424684d89a6980000004c8b5c24304d899e900000004c8b5424484d8996880000004c8b4c24284d898e80000000498946784c8b4424704d894670488b7c240849897e68488b74246049897660488b5c244049895e58488b54241049895650488b4c241849894e48488b442438498946404c8bac24a00000004d896e384c8b6424504d8966304c8b9c24980000004d895e284c8b5424584d8956204c8b4c24784d894e184c8b8424880000004d894610488b7c242049897e08488bb424800000004989364c89f04881c4a8000000c3909090|@4095,8191,@974,@974|35,0,0 45,0,65 55,0,15 65,0,I11 428,0,72057594037927935 761,0,@4088 779,0,@972 797,0,@1032 815,0,@972 4088:O3|@4090,@4092,@4089 4089:O2|@4094,@7445 4090:O2|@4091,@7445 4091:C2,48|4c8b304c8b6a084d3bf5751648b80300000000000000c348b80100000000000000c348b80100000000000000c3909090|@966,6149|14,0,1 25,0,0 36,0,0 4092:O2|@4093,@7445 4093:C2,48|4989c64d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c89701048c740088b0000004c8b72084c8930c390|@966,4101| 4094:C2,56|4c8b304c8b6a084d3bf57510488b4010c348b80100000000000000c348b8b0d7edacaa2a000090ff555848b8010000000000000090909090|@966,6149|19,0,0 30,0,@970 44,0,0 4095:S29|414d443634434f4445434f4e5328292e636f6465437265617465283329 4096:C6,568|90909090909090483b65187303ff55484c8b304983fef7755d4c8b68104983fd0375584c8b600841f6c4017503ff55704983fc017d684c8b5af84d8b53304d89d14d23cc41f6c1017503ff55704d8d4aff4d03cc70f441f6c1017503ff55704983f90b7d7041f6c1017503ff55704983f9017d0ceb2de9b1010000e9300100004d8b4320498b3849514c23cf41f6c10149597503ff55704c3bcf7d07eb1ee99d00000048b860d6ecacaa2a00009090ff555849b8010000000000000041f6c1017503ff55704c89cf4883c70270f44d8b4cb8fceb05e95b0000004d89c84d8d7fe84c3b7d107303ff554049c747f8020000004c89ff49b960e8f5acaa2a00004c890f4c8947084d8b53184d8b4b2849b801000000000000004889fb48b8010000000000000048bab0aaf3acaa2a0000ff252b01000048b80100000000000000c34c8b5af84d8b4b184d8b43284c89e34c89c89090ff150e0100004d8d7fe84c3b7d107303ff554049c747f8020000004c89ff48bec8e8f5acaa2a0000488937488947084d89ca4d89c149b801000000000000004889fb48b8010000000000000048bab0aaf3acaa2a0000ff25c00000004c8b62f84d8b5c24404983fb01740b48b80100000000000000c34d8d7fe84c3b7d107303ff554049c747f8020000004d89fa49b930e9f5acaa2a00004d890a4d8b4424384d8942084c89d74d8b5424184d8b4c242849b801000000000000004889fb48b8010000000000000048bab0aaf3acaa2a0000ff254c00000048b80100000000000000c390|@4100,8191,@3383,@3684,@3383,@3383|165,0,@49 180,0,0 247,0,@4097 272,0,0 285,0,0 295,0,@3360 311,0,0 372,0,@4098 395,0,0 408,0,0 418,0,@3360 449,0,0 484,0,@4099 519,0,0 532,0,0 542,0,@3360 558,0,0 4097:C2,48|4c8b720850490bc6a801587503ff5570493bc6750b48b80300000000000000c348b80100000000000000c39090909090|@3838,4101|23,0,1 34,0,0 4098:C2,48|4c8b720850490bc6a801587503ff5570493bc6750b48b80300000000000000c348b80100000000000000c39090909090|@3838,4101|23,0,1 34,0,0 4099:C2,48|4c8b720850490bc6a801587503ff5570493bc6750b48b80300000000000000c348b80100000000000000c39090909090|@3838,4101|23,0,1 34,0,0 4100:S44|475f434f444528292e636f646567656e2831302967656e50726f6328352970757368436c6f73757265283129 4101:O1|@4102 4102:C2,24|48b80096f3acaa2a000090ff555848b80100000000000000|@4061,1|2,0,@3325 16,0,0 4103:O1|@4104 4104:C2,24|48b80096f3acaa2a000090ff555848b80100000000000000|@4074,1|2,0,@3325 16,0,0 4105:C5,480|90909090909090483b65187303ff55484883fb01756f4c8b72f8524c8b42e048bb0100000000000000498b5668909090ff124c8b2c244d8b65f84d8d7fe84c3b7d107303ff554049c747f8020000004d89fb4d8b55a04d89530849c703fdffffff504d8b4424184c89db48b888d4f4acaa2a0000ff158e0100004c8b4c24084d8b41f8eb05e93d00000049ff70184d8b502849b9ffffffffffffffff49b801000000000000004889c3488b44240848ba6838f5acaa2a0000ff1552010000488b04244883c410c34c8b334d8b2e4983fdfb7509488b5b08e92bffffff4c8b62f8525048ff73086a014c8b52d849b9ffffffffffffffff49b8ffffffffffffffff4c8b1b48bb03000000000000004c89d8498b542470909090ff1248f7c00100000075054c8b10eb1848b8a81df5acaa2a000090ff555849ba01000000000000004c8b4c240841f6c1017503ff55704d89c84983c00270f44952488b5c24084c89c0488b542418909090e899feffff488b7c241048be11000000000000004889fb4823def6c3017503ff557050524889fa48d1fa488d46ff48f7ea488d58015a5870e6488b542418488b4af85048ff71184c8b512849b9ffffffffffffffff4989d8488b5c241048ba6838f5acaa2a0000ff1542000000488b04244883c428c390|@4106,8191,@3266,@3867,@3867|33,0,0 108,0,@3704 148,0,-1 158,0,0 176,0,@3866 238,0,-1 248,0,-1 261,0,1 298,0,@3810 312,0,0 373,0,8 438,0,-1 456,0,@3866 4106:S42|475f434f444528292e636f646567656e2831302967656e50726f632835296c6f61644974656d73283229 4107:C17,1104|90909090909090483b65187303ff55484983f901750c49be0300000000000000eb0a49be01000000000000004d89f54983f5024889d74889c64c89d14955488b47089090ff152e04000057534950495151504c8b44244848bb01000000000000004889f0488b5730ff124c8b7424184d8b2e4983fdfd75714c8b642428504c8b5424484c8b4c24504c8b44241048bb0100000000000000488b442428498b542418909090ff124c8b5c243049ff73084c8b54241049b901000000000000004d8b4310488b1c24488b44240848ba60dcf4acaa2a0000909090ff15a20300004c8b14244c8b4c2410eb05e9720000004d8b4210498b7908498938488b7424404883fe01744b488b5c24384c8b430848bb70d4f4acaa2a000048b888d4f4acaa2a0000909090ff155e0300004889c24d8d7ff04c3b7d107303ff554049c747f8010000004c89f84889104883c448c2100048b801000000000000004883c448c210004989c44c89e09090ff15220300004883f801744e4c8b5c2428488b1c24498b4308909090ff150e0300004c8b5424484c8b4c24404c894c24484c8b4c24084c8b44241048bb0300000000000000488b442420498b5320488b7c24384883c44857ff224c8b5c2428498b430890ff15ce0200004883f8017468488b1c24498b4308ff15c20200004d8b4310498b5b084c89e048ba8889f5acaa2a000090ff15ae0200004c8b5424284c8b4c24484c8b4424404c89442448498b7a204d89ca4c8b4c24084c8b44241048bb0300000000000000488b4424184889fa488b742438eb05e9070000004883c44856ff224d89e24c8b442408488b5c2410498b4308909090ff15520200004c8b4c24284952504c8b5424504d8b41184c8b4c24584c89c74c8b4424184889c3488b4424304889fa90ff12488b7424184883fe01751d488b5c24384889c1488b4308909090ff150e0200004883f801751ceb054889c1eb155148b80100000000000000488b53289090ff12eb0b48b8010000000000000051488b5c2440488b5308488b4a28488b014883f801740c49be0100000000000000eb6b5248ff7310488b1c244889d0909090ff15b20100004c8b7424084d8b6e2849c745000300000050488b442408909090ff159a0100004d8d7fe04c3b7d107303ff554049c747f8030000004d89fc4c8b5c24184d895c24104c8b14244d89542408498904244d89e64883c4184c8b0c2449f7c101000000752e488b7c2440495649b8ffffffffffffffff498b19488b470848ba40a1f3acaa2a000090ff15360100004989c0eb0c49b8010000000000000049564c8b442448498b7808498b70104989f04889fb488b44241848ba8889f5acaa2a0000909090ff1502010000488b5c24484c8b5424604c8b4c24684c8b442428488b5318488b5c2410488b442438ff12488b4c244848ff71084c8b5424284989c14c8b4110488b1c24488b44240848ba60dcf4acaa2a00009090ff15b60000004c8b34244c8b6c24284d8b66104d8b5d084d891c244883c460c210009090|@4109,8191,@3880,@3720,@3266,@4110,@4108,@3889,@4108,@3960,@3882,@3889,@3706,@3630,@3345,@3960,@3720|24,0,1 36,0,0 89,0,0 143,0,0 182,0,0 205,0,@3718 271,0,@3703 281,0,@3704 337,0,0 421,0,1 499,0,@3959 553,0,1 706,0,0 726,0,0 759,0,0 898,0,-1 915,0,@3343 937,0,0 973,0,@3959 1058,0,@3718 4108:C2,24|4c8b70104c8b6b084d892e48b80100000000000000c39090|@4112,6153|13,0,0 4109:S30|475f434f444528292e636f646567656e2831302967656e436f6e64283729 4110:C2,32|4883f801750b48b80300000000000000c348b80100000000000000c390909090|@4111,1|8,0,1 19,0,0 4111:S27|5452414e535f54414228292e6973456d7074794c6162656c283129 4112:S26|5452414e535f54414228292e756e6d61726b537461636b283229 4113:C47,3480|90909090909090483b65187303ff55484983f901750c49be0300000000000000eb0a49be01000000000000004d89f54983f502525053495049514952495549be01000000000000004883fb0175054d89f5eb2e41f6c6017503ff55704d89f24983c20270f4488b5b084d89d6483b65187303ff5548ebd149bd010000000000000049554c8b5424304d8b0a4983f9fb75744d8b420849f7c001000000741a48b8b055edacaa2a0000909090ff555848bf01000000000000004c89c749504889fb48b8cd0000000000000048ba3038600000000000ff124883f8017472488b3c2448be7016600000000000483bfe753a49b8190000000000000048bbfdffffffffffffffeb05e9e307000048b80100000000000000488d542448909090ff159e0c00004883c448c2080048bbf016600000000000483bfb753949b8e9ffffffffffffff48bbfdffffffffffffffeb05e96607000048b80100000000000000488d5424489090ff155e0c00004883c448c2080048bab038600000000000483bfa753149b8f9ffffffffffffff48bbfdffffffffffffff48b80100000000000000488d54244890ff15260c00004883c448c2080048b9704a600000000000483bf9753149b8edffffffffffffff48bbfdffffffffffffff48b80100000000000000488d54244890ff15ee0b00004883c448c2080048b87038600000000000483bf8752948bb130000000000000048b8fdffffffffffffff488d542448909090ff15be0b00004883c448c2080049be302d600000000000493bfe752948bb010000000000000048b80100000000000000488d542448909090ff158e0b00004883c448c2080049bd702d600000000000493bfd752948bb150000000000000048b81100000000000000488d542448909090ff155e0b00004883c448c2080049bcb02d600000000000493bfc752948bb0d0000000000000048b80d00000000000000488d542448909090ff152e0b00004883c448c2080049bb702e600000000000493bfb753149b8110000000000000048bb150000000000000048b80100000000000000488d54244890ff15f60a00004883c448c2080049ba3049600000000000493bfa753149b8e7ffffffffffffff48bbe7ffffffffffffff48b80300000000000000488d54244890ff15be0a00004883c448c2080049b9304f600000000000493bf9752948bb0f0000000000000048b80f00000000000000488d542448909090ff158e0a00004883c448c2080049b8704f600000000000493bf8752948bb030000000000000048b80300000000000000488d542448909090ff155e0a00004883c448c2080048beb04f600000000000483bfe752948bbe7ffffffffffffff48b8e7ffffffffffffff488d542448909090ff152e0a00004883c448c2080048bbf04f600000000000483bfb752948bb170000000000000048b8fdffffffffffffff488d542448909090ff15fe0900004883c448c2080048bab048600000000000483bfa752948bb070000000000000048b8fdffffffffffffff488d542448909090ff15ce0900004883c448c2080048b9b043600000000000483bf9752948bbfbffffffffffffff48b8fdffffffffffffff488d542448909090ff159e0900004883c448c2080048b8b04f600000000000483bf8752948bbe7ffffffffffffff48b8e7ffffffffffffff488d542448909090ff156e0900004883c448c2080049be304e600000000000493bfe752948bbf3ffffffffffffff48b8f3ffffffffffffff488d542448909090ff153e0900004883c448c2080049bd704e600000000000493bfd752948bbffffffffffffffff48b8ffffffffffffffff488d542448909090ff150e0900004883c448c2080049bcb04e600000000000493bfc752948bbebffffffffffffff48b8efffffffffffffff488d542448909090ff15de0800004883c448c2080049bbf04e600000000000493bfb752948bb050000000000000048b8fdffffffffffffff488d542448909090ff15ae0800004883c448c2080049ba3050600000000000493bfa752948bb0b0000000000000048b8fdffffffffffffff488d542448909090ff157e0800004883c448c2080049b9b051600000000000493bf9752948bbf7ffffffffffffff48b8fdffffffffffffff488d542448909090ff154e0800004883c448c2080049b8f051600000000000493bf8752948bb090000000000000048b8fdffffffffffffff488d542448909090ff151e0800004883c448c2080048be7015600000000000483bfe751d48b80100000000000000488d54244890ff15fa0700004883c448c2080048bb7052600000000000483bfb751d48b8ffffffffffffffff488d54244890ff15d60700004883c448c2080048ba3052600000000000483bfa751d48b80100000000000000488d54244890ff15b20700004883c448c20800488b4c24284883f901745548b8f04b600000000000483bf87502eb5a49be304c600000000000493bfe7502eb5f49bd7051600000000000493bfd7502eb6449bcf048600000000000493bfc7502eb5849bbf02e600000000000493bfb7507eb5de93d01000049ba704c600000000000493bfa7507eb5de99800000049b9b04c600000000000493bf97507eb5de98200000049b8f04c600000000000493bf8750ceb5de96c000000e96700000048be304d600000000000483bfe7507eb56e95100000048bb7050600000000000483bfb7507eb40e93b00000048bab050600000000000483bfa7507eb2ae92500000048b9f050600000000000483bf97507eb14e90f00000048b83051600000000000483bf875724d8d7fd84c3b7d107303ff554049c747f8040000004d89fe49c74618010000004c8b6c24384d896e104c8b6424304d89660849c706090000004c8b5c24404c8b5424504c895424504c8b4c244848c7442448010000004c8b5424184d89c84c8b4c24204c89c749b8d095edacaa2a0000eb05e91800000048bbb88cedacaa2a00004c89f0498b53084883c44857ff224d8d7ff04c3b7d107303ff554049c747f8010000004c89f84c8b7424384c8930488d542448ff15e60500004883c448c208004d8d7ff04c3b7d107303ff554049c747f8010000004c89f8488b7c2438488938488d5424489090ff15ba0500004883c448c208004983f9f7756e4d8b42104983f8017538498b72184883fe017522498b5a084883fb01750c48bf0300000000000000eb2248bf0100000000000000eb1648bf0100000000000000eb0a48bf01000000000000004983f8017451498b5a08f6c3017503ff55704883fb017e2b488b5424384889d9eb05e9ff030000498b72204889cb488b4210909090ff152e0500004889f34889c6eb3548be0100000000000000498b5a20498b4a08eb21488b74243849ff7208495049ff722057488b442418488b565090ff124889c6eb0551495053574883fe01746d488b4c24304883f901750e488b4424104889c24883f202eb0a48ba0100000000000000488b4424584d8d7fb84c3b7d107303ff554049c747f8080000004d89fe49bd7802f6acaa2a00004d892e4c8b24244d8966384c8b5c24104d895e304c8b50404d8956284c8b4c2418eb05e99d0200004d894e204c8b40304d894618488b781849897e10488b70104989760852495648b80100000000000000488d5424709090ff15460400004d8d7fe84c3b7d107303ff554049c747f8020000004c89fb4889430848bae004edacaa2a00004889134889d89090ff151a040000488b4c24104883f901740c49be0100000000000000eb6a4c8b7424204983fe0174644c8b6c242841f6c5017503ff55704983fd017d1848b84808f6acaa2a000090ff555849be01000000000000004c8b6424684989c14c89eb498b442410ff15be0300004c8b4424684951498b5810909090ff15b20300004889c3488b0424eb0ae93d000000e90e000000909090ff159e0300004989c6eb264c8b6c246850488b442430498b55389090ff124889c3488b0424909090ff157e0300004989c64883c4084c8b6424104983fc017402eb2a4c8b5c24684d8b53104d8b4a204d8b4110498b384c89f64889f34889f890ff154e0300004989004989f6488b5c24184883fb017402eb70488b5424204883fa017440488b4c24684d89f1488b5c2428488b4110909090ff151e030000495149b803000000000000004889c3488b411048ba40a1f3acaa2a000090ff1502030000eb36488b4c2468495649b80300000000000000488b5930488b411048ba40a1f3acaa2a0000eb05e90a0000009090ff15d6020000eb024956488b5424104883fa0174484d8d7fe84c3b7d107303ff554049c747f8020000004c89f948b8a008f6acaa2a00004889014c8b7424084c8971084889cb488b442460488d542478ff158e0200004883c478c208004d8d7fe84c3b7d107303ff554049c747f8020000004c89f948b88009f6acaa2a00004889014c8b7424084c8971084989c94c8b042448bb0100000000000000488b442460488d5424789090ff153e0200004883c478c20800488b14244883fa01743f488b4c24084883f9017534488b4424584c8b70484983fe01752549b80300000000000000488b5830488b401048ba40a1f3acaa2a0000909090ff15f6010000488b0c244883f901740c48b80100000000000000eb204d8d7ff04c3b7d107303ff554049c747f8010000004c89f84c8b7424504c8930488d542460909090ff15ba0100004883c460c208004d8d7ff04c3b7d107303ff554049c747f8010000004c89f84c8910488d542440909090ff15920100004883c440c20800909090|@4130,8191,@4131,@4131,@4131,@4131,@4149,@4149,@4149,@4149,@4131,@4131,@4149,@4149,@4149,@4149,@4149,@4149,@4149,@4149,@4149,@4149,@4149,@4149,@4149,@4149,@4153,@4155,@4155,@4124,@4124,@4028,@4166,@3606,@3684,@4042,@3376,@3376,@3376,@3684,@3345,@3345,@4171,@4204,@3345,@4124,@4124|24,0,1 36,0,0 64,0,0 121,0,0 160,0,@339 176,0,0 194,0,102 204,0,I150 226,0,I15 241,0,12 251,0,-2 268,0,0 299,0,I17 314,0,-12 324,0,-2 341,0,0 371,0,I152 386,0,-4 396,0,-2 406,0,0 435,0,I223 450,0,-10 460,0,-2 470,0,0 499,0,I151 514,0,9 524,0,-2 555,0,I106 570,0,0 580,0,0 611,0,I107 626,0,10 636,0,8 667,0,I108 682,0,6 692,0,6 723,0,I111 738,0,8 748,0,10 758,0,0 787,0,I218 802,0,-13 812,0,-13 822,0,1 851,0,I242 866,0,7 876,0,7 907,0,I243 922,0,1 932,0,1 963,0,I244 978,0,-13 988,0,-13 1019,0,I245 1034,0,11 1044,0,-2 1075,0,I216 1090,0,3 1100,0,-2 1131,0,I196 1146,0,-3 1156,0,-2 1187,0,I244 1202,0,-13 1212,0,-13 1243,0,I238 1258,0,-7 1268,0,-7 1299,0,I239 1314,0,-1 1324,0,-1 1355,0,I240 1370,0,-11 1380,0,-9 1411,0,I241 1426,0,2 1436,0,-2 1467,0,I246 1482,0,5 1492,0,-2 1523,0,I252 1538,0,-5 1548,0,-2 1579,0,I253 1594,0,4 1604,0,-2 1635,0,I11 1650,0,0 1679,0,I255 1694,0,-1 1723,0,I254 1738,0,0 1778,0,I229 1795,0,I230 1812,0,I251 1829,0,I217 1846,0,I113 1868,0,I231 1890,0,I232 1912,0,I233 1939,0,I234 1961,0,I247 1983,0,I248 2005,0,I249 2027,0,I250 2144,0,@478 2161,0,@440 2323,0,1 2335,0,0 2347,0,0 2359,0,0 2436,0,0 2525,0,0 2564,0,@4114 2645,0,0 2696,0,@184 2731,0,0 2774,0,@4119 2788,0,0 3022,0,1 3039,0,@3343 3065,0,1 3083,0,@3343 3147,0,@4121 3219,0,@4123 3248,0,0 3319,0,1 3337,0,@3343 3366,0,0 4114:C15,1088|90909090909090483b65187303ff5548488b42384883f8017473525349ba01000000000000004c8b4a1849b8e004edacaa2a0000488b5a08488b421048bad0ecf4acaa2a00009090ff151a0400004c8b7424084d8b6e084989c34d89ea4d8b4d50498b5d2048b8e004edacaa2a000090ff15fa0300004983f901742b49534d89d048bba03cf5acaa2a0000eb05e97d00000048b8b01e600000000000ff15d60300004989c0eb0c49b8010000000000000049534d8d7fe84c3b7d107303ff554049c747f8020000004d89f849c7400801000000488b3c24498938488b74240848c7060100000048c74608010000004c89461048bb5807f6acaa2a000048895e1848b801000000000000004883c418c34c8b72304983fe01746f4989d14989d8498b5920498b410890ff1552030000495149505049b8e004edacaa2a0000498b5910498b410848ba98aaf3acaa2a000090ff1532030000488b7c24104c8b470848bb6058f4acaa2a000048b84858f4acaa2a000090ff1516030000488b742410488b5e084889c1eb05e9790100004c8b5b50488b5b2048b8e004edacaa2a000090ff15f20200004983fb017427514c8b460848bba03cf5acaa2a000048b8b01e600000000000909090ff15d20200004989c2eb0b49ba0100000000000000514c8b542418498b420890ff15ba020000a8017503ff55704989c14983e90270f449b811000000000000004c89cf4923f840f6c7017503ff557050524c89ca48d1fa498d40ff48f7ea488d78015a5870e64883ff01752c4d8b4a1049b8e004edacaa2a000048bb606cf4acaa2a000048b8a01ef4acaa2a00009090ff1552020000eb2e4d8b521049b9e004edacaa2a000049b8606cf4acaa2a00004889fb48b8b01ef4acaa2a0000909090ff152a0200004d8d7ff04c3b7d107303ff554049c747f8010000004c89fe488b5c240848891e4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48c7420801000000488b0c2448890a488b44241048893048c74008010000004889501049be5807f6acaa2a00004c89701848b801000000000000004883c420c34d8d7fe84c3b7d107303ff554049c747f8020000004d89fd49bc7007f6acaa2a00004d8965004c8b5a184d895d084d8d7fd84c3b7d107303ff554049c747f8040000004c89f84c8b52104c8950184c8b4a084c8948104c8968084c8b42204c89005253488b5228909090ff12488b7c2408488b7708488b084c8b5808488b5e2048b8e004edacaa2a0000ff152a0100004c8b56504983fa0174245149534989f048bba03cf5acaa2a000048b8b01e6000000000009090ff1506010000eb035149534d8d7ff04c3b7d107303ff554049c747f8010000004d89f94c8b4424084d89014d8d7fe84c3b7d107303ff554049c747f8020000004c89ff48c7470801000000488b3424488937488b5c24104c890b48c743080100000048897b1048ba5807f6acaa2a00004889531848b801000000000000004883c420c390|@4118,8191,@3806,@3545,@3269,@3684,@3361,@3266,@3545,@3269,@3658,@3517,@3506,@3545,@3269|30,0,0 44,0,@184 62,0,@3740 103,0,@184 131,0,@3868 148,0,I48 169,0,0 244,0,@4115 258,0,0 309,0,@184 327,0,@3359 353,0,@3591 363,0,@3590 407,0,@184 435,0,@3868 445,0,I48 469,0,0 512,0,8 570,0,@184 580,0,@3611 590,0,@3490 614,0,@184 624,0,@3611 637,0,@3491 747,0,@4115 761,0,0 800,0,@4116 904,0,@184 936,0,@3868 946,0,I48 1060,0,@4115 1074,0,0 4115:O2|@184,0 4116:C2,8|488b4208c3909090|@4117,5| 4117:S60|475f434f444528292e636f646567656e2831302967656e4576616c2836296c6f61645374617469634c696e6b50726f63283229707573684974283129 4118:S51|475f434f444528292e636f646567656e2831302967656e4576616c2836296c6f61645374617469634c696e6b50726f63283229 4119:O3|@7377,@215,@4120 4120:S35|737461746963206c696e6b2066756e6374696f6e20697320616e20617267756d656e74 4121:C2,96|90909090909090483b65187303ff5548505050504889e3488b520890ff124d8d7fd84c3b7d107303ff554049c747f8040000004c89f84c8b34244c89304c8b6c24084c8968084c8b6424104c8960104c8b5c24184c8958184883c420c3909090|@4122,8191| 4122:S51|475f434f444528292e636f646567656e2831302967656e4576616c2836296c6f61645374617469634c696e6b50726f63283129 4123:C2,96|90909090909090483b65187303ff5548505050504889e3488b520890ff124d8d7fd84c3b7d107303ff554049c747f8040000004c89f84c8b34244c89304c8b6c24084c8968084c8b6424104c8960104c8b5c24184c8958184883c420c3909090|@4122,8191| 4124:C9,728|90909090909090483b65187303ff55484c8b72d04983fe01750c49bd0300000000000000eb0a49bd01000000000000005250495548b80100000000000000488d54241890ff15b60200004c8b6c240849f7c50100000075674d8b5d004d8b134983fafb755f4d8d7fe84c3b7d107303ff554049c747f8020000004d89f94989410849b8e004edacaa2a00004d8901498b7b084c89c8909090ff156a020000504889f89090ff15660200004889c3488b0424909090ff155e0200004989c4eb1de90d00000049bc010000000000000050eb0b49bc0100000000000000504c8b5424104983fa01750c49bb0100000000000000eb3b4c8b4c24184d8b41f8498b7810488b7720488b5e10488b134c89e14889cb4889d0ff15060200004c8b761049890649bb01000000000000004989cc4c8b6c241049f7c50100000075604d8b55004d8b0a4983f9fb750c49bbffffffffffffffffeb654c8b442418498b78f849546a014d8b500849b9ffffffffffffffff49b8ffffffffffffffff48bb0300000000000000498b4500488b5720ff1248f7c001000000750a4c8b18eb2ee91d00000048b8a81df5acaa2a0000ff555849bb0100000000000000eb104954eb0c49bbffffffffffffffff49544c8b6424204d8b5424f84d8d7fc04c3b7d107303ff554049c747f8070000004d89f949b8600df6acaa2a00004d8901488b7c241849897930498b724849897128498b5a30498959204d895918498b521849895110498b4a1049894908488b4424104883f801743e4d8d7fe84c3b7d107303ff554049c747f8020000004d89fe49bd5813f6acaa2a00004d892e4d894e084c89f3498b4424e84c89e24883c428ff25b90000004d8d7fe84c3b7d107303ff554049c747f8020000004d89fe49c74608010000004d891e4d8d7fe84c3b7d107303ff554049c747f8020000004d89fd49bb4014f6acaa2a00004d895d004d894d084d89e94c8b04244c89f3498b4424e84c89e24883c428ff2558000000|@4245,8191,@4244,@3606,@4044,@3376,@3376,@4171,@4204|28,0,1 40,0,0 54,0,0 131,0,@184 198,0,0 211,0,0 233,0,0 291,0,0 331,0,-1 360,0,-1 370,0,-1 380,0,1 419,0,@3810 432,0,0 448,0,-1 494,0,@4125 587,0,@4127 684,0,@4129 4125:C14,1296|90909090909090483b65187303ff5548488b423048f7c001000000756f4c8b304d8b2e4983fdfb75684d8b660849f7c401000000741a48b8b055edacaa2a0000909090ff555849bb01000000000000004d89e35253495449534c89db48b8cd0000000000000048ba3038600000000000ff124883f801746f4c8b5c24184d8d7fe84c3b7d107303ff5540eb0ae95d030000e97d02000049c747f8020000004d89fa4c8b4c24084d894a0849c702fdffffff4d8b43084c89d348b888d4f4acaa2a00009090ff156e0400004d8d7ff04c3b7d107303ff554049c747f8010000004d89f8498900eb05e92f000000488b7c24104c890748c747080300000048c747100100000048c747180100000048b801000000000000004883c420c34c8b1c244d8b134c8b4c24184d8d7fe84c3b7d107303ff554049c747f8020000004d89f84d89500849c700fdffffff4c89c74d8b41084889fb48b888d4f4acaa2a00009090ff15da030000488b3424488b5ef848c1e30848c1eb08488d5c1b014883fb03754a4d8d7ff04c3b7d107303ff554049c747f8010000004c89fa488902488b4c241048891148c741080100000048c741100100000048c741180100000048b801000000000000004883c420c34d8d7ff04c3b7d107303ff554049c747f8010000004c89fa488902488b4c24184d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b7424084c89700848c700fdffffff524c8b41084889c348b888d4f4acaa2a0000909090ff151a0300004c8b6c242049ba01000000000000004989c149b8e004edacaa2a0000498b5d08498b451048bad0ecf4acaa2a0000ff15ee0200004c8b6424204d8b5c24084989c2498b5b2048b8e004edacaa2a0000909090ff15d20200004d8b4b504983f901742449524d89d848bba03cf5acaa2a000048b8b01e600000000000909090ff15ae020000eb0249524d8d7fe84c3b7d107303ff554049c747f8020000004d89f849c7400801000000488b3c24498938488b742420488b5c240848891e48c74608010000004c89461048ba5807f6acaa2a00004889561848b801000000000000004883c430c3525349ba01000000000000004c8b4a1849b8e004edacaa2a0000488b5a08488b421048bad0ecf4acaa2a000090ff15220200004c8b6424084d8b5c24084989c2498b5b2048b8e004edacaa2a0000909090ff15060200004d8b4b504983f901742449524d89d848bba03cf5acaa2a000048b8b01e600000000000909090ff15e2010000eb0249524d8d7ff04c3b7d107303ff554049c747f8010000004d89f8488b3c24498938488b7424084c890648c746080300000048c746100100000048bb5807f6acaa2a000048895e1848b801000000000000004883c418c34c8b72284983fe01742a48c7030100000048c743080100000048c743100100000048c743180100000048b80100000000000000c3525349ba01000000000000004c8b4a2049b8e004edacaa2a0000488b5a08488b421048bad0ecf4acaa2a00009090ff152a0100004c8b6c24084d8b65084989c34d89e24d8b4c2450498b5c242048b8e004edacaa2a0000909090ff15060100004983f901742449534d89d048bba03cf5acaa2a000048b8b01e600000000000909090ff15e6000000eb0249534d8d7fe84c3b7d107303ff554049c747f8020000004d89f849c7400801000000488b3c24498938488b74240848c7060100000048c74608010000004c89461048bb5807f6acaa2a000048895e1848b801000000000000004883c418c3909090909090|@4126,8191,@3266,@3266,@3266,@3806,@3545,@3269,@3806,@3545,@3269,@3806,@3545,@3269|56,0,@339 72,0,0 94,0,102 104,0,I150 186,0,@3704 270,0,0 342,0,@3704 446,0,0 541,0,@3704 565,0,0 578,0,@184 596,0,@3740 629,0,@184 663,0,@3868 673,0,I48 760,0,@4115 774,0,0 791,0,0 805,0,@184 823,0,@3740 857,0,@184 891,0,@3868 901,0,I48 979,0,@4115 993,0,0 1049,0,0 1062,0,0 1076,0,@184 1094,0,@3740 1137,0,@184 1167,0,@3868 1177,0,I48 1263,0,@4115 1277,0,0 4126:S62|475f434f444528292e636f646567656e2831302967656e4576616c28362963616c6c436c6f737572652831296c6f6164436c6f7375726550726f63283229 4127:C2,96|90909090909090483b65187303ff5548505050504889e3488b520890ff124d8d7fd84c3b7d107303ff554049c747f8040000004c89f84c8b34244c89304c8b6c24084c8968084c8b6424104c8960104c8b5c24184c8958184883c420c3909090|@4128,8191| 4128:S62|475f434f444528292e636f646567656e2831302967656e4576616c28362963616c6c436c6f737572652831296c6f6164436c6f7375726550726f63283129 4129:C2,96|90909090909090483b65187303ff5548505050504889e3488b520890ff124d8d7fd84c3b7d107303ff554049c747f8040000004c89f84c8b34244c89304c8b6c24084c8968084c8b6424104c8960104c8b5c24184c8958184883c420c3909090|@4128,8191| 4130:S30|475f434f444528292e636f646567656e2831302967656e4576616c283629 4131:C8,520|90909090909090483b65187303ff55484c8b72e849f7c601000000756d4d8b6e084983fd0175684989d44989c34d8b164c89c090ff15f60100004883f8017402eb184989d94c89db4c89c090ff15e60100004883f8017505eb5e4989d9498b7c24f849544953495149506a014c89d64d8b54240849b9ffffffffffffffff49b8ffffffffffffffffeb0ae95d010000e93e01000048bb03000000000000004889f0488b5720909090ff1248f7c001000000750a488b18eb1ce9ec00000048b8a81df5acaa2a0000ff555848bb0100000000000000488b542418488b4af84d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b7424104c89700848c700fdffffff534c8b41104889c348b888d4f4acaa2a000090ff15220100004c8b6c24204d8b65d849f7c40100000075134989c2498b042490ff150a0100004989c3eb0d49bb01000000000000004989c24d8b4df849ff711849534d89d04d8b51104c8b4c24204c89c74c8b4424184889fb488b44241048ba7817f6acaa2a0000ff15ca0000004889c64d8d7ff04c3b7d107303ff554049c747f8010000004c89f84889304883c428c34d8d7ff04c3b7d107303ff554049c747f8010000004c89f84d8b4424f04c89004c89e2ff258600000048b87827f6acaa2a0000909090ff555848b8010000000000000048b87827f6acaa2a000090ff555848b8010000000000000090909090|@4145,8191,@4146,@3920,@3266,@4144,@4133,@4124|118,0,-1 128,0,-1 150,0,1 191,0,@3810 204,0,0 271,0,@3704 325,0,0 376,0,@4132 468,0,@4142 484,0,0 494,0,@4142 508,0,0 4132:O4|@4133,@3594,@3359,@3593 4133:C21,800|90909090909090483b65187303ff554850504889d74889c64889d9495249ff72504889f3498b4218ff151a0300004883f801756a5756514950495148bbffffffffffffffff4889f0ff15020300004889c348b8d05df4acaa2a000090ff15f60200004d8d7fe04c3b7d107303ff554049c747f8030000004d89fe4989461049bd280aedacaa2a00004d896e0849bcf8e36cadaa2a00004d89264c89f0eb05e903000000ff55584c8d7424104989364c8d6c2410498945084c8b64241850504c8b5c241849ff34244889cb498b43189090ff158a0200004883f801756a5756514950495148bbffffffffffffffff4889c8ff15720200004889c348b8d05df4acaa2a000090ff15660200004d8d7fe04c3b7d107303ff554049c747f8030000004d89fa4989421049b9280aedacaa2a00004d894a0849b8f8e36cadaa2a00004d89024c89d0eb05e903000000ff55584c8d54240849890a488d5c240848894308488b54241056495157514950488b4424284c8b284983fdfd75624c8b224d8b1c244983fbfd755a4c8b50084c89d34c89c8ff15e20100004883f80174134c89d0488d542460ff15d60100004989c6eb6e498b5c24084c89c090ff15ca0100004883f8017421498b442408488d5424609090ff15ba0100004989c6eb58e973000000e91a00000048b80100000000000000488d542460ff159e0100004989c6eb6b4c8b50084c89d34c89c8909090ff158e0100004883f80174204c89d0eb05e9af000000488d54246090ff157a0100004989c6eb60e99900000048b80100000000000000488d54246090ff15620100004989c6eb604c8b224d8b1c244983fbfd7558498b5c24084c89c0eb05e96200000090ff15420100004883f801741c498b442408488d5424609090ff15320100004989c6eb3ee93900000048b80100000000000000488d54246090ff151a0100004989c6eb1ee91900000048b80100000000000000488d54246090ff15020100004989c64c8b5424404983fa01742749564c8b44245048bb901bf6acaa2a000048b8b01e60000000000090ff15da0000004989c1eb0c49b901000000000000004956488b04244883c468c21000909090909090|@4136,8191,@428,@305,@303,@428,@305,@303,@3920,@4137,@3920,@4139,@4135,@3920,@4137,@4135,@3920,@4139,@4135,@4135,@3269|61,0,-1 83,0,@3596 128,0,@215 142,0,@7377 229,0,-1 251,0,@3596 296,0,@215 310,0,@7377 487,0,0 570,0,0 666,0,0 698,0,0 741,0,@4134 751,0,I48 773,0,0 4134:S8|62696e6172794f70 4135:C16,1064|90909090909090483b65187303ff554850504c8b72b0524c8d54240849b901000000000000004c8b42c0488b5ae8488b4210498b56189090ff124c8b2c244d8b65e84d89e34d8b542450498b5c2420488b442408ff15f60300004983fa0174234d89d848bba03cf5acaa2a000048b8b01e60000000000090ff15da0300004989c1eb0a49b901000000000000004c8b0c2450504d8b41b04989e2498b7910498b71e8498b59a849b90100000000000000498b50184989d84889f34889f8909090ff12488b4c2410488b41e84c8b5850488b5820488b042490ff15820300004983fb0174234c8b41e848bba03cf5acaa2a000048b8b01e600000000000ff15660300004989c2eb0a49ba01000000000000004c8b54241050505050504d8b4a084983f901754d4d8b42b0498b5a10498b42e8498b5008909090ff124889e7488b7424404889374889e3488b542448488953084889e14c8b7424284c8971104989e54c8b6424304d8965184989e349894320eb60488b5c2440498b019090ff15ee0200004883f801744f4d8b42b0498b5a10498b42e8498b5008ff124889e7488b7424404889374889e3488b542448488953084889e14c8b7424284c8971104989e54c8b6424304d8965184989e349894320eb64e9cb000000488b5c2428498b0190ff15920200004883f801744f4d8b42b0498b5a10498b42e8498b5008ff124889e7488b7424404889374889e3488b542448488953084889e14c8b7424284c8971104989e54c8b6424304d8965184989e349894320eb6ce9670000004d8b42b049ff31498b78104c8b0424498b5a10498b42e84889fa909090ff12488d742408488b5c244848891e488d542408488b4c245048894a08488d4424084c8b7424304c8970104c8d6c24084c8b6424384d8965184c8d5c24084c8b14244d8953204883c4084c8b4c24384d8b51104d8b41a04c8b4c24204c89c74c8b442410488b1c244889f890ff15b6010000488b7424384d8d7fe84c3b7d107303ff554049c747f8020000004c89fb488b5424204889530848c703050000004c8b46e848b84858f4acaa2a0000909090ff157a010000488b4c24384c8b71e850495649ff7650498b5e20488b44241890ff15620100004c8b2c244983fd0174274c8b44240848bba82cf5acaa2a000048b8b01e600000000000909090ff153e0100004989c4eb0a49bc01000000000000004c8b6424504d8b5c24e8495349ff7350498b5b20488b4424389090ff15160100004c8b14244983fa0174274c8b44240848bba82cf5acaa2a000048b8b01e600000000000909090ff15f20000004989c1eb0a49b901000000000000004c8b4c246049b8ffffffffffffffff488b5c2440498b41e848ba40a1f3acaa2a000090ff15c20000004c8b442460498b78e849b8ffffffffffffffff488b5c24304889f848ba40a1f3acaa2a000090ff159e000000488b4424204883c478c390909090|@4141,8191,@3545,@3269,@3545,@3269,@3351,@3351,@3484,@3266,@3353,@3269,@3353,@3269,@3345,@3345|30,0,0 101,0,@3868 111,0,I48 133,0,0 168,0,0 234,0,@3868 244,0,I48 265,0,0 765,0,@3590 831,0,@3836 841,0,I48 865,0,0 923,0,@3836 933,0,I48 957,0,0 972,0,-1 991,0,@3343 1017,0,-1 1035,0,@3343 4136:S23|5452414e535f54414228292e62696e6172794f70283729 4137:C11,664|90909090909090483b65187303ff554850504c8b72b052504c8d54241049b901000000000000004c8b42a8488b5ae8488b4210498b561890ff124c8b6c24084d8b65e84d89e34d8b542450498b5c2420488b442410909090ff15620200004983fa0174234d89d848bba03cf5acaa2a000048b8b01e60000000000090ff15460200004989c1eb0a49b901000000000000004c8b4c24085050504d8b41084983f8017533498b79b0498b5910498b41e8488b570890ff124889e6488b5c242848891e4889e2488b4c243048894a084989e649894610eb70488b5c2428498b009090ff15ea0100004883f8017432498b79b0498b5910498b41e8488b5708ff124889e6488b5c242848891e4889e2488b4c243048894a084989e649894610eb4f498b79b049ff304c8b0424498b5910498b41e8488b5710909090ff12488d742408488b5c2430eb05e92200000048891e488d542408488b4c243848894a08488d4424084c8b34244c8970104883c4084c8b6c24204d8b55104c8b4c24104c8b442418488b1c24498b45b8ff154a0100004c8b6424204d8d7fe84c3b7d107303ff554049c747f8020000004d89fb4c8b5424104d89530849c703050000004d8b4424e84c89db48b84858f4acaa2a0000909090ff150a0100004c8b4c24204d8b41e850495049ff7050498b5820488b44241890ff15f2000000488b3c244883ff0174274c8b44240848bba82cf5acaa2a000048b8b01e600000000000909090ff15ce0000004889c6eb0a48be0100000000000000488b74243849b8ffffffffffffffff488b5c2420488b46e848ba40a1f3acaa2a000090ff159e000000488b5c243849b8ffffffffffffffff488b53e8488b4bc04889cb4889d048ba40a1f3acaa2a0000909090ff1576000000488b4424104883c450c390909090|@4138,8191,@3545,@3269,@3351,@3620,@3266,@3353,@3269,@3345,@3345|31,0,0 105,0,@3868 115,0,I48 137,0,0 453,0,@3590 519,0,@3836 529,0,I48 553,0,0 568,0,-1 587,0,@3343 609,0,-1 633,0,@3343 4138:S37|5452414e535f54414228292e62696e6172794f7028372967656e42696e6172794952283129 4139:C11,664|90909090909090483b65187303ff554850504c8b72b052504c8d54241049b901000000000000004c8b42c0488b5ae8488b4210498b561890ff124c8b6c24084d8b65e84d89e34d8b542450498b5c2420488b442410909090ff15620200004983fa0174234d89d848bba03cf5acaa2a000048b8b01e60000000000090ff15460200004989c1eb0a49b901000000000000004c8b4c24085050504d8b41084983f8017533498b79b0498b5910498b41e8488b570890ff124889e6488b5c242848891e4889e2488b4c243048894a084989e649894610eb70488b5c2428498b009090ff15ea0100004883f8017432498b79b0498b5910498b41e8488b5708ff124889e6488b5c242848891e4889e2488b4c243048894a084989e649894610eb4f498b79b049ff304c8b0424498b5910498b41e8488b5710909090ff12488d742408488b5c2430eb05e92200000048891e488d542408488b4c243848894a08488d4424084c8b34244c8970104883c4084c8b6c24204d8b55104c8b4c24104c8b442418488b1c24498b45a0ff154a0100004c8b6424204d8d7fe84c3b7d107303ff554049c747f8020000004d89fb4c8b5424104d89530849c703050000004d8b4424e84c89db48b84858f4acaa2a0000909090ff150a0100004c8b4c24204d8b41e850495049ff7050498b5820488b44241890ff15f2000000488b3c244883ff0174274c8b44240848bba82cf5acaa2a000048b8b01e600000000000909090ff15ce0000004889c6eb0a48be0100000000000000488b74243849b8ffffffffffffffff488b5c2420488b46e848ba40a1f3acaa2a000090ff159e000000488b5c243849b8ffffffffffffffff488b53e8488b4ba84889cb4889d048ba40a1f3acaa2a0000909090ff1576000000488b4424104883c450c390909090|@4140,8191,@3545,@3269,@3351,@3620,@3266,@3353,@3269,@3345,@3345|31,0,0 105,0,@3868 115,0,I48 137,0,0 453,0,@3590 519,0,@3836 529,0,I48 553,0,0 568,0,-1 587,0,@3343 609,0,-1 633,0,@3343 4140:S37|5452414e535f54414228292e62696e6172794f7028372967656e42696e6172795249283129 4141:S37|5452414e535f54414228292e62696e6172794f7028372967656e42696e6172795252283129 4142:O3|@7377,@215,@4143 4143:S46|67656e553a20636f6d70696c696e6720756e617279206f70657261746f722028617267636f756e74203c3e203129 4144:C2,32|4989c64d8d7ff04c3b7d107303ff554049c747f8010000004c89f84c8930c390|@4148,4097| 4145:S37|475f434f444528292e636f646567656e2831302967656e4576616c28362967656e55283329 4146:C2,72|4883f817750b48b80100000000000000c34883f807750b48b80100000000000000c34883f8fb750c49be0300000000000000eb0a49be01000000000000004c89f04883f002c39090|@4147,4097|8,0,0 25,0,0 42,0,1 54,0,0 4147:S28|414d443634434f4445434f4e5328292e696e73747249735252283129 4148:S6|557365526567 4149:C8,640|90909090909090483b65187303ff55484c8b72e849f7c60100000075594d8b6e0849f7c501000000756a4d8b65084983fc0175654989d34989c24d8b0e4889d8ff15620200004883f8017402eb60498b114883fafb75244889d94d8b4500498b59084c89d0909090ff15420200004883f801740eeb3fe9ed0100004d8b45004889d9498b004883f8fb7572498b58084889c8eb0ae9b7010000e99b0100009090ff15120200004883f8017456eb074d8b45004889d9498b7bf8495349525149506a014d8b53084c89ce49b9ffffffffffffffff49b8ffffffffffffffff48bb03000000000000004889f0488b57209090ff1248f7c0010000007511eb0ae90f010000e90a010000488b18eb1848b8a81df5acaa2a000090ff555848bb0100000000000000488b542418488b4af8536a014c8b520849b9ffffffffffffffff49b8ffffffffffffffff48bb0300000000000000488b442410488b512090ff1248f7c00100000075054c8b30eb1848b8a81df5acaa2a000090ff555849be01000000000000004c8b6c24204d8b65d849f7c40100000075154d89f2498b0424909090ff151a0100004989c3eb0d49bb01000000000000004d89f24d8b4df849ff711849534d89d04d8b51104c8b4c24284c89c74c8b4424204889fb488b44241048ba7817f6acaa2a0000ff15da0000004889c64d8d7ff04c3b7d107303ff554049c747f8010000004c89f84889304883c428c34d8d7ff04c3b7d107303ff554049c747f8010000004c89f84d8b73f04c89304c89daff259700000048b8182cf6acaa2a0000ff555848b8010000000000000048b8182cf6acaa2a000090ff555848b8010000000000000048b8182cf6acaa2a000090ff555848b80100000000000000|@4152,8191,@4146,@3920,@3920,@4144,@4133,@4124|203,0,-1 213,0,-1 223,0,1 270,0,@3810 284,0,0 310,0,-1 320,0,-1 330,0,1 366,0,@3810 380,0,0 429,0,0 480,0,@4132 571,0,@4150 584,0,0 594,0,@4150 608,0,0 618,0,@4150 632,0,0 4150:O3|@7377,@215,@4151 4151:S47|67656e423a20636f6d70696c696e672062696e617279206f70657261746f722028617267636f756e74203c3e203229 4152:S37|475f434f444528292e636f646567656e2831302967656e4576616c28362967656e42283229 4153:C13,1216|90909090909090483b65187303ff5548488b42e848f7c00100000075664c8b304d8b2e4983fdfb755f4c8b600849f7c40100000075574d8b1c244d8b134983fafb756d4d8b4c240849f7c10100000075644d8b41084983f801755f498b7e0848f7c7010000007457498b730848f7c601000000747148f7c60100000074144889f3eb29e90e040000e9e4030000e9ba03000048b86055edacaa2a0000909090ff555848bb01000000000000005050eb14e972030000e948030000e91e030000e9f40200004889e148c701010000004889e148895908488b5c24084889d94881e1ff010000eb05e9cd0200004889cb4881cb810000004881fb81000000755648f7c70100000074054889f9eb1848b86055edacaa2a000090ff555848b90100000000000000f6c1017503ff55704883f9017d2749bdd802edacaa2a00004c89e84823c1a8017503ff5570498d45ff4803c170f4eb08e9360200004889c8a8017503ff55704883f8017e57a8017503ff55704883f80b7d6d4c8b6af85253506a014c8b52084d8b0149b9ffffffffffffffff4c89c149b8ffffffffffffffff48bb03000000000000004889c8498b55209090ff1248f7c001000000750a4c8b30eb1ce9a101000048b8a81df5acaa2a0000ff555849be01000000000000004c8b6c2410eb05e97e0100004d8b65f84c8b1c2441f6c3017503ff55704d89da4983ea0270f449564d89d04c89f3498b44241048ba40a1f3acaa2a0000909090ff15c60200004c8b4c24184d8b41f8498b78284d8b41d8488b5c2410488b4424084889faff125050488b7424204881fe8100000075174889e348c703ffffffff4889e248c7420811000000eb154889e348c703010000004889e248c7420803000000488b4c2418f6c1017503ff55704989ce4983ee0270f449bd11000000000000004d89f44d23e541f6c4017503ff557050524c89f248d1fa498d45ff48f7ea4c8d60015a5870e65041f6c4017503ff55704983fc017d02eb6c4c8b5c24304d8b53f8495449ff72104d8b52184c8b4c24184d89e0488b5c2428488b44241048ba6838f5acaa2a0000909090ff15e20100004c8b0c244c8b4424184d89cc4d23e041f6c4017503ff55704d89cc4d2be04d8d64240170f04883c408483b65187303ff5548eb834d8d7ff04c3b7d107303ff554049c747f8010000004c89f84c8b1c244c89184883c448c34d8d7ff04c3b7d107303ff554049c747f8010000004c89f84c8b6af04c89284883c410ff25690100004d8d7ff04c3b7d107303ff554049c747f8010000004c89f8488b4af04889084883c410ff25480100004d8d7ff04c3b7d107303ff554049c747f8010000004c89f8488b72f0488930ff252b0100004d8d7ff04c3b7d107303ff554049c747f8010000004c89f8488b7af0488938ff250e0100004d8d7ff04c3b7d107303ff554049c747f8010000004c89f84c8b42f04c8900ff25f10000004d8d7ff04c3b7d107303ff554049c747f8010000004c89f84c8b4af04c8908ff25d40000004d8d7ff04c3b7d107303ff554049c747f8010000004c89f84c8b5af04c8918ff25b70000004d8d7ff04c3b7d107303ff554049c747f8010000004c89f84c8b62f04c8920ff259a0000004d8d7ff04c3b7d107303ff554049c747f8010000004c89f84c8b72f04c8930ff257d0000009090909090|@4154,8191,@3345,@3867,@4124,@4124,@4124,@4124,@4124,@4124,@4124,@4124,@4124|148,0,@336 164,0,0 270,0,@336 284,0,0 308,0,@167 392,0,-1 405,0,-1 415,0,1 455,0,@3810 468,0,0 529,0,@3343 662,0,8 765,0,@3866 4154:S46|475f434f444528292e636f646567656e2831302967656e4576616c28362967656e416c6c6f6353746f7265283129 4155:C6,744|90909090909090483b65187303ff55484c8b72e849f7c60100000075594d8b6e0849f7c50100000075734d8b650849f7c401000000756b4d8b5c24084983fb0175654989d24989c14c89c890ff15be0200004883f8017402eb21498b5500488b024883f8fb75724c8b420849f7c0010000007507eb68e9510200004d8b42f84952495149ff342449ff75006a014d8b520849b9ffffffffffffffffeb0fe912020000e9f5010000e9d8010000498b782049b8ffffffffffffffff48bb0300000000000000498b064889fa9090ff1248f7c0010000007511eb0ae97e010000e979010000488b30eb1848b8a81df5acaa2a000090ff555848be0100000000000000488b5c2418488b53f8566a014c8b530849b9ffffffffffffffff49b8ffffffffffffffff48bb0300000000000000488b442410488b522090ff1248f7c0010000007505488b08eb1848b8a81df5acaa2a000090ff555848b90100000000000000488b4424204c8b70f8516a014c8b500849b9ffffffffffffffff49b8ffffffffffffffff48bb0300000000000000488b442420498b562090ff1248f7c00100000075054c8b28eb1848b8a81df5acaa2a000090ff555849bd01000000000000004c8b6424284d8b5c24f849ff73184d8b53104c8b4c24284d89e8488b5c2408488b44241048ba8035f6acaa2a00009090ff15220100004c8b5424284d8b4ac84983f90174484d8b42f84d8b401048bb70d4f4acaa2a000048b888d4f4acaa2a0000909090ff15f60000004889c74d8d7ff04c3b7d107303ff554049c747f8010000004c89f84889384883c430c348b801000000000000004883c430c34d8d7ff04c3b7d107303ff554049c747f8010000004c89f8498b7af04889384c89d2ff25a400000048b8b83ff6acaa2a000090ff555848b8010000000000000048b8b83ff6acaa2a000090ff555848b8010000000000000048b8b83ff6acaa2a000090ff555848b8010000000000000048b8b83ff6acaa2a000090ff555848b8010000000000000090909090|@4164,8191,@4163,@4157,@3266,@4124|147,0,-1 178,0,-1 188,0,1 234,0,@3810 248,0,0 274,0,-1 284,0,-1 294,0,1 330,0,@3810 344,0,0 370,0,-1 380,0,-1 390,0,1 426,0,@3810 440,0,0 486,0,@4156 527,0,@3703 537,0,@3704 591,0,0 646,0,@4161 660,0,0 670,0,@4161 684,0,0 694,0,@4161 708,0,0 718,0,@4161 732,0,0 4156:O2|@4157,@3593 4157:C28,1704|90909090909090483b65187303ff554850504889d74889c64889d949524889cb498b4218ff15a60600004883f801756a5756514950495148bbffffffffffffffff4889c8ff158e0600004889c348b8d05df4acaa2a000090ff15820600004d8d7fe04c3b7d107303ff554049c747f8030000004d89fe4989461049bd280aedacaa2a00004d896e0849bcf8e36cadaa2a00004d89264c89f0eb05e903000000ff55584c8d74240849890e4c8d6c2408498945084c8b64241050504c8b5c241049ff34244c89c3498b43189090ff15160600004883f801756a5756514950495148bbffffffffffffffff4c89c0ff15fe0500004889c348b8d05df4acaa2a000090ff15f20500004d8d7fe04c3b7d107303ff554049c747f8030000004d89fa4989421049b9280aedacaa2a00004d894a0849b8f8e36cadaa2a00004d89024c89d0eb05e903000000ff55584c8d5424084d8902488d5c240848894308488b542410505057514950495148ff324c8d54242849b901000000000000004989f0488b5c2450488b442470488b570890ff12488b4c2450488b5920488b442428ff155e050000488b41504883f80174234989c848bba03cf5acaa2a000048b8b01e60000000000090ff153e0500004989c6eb0a49be01000000000000004c8b6c24084983fdff750c49be1100000000000000eb0a49be03000000000000004c8b6424384d8b1c244983fbfd756a4c8b14244d8b0a4983f9fd75624d8b44240849f7c00100000074054c89c7eb1748b86055edacaa2a0000ff555848bf010000000000000040f6c7017503ff55704883ff017d2e48bbd802edacaa2a00004889de4823f740f6c6017503ff5570488d73ff4803f770f4eb0de988020000e94b0100004889fe4889f34923def6c3017503ff557050524889f248d1fa498d46ff48f7ea488d58015a5870e64889d949b801000000000000004c89eb498b4208909090ff154e0400004883f801744c48ff742470498b420849ba807bf3acaa2a00004d89e94c8b4424304889cb9090ff152a04000049b8ffffffffffffffff488b5c2410488b44245048ba40a1f3acaa2a0000ff150e040000eb6f5050488b442430514c8d54240849b901000000000000004c8b442428488b5c24684c8b7008488b8424880000004c89f2ff1248ffb4248800000049ba807bf3acaa2a00004c8b4c24284c8b442448488b5c2408488b442410ff15b603000049b8ffffffffffffffff488b5c2410eb05e91a000000488b44246848ba40a1f3acaa2a000090ff15920300004883c41849b8ffffffffffffffff488b5c2418488b44245048ba40a1f3acaa2a0000ff1572030000eb5f4d8b44240849f7c00100000074054c89c7eb1948b86055edacaa2a00009090ff555848bf010000000000000040f6c7017503ff55704883ff017d2948bbd802edacaa2a00004889de4823f740f6c6017503ff5570488d73ff4803f770f4eb08e9010200004889fe4889f34923def6c3017503ff557050524889f248d1fa498d46ff48f7ea488d58015a5870e65050488b542430534c8d54240849b901000000000000004c8b442428488b5c2468488b842488000000488b5208909090ff1248ffb4248800000049ba807bf3acaa2a00004c8b4c24284c8b442448488b5c2408488b442410ff158e02000049b8ffffffffffffffff488b5c2410488b44246848ba40a1f3acaa2a0000ff157202000049b8ffffffffffffffff488b5c2430488b44246848ba40a1f3acaa2a0000ff15560200004883c418eb744c8b14244d8b0a4983f9fd756c49b8030000000000000048bbffffffffffffffff498b4208909090ff152a0200004883f801746a50504c8b44243049ff72084c8d54240849b90100000000000000498b78084c8b442430488b5c2468488b8424880000004889fa90ff1248ffb42488000000eb0ae9b4000000e9910000004c8b5424104c8b4c24284c8b44244848bb0100000000000000488b442408eb05e95100000090ff15b601000049b8ffffffffffffffff488b5c2428488b44246848ba40a1f3acaa2a0000ff159a01000049b8ffffffffffffffff488b5c2410488b44246848ba40a1f3acaa2a0000ff157e010000eb3548b80100000000000000488d54246890ff156e010000505050eb1a48b80100000000000000488d5424689090ff155a0100005050504883c4184c8b44245049ff7050498b5820488b44243090ff1542010000488b3c244883ff0174224c8b44245848bba82cf5acaa2a000048b8b01e600000000000909090ff151e01000049b8ffffffffffffffff488b5c2438488b44245848ba40a1f3acaa2a0000488b7424704881c48000000056ff25f50000009090909090|@4159,8191,@428,@305,@303,@428,@305,@303,@3545,@3269,@3873,@3869,@3345,@3513,@3345,@3345,@3513,@3345,@3345,@3873,@3869,@3345,@3345,@4158,@4158,@3353,@3269,@3345|57,0,-1 79,0,@3596 124,0,@215 138,0,@7377 225,0,-1 247,0,@3596 292,0,@215 306,0,@7377 370,0,0 433,0,@3868 443,0,I48 465,0,0 486,0,8 498,0,1 555,0,@336 568,0,0 593,0,@167 682,0,0 723,0,@3267 752,0,-1 772,0,@3343 803,0,0 848,0,@3267 884,0,-1 911,0,@3343 932,0,-1 952,0,@3343 989,0,@336 1004,0,0 1029,0,@167 1123,0,0 1168,0,@3267 1204,0,-1 1224,0,@3343 1240,0,-1 1260,0,@3343 1295,0,1 1305,0,-1 1350,0,0 1423,0,0 1452,0,-1 1472,0,@3343 1488,0,-1 1508,0,@3343 1526,0,0 1553,0,0 1623,0,@3836 1633,0,I48 1652,0,-1 1672,0,@3343 4158:C9,400|90909090909090483b65187303ff554850504c8b72b8524c8d54240849b901000000000000004c8b42b0488b5ae8488b4208498b56089090ff124c8b2c244d8b65e84d89e34d8b542450498b5c2420488b442408ff155e0100004983fa0174234d89d848bba03cf5acaa2a000048b8b01e60000000000090ff15420100004989c1eb0a49b901000000000000004c8b0c2450504d8b41b84989e2498b7908498b71e8498b59a849b90100000000000000498b50084989d84889f34889f8909090ff12488b4c241048ff71084c8b5424204c8b49a04c8b41c048bb0100000000000000488b44240890ff15da000000488b44241049b8ffffffffffffffff488b5c2408488b40e848ba40a1f3acaa2a0000ff15ba0000004c8b7424104d8b6ee8495549ff7550498b5d20488b4424289090ff15a20000004c8b24244983fc0174224c8b44240848bba82cf5acaa2a000048b8b01e600000000000909090ff157e0000004c8b5c242049b8ffffffffffffffff488b5c2430498b43e848ba40a1f3acaa2a00004883c438ff255a0000009090|@4160,8191,@3545,@3269,@3513,@3345,@3353,@3269,@3345|30,0,0 101,0,@3868 111,0,I48 133,0,0 168,0,0 218,0,0 245,0,-1 264,0,@3343 327,0,@3836 337,0,I48 361,0,-1 380,0,@3343 4159:S23|5452414e535f54414228292e61737369676e4f70283629 4160:S49|5452414e535f54414228292e61737369676e4f7028362973746f7265496e64657865645669615265676973746572283129 4161:O3|@7377,@215,@4162 4162:S25|67656e41737369676e3a20617267636f756e74203c3e203329 4163:C2,16|48b80300000000000000c39090909090|@4165,1|2,0,1 4164:S42|475f434f444528292e636f646567656e2831302967656e4576616c28362967656e41737369676e283129 4165:S33|414d443634434f4445434f4e5328292e6973496e646578656453746f7265283129 4166:C3,160|90909090909090483b65187303ff5548a8017503ff55704883f80b7c02eb174c8b72c0504923c6a801587503ff5570493bc67d02eb0b48b80100000000000000c3525090ff157e0000004c8b2c244989c441f6c5017503ff55704c89e84883c00270f44954488b542410909090e895ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fb498943084c8b14244d89134c89d84883c418c3909090|@4169,8191,@4167|56,0,0 4167:C4,216|90909090909090483b65187303ff55484883f801750b48b8103dedacaa2a0000c34883f803750b48b8f83cedacaa2a0000c34883f805750b48b8a04ef4acaa2a0000c34883f807750b48b8583cedacaa2a0000c34883f809750b48b8e84ef4acaa2a0000c348bbffffffffffffffff90ff158a0000004889c348b8c842f6acaa2a000090ff157e0000004d8d7fe04c3b7d107303ff554049c747f8030000004d89fe4989461049bd280aedacaa2a00004d896e0849bcf8e36cadaa2a00004d89264c89f0909090ff555848b8010000000000000090909090|@4170,8191,@305,@303|24,0,@268 41,0,@267 58,0,@3558 75,0,@261 92,0,@3561 103,0,-1 123,0,@4168 168,0,@215 182,0,@7377 204,0,0 4168:S12|4e6f74206172672072656720 4169:S43|475f434f444528292e636f646567656e2831302967656e4576616c28362967657441726752656773283129 4170:S25|414d443634434f4445434f4e5328292e617267526567283129 4171:C19,1072|90909090909090483b65187303ff5548525348bb0100000000000000488d542410909090ff152e0400004889c348b80100000000000000488d542410ff151e0400005048b80100000000000000488b5424089090ff124c8b104c8b48084c8b4010488b781848bb807bf3acaa2a000048b8807bf3acaa2a0000909090ff15e60300004883f8017470488b5c2410488b53f8488b4bc0488b425851480bc8f6c101597503ff5570483bc87502eb1da8017503ff55704883f80b7f1cf6c1017503ff55704883f90b7e02eb0c48be807bf3acaa2a0000eb6f5050495249514950574c8d54242049b901000000000000004c8b4260488b5a10eb05e953000000488b421848ba705af4acaa2a000090ff155e0300004c8b7424404d8b6ef849b8ffffffffffffffff488b5c2428498b451048ba40a1f3acaa2a0000ff153a030000488b742420eb6d505049524951495057eb67488b742410488b5ef850504952495149505749ba01000000000000004c8b4b6049b8807bf3acaa2a0000488b5318488b4b104889cb4889d048bad0ecf4acaa2a00009090ff15e60200004c8b7424404d8b6ef849b8ffffffffffffffff4889c3eb0ae925000000e920000000498b451048ba40a1f3acaa2a00009090ff15b602000048be807bf3acaa2a00004c8b6424404d8b5c24f84d8b535841f6c2017503ff55704983fa0b7f0c49b90100000000000000eb1241f6c2017503ff55704d89d14983e90a70f44d8b4424c041f6c0017503ff55704983f80b7f0c48bf0100000000000000eb1241f6c0017503ff55704c89c74883ef0a70f44c89cb4823dff6c3017503ff55704c89cb482bdf488d5b0170f14889d948bb807bf3acaa2a00004889f090ff15160200004c8b7424404d8b6ef84989c4498b45109090ff15060200004989c34c23d941f6c3017503ff55704c8d58ff4c03d970f44d89da4d23d441f6c2017503ff55704d89da4d2bd44d8d520170f14c8b4c24404d8b41f8498b58184c89d0909090ff15c2010000488b7c24184883ff01751b4d8b40184889f348b8380dedacaa2a00009090ff15a6010000eb1a4d8b50184d8b48104989f0488b5c2410488b0790ff1592010000488b34244883fe017502eb64488b5c2440488b53f8488b4a1048ff76085148ff7150488b5920488b0690ff156a010000488b04244883f80174224c8b44240848bba82cf5acaa2a000048b8b01e600000000000909090ff1546010000488b7424104883c418483b65187303ff5548eb94488b5424084883fa017507488b5c2430eb15488b442430488d5424489090ff15160100004889c34883fb017502eb44488b4c2440488b41f848ff730849b8ffffffffffffffff488b1b488b401048ba40a1f3acaa2a0000909090ff15e2000000488b1c244883c408483b65187303ff5548ebb4488b4c2440488b41f84c8b481049b80300000000000000488b59c8488b41c04883c448ff25ae000000909090909090|@4174,8191,@4175,@4182,@3351,@3595,@3345,@3806,@3345,@3351,@3658,@3659,@4184,@4194,@3353,@3269,@4202,@3345,@4172|20,0,0 47,0,0 69,0,0 103,0,@3267 113,0,@3267 204,0,@3267 230,0,0 259,0,@3593 285,0,-1 304,0,@3343 356,0,0 370,0,@3267 394,0,@3740 421,0,-1 450,0,@3343 468,0,@3267 507,0,0 557,0,0 616,0,@3267 754,0,@217 863,0,@3836 873,0,I48 972,0,-1 989,0,@3343 1040,0,1 4172:C9,520|90909090909090483b65187303ff5548a8017503ff55704883f80b7d054989c6eb0a49be0b0000000000000041f6c6017503ff55704d89f54983ed0270f45053495049514956495549bc01000000000000004c8b0c2449544d23e141f6c401495c7503ff55704d3be17e02eb6949544c89e09090ff15b60100004c8b44241849ff7050498b582090ff15aa010000488b3c244883ff0174224c8b44242048bba82cf5acaa2a000048b8b01e600000000000909090ff1586010000488b74240840f6c6017503ff55704889f34883c30270f44989dceb05e9120000004883c410483b65187303ff5548e965ffffff4c8b4424184983f801740e488b442410909090ff1542010000488b7c2428488b742408564823f740f6c6015e7503ff5570483bfe7e6b4889fb4823def6c3017503ff55704889fb482bde488d5b0170f1488b542410488b4a60488b014989c64c23f341f6c6017503ff55704989c64c2bf34d8d760170f14c89314c8b6a504983fd01741d4989d048bbc04af6acaa2a000048b8b01e600000000000ff15c2000000488b5c24204883fb01750f48b801000000000000004883c430c3488b542410488b5a2048b8103dedacaa2a000090ff15960000004c8b44241048bb802df5acaa2a000048b84858f4acaa2a000090ff157e0000004889c14d8d7ff04c3b7d107303ff554049c747f8010000004c89f84889084883c430c3909090|@4203,8191,@4167,@3353,@3269,@3656,@3269,@3545,@3266|36,0,5 74,0,0 159,0,@3836 169,0,I48 374,0,@4173 384,0,I48 411,0,0 435,0,@268 457,0,@3840 467,0,@3590 4173:S5|6465637370 4174:S43|475f434f444528292e636f646567656e2831302967656e4576616c2836296a756d70546f50726f63283229 4175:C4,368|90909090909090483b65187303ff55484883f801750b48b80100000000000000c34c8b72f8f6c3017503ff55704883fb0b7d35525348ff3048ff700849ff76084889d890ff154e0100004d8d7ff04c3b7d107303ff554049c747f8010000004d89fd49894500eb1749bdffffffffffffffff525348ff3048ff700849ff76084c8b6424204d8b5c24f84d8b53f86a014d8b4a204c8b5424084d89c849b9ffffffffffffffff4c89c74d89e848bb0300000000000000488b4424184889fa909090ff1248f7c0010000007505488b30eb1848b8d04cf6acaa2a000090ff555848be0100000000000000488b5c2420488b53f8488b4af84989f0488b5910488b411848ba184df6acaa2a00009090ff158e0000004c8b74241841f6c6017503ff55704d89f54983c50270f4504c89eb488b442410488b5424289090e8c9feffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fc49894424084c8b1c244d891c244c89e04883c430c39090909090|@4181,8191,@4167,@4179|24,0,0 106,0,-1 157,0,-1 173,0,1 210,0,@4176 224,0,0 258,0,@4178 4176:O3|@7377,@215,@4177 4177:S17|67656e4172673a206e6f20726573756c74 4178:O2|@4179,@3593 4179:C8,424|90909090909090483b65187303ff554850504989d14889c74889de4c89c3488b46189090ff15a60100004883f801756a49515756495048bbffffffffffffffff4c89c090ff158e0100004889c348b8d05df4acaa2a000090ff15820100004d8d7fe04c3b7d107303ff554049c747f8030000004c89fb4889431048ba280aedacaa2a00004889530848b9f8e36cadaa2a000048890b4889d8eb05e903000000ff55584889e34c89034889e24889420850504c89c3488b4618ff152a0100004883f801756a49515756495048bbffffffffffffffff4c89c090ff15120100004889c348b8d05df4acaa2a000090ff15060100004d8d7fe04c3b7d107303ff554049c747f8030000004c89f94889411048b8280aedacaa2a00004889410849bef8e36cadaa2a00004c89314889c8eb05e903000000ff55584889e14c89014989e6498946084c8b6c24084d8b65004d8b1c244983fbfb75464d8b54240841f6c2017503ff55704983fa017e2a50504989e2498b590849b901000000000000004889da4889f34889f89090ff12488b4424084883c430c34c89c04883c420c34c89c04883c420c390909090|@4180,8191,@428,@305,@303,@428,@305,@303|56,0,-1 79,0,@3596 124,0,@215 138,0,@7377 204,0,-1 227,0,@3596 272,0,@215 286,0,@7377 373,0,0 4180:S24|5452414e535f54414228292e6c6f61644966417267283329 4181:S56|475f434f444528292e636f646567656e2831302967656e4576616c2836296a756d70546f50726f6328322967656e4172674c697374283229 4182:C7,464|90909090909090483b65187303ff55484883fb01750b48b80100000000000000c3a8017503ff55704883f80b7d6ea8017503ff55704989c64983c60270f4525048ff33488b5b084c89f0909090e8b5ffffff50488b442410ff159a0100004c8b6c24184d8b65f84d8b5c24f85049ba01000000000000004c8b4c24104989c0498b5b10498b431848bad0ecf4acaa2a0000909090ff1566010000eb05e9840000004c8b5424204d8b4af84d8b41f8498b78104889c6488b5f20488b0424909090ff1542010000488b5f504883fb017424564d8b401048bba03cf5acaa2a000048b8b01e600000000000909090ff151e010000eb01564d8d7fe84c3b7d107303ff554049c747f8020000004c89fa488b4c241048894a08488b04244889024889d04883c430c34c8b72f84d8b6ef84d8b655841f6c4017503ff55704983fc0b7d12a8017503ff55704989c34983eb0a70f4eb1b4989c34d23dc41f6c3017503ff55704989c34d2bdc4d8d5b0170f1525048ff73084d89d94c8b03498b5d10498b451848ba2856f5acaa2a000090ff15860000004c8b5c240841f6c3017503ff55704d89da4983c20270f4488b1c244c89d0488b542410e84dfeffff48b801000000000000004883c418c390909090909090|@4183,8191,@4167,@3806,@3545,@3269,@3917|24,0,0 111,0,0 137,0,@3740 215,0,@3868 225,0,I48 387,0,@3915 444,0,0 4183:S54|475f434f444528292e636f646567656e2831302967656e4576616c2836296a756d70546f50726f632832296d6f766541726773283229 4184:C17,808|90909090909090483b65187303ff55484c8b334983fe11750a4c8b6b084983fd0374654d8d7fe84c3b7d107303ff554049c747f8020000004d89fd4d89750849c74500250000004c8b63084983fc01740c49bb78cbf3acaa2a0000eb0a49bb010000000000000050495049ff700849ff705049ffb0900000004c89db4c89e890ff15ca020000eb1250495049ff700849ff705049ffb0900000004c8b6424204d8b1c244983fbfd75454c8b142449c70203000000488b442418909090ff15960200004c8b4c24084d8b014983f80175054889c7eb144950488d542430ff157e0200004889c74883c408498939eb714983fb0375444c8b142449c702030000004c8b44241848bb010000000000000048b8a00cefacaa2a0000ff154a020000488b5c241848b84500000000000000909090ff153a020000eb6b4983fb01756a4c8b142449c7020300000049ff7424084c8b44242048bb0100000000000000eb05e9a201000048b8a00cefacaa2a00009090ff1502020000488b5c242048b84b00000000000000909090ff15f20100004c8b44242048bb78a6edacaa2a0000488b0424eb0ae95e010000e90b000000909090ff15d2010000eb704d8b5424104983fa01756a4c8b0c2449c7010300000049ff7424084c8b44242048bb010000000000000048b8a00cefacaa2a0000ff159e010000488b5c242048b84b00000000000000909090ff158e0100004d8d7fe84c3b7d107303ff554049c747f8020000004d89f8488b3c24eb0ae9d5000000e92a0000004989780849c700030000004c89c64c8b44242048bb78a6edacaa2a00004889f09090ff1546010000eb6d49ff7424084c8b44242048bb0056f6acaa2a000048b83856f6acaa2a00009090ff15260100004d8d7fe84c3b7d107303ff554049c747f8020000004d89f94c8b04244d89410849c701030000004c8b44242048bb01000000000000004c89c890ff15ee0000004c8b442420eb05e93400000048bb010000000000000048b8a00cefacaa2a00009090ff15ce000000488b5c242048b84500000000000000909090ff15be0000004883c408488b7c241048c7070300000048b801000000000000004883c428c390909090909090|@4189,8191,@3397,@4190,@4188,@3397,@3453,@3397,@3453,@3616,@3397,@3453,@3638,@3397,@3638,@3397,@3453|83,0,@3395 95,0,0 262,0,0 272,0,@1598 293,0,34 341,0,0 358,0,@1598 381,0,37 405,0,@617 474,0,0 484,0,@1598 505,0,37 583,0,@617 616,0,@4185 626,0,@4187 688,0,0 720,0,0 730,0,@1598 753,0,34 788,0,0 4185:O1|@4186 4186:O4|0,0,1,0 4187:O2|13,2 4188:C2,88|90909090909090483b65187303ff55484883f8017505488b42d0c35248ff30488b40089090e8ddffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b04244889024889d04883c410c3909090|@1847,5| 4189:S33|414d443634434f4445434f4e5328292e6a756d70546f46756e6374696f6e283329 4190:C13,736|90909090909090483b65187303ff55484c8b70604d8b2e4983fd01750c49bc0100000000000000eb1a5048ff3048ff700848ffb080000000ff15ca0200004989c4eb0f5048ff3048ff700848ffb0800000004c8b1c244d8b134d89d14c89c890ff15aa0200004989c04c89c8ff15a60200004950504983f801750c48bf0100000000000000eb53498b30488b1e488b134883fa0175194d8b4008483b65187303ff5548ebd048bf0100000000000000498b4808488b4308488b5c2428ff155e0200004989c8483b65187303ff5548eba548bf0100000000000000488b1c244883fb017511488b542418488b0a4889ce4883f602eb0a48be03000000000000004883fe017470488b54241048891a48bb0b00000000000000488b442428ff1506020000488b4c2420488b01a8017503ff55704881f8dd0000007f6d48b818f8f3acaa2a0000ff15e6010000488b5c242890ff15e2010000488b5c242848b80100000000000000909090ff15d20100004c8b6c2420eb05e9400100004d8b650041f6c4017503ff55704d89e34983c3fe70f44d8d7fe84c3b7d107303ff554049c747f802000000eb05e9300000004d89fa4d895a0849c702ffffffff4d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fe4d8916eb6e48b84801f4acaa2a00009090ff155a010000488b5c242890ff1556010000488b5c242848b80100000000000000909090ff15460100004c8b7424204d8b2e41f6c5017503ff55704d89ec4983c4f870f44d8d7fe84c3b7d107303ff554049c747f8020000004d89fb4d896308eb05e92700000049c703010000004d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fe4d891e4c8b54241049c702010000004c8b4c241849c701030000004d8d7fe84c3b7d107303ff554049c747f8020000004d89f8488b7c2408498978084d89304c89c04883c430c3488b54241048c70201000000488b4c241848c70103000000488b4424084883c430c390909090|@4192,8191,@3400,@4193,@4191,@3433,@3399,@3439,@3453,@3453,@3439,@3453,@3461|31,0,0 125,0,0 167,0,0 210,0,0 247,0,1 271,0,5 316,0,@3447 349,0,0 478,0,@3460 513,0,0 4191:C2,160|90909090909090483b65187303ff55484883f801750b48b80100000000000000c34c8b304d8b2e4d8b65004983fc017502eb624d8b5d0841f6c3017503ff55704d89da4983c2fe70f441f6c2017503ff55704981fadd0000007f02eb384956488b40089090e89dffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fe498946084c8b2c244d892e4c89f04883c408c3488b4008e969ffffff9090|@147,7937|24,0,0 4192:S32|414d443634434f4445434f4e5328292e67656e53656c664272616e6368283129 4193:C2,160|90909090909090483b65187303ff55484883f801750b48b80100000000000000c34c8b304d8b2e4d8b65004983fc017502eb2a4d8b5d0841f6c3017503ff55704d89da4983c2fe70f441f6c2017503ff55704981fadd0000007e02eb384956488b40089090e89dffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fb498943084c8b14244d89134c89d84883c408c3488b4008e969ffffff9090|@147,7937|24,0,0 4194:C10,504|90909090909090483b65187303ff554850504889c74889de4c89d14889fb498b41189090ff15f60100004883f801756a5756495049515148bbffffffffffffffff4889f8ff15de0100004889c348b8d05df4acaa2a000090ff15d20100004d8d7fe04c3b7d107303ff554049c747f8030000004d89fe4989461049bd280aedacaa2a00004d896e0849bcf8e36cadaa2a00004d89264c89f0eb05e903000000ff55584989e649893e4989e5498945084c8b6424084d8b1c244d8b134983fafd75474d8d7fe04c3b7d107303ff554049c747f8030000004c89fb48897310498b53084889530848c703ffffffff5749514c89c04989c84989de4889c34c89f09090ff1532010000eb584983fa0175574883fe01740e48b8d85ef6acaa2a000090ff55584d8d7fe84c3b7d107303ff554049c747f8020000004c89fe498b5b0848895e0848c706010000005749514c89c24989c84889d34889f0ff15e2000000eb5ce9690000004983fa0575564883fe01743b48bbe004edacaa2a0000498b430890ff15c20000004883f80174205749514c89c64989c84889f348b86006edacaa2a00009090ff15a6000000eb2248b8305ff6acaa2a000090ff5558eb12e90d00000048b8905ff6acaa2a0000ff555849b8ffffffffffffffff488b5c2408488b042448ba40a1f3acaa2a00004883c420ff2563000000909090|@4201,8191,@428,@305,@303,@4184,@4184,@3351,@4184,@3345|57,0,-1 79,0,@3596 124,0,@215 138,0,@7377 278,0,@4195 371,0,@184 410,0,@198 430,0,@4197 451,0,@4199 464,0,-1 483,0,@3343 4195:O3|@7377,@215,@4196 4196:S36|6a756d70546f436f64653a20696e6469726563742063616c6c20746f20636f6465526566 4197:O3|@7377,@215,@4198 4198:S47|6a756d70546f436f64653a204e6f7420696e646972656374696f6e207468726f75676820636c6f7375726520726567 4199:O3|@7377,@215,@4200 4200:S38|6a756d70546f436f64653a204e6f74206120636f6e7374616e74206f72207265676973746572 4201:S25|5452414e535f54414228292e6a756d70546f436f6465283529 4202:C2,88|90909090909090483b65187303ff55484883f8017505488b42c0c35248ff30488b40089090e8ddffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b04244889024889d04883c410c3909090|@1847,5| 4203:S44|475f434f444528292e636f646567656e2831302967656e4576616c2836297365747570526573756c74283429 4204:C16,664|90909090909090483b65187303ff55485253495049519090ff15a20200004c8b7424184d8b6ef84883f80175074c8b642410eb1750488b442418488d54242890ff15820200004989c4eb01504c8b4c24104d89e0498b5d18498b451048ba2864f6acaa2a00009090ff156202000050488b442408488b542428909090ff155602000048ff3048ff700848b80100000000000000488b542420ff124c8b5c240841f6c3017503ff55704983fb017c364c8b5424384d8b4af848ff3048ff700848ff701048ff70184d89d8498b5910498b411848ba9073f5acaa2a000090ff15fe010000eb0f48ff3048ff700848ff701048ff70184c8b5424184983fa0175224c8b4c24584d8b41f8498b581848b8380dedacaa2a0000909090ff15ca010000eb224c8b4c24584d8b41f84d8b48184d8b4010488b5c2410498b02909090ff15ae010000488b34244883fe017507488b7c2430eb16488b442430488d542460909090ff15920100004889c74883ff017502eb65488b5c2458488b53f8488b4a1048ff77085148ff7150488b5920488b079090ff156a010000488b04244883f80174224c8b44240848bba82cf5acaa2a000048b8b01e600000000000909090ff1546010000488b7c24104883c418483b65187303ff5548eb93488b5424204883fa017507488b5c2408eb15488b442408488d5424609090ff15160100004889c34883fb017502eb44488b4c2458488b41f848ff730849b8ffffffffffffffff488b1b488b401048ba40a1f3acaa2a0000909090ff15e2000000488b1c244883c408483b65187303ff5548ebb4488b4c2458488b41f84c8b4010488b5c244848b8485ef4acaa2a0000909090ff15b20000004c8b7424584d8b6ef84d8b4d1049b80100000000000000498b5ec8498b46c04883c460ff259100000090|@4215,8191,@4216,@4222,@4206,@4223,@3944,@4227,@4235,@4243,@3353,@3269,@4214,@3345,@3370,@4172|94,0,@4205 139,0,0 211,0,@3938 269,0,@217 423,0,@3836 433,0,I48 532,0,-1 549,0,@3343 605,0,@3599 637,0,0 4205:O2|@4206,@3360 4206:C3,176|90909090909090483b65187303ff55485049504d8d7fd84c3b7d107303ff554049c747f8040000004d89fe49bd3065f6acaa2a00004d892e498946184d8946104c8b40184d8946084983f901750c48bf0300000000000000eb0a48bf01000000000000004989fd4983f5024989c24d89cc4989d94d89e04c89f34c89e8488b5208909090ff1248bb010000000000000048b80100000000000000488d54241090ff15320000004883c410c39090909090|@4212,8191,@4211|45,0,@4207 80,0,1 92,0,0 136,0,0 146,0,0 4207:C4,360|90909090909090483b65187303ff55484c8b72184989d14989c04c89c3498b4618909090ff15660100004883f801751848b8e066f6acaa2a000090ff555848b80100000000000000488b5808f6c3017503ff55704883fb037e02eb5a4951495048ff305348ff701048ff7018498b51104883fa01750c48b90100000000000000eb43488b024c8b74242050490bc6a801587503ff5570493bc6750c48b90300000000000000eb1e488b5208483b65187303ff5548ebbae91200000048b901000000000000004883f9017412eb1f4951495048ff305348ff701048ff701848b803000000000000004883c430c34c8b2c2441f6c5017503ff55704983fd017f02eb554c8b6424284d8d7fd84c3b7d107303ff554049c747f8040000004d89fb49c74318ffffffff4c8b5424084d8953104c8b4c24104d894b084c8b4424184d89034d89d8488b5c2420498b442408909090ff154200000048b801000000000000004883c430c3909090|@4210,8191,@428,@3276|50,0,@4208 64,0,0 120,0,0 157,0,1 189,0,0 223,0,1 344,0,0 4208:O3|@7377,@215,@4209 4209:S26|707573684e6f6e417267756d656e74733a206e6f20656e747279 4210:S34|5452414e535f54414228292e707573684e6f6e417267756d656e7473283429283129 4211:C7,616|90909090909090483b65187303ff55484c8b72f84d8b6e384d8b6500534923dcf6c3015b7503ff5570493bdc7d595250534c8b62f04983fc01750c49bb0100000000000000eb45498b1c24488b142453480bdaf6c3015b7503ff5570483bda750c49bb0300000000000000eb1f4d8b642408483b65187303ff5548ebb849bb0100000000000000e9d50100004983fb01742a488b0424a8017503ff55704989c64983c60270f44c89f3488b442408488b5424104883c418e94bffffff488b4424104c8b70f8488b1c24498b4618909090ff15ba01000048f7c00100000075694c8b204d8b1c244983fb0375614c8b50084983fa0175074c8b6c2408eb55488b5c2410488b53f8498b4c24084989d14c8b4250488b5a204889c8909090ff15760100004983f801742f514d89c848bba03cf5acaa2a000048b8b01e600000000000ff155a010000eb10e9e5000000e937000000e9e0000000514d8d7fe84c3b7d107303ff554049c747f8020000004c89ff488b74241048897708488b1c2448891f4989fd4883c408eb5f4983fb05755e4c8b50084983fa0175074c8b6c2408eb6d4c8b4c24104d8b41f8498b7c2408498b58204889f8909090ff15ea000000498b70504883fe01742a5748bba03cf5acaa2a000048b8b01e600000000000909090ff15ca000000eb0be94a000000e939000000574d8d7fe84c3b7d107303ff554049c747f8020000004c89fbeb05e925000000488b54241048895308488b0c2448890b4989dd4883c408eb0c4c8b6c2408eb054c8b6c24084c8b242441f6c4017503ff55704d89e34983c30270f44c89db4c89e8488b5424104883c418e9a6fdffffc3909090909090|@4213,8191,@428,@3545,@3269,@3545,@3269|61,0,0 99,0,1 127,0,0 302,0,@3868 312,0,I48 459,0,@3868 469,0,I48 4212:S31|5452414e535f54414228292e707573684e6f6e417267756d656e7473283429 4213:S49|5452414e535f54414228292e707573684e6f6e417267756d656e747328342967657452656769737465724c697374283229 4214:C2,88|90909090909090483b65187303ff55484883f8017505488b42c0c35248ff30488b40089090e8ddffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b04244889024889d04883c410c3909090|@1847,5| 4215:S41|475f434f444528292e636f646567656e2831302967656e4576616c28362963616c6c50726f63283429 4216:C3,48|90909090909090483b65187303ff5548524889c348b80100000000000000488d54240890ff152e0000004883c408c390|@4220,8191,@4217|22,0,0 4217:C3,416|90909090909090483b65187303ff55484883fb01750b48b80100000000000000c3a8017503ff55704883f80b7d6d525048ff3348ff730890ff158a0100004c8b6c24084d8b5d004983fbfb750c49bcffffffffffffffffeb1c4d8d7ff04c3b7d107303ff554049c747f8010000004d89fc498904244c8b5424184d8b4af84d8b41f86a014d8b510849b9ffffffffffffffff498b78204d89e0eb05e93a00000048bb03000000000000004c89e84889faff1248f7c00100000075054c8b30eb6848b8c86df6acaa2a000090ff555849be0100000000000000eb6a4c8b72f84d8b6ef852505048ff73086a014d8b560849b9ffffffffffffffff49b8ffffffffffffffff4c8b2348bb03000000000000004c89e0498b552090ff1248f7c001000000750a4c8b30eb1ce91700000048b8a81df5acaa2a0000ff555849be01000000000000004c8b5c241041f6c3017503ff55704d89da4983c20270f44956488b5c24084c89d0488b542420909090e895feffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89f9498941084c8b04244d89014c89c84883c428c3909090|@4221,8191,@4167|24,0,0 79,0,-1 138,0,-1 162,0,1 194,0,@4218 208,0,0 241,0,-1 251,0,-1 264,0,1 303,0,@3810 316,0,0 4218:O3|@7377,@215,@4219 4219:S17|6c64417267733a204e6f20726573756c74 4220:S41|475f434f444528292e636f646567656e2831302967656e4576616c2836296576616c41726773283129 4221:S50|475f434f444528292e636f646567656e2831302967656e4576616c2836296576616c417267732831296c6441726773283229 4222:C2,88|90909090909090483b65187303ff55484883f8017505488b42d8c35248ff30488b40089090e8ddffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b04244889024889d04883c410c3909090|@1847,5| 4223:C3,104|90909090909090483b65187303ff55485250504989e14989c048bbffffffffffffffff48b80100000000000000488d5424189090ff15560000004d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b34244c89304c8b6c24084c8968084883c418c390|@4225,8191,@4224|27,0,-1 37,0,0 4224:C8,640|90909090909090483b65187303ff55484983f801751649891949c741080100000048b80100000000000000c3a8017503ff55704883f80b7d6f525053495149ff3049ff7008909090ff155a0200004c8b74242041f6c6017503ff55704d89f54983c50270f45050504c8d4c24084c8b442418488b5c24304c89e8488b5424409090e881ffffff4c8b6424404d8b5c24f84d8b53f84d8b4a184d8b421049ba0100000000000000eb05e9c10000004c89cf4c8b4c24204c89c64c8b04244889f34889f848bad0ecf4acaa2a0000ff15de010000488b5c2440488b53f8488b4af84c8b71104989c34d8b5650498b5e20488b04249090ff15be0100004983fa01742449534c8b411048bba03cf5acaa2a000048b8b01e6000000000009090ff159e010000eb0249534d8d7fe84c3b7d107303ff554049c747f8020000004d89f94c8b4424184d894108488b3c24498939488b742430488b5c241048891e4c894e0848b801000000000000004883c450c3f6c3017503ff55704883fb017d1f4c8b6af84d8b65f84989d34989c2498b44241090ff15320100004989c6eb094989de4989c24989d34d8b6bf84d8b65f841f6c6017503ff55704c89f74883c70270f449534952495149ff700849564989f94d8b00498b5c2410498b44241848ba1871f5acaa2a0000ff15e6000000488b342440f6c6017503ff55704889f34883c30270f4488b542418f6c2017503ff55704889d14883c10270f45050504c8d4c24084c8b4424204889c8488b5424389090e8d5fdffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b7424104c8970084c8b2c244c89284c8b6424284c8b5c24084d891c24498944240848b801000000000000004883c440c390909090|@4226,8191,@4167,@3806,@3545,@3269,@3658,@3939|35,0,0 158,0,0 196,0,@3740 264,0,@3868 274,0,I48 353,0,0 476,0,@3935 623,0,0 4225:S41|475f434f444528292e636f646567656e2831302967656e4576616c2836297075736841726773283129 4226:S50|475f434f444528292e636f646567656e2831302967656e4576616c28362970757368417267732831296c6441726773283429 4227:C23,944|90909090909090483b65187303ff55484c8bb39000000049c706030000004c8b284983fdfd754048ff3348ff73484889d8909090ff159e0300004c8b24244d8b1c244d8d7fe84c3b7d107303ff554049c747f8020000004d89fa4d895a084989024d891424eb694983fd03756848ff335348bb2500000000000000488b042490ff155a030000488b1c2448b80100000000000000ff154e0300004c8b042448bb010000000000000048b8a00cefacaa2a00009090ff1536030000488b1c2448b82500000000000000ff152a030000eb73e93d0200004983fd01756d48ff335348ff700848bb2500000000000000488b4424089090ff1506030000488b5c240848b80100000000000000909090ff15f60200004c8b44240848bb010000000000000048b8a00cefacaa2a000090ff15de020000488b5c240848b82b00000000000000eb0ae9ca010000e927000000909090ff15c20200004c8b44240848bb78a6edacaa2a0000488b0424909090ff15ae020000eb734c8b60104983fc01756e48ff335348ff700848bb2500000000000000488b442408909090ff158a020000488b5c240848b80100000000000000909090ff157a0200004c8b44240848bb010000000000000048b8a00cefacaa2a000090ff1562020000488b5c240848b82b00000000000000eb0ae922010000e94b000000909090ff15460200004d8d7fe84c3b7d107303ff554049c747f8020000004d89fb4c8b14244d89530849c703030000004c8b44240848bb78a6edacaa2a00004c89d890ff150e020000eb7248ff335348ff70084989d848bb0056f6acaa2a000048b83856f6acaa2a000090ff15ee0100004d8d7fe84c3b7d107303ff554049c747f8020000004d89fb4c8b14244d89530849c703030000004c8b44240848bb01000000000000004c89d890ff15b601000048bb2500000000000000eb05e95b000000488b442408ff15a2010000488b5c240848b80100000000000000909090ff15920100004c8b44240848bb010000000000000048b8a00cefacaa2a000090ff157a010000488b5c240848b82500000000000000909090ff156a0100004883c4084c8b4c24084d8b0148bb09000000000000004c89c048ba302e600000000000909090ff124883f8017502eb2ba8017503ff55704883f8017c0c48bf0300000000000000eb0a48bf01000000000000004883ff037402eb054889c7eb10a8017503ff55704889c74883c70870f44883ff05741848b8d077f6acaa2a000090ff555848b8010000000000000048b801000000000000004883c410c39090909090|@4233,8191,@4230,@3399,@3930,@3397,@3453,@3399,@3930,@3397,@3453,@3616,@3399,@3930,@3397,@3453,@3638,@3397,@3638,@3399,@3930,@3397,@3453|115,0,18 140,0,0 160,0,0 170,0,@1598 192,0,18 229,0,18 257,0,0 281,0,0 291,0,@1598 313,0,21 349,0,@617 392,0,18 421,0,0 445,0,0 455,0,@1598 477,0,21 552,0,@617 585,0,@4185 595,0,@4187 656,0,0 676,0,18 709,0,0 733,0,0 743,0,@1598 765,0,18 796,0,4 809,0,I110 845,0,1 857,0,0 902,0,@4228 916,0,0 926,0,0 4228:O3|@7377,@215,@4229 4229:S30|63616c6c46756e6374696f6e3a2063616c6c206e6f7420616c69676e6564 4230:C6,280|90909090909090483b65187303ff55485048ff3048bb25000000000000009090ff151a010000488b5c240848b80300000000000000909090ff150a0100004c8b44240848bb010000000000000048b8e005edacaa2a000090ff15f2000000488b5c240848b80100000000000000909090ff15e20000004c8b34244d8b2e48bb09000000000000004c89e848ba302e600000000000ff124883f8017502eb2ba8017503ff55704883f8017c0c49bc0300000000000000eb0a49bc01000000000000004983fc037402eb054989c4eb10a8017503ff55704989c44983c40870f44983fc05740e48b89079f6acaa2a000090ff55584c8b24244d8b1c2441f6c3017503ff55704d89da4983c2f870f44c89d04883c410c390909090|@4234,8191,@3399,@3930,@3397,@3461|22,0,18 45,0,1 69,0,0 79,0,@193 101,0,0 127,0,4 140,0,I110 173,0,1 185,0,0 230,0,@4231 4231:O3|@7377,@215,@4232 4232:S29|67656e53656c6643616c6c3a2063616c6c206e6f7420616c69676e6564 4233:S31|414d443634434f4445434f4e5328292e63616c6c46756e6374696f6e283229 4234:S30|414d443634434f4445434f4e5328292e67656e53656c6643616c6c283129 4235:C10,488|90909090909090483b65187303ff554850504889c74889de4889fb498b401890ff15ea0100004883f801756a57564950495148bbffffffffffffffff4889f890ff15d20100004889c348b8d05df4acaa2a000090ff15c60100004d8d7fe04c3b7d107303ff554049c747f8030000004c89fb4889431048ba280aedacaa2a00004889530848b9f8e36cadaa2a000048890b4889d8eb05e903000000ff55584889e348893b4889e248894208488b4c2408488b014c8b304983fefd75404d8d7fe04c3b7d107303ff554049c747f8030000004d89fd498975104c8b60084d89650849c74500ffffffff5749504c89cb4c89e8909090ff152e010000eb704983fe01754e4883fe01740e48b8a07cf6acaa2a000090ff55584d8d7fe84c3b7d107303ff554049c747f8020000004d89fd4c8b60084d89650849c74500010000005749504c89cb4c89e890ff15e2000000eb584983fe0575574883fe01743c48bbe004edacaa2a0000488b4008eb05e949000000909090ff15be0000004883f80174185749504c89cb48b86006edacaa2a0000ff15aa000000eb2248b8f87cf6acaa2a000090ff5558eb12e90d00000048b8587df6acaa2a0000ff555849b8ffffffffffffffff488b5c2408488b042448ba40a1f3acaa2a00004883c420ff256700000090909090909090|@4242,8191,@428,@305,@303,@4227,@4227,@3351,@4227,@3345|52,0,-1 75,0,@3596 120,0,@215 134,0,@7377 266,0,@4236 350,0,@184 392,0,@198 410,0,@4238 431,0,@4240 444,0,-1 463,0,@3343 4236:O3|@7377,@215,@4237 4237:S34|63616c6c436f64653a20696e6469726563742063616c6c20746f20636f6465526566 4238:O3|@7377,@215,@4239 4239:S45|63616c6c436f64653a204e6f7420696e646972656374696f6e207468726f75676820636c6f7375726520726567 4240:O3|@7377,@215,@4241 4241:S36|63616c6c436f64653a204e6f74206120636f6e7374616e74206f72207265676973746572 4242:S23|5452414e535f54414228292e63616c6c436f6465283429 4243:C2,88|90909090909090483b65187303ff55484883f8017505488b42a0c35248ff30488b40089090e8ddffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b04244889024889d04883c410c3909090|@1847,5| 4244:C3,168|90909090909090483b65187303ff5548a8017503ff55704883f80b7c02eb1b4c8b72f84d8b6ec0504923c5a801587503ff5570493bc57d02eb0b48b80100000000000000c3525090ff15820000004c8b24244989c341f6c4017503ff55704c89e04883c00270f44953488b542410909090e891ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fa498942084c8b0c244d890a4c89d04883c418c390909090909090|@4246,8191,@4167|60,0,0 4245:S44|475f434f444528292e636f646567656e2831302967656e4576616c28362963616c6c436c6f73757265283129 4246:S57|475f434f444528292e636f646567656e2831302967656e4576616c28362963616c6c436c6f7375726528312967657441726752656773283129 4247:C61,3352|90909090909090483b65187303ff554852534950504c8b304983fe0575724c8b4808488b7810488b7018488b42089090ff150a0d0000488b5424184889c1488b42089090ff15fe0c00005756515048bb01000000000000004c89c8488b54243890e8a1ffffff4989c64c89f0ff15de0c00004883f801744d4c8b6c2438488b1c24498b4508909090ff15ca0c0000eb05e9e00200004c8b642438488b5c2408498b442408ff15b60c00004c8b442428488b5c2430488b4424184c89e24883c440e942ffffff4c8b6c24384d89f4498b4508909090ff158e0c00004883f801745b488b1c24498b4508ff15820c00004c8b5c2438488b5c2408498b4308ff15760c00004d8b4310498b5b084c89e048ba8889f5acaa2a000090ff15620c00004c8b442428488b5c2430488b442410488b5424384883c440e9ccfeffff49544c8b442430488b5c2438488b4424204c89ea9090e8b1feffff4c8b5c24404d8b53084d8b4a284d8b014983f801740c48bf0100000000000000eb6650495249ff7310488b1c244c89d09090ff15fa0b0000488b7c2408488b772848c7060300000050488b442408ff15e60b00004d8d7fe04c3b7d107303ff554049c747f8030000004c89fb48c7431001000000488b1424488953084889034889df4883c418eb0150488b742448574c8b4610488b5e08488b44241048ba8889f5acaa2a0000ff15960b0000488b5c24484889da4883f2024c8b4424404889d3488b442428488b54245090e8e1fdffff488b4c24505048ff71084c8b54242849b901000000000000004c8b4110488b1c24488b44241848ba60dcf4acaa2a00009090ff15420b0000488b04244c8b7424284c8b68104d8b66084d8965004c8b5c24604d8b53084d8b4a284d8b014983f801740c48bf0100000000000000eb63495249ff7310488b1c244c89d09090ff15fe0a0000488b7c2408488b772848c7060300000050488b442408ff15ea0a00004d8d7fe04c3b7d107303ff554049c747f8030000004c89fb48c7431001000000488b1424488953084889034889df4883c418488b4c2460574c8b4110488b5908488b44241848ba8889f5acaa2a0000909090ff159a0a0000488b44246848ff70084c8b54244049b901000000000000004c8b4010488b1c24488b44241848ba60dcf4acaa2a0000909090ff156a0a00004c8b34244c8b6c24404d8b66104d8b5d084d891c24488b4424084883c478c34983fe0375744c8b68084d8b651849f7c40100000075684d8b1c244d8b530849f7c201000000755c4d8b4a084983f9017557498b7c24084883ff01756e4d8d7fe84c3b7d107303ff554049c747f8020000004c89fe498b0a48894e0848c706fbffffff4d8d7fe84c3b7d107303ff554049c747f802000000eb14e93b010000e91a010000e9f9000000e9d80000004c89fa48c74208010000004889324d8d7fe84c3b7d107303ff5540eb05e99c00000049c747f8020000004c89fe48895608498b55104889164d8d7fd84c3b7d107303ff554049c747f8040000004c89fb48c743180300000049b8088ff6acaa2a00004c8943104889730848c703090000004d8d7fd84c3b7d107303ff554049c747f8040000004c89fe4d8b45204c8946184d8b334c89761048895e0848c706050000004c8b442408488b5c24104889f0488b5424184883c420e946fbffff48b80100000000000000488d542420ff15f20800004883c420c348b80100000000000000488d5424209090ff15de0800004883c420c348b80100000000000000488d5424209090ff15ca0800004883c420c348b80100000000000000488d5424209090ff15b60800004883c420c34983fefb75714c8b68084983fd03750c49bc0300000000000000eb0a49bc01000000000000004c3be3756f4c8b62084d8b5c24284d8b134983fa01740f48b801000000000000004883c420c3495448ff7210488b1c244c89e0ff155a0800004c8b4c24084d8b412849c7000300000050488b442408eb05e95000000090ff153e0800004d8d7fe04c3b7d107303ff554049c747f803000000eb05e91e0000004c89ff48c7471001000000488b3424488977084889074889f84883c438c348b801000000000000004883c420c34983fe13756d4c8b68084983fd01750f48b801000000000000004883c420c34d8b65084983fc01751c4c8b442408488b5c2410498b4500488b5424184883c420e9c7f9ffff4c8b5c241849546a014c8b54241849b9ffffffffffffffff49b8010000000000000048bb0300000000000000eb05e930000000498b4500498b531890ff124c8b2c244883c408483b65187303ff5548e971ffffff48b801000000000000004883c428c34983fe0975654c8b68104d8b65004983fcfb755c4c8b58084983fb01751a48b80100000000000000488d542420ff15220700004883c420c34d8b53084983fa01756e4d8b4d0848bf30496000000000004c3bcf75204889de4883f6024889f3498b034883c420e9f9f8ffffe9e4050000e9c305000048bef02c6000000000004c3bce756e498b0b488b394883fffb7538488b710848f7c601000000741848b8b88cedacaa2a00004883c420e9b4f8ffffe95301000048b8d095edacaa2a00004883c420e99cf8ffff48bb010000000000000048b8208ff6acaa2a000090ff157a0600004883f8017476488b7424186a01eb05e9f50000004d89c249b9ffffffffffffffff49b8ffffffffffffffff48bb03000000000000004889c8488b56189090ff1248f7c0010000007505488b18eb1848b8a81df5acaa2a000090ff555848bb0100000000000000488b542418534c8b420848bb70d4f4acaa2a0000eb05e96e00000048b888d4f4acaa2a0000909090ff15ee050000488b4c24184883f901740c49be208ff6acaa2a0000eb0a49bed88af4acaa2a00004c8b6c24204d8b65104c8b5c24284c896424284d8b55084d89f14d89f04889c3488b042448ba488ef5acaa2a00004883c4284953ff259b05000048b80100000000000000488d542420ff158e0500004883c420c348b80100000000000000488d5424209090ff157a0500004883c420c34d8b4a084983f90175764d8b450848bff04b6000000000004c3bc7753fff355a050000498b3249ba388ff6acaa2a000049b9508ff6acaa2a000049b8388ff6acaa2a00004889f3498b03488d5424289090ff152e0500004883c420c348be304c6000000000004c3bc67541ff351c050000498b1a49ba508ff6acaa2a0000eb05e98f03000049b9388ff6acaa2a000049b8508ff6acaa2a0000498b03488d542428ff15ee0400004883c420c348bb70516000000000004c3bc3753dff35dc040000498b1249ba388ff6acaa2a000049b9508ff6acaa2a000049b8388ff6acaa2a00004889d3498b03488d542428ff15b20400004883c420c348baf0486000000000004c3bc2753dff35a0040000498b0a49ba508ff6acaa2a000049b9388ff6acaa2a000049b8508ff6acaa2a00004889cb498b03488d542428ff15760400004883c420c348b9f02e6000000000004c3bc17541ff35640400004d8b0a49bad09af5acaa2a00004c89cf49b9308ef5acaa2a000049b8d09af5acaa2a00004889fb498b03488d54242890ff15360400004883c420c348bf704c6000000000004c3bc7753dff3524040000498b3249ba688ff6acaa2a000049b9908ff6acaa2a000049b8a88ff6acaa2a00004889f3498b03488d542428ff15fa0300004883c420c348beb04c6000000000004c3bc6753dff35e8030000498b1a49baa88ff6acaa2a000049b9d08ff6acaa2a000049b8688ff6acaa2a0000498b03488d542428909090ff15be0300004883c420c348bbf04c6000000000004c3bc3753dff35ac030000498b1249ba908ff6acaa2a000049b9688ff6acaa2a000049b8d08ff6acaa2a00004889d3498b03488d542428ff15820300004883c420c348ba304d6000000000004c3bc2753dff3570030000498b0a49bad08ff6acaa2a000049b9a88ff6acaa2a000049b8908ff6acaa2a00004889cb498b03488d542428ff15460300004883c420c348b970506000000000004c3bc17541ff35340300004d8b0a49bae88ff6acaa2a00004c89cf49b91090f6acaa2a000049b83890f6acaa2a00004889fb498b03488d54242890ff15060300004883c420c348bfb0506000000000004c3bc7753dff35f4020000498b3249ba3890f6acaa2a000049b95090f6acaa2a000049b8e88ff6acaa2a00004889f3498b03488d542428ff15ca0200004883c420c348bef0506000000000004c3bc6753dff35b8020000498b1a49ba1090f6acaa2a000049b9e88ff6acaa2a000049b85090f6acaa2a0000498b03488d542428909090ff158e0200004883c420c348bb30516000000000004c3bc3753dff357c020000498b1249ba5090f6acaa2a000049b93890f6acaa2a000049b81090f6acaa2a00004889d3498b03488d542428ff15520200004883c420c348b80100000000000000488d5424209090ff153e0200004883c420c348b80100000000000000488d5424209090ff152a0200004883c420c348b80100000000000000488d5424209090ff15160200004883c420c348b80100000000000000488d5424209090ff15020200004883c420c39090909090|@4268,8191,@3880,@3880,@4110,@4108,@4108,@3889,@4108,@4108,@3960,@3706,@3630,@3960,@3720,@3706,@3630,@3960,@3720,@4265,@4265,@4265,@4265,@3706,@3630,@4265,@3973,@3266,@3969,@4265,@4265,@4251,@4269,@4250,@4269,@4251,@4269,@4250,@4269,@3967,@4269,@4257,@4269,@4254,@4269,@4255,@4269,@4252,@4269,@4263,@4269,@4260,@4269,@4262,@4269,@4258,@4269,@4265,@4265,@4265,@4265|80,0,0 271,0,@3959 366,0,0 500,0,@3959 567,0,0 590,0,@3718 651,0,0 781,0,@3959 814,0,0 837,0,@3718 1117,0,@4248 1219,0,0 1245,0,0 1273,0,0 1301,0,0 1345,0,1 1357,0,0 1390,0,0 1518,0,0 1549,0,0 1616,0,-1 1626,0,0 1636,0,1 1686,0,0 1731,0,0 1771,0,I218 1818,0,I105 1858,0,@440 1882,0,@478 1901,0,0 1911,0,@4249 1951,0,-1 1961,0,-1 1971,0,1 2006,0,@3810 2020,0,0 2040,0,@3703 2057,0,@3704 2087,0,@4249 2099,0,@3629 2145,0,@3968 2167,0,0 2193,0,0 2235,0,I229 2259,0,@4250 2269,0,@4251 2279,0,@4250 2313,0,I230 2337,0,@4251 2354,0,@4250 2364,0,@4251 2393,0,I251 2417,0,@4250 2427,0,@4251 2437,0,@4250 2469,0,I217 2493,0,@4251 2503,0,@4250 2513,0,@4251 2545,0,I113 2569,0,@3980 2582,0,@3967 2592,0,@3980 2625,0,I231 2649,0,@4252 2659,0,@4254 2669,0,@4255 2701,0,I232 2725,0,@4255 2735,0,@4257 2745,0,@4252 2777,0,I233 2801,0,@4254 2811,0,@4252 2821,0,@4257 2853,0,I234 2877,0,@4257 2887,0,@4255 2897,0,@4254 2929,0,I247 2953,0,@4258 2966,0,@4260 2976,0,@4262 3009,0,I248 3033,0,@4262 3043,0,@4263 3053,0,@4258 3085,0,I249 3109,0,@4260 3119,0,@4258 3129,0,@4263 3161,0,I250 3185,0,@4263 3195,0,@4262 3205,0,@4260 3237,0,0 3265,0,0 3293,0,0 3321,0,0 4248:O2|-3,I113 4249:O2|-1,@3522 4250:O2|1,@3628 4251:O2|1,@3522 4252:O2|0,@4253 4253:O1|8 4254:O2|0,@3985 4255:O2|0,@4256 4256:O1|7 4257:O2|0,@3986 4258:O2|1,@4259 4259:O1|-10 4260:O2|1,@4261 4261:O1|-6 4262:O2|1,@3676 4263:O2|1,@4264 4264:O1|5 4265:C4,256|90909090909090483b65187303ff55484c8b72f8526a014c8b52e849b9ffffffffffffffff49b8ffffffffffffffff48bb0100000000000000488b42e0498b5618909090ff124c8b2c244d8b65f04983fc01740c49bb508ff6acaa2a0000eb0a49bb388ff6acaa2a00004d8b55f85049534d8b420848bb70d4f4acaa2a000048b888d4f4acaa2a0000909090ff15960000004c8b4c240849f7c10100000075444c8b442410498b78f8488b7710488b5c241848897424184c8b5708498b114c8b0c244c8b04244889d94889c34889d048ba488ef5acaa2a00004883c41851ff254c00000048b8c091f6acaa2a000090ff555848b8010000000000000090909090|@4273,8191,@3266,@3969|29,0,-1 39,0,-1 49,0,0 86,0,@4251 98,0,@4250 119,0,@3703 129,0,@3704 209,0,@3968 230,0,@4266 244,0,0 4266:O3|@7377,@215,@4267 4267:S18|67656e546573743a204e6f20726573756c74 4268:S30|475f434f444528292e636f646567656e2831302967656e54657374283329 4269:C7,456|90909090909090483b65187303ff55484c8b72f04983fe0174054d89c5eb034d89cd4983fe0174054d89d4eb054c8b6424084989d24989c14c89e890ff15ae0100004883f8017402eb484d8b014983f8fb751b4889df4c89ee498b59084c89e0ff15920100004883f8017408eb2a4c89ee4889df488b1f4883fbfb7567488b5f084889f0ff15760100004883f8017459eb064c89ee4889df4d8b42f84952575649546a014d8b52e84c89cb49b9ffffffffffffffff498b501849b8ffffffffffffffff4889d948bb03000000000000004889c890ff1248f7c001000000750f4c8b30eb24e9be000000e9b900000048b8a81df5acaa2a0000909090ff555849be01000000000000004c8b6c24184d8b65f849566a014d8b55e849b9ffffffffffffffff49b8ffffffffffffffff48bb0300000000000000488b442420498b542418909090ff1248f7c00100000075054c8b18eb1848b8a81df5acaa2a000090ff555849bb01000000000000004c8b5424204d8b4af84d8b41104c894424304d8b51084c8b4c24084c8b4424104c89db488b042448ba488ef5acaa2a00004883c428ff256100000048b801000000000000004c89d2488b0c244883c41051ff254d0000009090909090|@4271,8191,@4270,@3973,@3973,@3969,@4265|173,0,-1 187,0,-1 200,0,1 240,0,@3810 256,0,0 283,0,-1 293,0,-1 303,0,1 342,0,@3810 356,0,0 405,0,@3968 425,0,0 4270:C2,16|48b80300000000000000c39090909090|@4272,1|2,0,1 4271:S43|475f434f444528292e636f646567656e2831302967656e5465737428332967656e436f6d70617265283629 4272:S27|414d443634434f4445434f4e5328292e6973436f6d705252283129 4273:S46|475f434f444528292e636f646567656e2831302967656e5465737428332967656e4f746865725465737473283129 4274:C3,224|90909090909090483b65187303ff5548525349524d89ca4d89c14989d848bb0300000000000000488b521890ff124c8b34244983fe01750f48b801000000000000004883c410c349f7c601000000755948f7c00100000075554c8b6c240849ba03000000000000004c8b084d8b06498b5d08498b451048bad0ecf4acaa2a0000ff15820000004989c44d8d7ff04c3b7d107303ff554049c747f8010000004c89f84c89204883c410c3e91a00000048b87896f6acaa2a0000909090ff555848b8010000000000000048b8c096f6acaa2a000090ff555848b80100000000000000|@4279,8191,@3806|31,0,1 58,0,0 96,0,1 120,0,@3740 176,0,@4275 192,0,0 202,0,@4277 216,0,0 4275:O3|@7377,@215,@4276 4276:S24|67656e546f52656769737465723a206e6f20726573756c74 4277:O3|@7377,@215,@4278 4278:S29|67656e546f52656769737465723a206e6f742061207265676973746572 4279:S36|475f434f444528292e636f646567656e2831302967656e546f5265676973746572283529 4280:O1|@3342 4281:S19|475f434f444528292e67656e636f6465283229 4282:O1|@4283 4283:C2,24|48b80096f3acaa2a000090ff555848b80100000000000000|@3268,1|2,0,@3325 16,0,0 4284:O1|@4285 4285:C2,24|48b80096f3acaa2a000090ff555848b80100000000000000|@3268,1|2,0,@3325 16,0,0 4286:C30,3520|90909090909090488dbc24f0feffff483b7d187303ff55504c8b70184d8b2e4c8b60484d8b1c244c8b50504d8b0a488bb890000000488b37488b9098000000488b0a50534950495549534951565148ff3048ff701048ff702048ff702848ff703848ff704048ff707048ff707848ffb0a0000000488b4424404c8b3048bb11000000000000004c89f048ba302e60000000000090ff124883f8017502eb2ba8017503ff55704883f8017c0c49bd0300000000000000eb0a49bd01000000000000004983fd037402eb054989c5eb10a8017503ff55704989c54983c51070f44983fd01743a4c8b84248000000048bb010000000000000048b8380aefacaa2a0000ff15e20c0000483b65187303ff5548e960ffffff49bd010000000000000049bd01000000000000004c8b6c24404d8b65004954488b9c248800000048b80100000000000000909090ff15a20c00004c8b9c248000000041f6c3017503ff55704983fb297c7149b9f1ffffffffffffff4d89c84d23c341f6c0017503ff557050524c89ca48d1fa498d43ff48f7ea4c8d40015a5870e641f6c0017503ff55704981f801ffffff7c6d41f6c0017503ff55704981f8010100007d6048b8b01ef4acaa2a000090ff152e0c00004d8d7fe84c3b7d10730aeb05e978010000ff554049c747f8020000004c89fe48bb18a7f6acaa2a000048895e084889064d8d7fe84c3b7d107303ff554049c747f8020000004c89faeb0ae94e000000e9490000004889720848c70291000000524c89c348b8030000000000000090ff15c20b00004883f8017506488b3c24eb7050488b442408488d9424a0000000ff15aa0b00004889c74883c408eb5848b8b01ef4acaa2a0000909090ff15960b00004d8d7fe84c3b7d107303ff554049c747f8020000004c89ff48be48a7f6acaa2a0000488977084889074d8d7fe84c3b7d107303ff554049c747f802000000eb0ae94e000000e9490000004c89fb48897b0848c70391000000534c89c348b80900000000000000ff15320b00004883f8017506488b3c24eb1b50488b442408488d9424a0000000ff151a0b00004889c74883c40848bba10000000000000048b8704ef4acaa2a0000909090ff15fe0a00004883f80175054989faeb55504889f8488d9424a0000000909090ff15e60a00004989c24883c408eb374c8b5424584983fa01742148bb910000000000000048b8606cf4acaa2a00009090ff15be0a00004989c2eb0a49ba010000000000000050495249b901000000000000004983fa0175054d89c8eb2e41f6c1017503ff55704c89cf4883c70270f44d8b52084989f9483b65187303ff5548ebd149b8010000000000000048bb11000000000000004c89c048ba302e6000000000009090ff124883f8017502eb2ba8017503ff55704883f8017c0c48bf0300000000000000eb0a48bf01000000000000004883ff037402eb054889c7eb10a8017503ff55704889c74883c71070f44883ff01750c48be0100000000000000eb3d48bb11000000000000004889da4823d7f6c2017503ff55704889da482bd7488d520170f148bb60a7f6acaa2a00004889d0909090ff15c20900004889c6488b04244883f80175054889f1eb154889f0488d9424a000000090ff15a60900004889c15149be01000000000000004883f90175054d89f5eb2e41f6c6017503ff55704d89f44983c40270f4488b49084d89e6483b65187303ff5548ebd149bd010000000000000041f6c5017503ff55704983fd017c0c49bc0300000000000000eb0a49bc01000000000000004983fc0375054d89ebeb1241f6c5017503ff55704d89eb4983eb0e70f448bb11000000000000004c89d848baf02d6000000000009090ff124c8b5424604d8b0a41f6c1017503ff55704983f9017c0c49b80300000000000000eb0a49b801000000000000004983f80375054c89cfeb1241f6c1017503ff55704c89cf4883ef0e70f45048bb11000000000000004889f848baf02d600000000000ff12488b7424704889c34823def6c3017503ff5570488d58ff4803de70f4488b14244889d94823caf6c1017503ff5570488d4bff4803ca70f4f6c1017503ff55704889c84883c00a70f45049be01000000000000004c8b6c24184983fd0175054d89f4eb2e41f6c6017503ff55704d89f34983c30270f44d8b6d084d89de483b65187303ff5548ebd149bc010000000000000049bb01000000000000004d89e24d23d341f6c2017503ff55704d89da4d2bd44d8d520170f149524c8b8424980000004c89d3488b8424b8000000909090ff15d20700004c8b842490000000488b1c24488b8424b80000009090ff15be0700004c8b4c240849f7c10100000074054d89c8eb1748b86055edacaa2a0000ff555849b801000000000000004c89c749b8010000000000000048bb83000000000000004889f848ba7015600000000000ff124d8d7fe84c3b7d107303ff554049c747f8020000004c89fe4889460848c706010000004d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89fb4889334d8d7ff04c3b7d107303ff554049c747f8010000004c89fa48891a488b4c2450488911488b4424684c8b7424104c89304c8b6c24784d8b6500534d89f14d89e0488b4424789090ff15e60600004d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fb49c703010000004953488b442428488d9424d0000000909090ff15b20600004c8b9424880000004d8b0a41f6c1017503ff55704983f9017c0c49b80300000000000000eb0a49b801000000000000004983f80375054c89cfeb1241f6c1017503ff55704c89cf4883ef0e70f448bb11000000000000004889f848baf02d6000000000009090ff12488b7424204889c34823def6c3017503ff5570488d58ff4803de70f448ba11000000000000004889d94823caf6c1017503ff55705052488d43ff48d1fa48f7ea488d48015a5870e9535149b911000000000000004989c84889cb488b442418909090ff15ea050000488b442408a8017503ff55704989c64983c60670f44c8bac24a00000004d89f44d23e541f6c4017503ff55704d8d66ff4d03e570f441f6c4017503ff55704d89e34983c30270f449ba11000000000000004d89d94d23ca41f6c1017503ff557050524c89da48d1fa498d42ff48f7ea4c8d48015a5870e641f6c5017503ff55704d89e84983c00470f44c89cf49b911000000000000004c89c64989f84889f3488b4424189090ff1546050000488b5c2408f6c3017503ff55704889da4883c20270f448b911000000000000004889d04823c1a8017503ff55705248d1fa488d41ff48f7ea488d40015a70eb49b911000000000000004989c048bb0100000000000000488b442418909090ff15ea0400004c8b7424184d8b2e4d8b5d004983fb01755949ff750848bb8500000000000000488b042448bab044600000000000ff124d8d7fe84c3b7d107303ff554049c747f8020000004d89fa4c8b0c244d894a0849c702030000004c8b4424204d891049bc0100000000000000eb1748b808a8f6acaa2a0000ff555849bc010000000000000048bbb01e600000000000488b84248800000048bab018600000000000ff124883f801740c48bf0100000000000000eb08488bbc2488000000488b74241040f6c6017503ff55704889f34883c30470f44989f8488b44242090ff1512040000488b9424d000000048b901000000000000004883fa0175054889c8eb2e4c8b52084889cb488b02909090ff15ea0300004889c14c89d2483b65187303ff5548ebd148b801000000000000004c8b74241041f6c6017503ff55704d89f54983c50670f44989c04c89eb488b44242090ff15ae0300004c8ba424c80000004983fc01750c49bb0100000000000000eb3f4d8b142449ff7424084d8b4210498b5a08498b02488d9424f0000000ff157a0300004c8b24244883c408483b65187303ff5548ebb949bb01000000000000004c8b5424704d8b0a4983f901756c488b7c2420488b37488b1e4883fb03756048ff760848bb0500000000000000488b042448bab0446000000000009090ff124d8d7fe84c3b7d107303ff554049c747f8020000004c89fa488b0c2448894a0848c702ffffffff488b44242848891049b80100000000000000eb2ce91c00000048b860a8f6acaa2a0000909090ff555849b80100000000000000eb0b49b80100000000000000504c8b8424880000004983f801742f488b742428488b1e488b134883fa01751848b8d06ef4acaa2a000090ff555848bf0100000000000000488b7b08eb63488b7c2428488b37488b164883fa01751948b8d06ef4acaa2a00009090ff555848bb0100000000000000488b5e084d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89f94889194889c848ba701e600000000000909090ff124889cf574889fb488b8424f0000000909090ff150a020000488b4424704883f80174754c8b6c244849bc11000000000000004d89eb4d23dc41f6c3017503ff557050524c89ea48d1fa498d4424ff48f7ea4c8d58015a5870e54c8b5424684d89d14d23cb41f6c1017503ff55704d8d4aff4d03cb70f44c8b8424f0000000488b5c24304c89c8ff159e01000048b8c0a8f6acaa2a0000eb05e984000000488b542478ff124c8b8424e00000004983f8017502eb5749ff3049ff700848b84100000000000000488b94248800000090ff12488b44240890ff155601000048bf08e46cadaa2a0000488b374889c34889f0909090ff15420100004c8b04244883c410483b65187303ff5548eba148b8e0a8f6acaa2a0000488b542478ff124989c6eb0a49be0100000000000000488b04244881c4f8000000c3909090|@4383,8191,@3397,@4384,@3439,@4387,@4389,@3439,@4387,@4390,@4391,@4393,@4391,@4394,@4396,@4397,@4405,@3424,@4413,@3635,@3635,@3635,@4415,@4420,@4415,@4422,@4433,@4316,@3287,@231|126,0,8 139,0,I110 173,0,1 185,0,0 238,0,0 248,0,@1580 278,0,0 288,0,0 317,0,0 359,0,-8 443,0,@3491 491,0,@4287 559,0,1 617,0,@3491 660,0,@4289 728,0,4 783,0,80 793,0,@3556 864,0,72 874,0,@3611 897,0,0 910,0,0 967,0,0 977,0,8 990,0,I110 1025,0,1 1037,0,0 1082,0,0 1094,0,8 1130,0,@4290 1192,0,0 1249,0,0 1274,0,1 1286,0,0 1325,0,8 1338,0,I109 1375,0,1 1387,0,0 1427,0,8 1440,0,I109 1525,0,0 1587,0,0 1597,0,0 1711,0,@336 1724,0,0 1737,0,0 1747,0,65 1760,0,I11 2002,0,1 2014,0,0 2053,0,8 2066,0,I109 2108,0,8 2154,0,8 2255,0,8 2324,0,8 2378,0,8 2419,0,8 2432,0,0 2478,0,66 2492,0,I200 2551,0,0 2563,0,@4293 2576,0,0 2586,0,I48 2604,0,I24 2622,0,0 2688,0,0 2745,0,0 2810,0,0 2875,0,0 2920,0,2 2934,0,I200 2995,0,0 3012,0,@4295 3028,0,0 3040,0,0 3082,0,@3617 3096,0,0 3129,0,@3617 3144,0,0 3193,0,I47 3248,0,8 3348,0,@4297 3395,0,32 3428,0,@7378 3475,0,@4298 3497,0,0 4287:O2|124,@4288 4288:O2|36,0 4289:O2|188,@4288 4290:O1|@4291 4291:C3,32|90909090909090483b65187303ff554848b8380aefacaa2a0000ff2528000000|@4292,6149,@3439|18,0,@1580 4292:S38|414d443634434f4445434f4e5328292e636f7079436f64652833296e6f70436f64652d283129 4293:O3|@7377,@215,@4294 4294:S37|63736567436f6e76657274546f436f64653a206e6f7420612062797465207365676d656e74 4295:O3|@7377,@215,@4296 4296:S47|63736567436f6e76657274546f436f64653a206e6f7420616e20756e6c6f636b656420636f6465207365676d656e74 4297:S16|526567697374657220736574203d205b 4298:S3|5d0a0a 4299:S20|475f434f444528292e636f646567656e28313029 4300:C4,1304|90909090909090488dbc2440ffffff483b7d187303ff555050504989c649b8ffffffffffffffff48bb810000000000000048b80d0000000000000048ba7015600000000000909090ff1248c7000b0000004d8d7fe84c3b7d107303ff554049c747f8020000004d89f84989400849c700ffffffff4d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89ff4c89074889e348893b4889e248c74208ffffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89f9488b04244889014c8b4424084c89410850504889ce49b8010000000000000048bb810000000000000048b80d0000000000000048ba70156000000000009090ff1248c7000b0000004d8d7fe84c3b7d107303ff554049c747f8020000004c89fb4889430848c703ffffffff4d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89fa48891a4889e14889114889e048c74008010000004d8d7fe84c3b7d107303ff554049c747f8020000004d89f8488b3c24498938488b5c240849895808505050504d89c549b8010000000000000048bb810000000000000048b81d0000000000000048ba7015600000000000ff1248c7001b0000004d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89f849c700190000004d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89ff48bb78a6edacaa2a000048891f4d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89fa48c7021b0000004889e14889014889e04c8940084989e0498978104889e7488957184d8d7fd84c3b7d107303ff554049c747f8040000004c89fb488b1424488913488b4c240848894b08488b442410488943104c8b4424184c89431850504989dc49b8010000000000000048bb810000000000000048b8170000000000000048ba7015600000000000909090ff1248c700150000004d8d7fe84c3b7d107303ff554049c747f8020000004d89f84989400849c700ffffffff4d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89ff4c89074889e348893b4889e248c74208010000004d8d7fe84c3b7d107303ff554049c747f8020000004c89f9488b04244889014c8b4424084c8941084d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89ff48c707010000004d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89fb48c703010000004d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89fa48c702030000004d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89f848c700010000004d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89f849c700010000004d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fb49c703010000004d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fa49c7020100000049565649554954515753525049504953495248bb80aef6acaa2a00004c89f048bae8d7edacaa2a00009090ff15de0000005048bbc8e0edacaa2a0000488b44246048bae8d7edacaa2a0000ff15c60000004d8d7f904c3b7d107303ff554049c747f80d0000004d89f94c8b4424304d894160488b7c240849897958488b34244989715049894148488b5c245849895940488b54243849895138488b4c242849894930488b442418498941284c8b7424484d8971204c8b6c24404d8969184c8b6424104d8961104c8b5c24504d8959084c8b5424204d89114c89c84881c4b8000000c39090909090|@4308,8191,@974,@974|31,0,-1 41,0,64 51,0,6 61,0,I11 212,0,0 222,0,64 232,0,6 242,0,I11 394,0,0 404,0,64 414,0,14 424,0,I11 508,0,@617 647,0,0 657,0,64 667,0,11 677,0,I11 1093,0,@4301 1106,0,@972 1125,0,@1032 1140,0,@972 4301:O3|@4303,@4305,@4302 4302:O2|@4307,@7444 4303:O2|@4304,@7444 4304:C2,48|4c8b304c8b6a084d3bf5751648b80300000000000000c348b80100000000000000c348b80100000000000000c3909090|@966,6149|14,0,1 25,0,0 36,0,0 4305:O2|@4306,@7444 4306:C2,48|4989c64d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c89701048c740088b0000004c8b72084c8930c390|@966,4101| 4307:C2,56|4c8b304c8b6a084d3bf57510488b4010c348b80100000000000000c348b8b0d7edacaa2a000090ff555848b8010000000000000090909090|@966,6149|19,0,0 30,0,@970 44,0,0 4308:S25|5452414e535f54414228292e74746162437265617465283129 4309:C6,376|90909090909090483b65187303ff55484c8b7218504923c6a801587503ff5570493bc67d70a8017503ff55704883f80b7d68525048ff72a8ff15620100004c8b6c2410504989c0498b5df0498b45d048ba98aaf3acaa2a0000909090ff15460100004c8b6424184d8d7fe84c3b7d107303ff554049c747f8020000004d89fb4c8b14244d89530849c703050000004d8b4424d0eb0ae9d3000000e9ce0000004c89db48b84858f4acaa2a0000ff15fe0000004c8b4c24185049b801000000000000004889c3498b41d048ba40a1f3acaa2a000090ff15de0000004c8b44241841f6c0017503ff55704983f8017d02eb1f488b7c2410488b3749504c23c641f6c00149587503ff55704c3bc67d02eb1948b860d6ecacaa2a00009090ff555848bf010000000000000041f6c0017503ff55704c89c34883c30270f4488b14244889549ffc48bf010000000000000041f6c0017503ff55704c89c04883c00270f4488b5424204883c428e99afeffff48b80100000000000000c3|@4310,8191,@4167,@3361,@3266,@3345|81,0,@3359 164,0,@3590 186,0,0 203,0,@3343 273,0,@49 288,0,0 325,0,0 367,0,0 4310:S34|475f434f444528292e636f646567656e283130297075736841726752656773283129 4311:C2,8|4c8b7030498b06c3|@2227,4097| 4312:C3,72|90909090909090483b65187303ff55484c8b70204d8b6e104d8b6500495448bb010000000000000048b81900000000000000488d54240890ff15320000004883c408c39090909090|@4314,7949,@4313|32,0,0 42,0,12 4313:C5,304|90909090909090483b65187303ff5548a8017503ff55704883f8017d044889d8c34989d54989c44c89e09090ff1526010000498b55f84883fa017502eb564955495453504c8b324983fe01750c49bd0100000000000000eb404d8b5608488b1c24498b06ff15f60000004883f801740c49bd0300000000000000eb1d4d89d6483b65187303ff5548ebbd49bd0100000000000000e9080000004983fd017508eb5f495549545350488b442410a8017503ff55704989c64983ee0270f44d89f590ff15a20000004d8d7fe84c3b7d107303ff554049c747f8020000004d89fc4c8b5c24084d895c2408498904244c89e34c89e8488b5424184883c420e907ffffff488b5c2410f6c3017503ff55704889da4883ea0270f4488b5c24084889d0488b5424184883c420e9dbfeffff90909090|@4315,7949,@3299,@3351,@3299|79,0,0 114,0,1 140,0,0 4314:S31|5452414e535f54414228292e6765744d6f6469666564526567536574283129 4315:S41|5452414e535f54414228292e6765744d6f646966656452656753657428312967657452656773283229 4316:C126,10096|90909090909090483b65187303ff55484d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fe49c7060100000049ff701849ff707849ff7020495649ff7070534989c548bbb01e600000000000498b402848bab0186000000000009090ff124883f8017418495548b87f00000000000000488b542428909090ff12eb0e4955498b4028488b54242890ff1248b8a0e0f6acaa2a0000488b542428909090ff124c8b6424184d8b1c244c8b142449534d23da41f6c301495b7503ff55704d3bda7d704d8b0c2448bb03000000000000004c89c8909090ff15b6260000488b54242890ff1248b81300000000000000488b542428909090ff124c8b442418498b384889fb488b4424089090ff158a260000a8017503ff55704881f8810000007c38a8017503ff55704881f89f0000007f28eb05e91b260000488b5c2418488b13f6c2017503ff55704889d14883c10270f448890b4889c6eb0a48be01000000000000005648bb11000000000000004889f048ba702f600000000000ff124883f801750c48be0300000000000000eb0a48be01000000000000004889f34883f3025348bb0900000000000000488b44240848ba702f60000000000090ff124883f801750c48ba0300000000000000eb0a48ba01000000000000004889d14883f1025148bb0500000000000000488b44241048ba702f60000000000090ff124883f801750c48b80300000000000000eb0a48b801000000000000004989c64983f602495648bb0300000000000000488b44241848ba702f600000000000ff124883f801750c49bd0300000000000000eb0a49bd01000000000000004d89ec4983f4024c8b5c24384d8b1349544c89d3488b44243090ff152a2500004c8b4c24404d8b0141f6c0017503ff55704c89c74883c70270f44989394889c648b8c8d2f3acaa2a0000ff150225000050480bc6a801587503ff5570483bf07502eb2448b8380dedacaa2a000090ff15e624000050480bc6a801587503ff5570483bf07402eb75498b1956488b4424389090ff15ca240000a8017503ff55704883f8017c0c48ba0300000000000000eb0a48ba01000000000000004883fa0375054889c1eb10a8017503ff55704889c14883e90e70f448bb11000000000000004889c848baf02d60000000000090ff1248bb1100000000000000eb05e9ed00000048ba302e600000000000909090ff124883f8017502eb3ca8017503ff55704883f8017c0c49be0300000000000000eb0a49be01000000000000004983fe037413a8017503ff55704989c64983c61070f44c89f0488d54246890ff150a24000048b8b8e0f6acaa2a0000488b542458909090ff12488b442428488d542468ff15ee23000048b85900000000000000488b542458909090ff1248b8c8d2f3acaa2a0000ff15d22300004c8b2c2450490bc5a801587503ff55704c3be8751948b80100000000000000488d5424689090ff15ae230000eb6848b80100000000000000488d54246890ff159e230000eb5548b8c88af4acaa2a00009090ff159223000050480bc6a801587503ff5570483bf0753748b8d0e0f6acaa2a0000488b5424509090ff1248b80100000000000000488d542460909090ff155e230000eb58e992220000e98d22000048b8f836f4acaa2a0000ff154a23000050480bc6a801587503ff5570483bf0753248b8e8e0f6acaa2a0000488b5424509090ff1248b80100000000000000488d542460909090ff1516230000eb6ee93922000048b8e01ef4acaa2a000090ff150623000050480bc6a801587503ff5570483bf0752d48b800e1f6acaa2a0000488b5424509090ff1248b80100000000000000488d542460909090ff15d2220000eb5848b8b0a2f5acaa2a00009090ff15c622000050480bc6a801eb05e9cb210000587503ff5570483bf0753348b818e1f6acaa2a0000488b542450909090ff1248b80100000000000000488d542460909090ff158a220000eb6ee98d21000048b8c0a2f5acaa2a000090ff157a22000050480bc6a801587503ff5570483bf0752d48b830e1f6acaa2a0000488b5424509090ff1248b80100000000000000488d542460909090ff1546220000eb5848b8808ff6acaa2a00009090ff153a22000050480bc6a801eb05e91f210000587503ff5570483bf0753348b848e1f6acaa2a0000488b542450909090ff1248b80100000000000000488d542460909090ff15fe210000eb6ee9e120000048b8c08ff6acaa2a000090ff15ee21000050480bc6a801587503ff5570483bf0752d48b860e1f6acaa2a0000488b5424509090ff1248b80100000000000000488d542460909090ff15ba210000eb5848b82890f6acaa2a00009090ff15ae21000050480bc6a801eb05e973200000587503ff5570483bf0753348b878e1f6acaa2a0000488b542450909090ff1248b80100000000000000488d542460909090ff1572210000eb6ee93520000048b86890f6acaa2a000090ff156221000050480bc6a801587503ff5570483bf0752d48b890e1f6acaa2a0000488b5424509090ff1248b80100000000000000488d542460909090ff152e210000eb5848b80090f6acaa2a00009090ff152221000050480bc6a801eb05e9c71f0000587503ff5570483bf0753348b8a8e1f6acaa2a0000488b542450909090ff1248b80100000000000000488d542460909090ff15e6200000eb6ee9891f000048b840a9f4acaa2a000090ff15d620000050480bc6a801587503ff5570483bf0752d48b8c0e1f6acaa2a0000488b5424509090ff1248b80100000000000000488d542460909090ff15a2200000eb5848b818f8f3acaa2a00009090ff159620000050480bc6a801eb05e91b1f0000587503ff5570483bf0753348b8d8e1f6acaa2a0000488b542450909090ff1248b80100000000000000488d542460909090ff155a200000eb6de9dd1e000048b84801f4acaa2a000090ff154a20000050480bc6a801587503ff5570483bf0756d498b194889da488b5c24304889d0909090ff152a200000488b4c24404c8b3141f6c6017503ff55704d89f54983c50870f44c89295048b8d8e1f6acaa2a0000488b542458eb05e9701e00009090ff124c8b6424484d8b1c244c8b14244d89d94d23ca41f6c1017503ff5570eb05e9270000004d8d4bff4d03ca70ed48bb03000000000000004c89c890ff15ba1f0000488b54245890ff12eb7148b8e005edacaa2a00009090ff15a61f000050480bc6a801587503ff5570483bf07570498b194889da488b5c24304889d0909090ff15861f0000488b4c24404c8b3141f6c6017503ff55704d89f54983c50870f44c89295048b8f0e1f6acaa2a0000488b54245890ff124c8b642448eb05e9a81d00004d8b1c244c8b14244d89d94d23ca41f6c1017503ff55704d8d4bffeb05e9240000004d03ca70ed48bb03000000000000004c89c89090ff15161f0000488b54245890ff12eb6048b8480aefacaa2a00009090ff15021f000050480bc6a801587503ff5570483bf0756b498b19488b44243090ff15ea1e0000a8017503ff55704883f8017c0c48ba0300000000000000eb0a48ba01000000000000004883fa03750a4889c1eb15e9fd1c0000a8017503ff55704889c14883e90e70f448bb11000000000000004889c848baf02d600000000000eb05e9d500000090ff1248bb110000000000000048ba302e6000000000009090ff124883f8017502eb2ba8017503ff55704883f8017c0c49be0300000000000000eb0a49be01000000000000004983fe037402eb054989c6eb10a8017503ff55704989c64983c61070f4495648b808e2f6acaa2a0000488b54245890ff12488b442428488d542468ff150a1e000048b85900000000000000488b542458909090ff124d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b7424184c8970084c8b2c244c89289090ff15ce1d0000488b54245890ff12eb6e5648bb11000000000000004889f048ba302e600000000000ff124883f8017502eb2ba8017503ff55704883f8017c0c48bb0300000000000000eb0a48bb01000000000000004883fb037402eb054889c3eb10a8017503ff55704889c34883c31070f44883fb077560488b1c24eb05e9871b0000f6c3017503ff55704883fb7f7d75488b542448488b0a4889cb488b442438909090ff15321d0000a8017503ff55704883f8017c0c49be0300000000000000eb0a49be01000000000000004983fe03750a4989c5eb15e9d3010000a8017503ff55704989c54983ed0e70f448bb11000000000000004c89e848baf02d600000000000eb05e9a501000090ff1248bb110000000000000048ba302e6000000000009090ff124883f8017502eb2ba8017503ff55704883f8017c0c49bc0300000000000000eb0a49bc01000000000000004983fc037402eb054989c4eb10a8017503ff55704989c44983c41070f44c8b1c2441f6c3017503ff55704983fb017c0c49ba0300000000000000eb0a49ba01000000000000004983fa0375054d89d9eb1241f6c3017503ff55704d89d94983e90e70f4495448bb11000000000000004c89c848baf02d600000000000909090ff1248bb110000000000000048ba302e6000000000009090ff124883f8017502eb3ca8017503ff55704883f8017c0c49b80300000000000000eb0a49b801000000000000004983f8037413a8017503ff55704989c04983c01070f44c89c0488d54247090ff15aa1b000048b81300000000000000488b542460909090ff12488b442430488d542470ff158e1b000048b85900000000000000488b542460909090ff124d8d7fe84c3b7d107303ff554049c747f8020000004c89ff488b74242048897708488b1c2448891f4889f8909090ff154e1b0000488b54246090ff12eb5748b8a01ef4acaa2a00009090ff153a1b0000488b1c2453480bd8f6c3015b7503ff5570483bd87572488b542448488b0a4889cb488b442438ff15161b0000a8017503ff55704883f8017c1149be0300000000000000eb0fe9fa18000049be01000000000000004983fe0375054989c5eb10a8017503ff55704989c54983ed0e70f448bb11000000000000004c89e848baf02d600000000000eb05e9d900000090ff1248bb110000000000000048ba302e6000000000009090ff124883f8017502eb2ba8017503ff55704883f8017c0c49bc0300000000000000eb0a49bc01000000000000004983fc037402eb054989c4eb10a8017503ff55704989c44983c41070f4495448b808e2f6acaa2a0000488b54246090ff124d8d7fe84c3b7d107303ff554049c747f8020000004d89fc4c8b5c24204d895c24084c8b14244d8914244c89e090ff15121a0000488b54246090ff1248b85900000000000000488b542460909090ff12488b442430488d542470ff15ee190000eb6848b8482ef4acaa2a00009090ff15e219000053480bd8f6c3015b7503ff5570483bd87572488b542448488b0a4889cb488b442438ff15c2190000a8017503ff55704883f8017c0c49be0300000000000000eb0a49be01000000000000004983fe03750a4989c5eb15e971170000a8017503ff55704989c54983ed0e70f448bb11000000000000004c89e848baf02d600000000000eb05e9b102000090ff1248bb110000000000000048ba302e6000000000009090ff124883f8017502eb2ba8017503ff55704883f8017c0c49bc0300000000000000eb0a49bc01000000000000004983fc037402eb054989c4eb10a8017503ff55704989c44983c41070f4495448b820e2f6acaa2a0000488b54246090ff124c8b6424184983fc0174574c8b1c2441f6c3017503ff55704d89da4983c21070f448bbffffffffffffffff4c89d0ff15be1800004889c348b8e50000000000000090ff15b218000048bb8500000000000000ff15aa180000488b54246090ff12eb2b4c8b1c2449f7c30100000074234983fb017c224983fb0f7f2149ba1ac6f6acaa2a00004f8d549afc41ffe2e982010000e94d000000e948000000e943000000909090e951000000909090e95d000000909090e969000000909090e975000000909090e981000000909090e9ad000000909090e9e1000000909090e90a01000090909048b838e2f6acaa2a0000488b542460909090ff12eb6748b858e2f6acaa2a0000488b54246090ff12eb5848b870e2f6acaa2a0000488b54246090ff12eb7348b888e2f6acaa2a0000488b54246090ff12eb6448b8a0e2f6acaa2a0000488b54246090ff12eb554c8b4c24304983f901751648b8b8e2f6acaa2a0000eb14e9ae000000e9a900000048b8d0e2f6acaa2a0000488b542460ff12eb684c8b4c24304983f901751b48b8e8e2f6acaa2a0000eb19e97a000000e975000000e97000000048b800e3f6acaa2a0000488b542460909090ff12eb5a4c8b4c24304983f901750c48b818e3f6acaa2a0000eb0a48b830e3f6acaa2a0000488b5424609090ff12eb2ee9290000004c8b4c24304983f901750c48b848e3f6acaa2a0000eb0a48b860e3f6acaa2a0000488b54246090ff1248b85900000000000000488b542460909090ff12488b442430488d542470ff15d2160000eb6a48b878e3f6acaa2a00009090ff15c6160000534823d8f6c3015b7503ff5570483bd87c6448b890e3f6acaa2a00009090ff15aa160000534823d8f6c3015b7503ff5570483bd87f5748bb1100000000000000488b042448ba302e600000000000ff124883f8017507eb3ae923140000a8017503ff55704883f8017c1148ba0300000000000000eb0fe97700000048ba01000000000000004883fa037407eb0ae9600000004889c2eb10a8017503ff55704889c24883c21070f44d8d7fe84c3b7d107303ff554049c747f8020000004c89f9488b442408488941084889114889c8ff15021600004889c348b8a8e3f6acaa2a000090ff15f6150000488b54245890ff12eb6a48b8481ff4acaa2a00009090ff15e2150000534823d8f6c3015b7503ff5570483bd87c6448b8c0e3f6acaa2a00009090ff15c6150000534823d8f6c3015b7503ff5570483bd87f5748bb1100000000000000488b042448ba302e600000000000ff124883f8017507eb3ae91e130000a8017503ff55704883f8017c1148ba0300000000000000eb0fe97700000048ba01000000000000004883fa037407eb0ae9600000004889c2eb10a8017503ff55704889c24883c21070f44d8d7fe84c3b7d107303ff554049c747f8020000004c89f9488b442408488941084889114889c8ff151e1500004889c348b8d8e3f6acaa2a000090ff1512150000488b54245890ff12eb6e48b8380aefacaa2a00009090ff15fe14000053480bd8f6c3015b7503ff5570483bd8751448b8f0e3f6acaa2a0000488b54245890ff12eb5b48b8b01ef4acaa2a00009090ff15ce14000053480bd8f6c3015b7503ff5570483bd8756d488b542448488b0a4889cb488b442438eb05e91612000090ff15a6140000a8017503ff55704883f8017c1149be0300000000000000eb0fe9f111000049be01000000000000004983fe0375054989c5eb10a8017503ff55704989c54983ed0e70f448bb1100000000000000eb05e9e60000004c89e848baf02d60000000000090ff1248bb110000000000000048ba302e6000000000009090ff124883f8017502eb2ba8017503ff55704883f8017c0c49bc0300000000000000eb0a49bc01000000000000004983fc037402eb054989c4eb10a8017503ff55704989c44983c41070f4495448b808e4f6acaa2a0000488b54246090ff12488b442430488d542470ff15c613000048b85900000000000000488b542460909090ff124d8d7fe84c3b7d107303ff554049c747f8020000004d89fc4c8b5c24204d895c24084c8b14244d8914244c89e090ff1586130000488b54246090ff12eb6f48b820e4f6acaa2a00009090ff1572130000534823d8f6c3015b7503ff5570483bd87c6a48b838e4f6acaa2a00009090ff1556130000534823d8f6c3015b7503ff5570483bd87f6d48b808e2f6acaa2a0000488b54245890ff12488b5424204883fa017455488b4c2448488b01eb05e95d100000488b5c2438909090ff151213000048bb0300000000000000eb05e9fd00000090ff1502130000488b54245890ff124c8b7424484d8b2e41f6c5017503ff5570eb0ae9d6000000e90e0000004d89ec4983c41070e84d8926eb1548b80100000000000000488d542468ff15c212000048bb1100000000000000488b042448ba302e6000000000009090ff124883f8017502eb2ba8017503ff55704883f8017c0c48b90300000000000000eb0a48b901000000000000004883f9037402eb054889c1eb10a8017503ff55704889c14883c11070f44d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b7424084c8970084889089090ff153a1200004889c348b8590000000000000090ff152e120000488b54245890ff12eb6b48b850a9f4acaa2a00009090ff151a12000053480bd8f6c3015b7503ff5570483bd8755448b850e4f6acaa2a0000488b54245890ff12488b442428488d542468ff15ee11000048b85900000000000000488b542458909090ff1248b80100000000000000488d542468eb05e9d00e0000ff15c6110000eb6b48b860a9f4acaa2a00009090ff15ba11000053480bd8f6c3015b7503ff5570483bd8755448b870e4f6acaa2a0000488b54245890ff12488b442428488d542468ff158e11000048b85900000000000000488b542458909090ff1248b80100000000000000488d542468eb05e9580e0000ff1566110000eb6e48b8088af4acaa2a00009090ff155a11000053480bd8f6c3015b7503ff5570483bd8752c48b890e4f6acaa2a0000488b54245890ff1248b80100000000000000488d542468909090ff1526110000eb5848b8188af4acaa2a00009090ff151a11000053480bd8f6c3015b750aeb05e9dd0d0000ff5570483bd8753248b890e4f6acaa2a0000488b5424589090ff1248b80100000000000000488d542468909090ff15de100000eb57e9a30d000048b8a00cefacaa2a000090ff15ce10000053480bd8f6c3015b7503ff5570483bd87572488b542448488b0a4889cb488b442438ff15ae100000a8017503ff55704883f8017c1149be0300000000000000eb0fe94c0d000049be01000000000000004983fe0375054989c5eb10a8017503ff55704989c54983ed0e70f448bb11000000000000004c89e848baf02d600000000000eb05e9d100000090ff1248bb110000000000000048ba302e6000000000009090ff124883f8017502eb2ba8017503ff55704883f8017c0c49bc0300000000000000eb0a49bc01000000000000004983fc037402eb054989c4eb10a8017503ff55704989c44983c41070f44983fc05750c48b8a8e4f6acaa2a0000eb2e4983fc09750c48b8c0e4f6acaa2a0000eb1c4983fc0d750c48b8d8e4f6acaa2a0000eb0a48b8f0e4f6acaa2a0000488b54245890ff1248b81300000000000000488b542458909090ff12488b442428488d542468ff15860f0000eb6848b8201ff4acaa2a00009090ff157a0f000053480bd8f6c3015b7503ff5570483bd87572488b542448488b0a4889cb488b442438ff155a0f0000a8017503ff55704883f8017c0c49be0300000000000000eb0a49be01000000000000004983fe03750a4989c5eb15e9cb0b0000a8017503ff55704989c54983ed0e70f448bb11000000000000004c89e848baf02d600000000000eb05e94101000090ff1248bb110000000000000048ba302e6000000000009090ff124883f8017502eb2ba8017503ff55704883f8017c0c49bc0300000000000000eb0a49bc01000000000000004983fc037402eb054989c4eb10a8017503ff55704989c44983c41070f44983fc01750c48b808e5f6acaa2a0000eb5a4983fc07750c48b820e5f6acaa2a0000eb574983fc09750c48b838e5f6acaa2a0000eb454983fc0b750c48b850e5f6acaa2a0000eb334983fc0d750c48b868e5f6acaa2a0000eb214983fc0f751148b880e5f6acaa2a0000eb0fe90a00000048b8f0e4f6acaa2a00004954488b542460ff1248b81300000000000000488b542460909090ff12488b442430488d542470ff15f60d00004c8b24244983fc01756f48b85900000000000000488b54246090ff1248b80100000000000000488d542470909090ff15ca0d0000eb5a48b8a065f3acaa2a00009090ff15be0d000053480bd8f6c3015b7503ff5570483bd8756f488b542448488b0a4889cb488b442438ff159e0d0000a8017503ff5570eb05e9100a00004883f8017c1149be0300000000000000eb0fe9f909000049be01000000000000004983fe0375054989c5eb10a8017503ff55704989c54983ed0e70f448bb11000000000000004c89e8eb05e90001000048baf02d6000000000009090ff1248bb110000000000000048ba302e6000000000009090ff124883f8017502eb2ba8017503ff55704883f8017c0c49bc0300000000000000eb0a49bc01000000000000004983fc037402eb054989c4eb10a8017503ff55704989c44983c41070f44983fc01750c48b898e5f6acaa2a0000eb1c4983fc07750c48b8b0e5f6acaa2a0000eb0a48b8f0e4f6acaa2a00004954488b54246090ff1248b81300000000000000488b542460909090ff12488b442430488d542470ff157e0c00004c8b24244983fc01756f48b85900000000000000488b54246090ff1248b80100000000000000488d542470909090ff15520c0000eb5a48b8288af4acaa2a00009090ff15460c000053480bd8f6c3015b7503ff5570483bd8756f488b542448488b0a4889cb488b442438ff15260c0000a8017503ff5570eb05e9780800004883f8017c1149be0300000000000000eb0fe96108000049be01000000000000004983fe0375054989c5eb10a8017503ff55704989c54983ed0e70f448bb11000000000000004c89e8eb05e90801000048baf02d6000000000009090ff1248bb110000000000000048ba302e6000000000009090ff124883f8017502eb2ba8017503ff55704883f8017c0c49bc0300000000000000eb0a49bc01000000000000004983fc037402eb054989c4eb10a8017503ff55704989c44983c41070f44983fc09750c48b8c8e5f6acaa2a0000eb2e4983fc0b750c48b8e0e5f6acaa2a0000eb1c4983fc0f750c48b8f8e5f6acaa2a0000eb0a48b8f0e4f6acaa2a0000488b54245890ff1248b81300000000000000488b542458909090ff12488b442428488d542468ff15f60a000048b85900000000000000488b542458909090ff1248b80100000000000000488d542468909090ff15d20a0000eb6848b8101ff4acaa2a00009090ff15c60a000053480bd8f6c3015b7503ff5570483bd87572488b542448488b0a4889cb488b442438ff15a60a0000a8017503ff55704883f8017c0c49be0300000000000000eb0a49be01000000000000004983fe03750a4989c5eb15e9b2060000a8017503ff55704989c54983ed0e70f448bb11000000000000004c89e848baf02d600000000000eb05e9c100000090ff1248bb110000000000000048ba302e6000000000009090ff124883f8017502eb2ba8017503ff55704883f8017c0c49bc0300000000000000eb0a49bc01000000000000004983fc037402eb054989c4eb10a8017503ff55704989c44983c41070f44983fc0b750c48b8e0e5f6acaa2a0000eb1c4983fc0f750c48b8f8e5f6acaa2a0000eb0a48b8f0e4f6acaa2a0000488b542458909090ff1248b810e6f6acaa2a0000488b542458909090ff12488b442428488d542468ff158e090000eb6d48b86006edacaa2a00009090ff158209000053480bd8f6c3015b7503ff5570483bd8756f488b542448488b0a4889cb488b442438ff15620900004c8b7424484d8b2e41f6c5017503ff55704d89ec4983c40270f44d89264881f86d01000075764d8b1e4c89db488b442438eb05e9510500009090ff152a090000a8017503ff55704883f8017c1149ba0300000000000000eb0fe98d03000049ba01000000000000004983fa0375054989c1eb10a8017503ff55704989c14983e90e70f448bb11000000000000004c89c848baf02d600000000000eb05e9d900000090ff1248bb110000000000000048ba302e6000000000009090ff124883f8017502eb2ba8017503ff55704883f8017c0c49b80300000000000000eb0a49b801000000000000004983f8037402eb054989c0eb10a8017503ff55704989c04983c01070f4495048b828e6f6acaa2a0000488b54246090ff12488b442430488d542470ff154a08000048b85900000000000000488b542460909090ff124d8d7fe84c3b7d107303ff554049c747f8020000004d89f8488b7c242049897808488b34244989304c89c0909090ff150a080000488b54246090ff12eb70a8017503ff55704881f8010100007c65a8017503ff55704881f81f0100007f5a4d8b1e50488b5c24404c89d8ff15d60700004c8b5424504d8b0a41f6c1017503ff55704d89c84983c00870f44d8902488b3c2448f7c70100000074374881ff010100007c334881ff1f0100007f2feb0fe996030000e9c2010000e9bd01000048becad8f6acaa2a0000488db4befcfbffffffe6e98a000000e985000000e980000000e98a000000909090e973000000909090e9e8000000909090e9f9000000909090e979000000909090e980000000909090e9f5000000909090e906010000909090e93b000000909090e933000000909090e92b000000909090e923000000909090e957000000909090e95e000000909090e965000000909090e96c0000009090904889c348b840e6f6acaa2a0000eb694889c348b800e1f6acaa2a0000eb6e4889c348b8d0e0f6acaa2a0000eb644889c348b8e8e0f6acaa2a0000eb694889c348b818e1f6acaa2a0000eb6e4889c348b860e1f6acaa2a0000eb644889c348b848e1f6acaa2a0000eb674889c348b830e1f6acaa2a0000eb58e9530000004889c348b878e1f6acaa2a0000eb44e93f000000e93a0000004889c348b8c0e1f6acaa2a0000eb2be9260000004889c348b8a8e1f6acaa2a0000eb17e912000000e90d0000004889c348b890e1f6acaa2a000053488b542468ff12488b542458488b0a488b04244989ce4c23f041f6c6017503ff55704c8d71ff4c03f070f448bb03000000000000004c89f090ff15de050000488b54246890ff12eb2f5048b858e6f6acaa2a0000488b542460ff1248bb0300000000000000488b0424ff15b6050000488b54246090ff12504883c408eb6d48b8f821f4acaa2a000090ff159e05000053480bd8f6c3015b7503ff5570483bd8752448b8d8e3f6acaa2a0000488b54245890ff12488b442428488d542468ff1572050000eb7048b868a2f4acaa2a00009090ff156605000053480bd8f6c3015b7503ff5570483bd8751ceb05e92801000048b870e6f6acaa2a0000488b5424589090ff12eb7048b888e6f6acaa2a00009090ff152e05000053480bd8f6c3015b7503ff5570483bd8751c48b898e6f6acaa2a0000eb05e9dd000000488b5424589090ff12eb5848b878a2f4acaa2a00009090ff15f604000053480bd8f6c3015b7503ff5570483bd8753948b8b0e6f6acaa2a0000eb05e99d000000488b5424589090ff1248b80100000000000000488d542468909090ff15ba040000eb71e97500000048b8e836f4acaa2a000090ff15aa04000053480bd8f6c3015b7503ff5570483bd8752c48b8c8e6f6acaa2a0000488b54245890ff1248b80100000000000000488d542468909090ff1576040000eb2648bb0300000000000000488b04249090ff1566040000488b542458eb05e9040000009090ff12504883c408504883c408504883c408504883c4084883c4085048b81500000000000000488b5424589090ff124883c430483b65187303ff5548e94ed9ffff48b81500000000000000488b5424284883c438ff22909090|@4440,8191,@305,@3412,@3412,@3439,@3439,@3412,@4441,@4450,@3439,@4439,@4456,@3439,@4461,@3439,@4461,@3439,@4461,@3439,@4461,@3439,@4461,@3439,@4461,@3439,@4461,@3439,@4461,@3439,@4461,@3439,@4461,@3439,@4461,@3439,@4461,@3439,@3437,@305,@3439,@3437,@305,@3439,@3412,@4450,@3287,@3412,@4441,@4450,@3287,@3439,@3412,@3287,@4450,@3439,@3412,@305,@303,@303,@4450,@3439,@3439,@3287,@303,@3439,@3439,@3287,@303,@3439,@3439,@3412,@4450,@3287,@3439,@3439,@4463,@305,@4456,@3287,@303,@3439,@4450,@4456,@3439,@4450,@4439,@3439,@4456,@3439,@4439,@3439,@3412,@4450,@3439,@3412,@4450,@4456,@3439,@3412,@4450,@4439,@3439,@3412,@4450,@4439,@3439,@3412,@4450,@3439,@3412,@3412,@4450,@3287,@3437,@305,@305,@3439,@4450,@3439,@3439,@3439,@4465,@3439,@4439,@305|76,0,I48 90,0,I24 112,0,63 148,0,@4317 206,0,1 236,0,9 352,0,0 363,0,8 376,0,I115 394,0,1 406,0,0 424,0,4 439,0,I115 458,0,1 470,0,0 488,0,2 503,0,I115 522,0,1 534,0,0 553,0,1 568,0,I115 586,0,1 598,0,0 672,0,@3403 707,0,@217 773,0,1 785,0,0 822,0,8 835,0,I109 848,0,8 865,0,I110 901,0,1 913,0,0 960,0,@4318 996,0,44 1016,0,@3403 1053,0,0 1078,0,0 1102,0,@3628 1137,0,@4319 1156,0,0 1192,0,@3522 1225,0,@4320 1244,0,0 1275,0,@3493 1309,0,@4321 1328,0,0 1354,0,@3985 1396,0,@4322 1416,0,0 1447,0,@3986 1481,0,@4323 1500,0,0 1526,0,@4253 1568,0,@4324 1588,0,0 1619,0,@4256 1653,0,@4325 1672,0,0 1698,0,@4261 1740,0,@4326 1760,0,0 1791,0,@4264 1825,0,@4327 1844,0,0 1870,0,@4259 1912,0,@4328 1932,0,0 1963,0,@3676 1997,0,@4329 2016,0,0 2042,0,@3447 2084,0,@4330 2104,0,0 2135,0,@3460 2222,0,@4330 2292,0,1 2322,0,@193 2410,0,@4331 2479,0,1 2510,0,@1581 2573,0,1 2585,0,0 2627,0,8 2640,0,I109 2660,0,8 2670,0,I110 2705,0,1 2717,0,0 2758,0,@4332 2792,0,44 2871,0,8 2884,0,I110 2917,0,1 2929,0,0 3037,0,1 3049,0,0 3091,0,8 3104,0,I109 3124,0,8 3134,0,I110 3169,0,1 3181,0,0 3239,0,1 3251,0,0 3292,0,8 3305,0,I109 3320,0,8 3330,0,I110 3365,0,1 3377,0,0 3424,0,9 3460,0,44 3542,0,@3490 3617,0,1 3634,0,0 3671,0,8 3684,0,I109 3704,0,8 3714,0,I110 3749,0,1 3761,0,0 3802,0,@4332 3880,0,44 3918,0,@3514 3989,0,1 4001,0,0 4043,0,8 4056,0,I109 4076,0,8 4086,0,I110 4121,0,1 4133,0,0 4174,0,@4333 4225,0,-1 4247,0,114 4264,0,66 4315,0,$4316+4354 4420,0,@4334 4442,0,@4335 4462,0,@4336 4482,0,@4337 4502,0,@4338 4533,0,@4339 4555,0,@4340 4585,0,@4341 4612,0,@4342 4645,0,@4343 4657,0,@4344 4694,0,@4345 4706,0,@4346 4724,0,44 4762,0,@4347 4798,0,@4348 4834,0,8 4848,0,I110 4886,0,1 4903,0,0 4995,0,@4349 5022,0,@3498 5058,0,@4350 5094,0,8 5108,0,I110 5146,0,1 5163,0,0 5255,0,@4351 5282,0,@1580 5318,0,@4352 5338,0,@3491 5417,0,1 5434,0,0 5471,0,8 5491,0,I109 5504,0,8 5514,0,I110 5549,0,1 5561,0,0 5602,0,@4353 5636,0,44 5718,0,@4354 5754,0,@4355 5790,0,@4332 5848,0,1 5923,0,0 5944,0,8 5958,0,I110 5993,0,1 6005,0,0 6091,0,44 6118,0,@3677 6154,0,@4356 6188,0,44 6208,0,0 6238,0,@3678 6274,0,@4357 6308,0,44 6328,0,0 6358,0,@3621 6394,0,@4358 6412,0,0 6438,0,@3622 6481,0,@4358 6500,0,0 6531,0,@1598 6601,0,1 6618,0,0 6655,0,8 6668,0,I109 6688,0,8 6698,0,I110 6733,0,1 6745,0,0 6790,0,@4359 6808,0,@4360 6826,0,@4361 6838,0,@4362 6856,0,9 6894,0,@3496 6965,0,1 6977,0,0 7019,0,8 7032,0,I109 7052,0,8 7062,0,I110 7097,0,1 7109,0,0 7154,0,@4363 7172,0,@4364 7190,0,@4365 7208,0,@4366 7226,0,@4367 7244,0,@4368 7261,0,@4362 7280,0,9 7326,0,44 7344,0,0 7370,0,@3241 7448,0,1 7465,0,0 7502,0,8 7522,0,I109 7536,0,8 7546,0,I110 7581,0,1 7593,0,0 7638,0,@4369 7656,0,@4370 7668,0,@4362 7688,0,9 7734,0,44 7752,0,0 7778,0,@3623 7856,0,1 7873,0,0 7910,0,8 7930,0,I109 7944,0,8 7954,0,I110 7989,0,1 8001,0,0 8046,0,@4371 8064,0,@4372 8082,0,@4373 8094,0,@4362 8112,0,9 8148,0,44 8168,0,0 8194,0,@3495 8265,0,1 8277,0,0 8319,0,8 8332,0,I109 8352,0,8 8362,0,I110 8397,0,1 8409,0,0 8454,0,@4372 8472,0,@4373 8484,0,@4362 8504,0,@4374 8542,0,@198 8677,0,1 8694,0,0 8731,0,8 8744,0,I109 8764,0,8 8774,0,I110 8809,0,1 8821,0,0 8862,0,@4375 8896,0,44 9105,0,$4316+9138 9271,0,@4376 9286,0,@4321 9301,0,@4319 9316,0,@4320 9331,0,@4322 9346,0,@4325 9361,0,@4324 9376,0,@4323 9396,0,@4326 9421,0,@4329 9441,0,@4328 9466,0,@4327 9520,0,1 9551,0,@4377 9568,0,1 9603,0,@3505 9638,0,@4351 9674,0,@3664 9717,0,@4378 9738,0,@4379 9774,0,@4380 9802,0,@3665 9838,0,@4381 9864,0,0 9895,0,@3521 9930,0,@4382 9948,0,0 9974,0,1 10037,0,10 10074,0,10 4317:S2|3a0a 4318:S5|5f72657609 4319:S3|6a6509 4320:S4|6a6e6509 4321:S3|6a6f09 4322:S3|6a6c09 4323:S3|6a6709 4324:S4|6a6c6509 4325:S4|6a676509 4326:S3|6a6209 4327:S3|6a6109 4328:S4|6a6e6109 4329:S4|6a6e6209 4330:S4|6a6d7009 4331:S5|63616c6c09 4332:S5|6d6f766c09 4333:S5|6d6f766209 4334:S16|556e6b6e6f776e207265676973746572 4335:S3|25616c 4336:S3|25636c 4337:S3|25646c 4338:S3|25626c 4339:S3|256168 4340:S4|2573696c 4341:S3|256368 4342:S4|2564696c 4343:S3|256468 4344:S4|2562706c 4345:S3|256268 4346:S4|2573706c 4347:O2|18,0 4348:O2|18,7 4349:S6|707573686c09 4350:O2|-17,7 4351:S4|706f7009 4352:S3|6e6f70 4353:S5|6c65616c09 4354:O2|13,0 4355:O2|13,7 4356:S9|6d6f766c5f72657609 4357:S9|6d6f76625f72657609 4358:S5|7075736809 4359:S4|63616c6c 4360:S3|6a6d70 4361:S4|70757368 4362:S3|3f3f3f 4363:S5|746573746c 4364:S4|6e65676c 4365:S4|6d756c6c 4366:S5|696d756c6c 4367:S4|6469766c 4368:S5|696469766c 4369:S5|7465737462 4370:S4|6e656762 4371:S3|73686c 4372:S3|736872 4373:S3|736172 4374:S3|09312c 4375:S6|6d6f767a6c09 4376:S4|3f3f3f09 4377:S4|65736309 4378:S3|726574 4379:O1|-20 4380:S3|737463 4381:S4|72657409 4382:S10|74657374620925616c2c 4383:S27|414d443634434f4445434f4e5328292e636f7079436f6465283329 4384:C3,152|90909090909090483b65187303ff5548a8017503ff55704883f8017c6048f7c0010000007402eb1d49bef0e7f6acaa2a0000504923c6a801587503ff5570493bc67c02eb384c8b334d8b2e41f6c5017503ff55704d89ec4983c41070f44d892649b911000000000000004d89e84c8b5b104889c34c89d8ff254300000048b82002f4acaa2a0000ff555848b8010000000000000090909090|@4386,8191,@3635|42,0,@4385 98,0,8 127,0,@3462 140,0,0 4385:B16|00000000000000000100000000000000 4386:S25|414d443634434f4445434f4e5328292e67656e363475283229 4387:C2,320|90909090909090483b65187303ff55484883f801750b48b80100000000000000c3505348bb0102000000000000488b042448ba302e60000000000090ff124883f8017502eb2ba8017503ff55704883f8017c0c49be0300000000000000eb0a49be01000000000000004983fe037402eb054989c6eb13a8017503ff55704989c64981c60002000070f14c8b6c240841f6c5017503ff55704d89ec4983ec0270f44c8b1c2441f6c3017503ff55704983fb017c0c49ba0300000000000000eb0a49ba01000000000000004983fa0375054d89d9eb1541f6c3017503ff55704d89d94981e9fe01000070f14956495448bb01020000000000004c89c848baf02d600000000000ff124889c3488b0424e8f5feffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89f849894008488b7c24084989384c89c04883c420c39090|@4388,8191|24,0,0 37,0,256 51,0,I110 85,0,1 97,0,0 181,0,1 193,0,0 239,0,256 252,0,I109 4388:S38|414d443634434f4445434f4e5328292e636f7079436f64652833296765744279746573283229 4389:C2,96|90909090909090483b65187303ff55484883f8017508488b8260ffffffc35248ff30488b4008909090e8d9ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b04244889024889d04883c410c390909090909090|@1847,5| 4390:C2,96|90909090909090483b65187303ff55484883f8017508488b8260ffffffc35248ff30488b4008909090e8d9ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b04244889024889d04883c410c390909090909090|@1847,5| 4391:C5,472|90909090909090483b65187303ff55484989c448b820a9f4acaa2a0000909090ff15da010000498b142449be11000000000000004989d54d23ee41f6c5017503ff5570505248d1fa498d46ff48f7ea4c8d68015a5870e941f6c5017503ff55704d89ee4981c68000000070f141f6c6017503ff55704d89f54983c50a70f44989c34d89ea48b840a9f4acaa2a00009090ff15720100004989c448b8a00cefacaa2a000090ff15660100004d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48c742080100000048891a4d8d7fe84c3b7d107303ff554049c747f8020000004d89fe4989560849c706ab0000004d8d7fe84c3b7d107303ff554049c747f8020000004d89fd4d897508498945004d8d7fe84c3b7d107303ff554049c747f8020000004c89fb4c896b0848c703070000004d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48895a084c89224d8d7fe84c3b7d107303ff554049c747f8020000004c89f84889500848c700310000004d8d7fe84c3b7d107303ff554049c747f8020000004d89fe498946084d89164d8d7fe84c3b7d107303ff554049c747f8020000004d89fd4d8975084d895d004d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89680848c70091000000c3|@4392,7949,@3439,@3439,@3439|21,0,@3675 44,0,8 134,0,@3676 155,0,@1598 4392:S44|414d443634434f4445434f4e5328292e636f7079436f646528332974657374526567416e6454726170283229 4393:C2,96|90909090909090483b65187303ff55484883f8017508488b8260ffffffc35248ff30488b4008909090e8d9ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b04244889024889d04883c410c390909090909090|@1847,5| 4394:C2,376|90909090909090483b65187303ff5548a8017503ff55704883f8017d1b4989c548b840e3ecacaa2a000090ff555849be0100000000000000a8017503ff55704989c64983c60270f44989c54989dc49b8010000000000000048bb81000000000000004c89f048ba701560000000000090ff124c89284989c649554954495649b80100000000000000488b7c241049504c23c741f6c00149587503ff5570493bf87f02eb4f49504c89c0488b5424109090ff12488b342440f6c6017503ff55704889f34883c30270f4488b5424084889449afc40f6c6017503ff55704989f04983c00270f44883c408483b65187303ff5548eb95488b3424488b1e48ba01000000000000004883fb0175084889d04883c418c3488d4bfe488d43fea8017503ff55704989c64983c60270f44c8b2c244f8b64b5fc4d8d7fe84c3b7d107303ff554049c747f8020000004d89fb498953084d89234889cb4c89da483b65187303ff5548eba148b801000000000000004883c418c3909090909090|@4395,8191|34,0,@69 48,0,0 80,0,0 90,0,64 103,0,I11 128,0,0 252,0,0 357,0,0 4395:S16|4c6973742e746162756c617465283229 4396:C2,96|90909090909090483b65187303ff55484883f8017508488b8260ffffffc35248ff30488b4008909090e8d9ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b04244889024889d04883c410c390909090909090|@1847,5| 4397:C6,304|90909090909090483b65187303ff55484983f801750b48b80100000000000000c34d8b3041f6c6017503ff55704d89f54983ed0270f45053495649ff700848ff70104c89eb488b0424909090ff150601000050488b5c2408488b442418909090ff15fa0000004c8b6424204c8b5c24184d89e24d23d341f6c2017503ff55704d89e24d2bd34d8d520170f141f6c2017503ff55704d89d14983e90870f44989c048b8e005edacaa2a00009090ff15b6000000488b3c2450480bc7a801587503ff5570483bf8740f48b808f2f6acaa2a00009090ff55584983f801740e48b868f2f6acaa2a000090ff55584983f901750e48b8c0f2f6acaa2a000090ff55584c8b4424084c89db4c89c8909090ff155e0000004c8b442410488b5c2420488b4424284883c430e9ddfeffff909090909090|@4404,8191,@3412,@3437,@3439,@3410|24,0,0 162,0,@193 201,0,@4398 222,0,@4400 242,0,@4402 4398:O3|@7377,@215,@4399 4399:S41|66697852656375727369766543616c6c733a206e6f7420612063616c6c20696e737472756374696f6e 4400:O3|@7377,@215,@4401 4401:S34|66697852656375727369766543616c6c733a20616c72656164792070617463686564 4402:O3|@7377,@215,@4403 4403:S30|66697852656375727369766543616c6c733a207a65726f206f6666736574 4404:S36|414d443634434f4445434f4e5328292e66697852656375727369766543616c6c73283329 4405:C6,576|90909090909090483b65187303ff55484983f801750b48b80100000000000000c34d8b304d8b2e4d8b65004983fcff756e505349ff700848ff701049ff7508488b1c24488b442408ff151a020000a8017503ff55704881f8010100007c27a8017503ff55704989c24981eafe01000070f141f6c2017503ff55704d89d34983eb0270f4eb034989c34c8b5424184c8b0c244d89d04d23c141f6c001750aeb05e9dc000000ff55704d89d04d2bc14d8d400170ea41f6c0017503ff55704c89c74883ef0270f44983fb01740f48b8e0f5f6acaa2a00009090ff555840f6c7017503ff55704881ff01ffffff7c6d40f6c7017503ff55704881ff010100007d6040f6c7017503ff55704883ff017d1740f6c7017503ff55704889fe4881c60002000070f1eb034889fe48f7c60100000074054889f3eb1248f646ff10488b1e740348f7db488d5c1b014889de4881e6ff0100004989f04c89cbeb0ae912000000e90d000000488b442408ff1502010000eb7648b838f6f6acaa2a000090ff5558eb6b505349ff700848ff701049ff7508488b5c2408488b042490ff15da0000004c8b5c24184c8b14244d89d94d23ca41f6c1017503ff55704d89d94d2bca4d8d490170f141f6c1017503ff55704d89c84983e80870f44883f801741c48b8e0f5f6acaa2a0000eb0ae937000000e932000000909090ff55584983f80174184c89c74c8b4424084c89d34889f89090ff156e000000eb0e48b890f6f6acaa2a000090ff55584c8b442410488b5c2418488b4424204883c428e9cdfdffff909090909090|@4412,8191,@3412,@3416,@3437,@3410|24,0,0 205,0,@4406 370,0,@4408 476,0,@4406 534,0,@4410 4406:O3|@7377,@215,@4407 4407:S37|6669785265637572736976654272616e636865733a20616c72656164792070617463686564 4408:O3|@7377,@215,@4409 4409:S38|6669785265637572736976654272616e636865733a206272616e636820746f6f206c61726765 4410:O3|@7377,@215,@4411 4411:S33|6669785265637572736976654272616e636865733a207a65726f206f6666736574 4412:S39|414d443634434f4445434f4e5328292e6669785265637572736976654272616e63686573283329 4413:C3,176|90909090909090483b65187303ff55484883f801750b48b80100000000000000c34c8bb230ffffff4d8b2e4c8b2049f7c40100000074054d89e3eb1449f64424ff104d8b1c24740349f7db4f8d5c1b014d89da4981e2ff0100005248ff700849554d89d04c89eb488b8238ffffff9090ff15620000004c8b4c24104c8b042441f6c0017503ff55704c89c74883c70270f4498bb130ffffff48893e488b4424084c89ca4883c418e95bffffff90909090|@4414,8191,@3416|24,0,0 4414:S44|414d443634434f4445434f4e5328292e636f7079436f64652833297075745072656c7564654c697374283129 4415:C5,520|90909090909090483b65187303ff55484c8b30498b064883f803755b4d8b6e084d8b65f849c1e40849c1ec084f8d64240141f6c4017503ff55704983fc017d2449bad802edacaa2a00004d89d34d23dc41f6c3017503ff55704d8d5aff4d03dc70f4eb034d89e3f6c3017503ff55704883fb017d07eb1ce97401000049534c23db41f6c301495b7503ff55704c3bdb7e02eb6d49534989da48bbffffffffffffffff4c89d0909090ff15820100005048bbffffffffffffffff488b4424089090ff15720100004d8d7fe84c3b7d107303ff554049c747f8020000004d89f949c74108010000004989014d8d7fe84c3b7d107303ff554049c747f802000000eb05e9b30000004d89f84d89480848bf28ddf3acaa2a00004989384d8d7fe84c3b7d107303ff554049c747f8020000004c89fe4c894608488b1c2448891e4d8d7fe84c3b7d107303ff554049c747f8020000004c89f84889700848baa8faf6acaa2a0000488910909090ff15d20000004d8d7fe04c3b7d107303ff554049c747f8030000004c89f94889411048b8280aedacaa2a00004889410849bef8e36cadaa2a00004c89314889c8909090ff555848b8010000000000000048f7c30100000074054989dbeb1a48b86055edacaa2a0000909090ff555849bb01000000000000004f89449dfc48b80100000000000000c348b8d0faf6acaa2a000090ff555848b80100000000000000|@4419,8191,@305,@305,@331|66,0,@167 154,0,-1 177,0,-1 270,0,@3413 346,0,@4416 396,0,@215 410,0,@7377 432,0,0 456,0,@336 472,0,0 487,0,0 498,0,@4417 512,0,0 4416:S19|63736567507574576f72643a20496e64657820 4417:O3|@7377,@215,@4418 4418:S41|63736567507574576f72643a206e6f7420616e20756e6c6f636b656420636f6465207365676d656e74 4419:S23|434f44455f5345472e63736567507574576f7264283329 4420:C2,160|90909090909090483b65187303ff55484c8b68084983fd01752b4c8b2041f6c4017503ff55704983fc0d7c1441f6c4017503ff55704d89e64983ee0470f4eb1a4d89e6eb154c8b2041f6c4017503ff55704d89e64983c60c70f449f7c60100000074054d89f3eb1249f646ff104d8b1e740349f7db4f8d5c1b014989de4c89db48b8030000000000000048baf04f600000000000ff124989c54d0bee4c89e8c3|@4421,7695|130,0,1 140,0,I245 4421:S39|414d443634434f4445434f4e5328292e636f7079436f6465283329656e636f6465526567283229 4422:C4,400|90909090909090483b65187303ff55484d8b304983fe037546524989c14d8b4008488b42f8909090ff158a0100004c8b2c244d8b65884d8b1c2441f6c3017503ff55704d89da4983ea0270f44d89142448b801000000000000004883c408c34983feff756d4d8b68084d8b65004c8b9a50ffffff49ba11000000000000004d89d94d23ca41f6c1017503ff557050524c89da48d1fa498d42ff48f7ea4c8d48015a5870e64c89e74923f940f6c7017503ff5570498d7c24ff4903f970f3488bb238ffffff488b0e4c8b114983fa017524eb05e9a90000004989c148b8d06ef4acaa2a0000909090ff555849bc01000000000000004c8b610848f7c70100000074054989f9eb1d4989c148b86055edacaa2a0000ff55584c89cf49b901000000000000004889d750534c89cb4c89e048ba7048600000000000ff12574c8b4c24104989c0488b5c2408488b47f8ff156e000000488b3424488b5e88488b13f6c2017503ff55704889d14883e90270f448890b48b801000000000000004883c418c348b80100000000000000c39090909090|@4426,8191,@4423,@4423|82,0,0 118,0,8 220,0,@3617 236,0,0 267,0,@336 283,0,0 304,0,I215 371,0,0 386,0,0 4423:C6,472|90909090909090483b65187303ff55484c8b304d8b2e4c8b60204d8b1c244c8b5040498b3a48f7c7010000007505488b37eb1948b87000f7acaa2a00009090ff555848be010000000000000048bf11000000000000004c89da4823d7f6c2017503ff5570504c89da48d1fa488d47ff48f7ea488d50015870e84889df4823fa40f6c7017503ff5570488d7bff4803fa70f44983f901751649b901000000000000004889fb4889f0ff25530100004983f9ff751649b903000000000000004889fb4889f0ff253f010000498b194c89da4823d3f6c2017503ff5570498d53ff4803d370f4f6c2017503ff55704889d14883e90270f4f6c1017503ff55704989cb4983c30470f441f6c3017503ff55704c89da4883c20270f4f6c2017503ff55704889d14883c10270f449bb11000000000000004889ca4923d3f6c2017503ff5570504889ca48d1fa498d43ff48f7ea488d50015870e84c89e94823caf6c1017503ff5570498d4dff4803ca70f456575149b901000000000000004889cb4889f090ff158a000000488b04244c8b7424084989c54d23ee41f6c5017503ff55704989c54d2bee4d8d6d0170f141f6c5017503ff55704d89ec4983ec0870f44c8b4424104c89f34c89e04883c418ff254700000090909090909090|@4431,8191,@4427,@4427,@4427,@3410|53,0,@4424 68,0,0 78,0,8 153,0,0 181,0,1 298,0,8 369,0,0 4424:O3|@7377,@215,@4425 4425:S5|7363536574 4426:S38|414d443634434f4445434f4e5328292e636f7079436f6465283329707574436f6e7374283329 4427:C5,576|90909090909090483b65187303ff55484c8b30498b064883f803756e4d8b6e084d8b65f849c1e40849c1ec084f8d64240141f6c4017503ff55704983fc017d2449bad802edacaa2a00004d89d34d23dc41f6c3017503ff55704d8d5aff4d03dc70f4eb034d89e349ba11000000000000004d89d44d23e341f6c4017503ff557050524c89d248d1faeb05e993010000498d43ff48f7ea4c8d60015a5870dff6c3017503ff55704883fb017d02eb1749544c23e341f6c401495c7503ff55704c3be37e02eb6e49534989da48bbffffffffffffffff4c89d090ff158a0100005048bbffffffffffffffff488b4424089090ff157a0100004d8d7fe84c3b7d107303ff554049c747f8020000004d89f949c74108010000004989014d8d7fe84c3b7d107303ff554049c747f8020000004d89f8eb05e9b00000004d89480848bf28ddf3acaa2a00004989384d8d7fe84c3b7d107303ff554049c747f8020000004c89fe4c894608488b1c2448891e4d8d7fe84c3b7d107303ff554049c747f8020000004c89f84889700848ba7003f7acaa2a0000488910909090ff15da0000004d8d7fe04c3b7d107303ff554049c747f8030000004c89f94889411048b8280aedacaa2a00004889410849bef8e36cadaa2a00004c89314889c8909090ff555848b8010000000000000048f7c30100000074054989dbeb1a48b86055edacaa2a0000909090ff555849bb01000000000000004c89db4c89e848ba3043600000000000ff2248b89803f7acaa2a0000909090ff555848b8010000000000000090909090|@4432,8191,@305,@305,@331|66,0,@167 105,0,8 204,0,-1 225,0,-1 318,0,@3413 394,0,@4428 444,0,@215 458,0,@7377 480,0,0 504,0,@336 520,0,0 536,0,I194 548,0,@4429 564,0,0 4428:S23|63736567507574436f6e7374616e743a20496e64657820 4429:O3|@7377,@215,@4430 4430:S45|63736567507574436f6e7374616e743a206e6f7420616e20756e6c6f636b656420636f6465207365676d656e74 4431:S30|414d443634434f4445434f4e5328292e636f6e73744c6162656c73283429 4432:S27|434f44455f5345472e63736567507574436f6e7374616e74283429 4433:C3,104|90909090909090483b65187303ff55484c8b70584d8b2e53504983fd01750f48b801000000000000004883c410c349ff7508498b4500488d54241890ff154e0000004c8b2c244883c408483b65187303ff5548ebc448b801000000000000004883c418c390909090|@4435,8191,@4434|33,0,0 87,0,0 4434:C3,312|90909090909090483b65187303ff55484c8b70184d8b2e4c8b60404d8b1c2448ff7070525049534983fd017502eb324d8b550049ff75084d8b4210498b5a08498b02488d54242890ff15120100004c8b2c244883c408483b65187303ff5548ebc64c8b5424184d8b0a4983f901756e4c8b042449f7c0010000007505498b38eb1748b87000f7acaa2a0000ff555848bf0100000000000000488b37488b1e4883fb0375675748ff760848bb0500000000000000488b042448bab044600000000000909090ff124d8d7fe84c3b7d107303ff554049c747f802000000eb05e9420000004c89fa488b0c2448894a0848c702ffffffff488b44240848891048b801000000000000004883c430c348b860a8f6acaa2a00009090ff555848b8010000000000000048b801000000000000004883c420c39090909090|@4437,8191,@4436|131,0,@4424 144,0,0 171,0,2 185,0,I200 254,0,0 269,0,@4295 284,0,0 294,0,0 4435:S31|414d443634434f4445434f4e5328292e6669784f7468657252656673283229 4436:C3,144|90909090909090483b65187303ff55484d8b304983fe01755c4c8b6af04d8b60084d8b5df04d8b5424204d8b4b204d3bd17547524989c14d8b45f8488b42e890ff15720000004c8b0424498b78f8488b3740f6c6017503ff55704889f34883eb0270f448891f48b801000000000000004883c408c3e90b00000048b80100000000000000c348b80100000000000000c3|@4438,8191,@4423|104,0,0 124,0,0 135,0,0 4437:S40|414d443634434f4445434f4e5328292e6669784f7468657252656673283229666978526566283129 4438:S51|414d443634434f4445434f4e5328292e6669784f7468657252656673283229666978526566283129707574436f6e7374283329 4439:C4,168|90909090909090483b65187303ff5548488b42e04c8b30524c89f3488b42d090ff15aa000000a8017503ff55704881f8010100007c27a8017503ff55704989c44981ecfe01000070f141f6c4017503ff55704d89e54983ed0270f4eb034989c54c8b24244d8b5c24e04d8b1341f6c2017503ff55704d89d14983c10270f44d890b49ff7424f048bb03000000000000004c89e890ff153e000000488b14244883c410ff2290909090|@4467,8191,@3412,@305|136,0,1 4440:S28|414d443634434f4445434f4e5328292e7072696e74436f6465283329 4441:C2,168|90909090909090483b65187303ff55484883f801750c48b8f809f7acaa2a0000eb5a4883f803750c48b8100af7acaa2a0000eb5f4883f805750c48b8280af7acaa2a0000eb5c4883f807750c48b8400af7acaa2a0000eb4a4883f809750c48b87837eeacaa2a0000eb384883f80b751148b8580af7acaa2a0000eb26e9210000004883f80d751148b8700af7acaa2a0000eb0fe90a00000048b8880af7acaa2a0000488b52f0ff22|@4449,8191|24,0,@4442 42,0,@4443 60,0,@4444 78,0,@4445 96,0,@1208 114,0,@4446 137,0,@4447 154,0,@4448 4442:S3|616464 4443:S2|6f72 4444:S3|616463 4445:S3|736262 4446:S3|737562 4447:S3|786f72 4448:S3|636d70 4449:S41|414d443634434f4445434f4e5328292e7072696e74436f64652833297072696e744172697468283129 4450:C17,1600|90909090909090483b65187303ff55484c8b72e04d8b2e52504c89eb488b42d0ff15420600004c8b6424084d8b5c24e04d8b1341f6c2017503ff55704d89d14983c10270f44d890ba8017503ff55704883f8017c0c49b80300000000000000eb0a49b801000000000000004983f80375054889c7eb10a8017503ff55704889c74883ef7e70f45048bb81000000000000004889f848baf02d6000000000009090ff125048bb1100000000000000488b44240848ba302e600000000000ff124883f8017502eb2ba8017503ff55704883f8017c0c48be0300000000000000eb0a48be01000000000000004883fe037402eb054889c6eb10a8017503ff55704889c64883c61070f45648bb0500000000000000488b44241848ba702f600000000000ff124883f801750c48be0300000000000000eb0a48be01000000000000004889f34883f3025348bb0300000000000000488b44242048ba702f60000000000090ff124883f801750c48ba0300000000000000eb0a48ba01000000000000004889d14883f102488b4424104883f80775444c8b7424284d8d7fe84c3b7d107303ff554049c747f8020000004d89fd49894d084c8b6424084d89650049ff76f04c89e8909090ff15a6040000488b14244883c438ff224c8b7424084983fe0975554c8b6c24284d8b65e04d8b1c24514c89db498b45d0ff157e0400004c8b5424304d8b4ae04d8b0141f6c0017503ff55704c89c74883c70270f4498939a8017503ff55704883f8017c1148be0300000000000000eb0fe90503000048be01000000000000004883fe0375054889c3eb10a8017503ff55704889c34883eb7e70f4504889da48bb81000000000000004889d048baf02d600000000000909090ff12488b0c24f6c1017503ff55704883f9017c0c49be0300000000000000eb0a49be01000000000000004983fe0375054989cdeb11f6c1017503ff55704989cd4983ed0e70f45048bb11000000000000004c89e848baf02d6000000000009090ff1248bb110000000000000048ba302e6000000000009090ff124883f8017502eb2ba8017503ff55704883f8017c0c49bc0300000000000000eb0a49bc01000000000000004983fc037402eb054989c4eb10a8017503ff55704989c44983c41070f4495448bb1100000000000000488b44241048ba302e600000000000909090ff124883f8017502eb2ba8017503ff55704883f8017c0c49bc0300000000000000eb0a49bc01000000000000004983fc037402eb054989c4eb10a8017503ff55704989c44983c41070f44c8b5c24304983fb03751b495448b80100000000000000488b5424509090ff15b6020000eb2e4983fb057502eb084983fc0b7402eb1c495448b80100000000000000488b542450909090ff1592020000eb0249544c8b54245048b85100000000000000498b52f0909090ff124c8b4c24384983f9017402eb0c4c8b04244983f80b7502eb454c8b4424504d8d7fe84c3b7d107303ff554049c747f8020000004c89ff488b74242048897708488b1c2448891f49ff70f04889f890ff152a020000488b14249090ff12eb0150488b7c24104883ff097461488b7424584d8d7fe84c3b7d107303ff554049c747f8020000004c89fb488b5424304889530848893b48ff76f04889d8ff15e60100004889c348b8590000000000000090ff15da0100004c8b7424204983fe01751148b9d011f7acaa2a0000eb33e9420000004983fe03750c48b9e811f7acaa2a0000eb1c4983fe05750c48b90012f7acaa2a0000eb0a48b91812f7acaa2a00004889cb90ff158e010000488b14249090ff12eb0150488b74246048b85300000000000000488b56f04883c468ff224883f80175504983fe0b754a4c8b6c242848b83012f7acaa2a0000498b55f0909090ff1248b80100000000000000488b542428909090ff15360100004c8b64242848b85300000000000000498b5424f04883c430ff224883f803751a5148b80100000000000000488b5424309090ff1506010000eb214883f805751a5148b80100000000000000488b5424309090ff15ee000000eb01514c8b6c24304d8d7fe84c3b7d107303ff554049c747f8020000004d89fc4c8b1c244d895c24084c8b5424104d89142449ff75f04c89e090ff15b60000004889c348b8510000000000000090ff15aa00000048bb5300000000000000ff15a2000000488b14244883c440ff22|@4457,8191,@3412,@3287,@3412,@4439,@4456,@3287,@3287,@303,@303,@4456,@4439,@4456,@3287,@303,@303|87,0,1 99,0,0 137,0,64 150,0,I109 165,0,8 180,0,I110 213,0,1 225,0,0 265,0,2 280,0,I115 298,0,1 310,0,0 328,0,1 343,0,I115 362,0,1 374,0,0 554,0,1 571,0,0 612,0,64 625,0,I109 658,0,1 670,0,0 709,0,8 722,0,I109 736,0,8 746,0,I110 781,0,1 793,0,0 834,0,8 849,0,I110 885,0,1 897,0,0 949,0,0 992,0,0 1025,0,40 1207,0,44 1235,0,@4451 1258,0,@4452 1276,0,@4453 1288,0,@4454 1324,0,41 1361,0,@4455 1380,0,0 1409,0,41 1437,0,0 1469,0,0 1559,0,40 1576,0,41 4451:S2|2c31 4452:S2|2c32 4453:S2|2c34 4454:S2|2c38 4455:S6|28257269702b 4456:C5,176|90909090909090483b65187303ff5548488b42e04c8b3052488b5ad04c89f090ff15b20000004c8b2c244d8b65e04d8b1c2441f6c3017503ff55704d89da4983c20870f44d8914244883f803753d4d8b4dd84d8b014983f8017430498b3c2440f6c7017503ff55704889fe4883ee0870f45056498b5df8488b03488d54241890ff155a0000004883c418c349ff75f048bb0300000000000000909090ff1546000000488b14244883c410ff2290909090|@4459,8191,@3437,@4458,@305|145,0,1 4457:S38|414d443634434f4445434f4e5328292e7072696e74436f64652833297072696e744541283129 4458:C4,256|90909090909090483b65187303ff55484883f80175264c8b72f849ff76f048bb0300000000000000488b42f0ff15f6000000488b14244883c408ff224c8b304d8b6e104d8b65004983fc01756d4d8b5d084c8b52f84d8b4ae84d8b0148bf09000000000000004c89c64823f740f6c6017503ff557050524c89c248d1fa488d47ff48f7ea488d70015a5870e6498b5e084889d94823cef6c1017503ff5570488d4bff4803ce70f44c8b42e849504c0bc141f6c0014958750aeb05e936000000ff55704c3bc1752549ff72f0498b5b2848b87b00000000000000909090ff154e000000488b14244883c408ff22488b4008e912ffffff488b4008e909ffffff9090|@4460,8191,@305,@303|32,0,1 94,0,4 209,0,61 4459:S38|414d443634434f4445434f4e5328292e7072696e74436f64652833297072696e743332283129 4460:S48|414d443634434f4445434f4e5328292e7072696e74436f64652833297072696e74333228312966696e64526566283129 4461:C4,192|90909090909090483b65187303ff5548488b42e04c8b30524c89f3488b42d090ff15c2000000a8017503ff55704881f8010100007c27a8017503ff55704989c44981ecfe01000070f141f6c4017503ff55704d89e54983ed0270f4eb034989c54c8b24244d8b5c24e04d8b1341f6c2017503ff55704d89d14983c10270f44d890b4d8b034c89ef4923f840f6c7017503ff5570498d7dff4903f870f449ff7424f048bb03000000000000004889f89090ff153a000000488b14244883c410ff22|@4462,8191,@3412,@305|163,0,1 4462:S39|414d443634434f4445434f4e5328292e7072696e74436f64652833297072696e744a6d70283129 4463:C10,880|90909090909090483b65187303ff554850534889c3488b0424909090ff15760300004c8b74240841f6c6017503ff55704d89f54983c50270f4504c89eb488b4424089090ff15560300004c8b64241041f6c4017503ff55704d89e34983c30470f4504c89db488b4424109090ff15360300004c8b54241841f6c2017503ff55704d89d14983c10670f4504c89cb488b4424189090ff15160300004c8b44242041f6c0017503ff55704c89c74883c70870f4504889fb488b4424209090ff15f6020000488b74242840f6c6017503ff55704889f34883c30a70f450488b44242890ff15da020000488b542430f6c2017503ff55704889d14883c10c70f4504889cb488b442430909090ff15ba0200004c8b74243841f6c6017503ff55704d89f54983c50e70f4504c89eb488b4424389090ff159a020000a8017503ff55704881f8010100007c15a8017503ff55704989c44981ec0002000070f1eb034989c449bb01020000000000004d89e24d23d341f6c2017503ff557050524c89e248d1fa498d43ff48f7ea4c8d50015a5870e64c8b0c244d89d04d23c141f6c0017503ff55704d8d42ff4d03c170f448bf01020000000000004c89c64823f740f6c6017503ff557050524c89c248d1fa488d47ff48f7ea488d70015a5870e6488b5c24084889f24823d3f6c2017503ff5570488d56ff4803d370f448b901020000000000004889d04823c1a8017503ff55705248d1fa488d41ff48f7ea488d40015a70eb4c8b7424104989c54d23ee41f6c5017503ff55704c8d68ff4d03ee70f449bc01020000000000004d89eb4d23dc41f6c3017503ff557050524c89ea48d1fa498d4424ff48f7ea4c8d58015a5870e54c8b5424184d89d94d23ca41f6c1017503ff55704d8d4bff4d03ca70f449b801020000000000004c89cf4923f840f6c7017503ff557050524c89ca48d1fa498d40ff48f7ea488d78015a5870e6488b7424204889fb4823def6c3017503ff5570488d5fff4803de70f448ba01020000000000004889d94823caf6c1017503ff55705052488d43ff48d1fa48f7ea488d48015a5870e9488b4424284989ce4c23f041f6c6017503ff55704c8d71ff4c03f070f449bd01020000000000004d89f44d23e541f6c4017503ff557050524c89f248d1fa498d45ff48f7ea4c8d60015a5870e64c8b5c24304c89e04923c3a8017503ff5570498d4424ff4903c370f34883c448c3|@4464,8191,@3412,@3412,@3412,@3412,@3412,@3412,@3412,@3412|352,0,256 428,0,256 504,0,256 574,0,256 652,0,256 728,0,256 801,0,256 4464:S25|414d443634434f4445434f4e5328292e676574363473283229 4465:C5,272|90909090909090483b65187303ff5548488b42e04c8b3052495648ff72d04c89f3488b0424909090ff150a0100004c8b6c240841f6c5017503ff55704d89ec4983c40270f4504c89e3488b4424089090ff15ea000000a8017503ff55704881f8010100007c15a8017503ff55704989c34981eb0002000070f1eb034989c349ba01020000000000004d89d94d23ca41f6c1017503ff557050524c89da48d1fa498d42ff48f7ea4c8d48015a5870e64c8b04244c89cf4923f840f6c7017503ff5570498d79ff4903f870f4488b742418488b5ee0488b13f6c2017503ff55704889d14883c10470f448890b48ff76f048bb03000000000000004889f890ff1546000000488b14244883c428ff2290909090|@4466,8191,@3412,@3412,@305|128,0,256 240,0,1 4466:S38|414d443634434f4445434f4e5328292e7072696e74436f64652833297072696e743136283129 4467:S37|414d443634434f4445434f4e5328292e7072696e74436f64652833297072696e7438283129 4468:C3,32|90909090909090483b65187303ff5548488b5a08ff252e000000909090909090|@3341,8191,@3263| 4469:C4,176|90909090909090483b65187303ff55484c8b2b4983fdff750b4c8b63084d8b742410eb104983fd0375064c8b7310eb044c8b73084d8b264983fcf775334d8d7ff04c3b7d107303ff554049c747f8010000004d89fb49891b5250534d89d8498b5e08488b42109090ff156a000000eb035250534c8b5c24104d8d7ff04c3b7d107303ff554049c747f8010000004d89fa4c8b0c244d890a4d89d0488b5c2408498b43084883c418ff2533000000909090|@4470,8191,@3276,@3276| 4470:S45|434f44455452454528292e67656e436f6465283229696e736572746564436f64652d656e746572446563283229 4471:C5,240|90909090909090483b65187303ff55484c8b72204983fe0174705050505050505052504c8d442410488b5a1848b89b000000000000009090ff15da0000004d8d7fc04c3b7d107303ff554049c747f8070000004d89fd4c8b6424104d8965004c8b5c24184d895d084c8b5424204d8955104c8b4c24284d894d184c8b4424304d894520488b7c2438eb05e92900000049897d28488b742440498975304c89eb488b042448bac827edacaa2a0000909090ff156a000000eb095050505050505052504c8b6c2408488b1c24498b4508498b55109090ff124c8b6424084889c3498b4424084883c448ff253b000000909090|@4477,8191,@359,@260,@4472|46,0,77 165,0,@258 4472:C3,728|90909090909090483b65187303ff55484c8b334983fefb75044889d8c34983fe09756e505348ff7308488b5b10e8d5ffffff488b184883fbed75054883c418c34883fbfb75504c8b700849f7c601000000741948b85822f7acaa2a00009090ff555848ba010000000000000049f7c601000000741748b8b055edacaa2a0000ff555848ba01000000000000004c89f2eb1fe99901000048b8a822f7acaa2a0000909090ff555848ba0100000000000000524c8b6c24084983fd01756e48ff750849bc7e20f7acaa2a000049546a01488965084d8d7fe84c3b7d107303ff554049c747f8020000004c89f848c740080100000048891048bab04560000000000090ff124989c34d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89580848c700fbffffffeb05e94c00000048ff742410488f45084883c438c3904c8b104983fa03752a48b858d4ecacaa2a00009090ff555848b80100000000000000eb0f48b801000000000000004883c420c3488b4424104883c420c349bc01000000000000004983fd0175054d89e3eb2e41f6c4017503ff55704d89e24983c20270f44d8b6d084d89d4483b65187303ff5548ebd149bb010000000000000049f7c30100000074054d89daeb1848b86055edacaa2a000090ff555849ba010000000000000049b8010000000000000048bb81000000000000004c89d048ba7015600000000000909090ff124989c0488b5c240848b80100000000000000488d542420909090ff15d60000004883c420c3534989c54889d84c89ea909090ff1248ff750849bcda21f7acaa2a000049546a01488965084989c348b801000000000000004c89daff124989c24d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89500848c700fbffffff48ff742410488f45084883c420c34c8b084983f903752a48b858d4ecacaa2a00009090ff555848b80100000000000000eb0f48b801000000000000004883c408c3488b04244883c408c39090|@4482,8191,@4478|85,0,@4473 100,0,0 119,0,@339 132,0,0 152,0,@4475 168,0,0 194,0,$4472+318 247,0,I204 329,0,@45 344,0,0 356,0,0 381,0,0 438,0,0 462,0,@336 476,0,0 486,0,0 496,0,64 509,0,I11 532,0,0 580,0,$4472+666 601,0,0 677,0,@45 692,0,0 704,0,0 4473:O3|@7377,@215,@4474 4474:S30|436f64652061646472657373206973206e6f7420616e2061646472657373 4475:O3|@7377,@215,@4476 4476:S30|436f64652061646472657373206973206e6f74206120636f6e7374616e74 4477:S41|434f44455452454528292e67656e436f6465283229696e736572746564436f64652d6576616c283129 4478:C2,416|90909090909090483b65187303ff55484883fb01756e4889d34c89c048ba701e6000000000009090ff125348ff750848bae623f7acaa2a0000526a01488965084d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c894008488b4be048890848bab045600000000000909090ff124989c64d8d7fe84c3b7d107303ff5540eb05e96600000049c747f8020000004c89f84c89700848c700fbffffff48ff742410488f45084883c420c3904c8b284983fd03752a48b858d4ecacaa2a00009090ff555848b80100000000000000eb0f48b801000000000000004883c408c34c8b2424498b4424f04883c408c35250495048ff7308488b1b488b42f848ba1025f7acaa2a0000ff124c8b304983feed75054883c420c34983fefb75694c8b6c241049f7c50100000074054d89eceb1e4c8b600848b86055edacaa2a0000ff55584d89e349bc01000000000000004c8b5c24084c8b50084f8954a3fc41f6c5017503ff55704d89e94983c10270f44d89d8488b1c244c89c8488b5424184883c420e980feffff48b82025f7acaa2a00009090ff555848b80100000000000000|@4483,8191|30,0,I47 49,0,$4478+174 101,0,I204 185,0,@45 200,0,0 212,0,0 256,0,@4479 311,0,@336 327,0,0 393,0,@4480 408,0,0 4479:O1|@4472 4480:O3|@7377,@215,@4481 4481:S36|526573756c74206f66206576616c75617465206973206e6f74206120636f6e7374616e74 4482:S22|434f44455452454528292e6576616c75617465283229 4483:S33|434f44455452454528292e6576616c756174652832296c6f616441726773283329 4484:C4,200|90909090909090483b65187303ff55484c8b70104983fe01756f4c8b284c8b48084d8b45004c89c3488b4208ff15be0000004883f80175564d8d7fd04c3b7d107303ff554049c747f8050000004c89fb48c74320010000004c894b1848c74310030000004c89430848c703f7ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89f8eb0ae91d000000e90c0000004889580848c70001000000c3488b184c89c8ff254d00000048b8e826f7acaa2a00009090ff555848b8010000000000000090909090|@4487,8191,@428,@216|173,0,@4485 188,0,0 4485:O3|@7377,@215,@4486 4486:S36|6f75746572206c6576656c207265616368656420696e206c6f6f6b75704e657741646472 4487:S50|434f44455452454528292e67656e436f6465283229696e736572746564436f64652d6c6f6f6b75704e657741646472283129 4488:C2,32|90909090909090483b65187303ff5548488b5808488b00488b5208ff22909090|@4489,8191| 4489:S45|434f44455452454528292e67656e436f6465283229696e736572746564436f64652d656e746572446563283129 4490:C3,64|90909090909090483b65187303ff55484d8d7ff04c3b7d107303ff554049c747f8010000004d89fe4c8b68084d892e4d89f0488b18488b4208ff252900000090|@4491,8191,@3276| 4491:S48|434f44455452454528292e67656e436f6465283229696e736572746564436f64652d656e7465724e6577446563283129 4492:C2,8|488b4208c3909090|@4493,5| 4493:S24|434f44455452454528292e67656e436f6465283229283129 4494:C2,144|90909090909090483b65187303ff554848b80100000000000000488b52089090ff124d8d7fe84c3b7d107303ff554049c747f8020000004d89fe4989460849c706fbffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fd4d89750849c74500010000004d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89680848c7000b000000c3909090|@4493,8191|18,0,0 4495:C2,40|4d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b72084c89700848c7000b000000c3|@4493,4101| 4496:C2,504|90909090909090483b65187303ff55485248b80100000000000000488b521890ff1248f7c001000000741948b8a02cf7acaa2a00009090ff555849be010000000000000048f7c001000000741748b8b055edacaa2a0000ff555849be01000000000000004989c64d8d7fe84c3b7d107303ff554049c747f8020000004d89fd49bc308dedacaa2a00004d8965004d8975084d8b1e4d8d7fe84c3b7d107303ff554049c747f8020000004d89fa4d895a0849c702fbffffff4c8b0c244d8b4110498b304883feff750a498b5808488b7b08eb0a48bff02cf7acaa2a00004d8d7fe04c3b7d107303ff554049c747f8030000004c89fb48ba2007edacaa2a00004889134c896b1048897b084883feff750a498b4008488b4818eb244d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89f948c701010000004d8d7fd04c3b7d107303ff554049c747f8050000004c89f84d8b71084c897020488948184c8950104889580848c7000100000050504d8b2e4983fdfd75144989e449c70424010000004989e34d895308eb124989e449c70424ffffffff4989e3498943084d8d7fe84c3b7d107303ff554049c747f8020000004d89fa488b3c2449893a488b5c240849895a084d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89500848c7000b0000004883c418c390909090909090|@4493,8191|19,0,0 45,0,@4497 60,0,0 79,0,@339 92,0,0 129,0,@444 212,0,@4499 246,0,@205 4497:O3|@7377,@215,@4498 4498:S31|526573756c7420766563746f72206973206e6f7420616e2061646472657373 4499:O1|@4500 4500:C2,24|48b8a80dedacaa2a000090ff555848b80100000000000000|@222,1|2,0,@220 16,0,0 4501:C2,96|90909090909090483b65187303ff55484883f8017508488b8270ffffffc35248ff30488b4008909090e8d9ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b04244889024889d04883c410c390909090909090|@1847,5| 4502:S21|434f44455452454528292e67656e436f6465283229 4503:C2,352|90909090909090483b65187303ff5548488b18488b134883fa01750b48b80100000000000000c3488b4b084c8b314983fe01750c49bdf01e600000000000eb6f5051495648ff750849bc9e2ef7acaa2a000049546a014889650849b8010000000000000048bb01000000000000004c89f048ba701560000000000090ff124989c348ff742410488f4508eb1c909048b840e3ecacaa2a0000909090ff555849bb010000000000000049534d89f2eb05e94400000049b901000000000000004d89d848bb0300000000000000488b44242848ba70436000000000009090ff12488b042448ba701e600000000000ff124c8b2c244883c430eb01504d8d7fe84c3b7d107303ff554049c747f8020000004d89fc4d896c240849c70424010000004c8b1c244d892349f7c301000000741a48b8b055edacaa2a0000909090ff555848b801000000000000004c89d84883c40848ba701e600000000000ff229090909090|@4504,8191|30,0,0 54,0,I49 74,0,$4503+142 92,0,0 102,0,0 115,0,I11 144,0,@69 160,0,0 182,0,0 195,0,1 210,0,I195 228,0,I47 304,0,@339 320,0,0 337,0,I47 4504:S22|5374726574636841727261792e667265657a65283229 4505:C3,32|90909090909090483b65187303ff5548488b5808488b00ff252b000000909090|@4507,7949,@4506| 4506:C2,840|90909090909090483b65187303ff5548483bc3750b48b80300000000000000c348f7c001000000740b48b80100000000000000c348f7c301000000740b48b80100000000000000c34c8b70f849c1e60849c1ee084f8d7436014c8b6bf849c1e50849c1ed084f8d6c2d014d3bf5740b48b80100000000000000c34c0fb668ff4f8d6c2d014c0fb663ff4f8d6424014d89eb4d0bdc4d89dd4981e5810000004983fd01740b48b80100000000000000c34d89dc4983e4034983fc01747141f6c6017503ff55704983fe017d2449bdd802edacaa2a00004d89eb4d23de41f6c3017503ff55704d8d5dff4d03de70f4eb034d89f349be11000000000000004d89dd4d23ee41f6c5017503ff557050524c89da48d1fa498d46ff48f7ea4c8d68015a5870e649f7c501000000740ceb05e99e0000004d89eceb1349f645ff104d8b6500740349f7dc4f8d6424015053495449bb0100000000000000488b1c244c3bdb750f48b803000000000000004883c418c3488b4424104d89de49d1ee4e0fb634304f8d7436014c8b6c24084d89dc49d1ec4f0fb66425004f8d6424014d3bf47521498d5b024989db483b65187303ff5548eba648b801000000000000004883c418c348b801000000000000004883c418c34983fe0375114c8b18488b034889c34c89d8e920feffff4983fe05755f4c8b184c8b70084c8b2b4c8b630849f7c301000000741b4d3bdd750b4c89e34c89f0e9f3fdffff48b80100000000000000c349f7c501000000740b48b80100000000000000c349f7c60100000074204d3bf475104c89eb4c89d8e9bbfdffffe95800000048b80100000000000000c349f7c401000000740b48b80100000000000000c3495649544c89eb4c89d8909090e885fdffff4883f8017412488b1c24488b4424084883c410e96dfdffff48b801000000000000004883c410c34d8d5efe50534983fb01750c49ba0300000000000000eb53488b5c24084a8b449bfc4c8b34244f8b6c9efc49534c89ebe829fdffff4883f80174224c8b24244d8d5c24fe4883c408483b65187303ff5548ebb349ba010000000000000049ba01000000000000004883c4084983fa01741c4c8b6424084d8b1c244c8b1424498b1a4c89d84883c410e9d1fcffff48b801000000000000004883c410c3909090|@4508,7945|23,0,1 43,0,0 63,0,0 113,0,0 166,0,0 205,0,@167 244,0,8 336,0,0 355,0,1 436,0,0 451,0,0 534,0,0 554,0,0 595,0,0 615,0,0 668,0,0 695,0,1 766,0,0 776,0,0 824,0,0 4507:S32|537472756374757265457175616c6974792e7374727563747572654571283129 4508:S32|537472756374757265457175616c6974792e7374727563747572654571283229 4509:C2,88|90909090909090483b65187303ff55484883f8017505488b4290c35248ff30488b40089090e8ddffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b04244889024889d04883c410c3909090|@1847,5| 4510:C2,208|48f7c001000000756b4c8b70084983fe0175664c8b284d8b65004983fcf975274989c34d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89580848c70013000000c34983fcef75314989c34d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89580848c70013000000c3e930000000e904000000488b00c34989c54d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89680848c70013000000c34989c64d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89700848c70013000000c3|@4511,7681| 4511:S21|434f44455452454528292e77726170456e76283129 4512:C3,184|90909090909090483b65187303ff55484883f801750b48b80100000000000000c34c8b304d8b2e4983fdef753e48ff7008498b4608e8cdffffff50488b44240890e8c1ffffff4883f8017509488b04244883c410c350488b442408488d542418ff157a0000004883c418c34983fdf975384956488b40089090e889ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b04244889024889d04883c408c3488b4008e955ffffff909090909090|@4514,6149,@4513|24,0,0 4513:C2,88|90909090909090483b65187303ff55484883f8017505488b42e8c35248ff30488b40089090e8ddffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b04244889024889d04883c410c3909090|@1847,5| 4514:S36|434f44455452454528292e67656e436f6465283229657870616e644d757475616c283129 4515:C3,200|90909090909090483b65187303ff55484883fb01750b48b80100000000000000c34c8b334d8b2e4983fdf9756f4d8b660849544c23e041f6c401495c7503ff55704c3be07d06488b5b08ebbb504889d8488d542408909090ff15920000004c8b1c2441f6c3017503ff55704d89da4983c20270f4504c89d090e889ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89f949894108eb05e90f0000004c8b04244d89014c89c84883c410c348b89838f7acaa2a000090ff555848b80100000000000000|@4521,8173,@4518|24,0,0 178,0,@4516 192,0,0 4516:O3|@7377,@215,@4517 4517:S23|67657456616c7565733a206e6f742061204465636c6172 4518:C2,296|90909090909090483b65187303ff55484883f801750b48b8d095edacaa2a0000c34c8b304d8b2e4983fdf9756d4d8b66084c8b5af849544d0be341f6c401495c7503ff55704d3be37406488b4008ebb74d8b56104d8b0a4983f907756f4d8d7fd04c3b7d107303ff554049c747f8050000004d89f849c740200100000049c740180100000049c74010030000004d89580849c700f7ffffffeb05e96f0000004d8d7fe04c3b7d107303ff554049c747f8030000004c89f8498b7a08488978104c89400848c70017000000eb05e901000000c34d8d7fd04c3b7d107303ff554049c747f8050000004c89f848c740200100000048c740180100000048c74010030000004c89580848c700f7ffffffc348b8403af7acaa2a0000909090ff555848b80100000000000000|@4522,8165|24,0,@478 272,0,@4519 288,0,0 4519:O3|@7377,@215,@4520 4520:S21|66696e64456e7472793a206e6f74204465636c6172 4521:S33|434f44455452454528292e67656e436f646528322967657456616c756573283229 4522:S45|434f44455452454528292e67656e436f646528322967657456616c75657328322966696e64456e747279283129 4523:C2,408|90909090909090483b65187303ff55484c8b304983fefb7505488b4008c34983fe15755a4c8b68084983fd01750b48b80100000000000000c3495549bc01000000000000004983fd0175054d89e3eb3341f6c4017503ff55704c89e04883c00270f44d8b6d084989c4483b65187303ff5548ebd149bb0100000000000000e9fc00000049f7c30100000074054d89daeb1748b86055edacaa2a0000ff555849ba010000000000000049b8010000000000000048bb81000000000000004c89d048ba7015600000000000909090ff125049b80100000000000000488b7c24084883ff017502eb7049f7c00100000074054c89c6eb1848b86055edacaa2a000090ff555848be0100000000000000495048ff770856488b07909090e8e9feffff488b5c2418488b142448894493fc488b4c2410f6c1017503ff55704889c84883c00270f4488b7c24084989c04883c418483b6518730aeb05e908000000ff5548e97bffffff488b042448ba701e600000000000909090ff12488b04244883c410c348b8d03cf7acaa2a00009090ff555848b80100000000000000|@4526,8063|48,0,0 61,0,0 118,0,0 147,0,@336 160,0,0 170,0,0 180,0,64 193,0,I11 209,0,0 246,0,@336 260,0,0 361,0,I47 385,0,@4524 400,0,0 4524:O3|@7377,@215,@4525 4525:S32|6d616b6556616c202d206e6f7420636f6e7374616e74206f72207265636f7264 4526:S36|434f44455452454528292e6d616b65436f6e737456616c2831296d616b6556616c283129 4527:O2|@4529,@4528 4528:O2|@4651,@4650 4529:C3,272|90909090909090483b65187303ff5548525050504989de49b8010000000000000048bb810000000000000048b80d0000000000000048ba701560000000000090ff1248c7000b0000004d8d7fe84c3b7d107303ff554049c747f8020000004d89f84989400849c700ffffffff4d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89ff4c89074889e348893b4889e248c74208010000004d8d7fe84c3b7d107303ff554049c747f8020000004c89f9488b04244889014c8b4424084c8941084d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89ff48c707010000004989f94989c848bbd83ef7acaa2a00004c89f0488d542420909090ff152e0000004883c420c390|@4536,8191,@4535|25,0,0 35,0,64 45,0,6 55,0,I11 241,0,@4530 4530:O1|@4531 4531:C2,24|48b8383ff7acaa2a000090ff555848b80100000000000000|@4534,1|2,0,@4532 16,0,0 4532:O3|@7377,@215,@4533 4533:S31|6f75746572206c6576656c207265616368656420696e20636f7079436f6465 4534:S37|434f44455452454528292e707265436f6465283229696e736572746564436f64652d283129 4535:C3,600|90909090909090483b65187303ff554850504989d64989c54989dc4d89c349b8010000000000000048bb810000000000000048b80d0000000000000048ba70156000000000009090ff1248c7000b0000004d8d7fe84c3b7d107303ff554049c747f8020000004d89f84989400849c700ffffffff4d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89ff4c89074889e348893b4889e248c74208010000004d8d7fe84c3b7d107303ff554049c747f8020000004c89f9488b04244889014c8b4424084c89410850504889ce49b8010000000000000048bb810000000000000048b80d0000000000000048ba70156000000000009090ff1248c7000b0000004d8d7fe84c3b7d107303ff554049c747f8020000004c89fb4889430848c703ffffffff4d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89fa48891a4889e14889114889e048c74008010000004d8d7fe84c3b7d107303ff554049c747f8020000004d89f8488b3c24498938488b5c24084989580850504d89c249b8010000000000000048bb810000000000000048b80d0000000000000048ba70156000000000009090ff1248c7000b0000004d8d7fe84c3b7d107303ff554049c747f8020000004d89f84989400849c700ffffffff4d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89ff4c89074889e348893b4889e248c74208010000004d8d7fe84c3b7d107303ff554049c747f8020000004c89f9488b04244889014c8b4424084c8941084951495356495449525149564c89e8488d542468909090ff152e0000004883c468c390|@4542,8191,@4537|32,0,0 42,0,64 52,0,6 62,0,I11 212,0,0 222,0,64 232,0,6 242,0,I11 392,0,0 402,0,64 412,0,6 422,0,I11 4536:S21|434f44455452454528292e707265436f6465283229 4537:C20,2024|90909090909090483b65187303ff5548524c8b3049f7c601000000741e4983feeb7c1d4983fe177f1c49bdca42f7acaa2a00004f8d6cb55441ffe5e9c2000000e9bd000000e9b8000000e9c2060000909090e9ee030000909090e9a3000000909090e9a2030000909090e908050000909090e974050000909090e9ca010000909090e97b000000909090e94e020000909090e9da000000909090e943020000909090e97a000000909090e9af050000909090e9c2030000909090e94d060000909090e9b9000000909090e9e2060000909090e9c4010000909090e993040000909090e935000000909090e9a0030000909090e9bd030000909090e96f06000090909048b8304bf7acaa2a0000909090ff555848b801000000000000004883c408c348ff7008488b4010e8d9feffff50488b442408488b542410e8c9feffff4889c24d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c8b34244c8970104889500848c700010000004883c418c348b8380dedacaa2a00004883c408c348ff7010488b4008488d542410909090ff157a0600004c8b24244d8b14244983faf7755b4d8d7fd84c3b7d107303ff554049c747f8040000004d89f94d8b4424204d894118498b7c241849897910498b74241049897108498b5c2408498919504c89cb48b80100000000000000488b5424109090ff151e0600004989c3eb12504c89e0488b54241090e8f9fdffff4989c34d8d7fd84c3b7d107303ff554049c747f8040000004c89f848c74018010000004c8958104c8b0c244c89480848c700090000004883c418c34d8d7fd84c3b7d107303ff554049c747f8040000004d89fc4c8b58204d895c24184c8b50184d895424104c8b48104d894c24084c8b40084d8904244c89e348b803000000000000004883c408ff258505000048ff7010488b40089090e85dfdffff4989c44d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c8b1c244c8958104c89600848c7000d0000004883c410c34883c408c348ff700848ff70104c8b24244983fc01750c49bb0100000000000000eb6f4d8b14244d8b0a4983f9f975674c8b44241049ff74240849ff7208498b78b849b80100000000000000488b1c244889f8ff15f2040000488b74242049b80100000000000000488b1c24488b46a8909090ff15da040000488b5c242049b80100000000000000488b53a0488b1c24eb0ae93f000000e90b0000004889d0ff15b6040000eb0e48b8784bf7acaa2a000090ff55584c8b6424084883c410483b65187303ff5548e945ffffff49bb0100000000000000488b442408488b542410e845fcffff50488b442408488d542420909090ff156a0400004989c24d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c8950104c8b0c244c89480848c700ffffffff4883c420c3488b4008488d5424089090ff152e0400004989c44d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89600848c700f1ffffff4883c408c3488b4008e8b9fbffff4989c44d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89600848c700edffffff4883c408c34c8b4018488b5810488b40084883c408ff25c1030000488b4008488d542408ff15ba030000488d54240890ff15b60300004883c408ff25b4030000488b4008488d542408909090ff15aa0300004d8d7fe84c3b7d107303ff554049c747f8020000004d89fc498944240849c704241500000049544883f801750c49bb0300000000000000eb2f4c8b104d8b0a4983f9fb7519488b4008483b65187303ff5548ebd349bb010000000000000049bb01000000000000004983fb017435488b0424ff153a0300004989c04d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89400848c700fbffffff4883c410c3488b04244883c410c34883c408c34d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fc49c70424030000004c8b580849ff732049ff732849ff733049ff73384d8b53184d8b4b104d8b4308498b1b4c89e0488d54242890ff15b20200004889c348b80300000000000000488d542408ff15a20200004883c408c348ff700848ff7018488b40109090e809faffff50488b442410488b542418e8f9f9ffff50488b442410488d542428909090ff156e0200004989c44d8d7fd84c3b7d107303ff554049c747f8040000004c89f84c8960184c8b5c24084c8958104c8b14244c89500848c700f5ffffff4883c428c34c8b600849ff342449ff74240849ff74241049ff742420498b442418488d54242890ff151202000050488b442408488b542428e871f9ffff50488b442418488b542430e861f9ffff4d8d7fd04c3b7d107303ff554049c747f8050000004d89fb4c8b14244d8953204c8b4c24084d894b18498943104c8b4424204d894308488b7c242849893b4d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89580848c700030000004883c438c34883c408c348ff700848ff7010488b4018e8e5f8ffff50488b442408488b542418e8d5f8ffff4989c44d8d7fd84c3b7d107303ff554049c747f8040000004c89f84c8b1c244c8958184c8960104c8b5424104c89500848c700ebffffff4883c420c348ff7010488b4008909090e889f8ffff4989c44d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c8b1c244c8958104c89600848c700170000004883c410c34c8b60084d8b1c244983fbff750e4d8b542408498b42104883c408c34983fb03750a498b4424104883c408c3498b4424084883c408c390|@4544,8191,@4545,@4547,@4547,@3276,@3276,@3276,@4549,@4552,@4553,@4598,@4641,@4510,@4648,@4523,@4601,@4616,@4649,@4543|43,0,$4537+74 260,0,@4538 276,0,0 371,0,@217 485,0,0 649,0,1 758,0,0 801,0,0 829,0,0 861,0,0 902,0,@4540 939,0,0 1269,0,1 1308,0,0 1318,0,0 1491,0,1 4538:O3|@7377,@215,@4539 4539:S19|756e6b6e6f776e20696e737472756374696f6e 4540:O3|@7377,@215,@4541 4541:S29|6465636c6172654172673a206e6f742061206465636c61726174696f6e 4542:S32|434f44455452454528292e707265436f6465283229636f7079436f6465283429 4543:C3,184|90909090909090483b65187303ff55484883f801750b48b80100000000000000c35248ff30488b4008e8d9ffffff5050488b5424105048ff7208488b02488b4c2428488b51f89090ff15920000004c8d7424104989064c8d6c24104c8b24244d8965084d8d7fe84c3b7d107303ff554049c747f8020000004d89fb4c8b5424104d89134c8b4c24184d894b084d8d7fe84c3b7d107303ff554049c747f8020000004d89f8488b7c2408498978084d89184c89c04883c430c3|@4546,8191,@4537|24,0,0 4544:S41|434f44455452454528292e707265436f6465283229636f7079436f6465283429696e73657274283129 4545:C3,120|90909090909090483b65187303ff55484883f801750b48b80100000000000000c35248ff30488b4008e8d9ffffff50488b4424084c8b742410498b56f8909090ff155a0000004d8d7fe84c3b7d107303ff554049c747f8020000004d89fd4c8b24244d896508498945004c89e84883c418c3909090909090|@4546,8191,@4537|24,0,0 4546:S41|434f44455452454528292e707265436f6465283229636f7079436f64652834297265766d6170283229 4547:C8,472|90909090909090483b65187303ff55484c8b73104983fe017402eb0b4c8b2b4983fd017402eb2c4989c54d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c8968104c897008488918488b52b0ff2241f6c5017503ff55704983fd017d6f49bc01000000000000004d89eb4d23dc41f6c3017503ff55704d89e34d2bdd4d8d5b0170f14989d14d89e84c89df4889fb498b41c090ff156201000049505049b803000000000000004889fb498b41c09090ff154e010000488b34244889f34883f3024d8d7fd04c3b7d10730aeb05e937000000ff554049c747f8050000004c89f84889582048c740180100000048c7401003000000488b5424084889500848c700f7ffffff4883c410c34989d14989c04c89ef4889fb498b41a0909090ff15ea00000048f7c0010000007504488b00c34889fb498b41b89090ff15d60000004983f80174204951575049b803000000000000004889fb498b41a8909090ff15ba000000eb0449515750488b74241049b80300000000000000488b5c2408488b46b8ff159e000000488b1c244889da4883f2024d8d7fd04c3b7d107303ff554049c747f8050000004c89f84889502048c740180100000048c7401003000000488b4c24084889480848c700f7ffffff4883c418c39090|@4548,8191,@428,@3276,@428,@428,@3276,@3276|100,0,0 163,0,1 334,0,1 371,0,1 4548:S42|434f44455452454528292e707265436f6465283229636f7079436f64652834296c6f6361646472283229 4549:C4,264|90909090909090483b65187303ff55484883f801750b48b80100000000000000c35248ff30488b4008e8d9ffffff488b14244c8b324983fef9756e4c8b6c24084d8b65f85048ff720848ff721049b80100000000000000488b5c2408498b4424b8909090ff15c6000000488b04244c8b5c2420498b53f890ff15ba0000004d8d7fd84c3b7d107303ff554049c747f8040000004c89f948c7411803000000488941104c8b542408eb05e90d0000004c89510848c701f9ffffffeb1d4989c548b8f851f7acaa2a0000909090ff555848b901000000000000004d8d7fe84c3b7d107303ff554049c747f8020000004d89f94c8b4424104d8941084989094c89c84883c428c390909090|@4546,8191,@3276,@4537|24,0,0 79,0,0 192,0,@4550 208,0,0 4550:O3|@7377,@215,@4551 4551:S26|636f70794465633a206e6f742061206465636c61726174696f6e 4552:C3,120|90909090909090483b65187303ff55484883f801750b48b80100000000000000c35248ff30488b4008e8d9ffffff50488b4424084c8b742410498b56f8909090ff155a0000004d8d7fe84c3b7d107303ff554049c747f8020000004d89fd4c8b24244d896508498945004c89e84883c418c3909090909090|@4546,8191,@4537|24,0,0 4553:C31,1840|90909090909090488dbc2420ffffff483b7d187303ff5550525053495048b8010000000000000090ff152a07000050488b442410488b542420909090ff151e0700005048b80100000000000000488b5424289090ff150e07000050488b442410488b542430909090ff1502070000488b442418488b542430ff15fa0600005048b80100000000000000488b5424389090ff15ea0600005050504c8d4424084889c3488b4424209090ff15da060000488b442420488b542450ff15d2060000488b442448488b542450ff15ca0600005090ff15ca0600004883f801755d488b5c2418488b4424309090ff15ba0600004989c3488b5c2410488b44242090ff15ae0600004989c24d8d7fd84c3b7d107303ff554049c747f8040000004c89f84c8950184c8958104c8b0c244c89480848c700050000004883c460c350504c8b7424304d8b2e4983fd03756d4d8b660848ff3048ff700848ff701048ff701849ff342449ff74240849ff74241049ff74241849ff742420488b5c2410488b4424289090ff153206000048f7c00100000075704c8b58184983fb03756b4c8b104c8b48104d89c84c89d3488b44246090ff150e0600005050eb05e963040000495249514c8d442410488b9c2480000000488b8424a0000000ff15ee0500004c8b0424488b5c2408488b8424a000000090ff15de0500004883f8017471488b5c2418eb0ae952030000e92b020000488b8424a8000000909090ff15be0500004d8d7fe84c3b7d107303ff554049c747f8020000004d89f8488b7c245049897808498900488b442428488d9424d800000090ff158e0500004d8d7fe84c3b7d107303ff554049c747f802000000eb05e9ae0000004c89fe488946084c8906488b5c2410488b4424209090ff155e050000488b5c2458488b542438534823daf6c3015b7503ff5570483bda7d054889d9eb034889d14c8b7424604c8b6c244049554d23ee41f6c501495d7503ff55704d3bf57e054d89f4eb034d89ec4d8d7fd04c3b7d107303ff554049c747f8050000004d89fb49894320498973184c8b5424484d89531049894b084d89234c8d4c246849c701030000004c8d4424684d895808eb6f488b5c2418488b8424a8000000909090ff15be0400004d8d7fe84c3b7d107303ff554049c747f8020000004d89f8488b7c245049897808498900488b442428488d9424d800000090ff158e0400004d8d7fe84c3b7d107303ff554049c747f8020000004c89fe488946084c8906eb05e96d030000488b5c2410488b4424209090ff155e040000488b5c2458488b542438534823daf6c3015b7503ff5570483bda7d054889d9eb034889d14c8b7424604c8b6c244049554d23ee41f6c501495d7503ff55704d3bf57e054d89f4eb034d89ec4d8d7fd04c3b7d107303ff554049c747f8050000004d89fb49894320498973184c8b5424304d89531049894b084d89234c8d4c246849c701030000004c8d4424684d895808eb70488b5c2470488b842488000000909090ff15be0300004d8d7fe84c3b7d107303ff554049c747f8020000004d89fa4c8b4c24304d894a084989024d89d0488b442408488d9424b80000009090ff158a0300004d8d7fe84c3b7d107303ff554049c747f8020000004c89ff48894708eb05e9540200004c8907488b5c2468488b0424909090ff155a030000488b742438488b5c2418534823def6c3015b7503ff5570483bf37d054889f2eb034889da488b4c24404c8b742420514923cef6c101597503ff5570493bce7e054989cdeb034d89f54d8d7fd04c3b7d107303ff554049c747f8050000004d89fc498944242049897c24184c8b5c24104d895c241049895424084d892c244c8d54244849c702030000004c8d4c24484d89610850505050eb6e488b5c2470488b84248800000090ff15b60200004d8d7fe84c3b7d107303ff554049c747f8020000004d89fb4c8b5424304d8953084989034d8d7fe84c3b7d107303ff554049c747f8020000004d89f949c74108010000004d8919488b5c2468488b44247890ff1566020000eb05e9340100004d8d7fd04c3b7d107303ff554049c747f8050000004d89f8498940204d894818488b7c242849897810488b74243849897008488b5c2440498918488d54244848c70203000000488d4c24484c89410850505050eb724c8b184c8b50084c8b48104c8b4018488b5c2428488b44244090ff15f20100004d8d7fe84c3b7d107303ff554049c747f8020000004c89ff4c894f084889074d8d7fe84c3b7d107303ff554049c747f8020000004c89fe48c746080100000048893e488b5c2430488b0b4883f9fd7513eb05e96800000048bad095edacaa2a0000eb034889da488b5c24204889d0ff15860100004d8d7fd04c3b7d107303ff554049c747f8050000004d89fe49894620498976184d8946104d8956084d891e4989e549c74500030000004989e44d89742408505050505050505050505050504d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b5c24684c89184c8b5424704c8950084881c4d8000000c39090|@4555,8191,@4556,@4537,@4556,@4558,@4537,@4556,@4564,@4574,@4537,@4576,@4554,@4554,@4582,@4586,@4564,@4590,@4554,@4592,@4554,@4554,@4593,@4554,@4554,@4594,@4554,@4554,@4554,@4554,@4554|31,0,0 69,0,0 129,0,0 1687,0,@478 4554:C4,232|90909090909090483b65187303ff55484883fb017501c350504c8b304983fe13753a4c8b60084983fc0175054989ddeb1849544889d8488d54241890ff15ce0000004989c54883c4084889e348c703130000004889e24c896a08eb5a4d8d7fe84c3b7d107303ff554049c747f8020000004d89fd49c7450801000000498945004983fd0175054989dceb1a49554889d8488d542418909090ff157a0000004989c44883c4084889e348c703130000004889e24c8962084d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b34244c89304c8b6c24084c8968084883c410c39090909090|@4596,7181,@4597,@4595| 4555:S43|434f44455452454528292e707265436f6465283229636f7079436f6465283429636f7079436f6e64283329 4556:C4,704|90909090909090483b65187303ff5548488b42f04c8b304d8b264983fcff750c4d8b5e084d8b134d89d5eb184d8b5e084d8b53f849c1e20849c1ea084f8d5412014d89d54c8b52c04d8b0a4d8b01498b304883feff750c498b5808488b0b4889cfeb18498b5808488b4bf848c1e10848c1e908488d4c09014889cf5249555748ff72b848b9010000000000000048b801000000000000004c8b74241050490bc6a801587503ff5570493bc675054989cdeb584989c14c89cb488b0424ff15260200004883f801745141f6c1017503ff55704d89c84983c00270f44d8d7fe84c3b7d107303ff554049c747f8020000004c89ff48894f084c890f4c89c04889f9483b65187303ff5548eb8de93700000049bd010000000000000041f6c1017503ff55704d89c84983c00270f44c89c0483b65187303ff5548e95bffffff49bd01000000000000004c8b642418495549ff7424c049bb010000000000000049ba01000000000000004c8b4c241849524d0bd141f6c201495a7503ff55704d3bd175054d89d8eb5d4d89d84c89d74889fb488b04249090ff15560100004883f801745140f6c7017503ff55704889fe4883c60270f44d8d7fe84c3b7d107303ff554049c747f8020000004c89fb4c89430848893b4989f24989db483b65187303ff5548eb84e93a00000049b8010000000000000040f6c7017503ff55704889fe4883c60270f44989f24d89c3483b65187303ff5548e94fffffff49b801000000000000004d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89ff488b7424084889374d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89fb4c8903488b542428488b4ac8488b014d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fe4989064d8d7fe04c3b7d107303ff554049c747f8030000004d89fd49897d104d89750849895d004c89e84883c430c39090|@4557,8191,@428,@428|133,0,0 143,0,0 273,0,0 318,0,0 340,0,0 350,0,0 489,0,0 537,0,0 4557:S45|434f44455452454528292e707265436f6465283229636f7079436f646528342973617665557361676573283129 4558:C4,256|90909090909090483b65187303ff55484c8b304d8b2e4c8b60104d8b1c244c8b52c04d8b0a4d8b01498b304883feff750c498b5808488b0b4889cfeb18498b5808488b4bf848c1e10848c1e908488d4c09014889cf40f6c7017503ff55704889f94883e90270f452495348ff70084989c84c89eb4c89d090ff15aa000000488b4424104c8b70f04d8b2e4d8b5d004983fbff750c4d8b55084d8b0a4d89cceb184d8b55084d8b4af849c1e10849c1e9084f8d4c09014d89cc41f6c4017503ff55704d89e04983e80270f4488b5c2408488b40b890ff1556000000488b7c2410488b3424488b1e488b57c848891a48b801000000000000004883c418c390909090|@4562,8191,@4559,@4559|239,0,0 4559:C5,320|90909090909090483b65187303ff554841f6c0017503ff55704983f8017d294883fb01750b48b80100000000000000c348b8e062f7acaa2a000090ff555848b801000000000000004883fb01754950495049b80100000000000000488b1c2490ff15020100004c8b342441f6c6017503ff55704d89f54983ed0270f44d89e848bb0100000000000000488b4424084883c410e970ffffff4c8b3349504d0bc641f6c00149587503ff55704d3bf0754b50495048ff730849b80300000000000000488b5c2408909090ff15a20000004c8b6c240841f6c5017503ff55704d89ec4983ec0270f44d89e0488b1c24488b4424104883c418e90dffffff5053495049b80100000000000000488b1c24ff15660000004c8b2c2441f6c5017503ff55704d89ec4983ec0270f44d89e0488b5c2408488b4424104883c418e9c9feffff9090|@4563,8191,@3276,@3276,@3276|39,0,0 50,0,@4560 64,0,0 83,0,0 129,0,0 184,0,1 256,0,0 4560:O3|@7377,@215,@4561 4561:S21|736574546f53617665643a206e6f7420656d707479 4562:S45|434f44455452454528292e707265436f6465283229636f7079436f6465283429736574546f5361766564283129 4563:S57|434f44455452454528292e707265436f6465283229636f7079436f6465283429736574546f5361766564283129636f70794172726179283329 4564:C4,392|90909090909090483b65187303ff55484c8b304d8b2e4c8b60104d8b1c244c8b134d8b0a488b7b10488b3750504950495348ff70085648ff7308488d5424285249ba8865f7acaa2a00004c89c94d89e94989c848bb010000000000000048b8010000000000000090ff154201000050504889e05049ba0066f7acaa2a00004c8b4c24304c8b442420488b5c2440488b4424489090ff151e01000050504c8b7424304d8b2e4c8b6424204d8b1c244d3beb75194989e24c8b4c24104d890a4989e0488b7c241849897808eb6e4d8b164983fa0174424d8d7fe84c3b7d107303ff554049c747f8020000004d89f94c8b4424104d89410848bfa066f7acaa2a00004989394889e64c890e4889e3488b54241848895308eb474d8d7fe84c3b7d107303ff554049c747f8020000004d89f94c8b4424184d894108eb05e91f00000048bfa066f7acaa2a00004989394889e6488b5c241048891e4889e24c894a08488b4c2440488b04244889014c8b7424084c89710848b801000000000000004883c458c390909090909090|@4572,8191,@4571,@4571|66,0,@4565 85,0,0 95,0,0 118,0,@4567 247,0,@4570 320,0,@4570 372,0,0 4565:O1|@4566 4566:C2,48|49be01000000000000004989c54d23ee41f6c5017503ff55704d89f54c2be84d8d6d0170f14c89e8c390909090909090|0,6145|2,0,0 4567:O1|@4568 4568:C2,8|c390909090909090|@4569,1| 4569:S63|434f44455452454528292e707265436f6465283229636f7079436f6465283429636f6d707574654b696c6c536574732833293c7061747465726e3e2d283129 4570:O5|-5,0,0,0,1 4571:C2,792|90909090909090483b65187303ff55484983f901756d4983f80175194c8b54240849891a4989420848b80100000000000000c208005053495249ff7008498b004c89d290ff124d8d7fd04c3b7d107303ff554049c747f8050000004d89fe49c746200300000049c746180100000049c74610030000004989460849c706f7ffffffeb05e9530000004d8d7fe84c3b7d107303ff554049c747f8020000004d89fd4c8b6424184d8965084d8975004c8b5c24284c895c24284c8b54240849b901000000000000004c8b0424488b5c24104c89e84883c420e92cffffff4983f801756f5053495249ff7108498b014c89d290ff124d8d7fd04c3b7d107303ff554049c747f8050000004d89fe49c746200300000049c746180100000049c74610030000004989460849c706f7ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fd4c8b6424104d896508eb05e9320000004d8975004c8b5c24284c895c24284c8b5424084c8b0c2449b801000000000000004c89eb488b4424184883c420e980feffff4d8b314d8b2849554d0bee41f6c501495d7503ff55704d3bf575174c8b6424084c896424084d8b49084d8b4008e94efeffff49554d23ee41f6c501495d7503ff55704d3bf57d6e50534951495249ff70084c89e84c89d29090ff124d8d7fd04c3b7d107303ff554049c747f8050000004d89fc49c74424200300000049c74424180100000049c744241003000000498944240849c70424f7ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fbeb05e9350000004c8b5424204d8953084d89234c8b4c24304c894c24304c8b5424084c8b4c24104c8b0424488b5c24184c89d84883c428e991fdffff50534950495249ff71084c89f04c89d29090ff124d8d7fd04c3b7d107303ff554049c747f8050000004d89fc49c74424200300000049c74424180100000049c744241003000000498944240849c70424f7ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fb4c8b5424184d8953084d89234c8b4c24304c894c24304c8b5424084c8b0c244c8b4424104c89db488b4424204883c428e9f0fcffff90|@4573,8191|42,0,0 190,0,0 366,0,0 4572:S50|434f44455452454528292e707265436f6465283229636f7079436f6465283429636f6d707574654b696c6c53657473283329 4573:S61|434f44455452454528292e707265436f6465283229636f7079436f6465283429636f6d707574654b696c6c536574732833296b696c6c53657473283629 4574:C4,232|90909090909090483b65187303ff55484c8b304d8b2e4c8b60104d8b1c2452495348ff700848ff72c04983fd017502eb3049ff750849b80300000000000000498b5d00488b442408ff15c20000004c8b2c244883c408483b65187303ff5548ebc84c8b54241849ff72b84c8b4c24184983f9017502eb3249ff710849b80300000000000000498b19488b442408909090ff15820000004c8b0c244883c408483b65187303ff5548ebc64c8b442410498b384883ff01741f488b742420488b5ec848c7030300000048b801000000000000004883c428c348b801000000000000004883c428c3909090|@4575,8191,@3276,@3276|55,0,1 125,0,1 201,0,0 216,0,0 4575:S47|434f44455452454528292e707265436f6465283229636f7079436f646528342961646446726f6d5361766564283129 4576:C6,1104|90909090909090483b65187303ff55484c8b304983fe09756f4c8b68104d8b65004983fcfb75664d8b5d0849baf04b6000000000004d3bda7502eb2049baf02e6000000000004d3bda7502eb0f49ba70516000000000004d3bda75634c8b500849f7c201000000755b4d8b4a0849f7c10100000075704d8b41084983f801756b498b39488b37eb0ae94e020000e93e0200004883fefb7558498b1a488b134883fafb756f488b4b0848f7c101000000746748f7c101000000740f4889c8eb21e901020000e9f101000048b86055edacaa2a0000ff555848b801000000000000004d8d7fe8eb0fe9c4010000e9b4010000e9fb0000004c3b7d107303ff554049c747f8020000004d89fe49c7460801000000eb0ae942000000e9320000004989064d8d7fd84c3b7d107303ff554049c747f8040000004d89fc49897c24184d897424104989442408498904244c89e0c348b80100000000000000c3488b4f0848f7c101000000747148f7c10100000074054889c8eb1748b86055edacaa2a0000ff555848b801000000000000004d8d7fe84c3b7d107303ff554049c747f8020000004d89fe49c74608010000004989064d8d7fd84c3b7d107303ff554049c747f8040000004d89fc49895c24184d897424104989442408eb05e908000000498904244c89e0c348b80100000000000000c3498b1a488b134883fafb756e488b4b0848f7c101000000746648f7c10100000074054889c8eb1948b86055edacaa2a00009090ff555848b801000000000000004d8d7fe84c3b7d107303ff554049c747f8020000004d89fe49c74608010000004989064d8d7fd84c3b7d107303ff554049c747f804000000eb0ae92a000000e91a0000004d89fc49897c24184d897424104989442408498904244c89e0c348b80100000000000000c348b80100000000000000c348b80100000000000000c348b80100000000000000c348b80100000000000000c348b80100000000000000c348b80100000000000000c34983fe03756d4c8b680849ff750049ff750849ff751049ff7518498b4520e809fdffff4989c1488b0424909090ff156a01000049f7c101000000755a48f7c001000000755649ff3149ff710849ff711049ff711848ff30488b5c2408488b442430ff153e01000048bb0100000000000000eb05e9eb00000090ff152e0100004883f801756f488b7c24104883ff0175104c8b0424eb1ce9b9000000e9a5000000488b0424488d542448ff15060100004989c0488b742438488b5c2418534823def6c3015b7503ff5570483bf37d054889f2eb034889da488b4c2440488b442420514823c8f6c101597503ff5570483bc87e0ceb05e93d0000004989ceeb034989c64d8d7fd84c3b7d107303ff554049c747f8040000004d89fd4c8b6424084d8965184d894510498955084d8975004c89e84883c448c348b801000000000000004883c448c348b801000000000000004883c420c348b801000000000000004883c420c348b80100000000000000c390909090909090|@4578,8191,@4579,@4582,@4584,@4577|45,0,I229 62,0,I113 79,0,I251 203,0,@336 216,0,0 337,0,0 375,0,@336 388,0,0 487,0,0 537,0,@336 552,0,0 656,0,0 667,0,0 678,0,0 689,0,0 700,0,0 711,0,0 722,0,0 836,0,0 1043,0,0 1058,0,0 1073,0,0 1088,0,0 4577:C2,88|90909090909090483b65187303ff55484883f8017505488b42c8c35248ff30488b40089090e8ddffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b04244889024889d04883c410c3909090|@1847,5| 4578:S54|434f44455452454528292e707265436f6465283229636f7079436f6465283429636f7079436f6e6428332966696e6443617365283129 4579:C3,192|90909090909090483b65187303ff55484883f801750b48b878a6edacaa2a0000c34c8b304d8b2e4d8b65004983fcfb756f4d8b5d084983fb03756a49ff7608488b40089090e8bdffffff4883f801750f48b801000000000000004883c408c34c8b304983fe0175064c8b1424eb1b4956488b442408488d5424109090ff15660000004989c24883c4084d8d7ff04c3b7d107303ff554049c747f801000000eb0ae910000000e90b0000004c89f84c89104883c408c348b80100000000000000c3|@4581,7941,@4580|24,0,@617 82,0,0 183,0,0 4580:C2,88|90909090909090483b65187303ff55484883f8017505488b42f0c35248ff30488b40089090e8ddffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b04244889024889d04883c410c3909090|@1847,5| 4581:S67|434f44455452454528292e707265436f6465283229636f7079436f6465283429636f7079436f6e6428332966696e6443617365283129636865636b4361736573283129 4582:C2,336|90909090909090483b65187303ff55484c8b334983fef7756f4d8d7fd84c3b7d107303ff554049c747f8040000004d89fd4c8b63204d8965184c8b5b184d895d104c8b53104d8955084c8b4b084d894d004c8b004983f8f7756f4d8d7fd84c3b7d107303ff554049c747f8040000004c89ff488b702048897718488b501848895710488b4810eb05e96500000048894f084c8b70084c893749514d0bce41f6c10149597503ff55704d3bce752f49534c0bda41f6c301495b7503ff55704c3bda751a4c3bd17515eb05e9190000004983fc0174044c89e8c34889f8c348b80100000000000000c348b80100000000000000c34983fe0d75494c8b284983fd0d75354c8b63104c8b581049544d0be341f6c401495c7503ff55704d3be3740b48b80100000000000000c3488b5b08488b4008e9d1feffff48b80100000000000000c348b80100000000000000c390909090|@4583,8191|222,0,0 233,0,0 288,0,0 312,0,0 323,0,0 4583:S53|434f44455452454528292e707265436f6465283229636f7079436f6465283429636f7079436f6e6428332973696d696c6172283229 4584:C2,208|483bd8750b48b80300000000000000c348f7c301000000756648f7c00100000075624c8b334c8b2849554d0bee41f6c501495d7503ff55704d3bf575574c8b63084c8b58084d3be3755a4c8b53104c8b481049524d0bd141f6c201495a7503ff55704d3bd175324c8b4318488b78184c3bc7751548b80300000000000000c3e941000000e93100000048b80100000000000000c3e91600000048b80100000000000000c348b80100000000000000c348b80100000000000000c348b80100000000000000c348b80100000000000000c3|@4585,8169|7,0,1 118,0,1 139,0,0 155,0,0 166,0,0 177,0,0 188,0,0 199,0,0 4585:S27|65712d434f44455452454528292e73696d696c6172697479283229 4586:C4,160|90909090909090483b65187303ff554841f6c0017503ff55704983f8017e164c8b400849c7000100000048b80100000000000000c3f6c3017503ff55704883fb017d294c8b00498b38534889f8488d5424089090ff156e00000049890048b801000000000000004883c408c34c8b70104d8b2e534d89f44c89e8488d54240890ff154a0000004989042448b801000000000000004883c408c390909090909090|@4588,7277,@4589,@4587|44,0,0 95,0,0 140,0,0 4587:C2,128|90909090909090483b65187303ff55484883f801750b48b80100000000000000c34c8b304c8b6af849554d0bee41f6c501495d7503ff55704d3bf57438524956488b400890e8bdffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b04244889024889d04883c410c3488b4008eb8c9090909090|@147,6149|24,0,0 4588:S45|434f44455452454528292e707265436f6465283229636f7079436f646528342972656d6f76654974656d283329 4589:C2,168|90909090909090483b65187303ff55484883f801750b48b80100000000000000c34c8b72f849bd01000000000000004d89f44d23e541f6c4017503ff55704d89ec4d2be64d8d64240170f04c8b2849544d0be541f6c401495c7503ff55704d3bec743c524955488b4008909090e895ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fc4989442408488b1424498914244c89e04883c410c3488b4008e95fffffff|@147,7173|24,0,0 39,0,0 4590:C2,280|4c8b304d8b2e4c8b60104d8b1c2441f6c0017503ff55704983f8017e084c8b4008498b00c3f6c3017503ff55704883fb017d61534983fd01750f48b801000000000000004883c408c34c8b042448bb01000000000000004c89c04823c3a8017503ff55704889d8492bc0488d400170f14d8b750050490bc6a801587503ff55704c3bf0751448b803000000000000004883c408c3e91e0000004d8b6d08483b65187303ff5548eb8c48b801000000000000004883c408c3534983fb01750f48b801000000000000004883c408c34d8b03488b1c2449504c0bc341f6c00149587503ff55704c3bc3750f48b803000000000000004883c408c34d8b5b08483b65187303ff5548ebb148b801000000000000004883c408c39090|@4591,7753|60,0,0 79,0,0 135,0,1 170,0,0 192,0,0 235,0,1 265,0,0 4591:S40|434f44455452454528292e707265436f6465283229636f7079436f6465283429696e536574283329 4592:C3,160|90909090909090483b65187303ff55484883f801750b48b80100000000000000c34c8b304989d34c8b50084d8b4e08498b9b38ffffff498b06909090ff15860000004d8d7fe84c3b7d107303ff554049c747f8020000004c89fb4c894b084889034953534c89d04c89da909090e895ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b04244889024889d04883c410c3909090|@417,8077,@4554|24,0,0 4593:C3,160|90909090909090483b65187303ff55484883f801750b48b80100000000000000c34c8b304989d34c8b50084d8b4e08498b9b38ffffff498b06909090ff15860000004d8d7fe84c3b7d107303ff554049c747f8020000004c89fb4c894b084889034953534c89d04c89da909090e895ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b04244889024889d04883c410c3909090|@417,8077,@4554|24,0,0 4594:C3,160|90909090909090483b65187303ff55484883f801750b48b80100000000000000c34c8b304989d34c8b50084d8b4e08498b5bb0498b069090ff158a0000004d8d7fe84c3b7d107303ff554049c747f8020000004c89fb4c894b084889034953534c89d04c89da909090e899ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b04244889024889d04883c410c390909090909090|@417,8077,@4554|24,0,0 4595:C2,88|90909090909090483b65187303ff55484883f8017505488b42e8c35248ff30488b40089090e8ddffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b04244889024889d04883c410c3909090|@1847,5| 4596:S56|434f44455452454528292e707265436f6465283229636f7079436f6465283429636f7079436f6e642833296164644b696c6c536574283229 4597:C2,88|90909090909090483b65187303ff55484883f8017505488b42e8c35248ff30488b40089090e8ddffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b04244889024889d04883c410c3909090|@1847,5| 4598:C18,1136|90909090909090483b65187303ff55484883f801750b48b80100000000000000c34c8b304d8b2e4983fdf9756e4c8b62f85249ff760849ff761048ff700849b80100000000000000488b5c2410498b4424b89090ff153e0400004c8b5c24184d8b53f849b80100000000000000488b5c2410498b42a89090ff15220400004c8b4c2408498b394883fffb7547488b742418488b5ef84d8d7ff0eb05e9030200004c3b7d107303ff554049c747f8010000004c89fa4c890a4989d0488b4ba0488b5c24104889c89090ff15da0300004989c0eb2a488b742418488b5ef849b80100000000000000488b53a0488b5c24104889d09090ff15b60300004989c0488b0424488b542418909090e8f9feffff488b4c24184c8b71f84989c1488b5c2410498b46b890ff158e0300004883f80175224c8b41f8498b7898488b77f8495150488b442418488b5608ff124883f8017411eb05495150eb0a488b4424084883c430c34c8b442418498b304883fef37571488b5c2428488b53f8488b5c2420488b42a8909090ff15360300004d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89f9488901498b40085148ff702048ff702848ff703048ff70384c8b50184c8b48104c8b4008488b184889c8488b5424509090ff15ea020000eb05e91e0000004c8b34244d8b2e4889c34c89e8488b54243090ff15d20200004889c7eb174c89c0488b5c2428488b53f890ff15c20200004889c750488b542430488b4af85749b80100000000000000488b5c2430488b41b890ff15a20200004d8d7fd84c3b7d107303ff554049c747f8040000004c89f84c8b7424104c8970184c8b2c244c8968104c8b6424304c89600848c700f9ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fb4c8b5424184d8953084989034c89d84883c440c34983fdef756e5249ff760848ff70084c8b6424084983fc01750c49bb0100000000000000eb3249ff742408498b0424488d54242090ff150a0200004c8b24244883c408483b65187303ff5548ebc649bb0100000000000000488b0424488b54241090e8fdfcffff50488b442410488d542420eb05e9cb000000ff15ce0100004989c048bb010000000000000048b80100000000000000488d5424209090ff15b2010000488d54242090ff15ae0100004883f8017509488b04244883c420c34c8b50084983fa01752e4d8d7fe84c3b7d107303ff554049c747f8020000004d89f94c8b04244d894108488b384989394c89c84883c420c34d8d7fe84c3b7d107303ff554049c747f8020000004d89f94989410849c701efffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89f8488b3c24498978084d89084c89c04883c420c3524956488b4008909090e811fcffff50488b4424084c8b642410498b5424f89090ff15fa0000004c8b184983fb1375284c8b14244983fa017509488b40084883c418c3488b4008488d54241890ff15d60000004883c418c34d8d7fe84c3b7d107303ff554049c747f8020000004d89fa4c8b0c244d894a084989024c89d04883c418c3909090909090|@4600,8191,@3276,@3276,@3276,@3276,@428,@428,@4601,@4616,@4537,@3276,@4621,@4625,@4630,@4637,@4537,@4599|24,0,0 64,0,0 101,0,0 222,0,0 550,0,0 703,0,0 755,0,0 807,0,0 817,0,0 4599:C2,88|90909090909090483b65187303ff55484883f8017505488b42e8c35248ff30488b40089090e8ddffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b04244889024889d04883c410c3909090|@1847,5| 4600:S60|434f44455452454528292e707265436f6465283229636f7079436f6465283429696e73657274283129636f70794465636c61726174696f6e73283129 4601:C6,960|90909090909090483b65187303ff55484d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fa49c702010000004d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89ff48c707010000004d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89fe48c70601000000488b4af84d8d7fb84c3b7d107303ff554049c747f8080000004d89fe49bd0889f7acaa2a00004d892e4c8b69b04d896e384c8b61a04d8966304c8b59a84d895e284d89562049897e184989461049897608488b7c242040f6c7017503ff55704889f84883c00270f45050a8017503ff55704989c34983c30270f4525349505049b8010000000000000048bb81000000000000004c89d848ba7015600000000000ff124c8b04244c89004d8d7fe84c3b7d107303ff554049c747f8020000004c89ff4889470848c707ffffffff4d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89fb48893b488d54242048891a488d4c242048c74108010000004d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b6c24204c89284c8b6424284c8960084d8d7fe84c3b7d107303ff554049c747f8020000004d89fb49b8a08ff7acaa2a00004d89034d8973084951495256504989f14989c04c89db488b442430488b7c2438488b57f8488b5298ff15f20100004889c148b80300000000000000488d542450ff15e20100004883f80175054989ceeb674d8d7fe84c3b7d107303ff554049c747f8020000004d89fd49c745080100000049894d004983fd0175054989c4eb154955488d54245890ff15a20100004989c44883c4084d8d7fe84c3b7d107303ff554049c747f8020000004d89fe4d89660849c706130000004c8b5c24104d8b134983fa0175724c8b4c24084d8b014d8d7fb84c3b7d107303ff554049c747f8080000004c89ff48c74738030000004c894730488b74246848897728488b5c247048895f2048c7471801000000488b54241848895710488b4c242848894f084c89374d8d7fe84c3b7d107303ff554049c747f802000000eb05e9340000004c89f84889780848c700f3ffffff4c8b7424384d8b6ef84d8b65984889c3498b4424f04c8b5c24504883c4784953ff25c70000004d8b0b4c8b442408498b384d8d7fb84c3b7d107303ff554049c747f8080000004c89fe48c746380100000048897e30488b5c246848895e28488b542470488956204c894e18488b4c241848894e10488b442428488946084c89364d8d7fe84c3b7d107303ff554049c747f8020000004c89f84889700848c700f3ffffff4883c450c22000909090|@4613,8191,@4535,@4614,@4612,@4472|154,0,@4602 253,0,0 263,0,64 276,0,I11 448,0,@4610 507,0,1 4602:C7,720|90909090909090483b65187303ff55485248ff70085348ff304883fb017558488b1c244883fb017402eb0d488b4424104883f8017502eb1848b8388cf7acaa2a000090ff555848b9010000000000000048b901000000000000004983f801741c4c8b421049c7000300000049be0100000000000000eb0fe95f00000049be01000000000000004c8b72084d8b0649c706030000004c89c34883f3024d8d7fd04c3b7d107303ff554049c747f8050000004c89f84889582048c740180100000048c740100100000048c740080100000048c700f7ffffff4883c420c34883fb0375624c8b342441f6c6017503ff55704983fe017e6f488b5c24104883fb01751948b8388cf7acaa2a00009090ff555848b9010000000000000048b901000000000000004c89f3488b4230909090ff15c601000048f7c001000000750d488b004883c420c3e9730000004983f8017429488b4c241849b80300000000000000488b1c24eb05e953000000488b4128ff158e0100004889c2eb0a48ba0100000000000000488b542418488b4a08488b0148c701030000004c8b72204d8b2e4c8b62184d8b1c244d89e84c89db488d5424209090ff15520100004883c420c34883fb03756f4c8b342441f6c6017503ff55704983fe017d614c8b6c24104983fd01751948b8388cf7acaa2a00009090ff555849bc010000000000000049bc01000000000000004c8b62084d8b1c2449c70424030000004c8b52204d8b0a4c8b4218498b384d89c84889fb4c89d8488d542420eb0ae912000000e90d0000009090ff15ce0000004883c420c3f6c3017503ff55704989de4983ee0270f44989c54d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c8940104c8970084c8928488b52389090ff124c8b204983fcfb75054883c420c34c8b5c24184d8b53084d8b0a49c702030000004d8b4320498b38498b7318488b1e4989f84c89c8488d542420ff15520000004883c420c39090909090|@4608,8191,@428,@3276,@4605,@4605,@4605|58,0,@4603 72,0,0 82,0,0 109,0,0 126,0,0 257,0,@4603 272,0,0 282,0,0 341,0,1 377,0,0 481,0,@4603 496,0,0 506,0,0 4603:O3|@7377,@215,@4604 4604:S23|707265763a206261646c792d666f726d6564206c6f6164 4605:C2,480|90909090909090483b65187303ff55484983f80175734c8b42f8488b5ae8f6c3017503ff55704889d94883e90270f44d8d7fd04c3b7d107303ff554049c747f8050000004d89fe49c746200100000049894e18488b4af049894e104c8b6ae04d896e0849c706f7ffffff4d8b60204d8b1c244d8d7fe84c3b7d107303ff554049c747f802000000eb05e9690000004d89fa4d895a084d89324d8914244d8b70184d8b1e41f6c3017503ff55704d89da4983c20270f44d89164989c34983f3024d8d7fd04c3b7d107303ff554049c747f8050000004c89f84c89582048c740180100000048c74010010000004c89500848c700f7ffffffc34d8b304d8b2e4983fdf7756f4d8b66084c8b5ae049544d0be341f6c401495c7503ff55704d3be375574c8b52e841f6c2017503ff55704c89d14883e90270f44d8b4e1849514c0bc941f6c10149597503ff55704c3bc97558498b4e10488b7af0483bcf754b4889c64883f6024d8d7fd04c3b7d107303ff5540eb0ae94d000000e92b00000049c747f8050000004c89f84889702048c740180100000048c74010010000004889580848c700f7ffffffc3f6c3017503ff55704989da4983ea0270f44d8b40084c89d3e943feffff48b8988ef7acaa2a000090ff555848b8010000000000000090909090|@4609,8191|454,0,@4606 468,0,0 4606:O3|@7377,@215,@4607 4607:S40|6d616b65436c6f73757265456e7472793a20636c6f73757265206973206e6f742045787472616374 4608:S61|434f44455452454528292e707265436f6465283229636f7079436f6465283429696e73657274283129636f70794c616d62646128392970726576283329 4609:S80|434f44455452454528292e707265436f6465283229636f7079436f6465283429696e73657274283129636f70794c616d626461283929707265762833296d616b65436c6f73757265456e747279283329 4610:C2,40|90909090909090483b65187303ff55484c8b4010488b5808488b00488b5208ff2290909090909090|@4611,8191| 4611:S61|434f44455452454528292e707265436f6465283229636f7079436f6465283429696e73657274283129636f70794c616d62646128392970726576283129 4612:C2,88|90909090909090483b65187303ff55484883f8017505488b42a8c35248ff30488b40089090e8ddffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b04244889024889d04883c410c3909090|@1847,5| 4613:S54|434f44455452454528292e707265436f6465283229636f7079436f6465283429696e73657274283129636f70794c616d626461283929 4614:C3,288|90909090909090483b65187303ff55484c8b7220504923c6a801587503ff5570493bc67e0b48b80100000000000000c34989d14989c04c89c3498b41b0909090ff15020100004883f801756d48bb01000000000000004c89c24823d3f6c2017503ff55704889da492bd0488d520170f14d8d7fd04c3b7d107303ff554049c747f8050000004c89f848c740200300000048c740180100000048c74010030000004889500848c700f7ffffff4989c641f6c0017503ff5570eb05e9440000004c89c04883c00270ed495149564c89ca909090e831ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fd498945084c8b24244d8965004c89e84883c410c341f6c0017503ff55704c89c04883c00270f44c89cae9ebfeffff90909090|@4615,8141,@428|39,0,0 78,0,0 4615:S65|434f44455452454528292e707265436f6465283229636f7079436f6465283429696e73657274283129636f70794c616d6264612839296164644b696c6c73283129 4616:C3,296|90909090909090483b65187303ff55484c8b334983fef3756d4c8b6b08525049ff750049ff750849ff751049ff752049ff752849ff7530498b4518488d542440ff150a01000049bc01000000000000004883f80175054d89e3eb454d8d7fe84c3b7d107303ff554049c747f8020000004d89fa4d8962084c8b084d890a4d89d4488b4008eb05e996000000483b65187303ff5548ebba49bb01000000000000004d8d7fb84c3b7d107303ff554049c747f8080000004d89fa4c8b4c24304d894a384c8b04244d894230488b7c240849897a28488b742410498972204d895a18488b5c241849895a10488b54242049895208488b4c242849890a4d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89500848c700f3ffffff4883c440c34889d8c3909090|@4620,8191,@4617|72,0,0 152,0,0 4617:C3,224|90909090909090483b65187303ff55484883f801750b48b80100000000000000c34c8b304d8b264983fcf775564d8d7fd84c3b7d107303ff554049c747f8040000004d89fb4d8b56204d8953184d8b4e184d894b104d8b46104d894308498b7e0849893b5248ff70084c89db488b42f0488b72f8488b56f8ff158a0000004989c5eb1d4c8b580848b86895f7acaa2a00009090ff555849bd01000000000000004955488b442408488b54241090e855ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fb48894308488b14244889134889d84883c418c3909090|@417,8191,@4547|24,0,0 137,0,@4618 152,0,0 4618:O3|@7377,@215,@4619 4619:S26|6d616b654c6f616473202d206e6f7420616e2045787472616374 4620:S59|434f44455452454528292e707265436f6465283229636f7079436f6465283429696e73657274283129636f707950726f63436c6f73757265283229 4621:C5,216|90909090909090483b65187303ff55484c8b304983fef9756d4c8b68104d8b65004983fcfb753d4c8b5af84d8b53f84d8d7ff04c3b7d107303ff554049c747f8010000004d89f94d89295248ff70084d89c8488b1c24498b42a09090ff159e000000eb055248ff70084c8b5c24084d8b53f84d8b4af849b80100000000000000488b1c24eb05e934000000498b41b890ff15720000004c8b442408498b78f8488b77f849b80100000000000000488b1c24488b46a84883c410ff255100000048b83097f7acaa2a00009090ff555848b80100000000000000|@4624,8191,@3276,@3276,@3276|120,0,0 165,0,0 193,0,@4622 208,0,0 4622:O3|@7377,@215,@4623 4623:S21|6170706c79466e3a206e6f742061204465636c6172 4624:S70|434f44455452454528292e707265436f6465283229636f7079436f6465283429696e73657274283129636f70794465636c61726174696f6e732831296170706c79466e283129 4625:C3,112|90909090909090483b65187303ff55484883f801750b48b80100000000000000c35248ff7008488b00909090ff156600000050488b442408488b542410e8c5ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fe498946084c8b2c244d892e4c89f04883c418c3909090|@417,8191,@4626|24,0,0 4626:C8,440|90909090909090483b65187303ff55484c8b304983fef9756d4c8b6af84d8b65f84989d14c8b4008488b78104c89c3498b4424a8ff15a60100004d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89fb488903488b074883f8f375484c8b7708495149505349ff762049ff762849ff763049ff76384d8b56184d8b4e10eb05e9100100004d8b4608498b1e488b4424204c8b6c2430498b55f8ff15420100004889c2eb1a49514950534889f84d8b71f8498b56f890ff152e0100004889c24c8b224983fcfb753d4c8b5c24104d8b53f84d8b4af84d8d7ff04c3b7d107303ff554049c747f8010000004d89f849891052488b5c2410498b41a0ff15f20000004989c5eb2a4c8b5c24104d8b53f84d8b4af85249b80100000000000000488b5c2410498b41a0ff15ce0000004989c54c8b442418498b78f8488b77f8488b5c2408488b134989d0488b5c2410488b46a89090ff15aa0000004d8d7fd84c3b7d107303ff554049c747f8040000004c89f848c7401801000000488b0c24488948104c8b7424104c89700848c700f9ffffff4883c420c348b8a09af7acaa2a00009090ff555848b8010000000000000090909090|@4629,8191,@428,@4601,@4537,@3276,@3276,@3276|283,0,0 413,0,@4627 428,0,0 4627:O3|@7377,@215,@4628 4628:S21|636f70794465633a206e6f742061204465636c6172 4629:S70|434f44455452454528292e707265436f6465283229636f7079436f6465283429696e73657274283129636f70794465636c61726174696f6e73283129636f7079446563283129 4630:C5,392|90909090909090483b65187303ff55484983f80175354883f80375194989d848bb010000000000000048b80100000000000000ebd2524889d8488d5424089090ff156a0100004883c408c34d8b304d8b2e4983fdf975714c8b62f84d8b5c24f84989d14889c74889de498b4e0849ff76104889cb498b43a8ff153a0100004883f80174754951565149ff7008488b5c242048b80300000000000000498b51f890ff151a0100004d8d7fd84c3b7d107303ff554049c747f8040000004d89fe49c7461801000000eb05e9a2000000498946104c8b6c24084d896e0849c706f9ffffff49564c8b442408488b5c241848b80300000000000000eb05e939000000488b5424209090e8fdfeffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fc49894424084c8b1c244d891c244c89e04883c430c34d8d7fe84c3b7d107303ff554049c747f8020000004c89f8488970084d8b304c89304d8b40084889c34889f84c89ca4883c408e998feffff48b8189df7acaa2a00009090ff555848b80100000000000000|@4636,8191,@4633,@428,@4616|33,0,0 43,0,0 147,0,1 239,0,1 369,0,@4631 384,0,0 4631:O3|@7377,@215,@4632 4632:S29|70726f63657373436c6f73757265733a206e6f742061204465636c6172 4633:C3,232|90909090909090483b65187303ff55484883f801750b48b80100000000000000c34c8b304d8b264983fcf9755b5248ff700849ff7608498b5e1048b801000000000000004c8b5af8498b53f8ff15be0000004d8d7fd84c3b7d107303ff554049c747f8040000004d89fd49c7451801000000498945104c8b14244d89550849c74500f9ffffffeb1c4c8b580848b8909ef7acaa2a000090ff555849bd01000000000000004955488b442410488b54241890e851ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89f9498941084c8b04244d89014c89c84883c420c390909090909090|@417,8191,@4616|24,0,0 60,0,0 142,0,@4634 156,0,0 4634:O3|@7377,@215,@4635 4635:S28|6d6b4c69676874436c6f737572653a206e6f742061204465636c6172 4636:S78|434f44455452454528292e707265436f6465283229636f7079436f6465283429696e73657274283129636f70794465636c61726174696f6e7328312970726f63657373436c6f7375726573283329 4637:C4,344|90909090909090483b65187303ff55484883f801750b48b80100000000000000c34c8b304d8b2e4983fdf975554c8b62f84d8b5c24f84989d14d8b4608498b7e10488b70084c89c3498b43b8ff152e0100004883f801752f498b59f8488b53f8488b4a984c8b71f8495149505756504889f8498b56089090ff124883f8017423eb0ee9ba00000049514950575650eb13488b442408488b5424204883c428e964ffffff488b5c2420488b53f8488b4af849b80100000000000000488b5c2418488b41b890ff15be0000004d8d7fd84c3b7d107303ff554049c747f8040000004c89f84c8b34244c8970184c8b6c24104c8968104c8b6424184c89600848c700f9ffffff50488b442410488b542428909090e8f1feffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fb498943084c8b14244d89134c89d84883c430c348b8e0a0f7acaa2a0000ff555848b80100000000000000|@4640,8191,@428,@3276|24,0,0 178,0,0 323,0,@4638 336,0,0 4638:O3|@7377,@215,@4639 4639:S25|636f7079456e74726965733a204e6f742061204465636c6172 4640:S74|434f44455452454528292e707265436f6465283229636f7079436f6465283429696e73657274283129636f70794465636c61726174696f6e73283129636f7079456e7472696573283129 4641:C3,112|90909090909090483b65187303ff55484883f801750b48b80100000000000000c35248ff7008488b00909090ff156600000050488b442408488b542410e8c5ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fe498946084c8b2c244d892e4c89f04883c418c3909090|@417,8191,@4642|24,0,0 4642:C7,312|90909090909090483b65187303ff55484c8b304983fef975634c8b68104d8b65004983fc15755a5248ff700848ff7018488b4010ff15260100004c8b184983fbfb75434c8b5424104d8b4af84d8d7ff04c3b7d107303ff554049c747f8010000004d89f849890050488b5c2410498b41a0909090ff15ee000000eb2ee968000000e9620000004c8b5424104d8b4af85049b80100000000000000488b5c2410498b41a090ff15c60000004d8d7fd84c3b7d107303ff554049c747f8040000004c89f84c8b4424084c894018488b3c2448897810488b7424104889700848c700f9ffffff4883c420c3c34983feef753e52488b4008488d542408909090ff15760000004989c54d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89680848c700efffffff4883c408c3ff254d0000009090909090|@4644,8191,@4643,@3276,@3276,@4645,@4643|146,0,0 4643:C5,296|90909090909090483b65187303ff55484c8b304983fe15756452488b4008488d54240890ff15260100004d8d7fe84c3b7d107303ff554049c747f8020000004d89fd4989450849c745001500000049554883f801750c49bc0300000000000000eb344c8b184d8b134983fafb751e488b4008483b65187303ff5548ebd3e95800000049bc010000000000000049bc01000000000000004983fc017435488b0424ff15b20000004989c14d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89480848c700fbffffff4883c410c3488b04244883c410c34983fef775444c8b68184983fd0175394c8b600841f6c4017503ff55704983fc017e264c8b5af84989c14c89e3498b43a090ff154e00000048f7c0010000007504488b00c34c89c8c3c3c3909090|@4647,8191,@4646,@4523,@428|88,0,1 132,0,0 142,0,0 4644:S61|434f44455452454528292e707265436f6465283229636f7079436f6465283429696e736572742831297265636f70794465636c61726174696f6e283129 4645:C3,120|90909090909090483b65187303ff55484883f801750b48b80100000000000000c35248ff7008488b00488b52f8909090ff156a00000050488b442408488b542410e8c1ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fe498946084c8b2c244d892e4c89f04883c418c390909090909090|@417,8191,@4642|24,0,0 4646:C3,120|90909090909090483b65187303ff55484883f801750b48b80100000000000000c35248ff7008488b00488b52f8909090ff156a00000050488b442408488b542410e8c1ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fe498946084c8b2c244d892e4c89f04883c418c390909090909090|@417,8191,@4643|24,0,0 4647:S55|434f44455452454528292e707265436f6465283229636f7079436f6465283429696e736572742831297265636f707956616c7565283129 4648:C3,120|90909090909090483b65187303ff55484883f801750b48b80100000000000000c35248ff30488b4008e8d9ffffff50488b4424084c8b742410498b56f8909090ff155a0000004d8d7fe84c3b7d107303ff554049c747f8020000004d89fd4c8b24244d896508498945004c89e84883c418c3909090909090|@4546,8191,@4537|24,0,0 4649:C3,120|90909090909090483b65187303ff55484883f801750b48b80100000000000000c35248ff7008488b00488b52f8909090ff156a00000050488b442408488b542410e8c1ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fe498946084c8b2c244d892e4c89f04883c418c390909090909090|@417,8191,@4537|24,0,0 4650:O3|@4654,@4656,@4653 4651:C2,1200|90909090909090483b65187303ff55484c8b3049f7c601000000741e4983feef7c1d4983fe177f1c49bd32a9f7acaa2a00004f8d6cb54441ffe5e9b3000000e9ae000000e9a900000090e9c7020000909090e99b000000909090e9a9000000909090e992010000909090e9af000000909090e9b2000000909090e994000000909090e976000000909090e963000000909090e95b000000909090e953000000909090e98b000000909090e9e9030000909090e9c2020000909090e933000000909090e946020000909090e923000000909090e91b000000909090e9b5000000909090e9c4010000909090e9b403000090909048b80100000000000000c348b80300000000000000c348b80300000000000000c348b80300000000000000c348b80300000000000000c3488b4010e9d5feffff5248ff701048ff7018488b40089090e8c1feffff4883f8017439488b442408488b542410909090e8a9feffff4883f8017412488b0424488b5424104883c418e991feffff48b801000000000000004883c418c348b801000000000000004883c418c3524c8b70084983fe01750f48b803000000000000004883c408c349ff7608498b06488b542408909090e845feffff4883f80174224c8b34244883c408483b65187303ff5548ebbe48b801000000000000004883c410c348b801000000000000004883c410c35248ff701048ff7018488b4008909090e8f9fdffff4883f8017474488b14244883fa01750c48b90300000000000000eb4548ff7208488b02488b542418909090e8c9fdffff4883f801741d488b14244883c408483b65187303ff5548ebc148b9010000000000000048b901000000000000004883c4084883f9017418488b442408488b5424104883c418e97ffdffffe90f00000048b801000000000000004883c418c348b801000000000000004883c418c352488b48084883f901750f48b803000000000000004883c408c348ff7108488b01488b542408e831fdffff4883f8017422488b0c244883c408483b65187303ff5548ebc148b801000000000000004883c410c348b801000000000000004883c410c3488b4008e9f1fcffff52488b48084883f901750f48b803000000000000004883c408c348ff7108488b01488b54240890e8c5fcffff4883f8017422488b0c244883c408483b65187303ff5548ebc048b801000000000000004883c410c348b801000000000000004883c410c3488b48104c8b314983fefb756b4c8b690849f7c501000000741d4c8b580848b8b055edacaa2a00009090ff555849bc01000000000000004d89ec5248ff700849554c89e348b8cd0000000000000048ba3038600000000000909090ff124883f801746b4c8b642410488b5c2408488b0424498b542408eb05e9970000009090ff124883f80174564c8b5c24084983fb01750f48b803000000000000004883c418c349ff7308498b03488b542418909090e8d9fbffff4883f801742c4c8b1c244883c408483b65187303ff5548ebbee93200000048b80100000000000000e9140000004883c420c348b801000000000000004883c420c348b801000000000000004883c418c348b801000000000000004883c418c348b80100000000000000c348b80300000000000000c3488b4008e95bfbffff90909090|@4652,8191|42,0,$4651+74 244,0,0 255,0,1 266,0,1 277,0,1 288,0,1 376,0,0 391,0,0 417,0,1 477,0,0 492,0,0 544,0,1 601,0,0 611,0,0 655,0,0 670,0,0 696,0,1 753,0,0 768,0,0 803,0,1 861,0,0 876,0,0 921,0,@339 936,0,0 959,0,102 969,0,I150 1037,0,1 1102,0,0 1122,0,0 1137,0,0 1152,0,0 1167,0,0 1178,0,1 4652:S28|434f44455452454528292e7369646545666665637446726565283129 4653:O2|I15,@4660 4654:C2,512|5250534c8b721049bd01000000000000004983fe0175054d89eceb514983fd01740c49bb0300000000000000eb234c8b5c2408498b1e4c3bdb750c49bb0300000000000000eb0a49bb01000000000000004d89dd4d8b7608483b65187303ff5548ebae49bc01000000000000004983fc01740f48b803000000000000004883c418c34c8b5c2410498b5b0848ba01000000000000004883fb0175054889d1eb514883fa01740c48b80300000000000000eb23488b4424084c8b33493bc6750c48b80300000000000000eb0a48b801000000000000004889c2488b5b08483b65187303ff5548ebae48b901000000000000004883f901745b488b042448f7c001000000756e4c8b700849f7c60100000075664d8b2e4d8b65004983fcfb755e4d8b5e084983fb017559498b5d0848f7c301000000750f48b803000000000000004883c418c348f7c301000000740a4889daeb1ee99300000048b86055edacaa2a00009090ff555848ba0100000000000000eb14e964000000e950000000e93c000000e9280000004883fa01750c48b90300000000000000eb0a48b901000000000000004889c84883f0024883c418c348b801000000000000004883c418c348b801000000000000004883c418c348b801000000000000004883c418c348b801000000000000004883c418c348b801000000000000004883c418c390909090909090|@4655,7695|9,0,0 36,0,1 61,0,1 73,0,0 101,0,0 117,0,1 141,0,0 168,0,1 193,0,1 205,0,0 233,0,0 311,0,1 345,0,@336 360,0,0 398,0,1 410,0,0 432,0,0 447,0,0 462,0,0 477,0,0 492,0,0 4655:S35|434f44455452454528292e736964654566666563744672656552545343616c6c283229 4656:O2|I109,@4657 4657:O2|I110,@4658 4658:O2|I241,@4659 4659:O2|I246,0 4660:O2|I17,@4661 4661:O2|I24,@4662 4662:O2|I25,@4663 4663:O2|I26,@4664 4664:O2|I27,@4665 4665:O2|I28,@4666 4666:O2|I29,@4667 4667:O2|I105,@4668 4668:O2|I106,@4669 4669:O2|I107,@4670 4670:O2|I108,@4671 4671:O2|I111,@4672 4672:O2|I112,@4673 4673:O2|I113,@4674 4674:O2|I114,@4675 4675:O2|I115,@4676 4676:O2|I117,@4677 4677:O2|I118,@4678 4678:O2|I119,@4679 4679:O2|I120,@4680 4680:O2|I121,@4681 4681:O2|I122,@4682 4682:O2|I123,@4683 4683:O2|I125,@4684 4684:O2|I126,@4685 4685:O2|I127,@4686 4686:O2|I128,@4687 4687:O2|I130,@4688 4688:O2|I136,@4689 4689:O2|I137,@4690 4690:O2|I138,@4691 4691:O2|I139,@4692 4692:O2|I140,@4693 4693:O2|I141,@4694 4694:O2|I189,@4695 4695:O2|I196,@4696 4696:O2|I213,@4697 4697:O2|I214,@4698 4698:O2|I216,@4699 4699:O2|I217,@4700 4700:O2|I218,@4701 4701:O2|I223,@4702 4702:O2|I229,@4703 4703:O2|I230,@4704 4704:O2|I231,@4705 4705:O2|I232,@4706 4706:O2|I233,@4707 4707:O2|I234,@4708 4708:O2|I238,@4709 4709:O2|I239,@4710 4710:O2|I240,@4711 4711:O2|I242,@4712 4712:O2|I243,@4713 4713:O2|I244,@4714 4714:O2|I245,@4715 4715:O2|I247,@4716 4716:O2|I248,@4717 4717:O2|I249,@4718 4718:O2|I250,@4719 4719:O2|I251,@4720 4720:O2|I252,@4721 4721:O2|I253,@4722 4722:O2|I152,0 4723:O2|@5054,@4528 4724:C3,56|90909090909090483b65187303ff55485253495049524951488b5c2440488d5424289090ff15360000004883c428c2380090909090909090|@4818,8191,@4725| 4725:C93,13976|90909090909090488dbc24f8feffff483b7d187303ff55504c8b3049f7c601000000741e4983feeb7c1d4983fe177f1c49bdb2b7f7acaa2a00004f8d6cb55441ffe5e9c3000000e9be000000e9b900000090e9e5340000909090e9691b0000909090e9a3000000909090e9421a0000909090e9200e0000909090e957310000909090e9a80d0000909090e97b000000909090e998160000909090e949010000909090e9af160000909090e99c000000909090e953000000909090e9741b0000909090e9cb310000909090e924010000909090e9b6350000909090e9572e0000909090e9c8300000909090e935000000909090e99f2b0000909090e9b02b0000909090e9b231000090909048b8304bf7acaa2a0000909090ff555848b801000000000000004889c34d8d7fe84c3b7d107303ff554049c747f8020000004c89f84889580848c70001000000c35248ff701048bb0100000000000000488b4008909090e8a1feffff9090ff15523500005048bb0100000000000000488b442408488b5424109090e87dfeffff9090ff15363500004d8d7fe04c3b7d107303ff554049c747f8030000004d89fc49894424104c8b1c244d895c240849c70424010000004d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89600848c700010000004883c418c348b808f1f7acaa2a0000c3525348ff700848ff701848bb0100000000000000488b40109090e8f5fdffff4c8b184983fbff750a4c8b50084d8b6218eb254d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fc49c7042401000000504c8b5424204954498b5a104883fb01750c48ba0100000000000000eb46488b034c8b70084c8b2c244d3bf5751d4d8d7ff04c3b7d107303ff554049c747f8010000004c89fa488902eb19488b5b08483b65187303ff5548ebb248ba01000000000000004c8b6424084d8b14244983faff750b498b5c24084c8b5b20eb0a49bb380dedacaa2a000048f7c20100000075144889d0488d54243090ff15e63300004883c430c34d8b0b4983f9f3756e4d8b43085050498b304d8b70084d8b682849b8010000000000000048bb810000000000000048b8170000000000000048ba7015600000000000909090ff1248c700150000004d8d7fe84c3b7d107303ff554049c747f8020000004d89f84989400849c700ffffffff4d8d7ff0eb05e9a90a00004c3b7d107303ff554049c747f80100000049c647ff404c89ff4c89074889e348893b4889e248c74208010000004d8d7fe84c3b7d107303ff554049c747f8020000004c89f9488b04244889014c8b4424084c89410850505149b8010000000000000048bb810000000000000048b8170000000000000048ba701560000000000090ff1248c700150000004d8d7fe84c3b7d107303ff554049c747f8020000004c89ff4889470848c707ffffffff4d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89fb48893b488d54240848891a488d4c240848c74108010000004d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b4424084c8900488b7c24104889780850505049b8010000000000000048bb810000000000000048b8170000000000000048ba7015600000000000909090ff1248c700150000004d8d7fe84c3b7d107303ff554049c747f8020000004c89fb4889430848c703ffffffff4d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89fa48891a488d4c2408488911488d44240848c74008010000004d8d7fe84c3b7d107303ff554049c747f8020000004d89f8488b7c2408498938488b5c2410498958085649564955495048ba0100000000000000488b4c24784883f90175054889d0eb2df6c2017503ff55704989d64983c60270f4488b49084c89f2483b65187303ff5548ebd248b8010000000000000049be01000000000000004989c54d23ee41f6c5017503ff55704d89f54c2be84d8d6d0170f150488b9c24800000004c89e8488d942498000000909090ff151a31000050488b5c2458488b442450909090ff150e3100004d8d7fe04c3b7d107303ff554049c747f8030000004d89fc49bb20f1f7acaa2a00004d891c244c8b5424104d895424104c8b4c24484d894c24084c8b8424980000004d8d7fd84c3b7d107303ff554049c747f8040000004c89ff48be78f2f7acaa2a00004889374c895718498b583848895f10498b50f0488957084889c14d8d7fe84c3b7d107303ff554049c747f8020000004c89f848c74008010000004c8b7424184c89304c89e690ff15663000004883f8017402eb384d8d7fe84c3b7d107303ff554049c747f8020000004c89f848c7400803000000488b5c24184889189090ff15363000004883f8017502eb6f4d8d7fd04c3b7d107303ff554049c747f8050000004c89fa48b8e0f3f7acaa2a00004889024c8b7424784c89722048894a184c894a104d8b68384c896a084d8d7fe84c3b7d107303ff554049c747f8020000004d89fc49bb00f7f7acaa2a00004d891c2449897c24084d8d7fe8eb05e9dd0000004c3b7d107303ff554049c747f8020000004d89fa49b9b0f7f7acaa2a00004d890a498952084d8d7fe84c3b7d107303ff554049c747f8020000004c89ff48bb60f8f7acaa2a000048891f488977084d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48b900f9f7acaa2a000048890a488b442410488942084d8b58284983fb01740c49b90300000000000000eb084c8b8c2480000000495549ff7030495149ff702048ffb424b000000049ff701049ff70084d89d14989d24c89ce4989f9498b58f84989f04889da4c89e3488b4424609090ff124889c3eb764d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89fa48c702010000004d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89f848c7000100000050504989ce4989fd4989d44989c349b8010000000000000048bb810000000000000048b81700000000000000eb05e96c03000048ba7015600000000000ff1248c700150000004d8d7fe84c3b7d107303ff554049c747f8020000004d89fa4989420849c702ffffffff4d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89f84d89104889e74c89074889e348c74308010000004d8d7fe84c3b7d107303ff554049c747f8020000004c89fa488b0c2448890a488b442408488942084c8b9424a80000004d8b4230498b38488b5c24184889f94823cbf6c1017503ff5570488d4fff4803cb70f44989084d8d7fc04c3b7d107303ff554049c747f8070000004c89f848b9d0f9f7acaa2a00004889084c897030498b4a3848894828488950204c8960184c8958104889580852504956495449535649555748b80100000000000000488d9424f00000009090ff15462d00004c8b7424184d8b2e4983fd01746e4c8ba424e80000004d8b5c24304d8b1341f6c2017503ff55704d89d14983c10270f44d890b4d8d7fd04c3b7d107303ff554049c747f8050000004d89f849c740200100000049c740180100000049c74010030000004d89500849c700f7ffffff4889c149524950488b5c2468eb05e92a01000048b80300000000000000488d942400010000909090ff15b22c00004d8d7fd84c3b7d107303ff554049c747f8040000004d89fe49c74618010000004c8b2c244d896e104989460849c706090000004d89f14889c890ff157a2c00004d8d7fd84c3b7d107303ff554049c747f8040000004d89f849c740180100000049894010488b7c24084989780849c700f9ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fe48c74608010000004c89064d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89fb48c703010000004883fe0175254d8d7fe84c3b7d107303ff554049c747f8020000004c89fb4c894b0848c70301000000eb6d4d8d7fe04c3b7d107303ff554049c747f8030000004c89fb4c894b104889730848c70303000000eb6f4c8b6424204d8b1c244983fb017465ff159e2b00004889c1488b5c245848b80100000000000000488d9424f0000000ff15862b00004d8d7fe04c3b7d107303ff5540eb05e95000000049c747f8030000004d89fe4989461049894e0849c706ffffffff4d8d7fe84c3b7d10730feb0ae925000000e91b000000ff554049c747f8020000004c89fb4c89730848c70301000000eb034889c350504883c46053488b5c2470488b442468909090ff15122b0000488b5c2448488b442440ff150a2b00004c8b14244d8b024983f8ff750a498b7a084c8b4f10eb104983f80375064d8b4a10eb044d8b4a084983f8ff750a498b7208488b7e20eb0a48bf380dedacaa2a00004983f8ff750a498b5a08488b7308eb0a48be28fff7acaa2a0000488b9c2480000000488b0b4883f9ff7509488b4308488b10eb164883f9037506488b5308eb0a48ba01000000000000004983f8ff75094d8b7208498b06eb164983f8037506498b4208eb0a48b801000000000000004883f80175074c8b742408eb21504989d5488b442410488d9424b0000000ff153e2a00004989c64883c4084c89ea4983fe0175054989d4eb1a49564889d0488d9424b0000000ff151e2a00004989c44883c4084983f8ff750a498b52084c8b5a18eb244d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fb49c703010000004d8d7fd04c3b7d107303ff554049c747f8050000004c89fa48897a204c895a184c894a10488972084c8922488b074883f8fd75604983fc01752b4d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89480848c700010000004881c4a8000000c34d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c8948104c89600848c700030000004881c4a8000000c34d8d7fe84c3b7d107303ff554049c747f8020000004c89f84889500848c700ffffffff4881c4a8000000c348b80100000000000000488d54243090ff15162900004883c430c34d8d7fd84c3b7d107303ff554049c747f8040000004d89fc4c8b58204d895c24184c8b50184d895424104c8b48104d894c24084c8b40084d8904244d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c895010488b7a38488978084c8920488b52e8ff224c8b60084c8b5a3841f6c3017503ff55704d89da4983c20270f450504989d14889c649b8010000000000000048bb810000000000000048b8170000000000000048ba7015600000000000909090ff1248c700150000004d8d7fe84c3b7d107303ff554049c747f8020000004c89fb4889430848c703ffffffff4d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89fa48891a4889e14889114889e048c74008010000004d8d7fe84c3b7d107303ff554049c747f8020000004d89fe4c8b2c244d892e4c8b4424084d894608505049b8010000000000000048bb810000000000000048b8170000000000000048ba701560000000000090ff1248c700150000004d8d7fe84c3b7d107303ff554049c747f8020000004c89ff4889470848c707ffffffff4d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89fb48893b4889e248891a4889e148c74108010000004d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b04244c8900488b7c2408488978084d8d7fd84c3b7d107303ff554049c747f8040000004c89fb48ba88fff7acaa2a0000488913498b49e848894b184c8973104c8953084d8d7fd84c3b7d107303ff554049c747f8040000004c89fa49bb8801f8acaa2a00004c891a4d8b59f04c895a18488942104c8952084d8d7fe04c3b7d107303ff554049c747f8030000004d89fd48bff003f8acaa2a000049897d00498945104d8975084d8d7fe84c3b7d107303ff554049c747f8020000004d89fe48bf4005f8acaa2a000049893e498956084d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48bfe805f8acaa2a000048893a48895a084d8d7fe84c3b7d107303ff554049c747f8020000004c89fb48bf9006f8acaa2a000048893b4c896b084d8d7fe84c3b7d107303ff554049c747f8020000004d89fd48bf2807f8acaa2a000049897d00498945084d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89f848c7000300000049515649ff74240849ff74242049ff74242849524952506a0149ff71206a0149ff711049ff71084d89ea4d8b69f84989d94989d04c89f3498b04244c89eaff124d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fc49c70424010000004c8b5c24284d8d7fe04c3b7d107303ff554049c747f8030000004d89fa49b9f007f8acaa2a00004d890a4d8b43384d8942104d8962084d8d7fe04c3b7d107303ff554049c747f8030000004c89ff48be600af8acaa2a0000488937498b5bf048895f104c8957084c89e1909090ff15f62400004d8d7fe84c3b7d107303ff554049c747f8020000004d89fe49bd200cf8acaa2a00004d892e49897e084c8b6424284d8b5c24f8514c8b4424084c89f3498b53089090ff1250504c8b5424204983fa03756d4d8d7fb84c3b7d107303ff554049c747f8080000004d89f949c741380100000049c741300100000049c74128030000004c8b4424284d89412049c7411801000000488b7c241849897910488b742430498971084989014d8d7fe84c3b7d107303ff554049c747f802000000eb05e9880000004c89fb4c894b0848c703f3ffffff4d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89fa48c70201000000488b4c24404d8d7fd04c3b7d107303ff554049c747f8050000004c89f8488958204889501849bed095edacaa2a00004c8970104c8b69f04c89680848c700010000004989e449c70424ffffffff4989e349894308eb6f4983fa01756e4c8b4c24104d8b014d8d7fb84c3b7d107303ff554049c747f8080000004c89ff48c747380100000048c747300100000048c7472801000000488b742428488977204c894718488b5c241848895f10488b542430488957084889074d8d7fe84c3b7d107303ff5540eb0ae9ca020000e9a800000049c747f8020000004c89f94889790848c701f3ffffff4d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89f848c700010000004c8b7424404d8d7fd04c3b7d107303ff554049c747f8050000004d89fd4c8b6424384d8965204989451849894d104d8b5ee84d895d0849c74500010000004d8b14244983fafd75134989e149c701010000004989e049894808eb6d4989e149c701ffffffff4989e04d896808eb5f4989c14d8d7fe84c3b7d107303ff554049c747f8020000004c89f848c74008ffffffff4c8910ff15662200004883f80174414c8b442440495149ff70084c89c848bac80cf8acaa2a0000ff154a220000488b3c24504823c7eb0ae9be010000e9b9010000a801587503ff5570483bc77d13eb05495150eb0c48befdffffffffffffffeb05488b7424304c8b442420498b384d8d7fb84c3b7d107303ff554049c747f8080000004c89fb48c743380100000048c743300100000048897328488b5424384889532048897b18488b4c242848894b10488b442440488943084c8b7424084c89334d8d7fe84c3b7d107303ff554049c747f8020000004d89fd49895d0849c74500f3ffffff4d8b204983fc0175144c8b542450564c89e8498b5220ff124989c3eb044d89eb564d8d7fb84c3b7d107303ff554049c747f8080000004d89fa49c742380100000049c74230010000004c8b0c244d894a284c8b4424404d89422049c7421801000000488b7c243049897a10488b74244849897208488b5c241049891a4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa4c89520848c702f3ffffff4d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89f948c70101000000488b4424584d8d7fd04c3b7d107303ff554049c747f8050000004d89fe4989562049894e184d895e104c8b68f04d896e0849c706010000004c8d64241849c70424ffffffff4c8d5c24184d8973084883c4184d8d7fe84c3b7d107303ff554049c747f8020000004d89fa4c8b0c244d890a4c8b4424084d8942084952488b5c2468488b44246090ff154a200000488b5c2458488b442450ff1542200000488b04244883c470c34989c44d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89600848c70001000000c34d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fc49c70424010000004d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fb49c703010000004d8d7fe84c3b7d107303ff554049c747f8020000004d89fa49c74208010000004c8b48084d890a4983fa0175064c8b4010eb2449524889d7488b70104889f0488d54240890ff15861f00004989c04883c4084889faeb04488b70104d8d7fe84c3b7d107303ff554049c747f8020000004c89ff4c89470848c707130000004d8d7ff04c3b7d107303ff554049c747f8010000004c89f94c89194d8d7fe84c3b7d107303ff554049c747f8020000004c89f849be801af8acaa2a00004c89304c8960084d8d7fe84c3b7d107303ff554049c747f8020000004d89fd4d895d08498945004d8d7fe84c3b7d107303ff554049c747f8020000004d89fa4c8b42104d8942084d892a52534951564954495348ff723848ff723048ff722848ff722051495248ff72084c8b52e04c8b4ad84c8b42e8488b5af04889f8488b52f890ff12488b7c2408488b374883fe0175724d8d7fe84c3b7d107303ff554049c747f8020000004c89fb48c7430801000000488b5424184889134883fb017507488b4c2410eb1853488b442418488d542438ff15461e00004889c14883c4084d8d7fe84c3b7d107303ff554049c747f8020000004c89f84889480848c70013000000eb05e913000000488b5c2420488b5424284883c430e991e6ffff488b442410488d542430ff15fa1d0000488b5c24284d8d7ff04c3b7d107303ff554049c747f8010000004c89fa488b0c2448890a4d8d7fe84c3b7d107303ff554049c747f8020000004d89fe49bd101bf8acaa2a00004d892e4c8b6424084d8966084d8d7fe84c3b7d107303ff554049c747f8020000004d89fb49894b084d89334d8d7fe84c3b7d107303ff554049c747f8020000004d89fa4c8b4b104d894a084d891a5048ff733848ff733048ff732848ff732052495248ff73084c8b53e04c8b4bd84c8b43e8488b7bf0488b73f84889fb488b4424584889f2909090ff129090ff152a1d00004d8d7fe04c3b7d107303ff554049c747f8030000004c89fb488b1424488953104889430848c703ffffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89f84889580848c700010000004883c438c348f7c301000000756e4c8b621049f7c40100000075664d8b1c244c8b134d8b4b084d3bd1741948b8581bf8acaa2a00009090ff555848b801000000000000005249ff33488b4008488d542410909090ff158a1c00004c8b4424084889c74d8d7fe04c3b7d107303ff554049c747f8030000004c89f8eb0ae983000000e967000000498b70384889701048c7400803000000488938488b1424909090ff124d8d7fe84c3b7d107303ff554049c747f8020000004c89fb4889430848c703f1ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89f84889580848c700010000004883c410c348b8a81bf8acaa2a0000ff555848b8010000000000000048b8a81bf8acaa2a000090ff555848b801000000000000005248bb0100000000000000488b40089090e829e4ffff9090ff15b21b00004d8d7fe84c3b7d107303ff554049c747f8020000004d89fc498944240849c70424edffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89600848c700010000004883c408c3525348ff701048ff701848bb0100000000000000488b40089090e8b5e3ffff9090ff15461b00004c8b204983fcfb75544c8b58084983fb0175324c8b14244d8b0a4983f9fd750f48b8f81bf8acaa2a00004883c420c3488b5c24104c89d0488b5424184883c420e968e3ffff488b5c2410488b442408488b5424184883c420e950e3ffff50488b5c2418488b442410488b5424209090e839e3ffff50488b5c2420488b442410488b542428909090e821e3ffff504c8b5c24084d8b0b4983f9ff750a4d8b43084d8b5010eb104983f90375064d8b5310eb044d8b53084983f9ff7509498b7b084c8b07eb164983f90375064d8b4308eb0a49b80100000000000000488b304883feff750a488b5808488b7b10eb104883fe037506488b7810eb04488b78084883feff7509488b5008488b1aeb164883fe037506488b5808eb0a48bb0100000000000000498b124883fafb75704983f801756f488b0f4883f9fb756b4883fb01756a4d8b72084c8b6f084d3bf575624c8b6424304d8b4424f84952488b442418498b5010ff124883f801740a488b4424104883c440c34d8d7fe84c3b7d107303ff554049c747f8020000004c89ff48c7470801000000488b742418eb19e924030000e9ab020000e932020000e9bb010000e9890000004889374d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89fb48c703010000004883ff01752c4d8d7fe84c3b7d107303ff554049c747f8020000004c89f8488b14244889500848c700010000004883c440c34d8d7fe04c3b7d107303ff554049c747f8030000004c89f8488b1424488950104889780848c700030000004883c440c350504983fe03751f4983fd0175194989e449c70424010000004989e0488b5c242049895808eb714983fe0175704983fd03756f4d8d7fe84c3b7d107303ff554049c747f8020000004d89fc49c7442408010000004c8b4424204d8904244d8d7fd84c3b7d107303ff554049c747f8040000004c89fb48c743180300000049b8d0a8edacaa2a00004c8943104c89630848c70309000000eb0fe963000000e919000000e9140000004989e449c70424010000004989e049895808eb454d8d7fd84c3b7d107303ff554049c747f8040000004d89fc49897c24184d895424104c8b4424204d8944240849c70424050000004889e348c703010000004989e04d8960084d8d7fe84c3b7d107303ff554049c747f8020000004c89f8488b3424488930488b5c2408488958084883c448c34c89d890ff15da1700004989c1488b0424909090ff15d21700004d8d7fd84c3b7d107303ff554049c747f8040000004d89f8498940184d894810488b7424104989700849c700050000004d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89400848c700010000004883c438c34c89d8909090ff15761700004989c1488b0424909090ff156e1700004d8d7fd84c3b7d107303ff554049c747f8040000004d89f8498940184d894810488b7424104989700849c700050000004d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89400848c700010000004883c438c34c89d8909090ff15121700004889c1488b0424909090ff150a1700004d8d7fd84c3b7d107303ff554049c747f8040000004d89fe4989461849894e104c8b6c24104d896e0849c706050000004d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89700848c700010000004883c438c34883fa157559488b0f4883f915755549ff720848ff770849be01000000000000004c8b6c24084983fd0175054d89f4eb3841f6c6017503ff55704d89f34983c30270f44d8b6d084d89de483b65187303ff5548ebd149bc0100000000000000e9b0040000e973010000495449bb01000000000000004c8b5424084983fa0175054d89d9eb2e41f6c3017503ff55704d89d84983c00270f44d8b52084d89c3483b65187303ff5548ebd149b901000000000000004c8b042449504d0bc141f6c00149587503ff55704d3bc1756f48bf0100000000000000488b7424104883fe0175054889fbeb2e40f6c7017503ff55704889fa4883c20270f4488b76084889d7483b65187303ff5548ebd148bb0100000000000000488b542448488b4a30488b01a8017503ff55704989c64983c60270f44c8931534c8b542410eb05e9290000004c8b4c241849b8010000000000000048bb0100000000000000488d542458ff15561500004883c450c3488b442420ff154e1500004889c7488b4424189090ff15461500004d8d7fd84c3b7d107303ff554049c747f8040000004c89fe4889461848897e10488b5c242848895e0848c706050000004d8d7fe84c3b7d107303ff554049c747f8020000004c89f84889700848c700010000004883c450c34883f917756a4c8b77084d8b2e4983fdf775624d8b66104983fc03755d4d8b46184983f801755849ff720848ff771049ff760848bb01000000000000004c8b5c24104983fb0175054989daeb41f6c3017503ff55704989d94983c10270f44d8b5b084c89cb483b65187303ff5548ebd2e94f020000e9d6010000e95d010000e9e400000049ba01000000000000004c8b4c240849514d0bca41f6c10149597503ff55704d3bca754d4d8d7ff04c3b7d107303ff554049c747f8010000004d89f8488b3c24498938495149ba01000000000000004c8b4c241848bb01000000000000004889f8488d542458ff15061400004883c450c3488b442420ff15fe1300004989c0488b4424189090ff15f61300004d8d7fd84c3b7d107303ff554049c747f8040000004c89ff488947184c894710488b7424284889770848c707050000004d8d7fe84c3b7d107303ff554049c747f8020000004c89f84889780848c700010000004883c450c34c89d8909090ff159a1300004889c6488b0424909090ff15921300004d8d7fd84c3b7d107303ff554049c747f8040000004c89fb4889431848897310488b5424104889530848c703050000004d8d7fe84c3b7d107303ff554049c747f8020000004c89f84889580848c700010000004883c438c34c89d8909090ff15361300004989c1488b0424909090ff152e1300004d8d7fd84c3b7d107303ff554049c747f8040000004d89f8498940184d894810488b7424104989700849c700050000004d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89400848c700010000004883c438c34c89d8909090ff15d21200004989c1488b0424909090ff15ca1200004d8d7fd84c3b7d107303ff554049c747f8040000004d89f8498940184d894810488b7424104989700849c700050000004d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89400848c700010000004883c438c34c89d8909090ff156e1200004989c1488b0424909090ff15661200004d8d7fd84c3b7d107303ff554049c747f8040000004d89f8498940184d894810488b7424104989700849c700050000004d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89400848c700010000004883c438c34883fa17756f498b4a084c8b314983fef775674c8b69104983fd0375624c8b61184983fc01755d4c8b074983f815755949ff721048ff710848ff770848bb01000000000000004c8b1c244983fb0175054989daeb48f6c3017503ff55704989d94983c10270f44d8b5b084c89cb483b6518731eeb19e976050000e9fd040000e984040000e90b040000e9f2000000ff5548ebb749ba01000000000000004c8b4c241049514d0bca41f6c10149597503ff55704d3bca75564d8d7ff04c3b7d107303ff554049c747f8010000004d89f8488b7c240849893849514c8b54240849b901000000000000004c89c649b801000000000000004889f34889f8488d5424589090ff150e1100004883c450c3488b442420ff15061100004989c0488b4424189090ff15fe1000004d8d7fd84c3b7d107303ff554049c747f8040000004c89ff488947184c894710488b7424284889770848c707050000004d8d7fe84c3b7d107303ff554049c747f8020000004c89f84889780848c700010000004883c450c34983f8177570488b5f084c8b1b4983fbf775684c8b4b104983f9037563488b73184883fe01755e498b4210488b571050480bc2a801587503ff5570483bc2756e4d8d7ff04c3b7d107303ff554049c747f8010000004c89f84c8b71084c89304d8d7ff04c3b7d107303ff554049c747f801000000eb14e925020000e9ac010000e933010000e9ba0000004d89fe4c8b6b084d892e49ff721049ba010000000000000049b90100000000000000eb05e91e0000004d89f04c8b5b084889c34c89d8488d54244090ff15e20f00004883c438c3488b442408ff15da0f00004889c1488b0424909090ff15d20f00004d8d7fd84c3b7d107303ff554049c747f8040000004d89fe4989461849894e104c8b6c24104d896e0849c706050000004d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89700848c700010000004883c438c3488b44240890ff15760f00004889c1488b0424909090ff156e0f00004d8d7fd84c3b7d107303ff554049c747f8040000004d89fe4989461849894e104c8b6c24104d896e0849c706050000004d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89700848c700010000004883c438c3488b44240890ff15120f00004889c6488b0424909090ff150a0f00004d8d7fd84c3b7d107303ff554049c747f8040000004c89fa4889421848897210488b4c241048894a0848c702050000004d8d7fe84c3b7d107303ff554049c747f8020000004c89f84889500848c700010000004883c438c3488b44240890ff15ae0e00004989c1488b0424909090ff15a60e00004d8d7fd84c3b7d107303ff554049c747f8040000004c89fe488946184c894e10488b5424104889560848c706050000004d8d7fe84c3b7d107303ff554049c747f8020000004c89f84889700848c700010000004883c438c34c89d8909090ff154a0e00004889c6488b0424909090ff15420e00004d8d7fd84c3b7d107303ff554049c747f8040000004c89fb4889431848897310488b5424104889530848c703050000004d8d7fe84c3b7d107303ff554049c747f8020000004c89f84889580848c700010000004883c438c34c89d8909090ff15e60d00004989c1488b0424909090ff15de0d00004d8d7fd84c3b7d107303ff554049c747f8040000004d89f8498940184d894810488b7c24104989780849c700050000004d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89400848c700010000004883c438c34c89d8909090ff15820d00004989c1488b0424909090ff157a0d00004d8d7fd84c3b7d107303ff554049c747f8040000004d89f8498940184d894810488b7c24104989780849c700050000004d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89400848c700010000004883c438c34c89d8909090ff151e0d00004989c1488b0424909090ff15160d00004d8d7fd84c3b7d107303ff554049c747f8040000004d89f8498940184d894810488b7c24104989780849c700050000004d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89400848c700010000004883c438c34c89d8909090ff15ba0c00004889c1488b0424909090ff15b20c00004d8d7fd84c3b7d107303ff554049c747f8040000004d89fe4989461849894e104c8b6c24104d896e0849c706050000004d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89700848c700010000004883c438c35253488b4008488d542410909090ff154e0c00004883c410c350504989d44c8b580849b8010000000000000048bb810000000000000048b8170000000000000048ba7015600000000000ff1248c700150000004d8d7fe84c3b7d107303ff554049c747f8020000004d89fa4989420849c702ffffffff4d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89f94d89114989e04d89084889e748c74708010000004d8d7fe84c3b7d107303ff554049c747f8020000004c89fe488b1c2448891e488b542408488956084d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89f948c70103000000515649545050504989e04c89db48b80300000000000000488d542440909090ff15520b00004d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b7424084c89700848c700150000004c8b6c24284d8b65004983fc01742e909090ff151a0b00004d8d7fe84c3b7d107303ff554049c747f8020000004d89fb4989430849c703fbffffffeb034989c34d8d7fe84c3b7d107303ff554049c747f8020000004d89fa4c8b4c24104d894a0849c7021500000049534952488b5c2448488b442440ff15be0a00004c8b4424284d8d7fe04c3b7d107303ff554049c747f8030000004c89ff48bee808edacaa2a000048893748894710498b583848895f084d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89fa48c702010000004d8d7fe84c3b7d107303ff554049c747f8020000004c89f948b8f007edacaa2a0000488901488979084d8d7fd04c3b7d107303ff554049c747f8050000004d89fe4c8b2c244d896e20498956184c8b6424084d89661049894e084c8b5c24104d891e4d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89700848c700ffffffff4883c450c35248ff701048bb0100000000000000488b4008e8b9d0ffff4c8b184983fbff750a4c8b50084d8b6220eb0a49bc380dedacaa2a00004983fbff750a4c8b48084d8b5110eb104983fb0375064c8b5010eb044c8b5008504d8b0c244983f91575154c89e0488d5424189090ff15720900004883c418c34d8b024983f8fb756d4c89d3488b442408ff155e090000488b3c24488b1f4883fbff7509488b5708488b32eb164883fb037506488b7708eb0a48be01000000000000004d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89fa48c702010000004883fe0175324889c14d8d7fe8eb05e9530000004c3b7d107303ff554049c747f8020000004c89f84889480848c700010000004883c418c34889c14d8d7fe04c3b7d107303ff554049c747f8030000004c89f8488948104889700848c700030000004883c418c3488b304883feff750a488b5808488b7b10eb104883fe037506488b7810eb04488b7808488b174883fa0b75164889fb488b442408909090ff15720800004889c3eb484883fafb75164889fb488b442408909090ff155e0800004889c3eb2c4d8d7fe04c3b7d107303ff554049c747f8030000004c89fb488b4c240848894b1048897b0848c7030d000000488b04244c8b284983fdff750a4c8b60084d8b3424eb164983fd0375064c8b7008eb0a49be01000000000000004d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fc49c70424010000004983fe0175284d8d7fe84c3b7d107303ff554049c747f8020000004c89f84889580848c700010000004883c418c34d8d7fe04c3b7d107303ff554049c747f8030000004c89f8488958104c89700848c700030000004883c418c34989c44d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89600848c70001000000c3525348ff701048ff701848bb0100000000000000488b4008909090e811ceffff9090ff153a07000050488b442408488d542428909090ff152e07000050488b5c2420488b442418488b542428909090e8ddcdffff9090ff15160700004d8d7fd84c3b7d107303ff554049c747f8040000004d89fc4c8b1c244d895c241849894424104c8b5424084d8954240849c70424f5ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89600848c700010000004883c430c34989c44d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89600848c70001000000c35248ff701048bb0100000000000000488b400890e835cdffff4c8b184983fbff750a4c8b50084d8b6210eb104983fb0375064c8b6010eb044c8b60084d8b0c244983f9f7750c49ba0100000000000000eb1d4989c048b8281cf8acaa2a0000909090ff555849ba01000000000000004c8b442408498b7830488b37488b1c244889f24823d3f6c2017503ff5570488d56ff4803d370f44889174d8d7fe04c3b7d107303ff554049c747f8030000004c89f949be801cf8acaa2a00004c8931488971104889410850564889cb488b442410909090ff15be0500004d8d7fe84c3b7d107303ff554049c747f8020000004d89fd49bcc025f8acaa2a00004d8965004c8b1c244d895d08504c89eb488b442418909090ff15860500004c8b5424104d8b024983f8ff750a498b7a084c8b4f10eb104983f80375064d8b4a10eb044d8b4a084d8d7fe04c3b7d107303ff554049c747f8030000004c89ff488b742418488977104c894f0848c707170000004d8d7fe84c3b7d107303ff554049c747f8020000004c89fb4889430848c703150000004983f8ff7509498b4a08488b11eb164983f8037506498b5208eb0a48ba0100000000000000488b04244883f80175054889d1eb144889d0488d542428909090ff15d20400004889c14d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fe49c706010000004c8b6c24204d8d7fe84c3b7d107303ff554049c747f8020000004d89fc49bb9826f8acaa2a00004d891c244d8b4d384d894c24084d8d7fd04c3b7d107303ff554049c747f8050000004c89fe48895e204c89761848897e104c89660848890e4d8d7fe84c3b7d107303ff554049c747f8020000004c89f84889700848c700ffffffff4883c428c34c8b60104d8b1c244983fb05752b524c8b40084c89e3488b40189090ff150a04000048bb0100000000000000488b14244883c408e992caffff4983fb13752a524c8b40084c89e3488b401890ff15e203000048bb0100000000000000488b14244883c408e962caffff5248ff7008495448bb0100000000000000488b4018909090e845caffff9090ff15ae0300005048bb0100000000000000488b442408488b5424189090e821caffff9090ff159203000048bb0100000000000000488d542420909090ff158203000049ba01000000000000004883f80175054c89d0eb3e4d8d7fe84c3b7d107303ff554049c747f8020000004d89f94d8951084c8b004d89014d89ca488b4008483b65187303ff5548ebc148b80100000000000000909090ff152e0300004989c14d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89480848c700010000004883c420c3488b4008c3909090909090|@4820,8191,@4821,@4821,@4824,@4904,@4920,@4505,@4505,@4922,@4958,@4821,@4821,@4958,@4503,@4503,@4960,@4961,@4824,@4821,@4505,@4777,@4503,@4503,@4962,@4963,@4964,@4821,@4969,@4821,@4821,@4821,@4821,@4821,@4821,@4821,@4821,@4970,@4821,@4821,@4970,@4821,@4821,@4821,@4821,@4821,@4821,@4821,@4821,@4821,@4821,@4970,@4821,@4821,@4970,@4821,@4821,@4821,@4821,@4821,@4821,@4821,@4821,@4821,@4821,@4821,@4821,@4821,@4821,@4821,@4821,@4821,@4821,@4990,@5036,@4523,@4920,@5040,@4802,@4802,@4802,@4821,@5049,@4821,@4394,@4394,@5050,@4985,@4985,@4821,@4821,@4819,@4510|50,0,$4725+82 268,0,@4538 284,0,0 338,0,0 369,0,0 490,0,@4726 511,0,0 606,0,0 678,0,0 714,0,@217 779,0,0 789,0,64 799,0,11 809,0,I11 965,0,0 975,0,64 985,0,11 995,0,I11 1147,0,0 1157,0,64 1167,0,11 1177,0,I11 1335,0,0 1396,0,0 1406,0,0 1516,0,@4727 1582,0,@4729 1756,0,@4731 1818,0,@4737 1868,0,@4739 1909,0,@4741 1950,0,@4743 1982,0,1 2155,0,0 2165,0,64 2175,0,11 2192,0,I11 2405,0,@4745 2458,0,0 2613,0,1 2940,0,0 3159,0,@217 3185,0,@4751 3233,0,0 3270,0,0 3606,0,0 3771,0,0 3781,0,64 3791,0,11 3801,0,I11 3949,0,0 3959,0,64 3969,0,11 3979,0,I11 4147,0,@4753 4200,0,@4755 4253,0,@4757 4299,0,@4759 4340,0,@4761 4381,0,@4763 4422,0,@4765 4606,0,@4767 4655,0,@4771 4716,0,@4773 4974,0,@478 5376,0,@4775 5432,0,-2 6226,0,@4790 6596,0,@4792 6873,0,@4793 6888,0,0 7067,0,@4795 7080,0,0 7090,0,@4795 7104,0,0 7115,0,0 7231,0,0 7292,0,@4797 7468,0,0 7540,0,0 7958,0,@635 8503,0,0 8565,0,0 8587,0,0 8649,0,0 8684,0,0 8746,0,0 8805,0,0 8815,0,0 9007,0,0 9088,0,0 9157,0,0 9172,0,0 9840,0,0 9927,0,0 10002,0,0 10015,0,0 10316,0,0 10326,0,0 11450,0,0 11460,0,64 11470,0,11 11480,0,I11 11672,0,1 11889,0,@212 11974,0,@209 12093,0,0 12131,0,@217 12262,0,0 12584,0,0 12770,0,0 12992,0,0 13057,0,0 13072,0,@4799 13088,0,0 13164,0,@4801 13228,0,@4815 13414,0,0 13524,0,@4817 13664,0,0 13712,0,0 13742,0,0 13773,0,0 13808,0,0 13832,0,0 13905,0,0 4726:O2|0,@217 4727:C4,200|90909090909090483b65187303ff55484c8b2b4983fdff750b4c8b63084d8b742410eb104983fd0375064c8b7310eb044c8b73084d8b264983fcf7754c4d8b5e0841f6c3017503ff55704983fb017f02eb324d8d7ff04c3b7d107303ff554049c747f8010000004d89fa49891a5250534d89d04c89db488b42109090ff156e000000eb08525053eb035250534c8b5c24104d8d7ff04c3b7d107303ff554049c747f8010000004d89fa4c8b0c244d890a4d89d0488b5c2408498b43084883c418ff25320000009090|@4728,8191,@3276,@3276| 4728:S56|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229736574546162466f72496e6c696e65283229 4729:C4,208|90909090909090483b65187303ff55484983f8017402eb144c8b3041f6c6017503ff55704983fe017e02eb2c4989c64d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c894010488958084c8930488b5208ff224989d14889c74889de4c89f3498b4118ff158a00000048f7c001000000752a498b59104889f24823d3f6c2017503ff55704889f2482bd3488d520170f1488b184889d0ff255f0000004d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c89401048897008488938498b5108ff22909090909090|@4730,8191,@428,@216| 4730:S59|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d6973652832296c6f6f6b75704c6f63616c4e657741646472283329 4731:C4,464|90909090909090483b65187303ff55484983f801756c4c8b004983f801751948b8f8f5f7acaa2a00009090ff555848b8010000000000000041f6c0017503ff55704983f8017e404889d64889d94c89c3488b4610ff159e01000048f7c0010000007505488b38eb5548b8f009edacaa2a000090ff555848bf0100000000000000eb6ce9e600000048bf01000000000000004c89c64823f740f6c6017503ff55704889fe492bf0488d760170f140f6c6017503ff55704883fe017d07eb36e980000000488b4a184c8b71f849c1e60849c1ee084f8d74360149564c23f641f6c601495e7503ff5570493bf67d07eb1ee94f00000048b860d6ecacaa2a00009090ff555848b901000000000000004c8b6cb1fc4c89e948f7c1010000007505488b39eb1a48b8f009edacaa2a0000909090ff555848bf01000000000000004889d94889d64c8b66084989cb4d23dc41f6c3017503ff55704989cb4d2bdc4d8d5b0170f14889fb4c89d8ff25930000004c8b72204d8b264983fcff750a4d8b5e084d8b6b08eb0a49bd50f6f7acaa2a000041f6c0017503ff55704d89c34983eb0270f44989c24d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c895810488958084c89104c89eaff229090909090|@4736,8191,@428,@216|33,0,@4732 48,0,0 106,0,@213 120,0,0 137,0,0 245,0,@49 260,0,0 292,0,@213 308,0,0 390,0,@4734 4732:O3|@7377,@215,@4733 4733:S35|6c6f6f6b75704465633a20496e6c696e652066756e6374696f6e207265637572736573 4734:O1|@4735 4735:C2,24|48b8a80dedacaa2a000090ff555848b80100000000000000|@222,1|2,0,@220 16,0,0 4736:S61|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d6c6f6f6b7570446563283329 4737:C2,40|90909090909090483b65187303ff55484c8b4010488b5808488b00488b5208ff2290909090909090|@4738,8191| 4738:S59|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d6973652832296c6f6f6b75704c6f63616c4e657741646472283129 4739:C2,40|90909090909090483b65187303ff55484c8b4010488b5808488b00488b5208ff2290909090909090|@4740,8191| 4740:S61|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d6c6f6f6b7570446563283129 4741:C2,32|90909090909090483b65187303ff5548488b5808488b00488b5208ff22909090|@4742,8191| 4742:S56|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229736574546162466f72496e6c696e65283129 4743:C3,64|90909090909090483b65187303ff55484d8d7ff04c3b7d107303ff554049c747f8010000004d89fe4c8b68084d892e4d89f0488b18488b4208ff252900000090|@4744,8191,@3276| 4744:S59|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d6973652832297365744e6577546162466f72496e6c696e65283129 4745:C3,176|90909090909090483b65187303ff55485249504c8b721849c706030000004883fb017402eb0b488b5a1048c703030000005048bb01000000000000004883f80175054889daeb2df6c3017503ff55704989de4983c60270f4488b40084c89f3483b65187303ff5548ebd248ba0100000000000000488b4424104c8b700852490bd6f6c2015a7503ff5570493bd67409488b04244883c418c34c89f3488b0424488d542418ff152e0000004883c418c390|@4749,8191,@4746|52,0,0 108,0,0 4746:C4,792|90909090909090483b65187303ff55484883f801752a4883fb01750b48b80100000000000000c348b820fef7acaa2a00009090ff555848b801000000000000004c8b72f8f6c3017503ff55704883fb017d02eb294d8b6e304d8b65f849c1e40849c1ec084f8d642401534923dcf6c3015b7503ff5570493bdc7d02eb224c8b204c8b680848b860d6ecacaa2a000090ff55584c89e849bd01000000000000004d8b649dfc4d89e549f7c50100000075064d8b5d00eb214c8b184c8b680848b8f009edacaa2a0000ff55584d89dc49bb01000000000000004d8b2b4983fdff750b4d8b63084d8b542410eb104983fd0375064d8b5310eb044d8b53084c8b204d8b04244983f8fb753b498b3a4883fffb7526498b742408498b4a08483bf1750c49b90300000000000000eb6d49b90100000000000000eb6649b90100000000000000eb5f4983f8f7755e498b3a4883fff7755a498b742408498b4a0851480bcef6c101597503ff5570483bf1756e4d8b4c24104d8b72104d3bce75654d8b6a184c8b5af04d89e84d23c341f6c0017503ff55704d8d45ffeb19e9a8000000e9a3000000e99e000000e98f000000e97e0000004d03c370d9488b72f84c8b4e284c89c74923f940f6c7017503ff55704c89c7492bf9488d7f0170f1eb0ae943000000e9320000004d8b44241849504c0bc741f6c00149587503ff55704c3bc7750c49b90300000000000000eb3a49b90100000000000000eb2e49b90100000000000000eb2249b90100000000000000eb1649b90100000000000000eb0a49b901000000000000004983f9017402eb23488b7af8525348ff3048ff700849b80300000000000000488b4720ff15d2000000eb09525348ff3048ff7008488b7c2418488b77f8488b5c2410488b462090ff15b60000004883f8017452488b5c2410f6c3017503ff55704889da4883ea0270f44889d3488b04244889fa90e849fdffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89f948894108488b4424084889014889c84883c420c3488b5c2410f6c3017503ff55704889da4883ea0270f44889d3488b04244889fa4883c420e9f4fcffff9090909090|@4750,8191,@3276,@428|30,0,0 41,0,@4747 56,0,0 134,0,@49 151,0,0 191,0,@213 207,0,0 289,0,1 301,0,0 313,0,0 513,0,1 525,0,0 537,0,0 549,0,0 561,0,0 573,0,0 604,0,1 4747:O3|@7377,@215,@4748 4748:S33|66696c74657241726773273a2077726f6e67206e756d626572206f662061726773 4749:S62|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d66696c74657241726773283329 4750:S76|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d66696c7465724172677328332966696c7465724172677327283229 4751:O1|@4752 4752:C2,24|48b8a80dedacaa2a000090ff555848b80100000000000000|@222,1|2,0,@220 16,0,0 4753:C4,368|90909090909090483b65187303ff55484983f801756d4c8b0041f6c0017503ff55704983f8017e604889d74889de4c89c3488b4710909090ff155a01000048f7c0010000007505488b18eb1848b8f009edacaa2a000090ff555848bb0100000000000000488b57084889f04823c2a8017503ff55704889f0482bc2488d400170f1eb0ae9a4000000e906000000ff250d010000488b7a084889de4823f740f6c6017503ff55704889de482bf7488d760170f14983f801750c48bb0300000000000000eb0a48bb01000000000000004889d94883f1024d8d7fd04c3b7d107303ff554049c747f8050000004d89fe49c74620010000004989761849894e104d89460849c706f7ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89700848c70001000000c341f6c0017503ff55704d89c64983ee0270f44989c54d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c897010488958084c8928488b5218ff22909090909090|@4754,8191,@428,@216|78,0,@213 92,0,0 186,0,1 198,0,0 4754:S53|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d6973652832296c6f63616c4f6c6441646472283329 4755:C4,472|90909090909090483b65187303ff55484983f801756e4c8b0041f6c0017503ff55704983f8017e614889d74889de4c89c3488b4710909090ff15c20100004883f8017570488b5f084889f24823d3f6c2017503ff55704889f2482bd3488d520170f14d8d7fd04c3b7d107303ff554049c747f8050000004c89f848c7402001000000eb0ae90d010000e96f0000004889501848c74010030000004c89400848c700f7ffffff4989c64d8d7fe84c3b7d10730aeb05e91a000000ff554049c747f8020000004c89f84c89700848c70001000000c3488b5f084889f24823d3f6c2017503ff55704889f2482bd3488d520170f1488b184889d0ff250b010000488b7a084889de4823f740f6c6017503ff55704889de482bf7488d760170f14983f801750c48bb0300000000000000eb0a48bb01000000000000004889d94883f1024d8d7fd04c3b7d107303ff554049c747f8050000004d89fe49c74620010000004989761849894e104d89460849c706f7ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89700848c70001000000c341f6c0017503ff55704d89c64983ee0270f44989c54d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c897010488958084c8928488b5218ff2290909090|@4756,8191,@428,@216|292,0,1 304,0,0 4756:S53|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d6973652832296c6f63616c4e657741646472283329 4757:C4,200|90909090909090483b65187303ff55484c8b2b4983fdff750b4c8b63084d8b742410eb104983fd0375064c8b7310eb044c8b73084d8b264983fcf7754c4d8b5e0841f6c3017503ff55704983fb017f02eb324d8d7ff04c3b7d107303ff554049c747f8010000004d89fa49891a5250534d89d04c89db488b42109090ff156e000000eb08525053eb035250534c8b5c24104d8d7ff04c3b7d107303ff554049c747f8010000004d89fa4c8b0c244d890a4d89d0488b5c2408498b43084883c418ff25320000009090|@4758,8191,@3276,@3276| 4758:S47|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229736574546162283229 4759:C2,40|90909090909090483b65187303ff55484c8b4010488b5808488b00488b5208ff2290909090909090|@4760,8191| 4760:S53|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d6973652832296c6f63616c4e657741646472283129 4761:C2,40|90909090909090483b65187303ff55484c8b4010488b5808488b00488b5208ff2290909090909090|@4762,8191| 4762:S53|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d6973652832296c6f63616c4f6c6441646472283129 4763:C2,32|90909090909090483b65187303ff5548488b5808488b00488b5208ff22909090|@4764,8191| 4764:S47|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229736574546162283129 4765:C3,64|90909090909090483b65187303ff55484d8d7ff04c3b7d107303ff554049c747f8010000004d89fe4c8b68084d892e4d89f0488b18488b4208ff252900000090|@4766,8191,@3276| 4766:S50|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d6973652832297365744e6577546162283129 4767:C2,416|4c8b72104989dd4d23ee41f6c5017503ff55704989dd4d2bee4d8d6d0170f1488b58104889d94923cdf6c1017503ff55704889d9492bcd488d490170f14c8b6a084d8b65005248ff3048ff7008514983fc01750c49bb0100000000000000eb55498b1c24488b134883faf7754d488b4c2410488b430851480bc8f6c101597503ff5570483bc875604c8b34244c8b6b1849554d0bee41f6c501495d7503ff55704d3bf575434c8b5c24084c8b53104d3bda7535eb27e94b00000048b8c809f8acaa2a0000909090ff555848b901000000000000004883f9017502eb0c49bb0300000000000000eb1d4d8b642408483b65187303ff5548e953ffffff49bb01000000000000004983fb01740f48b801000000000000004883c420c3488b5c24184d8d7fd04c3b7d107303ff554049c747f8050000004c89fa48c7422001000000488b0c2448894a18488b442408488942104c8b7424104c89720848c702f7ffffff4c8b6b084d8b65004d8d7fe84c3b7d107303ff554049c747f8020000004d89fb4d8963084989134d895d0048b801000000000000004883c420c3909090909090|@4770,7951|86,0,0 188,0,@4768 204,0,0 222,0,1 253,0,0 269,0,0 397,0,0 4768:O3|@7377,@215,@4769 4769:S25|66696e644e6f6e4c6f63616c3a206e6f742045787472616374 4770:S52|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d6973652832296164644e6f6e4c6f63616c283229 4771:C2,320|90909090909090483b65187303ff55484989c64d8d7fe04c3b7d107303ff554049c747f8030000004c89f8488958104c8940084c89305253495049ff7608488b52109090ff124c8b204983fcff750a4c8b58084d8b6b10eb104983fc0375064c8b6810eb044c8b68084d8b5d004983fbf7755a4d8d7fd84c3b7d107303ff554049c747f8040000004d89fa4d8b4d204d894a184d8b45184d894210498b7d1049897a08498b75084989324883fe0175674883ff017541488b5c24104883fb017511488b14244883fa017407eb1fe965000000488b5424184955488b5c24104c89d0488b5208909090ff12eb024955488b04244883c428c3488b5c24184955488b5308488b5c24104c89d09090ff12488b04244883c428c3488b5c24184955488b5308488b5c24104c89d09090ff12488b04244883c428c34c89e84883c420c390|@4772,8191| 4772:S55|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636865636b526563757273696f6e283329 4773:C2,40|90909090909090483b65187303ff55484c8b4010488b5808488b00488b5208ff2290909090909090|@4774,8191| 4774:S55|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636865636b526563757273696f6e283129 4775:O2|@4777,@4776 4776:O2|@4788,@4775 4777:C10,1632|90909090909090483b65187303ff55484c8b3049f7c601000000741e4983feeb7c1d4983fe177f1c49bd420df8acaa2a00004f8d6cb55441ffe5e9c3000000e9be000000e9b900000090e9de040000909090e997030000909090e97f020000909090e95c030000909090e9df010000909090e9a6030000909090e9a2010000909090e95b010000909090e974010000909090e9e3000000909090e9da020000909090e9e9000000909090e953000000909090e93c020000909090e963040000909090e9bf010000909090e957050000909090e955010000909090e933030000909090e99e000000909090e9fc000000909090e900040000909090e9e30400009090904c8b70085249ff761849ff7620498b46109090e8edfeffff50488b442408488b542418e8ddfeffff4c8b2c244c89ea4823d0f6c2017503ff5570498d55ff4803d070f4488b4c241852488b442418488b5108ff124c8b34244d89f54c23e841f6c5017503ff55704d8d6eff4c03e870f44c89e84883c428c348b80100000000000000c348b80300000000000000c35248ff7010488b4008e869feffff50488b442408488b542410e859feffff4c8b24244d89e34c23d841f6c3017503ff55704d8d5c24ff4c03d870f341f6c3017503ff55704c89d84883c00270f44883c418c3488b4010e91cfeffff52488b4008488d542408909090ff158a0400004883c408c3488b400848baf02c600000000000909090ff124989c44983f4024c89e0c348b80300000000000000c352488b4008e8d1fdffffa8017503ff55704989c44983c40270f44c89e04883c408c34c8b60085249ff742420498b042490e8a5fdffff4c8b1c244989c24d23d341f6c2017503ff55704c8d50ff4d03d370f44c89d04883c410c35248ff7008488b40109090e871fdffff50488b442408488d542418909090ff15e60300004c8b24244d89e34c23d841f6c3017503ff55704d8d5c24ff4c03d870f341f6c3017503ff55704c89d84883c00470f44883c418c352488b4008488d542408ff15aa0300004883c408c35248ff701048ff7018488b400890e801fdffff50488b442410488b542418e8f1fcffff4c8b24244d89e34c23d841f6c3017503ff55704d8d5c24ff4c03d870f34953488b442410488b5424209090e8c1fcffff4c8b14244d89d14c23c841f6c1017503ff55704d8d4aff4c03c870f441f6c1017503ff55704c89c84883c00470f44883c428c35248ff7010488b4008909090e87dfcffff50488b442408488d542418909090ff15020300004c8b24244d89e34c23d841f6c3017503ff55704d8d5c24ff4c03d870f34c89d84883c418c352488b4008488d542408909090ff15d2020000a8017503ff55704989c44983c40270f44c89e04883c408c352488b40089090e80dfcffffa8017503ff55704989c44983c40270f44c89e04883c408c348b80300000000000000c35248ff701048ff7018488b4008909090e8d5fbffff50488b442410488b542418e8c5fbffff4c8b24244d89e34c23d841f6c3017503ff55704d8d5c24ff4c03d870f34953488b442410488d54242890ff153e0200004c8b14244d89d14c23c841f6c1017503ff55704d8d4aff4c03c870f4495149b80100000000000000488b7c24184883ff0175054c89c6eb2e41f6c0017503ff55704c89c34883c30270f4488b7f084989d8483b65187303ff5548ebd148be0100000000000000488b1c244889d84823c6a8017503ff5570488d43ff4803c670f44883c430c352488b4008488d542408909090ff15ae010000a8017503ff55704989c44983c40470f44c89e04883c408c348b80300000000000000c34c8b60104d8b1c244983fb15754b5248ff7018498b442408488d5424109090ff156e01000050488b442408488b542410e8a5faffff4c8b14244d89d14c23c841f6c1017503ff55704d8d4aff4c03c870f44c89c84883c418c35248ff70084954488b4018e871faffff50488b442408488b542418e861faffff4c8b14244d89d14c23c841f6c1017503ff55704d8d4aff4c03c870f44c8b4424104c89c84923c0a8017503ff5570498d41ff4903c070f44883c420c35248ff7010488b40089090e815faffff4c8b24244d89e34c23d841f6c3017503ff55704d8d5c24ff4c03d870f341f6c3017503ff55704c89d84883c00470f44883c410c34c8b60084d8b1c244983fbff750e4d8b542408498b4210e9c5f9ffff4983fb03750a498b442410e9b5f9ffff498b442408e9abf9ffff90909090|@4779,8191,@4780,@4782,@4783,@4784,@4785,@4786,@4787,@4778|42,0,$4777+74 380,0,0 391,0,1 521,0,I105 547,0,1 1044,0,1 1170,0,0 1232,0,0 1316,0,1 4778:C2,104|90909090909090483b65187303ff55484883f801750b48b80100000000000000c35248ff7008488b00488b52f8909090ff1250488b442408488b542410e8c5ffffff4c8b34244d89f54c23e841f6c5017503ff55704d8d6eff4c03e870f44c89e84883c418c39090|@4781,8191|24,0,0 4779:S30|42617365436f6465547265652e6973536d616c6c28322973697a65283129 4780:C2,104|90909090909090483b65187303ff55484883f801750b48b80100000000000000c35248ff7008488b00488b52f8909090ff1250488b442408488b542410e8c5ffffff4c8b34244d89f54c23e841f6c5017503ff55704d8d6eff4c03e870f44c89e84883c418c39090|@4781,8191|24,0,0 4781:S34|42617365436f6465547265652e6973536d616c6c28322973697a654c697374283129 4782:C2,104|90909090909090483b65187303ff55484883f801750b48b80100000000000000c35248ff7008488b00488b52f8909090ff1250488b442408488b542410e8c5ffffff4c8b34244d89f54c23e841f6c5017503ff55704d8d6eff4c03e870f44c89e84883c418c39090|@4781,8191|24,0,0 4783:C2,104|90909090909090483b65187303ff55484883f801750b48b80100000000000000c35248ff7008488b00488b52f8909090ff1250488b442408488b542410e8c5ffffff4c8b34244d89f54c23e841f6c5017503ff55704d8d6eff4c03e870f44c89e84883c418c39090|@4781,8191|24,0,0 4784:C2,104|90909090909090483b65187303ff55484883f801750b48b80100000000000000c35248ff7008488b00488b52f8909090ff1250488b442408488b542410e8c5ffffff4c8b34244d89f54c23e841f6c5017503ff55704d8d6eff4c03e870f44c89e84883c418c39090|@4781,8191|24,0,0 4785:C2,104|90909090909090483b65187303ff55484883f801750b48b80100000000000000c35248ff7008488b00488b52f8909090ff1250488b442408488b542410e8c5ffffff4c8b34244d89f54c23e841f6c5017503ff55704d8d6eff4c03e870f44c89e84883c418c39090|@4781,8191|24,0,0 4786:C2,104|90909090909090483b65187303ff55484883f801750b48b80100000000000000c35248ff7008488b00488b52f8909090ff1250488b442408488b542410e8c5ffffff4c8b34244d89f54c23e841f6c5017503ff55704d8d6eff4c03e870f44c89e84883c418c39090|@4781,8191|24,0,0 4787:C2,104|90909090909090483b65187303ff55484883f801750b48b80100000000000000c35248ff7008488b00488b52f8909090ff1250488b442408488b542410e8c5ffffff4c8b34244d89f54c23e841f6c5017503ff55704d8d6eff4c03e870f44c89e84883c418c39090|@4781,8191|24,0,0 4788:C2,216|90909090909090483b65187303ff55484883f801750b48b80100000000000000c34c8b305249ff760848ff7008498b06488b5208ff125049bd01000000000000004c8b6424104983fc0175054d89ebeb2f41f6c5017503ff55704d89ea4983c20270f44d8b6424084d89d5483b65187303ff5548ebd049bb01000000000000004c8b14244d89d14d23cb41f6c1017503ff55704d8d4aff4d03cb70f44951488b442410488b54242090e859ffffff4c8b04244c89c74823f840f6c7017503ff5570498d78ff4803f870f44889f84883c428c3909090909090|@4789,8191|24,0,0 57,0,0 120,0,0 4789:S38|42617365436f6465547265652e6973536d616c6c28322973697a65436173654c697374283129 4790:C2,16|4c8b720849c70603000000488b00c390|@4791,4101| 4791:S51|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d69736528322966696c74657241726773283129 4792:C2,16|4c8b720849c70603000000488b00c390|@4791,4101| 4793:O3|@7377,@215,@4794 4794:S26|4c6f6f703a206d69736d61746368656420426567696e4c6f6f70 4795:O3|@7377,@215,@4796 4796:S30|4c6f6f703a206e6f74206174207461696c206f6620426567696e4c6f6f70 4797:O2|0,@4798 4798:O2|9,0 4799:O3|@7377,@215,@4800 4800:S35|6f7074696d697365202d20636f6e7461696e6572206973206e6f742045787472616374 4801:C4,240|90909090909090483b65187303ff55484c8b72104989c54d23ee41f6c5017503ff55704c8d68ff4d03ee70f44c8b62084d8b14244983faff750b4d8b4c24084d8b5910eb124983fa0375074d8b5c2410eb054d8b5c24084d8b0b4983f90b751349554c89db909090ff15aa0000004989c1eb414983f9fb751249554c89db9090ff159a0000004989c1eb294d8d7fe04c3b7d107303ff554049c747f8030000004d89f9498941104d89590849c7010d00000049554d8d7fd84c3b7d107303ff554049c747f8040000004c89f848c74018010000004c8948104c8b04244c89400848c700f9ffffff4883c408c390909090|@4813,8191,@4802,@4802| 4802:C4,1528|90909090909090483b65187303ff55484c8b334983fe1575705048ff730849bd01000000000000004c8b24244983fc0175054d89ebeb2f41f6c5017503ff55704c89eb4883c30270f44d8b6424084989dd483b65187303ff5548ebd049bb0100000000000000488b5c2408534923dbf6c3015b7503ff5570493bdb7d5c488b04244883f8017521eb05e91b01000048b860d6ecacaa2a0000909090ff555848b801000000000000004883fb017508488b004883c410c3f6c3017503ff55704989de4983ee0270f44c89f3488b4008483b65187303ff5548eba8e90f00000048b801000000000000004883c410c348b8f823f8acaa2a00004883f801750c49be0300000000000000eb304c8b284d8b65004983fcfb7519488b4008483b65187303ff5548ebd249be010000000000000049be01000000000000004983fe01743848b87024f8acaa2a0000909090ff15ce0400004d8d7fe84c3b7d107303ff554049c747f8020000004d89fb4989430849c703fbffffffeb0a49bb7024f8acaa2a00004d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89580848c700edffffff4883c410c34983fefb756a50504c8b6b0849f7c5010000007402eb5e49f7c501000000741b4989c348b8b055edacaa2a000090ff555849bc01000000000000004d89ec4d0fb65c24ff4f8d5c1b014d89da4983e2074983fa017402eb6849f7c50100000074264989c048b8b055edacaa2a0000eb0ae989010000e946000000ff555849b901000000000000004d89e94d8b41f849c1e00849c1e8084f8d44000148f7c00100000074054889c7eb1248f640ff10488b38740348f7df488d7c3f014c3bc7777149bcf823f8acaa2a00004983fc01750c49bb0300000000000000eb314d8b14244d8b0a4983f9fb751a4d8b642408483b65187303ff5548ebd149bb010000000000000049bb01000000000000004983fb01743e48b87024f8acaa2a00009090ff155a0300004d8d7fe84c3b7d10730aeb05e938000000ff554049c747f8020000004d89f84989400849c700fbffffffeb0a49b87024f8acaa2a00004889e748c707edffffff4889e64c894608eb6349f7c501000000741c4889c648b8b055edacaa2a00009090ff555848bf01000000000000004c89ef48f7c00100000074054889c6eb1748b86055edacaa2a0000ff555848be0100000000000000488b54b7fc4889e148c701fbffffff4889e0488950084d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b34244c89304c8b6c24084c8968084883c410c34983fe0b75704c8b6b084d8b5d004983fbff750a4d8b55084d8b6220eb0a49bc380dedacaa2a00004d8b14244983fa15756c49554c89e3909090e821fcffff4c8b084983f9f7755b4d8d7fd84c3b7d107303ff554049c747f8040000004d89f8488b782049897818488b701849897010488b5810eb05e9a501000049895808488b5008498910488b0c244c8b294983fdff75154c8b61084d8b742408eb14e951010000e96200000049be8824f8acaa2a00004d8d7fe04c3b7d107303ff554049c747f8030000004c89f84889701048c74008010000004c89004c89f290ff124989c44d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89600848c7000b0000004883c408c34983f90d755c4c8b4008498b384883fff7756e4d8d7fd84c3b7d107303ff554049c747f8040000004c89fe498b582048895e18498b501848895610498b481048894e084d8b70084c89364c8b2c244d8b5d004983fbff750f4d8b55084d8b6208eb0fe97e00000049bce824f8acaa2a00004c8b50104d8d7fe04c3b7d10730aeb05e95a000000ff554049c747f8030000004c89f84889501048c740080100000048893049524c89e2909090ff124d8d7fe84c3b7d107303ff554049c747f8020000004d89f94989410849c7010b0000004c89cb488b04244883c410e976faffff4883c408c34883c408c34d8b45004983f8ff750a498b7d084c8b4f10eb104983f80375064d8b4d10eb044d8b4d084c89cbe940faffff4989c54d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c8968104889580848c7000d000000c3909090909090|@4814,8191,@4523,@4523|32,0,0 94,0,0 144,0,@49 160,0,0 224,0,0 239,0,@4803 255,0,1 295,0,0 305,0,0 321,0,@4808 377,0,@4808 462,0,@339 476,0,0 527,0,@339 552,0,0 619,0,@4803 635,0,1 676,0,0 686,0,0 702,0,@4808 764,0,@4808 805,0,@339 820,0,0 847,0,@336 860,0,0 967,0,@217 1105,0,@4809 1306,0,@4811 4803:O2|@4805,@4804 4804:O2|@4806,@486 4805:O2|-3,100 4806:O2|-3,@4807 4807:S4|42696e64 4808:O2|10,@4803 4809:O1|@4810 4810:C2,24|48b8a80dedacaa2a000090ff555848b80100000000000000|@222,1|2,0,@220 16,0,0 4811:O1|@4812 4812:C2,24|48b8a80dedacaa2a000090ff555848b80100000000000000|@222,1|2,0,@220 16,0,0 4813:S53|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d6973652832297370656369616c446563732d283129 4814:S30|434f44455452454528292e66696e64456e747279496e426c6f636b283229 4815:C2,88|4c8b72084989c54d23ee41f6c5017503ff55704c8d68ff4d03ee70f44d8d7fd04c3b7d107303ff554049c747f8050000004c89f848c740200100000048c740180100000048c74010030000004c89680848c700f7ffffffc3|@4816,6149| 4816:S56|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d6973652832297370656369616c456e74726965732d283129 4817:C3,168|90909090909090483b65187303ff55484c8b304d8d7fd04c3b7d107303ff554049c747f8050000004d89fd4d8b66184d8965204d8b5e104d895d184d8b56084d8955104d8b0e4d894d0849c74500f7ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89f84d89680849c700010000004c8b6808488b7a084c89ee4823f740f6c6017503ff55704c89ee482bf7488d760170f14c89c34889f0ff252c00000090909090|@210,8191,@216| 4818:S27|434f44455452454528292e6f7074696d69736550726f6328313229 4819:C5,1336|90909090909090483b65187303ff55484c8b304983fe057568525348ff700848ff701848bb0100000000000000488b4010e8d1ffffff49bd01000000000000004883f80175054c89e8eb454d8d7fe84c3b7d107303ff554049c747f8020000004d89fc4d896c24084c8b184d891c244d89e5488b4008483b65187303ff5548ebbfe9e500000048b80100000000000000ff15ca0400005048bb0100000000000000488b442408488b5424209090e855ffffff49bc01000000000000004883f80175054c89e0eb3e4d8d7fe84c3b7d107303ff554049c747f8020000004d89fb4d896308488b1849891b4d89dc488b4008483b65187303ff5548ebc148b80100000000000000909090ff155a0400004d8d7fd84c3b7d107303ff554049c747f8040000004d89fb49894318488b1c2449895b10488b5424104989530849c703050000004d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b7424184c8970084c89184883c428c34983fe137570524c8b68084983fd01751848b8105ff0acaa2a000090ff555848b801000000000000004d8b65084983fc017511498b4500488b14244883c408e958feffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fb49895b08498b5d0049891b4d8b6d084c89db483b6518730aeb05e914000000ff5548eb8b48b801000000000000004883c408c34983fe17756d4c8b68084d8b65004983fcf775644d8b5d104983fb03755f4d8b55184983fa01755a4c8b48104c8b42f049514d0bc841f6c10149597503ff55704d3bc8756e488b7ae0488b374883fef77566488b4f104883f90375614c8b77184983fe01753348ff770849ff75084889d8eb14e96d020000e912020000e9b7010000e95c010000488d5424109090ff15e20200004883c410c34d8d7fd84c3b7d107303ff554049c747f8040000004d89f9eb0fe9d9000000e986000000e93300000049897918498941104d89410849c701ebffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89f8488958084c8908c34d8d7fd84c3b7d107303ff554049c747f8040000004d89fe49897e18498946104d89460849c706ebffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89f9498959084d89314c89c8c34d8d7fd84c3b7d107303ff554049c747f8040000004c89f948897918488941104c89410848c701ebffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fe49895e0849890e4c89f0c34d8d7fd84c3b7d107303ff554049c747f8040000004c89ff488b72e048897718488947104c89470848c707ebffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89f9488959084889394889c8c34d8d7fd84c3b7d107303ff554049c747f8040000004d89f94c8b42e04d89411849894110488b7af04989790849c701ebffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fe48895e084c890e4889f0c34d8d7fd84c3b7d107303ff554049c747f8040000004d89fa4c8b4ae04d894a18498942104c8b42f04d89420849c702ebffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89ff48895f084c89174889f8c34d8d7fd84c3b7d107303ff554049c747f8040000004d89fb4c8b52e04d895318498943104c8b4af04d894b0849c703ebffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89f8498958084d89184c89c0c34d8d7fd84c3b7d107303ff554049c747f8040000004d89fd4c8b62e04d896518498945104c8b5af04d895d0849c74500ebffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fa49895a084d892a4c89d0c39090|@5052,8191,@4510,@4510,@5051|37,0,0 56,0,0 136,0,0 153,0,0 180,0,0 253,0,0 382,0,@2029 396,0,0 493,0,0 4820:S38|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229 4821:C3,240|90909090909090483b65187303ff55484c8b284983fdff750a4c8b60084d8b3424eb164983fd0375064c8b7008eb0a49be01000000000000004983fe0175204983fdff750a4c8b6008498b442410c34983fd037505488b4010c3488b4008c34983fdff750b4c8b60084d8b642410eb104983fd0375064c8b6010eb044c8b60084d8d7fe84c3b7d107303ff554049c747f8020000004d89fb49c74308010000004d89234983fb0175054d89f2eb1749534c89f0488d542408ff155a0000004989c24883c4084d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89500848c70013000000c390909090909090|@4823,7941,@4822|49,0,0 4822:C2,88|90909090909090483b65187303ff55484883f8017505488b42f8c35248ff30488b40089090e8ddffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b04244889024889d04883c410c3909090|@1847,5| 4823:S40|434f44455452454528292e6f7074696d69736550726f632831322967657447656e6572616c283129 4824:C4,1080|90909090909090483b65187303ff55484d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fe49c7060300000049565250488b42e8488d542418909090ff15160400004c8b6c24084d8b65d84d8b14244983faff750b4d8b4c24084d8b5910eb124983fa0375074d8b5c2410eb054d8b5c24084d8b4de04983f901740c49b80300000000000000eb084d8b45f84d8b4028488b7c2410488b374883fe01745c4983faff750b498b4c2408488b5110eb124983fa037507498b542410eb05498b542408488b0a4883f9fb756f4983f801740c48bb0300000000000000eb624983faff750b498b7c24084c8b7710eb174983fa03750c4d8b742410eb0ae9c10000004d8b742408498b3e4883fffb756f498b760848f7c601000000741d4889c348b8b055edacaa2a0000ff55584889d848bb0100000000000000eb0ae971000000e9650000004889f350495349505648b8cd0000000000000048ba3038600000000000ff124883f801741e488b5c2418488b0424909090ff15e6020000eb05e9110000004889c3eb1c48bb0100000000000000eb1048bb01000000000000005049534950504883c408eb275049534950eb2048bb01000000000000005049534950eb0f48bb010000000000000050495349504883fb01744e488b542420488b4af84d8d7fd84c3b7d107303ff554049c747f8040000004c89f84c8b34244c8970184c8b6c24084c8968104c8b6424104c89600848c70009000000488b512090ff124889c3eb6d488b5c241848f7c3010000007564488b13488b4c2420488b41f048f7c001000000756e4c8b72084c8b284d3bf575674c8b61f84d8d7fe04c3b7d107303ff554049c747f8030000004c89f84d8b5c24384c89581048c74008030000004c8b5424104c8910488b129090ff12eb0ae9e5000000e9a70000004d8d7fe84c3b7d107303ff554049c747f8020000004c89fbeb0ae912000000e90d0000004889430848c703f1ffffffeb714c8b71f84d8d7fe04c3b7d107303ff554049c747f8030000004c89f84d8b6e384c89681048c74008010000004c8b6424104c8920488b129090ff124d8d7fd84c3b7d107303ff554049c747f8040000004c89fb4c8b1c244c895b184c8b5424084c8953104889430848c70309000000eb3ee9390000004d8d7fd84c3b7d107303ff554049c747f8040000004c89fb488b142448895318488b4c240848894b10488b4424104889430848c703090000004c8b7424204d8b6ed84d8b5d004983fbff75094d8b55084d8b22eb164983fb0375064d8b6508eb0a49bc01000000000000004d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fa49c702010000004983fc0175284d8d7fe84c3b7d107303ff554049c747f8020000004c89f84889580848c700010000004883c430c34d8d7fe04c3b7d107303ff554049c747f8030000004c89f8488958104c89600848c700030000004883c430c3909090909090|@4897,8191,@4898,@4825|134,0,1 218,0,1 295,0,@339 311,0,0 342,0,102 352,0,I150 400,0,0 412,0,0 441,0,0 458,0,0 940,0,0 4825:C3,424|90909090909090483b65187303ff5548505349bed035f8acaa2a000049bd01000000000000004983fe0175054d89eceb614983fd01740c49bb0300000000000000eb3549ff7608498b0648baf041600000000000ff124c8b5c24104c3bd8750c49bb0300000000000000eb1049bb0100000000000000eb0449ff76084d89dd4c8b34244883c408483b65187303ff5548eb94e90a00000049bc01000000000000004983fc01740f48b803000000000000004883c410c349bb303cf8acaa2a000049ba01000000000000004983fb0175054d89d1eb614983fa01740c49b80300000000000000eb3549ff7308498b0348baf041600000000000ff124c8b4424104c3bc0750c49b80300000000000000eb1049b80100000000000000eb0449ff73084d89c24c8b1c244883c408483b65187303ff5548eb94e90a00000049b901000000000000004983f901744c4c8b042448bf03000000000000004983f80175084889f84883c410c34889fb498b00909090ff155a0000004889c74d8b4008483b65187303ff5548ebd148b801000000000000004883c410c348b801000000000000004883c410c39090|@4902,8191,@4899|20,0,@4826 30,0,0 57,0,1 76,0,I189 98,0,1 110,0,0 153,0,0 169,0,1 184,0,@4894 194,0,0 221,0,1 240,0,I189 262,0,1 274,0,0 317,0,0 337,0,1 394,0,0 409,0,0 4826:O2|15,@4827 4827:O2|24,@4828 4828:O2|25,@4829 4829:O2|26,@4830 4830:O2|27,@4831 4831:O2|28,@4832 4832:O2|29,@4833 4833:O2|105,@4834 4834:O2|106,@4835 4835:O2|107,@4836 4836:O2|108,@4837 4837:O2|109,@4838 4838:O2|110,@4839 4839:O2|111,@4840 4840:O2|112,@4841 4841:O2|113,@4842 4842:O2|114,@4843 4843:O2|115,@4844 4844:O2|117,@4845 4845:O2|118,@4846 4846:O2|119,@4847 4847:O2|120,@4848 4848:O2|121,@4849 4849:O2|122,@4850 4850:O2|123,@4851 4851:O2|125,@4852 4852:O2|126,@4853 4853:O2|127,@4854 4854:O2|128,@4855 4855:O2|130,@4856 4856:O2|133,@4857 4857:O2|134,@4858 4858:O2|135,@4859 4859:O2|136,@4860 4860:O2|137,@4861 4861:O2|138,@4862 4862:O2|139,@4863 4863:O2|140,@4864 4864:O2|141,@4865 4865:O2|189,@4866 4866:O2|196,@4867 4867:O2|213,@4868 4868:O2|214,@4869 4869:O2|216,@4870 4870:O2|217,@4871 4871:O2|218,@4872 4872:O2|223,@4873 4873:O2|229,@4874 4874:O2|230,@4875 4875:O2|231,@4876 4876:O2|232,@4877 4877:O2|233,@4878 4878:O2|234,@4879 4879:O2|238,@4880 4880:O2|239,@4881 4881:O2|240,@4882 4882:O2|241,@4883 4883:O2|242,@4884 4884:O2|243,@4885 4885:O2|244,@4886 4886:O2|245,@4887 4887:O2|246,@4888 4888:O2|247,@4889 4889:O2|248,@4890 4890:O2|249,@4891 4891:O2|250,@4892 4892:O2|251,@4893 4893:O2|152,0 4894:O2|17,@4895 4895:O2|252,@4896 4896:O2|253,0 4897:S54|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d6973652832296e6f74496e6c696e6543616c6c283129 4898:C4,168|90909090909090483b65187303ff55484883f801750b48b80100000000000000c35248ff700848bb0100000000000000488b004c8b72f0498b56f890ff158e0000009090ff158e0000004c8b284983fdfb7502eb114c8b6424084d8b5c24f849c7030100000050488b442408488b542410e891ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fc49894424084c8b1c244d891c244c89e04883c418c39090909090|@417,8191,@4725,@4821|24,0,0 40,0,0 4899:C2,184|4c8b304983fefb756b4883fb01746a488b580848f7c301000000740b48b80300000000000000c348f7c301000000741848b8b055edacaa2a000090ff555848ba01000000000000004889da480fb64aff488d4c09014889ca4881e2810000004881fa81000000751648b90300000000000000eb14e922000000e91200000048b901000000000000004889c84883f002c348b80100000000000000c348b8a03ef8acaa2a00009090ff555848b8010000000000000090909090|@4903,4111|30,0,1 50,0,@339 64,0,0 106,0,1 128,0,0 146,0,0 157,0,@4900 172,0,0 4900:O3|@7377,@215,@4901 4901:S29|6973496d6d757461626c653a20617267206e6f7420636f6e7374616e74 4902:S26|434f44455452454528292e6561726c7952747343616c6c283229 4903:S40|434f44455452454528292e6561726c7952747343616c6c2832296973496d6d757461626c65283229 4904:C5,240|90909090909090483b65187303ff55484883fb01750b48b80100000000000000c34d8d7fe84c3b7d107303ff554049c747f8020000004d89fe49bd9840f8acaa2a00004d892e4c8b6a904d896e08525048ff730849564c8b2348bb01000000000000004c89e0488b52f89090ff15a600000049b901000000000000004c8b4424104889c3488b04244c8b5c2418498b53f8909090ff15860000004c8b54241041f6c2017503ff55704d89d14983c10270f450488b5c24104c89c8488b5424209090e841ffffff4883f8017509488b04244883c428c350488b442408488d542430ff15420000004883c430c39090909090|@4908,8191,@4725,@4909,@4907|24,0,0 59,0,@4905 91,0,0 116,0,0 4905:C3,112|90909090909090483b65187303ff55484c8b3049bd01000000000000004d89f44d23e541f6c4017503ff55704d89ec4d2be64d8d64240170f04d8d7ff04c3b7d107303ff554049c747f8010000004d89fd4c8b58084d895d004d89e84c89e3488b4208ff252f00000090909090909090|@4906,8191,@3276|21,0,0 4906:S54|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f7079283229736574546162283129 4907:C2,88|90909090909090483b65187303ff55484883f8017505488b42d0c35248ff30488b40089090e8ddffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b04244889024889d04883c410c3909090|@1847,5| 4908:S45|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f7079283229 4909:C8,488|90909090909090483b65187303ff55484c8b2b4983fdff750b4c8b63084d8b742410eb104983fd0375064c8b7310eb044c8b73084956534950504951524d8b264983fcfb755c4983fdff750a4c8b53084d8b5a20eb0a49bb380dedacaa2a00004d8b134983faf3755e498b7b08488b77284883feff75404983f903752a4d8d7fe84c3b7d107303ff554049c747f8020000004d89fa4d89720849c70201000000eb33e98f0000004889d89090ff155e0100004989c2eb1e4889d89090ff15560100004989c2eb0e4889d89090ff154e0100004989c24d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8950084c8900488b542410909090ff124c8b4c24204d8b014983f8ff750c498b7908488b074883c430c34983f8037509498b41084883c430c348b801000000000000004883c430c34983fcf7755c4d8b5e184983fb0175574889d8909090ff15d60000004989c24d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8950084c8900488b542410909090ff124c8b4c24204d8b014983f8ff7516498b7908488b074883c430c3e936000000e91e0000004983f8037509498b41084883c430c348b801000000000000004883c430c3488d542430909090ff15620000004883c430c3488d542430ff155a0000004883c430c39090909090|@4913,8191,@4914,@4914,@4914,@4914,@4910,@4910|88,0,@217 297,0,0 435,0,0 4910:C3,632|90909090909090483b65187303ff55484c8b72d04d8b6e304d8b650041f6c4017503ff55704d89e34983c30270f44d895d004c8b5af04d8b0b4983f9ff750a4d8b43084d8b5020eb0a49ba380dedacaa2a00004d8b024983f8f3752e498b7a08488b77284883feff751b488b5ad84883fb03750c49b8380dedacaa2a0000eb0d4d89d0eb084d89d0eb034d89d04d8d7fd04c3b7d107303ff554049c747f8050000004c89ff48c747200100000048c747180100000048c74710030000004c89670848c707f7ffffff4983f9ff750a498b5b08488b7308eb0a48be6847f8acaa2a00004983f9ff750a4d8b5308498b5a18eb244d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89fb48c703010000004d8d7fd04c3b7d107303ff554049c747f8050000004d89fa4d89422049895a1849897a104989720849c702010000005050498b304883fefd75134889e348c703010000004989e249897a08eb114889e348c703ffffffff4889e74c8957084d8d7fe84c3b7d107303ff554049c747f8020000004c89fb4c8b14244c8913488b7c240848897b084d8d7fe84c3b7d107303ff554049c747f8020000004c89f848895808488b5ae8488918524954488b52e09090ff12488b542408488b4af04c8b314983feff750a4c8b6908498b4500eb164983fe037506488b4108eb0a48b801000000000000004d8d7fd84c3b7d107303ff554049c747f8040000004d89fd49c74518010000004c8b62f84d8965104c8b1c244d895d0849c74500f9ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fa49c74208010000004d892a4983fa0175054883c420c34952488d542428909090ff152e0000004883c428c390|@4919,8191,@4918|75,0,@217 118,0,@217 218,0,@4911 500,0,0 4911:O1|@4912 4912:C2,24|48b8a80dedacaa2a000090ff555848b80100000000000000|@222,1|2,0,@220 16,0,0 4913:S37|434f44455452454528292e6f7074696d69736550726f63283132296e65774465636c283429 4914:C2,328|4c8b284983fdff750a4c8b60084d8b3424eb164983fd0375064c8b7008eb0a49be01000000000000004983fe017501c34983fdff750a4c8b70084d8b6610eb104983fd0375064c8b6010eb044c8b60084983fdff750a4c8b70084d8b5e20eb0a49bb380dedacaa2a00004983fdff750a4c8b70084d8b5608eb0a49ba8049f8acaa2a00004983fdff750a4c8b70084d8b4e18eb244d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89f949c701010000004d8d7fd04c3b7d107303ff554049c747f8050000004d89fe4d895e204d894e184d8966104d89560849c7060100000050504d8b134983fafd75134989e149c701010000004989e64d896608eb124989e149c701ffffffff4989e44d897424084d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b0c244c89084c8b7424084c8970084883c410c390909090|@4917,8065|33,0,0 98,0,@217 124,0,@4915 4915:O1|@4916 4916:C2,24|48b8a80dedacaa2a000090ff555848b80100000000000000|@222,1|2,0,@220 16,0,0 4917:S39|434f44455452454528292e6f7074696d69736550726f6328313229737472697044656373283129 4918:C2,88|90909090909090483b65187303ff55484883f8017505488b42d8c35248ff30488b40089090e8ddffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b04244889024889d04883c410c3909090|@1847,5| 4919:S39|434f44455452454528292e6f7074696d69736550726f63283132296e65774465636c2834292f33 4920:C2,240|90909090909090483b65187303ff5548488b18488b034883f8ff75644c8b73084d8b2e4983fd01750b48b8f01e600000000000c34956495548ff750849bc664bf8acaa2a000049546a014889650849b8010000000000000048bb01000000000000004c89e848ba701560000000000090ff124989c348ff742410488f4508eb20e9620000009048b840e3ecacaa2a0000909090ff555849bb010000000000000049534d89ea49b901000000000000004d89d848bb03000000000000004c89f048ba7043600000000000909090ff12488b042448ba701e600000000000ff12488b04244883c430c3488b4308c390909090|@4921,8191|43,0,I49 62,0,$4920+134 80,0,0 90,0,0 103,0,I11 136,0,@69 152,0,0 167,0,0 180,0,1 193,0,I195 212,0,I47 4921:S22|5374726574636841727261792e766563746f72283229 4922:C5,1008|90909090909090483b65187303ff55484c8b72f84d8d7fb84c3b7d107303ff554049c747f8080000004d89fd49bc7050f8acaa2a00004d8965004c8ba248ffffff4d8965384c8b9a38ffffff4d895d304c8b9210ffffff4d8955284c8b8a68ffffff4d894d204c8b42a84d894518488b7ad849897d10498b7638498975084d8d7fe84c3b7d107303ff554049c747f8020000004c89fb48b94054f8acaa2a000048890b488b8a18ffffff48894b084d8d7fe84c3b7d107303ff554049c747f8020000004d89fe48bea054f8acaa2a00004989364d896e084d8d7fe84c3b7d107303ff554049c747f8020000004d89fd48be6055f8acaa2a000049897500488bb220ffffff498975084d8d7fe84c3b7d107303ff554049c747f8020000004c89ff49b8b855f8acaa2a00004c89074c8b8270ffffff4c8947084c8b4af84d8b51284983fa01740d5048b80300000000000000eb0550488b42e04d8d7ff04c3b7d107303ff554049c747f8010000004d89fb4c8b62d04d89234d8d7fe84c3b7d107303ff554049c747f8020000004c89f948be3856f8acaa2a0000488931488bb240ffffff488971084d8d7fe84c3b7d107303ff554049c747f8020000004d89f84d8960084989084d8d7fe84c3b7d107303ff554049c747f8020000004c89f94d8b51104c8951084c89014c8b42f85249ff713849ff71305049ff712049535149ff70084989fa4d89e9498b78f84d89f0488b42884889fa9090ff12488b3424488b9e28ffffff488b134883fa01746a488b8e68ffffff48b801000000000000004883f9017502eb564c8b34244989c14889cb498b8648ffffffff15ba0100004883f801744841f6c1017503ff55704d89c84983c00270f4f6c1017503ff55704889cf4883ef0270f44c89c04889f9483b65187303ff5548eba7e94c000000e93900000048b80100000000000000f6c1017503ff55704989c84983e80270f44c89c84c89c1483b65187303ff5548e96effffff48b80100000000000000488b14244883c410ff2537010000488b8e30ffffff4c8b314983fe017471504c8bae68ffffff49bc01000000000000004983fd0175054d89e3eb594c8b5424084d89e94d89e04c89cb498b8248ffffff90ff15f60000004883f801744b41f6c0017503ff55704c89c74883c70270f441f6c1017503ff55704c89ce4883ee0270f44989fc4989f5483b6518730feb0ae978000000e93f000000ff5548eb9249bb010000000000000041f6c1017503ff55704c89cf4883ef0270f44d89c44989fd483b65187303ff5548e962ffffff49bb01000000000000004c8b54241049534d23da41f6c301495b7503ff55704d3bda7e114c89d8488b5424084883c418e929fcffff488b04244883c418c34883c410c390909090|@4956,8191,@428,@4934,@428|46,0,@4923 152,0,@4927 200,0,@4928 241,0,@4930 290,0,@4931 329,0,1 401,0,@4932 567,0,0 676,0,0 723,0,0 771,0,0 891,0,0 939,0,0 4923:C6,696|90909090909090483b65187303ff55484983f80175684c8b004983f80175144889d7488b47109090ff15b20200004989c6eb6e41f6c0017503ff55704983f8017e414889d74989d94c89c3488b471890ff159202000048f7c00100000075054c8b30eb6e48b8f009edacaa2a000090ff555849be0100000000000000eb59e9d001000048bf01000000000000004d89c64c23f741f6c6017503ff55704989feeb05e9820100004d2bf04d8d760170ea4989d14889df4c89f3498b4138ff152e0200004883f8017474498b5928498b5120eb0ae94e010000e9490100004889d84823c2a8017503ff5570488d43ff4803c270f44989c64d23f041f6c6017503ff55704c8d70ff4d03f070f44d8d7fd04c3b7d107303ff554049c747f8050000004d89fd49c745200100000049c745180100000049c7451003000000eb05e9310000004d89750849c74500f7ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fe4d896e0849c70601000000eb5d48bb01000000000000004c89c24823d3f6c2017503ff55704889da492bd0488d520170f1f6c2017503ff55704883fa017d02eb2e498b41304c8b70f849c1e60849c1ee084f8d743601524923d6f6c2015a7503ff5570493bd67d07eb1de94800000048b860d6ecacaa2a000090ff555848b901000000000000004c8b6c90fc4c89e948f7c10100000075054c8b31eb1a48b8f009edacaa2a0000909090ff555849be01000000000000004d89cc4989f94c89e74c89cb4c8b5f084989da4d23d341f6c2017503ff55704989da4d2bd34d8d520170f14c89f34c89d0ff25a50000004c8b72104d8b264983fcff750a4d8b5e084d8b6b08eb0a49bd8053f8acaa2a000041f6c0017503ff55704d89c34983eb0270f44989c24d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c895810488958084c89104c89eaff2290909090909090|@4926,8191,@4914,@428,@428,@216|102,0,@213 116,0,0 133,0,0 372,0,0 470,0,@49 484,0,0 516,0,@213 532,0,0 620,0,@4924 4924:O1|@4925 4925:C2,24|48b8a80dedacaa2a000090ff555848b80100000000000000|@222,1|2,0,@220 16,0,0 4926:S77|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d636865636b466f724c6f6f70496e7374727328312970726576283329 4927:C2,40|90909090909090483b65187303ff55484c8b4010488b5808488b00488b5208ff2290909090909090|@4738,8191| 4928:C2,40|90909090909090483b65187303ff55484c8b4010488b5808488b00488b5208ff2290909090909090|@4929,8191| 4929:S77|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d636865636b466f724c6f6f70496e7374727328312970726576283129 4930:C2,32|90909090909090483b65187303ff5548488b5808488b00488b5208ff22909090|@4742,8191| 4931:C3,64|90909090909090483b65187303ff55484d8d7ff04c3b7d107303ff554049c747f8010000004d89fe4c8b68084d892e4d89f0488b18488b4208ff252900000090|@4744,8191,@3276| 4932:C2,40|90909090909090483b65187303ff55484c8b4010488b5808488b00488b5208ff2290909090909090|@4933,8191| 4933:S62|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d66696c74657241726773283129 4934:C4,1312|90909090909090483b65187303ff55484c8b72f84d8b6e3841f6c5017503ff55704d89ec4983c40270f44d8d7fc04c3b7d107303ff554049c747f8070000004d89fb49ba505cf8acaa2a00004d89134c8b52d84d8953304c8b8a38ffffff4d894b284c8b8248ffffff4d894320488b7aa849897b184d896310488b72d0498973085050525049b8010000000000000048bb810000000000000048b8170000000000000048ba7015600000000000909090ff1248c700150000004d8d7fe84c3b7d107303ff554049c747f8020000004c89fb4889430848c703ffffffff4d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89fa48891a488d4c2410488911488d44241048c74008010000004d8d7fe84c3b7d107303ff554049c747f8020000004d89fa4c8b4c24104d890a4c8b4424184d894208488b7c2408488b77f84d8d7fd84c3b7d107303ff554049c747f8040000004c89fb48baf862f8acaa2a0000488913488b4ef048894b184c8953104c8963084d8d7fe04c3b7d107303ff554049c747f8030000004c89f849b98065f8acaa2a00004c89084c8950104c8b47a84c8940084d8d7fe84c3b7d107303ff554049c747f8020000004c89fa49b9f066f8acaa2a00004c890a48895a084d8d7fe84c3b7d107303ff554049c747f8020000004c89fb49b9b867f8acaa2a00004c890b4c895b084d8d7fe84c3b7d107303ff554049c747f8020000004d89fb49b97868f8acaa2a00004d890b498943084d8d7fe84c3b7d107303ff554049c747f8020000004c89f849b93069f8acaa2a00004c89084c8950084d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fa49c702030000004c8b4e284983f901740d5048b80300000000000000eb0550488b47e04d8d7fe84c3b7d107303ff554049c747f8020000004d89fe49bd186af8acaa2a00004d892e4c8baf40ffffff4d896e08488b4c24104d8d7fe84c3b7d107303ff554049c747f8020000004d89f84c8b49d04d8948084d89304c8b7424104d8b6ef84d8d7fe84c3b7d107303ff554049c747f8020000004d89f9498b4d10498949084d89014c8b4424104d8b70f84c8b6c2410498b4df8495449525048ff76206a01495149ff76084c8b5424384d89d94989d84889d3488b4788488b51f89090ff124c8b742410504d8bae68ffffff49bc01000000000000004983fd0175054d89e3eb594c8b5424184d89e94d89e04c89cb498b8248ffffff909090ff15ba0100004883f801744441f6c0017503ff55704c89c74883c70270f441f6c1017503ff55704c89ce4883ee0270f44989fc4989f5483b65187303ff5548eb9ce93a00000049bb010000000000000041f6c1017503ff55704c89cf4883ef0270f44d89c44989fd483b65187303ff5548e967ffffff49bb01000000000000004c8b54241049534d23da41f6c301495b7503ff55704d3bda7e114c89d8488b5424184883c430e9d4fbffff488b042490ff15120100004c8b4c24184d8b41f8498b783840f6c7017503ff55704889fe4883c60270f44d8d7fb84c3b7d107303ff554049c747f8080000004c89fb48c743380100000048c743300100000048c74328ffffffff488b5424104889532048c743180100000048897310498b498048894b084889034d8d7fe84c3b7d107303ff554049c747f8020000004c89f84889580848c700f3ffffff4d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fe49c706010000004989c54d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89680848c700010000004883c430c390|@4957,8191,@428,@4821|68,0,@4935 135,0,0 145,0,64 155,0,11 165,0,I11 349,0,@4943 402,0,@4945 451,0,@4947 492,0,@4949 533,0,@4951 574,0,@4953 638,0,1 679,0,@4955 861,0,0 976,0,0 1024,0,0 4935:C7,968|90909090909090483b65187303ff55484983f80175714c8b004983f801756d488b7a104889de4823f740f6c6017503ff55704889de482bf7488d760170f14d8d7fd04c3b7d107303ff554049c747f8050000004c89f948c74120010000004889711848c741100100000048c741080100000048c701f7ffffff4889de4823f740f6c601750feb0ae9da020000e9ab000000ff55704889de482bf7488d760170e54d8d7fd04c3b7d107303ff554049c747f8050000004c89fb48c74320010000004889731848c743100100000048c743080100000048c703f7ffffff4d8d7fd04c3b7d107303ff554049c747f8050000004c89fe48895e20488b5a0848895e1848894e1048b97860f8acaa2a000048894e0848c706010000004d8d7fe84c3b7d107303ff554049c747f8020000004c89f84889700848c700ffffffffc341f6c0017503ff55704983f8017e604889d74889de4c89c3488b4718ff159202000048f7c0010000007505488b18eb1848b8f009edacaa2a000090ff555848bb0100000000000000488b57104889f14823caf6c1017503ff55704889f1482bca488d490170f14889c8ff254d02000048bf01000000000000004c89c64823f740f6c6017503ff55704889fe492bf0488d760170f14889d14989d94889f3488b4120909090ff151a0200004883f801746d514c89cf4c89c0488d542408ff150a020000488b71104889fb4823def6c3017503ff55704889fb482bde488d5b0170f14d8d7fd04c3b7d107303ff554049c747f8050000004c89fa48c742200100000048895a1848c74210030000004889420848c702f7ffffff4d8d7fe8eb05e9240000004c3b7d107303ff554049c747f8020000004c89f84889500848c700010000004883c408c348bf01000000000000004c89c64823f740f6c6017503ff55704889fe492bf0488d760170f140f6c6017503ff55704883fe017d02eb29488b5928488b53f848c1e20848c1ea08488d541201524823d6f6c2015a7503ff5570483bf27d02eb1748b860d6ecacaa2a0000ff555848bb0100000000000000488b44b3fc4889c348f7c30100000075054c8b33eb1a48b8f009edacaa2a0000909090ff555849be01000000000000004c8b69104d89cc4d23e541f6c4017503ff55704d89cc4d2be54d8d64240170f041f6c4017503ff55704d89e34983c30270f44c89f34c89d8ff25aa0000004c8b72304d8b264983fcff750a4d8b5e084d8b6b08eb0a49bdd860f8acaa2a000041f6c0017503ff55704d89c34983eb0270f44989c24d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c895810488958084c89104c89eaff2290909090|@4941,8191,@428,@216,@428,@4940,@216|261,0,@4936 366,0,@213 380,0,0 429,0,0 644,0,0 739,0,@49 752,0,0 784,0,@213 800,0,0 895,0,@4938 4936:O1|@4937 4937:C2,24|48b8a80dedacaa2a000090ff555848b80100000000000000|@222,1|2,0,@220 16,0,0 4938:O1|@4939 4939:C2,24|48b8a80dedacaa2a000090ff555848b80100000000000000|@222,1|2,0,@220 16,0,0 4940:C3,184|90909090909090483b65187303ff55484883f801750b48b80100000000000000c34c8b72f849bd01000000000000004989c44d23e541f6c4017503ff55704d89ec4c2be04d8d64240170f04989d14989c04c89e3498b4620ff15820000004883f801743641f6c0017503ff55704c89c04883c00270f449514c89ca9090e885ffffffa8017503ff55704889c34883eb0270f44889d84883c408c341f6c0017503ff55704c89c04883c00270f44c89cae953ffffff90909090|@4942,8141,@428|24,0,0 39,0,0 4941:S78|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d636865636b52656375727369766543616c6c7328312970726576283329 4942:S84|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d636865636b52656375727369766543616c6c73283129676574506172616d4e6f283129 4943:C4,472|90909090909090483b65187303ff55484983f801756e4c8b0041f6c0017503ff55704983f8017e614889d74889de4c89c3488b4710909090ff15c20100004883f8017570488b5f084889f24823d3f6c2017503ff55704889f2482bd3488d520170f14d8d7fd04c3b7d107303ff554049c747f8050000004c89f848c7402001000000eb0ae90d010000e96f0000004889501848c74010030000004c89400848c700f7ffffff4989c64d8d7fe84c3b7d10730aeb05e91a000000ff554049c747f8020000004c89f84c89700848c70001000000c3488b5f084889f24823d3f6c2017503ff55704889f2482bd3488d520170f1488b184889d0ff250b010000488b7a084889de4823f740f6c6017503ff55704889de482bf7488d760170f14983f801750c48bb0300000000000000eb0a48bb01000000000000004889d94883f1024d8d7fd04c3b7d107303ff554049c747f8050000004d89fe49c74620010000004989761849894e104d89460849c706f7ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89700848c70001000000c341f6c0017503ff55704d89c64983ee0270f44989c54d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c897010488958084c8928488b5218ff2290909090|@4944,8191,@428,@216|292,0,1 304,0,0 4944:S86|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d636865636b52656375727369766543616c6c732831296c6f63616c4e657741646472283329 4945:C4,200|90909090909090483b65187303ff55484c8b2b4983fdff750b4c8b63084d8b742410eb104983fd0375064c8b7310eb044c8b73084d8b264983fcf7754c4d8b5e0841f6c3017503ff55704983fb017f02eb324d8d7ff04c3b7d107303ff554049c747f8010000004d89fa49891a5250534d89d04c89db488b42109090ff156e000000eb08525053eb035250534c8b5c24104d8d7ff04c3b7d107303ff554049c747f8010000004d89fa4c8b0c244d890a4d89d0488b5c2408498b43084883c418ff25320000009090|@4946,8191,@3276,@3276| 4946:S80|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d636865636b52656375727369766543616c6c73283129736574546162283229 4947:C2,40|90909090909090483b65187303ff55484c8b4010488b5808488b00488b5208ff2290909090909090|@4948,8191| 4948:S86|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d636865636b52656375727369766543616c6c732831296c6f63616c4e657741646472283129 4949:C2,40|90909090909090483b65187303ff55484c8b4010488b5808488b00488b5208ff2290909090909090|@4950,8191| 4950:S78|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d636865636b52656375727369766543616c6c7328312970726576283129 4951:C2,32|90909090909090483b65187303ff5548488b5808488b00488b5208ff22909090|@4952,8191| 4952:S80|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d636865636b52656375727369766543616c6c73283129736574546162283129 4953:C3,64|90909090909090483b65187303ff55484d8d7ff04c3b7d107303ff554049c747f8010000004d89fe4c8b68084d892e4d89f0488b18488b4208ff252900000090|@4954,8191,@3276| 4954:S83|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d636865636b52656375727369766543616c6c732831297365744e6577546162283129 4955:C2,40|90909090909090483b65187303ff55484c8b4010488b5808488b00488b5208ff2290909090909090|@4933,8191| 4956:S70|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d636865636b466f724c6f6f70496e73747273283129 4957:S71|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d636865636b52656375727369766543616c6c73283129 4958:C4,440|90909090909090483b65187303ff55484883fb01750b48b80100000000000000c34989d14989c04889df4889fb498b8148ffffffff15a60100004883f801751a40f6c7017503ff55704889fb4883eb0270f44c89c04c89caebad40f6c7017503ff55704883ff017d02eb2c498b9938ffffff488b53f848c1e20848c1ea08488d541201524823d7f6c2015a7503ff5570483bfa7d02eb1948b860d6ecacaa2a00009090ff555848be0100000000000000488b44bbfc4889c648f7c6010000007505488b06eb1a48b8f009edacaa2a0000909090ff555848b80100000000000000ff15020100004983f80174054989c6eb704d8bb110ffffff4d8ba968ffffff4d89f44d23e541f6c4017503ff55704d8d66ff4d03e570f44d89e34c23df41f6c3017503ff55704d89e34c2bdf4d8d5b0170f14d8d7fd84c3b7d107303ff554049c747f8040000004d89fe49c7461801000000498946104d895e0849c706f9ffffff40f6c7017503ff55704989fa4983ea0270f4495149564c89d34c89c04c89ca90e881feffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89f9498941084c8b04244d89014c89c84883c410c390909090909090|@4959,8189,@428,@4821|24,0,0 153,0,@49 168,0,0 200,0,@213 216,0,0 4959:S60|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70696564426f64792d6d616b6544656373283229 4960:C2,96|90909090909090483b65187303ff55484883f8017508488b8250ffffffc35248ff30488b4008909090e8d9ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b04244889024889d04883c410c390909090909090|@1847,5| 4961:C2,96|90909090909090483b65187303ff55484883f8017508488b8250ffffffc35248ff30488b4008909090e8d9ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b04244889024889d04883c410c390909090909090|@1847,5| 4962:C2,88|90909090909090483b65187303ff55484883f8017505488b42f8c35248ff30488b40089090e8ddffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b04244889024889d04883c410c3909090|@1847,5| 4963:C2,88|90909090909090483b65187303ff55484883f8017505488b42c8c35248ff30488b40089090e8ddffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b04244889024889d04883c410c3909090|@1847,5| 4964:C3,112|90909090909090483b65187303ff55484883f801750b48b80100000000000000c35248ff7008488b00909090ff156600000050488b442408488b542410e8c5ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fe498946084c8b2c244d892e4c89f04883c418c3909090|@417,8191,@4965|24,0,0 4965:C4,336|90909090909090483b65187303ff55484c8b304983fef9756d5248ff700848bb0100000000000000488b4010488b52f8ff15420100004c8b6c24084d8b65f84d8b5c24304d8b1341f6c2017503ff55704d89d14983c10270f44d890b4d8d7fd04c3b7d107303ff554049c747f8050000004d89f849c740200100000049c7401801000000eb05e9ae00000049c74010030000004d89500849c700f7ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89ff4c89470848c707010000004889c64d8d7fe84c3b7d107303ff554049c747f8020000004c89f848897808488b1c24488918564952498b5424d890ff12488b44240890ff15820000004889c24d8d7fd84c3b7d107303ff554049c747f8040000004c89f848c740180100000048895010488b0c244889480848c700f9ffffff4883c420c348b81072f8acaa2a0000ff555848b80100000000000000|@4968,8191,@4725,@4821|32,0,0 315,0,@4966 328,0,0 4966:O3|@7377,@215,@4967 4967:S19|6465636c4172673a206e6f74204465636c6172 4968:S48|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d6973652832296465636c417267283129 4969:C4,136|90909090909090483b65187303ff55484883f801750b48b80100000000000000c35248ff700848bb0100000000000000488b00488b52f890ff15720000009090ff157200000050488b442408488b542410e8b1ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fe498946084c8b2c244d892e4c89f04883c418c390909090909090|@417,8191,@4725,@4821|24,0,0 40,0,0 4970:C6,872|90909090909090483b65187303ff55484c8b72d04d8b264983fcff75094d8b5e084d8b2beb164983fc0375064d8b6e08eb0a49bd01000000000000004c8b5ac8498b334883feff7509498b4b08488b39eb164883fe037506498b7b08eb0a48bf0100000000000000505249504952574989d84c89eb4c89c8488d542428909090ff150a030000504c8b442418488b5c2408488b442410488d54243090ff15f6020000488b5c2420488b53f8488b4a304c8b314c8b6c24384d89f44d23e541f6c4017503ff55704d8d66ff4d03e570f44c89214d8d7fe04c3b7d107303ff554049c747f8030000004d89fb49ba2877f8acaa2a00004d89134d8973104c8b4c24284d894b085049564c89db4c89e8909090ff158a0200004d8d7fe84c3b7d107303ff554049c747f8020000004d89f848bf7078f8acaa2a0000498938488b342449897008504c89c3488b442450ff15560200004d8d7fd04c3b7d107303ff554049c747f8050000004c89fb48c743200100000048c743180100000048c7431003000000488b5424404889530848c703f7ffffff4d8d7fe04c3b7d107303ff554049c747f8030000004c89f94c8b7424504c8971104889590848c701170000004d8d7fe84c3b7d107303ff554049c747f8020000004d89fd4989450849c74500150000004d8d7fe84c3b7d107303ff554049c747f8020000004d89fc4d8974240849c70424070000004d8d7fd84c3b7d107303ff554049c747f8040000004d89fb49c74318010000004d8963104989530849c703f9ffffff4c8b5424384d8d7fd84c3b7d107303ff554049c747f8040000004d89f94c8b4424104d894118488b7c241849897910498b72d84989710849c701050000004d8d7fe84c3b7d107303ff554049c747f8020000004c89fb488b1424488953084c890b4d8d7fe84c3b7d107303ff554049c747f8020000004c89f8488958084c89184d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fc49c70424010000004d8b5af84d8d7fe84c3b7d107303ff554049c747f8020000004d89f949b85879f8acaa2a00004d8901498b7b38498979084d8d7fd04c3b7d107303ff554049c747f8050000004c89fb4c896b204c89631848894b104c894b084889034d8d7fe84c3b7d107303ff554049c747f8020000004c89f84889580848c700ffffffff4883c448c2080090909090909090|@4978,8191,@4977,@4977,@4394,@4394|52,0,0 96,0,0 236,0,@4971 304,0,@4973 761,0,@4975 4971:C2,184|4c8b72104989c54d23ee41f6c5017503ff55704c8d68ff4d03ee70f44d8d7fd04c3b7d107303ff554049c747f8050000004d89fc49c74424200100000049c74424180100000049c7442410030000004c8b5a084d895c240849c70424f7ffffff4d8d7fe04c3b7d107303ff554049c747f8030000004d89fa498942104d89620849c7020d0000004d8d7fd84c3b7d107303ff554049c747f8040000004c89f848c74018010000004c8950104c89680848c700f9ffffffc390|@4972,7941| 4972:S69|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f6d62696e655475706c65732836297370656369616c446563732d283129 4973:C2,88|4c8b72084989c54d23ee41f6c5017503ff55704c8d68ff4d03ee70f44d8d7fd04c3b7d107303ff554049c747f8050000004c89f848c740200100000048c740180100000048c74010030000004c89680848c700f7ffffffc3|@4974,6149| 4974:S72|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f6d62696e655475706c65732836297370656369616c456e74726965732d283129 4975:C3,168|90909090909090483b65187303ff55484c8b304d8d7fd04c3b7d107303ff554049c747f8050000004d89fd4d8b66184d8965204d8b5e104d895d184d8b56084d8955104d8b0e4d894d0849c74500f7ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89f84d89680849c700010000004c8b6808488b7a084c89ee4823f740f6c6017503ff55704c89ee482bf7488d760170f14c89c34889f0ff252c00000090909090|@4976,8191,@216| 4976:S60|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f6d62696e655475706c6573283629656e76283129 4977:C7,256|90909090909090483b65187303ff554849f7c001000000751b4989d14889da498b184889d04c89caff15fa000000ff25fc0000004d8d7fd04c3b7d107303ff554049c747f8050000004d89fe49c746200100000049c746180100000049c74610030000004c8b6af84d896e0849c706f7ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fc498944240849c7042415000000534c8b42084c89e34c89f090ff158e0000004d8d7fe84c3b7d107303ff554049c747f8020000004d89fb49c74308010000004989034983fb017506488b0424eb194953488b442408488d542410909090ff15520000004883c4084883c408ff254c00000090909090|@4980,8191,@4981,@4510,@4985,@4979,@4510| 4978:S54|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f6d62696e655475706c6573283629 4979:C2,88|90909090909090483b65187303ff55484883f8017505488b42f0c35248ff30488b40089090e8ddffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b04244889024889d04883c410c3909090|@1847,5| 4980:S69|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f6d62696e655475706c65732836296372656174654272616e6368283329 4981:C2,392|90909090909090483b65187303ff55484883f801751a48b8e07ef8acaa2a0000909090ff555848b801000000000000004c8b304d8b2e4983fdf9756d4d8b660849544c0be341f6c401495c7503ff55704c3be37559488b5af849544c0be341f6c401495c7503ff55704c3be37505488b4008c34d8d7fd04c3b7d107303ff554049c747f8050000004c89f948c741200100000048c741180100000048c741100300000048895908eb0ae99b000000e95d00000048c701f7ffffff4d8d7fd84c3b7d107303ff554049c747f8040000004d89fb49c743180100000049894b104d89630849c703f9ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89f94c8b50084c8951084c89194889c8c3524956488b40089090e8e9feffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fb498943084c8b14244d89134c89d84883c410c3524956488b400890e8b1feffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fc49894424084c8b1c244d891c244c89e04883c410c39090909090|@4984,7951|24,0,@4982 40,0,0 4982:O3|@7377,@215,@4983 4983:S19|7265706c616365436f6e7461696e6572446563 4984:S76|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f6d62696e655475706c65732836297265706c616365436f6e7461696e6572446563283229 4985:C3,256|90909090909090483b65187303ff55484c8b334983fe05756950495048ff730848ff7318488b5b1090e8d9ffffff504c8b442418488b5c2408488b442420909090e8c1ffffff4989c04d8d7fd84c3b7d107303ff554049c747f8040000004c89f84c894018488b1c24488958104c8b7424104c89700848c700050000004883c428c34983fe13753d495050488b4308488d542410ff158e0000004989c54d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89680848c700130000004883c410c34983feed75044889d8c34989c54d8d7fd84c3b7d107303ff554049c747f8040000004c89f84c896818488958104c89400848c700ebffffffc39090|@4988,8191,@4986| 4986:C2,184|90909090909090483b65187303ff55484883f801751a48b8105ff0acaa2a0000909090ff555848b801000000000000004c8b70084983fe01753f4c8b42f8488b18488b42f048bab881f8acaa2a000090ff124989c54d8d7fe84c3b7d107303ff554049c747f8020000004c89f848c74008010000004c8928c35248ff30488b4008e881ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fd498945084c8b24244d8965004c89e84883c410c3909090909090|@4989,8191|24,0,@2029 40,0,0 71,0,@4987 4987:O1|@4985 4988:S28|434f44455452454528292e6d6b536574436f6e7461696e6572283329 4989:S40|434f44455452454528292e6d6b536574436f6e7461696e65722833296170706c794c617374283129 4990:C7,704|90909090909090483b65187303ff5548524883f801750f48b8f81bf8acaa2a00004883c408c34c8b304d8b2e4983fdf9751d4d8b4608498b5e10488b4008488d54240890ff159e0200004883c408c34983fdef751a498b5e08488b4008488d5424089090ff15860200004883c408c34c8b60084983fc017515488b5af0488b00488b52f84883c408ff256a020000495448bb0100000000000000488b00488b52f8909090ff155602000050488b442408488b542410e84dffffff4c8b104983faff750a4c8b48084d8b5910eb104983fa0375064c8b5810eb044c8b58084983faff750a4c8b40084d8b4820eb0a49b9380dedacaa2a00004983faff750a488b78084c8b4708eb0a49b85085f8acaa2a0000488b3c24488b1f4883fbff7509488b5708488b32eb164883fb037506488b7708eb0a48be01000000000000004883fbff750a488b4f08488b5110eb104883fb037506488b5710eb04488b57084983faff75094c8b7008498b0eeb164983fa037506488b4808eb0a48b901000000000000004d8d7fe84c3b7d107303ff554049c747f8020000004d89fe49894e084989164983fe0175054989f5eb2049564989c44889f0488d542420909090ff15460100004989c54883c4084c89e0488b304883feff750a488b50084c8b5218eb244d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fa49c702010000004d8d7fd04c3b7d107303ff554049c747f8050000004c89fa4c894a204c8952184c895a104c8942084c892a498b094883f9fd755a4983fd0175284d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89580848c700010000004883c418c34d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c8958104c89680848c700030000004883c418c34d8d7fe84c3b7d107303ff554049c747f8020000004c89f84889500848c700ffffffff4883c418c390909090909090|@4994,8191,@4995,@5000,@4725,@4725,@4993|25,0,@4797 146,0,0 239,0,@217 265,0,@4991 309,0,0 378,0,0 4991:O1|@4992 4992:C2,24|48b8a80dedacaa2a000090ff555848b80100000000000000|@222,1|2,0,@220 16,0,0 4993:C2,88|90909090909090483b65187303ff55484883f8017505488b42e0c35248ff30488b40089090e8ddffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b04244889024889d04883c410c3909090|@1847,5| 4994:S57|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70794465636c61726174696f6e73283129 4995:C6,552|90909090909090483b65187303ff55484c8b72f84d8b6ef85250495049ff75d84989dc48bb01000000000000004c89e04c89ea90ff151602000049b903000000000000004c8b4424084889c3488b04244c8b5c24184d8b53f8498b52f8909090ff15f201000050488b4424184c8b4c2420498b51f8909090ff15e20100004c8b04244983f80175054883c428c3488b304883feff750a488b5808488b7b10eb104883fe037506488b7810eb04488b78084883feff750a488b5008488b5a20eb0a48bb380dedacaa2a00004883feff750a488b4808488b5108eb0a48ba1089f8acaa2a00004883feff75094c8b7008498b0eeb164883fe037506488b4808eb0a48b901000000000000004883f90175054d89c6eb23514989c54989d44c89c0488d54243090ff153e0100004989c64883c4084c89e24c89e84c8b104983faff750a4c8b48084d8b5918eb244d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fb49c703010000004d8d7fd04c3b7d107303ff554049c747f8050000004d89f9498959204d89591849897910498951084d89314c8b034983f8fd755a4983fe0175284d8d7fe84c3b7d107303ff554049c747f8020000004c89f84889780848c700010000004883c428c34d8d7fe04c3b7d107303ff554049c747f8030000004c89f8488978104c89700848c700030000004883c428c34d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89480848c700ffffffff4883c428c390909090|@4999,8191,@4725,@4909,@4990,@4998|37,0,0 60,0,1 194,0,@217 220,0,@4996 257,0,0 4996:O1|@4997 4997:C2,24|48b8a80dedacaa2a000090ff555848b80100000000000000|@222,1|2,0,@220 16,0,0 4998:C2,88|90909090909090483b65187303ff55484883f8017505488b42d0c35248ff30488b40089090e8ddffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b04244889024889d04883c410c3909090|@1847,5| 4999:S59|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70794465636c61726174696f6e732831292f32 5000:C10,1736|90909090909090483b65187303ff5548525049be103dedacaa2a00004883fb0175054d89f5eb2e488b4b08488b034c89f3909090ff15b60600004989c64889cb483b65187303ff5548ebd149bd01000000000000004c8b6424084d8b5c24f84d8b53f84d8b4a304d8b0149ff750049ff75084950488b442408488d5424289090ff1572060000488b7c2420488b77f8488b5ef8488b5330488b0a50514c8b7424204983fe01750c49bd0100000000000000eb6c4d8b264d8b1c244983fbf975644c8b5424304d8b4af84d8b41f849ff760849ff74240849ff70d848bb0100000000000000498b4424104c89c2ff150e0600004889c74d8d7fe84c3b7d107303ff554049c747f8020000004c89f848897808488b742408488930488b1424eb0ae93b000000e907000000909090ff12eb0e48b89091f8acaa2a000090ff55584c8b7424104883c418483b65187303ff5548e94cffffff49bd01000000000000004d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fc49c70424010000004d8d7fd84c3b7d107303ff554049c747f8040000004d89fb49bad891f8acaa2a00004d89134c8b4c24104d894b184c8b04244d8943104d8963084953495448b80100000000000000488d542448909090ff152e0500005048bf03000000000000004883f80175054889feeb50488b18488b0b4883f9f9751e4c8b73104d8b2e4983fdfb75054889faeb1648ba0100000000000000eb0a48ba01000000000000004889d7488b4008483b65187303ff5548ebaf48be0100000000000000488b5c2408488b134883fa017402eb084883fe017502eb06488b0c24eb70488b042448ba3093f8acaa2a0000ff124d8d7fe84c3b7d107303ff554049c747f8020000004c89f94c8b34244c89710848c701efffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fd4989450849c74500150000005149554883f801751149bc0300000000000000eb34e9a80100004c8b184d8b134983fafb7519488b4008483b65187303ff5548ebce49bc010000000000000049bc01000000000000004983fc01742f488b0424ff15fe0300004d8d7fe84c3b7d107303ff554049c747f8020000004d89f94989410849c701fbffffffeb044c8b0c244d8d7fe84c3b7d107303ff554049c747f8020000004d89f849c74008010000004d89084d8d7fe84c3b7d107303ff554049c747f8020000004c89ff4c894708488b7424084889374d8d7fe84c3b7d107303ff554049c747f8020000004c89fb48897b0848c70313000000488b542458488b4af8488b41f84c8b70204889d84c89f2ff12504c8b6c24484c8b64243849bb103dedacaa2a000049f7c501000000756949f7c4010000007565505049ff750849ff7424084c8d4c24104d89d8498b1c24498b4500488d942488000000ff150a0300004d8d7fe84c3b7d107303ff554049c747f8020000004d89f94c8b4424104d8901488b7c2418498979084d89cb4c8b24244c8b6c2408eb0ae926000000e91c0000004883c420483b65187303ff5548e972ffffff49ba01000000000000004d89daeb034d89da498b4a084883c41851488b4424484c8b542450498b52f89090ff158e0200004c8b04244983f801750c49b90100000000000000eb6d5050498b78084883ff0175164889e6498b1848891e4889e248c7420801000000eb344d8d7fe84c3b7d107303ff554049c747f8020000004c89fe4c89460848c706efffffff4889e34889334889e248c74208010000004d8d7fe84c3b7d107303ff554049c747f802000000eb05e9170000004d89f9488b0c244989094c8b7424084d8971084883c4104c8b204983fcff750a4c8b58084d8b6b10eb104983fc0375064c8b6810eb044c8b68084983fcff750a4c8b50084d8b5a20eb0a49bb380dedacaa2a00004983fcff750a4c8b40084d8b5008eb0a49ba8894f8acaa2a00004983fcff7509488b78084c8b07eb164983fc0375064c8b4008eb0a49b801000000000000004983f80175054c89cfeb2049504889c64c89c8488d542460909090ff155a0100004889c74883c4084889f0488b104883faff750a488b4808488b5918eb244d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89fb48c703010000004d8d7fd04c3b7d107303ff554049c747f8050000004c89f94c895920488959184c8969104c8951084889394d8b334983fefd755a4883ff0175284d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89680848c700010000004883c458c34d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c8968104889780848c700030000004883c458c34d8d7fe84c3b7d107303ff554049c747f8020000004c89f84889480848c700ffffffff4883c458c3909090|@5012,8191,@5013,@5015,@4725,@5016,@4523,@5030,@4990,@5011|20,0,@268 77,0,0 169,0,0 220,0,0 306,0,@5001 343,0,0 414,0,@5003 452,0,0 477,0,1 528,0,0 540,0,0 568,0,0 612,0,@5005 708,0,1 752,0,0 762,0,0 971,0,@268 1123,0,0 1182,0,0 1382,0,@217 1408,0,@5009 1445,0,0 5001:O3|@7377,@215,@5002 5002:S22|6d757475616c446563733a206e6f74204465636c6172 5003:C2,200|4c8b304983fef775554c8b68104983fd0375664c8b60184983fc0175614c8b58084c8b521849534d23da41f6c301495b7503ff55704d3bda7c294c8b4a1049534d23d941f6c301495b7503ff55704d3bd97d1048b80100000000000000c3e9480000004c8b4a0849c7010300000048b80100000000000000c3e9160000004c8b5a0849c7030300000048b80100000000000000c34c8b620849c704240300000048b80100000000000000c34c8b6a0849c745000300000048b80100000000000000c3909090909090|@5004,8069|85,0,0 112,0,0 139,0,0 162,0,0 185,0,0 5004:S72|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70794465636c61726174696f6e73283129636865636b436c6f73757265283129 5005:O1|@5006 5006:C2,200|90909090909090483b65187303ff55484883f801750b48b80100000000000000c34c8b304d8b264983fcf975424d8d7fd04c3b7d107303ff554049c747f8050000004d89fd49c745200100000049c745180100000049c74510030000004d8b5e084d895d0849c74500f7ffffffeb1d4c8b580848b84094f8acaa2a00009090ff555849bd01000000000000004955488b4008909090e86dffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fe498946084c8b2c244d892e4c89f04883c408c3909090|@417,7681|24,0,0 117,0,@5007 132,0,0 5007:O3|@7377,@215,@5008 5008:S20|65787472616374733a206e6f74204465636c6172 5009:O1|@5010 5010:C2,24|48b8a80dedacaa2a000090ff555848b80100000000000000|@222,1|2,0,@220 16,0,0 5011:C2,88|90909090909090483b65187303ff55484883f8017505488b42a0c35248ff30488b40089090e8ddffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b04244889024889d04883c410c3909090|@1847,5| 5012:S59|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70794465636c61726174696f6e732831292f33 5013:C2,328|50504c8b304983fef9756f4c8b68104d8b65004983fcf375664d8b5d084d8b53284983fa0175354d8d7fe84c3b7d107303ff554049c747f8020000004d89f94c8b034d8941084989014889e74c890f4989e1488b7b0849897908eb6f4d8d7fe84c3b7d107303ff554049c747f8020000004d89f94c8b4308eb0ae95a000000e9190000004d8941084989014889e7488b334889374889e74c894f08eb6e4d8d7fe84c3b7d107303ff554049c747f8020000004d89fb4c8b53084d8953084989034989e14c8b034d8901eb05e9440000004889e74c895f08eb3b4d8d7fe84c3b7d107303ff554049c747f8020000004d89fd4c8b63084d896508498945004989e34c8b134d89134989e1eb05e9040000004d8969084d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b04244c8900488b7c2408488978084883c410c390909090909090|@5014,8185| 5014:S70|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70794465636c61726174696f6e732831293c7061747465726e3e2d283229 5015:C2,360|90909090909090483b65187303ff55484883f801750b48b80100000000000000c34c8b304d8b264983fcf975734c8b5af84d8b53f84d8b4af84d8b4130498b384d8d7fd04c3b7d107303ff554049c747f8050000004c89fe48c746200100000048c746180100000048c746100300000048897e0848c706f7ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fb4889730848c70301000000eb05e965000000488b48084d8d7fe84c3b7d107303ff554049c747f8020000004c89f8488958084d8b6e084c8928525157498b51d890ff124c8b6424104d8b5c24f84d8b53f84d8b4af84d8b4130498b3840f6c7017503ff55704889fe4883c60270f44989304c8b2c24eb1e4c8b580848b89091f8acaa2a0000909090ff555849bd01000000000000004955488b4424104c89e2909090e8cdfeffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fb48894308488b14244889134889d84883c420c3909090|@417,8191|24,0,0 272,0,@5001 288,0,0 5016:C3,80|90909090909090483b65187303ff554852488b5ad0488b42e0488d5424089090ff15520000004c8b70084983fe01741448b80100000000000000488b14244883c408ebc3488b004883c408c390909090|@5018,8191,@5017|50,0,0 5017:C3,176|90909090909090483b65187303ff554848f7c001000000756b48f7c30100000075675248ff3048ff33488b5b08488b4008e8d1ffffff50504989e14989c0488b5c2410488b4424184c8b742420498b56f8909090ff157e0000004d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b2c244c89284c8b6424084c896008eb0ae915000000e9050000004883c428c348b8103dedacaa2a0000c348b8103dedacaa2a0000c390909090909090|@5028,8191,@5019|149,0,@268 160,0,@268 5018:S73|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70794465636c61726174696f6e7328312972657065617450726f63657373283129 5019:C3,1664|90909090909090483b65187303ff55484c8b304983fef9756e4c8b6af84d8b65f84d8b5c24f84d8d7fd84c3b7d107303ff554049c747f8040000004d89fa49c742180100000049c742100100000049c7420803000000488b780849893a488b70104d8d7fe04c3b7d107303ff554049c747f8030000004c89f848c7401001000000498b4b38eb05e9dc050000488948084c891052534951575649ff3049ff7008498b53e8ff124c8b284983fdff750b4c8b60084d8b742410eb104983fd0375064c8b7010eb044c8b70084d8b264983fcfb75744d8d7fd84c3b7d107303ff554049c747f8040000004d89fb49c74318010000004d8973104c8b5424284d89530849c703f9ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89f94c8b4424084d8941084d8919488b7c24204c890f488b34244889770848b80100000000000000eb05e9050000004883c438c34c8b5c24304d8b53f84d8b4af84d8b41f84889c74d8d7fe84c3b7d107303ff554049c747f8020000004c89f848bee0a1f8acaa2a000048897008488b5c241848891857498b50d8ff12488b542438488b4af8488b41f84c8b70f84d8d7fe84c3b7d107303ff554049c747f8020000004c89f849bde0a1f8acaa2a00004c8968084c8b6424304c8920498b56e0909090ff1248bb0100000000000000488b4424184c8b5c24384d8b53f84d8b4af8498b51f89090ff159e040000488b384883ffff750a488b70084c8b4610eb104883ff0375064c8b4010eb044c8b40084883ffff750a488b5808488b7320eb0a48be380dedacaa2a0000498b104883fafb750c48bb0300000000000000eb0a48bb01000000000000004883fafb75054c89c1eb724883faf375714d8b70084c8b6c2438504950565349ff75c04d8b66184983fc017502eb2449ff742408498b0424488b54240890ff124c8b24244883c408483b65187303ff5548ebd44d8d7fd04c3b7d107303ff554049c747f8050000004c89f948c741200100000048c7411801000000eb0ae942000000e91a00000048c74110030000004c8b5c24584c89590848c701f7ffffffeb1d4989c648b828a2f8acaa2a0000909090ff555848b901000000000000004883c408eb055049505653488b4424584c8b70f84d8b6ef84d8b65f84d8d7fe84c3b7d107303ff554049c747f8020000004d89fb49894b0849c703010000004d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8958084c8b5424504c891051498b5424e0909090ff124c8b4c2410498b394883fff3753e498b7108488b5e284883fbff750c49b8380dedacaa2a0000eb46488b542420488b0a4883f9ff750a488b42084c8b4020eb2e49b8380dedacaa2a0000eb22488b742420488b1e4883fbff750a488b56084c8b4220eb0a49b8380dedacaa2a0000498b104883fafd7444488b4424284c8b284983fdff750b4c8b60084d8b742420eb0a49be380dedacaa2a00004d8b264983fcfd750c48b90300000000000000eb1648b90100000000000000eb0a48b90100000000000000488b4424604c8b70f84d8b6ef84d8b65f84c8b5c2420498b334883feff750a498b5b084c8b5308eb0a49ba80a2f8acaa2a00004883feff7509498b5b08488b1beb164883fe037506498b5b08eb0a48bb01000000000000004883feff750a4d8b4b08498b4118eb244d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89f848c700010000004d8d7fd04c3b7d107303ff554049c747f8050000004d89f94d89412049894118488b3c24498979104d8951084989194883fafd75544883fb0175254d8d7fe84c3b7d107303ff554049c747f8020000004c89f84889780848c70001000000eb4c4d8d7fe04c3b7d107303ff554049c747f8030000004c89f8488978104889580848c70003000000eb234d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89480848c700ffffffff4989c24d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8950084c8b4c24484c890851498b5424d8ff124d8d7fd84c3b7d107303ff554049c747f8040000004d89f849c7401801000000488b7c242049897810488b7424604989700849c700f9ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fb488b542440488953084c8903488b4c24384883f901740c48b80300000000000000eb1b488b4424104883f801740c48b80300000000000000eb04488b04244c8b74245849891e4989460848b801000000000000004883c470c348b8e0a2f8acaa2a000090ff555848b80100000000000000|@5029,8191,@4725|317,0,0 383,0,@5020 453,0,@5020 484,0,0 575,0,@217 594,0,1 606,0,0 780,0,@5022 796,0,0 944,0,@217 980,0,@217 1016,0,@217 1060,0,@217 1079,0,1 1091,0,0 1103,0,0 1154,0,@5024 1191,0,0 1576,0,1 1599,0,1 1627,0,0 1642,0,@5026 1656,0,0 5020:O2|0,@5021 5021:O5|-5,0,0,-1,0 5022:O3|@7377,@215,@5023 5023:S33|70726f636573734e6f6e496e6c696e65733a204e6f7420612066756e6374696f6e 5024:O1|@5025 5025:C2,24|48b8a80dedacaa2a000090ff555848b80100000000000000|@222,1|2,0,@220 16,0,0 5026:O3|@7377,@215,@5027 5027:S29|70726f636573734e6f6e496e6c696e65733a206e6f74204465636c6172 5028:S17|4c697374506169722e666f6c6472283429 5029:S77|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70794465636c61726174696f6e7328312970726f636573734e6f6e496e6c696e6573283429 5030:C3,848|90909090909090483b65187303ff55484c8b304983fef9756e4c8b6af84d8b65f84d8b5c24f84d8d7fd84c3b7d107303ff554049c747f8040000004d89fa49c742180100000049c742100100000049c7420803000000488b780849893a4d8d7fe04c3b7d107303ff554049c747f8030000004c89f848c7401001000000498b733848897008eb05e9ac0200004c8910525349515749ff3049ff7008498b53e890ff12488b5c242850488b5b98488b442410909090ff15be020000488b542430488b4af84c8b71f84d8b6ef84d8d7fe84c3b7d107303ff554049c747f8020000004d89fc498944240849c70424010000004989c34d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8960084c8b5424284c89104953498b55e0909090ff124c8b4c24384d8b41f8498b78f8488b77f8488b5c2408488b0b4883f9ff750a488b4308488b5020eb0a48ba380dedacaa2a00004883f9ff750a4c8b7308498b4608eb0a48b848a7f8acaa2a00004883f9ff750a4c8b6b084d8b7500eb164883f90375064c8b7308eb0a49be01000000000000004883f9ff750b4c8b63084d8b6c2418eb254d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fd49c74500010000004d8d7fd04c3b7d107303ff554049c747f8050000004d89fc49895424204d896c24184c8b1c244d895c241049894424084d893424488b024883f8fd75544983fe0175254d8d7fe84c3b7d107303ff554049c747f8020000004d89fa4d895a0849c70201000000eb4c4d8d7fe04c3b7d107303ff554049c747f8030000004d89fa4d895a104d89720849c70203000000eb234d8d7fe84c3b7d107303ff554049c747f8020000004d89fa4d89620849c702ffffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8950084c8b7424204c8930488b56d890ff124c8b6c241841f6c5017503ff55704d89ec4983c40270f44d8d7fd84c3b7d107303ff554049c747f8040000004d89fb49c74318010000004c8b14244d8953104c8b4c24304d894b0849c703f9ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89f8488b7c2410498978084d8918488b7424284c89264c89460848b801000000000000004883c440c348b8a8a7f8acaa2a000090ff555848b80100000000000000|@5035,8191,@4802|333,0,@217 359,0,@5031 397,0,0 811,0,0 826,0,@5033 840,0,0 5031:O1|@5032 5032:C2,24|48b8a80dedacaa2a000090ff555848b80100000000000000|@222,1|2,0,@220 16,0,0 5033:O3|@7377,@215,@5034 5034:S24|726570726f636573734465633a206e6f74204465636c6172 5035:S77|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d697365283229636f70794465636c61726174696f6e73283129646563732d726570726f63657373446563283429 5036:C6,680|90909090909090483b65187303ff55484883fb01752249c7000100000049c740080100000049c740100100000048b80100000000000000c34d8d7fe84c3b7d107303ff554049c747f8020000004d89fe49bd50abf8acaa2a00004d892e4c8b6ae04d896e085250495048ff730849564c8b2348bb01000000000000004c89e0488b52d890ff154602000049b903000000000000004c8b4424184889c3488b04244c8b5c2420498b53d8909090ff15260200004c8b5424204989c1488b5c2418498b42e090ff151602000048f7c00100000075054c8b00eb1848b8f009edacaa2a000090ff555849b80100000000000000488b7c241840f6c7017503ff55704889fe4883c60270f4505050495149504c8d442410488b5c24304889f0488b54244890e8e1feffff488b1c24488b0b4883f9ff750a488b4308488b5010eb104883f9037506488b5310eb04488b53084883f9ff750a4c8b7308498b4620eb0a48b8380dedacaa2a00004c8b324983fefb7502eb1d4c8b6424484d8b5c24e849c7030100000049bd0100000000000000eb0a49bd01000000000000004c8b284983fdfd752f4983fefb75294d8d7fe84c3b7d107303ff554049c747f8020000004d89fb4c8b5424204d8953084989134d89dceb6c4d8d7fd04c3b7d107303ff554049c747f8050000004d89fc49c74424200100000049c74424180100000049c7442410030000004c8b5c24404d895c240849c70424f7ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fa4c8b4c24204d894a084d89224d89d44d8d7fe84c3b7d107303ff554049c747f8020000004d89f8488b7c2418498978084989104c8b5c24104983fb017507488b742408eb16488b442408488d542450909090ff15620000004889c64c8b5424384989324d8942084d89621048b801000000000000004883c450c3|@5039,8191,@4725,@4909,@428,@5038|47,0,0 82,0,@5037 116,0,0 140,0,1 218,0,@213 232,0,0 351,0,@217 389,0,0 401,0,0 667,0,0 5037:C3,64|90909090909090483b65187303ff55484d8d7ff04c3b7d107303ff554049c747f8010000004d89fe4c8b68084d892e4d89f0488b18488b4208ff252900000090|@4764,8191,@3276| 5038:C2,88|90909090909090483b65187303ff55484883f8017505488b42c0c35248ff30488b40089090e8ddffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b04244889024889d04883c410c3909090|@1847,5| 5039:S49|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d6973652832296d616b6544656373283329 5040:C4,592|90909090909090483b65187303ff5548524889c3488b42f0ff155a0200004c8b34244d8b6ee84d8b5d004983fbff750a4d8b55084d8b6208eb0a49bc40aff8acaa2a00004d8b56f849ff723849ff723049ff722849ff72206a0149ff721049ff72084d8b4ad84d8b42e0498b7af84d89c24d89e048bba0aff8acaa2a00004889fa909090ff12488b184883fbff750a488b5008488b7210eb104883fb037506488b7010eb04488b70084883fbff750a488b4808488b5120eb0a48ba380dedacaa2a00004883fbff750a4c8b7008498b4e08eb0a48b900b0f8acaa2a00004c8b34244d8b6ee84d8b5d004983fbff75094d8b55084d8b22eb164983fb0375064d8b6508eb0a49bc01000000000000004883fbff75094c8b48084d8b11eb164883fb0375064c8b5008eb0a49ba01000000000000004983fa0175054d89e1eb2549524989c04889d74c89e0488d5424109090ff152a0100004989c14883c4084889fa4c89c04c8b204983fcff750a4c8b5008498b5a18eb244d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89fb48c703010000004d8d7fd04c3b7d107303ff554049c747f8050000004d89fa4989522049895a184989721049894a084d890a4c8b024983f8fd755a4983f90175284d8d7fe84c3b7d107303ff554049c747f8020000004c89f84889700848c700010000004883c408c34d8d7fe04c3b7d107303ff554049c747f8030000004c89f8488970104c89480848c700030000004883c408c34d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89500848c700ffffffff4883c408c3|@5048,8191,@4802,@5047|60,0,@5041 118,0,@5043 187,0,@217 213,0,@5045 262,0,0 299,0,0 5041:O1|@5042 5042:C2,24|48b8a80dedacaa2a000090ff555848b80100000000000000|@222,1|2,0,@220 16,0,0 5043:O1|@5044 5044:C2,24|48b8a80dedacaa2a000090ff555848b80100000000000000|@222,1|2,0,@220 16,0,0 5045:O1|@5046 5046:C2,24|48b8a80dedacaa2a000090ff555848b80100000000000000|@222,1|2,0,@220 16,0,0 5047:C2,88|90909090909090483b65187303ff55484883f8017505488b42f0c35248ff30488b40089090e8ddffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b04244889024889d04883c410c3909090|@1847,5| 5048:S40|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d6973652832292f31 5049:C4,136|90909090909090483b65187303ff55484883f801750b48b80100000000000000c35248ff700848bb0100000000000000488b00488b52f890ff15720000009090ff157200000050488b442408488b542410e8b1ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fe498946084c8b2c244d892e4c89f04883c418c390909090909090|@417,8191,@4725,@4821|24,0,0 40,0,0 5050:C2,88|90909090909090483b65187303ff55484883f8017505488b42d8c35248ff30488b40089090e8ddffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b04244889024889d04883c410c3909090|@1847,5| 5051:C2,368|90909090909090483b65187303ff55484883f801751a48b8e07ef8acaa2a0000909090ff555848b801000000000000004c8b304d8b2e4983fdf975734d8b66084c8b5af049544d0be341f6c401495c7503ff55704d3be3755b4d8d7fd04c3b7d107303ff554049c747f8050000004d89fa49c742200100000049c742180100000049c74210030000004c8b4af84d894a0849c702f7ffffff4d8d7fd84c3b7d107303ff554049c747f804000000eb0ae97d000000e9410000004d89f849c74018010000004d8950104d89600849c700f9ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fa488b780849897a084d89024c89d0c3524956488b4008e801ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fa498942084c8b0c244d890a4c89d04883c410c3524956488b400890e8c9feffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fc49894424084c8b1c244d891c244c89e04883c410c39090909090|@5053,8165|24,0,@4982 40,0,0 5052:S57|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d69736528322970757368536574436f6e7461696e6572283229 5053:S79|434f44455452454528292e6f7074696d69736550726f63283132296f7074696d69736528322970757368536574436f6e7461696e65722832297265706c616365436f6e7461696e6572446563283129 5054:C3,232|90909090909090483b65187303ff554850504989d64989c54989dc4d89c349b8010000000000000048bb810000000000000048b80d0000000000000048ba70156000000000009090ff1248c7000b0000004d8d7fe84c3b7d107303ff554049c747f8020000004d89f84989400849c700ffffffff4d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89ff4c89074889e348893b4889e248c74208010000004d8d7fe84c3b7d107303ff554049c747f8020000004c89f9488b04244889014c8b4424084c894108495651495449534c89e8488d542430ff152e0000004883c430c390|@5058,8191,@5055|32,0,0 42,0,64 52,0,6 62,0,I11 5055:C14,1744|90909090909090483b65187303ff55484c8b3049f7c601000000741e4983feeb7c1d4983fe177f1c49bd52b6f8acaa2a00004f8d6cb55441ffe5e9c3000000e9be000000e9b900000090e9b3040000909090e9ba030000909090e9a3000000909090e96e030000909090e986010000909090e9dd030000909090e9b9000000909090e97b000000909090e9d6010000909090e92e060000909090e9df020000909090e96d010000909090e953000000909090e957020000909090e942040000909090e9e2010000909090e933000000909090e98f010000909090e96a030000909090e922010000909090e92d000000909090e9cf030000909090e98305000090909048b870bdf8acaa2a0000909090ff555848b8010000000000000052488b4008488d5424089090ff15ca0500004883c408ff25c80500004d8d7fd84c3b7d107303ff554049c747f8040000004d89fc4c8b58204d895c24184c8b50184d895424104c8b48104d894c24084c8b40084d8904244983fa01753d41f6c0017503ff55704983f8017c244983f901741e5049b80300000000000000488b5808488b42e0909090ff155e050000eb0150488b04244883c408c341f6c2017503ff55704c89d74883ef0270f44d8d7fe04c3b7d107303ff554049c747f8030000004c89f8488b72d048897010488978084c8920488b52d8ff22488b580848b80100000000000000ff250705000048b8808ff6acaa2a0000c35248ff7010488b4008e8e5fdffff50488b442408488b542410e8d5fdffff4989c44d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c8960104c8b1c244c89580848c700010000004883c418c3c35248ff7010488b40089090e891fdffff4989c44d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c8b1c244c8958104c89600848c7000d0000004883c410c35248ff700848ff7018488b4010909090e849fdffff50488b442410488d542420909090ff15460400004989c44d8d7fd84c3b7d107303ff554049c747f8040000004c89f84c8b5c24084c8958184c8b14244c8950104c89600848c700090000004883c420c35248ff701048ff7018488b40089090e8e5fcffff50488b442410488b542418e8d5fcffff50488b442410488b542420e8c5fcffff4989c44d8d7fd84c3b7d107303ff554049c747f8040000004c89f84c8960184c8b1c244c8958104c8b5424084c89500848c700050000004883c428c35248ff7010488b40089090e879fcffff50488b442408488d542418909090ff157e0300004989c44d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c8960104c8b1c244c89580848c700ffffffff4883c418c352488b4008488d54240890ff15420300004989c44d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89600848c700f1ffffff4883c408c352488b4008909090e8e9fbffff4989c44d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89600848c700edffffff4883c408c348b8c08ff6acaa2a0000c35248ff701048ff7018488b4008e8a1fbffff50488b442408488d542420909090ff15b602000050488b442418488b542420e87dfbffff4989c44d8d7fd84c3b7d107303ff554049c747f8040000004c89f84c8b1c244c8958184c8960104c8b5424084c89500848c700f5ffffff4883c428c352488b4008488d542408ff15620200004989c44d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89600848c700150000004883c408c3c34c8b60184d8b14244983faf7755a4d8b4c24104983f90375604d8b4424184983f801755a498b7c240840f6c7017503ff55704883ff017f0c49bb0300000000000000eb294889d6488b480848ff701049544889fb488b46e09090ff15de0100004989c34889f2eb56e93d00000048ff70104954488b4808eb45e91600000049bb030000000000000048ff70104954488b4808eb2a49bb030000000000000048ff70104954488b4808eb1449bb030000000000000048ff70104954488b48084c8b4c24084d8b014983f8057521524989c84c89cb488b4424089090ff1566010000488b14244883c418e918faffff4983f8137522524989c84c89cb488b442408909090ff1546010000488b14244883c418e9f0f9ffff4983f8ed750c4c89c84883c410e9def9ffff5251488b44241090e8d1f9ffff50488b442420488b542410e8c1f9ffff4889c74d8d7fd84c3b7d107303ff554049c747f8040000004c89f8488b34244889701848897810488b5c24084889580848c700ebffffff4883c428c35248ff7010488b40089090e875f9ffff4989c44d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c8b1c244c8958104c89600848c700170000004883c410c348b8380dedacaa2a0000c3|@5060,8191,@5061,@4510,@3276,@5066,@5076,@5077,@5078,@5079,@5059,@428,@4985,@4985|42,0,$5055+74 260,0,@5056 276,0,0 401,0,1 507,0,0 523,0,@4253 1099,0,@4256 1340,0,1 1410,0,1 1432,0,1 1454,0,1 1735,0,@217 5056:O3|@7377,@215,@5057 5057:S24|636c65616e436f64653a20756e6b6e6f776e20696e737472 5058:S23|434f44455452454528292e636c65616e50726f63283329 5059:C3,120|90909090909090483b65187303ff55484883f801750b48b80100000000000000c35248ff7008488b00488b52f8909090ff156a00000050488b442408488b542410e8c1ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fe498946084c8b2c244d892e4c89f04883c418c390909090909090|@417,8191,@5055|24,0,0 5060:S35|434f44455452454528292e636c65616e50726f63283329636c65616e436f6465283129 5061:C10,920|90909090909090483b65187303ff55484883f801750b48b80100000000000000c34c8b304d8b2e4983fdf975654c8b62f85249ff760849ff761049ff761848ff700849b80100000000000000488b5c2418498b4424e09090ff1562030000488b0424488b5424209090e899ffffff4c8b5c24204d8b53f84989c1488b5c2418498b42e090ff153e0300004883f8017407eb28e9d60000004c8b442420498b78f8488b77e84951488b442418488b560890ff124883f8017404eb6f49514c8b442418498b304883fef3751d498b5808488b442420488b542428488b52f8ff15ee0200004889c7eb164c89c0488b5c2428488b53f890ff15de0200004889c74d8d7fd84c3b7d107303ff554049c747f8040000004c89fa488b4c241048894a1848897a10488b442420eb05e9360000004889420848c702f9ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fe4c8b2c244d896e084989164c89f04883c430c3488b04244883c430c34983fdef75555249ff760848ff70084c8b6424084983fc01750c49bb0100000000000000eb5a4d8b14244d8b0a4983f9f9752d4c8b442410498b78f849ff74240849b80100000000000000498b5a08488b47e0ff151a020000eb12e9fa00000048b8e0c2f8acaa2a0000ff55584c8b24244883c408483b65187303ff5548eb94e90a00000049bb0100000000000000488b0424488b542410e8fdfdffff504c8b44241048bb010000000000000048b80100000000000000488d542420909090ff15b60100004883f8017509488b04244883c420c34c8b50084983fa01752e4d8d7fe84c3b7d107303ff554049c747f8020000004d89f94c8b04244d894108488b384989394c89c84883c420c34d8d7fe84c3b7d107303ff554049c747f8020000004d89f94989410849c701efffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89f8488b3c24498978084d89084c89c04883c420c34983fd1375425249ff7608488b4008909090e829fdffff50488b442408488b542410e819fdffff4c8b24244983fc0175054883c418c3488d5424189090ff15e60000004883c418c3524956488b4008909090e8e9fcffff50488b4424084c8b642410498b5424f89090ff15c20000004c8b5c24104d8b53f84d8b4ae850498b5108ff124883f80174134c8b4424084983f80174084c89c04883c420c34d8d7fe84c3b7d107303ff554049c747f8020000004d89f8488b7c240849897808488b34244989304c89c04883c420c39090909090|@5065,8191,@3276,@428,@5066,@5055,@3276,@5072,@5064,@5055|24,0,0 68,0,0 393,0,0 432,0,0 463,0,@5062 500,0,0 530,0,0 540,0,0 5062:O3|@7377,@215,@5063 5063:S23|736574456e7472793a20756e6b6e6f776e20696e737472 5064:C2,88|90909090909090483b65187303ff55484883f8017505488b42e8c35248ff30488b40089090e8ddffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b04244889024889d04883c410c3909090|@1847,5| 5065:S49|434f44455452454528292e636c65616e50726f63283329636c65616e436f646528312970726f6365737344656373283129 5066:C2,280|90909090909090483b65187303ff55484d8d7fd04c3b7d107303ff554049c747f8050000004d89fe49bd50c5f8acaa2a00004d892e4c8b6ad84d896e2049894618488b42e0498946104c8b63104d8966084d8d7fe84c3b7d107303ff554049c747f8020000004d89fb49ba70c7f8acaa2a00004d89134d89730848ff7308495448ff732048ff73284d89e04c8b0b4c89db4c89c8488b52e8ff124d8d7fb84c3b7d107303ff554049c747f8080000004d89f849c740380100000049c7403001000000488b3c2449897828488b7424084989702049c7401801000000488b5c241049895810488b542418498950084989004d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89400848c700f3ffffff4883c420c3|@5071,8191|42,0,@5067 107,0,@5069 5067:C3,416|90909090909090483b65187303ff55484883fb01756d5050505050488b18488b4a1853480bd9f6c3015b7503ff5570483bd975664c8b70084983fe01745c4c8b6a084d89c44d23e541f6c4017503ff55704d89c44d2be54d8d64240170f04989e049c700f7ffffff4989e049c74008010000004989e049c74010010000004989e0eb05e9db0000004d8960184989e449c744242001000000eb70f6c3017503ff55704883fb017c244c8b70084983fe01741a5049b80300000000000000488b4210909090ff15fe000000eb0150488b04244c8d74240849c706f7ffffff4c8d6c24084c8b204d8965084c8d5c24084c8b50084d8953104c8d4c24084c8b40104d894118488d7c2408eb05e90c000000488b7018488977204883c4084d8d7fd04c3b7d107303ff554049c747f8050000004c89f8488b1c24488918488b54240848895008488b4c2410488948104c8b7424184c8970184c8b6c24204c8968204883c428c3f6c3017503ff55704989de4983ee0270f44989c54d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c8940104c8970084c8928488b5220ff22|@5068,8191,@3276|181,0,1 5068:S46|434f44455452454528292e636c65616e50726f63283329636c65616e4c616d6264612832296c6f6f6b7570283329 5069:C2,40|90909090909090483b65187303ff55484c8b4010488b5808488b00488b5208ff2290909090909090|@5070,8191| 5070:S46|434f44455452454528292e636c65616e50726f63283329636c65616e4c616d6264612832296c6f6f6b7570283129 5071:S37|434f44455452454528292e636c65616e50726f63283329636c65616e4c616d626461283229 5072:C5,416|90909090909090483b65187303ff55484983f801752a4883f80375194989d848bb010000000000000048b80100000000000000ebd248b80100000000000000c34d8b304d8b2e4983fdf9756c4c8b62f84d8b5c24f84989d14889c74889de498b4e0849ff761049ff76184889cb498b43e0909090ff154e0100004883f801753d4d8d7fe84c3b7d107303ff554049c747f8020000004c89f8488970084d8b304c89304d8b40084889c34889f84c89ca4883c410e94fffffffe9cc000000488b4424084c8b284983fdf375244951565149ff7008488b58084889c84d8b61f8498b5424f890ff15e60000004989c6eb1a4951565149ff70084d8b61f8498b5424f8ff15d20000004989c64d8d7fd84c3b7d107303ff554049c747f8040000004d89fb4c8b5424204d8953184d8973104c8b4c24084d894b0849c703f9ffffff49534c8b442408488b5c241848b80300000000000000488b542420e8a9feffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89f849894008488b3c244989384c89c04883c438c348b838caf8acaa2a0000ff555848b80100000000000000|@5075,8191,@428,@5066,@5055|33,0,0 43,0,0 55,0,0 332,0,1 395,0,@5073 408,0,0 5073:O3|@7377,@215,@5074 5074:S28|70726f636573734d757475616c3a20756e6b6e6f776e20696e737472 5075:S66|434f44455452454528292e636c65616e50726f63283329636c65616e436f646528312970726f636573734465637328312970726f636573734d757475616c73283329 5076:C3,120|90909090909090483b65187303ff55484883f801750b48b80100000000000000c35248ff7008488b00488b52f8909090ff156a00000050488b442408488b542410e8c1ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fe498946084c8b2c244d892e4c89f04883c418c390909090909090|@417,8191,@5055|24,0,0 5077:C3,216|90909090909090483b65187303ff55484883f801750b48b80100000000000000c34c8b304d8b264983fcf9754f5248ff700849ff7608498b4610488b52f89090ff15ba0000004d8d7fd84c3b7d107303ff554049c747f8040000004d89fd49c7451801000000498945104c8b1c244d895d0849c74500f9ffffffeb1c4c8b580848b8f851f7acaa2a000090ff555849bd01000000000000004955488b442410488b54241890e85dffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fa498942084c8b0c244d890a4c89d04883c420c3909090|@417,8191,@5055|24,0,0 130,0,@4550 144,0,0 5078:C3,120|90909090909090483b65187303ff55484883f801750b48b80100000000000000c35248ff7008488b00488b52f8909090ff156a00000050488b442408488b542410e8c1ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fe498946084c8b2c244d892e4c89f04883c418c390909090909090|@417,8191,@5055|24,0,0 5079:C3,120|90909090909090483b65187303ff55484883f801750b48b80100000000000000c35248ff7008488b00488b52f8909090ff156a00000050488b442408488b542410e8c1ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fe498946084c8b2c244d892e4c89f04883c418c390909090909090|@417,8191,@5055|24,0,0 5080:C4,880|90909090909090483b65187303ff55484c8b3349f7c601000000745e4983fef97c584983fe077f5249bd5acef8acaa2a00004f8d6cb51c41ffe5e946000000909090e938010000909090e995020000909090e916020000909090e9a3000000909090e92e020000909090e9f3010000909090e92201000090909048b8d095edacaa2a0000c34d8d7fb84c3b7d107303ff554049c747f8080000004c89fb48c743380100000048c743300100000048c743280100000048c743200300000048c743180100000048c74310010000004889430848b8d08cedacaa2a00004889034d8d7fe84c3b7d107303ff554049c747f8020000004c89f84889580848c700f3ffffffc34d8d7fb84c3b7d107303ff554049c747f8080000004c89fb48c743380100000048c743300100000048c743280100000048c743200300000048c743180100000048c74310010000004889430848b810c3edacaa2a00004889034d8d7fe84c3b7d107303ff554049c747f8020000004c89f84889580848c700f3ffffffc34989c4488b43089090ff150a0200004989c34c89e04c89daff224989c14c8b4308488b5b1048b8b01e6000000000009090ff15ea0100004d8d7fd84c3b7d107303ff554049c747f8040000004d89f849c74018030000004989401048bfa08cedacaa2a00004989780849c700090000004d8d7fb84c3b7d107303ff554049c747f8080000004c89fe48c746380100000048c746300100000048c746280100000048c746200300000048c746180100000048c74610010000004c894e084c89064d8d7fe84c3b7d107303ff554049c747f8020000004c89f84889700848c700f3ffffffc348b8585ef3acaa2a0000c34d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b63084c89600848c700fbffffffc34c8b630849f7c40100000074054d89e3eb1948b86055edacaa2a00009090ff555849bb01000000000000004d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89580848c700fbffffffc34d8d7fb84c3b7d107303ff554049c747f8080000004d89fc49c74424380100000049c74424300100000049c74424280100000049c74424200300000049c74424180100000049c744241001000000498944240849bbd08cedacaa2a00004d891c244d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89600848c700f3ffffffc390909090909090|@5085,8191,@5086,@5084|42,0,$5080+58 124,0,@478 211,0,@441 336,0,@845 422,0,I48 476,0,@439 612,0,@3210 681,0,@336 696,0,0 825,0,@441 5081:S39|56414c55455f4f505328292e6372656174654e756c6c617279436f6e7374727563746f72283229 5082:C8,1792|90909090909090483b65187303ff55484c8b334983fef975744d8d7fe84c3b7d107303ff554049c747f8020000004d89fd49c7450801000000498945004d8d7fd84c3b7d107303ff554049c747f8040000004c89f848c740180300000049bc28a9edacaa2a00004c8960104c89680848c700090000004d8d7fe84c3b7d107303ff554049c747f802000000eb05e9490000004d89fd49c7450801000000498945004d8d7fd84c3b7d107303ff554049c747f8040000004c89f848c740180300000049bcd0a8edacaa2a00004c8960104c89680848c70009000000c34983fe01756d4d8d7fe84c3b7d107303ff554049c747f8020000004d89fd49c7450801000000498945004d8d7fd84c3b7d107303ff554049c747f8040000004d89fc49c74424180300000048b828a9edacaa2a000049894424104d896c240849c70424090000004d8d7fe84c3b7d10730aeb05e954000000ff554049c747f8020000004d89fd49c74508010000004d8965004d8d7fd84c3b7d107303ff554049c747f8040000004c89f848c740180300000049bcd0a8edacaa2a00004c8960104c89680848c70009000000c34983fe05750b48b8b88cedacaa2a0000c34983fe03756e4c8b6b0849f7c50100000074054d89eceb1f4989c448b86055edacaa2a00009090ff55584c89e049bc01000000000000004d8d7fe84c3b7d107303ff554049c747f8020000004d89fb4d89630849c703fbffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fceb05e96900000049c744240801000000498904244d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8960084c89184989c44d8d7fd84c3b7d107303ff554049c747f8040000004c89f848c740180300000049bb708cedacaa2a00004c8958104c89600848c70009000000c34983fefb756c4c8b6b0849f7c50100000074054d89eceb1d4989c448b86055edacaa2a0000ff55584d89e349bc01000000000000004d8d7fe84c3b7d107303ff554049c747f8020000004d89fb4d89630849c703fbffffff4c8b204983fc0b752449534889c348b80100000000000000eb05e9df000000909090ff150e0400004989c2eb4d4983fcfb751a49534889c348b80100000000000000ff15f60300004989c2eb2d4d8d7fe04c3b7d107303ff554049c747f8030000004d89fa49c74210010000004989420849c7020d00000049534d8d7fe84c3b7d107303ff554049c747f8020000004d89fb49c74308010000004d89134d8d7fe84c3b7d107303ff554049c747f8020000004d89fa4d895a084c8b0c244d890a4d8d7fd84c3b7d107303ff554049c747f8040000004c89f848c740180300000049b8708cedacaa2a00004c8940104c89500848c700090000004883c408c34983fe07756e4c8b6b0849f7c50100000074054d89eceb1f4989c448b86055edacaa2a00009090ff55584d89e349bc01000000000000004d8d7fe84c3b7d107303ff554049c747f8020000004d89fb4d89630849c703fbffffff4c8b084983f90b752449534889c348b80100000000000000eb05e9df000000909090ff15c60200004989c2eb4d4983f9fb751a49534889c348b80100000000000000ff15ae0200004989c2eb2d4d8d7fe04c3b7d107303ff554049c747f8030000004d89fa49c74210010000004989420849c7020d00000049534d8d7fe84c3b7d107303ff554049c747f8020000004d89f849c74008010000004d89104d8d7fe84c3b7d107303ff554049c747f8020000004c89ff4c894708488b34244889374d8d7fd84c3b7d107303ff554049c747f8040000004c89f848c740180300000048bb708cedacaa2a0000488958104889780848c700090000004883c408c34983feff756b4c8b6b0849f7c501000000741d4989c348b8b055edacaa2a0000909090ff555849bc01000000000000004d89ec4d8b1c2449f7c30100000074054d89daeb1e4989c248b86055edacaa2a000090ff55584d89d149ba010000000000000049f7c201000000740a4d89d1eb22e9360100004989c148b86055edacaa2a0000ff55584d89c849b901000000000000004d8d7fe84c3b7d107303ff554049c747f8020000004d89f84d89480849c700fbffffff488b304883fe0b751c49504889c348b801000000000000009090ff152a0100004889c7eb4d4883fefb751a49504889c348b80100000000000000ff15120100004889c7eb2d4d8d7fe04c3b7d107303ff554049c747f8030000004c89ff48c74710010000004889470848c7070d00000049504d8d7fe84c3b7d107303ff554049c747f8020000004c89fb48c743080100000048893b4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48895a08488b0c2448890a4d8d7fd84c3b7d107303ff554049c747f8040000004c89f848c740180300000049be708cedacaa2a00004c8970104889500848c700090000004883c408c348b8b88cedacaa2a0000c390|@5083,8191,@4802,@4802,@4802,@4802,@4802,@4802|95,0,@638 195,0,@635 296,0,@638 399,0,@635 431,0,@440 469,0,@336 487,0,0 642,0,@437 695,0,@336 711,0,0 770,0,0 812,0,0 980,0,@437 1037,0,@336 1055,0,0 1114,0,0 1156,0,0 1324,0,@437 1376,0,@339 1392,0,0 1426,0,@336 1443,0,0 1475,0,@336 1491,0,0 1550,0,0 1584,0,0 1752,0,@437 1782,0,@440 5083:S26|56414c55455f4f505328292e636f6e7374724d61746368283229 5084:C4,440|90909090909090483b65187303ff554849f7c00100000074054d89c6eb1d4989c648b86055edacaa2a0000ff55584d89f049be01000000000000004d8d7fe84c3b7d107303ff554049c747f8020000004d89f84d89700849c700fbffffff534889c748b80100000000000000488d542408909090ff15660100004d8d7fe84c3b7d107303ff554049c747f8020000004c89fa488942084c89024d8d7fe84c3b7d107303ff554049c747f8020000004c89f84889500848c7001500000057504883fa01750c49be0300000000000000eb304c8b2a4d8b65004983fcfb7519488b5208483b65187303ff5548ebd249be010000000000000049be01000000000000004983fe017431488b04249090ff15d60000004d8d7fe84c3b7d107303ff554049c747f8020000004d89fb4989430849c703fbffffffeb044c8b1c244d8d7fb84c3b7d107303ff554049c747f8080000004d89fa49c742380100000049c742300100000049c742280100000049c742200300000049c742180100000049c74210010000004c8b4424084d8942084d891a4d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89500848c700f3ffffff4883c418c390|@5091,8063,@5090,@4523|35,0,@336 51,0,0 100,0,0 198,0,1 238,0,0 248,0,0 5085:S25|56414c55455f4f505328292e636f6e7374724d616b65283229 5086:C2,48|4989c64d8d7fe84c3b7d107303ff554049c747f8020000004c89f849bd40dcf8acaa2a00004c89284c897008c3909090|@5089,6145|29,0,@5087 5087:C3,432|90909090909090483b65187303ff55484c8b720849f7c60100000074054d89f5eb1d4989c548b86055edacaa2a0000ff55584c89e849bd01000000000000004d8d7fe84c3b7d107303ff554049c747f8020000004d89fc4d896c240849c70424fbffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fd49bba08cedacaa2a00004d895d084d8965004d8d7fe84c3b7d107303ff554049c747f8020000004d89fc4d896c240849c70424150000005049544983fd01750c49bb0300000000000000eb30498b5500488b024883f8fb75194d8b6d08483b65187303ff5548ebd249bb010000000000000049bb01000000000000004983fb017431488b04249090ff15ce0000004d8d7fe84c3b7d107303ff554049c747f8020000004d89fe4989460849c706fbffffffeb044c8b34244d8d7fb84c3b7d107303ff554049c747f8080000004d89fd49c745380100000049c745300100000049c745280100000049c745200300000049c745180100000049c74510010000004c8b6424084d8965084d8975004d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89680848c700f3ffffff4883c410c3|@5088,8063,@4523|39,0,@336 55,0,0 126,0,@439 190,0,1 230,0,0 240,0,0 5088:S26|56414c55455f4f505328292e6162737472616374283129283129 5089:S25|56414c55455f4f505328292e746167426f78436f6465283129 5090:C2,176|90909090909090483b65187303ff55484c8b72f8504923c6a801587503ff5570493bc67d6f4d8d7fe04c3b7d107303ff554049c747f8030000004d89fd4989451049bcd08cedacaa2a00004d89650849c745000d000000a8017503ff55704989c44983c40270f45249554c89e0e895ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b0424eb05e90b0000004889024889d04883c410c348b80100000000000000c390|@5092,7173|67,0,@441 166,0,0 5091:S27|56414c55455f4f505328292e7461675475706c65436f6465283329 5092:S39|56414c55455f4f505328292e7461675475706c65436f64652833296765744669656c6473283129 5093:C7,712|90909090909090483b65187303ff554850534889c348b8d08cedacaa2a000090ff15ca0200004d8d7fb84c3b7d107303ff554049c747f8080000004d89fe49c746380100000049c746300100000049c746280100000049c746200300000049c746180100000049c74610010000004c8b2c244d896e084989064d8d7fe84c3b7d107303ff554049c747f8020000004d89fc4d8974240849c70424f3ffffff4d89e3488b4424089090ff154a02000049534989c248b8d08cedacaa2a00004c89d2ff124d8d7fb84c3b7d107303ff554049c747f8080000004d89f949c741380100000049c741300100000049c741280100000049c741200300000049c741180100000049c74110010000004c8b4424084d8941084989014d8d7fe84c3b7d107303ff554049c747f8020000004c89ff4c894f0848c707f3ffffff57488b5c241848b8d08cedacaa2a0000909090ff15ae0100004d8d7fb84c3b7d107303ff554049c747f8080000004c89fe48c746380100000048c746300100000048c746280100000048c746200300000048c746180100000048c7461001000000488b5c241048895e084889064d8d7fe84c3b7d107303ff554049c747f8020000004c89fa4889720848c702f3ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89f948c74108010000004889114d8d7fe84c3b7d107303ff554049c747f8020000004c89f8488948084c8b34244c89304d8d7fe84c3b7d107303ff554049c747f8020000004d89fd498945084c8b6424084d8965004d8d7fe84c3b7d107303ff554049c747f8020000004d89fb4d896b0849c703150000004983fd01752e4c89d8ff15a20000004d8d7fe84c3b7d107303ff554049c747f8020000004d89fa4989420849c702fbffffffeb034d89da48bb01000000000000004c89d048bac068f3acaa2a0000909090ff15620000004989c148b801000000000000004c89ca4883c420ff2290909090|@5095,8191,@5082,@5096,@5094,@4523,@3247|23,0,@441 181,0,@441 321,0,@441 656,0,0 669,0,@3245 691,0,0 5094:C7,384|90909090909090483b65187303ff55484c8b334983fef97501c34983fe0175644c8b284983fd0b75134889c348b80100000000000000ff256c0100004983fdfb75134889c348b80100000000000000ff255b0100004989c44d8d7fe04c3b7d107303ff554049c747f8030000004c89f848c74010010000004c89600848c7000d000000c34983fe0575644d8d7fe84c3b7d107303ff554049c747f8020000004d89fd49bcc896edacaa2a00004d896508498945004d8d7fd84c3b7d107303ff554049c747f8040000004c89f848c740180100000049bb1060f3acaa2a00004c8958104c89680848c70009000000c34983fefb75644c8b284983fd0b75134889c348b80300000000000000ff25a80000004983fdfb75134889c348b80300000000000000ff25970000004989c44d8d7fe04c3b7d107303ff554049c747f8030000004c89f848c74010030000004c89600848c7000d000000c34983fe07750a488b5b10ff25600000004983fefd7501c348b8d095edacaa2a0000c3909090909090|@5117,8191,@4802,@4802,@4802,@4802,@5116|46,0,0 71,0,0 164,0,@486 214,0,@3222 258,0,1 283,0,1 369,0,@478 5095:S37|56414c55455f4f505328292e637265617465556e617279436f6e7374727563746f72283229 5096:C2,200|4c8b304983fef9750b48b820e6f8acaa2a0000c34983fe01750b48b8a0e6f8acaa2a0000c34983fe05750b48b800e8f8acaa2a0000c34983fefb752e4c8b68084d8d7fe84c3b7d107303ff554049c747f8020000004c89f849be28e9f8acaa2a00004c89304c896808c34983fe0775364c8b68084c8b60104d8d7fe04c3b7d107303ff554049c747f8030000004c89f849bef8eaf8acaa2a00004c89304c8960104c896808c34983fefd750b48b820e6f8acaa2a0000c348b8f8ebf8acaa2a0000c3909090909090|@5115,7169|11,0,@5097 28,0,@5100 45,0,@5103 90,0,@5106 146,0,@5108 174,0,@5097 185,0,@5110 5097:O1|@5098 5098:C2,8|c390909090909090|@5099,1| 5099:S32|56414c55455f4f505328292e6964656e746974794170706c79436f6465283129 5100:O1|@5101 5101:C3,224|90909090909090483b65187303ff55484d8d7fe84c3b7d107303ff554049c747f8020000004d89fe49c74608010000004989064d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89700848c70015000000504983fe01750c49bd0300000000000000eb2f498b064c8b284983fdfb75194d8b7608483b65187303ff5548ebd349bd010000000000000049bd01000000000000004983fd017437488b04249090ff155e0000004989c44d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89600848c700fbffffff4883c408c3488b04244883c408c39090|@5102,8063,@4523|95,0,1 134,0,0 144,0,0 5102:S27|56414c55455f4f505328292e626f784170706c79436f6465283129 5103:O1|@5104 5104:C2,176|4d8d7fe84c3b7d107303ff554049c747f8020000004d89fe49c74608010000004989064d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89700849be285ff3acaa2a00004c89304d8d7fe84c3b7d107303ff554049c747f8020000004d89fe4989460848b8b88cedacaa2a00004989064d8d7fd84c3b7d107303ff554049c747f8040000004c89f848c740180100000049bde05ef3acaa2a00004c8968104c89700848c70009000000c390|@5105,6145|65,0,@3216 106,0,@440 151,0,@3213 5105:S27|56414c55455f4f505328292e7265664170706c79436f6465283129 5106:C3,344|90909090909090483b65187303ff55484c8b720849f7c60100000074054d89f5eb1d4989c548b86055edacaa2a0000ff55584c89e849bd01000000000000004d8d7fe84c3b7d107303ff554049c747f8020000004d89fc4d896c240849c70424fbffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fd49c7450801000000498945004d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8968084c89204d8d7fe84c3b7d107303ff554049c747f8020000004d89fd4989450849c745001500000049554883f801750c49bc0300000000000000eb2f488b104c8b324983fefb7519488b4008483b65187303ff5548ebd349bc010000000000000049bc01000000000000004983fc017435488b0424ff15620000004989c54d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89680848c700fbffffff4883c408c3488b04244883c408c3909090909090|@5107,8063,@4523|39,0,@336 55,0,0 213,0,1 252,0,0 262,0,0 5107:S33|56414c55455f4f505328292e746167426f784170706c79436f6465283129283129 5108:C3,136|90909090909090483b65187303ff55484989c14c8b4208488b5a1048b8b01e600000000000909090ff15820000004d8d7fe84c3b7d107303ff554049c747f8020000004d89f849c74008010000004d89084889c74d8d7fd84c3b7d107303ff554049c747f8040000004c89f848c7401803000000488978104c89400848c70009000000c390909090|@5109,8191,@5084|29,0,I48 5109:S38|56414c55455f4f505328292e7461675475706c654170706c79436f6465283129283129283129 5110:O1|@5111 5111:C2,24|48b858ecf8acaa2a000090ff555848b80100000000000000|@5114,1|2,0,@5112 16,0,0 5112:O3|@7377,@215,@5113 5113:S25|636f6e7374616e742063616e2774206265206170706c696564 5114:S29|56414c55455f4f505328292e636f6e7374724170706c79283129283129 5115:S26|56414c55455f4f505328292e636f6e7374724170706c79283129 5116:C4,424|90909090909090483b65187303ff5548534989c348b80300000000000000488d54240890ff15a60100004d8d7fe84c3b7d107303ff554049c747f8020000004c89fa4889420848c702150000004953524883f801750c48b90300000000000000eb2f4c8b304d8b2e4983fdfb7519488b4008483b65187303ff5548ebd348b9010000000000000048b901000000000000004883f9017432488b042490ff15360100004d8d7fe84c3b7d107303ff554049c747f8020000004d89fc498944240849c70424fbffffffeb044c8b24244d8d7fb84c3b7d107303ff554049c747f8080000004d89fb49c743380100000049c743300100000049c743280100000049c743200300000049c743180100000049c743100100000049bab01e6000000000004d8953084d89234d8d7fe84c3b7d107303ff554049c747f8020000004d89f84d89580849c700f3ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89ff48c7470801000000488b7424084889374d8d7fd84c3b7d107303ff554049c747f8040000004c89f848c74018030000004c8940104889780848c700090000004883c418c3909090|@5119,8063,@5118,@4523|22,0,1 88,0,1 127,0,0 137,0,0 279,0,I48 5117:S29|56414c55455f4f505328292e636f6e7374724465737472756374283229 5118:C2,176|90909090909090483b65187303ff55484c8b72f8504923c6a801587503ff5570493bc67f6f4d8d7fe04c3b7d107303ff554049c747f8030000004d89fd4989451049bcd08cedacaa2a00004d89650849c745000d000000a8017503ff55704989c44983c40270f45249554c89e0e895ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b0424eb05e90b0000004889024889d04883c410c348b80100000000000000c390|@5120,7173|67,0,@441 166,0,0 5119:S38|56414c55455f4f505328292e7461676765645475706c654465737472756374436f6465283229 5120:S50|56414c55455f4f505328292e7461676765645475706c654465737472756374436f64652832296765744669656c6473283129 5121:C6,600|90909090909090483b65187303ff55484883f801750b48b80100000000000000c34c8b304d8b264983fc01756e4d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fb49891b4c8b50084c89d848ba701e6000000000009090ff124d8d7fe84c3b7d107303ff554049c747f8020000004c89fa4c895a0848c702ffffffff534952498b5e084889d090ff15ea0100004989c5eb704983fc03753a4d8d7fe84c3b7d107303ff554049c747f8020000004d89fb49895b0849c703fbffffff5348ff7008498b5e084c89d8ff15b20100004989c5eb724983fcff75424d8d7fe84c3b7d107303ff554049c747f8020000004d89fb49895b0849c703fbffffff5348ff7008eb05e995000000498b5e084c89d890ff15720100004989c5eb6d4d8b1c2441f6c3017503ff55704983fb097f304d8d7fe04c3b7d107303ff554049c747f803000000eb05e9530000004d89fa4d895a1049895a0849c70207000000eb234d8d7fe84c3b7d107303ff554049c747f8020000004d89fa49895a0849c702fbffffff5348ff7008eb05e910000000498b5e084c89d0ff15f60000004989c54c8b54240841f6c2017503ff55704983fa017d2749b801000000000000004d89d14d23c841f6c1017503ff55704d89c14d2bca4d8d490170f1eb3a41f6c2017503ff55704d89d14983c10270f449b801000000000000004c89cf4923f840f6c7017503ff55704c89c7492bf9488d7f0170f14989f949554c89cb488b44240890e8ddfdffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fe48894608488b1c2448891e4889f04883c418c3909090|@5125,8191,@3244,@5093,@5093,@5093|24,0,0 86,0,I47 443,0,0 500,0,0 5122:S46|56414c55455f4f505328292e63686f6f7365436f6e7374725265707228312963686f6f7365526570722831292f35 5123:C7,656|90909090909090483b65187303ff55484883f801750b48b80100000000000000c34c8b304d8b2e4983fd01756e4d8d7fe84c3b7d107303ff554049c747f8020000004d89fc49895c240849c70424030000005348ff7008498b5e084c89e09090ff15520200004c8b5c240841f6c3017503ff55704983fb017d2e49b901000000000000004d89da4d23d141f6c2017503ff55704d89ca4d2bd3eb05e97d0000004d8d520170eaeb3a41f6c3017503ff55704d89da4983c20270f449b901000000000000004d89d04d23c141f6c0017503ff55704d89c84d2bc24d8d400170f14d89c2504c89d3488b4424089090e815ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89ff48894708488b34244889374889f84883c418c34983fd0375585348ff7008498b5e0848b878a6edacaa2a00009090ff158201000050488b5c2410488b442408e8b9feffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fc49894424084c8b1c244d891c244c89e04883c418c34983fdff75565348ff7008498b5e0848b8201ff4acaa2a0000ff152e01000050488b5c2410488b442408e85dfeffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fc49894424084c8b1c244d891c244c89e04883c418c34d8b65004983fc0175545348ff7008498b5e0848b878a6edacaa2a0000ff15d600000050488b5c2410488b442408e8fdfdffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fb498943084c8b14244d89134c89d84883c418c35348ff7008498b5e0848b8201ff4acaa2a0000ff158a00000050488b5c2410488b442408e8a9fdffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fb498943084c8b14244d89134c89d84883c418c390909090909090|@5124,8191,@3244,@5093,@5093,@5093,@5093|24,0,0 124,0,0 188,0,0 302,0,@617 396,0,@3496 492,0,@617 576,0,@3496 5124:S35|56414c55455f4f505328292e63686f6f73654f7074696d697365645265707231283229 5125:S35|56414c55455f4f505328292e63686f6f73654f7074696d697365645265707232283229 5126:C10,336|90909090909090483b65187303ff55484989d54c8b204c8b58084c89d8909090ff15520100004883f801742b4889d890ff154a0100004989c149b80300000000000000498b5dc04c89e09090ff15360100004989c2eb5e4d8d7fe84c3b7d107303ff554049c747f8020000004c89f84d8b55c04c8950084c89184d89e9909090ff150a0100004989c04889d8ff15060100004d89cd4989c14d89c349b801000000000000004c89db4c89e090ff15ee0000004989c24d8b4df84d8b41e0498b58f84955495449524d8b40d8488b5bf84c89e09090ff15ce000000488b542410488b4af8488b41e04c8b70f849ba03000000000000004c8b48d84d8b46f8488b58f0488b4424089090ff15a20000004c8b6c24104d8b65f84d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b1c244c8958084c8b5424084c8910498b5424a8ff12488b04244883c418c390|@5128,8191,@2015,@5129,@5127,@1404,@5129,@5127,@1493,@3008|59,0,1 157,0,0 237,0,1 5127:C2,72|4d8d7ff04c3b7d107303ff554049c747f8010000004d89fe4d89064d8d7fd84c3b7d107303ff554049c747f8040000004d89f8498958184d8948104d8970084989004c89c0c39090|@5130,4297| 5128:S83|50415253455f5452454528292e706173733228362961737369676e56616c7565732836296173734162734461746128342967656e56616c7565436f6e7374727328322970726f63657373436f6e737472283229 5129:C2,40|4989c64d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89700848c700ffffffffc390|@2281,4097| 5130:S32|5354525543545f56414c5328292e6d616b6556616c7565436f6e737472283429 5131:C2,152|4d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fe49c706010000004d8d7fe04c3b7d107303ff554049c747f8030000004d89fd49bcf0faf8acaa2a00004d896500498945104d8975084d8d7fe04c3b7d107303ff554049c747f8030000004d89fc49bb88fdf8acaa2a00004d891c244d8974241049894424084c892b4c89630848b80100000000000000c390909090|@5139,7689|62,0,@5132 108,0,@5136 139,0,0 5132:C3,264|90909090909090483b65187303ff55484c8b72084d8b2e525048ff3049554983fd01750c49bc0100000000000000eb5f4c8b5c24184d8b55004d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b4c24084c8948084d8b024c890049ff7508498b5310ff124883f801740c49bc0300000000000000eb224c8b2c244883c408483b65187303ff5548eb8fe90e00000049bc01000000000000004883c4084983fc017417488b0424488d542420909090ff15760000004889c7eb04488b3c24488b7424184d8d7fe84c3b7d107303ff554049c747f8020000004c89fb48897b08488b542410488913488b4e0848891948b801000000000000004883c420c3909090909090|@5134,8191,@5133|38,0,0 114,0,1 150,0,0 245,0,0 5133:C2,176|90909090909090483b65187303ff55484883f801750b48b80100000000000000c34c8b72f84c8b284c8b60084d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b5ae84c8958084d8b55004c89105249554954498b5610ff124883f8017409488b04244883c418c3488b0424488b542410909090e889ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89f9498941084c8b4424084d89014c89c84883c418c3909090909090|@5135,8191|24,0,0 5134:S32|5554494c49544945535f28292e6d61705461626c65283229656e746572283129 5135:S33|5554494c49544945535f28292e6d61705461626c6528322964656c657465283229 5136:C2,192|90909090909090483b65187303ff55484c8b72104d8b2e52504983fd01750f48b801000000000000004883c410c3498b5500488b4c24084d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b34244c8970084c8b224c892048ff720849ff7508488b5108909090ff124883f80174254d8d7ff04c3b7d107303ff554049c747f8010000004c89f84c8b5c24084c89184883c420c34c8b2c244883c410483b65187303ff5548e96affffff48b801000000000000004883c420c39090|@5137,8191|33,0,0 177,0,0 5137:S33|5554494c49544945535f28292e6d61705461626c652832296c6f6f6b7570283129 5138:S35|545950455f5452454528292e67656e457175616c69747946756e6374696f6e73283329 5139:S24|5554494c49544945535f28292e6d61705461626c65283229 5140:C5,168|90909090909090483b65187303ff554850504989d44989c34989e2495249ba010000000000000049b9010000000000000049b8010000000000000048bb1f4e00000000000048b8e005edacaa2a000090ff157a0000004d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b0c244c89084c8b4424084c8940089090ff15520000004954504c89d8488d542420909090ff1546000000488b04244883c420c39090909090|@5144,8191,@1369,@1358,@5141|31,0,0 41,0,0 51,0,0 61,0,9999 71,0,@193 5141:C4,232|90909090909090483b65187303ff55484883f801750b48b80100000000000000c34c8b72e85248ff7008498b5ef0488b00488b52e8909090ff15d20000004c8b6c24084d8b65e84d8b5c24f84d8d7fe04c3b7d107303ff554049c747f8030000004d89fa49b94001f9acaa2a00004d890a4d8b4424f04d894210498b7bf849897a084d8d7fd84c3b7d107303ff554049c747f8040000004c89fe48bb1002f9acaa2a000048891e48897e18498b5424d8488956104c8956084989f149b848bff0acaa2a0000498b5de0909090ff1546000000488b0424488b5424084883c410e923ffffff90909090|@5145,8191,@2851,@2513|24,0,0 102,0,@5142 156,0,@5143 189,0,@2218 5142:C4,136|90909090909090483b65187303ff55484c8b72085048ff721048bb280af0acaa2a0000498b464848bae8d7edacaa2a0000909090ff15760000004c8b6c24085048b8d00bf0acaa2a0000498b55189090ff124c8b64241048b8b027edacaa2a0000498b1424909090ff124c8b442410488b1c24488b4424084883c418ff2536000000909090909090|@2869,8191,@974,@2002|27,0,@1964 41,0,@972 66,0,@1971 89,0,@257 5143:C3,80|90909090909090483b65187303ff55484c8b72184c8b2c244c89342448ff721048ff72084c8b50104c8b480849b8e836eeacaa2a0000488b1848b84086f2acaa2a00004955ff252d0000009090909090|@2874,8191,@2507|46,0,@1202 59,0,@2873 5144:S49|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737369676e4c697374283129 5145:S61|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737369676e4c6973742831296170706c794c697374283129 5146:C16,1344|90909090909090483b65187303ff55484c8b72e04d8b6ef84d8d7fd04c3b7d107303ff554049c747f8050000004d89fc49bb2009f9acaa2a00004d891c244d8b5ee84d895c24204c8b52d84d895424184d8b4df84d894c24104d8b46d84d894424085248ff3048ff700848ff701048ff70184d89c14d8b45f84c89e3488b442408909090ff15de040000488b44240890ff15da0400004883f801740c48bf0100000000000000eb7050504889e75749ba030000000000000049b9010000000000000049b8010000000000000048bb1f4e00000000000048b8e005edacaa2a0000ff15920400004d8d7fe84c3b7d107303ff554049c747f8020000004c89f8488b3424488930488b5c2408488958089090ff156a040000eb05e998000000488b542430488b4ae04c8b71f84d8d7fe04c3b7d107303ff554049c747f8030000004d89fd49bc600af9acaa2a00004d8965004c8b5ad84d895d104d8b56f84d8955084d8d7fd84c3b7d107303ff554049c747f8040000004d89f949b8300bf9acaa2a00004d89014d895118488b79d8498979104d89690849b848bff0acaa2a00004889c3488b44241890ff15da0300004889c74883c410488b3424488b164883faf775714d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89f948c701010000004d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89f848c700010000004d8d7fe04c3b7d107303ff554049c747f8030000004d89fe4989461049894e0849c70603000000eb05e93b0000004d8d7fd84c3b7d107303ff554049c747f8040000004d89fd4c8b6424084d8965184d89751049c74508010000004c8b5c24184d895d004c89ebeb744883faf17573488b4c2420488b41e04c8b70e84c8b68f84d8d7fd84c3b7d107303ff554049c747f8040000004d89fc49bbc00bf9acaa2a00004d891c244d8b55f84d895424184c8b49d84d894c24104c8b40d84d8944240848ff760848ff7610ff35b7020000495449ba300cf9acaa2a0000eb0ae980010000e95e01000049b9f07ff2acaa2a00004d8b4660498b5e30488b442418ff158a0200004889c74889f8ff1586020000488b70084883fe017502eb6a488b5c2430488b53e0488b4af85748ff71f848ff73d848ff72d8488b5c242848b8510000000000000090ff155202000048bb500cf9acaa2a0000ff154a0200004989c24c8b0c244c8b44240848bb0300000000000000488b442410909090ff152e0200004883c418eb0157488b5c2408488b14244889134889d0ff151a0200004d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89f948c701010000004d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fe49c706010000004d8d7fe04c3b7d107303ff554049c747f8030000004d89fd4d89751049894d0849c74500030000004d8d7fd84c3b7d107303ff554049c747f8040000004d89fc49894424184d896c241049c7442408010000004c8b5c24304d891c244c89e3eb1948b8780cf9acaa2a00009090ff555848bb01000000000000004883c4184c8b54241049891a4c8b4c24204d8d7fe84c3b7d107303ff554049c747f8020000004c89f849b8e005edacaa2a00004c8940084c891853498b51f090ff12488b7c2428488b77e0488b5ef84c8b46d8488b5bf8488b442420ff15fe000000488b542428488b4ae0488b41f849ba03000000000000004c8b49d84c8b40f8488b5ad8488b4424209090ff15d60000004c8b7424284d8b6ee04d8b65e84d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b1c244c8958084c8b5424204c8910498b5424104883c430ff22909090909090|@5156,8191,@2758,@2015,@1369,@1358,@2513,@1551,@2634,@2950,@303,@303,@2855,@2277,@1493,@3008|50,0,@5147 158,0,0 176,0,1 186,0,0 196,0,0 206,0,9999 216,0,@193 324,0,@5149 378,0,@5150 407,0,@2218 676,0,@5151 733,0,@5152 755,0,@2861 839,0,40 856,0,@5153 884,0,1 1105,0,@5154 1120,0,0 1171,0,@193 1241,0,1 5147:C3,144|90909090909090483b65187303ff55484c8b72204d8d7fd84c3b7d107303ff554049c747f8040000004d89fd49bcf009f9acaa2a00004d8965004c8b62104d8965184c8b5a184d895d104c8b52084d89550849b9008eeeacaa2a00004c8b04244c890c24495549bad8fef1acaa2a000049b9f8fef1acaa2a00004c89c74d8b4660498b5e4057ff252c00000090909090|@2891,8191,@2634|46,0,@5148 84,0,@1418 104,0,@2702 114,0,@2703 5148:C3,48|90909090909090483b65187303ff55484989c24c8b4a084c8b421048bb0300000000000000488b4218ff252900000090|@2858,8191,@2855|29,0,1 5149:C4,136|90909090909090483b65187303ff55484c8b72085048ff721048bb280af0acaa2a0000498b464848bae8d7edacaa2a0000909090ff15760000004c8b6c24085048b8d00bf0acaa2a0000498b55189090ff124c8b64241048b8b027edacaa2a0000498b1424909090ff124c8b442410488b1c24488b4424084883c418ff2536000000909090909090|@2869,8191,@974,@2002|27,0,@1964 41,0,@972 66,0,@1971 89,0,@257 5150:C3,80|90909090909090483b65187303ff55484c8b72184c8b2c244c89342448ff721048ff72084c8b50104c8b480849b8e836eeacaa2a0000488b1848b84086f2acaa2a00004955ff252d0000009090909090|@2874,8191,@2507|46,0,@1202 59,0,@2873 5151:C3,48|90909090909090483b65187303ff55484989c24c8b4a084c8b421048bb0300000000000000488b4218ff252900000090|@2858,8191,@2855|29,0,1 5152:S9|457863657074696f6e 5153:S22|29206973206e6f7420616e20657863657074696f6e2e 5154:O3|@7377,@215,@5155 5155:S41|70726f63657373457863657074696f6e3a206261646c792d666f726d65642070617273652d74726565 5156:S67|50415253455f5452454528292e706173733228362961737369676e56616c75657328362961737356616c75657328322970726f63657373457863657074696f6e283129 5157:S20|545950455f5452454528292e6170706c79283529 5158:C3,168|90909090909090483b65187303ff55484883f801750b48b80100000000000000c34c8b72f84d8b6ef84d8b65f84989d34c8b104c8b48084c89d09090ff158e000000495349524951498b542430909090ff1248f7c00100000075054c8b00eb054c8b4424084950488b442408488b542418e891ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89f849894008488b3c244989384c89c04883c420c390909090909090|@417,8191,@2136|24,0,0 5159:S98|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352973696756616c2835296d616b65536967496e746f28362970726f63657373536967283329757064617465436f6e7374724c697374283129 5160:C18,480|90909090909090483b65187303ff55484989d64989c54c89e8909090ff15e60100004989c44889d8ff15e201000050504989c34c89e89090ff15da0100004d89f2909090ff15d60100004883f80174334d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89fa4c892a4889e048c700ffffffff4989e649895608eb114889e248c702010000004889e04c8968084d8d7fe84c3b7d107303ff554049c747f8020000004d89fe488b1424498916488b442408498946084d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c8970104c8960084c89184d89eb9090ff153e0100004d89d94989c04889d890ff15360100004883f80174704c89c890ff152e0100004c89d7909090ff152a0100004883f80174304c89c890ff15220100009090ff15220100004883f80174184889df48bb03000000000000004c89c8ff150e010000eb645749515349504c89c8909090ff15020100004883f8017551488b742418488b442410eb05e94e000000909090ff15ea00000048ff76f84889c348b8510000000000000090ff15da00000048bb5835f1acaa2a0000ff15d2000000488b14249090ff12eb06e907000000504883c408eb0c5050574950eb055050534950488b1c24488b4424084883c430ff25a50000009090909090|@5164,8191,@2066,@2239,@1461,@1463,@1465,@2241,@1461,@2664,@2226,@2015,@2811,@2432,@2066,@303,@303,@2816|313,0,1 391,0,40 408,0,@2427 5161:S27|545950455f5452454528292e736574576865726554797065283329 5162:C7,216|90909090909090483b65187303ff55484883fb01751c4883f801750b48b80300000000000000c348b80100000000000000c34989c5488b03ff15c20000004883f801745d4d89ec488b039090ff15b600000049f7c40100000075564989c5498b04249090ff15a60000004883f80174464d89eb498b042490ff159a0000004c8b53084889c34c89d8ff15920000004883f80174124c89d3498b442408e966ffffffe92600000048b80100000000000000c3e90b00000048b80100000000000000c348b80100000000000000c348b80100000000000000c390|@5163,7949,@1458,@1459,@1458,@1459,@2022|30,0,1 41,0,0 168,0,0 184,0,0 195,0,0 206,0,0 5163:S36|545950455f5452454528292e736574576865726554797065283329657141726773283229 5164:S38|545950455f5452454528292e7365745768657265547970652833297365744571756976283229 5165:S38|535452554354555245535f28292e72656e616d655661726961626c654173426f756e64283329 5166:S26|535452554354555245535f28292e6d6174636853696773283629 5167:S32|5354525543545f56414c5328292e6d616b654c6f63616c537472756374283229 5168:C4,208|90909090909090483b65187303ff55484c8b72f84d8d7fd84c3b7d107303ff554049c747f8040000004d89fd49bcd814f9acaa2a00004d8965004d8b66f84d896518498945104c8b5ad04d895d085050504989d24989c14989d84889e34c89e8ff1592000000495249514983f8017502eb43498b3849ff700848ff772848ff77304c8b57204c8b4f184c8b4710488b5f08488b07488d542440909090ff155e0000004c8b04244883c408483b65187303ff5548ebb5488b7c2408488b77f0488b4638488b5424104883c428ff22909090|@5190,8191,@2328,@5172|46,0,@5169 5169:C5,104|90909090909090483b65187303ff554848ff721848ff721048ff72084889c348b89015f9acaa2a0000909090ff155e00000048bbf005f0acaa2a0000ff15560000004989c24c8b0c244c8b44240848bb0300000000000000488b4424104883c418ff253900000090|@5171,8191,@303,@303,@1956|33,0,@5170 52,0,@1955 80,0,1 5170:S8|46756e63746f7220 5171:S69|535452554354555245535f28292e7061737332537472756374732833297061737332537472756374283529706173733246756e63746f7244656328322973456e762d283129 5172:C30,1904|90909090909090488dbc2430ffffff483b7d187303ff55504c8b304983fe03756e525349504951495248ff700848ff701048ff701848b8150000000000000090ff15520700004d8d7fd84c3b7d107303ff554049c747f8040000004d89fd49c745180100000049c745100100000049bcb01e6000000000004d896508498945004c89e848ba7012f1acaa2a0000eb05e9c5060000ff15060700004c8b1c244d8b0b4983f9f575054d89daeb5c4983f9f775054d89daeb514983f9ef75054d89daeb464d8d7fe84c3b7d107303ff554049c747f8020000004d89f849c74008010000004d89184d8d7fe84c3b7d107303ff554049c747f8020000004d89fa4d89420849c702f7ffffff488b7c2438488b77e0504c89d349bab01e6000000000004c8b4c24304c8b46f04889da48bb01000000000000004889d04889f290ff15660600004889c14889cb488b442418909090ff155a0600004989ce4989c548bbb01e600000000000488b44241848bab018600000000000909090ff124883f80175384c8b24244d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8968084c8b5c24184c891849564955498b542448909090ff12eb6d4c89f090ff15f60500004d8d7fe04c3b7d107303ff554049c747f8030000004d89fc49bb881ef9acaa2a00004d891c244d896c24104c8b14244d895424084d8d7fe84c3b7d107303ff554049c747f8020000004d89f949b84821f9acaa2a00004d89014d89610849564955eb05e91400000049b801000000000000004c89cb90ff1582050000488b7c2420488b3424488937488b5c2410488b542450488b4ae0488b41f04d8d7fe04c3b7d107303ff554049c747f8030000004d89fe49bd1022f9acaa2a00004d892e4c8b63304d8966104c8b58304d895e084d8d7fe04c3b7d107303ff554049c747f8030000004d89fa49b98022f9acaa2a00004d890a4c8b43404d894210488b784049897a084d8d7fe04c3b7d107303ff554049c747f8030000004d89fd49b9f022f9acaa2a00004d894d004c8b4b584d894d10488b7058498975084c8b642450498b5424e0488b4af04c8b5c24504d8b43e0498b78f0488b5c24504c8b4be0498b71f04c8b642450498b5424e04c8b5af04c8b442450498b58e04c8b4bf04c8b642450498b5424e04c8b42f0488b5c24504c8b63e0498b5424f04d8d7f984c3b7d107303ff554049c747f80c0000004c89fb4c896b584c8b6f504c896b50498b794848897b484c8953404c8b6a384c896b384c8973304c8b51284c8953284c8b70204c897320498b4318488943184c8b76104c8973104d8b50084c89530848b96023f9acaa2a000048890b488b442408909090ff15ee0300004d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fd498945004d8d7fe84c3b7d107303ff554049c747f8020000004d89fc49bb2824f9acaa2a00004d891c244d896c2408488b542450488b4ae05349554954488b5c2450488b41e8909090ff158a03000048bb1025f9acaa2a0000ff15820300004c8b5424604c8b4c24084c8b442410488b5c24584c8b742468498b56e090ff15660300004c8b6c24784d8b5d004983fb0175054989c4eb6c4989c2488b4424209090ff154a0300004c8b4c24684d8b41e0495250488b5c2460498b40e890ff153603000048bb1025f9acaa2a0000ff152e0300004989c24c8b4c24684c8b442420488b1c24488b842488000000488b7c2478488b57e0ff150e0300004889c64889f0eb05e98201000090ff15020300004889c34889f0ff15fe02000050504989e04889da4889c34889d0ff15f20200004d8d7fe84c3b7d107303ff554049c747f8020000004c89f9488b04244889014c8b7424084c8971084d8d7fe84c3b7d107303ff554049c747f8020000004d89fd49bc2825f9acaa2a00004d896500498975084c8b5c24684983fb01745a4889f09090ff15920200004989c14889f0ff158e02000050505149554c8d4424104889c34c89c89090ff157e0200004d8d7fe84c3b7d107303ff554049c747f8020000004d89fa4c8b4424104d8902488b7c241849897a08eb084989ca50505149554c8b8c24a80000004d8b41e0498b78f856495248ff77f84c8b9424b00000004d8b49d84c8b4424204889f3488b442450909090ff151a020000488bb424b8000000488b5ee0488b53e8488b9c24a00000004889d0909090ff15fe01000048bb1025f9acaa2a0000ff15f60100004989c24c8b0c244c8b442450488b5c2410488b44240848ba10a4f0acaa2a00009090ff15d60100004989c44883c4504c89e0ff15ce010000488b4c24084c8b31504956498b0424909090ff15be0100004d8d7fd84c3b7d107303ff554049c747f8040000004d89fd49c74518010000004c8b24244d8965104c8b5c24084d895d08498945004d89ea48b80100000000000000ff157e0100004989c14d89d0488b5c2428488b4424609090ff156e0100004c8b4c24784989c04d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c894008488b7c24604889384950498b51f0ff12488bb42498000000488b1c2448891e48b801000000000000004881c488000000c2100048b8d026f9acaa2a0000ff555848b80100000000000000|@5192,8191,@1852,@2356,@2649,@2342,@2206,@2285,@2208,@303,@303,@2344,@2208,@303,@303,@2649,@2155,@2208,@2642,@2155,@2208,@2642,@2422,@303,@303,@2162,@2204,@2202,@5193,@5191|55,0,10 112,0,I48 133,0,@2354 279,0,I48 301,0,0 350,0,I48 365,0,I24 476,0,@5173 528,0,@5175 556,0,0 630,0,@5177 683,0,@5178 736,0,@5179 961,0,@5180 1045,0,@5183 1096,0,@5185 1212,0,@5185 1384,0,@5186 1604,0,@5185 1642,0,@2160 1756,0,0 1863,0,0 1883,0,@5188 1896,0,0 5173:C10,480|90909090909090483b65187303ff55484989d04889c74889d848ba30a7f0acaa2a000090ff15de0100004883f8017442498b70084889d848ba18a7f0acaa2a0000909090ff15c60100004889c34d8d7fe84c3b7d107303ff554049c747f8020000004c89f848895808488938488b5618ff224889d848ba28b5f0acaa2a000090ff15920100004883f8017472498b70084889d848ba10b5f0acaa2a0000909090ff157a010000488b5810488b0b4883f90175704c8b304c8b68084c8b60184d8d7fe84c3b7d107303ff554049c747f8020000004c89f84d8b58104c8958084c8b53084c89104d89f149559090ff15360100004d8d7fd84c3b7d10730aeb05e957000000ff554049c747f8040000004c89fa4c89621848894210488b042448894208eb05e9050000004c890aeb044889c2504d8d7fe84c3b7d107303ff554049c747f8020000004c89f848895008488938488b56104883c408ff224889d848ba10b3f0acaa2a000090ff15c20000004883f801745b498b70084889d848baf8b2f0acaa2a0000909090ff15aa0000005748ff7648498b581090ff15a20000004889c34d8d7fe84c3b7d107303ff554049c747f8020000004c89f848895808488b542408488910488b14244883c410ff2248b80100000000000000c3909090909090|@5174,8191,@2167,@2170,@2198,@2201,@2864,@2190,@2193,@2622|27,0,@2166 57,0,@2165 119,0,@2197 149,0,@2196 351,0,@2189 381,0,@2188 465,0,0 5174:S83|535452554354555245535f28292e7061737332537472756374732833297061737332537472756374283529706173733246756e63746f72446563283229706173733246756e63746f7242696e64283729283329 5175:C2,40|90909090909090483b65187303ff55484c8b4010488b5808488b00488b5208ff2290909090909090|@5176,8191| 5176:S83|535452554354555245535f28292e7061737332537472756374732833297061737332537472756374283529706173733246756e63746f72446563283229706173733246756e63746f7242696e64283729283129 5177:C2,56|90909090909090483b65187303ff55485250488b52109090ff124883f80175134c8b742408488b0424498b56084883c410ff224883c410c3|@1306,8191| 5178:C2,56|90909090909090483b65187303ff55485250488b52109090ff124883f80175134c8b742408488b0424498b56084883c410ff224883c410c3|@1306,8191| 5179:C2,56|90909090909090483b65187303ff55485250488b52109090ff124883f80175134c8b742408488b0424498b56084883c410ff224883c410c3|@1306,8191| 5180:O1|@5181 5181:C2,16|48b80100000000000000c39090909090|@5182,1|2,0,0 5182:S95|535452554354555245535f28292e7061737332537472756374732833297061737332537472756374283529706173733246756e63746f72446563283229706173733246756e63746f7242696e64283729656e7657697468417267732d283129 5183:C3,56|90909090909090483b65187303ff5548488b42084c8b3041f6c6017503ff55704d89f54983c50270f44c89284c89f0ff252b000000909090|@5184,6149,@1933| 5184:S92|535452554354555245535f28292e7061737332537472756374732833297061737332537472756374283529706173733246756e63746f72446563283229706173733246756e63746f7242696e642837296e6577547970654964283129 5185:S3|28292e 5186:C4,224|90909090909090483b65187303ff55484989d14989c04c89c0909090ff15e60000004883f801746e4951498b104883fafd752d498b40084c8b304d8b2e4983fd0375054c89c7eb1b4d89f0483b65187303ff5548ebd448bf01000000000000004c89c7488b074883f8017506488b4f08eb1a48b810a2f0acaa2a0000909090ff555848b901000000000000004c8b3424498b4608eb05e93700000090ff156e000000514823c8f6c101597503ff5570483bc87c0f48b803000000000000004883c408c348b801000000000000004883c408c348b80100000000000000c3909090|@5187,8167,@2157,@2155|88,0,0 116,0,@2153 132,0,0 182,0,1 197,0,0 212,0,0 5187:S105|535452554354555245535f28292e7061737332537472756374732833297061737332537472756374283529706173733246756e63746f72446563283229706173733246756e63746f7242696e64283729726573756c745369672d6d757374436f707954797065283129 5188:O3|@7377,@215,@5189 5189:S16|706173733246756e63746f7242696e64 5190:S61|535452554354555245535f28292e7061737332537472756374732833297061737332537472756374283529706173733246756e63746f72446563283229 5191:C2,48|4d8d7fd84c3b7d107303ff554049c747f8040000004d89fe4d8946184d894e104989460849891e4c89f0c39090909090|@5195,4297| 5192:S80|535452554354555245535f28292e7061737332537472756374732833297061737332537472756374283529706173733246756e63746f72446563283229706173733246756e63746f7242696e64283729 5193:C2,120|4d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89f848c700010000004d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fe49c706010000004989c54d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c8970104c89680848c70003000000c39090909090|@5194,6145| 5194:S26|5354525543545f56414c5328292e6d616b654c6f63616c283129 5195:S28|5354525543545f56414c5328292e6d616b6546756e63746f72283429 5196:C4,200|90909090909090483b65187303ff55484c8b72f84d8d7fd84c3b7d107303ff554049c747f8040000004d89fd49bc482af9acaa2a00004d8965004d8b66f84d89651849894510488b42d0498945085050504989d24989d94889e34c89e8909090ff158a00000049524983f9017502eb3d4d8b0149ff71084d8b4818498b38498b7008498b58104989d84889f34889f8488d542428ff155e0000004c8b0c244883c408483b65187303ff5548ebbb4c8b0424498b78f0488b4708488b5424084883c420ff2290909090|@5201,8191,@2328,@5200|46,0,@5197 5197:C5,104|90909090909090483b65187303ff554848ff721848ff721048ff72084889c348b8002bf9acaa2a0000909090ff155e00000048bbf005f0acaa2a0000ff15560000004989c24c8b0c244c8b44240848bb0300000000000000488b4424104883c418ff253900000090|@5199,8191,@303,@303,@1956|33,0,@5198 52,0,@1955 80,0,1 5198:S10|5369676e617475726520 5199:S71|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352970617373325369676e617475726544656328322973456e762d283129 5200:C8,256|90909090909090483b65187303ff55484c8b72e05250534950495149ff76f0498b46e890ff15fe00000048bb5d00000000000000ff15f60000004989c24c8b4c24204c8b042448bb0100000000000000488b4424084c8b6c2428498b55e09090ff15d20000004989c44c89e0ff15ce0000004989c34c89e0ff15ca000000495350498b0424909090ff15c20000004d8d7fd84c3b7d107303ff554049c747f8040000004d89fa4c8b4c24084d894a184c8b04244d894210488b7c242849897a08498902488b7424204c8916488b5c24384d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c895008488938488b53f04883c440ff2290909090909090|@5202,8191,@303,@303,@2649,@2155,@2208,@2202|44,0,46 72,0,0 5201:S63|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352970617373325369676e6174757265446563283229 5202:S84|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352970617373325369676e617475726544656328322970617373325369676e617475726542696e64283429 5203:C6,800|90909090909090483b65187303ff554852505348b81500000000000000909090ff15220300004d8d7fd84c3b7d107303ff554049c747f8040000004d89fe49c746180100000049c746100100000049bdb01e6000000000004d896e084989064c89f048ba7012f1acaa2a0000ff15de0200004c8b6424104d8b5c24f04d8d7fe04c3b7d107303ff554049c747f8030000004d89fa49b91031f9acaa2a00004d890a4c8b40304d894210498b7b3049897a084d8d7fe04c3b7d107303ff554049c747f8030000004c89fe48bb8031f9acaa2a000048891e488b504048895610498b4b4048894e084d8d7fe04c3b7d107303ff554049c747f8030000004d89fe49bdf031f9acaa2a00004d892e4c8b48584d894e10498b5b5849895e084d8d7f984c3b7d107303ff554049c747f80c0000004d89fd4d8975584d8b43504d8945504c8b60484d89654849897540488b783849897d384d895530498b532849895528488b482049894d20488b481849894d184c8b48104d894d10488b580849895d0848ba6032f9acaa2a000049895500488b5424105049525648ff7020495649ff73284950574c8b52e84c8b4ad04d89e8488b5ad8488b442448488b52f890ff1596010000488b4c24504d8d7fe04c3b7d107303ff554049c747f8030000004c89f849be1033f9acaa2a00004c89304c8b6c24384c8968104c8b61f04c8960084d8d7fe04c3b7d107303ff554049c747f8030000004d89fb49bad833f9acaa2a00004d89134d896b104d8963084d8d7fe04c3b7d107303ff554049c747f8030000004d89f949b84834f9acaa2a00004d89014d8969104d8961084d8d7fe04c3b7d107303ff554049c747f8030000004c89ff48beb834f9acaa2a00004889374c896f104c8967084d8d7f984c3b7d107303ff554049c747f80c0000004c89fb488b542418488953584c8b7424084c8973504c894b484c8b6c24284c896b404c8b14244c8953384c8b4c24304c894b304c8b4424104c894328488b742420488973204c895b184889431048897b0848ba6032f9acaa2a00004889134c8b51e84c8b49d04989d8488b59d8488b442440488b51f84883c458ff254700000090909090909090|@5215,8191,@1852,@2356,@1931,@1931|21,0,10 80,0,I48 100,0,@2354 150,0,@5204 203,0,@5205 256,0,@5206 385,0,@5207 481,0,@5210 535,0,@5212 580,0,@5213 625,0,@5214 748,0,@5207 5204:C2,56|90909090909090483b65187303ff55485250488b52109090ff124883f80175134c8b742408488b0424498b56084883c410ff224883c410c3|@1306,8191| 5205:C2,56|90909090909090483b65187303ff55485250488b52109090ff124883f80175134c8b742408488b0424498b56084883c410ff224883c410c3|@1306,8191| 5206:C2,56|90909090909090483b65187303ff55485250488b52109090ff124883f80175134c8b742408488b0424498b56084883c410ff224883c410c3|@1306,8191| 5207:O1|@5208 5208:C2,16|48b80100000000000000c39090909090|@5209,1|2,0,0 5209:S71|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352970617373324c6f63616c6465632832296c6f63616c456e762d283129 5210:C2,56|90909090909090483b65187303ff55484c8b72105250498b56109090ff124c8b6c24084d8b6508488b0424498b5424104883c410ff229090|@5211,8191| 5211:S70|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352970617373324c6f63616c646563283229626f6479456e762d283129 5212:C2,56|90909090909090483b65187303ff55484c8b72105250498b56189090ff124c8b6c24084d8b6508488b0424498b5424184883c410ff229090|@5211,8191| 5213:C2,56|90909090909090483b65187303ff55484c8b72105250498b56489090ff124c8b6c24084d8b6508488b0424498b5424484883c410ff229090|@5211,8191| 5214:C2,56|90909090909090483b65187303ff55484c8b72105250498b56089090ff124c8b6c24084d8b6508488b0424498b5424084883c410ff229090|@5211,8191| 5215:S59|535452554354555245535f28292e706173733253747275637473283329706173733253747275637428352970617373324c6f63616c646563283229 5216:S60|535452554354555245535f28292e7061737332537472756374732833297061737332537472756374283529706173733253696e676c65746f6e283329 5217:O3|103,@333,@5218 5218:S21|537461746963206572726f72732028706173733229 5219:O3|103,@333,@5220 5220:S21|537461746963206572726f72732028706173733329 5221:C5,1120|90909090909090488dbc2430ffffff483b7d187303ff5550505050505248ff724848bb010000000000000048b80f0000000000000048ba302a60000000000090ff125048bb010000000000000048b8110000000000000048ba302a600000000000909090ff125048bb010000000000000048b8130000000000000048ba302a600000000000909090ff125048bb010000000000000048b81b0000000000000048ba302a600000000000909090ff124c8d7424284989064c8d6c24284c8b24244d8965084c8d5c24284c8b5424084d8953104c8d4c24284c8b4424104d894118488b7c24184883ff0174154889f848bab02860000000000090ff124889c6eb0a48be010000000000000048ff750848be9e37f9acaa2a0000566a0148896508488b54243848b80100000000000000488b5240909090ff124889c348ff742410488f4508eb6d9090488b4c24184883f901741e5048b8010000000000000048bab0286000000000009090ff124989c6eb0b49be010000000000000050505048bb010000000000000048b80f0000000000000048ba302a6000000000009090ff124c8b7424584989c54d23ee41f6c501750aeb05e9fe000000ff55704989c54d2bee4d8d6d0170ea495548bb010000000000000048b8110000000000000048ba302a600000000000909090ff124c8b6424584989c34d23dc41f6c3017503ff55704989c34d2bdc4d8d5b0170f14c8d5424084d891a4c8d4c24084c8b04244d894108488b7c2410488b7424084889fb4823def6c3017503ff5570488d5fff4803de70f4488b5424384883fa01741c5348b8010000000000000048bab028600000000000ff124889c1eb0b48b9010000000000000053488b4c2448488b41304883f801742148ff71284c8b5424084c8b49084c8b4110488b5918488b41209090ff15e6010000488b442420ff555848bb0100000000000000488b4c24304883f90174195348b8010000000000000048bab028600000000000ff12eb0b48b8010000000000000053505048bb010000000000000048b80f0000000000000048ba302a60000000000090ff124c8b7424704989c54d23ee41f6c5017503ff55704989c54d2bee4d8d6d0170f1495548bb010000000000000048b8110000000000000048ba302a6000000000009090ff124c8b6424704989c34d23dc41f6c3017503ff55704989c34d2bdc4d8d5b0170f14c8d5424084d891a4c8d4c24084c8b04244d894108488b7c2410488b7424084889fb4823def6c3017503ff5570488d5fff4803de70f4488b542458505050505050534c8d442408488b5a38488b4424509090ff15ce0000004d8d7fc84c3b7d107303ff554049c747f8060000004c89f9488b4424084889014c8b7424104c8971084c8b6c24184c8969104c8b6424204c8961184c8b5c24284c8959204c8b5424304c8951284c8b8c24900000004d8b41304983f801742f5149ff71284c8b542410498b7920498b7118498b5910498b51084989d14989d84889f34889f890ff154a000000eb0151488b04244881c4c0000000c3909090|@1304,8191,@5222,@5290,@5222|35,0,0 45,0,7 55,0,I94 69,0,0 79,0,8 89,0,I94 105,0,0 115,0,9 125,0,I94 141,0,0 151,0,13 161,0,I94 239,0,I88 257,0,0 271,0,$5221+326 293,0,0 340,0,0 350,0,I88 369,0,0 382,0,0 392,0,7 402,0,I94 457,0,0 467,0,8 477,0,I94 590,0,0 600,0,I88 617,0,0 684,0,0 706,0,0 716,0,I88 730,0,0 743,0,0 753,0,7 763,0,I94 810,0,0 820,0,8 830,0,I94 5222:C7,464|90909090909090483b65187303ff5548505349504951495248b8383df9acaa2a0000488b54243090ff1248bb0300000000000000488b44242048ba583df9acaa2a000090ff15ae010000488b54243090ff1248b8405ff9acaa2a0000488b542430909090ff124c8b7424184c8b6c24204d89f44d23e541f6c4017503ff55704d89f44d2be54d8d64240170f048bb03000000000000004c89e048ba583df9acaa2a000090ff1556010000488b54243090ff1248b8605ff9acaa2a0000488b542430909090ff124c8b5c24104c8b5424184d89d94d23ca41f6c1017503ff55704d89d94d2bca4d8d490170f148bb03000000000000004c89c848ba583df9acaa2a00009090ff15fe000000488b54243090ff1248b8805ff9acaa2a0000488b542430909090ff124c8b442408488b7c24104c89c64823f740f6c6017503ff55704c89c6482bf7488d760170f148bb03000000000000004889f048ba583df9acaa2a00009090ff15a6000000488b54243090ff1248b8a05ff9acaa2a0000488b542430909090ff1248bb0300000000000000488b042448ba583df9acaa2a00009090ff1572000000488b54243090ff1248b81500000000000000488b542430488b5c24284883c43853ff2290909090909090|@5321,8191,@5226,@5226,@5226,@5226,@5226|26,0,@5223 44,0,1 59,0,@5224 84,0,@5286 142,0,1 155,0,@5224 180,0,@5287 237,0,1 250,0,@5224 276,0,@5288 333,0,1 346,0,@5224 372,0,@5289 392,0,1 406,0,@5224 432,0,10 5223:S15|54696d696e67202d2070617273653a 5224:O2|@5226,@5225 5225:B8|0000000080842e41 5226:C3,176|90909090909090483b65187303ff5548f6c3017503ff55704883fb017e054989deeb0a49be01000000000000004d8d7ff04c3b7d107303ff554049c747f8010000004c89fb4c89334d8d7fe84c3b7d107303ff554049c747f8020000004d89fe49895e0849c706ffffffff52495648ba703ef9acaa2a0000ff124c8b6c2408498b5d0848bab032600000000000909090ff12488b1c2448ba903ff9acaa2a00004883c410ff252e000000909090909090|@5285,8191,@5233|37,0,0 112,0,@5227 133,0,I128 152,0,@5231 5227:O1|@5228 5228:C2,168|90909090909090483b65187303ff554848f7c001000000740c48ba7034600000000000ff225048bb010001000000000048baf02d6000000000009090ff12909090e8c1ffffff4889c348b8603ff9acaa2a000048ba7032600000000000909090ff125048bb0100010000000000488b44240848ba302e600000000000ff1248ba7034600000000000ff124889c3488b04244883c41048baf031600000000000ff2290909090909090|@5230,8191|27,0,I135 40,0,32768 50,0,I109 75,0,@5229 85,0,I127 101,0,32768 116,0,I110 128,0,I135 151,0,I125 5229:B8|000000000000e040 5230:S15|5265616c2e66726f6d496e74283129 5231:O2|@5233,@5232 5232:O2|@5278,@5277 5233:C9,384|90909090909090483b65187303ff55484c8b334983fefd7560488b53084883fa01751048bb0d00000000000000ff2575010000488b0af6c1017503ff55704883f9017d02eb13f6c1017503ff55704881f9910100007f02eb1748b840e3ecacaa2a0000ff555848b801000000000000004889cbff25370100004983feff75664c8b6b084983fd01751048bb0d00000000000000ff251f0100004d8b650041f6c4017503ff55704983fc017d02eb1441f6c4017503ff55704981fc910100007f02eb1a48b840e3ecacaa2a0000909090ff555848b801000000000000004c89e3ff25db0000004983fe0375664c8b6b084983fd01751048bb1900000000000000ff25c30000004d8b650041f6c4017503ff55704983fc037d02eb1441f6c4017503ff55704981fc910100007f02eb1a48b840e3ecacaa2a0000909090ff555848b801000000000000004c89e3ff257f000000505050504889e3488b5208ff124c8b4c24184c8b442410488b5c2408488b04244883c420ff255d0000009090909090|@5244,8191,@5245,@5245,@5256,@5256,@5269,@5269,@5234|37,0,6 91,0,@69 104,0,0 139,0,6 196,0,@69 212,0,0 247,0,12 304,0,@69 320,0,0 5234:C9,280|90909090909090483b65187303ff55484883fb03752348bb010000000000000090e8e1ffffff4889c348b8fd00000000000000ff25070100004983f8ff75334c89c848ba3843f9acaa2a0000ff124889c348b81044f9acaa2a000090ff15e600000048bb5300000000000000ff25de0000004983f801750b48b82844f9acaa2a0000c34983f805750b48b84044f9acaa2a0000c3504c89c848ba5844f9acaa2a00009090ff124889c348b80845f9acaa2a000090ff159e0000004c8b2c244983fd01750c49beb01e600000000000eb2f5048bbffffffffffffffff4c89e89090ff157a0000004889c348b88b0000000000000090ff156e0000004989c6eb01504c89f3488b04244883c410ff255f00000090909090909090|@5276,8191,@303,@303,@303,@303,@305,@303,@303|24,0,0 43,0,126 68,0,@5235 83,0,@5238 100,0,41 122,0,@5239 139,0,@5240 154,0,@5241 171,0,@5243 198,0,I48 211,0,-1 235,0,69 5235:O1|@5236 5236:C4,88|90909090909090483b65187303ff55484883f801750b48b8b01e600000000000c348ff700848bbffffffffffffffff488b009090ff154600000050488b44240890e8c1ffffff4889c3488b04244883c410ff253100000090|@5237,8191,@305,@303|24,0,I48 39,0,-1 5237:S20|494545455265616c2e646f646967697473283129 5238:S4|6e616e28 5239:S3|696e66 5240:S3|302e30 5241:O1|@5242 5242:C4,88|90909090909090483b65187303ff55484883f801750b48b8b01e600000000000c348ff700848bbffffffffffffffff488b009090ff154600000050488b44240890e8c1ffffff4889c3488b04244883c410ff253100000090|@5237,8191,@305,@303|24,0,I48 39,0,-1 5243:S2|302e 5244:S11|5265616c2e666d74283229 5245:C17,872|90909090909090483b65187303ff554850534889c348b81f0000000000000048bab031600000000000909090ff124883f801756c488b5c240848b8230000000000000048bab031600000000000909090ff124883f801740c49befd00000000000000eb0a49beb01e6000000000004956488b5c241048b8210000000000000048bab031600000000000909090ff124883f801741149be5849f9acaa2a0000eb0fe91b00000049be2844f9acaa2a00004c89f3488b04244883c418ff25d00200004c8b342441f6c6017503ff55704d89f54983c50270f44d89e848bb0500000000000000488b44240848baf02f6000000000009090ff124c8b2049f7c401000000740c49bb0300000000000000eb094d8b1c244f8d5c1b014983fb01756e4c8b04244983f801750c49b9b01e600000000000eb2c48ff70104c89c048ba7049f9acaa2a0000ff124889c348b85d0000000000000090ff153e0200004989c1eb0448ff70104c89cb48b86100000000000000ff152a02000048bb484af9acaa2a0000ff15220200004989c2eb6d4983fb03756c488b3c244883ff01750c49b8b01e600000000000eb3448ff7010495448ff70084889f848ba604af9acaa2a00009090ff124889c348b85d0000000000000090ff15da0100004989c0eb0a48ff7010495448ff70084c89c3488b442408909090ff15c2010000eb0ae940010000e9050000004989c1eb6d48ff70105048ff70084954495349b8030000000000000048bb01000000000000004c89e090ff158e01000048bb5d00000000000000ff15860100004c8b042441f6c0017503ff55704c89c74883ef0270f4504989f848bb0300000000000000488b44241090ff155e010000eb05e96c0000004889c3488b0424ff1552010000488b742430488b5c24084889f24823d3f6c2017503ff55704889f2482bd3488d520170f1f6c2017503ff55704889d14883c10270f4504889c848ba084bf9acaa2a0000909090ff124889c3488b0424909090ff15020100004989c14883c42048bb8b000000000000004c89c89090ff15ee0000004c8b342441f6c6017503ff55704d89f54983ed0270f45048bbffffffffffffffff4c89e89090ff15ca0000004889c3488b0424909090ff15c20000004989c24883c4184c8b24244983fc0174174c89d348b8fd000000000000004883c418ff25a20000004c89d04883c418c39090|@5255,8191,@303,@303,@303,@303,@303,@303,@1440,@303,@1440,@303,@303,@303,@305,@303,@303|23,0,15 33,0,I124 59,0,17 69,0,I124 90,0,126 102,0,I48 119,0,16 129,0,I124 150,0,@5246 167,0,@5239 219,0,2 234,0,I117 260,0,1 297,0,I48 316,0,@5247 331,0,46 360,0,48 376,0,@5250 413,0,I48 438,0,@5251 455,0,46 534,0,1 544,0,0 564,0,46 606,0,1 705,0,@5253 743,0,69 787,0,-1 844,0,126 5246:S3|6e616e 5247:O1|@5248 5248:C3,88|90909090909090483b65187303ff5548a8017503ff55704883f8017f0b48b8b01e600000000000c3a8017503ff55704989c64983ee0270f44c89f09090e8c5ffffff4889c348b86100000000000000ff252b000000909090|@5249,8191,@303|31,0,I48 71,0,48 5249:S25|5265616c2e736369466d742832296164645a65726f73283129 5250:S2|4530 5251:O1|@5252 5252:C3,88|90909090909090483b65187303ff5548a8017503ff55704883f8017f0b48b8b01e600000000000c3a8017503ff55704989c64983ee0270f44c89f09090e8c5ffffff4889c348b86100000000000000ff252b000000909090|@5249,8191,@303|31,0,I48 71,0,48 5253:O1|@5254 5254:C3,88|90909090909090483b65187303ff5548a8017503ff55704883f8017f0b48b8b01e600000000000c3a8017503ff55704989c64983ee0270f44c89f09090e8c5ffffff4889c348b86100000000000000ff252b000000909090|@5249,8191,@303|31,0,I48 71,0,48 5255:S14|5265616c2e736369466d74283229 5256:C15,992|90909090909090483b65187303ff554850534889c348b81f0000000000000048bab031600000000000909090ff124883f801756c488b5c240848b8230000000000000048bab031600000000000909090ff124883f801740c49befd00000000000000eb0a49beb01e6000000000004956488b5c241048b8210000000000000048bab031600000000000909090ff124883f801741149be5849f9acaa2a0000eb0fe91b00000049be2844f9acaa2a00004c89f3488b04244883c418ff25480300004c8b042448bb0700000000000000488b44240848baf02f600000000000909090ff124c8b3049f7c601000000740c49bd0300000000000000eb084d8b2e4f8d6c2d014c8b600841f6c4017503ff55704983fc017f704c8b14244983fa01750c49bb6100000000000000eb5f49b901000000000000004d89e04d23c141f6c0017503ff55704d89c84d2bc44d8d400170f14956495448ff701049554c89c048ba5050f9acaa2a000090ff124889c348b80845f9acaa2a000090ff1592020000488b5c2418eb0ae97d000000e97000000090ff1582020000488b7c2420488b34244889fb4823def6c3017503ff55704889fb482bde488d5b0170f1488b5424104889d94823caf6c1017503ff5570488d4bff4803ca70f4504889c848ba1851f9acaa2a000090ff124889c3488b0424909090ff152a0200004989c34883c410eb76505048ff7010eb7349544d23e541f6c401495c7503ff55704d3bec7f634d89e34d23dd41f6c3017503ff55704d89e34d2bdd4d8d5b0170f1505048ff701049564c89d848bac051f9acaa2a0000ff124889c3488b0424909090ff15ca0100004c8b4c24204983f901751b49bab01e600000000000eb3ae937010000e932010000e93f000000504c89c848ba6852f9acaa2a00009090ff124889c348b85d0000000000000090ff15860100004989c2eb01504c89d3488b042490ff157a0100004989c3eb6d505048ff70104956495449554d89e048bb01000000000000004c89f090ff155a01000048bb5d00000000000000ff15520100004c8b1c244c8b5424084d89d94d23ca41f6c1017503ff55704d89d94d2bca4d8d490170f1504d89c84c89d3488b4424189090ff1522010000eb05e9780000004889c3488b0424ff15160100004c8b442438488b7c24084c89c64823f740f6c6017503ff55704c89c6482bf7488d760170f1488b5c24104889f24823d3f6c2017503ff5570488d56ff4803d370f4504889d048ba1053f9acaa2a0000909090ff124889c3488b0424909090ff15ba0000004989c34883c4184883c410488b0c244883f90174174c89db48b8fd000000000000004883c428ff25960000004c89d84883c428c3909090909090|@5268,8191,@303,@303,@303,@303,@303,@303,@303,@1440,@303,@1440,@303,@303,@303|23,0,15 33,0,I124 59,0,17 69,0,I124 90,0,126 102,0,I48 119,0,16 129,0,I124 150,0,@5246 167,0,@5239 198,0,3 213,0,I117 240,0,1 289,0,48 301,0,0 351,0,@5257 367,0,@5243 475,0,@5260 580,0,@5262 619,0,I48 650,0,@5264 667,0,46 724,0,0 744,0,46 905,0,@5266 960,0,126 5257:O1|@5258 5258:C3,88|90909090909090483b65187303ff5548a8017503ff55704883f8017f0b48b8b01e600000000000c3a8017503ff55704989c64983ee0270f44c89f09090e8c5ffffff4889c348b86100000000000000ff252b000000909090|@5259,8191,@303|31,0,I48 71,0,48 5259:S16|5265616c2e6164645a65726f73283129 5260:O1|@5261 5261:C3,88|90909090909090483b65187303ff5548a8017503ff55704883f8017f0b48b8b01e600000000000c3a8017503ff55704989c64983ee0270f44c89f09090e8c5ffffff4889c348b86100000000000000ff252b000000909090|@5259,8191,@303|31,0,I48 71,0,48 5262:O1|@5263 5263:C3,88|90909090909090483b65187303ff5548a8017503ff55704883f8017f0b48b8b01e600000000000c3a8017503ff55704989c64983ee0270f44c89f09090e8c5ffffff4889c348b86100000000000000ff252b000000909090|@5259,8191,@303|31,0,I48 71,0,48 5264:O1|@5265 5265:C3,88|90909090909090483b65187303ff5548a8017503ff55704883f8017f0b48b8b01e600000000000c3a8017503ff55704989c64983ee0270f44c89f09090e8c5ffffff4889c348b86100000000000000ff252b000000909090|@5259,8191,@303|31,0,I48 71,0,48 5266:O1|@5267 5267:C3,88|90909090909090483b65187303ff5548a8017503ff55704883f8017f0b48b8b01e600000000000c3a8017503ff55704989c64983ee0270f44c89f09090e8c5ffffff4889c348b86100000000000000ff252b000000909090|@5259,8191,@303|31,0,I48 71,0,48 5268:S14|5265616c2e666978466d74283229 5269:C19,960|90909090909090483b65187303ff554850534889c348b81f0000000000000048bab031600000000000909090ff124883f801756c488b5c240848b8230000000000000048bab031600000000000909090ff124883f801740c49befd00000000000000eb0a49beb01e6000000000004956488b5c241048b8210000000000000048bab031600000000000909090ff124883f801741149be5849f9acaa2a0000eb0fe91b00000049be2844f9acaa2a00004c89f3488b04244883c418ff25280300004c8b042448bb0500000000000000488b44240848baf02f600000000000909090ff124c8b3049f7c601000000740c49bd0300000000000000eb084d8b2e4f8d6c2d014c8b60084c8b1c2449544d23e341f6c401495c7503ff55704d3be37e02eb1141f6c4017503ff55704983fcf77c02eb6f4983fd0375054d89f1eb694956495448ff7010495549b8030000000000000048bb01000000000000004c89f09090ff158a02000048bb5d00000000000000ff15820200004c8b042441f6c0017503ff55704c89c74883ef0270f4504989f848bb0300000000000000488b442420eb0ae981000000e92000000090ff154e0200004889c3488b0424909090ff15460200004989c14883c410eb0750495448ff701048bb8b000000000000004c89c890ff152a0200004c8b44240841f6c0017503ff55704c89c74883ef0270f45048bbffffffffffffffff4889f890ff15060200004889c3488b0424909090ff15fe0100004989c2eb6d41f6c4017503ff55704983fc017f6349ba01000000000000004d89e14d23ca41f6c1017503ff55704d89d14d2bcc4d8d490170f1505048ff701049564c89c848ba5858f9acaa2a0000ff124889c348b80845f9acaa2a000090ff15a2010000488b1c249090ff159e010000eb0ae9fc000000e9050000004989c2eb6c49544d23e541f6c401495c7503ff55704d3bec7f5c4d89e24d23d541f6c2017503ff55704d89e24d2bd54d8d520170f1505048ff701049564c89d048ba0059f9acaa2a0000ff124889c3488b0424909090ff153e01000048bba859f9acaa2a0000ff15360100004989c2eb6de981000000505048ff70104956495449554d89e048bb01000000000000004c89f0ff151201000048bb5d00000000000000ff150a0100004c8b14244c8b4c24084d89d04d23c141f6c0017503ff55704d89d04d2bc14d8d400170f1504c89cb488b44241890ff15de000000eb05e9140000004889c3488b0424ff15d20000004989c24883c418488b7c24084883ff0174174c89d348b8fd000000000000004883c430ff25b10000004c89d04883c430c390|@5275,8191,@303,@1440,@303,@1440,@303,@303,@305,@303,@303,@303,@303,@303,@1440,@303,@1440,@303,@303|23,0,15 33,0,I124 59,0,17 69,0,I124 90,0,126 102,0,I48 119,0,16 129,0,I124 150,0,@5246 167,0,@5239 198,0,2 213,0,I117 240,0,1 329,0,1 339,0,0 360,0,46 402,0,1 468,0,69 512,0,-1 568,0,0 616,0,@5270 631,0,@5243 736,0,@5272 764,0,@5274 805,0,0 824,0,46 933,0,126 5270:O1|@5271 5271:C3,88|90909090909090483b65187303ff5548a8017503ff55704883f8017f0b48b8b01e600000000000c3a8017503ff55704989c64983ee0270f44c89f09090e8c5ffffff4889c348b86100000000000000ff252b000000909090|@5259,8191,@303|31,0,I48 71,0,48 5272:O1|@5273 5273:C3,88|90909090909090483b65187303ff5548a8017503ff55704883f8017f0b48b8b01e600000000000c3a8017503ff55704989c64983ee0270f44c89f09090e8c5ffffff4889c348b86100000000000000ff252b000000909090|@5259,8191,@303|31,0,I48 71,0,48 5274:S2|2e30 5275:S14|5265616c2e67656e466d74283229 5276:S20|494545455265616c2e746f537472696e67283429 5277:B8|0000000000001000 5278:C3,624|90909090909090483b65187303ff55485250534889c348b8230000000000000048bab0316000000000009090ff1250488b5c241048b81f0000000000000048bab031600000000000ff124883f801745b48bbc85cf9acaa2a0000488b44241048ba3031600000000000909090ff124883f801740c49be0500000000000000eb7048bbc85cf9acaa2a0000488b44241048ba3030600000000000909090ff124883f801740c4c8b6c2410eb1ae951000000488b44241048ba303360000000000090ff124989c54c8b642418498b5c24084c89e848ba3030600000000000ff124883f801741149be0300000000000000eb4ae94500000049befdffffffffffffffeb39488b5c241048b8210000000000000048bab0316000000000009090ff124883f801740c49beffffffffffffffffeb0a49be01000000000000004983fe0575334c8b74240849c706010000004c8b2c244d896e0849c746100500000049c746180100000048b801000000000000004883c420c34983fe0175334c8b74240849c706010000004c8b2c244d896e0849c746100100000049c746180100000048b801000000000000004883c420c34983feff75334c8b74240849c706010000004c8b2c244d896e0849c74610ffffffff49c746180100000048b801000000000000004883c420c3495649b8010000000000000048bb0100000000000000488b44241848baf02f6000000000009090ff124c8b58084c8b5010488b00909090ff15760000004983fa01750c49b90300000000000000eb0a49b901000000000000004d89c84983f002488b7c24104c891f4c894708488b3424488977104889471848b801000000000000004883c428c390909090|@5281,8191,@5280|24,0,17 34,0,I124 54,0,15 64,0,I124 82,0,@5279 97,0,I122 118,0,2 130,0,@5279 145,0,I118 183,0,I130 212,0,I118 230,0,1 247,0,-2 264,0,16 274,0,I124 294,0,-1 306,0,0 358,0,0 415,0,0 472,0,0 489,0,0 499,0,0 514,0,I117 554,0,1 566,0,0 607,0,0 5279:B8|0000000000000000 5280:C3,96|90909090909090483b65187303ff55485048f7c001000000740c49be0300000000000000eb084c8b304f8d74360141f6c6017503ff55704c89f04883e80270f44889c348b80100000000000000488d5424089090ff152e0000004883c408c390|@5283,7181,@5282|28,0,1 69,0,0 5281:S17|5265616c2e746f446563696d616c283229 5282:C2,240|90909090909090483b65187303ff5548f6c3017503ff55704883fb017d01c3f6c3017503ff55704989de4983ee0270f4f6c3017503ff55704883fb017d02eb364c8b6af849f7c501000000740c49bc0300000000000000eb094d8b65004f8d642401534923dcf6c3015b7503ff5570493bdc7d02eb1a4989c448b860d6ecacaa2a0000ff555849bd010000000000000049f7c5010000007402eb184c8d63104c89e348d1eb490fb65c1d00488d5c1b014989dd41f6c5017503ff55704d89ec4983ec6070f44d8d7fe84c3b7d107303ff554049c747f8020000004c89fb488943084c89234889d84c89f3e918ffffff90|@5284,7181|79,0,1 123,0,@49 136,0,0 5283:S22|5265616c2e737472546f44696769744c697374283129 5284:S32|5265616c2e737472546f44696769744c69737428312967657444696773283229 5285:S11|54696d652e666d74283229 5286:S12|2c2073656d616e746963733a 5287:S12|2c207472616e736c6174653a 5288:S11|2c2067656e65726174653a 5289:S6|2c2072756e3a 5290:C9,392|90909090909090483b65187303ff554850495049beb061f9acaa2a00004883fb0175054d89f5eb61505048ff73084c8d4424084c8b234c89f34c89e0488d542428909090ff15660100004d8d7fe84c3b7d107303ff554049c747f8020000004d89fb4c8b5424084d89134c8b4c24104d894b084d89de488b1c244883c418483b65187303ff5548eb94e90a00000049bd01000000000000004d8b6508495448bb0100000000000000498b0424ff15060100004c8b1c245048bb0100000000000000498b4310909090ff15f20000004c8b5424085048bb0100000000000000498b42289090ff15de0000004c8b4c24105048bb0100000000000000498b41189090ff15ca0000004c8b4424185048bb0100000000000000498b40089090ff15b6000000488b7c24205048bb0100000000000000488b47209090ff15a2000000488b742430488b5c242048891e488b142448895608488b4c241848894e104c8b7424084c897618488946204c8b6c24104c896e2848b801000000000000004883c440c390909090909090|@5293,8191,@5294,@5292,@5292,@5292,@5292,@5292,@5292|21,0,@5291 144,0,0 160,0,0 185,0,0 214,0,0 242,0,0 270,0,0 298,0,0 372,0,0 5291:O2|0,@1303 5292:C3,96|90909090909090483b65187303ff55484883f80175044889d8c34c8b3049ff364889de4c89f1488b4008488d54240890ff15520000004d8d7fe84c3b7d107303ff554049c747f8020000004d89fe4989760849890e4c89f34883c408eba99090|@5320,8191,@5319| 5293:S29|535452554354555245535f28292e706173733453747275637473283329 5294:C6,1192|90909090909090483b65187303ff55484c8b73084c8b284983fd05756f524d8d7fe84c3b7d107303ff554049c747f8020000004d89fc4d8b5e184d895c24084c8b134d891424495049ff3649ff760849ff761049ff762049ff76284c8b48084983f90175054d89e0eb62505049ff71084c8d4424084c89e3498b01488d542450ff154a0400004d8d7fe8eb05e9b40000004c3b7d107303ff554049c747f8020000004c89ff488b742408488937488b5c241048895f084989fc4c8b0c244883c418483b65187303ff5548eb93e90a00000049b801000000000000004d8d7fc84c3b7d107303ff554049c747f8060000004c89ff488b342448897728488b5c240848895f20498b500848895718488b4c241048894f10488b442418488947084c8b7424204c89374c8b6c24284d8b204d89650049897d0848b801000000000000004883c438c34983fd0f756d524d8d7fe84c3b7d107303ff554049c747f8020000004d89fc4d8b5e284d895c24084c8b134d891424495049ff3649ff760849ff761049ff761849ff76204c8b48084983f90175054d89e0eb64505049ff71084c8d4424084c89e3498b01488d5424509090ff1522030000eb05e9b80000004d8d7fe84c3b7d107303ff554049c747f8020000004c89ff488b742408488937488b5c241048895f084989fc4c8b0c244883c418483b65187303ff5548eb91e90a00000049b801000000000000004d8d7fc84c3b7d107303ff554049c747f8060000004c89ff498b700848897728488b1c2448895f20488b54240848895718488b4c241048894f10488b442418488947084c8b7424204c89374c8b6c24284d8b204d89650049897d0848b801000000000000004883c438c34983fd07756e5249504c8b60084983fc0175054989dbeb61505049ff7424084c8d442408498b0424488b542420909090e85dfdffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fa4c8b4c24084d890a4c8b4424104d8942084c89d34c8b24244883c418483b65187303ff5548eb0ae932000000e90c000000eb8d49bb01000000000000004c8b14244d8b0b4d890a4d8b43084d89420848b801000000000000004883c410c34983fd0d756f524c8b60184d8b1c2449504983fb0175054989daeb5e505049ff73084c8d442408498b03488d54242890ff158a0100004d8d7fe84c3b7d107303ff554049c747f8020000004d89f94c8b4424084d8901488b7c2410498979084c89cb4c8b1c244883c418483b65187303ff5548eb0ae932000000e90c000000eb9049ba01000000000000004c8b0c244d8b024d8901498b7a084989790848b801000000000000004883c410c34983fd0b756d495048ff3349ff3649ff760849ff761049ff761849ff762049ff7628488b400848ba9867f9acaa2a0000ff124c8b5c24084983fb0175054989c4eb0f488d54244090ff15ce0000004989c44d8d7fc84c3b7d107303ff554049c747f8060000004d89fa4c8b0c244d894a28eb05e9470000004d8962204c8b4424104d894218488b7c241849897a10488b74242049897208488b5c242849891a488b542438488b4c243048890a4c89520848b801000000000000004883c440c34c8b234d89204c8b5b084d89580848b80100000000000000c390909090|@5298,8191,@5299,@5303,@5317,@5297|211,0,0 312,0,0 515,0,0 616,0,0 759,0,0 787,0,0 931,0,0 959,0,0 1012,0,@5295 1150,0,0 1179,0,0 5295:O1|@5296 5296:C2,136|90909090909090483b65187303ff55484883f801750b48b80100000000000000c34c8b304d8b6e104d8b65004d8d7fe84c3b7d107303ff554049c747f8020000004d89fb4d8963084d8b66084d89234953488b4008e8adffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fb49894308488b04244989034c89d84883c408c3909090|@417,7681|24,0,0 5297:C2,88|90909090909090483b65187303ff55484883f8017505488b42c8c35248ff30488b40089090e8ddffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b04244889024889d04883c410c3909090|@1847,5| 5298:S45|535452554354555245535f28292e70617373345374727563747328332965787472616374537472756374283329 5299:C9,376|90909090909090483b65187303ff55484c8b72f84d8b6ef84d8b5d004983fb0b7525495048ff701848ff702848ff3348ff73084c89eb488b44240890ff155e0100004989c4eb694983fbfb7526495048ff701848ff702848ff3348ff73084c89eb488b4424089090ff153a0100004989c4eb3d4d8d7fe04c3b7d107303ff554049c747f8030000004d89fc4c8b134d895424104d896c240849c704240d000000495048ff701848ff7028495248ff73084c8b4c24104d8b014c89c090ff15ee0000004889c74c89c0ff15ea0000004889c64c89c0ff15e60000004889c34c89e0ff15e20000004989c14989d84889f34889f89090ff15d6000000488b542408f6c2017503ff55704889d14883c10270f44d8d7fe84c3b7d107303ff554049c747f8020000004d89fe498946084c8b6c24184d892e4d8d7fe84c3b7d107303ff554049c747f8020000004d89fc4c8b1c244d895c24084d8934244c8b54242049890a4d89620848b801000000000000004883c428c390909090|@5301,8191,@4802,@4802,@5300,@2640,@2638,@5129,@5191|359,0,0 5300:C2,40|4883f801751a48b8b0d7edacaa2a0000909090ff555848b80100000000000000488b4008c3909090|@5302,1|8,0,@970 24,0,0 5301:S66|535452554354555245535f28292e706173733453747275637473283329657874726163745374727563742833296578747261637446756e63746f7242696e64283329 5302:S28|5354525543545f56414c5328292e66756e63746f724e616d65283129 5303:C7,568|90909090909090483b65187303ff55484c8b70204d8b2e4983fd01755f52495048ff700848ff3348ff730848b81500000000000000909090ff15220200004d8d7fd84c3b7d107303ff554049c747f8040000004d89fb49c743180100000049c743100100000049bab01e6000000000004d8953084989034d89dceb124d8b651052495048ff700848ff3348ff73084c8b5c24204d8b53f84d8b4af8498b394883ff0b751749544c89cb488b4424109090ff15b20100004989c0eb4a4883fffb751649544c89cb488b44241090ff159e0100004989c0eb2e4d8d7fe04c3b7d107303ff554049c747f8030000004d89f8488b742408498970104d89480849c7000d00000049544950488b5c24084c89c090ff1562010000488b5c2418f6c3017503ff55704889da4883c20270f4488b4c24085248ff711848ff7110488b01909090ff153a0100004d8d7fd84c3b7d107303ff554049c747f8040000004d89fe4c8b6c24084d896e184c8b24244d89661049bbb01e6000000000004d895e084989064d8d7fe84c3b7d107303ff554049c747f8020000004d89fa4c8b4c24184d894a0849c702ffffffff4d8d7fe04c3b7d107303ff554049c747f8030000004d89f84d8970104d895008488b7c24384989384d8d7fe84c3b7d107303ff554049c747f8020000004c89fe4c89460848893e4d8d7fe84c3b7d107303ff554049c747f8020000004c89fb488b54242848895308488933488b4c2440488b4424104889014889590848b801000000000000004883c450c39090909090|@5315,8191,@1852,@4802,@4802,@5304,@2202|45,0,10 104,0,I48 369,0,I48 550,0,0 5304:C4,152|90909090909090483b65187303ff55484989c64889d89090ff15a20000004d8d7fe04c3b7d107303ff554049c747f8030000004c89fb48ba806ff9acaa2a00004889134c89731049be0075f9acaa2a00004c8973084d8d7fe84c3b7d107303ff554049c747f8020000004c89fa49be1075f9acaa2a00004c893248895a0849b801000000000000004889d3ff253700000090909090909090|@5316,8191,@2206,@2285|56,0,@5305 73,0,@5312 111,0,@5313 128,0,0 5305:C15,504|90909090909090483b65187303ff55484989d04889d848ba10b3f0acaa2a0000ff15fa0100004883f801746b4889d848baf8b2f0acaa2a0000909090ff15e60100004889c34889d8ff15e20100004c8b304983fe0175724d8b6810498b55004883fa0b75164950534c89eb488b400890ff15c20100004889c2eb584883fafb751b4950534c89eb488b400890ff15ae0100004889c2eb64e9f30000004d8d7fe04c3b7d107303ff554049c747f8030000004c89fa488b480848894a104c896a0848c7020d000000eb05e90a000000495053eb48e9430000004989c54c89e89090ff15620100004883f80174144c89e890ff155a0100004889c2eb1de91b00000048b81872f9acaa2a000090ff555848ba01000000000000004950534c8b1c244983fb01754f5248b81500000000000000ff15220100004d8d7fd84c3b7d107303ff554049c747f8040000004d89fa49c742180100000049c742100100000049b9b01e6000000000004d894a084989024d89d4eb054d8b6310524c8b5424104c89e3488b0424498b52084883c418ff224889d848ba30a7f0acaa2a0000ff15be0000004883f80174434889d848ba18a7f0acaa2a0000909090ff15aa00000049504889c74889f89090ff15a200000057488d542410ff159e0000004889c3488b04244883c410ff259500000048b80100000000000000c39090|@5309,8191,@2190,@2193,@2253,@4802,@4802,@2280,@2267,@1852,@2167,@2170,@2265,@5308,@2249|24,0,@2189 49,0,@2188 258,0,@5306 272,0,0 296,0,10 352,0,I48 404,0,@2166 429,0,@2165 493,0,0 5306:O3|@7377,@215,@5307 5307:S28|6578747261637456616c73546f5369673a2062616420616363657373 5308:C3,112|90909090909090483b65187303ff55484883f801750b48b80100000000000000c35248ff7008488b00909090ff156600000050488b442408488b542410e8c5ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fe498946084c8b2c244d892e4c89f04883c418c3909090|@417,8191,@5310|24,0,0 5309:S51|535452554354555245535f28292e7061737334537472756374732833296578747261637456616c73546f536967283229283329 5310:C5,248|90909090909090483b65187303ff55484c8b70104d8b2e4983fd0175714c8b62f84d8b5c24104d8b134983fa0b751d48ff3048ff700848ff70184c89db498b4608909090ff15d6000000eb624983fafb751a48ff3048ff700848ff70184c89db498b4608ff15be000000eb424c8b084c8b4008488b78184d8d7fe04c3b7d107303ff554049c747f803000000eb05e9600000004c89f8498b7608488970104c89580848c7000d00000049514950579090ff157a0000004d8d7fd84c3b7d107303ff554049c747f8040000004c89fb488b14244889531848894310488b4c240848894b08488b4424104889034889d84883c418c3c390909090|@5311,8191,@4802,@4802,@5129| 5311:S70|535452554354555245535f28292e7061737334537472756374732833296578747261637456616c73546f536967283229283329636f707941436f6e7374727563746f72283129 5312:O1|@5304 5313:C2,40|90909090909090483b65187303ff55484c8b4010488b5808488b00488b5208ff2290909090909090|@5314,8191| 5314:S51|535452554354555245535f28292e7061737334537472756374732833296578747261637456616c73546f536967283229283129 5315:S68|535452554354555245535f28292e706173733453747275637473283329657874726163745374727563742833296578747261637453747275637475726542696e64283329 5316:S48|535452554354555245535f28292e7061737334537472756374732833296578747261637456616c73546f536967283229 5317:C12,1408|90909090909090483b65187303ff55484c8b304983fefd756d4d8d7fd84c3b7d107303ff554049c747f8040000004d89fd4c8b60204d8965184c8b58184d895d104c8b50104d8955084c8b48084d894d00488b7b084889d64c89d890ff15460500004883f801746d4c89d890ff153e050000488b13f6c2017503ff55704889d04883c002eb05e98d02000070ed4989c64c89e890ff151e0500004d8d7fe84c3b7d107303ff554049c747f8020000004d89fc4d896c2408498904244d8d7fe84c3b7d107303ff554049c747f8020000004d89fbeb05e95f0000004c8b57104d8953084d89234d8d7fc84c3b7d107303ff554049c747f8060000004d89f9488b772849897128488b572049895120488b4718498941184d8959104c8b6f084d8969084c8b274d89214d89304d89480848b80100000000000000c3488b56f8488b42f84c8b184983fb0b7535495049524954495548ff3348ff3748ff770848ff771048ff771848ff772048ff77284889c3488b442430ff15460400004989c6eb6e4983fbfb7536495049524954495548ff3348ff3748ff770848ff771048ff771848ff772048ff77284889c3488b44243090ff15120400004989c6eb524d8d7fe04c3b7d107303ff554049c747f8030000004d89fe4c8b0b4d894e104989460849c7060d000000495049524954eb05e91b0000004955495148ff3748ff770848ff771048ff771848ff772048ff7728488b4424389090ff15b60300004989c04c89f0ff15b20300004d8d7fd84c3b7d107303ff554049c747f8040000004c89ff488b7424404889771848894710488b5c244848895f084c8907488b542430f6c2017503ff55704889d14883c10270f44d8d7fe84c3b7d107303ff554049c747f8020000004c89f8488978084c89004d8d7fe84c3b7d107303ff554049c747f8020000004d89fe4c8b6c24184d896e084989064d8d7fc84c3b7d107303ff554049c747f8060000004d89fc4c8b1c244d895c24284c8b5424084d895424204c8b4c24104d894c24184d897424104c8b4424204d89442408488b7c242849893c24488b74245048890e4c89660848b801000000000000004883c458c34983feff756d4c8b6b084c8b60084c89e0909090ff15ae0200004d8d7fe84c3b7d107303ff554049c747f8020000004d89fb4d8963084989034d8d7fe84c3b7d107303ff554049c747f8020000004d89fa4d8b4d284d894a084d891a4d8d7fc84c3b7d107303ff554049c747f806000000eb05e9430000004c89ff4c895728498b752048897720498b551848895718498b4d1048894f10498b4508488947084d8b75004c89374c8b234d89204989780848b80100000000000000c34983fe0175704d8d7fe84c3b7d107303ff554049c747f8020000004d89fd4c8b60104d8965084c8b58084d895d004c8b53084d8d7fe84c3b7d107303ff554049c747f8020000004d89f9498b3a498979084d89294d8d7fc84c3b7d107303ff554049c747f8060000004c89fe498b522848895628eb05e938000000498b4a2048894e204d8b6a184c896e184d8b72104c8976104d8b5a084c895e084c890e4c8b0b4d89084989700848b80100000000000000c34c8b6b084c8b60084c89e0909090ff154e01000050504950495448ff3349ff750049ff750849ff751049ff751849ff752049ff7528488d5c2448ff152a0100004d8d7fe84c3b7d107303ff554049c747f8020000004d89fb4c8b5424384d8953084c8b4c24504d890b4d8d7fe84c3b7d107303ff554049c747f8020000004d89f8488b7c2420498978084d89184d8d7fc84c3b7d107303ff554049c747f8060000004c89fe488b1c2448895e28488b54240848895620488b4c241048894e18488b442418488946104c8946084c8b7424284c89364c8b6c24404c8b6424304d8965004989750848b801000000000000004883c458c39090909090|@5318,8191,@2402,@2404,@2136,@4802,@4802,@2136,@5129,@2259,@2066,@2068|304,0,0 779,0,0 970,0,0 1149,0,0 1390,0,0 5318:S56|535452554354555245535f28292e706173733453747275637473283329657874726163745374727563742833296d616b6544656373283329 5319:C3,176|90909090909090483b65187303ff55484883f801750b48b80100000000000000c34c8b304c8b68084d8d7fe84c3b7d107303ff554049c747f8020000004c89f84d8b264c8960084c8b5af84c89184989d14d89f04c89ef90ff157a0000004883f801753d495149504889f84c89ca909090e891ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fb48894308488b14244889134889d84883c410c34889f84c89cae95bffffff90909090|@147,8173,@4505|24,0,0 5320:S41|535452554354555245535f28292e70617373345374727563747328332972657646696c746572283229 5321:S29|434f4d50494c45525f424f445928292e7072696e7454696d6573283629 5322:C2,24|49c7010100000048b80100000000000000c2280090909090|@6167,457|9,0,0 5323:S31|434f4d50494c45525f424f445928292e62617365436f6d70696c6572283329 5324:C2,8|498b01c228009090|@5325,457| 5325:S24|4c45585f28292e6572726f724f6363757272656428313029 5326:C2,224|90909090909090483b65187303ff55484d8d7fe84c3b7d107303ff554049c747f8020000004d89fe49bd0080f9acaa2a00004d892e4d894e084989c44d8d7fe84c3b7d107303ff554049c747f8020000004c89f849bb108ff9acaa2a00004c89184c89480853495049564c89e2909090ff124d8d7fe84c3b7d107303ff554049c747f8020000004c89f849bac88ff9acaa2a00004c89104c8b0c244c894808488b542410ff124d8d7fe84c3b7d107303ff554049c747f8020000004c89f849b8b890f9acaa2a00004c8900488b3c2448897808488b5424084883c418ff229090|@5355,8191|42,0,@5327 86,0,@5351 140,0,@5353 192,0,@5354 5327:C4,144|90909090909090483b65187303ff55484d8d7fd84c3b7d107303ff554049c747f8040000004d89fe49bdd880f9acaa2a00004d892e4c8b6a084d896e1849894610498956084989d44889d890ff15660000004d8d7fe84c3b7d107303ff554049c747f8020000004c89fb48ba188ef9acaa2a00004889134c89730849b80100000000000000ff25350000009090909090|@5350,8191,@2206,@2285|42,0,@5328 108,0,@5348 125,0,0 5328:C12,336|90909090909090483b65187303ff55484989d04889c74889d848ba10b3f0acaa2a000090ff154e0100004883f80174744950534889fb498b40109090ff153e01000048bb5d00000000000000ff15360100004889c6488b042448baf8b2f0acaa2a000090ff15260100004883f80175575648b8150000000000000090ff15160100004d8d7fd84c3b7d107303ff554049c747f8040000004c89fa48c7421801000000eb05e93600000048c742100100000048b9b01e60000000000048894a084889024889d3eb05488b581056488b542410488b0424488b52084883c418ff224889d848ba28b5f0acaa2a0000ff15ae0000004883f801744b4950534889fb498b40109090ff159e0000004889c6488b042448ba10b5f0acaa2a000090ff158e0000009090ff158e000000488b5c24084c8b43184889c34889f04883c410ff257d00000048b80100000000000000c39090|@5346,8191,@2190,@303,@303,@2193,@1852,@2198,@303,@2201,@2277,@5329|27,0,@2189 68,0,46 91,0,@2188 115,0,10 179,0,I48 228,0,@2197 275,0,@2196 325,0,0 5329:C3,200|90909090909090483b65187303ff55484d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fe49c706010000004d8d7fd84c3b7d107303ff554049c747f8040000004d89fd49bcb883f9acaa2a00004d8965004d8975184d894510498945084d8d7fe84c3b7d107303ff554049c747f8020000004c89f849bb388cf9acaa2a00004c89184c89680890ff155a0000004989c24889d84c89d290ff124989c148b801000000000000004c89ca9090ff1248b80100000000000000c390909090909090|@5347,8191,@2550|78,0,@5330 128,0,@5342 167,0,0 184,0,0 5330:C19,784|90909090909090483b65187303ff55484989d54889d89090ff151a0300004883f80174714d89ec4889d89090ff150e0300004989c6498b5e08498b06ff15060300004d89f5909090ff15020300004883f8017471498b5d08498b4500ff15f60200004883f80375624d8b5c2418498b0349544955ff15e60200004889c348b8bf0000000000000090ff15da0200004c8b542408eb05e9670200004d8b4a184d8b0141f6c0017503ff55704c89c74883c70270f44989394889c648b80100000000000000eb0ae92c020000e92702000090ff159a020000488b1c244889c1488b034c8b73084c89f390ff158a0200006a014989c24989c949b8e005edacaa2a000048bb01000000000000004889f0909090ff156a02000050504989c54c89e89090ff15620200009090ff15620200004883f80174344d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fc4d892c244989e349c703ffffffff4989e24d896208eb124989e449c70424010000004989e34d896b084d8d7fe84c3b7d107303ff554049c747f8020000004d89fa4c8b0c244d890a4c8b4424084d8942084d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c8950104889700848c70001000000909090ff15c6010000488b7c2418488b7710505648ff762848ff763048ff763848ff764048ff76484c8b56204c8b4e184c8b4610488b5e08488b06ff1596010000488b5c24284d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48b98887f9acaa2a000048894a084c8b73084c89324989c54d8d7fe84c3b7d107303ff554049c747f8020000004c89f84889500849bc2088f9acaa2a00004c892049559090ff15360100004d8d7fe84c3b7d107303ff554049c747f8020000004d89fb49ba4088f9acaa2a00004d8913498943084c8b4c240849ff711049ff711849ff712049ff712849ff713049ff713849ff714049ff71484d8b51084d8b0949b80100000000000000488b5c24404c89d8909090ff15ce000000488b5c2410488b4424284883c438ff25c200000048b80100000000000000c348b80100000000000000c390909090|@5338,8191,@1458,@1459,@2044,@2015,@2057,@5339,@303,@1935,@2024,@5337,@1461,@1463,@1465,@1329,@331,@1124,@1454|127,0,95 187,0,0 248,0,@193 258,0,0 553,0,@5331 605,0,@5335 652,0,@5336 713,0,0 760,0,0 771,0,0 5331:O2|@5333,@5332 5332:O2|@5334,0 5333:S33|2920636f6e7461696e73206120667265652074797065207661726961626c652e0a 5334:S32|53657474696e6720697420746f206120756e69717565206d6f6e6f747970652e 5335:S13|5468652074797065206f662028 5336:C2,32|90909090909090483b65187303ff55484c8b7018488b42084c89f2ff22909090|@1525,8191| 5337:C2,232|505349504951495249be01000000000000004883fb0175054d89f5eb2e41f6c6017503ff55704d89f24983c20270f4488b5b084d89d6483b65187303ff5548ebd149bd01000000000000004d8d7fe04c3b7d107303ff554049c747f8030000004d89fa49c74210010000004c8b4c24104d894a084c8b04244d89024d8d7fe84c3b7d107303ff554049c747f8020000004c89fb4c89530848c703010000004d8d7fc84c3b7d107303ff554049c747f8060000004c89f84c8b7424084c897028488958204c8b5424184c8950184c8b4c24304c8948104c8968084c8b4424204c89004883c428c20800|@5341,6601|10,0,0 67,0,0 5338:S53|545950455f5452454528292e636865636b466f7246726565547970655661726961626c6573283329636865636b5479706573283229 5339:C3,376|90909090909090483b65187303ff5548a8017503ff55704883f8357c6ea8017503ff55704883f8017c0c49bd0300000000000000eb0a49bd01000000000000004983fd0375054989c4eb10a8017503ff55704989c44983ec3270f45048bb35000000000000004c89e048baf02d60000000000090ff12a8017503ff55704989c34983eb0270f44c89d8eb05e90b00000090e871ffffff4989c6eb0b49beb01e60000000000050495648bb3500000000000000488b44240848ba302e600000000000909090ff124883f8017502eb2ba8017503ff55704883f8017c0c49be0300000000000000eb0a49be01000000000000004983fe037402eb054989c6eb10a8017503ff55704989c64983c63470f441f6c6017503ff55704d89f54981c5c200000070f141f6c5017503ff55704983fd017d02eb1441f6c5017503ff55704981fdff0100007f02eb1848b8f048edacaa2a000090ff555849bc01000000000000004d89ec4c89e3488b04244883c410ff252c00000090909090|@5340,8191,@303|44,0,1 56,0,0 94,0,26 107,0,I109 157,0,I48 170,0,26 185,0,I110 221,0,1 233,0,0 330,0,@309 344,0,0 5340:S50|545950455f5452454528292e636865636b466f7246726565547970655661726961626c657328332967656e4e616d65283129 5341:S38|5354525543545f56414c5328292e6d616b6546726f7a656e54797065436f6e73747273283629 5342:C2,56|4989c64d8d7fe04c3b7d107303ff554049c747f8030000004c89f849bda88cf9acaa2a00004c89284c8b6a084c8968104c897008c3909090|@5345,6149|29,0,@5343 5343:C2,32|90909090909090483b65187303ff5548488b5a08488b5210ff22909090909090|@5344,8191| 5344:S56|545950455f5452454528292e636865636b466f7246726565547970655661726961626c6573283329636865636b5479706573283129283129 5345:S53|545950455f5452454528292e636865636b466f7246726565547970655661726961626c6573283329636865636b5479706573283129 5346:S64|535452554354555245535f28292e636865636b466f72467265655479706556617273283429636865636b537472756374283229636865636b456e747279283329 5347:S40|545950455f5452454528292e636865636b466f7246726565547970655661726961626c6573283329 5348:C2,40|90909090909090483b65187303ff55484c8b4010488b5808488b00488b5208ff2290909090909090|@5349,8191| 5349:S64|535452554354555245535f28292e636865636b466f72467265655479706556617273283429636865636b537472756374283229636865636b456e747279283129 5350:S51|535452554354555245535f28292e636865636b466f72467265655479706556617273283429636865636b537472756374283229 5351:C4,56|90909090909090483b65187303ff55484989d64c8b28488b40089090ff153e0000004d8b46084889c34c89e8ff2536000000909090909090|@5352,8191,@2277,@5329| 5352:S40|535452554354555245535f28292e636865636b466f72467265655479706556617273283429283129 5353:C4,168|90909090909090483b65187303ff55485248ff700848bb5d00000000000000488b009090ff15a60000004c8b2c244983fd0175545048b8150000000000000090ff15920000004d8d7fd84c3b7d107303ff554049c747f8040000004d89fc49c74424180100000049c74424100100000049bbb01e6000000000004d895c2408498904244d89e6eb054d8b7510504c8b6424104c89f3488b0424498b5424084883c418ff2290909090|@5352,8191,@303,@1852|23,0,46 55,0,10 114,0,I48 5354:C4,80|90909090909090483b65187303ff55485248ff700848bb1025f9acaa2a0000488b009090ff154e0000004989c6488b0424909090ff15460000004c8b6c24084889c34c89f0498b55084883c410ff2290|@5352,8191,@303,@2638|23,0,@5185 5355:S37|535452554354555245535f28292e636865636b466f72467265655479706556617273283429 5356:C5,640|90909090909090483b65187303ff55484d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fe49c706030000004d8d7fe84c3b7d107303ff554049c747f8020000004d89fd49bc5894f9acaa2a00004d8965004d8975084d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fc49c70424010000004d8d7fd04c3b7d107303ff554049c747f80500000049c647ff404d89fb49bae894f9acaa2a00004d891349c743080100000049c743100100000049c743180100000049c74320010000004d8d7fd04c3b7d107303ff554049c747f8050000004d89fa49b900bdfbacaa2a00004d890a4d896a2049895a184d895a104d8962084d8953084d8963104d89731849895b2049c643ff004d8d7fe84c3b7d107303ff554049c747f8020000004c89fb49bea0dffbacaa2a00004c89334c895b085050504989e14989d84889c348b840e0fbacaa2a00009090ff154a0100004d8d7fe84c3b7d107303ff554049c747f8020000004d89fd4c8b6424084d89650849c745001500000049554983fc01750c49bb0300000000000000eb314d8b14244d8b0a4983f9fb751a4d8b642408483b65187303ff5548ebd149bb010000000000000049bb01000000000000004983fb017431488b04249090ff15d20000004d8d7fe84c3b7d107303ff554049c747f8020000004d89f84989400849c700fbffffffeb044c8b04244d8d7fe84c3b7d107303ff554049c747f8020000004c89ff48c74708010000004c89074883ff017507488b742408eb1a57488b442410488d5424289090ff156e0000004889c64883c4084d8d7fe84c3b7d107303ff554049c747f8020000004c89f84889700848c700130000004883c420c390909090909090|@6166,8191,@5737,@4523,@6165|78,0,@5357 162,0,@5359 231,0,@6138 305,0,@6160 334,0,@6161 401,0,1 442,0,0 452,0,0 5357:C2,32|488b42084c8b3041f6c6017503ff55704d89f54983c50270f44c89284c89f0c3|@5358,6149| 5358:S40|535452554354555245535f28292e67656e636f6465537472756374732832296d6b41646472283129 5359:C9,720|90909090909090483b65187303ff55484c8b334983fe0f756d4d8d7fd04c3b7d107303ff554049c747f8050000004d89fd49bc2898f9acaa2a00004d8965004c8b62184d8965204c8b5a104d895d1849894510488b4208498945084d8d7fe84c3b7d107303ff554049c747f8020000004d89fa48bf809bf9acaa2a000049893a4d896a08eb05e9130000004c89c64d89d0488b5b084889f0ff255a0200004983fe05756e4d8d7fc84c3b7d107303ff554049c747f8060000004d89fd49bc709cf9acaa2a00004d896500498945284c8b5a204d895d204c8b52084d895518488b7a1849897d10488b7210498975084d8d7fe84c3b7d107303ff554049c747f8020000004c89f948b878a4f9acaa2a0000eb05e91a0000004889014c8969084d89c54989c8488b5b084c89e8ff25cf0100004983fe07756d4d8d7fe04c3b7d107303ff554049c747f8030000004d89fd49bc60a5f9acaa2a00004d89650049894510498955085050505250495148ff73084c8d4c24204d89c34d89e8488b5b104c89d89090ff157e0100004d8d7fe04c3b7d107303ff554049c747f8030000004d89faeb05e98900000049b938a6f9acaa2a00004d890a4c8b4424104d894210488b7c241849897a085050504989e14d89d0488b5c2418488b44244890ff152e010000488b1c244883fb017507488b742438eb16488b442438488d542450909090ff15120100004889c6488b542420488932488b4c240848894a08488b4424104889421048b801000000000000004883c450c34983fe0d756f4c8b6a104d8b650052495148ff73185048ff73104c8b52184d89e14c8b5b08488b5a204c89d89090ff15ba0000004c8b14244d8b0a48ff3048ff70084c89c8488d542428ff15a60000004c8b442418488b7c240849893849894008488b34244989701048b80100000000000000eb05e9050000004883c428c349c7010100000049c74108010000004d89411048b80100000000000000c390|@5736,8191,@5737,@5737,@5737,@5737,@5741,@5742,@5390|51,0,@5360 117,0,@5364 190,0,@5366 264,0,@5385 337,0,@5387 427,0,@5389 549,0,0 669,0,0 710,0,0 5360:C7,496|90909090909090483b65187303ff55484c8b72204d8b2e41f6c5017503ff55704d89ec4983c40270f44d89264c8b58204c8b60084c8b5010498b034989d19090ff15d20100004c89e74c89de4c89e990ff15ca0100004c8b3049890e4d8b69184d8b65004c8b58084d89234951534950495256514889fb498b411090ff15a601000048bb5d00000000000000ff159e0100004c8b5424084d8b0a4983f90175505048b8150000000000000090ff15860100004d8d7fd84c3b7d107303ff554049c747f8040000004c89ff48c747180100000048c747100100000048beb01e600000000000488977084889074989f8eb054d8b411050488b7c24304c8b4c24284c89c64c8b04244889f3488b442418488b57089090ff124d8d7fd84c3b7d107303ff554049c747f8040000004c89fb48c743180100000048894310488b5424084889530848c703f9ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89f948c74108010000004889194d8d7fd04c3b7d107303ff554049c747f8050000004c89f848c740200100000048c740180100000048c74010030000004889500848c700f7ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fe49c74608010000004989064c8b6c242049894d004d8975084c8b6424284d89651048b801000000000000004883c438c3|@5362,8191,@2253,@5361,@303,@303,@1852|132,0,46 163,0,10 220,0,I48 483,0,0 5361:C2,80|4c8b304983fe03752c4d8d7fe84c3b7d107303ff554049c747f8020000004d89fd4c8b60104d8965084c8b58084d895d004c89e8c348b8b0d7edacaa2a0000ff555848b8010000000000000090909090|@5363,7681|55,0,@970 68,0,0 5362:S65|535452554354555245535f28292e67656e636f646553747275637473283229636f646553747264656373283429636f646553747275637475726542696e64283329 5363:S24|5354525543545f56414c5328292e76614c6f63616c283129 5364:C2,96|90909090909090483b65187303ff55485050504989e0488b5808488b00488b5208909090ff124d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c8b34244c89304c8b6c24084c8968084c8b6424104c8960104883c418c390909090|@5365,8191| 5365:S65|535452554354555245535f28292e67656e636f646553747275637473283229636f646553747264656373283429636f646553747275637475726542696e64283129 5366:C10,712|90909090909090483b65187303ff55484c8b304d8b2e4983fd03756d4c8b62084d8b1c2441f6c3017503ff55704d89da4983c20270f44d8914244c8b5a104d8b1349c703030000004d8b4e10488b7808488b7018488b4828498b0152ff158e0200009090ff158e0200004c8b3049c706ffffffff4c8b2c244d8b65084d8b1c244c8b48084d8919eb05e923020000488b11534950574952524889f3498b452890ff155a020000488b4c24284c8b71205048bbb09ff9acaa2a0000498b464848bae8d7edacaa2a0000ff153a0200004883f801740c49bd58a1f9acaa2a0000eb0a49bd50a2f9acaa2a0000488b44240890ff151a02000049555048bb1025f9acaa2a0000488b442410ff150a0200004c8b6c24404c8b4c24384989c0488b1c24488b442428498b5518ff124c8b6424404d8b5c24084d8b134989c14d8d7fd84c3b7d107303ff554049c747f8040000004c89f84c8b4424104c89401848c74010030000004c8950084c8908488b54240890ff12488b7c2440488b7708488b1ef6c3017503ff55704889da4883ea0270f4488916488b4c2420f6c1017503ff55704989ce4983c60270f44c8b6f104d8975004989c4488b442418ff15620100004d89e2909090ff155e0100004c8b084989094c8b06488b58084c89034d8d7fd84c3b7d107303ff554049c747f8040000004c89fa48c74218010000004c89521048894a0848c702f9ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fe49c74608010000004989164d8d7fd04c3b7d107303ff554049c747f8050000004d89fd49c745200100000049c745180100000049c745100300000049894d0849c74500f7ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fc49c7442408010000004d892c244c8b5c24304d89334d8963084c8b5424384d89531048b801000000000000004883c448c348b840a3f9acaa2a0000ff555848b80100000000000000|@5383,8191,@2253,@5361,@303,@974,@2638,@303,@5382,@5361|178,0,@5367 192,0,@972 214,0,@5374 226,0,@5377 251,0,@5185 676,0,0 691,0,@5380 704,0,0 5367:O3|@5369,@5371,@5368 5368:O2|@5373,@7440 5369:O2|@5370,@7440 5370:C2,48|4c8b304c8b6a084d3bf5751648b80300000000000000c348b80100000000000000c348b80100000000000000c3909090|@966,6149|14,0,1 25,0,0 36,0,0 5371:O2|@5372,@7440 5372:C2,48|4989c64d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c89701048c740088b0000004c8b72084c8930c390|@966,4101| 5373:C2,56|4c8b304c8b6a084d3bf57510488b4010c348b80100000000000000c348b8b0d7edacaa2a000090ff555848b8010000000000000090909090|@966,6149|19,0,0 30,0,@970 44,0,0 5374:O1|@5375 5375:C2,128|4d8d7fb84c3b7d107303ff554049c747f8080000004d89fe49c746380100000049c746300100000049c74628030000004c8b68104d896e2049c74618010000004c8b60084d8966104c8b58184d895e084c8b104d89164d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89700848c700f3ffffffc3909090909090|@5376,7937| 5376:S25|434f44455452454528292e6d6b4d6163726f50726f63283129 5377:O1|@5378 5378:C2,128|4d8d7fb84c3b7d107303ff554049c747f8080000004d89fe49c746380100000049c746300100000049c74628ffffffff4c8b68104d896e2049c74618010000004c8b60084d8966104c8b58184d895e084c8b104d89164d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89700848c700f3ffffffc3909090909090|@5379,7937| 5379:S20|434f44455452454528292e6d6b50726f63283129 5380:O3|@7377,@215,@5381 5381:S34|636f646546756e63746f7242696e643a206e6f7420612046756e63746f7242696e64 5382:C2,40|4883f801751a48b8b0d7edacaa2a0000909090ff555848b80100000000000000488b4010c3909090|@5384,1|8,0,@970 24,0,0 5383:S63|535452554354555245535f28292e67656e636f646553747275637473283229636f646553747264656373283429636f646546756e63746f7242696e64283329 5384:S30|5354525543545f56414c5328292e66756e63746f72416363657373283129 5385:C2,96|90909090909090483b65187303ff55485050504989e0488b5808488b00488b5208909090ff124d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c8b34244c89304c8b6c24084c8968084c8b6424104c8960104883c418c390909090|@5386,8191| 5386:S63|535452554354555245535f28292e67656e636f646553747275637473283229636f646553747264656373283429636f646546756e63746f7242696e64283129 5387:C2,96|90909090909090483b65187303ff55485050504989e14c8b4008488b18488b4210488b5208909090ff124d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c8b34244c89304c8b6c24084c8968084c8b6424104c8960104883c418c3|@5388,8191| 5388:S47|535452554354555245535f28292e67656e636f6465537472756374732832296d617053747264656373283329283129 5389:C2,96|90909090909090483b65187303ff55485050504989e14c8b4008488b18488b4210488b5208909090ff124d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c8b34244c89304c8b6c24084c8968084c8b6424104c8960104883c418c3|@5388,8191| 5390:C3,320|90909090909090483b65187303ff55484883f801750b48b80100000000000000c34c8b304d8b264983fcfd756d4d8d7fd84c3b7d107303ff554049c747f8040000004d89fb4d8b56204d8953184d8b4e184d894b104d8b46104d894308498b7e0849893b488b72f8488b5e10488b0b5248ff700849ba010000000000000049b950a8f9acaa2a000049b878a6edacaa2a00004889cb4c89d8eb05e93100000048ba28a9f9acaa2a0000909090ff15b60000004d8d7ff04c3b7d107303ff554049c747f8010000004d89fd49894500eb0f49bd01000000000000005248ff700849f7c501000000754149ff7500488b442408488b542410909090e809ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fb498943084c8b14244d89134c89d84883c418c3488b0424488b5424084883c410e9ccfeffff9090909090|@6137,8191,@5397|24,0,0 118,0,0 128,0,@5391 138,0,@617 161,0,@5395 210,0,0 5391:O10|@7477,@7478,@7479,@7480,@991,@5392,@7481,@7476,@980,0 5392:O1|@5393 5393:C2,16|48b80100000000000000c39090909090|@5394,1|2,0,0 5394:S18|4c45585f28292e6e756c6c4c65782d283129 5395:O4|@5397,@5582,@5584,@5396 5396:O2|@5586,@5395 5397:C47,2672|90909090909090483b65187303ff55484989d54989c4498b44241090ff15760a00004883f801740f498b442410909090ff156a0a0000c3498b542410488b024883f80375704c8b72084d8b2e4c8b52104d8b0a4989d84d23c141f6c0017503ff55704989d84d2bc14d8d400170f150505050504983fd01754e41f6c0017503ff55704c89c34883eb0270f44989e549c74500f7ffffff4989e149c74108010000004989e049c74010010000004989e549895d18eb05e9830000004989e149c7412001000000eb2e4889e348c703f7ffffff4989e14d8969084889e348c74310030000004989e54d8945184989e149c74120010000004d8d7fd04c3b7d107303ff554049c747f8050000004c89f84c8b04244c8900488b5c2408488958084c8b6c24104c8968104c8b4c24184c8948184c8b4424204c8940204883c428c34889d0ff15620900004883f8017464498b442410909090ff15560900004c8b304c8b68084c89e8ff154e0900004883f801740c49bc380dedacaa2a0000eb174c89e890ff153a0900004956ff153a0900004989c4eb0249564d8b1c244983fb0b75164c89e3488b04244883c408ff2520090000e9470000004983fbfb75114c89e3488b04244883c408ff250c0900004d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c8b14244c8950104c89600848c7000d0000004883c408c34d8b7424104d8b1e4983fb01751a48b878b5f9acaa2a0000909090ff555848b801000000000000004c89f090ff15b208000050504889c74889f89090ff15aa0800004883f801746f4c89c090ff15a20800004883f80174104c89ee4c89c09090ff1596080000eb0c48be78a6edacaa2a0000eb414c89c090ff15860800004883f801740f4c89c090ff157e0800004889c3eb1948b8b0d7edacaa2a00009090ff555848bb01000000000000004889f2488b334989d5eb05e950010000495549515648bbb8b5f9acaa2a0000498b414848bae8d7edacaa2a0000909090ff1532080000488b4c24085048bb60b7f9acaa2a0000488b414848bae8d7edacaa2a0000ff15160800004c8b7424184c8b6c24105049ff76104d8b65484983fc01750c49bb0100000000000000eb6049ff342449ff742408488b442408488b5424109090ff124883f80174224d8d7ff04c3b7d107303ff554049c747f8010000004d89fb4c8b5424084d8913eb1d4c8b24244883c410483b65187303ff5548eb9c49bb01000000000000004883c41049f7c30100000075134c8b442428498b03498b5008ff124989c1eb0a49b908b9f9acaa2a00004d8d7fd04c3b7d107303ff554049c747f8050000004d89f848bf00c0f9acaa2a0000498938488b74241849897020488b5c241049895818488b542408498950104d894808488d4c243048c701fbffffff488d4424304c894008eb5c4889f890ff150e0700004883f801745d4c89c090ff15060700004883f801745e4c89c090ff15fe060000488b184889d8ff15fa0600004883f80174364889d890ff15f2060000488b500848f7c201000000750e488b0a488b7108eb2ce9d705000048be78a6edacaa2a0000eb1be95200000048be78a6edacaa2a0000eb0a48be78a6edacaa2a00004d8d7fe84c3b7d107303ff554049c747f8020000004c89fb48ba30f1f9acaa2a0000488913488973084889e148c701fbffffff4889e048895808eb5b4889f890ff15720600004883f801746d4c89c090ff156a0600004883f80174104c89ee4c89c09090ff155e060000eb0c48be78a6edacaa2a0000eb4c4c89c090ff154e0600004883f80174144c89c090ff15460600004889c3eb1de90e05000048b8b0d7edacaa2a000090ff555848bb01000000000000004889f2eb05e9f7000000488b334989d549555649ff7510498b49484883f901750c48b80100000000000000eb5e48ff3148ff7108488b442408488b5424109090ff124883f80174224d8d7ff04c3b7d107303ff554049c747f8010000004c89f84c8b7424084c8930eb1d488b0c244883c410483b65187303ff5548eb9e48b801000000000000004883c41048f7c00100000075174c8b642410488b00498b542408909090ff124989c5eb0a49bd08b9f9acaa2a00004d8d7fe04c3b7d107303ff554049c747f8030000004d89fc49bb30f2f9acaa2a00004d891c244c8b5424084d895424104d896c24084c8d4c241849c701fbffffff4c8d4424184d896008eb5b4889f8ff15220500004883f801745d4c89c090ff151a0500004883f801745e4c89c090ff1512050000488b184889d8ff150e0500004883f80174364889d890ff1506050000488b500848f7c201000000750e488b0a488b7108eb2ce99103000048be78a6edacaa2a0000eb1be95200000048be78a6edacaa2a0000eb0a48be78a6edacaa2a00004d8d7fe84c3b7d107303ff554049c747f8020000004c89fb48bae0f7f9acaa2a0000488913488973084889e148c701fbffffff4889e048895808eb704889f890ff15860400004883f801746550504c89c0909090ff157a0400004883f80174564c89c090ff1572040000488b304889f0ff156e0400004883f80174724889f090ff1566040000488b58084889d8909090ff155e0400004883f80174574889d890ff1556040000488b4808eb0fe9b6020000e918020000e9a20100004889c89090ff153e0400004883f80174644889c890ff15360400004c8b284c8b60084c89e0ff152e0400004883f8017457eb0ae939010000e9080100004d89eb4c89e09090ff151604000049534c8b104d8b024983f807753e498b5a10498b4208ff1502040000488b384883ffff750a4d89d1eb25e9a60000004989c2483b65187303ff5548ebc8e96e00000049b901000000000000004d89d14951488b7c2408488b1f4883fb077537488b5f10488b4708909090ff15b6030000488b104883faff75054889feeb1b4889c7483b65187303ff5548ebca48be01000000000000004889fe488d542410488b0c2448890a488d44241048897008eb6d4989e349ba78a6edacaa2a00004d89134989e149b878a6edacaa2a00004d8941085050eb704889e049be78a6edacaa2a00004c89304989e549bc78a6edacaa2a00004d8965085050eb584889e248b978a6edacaa2a000048890a4889e049be78a6edacaa2a00004c897008eb05e9580000005050eb544889e348ba78a6edacaa2a00004889134889e148b878a6edacaa2a0000eb05e930000000488941085050eb28e9230000004889e648bb78a6edacaa2a000048891e4889e248b978a6edacaa2a000048894a0850504d8d7fe04c3b7d107303ff554049c747f8030000004c89f849be88fbf9acaa2a00004c89304c8b6c24184c8968104c8b6424104c8960084c8d5c242049c703fbffffff4c8d54242049894208eb7449524d89ca4d89c14989d848bbd08cedacaa2a00004c89e0498b55189090ff124d8d7fb84c3b7d107303ff554049c747f8080000004c89fe48c746380100000048c746300100000048c74628ffffffff48c746200300000048c746180100000048c746100300000048bbb01e600000000000eb05e91c00000048895e084889064889e248c702f3ffffff4889e148897108505050504883c4205050504883c4185050505050504d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b7424304c89304c8b6c24384c8968084883c440c39090|@5566,8191,@2280,@2267,@5567,@5568,@2631,@2253,@5569,@4802,@4802,@2404,@5573,@2084,@2085,@2084,@2085,@974,@974,@5575,@2084,@2085,@2046,@2047,@5577,@2084,@2085,@2084,@2085,@5579,@2084,@2085,@2046,@2047,@5565,@2084,@2085,@2084,@2085,@2084,@2085,@2084,@2085,@2084,@2085,@2044,@2044|370,0,@217 524,0,@5398 540,0,0 614,0,@617 657,0,@970 672,0,0 703,0,@5400 717,0,@972 742,0,@5407 756,0,@972 797,0,0 891,0,0 933,0,@5414 967,0,@5452 1131,0,@617 1148,0,@617 1160,0,@617 1194,0,@5506 1278,0,@617 1326,0,@970 1340,0,0 1383,0,0 1475,0,0 1521,0,@5414 1555,0,@5507 1703,0,@617 1720,0,@617 1732,0,@617 1766,0,@5524 2070,0,0 2144,0,0 2183,0,@617 2199,0,@617 2220,0,@617 2236,0,@617 2257,0,@617 2273,0,@617 2301,0,@617 2317,0,@617 2350,0,@617 2366,0,@617 2406,0,@5530 2471,0,@441 2564,0,I48 5398:O3|@7377,@215,@5399 5399:S16|636f646556616c202d20466f726d616c 5400:O3|@5402,@5404,@5401 5401:O2|@5406,@7450 5402:O2|@5403,@7450 5403:C2,48|4c8b304c8b6a084d3bf5751648b80300000000000000c348b80100000000000000c348b80100000000000000c3909090|@966,6149|14,0,1 25,0,0 36,0,0 5404:O2|@5405,@7450 5405:C2,48|4989c64d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c89701048c740088b0000004c8b72084c8930c390|@966,4101| 5406:C2,56|4c8b304c8b6a084d3bf57510488b4010c348b80100000000000000c348b8b0d7edacaa2a000090ff555848b8010000000000000090909090|@966,6149|19,0,0 30,0,@970 44,0,0 5407:O3|@5409,@5411,@5408 5408:O2|@5413,@7454 5409:O2|@5410,@7454 5410:C2,48|4c8b304c8b6a084d3bf5751648b80300000000000000c348b80100000000000000c348b80100000000000000c3909090|@966,6149|14,0,1 25,0,0 36,0,0 5411:O2|@5412,@7454 5412:C2,48|4989c64d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c89701048c740088b0000004c8b72084c8930c390|@966,4101| 5413:C2,56|4c8b304c8b6a084d3bf57510488b4010c348b80100000000000000c348b8b0d7edacaa2a000090ff555848b8010000000000000090909090|@966,6149|19,0,0 30,0,@970 44,0,0 5414:O18|@5416,@5419,@5421,@5423,@5425,@5427,@5429,@5431,@5433,@5435,@5437,@5439,@5441,@5443,@5445,@5447,@5449,@5415 5415:O1|@5451 5416:O1|@5417 5417:C2,16|48b80100000000000000c39090909090|@5418,1|2,0,0 5418:S31|56414c55455f4f505328292e6e756c6c456e7669726f6e6d656e742d283129 5419:O1|@5420 5420:C2,16|48b80100000000000000c39090909090|@5418,1|2,0,0 5421:O1|@5422 5422:C2,16|48b80100000000000000c39090909090|@5418,1|2,0,0 5423:O1|@5424 5424:C2,16|48b80100000000000000c39090909090|@5418,1|2,0,0 5425:O1|@5426 5426:C2,16|48b80100000000000000c39090909090|@5418,1|2,0,0 5427:O1|@5428 5428:C2,16|48b80100000000000000c39090909090|@5418,1|2,0,0 5429:O1|@5430 5430:C2,16|48b80100000000000000c39090909090|@5418,1|2,0,0 5431:O1|@5432 5432:C2,16|48b80100000000000000c39090909090|@5418,1|2,0,0 5433:O1|@5434 5434:C2,16|48b80100000000000000c39090909090|@5418,1|2,0,0 5435:O1|@5436 5436:C2,16|48b80100000000000000c39090909090|@5418,1|2,0,0 5437:O1|@5438 5438:C2,16|48b80100000000000000c39090909090|@5418,1|2,0,0 5439:O1|@5440 5440:C2,16|48b80100000000000000c39090909090|@5418,1|2,0,0 5441:O1|@5442 5442:C2,16|48b80100000000000000c39090909090|@5418,1|2,0,0 5443:O1|@5444 5444:C2,16|48b80100000000000000c39090909090|@5418,1|2,0,0 5445:O1|@5446 5446:C2,16|48b80100000000000000c39090909090|@5418,1|2,0,0 5447:O1|@5448 5448:C2,16|48b80100000000000000c39090909090|@5418,1|2,0,0 5449:O1|@5450 5450:C2,16|48b80100000000000000c39090909090|@5418,1|2,0,0 5451:C2,16|48b80100000000000000c39090909090|@5418,1|2,0,0 5452:C4,208|90909090909090483b65187303ff5548525048ff722048b80100000000000000488b5218ff124c8b74241050505050505050504c8d442408498b5e1048b89b000000000000009090ff15aa0000004d8d7fc04c3b7d107303ff554049c747f8070000004d89fd4c8b6424084d8965004c8b5c24104d895d084c8b5424184d8955104c8b4c24204d894d184c8b4424284d894520488b7c243049897d28488b74243849897530488b5c24504c8b53084d89e94c8b0424488b5c2440488b44244890ff153a000000488b4424484883c458c3|@5504,8191,@359,@5453|24,0,0 62,0,77 5453:C2,192|90909090909090483b65187303ff55484d8d7fe84c3b7d107303ff554049c747f8020000004d89fe49bd10c2f9acaa2a00004d892e4d8956084d8d7fe84c3b7d107303ff554049c747f8020000004d89fd49bc10cef9acaa2a00004d8965004d894d084d8d7fd04c3b7d107303ff554049c747f8050000004d89fc49bb40d1f9acaa2a00004d891c244d8b5a504d895c24204d896c24184d897424104d894c240849ba010000000000000049b9ffffffffffffffff4c89e2ff22909090909090|@5505,8191|42,0,@5454 83,0,@5471 125,0,@5473 163,0,0 173,0,-1 5454:C3,280|90909090909090483b65187303ff55484c8b7208525048b80100000000000000498b5610ff124c8b6c24084d8b65085048b80100000000000000498b54244090ff125049bb01000000000000004c8b5424084983fa0175054d89d9eb424d8b024d8d7fe84c3b7d107303ff554049c747f8020000004c89ff4c895f08498b70084889374d8b52084989fb483b65187303ff5548ebbd49b90100000000000000495149b80100000000000000488b7c24084883ff0175054c89c6eb42488b1f4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa4c894208488b4b0848890a488b7f084989d0483b65187303ff5548ebbd48be01000000000000004989f0488b1c24488b4424184883c428ff252d0000009090909090|@5456,8191,@5455|24,0,0 50,0,0 69,0,0 151,0,0 163,0,0 245,0,0 5455:C10,416|90909090909090483b65187303ff55485049504883fb01750c49be0100000000000000eb424c8b4308488b1348bb01000000000000004889d0488d5424109090ff15820100004883f80175184c89c3483b65187303ff5548ebb949be01000000000000004989c649f7c60100000075084c89f04883c410c3488b0c244883f901750f48b801000000000000004883c410c3488b01ff15360100004989c54c89e8ff15320100004883f80174684c89e890ff152a0100004c8b194983fb01755a48ff71085048b815000000000000009090ff15120100004d8d7fd84c3b7d107303ff554049c747f8040000004d89fa49c742180100000049c742100100000049b9b01e6000000000004d894a084989024c89d0eb12e93e0000004989c2498b431048ff710849529090ff15c20000004989c1488b0424909090ff15ba0000004889c34c89c8488d542420909090ff15ae0000004989c4eb0f49bc010000000000000048ff7108504983fc017526488b4c24084883c410483b65187303ff5548e9f9feffff48b801000000000000004883c420c34c89e04883c420c3909090909090|@5461,8191,@5462,@2253,@2280,@2267,@1852,@2206,@5463,@5457|27,0,0 46,0,0 92,0,0 132,0,0 198,0,10 256,0,I48 345,0,0 389,0,0 5456:S44|56414c55455f4f505328292e7072696e74537472756374283529657863657074696f6e536561726368283129 5457:C4,136|90909090909090483b65187303ff554852539090ff159600000048ba90c6f9acaa2a0000ff124883f801750f48b801000000000000004883c410c34c8b3048ff7008498b5e08498b06488d5424189090ff15620000004883f8017522488b04244883c408483b65187303ff5548ebb748b801000000000000004883c418c34883c418c39090909090|@5469,8191,@2297,@5468|28,0,@5458 46,0,0 113,0,0 5458:O1|@5459 5459:C2,136|90909090909090483b65187303ff55484c8b70104983fe01745f504c8b680848b801000000000000004c89eaff124c8b24245048b80100000000000000498b1424909090ff12909090e8b9ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fb498943084c8b14244d89134c89d84883c410c348b80100000000000000c390909090|@5460,8191|33,0,0 53,0,0 123,0,0 5460:S16|4d6973632e697465724c697374283129 5461:S28|56414c55455f4f505328292e66696e64457863657074696f6e283329 5462:C5,312|90909090909090483b65187303ff55484c8b70084983fe0175594989d54989c4498b442410909090ff15320100004883f801744f498b442410909090ff15260100004c89eb4c89e1ff15220100004c8b73f8493bc675214d8d7ff04c3b7d107303ff554049c747f8010000004c89f8488908c3e9af00000048b80100000000000000c34d8b5c2410498b134883fa01757448f7c301000000741a48b8b055edacaa2a0000909090ff555848b901000000000000004889d9498b430848f7c00100000074054989c6eb1748b86055edacaa2a0000ff555849be01000000000000004a8b5cb1fc498b4df8483bd975234d8d7ff04c3b7d107303ff554049c747f801000000eb05e9120000004c89f84c8920c348b80100000000000000c348b80100000000000000c348b80100000000000000c3909090909090|@5466,7695,@2280,@2267,@5463|122,0,0 156,0,@339 172,0,0 203,0,@336 216,0,0 275,0,0 286,0,0 297,0,0 5463:C2,104|90909090909090483b65187303ff55484c8b304983fefb7505488b4008c34983fe0b752a4c8b68084d8b65004983fcff750a4d8b5d08498b4310ebcb4983fc037506498b4510ebbf498b4508ebb948b8d8c9f9acaa2a0000909090ff555848b80100000000000000|@5467,7681|80,0,@5464 96,0,0 5464:O3|@7377,@215,@5465 5465:S22|6576616c75653a204e6f74206120636f6e7374616e74 5466:S40|56414c55455f4f505328292e66696e64457863657074696f6e2833297465737456616c7565283229 5467:S20|434f44455452454528292e6576616c7565283129 5468:C17,600|90909090909090483b65187303ff55484989d44889d848ba28b5f0acaa2a0000ff155a0200004883f80174264889d848ba10b5f0acaa2a0000909090ff1546020000498b5c24f0498b5424f8ff253e0200004889d848ba10b3f0acaa2a000090ff15320200004883f80174714889d848baf8b2f0acaa2a0000909090ff151e0200004989c34c89d8ff151a0200004889c34889d8ff15160200004883f801746b4889d890ff150e0200004983fb01756049545048b81500000000000000909090ff15fa0100004d8d7fd84c3b7d107303ff554049c747f804000000eb05e9660100004c89fa48c742180100000048c742100100000048b9b01e60000000000048894a084889024889d0eb0fe93b0000004889c2498b43104954529090ff15a60100004889c1488b0424909090ff159e0100004889c34889c84c8b742408498b56f84883c410ff258d010000488b134883fa01755c4983fb01755b495448ff730848b815000000000000009090ff156e0100004d8d7fd84c3b7d107303ff554049c747f8040000004c89f948c741180100000048c741100100000049beb01e6000000000004c8971084889014889c8eb0fe988000000498b4310495448ff730890ff1522010000488b4c24084c8b71f049f7c601000000741c4989c448b8b055edacaa2a00009090ff555849bd01000000000000004d89f54c8b242449f7c40100000074054d89e3eb1e4989c348b86055edacaa2a000090ff55584d89da49bb01000000000000004f8b549dfc4c89d3488b51f84883c410ff25b300000048b80100000000000000c348b80100000000000000c39090909090|@5470,8191,@2198,@2201,@5462,@2190,@2193,@2253,@2280,@2267,@1852,@2206,@5463,@5457,@1852,@2206,@5457|24,0,@2197 49,0,@2196 87,0,@2189 113,0,@2188 181,0,10 247,0,I48 354,0,10 412,0,I48 477,0,@339 492,0,0 526,0,@336 543,0,0 575,0,0 586,0,0 5469:S42|56414c55455f4f505328292e66696e64457863657074696f6e2833297365617263685370616365283229 5470:S53|56414c55455f4f505328292e66696e64457863657074696f6e283329736561726368537061636528322966696e644974656d283229 5471:C2,704|90909090909090483b65187303ff55484983f901750d48b80100000000000000c218004d8b71084983fe0175714883fb0175464989c54d8d7fd84c3b7d107303ff554049c747f8040000004c89f84c8b6424104c8960184c8b5c24084c8958104d8b114c8950084c89004c89ea4c8b04244883c4204950ff2249f7c001000000741a4989c448b8b055edacaa2a0000ff555849bd0100000000000000eb05e97a0000004d89c548f7c30100000074054989dceb1f4989c448b86055edacaa2a00009090ff55584d89e349bc01000000000000004f8b5ca5fc4989c24d8d7fd84c3b7d107303ff554049c747f8040000004c89f84c8b4424104c894018488b7c240848897810498b31488970084c89184c89d2488b1c244883c42053ff224c8b6c240841f6c5017503ff55704983fd017f1f4c8b620848b8d85deeacaa2a0000498b5424184c8b1c244883c4204953ff2249f7c001000000741b4989c348b8b055edacaa2a000090ff555849bc01000000000000004d89c448f7c30100000074054989dbeb1e4989c348b86055edacaa2a000090ff55584c89df49bb01000000000000004b8b7c9cfc4889c64d8d7fd84c3b7d107303ff554049c747f8040000004c89f8488b4c2418488948184c8968104d8b214c8960084889385256534950495249564889f29090ff1248bb5900000000000000488b44240848bab01860000000000090ff124883f801751a4c8b5c24284d8b530848b8b027edacaa2a0000498b129090ff124c8b5c24284d8b5308488b442408498b5218ff124c8b4c24284d8b410848b8b027edacaa2a0000498b10ff12488b7c241840f6c7017503ff55704889fe4883c60270f4488b5c2438f6c3017503ff55704889da4883ea0270f4488b4c2448488b44244048894c2448488944244048895424384c8b5424084c8b0c244c8b4424104889f3488b442420488b5424284883c430e94bfdffff90909090|@5472,8191|24,0,0 135,0,@339 148,0,0 185,0,@336 203,0,0 311,0,@1319 350,0,@339 364,0,0 394,0,@336 411,0,0 492,0,44 507,0,I24 535,0,@257 581,0,@257 5472:S33|56414c55455f4f505328292e7072696e7453747275637428352970566563283829 5473:C34,2320|90909090909090483b65187303ff55485249514950495250534983fa01750c49be0100000000000000eb324c8b4c24084d8b024d3bc8750c49be0300000000000000eb194d8b5208483b65187303ff5548ebc649be01000000000000004983fe01741d488b5c2428488b530848b8d85deeacaa2a0000488b52184883c430ff22488b3c24488b374883fe07755c488b5f10488b4708909090ff159a080000488b184883fbff751d488b542428488b4a0848b87f00000000000000488b51184883c430ff224c8b5424104c8b4c24204c8b4424184889c3488b442408488b5424284883c430e91effffff4889f8ff154e0800004883f80174704889f890ff1546080000488b18488b4010909090ff153e0800004889c14889c8ff153a0800009090ff153a0800004883f801741d488b4424284c8b700848b87f00000000000000498b56184883c430ff224889c8ff15160800004989c648b8e0a2edacaa2a000090ff150a080000eb05e9ef0400004989da4989c94889c34c89f0909090ff15f60700004883f801741d4c8b442428498b580848b8908af0acaa2a0000488b53184883c430ff224c89c8ff15d20700004989c048b82898edacaa2a000090ff15c60700004889c34c89c0ff15c20700004883f8017475488b5c240848f7c301000000741a48b8b055edacaa2a0000909090ff555848ba01000000000000004889da488b4a08488b44242848f7c301000000741b4c8b681048b8b055edacaa2a0000ff555849be01000000000000004989de4c8b6810498b06514c89ea9090ff1248f7c0010000007570eb05e9c1000000488b00909090ff153e0700004c8b204983fcff75174c8b5c24304d8b5308488b0424498b52184883c438ff224c8b5c241049f7c301000000741c4989c148b8b055edacaa2a00009090ff555849ba01000000000000004d89da4d8b4a104d8d7fe84c3b7d10730aeb05e93b000000ff554049c747f8020000004d89f8488b7c2418498978084d89184c89ce4d89c14989f04889c3488b0424488d54243890ff15ae0600004883c438c34c8b6424304d8b5c2408488b0424498b53184883c438ff224983fa01750c48bbd095edacaa2a0000eb6f498b52084883fa01756a4d8d7fd04c3b7d107303ff554049c747f8050000004c89f948b888dbf9acaa2a00004889014d8b324c8971204c8b6c24084c8969184c8b6424104c8961104c8b5c24284c8959084d8d7fe84c3b7d107303ff554049c747f8020000004c89fb48894b08eb0ae9da000000e90900000048c703fbffffffeb6b4c89d14d89c84889c8488d542430909090ff15ee0500004d8d7fe84c3b7d107303ff554049c747f8020000004c89fb4889430848c70315000000514950534883f801750c48ba0300000000000000eb34488b084c8b314983fefb751e488b4008483b65187303ff5548ebd3e95600000048ba010000000000000048ba01000000000000004883fa017432488b0424909090ff15760500004d8d7fe84c3b7d107303ff554049c747f8020000004c89fb4889430848c703fbffffffeb04488b1c244883c408eb0a49524951eb044952495148ff750848ba9ad6f9acaa2a0000526a1748896508488b442418909090ff152205000048b958f36cadaa2a00004c8b3153504983fe01751948b860d6ecacaa2a00009090ff555849bd01000000000000004d8b264d8b5424084d8b4e08488b1c24498b0424ff15e20400004883f80174054d89d5eb184d89ce483b65187303ff5548ebae49bd01000000000000004c8b442460498b40084c89ea909090ff124889c7488b4424504889fa909090ff124889c6488b4424089090ff15960400004889f2909090ff124889c3488b4424404889da909090ff1248ff742420488f45084883c468c39090488b104883fa1775714889c1488b04249090ff155e0400004883f8017423488b0424ff155604000051488b5c2410488d542448909090ff154a0400004883c448c3488b042490ff15420400004c8b304983feff7470488b042490ff15360400004989c5488b0424909090ff152e0400004d89ea488b5c2408eb05e976000000909090ff151e0400005149b803000000000000004889c34c89d090ff150e0400004c8b5424284c8b4c24384c8b4424304889c3488b442420488b5424404883c448e9e8f9ffff4c8b6c24384d8b650848b87f00000000000000498b5424184883c440ff224889c148b801000000000000004883c440c3ff555848b801000000000000004889f890ff15aa0300004883f80174274889f890ff15a2030000488b5c2428488b530848b8a837eeacaa2a0000488b52184883c430ff224889f89090ff15820300004883f80174714889f890ff157a030000488b5c2418f6c3017503ff55704883fb017f1d488b542428488b4a0848b8d85deeacaa2a0000488b51184883c430ff2248ff70084889f8909090ff15420300004883f8017470488b542430488b4a0848b82828f0acaa2a0000488b513090ff12488b442430eb05e9d80100004c8b700848b85100000000000000498b5618ff124d8d7fe04c3b7d107303ff554049c747f8030000004d89fd49bc60dcf9acaa2a00004d8965004c8b5c24184d895d104c8b542430eb05e9760000004d8955086aff6aff48ff7424304d8b4a1849ba59000000000000004d89c84c8b4c24184c89c74c8b44242848bb01000000000000004c89e84889faff12488b742430488b5e0848b85300000000000000488b5318909090ff12488b542430488b4a0848b80100000000000000488b51104883c438ff22488b542430488b4a0848b82828f0acaa2a0000488b51309090ff12488b4424304c8b700848b8f700000000000000498b5618909090ff124c8b6c24304d8d7fd84c3b7d107303ff554049c747f8040000004d89fc49bb00ddf9acaa2a00004d891c244c8b5424184d895424184d896c24104d8b4d084d894c24084d8d7fe84c3b7d107303ff554049c747f8020000004d89f848bf48def9acaa2a00004989384d8960086aff6aff48ff74243049ba59000000000000004c8b4c24184c89c64c8b44242848bb01000000000000004889f0498b551890ff12488b5c2430488b530848b8fb00000000000000488b5218909090ff12488b4c2430488b41084c8b701048b801000000000000004c89f24883c438ff22488b5c2428488b530848b8a8def9acaa2a0000488b52184883c430ff2290|@5483,8191,@2044,@2062,@2063,@2064,@1461,@1463,@1461,@1461,@2272,@1461,@1461,@2272,@2277,@5484,@5497,@4523,@1461,@2272,@5463,@2265,@2265,@5499,@2226,@2226,@2239,@2463,@2465,@2084,@2085,@2046,@2047,@5482|33,0,0 58,0,1 85,0,0 110,0,@1319 178,0,63 311,0,63 343,0,@587 403,0,@2113 435,0,@499 484,0,@339 500,0,0 535,0,@339 548,0,0 653,0,@339 668,0,0 791,0,@478 837,0,@5474 1001,0,1 1045,0,0 1055,0,0 1145,0,$5473+1370 1176,0,@7482 1197,0,@49 1212,0,0 1273,0,0 1509,0,1 1578,0,63 1602,0,0 1620,0,0 1665,0,@1210 1740,0,@1319 1791,0,@1992 1824,0,40 1864,0,@5476 1916,0,44 1942,0,0 1969,0,41 1997,0,0 2026,0,@1992 2053,0,123 2101,0,@5478 2163,0,@5480 2189,0,44 2212,0,0 2241,0,125 2273,0,0 2301,0,@5481 5474:C2,88|90909090909090483b65187303ff55484d8d7fe84c3b7d107303ff554049c747f8020000004d89fe4c8b6a104d896e084c8b62184d89264d89f249b9ffffffffffffffff4c8b4008488b5a20488b00488b5208ff22909090|@5475,8191|60,0,-1 5475:S56|56414c55455f4f505328292e7072696e745374727563742835297072696e74732835296d616b654172672831297072696e74417267283129 5476:C2,48|90909090909090483b65187303ff55484c8b70084c8b52104c8b48184c8b4010498b5e08488b00488b5208ff22909090|@5477,8191| 5477:S38|56414c55455f4f505328292e7072696e745374727563742835297072696e7473283529283129 5478:C3,208|90909090909090483b65187303ff55484c8b72085250495048ff3348ff730848b8103dedacaa2a0000498b5630909090ff124c8b6c24204d8b650849ff74241848bbd021f0acaa2a0000488b44241090ff15a2000000488b14249090ff124c8b5c24284d8b530848b8b027edacaa2a0000498b12ff124c8b4c241841f6c1017503ff55704d89c84983e80270f4488b7c24284c8b571849b9ffffffffffffffff488b5c2408488b442420488b57109090ff12488b742428488b5e0848b80100000000000000488b53104883c430ff2290|@5479,8191,@303|33,0,@268 66,0,@1980 105,0,@257 152,0,-1 189,0,0 5479:S38|56414c55455f4f505328292e7072696e745374727563742835297072696e7473283529283429 5480:C2,40|90909090909090483b65187303ff55484c8b48184c8b4010488b5808488b00488b5208ff22909090|@5477,8191| 5481:S7|3c656d7074793e 5482:C5,256|90909090909090483b65187303ff55484989c54c89e89090ff150a0100004883f801746e4c89e890ff15020100004c8b204983fc03756048ba03000000000000004c8b70084983fe01750b48b80300000000000000c34d8b2e5249ff750049ff760848bbffffffffffffffff4889d090ff15c20000004889c3488b44240848bab018600000000000ff124883f801744beb0ae95e000000e94e0000004c8b64241041f6c4017503ff55704d89e34983c30270f44c8b34244c89da4883c418483b65187303ff5548e979ffffff48b801000000000000004883c418c348b801000000000000004883c418c348b80100000000000000c348b80100000000000000c3|@5503,8191,@2046,@2047,@305|57,0,1 77,0,1 100,0,-1 128,0,I24 206,0,0 221,0,0 236,0,0 247,0,0 5483:S35|56414c55455f4f505328292e7072696e745374727563742835297072696e7473283529 5484:C21,1088|90909090909090483b65187303ff55484c8b72f852505349504951498b562090ff1248f7c00100000075054c8b28eb0a49bd6006edacaa2a00004c8b6424204d8b5c24f84d8b5308495548b8f83cedacaa2a0000498b5230ff124c8b0c244d8b014983f8017572488b442418ff15f60300004883f8017466488b442418909090ff15ea030000488b780848f7c7010000007571488b374989fe488b1e48b8630000000000000048bab018600000000000ff124883f801746e4d8b6e0849f7c50100000075664d8b6500498b1c2448b86500000000000000eb0ae94c010000e92d01000048bab018600000000000909090ff124883f801746e4d8b5d084983fb017569eb05e9f70000004c8b542428498b7908498b72f0564823f740f6c6015e7503ff5570eb0ae9c5000000e9b0000000483bfe7d0c48bb0300000000000000eb0a48bb0100000000000000498b52f84d8d7fb84c3b7d107303ff554049c747f808000000eb0ae965000000e9500000004c89f948b858e5f9acaa2a0000488901488b442410488941384c897130488b4424204889412848897920488b4424084889411848895110488b4218488941084889c8488d54243090ff15ba020000eb60488d542430909090ff15b2020000eb55488d542430909090ff15aa020000eb6b488d542430909090ff15a2020000eb60488d542430909090ff159a020000eb55488d542430909090ff1592020000eb74488d542430909090ff158a020000eb69e9f9010000e9f40100004983f8ff755e488b442418909090ff15720200004883f8017473488b442418eb0fe9ce010000e9c9010000e9c40100009090ff1556020000488b780848f7c701000000756b488b374989fe488b1e48b86300000000000000eb0fe995010000e990010000e97f01000048bab018600000000000909090ff124883f80174764d8b6e0849f7c501000000756eeb05e93c0100004d8b6500498b1c2448b8650000000000000048bab018600000000000eb05e90901000090ff124883f80174724d8b5d084983fb01756d4c8b542428498b7908498b72f0564823f740f6c6015e7503ff5570483bfe7d1648bb0300000000000000eb14e9b5000000e9a000000048bb0100000000000000498b52f84d8d7fb84c3b7d107303ff554049c747f8080000004c89f948b818e7f9acaa2a0000eb0ae959000000e944000000488901488b442410488941384c897130488b4424204889412848897920488b4424084889411848895110488b4218488941084889c8488d5424309090ff151a010000eb60488d542430909090ff1512010000eb55488d542430909090ff150a010000eb56488d542430909090ff1502010000eb46488d542430909090ff15fa000000eb36488d542430909090ff15f2000000eb26488d542430909090ff15ea000000eb16e911000000e90c000000488d54243090ff15da000000488b7c2428488b77f8488b5e0848b80100000000000000488b53104883c430ff2290|@5493,8191,@2046,@2047,@5494,@5491,@5491,@5491,@5491,@5491,@5491,@2046,@2047,@5494,@5491,@5491,@5491,@5491,@5491,@5491,@5491|50,0,@198 76,0,@267 158,0,49 168,0,I24 207,0,50 229,0,I24 311,0,1 323,0,0 373,0,@5485 634,0,49 661,0,I24 710,0,50 720,0,I24 788,0,1 810,0,0 848,0,@5489 1069,0,0 5485:C2,144|90909090909090483b65187303ff55484c8b722041f6c6017503ff55704d89f54983c50270f44d8d7fe04c3b7d107303ff554049c747f8030000004d89fc49bb20e6f9acaa2a00004d891c244c8b5a184d895c24104c8b52104d895424084c8b0c244c8934244955504c8b52284d89c84c8b4a304c89c74c8b423848bb01000000000000004c89e0488b520857ff2290|@5488,8191|64,0,@5486 125,0,0 5486:C2,48|90909090909090483b65187303ff55484c8b70084c8b52104c8b48184c8b4010498b5e08488b00488b5208ff22909090|@5487,8191| 5487:S56|56414c55455f4f505328292e7072696e745374727563742835297072696e74732835297072696e74496e6669786564283429283129283129 5488:S53|56414c55455f4f505328292e7072696e745374727563742835297072696e74732835297072696e74496e6669786564283429283129 5489:C2,144|90909090909090483b65187303ff55484c8b722041f6c6017503ff55704d89f54983c50270f44d8d7fe04c3b7d107303ff554049c747f8030000004d89fc49bbe0e7f9acaa2a00004d891c244c8b5a184d895c24104c8b52104d895424084c8b0c244c892c244956504c8b52284d89c84c8b4a304c89c74c8b423848bb01000000000000004c89e0488b520857ff2290|@5488,8191|64,0,@5490 125,0,0 5490:C2,48|90909090909090483b65187303ff55484c8b70084c8b52104c8b48184c8b4010498b5e08488b00488b5208ff22909090|@5487,8191| 5491:C3,160|90909090909090483b65187303ff55484c8b72f84d8b6ef04981fdcf070000750c49bc0300000000000000eb0a49bc01000000000000004d8b5ef84d8d7fb84c3b7d107303ff554049c747f8080000004d89fa49b928e9f9acaa2a00004d890a4c8b4ad04d894a384c8b42f04d894230498b7b0849897a28488b72e049897220488b5ae849895a18488b4ad849894a104d895a084c89e34c89d0ff2528000000|@5496,8191,@5494|35,0,1 47,0,0 85,0,@5492 5492:C2,184|90909090909090483b65187303ff55484c8b72384d8b2e4983fd037502eb314c8b6228525048b85839eeacaa2a0000498b542418ff124c8b5c24084d8b532848b8b027edacaa2a0000498b12ff12eb0252504c8b6424084d8b5c2428498b442430498b5318909090ff124c8b5424084d8b4a2848b8b027edacaa2a0000498b11ff124c8b4424084d8b501049b9cf07000000000000498b7820498b7018498b58084c8b04244889da4889f34889f84883c410ff2290909090|@5488,8191|39,0,@1228 65,0,@257 117,0,@257 141,0,999 5493:S50|56414c55455f4f505328292e7072696e745374727563742835297072696e74732835297072696e74496e6669786564283429 5494:C2,200|90909090909090483b65187303ff55484883fb03756e488b5af8488b4be8f6c1017503ff55704883f9037f18488b43f84c8b700848b8d85deeacaa2a0000498b5618ff224c8b73f84d8b6e08525048b85100000000000000498b5518ff124c8b6424084d8b5c24f84d8b53e841f6c2017503ff55704c89d04883e80270f4488b1424eb05e92a000000909090ff124c8b4c24084d8b41f8498b78f8488b770848b85300000000000000488b56184883c410ff224c8b72f84989c5498b46e84c89eaff229090909090|@5495,8191|54,0,@1319 80,0,40 161,0,41 5495:S68|56414c55455f4f505328292e7072696e745374727563742835297072696e74732835297072696e74496e66697865642834296d6179506172656e74686573697365283229 5496:S52|56414c55455f4f505328292e7072696e745374727563742835297072696e74732835297072696e74496e66697865642834292f33 5497:C2,200|90909090909090483b65187303ff55484883f801750b48b80100000000000000c34d8d7fd04c3b7d107303ff554049c747f8050000004d89fe49bd00edf9acaa2a00004d892e4c8b284d896e204c8b62d84d8966184c8b5ae04d895e104c8b52f84d8956084d8d7fe84c3b7d107303ff554049c747f8020000004d89f94d89710849c701fbffffff524951488b40089090e871ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b04244889024889d04883c410c390909090909090|@417,8069|24,0,0 59,0,@5498 5498:C2,88|90909090909090483b65187303ff55484d8d7fe84c3b7d107303ff554049c747f8020000004d89fe4c8b6a104d896e084c8b62184d89264d89f249b9ffffffffffffffff4c8b4008488b5a20488b00488b5208ff22909090|@5475,8191|60,0,-1 5499:C9,528|90909090909090483b65187303ff55484883f801751a48b810f0f9acaa2a0000909090ff555848b801000000000000004c8b304989d54989c4498b4608909090ff15f20100004883f801746d498b4608ff15ea0100004989c34d8b56104c89d0ff15e20100004883f801746b4c89d090ff15da010000498b14244d89ea4d89d94c8b02488b7a18498b742408ff15c601000048f7c001000000741948b8b055edacaa2a00009090ff555848ba01000000000000004889c2eb05e934010000488b02495253495149505756524989c6498b42d84c89f2eb05e9fe000000ff124883f8017518488b5c2428488b442408488b5424304883c438e90bffffff4c8b6c24204983fd01741d4c8b6424304d8b5c24f84d8b5308488b442418498b52184883c438ff224c8b6424304d8b5c24e841f6c3017503ff55704983fb017f1d4d8b5424f84d8b4a0848b8d85deeacaa2a0000498b51184883c438ff224c8b14244d8b4a10498b4424d84c89ca9090ff1250488b5c2430488b442418909090ff15de0000004c8b442438488b3c24498b70d8483bfe7506498b58e0eb234d8d7fe84c3b7d107303ff554049c747f8020000004c89fb498b50e0488953084889334989d94989f84889c3488b442420488b5424384883c440ff258e0000004d8b4df84d8b410848b87f00000000000000498b5018ff224d8b5df84d8b530848b87f00000000000000498b5218ff22909090909090|@5502,8191,@2610,@2612,@2280,@2267,@5463,@3237,@5484|24,0,@5500 40,0,0 157,0,@339 172,0,0 328,0,@1319 484,0,63 508,0,63 5500:O3|@7377,@215,@5501 5501:S12|6e6f6e65206d617463686573 5502:S55|56414c55455f4f505328292e7072696e745374727563742835297072696e74732835297072696e74436f6e737472756374696f6e283229 5503:S28|56414c55455f4f505328292e697350726f6475637454797065283129 5504:S34|56414c55455f4f505328292e636f646556616c2835297072696e7450726f63283129 5505:S26|56414c55455f4f505328292e7072696e74537472756374283529 5506:C4,184|90909090909090483b65187303ff55485050505050505048ff3048ff700848ff701848ff72084c8d442420488b581048b89b00000000000000909090ff159e0000004d8d7fc04c3b7d107303ff554049c747f8070000004d89fe4c8b6c24204d892e4c8b6424284d8966084c8b5c24304d895e104c8b5424384d8956184c8b4c24404d894e204c8b4424484d894628488b7c245049897e304c8b5424104d89f14c8b442408488b1c24488b4424184883c458ff2530000000|@5504,8191,@359,@5453|49,0,77 5507:C3,384|90909090909090483b65187303ff55484d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fe49bdb01e6000000000004d892e4d8d7fe84c3b7d107303ff554049c747f8020000004d89fd49bcf0f3f9acaa2a00004d8965004d897508505050505050504d8d7fe84c3b7d107303ff554049c747f8020000004d89fc49bbb0f4f9acaa2a00004d891c244d897424084989e34d89234989e449bbc0f5f9acaa2a00004d895c24084989e449bb48f6f9acaa2a00004d895c24104989e44d896c24184989e349bda0f6f9acaa2a00004d896b204989e449bbf8f6f9acaa2a00004d895c24284989e549bc50f7f9acaa2a00004d8965304d8d7fc04c3b7d107303ff554049c747f8070000004d89fb4c8b2c244d892b4c8b6424084d8963084c8b5424104d8953104c8b4c24184d894b184c8b4424204d894320488b7c242849897b284c8b6c24304d896b3049564c8b52084d89d949b8214e000000000000488b5a10ff153a0000004c8b2424498b04244883c440c39090909090|@5523,8191,@5453|47,0,I48 84,0,@5508 133,0,@5510 161,0,@5512 179,0,@5515 205,0,@5517 222,0,@5519 240,0,@5521 348,0,10000 5508:C3,64|90909090909090483b65187303ff55484c8b72084d8b2e49564889c34c89e890ff15420000004c8b24244989042448b801000000000000004883c408c3909090|@5509,8191,@303|48,0,0 5509:S41|56414c55455f4f505328292e636f646556616c2835296d616b65537472696e6728312970702d283129 5510:C3,152|90909090909090483b65187303ff5548524c8b3041f6c6017503ff55704983fe017f0f48b801000000000000004883c408c3488b1424488b42084c8b2849565048bb41000000000000004c89e8909090ff156a0000004c8b2424498904244c8b5c240841f6c3017503ff55704d89da4983ea0270f44d89d64883c410483b65187303ff5548eb8d48b801000000000000004883c418c39090|@5511,8191,@303|37,0,0 66,0,32 137,0,0 5511:S34|5072657474795072696e7465722e75676c795072696e74283229627265616b283129 5512:O1|@5513 5513:C2,16|48b80300000000000000c39090909090|@5514,1|2,0,1 5514:S29|5072657474795072696e7465722e75676c795072696e74283229283129 5515:O1|@5516 5516:C2,16|48b80100000000000000c39090909090|@5514,1|2,0,0 5517:O1|@5518 5518:C2,16|48b80100000000000000c39090909090|@5514,1|2,0,0 5519:O1|@5520 5520:C2,16|48b80100000000000000c39090909090|@5514,1|2,0,0 5521:O1|@5522 5522:C2,16|48b80100000000000000c39090909090|@5514,1|2,0,0 5523:S35|56414c55455f4f505328292e636f646556616c2835296d616b65537472696e67283129 5524:C3,384|90909090909090483b65187303ff55484d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fe49bdb01e6000000000004d892e4d8d7fe84c3b7d107303ff554049c747f8020000004d89fd49bca0f9f9acaa2a00004d8965004d897508505050505050504d8d7fe84c3b7d107303ff554049c747f8020000004d89fc49bb58faf9acaa2a00004d891c244d897424084989e34d89234989e449bbc0f5f9acaa2a00004d895c24084989e449bb48f6f9acaa2a00004d895c24104989e44d896c24184989e349bda0f6f9acaa2a00004d896b204989e449bbf8f6f9acaa2a00004d895c24284989e549bc30fbf9acaa2a00004d8965304d8d7fc04c3b7d107303ff554049c747f8070000004d89fb4c8b2c244d892b4c8b6424084d8963084c8b5424104d8953104c8b4c24184d894b184c8b4424204d894320488b7c242849897b284c8b6c24304d896b3049564c8b50084d89d949b8214e000000000000488b5a08488b0090ff15360000004c8b2424498b04244883c440c390|@5504,8191,@5453|47,0,I48 84,0,@5525 133,0,@5527 161,0,@5512 179,0,@5515 205,0,@5517 222,0,@5519 240,0,@5528 348,0,10000 5525:C3,64|90909090909090483b65187303ff55484c8b72084d8b2e49564889c34c89e890ff15420000004c8b24244989042448b801000000000000004883c408c3909090|@5526,8191,@303|48,0,0 5526:S40|56414c55455f4f505328292e636f646556616c2835297072696e7450726f6328332970702d283129 5527:C3,152|90909090909090483b65187303ff5548524c8b3041f6c6017503ff55704983fe017f0f48b801000000000000004883c408c3488b1424488b42084c8b2849565048bb41000000000000004c89e8909090ff156a0000004c8b2424498904244c8b5c240841f6c3017503ff55704d89da4983ea0270f44d89d64883c410483b65187303ff5548eb8d48b801000000000000004883c418c39090|@5511,8191,@303|37,0,0 66,0,32 137,0,0 5528:O1|@5529 5529:C2,16|48b80100000000000000c39090909090|@5514,1|2,0,0 5530:C4,104|90909090909090483b65187303ff5548524d8d7fe84c3b7d107303ff554049c747f8020000004d89fe49bd38fcf9acaa2a00004d892e498946084956488b4208488d542410909090ff1542000000488b1c2448ba00fdf9acaa2a00004883c410ff25320000009090|@5545,8191,@5538,@5534|43,0,@5531 84,0,@5533 5531:C2,80|90909090909090483b65187303ff55484c8b70184c8b68304c8b204c8b58104d8d7fd84c3b7d107303ff554049c747f8040000004c89f84c8958184c8960104c8968084c8930488b5208ff2290909090|@5532,8191| 5532:S42|56414c55455f4f505328292e636f646556616c283529696e7374616c6c50702831297070726f63283129 5533:O2|@5534,@7482 5534:C3,128|90909090909090483b65187303ff55484d8d7fe84c3b7d107303ff554049c747f8020000004d89fe49895e08498906488b5a08488b0b504889df4c89f64889c8488d542408909090ff155a0000004d8d7fe84c3b7d107303ff554049c747f8020000004c89fb4889430848893348891f48b801000000000000004883c408c390|@5536,8191,@5535|114,0,0 5535:C3,144|90909090909090483b65187303ff55484883f801750b48b80100000000000000c34c8b304989d24d89f14c8b4008498b5af8498b06909090ff157a0000004883f80174084c89c04c89d2ebbb495249514c89c04c89d2909090e8a9ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fb48894308488b14244889134889d84883c410c390909090909090|@5537,8143,@2272|24,0,0 5536:S22|5052494e545f5441424c4528292e6164645070283229 5537:S31|5052494e545f5441424c4528292e616464507028322966696c746572283129 5538:C17,408|90909090909090483b65187303ff55484989d54989c44c89e0909090ff159e0100004883f801746c4d89eb4c89e09090ff15920100004c8b10488b4010909090ff158a0100004d89d94989c04c89c090ff1582010000488b104883faff756f4c89c09090ff15760100004983fa017502eb614d8b72084983fe01751d4d8b69f84989c0498b5d10498b029090ff1556010000eb70e9e60000004d8b69f84951495250498b45109090ff15420100004883f801750e48b84801faacaa2a000090ff55584c8b6424104d8b5c24f8eb0ae964000000e932000000498b4310ff15160100004883f8017425498b4310ff150e010000488b5808488b44240890ff1506010000eb0950504950eb03505050488b0424909090ff15f60000004883f801750e48b89001faacaa2a000090ff5558488b04244883c418c34c89c09090ff15d60000004889c14c89c0ff15d20000004c89d3909090ff15ce000000495149b803000000000000004889c34889c8ff15be000000488b14244883c408e988feffff48b8e801faacaa2a00009090ff555848b80100000000000000|@5547,8191,@2062,@2063,@2064,@2226,@1461,@5548,@5482,@2046,@2047,@5560,@5546,@2226,@2239,@2463,@2465|182,0,@5539 290,0,@5541 350,0,1 385,0,@5543 400,0,0 5539:O3|103,@333,@5540 5540:S24|417267756d656e74206d7573742062652061207475706c65 5541:O3|103,@333,@5542 5542:S36|496e76616c6964207479706520286e6f74206672656520617420746f702d6c6576656c29 5543:O3|103,@333,@5544 5544:S38|496e76616c6964207479706520286e6f742061207479706520636f6e737472756374696f6e29 5545:S34|56414c55455f4f505328292e636f646556616c283529696e7374616c6c5070283129 5546:C2,96|4c8b284983fdfd752e4c8b60084d8b1c244d8b134983fa0375054989c6eb1b4c89d8483b65187303ff5548ebd349be01000000000000004989c64d8b264983fcff750b48b80300000000000000c348b80100000000000000c390909090909090|@5564,7937|47,0,0 69,0,1 80,0,0 5547:S48|56414c55455f4f505328292e636f646556616c283529696e7374616c6c5070283129666f6c6c6f775479706573283129 5548:C21,1056|90909090909090483b65187303ff55484989c54889d89090ff152a0400004883f801746e4d89ec4889d89090ff151e0400004954488b18488b034883f80775384989de498b5e10498b460890ff15060400004c8b284983fdff75054c89f2eb1b4889c3483b65187303ff5548ebc948ba01000000000000004889da4989d54c89e8909090ff15d60300004883f8017470eb05e96d0300004c89e89090ff15c60300004c8b204983fc03755a488b580848f7c301000000756f488b134989de4989d5488b1a48b8630000000000000048bab018600000000000ff124883f801746d4d8b660849f7c4010000007565498b3c24488b1f48b86500000000000000eb0ae9e7020000e9ca02000048bab018600000000000ff124883f8017458498b3424498b5c2408eb05e9900200004883fb01755549ff750848ff7608488b542410488b024883f807754e4989d6eb0ae952020000e935020000498b5e10498b460890ff150a0300004c8b284983fdff750a4c89f1eb25e9fb0100004889c2483b65187303ff5548ebb8e9d001000048b901000000000000004889d1514c8b7424104d8b264983fc077534498b5e10498b4608ff15c2020000488b384883ffff75054d89f5eb1b4989c6483b65187303ff5548ebcd49bd01000000000000004d89f5488b042490ff15960200004883f801746c4c89ef488b042490ff158a0200004889c64889f8ff15860200004883f801745f4889f890ff157e0200004889c34889f0ff157a0200004883f801746d488b5c2408488b0b4883f90775444989de498b5e10498b4608909090ff155a0200004c8b284983fdff750a4c89f2eb25e9e30000004889c3483b65187303ff5548ebc2e9d000000048ba01000000000000004889da4989d54c89e890ff15220200004883f80174634c89e8eb05e9a60000009090ff15120200004c8b204983fc017565488b401090ff15060200009090ff15060200004889c748b8589aedacaa2a000090ff15fa0100004889c34889f8ff15f60100004883f801741448b801000000000000004883c420c3e93000000048b84008faacaa2a000090ff555848b8010000000000000048b8b808faacaa2a000090ff555848b8010000000000000048b8b808faacaa2a000090ff555848b8010000000000000048b83009faacaa2a000090ff555848b8010000000000000048b8a009faacaa2a000090ff555848b8010000000000000048b8a009faacaa2a000090ff555848b8010000000000000048b8a009faacaa2a000090ff555848b8010000000000000048b8a009faacaa2a000090ff555848b8010000000000000048b8a009faacaa2a000090ff555848b8010000000000000048b8a009faacaa2a000090ff555848b8010000000000000048b8a009faacaa2a000090ff555848b8010000000000000048b8080afaacaa2a000090ff555848b8010000000000000090909090|@5559,7743,@2084,@2085,@2044,@2046,@2047,@2044,@2044,@1458,@1459,@1458,@1459,@2022,@2044,@2062,@2063,@2064,@1461,@1461,@2272|112,0,0 198,0,49 208,0,I24 246,0,50 268,0,I24 398,0,0 468,0,0 630,0,0 711,0,@516 746,0,0 766,0,@5549 780,0,0 790,0,@5551 804,0,0 814,0,@5551 828,0,0 838,0,@5553 852,0,0 862,0,@5555 876,0,0 886,0,@5555 900,0,0 910,0,@5555 924,0,0 934,0,@5555 948,0,0 958,0,@5555 972,0,0 982,0,@5555 996,0,0 1006,0,@5555 1020,0,0 1030,0,@5557 1044,0,0 5549:O3|103,@333,@5550 5550:S65|417267756d656e74207072696e746572206d757374206861766520747970652027612a696e742d3e756e697420287365636f6e6420617267206e6f7420696e7429 5551:O3|103,@333,@5552 5552:S70|417267756d656e74207072696e746572206d757374206861766520747970652027612a696e742d3e756e697420287365636f6e6420617267206e6f74207479706520696e7429 5553:O3|103,@333,@5554 5554:S60|417267756d656e74207072696e746572206d757374206861766520747970652027612a696e742d3e756e697420286d69736d61746368656420276129 5555:O3|103,@333,@5556 5556:S55|417267756d656e74207072696e746572206d757374206861766520747970652027612a696e742d3e756e697420286e6f74207061697229 5557:O3|103,@333,@5558 5558:S59|417267756d656e74207072696e746572206d757374206861766520747970652027612a696e742d3e756e697420286e6f742066756e6374696f6e29 5559:S59|56414c55455f4f505328292e636f646556616c283529696e7374616c6c5070283129666f6c6c6f775479706573283129636865636b46756e283229 5560:C3,136|90909090909090483b65187303ff55484883f801752a4883fb01750b48b80100000000000000c348b8900bfaacaa2a00009090ff555848b8010000000000000048f7c30100000075214c8b334c8b50084c8b4b08498b5e08488b0090ff154e0000004c89cb4c89d0eb9d48b8900bfaacaa2a0000909090ff555848b8010000000000000090909090|@5563,8127,@5548|30,0,0 41,0,@5561 56,0,0 108,0,@5561 124,0,0 5561:O3|103,@333,@5562 5562:S30|5475706c652073697a6520646f6573206e6f74206d617463682074797065 5563:S60|56414c55455f4f505328292e636f646556616c283529696e7374616c6c5070283129666f6c6c6f775479706573283129636865636b46756e73283229 5564:S25|5354525543545f56414c5328292e6973467265654964283129 5565:C2,32|4883f803750b48b80300000000000000c348b80100000000000000c390909090|@5581,1|8,0,1 19,0,0 5566:S22|56414c55455f4f505328292e636f646556616c283529 5567:C2,32|4c8b304983fe05750b48b80300000000000000c348b80100000000000000c390|@2866,4097|11,0,1 22,0,0 5568:C2,40|4c8b70084c8b68104d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8968084c8930c3|@2866,6145| 5569:C10,520|90909090909090483b65187303ff55484989c54c89e89090ff15120200004883f801740b4c89e890ff150a020000c3498b55004883fa037570498b45084c8b304d8b65104d8b1c244989da4d23d341f6c2017503ff55704989da4d2bd34d8d520170f150505050504983fe01754d41f6c2017503ff55704c89d34883eb0270f44989e649c706f7ffffff4989e349c74308010000004989e249c74210010000004989e649895e18eb05e9830000004989e349c7432001000000eb2e4889e348c703f7ffffff4989e34d8973084889e348c74310030000004989e64d8956184989e349c74320010000004d8d7fd04c3b7d107303ff554049c747f8050000004c89f84c8b14244c8910488b5c2408488958084c8b7424104c8970104c8b5c24184c8958184c8b5424204c8950204883c428c34c89e8ff15060100004883f80174604c89e890ff15fe0000004c8b304c8b68084c89e8ff15f60000004883f801740c49bc380dedacaa2a0000eb174c89e890ff15e2000000495690e889feffff4989c4eb0249564d8b1c244983fb0b75164c89e3488b04244883c408ff25c0000000e9470000004983fbfb75114c89e3488b04244883c408ff25ac0000004d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c8b14244c8950104c89600848c7000d0000004883c408c348b81810faacaa2a000090ff555848b8010000000000000090909090|@5572,8191,@2280,@2267,@5567,@5568,@2631,@2253,@4802,@4802|354,0,@217 494,0,@5570 508,0,0 5570:O3|@7377,@215,@5571 5571:S9|4e6f20616363657373 5572:S25|56414c55455f4f505328292e636f6465416363657373283229 5573:C2,32|4883f807750b48b80300000000000000c348b80100000000000000c390909090|@5574,1|8,0,1 19,0,0 5574:S5|5072696e74 5575:C2,32|4883f8f9750b48b80300000000000000c348b80100000000000000c390909090|@5576,1|8,0,1 19,0,0 5576:S10|5072696e745370616365 5577:C2,32|4883f8fd750b48b80300000000000000c348b80100000000000000c390909090|@5578,1|8,0,1 19,0,0 5578:S10|4d616b65537472696e67 5579:C2,32|4883f805750b48b80300000000000000c348b80100000000000000c390909090|@5580,1|8,0,1 19,0,0 5580:S15|4d616b65537472696e675370616365 5581:S9|496e7374616c6c5050 5582:O2|@5583,@7483 5583:C2,56|4c8b304c8b6a084d3bf57510488b4010c348b80100000000000000c348b8b0d7edacaa2a000090ff555848b8010000000000000090909090|@966,6149|19,0,0 30,0,@970 44,0,0 5584:O2|@5585,@7483 5585:C2,48|4c8b304c8b6a084d3bf5751648b80300000000000000c348b80100000000000000c348b80100000000000000c3909090|@966,6149|14,0,1 25,0,0 36,0,0 5586:C31,2384|90909090909090483b65187303ff55484c8b70084983fe01756d50534d89d54c8b5424184d89cc4d89e94d89c34d89e04c89db488b520890ff124989c2488b4424089090ff152e0900004d8d7fe84c3b7d107303ff554049c747f8020000004d89f94989410849c701fbffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89f8eb05e9fa00000049c7400801000000488b3c244989384d8d7fe84c3b7d107303ff554049c747f8020000004c89fe4c8946084c890e4d8d7fe84c3b7d107303ff554049c747f8020000004c89fb488973084c89134d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48895a0848c70215000000524883fb01750c48b90300000000000000eb2f488b034c8b304983fefb7519488b5b08483b65187303ff5548ebd348b9010000000000000048b901000000000000004883f9017437488b0424ff15320800004989c54d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89680848c700fbffffff4883c418c20800488b04244883c418c208004989d54989c44c89f090ff15f20700004883f801746f4c89f090ff15ea070000534d89d34c8b5424104c89cf4d89d94c89c64989f84889f34c89e0498b5508909090ff12488b104883fa0b75184889c348b80300000000000000ff15b20700004889c3eb504883fafb751f4889c348b803000000000000009090ff159a0700004889c3eb30e9880000004d8d7fe04c3b7d107303ff554049c747f8030000004c89fb48c74310030000004889430848c7030d0000004d8d7fe84c3b7d107303ff554049c747f8020000004c89f948c7410801000000488b04244889014d8d7fd84c3b7d107303ff554049c747f8040000004c89f848c7401801000000488958104889480848c700090000004883c408c20800498b442410909090ff15020700004883f801746f498b442410909090ff15f60600004989c34c89d8ff15f20600004883f8017470534c89c34c89c890ff15e60600004d8d7fe84c3b7d107303ff554049c747f8020000004d89fa49c74208010000004c8b0c244d890a4989c04d8d7fd84c3b7d107303ff554049c747f804000000eb05e9aa0500004c89f848c74018030000004c8940104c89500848c70009000000eb05e9070000004883c408c208004c89d890ff15760600004883f8017470534c89c34c89c890ff156a0600004d8d7fe84c3b7d107303ff554049c747f8020000004d89fa49c74208010000004c8b0c244d890a4d8d7fd84c3b7d107303ff554049c747f8040000004d89f849c7401803000000498940104d89500849c700090000004d8d7fe84c3b7d10730aeb05e959000000ff554049c747f8020000004c89ff48c74708010000004c89074d8d7fd84c3b7d107303ff554049c747f8040000004c89f848c740180300000048bed0a8edacaa2a0000488970104889780848c700090000004883c408c208004c89d8909090ff15a60500004883f80174705050534c8d44240849504c89d74c8b5424284c89ce4989f949b801000000000000004889f3498b0424909090ff15760500004d8d7fe84c3b7d107303ff554049c747f8020000004c89fb48c7430801000000488b14244889134d8d7fd84c3b7d107303ff554049c747f804000000eb05e9260000004c89f848c7401803000000488b4c2408488948104889580848c700090000004883c418c208004c89d89090ff150a0500004883f80174644c89c890ff15020500004883f80174594c89c890ff15fa0400004c8b084c89c8ff15f60400004883f80174704c89c890ff15ee0400005348ff70084c8b00498b304883fe077531498b5810498b400890ff15d60400004989c0483b65187303ff5548ebdae9fc020000e96a01000048bf01000000000000004c89c74889f89090ff15ae0400004883f80174644889f890ff15a6040000488b5808eb05e92301000048f7c3010000007555488b530848f7c201000000756a488b4a084883f90175654c8b334d8b6e084d8b5d004983fb077532498b5d10498b45089090ff15620400004989c5483b65187303ff5548ebd8e9bb00000049bc0100000000000000e9980000004d89ec49544c8b5424084d8b024983f8077533498b5a10498b4208eb0ae962000000e94700000090ff151a0400004989c2483b65187303ff5548ebce49b901000000000000004d89d14d8d7fe84c3b7d107303ff554049c747f8020000004d89fa4d894a08488b3c2449893aeb614889f8488d5424109090ff15d20300004989c250eb5d4889f8488d542410ff15c60300004989c250eb494889f8488d542410ff15ba0300004989c250eb354889f8488d542410ff15ae0300004989c250eb2149baf81dfaacaa2a0000535050eb12e90d00000049baf81dfaacaa2a00005350504d8d7fe04c3b7d107303ff554049c747f8030000004d89f949b8101efaacaa2a00004d8901498b3a49897910498b7208498971085756495148ff750848bb161bfaacaa2a0000536a0148896508488b44244090ff15360300004d8d7fd84c3b7d107303ff554049c747f8040000004c89fa48b94024faacaa2a000048890a488b4424404889421848897a10488972084d8d7fe84c3b7d107303ff554049c747f8020000004c89f84889500848c700fbffffff48ff742410488f45084883c448c208009090904c8b304983fe03752c48b858d4ecacaa2a00009090ff555848b80100000000000000eb1148b801000000000000004883c430c208004d8d7fe84c3b7d107303ff554049c747f8020000004d89fd4c8b24244d89650849c74500fbffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fb49c74308010000004c8b5424284d89134d8d7fd84c3b7d107303ff554049c747f8040000004c89f848c74018010000004c8968104c89580848c700090000004883c430c20800534c89d74c8b5424104c89ce4989f94c89c24989f04889d34c89e0498b5508ff124d8d7fe84c3b7d107303ff554049c747f8020000004c89f948c74108010000004c8b34244c89314989c54d8d7fd84c3b7d107303ff554049c747f8040000004c89f848c74018010000004c8968104889480848c700090000004883c408c20800534d89d34c8b5424104c89cf4d89d94c89c64989f84889f34c89e0498b5508909090ff124d8d7fe84c3b7d107303ff554049c747f8020000004c89fb48c7430801000000488b14244889134889c14d8d7fd84c3b7d107303ff554049c747f8040000004c89f848c7401801000000488948104889580848c700090000004883c408c208009090|@5602,8191,@2136,@4523,@2610,@2612,@4802,@4802,@2402,@2404,@5603,@5605,@5709,@5605,@2957,@5711,@5733,@2084,@2085,@2084,@2085,@2044,@2046,@2047,@2044,@2044,@5601,@5601,@5601,@5601,@5463|261,0,1 300,0,0 310,0,0 472,0,1 502,0,1 1032,0,@635 1106,0,0 1364,0,0 1499,0,0 1574,0,0 1706,0,@5587 1726,0,@5587 1763,0,@5588 1799,0,$5586+1934 1852,0,@5600 1945,0,@45 1960,0,0 1972,0,0 5587:O2|@617,@617 5588:C2,96|4d8d7fe84c3b7d107303ff554049c747f8020000004d89fe4989460849c706fbffffff4d8d7fd84c3b7d107303ff554049c747f8040000004c89f849bda81efaacaa2a00004c89284c8970184c8b72104c8970104c8b6a084c896808c3909090|@5599,6149|61,0,@5589 5589:C5,200|90909090909090483b65187303ff554848f7c001000000740c49be0300000000000000eb084c8b304f8d74360141f6c6017503ff55704983fe097e42525048ff721849b8090000000000000048bb01000000000000009090ff159200000048bbc01ffaacaa2a000048bab0186000000000009090ff124883f8017416eb08525048ff7218eb0c4c8b6424104d8b6c2408eb094c8b6c24104d8b6d104c89e89090ff15520000004c8b04244889c3488b44240848bad81ffaacaa2a00004883c418ff253a0000009090|@5597,8191,@1440,@5596,@5592|27,0,1 68,0,4 78,0,0 96,0,@5590 106,0,I24 180,0,@5591 5590:S4|636f6e76 5591:O2|@5592,@7466 5592:C3,136|90909090909090483b65187303ff554853504d8d7fe04c3b7d107303ff554049c747f8030000004d89fe4d89461049895e084989064c8b6a08498b45004d89e84956488d54241890ff15620000004d8d7fe84c3b7d107303ff554049c747f8020000004c89ff48894708488b342448893749893848b801000000000000004883c418c39090909090|@5594,8191,@5593|118,0,0 5593:C5,208|90909090909090483b65187303ff55484883f801750b48b80100000000000000c34c8b304989d54c8b6008498b5df0498b0648bab018600000000000ff124883f801743a498b45f8ff15aa0000004889c7498b4608909090ff15a20000004c89ee4d89f24d89e14889c34889f8909090ff15920000004883f8017418eb0b4d89e14d89f24c89eeeb0b4c89c84889f2e973ffffff5649524c89c84889f2e865ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fb498943084c8b14244d89134c89d84883c410c3909090|@5595,8127,@1461,@1461,@2272|24,0,0 52,0,I24 5594:S28|5052494e545f5441424c4528292e6164644f7665726c6f6164283329 5595:S37|5052494e545f5441424c4528292e6164644f7665726c6f616428332966696c746572283129 5596:C10,192|90909090909090483b65187303ff55484989c54c89e89090ff15ca0000004883f801746c4c89e890ff15c20000004c8b18488b4010909090ff15ba0000004d89da4989c14c89c890ff15b2000000488b104883faff75044c89c8c34c89c89090ff15a20000004989c64c89c8ff159e0000004d89f14c89d3ff159a00000049b803000000000000004889c34c89c8eb05e90e000000909090ff1582000000e964ffffff48b8e801faacaa2a00009090ff555848b8010000000000000090909090|@5598,8191,@2062,@2063,@2064,@2226,@2226,@2239,@2463,@2465|128,0,1 165,0,@5543 180,0,0 5597:S48|56414c55455f4f505328292e6170706c7946756e6374696f6e2836296164644f7665726c6f6164696e67283129283129 5598:S42|56414c55455f4f505328292e6170706c7946756e6374696f6e283629666f6c6c6f775479706573283129 5599:S49|56414c55455f4f505328292e6170706c7946756e6374696f6e2836296164644f7665726c6f616447656e6572616c283129 5600:C5,200|90909090909090483b65187303ff554848f7c001000000740c49be0300000000000000eb084c8b304f8d74360141f6c6017503ff55704983fe097e42525048ff721849b8090000000000000048bb01000000000000009090ff159200000048bbc01ffaacaa2a000048bab0186000000000009090ff124883f8017416eb08525048ff7218eb0c4c8b6424104d8b6c2408eb094c8b6c24104d8b6d104c89e89090ff15520000004c8b04244889c3488b44240848bad81ffaacaa2a00004883c418ff253a0000009090|@5597,8191,@1440,@5596,@5592|27,0,1 68,0,4 78,0,0 96,0,@5590 106,0,I24 180,0,@5591 5601:C4,176|90909090909090483b65187303ff554852488b104883fa077525488b5810488b40089090ff15ae000000483b65187303ff5548ebdc49be01000000000000004989c6488b1c244956488b4bf04c8b314983fe077529488b5910488b4108909090ff157a0000004889c1483b65187303ff5548ebd848b801000000000000004889c84889c34d8d7fe84c3b7d107303ff554049c747f8020000004c89f848895808488b14244889104883c410c390909090|@5735,4111,@2044,@2044|55,0,0 118,0,0 5602:S28|56414c55455f4f505328292e6170706c7946756e6374696f6e283629 5603:C2,32|4883f8ff750b48b80300000000000000c348b80100000000000000c390909090|@5604,1|8,0,1 19,0,0 5604:S5|457175616c 5605:C3,800|90909090909090483b65187303ff5548f6c3017503ff55704989de4983c60270f44d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89fb48c703010000004d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89fa48c702010000004d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89f948c701010000004d8d7fe84c3b7d107303ff554049c747f8020000004d89fd49bc502afaacaa2a00004d89650049895d084d8d7fc84c3b7d107303ff554049c747f8060000004d89fc49bbb830faacaa2a00004d891c2449895c242849895424204d8974241849894c24104d896c2408495652495490ff154602000049b8806dfaacaa2a000048bb0100000000000000488b14249090ff124c8b104983fa0175354c8b48084d8d7fe84c3b7d107303ff554049c747f8020000004c89f848c74008010000004c8b4424104c89004c89ca4883c418ff224c8b48084d8d7fe84c3b7d107303ff554049c747f8020000004c89f848c74008010000004c8b4424104c89004c89ca90ff12488b7c2408488b3748f7c6010000007534488b56084883fa017505488b1eeb484d8d7fe84c3b7d107303ff554049c747f8020000004c89fb4889730848c703efffffffeb234d8d7fe84c3b7d107303ff554049c747f8020000004c89fb4889730848c703efffffff4d8d7fd84c3b7d107303ff554049c747f8040000004c89fa48c74218030000004889421048b9186efaacaa2a000048894a0848c702090000004d8d7fe84c3b7d107303ff554049c747f8020000004c89f848c74008010000004889104d8d7fe84c3b7d107303ff554049c747f8020000004d89fe4989460849891e4d8d7fe84c3b7d107303ff554049c747f8020000004d89fd4d89750849c74500130000004d8d7fb84c3b7d107303ff554049c747f8080000004d89fc49c74424380100000049c74424300100000049c74424280100000049c74424200300000049c7442418010000004c8b5c24104d895c241049ba686efaacaa2a00004d895424084d892c244d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89600848c700f3ffffff4883c418c390|@5708,8191,@2959|167,0,@5606 209,0,@5618 260,0,@5701 270,0,0 540,0,@5704 742,0,@5707 5606:C2,240|505048f7c301000000754b4d8d7fd84c3b7d107303ff554049c747f8040000004c89fa48b9782bfaacaa2a000048890a48894218488b0348894210488b4b0848894a084989e649c706010000004989e649895608eb6b4d8d7fe04c3b7d107303ff554049c747f8030000004d89fe48bb402cfaacaa2a000049891e488b4a0849894e10498946084d8d7fe84c3b7d107303ff554049c747f8020000004c89f848bbd02ffaacaa2a00004889184c8970084989e649c706ffffffff4889e3488943084d8d7fe84c3b7d107303ff554049c747f8020000004c89f8488b1424488910488b4c2408488948084883c410c39090|@5617,4111|37,0,@5607 112,0,@5609 161,0,@5615 5607:C2,72|90909090909090483b65187303ff55484989c64d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c8970104c8b6a084c8968084c8b62104c8920488b5218ff2290909090|@5608,8191| 5608:S50|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e28322972657475726e436f6465283229283129 5609:C2,352|90909090909090483b65187303ff5548488b5a10488b0bf6c1017503ff55704989ce4983c60270f44c8933488b0ba8017503ff55704989c64983c60270f44d8d7fe84c3b7d107303ff554049c747f8020000004d89fd49bcd82dfaacaa2a00004d8965004d8975084d8d7fe84c3b7d107303ff554049c747f8020000004d89fb49bac82efaacaa2a00004d89134d8973084d8d7fe84c3b7d107303ff554049c747f8020000004d89f9498949084d89314d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c8948104c8958084c89284956488b5208909090ff124d8d7fb84c3b7d107303ff554049c747f8080000004d89f849c740380100000049c740300100000049c74028ffffffff49c740200500000049c7401801000000488b3c244989781048be602ffaacaa2a0000498970084989004d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89400848c700f3ffffff4883c408c390|@5614,8191|88,0,@5610 130,0,@5612 296,0,@5613 5610:C2,96|4c8b304c8b6a084d89f44d23e541f6c4017503ff55704d89f44d2be54d8d64240170f04d8d7fd04c3b7d107303ff554049c747f8050000004c89f848c74020010000004c89601848c740100300000048c74008ffffffff48c700f7ffffffc390|@5611,7173| 5611:S69|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e28322972657475726e436f646528322977726170706564436f6465283229636f64652d283129 5612:C2,96|4c8b304c8b6a084d89f44d23e541f6c4017503ff55704d89f44d2be54d8d64240170f04d8d7fd04c3b7d107303ff554049c747f8050000004c89f848c74020010000004c89601848c740100300000048c74008fdffffff48c700f7ffffffc390|@5611,7173| 5613:S10|65717b2e2e2e7d283229 5614:S61|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e28322972657475726e436f646528322977726170706564436f6465283229 5615:C2,32|90909090909090483b65187303ff5548488b5808488b00488b5208ff22909090|@5616,8191| 5616:S61|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e28322972657475726e436f646528322977726170706564436f6465283129 5617:S47|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e28322972657475726e436f6465283229 5618:C27,800|90909090909090483b65187303ff5548524950534c8b304983fe0775574d8d7fe84c3b7d107303ff554049c747f8020000004d89fd4c8b60104d8965084c8b58084d895d004c89e3488b4008ff15f6020000488b184883fbff751e4c89e84c89c2909090ff12488b1c244883c418ff25dc020000e912000000488b1c24488b5424104883c418e97cffffff4989c54c89e8909090ff15be0200004883f80174724c89e890ff15b60200004c8b18488b4010909090ff15ae0200004989c24c89d0ff15aa020000495349525049b8d834faacaa2a00004c89d348b87b0000000000000048baa040f1acaa2a0000ff15860200004c8b084983f9fd74654d8d7fe84c3b7d107303ff554049c747f802000000eb05e97e0100004d89f848bf7835faacaa2a0000498938498940084d8d7fe84c3b7d107303ff554049c747f8020000004c89fe4c89460848c70601000000488b5c24184889f04883c430ff252002000048b8e0a2edacaa2a00009090ff15160200004889c3488b0424909090ff150e0200004883f801741e4c8b442428488b5c241848b8f835faacaa2a0000498b50084883c430ff22488b44240890ff15e60100004883f801756e488b442408909090ff15da0100004c8b004983f8ff745c488b442408ff15ce0100004889c7488b4424089090ff15c6010000488b5c241090ff15c201000049b803000000000000004889c34889f89090ff15b20100004c8b442420488b5c2418488b5424284883c430e9e1fdffffe919000000488b5c241848b85036faacaa2a00004883c430ff25840100004c8b00498b7810488b374883fe017519488b5c241848b85036faacaa2a00004883c430ff25630100004989c0488b5c2410488b442408488d54243090ff1552010000488b5c24184883c430ff254b0100004c89e8ff154a0100004883f80174634c89e890ff15420100004c8b600849f7c40100000075384d8b5c24084983fb0175164d8b1424498b4208488b5424104883c418e92bfdffff488b4008488d542418909090ff150a0100004883c418c3488b4008488d542418ff15fe0000004883c418c348b85036faacaa2a00004883c418ff25ed0000009090909090|@5638,8191,@2044,@5634,@2062,@2063,@2064,@1461,@2448,@5634,@1461,@2272,@2265,@2226,@2226,@2239,@2463,@2465,@5634,@5634,@5639,@5634,@2046,@2047,@5689,@5689,@5634|205,0,@5619 218,0,61 228,0,@2447 284,0,@5622 354,0,@587 404,0,@5624 504,0,1 562,0,@5626 603,0,@5626 777,0,@5626 5619:O1|@5620 5620:C2,16|48b8380dedacaa2a0000c39090909090|@5621,1|2,0,@217 5621:S54|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b6545712833297370656369616c2d283129 5622:C2,8|488b4208c3909090|@5623,5| 5623:S46|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329283129 5624:O1|@5625 5625:C2,16|48b8b88cedacaa2a0000c39090909090|@5623,1|2,0,@440 5626:O2|0,@5627 5627:O1|@5628 5628:C2,16|48b8c036faacaa2a0000c39090909090|@5633,1|2,0,@5629 5629:O2|-3,@5630 5630:O1|@5631 5631:C3,32|90909090909090483b65187303ff5548488b5808488b00ff252b000000909090|@4507,7949,@5632| 5632:C2,840|90909090909090483b65187303ff5548483bc3750b48b80300000000000000c348f7c001000000740b48b80100000000000000c348f7c301000000740b48b80100000000000000c34c8b70f849c1e60849c1ee084f8d7436014c8b6bf849c1e50849c1ed084f8d6c2d014d3bf5740b48b80100000000000000c34c0fb668ff4f8d6c2d014c0fb663ff4f8d6424014d89eb4d0bdc4d89dd4981e5810000004983fd01740b48b80100000000000000c34d89dc4983e4034983fc01747141f6c6017503ff55704983fe017d2449bdd802edacaa2a00004d89eb4d23de41f6c3017503ff55704d8d5dff4d03de70f4eb034d89f349be11000000000000004d89dd4d23ee41f6c5017503ff557050524c89da48d1fa498d46ff48f7ea4c8d68015a5870e649f7c501000000740ceb05e99e0000004d89eceb1349f645ff104d8b6500740349f7dc4f8d6424015053495449bb0100000000000000488b1c244c3bdb750f48b803000000000000004883c418c3488b4424104d89de49d1ee4e0fb634304f8d7436014c8b6c24084d89dc49d1ec4f0fb66425004f8d6424014d3bf47521498d5b024989db483b65187303ff5548eba648b801000000000000004883c418c348b801000000000000004883c418c34983fe0375114c8b18488b034889c34c89d8e920feffff4983fe05755f4c8b184c8b70084c8b2b4c8b630849f7c301000000741b4d3bdd750b4c89e34c89f0e9f3fdffff48b80100000000000000c349f7c501000000740b48b80100000000000000c349f7c60100000074204d3bf475104c89eb4c89d8e9bbfdffffe95800000048b80100000000000000c349f7c401000000740b48b80100000000000000c3495649544c89eb4c89d8909090e885fdffff4883f8017412488b1c24488b4424084883c410e96dfdffff48b801000000000000004883c410c34d8d5efe50534983fb01750c49ba0300000000000000eb53488b5c24084a8b449bfc4c8b34244f8b6c9efc49534c89ebe829fdffff4883f80174224c8b24244d8d5c24fe4883c408483b65187303ff5548ebb349ba010000000000000049ba01000000000000004883c4084983fa01741c4c8b6424084d8b1c244c8b1424498b1a4c89d84883c410e9d1fcffff48b801000000000000004883c410c3909090|@4508,7945|23,0,1 43,0,0 63,0,0 113,0,0 166,0,0 205,0,@167 244,0,8 336,0,0 355,0,1 436,0,0 451,0,0 534,0,0 554,0,0 595,0,0 615,0,0 668,0,0 695,0,1 766,0,0 776,0,0 824,0,0 5633:S45|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e28322964656661756c742d283129 5634:C2,224|4883fb017501c350504c8b304983feff75504d8d7fd84c3b7d107303ff554049c747f8040000004d89fd49bc203cfaacaa2a00004d8965004c8b60084d8965184c8b1b4d895d104c8b53084d8955084989e149c701010000004989e14d896908eb504d8d7fd84c3b7d107303ff554049c747f8040000004d89fd49bc683dfaacaa2a00004d8965004c8b58084d895d184c8b134d8955104c8b4b084d894d084989e449c70424010000004989e44d896c24084d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b1c244c89184c8b5424084c8950084883c410c390|@5700,8073|44,0,@5635 124,0,@5637 5635:C2,200|90909090909090483b65187303ff55485250488b52189090ff124c8b74240850488b442408498b5610909090ff124c8b6c241050488b442410498b5508909090ff124d8d7fe84c3b7d107303ff554049c747f8020000004d89fc49c744240801000000498904244d8d7fe84c3b7d107303ff554049c747f8020000004d89fb4d8963084c8b14244d89134d8d7fd84c3b7d107303ff554049c747f8040000004c89f848c74018030000004c8b4c24084c8948104c89580848c700090000004883c420c39090909090|@5636,8191| 5636:S49|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e28322972657475726e46756e283229283129 5637:C3,392|90909090909090483b65187303ff55485250488b52189090ff124c8b74240850488b442408498b5610909090ff124c8b6c241050488b442410498b5508909090ff124d8d7fe84c3b7d107303ff554049c747f8020000004d89fc49c744240801000000498904244d8d7fe84c3b7d107303ff554049c747f8020000004d89fb4d8963084c8b14244d89134d8d7fe84c3b7d107303ff554049c747f8020000004d89f94d89590849c7011500000049514983fb01750c49b80300000000000000eb2f498b3b488b374883fefb75194d8b5b08483b65187303ff5548ebd349b8010000000000000049b801000000000000004983f8017431488b04249090ff15ae0000004d8d7fe84c3b7d107303ff554049c747f8020000004c89fb4889430848c703fbffffffeb04488b1c244d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48c742080100000048891a4d8d7fd84c3b7d107303ff554049c747f8040000004c89f848c7401803000000488b4c2410488948104889500848c700090000004883c428c390|@5636,8191,@4523|183,0,1 222,0,0 232,0,0 5638:S43|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329 5639:C7,688|90909090909090483b65187303ff55484989d64989c54c89e8909090ff15b60200004989c44c89e8ff15b2020000498b56f8488b4a104c8b19495649555349504954504983fb01750c49ba0100000000000000eb574d8b034d8b5308488b5c2408498b4008909090ff157a0200004883f80174204d8d7ff04c3b7d107303ff554049c747f8010000004d89fa498b1849891aeb184d89d3483b65187303ff5548eba149ba0100000000000000488b5424284d8d7fd84c3b7d107303ff554049c747f8040000004c89f948b88042faacaa2a00004889014c8b72f04c8971184c8b6af84c8969104c8b24244c8961084d8d7fd04c3b7d107303ff554049c747f8050000004d89fb49ba7845faacaa2a00004d89134c8b4424204d894320488b5c241849895b1849894b10498b4518498943084d8b65104d8b14245149534983fa01750c49b90100000000000000eb534d8b02488b5c2418498b40089090ff158e0100004883f80174204d8d7ff04c3b7d107303ff554049c747f8010000004d89f9498b18498919eb194d8b5208483b65187303ff5548eba549b90100000000000000505049f7c10100000075524d8d7fd84c3b7d107303ff554049c747f8040000004c89fa48b9304cfaacaa2a000048890a488b442410488942184d8b314c8972104c8b6c24384c896a084989e449c70424ffffffff4989e349895308eb6e488b5c2430488b442440488b542448909090ff15e2000000488b5424384883fa0175134889e148c701ffffffff4989e649894608eb4f4d8d7fd84c3b7d107303ff554049c747f8040000004c89f949bef84cfaacaa2a00004c893148894118488951104c8b6c24184c896908eb05e9120000004989e449c70424ffffffff4989e349894b084d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b14244c89104c8b4c24084c8948084883c450c3|@5673,8191,@1461,@2066,@2272,@2272,@5658|75,0,0 164,0,0 203,0,@5640 264,0,@5649 324,0,0 409,0,0 454,0,@5653 590,0,@5655 5640:C4,400|90909090909090483b65187303ff5548525348ff3348ff73084c8b421848bb0100000000000000488b521090ff124c8b304983fe0175734c8b6c240841f6c5017503ff55704d89ec4983c40270f44c8b58084d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b14244c8950084c89204c89daff124d8d7fd84c3b7d107303ff554049c747f8040000004d89f949c74118030000004989411049b85844faacaa2a0000eb05e9cb0000004d89410849c70109000000488b7c240840f6c7017503ff55704889fe4883c60270f4488b5c2418495156488b5b0848b8e844faacaa2a000090ff15ca00000048bb0045faacaa2a0000ff15c20000004d8d7fb84c3b7d107303ff554049c747f8080000004c89fa48c742380100000048c742300100000048c742280100000048c742200500000048c7421801000000488b0c2448894a1048894208488b4424084889024d8d7fe84c3b7d107303ff554049c747f8020000004c89f84889500848c700f3ffffff4883c430c34c8b6808488b4424104c89ea4883c420ff2290909090|@5648,8191,@303,@303|31,0,0 160,0,@5641 223,0,@5646 240,0,@5647 5641:O2|@5642,0 5642:O2|10,@5643 5643:O2|@441,@5644 5644:O2|@5645,0 5645:O5|-5,-2,1,0,0 5646:S3|65712d 5647:S5|282e2e2e29 5648:S78|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329657175616c697479466f72436f6e737472756374696f6e283329676574417267283229 5649:C6,1176|90909090909090483b65187303ff55484d8d7fe84c3b7d107303ff554049c747f8020000004d89fe49895e084989064983f901756d505050505049504c0bc341f6c00149587503ff55704c3bc375584c8b4a084989c04d23c141f6c0017503ff55704989c04d2bc14d8d400170f141f6c0017503ff55704c89c34883eb0270f44889e048c700f7ffffff4989e649c74608010000004989e049c7401001000000eb0ae9ad000000e9140000004889e0488958184989e649c7462001000000eb4c4c8b4a084889c34923d9f6c3017503ff55704889c3492bd9488d5b0170f14889e048c700f7ffffff4989e64d8946084989e049c74010030000004889e0488958184989e649c74620010000004d8d7fd04c3b7d107303ff554049c747f8050000004c89f84c8b04244c8900488b5c2408488958084c8b7424104c8970104c8b6c24184c8968184c8b4424204c8940204883c428c349504c0bc341f6c00149587503ff55704c3bc3746e4c8b6a084989c14d23cd41f6c1017503ff55704989c14d2bcd4d8d490170f14d8d7fd04c3b7d107303ff554049c747f8050000004c89fb48c74320010000004c894b1848c74310030000004c89430848c703f7ffffff49565253488b4218488d542418ff15ee0200004889c2eb05e9380000004d8d7fd84c3b7d107303ff554049c747f8040000004c89f848c7401803000000488b0c24488948104889500848c700090000004883c418c34989d54989c4498b45209090ff15a20200004955495449564d8b5d1849ba030000000000000049f7c301000000757148f7c001000000756d4983fa01746c498b3b488b374883fe0775654d8d7fe84c3b7d107303ff554049c747f8020000004c89fb488b571048895308488b4f0848890b4c8b304d8b2e4983fd0775594d8d7fe84c3b7d107303ff554049c747f8020000004d89fc4d8b56104d89542408eb14e98d000000e983000000e949000000e9330000004d8b4e084d890c244c8b4008534c89e3488b0424ff15ee0100004c89c34989c0eb3149b80100000000000000488b580850eb2049b80100000000000000488b580850eb0f49b80100000000000000488b5808504d89c24889d84d8b5b084883c408483b65187303ff5548e903ffffff49b901000000000000004d89d1eb034d89d14983f90174714c8b4c24104c8b442408498b79084c89c64823f740f6c6017503ff55704c89c6482bf7488d760170f140f6c6017503ff55704889f34883eb0470f44d8d7fd04c3b7d107303ff554049c747f8050000004c89f848c74020010000004889581848c740100100000048c7400801000000eb05e90c00000048c700f7ffffff4883c418c34c8b4c24104c8b442408498b79084c89c64823f740f6c6017503ff55704c89c6482bf7488d760170f140f6c6017503ff55704889f34883eb0270f44d8d7fd04c3b7d107303ff554049c747f8050000004c89fa48c742200100000048895a1848c742100100000048c742080100000048c702f7ffffff52498b4118488d542420909090ff157e0000004889c14d8d7fd84c3b7d107303ff554049c747f8040000004c89f848c74018030000004c8b34244c8970104889480848c700090000004883c420c3909090|@5651,8191,@5652,@2239,@2022,@5650|562,0,1 748,0,0 765,0,0 782,0,0 825,0,0 5650:C2,120|90909090909090483b65187303ff55484883f801750b48b80100000000000000c34c8b72f85248ff7008488b5ae8488b00498b5610909090ff1250488b442408488b542410e8bdffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fd498945084c8b24244d8965004c89e84883c418c39090|@417,8191|24,0,0 5651:S83|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329657175616c697479466f72436f6e737472756374696f6e2833297265637572736976654571283429 5652:C2,120|90909090909090483b65187303ff55484883f801750b48b80100000000000000c34c8b72f05248ff7008488b5af8488b00498b5610909090ff1250488b442408488b542410e8bdffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fd498945084c8b24244d8965004c89e84883c418c39090|@417,8191|24,0,0 5653:C2,40|90909090909090483b65187303ff55484c8b4a084c8b4210488b5808488b00488b5218ff22909090|@5654,8191| 5654:S86|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329657175616c697479466f72436f6e737472756374696f6e2833297265637572736976654571283129283129 5655:C3,112|90909090909090483b65187303ff55485250488b52189090ff124c8b74240850498b4610488d542418909090ff15660000004989c54d8d7fd84c3b7d107303ff554049c747f8040000004c89f848c74018030000004c8b24244c8960104c89680848c700090000004883c418c3909090|@5657,8191,@5656| 5656:C2,120|90909090909090483b65187303ff55484883f801750b48b80100000000000000c34c8b72f85248ff7008488b5af0488b00498b5608909090ff1250488b442408488b542410e8bdffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fd498945084c8b24244d8965004c89e84883c418c39090|@417,8191|24,0,0 5657:S72|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329657175616c697479466f72436f6e737472756374696f6e283329283129 5658:C14,1192|90909090909090483b65187303ff55484989d64989c54c89e8909090ff15ae0400004989c44c89e8ff15aa040000498b56f8488b4a284c8b1941f6c3017503ff55704d89da4983c20270f44c89114c8b194d8d7fe84c3b7d107303ff554049c747f8020000004d89fa4d8962084d891a4c8b62104d8b0c244d8d7fe84c3b7d107303ff554049c747f8020000004d89f84d8948084d89104d8904244989c24c89e8909090ff1536040000495653495249535049b901000000000000004883f80175054d89c8eb2e41f6c1017503ff55704c89cb4883c30270f4488b40084989d9483b65187303ff5548ebd149b80100000000000000488b5c2420488b53f8488b4a18f6c1017503ff55704889c84883c00270f44983f80175054989c6eb10a8017503ff55704989c64983c60270f44d8d7fd04c3b7d107303ff554049c747f8050000004d89fd49bcf053faacaa2a00004d896500498945204c8b5bf04d895d184c8b14244d8955104d894508495549564c8b4c242849f7c10100000075734d8b61084983fc0175404889c7498b019090ff15520300004883f801740f4889fa48bfb88cedacaa2a0000eb184950574c89c8488d5424489090ff15320300004889c7eb5f495052eb5f4950504c89c8488d54244890ff151e0300004d8d7fd84c3b7d107303ff554049c747f804000000eb05e9360000004c89ff4889471849bbb88cedacaa2a00004c895f1049baf057faacaa2a00004c89570848c70705000000eb5be956000000e9510000004950504c89c8488d54244890ff15c20200004d8d7fd84c3b7d107303ff554049c747f8040000004c89ff4889471849b8b88cedacaa2a00004c89471048bef057faacaa2a00004889770848c7070500000057488b5c243848b8e844faacaa2a0000909090ff157202000048bb3058faacaa2a0000ff156a0200004d8d7fb84c3b7d107303ff554049c747f8080000004c89fb48c743380100000048c743300100000048c74328ffffffff48c743200500000048c7431801000000488b5424184889531048894308488b0c2448890b4d8d7fe84c3b7d107303ff554049c747f8020000004c89f84889580848c700f3ffffff4c8b6c24104983fd0175054989c6eb7150488b5c244048b8e844faacaa2a0000909090ff15d201000048bb4858faacaa2a0000ff15ca0100004d8d7fb84c3b7d107303ff554049c747f8080000004d89fc49c74424380100000049c74424300100000049c7442428ffffffff4c8b5c24184d895c242049c744241801000000eb05e93e0000004c8b5424104d8954241049894424084c8b0c244d890c244d8d7fe84c3b7d107303ff554049c747f8020000004d89fe4d89660849c706f3ffffff4883c4084c8b442448498b78f8488b7720488b1e4d8d7fd84c3b7d107303ff554049c747f8040000004c89fa48c74218010000004c897210488b4c243048894a0848c702f9ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89f848c74008010000004889104883f80175054989deeb16504889d8488d542458ff15c60000004989c64883c4084c89364d8d7fe04c3b7d107303ff554049c747f8030000004c89f849bd6058faacaa2a00004c8928488948104c8b67184c8960084883c450c3909090909090|@5675,8191,@1461,@2066,@2239,@5676,@5678,@5678,@5678,@303,@303,@303,@303,@5674|180,0,0 237,0,0 328,0,@5659 417,0,@440 511,0,@440 525,0,@5667 604,0,@440 618,0,@5667 645,0,@5646 664,0,@5669 821,0,@5646 840,0,@5670 1158,0,@5671 5659:C3,88|90909090909090483b65187303ff554850524c8b720849bd01000000000000004d89f44d23e541f6c4017503ff55704d89ec4d2be64d8d64240170f0488b5a104c89e0488d542410ff15320000004883c410c39090909090|@5665,8191,@5660|24,0,0 5660:C3,272|90909090909090483b65187303ff55484883fb01750e4c8b72f0488b42f8498b5618ff224c8b334d8b2e4983fd0775704d8d7fe84c3b7d107303ff554049c747f8020000004d89fc4d8b5e104d895c24084d8b56084d8914244989d14989c0488b7b084c89e3498b41f89090ff15c60000004883f8017460498b71f04d8d7fe04c3b7d107303ff554049c747f8030000004c89fb48bad855faacaa2a0000eb05e9530000004889134c894310488b4e2048894b084d8d7fe84c3b7d107303ff554049c747f8020000004c89f84889580848c700ffffffffc341f6c0017503ff55704c89c64883c60270f44889fb4889f04c89cae90fffffff48b8d856faacaa2a000090ff555848b80100000000000000|@5666,8191,@2022|150,0,@5661 250,0,@5663 264,0,0 5661:C2,96|4c8b304c8b6a084d89f44d23e541f6c4017503ff55704d89f44d2be54d8d64240170f04d8d7fd04c3b7d107303ff554049c747f8050000004c89f848c74020010000004c89601848c74010030000004c8b72104c89700848c700f7ffffffc390|@5662,7173| 5662:S88|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329657175616c697479466f7244617461747970652832296e6577547646756e28312966696e645476283229283129 5663:O3|@7377,@215,@5664 5664:S27|66696e6454763a206e6f7420612074797065207661726961626c65 5665:S76|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329657175616c697479466f7244617461747970652832296e6577547646756e283129 5666:S85|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329657175616c697479466f7244617461747970652832296e6577547646756e28312966696e645476283229 5667:O4|4,@5643,@5668,1 5668:O2|-3,I251 5669:S3|283229 5670:S3|283129 5671:C2,96|4c8b304c8b6a084d89f44d23e541f6c4017503ff55704d89f44d2be54d8d64240170f04d8d7fd04c3b7d107303ff554049c747f8050000004c89f848c74020010000004c89601848c74010030000004c8b72104c89700848c700f7ffffffc390|@5672,7173| 5672:S68|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329657175616c697479466f724461746174797065283229283129 5673:S69|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329657175616c697479466f72436f6e737472756374696f6e283329 5674:C2,88|90909090909090483b65187303ff55484883f8017505488b42a8c35248ff30488b40089090e8ddffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b04244889024889d04883c410c3909090|@1847,5| 5675:S65|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329657175616c697479466f724461746174797065283229 5676:C7,200|90909090909090483b65187303ff55484989c6498b460890ff15d20000004883f801746f498b4608ff15ca0000004883f80375644d8b6e104c89e890ff15be0000004883f80174554c89e890ff15b60000009090ff15b600000048f7c001000000741948b8b055edacaa2a00009090ff555849bc01000000000000004989c44d8b5c24084c89d848baf02c600000000000eb0fe922000000e912000000e902000000ff2248b80100000000000000c348b80100000000000000c348b80100000000000000c3909090|@5677,7685,@2610,@2612,@2280,@2267,@5463|101,0,@339 116,0,0 137,0,I105 166,0,0 177,0,0 188,0,0 5677:S74|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329657175616c697479466f7244617461747970652832296973456e756d283129 5678:C12,608|90909090909090483b65187303ff55484883f801750b48b8d095edacaa2a0000c34c8b304989d24d8b4e084d8b4610498b7e18488b7008488b009090ff15460200004883f80174084889f04c89d2ebb74952495149505756498b5ac84c89c090ff152a02000050488b442420ff15260200004883f801746d488b442420909090ff151a0200004883f803755e488b1c24488b0b4883f90b751648b8010000000000000090ff15fe0100004889c2eb534883f9fb751648b8010000000000000090ff15ea0100004889c2eb374d8d7fe04c3b7d107303ff554049c747f8030000004c89faeb0ae961010000e94b01000048c742100100000048895a0848c7020d0000004d8d7fd84c3b7d107303ff554049c747f8040000004c89f848c74018030000004889501049bea08cedacaa2a00004c89700848c700090000004c8b2c244d8b5d004983fb0b751a504c89eb48b8010000000000000090ff155a0100004989c4eb4f4983fbfb751a504c89eb48b8010000000000000090ff15420100004989c4eb2f4d8d7fe04c3b7d107303ff554049c747f8030000004d89fc49c7442410010000004d896c240849c704240d000000504d8d7fd84c3b7d107303ff554049c747f8040000004d89fa49c74218030000004d89621049b9a044faacaa2a00004d894a0849c702090000004952488b442418488b5424389090e809feffff4989c04d8d7fd84c3b7d107303ff554049c747f8040000004c89f84c894018488b3c2448897810488b7424084889700848c700050000004883c440c3488d54243090ff15820000004883c430c3488d542430ff157a0000004883c430c39090909090|@5687,8191,@5676,@5569,@2610,@2612,@4802,@4802,@4802,@4802,@5679,@5679|24,0,@478 155,0,0 183,0,0 296,0,@439 335,0,0 367,0,0 472,0,@5644 5679:C8,824|90909090909090483b65187303ff55484c8b72f852498b5ed8488b42e0909090ff153a0300004c8b2c244d8b65f84d8d7fe04c3b7d107303ff554049c747f8030000004d89fb49baa062faacaa2a00004d89134d8b4de84d894b104d8b4424c84d8943084d8d7fe84c3b7d107303ff554049c747f8020000004c89ff48beb064faacaa2a00004889374c895f084d8d7fe84c3b7d107303ff554049c747f8020000004c89fb48ba8065faacaa2a00004889134c895b084d8d7fe84c3b7d107303ff554049c747f8020000004c89f94d8b7424e04c8971084c89014d8d7fe84c3b7d107303ff554049c747f8020000004d89fb49895b0849893b4d8b5424f8514d8b4424d04c89db498b52f890ff124c8b004983f8017514488b7808488b04244889fa9090ff124989c1eb1948b8e065faacaa2a00009090ff555849b90100000000000000488b742408488b5ed0488b0b4883f90b7519495148b801000000000000009090ff15fe0100004889c2eb4d4883f9fb751a495148b80100000000000000909090ff15e60100004889c2eb2d4d8d7fe04c3b7d107303ff554049c747f8030000004c89fa48c742100100000048895a0848c7020d00000049514d8d7fd84c3b7d107303ff554049c747f8040000004c89f848c74018030000004889501049bea08cedacaa2a00004c89700848c700090000004c8b6c24104d8b65d04d8b14244983fa0b751b504c89e348b801000000000000009090ff155a0100004989c3eb4c4983fafb751a504c89e348b8010000000000000090ff15420100004989c3eb2c4d8d7fe04c3b7d107303ff554049c747f8030000004d89fb49c74310010000004d89630849c7030d000000504d8d7fd84c3b7d107303ff554049c747f8040000004d89f949c74118030000004d89591049b8a044faacaa2a00004d89410849c701090000004d8d7fd84c3b7d107303ff554049c747f8040000004c89ff48bed095edacaa2a000048897718488b5c240848895f104c894f0848c70705000000488b54241857488b42d8488b52f8ff15920000004889c14d8d7fd84c3b7d107303ff554049c747f8040000004c89f8488948184c8b34244c8970104c8b6c24084c89680848c700050000004883c428c3909090909090|@5688,8191,@3237,@4802,@4802,@4802,@4802,@5678|72,0,@5680 126,0,@5682 167,0,@5684 301,0,@5685 316,0,0 346,0,0 377,0,0 482,0,@439 526,0,0 559,0,0 661,0,@5644 706,0,@478 5680:C5,336|90909090909090483b65187303ff5548525049504889c3488b421090ff15560100004c8b284983fd0b75184889c348b80500000000000000ff15420100004989c6eb4b4983fdfb751a4889c348b805000000000000009090ff152a0100004989c6eb2b4d8d7fe04c3b7d107303ff554049c747f8030000004d89fe49c74610050000004989460849c7060d0000004c8b6424104c8b5c24084d8b5424084d89d94d23ca41f6c1017503ff55704d89d94d2bca4d8d490170f14d8d7fd04c3b7d107303ff554049c747f8050000004d89f849c74020010000004d89481849c7401003000000488b3c244989780849c700f7ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fe48c74608010000004c89064d8d7fd84c3b7d107303ff554049c747f8040000004c89f848c74018030000004c8970104889700848c700090000004883c418c3909090909090|@5681,8191,@5569,@4802,@4802|48,0,2 78,0,2 5681:S93|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329657175616c697479466f72446174617479706528322970726f63657373436f6e737472732831296465737472756374283329 5682:C2,40|90909090909090483b65187303ff554849b8ffffffffffffffff488b5808488b00488b5208ff2290|@5683,8191|18,0,-1 5683:S96|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329657175616c697479466f72446174617479706528322970726f63657373436f6e737472732831296465737472756374283129283129 5684:C2,40|90909090909090483b65187303ff554849b8fdffffffffffffff488b5808488b00488b5208ff2290|@5683,8191|18,0,-2 5685:O3|@7377,@215,@5686 5686:S21|6170706c7945713a2077726f6e6720726573756c74 5687:S82|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329657175616c697479466f72446174617479706528322970726f63657373436f6e73747273283129 5688:S84|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b654571283329657175616c697479466f72446174617479706528322970726f63657373436f6e737472732831292f32 5689:C2,128|90909090909090483b65187303ff55484d8d7fd84c3b7d107303ff554049c747f8040000004d89fe49bdb067faacaa2a00004d892e4c8b6af04d896e184c8b62f84d896610498946084d8d7fe84c3b7d107303ff554049c747f8020000004c89f849bb586cfaacaa2a00004c89184c897008488b5ae8498b542408ff22909090|@5699,8191|42,0,@5690 99,0,@5697 5690:C3,56|90909090909090483b65187303ff5548524950535048bb0100000000000000488b4208488d542420ff15320000004883c420c39090909090|@5695,8191,@5691|23,0,0 5691:C2,360|90909090909090483b65187303ff55484883f801750b48b8b88cedacaa2a0000c34c8b304d8d7fe04c3b7d107303ff554049c747f8030000004d89fd49bcc869faacaa2a00004d89650049895d104c8b62e04d8965084d8d7fe04c3b7d107303ff554049c747f8030000004d89fb49baf06afaacaa2a00004d891349895b104c8b52e84d8953084c8b4af84d8d7fe84c3b7d107303ff554049c747f8020000004d89f84d8958084d8928525348ff700848ff72f04c89c74d8b41184889fb498b4608498b51109090ff12488b184883fb017510488b5008488b042490ff124889c6eb1948b8e065faacaa2a00009090ff555848be0100000000000000488b4c2410f6c1017503ff55704889c84883c00270f4564889c3488b442410488b54242090e8e1feffff4989c64d8d7fd84c3b7d107303ff554049c747f8040000004c89f849bdd095edacaa2a00004c8968184c8970104c8b24244c89600848c700050000004883c428c390|@5696,8191|24,0,@440 62,0,@5692 112,0,@5694 229,0,@5685 244,0,0 323,0,@478 5692:C4,128|90909090909090483b65187303ff554848ff7210488b5208ff124c8b304983fe0b75114889c3488b04244883c408ff25740000004983fefb75114889c3488b04244883c408ff25650000004989c54d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c8b24244c8960104c89680848c7000d0000004883c408c39090|@5693,8191,@4802,@4802| 5693:S73|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b65457128332965715475706c65283329636f6d62696e65456e7472696573283229283129 5694:C4,128|90909090909090483b65187303ff554848ff7210488b5208ff124c8b304983fe0b75114889c3488b04244883c408ff25740000004983fefb75114889c3488b04244883c408ff25650000004989c54d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c8b24244c8960104c89680848c7000d0000004883c408c39090|@5693,8191,@4802,@4802| 5695:S53|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b65457128332965715475706c65283329 5696:S70|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b65457128332965715475706c65283329636f6d62696e65456e7472696573283229 5697:C2,40|90909090909090483b65187303ff55484c8b4010488b5808488b00488b5208ff2290909090909090|@5698,8191| 5698:S53|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b65457128332965715475706c65283129 5699:S45|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e2832296d616b6545712833292f34 5700:S46|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e28322972657475726e46756e283229 5701:O1|@5702 5702:C2,16|48b85036faacaa2a0000c39090909090|@5703,1|2,0,@5626 5703:S48|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e283229726573756c74436f64652d283129 5704:O2|@850,@5705 5705:O2|@5706,0 5706:O3|6,@441,1 5707:S8|657175616c697479 5708:S34|56414c55455f4f505328292e67656e457175616c69747946756e6374696f6e283229 5709:C2,32|4883f8fb750b48b80300000000000000c348b80100000000000000c390909090|@5710,1|8,0,1 19,0,0 5710:S8|4e6f74457175616c 5711:C6,192|90909090909090483b65187303ff55485053495149524889d8909090ff15c60000009090ff15c60000004d8d7fd04c3b7d107303ff554049c747f8050000004d89fe49bd4070faacaa2a00004d892e4c8b6424104d8966204c8b5c24184d895e184c8b5424084d8956104c8b0c244d894e08504d89f04889c34c89d848baa040f1acaa2a00009090ff156a0000004989c0488b0424909090ff1562000000488b7c24304c89074889470848b801000000000000004883c428c208009090909090|@5731,8191,@2959,@5724,@2448,@2066|68,0,@5712 126,0,@2447 172,0,0 5712:C5,168|90909090909090483b65187303ff55484989d648bb7b00000000000000498b461848bab01860000000000090ff124883f801740b48b8c036faacaa2a0000c34d89f3498b431848ba10a9f2acaa2a0000ff157a0000004953ff157a0000004c8b14244d8b4a204d8b4218498b7a10498b72084989f24c89cb4989f94c89c24989c04889d94889d34889c89090ff154e00000048b8380dedacaa2a00004883c408c390909090909090|@5720,8191,@2942,@5721,@5713|21,0,61 35,0,I24 54,0,@5629 72,0,@2941 148,0,@217 5713:C9,472|90909090909090483b65187303ff55485349504951495290ff15e20100004c8b7424085048bb280af0acaa2a0000498b464848bae8d7edacaa2a0000ff15c60100004989c5488b0424909090ff15be0100004883f801746d4d89ec488b042490ff15b2010000488b5c242048b88073faacaa2a0000909090ff15a20100004d8d7fe84c3b7d107303ff554049c747f8020000004d89fb49bab873faacaa2a00004d8913498943084c8b4c24104d8b4110488b7c24284c89442428498b71184889742420eb05e94e000000498b592048895c2418498b51284889542410498b4930488b44240848894c24084d8b71384c89342449ff714049ff71484d8b51084d8b0949b803000000000000004889c34c89d857ff25100100004d8d7fd04c3b7d107303ff554049c747f8050000004d89fc49bb1074faacaa2a00004d891c244c8b5424204d895424204c8b4c24184d894c24184c8b04244d894424104d896c2408488b7c2410488b7710488b5c24284889742428488b57184889542420488b4f2048894c2418488b472848894424104c8b77304c8b6c24084c897424084c8b5f384c891c2448ff774048ff77484c8b57084c8b0f49b80300000000000000534c89eb4c89e04c8b2c244883c4084955ff255c00000090909090|@5723,8191,@2959,@974,@1458,@1459,@303,@1124,@1124|38,0,@1964 52,0,@972 109,0,@5714 152,0,@5715 259,0,1 306,0,@5716 437,0,1 5714:S34|556e61626c6520746f207265736f6c7665206f7665726c6f6164696e6720666f7220 5715:C2,32|90909090909090483b65187303ff55484c8b7018488b42084c89f2ff22909090|@1121,8191| 5716:C7,208|90909090909090483b65187303ff554852504c8b703048b82828f0acaa2a00004c89f290ff124c8b2c244c8b64240849ff751848bb4075faacaa2a0000498b4424209090ff15ae0000004c8b5c2410498b5b1890ff15a600000048bb6875faacaa2a0000ff159e000000488b14249090ff124c8b54241048b80100000000000000909090ff15860000004d8b4a104d8b420849ba03000000000000004c89cf4989c14c89c64c8b4424084889f34889f8ff1562000000488b5c240848b80100000000000000488b53104883c418ff2290|@5719,8191,@303,@303,@303,@2017,@2013|24,0,@1992 53,0,@5717 92,0,@5718 121,0,0 148,0,1 189,0,0 5717:S18|206973206f7665726c6f61646564206f6e20 5718:S9|20627574206e6f7420 5719:S31|545950455f5452454528292e6f7665726c6f61644572726f72283529283129 5720:S45|56414c55455f4f505328292e6765744f7665726c6f6164496e7374616e63652836296e6f74466f756e64283129 5721:C6,120|90909090909090483b65187303ff55484883f801750b48b8b01e600000000000c34c8b70084983fe01750d4c8b28498b4500ff25680000004c8b28498b450090ff1562000000495648bb5f000000000000009090ff155600000050488b44240890e8a1ffffff4889c3488b04244883c410ff254100000090|@5722,8191,@2066,@2066,@303,@303|24,0,I48 74,0,47 5722:S64|56414c55455f4f505328292e6765744f7665726c6f6164496e7374616e63652836296e6f74466f756e642831296d616b654f7665726c6f61644c697374283129 5723:S28|545950455f5452454528292e6f7665726c6f61644572726f72283529 5724:C56,2264|90909090909090483b65187303ff55484989c54c89e89090ff15e20800004883f801746f4c89e890ff15da0800004989c6498b5e08498b06ff15d20800004d89f54889c34889d890ff15ca0800004883f80174684889d890ff15c208000049555048f7c00100000075574c8b304c8b680848b8589aedacaa2a000090ff15a60800004889c34c89f0ff15a20800004d89eaeb05e99b0700004889da4889c34889d0909090ff158e0800004883f801741648ba0300000000000000eb2ce967070000e9180000004c89d0483b65187303ff5548eb8d48ba010000000000000048ba01000000000000004883fa01746d48b8589aedacaa2a0000ff154208000050504889c148b8589aedacaa2a0000909090ff15320800009090ff15320800004883f80174464d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89f849be589aedacaa2a00004c89304989e549c74500ffffffffeb05e99d0000004989e44989442408eb1b4889e048c700010000004989e649bd589aedacaa2a00004d896e084d8d7fe84c3b7d107303ff554049c747f8020000004d89fc4c8b1c244d891c244c8b5424084d895424084d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c8960104889480848c700010000009090ff157a0700004889c3488b4424189090ff157207000048b8589aedacaa2a00004883c420c3488b142448f7c201000000755e4c8b324c8b6a0848b89042f1acaa2a000090ff15460700004989c44c89f0ff15420700004d89ea4889c34c89e090ff153a0700004883f801740c48b90300000000000000eb224c89d2483b65187303ff5548eba348b9010000000000000048b901000000000000004883f901746f48b89042f1acaa2a00009090ff15f606000050504889c148b89042f1acaa2a0000909090ff15e60600009090ff15e60600004883f80174464d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89f849be9042f1acaa2a00004c89304989e549c74500ffffffffeb05e99d0000004989e44989442408eb1b4889e048c700010000004989e649bd9042f1acaa2a00004d896e084d8d7fe84c3b7d107303ff554049c747f8020000004d89fc4c8b1c244d891c244c8b5424084d895424084d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c8960104889480848c700010000009090ff152e0600004889c3488b4424189090ff152606000048b89042f1acaa2a00004883c420c3488b0c2448f7c101000000755648b80882faacaa2a0000ff15020600004989c6488b01ff15fe0500004c8b51084889c34c89f0ff15f60500004883f801740c48b80300000000000000eb224c89d1483b65187303ff5548ebab48b8010000000000000048b801000000000000004883f801747348b80882faacaa2a00009090ff15b205000050504989c648b80882faacaa2a0000909090ff15a20500004d89f5909090ff159e0500004883f80174454d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fc49bb0882faacaa2a00004d891c244989e249c702ffffffffeb05e9990000004889e34c896308eb1c4989e449c70424010000004989e349ba0882faacaa2a00004d8953084d8d7fe84c3b7d107303ff554049c747f8020000004c89fb488b1424488913488b4c240848894b084d8d7fe04c3b7d107303ff554049c747f8030000004c89f8488958104c89680848c70001000000ff15ea0400004889c3488b4424189090ff15e204000048b80882faacaa2a00004883c420c3488b042448f7c001000000755e4c8b284c8b600848b87082faacaa2a000090ff15b60400004989c34c89e8ff15b20400004d89e24889c34c89d890ff15aa0400004883f801740c49be0300000000000000eb224c89d0483b65187303ff5548eba349be010000000000000049be01000000000000004983fe01747348b87082faacaa2a00009090ff156604000050504989c648b87082faacaa2a0000909090ff15560400004d89f5909090ff15520400004883f80174454d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fc49bb7082faacaa2a00004d891c244989e249c702ffffffffeb05e9990000004889e34c896308eb1c4989e449c70424010000004989e349ba7082faacaa2a00004d8953084d8d7fe84c3b7d107303ff554049c747f8020000004c89fb488b1424488913488b4c240848894b084d8d7fe04c3b7d107303ff554049c747f8030000004c89f8488958104c89680848c70001000000ff159e0300004889c3488b4424189090ff159603000048b87082faacaa2a00004883c420c34c8b342449f7c601000000755648b8109bedacaa2a0000ff15720300004989c4498b06ff156e0300004d8b56084889c34c89e0ff15660300004883f801740c49bd0300000000000000eb224d89d6483b65187303ff5548ebab49bd010000000000000049bd01000000000000004983fd01746f48b8109bedacaa2a00009090ff152203000050504989c548b8109bedacaa2a0000909090ff15120300009090ff15120300004883f80174454d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fc49bb109bedacaa2a00004d891c244989e249c702ffffffffeb05e9990000004889e34c896308eb1c4989e449c70424010000004989e349ba109bedacaa2a00004d8953084d8d7fe84c3b7d107303ff554049c747f8020000004c89fb488b1424488913488b4c240848894b084d8d7fe04c3b7d107303ff554049c747f8030000004c89f8488958104c89680848c70001000000ff155e0200004889c3488b4424189090ff155602000048b8109bedacaa2a00004883c420c348b8008eeeacaa2a00004883c410c348b8008eeeacaa2a0000c34c89e89090ff152a0200004883f801746d4c89e890ff15220200004c8b18488b4010909090ff151a0200004d89da4889c34889d890ff15120200009090ff15120200004883f80174044889d8c34889d890ff15060200004889c14889d8ff15020200004c89d3909090ff15fe01000049b803000000000000004889c3eb05e9110000004889c8909090ff15e6010000e940f7ffff48b8008eeeacaa2a0000c3909090909090|@5732,8191,@1458,@1459,@2044,@2060,@2042,@1461,@1461,@2272,@2066,@1461,@1463,@1465,@1454,@1461,@1461,@2272,@2066,@1461,@1463,@1465,@1454,@1461,@1461,@2272,@2066,@1461,@1463,@1465,@1454,@1461,@1461,@2272,@2066,@1461,@1463,@1465,@1454,@1461,@1461,@2272,@2066,@1461,@1463,@1465,@1454,@2062,@2063,@2064,@2226,@2015,@2226,@2239,@2463,@2465|115,0,@516 178,0,1 214,0,0 224,0,0 240,0,@516 261,0,@516 323,0,@516 377,0,@516 496,0,@516 531,0,@2452 582,0,1 608,0,0 618,0,0 634,0,@2452 657,0,@2452 719,0,@2452 773,0,@2452 892,0,@2452 920,0,@5725 970,0,1 996,0,0 1006,0,0 1022,0,@5725 1045,0,@5725 1111,0,@5725 1165,0,@5725 1280,0,@5725 1315,0,@5728 1366,0,1 1392,0,0 1402,0,0 1418,0,@5728 1441,0,@5728 1507,0,@5728 1561,0,@5728 1676,0,@5728 1704,0,@522 1754,0,1 1780,0,0 1790,0,0 1806,0,@522 1829,0,@522 1891,0,@522 1945,0,@522 2060,0,@522 2075,0,@1418 2090,0,@1418 2212,0,1 2249,0,@1418 5725:O6|@5727,0,0,0,@518,@5726 5726:O2|-1,@7484 5727:S4|776f7264 5728:O6|@5730,0,0,0,@518,@5729 5729:O2|-1,@7485 5730:S4|63686172 5731:S34|56414c55455f4f505328292e6765744f7665726c6f6164496e7374616e6365283629 5732:S48|545950455f5452454528292e74797065436f6e73747246726f6d4f7665726c6f61642832297072656654797065283129 5733:C2,32|4883f801750b48b80300000000000000c348b80100000000000000c390909090|@5734,1|8,0,1 19,0,0 5734:S11|4164644f7665726c6f6164 5735:S40|56414c55455f4f505328292e6170706c7946756e6374696f6e2836293c7061747465726e3e2d2f32 5736:S45|535452554354555245535f28292e67656e636f646553747275637473283229636f646553747264656373283429 5737:C4,248|90909090909090483b65187303ff55484883fb01751e49c7010100000049c74108010000004989411048b80100000000000000c34989c64d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8970084c8b2b4c89284950495148ff73084c89c2ff12505050504c8d4c24084c8b442430488b5c2420488b4010e885ffffff4c8b24244c8b5424084983fa0175064d8b1c24eb12498b0424488d542438ff157a0000004989c34c8b4424104983f80175074d8b4c2408eb16498b442408488d542438909090ff155a0000004989c1488b7c24284c891f4c894f08488b7424184889771048b801000000000000004883c438c3909090|@5739,8191,@5740,@5738|43,0,0 232,0,0 5738:C2,88|90909090909090483b65187303ff55484883f8017505488b42d8c35248ff30488b40089090e8ddffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b04244889024889d04883c410c3909090|@1847,5| 5739:S41|535452554354555245535f28292e67656e636f6465537472756374732832296d617050616972283429 5740:C2,88|90909090909090483b65187303ff55484883f8017505488b42d0c35248ff30488b40089090e8ddffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b04244889024889d04883c410c3909090|@1847,5| 5741:C2,88|90909090909090483b65187303ff55484883f8017505488b42b0c35248ff30488b40089090e8ddffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b04244889024889d04883c410c3909090|@1847,5| 5742:C6,1512|90909090909090483b65187303ff55484d8d7fe84c3b7d107303ff554049c747f8020000004d89fe49bdb08dfaacaa2a00004d892e4d8956084d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fd4d894d004d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89f949c70101000000505349504952495649554951488b7b4848bb388efaacaa2a00004889f848bae8d7edacaa2a0000909090ff1562050000488b7424285048bbe08ffaacaa2a0000488b464848bae8d7edacaa2a0000ff1546050000488b5c243050488b53484883fa01750c48b90100000000000000eb574c8b224c8b5a084c89e048ba8891faacaa2a00009090ff15160500004883f801741d4d8d7ff04c3b7d107303ff554049c747f8010000004c89f94c8921eb184c89da483b65187303ff5548eba148b9010000000000000048f7c1010000007519488b0148ba0892faacaa2a000090ff15c60400004989c2eb0a49ba9092faacaa2a00004d8d7fd04c3b7d107303ff554049c747f8050000004d89f949b81093faacaa2a00004d89014d895120488b7c240849897918488b74241049897110488b5c2418498959084d8d7fd84c3b7d107303ff554049c747f8040000004c89fa48b968abfaacaa2a000048890a488b0424488942184c8b7424204c89721048895a084d8d7fc84c3b7d107303ff554049c747f8060000004d89fd49bc90b3faacaa2a00004d8965004989452849895d204c8b5c24384d895d184c8b4424504d894510498955084d8d7fc84c3b7d107303ff554049c747f8060000004c89f949bc28b7faacaa2a00004c8921488941284c895120488979184c894110488959084d8d7fe84c3b7d107303ff554049c747f8020000004d89fa48bf00c1faacaa2a000049893a4d895a084d8d7fe04c3b7d107303ff554049c747f8030000004d89fc48bf68c5faacaa2a000049893c244d895424104d895c24084d8d7fe84c3b7d107303ff554049c747f8020000004c89ff49bb40fbfaacaa2a00004c891f4c8967084d8d7fd84c3b7d107303ff554049c747f8040000004d89fb49be70fdfaacaa2a00004d89334c8b7424284d8973184989531049895b0850504989e649c706010000004989e648bbc802fbacaa2a000049895e084d8d7fe84c3b7d107303ff554049c747f8020000004d89fe488b1c2449891e488b5c240849895e0850504889e348c703010000004889e348bee002fbacaa2a0000488973084d8d7fe84c3b7d107303ff554049c747f8020000004c89fb488b3424488933488b7424084889730850504889e648c706010000004889e648b82803fbacaa2a0000488946084d8d7fe84c3b7d107303ff554049c747f8020000004c89fe488b0424488906488b442408488946084d8d7fd84c3b7d107303ff554049c747f8040000004c89f849b89003fbacaa2a00004c89004c8958184c8970104c8b7424484c8970084d8d7fe04c3b7d107303ff554049c747f8030000004d89fb49b83831fbacaa2a00004d8903498953104d8973084d8d7fb84c3b7d107303ff554049c747f8080000004c89fa49b8f83bfbacaa2a00004c890248897a384c8b4424504c8942304c8972284c8b4424584c89422048895a18488942104c895a084d8d7fc84c3b7d107303ff554049c747f8060000004c89fb49bbd84ffbacaa2a00004c891b4c8963284c8b6424504c89632048897318488943104c8973084d8d7f804c3b7d107303ff554049c747f80f0000004d89fb48be6054fbacaa2a000049893349897b704d89536849895360488b542440498953584d894b50488b442468498943484c8b9424800000004d89534049895b384c8b4c24304d894b3049894b284d8943204d8963184d8973104d896b084d8d7fe84c3b7d107303ff554049c747f8020000004d89f84d895008488b7c24704989384d8d7fe84c3b7d107303ff554049c747f8020000004c89fe48c74608010000004c890650504989e14c8b842498000000488b5c24704889f04c89da9090ff124d8d7fe84c3b7d107303ff554049c747f8020000004c89f8488b1c24488918488b542408488950084881c488000000c21000|@6136,8191,@974,@974,@5760,@5762|42,0,@5743 144,0,@5745 157,0,@972 182,0,@5752 196,0,@972 228,0,0 250,0,@5759 317,0,0 339,0,@5761 361,0,@5763 395,0,@5766 463,0,@5805 521,0,@5818 589,0,@5823 646,0,@5832 687,0,@5839 735,0,@5901 776,0,@5908 821,0,@5918 890,0,@5919 959,0,@5922 1037,0,@5926 1091,0,@5967 1136,0,@5980 1211,0,@6006 1273,0,@6015 5743:C2,32|488b42084c8b3041f6c6017503ff55704d89f54983c50270f44c89284c89f0c3|@5744,6149| 5744:S32|50415253455f5452454528292e67656e636f64652837296d6b41646472283129 5745:O3|@5747,@5749,@5746 5746:O2|@5751,@7439 5747:O2|@5748,@7439 5748:C2,48|4c8b304c8b6a084d3bf5751648b80300000000000000c348b80100000000000000c348b80100000000000000c3909090|@966,6149|14,0,1 25,0,0 36,0,0 5749:O2|@5750,@7439 5750:C2,48|4989c64d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c89701048c740088b0000004c8b72084c8930c390|@966,4101| 5751:C2,56|4c8b304c8b6a084d3bf57510488b4010c348b80100000000000000c348b8b0d7edacaa2a000090ff555848b8010000000000000090909090|@966,6149|19,0,0 30,0,@970 44,0,0 5752:O3|@5754,@5756,@5753 5753:O2|@5758,@7453 5754:O2|@5755,@7453 5755:C2,48|4c8b304c8b6a084d3bf5751648b80300000000000000c348b80100000000000000c348b80100000000000000c3909090|@966,6149|14,0,1 25,0,0 36,0,0 5756:O2|@5757,@7453 5757:C2,48|4989c64d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c89701048c740088b0000004c8b72084c8930c390|@966,4101| 5758:C2,56|4c8b304c8b6a084d3bf57510488b4010c348b80100000000000000c348b8b0d7edacaa2a000090ff555848b8010000000000000090909090|@966,6149|19,0,0 30,0,@970 44,0,0 5759:O2|@5760,@7486 5760:C2,48|4c8b304c8b6a084d3bf5751648b80300000000000000c348b80100000000000000c348b80100000000000000c3909090|@966,6149|14,0,1 25,0,0 36,0,0 5761:O2|@5762,@7486 5762:C2,56|4c8b304c8b6a084d3bf57510488b4010c348b80100000000000000c348b8b0d7edacaa2a000090ff555848b8010000000000000090909090|@966,6149|19,0,0 30,0,@970 44,0,0 5763:O1|@5764 5764:C2,16|48b80100000000000000c39090909090|@5765,1|2,0,0 5765:S24|44454255474745525f28292e6e756c6c4465627567283129 5766:C2,240|90909090909090483b65187303ff55484d8d7fc84c3b7d107303ff554049c747f8060000004d89fe49bd3894faacaa2a00004d892e4c8b2b4d896e284c8b62204d8966204c8b5a184d895e18498946104d894608488b42104c89004d8d7fe84c3b7d107303ff554049c747f8020000004d89f84d89700849c700fbffffff488b7a08488b074950488b530890ff124d8d7fe84c3b7d107303ff554049c747f8020000004c89fe48c74608010000004889064d8d7fd84c3b7d107303ff554049c747f8040000004c89f848c7401801000000488b1c24488958104889700848c700090000004883c408c390909090909090|@5804,8191|42,0,@5767 5767:C3,72|90909090909090483b65187303ff55484c8b72104c8b2c244c89342448ff72084c8b521849b9380dedacaa2a00004c8b4220488b5a2848bac094faacaa2a00004955ff2528000000|@5803,8191,@5770|38,0,@217 56,0,@5768 5768:O2|@5770,@5769 5769:O4|I48,-1,@552,@584 5770:C11,1384|90909090909090488dbc2428ffffff483b7d187303ff55504c8b74241049f7c601000000740c49bd0300000000000000eb084d8b2e4f8d6c2d014989d44989c34889df4c89c64d89e848bb01000000000000004c89f09090ff15320500004954495357564951495248bae89afaacaa2a00009090ff12488b40089090ff15160500004989c348bb908af0acaa2a00004c89d89090ff15060500004883f801744749f7c301000000740c49b90300000000000000eb084d8b0b4f8d4c090141f6c1017503ff55704d89c84983e80470f448bb01000000000000004c89d8ff15c60400004989c2eb034d89da4d89d348bb5b000000000000004c89d89090ff15ae0400004883f801744749f7c301000000740c49b90300000000000000eb084d8b0b4f8d4c090141f6c1017503ff55704d89c84983e80270f448bb01000000000000004c89d8ff156e0400004989c2eb034d89da50504c8b4c24184d8b014983f80175534d8d7fe84c3b7d107303ff554049c747f8020000004c89ff498b71084889770848c707fbffffff4989f8498b591048b8b01e6000000000009090ff151e0400004889e348c703030000004889e248894208eb584983f80375574d8d7fe84c3b7d107303ff554049c747f8020000004c89ff498b71084889770848c707fbffffff4989f8498b591048b8b01e60000000000090ff15ce0300004889e348c703050000004889e248894208eb64e97e0000004983f8ff755e4d8d7fe84c3b7d107303ff554049c747f8020000004c89ff498b71084889770848c707fbffffff4989f848bba8c2f1acaa2a000048b8b01e6000000000009090ff15720300004889e348c703070000004889e248894208eb1fe91a000000488b7c24384889e648c706090000004889e3488b5708488953085050505050505050505050505050505050504d8d7fe04c3b7d107303ff554049c747f8030000004c89f948b8009dfaacaa2a00004889014c8bb424b80000004c8971104c8bac24c00000004c8969084d8d7fe04c3b7d107303ff554049c747f8030000004d89fc49bb80a1faacaa2a00004d891c244d897424104d896c24084989e149b858a5faacaa2a00004d89014889e748be58a5faacaa2a0000488977084889e34c8963104889e248b858a5faacaa2a0000488942184989e649bd58a5faacaa2a00004d896e204989e449bbe8a5faacaa2a00004d895c24284989e149b8e8a5faacaa2a00004d8941304889e748bee8a5faacaa2a0000488977384889e348ba58a5faacaa2a0000488953404889e049bee8a5faacaa2a00004c8970484989e549bcd0a6faacaa2a00004d8965504989e349b9d0a6faacaa2a00004d894b584989e0498948604889e748bee8a5faacaa2a0000488977684889e348bad0a6faacaa2a0000488953704889e148b8e8a5faacaa2a0000488941784989e649bdd0a6faacaa2a00004d89ae800000004989e449bbd0a6faacaa2a00004d899c24880000004d8dbf68ffffff4c3b7d107303ff554049c747f8120000004d89f94c8b04244d8901488b7c240849897908488b74241049897110488b5c241849895918488b54242049895120488b4c242849894928488b442430498941304c8b7424384d8971384c8b6c24404d8969404c8b6424484d8961484c8b5c24504d8959504c8b5c24584d8959584c8b5c24604d8959604c8b5c24684d8959684c8b5c24704d8959704c8b5c24784d8959784c8b9c24800000004d8999800000004c8b8424880000004d8981880000004d8d7fc84c3b7d107303ff554049c747f8060000004c89f84c8948284c895020488bbc24a000000048897818488bb424d800000048897010488b9c249800000048895808488b942490000000488910488b9424b0000000488b8c24d00000004881c4e800000051ff2290909090|@5797,8191,@5798,@306,@5796,@1440,@5796,@1440,@5778,@5778,@5778|40,0,1 75,0,0 106,0,@5771 135,0,@2113 171,0,1 209,0,0 239,0,45 275,0,1 313,0,0 402,0,I48 491,0,I48 580,0,@2604 590,0,I48 700,0,@5775 761,0,@5781 788,0,@5785 804,0,@5785 828,0,@5785 845,0,@5785 862,0,@5788 880,0,@5788 897,0,@5788 914,0,@5785 931,0,@5788 948,0,@5793 965,0,@5793 989,0,@5788 1006,0,@5793 1023,0,@5788 1040,0,@5793 1060,0,@5793 5771:O1|@5772 5772:C3,112|90909090909090483b65187303ff55484883f801750b48b8103dedacaa2a0000c348ff30488b400890e8d9ffffff50504989e04889c3488b44241090ff15560000004d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b34244c89304c8b6c24084c8968084883c418c390|@2555,7245,@5773|24,0,@268 5773:C2,232|4883f853753d4d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b73084c89700848c7005300000049c700030000004989400848b80100000000000000c34883f851753d4d8d7fe84c3b7d107303ff554049c747f8020000004d89fe488b43084989460849c7065100000049c700010000004d89700848b80100000000000000c34c8b334983fe03751a49c70003000000488b43084989400848b80100000000000000c34d8d7fe84c3b7d107303ff554049c747f8020000004d89fd4c8b63084d8965084989450049c700010000004d89680848b80100000000000000c39090909090|@5774,7241|58,0,0 125,0,0 160,0,0 218,0,0 5774:S40|44454255474745525f28292e646562756746756e6374696f6e283729636865636b43686172283329 5775:C3,32|90909090909090483b65187303ff55484c8b4208488b5a10ff252a0000009090|@5777,7935,@5776| 5776:C6,656|90909090909090483b65187303ff554848f7c301000000756a4c8b334d8b2e4983fdfd756349f7c001000000755f4989c44c8b5b084c89e3498b460848bab0186000000000009090ff124883f80174694d8d7fe84c3b7d107303ff554049c747f8020000004c89ff498b304889770848c707fbffffff4989f8498b5e10498b4608eb0fe9fb010000e946000000e9360000009090ff151e0200004889c34d8d7ff04c3b7d107303ff554049c747f8010000004c89f8488918c34d8b40084c89db4c89e0e93fffffff48b80100000000000000c34983fd01757149f7c001000000756d4989c44c8b5b084c89e3498b460848bab0186000000000009090ff124883f80174704d8d7fe84c3b7d107303ff554049c747f8020000004c89ff498b304889770848c707fbffffff498b5e08498b4e104889f8909090ff15820100004d8d7fd84c3b7d10730feb0ae963000000e953000000ff554049c747f8040000004d89fe49894e184989461049c7460801000000eb05e91f00000049891e4d8d7ff04c3b7d107303ff554049c747f8010000004c89f84c8930c34d8b40084c89db4c89e0e960feffff48b80100000000000000c34983fd03756e49f7c001000000756a4989c44c8b5b084c89e3498b460848bab018600000000000909090ff124883f80174704d8d7fe84c3b7d107303ff554049c747f8020000004c89f8498b384889780848c700fbffffff498b7608498b5e10498b4e189090ff15aa0000004989c14989c8eb0ae94f000000e93f0000004889f090ff15960000004989c64d8d7ff04c3b7d107303ff554049c747f801000000eb05e9070000004c89f84c8930c34d8b40084c89db4c89e0e998fdffff48b80100000000000000c3488b5b08e984fdffff48b80100000000000000c39090|@5779,7935,@5778,@5129,@5129,@5127|62,0,I24 202,0,0 242,0,I24 425,0,0 465,0,I24 625,0,0 645,0,0 5777:S42|44454255474745525f28292e6d616b6553706163652833296c6f6f6b757056616c756573283129283129 5778:C2,88|4d8d7fe84c3b7d107303ff554049c747f8020000004d89fe4d89460849c706ffffffff4d8d7fd84c3b7d107303ff554049c747f8040000004d89f8498958184d89701049c74008ffffffff4989004c89c0c3909090909090|@5780,4169| 5779:S39|44454255474745525f28292e6d616b6553706163652833296c6f6f6b757056616c756573283329 5780:S28|5354525543545f56414c5328292e6d616b65476c6f62616c56283329 5781:C3,32|90909090909090483b65187303ff5548488b5a08488b4210ff252a0000009090|@5783,8173,@5782| 5782:C6,696|90909090909090483b65187303ff554848f7c00100000075704c8b304d8b2e4983fdfd756948f7c30100000075654d8d7fe84c3b7d107303ff554049c747f8020000004d89fc4c8b1b4d895c240849c70424fbffffff4d8b56084c8b4808488b7b084d89e0498b5e104c89d0ff156e0200004d8d7fe84c3b7d107303ff554049c747f802000000eb0fe91c020000e951000000e9410000004c89fb488943084c8913534889fb4c89c8e859ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b04244889024889d04883c408c348b80100000000000000c34983fd01757248f7c301000000756e4d8d7fe84c3b7d107303ff554049c747f8020000004d89fc4c8b1b4d895c240849c70424fbffffff4d8b56084d8b4e104c8b40084c89e09090ff15b60100004d8d7fd84c3b7d107303ff554049c747f8040000004c89ff4c894f184889471048c7470801000000eb0ae96b000000e95b0000004c89174d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48897a084c891252488b5b084c89c090e871feffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fe498946084c8b2c244d892e4c89f04883c408c348b80100000000000000c34983fd03756f48f7c301000000756b4c8b60084d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b1b4c89580848c700fbffffff4d8b56084d8b4e104d8b4618909090ff15d6000000488b7b084c89ca4989c14889d34c89d09090ff15c60000004d8d7fe84c3b7d107303ff5540eb0ae95b000000e94b00000049c747f8020000004d89fe498946084d891649564889fb4c89e0e89dfdffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fd498945084c8b24244d8965004c89e84883c408c348b80100000000000000c3488b4008e95dfdffff48b80100000000000000c3909090|@5784,8173,@5778,@5129,@5129,@5127|219,0,0 451,0,0 664,0,0 684,0,0 5783:S27|44454255474745525f28292e6d616b655370616365283329283129 5784:S36|44454255474745525f28292e6d616b655370616365283329616c6c56616c756573283229 5785:O1|@5786 5786:C2,16|48b80100000000000000c39090909090|@5787,1|2,0,0 5787:S35|44454255474745525f28292e6d616b655370616365283329616c6c456d707479283129 5788:O1|@5789 5789:C2,24|48b848a6faacaa2a000090ff555848b80100000000000000|@5792,1|2,0,@5790 16,0,0 5790:O3|103,@333,@5791 5791:S29|43616e6e6f74207570646174652074686973206e616d65207370616365 5792:S34|44454255474745525f28292e6d616b6553706163652833296e6f456e746572283129 5793:O1|@5794 5794:C2,16|48b80100000000000000c39090909090|@5795,1|2,0,0 5795:S33|44454255474745525f28292e6d616b6553706163652833296e6f4c6f6f6b283129 5796:C3,272|90909090909090483b65187303ff554848f7c301000000740c49be0300000000000000eb084c8b334f8d74360148f7c001000000740c49bd0300000000000000eb084c8b284f8d6c2d0149554d23ee41f6c501495d7503ff55704d3bf57f574983fe0375564983fd0375154889df4889c34889f848bab018600000000000ff2241f6c5017503ff55704c89ef4883ef0270f4488d77104889f248d1ea480fb61410488d541201483bda751548b80300000000000000c3e947000000e90b00000048b80100000000000000c34c89ef4923fe40f6c7017503ff55704c89ef492bfe488d7f0170f14989da4989c149b801000000000000004889fb4c89f0ff253600000048b80100000000000000c3909090|@5801,7679,@5800|27,0,1 56,0,1 118,0,I24 173,0,1 194,0,0 238,0,0 260,0,0 5797:S28|44454255474745525f28292e646562756746756e6374696f6e283729 5798:C2,192|48f7c001000000742d4983f80174274989c04d8d7fe84c3b7d107303ff554049c747f8020000004c89f848c74008010000004c8900c3505349be01000000000000004983f80175084c89f04883c410c3498d58fe488b04244c8d68ff4d03e84d8d45fe498d40104c8b6c24084989c049d1e84f0fb64405004f8d4400014d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8970084c89004989c64989d8483b65187303ff5548eb9548b801000000000000004883c410c390909090|@5799,6217|58,0,0 175,0,0 5799:S31|4c696272617279537570706f72742e737472696e674578706c6f6465283329 5800:C2,112|90909090909090483b65187303ff55484883f801750b48b80300000000000000c34d8d70104d89f549d1ed4f0fb62c2a4f8d6c2d014c8d73104d89f449d1ec4f0fb624214f8d6424014d3bec75174d8d70024c8d6b024c8d60fe4d89f04c89eb4c89e0eba248b80100000000000000c3|@5802,7625|24,0,1 103,0,0 5801:S18|537472696e672e6973537566666978283229 5802:S12|627974654d61746368283529 5803:S34|44454255474745525f28292e646562756746756e6374696f6e283129283129283129 5804:S38|50415253455f5452454528292e67656e636f6465283729616464446562756743616c6c283329 5805:C9,648|90909090909090483b65187303ff55484c8b72184983fe01752149c701010000004c8b034d894108488b43084989411048b80100000000000000c34c8b6a084989c4498b45005249544950495148ff33488b5308ff124d8d7fe84c3b7d107303ff554049c747f8020000004d89fb49c74308010000004989034d8d7fe84c3b7d107303ff554049c747f8020000004d89fa4d895a084c8b4c24104d890a4d8d7fe84c3b7d107303ff554049c747f8020000004d89f84d89500849c7001500000049504983fa01750c48bf0300000000000000eb2f498b32488b1e4883fbfb75194d8b5208483b65187303ff5548ebd348bf010000000000000048bf01000000000000004883ff017432488b0424909090ff159a0100004d8d7fe84c3b7d107303ff554049c747f8020000004c89fa4889420848c702fbffffffeb04488b1424488b4c2428488b41084c8b3050504989e14d89f0488b59104889d09090ff1556010000488b44243090ff15520100004c8b60084983fc0175314d8d7fe04c3b7d107303ff554049c747f8030000004d89fd4c8b58184d895d104c8b104d89550849c7450001000000eb564989c34c89e090ff15120100004883f80174484c89e090ff150a0100004989c24d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c8950104d8b4b184c8948084d8b034c890090ff15de0000004989c5eb36e9310000004d8d7fe84c3b7d107303ff554049c747f8020000004c89f84d8b53184c8950084d8b0b4c89089090ff15ae0000004989c54d8d7fe84c3b7d107303ff554049c747f8020000004d89f8488b7c2418498978084d8928488b742420488b1c2448891e4c894608488b5424084889561048b801000000000000004883c440c390909090909090|@5807,8191,@4523,@5808,@2950,@2610,@2612,@5815,@5806|50,0,0 202,0,1 241,0,0 251,0,0 628,0,0 5806:C2,48|4c8b304c8b68084d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c8968104c89700848c700fdffffffc390|@5817,6145| 5807:S42|50415253455f5452454528292e67656e636f64652837296372656174654465627567456e747279283429 5808:C2,368|90909090909090483b65187303ff55484c8b304983fefb753f4d8d7fe84c3b7d107303ff554049c747f8020000004d89f848bbb0b0faacaa2a00004989184989400849c701010000004d89410848b80100000000000000c34983fef775534d8d7fd04c3b7d107303ff554049c747f8050000004c89fb48ba20b1faacaa2a0000488913488b500848895320488b481848894b184c8943104889430849c701010000004989590848b80100000000000000c3504950495148b801000000000000004889da90ff124d8d7fe04c3b7d107303ff554049c747f8030000004d89fd49bc20b2faacaa2a00004d896500498945104c8b5c24084d895d084d8d7fd84c3b7d107303ff554049c747f8040000004d89fa49c74218010000004c8b4c24104d894a104989420849c702f9ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89f849c74008010000004d8910488b3c244c89074c896f0848b801000000000000004883c418c3909090909090|@5814,8191|51,0,@5809 79,0,0 120,0,@5811 168,0,0 184,0,0 224,0,@5813 349,0,0 5809:C2,8|488b4208c3909090|@5810,5| 5810:S29|434f44455452454528292e6d756c7469706c6555736573283429283129 5811:C2,144|4c8b721050490bc6a801587503ff5570493bc67505488b4208c34989c54d23ee41f6c5017503ff55704989c54d2bee4d8d6d0170f1488b42184989c44d23e541f6c4017503ff55704c8d60ff4d03e570f44d8d7fd04c3b7d107303ff554049c747f8050000004c89f848c74020010000004c89601848c74010030000004c8b6a204c89680848c700f7ffffffc3909090|@5812,7173| 5812:S35|434f44455452454528292e6d756c7469706c65557365732834296c6f6164466e283129 5813:C2,96|4c8b72084989c54d23ee41f6c5017503ff55704989c54d2bee4d8d6d0170f14d8d7fd04c3b7d107303ff554049c747f8050000004c89f848c74020010000004c89681848c74010030000004c8b6a104c89680848c700f7ffffffc39090909090|@5812,6149| 5814:S26|434f44455452454528292e6d756c7469706c6555736573283429 5815:C2,56|4c8b304c8b68084c8b60104d8d7fd84c3b7d107303ff554049c747f8040000004c89f84c8960184c8968104c89700848c70003000000c390|@5816,7169| 5816:S10|456e7656436f6e737472 5817:S8|456e7656616c7565 5818:C3,248|90909090909090483b65187303ff55484c8b72284983fe01746f524d8d7fe84c3b7d107303ff554049c747f8020000004d89fd49895d0849c745000100000049504883f80175054d89eceb64505048ff70084c8d4424084c89eb488b00488d5424289090ff15b60000004d8d7fe84c3b7d107303ff554049c747f8020000004d89fb4c8b542408eb05e9540000004d89134c8b4c24104d894b084d89dd488b04244883c418483b65187303ff5548eb91e90a00000049bc01000000000000004c8b1c244d8b14244d89134d8b4c24084d894b0848b801000000000000004883c410c349c700010000004989580848b80100000000000000c3|@5820,8191,@5819|183,0,0 213,0,0 239,0,0 5819:C5,248|90909090909090483b65187303ff55484c8b72f84d8b6e204d8b65004989d34989c24c89d0909090ff15f200000049534952495048ff3348ff73084d8b56104d8b4e184989c04c89e3488b44241848ba28a9f9acaa2a0000ff15ca0000005050504c8b4c24384d8b41f84989e1498b78084989c0488b5c2418488b4424304889fa909090ff12488b1c244883fb017507488b742420eb16488b442420488d542440909090ff15860000004889c64d8d7fe84c3b7d107303ff554049c747f8020000004c89fa488b4c241048894a08488b4424084889024c8b7424284989364989560848b801000000000000004883c440c390909090909090|@5822,8191,@2277,@5397,@5821|80,0,@5395 228,0,0 5820:S42|50415253455f5452454528292e67656e636f64652837296d616b654465627567456e7472696573283329 5821:C2,88|90909090909090483b65187303ff55484883f8017505488b42c0c35248ff30488b40089090e8ddffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b04244889024889d04883c410c3909090|@1847,5| 5822:S52|50415253455f5452454528292e67656e636f64652837296d616b654465627567456e74726965732833296c6f6164566172283329 5823:C5,1544|90909090909090483b65187303ff55484c8b7424084c8b6a284983fd017503c208004d8d7fc04c3b7d107303ff554049c747f8070000004d89fc49bb80bdfaacaa2a00004d891c244c8b5a204d895c24304d894c24284c8b4a184d894c242049895c2418488b7a1049897c2410498b3649897424084d8d7fc04c3b7d107303ff554049c747f8070000004c89f948be90befaacaa2a00004889314c8959304c8951284c89492048895918488979104d8b164c8951084d8d7fc84c3b7d107303ff554049c747f8060000004c89fe49ba98bffaacaa2a00004c89164c895e284c894e2048895e1848897e10498b1e48895e084d8d7fe84c3b7d107303ff554049c747f8020000004d89fa4d89620849c702fbffffff4c8b620850498b042452495049ff760851564952488b542418909090ff124d8d7fe84c3b7d107303ff554049c747f8020000004d89fb49c74308010000004c8b5424204d89134d8d7fe84c3b7d107303ff554049c747f8020000004d89f94d8959084989014d8d7fe84c3b7d107303ff554049c747f8020000004d89f84d89480849c7001500000049504983f901750c48bf0300000000000000eb2f498b31488b1e4883fbfb75194d8b4908483b65187303ff5548ebd348bf010000000000000048bf01000000000000004883ff017432488b0424909090ff153e0400004d8d7fe84c3b7d107303ff554049c747f8020000004c89fa4889420848c702fbffffffeb04488b14244d8d7fe84c3b7d107303ff554049c747f8020000004c89f948c74108010000004889114d8d7fd84c3b7d107303ff554049c747f8040000004c89f848c74018010000004c8b7424084c8970104889480848c700090000004d8d7fe84c3b7d107303ff554049c747f8020000004d89fd4c8b6424184d89650849c74500fbffffff4c8b5c24304d8b53084989c1498b0249514955488b54243090ff124d8d7fe84c3b7d107303ff554049c747f8020000004d89f8488b7c24204989780849c700fbffffff488b742440488b5e084889c2488b03524950488b542440909090ff124d8d7fe84c3b7d107303ff554049c747f8020000004c89f949bea8c0faacaa2a00004c8971084889014d8d7fe84c3b7d107303ff554049c747f8020000004d89fd49894d0849c745001500000049554883f901750c49bc0300000000000000eb2f4c8b194d8b134983fafb7519488b4908483b65187303ff5548ebd349bc010000000000000049bc01000000000000004983fc01742f488b0424ff159e0200004d8d7fe84c3b7d107303ff554049c747f8020000004d89f94989410849c701fbffffffeb044c8b0c244d8d7fe84c3b7d107303ff554049c747f8020000004d89f849c74008010000004d89084d8d7fd84c3b7d107303ff554049c747f8040000004c89ff48c7471801000000488b742408488977104c89470848c707090000004d8d7fd84c3b7d107303ff554049c747f8040000004c89fb48bac896edacaa2a00004889531848897b10488b4c246048894b0848c703f5ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89f848c74008010000004889184d8d7fe84c3b7d107303ff554049c747f8020000004d89fe498946084c8b6c24104d892e4d8d7fe84c3b7d107303ff554049c747f8020000004d89fc4d8974240849c704241500000049544983fe01750c49bb0300000000000000eb2f4d8b164d8b0a4983f9fb75194d8b7608483b65187303ff5548ebd349bb010000000000000049bb01000000000000004983fb017432488b0424909090ff152a0100004d8d7fe84c3b7d107303ff554049c747f8020000004d89f84989400849c700fbffffffeb044c8b04244d8d7fe84c3b7d107303ff554049c747f8020000004c89ff48c74708010000004c89074d8d7fd84c3b7d107303ff554049c747f8040000004c89fe48c7461801000000488b5c242048895e1048897e0848c706090000004d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48c74208010000004889324d8d7fe84c3b7d107303ff554049c747f8020000004c89f948895108488b4424284889014d8d7fe84c3b7d107303ff554049c747f8020000004c89f84889480848c700130000004883c470c2080090|@5831,8191,@4523,@4523,@4523|60,0,@5824 143,0,@5826 207,0,@5828 422,0,1 461,0,0 471,0,0 788,0,@5830 849,0,1 888,0,0 898,0,0 1076,0,@486 1226,0,1 1265,0,0 1275,0,0 5824:C3,128|90909090909090483b65187303ff55484d8d7fe04c3b7d107303ff554049c747f8030000004d89fe4c8b6a284d896e104c8b60084d89660849c706010000004c8b5a184c8b14244c891c2448ff72104d89d14c8b52204d89c84d89f14c89c74c8b4230488b5a08488b0048bac094faacaa2a000057ff252d0000009090909090|@5825,8191,@5770|108,0,@5768 5825:S61|50415253455f5452454528292e67656e636f64652837297772617046756e6374696f6e496e4465627567283629656e74657246756e6374696f6e283129 5826:C3,120|90909090909090483b65187303ff55484d8d7fe04c3b7d107303ff554049c747f8030000004d89fe4c8b6a284d896e104c8b60084d89660849c70603000000495448ff721848ff72104c8b52204d89f14c8b4230488b5a08488b0048bac094faacaa2a0000909090ff1532000000488b04244883c408c390|@5827,8191,@5770|93,0,@5768 5827:S61|50415253455f5452454528292e67656e636f64652837297772617046756e6374696f6e496e44656275672836296c6561766546756e6374696f6e283129 5828:C3,120|90909090909090483b65187303ff55484d8d7fe84c3b7d107303ff554049c747f8020000004d89fe4c8b68084d896e0849c706ffffffff495548ff721848ff72104c8b52204d89f14c8b4228488b5a08488b0048bac094faacaa2a0000909090ff153a000000488b042490ff555848b80100000000000000|@5829,8191,@5770|85,0,@5768 112,0,0 5829:S65|50415253455f5452454528292e67656e636f64652837297772617046756e6374696f6e496e4465627567283629657863657074696f6e46756e6374696f6e283129 5830:O2|@4256,0 5831:S45|50415253455f5452454528292e67656e636f64652837297772617046756e6374696f6e496e4465627567283629 5832:C19,640|90909090909090483b65187303ff55484989d690ff158e0200005050495653495149524c8d6c242049554d89ca4d8b4e084d89c449b803000000000000004c89e3909090ff156602000048ff750849bbaac1faacaa2a000049536a0148896508488b442438909090ff154a0200004989c2488b4424284c89d2909090ff124989c14d8d7ff04c3b7d107303ff554049c747f8010000004c89f84c890848ff742410488f45084883c448c34c8b004981f8cb00000075244889c748b801000000000000004883c430c34889c748b801000000000000004883c430c34983f811756f488b7c24185048ff7708488b581048b840c4faacaa2a0000ff15c201000048bb68c4faacaa2a0000ff15ba010000488b5c242090ff15b601000048bb98c4faacaa2a0000ff15ae010000488b5c243890ff15aa0100004989c24c8b4c24184c8b44241048bb0300000000000000eb05e92b000000488b0424ff158a01000048b801000000000000004883c440c34889c748b801000000000000004883c430c34983f80b756d488b7c241848ff7708488b5c241848b8b0c4faacaa2a0000909090ff154a01000048bb98c4faacaa2a0000ff1542010000488b5c243090ff153e0100004989c24c8b4c24104c8b44240848bb0300000000000000488b0424909090ff152201000048b80100000000000000eb05e9140000004883c438c348b801000000000000004883c430c3488b7c241848ff7708488b5c241848b8f0c4faacaa2a000090ff15e600000048bb98c4faacaa2a0000ff15de000000488b5c243090ff15da0000004989c24c8b4c24104c8b44240848bb0300000000000000488b0424909090ff15be00000048b801000000000000004883c438c390909090909090|@5838,8191,@2136,@5711,@5463,@303,@303,@303,@303,@303,@2855,@303,@303,@303,@2855,@303,@303,@303,@2855|54,0,1 80,0,$5832+170 187,0,0 205,0,0 240,0,@5833 256,0,@5834 284,0,@5835 325,0,1 352,0,0 370,0,0 405,0,@5836 424,0,@5835 465,0,1 488,0,0 510,0,0 539,0,@5837 556,0,@5835 597,0,1 620,0,0 5833:S22|436f6e76657273696f6e20657863657074696f6e2028 5834:S26|2920726169736564207768696c6520636f6e76657274696e6720 5835:S4|20746f20 5836:S43|4f766572666c6f7720657863657074696f6e20726169736564207768696c6520636f6e76657274696e6720 5837:S34|457863657074696f6e20726169736564207768696c6520636f6e76657274696e6720 5838:S41|50415253455f5452454528292e67656e636f64652837296765744c69746572616c56616c7565283529 5839:C28,1992|90909090909090483b65187303ff5548525049504d8b3149f7c601000000741e4983fee17c1d4983fe1d7f1c49bdb6c5faacaa2a00004f8d6cb57c41ffe5e903010000e9fe000000e9f900000090e9cf050000909090e9eb000000909090e9e3000000909090e9db000000909090e9d3000000909090e9cb000000909090e9f7050000909090e988060000909090e9bb000000909090e9ab000000909090e9a3000000909090e99b000000909090e993000000909090e94b060000909090e983000000909090e97b000000909090e973000000909090e953040000909090e963000000909090e95b000000909090e953000000909090e94b000000909090e943000000909090e93b000000909090e991020000909090e91a050000909090e923000000909090e91b000000909090e913000000909090e93c010000909090e9cc0400009090904c89c04883c418c34d8b71104d8b2e4c89e8ff15920600004c8b60084c89e0909090ff158a0600004883f801745f4c89e090ff15820600004d8d7fd84c3b7d107303ff554049c747f8040000004c89fa48b838cefaacaa2a000048890248895a184c8b6424084c896210488b442410488942084d89e94989d04989de488b1c244c89f04883c418ff25350600004983fc01752a4d89e949b8380aefacaa2a00004989db488b1c244c89d8488d542418909090ff15120600004883c418c349554989db4c89c34c89d89090ff15020600004d8d7fe84c3b7d107303ff554049c747f8020000004d89fa4c8b084d894a084c8b04244d89024d8d7fd84c3b7d107303ff554049c747f8040000004c89ff488b701848897718488b581048895f10488b5008488957084c89174889f84883c420c34d8b60084d8b1c244983fb05756f5349ff3049ff7018498b4108488d5424309090ff15820500004d8d7fe84c3b7d107303ff554049c747f8020000004d89fa4989420849c702fdffffff4d8d7fd84c3b7d107303ff554049c747f8040000004d89f94c8b04244d89411849c74110010000004d895108488b7c2408eb05e90b0000004989394c89c84883c430c34983fbfd756d5349ff3049ff7018498b5908498b442408488d542430ff15020500004d8d7fe84c3b7d107303ff554049c747f8020000004d89fa4989420849c702fdffffff4d8d7fd84c3b7d107303ff554049c747f8040000004d89f94c8b04244d89411849c74110010000004d895108eb05e910000000488b7c24084989394c89c84883c430c348b8d8cefaacaa2a000090ff555848b801000000000000004d8b61104d8b1c24534951495449ff71184c89d8ff15720400004883f80174324c89d890ff156a040000488b5808488b00909090ff15620400004989c3483b65187303ff5548ebc949ba01000000000000004c89d8909090ff15460400004883f80174194c89d890ff153e0400004c8b104d89d14983f1024d89caeb0a49ba01000000000000004983fa01743a4c8b4c243049ba28cffaacaa2a00004d8b41084c8b4c24284c89c74c8b44241048bb03000000000000004889f89090ff15f20300004989c2eb0a49ba01000000000000004c8b542408498b02909090ff15da03000048ba58cffaacaa2a0000ff124c8b0c244983f90175054989c0eb4a498b39488b742408488b1e4989c24c8b4708488b079090ff15aa0300004c89c74d89d04889c34889f89090ff159e0300004d8b4908483b65187303ff5548ebb549b801000000000000004d8d7fe84c3b7d107303ff554049c747f8020000004c89ff4c89470848c7071b0000004989f94c8b442420488b5c2418488b442428488b5424304883c438e9d9faffff4d8b61084d8b1c244983fbf1756e4d8b542410498b3a4889f890ff152a030000488b70084889f0909090ff15220300004883f801746e4889f090ff151a0300004d8d7fd04c3b7d107303ff554049c747f8050000004c89fa48b948d0faacaa2a000048890a498b41104889422048895a184c8b7424084c897210eb05e9580000004c8b6c24104c896a084989f94989d04889df488b1c244889f84883c418ff25be0200004883fe017527498b51104989f94989d04889d9488b1c244889c8488d542418909090ff159e0200004883c418c34c89c04883c418c34c89c04883c418c34989dc4c89c34c89e04883c418ff257e0200004989dc4c89c34c89e04883c418ff25730200004d8d7fd84c3b7d107303ff554049c747f8040000004d89fc49bba8d0faacaa2a00004d891c244989442418498954241049895c2408498b59084c89c04c89e24883c418ff224d8b61084d8b1c24505053495149ff711049ff711849534c8d54242849524989c24c8b4a0849b801000000000000004c89db48b87b000000000000009090ff15f20100004c8b4c24484c8b5424184d8b41104c8b4c24404c89c74c8b0424488b5c2410488b4424084889fa909090ff124c8b4c24284989c0488b5c2438488b4424204883c450ff25b20100004d8b49104883c418e9f4f8ffff49ff71084d8b49109090e8e5f8ffff504c8b6424084d8b14244983faf1750a4d8b4c24104d8b19eb2a4983fafb751a4d8b642410483b65187303ff5548ebd649bb010000000000000049bb38efeeacaa2a00004c8b0c244d8d7fe84c3b7d107303ff554049c747f8020000004d89f8498b39498978084d89184d8d7fd84c3b7d107303ff554049c747f8040000004c89fe498b591848895e18498b511048895610498b490848894e084c89064889f04883c428c390|@5870,8191,@2950,@2610,@2612,@5856,@5871,@5877,@5883,@5884,@1458,@1459,@2044,@2046,@2047,@2855,@5888,@5892,@5894,@2950,@2610,@2612,@5856,@5871,@5877,@5877,@5711,@5867|46,0,$5839+78 408,0,@5840 478,0,@1580 910,0,@5842 924,0,0 1006,0,0 1059,0,0 1080,0,@5844 1107,0,1 1133,0,0 1160,0,@5845 1251,0,0 1416,0,@5848 1615,0,@5849 1697,0,0 1710,0,61 1876,0,0 1886,0,@1551 5840:C2,48|90909090909090483b65187303ff554849b9380aefacaa2a00004989c0488b5a18488b4210488b5208ff229090909090|@5841,8191|18,0,@1580 5841:S37|50415253455f5452454528292e67656e636f64652837296275696c64416f74283429283129 5842:O3|@7377,@215,@5843 5843:S31|7061747465726e206973206e6f742061207475706c6520696e20612d6f2d74 5844:S31|43616e27742066696e642061206669786564207265636f726420747970652e 5845:O1|@5846 5846:C2,104|90909090909090483b65187303ff55484883f801750b48b80100000000000000c3a8017503ff55704989c64983ee0270f44c89f090e8cdffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fe4989460848b8380aefacaa2a00004989064c89f0c390|@5847,4097|24,0,0 88,0,@1580 5847:S43|50415253455f5452454528292e67656e636f64652837296275696c64416f742834296275696c646c283129 5848:C2,40|90909090909090483b65187303ff55484c8b4a204989c0488b5a18488b4210488b5208ff22909090|@5841,8191| 5849:C4,216|90909090909090483b65187303ff55484883fb0175564d8d7fd84c3b7d107303ff554049c747f8040000004c89fb48b9c8d1faacaa2a000048890b488b4a0848894b184c8b72184c8973104c8b6a104c896b0849b928adedacaa2a00004989d84889c34889c8ff25940000004d8d7fc04c3b7d107303ff554049c747f8070000004d89fe49bd78d2faacaa2a00004d892e4c8b234d8966304c8b5a084d895e284c8b52184d8956204c8b4a104d894e184c8b43084d8946104989560849b918a6edacaa2a00004d89f04889c34c89d8ff2533000000909090|@5859,8191,@5856,@5856|48,0,@5850 85,0,@667 134,0,@5852 190,0,@614 5850:C2,48|90909090909090483b65187303ff554849b9380aefacaa2a00004989c0488b5a18488b4210488b5208ff229090909090|@5851,8191|18,0,@1580 5851:S51|50415253455f5452454528292e67656e636f64652837296275696c64416f7428342970726f636573734c697374283229283129 5852:C2,768|90909090909090483b65187303ff55484c8b70084d8b2e4983fdfd756d4d8b660849f7c40100000075654d8b5c240849f7c301000000755c4d8b53084983fa0175575249ff3348ff3048ff70184c8b4a304d8b0424488b5a28488b4220488b5218909090ff124c8b4c241850498b5910488b442418498b5108909090ff124d8d7fe84c3b7d107319eb14e9f5000000e9d8000000e9bb000000e99c000000ff554049c747f8020000004d89f849c74008010000004989004d8d7fe84c3b7d107303ff554049c747f8020000004c89ff4c894708488b34244889374d8d7fe84c3b7d107303ff554049c747f8020000004c89fb48897b0848c703fdffffff4d8d7fd84c3b7d107303ff554049c747f8040000004c89fa488b4c240848894a1848c742100100000048895a08488b4424104889024889d04883c428c348b8b0d5faacaa2a0000909090ff555848b8010000000000000048b8b0d5faacaa2a000090ff555848b8010000000000000048b8b0d5faacaa2a000090ff555848b801000000000000004983fd0575714d8d7fd84c3b7d107303ff554049c747f8040000004d89fc4c8b58184d895c241849c74424100100000049bac8d2f3acaa2a00004d8954240849c70424010000004d8d7fd84c3b7d107303ff554049c747f8040000004d89f94d89591849c741100100000049b8c8d2f3acaa2a0000eb05e9e50000004d89410849c701010000005248ff30495349514c8b4a304d89e0488b5a28488b4220488b52189090ff12488b7c241850488b5f10488b442408488b5708909090ff124d8d7fe84c3b7d107303ff554049c747f8020000004c89fe48c74608010000004889064d8d7fe84c3b7d107303ff554049c747f8020000004c89fb48897308488b14244889134d8d7fe84c3b7d107303ff554049c747f8020000004c89f94889590848c701fdffffff4d8d7fd84c3b7d107303ff554049c747f8040000004c89f84c8b7424104c89701848c7401001000000488948084c8b6c24184c89284883c428c348b8b0d5faacaa2a0000ff555848b8010000000000000090909090|@5855,8191|316,0,@5853 332,0,0 342,0,@5853 356,0,0 366,0,@5853 380,0,0 438,0,@3403 497,0,@3403 743,0,@5853 756,0,0 5853:O3|@7377,@215,@5854 5854:S34|6d6b436f6e735061743a206261646c792d666f726d65642070617273652d74726565 5855:S60|50415253455f5452454528292e67656e636f64652837296275696c64416f7428342970726f636573734c6973742832296d6b436f6e73506174283129 5856:C6,656|90909090909090483b65187303ff55484989c64c89c89090ff159a020000488b5308488b0a4883f90575584c89c89090ff158a0200004956534950495148ff3348ff7318ff157e02000049be01000000000000004883f80175054d89f5eb3341f6c6017503ff55704d89f44983c40270f4488b40084d89e6483b65187303ff5548ebd1e95c01000049bd01000000000000004d8d7fe84c3b7d107303ff554049c747f8020000004d89fc49c7442408010000004c8b5c24284d891c244c8b5424204d8d7fd84c3b7d107303ff554049c747f8040000004d89f94d8b42184d89411849c741100100000048bfc8d2f3acaa2a00004989790849c70101000000495549544c89c8488b5424289090ff125050504889e6488b5c241848891e4889e2488942084889e1488b442438488941104d8d7fe04c3b7d107303ff554049c747f8030000004d89fe4c8b2c244d892e4c8b6424084d8966084c8b5c24104d895e104d8d7fe84c3b7d107303ff554049c747f8020000004d89fa49c74208010000004d89324d8d7fe84c3b7d107303ff554049c747f8020000004d89f94d89510849c701010000004d8d7fd84c3b7d107303ff554049c747f8040000004d89f8488b7c242849897818488b742420498970104d894808488b5c24304989184c89c04883c458c34883f901756e534950495649515048ff3348ff731048ff7318488b4208488d5424409090ff15c20000004d8d7fe84c3b7d107303ff554049c747f8020000004d89fe4989460849c706010000004d8d7fd84c3b7d107303ff554049c747f8040000004d89fd4c8b24244d8965184c8b5c2408eb05e9190000004d895d104d8975084c8b5424104d8955004c89e84883c440c348b840d9faacaa2a0000909090ff555848b80100000000000000|@5861,8191,@2136,@2277,@5862,@5860|76,0,0 138,0,0 235,0,@3403 632,0,@5857 648,0,0 5857:O3|@7377,@215,@5858 5858:S35|616464436f6e7374723a206261646c792d666f726d656420616e642d6f722074726565 5859:S48|50415253455f5452454528292e67656e636f64652837296275696c64416f7428342970726f636573734c697374283229 5860:C4,600|90909090909090483b65187303ff55484883f801756e4d8d7fe84c3b7d107303ff554049c747f8020000004c89f848c74008010000004c8b72e84c89304c8b6af84d8d7fd84c3b7d107303ff554049c747f8040000004d89fc4d8b5d184d895c241849c74424100100000049bac8d2f3acaa2a00004d8954240849c7042401000000eb05e98b00000048ff72e0504c89e0488b52f0909090ff125050504989e14c8b4424184d89014889e7488947084889e6488b5c242048895e104d8d7fe04c3b7d107303ff554049c747f8030000004c89fa488b0c2448890a488b442408488942084c8b7424104c8972104d8d7fe84c3b7d107303ff554049c747f8020000004c89f848c74008010000004889104883c428c34c8b304989d54c8b6008498b46109090ff1556010000498b5dd848bab018600000000000ff124883f801746d4d8d7fe84c3b7d107303ff554049c747f8020000004d89fb49c74308010000004d8b55e84d89134d89e84c89f74c89e6488b1f4c89d89090ff150a0100005649ff70e050488b4708498b50f0ff125050504889e3488b5424184889134889e1488941084889e04c8b742420eb05e9620000004c8970104d8d7fe04c3b7d107303ff554049c747f8030000004d89fd4c8b24244d8965004c8b5c24084d895d084c8b5424104d8955104d8d7fe84c3b7d107303ff554049c747f8020000004d89f94c8b4424284d8941084d89294c89c84883c430c3495549564c89e04c89ea909090e8e1fdffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fb498943084c8b14244d89134c89d84883c410c390909090909090|@5865,8191,@2136,@5864|109,0,@3403 304,0,I24 5861:S46|50415253455f5452454528292e67656e636f64652837296275696c64416f74283429616464436f6e737472283429 5862:C14,248|90909090909090483b65187303ff55484989c54c89e89090ff15020100004883f801746f4c89e890ff15fa0000004c8b18488b4010909090ff15f20000004d89da4989c14c89c890ff15ea0000004883f801751e4989c04c89c89090ff15de0000009090ff15de0000004883f801754feb054989c0eb484c89c89090ff15ce0000004989c64c89c8ff15ca0000004d89f1eb05e92b0000004c89d390ff15be00000049b803000000000000004889c34c89c89090ff15ae000000e948ffffff4c89c0c34c89e89090ff15a20000004883f80174134c89e890ff159a000000488b4008e920ffffff48b80100000000000000c3909090909090|@5863,8191,@2062,@2063,@2064,@2265,@2226,@2015,@2226,@2239,@2463,@2465,@2084,@2085|164,0,1 233,0,0 5863:S28|545950455f5452454528292e676574436f6e7374724c697374283129 5864:C2,728|90909090909090483b65187303ff55484883f80175044889d8c34883fb017501c348f7c00100000075054c8b30eb204989c648b8105ff0acaa2a0000909090ff55584c89f049be010000000000000048f7c30100000075054c8b2beb1e4989c548b8105ff0acaa2a000090ff55584c89e849bd010000000000000049554d0bee41f6c501495d7503ff55704d3bf5756348f7c00100000075054c8b20eb1d4989c448b8105ff0acaa2a0000ff55584c89e049bc010000000000000048f7c00100000075064c8b5808eb1a48b8105ff0acaa2a0000909090ff555849bb010000000000000048f7c301000000750b4c8b5308eb1de95100000048b8105ff0acaa2a000090ff555849ba010000000000000049544c89d34c89d890e8e9feffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fb48894308488b04244889034889d84883c408c348f7c00100000075054c8b20eb204989c448b8105ff0acaa2a0000909090ff55584d89e349bc010000000000000048f7c30100000075054c8b1beb1e4989c348b8105ff0acaa2a000090ff55584d89da49bb010000000000000049544d23e341f6c401495c7503ff55704d3be37d6d48f7c00100000075054c8b10eb1d4989c248b8105ff0acaa2a0000ff55584c89d049ba010000000000000048f7c00100000075064c8b4808eb1a48b8105ff0acaa2a0000909090ff555849b9010000000000000049524c89c8e8f1fdffff4d8d7fe84c3b7d107303ff5540eb05e91e00000049c747f8020000004c89fb48894308488b04244889034889d84883c408c348f7c30100000075054c8b13eb1d4989c248b8105ff0acaa2a0000ff55584d89d149ba010000000000000048f7c30100000075064c8b4b08eb1d4989c148b8105ff0acaa2a0000ff55584c89cb49b9010000000000000049524c89cb90e85dfdffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fb48894308488b04244889034889d84883c408c3909090|@5866,8073|52,0,@2029 71,0,0 98,0,@2029 115,0,0 163,0,@2029 179,0,0 204,0,@2029 220,0,0 250,0,@2029 264,0,0 348,0,@2029 367,0,0 394,0,@2029 411,0,0 459,0,@2029 475,0,0 500,0,@2029 516,0,0 603,0,@2029 619,0,0 647,0,@2029 663,0,0 5865:S57|50415253455f5452454528292e67656e636f64652837296275696c64416f74283429616464436f6e737472283429616464436c697374283129 5866:S30|50415253455f5452454528292e67656e636f6465283729706c7573283229 5867:C3,440|90909090909090483b65187303ff55484c8b73084d8b2e4983fd05756d4d8d7fe84c3b7d107303ff554049c747f8020000004d89fc49c744240801000000498904245050504889e04c89084989e14d8961084889e04c8940104d8d7fe04c3b7d107303ff554049c747f8030000004d89fc4c8b0c244d890c244c8b4424084d89442408488b442410eb05e98200000049894424104d8d7fe84c3b7d107303ff554049c747f8020000004d89f949c74108010000004d89214d8d7fe84c3b7d107303ff554049c747f8020000004d89f84d89480849c700030000004d8d7fd84c3b7d107303ff554049c747f8040000004c89f84c8b63184c89601848c74010010000004c8940084c8b0b4c89084883c418c34983fd03756e504950495148ff3348ff7318498b4608488d542428ff15ae0000004d8d7fe84c3b7d107303ff554049c747f8020000004d89fc498944240849c70424030000004d8d7fd84c3b7d107303ff554049c747f8040000004d89fb4c8b14244d89531849c74310010000004d896308eb05e9100000004c8b4c24084d890b4c89d84883c428c348b800e4faacaa2a0000909090ff555848b8010000000000000090909090|@5899,8191,@5898|412,0,@5868 428,0,0 5868:O3|@7377,@215,@5869 5869:S36|61646453636f6e7374723a206261646c792d666f726d656420616e642d6f722074726565 5870:S34|50415253455f5452454528292e67656e636f64652837296275696c64416f74283429 5871:C5,1120|90909090909090483b65187303ff55484989d64989c54c89c8909090ff1566040000488b5308488b024883f805756d4d8d7fe84c3b7d107303ff554049c747f8020000004d89fc49c7442408010000004d892c244d8b5ee84d8d7fd84c3b7d107303ff554049c747f8040000004d89fa498b7b1849897a1849c742100100000048bec8d2f3acaa2a00004989720849c70201000000495148ff33eb05e9ef00000048ff731849544d89c14d89d04c89eb498b46f0498b56f8ff125050504889e3488b5424184889134889e1488941084889e04c8b7424304c8970104d8d7fe04c3b7d107303ff554049c747f8030000004d89fd4c8b24244d8965004c8b5c24084d895d084c8b5424104d8955104d8d7fe84c3b7d107303ff554049c747f8020000004d89f949c74108010000004d89294d8d7fe84c3b7d107303ff554049c747f8020000004d89f84d89480849c700ffffffff4d8d7fd84c3b7d107303ff554049c747f8040000004c89ff488b7424204889771848c74710010000004c894708488b5c242848891f4889f84883c438c34883f8ff756d4c8b620849f7c40100000075654d8b1c24495649554950495148ff3348ff73184954495349ff7424084c89cb498b43109090ff15c20200004883f801746e4d8d7fe84c3b7d107303ff554049c747f8020000004d89f949c74108010000004c8b4424384d8901488b7c2408eb0ae940020000e923020000488b1f4c89c890ff157e020000488b742440504c8b4c24384c8b4708488b5c2440488b46f0488b56f89090ff125050504889e3eb05e976000000488b5424184889134889e1488941084889e04c8b7424484c8970104d8d7fe04c3b7d107303ff554049c747f8030000004d89fd4c8b24244d8965004c8b5c24084d895d084c8b5424104d8955104d8d7fe84c3b7d107303ff554049c747f8020000004d89f94c8b4424204d8941084d89294d89caeb704d8d7fe84c3b7d107303ff554049c747f8020000004d89fa49c74208010000004c8b4c24384d890a4c8b442440498b78e84d8d7fd84c3b7d107303ff554049c747f8040000004c89fe488b5f1848895e1848c746100100000048bac8d2f3acaa2a00004889560848c70601000000eb05e99e00000049524c8b4c2438498b48f0498b40f84989f0488b5c24404989c64889c84c89f29090ff125050504989e54c8b6424184d8965004989e3498943084989e24c8b4c24484d894a104d8d7fe04c3b7d107303ff554049c747f8030000004d89f8488b3c24498938488b74240849897008488b5c2410498958104d8d7fe84c3b7d107303ff554049c747f8020000004c89fa488b4c243048894a084c89024989d24d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89500848c700ffffffff4d8d7fd84c3b7d107303ff554049c747f8040000004d89fe4c8b6c24384d896e1849c7461001000000498946084c8b6424404d89264c89f04883c468c348b840e9faacaa2a000090ff555848b8010000000000000048b840e9faacaa2a000090ff555848b80100000000000000|@5875,8191,@2136,@5874,@5864|130,0,@3403 792,0,@3403 1074,0,@5872 1088,0,0 1098,0,@5872 1112,0,0 5872:O3|@7377,@215,@5873 5873:S37|6164644578636f6e7374723a206261646c792d666f726d656420616e642d6f722074726565 5874:C8,296|90909090909090483b65187303ff55484c8b68104c89e890ff15320100004883f801745d4c89e890ff152a0100004989c5488b4310909090ff15220100004883f8017442488b4310ff151a0100004889c34c89e8ff15160100004889c14889d8ff1512010000483bc8750b48b80300000000000000c348b80100000000000000c3e90b00000048b80100000000000000c34d8b65004983fc0375574d8b5d08498b13498b4d10488b014c8b73104d8b164983fa0375574d8b4e084d8b01498b7e10488b3752490bd0f6c2015a7503ff5570493bd0752c50480bc6a801587503ff5570483bc6751048b80300000000000000c3e92100000048b80100000000000000c348b80100000000000000c348b80100000000000000c348b80100000000000000c39090909090|@5876,8191,@2280,@2267,@2280,@2267,@5463,@5463|109,0,1 120,0,0 136,0,0 233,0,1 249,0,0 260,0,0 271,0,0 282,0,0 5875:S48|50415253455f5452454528292e67656e636f64652837296275696c64416f742834296164644578636f6e737472283429 5876:S33|56414c55455f4f505328292e697354686553616d65457863657074696f6e283229 5877:C6,376|90909090909090483b65187303ff55484c8b73084d8b264983fcfd75435048ff3348ff731048ff7318498b4608488d5424209090ff15660100004d8d7fe84c3b7d107303ff554049c747f8020000004d89fd4989450849c74500fdffffffeb704983fc0175425048ff3348ff731048ff7318498b4608488d54242090ff15260100004d8d7fe84c3b7d107303ff554049c747f8020000004d89fd4989450849c7450001000000eb5e4983fcff75495048ff3348ff731048ff7318498b4608488d54242090ff15e60000004d8d7fe8eb05e9310000004c3b7d107303ff554049c747f8020000004d89fd4989450849c74500ffffffffeb0f4d89f55048ff3348ff731048ff73184d8d7fe84c3b7d107303ff554049c747f8020000004d89fb49c74308010000004c8b5424184d89134d89e84c89db488b0424ff157a0000004d8d7fd84c3b7d107303ff554049c747f8040000004c89ff48894718488b742408488977104c894708488b5c241048891f4889f84883c420c390|@5880,8191,@5881,@5882,@5878,@5864| 5878:C2,216|90909090909090483b65187303ff55484883f801750b48b80100000000000000c34c8b305248ff700849ff3649ff7610498b5e08488b42f848ba80eefaacaa2a00009090ff125050504989e54c8b6424204d8965004989e3498943084989e24c8b4c24184d894a104d8d7fe04c3b7d107303ff554049c747f8030000004d89f8488b3c24498938488b74240849897008488b5c2410498958104950488b442430488b542438e85dffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b0c2448890a4889d04883c440c3909090|@417,8191|24,0,0 58,0,@5879 5879:O1|@5877 5880:S47|50415253455f5452454528292e67656e636f64652837296275696c64416f7428342961646444656661756c74283229 5881:C2,120|90909090909090483b65187303ff55484883f801750b48b80100000000000000c35248ff7008488b18488b42f848ba80eefaacaa2a000090ff1250488b442408488b542410e8bdffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fe498946084c8b2c244d892e4c89f04883c418c3909090|@417,8191|24,0,0 47,0,@5879 5882:C2,216|90909090909090483b65187303ff55484883f801750b48b80100000000000000c34c8b305248ff700849ff3649ff7610498b5e08488b42f848ba80eefaacaa2a00009090ff125050504989e54c8b6424204d8965004989e3498943084989e24c8b4c24184d894a104d8d7fe04c3b7d107303ff554049c747f8030000004d89f8488b3c24498938488b74240849897008488b5c2410498958104950488b442430488b542438e85dffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b0c2448890a4889d04883c440c3909090|@417,8191|24,0,0 58,0,@5879 5883:C2,192|90909090909090483b65187303ff55484883f801750b48b80100000000000000c34c8b72e84d8d7fd84c3b7d107303ff554049c747f8040000004d89fd4d8b66184d89651849c745100100000049bbc8d2f3acaa2a00004d895d0849c74500010000005248ff70084c8b084d89e8488b5ae0488b42f0488b52f89090ff1250488b442408488b542410e879ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fa498942084c8b0c244d890a4c89d04883c418c390909090909090|@417,8191|24,0,0 79,0,@3403 5884:C2,192|90909090909090483b65187303ff55484883fb01752a4883f801750b48b80100000000000000c348b880f2faacaa2a00009090ff555848b8010000000000000048f7c00100000075605248ff730848ff70084c8b0b4c8b00488b5ae0488b42f0488b52f8ff1250488b5c2410488b442408488b542418909090e889ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fe498946084c8b2c244d892e4c89f04883c420c348b880f2faacaa2a0000ff555848b80100000000000000|@5887,8191|30,0,0 41,0,@5885 56,0,0 171,0,@5885 184,0,0 5885:O3|@7377,@215,@5886 5886:S6|6d657267656c 5887:S43|50415253455f5452454528292e67656e636f64652837296275696c64416f742834296d657267656c283229 5888:C11,240|90909090909090483b65187303ff55484989c54c89e89090ff15fa0000004883f80174514c89e890ff15f200000049bc0100000000000000488b50084883fa0175044c89e0c341f6c4017503ff55704c89e04883c00270f4488b52084989c4483b65187303ff5548ebd248b80100000000000000c34c89e8ff15aa0000004883f801741f4c89e890ff15a2000000488b5808488b00909090ff159a000000e964ffffff4c89e89090ff15920000004883f80174234c89e890ff158a000000488b40109090ff15860000009090ff1586000000e930ffffff48b868f4faacaa2a00009090ff555848b80100000000000000|@5891,7693,@2046,@2047,@1458,@1459,@2044,@2062,@2063,@2064,@2226|48,0,0 108,0,0 217,0,@5889 232,0,0 5889:O3|@7377,@215,@5890 5890:S26|656e7472794e756d626572202d206e6f742061207265636f7264 5891:S26|545950455f5452454528292e7265636f72645769647468283129 5892:C11,352|90909090909090483b65187303ff55484989c54889d89090ff156a0100004883f801746e4d89eb4889d89090ff155e010000495348bb0100000000000000488b500848f7c2010000007557488b024989de4c8b6a08488b1c24488b0048bab0186000000000009090ff124883f80174084c89f04883c408c341f6c6017503ff55704d89f44983c40270f44c89ea4c89e3eb05e939000000483b65187303ff5548eba0e90f00000048b801000000000000004883c408c348b8b0d7edacaa2a0000909090ff555848b801000000000000004889d890ff15be0000004883f80174294d89ec4889d89090ff15b2000000488b5808488b00909090ff15aa0000004889c34c89e0e9fefeffff4889d8ff159e0000004883f80174314d89eb4889d89090ff1592000000488b40109090ff158e0000004c89df909090ff158a0000004889c34889f8e9befeffff48b868f4faacaa2a0000ff555848b80100000000000000|@5893,7743,@2046,@2047,@1458,@1459,@2044,@2062,@2063,@2064,@2226|54,0,0 94,0,I24 169,0,0 184,0,@970 200,0,0 331,0,@5889 344,0,0 5893:S26|545950455f5452454528292e656e7472794e756d626572283229 5894:C2,176|90909090909090483b65187303ff554849f7c001000000756f4883fb0175274d8d7fe84c3b7d107303ff554049c747f8020000004c89fb498b5008488953084889034889d8c3f6c3017503ff55704889da4883ea0270f449ff304d8b40084889d3e8a1ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89f849894008488b1c24eb05e90b0000004989184c89c04883c408c348b8e0f7faacaa2a000090ff555848b80100000000000000|@5897,77|154,0,@5895 168,0,0 5895:O3|@7377,@215,@5896 5896:S6|6d657267656e 5897:S43|50415253455f5452454528292e67656e636f64652837296275696c64416f742834296d657267656e283329 5898:C4,528|90909090909090483b65187303ff55484883f801756d4d8d7fe84c3b7d107303ff554049c747f8020000004c89f848c74008010000004c8b72f84c89305050504989e54c8b62e84d8965004989e5498945084889e04c8b6af04c8968104d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c8b1c244c89184c8b542408eb05e9380000004c8950084c8b5c24104c8958104989c24d8d7fe84c3b7d107303ff554049c747f8020000004c89f848c74008010000004c89104883c418c34c8b304c8b6af049f7c501000000753a4d8b661049f7c40100000075214989d14d89f0488b7808498b1c24498b450090ff15420100004883f8017470eb18488b78084d89f04989d1eb67488b78084d89f04989d1eb604d8d7fe84c3b7d107303ff554049c747f8020000004c89fb48c7430801000000498b51f8488913498b49e8498b71f04889d8498b5808ff15ee0000005050504989e649890e4989e5498945084989e44989742410eb0fe962000000e95d000000e9580000004d8d7fe04c3b7d107303ff554049c747f8030000004d89fb4c8b14244d89134c8b4c24084d894b084c8b4424104d8943104d8d7fe84c3b7d107303ff554049c747f8020000004c89fe48897e084c891e4889f04883c418c3495149504889f84c89cae825feffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fc49894424084c8b1c244d891c244c89e04883c410c390|@5900,8191,@5632,@5864| 5899:S47|50415253455f5452454528292e67656e636f64652837296275696c64416f7428342961646453636f6e737472283429 5900:S58|50415253455f5452454528292e67656e636f64652837296275696c64416f7428342961646453636f6e737472283429616464436c697374283129 5901:C3,64|90909090909090483b65187303ff5548524989c048bb030000000000000048b8c0fbfaacaa2a0000488d542408909090ff15320000004883c408c39090909090|@5906,8191,@5903|22,0,1 32,0,@5902 5902:O4|0,@3403,0,0 5903:C2,136|90909090909090483b65187303ff55484983f8017501c34d8b304d8b2e4983fdeb75474d8b6608f6c3017503ff55704989db4983c30270f44c8b52f85249ff700849534d8b4c24104989c0498b442408498b5208ff124c8b442408488b1c24488b5424104883c418eb9d48b8a8fcfaacaa2a0000909090ff555848b8010000000000000090909090|@5907,8191|108,0,@5904 124,0,0 5904:O3|@7377,@215,@5905 5905:S30|6d616b6574202d206261646c7920666f726d656420706172736574726565 5906:S35|50415253455f5452454528292e67656e636f64652837296275696c6454726565283129 5907:S43|50415253455f5452454528292e67656e636f64652837296275696c64547265652831296d616b6574283329 5908:C3,400|90909090909090483b65187303ff55484c8b72184d8b2e41f6c5017503ff55704d89ec4983c40270f44d89264d8d7fd84c3b7d107303ff554049c747f8040000004d89fc49c74424180100000049895c24104d896c240849c70424f9ffffff4d8d7fd04c3b7d107303ff554049c747f8050000004c89fb48c743200100000048c743180100000048c74310030000004c896b0848c703f7ffffff524955534d8d7fe84c3b7d107303ff554049c747f8020000004c89f94c89410848c70101000000495149544c8b004983f80175054889cfeb5e505049ff7008498b304c8d4424084889cb4889f0488d542440ff15c60000004d8d7fe84c3b7d107303ff554049c747f8020000004c89fb488b542408488913488b4c241048894b084889d94c8b04244883c418483b65187303ff5548eb97e90a00000048bf01000000000000004d8d7fe84c3b7d107303ff554049c747f8020000004c89fe488b1f48895e08488b1424488916488b4c2408488b4708488901488971084c8b7424104c89711048b801000000000000004883c428c39090|@5912,8191,@5909|312,0,0 385,0,0 5909:C6,288|90909090909090483b65187303ff55484989d64989c54c89e8909090ff15260100004d89f44c8b58104c89d8ff151e0100004883f80174704d89ea4c89d89090ff15120100005050504d8b4c24f84954495048ff3048ff700848ff33498b79104c8d4c24284d8b4424e8488b5b084c89d04889faff12488b742420488b5c2410488b56f0488913488b4ef8488b41084c8b304c8b6c24084d8975004c8b5c24284983fb01750deb05e95c0000004c8b2424eb12488b0424488d542440ff159e0000004989c44d8d7fe84c3b7d107303ff554049c747f8020000004d89fa4c8b4c24384d894a084c8b4424304d8902488b7c24184c89274c89570848b801000000000000004883c440c348b8b800fbacaa2a0000ff555848b80100000000000000|@5914,8191,@2950,@5915,@5917,@5913|252,0,0 267,0,@5910 280,0,0 5910:O3|@7377,@215,@5911 5911:S7|73657441646472 5912:S37|50415253455f5452454528292e67656e636f64652837296465636c61726556617273283429 5913:C2,88|90909090909090483b65187303ff55484883f8017505488b42e8c35248ff30488b40089090e8ddffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b04244889024889d04883c410c3909090|@1847,5| 5914:S47|50415253455f5452454528292e67656e636f64652837296465636c6172655661727328342973657441646472283329 5915:C2,32|4c8b304983fe03750b48b80300000000000000c348b80100000000000000c390|@5916,4097|11,0,1 22,0,0 5916:S5|4c6f63616c 5917:C2,40|4c8b70084c8b68104d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8968084c8930c3|@5916,6145| 5918:O2|@4253,0 5919:O2|@5920,0 5920:O2|-10,@5921 5921:O2|-3,@970 5922:O2|@5923,0 5923:O2|-10,@5924 5924:O2|-3,@5925 5925:O3|100,@4807,0 5926:C11,712|90909090909090483b65187303ff55484c8b742408505050525349504951495249ff760849ff761049ff76184c8d4c24404989c0488b5c24684c89f0488b5218ff12488b5c2418488b042490ff159e0200005048bb0100000000000000488b4424209090ff158e0200004883f8017402eb18488b1c24488b44242090ff157e0200004883f8017502eb414d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c8b6424484c8960104c8b5c24304c8958084c8b5424204c8910488b542428909090ff124989c5eb584c8b6c24184d8b65004983fcfd75614d8b5d0849f7c30100000075594d8b53084983fa01753748ff74245849ff334c8b5424304c8b4c24384c8b442440488b5c2448488b442458488b5424509090e8e9feffff4989c5eb6fe92d0100004c89d8488d542460ff15d20100004989c5eb5ce9130000004c89d8488d542460ff15c20100004989c5eb6d4983fc01751a498b5d08488b442410488d54246090ff15aa0100004989c5eb644983fcff75634d8b5d0849ba01000000000000004983fb01750f4c89d0eb59e9be000000e9b90000004d8d7fe84c3b7d107303ff554049c747f8020000004d89f94d8951084d8b034d8901eb05e9900000004d89ca4d8b5b08483b65187303ff5548ebb0e979000000e91a00000048b80100000000000000488d542460ff152a0100004989c5eb5a4983fc037516498b4508488d5424609090ff15160100004989c5eb3e4d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c8b5c24484c8958104c8b5424304c8950084c8b0c244c8908488b542428909090ff124989c5498b7d084883ff0175074c8b442450eb1b57488b442458488d542468909090ff15b60000004989c04883c40850504889e6498b5d0048891e4889e24c8942084d8d7fe84c3b7d107303ff554049c747f8020000004c89f8488b0c244889084c8b7424084c8970084883c470c210009090909090|@5928,8191,@5929,@5931,@5931,@5933,@5933,@5949,@5961,@5965,@5927|85,0,0 383,0,0 483,0,0 5927:C2,88|90909090909090483b65187303ff55484883f8017505488b4298c35248ff30488b40089090e8ddffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b04244889024889d04883c410c3909090|@1847,5| 5928:S34|50415253455f5452454528292e67656e636f6465283729636f646550617474283729 5929:C2,552|90909090909090483b65187303ff55484883f8017502eb084883fb017402eb0b48b80100000000000000c348f7c00100000075054c8b30eb1e4989c648b8105ff0acaa2a000090ff55584c89f049be010000000000000048f7c30100000075054c8b2beb1e4989c548b8105ff0acaa2a000090ff55584c89e849bd010000000000000049554d0bee41f6c501495d7503ff55704d3bf5756348f7c00100000075054c8b20eb1d4989c448b8105ff0acaa2a0000ff55584c89e049bc010000000000000048f7c00100000075064c8b5808eb1a48b8105ff0acaa2a0000909090ff555849bb010000000000000048f7c301000000750b4c8b5308eb1de95100000048b8105ff0acaa2a000090ff555849ba010000000000000049544c89d34c89d890e8e1feffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fb48894308488b04244889034889d84883c408c348f7c00100000075054c8b20eb204989c448b8105ff0acaa2a0000909090ff55584d89e349bc010000000000000048f7c30100000075054c8b1beb1e4989c348b8105ff0acaa2a000090ff55584d89da49bb010000000000000049544d23e341f6c401495c7503ff55704d3be37d3048f7c00100000075064c8b5008eb1948b8105ff0acaa2a00009090ff555849ba01000000000000004c89d0e917feffff48f7c30100000075064c8b5308eb204989c248b8105ff0acaa2a0000909090ff55584c89d349ba01000000000000004c89d3e9e0fdffff90|@5930,7945|34,0,0 62,0,@2029 79,0,0 106,0,@2029 123,0,0 171,0,@2029 187,0,0 212,0,@2029 228,0,0 258,0,@2029 272,0,0 356,0,@2029 375,0,0 402,0,@2029 419,0,0 465,0,@2029 480,0,0 516,0,@2029 535,0,0 5930:S35|50415253455f5452454528292e67656e636f6465283729696e74657273656374283229 5931:C2,280|90909090909090483b65187303ff55484883f801751c4883fb01750b48b80300000000000000c348b80100000000000000c34883fb01750b48b80100000000000000c348f7c00100000075054c8b30eb1e4989c648b8105ff0acaa2a000090ff55584c89f049be010000000000000048f7c30100000075054c8b2beb1e4989c548b8105ff0acaa2a000090ff55584c89e849bd010000000000000049554d0bee41f6c501495d7503ff55704d3bf5755b48f7c00100000075064c8b6008eb1948b8105ff0acaa2a00009090ff555849bc010000000000000048f7c30100000075064c8b5b08eb1948b8105ff0acaa2a00009090ff555849bb01000000000000004c89db4c89e0e9fcfeffff48b80100000000000000c39090|@5932,7689|30,0,1 41,0,0 58,0,0 86,0,@2029 103,0,0 130,0,@2029 147,0,0 193,0,@2029 208,0,0 233,0,@2029 248,0,0 269,0,0 5932:S28|50415253455f5452454528292e67656e636f64652837296571283229 5933:C3,256|90909090909090483b65187303ff5548525049be01000000000000004883f80175054d89f5eb2e41f6c6017503ff55704c89f24883c20270f4488b40084989d6483b65187303ff5548ebd149bd0100000000000000488b5424084d8d7fc04c3b7d107303ff554049c747f8070000004c89f849bef80cfbacaa2a00004c89304c8968304c8b34244c8970284c8b72f84c8970204c8b62d84c8960184c8b5ae04c8958104c8b52c84c89500841f6c5017503ff55704d89e94983e90270f449514989c048b80100000000000000488d542418909090ff154e000000488b5424104989c14c89c14c8b42e8488b5ad0488b42c04889ca4883c418ff22909090909090|@5947,8191,@5946|20,0,0 77,0,0 116,0,@5934 196,0,0 5934:C8,576|90909090909090483b65187303ff5548505249514989da48bb01000000000000004c89c8ff153e0200004883f8017402eb2048bb0100000000000000488b442410909090ff15260200004883f8017502eb374c8b4c24084d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c8940104c8950084c8b4424104c8900498b51084883c418ff224c89d74c89c649b8010000000000000048bb010000000000000048b80100000000000000488d5424189090ff15be010000488b5c2408575650488b53284883fa01751848b860d6ecacaa2a000090ff555848b901000000000000004883f8017505488b0aeb2ca8017503ff55704989c64983ee0270f44c89f0488b5208483b65187303ff5548ebb548b90100000000000000488b4424204c8b70204d8b264983fc0b7516514c89f3488b4424089090ff15420100004989c5eb494983fcfb7516514c89f3488b4424089090ff152e0100004989c5eb2d4d8d7fe04c3b7d107303ff554049c747f8030000004d89fd4c8b1c244d895d104d89750849c745000d000000514d8d7fe84c3b7d107303ff554049c747f8020000004d89fa49c74208010000004c8b4c24084d890a4d89e84c89d3488b44242090ff15ca0000004d8d7fe04c3b7d107303ff554049c747f8030000004c89ff48bea00ffbacaa2a0000488937488b5c242848895f1048894708488b5424384c89442438488b0c24488b44243048894c24304989c24989f94c8b4424184c8b73184c8b6b104c89f3488b4424104989d44c89ea4883c4304954ff2290909090909090|@5938,8191,@5931,@5931,@5939,@4802,@4802,@5937|25,0,0 52,0,0 145,0,0 155,0,0 165,0,0 206,0,@49 220,0,0 275,0,0 480,0,@5935 5935:C2,40|90909090909090483b65187303ff55484c8b4a084c8b4010488b5808488b00488b5210ff22909090|@5936,8191| 5936:S57|50415253455f5452454528292e67656e636f6465283729636f64655061747428372970617474436f64652d6465737061746368283129283129 5937:C2,552|90909090909090483b65187303ff55484883f801750b48b80100000000000000c34883fb017501c348f7c00100000075054c8b30eb1d4989c648b8105ff0acaa2a0000ff55584c89f049be010000000000000048f7c30100000075054c8b2beb1e4989c548b8105ff0acaa2a000090ff55584c89e849bd010000000000000049554d0bee41f6c501495d7503ff55704d3bf5755b48f7c00100000075064c8b6008eb1948b8105ff0acaa2a00009090ff555849bc010000000000000048f7c30100000075064c8b5b08eb1948b8105ff0acaa2a00009090ff555849bb01000000000000004c89db4c89e0e918ffffff48f7c00100000075054c8b20eb1e4989c448b8105ff0acaa2a000090ff55584d89e349bc010000000000000048f7c30100000075054c8b1beb1e4989c348b8105ff0acaa2a000090ff55584c89d849bb010000000000000049544d23e341f6c401495c7503ff55704d3be37d6d48f7c00100000075054c8b10eb1d4989c248b8105ff0acaa2a0000ff55584c89d049ba010000000000000048f7c00100000075064c8b4808eb1a48b8105ff0acaa2a0000909090ff555849b9010000000000000049524c89c8e84dfeffff4d8d7fe84c3b7d107303ff5540eb05e91e00000049c747f8020000004c89fb48894308488b04244889034889d84883c408c348f7c30100000075064c8b5308eb204989c248b8105ff0acaa2a0000909090ff55584d89d149ba01000000000000004c89d3e9e4fdffff9090909090|@5945,8073|24,0,0 59,0,@2029 75,0,0 102,0,@2029 119,0,0 165,0,@2029 180,0,0 205,0,@2029 220,0,0 258,0,@2029 275,0,0 302,0,@2029 319,0,0 367,0,@2029 383,0,0 408,0,@2029 424,0,0 512,0,@2029 531,0,0 5938:S54|50415253455f5452454528292e67656e636f6465283729636f64655061747428372970617474436f64652d6465737061746368283429 5939:C4,352|90909090909090483b65187303ff55484c8b72f04d8b6e3049504d0bc541f6c00149587503ff55704d3bc575044889d8c34989d34989c24989d9498b5be84c89c0909090ff153e0100004883f801745f498b5bf04953495249514950488b53284883fa01751a48b860d6ecacaa2a0000909090ff555848b801000000000000004983f8017505488b02eb3341f6c0017503ff55704c89c14883e90270f44989c8488b5208483b65187303ff5548ebb1e98300000048b80100000000000000488b54241890ff15c6000000488b4c2410504823c1a801587503ff5570483bc17e2a4c8b342441f6c6017503ff55704d89f54983c50270f44d89e84c89f3488b5424184883c420e9fdfeffff488b0424a8017503ff55704989c64983c60270f44d89f0488b5c24084889c8488b5424184883c420e9d0feffff41f6c0017503ff55704c89c34883c30270f44989d84c89cb4c89d04c89dae9adfeffff909090909090|@5941,8143,@5942,@5940|104,0,@49 120,0,0 182,0,0 5940:C4,544|90909090909090483b65187303ff55484c8b70084d8b2e4983fdfd7569524d8b660849bb01000000000000004983fc0175084c89d84883c408c3495349ff742408498b0424488b542410909090e8b5ffffff488b542408504823c2a801587503ff5570483bc27e054889c1eb034889d14989cb4c8b24244883c410483b65187303ff5548eba6e90f00000048b801000000000000004883c418c34c89f1488b5af8488b4018909090ff159a0100004989c248bb01000000000000004c89d09090ff158a0100004883f8017462488b194883fb01755e48ba0100000000000000488b41084883f80175054989d6eb2df6c2017503ff55704989d54983c50270f4488b40084c89ea483b65187303ff5548ebd249be010000000000000041f6c6017503ff55704c89f04883c00270f4c3e9c90000004883fbff755948ba0100000000000000488b41084883f80175054989d6eb2df6c2017503ff55704989d54983c50270f4488b40084c89ea483b65187303ff5548ebd249be010000000000000041f6c6017503ff55704c89f04883c00270f4c34883fb03755948ba0100000000000000488b41084883f80175054989d6eb2df6c2017503ff55704989d54983c50270f4488b40084c89ea483b65187303ff5548ebd249be010000000000000041f6c6017503ff55704c89f04883c00270f4c348b80100000000000000c349f7c2010000007504498b02c348b8105ff0acaa2a0000ff555848b80100000000000000|@5944,7951,@5929,@5931|36,0,0 141,0,0 179,0,0 215,0,0 275,0,0 315,0,0 375,0,0 410,0,0 470,0,0 499,0,0 523,0,@2029 536,0,0 5941:S68|50415253455f5452454528292e67656e636f6465283729636f64655061747428372970617474436f64652d646573706174636828342966696e6444656570657374283329 5942:C2,232|90909090909090483b65187303ff55484883fb01750b48b80100000000000000c348f7c30100000075054c8b33eb204989c648b8105ff0acaa2a0000909090ff55584c89f049be010000000000000050490bc6a801587503ff5570493bc6750b48b80300000000000000c348f7c30100000075054c8b2beb1e4989c548b8105ff0acaa2a000090ff55584c89e849bd0100000000000000504923c5a801587503ff5570493bc57d0b48b80100000000000000c348f7c30100000075064c8b6308eb1d4989c448b8105ff0acaa2a0000ff55584c89e349bc01000000000000004c89e3e920ffffff90|@5943,7177|24,0,0 52,0,@2029 71,0,0 98,0,1 126,0,@2029 143,0,0 170,0,0 199,0,@2029 215,0,0 5943:S32|50415253455f5452454528292e67656e636f6465283729696e73696465283229 5944:S66|50415253455f5452454528292e67656e636f6465283729636f64655061747428372970617474436f64652d6465737061746368283429706174744465707468283129 5945:S30|50415253455f5452454528292e67656e636f646528372964696666283229 5946:C2,120|90909090909090483b65187303ff55484c8b72e8504923c6a801587503ff5570493bc67e0b48b80100000000000000c3a8017503ff55704989c54983c50270f452504c89e8e8bdffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b04244889024889d04883c410c3909090|@5948,6149|39,0,0 5947:S45|50415253455f5452454528292e67656e636f6465283729636f64655061747428372970617474436f64652d2f32 5948:S30|50415253455f5452454528292e67656e636f646528372966726f6d283229 5949:C9,1184|90909090909090483b65187303ff55484883fb0175354d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c8b72e84c8970104c8b6ad04c8968084c8b62a04c8920488b52c8ff224c8b334989d14989c04c89f7488b7308498b59c0498b069090ff155e0400004889c148bb01000000000000004889c89090ff154e0400004883f801740e4889f34c89c04c89cae971ffffff4983f803756f498b41e04c8b70084d8b2e49515148ff77084d89e8498b59f8488b471048ba681ffbacaa2a000090ff150e0400004c8b6424104989c0498b5c24a0488b442408ff15fe030000488b7c2410488b7424184c89442418488b1c2448895c24104989c24c8b4fc84c8b47d0488b5fd8eb05e90f000000488b47e8488b57e04883c41056ff22498b41e04c8b70084d8b2e495149505756514d89e8498b59f8488b471048ba1822fbacaa2a00009090ff159a0300004c8b6424104c8b5c24204d8b53e04d8b4a084d8b015049ff742408498b5bf8498b44241048ba681ffbacaa2a0000ff156e030000488b7c24304889c6488b5fa0488b44241090ff155e0300005648ff7424084989c24c8b4fc84c8b47d0488b5fd8488b47e8488b57e090ff12488b5c2428f6c3017503ff55704889da4883ea0270f450488b5c24204889d0488b542438909090e821feffff488b4c24384c8b71d84983fe01746e4d8d7fe84c3b7d107303ff554049c747f8020000004d89fd49c74508010000004c8b6424104d8965004d8d7fd84c3b7d107303ff554049c747f8040000004d89fb49c743180300000049bad0a8edacaa2a00004d8953104d896b0849c703090000004c8b40084983f8017513eb05e9db00000049b9101cf8acaa2a0000eb32498b78084883ff0175054d8b08eb234d8d7fe84c3b7d107303ff554049c747f8020000004d89f94d89410849c701130000004d8d7fd84c3b7d107303ff554049c747f8040000004c89fe48bb380dedacaa2a000048895e184c894e104c895e0848c70605000000488b14244d8d7fe84c3b7d107303ff554049c747f8020000004d89fd4c8b62084d8965084989750050504989e349c703ffffffff4989e24d896a084d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b0c244c89084c8b4424084c8940084883c450c34c8b2c244d8b65004c8b1849544d0be341f6c401495c7503ff55704d3be3751441f6c4017503ff55704983fc017c054883c440c34d8b4d084983f901750c49ba101cf8acaa2a0000eb324d8b41084983f80175054d8b11eb234d8d7fe84c3b7d107303ff554049c747f8020000004d89fa4d894a0849c70213000000488b70084883fe01750c48bf101cf8acaa2a0000eb32488b5e084883fb017505488b3eeb234d8d7fe84c3b7d107303ff554049c747f8020000004c89ff4889770848c707130000004d8d7fd84c3b7d107303ff554049c747f8040000004c89fa48897a184c8952104c8b5424104c89520848c702050000004d8d7fe84c3b7d107303ff554049c747f8020000004d89f849c740080100000049891050504889e748c707ffffffff4889e34c8943084d8d7fe84c3b7d107303ff554049c747f8020000004c89f8488b14244889104c8b5c24084c8958084883c450c3909090909090|@5960,8191,@5929,@5931,@5951,@5864,@5956,@5951,@5864|111,0,0 187,0,@5950 318,0,@5955 372,0,@5950 576,0,@635 618,0,@4798 704,0,@217 899,0,@4798 971,0,@4798 5950:O2|@5951,@5395 5951:C8,448|90909090909090483b65187303ff55484989d64989c5498b45089090ff15c60100004883f801745f498b4508ff15be0100004883f80175705349ba010000000000000049b950a8f9acaa2a00004d89c449b8e005edacaa2a00004c89e34c89e8498b5608ff124c8b104983fa0b751d4889c348b80500000000000000ff15760100004989c3eb56e9b70000004983fafb75204889c348b8050000000000000090ff155a010000eb05e98b0000004989c3eb2b4d8d7fe04c3b7d107303ff554049c747f8030000004d89fb49c74310050000004989430849c7030d0000004d8d7fe84c3b7d107303ff554049c747f8020000004d89f949c74108010000004c8b04244d89014d8d7fd84c3b7d107303ff554049c747f8040000004c89f848c74018010000004c8958104c89480848c700090000004883c408c348b8d095edacaa2a0000c34d8b65084983fc01755b4c8b1b4983fb0b751048b80500000000000000ff25a20000004983fbfb751048b80500000000000000ff25940000004d8d7fe04c3b7d107303ff554049c747f8030000004c89f848c74010050000004889580848c7000d000000c348b8a821fbacaa2a000090ff555848b80100000000000000|@5954,8191,@2610,@2612,@4802,@4802,@4802,@4802|59,0,0 69,0,@5391 82,0,@193 116,0,2 151,0,2 314,0,@478 344,0,2 366,0,2 426,0,@5952 440,0,0 5952:O3|@7377,@215,@5953 5953:S11|6d616b65496e7665727365 5954:S26|56414c55455f4f505328292e6d616b65496e7665727365283329 5955:O2|@5956,@5395 5956:C8,656|90909090909090483b65187303ff55484989d64989c5498b45089090ff15960200004883f801745b498b4508ff158e0200005349ba010000000000000049b950a8f9acaa2a00004d89c449b8e005edacaa2a00004c89e34c89e8498b56089090ff124c8b104983fa0b751d4889c348b80100000000000000ff154a0200004989c3eb4fe9a50000004983fafb75194889c348b8010000000000000090ff152e0200004989c3eb2b4d8d7fe04c3b7d107303ff554049c747f8030000004d89fb49c74310010000004989430849c7030d0000004d8d7fe84c3b7d107303ff554049c747f8020000004d89f949c74108010000004c8b04244d89014d8d7fd84c3b7d107303ff554049c747f8040000004c89f848c74018030000004c8958104c89480848c700090000004883c408c34d8b65084983fc01756e4c8b134983fa0b751b49564955495048b80100000000000000ff15820100004989c3eb5c4983fafb751e49564955495048b80100000000000000909090ff15660100004989c3eb384d8d7fe04c3b7d107303ff554049c747f8030000004d89fb49c743100100000049895b08eb05e9cc00000049c7030d0000004956495549504c8b4c2410495349ba01000000000000004d8b410849b950a8f9acaa2a00004c89c749b8e005edacaa2a0000488b5c2408488b4424104889faff124d8d7fe84c3b7d107303ff554049c747f8020000004c89fe48c74608010000004889064d8d7fe84c3b7d107303ff554049c747f8020000004c89fb48897308488b14244889134d8d7fd84c3b7d107303ff554049c747f8040000004c89f848c740180300000048b91858faacaa2a0000488948104889580848c700090000004883c420c348b82825fbacaa2a0000909090ff555848b80100000000000000|@5959,8191,@2610,@2612,@4802,@4802,@4802,@4802|53,0,0 63,0,@5391 76,0,@193 112,0,0 147,0,0 328,0,0 361,0,0 448,0,0 462,0,@5391 475,0,@193 602,0,@5668 632,0,@5957 648,0,0 5957:O3|@7377,@215,@5958 5958:S9|6d616b654775617264 5959:S24|56414c55455f4f505328292e6d616b654775617264283329 5960:S47|50415253455f5452454528292e67656e636f6465283729636f64655061747428372967656e436f6e73747273283229 5961:C6,1112|90909090909090483b65187303ff55484883f80175354d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c8b72e84c8970104c8b6ad04c8968084c8b62a04c8920488b52c8ff224c8b304989d14d89f0488b7808498b59c0498b0690ff151a0400004889c648bb01000000000000004889f09090ff150a0400004883f801740b4889f84c89cae978ffffff49514950564889f84c89ca909090e865ffffff488b5c2410488b53e04d8d7fd84c3b7d107303ff554049c747f8040000004c89f949be802afbacaa2a00004c89314c8b6bd84c8969184c8b62104c896110488941084c8b5c24084c8b52084d8b0a50514d89c8488b5bf8498b431048ba1822fbacaa2a000090ff15820300004c8b442418488b7c2420488b77e0488b5e08488b135049ff7008498b48104989d0488b5ff84889c848ba681ffbacaa2a0000ff15520300004c8b7424305048ff7424084c8b5424304d8b4ec84c8b442420498b5ed8498b46e8498b56e090ff124c8b6c24304d8b65d84983fc0174724d8d7fe84c3b7d107303ff554049c747f8020000004d89fb49c74308010000004c8b5424084d89134d8d7fd84c3b7d107303ff554049c747f8040000004d89f949c741180300000049b8d0a8edacaa2a00004d8941104d89590849c70109000000488b7c2418488b5f084883fb017513eb05e9d600000048be101cf8acaa2a0000eb32488b53084883fa017505488b33eb234d8d7fe84c3b7d107303ff554049c747f8020000004c89fe48895e0848c706130000004d8d7fd84c3b7d107303ff554049c747f8040000004c89f949be380dedacaa2a00004c897118488971104c89490848c701050000004d8d7fe84c3b7d107303ff554049c747f8020000004d89fb4c8b50084d89530849890b50504989e149c701ffffffff4989e04d8958084d8d7fe84c3b7d107303ff554049c747f8020000004c89f8488b3424488930488b542408488950084883c448c34c8b5c24184c8b104d8b0b49524d0bd141f6c201495a7503ff55704d3bd1751741f6c2017503ff55704983fa017c084c89d84883c438c3488b78084883ff01750c49b8101cf8acaa2a0000eb32488b77084883fe0175054c8b07eb234d8d7fe84c3b7d107303ff554049c747f8020000004d89f84989780849c700130000004d8d7fd84c3b7d107303ff554049c747f8040000004c89fb48ba808ff6acaa2a0000488953184c894310488b4c240848894b0848c703050000004d8b43084983f801750c49be101cf8acaa2a0000eb32498b70084883fe0175054d8b30eb234d8d7fe84c3b7d107303ff554049c747f8020000004d89fe4d89460849c706130000004d8d7fe04c3b7d107303ff554049c747f8030000004c89fa4c89721048895a0848c702010000004d8d7fe84c3b7d107303ff554049c747f8020000004c89f948c741080100000048891150504989e649c706ffffffff4889e648894e084d8d7fe84c3b7d107303ff554049c747f8020000004c89f8488b1c24488918488b542408488950084883c448c3909090|@5964,8191,@5929,@5931,@5956,@5951|107,0,0 197,0,@5962 255,0,@5955 312,0,@5950 455,0,@635 502,0,@4798 588,0,@217 781,0,@4798 867,0,@4253 911,0,@4798 5962:C2,24|488b42184883f8017405488b4208c3488b4210c390909090|@5963,5| 5963:S64|50415253455f5452454528292e67656e636f6465283729636f64655061747428372967656e45786e436f6e73747273283129636f646544656661756c74283129 5964:S50|50415253455f5452454528292e67656e636f6465283729636f64655061747428372967656e45786e436f6e73747273283129 5965:C6,1320|90909090909090483b65187303ff55484883f80175354d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c8b72e84c8970104c8b6ad04c8968084c8b62a04c8920488b52c8ff224c8b304989d14d89f0488b7808498b59c0498b4608ff15ea0400004889c648bb01000000000000004889f09090ff15da0400004883f801740b4889f84c89cae978ffffff498b50104883fa01750c48bbd095edacaa2a0000eb264d8d7fe84c3b7d107303ff554049c747f8020000004c89fb488b0a48894b0848c703fbffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89f848c74008010000004d8b71f84c89304d8d7fe84c3b7d107303ff554049c747f8020000004d89fd4989450849895d004d8d7fe84c3b7d107303ff554049c747f8020000004d89fc4d896c240849c70424150000004951575649ff3049544983fd01750c49bb0300000000000000eb304d8b55004d8b0a4983f9fb75194d8b6d08483b65187303ff5548ebd249bb010000000000000049bb01000000000000004983fb01742f488b0424ff15ce0300004d8d7fe84c3b7d107303ff554049c747f8020000004d89f84989400849c700fbffffffeb044c8b04244d8d7fe84c3b7d107303ff554049c747f8020000004c89ff48c74708010000004c89074d8d7fd84c3b7d107303ff554049c747f8040000004c89fe48c7461803000000488b5c240848895e1048897e0848c70609000000488b542420488b4ac8488b5aa0488b442410ff153e0300004c8b7424204989c54d8d7fe04c3b7d107303ff554049c747f8030000004c89f84d8b66e84c8960104d8b5ed04c8958084c8928564889ca909090ff1250488b442428488b542430e891fdffff4c8b5424304d8b4ad84983f901746d4d8d7fe84c3b7d107303ff554049c747f8020000004d89f849c7400801000000488b7c24084989384d8d7fd84c3b7d107303ff554049c747f8040000004c89fe48c746180300000048bbd0a8edacaa2a000048895e104c89460848c70609000000488b48084883f9017513eb05e9db00000048ba101cf8acaa2a0000eb324c8b71084983fe017505488b11eb234d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894a0848c702130000004d8d7fd84c3b7d107303ff554049c747f8040000004d89fd49bc380dedacaa2a00004d896518498955104989750849c74500050000004c8b1c244d8d7fe84c3b7d107303ff554049c747f8020000004d89f8498b7b08498978084d892850504889e648c706ffffffff4889e34c8943084d8d7fe84c3b7d107303ff554049c747f8020000004c89f8488b1424488910488b4c2408488948084883c448c34c8b0424498b38488b3056480bf740f6c6015e7503ff5570483bfe751440f6c7017503ff55704883ff017c054883c438c3498b50084883fa01750c48bb101cf8acaa2a0000eb32488b4a084883f9017505488b1aeb234d8d7fe84c3b7d107303ff554049c747f8020000004c89fb4889530848c703130000004c8b68084983fd01750c49be101cf8acaa2a0000eb334d8b65084983fc0175064d8b7500eb234d8d7fe84c3b7d107303ff554049c747f8020000004d89fe4d896e0849c706130000004d8d7fd84c3b7d107303ff554049c747f8040000004d89fb4d89731849895b10488b5c240849895b0849c703050000004d8d7fe84c3b7d107303ff554049c747f8020000004c89f948c74108010000004c891950504989e649c706ffffffff4989e449894c24084d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b1c244c8918488b742408488970084883c448c3|@5966,8191,@5929,@5931,@4523,@5864|107,0,0 155,0,@478 328,0,1 368,0,0 378,0,0 719,0,@635 761,0,@4798 847,0,@217 1039,0,@4798 1111,0,@4798 5966:S57|50415253455f5452454528292e67656e636f6465283729636f64655061747428372970617474436f64652d666f6c64436f6e73747273283129 5967:C11,1328|90909090909090488dbc2430ffffff483b7d187303ff55504c8b7424084983fe01750d48b80100000000000000c228004d8b2e4d8b65004983fceb756b4d8b5d08488b7c241048f7c701000000755e52505349504951495249ff3349ff730849ff760848ff3748ff770848be0100000000000000488b4c24084883f90175054889f0eb3840f6c6017503ff55704989f64983c60270f4488b49084c89f6483b65187303ff5548ebd1e96b040000e94d04000048b801000000000000004c8b74247841f6c6017503ff55704d89f54983ed0270f441f6c5017503ff55704983fd017d02eb234c8ba424800000004d8b1c2449534d23dd41f6c301495b7503ff55704d3beb7d02eb1d4989c348b860d6ecacaa2a0000909090ff555849bc010000000000000041f6c5017503ff55704d89ea4983c20270f44f8b4c94fc4d89cc4983fc017567504955495448bbffffffffffffffff4c89f09090ff15fa0300004889c348b8e836fbacaa2a000090ff15ee03000048bb0037fbacaa2a0000ff15e60300004989c24c8b4c24304c8b44246048bb0100000000000000488b4424589090ff15ca0300004989c0eb0f49b801000000000000005049554954488b7c2468488b7708488b1ef6c3017503ff55704889da4883c20270f44889164d8d7fe04c3b7d107303ff554049c747f8030000004c89f9488b4424484889411048c74108010000004c8b7424104c89314c8b6c24204983fd0175054989cceb6b50505049ff75084c8d4424084889cb498b4500488d9424900000009090ff153a0300004d8d7fe04c3b7d107303ff554049c747f8030000004d89fb4c8b5424084d89134c8b4c24104d894b084c8b4424184d8943104c89d94c8b2c244883c420483b65187303ff5548eb8ae90a00000049bc01000000000000004d8d7fd84c3b7d107303ff554049c747f8040000004c89f84c8b5c24304c8958184c8b5424404c8950104d8b4c24104c8948084c8b4424384c890049ff742408488b5424589090ff124d8d7fe84c3b7d107303ff554049c747f8020000004c89ff48c74708010000004889074883ff017506488b3424eb1c57488b442408488d94248000000090ff155e0200004889c64883c4084d8d7fe84c3b7d107303ff554049c747f8020000004c89fb4889730848c70313000000488b542470488b4a08488b01a8017503ff55704989c64983ee0270f44c89314c8b6424084983fc03750c49bd2037fbacaa2a0000eb0a49bd50a2f9acaa2a00004c8b19534955495348bb5f00000000000000488b44246090ff15de0100005048bbffffffffffffffff488b8424b8000000909090ff15ca0100004889c3488b0424909090ff15c20100004989c24d8d7fd84c3b7d107303ff554049c747f8040000004c89f84c8950184c8b4c24384c8948104c8b4424084c894008488b7c2418488938488b542410ff12488bb424b0000000488b5c24304889f24823d3f6c2017503ff5570488d56ff4803d370f44d8d7fd84c3b7d107303ff554049c747f8040000004c89f948c7411801000000488941104889510848c701f9ffffff488b8424b8000000a8017503ff55704989c64983c60270f45148ffb424c800000049565648ff74246048ff7424784c8b9424980000004c8b8c24a00000004c8b8424a8000000488b9c24b0000000488b8424b8000000488b9424c00000009090e839fbffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fd498945084c8b24244d8965004c89e84881c4a0000000c2280048b81038fbacaa2a00009090ff555848b8010000000000000048b81038fbacaa2a000090ff555848b80100000000000000|@5976,8191,@305,@303,@303,@2855,@5977,@5975,@303,@305,@303|37,0,0 108,0,0 180,0,0 268,0,@49 284,0,0 331,0,-1 355,0,@5968 372,0,@5969 401,0,0 429,0,0 653,0,0 888,0,@5970 900,0,@5377 918,0,47 941,0,-1 1281,0,@5973 1296,0,0 1306,0,@5973 1320,0,0 5968:S8|5061747465726e20 5969:S14|20697320726564756e64616e742e 5970:O1|@5971 5971:C2,128|4d8d7fb84c3b7d107303ff554049c747f8080000004d89fe49c746380100000049c746300100000049c74628010000004c8b68104d896e2049c74618010000004c8b60084d8966104c8b58184d895e084c8b104d89164d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89700848c700f3ffffffc3909090909090|@5972,7937| 5972:S23|434f44455452454528292e6d6b496e6c70726f63283129 5973:O3|@7377,@215,@5974 5974:S6|636745787073 5975:C2,88|90909090909090483b65187303ff55484883f8017505488b4280c35248ff30488b40089090e8ddffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b04244889024889d04883c410c3909090|@1847,5| 5976:S33|50415253455f5452454528292e67656e636f646528372963674578707328313029 5977:C6,448|90909090909090483b65187303ff55484989d64989c54c89e8909090ff15c60100004d89f44c8b58104c89d8ff15be0100004883f80174734d89ea4c89d89090ff15b2010000488b1349be01000000000000004989d54d23ee41f6c5017503ff55704d89f54c2bea4d8d6d0170f14d8d7fd04c3b7d107303ff554049c747f8050000004d89fb49c743200100000049c743180100000049c74310030000004d896b0849c703f7ffffffeb05e9f90000005050504d8b4c24f84954495048ff3048ff70085248ff7308498b79104c8d4c24304d89d8488b5b104c89d04889fa9090ff12488b74240848bb01000000000000004889f24823d3f6c2017503ff55704889da482bd6488d520170f1488b4c2418488911488b4424284c8b70f84d8b6e084d8b65004c8b5c24104d892340f6c6017503ff55704989f24983ea0270f44c8b4424304983f80175064c8b0c24eb12488b0424488d542448ff15a20000004989c14d8d7fe84c3b7d107303ff554049c747f8020000004c89ff488b74244048897708488b5c243848891f488b5424204c89124c894a0848897a1048b801000000000000004883c448c348b8b800fbacaa2a0000ff555848b80100000000000000|@5979,8191,@2950,@5915,@5917,@5978|75,0,0 233,0,0 412,0,0 427,0,@5910 440,0,0 5978:C2,88|90909090909090483b65187303ff55484883f8017505488b42e8c35248ff30488b40089090e8ddffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b04244889024889d04883c410c3909090|@1847,5| 5979:S43|50415253455f5452454528292e67656e636f64652837296367457870732831302973657441646472283329 5980:C8,1248|90909090909090488dbc2450ffffff483b7d187303ff555052505349504951495249be01000000000000004883fb0175054d89f5eb2e41f6c6017503ff55704d89f24983c20270f4488b5b084d89d6483b65187303ff5548ebd149bd01000000000000004c8b6424284955488b442420498b542438909090ff1250488b44242848ba4041fbacaa2a00009090ff124c8b5c242849f7c30100000075324d8b0b4d8b014983f8eb750a498b79084c8b5708eb394889c748b8b0d7edacaa2a0000ff555849ba0100000000000000eb1d4989c248b8b0d7edacaa2a0000ff55584d89d149ba0100000000000000488b742438488b5e28488b1350505049524c8d4c24104989d0488b5e30488b442440909090ff15f2030000488b4c2458488b41284c8b304c89f0488b5424189090ff124c8b6c24584d8b65204d8b1c244c8b5424284d89d94d23ca41f6c1017503ff55704d8d4bff4d03ca70f44d890c2441f6c2017503ff55704d89d04983c00270f44889c64c89c349b801000000000000004889da48bb81000000000000004889d048ba7015600000000000ff124c89104d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89f948c701030000004c8b7424684983fe01742b4d8d7fe84c3b7d107303ff554049c747f8020000004d89f949b87044fbacaa2a00004d890149897108eb314d8d7fe04c3b7d107303ff554049c747f8030000004d89f949b88045fbacaa2a00004d890149894910498b7d18498979084889c348b80300000000000000488d5424609090ff15ce0200004d8d7fb84c3b7d107303ff554049c747f8080000004c89fa49bec845fbacaa2a00004c893248895a384c8952304c8b6c24084c896a284c895a204c8b6424484c8962184c8b4424704c894210488b7c243048897a084d8d7fe84c3b7d107303ff554049c747f8020000004d89fe49bc584cfbacaa2a00004d892649895608488b542458495353515648ff7424404989c24c89c84d89f14989c048bb0100000000000000488b8424a0000000488b5210909090ff124c8b34244d8b2e4983fd0175305049baf84cfbacaa2a00004c8b4c24204c8b44247048bb0100000000000000488b44245890ff15ea0100004989c4eb0b49bc0100000000000000504c8b6424484983fc0375654c8b1c244d8b4b084983f90175074c8b542430eb1f4951488b442438488d942488000000909090ff15aa0100004989c24883c4084983fa01751448b8101cf8acaa2a00004881c480000000c218004d8b42084983f8017512498b024881c480000000c21800e92d0000004d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89500848c700130000004881c480000000c218004c8b5c247848ff7424106a0348ff74242848ff74244048ffb424880000004c8b5424784c8b8c24c00000004c8b8424b8000000488b9c2480000000488b842498000000498b530890ff124c8b14244d8b42084983f80175054989c1eb184950488d94248800000090ff15da0000004989c14883c4084983f9017507488b7c2430eb1f4951488b442438488d942488000000909090ff15b60000004889c74883c4084883ff01751448b8101cf8acaa2a00004881c480000000c21800488b77084883fe01750d488b074881c480000000c218004d8d7fe84c3b7d107303ff554049c747f8020000004c89f84889780848c700130000004881c480000000c2180090|@6002,8191,@5808,@6003,@2855,@6004,@6005,@6001|35,0,0 92,0,0 130,0,@5981 183,0,@970 196,0,0 211,0,@970 227,0,0 374,0,0 387,0,64 400,0,I11 486,0,@5987 529,0,@5989 557,0,1 604,0,@5990 689,0,@5998 733,0,0 774,0,@6000 794,0,0 821,0,0 901,0,@4798 1161,0,@4798 5981:O1|@5982 5982:C3,168|90909090909090483b65187303ff55484883f801750b48b80100000000000000c34c8b304d8b264983fceb75224d8b5e084c8b5008498b5b1048b8010000000000000090ff15860000004989c5eb1d4c8b580848b83842fbacaa2a00009090ff555849bd010000000000000049554c89d0e891ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fb48894308488b14244889134889d84883c408c390909090909090|@417,7949,@5985|24,0,0 59,0,0 85,0,@5983 100,0,0 5983:O3|@7377,@215,@5984 5984:S36|66696e64416c6c56617273202d206261646c7920666f726d656420706172736574726565 5985:C3,360|90909090909090483b65187303ff55484c8b334983fef175424c8b6b104d8b65004989c34c89e090ff15620100004883f80174044c89d8c34d8d7fe84c3b7d107303ff554049c747f8020000004c89fa4c895a084c89224889d0c34983fe1b753b4c8b6b084983fd017501c349ff7508498b5d0090e88dffffff4c8b2c244883c408483b65187303ff5548ebd848b801000000000000004883c408c34983fe1175424c8b6b184983fd017501c34d8b650049ff7508498b5c2408909090e845ffffff4c8b2c244883c408483b65187303ff5548ebd148b801000000000000004883c408c34983fe037509488b5b10e914ffffff4983fe13753b4c8b6b084983fd017501c349ff7508498b5d0090e8f5feffff4c8b2c244883c408483b65187303ff5548ebd848b801000000000000004883c408c34983fefb7509488b5b10e9c4feffff4983feef751a48ff7310488b5b08e8b1feffff488b1c244883c408e9a4feffffc390909090|@5986,7693,@2401|143,0,0 215,0,0 295,0,0 5986:S34|50415253455f5452454528292e67656e636f646528372966696e6456617273283229 5987:C2,144|4d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b72084c89700848c700edffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fd49c74508010000004989450050504889e048c700010000004889e04c8968084d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b2c244c89284c8b6c24084c8968084883c410c39090909090|@5988,6149| 5988:S50|50415253455f5452454528292e67656e636f6465283729636f64654d61746368283829636f646544656661756c742d283129 5989:C2,16|488b421048c70001000000488b4208c3|@5988,5| 5990:C4,1000|90909090909090483b65187303ff55484989d24989c14889df48bb01000000000000004c89c89090ff15e20300004883f801740f48b801000000000000004889faff2249f7c1010000007505498b31eb1748b8105ff0acaa2a0000ff555848be010000000000000040f6c6017503ff55704889f34883eb0270f4f6c3017503ff55704883fb017d02eb1b498b5238488b0a534823d9f6c3015b7503ff5570483bd97d02eb1748b860d6ecacaa2a0000ff555848ba0100000000000000f6c3017503ff55704889d84883c00270f44c8b7482fc4c89f2f6c2017503ff55704989d54983c50270f4f6c3017503ff55704883fb017d02eb1c4d8b62384d8b1c24534923dbf6c3015b7503ff5570493bdb7d02eb1048b860d6ecacaa2a0000909090ff5558f6c3017503ff55704989d94983c10270f44f896c8cfc498b7a304883ff03756f498b5a1848f7c3010000007567488b13488b0a4883f9eb7560488b42084c8b304c8b68084d8d7fd84c3b7d107303ff554049c747f8040000004c89f84c8968184d8b5a084c8958104c8940084c893056498b52109090ff124d8d7fe84c3b7d107303ff554049c747f802000000eb0fe98a000000e96d000000e94f0000004d89fa49c742080100000049890250504989e14c8b4424104d89014889e74c8957084d8d7fe84c3b7d107303ff554049c747f8020000004c89f8488b3424488930488b5c2408488958084883c418c348b8f849fbacaa2a00009090ff555848b8010000000000000048b8f849fbacaa2a000090ff555848b8010000000000000049525653498b52284883fa01751a48b860d6ecacaa2a0000909090ff555848b901000000000000004883fb017505488b0aeb2df6c3017503ff55704889d84883e80270f44889c3488b5208483b65187303ff5548ebb248b901000000000000005148b801000000000000004883f90175054989c6eb2ca8017503ff55704989c54983c50270f4488b49084c89e8483b65187303ff5548ebd349be0100000000000000488b1c244c89f0909090ff15260100004c8b6c24184d8b65204c8b5c24084d89e24d23d341f6c2017503ff55704d8d5424ff4d03d370f34d8d7fd04c3b7d107303ff554049c747f8050000004d89f949c741200100000049c741180100000049c74110030000004d89510849c701f7ffffff4d8d7fd84c3b7d107303ff554049c747f8040000004d89f849c74018010000004d8948104989400849c700090000004d8d7fe84c3b7d107303ff554049c747f8020000004c89ff48c74708010000004c890750504889e6488b5c242048891e4889e248897a084d8d7fe84c3b7d107303ff554049c747f8020000004c89f8488b0c244889084c8b7424084c8970084883c430c390|@5996,8191,@5931,@5993|27,0,0 54,0,0 83,0,@2029 96,0,0 167,0,@49 180,0,0 276,0,@49 529,0,@5991 544,0,0 554,0,@5991 568,0,0 592,0,@49 608,0,0 664,0,0 675,0,0 730,0,0 5991:O3|@7377,@215,@5992 5992:S34|636f64654d61746368202d206261646c7920666f726d656420706172736574726565 5993:C5,256|90909090909090483b65187303ff55484883fb01750b48b80100000000000000c34989c6488b0390ff15fa0000004d89f54c8b60104c89e0ff15f20000004883f801746d4d89eb4c89e09090ff15e6000000488b104c8b324d8d7fd04c3b7d107303ff554049c747f8050000004d89fd49c745200100000049c745180100000049c74510030000004d89750849c74500f7ffffff41f6c3017503ff55704d89dc4983ec0270f44955488b5b084c89e0eb05e933000000909090e849ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fb49894308488b1c2449891b4c89d84883c408c348b8a04bfbacaa2a0000ff555848b80100000000000000|@5997,7693,@2950,@5915,@5917|24,0,0 235,0,@5994 248,0,0 5994:O3|@7377,@215,@5995 5995:S11|6d616b654172674c697374 5996:S43|50415253455f5452454528292e67656e636f6465283729636f64654d61746368283829636f64652d283329 5997:S37|50415253455f5452454528292e67656e636f64652837296d616b654172676c697374283229 5998:C2,40|90909090909090483b65187303ff55484c8b4010488b5808488b00488b5208ff2290909090909090|@5999,8191| 5999:S43|50415253455f5452454528292e67656e636f6465283729636f64654d61746368283829636f64652d283129 6000:S27|4d61746368657320617265206e6f7420657868617573746976652e 6001:C2,96|90909090909090483b65187303ff55484883f8017508488b8278ffffffc35248ff30488b4008909090e8d9ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b04244889024889d04883c410c390909090909090|@1847,5| 6002:S35|50415253455f5452454528292e67656e636f6465283729636f64654d61746368283829 6003:C2,120|90909090909090483b65187303ff55484c8b72c8504923c6a801587503ff5570493bc67e0b48b80100000000000000c3a8017503ff55704989c54983c50270f452504c89e8e8bdffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b04244889024889d04883c410c3909090|@5948,6149|39,0,0 6004:C2,96|90909090909090483b65187303ff55484883f8017508488b8278ffffffc35248ff30488b4008909090e8d9ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b04244889024889d04883c410c390909090909090|@1847,5| 6005:C2,96|90909090909090483b65187303ff55484883f8017508488b8278ffffffc35248ff30488b4008909090e8d9ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b04244889024889d04883c410c390909090909090|@1847,5| 6006:C5,416|90909090909090483b65187303ff5548525053495049514d89d149b8c0fbfaacaa2a000048bb0300000000000000488b442410488b522890ff124c8b7424204d8b6e084d8b65005050504c8d4c24084d89e0498b5e20488b44241890ff15660100004c8b5c24384d8b5308498b02488b54241090ff124d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89f949c701030000004c8b4424384d8d7fe04c3b7d107303ff554049c747f8030000004c89ff48bec851fbacaa2a00004889374c894f10498b581848895f0849515048ff74241049bab027edacaa2a000049b95052fbacaa2a0000498b50104989f848bb0300000000000000488b4424489090ff12488b0c244c8b314983fe01754c4c8b6c24404d8b65084d8b1c2441f6c3017503ff55704983fb017e305049ba6853fbacaa2a00004c8b4c24384c8b44245848bb0100000000000000488b44243090ff15760000004989c2eb0b49ba0100000000000000504c8b2c244d8b65084983fc01750c488b4424184883c450c208004954488b442420488d542458ff15420000004883c458c20800909090|@6014,8191,@5808,@2855,@6013|28,0,@5902 38,0,1 185,0,@6007 218,0,@257 228,0,@6009 245,0,1 306,0,@6012 326,0,0 353,0,0 6007:C2,16|488b421048c70001000000488b4208c3|@6008,5| 6008:S48|50415253455f5452454528292e67656e636f6465283729636f646542696e64283629636f646544656661756c74283129 6009:O1|@6010 6010:C3,136|90909090909090483b65187303ff55484c8b500848bb0100000000000000488b00909090ff15860000004883f801740f48b801000000000000004c89d2ff2250504989e149c701ffffffff4989e049c74008010000004d8d7fe84c3b7d107303ff554049c747f8020000004c89f8488b3c24488938488b742408488970084883c410c39090909090|@6011,8191,@5931|22,0,0 50,0,0 6011:S42|50415253455f5452454528292e67656e636f6465283729636f646542696e64283629636f64652d283129 6012:S26|5061747465726e206973206e6f7420657868617573746976652e 6013:C2,88|90909090909090483b65187303ff55484883f8017505488b42a8c35248ff30488b40089090e8ddffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b04244889024889d04883c410c3909090|@1847,5| 6014:S34|50415253455f5452454528292e67656e636f6465283729636f646542696e64283629 6015:C15,2400|90909090909090488dbc2450ffffff483b7d187303ff55504d8d7f984c3b7d107303ff554049c747f80c00000049c647ff404d89fe49bd605efbacaa2a00004d892e49c746080100000049c746100100000049c746180100000049c746200100000049c746280100000049c746300100000049c746380100000049c746400100000049c746480100000049c746500100000049c74658010000004d8d7fc04c3b7d107303ff554049c747f80700000049c647ff404d89fd49bca87cfbacaa2a00004d89650049c745080100000049c745100100000049c745180100000049c745200100000049c745280100000049c74530010000004d8d7fc84c3b7d107303ff554049c747f8060000004d89fc49bbb08efbacaa2a00004d891c244c8b5a484d895c24284c8b52304d89542420488b7a5049897c24184d89742410488b72604989742408488b4a1049894d08488b721849897510488b7a2049897d184c8b52284d8955204d89652849895d3049c645ff004d895e0849894e104c8b5a684d895e184d896e2049895628488b4a6049894e30488b727049897638488b7a1849897e404c8b52504d8956484c8b5a584d895e50488b4a3049894e5849c646ff004883f801751649c701010000004989590848b80100000000000000c348f7c001000000750a5048ff30488b0424eb1b5048b8105ff0acaa2a0000909090ff555848b801000000000000004883f9017502eb1c498b33488b780856480bf740f6c6015e7503ff5570483bfe7402eb0c48bf0100000000000000eb3f5253495049514956495549544989f8488b442420488b5250ff124d8d7fe84c3b7d107303ff554049c747f8020000004c89ff48c7470801000000488907eb0c525349504951495649554954488b74244048f7c6010000007505488b1eeb1a48b8105ff0acaa2a0000909090ff555848bb01000000000000005050488b13488b0a4883f9f3756a575248ff7208488b04244883f801750c49be0100000000000000eb2c4c8b4008488b00488d5424709090ff159a0600004c89c0483b65187303ff5548ebcc49be0100000000000000488b0424488d54247090ff157a06000050488b44240848ba0091fbacaa2a0000eb05e942010000909090ff1250504c8b6c24704989e0488b5c2468498b5508909090ff124c8b64241049f7c401000000756f4d8b5c24084983fb01753f4d8d7fe84c3b7d107303ff554049c747f8020000004d89fa4c8b0c244d894a084d8b04244d8902488d7c24304c8917488d742430488b5c240848895e08eb654d8d7fe84c3b7d107303ff554049c747f8020000004d89fa4d89620849c702efffffffeb05e9400000004d8d7fe84c3b7d107303ff554049c747f8020000004d89f94c8b04244d8941084d8911488d7c24304c890f488d742430488b5c240848895e08eb63e9870400004d8d7fe84c3b7d107303ff554049c747f8020000004d89fb4d89630849c703efffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fa4c8b0c244d894a084d891a4c8d4424304d8910488d7c2430488b74240848897708eb59e9240400004883f9e3756f488b42204c8b3057524956488b4208488d542470909090ff150605000050504c8b6c2468504c8d442408488b5c2468488b442418498b5508909090ff124c8b5c24084983fb01750b4c8b2424eb1ae9cb030000488b0424488d942488000000ff15c60400004989c44c8d542430eb05e9130000004d89224c8d4c24304c8b4424104d894108eb6d4883f915756c488b42204c8b3057505048ff721049564c8d4c24104c8b442458488b5c2460488b4218488b542468909090e8d5faffff50504989e14c8b442468488b5c2428488b442418488b5424789090e8b5faffff50504c8bac24880000004989e0488b9c2480000000eb0ae925030000e976000000488b442420498b5508ff124c8b1c244983fb0175074c8b642410eb16488b442410488d9424a0000000ff15060400004989c44983fc0175074c8b542430eb1f4954488b442438488d9424a8000000909090ff15e60300004989c24883c4084c8d4c24484d89114c8d442448488b7c240849897808eb5a4883f90b75595748ff7208488b0424488d542468909090ff15b203000050488b44240848bab091fbacaa2a00009090ff1250504c8b7424684989e0488b5c2460498b5608909090ff124c8b24244983fc0175114c8b6c2410eb22e947020000e930000000488b442410488d9424800000009090ff155e0300004989c54c8d5c24284d892b4c8d5424284c8b4c24084d894a08eb574883f90175565748ff720848ff7210488b04244883f801750c49be0100000000000000eb464c8b284d8b65084d8b1c244d8b55204d8b0a4c8b40084c89cb4c89d89090ff15020300004c89c0483b65187303ff5548ebbce9b2010000e99800000049be010000000000000050504989e14c8b442458488b5c2460488b442418488b542468e801f9ffff4c8b6c24104983fd01750c49bc0100000000000000eb3d4d8b5d004d8b53084d8b0a4d8b450848bb01000000000000004c89c8909090ff158e0200004d89c5483b65187303ff5548ebbb49bc01000000000000004c8d5c24284c8b14244d89134c8d4c24284c8b4424084d894108eb734883f90775724d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b7424384c89700848c70001000000574c8b6a104983fd0175054989c4eb69505049ff75084c8d4424084889c3498b4500488d54247890ff15060200004d8d7fe84c3b7d107303ff554049c747f802000000eb0ae99d000000e9550000004d89fb4c8b5424084d89134c8b4c24104d894b084c89d84c8b2c244883c418483b65187303ff5548eb8ce90a00000049bc01000000000000004c8d5c24084d8b14244d89134c8d4c24084d8b4424084d894108eb3f4883f9177522488b42104c8b304c8b6c2440574c8d442408488b5c24404c89f0498b5508ff12eb174889e048c700010000004989e64c8b6c24384d896e085750505050505050504883c4184c8ba4248000000049f7c40100000075074d8b5c2408eb1948b8105ff0acaa2a00009090ff555849bb010000000000000050504989e14c8b442470488b5c24484c89d8488b942480000000909090e821f7ffff4c8b0c244983f90175074c8b542440eb16488b442440488d942498000000ff15d60000004989c24983fa0175074c8b442438eb1f4952488b442440488d9424a0000000909090ff15b60000004989c04883c408488b7c24684c8907488b7424084889770848b801000000000000004881c498000000c390909090|@6078,8191,@6079,@6081,@6102,@6120,@6121,@6122,@6123,@6131,@2249,@2249,@6132,@6135,@6077|55,0,@6016 185,0,@6048 271,0,@6069 465,0,0 496,0,@2029 512,0,0 558,0,0 664,0,@2029 680,0,0 720,0,0 766,0,0 798,0,@6073 1550,0,@6075 1688,0,0 1760,0,0 1811,0,0 1838,0,0 1874,0,0 2084,0,0 2221,0,@2029 2236,0,0 2380,0,0 6016:C31,3184|90909090909090483b65187303ff55485249504951534c8b3049f7c601000000741e4983fee77c1d4983fe1f7f1c49bdb25efbacaa2a00004f8d6cb56441ffe5e9f5000000e9f0000000e9eb000000909090e9c4040000909090e99c0b0000909090e9d3000000909090e92c020000909090e9c3000000909090e9ca000000909090e9b3000000909090e9e3070000909090e9a3000000909090e99b000000909090e98c060000909090e95a0a0000909090e9d60a0000909090e97b000000909090e936020000909090e919030000909090e963000000909090e95b000000909090e953000000909090e951060000909090e912080000909090e9c4030000909090e916060000909090e9c1060000909090e923000000909090e9b5070000909090e94f030000909090e9df050000909090e9eb08000090909048b8380dedacaa2a00004883c420c34c8b4010498b184c8b70184889d890ff153a0b00004c8b68084983fd0175364c8b442418498b5010488b0a4d8b264d89ca4d8b48084d89e04989db4889cb4c89d848baf06bfbacaa2a00004883c420ff25020b00004c89e8909090ff15fe0a00004883f801745e4c89e890ff15f60a00004c8b6424184d8b5c24104d8b134d8b064c89d74d89ca4d8b4c24084889de4889fb4889f048ba28a9f9acaa2a0000ff15ca0a0000488b184883fb0b751c4889c348b803000000000000004883c420ff25b20a0000e9500000004883fbfb75174889c348b803000000000000004883c420ff25980a00004889c24d8d7fe04c3b7d107303ff554049c747f8030000004c89f848c74010030000004889500848c7000d0000004883c420c34c8b6424184d8b5c24104d8b134d8b064c89d74d89ca4d8b4c24084889de4889fb4889f048ba28a9f9acaa2a00004883c420ff25350a00004c8b60084d8b1c244989c24d89d8488b5810488b4018488b5218909090ff1248f7c001000000752b4c8b104d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89500848c700fbffffff4883c420c348b8380dedacaa2a00004883c420c348ff7008488b4010e8fdfcffff4c8b24244d8b1c244983fbf175544d8b5424104d8b0a4d8b442418498b38488b742420488b5e10488b13488b4c24104c8b74242848894c24284c8b56084d89cd4989f94989d04889c34c89e848ba50a9f9acaa2a00004883c4284956ff256c090000504c8b4c24184c8b442420488b5c24104c89e0488b54242890e87dfcffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fa49c74208010000004c8b0c244d890a4989c04d8d7fd84c3b7d107303ff554049c747f8040000004c89f848c74018010000004c8940104c89500848c700090000004883c430c348ff701048ff7018488b400890e80dfcffff504c8b4c24204c8b442428488b5c2418488b442408488b54243090e8edfbffff504c8b4c24284c8b442430488b5c2420488b442418488b54243890e8cdfbffff4989c44d8d7fd84c3b7d107303ff554049c747f8040000004c89f84c8960184c8b1c244c8958104c8b5424084c89500848c700050000004883c440c34c8b600849f7c401000000752c4d8b5c24084983fb01750d498b04244883c420e96cfbffff488b4008488d542420ff15360800004883c420c3488b4008488d542420ff152a0800004883c420c34c8b601849f7c40100000075334d8b5c24084983fb0175114d8b1424498b42084883c420e91bfbffff4c89e3488b4010488d542420ff15f20700004883c420c34c89e3488b4010488d54242090ff15e20700004883c420c35048ff700848ff70184c8b24244c89e090ff15ce0700004883f80174324c89e090ff15c6070000488b5808488b00909090ff15be0700004989c4483b65187303ff5548ebc849bb01000000000000004c89e0909090ff15a20700004883f80174194c89e090ff159a0700004c8b184d89da4983f2024d89d3eb0a49bb01000000000000004983fb01743e4c8b5424304d8b4a0849ba28cffaacaa2a00004d89c84c8b4c24204c89c74c8b44241048bb03000000000000004889f8909090ff154a0700004989c3eb0a49bb0100000000000000488b0424909090ff15360700004883f803750c49bbd08cedacaa2a0000eb43488b1c24488b442408909090ff151a0700004d8d7fe04c3b7d107303ff554049c747f8030000004d89fb4989431049bad08cedacaa2a00004d89530849c7030d0000004c8b4c24304d8b4110498b3840f6c7017503ff55704889fe4883c60270f449535648bb4700000000000000488b44243890ff15ba060000488b5c241890ff15b60600004d8d7fb84c3b7d107303ff554049c747f8080000004c89fb48c743380100000048c743300100000048c743280100000048c743200300000048c7431801000000488b14244889531048894308488b4c240848890b4d8d7fe84c3b7d107303ff554049c747f8020000004c89f84889580848c700f3ffffff4883c448c348b8d095edacaa2a00004883c420c3488b4008488d5424209090ff15220600004883c420c3488b40104883c420e9c7f8ffff4d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fc49c70424010000004989c148bb01000000000000004c89e0488b5220909090ff124883f801750f48b8101cf8acaa2a00004883c420c34c8b58084983fb017508488b004883c420c34989c24d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89500848c700130000004883c420c3505048ff70104c8d4c2408488b4018488b522890ff12488b5c2410488b0424488d542438ff155e0500004883f80175074c8b642408eb1a50488b442410488d5424409090ff15460500004989c44883c4084983fc01750f48b8101cf8acaa2a00004883c438c34d8b5c24084983fb017509498b04244883c438c34d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89600848c700130000004883c438c3488b4008488d54242090ff15e60400004883f801750f48b8101cf8acaa2a00004883c420c34c8b60084983fc017508488b004883c420c34989c34d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89580848c700130000004883c420c3488b400890e829f7ffff4989c44d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89600848c700edffffff4883c420c35048ff7010488b4008909090e8edf6ffff4c8b64242850488b442408498b5424389090ff124c8b58084d8b0b4983f9ff75404d8b430848bb0100000000000000488b4018909090ff151a0400004883f80174134c89c0488d542438ff150e0400004989c2eb1649bac896edacaa2a0000eb0a49bac896edacaa2a00004c8b4424304d8d7fe84c3b7d107303ff554049c747f8020000004c89ff48be786dfbacaa2a00004889374c894708495248ff742420576a034c8b5424484d8b4808498b583049b8c08ff6acaa2a00004889da488b5c2428488b442430909090ff124889c14d8d7fd84c3b7d107303ff554049c747f8040000004c89f84c8b34244c897018488948104c8b6c24084c89680848c700f5ffffff4883c440c348ff7008488b4010909090e8d5f5ffff504c8b4c24184c8b442420488b5c2410488b442408488b54242890e8b5f5ffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fc49bb186efbacaa2a00004d895c2408498904244d8d7fe84c3b7d107303ff554049c747f8020000004d89fa4d89620849c702130000004d8d7fd84c3b7d107303ff554049c747f8040000004d89f949b8d095edacaa2a00004d8941184d895110488b3c244989790849c701050000004d8d7fe04c3b7d107303ff554049c747f8030000004c89f848c74010010000004c89480848c700ffffffff4883c430c35048ff7010488b4008909090e8edf4ffff4c8b6424284d8d7fe84c3b7d107303ff554049c747f8020000004d89fb49ba486efbacaa2a00004d89134d8963084c8b4c24104c8b4424304c894c24304c895c2428488b7c242048c7442420010000004989fa4d8b4c24084c89c64989c0488b1c24488b442408498b5424304883c42056ff2248ff7010488b4008e86df4ffff504c8b4c24184c8b442420488b5c2410488b442408488b54242890e84df4ffff4989c44d8d7fd84c3b7d107303ff554049c747f8040000004c89f849bbd095edacaa2a00004c8958184c8960104c8b14244c89500848c700050000004883c430c348ff7010488b40089090e8fdf3ffff504c8b4c24184c8b442420488b5c2410488b442408488b54242890e8ddf3ffff4989c44d8d7fd84c3b7d107303ff554049c747f8040000004c89f84c89601849bbb88cedacaa2a00004c8958104c8b14244c89500848c700050000004883c430c39090909090|@6026,8191,@2950,@6018,@2610,@2612,@5397,@4802,@4802,@5397,@5586,@6027,@6027,@6030,@6030,@1458,@1459,@2044,@2046,@2047,@2855,@5888,@5892,@303,@303,@6042,@6044,@6047,@6044,@5931,@6025|48,0,$6016+82 316,0,@217 396,0,@6017 480,0,@5395 508,0,1 542,0,1 649,0,@5395 752,0,@217 856,0,@5396 1378,0,0 1431,0,0 1456,0,@5844 1482,0,1 1509,0,0 1538,0,@441 1596,0,@441 1650,0,35 1808,0,@478 1898,0,0 1926,0,@4798 2089,0,@4798 2186,0,@4798 2369,0,0 2417,0,@486 2429,0,@486 2468,0,@6020 2508,0,@4256 2668,0,@6022 2746,0,@478 2873,0,@6024 3031,0,@478 3147,0,@440 6017:O2|@6018,@5396 6018:C3,256|90909090909090483b65187303ff55484989d64989c54c89e8909090ff1506010000488b104883faff7525488b0c244c8914244d89ca4d89c14989d848bbd095edacaa2a00004c89e8498b560851ff22f6c3017503ff55704889d94883c10270f449524d89ca4d89c14989c848bbd08cedacaa2a00004c89e8498b5608909090ff124d8d7fb84c3b7d107303ff554049c747f8080000004d89fe49c746380100000049c746300100000049c74628ffffffff49c746200300000049c746180100000049c746100300000049bdb01e6000000000004d896e084989064d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89700848c700f3ffffffc390|@6019,8191,@2277|62,0,@478 110,0,@441 204,0,I48 6019:S29|56414c55455f4f505328292e636f6465457846756e6374696f6e283529 6020:C2,40|90909090909090483b65187303ff55484c8b48184c8b4010488b5808488b00488b5208ff22909090|@6021,8191| 6021:S48|50415253455f5452454528292e67656e636f6465283729636f646553657175656e6365283429636f646567656e283129 6022:O2|@6023,0 6023:O2|-8,0 6024:C2,40|90909090909090483b65187303ff55484c8b48184c8b4010488b5808488b00488b5208ff22909090|@6021,8191| 6025:C3,160|90909090909090483b65187303ff55484883f801750b48b80100000000000000c34c8b304c8b6af84d8b65104d8b1c245248ff70084c8b52e84d8b4d0849b8e005edacaa2a00004c89db498b461048ba28a9f9acaa2a0000ff156a00000050488b442408488b542410e899ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fa498942084c8b0c244d890a4c89d04883c418c390909090909090|@417,8191,@5397|24,0,0 63,0,@193 80,0,@5395 6026:S48|50415253455f5452454528292e67656e636f6465283729636f646553657175656e6365283429636f646567656e283429 6027:C4,208|90909090909090483b65187303ff554852488d5424089090ff15da0000004d8d7fe84c3b7d107303ff554049c747f8020000004d89fe4989460849c7061500000049564883f801750c49bd0300000000000000eb304c8b204d8b1c244983fbfb7519488b4008483b65187303ff5548ebd249bd010000000000000049bd01000000000000004983fd017436488b042490ff156a0000004989c24d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89500848c700fbffffff4883c410c3488b04244883c410c3909090909090|@6029,8191,@6028,@4523|75,0,1 115,0,0 125,0,0 6028:C2,128|90909090909090483b65187303ff55484883f801750b48b80100000000000000c34c8b72f85248ff70084d8b4ee84d8b46f0498b5ee0488b00498b56f8909090ff1250488b442408488b542410e8b5ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fd498945084c8b24244d8965004c89e84883c418c39090|@417,8191|24,0,0 6029:S50|50415253455f5452454528292e67656e636f6465283729636f646553657175656e6365283429636f646567656e2834292f36 6030:C3,160|90909090909090483b65187303ff554852505349be01000000000000004883fb0175054d89f5eb2e41f6c6017503ff55704c89f24883c20270f4488b5b084989d6483b65187303ff5548ebd149bd01000000000000004955488b5c240848b8c072fbacaa2a0000488d542420ff15560000004989c44d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89600848c700130000004883c420c3909090|@6039,8191,@6036|21,0,0 78,0,0 95,0,@6031 6031:O1|@6032 6032:C2,24|48b82073fbacaa2a000090ff555848b80100000000000000|@6035,1|2,0,@6033 16,0,0 6033:O3|@7377,@215,@6034 6034:S17|6d697373696e6720696e207265636f7264 6035:S51|50415253455f5452454528292e67656e636f6465283729636f646553657175656e6365283429636f646567656e283429283129 6036:C7,480|90909090909090483b65187303ff55484883fb0175634889c3488b42e0909090ff15e20100004d8d7fe84c3b7d107303ff554049c747f8020000004d89fe4989460849c7061500000049564883f801750c49bd0300000000000000eb354c8b204d8b1c244983fbfb751e488b4008483b65187303ff5548ebd2e97500000049bd010000000000000049bd01000000000000004983fd01742f488b0424ff156e0100004d8d7fe84c3b7d107303ff554049c747f8020000004d89fa4989420849c702fbffffffeb044c8b14244d8d7fe84c3b7d107303ff554049c747f8020000004c89f848c74008010000004c89104883c408c34c8b334c8b6af8525049ff3648ff73084d8b4de84d8b45f0498b5de0498b4608498b55f890ff124c8b6424184d8b5c24f84d8b53f84d8b4a104d8b0150504989e1498b5a40ff15da000000488b7c2428488b77f0488b1e488b44241890ff15ca000000488b542428488b4af84c8b71f84d8d7fd04c3b7d107303ff554049c747f8050000004d89fd49bcf075fbacaa2a00004d896500498945204c8b5c24204d895d184c8b5424084d8955104d8b4e104d894d08488b5c24104c89e89090e851feffff4883f8017509488b04244883c430c350488b442408488d542438ff15520000004883c438c39090909090|@6041,8191,@4394,@4523,@5808,@5892,@6040|83,0,1 128,0,0 138,0,0 381,0,@6037 6037:C2,64|90909090909090483b65187303ff55484c8b722050490bc6a801587503ff5570493bc6750e4c8b6a08498b4500488b5210ff22488b5218ff2290909090909090|@6038,8191| 6038:S67|50415253455f5452454528292e67656e636f6465283729636f646553657175656e6365283429636f646567656e2834296465636c6973742832296c6f6f6b466e283129 6039:S50|50415253455f5452454528292e67656e636f6465283729636f646553657175656e6365283429636f646567656e2834292f38 6040:C2,88|90909090909090483b65187303ff55484883f8017505488b42c8c35248ff30488b40089090e8ddffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b04244889024889d04883c410c3909090|@1847,5| 6041:S58|50415253455f5452454528292e67656e636f6465283729636f646553657175656e6365283429636f646567656e2834296465636c697374283229 6042:C3,328|90909090909090483b65187303ff55484883f801750b48b8d095edacaa2a0000c35248ff70084c8b4ae84c8b42f0488b5ae0488b00488b52f8909090ff1250488b442408488b542410e8b9ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fe49c74608010000004989064d8d7fe84c3b7d107303ff554049c747f8020000004d89fd4d8975084c8b24244d8965004d8d7fe84c3b7d107303ff554049c747f8020000004d89fb4d896b0849c7031500000049534983fd01750c49ba0300000000000000eb304d8b4d004d8b014983f8fb75194d8b6d08483b65187303ff5548ebd249ba010000000000000049ba01000000000000004983fa017437488b04249090ff15620000004889c74d8d7fe84c3b7d107303ff554049c747f8020000004c89f84889780848c700fbffffff4883c420c3488b04244883c420c3909090909090|@6043,8191,@4523|24,0,@478 194,0,1 234,0,0 244,0,0 6043:S59|50415253455f5452454528292e67656e636f6465283729636f646553657175656e6365283429636f646567656e283429636f6e734c697374283129 6044:C3,312|90909090909090483b65187303ff55484883f801750b48b80100000000000000c34c8b304c8b6af84d8b65584983fc017502eb224d8b5d504d8b134d8b4e0849514d0bca41f6c10149597503ff55704d3bca7402eb0c49bb0100000000000000eb3d525349ff36495148ff70084d89c8488b42f0498b5548ff124d8d7fe84c3b7d107303ff554049c747f8020000004d89fb49c7430801000000498903eb0d525349ff3649ff760848ff70084c8b54242049534c8b4c24104d8b42f0488b5c2420488b442418498b52f89090ff1250488b5c2428488b442410488b542430909090e821ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89f9498941084c8b04244d89014983f901750a488b4424084883c438c34951488b442410488d542440909090ff15320000004883c440c39090909090|@6046,8191,@6045|24,0,0 88,0,0 6045:C2,88|90909090909090483b65187303ff55484883f8017505488b42c0c35248ff30488b40089090e8ddffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b04244889024889d04883c410c3909090|@1847,5| 6046:S59|50415253455f5452454528292e67656e636f6465283729636f646553657175656e6365283429636f646567656e283429636f64654c697374283229 6047:C2,88|90909090909090483b65187303ff55484883f8017505488b42c0c35248ff30488b40089090e8ddffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b04244889024889d04883c410c3909090|@1847,5| 6048:C13,1792|90909090909090488dbc2448ffffff483b7d187303ff5550525053495049514d8b014983f8fb75194d8b4910483b65187303ff5548ebe849be01000000000000004983f80d75064d8b7108eb1748b83884fbacaa2a0000ff555849be0100000000000000488b5c2420488b5308488b02a8017503ff55704989c54983c50270f44c892a488b43184c8b2848c7000300000049f7c60100000075644d8b1e4d8b134983faeb753f498b7b08488b7718488b0e4c8b67204d8b0c244d8d7fe04c3b7d107303ff554049c747f8030000004d89fc49894c24104d894c24084c8b47104d890424eb3348b89884fbacaa2a0000ff555849bc0100000000000000eb1a48b89884fbacaa2a0000909090ff555849bc01000000000000004c89f14d89e949ff74240849ff742410498b0424ff15f60500004883f80374745149515048bb5100000000000000488b44243090ff15de0500005048bbffffffffffffffff488b4424089090ff15ce0500004889c3488b0424909090ff15c605000048bb5300000000000000ff15be0500004c8b4424505050498b78304d8d7fe84c3b7d107303ff554049c747f802000000eb05e93d0300004c89fe488b1f48895e0848bae005edacaa2a00004889164889e14889314989e64c8b6f084d896e084d8d7fe84c3b7d107303ff554049c747f8020000004d89fc4c8b1c244d891c244c8b5424084d895424084989c14954488b5c242048b8030000000000000090ff15320500004c8b4424684951504c8b542410498b78284989c0488b5c2440488b4424584889fa90ff12488b74247848ff7424104c8b5424584c8b4c24504c8b442408488b5c2410488b5620ff12488b5c2478488b5308488b0a4d8d7fb84c3b7d107303ff554049c747f8080000004d89fe49c746380100000049c746300100000049c74628ffffffff4c8b6c24304d896e2049c746180100000049894e104c8b6424084d8966084989064d8d7fe84c3b7d107303ff554049c747f8020000004d89fb4d89730849c703f3ffffff4c8b1241f6c2017503ff55704d89d14983e90270f44c890a4c8b4318488b7c2438498938488b3250504989e14989f0488b5b104c89d8ff1536040000488b9c2488000000488b5308488b0af6c1017503ff55704889c84883c00270f4488b54240890ff1250488b5c244848b8d08cedacaa2a00009090ff15fe0300004d8d7fd84c3b7d107303ff554049c747f8040000004d89fe49c74618010000004c8b2c244d896e104989460849c706090000004c8ba424900000004d8b5c24084d8b1341f6c2017503ff55704d89d14983c10270f44956495148bb4858faacaa2a0000488b842488000000909090ff15920300004d8d7fb84c3b7d107303ff554049c747f8080000004d89f849c740380100000049c740300100000049c740280100000049c740200300000049c7401801000000488b3c244989781049894008488b7424084989304d8d7fe84c3b7d107303ff554049c747f8020000004c89fb4c89430848c703f3ffffff488b9424900000004883fa01743c488b8424980000004c8b304d8d7fd84c3b7d107303ff554049c747f8040000004c89f948c7411801000000488959104c89710848c701f9ffffffeb034889d94d8d7fe84c3b7d107303ff554049c747f8020000004c89f848c74008010000004889084883f801750d488b4424184881c4a8000000c350488b442420488d9424b00000009090ff158a0200004881c4b0000000c3488b5c2428488b1348c703010000005149515248bb4858faacaa2a0000488b442430ff1562020000488b4c244850504c8b71304d8d7fe84c3b7d107303ff554049c747f8020000004d89fd4d8b264d89650849bbe005edacaa2a00004d895d004989e24d892a4989e14d8b46084d8941084d8d7fe84c3b7d107303ff554049c747f8020000004c89ff488b3424488937488b5c240848895f0850574989fa4989c149b8d08cedacaa2a0000488b5c2430488b442448488b512890ff12488b54246848ff34244c8b5424484c8b4c244049b8d08cedacaa2a0000488b5c2410488b5220ff12488b4c24604c8b7424204c89314c8b6c24684d8b65084d8b1c2441f6c3017503ff55704d89da4983ea0270f44d8914244d8b4d184c8b4424284d8901498b3c2440f6c7017503ff55704889fe4883c60270f44d8d7fb84c3b7d107303ff554049c747f8080000004c89fb48c743380100000048c743300100000048c74328ffffffff48c743200300000048c743180100000048897310488b542408488953084889034d8d7fe84c3b7d107303ff554049c747f8020000004c89f94889590848c701f3ffffff488b4424584883f80174314d8d7fd84c3b7d107303ff554049c747f8040000004d89fb49c743180100000049894b104d89730849c703f9ffffffeb034989cb4d8d7fe84c3b7d107303ff554049c747f8020000004c89f848c74008010000004c89184883c470c39090|@6054,8191,@6055,@303,@305,@303,@303,@6061,@5808,@6065,@303,@6053,@303|57,0,0 79,0,@6049 92,0,0 231,0,@6051 244,0,0 256,0,@6051 272,0,0 318,0,40 341,0,-1 380,0,41 445,0,@193 527,0,1 850,0,@441 957,0,@5670 1283,0,@5670 1346,0,@193 1425,0,@441 1471,0,@441 6049:O3|@7377,@215,@6050 6050:S42|676574466e426f64793a206e6f74206120636f6e73747261696e656420666e2d65787072657373696f6e 6051:O3|@7377,@215,@6052 6052:S41|636f646550726f633a20626f6479206f6620666e206973206e6f74206120636c61757365206c697374 6053:C2,96|90909090909090483b65187303ff55484883f8017508488b8250ffffffc35248ff30488b4008909090e8d9ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b04244889024889d04883c410c390909090909090|@1847,5| 6054:S49|50415253455f5452454528292e67656e636f6465283729636f646553657175656e6365283429636f646550726f63283429 6055:C8,640|90909090909090483b65187303ff55484c8b304983fe1b754849bd01000000000000004c8b60084983fc0175044c89e8c341f6c5017503ff55704c89e84883c00270f44d8b6424084989c5483b65187303ff5548ebd148b80100000000000000c34983fe11756f4c8b68104d8b650049554c89e0ff152e0200004883f80174324c89e090ff1526020000488b5808488b00909090ff151e0200004989c4483b65187303ff5548ebc949bb01000000000000004c89e0909090ff15020200004883f80174204c89e090ff15fa0100004c8b184c89dbeb05e9390000004883f3024989dbeb0a49bb01000000000000004983fb01740f48b803000000000000004883c408c34c8b1c24498b034883c408ff25bc0100004983fe05752848ff7010488b4018909090e8ddfeffff4883f803750d488b04244883c408e9cafeffff4883c408c34983fefb7509488b4010e9b6feffff4983fe0f7509488b4008e9a7feffff4983fe1575614c8b68104983fd01751848b8c088fbacaa2a000090ff555848b801000000000000004983fd01751a48b8105ff0acaa2a0000909090ff555849bc01000000000000004d8b5d084983fb0175064d8b6500eb1e4d8b6d08483b65187303ff5548ebc1e91300000049bc0100000000000000498b0424e928feffff4983fefd755d4c8b681049bc03000000000000004983fd0175044c89e0c34983fc037544498b5d00488b134883faeb7517488b430849ff7508488b009090e8e5fdffff4989c3eb2748b81089fbacaa2a00009090ff555849bb0100000000000000eb0ce92c0000004d89e349ff75084d89dc4c8b2c244883c408483b65187303ff5548eb8f48b801000000000000004883c408c348b80300000000000000c39090|@6060,7693,@1458,@1459,@2044,@2046,@2047,@5888|27,0,0 88,0,0 170,0,0 230,0,0 246,0,1 370,0,@6056 384,0,0 400,0,@2029 416,0,0 462,0,0 491,0,1 553,0,@6058 568,0,0 614,0,0 629,0,1 6056:O3|@7377,@215,@6057 6057:S26|7475706c6557696474683a20656d707479206c6f63616c646563 6058:O3|@7377,@215,@6059 6059:S8|6765745769647468 6060:S26|50415253455f5452454528292e7475706c655769647468283129 6061:C4,320|90909090909090483b65187303ff554853480bd8f6c3015b7503ff5570483bd8756148b801000000000000004989de4c23f041f6c6017503ff55704989c64c2bf34d8d760170f14d8d7fd04c3b7d107303ff554049c747f8050000004c89f848c740200100000048c740180100000048c74010030000004c89700848c700f7ffffffc3504889d8488d542408ff15d60000004d8d7fe84c3b7d107303ff554049c747f8020000004d89fe4989460849c7061500000049564883f801750c49bd0300000000000000eb304c8b20498b1c244883fbfb7519488b4008483b65187303ff5548ebd249bd010000000000000049bd01000000000000004983fd017436488b042490ff15660000004889c24d8d7fe84c3b7d107303ff554049c747f8020000004c89f84889500848c700fbffffff4883c410c3488b04244883c410c39090|@6063,8063,@6062,@4523|36,0,0 191,0,1 231,0,0 241,0,0 6062:C2,224|90909090909090483b65187303ff55484c8b72f8504923c6a801587503ff5570493bc67d0b48b80100000000000000c349bd01000000000000004989c44d23e541f6c4017503ff55704d89ec4c2be04d8d64240170f04d8d7fd04c3b7d107303ff554049c747f8050000004d89fd49c745200100000049c745180100000049c74510030000004d89650849c74500f7ffffffa8017503ff55704989c44983ec0270f45249554c89e090e859ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b04244889024889d04883c410c390909090909090|@6064,7173|39,0,0 50,0,0 6063:S26|50415253455f5452454528292e6d6b4172675475706c65283229 6064:S38|50415253455f5452454528292e6d6b4172675475706c652832296d6b4172674c697374283129 6065:C3,96|90909090909090483b65187303ff55484883fb0375274889c34d8d7fe84c3b7d107303ff554049c747f8020000004c89f848c7400801000000488918c3505348b80100000000000000488d5424109090ff15320000004883c410c39090909090|@6067,8191,@6066|65,0,0 6066:C4,232|90909090909090483b65187303ff55484c8b72f050490bc6a801587503ff5570493bc6750b48b80100000000000000c34c8b6af84d8b5d004983fb0b751152504c89eb90ff15c60000004989c4eb444983fbfb751252504c89eb9090ff15b60000004989c4eb2c4d8d7fe04c3b7d107303ff554049c747f8030000004d89fc49894424104d896c240849c704240d00000052504c8b142441f6c2017503ff55704c89d04883c00270f44954488b54241090e851ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89f9498941084c8b04244d89014c89c84883c418c390909090909090|@6068,8191,@4802,@4802|39,0,0 6067:S24|50415253455f5452454528292e6c6f616441726773283229 6068:S33|50415253455f5452454528292e6c6f6164417267732832296d6b61726773283129 6069:C2,104|90909090909090483b65187303ff55484d8d7fd84c3b7d107303ff554049c747f8040000004d89fe49bd508ffbacaa2a00004d892e4c8b6a204d896e184c8b62184d8966104c8b5a104d895e08488b3c244c89142449566a014d89ca4c8b4a28488b520857ff2290|@6072,8191|42,0,@6070 6070:C2,240|90909090909090483b65187303ff55484c8b72184983fe01746f5248ff3048ff700848ff701048ff70184c8b0424488b5c2410488b442408488b5210ff124c8b6c2420504c8b4c24084c8b442410488b5c2418488b442420498b5508ff124d8d7fe84c3b7d107303ff554049c747f8020000004d89fc49c744240801000000498904244d8d7fe8eb05e9470000004c3b7d107303ff554049c747f8020000004d89fb4d8963084c8b14244d89134d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89580848c700130000004883c430c34c8b48184c8b4010488b5808488b00488b5208ff22909090909090|@6071,8191| 6071:S56|50415253455f5452454528292e67656e636f6465283729636f646553657175656e6365283429636f6465416c742835296367457870283129 6072:S48|50415253455f5452454528292e67656e636f6465283729636f646553657175656e6365283429636f6465416c74283529 6073:O1|@6074 6074:C2,104|90909090909090483b65187303ff55484883f801750b48b80100000000000000c34c8b304d8b6e104d8b65004954488b4008909090e8cdffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fe498946084c8b2c244d892e4c89f04883c408c3909090|@417,7169|24,0,0 6075:O1|@6076 6076:C2,104|90909090909090483b65187303ff55484883f801750b48b80100000000000000c34c8b304d8b6e084d8b65004954488b4008909090e8cdffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fe498946084c8b2c244d892e4c89f04883c408c3909090|@417,7169|24,0,0 6077:C2,96|90909090909090483b65187303ff55484883f8017508488b8260ffffffc35248ff30488b4008909090e8d9ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b04244889024889d04883c410c390909090909090|@1847,5| 6078:S38|50415253455f5452454528292e67656e636f6465283729636f646553657175656e6365283429 6079:C5,184|90909090909090483b65187303ff55484c8b70104d8b2e4989d44c89e8909090ff15ba0000004c8b68104c89e8909090ff15b20000004883f80174624c89e890ff15aa000000498b5424e84c8b72204d8b2e41f6c5017503ff55704d89eb4983c30270f44d891e4d8b1e41f6c3017503ff55704d89da4983c20270f44d89164c8b184d892b4c8b52104d8b2a4c8b48084d892948b80100000000000000c348b8b800fbacaa2a0000909090ff555848b80100000000000000|@6080,8069,@2950,@5915,@5917|149,0,0 160,0,@5910 176,0,0 6080:S58|50415253455f5452454528292e67656e636f6465283729636f646553657175656e63652834293c7061747465726e3e2d73657441646472283129 6081:C16,2064|90909090909090488dbc2430ffffff483b7d187303ff55504883f801750b48b80100000000000000c34c8b304d8b2e4d8b65004d8b5e104d8b134d8b4e184d8b01498b7e20488b374889d3488b48084c89d09090ff15de07000049ff760848ff7010488b04249090ff15d20700004883f801740f488b0424ff15ca070000488b00eb1948b8409dfbacaa2a00009090ff555848b801000000000000004c8b304989c54c89d0909090ff15a207000053495449505651495549564c8b5bd84889c34c89d890ff158e0700004c8b54244049f7c20100000075274d8b02504d8b0048bb789dfbacaa2a000048b8010000000000000090ff15660700004989c1eb204989c148b8889dfbacaa2a0000909090ff55584d89c849b901000000000000004951488b7c245048be03000000000000004883ff0175054889f3eb374883fe037512488b0f488b4108ff151a0700004889c2eb034889f24889d6488b7f08483b65187303ff5548ebc848bb0100000000000000488b542440488b4ae8488b41304883f801740c49be0300000000000000eb034989de4983fe03750c49bd0300000000000000eb0a49bd01000000000000004d89ec4983f402495649544c8b5c24104983fb0175054d89e2eb374d8b0b4d89c84d23c441f6c0017503ff55704d8d41ff4d03c470f44d89c44d8b5b08483b65187303ff5548ebc849ba01000000000000004c8b4424404983f803751e4983fa03750c49b90300000000000000eb1649b90100000000000000eb0a49b901000000000000004983f9017418488b74242848c7060100000048bf0100000000000000eb0a48bf0100000000000000488b7c2450488b77e8488b5e10488b13f6c2017503ff55704889d14883c10270f448890b488b46204c8b3048c70003000000495249514956488b442478488d9424800000009090ff15c60500004c8b6424584983fc03752e4c8b5c241841f6c3017503ff55704d89da4983c20270f44989c1488b5c24104c89d090ff159a0500004989c5eb6950488b5c2430488b44242048bad09dfbacaa2a0000ff124d8d7fe84c3b7d107303ff554049c747f8020000004d89fb4989430849c7031500000049534883f801750c49ba0300000000000000eb344c8b084d8b014983f8fb751e488b4008483b65187303ff5548ebd3e95500000049ba010000000000000049ba01000000000000004983fa017431488b042490ff150a0500004d8d7fe84c3b7d107303ff554049c747f8020000004d89fd4989450849c74500fbffffffeb044c8b2c244883c408eb024951495548bbffffffffffffffff488b442420909090ff15c60400004d8d7fe84c3b7d107303ff554049c747f8020000004d89f848bfa03dedacaa2a0000498978084989004d8d7fe84c3b7d107303ff554049c747f8020000004c89fe4c89460848c706510000004d8d7fe84c3b7d107303ff554049c747f8020000004c89f848897008488b5c24404889189090ff1556040000488b5424785050488b4ae04d8d7fe84c3b7d107303ff554049c747f8020000004d89fe4c8b294d896e0849bce005edacaa2a00004d89264989e34d89334989e24c8b49084d894a084d8d7fe84c3b7d107303ff554049c747f8020000004d89f8488b3c24498938488b74240849897008504d89c24989c14c8b442418488b5c2420488b4298488b52b890ff12488b5424484883fa0375054889c3eb1b4989d04889c348b8d08cedacaa2a00009090ff15aa0300004889c3488b8c24900000005050488b41e04d8d7fe84c3b7d107303ff554049c747f8020000004d89fe4c8b284d896e0849bce005edacaa2a00004d89264989e34d89334989e24c8b48084d894a084d8d7fe84c3b7d107303ff554049c747f8020000004d89f8488b3c24498938488b74240849897008488b51e849504c8b9424900000004c8b8c24a00000004c8b4424304989de488b5c24704c89f0488b52289090ff124c8bac24a00000004d8b65e84d8b5c24104d8b1341f6c2017503ff55704d89d14983e90270f44d890b4d8b442420488b7c2438498938498b3340f6c6017503ff55704889f34883c30270f44d8d7fb84c3b7d107303ff554049c747f8080000004c89fa48c742380100000048c742300100000048c74228ffffffff488b4c244848894a2048c742180100000048895a104c8b7424104c8972084889024d8d7fe84c3b7d107303ff554049c747f8020000004d89fa4989520849c702f3ffffff4c8b4c2478488b7c2470498939488b7424404883fe0174694d8d7fd84c3b7d107303ff554049c747f8040000004c89fb48c74318010000004c89531048897b0848c703f9ffffff53488b8424880000004c89ea90e85df9ffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b0c2448890a4889d0eb05e9080000004881c4c0000000c340f6c7017503ff55704889fb4883c30270f44d8d7fd84c3b7d107303ff554049c747f8040000004c89fa48c74218010000004c89521048895a0848c702f9ffffff488b8c2490000000f6c1017503ff55704889c84883e80270f4524989c24c8b4c247049b80100000000000000488b5c246848b80100000000000000488d9424c000000090ff15360100004d8d7fd84c3b7d107303ff554049c747f8040000004d89fe49c7461801000000498946104c8b6c24784d896e0849c706f9ffffff4956488b842490000000488b9424b000000090e851f8ffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fc49894424084c8b1c244d891c244d8d7fe84c3b7d107303ff554049c747f8020000004d89fa4d8962084c8b4c24084d890a4c89d04881c4c8000000c3909090909090|@6091,8191,@2950,@5915,@5917,@2136,@303,@6092,@6055,@6094,@6061,@4523,@305,@331,@4985,@6090|32,0,0 133,0,@6082 148,0,0 225,0,@6084 235,0,0 260,0,@6085 279,0,0 296,0,1 362,0,0 391,0,1 412,0,1 424,0,0 506,0,0 533,0,1 545,0,0 557,0,0 585,0,0 597,0,0 752,0,@6087 807,0,1 851,0,0 861,0,0 940,0,-1 988,0,@274 1126,0,@193 1246,0,@441 1312,0,@193 1860,0,0 1875,0,0 6082:O3|@7377,@215,@6083 6083:S6|6c7641646472 6084:O1|@6055 6085:O3|@7377,@215,@6086 6086:S23|6261646c7920666f726d65642070617273652074726565 6087:O1|@6088 6088:C3,192|90909090909090483b65187303ff55484883fb01750b48b80100000000000000c34c8b334989c54d23ee41f6c5017503ff55704c8d68ff4d03ee70f4a8017503ff55704989c44983c40270f44989c1495648ff73084c89eb4c89e090ff15860000004c8b4424084c89cf4923f840f6c7017503ff5570498d79ff4903f870f450488b5c24084889f890e879ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fe48894608488b1c2448891e4889f04883c418c390909090909090|@6089,8191,@6061|24,0,0 6089:S73|50415253455f5452454528292e67656e636f6465283729636f646553657175656e63652834293c7061747465726e3e2d6c6f616446756e446563732831296d616b6541726773283229 6090:C8,1168|90909090909090483b65187303ff55484883fb01756d4c8b52a04983fa0375684c8b4ab841f6c1017503ff55704c89cb4883c30270f44d8d7fd04c3b7d107303ff554049c747f8050000004c89f848c74020010000004c8b72d84c89701848c74010030000004889580848c700f7ffffff4889c34d8d7fd84c3b7d107303ff5540eb0ae92d020000e92300000049c747f8040000004c89f848c7401801000000488958104c89400848c70009000000c34d8d7fe84c3b7d107303ff554049c747f8020000004d89f94d89510849c70107000000488b5ae8488b43e84c8b70104d8b2e50505249504d89cc4c8d4c24104d89e8488b58184c89e0909090ff15b60300004c8b5c24084d8b53e84d8b4ae84d8b4110498b00488b54241890ff12488b7c2408488b77b840f6c6017503ff55704889f34883c30270f44d8d7fd04c3b7d107303ff554049c747f8050000004c89fa48c7422001000000488b4fd848894a1848c742100300000048895a0848c702f7ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fe49c74608010000004989064983fe0175064c8b2c24eb2849564989c44989d3488b442408488d542428909090ff15020300004989c54883c4084c89da4c89e04d8d7fd84c3b7d107303ff554049c747f8040000004d89fa49c7421801000000498952104d896a0849c702090000004d8d7fe04c3b7d107303ff554049c747f8030000004d89f94c8b47a04d8941104989410849c701170000004d8d7fe84c3b7d107303ff554049c747f8020000004c89fb48c74308010000004c890b4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48895a084c89124883fa017507488b442410eb1652488b442418488d54242890ff15420200004883c4084989c64d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89700848c700130000004883c420c34c8b72e84d8b6ee84d8b65104d8b1c2441f6c3017503ff55704c89df4883c70270f449893c24498b7520488b0e48c7060300000052504950495248ff3348ff73085148bb4858faacaa2a00004c89c8ff15c60100004d8d7fd04c3b7d107303ff554049c747f8050000004d89fe49c74620010000004c8b6c24184d896e1849c746100300000049c74608ffffffff49c706f7ffffff50488b5c24184c89f090ff157e0100004c8b5c24284983fb0175054989c4eb0f488d54244090ff156a0100004989c44c8b54242041f6c2017503ff55704d89d14983e90270f44c8b442430488b7c24184c89c64823f740f6c6017503ff5570498d70ff4803f770f44d89ca4c8b0c244d89e0488b5c24104889f0488b542438e839fcffff488b5c2438488b53e8488b4ae84c8b71104d8b2e41f6c5017503ff55704d89ec4983ec0270f44d89264c8b59204c8b5424084d89134d8b0e41f6c1017503ff55704d89c84983c00270f44d8d7fb84c3b7d107303ff554049c747f8080000004c89ff48c747380100000048c747300100000048c747280100000048c747200300000048c74718010000004c894710488b3424488977084889074d8d7fe84c3b7d107303ff554049c747f8020000004c89f84889780848c700f3ffffff4883c440c390|@6099,8191,@5808,@6100,@6101,@303,@6065,@6098|761,0,@5670 6091:S62|50415253455f5452454528292e67656e636f6465283729636f646553657175656e63652834293c7061747465726e3e2d6c6f616446756e44656373283129 6092:C2,112|90909090909090483b65187303ff55484d8b304983fefb75064d8b4010ebe84983fe037548505349ff7008498b40104889da9090ff124d8d7fe84c3b7d107303ff554049c747f8020000004d89fd4c8b6424104d896508498945004c8b0424488b5c24084c89e84883c418eb9ac39090|@6093,8191| 6093:S73|50415253455f5452454528292e67656e636f6465283729636f646553657175656e63652834293c7061747465726e3e2d6c6f616446756e446563732831296765745061747473283329 6094:C3,400|90909090909090483b65187303ff55484883f801750b48b80100000000000000c34c8b305248ff700849ff760849ff76104d8b0648bb60a7fbacaa2a000048b80100000000000000ff156a0100004c8b6c24184d8b65d84983fc03752948f7c00100000075054c8b18eb3e48b8105ff0acaa2a00009090ff555849bb0100000000000000eb234d8d7fe84c3b7d107303ff554049c747f8020000004d89fb4989430849c7031b0000004d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fa49b978a6edacaa2a00004d890a4d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89f848bf78a6edacaa2a00004989384d8d7fd04c3b7d107303ff554049c747f8050000004c89fe4c8946204c8956184c895e10488b1c2448895e08488b5424084889164d8d7fe84c3b7d107303ff554049c747f8020000004c89f94889710848c701ebffffff51488b4424184c89eae8a5feffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fe498946084c8b2c244d892e4c89f04883c428c3909090|@417,8191,@6092|24,0,0 54,0,@6095 64,0,0 109,0,@2029 124,0,0 200,0,@617 242,0,@617 6095:O1|@6096 6096:C2,8|c390909090909090|@6097,1| 6097:S84|50415253455f5452454528292e67656e636f6465283729636f646553657175656e63652834293c7061747465726e3e2d6c6f616446756e446563732831296d6174636865732d2831297061744c6973742d283129 6098:C2,88|90909090909090483b65187303ff55484883f8017505488b42e8c35248ff30488b40089090e8ddffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b04244889024889d04883c410c3909090|@1847,5| 6099:S73|50415253455f5452454528292e67656e636f6465283729636f646553657175656e63652834293c7061747465726e3e2d6c6f616446756e446563732831296d616b6546756e73283529 6100:C2,88|90909090909090483b65187303ff55484883f8017505488b42d8c35248ff30488b40089090e8ddffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b04244889024889d04883c410c3909090|@1847,5| 6101:C2,88|90909090909090483b65187303ff55484883f8017505488b42d8c35248ff30488b40089090e8ddffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b04244889024889d04883c410c3909090|@1847,5| 6102:C7,408|90909090909090483b65187303ff55484883f801750b48b80100000000000000c34c8b304983fe01756d52488b400890ff158a0100004883f8017502eb3548f7c00100000075064c8b6808eb1e4989c548b8105ff0acaa2a000090ff55584d89ec49bd01000000000000004983fd017402eb054883c408c34d8d7fe84c3b7d107303ff554049c747f8020000004d89fc4989442408eb05e93000000049c70424efffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89f848c74008010000004c89204883c408c34989d34d8b164d8b4e084c8b40084c89d0909090ff15e200000049534952495149504889c3498b43d8909090ff15d200000048bb5b00000000000000ff15ca000000488b7c2418488b77e848ff77984c8b4e404989c0488b5fe0488b442410488b57c890ff12488b5c2420488b53e848ff34244c8b5424204989c14c8b4248488b4be0488b5a404889c8488b52389090ff1250488b442410488b542428e899feffff4883f8017509488b04244883c430c350488b442408488d542438ff15520000004883c438c39090909090|@6104,8191,@6105,@6117,@303,@303,@6103|24,0,0 82,0,@2029 99,0,0 256,0,45 6103:C2,88|90909090909090483b65187303ff55484883f8017505488b42c8c35248ff30488b40089090e8ddffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b04244889024889d04883c410c3909090|@1847,5| 6104:S59|50415253455f5452454528292e67656e636f6465283729636f646553657175656e63652834293c7061747465726e3e2d636f646544656373283129 6105:C8,408|90909090909090483b65187303ff55484883f801750b48b80100000000000000c34c8b304983fe017506488b4008ebd74989d54d8b66084c8b5808498b069090ff157a010000498b55e84c8b72204d8b1641f6c2017503ff55704d89d14983c10270f44d890e4955495249544953504883f801750c49b80100000000000000eb2d488b7808488b00488d542428909090ff15320100004889f8483b65187303ff5548ebcb49b80100000000000000488b442408488b54242090e849ffffff488b3c244883ff0175054883c428c3488b174c8b324983fef175754c8b6a104d8b65004989c34c8b52084c89e090ff15de0000004c8b48104c89c8909090ff15d60000004883f801740f4c89c890ff15ce0000004c8b00eb1948b8409dfbacaa2a00009090ff555849b80100000000000000488b7c242049534c8b4c24184c89c64d89d048bb0300000000000000eb05e92c0000004889f0488b57c09090ff12488b1c244883fb0175054883c430c3488d5424309090ff156e0000004883c430c348b800affbacaa2a00009090ff555848b80100000000000000|@6109,8191,@6110,@6113,@2950,@5915,@5917,@6108|24,0,0 119,0,0 166,0,0 281,0,@6082 296,0,0 324,0,1 385,0,@6106 400,0,0 6106:O3|@7377,@215,@6107 6107:S31|56616c4465636c61726174696f6e202d206e6f742061207661726961626c65 6108:C2,88|90909090909090483b65187303ff55484883f8017505488b42d0c35248ff30488b40089090e8ddffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b04244889024889d04883c410c3909090|@1847,5| 6109:S64|50415253455f5452454528292e67656e636f6465283729636f646553657175656e63652834293c7061747465726e3e2d636f6465526563757273697665283129 6110:C3,160|90909090909090483b65187303ff55484c8b304983fefb7506488b4010ebe84983feef753e48ff7010488b4008e8d5ffffff50488b44240890e8c9ffffff4883f8017509488b04244883c410c350488b442408488d542418ff156a0000004883c418c34983fef175274889c24d8d7fe84c3b7d107303ff554049c747f8020000004c89f848c7400801000000488910c348b80100000000000000c39090909090|@6112,4101,@6111|146,0,0 6111:C2,88|90909090909090483b65187303ff55484883f8017505488b42e8c35248ff30488b40089090e8ddffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b04244889024889d04883c410c3909090|@1847,5| 6112:S74|50415253455f5452454528292e67656e636f6465283729636f646553657175656e63652834293c7061747465726e3e2d636f646552656375727369766528312967657456617273283129 6113:C5,176|90909090909090483b65187303ff55484c8b304983fef175614c8b68104d8b65004989d34c89e090ff15aa0000004c8b68104c89e8909090ff15a20000004883f801743b4c89e890ff159a0000004c8b20498b53f0498914244d8b73f84d8b6ee84d8b55104d8b0a4c8b40084d890848b80100000000000000c3e91900000048b800b3fbacaa2a00009090ff555848b8010000000000000048b800b3fbacaa2a000090ff555848b80100000000000000|@6116,8133,@2950,@5915,@5917|113,0,0 129,0,@6114 144,0,0 154,0,@6114 168,0,0 6114:O3|@7377,@215,@6115 6115:S36|7365744164647265737320202d206261646c7920666f726d656420706172736574726565 6116:S77|50415253455f5452454528292e67656e636f6465283729636f646553657175656e63652834293c7061747465726e3e2d636f646552656375727369766528312973657441646472657373283129 6117:C2,88|90909090909090483b65187303ff55484c8b304983fef17505488b4008c34983fefb7506488b4010ebdd4983feef75194c8b68084d8b65004983fcf17505498b4508c3488b4010ebbe48b848b4fbacaa2a0000c390909090|@6119,7169|75,0,@6118 6118:S9|3c7061747465726e3e 6119:S69|50415253455f5452454528292e67656e636f6465283729636f646553657175656e63652834293c7061747465726e3e2d636f6465446563732831296765744e616d65283129 6120:C2,88|90909090909090483b65187303ff55484883f8017505488b4280c35248ff30488b40089090e8ddffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b04244889024889d04883c410c3909090|@1847,5| 6121:C2,96|90909090909090483b65187303ff55484883f8017508488b8260ffffffc35248ff30488b4008909090e8d9ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b04244889024889d04883c410c390909090909090|@1847,5| 6122:C2,96|90909090909090483b65187303ff55484883f8017508488b8258ffffffc35248ff30488b4008909090e8d9ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b04244889024889d04883c410c390909090909090|@1847,5| 6123:C3,112|90909090909090483b65187303ff55484883f801750b48b80100000000000000c35248ff7008488b00909090ff156600000050488b442408488b542410e8c5ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fe498946084c8b2c244d892e4c89f04883c418c3909090|@417,8191,@6124|24,0,0 6124:C6,368|90909090909090483b65187303ff55484c8b70084d8b2e4989d44c8b58184c89e8909090ff156e0100004c8b68104c89e8909090ff15660100004883f80174324c89e890ff155e0100004d8d7fe84c3b7d107303ff554049c747f8020000004d89fa488b5008498952084c8b304d8932eb1a48b8409dfbacaa2a0000909090ff555849ba01000000000000004d8b6c24e84d8b4d204d8b0141f6c0017503ff55704c89c74883c70270f4498939498b3a4c89074d8b4510498b30498b5a08488933488b37498b0b4883f9f7750c48b9f8b8fbacaa2a0000eb594883f9f175384d8b7310498b16498b00564d8b55404d8b4d4849b8e005edacaa2a00004889c34889d048ba28a9f9acaa2a0000ff159e0000004889c1eb1c48b850b9fbacaa2a00009090ff555848b90100000000000000eb01564d8d7fd84c3b7d107303ff554049c747f8040000004c89f848c7401801000000488948104c8b34244c89700848c700f9ffffff4883c408c39090909090|@6130,8191,@2950,@5915,@5917,@5397|116,0,@6082 132,0,0 207,0,@6125 244,0,@193 260,0,@5395 281,0,@6128 296,0,0 6125:O4|4,@6126,@3213,0 6126:O2|@440,@6127 6127:O2|@3216,@486 6128:O3|@7377,@215,@6129 6129:S6|636f64654578 6130:S57|50415253455f5452454528292e67656e636f6465283729636f646553657175656e63652834293c7061747465726e3e2d636f64654578283129 6131:C2,88|90909090909090483b65187303ff55484883f8017505488b4280c35248ff30488b40089090e8ddffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b04244889024889d04883c410c3909090|@1847,5| 6132:C4,136|90909090909090483b65187303ff55484c8b70084d8b2e4989d24c89e8909090ff158a00000050504d8b4ae8495048ff334c8d442410488b5b08498b51089090ff12488b7c24104883ff0175064c8b0424eb12488b0424488d542420ff15560000004989c0488b7424084c8906488b5c241848895e0848b801000000000000004883c420c3909090|@6134,8191,@2265,@6133|120,0,0 6133:C2,88|90909090909090483b65187303ff55484883f8017505488b42f0c35248ff30488b40089090e8ddffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b04244889024889d04883c410c3909090|@1847,5| 6134:S61|50415253455f5452454528292e67656e636f6465283729636f646553657175656e63652834293c7061747465726e3e2d676574436f6e73747273283329 6135:C2,96|90909090909090483b65187303ff55484883f8017508488b8268ffffffc35248ff30488b4008909090e8d9ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b04244889024889d04883c410c390909090909090|@1847,5| 6136:S23|50415253455f5452454528292e67656e636f6465283729 6137:S18|4c6973742e6d61705061727469616c283229 6138:C16,1416|90909090909090483b65187303ff55484d8d7fd84c3b7d107303ff554049c747f8040000004d89fe49bd30c3fbacaa2a00004d892e4c8b6a204d896e184c8b62184d8966104c8b5a084d895e084c8b104983fafd756f488b7818488b374889d148ff70084889f090ff15420500004d8b135153495049514956564c89d3909090ff15320500004989c1488b0424909090ff152a0500004883f8017557495148b81500000000000000ff151a0500004d8d7fd84c3b7d107303ff554049c747f804000000eb05e9d90000004c89ff48c747180100000048c747100100000048beb01e600000000000488977084889074989f8eb064c8b401049514c8b4c24184c89c74c8b4424204889fb488b442438488b5424309090e8edfeffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fe48c74608010000004889064d8d7fd84c3b7d107303ff554049c747f8040000004c89fb48c7431801000000488b1424488953104889730848c70309000000488b442408909090ff155204000050504989e14c8b4424384889d94889c34889c8488b5424209090ff12488b04244883c450c34983faf1756f4c8b48104d8b01498b3b4c89c09090ff151a0400004883f801740c48be380dedacaa2a0000eb1f4c89c090ff150604000053495649504889fb9090ff15fe0300004889c6eb055349564950488b14244883fa0175595648b81500000000000000909090ff15de0300004d8d7fd8eb05e95e0000004c3b7d107303ff554049c747f8040000004c89f948c741180100000048c741100100000049beb01e6000000000004c8971084889014889cbeb05488b5a105650504989e14c8b442428488b442410488b542420ff12488b04244883c430c34983fa07756f488b780848f7c7010000007567488b77084883fe0175624d8d7fe04c3b7d107303ff554049c747f8030000004c89f949be78dcfbacaa2a00004c89314c8941104c8b72104c8971085050505253495048ff3749514c8d4c24284989c8488b5810488b0424909090ff150a030000eb0fe9cb000000e9ae000000e9920000004c8b4c24384c8b442410488b5c2418488b442408488b54242090e8e9fcffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fd49c7450801000000498945004983fd0175074c8b642428eb1a4955488b442430488d54244890ff159e0200004989c44883c4084d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89600848c700130000004883c440c348b858ddfbacaa2a0000ff555848b8010000000000000048b858ddfbacaa2a000090ff555848b801000000000000004983faf3756f4d8d7fe04c3b7d107303ff554049c747f8030000004c89ff48bea8ddfbacaa2a00004889374c894710488b4a1048894f085050505253495648ff70104d89c84c8d4c24204c89c64989f8488b58084889f090ff15ea0100004d8d7fe84c3b7d107303ff554049c747f802000000eb05e9230100004c89fb488b5424284889530848c70315000000534883fa01750c48b90300000000000000eb2f488b024c8b304983fefb7519488b5208483b65187303ff5548ebd348b9010000000000000048b901000000000000004883f9017433488b0424909090ff156e0100004d8d7fe84c3b7d107303ff554049c747f8020000004d89fd4989450849c74500fbffffffeb044c8b2c2450504989e14c8b442428488b5c24184c89e8488b54242090ff124d8d7fe84c3b7d107303ff554049c747f8020000004d89fd49c74508010000004c8b24244d8965004983fd0175074c8b5c2438eb1a4955488b442440488d54245890ff15ea0000004989c34883c4084d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c89580848c700130000004883c450c34983fa097509488b4008e99bfaffff48b858ddfbacaa2a000090ff555848b8010000000000000090909090|@6158,8191,@5382,@5569,@2640,@1852,@2638,@2631,@2253,@5569,@1852,@5737,@6159,@5737,@4523,@6157|42,0,@6139 160,0,10 223,0,I48 454,0,@217 513,0,10 579,0,I48 690,0,@6152 915,0,@6154 928,0,0 938,0,@6154 952,0,0 992,0,@6156 1110,0,1 1149,0,0 1159,0,0 1390,0,@6154 1404,0,0 6139:C8,928|90909090909090483b65187303ff55484c8b72084d8b2e5050525053495049514c8d4c24284d89e8488b5a18ff15960300004c8b6424204d8b5c2408498b03488b542430ff124d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fa49c7020300000050504989c149b8d095edacaa2a000048bb810000000000000048b8170000000000000048ba701560000000000090ff1248c700150000004d8d7fe84c3b7d107303ff554049c747f8020000004d89f84989400849c700ffffffff4d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89ff4c89074889e648893e4889e348bad095edacaa2a0000488953084d8d7fe84c3b7d107303ff554049c747f8020000004c89f9488b04244889014c8b7424084c8971084d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fd49c7450001000000488b442418909090ff157a0200004c8b6424304d8d7fa84c3b7d107303ff554049c747f80a0000004d89fb49b838c7fbacaa2a00004d8903498b7c241049897b48488b74244049897340488b5c242049895b38498b542408498953304d894b284d8963204d89531849894b104d896b084d8d7fe84c3b7d107303ff554049c747f8020000004d89fe49b920dafbacaa2a00004d890e4d895e08495251495549b801000000000000004c89f390ff15de0100004c8b442410498b384883ff017424488b742428488b5c244048891e48c746080300000048b801000000000000004883c460c3488b3424488b1e4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48b9d8dafbacaa2a000048890a488b442408488942084989de4889d34c89f09090ff156e0100004d8d7fe84c3b7d107303ff554049c747f8020000004d89fd4989450849c745001500000049554883f801750c49bc0300000000000000eb2f4c8b184d8b134983fafb7519488b4008483b65187303ff5548ebd349bc010000000000000049bc01000000000000004983fc017430488b042490ff15fe0000004d8d7fe84c3b7d107303ff554049c747f8020000004d89f94989410849c701fbffffffeb044c8b0c244d8d7fe84c3b7d107303ff554049c747f8020000004d89f849c74008010000004d89084983f8017507488b7c2458eb1a4950488b442460488d54247090ff159a0000004889c74883c4084d8d7fe84c3b7d107303ff554049c747f8020000004c89fe48897e0848c70613000000488b5c243048893348c743080100000048b801000000000000004883c468c390|@6151,8191,@5808,@2206,@2285,@4394,@4523,@6150|113,0,@478 123,0,64 133,0,11 143,0,I11 239,0,@478 373,0,@6140 466,0,@6146 488,0,0 543,0,0 589,0,@6148 672,0,1 711,0,0 721,0,0 914,0,0 6140:C60,3368|90909090909090483b65187303ff55484989d04889c74889d848ba10b3f0acaa2a000090ff15260d00004883f80174754889d848baf8b2f0acaa2a0000909090ff15120d00004889c34889d8ff150e0d00009090ff150e0d00004883f801746d4889d890ff15060d00009090ff15060d00004989c6498b4038909090ff15fe0c000049505349564989f848bbd8b2f0acaa2a0000ff15ee0c000048f7c001000000750ceb05e9ee0200004c8b28eb1948b830f2eeacaa2a00009090ff555849bd01000000000000004c89e8eb05e9bb0200009090ff15b60c00004989c44c89e0ff15b20c00004883f80174704c89e090ff15aa0c00004c8b142450490bc2a801587503ff5570493bc2741c4c8b442410498b781848c7070100000049b90100000000000000eb0a49b901000000000000004c89e0ff156e0c00004c8b4c24104d8b4128498b384883ff0b751a49554c89c3909090ff15560c0000eb05e9490000004989c3eb764883fffb751349554c89c3909090ff153e0c00004989c3eb624d8d7fe04c3b7d107303ff554049c747f8030000004d89fb498943104d89430849c7030d0000004955eb594c8b5c24104d8b531849c702010000004d8b4b304d8b014c89e8ff15f60b00004883f801741649bb380dedacaa2a0000eb2ce929000000e9240000004c89e8909090ff15d60b000049554c89c390ff15d20b00004989c3eb07e9020000004955488b34244883fe017550495348b81500000000000000ff15b20b00004d8d7fd84c3b7d107303ff554049c747f8040000004c89fb48c743180100000048c743100100000048bab01e600000000000488953084889034889dfeb06488b7e104953488b5424184883fa01754f5748b81500000000000000ff155a0b00004d8d7fd84c3b7d107303ff554049c747f8040000004c89f948c741180100000048c741100100000049beb01e6000000000004c8971084889014889cbeb05488b5a10575050488b4c24384989e14989d8488b5c2410488b442418488b5120ff12488b4424084883f801751d4c8b6c24384d8b651849c704240100000049be0100000000000000eb0a49be01000000000000004c8b7424384c8b0424488b5c2428498b46109090ff15b60a00004c8b6c24384d8b65084d8b1c244c8b54242849524d23d341f6c201495a7503ff55704d3bd37c2541f6c2017503ff55704d89d14983c10270f44d890c2448b801000000000000004883c440c348b801000000000000004883c440c348b80100000000000000c34889d848ba28b5f0acaa2a0000909090ff15420a00004883f801745c4889d848ba10b5f0acaa2a0000909090ff152e0a0000488b7010488b1e4883fb01756f4889c1498b40389090ff151a0a000049505148ff76084989f848bbf0b4f0acaa2a00009090ff15060a000048f7c001000000750a4c8b30eb1ce9f607000048b830f2eeacaa2a0000ff555849be01000000000000004c8b6c2408498b4508909090ff15d20900004883f8017429eb05e9b50700004d8b5e084983fb01750c49bc0300000000000000eb1649bc0100000000000000eb0a49bc0100000000000000498b450890ff15960900004883f8017432498b4608ff158e0900004883f8017416498b4608ff158609000049bb0300000000000000eb1649bb0100000000000000eb0a49bb01000000000000004d8b56104d8b024983f8017571498b7a08488b342456480bf740f6c6015e7503ff5570483bfe7402eb0e4983fc017402eb064983fb01741c488b542410488b4a1848c7010100000048bb0100000000000000eb0a48bb01000000000000004983fc01745b4c89e890ff15fe0800009090ff15fe0800004883f8017471eb05e911050000488b5c2410488b5328488b024883f80b7512488b5b284889f8ff15da0800004889c1eb444883f8fb7517488b5b284889f8ff15ca0800004889c1eb2ce9710300004d8d7fe04c3b7d107303ff554049c747f8030000004c89f9488979104889510848c7010d000000eb05e91b010000488b44240890ff158e0800004d8d7fe84c3b7d107303ff554049c747f8020000004d89fe4989460849c706fbffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fd49bcc896edacaa2a00004d8965084d8975004d8d7fe84c3b7d107303ff554049c747f8020000004d89fb4d896b0849890b4d8d7fe84c3b7d107303ff554049c747f8020000004d89fa4d895a0849c7021500000049524983fb01750c49b90300000000000000eb2f4d8b03498b384883fffb75194d8b5b08483b65187303ff5548ebd349b9010000000000000049b901000000000000004983f9017431488b04249090ff15b20700004d8d7fe84c3b7d107303ff554049c747f8020000004d89f94989410849c701fbffffffeb604c8b0c24eb5f488b5c2410488b5330488b0af6c1017503ff55704889c84883c00270f457488b534090ff124c8b284983fd0b75144889c3488b04249090ff15520700004989c6eb4d4983fdfb751c4889c3488b0424ff15420700004989c6eb35e95c040000e9570400004d8d7fe04c3b7d107303ff554049c747f8030000004d89fe4c8b24244d8966104989460849c7060d000000488b442410909090ff15020700004d8d7fe84c3b7d107303ff554049c747f8020000004d89fb4989430849c703fbffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fa49b9a08cedacaa2a00004d894a084d891a4d8d7fe84c3b7d107303ff554049c747f8020000004d89f84d8950084d89304d8d7fe84c3b7d107303ff554049c747f8020000004c89ff4c89470848c70715000000574983f801750c48be0300000000000000eb2f498b18488b134883fafb75194d8b4008483b65187303ff5548ebd348be010000000000000048be01000000000000004883fe01742f488b0424ff152a0600004d8d7fe84c3b7d107303ff554049c747f8020000004c89f94889410848c701fbffffffeb04488b0c244d8d7fb84c3b7d107303ff554049c747f8080000004c89f848c740380100000048c740300100000048c74028ffffffff48c740200300000048c740180100000048c740100300000049beb01e6000000000004c8970084889084d8d7fe84c3b7d107303ff554049c747f8020000004d89f94989410849c701f3ffffff4883c408eb6e4983fb01746d488b5c2410488b5328488b024883f80b7512488b5b284889f8ff15620500004889c1eb3f4883f8fb7512488b5b284889f8ff15520500004889c1eb274d8d7fe04c3b7d107303ff554049c747f8030000004c89f9488979104889510848c7010d0000004c8b31eb0ae920020000e96b0000004983fe0b75184889cb48b80300000000000000ff15060500004989c1eb714983fefb751a4889cb48b803000000000000009090ff15ee0400004989c1eb564d8d7fe04c3b7d107303ff554049c747f8030000004d89f949c74110030000004989490849c7010d000000eb6d488b5c2410488b5328488b0a4883f90b7521488b5b284889f8909090ff15a2040000eb0ae950000000e94b0000004989c1eb464883f9fb7512488b5b284889f8ff15860400004989c1eb2e4d8d7fe04c3b7d107303ff554049c747f8030000004d89f94989791049895108eb05e90700000049c7010d00000050eb57488b7c2410488b771848c706010000004983fc017446488b5f30488b134889d14c89e890ff152e04000049ba01000000000000004c8b4f484989c04889cb4c89f048baf06bfbacaa2a000090ff150e0400004989c1eb71e9d8000000488b5f30488b134889d14c89e8909090ff15f6030000495349ba01000000000000004c8b4f484989c04889cb4c89f048ba28a9f9acaa2a0000909090ff15d20300004c8b34244983fe01746d4c8b284983fd0b75214889c348b803000000000000009090ff15b2030000eb05e9660000004989c1eb554983fdfb751b4889c348b80300000000000000909090ff15920300004989c1eb3c4d8d7fe04c3b7d107303ff554049c747f8030000004d89f949c7411003000000eb05e9120000004989410849c7010d000000eb08e9030000004989c14883c408504c8b6c24184d89c8488b5c2408498b4510909090ff153a0300004c8b6424184d8b5c24084d8b134c8b4c240849514d23ca41f6c10149597503ff55704d3bca7c2441f6c1017503ff55704d89c84983c00270f44d890348b801000000000000004883c420c348b801000000000000004883c420c348b80100000000000000c34889d848ba30a7f0acaa2a0000ff15ca0200004883f801746a4889d848ba18a7f0acaa2a0000909090ff15b60200004889c6498b4038909090ff15ae0200004950564989f848bbf8a6f0acaa2a00009090ff159e02000048f7c0010000007505488b18eb1848b830f2eeacaa2a000090ff555848bb0100000000000000488b0424eb05e98400000090ff156e0200004889c14889d8ff156a02000048f7c101000000755948f7c001000000754148ff710848ff7008488b18488b01488d54242090ff1546020000488b0424488b4c24084883c410483b65187303ff5548ebbc48b801000000000000004883c420c348b801000000000000004883c410c348b801000000000000004883c410c348b80100000000000000c3909090909090|@6142,8191,@2190,@2193,@2253,@2255,@2253,@2257,@2206,@2358,@2253,@2255,@2257,@2257,@4802,@4802,@2631,@2253,@5569,@1852,@1852,@3276,@2198,@2201,@2206,@2358,@6143,@6143,@2610,@2612,@2277,@2608,@4802,@4802,@2136,@4523,@4802,@4802,@2136,@4523,@4802,@4802,@4802,@4802,@4802,@4802,@2277,@6018,@2277,@5397,@4802,@4802,@3276,@2167,@2170,@2206,@2358,@2265,@2265,@6141|27,0,@2189 53,0,@2188 140,0,@2187 177,0,@1555 192,0,0 285,0,0 297,0,0 466,0,@217 536,0,10 592,0,I48 632,0,10 688,0,I48 772,0,0 784,0,0 881,0,0 896,0,0 911,0,0 925,0,@2197 953,0,@2196 1010,0,@2195 1047,0,@1555 1060,0,0 1111,0,1 1123,0,0 1135,0,0 1188,0,1 1200,0,0 1212,0,0 1294,0,0 1306,0,0 1535,0,@486 1627,0,1 1666,0,0 1676,0,0 1963,0,@439 2053,0,1 2092,0,0 2102,0,0 2241,0,I48 2428,0,1 2458,0,1 2692,0,0 2715,0,@6017 2766,0,0 2789,0,@5395 2830,0,1 2869,0,1 3044,0,0 3059,0,0 3074,0,0 3088,0,@2166 3113,0,@2165 3154,0,@2164 3186,0,@1555 3200,0,0 3308,0,0 3323,0,0 3338,0,0 3353,0,0 6141:C7,536|90909090909090483b65187303ff55484c8b70104d8b2e4983fd0175624c8b63104d8b1c244983fb0175594d8b5424084d8b4e0849524d0bd141f6c201495a7503ff55704d3bd1740f4c8b42f8498b781848c707010000004c8b42f8498b7828488b0f4883f90b75205249514889fb4c89d09090ff15c60100004889c6eb4ee987010000e9be0000004883f9fb75145249514889fb4c89d0ff15aa0100004889c6eb2a4d8d7fe04c3b7d107303ff554049c747f8030000004c89fe4c89561048897e0848c7060d000000524951488b4424084c8b70f84989f0488b1c24498b4610909090ff15660100004c8b6c24084d8b65f84d8b5c24084d8b134c8b0c2449514d23ca41f6c10149597503ff55704d3bca7c2441f6c1017503ff55704d89c84983c00270f44d890348b801000000000000004883c410c348b801000000000000004883c410c34c8b52f84d8b4a1849c701010000004d8b4230498b385249ff7608498b724849ba01000000000000004989f14c8b40184889d94889fb4889c848ba28a9f9acaa2a00009090ff15c60000004c8b7424084d8b6ef84989c0488b1c24498b45109090ff15b20000004c8b6424084d8b5c24f84d8b53084d8b0a4c8b042449504d23c141f6c00149587503ff55704d3bc17c2441f6c0017503ff55704c89c74883c70270f449893a48b801000000000000004883c410c348b801000000000000004883c410c348b80100000000000000c39090|@6145,8191,@4802,@4802,@3276,@5397,@3276|299,0,0 314,0,0 360,0,0 386,0,@5395 495,0,0 510,0,0 525,0,0 6142:S69|535452554354555245535f28292e67656e636f646553747275637473283229737472756374757265436f64652834296d61746368537472756374757265283429552d283329 6143:C2,32|4883f8ff750b48b80300000000000000c348b80100000000000000c390909090|@6144,1|8,0,1 19,0,0 6144:S11|53696d706c6556616c7565 6145:S90|535452554354555245535f28292e67656e636f646553747275637473283229737472756374757265436f64652834296d61746368537472756374757265283429552d28332970726f63657373436f6e7374727563746f72283229 6146:C2,40|90909090909090483b65187303ff55484c8b4010488b5808488b00488b5208ff2290909090909090|@6147,8191| 6147:S69|535452554354555245535f28292e67656e636f646553747275637473283229737472756374757265436f64652834296d61746368537472756374757265283429552d283129 6148:C3,32|90909090909090483b65187303ff55484889c3488b4208ff252b000000909090|@6149,7949,@428| 6149:S76|535452554354555245535f28292e67656e636f646553747275637473283229737472756374757265436f64652834296d61746368537472756374757265283429636f64654c6973742d283129 6150:C2,88|90909090909090483b65187303ff55484883f8017505488b4290c35248ff30488b40089090e8ddffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b04244889024889d04883c410c3909090|@1847,5| 6151:S64|535452554354555245535f28292e67656e636f646553747275637473283229737472756374757265436f64652834296d61746368537472756374757265283429 6152:C2,96|90909090909090483b65187303ff55485050504989e14c8b4008488b18488b4210488b5208909090ff124d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c8b34244c89304c8b6c24084c8968084c8b6424104c8960104883c418c3|@6153,8191| 6153:S56|535452554354555245535f28292e67656e636f646553747275637473283229737472756374757265436f6465283429636f6465642d283129 6154:O3|@7377,@215,@6155 6155:S30|737472756374757265436f64653a206e6f74206120737472756374757265 6156:C2,96|90909090909090483b65187303ff55485050504989e14c8b4008488b18488b4210488b5208909090ff124d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c8b34244c89304c8b6c24084c8968084c8b6424104c8960104883c418c3|@5388,8191| 6157:C2,88|90909090909090483b65187303ff55484883f8017505488b42a8c35248ff30488b40089090e8ddffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b04244889024889d04883c410c3909090|@1847,5| 6158:S47|535452554354555245535f28292e67656e636f646553747275637473283229737472756374757265436f6465283429 6159:C2,88|90909090909090483b65187303ff55484883f8017505488b42b8c35248ff30488b40089090e8ddffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b04244889024889d04883c410c3909090|@1847,5| 6160:C2,104|90909090909090483b65187303ff55485050504989e14c8b4008488b1848b8b01e600000000000488b520890ff124d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c8b34244c89304c8b6c24084c8968084c8b6424104c8960104883c418c390909090|@5388,8191|31,0,I48 6161:O2|0,@6162 6162:O1|@6163 6163:C2,16|48b8d095edacaa2a0000c39090909090|@6164,1|2,0,@478 6164:S40|535452554354555245535f28292e67656e636f646553747275637473283229636f6465642d283129 6165:C2,88|90909090909090483b65187303ff55484883f8017505488b42d8c35248ff30488b40089090e8ddffffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48894208488b04244889024889d04883c410c3909090|@1847,5| 6166:S31|535452554354555245535f28292e67656e636f646553747275637473283229 6167:S21|4c45585f28292e72657365744c6578616e28313029 6168:O1|@6169 6169:C2,32|4883f801750b48b80300000000000000c348b80100000000000000c390909090|@1114,1|8,0,1 19,0,0 6170:O3|1,@584,@6191 6171:O4|-2,1,@6172,0 6172:O2|@6174,@6173 6173:O2|@6176,@6175 6174:O2|49,@570 6175:O2|@6182,0 6176:O2|50,@6177 6177:O3|1,@584,@6178 6178:O4|-3,@6179,@791,@789 6179:O2|@6180,0 6180:O4|-3,0,@5730,@6181 6181:O2|0,@5728 6182:O2|51,@6183 6183:O4|-3,@6184,@605,@592 6184:O2|@6185,0 6185:O4|-3,0,@6187,@6186 6186:O2|0,@6188 6187:S9|756e6976657273616c 6188:O6|@6187,0,0,0,@6190,@6189 6189:O2|-1,@7488 6190:O2|-1,@7487 6191:O4|-2,1,@6192,0 6192:O2|@6194,@6193 6193:O2|@6197,@6196 6194:O2|@6195,@583 6195:S5|6669786573 6196:O2|@6200,@6199 6197:O2|@6198,@724 6198:S5|7479706573 6199:O2|@6203,@6202 6200:O2|@6201,@708 6201:S6|76616c756573 6202:O2|@6206,@6205 6203:O2|@6204,@740 6204:S8|66756e63746f7273 6205:O2|@6208,0 6206:O2|@6207,@692 6207:S10|7369676e617475726573 6208:O2|@6209,@768 6209:S10|73747275637475726573 6210:O2|@6212,@6211 6211:O2|@6213,0 6212:S16|7072696e74496e4e616d655370616365 6213:O3|@7374,69,@6214 6214:O4|@6212,-1,@6216,@6215 6215:O3|1,@6217,@584 6216:O2|-2,-4 6217:O4|-2,1,@6218,0 6218:O2|@6220,@6219 6219:O2|@569,@6222 6220:O2|49,@6221 6221:O3|3,@7489,79992 6222:O2|@6224,@6223 6223:O2|@6225,0 6224:O2|51,@926 6225:O2|52,@513 6226:O2|@6228,0 6227:S9|4e616d655370616365 6228:O3|@7392,69,@6229 6229:O3|@6227,@552,@6230 6230:O4|@6231,I48,0,0 6231:O4|-1,@7491,@7492,@7490 6232:O2|@700,@6251 6233:O2|@716,@6234 6234:O2|@6235,0 6235:O3|@7387,69,@717 6236:O2|@732,@6237 6237:O2|@6238,0 6238:O3|@7387,69,@733 6239:O2|@572,@6240 6240:O2|@6241,0 6241:O3|@7387,69,@573 6242:O2|@748,@6243 6243:O2|@6244,0 6244:O3|@7387,69,@749 6245:O2|@776,@6246 6246:O2|@6247,0 6247:O3|@7387,69,@777 6248:O2|@601,@6249 6249:O2|@6250,0 6250:O3|@7387,69,@602 6251:O2|@6252,0 6252:O3|@7387,69,@701 6253:O2|@6255,@6254 6254:O2|@6256,0 6255:S3|6d6f64 6256:O3|@7374,69,@6257 6257:O4|@6255,-1,@177,@6258 6258:O3|1,@179,@183 6259:O2|@605,@6260 6260:O2|@6261,0 6261:O3|@7387,69,@606 6262:O2|33,@6263 6263:O2|@6264,0 6264:O3|@7374,69,@6265 6265:O4|33,-1,@6267,@6266 6266:O3|1,@6272,@6271 6267:O2|-1,@6268 6268:O2|-7,@6269 6269:O8|@3221,@6270,0,0,1,0,0,0 6270:S4|21283129 6271:O3|3,@7494,79992 6272:O4|-3,@6274,@2730,@6273 6273:O2|0,@3183 6274:O2|@6271,0 6275:O2|@791,@6276 6276:O2|@6277,0 6277:O3|@7387,69,@792 6278:O2|@802,@6279 6279:O2|@6280,0 6280:O3|@7374,69,@800 6281:O2|42,@6282 6282:O2|@6283,0 6283:O3|@7374,69,@6284 6284:O4|42,-1,@177,@6258 6285:O2|@5730,@6286 6286:O2|@6287,0 6287:O3|@7387,69,@5728 6288:O2|43,@6289 6289:O2|@6290,0 6290:O3|@7374,69,@6291 6291:O4|43,-1,@177,@6258 6292:O2|126,@6293 6293:O2|@6294,0 6294:O3|@7374,69,@6295 6295:O4|126,-1,@177,@542 6296:O2|45,@6297 6297:O2|@6298,0 6298:O3|@7374,69,@6299 6299:O4|45,-1,@177,@6258 6300:O2|@6302,@6301 6301:O2|@6303,0 6302:S9|426f6f747374726170 6303:O3|@7392,69,@6304 6304:O3|@6302,@552,@6305 6305:O4|@6306,I48,0,0 6306:O4|-1,@7496,@7497,@7495 6307:O2|@7051,@7050 6308:O2|@6310,@6309 6309:O2|@6311,0 6310:S17|636f6d70696c65724f7574707574546167 6311:O3|@7374,69,@6312 6312:O4|@6310,-1,@6314,@6313 6313:O4|-3,@6317,@6318,@6316 6314:O2|-1,@6315 6315:O2|-3,@1032 6316:O2|0,@6319 6317:O2|@926,0 6318:S3|746167 6319:O6|@6318,1,0,@6321,@6323,@6320 6320:O2|-1,@7501 6321:O2|@6322,0 6322:O3|3,@7499,79992 6323:O2|-1,@7500 6324:O2|@6326,@6325 6325:O2|@6327,0 6326:S12|70726f66696c696e67546167 6327:O3|@7374,69,@6328 6328:O4|@6326,-1,@6330,@6329 6329:O4|-3,@6332,@6318,@6316 6330:O2|-1,@6331 6331:O2|-3,@1105 6332:O2|@513,0 6333:O2|@6335,@6334 6334:O2|@6336,0 6335:S15|617373656d626c79436f6465546167 6336:O3|@7374,69,@6337 6337:O4|@6335,-1,@6339,@6338 6338:O4|-3,@6341,@6318,@6316 6339:O2|-1,@6340 6340:O2|-3,@4088 6341:O2|@178,0 6342:O2|@6344,@6343 6343:O2|@6345,0 6344:S17|696e6c696e6546756e63746f7273546167 6345:O3|@7374,69,@6346 6346:O4|@6344,-1,@6347,@6338 6347:O2|-1,@6348 6348:O2|-3,@5367 6349:O2|@6351,@6350 6350:O2|@6352,0 6351:S7|6d6c3930546167 6352:O3|@7374,69,@6353 6353:O4|@6351,-1,@6354,@6338 6354:O2|-1,@6355 6355:O2|-3,@1361 6356:O2|@6358,@6357 6357:O2|@6359,0 6358:S19|6572726f724d65737361676550726f63546167 6359:O3|@7374,69,@6360 6360:O4|@6358,-1,@6362,@6361 6361:O4|-3,@6364,@6318,@6316 6362:O2|-1,@6363 6363:O2|-3,@1064 6364:O2|@6365,0 6365:O3|1,@6366,@584 6366:O4|-2,1,@6367,0 6367:O2|@597,@6368 6368:O2|@934,@6369 6369:O2|@6370,0 6370:O2|51,@513 6371:O2|@6373,@6372 6372:O2|@6374,0 6373:S11|636f646574726565546167 6374:O3|@7374,69,@6375 6375:O4|@6373,-1,@6376,@6338 6376:O2|-1,@6377 6377:O2|-3,@1091 6378:O2|@6380,@6379 6379:O2|@6381,0 6380:S10|646973706c6179536967 6381:O3|@7374,69,@6382 6382:O4|@6380,-1,@6384,@6383 6383:O3|1,@6421,@584 6384:O2|-1,@6385 6385:O2|-3,@6386 6386:O1|@6387 6387:C4,200|90909090909090483b65187303ff55485050505050505048ff3048ff700848ff701048ff70184c8d442420488b582048b89b00000000000000909090ff15ae0000004d8d7fc04c3b7d107303ff554049c747f8070000004d89fe4c8b6c24204d892e4c8b6424284d8966084c8b5c24304d895e104c8b5424384d8956184c8b4c24404d894e204c8b4424484d894628488b7c245049897e304c8b14244c8b4c24084d89f0488b5c2410488b44241848bac8fbfbacaa2a00004883c458ff2536000000909090909090|@6420,8191,@359,@6390|49,0,77 176,0,@6388 6388:O2|@6390,@6389 6389:O3|@6394,@6388,@6393 6390:C5,240|90909090909090483b65187303ff5548f6c3017503ff55704883fb017f1048b8d85deeacaa2a0000498b5018ff2252505349504951495248b8103dedacaa2a0000498b5030909090ff124c8b742410488b442420ff15be00000049ff76184889c348b840fdfbacaa2a000090ff15ae00000048bbd021f0acaa2a0000ff15a6000000488b14249090ff124c8b6c241848b83829f0acaa2a0000498b5500909090ff124c8b64243048ff7424084c8b54241849b903000000000000004c8b442420488b5c2428488b442430498b54240890ff124c8b5c241848b80100000000000000498b53104883c438ff229090909090|@6392,8191,@2204,@303,@303|32,0,@1319 57,0,@268 99,0,@6391 116,0,@1980 145,0,@1996 179,0,1 217,0,0 6391:S10|7369676e617475726520 6392:S32|56414c55455f4f505328292e646973706c61795369676e617475726573283529 6393:O2|@6417,@6389 6394:C6,480|90909090909090483b65187303ff55485249524950535048b8a04ef4acaa2a0000498b5030909090ff124c8b74241048b8c03beeacaa2a0000498b5618909090ff124c8b6c240841f6c5017503ff55704983fd037f324c8b64241048b8b027edacaa2a0000498b1424909090ff124c8b5c241048b8d85deeacaa2a0000498b5318909090ff12eb6e4d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fc49c7042401000000488b0424909090ff154e0100004954ff154e0100004c8b58104983fb017469504c8b500848b801000000000000004c89d29090ff124c8b4c24084d8b014d8d7fe84c3b7d10730aeb05e992000000ff554049c747f8020000004c89ff4c894708488907498939488b342448b80100000000000000488b16ff124883c408483b65187303ff5548eb8d4c8b14244d8b0a48bbe0fffbacaa2a00004c89c8909090ff15c60000004883f8017502eb2f4c8b0048ff7008498b5808498b00488d542438909090ff15aa000000488b04244883c408483b65187303ff5548ebc94883c4084c8b44241048b8b027edacaa2a0000498b1090ff12488b7c241048b82038eeacaa2a0000488b5718909090ff12488b74241048b80100000000000000488b5610488b5c24284883c43853ff2290909090909090|@6403,8191,@2206,@2297,@3174,@6402|25,0,@3558 49,0,@1253 93,0,@257 117,0,@1319 211,0,0 281,0,0 318,0,@6395 404,0,@257 425,0,@1215 449,0,0 6395:O1|@6396 6396:C2,48|4989c64d8d7fe84c3b7d107303ff554049c747f8020000004c89f849bd5800fcacaa2a00004c89284c897008c3909090|@6401,6145|29,0,@6397 6397:C3,48|90909090909090483b65187303ff55484c8b4a084d8b01498b79084989f9488b5808488b00ff252d0000009090909090|@6399,255,@6398| 6398:C2,24|4889c34c89c048baf019600000000000ff22909090909090|@6400,255|8,0,I29 6399:S36|56414c55455f4f505328292e646973706c61795369672836296f72646572283129283129 6400:S33|56414c55455f4f505328292e646973706c61795369672836296f72646572283429 6401:S33|56414c55455f4f505328292e646973706c61795369672836296f72646572283129 6402:C17,688|90909090909090483b65187303ff55484989d44889d848ba681ef1acaa2a0000ff15b20200004883f801746e4d8b5c24e849545348b83829f0acaa2a0000498b13909090ff12488b042448ba501ef1acaa2a0000ff15860200004c8b5424084d8b4ae041f6c1017503ff55704d89c84983e80270f4498b7af8498b72e8498b5af0498b52084989d24989d94c89c14989f04889cb488b5708eb05e9060000004883c410ff224889d848ba10b3f0acaa2a00009090ff152e0200004883f801746e4d8b5c24e849545348b83829f0acaa2a0000498b13909090ff12488b042448baf8b2f0acaa2a0000ff15020200004c8b5424084d8b4ae041f6c1017503ff55704d89c84983e80270f4498b7af8498b72e8498b5af0498b52084989d24989d94c89c14989f04889cb488b5710eb05e9060000004883c410ff224889d848ba30a7f0acaa2a00009090ff15aa0100004883f80174494d8b5c24e849545348b83829f0acaa2a0000498b13909090ff12488b042448ba18a7f0acaa2a0000ff157e0100004c8b5424084d8b4a084d8b42e8498b5ae04883c410ff256b0100004889d848ba28b5f0acaa2a00009090ff155e0100004883f801746d4889d848ba10b5f0acaa2a0000909090ff154a0100004989c3498b4308909090ff15420100004883f8017415498b4308ff153a01000048b80100000000000000c34d8b5424e84954495348b83829f0acaa2a0000498b1290ff124c8b4c24084d8b51084d8b41e0498b79e8eb05e91b000000498b71f04989f14c89c34989f8488b04244883c410ff25eb0000004889d848baf01ff1acaa2a00009090ff15de0000004883f80174454d8b5c24e849545348b83829f0acaa2a0000498b13909090ff12488b042448bad81ff1acaa2a0000ff15b20000004c8b5424084d8b42e8498b5ae04883c410ff25a300000048b80100000000000000c3|@6407,8191,@2384,@2387,@2190,@2193,@2167,@2170,@6408,@2198,@2201,@2610,@2612,@6404,@2390,@2393,@2143|24,0,@2383 54,0,@1996 76,0,@2382 170,0,@2189 202,0,@1996 224,0,@2188 318,0,@2166 350,0,@1996 372,0,@2165 418,0,@2197 445,0,@2196 496,0,0 516,0,@1996 586,0,@2389 618,0,@1996 640,0,@2388 679,0,0 6403:S25|56414c55455f4f505328292e646973706c6179536967283629 6404:C16,1000|90909090909090483b65187303ff5548f6c3017503ff55704883fb017f1048b8d85deeacaa2a0000498b5018ff224c8b304c8b68084c8b60104c8b58184c89e8ff15ca0300004883f801746d4c89f74c89e09090ff15be0300004883f801745e4c89e090ff15b6030000534950495149525749535048b8103dedacaa2a0000498b503090ff12488b74242848b8803aeeacaa2a0000488b5618909090ff12488b5c242848b8b027edacaa2a0000488b13ff12488b542428eb0ae921020000e96c01000048ff721848bbd021f0acaa2a0000488b4424189090ff154a030000488b14249090ff12488b4c243048b8e009fcacaa2a0000488b11ff1248ff750848b89206fcacaa2a0000506a0148896508488b442420ff15160300004c8b5424404c8b4c24484c8b442450488b5c24289090ff150203000048ff742410488f4508eb34904c8b304983fe03750f48b858d4ecacaa2a00009090ff55584c8b6c243048b860efeeacaa2a0000498b5518909090ff125050504c8b64244848b8b027edacaa2a0000498b1424ff124c8b5c244848b8103dedacaa2a0000498b5330909090ff124c8b54244848b87500000000000000498b5218909090ff124c8b4c244848b8e009fcacaa2a0000498b11ff1248b80100000000000000ff15620200004c8b5424384989c14c8b442448488b5c2450488b442428909090ff154a0200004c8b44244848b80100000000000000498b5010909090ff12488b7c244848b80100000000000000488b57104883c458ff22534950495257495348b8103dedacaa2a0000498b5030909090ff12488b74241848ff7618488b5c241048b8f809fcacaa2a00009090ff15e601000048bbb821f0acaa2a0000ff15de010000488b14249090ff12488b5c242048b8e009fcacaa2a0000488b13ff1248b80100000000000000ff15ba0100004c8b5424184989c14c8b442420488b5c2428488b442408909090ff15a2010000488b54242048b80100000000000000488b52104883c430ff224983fd01757353495049524956495348b8103dedacaa2a0000498b5030ff124c8b54241848b8583beeacaa2a0000498b5218909090ff124c8b4c241848b8583cedacaa2a0000498b11ff124c8b442418488b442408498b5018ff12488b3c24488b374883feff746f488b5c241848b8583cedacaa2a0000eb05e97e000000488b13ff12488b54241848b8c035eeacaa2a0000488b5218909090ff12488b4c241848b8e009fcacaa2a0000488b11ff1248b80100000000000000ff15d20000004c8b5424104989c14c8b442418488b5c2420488b0424eb05e90700000090ff15b6000000488b5c241848b80100000000000000488b53104883c428ff2248b80100000000000000c39090|@6416,8191,@6143,@2280,@2267,@303,@5463,@5453,@2017,@2013,@303,@303,@2017,@2013,@2017,@2013|32,0,@1319 119,0,@268 141,0,@1240 165,0,@257 201,0,@1980 237,0,@6405 256,0,$6404+322 333,0,@45 353,0,@1552 380,0,@257 401,0,@268 425,0,58 449,0,@6405 464,0,0 517,0,0 541,0,0 569,0,@268 602,0,@6406 620,0,@1979 649,0,@6405 664,0,0 717,0,0 752,0,@268 773,0,@1249 797,0,@261 846,0,@261 873,0,@1190 897,0,@6405 912,0,0 969,0,0 989,0,0 6405:O2|1,3 6406:S4|76616c20 6407:S39|56414c55455f4f505328292e646973706c6179536967283629646973706c617953706563283229 6408:C16,568|90909090909090483b65187303ff55484989c348b80100000000000000909090ff153a020000f6c3017503ff55704883fb017f1048b8d85deeacaa2a0000498b5018ff224d89da4889c74c89d0909090ff15120200004883f801747049504951574c89d0ff15060200005050495253488d5c2410ff15fe010000488b74243048b8103dedacaa2a0000488b5630909090ff12488b5c243048b82839eeacaa2a0000488b5318909090ff12488b54243048b83829f0acaa2a0000488b12ff12488b44240890ff15b6010000eb05e98f0000004c8b5424284c8b4c24304c8b442420488b1c24ff159e010000488b4c243048ff711848bbd021f0acaa2a0000488b4424209090ff1586010000488b14249090ff12488b44241090ff157a0100004c8b74240841f6c6017503ff55704d89f54983ed0270f44c89eb488d542440909090ff155a0100004c8b64243848b80100000000000000498b5424104883c440ff224c89d090ff153e01000050504952534950495157488d5c2428909090ff152e010000488b74241048b8f83cedacaa2a0000488b5630909090ff12488b5c2410488b442420ff150e0100004883f801740c48b8c838eeacaa2a0000eb0a48b85036eeacaa2a0000488b53189090ff12488b54241048b8b027edacaa2a0000488b12ff12488b44242090ff15d20000004c8b5424084c8b4c24104c8b0424488b5c2418909090ff15be000000488b4c2410488b442430488b5118ff12488b4424104c8b701048b801000000000000004c89f24883c438ff229090|@6410,8191,@2017,@2265,@2066,@2068,@2239,@2093,@303,@2265,@6409,@2066,@2068,@2241,@2239,@2093|21,0,0 54,0,@1319 129,0,@268 153,0,@1226 177,0,@1996 245,0,@1980 333,0,0 393,0,@267 434,0,@1222 446,0,@1196 469,0,@257 549,0,0 6409:C8,336|90909090909090483b65187303ff55484883f801750b48b80100000000000000c34c8b72f8525348ff3048ff700848b8e84ef4acaa2a0000498b5630ff12488b44240890ff152e0100004989c5488b4424089090ff15260100004c8b4c24104989c04c89eb48b80300000000000000488b542418ff150e0100004c8b64241041f6c4017503ff55704d89e34983eb0270f44c8b14244983fa017502eb6e41f6c3017503ff55704983fb017d02eb62498b02909090ff15d60000004989c1498b02ff15d2000000495349ff72084d89c84d89d94c89c74989c04889fb48b80100000000000000488b5424289090ff15ae000000488b74240840f6c6017503ff55704889f34883eb0270f4eb0ae91e000000e9190000004989db4c8b14244883c410483b65187303ff5548e967ffffff4c8b4c24184d8b41f848b80100000000000000498b50104883c420ff229090909090|@6414,8191,@2136,@2277,@6411,@2136,@2277,@6411|24,0,0 48,0,@3561 103,0,1 221,0,0 313,0,0 6410:S33|545950455f5452454528292e646973706c617954797065436f6e73747273283429 6411:C9,704|90909090909090483b65187303ff55484883f80174214c8b6af85250534950495148b83829f0acaa2a0000498b550090ff124989c6eb1e4c8b72f85250534950495148b8b027edacaa2a0000498b1690ff124989c64c8b6c24204d8b65f848b8103dedacaa2a0000498b542430909090ff124c8b5c24204d8b53f848b8103dedacaa2a0000498b5230909090ff124c8b4c24184983f901741b4c8b442420498b78f848b84812fcacaa2a0000488b1790ff12eb6a4c8b442420498b78f848b8103dedacaa2a0000488b573090ff12488b742420488b5ef848b8f900000000000000488b5318909090ff12488b542420488b4af848b83829f0acaa2a0000488b11ff12488b4424204c8b70f848b80100000000000000498b5610909090ff124c8b2c2441f6c5017503ff55704983fd017f1f4c8b6424204d8b5c24f848b8d85deeacaa2a0000498b5318909090ff12eb6a4c8b6424204d8b5c24f8488b442410498b531890ff12488b44240890ff15760100004883f8017442488b442408909090ff156a0100004c8b5424204d8b4af848b86012fcacaa2a0000498b11ff124c8b442420498b78f848b8c035eeacaa2a0000488b5718909090ff124c8b5424204d8b4af848b80100000000000000498b5110909090ff12488b44240890ff15160100004883f801745f488b442408909090ff150a0100004c8b042441f6c0017503ff55704983f8017e70488b7c2420488b77f848b86012fcacaa2a0000488b1690ff12488b44240890ff15da0000004883f8017418488b442408909090ff15ce0000004889c3eb1de95600000048b8b0d7edacaa2a000090ff555848bb0100000000000000488b1424f6c2017503ff55704889d14883e902eb05e92400000070ed488b4424204c8b50f04c8b48e84c8b40f84c8b334889cb4c89f09090ff15760000004c8b442420498b78f848b80100000000000000488b57104883c428ff2290|@6415,8191,@2084,@2085,@2084,@2085,@2084,@2085,@2013|35,0,@1996 68,0,@257 96,0,@268 125,0,@268 164,0,@6412 191,0,@268 217,0,124 245,0,@1996 269,0,0 317,0,@1319 401,0,@6413 425,0,@1190 453,0,0 532,0,@6413 590,0,@970 604,0,0 685,0,0 6412:O2|0,2 6413:O2|1,4 6414:S50|545950455f5452454528292e646973706c617954797065436f6e737472732834297056616c436f6e7374724c697374283229 6415:S46|545950455f5452454528292e646973706c617954797065436f6e737472732834297056616c436f6e737472283429 6416:S28|56414c55455f4f505328292e646973706c617956616c756573283529 6417:C9,576|90909090909090483b65187303ff5548f6c3017503ff55704883fb017f1048b8d85deeacaa2a0000498b5018ff224989d64989c54c89e890ff152a0200004883f801741048b8e01ff0acaa2a0000498b5018ff224c89e890ff15120200004983fd01756049564955534950495149525048b815000000000000009090ff15f60100004d8d7fd84c3b7d107303ff554049c747f8040000004d89fc49c74424180100000049c74424100100000049bbb01e6000000000004d895c2408498904244c89e0eb144989c4498b451049564955534950495149524954ff15a20100004c8b5c24185048b8103dedacaa2a0000498b53309090ff124c8b54242049ff7218488b5c241048b8e015fcacaa2a00009090ff157201000048bbb821f0acaa2a0000ff156a010000488b14249090ff124c8b4c242848b83829f0acaa2a0000498b11ff1248bbb01e600000000000488b44240848bab01860000000000090ff124883f80175144c8b442428488b442408498b50189090ff12eb5c488b7c24384883ff01755648b81500000000000000909090ff15020100004d8d7fd84c3b7d107303ff554049c747f8040000004c89fe48c746180100000048c746100100000048bbb01e60000000000048895e084889064989f0eb09e9450000004c8b4710488b74243040f6c6017503ff55704889f34883eb0270f4488b54244048ff7424184c8b54242849b903000000000000004c89c14c8b4424304889c8488b5208ff12488b4424284c8b701048b801000000000000004c89f24883c448ff22909090909090|@6419,8191,@2631,@2259,@1852,@2204,@303,@303,@1852|32,0,@1319 70,0,@1976 114,0,10 174,0,I48 230,0,@268 262,0,@6418 280,0,@1979 309,0,@1996 324,0,I48 339,0,I24 389,0,10 448,0,I48 517,0,1 553,0,0 6418:S10|73747275637475726520 6419:S32|56414c55455f4f505328292e646973706c617953747275637475726573283529 6420:S43|494e495449414c4953455f28292e696e6974476c6f62616c456e76283129646973706c6179536967283129 6421:O4|-2,1,@6422,0 6422:O2|@6424,@6423 6423:O2|@941,@6425 6424:O2|49,@698 6425:O2|@6427,@6426 6426:O2|@6429,@6428 6427:O2|51,@570 6428:O2|@6430,0 6429:O2|52,@178 6430:O2|53,@926 6431:O2|@6433,@6432 6432:O2|@6434,0 6433:S12|646973706c617946756e6374 6434:O3|@7374,69,@6435 6435:O4|@6433,-1,@6437,@6436 6436:O3|1,@6446,@584 6437:O2|-1,@6438 6438:O2|-3,@6439 6439:O1|@6440 6440:C4,184|90909090909090483b65187303ff55485050505050505048ff3048ff700848ff701048ff70184c8d442420488b582048b89b00000000000000909090ff159e0000004d8d7fc04c3b7d107303ff554049c747f8070000004d89fe4c8b6c24204d892e4c8b6424284d8966084c8b5c24304d895e104c8b5424384d8956184c8b4c24404d894e204c8b4424484d894628488b7c245049897e304c8b14244c8b4c24084d89f0488b5c2410488b4424184883c458ff2530000000|@6444,8191,@359,@6441|49,0,77 6441:C15,632|90909090909090483b65187303ff5548f6c3017503ff55704883fb017f1048b8d85deeacaa2a0000498b5018ff22505349504951495248b8103dedacaa2a0000498b5030ff124c8b742410488b442420ff154a02000049ff76184889c348b8801cfcacaa2a000090ff153a02000048bb5056edacaa2a0000ff1532020000488b14249090ff124c8b6c241848b8103dedacaa2a0000498b5500909090ff12488b44242890ff150e0200009090ff150e02000048bbb01e60000000000048bab0186000000000009090ff124883f80175504c8b642418488b4424289090ff15e60100009090ff15e601000049ff74241848bbb821f0acaa2a0000909090ff15d6010000488b14249090ff124c8b5c242048b8e009fcacaa2a0000498b13ff12eb0150488b4424309090ff15b20100004883f801755048b815000000000000009090ff15a20100004d8d7fd84c3b7d107303ff554049c747f8040000004d89fb49c743180100000049c743100100000049bab01e6000000000004d8953084989034d89dceb044c8b60104c8b5c242841f6c3017503ff55704d89da4983ea0270f448ff7424104d89d14c8b5424204d89c849b901000000000000004c89c74c8b4424284889fb4c89e048bae0fbfbacaa2a0000909090ff1516010000488b74242048b8981cfcacaa2a0000488b5618909090ff12488b5c242048b8e009fcacaa2a0000488b13ff12488b44243090ff15e6000000488b542428f6c2017503ff55704889d14883e90270f448ff7424104c8b54242049b903000000000000004c8b4424284889cb48bae0fbfbacaa2a00009090ff15aa000000488b4424204c8b701048b801000000000000004c89f24883c438ff22909090909090|@6445,8191,@5300,@303,@303,@2640,@2259,@2640,@2259,@303,@2640,@1852,@6394,@2638,@6394|32,0,@1319 56,0,@268 95,0,@6442 112,0,@344 141,0,@268 180,0,I48 190,0,I24 241,0,@1979 273,0,@6405 310,0,10 368,0,I48 433,0,0 457,0,@6389 481,0,@6443 505,0,@6405 564,0,1 582,0,@6389 609,0,0 6442:S8|66756e63746f7220 6443:S3|29203a 6444:S45|494e495449414c4953455f28292e696e6974476c6f62616c456e76283129646973706c617946756e6374283129 6445:S30|56414c55455f4f505328292e646973706c617946756e63746f7273283529 6446:O4|-2,1,@6447,0 6447:O2|@6448,@6423 6448:O2|49,@746 6449:O2|@6451,@6450 6450:O2|@6452,0 6451:S14|7072696e74537472696e67546167 6452:O3|@7374,69,@6453 6453:O4|@6451,-1,@6454,@6313 6454:O2|-1,@6455 6455:O2|-3,@5407 6456:O2|@6458,@6457 6457:O2|@6459,0 6458:S11|6465627567676572546167 6459:O3|@7374,69,@6460 6460:O4|@6458,-1,@6462,@6461 6461:O4|-3,@6467,@6318,@6316 6462:O2|-1,@6463 6463:O2|-3,@6464 6464:O3|@5759,@6465,@5761 6465:O2|@6466,@7486 6466:C2,48|4989c64d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c89701048c740088b0000004c8b72084c8930c390|@966,4101| 6467:O2|@6468,0 6468:O3|1,@6469,@584 6469:O4|-2,1,@6470,0 6470:O2|@933,@6471 6471:O2|@713,@6472 6472:O2|@6370,@6473 6473:O2|@6475,@6474 6474:O2|@6477,@6476 6475:O2|52,@512 6476:O2|@6478,0 6477:O2|53,@512 6478:O2|54,@570 6479:O2|@6481,@6480 6480:O2|@6482,0 6481:S19|636f64657472656541667465724f7074546167 6482:O3|@7374,69,@6483 6483:O4|@6481,-1,@6484,@6338 6484:O2|-1,@6485 6485:O2|-3,@3248 6486:O2|@6488,@6487 6487:O2|@6489,0 6488:S16|7472616365436f6d70696c6572546167 6489:O3|@7374,69,@6490 6490:O4|@6488,-1,@6491,@6338 6491:O2|-1,@6492 6492:O2|-3,@962 6493:O2|@6495,@6494 6494:O2|@6496,0 6495:S14|70737461636b5472616365546167 6496:O3|@7374,69,@6497 6497:O4|@6495,-1,@6498,@6338 6498:O2|-1,@6499 6499:O2|-3,@4301 6500:O2|@6502,@6501 6501:O2|@6503,0 6502:S11|676c6f62616c5370616365 6503:O3|@7374,69,@6504 6504:O4|@6502,-1,@6505,@570 6505:O2|-1,@6506 6506:O2|-3,@6507 6507:O18|@6509,@6526,@6531,@6536,@6541,@6546,@6551,@6554,@6557,@6562,@6565,@6570,@6573,@6576,@6579,@6582,@6585,@6508 6508:O2|@6588,@162 6509:O2|@6510,@162 6510:C3,80|90909090909090483b65187303ff5548488b42084d8d7fe84c3b7d107303ff554049c747f8020000004d89fe49bd8825fcacaa2a00004d892e4c8b68084d896e08488b184c89f0ff252b000000909090|@6524,8191,@6522|46,0,@6511 6511:C3,56|90909090909090483b65187303ff554848bbb012f1acaa2a0000488b42089090ff153a00000048ba0026fcacaa2a0000ff22909090909090|@6520,8191,@6514|18,0,@2355 40,0,@6512 6512:O1|@6513 6513:C2,136|90909090909090483b65187303ff55484c8b70104983fe01745f504c8b680848b801000000000000004c89eaff124c8b24245048b80100000000000000498b1424909090ff12909090e8b9ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fb498943084c8b14244d89134c89d84883c410c348b80100000000000000c390909090|@5460,8191|33,0,0 53,0,0 123,0,0 6514:C3,208|90909090909090483b65187303ff55484d8d7fe84c3b7d107303ff554049c747f8020000004d89fe49bde027fcacaa2a00004d892e49895e08534956ff15b60000004c8b60104983fc0174654c8b5c24085049ff334c8b500848b801000000000000004c89d29090ff12488b4008488b14249090ff124883f8017410488b442408488b5424104883c420ff224c8b4c240848b80100000000000000498b119090ff124883c410483b65187303ff5548eb91e90f00000048b801000000000000004883c420c3488b14244883c410ff2290|@6521,8191,@2297|42,0,@6515 91,0,0 147,0,0 184,0,0 6515:C2,312|90909090909090483b65187303ff55485250488b50104883fa0174654c8b7424084d8b6e085049ff75004c8b600848b801000000000000004c89e290ff12488b4008488b14249090ff124883f801740c48b90300000000000000eb404c8b5c240848b80100000000000000498b139090ff124883c410483b65187303ff5548eb91e90a00000048b9010000000000000048b901000000000000005050488b4424184d8d7fd84c3b7d107303ff554049c747f8040000004d89fe49bd5029fcacaa2a00004d892e4c8b6424104d8966184c8b58084d895e10498946084d8d7fe04c3b7d107303ff554049c747f8030000004d89fa49b9902afcacaa2a00004d890a4d8962104d895a084d8d7fe04c3b7d107303ff554049c747f8030000004d89f8498948104d8950084d89304c89c04883c420c39090909090|@6519,8191|48,0,0 82,0,1 99,0,0 136,0,0 146,0,0 187,0,@6516 245,0,@6518 6516:C2,200|90909090909090483b65187303ff5548488b4218524c8b3048b801000000000000004c89f2909090ff124c8b68104983fd01746d4c8b24244d8b5c24105049ff334c8b500848b801000000000000004c89d29090ff12488b4008488b14249090ff124883f80174144c8b4c2410488b442408498b51084883c418ff224c8b4c240848b80100000000000000498b119090ff124883c410483b65187303ff5548eb05e911000000eb8248b801000000000000004883c418c34c8b2424498b5424084883c408ff229090|@6517,8191|26,0,0 71,0,0 131,0,0 170,0,0 6517:S48|556e6976657273616c5461626c652e756e69764f76657253706563696669632832296d616b6549746572283129283129 6518:C2,112|90909090909090483b65187303ff5548488b4210524c8b700848b801000000000000004c89f29090ff124c8b2c244d8b650848ff30488b4008498b5424109090ff124989c34d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8958084c8b14244c89104883c410c3909090|@6517,8191|27,0,0 6519:S45|556e6976657273616c5461626c652e756e69764f76657253706563696669632832296d616b6549746572283129 6520:S22|4d414b455f28292e6462456e76416c6c283329283129 6521:S34|556e6976657273616c5461626c652e756e69764f7665725370656369666963283229 6522:C6,488|90909090909090483b65187303ff55484989c448b80100000000000000909090ff15ea0100004954535048b8182efcacaa2a0000ff15de01000049bb01000000000000004c8b5424084d8b0a4983f903750c49b80100000000000000eb3f4981fb419c0000750c49b80100000000000000eb2a41f6c3017503ff55704d89d84983c00270f44d89c3483b65187303ff5548ebb149b801000000000000004c89d048ba70246000000000009090ff124883f801750c49b80100000000000000eb324c89d348b8030000000000000048baf02460000000000090ff12483b65187303ff5548e952ffffff49b8010000000000000048ff750848bf022dfcacaa2a0000576a014889650848b80100000000000000488b5424289090ff124889c648ff742410488f4508eb6890904889c1488b44240848ba3024600000000000ff124883f8037502eb2a488b44240848c70003000000514889c348b8050000000000000048baf0246000000000009090ff12eb0151488b4424089090ff15a2000000488b042490ff555848be0100000000000000488b44242048ba302460000000000090ff124883f8037502eb26488b5c242048c703030000005648b8050000000000000048baf02460000000000090ff12eb0156488b4424209090ff154a000000488b04244883c438c390|@6525,8191,@59,@57,@57,@57|21,0,0 44,0,@6523 60,0,0 84,0,0 105,0,0 149,0,0 162,0,I71 182,0,0 197,0,1 207,0,I73 234,0,0 248,0,$6522+298 265,0,0 308,0,I70 344,0,2 354,0,I73 392,0,0 407,0,I70 441,0,2 451,0,I73 6523:O2|@3155,0 6524:S25|4d414b455f28292e6462456e76416c6c283129283129283129 6525:S18|4d414b455f28292e70726f74656374283229 6526:O2|@6527,@162 6527:C3,80|90909090909090483b65187303ff5548488b42084d8d7fe84c3b7d107303ff554049c747f8020000004d89fe49bd302ffcacaa2a00004d892e4c8b68084d896e08488b184c89f0ff252b000000909090|@6524,8191,@6522|46,0,@6528 6528:C3,56|90909090909090483b65187303ff554848bb301ef1acaa2a0000488b42089090ff153a00000048baa82ffcacaa2a0000ff22909090909090|@6520,8191,@6514|18,0,@2381 40,0,@6529 6529:O1|@6530 6530:C2,136|90909090909090483b65187303ff55484c8b70104983fe01745f504c8b680848b801000000000000004c89eaff124c8b24245048b80100000000000000498b1424909090ff12909090e8b9ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fb498943084c8b14244d89134c89d84883c410c348b80100000000000000c390909090|@5460,8191|33,0,0 53,0,0 123,0,0 6531:O2|@6532,@162 6532:C3,80|90909090909090483b65187303ff5548488b42084d8d7fe84c3b7d107303ff554049c747f8020000004d89fe49bd2031fcacaa2a00004d892e4c8b68084d896e08488b184c89f0ff252b000000909090|@6524,8191,@6522|46,0,@6533 6533:C3,56|90909090909090483b65187303ff554848bbf0b4f0acaa2a0000488b42089090ff153a00000048ba9831fcacaa2a0000ff22909090909090|@6520,8191,@6514|18,0,@2195 40,0,@6534 6534:O1|@6535 6535:C2,136|90909090909090483b65187303ff55484c8b70104983fe01745f504c8b680848b801000000000000004c89eaff124c8b24245048b80100000000000000498b1424909090ff12909090e8b9ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fb498943084c8b14244d89134c89d84883c410c348b80100000000000000c390909090|@5460,8191|33,0,0 53,0,0 123,0,0 6536:O2|@6537,@162 6537:C3,80|90909090909090483b65187303ff5548488b42084d8d7fe84c3b7d107303ff554049c747f8020000004d89fe49bd1033fcacaa2a00004d892e4c8b68084d896e08488b184c89f0ff252b000000909090|@6524,8191,@6522|46,0,@6538 6538:C3,56|90909090909090483b65187303ff554848bbf8a6f0acaa2a0000488b42089090ff153a00000048ba8833fcacaa2a0000ff22909090909090|@6520,8191,@6514|18,0,@2164 40,0,@6539 6539:O1|@6540 6540:C2,136|90909090909090483b65187303ff55484c8b70104983fe01745f504c8b680848b801000000000000004c89eaff124c8b24245048b80100000000000000498b1424909090ff12909090e8b9ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fb498943084c8b14244d89134c89d84883c410c348b80100000000000000c390909090|@5460,8191|33,0,0 53,0,0 123,0,0 6541:O2|@6542,@162 6542:C3,80|90909090909090483b65187303ff5548488b42084d8d7fe84c3b7d107303ff554049c747f8020000004d89fe49bd0035fcacaa2a00004d892e4c8b68084d896e08488b184c89f0ff252b000000909090|@6524,8191,@6522|46,0,@6543 6543:C3,56|90909090909090483b65187303ff554848bb881cf1acaa2a0000488b42089090ff153a00000048ba7835fcacaa2a0000ff22909090909090|@6520,8191,@6514|18,0,@2374 40,0,@6544 6544:O1|@6545 6545:C2,136|90909090909090483b65187303ff55484c8b70104983fe01745f504c8b680848b801000000000000004c89eaff124c8b24245048b80100000000000000498b1424909090ff12909090e8b9ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fb498943084c8b14244d89134c89d84883c410c348b80100000000000000c390909090|@5460,8191|33,0,0 53,0,0 123,0,0 6546:O2|@6547,@162 6547:C3,96|90909090909090483b65187303ff55484c8b72084d8d7fd84c3b7d107303ff554049c747f8040000004d89fd49bc0037fcacaa2a00004d8965004d8b66084d8965184c8b184d895d104c8b50084d895508498b1e4c89e8ff252b000000909090|@6550,8191,@6522|46,0,@6548 6548:C3,48|90909090909090483b65187303ff55484c8b4a084c8b421048bbb012f1acaa2a0000488b4218ff252c00000090909090|@6549,8191,@2171|26,0,@2355 6549:S24|4d414b455f28292e6462456e76456e746572283429283129 6550:S27|4d414b455f28292e6462456e76456e746572283129283129283129 6551:O2|@6552,@162 6552:C3,96|90909090909090483b65187303ff55484c8b72084d8d7fd84c3b7d107303ff554049c747f8040000004d89fd49bc8038fcacaa2a00004d8965004d8b66084d8965184c8b184d895d104c8b50084d895508498b1e4c89e8ff252b000000909090|@6550,8191,@6522|46,0,@6553 6553:C3,48|90909090909090483b65187303ff55484c8b4a084c8b421048bb301ef1acaa2a0000488b4218ff252c00000090909090|@6549,8191,@2171|26,0,@2381 6554:O2|@6555,@162 6555:C3,96|90909090909090483b65187303ff55484c8b72084d8d7fd84c3b7d107303ff554049c747f8040000004d89fd49bca839fcacaa2a00004d8965004d8b66084d8965184c8b184d895d104c8b50084d895508498b1e4c89e8ff252b000000909090|@6550,8191,@6522|46,0,@6556 6556:C3,48|90909090909090483b65187303ff55484c8b4a084c8b421048bbf0b4f0acaa2a0000488b4218ff252c00000090909090|@6549,8191,@2171|26,0,@2195 6557:O2|@6558,@162 6558:C3,80|90909090909090483b65187303ff5548488b42084d8d7fe84c3b7d107303ff554049c747f8020000004d89fe49bdc03afcacaa2a00004d892e4c8b68084d896e08488b184c89f0ff252b000000909090|@6524,8191,@6522|46,0,@6559 6559:C3,56|90909090909090483b65187303ff554848bbd8b2f0acaa2a0000488b42089090ff153a00000048ba383bfcacaa2a0000ff22909090909090|@6520,8191,@6514|18,0,@2187 40,0,@6560 6560:O1|@6561 6561:C2,136|90909090909090483b65187303ff55484c8b70104983fe01745f504c8b680848b801000000000000004c89eaff124c8b24245048b80100000000000000498b1424909090ff12909090e8b9ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fb498943084c8b14244d89134c89d84883c410c348b80100000000000000c390909090|@5460,8191|33,0,0 53,0,0 123,0,0 6562:O2|@6563,@162 6563:C3,96|90909090909090483b65187303ff55484c8b72084d8d7fd84c3b7d107303ff554049c747f8040000004d89fd49bcc03cfcacaa2a00004d8965004d8b66084d8965184c8b184d895d104c8b50084d895508498b1e4c89e8ff252b000000909090|@6550,8191,@6522|46,0,@6564 6564:C3,48|90909090909090483b65187303ff55484c8b4a084c8b421048bbf8a6f0acaa2a0000488b4218ff252c00000090909090|@6549,8191,@2171|26,0,@2164 6565:O2|@6566,@162 6566:C3,88|90909090909090483b65187303ff55484c8b72084d8d7fe04c3b7d107303ff554049c747f8030000004d89fd49bce03dfcacaa2a00004d8965004d8b66084d89651049894508498b1e4c89e8ff252e000000909090909090|@6569,8191,@6522|46,0,@6567 6567:C3,40|90909090909090483b65187303ff55484c8b420848bbb012f1acaa2a0000488b4210ff2528000000|@6568,8191,@2358|22,0,@2355 6568:S25|4d414b455f28292e6462456e764c6f6f6b7570283329283129 6569:S28|4d414b455f28292e6462456e764c6f6f6b7570283129283129283129 6570:O2|@6571,@162 6571:C3,88|90909090909090483b65187303ff55484c8b72084d8d7fe04c3b7d107303ff554049c747f8030000004d89fd49bc583ffcacaa2a00004d8965004d8b66084d89651049894508498b1e4c89e8ff252e000000909090909090|@6569,8191,@6522|46,0,@6572 6572:C3,40|90909090909090483b65187303ff55484c8b420848bb301ef1acaa2a0000488b4210ff2528000000|@6568,8191,@2358|22,0,@2381 6573:O2|@6574,@162 6574:C3,88|90909090909090483b65187303ff55484c8b72084d8d7fe04c3b7d107303ff554049c747f8030000004d89fd49bc7040fcacaa2a00004d8965004d8b66084d89651049894508498b1e4c89e8ff252e000000909090909090|@6569,8191,@6522|46,0,@6575 6575:C3,40|90909090909090483b65187303ff55484c8b420848bbf0b4f0acaa2a0000488b4210ff2528000000|@6568,8191,@2358|22,0,@2195 6576:O2|@6577,@162 6577:C3,96|90909090909090483b65187303ff55484c8b72084d8d7fd84c3b7d107303ff554049c747f8040000004d89fd49bc9041fcacaa2a00004d8965004d8b66084d8965184c8b184d895d104c8b50084d895508498b1e4c89e8ff252b000000909090|@6550,8191,@6522|46,0,@6578 6578:C3,48|90909090909090483b65187303ff55484c8b4a084c8b421048bb881cf1acaa2a0000488b4218ff252c00000090909090|@6549,8191,@2171|26,0,@2374 6579:O2|@6580,@162 6580:C3,88|90909090909090483b65187303ff55484c8b72084d8d7fe04c3b7d107303ff554049c747f8030000004d89fd49bcb042fcacaa2a00004d8965004d8b66084d89651049894508498b1e4c89e8ff252e000000909090909090|@6569,8191,@6522|46,0,@6581 6581:C3,40|90909090909090483b65187303ff55484c8b420848bbf8a6f0acaa2a0000488b4210ff2528000000|@6568,8191,@2358|22,0,@2164 6582:O2|@6583,@162 6583:C3,96|90909090909090483b65187303ff55484c8b72084d8d7fd84c3b7d107303ff554049c747f8040000004d89fd49bcd043fcacaa2a00004d8965004d8b66084d8965184c8b184d895d104c8b50084d895508498b1e4c89e8ff252b000000909090|@6550,8191,@6522|46,0,@6584 6584:C3,48|90909090909090483b65187303ff55484c8b4a084c8b421048bbd8b2f0acaa2a0000488b4218ff252c00000090909090|@6549,8191,@2171|26,0,@2187 6585:O2|@6586,@162 6586:C3,88|90909090909090483b65187303ff55484c8b72084d8d7fe04c3b7d107303ff554049c747f8030000004d89fd49bcf044fcacaa2a00004d8965004d8b66084d89651049894508498b1e4c89e8ff252e000000909090909090|@6569,8191,@6522|46,0,@6587 6587:C3,40|90909090909090483b65187303ff55484c8b420848bb881cf1acaa2a0000488b4210ff2528000000|@6568,8191,@2358|22,0,@2374 6588:C3,88|90909090909090483b65187303ff55484c8b72084d8d7fe04c3b7d107303ff554049c747f8030000004d89fd49bcf045fcacaa2a00004d8965004d8b66084d89651049894508498b1e4c89e8ff252e000000909090909090|@6569,8191,@6522|46,0,@6589 6589:C3,40|90909090909090483b65187303ff55484c8b420848bbd8b2f0acaa2a0000488b4210ff2528000000|@6568,8191,@2358|22,0,@2187 6590:O2|@6592,@6591 6591:O2|@6593,0 6592:S11|646973706c617954797065 6593:O3|@7374,69,@6594 6594:O4|@6592,-1,@6596,@6595 6595:O3|1,@6601,@584 6596:O2|-1,@6597 6597:O2|-3,@6598 6598:O1|@6599 6599:C4,176|90909090909090483b65187303ff55485050505050505048ff3048ff700848ff70104c8d442418488b581848b89b00000000000000909090ff159a0000004d8d7fc04c3b7d107303ff554049c747f8070000004d89fe4c8b6c24184d892e4c8b6424204d8966084c8b5c24284d895e104c8b5424304d8956184c8b4c24384d894e204c8b4424404d894628488b7c244849897e304c8b0c244d89f0488b5c2408488b4424104883c450ff253100000090|@6600,8191,@359,@6408|45,0,77 6600:S44|494e495449414c4953455f28292e696e6974476c6f62616c456e76283129646973706c617954797065283129 6601:O4|-2,1,@6602,0 6602:O2|@6604,@6603 6603:O2|@941,@6605 6604:O2|49,@730 6605:O2|@6607,@6606 6606:O2|@6608,0 6607:O2|51,@178 6608:O2|52,@926 6609:O2|@6611,@6610 6610:O2|@6612,0 6611:S3|757365 6612:O3|@7374,69,@6613 6613:O4|@6611,-1,@6614,@926 6614:O2|-1,@6615 6615:O2|-3,@6616 6616:O3|@6618,@162,@6617 6617:O18|@6690,@6695,@6700,@6705,@6710,@6715,@6718,@6721,@6724,@6729,@6732,@6735,@6738,@6741,@6744,@6747,@6750,@6689 6618:C21,1768|90909090909090483b65187303ff55484989d64989c548bbb01e6000000000004c89e848bab018600000000000909090ff124883f801740c49bc8852fcacaa2a0000eb13495649554c89e890ff15be0600004989c4eb04495649554d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fb49c703030000004d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fa49c702010000004d8d7fd84c3b7d107303ff554049c747f8040000004d89f949b8a052fcacaa2a00004d89014d8961184d8951104d8959084d8d7fe84c3b7d107303ff554049c747f8020000004c89ff48be1078fcacaa2a0000488937488b1c2448895f0849544953495249515748ff750848baaa50fcacaa2a0000526a0148896508488b4c2428488b014883f801756e4c8b7424484d8b6e1048b8b87afcacaa2a000048ba80e1edacaa2a00009090ff15c60500004989c44d8d7fe84c3b7d107303ff554049c747f8020000004c89f849bb887bfcacaa2a00004c89184c8b5424304c89500848bab8efedacaa2a0000909090ff158a0500004989c1eb05e92f0400004d8d7fe84c3b7d107303ff554049c747f8020000004c89f849b8087cfcacaa2a00004c8900488b7c24184889780848ba10eeedacaa2a0000ff154a0500004889c648b8650000000000000048ba5075f3acaa2a0000909090ff15320500004d8d7fe84c3b7d107303ff554049c747f8020000004c89fb48c74308010000004889034d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48895a084889324d8d7fe84c3b7d107303ff554049c747f8020000004c89f9488951084c89094d8d7fe84c3b7d107303ff554049c747f8020000004c89f8488948084c89204989c0488b5c24204c89e848ba78d0edacaa2a000090ff159e0400004989c648b801000000000000004c89f29090ff1248ff700848ff701048ff701848ff702048ff70284c8b284983fd017502eb6d4d8b65004c8b5c24704d8b53084d8d7fd84c3b7d107303ff554049c747f8040000004d89f949b8a07cfcacaa2a00004d8901498b7a0849897918498b342449897110498b5c24084989590849ff7508498b1a4c89c89090ff15160400004c8b2c244883c408483b6518730aeb05e905000000ff5548eb814c8b6424184983fc017502eb6d4d8b1c244c8b5424704d8b4a084d8d7fd84c3b7d107303ff554049c747f8040000004d89f848bf107dfcacaa2a0000498938498b710849897018498b1b49895810498b53084989500849ff742408498b194c89c0909090ff159a0300004c8b24244883c408483b6518730aeb05e905000000ff5548eb814c8b1c244983fb017502eb6d4d8b134c8b4c24704d8b41084d8d7fd84c3b7d107303ff554049c747f8040000004c89ff48be807dfcacaa2a0000488937498b580848895f18498b1248895710498b4a0848894f0849ff7308498b184889f89090ff15220300004c8b1c244883c408483b65187303ff5548eb05e902000000eb844c8b5424084983fa017502eb6c4d8b0a4c8b442470498b78084d8d7fd84c3b7d107303ff554049c747f8040000004c89fe48bbf07dfcacaa2a000048891e488b570848895618498b0948894e10498b41084889460849ff7208488b1f4889f090ff15aa0200004c8b14244883c408483b65187303ff5548eb8c4c8b4c24104983f9017502eb6f4d8b01488b7c2470488b77084d8d7fd84c3b7d107303ff554049c747f8040000004c89fb48ba607efcacaa2a0000488913488b4e0848894b18498b00488943104d8b70084c89730849ff71084989dd488b1e4c89e890ff15360200004c8b0c244883c408483b65187303ff5548eb05e902000000eb824c8b4424204983f8017502eb6c498b38488b742470488b5e084d8d7fd84c3b7d107303ff554049c747f8040000004c89fa48b9d07efcacaa2a000048890a488b4308488942184c8b374c8972104c8b6f084c896a0849ff7008488b1b4889d090ff15be0100004c8b04244883c408483b65187303ff5548eb8c4883c428483b65187303ff5548e950fbffff48ff742410488f4508eb6e4c8b304981fecf00000075585048ff701048bb407ffcacaa2a0000488b4424309090ff156e0100004d8d7fe04c3b7d107303ff554049c747f8030000004d89fd4c8b24244d89651049bba051edacaa2a00004d895d0849c74500cf0000004c89e8ff55584c8b6808504c89ebeb05e98100000048b8d0e8edacaa2a000090ff151a01000048bb0881fcacaa2a0000ff151201000049bc08e46cadaa2a00004d8b1c244889c34c89d89090ff15fe00000049ba08e46cadaa2a00004d8b0a4d8b412048bb00e6ecacaa2a00004c89c8ff15e200000048bb407ffcacaa2a0000488b442428909090ff15d2000000488b042490ff555848bb407ffcacaa2a0000488b4424384883c450ff25b900000090|@6685,8191,@6683,@1037,@1076,@1069,@3260,@961,@6522,@6522,@6522,@6522,@6522,@6522,@6653,@303,@303,@231,@53,@6653,@6653|24,0,I48 37,0,I24 58,0,@6619 189,0,@6620 238,0,@6656 272,0,$6618+1498 312,0,@6663 322,0,@1036 367,0,@6666 389,0,@1075 442,0,@6668 464,0,@1068 483,0,50 493,0,@3259 651,0,@957 671,0,0 756,0,@6670 888,0,@6671 1018,0,@6672 1147,0,@6673 1268,0,@6674 1399,0,@6675 1517,0,@6676 1572,0,@333 1615,0,@1059 1632,0,@6682 1648,0,@7378 1676,0,@7378 1693,0,@82 1712,0,@6676 1744,0,@6676 6619:O2|@7358,@7543 6620:C3,136|90909090909090483b65187303ff55485248bb6853fcacaa2a0000488b421890ff158a00000048f7c00100000075354c8b304983fe1575274c8b2c244d8b65084d8b1c2441f6c3017503ff55704d89da4983c20270f44d8914244883c408c34883c408c34c8b34244d8b6e1049c745000300000048b801000000000000004883c408c39090909090|@6654,8191,@6653|19,0,@6621 118,0,0 6621:O2|@6623,@6622 6622:O2|@6631,@6630 6623:C5,672|90909090909090483b65187303ff55484c8b30498b064883f8ff756d4d8b6e084d8b650050504d8d7fe84c3b7d107303ff554049c747f8020000004d89fb49ba8856fcacaa2a00004d89134c8b52084d8953085249554d8b4424184c89db4c89e0909090ff155e02000048ff7008488b00909090ff15560200004c8d4c24184989014c8d442418eb05e9c6000000488b3c2449897808488b742408488b5c242048891e488b54241848f7c201000000740c48b90300000000000000eb08488b0a488d4c09014883f901750f48b801000000000000004883c428c348f7c201000000740c48b80300000000000000eb08488b02488d440001a8017503ff55704883f8017f1848b860d6ecacaa2a000090ff555849be010000000000000048f7c20100000074054989d6eb0a4c0fb672084f8d7436014d8d7ff04c3b7d107303ff554049c747f8010000004c89f84c89304883c428c34d8b6e084d8b65204d8b1c244983fb01751349c70424ffffffff48b80100000000000000c34d8b55004d8b0a4d8b042449514d23c841f6c10149597503ff55704d3bc87c27495249ff751849544d89e24c8b4c24084d8b4510498b5d08488b4424109090ff151a010000eb08495249ff75184954488b3c24488b374883fe01751648c707ffffffff48b801000000000000004883c418c3488b5c2410488b13488b4c240848f7c2010000007413f6c2017503ff55704883fa017c054889d0eb1848b860d6ecacaa2a000090ff555848b801000000000000004c8b31493bc6721848b860d6ecacaa2a000090ff555849bd01000000000000004c8b69084989c449d1ec4f0fb66425004f8d6424014d89e54c8b1b41f6c3017503ff55704d89da4983c20270f44c89134d8d7ff04c3b7d107303ff554049c747f8010000004c89f84c89284883c418c390909090|@6628,8191,@53,@331,@6626|64,0,@6624 179,0,1 205,0,0 229,0,1 262,0,@49 276,0,0 368,0,0 478,0,0 534,0,@49 548,0,0 566,0,@49 580,0,0 6624:C2,88|90909090909090483b65187303ff554850504989e048bb0300000000000000488b520890ff124d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8b34244c89304c8b6c24084c8968084883c410c39090909090|@6625,8191|23,0,1 6625:S32|426173696353747265616d494f28292e696e7075744e4c697374283129283129 6626:C2,360|90909090909090483b65187303ff554848c7000100000049c702ffffffff5348ff750849beee57fcacaa2a000049566a01488965084d8d7fe04c3b7d107303ff554049c747f8030000004d89fd4d8b214d89651049c74508010000004d8b59084d895d0049524c89c74d89e84889fb48b8110000000000000048baf02160000000000090ff12488b342448890648b8010000000000000048ff742418488f45084883c428c390488b1048b948c06cadaa2a0000483bd1750f4889c3eb6e48bb01000000000000004883fa03751648bb58d4ecacaa2a0000eb5748bb01000000000000004d8d7fe04c3b7d107303ff554049c747f8030000004d89fe49bde858fcacaa2a00004d896e10498946084c8b24244d89264d8d7fe04c3b7d107303ff554049c747f803000000eb0ae927000000e9220000004c89fb4c89731049bb38d2ecacaa2a00004c895b0849ba48c06cadaa2a00004c89134889d890ff555848b80100000000000000|@6629,8191|37,0,$6626+166 113,0,8 123,0,I61 143,0,0 171,0,@7357 191,0,0 207,0,@45 219,0,0 253,0,@6627 318,0,@43 332,0,@7357 352,0,0 6627:S17|54657874494f2e66696c6c427566666572 6628:S17|54657874494f2e696e7075743127283129 6629:S20|54657874494f2e66696c6c427566666572283529 6630:O2|@6634,I48 6631:C11,1096|90909090909090483b65187303ff55484c8b70084d8b2e4983fdff751649c700010000004989400848b80100000000000000c349f7c501000000755a4d8d7fd84c3b7d107303ff554049c747f8040000004d89fc4c8b58184d895c24184c8b50104d895424104d8b4d084d894c2408488b3849893c24498b75184883fe01751b49c700010000004d89600848b80100000000000000c3e93703000053480bdef6c3015b7503ff5570483bf375704d8d7ff04c3b7d107303ff554049c747f8010000004c89fb48893349504989d8498b5d10498b4500909090ff15920300005050504c89e14889e390ff158a030000514c8b442418488b5c2410488b4424089090ff157a0300004d8d7fe84c3b7d107303ff554049c747f802000000eb05e92e0000004d89fe49c74608010000004989064c8b6c24204d8975004c8b24244d89650848b801000000000000004883c428c3534823def6c3015b7503ff5570483bf37e6e4d8d7ff04c3b7d107303ff554049c747f8010000004c89fa48891a4989dc495049ff750049ff75104989d0488b1c24488b4424089090ff15ea0200005050504d89e04889e390ff15e2020000495057495249534951564c8b442440488b5c2438488b44243090ff15ca020000eb05e904010000488b7c2448488b7424284889fb4823def6c3017503ff5570488d5fff4803de70f4488b14244889d14823cef6c1017503ff55704889d1482bce488d490170f14d8d7fd84c3b7d107303ff554049c747f8040000004d89fe49894e1849895e104c8b6c24084d896e084c8b6424504d89264d8d7fe84c3b7d107303ff554049c747f8020000004d89fb49c74308010000004989034d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fa4d89324d8d7fd84c3b7d107303ff554049c747f8040000004d89f94c8b4424104d894118488b7c2418498979104d895108488b742420498931488b5c24584c891b4c894b0848b801000000000000004883c460c34d8d7fd84c3b7d107303ff554049c747f8040000004c89f94c8959184c8951104c8949084889394989dc4c23e641f6c4017503ff55704989dc4c2be64d8d64240170f0505052495049ff750049ff7510564c8d4424284c89e34889c8e8cdfcffff4d8d7ff04c3b7d107303ff554049c747f8010000004d89fb4c8b14244d89134d89d8488b5c2408488b4424109090ff15320100005050504889e3ff152e0100004c8b442410488b5c2408488b0424ff15220100004d8d7fe84c3b7d107303ff554049c747f8020000004d89f94c8b4424404d894108498901488b7c24304c890f488b7424484889770848b801000000000000004883c450c350505049504c8d54240849b9405efcacaa2a00004989d848bb0300000000000000488b520890ff124d8d7fe84c3b7d107303ff554049c747f8020000004d89fc49c7442408010000004c8b5c24084d891c244c8b14244d89224c8b4c24104d894a0848b801000000000000004883c420c39090909090|@6633,8191,@243,@71,@1442,@243,@71,@1442,@243,@71,@1442|42,0,0 141,0,0 323,0,0 716,0,0 965,0,0 990,0,@6632 1003,0,1 1078,0,0 6632:S6|696e7075744e 6633:S29|426173696353747265616d494f28292e696e7075744e4c697374283329 6634:C20,2344|90909090909090483b65187303ff554850504c8b70104983fe0175694883fb0174685250495049524d89c8488b5c2408488b0090ff15160900009090ff151609000048f7c001000000740c49bd0300000000000000eb084c8b284f8d6c2d014c8b64240849544d0be541f6c401495c7503ff55704d3bec751649bb0300000000000000eb14e9c1000000e92400000049bb01000000000000004d89da4983f2024c8d4c24204989014c8d4424204d895008eb5652505049524d89c54d89c84c89eb488b00ff15960800004883f80175214c8b6424184c8d5c24204d8b5424084d89134c8d4c242049c7410801000000eb554c8b2049f7c401000000741149bb0300000000000000eb0ee95b0600004d8b1c244f8d5c1b014983fb01750c49ba0300000000000000eb0a49ba01000000000000004c8d4c24204d89214c8d4424204d895008eb6de91e0600004d8b6e104d8b65004d8b5e08498b3b4c89e64823f740f6c6017503ff55704c89e6482bf7488d760170f149504c23c641f6c00149587503ff5570493bf07c6f498b1b4d8d7ff04c3b7d107303ff554049c747f8010000004c89f94c89014989d44989c14c89c7eb05e9b10500004989c8498b069090ff15a207000049544951504952574953ff159a070000488b3424488b1e488b5424084889d94823caf6c1017503ff5570488d4bff4803caeb05e91c00000070ed48890e4c8d7424304989064c8d6c243049c7450801000000eb6d498b4d004d8b234889cf4923fc40f6c7017503ff55704889cf492bfc488d7f0170f14c89c64823f740f6c6017503ff55704c89c6482bf7488d760170f1498b0e4c8b2149544c23e641f6c401495c7503ff5570493bf47f6c498b7d00498b334989fb4c23de41f6c301750aeb05e9d9040000ff55704989fb4c2bde4d8d5b0170ea498b7e08488b374d8d7ff04c3b7d107303ff554049c747f8010000004c89ff4c891f525050495253495048ff3049ff3649ff760849554989f84889f3488b442410eb05e93402000090ff158e060000495149539090ff158a060000488b742430488b1c244889f24823d3f6c2017503ff55704889f2482bd3488d520170f1488b4c24104c8b314c8b6c24184d8975004c8b6424384983fc01743a50524c8b4c24184989d0488b5c2430488b442438909090ff15360600004d8d7ff04c3b7d107303ff554049c747f8010000004d89fb498903eb1e50524c8b4c24184989d0488b5c2430488b44243890ff15060600004989c34983fb01751c4c8d5c24704c8b5424084d89134c8d4c247049c7410801000000eb734d8b134983fa01751c4c8d4c24704c8b4424084d8901488d7c247048c7470803000000eb714c8b0c2449514d23ca41f6c10149597503ff55704d3bca7d054d89c8eb034d89d04d8d7ff04c3b7d107303ff554049c747f8010000004c89ff4c89074c89c64989f848bb0100000000000000eb05e93a030000488b442430ff1566050000495256909090ff1562050000488b5c2430eb05e917030000488b542408488913488b4c24384c8b34244c89314d8d7fe84c3b7d107303ff554049c747f8020000004d89fd49c7450801000000498945004d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8968084c8b6424184c89209090ff15fa0400004c8b5c24584983fb0174374c8b4c24084c8b44241049514d23c841f6c10149597503ff55704d3bc87d0c49ba0300000000000000eb1649ba0100000000000000eb0a49ba01000000000000004c8d8c24800000004989014c8d8424800000004d8950084883c410eb6d498b7d00498b334989fb4c23de41f6c3017503ff55704989fb4c2bde4d8d5b0170f1498b7e08488b374d8d7ff04c3b7d107303ff554049c747f8010000004c89ff4c891f525050495253495048ff3049ff760849554989f84889f3498b06909090ff153204000049514953eb05e9d8010000909090ff1526040000488b742428488b1c244889f24823d3f6c2017503ff55704889f2482bd3488d520170f1488b4c24104c8b314c8b6c24184d8975004c8b6424304983fc017456504c8b4424104889d3488b44242890ff15da0300004d8d7fe84c3b7d107303ff554049c747f8020000004d89fb498943084c8b14244d89134c89d8ff15b603000048f7c001000000741149b90300000000000000eb0de94b0000004c8b084f8d4c09014c8b44243049514d23c841f6c10149597503ff55704d3bc87d0c48bf0300000000000000eb0a48bf0100000000000000488d742460488906488d5c246048897b08eb71504c8b4424104889d3488b442428909090ff15420300004883f801751b4c8d5c24604c8b14244d89134c8d4c246049c7410801000000eb6d4c8b1849f7c301000000740c49ba0300000000000000eb084d8b134f8d5412014983fa0175224c8d4c24604c8b04244d8901488d7c2460eb05e97200000048c7470803000000eb684d8d7fe84c3b7d107303ff554049c747f8020000004d89f949c74108010000004d8919eb05e93e0000004d8d7fe84c3b7d107303ff554049c747f8020000004c89f84c8948084c8b04244c8900ff158e020000488d7c2460488907488d74246048c746080100000050504883c4404883c410488b5c242048f7c301000000740c48ba0300000000000000eb08488b13488d541201f6c2017503ff55704883fa017e6e48f7c301000000740c48b80300000000000000eb08488b03488d4400014c8b7424104d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fd49c74500010000004d8d7fd84c3b7d107303ff554049c747f8040000004d89fc4d8b5e184d895c24184d8b5610eb05e9480000004d895424104d896c24084d8b0e4d890c244d8d7fd84c3b7d107303ff554049c747f8040000004d89f84989401849c74010010000004d896808498918498b7e084c89074c89e1eb05488b4c2410488b4424284883f80174734c8b6c24184d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fc49c70424010000004d8d7fd84c3b7d107303ff554049c747f8040000004d89fb4c8b51184d8953184c8b49104d894b104d8963084c8b014d89034d8d7fd84c3b7d107303ff554049c747f804000000eb05e92a0000004c89ff48c747180100000048c74710010000004c896708498b7508488937488b510848893a4d89deeb034989ce4c8b2c2449895d004d8975084989451048b801000000000000004883c430c3|@6638,8191,@6639,@331,@6635,@67,@68,@67,@68,@6645,@6649,@67,@68,@331,@67,@68,@6639,@331,@6635,@331|77,0,1 123,0,1 145,0,0 255,0,1 287,0,1 299,0,0 1048,0,0 1242,0,1 1254,0,0 1266,0,0 1565,0,1 1616,0,1 1628,0,0 1725,0,1 1913,0,1 1956,0,1 2331,0,0 6635:C3,416|90909090909090483b65187303ff5548ff15b2010000488b506848f7c2010000007566495048ff3048ff750848b9ce68fcacaa2a0000516a01488965084889d8488b1290ff1248ff742410488f45084883c428c390904c8b2849bc48c06cadaa2a00004d3bec750f4989c6eb6e49be01000000000000004983fd03751b49be58d4ecacaa2a0000eb57e98a00000049be01000000000000004d8d7fe04c3b7d107303ff554049c747f8030000004d89fb4c8b5424084d895310498943084c8b0c244d890b4d8d7fe04c3b7d107303ff554049c747f803000000eb0ae927000000e9220000004d89fe4d895e1049b838d2ecacaa2a00004d89460848bf48c06cadaa2a000049893e4c89f090ff555848b801000000000000004d8d7fe04c3b7d107303ff554049c747f8030000004c89f949be405efcacaa2a00004c89711049bd586afcacaa2a00004c8969084c8b204c89214d8d7fe04c3b7d107303ff554049c747f8030000004d89fb49894b1049ba38d2ecacaa2a00004d89530849b948c06cadaa2a00004d890b4c89d8909090ff555848b8010000000000000090909090|@6652,8191,@6642|46,0,$6635+86 91,0,@7357 111,0,0 127,0,@45 144,0,0 238,0,@43 252,0,@7357 272,0,0 306,0,@6632 320,0,@6636 368,0,@43 382,0,@7357 404,0,0 6636:O3|@7502,@6637,0 6637:S23|4e6f6e626c6f636b696e674e6f74537570706f72746564 6638:S33|426173696353747265616d494f28292e7265616446726f6d526561646572283529 6639:C4,192|90909090909090483b65187303ff5548ff15d2000000488b504848f7c201000000751c495048ff3048ff324889d8488d54241890ff15b60000004883c418c34d8d7fe04c3b7d107303ff554049c747f8030000004c89f94c89411049bef0d1ecacaa2a00004c8971084c8b284c89294d8d7fe04c3b7d107303ff554049c747f8030000004d89fc49894c241049bb38d2ecacaa2a00004d895c240849ba48c06cadaa2a00004d8914244c89e0909090ff555848b8010000000000000090909090|@6641,8191,@6642,@6640|93,0,@41 142,0,@43 157,0,@7357 180,0,0 6640:C2,464|90909090909090483b65187303ff5548525048ff750849be1e6cfcacaa2a000049566a0148896508488b52e8ff124989c548ff742410488f4508eb7090904c8b6424084c8b1049b948c06cadaa2a00004d3bd1750f4989c3eb5749bb01000000000000004983fa03751649bb58d4ecacaa2a0000eb6f49bb01000000000000004d8d7fe04c3b7d107303ff554049c747f8030000004d89f8498b7c24f84989781049894008498b7424f0eb0ae957000000e9410000004989304d8d7fe04c3b7d107303ff554049c747f8030000004d89fb4d89431048bb38d2ecacaa2a000049895b08eb05e90d00000048ba48c06cadaa2a00004989134c89d890ff555849bd010000000000000049f7c501000000740c49bc0300000000000000eb094d8b65004f8d6424014983fc01750f48b801000000000000004883c428c34c8b5c241849544d23e341f6c401495c7503ff55704d3be37c284d8d7fe84c3b7d107303ff554049c747f8020000004c89f848c74008010000004c89284883c428c34c89d84923c4a8017503ff55704c89d8492bc4488d400170f14955488b542428e865feffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fa498942084c8b0c244d890a4c89d04883c430c3909090|@6644,8191|24,0,$6640+62 72,0,@7357 92,0,0 108,0,@45 120,0,0 215,0,@43 236,0,@7357 256,0,0 275,0,1 302,0,0 6641:S32|426173696353747265616d494f28292e72656164566563466f72636564283329 6642:C2,8|c390909090909090|@6643,1| 6643:S2|5244 6644:S41|426173696353747265616d494f28292e72656164566563466f72636564283329646f52656164283129 6645:C4,200|90909090909090483b65187303ff5548ff15da000000488b504048f7c20100000075284950495148ff305348ff3248b80100000000000000488d542428909090ff15b20000004883c428c34d8d7fe04c3b7d107303ff554049c747f8030000004c89f94c89491049bef0d1ecacaa2a00004c8971084c8b284c89294d8d7fe04c3b7d107303ff554049c747f8030000004d89fc49894c241049bb38d2ecacaa2a00004d895c240849ba48c06cadaa2a00004d8914244c89e0909090ff555848b80100000000000000|@6647,8191,@6642,@6646|48,0,0 105,0,@41 154,0,@43 169,0,@7357 192,0,0 6646:C3,432|90909090909090483b65187303ff5548525048ff750849be1e70fcacaa2a000049566a01488965084c8b62d849b801000000000000004889c3488b42e0909090ff15920100004c89e2909090ff124989c548ff742410488f4508eb6e90904c8b5c24084c8b0849b848c06cadaa2a00004d3bc8750f4989c2eb5549ba01000000000000004983f903751649ba58d4ecacaa2a0000eb6d49ba01000000000000004d8d7fe04c3b7d107303ff554049c747f8030000004c89ff498b73f04889771048894708498b5be8eb0ae959000000e94100000048891f4d8d7fe04c3b7d107303ff554049c747f8030000004d89fa49897a1048ba38d2ecacaa2a000049895208eb05e90d00000048b948c06cadaa2a000049890a4c89d0909090ff555849bd01000000000000004983fd017502eb3d4c8b5c24184d89ea4d23d341f6c2017503ff55704d8d55ff4d03d370f44c8b4c24204d8b41f849524d23d041f6c201495a7503ff55704d3bd07d02eb204c8b5c24184c89e84923c3a8017503ff5570498d45ff4903c370f44883c428c34c89e84923c3a8017503ff5570498d45ff4903c370f44c89ca4883c428e958feffff90|@6648,8191,@67|24,0,$6646+94 46,0,0 104,0,@7357 124,0,0 140,0,@45 152,0,0 245,0,@43 266,0,@7357 288,0,0 6647:S29|426173696353747265616d494f28292e66696c6c427566666572283429 6648:S38|426173696353747265616d494f28292e66696c6c427566666572283429646f52656164283129 6649:C3,464|90909090909090483b65187303ff5548ff15e20100004c8b406049f7c001000000755d495148ff3048ff750848bf9e72fcacaa2a0000576a01488965084d8d7fe04c3b7d107303ff554049c747f8030000004c89fe48895e10488b134889560848c706010000004889f0498b10909090ff1248ff742410488f45084883c428c3e9c3000000904c8b3049bd48c06cadaa2a00004d3bf5750f4889c1eb6f48b901000000000000004983fe03751648b958d4ecacaa2a0000eb5848b901000000000000004d8d7fe04c3b7d107303ff554049c747f8030000004d89fc4c8b5c24084d895c241049894424084c8b14244d8914244d8d7fe04c3b7d107303ff554049c747f8030000004c89f9eb0ae924000000e91f0000004c89611049b938d2ecacaa2a00004c89490849b848c06cadaa2a00004c89014889c8909090ff555848b801000000000000004d8d7fe04c3b7d107303ff554049c747f8030000004c89ff48be2874fcacaa2a00004889771048bb586afcacaa2a000048895f08488b104889174d8d7fe04c3b7d107303ff554049c747f8030000004c89f94889791049be38d2ecacaa2a00004c89710849bd48c06cadaa2a00004c89294889c8909090ff555848b8010000000000000090909090|@6651,8191,@6642|46,0,$6649+134 139,0,@7357 159,0,0 175,0,@45 187,0,0 284,0,@43 298,0,@7357 320,0,0 354,0,@6650 368,0,@6636 416,0,@43 430,0,@7357 452,0,0 6650:S8|63616e496e707574 6651:S31|426173696353747265616d494f28292e66696c6c4275666665724e42283429 6652:S28|426173696353747265616d494f28292e726561645665634e42283329 6653:C8,680|90909090909090483b65187303ff55484c8b204c8b580848b80100000000000000909090ff15a60200005349544953504883f801750c49ba0100000000000000eb42488b18488b134883faff751d4d8d7ff04c3b7d107303ff554049c747f8010000004d89fa49891aeb19488b4008483b65187303ff5548ebb649ba010000000000000049f7c2010000007552498b024c8b304983feff752e4c8b68084983fd03750c48b90100000000000000eb4648b828daecacaa2a0000909090ff15160200004889c1eb2e48b828daecacaa2a0000909090ff15060200004889c1eb1648b828daecacaa2a0000909090ff15f60100004889c148b90100000000000000488b4424084c8b304983fe03750c49bd0100000000000000eb3e4881f9419c0000750c49bd0100000000000000eb29f6c1017503ff55704989cd4983c50270f44c89e9483b65187303ff5548ebb249bd010000000000000048ba7024600000000000909090ff124883f801750c49bd0100000000000000eb36488b5c240848b8030000000000000048baf024600000000000909090ff12483b65187303ff5548e951ffffff49bd010000000000000048ff750849bc8276fcacaa2a000049546a0148896508488b442428488b5424309090ff124989c348ff742410488f4508eb6890904989c2488b44240848ba3024600000000000ff124883f8037502eb2a4c8b4c240849c7010300000049524c89cb48b8050000000000000048baf02460000000000090ff12eb024952488b44240890ff15ba000000488b042490ff555849bb0100000000000000488b44242048ba302460000000000090ff124883f8037502eb2a4c8b54242049c7020300000049534c89d348b8050000000000000048baf02460000000000090ff12eb024953488b44242090ff155e000000488b04244883c440c39090909090|@6655,8191,@59,@57,@57,@57,@57,@57|25,0,0 56,0,0 124,0,0 165,0,0 177,0,@54 201,0,@54 225,0,@54 247,0,0 271,0,0 292,0,0 335,0,0 345,0,I71 366,0,0 383,0,1 393,0,I73 422,0,0 436,0,$6653+482 492,0,I70 529,0,2 539,0,I73 576,0,0 591,0,I70 629,0,2 639,0,I73 6654:S37|4d414b455f28292e757365496e746f456e7628312975736528312967657443686172283129 6655:S17|54657874494f2e70726f74656374283229 6656:C6,416|90909090909090483b65187303ff55484883fb01740c49be087afcacaa2a0000eb0a49be207afcacaa2a000050495648ff720848bbffffffffffffffff4c89c0ff15820100004d8d7fe84c3b7d107303ff554049c747f8020000004d89fe49c74608010000004c8b6c24104d892e4d8d7fe84c3b7d107303ff554049c747f8020000004d89fc4d8974240849bb387afcacaa2a00004d891c244d8d7fe84c3b7d107303ff554049c747f8020000004d89fa4d8962084989024d8d7fe84c3b7d107303ff554049c747f8020000004d89f94d89510849b8507afcacaa2a00004d89014d8d7fe84c3b7d107303ff554049c747f8020000004c89ff4c894f08488b34244889374d8d7fe84c3b7d107303ff554049c747f8020000004c89fb48897b0848ba687afcacaa2a00004889134d8d7fe84c3b7d107303ff554049c747f8020000004c89f848895808488b4c2408488908909090ff157600000049be08e46cadaa2a00004d8b2e4889c34c89e8909090ff156200000049bc08e46cadaa2a00004d8b1c244d8b432048bb00e6ecacaa2a00004c89d84883c418ff254100000090|@6662,8191,@305,@331,@231,@53|24,0,@6657 36,0,@6658 53,0,-1 141,0,@6659 214,0,@6660 290,0,@6661 348,0,@7378 376,0,@7378 394,0,@82 6657:S6|4572726f722d 6658:S8|5761726e696e672d 6659:S2|2e0a 6660:S8|272c206c696e6520 6661:S5|20696e2027 6662:S39|4d414b455f28292e757365496e746f456e762831297573652831296572726f7250726f63283329 6663:O2|@6664,@7378 6664:C4,80|90909090909090483b65187303ff55484c8b72084d8b2e524889c34c89e89090ff15520000004c8b24244d8b5c24084d8b134d8b422048bb00e6ecacaa2a00004c89d04883c408ff2533000000909090|@6665,8191,@231,@53|56,0,@82 6665:S15|54657874494f2e7072696e74283129 6666:C2,16|488b42084c8b304c89f0c39090909090|@6667,4101| 6667:S35|4d414b455f28292e757365496e746f456e76283129757365283129636f64652d283129 6668:C2,40|90909090909090483b65187303ff55484c8b4010488b5808488b00488b5208ff2290909090909090|@6669,8191| 6669:S39|4d414b455f28292e757365496e746f456e762831297573652831296572726f7250726f63283129 6670:C3,48|90909090909090483b65187303ff55484c8b4a084c8b421048bbb012f1acaa2a0000488b4218ff252c00000090909090|@6549,8191,@2171|26,0,@2355 6671:C3,48|90909090909090483b65187303ff55484c8b4a084c8b421048bbf0b4f0acaa2a0000488b4218ff252c00000090909090|@6549,8191,@2171|26,0,@2195 6672:C3,48|90909090909090483b65187303ff55484c8b4a084c8b421048bbd8b2f0acaa2a0000488b4218ff252c00000090909090|@6549,8191,@2171|26,0,@2187 6673:C3,48|90909090909090483b65187303ff55484c8b4a084c8b421048bb301ef1acaa2a0000488b4218ff252c00000090909090|@6549,8191,@2171|26,0,@2381 6674:C3,48|90909090909090483b65187303ff55484c8b4a084c8b421048bb881cf1acaa2a0000488b4218ff252c00000090909090|@6549,8191,@2171|26,0,@2374 6675:C3,48|90909090909090483b65187303ff55484c8b4a084c8b421048bbf8a6f0acaa2a0000488b4218ff252c00000090909090|@6549,8191,@2171|26,0,@2164 6676:O1|@6677 6677:C3,104|90909090909090483b65187303ff55484c8b30498b064883f8ff75204d8b6e084d8b65004d8b44241848bbf87ffcacaa2a00004c89e0ff25540000004d8b6e0849b80100000000000000498b5d1048b80f0000000000000048baf021600000000000ff2290909090|@6681,8191,@53|43,0,@6678 66,0,0 80,0,7 90,0,I61 6678:O1|@6679 6679:C3,104|90909090909090483b65187303ff55484989c6498b069090ff157200000048ff7018498b5608488b024883f8ff7502eb1f48f7c001000000750f488b5008483b65187303ff5548ebdd48c702ffffffff48b80100000000000000488b14244883c408ff2290909090|@6680,8191,@6642|82,0,0 6680:S27|426173696353747265616d494f28292e636c6f7365496e27283129 6681:S18|54657874494f2e636c6f7365496e27283129 6682:S8|207261697365640a 6683:C3,688|90909090909090483b65187303ff55485048ff750849be7a81fcacaa2a000049566a01488965084989c048bb010000000000000048b8070000000000000048baf021600000000000ff124989c548ff742410488f4508eb6f90904c8b1849ba48c06cadaa2a00004d3bda750f4989c4eb5b49bc01000000000000004983fb03751649bc58d4ecacaa2a0000eb7049bc01000000000000004d8d7fe04c3b7d107303ff554049c747f8030000004d89f949b81084fcacaa2a00004d89411049894108488b3c24eb0ae95c000000e9440000004989394d8d7fe04c3b7d107303ff554049c747f8030000004d89fc4d894c241048be38d2ecacaa2a0000eb05e913000000498974240848bb48c06cadaa2a000049891c244c89e0909090ff555849bd0100000000000000495548ff750849bc9682fcacaa2a000049546a014889650849b801000000000000004c89eb48b81f0000000000000048baf021600000000000909090ff124989c348ff742410488f4508eb0f909049bb010800000000000050505048bb41000000000000004c89d8ff15420100004d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89fa49c702010000004d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404d89f949c701ffffffff4d8d7fd04c3b7d107303ff554049c747f8050000004d89f84d89482049894018488b7c241849897810488b742438498970084d89104d8d7fe84c3b7d107303ff554049c747f8020000004c89fb4c89430848c703010000004d8d7ff04c3b7d107303ff554049c747f80100000049c647ff404c89fa48891a4989d649b8030000000000000048bb910000000000000048b8030000000000000048ba7015600000000000909090ff124d8d7fe84c3b7d107303ff554049c747f8020000004d89fd498945084d8975004c89e84883c440c39090|@6687,8191,@6686|23,0,$6683+90 44,0,0 54,0,3 64,0,I61 95,0,@7357 115,0,0 131,0,@45 143,0,0 177,0,@6684 243,0,@43 265,0,@7357 288,0,0 304,0,$6683+374 322,0,0 335,0,15 345,0,I61 376,0,1024 389,0,32 603,0,1 613,0,72 623,0,1 633,0,I11 6684:S13|54657874494f2e6f70656e496e 6685:S27|4d414b455f28292e757365496e746f456e76283129757365283129 6686:C2,304|90909090909090483b65187303ff554848f7c0010000007412a8017503ff55704883f8017c054989c6eb1948b840e3ecacaa2a00009090ff555849be01000000000000004983fe01750c49bd0300000000000000eb3948b8e1ffffffffffff0f4c3bf0761748b840e3ecacaa2a0000ff555849bd01000000000000004d8d6e10498d45fe4989c549c1ed034983cd014989dc49b8010000000000000048bb83000000000000004c89e848ba701560000000000090ff12495449565049b80100000000000000488b7c2408493bf87702eb2f488b1c24488b54241048d1ea49d1e84a881403488d5412014f8d440001498d48024989c8483b65187303ff5548ebc54d8d7fe84c3b7d107303ff554049c747f8020000004c89fb488b14244889530848893b4889d84883c418c39090909090|@6688,7279|45,0,@69 60,0,0 76,0,1 88,0,576460752303423472 103,0,@69 116,0,0 148,0,0 158,0,65 171,0,I11 189,0,0 6687:S16|54657874494f2e6f70656e496e283129 6688:S18|4368617241727261792e6172726179283229 6689:O2|@6753,@162 6690:O2|@6691,@162 6691:C3,80|90909090909090483b65187303ff5548488b42084d8d7fe84c3b7d107303ff554049c747f8020000004d89fe49bdd086fcacaa2a00004d892e4c8b68084d896e08488b184c89f0ff252b000000909090|@6524,8191,@6522|46,0,@6692 6692:C3,56|90909090909090483b65187303ff554848bbb012f1acaa2a0000488b42089090ff153a00000048ba4887fcacaa2a0000ff22909090909090|@6520,8191,@6514|18,0,@2355 40,0,@6693 6693:O1|@6694 6694:C2,136|90909090909090483b65187303ff55484c8b70104983fe01745f504c8b680848b801000000000000004c89eaff124c8b24245048b80100000000000000498b1424909090ff12909090e8b9ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fb498943084c8b14244d89134c89d84883c410c348b80100000000000000c390909090|@5460,8191|33,0,0 53,0,0 123,0,0 6695:O2|@6696,@162 6696:C3,80|90909090909090483b65187303ff5548488b42084d8d7fe84c3b7d107303ff554049c747f8020000004d89fe49bdc088fcacaa2a00004d892e4c8b68084d896e08488b184c89f0ff252b000000909090|@6524,8191,@6522|46,0,@6697 6697:C3,56|90909090909090483b65187303ff554848bb301ef1acaa2a0000488b42089090ff153a00000048ba3889fcacaa2a0000ff22909090909090|@6520,8191,@6514|18,0,@2381 40,0,@6698 6698:O1|@6699 6699:C2,136|90909090909090483b65187303ff55484c8b70104983fe01745f504c8b680848b801000000000000004c89eaff124c8b24245048b80100000000000000498b1424909090ff12909090e8b9ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fb498943084c8b14244d89134c89d84883c410c348b80100000000000000c390909090|@5460,8191|33,0,0 53,0,0 123,0,0 6700:O2|@6701,@162 6701:C3,80|90909090909090483b65187303ff5548488b42084d8d7fe84c3b7d107303ff554049c747f8020000004d89fe49bdb08afcacaa2a00004d892e4c8b68084d896e08488b184c89f0ff252b000000909090|@6524,8191,@6522|46,0,@6702 6702:C3,56|90909090909090483b65187303ff554848bbf0b4f0acaa2a0000488b42089090ff153a00000048ba288bfcacaa2a0000ff22909090909090|@6520,8191,@6514|18,0,@2195 40,0,@6703 6703:O1|@6704 6704:C2,136|90909090909090483b65187303ff55484c8b70104983fe01745f504c8b680848b801000000000000004c89eaff124c8b24245048b80100000000000000498b1424909090ff12909090e8b9ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fb498943084c8b14244d89134c89d84883c410c348b80100000000000000c390909090|@5460,8191|33,0,0 53,0,0 123,0,0 6705:O2|@6706,@162 6706:C3,80|90909090909090483b65187303ff5548488b42084d8d7fe84c3b7d107303ff554049c747f8020000004d89fe49bda08cfcacaa2a00004d892e4c8b68084d896e08488b184c89f0ff252b000000909090|@6524,8191,@6522|46,0,@6707 6707:C3,56|90909090909090483b65187303ff554848bbf8a6f0acaa2a0000488b42089090ff153a00000048ba188dfcacaa2a0000ff22909090909090|@6520,8191,@6514|18,0,@2164 40,0,@6708 6708:O1|@6709 6709:C2,136|90909090909090483b65187303ff55484c8b70104983fe01745f504c8b680848b801000000000000004c89eaff124c8b24245048b80100000000000000498b1424909090ff12909090e8b9ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fb498943084c8b14244d89134c89d84883c410c348b80100000000000000c390909090|@5460,8191|33,0,0 53,0,0 123,0,0 6710:O2|@6711,@162 6711:C3,80|90909090909090483b65187303ff5548488b42084d8d7fe84c3b7d107303ff554049c747f8020000004d89fe49bd908efcacaa2a00004d892e4c8b68084d896e08488b184c89f0ff252b000000909090|@6524,8191,@6522|46,0,@6712 6712:C3,56|90909090909090483b65187303ff554848bb881cf1acaa2a0000488b42089090ff153a00000048ba088ffcacaa2a0000ff22909090909090|@6520,8191,@6514|18,0,@2374 40,0,@6713 6713:O1|@6714 6714:C2,136|90909090909090483b65187303ff55484c8b70104983fe01745f504c8b680848b801000000000000004c89eaff124c8b24245048b80100000000000000498b1424909090ff12909090e8b9ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fb498943084c8b14244d89134c89d84883c410c348b80100000000000000c390909090|@5460,8191|33,0,0 53,0,0 123,0,0 6715:O2|@6716,@162 6716:C3,96|90909090909090483b65187303ff55484c8b72084d8d7fd84c3b7d107303ff554049c747f8040000004d89fd49bc9090fcacaa2a00004d8965004d8b66084d8965184c8b184d895d104c8b50084d895508498b1e4c89e8ff252b000000909090|@6550,8191,@6522|46,0,@6717 6717:C3,48|90909090909090483b65187303ff55484c8b4a084c8b421048bbb012f1acaa2a0000488b4218ff252c00000090909090|@6549,8191,@2171|26,0,@2355 6718:O2|@6719,@162 6719:C3,96|90909090909090483b65187303ff55484c8b72084d8d7fd84c3b7d107303ff554049c747f8040000004d89fd49bcb891fcacaa2a00004d8965004d8b66084d8965184c8b184d895d104c8b50084d895508498b1e4c89e8ff252b000000909090|@6550,8191,@6522|46,0,@6720 6720:C3,48|90909090909090483b65187303ff55484c8b4a084c8b421048bb301ef1acaa2a0000488b4218ff252c00000090909090|@6549,8191,@2171|26,0,@2381 6721:O2|@6722,@162 6722:C3,96|90909090909090483b65187303ff55484c8b72084d8d7fd84c3b7d107303ff554049c747f8040000004d89fd49bce092fcacaa2a00004d8965004d8b66084d8965184c8b184d895d104c8b50084d895508498b1e4c89e8ff252b000000909090|@6550,8191,@6522|46,0,@6723 6723:C3,48|90909090909090483b65187303ff55484c8b4a084c8b421048bbf0b4f0acaa2a0000488b4218ff252c00000090909090|@6549,8191,@2171|26,0,@2195 6724:O2|@6725,@162 6725:C3,80|90909090909090483b65187303ff5548488b42084d8d7fe84c3b7d107303ff554049c747f8020000004d89fe49bdf893fcacaa2a00004d892e4c8b68084d896e08488b184c89f0ff252b000000909090|@6524,8191,@6522|46,0,@6726 6726:C3,56|90909090909090483b65187303ff554848bbd8b2f0acaa2a0000488b42089090ff153a00000048ba7094fcacaa2a0000ff22909090909090|@6520,8191,@6514|18,0,@2187 40,0,@6727 6727:O1|@6728 6728:C2,136|90909090909090483b65187303ff55484c8b70104983fe01745f504c8b680848b801000000000000004c89eaff124c8b24245048b80100000000000000498b1424909090ff12909090e8b9ffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fb498943084c8b14244d89134c89d84883c410c348b80100000000000000c390909090|@5460,8191|33,0,0 53,0,0 123,0,0 6729:O2|@6730,@162 6730:C3,96|90909090909090483b65187303ff55484c8b72084d8d7fd84c3b7d107303ff554049c747f8040000004d89fd49bcf895fcacaa2a00004d8965004d8b66084d8965184c8b184d895d104c8b50084d895508498b1e4c89e8ff252b000000909090|@6550,8191,@6522|46,0,@6731 6731:C3,48|90909090909090483b65187303ff55484c8b4a084c8b421048bbf8a6f0acaa2a0000488b4218ff252c00000090909090|@6549,8191,@2171|26,0,@2164 6732:O2|@6733,@162 6733:C3,88|90909090909090483b65187303ff55484c8b72084d8d7fe04c3b7d107303ff554049c747f8030000004d89fd49bc1897fcacaa2a00004d8965004d8b66084d89651049894508498b1e4c89e8ff252e000000909090909090|@6569,8191,@6522|46,0,@6734 6734:C3,40|90909090909090483b65187303ff55484c8b420848bbb012f1acaa2a0000488b4210ff2528000000|@6568,8191,@2358|22,0,@2355 6735:O2|@6736,@162 6736:C3,88|90909090909090483b65187303ff55484c8b72084d8d7fe04c3b7d107303ff554049c747f8030000004d89fd49bc3098fcacaa2a00004d8965004d8b66084d89651049894508498b1e4c89e8ff252e000000909090909090|@6569,8191,@6522|46,0,@6737 6737:C3,40|90909090909090483b65187303ff55484c8b420848bb301ef1acaa2a0000488b4210ff2528000000|@6568,8191,@2358|22,0,@2381 6738:O2|@6739,@162 6739:C3,88|90909090909090483b65187303ff55484c8b72084d8d7fe04c3b7d107303ff554049c747f8030000004d89fd49bc4899fcacaa2a00004d8965004d8b66084d89651049894508498b1e4c89e8ff252e000000909090909090|@6569,8191,@6522|46,0,@6740 6740:C3,40|90909090909090483b65187303ff55484c8b420848bbf0b4f0acaa2a0000488b4210ff2528000000|@6568,8191,@2358|22,0,@2195 6741:O2|@6742,@162 6742:C3,96|90909090909090483b65187303ff55484c8b72084d8d7fd84c3b7d107303ff554049c747f8040000004d89fd49bc689afcacaa2a00004d8965004d8b66084d8965184c8b184d895d104c8b50084d895508498b1e4c89e8ff252b000000909090|@6550,8191,@6522|46,0,@6743 6743:C3,48|90909090909090483b65187303ff55484c8b4a084c8b421048bb881cf1acaa2a0000488b4218ff252c00000090909090|@6549,8191,@2171|26,0,@2374 6744:O2|@6745,@162 6745:C3,88|90909090909090483b65187303ff55484c8b72084d8d7fe04c3b7d107303ff554049c747f8030000004d89fd49bc889bfcacaa2a00004d8965004d8b66084d89651049894508498b1e4c89e8ff252e000000909090909090|@6569,8191,@6522|46,0,@6746 6746:C3,40|90909090909090483b65187303ff55484c8b420848bbf8a6f0acaa2a0000488b4210ff2528000000|@6568,8191,@2358|22,0,@2164 6747:O2|@6748,@162 6748:C3,96|90909090909090483b65187303ff55484c8b72084d8d7fd84c3b7d107303ff554049c747f8040000004d89fd49bca89cfcacaa2a00004d8965004d8b66084d8965184c8b184d895d104c8b50084d895508498b1e4c89e8ff252b000000909090|@6550,8191,@6522|46,0,@6749 6749:C3,48|90909090909090483b65187303ff55484c8b4a084c8b421048bbd8b2f0acaa2a0000488b4218ff252c00000090909090|@6549,8191,@2171|26,0,@2187 6750:O2|@6751,@162 6751:C3,88|90909090909090483b65187303ff55484c8b72084d8d7fe04c3b7d107303ff554049c747f8030000004d89fd49bcc89dfcacaa2a00004d8965004d8b66084d89651049894508498b1e4c89e8ff252e000000909090909090|@6569,8191,@6522|46,0,@6752 6752:C3,40|90909090909090483b65187303ff55484c8b420848bb881cf1acaa2a0000488b4210ff2528000000|@6568,8191,@2358|22,0,@2374 6753:C3,88|90909090909090483b65187303ff55484c8b72084d8d7fe04c3b7d107303ff554049c747f8030000004d89fd49bcc89efcacaa2a00004d8965004d8b66084d89651049894508498b1e4c89e8ff252e000000909090909090|@6569,8191,@6522|46,0,@6754 6754:C3,40|90909090909090483b65187303ff55484c8b420848bbd8b2f0acaa2a0000488b4210ff2528000000|@6568,8191,@2358|22,0,@2187 6755:O2|@6757,@6756 6756:O2|@6758,0 6757:S10|646973706c617956616c 6758:O3|@7374,69,@6759 6759:O4|@6757,-1,@6761,@6760 6760:O3|1,@6766,@584 6761:O2|-1,@6762 6762:O2|-3,@6763 6763:O1|@6764 6764:C4,184|90909090909090483b65187303ff55485050505050505048ff3048ff700848ff701048ff70184c8d442420488b582048b89b00000000000000909090ff159e0000004d8d7fc04c3b7d107303ff554049c747f8070000004d89fe4c8b6c24204d892e4c8b6424284d8966084c8b5c24304d895e104c8b5424384d8956184c8b4c24404d894e204c8b4424484d894628488b7c245049897e304c8b14244c8b4c24084d89f0488b5c2410488b4424184883c458ff2530000000|@6765,8191,@359,@6404|49,0,77 6765:S43|494e495449414c4953455f28292e696e6974476c6f62616c456e76283129646973706c617956616c283129 6766:O4|-2,1,@6767,0 6767:O2|@6768,@6423 6768:O2|49,@714 6769:O2|@6771,@6770 6770:O2|@6772,0 6771:S8|6465627567546167 6772:O3|@7374,69,@6773 6773:O4|@6771,-1,@6774,@6338 6774:O2|-1,@6775 6775:O2|-3,@5752 6776:O2|@6778,@6777 6777:O2|@6779,0 6778:S15|636f6d70696c657256657273696f6e 6779:O3|@7374,69,@6780 6780:O4|@6778,-1,@6781,@512 6781:O2|-1,@6782 6782:O2|-3,@6783 6783:S11|352e322052656c65617365 6784:O2|@6786,@6785 6785:O2|@6787,0 6786:S11|66696c654e616d65546167 6787:O3|@7374,69,@6788 6788:O4|@6786,-1,@6790,@6789 6789:O4|-3,@6792,@6318,@6316 6790:O2|-1,@6791 6791:O2|-3,@5745 6792:O2|@512,0 6793:O2|@6795,@6794 6794:O2|@6796,0 6795:S13|6572726f724465707468546167 6796:O3|@7374,69,@6797 6797:O4|@6795,-1,@6798,@6329 6798:O2|-1,@6799 6799:O2|-3,@1964 6800:O2|@6802,@6801 6801:O2|@6803,0 6802:S16|7072696e74446570746846756e546167 6803:O3|@7374,69,@6804 6804:O4|@6802,-1,@6806,@6805 6805:O4|-3,@6808,@6318,@6316 6806:O2|-1,@6807 6807:O2|-3,@5400 6808:O2|@6809,0 6809:O3|1,@584,@513 6810:O2|@6812,@6811 6811:O2|@6813,0 6812:S9|74696d696e67546167 6813:O3|@7374,69,@6814 6814:O4|@6812,-1,@6815,@6338 6815:O2|-1,@6816 6816:O2|-3,@1084 6817:O2|@1596,@6818 6818:O2|@6819,0 6819:O3|@7374,69,@6820 6820:O4|@1596,-1,@6822,@6821 6821:O3|1,@512,@6843 6822:O2|-1,@6823 6823:O2|-3,@6824 6824:O1|@6825 6825:C3,280|90909090909090483b65187303ff554848f7c001000000740c49be0300000000000000eb084c8b304f8d74360141f6c6017503ff55704983fe057e5648f7c001000000740c49be0300000000000000eb084c8b304f8d74360141f6c6017503ff55704983fe057f1c4989c648b860d6ecacaa2a00009090ff555849bd010000000000000048f7c001000000740a4989c5eb0fe91f0000004c0fb6680a4f8d6c2d014981fdf1000000750c49bd0300000000000000eb0a49bdffffffffffffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fe49bc58a9fcacaa2a00004d89264d896e084c89f3ff154e0000004883f801751848b8e8b5fcacaa2a000090ff555848b80100000000000000488b00c390909090|@6842,8191,@1741|27,0,1 71,0,1 109,0,@49 124,0,0 172,0,1 184,0,-1 218,0,@6826 250,0,@6839 264,0,0 6826:C2,56|4989c64d8d7fe04c3b7d107303ff554049c747f8030000004c89f849bdc8a9fcacaa2a00004c89284c8970104c8b72084c897008c3909090|@6838,6149|29,0,@6827 6827:C3,208|90909090909090483b65187303ff55484c8b4208488b5a10ff15da0000004883f801750b48b80100000000000000c34c8b304d8b2e49bcd8aafcacaa2a000049544d23e541f6c401495c7503ff55704d3bec7e1848b8f0aafcacaa2a000090ff555848b8010000000000000049f7c50100000074054d89ebeb1349f645ff104d8b5d00740349f7db4f8d5c1b014d8d7fe84c3b7d107303ff554049c747f8020000004d89fa4d8b4e084d894a084d891a4d8d7ff04c3b7d107303ff554049c747f8010000004c89f84c8910c390909090|@6832,8191,@6831|38,0,0 55,0,@6828 86,0,@6829 100,0,0 6828:B16|ffffffffffffff7f0000000000000000 6829:O3|5,@6830,0 6830:S8|4f766572666c6f77 6831:C14,1048|90909090909090483b65187303ff55484983f801750c49be0500000000000000eb2e4983f8fd750c49be1100000000000000eb1c4983f8ff750c49be1500000000000000eb0a49be21000000000000004956535049504889da909090ff124883f801750f48b801000000000000004883c420c34c8b284d8b65004983fc61756049ff7508488b0424488b542418909090ff124883f801750c49bb0100000000000000eb5d4c8b104d8b0a4981f9ef000000756e4c8b4424084983f803756849ff7208488b0424488b54242090ff124883f801751149bb0100000000000000eb67e9a2020000488b38488b374881fef10000007502eb104881feb10000007407eb6ae92c020000488b5c24104883fb03753b4c8b470848bb0100000000000000eb0ae923010000e9b900000048b80100000000000000488d5424309090ff15fe0200004989c3eb68e9e20100004c8b470848bb010000000000000048b80100000000000000488d542430eb05e90b000000ff15d20200004989c3eb64488b5c24104883fb03752e4c8b042448bb010000000000000048b80100000000000000488d54243090ff15a60200004989c3eb64e97a0100004c8b042448bb010000000000000048b80100000000000000488d542430909090ff157e0200004989c3eb65e94a0100004983f803752e4d8b420848bb010000000000000048b80100000000000000488d54242890ff15520200004989c3eb2ee9160100004d8b420848bb010000000000000048b80100000000000000488d542428909090ff152a0200004989c350eb57e9e50000004981f9f10000007502eb0b4981f9b10000007402eb6c4c8b4424084983f80375614983f80375304d8b420848bb010000000000000048b80100000000000000488d542428909090ff15da0100004989c3eb64e98e0000004d8b420848bb010000000000000048b80100000000000000488d542428909090ff15b20100004989c3eb624c8b4424084983f803752e4c8b44241048bb010000000000000048b80100000000000000488d542428ff15860100004989c3eb2ee9290000004c8b44241048bb010000000000000048b80100000000000000488d5424289090ff155e0100004989c3504883c4084983fb0175474d8d7fe84c3b7d107303ff554049c747f8020000004c89ff488b34244889770848c707010000004d8d7ff04c3b7d107303ff554049c747f8010000004c89f84889384883c428c34c89d84883c428c34983fc1372084983fc1b7702eb084983fc417402eb164c8b0424488b5c2410498b45084883c420e954fcffff4c8b1c244983fb03752a4c8b44240848bb010000000000000048b80100000000000000488d54242090ff15ae0000004883c420c34c8b44240848bb010000000000000048b80100000000000000488d542420909090ff158a0000004883c420c39090909090|@6834,8191,@6835,@6833,@6835,@6833,@6835,@6833,@6835,@6833,@6835,@6833,@6835,@6833|24,0,2 42,0,8 60,0,10 72,0,16 102,0,0 154,0,0 214,0,0 279,0,0 301,0,0 338,0,0 348,0,0 396,0,0 406,0,0 442,0,0 452,0,0 496,0,0 506,0,0 542,0,0 552,0,0 630,0,0 640,0,0 678,0,0 688,0,0 733,0,0 743,0,0 779,0,0 789,0,0 964,0,0 974,0,0 1006,0,0 1016,0,0 6832:S24|576f7264732e576f72642e7363616e283129283129283129 6833:C2,432|90909090909090483b65187303ff554852505349504c89c0488b52f0ff124883f80175634c8b7424104983fe0174494d8d7fe84c3b7d107303ff554049c747f8020000004d89fd4c8b24244d8965084c8b5c24084d895d004d8d7ff04c3b7d107303ff554049c747f8010000004c89f84c89284883c420c348b801000000000000004883c420c34c8b304d8b2e41f6c5017503ff55704983fd617c6d4c8b6424184d8b5c24f841f6c3017503ff55704d89da4983c26070f449524d23d541f6c201495a7503ff55704d3bea7d6f4c8b4c24084d89c84d23c341f6c0017503ff557050524c89ca48d1fa498d43ff48f7ea4c8d40015a5870e64c89c74923fd40f6c7017503ff5570eb05e93f000000498d78ff4903fd70ed40f6c7017503ff55704889fe4883ee6070f44d8b46084889f348b80300000000000000eb05e90c0000004c89e24883c420e9bafeffff4c8b6424104983fc0174484d8d7fe84c3b7d107303ff554049c747f8020000004d89fb4c8b14244d8953084c8b4c24084d890b4d8d7ff04c3b7d107303ff554049c747f8010000004c89f84c89184883c420c348b801000000000000004883c420c390|@6837,8191|122,0,0 306,0,1 418,0,0 6834:S11|7363616e576f7264283329 6835:C2,800|90909090909090483b65187303ff554852505349504c89c0488b52f0ff124883f80175634c8b7424104983fe0174494d8d7fe84c3b7d107303ff554049c747f8020000004d89fd4c8b24244d8965084c8b5c24084d895d004d8d7ff04c3b7d107303ff554049c747f8010000004c89f84c89284883c420c348b801000000000000004883c420c34c8b304d8b2e41f6c5017503ff55704983fd617c6e41f6c5017503ff55704983fd737f644c8b64240849bb21000000000000004d89e24d23d341f6c2017503ff557050524c89e248d1fa498d43ff48f7ea4c8d50015a5870e64d89d14d23cd41f6c1017503ff55704d8d4aff4d03cd70f441f6c1017503ff55704d89c84983e860eb0ae929000000e92400000070e84c89c74d8b46084889fb48b80300000000000000488b5424184883c420e9cffeffff41f6c5017503ff55704981fd830000007c6d41f6c5017503ff55704981fd8d0000007f604c8b64240849bb21000000000000004d89e24d23d341f6c2017503ff557050524c89e248d1fa498d43ff48f7ea4c8d50015a5870e64d89d14d23cd41f6c1017503ff55704d8d4aff4d03cd70f441f6c1017503ff55704d89c8eb0ae93f000000e93a0000004981e88200000070e541f6c0017503ff55704c89c74883c71470f44d8b46084889fb48b80300000000000000488b5424184883c420e90cfeffff41f6c5017503ff55704981fdc30000007c6d41f6c5017503ff55704981fdcd0000007f604c8b64240849bb21000000000000004d89e24d23d341f6c2017503ff557050524c89e248d1fa498d43ff48f7ea4c8d50015a5870e64d89d14d23cd41f6c1017503ff55704d8d4aff4d03cd70f441f6c1017503ff55704d89c8eb0ae93f000000e93a0000004981e8c200000070e541f6c0017503ff55704c89c74883c71470f44d8b46084889fb48b80300000000000000488b5424184883c420e949fdffff4c8b6424104983fc0174484d8d7fe84c3b7d107303ff554049c747f8020000004d89fb4c8b14244d8953084c8b4c24084d890b4d8d7ff04c3b7d107303ff554049c747f8010000004c89f84c89184883c420c348b801000000000000004883c420c3|@6836,8191|122,0,0 178,0,16 290,0,1 355,0,16 485,0,1 550,0,16 680,0,1 787,0,0 6836:S29|7363616e576f7264283329726561645f6865785f646967697473283329 6837:S25|7363616e576f7264283329726561645f646967697473283329 6838:S21|576f7264732e576f72642e7363616e283129283129 6839:O3|8,@6841,@6840 6840:S21|496e76616c696420776f726420636f6e7374616e74 6841:S10|436f6e76657273696f6e 6842:S45|494e495449414c4953455f28292e696e6974476c6f62616c456e76283129776f72644f66537472696e67283129 6843:O4|-3,0,@5727,@6844 6844:O2|0,@5725 6845:O2|@6847,@6846 6846:O2|@6848,0 6847:S15|7072696e74456e7669726f6e546167 6848:O3|@7374,69,@6849 6849:O4|@6847,-1,@6851,@6850 6850:O4|-3,@6856,@6318,@6316 6851:O2|-1,@6852 6852:O2|-3,@6853 6853:O3|@5584,@6854,@5582 6854:O2|@6855,@7483 6855:C2,48|4989c64d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c89701048c740088b0000004c8b72084c8930c390|@966,4101| 6856:O2|@570,0 6857:O2|@6859,@6858 6858:O2|@6860,0 6859:S16|6d6178496e6c696e6553697a65546167 6860:O3|@7374,69,@6861 6861:O4|@6859,-1,@6862,@6329 6862:O2|-1,@6863 6863:O2|-3,@3255 6864:O2|@6866,@6865 6865:O2|@6867,0 6866:S10|45786e4d657373616765 6867:O3|@7392,69,@6868 6868:O3|@6866,@552,@6869 6869:O4|@6870,I48,0,0 6870:O4|-1,@7504,@7505,@7503 6871:O2|@6873,@6872 6872:O2|@6874,0 6873:S10|65786e4d657373616765 6874:O3|@7374,69,@6875 6875:O4|@6873,-1,@911,@6876 6876:O3|1,@2604,@512 6877:O2|@6879,@6878 6878:O2|@6880,0 6879:S12|706172736574726565546167 6880:O3|@7374,69,@6881 6881:O4|@6879,-1,@6882,@6338 6882:O2|-1,@6883 6883:O2|-3,@1098 6884:O2|@6886,@6885 6885:O2|@6887,0 6886:S14|636f6e76537472696e674e616d65 6887:O3|@7374,69,@6888 6888:O4|@6886,-1,@6889,@512 6889:O2|-1,@6890 6890:O2|-3,@1584 6891:O2|@6893,@6892 6892:O2|@6894,0 6893:S8|7072696e7456616c 6894:O3|@7374,69,@6895 6895:O4|@6893,-1,@6897,@6896 6896:O3|1,@6905,@584 6897:O2|-1,@6898 6898:O2|-3,@6899 6899:O1|@6900 6900:C7,392|90909090909090483b65187303ff5548505050505050504d8d7fe84c3b7d107303ff554049c747f8020000004d89fe49bd40bffcacaa2a00004d892e4c8b68184d896e084989e44d8934244989e649bcc0f5f9acaa2a00004d8966084989e649bc48f6f9acaa2a00004d8966104989e64d896e184989e449bea0f6f9acaa2a00004d897424204989e449bef8f6f9acaa2a00004d897424284989e449be00c0fcacaa2a00004d897424304d8d7fc04c3b7d107303ff554049c747f8070000004d89fc4c8b34244d8934244c8b5c24084d895c24084c8b5424104d895424104c8b4c24184d894c24184c8b4424204d89442420488b7c242849897c24284c8b7424304d897424304c8b184c8b50084c8b4810498b4308909090ff15920000004883f8017452498b4310ff158a0000004883f8017433498b4310ff15820000004d89e0498b7b18909090ff157a0000004c89d64d89ca4d89c14989f04889fb4883c438ff256900000048b801000000000000004883c438c348b801000000000000004883c438c3909090|@6904,8191,@6143,@2280,@2267,@5463,@5453|49,0,@6901 80,0,@5512 97,0,@5515 121,0,@5517 139,0,@5519 157,0,@6902 361,0,0 376,0,0 6901:C2,136|90909090909090483b65187303ff5548524c8b3041f6c6017503ff55704983fe017f0f48b801000000000000004883c408c34c8b2c24495648b84100000000000000498b55089090ff124c8b242441f6c4017503ff55704d89e34983eb0270f44d89de4883c408483b65187303ff5548eba248b801000000000000004883c410c390909090909090|@5511,8191|37,0,0 58,0,32 116,0,0 6902:O1|@6903 6903:C2,16|48b80100000000000000c39090909090|@5514,1|2,0,0 6904:S41|494e495449414c4953455f28292e696e6974476c6f62616c456e762831297072696e7456616c283129 6905:O4|-2,1,@6906,0 6906:O2|@6768,@6907 6907:O2|@941,@6908 6908:O2|@6427,@6606 6909:O2|@6911,@6910 6910:O2|@6912,0 6911:S9|556e6976657273616c 6912:O3|@7392,69,@6913 6913:O3|@6911,@552,@6914 6914:O4|@6915,I48,0,0 6915:O4|-1,@7508,@7509,@7507 6916:O2|@6187,@6965 6917:O2|@6919,@6918 6918:O2|@6920,0 6919:S10|74616750726f6a656374 6920:O3|@7374,69,@6921 6921:O4|@6919,-1,@6923,@6922 6922:O3|1,@6929,@6928 6923:O2|-1,@6924 6924:O2|-3,@6925 6925:O1|@6926 6926:C2,8|488b4010c3909090|@6927,1| 6927:S29|556e6976657273616c2e74616750726f6a6563742d2370726f6a656374 6928:O3|1,@6185,@6931 6929:O4|-3,@6930,@6318,@6316 6930:O2|@6931,0 6931:O3|3,@7511,79992 6932:O2|@6318,@6933 6933:O2|@6934,0 6934:O3|@7387,69,@6319 6935:O2|@6937,@6936 6936:O2|@6938,0 6937:S9|746167496e6a656374 6938:O3|@7374,69,@6939 6939:O4|@6937,-1,@6941,@6940 6940:O3|1,@6947,@6946 6941:O2|-1,@6942 6942:O2|-3,@6943 6943:O1|@6944 6944:C2,8|488b4008c3909090|@6945,1| 6945:S27|556e6976657273616c2e746167496e6a6563742d23696e6a656374 6946:O3|1,@6949,@6185 6947:O4|-3,@6948,@6318,@6316 6948:O2|@6949,0 6949:O3|3,@7512,79992 6950:O2|@6952,@6951 6951:O2|@6953,0 6952:S5|7461674973 6953:O3|@7374,69,@6954 6954:O4|@6952,-1,@6956,@6955 6955:O3|1,@6962,@6961 6956:O2|-1,@6957 6957:O2|-3,@6958 6958:O1|@6959 6959:C2,8|488b00c390909090|@6960,1| 6960:S19|556e6976657273616c2e74616749732d236973 6961:O3|1,@6185,@178 6962:O4|-3,@6963,@6318,@6316 6963:O2|@6964,0 6964:O3|3,@7513,79992 6965:O2|@6966,0 6966:O3|@7387,69,@6188 6967:O2|@1584,@6968 6968:O2|@6969,0 6969:O3|@7374,69,@6970 6970:O4|@1584,-1,@6972,@6971 6971:O3|1,@512,@512 6972:O2|-1,@6973 6973:O2|-3,@6974 6974:O1|@6975 6975:C4,128|90909090909090483b65187303ff554848f7c001000000740c49be0300000000000000eb084c8b304f8d7436014d8d7fe04c3b7d107303ff554049c747f8030000004d89fd49bcd0c9fcacaa2a00004d8965004d897510498945084955495648b80100000000000000488d5424109090ff15320000004883c410ff2530000000|@6981,8191,@6978,@306|27,0,1 71,0,@6976 97,0,0 6976:C2,240|4c8b721050490bc6a801587503ff5570493bc6750b48b80100000000000000c3a8017503ff55704883f8017d02eb354c8b6a0849f7c501000000740c49bc0300000000000000eb094d8b65004f8d642401504923c4a801587503ff5570493bc47d02eb1c4989c448b860d6ecacaa2a00009090ff555849bd010000000000000049f7c5010000007402eb184c8d60104d89e349d1eb4f0fb65c1d004f8d5c1b014d89dda8017503ff55704989c44983c40270f44d8d7fe84c3b7d107303ff554049c747f8020000004d89fb4d8963084d892b4d8d7ff04c3b7d107303ff554049c747f8010000004c89f84c8918c39090|@6977,7685|23,0,0 62,0,1 105,0,@49 120,0,0 6977:S28|4d6973632e756e657363617065537472696e67283129726472283129 6978:C3,360|90909090909090483b65187303ff55484c8b72f050490bc6a801587503ff5570493bc6750b48b80100000000000000c35248ff72f8488b1c24909090ff154e0100004883f801750c49bd0100000000000000eb5b4c8b20498b1c2448b8b01e60000000000048bab01860000000000090ff124883f801744649ff742408488b0424488b5424089090ff124883f801750c49bd0100000000000000eb67488b04244883c408483b65187303ff5548eb86e95300000049bd01000000000000004d8d7fe84c3b7d107303ff554049c747f8020000004d89fb4d8b5424084d8953084d8b0c244d890b4d8d7ff04c3b7d107303ff554049c747f8010000004d89fd4d895d00504883c4084983fd01751748b8d0ccfcacaa2a0000ff555848b801000000000000004d8b450049ff30498b4008488b54241090e8cdfeffff4d8d7fe84c3b7d107303ff554049c747f8020000004c89ff48894708488b34244889374889f84883c418c3909090|@6983,8191,@6982|39,0,0 74,0,0 93,0,I48 103,0,I24 146,0,0 182,0,0 271,0,@6979 284,0,0 6979:O3|8,@6841,@6980 6980:S23|496e76616c696420737472696e6720636f6e7374616e74 6981:S22|4d6973632e756e657363617065537472696e67283129 6982:C4,1848|90909090909090483b65187303ff554850534889da909090ff124883f801754e4d8d7fe84c3b7d107303ff554049c747f8020000004d89fe4c8b6c24084d896e0849bcb01e6000000000004d89264d8d7ff04c3b7d107303ff554049c747f8010000004c89f84c89304883c410c34c8b304d8b2e4983fd417302eb0b4981fdfd0000007702eb0f48b801000000000000004883c410c34981fdb9000000757349ff7608488b0424488b542408ff124883f801750f48b801000000000000004883c418c34c8b204d8b1c244981fbc3000000754f4d8d7fe84c3b7d107303ff554049c747f8020000004d89fa4d8b4c24084d894a0849c7020f0000004d8d7ff04c3b7d107303ff554049c747f801000000eb05e9dc0500004c89f84c89104883c418c34981fbc500000075484d8d7fe84c3b7d107303ff554049c747f8020000004d89fa4d8b4c24084d894a0849c702110000004d8d7ff04c3b7d107303ff554049c747f8010000004c89f84c89104883c418c34981fbe900000075484d8d7fe84c3b7d107303ff554049c747f8020000004d89fa4d8b4c24084d894a0849c702130000004d8d7ff04c3b7d107303ff554049c747f8010000004c89f84c89104883c418c34981fbdd00000075484d8d7fe84c3b7d107303ff554049c747f8020000004d89fa4d8b4c24084d894a0849c702150000004d8d7ff04c3b7d107303ff554049c747f8010000004c89f84c89104883c418c34981fbed00000075484d8d7fe84c3b7d107303ff554049c747f8020000004d89fa4d8b4c24084d894a0849c702170000004d8d7ff04c3b7d107303ff554049c747f8010000004c89f84c89104883c418c34981fbcd00000075484d8d7fe84c3b7d107303ff554049c747f8020000004d89fa4d8b4c24084d894a0849c702190000004d8d7ff04c3b7d107303ff554049c747f8010000004c89f84c89104883c418c34981fbe500000075484d8d7fe84c3b7d107303ff554049c747f8020000004d89fa4d8b4c24084d894a0849c7021b0000004d8d7ff04c3b7d107303ff554049c747f8010000004c89f84c89104883c418c34981fbb900000075484d8d7fe84c3b7d107303ff554049c747f8020000004d89fa4d8b4c24084d894a0849c702b90000004d8d7ff04c3b7d107303ff554049c747f8010000004c89f84c89104883c418c34983fb4575484d8d7fe84c3b7d107303ff554049c747f8020000004d89fa4d8b4c24084d894a0849c702450000004d8d7ff04c3b7d107303ff554049c747f8010000004c89f84c89104883c418c34981fbbd000000756d498b442408488b5424089090ff124883f801750f48b801000000000000004883c418c34c8b104d8b0a41f6c1017503ff55704981f9810000007c6f41f6c1017503ff55704981f9bf0000007f6241f6c1017503ff55704d89c84981e88000000070f141f6c0017503ff5570eb05e9970000004983f8017d02eb1441f6c0017503ff55704981f8ff0100007f02eb1a48b8f048edacaa2a0000909090ff555848bf0100000000000000eb0ae94b000000e9460000004c89c74d8d7fe84c3b7d107303ff554049c747f8020000004c89fe498b5a0848895e0848893e4d8d7ff04c3b7d107303ff554049c747f8010000004c89f84889304883c418c348b801000000000000004883c418c34981fbeb000000756e4c8b4c24084d8b44240848bb090000000000000048b80100000000000000ff157a0200004883f801750f48b801000000000000004883c418c34c8b104d8d7fe84c3b7d107303ff554049c747f8020000004d89f94d8b42084d894108498b3a4989394d8d7ff04c3b7d10730aeb05e916000000ff554049c747f8010000004c89f84c89084883c418c34983fb1372084983fb1b7702eb084983fb417402eb564d8b54240849524c89d0488b542410ff124883f8017506488b0424eb424c8b084d8b014983f81372084983f81b7702eb084983f8417402eb224d8b51084883c408483b65187303ff5548ebb948b80100000000000000e98e000000488b0424488b542410909090ff124883f801750f48b801000000000000004883c420c3488b38488b374881feb9000000740f48b801000000000000004883c420c34d8d7fe84c3b7d107303ff554049c747f8020000004c89fb488b57084889530848b9b01e60000000000048890b4d8d7ff04c3b7d107303ff554049c747f8010000004c89f84889184883c420c34983fb61726e4983fb65776d4c8b4c24084c8b042448bb070000000000000048b8010000000000000090ff15ee0000004883f801750f48b801000000000000004883c418c34c8b104d8d7fe84c3b7d107303ff554049c747f8020000004d89f94d8b42084d894108498b3a4989394d8d7ff0eb0ae921000000e91c0000004c3b7d107303ff554049c747f8010000004c89f84c89084883c418c348b801000000000000004883c418c34d8d7fe84c3b7d107303ff554049c747f8020000004d89fc4d8b5e084d895c24084d892c244d8d7ff04c3b7d107303ff554049c747f8010000004c89f84c89204883c410c3|@6985,8191,@6986,@6984|67,0,I48 137,0,0 182,0,0 966,0,0 1088,0,@309 1104,0,0 1196,0,0 1230,0,4 1240,0,0 1262,0,0 1455,0,0 1490,0,0 1520,0,0 1567,0,I48 1633,0,3 1643,0,0 1666,0,0 1766,0,0 6983:S34|4d6973632e756e657363617065537472696e67283129636f6e764368617273283129 6984:C2,600|90909090909090483b65187303ff55484883fb017570a8017503ff55704881f8ff0100007e0b48b80100000000000000c3a8017503ff55704883f8017d02eb12a8017503ff55704881f8ff0100007f02eb1a48b8f048edacaa2a0000909090ff555849be01000000000000004989c64d8d7fe84c3b7d107303ff554049c747f802000000eb05e9260000004d89f94d8941084d89314d8d7ff04c3b7d107303ff554049c747f8010000004c89f84c8908c35053495049514c89c04c89ca909090ff124883f80175634c8b74241841f6c6017503ff55704981feff0100007e02eb164c8b6c241041f6c5017503ff55704983fd017f02eb0f48b801000000000000004883c420c341f6c6017503ff55704983fe017d02eb1941f6c6017503ff55704981feff0100007f07eb1de95f00000048b8f048edacaa2a000090ff555849bc01000000000000004d89f44d8d7fe84c3b7d107303ff554049c747f8020000004d89fb4c8b5424084d8953084d89234d8d7ff04c3b7d107303ff554049c747f8010000004c89f84c89184883c420c34c8b304d8b2e4983fd61727041f6c5017503ff55704983fd737f664c8b64241041f6c4017503ff55704d89e34983eb0270f44c8b54241849b915000000000000004d89d04d23c141f6c0017503ff557050524c89d248d1fa498d41ff48f7ea4c8d40015a5870e64c89c74923fd40f6c7017503ff5570498d78ffeb0ae933000000e92e0000004903fd70e840f6c7017503ff55704889fe4883ee6070f44c8b0c244d8b46084c89db4889f04883c420e9c4fdffff48b801000000000000004883c420c3909090909090|@6988,8191|40,0,0 84,0,@309 100,0,0 249,0,0 306,0,@309 320,0,0 456,0,10 581,0,0 6985:S16|436861722e7363616e42617365283229 6986:C2,1160|90909090909090483b65187303ff55484883fb017570a8017503ff55704881f8ff0100007e0b48b80100000000000000c3a8017503ff55704883f8017d02eb12a8017503ff55704881f8ff0100007f02eb1a48b8f048edacaa2a0000909090ff555849be01000000000000004989c64d8d7fe84c3b7d107303ff554049c747f802000000eb05e9260000004d89f94d8941084d89314d8d7ff04c3b7d107303ff554049c747f8010000004c89f84c8908c35053495049514c89c04c89ca909090ff124883f80175634c8b74241041f6c6017503ff55704983feff7c02eb194c8b6c241841f6c5017503ff55704981fdff0100007f02eb0f48b801000000000000004883c420c341f6c5017503ff55704983fd017d02eb1941f6c5017503ff55704981fdff0100007f07eb1de95f00000048b8f048edacaa2a000090ff555849bc01000000000000004d89ec4d8d7fe84c3b7d107303ff554049c747f8020000004d89fb4c8b5424084d8953084d89234d8d7ff04c3b7d107303ff554049c747f8010000004c89f84c89184883c420c34c8b304d8b2e4983fd6172724983fd7377714c8b64241041f6c4017503ff55704d89e34983eb0270f44c8b54241849b921000000000000004d89d04d23c141f6c0017503ff557050524c89d248d1fa498d41ff48f7ea4c8d40015a5870e64c89c74923fd40f6c7017503ff5570498d78ff4903fd70f440f6c701750feb0ae928000000e923000000ff55704889fe4883ee6070e84c8b0c244d8b46084c89db4889f04883c420e9cdfdffff4981fdc3000000726d4981fdcd00000077694c8b64241041f6c4017503ff55704d89e34983eb0270f44c8b54241849b921000000000000004d89d04d23c141f6c0017503ff557050524c89d248d1fa498d41ff48f7ea4c8d40015a5870e64c89c74923fd40f6c7017503ff5570498d78ff4903fdeb0ae948000000e94300000070e840f6c7017503ff55704889fe4881eec200000070f140f6c6017503ff55704889f34883c31470f44c8b0c244d8b46084889da4c89db4889d04883c420e90afdffff4981fd83000000726d4981fd8d00000077694c8b64241041f6c4017503ff55704d89e34983eb0270f44c8b54241849b921000000000000004d89d04d23c141f6c0017503ff557050524c89d248d1fa498d41ff48f7ea4c8d40015a5870e64c89c74923fd40f6c7017503ff5570498d78ff4903fdeb0ae948000000e94300000070e840f6c7017503ff55704889fe4881ee8200000070f140f6c6017503ff55704889f34883c31470f44c8b0c244d8b46084889da4c89db4889d04883c420e947fcffff4c8b64241041f6c4017503ff55704983fcff7c02eb194c8b5c241841f6c3017503ff55704981fbff0100007f02eb0f48b801000000000000004883c420c341f6c3017503ff55704983fb017d02eb1441f6c3017503ff55704981fbff0100007f02eb1948b8f048edacaa2a00009090ff555849ba01000000000000004d89da4d8d7fe84c3b7d107303ff554049c747f8020000004d89f94c8b4424084d8941084d89114d8d7ff04c3b7d107303ff554049c747f8010000004c89f84c89084883c420c39090909090|@6987,8191|40,0,0 84,0,@309 100,0,0 249,0,0 306,0,@309 320,0,0 447,0,16 618,0,16 813,0,16 1009,0,0 1061,0,@309 1076,0,0 6987:S16|436861722e7265616448657827283429 6988:S15|436861722e72656164446563283429 6989:O2|@1587,@6990 6990:O2|@6991,0 6991:O3|@7374,69,@6992 6992:O4|@1587,-1,@6994,@6993 6993:O3|1,@512,@513 6994:O2|-1,@6995 6995:O2|-3,@6996 6996:O1|@6997 6997:C5,352|90909090909090483b65187303ff554848f7c001000000740c49be0300000000000000eb084c8b304f8d74360141f6c6017503ff55704983fe077c3e5049b8050000000000000048bb0100000000000000909090ff152e01000048bb4826eeacaa2a000048bab0186000000000009090ff124883f8017403eb70504c8b2c2449f7c501000000740c49bc0300000000000000eb094d8b65004f8d64240141f6c4017503ff55704983fc097c4a49b8070000000000000048bb01000000000000004c89e890ff15c600000048bb30dffcacaa2a000048bab0186000000000009090ff124883f8017502eb0c49bd0300000000000000eb0a49bdffffffffffffffff4d8d7fe84c3b7d107303ff554049c747f8020000004d89fb49ba48dffcacaa2a00004d89134d896b084c89db488b0424ff15620000004883f801751848b818e0fcacaa2a000090ff555848b80100000000000000488b004883c408c390909090|@7003,8191,@1440,@1440,@1741|27,0,1 63,0,2 73,0,0 92,0,@1153 102,0,I24 138,0,1 174,0,3 184,0,0 204,0,@6998 214,0,I24 236,0,1 248,0,-1 282,0,@6999 318,0,@7001 332,0,0 6998:S3|7e3078 6999:C2,56|4989c64d8d7fe04c3b7d107303ff554049c747f8030000004c89f849bdb8dffcacaa2a00004c89284c8970104c8b72084c897008c3909090|@1704,6149|29,0,@7000 7000:C3,32|90909090909090483b65187303ff55484c8b4208488b5a10ff252a0000009090|@1696,8191,@1695| 7001:O3|8,@6841,@7002 7002:S24|496e76616c696420696e746567657220636f6e7374616e74 7003:S44|494e495449414c4953455f28292e696e6974476c6f62616c456e76283129696e744f66537472696e67283129 7004:O2|@7006,@7005 7005:O2|@7007,0 7006:S13|646973706c6179537472756374 7007:O3|@7374,69,@7008 7008:O4|@7006,-1,@7010,@7009 7009:O3|1,@7015,@584 7010:O2|-1,@7011 7011:O2|-3,@7012 7012:O1|@7013 7013:C4,200|90909090909090483b65187303ff55485050505050505048ff3048ff700848ff701048ff70184c8d442420488b582048b89b00000000000000909090ff15ae0000004d8d7fc04c3b7d107303ff554049c747f8070000004d89fe4c8b6c24204d892e4c8b6424284d8966084c8b5c24304d895e104c8b5424384d8956184c8b4c24404d894e204c8b4424484d894628488b7c245049897e304c8b14244c8b4c24084d89f0488b5c2410488b44241848ba90fdfbacaa2a00004883c458ff2536000000909090909090|@7014,8191,@359,@6417|49,0,77 176,0,@6393 7014:S46|494e495449414c4953455f28292e696e6974476c6f62616c456e76283129646973706c6179537472756374283129 7015:O4|-2,1,@7016,0 7016:O2|@7017,@6423 7017:O2|49,@774 7018:O2|@7020,@7019 7019:O2|@7021,0 7020:S13|6c696e654c656e677468546167 7021:O3|@7374,69,@7022 7022:O4|@7020,-1,@7023,@6329 7023:O2|-1,@7024 7024:O2|-3,@7025 7025:O3|@7027,@7029,@7026 7026:O2|@7031,@7451 7027:O2|@7028,@7451 7028:C2,48|4c8b304c8b6a084d3bf5751648b80300000000000000c348b80100000000000000c348b80100000000000000c3909090|@966,6149|14,0,1 25,0,0 36,0,0 7029:O2|@7030,@7451 7030:C2,48|4989c64d8d7fe04c3b7d107303ff554049c747f8030000004c89f84c89701048c740088b0000004c8b72084c8930c390|@966,4101| 7031:C2,56|4c8b304c8b6a084d3bf57510488b4010c348b80100000000000000c348b8b0d7edacaa2a000090ff555848b8010000000000000090909090|@966,6149|19,0,0 30,0,@970 44,0,0 7032:O2|@7034,@7033 7033:O2|@7035,0 7034:S10|646973706c6179466978 7035:O3|@7374,69,@7036 7036:O4|@7034,-1,@7038,@7037 7037:O3|1,@7045,@584 7038:O2|-1,@7039 7039:O2|-3,@7040 7040:O1|@7041 7041:C3,32|90909090909090483b65187303ff5548488b5808488b00ff252b000000909090|@7043,8191,@7042| 7042:C4,240|90909090909090483b65187303ff55485050505050505048ff3048ff70084c8d44241048b89b00000000000000909090ff15e20000004d8d7fc04c3b7d107303ff554049c747f8070000004d89fe4c8b6c24104d892e4c8b6424184d8966084c8b5c24204d895e104c8b5424284d8956184c8b4c24304d894e204c8b4424384d894628488b7c244049897e30495648b8103dedacaa2a00004889fa90ff124c8b042448bbcf07000000000000488b442408909090ff156600000048b8b027edacaa2a0000488b542418909090ff12488b442410488b542430ff1248b80100000000000000488b5424284883c450ff2290|@7044,8191,@359,@2143|37,0,77 144,0,@268 164,0,999 188,0,@257 220,0,0 7043:S43|494e495449414c4953455f28292e696e6974476c6f62616c456e76283129646973706c6179466978283129 7044:S43|494e495449414c4953455f28292e696e6974476c6f62616c456e76283129646973706c6179466978283229 7045:O4|-2,1,@7046,0 7046:O2|@7048,@7047 7047:O2|@7049,0 7048:O2|49,@594 7049:O2|50,@926 7050:O2|@7052,0 7051:S13|6c696e654e756d626572546167 7052:O3|@7374,69,@7053 7053:O4|@7051,-1,@7054,@6805 7054:O2|-1,@7055 7055:O2|-3,@1071 7056:O2|47,@7057 7057:O2|@7058,0 7058:O3|@7374,69,@7059 7059:O4|47,-1,@177,@6258 7060:O2|@7062,@7061 7061:O2|@7063,0 7062:S3|646976 7063:O3|@7374,69,@7064 7064:O4|@7062,-1,@177,@6258 7065:O2|@7067,@7066 7066:O2|@7068,0 7067:S6|766563746f72 7068:O3|@7387,69,@7069 7069:O6|@7067,1,0,@7071,@518,@7070 7070:O2|-1,@7515 7071:O2|@7072,0 7072:O3|3,@7514,79992 7073:O2|60,@7074 7074:O2|@7075,0 7075:O3|@7374,69,@7076 7076:O4|60,-1,@177,@176 7077:O2|62,@7078 7078:O2|@7079,0 7079:O3|@7374,69,@7080 7080:O4|62,-1,@177,@176 7081:O2|@7083,@7082 7082:O2|@7084,0 7083:S7|52756e43616c6c 7084:O3|@7392,69,@7085 7085:O3|@7083,@552,@7086 7086:O4|@7087,I48,0,0 7087:O4|-1,@7517,@7518,@7516 7088:O2|@165,20 7089:O2|@7300,@7299 7090:O2|@7092,@7091 7091:O2|@7093,0 7092:S10|756e7361666543617374 7093:O3|@7374,69,@7094 7094:O4|@7092,-1,@7096,@7095 7095:O3|1,@7101,@7100 7096:O2|-1,@7097 7097:O2|-7,@7098 7098:O8|@441,@7099,1,0,1,0,0,0 7099:S13|756e7361666543617374283129 7100:O3|3,@7521,79992 7101:O3|3,@7520,79992 7102:O2|@7104,@7103 7103:O2|@7105,0 7104:S14|52756e5f657863657074696f6e31 7105:O3|@7463,69,@7106 7106:O4|@7108,@7104,@7123,@7107 7107:O4|@7126,I48,1,0 7108:O3|I48,@7110,@7109 7109:O4|@7111,I48,1,0 7110:O3|1,@7523,@7522 7111:O3|0,@554,@7112 7112:O10|0,0,0,0,0,0,0,@7114,@7113,0 7113:O2|@7120,@7119 7114:O2|@7116,@7115 7115:O2|@7117,0 7116:S7|65785f6964656e 7117:O3|@7374,69,@7118 7118:O4|@7116,-1,@268,@513 7119:O2|@7121,0 7120:S7|65785f74797065 7121:O3|@7387,69,@7122 7122:O6|@7120,0,0,0,@501,@268 7123:O2|-1,@7124 7124:O2|-7,@7125 7125:O8|@441,@7104,0,0,1,0,0,0 7126:O3|0,@554,@7127 7127:O10|0,@7128,0,0,0,0,0,0,0,0 7128:O2|@7130,@7129 7129:O2|@7131,0 7130:S2|6578 7131:O3|@7374,69,@7132 7132:O4|@7130,0,@268,@7133 7133:O4|-3,0,@7120,@7134 7134:O2|0,@7122 7135:O2|@7137,@7136 7136:O2|@7138,0 7137:S9|72756e5f63616c6c30 7138:O3|@7374,69,@7139 7139:O4|@7137,-1,@7141,@7140 7140:O3|1,@513,@7155 7141:O2|-1,@7142 7142:O2|-7,@7143 7143:O8|@7144,@7137,1,0,1,0,0,0 7144:O2|9,@7145 7145:O2|@7147,@7146 7146:O2|@7150,0 7147:O4|-4,1,@7148,0 7148:O4|4,@439,@7149,1 7149:O2|-3,I189 7150:O2|-7,@7151 7151:O8|@7153,@7152,2,0,1,0,0,0 7152:S12|72756e5f63616c6c30283129 7153:O4|4,0,@7154,0 7154:O5|-5,1,1,1,0 7155:O3|1,@584,@7156 7156:O3|3,@7524,79992 7157:O2|@7159,@7158 7158:O2|@7160,0 7159:S9|72756e5f63616c6c31 7160:O3|@7374,69,@7161 7161:O4|@7159,-1,@7163,@7162 7162:O3|1,@513,@7167 7163:O2|-1,@7164 7164:O2|-7,@7165 7165:O8|@7148,@7166,1,0,1,0,0,0 7166:S12|72756e5f63616c6c31283129 7167:O3|1,@7156,@7168 7168:O3|3,@7525,79992 7169:O2|@7171,@7170 7170:O2|@7172,0 7171:S9|72756e5f63616c6c32 7172:O3|@7374,69,@7173 7173:O4|@7171,-1,@7175,@7174 7174:O3|1,@513,@7185 7175:O2|-1,@7176 7176:O2|-7,@7177 7177:O8|@7178,@7171,1,0,1,0,0,0 7178:O2|9,@7179 7179:O2|@7147,@7180 7180:O2|@7181,0 7181:O2|-7,@7182 7182:O8|@7184,@7183,2,0,1,0,0,0 7183:S12|72756e5f63616c6c32283129 7184:O4|4,@5704,@7154,0 7185:O3|1,@7187,@7186 7186:O3|3,@7526,79992 7187:O4|-2,1,@7188,0 7188:O2|@7190,@7189 7189:O2|@7191,0 7190:O2|49,@7156 7191:O2|50,@7168 7192:O2|@7194,@7193 7193:O2|@7195,0 7194:S9|72756e5f63616c6c33 7195:O3|@7374,69,@7196 7196:O4|@7194,-1,@7198,@7197 7197:O3|1,@513,@7212 7198:O2|-1,@7199 7199:O2|-7,@7200 7200:O8|@7201,@7194,1,0,1,0,0,0 7201:O2|9,@7202 7202:O2|@7147,@7203 7203:O2|@7204,0 7204:O2|-7,@7205 7205:O8|@7207,@7206,2,0,1,0,0,0 7206:S12|72756e5f63616c6c33283129 7207:O4|4,@7208,@7154,0 7208:O2|@850,@7209 7209:O2|@5706,@7210 7210:O2|@7211,0 7211:O3|6,@441,2 7212:O3|1,@7214,@7213 7213:O3|3,@7527,79992 7214:O4|-2,1,@7215,0 7215:O2|@7190,@7216 7216:O2|@7191,@7217 7217:O2|@7218,0 7218:O2|51,@7186 7219:O2|@7221,@7220 7220:O2|@7222,0 7221:S9|72756e5f63616c6c34 7222:O3|@7374,69,@7223 7223:O4|@7221,-1,@7225,@7224 7224:O3|1,@513,@7240 7225:O2|-1,@7226 7226:O2|-7,@7227 7227:O8|@7228,@7221,1,0,1,0,0,0 7228:O2|9,@7229 7229:O2|@7147,@7230 7230:O2|@7231,0 7231:O2|-7,@7232 7232:O8|@7234,@7233,2,0,1,0,0,0 7233:S12|72756e5f63616c6c34283129 7234:O4|4,@7235,@7154,0 7235:O2|@850,@7236 7236:O2|@5706,@7237 7237:O2|@7211,@7238 7238:O2|@7239,0 7239:O3|6,@441,3 7240:O3|1,@7242,@7241 7241:O3|3,@7528,79992 7242:O4|-2,1,@7243,0 7243:O2|@7190,@7244 7244:O2|@7191,@7245 7245:O2|@7218,@7246 7246:O2|@7247,0 7247:O2|52,@7213 7248:O2|@7250,@7249 7249:O2|@7251,0 7250:S9|72756e5f63616c6c35 7251:O3|@7374,69,@7252 7252:O4|@7250,-1,@7254,@7253 7253:O3|1,@513,@7270 7254:O2|-1,@7255 7255:O2|-7,@7256 7256:O8|@7257,@7250,1,0,1,0,0,0 7257:O2|9,@7258 7258:O2|@7147,@7259 7259:O2|@7260,0 7260:O2|-7,@7261 7261:O8|@7263,@7262,2,0,1,0,0,0 7262:S12|72756e5f63616c6c35283129 7263:O4|4,@7264,@7154,0 7264:O2|@850,@7265 7265:O2|@5706,@7266 7266:O2|@7211,@7267 7267:O2|@7239,@7268 7268:O2|@7269,0 7269:O3|6,@441,4 7270:O3|1,@7272,@7271 7271:O3|3,@7529,79992 7272:O4|-2,1,@7273,0 7273:O2|@7190,@7274 7274:O2|@7191,@7275 7275:O2|@7218,@7276 7276:O2|@7247,@7277 7277:O2|@7278,0 7278:O2|53,@7241 7279:O2|@7281,@7280 7280:O2|@7282,0 7281:S14|52756e5f657863657074696f6e30 7282:O3|@7463,69,@7283 7283:O4|@7285,@7281,@7290,@7284 7284:O4|@7293,I48,0,0 7285:O3|I48,@7287,@7286 7286:O4|@7288,I48,0,0 7287:O3|1,@7531,@7530 7288:O3|0,@554,@7289 7289:O10|0,0,0,0,0,0,0,0,@7114,0 7290:O2|-1,@7291 7291:O2|-7,@7292 7292:O8|@441,@7281,0,0,1,0,0,0 7293:O3|0,@554,@7294 7294:O10|0,@7295,0,0,0,0,0,0,0,0 7295:O2|@7130,@7296 7296:O2|@7297,0 7297:O3|@7374,69,@7298 7298:O4|@7130,0,@268,@193 7299:O2|@7301,0 7300:S11|6164644f7665726c6f6164 7301:O3|@7374,69,@7302 7302:O4|@7300,-1,@3703,@7303 7303:O3|1,@7304,@926 7304:O3|1,@7306,@7305 7305:O3|3,@7533,79992 7306:O3|3,@7532,79992 7307:O2|@669,@7308 7308:O2|@7309,0 7309:O3|@7374,69,@667 7310:O2|@2454,@7311 7311:O2|@7312,0 7312:O3|@7387,69,@2452 7313:O2|@2730,@7314 7314:O2|@7316,@7315 7315:O2|@7317,0 7316:O3|@7387,69,@3183 7317:O3|@7374,69,@3190 7318:O2|@586,@7319 7319:O2|@7320,0 7320:O3|@7387,69,@587 7321:O2|61,@7322 7322:O2|@7323,0 7323:O3|@7374,69,@7324 7324:O4|61,-1,@7326,@7325 7325:O3|1,@7327,@178 7326:O2|-2,-1 7327:O4|-2,1,@7328,0 7328:O2|@7330,@7329 7329:O2|@7332,0 7330:O2|49,@7331 7331:O3|3,@7534,79996 7332:O2|50,@7331 7333:O2|@5727,@7334 7334:O2|@7335,0 7335:O3|@7387,69,@5725 7336:O2|@616,@7337 7337:O2|@7338,0 7338:O3|@7374,69,@614 7339:O2|@824,@7340 7340:O2|@7341,0 7341:O3|@7374,69,@822 7342:O2|@521,@7343 7343:O2|@7344,0 7344:O3|@7387,69,@522 7345:O2|@187,@7346 7346:O2|@7347,0 7347:O3|@7387,69,@188 7348:O2|@7349,0 7349:O3|@7387,69,@516 7350:C2,1000|4d8d7fe84c3b7d107303ff554049c747f8020000004d89fe49bd8096fcacaa2a00004d892e498946084d8d7fe84c3b7d107303ff554049c747f8020000004d89fd49bcb098fcacaa2a00004d896500498945084d8d7fe84c3b7d107303ff554049c747f8020000004d89fc49bbf09afcacaa2a00004d891c2449894424084d8d7fe84c3b7d107303ff554049c747f8020000004d89fb49ba9897fcacaa2a00004d8913498943084d8d7fe84c3b7d107303ff554049c747f8020000004d89fa49b9309efcacaa2a00004d890a498942084d8d7fe84c3b7d107303ff554049c747f8020000004d89f949b8309dfcacaa2a00004d8901498941084d8d7fe84c3b7d107303ff554049c747f8020000004d89f848bff08ffcacaa2a0000498938498940084d8d7fe84c3b7d107303ff554049c747f8020000004c89ff48be4092fcacaa2a0000488937488947084d8d7fe84c3b7d107303ff554049c747f8020000004c89fe48bb5895fcacaa2a000048891e488946084d8d7fe84c3b7d107303ff554049c747f8020000004c89fb48ba089cfcacaa2a0000488913488943084d8d7fe84c3b7d107303ff554049c747f8020000004c89fa48b91891fcacaa2a000048890a488942084d8d7fe84c3b7d107303ff554049c747f8020000004c89f9504956495549544953495249514950575653525148b8c899fcacaa2a0000488901488b442460488941084d8d7fe84c3b7d107303ff554049c747f8020000004c89f849be4086fcacaa2a00004c89304c8b7424604c8970084d8d7fe84c3b7d107303ff554049c747f8020000004d89fe49bd208afcacaa2a00004d892e4c8b6c24604d896e084d8d7fe84c3b7d107303ff554049c747f8020000004d89fd49bc108cfcacaa2a00004d8965004c8b6424604d8965084d8d7fe84c3b7d107303ff554049c747f8020000004d89fc49bb3088fcacaa2a00004d891c244c8b5c24604d895c24084d8d7fe84c3b7d107303ff554049c747f8020000004d89fb49ba6893fcacaa2a00004d89134c8b5424604d8953084d8d7fe84c3b7d107303ff554049c747f8020000004d89fa49b9008efcacaa2a00004d890a4c8b4c24604d894a084d8dbf68ffffff4c3b7d107303ff554049c747f8120000004d89f94c8b4424384d8981880000004c8b4424304d89818000000049895978488b5c24484989597049894968488b4c2450498949604c8b4424404d894158488b5c245849895950498971484d8959404989793849895130488b542428498951284d8951204d8969184d8971104d8961084989014d8d7fe04c3b7d107303ff554049c747f8030000004c89f948b8d04afcacaa2a00004889014c8949104c8b7424604c8971084889c84883c468c390909090|@7352,8191|26,0,@6733 67,0,@6739 109,0,@6745 152,0,@6736 193,0,@6753 234,0,@6751 275,0,@6716 316,0,@6722 357,0,@6730 398,0,@6748 439,0,@6719 500,0,@6742 546,0,@6691 592,0,@6701 638,0,@6706 685,0,@6696 733,0,@6725 779,0,@6711 964,0,@6618 7351:S6|69742d283129 7352:S21|4d414b455f28292e757365496e746f456e76283129 7353:MO1|@7 7354:MO1|0 7355:MO1|@34 7356:MO1|0 7357:MO1|0 7358:MO1|@75 7359:MO1|1209 7360:MO1|1208 7361:MB4096|282a0a09436f707972696768742028632920323030362d372020446176696420432e204a2e204d617474686577730a0a0954686973206c696272617279206973206672656520736f6674776172653b20796f752063616e2072656469737472696275746520697420616e642f6f720a096d6f6469667920697420756e64657220746865207465726d73206f662074686520474e55204c65737365722047656e6572616c205075626c69630a094c6963656e7365206173207075626c697368656420627920746865204672656520536f66747761726520466f756e646174696f6e3b206569746865720a0976657273696f6e20322e31206f6620746865204c6963656e73652c206f722028617420796f7572206f7074696f6e2920616e79206c617465722076657273696f6e2e0a090a0954686973206c69627261727920697320646973747269627574656420696e2074686520686f706520746861742069742077696c6c2062652075736566756c2c0a0962757420574954484f555420414e592057415252414e54593b20776974686f7574206576656e2074686520696d706c6965642077617272616e7479206f660a094d45524348414e544142494c495459206f72204649544e45535320464f52204120504152544943554c415220505552504f53452e20205365652074686520474e550a094c65737365722047656e6572616c205075626c6963204c6963656e736520666f72206d6f72652064657461696c732e0a090a09596f752073686f756c642068617665207265636569766564206120636f7079206f662074686520474e55204c65737365722047656e6572616c205075626c69630a094c6963656e736520616c6f6e6720776974682074686973206c6962726172793b206966206e6f742c20777269746520746f20746865204672656520536f6674776172650a09466f756e646174696f6e2c20496e632e2c203531204672616e6b6c696e2053742c20466966746820466c6f6f722c20426f73746f6e2c204d41202030323131302d3133303120205553410a2a290a0a282a20436f6d70696c65722074686520636f6d70696c657220616e64206578706f7274206974206173206120706f727461626c652066696c652e20205468652072657374206f66207468650a202020626f6f7473747261702070726f63657373206973207468656e20646f6e65207768656e2074686520706f727461626c652066696c6520697320696d706f727465642e202a290a0a506f6c794d4c2e7072696e745f646570746820303b0a0a506f6c794d4c2e6d616b6520226d6c736f757263652f4d4c436f6d70696c65722f426f6f74223b0a506f6c794d4c2e6d616b6520226d6c736f757263652f4d4c436f6d70696c6572223b0a0a506f6c794d4c2e7368617265436f6d6d6f6e44617461204d4c436f6d70696c65722e7368656c6c3b0a0a506f6c794d4c2e6578706f7274506f727461626c652822706f6c7974656d70222c0a20202020666e202829203d3e20284d4c436f6d70696c65722e7368656c6c28293b204f532e50726f636573732e65786974204f532e50726f636573732e73756363657373292068616e646c65205f203d3e204f532e50726f636573732e65786974204f532e50726f636573732e6661696c757265293b0a20202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020 7362:MO1|@85 7363:MO1|1 7364:MO1|0 7365:MO1|0 7366:MO1|-1 7367:MB4096|23206561746564207369676e6174757265204d4c436f6d70696c65720a73696f6e0a790a730a0a6d706f72740a20202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020 7368:MO1|0 7369:MO1|0 7370:MO1|@7373 7371:MO1|@164 7372:MO1|38 7373:MO81|80,0,0,0,0,0,0,0,@171,0,@487,@492,@495,0,@503,@524,0,0,0,@537,@543,0,@546,0,0,0,@6253,@6259,0,0,0,0,0,0,@6262,0,@6275,0,0,0,0,@6278,@6281,@6285,@6288,@6292,@6296,@6300,@7056,0,0,0,0,@7060,@7065,@7073,@7077,@7081,@7307,@7310,@7313,@7318,@7321,@7333,0,@7336,0,0,0,0,0,0,0,0,0,0,0,@7339,@7342,@7345,@170 7374:MO1|0 7375:MO1|@184 7376:MO1|@191 7377:MO1|0 7378:MO1|@116 7379:MO1|0 7380:MO1|0 7381:MO1|0 7382:MO1|0 7383:MO1|0 7384:MO1|0 7385:MO1|0 7386:MO1|0 7387:MO1|0 7388:MO1|0 7389:MO1|0 7390:MO1|0 7391:MO1|@193 7392:MO1|0 7393:MO1|@7396 7394:MO1|@554 7395:MO1|7 7396:MO11|10,@557,@897,0,@905,@913,@948,0,0,@6210,@556 7397:MO1|@193 7398:MO1|@576 7399:MO1|0 7400:MO1|@502 7401:MO1|0 7402:MO1|@193 7403:MO1|@611 7404:MO1|0 7405:MO1|0 7406:MO1|0 7407:MO1|0 7408:MO1|0 7409:MO1|0 7410:MO1|0 7411:MO1|@502 7412:MO1|0 7413:MO1|@502 7414:MO1|0 7415:MO1|@502 7416:MO1|0 7417:MO1|@502 7418:MO1|0 7419:MO1|@502 7420:MO1|0 7421:MO1|@193 7422:MO1|@797 7423:MO1|0 7424:MO1|0 7425:MO1|0 7426:MO1|0 7427:MO1|0 7428:MO1|0 7429:MO1|0 7430:MO1|0 7431:MO1|@193 7432:MO1|@193 7433:MO1|@193 7434:MO1|@193 7435:MO1|0 7436:MO1|0 7437:MO1|0 7438:MO1|0 7439:MO1|0 7440:MO1|0 7441:MO1|0 7442:MO1|0 7443:MO1|0 7444:MO1|0 7445:MO1|0 7446:MO1|0 7447:MO1|0 7448:MO1|0 7449:MO1|0 7450:MO1|0 7451:MO1|0 7452:MO1|0 7453:MO1|0 7454:MO1|0 7455:MO1|@7458 7456:MO1|@1183 7457:MO1|49 7458:MO273|272,0,0,@1185,@1187,0,0,0,0,0,@1189,0,0,@1191,0,0,0,0,0,0,@1193,0,0,@1195,0,0,0,0,@1197,0,0,0,0,0,0,0,@1199,0,0,0,0,0,0,@1200,0,0,0,0,0,0,0,@1201,0,0,@1203,@1205,@1207,@1209,@1211,@1212,@1214,@1216,@1217,0,@1219,0,0,@1221,0,0,0,0,0,@1223,0,0,0,@1225,0,0,@1227,0,0,0,0,0,0,@1229,0,0,0,0,0,@1231,0,0,0,@1233,0,0,0,0,0,@1235,0,@1237,@1239,0,0,@1241,0,0,0,@1243,0,0,0,0,0,0,0,0,0,0,0,@1245,0,0,0,0,0,0,0,0,0,0,0,0,0,0,@1246,0,0,0,@1248,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,@1250,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,@1252,0,0,@1254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,@1256,0,0,0,@1258,0,@1260,0,0,0,0,0,0,0,0,0,0,@1262,0,0,@1264,0,0,0,0,0,0,0,0,@1266,0,0,0,0,0,0,0,0,0,0,@1268,0,0,0,0,@1270,0,0,0,0,0,@1272,0,@1274,0,0,0,0,0,0,0,@1184,0,0,0,0,0,0,0 7459:MO1|0 7460:MO1|0 7461:MO1|@184 7462:MO1|0 7463:MO1|0 7464:MO1|0 7465:MO1|0 7466:MO1|0 7467:MO1|0 7468:MO1|@193 7469:MO1|@3188 7470:MO1|0 7471:MO1|0 7472:MO1|0 7473:MO1|0 7474:MO1|@193 7475:MO1|0 7476:MO1|0 7477:MO1|32 7478:MO1|I48 7479:MO1|57 7480:MO1|0 7481:MO1|68 7482:MO1|0 7483:MO1|0 7484:MO1|0 7485:MO1|0 7486:MO1|0 7487:MO1|@502 7488:MO1|0 7489:MO1|@193 7490:MO1|@7493 7491:MO1|@554 7492:MO1|7 7493:MO11|10,@6233,@6236,0,0,0,@6239,@6242,@6245,@6248,@6232 7494:MO1|@193 7495:MO1|@7498 7496:MO1|@164 7497:MO1|38 7498:MO81|80,0,0,@6308,0,@6324,0,0,@6333,0,@6342,0,0,@6349,@6356,0,@6371,0,@6378,@6431,0,@6449,0,0,@6456,@6479,@6486,@6493,@6500,@6590,0,0,@6609,@6755,@6769,0,0,0,0,0,0,0,@6776,0,@6784,0,0,@6793,@6800,@6810,@6817,@6845,@6857,@6864,0,0,@6877,@6884,0,0,0,@6891,0,0,0,0,@6909,@6967,@6989,0,0,0,@7004,@7018,0,0,0,@7032,@6307,0,0 7499:MO1|@193 7500:MO1|@502 7501:MO1|0 7502:MO1|0 7503:MO1|@7506 7504:MO1|@554 7505:MO1|1 7506:MO11|10,0,0,0,0,@6871,0,0,0,0,0 7507:MO1|@7510 7508:MO1|@554 7509:MO1|5 7510:MO11|10,0,@6917,@6932,0,0,@6935,@6950,0,0,@6916 7511:MO1|@193 7512:MO1|@193 7513:MO1|@193 7514:MO1|@193 7515:MO1|0 7516:MO1|@7519 7517:MO1|@7088 7518:MO1|10 7519:MO21|20,0,0,0,@7090,0,0,@7102,0,0,0,@7135,@7157,@7169,@7192,@7219,@7248,0,0,@7279,@7089 7520:MO1|@193 7521:MO1|@193 7522:MO1|0 7523:MO1|0 7524:MO1|@193 7525:MO1|@193 7526:MO1|@193 7527:MO1|@193 7528:MO1|@193 7529:MO1|@193 7530:MO1|0 7531:MO1|0 7532:MO1|@193 7533:MO1|@193 7534:MO1|@193 7535:MVO1|1 7536:MVO1|0 7537:MVO1|1 7538:MVO1|1 7539:MVO1|1 7540:MVO1|1 7541:MVO1|1 7542:MVO1|1 7543:MVO1|1 polyml.5.2.1/interruptpoly/0000755000175000017500000000000011100060535014723 5ustar daviddavidpolyml.5.2.1/interruptpoly/interruptpoly.c0000644000175000017500000000532210506226525020045 0ustar daviddavid/* Title: Windows application to send an interrupt to Poly Copyright (c) 2003 David C.J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ /* This program generates an interrupt Windows Poly/ML program in a similar way to sending a SIGINT (Control-C) interrupt in Unix. */ #include #include // DDE Commands. #define INTERRUPT_POLY "[Interrupt]" #define TERMINATE_POLY "[Terminate]" // Default DDE service name. #define POLYMLSERVICE "PolyML" DWORD dwDDEInstance; // DDE Callback function. HDDEDATA CALLBACK DdeCallBack(UINT uType, UINT uFmt, HCONV hconv, HSZ hsz1, HSZ hsz2, HDDEDATA hdata, DWORD dwData1, DWORD dwData2) { return (HDDEDATA) NULL; } void SendDDEMessage(LPCTSTR lpszMessage) { HCONV hcDDEConv; HDDEDATA res; // Send a DDE message to the process. DWORD dwInst = dwDDEInstance; HSZ hszServiceName = DdeCreateStringHandle(dwInst, POLYMLSERVICE, CP_WINANSI); hcDDEConv = DdeConnect(dwInst, hszServiceName, hszServiceName, NULL); DdeFreeStringHandle(dwInst, hszServiceName); res = DdeClientTransaction((LPBYTE)lpszMessage, sizeof(INTERRUPT_POLY), hcDDEConv, 0L, 0, XTYP_EXECUTE, TIMEOUT_ASYNC, NULL); if (res) DdeFreeDataHandle(res); } // Interrupt the ML process as though control-C had been pressed. void RunInterrupt() { SendDDEMessage(INTERRUPT_POLY); } int WINAPI WinMain( HINSTANCE hInstance, // handle to current instance HINSTANCE hPrevInstance, // handle to previous instance LPSTR lpCmdLine, // pointer to command line int nCmdShow // show state of window ) { // Initialise DDE. We only want to be a client. DdeInitialize(&dwDDEInstance, DdeCallBack, APPCMD_CLIENTONLY | CBF_SKIP_CONNECT_CONFIRMS | CBF_SKIP_DISCONNECTS, 0); RunInterrupt(); DdeNameService(dwDDEInstance, 0L, 0L, DNS_UNREGISTER); // Unitialise DDE. DdeUninitialize(dwDDEInstance); return 0; } polyml.5.2.1/interruptpoly/interruptpoly.dsp0000644000175000017500000000725210506226525020415 0ustar daviddavid# Microsoft Developer Studio Project File - Name="interruptpoly" - Package Owner=<4> # Microsoft Developer Studio Generated Build File, Format Version 6.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Application" 0x0101 CFG=interruptpoly - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE !MESSAGE NMAKE /f "interruptpoly.mak". !MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "interruptpoly.mak" CFG="interruptpoly - Win32 Debug" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "interruptpoly - Win32 Release" (based on "Win32 (x86) Application") !MESSAGE "interruptpoly - Win32 Debug" (based on "Win32 (x86) Application") !MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 # PROP Scc_ProjName "" # PROP Scc_LocalPath "H/PC Ver. 2.00" # PROP WCE_FormatVersion "" CPP=cl.exe MTL=midl.exe RSC=rc.exe !IF "$(CFG)" == "interruptpoly - Win32 Release" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "Release" # PROP BASE Intermediate_Dir "Release" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "IPRelease" # PROP Intermediate_Dir "IPRelease" # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c # ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c # SUBTRACT CPP /YX # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 # ADD BASE RSC /l 0x809 /d "NDEBUG" # ADD RSC /l 0x809 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 !ELSEIF "$(CFG)" == "interruptpoly - Win32 Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "Debug" # PROP BASE Intermediate_Dir "Debug" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "IPDebug" # PROP Intermediate_Dir "IPDebug" # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c # ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c # SUBTRACT CPP /YX # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 # ADD BASE RSC /l 0x809 /d "_DEBUG" # ADD RSC /l 0x809 /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept !ENDIF # Begin Target # Name "interruptpoly - Win32 Release" # Name "interruptpoly - Win32 Debug" # Begin Source File SOURCE=.\interruptpoly.c # End Source File # End Target # End Project polyml.5.2.1/libpolymain/0000755000175000017500000000000011100060535014302 5ustar daviddavidpolyml.5.2.1/libpolymain/Makefile.am0000644000175000017500000000037410537253036016357 0ustar daviddavidAUTOMAKE_OPTIONS=foreign AM_CPPFLAGS = $(ARCHFLAG) $(OSFLAG) -Wall AM_CFLAGS = $(ARCHFLAG) $(OSFLAG) -Wall -fno-strict-aliasing lib_LTLIBRARIES = libpolymain.la libpolymain_la_LDFLAGS = -static -version-info 0:0 libpolymain_la_SOURCES = polystub.c polyml.5.2.1/libpolymain/Makefile.in0000644000175000017500000003501010701427251016356 0ustar daviddavid# Makefile.in generated by automake 1.10 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = libpolymain DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; am__installdirs = "$(DESTDIR)$(libdir)" libLTLIBRARIES_INSTALL = $(INSTALL) LTLIBRARIES = $(lib_LTLIBRARIES) libpolymain_la_LIBADD = am_libpolymain_la_OBJECTS = polystub.lo libpolymain_la_OBJECTS = $(am_libpolymain_la_OBJECTS) libpolymain_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(libpolymain_la_LDFLAGS) $(LDFLAGS) -o $@ DEFAULT_INCLUDES = -I. -I$(top_builddir)@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = $(libpolymain_la_SOURCES) DIST_SOURCES = $(libpolymain_la_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCAS = @CCAS@ CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ ECHO = @ECHO@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSFLAG = @OSFLAG@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ POW_LIB = @POW_LIB@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ XMKMF = @XMKMF@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_F77 = @ac_ct_F77@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = foreign AM_CPPFLAGS = $(ARCHFLAG) $(OSFLAG) -Wall AM_CFLAGS = $(ARCHFLAG) $(OSFLAG) -Wall -fno-strict-aliasing lib_LTLIBRARIES = libpolymain.la libpolymain_la_LDFLAGS = -static -version-info 0:0 libpolymain_la_SOURCES = polystub.c all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign libpolymain/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --foreign libpolymain/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)" @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ if test -f $$p; then \ f=$(am__strip_dir) \ echo " $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \ else :; fi; \ done uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ p=$(am__strip_dir) \ echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \ $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done libpolymain.la: $(libpolymain_la_OBJECTS) $(libpolymain_la_DEPENDENCIES) $(libpolymain_la_LINK) -rpath $(libdir) $(libpolymain_la_OBJECTS) $(libpolymain_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/polystub.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: for dir in "$(DESTDIR)$(libdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-exec-am: install-libLTLIBRARIES install-html: install-html-am install-info: install-info-am install-man: install-pdf: install-pdf-am install-ps: install-ps-am installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-libLTLIBRARIES .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libLTLIBRARIES clean-libtool ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am \ install-libLTLIBRARIES install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am uninstall-libLTLIBRARIES # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: polyml.5.2.1/libpolymain/PolyMainLib.dsp0000644000175000017500000001174610673227373017225 0ustar daviddavid# Microsoft Developer Studio Project File - Name="PolyMainLib" - Package Owner=<4> # Microsoft Developer Studio Generated Build File, Format Version 6.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Static Library" 0x0104 CFG=PolyMainLib - Win32 IntDebug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE !MESSAGE NMAKE /f "PolyMainLib.mak". !MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "PolyMainLib.mak" CFG="PolyMainLib - Win32 IntDebug" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "PolyMainLib - Win32 Release" (based on "Win32 (x86) Static Library") !MESSAGE "PolyMainLib - Win32 Debug" (based on "Win32 (x86) Static Library") !MESSAGE "PolyMainLib - Win32 IntDebug" (based on "Win32 (x86) Static Library") !MESSAGE "PolyMainLib - Win32 IntRelease" (based on "Win32 (x86) Static Library") !MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 # PROP Scc_ProjName "" # PROP Scc_LocalPath "" CPP=cl.exe RSC=rc.exe !IF "$(CFG)" == "PolyMainLib - Win32 Release" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "PolyMainLib___Win32_Release" # PROP BASE Intermediate_Dir "PolyMainLib___Win32_Release" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "Release" # PROP Intermediate_Dir "Release" # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c # ADD CPP /nologo /MT /W3 /GX /O2 /I ".." /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "WINDOWS_PC" /D "i386" /FD /c # SUBTRACT CPP /YX # ADD BASE RSC /l 0x809 /d "NDEBUG" # ADD RSC /l 0x809 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LIB32=link.exe -lib # ADD BASE LIB32 /nologo # ADD LIB32 /nologo !ELSEIF "$(CFG)" == "PolyMainLib - Win32 Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "PolyMainLib___Win32_Debug" # PROP BASE Intermediate_Dir "PolyMainLib___Win32_Debug" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "Debug" # PROP Intermediate_Dir "Debug" # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c # ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I ".." /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "WINDOWS_PC" /D "i386" /YX /FD /GZ /c # ADD BASE RSC /l 0x809 /d "_DEBUG" # ADD RSC /l 0x809 /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LIB32=link.exe -lib # ADD BASE LIB32 /nologo # ADD LIB32 /nologo !ELSEIF "$(CFG)" == "PolyMainLib - Win32 IntDebug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "PolyMainLib___Win32_IntDebug" # PROP BASE Intermediate_Dir "PolyMainLib___Win32_IntDebug" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "IntDebug" # PROP Intermediate_Dir "IntDebug" # PROP Target_Dir "" # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I ".." /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c # ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I ".." /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "WINDOWS_PC" /D "i386" /YX /FD /GZ /c # ADD BASE RSC /l 0x809 /d "_DEBUG" # ADD RSC /l 0x809 /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LIB32=link.exe -lib # ADD BASE LIB32 /nologo # ADD LIB32 /nologo !ELSEIF "$(CFG)" == "PolyMainLib - Win32 IntRelease" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "PolyMainLib___Win32_IntRelease" # PROP BASE Intermediate_Dir "PolyMainLib___Win32_IntRelease" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "IntRelease" # PROP Intermediate_Dir "IntRelease" # PROP Target_Dir "" # ADD BASE CPP /nologo /MT /W3 /GX /O2 /I ".." /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /FD /c # SUBTRACT BASE CPP /YX # ADD CPP /nologo /MT /W3 /GX /O2 /I ".." /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "WINDOWS_PC" /D "i386" /FD /c # SUBTRACT CPP /YX # ADD BASE RSC /l 0x809 /d "NDEBUG" # ADD RSC /l 0x809 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LIB32=link.exe -lib # ADD BASE LIB32 /nologo # ADD LIB32 /nologo !ENDIF # Begin Target # Name "PolyMainLib - Win32 Release" # Name "PolyMainLib - Win32 Debug" # Name "PolyMainLib - Win32 IntDebug" # Name "PolyMainLib - Win32 IntRelease" # Begin Group "Source Files" # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" # Begin Source File SOURCE=.\polystub.c # End Source File # End Group # Begin Group "Header Files" # PROP Default_Filter "h;hpp;hxx;hm;inl" # Begin Source File SOURCE=.\standalonedb.h # End Source File # End Group # End Target # End Project polyml.5.2.1/libpolymain/polystub.c0000644000175000017500000000261110673210630016336 0ustar daviddavid/* Title: polystub.c Copyright (c) 2006 David C.J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ // This is the start-up function for Poly/ML. It simply picks up the // pointer to the exported data and calls the main program. #ifdef HAVE_CONFIG_H #include "config.h" #elif defined(WIN32) #include "winconfig.h" #else #error "No configuration file" #endif #include "polyexports.h" #ifdef WINDOWS_PC int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { return PolyWinMain(hInstance, hPrevInstance, lpCmdLine, nCmdShow, &poly_exports); } #else int main(int argc, char *argv[]) { return polymain(argc, argv, &poly_exports); } #endif polyml.5.2.1/libpolyml/0000755000175000017500000000000011100060542013764 5ustar daviddavidpolyml.5.2.1/libpolyml/Console.cpp0000644000175000017500000010534610673207732016125 0ustar daviddavid/* Title: Poly/ML Console Window. Copyright (c) 2000 David C. J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifdef HAVE_CONFIG_H #include "config.h" #elif defined(WIN32) #include "winconfig.h" #else #error "No configuration file" #endif #ifdef HAVE_STDIO_H #include #endif #ifdef HAVE_WINDOWS_H #include #endif #ifdef HAVE_TCHAR_H #include #endif #ifdef HAVE_IO_H #include #endif #ifdef HAVE_FCNTL_H #include #endif #ifdef HAVE_ERRNO_H #include #endif #ifdef HAVE_ASSERT_H #include #define ASSERT(x) assert(x) #else #define ASSERT(x) #endif #include "resource.h" #include "mpoly.h" #include "PolyControl.h" #include "diagnostics.h" #include "mpoly.h" #include "run_time.h" #include "sighandler.h" #include "console.h" #include "polyexports.h" #include "processes.h" /* This module takes the place of the Windows console which has a number of problems, apart from not being a pleasant user interface. It creates a main window containing an edit control, which it has to sub-class so that we can receive all the characters as they are typed. I've written this in C using the direct Windows calls to make it fairly independent of the compiler. It would definitely be simpler and cleaner written in C++ using MFC. DCJM 30/5/2000. */ HANDLE hMainThread = NULL; // Handle to ML thread. HWND hMainWindow = NULL; // Main window - exported. int useConsole; // Zero if callers should read from stdin. HINSTANCE hApplicationInstance; // Application instance (exported) static HANDLE hReadFromML; // Handles to pipe from ML thread static WNDPROC wpOrigEditProc; // Saved window proc. static BOOL fAtEnd; // True if we are at the end of the window static HWND hEditWnd; // Edit sub-window static CHAR *pchInputBuffer; // Buffer to text read. static int nBuffLen; // Length of input buffer. static int nNextPosn; // Position to add input. (<= nBuffLen) static int nAvailable; // Position of "committed" input (<= nNextPosn) static int nReadPosn; // Position of last read (<= nAvailable) static BOOL fCtrlC; // TRUE if we have just pressed ctrl-C. static CRITICAL_SECTION csIOInterlock; static HANDLE hInputEvent; // Signalled when input is available. static HWND hDDEWindow; // Window to handle DDE requests from ML thread. static char *lpszServiceName; static LPTSTR lpArgs[100]; // Argument list. static int nArgs; static int initDDEControl(char *lpszName); static void uninitDDEControl(void); static DWORD dwDDEInstance; static int nInitialShow; // Value of nCmdShow passed in. static bool isActive = false; // Default DDE service name. #define POLYMLSERVICE "PolyML" /* Messages interpreted by the main window thread. */ #define WM_ADDTEXT WM_APP #define WM_DDESTART (WM_APP+1) #define WM_DDESTOP (WM_APP+2) #define WM_DDEEXEC (WM_APP+3) /* These functions are called by the I/O routines to test for input and to read from the keyboard. */ int isConsoleInput(void) { int nRes; if (! isActive) { ShowWindow(hMainWindow, nInitialShow); isActive = true; } EnterCriticalSection(&csIOInterlock); nRes = (nAvailable != nReadPosn) || fCtrlC; LeaveCriticalSection(&csIOInterlock); return nRes; } /* Read characters from the input. Only returns zero on EOF. */ int getConsoleInput(char *buff, int nChars) { int nRes = 0; if (! isActive) { ShowWindow(hMainWindow, nInitialShow); isActive = true; } EnterCriticalSection(&csIOInterlock); while (nAvailable == nReadPosn || fCtrlC) { if (fCtrlC) { // If we had a control-C we treat it much as an interrupted // system call in Unix. fCtrlC = FALSE; if (nAvailable == nReadPosn) ResetEvent(hInputEvent); LeaveCriticalSection(&csIOInterlock); errno = EINTR; return -1; } ResetEvent(hInputEvent); /* Must block until there is input. This will only actually happen when called from HandleINT since normally we check that input is available first. We check for messages while blocking since we may have a DDE hidden window around. */ LeaveCriticalSection(&csIOInterlock); while (MsgWaitForMultipleObjects(1, &hInputEvent, FALSE, INFINITE, QS_ALLINPUT) == WAIT_OBJECT_0+1) { MSG Msg; while (PeekMessage(&Msg, NULL, 0, 0, PM_REMOVE)) { TranslateMessage(&Msg); DispatchMessage(&Msg); } } EnterCriticalSection(&csIOInterlock); } // Copy the available characters into the buffer. while (nReadPosn != nAvailable && nChars-- > 0) { char ch; ch = pchInputBuffer[nReadPosn]; if (ch == 4 || ch == 26) { // EOF character. We have to return this as // a separate buffer of size zero so if we've // already returned some characters we leave it till // next time. if (nRes == 0) if (++nReadPosn == nBuffLen) nReadPosn = 0; break; } buff[nRes++] = ch; if (++nReadPosn == nBuffLen) nReadPosn = 0; } if (nAvailable == nReadPosn) ResetEvent(hInputEvent); LeaveCriticalSection(&csIOInterlock); return nRes; } /* All addition is made at the end of the text so this function is called to find out if we're there. */ static void MoveToEnd(void) { if (! fAtEnd) { // Make sure any text we add goes at the end. LRESULT dwEnd = SendMessage(hEditWnd, WM_GETTEXTLENGTH, 0, 0); SendMessage(hEditWnd, EM_SETSEL, dwEnd, dwEnd); fAtEnd = TRUE; } } // Remove lines at the beginning until we have enough space. // If nChars is bigger than the limit we'll delete everything and // return. Returns the space removed. static DWORD CheckForScreenSpace(LRESULT nChars) { DWORD dwRemoved = 0; // TODO: We could avoid these calls by remembering this information. LRESULT limit = SendMessage(hEditWnd, EM_GETLIMITTEXT, 0, 0); LRESULT size = SendMessage(hEditWnd, WM_GETTEXTLENGTH, 0, 0); while (nChars+size >= limit) { int i; if (size == 0) return dwRemoved; for (i = 0; i < size; i++) { if (SendMessage(hEditWnd, EM_LINEFROMCHAR, i, 0) != 0) break; } SendMessage(hEditWnd, EM_SETSEL, 0, i); SendMessage(hEditWnd, WM_CLEAR, 0, 0); fAtEnd = FALSE; MoveToEnd(); size -= i; dwRemoved += i; } return dwRemoved; } // Expand the buffer if necessary to allow room for // additional characters. static void CheckForBufferSpace(int nChars) { BOOL fOverflow; if (nNextPosn >= nReadPosn) fOverflow = nNextPosn+nChars >= nReadPosn+nBuffLen; else fOverflow = nNextPosn+nChars >= nReadPosn; if (fOverflow) { int nOldLen = nBuffLen; // Need more space. nBuffLen = nBuffLen + nChars + nBuffLen/2; pchInputBuffer = (char*)realloc(pchInputBuffer, nBuffLen); // Have to copy any data that has wrapped round to the // new area. if (nNextPosn < nReadPosn) { int nExtra = nBuffLen-nOldLen; if (nExtra >= nNextPosn) { // All the space before will fit in the new area. memcpy(pchInputBuffer+nOldLen, pchInputBuffer, nNextPosn); } else { // Some of the space before will fit but not all. memcpy(pchInputBuffer+nOldLen, pchInputBuffer, nExtra); memmove(pchInputBuffer, pchInputBuffer+nExtra, nNextPosn-nExtra); } // Adjust these pointers modulo the old and new lengths. if (nAvailable < nNextPosn) nAvailable += nOldLen; if (nAvailable >= nBuffLen) nAvailable -= nBuffLen; nNextPosn += nOldLen; if (nNextPosn >= nBuffLen) nNextPosn -= nBuffLen; } } ASSERT(nBuffLen >= 0 && nAvailable >= 0 && nNextPosn >= 0 && nReadPosn >= 0 && nAvailable < nBuffLen && nReadPosn < nBuffLen && nReadPosn < nBuffLen); if (nNextPosn > nReadPosn) ASSERT(nAvailable >= nReadPosn && nAvailable <= nNextPosn); else ASSERT(nNextPosn != nReadPosn && nAvailable <= nNextPosn || nAvailable >= nReadPosn); } /* DDE requests. DDE uses an internal window for communication and so all DDE operations on a particular instance handle have to be performed by the same thread. That thread also has to check and process the message queue. The previous version did this by having the ML thread make the DDE calls and processed the message list in an "interrupt" routine. That complicates the Windows interface so now the ML thread sends messages to the main window thread to do the work. */ HCONV StartDDEConversation(char *serviceName, char *topicName) { return (HCONV)SendMessage(hDDEWindow, WM_DDESTART, (WPARAM)serviceName, (LPARAM)topicName); } void CloseDDEConversation(HCONV hConv) { SendMessage(hDDEWindow, WM_DDESTOP, 0, (LPARAM)hConv); } LRESULT ExecuteDDE(char *command, HCONV hConv) { return SendMessage(hDDEWindow, WM_DDEEXEC, (WPARAM)hConv, (LPARAM)command); } LRESULT CALLBACK DDEWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_DDESTART: { HCONV hcDDEConv; HSZ hszServiceName, hszTopicName; char *serviceName = (char*)wParam; char *topicName = (char*)lParam; hszServiceName = DdeCreateStringHandle(dwDDEInstance, serviceName, CP_WINANSI); hszTopicName = DdeCreateStringHandle(dwDDEInstance, topicName, CP_WINANSI); hcDDEConv = DdeConnect(dwDDEInstance, hszServiceName, hszTopicName, NULL); DdeFreeStringHandle(dwDDEInstance, hszServiceName); DdeFreeStringHandle(dwDDEInstance, hszTopicName); if (hcDDEConv == 0) { // UINT nErr = DdeGetLastError(dwDDEInstance); return 0; } return (LRESULT)hcDDEConv; } case WM_DDESTOP: DdeDisconnect((HCONV)lParam); return 0; case WM_DDEEXEC: { HDDEDATA res; LPSTR command = (LPSTR)lParam; res = DdeClientTransaction((LPBYTE)command, (DWORD)(strlen(command)+1), (HCONV)wParam, 0L, 0, XTYP_EXECUTE, TIMEOUT_ASYNC, NULL); if (res != 0) { DdeFreeDataHandle(res); // Succeeded - return true; return 1; } else if (DdeGetLastError(dwDDEInstance) == DMLERR_BUSY) // If it's busy return false. return 0; else return -1; // An error } default: return DefWindowProc(hwnd, uMsg, wParam, lParam); } } /* In order to be able to handle all the keys we need to sub-class the edit control. */ static LRESULT APIENTRY EditSubclassProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_GETDLGCODE: return DLGC_WANTALLKEYS | DLGC_WANTCHARS; case WM_KEYDOWN: switch(wParam) { case VK_DELETE: // Ignore the delete key. Beep perhaps? return 0; case VK_LEFT: // If we move the cursor we are probably not case VK_RIGHT: // at the end. case VK_UP: case VK_DOWN: fAtEnd = FALSE; default: return CallWindowProc(wpOrigEditProc, hwnd, uMsg, wParam, lParam); } case WM_CHAR: { LPARAM nRpt = lParam & 0xffff; EnterCriticalSection(&csIOInterlock); if (wParam == '\b') { // Delete the previous character(s). if (nNextPosn != nAvailable) { int nCanRemove = 0; while (nRpt-- > 0 && nNextPosn != nAvailable) { nCanRemove++; if (nNextPosn == 0) nNextPosn = nBuffLen; nNextPosn--; } lParam = (lParam & 0xffff0000) | nCanRemove; LeaveCriticalSection(&csIOInterlock); return CallWindowProc(wpOrigEditProc, hwnd, uMsg, wParam, lParam); } } else if (wParam == 22) // Control-V { // Generate a Paste command. SendMessage(hMainWindow, WM_COMMAND, ID_EDIT_PASTE, 0); } else if (wParam == 3) // Control-C { // In Windows this has the effect of Copy but we also // want it to generate an interrupt. I've chosen to // make it copy if there is any selection, otherwise to // generate an interrupt. We'll have to see how this works. DWORD dwStart, dwEnd; SendMessage(hwnd, EM_GETSEL, (WPARAM)&dwStart, (LPARAM)&dwEnd); if (dwStart != dwEnd) { SendMessage(hwnd, WM_COPY, 0, 0); } else { // Discard any type-ahead. nNextPosn = nAvailable = nReadPosn = 0; RequestConsoleInterrupt(); // Set the ctrl-C flag and make sure the ML thread // is unblocked. fCtrlC = TRUE; SetEvent(hInputEvent); } } else if (wParam >= ' ' || wParam == '\r' || wParam == '\t' || wParam == 4 /* ctrl-D */ || wParam == 26 /* ctrl-Z */) { CheckForBufferSpace(nRpt); CheckForScreenSpace(nRpt); // Make sure we have space on the screen. // Add the character(s) to the buffer. while (nRpt-- > 0) { if (wParam == '\r') { pchInputBuffer[nNextPosn++] = '\n'; nAvailable = nNextPosn; SetEvent(hInputEvent); } else if (wParam == 4 || wParam == 26) { // Treat either of these as EOF chars. pchInputBuffer[nNextPosn++] = wParam; nAvailable = nNextPosn; SetEvent(hInputEvent); wParam = 4; } else pchInputBuffer[nNextPosn++] = wParam; if (nNextPosn == nBuffLen) nNextPosn = 0; if (nAvailable == nBuffLen) nAvailable = 0; } MoveToEnd(); LeaveCriticalSection(&csIOInterlock); // Add this to the window except if it's ctrl-Z or ctrl-D. if (wParam == 4 || wParam == 26) return 0; return CallWindowProc(wpOrigEditProc, hwnd, uMsg, wParam, lParam); } LeaveCriticalSection(&csIOInterlock); return 0; } case WM_DESTROY: { HFONT hFount; // Switch back to the old window proc just in case. #ifdef _M_AMD64 SetWindowLongPtr(hwnd, GWLP_WNDPROC, (INT_PTR)wpOrigEditProc); SetWindowLongPtr(hwnd, GWLP_USERDATA, 0); #else SetWindowLong(hwnd, GWL_WNDPROC, (LONG)wpOrigEditProc); SetWindowLong(hwnd, GWL_USERDATA, 0); #endif // Get the fount and delete it if it's not the default. hFount = (HFONT)SendMessage(hwnd, WM_GETFONT, 0, 0); if (hFount != NULL) { SendMessage(hwnd, WM_SETFONT, (WPARAM)NULL, FALSE); DeleteObject(hFount); } // Call the original to finish off. return CallWindowProc(wpOrigEditProc, hwnd, uMsg, wParam, lParam); } case WM_LBUTTONDOWN: case WM_RBUTTONDOWN: case WM_LBUTTONUP: case WM_RBUTTONUP: case EM_SETSEL: // Need to record that we may no longer be at the end of the text. fAtEnd = FALSE; // Drop through to default. default: return CallWindowProc(wpOrigEditProc, hwnd, uMsg, wParam, lParam); } } /* This function is only used when the "About Poly/ML" dialogue box is being displayed. */ static BOOL CALLBACK AboutProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_INITDIALOG: return 1; case WM_COMMAND: if (wParam == IDOK) { EndDialog(hwndDlg, IDOK); } default: return 0; } } #define CF_TEXTFORMAT CF_TEXT /* This is the main window procedure. */ LRESULT CALLBACK WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_CREATE: { hEditWnd = CreateWindow(_T("EDIT"), NULL, WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_HSCROLL | ES_LEFT | ES_MULTILINE | ES_AUTOVSCROLL | ES_AUTOHSCROLL, 0, 0, 0, 0, hwnd, 0, hApplicationInstance, NULL); if (hEditWnd == NULL) return -1; /* Failed */ // Sub-class this so that we get the keys that are pressed. // Save the old window proc. #ifdef _M_AMD64 wpOrigEditProc = (WNDPROC)GetWindowLongPtr(hEditWnd, GWLP_WNDPROC); // Set our new window proc. SetWindowLongPtr(hEditWnd, GWLP_WNDPROC, (INT_PTR)EditSubclassProc); #else wpOrigEditProc = (WNDPROC)GetWindowLong(hEditWnd, GWL_WNDPROC); // Set our new window proc. SetWindowLong(hEditWnd, GWL_WNDPROC, (LONG)EditSubclassProc); #endif fAtEnd = TRUE; // Get a 10 point Courier fount. HDC hDC = GetDC(hEditWnd); int nHeight = -MulDiv(10, GetDeviceCaps(hDC, LOGPIXELSY), 72); ReleaseDC(hEditWnd, hDC); HFONT hFont = CreateFont(nHeight, 0, 0, 0, FW_DONTCARE, FALSE, FALSE, FALSE, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, FIXED_PITCH | FF_MODERN, "Courier"); if (hFont) SendMessage(hEditWnd, WM_SETFONT, (WPARAM)hFont, 0); SendMessage(hEditWnd, WM_SETTEXT, 0, (LPARAM) ""); return 0; /* Succeeded */ } case WM_SETFOCUS: /* When the focus arrives at the parent set the focus on the edit window. */ SetFocus(hEditWnd); return 0; case WM_SIZE: { LONG offset = 0; // Make the edit control the size of the window's client area. MoveWindow(hEditWnd, 0, offset, LOWORD(lParam), HIWORD(lParam)-offset, TRUE); } return 0; case WM_DESTROY: PostQuitMessage(0); return 0; case WM_COMMAND: switch(wParam) { case ID_EDIT_COPY: SendMessage(hEditWnd, WM_COPY, 0, 0); return 0; case ID_EDIT_PASTE: if (IsClipboardFormatAvailable(CF_TEXTFORMAT)) { // We need to check that we have enough space // BEFORE we try pasting. HANDLE hClip; LPCTSTR lpszText; OpenClipboard(hEditWnd); hClip = GetClipboardData(CF_TEXTFORMAT); lpszText = (LPCTSTR)GlobalLock(hClip); CheckForScreenSpace(lstrlen(lpszText)); MoveToEnd(); // Add it to the screen. SendMessage(hEditWnd, EM_REPLACESEL, FALSE, (LPARAM)lpszText); // Add to the type-ahead. EnterCriticalSection(&csIOInterlock); // Check there's enough space. This may be an // over-estimate since we replace CRNL by NL. CheckForBufferSpace(lstrlen(lpszText)); while (*lpszText) { // The data we're pasting contains CRNL as // line separators. if (lpszText[0] == '\r' && lpszText[1] == '\n') { pchInputBuffer[nNextPosn++] = '\n'; if (nNextPosn == nBuffLen) nNextPosn = 0; nAvailable = nNextPosn; lpszText += 2; } else { pchInputBuffer[nNextPosn++] = (char)*lpszText++; if (nNextPosn == nBuffLen) nNextPosn = 0; if (lpszText[0] == 4 || lpszText[0] == 26) nAvailable = nNextPosn; // EOF characters. } } if (nAvailable != nReadPosn) SetEvent(hInputEvent); LeaveCriticalSection(&csIOInterlock); GlobalUnlock(hClip); CloseClipboard(); } return 0; case ID_HELP_ABOUT: DialogBox(hApplicationInstance, MAKEINTRESOURCE(IDD_ABOUT_POLYML), hwnd, (DLGPROC)AboutProc); return 0; case ID_FILE_QUIT: if (MessageBox(hwnd, _T("Are you sure you want to quit?"), _T("Confirm Quit"), MB_OKCANCEL) == IDOK) processes->Exit(0); return 0; case ID_RUN_INTERRUPT: // Discard any type-ahead. nNextPosn = nAvailable = nReadPosn = 0; RequestConsoleInterrupt(); // Set the ctrl-C flag and make sure the ML thread // is unblocked. fCtrlC = TRUE; SetEvent(hInputEvent); return 0; default: return DefWindowProc(hwnd, uMsg, wParam, lParam); } case WM_CLOSE: if (MessageBox(hwnd, _T("Are you sure you want to quit?"), _T("Confirm Quit"), MB_OKCANCEL) == IDOK) processes->Exit(0); return 0; case WM_ADDTEXT: // Request from the input thread to add some text. { // Remember the old selection and the original length. LRESULT lrStart, lrEnd; SendMessage(hEditWnd, EM_GETSEL, (WPARAM)&lrStart, (LPARAM)&lrEnd); LRESULT lrLength = SendMessage(hEditWnd, WM_GETTEXTLENGTH, 0, 0); LRESULT lrRemoved = CheckForScreenSpace(lrLength); MoveToEnd(); SendMessage(hEditWnd, EM_REPLACESEL, 0, lParam); // If the old selection was at the end (i.e. the pointer // was at the end) we don't reinstate the old selection. if (lrStart != lrLength && lrEnd > lrRemoved) { if (lrStart > lrRemoved) lrStart -= lrRemoved; else lrStart = 0; fAtEnd = FALSE; SendMessage(hEditWnd, EM_SETSEL, lrStart, lrEnd-lrRemoved); } return 0; } default: return DefWindowProc(hwnd, uMsg, wParam, lParam); } } static DWORD WINAPI InThrdProc(LPVOID lpParameter) // This thread deals with input from the ML process. { while (1) { CHAR buff[4096]; DWORD dwRead; if (! ReadFile(hReadFromML, buff, sizeof(buff)-1, &dwRead, NULL)) return 0; buff[dwRead] = 0; if (! isActive) { ShowWindow(hMainWindow, nInitialShow); isActive = true; } SendMessage(hMainWindow, WM_ADDTEXT, 0, (LPARAM)buff); } } static DWORD WINAPI MainThrdProc(LPVOID lpParameter) // This thread simply continues with the rest of the ML // initialistion. { exportDescription *exports = (exportDescription *)lpParameter; return polymain(nArgs, lpArgs, exports); } int PolyWinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow, exportDescription *exports ) { HANDLE hWriteToScreen = INVALID_HANDLE_VALUE; BOOL fNext = FALSE; DWORD dwInId, dwRes; InitializeCriticalSection(&csIOInterlock); hInputEvent = CreateEvent(NULL, TRUE, FALSE, NULL); hApplicationInstance = hInstance; // If we already have standard input and standard output we // don't replace them, otherwise we create a window and pipes // to connect it. We use _get_osfhandle here because that // checks for handles passed in in the STARTUPINFO as well as // those inherited as standard handles. if (_get_osfhandle(fileno(stdin)) == -1 || _get_osfhandle(fileno(stdout)) == -1) { WNDCLASSEX wndClass; ATOM atClass; // Allocate initial buffer space to maintain the invariants. nBuffLen = 80; pchInputBuffer = (char*)malloc(nBuffLen); if (!CreatePipe(&hReadFromML, &hWriteToScreen, NULL, 0)) { return 1; } HANDLE hTemp; // The pipe handles we have are not inheritable. We have to // make hWriteToScreen an inheritable handle so that // processes we fork using "system" or "_popen" // (used for profiling) can write to the screen. if (! DuplicateHandle(GetCurrentProcess(), hWriteToScreen, GetCurrentProcess(), &hTemp, 0, TRUE, // inheritable DUPLICATE_SAME_ACCESS )) { return 1; } CloseHandle(hWriteToScreen); hWriteToScreen = hTemp; // We never use stdin internally if we have our own console // but _pipe, (used in profiling) at least, needs stdin to // be non-empty. Open it on NUL. fclose(stdin); int newstdin = open("NUL", _O_RDONLY); _dup2(newstdin, 0); // Open it for stdio as well. Because the entries in the FILE table // are opened in order we need to do this to ensure that stdout and // stderr point to the correct entries. fdopen(0, "rt"); SetStdHandle(STD_INPUT_HANDLE, (HANDLE)_get_osfhandle(newstdin)); // Replace the standard Windows handles. SetStdHandle(STD_OUTPUT_HANDLE, hWriteToScreen); SetStdHandle(STD_ERROR_HANDLE, hWriteToScreen); // Close the stdio streams. They may have been opened // on dummy handles. fclose(stdout); fclose(stderr); // Set up the new handles. int newstdout = _open_osfhandle ((INT_PTR)hWriteToScreen, _O_TEXT); if (newstdout != 1) _dup2(newstdout, 1); _dup2(newstdout, 2); // Stderr // Open for stdio. fdopen(1, "wt"); // == stdout fdopen(2, "wt"); // == stderr // Set stderr to unbuffered so that messages get written correctly. // (stdout is explicitly flushed). setvbuf(stderr, NULL, _IONBF, 0); // Create a thread to manage the output from ML. HANDLE hInThread = CreateThread(NULL, 0, InThrdProc, 0, 0, &dwInId); CloseHandle(hInThread); wndClass.cbSize = sizeof(wndClass); wndClass.style = 0; wndClass.lpfnWndProc = WndProc; wndClass.cbClsExtra = 0; wndClass.cbWndExtra = 0; wndClass.hInstance = hInstance; wndClass.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON)); wndClass.hCursor = NULL; // For the moment wndClass.hbrBackground = NULL; // For the moment wndClass.lpszClassName = _T("PolyMLWindowClass"); wndClass.lpszMenuName = MAKEINTRESOURCE(IDR_MENU); wndClass.hIconSm = NULL; // For the moment DWORD dwStyle = WS_OVERLAPPEDWINDOW; if ((atClass = RegisterClassEx(&wndClass)) == 0) { return 1; } // Initially created invisible. hMainWindow = CreateWindow( (LPTSTR)(LONG)atClass, _T("Poly/ML"), dwStyle, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, // handle to menu or child-window identifier hInstance, NULL // pointer to window-creation data ); if (hMainWindow == NULL) { return 1; } // Save this setting and only apply it when we actually // read from or write to the main window. That way if we are // actually using another window this will never get displayed. nInitialShow = nCmdShow; useConsole = 1; } else { // If we're not creating a window it's possible that we could still // call getConsoleInput if the handle underlying stdin is closed for // some reason. Set the event so that we return EOF in that case. SetEvent(hInputEvent); useConsole = 0; } // Convert the command line into Unix-style arguments. LPTSTR lpCommandLine = GetCommandLine(); nArgs = 0; while (*lpCommandLine != 0) { if (*lpCommandLine == '"') { // Treat quoted items as a whole. lpCommandLine++; lpArgs[nArgs++] = lpCommandLine; while (*lpCommandLine != 0 && *lpCommandLine != '"') lpCommandLine++; if (*lpCommandLine != 0) *lpCommandLine++ = 0; } else { // Not quoted - look for a separating space. lpArgs[nArgs++] = lpCommandLine; while (*lpCommandLine != 0 && *lpCommandLine != ' ') lpCommandLine++; } // Remove multiple spaces. while (*lpCommandLine == ' ') *lpCommandLine++ = 0; if (nArgs == sizeof(lpArgs)/sizeof(lpArgs[0])) break; // Extract the service name argument. if (strcmp(lpArgs[nArgs-1], "-pServiceName") == 0) { nArgs--; fNext = TRUE; } else { if (fNext) lpszServiceName = lpArgs[--nArgs]; fNext = FALSE; } } // Create an internal hidden window to handle DDE requests from the ML thread. { WNDCLASSEX wndClass; ATOM atClass; memset(&wndClass, 0, sizeof(wndClass)); wndClass.cbSize = sizeof(wndClass); wndClass.lpfnWndProc = DDEWndProc; wndClass.hInstance = hInstance; wndClass.lpszClassName = "PolyMLDDEWindowClass"; if ((atClass = RegisterClassEx(&wndClass)) == 0) return 1; hDDEWindow = CreateWindow( (LPTSTR)(LONG)atClass, "Poly/ML-DDE", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, // handle to menu or child-window identifier hInstance, NULL // pointer to window-creation data ); } initDDEControl(lpszServiceName); // Call the main program to do the rest of the initialisation. hMainThread = CreateThread(NULL, 0, MainThrdProc, exports, 0, &dwInId); // Enter the main message loop. while (MsgWaitForMultipleObjects(1, &hMainThread, FALSE, INFINITE, QS_ALLINPUT) == WAIT_OBJECT_0+1) { MSG Msg; while (PeekMessage(&Msg, NULL, 0, 0, PM_REMOVE)) { TranslateMessage(&Msg); DispatchMessage(&Msg); } } // Closing this end of the pipe will cause the thread to go away. if (hWriteToScreen != INVALID_HANDLE_VALUE) CloseHandle(hWriteToScreen); if (! GetExitCodeThread(hMainThread, &dwRes)) dwRes = 0; uninitDDEControl(); DestroyWindow(hDDEWindow); DeleteCriticalSection(&csIOInterlock); if (hInputEvent) CloseHandle(hInputEvent); return dwRes; } HDDEDATA CALLBACK DdeCallback(UINT uType, UINT uFmt, HCONV hconv, HSZ hsz1, HSZ hsz2, HDDEDATA hdata, DWORD dwData1, DWORD dwData2) { switch (uType) { case XTYP_CONNECT: // Client connecting. For the moment we ignore // the topic. return (HDDEDATA) TRUE; case XTYP_EXECUTE: { // See what the message is. The only ones we // handle are interrupt and terminate. CHAR buff[256]; buff[0] = 0; DdeGetData(hdata, (LPBYTE)buff, sizeof(buff), 0); if (lstrcmpi(buff, POLYINTERRUPT) == 0) { RequestConsoleInterrupt(); return (HDDEDATA) DDE_FACK; } if (lstrcmpi(buff, POLYTERMINATE) == 0) { processes->Exit(0); return (HDDEDATA) DDE_FACK; } return (HDDEDATA) DDE_FNOTPROCESSED; } default: return (HDDEDATA) NULL; } } static int initDDEControl(char *lpszName) { HSZ hszServiceName; if (DdeInitialize(&dwDDEInstance, DdeCallback, APPCLASS_STANDARD | CBF_FAIL_ADVISES | CBF_FAIL_POKES | CBF_FAIL_REQUESTS | CBF_SKIP_ALLNOTIFICATIONS, 0) != DMLERR_NO_ERROR) return 0; // If we were given a service name we register that, // otherwise we use the default name. if (lpszName == 0) lpszName = POLYMLSERVICE; hszServiceName = DdeCreateStringHandle(dwDDEInstance, lpszName, CP_WINANSI); if (hszServiceName == 0) return 0; DdeNameService(dwDDEInstance, hszServiceName, 0L, DNS_REGISTER); DdeFreeStringHandle(dwDDEInstance, hszServiceName); return 1; } static void uninitDDEControl(void) { // Unregister our name(s). DdeNameService(dwDDEInstance, 0L, 0L, DNS_UNREGISTER); // DdeAbandonTransaction(dwDDEInstance, 0L, 0L); // Unitialise DDE. DdeUninitialize(dwDDEInstance); } polyml.5.2.1/libpolyml/Console.h0000644000175000017500000000304110663755667015575 0ustar daviddavid/* Title: Poly/ML Console Window. Copyright (c) 2000 David C. J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef _CONSOLE_H #define _CONSOLE_H #include /* Test whether input is available. */ extern int isConsoleInput(void); /* Read characters from the input. Only returns zero on EOF. */ extern int getConsoleInput(char *buff, int nChars); extern HWND hMainWindow; /* Handle to main window - NULL if none. */ extern int useConsole; /* non-zero if we should use the console for input. */ extern HINSTANCE hApplicationInstance; /* Application instance */ /* DDE requests. */ extern HCONV StartDDEConversation(char *serviceName, char *topicName); extern void CloseDDEConversation(HCONV hConv); extern LRESULT ExecuteDDE(char *command, HCONV hConv); extern HANDLE hMainThread; /* Handle to main thread. */ #endif polyml.5.2.1/libpolyml/Makefile.am0000644000175000017500000000407211076105317016037 0ustar daviddavidAUTOMAKE_OPTIONS=foreign AM_CPPFLAGS = $(OSFLAG) -Wall AM_CFLAGS = $(OSFLAG) -Wall -fno-strict-aliasing AM_ASFLAGS = $(OSFLAG) AM_CCASFLAGS = $(OSFLAG) lib_LTLIBRARIES = libpolyml.la libpolyml_la_LDFLAGS = -version-info 1:1:0 if NO_UNDEFINED # Force all references to be defined to build the DLL. libpolyml_la_LDFLAGS += -no-undefined endif # Select the architecture-specific modules if ARCHI386 ARCHSOURCE = x86_dep.cpp x86asmtemp.S else if ARCHPPC ARCHSOURCE = power_dep.cpp ppcasmtemp.s else if ARCHSPARC ARCHSOURCE = sparc_dep.cpp sparc_assembly.S else if ARCHINTERPRET ARCHSOURCE = interpret.cpp else if ARCHINTERPRET64 ARCHSOURCE = interpret.cpp else if ARCHX86_64 ARCHSOURCE = x86_dep.cpp x86asmtemp.S else endif endif endif endif endif endif # Select the object-format-specific modules if EXPPECOFF EXPORTSOURCE = pecoffexport.cpp else if EXPELF EXPORTSOURCE = elfexport.cpp else if EXPMACHO EXPORTSOURCE = machoexport.cpp endif endif endif if NATIVE_WINDOWS OSSOURCE = Console.cpp windows_specific.cpp else OSSOURCE = unix_specific.cpp endif libpolyml_la_SOURCES = mpoly.cpp gc.cpp diagnostics.cpp \ arb.cpp reals.cpp timing.cpp processes.cpp profiling.cpp \ realconv.cpp objsize.cpp proper_io.cpp foreign.cpp \ process_env.cpp basicio.cpp network.cpp \ sighandler.cpp xwindows.cpp check_objects.cpp scanaddrs.cpp \ polystring.cpp run_time.cpp osmem.cpp save_vec.cpp \ rts_module.cpp bitmap.cpp poly_specific.cpp \ exporter.cpp sharedata.cpp memmgr.cpp pexport.cpp \ locking.cpp savestate.cpp \ $(ARCHSOURCE) $(EXPORTSOURCE) $(OSSOURCE) # Convert the portable format to a native binary polyexport.o: polyimport exportPoly.sml (cd ..; driver/polyimport driver/$(POLYIMPORT) < driver/exportPoly.sml > /dev/null) # Special rule for x86 assembly code. x86asmtemp.S: x86asm.asm sed -f masm2gas < x86asm.asm > x86asmtemp.S # Special rule for Power PC. This is needed because of pecularities with MAC OS X. ppcasmtemp.s: power_assembly.S $(CPP) $(ARCHFLAG) $(OSFLAG) -DGCC $< | tr ';' '\012' > ppcasmtemp.s clean-local: rm -f x86asmtemp.S ppcasmtemp.s polyml.5.2.1/libpolyml/Makefile.in0000644000175000017500000006034011076105317016050 0ustar daviddavid# Makefile.in generated by automake 1.10 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ # Force all references to be defined to build the DLL. @NO_UNDEFINED_TRUE@am__append_1 = -no-undefined subdir = libpolyml DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; am__installdirs = "$(DESTDIR)$(libdir)" libLTLIBRARIES_INSTALL = $(INSTALL) LTLIBRARIES = $(lib_LTLIBRARIES) libpolyml_la_LIBADD = am__libpolyml_la_SOURCES_DIST = mpoly.cpp gc.cpp diagnostics.cpp \ arb.cpp reals.cpp timing.cpp processes.cpp profiling.cpp \ realconv.cpp objsize.cpp proper_io.cpp foreign.cpp \ process_env.cpp basicio.cpp network.cpp sighandler.cpp \ xwindows.cpp check_objects.cpp scanaddrs.cpp polystring.cpp \ run_time.cpp osmem.cpp save_vec.cpp rts_module.cpp bitmap.cpp \ poly_specific.cpp exporter.cpp sharedata.cpp memmgr.cpp \ pexport.cpp locking.cpp savestate.cpp x86_dep.cpp x86asmtemp.S \ interpret.cpp sparc_dep.cpp sparc_assembly.S power_dep.cpp \ ppcasmtemp.s machoexport.cpp elfexport.cpp pecoffexport.cpp \ unix_specific.cpp Console.cpp windows_specific.cpp @ARCHI386_FALSE@@ARCHINTERPRET64_FALSE@@ARCHINTERPRET_FALSE@@ARCHPPC_FALSE@@ARCHSPARC_FALSE@@ARCHX86_64_TRUE@am__objects_1 = x86_dep.lo \ @ARCHI386_FALSE@@ARCHINTERPRET64_FALSE@@ARCHINTERPRET_FALSE@@ARCHPPC_FALSE@@ARCHSPARC_FALSE@@ARCHX86_64_TRUE@ x86asmtemp.lo @ARCHI386_FALSE@@ARCHINTERPRET64_TRUE@@ARCHINTERPRET_FALSE@@ARCHPPC_FALSE@@ARCHSPARC_FALSE@am__objects_1 = interpret.lo @ARCHI386_FALSE@@ARCHINTERPRET_TRUE@@ARCHPPC_FALSE@@ARCHSPARC_FALSE@am__objects_1 = interpret.lo @ARCHI386_FALSE@@ARCHPPC_FALSE@@ARCHSPARC_TRUE@am__objects_1 = \ @ARCHI386_FALSE@@ARCHPPC_FALSE@@ARCHSPARC_TRUE@ sparc_dep.lo \ @ARCHI386_FALSE@@ARCHPPC_FALSE@@ARCHSPARC_TRUE@ sparc_assembly.lo @ARCHI386_FALSE@@ARCHPPC_TRUE@am__objects_1 = power_dep.lo \ @ARCHI386_FALSE@@ARCHPPC_TRUE@ ppcasmtemp.lo @ARCHI386_TRUE@am__objects_1 = x86_dep.lo x86asmtemp.lo @EXPELF_FALSE@@EXPMACHO_TRUE@@EXPPECOFF_FALSE@am__objects_2 = \ @EXPELF_FALSE@@EXPMACHO_TRUE@@EXPPECOFF_FALSE@ machoexport.lo @EXPELF_TRUE@@EXPPECOFF_FALSE@am__objects_2 = elfexport.lo @EXPPECOFF_TRUE@am__objects_2 = pecoffexport.lo @NATIVE_WINDOWS_FALSE@am__objects_3 = unix_specific.lo @NATIVE_WINDOWS_TRUE@am__objects_3 = Console.lo windows_specific.lo am_libpolyml_la_OBJECTS = mpoly.lo gc.lo diagnostics.lo arb.lo \ reals.lo timing.lo processes.lo profiling.lo realconv.lo \ objsize.lo proper_io.lo foreign.lo process_env.lo basicio.lo \ network.lo sighandler.lo xwindows.lo check_objects.lo \ scanaddrs.lo polystring.lo run_time.lo osmem.lo save_vec.lo \ rts_module.lo bitmap.lo poly_specific.lo exporter.lo \ sharedata.lo memmgr.lo pexport.lo locking.lo savestate.lo \ $(am__objects_1) $(am__objects_2) $(am__objects_3) libpolyml_la_OBJECTS = $(am_libpolyml_la_OBJECTS) libpolyml_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(libpolyml_la_LDFLAGS) $(LDFLAGS) -o $@ DEFAULT_INCLUDES = -I. -I$(top_builddir)@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles CPPASCOMPILE = $(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) LTCPPASCOMPILE = $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ CCASCOMPILE = $(CCAS) $(AM_CCASFLAGS) $(CCASFLAGS) LTCCASCOMPILE = $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CCAS) $(AM_CCASFLAGS) $(CCASFLAGS) COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = $(libpolyml_la_SOURCES) DIST_SOURCES = $(am__libpolyml_la_SOURCES_DIST) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCAS = @CCAS@ CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ ECHO = @ECHO@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSFLAG = @OSFLAG@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ POW_LIB = @POW_LIB@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ XMKMF = @XMKMF@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_F77 = @ac_ct_F77@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = foreign AM_CPPFLAGS = $(OSFLAG) -Wall AM_CFLAGS = $(OSFLAG) -Wall -fno-strict-aliasing AM_ASFLAGS = $(OSFLAG) AM_CCASFLAGS = $(OSFLAG) lib_LTLIBRARIES = libpolyml.la libpolyml_la_LDFLAGS = -version-info 1:1:0 $(am__append_1) @ARCHI386_FALSE@@ARCHINTERPRET64_FALSE@@ARCHINTERPRET_FALSE@@ARCHPPC_FALSE@@ARCHSPARC_FALSE@@ARCHX86_64_TRUE@ARCHSOURCE = x86_dep.cpp x86asmtemp.S @ARCHI386_FALSE@@ARCHINTERPRET64_TRUE@@ARCHINTERPRET_FALSE@@ARCHPPC_FALSE@@ARCHSPARC_FALSE@ARCHSOURCE = interpret.cpp @ARCHI386_FALSE@@ARCHINTERPRET_TRUE@@ARCHPPC_FALSE@@ARCHSPARC_FALSE@ARCHSOURCE = interpret.cpp @ARCHI386_FALSE@@ARCHPPC_FALSE@@ARCHSPARC_TRUE@ARCHSOURCE = sparc_dep.cpp sparc_assembly.S @ARCHI386_FALSE@@ARCHPPC_TRUE@ARCHSOURCE = power_dep.cpp ppcasmtemp.s # Select the architecture-specific modules @ARCHI386_TRUE@ARCHSOURCE = x86_dep.cpp x86asmtemp.S @EXPELF_FALSE@@EXPMACHO_TRUE@@EXPPECOFF_FALSE@EXPORTSOURCE = machoexport.cpp @EXPELF_TRUE@@EXPPECOFF_FALSE@EXPORTSOURCE = elfexport.cpp # Select the object-format-specific modules @EXPPECOFF_TRUE@EXPORTSOURCE = pecoffexport.cpp @NATIVE_WINDOWS_FALSE@OSSOURCE = unix_specific.cpp @NATIVE_WINDOWS_TRUE@OSSOURCE = Console.cpp windows_specific.cpp libpolyml_la_SOURCES = mpoly.cpp gc.cpp diagnostics.cpp \ arb.cpp reals.cpp timing.cpp processes.cpp profiling.cpp \ realconv.cpp objsize.cpp proper_io.cpp foreign.cpp \ process_env.cpp basicio.cpp network.cpp \ sighandler.cpp xwindows.cpp check_objects.cpp scanaddrs.cpp \ polystring.cpp run_time.cpp osmem.cpp save_vec.cpp \ rts_module.cpp bitmap.cpp poly_specific.cpp \ exporter.cpp sharedata.cpp memmgr.cpp pexport.cpp \ locking.cpp savestate.cpp \ $(ARCHSOURCE) $(EXPORTSOURCE) $(OSSOURCE) all: all-am .SUFFIXES: .SUFFIXES: .S .cpp .lo .o .obj .s $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign libpolyml/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --foreign libpolyml/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)" @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ if test -f $$p; then \ f=$(am__strip_dir) \ echo " $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \ else :; fi; \ done uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ p=$(am__strip_dir) \ echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \ $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done libpolyml.la: $(libpolyml_la_OBJECTS) $(libpolyml_la_DEPENDENCIES) $(libpolyml_la_LINK) -rpath $(libdir) $(libpolyml_la_OBJECTS) $(libpolyml_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Console.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/arb.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/basicio.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bitmap.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/check_objects.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diagnostics.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elfexport.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/exporter.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/foreign.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/interpret.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/locking.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/machoexport.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/memmgr.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mpoly.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/network.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/objsize.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/osmem.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pecoffexport.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pexport.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/poly_specific.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/polystring.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/power_dep.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/process_env.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/processes.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/profiling.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/proper_io.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/realconv.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/reals.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rts_module.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/run_time.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/save_vec.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/savestate.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/scanaddrs.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sharedata.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sighandler.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sparc_assembly.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sparc_dep.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/timing.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unix_specific.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/windows_specific.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/x86_dep.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/x86asmtemp.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xwindows.Plo@am__quote@ .S.o: @am__fastdepCCAS_TRUE@ $(CPPASCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCCAS_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCCAS_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCCAS_FALSE@ $(CPPASCOMPILE) -c -o $@ $< .S.obj: @am__fastdepCCAS_TRUE@ $(CPPASCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCCAS_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCCAS_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCCAS_FALSE@ $(CPPASCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .S.lo: @am__fastdepCCAS_TRUE@ $(LTCPPASCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCCAS_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCCAS_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCCAS_FALSE@ $(LTCPPASCOMPILE) -c -o $@ $< .cpp.o: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< .s.o: $(CCASCOMPILE) -c -o $@ $< .s.obj: $(CCASCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .s.lo: $(LTCCASCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: for dir in "$(DESTDIR)$(libdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libLTLIBRARIES clean-libtool clean-local \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-exec-am: install-libLTLIBRARIES install-html: install-html-am install-info: install-info-am install-man: install-pdf: install-pdf-am install-ps: install-ps-am installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-libLTLIBRARIES .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libLTLIBRARIES clean-libtool clean-local ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am \ install-libLTLIBRARIES install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am uninstall-libLTLIBRARIES # Convert the portable format to a native binary polyexport.o: polyimport exportPoly.sml (cd ..; driver/polyimport driver/$(POLYIMPORT) < driver/exportPoly.sml > /dev/null) # Special rule for x86 assembly code. x86asmtemp.S: x86asm.asm sed -f masm2gas < x86asm.asm > x86asmtemp.S # Special rule for Power PC. This is needed because of pecularities with MAC OS X. ppcasmtemp.s: power_assembly.S $(CPP) $(ARCHFLAG) $(OSFLAG) -DGCC $< | tr ';' '\012' > ppcasmtemp.s clean-local: rm -f x86asmtemp.S ppcasmtemp.s # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: polyml.5.2.1/libpolyml/PolyControl.h0000644000175000017500000000177110506226525016445 0ustar daviddavid/* Title: DDE Control Messages Copyright (c) 2000 David C. J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef _POLYCONTROL_H_ #define _POLYCONTROL_H_ #define POLYTOPIC "PolyML" #define POLYINTERRUPT "[Interrupt]" #define POLYTERMINATE "[Terminate]" #endif polyml.5.2.1/libpolyml/PolyLib.dsp0000644000175000017500000003403710700405640016064 0ustar daviddavid# Microsoft Developer Studio Project File - Name="PolyLib" - Package Owner=<4> # Microsoft Developer Studio Generated Build File, Format Version 6.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 CFG=PolyLib - Win32 IntDebug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE !MESSAGE NMAKE /f "PolyLib.mak". !MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "PolyLib.mak" CFG="PolyLib - Win32 IntDebug" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "PolyLib - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE "PolyLib - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE "PolyLib - Win32 IntDebug" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE "PolyLib - Win32 IntRelease" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 # PROP Scc_ProjName "" # PROP Scc_LocalPath "" CPP=cl.exe MTL=midl.exe RSC=rc.exe !IF "$(CFG)" == "PolyLib - Win32 Release" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "PolyLib___Win32_Release" # PROP BASE Intermediate_Dir "PolyLib___Win32_Release" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "..\Release" # PROP Intermediate_Dir "Release" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "POLYLIB_EXPORTS" /Yu"stdafx.h" /FD /c # ADD CPP /nologo /MT /W3 /GX /O2 /I ".." /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "POLYLIB_EXPORTS" /D "WINDOWS_PC" /D "i386" /FD /c # SUBTRACT CPP /YX /Yc /Yu # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x809 /d "NDEBUG" # ADD RSC /l 0x809 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 # ADD LINK32 kernel32.lib user32.lib wsock32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /map /machine:I386 !ELSEIF "$(CFG)" == "PolyLib - Win32 Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "PolyLib___Win32_Debug" # PROP BASE Intermediate_Dir "PolyLib___Win32_Debug" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "..\Debug" # PROP Intermediate_Dir "Debug" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "POLYLIB_EXPORTS" /Yu"stdafx.h" /FD /GZ /c # ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I ".." /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "POLYLIB_EXPORTS" /D "WINDOWS_PC" /D "i386" /FD /c # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x809 /d "_DEBUG" # ADD RSC /l 0x809 /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept # ADD LINK32 kernel32.lib user32.lib wsock32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept !ELSEIF "$(CFG)" == "PolyLib - Win32 IntDebug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "PolyLib___Win32_IntDebug" # PROP BASE Intermediate_Dir "PolyLib___Win32_IntDebug" # PROP BASE Ignore_Export_Lib 0 # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "..\IntDebug" # PROP Intermediate_Dir "IntDebug" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I ".." /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "POLYLIB_EXPORTS" /D "WINDOWS_PC" /D "i386" /FD /GZ /c # ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I ".." /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "POLYLIB_EXPORTS" /D "WINDOWS_PC" /D "INTERPRETED" /FD /GZ /c # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x809 /d "_DEBUG" # ADD RSC /l 0x809 /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib wsock32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept # ADD LINK32 kernel32.lib user32.lib wsock32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept !ELSEIF "$(CFG)" == "PolyLib - Win32 IntRelease" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "PolyLib___Win32_IntRelease" # PROP BASE Intermediate_Dir "PolyLib___Win32_IntRelease" # PROP BASE Ignore_Export_Lib 0 # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "..\IntRelease" # PROP Intermediate_Dir "IntRelease" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MT /W3 /GX /O2 /I ".." /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "POLYLIB_EXPORTS" /D "WINDOWS_PC" /D "i386" /FD /c # SUBTRACT BASE CPP /YX /Yc /Yu # ADD CPP /nologo /MT /W3 /GX /O2 /I ".." /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "POLYLIB_EXPORTS" /D "WINDOWS_PC" /D "INTERPRTED" /FD /c # SUBTRACT CPP /YX /Yc /Yu # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x809 /d "NDEBUG" # ADD RSC /l 0x809 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib wsock32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 # ADD LINK32 kernel32.lib user32.lib wsock32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 !ENDIF # Begin Target # Name "PolyLib - Win32 Release" # Name "PolyLib - Win32 Debug" # Name "PolyLib - Win32 IntDebug" # Name "PolyLib - Win32 IntRelease" # Begin Group "Source Files" # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" # Begin Source File SOURCE=.\arb.cpp # End Source File # Begin Source File SOURCE=.\basicio.cpp # End Source File # Begin Source File SOURCE=.\bitmap.cpp # End Source File # Begin Source File SOURCE=.\check_objects.cpp # End Source File # Begin Source File SOURCE=.\Console.cpp # End Source File # Begin Source File SOURCE=.\diagnostics.cpp # End Source File # Begin Source File SOURCE=.\exporter.cpp # End Source File # Begin Source File SOURCE=.\foreign.cpp # End Source File # Begin Source File SOURCE=.\gc.cpp # End Source File # Begin Source File SOURCE=.\interpret.cpp !IF "$(CFG)" == "PolyLib - Win32 Release" # PROP Exclude_From_Build 1 !ELSEIF "$(CFG)" == "PolyLib - Win32 Debug" # PROP Exclude_From_Build 1 !ELSEIF "$(CFG)" == "PolyLib - Win32 IntDebug" !ELSEIF "$(CFG)" == "PolyLib - Win32 IntRelease" !ENDIF # End Source File # Begin Source File SOURCE=.\locking.cpp # End Source File # Begin Source File SOURCE=.\memmgr.cpp # End Source File # Begin Source File SOURCE=.\mpoly.cpp # End Source File # Begin Source File SOURCE=.\network.cpp # End Source File # Begin Source File SOURCE=.\objsize.cpp # End Source File # Begin Source File SOURCE=.\osmem.cpp # End Source File # Begin Source File SOURCE=.\pecoffexport.cpp # End Source File # Begin Source File SOURCE=.\pexport.cpp # End Source File # Begin Source File SOURCE=.\poly_specific.cpp # End Source File # Begin Source File SOURCE=.\polystring.cpp # End Source File # Begin Source File SOURCE=.\process_env.cpp # End Source File # Begin Source File SOURCE=.\processes.cpp # End Source File # Begin Source File SOURCE=.\profiling.cpp # End Source File # Begin Source File SOURCE=.\proper_io.cpp # End Source File # Begin Source File SOURCE=.\realconv.cpp # End Source File # Begin Source File SOURCE=.\reals.cpp # End Source File # Begin Source File SOURCE=.\rts_module.cpp # End Source File # Begin Source File SOURCE=.\run_time.cpp # End Source File # Begin Source File SOURCE=.\save_vec.cpp # End Source File # Begin Source File SOURCE=.\savestate.cpp # End Source File # Begin Source File SOURCE=.\scanaddrs.cpp # End Source File # Begin Source File SOURCE=.\sharedata.cpp # End Source File # Begin Source File SOURCE=.\sighandler.cpp # End Source File # Begin Source File SOURCE=.\timing.cpp # End Source File # Begin Source File SOURCE=.\windows_specific.cpp # End Source File # Begin Source File SOURCE=.\x86_dep.cpp !IF "$(CFG)" == "PolyLib - Win32 Release" !ELSEIF "$(CFG)" == "PolyLib - Win32 Debug" !ELSEIF "$(CFG)" == "PolyLib - Win32 IntDebug" # PROP Exclude_From_Build 1 !ELSEIF "$(CFG)" == "PolyLib - Win32 IntRelease" # PROP Exclude_From_Build 1 !ENDIF # End Source File # Begin Source File SOURCE=.\x86asm.asm !IF "$(CFG)" == "PolyLib - Win32 Release" # Begin Custom Build IntDir=.\Release InputPath=.\x86asm.asm InputName=x86asm "$(IntDir)\$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" ml /nologo /DWINDOWS /Fo $(IntDir)\$(InputName).obj /c /coff $(InputPath) # End Custom Build !ELSEIF "$(CFG)" == "PolyLib - Win32 Debug" # Begin Custom Build IntDir=.\Debug InputPath=.\x86asm.asm InputName=x86asm "$(IntDir)\$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" ml /nologo /DWINDOWS /Fo $(IntDir)\$(InputName).obj /c /coff $(InputPath) # End Custom Build !ELSEIF "$(CFG)" == "PolyLib - Win32 IntDebug" # PROP Exclude_From_Build 1 !ELSEIF "$(CFG)" == "PolyLib - Win32 IntRelease" # PROP Exclude_From_Build 1 !ENDIF # End Source File # Begin Source File SOURCE=.\xwindows.cpp # End Source File # End Group # Begin Group "Header Files" # PROP Default_Filter "h;hpp;hxx;hm;inl" # Begin Source File SOURCE=.\arb.h # End Source File # Begin Source File SOURCE=.\basicio.h # End Source File # Begin Source File SOURCE=.\bitmap.h # End Source File # Begin Source File SOURCE=.\check_objects.h # End Source File # Begin Source File SOURCE=.\Console.h # End Source File # Begin Source File SOURCE=.\cwd.h # End Source File # Begin Source File SOURCE=.\diagnostics.h # End Source File # Begin Source File SOURCE=.\errors.h # End Source File # Begin Source File SOURCE=.\exporter.h # End Source File # Begin Source File SOURCE=.\foreign.h # End Source File # Begin Source File SOURCE=.\gc.h # End Source File # Begin Source File SOURCE=.\globals.h # End Source File # Begin Source File SOURCE=.\int_opcodes.h # End Source File # Begin Source File SOURCE=.\io_internal.h # End Source File # Begin Source File SOURCE=.\locking.h # End Source File # Begin Source File SOURCE=.\machine_dep.h # End Source File # Begin Source File SOURCE=.\memmgr.h # End Source File # Begin Source File SOURCE=.\mpoly.h # End Source File # Begin Source File SOURCE=.\network.h # End Source File # Begin Source File SOURCE=.\noreturn.h # End Source File # Begin Source File SOURCE=.\objsize.h # End Source File # Begin Source File SOURCE=.\os_specific.h # End Source File # Begin Source File SOURCE=.\osmem.h # End Source File # Begin Source File SOURCE=.\pecoffexport.h # End Source File # Begin Source File SOURCE=.\pexport.h # End Source File # Begin Source File SOURCE=.\poly_specific.h # End Source File # Begin Source File SOURCE=.\PolyControl.h # End Source File # Begin Source File SOURCE=..\polyexports.h # End Source File # Begin Source File SOURCE=.\polystring.h # End Source File # Begin Source File SOURCE=.\process_env.h # End Source File # Begin Source File SOURCE=.\processes.h # End Source File # Begin Source File SOURCE=.\profiling.h # End Source File # Begin Source File SOURCE=.\proper_io.h # End Source File # Begin Source File SOURCE=.\realconv.h # End Source File # Begin Source File SOURCE=.\reals.h # End Source File # Begin Source File SOURCE=.\resource.h # End Source File # Begin Source File SOURCE=.\rts_module.h # End Source File # Begin Source File SOURCE=.\run_time.h # End Source File # Begin Source File SOURCE=.\save_vec.h # End Source File # Begin Source File SOURCE=.\savestate.h # End Source File # Begin Source File SOURCE=.\scanaddrs.h # End Source File # Begin Source File SOURCE=.\sharedata.h # End Source File # Begin Source File SOURCE=.\sighandler.h # End Source File # Begin Source File SOURCE=.\sys.h # End Source File # Begin Source File SOURCE=.\timing.h # End Source File # Begin Source File SOURCE=.\version.h # End Source File # Begin Source File SOURCE=.\winconfig.h # End Source File # Begin Source File SOURCE=.\xwindows.h # End Source File # End Group # Begin Group "Resource Files" # PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" # End Group # Begin Source File SOURCE=.\COPYING # End Source File # End Target # End Project polyml.5.2.1/libpolyml/arb.cpp0000644000175000017500000013367010772160234015263 0ustar daviddavid/* Title: Arbitrary Precision Package. Author: Dave Matthews, Cambridge University Computer Laboratory Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ /* Arbitrary precision package in C. Integers are held in two formats in this system, long-form and short-form. The two are distinquished by the integer tag bit, short-form having the tag bit set and pointers to long-form being untagged. The long-form integers use the standard Poly format for multi-word objects, with the length count and flags in the word just before the object pointed to. The sign of long-form integers is coded in one of the flag bits. Short integers are signed quantities, and can be directly manipulated by the relevant instructions, but if overflow occurs then the full long versions of the operations will need to be called. Long-form integers are held as vectors of bytes (i.e. unsigned char) low-order byte first. It is assumed that a ``byte'' will hold an 8-bit quantity and a ``long'' at least two ``bytes''. It is essential that unsigned values are used. Integers are always stored in the least possible number of words, and will be shortened to the short-form when possible. Thanks are due to D. Knuth for the long division algorithm. */ /* DCJM 13/5/06 - Begin changes to use the top bit of the last byte as a sign bit. Actually, it will probably be simpler to always use a whole byte for the sign. Start by adding an extra zero byte. N.B. This actually breaks the rule that all immutable values must have a canonical representation. That is required for structure equality to work. */ #ifdef WIN32 #include "winconfig.h" #else #include "config.h" #endif #ifdef HAVE_STDIO_H #include #endif #ifdef HAVE_ASSERT_H #include #define ASSERT(x) assert(x) #else #define ASSERT(x) #endif #include "globals.h" #include "sys.h" #include "run_time.h" #include "arb.h" #include "save_vec.h" #include "processes.h" /******************************************************************************/ /* */ /* get_length - utility function */ /* */ /******************************************************************************/ /* Returns the length of the argument with trailing zeros removed. Excludes the sign byte (when we've added it - not done yet). */ static POLYUNSIGNED get_length(PolyWord x) { byte *u = (byte *)x.AsObjPtr(); POLYUNSIGNED lu = OBJECT_LENGTH(x)*sizeof(PolyWord); for( ; (lu > 0) && (u[lu-1] == 0); lu--) { /* do nothing */ } return lu; } /* get_length */ /******************************************************************************/ /* */ /* get_C_ulong - called by runtime system */ /* */ /******************************************************************************/ /* indirection removed 31/10/93 SPF */ POLYUNSIGNED get_C_ulong(TaskData *taskData, PolyWord number) { if ( IS_INT(number) ) { POLYSIGNED i = UNTAGGED(number); if ( i < 0 ) raise_exception0(taskData, EXC_size ); return i; } else { POLYUNSIGNED length = get_length(number); POLYSIGNED c = 0; byte *ptr = number.AsCodePtr(); if (OBJ_IS_NEGATIVE(GetLengthWord(number))) raise_exception0(taskData, EXC_size ); if ( length > sizeof(PolyWord) ) raise_exception0(taskData, EXC_size ); while ( length-- ) c = (c << 8) | ((byte *) ptr)[length]; return c; } } /******************************************************************************/ /* */ /* get_C_long - called by runtime system */ /* */ /******************************************************************************/ /* indirection removed 31/10/93 SPF */ #define MAX_INT_PLUS1 ((POLYUNSIGNED)0x80 << ( (sizeof(PolyWord)-1) *8)) POLYSIGNED get_C_long(TaskData *taskData, PolyWord number) { if ( IS_INT(number) ) { return UNTAGGED(number); } else { int sign = OBJ_IS_NEGATIVE(GetLengthWord(number)) ? -1 : 0; POLYUNSIGNED length = get_length(number); POLYUNSIGNED c = 0; byte *ptr = number.AsCodePtr(); if ( length > sizeof(PolyWord) ) raise_exception0(taskData, EXC_size ); while ( length-- ) { c = (c << 8) | ptr[length]; } if ( sign == 0 && c < MAX_INT_PLUS1) return (POLYSIGNED)c; if ( sign != 0 && c <= MAX_INT_PLUS1) return -((POLYSIGNED)c); raise_exception0(taskData, EXC_size ); /*NOTREACHED*/ return 0; } } /******************************************************************************/ /* */ /* get_C_short - called by runtime system */ /* */ /******************************************************************************/ /* indirection removed 31/10/93 SPF */ short get_C_short(TaskData *taskData, PolyWord number) { int i = (int)get_C_long(taskData, number); if ( i <= 32767 && i >= -32768 ) return i; raise_exception0(taskData, EXC_size ); /*NOTREACHED*/ return 0; } /******************************************************************************/ /* */ /* get_C_ushort - called by runtime system */ /* */ /******************************************************************************/ /* indirection removed 31/10/93 SPF */ unsigned short get_C_ushort(TaskData *taskData, PolyWord number) { POLYUNSIGNED u = get_C_ulong(taskData, number ); if ( u <= 65535 ) return (short)u; raise_exception0(taskData, EXC_size ); /*NOTREACHED*/ return 0; } /* Get a arbitrary precision value as a pair of words. At present this is used to extract a 64-bit quantity as two words. Only used in Windows code. */ void get_C_pair(TaskData *taskData, PolyWord number, unsigned long *pHi, unsigned long *pLo) { if ( IS_INT(number) ) { /* It will fit in the low-order word. */ *pLo = (unsigned long) UNTAGGED(number); *pHi = 0; return; } else { POLYUNSIGNED length = get_length(number); unsigned i; unsigned long c; POLYOBJPTR ptr = number.AsObjPtr(); if (OBJ_IS_NEGATIVE(GetLengthWord(number))) raise_exception0(taskData, EXC_size); if ( length > 2*sizeof(unsigned long) ) raise_exception0(taskData, EXC_size); /* Low-order word. */ if (length > sizeof(unsigned long)) i = sizeof(unsigned long); else i = length; c = 0; while (i--) c = (c << 8) | ((byte *) ptr)[i]; *pLo = c; /* High-order word. */ i = length; c = 0; while (i-- > sizeof(unsigned long)) c = (c << 8) | ((byte *) ptr)[i]; *pHi = c; return; } } /******************************************************************************/ /* */ /* get_long - utility function */ /* */ /******************************************************************************/ /* Gets the arguments into the long form. */ /* HACK - must NOT be used for results. */ static Handle get_long(Handle x, Handle extend, int *sign) { if (IS_INT(DEREFWORD(x))) { /* Short form - put it in the temporary in the task-data */ POLYSIGNED x_v = UNTAGGED(DEREFWORD(x)); byte *u = DEREFBYTEHANDLE(extend); if (x_v >= 0) { *sign = 0; } else /* Negative */ { *sign = -1; x_v = -x_v; } /* Put into extend buffer, low order byte first. */ for (unsigned i = 0; i < sizeof(PolyWord); i++) { u[i] = x_v & 0xff; x_v = x_v >> 8; } return extend; } else { /* Long-form - x is an address. */ *sign = OBJ_IS_NEGATIVE(GetLengthWord(DEREFWORD(x))) ? -1 : 0; return x; } } /* get_long */ /******************************************************************************/ /* */ /* copy_long - utility function */ /* */ /******************************************************************************/ static Handle copy_long(TaskData *taskData, Handle x, POLYUNSIGNED lx) { Handle y = alloc_and_save(taskData, WORDS(lx+1), F_BYTE_OBJ|F_MUTABLE_BIT); // copy the bytes byte *u = DEREFBYTEHANDLE(x); byte *v = DEREFBYTEHANDLE(y); for (unsigned i = 0; i < lx; i++) v[i] = u[i]; return y; } /******************************************************************************/ /* */ /* make_canonical - utility function */ /* */ /******************************************************************************/ /* make_canonical is used to force a result into its shortest form, in the style of get_length, but also may convert its argument from long to short integer */ static Handle make_canonical(TaskData *taskData, Handle x, int sign) { /* get length in BYTES */ POLYUNSIGNED size = get_length(DEREFWORD(x)); PolyObject *tempX = DEREFWORDHANDLE(x); ASSERT(size < (OBJ_OBJECT_LENGTH(tempX->LengthWord())*sizeof(PolyWord))); // Check we always have a sign byte. /* We can use the short representation if it will fit in 4 bytes. */ if (size <= sizeof(PolyWord)) { /* Convert the digits. */ byte *u = DEREFBYTEHANDLE(x); POLYUNSIGNED r = 0; for (unsigned i=0; i < sizeof(PolyWord); i++) { r |= ((POLYUNSIGNED)u[i]) << (8*i); } /* Check for MAXTAGGED+1 before subtraction in case MAXTAGGED is 0x7fffffff */ if (r <= MAXTAGGED || (r == MAXTAGGED+1 && sign < 0)) { if (sign < 0) return taskData->saveVec.push(TAGGED(-(POLYSIGNED)r)); else return taskData->saveVec.push(TAGGED(r)); } } /* The length word of the object is changed to reflect the new length. This is safe because any words thrown away must be zero. */ DEREFWORDHANDLE(x)->SetLengthWord(WORDS(size+1), F_BYTE_OBJ | (sign < 0 ? F_NEGATIVE_BIT: 0)); return x; } /* make_canonical */ /******************************************************************************/ /* */ /* Make_XXX functions (used in runtime system) */ /* */ /******************************************************************************/ Handle Make_arbitrary_precision(TaskData *taskData, POLYSIGNED val) /* Called from routines in the run-time system to generate an arbitrary precision integer from a word value. */ { if (val <= MAXTAGGED && val >= -MAXTAGGED-1) /* No overflow */ return taskData->saveVec.push(TAGGED(val)); POLYUNSIGNED uval; if (val < 0) uval = -val; else uval = val; int words = 1; // If the high order byte is non-zero add an extra word for the sign. if ((uval >> ((sizeof(long)-1)*8)) != 0) words++; Handle y = alloc_and_save(taskData, words, ((val < 0) ? F_NEGATIVE_BIT : 0)| F_BYTE_OBJ); byte *v = DEREFBYTEHANDLE(y); for (POLYUNSIGNED i = 0; uval != 0; i++) { v[i] = (byte)(uval & 0xff); uval >>= 8; } return y; } Handle Make_unsigned(TaskData *taskData, POLYUNSIGNED uval) /* Called from routines in the run-time system to generate an arbitrary precision integer from an unsigned value. */ { if (uval <= MAXTAGGED) return taskData->saveVec.push(TAGGED(uval)); int words = 1; // If the high order byte is non-zero add an extra word for the sign. if ((uval >> ((sizeof(long)-1)*8)) != 0) words++; Handle y = alloc_and_save(taskData, words, F_BYTE_OBJ); byte *v = DEREFBYTEHANDLE(y); for (POLYUNSIGNED i = 0; uval != 0; i++) { v[i] = (byte)(uval & 0xff); uval >>= 8; } return y; } /* Creates an arbitrary precision number from two words. At present this is used for 64-bit quantities. */ Handle Make_arb_from_pair(TaskData *taskData, unsigned hi, unsigned lo) { /* If the high word is zero we can use either the tagged short form or a single word. */ if (hi == 0) return Make_unsigned(taskData, lo); int words = 2; // If the high order byte is non-zero add an extra word for the sign. if ((hi >> ((sizeof(hi)-1)*8)) != 0) words++; Handle y = alloc_and_save(taskData, words, F_BYTE_OBJ); byte *v = DEREFBYTEHANDLE(y); int i; for (i = 0; i < 4/* Get a 32 bit value. */; i++) { v[i] = lo & 0xff; lo >>= 8; } for (; hi != 0 && i < 8; i++) { v[i] = hi & 0xff; hi >>= 8; } return y; } /* Returns hi*scale+lo as an arbitrary precision number. Currently used for Unix time values where the time is returned as two words, a number of seconds and a number of microseconds and we wish to return the result as a number of microseconds. */ Handle Make_arb_from_pair_scaled(TaskData *taskData, unsigned hi, unsigned lo, unsigned scale) { /* We might be able to compute the number as a 64 bit quantity and then convert it but this is probably more portable. It does risk overflowing the save vector. */ Handle hHi = Make_unsigned(taskData, hi); Handle hLo = Make_unsigned(taskData, lo); Handle hScale = Make_unsigned(taskData, scale); return add_longc(taskData, mult_longc(taskData, hHi, hScale), hLo); } /******************************************************************************/ /* */ /* neg_longc - called from assembly code */ /* */ /******************************************************************************/ Handle neg_longc(TaskData *taskData, Handle x) { Handle long_x, long_y; int sign_x; if (IS_INT(DEREFWORD(x))) { POLYSIGNED s = UNTAGGED(DEREFWORD(x)); if (s != -MAXTAGGED-1) // If it won't overflow return taskData->saveVec.push(TAGGED(-s)); } /* Either overflow or long argument - convert to long form */ long_x = get_long(x, taskData->x_ehandle, &sign_x); /* Get length of arg. */ POLYUNSIGNED lx = get_length(DEREFWORD(long_x)); /* copy the argument (so we can return it) */ long_y = copy_long(taskData, long_x,lx); /* Return the value with the sign changed. */ return make_canonical(taskData, long_y, sign_x ^ -1); } /* neg_longc */ /******************************************************************************/ /* */ /* add_unsigned_long - utility function */ /* computes sign * (abs(x) + abs(y)) */ /* */ /******************************************************************************/ static Handle add_unsigned_long(TaskData *taskData, Handle x, Handle y, int sign) { byte *u; /* byte-pointer for longer number */ byte *v; /* byte-pointer for shorter number */ Handle z; int lu; /* length of u in bytes */ int lv; /* length of v in bytes */ /* find the longer number */ POLYUNSIGNED lx = get_length(DEREFWORD(x)); POLYUNSIGNED ly = get_length(DEREFWORD(y)); /* Make ``u'' the longer. */ if (lx < ly) { // Get result vector. It must be 1 byte longer than u // to have space for any carry, plus one byte for the sign. z = alloc_and_save(taskData, WORDS(ly+2), F_MUTABLE_BIT|F_BYTE_OBJ); /* now safe to dereference pointers */ u = DEREFBYTEHANDLE(y); lu = ly; v = DEREFBYTEHANDLE(x); lv = lx; } else { // Get result vector. It must be 1 byte longer than u // to have space for any carry, plus one byte for the sign. z = alloc_and_save(taskData, WORDS(lx+2), F_MUTABLE_BIT|F_BYTE_OBJ); /* now safe to dereference pointers */ u = DEREFBYTEHANDLE(x); lu = lx; v = DEREFBYTEHANDLE(y); lv = ly; } /* do the actual addition */ byte *w = DEREFBYTEHANDLE(z); int carry = 0; int i = 0; /* Do the additions */ for( ; i < lv; i++) { carry += u[i] + v[i]; w[i] = carry & 0xff; carry >>= 8; } /* Add the carry to the rest of ``u''. */ for( ; i < lu; i++) { carry += u[i]; w[i] = carry & 0xff; carry >>= 8; } /* Finally put the carry into the last byte */ w[i] = (byte)carry; return make_canonical(taskData, z, sign); } /* add_unsigned_long */ /******************************************************************************/ /* */ /* sub_unsigned_long - utility function */ /* computes sign * (abs(x) - abs(y)) */ /* */ /******************************************************************************/ static Handle sub_unsigned_long(TaskData *taskData, Handle x, Handle y, int sign) { byte *u; /* byte-pointer alias for larger number */ byte *v; /* byte-pointer alias for smaller number */ int lu; /* length of u in bytes */ int lv; /* length of v in bytes */ Handle z; /* get the larger argument into ``u'' */ /* This is necessary so that we can discard */ /* the borrow at the end of the subtraction */ POLYUNSIGNED lx = get_length(DEREFWORD(x)); POLYUNSIGNED ly = get_length(DEREFWORD(y)); if (lx < ly) { sign ^= -1; /* swap sign of result SPF 21/1/94 */ z = alloc_and_save(taskData, WORDS(ly+1), F_MUTABLE_BIT|F_BYTE_OBJ); /* now safe to dereference pointers */ u = DEREFBYTEHANDLE(y); lu = ly; v = DEREFBYTEHANDLE(x); lv = lx; } else if (ly < lx) { z = alloc_and_save(taskData, WORDS(lx+1), F_MUTABLE_BIT|F_BYTE_OBJ); /* now safe to dereference pointers */ u = DEREFBYTEHANDLE(x); lu = lx; v = DEREFBYTEHANDLE(y); lv = ly; } else /* lx == ly */ { /* Must look at the numbers to decide which is bigger. */ int i = lx - 1; for( ; i >= 0 && DEREFBYTEHANDLE(x)[i] == DEREFBYTEHANDLE(y)[i]; i--); if (i < 0) return taskData->saveVec.push(TAGGED(0)); /* They are equal */ if (DEREFBYTEHANDLE(x)[i] < DEREFBYTEHANDLE(y)[i]) { sign ^= -1; /* swap sign of result SPF 21/1/94 */ z = alloc_and_save(taskData, WORDS(ly+1), F_MUTABLE_BIT|F_BYTE_OBJ); /* now safe to dereference pointers */ u = DEREFBYTEHANDLE(y); lu = ly; v = DEREFBYTEHANDLE(x); lv = lx; } else { z = alloc_and_save(taskData, WORDS(lx+1), F_MUTABLE_BIT|F_BYTE_OBJ); /* now safe to dereference pointers */ u = DEREFBYTEHANDLE(x); lu = lx; v = DEREFBYTEHANDLE(y); lv = ly; } } byte *w = DEREFBYTEHANDLE(z); int borrow = 1; /* Becomes 0 if there is a borrow */ int i = 0; /* Do the subtractions */ for( ; i < lv; i++) { borrow += 255 + u[i] - v[i]; w[i] = borrow & 0xff; borrow >>= 8; } /* Add the borrow into the rest of ``u''. */ for( ; i < lu; i++) { borrow += 255 + u[i]; w[i] = borrow & 0xff; borrow >>= 8; } return make_canonical(taskData, z, sign); } /* sub_unsigned_long */ /******************************************************************************/ /* */ /* add_longc - called from sparc_dep.c */ /* */ /******************************************************************************/ Handle add_longc(TaskData *taskData, Handle y, Handle x) { Handle long_x, long_y; int sign_x, sign_y; if (IS_INT(DEREFWORD(x)) && IS_INT(DEREFWORD(y))) { /* Both short */ /* The easiest way to do the addition is simply *x-1+*y, but that makes it more difficult to check for overflow. */ POLYSIGNED t = UNTAGGED(DEREFWORD(x)) + UNTAGGED(DEREFWORD(y)); if (t <= MAXTAGGED && t >= -MAXTAGGED-1) /* No overflow */ { return taskData->saveVec.push(TAGGED(t)); } } /* Either overflow or long arguments - convert to long form */ long_x = get_long(x, taskData->x_ehandle , &sign_x); long_y = get_long(y, taskData->y_ehandle , &sign_y); /* Work out whether to add or subtract */ if ((sign_y ^ sign_x) >= 0) /* signs the same? */ { /* sign(x) * (abs(x) + abs(y)) */ return add_unsigned_long(taskData, long_x, long_y, sign_x); } else { /* sign(x) * (abs(x) - abs(y)) */ return sub_unsigned_long(taskData, long_x, long_y, sign_x); } } /* add_longc */ /******************************************************************************/ /* */ /* sub_longc - called from sparc_dep.c */ /* */ /******************************************************************************/ Handle sub_longc(TaskData *taskData, Handle y, Handle x) { Handle long_x, long_y; int sign_x, sign_y; if (IS_INT(DEREFWORD(x)) && IS_INT(DEREFWORD(y))) /* Both short */ { /* The easiest way to do the subtraction is simply *x-*y+1, but that makes it more difficult to check for overflow. */ POLYSIGNED t = UNTAGGED(DEREFWORD(x)) - UNTAGGED(DEREFWORD(y)); if (t <= MAXTAGGED && t >= -MAXTAGGED-1) /* No overflow */ return taskData->saveVec.push(TAGGED(t)); } /* Either overflow or long arguments. */ long_x = get_long(x, taskData->x_ehandle , &sign_x); /* Convert to long form */ long_y = get_long(y, taskData->y_ehandle , &sign_y); /* If the signs are different add the two values. */ if ((sign_y ^ sign_x) < 0) /* signs differ */ { /* sign(x) * (abs(x) + abs(y)) */ return add_unsigned_long(taskData, long_x, long_y, sign_x); } else { /* sign(x) * (abs(x) - abs(y)) */ return sub_unsigned_long(taskData, long_x, long_y, sign_x); } } /* sub_longc */ /******************************************************************************/ /* */ /* mult_longc - called from sparc_assembly.s */ /* */ /******************************************************************************/ Handle mult_longc(TaskData *taskData, Handle y, Handle x) { Handle long_x, long_y, long_z; int sign_x, sign_y; /* I'm not sure how to detect overflow here - so go through the full routine even if both arguments are short. */ /* Convert to long form */ long_x = get_long(x, taskData->x_ehandle , &sign_x); long_y = get_long(y, taskData->y_ehandle , &sign_y); /* Get lengths of args. */ POLYUNSIGNED lx = get_length(DEREFWORD(long_x)); POLYUNSIGNED ly = get_length(DEREFWORD(long_y)); /* Check for zero args. */ if (lx == 0 || ly == 0) { return taskData->saveVec.push(TAGGED(0)); } /* Get space for result */ long_z = alloc_and_save(taskData, WORDS(lx+ly+1), F_MUTABLE_BIT|F_BYTE_OBJ); { /* Can now load the actual addresses because they will not change now. */ byte *u = DEREFBYTEHANDLE(long_x); byte *v = DEREFBYTEHANDLE(long_y); byte *w = DEREFBYTEHANDLE(long_z); for(POLYUNSIGNED i = 0; i < lx; i++) { POLYUNSIGNED j; long r = 0; /* Set the carry to zero */ for(j = 0; j < ly; j++) { /* Compute the product. */ r += u[i] * v[j]; /* Now add in to the result. */ r += w[i+j]; w[i+j] = r & 0xff; r >>= 8; } /* Put in any carry. */ w[i+j] = (byte)r; } return make_canonical(taskData, long_z, sign_x ^ sign_y); } } /* mult_long */ /******************************************************************************/ /* */ /* div_unsigned_long - utility function */ /* */ /******************************************************************************/ static void div_unsigned_long(byte *u, byte *v, byte *res, POLYUNSIGNED lu, POLYUNSIGNED lv) /* Unsigned division. This is the main divide and remainder routine. The result is packed into ``res'' and is separated out by div and rem */ { POLYUNSIGNED i,j; int bits; long r; /* Find out how far to shift v to get a 1 in the top bit. */ bits = 0; for(r = v[lv-1]; r < 128; r <<= 1) bits++; /* 128 ??? */ /* Shift u that amount into res+2. We have allowed enough room for overflow. */ r = 0; for (i = 0; i < lu; i++) { r |= u[i] << bits; /*``Or in'' the new bits after shifting*/ res[i+2] = r & 0xff; /* Put into the destination. */ r >>= 8; /* and shift down the carry. */ } res[i+2] = (byte)r; /* Put in the carry */ /* And v that amount. It has already been copied. */ if ( bits ) { r = 0; for (i = 0; i < lv; i++) { r |= v[i] << bits; v[i] = r & 0xff; r >>= 8; } /* No carry */ } for(j = lu+2; j >= lv+2; j--) { /* j iterates over the higher digits of the dividend until we are left with a number which is less than the divisor. This is the remainder. */ long quotient, dividend, r; dividend = res[j]*256 + res[j-1]; quotient = (res[j] == v[lv-1]) ? 255 : dividend/(long)v[lv-1]; if (lv != 1) { while ((long)v[lv-2]*quotient > (dividend - quotient*(long)v[lv-1])*256 + (long)res[j-2]) { quotient--; } } /* The quotient is at most 1 too large */ /* Subtract the product of this with ``v'' from ``res''. */ r = 1; /* Initial borrow */ for(i = 0; i < lv; i++) { r += 255 + res[j-lv+i] - quotient * v[i]; res[j-lv+i] = r & 0xff; r >>= 8; } r += res[j]; /* Borrow from leading digit. */ /* If we are left with a borrow when the subtraction is complete the quotient must have been too big. We add ``v'' to the dividend and subtract 1 from the quotient. */ if (r == 0 /* would be 1 if there were no borrow */) { quotient --; r = 0; for (i = 0; i < lv; i++) { r += v[i] + res[j-lv+i]; res[j-lv+i] = r & 0xff; r >>= 8; } } /* Place the next digit of quotient in result */ res[j] = (byte)quotient; } /* Likewise the remainder. */ if (bits) { r = 0; j = lv; j = lv; while (j > 0) { j--; r |= res[j+2]; res[j+2] = (r >> bits) & 0xff; r = (r & 0xff) << 8; } } } /* div_unsigned_long */ /******************************************************************************/ /* */ /* div_long_c - called from sparc_assembly.s */ /* */ /******************************************************************************/ Handle div_longc(TaskData *taskData, Handle y, Handle x) { Handle long_x, long_y; int sign_x, sign_y; if (IS_INT(DEREFWORD(x)) && IS_INT(DEREFWORD(y))) /* Both short */ { POLYSIGNED xs = UNTAGGED(DEREFWORD(x)); POLYSIGNED ys = UNTAGGED(DEREFWORD(y)); /* Raise exceptions if dividing by zero. */ if (ys == 0) raise_exception0(taskData, EXC_divide); /* Only possible overflow is minint div -1 */ if (xs != -MAXTAGGED-1 || ys != -1) return taskData->saveVec.push(TAGGED(xs / ys)); } /* Long operands or overflow - convert to long form */ long_x = get_long(x, taskData->x_ehandle , &sign_x); long_y = get_long(y, taskData->y_ehandle , &sign_y); /* Get lengths of args. */ POLYUNSIGNED lx = get_length(DEREFWORD(long_x)); POLYUNSIGNED ly = get_length(DEREFWORD(long_y)); /* If length of v is zero raise divideerror */ if (ly == 0) raise_exception0(taskData, EXC_divide); /* Get quotient */ if (lx < ly) { /* When x < y quotient must be zero. */ return taskData->saveVec.push(TAGGED(0)); } else { Handle long_z; long_y = copy_long(taskData, long_y,ly); /* copy in case it needs shifting */ /* vector for result - size of x + 3 */ long_z = alloc_and_save(taskData, WORDS(lx+3+1), F_MUTABLE_BIT|F_BYTE_OBJ); div_unsigned_long (DEREFBYTEHANDLE(long_x), DEREFBYTEHANDLE(long_y), DEREFBYTEHANDLE(long_z), lx, ly); /* Copy it down */ POLYUNSIGNED i; for(i = 0; i <= lx-ly; i++) { DEREFBYTEHANDLE(long_z)[i] = DEREFBYTEHANDLE(long_z)[i+ly+2]; } /* Clear the rest */ for(; i < lx+3; i++) { DEREFBYTEHANDLE(long_z)[i] = 0; } return make_canonical(taskData, long_z, sign_x ^ sign_y); } } /* div_longc */ /******************************************************************************/ /* */ /* rem_long_c - called from sparc_assembly.s */ /* */ /******************************************************************************/ Handle rem_longc(TaskData *taskData, Handle y, Handle x) { Handle long_x, long_y; int sign_x, sign_y; if (IS_INT(DEREFWORD(x)) && IS_INT(DEREFWORD(y))) /* Both short */ { POLYSIGNED xs = UNTAGGED(DEREFWORD(x)); POLYSIGNED ys = UNTAGGED(DEREFWORD(y)); /* Raise exceptions if remaindering by zero. */ if (ys == 0) raise_exception0(taskData, EXC_divide); /* Only possible overflow is minint mod -1 */ if (xs != -MAXTAGGED-1 || ys != -1) return taskData->saveVec.push(TAGGED(xs % ys)); } /* Long operands or overflow - convert any shorts to long form */ long_x = get_long(x, taskData->x_ehandle , &sign_x); long_y = get_long(y, taskData->y_ehandle , &sign_y); /* Get lengths of args. */ POLYUNSIGNED lx = get_length(DEREFWORD(long_x)); POLYUNSIGNED ly = get_length(DEREFWORD(long_y)); /* If length of y is zero raise divideerror */ if (ly == 0) raise_exception0(taskData, EXC_divide); /* Get remainder */ if (lx < ly) { /* When x < y remainder is x. */ return x; /* NOT long_x, since x may be a short. SPF 1/11/95 */ } else { POLYUNSIGNED i; Handle long_z; /* copy in case it needs shifting */ long_y = copy_long(taskData, long_y,ly); /* vector for result - size of x + 3 */ long_z = alloc_and_save(taskData, WORDS(lx+3+1), F_MUTABLE_BIT|F_BYTE_OBJ); div_unsigned_long (DEREFBYTEHANDLE(long_x), DEREFBYTEHANDLE(long_y), DEREFBYTEHANDLE(long_z), lx, ly); /* Copy it down */ for(i = 0; i < ly; i++) { DEREFBYTEHANDLE(long_z)[i] = DEREFBYTEHANDLE(long_z)[i+2]; } /* Clear the rest */ for(; i < lx+3; i++) { DEREFBYTEHANDLE(long_z)[i] = 0; } return make_canonical(taskData, long_z, sign_x /* Same sign as dividend */ ); /* ML says it should have same as divisor. */ } } /* rem_longc */ /******************************************************************************/ /* */ /* compare_unsigned - utility function */ /* */ /******************************************************************************/ /* compare_unsigned is passed LONG integers only */ static int compare_unsigned(Handle x, Handle y) { /* First look at the lengths */ POLYUNSIGNED lx = get_length(DEREFWORD(x)); POLYUNSIGNED ly = get_length(DEREFWORD(y)); if (lx != ly) /* u > v if u longer than v */ { return (lx > ly ? 1 : -1); } { /* Same length - look at the values. */ byte *u = DEREFBYTEHANDLE(x); byte *v = DEREFBYTEHANDLE(y); POLYUNSIGNED i = lx; while (i > 0) { i--; if (u[i] != v[i]) { return u[i] > v[i] ? 1 : -1; } } /* Must be equal */ return 0; } } /* compare_unsigned */ /******************************************************************************/ /* */ /* compareLong - called by run-time system */ /* */ /******************************************************************************/ int compareLong(TaskData *taskData, Handle y, Handle x) { Handle long_x, long_y; int sign_x, sign_y; if (IS_INT(DEREFWORD(x)) && IS_INT(DEREFWORD(y))) /* Both short */ { POLYSIGNED t = UNTAGGED(DEREFWORD(x)) - UNTAGGED(DEREFWORD(y)); if (t == 0) return 0; /* equal */ else if (t < 0) return -1; /* less */ else return 1; /* greater */ } /* Convert to long form */ long_x = get_long(x, taskData->x_ehandle, &sign_x); long_y = get_long(y, taskData->y_ehandle, &sign_y); if (sign_x >= 0) /* x is positive */ { if (sign_y >= 0) /* y also positive */ { return compare_unsigned(long_x, long_y); } else /* y negative so x > y */ { return 1; } } else { /* x is negative */ if (sign_y < 0) /* y also negative */ { return compare_unsigned(long_y, long_x); } else /* y positive so x < y */ { return -1; } } } /* compareLong */ /* logical_long. General purpose function for binary logical operations. */ static Handle logical_long(TaskData *taskData, Handle x, Handle y, int signX, int signY, unsigned(*op)(unsigned, unsigned)) { byte *u; /* byte-pointer for longer number */ byte *v; /* byte-pointer for shorter number */ Handle z; int sign, signU, signV; POLYUNSIGNED lu; /* length of u in bytes */ POLYUNSIGNED lv; /* length of v in bytes */ { /* find the longer number */ POLYUNSIGNED lx = get_length(DEREFWORD(x)); POLYUNSIGNED ly = get_length(DEREFWORD(y)); /* Make ``u'' the longer. */ if (lx < ly) { // Get result vector. There can't be any carry at the end so // we just need to make this as large as the larger number // plus sign byte z = alloc_and_save(taskData, WORDS(ly+1), F_MUTABLE_BIT|F_BYTE_OBJ); /* now safe to dereference pointers */ u = DEREFBYTEHANDLE(y); lu = ly; v = DEREFBYTEHANDLE(x); lv = lx; signU = signY; signV = signX; } else { /* Get result vector. */ z = alloc_and_save(taskData, WORDS(lx+1), F_MUTABLE_BIT|F_BYTE_OBJ); /* now safe to dereference pointers */ u = DEREFBYTEHANDLE(x); lu = lx; v = DEREFBYTEHANDLE(y); lv = ly; signU = signX; signV = signY; } } sign = (*op)(signU, signV); /* -1 if negative, 0 if positive. */ { /* do the actual operations */ byte *w = DEREFBYTEHANDLE(z); int borrowU = 1, borrowV = 1, borrowW = 1; POLYUNSIGNED i = 0; /* Do the operations. */ for( ; i < lv; i++) { int wI; /* Have to convert negative values to twos complement. */ if (signU) borrowU += 255 - u[i]; else borrowU = u[i]; if (signV) borrowV += 255 - v[i]; else borrowV = v[i]; wI = (*op)(borrowU, borrowV) & 255; if (sign) { /* Have to convert the result back to twos complement. */ borrowW += 255 - wI; w[i] = borrowW & 255; borrowW >>= 8; } else w[i] = wI; borrowU >>= 8; borrowV >>= 8; } /* At this point the borrow of V should be zero. */ ASSERT(signV == 0 || borrowV == 0); /* Continue with ``u''. */ for( ; i < lu; i++) { int wI; if (signU) borrowU += 255 - u[i]; else borrowU = u[i]; if (signV) borrowV = 255; else borrowV = 0; wI = (*op)(borrowU, borrowV) & 255; if (sign) { /* Have to convert the result back to twos complement. */ borrowW += 255 - wI; w[i] = borrowW & 255; borrowW >>= 8; } else w[i] = wI; borrowU >>= 8; borrowV >>= 8; } /* We should now no longer have any borrows. */ ASSERT(signU == 0 || borrowU == 0); ASSERT(sign == 0 || borrowW == 0); } return make_canonical(taskData, z, sign); } /* logical_long */ static unsigned doAnd(unsigned i, unsigned j) { return i & j; } static unsigned doOr(unsigned i, unsigned j) { return i | j; } static unsigned doXor(unsigned i, unsigned j) { return i ^ j; } /******************************************************************************/ /* */ /* and_longc - called by run-time system */ /* */ /******************************************************************************/ Handle and_longc(TaskData *taskData, Handle y, Handle x) { Handle long_x, long_y; int sign_x, sign_y; if (IS_INT(DEREFWORD(x)) && IS_INT(DEREFWORD(y))) /* Both short */ { /* There's no problem with overflow so we can just AND together the values. */ POLYSIGNED t = UNTAGGED(DEREFWORD(x)) & UNTAGGED(DEREFWORD(y)); return taskData->saveVec.push(TAGGED(t)); } /* Long arguments. */ long_x = get_long(x, taskData->x_ehandle , &sign_x); /* Convert to long form */ long_y = get_long(y, taskData->y_ehandle , &sign_y); return logical_long(taskData, long_x, long_y, sign_x, sign_y, doAnd); } /******************************************************************************/ /* */ /* or_longc - called by run-time system */ /* */ /******************************************************************************/ Handle or_longc(TaskData *taskData, Handle y, Handle x) { Handle long_x, long_y; int sign_x, sign_y; if (IS_INT(DEREFWORD(x)) && IS_INT(DEREFWORD(y))) /* Both short */ { /* There's no problem with overflow so we can just OR together the values. */ POLYSIGNED t = UNTAGGED(DEREFWORD(x)) | UNTAGGED(DEREFWORD(y)); return taskData->saveVec.push(TAGGED(t)); } /* Long arguments. */ long_x = get_long(x, taskData->x_ehandle , &sign_x); /* Convert to long form */ long_y = get_long(y, taskData->y_ehandle , &sign_y); return logical_long(taskData, long_x, long_y, sign_x, sign_y, doOr); } /******************************************************************************/ /* */ /* xor_longc - called by run-time system */ /* */ /******************************************************************************/ Handle xor_longc(TaskData *taskData, Handle y, Handle x) { Handle long_x, long_y; int sign_x, sign_y; if (IS_INT(DEREFWORD(x)) && IS_INT(DEREFWORD(y))) /* Both short */ { /* There's no problem with overflow so we can just XOR together the values. */ POLYSIGNED t = UNTAGGED(DEREFWORD(x)) ^ UNTAGGED(DEREFWORD(y)); return taskData->saveVec.push(TAGGED(t)); } /* Long arguments. */ long_x = get_long(x, taskData->x_ehandle , &sign_x); /* Convert to long form */ long_y = get_long(y, taskData->y_ehandle , &sign_y); return logical_long(taskData, long_x, long_y, sign_x, sign_y, doXor); } /* These functions are used primarily during porting. They handle both short and long forms of integers and are generally superseded by hand coded assembly code versions and the code generator. Some of them are retained in some code-generators to handle the long forms of integers. */ Handle equal_longc(TaskData *taskData, Handle y, Handle x) /* Returns 1 if the arguments are equal, otherwise 0. */ { bool c = compareLong(taskData, y, x) == 0; return taskData->saveVec.push(c ? TAGGED(1) : TAGGED(0)); } Handle not_equal_longc(TaskData *taskData, Handle y, Handle x) { bool c = compareLong(taskData, y, x) != 0; return taskData->saveVec.push(c ? TAGGED(1) : TAGGED(0)); } Handle gt_longc(TaskData *taskData, Handle y, Handle x) { bool c = (compareLong(taskData, y, x) == 1); return taskData->saveVec.push(c ? TAGGED(1) : TAGGED(0)); } Handle ls_longc(TaskData *taskData, Handle y, Handle x) { bool c = (compareLong(taskData, y, x) == -1); return taskData->saveVec.push(c ? TAGGED(1) : TAGGED(0)); } Handle ge_longc(TaskData *taskData, Handle y, Handle x) { bool c = compareLong(taskData, y, x) != -1; return taskData->saveVec.push(c ? TAGGED(1) : TAGGED(0)); } Handle le_longc(TaskData *taskData, Handle y, Handle x) { bool c = compareLong(taskData, y, x) != 1; return taskData->saveVec.push(c ? TAGGED(1) : TAGGED(0)); } /* Return the low-order bits of an integer whether it is long or short form. */ Handle int_to_word_c(TaskData *taskData, Handle x) { /* If it's already short it's easy. */ if (IS_INT(DEREFWORD(x))) return x; byte *u = DEREFBYTEHANDLE(x); POLYUNSIGNED r = 0; for (unsigned i=0; i < sizeof(PolyWord); i++) { r |= u[i] << (8*i); } if (OBJ_IS_NEGATIVE(x->Word().AsObjPtr()->LengthWord())) r = 0-r; // Use 0-r rather than -r since it's an unsigned value. return taskData->saveVec.push(TAGGED(r)); } polyml.5.2.1/libpolyml/arb.h0000644000175000017500000000530410602661055014717 0ustar daviddavid/* Title: arb.h - exports signature for arb.c Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef ARB_H_INCLUDED #define ARB_H_INCLUDED class SaveVecEntry; typedef SaveVecEntry *Handle; class TaskData; extern Handle Make_arbitrary_precision(TaskData *taskData, POLYSIGNED); extern Handle Make_unsigned(TaskData *taskData, POLYUNSIGNED); extern Handle Make_arb_from_pair(TaskData *taskData, unsigned hi, unsigned lo); extern Handle Make_arb_from_pair_scaled(TaskData *taskData, unsigned hi, unsigned lo, unsigned scale); void get_C_pair(TaskData *taskData, PolyWord number, unsigned long *pHi, unsigned long *pLo); extern Handle add_longc(TaskData *taskData, Handle,Handle); extern Handle sub_longc(TaskData *taskData, Handle,Handle); extern Handle mult_longc(TaskData *taskData, Handle,Handle); extern Handle div_longc(TaskData *taskData, Handle,Handle); extern Handle rem_longc(TaskData *taskData, Handle,Handle); extern Handle or_longc(TaskData *taskData, Handle,Handle); extern Handle and_longc(TaskData *taskData, Handle,Handle); extern Handle xor_longc(TaskData *taskData, Handle,Handle); extern Handle neg_longc(TaskData *taskData, Handle); extern Handle equal_longc(TaskData *taskData, Handle y, Handle x); extern Handle not_equal_longc(TaskData *taskData, Handle y, Handle x); extern Handle gt_longc(TaskData *taskData, Handle y, Handle x); extern Handle ls_longc(TaskData *taskData, Handle y, Handle x); extern Handle ge_longc(TaskData *taskData, Handle y, Handle x); extern Handle le_longc(TaskData *taskData, Handle y, Handle x); extern Handle int_to_word_c(TaskData *taskData, Handle x); extern POLYUNSIGNED get_C_ulong(TaskData *taskData, PolyWord); extern unsigned short get_C_ushort(TaskData *taskData, PolyWord); extern POLYSIGNED get_C_long(TaskData *taskData, PolyWord); extern short get_C_short(TaskData *taskData, PolyWord); extern int compareLong(TaskData *taskData, Handle,Handle); #endif polyml.5.2.1/libpolyml/basicio.cpp0000644000175000017500000021456310772160234016131 0ustar daviddavid/* Title: Basic IO. Copyright (c) 2000 David C. J. Matthews Portions of this code are derived from the original stream io package copyright CUTS 1983-2000. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ /* This module replaces the old stream IO based on stdio. It works at a lower level with the buffering being done in ML. Sockets are generally dealt with in network.c but it is convenient to use the same table for them particularly since it simplifies the implementation of "poll". Directory operations are also included in here. DCJM May 2000. */ #ifdef WIN32 #include "winconfig.h" #else #include "config.h" #endif #ifdef HAVE_FCNTL_H #include #endif #ifdef HAVE_SYS_TYPES_H #include #endif #ifdef HAVE_SYS_STAT_H #include #endif #ifdef HAVE_ASSERT_H #include #define ASSERT(x) assert(x) #else #define ASSERT(x) 0 #endif #ifdef HAVE_ERRNO_H #include #endif #ifdef HAVE_SIGNAL_H #include #endif #ifdef HAVE_STDLIB_H #include #endif #ifdef HAVE_ALLOCA_H #include #endif #ifdef HAVE_IO_H #include #endif #ifdef HAVE_SYS_PARAM_H #include #endif #ifdef HAVE_SYS_IOCTL_H #include #endif #ifdef HAVE_SYS_TIME_H #include #endif #ifdef HAVE_SYS_TYPES_H #include #endif #ifdef HAVE_UNISTD_H #include #endif #ifdef HAVE_POLL_H #include #endif #ifdef HAVE_STRING_H #include #endif #ifdef HAVE_SYS_SELECT_H #include #endif #ifdef HAVE_MALLOC_H #include #endif #ifdef HAVE_DIRECT_H #include #endif #ifdef HAVE_TCHAR_H #include #else #ifdef UNICODE typedef short TCHAR; #else typedef char TCHAR; #endif #endif #ifdef WIN32 #ifdef USEWINSOCK2 #include #else #include #endif #endif #if(!defined(MAXPATHLEN) && defined(MAX_PATH)) #define MAXPATHLEN MAX_PATH #endif #ifndef O_BINARY #define O_BINARY 0 /* Not relevant. */ #endif #ifndef INFTIM #define INFTIM (-1) #endif #include "globals.h" #include "basicio.h" #include "sys.h" #include "proper_io.h" #include "gc.h" #include "run_time.h" #include "machine_dep.h" #include "arb.h" #include "processes.h" #include "diagnostics.h" #include "io_internal.h" #include "scanaddrs.h" #include "polystring.h" #include "mpoly.h" #include "save_vec.h" #include "rts_module.h" #include "locking.h" #ifdef WINDOWS_PC #include "Console.h" #endif #ifndef O_ACCMODE #define O_ACCMODE (O_RDONLY|O_RDWR|O_WRONLY) #endif #define STREAMID(x) (DEREFSTREAMHANDLE(x)->streamNo) #define SAVE(x) taskData->saveVec.push(x) /* Points to tokens which represent the streams and the stream itself. For each stream a single word token is made containing the file number, and its address is put in here. When the stream is closed the entry is overwritten. Any further activity will be trapped because the address in the vector will not be the same as the address of the token. This also prevents streams other than stdin and stdout from being made persistent. stdin, stdout and stderr are treated specially. The tokens for them are entries in the interface vector and so can be made persistent. */ /* I've tried various ways of getting asynchronous IO to work in a consistent manner across different kinds of IO devices in Windows. It is possible to pass some kinds of handles to WaitForMultipleObjects but not all. Anonymous pipes, for example, cannot be used in Windows 95 and don't seem to do what is expected in Windows NT (they return signalled even when there is no input). The console is even more of a mess. The handle is signalled when there are any events (such as mouse movements) available but these are ignored by ReadFile, which may then block. Conversely using ReadFile to read less than a line causes the handle to be unsignalled, supposedly meaning that no input is available, yet ReadFile will return subsequent characters without blocking. The eventual solution was to replace the console completely. DCJM May 2000 */ PIOSTRUCT basic_io_vector; PLock ioLock; // Currently this just protects against two threads using the same entry #ifdef WINDOWS_PC /* Deal with the various cases to see if input is available. */ static int isAvailable(TaskData *taskData, PIOSTRUCT strm) { HANDLE hFile = (HANDLE)_get_osfhandle(strm->device.ioDesc); if (isPipe(strm)) { DWORD dwAvail; int err; if (PeekNamedPipe(hFile, NULL, 0, NULL, &dwAvail, NULL)) { return (dwAvail == 0 ? 0 : 1); } err = GetLastError(); /* Windows returns ERROR_BROKEN_PIPE on input whereas Unix only returns it on output and treats it as EOF. We follow Unix here. */ if (err == ERROR_BROKEN_PIPE) return 1; /* At EOF - will not block. */ else raise_syscall(taskData, "PeekNamedPipe failed", -err); /*NOTREACHED*/ } else if (isConsole(strm)) return isConsoleInput(); else if (isDevice(strm)) { if (WaitForSingleObject(hFile, 0) == WAIT_OBJECT_0) return 1; else return 0; } else /* File - We may be at end-of-file but we won't block. */ return 1; } #else // Test whether input is available and block if it is not. // This is also used in xwindows.cpp // N.B. There may be a GC while in here. void process_may_block(TaskData *taskData, int fd, int/* ioCall*/) { #ifdef __CYGWIN__ static struct timeval poll = {0,1}; #else static struct timeval poll = {0,0}; #endif fd_set read_fds; int selRes; while (1) { FD_ZERO(&read_fds); FD_SET((int)fd,&read_fds); /* If there is something there we can return. */ selRes = select(FD_SETSIZE, &read_fds, NULL, NULL, &poll); if (selRes > 0) return; /* Something waiting. */ else if (selRes < 0 && errno != EINTR) // Maybe another thread closed descr raise_syscall(taskData, "select failed %d\n", errno); // Wait for activity. processes->ThreadPauseForIO(taskData, fd); } } #endif static unsigned max_streams; /* If we try opening a stream and it fails with EMFILE (too many files open) we may be able to recover by garbage-collecting and closing some unreferenced streams. This flag is set to indicate that we have had an EMFILE error and is cleared whenever a file is closed or opened successfully. It prevents infinite looping if we really have too many files. */ bool emfileFlag = false; /* Close a stream, either explicitly or as a result of detecting an unreferenced stream in the g.c. Doesn't report any errors. */ void close_stream(PIOSTRUCT str) { if (!isOpen(str)) return; if (isDirectory(str)) { #ifdef WINDOWS_PC FindClose(str->device.directory.hFind); #else closedir(str->device.ioDir); #endif } #ifdef WINDOWS_PC else if (isSocket(str)) { closesocket(str->device.sock); } else if (isConsole(str)) return; #endif else close(str->device.ioDesc); str->ioBits = 0; str->token = 0; emfileFlag = false; } /******************************************************************************/ /* */ /* get_stream - utility function - doesn't allocate */ /* */ /******************************************************************************/ PIOSTRUCT get_stream(PolyObject *stream_token) /* Checks that the stream number is valid and returns the actual stream. Returns NULL if the stream is closed. */ { POLYUNSIGNED stream_no = ((StreamToken*)stream_token)->streamNo; if (stream_no >= max_streams || basic_io_vector[stream_no].token != stream_token || ! isOpen(&basic_io_vector[stream_no])) return 0; /* Closed. */ return &basic_io_vector[stream_no]; } /******************************************************************************/ /* */ /* make_stream_entry - utility function - allocates in Poly heap */ /* */ /******************************************************************************/ Handle make_stream_entry(TaskData *taskData) /* Find a free entry in the stream vector and return a token for it. The address of the token is preserved on the save vector so it will not be deleted if there is a garbage collection (Entries in the stream vector itself are "weak". */ { unsigned stream_no; ioLock.Lock(); // Find an unused entry. for(stream_no = 0; stream_no < max_streams && basic_io_vector[stream_no].token != 0; stream_no++); /* Check we have enough space. */ if (stream_no >= max_streams) { /* No space. */ int oldMax = max_streams; max_streams += max_streams/2; basic_io_vector = (PIOSTRUCT)realloc(basic_io_vector, max_streams*sizeof(IOSTRUCT)); /* Clear the new space. */ memset(basic_io_vector+oldMax, 0, (max_streams-oldMax)*sizeof(IOSTRUCT)); } Handle str_token = alloc_and_save(taskData, 1, F_BYTE_OBJ); STREAMID(str_token) = stream_no; ASSERT(!isOpen(&basic_io_vector[stream_no])); /* Clear the entry then set the token. */ memset(&basic_io_vector[stream_no], 0, sizeof(IOSTRUCT)); basic_io_vector[stream_no].token = DEREFWORDHANDLE(str_token); ioLock.Unlock(); return str_token; } /******************************************************************************/ /* */ /* free_stream_entry - utility function */ /* */ /******************************************************************************/ /* Free an entry in the stream vector - used when openstreamc grabs a stream vector entry, but then fails to open the associated file. (This happens frequently when we are using the Poly make system.) If we don't recycle the stream vector entries immediately we quickly run out and must perform a full garbage collection to recover the unused ones. SPF 12/9/95 */ void free_stream_entry(unsigned stream_no) { ASSERT(0 <= stream_no && stream_no < max_streams); ioLock.Lock(); basic_io_vector[stream_no].token = 0; basic_io_vector[stream_no].ioBits = 0; ioLock.Unlock(); } #ifdef WINDOWS_PC static int getFileType(int stream) { if (stream == 0 && useConsole) /* If this is stdio and we're using our own console.*/ return IO_BIT_CONSOLE; switch (GetFileType((HANDLE)_get_osfhandle(stream)) & ~FILE_TYPE_REMOTE) { case FILE_TYPE_PIPE: return IO_BIT_PIPE; case FILE_TYPE_CHAR: return IO_BIT_DEV; default: return 0; } } #endif // Retry the call to IO dispatch. Called if an IO call is interrupted by // the user pressing ^C. This allows the code to have an exception raised in // it if the user has typed "f" to the prompt. static void retry_rts_call(TaskData *taskData) { machineDependent->SetForRetry(taskData, POLY_SYS_io_dispatch); throw IOException(EXC_RETRY); } /* Copy a file name to a buffer. Raises an exception if the string will not fit. */ static void getFileName(TaskData *taskData, Handle name, TCHAR *buff, POLYUNSIGNED buffSize) { POLYUNSIGNED length = Poly_string_to_C(DEREFWORD(name), buff, buffSize); if (length > buffSize) raise_syscall(taskData, "File name too long", ENAMETOOLONG); } /* Open a file in the required mode. */ static Handle open_file(TaskData *taskData, Handle filename, int mode, int access, int isPosix) { TCHAR string_buffer[MAXPATHLEN]; int stream; TryAgain: /* Copy the string and check the length. */ getFileName(taskData, filename, string_buffer, MAXPATHLEN); { Handle str_token = make_stream_entry(taskData); POLYUNSIGNED stream_no = STREAMID(str_token); stream = open(string_buffer, mode, access); if (stream >= 0) { PIOSTRUCT strm = &basic_io_vector[stream_no]; strm->device.ioDesc = stream; strm->ioBits = IO_BIT_OPEN; if ((mode & O_ACCMODE) != O_WRONLY) strm->ioBits |= IO_BIT_READ; if ((mode & O_ACCMODE) != O_RDONLY) strm->ioBits |= IO_BIT_WRITE; #ifdef WINDOWS_PC strm->ioBits |= getFileType(stream); #else if (! isPosix) { /* Set the close-on-exec flag. We don't set this if we are being called from one of the low level functions in the Posix structure. I assume that if someone is using those functions they know what they're doing and would expect the behaviour to be close to that of the underlying function. */ fcntl(stream, F_SETFD, 1); } #endif emfileFlag = false; /* Successful open. */ return(str_token); } free_stream_entry(stream_no); /* SPF 12/9/95 */ switch (errno) { case EINTR: { retry_rts_call(taskData); /*NOTREACHED*/ } case EMFILE: /* too many open files */ { if (emfileFlag) /* Previously had an EMFILE error. */ raise_syscall(taskData, "Cannot open", EMFILE); emfileFlag = true; FullGC(taskData); /* May clear emfileFlag if we close a file. */ goto TryAgain; } default: raise_syscall(taskData, "Cannot open", errno); /*NOTREACHED*/ return 0; } } } /* Close the stream unless it is stdin or stdout or already closed. */ static Handle close_file(TaskData *taskData, Handle stream) { PIOSTRUCT strm = get_stream(DEREFHANDLE(stream)); int stream_no = STREAMID(stream); if (strm != NULL && stream_no > 2) /* Ignore closed streams, stdin, stdout or stderr. */ { close_stream(strm); } return Make_arbitrary_precision(taskData, 0); } /* close_file */ /* Read into an array. */ static Handle readArray(TaskData *taskData, Handle stream, Handle args, bool/*isText*/) { /* The isText argument is ignored in both Unix and Windows but is provided for future use. Windows remembers the mode used when the file was opened to determine whether to translate CRLF into LF. */ while (1) // Loop if interrupted. { // First test to see if we have input available. // These tests may result in a GC if another thread is running. PIOSTRUCT strm = get_stream(DEREFHANDLE(stream)); /* Raise an exception if the stream has been closed. */ if (strm == NULL) raise_syscall(taskData, "Stream is closed", EBADF); int fd = strm->device.ioDesc; #ifdef WINDOWS_PC if (isConsole(strm)) { while (! isConsoleInput()) processes->ThreadPause(taskData); } else { while (! isAvailable(taskData, strm)) { processes->ThreadPauseForIO(taskData, strm->device.ioDesc); strm = get_stream(DEREFHANDLE(stream)); // Could have been closed. } } #else /* Unix. */ process_may_block(taskData, fd, POLY_SYS_io_dispatch); #endif // We can now try to read without blocking. strm = get_stream(DEREFHANDLE(stream)); /* Raise an exception if the stream has been closed. */ if (strm == NULL) raise_syscall(taskData, "Stream is closed", EBADF); fd = strm->device.ioDesc; byte *base = DEREFHANDLE(args)->Get(0).AsObjPtr()->AsBytePtr(); POLYUNSIGNED offset = get_C_ulong(taskData, DEREFWORDHANDLE(args)->Get(1)); POLYUNSIGNED length = get_C_ulong(taskData, DEREFWORDHANDLE(args)->Get(2)); POLYSIGNED haveRead; int err; #ifdef WINDOWS_PC if (isConsole(strm)) { haveRead = getConsoleInput((char*)base+offset, length); err = errno; } else #endif { // Unix and Windows other than console. haveRead = read(fd, base+offset, length); err = errno; } if (haveRead >= 0) return Make_arbitrary_precision(taskData, haveRead); // Success. // If it failed because it was interrupted keep trying otherwise it's an error. if (err != EINTR) raise_syscall(taskData, "Error while reading", err); } } /* Return input as a string. We don't actually need both readArray and readString but it's useful to have both to reduce unnecessary garbage. The IO library will construct one from the other but the higher levels choose the appropriate function depending on need. */ static Handle readString(TaskData *taskData, Handle stream, Handle args, bool/*isText*/) { POLYUNSIGNED length = get_C_ulong(taskData, DEREFWORD(args)); while (1) // Loop if interrupted. { // First test to see if we have input available. // These tests may result in a GC if another thread is running. PIOSTRUCT strm = get_stream(DEREFHANDLE(stream)); /* Raise an exception if the stream has been closed. */ if (strm == NULL) raise_syscall(taskData, "Stream is closed", EBADF); int fd = strm->device.ioDesc; #ifdef WINDOWS_PC if (isConsole(strm)) { while (! isConsoleInput()) processes->ThreadPause(taskData); } else { while (! isAvailable(taskData, strm)) { processes->ThreadPauseForIO(taskData, strm->device.ioDesc); strm = get_stream(DEREFHANDLE(stream)); // Could have been closed. } } #else /* Unix. */ process_may_block(taskData, fd, POLY_SYS_io_dispatch); #endif // We can now try to read without blocking. strm = get_stream(DEREFHANDLE(stream)); fd = strm->device.ioDesc; // We previously allocated the buffer on the stack but that caused // problems with multi-threading at least on Mac OS X because of // stack exhaustion. We limit the space to 100k. */ if (length > 102400) length = 102400; byte *buff = (byte*)malloc(length); if (buff == 0) raise_syscall(taskData, "Unable to allocate buffer", ENOMEM); POLYSIGNED haveRead; int err; #ifdef WINDOWS_PC if (isConsole(strm)) { haveRead = getConsoleInput((char*)buff, length); err = errno; } else #endif { // Unix and Windows other than console. haveRead = read(fd, buff, length); err = errno; } if (haveRead >= 0) { Handle result = SAVE(Buffer_to_Poly(taskData, (char*)buff, haveRead)); free(buff); return result; } free(buff); // If it failed because it was interrupted keep trying otherwise it's an error. if (err != EINTR) raise_syscall(taskData, "Error while reading", err); } } static Handle writeArray(TaskData *taskData, Handle stream, Handle args, bool/*isText*/) { /* The isText argument is ignored in both Unix and Windows but is provided for future use. Windows remembers the mode used when the file was opened to determine whether to translate LF into CRLF. */ PolyWord base = DEREFWORDHANDLE(args)->Get(0); POLYUNSIGNED offset = get_C_ulong(taskData, DEREFWORDHANDLE(args)->Get(1)); POLYUNSIGNED length = get_C_ulong(taskData, DEREFWORDHANDLE(args)->Get(2)); PIOSTRUCT strm = get_stream(stream->WordP()); POLYSIGNED haveWritten; byte ch; /* Raise an exception if the stream has been closed. */ if (strm == NULL) raise_syscall(taskData, "Stream is closed", EBADF); /* We don't actually handle cases of blocking on output. */ /* process_may_block(strm); */ byte *toWrite; if (IS_INT(base)) { /* To allow this function to work on strings as well as vectors we have to be able to handle the special case of a single character string. */ ch = (byte)(UNTAGGED(base)); toWrite = &ch; offset = 0; length = 1; } else toWrite = base.AsObjPtr()->AsBytePtr(); haveWritten = write(strm->device.ioDesc, toWrite+offset, length); if (haveWritten < 0) raise_syscall(taskData, "Error while writing", errno); return Make_arbitrary_precision(taskData, haveWritten); } /* Test whether we can read without blocking. Returns 0 if it will block, 1 if it will not. */ static int canInput(TaskData *taskData, Handle stream) { PIOSTRUCT strm = get_stream(stream->WordP()); if (strm == NULL) raise_syscall(taskData, "Stream is closed", EBADF); #ifdef WINDOWS_PC return isAvailable(taskData, strm); #else { /* Unix - use "select" to find out if there is input available. */ struct timeval delay = { 0, 0 }; fd_set read_fds; int sel; FD_ZERO(&read_fds); FD_SET(strm->device.ioDesc, &read_fds); sel = select(FD_SETSIZE, &read_fds, NULL, NULL, &delay); if (sel < 0 && errno != EINTR) raise_syscall(taskData, "select failed", errno); else if (sel > 0) return 1; else return 0; } #endif } /* Test whether we can write without blocking. Returns 0 if it will block, 1 if it will not. */ static int canOutput(TaskData *taskData, Handle stream) { PIOSTRUCT strm = get_stream(stream->WordP()); if (strm == NULL) raise_syscall(taskData, "Stream is closed", EBADF); #ifdef WINDOWS_PC /* There's no way I can see of doing this in Windows. */ return 1; #else { /* Unix - use "select" to find out if output is possible. */ struct timeval delay = { 0, 0 }; fd_set read_fds, write_fds, except_fds; int sel; FD_ZERO(&read_fds); FD_ZERO(&write_fds); FD_ZERO(&except_fds); FD_SET(strm->device.ioDesc, &write_fds); sel = select(FD_SETSIZE,&read_fds,&write_fds,&except_fds,&delay); if (sel < 0 && errno != EINTR) raise_syscall(taskData, "select failed", errno); else if (sel > 0) return 1; else return 0; } #endif } static long seekStream(TaskData *taskData, PIOSTRUCT strm, long pos, int origin) { long lpos; lpos = lseek(strm->device.ioDesc, pos, origin); if (lpos < 0) raise_syscall(taskData, "Position error", errno); return lpos; } /* Return the number of bytes available on the device. Works only for files since it is meaningless for other devices. */ static Handle bytesAvailable(TaskData *taskData, Handle stream) { long original, endOfStream; PIOSTRUCT strm = get_stream(stream->WordP()); if (strm == NULL) raise_syscall(taskData, "Stream is closed", EBADF); /* Remember our original position, seek to the end, then seek back. */ original = seekStream(taskData, strm, 0L, SEEK_CUR); endOfStream = seekStream(taskData, strm, 0L, SEEK_END); if (seekStream(taskData, strm, original, SEEK_SET) != original) raise_syscall(taskData, "Position error", errno); return Make_arbitrary_precision(taskData, endOfStream-original); } #define FILEKIND_FILE 0 #define FILEKIND_DIR 1 #define FILEKIND_LINK 2 #define FILEKIND_TTY 3 #define FILEKIND_PIPE 4 #define FILEKIND_SKT 5 #define FILEKIND_DEV 6 #define FILEKIND_ERROR (-1) static Handle fileKind(TaskData *taskData, Handle stream) { PIOSTRUCT strm = get_stream(stream->WordP()); if (strm == NULL) raise_syscall(taskData, "Stream is closed", EBADF); #ifdef WINDOWS_PC { if (isPipe(strm)) return Make_arbitrary_precision(taskData, FILEKIND_PIPE); else if (isDevice(strm)) /* Character devices other than console. */ return Make_arbitrary_precision(taskData, FILEKIND_DEV); else if (isConsole(strm)) return Make_arbitrary_precision(taskData, FILEKIND_TTY); else /* Should we try to distinguish a file from a directory? At the moment we don't seem to be able to open a directory, at least in NT 4.0. */ return Make_arbitrary_precision(taskData, FILEKIND_FILE); } #else { struct stat statBuff; if (fstat(strm->device.ioDesc, &statBuff) < 0) raise_syscall(taskData, "Stat failed", errno); switch (statBuff.st_mode & S_IFMT) { case S_IFIFO: return Make_arbitrary_precision(taskData, FILEKIND_PIPE); case S_IFCHR: case S_IFBLK: if (isatty(strm->device.ioDesc)) return Make_arbitrary_precision(taskData, FILEKIND_TTY); else return Make_arbitrary_precision(taskData, FILEKIND_DEV); case S_IFDIR: return Make_arbitrary_precision(taskData, FILEKIND_DIR); case S_IFREG: return Make_arbitrary_precision(taskData, FILEKIND_FILE); case S_IFLNK: return Make_arbitrary_precision(taskData, FILEKIND_LINK); case S_IFSOCK: return Make_arbitrary_precision(taskData, FILEKIND_SKT); default: return Make_arbitrary_precision(taskData, -1); } } #endif } /* Polling. For the moment this applies only to objects which can be opened in the file system. It may need to be extended to sockets later. */ #define POLL_BIT_IN 1 #define POLL_BIT_OUT 2 #define POLL_BIT_PRI 4 /* Find out what polling options, if any, are allowed on this file descriptor. We assume that polling is allowed on all descriptors, either for reading or writing depending on how the stream was opened. */ Handle pollTest(TaskData *taskData, Handle stream) { PIOSTRUCT strm = get_stream(stream->WordP()); int nRes = 0; if (strm == NULL) return Make_arbitrary_precision(taskData, 0); /* Allow for the possibility of both being set in the future. */ if (isRead(strm)) nRes |= POLL_BIT_IN; if (isWrite(strm)) nRes |= POLL_BIT_OUT; /* For the moment we don't allow POLL_BIT_PRI. */ return Make_arbitrary_precision(taskData, nRes); } /* Do the polling. Takes a vector of io descriptors, a vector of bits to test and a time to wait and returns a vector of results. */ static Handle pollDescriptors(TaskData *taskData, Handle args, int blockType) { PolyObject *strmVec = DEREFHANDLE(args)->Get(0).AsObjPtr(); PolyObject *bitVec = DEREFHANDLE(args)->Get(1).AsObjPtr(); POLYUNSIGNED nDesc = strmVec->Length(); ASSERT(nDesc == bitVec->Length()); /* Simply do a non-blocking poll. */ #ifdef WINDOWS_PC { /* Record the results in this vector. */ char *results = 0; int haveResult = 0; Handle resVec; if (nDesc > 0) { results = (char*)alloca(nDesc); memset(results, 0, nDesc); } for (POLYUNSIGNED i = 0; i < nDesc; i++) { Handle marker = taskData->saveVec.mark(); PIOSTRUCT strm = get_stream(strmVec->Get(i).AsObjPtr()); taskData->saveVec.reset(marker); int bits = UNTAGGED(bitVec->Get(i)); if (strm == NULL) raise_syscall(taskData, "Stream is closed", EBADF); if (isSocket(strm)) { SOCKET sock = strm->device.sock; if (bits & POLL_BIT_PRI) { u_long atMark = 0; ioctlsocket(sock, SIOCATMARK, &atMark); if (atMark) { haveResult = 1; results[i] |= POLL_BIT_PRI; } } if (bits & (POLL_BIT_IN|POLL_BIT_OUT)) { FD_SET readFds, writeFds; TIMEVAL poll = {0, 0}; FD_ZERO(&readFds); FD_ZERO(&writeFds); if (bits & POLL_BIT_IN) FD_SET(sock, &readFds); if (bits & POLL_BIT_OUT) FD_SET(sock, &writeFds); if (select(FD_SETSIZE, &readFds, &writeFds, NULL, &poll) > 0) { haveResult = 1; /* N.B. select only tells us about out-of-band data if SO_OOBINLINE is FALSE. */ if (FD_ISSET(sock, &readFds)) results[i] |= POLL_BIT_IN; if (FD_ISSET(sock, &writeFds)) results[i] |= POLL_BIT_OUT; } } } else { if ((bits & POLL_BIT_IN) && isRead(strm) && isAvailable(taskData, strm)) { haveResult = 1; results[i] |= POLL_BIT_IN; } if ((bits & POLL_BIT_OUT) && isWrite(strm)) { /* I don't know if there's any way to do this. */ if (WaitForSingleObject( (HANDLE)_get_osfhandle(strm->device.ioDesc), 0) == WAIT_OBJECT_0) { haveResult = 1; results[i] |= POLL_BIT_OUT; } } /* PRIORITY doesn't make sense for anything but a socket. */ } } if (haveResult == 0) { /* Poll failed - treat as time out. */ switch (blockType) { case 0: /* Check the time out. */ { /* The time argument is an absolute time. */ FILETIME ftTime, ftNow; /* Get the file time. */ get_C_pair(taskData, DEREFHANDLE(args)->Get(2), &ftTime.dwHighDateTime, &ftTime.dwLowDateTime); GetSystemTimeAsFileTime(&ftNow); /* If the timeout time is earlier than the current time we must return, otherwise we block. */ if (CompareFileTime(&ftTime, &ftNow) <= 0) break; /* Return the empty set. */ /* else drop through and block. */ } case 1: /* Block until one of the descriptors is ready. */ processes->BlockAndRestart(taskData, -1, false, POLY_SYS_io_dispatch); /*NOTREACHED*/ case 2: /* Just a simple poll - drop through. */ break; } } /* Copy the results to a result vector. */ if (nDesc == 0) return taskData->saveVec.push(EmptyString()); /* Empty vector. */ resVec = alloc_and_save(taskData, nDesc); for (POLYUNSIGNED j = 0; j < nDesc; j++) (DEREFWORDHANDLE(resVec))->Set(j, TAGGED(results[j])); return resVec; } #elif (! defined(HAVE_POLL_H)) /* Unix but poll isn't provided, e.g. Mac OS X. Implement in terms of "select" as far as we can. */ { fd_set readFds, writeFds, exceptFds; struct timeval poll = {0, 0}; int selectRes = 0; FD_ZERO(&readFds); FD_ZERO(&writeFds); FD_ZERO(&exceptFds); for (POLYUNSIGNED i = 0; i < nDesc; i++) { PIOSTRUCT strm = get_stream(strmVec->Get(i).AsObjPtr()); int bits = UNTAGGED(bitVec->Get(i)); if (strm == NULL) raise_syscall(taskData, "Stream is closed", EBADF); if (bits & POLL_BIT_IN) FD_SET(strm->device.ioDesc, &readFds); if (bits & POLL_BIT_OUT) FD_SET(strm->device.ioDesc, &writeFds); } /* Simply check the status without blocking. */ if (nDesc > 0) selectRes = select(FD_SETSIZE, &readFds, &writeFds, &exceptFds, &poll); if (selectRes < 0) raise_syscall(taskData, "select failed", errno); /* What if nothing was ready? */ if (selectRes == 0) { switch (blockType) { case 0: /* Check the timeout. */ { struct timeval tv; /* We have a value in microseconds. We need to split it into seconds and microseconds. */ Handle hTime = SAVE(DEREFWORDHANDLE(args)->Get(2)); Handle hMillion = Make_arbitrary_precision(taskData, 1000000); unsigned long secs = get_C_ulong(taskData, DEREFWORDHANDLE(div_longc(taskData, hMillion, hTime))); unsigned long usecs = get_C_ulong(taskData, DEREFWORDHANDLE(rem_longc(taskData, hMillion, hTime))); /* If the timeout time is earlier than the current time we must return, otherwise we block. */ if (gettimeofday(&tv, NULL) != 0) raise_syscall(taskData, "gettimeofday failed", errno); if ((unsigned long)tv.tv_sec > secs || ((unsigned long)tv.tv_sec == secs && (unsigned long)tv.tv_usec >= usecs)) break; /* else block. */ } case 1: /* Block until one of the descriptors is ready. */ processes->BlockAndRestart(taskData, -1, false, POLY_SYS_io_dispatch); /*NOTREACHED*/ case 2: /* Just a simple poll - drop through. */ break; } } /* Copy the results. */ if (nDesc == 0) return taskData->saveVec.push(EmptyString()); /* Construct a result vector. */ Handle resVec = alloc_and_save(taskData, nDesc); for (POLYUNSIGNED i = 0; i < nDesc; i++) { POLYUNSIGNED res = 0; POLYUNSIGNED bits = UNTAGGED(bitVec->Get(i)); PIOSTRUCT strm = get_stream(strmVec->Get(i).AsObjPtr()); if ((bits & POLL_BIT_IN) && FD_ISSET(strm->device.ioDesc, &readFds)) res |= POLL_BIT_IN; if ((bits & POLL_BIT_OUT) && FD_ISSET(strm->device.ioDesc, &writeFds)) res |= POLL_BIT_OUT; DEREFWORDHANDLE(resVec)->Set(i, TAGGED(res)); } return resVec; } #else /* Unix */ { int pollRes = 0; struct pollfd * fds = 0; if (nDesc > 0) fds = (struct pollfd *)alloca(nDesc * sizeof(struct pollfd)); /* Set up the request vector. */ for (unsigned i = 0; i < nDesc; i++) { PIOSTRUCT strm = get_stream(strmVec->Get(i).AsObjPtr()); POLYUNSIGNED bits = UNTAGGED(bitVec->Get(i)); if (strm == NULL) raise_syscall(taskData, "Stream is closed", EBADF); fds[i].fd = strm->device.ioDesc; fds[i].events = 0; if (bits & POLL_BIT_IN) fds[i].events |= POLLIN; /* | POLLRDNORM??*/ if (bits & POLL_BIT_OUT) fds[i].events |= POLLOUT; if (bits & POLL_BIT_PRI) fds[i].events |= POLLPRI; fds[i].revents = 0; } /* Poll the descriptors. */ if (nDesc > 0) pollRes = poll(fds, nDesc, 0); if (pollRes < 0) raise_syscall(taskData, "poll failed", errno); /* What if nothing was ready? */ if (pollRes == 0) { switch (blockType) { case 0: /* Check the timeout. */ { struct timeval tv; /* We have a value in microseconds. We need to split it into seconds and microseconds. */ Handle hTime = SAVE(DEREFWORDHANDLE(args)->Get(2)); Handle hMillion = Make_arbitrary_precision(taskData, 1000000); unsigned long secs = get_C_ulong(taskData, DEREFWORDHANDLE(div_longc(taskData, hMillion, hTime))); unsigned long usecs = get_C_ulong(taskData, DEREFWORDHANDLE(rem_longc(taskData, hMillion, hTime))); /* If the timeout time is earlier than the current time we must return, otherwise we block. */ if (gettimeofday(&tv, NULL) != 0) raise_syscall(taskData, "gettimeofday failed", errno); if ((unsigned long)tv.tv_sec > secs || ((unsigned long)tv.tv_sec == secs && (unsigned long)tv.tv_usec >= usecs)) break; /* else block. */ } case 1: /* Block until one of the descriptors is ready. */ processes->BlockAndRestart(taskData, -1, false, POLY_SYS_io_dispatch); /*NOTREACHED*/ case 2: /* Just a simple poll - drop through. */ break; } } /* Copy the results. */ if (nDesc == 0) return taskData->saveVec.push(EmptyString()); /* Construct a result vector. */ Handle resVec = alloc_and_save(taskData, nDesc); for (unsigned i = 0; i < nDesc; i++) { int res = 0; if (fds[i].revents & POLLIN) res = POLL_BIT_IN; if (fds[i].revents & POLLOUT) res = POLL_BIT_OUT; if (fds[i].revents & POLLPRI) res = POLL_BIT_PRI; DEREFWORDHANDLE(resVec)->Set(i, TAGGED(res)); } return resVec; } #endif } /* Directory functions. */ /* Open a directory. */ static Handle openDirectory(TaskData *taskData, Handle dirname) { TCHAR string_buffer[MAXPATHLEN+2]; #ifndef WINDOWS_PC TryAgain: #endif /* Copy the string and check the length. */ getFileName(taskData, dirname, string_buffer, MAXPATHLEN+2); { Handle str_token = make_stream_entry(taskData); int stream_no = STREAMID(str_token); PIOSTRUCT strm = &basic_io_vector[stream_no]; #ifdef WINDOWS_PC { HANDLE hFind; /* Tack on \* to the end so that we find all files in the directory. */ lstrcat(string_buffer, _T("\\*")); hFind = FindFirstFile(string_buffer, &strm->device.directory.lastFind); if (hFind == INVALID_HANDLE_VALUE) raise_syscall(taskData, "FindFirstFile failed", -(int)GetLastError()); strm->device.directory.hFind = hFind; /* There must be at least one file which matched. */ strm->device.directory.fFindSucceeded = 1; } #else DIR *dirp = opendir(string_buffer); if (dirp == NULL) { free_stream_entry(stream_no); switch (errno) { case EINTR: { retry_rts_call(taskData); /*NOTREACHED*/ } case EMFILE: { if (emfileFlag) /* Previously had an EMFILE error. */ raise_syscall(taskData, "Cannot open", EMFILE); emfileFlag = true; FullGC(taskData); /* May clear emfileFlag if we close a file. */ goto TryAgain; } default: raise_syscall(taskData, "opendir failed", errno); } } strm->device.ioDir = dirp; #endif strm->ioBits = IO_BIT_OPEN | IO_BIT_DIR; return(str_token); } } /* Return the next entry from the directory, ignoring current and parent arcs ("." and ".." in Windows and Unix) */ Handle readDirectory(TaskData *taskData, Handle stream) { PIOSTRUCT strm = get_stream(stream->WordP()); #ifdef WINDOWS_PC Handle result = NULL; #endif /* Raise an exception if the stream has been closed. */ if (strm == NULL) raise_syscall(taskData, "Stream is closed", EBADF); #ifdef WINDOWS_PC /* The next entry to read is already in the buffer. FindFirstFile both opens the directory and returns the first entry. If fFindSucceeded is false we have already reached the end. */ if (! strm->device.directory.fFindSucceeded) return SAVE(EmptyString()); while (result == NULL) { WIN32_FIND_DATA *pFind = &strm->device.directory.lastFind; if (!((pFind->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) && (lstrcmp(pFind->cFileName, _T(".")) == 0 || lstrcmp(pFind->cFileName, _T("..")) == 0))) { result = SAVE(C_string_to_Poly(taskData, pFind->cFileName)); } /* Get the next entry. */ if (! FindNextFile(strm->device.directory.hFind, pFind)) { DWORD dwErr = GetLastError(); if (dwErr == ERROR_NO_MORE_FILES) { strm->device.directory.fFindSucceeded = 0; if (result == NULL) return SAVE(EmptyString()); } } } return result; #else while (1) { struct dirent *dp = readdir(strm->device.ioDir); int len; if (dp == NULL) return taskData->saveVec.push(EmptyString()); len = NAMLEN(dp); if (!((len == 1 && strncmp(dp->d_name, ".", 1) == 0) || (len == 2 && strncmp(dp->d_name, "..", 2) == 0))) return SAVE(Buffer_to_Poly(taskData, dp->d_name, len)); } #endif } Handle rewindDirectory(TaskData *taskData, Handle stream, Handle dirname) { PIOSTRUCT strm = get_stream(stream->WordP()); /* Raise an exception if the stream has been closed. */ if (strm == NULL) raise_syscall(taskData, "Stream is closed", EBADF); #ifdef WINDOWS_PC { TCHAR string_buffer[MAXPATHLEN+2]; HANDLE hFind; /* There's no rewind - close and reopen. */ FindClose(strm->device.directory.hFind); strm->ioBits = 0; getFileName(taskData, dirname, string_buffer, MAXPATHLEN+2); /* Tack on \* to the end so that we find all files in the directory. */ lstrcat(string_buffer, _T("\\*")); hFind = FindFirstFile(string_buffer, &strm->device.directory.lastFind); if (hFind == INVALID_HANDLE_VALUE) raise_syscall(taskData, "FindFirstFile failed", -(int)GetLastError()); strm->device.directory.hFind = hFind; /* There must be at least one file which matched. */ strm->device.directory.fFindSucceeded = 1; strm->ioBits = IO_BIT_OPEN | IO_BIT_DIR; } #else rewinddir(strm->device.ioDir); #endif return Make_arbitrary_precision(taskData, 0); } /* change_dirc - this is called directly and not via the dispatch function. */ Handle change_dirc(TaskData *taskData, Handle name) /* Change working directory. */ { TCHAR string_buffer[MAXPATHLEN]; getFileName(taskData, name, string_buffer, MAXPATHLEN); #if defined(WINDOWS_PC) if (SetCurrentDirectory(string_buffer) == FALSE) raise_syscall(taskData, "SetCurrentDirectory failed", -(int)GetLastError()); #else if (chdir(string_buffer) != 0) raise_syscall(taskData, "chdir failed", errno); #endif return SAVE(TAGGED(0)); } /* Test for a directory. */ Handle isDir(TaskData *taskData, Handle name) { TCHAR string_buffer[MAXPATHLEN]; getFileName(taskData, name, string_buffer, MAXPATHLEN); #ifdef WINDOWS_PC { DWORD dwRes = GetFileAttributes(string_buffer); if (dwRes == 0xFFFFFFFF) raise_syscall(taskData, "GetFileAttributes failed", -(int)GetLastError()); if (dwRes & FILE_ATTRIBUTE_DIRECTORY) return Make_arbitrary_precision(taskData, 1); else return Make_arbitrary_precision(taskData, 0); } #else { struct stat fbuff; if (proper_stat(string_buffer, &fbuff) != 0) raise_syscall(taskData, "stat failed", errno); if ((fbuff.st_mode & S_IFMT) == S_IFDIR) return Make_arbitrary_precision(taskData, 1); else return Make_arbitrary_precision(taskData, 0); } #endif } /* Get absolute canonical path name. */ Handle fullPath(TaskData *taskData, Handle filename) { TCHAR string_buffer[MAXPATHLEN], resBuf[MAXPATHLEN]; getFileName(taskData, filename, string_buffer, MAXPATHLEN); /* Special case of an empty string. */ if (string_buffer[0] == '\0') { string_buffer[0] = '.'; string_buffer[1] = 0;} #if defined(WINDOWS_PC) { LPTSTR lastPart; DWORD dwRes = GetFullPathName(string_buffer, MAXPATHLEN, resBuf, &lastPart); if (dwRes > MAXPATHLEN) raise_syscall(taskData, "GetFullPathName failed", ENAMETOOLONG); if (dwRes == 0) raise_syscall(taskData, "GetFullPathName failed", -(int)GetLastError()); /* Check that the file exists. GetFullPathName doesn't do that. */ dwRes = GetFileAttributes(string_buffer); if (dwRes == 0xffffffff) raise_syscall(taskData, "File does not exist", ENOENT); } #else { struct stat fbuff; if (realpath(string_buffer, resBuf) == NULL) raise_syscall(taskData, "realpath failed", errno); /* Some versions of Unix don't check the final component of a file. To be consistent try doing a "stat" of the resulting string to check it exists. */ if (proper_stat(resBuf, &fbuff) != 0) raise_syscall(taskData, "stat failed", errno); } #endif return(SAVE(C_string_to_Poly(taskData, resBuf))); } /* Get file modification time. This returns the value in the time units and from the base date used by timing.c. c.f. filedatec */ Handle modTime(TaskData *taskData, Handle filename) { TCHAR string_buffer[MAXPATHLEN]; getFileName(taskData, filename, string_buffer, MAXPATHLEN); #ifdef WINDOWS_PC { /* There are two ways to get this information. We can either use GetFileTime if we are able to open the file for reading but if it is locked we won't be able to. FindFirstFile is the other alternative. We have to check that the file name does not contain '*' or '?' otherwise it will try to "glob" this, which isn't what we want here. */ WIN32_FIND_DATA wFind; HANDLE hFind; TCHAR *p; for(p = string_buffer; *p; p++) if (*p == '*' || *p == '?') raise_syscall(taskData, "Invalid filename", EBADF); hFind = FindFirstFile(string_buffer, &wFind); if (hFind == INVALID_HANDLE_VALUE) raise_syscall(taskData, "FindFirstFile failed", -(int)GetLastError()); FindClose(hFind); return Make_arb_from_pair(taskData, wFind.ftLastWriteTime.dwHighDateTime, wFind.ftLastWriteTime.dwLowDateTime); } #else { struct stat fbuff; if (proper_stat(string_buffer, &fbuff) != 0) raise_syscall(taskData, "stat failed", errno); /* Convert to microseconds. */ return Make_arb_from_pair_scaled(taskData, fbuff.st_mtime, 0, 1000000); } #endif } /* Get file size. */ Handle fileSize(TaskData *taskData, Handle filename) { TCHAR string_buffer[MAXPATHLEN]; getFileName(taskData, filename, string_buffer, MAXPATHLEN); #ifdef WINDOWS_PC { /* Similar to modTime*/ WIN32_FIND_DATA wFind; HANDLE hFind; TCHAR *p; for(p = string_buffer; *p; p++) if (*p == '*' || *p == '?') raise_syscall(taskData, "Invalid filename", EBADF); hFind = FindFirstFile(string_buffer, &wFind); if (hFind == INVALID_HANDLE_VALUE) raise_syscall(taskData, "FindFirstFile failed", -(int)GetLastError()); FindClose(hFind); return Make_arb_from_pair(taskData, wFind.nFileSizeHigh, wFind.nFileSizeLow); } #else { struct stat fbuff; if (proper_stat(string_buffer, &fbuff) != 0) raise_syscall(taskData, "stat failed", errno); return Make_arbitrary_precision(taskData, fbuff.st_size); } #endif } /* Set file modification and access times. */ Handle setTime(TaskData *taskData, Handle fileName, Handle fileTime) { TCHAR buff[MAXPATHLEN]; getFileName(taskData, fileName, buff, MAXPATHLEN); #ifdef WINDOWS_PC /* The only way to set the time is to open the file and use SetFileTime. */ { FILETIME ft; HANDLE hFile; /* Get the file time. */ get_C_pair(taskData, DEREFWORDHANDLE(fileTime), &ft.dwHighDateTime, &ft.dwLowDateTime); /* Open an existing file with write access. We need that for SetFileTime. */ hFile = CreateFile(buff, GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (hFile == INVALID_HANDLE_VALUE) raise_syscall(taskData, "CreateFile failed", -(int)GetLastError()); /* Set the file time. */ if (!SetFileTime(hFile, NULL, &ft, &ft)) { int nErr = GetLastError(); CloseHandle(hFile); raise_syscall(taskData, "SetFileTime failed", -nErr); } CloseHandle(hFile); } #else { struct timeval times[2]; /* We have a value in microseconds. We need to split it into seconds and microseconds. */ Handle hTime = fileTime; Handle hMillion = Make_arbitrary_precision(taskData, 1000000); /* N.B. Arguments to div_longc and rem_longc are in reverse order. */ unsigned secs = get_C_ulong(taskData, DEREFWORDHANDLE(div_longc(taskData, hMillion, hTime))); unsigned usecs = get_C_ulong(taskData, DEREFWORDHANDLE(rem_longc(taskData, hMillion, hTime))); times[0].tv_sec = times[1].tv_sec = secs; times[0].tv_usec = times[1].tv_usec = usecs; if (utimes(buff, times) != 0) raise_syscall(taskData, "utimes failed", errno); } #endif return Make_arbitrary_precision(taskData, 0); } /* Rename a file. */ Handle renameFile(TaskData *taskData, Handle oldFileName, Handle newFileName) { TCHAR oldName[MAXPATHLEN], newName[MAXPATHLEN]; getFileName(taskData, oldFileName, oldName, MAXPATHLEN); getFileName(taskData, newFileName, newName, MAXPATHLEN); #ifdef WINDOWS_PC /* This is defined to delete any existing file with the new name. We can do this with MoveFileEx but that isn't supported on Windows 95. We have to use DeleteFile followed by MoveFile in that case. This means we can't guarantee that a file with the new name will always exist because we might fail between deleting the original file and renaming the old one. */ { DWORD dwErr; /* Try using MoveFile and see if that works. */ if (MoveFile(oldName, newName)) return Make_arbitrary_precision(taskData, 0); dwErr = GetLastError(); if (dwErr != /* ERROR_FILE_EXISTS */ ERROR_ALREADY_EXISTS) raise_syscall(taskData, "MoveFile failed", -(int)dwErr); /* Failed because destination file exists. */ if (_osver & 0x8000) { /* Windows 95 - must use delete. */ if (!DeleteFile(newName)) raise_syscall(taskData, "DeleteFile failed", -(int)GetLastError()); if (!MoveFile(oldName, newName)) raise_syscall(taskData, "MoveFile failed", -(int)GetLastError()); } else /* Windows NT. Although it's not defined to be atomic there's a better chance that it will be. */ if (! MoveFileEx(oldName, newName, MOVEFILE_REPLACE_EXISTING)) raise_syscall(taskData, "MoveFileEx failed", -(int)GetLastError()); } #else if (rename(oldName, newName) != 0) raise_syscall(taskData, "rename failed", errno); #endif return Make_arbitrary_precision(taskData, 0); } /* Access right requests passed in from ML. */ #define FILE_ACCESS_READ 1 #define FILE_ACCESS_WRITE 2 #define FILE_ACCESS_EXECUTE 4 /* Get access rights to a file. */ Handle fileAccess(TaskData *taskData, Handle name, Handle rights) { TCHAR string_buffer[MAXPATHLEN]; int rts = get_C_ulong(taskData, DEREFWORD(rights)); getFileName(taskData, name, string_buffer, MAXPATHLEN); #ifdef WINDOWS_PC { /* Test whether the file is read-only. This is, of course, not what was asked but getting anything more is really quite complicated. I don't see how we can find out if a file is executable (maybe check if the extension is .exe, .com or .bat?). It would be possible, in NT, to examine the access structures but that seems far too complicated. Leave it for the moment. */ DWORD dwRes = GetFileAttributes(string_buffer); if (dwRes == 0xffffffff) return Make_arbitrary_precision(taskData, 0); /* If we asked for write access but it is read-only we return false. */ if ((dwRes & FILE_ATTRIBUTE_READONLY) && (rts & FILE_ACCESS_WRITE)) return Make_arbitrary_precision(taskData, 0); else return Make_arbitrary_precision(taskData, 1); } #else { int mode = 0; if (rts & FILE_ACCESS_READ) mode |= R_OK; if (rts & FILE_ACCESS_WRITE) mode |= W_OK; if (rts & FILE_ACCESS_EXECUTE) mode |= X_OK; if (mode == 0) mode = F_OK; /* Return true if access is allowed, otherwise false for any other error. */ if (access(string_buffer, mode) == 0) return Make_arbitrary_precision(taskData, 1); else return Make_arbitrary_precision(taskData, 0); } #endif } /* IO_dispatchc. Called from assembly code module. */ Handle IO_dispatch_c(TaskData *taskData, Handle args, Handle strm, Handle code) { int c = get_C_long(taskData, DEREFWORD(code)); switch (c) { case 0: /* Return standard input */ return SAVE((PolyObject*)IoEntry(POLY_SYS_stdin)); case 1: /* Return standard output */ return SAVE((PolyObject*)IoEntry(POLY_SYS_stdout)); case 2: /* Return standard error */ return SAVE((PolyObject*)IoEntry(POLY_SYS_stderr)); case 3: /* Open file for text input. */ return open_file(taskData, args, O_RDONLY, 0666, 0); case 4: /* Open file for binary input. */ return open_file(taskData, args, O_RDONLY | O_BINARY, 0666, 0); case 5: /* Open file for text output. */ return open_file(taskData, args, O_WRONLY | O_CREAT | O_TRUNC, 0666, 0); case 6: /* Open file for binary output. */ return open_file(taskData, args, O_WRONLY | O_CREAT | O_TRUNC | O_BINARY, 0666, 0); case 7: /* Close file */ return close_file(taskData, strm); case 8: /* Read text into an array. */ return readArray(taskData, strm, args, true); case 9: /* Read binary into an array. */ return readArray(taskData, strm, args, false); case 10: /* Get text as a string. */ return readString(taskData, strm, args, true); case 11: /* Write from memory into a text file. */ return writeArray(taskData, strm, args, true); case 12: /* Write from memory into a binary file. */ return writeArray(taskData, strm, args, false); case 13: /* Open text file for appending. */ /* The IO library definition leaves it open whether this should use "append mode" or not. */ return open_file(taskData, args, O_WRONLY | O_CREAT | O_APPEND, 0666, 0); case 14: /* Open binary file for appending. */ return open_file(taskData, args, O_WRONLY | O_CREAT | O_APPEND | O_BINARY, 0666, 0); case 15: /* Return recommended buffer size. */ /* TODO: This should try to find a sensible number based on the stream handle passed in. Leave it at 1k for the moment. */ /* Try increasing to 4k. */ return Make_arbitrary_precision(taskData, /*1024*/4096); case 16: /* See if we can get some input. */ return Make_arbitrary_precision(taskData, canInput(taskData, strm)); case 17: /* Return the number of bytes available. */ return bytesAvailable(taskData, strm); case 18: /* Get position on stream. */ { /* Get the current position in the stream. This is used to test for the availability of random access so it should raise an exception if setFilePos or endFilePos would fail. */ long pos; PIOSTRUCT str = get_stream(strm->WordP()); if (str == NULL) raise_syscall(taskData, "Stream is closed", EBADF); pos = seekStream(taskData, str, 0L, SEEK_CUR); return Make_arbitrary_precision(taskData, pos); } case 19: /* Seek to position on stream. */ { long position = get_C_long(taskData, DEREFWORD(args)); long newpos; PIOSTRUCT str = get_stream(strm->WordP()); if (str == NULL) raise_syscall(taskData, "Stream is closed", EBADF); newpos = seekStream(taskData, str, position, SEEK_SET); return Make_arbitrary_precision(taskData, 0); } case 20: /* Return position at end of stream. */ { long original, endOfStream; PIOSTRUCT str = get_stream(strm->WordP()); if (str == NULL) raise_syscall(taskData, "Stream is closed", EBADF); /* Remember our original position, seek to the end, then seek back. */ original = seekStream(taskData, str, 0L, SEEK_CUR); endOfStream = seekStream(taskData, str, 0L, SEEK_END); if (seekStream(taskData, str, original, SEEK_SET) != original) raise_syscall(taskData, "Position error", errno); return Make_arbitrary_precision(taskData, endOfStream); } case 21: /* Get the kind of device underlying the stream. */ return fileKind(taskData, strm); case 22: /* Return the polling options allowed on this descriptor. */ return pollTest(taskData, strm); case 23: /* Poll the descriptor, waiting forever. */ return pollDescriptors(taskData, args, 1); case 24: /* Poll the descriptor, waiting for the time requested. */ return pollDescriptors(taskData, args, 0); case 25: /* Poll the descriptor, returning immediately.*/ return pollDescriptors(taskData, args, 2); case 26: /* Get binary as a vector. */ return readString(taskData, strm, args, false); case 27: /* Block until input is available. */ { PIOSTRUCT str = get_stream(strm->WordP()); if (str == NULL) raise_syscall(taskData, "Stream is closed", EBADF); if (canInput(taskData, strm) == 0) processes->BlockAndRestart(taskData, str->device.ioDesc, false, POLY_SYS_io_dispatch); return Make_arbitrary_precision(taskData, 0); } case 28: /* Test whether output is possible. */ return Make_arbitrary_precision(taskData, canOutput(taskData, strm)); case 29: /* Block until output is possible. */ if (canOutput(taskData, strm) == 0) processes->BlockAndRestart(taskData, -1, false, POLY_SYS_io_dispatch); return Make_arbitrary_precision(taskData, 0); /* Functions added for Posix structure. */ case 30: /* Return underlying file descriptor. */ /* This is now also used internally to test for stdIn, stdOut and stdErr. */ { PIOSTRUCT str = get_stream(strm->WordP()); if (str == NULL) raise_syscall(taskData, "Stream is closed", EBADF); return Make_arbitrary_precision(taskData, str->device.ioDesc); } case 31: /* Make an entry for a given descriptor. */ { int ioDesc = get_C_long(taskData, DEREFWORD(args)); PIOSTRUCT str; /* First see if it's already in the table. */ for (unsigned i = 0; i < max_streams; i++) { str = &(basic_io_vector[i]); if (str->token != 0 && str->device.ioDesc == ioDesc) return taskData->saveVec.push(str->token); } /* Have to make a new entry. */ Handle str_token = make_stream_entry(taskData); unsigned stream_no = STREAMID(str_token); str = &basic_io_vector[stream_no]; str->device.ioDesc = get_C_long(taskData, DEREFWORD(args)); /* We don't know whether it's open for read, write or even if it's open at all. */ str->ioBits = IO_BIT_OPEN | IO_BIT_READ | IO_BIT_WRITE ; #ifdef WINDOWS_PC str->ioBits |= getFileType(ioDesc); #endif return str_token; } /* Directory functions. */ case 50: /* Open a directory. */ return openDirectory(taskData, args); case 51: /* Read a directory entry. */ return readDirectory(taskData, strm); case 52: /* Close the directory */ return close_file(taskData, strm); case 53: /* Rewind the directory. */ return rewindDirectory(taskData, strm, args); case 54: /* Get current working directory. */ { char string_buffer[MAXPATHLEN+1]; #if defined(WINDOWS_PC) if (GetCurrentDirectory(MAXPATHLEN+1, string_buffer) == 0) raise_syscall(taskData, "GetCurrentDirectory failed", -(int)GetLastError()); #else if (getcwd(string_buffer, MAXPATHLEN+1) == NULL) raise_syscall(taskData, "getcwd failed", errno); #endif return SAVE(C_string_to_Poly(taskData, string_buffer)); } case 55: /* Create a new directory. */ { TCHAR string_buffer[MAXPATHLEN]; getFileName(taskData, args, string_buffer, MAXPATHLEN); #ifdef WINDOWS_PC if (! CreateDirectory(string_buffer, NULL)) raise_syscall(taskData, "CreateDirectory failed", -(int)GetLastError()); #else if (mkdir(string_buffer, 0777) != 0) #endif raise_syscall(taskData, "mkdir failed", errno); return Make_arbitrary_precision(taskData, 0); } case 56: /* Delete a directory. */ { TCHAR string_buffer[MAXPATHLEN]; getFileName(taskData, args, string_buffer, MAXPATHLEN); #ifdef WINDOWS_PC if (! RemoveDirectory(string_buffer)) raise_syscall(taskData, "RemoveDirectory failed", -(int)GetLastError()); #else if (rmdir(string_buffer) != 0) raise_syscall(taskData, "rmdir failed", errno); #endif return Make_arbitrary_precision(taskData, 0); } case 57: /* Test for directory. */ return isDir(taskData, args); case 58: /* Test for symbolic link. */ { TCHAR string_buffer[MAXPATHLEN]; getFileName(taskData, args, string_buffer, MAXPATHLEN); #ifdef WINDOWS_PC { /* Windows does not have symbolic links. Raise an exception if the file does not exist but otherwise return false. */ DWORD dwRes = GetFileAttributes(string_buffer); if (dwRes == 0xFFFFFFFF) raise_syscall(taskData, "GetFileAttributes failed", -(int)GetLastError()); return Make_arbitrary_precision(taskData, 0); } #else { struct stat fbuff; if (proper_lstat(string_buffer, &fbuff) != 0) raise_syscall(taskData, "stat failed", errno); if ((fbuff.st_mode & S_IFMT) == S_IFLNK) return Make_arbitrary_precision(taskData, 1); else return Make_arbitrary_precision(taskData, 0); } #endif } case 59: /* Read a symbolic link. */ { #ifdef WINDOWS_PC /* Windows does not have symbolic links. Raise an exception. */ raise_syscall(taskData, "Not implemented", 0); return taskData->saveVec.push(TAGGED(0)); /* To keep compiler happy. */ #else int nLen; char string_buffer[MAXPATHLEN], resBuf[MAXPATHLEN]; getFileName(taskData, args, string_buffer, MAXPATHLEN); nLen = readlink(string_buffer, resBuf, sizeof(resBuf)); if (nLen < 0) raise_syscall(taskData, "readlink failed", errno); return(SAVE(Buffer_to_Poly(taskData, resBuf, nLen))); #endif } case 60: /* Return the full absolute path name. */ return fullPath(taskData, args); case 61: /* Modification time. */ return modTime(taskData, args); case 62: /* File size. */ return fileSize(taskData, args); case 63: /* Set file time. */ return setTime(taskData, strm, args); case 64: /* Delete a file. */ { TCHAR string_buffer[MAXPATHLEN]; getFileName(taskData, args, string_buffer, MAXPATHLEN); #ifdef WINDOWS_PC if (! DeleteFile(string_buffer)) raise_syscall(taskData, "DeleteFile failed", 0-GetLastError()); #else if (unlink(string_buffer) != 0) raise_syscall(taskData, "unlink failed", errno); #endif return Make_arbitrary_precision(taskData, 0); } case 65: /* rename a file. */ return renameFile(taskData, strm, args); case 66: /* Get access rights. */ return fileAccess(taskData, strm, args); case 67: /* Return a temporary file name. */ { TCHAR buff[MAXPATHLEN]; #ifdef WINDOWS_PC if (GetTempPath(sizeof(buff) - 14, buff) == 0) raise_syscall(taskData, "GetTempPath failed", -(int)(GetLastError())); lstrcat(buff, _T("\\")); #elif (defined(P_tempdir)) strcpy(buff, P_tempdir); strcat(buff, "\\"); #else strcpy(buff, "/tmp/"); #endif strcat(buff, "MLTEMPXXXXXX"); #ifdef HAVE_MKSTEMP // Set the umask to mask out access by anyone else. // mkstemp generally does this anyway. mode_t oldMask = umask(0077); int fd = mkstemp(buff); int wasError = errno; (void)umask(oldMask); if (fd != -1) close(fd); else raise_syscall(taskData, "mkstemp failed", wasError); #else if (mktemp(buff) == 0) raise_syscall(taskData, "mktemp failed", errno); int fd = open(buff, O_RDWR | O_CREAT | O_EXCL, 00600); if (fd != -1) close(fd); else raise_syscall(taskData, "Temporary file creation failed", errno); #endif Handle res = SAVE(C_string_to_Poly(taskData, buff)); return res; } case 68: /* Get the file id. */ { #ifdef WINDOWS_PC /* This concept does not exist in Windows. */ /* Return a negative number. This is interpreted as "not implemented". */ return Make_arbitrary_precision(taskData, -1); #else struct stat fbuff; char string_buffer[MAXPATHLEN]; getFileName(taskData, args, string_buffer, MAXPATHLEN); if (proper_stat(string_buffer, &fbuff) != 0) raise_syscall(taskData, "stat failed", errno); /* Assume that inodes are always non-negative. */ return Make_arbitrary_precision(taskData, fbuff.st_ino); #endif } case 69: /* Return an index for a token. */ return Make_arbitrary_precision(taskData, STREAMID(strm)); case 70: /* Posix.FileSys.openf - open a file with given mode. */ { Handle name = taskData->saveVec.push(DEREFWORDHANDLE(args)->Get(0)); int mode = get_C_ulong(taskData, DEREFWORDHANDLE(args)->Get(1)); return open_file(taskData, name, mode, 0666, 1); } case 71: /* Posix.FileSys.createf - create a file with given mode and access. */ { Handle name = taskData->saveVec.push(DEREFWORDHANDLE(args)->Get(0)); int mode = get_C_ulong(taskData, DEREFWORDHANDLE(args)->Get(1)); int access = get_C_ulong(taskData, DEREFWORDHANDLE(args)->Get(2)); return open_file(taskData, name, mode|O_CREAT, access, 1); } default: { char msg[100]; sprintf(msg, "Unknown io function: %d", c); raise_exception_string(taskData, EXC_Fail, msg); return 0; } } } class BasicIO: public RtsModule { public: virtual void Init(void); virtual void Uninit(void); virtual void Reinit(void); void GarbageCollect(ScanAddress *process); }; // Declare this. It will be automatically added to the table. static BasicIO basicIOModule; void BasicIO::Init(void) { max_streams = 20; // Initialise to the old Unix maximum. Will grow if necessary. /* A vector for the streams (initialised by calloc) */ basic_io_vector = (PIOSTRUCT)calloc(max_streams, sizeof(IOSTRUCT)); } void BasicIO::Reinit(void) { /* The interface map is recreated after the database is committed. */ basic_io_vector[0].token = (PolyObject*)IoEntry(POLY_SYS_stdin); basic_io_vector[0].device.ioDesc = 0; basic_io_vector[0].ioBits = IO_BIT_OPEN | IO_BIT_READ; #ifdef WINDOWS_PC basic_io_vector[0].ioBits |= getFileType(0); #endif basic_io_vector[1].token = (PolyObject*)IoEntry(POLY_SYS_stdout); basic_io_vector[1].device.ioDesc = 1; basic_io_vector[1].ioBits = IO_BIT_OPEN | IO_BIT_WRITE; #ifdef WINDOWS_PC basic_io_vector[1].ioBits |= getFileType(1); #endif basic_io_vector[2].token = (PolyObject*)IoEntry(POLY_SYS_stderr); basic_io_vector[2].device.ioDesc = 2; basic_io_vector[2].ioBits = IO_BIT_OPEN | IO_BIT_WRITE; #ifdef WINDOWS_PC basic_io_vector[2].ioBits |= getFileType(2); #endif return; } /* Release all resources. Not strictly necessary since the OS should do this but probably a good idea. */ void BasicIO::Uninit(void) { if (basic_io_vector) { for (unsigned i = 0; i < max_streams; i++) { if (isOpen(&basic_io_vector[i])) close_stream(&basic_io_vector[i]); } free(basic_io_vector); } basic_io_vector = NULL; } void BasicIO::GarbageCollect(ScanAddress *process) /* Ensures that all the objects are retained and their addresses updated. */ { /* Entries in the file table. These are marked as weak references so may return 0 for unreferenced streams. */ for(unsigned i = 0; i < max_streams; i++) { PIOSTRUCT str = &(basic_io_vector[i]); if (str->token != 0) { process->ScanRuntimeAddress(&str->token, ScanAddress::STRENGTH_WEAK); /* Unreferenced streams may return zero. */ if (str->token == 0 && isOpen(str)) close_stream(str); } } } polyml.5.2.1/libpolyml/basicio.h0000644000175000017500000000227210602661055015565 0ustar daviddavid/* Title: Basic IO. Copyright (c) 2000 David C. J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef BASICIO_H #define BASICIO_H class SaveVecEntry; typedef SaveVecEntry *Handle; class TaskData; extern Handle IO_dispatch_c(TaskData *mdTaskData, Handle args, Handle strm, Handle code); extern Handle change_dirc(TaskData *mdTaskData, Handle name); #ifndef WINDOWS_PC extern void process_may_block(TaskData *taskData, int fd, int ioCall); #endif #endif /* BASICIO_H */ polyml.5.2.1/libpolyml/bitmap.cpp0000644000175000017500000001671610602661055015773 0ustar daviddavid/* Title: Bitmap. Generally used by the garbage collector to indicate allocated words Copyright (c) 2006 David C.J. Matthews Based on original code in garbage_collect.c. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ /* Bitmaps are used particularly in the garbage collector to indicate allocated words. The efficiency of this code is crucial for the speed of the garbage collector. */ #ifdef WIN32 #include "winconfig.h" #else #include "config.h" #endif #ifdef HAVE_ASSERT_H #include #define ASSERT(h) assert(h) #else #define ASSERT(h) #endif #ifdef HAVE_STDLIB_H #include #endif #ifdef HAVE_MALLOC_H #include #endif #include "bitmap.h" #include "globals.h" Bitmap::Bitmap(POLYUNSIGNED bits) { POLYUNSIGNED words = (bits+BITS_PER_WORD-1) / BITS_PER_WORD; m_bits = (POLYUNSIGNED *)calloc(words, sizeof(POLYUNSIGNED)); } bool Bitmap::Create(POLYUNSIGNED bits) { free(m_bits); POLYUNSIGNED words = (bits+BITS_PER_WORD-1) / BITS_PER_WORD; m_bits = (POLYUNSIGNED *)calloc(words, sizeof(POLYUNSIGNED)); return m_bits != 0; } Bitmap::~Bitmap() { free(m_bits); } // Set a range of bits in a bitmap. This checks that the bits are not already set. void Bitmap::SetBits(POLYUNSIGNED bitno, POLYUNSIGNED length) { POLYUNSIGNED word_index = bitno / BITS_PER_WORD; ASSERT (0 < length); /* Set the first part word */ POLYUNSIGNED start_bit_index = bitno % BITS_PER_WORD; POLYUNSIGNED stop_bit_index = start_bit_index + length; /* Do we need to change more than one word? */ if (stop_bit_index < BITS_PER_WORD) { /* N.B. On some machines shifts of the number of bits per word can mean no shift at all. */ const POLYUNSIGNED mask1 = ((~ (POLYUNSIGNED)0)) << start_bit_index; const POLYUNSIGNED mask2 = ((~ (POLYUNSIGNED)0)) << stop_bit_index; const POLYUNSIGNED mask = mask1 & ~mask2; ASSERT((m_bits[word_index] & mask) == 0); m_bits[word_index] |= mask; return; } else /* Set all the bits we can in the first word */ { const POLYUNSIGNED mask = ((POLYUNSIGNED)(~ 0)) << start_bit_index; ASSERT((m_bits[word_index] & mask) == 0); m_bits[word_index] |= mask; /* length = length - (BITS_PER_WORD - start_bit_index); */ length = stop_bit_index - BITS_PER_WORD; } /* Invariant: 0 <= length */ /* Set as many full words as possible */ while (BITS_PER_WORD <= length) { /* Invariant: BITS_PER_WORD <= length */ word_index ++; ASSERT(m_bits[word_index] == 0); m_bits[word_index] = ~ (POLYUNSIGNED)0; length -= BITS_PER_WORD; /* Invariant: 0 <= length */ } /* Invariant: 0 <= length < BITS_PER_WORD */ if (length == 0) return; /* Invariant: 0 < length < BITS_PER_WORD */ /* Set the final part word */ word_index ++; const POLYUNSIGNED mask1 = (~ (POLYUNSIGNED)0) << 0; const POLYUNSIGNED mask2 = (~ (POLYUNSIGNED)0) << length; const POLYUNSIGNED mask = mask1 & ~mask2; ASSERT((m_bits[word_index] & mask) == 0); m_bits[word_index] |= mask; } void Bitmap::ClearBits(POLYUNSIGNED bitno, POLYUNSIGNED length) { POLYUNSIGNED word_index = bitno / BITS_PER_WORD; if (length == 0) return; // Clear the first part word POLYUNSIGNED start_bit_index = bitno % BITS_PER_WORD; POLYUNSIGNED stop_bit_index = start_bit_index + length; /* Do we need to change more than one word? */ if (stop_bit_index < BITS_PER_WORD) { const POLYUNSIGNED mask1 = ((~ (POLYUNSIGNED)0)) << start_bit_index; const POLYUNSIGNED mask2 = ((~ (POLYUNSIGNED)0)) << stop_bit_index; const POLYUNSIGNED mask = mask1 & ~mask2; m_bits[word_index] &= ~mask; return; } else /* Clear all the bits we can in the first word */ { const POLYUNSIGNED mask = ((POLYUNSIGNED)(~ 0)) << start_bit_index; m_bits[word_index] &= ~mask; length = stop_bit_index - BITS_PER_WORD; } /* Invariant: 0 <= length */ // Clear as many full words as possible. while (BITS_PER_WORD <= length) { /* Invariant: BITS_PER_WORD <= length */ word_index ++; m_bits[word_index] = 0; length -= BITS_PER_WORD; /* Invariant: 0 <= length */ } /* Invariant: 0 <= length < BITS_PER_WORD */ if (length == 0) return; /* Invariant: 0 < length < BITS_PER_WORD */ // Clear the final part word word_index ++; const POLYUNSIGNED mask1 = (~ (POLYUNSIGNED)0) << 0; const POLYUNSIGNED mask2 = (~ (POLYUNSIGNED)0) << length; const POLYUNSIGNED mask = mask1 & ~mask2; m_bits[word_index] &= ~mask; } // How many zero bits (maximum n) are there in the bitmap, starting at location start? */ POLYUNSIGNED Bitmap::CountZeroBits(POLYUNSIGNED bitno, POLYUNSIGNED n) { POLYUNSIGNED *bitmap = m_bits; /* Less naive version */ POLYUNSIGNED word_index = bitno / BITS_PER_WORD; POLYUNSIGNED bit_index = bitno % BITS_PER_WORD; POLYUNSIGNED bits = bitmap[word_index]; POLYUNSIGNED mask = (POLYUNSIGNED)1 << bit_index; POLYUNSIGNED zero_bits = 0; ASSERT (0 < n); /* Check the first part word */ while (mask != 0) { /* zero_bits < n */ if ((bits & mask) != 0) return zero_bits; zero_bits ++; if (zero_bits == n) return zero_bits; mask <<= 1; /* zero_bits < n */ } /* zero_bits < n */ /* Check as many full words as possible */ word_index ++; bits = bitmap[word_index]; while (zero_bits < n && bits == 0) { zero_bits += BITS_PER_WORD; word_index ++; if (zero_bits < n) // Be careful not to go over the end bits = bitmap[word_index]; } /* Check the final part word */ mask = 1; while (zero_bits < n && ((bits & mask) == 0)) { zero_bits ++; mask <<= 1; } return zero_bits; } /* search the bitmap from the high end down looking for n contiguous zeros */ POLYUNSIGNED Bitmap::FindFree ( POLYUNSIGNED limit, /* The highest numbered bit that's too small to use */ POLYUNSIGNED bitno, /* The lowest numbered bit that's too large to use */ POLYUNSIGNED n /* The number of consecutive zero bits required */ ) { if (limit + n >= bitno) return 0; POLYUNSIGNED candidate = bitno - n; ASSERT (bitno > limit); while (1) { POLYUNSIGNED bits_free = CountZeroBits(candidate, n); if (n <= bits_free) return candidate; if (candidate < n - bits_free + limit) return 0; candidate -= (n - bits_free); } } polyml.5.2.1/libpolyml/bitmap.h0000644000175000017500000000427710506226526015442 0ustar daviddavid/* Title: Bitmap. Generally used by the garbage collector to indicate allocated words Copyright (c) 2006 David C.J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef BITMAP_H_DEFINED #define BITMAP_H_DEFINED #include "globals.h" // For POLYUNSIGNED /* bitmaps using arrays of word */ #define BITS_PER_BYTE 8 #define BITS_PER_WORD (BITS_PER_BYTE * sizeof(POLYUNSIGNED)) class Bitmap { public: Bitmap(): m_bits(0) {} Bitmap(POLYUNSIGNED bits); ~Bitmap(); bool Create(POLYUNSIGNED bits); private: static POLYUNSIGNED BitN(POLYUNSIGNED n) { return (POLYUNSIGNED)1 << (n & (BITS_PER_WORD-1)); } public: // Set a single bit void SetBit(POLYUNSIGNED n) { m_bits[n/BITS_PER_WORD] |= BitN(n); } // Set a range of bits void SetBits(POLYUNSIGNED bitno, POLYUNSIGNED length); // Clear a bit void ClearBit(POLYUNSIGNED n) { m_bits[n/BITS_PER_WORD] &= ~BitN(n); } // Clear a range of bits. May already be partly clear void ClearBits(POLYUNSIGNED bitno, POLYUNSIGNED length); // Test a bit bool TestBit(POLYUNSIGNED n) const { return (m_bits[n/BITS_PER_WORD] & BitN(n)) != 0; } // How many zero bits (maximum n) are there in the bitmap, starting at location start? POLYUNSIGNED CountZeroBits(POLYUNSIGNED bitno, POLYUNSIGNED n); //* search the bitmap from the high end down looking for n contiguous zeros POLYUNSIGNED FindFree(POLYUNSIGNED limit, POLYUNSIGNED bitno, POLYUNSIGNED n); private: POLYUNSIGNED *m_bits; }; #endif polyml.5.2.1/libpolyml/check_objects.cpp0000644000175000017500000001042110772160234017271 0ustar daviddavid/* Title: Validate addresses in objects. Copyright (c) 2006 David C.J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifdef WIN32 #include "winconfig.h" #else #include "config.h" #endif #ifdef HAVE_ASSERT_H #include #define ASSERT(x) assert(x) #else #define ASSERT(x) #endif #include "globals.h" #include "diagnostics.h" #include "machine_dep.h" #include "scanaddrs.h" #include "memmgr.h" #define INRANGE(val,start,end)\ (start <= val && val < end) static void CheckAddress(const void *pt) { if (gMem.SpaceForAddress(pt) == 0) Crash ("Bad pointer 0x%08x found", pt); } void DoCheck (const PolyWord pt) { if (pt == PolyWord::FromUnsigned(0)) return; if (pt.IsTagged()) return; /* Test corrected 20/2/95 - the stack contains code pointers (for return addresses) as well as simple data pointers */ ASSERT (pt.IsCodePtr() || pt.IsDataPtr()); CheckAddress(pt.AsAddress()); } class ScanCheckAddress: public ScanAddress { public: virtual PolyObject *ScanObjectAddress(PolyObject *pt) { DoCheck(pt); return pt; } }; void DoCheckObject (const PolyObject *base, POLYUNSIGNED L) { PolyWord *pt = (PolyWord*)base; CheckAddress(pt-1); ASSERT (OBJ_IS_LENGTH(L)); POLYUNSIGNED n = OBJ_OBJECT_LENGTH(L); if (n == 0) return; ASSERT (n > 0); PolyWord *end = pt + n; CheckAddress (end-1); byte flags = GetTypeBits(L); /* discards GC flag and mutable bit */ if (flags == F_BYTE_OBJ) /* possibly signed byte object */ return; /* Nothing more to do */ if (flags == F_STACK_OBJ) { StackObject *stack = (StackObject *) base; POLYUNSIGNED skip = stack->p_sp - (PolyWord*)base; ASSERT (INRANGE(stack->p_sp, (PolyWord*)base, (PolyWord*)end)); ASSERT (INRANGE(stack->p_hr, (PolyWord*)base, (PolyWord*)end)); /* Skip to the start of the stack. */ ASSERT (skip < n); pt += skip; n -= skip; } else if (flags == F_CODE_OBJ) /* code object */ { ScanCheckAddress checkAddr; /* We flush the instruction cache here in case we change any of the instructions when we update addresses. */ machineDependent->FlushInstructionCache(pt, (n + 1) * sizeof(PolyWord)); machineDependent->ScanConstantsWithinCode((PolyObject *)base, (PolyObject *)base, n, &checkAddr); /* Skip to the constants. */ base->GetConstSegmentForCode(n, pt, n); } else ASSERT (flags == 0); /* ordinary word object */ while (n--) DoCheck (*pt++); } void DoCheckPointer (const PolyWord pt) { if (pt == PolyWord::FromUnsigned(0)) return; if (OBJ_IS_AN_INTEGER(pt)) return; if (gMem.IsIOPointer(pt.AsAddress())) return; DoCheck (pt); if (pt.IsDataPtr()) { PolyObject *obj = pt.AsObjPtr(); DoCheckObject (obj, obj->LengthWord()); } } // Check all the objects in the memory. Used to check the garbage collector // void DoCheckMemory() { ScanCheckAddress memCheck; // Scan the local mutable area. This is where new objects are created. // The immutable areas are only modified by the GC. for (unsigned i = 0; i < gMem.nlSpaces; i++) { LocalMemSpace *space = gMem.lSpaces[i]; if (space->isMutable) memCheck.ScanAddressesInRegion(space->pointer, space->top); } // Scan the permanent mutable areas. for (unsigned j = 0; j < gMem.npSpaces; j++) { MemSpace *space = gMem.pSpaces[j]; if (space->isMutable) memCheck.ScanAddressesInRegion(space->bottom, space->top); } } polyml.5.2.1/libpolyml/check_objects.h0000644000175000017500000000323610760535022016742 0ustar daviddavid/* Title: check_objects.h - Validate addresses in objects. Copyright (c) 2006 David C. J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef CHECK_OBJECTS_INCLUDED #define CHECK_OBJECTS_INCLUDED #include "globals.h" #include "mpoly.h" // For userOptions extern void DoCheck (const PolyWord pt); extern void DoCheckPointer (const PolyWord pt); extern void DoCheckObject (const PolyObject *base, POLYUNSIGNED lengthWord); extern void DoCheckMemory(void); #define Check(pt) {if (userOptions.debug & DEBUG_CHECK_OBJECTS) DoCheck(pt); } #define CheckObject(pt) {if (userOptions.debug & DEBUG_CHECK_OBJECTS) DoCheckObject(pt, (pt)->LengthWord()); } #define CheckObjectL(pt, l) {if (userOptions.debug & DEBUG_CHECK_OBJECTS) DoCheckObject(pt, l); } #define CheckPointer(pt) {if (userOptions.debug & DEBUG_CHECK_OBJECTS) DoCheckPointer(pt); } inline void CheckMemory(void) { if (userOptions.debug & DEBUG_REGION_CHECK) DoCheckMemory(); } #endif polyml.5.2.1/libpolyml/diagnostics.cpp0000644000175000017500000000465710672263625017037 0ustar daviddavid/* Title: Diagnostics Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifdef WIN32 #include "winconfig.h" #else #include "config.h" #endif #ifdef HAVE_STDIO_H #include #endif #ifdef HAVE_ERRNO_H #include #endif #ifdef HAVE_STDLIB_H #include #endif #ifdef HAVE_STDARG_H #include #endif #ifdef HAVE_STRING_H #include #endif #ifdef HAVE_SIGNAL_H #include #endif #ifdef HAVE_WINDOWS_H #include #endif #if defined(WINDOWS_PC) #include "Console.h" #endif #ifdef HAVE_TCHAR_H #include #endif /*********************************************************************** * * FAILURE FUNCTIONS (moved here from mmap.c) * ***********************************************************************/ void Exit(const char *msg, ...) { va_list vl; printf("\n"); va_start(vl, msg); vprintf(msg, vl); va_end(vl); printf("\n"); fflush(stdout); #if defined(WINDOWS_PC) if (useConsole) { MessageBox(hMainWindow, _T("Poly/ML has exited"), _T("Poly/ML"), MB_OK); } #endif exit(1); } // Error condition. This should really be replaced either with ASSERTs // or exceptions. void Crash(const char *msg, ...) { va_list vl; printf("\n"); va_start(vl, msg); vprintf(msg, vl); va_end(vl); printf("\n"); fflush(stdout); #if defined(WINDOWS_PC) if (useConsole) { MessageBox(hMainWindow, _T("Poly/ML has exited"), _T("Poly/ML"), MB_OK); } #else { sigset_t set; sigemptyset(&set); sigprocmask(SIG_SETMASK,&set,NULL); } #endif abort(); exit(1); } polyml.5.2.1/libpolyml/diagnostics.h0000644000175000017500000000205010672263625016465 0ustar daviddavid/* Title: Header for diagnostics.c Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef _DIAGNOSTICS_H_USED #define _DIAGNOSTICS_H_USED #include "noreturn.h" NORETURNFN(extern void Exit(const char *, ...)); NORETURNFN(extern void Crash(const char *, ...)); #endif polyml.5.2.1/libpolyml/elfexport.cpp0000644000175000017500000005420410701427251016517 0ustar daviddavid/* Title: Write out a database as an ELF object file Author: David Matthews. Copyright (c) 2006-7 David C. J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR H PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #ifdef HAVE_STDLIB_H #include #endif #ifdef HAVE_STDIO_H #include #endif #ifdef HAVE_STDDEF_H #include #endif #ifdef HAVE_UNISTD_H #include #endif #ifdef HAVE_ERRNO_H #include #endif #ifdef HAVE_TIME_H #include #endif #ifdef HAVE_ASSERT_H #include #define ASSERT(x) assert(x) #else #define ASSERT(x) #endif // If we haven't got elf.h we shouldn't be building this. #include // Solaris seems to put processor-specific constants in separate files #ifdef HAVE_SYS_ELF_SPARC_H #include #endif #ifdef HAVE_SYS_ELF_386_H #include #endif #ifdef HAVE_STRING_H #include #endif #ifdef HAVE_SYS_UTSNAME_H #include #endif #include "globals.h" #include "diagnostics.h" #include "sys.h" #include "machine_dep.h" #include "gc.h" #include "mpoly.h" #include "scanaddrs.h" #include "elfexport.h" #include "run_time.h" #include "version.h" #include "polystring.h" #define sym_last_local_sym sym_data_section // The first two symbols are special: // Zero is always special in ELF // 1 is used for the data section #define EXTRA_SYMBOLS 2 static unsigned AreaToSym(unsigned area) { return area+EXTRA_SYMBOLS; } // Section table entries enum { sect_initial = 0, sect_sectionnametable, sect_stringtable, sect_data, sect_relocation, sect_symtab, sect_Num_Sections }; // Generate the address relative to the start of the segment. void ELFExport::setRelocationAddress(void *p, ElfXX_Addr *reloc) { unsigned area = findArea(p); POLYUNSIGNED offset = (char*)p - (char*)memTable[area].mtAddr; // We have to add in the sizes of the areas preceding this one in the file. for (unsigned i = 0; i < area; i++) offset += memTable[i].mtLength; *reloc = offset; } /* Get the index corresponding to an address. */ PolyWord ELFExport::createRelocation(PolyWord p, void *relocAddr) { void *addr = p.AsAddress(); unsigned addrArea = findArea(addr); POLYUNSIGNED offset = (char*)addr - (char*)memTable[addrArea].mtAddr; if (useRela) { ElfXX_Rela reloc; // Set the offset within the section we're scanning. setRelocationAddress(relocAddr, &reloc.r_offset); reloc.r_info = ELFXX_R_INFO(AreaToSym(addrArea), directReloc); reloc.r_addend = offset; fwrite(&reloc, sizeof(reloc), 1, exportFile); relocationCount++; return PolyWord::FromUnsigned(0); } else { ElfXX_Rel reloc; setRelocationAddress(relocAddr, &reloc.r_offset); reloc.r_info = ELFXX_R_INFO(AreaToSym(addrArea), directReloc); fwrite(&reloc, sizeof(reloc), 1, exportFile); relocationCount++; return PolyWord::FromUnsigned(offset); } } /* This is called for each constant within the code. Print a relocation entry for the word and return a value that means that the offset is saved in original word. */ void ELFExport::ScanConstant(byte *addr, ScanRelocationKind code) { PolyWord p = GetConstantValue(addr, code); if (IS_INT(p) || p == PolyWord::FromUnsigned(0)) return; void *a = p.AsAddress(); unsigned aArea = findArea(a); // We don't need a relocation if this is relative to the current segment // since the relative address will already be right. if (code == PROCESS_RELOC_I386RELATIVE && aArea == findArea(addr)) return; // Set the value at the address to the offset relative to the symbol. POLYUNSIGNED offset = (char*)a - (char*)memTable[aArea].mtAddr; switch (code) { case PROCESS_RELOC_DIRECT: // 32 or 64 bit address of target { ElfXX_Rel reloc; setRelocationAddress(addr, &reloc.r_offset); reloc.r_info = ELFXX_R_INFO(AreaToSym(aArea), directReloc); for (unsigned i = 0; i < sizeof(PolyWord); i++) { addr[i] = (byte)(offset & 0xff); offset >>= 8; } fwrite(&reloc, sizeof(reloc), 1, exportFile); relocationCount++; } break; #if(defined(HOSTARCHITECTURE_X86) || defined(HOSTARCHITECTURE_X86_64)) case PROCESS_RELOC_I386RELATIVE: // 32 or 64 bit relative address { ElfXX_Rel reloc; setRelocationAddress(addr, &reloc.r_offset); // We seem to need to subtract 4 bytes to get the correct offset in ELF offset -= 4; reloc.r_info = ELFXX_R_INFO(AreaToSym(aArea), R_386_PC32); for (unsigned i = 0; i < sizeof(PolyWord); i++) { addr[i] = (byte)(offset & 0xff); offset >>= 8; } fwrite(&reloc, sizeof(reloc), 1, exportFile); relocationCount++; } break; #endif #ifdef HOSTARCHITECTURE_PPC case PROCESS_RELOC_PPCDUAL16SIGNED: // Power PC - two consecutive words case PROCESS_RELOC_PPCDUAL16UNSIGNED: { ElfXX_Rela reloc; setRelocationAddress(addr+2 /* actual bytes to be updated */, &reloc.r_offset); // We need two relocations here. reloc.r_info = ELFXX_R_INFO(AreaToSym(aArea), code == PROCESS_RELOC_PPCDUAL16SIGNED ? R_PPC_ADDR16_HA : R_PPC_ADDR16_HI); reloc.r_addend = offset; fwrite(&reloc, sizeof(reloc), 1, exportFile); relocationCount++; setRelocationAddress(addr+sizeof(PolyWord)+2, &reloc.r_offset); reloc.r_info = ELFXX_R_INFO(AreaToSym(aArea), R_PPC_ADDR16_LO); reloc.r_addend = offset; fwrite(&reloc, sizeof(reloc), 1, exportFile); relocationCount++; // Set the constant values to zero. This doesn't seem to be necessary // on the PPC but can't do any harm. POLYUNSIGNED *caddr = (POLYUNSIGNED *)addr; caddr[0] = caddr[0] & 0xffff0000; caddr[1] = caddr[1] & 0xffff0000; } break; #endif #ifdef HOSTARCHITECTURE_SPARC case PROCESS_RELOC_SPARCDUAL: // Sparc - two consecutive words { ElfXX_Rela reloc; setRelocationAddress(addr, &reloc.r_offset); // We need two relocations here. reloc.r_info = ELFXX_R_INFO(AreaToSym(aArea), R_SPARC_HI22); reloc.r_addend = offset; fwrite(&reloc, sizeof(reloc), 1, exportFile); relocationCount++; setRelocationAddress(addr+sizeof(PolyWord), &reloc.r_offset); reloc.r_info = ELFXX_R_INFO(AreaToSym(aArea), R_SPARC_LO10); reloc.r_addend = offset; fwrite(&reloc, sizeof(reloc), 1, exportFile); relocationCount++; POLYUNSIGNED *caddr = (POLYUNSIGNED *)addr; caddr[0] = caddr[0] & 0xffc00000; caddr[1] = caddr[1] & 0xfffff000; } break; case PROCESS_RELOC_SPARCRELATIVE: // Sparc 30-bit relative address { ElfXX_Rela reloc; setRelocationAddress(addr, &reloc.r_offset); reloc.r_info = ELFXX_R_INFO(AreaToSym(aArea), R_SPARC_WDISP30); reloc.r_addend = offset; fwrite(&reloc, sizeof(reloc), 1, exportFile); relocationCount++; POLYUNSIGNED *caddr = (POLYUNSIGNED *)addr; caddr[0] = caddr[0] & 0xc0000000; } break; #endif default: ASSERT(0); // Wrong type of relocation for this architecture. } } unsigned long ELFExport::makeStringTableEntry(const char *str, ExportStringTable *stab) { if (str == NULL || str[0] == 0) return 0; // First entry is the null string. else return stab->makeEntry(str); } void ELFExport::writeSymbol(const char *symbolName, long value, long size, int binding, int sttype, int section) { ElfXX_Sym symbol; memset(&symbol, 0, sizeof(symbol)); // Zero unused fields symbol.st_name = makeStringTableEntry(symbolName, &symStrings); symbol.st_value = value; symbol.st_size = size; symbol.st_info = ELFXX_ST_INFO(binding, sttype); symbol.st_other = 0; symbol.st_shndx = section; fwrite(&symbol, sizeof(symbol), 1, exportFile); symbolCount++; } // Set the file alignment. void ELFExport::alignFile(int align) { char pad[32]; // Maximum alignment int offset = ftell(exportFile); memset(pad, 0, sizeof(pad)); if ((offset % align) == 0) return; fwrite(&pad, align - (offset % align), 1, exportFile); } void ELFExport::createStructsRelocation(unsigned sym, POLYUNSIGNED offset, POLYSIGNED addend) { if (useRela) { ElfXX_Rela reloc; reloc.r_info = ELFXX_R_INFO(sym, directReloc); reloc.r_offset = offset; reloc.r_addend = addend; fwrite(&reloc, sizeof(reloc), 1, exportFile); relocationCount++; } else { ElfXX_Rel reloc; reloc.r_info = ELFXX_R_INFO(sym, directReloc); reloc.r_offset = offset; fwrite(&reloc, sizeof(reloc), 1, exportFile); relocationCount++; } } void ELFExport::exportStore(void) { PolyWord *p; ElfXX_Ehdr fhdr; ElfXX_Shdr sections[sect_Num_Sections]; unsigned i; // Both the string tables have an initial null entry. symStrings.makeEntry(""); sectionStrings.makeEntry(""); // Write out initial values for the headers. These are overwritten at the end. // File header memset(&fhdr, 0, sizeof(fhdr)); fhdr.e_ident[EI_MAG0] = 0x7f; fhdr.e_ident[EI_MAG1] = 'E'; fhdr.e_ident[EI_MAG2] = 'L'; fhdr.e_ident[EI_MAG3] = 'F'; fhdr.e_ident[EI_CLASS] = ELFCLASSXX; // ELFCLASS32 or ELFCLASS64 fhdr.e_ident[EI_VERSION] = EV_CURRENT; { union { unsigned long wrd; char chrs[sizeof(unsigned long)]; } endian; endian.wrd = 1; if (endian.chrs[0] == 0) fhdr.e_ident[EI_DATA] = ELFDATA2MSB; // Big endian else fhdr.e_ident[EI_DATA] = ELFDATA2LSB; // Little endian } fhdr.e_type = ET_REL; // The machine needs to match the machine we're compiling for // even if this is actually portable code. #if defined(HOSTARCHITECTURE_X86) fhdr.e_machine = EM_386; directReloc = R_386_32; useRela = false; #elif defined(HOSTARCHITECTURE_PPC) fhdr.e_machine = EM_PPC; directReloc = R_PPC_ADDR32; useRela = true; #elif defined(HOSTARCHITECTURE_SPARC) fhdr.e_machine = EM_SPARC; directReloc = R_SPARC_32; useRela = true; /* Sparc/Solaris, at least 2.8, requires ELF32_Rela relocations. For some reason, though, it adds the value in the location being relocated (as with ELF32_Rel relocations) as well as the addend. To be safe, whenever we use an ELF32_Rela relocation we always zero the location to be relocated. */ #elif defined(HOSTARCHITECTURE_X86_64) fhdr.e_machine = EM_X86_64; directReloc = R_X86_64_64; useRela = false; #elif defined(HOSTARCHITECTURE_ARM) #ifndef EF_ARM_EABI_VER4 #define EF_ARM_EABI_VER4 0x04000000 #endif // When linking ARM binaries the linker checks the ABI version. We // need to set the version to the same as the libraries. // GCC currently uses version 4. fhdr.e_machine = EM_ARM; directReloc = R_ARM_ABS32; useRela = false; fhdr.e_flags = EF_ARM_EABI_VER4; #else #error "No support for exporting on this architecture" #endif fhdr.e_version = EV_CURRENT; fhdr.e_shoff = sizeof(fhdr); // Offset to section header - immediately follows fhdr.e_ehsize = sizeof(fhdr); fhdr.e_shentsize = sizeof(ElfXX_Shdr); fhdr.e_shnum = sect_Num_Sections; fhdr.e_shstrndx = sect_sectionnametable; // Section name table section index; fwrite(&fhdr, sizeof(fhdr), 1, exportFile); // Write it for the moment. // Set up the section header but don't write it yet. memset(sections, 0, sizeof(sections)); // Section 0 - all zeros sections[sect_initial].sh_type = SHT_NULL; sections[sect_initial].sh_link = SHN_UNDEF; // Section name table. sections[sect_sectionnametable].sh_name = makeStringTableEntry(".shstrtab", §ionStrings); sections[sect_sectionnametable].sh_type = SHT_STRTAB; sections[sect_sectionnametable].sh_addralign = sizeof(char); // sections[sect_sectionnametable].sh_offset is set later // sections[sect_sectionnametable].sh_size is set later // Symbol name table. sections[sect_stringtable].sh_name = makeStringTableEntry(".strtab", §ionStrings); sections[sect_stringtable].sh_type = SHT_STRTAB; sections[sect_stringtable].sh_addralign = sizeof(char); // sections[sect_stringtable].sh_offset is set later // sections[sect_stringtable].sh_size is set later // Main data section // TODO: Replace this with separate sections for each of the memory areas. // At the very least we want to distinguish mutable and immutable areas. sections[sect_data].sh_name = makeStringTableEntry(".poly", §ionStrings); sections[sect_data].sh_type = SHT_PROGBITS; sections[sect_data].sh_flags = SHF_WRITE | SHF_ALLOC | SHF_EXECINSTR; sections[sect_data].sh_addralign = 8; // 8-byte alignment // sections[sect_data].sh_size is set later // sections[sect_data].sh_offset is set later. // sections[sect_data].sh_size is set later. // Relocation section sections[sect_relocation].sh_name = makeStringTableEntry(useRela ? ".rela.poly" : ".rel.poly", §ionStrings); sections[sect_relocation].sh_type = useRela ? SHT_RELA : SHT_REL; // Contains relocation with/out explicit addends (ElfXX_Rel) sections[sect_relocation].sh_link = sect_symtab; // Index to symbol table sections[sect_relocation].sh_info = sect_data; // Applies to data section sections[sect_relocation].sh_addralign = sizeof(long); // Align to a word sections[sect_relocation].sh_entsize = useRela ? sizeof(ElfXX_Rela) : sizeof(ElfXX_Rel); // sections[sect_relocation].sh_offset is set later. // sections[sect_relocation].sh_size is set later. // Symbol table. sections[sect_symtab].sh_name = makeStringTableEntry(".symtab", §ionStrings); sections[sect_symtab].sh_type = SHT_SYMTAB; sections[sect_symtab].sh_link = sect_stringtable; // String table to use sections[sect_symtab].sh_addralign = sizeof(long); // Align to a word sections[sect_symtab].sh_entsize = sizeof(ElfXX_Sym); // sections[sect_symtab].sh_info is set later // sections[sect_symtab].sh_size is set later // sections[sect_symtab].sh_offset is set later // First the symbol table. alignFile(sections[sect_symtab].sh_addralign); sections[sect_symtab].sh_offset = ftell(exportFile); writeSymbol("", 0, 0, 0, 0, 0); // Initial symbol // Write the local symbols first. writeSymbol("", 0, 0, STB_LOCAL, STT_SECTION, sect_data); // .data section POLYUNSIGNED areaSpace = 0; // Create symbols for the address areas. AreaToSym assumes these come first. for (i = 0; i < memTableEntries; i++) { if (i == ioMemEntry) writeSymbol("ioarea", areaSpace, 0, STB_LOCAL, STT_OBJECT, sect_data); else { char buff[50]; sprintf(buff, "area%1u", i); writeSymbol(buff, areaSpace, 0, STB_LOCAL, STT_OBJECT, sect_data); } areaSpace += memTable[i].mtLength; } // Extra symbols to help debugging. areaSpace = 0; for (i = 0; i < memTableEntries; i++) { if (i != ioMemEntry) { char buff[50]; // Write the names of the functions as local symbols. This isn't necessary // but it makes debugging easier since the function names appear in gdb. char *start = (char*)memTable[i].mtAddr; char *end = start + memTable[i].mtLength; for (p = (PolyWord*)start; p < (PolyWord*)end; ) { p++; PolyObject *obj = (PolyObject*)p; POLYUNSIGNED length = obj->Length(); if (length != 0 && obj->IsCodeObject()) { PolyWord *name = obj->ConstPtrForCode(); // Copy as much of the name as will fit and ignore any extra. // Do we need to worry about duplicates? (void)Poly_string_to_C(*name, buff, sizeof(buff)); writeSymbol(buff, areaSpace + ((char*)p - start), 0, STB_LOCAL, STT_OBJECT, sect_data); } p += length; } } areaSpace += memTable[i].mtLength; } // Global symbols - Just one: poly_exports writeSymbol("poly_exports", areaSpace, sizeof(exportDescription)+sizeof(memoryTableEntry)*memTableEntries, STB_GLOBAL, STT_OBJECT, sect_data); sections[sect_symtab].sh_info = symbolCount-1; // One more than last local sym sections[sect_symtab].sh_size = sizeof(ElfXX_Sym) * symbolCount; // Write the relocations. alignFile(sections[sect_relocation].sh_addralign); sections[sect_relocation].sh_offset = ftell(exportFile); relocationCount = 0; for (i = 0; i < memTableEntries; i++) { if (i != ioMemEntry) // Don't relocate the IO area { // Create the relocation table and turn all addresses into offsets. char *start = (char*)memTable[i].mtAddr; char *end = start + memTable[i].mtLength; for (p = (PolyWord*)start; p < (PolyWord*)end; ) { p++; PolyObject *obj = (PolyObject*)p; POLYUNSIGNED length = obj->Length(); relocateObject(obj); if (length != 0 && obj->IsCodeObject()) machineDependent->ScanConstantsWithinCode(obj, this); p += length; } } } // Relocations for "exports" and "memTable"; // TODO: This won't be needed if we put these in a separate section. areaSpace = 0; for (i = 0; i < memTableEntries; i++) areaSpace += memTable[i].mtLength; // Address of "memTable" within "exports". We can't use createRelocation because // the position of the relocation is not in either the mutable or the immutable area. POLYSIGNED memTableOffset = (POLYSIGNED)sizeof(exportDescription); // It follows immediately after this. createStructsRelocation(symbolCount-1 /* Last symbol */, areaSpace+offsetof(exportDescription, memTable), memTableOffset); // Address of "rootFunction" within "exports" unsigned rootAddrArea = findArea(rootFunction); POLYSIGNED rootOffset = (char*)rootFunction - (char*)memTable[rootAddrArea].mtAddr; createStructsRelocation(AreaToSym(rootAddrArea), areaSpace+offsetof(exportDescription, rootFunction), rootOffset); // Addresses of the areas within memtable. for (i = 0; i < memTableEntries; i++) { createStructsRelocation(AreaToSym(i), areaSpace + sizeof(exportDescription) + i * sizeof(memoryTableEntry) + offsetof(memoryTableEntry, mtAddr), 0 /* No offset relative to base symbol*/); } if (useRela) sections[sect_relocation].sh_size = relocationCount * sizeof(ElfXX_Rela); else sections[sect_relocation].sh_size = relocationCount * sizeof(ElfXX_Rel); // Now the binary data. alignFile(sections[sect_data].sh_addralign); sections[sect_data].sh_offset = ftell(exportFile); sections[sect_data].sh_size = areaSpace + sizeof(exportDescription) + memTableEntries*sizeof(memoryTableEntry); // Now the binary data. for (i = 0; i < memTableEntries; i++) { fwrite(memTable[i].mtAddr, 1, memTable[i].mtLength, exportFile); } exportDescription exports; memset(&exports, 0, sizeof(exports)); memset(memTable, 0, sizeof(memTable)); exports.structLength = sizeof(exportDescription); exports.memTableSize = sizeof(memoryTableEntry); exports.memTableEntries = memTableEntries; exports.ioIndex = 0; // The io entry is the first in the memory table exports.memTable = useRela ? 0 : (memoryTableEntry *)memTableOffset; // Set the value to be the offset relative to the base of the area. We have set a relocation // already which will add the base of the area. exports.rootFunction = useRela ? 0 : (void*)rootOffset; exports.timeStamp = time(NULL); exports.ioSpacing = ioSpacing; exports.architecture = machineDependent->MachineArchitecture(); exports.rtsVersion = POLY_version_number; // Set the address values to zero before we write. They will always // be relative to their base symbol. for (i = 0; i < memTableEntries; i++) memTable[i].mtAddr = 0; fwrite(&exports, sizeof(exports), 1, exportFile); fwrite(memTable, sizeof(memoryTableEntry), memTableEntries, exportFile); // The section name table sections[sect_sectionnametable].sh_offset = ftell(exportFile); fwrite(sectionStrings.strings, sectionStrings.stringSize, 1, exportFile); sections[sect_sectionnametable].sh_size = sectionStrings.stringSize; // The symbol name table sections[sect_stringtable].sh_offset = ftell(exportFile); fwrite(symStrings.strings, symStrings.stringSize, 1, exportFile); sections[sect_stringtable].sh_size = symStrings.stringSize; // Finally the section headers. alignFile(4); fhdr.e_shoff = ftell(exportFile); fwrite(sections, sizeof(sections), 1, exportFile); // Rewind to rewrite the file header with the offset of the section headers. rewind(exportFile); fwrite(&fhdr, sizeof(fhdr), 1, exportFile); fclose(exportFile); exportFile = NULL; } polyml.5.2.1/libpolyml/elfexport.h0000644000175000017500000000575710671522231016175 0ustar daviddavid/* Title: Export memory as an ELF object file Author: David C. J. Matthews. Copyright (c) 2006 David C. J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR H PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef ELFExport_H_INCLUDED #define ELFExport_H_INCLUDED #include "config.h" #include "scanaddrs.h" // For base class #include "exporter.h" #include // Select 32 or 64 bit version depending on the word length #if (SIZEOF_VOIDP == 8) #define ElfXX_Addr Elf64_Addr #define ElfXX_Rel Elf64_Rel #define ElfXX_Rela Elf64_Rela #define ElfXX_Sym Elf64_Sym #define ElfXX_Ehdr Elf64_Ehdr #define ElfXX_Shdr Elf64_Shdr #define ELFXX_R_INFO(_y, _z) ELF64_R_INFO(_y, _z) #define ELFXX_ST_INFO(_y, _z) ELF64_ST_INFO(_y, _z) #define ELFCLASSXX ELFCLASS64 #else #define ElfXX_Addr Elf32_Addr #define ElfXX_Rel Elf32_Rel #define ElfXX_Rela Elf32_Rela #define ElfXX_Sym Elf32_Sym #define ElfXX_Ehdr Elf32_Ehdr #define ElfXX_Shdr Elf32_Shdr #define ELFXX_R_INFO(_y, _z) ELF32_R_INFO(_y, _z) #define ELFXX_ST_INFO(_y, _z) ELF32_ST_INFO(_y, _z) #define ELFCLASSXX ELFCLASS32 #endif class TaskData; class ELFExport: public Exporter, public ScanAddress { public: ELFExport(): relocationCount(0), symbolCount(0), directReloc(0) {} public: virtual void exportStore(void); private: // ScanAddress overrides virtual void ScanConstant(byte *addrOfConst, ScanRelocationKind code); // At the moment we should only get calls to ScanConstant. virtual PolyObject *ScanObjectAddress(PolyObject *base) { return base; } private: void setRelocationAddress(void *p, ElfXX_Addr *reloc); PolyWord createRelocation(PolyWord p, void *relocAddr); void writeSymbol(const char *symbolName, long value, long size, int binding, int sttype, int section); unsigned long makeStringTableEntry(const char *str, ExportStringTable *stab); void alignFile(int align); void createStructsRelocation(unsigned area, POLYUNSIGNED offset, POLYSIGNED addend); unsigned relocationCount; unsigned symbolCount; // There are two tables - one is used for section names, the other for symbol names. ExportStringTable symStrings, sectionStrings; unsigned directReloc; bool useRela; // True if we should ElfXX_Rela rather than ElfXX_Rel TaskData *taskData; // Needed for exceptions. }; #endif polyml.5.2.1/libpolyml/errors.h0000644000175000017500000014675510700233012015472 0ustar daviddavid/* Title: Error number names Copyright (c) 2000-7 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ static struct { int errorNum; const char* errorString; } errortable[] = { #ifdef EPERM { EPERM, "EPERM" }, #endif #ifdef ENOENT { ENOENT, "ENOENT" }, #endif #ifdef ESRCH { ESRCH, "ESRCH" }, #endif #ifdef EINTR { EINTR, "EINTR"}, #endif #ifdef EIO { EIO, "EIO"}, #endif #ifdef ENXIO { ENXIO, "ENXIO"}, #endif #ifdef E2BIG { E2BIG, "E2BIG"}, #endif #ifdef ENOEXEC { ENOEXEC, "ENOEXEC"}, #endif #ifdef EBADF { EBADF, "EBADF"}, #endif #ifdef ECHILD { ECHILD, "ECHILD"}, #endif #ifdef EAGAIN { EAGAIN, "EAGAIN"}, #endif #ifdef EDEADLK { EDEADLK, "EDEADLK"}, #endif #ifdef ENOMEM { ENOMEM, "ENOMEM"}, #endif #ifdef EACCES { EACCES, "EACCES"}, #endif #ifdef EFAULT { EFAULT, "EFAULT"}, #endif #ifdef ENOTBLK { ENOTBLK, "ENOTBLK"}, #endif #ifdef EBUSY { EBUSY, "EBUSY"}, #endif #ifdef EEXIST { EEXIST, "EEXIST"}, #endif #ifdef EXDEV { EXDEV, "EXDEV"}, #endif #ifdef ENODEV { ENODEV, "ENODEV"}, #endif #ifdef ENOTDIR { ENOTDIR, "ENOTDIR"}, #endif #ifdef EISDIR { EISDIR, "EISDIR"}, #endif #ifdef EINVAL { EINVAL, "EINVAL"}, #endif #ifdef ENFILE { ENFILE, "ENFILE"}, #endif #ifdef EMFILE { EMFILE, "EMFILE"}, #endif #ifdef ENOTTY { ENOTTY, "ENOTTY"}, #endif #ifdef ETXTBSY { ETXTBSY, "ETXTBSY"}, #endif #ifdef EFBIG { EFBIG, "EFBIG"}, #endif #ifdef ENOSPC { ENOSPC, "ENOSPC"}, #endif #ifdef ESPIPE { ESPIPE, "ESPIPE"}, #endif #ifdef EROFS { EROFS, "EROFS"}, #endif #ifdef EMLINK { EMLINK, "EMLINK"}, #endif #ifdef EPIPE { EPIPE, "EPIPE"}, #endif #ifdef EDOM { EDOM, "EDOM"}, #endif #ifdef ERANGE { ERANGE, "ERANGE"}, #endif #ifdef ENOMSG { ENOMSG, "ENOMSG"}, #endif #ifdef EUCLEAN { EUCLEAN, "EUCLEAN"}, #endif #ifdef EWOULDBLOCK { EWOULDBLOCK, "EWOULDBLOCK"}, #endif #ifdef EIDRM { EIDRM, "EIDRM"}, #endif #ifdef EINPROGRESS { EINPROGRESS, "EINPROGRESS"}, #endif #ifdef ECHRNG { ECHRNG, "ECHRNG"}, #endif #ifdef EALREADY { EALREADY, "EALREADY"}, #endif #ifdef EL2NSYNC { EL2NSYNC, "EL2NSYNC"}, #endif #ifdef ENAMETOOLONG { ENAMETOOLONG, "ENAMETOOLONG"}, #endif #ifdef ENOTSOCK { ENOTSOCK, "ENOTSOCK"}, #endif #ifdef EL3HLT { EL3HLT, "EL3HLT"}, #endif #ifdef ENOLCK { ENOLCK, "ENOLCK"}, #endif #ifdef EDESTADDRREQ { EDESTADDRREQ, "EDESTADDRREQ"}, #endif #ifdef EL3RST { EL3RST, "EL3RST"}, #endif #ifdef ENOSYS { ENOSYS, "ENOSYS"}, #endif #ifdef EMSGSIZE { EMSGSIZE, "EMSGSIZE"}, #endif #ifdef ELNRNG { ELNRNG, "ELNRNG"}, #endif #ifdef ENOTEMPTY { ENOTEMPTY, "ENOTEMPTY"}, #endif #ifdef EPROTOTYPE { EPROTOTYPE, "EPROTOTYPE"}, #endif #ifdef EUNATCH { EUNATCH, "EUNATCH"}, #endif #ifdef EILSEQ { EILSEQ, "EILSEQ"}, #endif #ifdef ENOPROTOOPT { ENOPROTOOPT, "ENOPROTOOPT"}, #endif #ifdef ENOCSI { ENOCSI, "ENOCSI"}, #endif #ifdef EPROTONOSUPPORT { EPROTONOSUPPORT, "EPROTONOSUPPORT"}, #endif #ifdef EL2HLT { EL2HLT, "EL2HLT"}, #endif #ifdef ESOCKTNOSUPPORT { ESOCKTNOSUPPORT, "ESOCKTNOSUPPORT"}, #endif #ifdef EOPNOTSUPP { EOPNOTSUPP, "EOPNOTSUPP"}, #endif #ifdef ENOTREADY { ENOTREADY, "ENOTREADY"}, #endif #ifdef EPFNOSUPPORT { EPFNOSUPPORT, "EPFNOSUPPORT"}, #endif #ifdef EWRPROTECT { EWRPROTECT, "EWRPROTECT"}, #endif #ifdef EAFNOSUPPORT { EAFNOSUPPORT, "EAFNOSUPPORT"}, #endif #ifdef EFORMAT { EFORMAT, "EFORMAT"}, #endif #ifdef EADDRINUSE { EADDRINUSE, "EADDRINUSE"}, #endif #ifdef EADDRNOTAVAIL { EADDRNOTAVAIL, "EADDRNOTAVAIL"}, #endif #ifdef ENOCONNECT { ENOCONNECT, "ENOCONNECT"}, #endif #ifdef ENETDOWN { ENETDOWN, "ENETDOWN"}, #endif #ifdef ESTALE { ESTALE, "ESTALE"}, #endif #ifdef ENETUNREACH { ENETUNREACH, "ENETUNREACH"}, #endif #ifdef EDIST { EDIST, "EDIST"}, #endif #ifdef ENETRESET { ENETRESET, "ENETRESET"}, #endif #ifdef ECONNABORTED { ECONNABORTED, "ECONNABORTED"}, #endif #ifdef ECONNRESET { ECONNRESET, "ECONNRESET"}, #endif #ifdef ENOBUFS { ENOBUFS, "ENOBUFS"}, #endif #ifdef EISCONN { EISCONN, "EISCONN"}, #endif #ifdef ENOTCONN { ENOTCONN, "ENOTCONN"}, #endif #ifdef ESHUTDOWN { ESHUTDOWN, "ESHUTDOWN"}, #endif #ifdef ETOOMANYREFS { ETOOMANYREFS, "ETOOMANYREFS"}, #endif #ifdef ETIMEDOUT { ETIMEDOUT, "ETIMEDOUT"}, #endif #ifdef ECONNREFUSED { ECONNREFUSED, "ECONNREFUSED"}, #endif #ifdef ELOOP { ELOOP, "ELOOP"}, #endif #ifdef EHOSTDOWN { EHOSTDOWN, "EHOSTDOWN"}, #endif #ifdef EHOSTUNREACH { EHOSTUNREACH, "EHOSTUNREACH"}, #endif #ifdef EPROCLIM { EPROCLIM, "EPROCLIM"}, #endif #ifdef EUSERS { EUSERS, "EUSERS"}, #endif #ifdef EDQUOT { EDQUOT, "EDQUOT"}, #endif #ifdef EREMOTE { EREMOTE, "EREMOTE"}, #endif #ifdef ENOSTR { ENOSTR, "ENOSTR"}, #endif #ifdef EBADRPC { EBADRPC, "EBADRPC"}, #endif #ifdef ETIME { ETIME, "ETIME"}, #endif #ifdef ERPCMISMATCH { ERPCMISMATCH, "ERPCMISMATCH"}, #endif #ifdef ENOSR { ENOSR, "ENOSR"}, #endif #ifdef EPROGUNAVAIL { EPROGUNAVAIL, "EPROGUNAVAIL"}, #endif #ifdef EPROGMISMATCH { EPROGMISMATCH, "EPROGMISMATCH"}, #endif #ifdef EBADMSG { EBADMSG, "EBADMSG"}, #endif #ifdef EPROCUNAVAIL { EPROCUNAVAIL, "EPROCUNAVAIL"}, #endif #ifdef EFTYPE { EFTYPE, "EFTYPE"}, #endif #ifdef ENONET { ENONET, "ENONET"}, #endif #ifdef EAUTH { EAUTH, "EAUTH"}, #endif #ifdef ERESTART { ERESTART, "ERESTART"}, #endif #ifdef ERREMOTE { ERREMOTE, "ERREMOTE"}, #endif #ifdef ENEEDAUTH { ENEEDAUTH, "ENEEDAUTH"}, #endif #ifdef ENOLINK { ENOLINK, "ENOLINK"}, #endif #ifdef EADV { EADV, "EADV"}, #endif #ifdef ESRMNT { ESRMNT, "ESRMNT"}, #endif #ifdef ECOMM { ECOMM, "ECOMM"}, #endif #ifdef EPROTO { EPROTO, "EPROTO"}, #endif #ifdef EMULTIHOP { EMULTIHOP, "EMULTIHOP"}, #endif #ifdef EDOTDOT { EDOTDOT, "EDOTDOT"}, #endif #ifdef EREMCHG { EREMCHG, "EREMCHG"}, #endif #ifdef EMEDIA { EMEDIA, "EMEDIA"}, #endif #ifdef ESOFT { ESOFT, "ESOFT"}, #endif #ifdef ENOATTR { ENOATTR, "ENOATTR"}, #endif #ifdef ESAD { ESAD, "ESAD"}, #endif #ifdef ENOTRUST { ENOTRUST, "ENOTRUST"}, #endif #ifdef ECANCELED { ECANCELED, "ECANCELED"}, #endif #ifdef ENODATA { ENODATA, "ENODATA"}, #endif #ifdef WINDOWS_PC /* We generate all Windows messages as negative numbers to distinguish them from Unix errno values. */ { -ERROR_INVALID_FUNCTION, "ERROR_INVALID_FUNCTION" }, { -ERROR_FILE_NOT_FOUND, "ERROR_FILE_NOT_FOUND" }, { -ERROR_PATH_NOT_FOUND, "ERROR_PATH_NOT_FOUND" }, { -ERROR_TOO_MANY_OPEN_FILES, "ERROR_TOO_MANY_OPEN_FILES" }, { -ERROR_ACCESS_DENIED, "ERROR_ACCESS_DENIED" }, { -ERROR_INVALID_HANDLE, "ERROR_INVALID_HANDLE" }, { -ERROR_ARENA_TRASHED, "ERROR_ARENA_TRASHED" }, { -ERROR_NOT_ENOUGH_MEMORY, "ERROR_NOT_ENOUGH_MEMORY" }, { -ERROR_INVALID_BLOCK, "ERROR_INVALID_BLOCK" }, { -ERROR_BAD_ENVIRONMENT, "ERROR_BAD_ENVIRONMENT" }, { -ERROR_BAD_FORMAT, "ERROR_BAD_FORMAT" }, { -ERROR_INVALID_ACCESS, "ERROR_INVALID_ACCESS" }, { -ERROR_INVALID_DATA, "ERROR_INVALID_DATA" }, { -ERROR_OUTOFMEMORY, "ERROR_OUTOFMEMORY" }, { -ERROR_INVALID_DRIVE, "ERROR_INVALID_DRIVE" }, { -ERROR_CURRENT_DIRECTORY, "ERROR_CURRENT_DIRECTORY" }, { -ERROR_NOT_SAME_DEVICE, "ERROR_NOT_SAME_DEVICE" }, { -ERROR_NO_MORE_FILES, "ERROR_NO_MORE_FILES" }, { -ERROR_WRITE_PROTECT, "ERROR_WRITE_PROTECT" }, { -ERROR_BAD_UNIT, "ERROR_BAD_UNIT" }, { -ERROR_NOT_READY, "ERROR_NOT_READY" }, { -ERROR_BAD_COMMAND, "ERROR_BAD_COMMAND" }, { -ERROR_CRC, "ERROR_CRC" }, { -ERROR_BAD_LENGTH, "ERROR_BAD_LENGTH" }, { -ERROR_SEEK, "ERROR_SEEK" }, { -ERROR_NOT_DOS_DISK, "ERROR_NOT_DOS_DISK" }, { -ERROR_SECTOR_NOT_FOUND, "ERROR_SECTOR_NOT_FOUND" }, { -ERROR_OUT_OF_PAPER, "ERROR_OUT_OF_PAPER" }, { -ERROR_WRITE_FAULT, "ERROR_WRITE_FAULT" }, { -ERROR_READ_FAULT, "ERROR_READ_FAULT" }, { -ERROR_GEN_FAILURE, "ERROR_GEN_FAILURE" }, { -ERROR_SHARING_VIOLATION, "ERROR_SHARING_VIOLATION" }, { -ERROR_LOCK_VIOLATION, "ERROR_LOCK_VIOLATION" }, { -ERROR_WRONG_DISK, "ERROR_WRONG_DISK" }, { -ERROR_SHARING_BUFFER_EXCEEDED, "ERROR_SHARING_BUFFER_EXCEEDED" }, { -ERROR_HANDLE_EOF, "ERROR_HANDLE_EOF" }, { -ERROR_HANDLE_DISK_FULL, "ERROR_HANDLE_DISK_FULL" }, { -ERROR_NOT_SUPPORTED, "ERROR_NOT_SUPPORTED" }, { -ERROR_REM_NOT_LIST, "ERROR_REM_NOT_LIST" }, { -ERROR_DUP_NAME, "ERROR_DUP_NAME" }, { -ERROR_BAD_NETPATH, "ERROR_BAD_NETPATH" }, { -ERROR_NETWORK_BUSY, "ERROR_NETWORK_BUSY" }, { -ERROR_DEV_NOT_EXIST, "ERROR_DEV_NOT_EXIST" }, { -ERROR_TOO_MANY_CMDS, "ERROR_TOO_MANY_CMDS" }, { -ERROR_ADAP_HDW_ERR, "ERROR_ADAP_HDW_ERR" }, { -ERROR_BAD_NET_RESP, "ERROR_BAD_NET_RESP" }, { -ERROR_UNEXP_NET_ERR, "ERROR_UNEXP_NET_ERR" }, { -ERROR_BAD_REM_ADAP, "ERROR_BAD_REM_ADAP" }, { -ERROR_PRINTQ_FULL, "ERROR_PRINTQ_FULL" }, { -ERROR_NO_SPOOL_SPACE, "ERROR_NO_SPOOL_SPACE" }, { -ERROR_PRINT_CANCELLED, "ERROR_PRINT_CANCELLED" }, { -ERROR_NETNAME_DELETED, "ERROR_NETNAME_DELETED" }, { -ERROR_NETWORK_ACCESS_DENIED, "ERROR_NETWORK_ACCESS_DENIED" }, { -ERROR_BAD_DEV_TYPE, "ERROR_BAD_DEV_TYPE" }, { -ERROR_BAD_NET_NAME, "ERROR_BAD_NET_NAME" }, { -ERROR_TOO_MANY_NAMES, "ERROR_TOO_MANY_NAMES" }, { -ERROR_TOO_MANY_SESS, "ERROR_TOO_MANY_SESS" }, { -ERROR_SHARING_PAUSED, "ERROR_SHARING_PAUSED" }, { -ERROR_REQ_NOT_ACCEP, "ERROR_REQ_NOT_ACCEP" }, { -ERROR_REDIR_PAUSED, "ERROR_REDIR_PAUSED" }, { -ERROR_FILE_EXISTS, "ERROR_FILE_EXISTS" }, { -ERROR_CANNOT_MAKE, "ERROR_CANNOT_MAKE" }, { -ERROR_FAIL_I24, "ERROR_FAIL_I24" }, { -ERROR_OUT_OF_STRUCTURES, "ERROR_OUT_OF_STRUCTURES" }, { -ERROR_ALREADY_ASSIGNED, "ERROR_ALREADY_ASSIGNED" }, { -ERROR_INVALID_PASSWORD, "ERROR_INVALID_PASSWORD" }, { -ERROR_INVALID_PARAMETER, "ERROR_INVALID_PARAMETER" }, { -ERROR_NET_WRITE_FAULT, "ERROR_NET_WRITE_FAULT" }, { -ERROR_NO_PROC_SLOTS, "ERROR_NO_PROC_SLOTS" }, { -ERROR_TOO_MANY_SEMAPHORES, "ERROR_TOO_MANY_SEMAPHORES" }, { -ERROR_EXCL_SEM_ALREADY_OWNED, "ERROR_EXCL_SEM_ALREADY_OWNED" }, { -ERROR_SEM_IS_SET, "ERROR_SEM_IS_SET" }, { -ERROR_TOO_MANY_SEM_REQUESTS, "ERROR_TOO_MANY_SEM_REQUESTS" }, { -ERROR_INVALID_AT_INTERRUPT_TIME, "ERROR_INVALID_AT_INTERRUPT_TIME" }, { -ERROR_SEM_OWNER_DIED, "ERROR_SEM_OWNER_DIED" }, { -ERROR_SEM_USER_LIMIT, "ERROR_SEM_USER_LIMIT" }, { -ERROR_DISK_CHANGE, "ERROR_DISK_CHANGE" }, { -ERROR_DRIVE_LOCKED, "ERROR_DRIVE_LOCKED" }, { -ERROR_BROKEN_PIPE, "ERROR_BROKEN_PIPE" }, { -ERROR_OPEN_FAILED, "ERROR_OPEN_FAILED" }, { -ERROR_BUFFER_OVERFLOW, "ERROR_BUFFER_OVERFLOW" }, { -ERROR_DISK_FULL, "ERROR_DISK_FULL" }, { -ERROR_NO_MORE_SEARCH_HANDLES, "ERROR_NO_MORE_SEARCH_HANDLES" }, { -ERROR_INVALID_TARGET_HANDLE, "ERROR_INVALID_TARGET_HANDLE" }, { -ERROR_INVALID_CATEGORY, "ERROR_INVALID_CATEGORY" }, { -ERROR_INVALID_VERIFY_SWITCH, "ERROR_INVALID_VERIFY_SWITCH" }, { -ERROR_BAD_DRIVER_LEVEL, "ERROR_BAD_DRIVER_LEVEL" }, { -ERROR_CALL_NOT_IMPLEMENTED, "ERROR_CALL_NOT_IMPLEMENTED" }, { -ERROR_SEM_TIMEOUT, "ERROR_SEM_TIMEOUT" }, { -ERROR_INSUFFICIENT_BUFFER, "ERROR_INSUFFICIENT_BUFFER" }, { -ERROR_INVALID_NAME, "ERROR_INVALID_NAME" }, { -ERROR_INVALID_LEVEL, "ERROR_INVALID_LEVEL" }, { -ERROR_NO_VOLUME_LABEL, "ERROR_NO_VOLUME_LABEL" }, { -ERROR_MOD_NOT_FOUND, "ERROR_MOD_NOT_FOUND" }, { -ERROR_PROC_NOT_FOUND, "ERROR_PROC_NOT_FOUND" }, { -ERROR_WAIT_NO_CHILDREN, "ERROR_WAIT_NO_CHILDREN" }, { -ERROR_CHILD_NOT_COMPLETE, "ERROR_CHILD_NOT_COMPLETE" }, { -ERROR_DIRECT_ACCESS_HANDLE, "ERROR_DIRECT_ACCESS_HANDLE" }, { -ERROR_NEGATIVE_SEEK, "ERROR_NEGATIVE_SEEK" }, { -ERROR_SEEK_ON_DEVICE, "ERROR_SEEK_ON_DEVICE" }, { -ERROR_IS_JOIN_TARGET, "ERROR_IS_JOIN_TARGET" }, { -ERROR_IS_JOINED, "ERROR_IS_JOINED" }, { -ERROR_IS_SUBSTED, "ERROR_IS_SUBSTED" }, { -ERROR_NOT_JOINED, "ERROR_NOT_JOINED" }, { -ERROR_NOT_SUBSTED, "ERROR_NOT_SUBSTED" }, { -ERROR_JOIN_TO_JOIN, "ERROR_JOIN_TO_JOIN" }, { -ERROR_SUBST_TO_SUBST, "ERROR_SUBST_TO_SUBST" }, { -ERROR_JOIN_TO_SUBST, "ERROR_JOIN_TO_SUBST" }, { -ERROR_SUBST_TO_JOIN, "ERROR_SUBST_TO_JOIN" }, { -ERROR_BUSY_DRIVE, "ERROR_BUSY_DRIVE" }, { -ERROR_SAME_DRIVE, "ERROR_SAME_DRIVE" }, { -ERROR_DIR_NOT_ROOT, "ERROR_DIR_NOT_ROOT" }, { -ERROR_DIR_NOT_EMPTY, "ERROR_DIR_NOT_EMPTY" }, { -ERROR_IS_SUBST_PATH, "ERROR_IS_SUBST_PATH" }, { -ERROR_IS_JOIN_PATH, "ERROR_IS_JOIN_PATH" }, { -ERROR_PATH_BUSY, "ERROR_PATH_BUSY" }, { -ERROR_IS_SUBST_TARGET, "ERROR_IS_SUBST_TARGET" }, { -ERROR_SYSTEM_TRACE, "ERROR_SYSTEM_TRACE" }, { -ERROR_INVALID_EVENT_COUNT, "ERROR_INVALID_EVENT_COUNT" }, { -ERROR_TOO_MANY_MUXWAITERS, "ERROR_TOO_MANY_MUXWAITERS" }, { -ERROR_INVALID_LIST_FORMAT, "ERROR_INVALID_LIST_FORMAT" }, { -ERROR_LABEL_TOO_LONG, "ERROR_LABEL_TOO_LONG" }, { -ERROR_TOO_MANY_TCBS, "ERROR_TOO_MANY_TCBS" }, { -ERROR_SIGNAL_REFUSED, "ERROR_SIGNAL_REFUSED" }, { -ERROR_DISCARDED, "ERROR_DISCARDED" }, { -ERROR_NOT_LOCKED, "ERROR_NOT_LOCKED" }, { -ERROR_BAD_THREADID_ADDR, "ERROR_BAD_THREADID_ADDR" }, { -ERROR_BAD_ARGUMENTS, "ERROR_BAD_ARGUMENTS" }, { -ERROR_BAD_PATHNAME, "ERROR_BAD_PATHNAME" }, { -ERROR_SIGNAL_PENDING, "ERROR_SIGNAL_PENDING" }, { -ERROR_MAX_THRDS_REACHED, "ERROR_MAX_THRDS_REACHED" }, { -ERROR_LOCK_FAILED, "ERROR_LOCK_FAILED" }, { -ERROR_BUSY, "ERROR_BUSY" }, { -ERROR_CANCEL_VIOLATION, "ERROR_CANCEL_VIOLATION" }, { -ERROR_ATOMIC_LOCKS_NOT_SUPPORTED, "ERROR_ATOMIC_LOCKS_NOT_SUPPORTED" }, { -ERROR_INVALID_SEGMENT_NUMBER, "ERROR_INVALID_SEGMENT_NUMBER" }, { -ERROR_INVALID_ORDINAL, "ERROR_INVALID_ORDINAL" }, { -ERROR_ALREADY_EXISTS, "ERROR_ALREADY_EXISTS" }, { -ERROR_INVALID_FLAG_NUMBER, "ERROR_INVALID_FLAG_NUMBER" }, { -ERROR_SEM_NOT_FOUND, "ERROR_SEM_NOT_FOUND" }, { -ERROR_INVALID_STARTING_CODESEG, "ERROR_INVALID_STARTING_CODESEG" }, { -ERROR_INVALID_STACKSEG, "ERROR_INVALID_STACKSEG" }, { -ERROR_INVALID_MODULETYPE, "ERROR_INVALID_MODULETYPE" }, { -ERROR_INVALID_EXE_SIGNATURE, "ERROR_INVALID_EXE_SIGNATURE" }, { -ERROR_EXE_MARKED_INVALID, "ERROR_EXE_MARKED_INVALID" }, { -ERROR_BAD_EXE_FORMAT, "ERROR_BAD_EXE_FORMAT" }, { -ERROR_ITERATED_DATA_EXCEEDS_64k, "ERROR_ITERATED_DATA_EXCEEDS_64k" }, { -ERROR_INVALID_MINALLOCSIZE, "ERROR_INVALID_MINALLOCSIZE" }, { -ERROR_DYNLINK_FROM_INVALID_RING, "ERROR_DYNLINK_FROM_INVALID_RING" }, { -ERROR_IOPL_NOT_ENABLED, "ERROR_IOPL_NOT_ENABLED" }, { -ERROR_INVALID_SEGDPL, "ERROR_INVALID_SEGDPL" }, { -ERROR_AUTODATASEG_EXCEEDS_64k, "ERROR_AUTODATASEG_EXCEEDS_64k" }, { -ERROR_RING2SEG_MUST_BE_MOVABLE, "ERROR_RING2SEG_MUST_BE_MOVABLE" }, { -ERROR_RELOC_CHAIN_XEEDS_SEGLIM, "ERROR_RELOC_CHAIN_XEEDS_SEGLIM" }, { -ERROR_INFLOOP_IN_RELOC_CHAIN, "ERROR_INFLOOP_IN_RELOC_CHAIN" }, { -ERROR_ENVVAR_NOT_FOUND, "ERROR_ENVVAR_NOT_FOUND" }, { -ERROR_NO_SIGNAL_SENT, "ERROR_NO_SIGNAL_SENT" }, { -ERROR_FILENAME_EXCED_RANGE, "ERROR_FILENAME_EXCED_RANGE" }, { -ERROR_RING2_STACK_IN_USE, "ERROR_RING2_STACK_IN_USE" }, { -ERROR_META_EXPANSION_TOO_LONG, "ERROR_META_EXPANSION_TOO_LONG" }, { -ERROR_INVALID_SIGNAL_NUMBER, "ERROR_INVALID_SIGNAL_NUMBER" }, { -ERROR_THREAD_1_INACTIVE, "ERROR_THREAD_1_INACTIVE" }, { -ERROR_LOCKED, "ERROR_LOCKED" }, { -ERROR_TOO_MANY_MODULES, "ERROR_TOO_MANY_MODULES" }, { -ERROR_NESTING_NOT_ALLOWED, "ERROR_NESTING_NOT_ALLOWED" }, #ifdef ERROR_EXE_MACHINE_TYPE_MISMATCH { -ERROR_EXE_MACHINE_TYPE_MISMATCH, "ERROR_EXE_MACHINE_TYPE_MISMATCH" }, #endif { -ERROR_BAD_PIPE, "ERROR_BAD_PIPE" }, { -ERROR_PIPE_BUSY, "ERROR_PIPE_BUSY" }, { -ERROR_NO_DATA, "ERROR_NO_DATA" }, { -ERROR_PIPE_NOT_CONNECTED, "ERROR_PIPE_NOT_CONNECTED" }, { -ERROR_MORE_DATA, "ERROR_MORE_DATA" }, { -ERROR_VC_DISCONNECTED, "ERROR_VC_DISCONNECTED" }, { -ERROR_INVALID_EA_NAME, "ERROR_INVALID_EA_NAME" }, { -ERROR_EA_LIST_INCONSISTENT, "ERROR_EA_LIST_INCONSISTENT" }, { -ERROR_NO_MORE_ITEMS, "ERROR_NO_MORE_ITEMS" }, { -ERROR_CANNOT_COPY, "ERROR_CANNOT_COPY" }, { -ERROR_DIRECTORY, "ERROR_DIRECTORY" }, { -ERROR_EAS_DIDNT_FIT, "ERROR_EAS_DIDNT_FIT" }, { -ERROR_EA_FILE_CORRUPT, "ERROR_EA_FILE_CORRUPT" }, { -ERROR_EA_TABLE_FULL, "ERROR_EA_TABLE_FULL" }, { -ERROR_INVALID_EA_HANDLE, "ERROR_INVALID_EA_HANDLE" }, { -ERROR_EAS_NOT_SUPPORTED, "ERROR_EAS_NOT_SUPPORTED" }, { -ERROR_NOT_OWNER, "ERROR_NOT_OWNER" }, { -ERROR_TOO_MANY_POSTS, "ERROR_TOO_MANY_POSTS" }, { -ERROR_PARTIAL_COPY, "ERROR_PARTIAL_COPY" }, { -ERROR_MR_MID_NOT_FOUND, "ERROR_MR_MID_NOT_FOUND" }, { -ERROR_INVALID_ADDRESS, "ERROR_INVALID_ADDRESS" }, { -ERROR_ARITHMETIC_OVERFLOW, "ERROR_ARITHMETIC_OVERFLOW" }, { -ERROR_PIPE_CONNECTED, "ERROR_PIPE_CONNECTED" }, { -ERROR_PIPE_LISTENING, "ERROR_PIPE_LISTENING" }, { -ERROR_EA_ACCESS_DENIED, "ERROR_EA_ACCESS_DENIED" }, { -ERROR_OPERATION_ABORTED, "ERROR_OPERATION_ABORTED" }, { -ERROR_IO_INCOMPLETE, "ERROR_IO_INCOMPLETE" }, { -ERROR_IO_PENDING, "ERROR_IO_PENDING" }, { -ERROR_NOACCESS, "ERROR_NOACCESS" }, { -ERROR_SWAPERROR, "ERROR_SWAPERROR" }, { -ERROR_STACK_OVERFLOW, "ERROR_STACK_OVERFLOW" }, { -ERROR_INVALID_MESSAGE, "ERROR_INVALID_MESSAGE" }, { -ERROR_CAN_NOT_COMPLETE, "ERROR_CAN_NOT_COMPLETE" }, { -ERROR_INVALID_FLAGS, "ERROR_INVALID_FLAGS" }, { -ERROR_UNRECOGNIZED_VOLUME, "ERROR_UNRECOGNIZED_VOLUME" }, { -ERROR_FILE_INVALID, "ERROR_FILE_INVALID" }, { -ERROR_FULLSCREEN_MODE, "ERROR_FULLSCREEN_MODE" }, { -ERROR_NO_TOKEN, "ERROR_NO_TOKEN" }, { -ERROR_BADDB, "ERROR_BADDB" }, { -ERROR_BADKEY, "ERROR_BADKEY" }, { -ERROR_CANTOPEN, "ERROR_CANTOPEN" }, { -ERROR_CANTREAD, "ERROR_CANTREAD" }, { -ERROR_CANTWRITE, "ERROR_CANTWRITE" }, { -ERROR_REGISTRY_RECOVERED, "ERROR_REGISTRY_RECOVERED" }, { -ERROR_REGISTRY_CORRUPT, "ERROR_REGISTRY_CORRUPT" }, { -ERROR_REGISTRY_IO_FAILED, "ERROR_REGISTRY_IO_FAILED" }, { -ERROR_NOT_REGISTRY_FILE, "ERROR_NOT_REGISTRY_FILE" }, { -ERROR_KEY_DELETED, "ERROR_KEY_DELETED" }, { -ERROR_NO_LOG_SPACE, "ERROR_NO_LOG_SPACE" }, { -ERROR_KEY_HAS_CHILDREN, "ERROR_KEY_HAS_CHILDREN" }, { -ERROR_CHILD_MUST_BE_VOLATILE, "ERROR_CHILD_MUST_BE_VOLATILE" }, { -ERROR_NOTIFY_ENUM_DIR, "ERROR_NOTIFY_ENUM_DIR" }, { -ERROR_DEPENDENT_SERVICES_RUNNING, "ERROR_DEPENDENT_SERVICES_RUNNING" }, { -ERROR_INVALID_SERVICE_CONTROL, "ERROR_INVALID_SERVICE_CONTROL" }, { -ERROR_SERVICE_REQUEST_TIMEOUT, "ERROR_SERVICE_REQUEST_TIMEOUT" }, { -ERROR_SERVICE_NO_THREAD, "ERROR_SERVICE_NO_THREAD" }, { -ERROR_SERVICE_DATABASE_LOCKED, "ERROR_SERVICE_DATABASE_LOCKED" }, { -ERROR_SERVICE_ALREADY_RUNNING, "ERROR_SERVICE_ALREADY_RUNNING" }, { -ERROR_INVALID_SERVICE_ACCOUNT, "ERROR_INVALID_SERVICE_ACCOUNT" }, { -ERROR_SERVICE_DISABLED, "ERROR_SERVICE_DISABLED" }, { -ERROR_CIRCULAR_DEPENDENCY, "ERROR_CIRCULAR_DEPENDENCY" }, { -ERROR_SERVICE_DOES_NOT_EXIST, "ERROR_SERVICE_DOES_NOT_EXIST" }, { -ERROR_SERVICE_CANNOT_ACCEPT_CTRL, "ERROR_SERVICE_CANNOT_ACCEPT_CTRL" }, { -ERROR_SERVICE_NOT_ACTIVE, "ERROR_SERVICE_NOT_ACTIVE" }, { -ERROR_FAILED_SERVICE_CONTROLLER_CONNECT, "ERROR_FAILED_SERVICE_CONTROLLER_CONNECT" }, { -ERROR_EXCEPTION_IN_SERVICE, "ERROR_EXCEPTION_IN_SERVICE" }, { -ERROR_DATABASE_DOES_NOT_EXIST, "ERROR_DATABASE_DOES_NOT_EXIST" }, { -ERROR_SERVICE_SPECIFIC_ERROR, "ERROR_SERVICE_SPECIFIC_ERROR" }, { -ERROR_PROCESS_ABORTED, "ERROR_PROCESS_ABORTED" }, { -ERROR_SERVICE_DEPENDENCY_FAIL, "ERROR_SERVICE_DEPENDENCY_FAIL" }, { -ERROR_SERVICE_LOGON_FAILED, "ERROR_SERVICE_LOGON_FAILED" }, { -ERROR_SERVICE_START_HANG, "ERROR_SERVICE_START_HANG" }, { -ERROR_INVALID_SERVICE_LOCK, "ERROR_INVALID_SERVICE_LOCK" }, { -ERROR_SERVICE_MARKED_FOR_DELETE, "ERROR_SERVICE_MARKED_FOR_DELETE" }, { -ERROR_SERVICE_EXISTS, "ERROR_SERVICE_EXISTS" }, { -ERROR_ALREADY_RUNNING_LKG, "ERROR_ALREADY_RUNNING_LKG" }, { -ERROR_SERVICE_DEPENDENCY_DELETED, "ERROR_SERVICE_DEPENDENCY_DELETED" }, { -ERROR_BOOT_ALREADY_ACCEPTED, "ERROR_BOOT_ALREADY_ACCEPTED" }, { -ERROR_SERVICE_NEVER_STARTED, "ERROR_SERVICE_NEVER_STARTED" }, { -ERROR_DUPLICATE_SERVICE_NAME, "ERROR_DUPLICATE_SERVICE_NAME" }, #ifdef ERROR_DIFFERENT_SERVICE_ACCOUNT { -ERROR_DIFFERENT_SERVICE_ACCOUNT, "ERROR_DIFFERENT_SERVICE_ACCOUNT" }, #endif { -ERROR_END_OF_MEDIA, "ERROR_END_OF_MEDIA" }, { -ERROR_FILEMARK_DETECTED, "ERROR_FILEMARK_DETECTED" }, { -ERROR_BEGINNING_OF_MEDIA, "ERROR_BEGINNING_OF_MEDIA" }, { -ERROR_SETMARK_DETECTED, "ERROR_SETMARK_DETECTED" }, { -ERROR_NO_DATA_DETECTED, "ERROR_NO_DATA_DETECTED" }, { -ERROR_PARTITION_FAILURE, "ERROR_PARTITION_FAILURE" }, { -ERROR_INVALID_BLOCK_LENGTH, "ERROR_INVALID_BLOCK_LENGTH" }, { -ERROR_DEVICE_NOT_PARTITIONED, "ERROR_DEVICE_NOT_PARTITIONED" }, { -ERROR_UNABLE_TO_LOCK_MEDIA, "ERROR_UNABLE_TO_LOCK_MEDIA" }, { -ERROR_UNABLE_TO_UNLOAD_MEDIA, "ERROR_UNABLE_TO_UNLOAD_MEDIA" }, { -ERROR_MEDIA_CHANGED, "ERROR_MEDIA_CHANGED" }, { -ERROR_BUS_RESET, "ERROR_BUS_RESET" }, { -ERROR_NO_MEDIA_IN_DRIVE, "ERROR_NO_MEDIA_IN_DRIVE" }, { -ERROR_NO_UNICODE_TRANSLATION, "ERROR_NO_UNICODE_TRANSLATION" }, { -ERROR_DLL_INIT_FAILED, "ERROR_DLL_INIT_FAILED" }, { -ERROR_SHUTDOWN_IN_PROGRESS, "ERROR_SHUTDOWN_IN_PROGRESS" }, { -ERROR_NO_SHUTDOWN_IN_PROGRESS, "ERROR_NO_SHUTDOWN_IN_PROGRESS" }, { -ERROR_IO_DEVICE, "ERROR_IO_DEVICE" }, { -ERROR_SERIAL_NO_DEVICE, "ERROR_SERIAL_NO_DEVICE" }, { -ERROR_IRQ_BUSY, "ERROR_IRQ_BUSY" }, { -ERROR_MORE_WRITES, "ERROR_MORE_WRITES" }, { -ERROR_COUNTER_TIMEOUT, "ERROR_COUNTER_TIMEOUT" }, { -ERROR_FLOPPY_ID_MARK_NOT_FOUND, "ERROR_FLOPPY_ID_MARK_NOT_FOUND" }, { -ERROR_FLOPPY_WRONG_CYLINDER, "ERROR_FLOPPY_WRONG_CYLINDER" }, { -ERROR_FLOPPY_UNKNOWN_ERROR, "ERROR_FLOPPY_UNKNOWN_ERROR" }, { -ERROR_FLOPPY_BAD_REGISTERS, "ERROR_FLOPPY_BAD_REGISTERS" }, { -ERROR_DISK_RECALIBRATE_FAILED, "ERROR_DISK_RECALIBRATE_FAILED" }, { -ERROR_DISK_OPERATION_FAILED, "ERROR_DISK_OPERATION_FAILED" }, { -ERROR_DISK_RESET_FAILED, "ERROR_DISK_RESET_FAILED" }, { -ERROR_EOM_OVERFLOW, "ERROR_EOM_OVERFLOW" }, { -ERROR_NOT_ENOUGH_SERVER_MEMORY, "ERROR_NOT_ENOUGH_SERVER_MEMORY" }, { -ERROR_POSSIBLE_DEADLOCK, "ERROR_POSSIBLE_DEADLOCK" }, { -ERROR_MAPPED_ALIGNMENT, "ERROR_MAPPED_ALIGNMENT" }, { -ERROR_SET_POWER_STATE_VETOED, "ERROR_SET_POWER_STATE_VETOED" }, { -ERROR_SET_POWER_STATE_FAILED, "ERROR_SET_POWER_STATE_FAILED" }, #ifdef ERROR_TOO_MANY_LINKS { -ERROR_TOO_MANY_LINKS, "ERROR_TOO_MANY_LINKS" }, #endif { -ERROR_OLD_WIN_VERSION, "ERROR_OLD_WIN_VERSION" }, { -ERROR_APP_WRONG_OS, "ERROR_APP_WRONG_OS" }, { -ERROR_SINGLE_INSTANCE_APP, "ERROR_SINGLE_INSTANCE_APP" }, { -ERROR_RMODE_APP, "ERROR_RMODE_APP" }, { -ERROR_INVALID_DLL, "ERROR_INVALID_DLL" }, { -ERROR_NO_ASSOCIATION, "ERROR_NO_ASSOCIATION" }, { -ERROR_DDE_FAIL, "ERROR_DDE_FAIL" }, { -ERROR_DLL_NOT_FOUND, "ERROR_DLL_NOT_FOUND" }, { -ERROR_BAD_USERNAME, "ERROR_BAD_USERNAME" }, { -ERROR_NOT_CONNECTED, "ERROR_NOT_CONNECTED" }, { -ERROR_OPEN_FILES, "ERROR_OPEN_FILES" }, { -ERROR_ACTIVE_CONNECTIONS, "ERROR_ACTIVE_CONNECTIONS" }, { -ERROR_DEVICE_IN_USE, "ERROR_DEVICE_IN_USE" }, { -ERROR_BAD_DEVICE, "ERROR_BAD_DEVICE" }, { -ERROR_CONNECTION_UNAVAIL, "ERROR_CONNECTION_UNAVAIL" }, { -ERROR_DEVICE_ALREADY_REMEMBERED, "ERROR_DEVICE_ALREADY_REMEMBERED" }, { -ERROR_NO_NET_OR_BAD_PATH, "ERROR_NO_NET_OR_BAD_PATH" }, { -ERROR_BAD_PROVIDER, "ERROR_BAD_PROVIDER" }, { -ERROR_CANNOT_OPEN_PROFILE, "ERROR_CANNOT_OPEN_PROFILE" }, { -ERROR_BAD_PROFILE, "ERROR_BAD_PROFILE" }, { -ERROR_NOT_CONTAINER, "ERROR_NOT_CONTAINER" }, { -ERROR_EXTENDED_ERROR, "ERROR_EXTENDED_ERROR" }, { -ERROR_INVALID_GROUPNAME, "ERROR_INVALID_GROUPNAME" }, { -ERROR_INVALID_COMPUTERNAME, "ERROR_INVALID_COMPUTERNAME" }, { -ERROR_INVALID_EVENTNAME, "ERROR_INVALID_EVENTNAME" }, { -ERROR_INVALID_DOMAINNAME, "ERROR_INVALID_DOMAINNAME" }, { -ERROR_INVALID_SERVICENAME, "ERROR_INVALID_SERVICENAME" }, { -ERROR_INVALID_NETNAME, "ERROR_INVALID_NETNAME" }, { -ERROR_INVALID_SHARENAME, "ERROR_INVALID_SHARENAME" }, { -ERROR_INVALID_PASSWORDNAME, "ERROR_INVALID_PASSWORDNAME" }, { -ERROR_INVALID_MESSAGENAME, "ERROR_INVALID_MESSAGENAME" }, { -ERROR_INVALID_MESSAGEDEST, "ERROR_INVALID_MESSAGEDEST" }, { -ERROR_SESSION_CREDENTIAL_CONFLICT, "ERROR_SESSION_CREDENTIAL_CONFLICT" }, { -ERROR_REMOTE_SESSION_LIMIT_EXCEEDED, "ERROR_REMOTE_SESSION_LIMIT_EXCEEDED" }, { -ERROR_DUP_DOMAINNAME, "ERROR_DUP_DOMAINNAME" }, { -ERROR_NO_NETWORK, "ERROR_NO_NETWORK" }, { -ERROR_CANCELLED, "ERROR_CANCELLED" }, { -ERROR_USER_MAPPED_FILE, "ERROR_USER_MAPPED_FILE" }, { -ERROR_CONNECTION_REFUSED, "ERROR_CONNECTION_REFUSED" }, { -ERROR_GRACEFUL_DISCONNECT, "ERROR_GRACEFUL_DISCONNECT" }, { -ERROR_ADDRESS_ALREADY_ASSOCIATED, "ERROR_ADDRESS_ALREADY_ASSOCIATED" }, { -ERROR_ADDRESS_NOT_ASSOCIATED, "ERROR_ADDRESS_NOT_ASSOCIATED" }, { -ERROR_CONNECTION_INVALID, "ERROR_CONNECTION_INVALID" }, { -ERROR_CONNECTION_ACTIVE, "ERROR_CONNECTION_ACTIVE" }, { -ERROR_NETWORK_UNREACHABLE, "ERROR_NETWORK_UNREACHABLE" }, { -ERROR_HOST_UNREACHABLE, "ERROR_HOST_UNREACHABLE" }, { -ERROR_PROTOCOL_UNREACHABLE, "ERROR_PROTOCOL_UNREACHABLE" }, { -ERROR_PORT_UNREACHABLE, "ERROR_PORT_UNREACHABLE" }, { -ERROR_REQUEST_ABORTED, "ERROR_REQUEST_ABORTED" }, { -ERROR_CONNECTION_ABORTED, "ERROR_CONNECTION_ABORTED" }, { -ERROR_RETRY, "ERROR_RETRY" }, { -ERROR_CONNECTION_COUNT_LIMIT, "ERROR_CONNECTION_COUNT_LIMIT" }, { -ERROR_LOGIN_TIME_RESTRICTION, "ERROR_LOGIN_TIME_RESTRICTION" }, { -ERROR_LOGIN_WKSTA_RESTRICTION, "ERROR_LOGIN_WKSTA_RESTRICTION" }, { -ERROR_INCORRECT_ADDRESS, "ERROR_INCORRECT_ADDRESS" }, { -ERROR_ALREADY_REGISTERED, "ERROR_ALREADY_REGISTERED" }, { -ERROR_SERVICE_NOT_FOUND, "ERROR_SERVICE_NOT_FOUND" }, { -ERROR_NOT_AUTHENTICATED, "ERROR_NOT_AUTHENTICATED" }, { -ERROR_NOT_LOGGED_ON, "ERROR_NOT_LOGGED_ON" }, { -ERROR_CONTINUE, "ERROR_CONTINUE" }, { -ERROR_ALREADY_INITIALIZED, "ERROR_ALREADY_INITIALIZED" }, { -ERROR_NO_MORE_DEVICES, "ERROR_NO_MORE_DEVICES" }, { -ERROR_NOT_ALL_ASSIGNED, "ERROR_NOT_ALL_ASSIGNED" }, { -ERROR_SOME_NOT_MAPPED, "ERROR_SOME_NOT_MAPPED" }, { -ERROR_NO_QUOTAS_FOR_ACCOUNT, "ERROR_NO_QUOTAS_FOR_ACCOUNT" }, { -ERROR_LOCAL_USER_SESSION_KEY, "ERROR_LOCAL_USER_SESSION_KEY" }, { -ERROR_NULL_LM_PASSWORD, "ERROR_NULL_LM_PASSWORD" }, { -ERROR_UNKNOWN_REVISION, "ERROR_UNKNOWN_REVISION" }, { -ERROR_REVISION_MISMATCH, "ERROR_REVISION_MISMATCH" }, { -ERROR_INVALID_OWNER, "ERROR_INVALID_OWNER" }, { -ERROR_INVALID_PRIMARY_GROUP, "ERROR_INVALID_PRIMARY_GROUP" }, { -ERROR_NO_IMPERSONATION_TOKEN, "ERROR_NO_IMPERSONATION_TOKEN" }, { -ERROR_CANT_DISABLE_MANDATORY, "ERROR_CANT_DISABLE_MANDATORY" }, { -ERROR_NO_LOGON_SERVERS, "ERROR_NO_LOGON_SERVERS" }, { -ERROR_NO_SUCH_LOGON_SESSION, "ERROR_NO_SUCH_LOGON_SESSION" }, { -ERROR_NO_SUCH_PRIVILEGE, "ERROR_NO_SUCH_PRIVILEGE" }, { -ERROR_PRIVILEGE_NOT_HELD, "ERROR_PRIVILEGE_NOT_HELD" }, { -ERROR_INVALID_ACCOUNT_NAME, "ERROR_INVALID_ACCOUNT_NAME" }, { -ERROR_USER_EXISTS, "ERROR_USER_EXISTS" }, { -ERROR_NO_SUCH_USER, "ERROR_NO_SUCH_USER" }, { -ERROR_GROUP_EXISTS, "ERROR_GROUP_EXISTS" }, { -ERROR_NO_SUCH_GROUP, "ERROR_NO_SUCH_GROUP" }, { -ERROR_MEMBER_IN_GROUP, "ERROR_MEMBER_IN_GROUP" }, { -ERROR_MEMBER_NOT_IN_GROUP, "ERROR_MEMBER_NOT_IN_GROUP" }, { -ERROR_LAST_ADMIN, "ERROR_LAST_ADMIN" }, { -ERROR_WRONG_PASSWORD, "ERROR_WRONG_PASSWORD" }, { -ERROR_ILL_FORMED_PASSWORD, "ERROR_ILL_FORMED_PASSWORD" }, { -ERROR_PASSWORD_RESTRICTION, "ERROR_PASSWORD_RESTRICTION" }, { -ERROR_LOGON_FAILURE, "ERROR_LOGON_FAILURE" }, { -ERROR_ACCOUNT_RESTRICTION, "ERROR_ACCOUNT_RESTRICTION" }, { -ERROR_INVALID_LOGON_HOURS, "ERROR_INVALID_LOGON_HOURS" }, { -ERROR_INVALID_WORKSTATION, "ERROR_INVALID_WORKSTATION" }, { -ERROR_PASSWORD_EXPIRED, "ERROR_PASSWORD_EXPIRED" }, { -ERROR_ACCOUNT_DISABLED, "ERROR_ACCOUNT_DISABLED" }, { -ERROR_NONE_MAPPED, "ERROR_NONE_MAPPED" }, { -ERROR_TOO_MANY_LUIDS_REQUESTED, "ERROR_TOO_MANY_LUIDS_REQUESTED" }, { -ERROR_LUIDS_EXHAUSTED, "ERROR_LUIDS_EXHAUSTED" }, { -ERROR_INVALID_SUB_AUTHORITY, "ERROR_INVALID_SUB_AUTHORITY" }, { -ERROR_INVALID_ACL, "ERROR_INVALID_ACL" }, { -ERROR_INVALID_SID, "ERROR_INVALID_SID" }, { -ERROR_INVALID_SECURITY_DESCR, "ERROR_INVALID_SECURITY_DESCR" }, { -ERROR_BAD_INHERITANCE_ACL, "ERROR_BAD_INHERITANCE_ACL" }, { -ERROR_SERVER_DISABLED, "ERROR_SERVER_DISABLED" }, { -ERROR_SERVER_NOT_DISABLED, "ERROR_SERVER_NOT_DISABLED" }, { -ERROR_INVALID_ID_AUTHORITY, "ERROR_INVALID_ID_AUTHORITY" }, { -ERROR_ALLOTTED_SPACE_EXCEEDED, "ERROR_ALLOTTED_SPACE_EXCEEDED" }, { -ERROR_INVALID_GROUP_ATTRIBUTES, "ERROR_INVALID_GROUP_ATTRIBUTES" }, { -ERROR_BAD_IMPERSONATION_LEVEL, "ERROR_BAD_IMPERSONATION_LEVEL" }, { -ERROR_CANT_OPEN_ANONYMOUS, "ERROR_CANT_OPEN_ANONYMOUS" }, { -ERROR_BAD_VALIDATION_CLASS, "ERROR_BAD_VALIDATION_CLASS" }, { -ERROR_BAD_TOKEN_TYPE, "ERROR_BAD_TOKEN_TYPE" }, { -ERROR_NO_SECURITY_ON_OBJECT, "ERROR_NO_SECURITY_ON_OBJECT" }, { -ERROR_CANT_ACCESS_DOMAIN_INFO, "ERROR_CANT_ACCESS_DOMAIN_INFO" }, { -ERROR_INVALID_SERVER_STATE, "ERROR_INVALID_SERVER_STATE" }, { -ERROR_INVALID_DOMAIN_STATE, "ERROR_INVALID_DOMAIN_STATE" }, { -ERROR_INVALID_DOMAIN_ROLE, "ERROR_INVALID_DOMAIN_ROLE" }, { -ERROR_NO_SUCH_DOMAIN, "ERROR_NO_SUCH_DOMAIN" }, { -ERROR_DOMAIN_EXISTS, "ERROR_DOMAIN_EXISTS" }, { -ERROR_DOMAIN_LIMIT_EXCEEDED, "ERROR_DOMAIN_LIMIT_EXCEEDED" }, { -ERROR_INTERNAL_DB_CORRUPTION, "ERROR_INTERNAL_DB_CORRUPTION" }, { -ERROR_INTERNAL_ERROR, "ERROR_INTERNAL_ERROR" }, { -ERROR_GENERIC_NOT_MAPPED, "ERROR_GENERIC_NOT_MAPPED" }, { -ERROR_BAD_DESCRIPTOR_FORMAT, "ERROR_BAD_DESCRIPTOR_FORMAT" }, { -ERROR_NOT_LOGON_PROCESS, "ERROR_NOT_LOGON_PROCESS" }, { -ERROR_LOGON_SESSION_EXISTS, "ERROR_LOGON_SESSION_EXISTS" }, { -ERROR_NO_SUCH_PACKAGE, "ERROR_NO_SUCH_PACKAGE" }, { -ERROR_BAD_LOGON_SESSION_STATE, "ERROR_BAD_LOGON_SESSION_STATE" }, { -ERROR_LOGON_SESSION_COLLISION, "ERROR_LOGON_SESSION_COLLISION" }, { -ERROR_INVALID_LOGON_TYPE, "ERROR_INVALID_LOGON_TYPE" }, { -ERROR_CANNOT_IMPERSONATE, "ERROR_CANNOT_IMPERSONATE" }, { -ERROR_RXACT_INVALID_STATE, "ERROR_RXACT_INVALID_STATE" }, { -ERROR_RXACT_COMMIT_FAILURE, "ERROR_RXACT_COMMIT_FAILURE" }, { -ERROR_SPECIAL_ACCOUNT, "ERROR_SPECIAL_ACCOUNT" }, { -ERROR_SPECIAL_GROUP, "ERROR_SPECIAL_GROUP" }, { -ERROR_SPECIAL_USER, "ERROR_SPECIAL_USER" }, { -ERROR_MEMBERS_PRIMARY_GROUP, "ERROR_MEMBERS_PRIMARY_GROUP" }, { -ERROR_TOKEN_ALREADY_IN_USE, "ERROR_TOKEN_ALREADY_IN_USE" }, { -ERROR_NO_SUCH_ALIAS, "ERROR_NO_SUCH_ALIAS" }, { -ERROR_MEMBER_NOT_IN_ALIAS, "ERROR_MEMBER_NOT_IN_ALIAS" }, { -ERROR_MEMBER_IN_ALIAS, "ERROR_MEMBER_IN_ALIAS" }, { -ERROR_ALIAS_EXISTS, "ERROR_ALIAS_EXISTS" }, { -ERROR_LOGON_NOT_GRANTED, "ERROR_LOGON_NOT_GRANTED" }, { -ERROR_TOO_MANY_SECRETS, "ERROR_TOO_MANY_SECRETS" }, { -ERROR_SECRET_TOO_LONG, "ERROR_SECRET_TOO_LONG" }, { -ERROR_INTERNAL_DB_ERROR, "ERROR_INTERNAL_DB_ERROR" }, { -ERROR_TOO_MANY_CONTEXT_IDS, "ERROR_TOO_MANY_CONTEXT_IDS" }, { -ERROR_LOGON_TYPE_NOT_GRANTED, "ERROR_LOGON_TYPE_NOT_GRANTED" }, { -ERROR_NT_CROSS_ENCRYPTION_REQUIRED, "ERROR_NT_CROSS_ENCRYPTION_REQUIRED" }, { -ERROR_NO_SUCH_MEMBER, "ERROR_NO_SUCH_MEMBER" }, { -ERROR_INVALID_MEMBER, "ERROR_INVALID_MEMBER" }, { -ERROR_TOO_MANY_SIDS, "ERROR_TOO_MANY_SIDS" }, { -ERROR_LM_CROSS_ENCRYPTION_REQUIRED, "ERROR_LM_CROSS_ENCRYPTION_REQUIRED" }, { -ERROR_NO_INHERITANCE, "ERROR_NO_INHERITANCE" }, { -ERROR_FILE_CORRUPT, "ERROR_FILE_CORRUPT" }, { -ERROR_DISK_CORRUPT, "ERROR_DISK_CORRUPT" }, { -ERROR_NO_USER_SESSION_KEY, "ERROR_NO_USER_SESSION_KEY" }, #ifdef ERROR_LICENSE_QUOTA_EXCEEDED { -ERROR_LICENSE_QUOTA_EXCEEDED, "ERROR_LICENSE_QUOTA_EXCEEDED" }, #endif { -ERROR_INVALID_WINDOW_HANDLE, "ERROR_INVALID_WINDOW_HANDLE" }, { -ERROR_INVALID_MENU_HANDLE, "ERROR_INVALID_MENU_HANDLE" }, { -ERROR_INVALID_CURSOR_HANDLE, "ERROR_INVALID_CURSOR_HANDLE" }, { -ERROR_INVALID_ACCEL_HANDLE, "ERROR_INVALID_ACCEL_HANDLE" }, { -ERROR_INVALID_HOOK_HANDLE, "ERROR_INVALID_HOOK_HANDLE" }, { -ERROR_INVALID_DWP_HANDLE, "ERROR_INVALID_DWP_HANDLE" }, { -ERROR_TLW_WITH_WSCHILD, "ERROR_TLW_WITH_WSCHILD" }, { -ERROR_CANNOT_FIND_WND_CLASS, "ERROR_CANNOT_FIND_WND_CLASS" }, { -ERROR_WINDOW_OF_OTHER_THREAD, "ERROR_WINDOW_OF_OTHER_THREAD" }, { -ERROR_HOTKEY_ALREADY_REGISTERED, "ERROR_HOTKEY_ALREADY_REGISTERED" }, { -ERROR_CLASS_ALREADY_EXISTS, "ERROR_CLASS_ALREADY_EXISTS" }, { -ERROR_CLASS_DOES_NOT_EXIST, "ERROR_CLASS_DOES_NOT_EXIST" }, { -ERROR_CLASS_HAS_WINDOWS, "ERROR_CLASS_HAS_WINDOWS" }, { -ERROR_INVALID_INDEX, "ERROR_INVALID_INDEX" }, { -ERROR_INVALID_ICON_HANDLE, "ERROR_INVALID_ICON_HANDLE" }, { -ERROR_PRIVATE_DIALOG_INDEX, "ERROR_PRIVATE_DIALOG_INDEX" }, { -ERROR_LISTBOX_ID_NOT_FOUND, "ERROR_LISTBOX_ID_NOT_FOUND" }, { -ERROR_NO_WILDCARD_CHARACTERS, "ERROR_NO_WILDCARD_CHARACTERS" }, { -ERROR_CLIPBOARD_NOT_OPEN, "ERROR_CLIPBOARD_NOT_OPEN" }, { -ERROR_HOTKEY_NOT_REGISTERED, "ERROR_HOTKEY_NOT_REGISTERED" }, { -ERROR_WINDOW_NOT_DIALOG, "ERROR_WINDOW_NOT_DIALOG" }, { -ERROR_CONTROL_ID_NOT_FOUND, "ERROR_CONTROL_ID_NOT_FOUND" }, { -ERROR_INVALID_COMBOBOX_MESSAGE, "ERROR_INVALID_COMBOBOX_MESSAGE" }, { -ERROR_WINDOW_NOT_COMBOBOX, "ERROR_WINDOW_NOT_COMBOBOX" }, { -ERROR_INVALID_EDIT_HEIGHT, "ERROR_INVALID_EDIT_HEIGHT" }, { -ERROR_DC_NOT_FOUND, "ERROR_DC_NOT_FOUND" }, { -ERROR_INVALID_HOOK_FILTER, "ERROR_INVALID_HOOK_FILTER" }, { -ERROR_INVALID_FILTER_PROC, "ERROR_INVALID_FILTER_PROC" }, { -ERROR_HOOK_NEEDS_HMOD, "ERROR_HOOK_NEEDS_HMOD" }, { -ERROR_GLOBAL_ONLY_HOOK, "ERROR_GLOBAL_ONLY_HOOK" }, { -ERROR_JOURNAL_HOOK_SET, "ERROR_JOURNAL_HOOK_SET" }, { -ERROR_HOOK_NOT_INSTALLED, "ERROR_HOOK_NOT_INSTALLED" }, { -ERROR_INVALID_LB_MESSAGE, "ERROR_INVALID_LB_MESSAGE" }, { -ERROR_SETCOUNT_ON_BAD_LB, "ERROR_SETCOUNT_ON_BAD_LB" }, { -ERROR_LB_WITHOUT_TABSTOPS, "ERROR_LB_WITHOUT_TABSTOPS" }, { -ERROR_DESTROY_OBJECT_OF_OTHER_THREAD, "ERROR_DESTROY_OBJECT_OF_OTHER_THREAD" }, { -ERROR_CHILD_WINDOW_MENU, "ERROR_CHILD_WINDOW_MENU" }, { -ERROR_NO_SYSTEM_MENU, "ERROR_NO_SYSTEM_MENU" }, { -ERROR_INVALID_MSGBOX_STYLE, "ERROR_INVALID_MSGBOX_STYLE" }, { -ERROR_INVALID_SPI_VALUE, "ERROR_INVALID_SPI_VALUE" }, { -ERROR_SCREEN_ALREADY_LOCKED, "ERROR_SCREEN_ALREADY_LOCKED" }, { -ERROR_HWNDS_HAVE_DIFF_PARENT, "ERROR_HWNDS_HAVE_DIFF_PARENT" }, { -ERROR_NOT_CHILD_WINDOW, "ERROR_NOT_CHILD_WINDOW" }, { -ERROR_INVALID_GW_COMMAND, "ERROR_INVALID_GW_COMMAND" }, { -ERROR_INVALID_THREAD_ID, "ERROR_INVALID_THREAD_ID" }, { -ERROR_NON_MDICHILD_WINDOW, "ERROR_NON_MDICHILD_WINDOW" }, { -ERROR_POPUP_ALREADY_ACTIVE, "ERROR_POPUP_ALREADY_ACTIVE" }, { -ERROR_NO_SCROLLBARS, "ERROR_NO_SCROLLBARS" }, { -ERROR_INVALID_SCROLLBAR_RANGE, "ERROR_INVALID_SCROLLBAR_RANGE" }, { -ERROR_INVALID_SHOWWIN_COMMAND, "ERROR_INVALID_SHOWWIN_COMMAND" }, #ifdef ERROR_NO_SYSTEM_RESOURCES { -ERROR_NO_SYSTEM_RESOURCES, "ERROR_NO_SYSTEM_RESOURCES" }, #endif #ifdef ERROR_NONPAGED_SYSTEM_RESOURCES { -ERROR_NONPAGED_SYSTEM_RESOURCES, "ERROR_NONPAGED_SYSTEM_RESOURCES" }, #endif #ifdef ERROR_PAGED_SYSTEM_RESOURCES { -ERROR_PAGED_SYSTEM_RESOURCES, "ERROR_PAGED_SYSTEM_RESOURCES" }, #endif #ifdef ERROR_WORKING_SET_QUOTA { -ERROR_WORKING_SET_QUOTA, "ERROR_WORKING_SET_QUOTA" }, #endif #ifdef ERROR_PAGEFILE_QUOTA { -ERROR_PAGEFILE_QUOTA, "ERROR_PAGEFILE_QUOTA" }, #endif #ifdef ERROR_COMMITMENT_LIMIT { -ERROR_COMMITMENT_LIMIT, "ERROR_COMMITMENT_LIMIT" }, #endif #ifdef ERROR_MENU_ITEM_NOT_FOUND { -ERROR_MENU_ITEM_NOT_FOUND, "ERROR_MENU_ITEM_NOT_FOUND" }, #endif #ifdef ERROR_INVALID_KEYBOARD_HANDLE { -ERROR_INVALID_KEYBOARD_HANDLE, "ERROR_INVALID_KEYBOARD_HANDLE" }, #endif #ifdef ERROR_HOOK_TYPE_NOT_ALLOWED { -ERROR_HOOK_TYPE_NOT_ALLOWED, "ERROR_HOOK_TYPE_NOT_ALLOWED" }, #endif #ifdef ERROR_REQUIRES_INTERACTIVE_WINDOWSTATION { -ERROR_REQUIRES_INTERACTIVE_WINDOWSTATION, "ERROR_REQUIRES_INTERACTIVE_WINDOWSTATION" }, #endif #ifdef ERROR_TIMEOUT { -ERROR_TIMEOUT, "ERROR_TIMEOUT" }, #endif { -ERROR_EVENTLOG_FILE_CORRUPT, "ERROR_EVENTLOG_FILE_CORRUPT" }, { -ERROR_EVENTLOG_CANT_START, "ERROR_EVENTLOG_CANT_START" }, { -ERROR_LOG_FILE_FULL, "ERROR_LOG_FILE_FULL" }, { -ERROR_EVENTLOG_FILE_CHANGED, "ERROR_EVENTLOG_FILE_CHANGED" }, { -RPC_S_INVALID_STRING_BINDING, "RPC_S_INVALID_STRING_BINDING" }, { -RPC_S_WRONG_KIND_OF_BINDING, "RPC_S_WRONG_KIND_OF_BINDING" }, { -RPC_S_INVALID_BINDING, "RPC_S_INVALID_BINDING" }, { -RPC_S_PROTSEQ_NOT_SUPPORTED, "RPC_S_PROTSEQ_NOT_SUPPORTED" }, { -RPC_S_INVALID_RPC_PROTSEQ, "RPC_S_INVALID_RPC_PROTSEQ" }, { -RPC_S_INVALID_STRING_UUID, "RPC_S_INVALID_STRING_UUID" }, { -RPC_S_INVALID_ENDPOINT_FORMAT, "RPC_S_INVALID_ENDPOINT_FORMAT" }, { -RPC_S_INVALID_NET_ADDR, "RPC_S_INVALID_NET_ADDR" }, { -RPC_S_NO_ENDPOINT_FOUND, "RPC_S_NO_ENDPOINT_FOUND" }, { -RPC_S_INVALID_TIMEOUT, "RPC_S_INVALID_TIMEOUT" }, { -RPC_S_OBJECT_NOT_FOUND, "RPC_S_OBJECT_NOT_FOUND" }, { -RPC_S_ALREADY_REGISTERED, "RPC_S_ALREADY_REGISTERED" }, { -RPC_S_TYPE_ALREADY_REGISTERED, "RPC_S_TYPE_ALREADY_REGISTERED" }, { -RPC_S_ALREADY_LISTENING, "RPC_S_ALREADY_LISTENING" }, { -RPC_S_NO_PROTSEQS_REGISTERED, "RPC_S_NO_PROTSEQS_REGISTERED" }, { -RPC_S_NOT_LISTENING, "RPC_S_NOT_LISTENING" }, { -RPC_S_UNKNOWN_MGR_TYPE, "RPC_S_UNKNOWN_MGR_TYPE" }, { -RPC_S_UNKNOWN_IF, "RPC_S_UNKNOWN_IF" }, { -RPC_S_NO_BINDINGS, "RPC_S_NO_BINDINGS" }, { -RPC_S_NO_PROTSEQS, "RPC_S_NO_PROTSEQS" }, { -RPC_S_CANT_CREATE_ENDPOINT, "RPC_S_CANT_CREATE_ENDPOINT" }, { -RPC_S_OUT_OF_RESOURCES, "RPC_S_OUT_OF_RESOURCES" }, { -RPC_S_SERVER_UNAVAILABLE, "RPC_S_SERVER_UNAVAILABLE" }, { -RPC_S_SERVER_TOO_BUSY, "RPC_S_SERVER_TOO_BUSY" }, { -RPC_S_INVALID_NETWORK_OPTIONS, "RPC_S_INVALID_NETWORK_OPTIONS" }, { -RPC_S_NO_CALL_ACTIVE, "RPC_S_NO_CALL_ACTIVE" }, { -RPC_S_CALL_FAILED, "RPC_S_CALL_FAILED" }, { -RPC_S_CALL_FAILED_DNE, "RPC_S_CALL_FAILED_DNE" }, { -RPC_S_PROTOCOL_ERROR, "RPC_S_PROTOCOL_ERROR" }, { -RPC_S_UNSUPPORTED_TRANS_SYN, "RPC_S_UNSUPPORTED_TRANS_SYN" }, { -RPC_S_UNSUPPORTED_TYPE, "RPC_S_UNSUPPORTED_TYPE" }, { -RPC_S_INVALID_TAG, "RPC_S_INVALID_TAG" }, { -RPC_S_INVALID_BOUND, "RPC_S_INVALID_BOUND" }, { -RPC_S_NO_ENTRY_NAME, "RPC_S_NO_ENTRY_NAME" }, { -RPC_S_INVALID_NAME_SYNTAX, "RPC_S_INVALID_NAME_SYNTAX" }, { -RPC_S_UNSUPPORTED_NAME_SYNTAX, "RPC_S_UNSUPPORTED_NAME_SYNTAX" }, { -RPC_S_UUID_NO_ADDRESS, "RPC_S_UUID_NO_ADDRESS" }, { -RPC_S_DUPLICATE_ENDPOINT, "RPC_S_DUPLICATE_ENDPOINT" }, { -RPC_S_UNKNOWN_AUTHN_TYPE, "RPC_S_UNKNOWN_AUTHN_TYPE" }, { -RPC_S_MAX_CALLS_TOO_SMALL, "RPC_S_MAX_CALLS_TOO_SMALL" }, { -RPC_S_STRING_TOO_LONG, "RPC_S_STRING_TOO_LONG" }, { -RPC_S_PROTSEQ_NOT_FOUND, "RPC_S_PROTSEQ_NOT_FOUND" }, { -RPC_S_PROCNUM_OUT_OF_RANGE, "RPC_S_PROCNUM_OUT_OF_RANGE" }, { -RPC_S_BINDING_HAS_NO_AUTH, "RPC_S_BINDING_HAS_NO_AUTH" }, { -RPC_S_UNKNOWN_AUTHN_SERVICE, "RPC_S_UNKNOWN_AUTHN_SERVICE" }, { -RPC_S_UNKNOWN_AUTHN_LEVEL, "RPC_S_UNKNOWN_AUTHN_LEVEL" }, { -RPC_S_INVALID_AUTH_IDENTITY, "RPC_S_INVALID_AUTH_IDENTITY" }, { -RPC_S_UNKNOWN_AUTHZ_SERVICE, "RPC_S_UNKNOWN_AUTHZ_SERVICE" }, { -EPT_S_INVALID_ENTRY, "EPT_S_INVALID_ENTRY" }, { -EPT_S_CANT_PERFORM_OP, "EPT_S_CANT_PERFORM_OP" }, { -EPT_S_NOT_REGISTERED, "EPT_S_NOT_REGISTERED" }, { -RPC_S_NOTHING_TO_EXPORT, "RPC_S_NOTHING_TO_EXPORT" }, { -RPC_S_INCOMPLETE_NAME, "RPC_S_INCOMPLETE_NAME" }, { -RPC_S_INVALID_VERS_OPTION, "RPC_S_INVALID_VERS_OPTION" }, { -RPC_S_NO_MORE_MEMBERS, "RPC_S_NO_MORE_MEMBERS" }, { -RPC_S_NOT_ALL_OBJS_UNEXPORTED, "RPC_S_NOT_ALL_OBJS_UNEXPORTED" }, { -RPC_S_INTERFACE_NOT_FOUND, "RPC_S_INTERFACE_NOT_FOUND" }, { -RPC_S_ENTRY_ALREADY_EXISTS, "RPC_S_ENTRY_ALREADY_EXISTS" }, { -RPC_S_ENTRY_NOT_FOUND, "RPC_S_ENTRY_NOT_FOUND" }, { -RPC_S_NAME_SERVICE_UNAVAILABLE, "RPC_S_NAME_SERVICE_UNAVAILABLE" }, { -RPC_S_INVALID_NAF_ID, "RPC_S_INVALID_NAF_ID" }, { -RPC_S_CANNOT_SUPPORT, "RPC_S_CANNOT_SUPPORT" }, { -RPC_S_NO_CONTEXT_AVAILABLE, "RPC_S_NO_CONTEXT_AVAILABLE" }, { -RPC_S_INTERNAL_ERROR, "RPC_S_INTERNAL_ERROR" }, { -RPC_S_ZERO_DIVIDE, "RPC_S_ZERO_DIVIDE" }, { -RPC_S_ADDRESS_ERROR, "RPC_S_ADDRESS_ERROR" }, { -RPC_S_FP_DIV_ZERO, "RPC_S_FP_DIV_ZERO" }, { -RPC_S_FP_UNDERFLOW, "RPC_S_FP_UNDERFLOW" }, { -RPC_S_FP_OVERFLOW, "RPC_S_FP_OVERFLOW" }, { -RPC_X_NO_MORE_ENTRIES, "RPC_X_NO_MORE_ENTRIES" }, { -RPC_X_SS_CHAR_TRANS_OPEN_FAIL, "RPC_X_SS_CHAR_TRANS_OPEN_FAIL" }, { -RPC_X_SS_CHAR_TRANS_SHORT_FILE, "RPC_X_SS_CHAR_TRANS_SHORT_FILE" }, { -RPC_X_SS_IN_NULL_CONTEXT, "RPC_X_SS_IN_NULL_CONTEXT" }, { -RPC_X_SS_CONTEXT_DAMAGED, "RPC_X_SS_CONTEXT_DAMAGED" }, { -RPC_X_SS_HANDLES_MISMATCH, "RPC_X_SS_HANDLES_MISMATCH" }, { -RPC_X_SS_CANNOT_GET_CALL_HANDLE, "RPC_X_SS_CANNOT_GET_CALL_HANDLE" }, { -RPC_X_NULL_REF_POINTER, "RPC_X_NULL_REF_POINTER" }, { -RPC_X_ENUM_VALUE_OUT_OF_RANGE, "RPC_X_ENUM_VALUE_OUT_OF_RANGE" }, { -RPC_X_BYTE_COUNT_TOO_SMALL, "RPC_X_BYTE_COUNT_TOO_SMALL" }, { -RPC_X_BAD_STUB_DATA, "RPC_X_BAD_STUB_DATA" }, { -ERROR_INVALID_USER_BUFFER, "ERROR_INVALID_USER_BUFFER" }, { -ERROR_UNRECOGNIZED_MEDIA, "ERROR_UNRECOGNIZED_MEDIA" }, { -ERROR_NO_TRUST_LSA_SECRET, "ERROR_NO_TRUST_LSA_SECRET" }, { -ERROR_NO_TRUST_SAM_ACCOUNT, "ERROR_NO_TRUST_SAM_ACCOUNT" }, { -ERROR_TRUSTED_DOMAIN_FAILURE, "ERROR_TRUSTED_DOMAIN_FAILURE" }, { -ERROR_TRUSTED_RELATIONSHIP_FAILURE, "ERROR_TRUSTED_RELATIONSHIP_FAILURE" }, { -ERROR_TRUST_FAILURE, "ERROR_TRUST_FAILURE" }, { -RPC_S_CALL_IN_PROGRESS, "RPC_S_CALL_IN_PROGRESS" }, { -ERROR_NETLOGON_NOT_STARTED, "ERROR_NETLOGON_NOT_STARTED" }, { -ERROR_ACCOUNT_EXPIRED, "ERROR_ACCOUNT_EXPIRED" }, { -ERROR_REDIRECTOR_HAS_OPEN_HANDLES, "ERROR_REDIRECTOR_HAS_OPEN_HANDLES" }, { -ERROR_PRINTER_DRIVER_ALREADY_INSTALLED, "ERROR_PRINTER_DRIVER_ALREADY_INSTALLED" }, { -ERROR_UNKNOWN_PORT, "ERROR_UNKNOWN_PORT" }, { -ERROR_UNKNOWN_PRINTER_DRIVER, "ERROR_UNKNOWN_PRINTER_DRIVER" }, { -ERROR_UNKNOWN_PRINTPROCESSOR, "ERROR_UNKNOWN_PRINTPROCESSOR" }, { -ERROR_INVALID_SEPARATOR_FILE, "ERROR_INVALID_SEPARATOR_FILE" }, { -ERROR_INVALID_PRIORITY, "ERROR_INVALID_PRIORITY" }, { -ERROR_INVALID_PRINTER_NAME, "ERROR_INVALID_PRINTER_NAME" }, { -ERROR_PRINTER_ALREADY_EXISTS, "ERROR_PRINTER_ALREADY_EXISTS" }, { -ERROR_INVALID_PRINTER_COMMAND, "ERROR_INVALID_PRINTER_COMMAND" }, { -ERROR_INVALID_DATATYPE, "ERROR_INVALID_DATATYPE" }, { -ERROR_INVALID_ENVIRONMENT, "ERROR_INVALID_ENVIRONMENT" }, { -RPC_S_NO_MORE_BINDINGS, "RPC_S_NO_MORE_BINDINGS" }, { -ERROR_NOLOGON_INTERDOMAIN_TRUST_ACCOUNT, "ERROR_NOLOGON_INTERDOMAIN_TRUST_ACCOUNT" }, { -ERROR_NOLOGON_WORKSTATION_TRUST_ACCOUNT, "ERROR_NOLOGON_WORKSTATION_TRUST_ACCOUNT" }, { -ERROR_NOLOGON_SERVER_TRUST_ACCOUNT, "ERROR_NOLOGON_SERVER_TRUST_ACCOUNT" }, { -ERROR_DOMAIN_TRUST_INCONSISTENT, "ERROR_DOMAIN_TRUST_INCONSISTENT" }, { -ERROR_SERVER_HAS_OPEN_HANDLES, "ERROR_SERVER_HAS_OPEN_HANDLES" }, { -ERROR_RESOURCE_DATA_NOT_FOUND, "ERROR_RESOURCE_DATA_NOT_FOUND" }, { -ERROR_RESOURCE_TYPE_NOT_FOUND, "ERROR_RESOURCE_TYPE_NOT_FOUND" }, { -ERROR_RESOURCE_NAME_NOT_FOUND, "ERROR_RESOURCE_NAME_NOT_FOUND" }, { -ERROR_RESOURCE_LANG_NOT_FOUND, "ERROR_RESOURCE_LANG_NOT_FOUND" }, { -ERROR_NOT_ENOUGH_QUOTA, "ERROR_NOT_ENOUGH_QUOTA" }, { -RPC_S_NO_INTERFACES, "RPC_S_NO_INTERFACES" }, { -RPC_S_CALL_CANCELLED, "RPC_S_CALL_CANCELLED" }, { -RPC_S_BINDING_INCOMPLETE, "RPC_S_BINDING_INCOMPLETE" }, { -RPC_S_COMM_FAILURE, "RPC_S_COMM_FAILURE" }, { -RPC_S_UNSUPPORTED_AUTHN_LEVEL, "RPC_S_UNSUPPORTED_AUTHN_LEVEL" }, { -RPC_S_NO_PRINC_NAME, "RPC_S_NO_PRINC_NAME" }, { -RPC_S_NOT_RPC_ERROR, "RPC_S_NOT_RPC_ERROR" }, { -RPC_S_UUID_LOCAL_ONLY, "RPC_S_UUID_LOCAL_ONLY" }, { -RPC_S_SEC_PKG_ERROR, "RPC_S_SEC_PKG_ERROR" }, { -RPC_S_NOT_CANCELLED, "RPC_S_NOT_CANCELLED" }, { -RPC_X_INVALID_ES_ACTION, "RPC_X_INVALID_ES_ACTION" }, { -RPC_X_WRONG_ES_VERSION, "RPC_X_WRONG_ES_VERSION" }, { -RPC_X_WRONG_STUB_VERSION, "RPC_X_WRONG_STUB_VERSION" }, #ifdef RPC_X_INVALID_PIPE_OBJECT { -RPC_X_INVALID_PIPE_OBJECT, "RPC_X_INVALID_PIPE_OBJECT" }, #endif #ifdef RPC_X_INVALID_PIPE_OPERATION { -RPC_X_INVALID_PIPE_OPERATION, "RPC_X_INVALID_PIPE_OPERATION" }, #endif #ifdef RPC_X_WRONG_PIPE_VERSION { -RPC_X_WRONG_PIPE_VERSION, "RPC_X_WRONG_PIPE_VERSION" }, #endif { -RPC_S_GROUP_MEMBER_NOT_FOUND, "RPC_S_GROUP_MEMBER_NOT_FOUND" }, { -EPT_S_CANT_CREATE, "EPT_S_CANT_CREATE" }, { -RPC_S_INVALID_OBJECT, "RPC_S_INVALID_OBJECT" }, { -ERROR_INVALID_TIME, "ERROR_INVALID_TIME" }, { -ERROR_INVALID_FORM_NAME, "ERROR_INVALID_FORM_NAME" }, { -ERROR_INVALID_FORM_SIZE, "ERROR_INVALID_FORM_SIZE" }, { -ERROR_ALREADY_WAITING, "ERROR_ALREADY_WAITING" }, { -ERROR_PRINTER_DELETED, "ERROR_PRINTER_DELETED" }, { -ERROR_INVALID_PRINTER_STATE, "ERROR_INVALID_PRINTER_STATE" }, { -ERROR_PASSWORD_MUST_CHANGE, "ERROR_PASSWORD_MUST_CHANGE" }, { -ERROR_DOMAIN_CONTROLLER_NOT_FOUND, "ERROR_DOMAIN_CONTROLLER_NOT_FOUND" }, { -ERROR_ACCOUNT_LOCKED_OUT, "ERROR_ACCOUNT_LOCKED_OUT" }, #ifdef OR_INVALID_OXID { -OR_INVALID_OXID, "OR_INVALID_OXID" }, #endif #ifdef OR_INVALID_OID { -OR_INVALID_OID, "OR_INVALID_OID" }, #endif #ifdef OR_INVALID_SET { -OR_INVALID_SET, "OR_INVALID_SET" }, #endif #ifdef RPC_S_SEND_INCOMPLETE { -RPC_S_SEND_INCOMPLETE, "RPC_S_SEND_INCOMPLETE" }, #endif { -ERROR_NO_BROWSER_SERVERS_FOUND, "ERROR_NO_BROWSER_SERVERS_FOUND" }, { -ERROR_INVALID_PIXEL_FORMAT, "ERROR_INVALID_PIXEL_FORMAT" }, { -ERROR_BAD_DRIVER, "ERROR_BAD_DRIVER" }, { -ERROR_INVALID_WINDOW_STYLE, "ERROR_INVALID_WINDOW_STYLE" }, { -ERROR_METAFILE_NOT_SUPPORTED, "ERROR_METAFILE_NOT_SUPPORTED" }, { -ERROR_TRANSFORM_NOT_SUPPORTED, "ERROR_TRANSFORM_NOT_SUPPORTED" }, { -ERROR_CLIPPING_NOT_SUPPORTED, "ERROR_CLIPPING_NOT_SUPPORTED" }, { -ERROR_UNKNOWN_PRINT_MONITOR, "ERROR_UNKNOWN_PRINT_MONITOR" }, { -ERROR_PRINTER_DRIVER_IN_USE, "ERROR_PRINTER_DRIVER_IN_USE" }, { -ERROR_SPOOL_FILE_NOT_FOUND, "ERROR_SPOOL_FILE_NOT_FOUND" }, { -ERROR_SPL_NO_STARTDOC, "ERROR_SPL_NO_STARTDOC" }, { -ERROR_SPL_NO_ADDJOB, "ERROR_SPL_NO_ADDJOB" }, { -ERROR_PRINT_PROCESSOR_ALREADY_INSTALLED, "ERROR_PRINT_PROCESSOR_ALREADY_INSTALLED" }, { -ERROR_PRINT_MONITOR_ALREADY_INSTALLED, "ERROR_PRINT_MONITOR_ALREADY_INSTALLED" }, #ifdef ERROR_INVALID_PRINT_MONITOR { -ERROR_INVALID_PRINT_MONITOR, "ERROR_INVALID_PRINT_MONITOR" }, #endif #ifdef ERROR_PRINT_MONITOR_IN_USE { -ERROR_PRINT_MONITOR_IN_USE, "ERROR_PRINT_MONITOR_IN_USE" }, #endif #ifdef ERROR_PRINTER_HAS_JOBS_QUEUED { -ERROR_PRINTER_HAS_JOBS_QUEUED, "ERROR_PRINTER_HAS_JOBS_QUEUED" }, #endif #ifdef ERROR_SUCCESS_REBOOT_REQUIRED { -ERROR_SUCCESS_REBOOT_REQUIRED, "ERROR_SUCCESS_REBOOT_REQUIRED" }, #endif #ifdef ERROR_SUCCESS_RESTART_REQUIRED { -ERROR_SUCCESS_RESTART_REQUIRED, "ERROR_SUCCESS_RESTART_REQUIRED" }, #endif { -ERROR_WINS_INTERNAL, "ERROR_WINS_INTERNAL" }, { -ERROR_CAN_NOT_DEL_LOCAL_WINS, "ERROR_CAN_NOT_DEL_LOCAL_WINS" }, { -ERROR_STATIC_INIT, "ERROR_STATIC_INIT" }, { -ERROR_INC_BACKUP, "ERROR_INC_BACKUP" }, { -ERROR_FULL_BACKUP, "ERROR_FULL_BACKUP" }, { -ERROR_REC_NON_EXISTENT, "ERROR_REC_NON_EXISTENT" }, { -ERROR_RPL_NOT_ALLOWED, "ERROR_RPL_NOT_ALLOWED" }, /* Socket error messages. Where a Unix-style error name is defined in errno.h we map the WSAEnnn to that in network.c otherwise we map them here. The idea is to allow portable code to, for example, call val eWouldBlock = OS.syserror "EWOULDBLOCK" to get an error code for that and then handle the case of functions raising SysErr(_, SOME n) where n = eWouldBlock. */ // { -WSAEINTR, "WSAEINTR" }, // { -WSAEBADF, "WSAEBADF" }, // { -WSAEACCES, "WSAEACCES" }, // { -WSAEFAULT, "WSAEFAULT" }, // { -WSAEINVAL, "WSAEINVAL" }, // { -WSAEMFILE, "WSAEMFILE" }, { -WSAEWOULDBLOCK, "EWOULDBLOCK" }, { -WSAEINPROGRESS, "EINPROGRESS" }, { -WSAEALREADY, "EALREADY" }, { -WSAENOTSOCK, "ENOTSOCK" }, { -WSAEDESTADDRREQ, "EDESTADDRREQ" }, { -WSAEMSGSIZE, "EMSGSIZE" }, { -WSAEPROTOTYPE, "EPROTOTYPE" }, { -WSAENOPROTOOPT, "ENOPROTOOPT" }, { -WSAEPROTONOSUPPORT, "EPROTONOSUPPORT" }, { -WSAESOCKTNOSUPPORT, "ESOCKTNOSUPPORT" }, { -WSAEOPNOTSUPP, "EOPNOTSUPP" }, { -WSAEPFNOSUPPORT, "EPFNOSUPPORT" }, { -WSAEAFNOSUPPORT, "EAFNOSUPPORT" }, { -WSAEADDRINUSE, "EADDRINUSE" }, { -WSAEADDRNOTAVAIL, "EADDRNOTAVAIL" }, { -WSAENETDOWN, "ENETDOWN" }, { -WSAENETUNREACH, "ENETUNREACH" }, { -WSAENETRESET, "ENETRESET" }, { -WSAECONNABORTED, "ECONNABORTED" }, { -WSAECONNRESET, "ECONNRESET" }, { -WSAENOBUFS, "ENOBUFS" }, { -WSAEISCONN, "EISCONN" }, { -WSAENOTCONN, "ENOTCONN" }, { -WSAESHUTDOWN, "ESHUTDOWN" }, { -WSAETOOMANYREFS, "ETOOMANYREFS" }, { -WSAETIMEDOUT, "ETIMEDOUT" }, { -WSAECONNREFUSED, "ECONNREFUSED" }, { -WSAELOOP, "ELOOP" }, // { -WSAENAMETOOLONG, "WSAENAMETOOLONG" }, { -WSAEHOSTDOWN, "EHOSTDOWN" }, { -WSAEHOSTUNREACH, "EHOSTUNREACH" }, // { -WSAENOTEMPTY, "WSAENOTEMPTY" }, { -WSAEPROCLIM, "EPROCLIM" }, { -WSAEUSERS, "EUSERS" }, { -WSAEDQUOT, "EDQUOT" }, { -WSAESTALE, "ESTALE" }, { -WSAEREMOTE, "EREMOTE" }, { -WSAEDISCON, "EDISCON" }, { -WSASYSNOTREADY, "SYSNOTREADY" }, { -WSAVERNOTSUPPORTED, "VERNOTSUPPORTED" }, { -WSANOTINITIALISED, "NOTINITIALISED" }, { -WSAHOST_NOT_FOUND, "HOST_NOT_FOUND" }, { -WSATRY_AGAIN, "TRY_AGAIN" }, { -WSANO_RECOVERY, "NO_RECOVERY" }, { -WSANO_DATA, "NO_DATA" }, #endif }; polyml.5.2.1/libpolyml/exporter.cpp0000644000175000017500000004336611050621143016360 0ustar daviddavid/* Title: exporter.cpp - Export a function as an object or C file Copyright (c) 2006-7 David C.J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifdef WIN32 #include "winconfig.h" #else #include "config.h" #endif #ifdef HAVE_ASSERT_H #include #define ASSERT(x) assert(x) #else #define ASSERT(x) #endif #ifdef HAVE_STRING_H #include #endif #ifdef HAVE_ERRNO_H #include #endif #ifdef HAVE_SYS_PARAM_H #include #endif #ifdef HAVE_STDLIB_H #include #endif #include "exporter.h" #include "save_vec.h" #include "polystring.h" #include "run_time.h" #include "osmem.h" #include "scanaddrs.h" #include "gc.h" #include "machine_dep.h" #include "diagnostics.h" #include "memmgr.h" #include "processes.h" // For IO_SPACING #include "pexport.h" #ifdef HAVE_PECOFF #include "pecoffexport.h" #elif defined(HAVE_ELF_H) #include "elfexport.h" #elif defined(HAVE_MACH_O_RELOC_H) #include "machoexport.h" #endif #if(!defined(MAXPATHLEN) && defined(MAX_PATH)) #define MAXPATHLEN MAX_PATH #endif /* To export the function and everything reachable from it we need to copy all the objects into a new area. We leave tombstones in the original objects by overwriting the length word. That prevents us from copying an object twice and breaks loops. Once we've copied the objects we then have to go back over the memory and turn the tombstones back into length words. */ CopyScan::CopyScan(unsigned h): hierarchy(h) { ASSERT(gMem.neSpaces == 0); // Set the space sizes to a quarter the space currently in use. Making // the spaces too large may be a problem if we're very close to the maximum // address space. Making them too small may increase the cost of linking. defaultImmSize = defaultMutSize = 0; defaultNoOverSize = 4096; // This can be small. unsigned i; for (i = 0; i < gMem.npSpaces; i++) { MemSpace *space = gMem.pSpaces[i]; POLYUNSIGNED size = (space->top-space->bottom)/4; if (space->isMutable) defaultMutSize += size; else defaultImmSize += size; } for (i = 0; i < gMem.nlSpaces; i++) { LocalMemSpace *space = gMem.lSpaces[i]; POLYUNSIGNED size = (space->top-space->pointer)/4; if (space->isMutable) defaultMutSize += size; else defaultImmSize += size; } if (defaultMutSize < 1024*1024) defaultMutSize = 1024*1024; if (defaultImmSize < 1024*1024) defaultImmSize = 1024*1024; } CopyScan::~CopyScan() { gMem.DeleteExportSpaces(); } // This function is called for each address in an object // once it has been copied to its new location. We copy first // then scan to update the addresses. POLYUNSIGNED CopyScan::ScanAddressAt(PolyWord *pt) { PolyWord val = *pt; // Ignore integers. if (IS_INT(val) || val == PolyWord::FromUnsigned(0)) return 0; // Ignore pointers to the IO area. They will be relocated // when we write out the memory MemSpace *space = gMem.SpaceForAddress(val.AsAddress()); ASSERT(space != 0); if (space->spaceType == ST_IO) return 0; // We may sometimes get addresses that have already been updated // to point to the new area. e.g. (only?) in the case of constants // that have been updated in ScanConstantsWithinCode. if (space->spaceType == ST_EXPORT) return 0; // If this is at a lower level than the hierarchy we are saving // then leave it untouched. if (space->spaceType == ST_PERMANENT) { PermanentMemSpace *pmSpace = (PermanentMemSpace*)space; if (pmSpace->hierarchy < hierarchy) return 0; } if (val.IsCodePtr()) { // Find the start of the code segment PolyObject *oldObject = ObjCodePtrToPtr(val.AsCodePtr()); // Calculate the byte offset of this value within the code object. POLYUNSIGNED offset = val.AsCodePtr() - (byte*)oldObject; PolyObject *newObject = ScanObjectAddress(oldObject); *pt = PolyWord::FromCodePtr((byte*)newObject + offset); return 0; } ASSERT(OBJ_IS_DATAPTR(val)); // Have we already scanned this? PolyObject *obj = val.AsObjPtr(); if (obj->ContainsForwardingPtr()) { // Update the address to the new value. PolyObject *newAddr = obj->GetForwardingPtr(); *pt = newAddr; return 0; // No need to scan it again. } // No, we need to copy it. ASSERT(space->spaceType == ST_LOCAL || space->spaceType == ST_PERMANENT); POLYUNSIGNED lengthWord = obj->LengthWord(); POLYUNSIGNED words = OBJ_OBJECT_LENGTH(lengthWord); PolyObject *newObj = 0; bool isMutableObj = obj->IsMutable(); bool isNoOverwrite = false; if (isMutableObj) isNoOverwrite = obj->IsNoOverwriteObject(); // Allocate a new address for the object. for (unsigned i = 0; i < gMem.neSpaces; i++) { PermanentMemSpace *space = gMem.eSpaces[i]; if (isMutableObj == space->isMutable && isNoOverwrite == space->noOverwrite) { ASSERT(space->topPointer <= space->top && space->topPointer >= space->bottom); POLYUNSIGNED spaceLeft = space->top - space->topPointer; if (spaceLeft > words) { newObj = (PolyObject*)(space->topPointer+1); space->topPointer += words+1; break; } } } if (newObj == 0) { // Didn't find room in the existing spaces. Create a new space. POLYUNSIGNED spaceWords; if (!isMutableObj) spaceWords = defaultImmSize; else if (isNoOverwrite) spaceWords = defaultNoOverSize; else spaceWords = defaultMutSize; if (spaceWords <= words) spaceWords = words+1; // Make sure there's space for this object. PermanentMemSpace *space = gMem.NewExportSpace(spaceWords, isMutableObj, isNoOverwrite); if (space == 0) { // Unable to allocate this. throw MemoryException(); } newObj = (PolyObject*)(space->topPointer+1); space->topPointer += words+1; ASSERT(space->topPointer <= space->top && space->topPointer >= space->bottom); } newObj->SetLengthWord(lengthWord); // copy length word if (OBJ_IS_STACK_OBJECT(lengthWord)) CopyStackFrame ((StackObject *)obj,(StackObject *)newObj); else memcpy(newObj, obj, words*sizeof(PolyWord)); obj->SetForwardingPtr(newObj); // Put forwarding pointer in old object. if (OBJ_IS_CODE_OBJECT(lengthWord)) { // We don't need to worry about flushing the instruction cache // since we're not going to execute this code here. // We do have to update any relative addresses within the code // to take account of its new position. We have to do that now // even though ScanAddressesInObject will do it again because this // is the only point where we have both the old and the new addresses. machineDependent->ScanConstantsWithinCode(newObj, obj, words, this); } *pt = newObj; // Update it to the newly copied object. return lengthWord; // This new object needs to be scanned. } PolyObject *CopyScan::ScanObjectAddress(PolyObject *base) { PolyWord val = base; // Scan this as an address. POLYUNSIGNED lengthWord = CopyScan::ScanAddressAt(&val); if (lengthWord) ScanAddressesInObject(val.AsObjPtr(), lengthWord); return val.AsObjPtr(); } #define MAX_EXTENSION 4 // The longest extension we may need to add is ".obj" // Convert the forwarding pointers in a region back into length words. // Generally if this object has a forwarding pointer that's // because we've moved it into the export region. We can, // though, get multiple levels of forwarding if there is an object // that has been shifted up by a garbage collection, leaving a forwarding // pointer and then that object has been moved to the export region. // We mustn't turn locally forwarded values back into ordinary objects // because they could contain addresses that are no longer valid. static POLYUNSIGNED GetObjLength(PolyObject *obj) { if (obj->ContainsForwardingPtr()) { PolyObject *forwardedTo = obj->GetForwardingPtr(); POLYUNSIGNED length = GetObjLength(forwardedTo); MemSpace *space = gMem.SpaceForAddress(forwardedTo); if (space->spaceType == ST_EXPORT) obj->SetLengthWord(length); return length; } else return obj->LengthWord(); } static void FixForwarding(PolyWord *pt, POLYUNSIGNED space) { while (space) { pt++; PolyObject *obj = (PolyObject*)pt; POLYUNSIGNED length = OBJ_OBJECT_LENGTH(GetObjLength(obj)); pt += length; space -= length+1; } } class ExportRequest: public MainThreadRequest { public: ExportRequest(Handle root, Exporter *exp): exportRoot(root), exporter(exp) {} virtual void Perform() { exporter->RunExport(exportRoot->WordP()); } Handle exportRoot; Exporter *exporter; }; static void exporter(TaskData *taskData, Handle args, const char *extension, Exporter *exports) { char fileNameBuff[MAXPATHLEN+MAX_EXTENSION]; POLYUNSIGNED length = Poly_string_to_C(DEREFHANDLE(args)->Get(0), fileNameBuff, MAXPATHLEN); if (length > MAXPATHLEN) raise_syscall(taskData, "File name too long", ENAMETOOLONG); // Does it already have the extension? If not add it on. if (length < strlen(extension) || strcmp(fileNameBuff + length - strlen(extension), extension) != 0) strcat(fileNameBuff, extension); exports->exportFile = fopen(fileNameBuff, "wb"); if (exports->exportFile == NULL) raise_syscall(taskData, "Cannot open export file", errno); Handle root = taskData->saveVec.push(args->WordP()->Get(1)); // Request a full GC to reduce the size of fix-ups. FullGC(taskData); // Request the main thread to do the export. ExportRequest request(root, exports); processes->MakeRootRequest(taskData, &request); if (exports->errorMessage) raise_fail(taskData, exports->errorMessage); } // This is called by the initial thread to actually do the export. void Exporter::RunExport(PolyObject *rootFunction) { Exporter *exports = this; // Copy the root and everything reachable from it into the temporary area. CopyScan copyScan; PolyObject *copiedRoot = 0; try { copiedRoot = copyScan.ScanObjectAddress(rootFunction); } catch (MemoryException) { // If we ran out of memory. copiedRoot = 0; } // Fix the forwarding pointers. unsigned j; for (j = 0; j < gMem.nlSpaces; j++) { LocalMemSpace *space = gMem.lSpaces[j]; // Local areas only have objects from the allocation pointer to the top. FixForwarding(space->pointer, space->top - space->pointer); } for (j = 0; j < gMem.npSpaces; j++) { MemSpace *space = gMem.pSpaces[j]; // Permanent areas are filled with objects from the bottom. FixForwarding(space->bottom, space->top - space->bottom); } // Reraise the exception after cleaning up the forwarding pointers. if (copiedRoot == 0) { exports->errorMessage = "Insufficient Memory"; return; } // Copy the areas into the export object. exports->memTable = new memoryTableEntry[gMem.neSpaces+1]; exports->ioMemEntry = 0; // The IO vector. Should we actually create a blank area? This needs to be // writable by the RTS but not normally by ML. MemSpace *ioSpace = gMem.IoSpace(); exports->memTable[0].mtAddr = ioSpace->bottom; exports->memTable[0].mtLength = (char*)ioSpace->top - (char*)ioSpace->bottom; exports->memTable[0].mtFlags = 0; exports->memTable[0].mtIndex = 0; for (unsigned i = 0; i < gMem.neSpaces; i++) { memoryTableEntry *entry = &exports->memTable[i+1]; PermanentMemSpace *space = gMem.eSpaces[i]; entry->mtAddr = space->bottom; entry->mtLength = (space->topPointer-space->bottom)*sizeof(PolyWord); entry->mtIndex = i+1; if (space->isMutable) { entry->mtFlags = MTF_WRITEABLE; if (space->noOverwrite) entry->mtFlags |= MTF_NO_OVERWRITE; } else entry->mtFlags = MTF_EXECUTABLE; } exports->memTableEntries = gMem.neSpaces+1; exports->ioSpacing = IO_SPACING; exports->rootFunction = copiedRoot; exports->exportStore(); return; } // Functions called via the RTS call. Handle exportNative(TaskData *taskData, Handle args) { #ifdef HAVE_PECOFF // Windows including Cygwin #ifdef WINDOWS_PC const char *extension = ".obj"; // Windows #else const char *extension = ".o"; // Cygwin #endif PECOFFExport exports; exporter(taskData, args, extension, &exports); #elif defined(HAVE_ELF_H) // Most Unix including Linux, FreeBSD and Solaris. const char *extension = ".o"; ELFExport exports; exporter(taskData, args, extension, &exports); #elif defined(HAVE_MACH_O_RELOC_H) // Mac OS-X const char *extension = ".o"; MachoExport exports; exporter(taskData, args, extension, &exports); #else raise_exception_string (taskData, EXC_Fail, "Native export not available for this platform"); #endif return taskData->saveVec.push(TAGGED(0)); } Handle exportPortable(TaskData *taskData, Handle args) { PExport exports; exporter(taskData, args, ".txt", &exports); return taskData->saveVec.push(TAGGED(0)); } // Helper functions for exporting. We need to produce relocation information // and this code is common to every method. Exporter::Exporter(): exportFile(NULL), errorMessage(0), memTable(0) { } Exporter::~Exporter() { delete[](memTable); if (exportFile) fclose(exportFile); } void Exporter::relocateValue(PolyWord *pt) { PolyWord q = *pt; if (IS_INT(q) || q == PolyWord::FromUnsigned(0)) {} else createRelocation(pt); } // Check through the areas to see where the address is. It must be // in one of them. unsigned Exporter::findArea(void *p) { for (unsigned i = 0; i < memTableEntries; i++) { if (p > memTable[i].mtAddr && p <= (char*)memTable[i].mtAddr + memTable[i].mtLength) return i; } { ASSERT(0); } return 0; } void Exporter::relocateObject(PolyObject *p) { if (p->IsByteObject()) { } else if (p->IsCodeObject()) { POLYUNSIGNED constCount; PolyWord *cp; ASSERT(! p->IsMutable() ); p->GetConstSegmentForCode(cp, constCount); /* Now the constants. */ for (POLYUNSIGNED i = 0; i < constCount; i++) relocateValue(&(cp[i])); } else if (p->IsStackObject()) { StackObject *s = (StackObject*)p; POLYUNSIGNED length = p->Length(); ASSERT(! p->IsMutable()); // Should have been frozen /* First the standard registers, space, pc, sp, hr. */ // pc may be TAGGED(0) indicating a retry. PolyWord pc = PolyWord::FromCodePtr(s->p_pc); if (pc != TAGGED(0)) s->p_pc = createRelocation(pc, &s->p_pc).AsCodePtr(); PolyWord *stackPtr = s->p_sp; // Save this before we change it. s->p_sp = createRelocation(PolyWord::FromStackAddr(s->p_sp), &s->p_sp).AsStackAddr(); s->p_hr = createRelocation(PolyWord::FromStackAddr(s->p_hr), &s->p_hr).AsStackAddr(); /* Checked registers. */ PolyWord *stackStart = (PolyWord*)p; PolyWord *stackEnd = stackStart+length; for (POLYUNSIGNED i = 0; i < s->p_nreg; i++) { PolyWord r = s->p_reg[i]; if (r.AsStackAddr() >= stackStart && r.AsStackAddr() < stackEnd) createRelocation(&s->p_reg[i]); /* It seems we can have zeros in the registers, at least on the i386. */ else if (r == PolyWord::FromUnsigned(0)) {} else relocateValue(&(s->p_reg[i])); } /* Now the values on the stack. */ for (PolyWord *q = stackPtr; q < stackEnd; q++) { /* A stack may contain a value which is an offset. */ if ((*q).AsStackAddr() >= stackStart && (*q).AsStackAddr() < stackEnd) createRelocation(q); else relocateValue(q); } } else /* Ordinary objects, essentially tuples. */ { POLYUNSIGNED length = p->Length(); for (POLYUNSIGNED i = 0; i < length; i++) relocateValue(p->Offset(i)); } } ExportStringTable::ExportStringTable(): strings(0), stringSize(0), stringAvailable(0) { } ExportStringTable::~ExportStringTable() { free(strings); } // Add a string to the string table, growing it if necessary. unsigned long ExportStringTable::makeEntry(const char *str) { int len = strlen(str); unsigned long entry = stringSize; if (stringSize + len + 1 > stringAvailable) { stringAvailable = stringAvailable+stringAvailable/2; if (stringAvailable < stringSize + len + 1) stringAvailable = stringSize + len + 1 + 500; strings = (char*)realloc(strings, stringAvailable); if (strings == 0) throw MemoryException(); } strcpy(strings + stringSize, str); stringSize += len + 1; return entry; } polyml.5.2.1/libpolyml/exporter.h0000644000175000017500000000547510772160234016035 0ustar daviddavid/* Title: exporter.h - Export a function as an object or C file Copyright (c) 2006 David C.J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef EXPORTER_H_INCLUDED #define EXPORTER_H_INCLUDED #include "globals.h" // For PolyWord #include "polyexports.h" // For struct _memTableEntry #ifdef HAVE_STDIO_H #include // For FILE #endif class SaveVecEntry; typedef SaveVecEntry *Handle; class TaskData; extern Handle exportNative(TaskData *mdTaskData, Handle args); extern Handle exportPortable(TaskData *mdTaskData, Handle args); // This is the base class for the exporters for the various object-code formats. class Exporter { public: Exporter(); virtual ~Exporter(); virtual void exportStore(void) = 0; // Called by the root thread to do the work. void RunExport(PolyObject *rootFunction); protected: virtual PolyWord createRelocation(PolyWord p, void *relocAddr) = 0; void relocateValue(PolyWord *pt); void relocateObject(PolyObject *p); void createRelocation(PolyWord *pt) { *pt = createRelocation(*pt, pt); } unsigned findArea(void *p); // Find index of area that address is in. public: FILE *exportFile; const char *errorMessage; protected: struct _memTableEntry *memTable; unsigned memTableEntries; unsigned ioMemEntry; // The index corresponding to the IO area. unsigned ioSpacing; PolyObject *rootFunction; // Address of the root function. }; // The object-code exporters all use a similar string table format // consisting of null-terminated C-strings. class ExportStringTable { public: ExportStringTable(); ~ExportStringTable(); unsigned long makeEntry(const char *str); char *strings; unsigned long stringSize, stringAvailable; }; #include "scanaddrs.h" class CopyScan: public ScanAddress { public: CopyScan(unsigned h=0); ~CopyScan(); protected: virtual POLYUNSIGNED ScanAddressAt(PolyWord *pt); public: virtual PolyObject *ScanObjectAddress(PolyObject *base); // Default sizes of the segments. POLYUNSIGNED defaultImmSize, defaultMutSize, defaultNoOverSize; unsigned hierarchy; }; #endif polyml.5.2.1/libpolyml/foreign.cpp0000644000175000017500000020254110772160234016142 0ustar daviddavid/* Title: Foreign function interface Author: Nick Chapman Copyright (c) 2000-7 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifdef WIN32 #include "winconfig.h" #else #include "config.h" #endif #if (defined(WIN32) || (defined(HAVE_DLOPEN))) // Then we can use the foreign function interface. #ifdef HAVE_STDIO_H #include #endif #ifdef HAVE_STDLIB_H #include #endif #if HAVE_ALLOCA_H #include #endif #ifdef HAVE_STRING_H #include #endif #ifdef HAVE_UNISTD_H #include /* sleep */ #endif #ifdef HAVE_DLFCN_H #include #else // Earlier versions of Mac OS X had dlopen but no /usr/include/dlfcn.h extern "C" { void *dlopen(const char *, int); int dlclose(void *); void *dlsym(void *, const char *); const char *dlerror(void); } #endif #if defined(WIN32) #include #include "Console.h" /* For hApplicationInstance. */ #endif #ifdef HAVE_ASSERT_H #include #define ASSERT(x) assert(x) #else #define ASSERT(x) 0 #endif #ifdef HAVE_STDARG_H #include #endif #ifdef HAVE_ERRNO_H #include #endif #ifdef HAVE_MALLOC_H #include #endif #ifdef HAVE_TCHAR_H #include #else typedef char TCHAR; #define _T(x) x #endif #include "globals.h" #include "arb.h" #include "reals.h" #include "foreign.h" #include "diagnostics.h" #include "run_time.h" #include "sys.h" #include "machine_dep.h" #include "mpoly.h" #include "processes.h" #include "scanaddrs.h" #include "polystring.h" #include "save_vec.h" #include "rts_module.h" #include "locking.h" /********************************************************************** * * Stuff... * **********************************************************************/ #define DLOPENFLAGS 1 #define Head(p) (((ML_Cons_Cell*)(p).AsObjPtr())->h) #define Tail(p) (((ML_Cons_Cell*)(p).AsObjPtr())->t) #define UNHANDLE(h) DEREFWORDHANDLE(h) #define SAVE(x) taskData->saveVec.push(x) /********************************************************************** * * Foreign Debug * **********************************************************************/ static int foreign_debug = 0; /* Debug levels: 0 - (no-debug) 1 - (debug) Bug specific tracing. 2 - (info) Important info, e.g. the actual calls to foreign functions 3 - (trace) Trace every c-function 4 - (mes) Any old rubbish */ /* Level 1 can be used to track different bugs when they appear. For example, used it to watch Volatile GC when tracking `Invalid volatile' bug. */ /*** In each of the following macros, ARGS must be a bracketed arg list suitable for printf. This means usage will look like the following: (Note the double open/close brackets.) info(("example message with a parameter <%d>\n",parameter)); ***/ /* Give macro `__FUNCTION__' a defintion if we are not using GCC */ #if ! defined(__GNUC__) && !defined(__FUNCTION__) #define __FUNCTION__ __FILE__ #endif #define mesN(N,ARGS) \ { \ if (foreign_debug>=(N)) \ { printf("%s:%4i (%s) ", __FILE__, __LINE__, __FUNCTION__); \ printf ARGS; \ } \ } #define show(ARGS) mesN(0,ARGS) #define mes1(ARGS) mesN(1,ARGS) #define mes2(ARGS) mesN(2,ARGS) #define mes3(ARGS) mesN(3,ARGS) #define mes4(ARGS) mesN(4,ARGS) #define debug mes1 #define info mes2 #define trace mes3 #define TRACE mes3(("\n")) #define mes mes4 static Handle get_foreign_debug (TaskData *taskData, Handle ignored) { TRACE; return Make_arbitrary_precision(taskData, foreign_debug); } static Handle set_foreign_debug (TaskData *taskData, Handle h) { TRACE; foreign_debug = get_C_long(taskData, DEREFWORD(h)); return h; } #define RAISE_EXN(string) raise_exception_string(taskData, EXC_foreign,(string)) static const char *stringOfCtype(Ctype c) { switch (c) { case Cchar : return "Cchar"; case Cdouble : return "Cdouble"; case Cfloat : return "Cfloat"; case Cint : return "Cint"; case Clong : return "Clong"; case Cpointer : return "Cpointer"; case Cshort : return "Cshort"; case Cstruct : return "Cstruct"; case Cuint : return "Cuint"; default : { static char buf[100]; sprintf(buf,"Bad Ctype <%d>", c); return buf; } } } /********************************************************************** * * Volatiles ... * **********************************************************************/ #define INITIAL_NUM_VOLS 200 /*typedef enum {False,True} Bool;*/ typedef int Bool; /* record size for malloc/free wrappers */ class PolyVolData; typedef struct { PolyVolData* ML_pointer; /* Pointer to ML token object. */ void* C_pointer; /* Pointer to C storage. */ Bool Own_C_space; /* Size if this is the owner of storage. */ } Volatile; static Volatile *vols; static PLock volLock; // Mutex to protect vols. #define FIRST_VOL 0 static POLYUNSIGNED num_vols = 0; static POLYUNSIGNED next_vol = FIRST_VOL; /* This table contains all the callback functions that have been created. Once a callback has been set up it remains in existence for the rest of the session. */ static struct _cbStructEntry { PolyObject *mlFunction; /* The corresponding ML function. */ PolyObject *argType; /* The argument type information. */ unsigned char *cFunction; /* The C function "stub" code. */ } *callbackTable; static unsigned callBackEntries = 0; // Recursive call stack. This is needed to handle callbacks. #define RECURSIVECALLSTACKSIZE 40 // Unlikely to be more than 1 or 2 static PolyObject *recursiveCallStack[RECURSIVECALLSTACKSIZE]; static unsigned recursiveCallStackPtr = 0; /********************************************************************** * * Malloc / Free Wrappers * **********************************************************************/ static POLYUNSIGNED malloc_count = 0; #if 0 #define Vmalloc(where,size) {where = malloc(size); printf("malloc: %p,%d\n",where,size); fflush(stdout); malloc_count++;} #else #define Vmalloc(where,size) {where = malloc(size); malloc_count++;} #endif #define Vfree(p) { free(p); malloc_count--;} /********************************************************************** * * Volatile Allocation * **********************************************************************/ /* With magic numbers */ // This is the ML object that represents a "vol" class PolyVolData: public PolyObject { public: POLYUNSIGNED volmagic; POLYUNSIGNED volindex; }; #define VOL_BOX_SIZE (sizeof(PolyVolData)/sizeof(PolyWord)) #define V_INDEX(v) ((v))->volindex #define V_MAGIC(v) ((v))->volmagic #define VOL_MAGIC_NUMBER 65169 #define MakeVolMagic(v) V_MAGIC((v)) = VOL_MAGIC_NUMBER #define IsVolMagic(v) (V_MAGIC((v)) == VOL_MAGIC_NUMBER) #define ML_POINTER(v) (vols[V_INDEX(v)].ML_pointer) #define C_POINTER(v) (vols[V_INDEX(v)].C_pointer) #define OWN_C_SPACE(v) (vols[V_INDEX(v)].Own_C_space) #define UNVOLHANDLE(_x) ((PolyVolData*)DEREFHANDLE(_x)) /* Allocate a new "vol" in the table and in ML space and returns a pointer to the ML "vol". */ static Handle vol_alloc (TaskData *taskData) { PolyVolData* v = (PolyVolData*)alloc(taskData, VOL_BOX_SIZE, F_MUTABLE_BIT|F_BYTE_OBJ); Handle result = SAVE(v); trace(("index=<%lu>\n",next_vol)); if (next_vol >= num_vols) { POLYUNSIGNED new_num_vols = (num_vols==0) ? INITIAL_NUM_VOLS : num_vols*2; info(("<%lu> ---> <%lu>\n", num_vols, new_num_vols)); Volatile *new_vols = (Volatile*)realloc(vols, sizeof(Volatile)*new_num_vols); if (new_vols == NULL) RAISE_EXN("Can't Enlarge Volatile Array"); vols = new_vols; num_vols = new_num_vols; } V_INDEX(v) = next_vol++; MakeVolMagic(v); ML_POINTER(v) = v; C_POINTER(v) = NULL; OWN_C_SPACE(v) = /*False*/0; return result; } /* Allocate a new "vol" in the table which points to a C object of size "size". */ static Handle vol_alloc_with_c_space (TaskData *taskData, POLYUNSIGNED size) { PLocker plocker(&volLock); Handle res = vol_alloc(taskData); trace(("size= %lu\n",size)); Vmalloc( C_POINTER(UNVOLHANDLE(res)), size ); OWN_C_SPACE(UNVOLHANDLE(res)) = /*True*/size; return res; } /********************************************************************** * * Volatile Dereferencing --- A safe version of C_POINTER * **********************************************************************/ /* Returns the C-pointer component corresponding to the "vol" argument. */ static void* DEREFVOL (TaskData *taskData, PolyWord v) { TRACE; { PLocker plocker(&volLock); PolyVolData *vol = (PolyVolData*)v.AsObjPtr(); POLYUNSIGNED index = V_INDEX(vol); trace(("<%lu>\n",index)); if (!(IsVolMagic(vol))) { info (("Invalid volatile -- bad magic number, index=<%lu>\n", index)); RAISE_EXN("Bad volatile magic number"); } if (index < num_vols) { if (vols[index].ML_pointer == v.AsObjPtr()) { /* everything is okay */ return vols[index].C_pointer; } else { info(("Invalid volatile -- backpointer is wrong <%lu>: <%p> != <%p>\n", index, vol, (void *)vols[index].ML_pointer)); } } else { info(("Invalid volatile -- no such vol index <%lu>\n", index)); } RAISE_EXN("Invalid volatile"); /*NOTREACHED*/ return 0; }} /********************************************************************** * * Volatile Sanity Checking (debug only) * **********************************************************************/ #if 0 static void sanity_check_vols(void) { TRACE; { POLYUNSIGNED v, v2; for (v=FIRST_VOL; v < next_vol; v++) { if (vols[v].ML_pointer == NULL) { trace(("vol <%lu> has nulled ML_pointer\n",v)); } else { v2 = V_INDEX(vols[v].ML_pointer); if ( v2 != v ) { info(("vol <%d> has been corrupted to <%d>\n",v,v2)); } } } }} #endif /********************************************************************** * * C Programming Primitives * **********************************************************************/ /* This is roughly equivalent to calling malloc via the FFI, except that the vol it returns refers to the newly allocated store. Typically we need a pointer to the store so we need to call address(alloc s). */ static Handle allocate (TaskData *taskData, Handle h) { TRACE; { POLYUNSIGNED size = get_C_ulong(taskData, DEREFWORD(h)); /* bytes */ Handle space = vol_alloc_with_c_space(taskData, size); return space; }} /* Constructs a one-word C object whose value is the C-pointer of the argument. */ static Handle address (TaskData *taskData, Handle h) { TRACE; { Handle res = vol_alloc_with_c_space(taskData, sizeof(void*)); void *addr = DEREFVOL(taskData, UNVOLHANDLE(h)); PLocker plocker(&volLock); *(void**)C_POINTER(UNVOLHANDLE(res)) = addr; return res; }} /* Returns a vol containing the value at the address given in its argument. */ static Handle deref (TaskData *taskData, Handle h) { TRACE; { void *addr = DEREFVOL(taskData, UNVOLHANDLE(h)); PLocker plocker(&volLock); Handle res = vol_alloc(taskData); C_POINTER(UNVOLHANDLE(res))= *(void**)addr; return res; }} /****** * offset is intended for accessing structure components. * pointer_add can be written in terms offset,address & deref: * pointer_add p n == address (offset (deref p) n) ******/ /* This seems odd to me (DCJM) but it makes sense when you realise that a pointer is a vol whose C-pointer value contains the address of the vol containing the storage. There's always one more level of indirection than you think. DCJM 12/4/04. */ static Handle offset (TaskData *taskData, Handle h) { TRACE; { PolyWord structure = UNHANDLE(h)->Get(0); char *addr = (char*)DEREFVOL(taskData, structure); PLocker plocker(&volLock); Handle res = vol_alloc(taskData); int num_bytes = get_C_long(taskData, DEREFWORDHANDLE(h)->Get(1)); C_POINTER(UNVOLHANDLE(res)) = addr + num_bytes; return res; }} static Handle assign (TaskData *taskData, Handle h) { TRACE; { PolyVolData *left = (PolyVolData *)(UNHANDLE(h)->Get(0).AsObjPtr()); PolyVolData *right = (PolyVolData *)(UNHANDLE(h)->Get(1).AsObjPtr()); POLYSIGNED size = get_C_long(taskData, DEREFWORDHANDLE(h)->Get(2)); /* bytes */ void *source = DEREFVOL(taskData, right); PLocker plocker(&volLock); void *dest = C_POINTER(left); memcpy(dest, source, size); return h; /* to be ignored */ }} static Handle c_sizeof (TaskData *taskData, Handle h) { TRACE; { PolyWord v = UNHANDLE(h); if (!(IS_INT(v))) { int size = get_C_long(taskData, v.AsObjPtr()->Get(0)); trace(("Cstruct, size <%d>\n", size)); return Make_arbitrary_precision(taskData, size); } else { Ctype ctype = (Ctype)UNTAGGED(v); trace(("<%s>\n", stringOfCtype(ctype))); switch (ctype) { case Cchar : return Make_arbitrary_precision(taskData, sizeof(char)); case Cdouble : return Make_arbitrary_precision(taskData, sizeof(double)); case Cfloat : return Make_arbitrary_precision(taskData, sizeof(float)); case Cint : return Make_arbitrary_precision(taskData, sizeof(int)); case Clong : return Make_arbitrary_precision(taskData, sizeof(long)); case Cpointer : return Make_arbitrary_precision(taskData, sizeof(void*)); case Cshort : return Make_arbitrary_precision(taskData, sizeof(short)); case Cuint : return Make_arbitrary_precision(taskData, sizeof(unsigned)); default: { char buf[100]; sprintf(buf, "Unknown ctype <%s>", stringOfCtype(ctype)); RAISE_EXN(buf); /*NOTREACHED*/ /* Keep -Wall happy */ return (Handle)0; } } } }} static Handle alignment (TaskData *taskData, Handle h) { TRACE; { PolyWord v = UNHANDLE(h); if (!(IS_INT(v))) { RAISE_EXN("alignment of structure"); } else { Ctype ctype = (Ctype)UNTAGGED(v); trace(("<%s>\n", stringOfCtype(ctype))); switch (ctype) { #ifdef __GNUC__ case Cchar : return Make_arbitrary_precision(taskData, __alignof__(char)); case Cdouble : return Make_arbitrary_precision(taskData, __alignof__(double)); case Cfloat : return Make_arbitrary_precision(taskData, __alignof__(float)); case Cint : return Make_arbitrary_precision(taskData, __alignof__(int)); case Clong : return Make_arbitrary_precision(taskData, __alignof__(long)); case Cpointer : return Make_arbitrary_precision(taskData, __alignof__(void*)); case Cshort : return Make_arbitrary_precision(taskData, __alignof__(short)); case Cuint : return Make_arbitrary_precision(taskData, __alignof__(unsigned)); #else /* Take a guess... */ /* Use "sizeof" here. DCJM 19/4/01. */ case Cchar : return Make_arbitrary_precision(taskData, sizeof(char)); case Cdouble : return Make_arbitrary_precision(taskData, sizeof(double)); case Cfloat : return Make_arbitrary_precision(taskData, sizeof(float)); case Cint : return Make_arbitrary_precision(taskData, sizeof(int)); case Clong : return Make_arbitrary_precision(taskData, sizeof(long)); case Cpointer : return Make_arbitrary_precision(taskData, sizeof(void*)); case Cshort : return Make_arbitrary_precision(taskData, sizeof(short)); case Cuint : return Make_arbitrary_precision(taskData, sizeof(unsigned)); #endif default: { char buf[100]; sprintf(buf, "Unknown ctype <%s>", stringOfCtype(ctype)); RAISE_EXN(buf); } } } /*NOTREACHED*/ /* Keep -Wall happy */ return (Handle)0; }} /********************************************************************** * * Volatile Garbage Collection * ********************************************************************** During GC this function is called three times, with "op" taking the values 1 -- MarkRuntimeObject 2 -- ReferenceRuntimeObject 3 -- UpdateRuntimeObject Pass 1 is irrelevant. We call "op" (MarkRuntimeObject) with the second parameter equal to 1. This indicates the ML pointers held by the array "vols" are weak references and so "op" does nothing and returns immediately. During Pass 2, the condition "(vols[from].ML_pointer != NULL)" is always true, so we call "op" (ReferenceRuntimeObject) with the address of each ML pointer cell contained in the array "vols". Any cell that holds a heap pointer that is not marked is overwritten by "op" to be NULL. After the call to "op" we test if the cell has been nulled, if so we deallocate the malloced space pointed to by the corresponding C pointer. Also, because the condition "(vols[from].ML_pointer != NULL)" is true on every iteration of the loop, the counter "to" always keeps in step with the loop counter "from". This prevents us from entering the code guarded by the condition "(from>to)" (intended for pass 3). During the Pass 3, we only call "op" (UpdateRuntimeObject) with the address of those ML pointers that were not nulled on the previous stage. The ML pointers are overwritten by "op" with their new location in the heap. Also, on this pass we compact the array "vols". The "to" counter is only incremented when we encounter an ML pointer that is not NULL, whereas the "from" counter is incremented on every iteration. If "from" > "to" we shift the pair of pointers (ML and C) leftwards in the array from index "from" to index "to" . This requires us to update the index held by the ML heap cell to be "to". Finally we set "next_vol" to be "to", the index of the next volatile to be allocated. Although this occurs on every pass, it only has effect on Pass 3. **********************************************************************/ class Foreign: public RtsModule { public: void GarbageCollect(ScanAddress *process); }; // Declare this. It will be automatically added to the table. static Foreign foreignModule; void Foreign::GarbageCollect(ScanAddress *process) { TRACE; { POLYUNSIGNED to,from; for (from=FIRST_VOL, to=FIRST_VOL; from < next_vol; from++) { mes(("to=<%lu> from=<%lu>\n",to,from)); if (vols[from].ML_pointer != NULL) { PolyObject *p = vols[from].ML_pointer; process->ScanRuntimeAddress(&p, ScanAddress::STRENGTH_WEAK); vols[from].ML_pointer = (PolyVolData*)p; if (vols[from].ML_pointer == NULL) { /* It's no longer reachable. */ if (vols[from].Own_C_space) { mes(("Trashing malloc space of <%lu>\n",from)); {int i; for (i=0; i\n",from)); Vfree(vols[from].C_pointer); } } if (from>to) { trace(("Shifting volatile <%lu> ---> <%lu>\n",from,to)); vols[to] = vols[from]; V_INDEX(vols[to].ML_pointer) = to; } to++; } } next_vol = to; info(("unfreed mallocs=<%lu> next_vol=<%lu>\n", malloc_count, next_vol)); /* Callback table. Added DCJM 12/4/04. We always process these as strong references. For the time being at any rate we treat these as permanent entries so that once a callback is set up it cannot be garbage-collected. */ for (unsigned i = 0; i < callBackEntries; i++) { if (callbackTable[i].mlFunction != NULL) { process->ScanRuntimeAddress (&(callbackTable[i].mlFunction), ScanAddress::STRENGTH_STRONG); process->ScanRuntimeAddress (&(callbackTable[i].argType), ScanAddress::STRENGTH_STRONG); } } // Recursive call stack for (unsigned j = 0; j < recursiveCallStackPtr; j++) process->ScanRuntimeAddress (&(recursiveCallStack[j]), ScanAddress::STRENGTH_STRONG); }} /********************************************************************** * * Load a Dynamic Library. * **********************************************************************/ static Handle load_lib (TaskData *taskData, Handle string) { TCHAR name[500]; Poly_string_to_C(DEREFWORD(string), name, sizeof(name)/sizeof(TCHAR)); info(("<%s>\n", name)); #if defined(WINDOWS_PC) HINSTANCE lib = LoadLibrary(name); if (lib == NULL) { char buf[256]; sprintf(buf, "load_lib <%s> : %lu", name, GetLastError()); RAISE_EXN(buf); } Handle res = vol_alloc_with_c_space(taskData, sizeof(void*)); *(void**)DEREFVOL(taskData, UNHANDLE(res)) = lib; return res; #else /* UNIX version */ void *lib = dlopen(name,DLOPENFLAGS); if (!lib) { char buf[256]; sprintf(buf, "load_lib <%s> : %s", name, dlerror()); RAISE_EXN(buf); } Handle res = vol_alloc_with_c_space(taskData, sizeof(void*)); *(void**)DEREFVOL(taskData, UNHANDLE(res)) = lib; return res; #endif } /********************************************************************** * * Load Symbol from a Dynamic Library * **********************************************************************/ static Handle load_sym (TaskData *taskData, Handle h) { TCHAR name[500]; Poly_string_to_C(DEREFHANDLE(h)->Get(1), name, sizeof(name)/sizeof(TCHAR)); info(("<%s>\n", name)); #if defined(WINDOWS_PC) void *sym = (void*)GetProcAddress( *(HINSTANCE*)DEREFVOL(taskData, DEREFHANDLE(h)->Get(0)), name); if (sym == NULL) { char buf[256]; sprintf(buf, "load_sym <%s> : %lu", name,GetLastError()); RAISE_EXN(buf); } Handle res = vol_alloc_with_c_space(taskData, sizeof(void*)); *(void**)DEREFVOL(taskData, UNHANDLE(res)) = sym; return res; #else /* UNIX version */ void *sym = dlsym( *(void**)DEREFVOL(taskData, DEREFHANDLE(h)->Get(0)), name ); if (!sym) { char buf[256]; sprintf(buf, "load_sym <%s> : %s", name, dlerror()); RAISE_EXN(buf); } Handle res = vol_alloc_with_c_space(taskData, sizeof(void*)); *(void**)DEREFVOL(taskData, UNHANDLE(res)) = sym; return res; #endif } /********************************************************************** * * Call a symbol with a list of conversion/argument pairs * **********************************************************************/ typedef void* (*ftype)(...); #define STRUCT(n) struct {char xyz[n];} #define MAX_STRUCT_SIZE 1024 typedef STRUCT(MAX_STRUCT_SIZE) STRUCT_MAX; static void print_call ( void* a1, void* a2, void* a3, void* a4, void* a5, void* a6, void* a7, void* a8, void* a9, void* a10, void* a11, void* a12, void* a13, void* a14, void* a15, void* b1, void* b2, void* b3, void* b4, void* b5, void* b6, void* b7, void* b8, void* b9, void* b10, void* b11, void* b12, void* b13, void* b14, void* b15 ) { info (("<%p> <%p> <%p> <%p> <%p> <%p> <%p> <%p> <%p> <%p>" "<%p> <%p> <%p> <%p> <%p> <%p> <%p> <%p> <%p> <%p>" "<%p> <%p> <%p> <%p> <%p> <%p> <%p> <%p> <%p> <%p>\n", a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15, b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14,b15)); } /* Macro to call a function and get a particular argument type. Note: We only allocate the result handle once the function has returned. If the C function makes a call back to ML the save vector will change. */ // N.B. This has a potential nasty in Windows. Normal Windows API calls use // "pascal" (callee removes arguments) calling conventions but we're calling the // function with C (caller removes arguments) conventions. The result will be // that the stack is reset twice. // This now has a piece of assembly code to save the stack pointer in esi // which is preserved across calls and then reload it. For this to work // we hope that esi is not used in the process of loading the function // arguments. // The only really satisfactory solution to this would be to compile specific // call and return code depending on the types of the arguments and the result. #ifdef WINDOWS_PC #ifdef __GNUC__ #define CALL_TYPED(TYPE) \ do { \ int space[20];\ space[0] = 0;\ processes->ThreadReleaseMLMemory(taskData);\ TYPE result = ((TYPE(*)(...))fun)(a1,\ a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,b1,b2,b3,b4,b5,b6,\ b7,b8,b9,b10,b11,b12,b13,b14,b15);\ processes->ThreadUseMLMemory(taskData);\ Handle res = vol_alloc_with_c_space(taskData, sizeof(TYPE));\ *(TYPE*)DEREFVOL(taskData, UNHANDLE(res)) = result;\ return res;\ } while (0) #else // Windows C compilers. #define CALL_TYPED(TYPE) \ do { \ int saveEsi;\ processes->ThreadReleaseMLMemory(taskData);\ __asm { mov saveEsi,esi }\ __asm { mov esi,esp }\ TYPE result = ((TYPE(*)(...))fun)(a1,\ a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,b1,b2,b3,b4,b5,b6,\ b7,b8,b9,b10,b11,b12,b13,b14,b15);\ __asm { mov esp,esi }\ __asm { mov esi,saveEsi }\ processes->ThreadUseMLMemory(taskData);\ Handle res = vol_alloc_with_c_space(taskData, sizeof(TYPE));\ *(TYPE*)DEREFVOL(taskData, UNHANDLE(res)) = result;\ return res;\ } while (0) #endif #else #define CALL_TYPED(TYPE) \ do { \ processes->ThreadReleaseMLMemory(taskData);\ TYPE result = ((TYPE(*)(...))fun)(a1,\ a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,b1,b2,b3,b4,b5,b6,\ b7,b8,b9,b10,b11,b12,b13,b14,b15);\ processes->ThreadUseMLMemory(taskData);\ Handle res = vol_alloc_with_c_space(taskData, sizeof(TYPE));\ *(TYPE*)DEREFVOL(taskData, UNHANDLE(res)) = result;\ return res;\ } while (0) #endif /* current version - all platforms */ // TODO: For 64-bit platforms this won't necessarily work. It all depends on the relative // sizes of the various arguments and the size of void *. The only safe way is probably // to get "configure" to give us some idea of the space used on the stack to pass various // arguments. static Handle apply_rec (TaskData *taskData, int iter, ftype fun, PolyWord* conv,PolyWord ret_conv, PolyWord *args, void *a1,void *a2,void *a3,void *a4,void *a5, void *a6,void *a7,void *a8,void *a9,void *a10, void *a11,void *a12,void *a13,void *a14,void *a15, void *b1,void *b2,void *b3,void *b4,void *b5, void *b6,void *b7,void *b8,void *b9,void *b10, void *b11,void *b12,void *b13,void *b14,void *b15) { mes(("iter = <%d> args = " "<%p> <%p> <%p> <%p> <%p> <%p> <%p> <%p> <%p> ,%p>" "<%p> <%p> <%p> <%p> <%p> <%p> <%p> <%p> <%p> ,%p>" "<%p> <%p> <%p> <%p> <%p> <%p> <%p> <%p> <%p> ,%p>\n", iter, a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15, b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14,b15)); if (iter < 0) { mes(("Calling foreign function\n")); print_call(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15, b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14,b15); if (!(IS_INT(ret_conv))) { /* Structs as results. Now that I've removed structs as arguments I'm strongly tempted to forbid structs as results as well. I guess there's more of a case for allowing structs as results because it's not possible to return more than one result any other way. DCJM 14/4/04. */ typedef struct { int x0; } small_struct1; typedef struct { int x0; int x1; } small_struct2; typedef struct { int x0; int x1; int x2; } small_struct3; typedef struct { int x0; int x1; int x2; int x3; } small_struct4; POLYSIGNED size = get_C_long(taskData, ret_conv.AsObjPtr()->Get(0)); info(("Expecting return type Cstruct, size <%lu>\n", size)); /* We have to treat small structures specially, because GCC does. It would be nice to insist that the library we are calling should be compiled with "-fpcc-struct-return" but that's not practical at the moment for the Siemens BDD libraries, which we need to access. Hopefully, these special cases should give us a minor performance boost too. SPF 31/3/1998 */ /* It seems that two-word structures, at least, are implemented using registers in Visual C++ V5 so some of these special cases are needed in the Windows version. There's no harm in treating several other of the cases specially as well. DCJM 8/10/1999 */ if (size == sizeof(small_struct1)) CALL_TYPED(small_struct1); else if (size == sizeof(small_struct2)) CALL_TYPED(small_struct2); else if (size == sizeof(small_struct3)) CALL_TYPED(small_struct3); else if (size == sizeof(small_struct4)) CALL_TYPED(small_struct4); else if (size > (int)sizeof(STRUCT_MAX)) { char buf[100]; sprintf(buf, "Required size of return structure <%lu> is too large", size); raise_exception_string(taskData, EXC_foreign, buf); } else { /* We call the function saying that it will return a STRUCT_MAX. It's OK that the function probably returns something smaller, because space is allocated by the caller, not the callee. Then we have to copy the result into a STRUCT_MAX. Finally, we have to extract the part we're really interested in and copy that into the volatile. Note that (1) We copy the result twice - yeuch. (2) The whole scheme falls over completely if the callee passes the result back in registers rather than using the pre-allocated space. (3) Compiling the callee with -fpcc-struct-return would solve this problem (for GCC) but wouldn't work if the callee needs to call some other code that is compiled use -freg-struct-return. This is currently an issue for the HP version of the makefsm libraries. (4) That's why we treat small structures specially! SPF 31/3/1998 */ Handle res = vol_alloc_with_c_space(taskData, size); STRUCT_MAX temp = ((STRUCT_MAX(*)(...))fun) (a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15, b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14,b15); memcpy(DEREFVOL(taskData, UNHANDLE(res)), &temp, size); mes(("Returning from foreign function\n")); return res; } } else { Ctype ctype = (Ctype)UNTAGGED(ret_conv); info(("Expecting return type <%s>\n", stringOfCtype(ctype))); switch (ctype) { case Cchar: CALL_TYPED(char); case Cdouble: CALL_TYPED(double); case Cfloat: CALL_TYPED(float); case Cint: CALL_TYPED(int); case Clong: CALL_TYPED(long); case Cpointer: CALL_TYPED(void*); case Cshort: CALL_TYPED(short); case Cuint: CALL_TYPED(unsigned); default: { char buf[100]; sprintf(buf, "Unknown return convention <%s>", stringOfCtype(ctype)); raise_exception_string(taskData, EXC_foreign, buf); } } } } else { // iter == 0 void* arg = DEREFVOL(taskData, args[iter]); if (!(IS_INT(conv[iter]))) { /* This code previously created a temporary struct, copied the argument in there and then passed the address of this as the argument. Of the machines and systems I have here the only one to do that is Sparc/Solaris. GCC on i386 (Linux and FreeBSD), GCC on PPC (Mac OS X) and MS VS 6 all pass structs by copying the words and passing them as actual arguments. Because of this uncertainty I've decided to forbid structs as arguments and raise an exception here. DCJM 14/4/04. */ RAISE_EXN("Structs as function arguments are not supported"); } else { Ctype ctype = (Ctype)UNTAGGED(conv[iter]); info(("<%s>\n", stringOfCtype(ctype))); switch (ctype) { case Cchar: return apply_rec(taskData, iter-1, fun, conv, ret_conv, args, (void*)(long)(*(char*)arg), a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,b1,b2,b3,b4,b5,b6, b7,b8,b9,b10,b11,b12,b13,b14); case Cdouble: /* Double is two words -- pass them separately */ #ifdef X86_64 // This won't work on X86_64. Floating point arguments are not passed // on the stack. RAISE_EXN("Floating point arguments are not supported on 64-bit platform"); #endif /* This is a mess!! It all depends on the relative size of double and void * */ return apply_rec(taskData, iter-1, fun, conv, ret_conv, args, (void*)((void**)arg)[0], (void*)((void**)arg)[1] , a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,b1,b2,b3,b4,b5,b6, b7,b8,b9,b10,b11,b12,b13); case Cfloat: #ifdef X86_64 RAISE_EXN("Floating point arguments are not supported on 64-bit platform"); #endif return apply_rec(taskData, iter-1, fun, conv, ret_conv, args, *(void**)arg, a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,b1,b2,b3,b4,b5,b6, b7,b8,b9,b10,b11,b12,b13,b14); case Cint: return apply_rec(taskData, iter-1, fun, conv, ret_conv, args, *(void**)arg, a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,b1,b2,b3,b4,b5,b6, b7,b8,b9,b10,b11,b12,b13,b14); case Clong: return apply_rec(taskData, iter-1, fun, conv, ret_conv, args, (void*)(*(long*)arg), a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,b1,b2,b3,b4,b5,b6, b7,b8,b9,b10,b11,b12,b13,b14); case Cpointer: return apply_rec(taskData, iter-1, fun, conv, ret_conv, args, *(void**)arg, a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,b1,b2,b3,b4,b5,b6, b7,b8,b9,b10,b11,b12,b13,b14); case Cshort: return apply_rec(taskData, iter-1, fun, conv, ret_conv, args, (void*)(long)(*(short*)arg), a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,b1,b2,b3,b4,b5,b6, b7,b8,b9,b10,b11,b12,b13,b14); case Cuint: return apply_rec(taskData, iter-1, fun, conv, ret_conv, args, (void*)(*(unsigned*)arg), a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,b1,b2,b3,b4,b5,b6, b7,b8,b9,b10,b11,b12,b13,b14); default: { char buf[100]; sprintf(buf, "Unknown calling convention <%s>", stringOfCtype(ctype)); raise_exception_string(taskData, EXC_foreign, buf); } } } } /*NOTREACHED*/ /* Keep -Wall happy */ return (Handle)0; } static POLYUNSIGNED length_list (PolyWord p) { TRACE; { return ML_Cons_Cell::IsNull(p) ? 0 : 1 + length_list (Tail(p)); } } static Handle call_sym (TaskData *taskData, Handle symH, Handle argsH, Handle retCtypeH) { TRACE; ftype sym = *(ftype*)DEREFVOL(taskData, symH->Word()); PolyWord arg_list = argsH->Word(); POLYUNSIGNED num_args = length_list(arg_list); PolyWord ret_conv = retCtypeH->Word(); // Initialise the error vars to "no error". If we have multiple worker // threads the previous value will depend on whatever that worker // did last and not necessarily on what this ML thread did. #ifdef HAVE_ERRNO_H errno = 0; #endif #ifdef WINDOWS_PC SetLastError(0); #endif if (num_args > 15) RAISE_EXN("Too many args\n"); PolyWord* arg_tuple = (PolyWord*)alloca(num_args * sizeof(PolyWord)); PolyWord* conv = (PolyWord*)alloca(num_args * sizeof(PolyWord)); // The argument list is a list of pairs. PolyWord p = arg_list; for (POLYUNSIGNED i=0; iGet(0); arg_tuple[i] = Head(p).AsObjPtr()->Get(1); } Handle res = apply_rec (taskData, num_args-1, sym, conv, ret_conv, arg_tuple, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); // Record the last error result. If this is Windows and // GetLastError returned a failure set that otherwise use // the value of errno. #ifdef WINDOWS_PC int err = GetLastError(); if (err != 0) taskData->lastError = -err; else #endif #ifdef HAVE_ERRNO_H taskData->lastError = errno; #endif return res; } /********************************************************************** * * Char Conversion * **********************************************************************/ /* This is backwards compatible with the old code in which toCchar and fromCchar worked on "string" rather than "char". Since single character strings and chars have the same representation there's no need to change this. DCJM 27/6/01. */ static Handle toCchar (TaskData *taskData, Handle h) { char s[2]; Poly_string_to_C(DEREFWORD(h),s,2); mes(("<%c>\n", s[0])); Handle res = vol_alloc_with_c_space(taskData, sizeof(char)); *(char*)DEREFVOL(taskData, UNHANDLE(res)) = s[0]; return res; } static Handle fromCchar (TaskData *taskData, Handle h) { char c = *(char*)DEREFVOL(taskData, UNHANDLE(h)); mes(("<%c>\n", c)); return SAVE(Buffer_to_Poly(taskData, &c,1)); } /********************************************************************** * * Double Conversion * **********************************************************************/ static Handle toCdouble (TaskData *taskData, Handle h) { double d = real_arg(h); mes(("<%f>\n", d)); Handle res = vol_alloc_with_c_space(taskData, sizeof(double)); *(double*)DEREFVOL(taskData, UNHANDLE(res)) = d; return res; } static Handle fromCdouble (TaskData *taskData, Handle h) { double d = *(double*)DEREFVOL(taskData, UNHANDLE(h)); mes(("<%f>\n", d)); return real_result(taskData, d); } /********************************************************************** * * Float Conversion * **********************************************************************/ static Handle toCfloat (TaskData *taskData, Handle h) { float f = (float)real_arg(h); mes(("<%f>\n", f)); Handle res = vol_alloc_with_c_space(taskData, sizeof(float)); *(float*)DEREFVOL(taskData, UNHANDLE(res)) = f; return res; } static Handle fromCfloat (TaskData *taskData, Handle h) { float f = *(float*)DEREFVOL(taskData, UNHANDLE(h)); mes(("<%f>\n", f)); return real_result(taskData, (double)f); } /********************************************************************** * * Int Conversion * **********************************************************************/ static Handle toCint (TaskData *taskData, Handle h) { int i = get_C_long(taskData, UNHANDLE(h)); mes(("value = %d\n", i)); Handle res = vol_alloc_with_c_space(taskData, sizeof(int)); *(int*)DEREFVOL(taskData, UNHANDLE(res)) = i; return res; } static Handle fromCint (TaskData *taskData, Handle h) { int i = *(int*)DEREFVOL(taskData, UNHANDLE(h)); mes(("<%d>\n", i)); return Make_arbitrary_precision(taskData, i); } /********************************************************************** * * Long Conversion * **********************************************************************/ static Handle toClong (TaskData *taskData, Handle h) { long i = get_C_long(taskData, UNHANDLE(h)); mes(("value = %d\n", (int)i)); Handle res = vol_alloc_with_c_space(taskData, sizeof(long)); *(long*)DEREFVOL(taskData, UNHANDLE(res)) = i; return res; } static Handle fromClong (TaskData *taskData, Handle h) { long i = *(long*)DEREFVOL(taskData, UNHANDLE(h)); mes(("<%d>\n", (int)i)); return Make_arbitrary_precision(taskData, i); } /********************************************************************** * * Short Conversion * **********************************************************************/ static Handle toCshort (TaskData *taskData, Handle h) { short i = (short)get_C_long(taskData, UNHANDLE(h)); mes(("<%d>\n", (int)i)); Handle res = vol_alloc_with_c_space(taskData, sizeof(short)); *(short*)DEREFVOL(taskData, UNHANDLE(res)) = i; return res; } static Handle fromCshort (TaskData *taskData, Handle h) { short i = *(short*)DEREFVOL(taskData, UNHANDLE(h)); mes(("<%d>\n", (int)i)); return Make_arbitrary_precision(taskData, i); } /********************************************************************** * * Unsigned int Conversion * **********************************************************************/ static Handle toCuint (TaskData *taskData, Handle h) { unsigned i = get_C_ulong(taskData, UNHANDLE(h)); mes(("value = %d\n", (int)i)); Handle res = vol_alloc_with_c_space(taskData, sizeof(unsigned)); *(unsigned*)DEREFVOL(taskData, UNHANDLE(res)) = i; return res; } static Handle fromCuint (TaskData *taskData, Handle h) { unsigned i = *(unsigned*)DEREFVOL(taskData, UNHANDLE(h)); mes(("<%d>\n", (int)i)); return Make_unsigned(taskData, i); } /********************************************************************** * * String Conversion * **********************************************************************/ #define PSTRING_LENGTH(pstr) \ (IS_INT((pstr)) ? 1 : (pstr)->length) static Handle fillCstring (TaskData *taskData, Handle h) { TRACE; { POLYUNSIGNED size; PolyWord str = DEREFHANDLE(h)->Get(1); PolyVolData* cArg = (PolyVolData*)(DEREFHANDLE(h)->Get(0).AsObjPtr()); if (str.IsTagged()) size = 1; else size = ((PolyStringObject*)str.AsObjPtr())->length; size += 1; // For the terminating zero Poly_string_to_C(str, (char*)DEREFVOL(taskData, cArg), size); PLocker plocker(&volLock); mes(("<%s>\n", (char*)C_POINTER(cArg))); return h; /* to be ignored */ }} static Handle toCstring (TaskData *taskData, Handle h) { TRACE; { POLYUNSIGNED size; { PolyWord str = DEREFWORD(h); if (str.IsTagged()) size = 1; else size = ((PolyStringObject*)str.AsObjPtr())->length; } size += 1; // For the terminating zero /* Allocate c-space for both the string & a pointer to the string, which is owned by the same vol. */ Handle res = vol_alloc_with_c_space(taskData, sizeof(char*)+size); PLocker plocker(&volLock); /* Make the first word of the c-space point to the second word */ *(void**)C_POINTER(UNVOLHANDLE(res)) = 1 + (void**)C_POINTER(UNVOLHANDLE(res)); /* Copy the string into the c-space starting at the second word */ Poly_string_to_C(DEREFWORD(h), (char*)(1 + (void**)C_POINTER(UNVOLHANDLE(res))), size); return res; }} static Handle fromCstring (TaskData *taskData, Handle h) { TRACE; { char* str = *(char**)DEREFVOL(taskData, UNHANDLE(h)); mes(("<%s>\n", str)); return SAVE(C_string_to_Poly(taskData, str)); }} /* Byte vector functions. The representation is the same as a string but the values may include zero bytes. For fromCbytes the length therefore has to be passed as an argument. Added DCJM 29/6/01. */ static Handle toCbytes (TaskData *taskData, Handle h) { TRACE; { POLYUNSIGNED size; { PolyWord str = DEREFWORD(h); if (str.IsTagged()) size = 1; else size = ((PolyStringObject*)str.AsObjPtr())->length; } // No terminating null here unlike strings /* Allocate c-space for both the string & a pointer to the string, which is owned by the same vol. */ Handle res = vol_alloc_with_c_space(taskData, sizeof(char*)+size); PLocker plocker(&volLock); char **p = (char**)C_POINTER(UNVOLHANDLE(res)); /* Make the first word of the c-space point to the second word */ *(char***)p = p + 1; /* Copy the string into the c-space starting at the second word */ if (size == 1) **p = (char)UNTAGGED(DEREFHANDLE(h)); else memcpy(*p, ((PolyStringObject*)h->WordP())->chars, size); return res; }} static Handle fromCbytes (TaskData *taskData, Handle h) { TRACE; { char* str = *(char**)DEREFVOL(taskData, DEREFHANDLE(h)->Get(0)); int size = get_C_long(taskData, DEREFHANDLE(h)->Get(1)); if (str == NULL) return SAVE(EmptyString()); else return SAVE(Buffer_to_Poly(taskData, str, size)); }} /********************************************************************** * * call_sym_and_convert * **********************************************************************/ typedef enum { directedArg_In = 1, directedArg_Out = 2 } DirectedArgs; /* datatype 'a union = Char of string | Double of real | Float of real | Int of int | Long of int | Short of int | String of string | Vol of 'a */ typedef enum { union_Char = 1, union_Double, union_Float, union_Int, union_Long, union_Short, union_String, union_Vol, union_Uint /* 9 */ } UnionTypes; static Handle UNION_MAKE(TaskData *taskData, UnionTypes tag, Handle contents) { Handle res = SAVE(alloc(taskData, 2)); UNHANDLE(res)->Set(1, TAGGED(tag)); DEREFHANDLE(res)->Set(0, UNHANDLE(contents)); return res; } /* datatype 'ctype unionChoice = chooseChar | chooseDouble | chooseFloat | chooseInt | chooseLong | chooseShort | chooseString; | chooseVol of 'ctype */ typedef enum { choice_chooseChar = 1, choice_chooseDouble, choice_chooseFloat, choice_chooseInt, choice_chooseLong, choice_chooseShort, choice_chooseString, choice_chooseVol, /* not used, since boxed value is untagged */ choice_chooseUint /* 9 */ } ChoiceTypes; #define TAG(x) (UNHANDLE(x)->Get(1)) #define CONTENTS(x) (SAVE(UNHANDLE(x)->Get(0))) #define LIST_ISNULL(x) (ML_Cons_Cell::IsNull(UNHANDLE(x))) #define LIST_HEAD(x) (SAVE(Head(DEREFWORD(x)))) #define LIST_TAIL(x) (SAVE(Tail(DEREFWORD(x)))) #define LIST_NULL (SAVE(ListNull)) static Handle LIST_CONS (TaskData *taskData, Handle x,Handle xs) { Handle res = SAVE(alloc(taskData, sizeof(ML_Cons_Cell))); Head(DEREFWORD(res)) = UNHANDLE(x); Tail(DEREFWORD(res)) = DEREFWORD(xs); return res; } #define TUPLE_GET1(x) (SAVE(DEREFHANDLE(x)->Get(0))) #define TUPLE_GET2(x) (SAVE(DEREFHANDLE(x)->Get(1))) #define TUPLE_GET3(x) (SAVE(DEREFHANDLE(x)->Get(2))) static Handle TUPLE_MAKE2 (TaskData *taskData, Handle x,Handle y) { Handle res = SAVE(alloc(taskData, 2)); DEREFHANDLE(res)->Set(0, DEREFWORD(x)); DEREFHANDLE(res)->Set(1, DEREFWORD(y)); return res; } /* For testing... static Handle print_ctype_and_vol (Handle pair) { word* ctype = UNHANDLE(TUPLE_GET1(pair)); Handle vol = TUPLE_GET2(pair); void* thing = DEREFVOL(taskData, UNHANDLE(vol)); switch ((Ctype)UNTAGGED(ctype)) { case Cchar : printf("Cchar <%c>\n", *(char*)thing); break; case Cdouble : printf("Cdouble <%f>\n", *(double*)thing); break; case Cfloat : printf("Cfloat <%f>\n", *(float*)thing); break; case Cint : printf("Cint <%d>\n", *(int*)thing); break; case Clong : printf("Clong <%ld>\n", *(long*)thing); break; case Cpointer : printf("Cpointer <%.3s>...\n", *(char**)thing); break; case Cshort : printf("Cshort <%d>\n", *(short*)thing); break; default : { show(("Must be a Cstruct <%d>\n", get_C_long(taskData, ctype))); }} return pair; } ...*/ static Handle union2vol_and_ctype (TaskData *taskData, Handle u) { Handle contents = CONTENTS(u); switch (UNTAGGED(TAG(u))) { case union_Char: return TUPLE_MAKE2(taskData, SAVE(TAGGED(Cchar)), toCchar(taskData, contents)); case union_Double: return TUPLE_MAKE2(taskData, SAVE(TAGGED(Cdouble)), toCdouble(taskData, contents)); case union_Float: return TUPLE_MAKE2(taskData, SAVE(TAGGED(Cfloat)), toCfloat(taskData, contents)); case union_Int: return TUPLE_MAKE2(taskData, SAVE(TAGGED(Cint)), toCint(taskData, contents)); case union_Long: return TUPLE_MAKE2(taskData, SAVE(TAGGED(Clong)), toClong(taskData, contents)); case union_Short: return TUPLE_MAKE2(taskData, SAVE(TAGGED(Cshort)), toCshort(taskData, contents)); case union_String: return TUPLE_MAKE2(taskData, SAVE(TAGGED(Cpointer)), toCstring(taskData, contents)); case union_Uint: return TUPLE_MAKE2(taskData, SAVE(TAGGED(Cuint)), toCuint(taskData, contents)); case union_Vol: return contents; default: RAISE_EXN ("Unknown union tag"); } /*NOTREACHED*/ return 0; } static Handle choice2ctype (TaskData *taskData, Handle choice) { PolyWord either_tag_or_pointer = DEREFWORDHANDLE(choice); if (IS_INT(either_tag_or_pointer)) { switch (UNTAGGED(either_tag_or_pointer)) { case choice_chooseChar: return SAVE(TAGGED(Cchar)); case choice_chooseDouble: return SAVE(TAGGED(Cdouble)); case choice_chooseFloat: return SAVE(TAGGED(Cfloat)); case choice_chooseInt: return SAVE(TAGGED(Cint)); case choice_chooseLong: return SAVE(TAGGED(Clong)); case choice_chooseShort: return SAVE(TAGGED(Cshort)); case choice_chooseString: return SAVE(TAGGED(Cpointer)); case choice_chooseUint: return SAVE(TAGGED(Cuint)); default: RAISE_EXN ("Unknown choice type"); return 0; } } else /* It's a pointer */ return SAVE(either_tag_or_pointer.AsObjPtr()->Get(0)); } static Handle choice_and_vol2union (TaskData *taskData, Handle pair) { Handle choice = TUPLE_GET1(pair); Handle vol = TUPLE_GET2(pair); PolyWord maybe_tag = DEREFWORDHANDLE(choice); if (IS_INT(maybe_tag)) { switch (UNTAGGED(maybe_tag)) { case choice_chooseChar: return UNION_MAKE(taskData, union_Char, fromCchar(taskData, vol)); case choice_chooseDouble: return UNION_MAKE(taskData, union_Double, fromCdouble(taskData, vol)); case choice_chooseFloat: return UNION_MAKE(taskData, union_Float, fromCfloat(taskData, vol)); case choice_chooseInt: return UNION_MAKE(taskData, union_Int, fromCint(taskData, vol)); case choice_chooseLong: return UNION_MAKE(taskData, union_Long, fromClong(taskData, vol)); case choice_chooseShort: return UNION_MAKE(taskData, union_Short, fromCshort(taskData, vol)); case choice_chooseString: return UNION_MAKE(taskData, union_String, fromCstring(taskData, vol)); case choice_chooseUint: return UNION_MAKE(taskData, union_Uint, fromCuint(taskData, vol)); default: RAISE_EXN ("Unknown choice type"); return 0; } } else /* It's a pointer */ return UNION_MAKE(taskData, union_Vol, vol); } /* DCJM 7/4/04. Based on reading the code, it seems as though the arguments to a function can be either "in" or "out" parameters. "in" parameters are passed as expected from ML to C whereas "out" parameters have to be constructed from the type information supplied and their values returned along with the result. */ static void mkArgs (TaskData *taskData, Handle xs, Handle &args, Handle &rets) { TRACE; if (LIST_ISNULL(xs)) { args = LIST_NULL; rets = LIST_NULL; } else { Handle x = LIST_HEAD(xs); mkArgs(taskData, LIST_TAIL(xs), args, rets); switch (UNTAGGED(TAG(x))) { case directedArg_In: { // IN parameter - We have the type information and the value to pass. // Convert the value into a "vol". Handle vol_and_ctype = union2vol_and_ctype(taskData, CONTENTS(x)); args = LIST_CONS(taskData, vol_and_ctype,args); return; } case directedArg_Out: { // OUT parameter - We have just the type information and have to construct // a "vol" to pass as the actual argument. Handle choice = CONTENTS(x); Handle ctype = choice2ctype(taskData, choice); Handle space = allocate(taskData, c_sizeof(taskData, ctype)); Handle arg = TUPLE_MAKE2(taskData, SAVE(TAGGED(Cpointer)), address(taskData, space)); Handle ret = TUPLE_MAKE2(taskData, choice,space); args = LIST_CONS(taskData, arg,args); rets = LIST_CONS(taskData, ret,rets); return; } default: RAISE_EXN ("Unknown directedArg tag\n"); } } /*NOTREACHED*/ } typedef Handle (*Handle2Handle)(TaskData *taskData, Handle); static Handle map (TaskData *taskData,Handle2Handle f, Handle xs) { return LIST_ISNULL(xs) ? LIST_NULL : LIST_CONS(taskData, f(taskData, LIST_HEAD(xs)), map(taskData, f,LIST_TAIL(xs)) ); } /* DCJM 7/4/04. For reading the code it seems as though call_sym_and_convert takes three arguments: sym, unionArgs and retChoice and returns a pair (x, y) as the result. sym is simply the symbol to call. unionArgs is a list of arguments to the function. An argument can either be an "in" parameter consisting of type info and a value or an "out" parameter in which case only the type info is supplied. retChoice is the type of the result. The result of this function is a pair consisting of the value and a list of the "out" parameters. The reason for using call_sym_and_convert rather than call_sym is that call_sym_and_convert takes the function arguments as a list of a union of the ML values and converts them to the "vols" with the C values as part of the call. This avoids the multiple calls between ML and the RTS that would be needed if each argument was converted separately, something that is needed for call_sym. */ static Handle call_sym_and_convert (TaskData *taskData, Handle triple) { TRACE; Handle sym = TUPLE_GET1(triple); Handle unionArgs = TUPLE_GET2(triple); Handle retChoice = TUPLE_GET3(triple); Handle args, rets; mkArgs(taskData, unionArgs, args, rets); Handle retCtype = choice2ctype(taskData, retChoice); // If call_sym results in a callback the save vector will be reset and // all these handles will be overwritten. We have to save them on a // separate stack. In addition it's essential to keep a reference to // the "rets" otherwise they could be garbage collected away. if (recursiveCallStackPtr+2 >= RECURSIVECALLSTACKSIZE) RAISE_EXN ("Too many recursive calls to callback functions\n"); recursiveCallStack[recursiveCallStackPtr++] = retChoice->WordP(); recursiveCallStack[recursiveCallStackPtr++] = rets->WordP(); /*map(print_ctype_and_vol,args);*/ Handle vol = call_sym(taskData, sym,args,retCtype); // Pop the old values and put them back on the save vector rets = SAVE(recursiveCallStack[--recursiveCallStackPtr]); retChoice = SAVE(recursiveCallStack[--recursiveCallStackPtr]); return TUPLE_MAKE2 (taskData, choice_and_vol2union(taskData, TUPLE_MAKE2(taskData, retChoice,vol)), map(taskData, choice_and_vol2union,rets)); } /* DCJM 7/4/04. This function creates a vol containing a pointer to a function that can be used as a callback. */ /* When calling using the Pascal calling convention the called code has to pop the arguments. */ // TODO: This is actually i386-specific. We should move this into x86_dep.cpp static int computeArgSpace(TaskData *taskData, Handle argTypeList) { PolyWord argPtr = DEREFWORD(argTypeList); int sum = 0; while (! ML_Cons_Cell::IsNull(argPtr)) { ML_Cons_Cell *argP = (ML_Cons_Cell *)argPtr.AsObjPtr(); PolyWord argType = argP->h; if (! IS_INT(argType)) { /* It's a structure. Don't allow it at least at the moment. */ RAISE_EXN ("Structure arguments to callbacks are not supported\n"); } else { Ctype ctype = (Ctype)UNTAGGED(argType); int nSize = 0; /* char and short args are always converted to ints. */ switch (ctype) { case Cchar: case Cshort: case Cint: nSize = sizeof(int); break; case Cdouble: nSize = sizeof(double); break; case Cfloat: nSize = sizeof(float); break; case Clong: nSize = sizeof(long); break; case Cpointer: nSize = sizeof(void*); break; case Cuint: nSize = sizeof(unsigned); break; case Cstruct: break; /* To avoid a warning */ } sum += nSize; argPtr = argP->t; } } return sum; } static Handle createCallbackFunction(TaskData *taskData, Handle triple, bool isPascal, Handle argTypeList) { TRACE; int nArgSpace; if (isPascal) nArgSpace = computeArgSpace(taskData, argTypeList); else nArgSpace = 0; Handle cArgTypeList = TUPLE_GET1(triple); Handle cResultType = TUPLE_GET2(triple); Handle mlFunction = TUPLE_GET3(triple); // Make a new entry in the callback table. struct _cbStructEntry *newTable = (struct _cbStructEntry*)realloc(callbackTable, (callBackEntries+1)*sizeof(struct _cbStructEntry)); if (newTable == 0) RAISE_EXN("Unable to allocate memory for callback table"); callbackTable = newTable; callbackTable[callBackEntries].argType = UNHANDLE(cArgTypeList); callbackTable[callBackEntries].mlFunction = UNHANDLE(mlFunction); callbackTable[callBackEntries].cFunction = machineDependent->BuildCallback(taskData, callBackEntries, cResultType, nArgSpace); if (callbackTable[callBackEntries].cFunction == 0) RAISE_EXN("Callback functions are currently only implemented for the i386"); /* Construct a "vol" containing the pointer to the C function. */ Handle res = vol_alloc_with_c_space(taskData, sizeof(void*)); PLocker plocker(&volLock); *(unsigned char **)C_POINTER(UNVOLHANDLE(res)) = callbackTable[callBackEntries].cFunction; callBackEntries++; return res; } /* Create a callback using C calling conventions. The calling function removes the arguments from the stack. */ static Handle toCfunction (TaskData *taskData, Handle triple) { return createCallbackFunction(taskData, triple, false, TUPLE_GET1(triple)); } /* Create a callback using Pascal/WINAPI/CALLBACK/__stdcall calling conventions. The CALLED function must remove the arguments from the stack before returning. */ static Handle toPascalfunction (TaskData *taskData, Handle triple) { return createCallbackFunction(taskData, triple, true, TUPLE_GET1(triple)); } /* Create the ML argument list from the C arguments. */ static Handle buildArgList(TaskData *taskData, Handle argTypeList, void ** argPtr) { TRACE; { if (LIST_ISNULL(argTypeList)) return argTypeList; /* Handle pointing to NULL. */ else { Handle argType = LIST_HEAD(argTypeList); Handle argValue; if (! IS_INT(DEREFWORD(argType))) { /* It's a structure. This is a mess. GCC apparently passes the address of the structure here whereas MS C passes the structure by value. */ /* I don't think an exception will work here. */ RAISE_EXN ("Structure arguments to callbacks are not supported\n"); } else { Ctype ctype = (Ctype)(UNTAGGED(UNHANDLE(argType))); int nSize = 0; trace(("<%s>\n", stringOfCtype(ctype))); /* Extract the appropriately typed argument and create a vol with the value. This means that the process of extracting the arguments actually involves two steps: this step where we create the vol list and a second step which uses the fromXX to extract the actual ML arguments. */ switch (ctype) { case Cchar: nSize = sizeof(char); break; case Cdouble: nSize = sizeof(double); break; case Cfloat: nSize = sizeof(float); break; case Cint: nSize = sizeof(int); break; case Clong: nSize = sizeof(long); break; case Cpointer: nSize = sizeof(void*); break; case Cshort: nSize = sizeof(short); break; case Cuint: nSize = sizeof(unsigned); break; case Cstruct: break; /* To avoid a warning */ } argValue = vol_alloc_with_c_space(taskData, nSize); machineDependent->GetCallbackArg(argPtr, DEREFVOL(taskData, UNHANDLE(argValue)), nSize); } return LIST_CONS(taskData, argValue, buildArgList(taskData, LIST_TAIL(argTypeList), argPtr)); } } } void *CCallbackFunction(unsigned cbNo, void **args) { // We should get the task data for the thread that is running this code. TaskData *taskData = processes->GetTaskDataForThread(); Handle mark = taskData->saveVec.mark(); processes->ThreadUseMLMemory(taskData); ASSERT(cbNo >= 0 && cbNo < callBackEntries); if (callbackTable[cbNo].mlFunction == NULL) { /* The entry has never been set or more likely it's been GCed away. */ Crash("Attempt to call back to an ML function that no longer exists."); } Handle h = SAVE(callbackTable[cbNo].mlFunction); /* Set up the ML arguments from the C arguments. */ /* We use the argType list to process the function arguments and build up a list of the actual arguments. */ Handle mlArgs = buildArgList(taskData, SAVE(callbackTable[cbNo].argType), args); // Callbacks previously involved forking a new ML process. They are // now handled on the caller's stack. machineDependent->SetCallbackFunction(taskData, h, mlArgs); Handle resultHandle = EnterPolyCode(taskData); processes->ThreadReleaseMLMemory(taskData); PolyWord resultWord = UNHANDLE(resultHandle); taskData->saveVec.reset(mark); /* Return the address of the vol. The stub function then has to extract the appropriate result depending on how it was compiled. */ return DEREFVOL(taskData, resultWord); } /********************************************************************** * * Foreign Dispatch * **********************************************************************/ typedef Handle(* type_hh_fun)(TaskData *taskData, Handle); static type_hh_fun handlers[] = { get_foreign_debug, set_foreign_debug, load_lib, load_sym, call_sym_and_convert, allocate, address, deref, offset, assign, c_sizeof, alignment, toCchar, fromCchar, toCdouble, fromCdouble, toCfloat, fromCfloat, toCint, fromCint, toClong, fromClong, toCshort, fromCshort, fillCstring, toCstring, fromCstring, toCuint, /* Added DCJM 17/5/01. */ fromCuint, /* Added DCJM 17/5/01. */ toCbytes, /* Added DCJM 29/6/01. */ fromCbytes, toCfunction, /* Added DCJM 7/4/04. */ toPascalfunction /* Added DCJM 7/4/04. */ }; #define NUM_HANDLERS ((int)(sizeof(handlers)/sizeof(type_hh_fun))) Handle foreign_dispatch_c (TaskData *taskData, Handle args, Handle fcode_h) { int fcode = get_C_long(taskData, DEREFWORD(fcode_h)); if (fcode < 0 || fcode >= NUM_HANDLERS) { char buf[100]; sprintf(buf, "Unknown foreign dispatch code <%d>", fcode); RAISE_EXN(buf); } mes(("dispatch code = %d\n", fcode)); /* dispatch to desired function */ return (handlers[fcode])(taskData, args); } #else // The foreign function interface isn't available. #include "foreign.h" #include "run_time.h" #include "sys.h" Handle foreign_dispatch_c (TaskData *taskData, Handle args, Handle fcode_h) { raise_exception_string(taskData, EXC_foreign, "The foreign function interface is not available on this platform"); } #endif polyml.5.2.1/libpolyml/foreign.h0000644000175000017500000000266410602661055015612 0ustar daviddavid/* Title: Header for foreign function interface Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef _FOREIGN_H_DEFINED #define _FOREIGN_H_DEFINED 1 class SaveVecEntry; typedef SaveVecEntry *Handle; class TaskData; class ScanAddress; extern Handle foreign_dispatch_c (TaskData *taskData, Handle args, Handle fcode_h); extern void *CCallbackFunction(unsigned cbNo, void **args); // This is needed when compiling a callback. typedef enum { Cchar = 1, Cdouble = 2, Cfloat = 3, Cint = 4, Clong = 5, Cpointer = 6, Cshort = 7, Cstruct = 8, /* should never occur, since boxed value is untagged */ Cuint = 9 } Ctype; #endif polyml.5.2.1/libpolyml/gc.cpp0000644000175000017500000020674711017250127015110 0ustar daviddavid/* Title: Garbage Collector Copyright (c) 2000-8 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifdef WIN32 #include "winconfig.h" #else #include "config.h" #endif #ifdef HAVE_ASSERT_H #include #define ASSERT(x) assert(x) #else #define ASSERT(x) #endif #ifdef HAVE_WINDOWS_H #include // Used in both Windows and Cygwin #endif #ifdef HAVE_UNISTD_H #include // For sysconf #endif #ifdef HAVE_SYS_TYPES_H #include #endif #ifdef HAVE_SYS_SYSCTL_H #include #endif #include "globals.h" #include "run_time.h" #include "machine_dep.h" #include "diagnostics.h" #include "processes.h" #include "timing.h" #include "gc.h" #include "scanaddrs.h" #include "check_objects.h" #include "osmem.h" #include "bitmap.h" #include "rts_module.h" #include "memmgr.h" unsigned gc_phase = 0; // Tells the profiler whether we're in the gc // If the GC converts a weak ref from SOME to NONE it sets this ref. It can be // cleared by the signal handler thread. There's no need for a lock since it // is only set during GC and only cleared when not GCing. bool convertedWeak = false; /* zero the memory - the "standard" way */ #define wzero(start,word_count) do { memset(start, 0, (word_count)*sizeof(POLYUNSIGNED)); } while (0) /* How the garbage collector works. Phase 1: Starting from the roots in the old mutable area, and any pointers kept by the runtime system, we mark all objects that are found within the two GC areas. The GC areas extend from the allocation pointer to the top of the area. Phase 2: Then we scan the immutable object bitmap. When we find a mutable object we try to find space for it in the mutable area, if we find an immutable object we try to find space for it further up the immutable area. We may have to extend the mutable area to make room for objects since we must not commit and leave mutable objects in the immutable area. Then we do the same for the mutable area, copying immutable objects out into the immutable area, and moving mutable objects up. We keep track of the lowest object that could not be moved. The allocation pointers will be reset to the lowest kept objects, and the area below is taken to be free. Phase 3: Then we start from the roots and runtime system objects and look for pointers into the GC areas that point to tombstones. These pointers are changed to point to the new position of the objects. Then we process all the objects in the areas doing the same thing. Further notes: The order of processing the immutable and mutable area has been changed since the above comment was written (by Dave Matthews?). It would be nice to combine phases 2 and 3 - we could traverse the reachable data-structures, starting at the roots, adjusting pointers as we go (rather like copyGC). We would only use the bitmap created in phase 1 to tell us where to find space to move the new objects. The main advantage of this approach is that is likely to be quicker - we only have to traverse the new (small?) data-structure rather than scanning the (large) mutable buffer. The disadvantage is that it would leave part of the heap dirty, and I think parts of the RTS may depend on any unused heap word containing zeroes. I'll have to look at this very closely! Note that this is a different issue from the compiler requiring the area below the allocation area to be zeroed. (Should we fix this?) Here we are talking about the area *above* the allocation pointer, which may contain objects, tombstones and zero words only. A second disadvantage is that the "compress" pass may not give as good compression as currently, because it wouldn't explicitly start at the bottom and work up. In recompense, we would be able to recycle all but the length word of a tombstone, so our actual space usage might improve. SPF 21/10/96 I've now deleted all that carefully optimised code that used to zero the heap - it's now the responsibility of the compiler (and alloc) to ensure that the store is correctly initialised whenever a GC might occur. SPF 22/10/96 The GC is required to "clean" each area of the heap between pointer and top; this area may only contain objects, tombstones and zero words. The GC currently does this for the benefit of OpMutableBlock, but this behaviour is also required for the PrintLocalProfileCounts in run_time.c to avoid core dumps. SPF 23/10/96 Let's try to improve the design of the garbage collector, by doing partial GCs in 5 phases: (1) Mark (2) CopyImmutables (3) FixupImmutable (4) CopyMutables (5) FixupMutables What are the advantages/disadvantages of the new approach? Advantage: We can copy mutables into the holes left by copying-out immutables, which gives better compaction of the mutable area. The inability to do this is currently a problem for some applications because it triggers far too many full GCs. Disadvantage: We have to run the copy and fix-up phases twice. This may be expensive. Can we get the advantage without the disadvantage by only splitting the Copy and Fixup phases when this looks like a win? Note: we have to separate the Mark and Copy phases, as otherwise we won't be able to handle weak pointers. Shame! SPF 17/12/1997 */ /* start <= val < end */ #define INRANGE(val,start,end) ((start) <= (val) && (val) < (end)) /* start <= val <= end */ #define INSOFTRANGE(val,start,end) ((start) <= (val) && (val) <= (end)) /* Code pointers are usually aligned to 2 mod 4 However stack->p_pc is not necessarily aligned, so we have to be careful */ //#define IN_GC_AREA(_pt) (! IS_INT(_pt) && (IN_GC_IAREA((_pt).AsAddress()) || IN_GC_MAREA((_pt).AsAddress()))) inline POLYUNSIGNED BITNO(LocalMemSpace *area, PolyWord *pt) { return pt - area->bottom; } inline PolyWord *BIT_ADDR(LocalMemSpace *area, POLYUNSIGNED bitno) { return area->bottom + bitno; } void CopyStackFrame(StackObject *old_stack, StackObject *new_stack) { /* Moves a stack, updating all references within the stack */ PolyWord *old_base = (PolyWord *)old_stack; PolyWord *new_base = (PolyWord*)new_stack; POLYUNSIGNED old_length = old_stack->Length(); POLYUNSIGNED new_length = new_stack->Length(); PolyWord *old_top = old_base + old_length; CheckObject (old_stack); ASSERT (old_stack->IsStackObject()); ASSERT (new_stack->IsStackObject()); #if 0 /* This doesn't hold if we a copying a "frozen" stack on system start-up */ ASSERT (OBJ_IS_MUTABLE_OBJECT(old_base[-1])); #endif ASSERT (new_stack->IsMutable()); /* Calculate the offset of the new stack from the old. If the frame is being extended objects in the new frame will be further up the stack than in the old one. */ POLYSIGNED offset = new_base - old_base + new_length - old_length; /* Copy the registers, changing any that point into the stack. */ new_stack->p_space = old_stack->p_space; new_stack->p_pc = old_stack->p_pc; new_stack->p_sp = old_stack->p_sp + offset; new_stack->p_hr = old_stack->p_hr + offset; new_stack->p_nreg = old_stack->p_nreg; /* p_nreg contains contains the number of CHECKED registers */ // ASSERT(new_stack->p_nreg == CHECKED_REGS); POLYUNSIGNED i; for (i = 0; i < new_stack->p_nreg; i++) { PolyWord R = old_stack->p_reg[i]; /* if the register points into the old stack, make the new copy point at the same relative offset within the new stack, otherwise make the new copy identical to the old version. */ if (R.IsTagged() || ! INRANGE(R.AsAddress(),old_base,old_top)) new_stack->p_reg[i] = R; else new_stack->p_reg[i] = PolyWord::FromStackAddr(R.AsStackAddr() + offset); } /* Copy unchecked registers. - The next "register" is the number of unchecked registers to copy. Unchecked registers are used for values that might look like addresses, i.e. don't have tag bits, but are not. */ POLYUNSIGNED n = old_stack->p_reg[i].AsUnsigned(); new_stack->p_reg[i] = old_stack->p_reg[i]; i++; ASSERT (n < 100); while (n--) { new_stack->p_reg[i] = old_stack->p_reg[i]; i++; } /* Skip the unused part of the stack. */ i = (PolyWord*)old_stack->p_sp - old_base; ASSERT (i <= old_length); i = old_length - i; PolyWord *old = old_stack->p_sp; PolyWord *newp= new_stack->p_sp; while (i--) { PolyWord old_word = *old++; if (old_word.IsTagged() || ! INRANGE(old_word.AsAddress(),old_base,old_top)) *newp++ = old_word; else *newp++ = PolyWord::FromStackAddr(old_word.AsStackAddr() + offset); } CheckObject (new_stack); } /**************************************************************************/ /* This function finds all the mutable objects in the local mutable area. */ /* These are scanned since they may contain references into the gc area. */ /**************************************************************************/ // Mark these mutables. static void OpMutables(ScanAddress *process) { // Scan the local mutable areas. It won't do anything if this is a full // GC since gen_top == top. for (unsigned i = 0; i < gMem.nlSpaces; i++) { LocalMemSpace *space = gMem.lSpaces[i]; if (space->isMutable) process->ScanAddressesInRegion(space->gen_top, space->top); } // Scan the permanent mutable areas. for (unsigned j = 0; j < gMem.npSpaces; j++) { MemSpace *space = gMem.pSpaces[j]; if (space->isMutable) process->ScanAddressesInRegion(space->bottom, space->top); } } class ProcessMarkPointers: public ScanAddress { public: virtual POLYUNSIGNED ScanAddressAt(PolyWord *pt) { return DoScanAddressAt(pt, false); } virtual void ScanRuntimeAddress(PolyObject **pt, RtsStrength weak); virtual PolyObject *ScanObjectAddress(PolyObject *base); private: POLYUNSIGNED DoScanAddressAt(PolyWord *pt, bool isWeak); virtual void ScanAddressesInObject(PolyObject *base, POLYUNSIGNED lengthWord); // Have to redefine this for some reason. void ScanAddressesInObject(PolyObject *base) { ScanAddressesInObject(base, base->LengthWord()); } }; // Mark all pointers in the heap. POLYUNSIGNED ProcessMarkPointers::DoScanAddressAt(PolyWord *pt, bool isWeak) { PolyWord val = *pt; CheckPointer (val); if (val.IsTagged()) return 0; LocalMemSpace *space = gMem.LocalSpaceForAddress(val.AsAddress()); if (space == 0) return 0; // Ignore it if it points to a permanent area // Ignore it if it's outside the range we're currently collecting. if (! INRANGE(val.AsStackAddr(), space->gen_bottom, space->gen_top)) return 0; // We shouldn't get code addresses since we handle stacks and code // segments separately so if this isn't an integer it must be an object address. POLYUNSIGNED new_bitno = BITNO(space, val.AsStackAddr()); if (space->bitmap.TestBit(new_bitno)) return 0; // Already marked PolyObject *obj = val.AsObjPtr(); POLYUNSIGNED L = obj->LengthWord(); POLYUNSIGNED n = OBJ_OBJECT_LENGTH(L); /* Add up the objects to be moved into the mutable area. */ if (OBJ_IS_MUTABLE_OBJECT(L)) space->m_marked += n + 1; else space->i_marked += n + 1; /* Mark the segment including the length word. */ space->bitmap.SetBits(new_bitno - 1, n + 1); if (isWeak) // This is a SOME within a weak reference. return 0; if (OBJ_IS_BYTE_OBJECT(L)) return 0; // We've done as much as we need else if (OBJ_IS_CODE_OBJECT(L) || OBJ_IS_STACK_OBJECT(L) || OBJ_IS_WEAKREF_OBJECT(L)) { // Have to handle these specially. (void)ScanAddressesInObject(obj, L); return 0; // Already done it. } else return L; } // The initial entry to process the roots. Also used when processing the addresses // in objects that can't be handled by ScanAddressAt. PolyObject *ProcessMarkPointers::ScanObjectAddress(PolyObject *obj) { PolyWord val = obj; LocalMemSpace *space = gMem.LocalSpaceForAddress(val.AsAddress()); if (space == 0) return obj; // Ignore it if it points to a permanent area // Ignore it if it's outside the range we're currently collecting. if (! INRANGE(val.AsStackAddr(), space->gen_bottom, space->gen_top)) return obj; ASSERT(obj->ContainsNormalLengthWord()); CheckObject (obj); POLYUNSIGNED bitno = BITNO(space, val.AsStackAddr()); if (space->bitmap.TestBit(bitno)) return obj; /* Already marked */ POLYUNSIGNED L = obj->LengthWord(); ASSERT (OBJ_IS_LENGTH(L)); POLYUNSIGNED n = OBJ_OBJECT_LENGTH(L); ASSERT (n != 0); /* Mark the segment including the length word. */ space->bitmap.SetBits (bitno - 1, n + 1); /* Add up the objects to be moved into the mutable area. */ if (OBJ_IS_MUTABLE_OBJECT(L)) space->m_marked += n + 1; else space->i_marked += n + 1; // Process the addresses in this object. We could short-circuit things // for word objects by calling ScanAddressesAt directly. ScanAddressesInObject(obj); return obj; } // These functions are only called with pointers held by the runtime system. // Weak references can occur in the runtime system, eg. streams and windows. // Weak references are not marked and so unreferenced streams and windows // can be detected and closed. void ProcessMarkPointers::ScanRuntimeAddress(PolyObject **pt, RtsStrength weak) { PolyObject *val = *pt; CheckPointer (val); if (weak == STRENGTH_WEAK) return; LocalMemSpace *space = gMem.LocalSpaceForAddress(val); if (space != 0) { PolyWord w = val; if (INRANGE(w.AsStackAddr(), space->gen_bottom, space->gen_top)) { POLYUNSIGNED lengthWord = ScanAddressAt(&w); if (lengthWord) ScanAddressesInObject(val, lengthWord); *pt = w.AsObjPtr(); } } } // This is called both for objects in the local heap and also for mutables // in the permanent area and, for partial GCs, for mutables in other areas. void ProcessMarkPointers::ScanAddressesInObject(PolyObject *base, POLYUNSIGNED L) { if (OBJ_IS_WEAKREF_OBJECT(L)) { ASSERT(OBJ_IS_MUTABLE_OBJECT(L)); // Should be a mutable. ASSERT(OBJ_IS_WORD_OBJECT(L)); // Should be a plain object. // We need to mark the "SOME" values in this object but we don't mark // the references contained within the "SOME". POLYUNSIGNED n = OBJ_OBJECT_LENGTH(L); PolyWord *baseAddr = (PolyWord*)base; for (POLYUNSIGNED i = 0; i < n; i++) DoScanAddressAt(baseAddr+i, true); // Add this to the limits for the containing area. MemSpace *space = gMem.SpaceForAddress(baseAddr); PolyWord *startAddr = baseAddr-1; // Must point AT length word. PolyWord *endObject = baseAddr + n; if (startAddr < space->lowestWeak) space->lowestWeak = startAddr; if (endObject > space->highestWeak) space->highestWeak = endObject; } else ScanAddress::ScanAddressesInObject(base, L); } // Check for weak references that are no longer referenced. class CheckWeakRef: public ScanAddress { public: void ScanAreas(void); private: virtual void ScanRuntimeAddress(PolyObject **pt, RtsStrength weak); // This has to be defined since it's virtual. virtual PolyObject *ScanObjectAddress(PolyObject *base) { return base; } virtual void ScanAddressesInObject(PolyObject *obj, POLYUNSIGNED lengthWord); }; // This deals with weak references within the run-time system. void CheckWeakRef::ScanRuntimeAddress(PolyObject **pt, RtsStrength weak) { /* If the object has not been marked and this is only a weak reference */ /* then the pointer is set to zero. This allows streams or windows */ /* to be closed if there is no other reference to them. */ PolyObject *val = *pt; PolyWord w = val; CheckPointer (val); if (weak == STRENGTH_STRONG) return; LocalMemSpace *space = gMem.LocalSpaceForAddress(w.AsStackAddr()); if (space == 0) return; // Not in local area if (! INRANGE(w.AsStackAddr(), space->gen_bottom, space->gen_top)) return; // Not in area we're currently collecting. // If it hasn't been marked set it to zero. if (! space->bitmap.TestBit(BITNO(space, w.AsStackAddr()))) *pt = 0; } // Deal with weak objects void CheckWeakRef::ScanAddressesInObject(PolyObject *obj, POLYUNSIGNED L) { if (! OBJ_IS_WEAKREF_OBJECT(L)) return; ASSERT(OBJ_IS_MUTABLE_OBJECT(L)); // Should be a mutable. ASSERT(OBJ_IS_WORD_OBJECT(L)); // Should be a plain object. // See if any of the SOME objects contain unreferenced refs. POLYUNSIGNED length = OBJ_OBJECT_LENGTH(L); PolyWord *baseAddr = (PolyWord*)obj; for (POLYUNSIGNED i = 0; i < length; i++) { PolyWord someAddr = baseAddr[i]; if (someAddr.IsDataPtr()) { LocalMemSpace *someSpace = gMem.LocalSpaceForAddress(someAddr.AsAddress()); if (someSpace != 0 && INRANGE(someAddr.AsStackAddr(), someSpace->gen_bottom, someSpace->gen_top)) { PolyObject *someObj = someAddr.AsObjPtr(); // If this is a weak object the SOME value may refer to an unreferenced // ref. If so we have to set this entry to NONE. For safety we also // set the contents of the SOME to TAGGED(0). ASSERT(someObj->Length() == 1 && someObj->IsWordObject()); // Should be a SOME node. PolyWord refAddress = someObj->Get(0); LocalMemSpace *space = gMem.LocalSpaceForAddress(refAddress.AsAddress()); if (space != 0 && INRANGE(refAddress.AsStackAddr(), space->gen_bottom, space->gen_top)) // If the ref is permanent it's always there. { POLYUNSIGNED new_bitno = BITNO(space, refAddress.AsStackAddr()); if (! space->bitmap.TestBit(new_bitno)) { // It wasn't marked so it's otherwise unreferenced. baseAddr[i] = TAGGED(0); // Set it to NONE. someObj->Set(0, TAGGED(0)); // For safety. convertedWeak = true; } } } } } } // We need to check any weak references both in the areas we are // currently collecting and any other areas. This actually checks // weak refs in the area we're collecting even if they are not // actually reachable any more. N.B. This differs from OpMutables // because it also scans the area we're collecting. void CheckWeakRef::ScanAreas(void) { for (unsigned i = 0; i < gMem.nlSpaces; i++) { LocalMemSpace *space = gMem.lSpaces[i]; if (space->isMutable) ScanAddressesInRegion(space->lowestWeak, space->highestWeak); } // Scan the permanent mutable areas. for (unsigned j = 0; j < gMem.npSpaces; j++) { MemSpace *space = gMem.pSpaces[j]; if (space->isMutable) ScanAddressesInRegion(space->lowestWeak, space->highestWeak); } } class ProcessUpdate: public ScanAddress { public: virtual POLYUNSIGNED ScanAddressAt(PolyWord *pt); virtual void ScanRuntimeAddress(PolyObject **pt, RtsStrength weak); virtual PolyObject *ScanObjectAddress(PolyObject *base); void UpdateObjectsInArea(LocalMemSpace *area); }; /*********************************************************************/ /* This function is called in the update phase to update pointers to */ /* objects in the gc area that are in old mutable segments. */ /*********************************************************************/ PolyObject *ProcessUpdate::ScanObjectAddress(PolyObject *obj) { PolyWord val = obj; LocalMemSpace *space = gMem.LocalSpaceForAddress(val.AsStackAddr()); if (space != 0) { if (obj->ContainsForwardingPtr()) obj = obj->GetForwardingPtr(); else ASSERT(obj->ContainsNormalLengthWord()); CheckObject (obj); } return obj; } void ProcessUpdate::ScanRuntimeAddress(PolyObject **pt, RtsStrength/* weak*/) /* weak is not used, but needed so type of the function is correct */ { PolyWord w = *pt; LocalMemSpace *space = gMem.LocalSpaceForAddress(w.AsStackAddr()); if (space != 0) { PolyObject *obj = *pt; if (obj->ContainsForwardingPtr()) *pt = obj->GetForwardingPtr(); else ASSERT(obj->ContainsNormalLengthWord()); /* SPF 24/1/95 */ CheckObject (*pt); } } /* Search the area downwards looking for n consecutive free words. */ /* Return the bitmap index if successful or 0 (should we use -1?) on failure. */ static inline POLYUNSIGNED FindFreeInArea(LocalMemSpace *dst, POLYUNSIGNED limit, POLYUNSIGNED n) { /* SPF's version of the start caching code. SPF 2/10/96 */ /* Invariant: dst->start[0] .. dst->start[dst->start_index] is a descending sequence. */ POLYUNSIGNED truncated_n = (n < NSTARTS) ? n : NSTARTS - 1; ASSERT(0 <= limit); /* Invariant: dst->start[0] .. dst->start[dst->start_index] is a descending sequence. */ /* Update the starting array, so that the first few entries are valid. The starting point for a given size of hole must be at least as small (late) as the starting point for smaller holes. We remember the start_index of our previous allocation, so that if we have the same size object again, this loop becomes trivial. SPF 2/10/96 */ for (POLYUNSIGNED i = dst->start_index; i < truncated_n; i ++) { if (dst->start[i] < dst->start[i+1]) { dst->start[i+1] = dst->start[i]; } } /* Invariant: dst->start[0] .. dst->start[truncated_n] is a descending sequence. */ dst->start_index = truncated_n; /* Invariant: dst->start[0] .. dst->start[dst->start_index] is a descending sequence. */ /* Start our search at the appropriate point. */ POLYUNSIGNED start = dst->start[truncated_n]; /* If we can't copy UP, give up immediately. It's important that we DON'T update dst->start[n], because that might INCREASE it, which isn't allowed. SPF 19/11/1997 */ if (start <= limit) { return 0; } POLYUNSIGNED free = dst->bitmap.FindFree(limit, start, n); /* free == 0 || limit <= free && free < start */ /* We DON'T update the array for big allocations, because this would cause us to skip holes that are actually large enough for slightly smaller (but still big) allocations. An allocation is "big" if it doesn't have its own dedicated slot in the start array. This won't actually cost us much, provided there's enough small allocations between the big ones, as these will cause the pointer to be advanced. SPF 2/10/96 */ /* dst->start[0] .. dst->start[dst->start_index] is a descending sequence */ if (n < NSTARTS) { /* free == 0 || limit <= free && free < start */ ASSERT(n == dst->start_index); dst->start[n] = (free == 0) ? limit : free; /* Writing "dst->start[n] = free;" is attractive but wrong. The problem is that even if we can't compact the immutables much, we may still be able to copy immutables from the mutable area into the immutable area, but setting dst->start[n] to 0 would prevent this. SPF 19/11/1997 */ } /* dst->start[0] .. dst->start[dst->start_index] is still is a descending sequence */ return free; } // This does nothing to the addresses but by applying it in ScanConstantsWithinCode we // adjust any relative addresses so they are relative to the new location. class ProcessIdentity: public ScanAddress { public: virtual PolyObject *ScanObjectAddress(PolyObject *base) { return base; } }; static void CopyObjectsInArea(LocalMemSpace *src, bool compressImmutables) { /* Start scanning the bitmap from the very bottom since it is */ /* likely that very recently created objects need copying. */ /* Skip whole words of zeroes since these may be quite common if */ /* the objects to be copied are sparsely separated. */ /* Invariant: at this point there are no objects below src->gen_bottom */ POLYUNSIGNED bitno = BITNO(src,src->gen_bottom); POLYUNSIGNED highest = src->highest; // Bitmap *bitmap = &src->bitmap; for (;;) { if (bitno >= highest) return; /* SPF version; Invariant: 0 < highest - bitno */ bitno += src->bitmap.CountZeroBits(bitno, highest - bitno); if (bitno >= highest) return; ASSERT (src->bitmap.TestBit(bitno)); /* first set bit corresponds to the length word */ PolyWord *old = BIT_ADDR(src, bitno); /* Old object address */ PolyObject *obj = (PolyObject*)(old+1); POLYUNSIGNED L = obj->LengthWord(); ASSERT (OBJ_IS_LENGTH(L)); CheckObject(obj); POLYUNSIGNED n = OBJ_OBJECT_LENGTH(L) + 1 ;/* Length of allocation (including length word) */ bitno += n; POLYUNSIGNED free = 0; /* Bitmap index of new allocation */ // The destination space if either a mutable space if this is a mutable // or an immutable space if it's immutable. LocalMemSpace *dst = 0; /* New object allocation area */ // Find a mutable space for the mutable objects and an immutable space for // the immutables. We are copying objects starting from the first space // and working upwards so to avoid copying the same object multiple times // we must allocate from the last space first. We may copy an object within // its own space but we don't copy an object into an earlier space of the // same type. for (unsigned i = gMem.nlSpaces; i > 0; i--) { dst = gMem.lSpaces[i-1]; if (OBJ_IS_MUTABLE_OBJECT(L)) { // Mutable object if (dst->isMutable) { ASSERT(src->isMutable); // Should come from a mutable area free = FindFreeInArea(dst, (src == dst) ? bitno : 0, n); if (free) break; // Found space. if (src == dst) break; // We mustn't copy it to an earlier area. } } else { // Immutable object. if (! dst->isMutable) { /* If we're copying mutables to the immutable area and we're just doing sequential allocations at the bottom, we can optimise out all that "clever" search code in FindFreeInArea. */ if (! compressImmutables) { POLYUNSIGNED dest_bitno = BITNO(dst, dst->pointer); ASSERT(src->isMutable); // Only if we're copying from mutable area if (n < dest_bitno) { free = dest_bitno - n; break; } } else // It's a full GC, so try to be compact within the immutable area. { free = FindFreeInArea(dst, (src == dst) ? bitno : 0, n); if (free) break; } // We mustn't copy it to an earlier area. N.B. If we're copying from // a mutable area we CAN copy it to an immutable area earlier in // the sequence. if (src == dst) break; } } } if (free == 0) /* no room */ { // We're not going to move this object // Update src->pointer, so the old object doesn't get trampled. if (old < src->pointer) src->pointer = old; /* We haven't been able to move this object on this GC, but we might */ /* still be able to move some smaller objects, which might free enough */ /* space that we'll be able to move this object on the next GC, even if */ /* nothing becomes garbage before then. SPF 19/11/1997 */ continue; } /* allocate object in the bitmap */ dst->bitmap.SetBits(free, n); PolyWord *newp = BIT_ADDR(dst, free); /* New object address */ /* Update dst->pointer, so the new object doesn't get trampled. SPF 4/10/96 */ if (newp < dst->pointer) dst->pointer = newp; // If we are copying into a later area we may copy into an area // that crosses gen_bottom for that area. We need to adjust gen_bottom // since we assume above that gen_bottom points to a valid object. if (newp < dst->gen_bottom && newp+n > dst->gen_bottom) dst->gen_bottom = newp+n; PolyObject *newObj = (PolyObject*)(newp+1); if (OBJ_IS_STACK_OBJECT(L)) { newObj ->SetLengthWord(L); /* copy length word */ CopyStackFrame ((StackObject *)obj,(StackObject *)newObj); obj->SetForwardingPtr(newObj); } else /* not a stack object */ { for (POLYUNSIGNED i = 0; i < n; i++) newp[i] = old[i]; ASSERT((*newp).AsUnsigned() == L); obj->SetForwardingPtr(newObj); // If this is a code object flush out anything from the instruction cache // that might previously have been at this address if (OBJ_IS_CODE_OBJECT(L)) { ProcessIdentity identity; machineDependent->FlushInstructionCache(newp, n * sizeof(PolyWord)); // We have to update any relative addresses in the code. machineDependent->ScanConstantsWithinCode(newObj, obj, OBJ_OBJECT_LENGTH(L), &identity); } // We mustn't check the object until after we've adjusted any relative offsets. CheckObject((PolyObject*)(BIT_ADDR(dst, free) + 1)); } dst->copied += n; } } // Update the addresses in a group of words. POLYUNSIGNED ProcessUpdate::ScanAddressAt(PolyWord *pt) { PolyWord val = *pt; Check (val); if (val.IsTagged()) return 0; // It looked like it would be possible to simplify this code and // just call ContainsForwardingPtr on any address. // Profiling shows that it's quite important to avoid calling // ContainsForwardingPtr unnecessarily. I guess the reason is that // it actually accesses the memory referenced by the address and it // is unlikely to be in the cache. LocalMemSpace *space = gMem.LocalSpaceForAddress(val.AsStackAddr()); if (space == 0) return 0; if (! INRANGE(val.AsStackAddr(), space->gen_bottom, space->gen_top)) return 0; PolyObject *obj = val.AsObjPtr(); if (obj->ContainsForwardingPtr()) { *pt = obj->GetForwardingPtr(); CheckObject (pt->AsObjPtr()); } else { ASSERT(obj->ContainsNormalLengthWord()); CheckObject(obj); } return 0; } // Updates the addresses for objects in the area with the "allocated" bit set. // It processes the area between area->pointer and the bit corresponding to area->highest. void ProcessUpdate::UpdateObjectsInArea(LocalMemSpace *area) { PolyWord *pt = area->pointer; POLYUNSIGNED bitno = BITNO(area, pt); POLYUNSIGNED highest = area->highest; for (;;) { ASSERT(bitno <= highest); /* SPF */ /* Zero freed space. This is necessary for OpMutableBlock, which expects the old mutable area to contain only genuine objects, tombstones and zero words. This is all rather sad, since zeroing the mutable buffer in this manner may well be one of the hot-spots of the GC. At least we only start at area->pointer, so we shouldn't normally have to zap *too* much store. SPF 22/10/96 */ /* The alternative, of making these dummy byte objects in which case it is only the length word that needs to be set, didn't seem to make any difference. The CPU is probably writing back whole cache lines so setting the length word probably means the whole cache line has to be written anyway. DCJM 2/6/06. */ while (bitno < highest && !area->bitmap.TestBit(bitno)) { *pt++ = PolyWord::FromUnsigned(0); bitno++; } if (bitno == highest) return; /* first set bit corresponds to the length word */ pt++; PolyObject *obj = (PolyObject*)pt; POLYUNSIGNED L = obj->LengthWord(); bitno++; if (obj->ContainsForwardingPtr()) /* skip over moved object */ { obj = obj->GetForwardingPtr(); CheckObject (obj); POLYUNSIGNED length = obj->Length(); pt += length; bitno += length; } else /* !OBJ_IS_POINTER(L) */ { CheckObject (obj); if (OBJ_IS_WORD_OBJECT(L)) { POLYUNSIGNED length = OBJ_OBJECT_LENGTH(L); area->updated += length+1; while (length--) { PolyWord val = *pt; Check (val); if (! val.IsTagged() && val != PolyWord::FromUnsigned(0)) { LocalMemSpace *space = gMem.LocalSpaceForAddress(val.AsAddress()); if (space != 0 && INRANGE(val.AsStackAddr(), space->gen_bottom, space->gen_top)) { PolyObject *obj = val.AsObjPtr(); if (obj->ContainsForwardingPtr()) { *pt = obj->GetForwardingPtr(); CheckObject (pt->AsObjPtr()); } else { ASSERT(obj->ContainsNormalLengthWord()); CheckObject(obj); } } } pt++; bitno++; } } else /* !OBJ_IS_WORD_OBJECT(L) */ { POLYUNSIGNED length = OBJ_OBJECT_LENGTH(L); area->updated += length+1; ScanAddressesInObject(obj, L); pt += length; bitno += length; } /* !OBJ_IS_WORD_OBJECT(L) */ } /* !OBJ_IS_POINTER(L) */ } /* for loop */ } #define GC_START 1 #define GC_NEWLINE 2 #define GC_FULL 4 // Try to allocate another heap segment. It tries to allocate the requested size // but if that fails it allocates what it can. static bool TryMoreHeap(POLYUNSIGNED size, bool mut) { if (userOptions.debug & DEBUG_NOGROW) return false; // No heap growing. do { // Return if this succeeded. if (gMem.NewLocalSpace(size, mut)) return true; // Otherwise try with half the size and stop when // it's less than 64k words. size = size / 2; } while (size > 64*1024); return false; } /* The problem with this version of PossiblyExpandArea is that it doesn't always expand it enough for the subsequent compaction phase to actually liberate wordsRequiredToAllocate of free space. SPF 31/7/96 */ // This function is called after the mark phase of a full garbage collection to // expand the immutable area if necessary. wordsNeeded is the amount of immutable // data detected during the mark phase. static void PossiblyExpandImmutableArea(const POLYUNSIGNED wordsNeeded) { POLYUNSIGNED currentSize = 0; unsigned nISpaces = 0; // Number of immutable spaces already for (unsigned j = 0; j < gMem.nlSpaces; j++) { LocalMemSpace *space = gMem.lSpaces[j]; if (! space->isMutable) { currentSize += space->top - space->bottom; nISpaces++; } } if (userOptions.immutableFreeSpace + wordsNeeded > currentSize) // need to get some more space { // We want to ensure that we have immutableFreeSpace free after this // collection. We allocate in units of immutableSegSize so as not to // have too many small segments. POLYUNSIGNED requestedGrowth = userOptions.immutableFreeSpace + wordsNeeded - currentSize; if (requestedGrowth < userOptions.immutableSegSize) requestedGrowth = userOptions.immutableSegSize; // Make the segments larger if we have already allocated several. // The factors here are a guess. Maybe tune them more carefully unsigned spaceFactor = nISpaces / 3; while (spaceFactor > 0) { requestedGrowth += userOptions.immutableSegSize; spaceFactor--; } POLYUNSIGNED chunks = ROUNDUP_UNITS(requestedGrowth, BITSPERWORD); POLYUNSIGNED words = chunks * BITSPERWORD; (void)TryMoreHeap(words, false); // If this fails just carry on with what we have. } } /* This function CHECKS whether we have enough space AFTER the compaction phase. */ static bool BufferIsReallyFull(bool mutableRegion, POLYUNSIGNED wordsNeeded, const bool fullGC) { // This is the space we need to be free. If this is a mutable area wordsNeeded is the // space needed to allocate the object whose attempted allocation triggered this collection. // It needs to be available in at least one mutable area. If this is an immutable area // wordsNeeded is the amount of space needed for immutable objects that couldn't be copied // out of the mutable area so doesn't need to be contiguous. POLYUNSIGNED requiredFree; if (mutableRegion) requiredFree = fullGC ? userOptions.mutableFreeSpace: userOptions.mutableMinFree; else { requiredFree = fullGC ? userOptions.immutableFreeSpace: userOptions.immutableMinFree; requiredFree += wordsNeeded; wordsNeeded = 0; } for (unsigned i = 0; i < gMem.nlSpaces; i++) { LocalMemSpace *space = gMem.lSpaces[i]; if (space->isMutable == mutableRegion) { POLYUNSIGNED currentlyFree = space->pointer - space->bottom; if (currentlyFree >= wordsNeeded) { currentlyFree -= wordsNeeded; wordsNeeded = 0; } if (currentlyFree >= requiredFree) requiredFree = 0; else requiredFree -= currentlyFree; } } return wordsNeeded != 0 || requiredFree != 0; } // AFTER a full GC, make sure we have a full buffer's worth of free space available. static bool AdjustHeapSize(bool isMutableSpace, POLYUNSIGNED wordsRequired) { bool sizeChanged = false; POLYUNSIGNED currentSize = 0, currentlyFree = 0; unsigned nSpaces = 0; POLYUNSIGNED largestFree = 0; for (unsigned j = 0; j < gMem.nlSpaces; j++) { LocalMemSpace *space = gMem.lSpaces[j]; if (space->isMutable == isMutableSpace) { POLYUNSIGNED spaceSize = space->top - space->bottom; POLYUNSIGNED spaceFree = space->pointer - space->bottom; currentSize += spaceSize; currentlyFree += spaceFree; if (largestFree < spaceFree) largestFree = spaceFree; nSpaces++; } } const POLYUNSIGNED requiredFree = wordsRequired + (isMutableSpace ? userOptions.mutableFreeSpace : userOptions.immutableFreeSpace); /* Basic sanity checks. */ ASSERT(0 <= wordsRequired); ASSERT(0 <= requiredFree); // We may be trying to allocate a very large object, e.g. a new stack segment, in // which case we must ensure that we have enough space in at least one space. // Otherwise we just check we have enough free overall. if (requiredFree > currentlyFree || (isMutableSpace && largestFree < wordsRequired)) { // expand the heap. POLYUNSIGNED requestedGrowth = requiredFree - currentlyFree; const POLYUNSIGNED segSize = isMutableSpace ? userOptions.mutableSegSize : userOptions.immutableSegSize; if (requestedGrowth < segSize) requestedGrowth = segSize; // Make the segments larger if we have already allocated several. // The factors here are a guess. Maybe tune them more carefully unsigned spaceFactor = nSpaces / 3; while (spaceFactor > 0) { requestedGrowth += segSize; spaceFactor--; } if (requestedGrowth < wordsRequired) requestedGrowth = wordsRequired; POLYUNSIGNED chunks = ROUNDUP_UNITS(requestedGrowth, BITSPERWORD); POLYUNSIGNED words = chunks * BITSPERWORD; if (TryMoreHeap(words, isMutableSpace)) // If this fails just carry on with what we have. sizeChanged = true; } else // currentlyFree >= requiredFree { // The reason for shrinking the stack is to reduce the swap space and // possibly the address space requirements. This may be necessary if // we have finished building a large data structure and now want to // export it. The export code requires buffer space and may need the // space we're using. POLYUNSIGNED requestedShrink = currentlyFree - requiredFree; // Delete the most recent space first. for (unsigned k = gMem.nlSpaces; k > 0; k--) { LocalMemSpace *space = gMem.lSpaces[k-1]; if (space->isMutable == isMutableSpace && space->pointer == space->top /* It's completely empty */ && (POLYUNSIGNED)(space->top - space->bottom) <= requestedShrink) { // We can free this space without going under our limit requestedShrink -= space->top - space->bottom; gMem.DeleteLocalSpace(space); sizeChanged = true; } } } return sizeChanged; } void OpGCProcs (ScanAddress *process) { GCModules(process); } static int RecollectThisGeneration(unsigned thisGeneration) { if (thisGeneration > 3) return false; POLYUNSIGNED total = 0, updated = 0; for(unsigned j = 0; j < gMem.nlSpaces; j++) { LocalMemSpace *lSpace = gMem.lSpaces[j]; total += lSpace->gen_top - lSpace->pointer; updated += lSpace->updated; } if (total == 0) return false; return updated * 2 < total; // Less than 50% updated } // Called when Poly/ML starts up. void CreateHeap(void) { // Immutable space POLYUNSIGNED immutSize = ROUNDDOWN(userOptions.immutableSegSize, BITSPERWORD); if (gMem.NewLocalSpace(immutSize, false) == 0) Exit("Unable to allocate immutable area"); // Mutable space POLYUNSIGNED mutSize = ROUNDDOWN(userOptions.mutableSegSize, BITSPERWORD); if (gMem.NewLocalSpace(mutSize, true) == 0) Exit("Unable to allocate mutable area"); } static bool doGC(bool doFullGC, const POLYUNSIGNED wordsRequiredToAllocate) { /* Invariant: the bitmaps are completely clean. */ /* Note: this version of doGC does NOT clean the store - that's now the user's resposibility SPF 22/10/96 */ unsigned j; POLYUNSIGNED gcflags = GC_START; static bool doFullGCNextTime = 0; static unsigned this_generation = 0; record_gc_time(false); ASSERT (gc_phase == 0); GC_AGAIN: /* Invariant: the bitmaps are completely clean. */ /* At this point, we should have lSpace->bottom <= lSpace->pointer <= lSpace->gen_top <= lSpace->top lSpace->gen_top divides the current generation from the old one. lSpace->pointer is the current allocation pointer. */ for(j = 0; j < gMem.nlSpaces; j++) { LocalMemSpace *lSpace = gMem.lSpaces[j]; ASSERT (lSpace->top >= lSpace->gen_top); ASSERT (lSpace->gen_top >= lSpace->pointer); ASSERT (lSpace->pointer >= lSpace->bottom); // Record low-water mark before we change anything. // gen_bottom is the lowest object actually allocated in the // area. lSpace->gen_bottom = lSpace->pointer; // Set upper and lower limits of weak refs. lSpace->highestWeak = lSpace->bottom; lSpace->lowestWeak = lSpace->top; } // Set limits of weak refs. for (j = 0; j < gMem.npSpaces; j++) { PermanentMemSpace *pSpace = gMem.pSpaces[j]; pSpace->highestWeak = pSpace->bottom; pSpace->lowestWeak = pSpace->top; } /* Our recovery actions may insist on a full GC */ if (doFullGCNextTime) { doFullGC = true; doFullGCNextTime = false; } /* Mark phase */ gc_phase = 1; /* SPF 7/6/96 */ gcflags |= GC_NEWLINE; if (doFullGC) { gcflags |= GC_FULL; /* Collect everything */ for(j = 0; j < gMem.nlSpaces; j++) { LocalMemSpace *lSpace = gMem.lSpaces[j]; lSpace->gen_top = lSpace->top; } } gcflags &= ~GC_START; gcflags &= ~GC_NEWLINE; /* Bitmaps are allocated in InitialiseGC and are zeroed at the END of each GC, because that way we know how much of each bitmap (not all!) we need to touch. SPF 3/10/96 */ for(j = 0; j < gMem.nlSpaces; j++) { LocalMemSpace *lSpace = gMem.lSpaces[j]; lSpace->i_marked = lSpace->m_marked = 0; } /* Do the actual marking */ ProcessMarkPointers marker; OpMutables(&marker); OpGCProcs(&marker); /* Invariant: at most the first (gen_top - bottom) bits of the each bitmap can be dirty here. */ // Mutable areas can contain mutable or immutable objects. Immutable areas // should only contain immutable objects. Verify this. for(j = 0; j < gMem.nlSpaces; j++) { LocalMemSpace *lSpace = gMem.lSpaces[j]; if (! lSpace->isMutable) ASSERT(lSpace->m_marked == 0); } /* Compact phase */ gc_phase = 2; /* SPF 7/6/96 */ /* Detect unreferenced streams, windows etc. */ CheckWeakRef checkRef; OpGCProcs(&checkRef); checkRef.ScanAreas(); if (convertedWeak) // Notify the signal thread to broadcast on the condition var when // the GC is complete. processes->SignalArrived(); /* If we are doing a full GC we expand the immutable area now, so that there's enough room to copy the immutables that are currently in the mutable buffer. There's no point expanding the mutable buffer now - we'll do that later when we know *exactly* how large we want it to be. */ if (doFullGC) { POLYUNSIGNED immutableData = 0; for(j = 0; j < gMem.nlSpaces; j++) immutableData += gMem.lSpaces[j]->i_marked; PossiblyExpandImmutableArea(immutableData); } /* Invariant: at most the first (gen_top - bottom) bits of each bitmap can be dirty here. */ for(j = 0; j < gMem.nlSpaces; j++) { LocalMemSpace *lSpace = gMem.lSpaces[j]; lSpace->highest = BITNO(lSpace, lSpace->gen_top); for (unsigned i = 0; i < NSTARTS; i++) lSpace->start[i] = lSpace->highest; lSpace->start_index = NSTARTS - 1; lSpace->copied = 0; } /* Invariant: lSpace->start[0] .. lSpace->start[lSpace->start_index] is a descending sequence. */ /* Invariant: there are no objects below lSpace->gen_bottom. */ // First, process the mutable areas, copying immutable data into the immutable areas // and compacting mutable objects within the area. POLYUNSIGNED immutable_overflow = 0; // The immutable space we couldn't copy out. { POLYUNSIGNED immutableFree = 0, immutableNeeded = 0; for(j = 0; j < gMem.nlSpaces; j++) { LocalMemSpace *lSpace = gMem.lSpaces[j]; if (lSpace->isMutable) // Mutable area - add up the immutables to be moved out immutableNeeded += lSpace->i_marked; else { // Immutable area - calculate the number of unallocated words WITHIN the area POLYUNSIGNED immutableSpace = lSpace->gen_top - lSpace->gen_bottom; POLYUNSIGNED immutableUsed = lSpace->i_marked; immutableFree += immutableSpace - immutableUsed; } } // This is an optimisation. If we have a small amount of immutable data // to move from the mutable area relative to the size of gaps in the // immutable area we use a compacting copy which tries to use these gaps. // If there is a larger amount of immutable data to move we simply add them // on at the bottom. The idea is to reduce the cost of finding spaces to // copy these objects. bool compressImmutables = immutableNeeded / 2 < immutableFree ; /* Needs tuning!!! */ /* Reset the allocation pointers. This puts garbage (and real data) below them. */ for(j = 0; j < gMem.nlSpaces; j++) { LocalMemSpace *lSpace = gMem.lSpaces[j]; if (lSpace->isMutable || compressImmutables) lSpace->pointer = lSpace->gen_top; } /* Invariant: there are no objects below A.M.gen_bottom. */ for(j = 0; j < gMem.nlSpaces; j++) { LocalMemSpace *lSpace = gMem.lSpaces[j]; if (lSpace->isMutable) CopyObjectsInArea(lSpace, compressImmutables); } // Calculate the amount copied. unsigned markedImmut = 0, markedMut = 0, copiedToI = 0, copiedToM = 0; for(j = 0; j < gMem.nlSpaces; j++) { LocalMemSpace *lSpace = gMem.lSpaces[j]; if (lSpace->isMutable) { markedImmut += lSpace->i_marked; markedMut += lSpace->m_marked; copiedToM += lSpace->copied; } else copiedToI += lSpace->copied; } ASSERT(copiedToM + copiedToI <= markedMut + markedImmut); ASSERT(copiedToI <= markedImmut); ASSERT(copiedToI != markedImmut || copiedToM <= markedMut); /* We may have A.M.copied > A.M.m_marked, if the immutable buffer overflows */ // If we didn't have enough space in the immutable areas to copy out the // immutable objects this will record the extra space we would need. immutable_overflow = markedImmut - copiedToI; } /* The area between A.M.gen_bottom and A.M.pointer may contain tombstones, so we daren't increase A.M.gen_bottom. */ for(j = 0; j < gMem.nlSpaces; j++) { LocalMemSpace *lSpace = gMem.lSpaces[j]; if (lSpace->isMutable) { // We may have copied mutable objects from an earlier space if (lSpace->pointer < lSpace->gen_bottom) lSpace->gen_bottom = lSpace->pointer; } } /* If we've copied an object from the mutable area below the previous limit of the immutable area using a "non-compressing" copy, it would be unsafe to attempt to compress the immutable area (we might get a double indirection). However, it *is* safe if we've used a "compressing" copy from the mutables buffer. We won't move anything twice, because each object goes into the first "big enough" hole on each pass. If the second pass finds a "big enough" hole above the object, the first pass would have found this hole too, and used it. This is slightly tricky reasoning, so be careful! SPF 19/12/1997 */ /* Reclaim the genuine data from the immutable buffer. */ for(j = 0; j < gMem.nlSpaces; j++) gMem.lSpaces[j]->copied = 0; POLYUNSIGNED immutable_space = 0, immutable_used = 0, immutable_needed = 0; for(j = 0; j < gMem.nlSpaces; j++) { LocalMemSpace *lSpace = gMem.lSpaces[j]; if (! lSpace->isMutable) { // If we have copied immutable objects out of the mutable buffer // below gen_bottom we need to reset that. // if (lSpace->pointer < lSpace->gen_bottom) // lSpace->gen_bottom = lSpace->pointer; immutable_space += lSpace->gen_top - lSpace->gen_bottom; immutable_used += lSpace->i_marked + lSpace->copied; immutable_needed += lSpace->i_marked; } } POLYUNSIGNED immutable_free = immutable_space - immutable_used; bool compressImmutables = immutable_needed / 4 < immutable_free ; /* Needs tuning!!! */ for(j = 0; j < gMem.nlSpaces; j++) { LocalMemSpace *lSpace = gMem.lSpaces[j]; if (! lSpace->isMutable) { if (lSpace->gen_bottom <= lSpace->pointer) { if (compressImmutables) { lSpace->copied = 0; /* Invariant: there are no objects below lSpace->gen_bottom. */ CopyObjectsInArea(lSpace, true); } else // simply reclaim the immutable data (with its embedded garbage) lSpace->pointer = lSpace->gen_bottom; ASSERT(lSpace->gen_bottom <= lSpace->pointer); /* The area between lSpace->gen_bottom and lSpace->pointer may contain tombstones, so we daren't increase lSpace->gen_bottom. */ } else // We may have copied immutable objects from an earlier space. lSpace->gen_bottom = lSpace->pointer; } } // An extra little check. for(j = 0; j < gMem.nlSpaces; j++) { LocalMemSpace *lSpace = gMem.lSpaces[j]; if (! lSpace->isMutable) { ASSERT(lSpace->gen_bottom <= lSpace->pointer); } } POLYUNSIGNED mCopied = 0, iCopied = 0, iMarked = 0; for(j = 0; j < gMem.nlSpaces; j++) { LocalMemSpace *lSpace = gMem.lSpaces[j]; if (lSpace->isMutable) mCopied += lSpace->copied; else { iMarked += lSpace->i_marked; iCopied += lSpace->copied; } } ASSERT(mCopied == 0); ASSERT(iCopied <= iMarked); for(j = 0; j < gMem.nlSpaces; j++) { LocalMemSpace *lSpace = gMem.lSpaces[j]; ASSERT(INSOFTRANGE(lSpace->pointer, lSpace->bottom, lSpace->gen_top)); } /* Update phase */ gc_phase = 3; /* SPF 7/6/96 */ /* Invariant: at most the first (gen_top - bottom) bits of each bitmap can be dirty here. */ for(j = 0; j < gMem.nlSpaces; j++) gMem.lSpaces[j]->updated = 0; ProcessUpdate processUpdate; OpMutables(&processUpdate); for(j = 0; j < gMem.nlSpaces; j++) processUpdate.UpdateObjectsInArea(gMem.lSpaces[j]); OpGCProcs(&processUpdate); { POLYUNSIGNED iUpdated = 0, mUpdated = 0, iMarked = 0, mMarked = 0; for(j = 0; j < gMem.nlSpaces; j++) { LocalMemSpace *lSpace = gMem.lSpaces[j]; iMarked += lSpace->i_marked; mMarked += lSpace->m_marked; if (lSpace->isMutable) mUpdated += lSpace->updated; else iUpdated += lSpace->updated; } ASSERT(iUpdated == iMarked - immutable_overflow); ASSERT(mUpdated == mMarked + immutable_overflow); } /* Invariant: at most the first (gen_top - bottom) bits of the each bitmap can be dirty. */ for(j = 0; j < gMem.nlSpaces; j++) { LocalMemSpace *lSpace = gMem.lSpaces[j]; lSpace->bitmap.ClearBits(0, lSpace->gen_top - lSpace->bottom); } /* Invariant: the bitmaps are completely clean */ if (doFullGC) { /* If we've had an immutable overflow, allow for this when we grow the heap */ AdjustHeapSize(false /* immutable space*/, immutable_overflow); bool iFull = BufferIsReallyFull(false /* immutable area */, immutable_overflow, doFullGC); bool mFull = BufferIsReallyFull(true /* mutable area */, wordsRequiredToAllocate, doFullGC); /* If we're going to recollect the current generation, don't adjust the mutable buffer size yet. */ /* We'll (probably) do that on the next collection. SPF 22/12/1997 */ if (iFull || ! mFull || ! RecollectThisGeneration(this_generation)) AdjustHeapSize(true /* mutable space */, wordsRequiredToAllocate); } CheckMemory(); /* Have we cleared enough space? */ { bool iFull = BufferIsReallyFull(false /* immutable area */, immutable_overflow, doFullGC); bool mFull = BufferIsReallyFull(true /* mutable area */, wordsRequiredToAllocate, doFullGC); if (iFull || mFull) { /* Recovery actions */ if (!iFull && RecollectThisGeneration(this_generation)) /* Needs tuning!!! */ { /* The next GC will re-collect THIS generation, which should be enough to recover properly. */ } else if (! doFullGC) // Do a full GC next time doFullGCNextTime = true; else // It was a full GC but we don't have as much free space as we normally // want at the end of a full GC. Do we have as much as we would want at the // end of a partial GC? if (BufferIsReallyFull(false /* immutable area */, 0, false) || BufferIsReallyFull(true /* mutable area */, wordsRequiredToAllocate, false)) { // No we don't even have that - interrupt console processes and end GC here. gc_phase = 0; record_gc_time(true); return false; } } } if (RecollectThisGeneration(this_generation)) { /* If this was a full GC, make sure the next one is too, as we may need to reconfigure the mutable buffer size. If we only did a partial next, we would still have to mark all the immutables again (they would still be new) which is the main cost of a full GC. */ doFullGCNextTime |= doFullGC; this_generation++; } else { /* Merge this generation with the old one */ for(j = 0; j < gMem.nlSpaces; j++) { LocalMemSpace *lSpace = gMem.lSpaces[j]; lSpace->gen_top = lSpace->pointer; } this_generation = 0; } // Do we have enough space for the original allocation request? bool haveSpace = false; for(j = 0; j < gMem.nlSpaces; j++) { LocalMemSpace *space = gMem.lSpaces[j]; if (space->isMutable) { if ((POLYUNSIGNED)(space->pointer - space->bottom) >= wordsRequiredToAllocate) { haveSpace = true; break; } } } if (! haveSpace) /* Try our recovery action immediately */ goto GC_AGAIN; /* If the heap is very close to what we can handle on this machine, do the full GC immediately, because if we wait, we'll generate more data in the mutable buffer which will make the thrashing caused by the inevitable full GC even worse. SPF 2/3/1998 */ if (doFullGCNextTime) { POLYUNSIGNED memSize = GetPhysicalMemorySize(); // Ignore this if we can't determine.or if we have more memory than the address space. if (memSize != 0 && memSize+1 != 0) { POLYUNSIGNED memWords = memSize/sizeof(PolyWord); POLYUNSIGNED spaceUsed = 0; unsigned i; for (i = 0; i < gMem.npSpaces; i++) { MemSpace *space = gMem.pSpaces[i]; spaceUsed += space->top - space->bottom; } for (i = 0; i < gMem.nlSpaces; i++) { LocalMemSpace *space = gMem.lSpaces[i]; // For mutable segments include all the space since // that's going to be used for allocation. For immutable // spaces include only the area currently in use if (space->isMutable) spaceUsed += space->top - space->bottom; else spaceUsed += space->top - space->pointer; } // This crude estimate leaves out C heap, space for executable etc. // We used to include the bitmaps here as well. Since that's a fixed percentage of // the sizes it could easily be taken account of by reducing the percentage of real // pages that cause a full collection. POLYUNSIGNED heapLoad; if (memWords < 100) heapLoad = 100; else heapLoad = spaceUsed / (memWords/100); // If we're more than 80% full. if (heapLoad > 80) goto GC_AGAIN; } } /* End of garbage collection */ gc_phase = 0; record_gc_time(true); /* Invariant: the bitmaps are completely clean */ return true; // Completed } // Return the physical memory size. Returns the maximum unsigned integer value if // it won't . #if defined(HAVE_WINDOWS_H) // Define this here rather than attempting to use MEMORYSTATUSEX since // it may not be in the include and we can't easily test. The format // of MEMORYSTATUSVLM is the same. typedef struct _MyMemStatusEx { DWORD dwLength; DWORD dwMemoryLoad; DWORDLONG ullTotalPhys; DWORDLONG ullAvailPhys; DWORDLONG ullTotalPageFile; DWORDLONG ullAvailPageFile; DWORDLONG ullTotalVirtual; DWORDLONG ullAvailVirtual; DWORDLONG ullAvailExtendedVirtual; } MyMemStatusEx; typedef VOID (WINAPI *GLOBALMEMSLVM)(MyMemStatusEx *); typedef BOOL (WINAPI *GLOBALMEMSEX)(MyMemStatusEx *); #endif POLYUNSIGNED GetPhysicalMemorySize(void) { POLYUNSIGNED maxMem = 0-1; // Maximum unsigned value. #if defined(HAVE_WINDOWS_H) { // This is more complicated than it needs to be. GlobalMemoryStatus // returns silly values if there is more than 4GB so GlobalMemoryStatusEx // is preferred. However, it is not in all the include files and may not // be in kernel32.dll in pre-XP versions. Furthermore at one point it was // called GlobalMemoryStatusVlm. The only way to do this portably is the // hard way. HINSTANCE hlibKernel = LoadLibrary("kernel32.dll"); if (hlibKernel) { MyMemStatusEx memStatEx; memset(&memStatEx, 0, sizeof(memStatEx)); memStatEx.dwLength = sizeof(memStatEx); GLOBALMEMSEX globalMemStatusEx = (GLOBALMEMSEX)GetProcAddress(hlibKernel, "GlobalMemoryStatusEx"); GLOBALMEMSLVM globalMemStatusVlm = (GLOBALMEMSLVM)GetProcAddress(hlibKernel, "GlobalMemoryStatusVlm"); if (globalMemStatusEx && ! (*globalMemStatusEx)(&memStatEx)) memStatEx.ullTotalPhys = 0; // Clobber any rubbish since it says it failed. else if (globalMemStatusVlm) // GlobalMemoryStatusVlm returns VOID so we assume it worked (*globalMemStatusVlm) (&memStatEx); FreeLibrary(hlibKernel); if (memStatEx.ullTotalPhys) // If it's non-zero assume it succeeded { DWORDLONG dwlMax = maxMem; if (memStatEx.ullTotalPhys > dwlMax) return maxMem; else return (POLYUNSIGNED)memStatEx.ullTotalPhys; } } // Fallback if that fails. MEMORYSTATUS memStatus; memset(&memStatus, 0, sizeof(memStatus)); GlobalMemoryStatus(&memStatus); if (memStatus.dwTotalPhys > maxMem) return maxMem; else return (POLYUNSIGNED)memStatus.dwTotalPhys; } #endif #if defined(_SC_PHYS_PAGES) && defined(_SC_PAGESIZE) { // Linux and Solaris. This gives a silly value in Cygwin. long physPages = sysconf(_SC_PHYS_PAGES); long physPagesize = sysconf(_SC_PAGESIZE); if (physPages != -1 && physPagesize != -1) { unsigned long maxPages = maxMem / physPagesize; if ((unsigned long)physPages > maxPages) return maxMem; else // We've checked it won't overflow. return physPages*physPagesize; } } #endif #if defined(HAVE_SYSCTL) && defined(CTL_HW) // FreeBSD and Mac OS X. It seems HW_MEMSIZE has been added to // Max OS X to return a 64-bit value. #ifdef HW_MEMSIZE { static int mib[2] = { CTL_HW, HW_MEMSIZE }; uint64_t physMem = 0; size_t len = sizeof(physMem); if (sysctl(mib, 2, &physMem, &len, NULL, 0) == 0 && len == sizeof(physMem)) { if (physMem > (uint64_t)maxMem) return maxMem; else return (POLYUNSIGNED)physMem; } } #endif #ifdef HW_PHYSMEM // If HW_MEMSIZE isn't there or the call failed try this. { static int mib[2] = { CTL_HW, HW_PHYSMEM }; unsigned int physMem = 0; size_t len = sizeof(physMem); if (sysctl(mib, 2, &physMem, &len, NULL, 0) == 0 && len == sizeof(physMem)) { if (physMem > maxMem) return maxMem; else return physMem; } } #endif #endif return 0; // Unable to determine } class FullGCRequest: public MainThreadRequest { public: virtual void Perform() { doGC (true,0); } }; class QuickGCRequest: public MainThreadRequest { public: QuickGCRequest(POLYUNSIGNED words): wordsRequired(words) {} virtual void Perform() { result = doGC (false, wordsRequired); } bool result; POLYUNSIGNED wordsRequired; }; // Perform a full garbage collection. This is called either from ML via the full_gc RTS call // or from various RTS functions such as open_file to try to recover dropped file handles. void FullGC(TaskData *taskData) { FullGCRequest request; processes->MakeRootRequest(taskData, &request); } // This is the normal call when memory is exhausted and we need to garbage collect. bool QuickGC(TaskData *taskData, POLYUNSIGNED wordsRequiredToAllocate) { QuickGCRequest request(wordsRequiredToAllocate); processes->MakeRootRequest(taskData, &request); return request.result; } polyml.5.2.1/libpolyml/gc.h0000644000175000017500000000264110760535022014544 0ustar daviddavid/* Title: gc.h - exports signature for gc.cpp Copyright (c) 2000-7 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef GC_H_INCLUDED #define GC_H_INCLUDED class StackObject; #include "globals.h" // For POLYUNSIGNED class TaskData; extern void CopyStackFrame(StackObject *old_stack, StackObject *new_stack); // Make a request for a full garbage collection. extern void FullGC(TaskData *taskData); // Make a request for a partial garbage collection. extern bool QuickGC(TaskData *taskData, POLYUNSIGNED words_needed); extern void CreateHeap(void); extern POLYUNSIGNED GetPhysicalMemorySize(void); extern unsigned gc_phase; extern bool convertedWeak; #endif polyml.5.2.1/libpolyml/globals.h0000644000175000017500000004654610772160234015614 0ustar daviddavid/* Title: Globals for the system. Author: Dave Matthews, Cambridge University Computer Laboratory Copyright (c) 2000-7 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef _GLOBALS_H #define _GLOBALS_H /* Poly words, pointers and objects. The garbage collector needs to be able to distinguish different uses of a memory word. We need to be able find which words are pointers to other objects and which are simple integers. The simple distinction is between integers, which are tagged by having the bottom bit set, and Addresses which are word aligned (bottom 2 bits set on a 32 bit machine, bottom 3 bits on a 64 bit machine). There is a third case that can arise where we have a return address to a piece of code. These are generally aligned on a word+two-byte boundary except that they can appear with any alignment in the saved PC field of a stack. Normally these will only appear on the stack or in a register saved to the stack but they can be passed as an argument to SetCodeConstant. Addresses always point to the start of objects. There is one exception: a stack object can contain addresses within the current stack. The preceding word of a stack object is the length word. This contains the length of the object in words in the low-order 3 (7 on a 64-bit machine) bytes and a flag byte in the top byte. The flags give information about the type of the object. The length word is also used by the garbage collector and other object processors. */ /* Generally we use a tagged integer representation with 31 bits of precision and the low-order bit as a tag bit. one represents a tagged integer, zero a pointer. Code pointers are always aligned onto a word + 2 byte boundary. The exception is the Sparc which has special tagged add and subtract instructions. These cause a trap if given a value which is not a multiple of 4. To make use of these instructions we represent tagged integers using 30 bits of precision and with the low order bits containing 01. DCJM 27/9/00. */ #if (defined(HOSTARCHITECTURE_SPARC) && !defined(INTERPRETED)) #define POLY_TAGSHIFT 2 #else #define POLY_TAGSHIFT 1 #endif #if defined(WINDWOWS_PC) #include typedef INT_PTR POLYSIGNED; typedef UINT_PTR POLYUNSIGNED; #else typedef long POLYSIGNED; typedef unsigned long POLYUNSIGNED; #endif typedef unsigned char byte; class PolyObject; typedef PolyObject *POLYOBJPTR; typedef byte *POLYCODEPTR; #define PC_RETRY_SPECIAL ((POLYCODEPTR)1) // This was previously TAGGED(0) class PolyWord { public: // An object pointer can become a word directly. PolyWord(POLYOBJPTR p) { contents.objectPtr = p; } // Initialise to TAGGED(0). This is very rarely used. PolyWord() { contents.unsignedInt = 1; } // Integers need to be tagged. static PolyWord TaggedInt(POLYSIGNED s) { return PolyWord((s << POLY_TAGSHIFT) | (POLYSIGNED)0x01); } static PolyWord TaggedUnsigned(POLYUNSIGNED u) { return PolyWord((u << POLY_TAGSHIFT) | 0x01); } static PolyWord FromStackAddr(PolyWord *sp) { return PolyWord(sp); } static PolyWord FromCodePtr(POLYCODEPTR p) { return PolyWord(p); } // Tests for the various cases. bool IsTagged(void) const { return (contents.unsignedInt & 1) != 0; } bool IsCodePtr(void) const { return (contents.unsignedInt & 3) == 2; } bool IsDataPtr(void) const { return (contents.unsignedInt & (sizeof(PolyWord)-1)) == 0; } // Extract the various cases. POLYSIGNED UnTagged(void) const { return contents.signedInt >> POLY_TAGSHIFT; } POLYUNSIGNED UnTaggedUnsigned(void) const { return contents.unsignedInt >> POLY_TAGSHIFT; } POLYOBJPTR AsObjPtr(void) const { return contents.objectPtr; } PolyWord *AsStackAddr(void) const { return contents.stackAddr; } POLYCODEPTR AsCodePtr(void) const { return contents.codePtr; } void *AsAddress(void)const { return AsCodePtr(); } // There are a few cases where we need to store and extract untagged values static PolyWord FromUnsigned(POLYUNSIGNED u) { return PolyWord(u); } static PolyWord FromSigned(POLYSIGNED s) { return PolyWord(s); } POLYUNSIGNED AsUnsigned(void) const { return contents.unsignedInt; } protected: PolyWord(POLYSIGNED s) { contents.signedInt = s; } PolyWord(POLYUNSIGNED u) { contents.unsignedInt = u; } public: bool operator == (PolyWord b) const { return contents.unsignedInt == b.contents.unsignedInt; } bool operator != (PolyWord b) const { return contents.unsignedInt != b.contents.unsignedInt; } protected: PolyWord(PolyWord *sp) { contents.stackAddr = sp; } PolyWord(POLYCODEPTR p) { contents.codePtr = p; } union { POLYSIGNED signedInt; // A tagged integer - lowest bit set POLYUNSIGNED unsignedInt; // A tagged integer - lowest bit set POLYOBJPTR objectPtr; // Object pointer - two lowest bits clear. POLYCODEPTR codePtr; // Address within code - lowest bits contain 10. PolyWord *stackAddr; // Address within current stack - two lowest bits clear. } contents; }; //typedef PolyWord POLYWORD; inline bool OBJ_IS_AN_INTEGER(const PolyWord a) { return a.IsTagged(); } inline bool OBJ_IS_CODEPTR(const PolyWord a) { return a.IsCodePtr(); } inline bool OBJ_IS_DATAPTR(const PolyWord a) { return a.IsDataPtr(); } // The maximum tagged signed number is one less than 0x80 shifted into the top byte then shifted down // by the tag shift. #define MAXTAGGED (((POLYSIGNED)0x80 << (POLYSIGNED)(8*(sizeof(PolyWord)-1) -POLY_TAGSHIFT)) -1) inline PolyWord TAGGED(POLYSIGNED a) { return PolyWord::TaggedInt(a); } inline POLYSIGNED UNTAGGED(PolyWord a) { return a.UnTagged(); } inline POLYUNSIGNED UNTAGGED_UNSIGNED(PolyWord a) { return a.UnTaggedUnsigned(); } #define IS_INT(x) ((x).IsTagged()) /************************************************************************ * * Low level definitions. * ************************************************************************/ /* length word flags */ /* The following encodings are used: (1) OBJ_PRIVATE_GC_BIT = 0 A normal length word i.e. 7 more flags + 24 bit length. (2) OBJ_PRIVATE_GC_BIT = 1, OBJ_PRIVATE_MUTABLE_BIT = 0 A "normal" tombstone. Remaining 30 bits are (word-aligned) pointer >> 2. (3) OBJ_PRIVATE_GC_BIT = 1, OBJ_PRIVATE_MUTABLE_BIT = 1 A "depth" tombstone; used by share program. Remaining 30 bits are an unsigned integer representing the (approximate) depth of the object in the data-structure. SPF 24/1/95 */ #define OBJ_PRIVATE_FLAGS_SHIFT (8 * (sizeof(PolyWord) - 1)) #define _TOP_BYTE(x) ((POLYUNSIGNED)(x) << OBJ_PRIVATE_FLAGS_SHIFT) // Bottom two bits define the content format. // Zero bits mean ordinary word object containing addresses or tagged integers. #define F_BYTE_OBJ 0x01 /* byte object (contains no pointers) */ #define F_CODE_OBJ 0x02 /* code object (mixed bytes and words) */ #define F_STACK_OBJ 0x03 /* stack object - may contain internal pointers */ #define F_NO_OVERWRITE 0x08 /* don't overwrite when loading - mutables only. */ #define F_NEGATIVE_BIT 0x10 /* sign bit for arbitrary precision ints */ #define F_WEAK_BIT 0x20 /* object contains weak references to option values. */ #define F_MUTABLE_BIT 0x40 /* object is mutable */ #define F_PRIVATE_GC_BIT 0x80 /* object is (pointer or depth) tombstone */ #define F_PRIVATE_FLAGS_MASK 0xFF #define _OBJ_BYTE_OBJ _TOP_BYTE(0x01) /* byte object (contains no pointers) */ #define _OBJ_CODE_OBJ _TOP_BYTE(0x02) /* code object (mixed bytes and words) */ #define _OBJ_STACK_OBJ _TOP_BYTE(0x03) /* stack object - may contain internal pointers */ #define _OBJ_NO_OVERWRITE _TOP_BYTE(0x08) /* don't overwrite when loading - mutables only. */ #define _OBJ_NEGATIVE_BIT _TOP_BYTE(0x10) /* sign bit for arbitrary precision ints */ #define _OBJ_WEAK_BIT _TOP_BYTE(0x20) #define _OBJ_MUTABLE_BIT _TOP_BYTE(0x40) /* object is mutable */ #define _OBJ_PRIVATE_GC_BIT _TOP_BYTE(0x80) /* object is (pointer or depth) tombstone */ #define _OBJ_PRIVATE_FLAGS_MASK _TOP_BYTE(0xFF) #define _OBJ_PRIVATE_LENGTH_MASK ((-1) ^ _OBJ_PRIVATE_FLAGS_MASK) #define MAX_OBJECT_SIZE _OBJ_PRIVATE_LENGTH_MASK #define _OBJ_PRIVATE_DEPTH_MASK (_OBJ_PRIVATE_GC_BIT|_OBJ_MUTABLE_BIT) /* case 1 - proper length words */ inline bool OBJ_IS_LENGTH(POLYUNSIGNED L) { return ((L & _OBJ_PRIVATE_GC_BIT) == 0); } /* these should only be applied to proper length words */ /* discards GC flag, mutable bit and weak bit. */ inline byte GetTypeBits(POLYUNSIGNED L) { return (byte)(L >> OBJ_PRIVATE_FLAGS_SHIFT) & 0x03; } inline POLYUNSIGNED OBJ_OBJECT_LENGTH(POLYUNSIGNED L) { return L & _OBJ_PRIVATE_LENGTH_MASK; } inline bool OBJ_IS_BYTE_OBJECT(POLYUNSIGNED L) { return (GetTypeBits(L) == F_BYTE_OBJ); } inline bool OBJ_IS_CODE_OBJECT(POLYUNSIGNED L) { return (GetTypeBits(L) == F_CODE_OBJ); } inline bool OBJ_IS_STACK_OBJECT(POLYUNSIGNED L) { return (GetTypeBits(L) == F_STACK_OBJ); } inline bool OBJ_IS_NO_OVERWRITE(POLYUNSIGNED L) { return ((L & _OBJ_NO_OVERWRITE) != 0); } inline bool OBJ_IS_NEGATIVE(POLYUNSIGNED L) { return ((L & _OBJ_NEGATIVE_BIT) != 0); } inline bool OBJ_IS_MUTABLE_OBJECT(POLYUNSIGNED L) { return ((L & _OBJ_MUTABLE_BIT) != 0); } inline bool OBJ_IS_WEAKREF_OBJECT(POLYUNSIGNED L) { return ((L & _OBJ_WEAK_BIT) != 0); } /* Standard macro for finding the start of a code segment from a code-pointer. First we normalise it to get a properly aligned word pointer. Then we increment this word pointer until we get the zero word which is the end-of-code marker. The next word after this is the byte offset of the start of the segment, so we convert back to a byte pointer to do the subtraction, then return the result as a word pointer. SPF 24/1/95 Note that this code must work even if "cp" is not aligned as a code pointer, since the initial program counter used for profiling may have a random alignment. SPF 26/1/96 */ inline PolyObject *ObjCodePtrToPtr(byte *cp) { while ((POLYUNSIGNED)cp & (sizeof(POLYUNSIGNED)-1)) cp++; // Make it word aligned POLYUNSIGNED *wp = (POLYUNSIGNED*)cp; while (*wp != 0) wp++; wp++; POLYUNSIGNED byte_offset = *wp; return (PolyObject *)((byte *)wp - byte_offset); } /* We have to very careful here, because the RTS code segments are malformed - they don't contain the usual count of the number of constants. This means we can't just use a combination of the OBJ_CODEPTR_TO_PTR and OBJ_PTR_TO_CONSTS_PTR macros. SPF 26/7/96 */ inline void OBJ_CODEPTR_TO_CONSTS_PTR(PolyWord cp, PolyWord * &xp) { POLYUNSIGNED *wp = (POLYUNSIGNED *)(cp.AsUnsigned() & ~(sizeof(PolyWord)-1)); while (*wp != 0) wp++; xp = (PolyWord*)wp; } /* Don't need to worry about whether shift is signed, because OBJ_PRIVATE_USER_FLAGS_MASK removes the sign bit. We don't want the GC bit (which should be 0) anyway. */ #define OBJ_PRIVATE_USER_FLAGS_MASK _TOP_BYTE(0x7F) #define OBJ_IS_WORD_OBJECT(L) (GetTypeBits(L) == 0) /* case 2 - forwarding pointer */ inline bool OBJ_IS_POINTER(POLYUNSIGNED L) { return (L & _OBJ_PRIVATE_DEPTH_MASK) == _OBJ_PRIVATE_GC_BIT; } inline PolyObject *OBJ_GET_POINTER(POLYUNSIGNED L) { return (PolyObject*)(( L & ~_OBJ_PRIVATE_DEPTH_MASK) <<2); } inline POLYUNSIGNED OBJ_SET_POINTER(PolyObject *pt) { return ((POLYUNSIGNED)pt >> 2) | _OBJ_PRIVATE_GC_BIT; } /* case 3 - depth */ inline bool OBJ_IS_DEPTH(POLYUNSIGNED L) { return (L & _OBJ_PRIVATE_DEPTH_MASK) == _OBJ_PRIVATE_DEPTH_MASK; } inline POLYUNSIGNED OBJ_GET_DEPTH(POLYUNSIGNED L) { return L & ~_OBJ_PRIVATE_DEPTH_MASK; } inline POLYUNSIGNED OBJ_SET_DEPTH(POLYUNSIGNED n) { return n | _OBJ_PRIVATE_DEPTH_MASK; } // An object i.e. a piece of allocated memory in the heap. In the simplest case this is a // tuple, a list cons cell, a string or a ref. Every object has a length word in the word before // where its address points. The top byte of this contains flags. class PolyObject { public: byte *AsBytePtr(void)const { return (byte*)this; } PolyWord *AsWordPtr(void)const { return (PolyWord*)this; } POLYUNSIGNED LengthWord(void)const { return ((PolyWord*)this)[-1].AsUnsigned(); } POLYUNSIGNED Length(void)const { return OBJ_OBJECT_LENGTH(LengthWord()); } // Get and set a word PolyWord Get(POLYUNSIGNED i) const { return ((PolyWord*)this)[i]; } void Set(POLYUNSIGNED i, PolyWord v) { ((PolyWord*)this)[i] = v; } PolyWord *Offset(POLYUNSIGNED i) const { return ((PolyWord*)this)+i; } // Create a length word from a length and the flags in the top byte. void SetLengthWord(POLYUNSIGNED l, byte f) { ((POLYUNSIGNED*)this)[-1] = l | ((POLYUNSIGNED)f << OBJ_PRIVATE_FLAGS_SHIFT); } void SetLengthWord(POLYUNSIGNED l) { ((PolyWord*)this)[-1] = PolyWord::FromUnsigned(l); } bool IsByteObject(void) const { return OBJ_IS_BYTE_OBJECT(LengthWord()); } bool IsCodeObject(void) const { return OBJ_IS_CODE_OBJECT(LengthWord()); } bool IsStackObject(void) const { return OBJ_IS_STACK_OBJECT(LengthWord()); } bool IsWordObject(void) const { return OBJ_IS_WORD_OBJECT(LengthWord()); } bool IsMutable(void) const { return OBJ_IS_MUTABLE_OBJECT(LengthWord()); } bool IsWeakRefObject(void) const { return OBJ_IS_WEAKREF_OBJECT(LengthWord()); } bool IsNoOverwriteObject(void) const { return OBJ_IS_NO_OVERWRITE(LengthWord()); } bool ContainsForwardingPtr(void) const { return OBJ_IS_POINTER(LengthWord()); } PolyObject *GetForwardingPtr(void) const { return OBJ_GET_POINTER(LengthWord()); } void SetForwardingPtr(PolyObject *newp) { ((PolyWord*)this)[-1] = PolyWord::FromUnsigned(OBJ_SET_POINTER(newp)); } bool ContainsNormalLengthWord(void) const { return OBJ_IS_LENGTH(LengthWord()); } // Find the start of the constant section for a piece of code. // The first of these is really only needed because we may have objects whose length // words have been overwritten. void GetConstSegmentForCode(POLYUNSIGNED obj_length, PolyWord * &cp, POLYUNSIGNED &count) const { PolyWord *last_word = Offset(obj_length - 1); // Last word in the code count = last_word->AsUnsigned(); // This is the number of consts cp = last_word - count; } void GetConstSegmentForCode(PolyWord * &cp, POLYUNSIGNED &count) const { GetConstSegmentForCode(Length(), cp, count); } PolyWord *ConstPtrForCode(void) const { PolyWord *cp; POLYUNSIGNED count; GetConstSegmentForCode(cp, count); return cp; } }; /* There was a problem with version 2.95 on Sparc/Solaris at least. The PolyObject class has no members so classes derived from it e.g. ML_Cons_Cell should begin at the beginning of the object. Later versions of GCC get this right. */ #if defined(__GNUC__) && (__GNUC__ <= 2) #error Poly/ML requires GCC version 3 or newer #endif inline POLYUNSIGNED GetLengthWord(PolyWord p) { return p.AsObjPtr()->LengthWord(); } // Get the length of an object. inline POLYUNSIGNED OBJECT_LENGTH(PolyWord p) { return OBJ_OBJECT_LENGTH(GetLengthWord(p)); } #define OBJ_PTR_TO_CONSTS_PTR(pt, xp) xp = pt->ConstPtrForCode() // A list cell. This can be passed to or returned from certain RTS functions. class ML_Cons_Cell: public PolyObject { public: PolyWord h; PolyWord t; #define ListNull (TAGGED(0)) static bool IsNull(PolyWord p) { return p == ListNull; } }; /* An exception packet. This contains an identifier (either a tagged integer for RTS exceptions or the address of a mutable for those created within ML), a string name for printing and an exception argument value. */ class PolyException: public PolyObject { public: PolyWord ex_id; /* Exc identifier */ PolyWord ex_name;/* Exc name */ PolyWord arg; /* Exc arguments */ }; typedef PolyException poly_exn; /********************************************************************* * * Stack object * *********************************************************************/ class StackObject: public PolyObject { public: /* space available */ POLYUNSIGNED p_space; POLYCODEPTR p_pc; /* stack pointer */ PolyWord *p_sp; /* handler pointer */ PolyWord *p_hr; /* number of checked registers */ POLYUNSIGNED p_nreg; PolyWord p_reg[1]; }; /* * Stream tokens are pointers to UNTAGGED C integers * (stored in byte objects) */ class StreamToken: public PolyObject { public: POLYUNSIGNED streamNo; }; /*********************************************************************** * * Used by Mmapping. * ***********************************************************************/ //#define M_WRITABLE 0x1 //#define M_PROFILED 0x2 //#define M_DISCGARB1 0x40 /* Set on the source database when running discgarb. */ //#define M_DISCGARB2 0x80 /* Set on the destination database when running discgarb. */ //#define WRITABLE(f) ((f) & M_WRITABLE) //#define PROFILED(f) ((f) & M_PROFILED) //#define DISCGARB1(f) ((f) & M_DISCGARB1) //#define DISCGARB2(f) ((f) & M_DISCGARB2) typedef enum { NoMoreChildren,CannotCreate,CreatedOk } CStatus ; // We allocate memory in units of at least this value so we have an integral // number of words in the bitmaps. #define BITSPERWORD (sizeof(PolyWord)*8) /* How many units of size n do we need to hold an object of size m? */ #define ROUNDUP_UNITS(m,n) (((m) + (n) - 1) / (n)) #define ROUNDDOWN_UNITS(m,n) ((m) / (n)) /* Rounds m UP or DOWN to nearest multiple of n */ #define ROUNDUP(m,n) (ROUNDUP_UNITS(m,n) * (n)) #define ROUNDDOWN(m,n) (ROUNDDOWN_UNITS(m,n) * (n)) #define MBytes(n) ((n)*1024*1024) /********************************************************************** * * Low level definitions. * **********************************************************************/ /* Macro to round a number of bytes up to a number of words. */ #define WORDS(s) ((s+sizeof(PolyWord)-1)/sizeof(PolyWord)) /********************************************************************** * * Representation of option type. * **********************************************************************/ #define NONE_VALUE (TAGGED(0)) /* SOME x is represented by a single word cell containing x. */ #if (defined(WIN32)) /* Windows doesn't include 0x in %p format. */ #define ZERO_X "0x" #else #define ZERO_X "" #endif #endif polyml.5.2.1/libpolyml/int_opcodes.h0000644000175000017500000001301410506226526016461 0ustar daviddavid/* Title: Definitions for the code-tree instructions. Author: Dave Matthews, Cambridge University Computer Laboratory Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #define INSTR_enter_int 0x00 #if 0 /* for the mips version, we have the following relocations: */ INSTR_enter_int1 0x0d /* mips -> int at start of mips closure */ INSTR_enter_int2 0x91 /* used after int call instruction */ INSTR_return_w 0x92 /* int */ 0x90 same as INSTR_local_w /* why? */ #endif /* For use by the interpreter (only) SPF 26/6/95) */ #define INSTR_tail_0_0 0x01 #define INSTR_jump 0x02 #define INSTR_jump_false 0x03 #define INSTR_container 0x04 /* Added DCJM 5/10/05. */ #define INSTR_del_handler 0x05 #define INSTR_jump_i 0x06 #define INSTR_jump_i_false 0x07 #define INSTR_set_container 0x08 /* Added DCJM 5/10/05. */ #define INSTR_del_handler_i 0x09 #define INSTR_case 0x0a #define INSTR_call_sl 0x0b #define INSTR_call_closure 0x0c #define INSTR_return_w 0x0d /* relocated on mips! */ #define INSTR_pad 0x0e #define INSTR_raise_ex 0x10 #define INSTR_get_store_w 0x11 #define INSTR_non_local 0x12 #define INSTR_local_w 0x13 #define INSTR_indirect_w 0x14 #define INSTR_move_to_vec_w 0x15 #define INSTR_call_sl_X 0x16 /* Added DCJM 25/9/00. */ #define INSTR_set_stack_val_w 0x17 #define INSTR_reset_w 0x18 #define INSTR_reset_r_w 0x19 #define INSTR_const_addr 0x1a #define INSTR_const_int_w 0x1b #define INSTR_io_vec_entry 0x1c #define INSTR_const_nil 0x1d #define INSTR_jump_back 0x1e #define INSTR_return_b 0x1f #define INSTR_get_store_b 0x21 #define INSTR_local_b 0x22 #define INSTR_indirect_b 0x23 #define INSTR_move_to_vec_b 0x24 #define INSTR_set_stack_val_b 0x25 #define INSTR_reset_b 0x26 #define INSTR_reset_r_b 0x27 #define INSTR_const_int_b 0x28 #define INSTR_local_0 0x29 #define INSTR_local_1 0x2a #define INSTR_local_2 0x2b #define INSTR_local_3 0x2c #define INSTR_local_4 0x2d #define INSTR_local_5 0x2e #define INSTR_local_6 0x2f #define INSTR_local_7 0x30 #define INSTR_local_8 0x31 #define INSTR_local_9 0x32 #define INSTR_local_10 0x33 #define INSTR_local_11 0x34 #define INSTR_indirect_0 0x35 #define INSTR_indirect_1 0x36 #define INSTR_indirect_2 0x37 #define INSTR_indirect_3 0x38 #define INSTR_indirect_4 0x39 #define INSTR_indirect_5 0x3a #define INSTR_const_0 0x3b #define INSTR_const_1 0x3c #define INSTR_const_2 0x3d #define INSTR_const_3 0x3e #define INSTR_const_4 0x3f #define INSTR_const_10 0x40 #define INSTR_return_0 0x41 #define INSTR_return_1 0x42 #define INSTR_return_2 0x43 #define INSTR_return_3 0x44 #define INSTR_move_to_vec_0 0x45 #define INSTR_move_to_vec_1 0x46 #define INSTR_move_to_vec_2 0x47 #define INSTR_move_to_vec_3 0x48 #define INSTR_move_to_vec_4 0x49 #define INSTR_move_to_vec_5 0x4a #define INSTR_move_to_vec_6 0x4b #define INSTR_move_to_vec_7 0x4c #define INSTR_const_addr_Xb 0x4d /* Added DCJM 25/9/00. */ #define INSTR_const_addr_Xw 0x4e /* Added DCJM 25/9/00. */ #define INSTR_call_sl_cX 0x4f /* Added DCJM 25/9/00. */ #define INSTR_reset_1 0x50 #define INSTR_reset_2 0x51 #define INSTR_get_store_2 0x52 #define INSTR_get_store_3 0x53 #define INSTR_get_store_4 0x54 #define INSTR_tuple_container 0x55 /* Added DCJM 5/10/05. */ #define INSTR_non_local_l_1 0x56 #define INSTR_non_local_l_2 0x57 #define INSTR_non_local_l_3 0x58 #define INSTR_call_sl_c 0x59 #define INSTR_io_vec_5 0x5a #define INSTR_io_vec_6 0x5b #define INSTR_integer_add 0x5c #define INSTR_integer_minus 0x5d #define INSTR_integer_equal 0x5e #define INSTR_integer_leq 0x5f #define INSTR_integer_greater 0x60 #define INSTR_boolean_or 0x61 #define INSTR_word_equal 0x62 #define INSTR_assign_word 0x63 #define INSTR_reset_r_1 0x64 #define INSTR_reset_r_2 0x65 #define INSTR_reset_r_3 0x66 #define INSTR_tuple_w 0x67 #define INSTR_tuple_b 0x68 #define INSTR_tuple_2 0x69 #define INSTR_tuple_3 0x6a #define INSTR_tuple_4 0x6b #define INSTR_lock 0x6c #define INSTR_ldexc 0x6d #define INSTR_io_vec_225 0x6e #define INSTR_io_vec_226 0x6f #define INSTR_io_vec_229 0x70 #define INSTR_io_vec_233 0x71 #define INSTR_io_vec_236 0x72 #define INSTR_io_vec_251 0x73 #define INSTR_io_vec_253 0x74 #define INSTR_io_vec_255 0x75 #define INSTR_set_handler 0x76 #define INSTR_push_handler 0x78 #define INSTR_set_handler_i 0x7a #define INSTR_tail_b_b 0x7b #define INSTR_tail 0x7c #define INSTR_tail_3_b 0x7d #define INSTR_tail_4_b 0x7e #define INSTR_tail_3_2 0x7f #define INSTR_tail_3_3 0x80 polyml.5.2.1/libpolyml/interpret.cpp0000644000175000017500000015755210766755671016562 0ustar daviddavid/* Title: An interpreter for a compact instruction set. Author: Dave Matthews, Cambridge University Computer Laboratory Copyright (c) 2000-7 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifdef WIN32 #include "winconfig.h" #else #include "config.h" #endif #ifdef HAVE_STDIO_H #include #endif #ifdef HAVE_ASSERT_H #include #define ASSERT(x) assert(x) #else #define ASSERT(x) 0 #endif #include "globals.h" #include "int_opcodes.h" #include "machine_dep.h" #include "sys.h" #include "profiling.h" #include "arb.h" #include "processes.h" #include "run_time.h" #include "mpoly.h" #include "gc.h" #include "basicio.h" #include "timing.h" #include "arb.h" #include "reals.h" #include "objsize.h" #include "xwindows.h" #include "foreign.h" #include "process_env.h" #include "network.h" #include "basicio.h" #include "sighandler.h" #include "os_specific.h" #include "diagnostics.h" #include "polystring.h" #include "save_vec.h" #include "memmgr.h" #define VERSION_NUMBER POLY_version_number #define arg1 (pc[0] + pc[1]*256) #define arg2 (pc[2] + pc[3]*256) #define arg3 (pc[4] + pc[5]*256) #define arg4 (pc[6] + pc[7]*256) #define True TAGGED(1) #define False TAGGED(0) #define CHECKED_REGS 2 #define UNCHECKED_REGS 0 #define EXTRA_STACK 0 // Don't need any extra - signals aren't handled on the Poly stack. /* the amount of ML stack space to reserve for registers, C exception handling etc. The compiler requires us to reserve 2 stack-frames worth (2 * 20 words) plus whatever we require for the register save area. We actually reserve slightly more than this. SPF 3/3/97 */ #define OVERFLOW_STACK_SIZE \ (50 + \ sizeof(StackObject)/sizeof(PolyWord) + \ CHECKED_REGS + \ UNCHECKED_REGS + \ EXTRA_STACK) /* class IntTaskData: public MDTaskData { public: IntTaskData(): allocWords(0) {} POLYUNSIGNED allocWords; // The words to allocate. };*/ // Special values for return addresses or in the address of an exception handler. // In an exception handler SPECIAL_PC_TRACE_EX means trace this exception, as // a return address it means exception_trace has returned. #define SPECIAL_PC_TRACE_EX TAGGED(0) #define SPECIAL_PC_END_THREAD TAGGED(1) class Interpreter : public MachineDependent { public: Interpreter() {} // Create a task data object. virtual MDTaskData *CreateTaskData(void) { return new MDTaskData(); } virtual void InitStackFrame(TaskData *taskData, Handle stack, Handle proc, Handle arg); // Switch to Poly and return with the io function to call. virtual int SwitchToPoly(TaskData *taskData); virtual void SetForRetry(TaskData *taskData, int ioCall) {} // Nothing to do virtual void InitInterfaceVector(void); virtual void SetException(TaskData *taskData, poly_exn *exc); virtual void InterruptCode(TaskData *taskData); virtual int GetIOFunctionRegisterMask(int ioCall) { return 0; } // GetPCandSPFromContext is used in time profiling. We can't get accurate info so return false. virtual bool GetPCandSPFromContext(TaskData *taskData, SIGNALCONTEXT *context, PolyWord * &sp, POLYCODEPTR &pc) { return false; } virtual void CallIO0(TaskData *taskData, Handle(*ioFun)(TaskData *)); virtual void CallIO1(TaskData *taskData, Handle(*ioFun)(TaskData *, Handle)); virtual void CallIO2(TaskData *taskData, Handle(*ioFun)(TaskData *, Handle, Handle)); virtual void CallIO3(TaskData *taskData, Handle(*ioFun)(TaskData *, Handle, Handle, Handle)); virtual void CallIO4(TaskData *taskData, Handle(*ioFun)(TaskData *, Handle, Handle, Handle, Handle)); virtual void CallIO5(TaskData *taskData, Handle(*ioFun)(TaskData *, Handle, Handle, Handle, Handle, Handle)); virtual Handle CallBackResult(TaskData *taskData); virtual Architectures MachineArchitecture(void) { return MA_Interpreted; } // These next two have to be handled as special cases. They need to jump // to CALL_CLOSURE to handle the cases where the functions we are tracing or // calling are actually IO functions and don't have code addresses. Actually // we could instead make the interpreter handle small tagged integers as // code addresses specially. virtual void SetExceptionTrace(TaskData *taskData) { ASSERT(false); } virtual void CallCodeTupled(TaskData *taskData) { ASSERT(false); } }; void Interpreter::InitStackFrame(TaskData *taskData, Handle stackh, Handle proc, Handle arg) /* Initialise stack frame. */ { StackObject *stack = (StackObject *)DEREFWORDHANDLE(stackh); PolyObject *closure = DEREFWORDHANDLE(proc); POLYUNSIGNED stack_size = stack->Length(); stack->p_space = OVERFLOW_STACK_SIZE; stack->p_pc = *(byte**)(closure); stack->p_sp = (PolyWord*)stack + stack_size-3; /* sp */ stack->p_nreg = CHECKED_REGS; /* exception arg and last instruction. */ stack->p_reg[CHECKED_REGS] = PolyWord::FromUnsigned(UNCHECKED_REGS); stack->p_reg[0] = TAGGED(0); /* Used for exception argument. */ stack->p_reg[1] = TAGGED(256); /* No instruction. */ stack->p_sp = (PolyWord*)stack + stack_size; /* Set up exception handler */ /* No previous handler so point it at itself. */ stack->p_sp--; *(stack->p_sp) = PolyWord::FromStackAddr(stack->p_sp); *(--stack->p_sp) = SPECIAL_PC_END_THREAD; /* Default return address. */ *(--stack->p_sp) = TAGGED(0); /* Default handler. */ stack->p_hr = stack->p_sp; /* If this function takes an argument store it on the stack. */ if (arg != 0) *(--stack->p_sp) = DEREFWORD(arg); *(--stack->p_sp) = SPECIAL_PC_END_THREAD; /* Return address. */ *(--stack->p_sp) = closure; /* Closure address */ } int interrupt_requested = 0; int profile_count_wanted = 0; void Interpreter::InterruptCode(TaskData *taskData) /* Stop the Poly code at a suitable place. */ /* We may get an asynchronous interrupt at any time. */ { interrupt_requested = 1; } void Interpreter::SetException(TaskData *taskData, poly_exn *exc) /* Set up the stack of a process to raise an exception. */ { taskData->stack->p_reg[1] = TAGGED(INSTR_raise_ex); *(--taskData->stack->p_sp) = (PolyWord)exc; /* push exception data */ } int Interpreter::SwitchToPoly(TaskData *taskData) /* (Re)-enter the Poly code from C. */ { register PolyWord *sp; /* Stack pointer. */ register byte *pc; /* Program counter. */ register PolyWord *sl; /* Stack limit register. */ register int li; /* Last instruction. */ POLYUNSIGNED tailCount; PolyWord *tailPtr; POLYUNSIGNED returnCount; POLYUNSIGNED storeWords = 0; int instrBytes; RESTART: /* Load or reload the registers and run the code. */ if (taskData->allocPointer <= taskData->allocLimit + storeWords || (userOptions.debug & DEBUG_FORCEGC)) { if (taskData->allocPointer < taskData->allocLimit) Crash ("Bad length in heap overflow trap"); // Find some space to allocate in. Updates taskData->allocPointer and // returns a pointer to the newly allocated space (if allocWords != 0) PolyWord *space = processes->FindAllocationSpace(taskData, storeWords, true); if (space != 0) // Undo the allocation just now. We'll redo it now we have the store. taskData->allocPointer += storeWords; } storeWords = 0; sp = taskData->stack->p_sp; /* Reload these. */ pc = taskData->stack->p_pc; li = UNTAGGED(taskData->stack->p_reg[1]); sl = (PolyWord*)taskData->stack+OVERFLOW_STACK_SIZE; if (li != 256) goto RETRY; /* Re-execute instruction if necessary. */ for(;;){ /* Each instruction */ // char buff[100]; li = *pc++; /* Get next instruction. */ RETRY: // sprintf(buff, "PC=%x, i=%x\n", pc, li); // OutputDebugString(buff); /* Check for stack overflow and interrupts. These can be done less frequently than every instruction. */ if (sp < sl) { taskData->stack->p_sp = sp; taskData->stack->p_pc = pc; taskData->stack->p_reg[1] = TAGGED(li); CheckAndGrowStack(taskData, sp); goto RESTART; } if (interrupt_requested) { interrupt_requested = 0; taskData->stack->p_sp = sp; taskData->stack->p_pc = pc; taskData->stack->p_reg[1] = TAGGED(li); return -1; } if (profile_count_wanted) { add_count(taskData, pc, sp, profile_count_wanted); profile_count_wanted = 0; } switch(li) { case INSTR_enter_int: pc++; /* Skip the argument. */ break; case INSTR_jump_false: { PolyWord u = *sp++; /* Pop argument */ if (u == True) { pc += 1; break; } /* else - false - take the jump */ } case INSTR_jump: pc += *pc + 1; break; case INSTR_push_handler: /* Save the old handler value. */ *(--sp) = PolyWord::FromStackAddr(taskData->stack->p_hr); /* Push old handler */ break; case INSTR_set_handler: /* Set up a handler */ *(--sp) = PolyWord::FromCodePtr(pc + *pc + 1); /* Address of handler */ taskData->stack->p_hr = sp-1; /*Point to identifier about to be pushed*/ pc += 1; break; case INSTR_del_handler: /* Delete handler retaining the result. */ { PolyWord u = *sp++; sp = taskData->stack->p_hr; PolyWord *t; PolyWord *endStack = taskData->stack->Offset(taskData->stack->Length()); while ((t = (*sp).AsStackAddr()) < sp || t > endStack) sp++; taskData->stack->p_hr = t; *sp = u; pc += *pc + 1; /* Skip the handler */ break; } case INSTR_jump_i_false: if (*sp++ == True) { pc += 1; break; } /* else - false - take the jump */ case INSTR_jump_i: /* Indirect jump */ { pc += *pc + 1; /* This may jump backwards. */ int u = arg1; if (u > 32767) u -= 65536; pc += u + 2; break; } case INSTR_set_handler_i: /* Set up a handler */ { byte *u = pc + *pc + 1; *(--sp) = /* Address of handler */ PolyWord::FromCodePtr(u + u[0] + u[1]*256 + 2); taskData->stack->p_hr = sp-1; pc += 1; break; } case INSTR_del_handler_i: /* Delete handler retaining the result. */ { PolyWord u = *sp++; PolyWord *t; sp = taskData->stack->p_hr; PolyWord *endStack = taskData->stack->Offset(taskData->stack->Length()); while((t = (*sp).AsStackAddr()) < sp || t > endStack) sp++; taskData->stack->p_hr = t; *sp = u; pc += *pc + 1; /* Skip the handler */ pc += arg1 + 2; break; } case INSTR_case: { POLYSIGNED u = UNTAGGED(*sp++); /* Get the value */ if (u > arg1 || u < 0) pc += (arg1+2)*2; /* Out of range */ else { pc += 2; pc += /* Index */pc[u*2]+pc[u*2 + 1]*256; } break; } case INSTR_call_sl: /* Static link call */ { /* Get static link value. */ PolyWord *t = sp+arg2; for(int i = 1; i <= arg3; i++) t = (t[-1]).AsStackAddr(); PolyWord *constAddr = (PolyWord*)(pc+arg1+2); /* Get entry point. */ *(--sp) = PolyWord::FromCodePtr(pc+6); /* Push return address to point after instruction. */ *(--sp) = PolyWord::FromStackAddr(t); /* Push static link */ pc = (*constAddr).AsCodePtr(); break; } case INSTR_call_sl_X: { /* Get static link value. */ PolyWord *t = sp+arg3; for(int u = 1; u <= arg4; u++) t = (t[-1]).AsStackAddr(); PolyWord *constAddr = (PolyWord*)(pc+arg2+(arg1+4)*sizeof(PolyWord)+4); /* Get entry point. */ *(--sp) = PolyWord::FromCodePtr(pc+8); /* Push return address to point after instruction. */ *(--sp) = PolyWord::FromStackAddr(t); /* Push static link */ pc = (*constAddr).AsCodePtr(); break; } case INSTR_tail_3_b: tailCount = 3; tailPtr = sp + tailCount; sp = tailPtr + *pc; goto TAIL_CALL; case INSTR_tail_3_2: tailCount = 3; tailPtr = sp + tailCount; sp = tailPtr + 2; goto TAIL_CALL; case INSTR_tail_3_3: tailCount = 3; tailPtr = sp + tailCount; sp = tailPtr + 3; goto TAIL_CALL; case INSTR_tail_4_b: tailCount = 4; tailPtr = sp + tailCount; sp = tailPtr + *pc; goto TAIL_CALL; case INSTR_tail_b_b: tailCount = *pc; tailPtr = sp + tailCount; sp = tailPtr + pc[1]; goto TAIL_CALL; case INSTR_tail: /* Tail recursive call. */ /* Move items up the stack. */ /* There may be an overlap if the function we are calling has more args than this one. */ tailCount = arg1; tailPtr = sp + tailCount; sp = tailPtr + arg2; TAIL_CALL: /* For general case. */ if (tailCount < 2) Crash("Invalid argument\n"); for (; tailCount > 0; tailCount--) *(--sp) = *(--tailPtr); pc = (*sp++).AsCodePtr(); /* Pop the original return address. */ li = INSTR_call_closure; /* If we have to re-execute. */ /* And drop through. */ case INSTR_call_closure: /* Closure call - may be machine code. */ CALL_CLOSURE: /* Jumped to from POLY_SYS_callcode */ { PolyWord *t = (*sp).AsStackAddr(); /* Closure */ PolyWord u = *t; /* Get code address. (1st word of closure) */ if (IS_INT(u)) { /* Closure address is io vector */ sp++; /* Remove closure. */ POLYSIGNED uu = UNTAGGED(u); switch(uu) { case POLY_SYS_callcode_tupled: { t = (*sp++).AsStackAddr(); PolyWord v = t[1]; /* Arguments. */ if (v != TAGGED(0)) /* No args. */ { PolyWord *vv = v.AsStackAddr(); POLYUNSIGNED u = v.AsObjPtr()->Length(); /* No. of args. */ for (; u > 0; u--) *(--sp) = *(vv++); } *(--sp) = t[0]; /* Push closure. */ goto CALL_CLOSURE; } case POLY_SYS_int_eq: u = *sp++; *sp = (u == *sp)?True:False; break; case POLY_SYS_int_neq: u = *sp++; *sp = (u != *sp)?True:False; break; case POLY_SYS_word_eq: u = *sp++; *sp = u == *sp ? True : False; break; case POLY_SYS_word_neq: u = *sp++; *sp = u == *sp ? False : True; break; case POLY_SYS_word_geq: u = *sp++; *sp = ((*sp).AsUnsigned() >= u.AsUnsigned())?True:False; break; case POLY_SYS_word_leq: u = *sp++; *sp = ((*sp).AsUnsigned() <= u.AsUnsigned())?True:False; break; case POLY_SYS_word_gtr: u = *sp++; *sp = ((*sp).AsUnsigned() > u.AsUnsigned())?True:False; break; case POLY_SYS_word_lss: u = *sp++; *sp = ((*sp).AsUnsigned() < u.AsUnsigned())?True:False; break; case POLY_SYS_or_word: u = *sp++; *sp = TAGGED(UNTAGGED(*sp) | UNTAGGED(u)); break; case POLY_SYS_and_word: u = *sp++; *sp = TAGGED(UNTAGGED(*sp) & UNTAGGED(u)); break; case POLY_SYS_not_bool: *sp = (*sp == True) ? False : True; break; case POLY_SYS_string_length: /* Length is first word of string unless it is a single character. */ if (IS_INT(*sp)) *sp = TAGGED(1); else *sp = TAGGED(((PolyStringObject*)(*sp).AsObjPtr())->length); break; case POLY_SYS_set_string_length: { /* Store the length word of a string. */ POLYUNSIGNED len = UNTAGGED(*sp++); ((PolyStringObject*)(*sp).AsObjPtr())->length = len; *sp = TAGGED(0); break; } case POLY_SYS_mul_word: u = *sp++; *sp = TAGGED(UNTAGGED_UNSIGNED(*sp) * UNTAGGED_UNSIGNED(u)); break; case POLY_SYS_plus_word: u = *sp++; *sp = TAGGED(UNTAGGED_UNSIGNED(*sp) + UNTAGGED_UNSIGNED(u)); break; case POLY_SYS_minus_word: u = *sp++; *sp = TAGGED(UNTAGGED_UNSIGNED(*sp) - UNTAGGED_UNSIGNED(u)); break; case POLY_SYS_div_word: { POLYUNSIGNED u = UNTAGGED_UNSIGNED(*sp++); if (u == 0) raise_exception0(taskData, EXC_divide); *sp = TAGGED(UNTAGGED_UNSIGNED(*sp) / u); break; } case POLY_SYS_mod_word: { POLYUNSIGNED u = UNTAGGED_UNSIGNED(*sp++); if (u == 0) raise_exception0(taskData, EXC_divide); // It's essential to use UNTAGGED_UNSIGNED here. // The old version used UNTAGGED which uses an arithmetic shift // and produces the wrong answer. *sp = TAGGED(UNTAGGED_UNSIGNED(*sp) % u); break; } case POLY_SYS_xor_word: { PolyWord u = *sp++; *sp = TAGGED(UNTAGGED_UNSIGNED(*sp) ^ UNTAGGED_UNSIGNED(u)); break; } case POLY_SYS_shift_left_word: { PolyWord u = *sp++; if (UNTAGGED_UNSIGNED(u) > sizeof(PolyWord)*8) *sp = TAGGED(0); else *sp = TAGGED(UNTAGGED_UNSIGNED(*sp) << UNTAGGED_UNSIGNED(u)); break; } case POLY_SYS_shift_right_word: { PolyWord u = *sp++; if (UNTAGGED_UNSIGNED(u) > sizeof(PolyWord)*8) *sp = TAGGED(0); else *sp = TAGGED(UNTAGGED_UNSIGNED(*sp) >> UNTAGGED_UNSIGNED(u)); break; } case POLY_SYS_shift_right_arith_word: { PolyWord u = *sp++; if (UNTAGGED_UNSIGNED(u) > sizeof(PolyWord)*8) { if (UNTAGGED_UNSIGNED(*sp) < 0) *sp = TAGGED(-1); else *sp = TAGGED(0); } else *sp = TAGGED(UNTAGGED_UNSIGNED(*sp) >> UNTAGGED_UNSIGNED(u)); break; } case POLY_SYS_load_byte: { POLYUNSIGNED u = UNTAGGED(*sp++); *sp = TAGGED((*sp).AsCodePtr()[u]); break; } case POLY_SYS_load_word: { POLYUNSIGNED u = UNTAGGED(*sp++); *sp = (*sp).AsObjPtr()->Get(u); break; } case POLY_SYS_assign_byte: { POLYUNSIGNED t = UNTAGGED(*sp++); POLYUNSIGNED u = UNTAGGED(*sp++); (*sp).AsCodePtr()[u] = (byte)t; *sp = TAGGED(0); break; } case POLY_SYS_assign_word: { PolyWord t = *sp++; POLYUNSIGNED u = UNTAGGED(*sp++); (*sp).AsStackAddr()[u] = t; *sp = TAGGED(0); break; } case POLY_SYS_lockseg: { PolyObject *obj = (*sp).AsObjPtr(); POLYUNSIGNED lengthW = obj->LengthWord(); /* Clear the mutable bit. */ obj->SetLengthWord(lengthW & ~_OBJ_MUTABLE_BIT); *sp = TAGGED(0); break; } case POLY_SYS_get_length: /* Return the length word. */ *sp = TAGGED((*sp).AsObjPtr()->Length()); break; case POLY_SYS_is_short: *sp = IS_INT(*sp) ? TAGGED(1) : TAGGED(0); break; case POLY_SYS_io_operation: /* The io_operation call has changed between the old Poly version and the new ML version. In Poly it took two parameters, the first always being an empty type. In ML it takes just one parameter. */ if (*sp == TAGGED(0)) sp++; *sp = (PolyObject*)IoEntry(UNTAGGED(*sp)); break; case POLY_SYS_exception_trace: u = *sp; /* Procedure to call. */ *(--sp) = PolyWord::FromCodePtr(pc); /* Push a return address. */ *(--sp) = PolyWord::FromStackAddr(taskData->stack->p_hr); /* Push old handler */ *(--sp) = SPECIAL_PC_TRACE_EX; /* Marks exception trace. */ *(--sp) = TAGGED(0); /* Catch everything. */ taskData->stack->p_hr = sp; /* Handler is here. */ pc = (SPECIAL_PC_TRACE_EX).AsCodePtr(); /* Special return address. */ *(--sp) = TAGGED(0); /* Unit argument to the function. */ *(--sp) = u; /* Push the procedure. */ goto CALL_CLOSURE; case POLY_SYS_is_big_endian: { union { unsigned long wrd; char chrs[sizeof(unsigned long)]; } endian; endian.wrd = 1; *(--sp) = endian.chrs[0] == 0 ? TAGGED(1) : TAGGED(0); break; } case POLY_SYS_bytes_per_word: *(--sp) = TAGGED(sizeof(PolyWord)); break; default: // For all the calls that aren't built in ... /* Save the state so that the instruction can be retried if necessary. */ taskData->stack->p_pc = pc; /* Pc value after instruction. */ taskData->stack->p_reg[1] = TAGGED(li); /* Previous instruction. */ taskData->stack->p_sp = sp-1; /* Include the closure address. */ return uu; } } /* End of system calls. */ else { sp--; *sp = sp[1]; /* Move closure up. */ sp[1] = PolyWord::FromCodePtr(pc); /* Save return address. */ pc = u.AsCodePtr(); /* Get entry point. */ } } break; case INSTR_return_w: returnCount = arg1; /* Get no. of args to remove. */ RETURN: /* Common code for return. */ { PolyWord result = *sp++; /* Result */ sp++; /* Remove the link/closure */ pc = (*sp++).AsCodePtr(); /* Return address */ sp += returnCount; /* Add on number of args. */ if (pc == (SPECIAL_PC_END_THREAD).AsCodePtr()) exitThread(taskData); // This thread is exiting. else if (pc == (SPECIAL_PC_TRACE_EX).AsCodePtr()) { /* Return from a call to exception_trace when an exception has not been raised. */ sp += 1; taskData->stack->p_hr = (sp[1]).AsStackAddr(); *sp = result; returnCount = 1; goto RETURN; } *(--sp) = result; /* Result */ } break; case INSTR_return_b: returnCount = *pc; goto RETURN; case INSTR_return_0: returnCount = 0; goto RETURN; case INSTR_return_1: returnCount = 1; goto RETURN; case INSTR_return_2: returnCount = 2; goto RETURN; case INSTR_return_3: returnCount = 3; goto RETURN; case INSTR_pad: /* No-op */ break; case INSTR_raise_ex: { PolyException *exn = (PolyException*)((*sp).AsObjPtr()); taskData->stack->p_reg[0] = exn; /* Get exception data */ PolyWord exId = exn->ex_id; /* Get exception identifier. */ taskData->stack->p_sp = sp; /* Save this in case of trace. */ PolyWord *t = taskData->stack->p_hr; /* First handler */ PolyWord *endStack = taskData->stack->Offset(taskData->stack->Length()); /* Handlers consist of one or more pairs of identifier and code address, followed by the address of the next handler. */ while (*t != TAGGED(0) && *t != exId) { /* Loop until we find an ELSE handler or one that matches */ t += 2; /* Go on to next. */ /* If it points into stack it must be a pointer to the next handler. */ if ((*t).AsStackAddr() > t && (*t).AsStackAddr() < endStack) t = (*t).AsStackAddr(); } t++; /* Skip over the identifier to point at the code address. */ if (*t == SPECIAL_PC_TRACE_EX) { /* Trace this exception. */ *sp = PolyWord::FromCodePtr(pc); /* So that this proc. will be included. */ t++; /* Next handler. */ PolyWord *nextHandler = t; Handle marker = taskData->saveVec.mark(); try { ex_tracec(taskData, taskData->saveVec.push(taskData->stack->p_reg[0]), taskData->saveVec.push(PolyWord::FromStackAddr(nextHandler))); } catch (IOException) { } taskData->saveVec.reset(marker); // This will have reraised the xception by calling SetException goto RESTART; } else if (*t == SPECIAL_PC_END_THREAD) exitThread(taskData); // Default handler for thread. taskData->stack->p_pc = (*t).AsCodePtr(); /* Now remove this handler. */ sp = t; while ((t = (*sp).AsStackAddr()) < sp || t > endStack) sp++; taskData->stack->p_hr = t; /* Restore old handler */ sp++; /* Remove that entry. */ taskData->stack->p_sp = sp; taskData->stack->p_reg[1] = TAGGED(256); /* Get the next instruction. */ goto RESTART; /* Restart in case pc is persistent (??? Still relevant????). */ } case INSTR_get_store_w: { storeWords = arg1+1; instrBytes = 2; // Number of bytes of arg of instruction GET_STORE: /* Common code for allocation. */ taskData->allocPointer -= storeWords; if (taskData->allocPointer < taskData->allocLimit) { taskData->allocPointer += storeWords; taskData->stack->p_sp = sp; taskData->stack->p_pc = pc; taskData->stack->p_reg[1] = TAGGED(li); goto RESTART; } pc += instrBytes; storeWords--; // Remove the length word from the count *taskData->allocPointer = PolyWord::FromUnsigned(storeWords | _OBJ_MUTABLE_BIT); /* Allocation must be mutable! */ PolyWord *t = taskData->allocPointer+1; for(; storeWords > 0; ) t[--storeWords] = PolyWord::FromUnsigned(0); /* Must initialise store! */ *(--sp) = PolyWord::FromStackAddr(t); break; } case INSTR_get_store_2: storeWords = 2+1; instrBytes = 0; goto GET_STORE; case INSTR_get_store_3: storeWords = 3+1; instrBytes = 0; goto GET_STORE; case INSTR_get_store_4: storeWords = 4+1; instrBytes = 0; goto GET_STORE; case INSTR_get_store_b: storeWords = *pc+1; instrBytes = 1; goto GET_STORE; case INSTR_tuple_w: { storeWords = arg1+1; instrBytes = 2; TUPLE: /* Common code for tupling. */ taskData->allocPointer -= storeWords; if (taskData->allocPointer < taskData->allocLimit) { taskData->allocPointer += storeWords; taskData->stack->p_sp = sp; taskData->stack->p_pc = pc; taskData->stack->p_reg[1] = TAGGED(li); goto RESTART; } pc += instrBytes; storeWords--; // Remove the length word from the count *taskData->allocPointer = PolyWord::FromUnsigned(storeWords); PolyWord *t = taskData->allocPointer+1; for(; storeWords > 0; ) t[--storeWords] = *sp++; *(--sp) = (PolyObject*)t; break; } case INSTR_tuple_2: storeWords = 2+1; instrBytes = 0; goto TUPLE; case INSTR_tuple_3: storeWords = 3+1; instrBytes = 0; goto TUPLE; case INSTR_tuple_4: storeWords = 4+1; instrBytes = 0; goto TUPLE; case INSTR_tuple_b: storeWords = *pc+1; instrBytes = 1; goto TUPLE; case INSTR_non_local: { PolyWord *t = sp+arg1; POLYSIGNED uu; for(uu = 1; uu <= arg2; uu++) t = (t[-1]).AsStackAddr(); uu = arg3; /* Can be negative. */ if (uu > 32767) uu -= 65536; *(--sp) = t[uu]; pc += 6; break; } case INSTR_local_w: { PolyWord u = sp[arg1]; *(--sp) = u; pc += 2; break; } case INSTR_indirect_w: *sp = (*sp).AsObjPtr()->Get(arg1); pc += 2; break; case INSTR_move_to_vec_w: { PolyWord u = *sp++; (*sp).AsObjPtr()->Set(arg1, u); pc += 2; break; } case INSTR_set_stack_val_w: { PolyWord u = *sp++; sp[arg1-1] = u; pc += 2; break; } case INSTR_reset_w: sp += arg1; pc += 2; break; case INSTR_reset_r_w: { PolyWord u = *sp; sp += arg1; *sp = u; pc += 2; break; } case INSTR_const_addr: *(--sp) = *(PolyWord*)(pc + arg1 + 2); pc += 2; break; case INSTR_const_addr_Xb: *(--sp) = (PolyWord::FromCodePtr(pc + (pc[0]+4)*sizeof(PolyWord) + pc[1] + pc[2]*256 + 3)).AsObjPtr()->Get(0); pc += 3; break; case INSTR_const_addr_Xw: *(--sp) = (PolyWord::FromCodePtr(pc + (arg1+4)*sizeof(PolyWord)+arg2 + 4)).AsObjPtr()->Get(0); pc += 4; break; case INSTR_const_int_w: *(--sp) = TAGGED(arg1); pc += 2; break; case INSTR_io_vec_entry: *(--sp) = (PolyObject*)IoEntry(*pc); pc += 1; break; case INSTR_const_nil: *(--sp) = (PolyWord)TAGGED(0); break; case INSTR_jump_back: pc -= *pc + 1; break; case INSTR_lock: { PolyObject *obj = (*sp).AsObjPtr(); obj->SetLengthWord(obj->LengthWord() & ~_OBJ_MUTABLE_BIT); break; } case INSTR_ldexc: *(--sp) = taskData->stack->p_reg[0]; break; case INSTR_local_b: { PolyWord u = sp[*pc]; *(--sp) = u; pc += 1; break; } case INSTR_indirect_b: *sp = (*sp).AsObjPtr()->Get(*pc); pc += 1; break; case INSTR_move_to_vec_b: { PolyWord u = *sp++; (*sp).AsObjPtr()->Set(*pc, u); pc += 1; break; } case INSTR_set_stack_val_b: { PolyWord u = *sp++; sp[*pc-1] = u; pc += 1; break; } case INSTR_reset_b: sp += *pc; pc += 1; break; case INSTR_reset_r_b: { PolyWord u = *sp; sp += *pc; *sp = u; pc += 1; break; } case INSTR_const_int_b: *(--sp) = TAGGED(*pc); pc += 1; break; case INSTR_local_0: { PolyWord u = sp[0]; *(--sp) = u; break; } case INSTR_local_1: { PolyWord u = sp[1]; *(--sp) = u; break; } case INSTR_local_2: { PolyWord u = sp[2]; *(--sp) = u; break; } case INSTR_local_3: { PolyWord u = sp[3]; *(--sp) = u; break; } case INSTR_local_4: { PolyWord u = sp[4]; *(--sp) = u; break; } case INSTR_local_5: { PolyWord u = sp[5]; *(--sp) = u; break; } case INSTR_local_6: { PolyWord u = sp[6]; *(--sp) = u; break; } case INSTR_local_7: { PolyWord u = sp[7]; *(--sp) = u; break; } case INSTR_local_8: { PolyWord u = sp[8]; *(--sp) = u; break; } case INSTR_local_9: { PolyWord u = sp[9]; *(--sp) = u; break; } case INSTR_local_10: { PolyWord u = sp[10]; *(--sp) = u; break; } case INSTR_local_11: { PolyWord u = sp[11]; *(--sp) = u; break; } case INSTR_indirect_0: if ((*sp) == PolyWord::FromStackAddr(IoEntry(55))) *sp = TAGGED(401); // We still seem to have some of the old AHL version number references. else *sp = (*sp).AsObjPtr()->Get(0); break; case INSTR_indirect_1: *sp = (*sp).AsObjPtr()->Get(1); break; case INSTR_indirect_2: *sp = (*sp).AsObjPtr()->Get(2); break; case INSTR_indirect_3: *sp = (*sp).AsObjPtr()->Get(3); break; case INSTR_indirect_4: *sp = (*sp).AsObjPtr()->Get(4); break; case INSTR_indirect_5: *sp = (*sp).AsObjPtr()->Get(5); break; case INSTR_const_0: *(--sp) = TAGGED(0); break; case INSTR_const_1: *(--sp) = TAGGED(1); break; case INSTR_const_2: *(--sp) = TAGGED(2); break; case INSTR_const_3: *(--sp) = TAGGED(3); break; case INSTR_const_4: *(--sp) = TAGGED(4); break; case INSTR_const_10: *(--sp) = TAGGED(10); break; /* move_to_vec only occurs to newly allocated store so there is no problem with persistent store faults. */ case INSTR_move_to_vec_0: { PolyWord u = *sp++; (*sp).AsObjPtr()->Set(0, u); break; } case INSTR_move_to_vec_1: { PolyWord u = *sp++; (*sp).AsObjPtr()->Set(1, u); break; } case INSTR_move_to_vec_2: { PolyWord u = *sp++; (*sp).AsObjPtr()->Set(2, u); break; } case INSTR_move_to_vec_3: { PolyWord u = *sp++; (*sp).AsObjPtr()->Set(3, u); break; } case INSTR_move_to_vec_4: { PolyWord u = *sp++; (*sp).AsObjPtr()->Set(4, u); break; } case INSTR_move_to_vec_5: { PolyWord u = *sp++; (*sp).AsObjPtr()->Set(5, u); break; } case INSTR_move_to_vec_6: { PolyWord u = *sp++; (*sp).AsObjPtr()->Set(6, u); break; } case INSTR_move_to_vec_7: { PolyWord u = *sp++; (*sp).AsObjPtr()->Set(7, u); break; } case INSTR_reset_r_1: { PolyWord u = *sp; sp += 1; *sp = u; break; } case INSTR_reset_r_2: { PolyWord u = *sp; sp += 2; *sp = u; break; } case INSTR_reset_r_3: { PolyWord u = *sp; sp += 3; *sp = u; break; } case INSTR_reset_1: sp += 1; break; case INSTR_reset_2: sp += 2; break; case INSTR_non_local_l_1: { POLYSIGNED uu = *pc; PolyWord u = (sp[uu >> 4]).AsStackAddr()[(uu & 0xf) - 6]; *(--sp) = u; pc += 1; break; } case INSTR_non_local_l_2: { POLYSIGNED uu = *pc; PolyWord *t = sp[uu >> 4].AsStackAddr() -1; *(--sp) = (*t).AsStackAddr()[(uu & 0xf) - 6]; pc += 1; break; } case INSTR_non_local_l_3: { POLYSIGNED uu = *pc; PolyWord *t = sp[uu >> 4].AsStackAddr() -1; t = (*t).AsStackAddr() - 1; *(--sp) = (*t).AsStackAddr()[(uu & 0xf) - 6]; pc += 1; break; } case INSTR_call_sl_c: /* Static link call */ { /* Get static link value. */ POLYSIGNED uu = pc[2]; PolyWord *t = sp + (uu >> 4) + 2; for(uu = uu & 0xf; uu > 0; uu--) t = t[-1].AsStackAddr(); PolyWord u = PolyWord::FromCodePtr(pc+arg1+2); /* Get entry point. */ *(--sp) = PolyWord::FromCodePtr(pc+3); /* Push return address to point after instruction. */ *(--sp) = PolyWord::FromStackAddr(t); /* Push static link */ pc = u.AsObjPtr()->Get(0).AsCodePtr(); break; } case INSTR_call_sl_cX: { /* Get static link value. */ POLYUNSIGNED uu = pc[3]; PolyWord *t = sp + (uu >> 4) + 2; for(uu = uu & 0xf; uu > 0; uu--) t = t[-1].AsStackAddr(); // This splits the offset into a number of words and a number of bytes // That's needed to try to make the code portable between 32 and 64 bit machines. PolyWord u = PolyWord::FromCodePtr(pc + (pc[0]+4)*sizeof(PolyWord) + pc[1] + pc[2]*256+3); /* Get entry point. */ *(--sp) = PolyWord::FromCodePtr(pc+4); /* Push return address to point after instruction. */ *(--sp) = PolyWord::FromStackAddr(t); /* Push static link */ pc = u.AsObjPtr()->Get(0).AsCodePtr(); break; } case INSTR_io_vec_229: *(--sp) = (PolyObject*)IoEntry(POLY_SYS_int_eq); break; case INSTR_io_vec_233: *(--sp) = (PolyObject*)IoEntry(POLY_SYS_int_gtr); break; case INSTR_io_vec_236: *(--sp) = (PolyObject*)IoEntry(POLY_SYS_or_word); break; case INSTR_io_vec_251: *(--sp) = (PolyObject*)IoEntry(POLY_SYS_word_eq); break; case INSTR_io_vec_253: *(--sp) = (PolyObject*)IoEntry(POLY_SYS_load_word); break; case INSTR_io_vec_255: *(--sp) = (PolyObject*)IoEntry(POLY_SYS_assign_word); break; case INSTR_integer_equal: { PolyWord u = *sp++; *sp = (u == *sp)?True:False; break; } case INSTR_integer_leq: { POLYSIGNED uu = UNTAGGED(*sp++); *sp = (UNTAGGED(*sp) <= uu)?True:False; break; } case INSTR_integer_greater: { POLYSIGNED uu = UNTAGGED(*sp++); *sp = (UNTAGGED(*sp) > uu)?True:False; break; } case INSTR_boolean_or: { PolyWord u = *sp++; if (u == True) *sp = True; break; } case INSTR_word_equal: { PolyWord u = *sp++; if (u == *sp) *sp = True; else *sp = u == *sp ? True : False; break; } case INSTR_assign_word: { PolyWord u = *sp++; POLYUNSIGNED uu = UNTAGGED(*sp++); (*sp).AsObjPtr()->Set(uu, u); *sp = TAGGED(0); break; } case INSTR_container: /* Create a container. */ { /* This is supposed to be on the stack but that causes problems in gencde so we create a mutable segment on the heap. */ storeWords = arg1+1; taskData->allocPointer -= storeWords; if (taskData->allocPointer < taskData->allocLimit) { taskData->allocPointer += storeWords; taskData->stack->p_sp = sp; taskData->stack->p_pc = pc; taskData->stack->p_reg[1] = TAGGED(li); goto RESTART; } storeWords--; PolyObject *t = (PolyObject*)(taskData->allocPointer+1); t->SetLengthWord(storeWords, F_MUTABLE_BIT); for(; storeWords > 0; ) t->Set(--storeWords, TAGGED(0)); *(--sp) = t; /* Push the address of the container. */ pc += 2; break; } case INSTR_set_container: /* Copy a tuple into a container. */ { PolyWord u = *sp++; /* Pop the source tuple address. */ for (POLYSIGNED uu = arg1; uu > 0; ) { uu--; (*sp).AsObjPtr()->Set(uu, u.AsObjPtr()->Get(uu)); /* Copy the items. */ } sp++; pc += 2; break; } case INSTR_tuple_container: /* Create a tuple from a container. */ { storeWords = arg1+1; taskData->allocPointer -= storeWords; if (taskData->allocPointer < taskData->allocLimit) { taskData->allocPointer += storeWords; taskData->stack->p_sp = sp; taskData->stack->p_pc = pc; taskData->stack->p_reg[1] = TAGGED(li); goto RESTART; } storeWords--; PolyObject *t = (PolyObject *)(taskData->allocPointer+1); t->SetLengthWord(storeWords, 0); for(; storeWords > 0; ) { storeWords--; t->Set(storeWords, (*sp).AsObjPtr()->Get(storeWords)); } *sp = t; pc += 2; break; } default: Crash("Unknown instruction %x\n", li); } /* switch */ } /* for */ return 0; } /* MD_switch_to_poly */ void Interpreter::CallIO0(TaskData *taskData, Handle(*ioFun)(TaskData *)) { try { Handle result = (*ioFun)(taskData); *(taskData->stack->p_sp) = result->Word(); taskData->stack->p_reg[1] = TAGGED(256); /* Take next instruction. */ } catch (IOException) { } } void Interpreter::CallIO1(TaskData *taskData, Handle(*ioFun)(TaskData *, Handle)) { Handle funarg = taskData->saveVec.push(taskData->stack->p_sp[1]); try { Handle result = (*ioFun)(taskData, funarg); *(++taskData->stack->p_sp) = result->Word(); taskData->stack->p_reg[1] = TAGGED(256); /* Take next instruction. */ } catch (IOException) { } } void Interpreter::CallIO2(TaskData *taskData, Handle(*ioFun)(TaskData *, Handle, Handle)) { Handle funarg1 = taskData->saveVec.push(taskData->stack->p_sp[1]); Handle funarg2 = taskData->saveVec.push(taskData->stack->p_sp[2]); try { Handle result = (*ioFun)(taskData, funarg1, funarg2); taskData->stack->p_sp += 2; *(taskData->stack->p_sp) = DEREFWORD(result); taskData->stack->p_reg[1] = TAGGED(256); /* Take next instruction. */ } catch (IOException) { } } void Interpreter::CallIO3(TaskData *taskData, Handle(*ioFun)(TaskData *, Handle, Handle, Handle)) { Handle funarg1 = taskData->saveVec.push(taskData->stack->p_sp[1]); Handle funarg2 = taskData->saveVec.push(taskData->stack->p_sp[2]); Handle funarg3 = taskData->saveVec.push(taskData->stack->p_sp[3]); try { Handle result = (*ioFun)(taskData, funarg1, funarg2, funarg3); taskData->stack->p_sp += 3; *(taskData->stack->p_sp) = DEREFWORD(result); taskData->stack->p_reg[1] = TAGGED(256); /* Take next instruction. */ } catch (IOException) { } } void Interpreter::CallIO4(TaskData *taskData, Handle(*ioFun)(TaskData *, Handle, Handle, Handle, Handle)) { Handle funarg1 = taskData->saveVec.push(taskData->stack->p_sp[1]); Handle funarg2 = taskData->saveVec.push(taskData->stack->p_sp[2]); Handle funarg3 = taskData->saveVec.push(taskData->stack->p_sp[3]); Handle funarg4 = taskData->saveVec.push(taskData->stack->p_sp[4]); try { Handle result = (*ioFun)(taskData, funarg1, funarg2, funarg3, funarg4); taskData->stack->p_sp += 4; *(taskData->stack->p_sp) = DEREFWORD(result); taskData->stack->p_reg[1] = TAGGED(256); /* Take next instruction. */ } catch (IOException) { } } void Interpreter::CallIO5(TaskData *taskData, Handle(*ioFun)(TaskData *, Handle, Handle, Handle, Handle, Handle)) { Handle funarg1 = taskData->saveVec.push(taskData->stack->p_sp[1]); Handle funarg2 = taskData->saveVec.push(taskData->stack->p_sp[2]); Handle funarg3 = taskData->saveVec.push(taskData->stack->p_sp[3]); Handle funarg4 = taskData->saveVec.push(taskData->stack->p_sp[4]); Handle funarg5 = taskData->saveVec.push(taskData->stack->p_sp[5]); try { Handle result = (*ioFun)(taskData, funarg1, funarg2, funarg3, funarg4, funarg5); taskData->stack->p_sp += 5; *(taskData->stack->p_sp) = DEREFWORD(result); taskData->stack->p_reg[1] = TAGGED(256); /* Take next instruction. */ } catch (IOException) { } } // Return the callback result. The current ML process (thread) terminates. Handle Interpreter::CallBackResult(TaskData *taskData) { return taskData->saveVec.push(taskData->stack->p_sp[1]); } void Interpreter::InitInterfaceVector(void) { add_word_to_io_area(POLY_SYS_exit, TAGGED(POLY_SYS_exit)); add_word_to_io_area(POLY_SYS_alloc_store, TAGGED(POLY_SYS_alloc_store)); add_word_to_io_area(POLY_SYS_chdir, TAGGED(POLY_SYS_chdir)); add_word_to_io_area(POLY_SYS_get_length, TAGGED(POLY_SYS_get_length)); add_word_to_io_area(POLY_SYS_get_flags, TAGGED(POLY_SYS_get_flags)); add_word_to_io_area(POLY_SYS_str_compare, TAGGED(POLY_SYS_str_compare)); add_word_to_io_area(POLY_SYS_teststreq, TAGGED(POLY_SYS_teststreq)); add_word_to_io_area(POLY_SYS_teststrneq, TAGGED(POLY_SYS_teststrneq)); add_word_to_io_area(POLY_SYS_teststrgtr, TAGGED(POLY_SYS_teststrgtr)); add_word_to_io_area(POLY_SYS_teststrlss, TAGGED(POLY_SYS_teststrlss)); add_word_to_io_area(POLY_SYS_teststrgeq, TAGGED(POLY_SYS_teststrgeq)); add_word_to_io_area(POLY_SYS_teststrleq, TAGGED(POLY_SYS_teststrleq)); add_word_to_io_area(POLY_SYS_exception_trace, TAGGED(POLY_SYS_exception_trace)); add_word_to_io_area(POLY_SYS_lockseg, TAGGED(POLY_SYS_lockseg)); add_word_to_io_area(POLY_SYS_profiler, TAGGED(POLY_SYS_profiler)); add_word_to_io_area(POLY_SYS_is_short, TAGGED(POLY_SYS_is_short)); // add_word_to_io_area(POLY_SYS_raiseexception, TAGGED(POLY_SYS_raiseexception)); add_word_to_io_area(POLY_SYS_aplus, TAGGED(POLY_SYS_aplus)); add_word_to_io_area(POLY_SYS_aminus, TAGGED(POLY_SYS_aminus)); add_word_to_io_area(POLY_SYS_amul, TAGGED(POLY_SYS_amul)); add_word_to_io_area(POLY_SYS_adiv, TAGGED(POLY_SYS_adiv)); add_word_to_io_area(POLY_SYS_amod, TAGGED(POLY_SYS_amod)); add_word_to_io_area(POLY_SYS_aneg, TAGGED(POLY_SYS_aneg)); add_word_to_io_area(POLY_SYS_xora, TAGGED(POLY_SYS_xora)); add_word_to_io_area(POLY_SYS_ora, TAGGED(POLY_SYS_ora)); add_word_to_io_area(POLY_SYS_anda, TAGGED(POLY_SYS_anda)); add_word_to_io_area(POLY_SYS_Real_str, TAGGED(POLY_SYS_Real_str)); add_word_to_io_area(POLY_SYS_Real_geq, TAGGED(POLY_SYS_Real_geq)); add_word_to_io_area(POLY_SYS_Real_leq, TAGGED(POLY_SYS_Real_leq)); add_word_to_io_area(POLY_SYS_Real_gtr, TAGGED(POLY_SYS_Real_gtr)); add_word_to_io_area(POLY_SYS_Real_lss, TAGGED(POLY_SYS_Real_lss)); add_word_to_io_area(POLY_SYS_Real_eq, TAGGED(POLY_SYS_Real_eq)); add_word_to_io_area(POLY_SYS_Real_neq, TAGGED(POLY_SYS_Real_neq)); add_word_to_io_area(POLY_SYS_Real_Dispatch, TAGGED(POLY_SYS_Real_Dispatch)); add_word_to_io_area(POLY_SYS_equala, TAGGED(POLY_SYS_equala)); add_word_to_io_area(POLY_SYS_Add_real, TAGGED(POLY_SYS_Add_real)); add_word_to_io_area(POLY_SYS_Sub_real, TAGGED(POLY_SYS_Sub_real)); add_word_to_io_area(POLY_SYS_Mul_real, TAGGED(POLY_SYS_Mul_real)); add_word_to_io_area(POLY_SYS_Div_real, TAGGED(POLY_SYS_Div_real)); // add_word_to_io_area(POLY_SYS_Comp_real, TAGGED(POLY_SYS_Comp_real)); add_word_to_io_area(POLY_SYS_Neg_real, TAGGED(POLY_SYS_Neg_real)); add_word_to_io_area(POLY_SYS_Repr_real, TAGGED(POLY_SYS_Repr_real)); add_word_to_io_area(POLY_SYS_conv_real, TAGGED(POLY_SYS_conv_real)); add_word_to_io_area(POLY_SYS_real_to_int, TAGGED(POLY_SYS_real_to_int)); add_word_to_io_area(POLY_SYS_int_to_real, TAGGED(POLY_SYS_int_to_real)); add_word_to_io_area(POLY_SYS_sqrt_real, TAGGED(POLY_SYS_sqrt_real)); add_word_to_io_area(POLY_SYS_sin_real, TAGGED(POLY_SYS_sin_real)); add_word_to_io_area(POLY_SYS_cos_real, TAGGED(POLY_SYS_cos_real)); add_word_to_io_area(POLY_SYS_arctan_real, TAGGED(POLY_SYS_arctan_real)); add_word_to_io_area(POLY_SYS_exp_real, TAGGED(POLY_SYS_exp_real)); add_word_to_io_area(POLY_SYS_ln_real, TAGGED(POLY_SYS_ln_real)); add_word_to_io_area(POLY_SYS_io_operation, TAGGED(POLY_SYS_io_operation)); add_word_to_io_area(POLY_SYS_atomic_incr, TAGGED(POLY_SYS_atomic_incr)); add_word_to_io_area(POLY_SYS_atomic_decr, TAGGED(POLY_SYS_atomic_decr)); add_word_to_io_area(POLY_SYS_thread_self, TAGGED(POLY_SYS_thread_self)); add_word_to_io_area(POLY_SYS_thread_dispatch, TAGGED(POLY_SYS_thread_dispatch)); add_word_to_io_area(POLY_SYS_is_big_endian, TAGGED(POLY_SYS_is_big_endian)); add_word_to_io_area(POLY_SYS_bytes_per_word, TAGGED(POLY_SYS_bytes_per_word)); add_word_to_io_area(POLY_SYS_offset_address, TAGGED(POLY_SYS_offset_address)); add_word_to_io_area(POLY_SYS_objsize, TAGGED(POLY_SYS_objsize)); add_word_to_io_area(POLY_SYS_showsize, TAGGED(POLY_SYS_showsize)); add_word_to_io_area(POLY_SYS_shift_right_word, TAGGED(POLY_SYS_shift_right_word)); add_word_to_io_area(POLY_SYS_word_neq, TAGGED(POLY_SYS_word_neq)); add_word_to_io_area(POLY_SYS_not_bool, TAGGED(POLY_SYS_not_bool)); add_word_to_io_area(POLY_SYS_string_length, TAGGED(POLY_SYS_string_length)); add_word_to_io_area(POLY_SYS_int_eq, TAGGED(POLY_SYS_int_eq)); add_word_to_io_area(POLY_SYS_int_neq, TAGGED(POLY_SYS_int_neq)); add_word_to_io_area(POLY_SYS_int_geq, TAGGED(POLY_SYS_int_geq)); add_word_to_io_area(POLY_SYS_int_leq, TAGGED(POLY_SYS_int_leq)); add_word_to_io_area(POLY_SYS_int_gtr, TAGGED(POLY_SYS_int_gtr)); add_word_to_io_area(POLY_SYS_int_lss, TAGGED(POLY_SYS_int_lss)); add_word_to_io_area(POLY_SYS_mul_word, TAGGED(POLY_SYS_mul_word)); add_word_to_io_area(POLY_SYS_plus_word, TAGGED(POLY_SYS_plus_word)); add_word_to_io_area(POLY_SYS_minus_word, TAGGED(POLY_SYS_minus_word)); add_word_to_io_area(POLY_SYS_div_word, TAGGED(POLY_SYS_div_word)); add_word_to_io_area(POLY_SYS_or_word, TAGGED(POLY_SYS_or_word)); add_word_to_io_area(POLY_SYS_and_word, TAGGED(POLY_SYS_and_word)); add_word_to_io_area(POLY_SYS_xor_word, TAGGED(POLY_SYS_xor_word)); add_word_to_io_area(POLY_SYS_shift_left_word, TAGGED(POLY_SYS_shift_left_word)); add_word_to_io_area(POLY_SYS_mod_word, TAGGED(POLY_SYS_mod_word)); add_word_to_io_area(POLY_SYS_word_geq, TAGGED(POLY_SYS_word_geq)); add_word_to_io_area(POLY_SYS_word_leq, TAGGED(POLY_SYS_word_leq)); add_word_to_io_area(POLY_SYS_word_gtr, TAGGED(POLY_SYS_word_gtr)); add_word_to_io_area(POLY_SYS_word_lss, TAGGED(POLY_SYS_word_lss)); add_word_to_io_area(POLY_SYS_word_eq, TAGGED(POLY_SYS_word_eq)); add_word_to_io_area(POLY_SYS_load_byte, TAGGED(POLY_SYS_load_byte)); add_word_to_io_area(POLY_SYS_load_word, TAGGED(POLY_SYS_load_word)); add_word_to_io_area(POLY_SYS_assign_byte, TAGGED(POLY_SYS_assign_byte)); add_word_to_io_area(POLY_SYS_assign_word, TAGGED(POLY_SYS_assign_word)); add_word_to_io_area(POLY_SYS_timing_dispatch, TAGGED(POLY_SYS_timing_dispatch)); add_word_to_io_area(POLY_SYS_XWindows, TAGGED(POLY_SYS_XWindows)); add_word_to_io_area(POLY_SYS_full_gc, TAGGED(POLY_SYS_full_gc)); add_word_to_io_area(POLY_SYS_stack_trace, TAGGED(POLY_SYS_stack_trace)); add_word_to_io_area(POLY_SYS_foreign_dispatch, TAGGED(POLY_SYS_foreign_dispatch)); add_word_to_io_area(POLY_SYS_callcode_tupled, TAGGED(POLY_SYS_callcode_tupled)); add_word_to_io_area(POLY_SYS_process_env, TAGGED(POLY_SYS_process_env)); add_word_to_io_area(POLY_SYS_set_string_length, TAGGED(POLY_SYS_set_string_length)); add_word_to_io_area(POLY_SYS_get_first_long_word, TAGGED(POLY_SYS_get_first_long_word)); add_word_to_io_area(POLY_SYS_poly_specific, TAGGED(POLY_SYS_poly_specific)); add_word_to_io_area(POLY_SYS_shrink_stack, TAGGED(POLY_SYS_shrink_stack)); add_word_to_io_area(POLY_SYS_code_flags, TAGGED(POLY_SYS_code_flags)); add_word_to_io_area(POLY_SYS_shift_right_arith_word, TAGGED(POLY_SYS_shift_right_arith_word)); add_word_to_io_area(POLY_SYS_int_to_word, TAGGED(POLY_SYS_int_to_word)); add_word_to_io_area(POLY_SYS_set_code_constant,TAGGED(POLY_SYS_set_code_constant)); add_word_to_io_area(POLY_SYS_move_bytes, TAGGED(POLY_SYS_move_bytes)); add_word_to_io_area(POLY_SYS_move_words, TAGGED(POLY_SYS_move_words)); add_word_to_io_area(POLY_SYS_io_dispatch, TAGGED(POLY_SYS_io_dispatch)); add_word_to_io_area(POLY_SYS_network, TAGGED(POLY_SYS_network)); add_word_to_io_area(POLY_SYS_os_specific, TAGGED(POLY_SYS_os_specific)); add_word_to_io_area(POLY_SYS_signal_handler, TAGGED(POLY_SYS_signal_handler)); } static Interpreter interpreterObject; MachineDependent *machineDependent = &interpreterObject; polyml.5.2.1/libpolyml/io_internal.h0000644000175000017500000000615010663564002016457 0ustar daviddavid/* Title: Data structures shared between basioio.c and network.c. Copyright (c) 2000 David C. J. Matthews Portions of this code are derived from the original stream io package copyright CUTS 1983-2000. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef IO_INTERNAL_H #define IO_INTERNAL_H #define IO_BIT_OPEN 1 #define IO_BIT_READ 2 #define IO_BIT_WRITE 4 #define IO_BIT_DIR 8 /* Is it a directory entry? */ #define IO_BIT_SOCKET 16 /* Is it a socket? */ #define IO_BIT_INPROGRESS 64 /* "connect" in progress on socket. */ #ifdef WINDOWS_PC #define IO_BIT_PIPE 128 #define IO_BIT_DEV 256 #define IO_BIT_CONSOLE 512 #ifdef USEWINSOCK2 #include #else #include #endif #else typedef int SOCKET; //#include #endif #ifdef HAVE_DIRENT_H # include # define NAMLEN(dirent) strlen((dirent)->d_name) #else # define dirent direct # define NAMLEN(dirent) (dirent)->d_namlen # if HAVE_SYS_NDIR_H # include # endif # if HAVE_SYS_DIR_H # include # endif # if HAVE_NDIR_H # include # endif #endif typedef struct basic_io_struct { PolyObject *token; /* pointer into ML heap */ int ioBits; /* Flag bits */ union { int ioDesc; /* File descriptor. */ #ifdef WINDOWS_PC struct { HANDLE hFind; /* FindFirstFile handle */ WIN32_FIND_DATA lastFind; int fFindSucceeded; } directory; SOCKET sock; #else #define sock ioDesc DIR *ioDir; /* Directory entry. */ #endif } device; char lookAheadChar; /* Temporarily. This is needed for the old IO functions. */ } IOSTRUCT, *PIOSTRUCT; class TaskData; #define isOpen(s) ((s)->ioBits & IO_BIT_OPEN) #define isRead(s) ((s)->ioBits & IO_BIT_READ) #define isWrite(s) ((s)->ioBits & IO_BIT_WRITE) #define isDirectory(s) ((s)->ioBits & IO_BIT_DIR) #define isSocket(s) ((s)->ioBits & IO_BIT_SOCKET) #ifdef WINDOWS_PC #define isPipe(s) ((s)->ioBits & IO_BIT_PIPE) #define isDevice(s) ((s)->ioBits & IO_BIT_DEV) #define isConsole(s) ((s)->ioBits & IO_BIT_CONSOLE) #endif extern PIOSTRUCT get_stream(PolyObject *obj); extern Handle make_stream_entry(TaskData *mdTaskData); extern void free_stream_entry(unsigned stream_no); extern void close_stream(PIOSTRUCT str); extern PIOSTRUCT basic_io_vector; extern bool emfileFlag; #endif polyml.5.2.1/libpolyml/locking.cpp0000644000175000017500000001342010772160234016133 0ustar daviddavid/* Title: Mutex and Condition Variable library. Copyright (c) 2007 David C. J. Matthews Portions of this code are derived from the original stream io package copyright CUTS 1983-2000. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifdef WIN32 #include "winconfig.h" #else #include "config.h" #endif #ifdef HAVE_WINDOWS_H // We need the next define since TryEnterCriticalSection is only // defined in Win NT. This could mean that this code won't run under // Windows 95 or 98. #define _WIN32_WINNT 0x0400 #include #endif #if (defined(HAVE_LIBPTHREAD) && defined(HAVE_PTHREAD_H)) #define HAVE_PTHREAD 1 #include #endif #ifdef HAVE_ERRNO_H #include #endif #ifdef HAVE_SYS_TIME_H #include #endif #ifdef HAVE_TIME_H #include #endif #include "locking.h" PLock::PLock() { #ifdef HAVE_PTHREAD pthread_mutex_init(&lock, 0); #elif defined(HAVE_WINDOWS_H) InitializeCriticalSection(&lock); #endif } PLock::~PLock() { #ifdef HAVE_PTHREAD pthread_mutex_destroy(&lock); #elif defined(HAVE_WINDOWS_H) DeleteCriticalSection(&lock); #endif } void PLock::Lock(void) { #ifdef HAVE_PTHREAD pthread_mutex_lock(&lock); #elif defined(HAVE_WINDOWS_H) EnterCriticalSection(&lock); #endif // If we don't support threads this does nothing. } void PLock::Unlock(void) { #ifdef HAVE_PTHREAD pthread_mutex_unlock(&lock); #elif defined(HAVE_WINDOWS_H) LeaveCriticalSection(&lock); #endif } bool PLock::Trylock(void) { #ifdef HAVE_PTHREAD // Since we use normal mutexes this returns EBUSY if the // current thread owns the mutex. return pthread_mutex_trylock(&lock) != EBUSY; #elif defined(HAVE_WINDOWS_H) // This is not implemented properly in Windows. There is // TryEnterCriticalSection in Win NT and later but that // returns TRUE if the current thread owns the mutex. return TryEnterCriticalSection(&lock) == TRUE; #endif } PCondVar::PCondVar() { #ifdef HAVE_PTHREAD pthread_cond_init(&cond, NULL); #elif defined(HAVE_WINDOWS_H) // Create a manually set event initially set. cond = CreateEvent(NULL, TRUE, TRUE, NULL); #endif } PCondVar::~PCondVar() { #ifdef HAVE_PTHREAD pthread_cond_destroy(&cond); #elif defined(HAVE_WINDOWS_H) CloseHandle(cond); #endif } // Wait indefinitely. Drops the lock and reaquires it. void PCondVar::Wait(PLock *pLock) { #ifdef HAVE_PTHREAD pthread_cond_wait(&cond, &pLock->lock); #elif defined(HAVE_WINDOWS_H) // This code will NOT work as a general implementation of a // condition variable. It works provided we use it carefully. // We only use this in the situation where all the threads // that can wait on this condvar have waited before we then // release all of them. ResetEvent(cond); // Do this with the lock held. // Can now release the lock. It doesn't matter that releasing // the lock and waiting isn't atomic because the event is manually // reset. If another thread sets the event before we call WFSO we'll // simply return immediately. LeaveCriticalSection(&pLock->lock); WaitForSingleObject(cond, INFINITE); EnterCriticalSection(&pLock->lock); #endif } // Wait until a specified absolute time. Drops the lock and reaquires it. void PCondVar::WaitUntil(PLock *pLock, const void *timeArg) { #ifdef HAVE_PTHREAD pthread_cond_timedwait(&cond, &pLock->lock, (const struct timespec *)timeArg); #elif defined(HAVE_WINDOWS_H) FILETIME now; FILETIME *time = (FILETIME *)timeArg; GetSystemTimeAsFileTime(&now); LARGE_INTEGER liNow, liTime; liNow.HighPart = now.dwHighDateTime; liNow.LowPart = now.dwLowDateTime; liTime.HighPart = time->dwHighDateTime; liTime.LowPart = time->dwLowDateTime; if (liNow.QuadPart >= liTime.QuadPart) // Already past the time return; DWORD toWait = (DWORD)((liTime.QuadPart - liNow.QuadPart) / (LONGLONG)10000); ResetEvent(cond); // Do this with the lock held. LeaveCriticalSection(&pLock->lock); WaitForSingleObject(cond, toWait); EnterCriticalSection(&pLock->lock); #endif } // Wait for a number of milliseconds. Used within the RTS. Drops the lock and reaquires it. bool PCondVar::WaitFor(PLock *pLock, unsigned milliseconds) { #ifdef HAVE_PTHREAD struct timespec waitTime; struct timeval tv; if (gettimeofday(&tv, NULL) != 0) return false; waitTime.tv_sec = tv.tv_sec + milliseconds / 1000; waitTime.tv_nsec = tv.tv_usec * 1000 + milliseconds % 1000; if (waitTime.tv_nsec >= 1000*1000*1000) { waitTime.tv_nsec -= 1000*1000*1000; waitTime.tv_sec += 1; } return pthread_cond_timedwait(&cond, &pLock->lock, &waitTime) == 0; #elif defined(HAVE_WINDOWS_H) ResetEvent(cond); // Do this with the lock held. LeaveCriticalSection(&pLock->lock); DWORD dwResult = WaitForSingleObject(cond, milliseconds); EnterCriticalSection(&pLock->lock); return dwResult == WAIT_OBJECT_0; #endif } // Wake up all the waiting threads. void PCondVar::Signal(void) { #ifdef HAVE_PTHREAD pthread_cond_broadcast(&cond); #elif defined(HAVE_WINDOWS_H) SetEvent(cond); #endif } polyml.5.2.1/libpolyml/locking.h0000644000175000017500000000540010676743041015605 0ustar daviddavid/* Title: Mutex and Condition Variable library. Copyright (c) 2007 David C. J. Matthews Portions of this code are derived from the original stream io package copyright CUTS 1983-2000. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef LOCKING_H_DEFINED #define LOCKING_H_DEFINED #ifdef WIN32 #include "winconfig.h" #else #include "config.h" #endif #ifdef HAVE_WINDOWS_H #include #endif #ifdef HAVE_PTHREAD_H #include #endif // Simple Mutex. class PLock { public: PLock(); ~PLock(); void Lock(void); // Lock the mutex void Unlock(void); // Unlock the mutex bool Trylock(void); // Try to lock the mutex - returns true if succeeded private: #if (defined(HAVE_LIBPTHREAD) && defined(HAVE_PTHREAD_H)) pthread_mutex_t lock; #elif defined(HAVE_WINDOWS_H) CRITICAL_SECTION lock; #endif friend class PCondVar; }; // Lock a mutex and automatically unlock it in the destructor. // This can be used in a function to lock a mutex and unlock it // when the function either returns normally or raises an exception. class PLocker { public: PLocker(PLock *lock): m_lock(lock) { m_lock->Lock(); } ~PLocker() { m_lock->Unlock(); } private: PLock *m_lock; }; // Simple condition variable. N.B. The Windows code does not // support multiple threads blocking on this condition variable. class PCondVar { public: PCondVar(); ~PCondVar(); void Wait(PLock *pLock); // Wait indefinitely. Drops the lock and reaquires it. // Wait for a signal or until the time. The argument is an absolute time // represented as a struct timespec in Unix and a FILETIME in Windows. void WaitUntil(PLock *pLock, const void *timeArg); // Wait for a time. This is used internally in the RTS. bool WaitFor(PLock *pLock, unsigned milliseconds); void Signal(void); // Wake up the waiting thread. private: #if (defined(HAVE_LIBPTHREAD) && defined(HAVE_PTHREAD_H)) pthread_cond_t cond; pthread_mutex_t *plock; #elif defined(HAVE_WINDOWS_H) HANDLE cond; CRITICAL_SECTION *plock; #endif }; #endif polyml.5.2.1/libpolyml/machine_dep.h0000644000175000017500000001224010602661056016405 0ustar daviddavid/* Title: machine_dep.h - exports signature for machine_dep.c Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef _MACHINE_DEP_H #define _MACHINE_DEP_H #ifdef HAVE_SIGNAL_H #include #endif #ifdef HAVE_UCONTEXT_H #include #endif #ifdef HAVE_UCONTEXT_T #define SIGNALCONTEXT ucontext_t #elif defined(HAVE_STRUCT_SIGCONTEXT) #define SIGNALCONTEXT struct sigcontext #elif defined(HAVE_WINDOWS_H) #include #define SIGNALCONTEXT CONTEXT // This is the thread context. #else #define SIGNALCONTEXT void #endif class ScanAddress; class TaskData; class SaveVecEntry; typedef SaveVecEntry *Handle; class MDTaskData { public: virtual ~MDTaskData() {} }; // Machine architecture values. typedef enum { MA_Interpreted = 0, MA_I386, MA_PPC, MA_Sparc, MA_X86_64 } Architectures; // Machine-dependent module. class MachineDependent { public: virtual ~MachineDependent() {} // Keep the compiler happy // Create the machine-specific task data object. virtual MDTaskData *CreateTaskData(void) = 0; virtual unsigned InitialStackSize(void) { return 128; } // Initial size of a stack // Must be > 40 (i.e. 2*min_stack_check) + base area in each stack frame virtual void InitInterfaceVector(void) = 0; virtual void ResetSignals(void) {} /* ScanConstantsWithinCode - update addresses within a code segment.*/ virtual void ScanConstantsWithinCode(PolyObject *addr, PolyObject *oldAddr, POLYUNSIGNED length, ScanAddress *process) {} void ScanConstantsWithinCode(PolyObject *addr, ScanAddress *process) { ScanConstantsWithinCode(addr, addr, addr->Length(), process); } // Common case virtual int GetIOFunctionRegisterMask(int ioCall) = 0; virtual void FlushInstructionCache(void *p, POLYUNSIGNED bytes) {} virtual Architectures MachineArchitecture(void) = 0; // This is machine-dependent but not always required. It is used in the code-generator. virtual void SetCodeConstant(TaskData *taskData, Handle data, Handle constant, Handle offseth, Handle base) {} virtual unsigned char *BuildCallback(TaskData *taskData, int cbEntryNo, Handle cResultType, int nArgsToRemove) { return 0; } virtual void GetCallbackArg(void **args, void *argLoc, int nSize) {} // Switch to Poly and return with the io function to call. virtual int SwitchToPoly(TaskData *taskData) = 0; virtual void SetForRetry(TaskData *taskData, int ioCall) = 0; virtual void InterruptCode(TaskData *taskData) = 0; virtual bool GetPCandSPFromContext(TaskData *taskData, SIGNALCONTEXT *context, PolyWord * &sp, POLYCODEPTR &pc) = 0; // Initialise the stack for a new thread. Because this is called from the parent thread // the task data object passed in is that of the parent. virtual void InitStackFrame(TaskData *parentTaskData, Handle stack, Handle proc, Handle arg) = 0; virtual void SetException(TaskData *taskData, poly_exn *exc) = 0; // General RTS functions. virtual void CallIO0(TaskData *taskData, Handle(*ioFun)(TaskData *)) = 0; virtual void CallIO1(TaskData *taskData, Handle(*ioFun)(TaskData *, Handle)) = 0; virtual void CallIO2(TaskData *taskData, Handle(*ioFun)(TaskData *, Handle, Handle)) = 0; virtual void CallIO3(TaskData *taskData, Handle(*ioFun)(TaskData *, Handle, Handle, Handle)) = 0; virtual void CallIO4(TaskData *taskData, Handle(*ioFun)(TaskData *, Handle, Handle, Handle, Handle)) = 0; virtual void CallIO5(TaskData *taskData, Handle(*ioFun)(TaskData *, Handle, Handle, Handle, Handle, Handle)) = 0; // These next two are sufficiently different that they need to be implemented // as special cases. virtual void SetExceptionTrace(TaskData *taskData) = 0; virtual void CallCodeTupled(TaskData *taskData) = 0; // This is used to get the argument to the callback_result function. virtual Handle CallBackResult(TaskData *taskData) = 0; // If a foreign function calls back to ML we need to set up the call to the // ML callback function. virtual void SetCallbackFunction(TaskData *taskData, Handle func, Handle args) {} // Increment or decrement the first word of the object pointed to by the // mutex argument and return the new value. virtual Handle AtomicIncrement(TaskData *taskData, Handle mutexp); virtual Handle AtomicDecrement(TaskData *taskData, Handle mutexp); }; extern MachineDependent *machineDependent; #endif /* _MACHINE_DEP_H */ polyml.5.2.1/libpolyml/machoexport.cpp0000644000175000017500000004377010720354121017042 0ustar daviddavid/* Title: Write out a database as a Mach object file Author: David Matthews. Copyright (c) 2006-7 David C. J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR H PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #ifdef HAVE_STDLIB_H #include #endif #ifdef HAVE_STDIO_H #include #endif #ifdef HAVE_STDDEF_H #include #endif #ifdef HAVE_UNISTD_H #include #endif #ifdef HAVE_ERRNO_H #include #endif #ifdef HAVE_TIME_H #include #endif #ifdef HAVE_ASSERT_H #include #define ASSERT(x) assert(x) #else #define ASSERT(x) #endif // If we haven't got the Mach header files we shouldn't be building this. #include #include #include #include #ifdef HAVE_STRING_H #include #endif #ifdef HAVE_SYS_UTSNAME_H #include #endif #include "globals.h" #include "diagnostics.h" #include "sys.h" #include "machine_dep.h" #include "gc.h" #include "mpoly.h" #include "scanaddrs.h" #include "machoexport.h" #include "run_time.h" #include "version.h" #include "polystring.h" // The data section consists of one area beginning with the descriptors // and followed by each of the memory sections in turn. We have to adjust // offsets to match that. void MachoExport::adjustOffset(unsigned area, POLYUNSIGNED &offset) { // Add in the offset. If sect is memTableEntries it's actually the // descriptors so doesn't have any additional offset. if (area != memTableEntries) { offset += sizeof(exportDescription)+sizeof(memoryTableEntry)*memTableEntries; for (unsigned i = 0; i < area; i++) offset += memTable[i].mtLength; } } // Generate the address relative to the start of the segment. void MachoExport::setRelocationAddress(void *p, int32_t *reloc) { unsigned area = findArea(p); POLYUNSIGNED offset = (char*)p - (char*)memTable[area].mtAddr; adjustOffset(area, offset); *reloc = offset; } /* Get the index corresponding to an address. */ PolyWord MachoExport::createRelocation(PolyWord p, void *relocAddr) { void *addr = p.AsAddress(); unsigned addrArea = findArea(addr); POLYUNSIGNED offset = (char*)addr - (char*)memTable[addrArea].mtAddr; adjustOffset(addrArea, offset); // It looks as though struct relocation_info entries are only used // with GENERIC_RELOC_VANILLA types. struct relocation_info relInfo; setRelocationAddress(relocAddr, &relInfo.r_address); relInfo.r_symbolnum = 1; // Section numbers start at 1 relInfo.r_pcrel = 0; relInfo.r_length = 2; // 4 bytes relInfo.r_type = GENERIC_RELOC_VANILLA; relInfo.r_extern = 0; // r_symbolnum is a section number. It should be 1 if we make the IO area a common. fwrite(&relInfo, sizeof(relInfo), 1, exportFile); relocationCount++; return PolyWord::FromUnsigned(offset); } /* This is called for each constant within the code. Print a relocation entry for the word and return a value that means that the offset is saved in original word. */ void MachoExport::ScanConstant(byte *addr, ScanRelocationKind code) { PolyWord p = GetConstantValue(addr, code); if (IS_INT(p) || p == PolyWord::FromUnsigned(0)) return; void *a = p.AsAddress(); unsigned aArea = findArea(a); // Set the value at the address to the offset relative to the symbol. POLYUNSIGNED offset = (char*)a - (char*)memTable[aArea].mtAddr; adjustOffset(aArea, offset); switch (code) { case PROCESS_RELOC_DIRECT: // 32 bit address of target { struct relocation_info reloc; setRelocationAddress(addr, &reloc.r_address); reloc.r_symbolnum = 1; // Section numbers start at 1 reloc.r_pcrel = 0; reloc.r_length = 2; // 4 bytes reloc.r_type = GENERIC_RELOC_VANILLA; reloc.r_extern = 0; // r_symbolnum is a section number. It should be 1 if we make the IO area a common. for (unsigned i = 0; i < sizeof(PolyWord); i++) { addr[i] = (byte)(offset & 0xff); offset >>= 8; } fwrite(&reloc, sizeof(reloc), 1, exportFile); relocationCount++; } break; #if(defined(HOSTARCHITECTURE_X86) || defined(HOSTARCHITECTURE_X86_64)) case PROCESS_RELOC_I386RELATIVE: // 32 bit relative address { // We don't need a relocation since everything is in the same segment // but we still need to recalculate the offset. unsigned addrArea = findArea(addr); POLYUNSIGNED addrOffset = (char*)addr - (char*)memTable[addrArea].mtAddr; adjustOffset(addrArea, addrOffset); offset -= addrOffset + 4; for (unsigned i = 0; i < sizeof(PolyWord); i++) { addr[i] = (byte)(offset & 0xff); offset >>= 8; } } break; #endif #ifdef HOSTARCHITECTURE_PPC case PROCESS_RELOC_PPCDUAL16SIGNED: // Power PC - two consecutive words case PROCESS_RELOC_PPCDUAL16UNSIGNED: { struct relocation_info reloc; setRelocationAddress(addr, &reloc.r_address); POLYUNSIGNED hi = offset >> 16; // N.B. No adjustment yet. POLYUNSIGNED lo = offset & 0xffff; // We use two consecutive words for our address but Mach-O requires separate // relocations for each. It stores one half of the address in the instruction // itself and the other half is carried in a PPC_RELOC_PAIR relocation entry. // We need four relocations here in total. reloc.r_symbolnum = 1; // Section numbers start at 1 reloc.r_extern = 0; // r_symbolnum is a section number. reloc.r_pcrel = 0; reloc.r_length = 2; // 4 bytes reloc.r_type = code == PROCESS_RELOC_PPCDUAL16SIGNED ? PPC_RELOC_HA16 : PPC_RELOC_HI16; fwrite(&reloc, sizeof(reloc), 1, exportFile); relocationCount++; // Next must be a "pair" containing the low-order part of the address. // The high-order part is stored in the instruction. reloc.r_symbolnum = 0xffffff; // Not sure why reloc.r_type = PPC_RELOC_PAIR; reloc.r_extern = 0; reloc.r_pcrel = 0; reloc.r_address = lo; fwrite(&reloc, sizeof(reloc), 1, exportFile); relocationCount++; // Now the low-order part. setRelocationAddress(addr+sizeof(PolyWord), &reloc.r_address); reloc.r_symbolnum = 1; // Section numbers start at 1 reloc.r_extern = 0; // r_symbolnum is a section number. reloc.r_pcrel = 0; reloc.r_length = 2; // 4 bytes reloc.r_type = PPC_RELOC_LO16; fwrite(&reloc, sizeof(reloc), 1, exportFile); relocationCount++; // Finally a "pair" containing the high-order part of the address to // match the low-order part in the instruction. reloc.r_symbolnum = 0xffffff; // Not sure why reloc.r_type = PPC_RELOC_PAIR; reloc.r_extern = 0; reloc.r_pcrel = 0; reloc.r_address = hi; // Must NOT be adjusted for sign extension. fwrite(&reloc, sizeof(reloc), 1, exportFile); relocationCount++; // Adjust for sign extension and store in the instruction. if ((lo & 0x8000) && (code == PROCESS_RELOC_PPCDUAL16SIGNED)) hi++; POLYUNSIGNED *pt = (POLYUNSIGNED *)addr; // Store the offset into the instructions. pt[0] = (pt[0] & 0xffff0000) | hi; pt[1] = (pt[1] & 0xffff0000) | lo; } break; #endif default: ASSERT(0); // Wrong type of relocation for this architecture. } } void MachoExport::writeSymbol(const char *symbolName, unsigned char nType, unsigned char nSect, unsigned long offset) { struct nlist symbol; memset(&symbol, 0, sizeof(symbol)); // Zero unused fields symbol.n_un.n_strx = stringTable.makeEntry(symbolName); symbol.n_type = nType; symbol.n_sect = 1; // Sections count from 1. symbol.n_desc = REFERENCE_FLAG_DEFINED; adjustOffset(nSect, offset); symbol.n_value = offset; fwrite(&symbol, sizeof(symbol), 1, exportFile); symbolCount++; } // Set the file alignment. void MachoExport::alignFile(int align) { char pad[32]; // Maximum alignment int offset = ftell(exportFile); memset(pad, 0, sizeof(pad)); if ((offset % align) == 0) return; fwrite(&pad, align - (offset % align), 1, exportFile); } void MachoExport::createStructsRelocation(unsigned sect, POLYUNSIGNED offset) { struct relocation_info reloc; reloc.r_address = offset; reloc.r_symbolnum = 1; // Section numbers start at 1 reloc.r_pcrel = 0; reloc.r_length = 2; // 4 bytes reloc.r_type = GENERIC_RELOC_VANILLA; reloc.r_extern = 0; // r_symbolnum is a section number. fwrite(&reloc, sizeof(reloc), 1, exportFile); relocationCount++; } void MachoExport::exportStore(void) { PolyWord *p; struct mach_header fhdr; struct segment_command sHdr; struct symtab_command symTab; struct section theSection; unsigned i; // Write out initial values for the headers. These are overwritten at the end. // File header memset(&fhdr, 0, sizeof(fhdr)); fhdr.magic = MH_MAGIC; // Feed Face (0xfeedface) fhdr.filetype = MH_OBJECT; fhdr.ncmds = 2; // One for the segment and one for the symbol table. fhdr.sizeofcmds = sizeof(struct segment_command) + sizeof(struct section)*(memTableEntries+1) + sizeof(struct symtab_command); fhdr.flags = 0; // The machine needs to match the machine we're compiling for // even if this is actually portable code. #if defined(HOSTARCHITECTURE_X86) fhdr.cputype = CPU_TYPE_I386; fhdr.cpusubtype = CPU_SUBTYPE_I386_ALL; #elif defined(HOSTARCHITECTURE_PPC) fhdr.cputype = CPU_TYPE_POWERPC; fhdr.cpusubtype = CPU_SUBTYPE_POWERPC_ALL; #else #error "No support for exporting on this architecture" #endif fwrite(&fhdr, sizeof(fhdr), 1, exportFile); // Write it for the moment. // Segment header. memset(&sHdr, 0, sizeof(struct segment_command)); sHdr.cmd = LC_SEGMENT; sHdr.nsects = 1; sHdr.cmdsize = sizeof(struct segment_command) + sizeof(struct section) * sHdr.nsects; // Add up the sections to give the file size sHdr.filesize = 0; for (i = 0; i < memTableEntries; i++) sHdr.filesize += memTable[i].mtLength; // Do we need any alignment? sHdr.filesize += sizeof(exportDescription) + memTableEntries * sizeof(memoryTableEntry); sHdr.vmsize = sHdr.filesize; // Set them the same since we don't have any "common" area. // sHdr.fileOff is set later. sHdr.maxprot = VM_PROT_READ|VM_PROT_WRITE|VM_PROT_EXECUTE; sHdr.initprot = VM_PROT_READ|VM_PROT_WRITE|VM_PROT_EXECUTE; sHdr.flags = 0; // Write it initially. fwrite(&sHdr, sizeof(sHdr), 1, exportFile); // Section header. memset(&theSection, 0, sizeof(struct section)); sprintf(theSection.sectname, "poly"); sprintf(theSection.segname, "POLY"); //theSection.offset is set later //theSection.reloff is set later //theSection.nreloc is set later theSection.align = 3; // 8 byte alignment // theSection.size is set later theSection.flags = S_ATTR_LOC_RELOC | S_ATTR_SOME_INSTRUCTIONS | S_REGULAR; // // Write it out for the moment. fwrite(&theSection, sizeof(struct section), 1, exportFile); // Symbol table header. memset(&symTab, 0, sizeof(struct symtab_command)); symTab.cmd = LC_SYMTAB; symTab.cmdsize = sizeof(struct symtab_command); //symTab.symoff is set later //symTab.nsyms is set later //symTab.stroff is set later //symTab.strsize is set later fwrite(&symTab, sizeof(struct symtab_command), 1, exportFile); // Create the symbol table first before we mess up the addresses by turning them // into relocations. symTab.symoff = ftell(exportFile); // Global symbols: Just one. Mach prefixes symbols with an underscore. writeSymbol("_poly_exports", N_EXT | N_SECT, memTableEntries, 0); // The export table comes first // We create local symbols because they make debugging easier. They may also // mean that we can use the usual Unix profiling tools. writeSymbol("memTable", N_SECT, memTableEntries, sizeof(exportDescription)); // Then the memTable. for (i = 0; i < memTableEntries; i++) { if (i == ioMemEntry) writeSymbol("ioarea", N_SECT, i, 0); else { char buff[50]; sprintf(buff, "area%0d", i); writeSymbol(buff, N_SECT, i, 0); // See if we can find the names of any functions. char *start = (char*)memTable[i].mtAddr; char *end = start + memTable[i].mtLength; for (p = (PolyWord*)start; p < (PolyWord*)end; ) { p++; PolyObject *obj = (PolyObject*)p; POLYUNSIGNED length = obj->Length(); if (length != 0 && obj->IsCodeObject()) { PolyWord *name = obj->ConstPtrForCode(); // Copy as much of the name as will fit and ignore any extra. // Do we need to worry about duplicates? (void)Poly_string_to_C(*name, buff, sizeof(buff)); writeSymbol(buff, N_SECT, i, (char*)p - start); } p += length; } } } symTab.nsyms = symbolCount; // Create and write out the relocations. theSection.reloff = ftell(exportFile); relocationCount = 0; for (i = 0; i < memTableEntries; i++) { if (i != ioMemEntry) // Don't relocate the IO area { // Create the relocation table and turn all addresses into offsets. char *start = (char*)memTable[i].mtAddr; char *end = start + memTable[i].mtLength; for (p = (PolyWord*)start; p < (PolyWord*)end; ) { p++; PolyObject *obj = (PolyObject*)p; POLYUNSIGNED length = obj->Length(); relocateObject(obj); if (length != 0 && obj->IsCodeObject()) machineDependent->ScanConstantsWithinCode(obj, this); p += length; } } } // Additional relocations for the descriptors. // Address of "memTable" within "exports". We can't use createRelocation because // the position of the relocation is not in either the mutable or the immutable area. createStructsRelocation(memTableEntries, offsetof(exportDescription, memTable)); // Address of "rootFunction" within "exports" unsigned rootAddrArea = findArea(rootFunction); POLYUNSIGNED rootOffset = (char*)rootFunction - (char*)memTable[rootAddrArea].mtAddr; adjustOffset(rootAddrArea, rootOffset); createStructsRelocation(rootAddrArea, offsetof(exportDescription, rootFunction)); // Addresses of the areas within memtable. for (i = 0; i < memTableEntries; i++) { createStructsRelocation(i, sizeof(exportDescription) + i * sizeof(memoryTableEntry) + offsetof(memoryTableEntry, mtAddr)); } theSection.nreloc = relocationCount; // The symbol name table symTab.stroff = ftell(exportFile); fwrite(stringTable.strings, stringTable.stringSize, 1, exportFile); symTab.strsize = stringTable.stringSize; alignFile(4); exportDescription exports; memset(&exports, 0, sizeof(exports)); exports.structLength = sizeof(exportDescription); exports.memTableSize = sizeof(memoryTableEntry); exports.memTableEntries = memTableEntries; exports.ioIndex = 0; // The io entry is the first in the memory table exports.memTable = (memoryTableEntry *)sizeof(exportDescription); // It follows immediately after this. // Set the value to be the offset relative to the base of the area. We have set a relocation // already which will add the base of the area. exports.rootFunction = (void*)rootOffset; exports.timeStamp = time(NULL); exports.ioSpacing = ioSpacing; exports.architecture = machineDependent->MachineArchitecture(); exports.rtsVersion = POLY_version_number; theSection.offset = ftell(exportFile); fwrite(&exports, sizeof(exports), 1, exportFile); POLYUNSIGNED addrOffset = sizeof(exports)+sizeof(memoryTableEntry)*memTableEntries; for (i = 0; i < memTableEntries; i++) { void *save = memTable[i].mtAddr; memTable[i].mtAddr = (void*)addrOffset; // Set this to the relative address. addrOffset += memTable[i].mtLength; fwrite(&memTable[i], sizeof(memoryTableEntry), 1, exportFile); memTable[i].mtAddr = save; } theSection.size = addrOffset; // Now the binary data. for (i = 0; i < memTableEntries; i++) { fwrite(memTable[i].mtAddr, 1, memTable[i].mtLength, exportFile); } // Rewind to rewrite the headers with the actual offsets. rewind(exportFile); fwrite(&fhdr, sizeof(fhdr), 1, exportFile); // File header fwrite(&sHdr, sizeof(sHdr), 1, exportFile); // Segment header fwrite(&theSection, sizeof(struct section), 1, exportFile); // Section headers fwrite(&symTab, sizeof(struct symtab_command), 1, exportFile); // Symbol table header fclose(exportFile); exportFile = NULL; } polyml.5.2.1/libpolyml/machoexport.h0000644000175000017500000000370310714423667016516 0ustar daviddavid/* Title: Export memory as a Mach object file Author: David C. J. Matthews. Copyright (c) 2006 David C. J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR H PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef MachExport_H_INCLUDED #define MachExport_H_INCLUDED #include "config.h" #include "scanaddrs.h" // For base class #include "exporter.h" #include class MachoExport: public Exporter, public ScanAddress { public: MachoExport(): relocationCount(0), symbolCount(0) {} public: virtual void exportStore(void); private: // ScanAddress overrides virtual void ScanConstant(byte *addrOfConst, ScanRelocationKind code); // At the moment we should only get calls to ScanConstant. virtual PolyObject *ScanObjectAddress(PolyObject *base) { return base; } private: void setRelocationAddress(void *p, int32_t *reloc); PolyWord createRelocation(PolyWord p, void *relocAddr); void writeSymbol(const char *symbolName, unsigned char nType, unsigned char nSect, unsigned long offset); void alignFile(int align); void createStructsRelocation(unsigned area, POLYUNSIGNED offset); void adjustOffset(unsigned area, POLYUNSIGNED &offset); unsigned relocationCount; unsigned symbolCount; ExportStringTable stringTable; }; #endif polyml.5.2.1/libpolyml/masm2gas0000644000175000017500000000057210506226526015444 0ustar daviddavid#! /usr/bin/sed -f s/ //g s/;#.*// s/^IFDEF/#ifdef/ s/^ELSE/#else/ s/^ENDIF/#endif/ s/^IFNDEF/#ifndef/ # Convert macro calls. s/CALLMACRO[ ]*\([^ ]*\)[ ]*\(.*\)/ \1(\2)/ # Convert addresses of the form [eax], [eax+ebx], [eax+ebx*4] into # (eax), (eax,ebx), (eax,ebx,4) s/\[\([^]]*\)+\([^]]*\)\*\([^]]*\)]/(\1,\2,\3)/g s/\[\([^]]*\)+\([^]]*\)]/(\1,\2)/g s/\[\([^]]*\)]/(\1)/g polyml.5.2.1/libpolyml/memmgr.cpp0000644000175000017500000003211210772160234015770 0ustar daviddavid/* Title: memmgr.cpp Memory segment manager Copyright (c) 2006-7 David C. J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifdef WIN32 #include "winconfig.h" #else #include "config.h" #endif #ifdef HAVE_ASSERT_H #include #define ASSERT(x) assert(x) #else #define ASSERT(x) #endif #include "globals.h" #include "memmgr.h" #include "osmem.h" #include "scanaddrs.h" #include "bitmap.h" MemSpace::MemSpace() { spaceType = ST_PERMANENT; isMutable = false; bottom = 0; top = 0; isOwnSpace = false; } MemSpace::~MemSpace() { if (isOwnSpace && bottom != 0) osMemoryManager->Free(bottom, (char*)top - (char*)bottom); } LocalMemSpace::LocalMemSpace() { spaceType = ST_LOCAL; gen_top = 0; gen_bottom = 0; highest = 0; pointer = 0; for (unsigned i = 0; i < NSTARTS; i++) start[i] = 0; start_index = 0; i_marked = m_marked = copied = updated = 0; } bool LocalMemSpace::InitSpace(POLYUNSIGNED size, bool mut) { isMutable = mut; // Allocate the heap itself. size_t iSpace = size*sizeof(PolyWord); bottom = (PolyWord*)osMemoryManager->Allocate(iSpace, PERMISSION_READ|PERMISSION_WRITE|PERMISSION_EXEC); if (bottom == 0) return false; isOwnSpace = true; // Deallocate when we're finished. // The size may have been rounded up to a block boundary. size = iSpace/sizeof(PolyWord); top = bottom + size; gen_top = top; pointer = top; gen_bottom = top; // Bitmap for the space. return bitmap.Create(size); } MemMgr::MemMgr() { npSpaces = nlSpaces = 0; minLocal = maxLocal = 0; pSpaces = 0; lSpaces = 0; eSpaces = 0; nextIndex = 0; } MemMgr::~MemMgr() { unsigned i; for (i = 0; i < npSpaces; i++) delete(pSpaces[i]); for (i = 0; i < nlSpaces; i++) delete(lSpaces[i]); for (i = 0; i < neSpaces; i++) delete(eSpaces[i]); } // Create and initialise a new local space and add it to the table. LocalMemSpace* MemMgr::NewLocalSpace(POLYUNSIGNED size, bool mut) { LocalMemSpace *space = new LocalMemSpace; if (space->InitSpace(size, mut) && AddLocalSpace(space)) return space; // If something went wrong. delete space; return 0; } // Add a local memory space to the table. bool MemMgr::AddLocalSpace(LocalMemSpace *space) { // Compute the maximum and minimum local addresses. The idea // is to speed up LocalSpaceForAddress which is likely to be a hot-spot // in the GC. if (nlSpaces == 0) { // First space minLocal = space->bottom; maxLocal = space->top; } else { if (space->bottom < minLocal) minLocal = space->bottom; if (space->top > maxLocal) maxLocal = space->top; } // Add to the table. LocalMemSpace **table = (LocalMemSpace **)realloc(lSpaces, (nlSpaces+1) * sizeof(LocalMemSpace *)); if (table == 0) return false; lSpaces = table; lSpaces[nlSpaces++] = space; return true; } // Create an entry for a permanent space. PermanentMemSpace* MemMgr::NewPermanentSpace(PolyWord *base, POLYUNSIGNED words, bool mut, bool noOv, unsigned index, unsigned hierarchy /*= 0*/) { PermanentMemSpace *space = new PermanentMemSpace; space->bottom = base; space->topPointer = space->top = space->bottom + words; space->spaceType = ST_PERMANENT; space->isMutable = mut; space->noOverwrite = noOv; space->index = index; space->hierarchy = hierarchy; if (index >= nextIndex) nextIndex = index+1; // Extend the permanent memory table and add this space to it. PermanentMemSpace **table = (PermanentMemSpace **)realloc(pSpaces, (npSpaces+1) * sizeof(PermanentMemSpace *)); if (table == 0) { delete space; return 0; } pSpaces = table; pSpaces[npSpaces++] = space; return space; } // Delete a local space and remove it from the table. bool MemMgr::DeleteLocalSpace(LocalMemSpace *sp) { for (unsigned i = 0; i < nlSpaces; i++) { if (lSpaces[i] == sp) { delete sp; nlSpaces--; while (i < nlSpaces) { lSpaces[i] = lSpaces[i+1]; i++; } return true; } } return false; } // Create an entry for the IO space. MemSpace* MemMgr::InitIOSpace(PolyWord *base, POLYUNSIGNED words) { ioSpace.bottom = base; ioSpace.top = ioSpace.bottom + words; ioSpace.spaceType = ST_IO; ioSpace.isMutable = false; return &ioSpace; } // Create and initialise a new export space and add it to the table. PermanentMemSpace* MemMgr::NewExportSpace(POLYUNSIGNED size, bool mut, bool noOv) { PermanentMemSpace *space = new PermanentMemSpace; space->spaceType = ST_EXPORT; space->isMutable = mut; space->noOverwrite = noOv; space->index = nextIndex++; // Allocate the memory itself. size_t iSpace = size*sizeof(PolyWord); space->bottom = (PolyWord*)osMemoryManager->Allocate(iSpace, PERMISSION_READ|PERMISSION_WRITE|PERMISSION_EXEC); if (space->bottom == 0) { delete space; return 0; } space->isOwnSpace = true; // The size may have been rounded up to a block boundary. size = iSpace/sizeof(PolyWord); space->top = space->bottom + size; space->topPointer = space->bottom; // Add to the table. PermanentMemSpace **table = (PermanentMemSpace **)realloc(eSpaces, (neSpaces+1) * sizeof(PermanentMemSpace *)); if (table == 0) { delete space; return 0; } eSpaces = table; eSpaces[neSpaces++] = space; return space; } void MemMgr::DeleteExportSpaces(void) { while (neSpaces > 0) delete(eSpaces[--neSpaces]); } // If we have saved the state rather than exported a function we turn the exported // spaces into permanent ones, removing existing permanent spaces at the same or // lower level. bool MemMgr::PromoteExportSpaces(unsigned hierarchy) { // Create a new table big enough to hold all the permanent and export spaces PermanentMemSpace **pTable = (PermanentMemSpace **)calloc(npSpaces+neSpaces, sizeof(PermanentMemSpace *)); if (pTable == 0) return false; unsigned newSpaces = 0; // Save permanent spaces at a lower hierarchy. Others are converted into // local spaces. Most or all items will have been copied from these spaces // into an export space but there could be items reachable only from the stack. for (unsigned i = 0; i < npSpaces; i++) { PermanentMemSpace *pSpace = pSpaces[i]; if (pSpace->hierarchy < hierarchy) pTable[newSpaces++] = pSpace; else { // Turn this into a local space. LocalMemSpace *space = new LocalMemSpace; space->top = space->gen_top = space->gen_bottom = pSpace->top; space->bottom = space->pointer = pSpace->bottom; space->isMutable = pSpace->isMutable; space->isOwnSpace = true; if (! space->bitmap.Create(space->top-space->bottom) || ! AddLocalSpace(space)) return false; } } // Save newly exported spaces. for (unsigned j = 0; j < neSpaces; j++) { PermanentMemSpace *space = eSpaces[j]; space->hierarchy = hierarchy; // Set the hierarchy of the new spaces. space->spaceType = ST_PERMANENT; // Put a dummy object to fill up the unused space. if (space->topPointer != space->top) FillUnusedSpace(space->topPointer, space->top - space->topPointer); // Put in a dummy object to fill the rest of the space. pTable[newSpaces++] = space; } neSpaces = 0; npSpaces = newSpaces; free(pSpaces); pSpaces = pTable; return true; } // Before we import a hierarchical saved state we need to turn any previously imported // spaces into local spaces. bool MemMgr::DemoteImportSpaces() { // Create a new permanent space table. PermanentMemSpace **table = (PermanentMemSpace **)calloc(npSpaces, sizeof(PermanentMemSpace *)); if (table == NULL) return false; unsigned newSpaces = 0; for (unsigned i = 0; i < npSpaces; i++) { PermanentMemSpace *pSpace = pSpaces[i]; if (pSpace->hierarchy == 0) // Leave truly permanent spaces table[newSpaces++] = pSpace; else { // Turn this into a local space. LocalMemSpace *space = new LocalMemSpace; space->top = space->gen_top = space->gen_bottom = pSpace->top; space->bottom = space->pointer = pSpace->bottom; space->isMutable = pSpace->isMutable; space->isOwnSpace = true; if (! space->bitmap.Create(space->top-space->bottom) || ! AddLocalSpace(space)) return false; } } npSpaces = newSpaces; free(pSpaces); pSpaces = table; return true; } // Return the space the address is in or NULL if none. // We have to check here against the bottom of the area rather // than the allocation because, when called from CopyObject, // the "pointer" field points to the top of the area. // N.B. By checking for pt < space->top we are assuming that we don't have // zero length objects. A zero length object at the top of the space would // have its length word as the last word in the space and the address of the // object would be == space->top. MemSpace *MemMgr::SpaceForAddress(const void *pt) { unsigned i; for (i = 0; i < nlSpaces; i++) { MemSpace *space = lSpaces[i]; if (pt >= space->bottom && pt < space->top) return space; } for (i = 0; i < npSpaces; i++) { MemSpace *space = pSpaces[i]; if (pt >= space->bottom && pt < space->top) return space; } for (i = 0; i < neSpaces; i++) { MemSpace *space = eSpaces[i]; if (pt >= space->bottom && pt < space->top) return space; } if (pt >= ioSpace.bottom && pt < ioSpace.top) return &ioSpace; return 0; // Not in any space } bool MemMgr::IsPermanentMemoryPointer(const void *pt) { for (unsigned i = 0; i < npSpaces; i++) { MemSpace *space = pSpaces[i]; if (pt >= space->bottom && pt < space->top) return true; } return false; } // Return the space for a given index PermanentMemSpace *MemMgr::SpaceForIndex(unsigned index) { for (unsigned i = 0; i < npSpaces; i++) { PermanentMemSpace *space = pSpaces[i]; if (space->index == index) return space; } return NULL; } // In several places we assume that segments are filled with valid // objects. This fills unused memory with one or more "byte" objects. void MemMgr::FillUnusedSpace(PolyWord *base, POLYUNSIGNED words) { PolyWord *pDummy = base+1; while (words > 0) { POLYUNSIGNED oSize = words; // If the space is larger than the maximum object size // we will need several objects. if (words > MAX_OBJECT_SIZE) oSize = MAX_OBJECT_SIZE; else oSize = words-1; // Make this a byte object so it's always skipped. ((PolyObject*)pDummy)->SetLengthWord(oSize, F_BYTE_OBJ); words -= oSize+1; pDummy += oSize+1; } } // Allocate an area of the heap of at least minWords and at most maxWords. // This is used both when allocating single objects (when minWords and maxWords // are the same) and when allocating heap segments. If there is insufficient // space to satisfy the minimum it will return 0. PolyWord *MemMgr::AllocHeapSpace(POLYUNSIGNED minWords, POLYUNSIGNED &maxWords) { allocLock.Lock(); for (unsigned j = 0; j < gMem.nlSpaces; j++) { LocalMemSpace *space = gMem.lSpaces[j]; if (space->isMutable) { POLYUNSIGNED available = space->pointer - space->bottom; if (available > 0 && available >= minWords) { // Reduce the maximum value if we had less than that. if (available < maxWords) maxWords = available; space->pointer -= maxWords; // Allocate it. PolyWord *result = space->pointer; // Return the address. allocLock.Unlock(); return result; } } } allocLock.Unlock(); return 0; // There isn't space even for the minimum. } MemMgr gMem; // The one and only memory manager object polyml.5.2.1/libpolyml/memmgr.h0000644000175000017500000001557610772160234015454 0ustar daviddavid/* Title: memmgr.h Memory segment manager Copyright (c) 2006-8 David C. J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef MEMMGR_H #define MEMMGR_H #include "bitmap.h" #include "locking.h" class ScanAddress; typedef enum { ST_IO, // The io area forms an interface with the RTS ST_PERMANENT, // Permanent areas are part of the object code // Also loaded saved state. ST_LOCAL, // Local heaps contain volatile data ST_EXPORT // Temporary export area } SpaceType; // Base class for the various memory spaces. class MemSpace { protected: MemSpace(); virtual ~MemSpace(); public: SpaceType spaceType; bool isMutable; bool isOwnSpace; // True if this has been allocated. PolyWord *bottom; // Bottom of area PolyWord *top; // Top of area. // These next two are used in the GC to limit scanning for // weak refs. PolyWord *lowestWeak, *highestWeak; friend class MemMgr; }; // Permanent memory space. Either linked into the executable program or // loaded from a saved state file. class PermanentMemSpace: public MemSpace { protected: PermanentMemSpace(): index(0), hierarchy(0), noOverwrite(false), topPointer(0) {} public: unsigned index; // An identifier for the space. Used when saving and loading. unsigned hierarchy; // The hierarchy number: 0=from executable, 1=top level saved state, ... bool noOverwrite; // Don't save this in deeper hierarchies. // When exporting or saving state we copy data into a new area. // This area grows upwards unlike the local areas that grow down. PolyWord *topPointer; friend class MemMgr; }; #define NSTARTS 1024 // Local areas can be garbage collected. class LocalMemSpace: public MemSpace { protected: LocalMemSpace(); virtual ~LocalMemSpace() {} bool InitSpace(POLYUNSIGNED size, bool mut); public: PolyWord *pointer; // Allocation pointer. Objects are allocated AFTER this. PolyWord *gen_top; /* top of area to garbage collect. */ PolyWord *gen_bottom; /* lowest object in area before copying. */ Bitmap bitmap; /* bitmap with one bit for each word in the GC area. */ POLYUNSIGNED highest; /* index of top word in bitmap. */ POLYUNSIGNED start[NSTARTS]; /* starting points for bit searches. */ POLYUNSIGNED start_index; /* last index used to index start array */ POLYUNSIGNED i_marked; /* count of immutable words marked. */ POLYUNSIGNED m_marked; /* count of mutable words marked. */ POLYUNSIGNED copied; /* count of words copied. */ POLYUNSIGNED updated; /* count of words updated. */ friend class MemMgr; }; class MemMgr { public: MemMgr(); ~MemMgr(); // Create and initialise a new local space and add it to the table. LocalMemSpace *NewLocalSpace(POLYUNSIGNED size, bool mut); // Create an entry for a permanent space. PermanentMemSpace *NewPermanentSpace(PolyWord *base, POLYUNSIGNED words, bool mut, bool noOv, unsigned index, unsigned hierarchy = 0); // Create an entry for the IO space. MemSpace *InitIOSpace(PolyWord *base, POLYUNSIGNED words); // Delete a local space bool DeleteLocalSpace(LocalMemSpace *sp); // Allocate an area of the heap of at least minWords and at most maxWords. // This is used both when allocating single objects (when minWords and maxWords // are the same) and when allocating heap segments. If there is insufficient // space to satisfy the minimum it will return 0. Updates "maxWords" with // the space actually allocated PolyWord *AllocHeapSpace(POLYUNSIGNED minWords, POLYUNSIGNED &maxWords); PolyWord *AllocHeapSpace(POLYUNSIGNED words) { POLYUNSIGNED allocated = words; return AllocHeapSpace(words, allocated); } // Create and delete export spaces PermanentMemSpace *NewExportSpace(POLYUNSIGNED size, bool mut, bool noOv); void DeleteExportSpaces(void); bool PromoteExportSpaces(unsigned hierarchy); // Turn export spaces into permanent spaces. bool DemoteImportSpaces(void); // Turn previously imported spaces into local. MemSpace *SpaceForAddress(const void *pt); // Return the space the address is in or NULL if none. PermanentMemSpace *SpaceForIndex(unsigned index); // Return the space for a given index // See if the address is in a local space. This is used in the GC and // needs to be fast. LocalMemSpace *LocalSpaceForAddress(const void *pt) { if (pt >= minLocal && pt <= maxLocal) { for (unsigned i = 0; i < nlSpaces; i++) { LocalMemSpace *space = lSpaces[i]; if (pt >= space->bottom && pt < space->top) return space; } } return 0; } bool IsIOPointer(const void *pt) { return pt >= ioSpace.bottom && pt < ioSpace.top; } bool IsPermanentMemoryPointer(const void *pt); bool IsLocalMutable(const void *pt) { LocalMemSpace *space = LocalSpaceForAddress(pt); return space != 0 && space->isMutable; } // In several places we assume that segments are filled with valid // objects. This fills unused memory with one or more "byte" objects. void FillUnusedSpace(PolyWord *base, POLYUNSIGNED words); MemSpace *IoSpace() { return &ioSpace; } // Return pointer to the IO space. MemSpace ioSpace; // The IO space // Table for permanent spaces PermanentMemSpace **pSpaces; unsigned npSpaces; // Table for local spaces LocalMemSpace **lSpaces; unsigned nlSpaces; // Table for export spaces PermanentMemSpace **eSpaces; unsigned neSpaces; // Used for quick check for local addresses. PolyWord *minLocal, *maxLocal; // Storage manager lock. PLock allocLock; unsigned nextIndex; // Used when allocating new permanent spaces. private: bool AddLocalSpace(LocalMemSpace *space); }; extern MemMgr gMem; #endif polyml.5.2.1/libpolyml/mpoly.cpp0000644000175000017500000002715510772160234015657 0ustar daviddavid/* Title: Main program Copyright (c) 2000-7 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifdef WIN32 #include "winconfig.h" #else #include "config.h" #endif #ifdef HAVE_STDIO_H #include #endif #ifdef HAVE_STDLIB_H #include #endif #ifdef HAVE_STRING_H #include #endif #ifdef HAVE_ASSERT_H #include #define ASSERT(x) assert(x) #else #define ASSERT(x) 0 #endif #ifdef HAVE_TCHAR_H #include #endif #include "globals.h" #include "sys.h" #include "gc.h" #include "run_time.h" #include "machine_dep.h" #include "version.h" #include "diagnostics.h" #include "processes.h" #include "mpoly.h" #include "scanaddrs.h" #include "save_vec.h" #include "polyexports.h" #include "memmgr.h" #include "pexport.h" #ifdef WINDOWS_PC #include "Console.h" #endif static void InitHeaderFromExport(exportDescription *exports); NORETURNFN(static void Usage(const char *message)); // Return the entry in the io vector corresponding to the Poly system call. PolyWord *IoEntry(unsigned sysOp) { MemSpace *space = gMem.IoSpace(); return space->bottom + sysOp * IO_SPACING; } /* This macro must make a whole number of chunks */ #define K_to_words(k) ROUNDUP((k) * (1024 / sizeof(PolyWord)),BITSPERWORD) struct _userOptions userOptions; UNSIGNEDADDR exportTimeStamp; unsigned hsize, isize, msize; struct __argtab { const char *argName, *argHelp; unsigned scale, *argVal; } argTable[] = { { "-H", "Initial heap size (MB)", 1024, &hsize }, // Leave this for the moment { "--heap", "Initial heap size (MB)", 1024, &hsize }, { "--immutable", "Initial size of immutable buffer (MB)", 1024, &isize }, { "--mutable", "Initial size of mutable buffer(MB)", 1024, &msize }, { "--debug", "Debug options", 1, &userOptions.debug } }; /* In the Windows version this is called from WinMain in Console.c */ int polymain(int argc, char **argv, exportDescription *exports) { POLYUNSIGNED memsize = GetPhysicalMemorySize(); if (memsize == 0) // Unable to determine memory size so default to 64M. memsize = 64 * 1024 * 1024; // Set the default initial size to half the memory. hsize = memsize / 2 / 1024; isize = 0; /* use standard default */ msize = 0; /* use standard default */ /* Get arguments. */ memset(&userOptions, 0, sizeof(userOptions)); /* Reset it */ // Get the program name for CommandLine.name. This is allowed to be a full path or // just the last component so we return whatever the system provides. if (argc > 0) userOptions.programName = argv[0]; else userOptions.programName = ""; // Set it to a valid empty string char *importFileName = 0; userOptions.debug = 0; userOptions.noDisplay = false; userOptions.user_arg_count = 0; userOptions.user_arg_strings = (char**)malloc(argc * sizeof(char*)); // Enough room for all of them // Process the argument list removing those recognised by the RTS and adding the // remainder to the user argument list. for (int i = 1; i < argc; i++) { if (argv[i][0] == '-') { bool argUsed = false; for (unsigned j = 0; j < sizeof(argTable)/sizeof(argTable[0]); j++) { unsigned argl = strlen(argTable[j].argName); if (strncmp(argv[i], argTable[j].argName, argl) == 0) { char *p; if (strlen(argv[i]) == argl) { // If it has used all the argument pick the next i++; p = argv[i]; } else { p = argv[i]+argl; if (*p == '=') p++; // Skip an equals sign } if (i >= argc) printf("Incomplete %s option\n", argTable[j].argName); else *(argTable[j].argVal) = atoi(p) * argTable[j].scale; argUsed = true; break; } } if (! argUsed) // Add it to the user args. userOptions.user_arg_strings[userOptions.user_arg_count++] = argv[i]; } else if (exports == 0 && importFileName == 0) importFileName = argv[i]; else userOptions.user_arg_strings[userOptions.user_arg_count++] = argv[i]; } if (exports == 0 && importFileName == 0) Usage("Missing import file name"); if (hsize < 500) Usage ("Invalid heap-size value"); if (hsize < isize) hsize = isize; if (hsize < msize) hsize = msize; if (msize == 0) msize = 4 * 1024 + hsize / 5; /* set default mutable buffer size */ if (isize == 0) isize = hsize - msize; /* set default immutable buffer size */ // Set the heap size and segment sizes. We allocate in units of this size, userOptions.heapSize = K_to_words(hsize); userOptions.immutableSegSize = K_to_words(isize); userOptions.mutableSegSize = K_to_words(msize); // The space we need to have free at the end of a partial collection. If we have less // than this we do a full GC. // For an immutable area this is zero. For the mutable area, though, this is 80% of the // mutable segment size since we allocate new objects in the mutable area and this // determines how soon we will need to do another GC. userOptions.immutableMinFree = 0; userOptions.mutableMinFree = userOptions.mutableSegSize - userOptions.mutableSegSize / 5; // This is the space we try to have free at the end of a major collection. If // we have less than this we allocate another segment. userOptions.immutableFreeSpace = userOptions.immutableSegSize/2; // 50% full if (userOptions.immutableFreeSpace < userOptions.immutableMinFree) userOptions.immutableFreeSpace = userOptions.immutableMinFree; // For the mutable area it is 90% of the segment size. userOptions.mutableFreeSpace = userOptions.mutableSegSize - userOptions.mutableSegSize/10; if (userOptions.mutableFreeSpace < userOptions.mutableMinFree) userOptions.mutableFreeSpace = userOptions.mutableMinFree; /* initialise the run-time system before opening the database */ init_run_time_system(); CreateHeap(); PolyObject *rootFunction = 0; if (exports != 0) { InitHeaderFromExport(exports); rootFunction = (PolyObject *)exports->rootFunction; } else { if (importFileName != 0) rootFunction = ImportPortable(importFileName); if (rootFunction == 0) exit(1); } /* Initialise the interface vector. */ machineDependent->InitInterfaceVector(); /* machine dependent entries. */ // This word has a zero value and is used for null strings. add_word_to_io_area(POLY_SYS_emptystring, PolyWord::FromUnsigned(0)); // This is used to represent zero-sized vectors. // N.B. This assumes that the word before is zero because it's // actually the length word we want to be zero here. add_word_to_io_area(POLY_SYS_nullvector, PolyWord::FromUnsigned(0)); /* The standard input and output streams are persistent i.e. references to the the standard input in one session will refer to the standard input in the next. */ add_word_to_io_area(POLY_SYS_stdin, PolyWord::FromUnsigned(0)); add_word_to_io_area(POLY_SYS_stdout, PolyWord::FromUnsigned(1)); add_word_to_io_area(POLY_SYS_stderr, PolyWord::FromUnsigned(2)); re_init_run_time_system(); // Set up the initial process to run the root function. processes->BeginRootThread(rootFunction); finish(0); /*NOTREACHED*/ return 0; /* just to keep lint happy */ } void Uninitialise(void) // Close down everything and free all resources. Stop any threads or timers. { uninit_run_time_system(); } void finish (int n) { // Make sure we don't get any interrupts once the destructors are // applied to globals or statics. Uninitialise(); #if defined(WINDOWS_PC) ExitThread(n); #else exit (n); #endif } // Print a message and exit if an argument is malformed. void Usage(const char *message) { if (message) printf("%s\n", message); for (unsigned j = 0; j < sizeof(argTable)/sizeof(argTable[0]); j++) { printf("%s <%s>\n", argTable[j].argName, argTable[j].argHelp); } fflush(stdout); #if defined(WINDOWS_PC) if (useConsole) { MessageBox(hMainWindow, _T("Poly/ML has exited"), _T("Poly/ML"), MB_OK); } #endif exit (1); } // Return a string containing the argument names. Can be printed out in response // to a --help argument. It is up to the ML application to do that since it may well // want to produce information about any arguments it chooses to process. char *RTSArgHelp(void) { static char buff[2000]; char *p = buff; for (unsigned j = 0; j < sizeof(argTable)/sizeof(argTable[0]); j++) { int spaces = sprintf(p, "%s <%s>\n", argTable[j].argName, argTable[j].argHelp); p += spaces; } ASSERT((unsigned)(p - buff) < (unsigned)sizeof(buff)); return buff; } void InitHeaderFromExport(exportDescription *exports) { // Check the structure sizes stored in the export structure match the versions // used in this library. if (exports->structLength != sizeof(exportDescription) || exports->memTableSize != sizeof(memoryTableEntry) || exports->rtsVersion < FIRST_supported_version || exports->rtsVersion > LAST_supported_version) { #if (FIRST_supported_version == LAST_supported_version) Exit("The exported object file has version %0.2f but this library supports %0.2f", ((float)exports->rtsVersion) / 100.0, ((float)FIRST_supported_version) / 100.0); #else Exit("The exported object file has version %0.2f but this library supports %0.2f-%0.2f", ((float)exports->rtsVersion) / 100.0, ((float)FIRST_supported_version) / 100.0, ((float)LAST_supported_version) / 100.0); #endif } // We could also check the RTS version and the architecture. exportTimeStamp = exports->timeStamp; // Needed for load and save. memoryTableEntry *memTable = exports->memTable; for (unsigned i = 0; i < exports->memTableEntries; i++) { // Construct a new space for each of the entries. if (i == exports->ioIndex) (void)gMem.InitIOSpace((PolyWord*)memTable[i].mtAddr, memTable[i].mtLength/sizeof(PolyWord)); else (void)gMem.NewPermanentSpace((PolyWord*)memTable[i].mtAddr, memTable[i].mtLength/sizeof(PolyWord), (memTable[i].mtFlags & MTF_WRITEABLE) != 0, (memTable[i].mtFlags & MTF_NO_OVERWRITE) != 0, memTable[i].mtIndex); } } polyml.5.2.1/libpolyml/mpoly.h0000644000175000017500000000417510700233012015303 0ustar daviddavid/* Title: exports signature for mpoly.c Copyright (c) 2000-7 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef _MPOLY_H_DEFINED #define _MPOLY_H_DEFINED #include "noreturn.h" #include "polyexports.h" extern struct _userOptions { unsigned user_arg_count; char **user_arg_strings; const char *programName; unsigned debug; /* debugging flags */ bool noDisplay; /* X display flag */ // Not all of these can be set any longer. unsigned long heapSize, immutableSegSize, mutableSegSize; unsigned long immutableFreeSpace, mutableFreeSpace; unsigned long immutableMinFree, mutableMinFree; // Probably remove } userOptions; // Values for debugging flags #define DEBUG_CHECK_OBJECTS 1 // Check that addresses are valid. #define DEBUG_REGION_CHECK 2 // VERY EXPENSIVE checking #define DEBUG_NOGROW 4 // Don't allocate new heap segments #define DEBUG_FORCEGC 16 // Force a GC every allocation #define DEBUG_X 128 // X-Windows debugging class PolyWord; // Return the entry in the io vector corresponding to the Poly system call. extern PolyWord *IoEntry(unsigned SYS_op); NORETURNFN(extern void finish(int n)); extern char *RTSArgHelp(void); extern UNSIGNEDADDR exportTimeStamp; #endif /* _MPOLY_H_DEFINED */ polyml.5.2.1/libpolyml/network.cpp0000644000175000017500000016477311043551737016224 0ustar daviddavid/* Title: Network functions. Copyright (c) 2000-7 David C. J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifdef WIN32 #include "winconfig.h" #else #include "config.h" #endif #ifdef HAVE_STDIO_H #include #endif #ifdef HAVE_ERRNO_H #include #endif #ifdef HAVE_ASSERT_H #include #define ASSERT(x) assert(x) #else #define ASSERT(x) 0 #endif #ifdef HAVE_STRING_H #include #endif #ifdef HAVE_UNISTD_H #include #endif #ifdef HAVE_SYS_PARAM_H #include #endif #ifdef HAVE_SYS_TIME_H #include #endif #ifdef HAVE_NETDB_H #include #endif #ifdef HAVE_SYS_SOCKET_H #include #endif #ifdef HAVE_NETINET_IN_H #include #endif #ifdef HAVE_NETINET_TCP_H #include #endif #ifdef HAVE_UNISTD_H #include #endif #ifdef HAVE_SYS_IOCTL_H #include #endif #ifdef HAVE_SYS_UN_H #include #endif #ifdef HAVE_SYS_FILIO_H #include #endif #ifdef HAVE_SYS_SOCKIO_H #include #endif #ifdef HAVE_SYS_SELECT_H #include #endif #ifndef HAVE_SOCKLEN_T typedef int socklen_t; #endif #ifdef HAVE_WINDOWS_H #include #endif #ifdef WINDOWS_PC #ifdef USEWINSOCK2 #include #else #include #endif #endif #include "globals.h" #include "gc.h" #include "arb.h" #include "run_time.h" #include "mpoly.h" #include "processes.h" #include "network.h" #include "io_internal.h" #include "sys.h" #include "polystring.h" #include "save_vec.h" #include "rts_module.h" #include "machine_dep.h" #ifndef MAXHOSTNAMELEN #define MAXHOSTNAMELEN 256 #endif #define STREAMID(x) (DEREFSTREAMHANDLE(x)->streamNo) #define SAVE(x) taskData->saveVec.push(x) #define ALLOC(n) alloc_and_save(taskData, n) #define SIZEOF(x) (sizeof(x)/sizeof(PolyWord)) #ifdef WINDOWS_PC static int winsock_init = 0; /* Check that it has been initialised. */ #else #define INVALID_SOCKET (-1) #define SOCKET_ERROR (-1) #endif #ifndef HAVE_SOCKLEN_T typedef int socklen_t; // This must be int for Windows at least #endif #ifndef SHUT_RD #define SHUT_RD 0 #endif #ifndef SHUT_WR #define SHUT_WR 1 #endif #ifndef SHUT_RDWR #define SHUT_RDWR 2 #endif /* Address families. Although this table is in ascending numerical order of address family nothing depends on that. The only requirement is that "INET" => AF_INET must always be present and "UNIX" => AF_UNIX must be present on Unix. Other entries are entirely optional and are for amusement only. */ struct af_tab_struct { const char *af_name; int af_num; } af_table[] = { #ifdef AF_UNIX { "UNIX", AF_UNIX }, /* This is nearly always there. */ #endif #ifdef AF_LOCAL { "LOCAL", AF_LOCAL }, #endif { "INET", AF_INET }, /* This one should always be there. */ #ifdef AF_IMPLINK { "IMPLINK", AF_IMPLINK }, #endif #ifdef AF_PUP { "PUP", AF_PUP }, #endif #ifdef AF_CHAOS { "CHAOS", AF_CHAOS }, #endif #ifdef AF_IPX { "IPX", AF_IPX }, #endif #ifdef AF_NS { "NS", AF_NS }, #endif #ifdef AF_ISO { "ISO", AF_ISO }, #endif #ifdef AF_OSI { "OSI", AF_OSI }, #endif #ifdef AF_ECMA { "ECMA", AF_ECMA }, #endif #ifdef AF_DATAKIT { "DATAKIT", AF_DATAKIT }, #endif #ifdef AF_CCITT { "CCITT", AF_CCITT }, #endif #ifdef AF_SNA { "SNA", AF_SNA }, #endif #ifdef AF_DECnet { "DECnet", AF_DECnet }, #endif #ifdef AF_DLI { "DLI", AF_DLI }, #endif #ifdef AF_LAT { "LAT", AF_LAT }, #endif #ifdef AF_HYLINK { "HYLINK", AF_HYLINK }, #endif #ifdef AF_APPLETALK { "APPLETALK", AF_APPLETALK }, #endif #ifdef AF_NETBIOS { "NETBIOS", AF_NETBIOS }, #endif #ifdef AF_ROUTE { "ROUTE", AF_ROUTE }, #endif #ifdef AF_VOICEVIEW { "VOICEVIEW", AF_VOICEVIEW }, #endif #ifdef AF_FIREFOX { "FIREFOX", AF_FIREFOX }, #endif #ifdef AF_BAN { "BAN", AF_BAN }, #endif #ifdef AF_LINK { "LINK", AF_LINK }, #endif #ifdef AF_COIP { "COIP", AF_COIP }, #endif #ifdef AF_CNT { "CNT", AF_CNT }, #endif #ifdef AF_SIP { "SIP", AF_SIP }, #endif #ifdef AF_ISDN { "ISDN", AF_ISDN }, #endif #ifdef AF_E164 { "E164", AF_E164 }, #endif #ifdef AF_INET6 { "INET6", AF_INET6 }, #endif #ifdef AF_NATM { "NATM", AF_NATM }, #endif #ifdef AF_ATM { "ATM", AF_ATM }, #endif #ifdef AF_NETGRAPH { "NETGRAPH", AF_NETGRAPH }, #endif }; /* Socket types. Only STREAM and DGRAM are required. */ struct sk_tab_struct { const char *sk_name; int sk_num; } sk_table[] = { { "STREAM", SOCK_STREAM }, { "DGRAM", SOCK_DGRAM }, { "RAW", SOCK_RAW }, { "RDM", SOCK_RDM }, { "SEQPACKET", SOCK_SEQPACKET } }; static Handle makeHostEntry(TaskData *taskData, struct hostent *host); static Handle makeProtoEntry(TaskData *taskData, struct protoent *proto); static Handle makeServEntry(TaskData *taskData, struct servent *proto); static Handle makeNetEntry(TaskData *taskData, struct netent *net); static Handle makeList(TaskData *taskData, int count, char *p, int size, void *arg, Handle (mkEntry)(TaskData *, void*, char*)); static Handle mkAftab(TaskData *taskData, void*, char *p); static Handle mkSktab(TaskData *taskData, void*, char *p); static Handle setSocketOption(TaskData *taskData, Handle args, int level, int opt); static Handle getSocketOption(TaskData *taskData, Handle args, int level, int opt); static Handle getSocketInt(TaskData *taskData, Handle args, int level, int opt); static Handle selectCall(TaskData *taskData, Handle args, int blockType); #ifdef WINDOWS_PC /* To allow for portable code we map Windows socket errors to errno-style errors if there is a suitable entry in errno.h. If there isn't we simply return the negative value and handle it later. N.B. WSAEWOULDBLOCK is one of those which does not have an equivalent. (It does seem to be defined in Windows CE). */ static int MapError(int err) { switch (err) { #ifdef EINTR case WSAEINTR: return EINTR; #endif #ifdef EBADF case WSAEBADF: return EBADF; #endif #ifdef EACCES case WSAEACCES: return EACCES; #endif #ifdef EFAULT case WSAEFAULT: return EFAULT; #endif #ifdef EINVAL case WSAEINVAL: return EINVAL; #endif #ifdef EMFILE case WSAEMFILE: return EMFILE; #endif #ifdef ENAMETOOLONG case WSAENAMETOOLONG: return ENAMETOOLONG; #endif #ifdef ENOTEMPTY case WSAENOTEMPTY: return ENOTEMPTY; #endif #ifdef EWOULDBLOCK case WSAEWOULDBLOCK: return EWOULDBLOCK; #endif default: return -err; } } /* If these are not defined define them as negative because GetError returns negative values for socket library errors which do not have equivalents as errno-style errors. */ #ifndef EWOULDBLOCK #define EWOULDBLOCK (-WSAEWOULDBLOCK) #endif #ifndef EINPROGRESS #define EINPROGRESS EWOULDBLOCK #endif #ifndef EMFILE #define EMFILE (-WSAEMFILE) #endif #ifndef EINTR #define EINTR (-WSAEINTR) #endif #ifndef EBADF #define EBADF (-WSAEBADF) #endif static int GetError() { return MapError(WSAGetLastError()); } #define GETERROR (GetError()) #define MAPERROR(x) (MapError(x)) #else #define GETERROR (errno) #define MAPERROR(x) (x) #endif Handle Net_dispatch_c(TaskData *taskData, Handle args, Handle code) { int c = get_C_long(taskData, DEREFWORDHANDLE(code)); TryAgain: switch (c) { case 0: { /* Get the current host name. */ char hostName[MAXHOSTNAMELEN]; if (gethostname(hostName, MAXHOSTNAMELEN) != 0) raise_syscall(taskData, "gethostname failed", GETERROR); return (SAVE(C_string_to_Poly(taskData, hostName))); } case 1: { /* Look up a host name. */ char hostName[MAXHOSTNAMELEN]; int length; struct hostent *host; length = Poly_string_to_C(DEREFWORD(args), hostName, MAXHOSTNAMELEN); if (length > MAXHOSTNAMELEN) raise_syscall(taskData, "Host name too long", ENAMETOOLONG); host = gethostbyname(hostName); if (host == NULL) raise_syscall(taskData, "gethostbyname failed", GETERROR); return makeHostEntry(taskData, host); } case 2: { /* Look up entry by address. */ unsigned long addr = htonl(get_C_ulong(taskData, DEREFWORDHANDLE(args))); struct hostent *host; /* Look up a host name given an address. */ host = gethostbyaddr((char*)&addr, sizeof(addr), AF_INET); if (host == NULL) raise_syscall(taskData, "gethostbyaddr failed", GETERROR); return makeHostEntry(taskData, host); } case 3: { /* Look up protocol entry. */ char protoName[MAXHOSTNAMELEN]; int length; struct protoent *proto; length = Poly_string_to_C(DEREFWORD(args), protoName, MAXHOSTNAMELEN); if (length > MAXHOSTNAMELEN) raise_syscall(taskData, "Protocol name too long", ENAMETOOLONG); proto = getprotobyname(protoName); if (proto == NULL) raise_syscall(taskData, "getprotobyname failed", GETERROR); return makeProtoEntry(taskData, proto); } case 4: { /* Look up protocol entry. */ struct protoent *proto; int pNum = get_C_ulong(taskData, DEREFWORDHANDLE(args)); proto = getprotobynumber(pNum); if (proto == NULL) raise_syscall(taskData, "getprotobynumber failed", GETERROR); return makeProtoEntry(taskData, proto); } case 5: { /* Get service given service name only. */ char servName[MAXHOSTNAMELEN]; int length; struct servent *serv; length = Poly_string_to_C(DEREFWORD(args), servName, MAXHOSTNAMELEN); if (length > MAXHOSTNAMELEN) raise_syscall(taskData, "Service name too long", ENAMETOOLONG); serv = getservbyname (servName, NULL); if (serv == NULL) raise_syscall(taskData, "getservbyname failed", GETERROR); return makeServEntry(taskData, serv); } case 6: { /* Get service given service name and protocol name. */ char servName[MAXHOSTNAMELEN], protoName[MAXHOSTNAMELEN]; int length; struct servent *serv; length = Poly_string_to_C(args->WordP()->Get(0), servName, MAXHOSTNAMELEN); if (length > MAXHOSTNAMELEN) raise_syscall(taskData, "Service name too long", ENAMETOOLONG); length = Poly_string_to_C(args->WordP()->Get(1), protoName, MAXHOSTNAMELEN); if (length > MAXHOSTNAMELEN) raise_syscall(taskData, "Protocol name too long", ENAMETOOLONG); serv = getservbyname (servName, protoName); if (serv == NULL) raise_syscall(taskData, "getservbyname failed", GETERROR); return makeServEntry(taskData, serv); } case 7: { /* Get service given port number only. */ struct servent *serv; long port = htons(get_C_ushort(taskData, DEREFWORDHANDLE(args))); serv = getservbyport(port, NULL); if (serv == NULL) raise_syscall(taskData, "getservbyport failed", GETERROR); return makeServEntry(taskData, serv); } case 8: { /* Get service given port number and protocol name. */ char protoName[MAXHOSTNAMELEN]; int length; struct servent *serv; long port = htons(get_C_ushort(taskData, DEREFHANDLE(args)->Get(0))); length = Poly_string_to_C(args->WordP()->Get(1), protoName, MAXHOSTNAMELEN); if (length > MAXHOSTNAMELEN) raise_syscall(taskData, "Protocol name too long", ENAMETOOLONG); serv = getservbyport (port, protoName); if (serv == NULL) raise_syscall(taskData, "getservbyport failed", GETERROR); return makeServEntry(taskData, serv); } case 9: { /* Get a network entry. */ struct netent *net = NULL; #ifdef HAVE_GETNETBYNAME char netName[MAXHOSTNAMELEN]; POLYUNSIGNED length = Poly_string_to_C(DEREFWORD(args), netName, MAXHOSTNAMELEN); if (length > MAXHOSTNAMELEN) raise_syscall(taskData, "Network name too long", ENAMETOOLONG); /* Winsock2 does not have getnetbyname. Just return failure. */ net = getnetbyname(netName); #endif if (net == NULL) raise_syscall(taskData, "getnetbyname failed", GETERROR); return makeNetEntry(taskData, net); } case 10: { /* Look up network entry from a number. */ struct netent *net = NULL; #ifdef HAVE_GETNETBYADDR unsigned long netNum = htonl(get_C_ulong(taskData, DEREFHANDLE(args)->Get(0))); long af = get_C_ulong(taskData, DEREFHANDLE(args)->Get(1)); /* Winsock2 does not have getnetbyaddr. Just return failure. */ net = getnetbyaddr(netNum, af); #endif if (net == NULL) raise_syscall(taskData, "getnetbyaddr failed", GETERROR); return makeNetEntry(taskData, net); } case 11: { /* Return a list of known address families. */ return makeList(taskData, sizeof(af_table)/sizeof(af_table[0]), (char*)af_table, sizeof(af_table[0]), 0, mkAftab); } case 12: { /* Return a list of known socket types. */ return makeList(taskData, sizeof(sk_table)/sizeof(sk_table[0]), (char*)sk_table, sizeof(sk_table[0]), 0, mkSktab); } case 13: /* Return the "any" internet address. */ return Make_unsigned(taskData, INADDR_ANY); case 14: /* Create a socket */ { Handle str_token = make_stream_entry(taskData); PIOSTRUCT strm; int stream_no = STREAMID(str_token); int af = get_C_long(taskData, DEREFHANDLE(args)->Get(0)); int type = get_C_long(taskData, DEREFHANDLE(args)->Get(1)); int proto = get_C_long(taskData, DEREFHANDLE(args)->Get(2)); unsigned long onOff = 1; SOCKET skt = socket(af, type, proto); if (skt == INVALID_SOCKET) { free_stream_entry(stream_no); switch (GETERROR) { case EMFILE: /* too many open files */ { if (emfileFlag) /* Previously had an EMFILE error. */ raise_syscall(taskData, "socket failed", EMFILE); emfileFlag = true; FullGC(taskData); /* May clear emfileFlag if we close a file. */ goto TryAgain; } case EINTR: goto TryAgain; default: raise_syscall(taskData, "socket failed", GETERROR); } } /* Set the socket to non-blocking mode. */ #ifdef WINDOWS_PC if (ioctlsocket(skt, FIONBIO, &onOff) != 0) #else if (ioctl(skt, FIONBIO, &onOff) < 0) #endif { free_stream_entry(stream_no); #ifdef WINDOWS_PC closesocket(skt); #else close(skt); #endif raise_syscall(taskData, "ioctl failed", GETERROR); } strm = &basic_io_vector[stream_no]; strm->device.sock = skt; strm->ioBits = IO_BIT_OPEN | IO_BIT_READ | IO_BIT_WRITE | IO_BIT_SOCKET ; return(str_token); } case 15: /* Set TCP No-delay option. */ return setSocketOption(taskData, args, IPPROTO_TCP, TCP_NODELAY); case 16: /* Get TCP No-delay option. */ return getSocketOption(taskData, args, IPPROTO_TCP, TCP_NODELAY); case 17: /* Set Debug option. */ return setSocketOption(taskData, args, SOL_SOCKET, SO_DEBUG); case 18: /* Get Debug option. */ return getSocketOption(taskData, args, SOL_SOCKET, SO_DEBUG); case 19: /* Set REUSEADDR option. */ return setSocketOption(taskData, args, SOL_SOCKET, SO_REUSEADDR); case 20: /* Get REUSEADDR option. */ return getSocketOption(taskData, args, SOL_SOCKET, SO_REUSEADDR); case 21: /* Set KEEPALIVE option. */ return setSocketOption(taskData, args, SOL_SOCKET, SO_KEEPALIVE); case 22: /* Get KEEPALIVE option. */ return getSocketOption(taskData, args, SOL_SOCKET, SO_KEEPALIVE); case 23: /* Set DONTROUTE option. */ return setSocketOption(taskData, args, SOL_SOCKET, SO_DONTROUTE); case 24: /* Get DONTROUTE option. */ return getSocketOption(taskData, args, SOL_SOCKET, SO_DONTROUTE); case 25: /* Set BROADCAST option. */ return setSocketOption(taskData, args, SOL_SOCKET, SO_BROADCAST); case 26: /* Get BROADCAST option. */ return getSocketOption(taskData, args, SOL_SOCKET, SO_BROADCAST); case 27: /* Set OOBINLINE option. */ return setSocketOption(taskData, args, SOL_SOCKET, SO_OOBINLINE); case 28: /* Get OOBINLINE option. */ return getSocketOption(taskData, args, SOL_SOCKET, SO_OOBINLINE); case 29: /* Set SNDBUF size. */ return setSocketOption(taskData, args, SOL_SOCKET, SO_SNDBUF); case 30: /* Get SNDBUF size. */ return getSocketInt(taskData, args, SOL_SOCKET, SO_SNDBUF); case 31: /* Set RCVBUF size. */ return setSocketOption(taskData, args, SOL_SOCKET, SO_RCVBUF); case 32: /* Get RCVBUF size. */ return getSocketInt(taskData, args, SOL_SOCKET, SO_RCVBUF); case 33: /* Get socket type e.g. SOCK_STREAM. */ return getSocketInt(taskData, args, SOL_SOCKET, SO_TYPE); case 34: /* Get error status and clear it. */ return getSocketOption(taskData, args, SOL_SOCKET, SO_ERROR); case 35: /* Set Linger time. */ { struct linger linger; PIOSTRUCT strm = get_stream(DEREFHANDLE(args)->Get(0).AsObjPtr()); int lTime = get_C_long(taskData, DEREFHANDLE(args)->Get(1)); /* We pass in a negative value to turn the option off, zero or positive to turn it on. */ if (lTime < 0) { linger.l_onoff = 0; linger.l_linger = 0; } else { linger.l_onoff = 1; linger.l_linger = lTime; } if (strm == NULL) raise_syscall(taskData, "Stream is closed", EBADF); if (setsockopt(strm->device.sock, SOL_SOCKET, SO_LINGER, (char*)&linger, sizeof(linger)) != 0) raise_syscall(taskData, "setsockopt failed", GETERROR); return Make_arbitrary_precision(taskData, 0); } case 36: /* Get Linger time. */ { struct linger linger; PIOSTRUCT strm = get_stream(args->WordP()); socklen_t size = sizeof(linger); int lTime = 0; if (strm == NULL) raise_syscall(taskData, "Stream is closed", EBADF); if (getsockopt(strm->device.sock, SOL_SOCKET, SO_LINGER, (char*)&linger, &size) != 0) raise_syscall(taskData, "getsockopt failed", GETERROR); /* If the option is off return a negative. */ if (linger.l_onoff == 0) lTime = -1; else lTime = linger.l_linger; return Make_arbitrary_precision(taskData, lTime); } case 37: /* Get peer name. */ { PIOSTRUCT strm = get_stream(args->WordP()); struct sockaddr sockA; socklen_t size = sizeof(sockA); if (strm == NULL) raise_syscall(taskData, "Stream is closed", EBADF); if (getpeername(strm->device.sock, &sockA, &size) != 0) raise_syscall(taskData, "getpeername failed", GETERROR); /* Addresses are treated as strings. */ return(SAVE(Buffer_to_Poly(taskData, (char*)&sockA, size))); } case 38: /* Get socket name. */ { PIOSTRUCT strm = get_stream(args->WordP()); struct sockaddr sockA; socklen_t size = sizeof(sockA); if (strm == NULL) raise_syscall(taskData, "Stream is closed", EBADF); if (getsockname(strm->device.sock, &sockA, &size) != 0) raise_syscall(taskData, "getsockname failed", GETERROR); return(SAVE(Buffer_to_Poly(taskData, (char*)&sockA, size))); } case 39: /* Return the address family from an address. */ { PolyStringObject *psAddr = (PolyStringObject *)args->WordP(); struct sockaddr *psock = (struct sockaddr *)&psAddr->chars; return Make_unsigned(taskData, psock->sa_family); } case 40: /* Create a socket address from a port number and internet address. */ { struct sockaddr_in sockaddr; memset(&sockaddr, 0, sizeof(sockaddr)); sockaddr.sin_family = AF_INET; sockaddr.sin_port = htons(get_C_ushort(taskData, DEREFHANDLE(args)->Get(0))); sockaddr.sin_addr.s_addr = htonl(get_C_ulong(taskData, DEREFHANDLE(args)->Get(1))); return(SAVE(Buffer_to_Poly(taskData, (char*)&sockaddr, sizeof(sockaddr)))); } case 41: /* Return port number from an internet socket address. Assumes that we've already checked the address family. */ { PolyStringObject *psAddr = (PolyStringObject *)args->WordP(); struct sockaddr_in *psock = (struct sockaddr_in *)&psAddr->chars; return Make_unsigned(taskData, ntohs(psock->sin_port)); } case 42: /* Return internet address from an internet socket address. Assumes that we've already checked the address family. */ { PolyStringObject * psAddr = (PolyStringObject *)args->WordP(); struct sockaddr_in *psock = (struct sockaddr_in *)&psAddr->chars; return Make_unsigned(taskData, ntohl(psock->sin_addr.s_addr)); } /* 43 - Set non-blocking mode. Now removed. */ case 44: /* Find number of bytes available. */ { PIOSTRUCT strm = get_stream(args->WordP()); unsigned long readable; if (strm == NULL) raise_syscall(taskData, "Stream is closed", EBADF); #ifdef WINDOWS_PC if (ioctlsocket(strm->device.sock, FIONREAD, &readable) != 0) raise_syscall(taskData, "ioctlsocket failed", GETERROR); #else if (ioctl(strm->device.sock, FIONREAD, &readable) < 0) raise_syscall(taskData, "ioctl failed", GETERROR); #endif return Make_arbitrary_precision(taskData, readable); } case 45: /* Find out if we are at the mark. */ { PIOSTRUCT strm = get_stream(args->WordP()); unsigned long atMark; if (strm == NULL) raise_syscall(taskData, "Stream is closed", EBADF); #ifdef WINDOWS_PC if (ioctlsocket(strm->device.sock, SIOCATMARK, &atMark) != 0) raise_syscall(taskData, "ioctlsocket failed", GETERROR); #else if (ioctl(strm->device.sock, SIOCATMARK, &atMark) < 0) raise_syscall(taskData, "ioctl failed", GETERROR); #endif return Make_arbitrary_precision(taskData, atMark == 0 ? 0 : 1); } case 46: /* Accept a connection. */ case 58: /* Non-blocking accept. */ { PIOSTRUCT strm = get_stream(args->WordP()); if (strm == NULL) raise_syscall(taskData, "Stream is closed", EBADF); else { SOCKET sock = strm->device.sock, result; struct sockaddr resultAddr; int stream_no; socklen_t addrLen; Handle addrHandle, pair; Handle str_token; PIOSTRUCT newStrm; /* Get a token for the new socket - may raise an exception if it fails. */ str_token = make_stream_entry(taskData); stream_no = STREAMID(str_token); addrLen = sizeof(resultAddr); result = accept(sock, &resultAddr, &addrLen); if (result == INVALID_SOCKET) { /* Free the stream entry */ free_stream_entry(stream_no); switch (GETERROR) { case EINTR: goto TryAgain; /* Have to retry if we got EINTR. */ case EMFILE: /* Too many files. */ { if (emfileFlag) /* Previously had an EMFILE error. */ raise_syscall(taskData, "accept failed", EMFILE); emfileFlag = true; FullGC(taskData); /* May clear emfileFlag if we close a file. */ goto TryAgain; } case EWOULDBLOCK: /* If the socket is in non-blocking mode we pass this back to the caller. If it is blocking we suspend this process and try again later. */ if (c == 46 /* blocking version. */) processes->BlockAndRestart(taskData, strm->device.sock, false, POLY_SYS_network); /* else drop through. */ default: raise_syscall(taskData, "accept failed", GETERROR); } } addrHandle = SAVE(Buffer_to_Poly(taskData, (char*)&resultAddr, addrLen)); newStrm = &basic_io_vector[stream_no]; newStrm->device.sock = result; newStrm->ioBits = IO_BIT_OPEN | IO_BIT_READ | IO_BIT_WRITE | IO_BIT_SOCKET; /* Return a pair of the new socket and the address. */ pair = ALLOC(2); DEREFHANDLE(pair)->Set(0, DEREFWORDHANDLE(str_token)); DEREFHANDLE(pair)->Set(1, DEREFWORDHANDLE(addrHandle)); return pair; } } case 47: /* Bind an address to a socket. */ { PIOSTRUCT strm = get_stream(DEREFHANDLE(args)->Get(0).AsObjPtr()); PolyStringObject * psAddr = (PolyStringObject *)args->WordP()->Get(1).AsObjPtr(); struct sockaddr *psock = (struct sockaddr *)&psAddr->chars; if (strm == NULL) raise_syscall(taskData, "Stream is closed", EBADF); if (bind(strm->device.sock, psock, psAddr->length) != 0) raise_syscall(taskData, "bind failed", GETERROR); return Make_arbitrary_precision(taskData, 0); } case 48: /* Connect to an address. */ case 59: /* Non-blocking connect. */ { PIOSTRUCT strm = get_stream(DEREFHANDLE(args)->Get(0).AsObjPtr()); PolyStringObject * psAddr = (PolyStringObject *)args->WordP()->Get(1).AsObjPtr(); struct sockaddr *psock = (struct sockaddr *)&psAddr->chars; int res; if (strm == NULL) raise_syscall(taskData, "Stream is closed", EBADF); /* In Windows, and possibly also in Unix, if we have received a previous EWOULDBLOCK we have to use "select" to tell us whether the connection actually succeeded. */ while (1) { if (strm->ioBits & IO_BIT_INPROGRESS) { fd_set read_fds, write_fds, except_fds; struct timeval delay; int sel; SOCKET sock = strm->device.sock; FD_ZERO(&read_fds); FD_ZERO(&write_fds); FD_ZERO(&except_fds); FD_SET(sock, &write_fds); FD_SET(sock, &except_fds); delay.tv_sec = 0; /* Poll. */ delay.tv_usec = 0; /* In Windows failure is indicated by the bit being set in the exception set rather than the write set. */ sel = select(FD_SETSIZE,&read_fds,&write_fds,&except_fds,&delay); if (sel < 0) { int err = GETERROR; if (err != EINTR) raise_syscall(taskData, "select failed", err); /* else continue */ } else if (sel == 0) { /* Nothing yet */ processes->BlockAndRestart(taskData, -1, false, POLY_SYS_network); /* -1 => not for reading. */ } else /* Definite result. */ { int result = 0; socklen_t len = sizeof(result); strm->ioBits &= ~IO_BIT_INPROGRESS; /* No longer in progress. */ if (getsockopt(sock, SOL_SOCKET, SO_ERROR, (char*)&result, &len) != 0 || result != 0) raise_syscall(taskData, "connect failed", MAPERROR(result)); return Make_arbitrary_precision(taskData, 0); /* Success. */ } } else { int err; res = connect(strm->device.sock, psock, psAddr->length); if (res == 0) return Make_arbitrary_precision(taskData, 0); /* OK */ /* It isn't clear that EINTR can ever occur with connect, but just to be safe, we retry. */ err = GETERROR; if ((err == EWOULDBLOCK || err == EINPROGRESS) && c == 48 /*blocking version*/) { strm->ioBits |= IO_BIT_INPROGRESS; processes->BlockAndRestart(taskData, -1, false, POLY_SYS_network); /* -1 => not for reading. */ } else if (err != EINTR) raise_syscall(taskData, "connect failed", err); /* else try again. */ } } } case 49: /* Put socket into listening mode. */ { PIOSTRUCT strm = get_stream(DEREFHANDLE(args)->Get(0).AsObjPtr()); int backlog = get_C_ulong(taskData, DEREFHANDLE(args)->Get(1)); if (strm == NULL) raise_syscall(taskData, "Stream is closed", EBADF); if (listen(strm->device.sock, backlog) != 0) raise_syscall(taskData, "listen failed", GETERROR); return Make_arbitrary_precision(taskData, 0); } case 50: /* Shutdown the socket. */ { PIOSTRUCT strm = get_stream(DEREFHANDLE(args)->Get(0).AsObjPtr()); int mode = 0; if (strm == NULL) raise_syscall(taskData, "Stream is closed", EBADF); switch (get_C_ulong(taskData, DEREFHANDLE(args)->Get(1))) { case 1: mode = SHUT_RD; break; case 2: mode = SHUT_WR; break; case 3: mode = SHUT_RDWR; } if (shutdown(strm->device.sock, mode) != 0) raise_syscall(taskData, "shutdown failed", GETERROR); return Make_arbitrary_precision(taskData, 0); } case 51: /* Send data on a socket. */ case 60: /* Non-blocking send. */ { PIOSTRUCT strm = get_stream(DEREFHANDLE(args)->Get(0).AsObjPtr()); PolyWord pBase = DEREFHANDLE(args)->Get(1); char ch, *base; unsigned int offset = get_C_ulong(taskData, DEREFHANDLE(args)->Get(2)); unsigned int length = get_C_ulong(taskData, DEREFHANDLE(args)->Get(3)); unsigned int dontRoute = get_C_ulong(taskData, DEREFHANDLE(args)->Get(4)); unsigned int outOfBand = get_C_ulong(taskData, DEREFHANDLE(args)->Get(5)); int flags = 0, sent; if (dontRoute != 0) flags |= MSG_DONTROUTE; if (outOfBand != 0) flags |= MSG_OOB; if (strm == NULL) raise_syscall(taskData, "Stream is closed", EBADF); if (IS_INT(pBase)) { /* Handle the special case where we are sending a single byte vector and the "address" is the tagged byte itself. */ ch = (char)UNTAGGED(pBase); base = &ch; offset = 0; length = 1; } else base = (char*)pBase.AsObjPtr()->AsBytePtr(); while (1) { int err; sent = send(strm->device.sock, base+offset, length, flags); /* It isn't clear that EINTR can ever occur with send but just to be safe we deal with that case and retry the send. */ if (sent != SOCKET_ERROR) /* OK. */ return Make_arbitrary_precision(taskData, sent); err = GETERROR; if (err == EWOULDBLOCK && c == 51 /* blocking */) { processes->BlockAndRestart(taskData, -1, false, POLY_SYS_network); /* -1 => not for reading */ ASSERT(0); /* Must not have returned. */ } else if (err != EINTR) raise_syscall(taskData, "send failed", err); /* else try again */ } } case 52: /* Send data on a socket to a given address. */ case 61: /* Non-blocking send. */ { PIOSTRUCT strm = get_stream(DEREFHANDLE(args)->Get(0).AsObjPtr()); PolyStringObject * psAddr = (PolyStringObject *)args->WordP()->Get(1).AsObjPtr(); PolyWord pBase = DEREFHANDLE(args)->Get(2); char ch, *base; unsigned int offset = get_C_ulong(taskData, DEREFHANDLE(args)->Get(3)); unsigned int length = get_C_ulong(taskData, DEREFHANDLE(args)->Get(4)); unsigned int dontRoute = get_C_ulong(taskData, DEREFHANDLE(args)->Get(5)); unsigned int outOfBand = get_C_ulong(taskData, DEREFHANDLE(args)->Get(6)); int flags = 0, sent; if (dontRoute != 0) flags |= MSG_DONTROUTE; if (outOfBand != 0) flags |= MSG_OOB; if (strm == NULL) raise_syscall(taskData, "Stream is closed", EBADF); if (IS_INT(pBase)) { /* Handle the special case where we are sending a single byte vector and the "address" is the tagged byte itself. */ ch = (char)UNTAGGED(pBase); base = &ch; offset = 0; length = 1; } else base = (char*)pBase.AsObjPtr()->AsBytePtr(); while (1) { int err; sent = sendto(strm->device.sock, base+offset, length, flags, (struct sockaddr *)psAddr->chars, psAddr->length); /* It isn't clear that EINTR can ever occur with send but just to be safe we deal with that case and retry the send. */ if (sent != SOCKET_ERROR) /* OK. */ return Make_arbitrary_precision(taskData, sent); err = GETERROR; if (err == EWOULDBLOCK && c == 52 /* blocking */) { processes->BlockAndRestart(taskData, -1, false, POLY_SYS_network); ASSERT(0); /* Must not have returned. */ } else if (err != EINTR) raise_syscall(taskData, "sendto failed", err); /* else try again */ } } case 53: /* Receive data into an array. */ case 62: /* Non-blocking receive. */ { PIOSTRUCT strm = get_stream(DEREFHANDLE(args)->Get(0).AsObjPtr()); char *base = (char*)DEREFHANDLE(args)->Get(1).AsObjPtr()->AsBytePtr(); unsigned int offset = get_C_ulong(taskData, DEREFHANDLE(args)->Get(2)); unsigned int length = get_C_ulong(taskData, DEREFHANDLE(args)->Get(3)); unsigned int peek = get_C_ulong(taskData, DEREFHANDLE(args)->Get(4)); unsigned int outOfBand = get_C_ulong(taskData, DEREFHANDLE(args)->Get(5)); int flags = 0, recvd; if (peek != 0) flags |= MSG_PEEK; if (outOfBand != 0) flags |= MSG_OOB; if (strm == NULL) raise_syscall(taskData, "Stream is closed", EBADF); while (1) { int err; recvd = recv(strm->device.sock, base+offset, length, flags); err = GETERROR; if (recvd != SOCKET_ERROR) { /* OK. */ /* It appears that recv may return the length of the message if that is longer than the buffer. */ if (recvd > (int)length) recvd = length; return Make_arbitrary_precision(taskData, recvd); } if (err == EWOULDBLOCK && c == 53 /* blocking */) { /* Block until something arrives. */ processes->BlockAndRestart(taskData, outOfBand ? -1 : strm->device.sock, false, POLY_SYS_network); ASSERT(0); /* Must not have returned. */ } else if (err != EINTR) raise_syscall(taskData, "recv failed", err); /* else try again */ } } case 54: /* Receive data into an array and return the sender's address along with the length. In Windows this can only be used with datagrams. */ case 63: /* Non-blocking receive. */ { PIOSTRUCT strm = get_stream(DEREFHANDLE(args)->Get(0).AsObjPtr()); char *base = (char*)DEREFHANDLE(args)->Get(1).AsObjPtr()->AsBytePtr(); unsigned int offset = get_C_ulong(taskData, DEREFHANDLE(args)->Get(2)); unsigned int length = get_C_ulong(taskData, DEREFHANDLE(args)->Get(3)); unsigned int peek = get_C_ulong(taskData, DEREFHANDLE(args)->Get(4)); unsigned int outOfBand = get_C_ulong(taskData, DEREFHANDLE(args)->Get(5)); int flags = 0, recvd; socklen_t addrLen; struct sockaddr resultAddr; if (peek != 0) flags |= MSG_PEEK; if (outOfBand != 0) flags |= MSG_OOB; if (strm == NULL) raise_syscall(taskData, "Stream is closed", EBADF); while (1) { int err; recvd = recvfrom(strm->device.sock, base+offset, length, flags, &resultAddr, &addrLen); err = GETERROR; if (recvd != SOCKET_ERROR) { /* OK. */ Handle addrHandle, lengthHandle, pair; if (recvd > (int)length) recvd = length; lengthHandle = Make_arbitrary_precision(taskData, recvd); addrHandle = SAVE(Buffer_to_Poly(taskData, (char*)&resultAddr, addrLen)); pair = ALLOC(2); DEREFHANDLE(pair)->Set(0, DEREFWORDHANDLE(lengthHandle)); DEREFHANDLE(pair)->Set(1, DEREFWORDHANDLE(addrHandle)); return pair; } if (err == EWOULDBLOCK && c == 54 /* blocking */) { processes->BlockAndRestart(taskData, outOfBand ? -1 : strm->device.sock, false, POLY_SYS_network); ASSERT(0); /* Must not have returned. */ } else if (err != EINTR) raise_syscall(taskData, "recvfrom failed", err); /* else try again */ } } case 55: /* Create a socket pair. */ #ifdef WINDOWS_PC /* Not implemented. */ raise_syscall(taskData, "socketpair not implemented", -WSAEAFNOSUPPORT); #else { Handle str_token1 = make_stream_entry(taskData); Handle str_token2 = make_stream_entry(taskData); Handle pair; PIOSTRUCT strm1, strm2; int stream_no1 = STREAMID(str_token1); int stream_no2 = STREAMID(str_token2); int af = get_C_long(taskData, DEREFHANDLE(args)->Get(0)); int type = get_C_long(taskData, DEREFHANDLE(args)->Get(1)); int proto = get_C_long(taskData, DEREFHANDLE(args)->Get(2)); int onOff = 1; SOCKET skt[2]; if (socketpair(af, type, proto, skt) != 0) { free_stream_entry(stream_no1); free_stream_entry(stream_no2); switch (GETERROR) { case EMFILE: /* too many open files */ { if (emfileFlag) /* Previously had an EMFILE error. */ raise_syscall(taskData, "socket failed", EMFILE); emfileFlag = true; FullGC(taskData); /* May clear emfileFlag if we close a file. */ goto TryAgain; } case EINTR: goto TryAgain; default: raise_syscall(taskData, "socketpair failed", GETERROR); } } /* Set the sockets to non-blocking mode. */ if (ioctl(skt[0], FIONBIO, &onOff) < 0 || ioctl(skt[1], FIONBIO, &onOff) < 0) { free_stream_entry(stream_no1); free_stream_entry(stream_no2); close(skt[0]); close(skt[1]); raise_syscall(taskData, "ioctl failed", GETERROR); } strm1 = &basic_io_vector[stream_no1]; strm1->device.sock = skt[0]; strm1->ioBits = IO_BIT_OPEN | IO_BIT_READ | IO_BIT_WRITE | IO_BIT_SOCKET ; strm2 = &basic_io_vector[stream_no2]; strm2->device.sock = skt[1]; strm2->ioBits = IO_BIT_OPEN | IO_BIT_READ | IO_BIT_WRITE | IO_BIT_SOCKET ; /* Return the two streams as a pair. */ pair = ALLOC(2); DEREFHANDLE(pair)->Set(0, DEREFWORDHANDLE(str_token1)); DEREFHANDLE(pair)->Set(1, DEREFWORDHANDLE(str_token2)); return pair; } #endif case 56: /* Create a Unix socket address from a string. */ #ifdef WINDOWS_PC /* Not implemented. */ raise_syscall(taskData, "Unix addresses not implemented", -WSAEAFNOSUPPORT); #else { struct sockaddr_un addr; int length; memset(&addr, 0, sizeof(addr)); addr.sun_family = AF_UNIX; #ifdef HAVE_STRUCT_SOCKADDR_UN_SUN_LEN addr.sun_len = sizeof(addr); // Used in FreeBSD only. #endif length = Poly_string_to_C(DEREFWORD(args), addr.sun_path, sizeof(addr.sun_path)); if (length > (int)sizeof(addr.sun_path)) raise_syscall(taskData, "Address too long", ENAMETOOLONG); return SAVE(Buffer_to_Poly(taskData, (char*)&addr, sizeof(addr))); } #endif case 57: /* Get the file name from a Unix socket address. */ #ifdef WINDOWS_PC /* Not implemented. */ raise_syscall(taskData, "Unix addresses not implemented", -WSAEAFNOSUPPORT); #else { PolyStringObject * psAddr = (PolyStringObject *)args->WordP(); struct sockaddr_un *psock = (struct sockaddr_un *)&psAddr->chars; return SAVE(C_string_to_Poly(taskData, psock->sun_path)); } #endif case 64: /* Blocking select call. Infinite timeout. */ return selectCall(taskData, args, 1); case 65: /* Polling select call. Zero timeout. */ return selectCall(taskData, args, 2); case 66: /* Select call with non-zero timeout. */ return selectCall(taskData, args, 0); default: { char msg[100]; sprintf(msg, "Unknown net function: %d", c); raise_exception_string(taskData, EXC_Fail, msg); return 0; } } } /* "Polymorphic" function to generate a list. */ static Handle makeList(TaskData *taskData, int count, char *p, int size, void *arg, Handle (mkEntry)(TaskData *, void*, char*)) { Handle saved = taskData->saveVec.mark(); Handle list = SAVE(ListNull); /* Start from the end of the list. */ p += count*size; while (count > 0) { Handle value, next; p -= size; /* Back up to the last entry. */ value = mkEntry(taskData, arg, p); next = ALLOC(SIZEOF(ML_Cons_Cell)); DEREFLISTHANDLE(next)->h = DEREFWORDHANDLE(value); DEREFLISTHANDLE(next)->t = DEREFLISTHANDLE(list); taskData->saveVec.reset(saved); list = SAVE(DEREFHANDLE(next)); count--; } return list; } static Handle mkAddr(TaskData *taskData, void *arg, char *p) { int j; struct hostent *host = (struct hostent *)arg; unsigned long addr = 0; /* Addresses are in network order so this is fairly easy. In practice they will be 4 byte entries so we could just use ntohl. */ for (j = 0; j < host->h_length; j++) addr = (addr << 8) | ((*(char**)p)[j] & 255); return Make_unsigned(taskData, addr); } /* Convert a host entry into a tuple for ML. */ static Handle makeHostEntry(TaskData *taskData, struct hostent *host) { /* We need to do all this in the right order. We cannot construct the result tuple until all the values are ready. We have to save each entry on the save stack just in case of a garbage collection. */ int i; char **p; Handle aliases, name, addrType, result; Handle addrList = SAVE(ListNull); /* Canonical name. */ name = SAVE(C_string_to_Poly(taskData, host->h_name)); /* Aliases. */ for (i=0, p = host->h_aliases; *p != NULL; p++, i++); aliases = convert_string_list(taskData, i, host->h_aliases); /* Address type. */ addrType = Make_unsigned(taskData, host->h_addrtype); /* Addresses. */ /* Count them first and then work from the end back. */ for (i=0, p = host->h_addr_list; *p != NULL; p++, i++); addrList = makeList(taskData, i, (char*)host->h_addr_list, sizeof(char*), host, mkAddr); /* Make the result structure. */ result = ALLOC(4); DEREFHANDLE(result)->Set(0, DEREFWORDHANDLE(name)); DEREFHANDLE(result)->Set(1, DEREFWORDHANDLE(aliases)); DEREFHANDLE(result)->Set(2, DEREFWORDHANDLE(addrType)); DEREFHANDLE(result)->Set(3, DEREFWORDHANDLE(addrList)); return result; } static Handle makeProtoEntry(TaskData *taskData, struct protoent *proto) { int i; char **p; Handle aliases, name, protocol, result; /* Canonical name. */ name = SAVE(C_string_to_Poly(taskData, proto->p_name)); /* Aliases. */ for (i=0, p = proto->p_aliases; *p != NULL; p++, i++); aliases = convert_string_list(taskData, i, proto->p_aliases); /* Protocol number. */ protocol = Make_unsigned(taskData, proto->p_proto); /* Make the result structure. */ result = ALLOC(3); DEREFHANDLE(result)->Set(0, DEREFWORDHANDLE(name)); DEREFHANDLE(result)->Set(1, DEREFWORDHANDLE(aliases)); DEREFHANDLE(result)->Set(2, DEREFWORDHANDLE(protocol)); return result; } static Handle makeServEntry(TaskData *taskData, struct servent *serv) { int i; char **p; Handle aliases, name, protocol, result, port; /* Canonical name. */ name = SAVE(C_string_to_Poly(taskData, serv->s_name)); /* Aliases. */ for (i=0, p = serv->s_aliases; *p != NULL; p++, i++); aliases = convert_string_list(taskData, i, serv->s_aliases); /* Port number. */ port = Make_unsigned(taskData, ntohs(serv->s_port)); /* Protocol name. */ protocol = SAVE(C_string_to_Poly(taskData, serv->s_proto)); /* Make the result structure. */ result = ALLOC(4); DEREFHANDLE(result)->Set(0, DEREFWORDHANDLE(name)); DEREFHANDLE(result)->Set(1, DEREFWORDHANDLE(aliases)); DEREFHANDLE(result)->Set(2, DEREFWORDHANDLE(port)); DEREFHANDLE(result)->Set(3, DEREFWORDHANDLE(protocol)); return result; } static Handle makeNetEntry(TaskData *taskData, struct netent *net) { int i; char **p; Handle aliases, name, addrType, result, network; /* Canonical name. */ name = SAVE(C_string_to_Poly(taskData, net->n_name)); /* Aliases. */ for (i=0, p = net->n_aliases; *p != NULL; p++, i++); aliases = convert_string_list(taskData, i, net->n_aliases); /* Address type. */ addrType = Make_unsigned(taskData, net->n_addrtype); /* Protocol name. */ network = Make_unsigned(taskData, ntohl(net->n_net)); /* Make the result structure. */ result = ALLOC(4); DEREFHANDLE(result)->Set(0, DEREFWORDHANDLE(name)); DEREFHANDLE(result)->Set(1, DEREFWORDHANDLE(aliases)); DEREFHANDLE(result)->Set(2, DEREFWORDHANDLE(addrType)); DEREFHANDLE(result)->Set(3, DEREFWORDHANDLE(network)); return result; } static Handle mkAftab(TaskData *taskData, void *arg, char *p) { struct af_tab_struct *af = (struct af_tab_struct *)p; Handle result, name, num; /* Construct a pair of the string and the number. */ name = SAVE(C_string_to_Poly(taskData, af->af_name)); num = Make_unsigned(taskData, af->af_num); result = ALLOC(2); DEREFHANDLE(result)->Set(0, DEREFWORDHANDLE(name)); DEREFHANDLE(result)->Set(1, DEREFWORDHANDLE(num)); return result; } static Handle mkSktab(TaskData *taskData, void *arg, char *p) { struct sk_tab_struct *sk = (struct sk_tab_struct *)p; Handle result, name, num; /* Construct a pair of the string and the number. */ name = SAVE(C_string_to_Poly(taskData, sk->sk_name)); num = Make_unsigned(taskData, sk->sk_num); result = ALLOC(2); DEREFHANDLE(result)->Set(0, DEREFWORDHANDLE(name)); DEREFHANDLE(result)->Set(1, DEREFWORDHANDLE(num)); return result; } /* This sets an option and can also be used to set an integer. */ static Handle setSocketOption(TaskData *taskData, Handle args, int level, int opt) { PIOSTRUCT strm = get_stream(DEREFHANDLE(args)->Get(0).AsObjPtr()); int onOff = get_C_long(taskData, DEREFHANDLE(args)->Get(1)); if (strm == NULL) raise_syscall(taskData, "Stream is closed", EBADF); if (setsockopt(strm->device.sock, level, opt, (char*)&onOff, sizeof(int)) != 0) raise_syscall(taskData, "setsockopt failed", GETERROR); return Make_arbitrary_precision(taskData, 0); } /* Get a socket option as a boolean */ static Handle getSocketOption(TaskData *taskData, Handle args, int level, int opt) { PIOSTRUCT strm = get_stream(args->WordP()); int onOff = 0; socklen_t size = sizeof(int); if (strm == NULL) raise_syscall(taskData, "Stream is closed", EBADF); if (getsockopt(strm->device.sock, level, opt, (char*)&onOff, &size) != 0) raise_syscall(taskData, "getsockopt failed", GETERROR); return Make_arbitrary_precision(taskData, onOff == 0 ? 0 : 1); } /* Get a socket option as an integer */ static Handle getSocketInt(TaskData *taskData, Handle args, int level, int opt) { PIOSTRUCT strm = get_stream(args->WordP()); int optVal = 0; socklen_t size = sizeof(int); if (strm == NULL) raise_syscall(taskData, "Stream is closed", EBADF); if (getsockopt(strm->device.sock, level, opt, (char*)&optVal, &size) != 0) raise_syscall(taskData, "getsockopt failed", GETERROR); return Make_arbitrary_precision(taskData, optVal); } /* Helper function for selectCall. Creates the result vector of active sockets. */ static Handle getSelectResult(TaskData *taskData, Handle args, int offset, fd_set *pFds) { /* Construct the result vectors. */ PolyObject *inVec = DEREFHANDLE(args)->Get(offset).AsObjPtr(); int nVec = OBJECT_LENGTH(inVec); int nRes = 0; int i; for (i = 0; i < nVec; i++) { PIOSTRUCT strm = get_stream(inVec->Get(i).AsObjPtr()); if (FD_ISSET(strm->device.sock, pFds)) nRes++; } if (nRes == 0) return SAVE(EmptyString()); /* None - return empty vector. */ else { Handle result = ALLOC(nRes); inVec = DEREFHANDLE(args)->Get(offset).AsObjPtr(); /* It could have moved as a result of a gc. */ nRes = 0; for (i = 0; i < nVec; i++) { PIOSTRUCT strm = get_stream(inVec->Get(i).AsObjPtr()); if (FD_ISSET(strm->device.sock, pFds)) DEREFWORDHANDLE(result)->Set(nRes++, inVec->Get(i)); } return result; } } /* Wrapper for "select" call. The arguments are arrays of socket ids. These arrays are updated so that "active" sockets are left unchanged and inactive sockets are set to minus one. */ static Handle selectCall(TaskData *taskData, Handle args, int blockType) { fd_set readers, writers, excepts; struct timeval timeout; int i, nVec, selectRes; Handle rdResult, wrResult, exResult, result; /* Set up the bitmaps for the select call from the arrays. */ PolyObject *readVec = DEREFHANDLE(args)->Get(0).AsObjPtr(); PolyObject *writeVec = DEREFHANDLE(args)->Get(1).AsObjPtr(); PolyObject *excVec = DEREFHANDLE(args)->Get(2).AsObjPtr(); FD_ZERO(&readers); FD_ZERO(&writers); FD_ZERO(&excepts); nVec = OBJECT_LENGTH(readVec); for (i = 0; i < nVec; i++) { PIOSTRUCT strm = get_stream(readVec->Get(i).AsObjPtr()); if (strm == NULL) raise_syscall(taskData, "Stream is closed", EBADF); FD_SET(strm->device.sock, &readers); } nVec = OBJECT_LENGTH(writeVec); for (i = 0; i < nVec; i++) { PIOSTRUCT strm = get_stream(writeVec->Get(i).AsObjPtr()); if (strm == NULL) raise_syscall(taskData, "Stream is closed", EBADF); FD_SET(strm->device.sock, &writers); } nVec = OBJECT_LENGTH(excVec); for (i = 0; i < nVec; i++) { PIOSTRUCT strm = get_stream(excVec->Get(i).AsObjPtr()); if (strm == NULL) raise_syscall(taskData, "Stream is closed", EBADF); FD_SET(strm->device.sock, &excepts); } /* Whatever the timeout specified we simply poll here. */ memset(&timeout, 0, sizeof(timeout)); selectRes = select(FD_SETSIZE, &readers, &writers, &excepts, &timeout); if (selectRes < 0) raise_syscall(taskData, "select failed", GETERROR); if (selectRes == 0) { /* Timed out. Have to look at the timeout value. */ switch (blockType) { case 0: /* Check the timeout. */ { /* The time argument is an absolute time. */ #ifdef WINDOWS_PC FILETIME ftTime, ftNow; /* Get the file time. */ get_C_pair(taskData, DEREFHANDLE(args)->Get(3), &ftTime.dwHighDateTime, &ftTime.dwLowDateTime); GetSystemTimeAsFileTime(&ftNow); /* If the timeout time is earlier than the current time we must return, otherwise we block. */ if (CompareFileTime(&ftTime, &ftNow) <= 0) break; /* Return the empty set. */ /* else drop through and block. */ #else /* Unix */ struct timeval tv; /* We have a value in microseconds. We need to split it into seconds and microseconds. */ Handle hTime = SAVE(DEREFWORDHANDLE(args)->Get(3)); Handle hMillion = Make_arbitrary_precision(taskData, 1000000); unsigned long secs = get_C_ulong(taskData, DEREFWORDHANDLE(div_longc(taskData, hMillion, hTime))); unsigned long usecs = get_C_ulong(taskData, DEREFWORDHANDLE(rem_longc(taskData, hMillion, hTime))); /* If the timeout time is earlier than the current time we must return, otherwise we block. */ if (gettimeofday(&tv, NULL) != 0) raise_syscall(taskData, "gettimeofday failed", errno); if ((unsigned long)tv.tv_sec > secs || ((unsigned long)tv.tv_sec == secs && (unsigned long)tv.tv_usec >= usecs)) break; /* else block. */ #endif } case 1: /* Block until one of the descriptors is ready. */ processes->BlockAndRestart(taskData, -1, false, POLY_SYS_network); /*NOTREACHED*/ case 2: /* Just a simple poll - drop through. */ break; } } /* Construct the result vectors. */ rdResult = getSelectResult(taskData, args, 0, &readers); wrResult = getSelectResult(taskData, args, 1, &writers); exResult = getSelectResult(taskData, args, 2, &excepts); result = ALLOC(3); DEREFHANDLE(result)->Set(0, DEREFWORDHANDLE(rdResult)); DEREFHANDLE(result)->Set(1, DEREFWORDHANDLE(wrResult)); DEREFHANDLE(result)->Set(2, DEREFWORDHANDLE(exResult)); return result; } class Networking: public RtsModule { public: virtual void Init(void); virtual void Uninit(void); }; // Declare this. It will be automatically added to the table. static Networking networkingModule; void Networking::Init(void) { #ifdef WINDOWS_PC #ifdef USEWINSOCK2 #define WINSOCK_MAJOR_VERSION 2 #define WINSOCK_MINOR_VERSION 2 #else #define WINSOCK_MAJOR_VERSION 1 #define WINSOCK_MINOR_VERSION 1 #endif WSADATA wsaData; WORD wVersion = MAKEWORD(WINSOCK_MINOR_VERSION, WINSOCK_MAJOR_VERSION); /* Initialise the system and check that the version it supplied is the one we requested. */ if(WSAStartup(wVersion, &wsaData) == 0) { if (wsaData.wVersion == wVersion) winsock_init = 1; else WSACleanup(); } #endif } void Networking::Uninit(void) { #ifdef WINDOWS_PC if (winsock_init) WSACleanup(); winsock_init = 0; #endif } polyml.5.2.1/libpolyml/network.h0000644000175000017500000000200710602661056015642 0ustar daviddavid/* Title: Network functions. Copyright (c) 2000 David C. J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef _NETWORK_H #define _NETWORK_H class SaveVecEntry; typedef SaveVecEntry *Handle; class TaskData; extern Handle Net_dispatch_c(TaskData *taskData, Handle args, Handle code); #endif polyml.5.2.1/libpolyml/noreturn.h0000644000175000017500000000254210506226526016033 0ustar daviddavid/* Title: No return header. Author: David C.J. Matthews Copyright (c) 2006 David C.J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef _NORETURN_H #define _NORETURN_H /* The exception functions don't return but instead raise exceptions. This macro tells the compiler about this and prevents spurious errors. */ #if defined(__GNUC__) || defined(__attribute__) #define NORETURNFN(x) x __attribute__((noreturn)) #define NORET 0 #elif (defined(_MSC_EXTENSIONS) && (_MSC_VER >= 1200)) #define NORETURNFN(x) __declspec(noreturn) x #define NORET 0 #else #define NORETURNFN(x) #define NORET return 0 #endif #endif polyml.5.2.1/libpolyml/objsize.cpp0000644000175000017500000002311510602661056016154 0ustar daviddavid/* Title: Object size Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifdef WIN32 #include "winconfig.h" #else #include "config.h" #endif #ifdef HAVE_STDIO_H #include #endif #ifdef HAVE_SYS_TYPES_H #include #endif #ifdef HAVE_STDLIB_H #include #endif #ifdef HAVE_STRING_H #include #endif #ifdef HAVE_ASSERT_H #include #define ASSERT(x) assert(x) #else #define ASSERT(x) #endif #include "globals.h" #include "arb.h" #include "run_time.h" #include "machine_dep.h" #include "objsize.h" #include "scanaddrs.h" #include "polystring.h" #include "save_vec.h" #include "bitmap.h" #include "memmgr.h" #define MAX_PROF_LEN 100 // Profile lengths between 1 and this class VisitBitmap { public: VisitBitmap(PolyWord *bottom, PolyWord *top): m_bitmap(top - bottom), m_bottom(bottom), m_top(top) {} bool AlreadyVisited(PolyObject *p) { return m_bitmap.TestBit((PolyWord*)p - m_bottom); } void SetVisited(PolyObject *p) { m_bitmap.SetBit((PolyWord*)p - m_bottom); } Bitmap m_bitmap; PolyWord *m_bottom; PolyWord *m_top; }; class ProcessVisitAddresses: public ScanAddress { public: virtual POLYUNSIGNED ScanAddressAt(PolyWord *pt) { return ShowWord(*pt); } virtual PolyObject *ScanObjectAddress(PolyObject *base); POLYUNSIGNED ShowWord(PolyWord w); ProcessVisitAddresses(bool show); ~ProcessVisitAddresses(); VisitBitmap *FindBitmap(PolyWord p); void ShowBytes(PolyObject *start); void ShowCode(PolyObject *start); void ShowWords(PolyObject *start); int total_length; bool show_size; void *io_bottom; void *io_top; VisitBitmap **bitmaps; unsigned nBitmaps; // Counts of objects of each size for mutable and immutable data. unsigned iprofile[MAX_PROF_LEN+1]; unsigned mprofile[MAX_PROF_LEN+1]; }; ProcessVisitAddresses::ProcessVisitAddresses(bool show) { MemSpace *ioSpace = gMem.IoSpace(); io_bottom = ioSpace->bottom; io_top = ioSpace->top; total_length = 0; show_size = show; // Create a bitmap for each of the areas apart from the IO area nBitmaps = gMem.nlSpaces+gMem.npSpaces; // bitmaps = new VisitBitmap*[nBitmaps]; unsigned bm = 0; unsigned j; for (j = 0; j < gMem.npSpaces; j++) { MemSpace *space = gMem.pSpaces[j]; // Permanent areas are filled with objects from the bottom. bitmaps[bm++] = new VisitBitmap(space->bottom, space->top); } for (j = 0; j < gMem.nlSpaces; j++) { LocalMemSpace *space = gMem.lSpaces[j]; // Local areas only have objects from the allocation pointer to the top. bitmaps[bm++] = new VisitBitmap(space->pointer, space->top); } ASSERT(bm == nBitmaps); // Clear the profile counts. for (unsigned i = 0; i < MAX_PROF_LEN+1; i++) { iprofile[i] = mprofile[i] = 0; } } ProcessVisitAddresses::~ProcessVisitAddresses() { if (bitmaps) { for (unsigned i = 0; i < nBitmaps; i++) delete(bitmaps[i]); delete[](bitmaps); } } // Return the bitmap corresponding to the address or NULL if it isn't there. VisitBitmap *ProcessVisitAddresses::FindBitmap(PolyWord p) { for (unsigned i = 0; i < nBitmaps; i++) { VisitBitmap *bm = bitmaps[i]; if (p.AsAddress() > bm->m_bottom && p.AsAddress() <= bm->m_top) return bm; } return 0; } void ProcessVisitAddresses::ShowBytes(PolyObject *start) { POLYUNSIGNED bytes = start->Length() * sizeof(PolyWord); char *array = (char *) start; putc('\n', stdout); if (start->IsMutable()) printf("MUTABLE "); printf("BYTES:%p:%lu\n", array, bytes); POLYUNSIGNED i, n; for (i = 0, n = 0; n < bytes; n++) { printf("%02x ",array[n] & 0xff); i++; if (i == 16) { putc('\n', stdout); i = 0; } } if (i != 0) putc('\n', stdout); } #define MAXNAME 500 void ProcessVisitAddresses::ShowCode(PolyObject *start) { POLYUNSIGNED length = start->Length(); putc('\n', stdout); if (start->IsMutable()) printf("MUTABLE "); char buffer[MAXNAME+1]; PolyWord *consts = start->ConstPtrForCode(); PolyWord string = consts[0]; if (string == TAGGED(0)) strcpy(buffer, ""); else (void) Poly_string_to_C(string, buffer, sizeof(buffer)); printf("CODE:%p:%lu %s\n", start, length, buffer); POLYUNSIGNED i, n; for (i = 0, n = 0; n < length; n++) { if (i != 0) putc('\t', stdout); printf("%8p ", start->Get(n).AsObjPtr()); i++; if (i == 4) { putc('\n', stdout); i = 0; } } if (i != 0) putc('\n', stdout); } void ProcessVisitAddresses::ShowWords(PolyObject *start) { POLYUNSIGNED length = start->Length(); putc('\n', stdout); if (start->IsMutable()) printf("MUTABLE "); printf("WORDS:%p:%lu\n", start, length); POLYUNSIGNED i, n; for (i = 0, n = 0; n < length; n++) { if (i != 0) putc('\t', stdout); printf("%8p ", start->Get(n).AsObjPtr()); i++; if (i == 4) { putc('\n', stdout); i = 0; } } if (i != 0) putc('\n', stdout); } // This is called initially to print the top-level object. // Since we don't process stacks it probably doesn't get called elsewhere. PolyObject *ProcessVisitAddresses::ScanObjectAddress(PolyObject *base) { POLYUNSIGNED lengthWord = ShowWord(base); if (lengthWord) ScanAddressesInObject(base, lengthWord); return base; } // Handle the normal case. Print the object at this word and // return true is it must be handled recursively. POLYUNSIGNED ProcessVisitAddresses::ShowWord(PolyWord w) { if (IS_INT(w)) return 0; /* not a pointer */ if (w.AsAddress() >= io_bottom && w.AsAddress() < io_top) return 0; /* IO segment */ if (w == PolyWord::FromUnsigned(0)) return 0; VisitBitmap *bm = FindBitmap(w); if (bm == 0) { printf("Bad address "ZERO_X"%p found\n", w.AsObjPtr()); return 0; } PolyObject *p; if (OBJ_IS_CODEPTR(w)) p = ObjCodePtrToPtr(w.AsCodePtr()); /* find beginning of the code object */ else p = w.AsObjPtr(); /* Have we already visited this object? */ if (bm->AlreadyVisited(p)) return 0; bm->SetVisited(p); POLYUNSIGNED L = p->LengthWord(); POLYUNSIGNED obj_length = OBJ_OBJECT_LENGTH(L); // Increment the appropriate size profile count. if (p->IsMutable()) { if (obj_length > MAX_PROF_LEN) mprofile[MAX_PROF_LEN]++; else mprofile[obj_length]++; } else { if (obj_length > MAX_PROF_LEN) iprofile[MAX_PROF_LEN]++; else iprofile[obj_length]++; } total_length += obj_length + 1; /* total space needed for object */ if (OBJ_IS_BYTE_OBJECT(L)) { if (show_size) ShowBytes(p); return 0; } else if (OBJ_IS_STACK_OBJECT(L)) { return 0; // We shouldn't get stack objects. } else if (OBJ_IS_CODE_OBJECT(L)) { PolyWord *cp; POLYUNSIGNED const_count; p->GetConstSegmentForCode(cp, const_count); if (show_size) ShowCode(p); return L; // Process addresses in it. } else /* Word object */ { if (show_size) ShowWords(p); return L; // Process addresses in it. } } Handle ObjSize(TaskData *taskData, Handle obj) { ProcessVisitAddresses process(false); process.ScanObjectAddress(obj->WordP()); return Make_arbitrary_precision(taskData, process.total_length); } Handle ShowSize(TaskData *taskData, Handle obj) { ProcessVisitAddresses process(true); process.ScanObjectAddress(obj->WordP()); fflush(stdout); /* We need this for Windows at least. */ return Make_arbitrary_precision(taskData, process.total_length); } static void printfprof(unsigned *counts) { for(unsigned i = 0; i < MAX_PROF_LEN+1; i++) { if (counts[i] != 0) { if (i == MAX_PROF_LEN) printf(">%d\t%u\n", MAX_PROF_LEN, counts[i]); else printf("%d\t%u\n", i, counts[i]); } } } Handle ObjProfile(TaskData *taskData, Handle obj) { ProcessVisitAddresses process(false); process.ScanObjectAddress(obj->WordP()); printf("\nImmutable object sizes and counts\n"); printfprof(process.iprofile); printf("\nMutable object sizes and counts\n"); printfprof(process.mprofile); fflush(stdout); /* We need this for Windows at least. */ return Make_arbitrary_precision(taskData, process.total_length); } polyml.5.2.1/libpolyml/objsize.h0000644000175000017500000000225010602661056015616 0ustar daviddavid/* Title: objsize.h - export signature for objsize.c Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef OBJSIZE_H_DEFINED #define OBJSIZE_H_DEFINED class SaveVecEntry; typedef SaveVecEntry *Handle; class TaskData; extern Handle ObjSize(TaskData *taskData, Handle obj); extern Handle ShowSize(TaskData *taskData, Handle obj); extern Handle ObjProfile(TaskData *taskData, Handle obj); #endif polyml.5.2.1/libpolyml/os_specific.h0000644000175000017500000000202410602661056016436 0ustar daviddavid/* Title: Operating Specific functions. Copyright (c) 2000 David C. J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef _OSSPEC_H #define _OSSPEC_H class SaveVecEntry; typedef SaveVecEntry *Handle; class TaskData; extern Handle OS_spec_dispatch_c(TaskData *taskData, Handle args, Handle code); #endif polyml.5.2.1/libpolyml/osmem.cpp0000644000175000017500000001324710705656511015640 0ustar daviddavid/* Title: osomem.cpp - Interface to OS memory management Copyright (c) 2006 David C.J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifdef WIN32 #include "winconfig.h" #else #include "config.h" #endif #ifdef HAVE_SYS_TYPES_H #include #endif #ifdef HAVE_SYS_MMAN_H #include #endif #include "osmem.h" // Linux prefers MAP_ANONYMOUS to MAP_ANON #ifndef MAP_ANON #ifdef MAP_ANONYMOUS #define MAP_ANON MAP_ANONYMOUS #endif #endif #if defined(HAVE_MMAP) && defined(MAP_ANON) // We don't use autoconf's test for mmap here because that tests for // file mapping. Instead the test simply tests for the presence of an mmap // function. // We also insist that the OS supports MAP_ANON or MAP_ANONYMOUS. Older // versions of Solaris required the use of /dev/zero instead. We don't // support that. #ifdef HAVE_UNISTD_H #include #endif #ifdef HAVE_SYS_PARAM_H #include #endif // How do we get the page size? #ifndef HAVE_GETPAGESIZE #ifdef _SC_PAGESIZE #define getpagesize() sysconf(_SC_PAGESIZE) #else // If this fails we're stuck #define getpagesize() PAGESIZE #endif #endif static int ConvertPermissions(unsigned perm) { int res = 0; if (perm & PERMISSION_READ) res |= PROT_READ; if (perm & PERMISSION_WRITE) res |= PROT_WRITE; if (perm & PERMISSION_EXEC) res |= PROT_EXEC; return res; } // Allocate space and return a pointer to it. The size is the minimum // size requested and it is updated with the actual space allocated. // Returns NULL if it cannot allocate the space. void *OSMem::Allocate(size_t &space, unsigned permissions) { int prot = ConvertPermissions(permissions); // Round up to an integral number of pages. int pageSize = getpagesize(); space = (space + pageSize-1) & ~(pageSize-1); int fd = -1; // This value is required by FreeBSD. Linux doesn't care void *result = mmap(0, space, prot, MAP_PRIVATE|MAP_ANON, fd, 0); // Convert MAP_FAILED (-1) into NULL if (result == MAP_FAILED) return 0; return result; } #ifdef SOLARIS #define FIXTYPE (caddr_t) #else #define FIXTYPE #endif // Release the space previously allocated. This must free the whole of // the segment. The space must be the size actually allocated. bool OSMem::Free(void *p, size_t space) { return munmap(FIXTYPE p, space) == 0; } // Adjust the permissions on a segment. This must apply to the // whole of a segment. bool OSMem::SetPermissions(void *p, size_t space, unsigned permissions) { int res = mprotect(FIXTYPE p, space, ConvertPermissions(permissions)); return res != -1; } #elif defined(WINDOWS_PC) // Use Windows memory management. #include static int ConvertPermissions(unsigned perm) { if (perm & PERMISSION_WRITE) { // Write. Always includes read permission. if (perm & PERMISSION_EXEC) return PAGE_EXECUTE_READWRITE; else return PAGE_READWRITE; } else if (perm & PERMISSION_EXEC) { // Execute but not write. if (perm & PERMISSION_READ) return PAGE_EXECUTE_READ; else return PAGE_EXECUTE; // Execute only } else if(perm & PERMISSION_READ) return PAGE_READONLY; else return PAGE_NOACCESS; } // Allocate space and return a pointer to it. The size is the minimum // size requested and it is updated with the actual space allocated. // Returns NULL if it cannot allocate the space. void *OSMem::Allocate(size_t &space, unsigned permissions) { // Get the page size and round up to that multiple. SYSTEM_INFO sysInfo; GetSystemInfo(&sysInfo); DWORD pageSize = sysInfo.dwPageSize; space = (space + pageSize-1) & ~(pageSize-1); return VirtualAlloc(0, space, MEM_RESERVE|MEM_COMMIT, ConvertPermissions(permissions)); } // Release the space previously allocated. This must free the whole of // the segment. The space must be the size actually allocated. bool OSMem::Free(void *p, size_t space) { return VirtualFree(p, 0, MEM_RELEASE) == TRUE; } // Adjust the permissions on a segment. This must apply to the // whole of a segment. bool OSMem::SetPermissions(void *p, size_t space, unsigned permissions) { DWORD oldProtect; return VirtualProtect(p, space, ConvertPermissions(permissions), &oldProtect) == TRUE; } #else #ifdef HAVE_STDLIB_H #include #endif #ifdef HAVE_MALLOC_H #include #endif // Use calloc to allocate the memory. Using calloc ensures the memory is // zeroed and is compatible with the other allocators. void *OSMem::Allocate(size_t &bytes, unsigned permissions) { return calloc(bytes, 1); } bool OSMem::Free(void *p, size_t/*space*/) { free(p); return true; } // We can't do this if we don't have mprotect. bool OSMem::SetPermissions(void *p, size_t space, unsigned permissions) { return true; // Let's hope this is all right. } #endif // Create the global object for the memory manager. static OSMem osmemMan; OSMem *osMemoryManager = &osmemMan; polyml.5.2.1/libpolyml/osmem.h0000644000175000017500000000401110506226526015270 0ustar daviddavid/* Title: osomem.h - Interface to OS memory management Copyright (c) 2006 David C.J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef OS_MEM_H_INCLUDED #define OS_MEM_H_INCLUDED // We need size_t so include these two here. #ifdef HAVE_STRING_H #include #endif #ifdef HAVE_STDLIB_H #include #endif // This class provides access to the memory management provided by the // operating system. It would be nice if we could always use malloc and // free for this but we need to have execute permission on the code // objects. #define PERMISSION_READ 1 #define PERMISSION_WRITE 2 #define PERMISSION_EXEC 4 class OSMem { public: // Allocate space and return a pointer to it. The size is the minimum // size requested in bytes and it is updated with the actual space allocated. // Returns NULL if it cannot allocate the space. void *Allocate(size_t &bytes, unsigned permissions); // Release the space previously allocated. This must free the whole of // the segment. The space must be the size actually allocated. bool Free(void *p, size_t space); // Adjust the permissions on a segment. This must apply to the // whole of a segment. bool SetPermissions(void *p, size_t space, unsigned permissions); }; extern OSMem *osMemoryManager; #endif polyml.5.2.1/libpolyml/pecoffexport.cpp0000644000175000017500000003131510602661056017214 0ustar daviddavid/* Title: Export memory as a PE/COFF object Author: David C. J. Matthews. Copyright (c) 2006 David C. J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR H PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifdef WIN32 #include "winconfig.h" #else #include "config.h" #endif #include #include #ifdef HAVE_STDDEF_H #include #endif #ifdef HAVE_STRING_H #include #endif #ifdef HAVE_ERRNO_H #include #endif #ifdef HAVE_ASSERT_H #include #endif #include #include "globals.h" #include "pecoffexport.h" #include "machine_dep.h" #include "scanaddrs.h" #include "run_time.h" #include "polyexports.h" #include "version.h" #include "polystring.h" #ifdef _DEBUG /* MS C defines _DEBUG for debug builds. */ #define DEBUG #endif #ifdef DEBUG #define ASSERT(x) assert(x) #else #define ASSERT(x) #endif // Generate the address relative to the start of the segment. void PECOFFExport::setRelocationAddress(void *p, DWORD *reloc) { unsigned area = findArea(p); POLYUNSIGNED offset = (char*)p - (char*)memTable[area].mtAddr; *reloc = offset; } // Create a relocation entry for an address at a given location. PolyWord PECOFFExport::createRelocation(PolyWord p, void *relocAddr) { IMAGE_RELOCATION reloc; // Set the offset within the section we're scanning. setRelocationAddress(relocAddr, &reloc.VirtualAddress); void *addr = p.AsAddress(); unsigned addrArea = findArea(addr); POLYUNSIGNED offset = (char*)addr - (char*)memTable[addrArea].mtAddr; reloc.SymbolTableIndex = addrArea; reloc.Type = IMAGE_REL_I386_DIR32; fwrite(&reloc, sizeof(reloc), 1, exportFile); relocationCount++; return PolyWord::FromUnsigned(offset); } void PECOFFExport::writeSymbol(const char *symbolName, __int32 value, int section, bool isExtern) { IMAGE_SYMBOL symbol; memset(&symbol, 0, sizeof(symbol)); // Zero the unused part of the string // Short symbol names go in the entry, longer ones go in the string table. if (strlen(symbolName) <= 8) strcpy((char*)symbol.N.ShortName, symbolName); else { symbol.N.Name.Short = 0; // We have to add 4 bytes because the first word written to the file is a length word. symbol.N.Name.Long = stringTable.makeEntry(symbolName) + sizeof(unsigned); } symbol.Value = value; symbol.SectionNumber = section; symbol.Type = IMAGE_SYM_TYPE_NULL; symbol.StorageClass = isExtern ? IMAGE_SYM_CLASS_EXTERNAL : IMAGE_SYM_CLASS_STATIC; fwrite(&symbol, sizeof(symbol), 1, exportFile); symbolCount++; } /* This is called for each constant within the code. Print a relocation entry for the word and return a value that means that the offset is saved in original word. */ void PECOFFExport::ScanConstant(byte *addr, ScanRelocationKind code) { IMAGE_RELOCATION reloc; PolyWord p = GetConstantValue(addr, code); if (IS_INT(p) || p == PolyWord::FromUnsigned(0)) return; void *a = p.AsAddress(); unsigned aArea = findArea(a); // We don't need a relocation if this is relative to the current segment // since the relative address will already be right. if (code == PROCESS_RELOC_I386RELATIVE && aArea == findArea(addr)) return; setRelocationAddress(addr, &reloc.VirtualAddress); // Set the value at the address to the offset relative to the symbol. POLYUNSIGNED offset = (char*)a - (char*)memTable[aArea].mtAddr; reloc.SymbolTableIndex = aArea; // The value we store here is the offset whichever relocation method // we're using. for (unsigned i = 0; i < sizeof(PolyWord); i++) { addr[i] = (byte)(offset & 0xff); offset >>= 8; } if (code == PROCESS_RELOC_I386RELATIVE) reloc.Type = IMAGE_REL_I386_REL32; else reloc.Type = IMAGE_REL_I386_DIR32; fwrite(&reloc, sizeof(reloc), 1, exportFile); relocationCount++; } // Set the file alignment. void PECOFFExport::alignFile(int align) { char pad[32]; // Maximum alignment int offset = ftell(exportFile); memset(pad, 0, sizeof(pad)); if ((offset % align) == 0) return; fwrite(&pad, align - (offset % align), 1, exportFile); } void PECOFFExport::exportStore(void) { PolyWord *p; IMAGE_FILE_HEADER fhdr; IMAGE_SECTION_HEADER *sections = 0; IMAGE_RELOCATION reloc; unsigned i; // These are written out as the description of the data. exportDescription exports; time_t now; time(&now); sections = new IMAGE_SECTION_HEADER [memTableEntries+1]; // Plus one for the tables. // Write out initial values for the headers. These are overwritten at the end. // File header memset(&fhdr, 0, sizeof(fhdr)); fhdr.Machine = IMAGE_FILE_MACHINE_I386; // i386 fhdr.NumberOfSections = memTableEntries+1; // One for each area plus one for the tables. (void)time((time_t*)&fhdr.TimeDateStamp); //fhdr.NumberOfSymbols = memTableEntries+1; // One for each area plus "poly_exports" fwrite(&fhdr, sizeof(fhdr), 1, exportFile); // Write it for the moment. // Section headers. for (i = 0; i < memTableEntries; i++) { memset(§ions[i], 0, sizeof(IMAGE_SECTION_HEADER)); sprintf((char*)sections[i].Name, "poly%1u", i); sections[i].SizeOfRawData = memTable[i].mtLength; // We always include write access at the moment. sections[i].Characteristics = IMAGE_SCN_MEM_WRITE | IMAGE_SCN_MEM_READ | IMAGE_SCN_ALIGN_8BYTES | IMAGE_SCN_CNT_INITIALIZED_DATA; if (memTable[i].mtFlags & MTF_EXECUTABLE) sections[i].Characteristics |= IMAGE_SCN_MEM_EXECUTE; } // Extra section for the tables. memset(§ions[memTableEntries], 0, sizeof(IMAGE_SECTION_HEADER)); sprintf((char*)sections[memTableEntries].Name, "polyT"); sections[memTableEntries].SizeOfRawData = sizeof(exports) + (memTableEntries+1)*sizeof(memoryTableEntry); // Don't need write or execute access here sections[memTableEntries].Characteristics = IMAGE_SCN_MEM_READ | IMAGE_SCN_ALIGN_8BYTES | IMAGE_SCN_CNT_INITIALIZED_DATA; fwrite(sections, sizeof(IMAGE_SECTION_HEADER), memTableEntries+1, exportFile); // Write it for the moment. for (i = 0; i < memTableEntries; i++) { if (i != ioMemEntry) // Don't relocate the IO area { // Relocations. The first entry is special and is only used if // we have more than 64k relocations. It contains the number of relocations but is // otherwise ignored. sections[i].PointerToRelocations = ftell(exportFile); memset(&reloc, 0, sizeof(reloc)); fwrite(&reloc, sizeof(reloc), 1, exportFile); relocationCount = 1; // Create the relocation table and turn all addresses into offsets. char *start = (char*)memTable[i].mtAddr; char *end = start + memTable[i].mtLength; for (p = (PolyWord*)start; p < (PolyWord*)end; ) { p++; PolyObject *obj = (PolyObject*)p; POLYUNSIGNED length = obj->Length(); relocateObject(obj); if (length != 0 && obj->IsCodeObject()) machineDependent->ScanConstantsWithinCode(obj, this); p += length; } // If there are more than 64k relocations set this bit and set the value to 64k-1. if (relocationCount >= 65535) { sections[i].NumberOfRelocations = 65535; sections[i].Characteristics |= IMAGE_SCN_LNK_NRELOC_OVFL; // We have to go back and patch up the first (dummy) relocation entry // which contains the count. fseek(exportFile, sections[i].PointerToRelocations, SEEK_SET); memset(&reloc, 0, sizeof(reloc)); reloc.VirtualAddress = relocationCount; fwrite(&reloc, sizeof(reloc), 1, exportFile); fseek(exportFile, 0, SEEK_END); // Return to the end of the file. } else sections[i].NumberOfRelocations = relocationCount; } } // We don't need to handle relocation overflow here. sections[memTableEntries].PointerToRelocations = ftell(exportFile); relocationCount = 0; // Relocations for "exports" and "memTable"; // Address of "memTable" within "exports". We can't use createRelocation because // the position of the relocation is not in either the mutable or the immutable area. reloc.Type = IMAGE_REL_I386_DIR32; reloc.SymbolTableIndex = memTableEntries; // Relative to poly_exports reloc.VirtualAddress = offsetof(exportDescription, memTable); fwrite(&reloc, sizeof(reloc), 1, exportFile); relocationCount++; // Address of "rootFunction" within "exports" reloc.Type = IMAGE_REL_I386_DIR32; unsigned rootAddrArea = findArea(rootFunction); reloc.SymbolTableIndex = rootAddrArea; reloc.VirtualAddress = offsetof(exportDescription, rootFunction); fwrite(&reloc, sizeof(reloc), 1, exportFile); relocationCount++; for (i = 0; i < memTableEntries; i++) { reloc.Type = IMAGE_REL_I386_DIR32; reloc.SymbolTableIndex = i; // Relative to base symbol reloc.VirtualAddress = sizeof(exportDescription) + i * sizeof(memoryTableEntry) + offsetof(memoryTableEntry, mtAddr); fwrite(&reloc, sizeof(reloc), 1, exportFile); relocationCount++; } ASSERT(relocationCount < 65535); // Shouldn't get overflow!! sections[memTableEntries].NumberOfRelocations = relocationCount; // Now the binary data. for (i = 0; i < memTableEntries; i++) { sections[i].PointerToRawData = ftell(exportFile); fwrite(memTable[i].mtAddr, 1, memTable[i].mtLength, exportFile); } sections[memTableEntries].PointerToRawData = ftell(exportFile); memset(&exports, 0, sizeof(exports)); memset(memTable, 0, sizeof(memTable)); exports.structLength = sizeof(exportDescription); exports.memTableSize = sizeof(memoryTableEntry); exports.memTableEntries = memTableEntries; exports.ioIndex = 0; // The io entry is the first in the memory table exports.memTable = (memoryTableEntry *)sizeof(exports); // It follows immediately after this. exports.rootFunction = (void*)((char*)rootFunction - (char*)memTable[rootAddrArea].mtAddr); exports.timeStamp = now; exports.ioSpacing = ioSpacing; exports.architecture = machineDependent->MachineArchitecture(); exports.rtsVersion = POLY_version_number; // Set the address values to zero before we write. They will always // be relative to their base symbol. for (i = 0; i < memTableEntries; i++) memTable[i].mtAddr = 0; fwrite(&exports, sizeof(exports), 1, exportFile); fwrite(memTable, sizeof(memoryTableEntry), memTableEntries, exportFile); // First the symbol table. We have one entry for the exports and an additional // entry for each of the sections. fhdr.PointerToSymbolTable = ftell(exportFile); // The section numbers are one-based. Zero indicates the "common" area. // First write symbols for each section and for poly_exports. for (i = 0; i < memTableEntries; i++) { if (i == ioMemEntry) writeSymbol("ioarea", 0, i+1, false); else { char buff[50]; sprintf(buff, "area%0d", i); writeSymbol(buff, 0, i+1, false); } } // This is the only "real" symbol. writeSymbol("_poly_exports", 0, memTableEntries+1, true); fhdr.NumberOfSymbols = symbolCount; // The string table is written immediately after the symbols. // The length is included as the first word. unsigned strSize = stringTable.stringSize + sizeof(unsigned); fwrite(&strSize, sizeof(strSize), 1, exportFile); fwrite(stringTable.strings, stringTable.stringSize, 1, exportFile); // Rewind to rewrite the headers. fseek(exportFile, 0, SEEK_SET); fwrite(&fhdr, sizeof(fhdr), 1, exportFile); fwrite(sections, sizeof(IMAGE_SECTION_HEADER), memTableEntries+1, exportFile); fclose(exportFile); exportFile = NULL; delete[](sections); } polyml.5.2.1/libpolyml/pecoffexport.h0000644000175000017500000000345010602661056016660 0ustar daviddavid/* Title: Export memory as a PE/COFF object Author: David C. J. Matthews. Copyright (c) 2006 David C. J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR H PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef PECOFFEXPORT_H_INCLUDED #define PECOFFEXPORT_H_INCLUDED #include "scanaddrs.h" // For base class #include "exporter.h" #include #include class PECOFFExport: public Exporter, public ScanAddress { public: PECOFFExport(): relocationCount(0), symbolCount(0) {} public: virtual void exportStore(void); private: // ScanAddress overrides virtual void ScanConstant(byte *addrOfConst, ScanRelocationKind code); // At the moment we should only get calls to ScanConstant. virtual PolyObject *ScanObjectAddress(PolyObject *base) { return base; } void alignFile(int align); private: void setRelocationAddress(void *p, DWORD *reloc); PolyWord createRelocation(PolyWord p, void *relocAddr); void writeSymbol(const char *symbolName, __int32 value, int section, bool isExtern); unsigned relocationCount; unsigned symbolCount; ExportStringTable stringTable; }; #endif polyml.5.2.1/libpolyml/pexport.cpp0000644000175000017500000007377410772163716016240 0ustar daviddavid/* Title: Export and import memory in a portable format Author: David C. J. Matthews. Copyright (c) 2006-7 David C. J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR H PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifdef WIN32 #include "winconfig.h" #else #include "config.h" #endif #ifdef HAVE_STDIO_H #include #endif #ifdef HAVE_TIME_H #include #endif #ifdef HAVE_ERRNO_H #include #endif #ifdef HAVE_ASSERT_H #include #define ASSERT(x) assert(x) #else #define ASSERT(x) #endif #include "globals.h" #include "pexport.h" #include "machine_dep.h" #include "scanaddrs.h" #include "run_time.h" #include "polyexports.h" #include "version.h" #include "sys.h" #include "polystring.h" #include "processes.h" // For IO_SPACING #include "memmgr.h" #include "osmem.h" /* This file contains the code both to export the file and to import it in a new session. */ PExport::PExport() { pMap = 0; nMapSize = 0; nObjects = 0; indexOrder = 0; } PExport::~PExport() { free(pMap); free(indexOrder); } // Get the index corresponding to an address. unsigned long PExport::getIndex(PolyObject *p) { // Binary chop to find the index from the address. unsigned long lower = 0, upper = nObjects; while (1) { ASSERT(lower < upper); unsigned long middle = (lower+upper)/2; ASSERT(middle >= 0 && middle < nObjects); if (p < pMap[middle]) { // Use lower to middle upper = middle; } else if (p > pMap[middle]) { // Use middle+1 to upper lower = middle+1; } else // Found it return middle; } } void PExport::printCodeAddr(byte *q) // Address into code. Either the pc field of a stack segment or // a word + 2 format address. { PolyObject *obj = ObjCodePtrToPtr(q); unsigned long a = getIndex(obj); fprintf(exportFile, "$%lu+%lu", a, (POLYUNSIGNED)(q - (byte*)obj)); } /* Get the index corresponding to an address. */ void PExport::printAddress(void *p) { unsigned area = findArea(p); if (area == ioMemEntry) { // Is it an IO entry? POLYUNSIGNED byteOffset = (char*)p - (char*)memTable[area].mtAddr; unsigned ioEntry = byteOffset / (ioSpacing*sizeof(PolyWord)); unsigned ioOffset = byteOffset - ioEntry * (ioSpacing*sizeof(PolyWord)); ASSERT(ioEntry >= 0 && ioEntry < POLY_SYS_vecsize); if (ioOffset == 0) fprintf(exportFile, "I%d", ioEntry); else fprintf(exportFile, "J%d+%d", ioEntry, ioOffset); // Can this happen now? } else fprintf(exportFile, "@%lu", getIndex((PolyObject*)p)); } void PExport::printValue(PolyWord q) { if (IS_INT(q) || q == PolyWord::FromUnsigned(0)) fprintf(exportFile, "%ld", UNTAGGED(q)); else if (OBJ_IS_CODEPTR(q)) printCodeAddr(q.AsCodePtr()); else printAddress(q.AsAddress()); } void PExport::printObject(PolyObject *p) { POLYUNSIGNED length = p->Length(); POLYUNSIGNED i; unsigned long myIndex = getIndex(p); fprintf(exportFile, "%lu:", myIndex); if (p->IsMutable()) putc('M', exportFile); if (OBJ_IS_NEGATIVE(p->LengthWord())) putc('N', exportFile); if (OBJ_IS_WEAKREF_OBJECT(p->LengthWord())) putc('W', exportFile); if (OBJ_IS_NO_OVERWRITE(p->LengthWord())) putc('V', exportFile); if (p->IsByteObject()) { /* May be a string, a long format arbitrary precision number or a real number. */ PolyStringObject* ps = (PolyStringObject*)p; /* See if the first word is a possible length. The length cannot be one because single character strings are represented by the character. */ /* This is not infallible but it seems to be good enough to detect the strings. */ if (ps->length > 1 && (POLYUNSIGNED)((ps->length + sizeof(PolyWord) -1) / sizeof(PolyWord)) == length-1) { /* Looks like a string. */ fprintf(exportFile, "S%lu|", ps->length); for (unsigned i = 0; i < ps->length; i++) { char ch = ps->chars[i]; fprintf(exportFile, "%02x", ch); } } else { /* Not a string. May be an arbitrary precision integer. If the source and destination word lengths differ we could find that some long-format arbitrary precision numbers could be represented in the tagged short form or vice-versa. The former case might give rise to errors because when comparing two arbitrary precision numbers for equality we assume that they are not equal if they have different representation. The latter case could be a problem because we wouldn't know whether to convert the tagged form to long form, which would be correct if the value has type "int" or to truncate it which would be correct for "word". It could also be a real number but that doesn't matter if we recompile everything on the new machine. */ byte *u = (byte*)p; putc('B', exportFile); fprintf(exportFile, "%lu|", length*sizeof(PolyWord)); for (unsigned i = 0; i < (unsigned)(length*sizeof(PolyWord)); i++) { fprintf(exportFile, "%02x", u[i]); } } } else if (p->IsCodeObject()) { POLYUNSIGNED constCount, i; PolyWord *cp; ASSERT(! p->IsMutable() ); /* Work out the number of bytes in the code and the number of constants. */ p->GetConstSegmentForCode(cp, constCount); /* The byte count is the length of the segment minus the number of constant minus one for the constant count, one for the marker word, one for the byte count and one for the profile count. */ POLYUNSIGNED byteCount = (length - constCount - 4) * sizeof(PolyWord); fprintf(exportFile, "C%lu,%lu|", constCount, byteCount); // First the code. byte *u = (byte*)p; for (i = 0; i < byteCount; i++) fprintf(exportFile, "%02x", u[i]); putc('|', exportFile); // Now the constants. for (i = 0; i < constCount; i++) { printValue(cp[i]); if (i < constCount-1) putc(',', exportFile); } putc('|', exportFile); // Finally any constants in the code object. machineDependent->ScanConstantsWithinCode(p, this); } else if (p->IsStackObject()) { StackObject *s = (StackObject*)p; PolyWord *q; ASSERT(! p->IsMutable()); fprintf(exportFile, "Q%lu|", length); /* First the standard registers, space, pc, sp, hr. */ fprintf(exportFile, "%lu,", s->p_space); /* pc may be TAGGED(0) indicating a retry. */ PolyWord pc = PolyWord::FromCodePtr(s->p_pc); if (pc == TAGGED(0)) fprintf(exportFile, "%lu,\n", TAGGED(0).AsUnsigned()); else printCodeAddr(s->p_pc); putc(',', exportFile); fprintf(exportFile, "%%%lu+%lu,", myIndex, (POLYUNSIGNED)(s->p_sp-(PolyWord*)p)); /* Word offset of sp. */ fprintf(exportFile, "%%%lu+%lu", myIndex, (POLYUNSIGNED)(s->p_hr-(PolyWord*)p)); /* Word offset of hr. */ /* Checked registers. */ fprintf(exportFile, " %lu|", s->p_nreg); PolyWord *stackStart = (PolyWord*)p; PolyWord *stackEnd = stackStart+length; for (i = 0; i < s->p_nreg; i++) { PolyWord r = s->p_reg[i]; if (r.AsStackAddr() >= stackStart && r.AsStackAddr() < stackEnd) fprintf(exportFile, "%%%lu+%lu", myIndex, (POLYUNSIGNED)(r.AsStackAddr() - (PolyWord*)p)); /* It seems we can have zeros in the registers, at least on the i386. */ else if (r == PolyWord::FromUnsigned(0)) fprintf(exportFile, "0"); else printValue(r); if (i < s->p_nreg-1) putc(',', exportFile); } /* Unchecked registers, just as numbers. */ POLYUNSIGNED nUnchecked = s->p_reg[i++].AsUnsigned(); printf(" %lu|", nUnchecked); nUnchecked += i; for (; i < nUnchecked; i++) { fprintf(exportFile, "%lu", s->p_reg[i].AsUnsigned()); if (i < nUnchecked-1) putc(',', exportFile); } q = s->p_sp; /* Now the values on the stack. */ POLYUNSIGNED stackLength = length - (s->p_sp-stackStart); fprintf(exportFile, " %lu|", stackLength); q = s->p_sp; for (i = 0; i < stackLength; i++) { PolyWord r = q[i]; /* A stack may contain a value which is an offset. */ if (r.AsStackAddr() >= stackStart && r.AsStackAddr() < stackEnd) fprintf(exportFile, "%%%lu+%lu", myIndex, (POLYUNSIGNED)(r.AsStackAddr() - (PolyWord*)p)); else printValue(r); if (i < stackLength-1) putc(',', exportFile); } } else /* Ordinary objects, essentially tuples. */ { fprintf(exportFile, "O%lu|", length); for (i = 0; i < length; i++) { printValue(p->Get(i)); if (i < length-1) putc(',', exportFile); } } fprintf(exportFile, "\n"); } /* This is called for each constant within the code. Print a relocation entry for the word and return a value that means that the offset is saved in original word. */ void PExport::ScanConstant(byte *addr, ScanRelocationKind code) { PolyWord p = GetConstantValue(addr, code); // We put in all the values including tagged constants. PolyObject *obj = ObjCodePtrToPtr(addr); // Put in the byte offset and the relocation type code. fprintf(exportFile, "%lu,%d,", (POLYUNSIGNED)(addr - (byte*)obj), code); printValue(p); // The value to plug in. fprintf(exportFile, " "); } void PExport::exportStore(void) { unsigned i; time_t now; time(&now); // Calculate a first guess for the map size based on the space size totalBytes = 0; void *startAddr = 0; for (i = 0; i < memTableEntries; i++) { if (i != ioMemEntry) { totalBytes += memTable[i].mtLength; // Get the lowest address. if (startAddr == 0 || memTable[i].mtAddr < startAddr) startAddr = memTable[i].mtAddr; } } // Create a map entry for each entry. Allow five words per object. nMapSize = totalBytes/(sizeof(PolyWord)*5); pMap = (PolyObject **)malloc(sizeof(PolyObject*)*nMapSize); if (pMap == 0) throw MemoryException(); // We want the entries in pMap to be in ascending // order of address to make searching easy so we need to process the areas // in order of increasing address, which may not be the order in memTable. indexOrder = (unsigned*)calloc(sizeof(unsigned), memTableEntries-1); if (indexOrder == 0) throw MemoryException(); unsigned items = 0; for (i = 0; i < memTableEntries; i++) { if (i != ioMemEntry) { unsigned j = items; while (j > 0 && memTable[i].mtAddr < memTable[indexOrder[j-1]].mtAddr) { indexOrder[j] = indexOrder[j-1]; j--; } indexOrder[j] = i; items++; } } ASSERT(items == memTableEntries-1); // Process the area in order of ascending address. for (i = 0; i < items; i++) { unsigned index = indexOrder[i]; char *start = (char*)memTable[index].mtAddr; char *end = start + memTable[index].mtLength; for (PolyWord *p = (PolyWord*)start; p < (PolyWord*)end; ) { p++; PolyObject *obj = (PolyObject*)p; if (nObjects == nMapSize) { // Need to expand the array. PolyObject **newMap = (PolyObject **)realloc(pMap, (nMapSize + nMapSize/2)*sizeof(PolyObject*)); if (newMap == 0) throw MemoryException(); pMap = newMap; } POLYUNSIGNED length = obj->Length(); pMap[nObjects++] = obj; p += length; } } /* Start writing the information. */ fprintf(exportFile, "Objects\t%lu\n", nObjects); fprintf(exportFile, "Root\t%lu\n", getIndex(rootFunction)); // Generate each of the areas apart from the IO area. for (i = 0; i < memTableEntries; i++) { if (i != ioMemEntry) // Don't relocate the IO area { char *start = (char*)memTable[i].mtAddr; char *end = start + memTable[i].mtLength; for (PolyWord *p = (PolyWord*)start; p < (PolyWord*)end; ) { p++; PolyObject *obj = (PolyObject*)p; POLYUNSIGNED length = obj->Length(); printObject(obj); p += length; } } } fclose(exportFile); exportFile = NULL; } /* Import a portable export file and load it into memory. Creates "permanent" address entries in the global memory table. */ class SpaceAlloc { public: SpaceAlloc(bool isMut, POLYUNSIGNED def); ~SpaceAlloc(); PolyObject *NewObj(POLYUNSIGNED objWords); bool AddToTable(void); POLYUNSIGNED defaultSize; POLYUNSIGNED currentSize; PolyWord *base; POLYUNSIGNED used; bool isMutable; unsigned spaceIndex; }; SpaceAlloc::SpaceAlloc(bool isMut, POLYUNSIGNED def) { isMutable = isMut; defaultSize = def; base = 0; currentSize = 0; used = 0; spaceIndex = 1; } SpaceAlloc::~SpaceAlloc() { if (base) osMemoryManager->Free(base, currentSize*sizeof(PolyWord)); } bool SpaceAlloc::AddToTable(void) { if (base != 0) { // Add the new space to the permanent memory table. MemSpace* space = gMem.NewPermanentSpace(base, used, isMutable, false, spaceIndex++); if (space == 0) { fprintf(stderr, "Insufficient memory\n"); return false; } } base = 0; return true; } // Allocate a new object. May create a new space and add the old one to the permanent // memory table if this is exhausted. PolyObject *SpaceAlloc::NewObj(POLYUNSIGNED objWords) { if (currentSize - used <= objWords) { // Need some more space. if (! AddToTable()) return 0; POLYUNSIGNED size = defaultSize; if (size <= objWords) size = objWords+1; size_t iSpace = size*sizeof(PolyWord); base = (PolyWord*)osMemoryManager->Allocate(iSpace, PERMISSION_READ|PERMISSION_WRITE|PERMISSION_EXEC); currentSize = iSpace/sizeof(PolyWord); used = 0; } ASSERT(currentSize - used > objWords); PolyObject *newObj = (PolyObject*)(base+used+1); used += objWords+1; return newObj; } class PImport { public: PImport(); ~PImport(); bool DoImport(void); FILE *f; PolyObject *Root(void) { return objMap[nRoot]; } private: PolyObject *NewObject(POLYUNSIGNED words, bool isMutable); bool ReadValue(PolyObject *p, POLYUNSIGNED i); bool GetValue(PolyWord *result); POLYUNSIGNED nObjects, nRoot; PolyObject **objMap; SpaceAlloc mutSpace, immutSpace; }; PImport::PImport(): mutSpace(true, 1024*1024), immutSpace(false, 1024*1024) { f = NULL; objMap = 0; } PImport::~PImport() { if (f) fclose(f); free(objMap); } PolyObject *PImport::NewObject(POLYUNSIGNED words, bool isMutableObj) { PolyObject *newObj = 0; if (isMutableObj) newObj = mutSpace.NewObj(words); else newObj = immutSpace.NewObj(words); if (newObj == 0) return 0; return newObj; } bool PImport::GetValue(PolyWord *result) { int ch = getc(f); if (ch == '@') { /* Address of an object. */ POLYUNSIGNED obj; fscanf(f, "%lu", &obj); ASSERT(obj < nObjects); *result = objMap[obj]; } else if (ch == '$') { /* Code address. */ POLYUNSIGNED obj, offset; fscanf(f, "%lu+%lu", &obj, &offset); ASSERT(obj < nObjects); PolyObject *q = objMap[obj]; ASSERT(q->IsCodeObject()); *result = PolyWord::FromCodePtr((PolyWord(q)).AsCodePtr() + offset); /* The offset is in bytes. */ } else if ((ch >= '0' && ch <= '9') || ch == '-') { /* Tagged integer. */ POLYSIGNED j; ungetc(ch, f); fscanf(f, "%ld", &j); /* The assertion may be false if we are porting to a machine with a shorter tagged representation. */ ASSERT(j >= -MAXTAGGED-1 && j <= MAXTAGGED); *result = TAGGED(j); } else if (ch == '%') { /* Offset within the object. Only in a stack. */ POLYUNSIGNED obj, offset; fscanf(f, "%lu+%lu", &obj, &offset); ASSERT(obj < nObjects); PolyObject *q = objMap[obj]; ASSERT(q->IsStackObject()); ASSERT(offset >= 0 && offset < q->Length()); *result = PolyWord::FromStackAddr(((PolyWord)q).AsStackAddr() + offset); } else if (ch == 'I') { /* IO entry number. */ POLYUNSIGNED j; fscanf(f, "%lu", &j); ASSERT(j >= 0 && j < POLY_SYS_vecsize); *result = (PolyObject*)&gMem.ioSpace.bottom[j * IO_SPACING]; } else if (ch == 'J') { /* IO entry number with offset. */ POLYUNSIGNED j, offset; fscanf(f, "%lu+%lu", &j, &offset); ASSERT(j >= 0 && j < POLY_SYS_vecsize); PolyWord base = (PolyObject*)&gMem.ioSpace.bottom[j * IO_SPACING]; *result = PolyWord::FromCodePtr(base.AsCodePtr() + offset); } else { fprintf(stderr, "Unexpected character in stream"); return false; } return true; } /* Read a value and store it at the specified word. */ bool PImport::ReadValue(PolyObject *p, POLYUNSIGNED i) { PolyWord result = TAGGED(0); if (GetValue(&result)) { p->Set(i, result); return true; } else return false; } bool PImport::DoImport() { int ch; POLYUNSIGNED objNo; ASSERT(gMem.npSpaces == 0); ASSERT(gMem.neSpaces == 0); ASSERT(gMem.ioSpace.bottom == 0); PolyWord *ioSpace = (PolyWord*)calloc(POLY_SYS_vecsize*IO_SPACING, sizeof(PolyWord)); if (ioSpace == 0) { fprintf(stderr, "Unable to allocate memory\n"); return false; } gMem.InitIOSpace(ioSpace, POLY_SYS_vecsize*IO_SPACING); ch = getc(f); /* Skip the "Mapping" line. */ if (ch == 'M') { while (getc(f) != '\n') ; ch = getc(f); } ASSERT(ch == 'O'); /* Number of objects. */ while (getc(f) != '\t') ; fscanf(f, "%lu", &nObjects); /* Create a mapping table. */ objMap = (PolyObject**)calloc(nObjects, sizeof(PolyObject*)); if (objMap == 0) { fprintf(stderr, "Unable to allocate memory\n"); return false; } do { ch = getc(f); } while (ch == '\n'); ASSERT(ch == 'R'); /* Root object number. */ while (getc(f) != '\t') ; fscanf(f, "%lu", &nRoot); /* Now the objects themselves. */ while (1) { bool isMutable = false; unsigned objBits = 0; POLYUNSIGNED nWords, nBytes; do { ch = getc(f); } while (ch == '\r' || ch == '\n'); if (ch == EOF) break; ungetc(ch, f); fscanf(f, "%lu", &objNo); ch = getc(f); ASSERT(ch == ':'); ASSERT(objNo < nObjects); /* Modifiers, MNVW. */ do { ch = getc(f); if (ch == 'M') { isMutable = true; objBits |= F_MUTABLE_BIT; } else if (ch == 'N') objBits |= F_NEGATIVE_BIT; if (ch == 'V') objBits |= F_NO_OVERWRITE; if (ch == 'W') objBits |= F_WEAK_BIT; } while (ch == 'M' || ch == 'N' || ch == 'L' || ch == 'V' || ch == 'W'); /* Object type. */ switch (ch) { case 'Q': /* Stack segment. */ objBits |= F_STACK_OBJ; case 'O': /* Simple object. */ fscanf(f, "%lu", &nWords); break; case 'B': /* Byte segment. */ objBits |= F_BYTE_OBJ; fscanf(f, "%lu", &nBytes); /* Round up to appropriate number of words. */ nWords = (nBytes + sizeof(PolyWord) -1) / sizeof(PolyWord); break; case 'S': /* String. */ objBits |= F_BYTE_OBJ; /* The length is the number of characters. */ fscanf(f, "%lu", &nBytes); /* Round up to appropriate number of words. Need to add one PolyWord for the length PolyWord. */ nWords = (nBytes + sizeof(PolyWord) -1) / sizeof(PolyWord) + 1; break; case 'C': /* Code segment. */ objBits |= F_CODE_OBJ; /* Read the number of bytes of code and the number of words for constants. */ fscanf(f, "%lu,%lu", &nWords, &nBytes); nWords += 4; /* Add words for extras. */ /* Add in the size of the code itself. */ nWords += (nBytes + sizeof(PolyWord) -1) / sizeof(PolyWord); break; default: fprintf(stderr, "Invalid object type\n"); return false; } PolyObject *p = NewObject(nWords, isMutable); if (p == 0) return false; objMap[objNo] = p; /* Put in length PolyWord and flag bits. */ p->SetLengthWord(nWords, objBits); /* Skip the object contents. */ while (getc(f) != '\n') ; } /* Second pass - fill in the contents. */ fseek(f, 0, SEEK_SET); /* Skip the information at the start. */ ch = getc(f); if (ch == 'M') { while (getc(f) != '\n') ; ch = getc(f); } ASSERT(ch == 'O'); /* Number of objects. */ while (getc(f) != '\n'); ch = getc(f); ASSERT(ch == 'R'); /* Root object number. */ while (getc(f) != '\n') ; while (1) { POLYUNSIGNED nWords, nBytes, i; if (feof(f)) break; fscanf(f, "%lu", &objNo); if (feof(f)) break; ch = getc(f); ASSERT(ch == ':'); ASSERT(objNo < nObjects); PolyObject * p = objMap[objNo]; /* Modifiers, M or N. */ do { ch = getc(f); } while (ch == 'M' || ch == 'N' || ch == 'L' || ch == 'V' || ch == 'W'); /* Object type. */ switch (ch) { case 'O': /* Simple object. */ fscanf(f, "%lu", &nWords); ch = getc(f); ASSERT(ch == '|'); ASSERT(nWords == p->Length()); for (i = 0; i < nWords; i++) { if (! ReadValue(p, i)) return false; ch = getc(f); ASSERT((ch == ',' && i < nWords-1) || (ch == '\n' && i == nWords-1)); } break; case 'B': /* Byte segment. */ { byte *u = (byte*)p; fscanf(f, "%lu", &nBytes); ch = getc(f); ASSERT(ch == '|'); for (i = 0; i < nBytes; i++) { int n; fscanf(f, "%02x", &n); u[i] = n; } ch = getc(f); ASSERT(ch == '\n'); break; } case 'S': /* String. */ { PolyStringObject * ps = (PolyStringObject *)p; /* The length is the number of characters. */ fscanf(f, "%lu", &nBytes); ch = getc(f); ASSERT(ch == '|'); ps->length = nBytes; for (i = 0; i < nBytes; i++) { int n; fscanf(f, "%02x", &n); ps->chars[i] = n; } ch = getc(f); ASSERT(ch == '\n'); break; } case 'C': /* Code segment. */ { byte *u = (byte*)p; POLYUNSIGNED length = p->Length(); /* Read the number of bytes of code and the number of words for constants. */ fscanf(f, "%lu,%lu", &nWords, &nBytes); /* Read the code. */ ch = getc(f); ASSERT(ch == '|'); for (i = 0; i < nBytes; i++) { int n; fscanf(f, "%02x", &n); u[i] = n; } machineDependent->FlushInstructionCache(u, nBytes); ch = getc(f); ASSERT(ch == '|'); /* Set the constant count. */ p->Set(length-1, PolyWord::FromUnsigned(nWords)); p->Set(length-1-nWords-1, PolyWord::FromUnsigned(0)); /* Profile count. */ p->Set(length-1-nWords-3, PolyWord::FromUnsigned(0)); /* Marker word. */ p->Set(length-1-nWords-2, PolyWord::FromUnsigned((length-1-nWords-2)*sizeof(PolyWord))); /* Check - the code should end at the marker word. */ ASSERT(nBytes == ((length-1-nWords-3)*sizeof(PolyWord))); /* Read in the constants. */ for (i = 0; i < nWords; i++) { if (! ReadValue(p, i+length-nWords-1)) return false; ch = getc(f); ASSERT((ch == ',' && i < nWords-1) || ((ch == '\n' || ch == '|') && i == nWords-1)); } // Read in any constants in the code. if (ch == '|') { ch = getc(f); while (ch != '\n') { ungetc(ch, f); unsigned long offset; int code; fscanf(f, "%lu,%d", &offset, &code); ch = getc(f); ASSERT(ch == ','); PolyWord constVal = TAGGED(0); if (! GetValue(&constVal)) return false; byte *toPatch = (byte*)p + offset; ScanAddress::SetConstantValue(toPatch, constVal, (ScanRelocationKind)code); do ch = getc(f); while (ch == ' '); } } break; } case 'Q': /* Stack segment. */ { StackObject *s = (StackObject*)p; POLYUNSIGNED n; POLYUNSIGNED length = p->Length(); fscanf(f, "%lu", &nWords); ch = getc(f); ASSERT(ch == '|'); /* Standard fields: size, pc, sp, hr. */ fscanf(f, "%lu", &s->p_space); ch = getc(f); ASSERT(ch == ','); if (! ReadValue(p, (PolyWord*)&s->p_pc - (PolyWord*)p)) return false; ch = getc(f); ASSERT(ch == ','); if (! ReadValue(p, (PolyWord*)&s->p_sp - (PolyWord*)p)) return false; ch = getc(f); ASSERT(ch == ','); if (! ReadValue(p, (PolyWord*)&s->p_hr - (PolyWord*)p)) return false; /* Checked registers. */ fscanf(f, "%lu", &n); s->p_nreg = n; ch = getc(f); ASSERT(ch == '|'); for (i = 0; i < n; i++) { if (! ReadValue(p, &s->p_reg[i] - (PolyWord*)p)) return false; ch = getc(f); ASSERT((ch == ',' && i < n-1) || (ch == ' ' && i == n-1)); } /* Unchecked registers. */ fscanf(f, "%lu", &n); s->p_reg[i] = PolyWord::FromUnsigned(n); ch = getc(f); ASSERT(ch == '|'); for (i = 0; i < n; i++) { POLYSIGNED n; fscanf(f, "%ld", &n); s->p_reg[s->p_nreg+i+1] = PolyWord::FromSigned(n); ch = getc(f); } /* Stack values. */ fscanf(f, "%lu", &n); ASSERT(n == length - (s->p_sp-(PolyWord*)p)); ch = getc(f); ASSERT(ch == '|'); for (i = 0; i < n; i++) { if(! ReadValue(p, length-n+i)) return false; ch = getc(f); ASSERT((ch == ',' && i < n-1) || (ch == '\n' && i == n-1)); } break; } default: fprintf(stderr, "Invalid object type\n"); return false; } } return mutSpace.AddToTable() && immutSpace.AddToTable(); } // Import a file in the portable format and return a pointer to the root object. PolyObject *ImportPortable(const char *fileName) { PImport pImport; pImport.f = fopen(fileName, "r"); if (pImport.f == 0) { fprintf(stderr, "Unable to open file: %s\n", fileName); return 0; } if (pImport.DoImport()) return pImport.Root(); else return 0; } polyml.5.2.1/libpolyml/pexport.h0000644000175000017500000000375010602661056015660 0ustar daviddavid/* Title: Export memory in a portable format Author: David C. J. Matthews. Copyright (c) 2006 David C. J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR H PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef PEXPORT_H_INCLUDED #define PEXPORT_H_INCLUDED #include "scanaddrs.h" // For base class #include "exporter.h" #include "globals.h" class PExport: public Exporter, public ScanAddress { public: PExport(); virtual ~PExport(); public: virtual void exportStore(void); private: // ScanAddress overrides virtual void ScanConstant(byte *addrOfConst, ScanRelocationKind code); // At the moment we should only get calls to ScanConstant. virtual PolyObject *ScanObjectAddress(PolyObject *base) { return base; } private: unsigned long getIndex(PolyObject *p); void printCodeAddr(byte *q); void printAddress(void *p); void printValue(PolyWord q); void printObject(PolyObject *p); // We don't use the relocation code so just provide a dummy function here. virtual PolyWord createRelocation(PolyWord p, void *relocAddr) { return p; } PolyObject **pMap; unsigned long nMapSize, nObjects, totalBytes; unsigned *indexOrder; }; // Import a file in the portable format and return a pointer to the root object. PolyObject *ImportPortable(const char *fileName); #endif polyml.5.2.1/libpolyml/poly_specific.cpp0000644000175000017500000002200210701421005017315 0ustar daviddavid/* Title: poly_specific.cpp - Poly/ML specific RTS calls. Copyright (c) 2006 David C. J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ /* This module is used for various run-time calls that are either in the PolyML structure or otherwise specific to Poly/ML. */ #ifdef WIN32 #include "winconfig.h" #else #include "config.h" #endif #ifdef HAVE_ASSERT_H #include #endif #include "globals.h" #include "poly_specific.h" #include "arb.h" #include "mpoly.h" #include "sys.h" #include "machine_dep.h" #include "polystring.h" #include "run_time.h" #include "version.h" #include "save_vec.h" #include "exporter.h" #include "version.h" #include "sharedata.h" #include "objsize.h" #include "memmgr.h" #include "processes.h" #include "savestate.h" #define SAVE(x) taskData->saveVec.push(x) static const char *poly_runtime_system_copyright = "Copyright (c) 2002-7 CUTS, David C.J. Matthews and contributors."; Handle poly_dispatch_c(TaskData *taskData, Handle args, Handle code) { int c = get_C_long(taskData, DEREFWORDHANDLE(code)); switch (c) { case 1: return exportNative(taskData, args); // Export case 2: raise_syscall(taskData, "C Export has been withdrawn", 0); return 0; case 3: return exportPortable(taskData, args); // Export as portable format case 10: // Return the RTS version string. { const char *version; switch (machineDependent->MachineArchitecture()) { case MA_Interpreted: version = "Portable-" TextVersion; break; case MA_I386: version = "I386-" TextVersion; break; case MA_PPC: version = "PPC-" TextVersion; break; case MA_Sparc: version = "Sparc-" TextVersion; break; case MA_X86_64: version = "X86_64-" TextVersion; break; default: version = "Unknown-" TextVersion; break; } return SAVE(C_string_to_Poly(taskData, version)); } case 11: // Return the RTS copyright string return SAVE(C_string_to_Poly(taskData, poly_runtime_system_copyright)); case 12: // Return the architecture { const char *arch; switch (machineDependent->MachineArchitecture()) { case MA_Interpreted: arch = "Interpreted"; break; case MA_I386: arch = "I386"; break; case MA_PPC: arch = "PPC"; break; case MA_Sparc: arch = "SPARC"; break; case MA_X86_64: arch = "X86_64"; break; default: arch = "Unknown"; break; } return SAVE(C_string_to_Poly(taskData, arch)); } case 13: // Share common immutable data. { ShareData(taskData, args); return SAVE(TAGGED(0)); } // ObjSize and ShowSize have their own IO vector entries but really they don't // need them. Include them here and add ObjProfile. case 14: return ObjSize(taskData, args); case 15: return ShowSize(taskData, args); case 16: return ObjProfile(taskData, args); /* 17 and 18 are no longer used. */ case 19: // Return the RTS argument help string. return SAVE(C_string_to_Poly(taskData, RTSArgHelp())); case 20: // Write a saved state file. return SaveState(taskData, args); case 21: // Load a saved state file and any ancestors. return LoadState(taskData, args); case 22: // Show the hierarchy. return ShowHierarchy(taskData); case 23: // Change the name of the immediate parent stored in a child return RenameParent(taskData, args); case 24: // Return the name of the immediate parent stored in a child return ShowParent(taskData, args); // These next ones were originally in process_env and have now been moved here, case 100: /* Return the maximum word segment size. */ return Make_arbitrary_precision(taskData, MAX_OBJECT_SIZE); case 101: /* Return the maximum string size (in bytes). It is the maximum number of bytes in a segment less one word for the length field. */ return Make_arbitrary_precision(taskData, (MAX_OBJECT_SIZE)*sizeof(PolyWord) - sizeof(PolyWord)); case 102: /* Test whether the supplied address is in the io area. This was previously done by having get_flags return 256 but this was changed so that get_flags simply returns the top byte of the length word. */ { PolyWord *pt = (PolyWord*)DEREFWORDHANDLE(args); if (gMem.IsIOPointer(pt)) return Make_arbitrary_precision(taskData, 1); else return Make_arbitrary_precision(taskData, 0); } case 103: /* Return the register mask for the given function. This is used by the code-generator to find out which registers are modified by the function and so need to be saved if they are used by the caller. */ { PolyObject *pt = DEREFWORDHANDLE(args); if (gMem.IsIOPointer(pt)) { /* IO area. We need to get this from the vector. */ int i; for (i=0; i < POLY_SYS_vecsize; i++) { if (pt == (PolyObject*)IoEntry(i)) { return Make_arbitrary_precision(taskData, machineDependent->GetIOFunctionRegisterMask(i)); } } raise_syscall(taskData, "Io pointer not found", 0); } else { /* We may have a pointer to the code or a pointer to a closure. If it's a closure we have to find the code. */ if (! pt->IsCodeObject() && ! pt->IsByteObject()) pt = pt->Get(0).AsObjPtr(); /* Should now be a code object. */ if (pt->IsCodeObject()) { /* Compiled code. This is the second constant in the constant area. */ PolyWord *codePt = pt->ConstPtrForCode(); PolyWord mask = codePt[1]; /* A real mask will be an integer. For backwards compatibility if we find something that isn't we treat it as all registers. */ if (IS_INT(mask)) { return SAVE(mask); } else return Make_arbitrary_precision(taskData, -1); } else raise_syscall(taskData, "Not a code pointer", 0); } } case 104: return Make_arbitrary_precision(taskData, POLY_version_number); case 105: /* Get the name of the function. */ { PolyObject *pt = DEREFWORDHANDLE(args); if (gMem.IsIOPointer(pt)) { /* IO area. */ int i; for (i=0; i < POLY_SYS_vecsize; i++) { if (pt == (PolyObject*)IoEntry(i)) { char buff[8]; sprintf(buff, "RTS%d", i); return SAVE(C_string_to_Poly(taskData, buff)); } } raise_syscall(taskData, "Io pointer not found", 0); } else if (pt->IsCodeObject()) /* Should now be a code object. */ { /* Compiled code. This is the first constant in the constant area. */ PolyWord *codePt = pt->ConstPtrForCode(); PolyWord name = codePt[0]; /* May be zero indicating an anonymous segment - return null string. */ if (name == PolyWord::FromUnsigned(0)) return SAVE(C_string_to_Poly(taskData, "")); else return SAVE(name); } else raise_syscall(taskData, "Not a code pointer", 0); } default: { char msg[100]; sprintf(msg, "Unknown poly-specific function: %d", c); raise_exception_string(taskData, EXC_Fail, msg); return 0; } } } polyml.5.2.1/libpolyml/poly_specific.h0000644000175000017500000000231510602661056017003 0ustar daviddavid/* Title: poly_specific.h - exports signature for poly_specific.cpp Copyright (c) 2006 David C. J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ /* This module is used for various run-time calls that are either in the PolyML structure or otherwise specific to Poly/ML. */ #ifndef POLY_SPECIFIC_H_INCLUDED #define POLY_SPECIFIC_H_INCLUDED class SaveVecEntry; typedef SaveVecEntry *Handle; class TaskData; extern Handle poly_dispatch_c(TaskData *mdTaskData, Handle args, Handle code); #endif polyml.5.2.1/libpolyml/polystring.cpp0000644000175000017500000002773410772160234016734 0ustar daviddavid/* Title: polystring.cpp - String functions and types Copyright (c) 2006 David C.J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifdef WIN32 #include "winconfig.h" #else #include "config.h" #endif #ifdef HAVE_STDIO_H #include #endif #ifdef HAVE_MALLOC_H #include #endif #ifdef HAVE_STDLIB_H #include #endif #ifdef HAVE_STRING_H #include #endif #include "globals.h" #include "polystring.h" #include "run_time.h" #include "mpoly.h" #include "sys.h" #include "arb.h" #include "save_vec.h" #include "processes.h" #define SAVE(x) mdTaskData->saveVec.push(x) #define SIZEOF(x) (sizeof(x)/sizeof(PolyWord)) // Return empty string. PolyWord EmptyString(void) { return (PolyObject*)IoEntry(POLY_SYS_emptystring); } PolyWord Buffer_to_Poly(TaskData *mdTaskData, const char *buffer, unsigned length) /* Returns a string as a Poly string. */ { /* Return the null string if it's empty. */ if (length == 0) return EmptyString(); /* Return the character itself if the length is 1 */ if (length == 1) return TAGGED(((unsigned char *)buffer)[0]); /* Get the number of words required, plus 1 for length word, plus flag bit. */ PolyStringObject *result = (PolyStringObject *)(alloc(mdTaskData, WORDS(length) + 1, F_BYTE_OBJ)); /* Set length of string, then copy the characters. */ result->length = length; memcpy(result->chars,buffer,length); /* We are relying on alloc zeroing any unused bytes in the allocated store. That's essential for structure equality to work properly since it compares ALL bytes in a byte segment. (c.f. test*/ return result; } /* Buffer_to_Poly */ PolyWord C_string_to_Poly(TaskData *mdTaskData, const char *buffer) /* Returns a C string as a Poly string. */ { if (buffer == NULL) return EmptyString(); return Buffer_to_Poly(mdTaskData, buffer, strlen(buffer)); } /* C_string_to_Poly */ POLYUNSIGNED Poly_string_to_C(PolyWord ps, char *buff, POLYUNSIGNED bufflen) /* Copies the characters from the string into the destination buffer. Returns original length of string. */ { if (IS_INT(ps)) { buff[0] = (char)(UNTAGGED(ps)); buff[1] = '\0'; return(1); } PolyStringObject *str = (PolyStringObject *)ps.AsObjPtr(); POLYUNSIGNED chars = str->length >= bufflen ? bufflen-1 : str->length; if (chars != 0) strncpy(buff, str->chars, chars); buff[chars] = '\0'; return chars; } /* Poly_string_to_C */ char *Poly_string_to_C_alloc(PolyWord ps) /* Similar to Poly_string_to_C except that the string is allocated using malloc and must be freed by the caller. */ { char *res; if (IS_INT(ps)) { res = (char*)malloc(2); res[0] = (char)(UNTAGGED(ps)); res[1] = '\0'; } else { PolyStringObject * str = (PolyStringObject *)ps.AsObjPtr(); POLYUNSIGNED chars = str->length; res = (char*)malloc(chars+1); if (chars != 0) strncpy(res, str->chars, chars); res[chars] = '\0'; } return res; } /* Poly_string_to_C_alloc */ #ifdef UNICODE /* We need Unicode versions of these. */ PolyWord C_string_to_Poly(const WCHAR *buffer) /* Returns a Unicode string as a Poly string. */ { if (buffer == NULL) return EmptyString(); unsigned long length = wcslen(buffer); /* Return the null string if it's empty. */ if (length == 0) return EmptyString(); /* Return the character itself if the length is 1 */ if (length == 1) return TAGGED(((unsigned char *)buffer)[0]); /* Get the number of words required, plus 1 for length word, plus flag bit. */ PolyStringObject *result = (PolyStringObject *)(alloc(WORDS(length) + 1, F_BYTE_OBJ)); /* Set length of string, then copy the characters. */ result->length = length; for (unsigned long i = 0; i < length; i++) result->chars[i] = (char)buffer[i]; return result; } /* C_string_to_Poly */ POLYUNSIGNED Poly_string_to_C(PolyWord ps, WCHAR *buff, POLYUNSIGNED bufflen) { if (IS_INT(ps)) { buff[0] = (WCHAR)(UNTAGGED(ps)); buff[1] = 0; return(1); } PolyStringObject *str = (PolyStringObject *)ps.AsObjPtr(); POLYUNSIGNED chars = str->length >= bufflen ? bufflen-1 : str->length; for (POLYUNSIGNED i = 0; i < chars; i++) buff[i] = str->chars[i]; buff[chars] = 0; return chars; } /* Poly_string_to_C */ WCHAR *Poly_string_to_U_alloc(PolyWord ps) { if (IS_INT(ps)) { WCHAR *res = (WCHAR*)malloc(2 * sizeof(WCHAR)); res[0] = (WCHAR)(UNTAGGED(ps)); res[1] = 0; return res; } else { PolyStringObject *str = (PolyStringObject *)ps.AsObjPtr(); POLYUNSIGNED chars = str->length; WCHAR * res = (WCHAR*)malloc((chars+1) * sizeof(WCHAR)); for (POLYUNSIGNED i = 0; i < chars; i++) res[i] = str->chars[i]; res[chars] = 0; return res; } } /* Poly_string_to_U_alloc */ #endif /* convert_string_list return a list of strings. */ Handle convert_string_list(TaskData *mdTaskData, int count, char **strings) { Handle saved = mdTaskData->saveVec.mark(); Handle list = SAVE(ListNull); /* It's simplest to process the strings in reverse order */ for (int i = count - 1; 0 <= i; i--) { /* The order of these declarations is important, becaue we don't want to have make to make the cons cell mutable. This is only safe if we promise to initialise it fully before the next ML heap allocation. SPF 29/11/96 */ Handle value = SAVE(C_string_to_Poly(mdTaskData, strings[i])); Handle next = alloc_and_save(mdTaskData, SIZEOF(ML_Cons_Cell)); DEREFLISTHANDLE(next)->h = DEREFWORDHANDLE(value); DEREFLISTHANDLE(next)->t = DEREFLISTHANDLE(list); /* reset save vector to stop it overflowing */ mdTaskData->saveVec.reset(saved); list = SAVE(DEREFHANDLE(next)); } return list; } /* Convert a string list to a vector of C strings. */ char **stringListToVector(Handle list) { int len = 0; /* Find the length of the list */ for (PolyWord p = DEREFHANDLE(list); p != ListNull; p = ((ML_Cons_Cell*)p.AsObjPtr())->t) len++; /* Allocate vector. */ char **vec = (char**)calloc(len+1, sizeof(char*)); /* Copy the strings and put them into the vector. */ len = 0; PolyWord q = DEREFHANDLE(list); while (q != ListNull) { ML_Cons_Cell *cell = (ML_Cons_Cell*)q.AsObjPtr(); vec[len++] = Poly_string_to_C_alloc(cell->h); q = cell->t; } return vec; } /* Free the memory used by the vector. */ void freeStringVector(char **vec) { char **p; if (vec == 0) return; for (p = vec; *p != 0; p++) free(*p); free(vec); } // Concatenate two strings. Now used only internally in the RTS. Handle strconcatc(TaskData *mdTaskData, Handle y, Handle x) /* Note: arguments are in the reverse order from Poly */ { Handle result; POLYUNSIGNED len, xlen, ylen; char *from_ptr, *to_ptr; if (IS_INT(DEREFWORD(x))) xlen = 1; else xlen = DEREFSTRINGHANDLE(x)->length; /* Don't concatenate with null strings */ if (xlen == 0) return y; if (IS_INT(DEREFWORD(y))) ylen = 1; else ylen = DEREFSTRINGHANDLE(y)->length; if (ylen == 0) return x; len = xlen + ylen; /* Get store for combined string. Include rounding up to next word and room for the length word and add in the flag. */ result = alloc_and_save(mdTaskData, (len + sizeof(PolyWord)-1)/sizeof(PolyWord) + 1, F_BYTE_OBJ); DEREFSTRINGHANDLE(result)->length = len; /* Copy first string */ to_ptr = DEREFSTRINGHANDLE(result)->chars; if (xlen == 1) { *to_ptr++ = (char)UNTAGGED(DEREFSTRINGHANDLE(x)); } else { from_ptr = DEREFSTRINGHANDLE(x)->chars; while (xlen-- > 0) (*to_ptr++ = *from_ptr++); } /* Add on second */ if (ylen == 1) { *to_ptr = (char)UNTAGGED(DEREFSTRINGHANDLE(y)); } else { from_ptr = DEREFSTRINGHANDLE(y)->chars; while (ylen-- > 0) (*to_ptr++ = *from_ptr++); } return(result); } /* strconcat */ void print_string(PolyWord s) { if (IS_INT(s)) putc((char)UNTAGGED(s), stdout); else { PolyStringObject * str = (PolyStringObject *)s.AsObjPtr(); fwrite(str->chars, 1, str->length, stdout); } } Handle string_length_c(TaskData *mdTaskData, Handle string) /* Length of a string */ { PolyWord str = string->Word(); if (str.IsTagged()) // Short form return Make_arbitrary_precision(mdTaskData, 1); POLYUNSIGNED length = ((PolyStringObject *)str.AsObjPtr())->length; return Make_arbitrary_precision(mdTaskData, length); } static PolyStringObject s_test_x, s_test_y; // These functions are used in the interpreter. They are generally replaced by // hand-coded versions in the assembly code section. static int string_test(PolyWord x, PolyWord y) /* Returns -1, 0, +1 if the first string is less, equal to or greater than the second. These are addresses of the strings because calling fix_persistent_address could result in a garbage-collection which could move the other string. */ { POLYUNSIGNED i; PolyStringObject *xs, *ys; /* Deal with single characters. */ if (IS_INT(x)) { s_test_x.length = 1; s_test_x.chars[0] = (char)UNTAGGED(x); xs = &s_test_x; } else xs = (PolyStringObject*)x.AsObjPtr(); if (IS_INT(y)) { s_test_y.length = 1; s_test_y.chars[0] = (char)UNTAGGED(y); ys = &s_test_y; } else ys = (PolyStringObject*)y.AsObjPtr(); /* Now do the comparison. */ for(i = 0; i < xs->length && i < ys->length; i++) { if (xs->chars[i] != ys->chars[i]) return xs->chars[i] < ys->chars[i] ? -1 : 1; } /* They must be equal or one must be a leading substring of the other. */ if (i < xs->length) return 1; /* y must be the substring. */ else if (i < ys->length) return -1; /* x must be the substring */ else return 0; /* They must be equal. */ } Handle compareStrings(TaskData *mdTaskData, Handle y, Handle x) { return mdTaskData->saveVec.push(TAGGED(string_test(DEREFWORD(x), DEREFWORD(y)))); } Handle testStringEqual(TaskData *mdTaskData, Handle y, Handle x) { return mdTaskData->saveVec.push(string_test(DEREFWORD(x), DEREFWORD(y)) == 0 ? TAGGED(1) : TAGGED(0)); } Handle testStringNotEqual(TaskData *mdTaskData, Handle y, Handle x) { return mdTaskData->saveVec.push(string_test(DEREFWORD(x), DEREFWORD(y)) != 0 ? TAGGED(1) : TAGGED(0)); } Handle testStringGreater(TaskData *mdTaskData, Handle y, Handle x) { return mdTaskData->saveVec.push(string_test(DEREFWORD(x), DEREFWORD(y)) > 0 ? TAGGED(1) : TAGGED(0)); } Handle testStringLess(TaskData *mdTaskData, Handle y, Handle x) { return mdTaskData->saveVec.push(string_test(DEREFWORD(x), DEREFWORD(y)) < 0 ? TAGGED(1) : TAGGED(0)); } Handle testStringGreaterOrEqual(TaskData *mdTaskData, Handle y, Handle x) { return mdTaskData->saveVec.push(string_test(DEREFWORD(x), DEREFWORD(y)) >= 0 ? TAGGED(1) : TAGGED(0)); } Handle testStringLessOrEqual(TaskData *mdTaskData, Handle y, Handle x) { return mdTaskData->saveVec.push(string_test(DEREFWORD(x), DEREFWORD(y)) <= 0 ? TAGGED(1) : TAGGED(0)); } polyml.5.2.1/libpolyml/polystring.h0000644000175000017500000000621610663535235016377 0ustar daviddavid/* Title: polystring.h - String functions and types Copyright (c) 2006 David C.J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef POLYSTRING_H #define POLYSTRING_H #include "globals.h" // For PolyObject class SaveVecEntry; typedef SaveVecEntry *Handle; class TaskData; // A string object. N.B. Poly strings can be either a single tagged integer or // a pointer to this. class PolyStringObject: public PolyObject { public: POLYUNSIGNED length; char chars[1]; }; //typedef PolyStringObject STRING, *pstring; extern PolyWord EmptyString(void); /* PolyStringObject functions */ extern PolyWord Buffer_to_Poly(TaskData *mdTaskData, const char *buffer, unsigned length); extern PolyWord C_string_to_Poly(TaskData *mdTaskData, const char *buffer); extern POLYUNSIGNED Poly_string_to_C(PolyWord ps, char *buff, POLYUNSIGNED bufflen); extern char *Poly_string_to_C_alloc(PolyWord ps); #ifdef UNICODE #ifdef HAVE_TCHAR_H #include #else #define WCHAR short #endif extern PolyWord C_string_to_Poly(const WCHAR *buffer); extern POLYUNSIGNED Poly_string_to_C(PolyWord ps, WCHAR *buff, POLYUNSIGNED bufflen); extern WCHAR *Poly_string_to_U_alloc(PolyWord ps); // Poly_string_to_T_alloc returns a Unicode string in Unicode and char string otherwise. #define Poly_string_to_T_alloc Poly_string_to_U_alloc #else #define Poly_string_to_T_alloc Poly_string_to_C_alloc #endif Handle convert_string_list(TaskData *mdTaskData, int count, char **strings); extern char **stringListToVector(Handle list); extern void freeStringVector(char **vec); extern void print_string(PolyWord s); // These should no longer be used in the RTS except internally. // They are currently used by the ML code during bootstrapping. extern Handle strconcatc(TaskData *mdTaskData, Handle x, Handle y); Handle string_length_c(TaskData *mdTaskData, Handle string); #define DEREFSTRINGHANDLE(_x) ((PolyStringObject *)(_x)->WordP()) extern Handle compareStrings(TaskData *mdTaskData, Handle y, Handle x); extern Handle testStringEqual(TaskData *mdTaskData, Handle y, Handle x); extern Handle testStringNotEqual(TaskData *mdTaskData, Handle y, Handle x); extern Handle testStringGreater(TaskData *mdTaskData, Handle y, Handle x); extern Handle testStringLess(TaskData *mdTaskData, Handle y, Handle x); extern Handle testStringGreaterOrEqual(TaskData *mdTaskData, Handle y, Handle x); extern Handle testStringLessOrEqual(TaskData *mdTaskData, Handle y, Handle x); #endif /* POLYSTRING_H */ polyml.5.2.1/libpolyml/power_assembly.S0000644000175000017500000016715610602700513017170 0ustar daviddavid/* Title: Assembly code for Power architecture. Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ /* Linkage conventions: r0 scratch register (unsaved?) r1 - don't touch - dedicated C register (stack - like SPARC %o6) r2 - don't touch - dedicated C register (TOC) r3 used for the first argument to a function, and for the result. r4-r6 used for the next 3 args, any others being passed on the stack. (We may later decide to use r7-r10 for parameters too). r24 is the closure pointer or static link pointer (like SPARC %o5) rr (rr) is used as the compiler-visible link register (like SPARC %o7) r26 RTS scratch register r27 (rsp) is the ML stack pointer, r28 is no longer used (previously the stack limit register) r29 (rhp) is the heap pointer, r30 (rhl) is the heap limit, r31 (rhr) points to the top exception handler. r7-r10 and r14-r22 (14 registers) are available as general work registers, as are r3-r6 and r24-rr, when they are not fulfilling their specialised duties. That's a total of 20 general-purpose registers (as opposed to 17 on the SPARC). r11, r12 are used as code-generator visible untagged registers. r26 is used as a compiler-invisible RTS scratch register for handling traps. Note: the RS/6000 follows a callee-saves convention for r13-r31 inclusive, so we'll have to be careful to save these registers in the when we first enter ML. We can remove this later if it appears to be unnecessary. An RTS function is entered with the return address in LR. Since this isn't a saved register, it must be copied (or'ed with 2) into rr if the function executes a trap (which may or may not copy rr back into LR) or explicitly calls C. Choosing 2 us to simplify the return code, since we don't have to subtract RETURNOFFSET before moving the result to LR (since the least 2 significant bits of the return address are ignored). Returning from a function then looks like: mtlr rr blr on the assumption that the return-address is still in rr. However, we needn't (shouldn't) be quite a naive as this, since we can get better super-scalar performance by interleaving these instructions with the last few "real" instructions of the function. All non-scratch registers MUST contain properly tagged values if there any a possibility of a garbage collection. */ /* AIX code now removed DCJM June 2006. */ /***************************************************************************/ /* Useful macro definitions */ /***************************************************************************/ /* Include sys.h to pick up the POLY_SYS entries we need here. */ #include "sys.h" #ifdef MACOSX #define gbl(id) _##id #else #define gbl(id) id #endif #define gbla(id) id##a #define gblc(id) gbl(id##c) #define RETURNOFFSET (2) #define shiftup(word,places) ((word)<<(places)) #define shiftdown(word,places) ((word)>>(places)) #define TAGSHIFT 1 #define TAGBITS (0x1) #define TAGGED(n) (shiftup(n,TAGSHIFT)+1) #define TRUE TAGGED(1) #define FALSE TAGGED(0) #define UNIT TAGGED(0) /* generate standard prelude */ #define globldec(id) .globl gbl(id) ; gbl(id) : /* Standard start-up for inline calls (those that don't call C) */ #define INLINE_ROUTINE(id) \ globldec(id) /* Used to convert byte-counts to word-counts. It's just a coincidence that this is the same as TAGSHIFT on this machine. SPF 18/12/95 */ #define WORDSHIFT 2 /* The most significant TYPESHIFT of a length-word are type bits. The remaining 32-TYPESHIFT bits constitute an unsigned integer which is the number of words (not counting the length-word itself) contained in the object. SPF 18/12/95 */ #define TYPESHIFT 8 /* Bits in the flags byte in the length word of an object. */ #define B_bytes 1 #define B_code 2 #define B_mutable 64 /***************************************************************************/ /* General Assembler Initialisation */ /***************************************************************************/ #ifdef MACOSX /* untagged registers */ #define rtemp1 r11 /* used by compiler */ #define rtemp2 r12 /* used by compiler */ #define rtemp3 r26 /* scratch */ /* special purpose */ #define rr r25 /* regReturn */ /* dedicated ML registers */ #define rsp r27 #define rhp r29 #define rhl r30 #define rhr r31 #else /* untagged registers */ .set r0,0 /* used by compiler, but scratch in a trap handler */ .set r1,1 .set rtemp1,11 /* used by compiler */ .set rtemp2,12 /* used by compiler */ .set rtemp3,26 /* scratch */ /* parameter registers */ .set r3,3 /* arg 1 and result */ .set r4,4 /* arg 2 */ .set r5,5 /* arg 3 */ .set r6,6 /* arg 4 */ /* general registers */ .set r7,7 .set r8,8 .set r9,9 .set r10,10 .set r13,13 .set r14,14 .set r15,15 .set r16,16 .set r17,17 .set r18,18 .set r19,19 .set r20,20 .set r21,21 .set r22,22 /* special purpose */ .set r23,23 /* regCode */ .set r24,24 /* regClosure */ .set rr,25 /* regReturn */ /* dedicated ML registers */ .set rsp,27 .set rhp,29 .set r28,28 .set rhl,30 .set rhr,31 #endif ;# Register mask entries - must match coding used in codeCons.ML #define M_R3 0x000001 #define M_R4 0x000002 #define M_R5 0x000004 #define M_R6 0x000008 #define M_R7 0x000010 #define M_R8 0x000020 #define M_R9 0x000040 #define M_R10 0x000080 #define M_R14 0x000100 #define M_R15 0x000200 #define M_R16 0x000400 #define M_R17 0x000800 #define M_R18 0x001000 #define M_R19 0x002000 #define M_R20 0x004000 #define M_R21 0x008000 #define M_R22 0x010000 #define M_R23 0x020000 #define M_R24 0x040000 #define M_R25 0x080000 #define M_RR M_R25 #define RegMask(name,mask) .set Mask_##name,mask /* Default mask for unused entries and also for the special cases where we don't know what the effect of calling the function will be. */ RegMask(all,0x0fffff) /***************************************************************************/ /* Standard function prelude stuff */ /***************************************************************************/ .set argarea, 32 .set linkarea, 24 .set locstkarea, 0 .set nfprs, 0 /* FP registers saved - none. */ .set ngprs, (32-13) /* GP Registers save - r13 to r32 */ .set szdsa, 8*nfprs+4*ngprs+linkarea+argarea+locstkarea /***************************************************************************/ /* Branch-prediction mnemonics */ /***************************************************************************/ /* The AIX 3.2 assembler doesn't support branch-prediction mnemonics. Worse than that, it silently generates bad branches, because it parses: beq- neg_long1 as: beq - neg_long1 With the result that the code just wanders off in random directions. This took me a (very frustrating) day to find. SPF 31/8/95 */ #define beqM beq- #define bsoM bso- #define bgtP bgt+ #define bltP blt+ #define beqP beq+ #define bneP bne+ #define bltlrP bltlr+ /***************************************************************************/ /* Code fragments used by CALL_IOn macros */ /***************************************************************************/ /*************************************************************************** This code is used to return from the RTS to ML under 2 different circumstances: (1) Following execution of a "trap" instruction (heap or stack overflow, or arbitrary-precision emulation required). (2) Following a call to the RTS from ML. Note that SIGALRM and SIGVTALRM interrupts don't use this mechanism - the normal return-from-interrupt mechanism is used to restore the execution context as it was before the interrupt (apart from a possible change to the stack limit register). Since the RTS may process-switch rather than immediately execute an input operation (amongst others), it is necessary to save the state in such a way that the operation can be restarted. Since it is also necessary that the saved state has *no* pointers into the RTS (since another process might commit the state), we save the state immediately before the RTS call. This ensures that when the process is restarted, it will re-execute the RTS call and all will be well. (OLD COMMENT: We also take the opportunity, when performing an RTS call, to zap all the registers not actually used in the call. This enables us to reduce the amount of random garbage that the machine holds onto in rarely used registers.) This has been removed now that we attempt to avoid pushing registers that are not modified in a call. I don't know whether it was important anyway. DCJM 29/11/00 A trap saves more state than an RTS call, since we want to be able to treat it as a normal instruction. We can't zap any registers (except that r0 is regarded as being volatile across traps) and we should alter only registers "documented" as being changed by the trap. The actual saving of the trap state is currently performed in C (it makes the C a little easier to follow), rather than using MD_trap_handler here. (This is part of my drive to reduce the amount of assembly code in the system.) The state is restored using MD_switch_to_poly_X, just as for RTS calls that need to call C. Exception: MD_trap_handler passes LR as a parameter to MD_trap_handler1, since this register is needed to when the native code calls interpreted code (it contains the return address). The RTS indicates that it wants to retry the RTS call by calling MD_set_for_retry in the C. All this does is to set "poly_stack->p_pc" to TAGGED(0). This is treated as a special value by "MD_switch_to_poly_X", which then re-executes the call, rather than simply returning. Note: I've managed to simplify the code compared with the SPARC version. In particular, I've inlined "return_from_io" and removed "RTD0" completely. Since the latter was an RTS address getting saved in "poly_stack->p_pc", I'm not at all sure that the SPARC version was actually commit-safe. I must investigate this sometime. SPF 7/8/95. ***************************************************************************/ /***************************************************************************/ /* set_registers_for_retry */ /***************************************************************************/ /* Sets up the sp, pc and hr values, saves the parameter registers and zaps the tagged registers (except for r24 and rr, which are used for retrying the function call). */ /* Offset 0 p_space 4 p_pc 8 p_sp 12 p_hr 16 p_nregs (22) 20 r3-r10 (8 registers) 52 r14-rr (12 registers) 100 link register 104 number of untagged registers (3) 108 rtemp1 112 rtemp2 116 CR */ /* Offsets in MemRegisters 0 inRTS 4 requestCode 8 returnReason 12 heapPointer 16 heapBase 20 polyStack 24 stackLimit 56 stackTop 60 threadId */ /***************************************************************************/ /* PPCAsmSwitchToPoly */ /***************************************************************************/ /* Entry point for C */ globldec(PPCAsmSwitchToPoly) /* Standard prelude for a C function to support calls from ML to C */ mflr r0 mfcr rtemp2 stmw r13,-8*nfprs-4*ngprs(r1) /* DCJM. Formerly stm. */ #ifdef MACOSX stw r0,8(r1) /* Return address */ stw rtemp2,4(r1) /* Condition codes. */ #else /* Linux saves the return address in the second word. */ stw r0,4(r1) #endif stwu r1,-szdsa(r1) mr r13,r3 /* Move the MemRegisters value into r13 */ lwz rtemp3,20(r13) /* rt3 = poly_stack */ lwz r28,24(r13) /* Load the old stack limit reg for backwards compat. */ /* Load rsp and rhr now in case of profile trap */ lwz rsp,8(rtemp3) lwz rhr,12(rtemp3) /* Now rsp, rhr and rsl have been loaded we can clear inRTS */ li r0,0 stw r0,0(r13) /* clear "in_run_time_system" */ lwz rhp,12(r13) /* Load rhp from heapPointer */ lwz rhl,16(r13) /* Set rhl to the number of free bytes */ /* Save the ML stack pointer and handler registers */ stw rsp,8(rtemp3) stw rhr,12(rtemp3) /* reload the parameter registers */ lwz r3,20(rtemp3) lwz r4,24(rtemp3) lwz r5,28(rtemp3) lwz r6,32(rtemp3) lwz r7,36(rtemp3) lwz r8,40(rtemp3) lwz r9,44(rtemp3) lwz r10,48(rtemp3) /* reload the general registers */ lwz r14,52(rtemp3) lwz r15,56(rtemp3) lwz r16,60(rtemp3) lwz r17,64(rtemp3) lwz r18,68(rtemp3) lwz r19,72(rtemp3) lwz r20,76(rtemp3) lwz r21,80(rtemp3) lwz r22,84(rtemp3) lwz r23,88(rtemp3) lwz r24,92(rtemp3) lwz rr,96(rtemp3) /* reload the scratch registers */ lwz rtemp1,108(rtemp3) lwz rtemp2,112(rtemp3) lwz r0,100(rtemp3) /* Link register. */ mtlr r0 li r0,0 /* Clear overflow bit. */ mtxer r0 /* mcrxr is being phased out. */ lwz r0,116(rtemp3) /* condition codes */ lwz rtemp3,4(rtemp3) /* pc */ mtctr rtemp3 /* set up return address */ mtcr r0 /* restore condition codes */ bctr /* complete return */ globldec(PPCSaveStateAndReturn) PPCSaveStateAndReturn1: /* Code to save the state and switch to C. This is used both for IO Calls and also for traps so it needs to save everything. DOESN'T put anything into poly_stack->p_pc. This may be set by the trap handler if we have come by way of a trap or by the CALL_IO functions. */ lwz rtemp3,20(r13) /* rt3 = poly_stack */ stw rsp,8(rtemp3) /* poly_stack->p_sp */ stw rhr,12(rtemp3) /* poly_stack->p_hr */ /* save the parameter registers */ stw r3,20(rtemp3) /* save r3 */ stw r4,24(rtemp3) /* save r4 */ stw r5,28(rtemp3) /* save r5 */ stw r6,32(rtemp3) /* save r6 */ /* and the general registers */ stw r7,36(rtemp3) /* save r7 */ stw r8,40(rtemp3) /* save r8 */ stw r9,44(rtemp3) /* save r9 */ stw r10,48(rtemp3) /* savep r10 */ stw r14,52(rtemp3) /* save r14 */ stw r15,56(rtemp3) /* save r15 */ stw r16,60(rtemp3) /* save r16 */ stw r17,64(rtemp3) /* save r17 */ stw r18,68(rtemp3) /* save r18 */ stw r19,72(rtemp3) /* save r19 */ stw r20,76(rtemp3) /* save r20 */ stw r21,80(rtemp3) /* save r21 */ stw r22,84(rtemp3) /* save r22 */ stw r23,88(rtemp3) /* save r23 */ /* include the untagged registers */ stw rtemp1,108(rtemp3) stw rtemp2,112(rtemp3) /* and the closure pointer (used for linkage) */ stw r24,92(rtemp3) /* save r24 (closure pointer) */ stw rr,96(rtemp3) /* save rr (genuine return address) */ mflr rtemp2 stw rtemp2,100(rtemp3) /* save link reg. If we've come by way of CALL_IO this will have to be moved into the p_pc field and this value must be overwritten. */ li rtemp1,1 stw rtemp1,0(r13) /* Initialise in_run_time_system */ stw rhp,12(r13) /* heapPointer = rhp */ /* Reload the registers and return to C. */ lwz r1,0(r1) #ifdef MACOSX lwz r0,8(r1) lwz rtemp1,4(r1) mtcr rtemp1 #else lwz r0,4(r1) #endif mtlr r0 lmw r13,-8*nfprs-4*ngprs(r1) blr /***************************************************************************/ /* Standard C call macros */ /***************************************************************************/ /* Define standard call macros. They are of the form CALL_IOn(name, res), where n is the number of arguments. The result mode is either IND if the result is by reference and NOIND if it is not. The reason arguments or results may be passed by reference is that the garbage-collector may more objects on the heap but will only update values on the Poly stack. REF arguments are copied to the save_vec and the address of the entry on it is returned. */ /***************************************************************************/ /* CALL_IO */ /***************************************************************************/ #define CALL_IO(name, ioCall) \ globldec(gbla(name)) \ li rtemp2,ioCall; \ stw rtemp2,4(r13); \ b PPCSaveStateAndReturn1; \ RegMask(name,Mask_all) #define CALL_IO_LOCAL(name, ioCall) \ /*EXTERN(gblc(name));*/ \ li rtemp2,ioCall; \ stw rtemp2,4(r13); \ b PPCSaveStateAndReturn1; \ RegMask(name,Mask_all) CALL_IO(kill_self, POLY_SYS_kill_self) /* alloc(size, flags, initial). Allocates a segment of a given size and initialises it. This is primarily used for arrays and for strings. Refs are allocated using inline code */ INLINE_ROUTINE(alloc_store) /* First check that the length is acceptable */ andi. r0,r3,1 beq alloc_in_rts /* Get the RTS to raise the exception. */ srawi. rtemp1,r3,TAGSHIFT /* Remove tag */ bne allst0 /* (test for 0) Make zero sized objects 1 */ li rtemp1,1 /* because they mess up the g.c. */ li r3,TAGGED(1) allst0: rlwinm. r0,rtemp1,0,0,TYPESHIFT /* Length field must fit in 24 bits */ addi rtemp2,rtemp1,1 /* Add 1 word for length word. */ bne alloc_in_rts slwi rtemp2,rtemp2,2 /* Get length in bytes */ sub rhp,rhp,rtemp2 /* Allocate the space */ cmplw rhp,rhl blt alloc_in_rts0 ori r4,r4,TAGGED(B_mutable) /* Set the mutable bit in the flags. */ rlwinm rtemp3,r4,32-TYPESHIFT-TAGSHIFT,0,7 /* Get flags byte (untagged). */ or rtemp3,rtemp1,rtemp3 /* Combine flags and length word. */ stw rtemp3,0(rhp) /* Store length word. */ addi r3,rhp,4 /* Point to first "real" word of seg. */ /* Initialise the store. */ cmplwi r4,TAGGED(B_mutable|B_bytes) /* Byte segment? */ mr rtemp2,r5 /* Initialiser word. */ bne allst1 /* If this is a byte seg. Set the initialiser word to 4 bytes of the untagged initialisation byte. */ srawi rtemp2,r5,TAGSHIFT slwi rtemp3,rtemp2,8 or rtemp2,rtemp2,rtemp3 slwi rtemp3,rtemp3,8 or rtemp2,rtemp2,rtemp3 slwi rtemp3,rtemp3,8 or rtemp2,rtemp2,rtemp3 allst1: mtctr rtemp1 subi rtemp1,r3,4 /* Start of object minus 4 bytes. */ allst2: stwu rtemp2,4(rtemp1) /* Set the word. */ bdnz allst2 blr alloc_in_rts0: /* We don't have enough space - call the RTS to do the allocation. This is preferable to treating it as though we'd run out of store in compiled code because that would leave us with a return address into this code. */ add rhp,rhp,rtemp2 /* Add back the space before we call */ alloc_in_rts: CALL_IO_LOCAL(alloc_store, POLY_SYS_alloc_store) RegMask(alloc_store,(M_R3|M_RR|M_R4|M_R23)) /***************************************************************************/ /* Functions implemented in assembly code */ /***************************************************************************/ INLINE_ROUTINE(not_bool) xori r3,r3,shiftup(1,TAGSHIFT) blr RegMask(not_bool,(M_R3|M_R23)) globldec(or_bool) INLINE_ROUTINE(or_word) or r3,r3,r4 blr RegMask(or_bool,(M_R3|M_R23)) RegMask(or_word,(M_R3|M_R23)) globldec(and_bool) INLINE_ROUTINE(and_word) and r3,r3,r4 blr RegMask(and_bool,(M_R3|M_R23)) RegMask(and_word,(M_R3|M_R23)) INLINE_ROUTINE(xor_word) xor rtemp1,r3,r4 /* tag bits will be equal */ ori r3,rtemp1,1 /* restore tag bit */ blr RegMask(xor_word,(M_R3|M_R23)) INLINE_ROUTINE(shift_left_word) /* Assume that both args are tagged integers */ srawi rtemp2,r4,TAGSHIFT /* untag amount to shift */ subi rtemp1,r3,1 /* untag shiftee (offset by TAGSHIFT) */ cmplwi rtemp2,32-TAGSHIFT /* shift too large? */ slw rtemp1,rtemp1,rtemp2 ori r3,rtemp1,1 /* restore tagbit */ bltlrP /* return if shift amount is OK */ li r3,TAGGED(0) blr RegMask(shift_left_word,(M_R3|M_R23)) INLINE_ROUTINE(shift_right_word) /* Assume that both args are tagged integers */ srawi rtemp2,r4,TAGSHIFT /* untag amount to shift */ srw rtemp1,r3,rtemp2 cmplwi rtemp2,(32-TAGSHIFT) /* shift too large? */ rlwinm rtemp1,rtemp1,0,0,(31-TAGSHIFT) /* remove stray bits from tag */ ori r3,rtemp1,1 /* restore tagbit */ bltlrP /* return if shift amount is OK */ li r3,TAGGED(0) blr RegMask(shift_right_word,(M_R3|M_R23)) INLINE_ROUTINE(shift_right_arith_word) /* Assume that both args are tagged integers */ /* Shift right by the appropriate number of bits, preserving the sign. If the shift is too large return either 0 or -1. */ srawi rtemp2,r4,TAGSHIFT /* untag amount to shift */ cmplwi rtemp2,(32-TAGSHIFT) /* shift too large? */ bltP sraw1 li rtemp2,31 /* We just want the sign bit. */ sraw1: sraw rtemp1,r3,rtemp2 rlwinm rtemp1,rtemp1,0,0,(31-TAGSHIFT) /* remove stray bits from tag */ ori r3,rtemp1,1 /* restore tagbit */ blr RegMask(shift_right_arith_word,(M_R3|M_R23)) /***************************************************************************/ /* Arithmetic tests on short integers. */ /***************************************************************************/ #define TEST(name, cond) \ INLINE_ROUTINE(name) \ cmpw r3,r4; /* These are UNsigned comparisons */ \ li r3,TRUE; \ b##cond##lr; /* Return TRUE if condition holds */ \ li r3,FALSE; \ blr; \ RegMask(name,(M_R3|M_R23)) TEST(int_eq,eq) /* Is this right? */ TEST(int_neq,ne) /* Is this right? */ /* These are the same as int_eq/neq. These were previously distinct because pointer equality required special code in the old persistent store system. That is no longer relevant. */ TEST(word_eq, eq) TEST(word_neq, ne) /***************************************************************************/ /* Miscellaneous functions */ /***************************************************************************/ /* This is needed in the code generator, but is a very risky thing to do. */ INLINE_ROUTINE(offset_address) srawi rtemp2,r4,TAGSHIFT /* untag offset */ add r3,r3,rtemp2 blr RegMask(offset_address,(M_R3|M_R23)) /* Clears the "mutable" bit on a segment */ /* Should this return unit, or its original parameter? */ INLINE_ROUTINE(locksega) lbz rtemp1,-4(r3) andi. rtemp2,rtemp1,(255-B_mutable) /* Reset MUTABLE bit */ stb rtemp2,-4(r3) blr RegMask(lockseg,(M_R3|M_R23)) INLINE_ROUTINE(get_length_a) lwz rtemp1,-4(r3) /* get length word */ /* get 24 bits of length, and shift up by TAGSHIFT */ rlwinm rtemp1,rtemp1,TAGSHIFT,(TYPESHIFT-TAGSHIFT),(31-TAGSHIFT) ori r3,rtemp1,1 /* return result as a tagged integer */ blr RegMask(get_length,(M_R3|M_R23)) /***************************************************************************/ /* test_string - basic string comparison utility function */ /***************************************************************************/ /* Compare two strings; returns with condition codes set appropriately. */ /* Corrupts r3, r4, r0, rtemp1, rtemp2, rtemp3. */ test_string: /* Is arg1 a single character? */ andi. r0,r3,1 beq test_string2 /* arg1 is a single character - is arg2? */ andi. r0,r4,1 beq test_string1 /* Both are single characters - just compare them */ cmpw r3,r4 blr test_string1: /* arg1 is a single character, but arg2 isn't. */ /* Is arg2 a null string? - return "GT" if 1 > length(arg2). */ lwz rtemp2,0(r4) li rtemp1,1 cmpw rtemp1,rtemp2 bgtlr /* Compare arg1 with the first byte of arg2. If the bytes differ, that's the result we want. */ lbz rtemp2,4(r4) srwi rtemp1,r3,TAGSHIFT cmpw rtemp1,rtemp2 bnelr /* If the bytes are equal, arg1 < arg2, so set CR accordingly. */ li rtemp1,-1 cmpwi rtemp1,0 blr test_string2: /* arg1 is not a single character - is arg2? */ andi. r0,r4,1 beq test_string3 /* arg1 is not a single character, but arg2 is. Is arg1 a null string? - return "LT" if length(arg1) < 1. */ lwz rtemp1,0(r3) cmpwi rtemp1,1 bltlr /* Compare first byte of arg1 with arg2. If the bytes differ, that's the result we want. */ lbz rtemp1,4(r3) srwi rtemp2,r4,TAGSHIFT cmpw rtemp1,rtemp2 bnelr /* If the bytes are equal, arg1 > arg2, so set CR accordingly. */ li rtemp1,1 cmpwi rtemp1,0 blr /* A is greater than B if, at the first position at which A and B differ, A[i] > B[i] or if the end of B is found before they differ. Set rtemp1 to the shorter length and rtemp3 to length(A) - length(B) */ test_string3: /* Neither string is a single character */ lwz rtemp1,0(r3) lwz rtemp2,0(r4) subfc. rtemp3,rtemp2,rtemp1 /* rt3 = length(A) - length(B) */ ble test_string4 /* done if length(A) <= length(B) */ subfc rtemp1,rtemp3,rtemp1 /* otherwise shorten rtemp1 */ test_string4: /* round-up byte count to word-count */ addi rtemp1,rtemp1,3 srwi rtemp1,rtemp1,2 /* have to treat length 0 as special case (it's a "repeat" loop) */ cmpwi rtemp1,0 beq test_string6 mtctr rtemp1 /* Since we have a big-endian machine, we can do the comparison a whole word at a time. This assumes that strings are zero-padded (is this true?). */ test_string5: lwzu rtemp1,4(r3) lwzu rtemp2,4(r4) cmplw rtemp1,rtemp2 /* UNSIGNED comparison needed */ /* DCJM: Formerly bdneq. */ bdnzt eq,test_string5 /* loop while counter > 0 and words are equal */ test_string6: /* Here we have 2 possibilities for the loop exit: (1) rtemp1 <> rtemp2 (2) rtemp1 = rtemp2, and we've examined all of the common prefix */ li r4,TAGGED(0) /* zap r4 */ li r3,TAGGED(0) /* zap r3 */ /* case (1) - rtemp1 <> rtemp2 Just return - the condition code is already set appropriately. */ bnelr /* case (2) - the common prefix is equal. in this case, the result depends on which string is the longer. The result of the comparison is, in fact, the same as the comparison between the lengths, which is the same as comparing (length(A) - length(B)) to 0. */ cmpwi rtemp3,0 blr /***************************************************************************/ /* String comparison functions */ /***************************************************************************/ #define STRINGTEST(name, cond) \ INLINE_ROUTINE(name) \ mflr rr; \ ori rr,rr,RETURNOFFSET; \ bl test_string; \ cror 31,31,31; /* needed? */\ mtlr rr; \ li r3,TRUE; \ b##cond##lr; \ li r3,FALSE; \ blr; \ RegMask(name,(M_R3|M_R4|M_R23|M_RR)) STRINGTEST(teststrgeq,ge) STRINGTEST(teststrleq,le) STRINGTEST(teststrlss,lt) STRINGTEST(teststrgtr,gt) STRINGTEST(teststrneq,ne) STRINGTEST(teststreq,eq) INLINE_ROUTINE(str_compare) mflr rr ori rr,rr,RETURNOFFSET bl test_string cror 31,31,31 /* needed? */ mtlr rr li r3,TAGGED(1) bgtlr li r3,TAGGED(0) beqlr li r3,TAGGED(-1) blr RegMask(str_compare, (M_R3|M_R4|M_R23|M_RR)) /***************************************************************************/ /* Exception handling */ /***************************************************************************/ /* Loop to find the handler for this exception. Handlers consist of one or more pairs of identifier and code address, followed by the address of the next handler. */ INLINE_ROUTINE(raisex) lwz rtemp3,56(r13) /* rt3 = end_of_stack */ lwz r0,0(r3) /* r0 = exception id */ mr rtemp1,rhr /* rt1 = handler ptr */ lwz rtemp2,0(rhr) /* rt2 = handler id */ rsx1: cmplwi rtemp2,TAGGED(0) /* Is it zero (or TAGGED(0))? */ ble rsx7 /* If so, we have a default handler */ /* non-default handler */ cmpw rtemp2,r0 /* Does it match the exception id? */ beq rsx7 /* This handler doesn't match - try the next one. This can be either a genuine handler pair, or a pointer up the stack. */ lwzu rtemp2,8(rtemp1) /* rt2 = next handler id */ cmplw rtemp2,rtemp1 blt rsx1 /* Not a stack pointer (too small) */ cmplw rtemp2,rtemp3 bge rsx1 /* Not a stack pointer (too big) */ /* It's a stack pointer - get the next batch of handlers */ mr rtemp1,rtemp2 /* rt1 = new handler ptr */ lwz rtemp2,0(rtemp2) /* rt2 = next handler id */ b rsx1 rsx7: /* We've found a handler that matches; rtemp1 points at the id */ lwz rr,4(rtemp1) /* Get the handler entry point */ rsx6: /* Remove the other handlers in this group. */ lwzu rtemp2,8(rtemp1) /* Get next handler id */ cmplw rtemp2,rtemp1 blt rsx6 /* Not a stack pointer (too small) */ cmplw rtemp2,rtemp3 bge rsx6 /* Not a stack pointer (too big) */ /* rtemp1 now points at the pointer to the next group of handlers i.e. the old (saved) value of the handler register and rtemp2 contains the pointer itself */ /* Is this handler a real one, or was it set by exception_trace? */ cmplwi rr,TAGGED(0) bgtP rsx9 /* We've found a handler set by exception_trace. Push the return address onto the stack, so that it will be printed by ex_tracec, load a dummy value into rr, then call ex_tracec (which doesn't return). */ mflr rr /* get return address */ mr r4,r3 /* exception packet is arg2 */ ori rr,rr,2 /* tag return address */ mr r3,rtemp1 /* stack-mark is arg1 */ stwu rr,-4(rsp) /* save return address */ li rr,TAGGED(1) /* a special marker */ CALL_IO_LOCAL(ex_trace, POLY_SYS_give_ex_trace) rsx9: /* Ordinary exception handler */ mtlr rr /* "Return" to handler */ mr rhr,rtemp2 /* Reload rhr from saved value */ addi rsp,rtemp1,4 /* Pop stack back past saved rhr */ blr /***************************************************************************/ /* Arbitrary-precision arithmetic */ /***************************************************************************/ /* Problem: what happens if one of these instructions traps, and the emulation code causes a garbage-collection? We'll end up with the PC pointing into something that's not a code segment. We avoid this by using explicit tests and calls to the emulation code. */ INLINE_ROUTINE(neg_long) andi. r0,r3,1 li rtemp1,TAGGED(0) beqM neg_long1 /* emulate if argument is long */ li r0,0 mtxer r0 /* reset XER overflow state */ subfco. rtemp2,r3,rtemp1 bsoM neg_long1 /* emulate if result overflows */ addi r3,rtemp2,1 /* restore tag bit */ blr neg_long1: CALL_IO_LOCAL(neg_long, POLY_SYS_aneg) RegMask (aneg,(M_R3|M_R23|Mask_neg_long)) /***************************************************************************/ INLINE_ROUTINE(add_long) and r0,r3,r4 andi. r0,r0,1 beqM add_long1 /* emulate if either argument is long */ li r0,0 mtxer r0 /* reset XER overflow state */ addo. rtemp2,r3,r4 bsoM add_long1 /* emulate if result overflows */ subi r3,rtemp2,1 /* restore tag bit */ blr add_long1: CALL_IO_LOCAL(add_long, POLY_SYS_aplus) RegMask (aplus,(M_R3|M_R23|Mask_add_long)) /***************************************************************************/ INLINE_ROUTINE(sub_long) and r0,r3,r4 andi. r0,r0,1 beqM sub_long1 /* emulate if either argument is long */ li r0,0 mtxer r0 /* reset XER overflow state */ subfco. rtemp2,r4,r3 bsoM sub_long1 /* emulate if result overflows */ addi r3,rtemp2,1 /* restore tag bit */ blr sub_long1: CALL_IO_LOCAL(sub_long, POLY_SYS_aminus) RegMask (aminus,(M_R3|M_R23|Mask_sub_long)) /***************************************************************************/ INLINE_ROUTINE(mult_long) and r0,r3,r4 mr rtemp1,r3 /* save r3 */ andi. r0,r0,1 mr rtemp2,r4 /* save r4 */ beq mult_really_long srawi r3,r3,TAGSHIFT /* Untag one argument. */ subi r4,r4,TAGGED(0) /* Remove tag, but don't shift */ /* This assumes that the machine supports the multiply instr. */ mullwo. r3,r3,r4 bsoM mult_really_long2 li r4,TAGGED(0) ori r3,r3,1 blr mult_really_long2: /* restore r3 and r4, then call the C routine */ mr r3,rtemp1 mr r4,rtemp2 mult_really_long: /* call the (slow) C multiplication routine */ CALL_IO_LOCAL(mult_long, POLY_SYS_amul) RegMask (amul,(M_R3|M_R4|M_R23|Mask_mult_long)) /***************************************************************************/ INLINE_ROUTINE(div_long) /* check for long arguments */ and r0,r3,r4 andi. r0,r0,1 beqM div_really_long /* Check for division by zero */ cmpwi r4,TAGGED(0) beqM div_by_zero /* check for division of MININT by -1 */ cmpwi r4,TAGGED(-1) bneP div_long1 rlwinm r0,r3,1,0,31 /* If we rotate MININT 1 place left, this is what we get. */ cmpwi r0,(shiftup(1,1) | 1) /* tag bit plus rotated sign bit */ beq div_really_long div_long1: /* untag the values into r3 and r4 */ srawi r3,r3,TAGSHIFT srawi r4,r4,TAGSHIFT divw r3,r3,r4 /* r3, r4 now contain the 32 bit quotient and remainder respectively */ slwi r3,r3,TAGSHIFT /* result is the quotient */ li r4,TAGGED(0) /* zap r4 */ ori r3,r3,1 /* tag result */ blr div_really_long: CALL_IO_LOCAL(div_long, POLY_SYS_adiv) RegMask (adiv,(M_R3|M_R4|M_R23|Mask_div_long)) div_by_zero: lwz r0,48(r13) /* Jump to the Raise_div entry point */ mtctr r0 bctr /***************************************************************************/ INLINE_ROUTINE(rem_long) /* check for long arguments */ and r0,r3,r4 andi. r0,r0,1 rem_really_long: CALL_IO_LOCAL(rem_long, POLY_SYS_amod) RegMask (amod,(M_R3|M_R4|M_R23|Mask_rem_long)) /***************************************************************************/ /* Arithmetic tests on arbitrary-precision integers. */ /***************************************************************************/ /* new version - doesn't need a trap (which can be expensive) */ /* For an equality test, we can use short test if either argument is short. For other tests, we need both arguments to be short, which explains why the "combine" parameter is "or" for equality tests and "and" for other tests. SPF 1/11/95. */ #define ARBTEST(name, name2, maskname, cond, combine, ioCall) \ INLINE_ROUTINE(name) \ combine rtemp1,r3,r4; \ andi. rtemp1,rtemp1,1; \ beqM name##_really_long; /* at least one argument is long */ \ cmpw r3,r4; \ li r3,TRUE; \ b##cond##lr; /* Return TRUE if condition holds */ \ li r3,FALSE; \ blr; /* Return FALSE otherwise */ \ name##_really_long: \ CALL_IO_LOCAL(name2, ioCall) ; \ RegMask(maskname,(M_R3|M_R23|Mask_##name2)) ARBTEST(equal_long, equal_long, equala, eq, or, POLY_SYS_equala) ARBTEST(int_geq, ge_long, int_geq, ge, and, POLY_SYS_int_geq) ARBTEST(int_leq, le_long, int_leq, le, and, POLY_SYS_int_leq) ARBTEST(int_gtr, gt_long, int_gtr, gt, and, POLY_SYS_int_gtr) ARBTEST(int_lss, ls_long, int_lss, lt, and, POLY_SYS_int_lss) INLINE_ROUTINE(or_long) and r0,r3,r4 andi. r0,r0,1 beqM or_really_long /* emulate if either argument is long */ or r3,r3,r4 blr or_really_long: CALL_IO(or_long, POLY_SYS_ora) RegMask (ora,(M_R3|M_R23|Mask_or_long)) INLINE_ROUTINE(and_long) and r0,r3,r4 andi. r0,r0,1 beqM and_really_long /* emulate if either argument is long */ and r3,r3,r4 blr and_really_long: CALL_IO(and_long, POLY_SYS_anda) RegMask (anda,(M_R3|M_R23|Mask_and_long)) INLINE_ROUTINE(xor_long) and r0,r3,r4 andi. r0,r0,1 beqM xor_really_long /* emulate if either argument is long */ xor rtemp1,r3,r4 /* tag bits will be equal */ ori r3,rtemp1,1 /* restore tag bit */ blr xor_really_long: CALL_IO(xor_long, POLY_SYS_xora) RegMask (xora,(M_R3|M_R23|Mask_xor_long)) /***************************************************************************/ /* Loads and Stores */ /***************************************************************************/ INLINE_ROUTINE(load_byte) srawi rtemp1,r4,TAGSHIFT /* untag to byte offset */ lbzx rtemp1,r3,rtemp1 /* fetch byte */ slwi rtemp1,rtemp1,TAGSHIFT addi r3,rtemp1,1 /* return result as a tagged integer */ blr RegMask (load_byte,(M_R3|M_R23)) INLINE_ROUTINE(load_word) rlwinm rtemp1,r4,2-TAGSHIFT,0,29 /* untag to word offset, masking off shifted tag */ lwzx r3,r3,rtemp1 /* fetch (tagged) word */ blr RegMask (load_word,(M_R3|M_R23)) INLINE_ROUTINE(assign_byte) srawi rtemp1,r4,TAGSHIFT /* rt1 = untagged byte-offset */ srawi rtemp2,r5,TAGSHIFT /* rt2 = untagged byte */ stbx rtemp2,r3,rtemp1 li r3,UNIT /* result is always "()" */ blr RegMask (assign_byte,(M_R3|M_R23)) INLINE_ROUTINE(assign_word) rlwinm rtemp1,r4,2-TAGSHIFT,0,29 /* rt1 = untagged word-offset */ stwx r5,r3,rtemp1 li r3,UNIT /* result is always "()" */ blr RegMask (assign_word,(M_R3|M_R23)) /***************************************************************************/ /* Miscellaneous */ /***************************************************************************/ INLINE_ROUTINE(is_shorta) /* Move tag bit into LS digit position */ rlwinm rtemp1,r3,TAGSHIFT,(31-TAGSHIFT),(31-TAGSHIFT) ori r3,rtemp1,1 /* return result as a tagged integer */ blr RegMask (is_short,(M_R3|M_R23)) /* Single character strings are represented as shorts */ INLINE_ROUTINE(string_length) andi. rtemp1,r3,1 /* Is it a short? (Set CR0) */ beq sl1 /* a single character */ li r3,TAGGED(1) blr /* not a single character */ sl1: lwz rtemp1,0(r3) /* Get string length (in bytes) */ slwi rtemp1,rtemp1,TAGSHIFT /* Return tagged length */ addi r3,rtemp1,1 blr RegMask (string_length,(M_R3|M_R23)) /* Store the length of a string in the first word. */ INLINE_ROUTINE(set_string_length_a) srwi rtemp1,r4,TAGSHIFT /* Untag the length */ stw rtemp1,0(r3) li r3,UNIT /* Return unit */ blr RegMask (set_string_length,(M_R3|M_R23)) INLINE_ROUTINE(is_big_endian) li r3,TRUE blr RegMask (is_big_endian,(M_R3|M_R23)) INLINE_ROUTINE(bytes_per_word) li r3,TAGGED(4) blr RegMask (bytes_per_word,(M_R3|M_R23)) INLINE_ROUTINE(move_bytes) srawi rtemp1,r4,TAGSHIFT /* rt1 = untagged source offset */ srawi rtemp2,r6,TAGSHIFT /* rt2 = untagged dest offset */ lwz rtemp3,0(rsp) /* rt3 = number of bytes to move. */ add rtemp1,r3,rtemp1 /* Source address. */ add rtemp2,r5,rtemp2 /* Destination address. */ srawi. rtemp3,rtemp3,TAGSHIFT mtctr rtemp3 beq MB2 cmplw rtemp1,rtemp2 /* If the source < destination use decrementing move. */ blt MB4 addi rtemp1,rtemp1,-1 /* else use incrementing move. */ addi rtemp2,rtemp2,-1 MB1: lbzu rtemp3,1(rtemp1) stbu rtemp3,1(rtemp2) bdnz MB1 MB2: li r3,TAGGED(0) addi rsp,rsp,4 /* Pop last argument. */ blr MB4: add rtemp1,rtemp3,rtemp1 add rtemp2,rtemp3,rtemp2 MB5: lbzu rtemp3,-1(rtemp1) stbu rtemp3,-1(rtemp2) bdnz MB5 li r3,TAGGED(0) addi rsp,rsp,4 /* Pop last argument. */ blr RegMask (move_bytes,(M_R3|M_R23)) INLINE_ROUTINE(move_words) rlwinm rtemp1,r4,2-TAGSHIFT,0,29 /* rt1 = untag to word offset, masking off shifted tag */ rlwinm rtemp2,r6,2-TAGSHIFT,0,29 /* rt1 = untag to word offset, masking off shifted tag */ lwz rtemp3,0(rsp) /* rt3 = number of words to move. */ add rtemp1,r3,rtemp1 /* Source address. */ add rtemp2,r5,rtemp2 /* Destination address. */ srawi. rtemp3,rtemp3,TAGSHIFT mtctr rtemp3 beq MW2 cmplw rtemp1,rtemp2 /* If the source < destination use decrementing move. */ blt MW4 addi rtemp1,rtemp1,-4 /* else use incrementing move. */ addi rtemp2,rtemp2,-4 MW1: lwzu rtemp3,4(rtemp1) stwu rtemp3,4(rtemp2) bdnz MW1 MW2: li r3,TAGGED(0) addi rsp,rsp,4 /* Pop last argument. */ blr MW4: slwi rtemp3,rtemp3,2 add rtemp1,rtemp3,rtemp1 add rtemp2,rtemp3,rtemp2 MW5: lwzu rtemp3,-4(rtemp1) stwu rtemp3,-4(rtemp2) bdnz MW5 li r3,TAGGED(0) addi rsp,rsp,4 /* Pop last argument. */ blr RegMask (move_words,(M_R3|M_R23)) /* Word functions. These are all unsigned and do not raise Overflow */ INLINE_ROUTINE(mul_word) srawi r3,r3,TAGSHIFT /* Untag one argument. */ subi rtemp1,r4,1 /* Remove tag but don't shift. */ mullw r3,r3,rtemp1 addi r3,r3,1 /* Add back the tag. */ blr RegMask (mul_word,M_R3|M_R23) INLINE_ROUTINE(plus_word) subi rtemp2,r3,1 /* Remove a tag */ add r3,rtemp2,r4 /* Add the values */ blr RegMask (plus_word,(M_R3|M_R23)) INLINE_ROUTINE(minus_word) sub rtemp2,r3,r4 /* Do the subtraction. */ addi r3,rtemp2,1 /* restore tag bit */ blr RegMask (minus_word,(M_R3|M_R23)) INLINE_ROUTINE(div_word) cmpwi r4,TAGGED(0) beqM div_by_zero subi r3,r3,1 /* Subtract tag from args. */ subi rtemp1,r4,1 divwu r3,r3,rtemp1 slwi r3,r3,TAGSHIFT /* Tag the result. */ addi r3,r3,1 blr RegMask (div_word,M_R3|M_R23) INLINE_ROUTINE(mod_word) cmpwi r4,TAGGED(0) beqM div_by_zero subi rtemp1,r3,TAGSHIFT /* Untag arguments. */ subi rtemp2,r4,TAGSHIFT /* We don't get the remainder directly so we have to do this. */ divwu rtemp1,rtemp1,rtemp2 mullw rtemp1,rtemp1,rtemp2 sub r3,r3,rtemp1 blr RegMask (mod_word,M_R3|M_R23) /* Unsigned tests on words. */ TEST(word_geq,ge) TEST(word_leq,le) TEST(word_gtr,gt) TEST(word_lss,lt) INLINE_ROUTINE(int_to_word) andi. r0,r3,1 bnelr /* Return it if it's short. */ /* Else drop through. */ /* This is now used in conjunction with isShort in Word.fromint */ INLINE_ROUTINE(get_first_long_word_a) /* If it's long we can take the first word of the long precision representation. It is in little-endian form and the sign bit is in the header. */ lbz rtemp3,-4(r3) /* Flag byte */ andi. r0,rtemp3,16 /* 16 is negative bit. */ li rtemp3,0 lwbrx r3,r3,rtemp3 beq i2w1 subf r3,r3,rtemp3 /* Negate. */ i2w1: slwi r3,r3,TAGSHIFT /* Tag the result. */ addi r3,r3,1 blr RegMask (int_to_word,M_R3|M_R23) RegMask (get_first_long_word,M_R3|M_R23) INLINE_ROUTINE(atomic_incr) ati1: lwarx r4,0,r3 /* Load value at 0(r3) with reservation. */ addi r4,r4,2 /* 2 is TAGGED(1)-TAG */ stwcx. r4,0,r3 /* Store the updated value unless someone else did. */ bne- ati1 mr r3,r4 blr RegMask(atomic_incr,M_R3|M_R4|M_R23) INLINE_ROUTINE(atomic_decr) atd1: lwarx r4,0,r3 subi r4,r4,2 /* 2 is TAGGED(1)-TAG */ stwcx. r4,0,r3 bne- atd1 mr r3,r4 blr RegMask(atomic_decr,M_R3|M_R4|M_R23) INLINE_ROUTINE(thread_self) lwz r3,60(r13) /* Load the the thread id. */ blr RegMask(thread_self,M_R3|M_R23) globldec(MD_flush_instruction_cache) /* This function is needed because the instruction cache on the PowerPC does not see changes in the data cache. When code segments are written it is necessary to flush the data from the data cache and also invalidate the instruction cache just in case the location we have written to happened to previously contain code as was in the instruction cache. */ #define CACHE_LINE_SIZE 32 /* TODO: We only need to flush the appropriate cache lines. i.e. We don't need to call dcbf for each byte. */ mtctr r4 mfic1: dcbf 0,r3 /* Flush data - i.e. make sure memory is up to date. */ sync /* Make sure they really have been flushed BEFORE we call icbi. */ icbi 0,r3 /* Flush instructions - make sure we reload. */ addi r3,r3,1 bdnz mfic1 sync; isync /* This MAY help. */ blr /* Register mask vector. - extern int registerMaskVector[]; Each entry in this vector is a set of the registers modified by the function. It is an untagged bitmap with the registers encoded in the same way as in the code generator. Unused entries are set to Mask_all for safety in case a new entry is added to the iovector without also adding an entry here. Entries that call into the RTS also use Mask_all now. That's not essential - in many cases registers are actually preserved - but certain RTS calls (e.g. callcode and exception_trace) have the effect of modifying any register. */ #define dd .long globldec(registerMaskVector) dd Mask_all /* 0 is unused */ dd Mask_all /* 1 */ dd Mask_all /* 2 */ dd Mask_all /* 3 is unused */ dd Mask_all /* 4 is unused */ dd Mask_all /* 5 is unused */ dd Mask_all /* 6 */ dd Mask_all /* 7 is unused */ dd Mask_all /* 8 is unused */ dd Mask_all /* 9 */ dd Mask_all /* 10 is unused */ dd Mask_alloc_store /* 11 */ dd Mask_all /* 12 is now unused */ dd Mask_all /* return = 13 */ dd Mask_all /* raisex = 14 */ dd Mask_get_length /* 15 */ dd Mask_all /* 16 is unused */ dd Mask_all /* 17 */ dd Mask_all /* 18 - now unused */ dd Mask_all /* 19 - now unused */ dd Mask_all /* 20 - now unused */ dd Mask_all /* 21 is unused */ dd Mask_all /* 22 is unused */ dd Mask_all /* 23 is unused */ dd Mask_teststreq /* 24 */ dd Mask_teststrneq /* 25 */ dd Mask_teststrgtr /* 26 */ dd Mask_teststrlss /* 27 */ dd Mask_teststrgeq /* 28 */ dd Mask_teststrleq /* 29 */ dd Mask_all /* 30 */ dd Mask_all /* 31 - now unused */ dd Mask_all /* 32 - now unused */ dd Mask_all /* 33 - now unused */ dd Mask_all /* 34 - now unused */ dd Mask_all /* 35 - now unused */ dd Mask_all /* 36 */ dd Mask_all /* 37 is unused */ dd Mask_all /* 38 is unused */ dd Mask_all /* 39 is unused */ dd Mask_all /* 40 */ dd Mask_all /* 41 is unused */ dd Mask_all /* 42 */ dd Mask_all /* 43 */ dd Mask_all /* 44 - now unused */ dd Mask_all /* 45 - now unused */ dd Mask_all /* 46 */ dd Mask_lockseg /* 47 */ dd Mask_all /* nullorzero = 48 */ dd Mask_all /* 49 - now unused */ dd Mask_all /* 50 - now unused */ dd Mask_all /* 51 */ dd Mask_all /* 52 */ dd Mask_all /* 53 is unused */ dd Mask_all /* 54 is unused */ dd Mask_all /* version_number = 55 */ dd Mask_all /* 56 is unused */ dd Mask_all /* 57 is unused */ dd Mask_all /* 58 is unused */ dd Mask_all /* 59 is unused */ dd Mask_all /* 60 is unused */ dd Mask_all /* 61 */ dd Mask_all /* 62 */ dd Mask_all /* 63 is unused */ dd Mask_all /* 64 is unused */ dd Mask_all /* 65 is unused */ dd Mask_all /* 66 is unused */ dd Mask_all /* 67 is unused */ dd Mask_all /* 68 is unused */ dd Mask_all /* 69 is unused */ dd Mask_atomic_incr /* 70 */ dd Mask_atomic_decr /* 71 */ dd Mask_thread_self /* 72 */ dd Mask_all /* 73 */ dd Mask_all /* 74 is unused */ dd Mask_all /* 75 is unused */ dd Mask_all /* 76 is unused */ dd Mask_all /* 77 is unused */ dd Mask_all /* 78 is unused */ dd Mask_all /* 79 is unused */ dd Mask_all /* Mask_version_number_1 = 80 */ dd Mask_all /* 81 - now unused */ dd Mask_all /* 82 */ dd Mask_all /* 83 */ dd Mask_all /* 84 */ dd Mask_all /* 85 */ dd Mask_all /* 86 */ dd Mask_all /* 87 */ dd Mask_all /* 88 */ dd Mask_all /* 89 is unused */ dd Mask_all /* 90 is unused */ dd Mask_all /* 91 is unused */ dd Mask_all /* 92 */ dd Mask_all /* 93 */ dd Mask_all /* 94 */ dd Mask_all /* 95 is unused */ dd Mask_all /* 96 is unused */ dd Mask_all /* 97 is unused */ dd Mask_all /* 98 is now unused */ dd Mask_all /* 99 */ dd Mask_all /* 100 */ dd Mask_all /* 101 is unused */ dd Mask_all /* 102 is unused */ dd Mask_all /* 103 */ dd Mask_all /* 104 is unused */ dd Mask_is_short /* 105 */ dd Mask_aplus /* 106 */ dd Mask_aminus /* 107 */ dd Mask_amul /* 108 */ dd Mask_adiv /* 109 */ dd Mask_amod /* 110 */ dd Mask_aneg /* 111 */ dd Mask_xora /* 112 */ dd Mask_equala /* 113 */ dd Mask_ora /* 114 */ dd Mask_anda /* 115 */ dd Mask_all /* version_number_3 = 116 */ dd Mask_all /* 117 */ dd Mask_all /* 118 */ dd Mask_all /* 119 */ dd Mask_all /* 120 */ dd Mask_all /* 121 */ dd Mask_all /* 122 */ dd Mask_all /* 123 */ dd Mask_all /* 124 */ dd Mask_all /* 125 */ dd Mask_all /* 126 */ dd Mask_all /* 127 */ dd Mask_all /* 128 */ dd Mask_all /* 129 is unused */ dd Mask_all /* 130 */ dd Mask_all /* 131 is unused */ dd Mask_all /* 132 */ dd Mask_all /* 133 */ dd Mask_all /* 134 */ dd Mask_all /* 135 */ dd Mask_all /* 136 */ dd Mask_all /* 137 */ dd Mask_all /* 138 */ dd Mask_all /* 139 */ dd Mask_all /* 140 */ dd Mask_all /* 141 */ dd Mask_all /* 142 - now unused */ dd Mask_all /* 143 is unused */ dd Mask_all /* 144 is unused */ dd Mask_all /* 145 is unused */ dd Mask_all /* 146 is unused */ dd Mask_all /* 147 is unused */ dd Mask_all /* stdin = 148 */ dd Mask_all /* stdout= 149 */ dd Mask_all /* 150 */ dd Mask_set_string_length /* 151 */ dd Mask_get_first_long_word /* 152 */ dd Mask_all /* 153 is unused */ dd Mask_all /* 154 is unused */ dd Mask_all /* 155 is unused */ dd Mask_all /* 156 is unused */ dd Mask_all /* 157 is unused */ dd Mask_all /* 158 is unused */ dd Mask_all /* 159 is unused */ dd Mask_all /* 160 is unused */ dd Mask_all /* 161 is unused */ dd Mask_all /* 162 is unused */ dd Mask_all /* 163 is unused */ dd Mask_all /* 164 is unused */ dd Mask_all /* 165 is unused */ dd Mask_all /* 166 is unused */ dd Mask_all /* 167 is unused */ dd Mask_all /* 168 is unused */ dd Mask_all /* 169 is unused */ dd Mask_all /* 170 is unused */ dd Mask_all /* 171 is unused */ dd Mask_all /* 172 is unused */ dd Mask_all /* 173 is unused */ dd Mask_all /* 174 is unused */ dd Mask_all /* 175 is unused */ dd Mask_all /* 176 is unused */ dd Mask_all /* 177 is unused */ dd Mask_all /* 178 is unused */ dd Mask_all /* 179 is unused */ dd Mask_all /* 180 is unused */ dd Mask_all /* 181 is unused */ dd Mask_all /* 182 is unused */ dd Mask_all /* 183 is unused */ dd Mask_all /* 184 is unused */ dd Mask_all /* 185 is unused */ dd Mask_all /* 186 is unused */ dd Mask_all /* 187 is unused */ dd Mask_all /* 188 is unused */ dd Mask_all /* 189 */ dd Mask_all /* 190 is unused */ dd Mask_all /* 191 - now unused */ dd Mask_all /* 192 is unused */ dd Mask_all /* 193 is unused */ dd Mask_all /* 194 */ dd Mask_move_words /* 195 */ dd Mask_shift_right_arith_word /* 196 */ dd Mask_int_to_word /* 197 */ dd Mask_move_bytes /* 198 */ dd Mask_all /* 199 now unused */ dd Mask_all /* 200 */ dd Mask_all /* 201 */ dd Mask_all /* stderr = 202 */ dd Mask_all /* 203 now unused */ dd Mask_all /* 204 */ dd Mask_all /* 205 */ dd Mask_all /* 206 */ dd Mask_all /* 207 is unused */ dd Mask_all /* 208 now unused */ dd Mask_all /* 209 */ dd Mask_all /* 210 is unused */ dd Mask_all /* 211 is unused */ dd Mask_all /* 212 is unused */ dd Mask_is_big_endian /* 213 */ dd Mask_bytes_per_word /* 214 */ dd Mask_offset_address /* 215 */ dd Mask_shift_right_word /* 216 */ dd Mask_word_neq /* 217 */ dd Mask_not_bool /* 218 */ dd Mask_all /* 219 is unused */ dd Mask_all /* 220 is unused */ dd Mask_all /* 221 is unused */ dd Mask_all /* 222 is unused */ dd Mask_string_length /* 223 */ dd Mask_all /* 224 is unused */ dd Mask_all /* 225 is unused */ dd Mask_all /* 226 is unused */ dd Mask_all /* 227 is unused */ dd Mask_all /* 228 is unused */ dd Mask_int_eq /* 229 */ dd Mask_int_neq /* 230 */ dd Mask_int_geq /* 231 */ dd Mask_int_leq /* 232 */ dd Mask_int_gtr /* 233 */ dd Mask_int_lss /* 234 */ dd Mask_all /* 235 */ dd Mask_all /* 236 is unused */ dd Mask_all /* 237 is unused */ dd Mask_mul_word /* 238 */ dd Mask_plus_word /* 239 */ dd Mask_minus_word /* 240 */ dd Mask_div_word /* 241 */ dd Mask_or_word /* 242 */ dd Mask_and_word /* 243 */ dd Mask_xor_word /* 244 */ dd Mask_shift_left_word /* 245 */ dd Mask_mod_word /* 246 */ dd Mask_word_geq /* 247 */ dd Mask_word_leq /* 248 */ dd Mask_word_gtr /* 249 */ dd Mask_word_lss /* 250 */ dd Mask_word_eq /* 251 */ dd Mask_load_byte /* 252 */ dd Mask_load_word /* 253 */ dd Mask_assign_byte /* 254 */ dd Mask_assign_word /* 255 */ polyml.5.2.1/libpolyml/power_dep.cpp0000644000175000017500000020303410772160234016473 0ustar daviddavid/* Title: Machine dependent code for Power architecture. Copyright (c) 2000-7 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifdef WIN32 #include "winconfig.h" #else #include "config.h" #endif #ifdef HAVE_STDLIB_H #include #endif #ifdef HAVE_SIGNAL_H #include #endif #ifdef HAVE_STRING_H #include #endif #ifdef HAVE_STDIO_H #include #endif #ifdef HAVE_ASSERT_H #include #define ASSERT(x) assert(x) #else #define ASSERT(x) #endif #ifdef HAVE_MCONTEXT_T_REGS // Linux #define NIP(scp) (scp)->uc_mcontext.regs->nip #define GPR27(scp) (scp)->uc_mcontext.regs->gpr[PT_R27] #elif (defined(HAVE_STRUCT_MCONTEXT_SS) || defined(HAVE_STRUCT___DARWIN_MCONTEXT_SS)) /* Mac OS X 10.2, 10.3 and 10.4. */ #define NIP(scp) scp->uc_mcontext->ss.srr0 #define GPR27(scp) scp->uc_mcontext->ss.r27 #elif (defined(HAVE_STRUCT___DARWIN_MCONTEXT___SS)) // Mac OS X 10.5 #define NIP(scp) scp->uc_mcontext->__ss.__srr0 #define GPR27(scp) scp->uc_mcontext->__ss.__r27 #elif defined(HAVE_MCONTEXT_T_GREGS) // Linux (new) #define NIP(scp) (scp)->uc_mcontext.uc_regs->gregs[PT_NIP] #define GPR27(scp) (scp)->uc_mcontext.uc_regs->gregs[PT_R27] #else /* Before OS X 10.2 signal handlers were given sigcontext structures. */ // This may need testing #define NIP(scp) scp->sc_ir #define GPR27(scp) (((int*)(scp)->sc_regs)[27+2]) #endif // R27 is used as the ML stack pointer #define GPSP(scp) GPR27(scp) #include "globals.h" #include "gc.h" #include "run_time.h" #include "mpoly.h" #include "arb.h" #include "int_opcodes.h" #include "reals.h" #include "diagnostics.h" #include "processes.h" #include "sighandler.h" #include "machine_dep.h" #include "profiling.h" #include "save_vec.h" #include "scanaddrs.h" #include "sys.h" #include "check_objects.h" #include "memmgr.h" // Values for the returnReason enum RETURN_REASON { RETURN_IO_CALL = 0, RETURN_HEAP_OVERFLOW, RETURN_STACK_OVERFLOW, RETURN_STACK_OVERFLOWEX, RETURN_RAISE_DIV, RETURN_ARB_EMULATION }; // Registers saved in taskData->stack. #define NUMCHECKED 21 // Number of checked registers. #define NUMUNCHECKED 3 // Number of unchecked registers // These registers must contain valid PolyWord values. Any addresses // may be updated as the result of a garbage collection. #define PS_R3 p_reg[0] // First argument and function result - r3 #define PS_R4 p_reg[1] // Second argument - r4 #define PS_R5 p_reg[2] // Third argument - r5 #define PS_R6 p_reg[3] // Fourth argument - r6 #define PS_R7 p_reg[4] // r7 #define PS_R8 p_reg[5] // r8 #define PS_R9 p_reg[6] // r9 #define PS_R10 p_reg[7] // r10 #define PS_R14 p_reg[8] // r14 #define PS_R15 p_reg[9] // r15 #define PS_R16 p_reg[10] // r16 #define PS_R17 p_reg[11] // r17 #define PS_R18 p_reg[12] // r18 #define PS_R19 p_reg[13] // r19 #define PS_R20 p_reg[14] // r20 #define PS_R21 p_reg[15] // r21 #define PS_R22 p_reg[16] // r22 #define PS_R23 p_reg[17] // r23 #define PS_R24 p_reg[18] // r24 - Closure register #define PS_R25 p_reg[19] // r25 - Return register #define PS_LR p_reg[20] // lr - Link register // These registers can contain values that are not valid PolyWord values. // They are copied unchanged if the stack is moved so must not contain addresses. #define PS_R11 p_reg[NUMCHECKED+1] // r11 - untagged register #define PS_R12 p_reg[NUMCHECKED+2] // r12 - untagged register #define PS_CR0 p_reg[NUMCHECKED+3] // Condition code register - untagged #define EXTRA_STACK 0 /* the amount of ML stack space to reserve for registers, C exception handling etc. The compiler requires us to reserve 2 stack-frames worth (2 * 20 words) plus whatever we require for the register save area. We actually reserve slightly more than this. SPF 3/3/97 */ #define OVERFLOW_STACK_SIZE \ (50 + \ sizeof(StackObject)/sizeof(PolyWord) + \ NUMCHECKED + \ NUMUNCHECKED + \ EXTRA_STACK) // This vector is pointed to by r13 typedef struct MemRegisters { int inRTS; /* This is set when taskData->stack->p_pc and taskData->stack->p_sp are set */ int requestCode; int returnReason; PolyWord *heapPointer; PolyWord *heapBase; StackObject *polyStack; PolyWord *stackLimit; byte *heapOverflow; byte *stackOverflow; byte *stackOverflowEx; byte *raiseException; byte *ioEntry; /* Offset 44 */ byte *raiseDiv; byte *arbEmulation; PolyWord *stackTop; // Used in "raisex" PolyObject *threadId; } MemRegisters; class PowerPCTaskData: public MDTaskData { public: PowerPCTaskData(): allocWords(0) { memRegisters.inRTS = 1; // We start off in the RTS. } POLYUNSIGNED allocWords; // The words to allocate. MemRegisters memRegisters; }; class PowerPCDependent: public MachineDependent { public: PowerPCDependent() {} // Create a task data object. virtual MDTaskData *CreateTaskData(void) { return new PowerPCTaskData(); } virtual void InitStackFrame(TaskData *taskData, Handle stack, Handle proc, Handle arg); virtual unsigned InitialStackSize(void) { return 128+OVERFLOW_STACK_SIZE; } // Initial size of a stack virtual int SwitchToPoly(TaskData *taskData); virtual void SetForRetry(TaskData *taskData, int ioCall); virtual void InitInterfaceVector(void); virtual void SetException(TaskData *taskData, poly_exn *exc); virtual void ResetSignals(void); virtual void ScanConstantsWithinCode(PolyObject *addr, PolyObject *oldAddr, POLYUNSIGNED length, ScanAddress *process); virtual void InterruptCode(TaskData *taskData); virtual int GetIOFunctionRegisterMask(int ioCall); virtual bool GetPCandSPFromContext(TaskData *taskData, SIGNALCONTEXT *context, PolyWord *&sp, POLYCODEPTR &pc); virtual void CallIO0(TaskData *taskData, Handle(*ioFun)(TaskData *)); virtual void CallIO1(TaskData *taskData, Handle(*ioFun)(TaskData *, Handle)); virtual void CallIO2(TaskData *taskData, Handle(*ioFun)(TaskData *, Handle, Handle)); virtual void CallIO3(TaskData *taskData, Handle(*ioFun)(TaskData *, Handle, Handle, Handle)); virtual void CallIO4(TaskData *taskData, Handle(*ioFun)(TaskData *, Handle, Handle, Handle, Handle)); virtual void CallIO5(TaskData *taskData, Handle(*ioFun)(TaskData *, Handle, Handle, Handle, Handle, Handle)); virtual Handle CallBackResult(TaskData *taskData); virtual void SetExceptionTrace(TaskData *taskData); virtual void CallCodeTupled(TaskData *taskData); virtual void SetCodeConstant(TaskData *taskData, Handle data, Handle constant, Handle offseth, Handle base); virtual void FlushInstructionCache(void *p, POLYUNSIGNED bytes); virtual Architectures MachineArchitecture(void) { return MA_PPC; } // Increment or decrement the first word of the object pointed to by the // mutex argument and return the new value. virtual Handle AtomicIncrement(TaskData *taskData, Handle mutexp); virtual Handle AtomicDecrement(TaskData *taskData, Handle mutexp); private: void StartIOCall(TaskData *taskData); void SetMemRegisters(TaskData *taskData); void HeapOverflowTrap(TaskData *taskData); void ArbitraryPrecisionTrap(TaskData *taskData); Handle BuildCodeSegment(TaskData *taskData, const byte *code, unsigned codeWords, char functionName); Handle BuildKillSelfCode(TaskData *taskData); }; // Entry code sequences - copied to memRegisters before entering ML. static byte *heapOverflow, *stackOverflow, *stackOverflowEx, *raiseDiv, *arbEmulation; // Functions in the assembly code segment. extern "C" { extern int str_compare(); extern int teststreq(); extern int teststrneq(); extern int teststrgtr(); extern int teststrlss(); extern int teststrgeq(); extern int teststrleq(); extern int locksega(); extern int add_long(); extern int sub_long(); extern int mult_long(); extern int div_long(); extern int rem_long(); extern int neg_long(); extern int or_long(); extern int and_long(); extern int xor_long(); extern int equal_long(); extern int shift_right_word(); extern int word_neq(); extern int not_bool(); extern int string_length(); extern int int_eq(); extern int int_neq(); extern int int_geq(); extern int int_leq(); extern int int_gtr(); extern int int_lss(); extern int or_word(); extern int and_word(); extern int xor_word(); extern int shift_left_word(); extern int word_eq(); extern int load_byte(); extern int load_word(); extern int assign_byte(); extern int assign_word(); extern int kill_selfa(); extern int alloc_store(); extern int get_length_a(); extern int int_to_word(); extern int move_bytes(); extern int move_words(); extern int shift_right_arith_word(); extern int raisex(); extern int extrace_normal_return(); extern int offset_address(); extern int is_shorta(); extern int is_big_endian(); extern int bytes_per_word(); extern int mul_word(); extern int plus_word(); extern int minus_word(); extern int div_word(); extern int mod_word(); extern int word_geq(); extern int word_leq(); extern int word_gtr(); extern int word_lss(); extern int set_string_length_a(); extern int get_first_long_word_a(); extern int atomic_incr(); extern int atomic_decr(); extern int thread_self(); extern void PPCAsmSwitchToPoly(struct MemRegisters *); extern void MD_flush_instruction_cache(void *p, POLYUNSIGNED bytes); extern void PPCSaveStateAndReturn(void); }; /******************************************************************************/ /* */ /* Stack Frame */ /* */ /******************************************************************************/ /* What do we store in the ML stack object? p_space p_pc p_sp (r30) p_hr (r31) p_nregs = 27 20 tagged registers (r3-r10, r14-r25) the literal 3 3 untagged registers (r11, r12, CR) the real ML stack Register Usage -------------- r0 scratch register (unsaved?) r1 - don't touch - dedicated C register (stack - like SPARC %o6) r2 - don't touch - dedicated C register (TOC) (Is the relevant now?) r3 used for the first argument to a function, and for the result. r4-r6 used for the next 3 args, any others being passed on the stack. (We may later decide to use r7-r10 for parameters too). r24 is the closure pointer or static link pointer r25 (rr) is used as the compiler-visible link register r26 is an RTS scratch register (unsaved). r27 (rsp) is the ML stack pointer, r28 is no longer used (formerly the stack limit reg) r29 (rhp) is the heap pointer, r30 (rhl) is the heap limit, r31 (rhr) points to the top exception handler. r7-r10 and r14-r23 (15 registers) are available as general work registers, as are r3-r6 and r24-r25, when they are not fulfilling their specialised duties. That's a total of 20 general-purpose registers (as opposed to 17 on the SPARC). r11, r12 are used as code-generator visible untagged registers. r26 is used as a compiler-invisible RTS scratch register for handling traps. LR is a semi-volatile register used to cache the return address. Executing a trap can copy rr into LR, even if it wasn't there before. Furthermore, it can change the tagged status of LR - it may be tagged after the trap, even if it was untagged before. What we do guarantee is that if LR cached rr before the trap, then it caches it afterwards (modulo possible tag bit discrepancies). Executing any function call (including an RTS call) invalidates both rr and LR. CTR is a volatile register - we use it to to return from traps and normal RTS calls, and it is also used to implement tail-calls. */ #define ML_HR 31 #define ML_HL 30 #define ML_HP 29 #define ML_SL 28 #define ML_SP 27 /* The first instruction executed after native code returns is the saved return address -2 */ #define RETURNOFFSET 2 /* The first instruction executed in a handler is the stored address -2 */ #define HANDLEROFFSET 2 #ifndef NOISY #define NOISY 0 #endif #define NOTIFYGC 0 // InitStackFrame. Set up a stack frame for a new thread (process). void PowerPCDependent::InitStackFrame(TaskData *taskData, Handle stackh, Handle proc, Handle arg) /* Initialise stack frame. */ { StackObject *stack = (StackObject *)DEREFWORDHANDLE(stackh); POLYUNSIGNED stack_size = stack->Length(); stack->p_space = OVERFLOW_STACK_SIZE; stack->p_pc = PC_RETRY_SPECIAL; /* As if we had called MD_set_for_retry. */ stack->p_nreg = NUMCHECKED; /* r3-r8, r13-r25, link */ stack->p_hr = stack->Offset(stack_size-3); stack->p_sp = stack->Offset(stack_size-3); /* sp */ /* Reset all registers since this may be an old stack frame */ for (unsigned i = 0; i < NUMCHECKED; i++) stack->p_reg[i] = TAGGED(0); // Set the default handler and return address to point to this code. // We have to offset the addresses by two bytes because the code to enter and a handler // or return from a function always subtracts two. Handle killCode = BuildKillSelfCode(taskData); PolyWord killJump = PolyWord::FromUnsigned(killCode->Word().AsUnsigned() | HANDLEROFFSET); stack = (StackObject *)DEREFWORDHANDLE(stackh); // In case it's moved stack->PS_R24 = DEREFWORD(proc); /* Set r24 to the closure address. */ stack->PS_LR = killJump; /* Set link reg to code to kill process. */ stack->p_reg[NUMCHECKED] = PolyWord::FromUnsigned(NUMUNCHECKED); /* 3 unchecked registers. */ /* Since they're unchecked, they don't need to be initialised, but set them to 0 anyway. */ stack->PS_R11 = PolyWord::FromUnsigned(0); stack->PS_R12 = PolyWord::FromUnsigned(0); stack->PS_CR0 = PolyWord::FromUnsigned(0); /* If this function takes an argument store it in the argument register. */ if (arg != 0) stack->PS_R3 = DEREFWORD(arg); /* No previous handler so point it at itself. */ stack->Set(stack_size-1, PolyWord::FromStackAddr(stack->Offset(stack_size-1))); /* Default handler. */ stack->Set(stack_size-2, killJump); /* Set up exception handler */ stack->Set(stack_size-3, TAGGED(0)); /* Default handler. */ } // These are just for debugging. They record the last point before // the memory was checked. byte *lastPC; int lastRequest, lastReason; // SwitchToPoly - start running Poly code. int PowerPCDependent::SwitchToPoly(TaskData *taskData) /* (Re)-enter the Poly code from C. */ { PowerPCTaskData *mdTask = (PowerPCTaskData*)taskData->mdTaskData; Handle mark = taskData->saveVec.mark(); while (1) { taskData->saveVec.reset(mark); // Remove old data e.g. from arbitrary precision. CheckMemory(); // Do any memory checking. // Remember the position after the last time we checked // the memory. lastPC = taskData->stack->p_pc; lastRequest = mdTask->memRegisters.requestCode; lastReason = mdTask->memRegisters.returnReason; SetMemRegisters(taskData); PPCAsmSwitchToPoly(&mdTask->memRegisters); // Load registers. Returns as a result of an RTS call. taskData->allocPointer = mdTask->memRegisters.heapPointer; // Get updated limit pointer. mdTask->allocWords = 0; switch (mdTask->memRegisters.returnReason) { case RETURN_IO_CALL: // The ML code wants an IO call. return mdTask->memRegisters.requestCode; case RETURN_HEAP_OVERFLOW: try { // The heap has overflowed. Put the return address into the program counter. // It may well not be a valid code address anyway. taskData->stack->p_pc = (byte*)taskData->stack->PS_LR.AsUnsigned(); taskData->stack->PS_LR = TAGGED(0); // Clobber this HeapOverflowTrap(taskData); } catch (IOException) { // We may get an exception while handling this if we run out of store } break; case RETURN_STACK_OVERFLOW: try { // The stack check has failed. This may either be because we really have // overflowed the stack or because the stack limit value has been adjusted // to result in a call here. taskData->stack->p_pc = (byte*)taskData->stack->PS_LR.AsUnsigned(); // Restore the original value from the link register (with the // +2 byte tagging). This enables the link register caching to work. taskData->stack->PS_LR = taskData->stack->PS_R25; CheckAndGrowStack(taskData, taskData->stack->p_sp); } catch (IOException) { // We may get an exception while handling this if we run out of store } return -1; // We're in a safe state to handle any interrupts. case RETURN_STACK_OVERFLOWEX: try { // Stack limit overflow. If the required stack space is larger than // the fixed overflow size the code will calculate the limit in rtemp1 PolyWord *stackP = taskData->stack->PS_R11.AsStackAddr(); taskData->stack->p_pc = (byte*)taskData->stack->PS_LR.AsUnsigned(); taskData->stack->PS_LR = taskData->stack->PS_R25; // Restore LR CheckAndGrowStack(taskData, stackP); } catch (IOException) { // We may get an exception while handling this if we run out of store } return -1; // We're in a safe state to handle any interrupts. case RETURN_RAISE_DIV: try { // Generally arithmetic operations don't raise exceptions. Overflow // is either ignored, for Word operations, or results in a call to // the abitrary precision emulation code. This is the exception // (no pun intended). taskData->stack->p_pc = (byte*)taskData->stack->PS_LR.AsUnsigned(); taskData->stack->PS_LR = TAGGED(0); // Set all the registers to a safe value here. We will almost certainly // have shifted a value in one of the registers before testing it for zero. // This may not actually be needed on the PPC for (POLYUNSIGNED i = 0; i < taskData->stack->p_nreg; i++) taskData->stack->p_reg[i] = TAGGED(0); raise_exception0(taskData, EXC_divide); } catch (IOException) { // Handle the C++ exception. } break; case RETURN_ARB_EMULATION: try { taskData->stack->p_pc = (byte*)taskData->stack->PS_LR.AsUnsigned(); taskData->stack->PS_LR = TAGGED(0); ArbitraryPrecisionTrap(taskData); } catch (IOException) { // We may get an exception in the trap handler e.g. if we run out of store. } break; } } } void PowerPCDependent::SetMemRegisters(TaskData *taskData) { PowerPCTaskData *mdTask = (PowerPCTaskData*)taskData->mdTaskData; mdTask->memRegisters.requestCode = 0; mdTask->memRegisters.returnReason = RETURN_IO_CALL; // If we haven't yet set the allocation area or we don't have enough we need // to create one (or a new one). if (taskData->allocPointer <= taskData->allocLimit + mdTask->allocWords || (userOptions.debug & DEBUG_FORCEGC)) { if (taskData->allocPointer < taskData->allocLimit) Crash ("Bad length in heap overflow trap"); // Find some space to allocate in. Updates taskData->allocPointer and // returns a pointer to the newly allocated space (if allocWords != 0) (void)processes->FindAllocationSpace(taskData, mdTask->allocWords, true); } else if (mdTask->allocWords != 0) // May just be store profiling. taskData->allocPointer -= mdTask->allocWords; mdTask->memRegisters.polyStack = taskData->stack; mdTask->memRegisters.stackTop = taskData->stack->Offset(taskData->stack->Length()); // Set the raiseException entry to point to the assembly code. mdTask->memRegisters.raiseException = (byte*)raisex; // Entry point to save the state for an IO call. This is the common entry // point for all the return and IO-call cases. mdTask->memRegisters.ioEntry = (byte*)PPCSaveStateAndReturn; mdTask->memRegisters.heapOverflow = heapOverflow; mdTask->memRegisters.stackOverflow = stackOverflow; mdTask->memRegisters.stackOverflowEx = stackOverflowEx; mdTask->memRegisters.raiseDiv = raiseDiv; mdTask->memRegisters.arbEmulation = arbEmulation; // If we have run out of store, either just above or while allocating in the RTS, // allocPointer and allocLimit will have been set to zero as part of the GC. We will // now be raising an exception which may free some store but we need to come back here // before we allocate anything. The compiled code uses unsigned arithmetic to check for // heap overflow but only after subtracting the space required. We need to make sure // that the values are still non-negative after substracting any object size. if (taskData->allocPointer == 0) taskData->allocPointer += MAX_OBJECT_SIZE; if (taskData->allocLimit == 0) taskData->allocLimit += MAX_OBJECT_SIZE; mdTask->memRegisters.heapPointer = taskData->allocPointer; // If we want heap profiling set the size to zero otherwise to the free space. // Setting this to zero may result in the heap size register becoming negative. // The code to allocate memory generated by the code generator tests for space, // traps if it is negative and afterwards subtracts the allocated space from // the space available. If we set it to zero here it will then become negative. if (profileMode == kProfileStoreAllocation || (userOptions.debug & DEBUG_REGION_CHECK)) mdTask->memRegisters.heapBase = taskData->allocPointer; else mdTask->memRegisters.heapBase = taskData->allocLimit; // Whenever the ML code enters a function it checks that the stack pointer is above // this value. The default is to set it to the top of the reserved area // but if we've had an interrupt we set it to the end of the stack. // InterruptCode may be called either when the thread is in the RTS or in ML code. if (taskData->pendingInterrupt) mdTask->memRegisters.stackLimit = taskData->stack->Offset(taskData->stack->Length()-1); else mdTask->memRegisters.stackLimit = taskData->stack->Offset(taskData->stack->p_space); mdTask->memRegisters.threadId = taskData->threadObject; if (taskData->stack->p_pc == PC_RETRY_SPECIAL) // We need to retry the call. The entry point should be the // first word of the closure which is in r24. taskData->stack->p_pc = taskData->stack->PS_R24.AsObjPtr()->Get(0).AsCodePtr(); } // Called as part of the call of an IO function. void PowerPCDependent::StartIOCall(TaskData *taskData) { // Set the return address to be the contents of the link register. // This is a real return address which is safe for the p_pc field but // not allowed to remain in a register field. We have to add the // return offset there. Because this may be a retry of the call we may // already have put in the offset in which case we have to remove it before we // put it into the pc. taskData->stack->p_pc = (byte*)(taskData->stack->PS_LR.AsUnsigned() & ~RETURNOFFSET); taskData->stack->PS_LR = PolyWord::FromUnsigned(taskData->stack->PS_LR.AsUnsigned() | RETURNOFFSET); } // IO Functions called indirectly from assembly code. void PowerPCDependent::CallIO0(TaskData *taskData, Handle (*ioFun)(TaskData *)) { StartIOCall(taskData); try { Handle result = (*ioFun)(taskData); taskData->stack->PS_R3 = result->Word(); } catch (IOException exc) { switch (exc.m_reason) { case EXC_EXCEPTION: return; case EXC_RETRY: return; } } } void PowerPCDependent::CallIO1(TaskData *taskData, Handle (*ioFun)(TaskData *, Handle)) { StartIOCall(taskData); Handle saved1 = taskData->saveVec.push(taskData->stack->PS_R3); try { Handle result = (*ioFun)(taskData, saved1); taskData->stack->PS_R3 = result->Word(); } catch (IOException exc) { switch (exc.m_reason) { case EXC_EXCEPTION: return; case EXC_RETRY: return; } } } void PowerPCDependent::CallIO2(TaskData *taskData, Handle (*ioFun)(TaskData *, Handle, Handle)) { StartIOCall(taskData); Handle saved1 = taskData->saveVec.push(taskData->stack->PS_R3); Handle saved2 = taskData->saveVec.push(taskData->stack->PS_R4); try { Handle result = (*ioFun)(taskData, saved2, saved1); taskData->stack->PS_R3 = result->Word(); } catch (IOException exc) { switch (exc.m_reason) { case EXC_EXCEPTION: return; case EXC_RETRY: return; } } } void PowerPCDependent::CallIO3(TaskData *taskData, Handle (*ioFun)(TaskData *, Handle, Handle, Handle)) { StartIOCall(taskData); Handle saved1 = taskData->saveVec.push(taskData->stack->PS_R3); Handle saved2 = taskData->saveVec.push(taskData->stack->PS_R4); Handle saved3 = taskData->saveVec.push(taskData->stack->PS_R5); try { Handle result = (*ioFun)(taskData, saved3, saved2, saved1); taskData->stack->PS_R3 = result->Word(); } catch (IOException exc) { switch (exc.m_reason) { case EXC_EXCEPTION: return; case EXC_RETRY: return; } } } void PowerPCDependent::CallIO4(TaskData *taskData, Handle (*ioFun)(TaskData *, Handle, Handle, Handle, Handle)) { StartIOCall(taskData); Handle saved1 = taskData->saveVec.push(taskData->stack->PS_R3); Handle saved2 = taskData->saveVec.push(taskData->stack->PS_R4); Handle saved3 = taskData->saveVec.push(taskData->stack->PS_R5); Handle saved4 = taskData->saveVec.push(taskData->stack->PS_R6); try { Handle result = (*ioFun)(taskData, saved4, saved3, saved2, saved1); taskData->stack->PS_R3 = result->Word(); } catch (IOException exc) { switch (exc.m_reason) { case EXC_EXCEPTION: return; case EXC_RETRY: return; } } } // The only functions with 5 args are move_bytes/word_long void PowerPCDependent::CallIO5(TaskData *taskData, Handle (*ioFun)(TaskData *, Handle, Handle, Handle, Handle, Handle)) { StartIOCall(taskData); Handle saved1 = taskData->saveVec.push(taskData->stack->PS_R3); Handle saved2 = taskData->saveVec.push(taskData->stack->PS_R4); Handle saved3 = taskData->saveVec.push(taskData->stack->PS_R5); Handle saved4 = taskData->saveVec.push(taskData->stack->PS_R6); Handle saved5 = taskData->saveVec.push(taskData->stack->p_sp[0]); try { Handle result = (*ioFun)(taskData, saved5, saved4, saved3, saved2, saved1); taskData->stack->PS_R3 = result->Word(); taskData->stack->p_sp++; // Pop the final argument now we're returning. } catch (IOException exc) { switch (exc.m_reason) { case EXC_EXCEPTION: return; case EXC_RETRY: return; } } } // Return the callback result. The current ML process (thread) terminates. Handle PowerPCDependent::CallBackResult(TaskData *taskData) { return taskData->saveVec.push(taskData->stack->PS_R3); // Argument to return is in r3. } bool PowerPCDependent::GetPCandSPFromContext(TaskData *taskData, SIGNALCONTEXT *scp, PolyWord *&sp, POLYCODEPTR &pc) { PowerPCTaskData *mdTask = (PowerPCTaskData*)taskData->mdTaskData; if (mdTask->memRegisters.inRTS) { sp = taskData->stack->p_sp; pc = taskData->stack->p_pc; return true; } else { sp = (PolyWord *)(GPSP(scp)); pc = (byte *)(NIP(scp)); return true; } } void PowerPCDependent::InterruptCode(TaskData *taskData) { PowerPCTaskData *mdTask = (PowerPCTaskData*)taskData->mdTaskData; // Set the stack limit pointer to the top of the stack to cause // a trap when we next check for stack overflow. // SetMemRegisters actually does this anyway if "pendingInterrupt" is set but // it's safe to do this repeatedly. if (taskData->stack != 0) mdTask->memRegisters.stackLimit = taskData->stack->Offset(taskData->stack->Length()-1); taskData->pendingInterrupt = true; } void PowerPCDependent::SetForRetry(TaskData *taskData, int ioCall) { taskData->stack->p_pc = PC_RETRY_SPECIAL; /* This value is treated specially. */ } static PolyWord *get_reg(TaskData *taskData, int rno) /* Returns a pointer to the register given by the 5 bit value rno. */ { /* Registers r0, r1, r2, r26, ML_SL, ML_HL and ML_HP should not be needed by the emulation code. */ switch (rno) { case 3: return &taskData->stack->PS_R3; case 4: return &taskData->stack->PS_R4; case 5: return &taskData->stack->PS_R5; case 6: return &taskData->stack->PS_R6; case 7: return &taskData->stack->PS_R7; case 8: return &taskData->stack->PS_R8; case 9: return &taskData->stack->PS_R9; case 10: return &taskData->stack->PS_R10; case 11: return &taskData->stack->PS_R11; case 12: return &taskData->stack->PS_R12; case 14: return &taskData->stack->PS_R14; case 15: return &taskData->stack->PS_R15; case 16: return &taskData->stack->PS_R16; case 17: return &taskData->stack->PS_R17; case 18: return &taskData->stack->PS_R18; case 19: return &taskData->stack->PS_R19; case 20: return &taskData->stack->PS_R20; case 21: return &taskData->stack->PS_R21; case 22: return &taskData->stack->PS_R22; case 23: return &taskData->stack->PS_R23; case 24: return &taskData->stack->PS_R24; case 25: return &taskData->stack->PS_R25; case ML_SP: return (PolyWord*)&taskData->stack->p_sp; case ML_HR: return (PolyWord*)&taskData->stack->p_hr; default: Crash("Unknown register %d at 0x%8x\n", rno, (int)(taskData->stack->p_pc)); } } static void set_CR0(TaskData *taskData, int CR0) { /* insert CR0 into condition register */ taskData->stack->PS_CR0 = PolyWord::FromUnsigned( (taskData->stack->PS_CR0.AsUnsigned() & 0x0fffffff) | (CR0 << 28)); } // Get the next instruction in the sequence, skipping over any // branch-forwarding jumps that the code-generator may have inserted. static POLYUNSIGNED getNextInstr(TaskData *taskData) { while (1) { POLYUNSIGNED instr = *(POLYUNSIGNED*)taskData->stack->p_pc; if ((instr & 0xfc000000) == 0x48000000) { POLYUNSIGNED offset = (instr >> 2) & 0xffffff; ASSERT((offset & 0x800000) == 0); // Shouldn't be a jump back. taskData->stack->p_pc += offset*sizeof(PolyWord); } else { taskData->stack->p_pc += sizeof(PolyWord); // Skip this instr return instr; } } } static void emulate_trap(TaskData *taskData, POLYUNSIGNED instr) /* Emulate an "addo.", "subfco.", "cmpw" or "cmpwi" instruction */ { unsigned opcode = (instr >> 26) & 0x3f; /* 6 bits */ unsigned RT = (instr >> 21) & 0x1f; /* 5 bits */ unsigned RA = (instr >> 16) & 0x1f; /* 5 bits */ /* added 19/12/95 SPF */ if (profileMode == kProfileEmulation) { add_count(taskData, taskData->stack->p_pc, taskData->stack->p_sp, 1); } #define OPCODE2_addodot ((1 << 10) | (266 << 1) | 1) #define OPCODE2_subfcodot ((1 << 10) | (8 << 1) | 1) #define OPCODE2_cmp ((0 << 10) | (0 << 1) | 0) #define OPCODE2_srawi ((824 << 1) | 0) /* We emulate comparisons only if they use CR field 0 */ if (opcode == 11 && RT == 0) { /* cmpwi RA,SI */ int UI = instr & 0xffff; /* 16 bits */ /* signed comparisons sign-extend the immediate. */ int exp2_15 = 1 << 15; int exp2_16 = 1 << 16; int SI = (UI < exp2_15) ? UI : UI - exp2_16; Handle arg1 = taskData->saveVec.push(*get_reg(taskData, RA)); Handle arg2 = taskData->saveVec.push(PolyWord::FromSigned(SI)); { /* arguments to comp_longc are backwards */ int res = compareLong(taskData, arg2,arg1); switch (res) { case 1: /* arg1 > arg2 */ set_CR0(taskData, 0x4); /* not LT; GT; not EQ; not SO */ break; case 0: /* arg1 = arg2 */ set_CR0(taskData, 0x2); /* not LT; not GT; EQ; not SO */ break; case -1: /* arg1 < arg2 */ set_CR0(taskData, 0x8); /* LT; not GT; not EQ; not SO */ break; default: Crash("Bad return value 0x%08x from comp_longc\n", res); break; } } } /* opcode == 11 */ else if (opcode == 31) { unsigned RB = (instr >> 11) & 0x1f; /* 5 bits */ unsigned opcode2 = instr & 0x7ff; /* 11 bits */ if (opcode2 == OPCODE2_addodot) { PolyWord a1 = *get_reg(taskData, RA); PolyWord a2 = *get_reg(taskData, RB); /* We may have trapped either because one of the arguments was long or because of overflow. In the latter case we may well have modified the destination register already. That's fine unless RT == RA. */ if (RB != 12) Crash("RB != regtemp2"); a2 = PolyWord::FromUnsigned(a2.AsUnsigned() + 1); /* We've removed the tag from this. */ /* printf("Emulating addition rt=%d, ra=%d, rb=%d\n", RT, RA, RB); */ if (IS_INT(a1) && IS_INT(a2)) { /* Must have been overflow. May have to undo the addition. */ if (RT == RA) a1 = PolyWord::FromUnsigned(a1.AsUnsigned() - (a2.AsUnsigned()-1)); } Handle arg1 = taskData->saveVec.push(a1); Handle arg2 = taskData->saveVec.push(a2); Handle res = add_longc(taskData, arg2, arg1); /* store result in RT */ *(get_reg(taskData, RT)) = DEREFWORD(res); /* we don't emulate the condition codes properly, but we MUST ensure that we reset the SO flag, because the compiled code tests this flag. If we left it set, the compiled code would loop back to re-emulate the instruction, giving us an endless succession of traps. SPF 11/8/95 */ set_CR0(taskData, 0x0); /* not LT; not GT; not EQ; not SO */ } else if (opcode2 == OPCODE2_subfcodot) { /* We may have trapped either because one of the arguments was long or because of overflow. In the latter case we may well have modified the destination register already. That's fine unless RT == RA or RT == RB. */ PolyWord a1 = *get_reg(taskData, RA); PolyWord a2 = *get_reg(taskData, RB); /* printf("Emulating subtraction rt=%d, ra=%d, rb=%d\n", RT, RA, RB); */ if (RA == 12) a1 = PolyWord::FromUnsigned(a1.AsUnsigned() + 1); else if (RB == 12) a2 = PolyWord::FromUnsigned(a2.AsUnsigned() - 1); else Crash("RA != regtemp2 and RB != regtemp2"); if (IS_INT(a1) && IS_INT(a2)) { /* Must have been overflow. May have to undo the subtraction. */ if (RT == RB) a2 = PolyWord::FromUnsigned(a2.AsUnsigned() + (a1.AsUnsigned()-1)); else if (RT == RB) a1 = PolyWord::FromUnsigned((a2.AsUnsigned()+1) - a1.AsUnsigned()); } Handle arg1 = taskData->saveVec.push(a1); Handle arg2 = taskData->saveVec.push(a2); /* subf is *reversed* subtraction, but sub_longc (currently) expects reversed arguments, so the following call ought to be correct. */ Handle res = sub_longc(taskData, arg1, arg2); /* store result in RT */ *(get_reg(taskData, RT)) = DEREFWORD(res); /* we don't emulate the condition codes properly, but we MUST ensure that we reset the SO flag. */ set_CR0(taskData, 0x0); /* not LT; not GT; not EQ; not SO */ } /* We emulate comparisons only if they use CR field 0 */ else if (opcode2 == OPCODE2_cmp && RT == 0) { /* arguments to comp_longc are backwards */ PolyWord a1 = *get_reg(taskData, RA); PolyWord a2 = *get_reg(taskData, RB); Handle arg1 = taskData->saveVec.push(a1); Handle arg2 = taskData->saveVec.push(a2); int res = compareLong(taskData, arg2,arg1); switch (res) { case 1: /* arg1 > arg2 */ set_CR0(taskData, 0x4); /* not LT; GT; not EQ; not SO */ break; case 0: /* arg1 = arg2 */ set_CR0(taskData, 0x2); /* not LT; not GT; EQ; not SO */ break; case -1: /* arg1 < arg2 */ set_CR0(taskData, 0x8); /* LT; not GT; not EQ; not SO */ break; default: Crash("Bad return value 0x%08x from comp_longc\n", res); break; } } else if (opcode2 == OPCODE2_srawi) { /* Start of multiply sequence. taskData->stack->p_pc now points at the multiply. */ PolyWord a1 = *get_reg(taskData, RT); /* srawi has regs reversed. */ PolyWord a2 = *get_reg(taskData, 12); /* The second arg is in regtemp2. */ POLYUNSIGNED mullwInstr = getNextInstr(taskData); assert(RA == 11); /* destination of srawi. */ /* Should be mullwo. rt,r12,r11 */ assert((mullwInstr & 0xfc1fffff) == 0x7C0C5DD7); RT = (mullwInstr >> 21) & 0x1f; Handle arg1 = taskData->saveVec.push(a1); Handle arg2 = taskData->saveVec.push(PolyWord::FromUnsigned(a2.AsUnsigned()+1)); /* This has been untagged. */ Handle res = mult_longc(taskData, arg2, arg1); *(get_reg(taskData, RT)) = PolyWord::FromUnsigned(DEREFWORD(res).AsUnsigned() - 1); /* Next instr will tag it. */ set_CR0(taskData, 0x0); /* Clear overflow bit. */ } else { Crash("Can't emulate instruction: 0x%08x\n",instr); } } /* opcode == 31 */ else /* opcode != 11 && opcode != 31 */ { Crash("Can't emulate instruction: 0x%08x\n",instr); } } void PowerPCDependent::ArbitraryPrecisionTrap(TaskData *taskData) { emulate_trap(taskData, getNextInstr(taskData)); } void PowerPCDependent::HeapOverflowTrap(TaskData *taskData) { PowerPCTaskData *mdTask = (PowerPCTaskData*)taskData->mdTaskData; // When we come here we have attempted to allocate some memory by // decrementing the heap pointer register. We have compared it against // the heap base and found there is insufficient space. That may be a // fake trap for heap profiling or it may be a real trap. // R12 should contain the length word. POLYUNSIGNED lengthWord = taskData->stack->PS_R12.AsUnsigned(); // We need one extra word for the length word itself. POLYUNSIGNED wordsNeeded = OBJ_OBJECT_LENGTH(lengthWord) + 1; if (profileMode == kProfileStoreAllocation) add_count(taskData, taskData->stack->p_pc, taskData->stack->p_sp, wordsNeeded); else if (taskData->allocPointer >= taskData->allocLimit && ! (userOptions.debug & DEBUG_REGION_CHECK)) Crash ("Spurious heap-limit trap"); taskData->allocPointer += wordsNeeded; // Adjust the heap pointer back mdTask->allocWords = wordsNeeded; // Actually allocate it in SetMemRegisters. } // This is the number of words in the call sequence #define MAKE_CALL_SEQUENCE_WORDS 5 #ifdef MACOSX // Mac OS X uses an older assembler syntax. #define MAKE_IO_CALL_SEQUENCE(ioNum, result) \ { \ __asm__ __volatile__ ( "bl 1f \n" \ "li r0,%1 \n" \ "stw r0,4(r13) \n" \ "lwz r0,44(r13) \n" \ "mtctr r0 \n" \ "bctr \n" \ "1: mflr r0 \n" \ "stw r0,%0" \ :"=m"(result) \ :"i"(ioNum) \ : "lr","r0" \ ); \ } #else // Linux #define MAKE_IO_CALL_SEQUENCE(ioNum, result) \ { \ __asm__ __volatile__ ( "bl 1f;" \ "li 0,%1;" \ "stw 0,4(13);" \ "lwz 0,44(13);" \ "mtctr 0;" \ "bctr;" \ "1: mflr 0;" \ "stw 0,%0" \ :"=m"(result) \ :"i"(ioNum) \ :"lr","0" \ ); \ } #endif #ifdef MACOSX // Mac OS X uses an older assembler syntax. #define MAKE_EXTRA_CALL_SEQUENCE(exNum, result) \ { \ __asm__ __volatile__ ( "bl 1f \n" \ "li r0,%1 \n" \ "stw r0,8(r13) \n" \ "lwz r0,44(r13) \n" \ "mtctr r0 \n" \ "bctr \n" \ "1: mflr r0 \n" \ "stw r0,%0" \ :"=m"(result) \ :"i"(exNum) \ :"lr","r0" \ ); \ } #else // Linux #define MAKE_EXTRA_CALL_SEQUENCE(exNum, result) \ { \ __asm__ __volatile__ ( "bl 1f;" \ "li 0,%1;" \ "stw 0,8(13);" \ "lwz 0,44(13);" \ "mtctr 0;" \ "bctr;" \ "1: mflr 0;" \ "stw 0,%0" \ :"=m"(result) \ :"i"(exNum) \ :"lr","0" \ ); \ } #endif static void add_function_to_io_area(int x, int (*y)()) { add_word_to_io_area(x, PolyWord::FromUnsigned((POLYUNSIGNED)y)); } void PowerPCDependent::InitInterfaceVector(void) { unsigned char *codeAddr; MAKE_IO_CALL_SEQUENCE(POLY_SYS_exit, codeAddr); add_word_to_io_area(POLY_SYS_exit, PolyWord::FromCodePtr(codeAddr)); add_function_to_io_area(POLY_SYS_alloc_store, alloc_store); MAKE_IO_CALL_SEQUENCE(POLY_SYS_chdir, codeAddr); add_word_to_io_area(POLY_SYS_chdir, PolyWord::FromCodePtr(codeAddr)); add_function_to_io_area(POLY_SYS_get_length, get_length_a); MAKE_IO_CALL_SEQUENCE(POLY_SYS_get_flags, codeAddr); add_word_to_io_area(POLY_SYS_get_flags, PolyWord::FromCodePtr(codeAddr)); add_function_to_io_area(POLY_SYS_str_compare, str_compare); add_function_to_io_area(POLY_SYS_teststreq, teststreq); add_function_to_io_area(POLY_SYS_teststrneq, teststrneq); add_function_to_io_area(POLY_SYS_teststrgtr, teststrgtr); add_function_to_io_area(POLY_SYS_teststrlss, teststrlss); add_function_to_io_area(POLY_SYS_teststrgeq, teststrgeq); add_function_to_io_area(POLY_SYS_teststrleq, teststrleq); MAKE_IO_CALL_SEQUENCE(POLY_SYS_exception_trace, codeAddr); add_word_to_io_area(POLY_SYS_exception_trace, PolyWord::FromCodePtr(codeAddr)); add_function_to_io_area(POLY_SYS_lockseg, locksega); MAKE_IO_CALL_SEQUENCE(POLY_SYS_profiler, codeAddr); add_word_to_io_area(POLY_SYS_profiler, PolyWord::FromCodePtr(codeAddr)); add_function_to_io_area(POLY_SYS_is_short, is_shorta); add_function_to_io_area(POLY_SYS_aplus, add_long); add_function_to_io_area(POLY_SYS_aminus, sub_long); add_function_to_io_area(POLY_SYS_amul, mult_long); add_function_to_io_area(POLY_SYS_adiv, div_long); add_function_to_io_area(POLY_SYS_amod, rem_long); add_function_to_io_area(POLY_SYS_aneg, neg_long); add_function_to_io_area(POLY_SYS_equala, equal_long); add_function_to_io_area(POLY_SYS_ora, or_long); add_function_to_io_area(POLY_SYS_anda, and_long); add_function_to_io_area(POLY_SYS_xora, xor_long); MAKE_IO_CALL_SEQUENCE(POLY_SYS_Real_str, codeAddr); add_word_to_io_area(POLY_SYS_Real_str, PolyWord::FromCodePtr(codeAddr)); MAKE_IO_CALL_SEQUENCE(POLY_SYS_Real_geq, codeAddr); add_word_to_io_area(POLY_SYS_Real_geq, PolyWord::FromCodePtr(codeAddr)); MAKE_IO_CALL_SEQUENCE(POLY_SYS_Real_leq, codeAddr); add_word_to_io_area(POLY_SYS_Real_leq, PolyWord::FromCodePtr(codeAddr)); MAKE_IO_CALL_SEQUENCE(POLY_SYS_Real_gtr, codeAddr); add_word_to_io_area(POLY_SYS_Real_gtr, PolyWord::FromCodePtr(codeAddr)); MAKE_IO_CALL_SEQUENCE(POLY_SYS_Real_lss, codeAddr); add_word_to_io_area(POLY_SYS_Real_lss, PolyWord::FromCodePtr(codeAddr)); MAKE_IO_CALL_SEQUENCE(POLY_SYS_Real_eq, codeAddr); add_word_to_io_area(POLY_SYS_Real_eq, PolyWord::FromCodePtr(codeAddr)); MAKE_IO_CALL_SEQUENCE(POLY_SYS_Real_neq, codeAddr); add_word_to_io_area(POLY_SYS_Real_neq, PolyWord::FromCodePtr(codeAddr)); MAKE_IO_CALL_SEQUENCE(POLY_SYS_Real_Dispatch, codeAddr); add_word_to_io_area(POLY_SYS_Real_Dispatch, PolyWord::FromCodePtr(codeAddr)); MAKE_IO_CALL_SEQUENCE(POLY_SYS_Add_real, codeAddr); add_word_to_io_area(POLY_SYS_Add_real, PolyWord::FromCodePtr(codeAddr)); MAKE_IO_CALL_SEQUENCE(POLY_SYS_Sub_real, codeAddr); add_word_to_io_area(POLY_SYS_Sub_real, PolyWord::FromCodePtr(codeAddr)); MAKE_IO_CALL_SEQUENCE(POLY_SYS_Mul_real, codeAddr); add_word_to_io_area(POLY_SYS_Mul_real, PolyWord::FromCodePtr(codeAddr)); MAKE_IO_CALL_SEQUENCE(POLY_SYS_Div_real, codeAddr); add_word_to_io_area(POLY_SYS_Div_real, PolyWord::FromCodePtr(codeAddr)); MAKE_IO_CALL_SEQUENCE(POLY_SYS_Neg_real, codeAddr); add_word_to_io_area(POLY_SYS_Neg_real, PolyWord::FromCodePtr(codeAddr)); MAKE_IO_CALL_SEQUENCE(POLY_SYS_Repr_real, codeAddr); add_word_to_io_area(POLY_SYS_Repr_real, PolyWord::FromCodePtr(codeAddr)); MAKE_IO_CALL_SEQUENCE(POLY_SYS_conv_real, codeAddr); add_word_to_io_area(POLY_SYS_conv_real, PolyWord::FromCodePtr(codeAddr)); MAKE_IO_CALL_SEQUENCE(POLY_SYS_real_to_int, codeAddr); add_word_to_io_area(POLY_SYS_real_to_int, PolyWord::FromCodePtr(codeAddr)); MAKE_IO_CALL_SEQUENCE(POLY_SYS_int_to_real, codeAddr); add_word_to_io_area(POLY_SYS_int_to_real, PolyWord::FromCodePtr(codeAddr)); MAKE_IO_CALL_SEQUENCE(POLY_SYS_sqrt_real, codeAddr); add_word_to_io_area(POLY_SYS_sqrt_real, PolyWord::FromCodePtr(codeAddr)); MAKE_IO_CALL_SEQUENCE(POLY_SYS_sin_real, codeAddr); add_word_to_io_area(POLY_SYS_sin_real, PolyWord::FromCodePtr(codeAddr)); MAKE_IO_CALL_SEQUENCE(POLY_SYS_cos_real, codeAddr); add_word_to_io_area(POLY_SYS_cos_real, PolyWord::FromCodePtr(codeAddr)); MAKE_IO_CALL_SEQUENCE(POLY_SYS_arctan_real, codeAddr); add_word_to_io_area(POLY_SYS_arctan_real, PolyWord::FromCodePtr(codeAddr)); MAKE_IO_CALL_SEQUENCE(POLY_SYS_exp_real, codeAddr); add_word_to_io_area(POLY_SYS_exp_real, PolyWord::FromCodePtr(codeAddr)); MAKE_IO_CALL_SEQUENCE(POLY_SYS_ln_real, codeAddr); add_word_to_io_area(POLY_SYS_ln_real, PolyWord::FromCodePtr(codeAddr)); MAKE_IO_CALL_SEQUENCE(POLY_SYS_io_operation, codeAddr); add_word_to_io_area(POLY_SYS_io_operation, PolyWord::FromCodePtr(codeAddr)); add_function_to_io_area(POLY_SYS_atomic_incr, atomic_incr); add_function_to_io_area(POLY_SYS_atomic_decr, atomic_decr); add_function_to_io_area(POLY_SYS_thread_self, thread_self); MAKE_IO_CALL_SEQUENCE(POLY_SYS_thread_dispatch, codeAddr); add_word_to_io_area(POLY_SYS_thread_dispatch, PolyWord::FromCodePtr(codeAddr)); add_function_to_io_area(POLY_SYS_offset_address, offset_address); add_function_to_io_area(POLY_SYS_shift_right_word, shift_right_word); add_function_to_io_area(POLY_SYS_word_neq, word_neq); add_function_to_io_area(POLY_SYS_not_bool, not_bool); add_function_to_io_area(POLY_SYS_string_length, string_length); add_function_to_io_area(POLY_SYS_int_eq, int_eq); add_function_to_io_area(POLY_SYS_int_neq, int_neq); add_function_to_io_area(POLY_SYS_int_geq, int_geq); add_function_to_io_area(POLY_SYS_int_leq, int_leq); add_function_to_io_area(POLY_SYS_int_gtr, int_gtr); add_function_to_io_area(POLY_SYS_int_lss, int_lss); add_function_to_io_area(POLY_SYS_or_word, or_word); add_function_to_io_area(POLY_SYS_and_word, and_word); add_function_to_io_area(POLY_SYS_xor_word, xor_word); add_function_to_io_area(POLY_SYS_shift_left_word, shift_left_word); add_function_to_io_area(POLY_SYS_word_eq, word_eq); add_function_to_io_area(POLY_SYS_load_byte, load_byte); add_function_to_io_area(POLY_SYS_load_word, load_word); add_function_to_io_area(POLY_SYS_is_big_endian, is_big_endian); add_function_to_io_area(POLY_SYS_bytes_per_word, bytes_per_word); add_function_to_io_area(POLY_SYS_assign_byte, assign_byte); add_function_to_io_area(POLY_SYS_assign_word, assign_word); MAKE_IO_CALL_SEQUENCE(POLY_SYS_objsize, codeAddr); add_word_to_io_area(POLY_SYS_objsize, PolyWord::FromCodePtr(codeAddr)); MAKE_IO_CALL_SEQUENCE(POLY_SYS_showsize, codeAddr); add_word_to_io_area(POLY_SYS_showsize, PolyWord::FromCodePtr(codeAddr)); MAKE_IO_CALL_SEQUENCE(POLY_SYS_timing_dispatch, codeAddr); add_word_to_io_area(POLY_SYS_timing_dispatch, PolyWord::FromCodePtr(codeAddr)); MAKE_IO_CALL_SEQUENCE(POLY_SYS_XWindows, codeAddr); add_word_to_io_area(POLY_SYS_XWindows, PolyWord::FromCodePtr(codeAddr)); MAKE_IO_CALL_SEQUENCE(POLY_SYS_full_gc, codeAddr); add_word_to_io_area(POLY_SYS_full_gc, PolyWord::FromCodePtr(codeAddr)); MAKE_IO_CALL_SEQUENCE(POLY_SYS_stack_trace, codeAddr); add_word_to_io_area(POLY_SYS_stack_trace, PolyWord::FromCodePtr(codeAddr)); MAKE_IO_CALL_SEQUENCE(POLY_SYS_foreign_dispatch, codeAddr); add_word_to_io_area(POLY_SYS_foreign_dispatch, PolyWord::FromCodePtr(codeAddr)); MAKE_IO_CALL_SEQUENCE(POLY_SYS_callcode_tupled, codeAddr); add_word_to_io_area(POLY_SYS_callcode_tupled, PolyWord::FromCodePtr(codeAddr)); MAKE_IO_CALL_SEQUENCE(POLY_SYS_process_env, codeAddr); add_word_to_io_area(POLY_SYS_process_env, PolyWord::FromCodePtr(codeAddr)); add_function_to_io_area(POLY_SYS_set_string_length, &set_string_length_a); /* DCJM 28/2/01 */ add_function_to_io_area(POLY_SYS_get_first_long_word, &get_first_long_word_a); /* DCJM 28/2/01 */ MAKE_IO_CALL_SEQUENCE(POLY_SYS_shrink_stack, codeAddr); add_word_to_io_area(POLY_SYS_shrink_stack, PolyWord::FromCodePtr(codeAddr)); MAKE_IO_CALL_SEQUENCE(POLY_SYS_code_flags, codeAddr); add_word_to_io_area(POLY_SYS_code_flags, PolyWord::FromCodePtr(codeAddr)); add_function_to_io_area(POLY_SYS_shift_right_arith_word, shift_right_arith_word); /* DCJM 10/10/99 */ add_function_to_io_area(POLY_SYS_int_to_word, int_to_word); /* DCJM 10/10/99 */ MAKE_IO_CALL_SEQUENCE(POLY_SYS_set_code_constant, codeAddr); /* DCJM 2/1/01 */ add_word_to_io_area(POLY_SYS_set_code_constant, PolyWord::FromCodePtr(codeAddr)); MAKE_IO_CALL_SEQUENCE(POLY_SYS_poly_specific, codeAddr); /* DCJM 19/6/06 */ add_word_to_io_area(POLY_SYS_poly_specific, PolyWord::FromCodePtr(codeAddr)); add_function_to_io_area(POLY_SYS_move_bytes, move_bytes); /* DCJM 10/10/99 */ add_function_to_io_area(POLY_SYS_move_words, move_words); /* DCJM 10/10/99 */ add_function_to_io_area(POLY_SYS_mul_word, mul_word); /* DCJM 10/10/99 */ add_function_to_io_area(POLY_SYS_plus_word, plus_word); /* DCJM 10/10/99 */ add_function_to_io_area(POLY_SYS_minus_word, minus_word); /* DCJM 10/10/99 */ add_function_to_io_area(POLY_SYS_div_word, div_word); /* DCJM 10/10/99 */ add_function_to_io_area(POLY_SYS_mod_word, mod_word); /* DCJM 10/10/99 */ add_function_to_io_area(POLY_SYS_word_geq, word_geq); add_function_to_io_area(POLY_SYS_word_leq, word_leq); add_function_to_io_area(POLY_SYS_word_gtr, word_gtr); add_function_to_io_area(POLY_SYS_word_lss, word_lss); // This is now a "closure" like all the other entries. add_function_to_io_area(POLY_SYS_raisex, raisex); MAKE_IO_CALL_SEQUENCE(POLY_SYS_io_dispatch, codeAddr); add_word_to_io_area(POLY_SYS_io_dispatch, PolyWord::FromCodePtr(codeAddr)); MAKE_IO_CALL_SEQUENCE(POLY_SYS_network, codeAddr); add_word_to_io_area(POLY_SYS_network, PolyWord::FromCodePtr(codeAddr)); MAKE_IO_CALL_SEQUENCE(POLY_SYS_os_specific, codeAddr); add_word_to_io_area(POLY_SYS_os_specific, PolyWord::FromCodePtr(codeAddr)); MAKE_IO_CALL_SEQUENCE(POLY_SYS_signal_handler, codeAddr); add_word_to_io_area(POLY_SYS_signal_handler, PolyWord::FromCodePtr(codeAddr)); // Entries for special cases. These are generally, but not always, called from // compiled code. MAKE_EXTRA_CALL_SEQUENCE(RETURN_HEAP_OVERFLOW, heapOverflow); MAKE_EXTRA_CALL_SEQUENCE(RETURN_STACK_OVERFLOW, stackOverflow); MAKE_EXTRA_CALL_SEQUENCE(RETURN_STACK_OVERFLOWEX, stackOverflowEx); MAKE_EXTRA_CALL_SEQUENCE(RETURN_RAISE_DIV, raiseDiv); MAKE_EXTRA_CALL_SEQUENCE(RETURN_ARB_EMULATION, arbEmulation); } // Build an ML code segment on the heap to hold a copy of a piece of code Handle PowerPCDependent::BuildCodeSegment(TaskData *taskData, const byte *code, unsigned codeWords, char functionName) { POLYUNSIGNED words = codeWords + 6; Handle codeHandle = alloc_and_save(taskData, words, F_CODE_OBJ); byte *cp = codeHandle->Word().AsCodePtr(); memcpy(cp, code, codeWords*sizeof(PolyWord)); codeHandle->WordP()->Set(codeWords++, PolyWord::FromUnsigned(0)); // Marker word codeHandle->WordP()->Set(codeWords, PolyWord::FromUnsigned(codeWords*sizeof(PolyWord))); // Bytes to the start codeWords++; codeHandle->WordP()->Set(codeWords++, PolyWord::FromUnsigned(0)); // Profile count codeHandle->WordP()->Set(codeWords++, TAGGED(functionName)); // Name of function - single character codeHandle->WordP()->Set(codeWords++, TAGGED(0)); // Register set codeHandle->WordP()->Set(codeWords++, PolyWord::FromUnsigned(2)); // Number of constants FlushInstructionCache(cp, codeWords*sizeof(PolyWord)); return codeHandle; } // We need the kill-self code in a little function. Handle PowerPCDependent::BuildKillSelfCode(TaskData *taskData) { byte *codeAddr; MAKE_IO_CALL_SEQUENCE(POLY_SYS_kill_self, codeAddr); return BuildCodeSegment(taskData, codeAddr, MAKE_CALL_SEQUENCE_WORDS, 'K'); } void PowerPCDependent::SetException(TaskData *taskData, poly_exn *exc) /* Set up the stack of a process to raise an exception. */ { // This IO entry has changed from being the code to being a closure // like all the other entries. taskData->stack->PS_R24 = (PolyObject*)IoEntry(POLY_SYS_raisex); taskData->stack->p_pc = PC_RETRY_SPECIAL; taskData->stack->PS_R3 = (PolyWord)exc; /* r3 to exception data */ } void PowerPCDependent::ResetSignals(void) { /* restore default signal handling in child process after a "fork". */ signal(SIGFPE, SIG_DFL); #ifdef SIGEMT signal(SIGEMT, SIG_DFL); #endif signal(SIGTRAP, SIG_DFL); signal(SIGILL, SIG_DFL); /* "just in case" */ signal(SIGBUS, SIG_DFL); signal(SIGSEGV, SIG_DFL); } // Call a piece of compiled code. Note: this doesn't come via CallIO1 // so StartIOCall has not been called. void PowerPCDependent::CallCodeTupled(TaskData *taskData) { // The eventual return address is in the link register - leave it there // but call StartIOCall to make sure it's tagged before any possible G.C. StartIOCall(taskData); PolyObject *argTuple = taskData->stack->PS_R3.AsObjPtr(); Handle closure = taskData->saveVec.push(argTuple->Get(0)); Handle argvec = taskData->saveVec.push(argTuple->Get(1)); if (! IS_INT(DEREFWORD(argvec))) // May be nil if there are no args. { PolyObject *argv = DEREFHANDLE(argvec); POLYUNSIGNED argCount = argv->Length(); if (argCount > 4) { // Check we have space for the arguments. This may result in a GC which // in turn may throw a C++ exception. try { CheckAndGrowStack(taskData, taskData->stack->p_sp - (argCount - 4)); } catch (IOException exc) { ASSERT(exc.m_reason == EXC_EXCEPTION); // This should be the only one return; // Will have been set up to raise an exception. } } // First argument is in r3 taskData->stack->PS_R3 = argv->Get(0); // Second arg, if there is one, goes into r4 etc. if (argCount > 1) taskData->stack->PS_R4 = argv->Get(1); if (argCount > 2) taskData->stack->PS_R5 = argv->Get(2); if (argCount > 3) taskData->stack->PS_R6 = argv->Get(3); // Remaining args go on the stack. for (POLYUNSIGNED i = 4; i < argCount; i++) *(--taskData->stack->p_sp) = argv->Get(i+2); } // The closure goes into the closure reg. taskData->stack->PS_R24 = DEREFWORD(closure); // First word of closure is entry point. taskData->stack->p_pc = DEREFHANDLE(closure)->Get(0).AsCodePtr(); // pc points to the start of the code } // Set up a special handler that will trace any uncaught exception within a function. void PowerPCDependent::SetExceptionTrace(TaskData *taskData) { // Save the return address for when we've called the function. *(--taskData->stack->p_sp) = PolyWord::FromUnsigned(taskData->stack->PS_LR.AsUnsigned() | RETURNOFFSET); *(--taskData->stack->p_sp) = PolyWord::FromStackAddr(taskData->stack->p_hr); // Save previous handler. *(--taskData->stack->p_sp) = TAGGED(0); // Push special handler address. *(--taskData->stack->p_sp) = TAGGED(0); // Push "catch all" exception id. taskData->stack->p_hr = taskData->stack->p_sp; // This is the new handler. Handle fun = taskData->saveVec.push(taskData->stack->PS_R3); // Argument - function to call and trace taskData->stack->PS_R24 = DEREFWORD(fun); // r24 must contain the closure taskData->stack->p_pc = DEREFHANDLE(fun)->Get(0).AsCodePtr(); // pc points to the start of the code // We have to use a special entry here that can be recognised by the exception // unwinding code because we want to know the stack pointer that is in effect // at the time the exception is raised. If we simply put a normal handler in here // that handler would be called after the stack was unwound. byte *codeAddr; #ifdef MACOSX __asm__ __volatile__ ( "bl 1f \n" "lwz r0,12(r27)\n" // Restore old return address "lwz r31,8(r27)\n" // Restore old handler "mtlr r0\n" "addi r27,r27,16\n" // Pop stack "blr\n" // Return to exception_trace's caller "1: mflr r0\n" "stw r0,%0" :"=m"(codeAddr) : : "lr","r0" ); #else __asm__ __volatile__ ( "bl 1f; " "lwz 0,12(27); " // Restore old return address "lwz 31,8(27); " // Restore old handler "mtlr 0; " "addi 27,27,16; " // Pop stack "blr; " // Return to exception_trace's caller "1: mflr 0; " "stw 0,%0" :"=m"(codeAddr) : :"lr","0" ); #endif Handle retCode = BuildCodeSegment(taskData, codeAddr, 5 /* Code is 5 words */, 'R'); // Set the link register so that if the traced function returns normally (i.e. without // raising an exception) it will enter the "return" code which will remove this handler. taskData->stack->PS_LR = PolyWord::FromUnsigned(retCode->Word().AsUnsigned() | RETURNOFFSET); taskData->stack->PS_R3 = TAGGED(0); // Give the function we're calling a unit argument. } void PowerPCDependent::ScanConstantsWithinCode(PolyObject *addr, PolyObject */*old*/, POLYUNSIGNED length, ScanAddress *process) { PolyWord *pt = (PolyWord*)addr; PolyWord *end; POLYUNSIGNED unused; /* Find the end of the code (before the constants). */ addr->GetConstSegmentForCode(length, end, unused); /* Find the end of the code (before the constants). */ end -= 3; assert(end->AsUnsigned() == 0); /* This should be the marker word. */ while (pt != end) { POLYUNSIGNED instr = (*pt).AsUnsigned(); pt++; if ((instr & 0xfc1f0000) == 0x3c000000) /* addis rd,r0. */ { POLYUNSIGNED reg = (instr >> 21) & 31; /* Ignore the unchecked registers. */ if (reg == 11 || reg == 12) continue; /* Next must be an ADD or OR instruction. */ POLYUNSIGNED instr2 = (*pt).AsUnsigned(); assert((instr2 & 0xfc000000) == 0x38000000 || (instr2 & 0xfc000000) == 0x60000000); bool isSigned = (instr2 & 0xfc000000) == 0x38000000; /* Add instruction. */ process->ScanConstant((byte*)(pt-1), isSigned ? PROCESS_RELOC_PPCDUAL16SIGNED : PROCESS_RELOC_PPCDUAL16UNSIGNED); pt++; } } } /* Store a constant at a specific address in the code. This is used by the code generator. It needs to be built into the RTS because we have to split the value in order to store it into two instructions. Separately the two values might well be invalid addresses. */ void PowerPCDependent::SetCodeConstant(TaskData *taskData, Handle/*data*/, Handle constant, Handle offseth, Handle base) { /* The offset is a byte count. */ POLYUNSIGNED offset = get_C_ulong(taskData, DEREFWORD(offseth)); PolyWord *pointer = DEREFHANDLE(base)->Offset(offset/sizeof(PolyWord)); POLYUNSIGNED c = DEREFWORD(constant).AsUnsigned(); // N.B. This may well really be an address. unsigned hi = c >> 16, lo = c & 0xffff; POLYUNSIGNED instr1 = pointer[0].AsUnsigned(); POLYUNSIGNED instr2 = pointer[1].AsUnsigned(); bool isSigned = (instr2 & 0xfc000000) == 0x38000000; /* Add instruction. */ if (isSigned && (lo & 0x8000)) hi++; /* Adjust the for sign extension */ assert((offset & 3) == 0); // The first word must be addis rd,r0,0. assert((instr1 & 0xfc1fffff) == 0x3c000000); // and the next must be addi rd,rd,1 or ori rd,rd,1 assert((instr2 & 0xfc00ffff) == 0x38000001 || (instr2 & 0xfc00ffff) == 0x60000001); pointer[0] = PolyWord::FromUnsigned(pointer[0].AsUnsigned() | hi); pointer[1] = PolyWord::FromUnsigned((pointer[1].AsUnsigned() & 0xffff0000) | lo); } // We have assembly code versions of atomic increment and decrement and it's // important that if we use the same method of locking a mutex whether it's // done in the assembly code or the RTS. // Increment the value contained in the first word of the mutex. Handle PowerPCDependent::AtomicIncrement(TaskData *taskData, Handle mutexp) { PolyObject *p = DEREFHANDLE(mutexp); POLYUNSIGNED result; __asm__ __volatile__ ( "1: lwarx %0,0,%1\n" // Load value at 0(r3) with reservation. "addi %0,%0,2\n" // 2 is TAGGED(1)-TAG "stwcx. %0,0,%1\n" // Store the updated value unless someone else did. "bne- 1b\n" // Repeat if we couldn't do the store :"=&r"(result) // %0 - Output - updated value. Must not be same as input reg. :"r"(p) // %1 - Input - address of mutex : "cc", "memory" // Modifies cc and memory ); return taskData->saveVec.push(PolyWord::FromUnsigned(result)); } // Decrement the value contained in the first word of the mutex. Handle PowerPCDependent::AtomicDecrement(TaskData *taskData, Handle mutexp) { PolyObject *p = DEREFHANDLE(mutexp); POLYUNSIGNED result; __asm__ __volatile__ ( "1: lwarx %0,0,%1\n" // Load value at 0(r3) with reservation. "subi %0,%0,2\n" // 2 is TAGGED(1)-TAG "stwcx. %0,0,%1\n" // Store the updated value unless someone else did. "bne- 1b\n" // Repeat if we couldn't do the store :"=&r"(result) // %0 - Output - updated value. Must not be same as input reg. :"r"(p) // %1 - Input - address of mutex : "cc", "memory" // Modifies cc and memory ); return taskData->saveVec.push(PolyWord::FromUnsigned(result)); } // On the PPC it's important to flush the cache. The PPC has separate data and instruction // caches and there is no internal synchronisation. This actually does two things: it // flushes the data cache to memory and also clears the instruction prefetch cache. void PowerPCDependent::FlushInstructionCache(void *p, POLYUNSIGNED bytes) { #if (1) byte *q = (byte*)p; // Apparently some processors have 16 byte cache lines and others 32. #define CACHE_LINE_SIZE 16 while (bytes > 0) { // Flush the data cache __asm__ __volatile("dcbf 0,%0" :: "r"(q)); __asm__ __volatile("sync"); __asm__ __volatile("icbi 0,%0" :: "r"(q)); q += CACHE_LINE_SIZE; if (bytes <= CACHE_LINE_SIZE) break; bytes -= CACHE_LINE_SIZE; } __asm__ __volatile("sync"); __asm__ __volatile("isync"); #else MD_flush_instruction_cache(p, bytes); #endif } extern "C" int registerMaskVector[]; int PowerPCDependent::GetIOFunctionRegisterMask(int ioCall) { return registerMaskVector[ioCall]; } static PowerPCDependent ppcDependent; MachineDependent *machineDependent = &ppcDependent; polyml.5.2.1/libpolyml/process_env.cpp0000644000175000017500000005120410761260703017035 0ustar daviddavid/* Title: Process environment. Copyright (c) 2000-8 David C. J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifdef WIN32 #include "winconfig.h" #else #include "config.h" #endif #ifdef HAVE_STDIO_H #include #endif #ifdef HAVE_ERRNO_H #include #endif #ifdef HAVE_STRING_H #include #endif #ifdef HAVE_STDLIB_H #include #endif #ifdef HAVE_SYS_PARAM_H #include #endif #ifdef HAVE_UNISTD_H #include #endif #ifdef HAVE_SYS_WAIT_H #include #endif #if (defined(__CYGWIN__) || defined(WINDOWS_PC)) #include #endif // Include this next before errors.h since in WinCE at least the winsock errors are defined there. #ifdef WINDOWS_PC #ifdef USEWINSOCK2 #include #else #include #endif #endif #include "globals.h" #include "sys.h" #include "run_time.h" #include "process_env.h" #include "arb.h" #include "mpoly.h" #include "errors.h" #include "gc.h" #include "scanaddrs.h" #include "polystring.h" #include "save_vec.h" #include "process_env.h" #include "rts_module.h" #include "machine_dep.h" #include "processes.h" #include "locking.h" #include "poly_specific.h" // For the functions that have been moved. #define SAVE(x) mdTaskData->saveVec.push(x) #define ALLOC(n) alloc_and_save(mdTaskData, n) #if(!defined(MAXPATHLEN) && defined(MAX_PATH)) #define MAXPATHLEN MAX_PATH #endif #ifdef WINDOWS_PC #define ISPATHSEPARATOR(c) ((c) == '\\' || (c) == '/') #define DEFAULTSEPARATOR "\\" #else #define ISPATHSEPARATOR(c) ((c) == '/') #define DEFAULTSEPARATOR "/" #endif // "environ" is declared in the headers on some systems but not all. // Oddly, declaring it within process_env_dispatch_c causes problems // on mingw where "environ" is actually a function. extern char **environ; /* Functions registered with atExit are added to this list. */ static PolyWord at_exit_list = TAGGED(0); /* Once "exit" is called this flag is set and no further calls to atExit are allowed. */ static bool exiting = false; static PLock atExitLock; // Thread lock for above. Handle process_env_dispatch_c(TaskData *mdTaskData, Handle args, Handle code) { int c = get_C_long(mdTaskData, DEREFWORDHANDLE(code)); switch (c) { case 0: /* Return the program name. */ return SAVE(C_string_to_Poly(mdTaskData, userOptions.programName)); case 1: /* Return the argument list. */ return convert_string_list(mdTaskData, userOptions.user_arg_count, userOptions.user_arg_strings); case 14: /* Return a string from the environment. */ { char buff[MAXPATHLEN], *res; /* Get the string. */ int length = Poly_string_to_C(DEREFWORDHANDLE(args), buff, sizeof(buff)); if (length >= (int)sizeof(buff)) raise_syscall(mdTaskData, "Not Found", 0); res = getenv(buff); if (res == NULL) raise_syscall(mdTaskData, "Not Found", 0); else return SAVE(C_string_to_Poly(mdTaskData, res)); } case 21: /* Return the whole environment. */ { /* Count the environment strings */ int env_count = 0; while (environ[env_count] != NULL) env_count++; return convert_string_list(mdTaskData, env_count, environ); } case 15: /* Return the success value. */ return Make_arbitrary_precision(mdTaskData, EXIT_SUCCESS); case 16: /* Return a failure value. */ return Make_arbitrary_precision(mdTaskData, EXIT_FAILURE); case 17: /* Run command. */ { char buff[MAXPATHLEN]; /* Get the string. */ int res = -1; int length = Poly_string_to_C(DEREFWORD(args), buff, sizeof(buff)); if (length >= (int)sizeof(buff)) raise_syscall(mdTaskData, "Command too long", ENAMETOOLONG); #if (defined(WINDOWS_PC)) // Windows. char *argv[4]; argv[0] = getenv("COMSPEC"); // Default CLI. if (argv[0] == 0) { if (_osver & 0x8000) argv[0] = "command.com"; // Win 95 etc. else argv[0] = "cmd.exe"; // Win NT etc. } argv[1] = (char*)"/c"; argv[2] = buff; argv[3] = NULL; // If _P_NOWAIT is given the result is the process handle. // spawnvp does any necessary path searching if argv[0] // does not contain a full path. int pid = spawnvp(_P_NOWAIT, argv[0], argv); if (pid == -1) raise_syscall(mdTaskData, "Function system failed", errno); #else // Cygwin and Unix char *argv[4]; argv[0] = (char*)"sh"; argv[1] = (char*)"-c"; argv[2] = buff; argv[3] = NULL; #if (defined(__CYGWIN__)) // vfork adds a significant overhead. spawnvp provides a wrapper // for CreateProcess that avoids this. int pid = spawnvp(_P_NOWAIT, "/bin/sh", argv); if (pid < 0) raise_syscall(mdTaskData, "Function system failed", errno); #else // We need to break this down so that we can unblock signals in the // child process. // The Unix "system" function seems to set SIGINT and SIGQUIT to // SIG_IGN in the parent so that the wait will not be interrupted. // That may make sense in a single-threaded application but is // that right here? int pid = vfork(); if (pid == -1) raise_syscall(mdTaskData, "Function system failed", errno); else if (pid == 0) { // In child sigset_t sigset; sigemptyset(&sigset); sigprocmask(SIG_SETMASK, &sigset, 0); // Reset other signals? char *argv[4]; argv[0] = (char*)"sh"; argv[1] = (char*)"-c"; argv[2] = buff; argv[3] = NULL; execve("/bin/sh", argv, environ); _exit(1); } #endif #endif while (true) { try { // Test to see if the child has returned. #ifdef WINDOWS_PC switch (WaitForSingleObject((HANDLE)pid, 0)) { case WAIT_OBJECT_0: { DWORD result; BOOL fResult = GetExitCodeProcess((HANDLE)pid, &result); if (! fResult) raise_syscall(mdTaskData, "Function system failed", -(int)GetLastError()); CloseHandle((HANDLE)pid); return Make_unsigned(mdTaskData, result); } case WAIT_FAILED: raise_syscall(mdTaskData, "Function system failed", -(int)GetLastError()); } #else int wRes = waitpid(pid, &res, WNOHANG); if (wRes > 0) break; else if (wRes < 0) { raise_syscall(mdTaskData, "Function system failed", errno); } #endif processes->ThreadPause(mdTaskData); } catch (...) { // Either IOException or KillException. // We're abandoning the wait. This will leave // a zombie in Unix. #ifdef WINDOWS_PC CloseHandle((HANDLE)pid); #endif throw; } } return Make_arbitrary_precision(mdTaskData, res); } case 18: /* Register function to run at exit. */ { PLocker locker(&atExitLock); if (! exiting) { PolyObject *cell = alloc(mdTaskData, 2); cell->Set(0, at_exit_list); cell->Set(1, DEREFWORD(args)); at_exit_list = cell; } return Make_arbitrary_precision(mdTaskData, 0); } case 19: /* Return the next function in the atExit list and set the "exiting" flag to true. */ { PLocker locker(&atExitLock); Handle res; exiting = true; /* Ignore further calls to atExit. */ if (at_exit_list == TAGGED(0)) raise_syscall(mdTaskData, "List is empty", 0); PolyObject *cell = at_exit_list.AsObjPtr(); res = SAVE(cell->Get(1)); at_exit_list = cell->Get(0); return res; } case 20: /* Terminate without running the atExit list or flushing buffers. */ { /* I don't like terminating without some sort of clean up but we'll do it this way for the moment. */ int i = get_C_long(mdTaskData, DEREFWORDHANDLE(args)); _exit(i); } /************ Error codes **************/ case 2: /* Get the name of a numeric error message. */ { char buff[40]; int e = get_C_long(mdTaskData, DEREFWORDHANDLE(args)); Handle res; unsigned i; /* First look to see if we have the name in the error table. They should generally all be there. */ for (i = 0; i < sizeof(errortable)/sizeof(errortable[0]); i++) if (errortable[i].errorNum == e) return SAVE(C_string_to_Poly(mdTaskData, errortable[i].errorString)); /* We get here if there's an error which isn't in the table. */ #ifdef WINDOWS_PC /* In the Windows version we may have both errno values and also GetLastError values. We convert the latter into negative values before returning them. */ if (e < 0) { sprintf(buff, "WINERROR%0d", -e); res = SAVE(C_string_to_Poly(mdTaskData, buff)); return res; } else #endif { sprintf(buff, "ERROR%0d", e); res = SAVE(C_string_to_Poly(mdTaskData, buff)); } return res; } case 3: /* Get the explanatory message for an error. */ { int e = get_C_long(mdTaskData, DEREFWORDHANDLE(args)); Handle res; #ifdef WINDOWS_PC /* In the Windows version we may have both errno values and also GetLastError values. We convert the latter into negative values before returning them. */ if (e < 0) { LPTSTR lpMsg = NULL; TCHAR *p; if (FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, (DWORD)(-e), 0, (LPTSTR)&lpMsg, 1, NULL) > 0) { /* The message is returned with CRLF at the end. Remove them. */ for (p = lpMsg; *p != '\0' && *p != '\n' && *p != '\r'; p++); *p = '\0'; res = SAVE(C_string_to_Poly(mdTaskData, lpMsg)); LocalFree(lpMsg); return res; } } #endif res = SAVE(C_string_to_Poly(mdTaskData, strerror(e))); return res; } case 4: /* Try to convert an error string to an error number. */ { char buff[40]; /* Get the string. */ Poly_string_to_C(DEREFWORD(args), buff, sizeof(buff)); /* Look the string up in the table. */ for (unsigned i = 0; i < sizeof(errortable)/sizeof(errortable[0]); i++) if (strcmp(buff, errortable[i].errorString) == 0) return Make_arbitrary_precision(mdTaskData, errortable[i].errorNum); /* If we don't find it then it may have been a constructed error name. */ if (strncmp(buff, "ERROR", 5) == 0) { int i = atoi(buff+5); if (i > 0) return Make_arbitrary_precision(mdTaskData, i); } #ifdef WINDOWS_PC if (strncmp(buff, "WINERROR", 8) == 0) { int i = atoi(buff+8); if (i > 0) return Make_arbitrary_precision(mdTaskData, -i); } #endif return Make_arbitrary_precision(mdTaskData, 0); } /************ Directory/file paths **************/ case 5: /* Return the string representing the current arc. */ return SAVE(C_string_to_Poly(mdTaskData, ".")); case 6: /* Return the string representing the parent arc. */ /* I don't know that this exists in MacOS. */ return SAVE(C_string_to_Poly(mdTaskData, "..")); case 7: /* Return the string representing the directory separator. */ return SAVE(C_string_to_Poly(mdTaskData, DEFAULTSEPARATOR)); case 8: /* Test the character to see if it matches a separator. */ { int e = get_C_long(mdTaskData, DEREFWORDHANDLE(args)); if (ISPATHSEPARATOR(e)) return Make_arbitrary_precision(mdTaskData, 1); else return Make_arbitrary_precision(mdTaskData, 0); } case 9: /* Are names case-sensitive? */ #ifdef WINDOWS_PC /* Windows - no. */ return Make_arbitrary_precision(mdTaskData, 0); #else /* Unix - yes. */ return Make_arbitrary_precision(mdTaskData, 1); #endif case 10: /* Are empty arcs redundant? */ /* Unix and Windows - yes. */ return Make_arbitrary_precision(mdTaskData, 1); case 11: /* Match the volume name part of a path. */ { const char *volName = NULL; int isAbs = 0; int toRemove = 0; PolyWord path = DEREFHANDLE(args); /* This examines the start of a string and determines how much of it represents the volume name and returns the number of characters to remove, the volume name and whether it is absolute. One would assume that if there is a volume name then it is absolute but there is a peculiar form in Windows/DOS (e.g. A:b\c) which means the file b\c relative to the currently selected directory on the volume A. */ #ifdef WINDOWS_PC char buff[MAXPATHLEN]; int length; length = Poly_string_to_C(path, buff, MAXPATHLEN); /* Ignore the case where the whole path is too long. */ if (length >= 2 && buff[1] == ':') { /* Volume name? */ if (length >= 3 && ISPATHSEPARATOR(buff[2])) { /* Absolute path. */ toRemove = 3; isAbs = 1; } else { toRemove = 2; isAbs = 0; } volName = buff; buff[2] = '\0'; } else if (length > 3 && ISPATHSEPARATOR(buff[0]) && ISPATHSEPARATOR(buff[1]) && ! ISPATHSEPARATOR(buff[2])) { /* UNC name? */ int i; /* Skip the server name. */ for (i = 3; buff[i] != 0 && !ISPATHSEPARATOR(buff[i]); i++); if (ISPATHSEPARATOR(buff[i])) { i++; /* Skip the share name. */ for (; buff[i] != 0 && !ISPATHSEPARATOR(buff[i]); i++); toRemove = i; if (buff[i] != 0) toRemove++; isAbs = 1; volName = buff; buff[i] = '\0'; } } else if (ISPATHSEPARATOR(buff[0])) /* \a\b strictly speaking is relative to the current drive. It's much easier to treat it as absolute. */ { toRemove = 1; isAbs = 1; volName = ""; } #else /* Unix - much simpler. */ char toTest = 0; if (IS_INT(path)) toTest = UNTAGGED(path); else { PolyStringObject * ps = (PolyStringObject *)path.AsObjPtr(); if (ps->length > 1) toTest = ps->chars[0]; } if (ISPATHSEPARATOR(toTest)) { toRemove = 1; isAbs = 1; volName = ""; } #endif /* Construct the result. */ { Handle sVol = SAVE(C_string_to_Poly(mdTaskData, volName)); Handle sRes = ALLOC(3); DEREFWORDHANDLE(sRes)->Set(0, TAGGED(toRemove)); DEREFHANDLE(sRes)->Set(1, DEREFWORDHANDLE(sVol)); DEREFWORDHANDLE(sRes)->Set(2, TAGGED(isAbs)); return sRes; } } case 12: /* Construct a name from a volume and whether it is absolute. */ { unsigned isAbs = get_C_ulong(mdTaskData, DEREFHANDLE(args)->Get(1)); PolyWord volName = DEREFHANDLE(args)->Get(0); /* In Unix the volume name will always be empty. */ if (isAbs == 0) return SAVE(volName); /* N.B. The arguments to strconcatc are in reverse. */ else return strconcatc(mdTaskData, SAVE(C_string_to_Poly(mdTaskData, DEFAULTSEPARATOR)), SAVE(volName)); } case 13: /* Is the string a valid file name? */ { /* Should we check for special names such as aux, con, prn ?? */ PolyWord volName = DEREFWORD(args); if (IS_INT(volName)) { char ch = (char)UNTAGGED(volName); #ifdef WINDOWS_PC if (ch == '<' || ch == '>' || ch == '|' || ch == '"' || ch < ' ') #else /* Basically, everything is allowed in Unix except NULL. */ if (ch == '\0') #endif return Make_arbitrary_precision(mdTaskData, 0); } else { PolyStringObject * volume = (PolyStringObject *)(volName.AsObjPtr()); for (POLYUNSIGNED i = 0; i < volume->length; i++) { char ch = volume->chars[i]; #ifdef WINDOWS_PC if (ch == '<' || ch == '>' || ch == '|' || ch == '"' || ch < ' ') #else if (ch == '\0') #endif return Make_arbitrary_precision(mdTaskData, 0); } } return Make_arbitrary_precision(mdTaskData, 1); } // A group of calls have now been moved to poly_specific. // This entry is returned for backwards compatibility. case 100: case 101: case 102: case 103: case 104: case 105: return poly_dispatch_c(mdTaskData, args, code); default: { char msg[100]; sprintf(msg, "Unknown environment function: %d", c); raise_exception_string(mdTaskData, EXC_Fail, msg); return 0; } } } /* Terminate normally with a result code. */ Handle finishc(TaskData *taskData, Handle h) { int i = get_C_long(taskData, DEREFWORDHANDLE(h)); // Cause the other threads to exit. processes->Exit(i); // Exit this thread processes->ThreadExit(taskData); // Doesn't return. // Push a dummy result to keep lint happy return taskData->saveVec.push(TAGGED(0)); } class ProcessEnvModule: public RtsModule { public: void GarbageCollect(ScanAddress *process); }; // Declare this. It will be automatically added to the table. static ProcessEnvModule processModule; void ProcessEnvModule::GarbageCollect(ScanAddress *process) /* Ensures that all the objects are retained and their addresses updated. */ { if (at_exit_list.IsDataPtr()) { PolyObject *obj = at_exit_list.AsObjPtr(); process->ScanRuntimeAddress(&obj, ScanAddress::STRENGTH_STRONG); at_exit_list = obj; } } polyml.5.2.1/libpolyml/process_env.h0000644000175000017500000000211610602661056016500 0ustar daviddavid/* Title: Process environment. Copyright (c) 2000 David C. J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef PROCESS_H #define PROCESS_H class SaveVecEntry; typedef SaveVecEntry *Handle; class TaskData; extern Handle process_env_dispatch_c(TaskData *mdTaskData, Handle args, Handle code); extern Handle finishc(TaskData *mdTaskData, Handle h); #endif polyml.5.2.1/libpolyml/processes.cpp0000644000175000017500000017651411072665213016532 0ustar daviddavid/* Title: Thread functions Author: David C.J. Matthews Copyright (c) 2007,2008 David C.J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifdef WIN32 #include "winconfig.h" #else #include "config.h" #endif #ifdef HAVE_STDIO_H #include #endif #ifdef HAVE_ERRNO_H #include #endif #ifdef HAVE_STDLIB_H #include #endif #ifdef HAVE_STRING_H #include #endif #ifdef HAVE_LIMITS_H #include #endif #ifdef HAVE_ASSERT_H #include #define ASSERT(x) assert(x) #else #define ASSERT(x) #endif #ifdef HAVE_PROCESS_H #include #endif #ifdef HAVE_SYS_TYPES_H #include #endif #ifdef HAVE_SYS_STAT_H #include #endif #ifdef HAVE_SYS_TIME_H #include #endif #ifdef HAVE_UNISTD_H #include // Want unistd for _SC_NPROCESSORS_ONLN at least #endif #ifdef HAVE_SYS_SELECT_H #include #endif #ifdef HAVE_WINDOWS_H #include #endif #if (defined(HAVE_LIBPTHREAD) && defined(HAVE_PTHREAD_H)) #define HAVE_PTHREAD 1 #include #endif #ifdef HAVE_SYS_SYSCTL_H // Used determine number of processors in Mac OS X. #include #endif /************************************************************************ * * Include runtime headers * ************************************************************************/ #include "globals.h" #include "gc.h" #include "mpoly.h" #include "arb.h" #include "machine_dep.h" #include "diagnostics.h" #include "processes.h" #include "run_time.h" #include "sys.h" #include "sighandler.h" #include "scanaddrs.h" #include "save_vec.h" #include "rts_module.h" #include "noreturn.h" #include "memmgr.h" #include "locking.h" #include "profiling.h" #include "sharedata.h" #include "exporter.h" #ifdef WINDOWS_PC #include "Console.h" #endif #define SAVE(x) taskData->saveVec.push(x) #define SIZEOF(x) (sizeof(x)/sizeof(PolyWord)) // These values are stored in the second word of thread id object as // a tagged integer. They may be set and read by the thread in the ML // code. #define PFLAG_BROADCAST 1 // If set, accepts a broadcast // How to handle interrrupts #define PFLAG_IGNORE 0 // Ignore interrupts completely #define PFLAG_SYNCH 2 // Handle synchronously #define PFLAG_ASYNCH 4 // Handle asynchronously #define PFLAG_ASYNCH_ONCE 6 // First handle asynchronously then switch to synch. #define PFLAG_INTMASK 6 // Mask of the above bits // Other threads may make requests to a thread. typedef enum { kRequestNone = 0, // Increasing severity kRequestInterrupt = 1, kRequestKill = 2 } ThreadRequests; class ProcessTaskData: public TaskData { public: ProcessTaskData(); ~ProcessTaskData(); virtual void Lock(void) {} virtual void Unlock(void) {} virtual void GarbageCollect(ScanAddress *process); // If a thread has to block it will block on this. PCondVar threadLock; // External requests made are stored here until they // can be actioned. ThreadRequests requests; // Pointer to the mutex when blocked. Set to NULL when it doesn't apply. PolyObject *blockMutex; // This is set to false when a thread blocks or enters foreign code, // While it is true the thread can manipulate ML memory so no other // thread can garbage collect. bool inMLHeap; // In Linux, at least, we need to run a separate timer in each thread bool runningProfileTimer; #ifdef HAVE_WINDOWS_H LONGLONG lastCPUTime; // Used for profiling #endif #ifdef HAVE_PTHREAD pthread_t pthreadId; #endif #ifdef HAVE_WINDOWS_H HANDLE threadHandle; #endif }; class Processes: public ProcessExternal, public RtsModule { public: Processes(); virtual void Init(void); virtual void Uninit(void); virtual void Reinit(void); void GarbageCollect(ScanAddress *process); public: void BroadcastInterrupt(void); void BeginRootThread(PolyObject *rootFunction); void Exit(int n); // Request all ML threads to exit and set the process result code. // Called when a thread has completed - doesn't return. virtual NORETURNFN(void ThreadExit(TaskData *taskData)); void BlockAndRestart(TaskData *taskData, int fd, bool posixInterruptable, int ioCall); // Called when a thread may block. Returns some time later when perhaps // the input is available. virtual void ThreadPauseForIO(TaskData *taskData, int fd); void SwitchSubShells(void); // Return the task data for the current thread. virtual TaskData *GetTaskDataForThread(void); // ForkFromRTS. Creates a new thread from within the RTS. virtual bool ForkFromRTS(TaskData *taskData, Handle proc, Handle arg); // Create a new thread. The "args" argument is only used for threads // created in the RTS by the signal handler. Handle ForkThread(ProcessTaskData *taskData, Handle threadFunction, Handle args, PolyWord flags); // Process general RTS requests from ML. Handle ThreadDispatch(TaskData *taskData, Handle args, Handle code); virtual void ThreadUseMLMemory(TaskData *taskData); virtual void ThreadReleaseMLMemory(TaskData *taskData); // If the schedule lock is already held we need to use these functions. void ThreadUseMLMemoryWithSchedLock(TaskData *taskData); void ThreadReleaseMLMemoryWithSchedLock(TaskData *taskData); // Requests from the threads for actions that need to be performed by // the root thread. Make the request and wait until it has completed. virtual void MakeRootRequest(TaskData *taskData, MainThreadRequest *request); // Deal with any interrupt or kill requests. virtual bool ProcessAsynchRequests(TaskData *taskData); // Process an interrupt request synchronously. virtual void TestSynchronousRequests(TaskData *taskData); // Set a thread to be interrupted or killed. Wakes up the // thread if necessary. MUST be called with taskArrayLock held. void MakeRequest(ProcessTaskData *p, ThreadRequests request); // Profiling control. virtual void StartProfiling(void); virtual void StopProfiling(void); #ifdef HAVE_WINDOWS_H // Windows: Called every millisecond while profiling is on. void ProfileInterrupt(void); #else // Unix: Start a profile timer for a thread. void StartProfilingTimer(void); #endif // Memory allocation. Tries to allocate space. If the allocation succeeds it // may update the allocation values in the taskData object. If the heap is exhausted // it may set this thread (or other threads) to raise an exception. PolyWord *FindAllocationSpace(TaskData *taskData, POLYUNSIGNED words, bool alwaysInSeg); // Find a task that matches the specified identifier and returns // it if it exists. MUST be called with taskArrayLock held. ProcessTaskData *TaskForIdentifier(Handle taskId); // Signal handling support. The ML signal handler thread blocks until it is // woken up by the signal detection thread. virtual bool WaitForSignal(TaskData *taskData, PLock *sigLock); virtual void SignalArrived(void); virtual void SetSingleThreaded(void) { singleThreaded = true; } // Generally, the system runs with multiple threads. After a // fork, though, there is only one thread. bool singleThreaded; // Each thread has an entry in this array. ProcessTaskData **taskArray; unsigned taskArraySize; // Current size of the array. /* schedLock: This lock must be held when making scheduling decisions. It must also be held before adding items to taskArray, removing them or scanning the array. It must also be held before deleting a TaskData object or using it in a thread other than the "owner" */ PLock schedLock; #ifdef HAVE_PTHREAD pthread_key_t tlsId; #elif defined(HAVE_WINDOWS_H) DWORD tlsId; #endif #ifdef HAVE_WINDOWS_H HANDLE hWakeupEvent; // Pulsed to wake up any threads waiting for IO. #endif // We make an exception packet for Interrupt and store it here. // This exception can be raised if we run out of store so we need to // make sure we have the packet before we do. poly_exn *interrupt_exn; /* initialThreadWait: The initial thread waits on this for wake-ups from the ML threads requesting actions such as GC or close-down. */ PCondVar initialThreadWait; // A requesting thread sets this to indicate the request. This value // is only reset once the request has been satisfied. MainThreadRequest *threadRequest; PCondVar mlThreadWait; // All the threads block on here until the request has completed. int exitResult; bool exitRequest; // Shutdown locking. void CrowBarFn(void); PLock shutdownLock; PCondVar crowbarLock, crowbarStopped; bool crowbarRunning; #ifdef HAVE_WINDOWS_H // Used in profiling HANDLE hStopEvent; /* Signalled to stop all threads. */ HANDLE profilingHd; HANDLE mainThreadHandle; // The same as hMainThread except on Cygwin LONGLONG lastCPUTime; // CPU used by main thread. #endif ProcessTaskData *sigTask; // Pointer to current signal task. }; // Global process data. static Processes processesModule; ProcessExternal *processes = &processesModule; Processes::Processes(): singleThreaded(false), taskArray(0), taskArraySize(0), interrupt_exn(0), threadRequest(0), exitResult(0), exitRequest(false), crowbarRunning(false), sigTask(0) { #ifdef HAVE_WINDOWS_H hWakeupEvent = NULL; hStopEvent = NULL; profilingHd = NULL; lastCPUTime = 0; mainThreadHandle = NULL; #endif } // Get the attribute flags. static POLYUNSIGNED ThreadAttrs(TaskData *taskData) { return UNTAGGED_UNSIGNED(taskData->threadObject->Get(1)); } // As far as possible we want locking and unlocking an ML mutex to be fast so // we try to implement the code in the assembly code using appropriate // interlocked instructions. That does mean that if we need to lock and // unlock an ML mutex in this code we have to use the same, machine-dependent, // code to do it. These are defaults that are used where there is no // machine-specific code. // Increment the value contained in the first word of the mutex. // On most platforms this code will be done with a piece of assembly code. PLock mutexLock; Handle MachineDependent::AtomicIncrement(TaskData *taskData, Handle mutexp) { mutexLock.Lock(); PolyObject *p = DEREFHANDLE(mutexp); // A thread can only call this once so the values will be short PolyWord newValue = TAGGED(UNTAGGED(p->Get(0))+1); p->Set(0, newValue); mutexLock.Unlock(); return SAVE(newValue); } // Decrement the value contained in the first word of the mutex. Handle MachineDependent::AtomicDecrement(TaskData *taskData, Handle mutexp) { mutexLock.Lock(); PolyObject *p = DEREFHANDLE(mutexp); PolyWord newValue = TAGGED(UNTAGGED(p->Get(0))-1); p->Set(0, newValue); mutexLock.Unlock(); return SAVE(newValue); } // Called from interface vector. Generally the assembly code will be // used instead of this. Handle AtomicIncrement(TaskData *taskData, Handle mutexp) { return machineDependent->AtomicIncrement(taskData, mutexp); } // Called from interface vector. Generally the assembly code will be // used instead of this. Handle AtomicDecrement(TaskData *taskData, Handle mutexp) { return machineDependent->AtomicDecrement(taskData, mutexp); } // Return the thread object for the current thread. // On most platforms this will be done with a piece of assembly code. Handle ThreadSelf(TaskData *taskData) { return SAVE(taskData->threadObject); } // Called from interface vector. This is the normal entry point for // the thread functions. Handle ThreadDispatch(TaskData *taskData, Handle args, Handle code) { return processesModule.ThreadDispatch(taskData, args, code); } Handle Processes::ThreadDispatch(TaskData *taskData, Handle args, Handle code) { int c = get_C_long(taskData, DEREFWORDHANDLE(code)); ProcessTaskData *ptaskData = (ProcessTaskData *)taskData; switch (c) { case 1: /* A mutex was locked i.e. the count was ~1 or less. We will have set it to ~1. This code blocks if the count is still ~1. It does actually return if another thread tries to lock the mutex and hasn't yet set the value to ~1 but that doesn't matter since whenever we return we simply try to get the lock again. */ { schedLock.Lock(); // We have to check the value again with schedLock held rather than // simply waiting because otherwise the unlocking thread could have // set the variable back to 1 (unlocked) and signalled any waiters // before we actually got to wait. if (UNTAGGED(DEREFHANDLE(args)->Get(0)) < 0) { // Set this so we can see what we're blocked on. ptaskData->blockMutex = DEREFHANDLE(args); // Now release the ML memory. A GC can start. ThreadReleaseMLMemoryWithSchedLock(ptaskData); // Wait until we're woken up. We mustn't block if we have been // interrupted, and are processing interrupts asynchronously, or // we've been killed. switch (ptaskData->requests) { case kRequestKill: // We've been killed. Handle this later. break; case kRequestInterrupt: { // We've been interrupted. POLYUNSIGNED attrs = ThreadAttrs(ptaskData) & PFLAG_INTMASK; if (attrs == PFLAG_ASYNCH || attrs == PFLAG_ASYNCH_ONCE) break; // If we're ignoring interrupts or handling them synchronously // we don't do anything here. } case kRequestNone: ptaskData->threadLock.Wait(&schedLock); } ptaskData->blockMutex = 0; // No longer blocked. ThreadUseMLMemoryWithSchedLock(ptaskData); } // Return and try and get the lock again. schedLock.Unlock(); // Test to see if we have been interrupted and if this thread // processes interrupts asynchronously we should raise an exception // immediately. Perhaps we do that whenever we exit from the RTS. return SAVE(TAGGED(0)); } case 2: /* Unlock a mutex. Called after incrementing the count and discovering that at least one other thread has tried to lock it. We may need to wake up threads that are blocked. */ { // The caller has already set the variable to 1 (unlocked). // We need to acquire schedLock so that we can // be sure that any thread that is trying to lock sees either // the updated value (and so doesn't wait) or has successfully // waited on its threadLock (and so will be woken up). schedLock.Lock(); // Unlock any waiters. for (unsigned i = 0; i < taskArraySize; i++) { ProcessTaskData *p = taskArray[i]; // If the thread is blocked on this mutex we can signal the thread. if (p && p->blockMutex == DEREFHANDLE(args)) p->threadLock.Signal(); } schedLock.Unlock(); return SAVE(TAGGED(0)); } case 3: // Atomically drop a mutex and wait for a wake up. { // The argument is a pair of a mutex and the time to wake up. The time // may be zero to indicate an infinite wait. The return value is unit. // It WILL NOT RAISE AN EXCEPTION unless it is set to handle exceptions // asynchronously (which it shouldn't do if the ML caller code is correct). // It may return as a result of any of the following: // an explicit wake up. // an interrupt, either direct or broadcast // a trap i.e. a request to handle an asynchronous event. Handle mutexH = SAVE(args->WordP()->Get(0)); Handle wakeTime = SAVE(args->WordP()->Get(1)); // We pass zero as the wake time to represent infinity. bool isInfinite = compareLong(taskData, wakeTime, SAVE(TAGGED(0))) == 0; // Convert the time into the correct format for WaitUntil before acquiring // schedLock. div_longc could do a GC which requires schedLock. #ifdef HAVE_PTHREAD struct timespec tWake; if (! isInfinite) { // On Unix we represent times as a number of microseconds. Handle hMillion = Make_arbitrary_precision(taskData, 1000000); tWake.tv_sec = get_C_ulong(taskData, DEREFWORDHANDLE(div_longc(taskData, hMillion, wakeTime))); tWake.tv_nsec = 1000*get_C_ulong(taskData, DEREFWORDHANDLE(rem_longc(taskData, hMillion, wakeTime))); } #elif defined(HAVE_WINDOWS_H) // On Windows it is the number of 100ns units since the epoch FILETIME tWake; if (! isInfinite) { get_C_pair(taskData, DEREFWORDHANDLE(wakeTime), (unsigned long*)&tWake.dwHighDateTime, (unsigned long*)&tWake.dwLowDateTime); } #endif schedLock.Lock(); // Atomically release the mutex. This is atomic because we hold schedLock // so no other thread can call signal or broadcast. Handle decrResult = machineDependent->AtomicIncrement(taskData, mutexH); if (UNTAGGED(decrResult->Word()) != 1) { DEREFHANDLE(mutexH)->Set(0, TAGGED(1)); // Set this to released. // The mutex was locked so we have to release any waiters. // Unlock any waiters. for (unsigned i = 0; i < taskArraySize; i++) { ProcessTaskData *p = taskArray[i]; // If the thread is blocked on this mutex we can signal the thread. if (p && p->blockMutex == DEREFHANDLE(mutexH)) p->threadLock.Signal(); } } // Wait until we're woken up. Don't block if we have been interrupted // or killed. if (ptaskData->requests == kRequestNone) { // Now release the ML memory. A GC can start. ThreadReleaseMLMemoryWithSchedLock(ptaskData); // We pass zero as the wake time to represent infinity. if (isInfinite) ptaskData->threadLock.Wait(&schedLock); else (void)ptaskData->threadLock.WaitUntil(&schedLock, &tWake); // We want to use the memory again. ThreadUseMLMemoryWithSchedLock(ptaskData); } schedLock.Unlock(); return SAVE(TAGGED(0)); } case 4: // Wake up the specified thread. Returns false (0) if the thread has // already been interrupted and is not ignoring interrupts or if the thread // does not exist (i.e. it's been killed while waiting). Returns true // if it successfully woke up the thread. The thread may subsequently // receive an interrupt but we need to know whether we woke the thread // up before that happened. { int result = 0; // Default to failed. // Acquire the schedLock first. This ensures that this is // atomic with respect to waiting. schedLock.Lock(); ProcessTaskData *p = TaskForIdentifier(args); if (p && p->threadObject == args->WordP()) { POLYUNSIGNED attrs = ThreadAttrs(p) & PFLAG_INTMASK; if (p->requests == kRequestNone || (p->requests == kRequestInterrupt && attrs == PFLAG_IGNORE)) { p->threadLock.Signal(); result = 1; } } schedLock.Unlock(); return SAVE(TAGGED(result)); } // 5 and 6 are no longer used. case 7: // Fork a new thread. The arguments are the function to run and the attributes. return ForkThread(ptaskData, SAVE(args->WordP()->Get(0)), (Handle)0, args->WordP()->Get(1)); case 8: // Test if a thread is active { schedLock.Lock(); ProcessTaskData *p = TaskForIdentifier(args); schedLock.Unlock(); return SAVE(TAGGED(p != 0)); } case 9: // Send an interrupt to a specific thread { schedLock.Lock(); ProcessTaskData *p = TaskForIdentifier(args); if (p) MakeRequest(p, kRequestInterrupt); schedLock.Unlock(); if (p == 0) raise_exception_string(taskData, EXC_thread, "Thread does not exist"); return SAVE(TAGGED(0)); } case 10: // Broadcast an interrupt to all threads that are interested. BroadcastInterrupt(); return SAVE(TAGGED(0)); case 11: // Interrupt this thread now if it has been interrupted TestSynchronousRequests(taskData); return SAVE(TAGGED(0)); case 12: // Kill a specific thread { schedLock.Lock(); ProcessTaskData *p = TaskForIdentifier(args); if (p) MakeRequest(p, kRequestKill); schedLock.Unlock(); if (p == 0) raise_exception_string(taskData, EXC_thread, "Thread does not exist"); return SAVE(TAGGED(0)); } case 13: // Return the number of processors. // Returns 1 if there is any problem. { #ifdef WIN32 SYSTEM_INFO info; memset(&info, 0, sizeof(info)); GetSystemInfo(&info); if (info.dwNumberOfProcessors == 0) // Just in case info.dwNumberOfProcessors = 1; return Make_unsigned(taskData, info.dwNumberOfProcessors); #elif(defined(_SC_NPROCESSORS_ONLN)) long res = sysconf(_SC_NPROCESSORS_ONLN); if (res <= 0) res = 1; return Make_arbitrary_precision(taskData, res); #elif(defined(HAVE_SYSCTL) && defined(CTL_HW) && defined(HW_NCPU)) static int mib[2] = { CTL_HW, HW_NCPU }; int nCPU = 1; size_t len = sizeof(nCPU); if (sysctl(mib, 2, &nCPU, &len, NULL, 0) == 0 && len == sizeof(nCPU)) return Make_unsigned(taskData, nCPU); else return Make_unsigned(taskData, 1); #else // Can't determine. return Make_unsigned(taskData, 1); #endif } default: { char msg[100]; sprintf(msg, "Unknown thread function: %d", c); raise_fail(taskData, msg); return 0; } } } TaskData::TaskData(): allocPointer(0), allocLimit(0), allocSize(MIN_HEAP_SIZE), allocCount(0), stack(0), threadObject(0), signalStack(0), pendingInterrupt(false) { // Initialise the dummy save vec entries used to extend short precision arguments. // This is a bit of a hack. x_extend_addr = SaveVecEntry(PolyWord::FromStackAddr(&(x_extend[1]))); y_extend_addr = SaveVecEntry(PolyWord::FromStackAddr(&(y_extend[1]))); x_ehandle = &x_extend_addr; y_ehandle = &y_extend_addr; } TaskData::~TaskData() { if (signalStack) free(signalStack); } // Fill unused allocation space with a dummy object to preserve the invariant // that memory is always valid. void TaskData::FillUnusedSpace(void) { if (allocPointer > allocLimit) gMem.FillUnusedSpace(allocLimit, allocPointer-allocLimit); } ProcessTaskData::ProcessTaskData(): requests(kRequestNone), blockMutex(0), inMLHeap(false), runningProfileTimer(false) { #ifdef HAVE_WINDOWS_H lastCPUTime = 0; #endif #ifdef HAVE_PTHREAD pthreadId = 0; #endif #ifdef HAVE_WINDOWS_H threadHandle = 0; #endif } ProcessTaskData::~ProcessTaskData() { #ifdef HAVE_WINDOWS_H if (threadHandle) CloseHandle(threadHandle); #endif } // Find a task that matches the specified identifier and returns // it if it exists. MUST be called with taskArrayLock held. ProcessTaskData *Processes::TaskForIdentifier(Handle taskId) { // The index is in the first word of the thread object. unsigned index = UNTAGGED_UNSIGNED(taskId->WordP()->Get(0)); // Check the index is valid and matches the object stored in the table. if (index < taskArraySize) { ProcessTaskData *p = taskArray[index]; if (p && p->threadObject == taskId->WordP()) return p; } return 0; } // Broadcast an interrupt to all relevant threads. void Processes::BroadcastInterrupt(void) { // If a thread is set to accept broadcast interrupts set it to // "interrupted". schedLock.Lock(); for (unsigned i = 0; i < taskArraySize; i++) { ProcessTaskData *p = taskArray[i]; if (p) { POLYUNSIGNED attrs = ThreadAttrs(p); if (attrs & PFLAG_BROADCAST) MakeRequest(p, kRequestInterrupt); } } schedLock.Unlock(); } // Set the asynchronous request variable for the thread. Must be called // with the schedLock held. Tries to wake the thread up if possible. void Processes::MakeRequest(ProcessTaskData *p, ThreadRequests request) { // We don't override a request to kill by an interrupt request. if (p->requests < request) { p->requests = request; machineDependent->InterruptCode(p); p->threadLock.Signal(); // Set the value in the ML object as well so the ML code can see it p->threadObject->Set(3, TAGGED(request)); } #ifdef HAVE_WINDOWS_H // Wake any threads waiting for IO PulseEvent(hWakeupEvent); #endif } void Processes::ThreadExit(TaskData *taskData) { if (singleThreaded) finish(0); schedLock.Lock(); ThreadReleaseMLMemoryWithSchedLock(taskData); // Allow a GC if it was waiting for us. // Remove this from the taskArray unsigned index = UNTAGGED(taskData->threadObject->Get(0)); if (index < taskArraySize && taskArray[index] == taskData) taskArray[index] = 0; delete(taskData); initialThreadWait.Signal(); // Tell it we've finished. schedLock.Unlock(); #ifdef HAVE_PTHREAD pthread_exit(0); #elif defined(HAVE_WINDOWS_H) ExitThread(0); #endif } // These two functions are used for calls from outside where // the lock has not yet been acquired. void Processes::ThreadUseMLMemory(TaskData *taskData) { // Trying to acquire the lock here may block if a GC is in progress schedLock.Lock(); ThreadUseMLMemoryWithSchedLock(taskData); schedLock.Unlock(); } void Processes::ThreadReleaseMLMemory(TaskData *taskData) { schedLock.Lock(); ThreadReleaseMLMemoryWithSchedLock(taskData); schedLock.Unlock(); } // Called when a thread wants to resume using the ML heap. That could // be after a wait for some reason or after executing some foreign code. // Since there could be a GC in progress already at this point we may either // be blocked waiting to acquire schedLock or we may need to wait until // we are woken up at the end of the GC. void Processes::ThreadUseMLMemoryWithSchedLock(TaskData *taskData) { ProcessTaskData *ptaskData = (ProcessTaskData *)taskData; // If there is a request outstanding we have to wait for it to // complete. We notify the root thread and wait for it. while (threadRequest != 0) { initialThreadWait.Signal(); // Wait for the GC to happen mlThreadWait.Wait(&schedLock); } ASSERT(! ptaskData->inMLHeap); ptaskData->inMLHeap = true; } // Called to indicate that the thread has temporarily finished with the // ML memory either because it is going to wait for something or because // it is going to run foreign code. If there is an outstanding GC request // that can proceed. void Processes::ThreadReleaseMLMemoryWithSchedLock(TaskData *taskData) { ProcessTaskData *ptaskData = (ProcessTaskData *)taskData; ASSERT(ptaskData->inMLHeap); ptaskData->inMLHeap = false; // Put a dummy object in any unused space. This maintains the // invariant that the allocated area is filled with valid objects. ptaskData->FillUnusedSpace(); // if (threadRequest != 0) initialThreadWait.Signal(); } // Make a request to the root thread. void Processes::MakeRootRequest(TaskData *taskData, MainThreadRequest *request) { if (singleThreaded) request->Perform(); else { PLocker locker(&schedLock); // Wait for any other requests. while (threadRequest != 0) { // Deal with any pending requests. ThreadReleaseMLMemoryWithSchedLock(taskData); ThreadUseMLMemoryWithSchedLock(taskData); // Drops schedLock while waiting. } // Now the other requests have been dealt with (and we have schedLock). request->completed = false; threadRequest = request; // Wait for it to complete. while (! request->completed) { ThreadReleaseMLMemoryWithSchedLock(taskData); ThreadUseMLMemoryWithSchedLock(taskData); // Drops schedLock while waiting. } } } // Find space for an object. Returns a pointer to the start. "words" must include // the length word and the result points at where the length word will go. PolyWord *Processes::FindAllocationSpace(TaskData *taskData, POLYUNSIGNED words, bool alwaysInSeg) { bool triedInterrupt = false; if (userOptions.debug & DEBUG_FORCEGC) // Always GC when allocating? QuickGC(taskData, words); while (1) { // After a GC allocPointer and allocLimit are zero and when allocating the // heap segment we request a minimum of zero words. if (taskData->allocPointer != 0 && taskData->allocPointer >= taskData->allocLimit + words) { // There's space in the current segment, taskData->allocPointer -= words; return taskData->allocPointer; } else // Insufficient space in this area. { if (words > taskData->allocSize && ! alwaysInSeg) { // If the object we want is larger than the heap segment size // we allocate it separately rather than in the segment. PolyWord *foundSpace = gMem.AllocHeapSpace(words); if (foundSpace) return foundSpace; } else { // Fill in any unused space in the existing segment taskData->FillUnusedSpace(); // Get another heap segment with enough space for this object. POLYUNSIGNED spaceSize = taskData->allocSize+words; // Get the space and update spaceSize with the actual size. PolyWord *space = gMem.AllocHeapSpace(words, spaceSize); if (space) { // Double the allocation size for the next time. taskData->IncrementAllocationCount(); taskData->allocLimit = space; taskData->allocPointer = space+spaceSize; // Actually allocate the object taskData->allocPointer -= words; return taskData->allocPointer; } } // Try garbage-collecting. If this failed return 0. if (! QuickGC(taskData, words)) { if (! triedInterrupt) { triedInterrupt = true; fprintf(stderr,"Run out of store - interrupting threads\n"); BroadcastInterrupt(); if (ProcessAsynchRequests(taskData)) return 0; // Has been interrupted. // Not interrupted: pause this thread to allow for other // interrupted threads to free something. #if defined(WINDOWS_PC) Sleep(5000); #else sleep(5); #endif // Try again. } else { // That didn't work. Exit. fprintf(stderr,"Failed to recover - exiting\n"); Exit(1); } } // Try again. There should be space now. } } } Handle exitThread(TaskData *taskData) /* A call to this is put on the stack of a new thread so when the thread function returns the thread goes away. */ { processesModule.ThreadExit(taskData); } /* Called when a thread is about to block, usually because of IO. fd may be negative if the file descriptor value is not relevant. If this is interruptable (currently only used for Posix functions) the process will be set to raise an exception if any signal is handled. It may also raise an exception if another thread has called broadcastInterrupt. */ void Processes::ThreadPauseForIO(TaskData *taskData, int fd) { TestSynchronousRequests(taskData); // Consider this a blocking call that may raise Interrupt ThreadReleaseMLMemory(taskData); #ifdef WINDOWS_PC /* It's too complicated in Windows to try and wait for a stream. We simply wait for half a second or until a Windows message arrives. */ /* We seem to need to reset the queue before calling MsgWaitForMultipleObjects otherwise it frequently returns immediately, often saying there is a message with a message ID of 0x118 which doesn't correspond to any listed message. While calling PeekMessage afterwards might be better this doesn't seem to work properly. We need to use MsgWaitForMultipleObjects here so that we get a reasonable response with the Windows GUI. */ MSG msg; // N.B. It seems that calling PeekMessage may result in a callback // to a window proc directly without a call to DispatchMessage. That // could result in a recursive call here if we have installed an ML // window proc. PeekMessage(&msg, 0, 0, 0, PM_NOREMOVE); // Wait until we get input or we're woken up. MsgWaitForMultipleObjects(1, &hWakeupEvent, FALSE, 100, QS_ALLINPUT); #else fd_set read_fds, write_fds, except_fds; struct timeval toWait = { 0, 100000 }; /* 100ms. */ FD_ZERO(&read_fds); if (fd >= 0) FD_SET(fd, &read_fds); FD_ZERO(&write_fds); FD_ZERO(&except_fds); select(FD_SETSIZE, &read_fds, &write_fds, &except_fds, &toWait); #endif ThreadUseMLMemory(taskData); TestSynchronousRequests(taskData); // Check if we've been interrupted. if (ProcessAsynchRequests(taskData)) throw IOException(EXC_EXCEPTION); } // This is largely a legacy of the old single-thread version. In that version there // was only a single C thread managing multiple ML threads (processes) so if an ML // thread blocked it was necessary to switch the thread and then for the C function // call to raise an exception to get back to ML. // TODO: There's actually a race here if we have posixInterruptible set. We // repeatedly come back here and if a signal happens while we're in // ThreadPauseForIO we will raise the exception. If the signal happens at // another point we won't. void Processes::BlockAndRestart(TaskData *taskData, int fd, bool posixInterruptable, int ioCall) { machineDependent->SetForRetry(taskData, ioCall); unsigned lastSigCount = receivedSignalCount; ThreadPauseForIO(taskData, fd); // If this is an interruptible Posix function we raise an exception if // there has been a signal. if (posixInterruptable && lastSigCount != receivedSignalCount) raise_syscall(taskData, "Call interrupted by signal", EINTR); throw IOException(EXC_EXCEPTION); /* NOTREACHED */ } // Get the task data for the current thread. This is held in // thread-local storage. Normally this is passed in taskData but // in a few cases this isn't available. TaskData *Processes::GetTaskDataForThread(void) { #ifdef HAVE_PTHREAD return (TaskData *)pthread_getspecific(tlsId); #elif defined(HAVE_WINDOWS_H) return (TaskData *)TlsGetValue(tlsId); #else // If there's no threading. return taskArray[0]; #endif } // This function is run when a new thread has been forked. The // parameter is the taskData value for the new thread. This function // is also called directly for the main thread. #ifdef HAVE_PTHREAD static void *NewThreadFunction(void *parameter) { ProcessTaskData *taskData = (ProcessTaskData *)parameter; #ifdef HAVE_WINDOWS_H // Cygwin: Get the Windows thread handle in case it's needed for profiling. HANDLE thisProcess = GetCurrentProcess(); DuplicateHandle(thisProcess, GetCurrentThread(), thisProcess, &(taskData->threadHandle), THREAD_ALL_ACCESS, FALSE, 0); #endif initThreadSignals(taskData); pthread_setspecific(processesModule.tlsId, taskData); taskData->saveVec.init(); // Removal initial data processes->ThreadUseMLMemory(taskData); try { (void)EnterPolyCode(taskData); // Will normally (always?) call ExitThread. } catch (KillException) { processesModule.ThreadExit(taskData); } return 0; } #elif defined(HAVE_WINDOWS_H) static DWORD WINAPI NewThreadFunction(void *parameter) { ProcessTaskData *taskData = (ProcessTaskData *)parameter; TlsSetValue(processesModule.tlsId, taskData); taskData->saveVec.init(); // Removal initial data processes->ThreadUseMLMemory(taskData); try { (void)EnterPolyCode(taskData); } catch (KillException) { processesModule.ThreadExit(taskData); } return 0; } #else static void NewThreadFunction(void *parameter) { ProcessTaskData *taskData = (ProcessTaskData *)parameter; initThreadSignals(taskData); taskData->saveVec.init(); // Removal initial data processes->ThreadUseMLMemory(taskData); try { (void)EnterPolyCode(taskData); } catch (KillException) { processesModule.ThreadExit(taskData); } } #endif // Sets up the initial thread from the root function. This is run on // the initial thread of the process so it will work if we don't // have pthreads. // When multithreading this thread also deals with all garbage-collection // and similar operations and the ML threads send it requests to deal with // that. These require all the threads to pause until the operation is complete // since they affect all memory but they are also sometimes highly recursive. // On Mac OS X and on Linux if the stack limit is set to unlimited only the // initial thread has a large stack and newly created threads have smaller // stacks. We need to make sure that any significant stack usage occurs only // on the inital thread. void Processes::BeginRootThread(PolyObject *rootFunction) { if (taskArraySize < 1) { taskArray = (ProcessTaskData **)realloc(taskArray, sizeof(ProcessTaskData *)); taskArraySize = 1; } // We can't use ForkThread because we don't have a taskData object before we start ProcessTaskData *taskData = new ProcessTaskData; taskData->mdTaskData = machineDependent->CreateTaskData(); taskData->threadObject = (ThreadObject*)alloc(taskData, 4, F_MUTABLE_BIT); taskData->threadObject->index = TAGGED(0); // Index 0 // The initial thread is set to accept broadcast interrupt requests // and handle them synchronously. This is for backwards compatibility. taskData->threadObject->flags = TAGGED(PFLAG_BROADCAST|PFLAG_ASYNCH); // Flags taskData->threadObject->threadLocal = TAGGED(0); // Empty thread-local store taskData->threadObject->requestCopy = TAGGED(0); // Cleared interrupt state #ifdef HAVE_PTHREAD taskData->pthreadId = pthread_self(); #elif defined(HAVE_WINDOWS_H) taskData->threadHandle = hMainThread; #endif taskArray[0] = taskData; Handle stack = alloc_and_save(taskData, machineDependent->InitialStackSize(), F_MUTABLE_BIT|F_STACK_OBJ); taskData->stack = (StackObject *)DEREFHANDLE(stack); machineDependent->InitStackFrame(taskData, stack, taskData->saveVec.push(rootFunction), (Handle)0); // Create a packet for the Interrupt exception once so that we don't have to // allocate when we need to raise it. // We can only do this once the taskData object has been created. if (interrupt_exn == 0) interrupt_exn = DEREFEXNHANDLE(make_exn(taskData, EXC_interrupt, taskData->saveVec.push(TAGGED(0)))); if (singleThreaded) { // If we don't have threading enter the code as if this were a new thread. // This will call finish so will never return. NewThreadFunction(taskData); } schedLock.Lock(); bool success = false; #ifdef HAVE_PTHREAD // Create a thread that isn't joinable since we don't want to wait // for it to finish. pthread_attr_t attrs; pthread_attr_init(&attrs); pthread_attr_setdetachstate(&attrs, PTHREAD_CREATE_DETACHED); success = pthread_create(&taskData->pthreadId, &attrs, NewThreadFunction, taskData) == 0; pthread_attr_destroy(&attrs); #elif defined(HAVE_WINDOWS_H) DWORD dwThrdId; // Have to provide this although we don't use it. taskData->threadHandle = CreateThread(NULL, 0, NewThreadFunction, taskData, 0, &dwThrdId); success = taskData->threadHandle != NULL; #endif if (! success) { // Thread creation failed. taskArray[0] = 0; delete(taskData); } // Wait until the threads terminate or make a request. // We only release schedLock while waiting. while (1) { // Look at the threads to see if they are running. bool allStopped = true; bool allDied = true; for (unsigned i = 0; i < taskArraySize; i++) { ProcessTaskData *p = taskArray[i]; // If the only thread left is the signal thread assume we're finished. if (p && p != sigTask) allDied = false; if (p && p->inMLHeap) { allStopped = false; // It must be running - interrupt it if we are waiting. if (threadRequest != 0) machineDependent->InterruptCode(p); } } if (allDied) break; // All threads have died: exit. if (allStopped && threadRequest != 0) { threadRequest->Perform(); threadRequest->completed = true; threadRequest = 0; // Allow a new request. mlThreadWait.Signal(); } // Have we had a request to stop? This may have happened while in the GC. if (exitRequest) { // Set this to kill the threads. for (unsigned i = 0; i < taskArraySize; i++) { ProcessTaskData *taskData = taskArray[i]; if (taskData) MakeRequest(taskData, kRequestKill); } exitRequest = false; // Don't need to repeat this. } // Now release schedLock and wait for a thread // to wake us up. Use a timed wait to avoid the race with // setting exitRequest. initialThreadWait.WaitFor(&schedLock, 2000); } schedLock.Unlock(); // We are about to return normally. Stop any crowbar function // and wait until it stops. shutdownLock.Lock(); if (crowbarRunning) { crowbarLock.Signal(); crowbarStopped.Wait(&shutdownLock); } finish(exitResult); // Close everything down and exit. } // Create a new thread. Returns the ML thread identifier object if it succeeds. // May raise an exception. Handle Processes::ForkThread(ProcessTaskData *taskData, Handle threadFunction, Handle args, PolyWord flags) { if (singleThreaded) raise_exception_string(taskData, EXC_thread, "Threads not available"); // Create a taskData object for the new thread ProcessTaskData *newTaskData = new ProcessTaskData; newTaskData->mdTaskData = machineDependent->CreateTaskData(); // We allocate the thread object in the PARENT's space Handle threadId = alloc_and_save(taskData, 4, F_MUTABLE_BIT); newTaskData->threadObject = (ThreadObject*)DEREFHANDLE(threadId); newTaskData->threadObject->index = TAGGED(0); newTaskData->threadObject->flags = flags; // Flags newTaskData->threadObject->threadLocal = TAGGED(0); // Empty thread-local store newTaskData->threadObject->requestCopy = TAGGED(0); // Cleared interrupt state unsigned thrdIndex; schedLock.Lock(); // Before forking a new thread check to see whether we have been asked // to exit. Processes::Exit sets the current set of threads to exit but won't // see a new thread. if (taskData->requests == kRequestKill) { schedLock.Unlock(); // Raise an exception although the thread may exit before we get there. raise_exception_string(taskData, EXC_thread, "Thread is exiting"); } // See if there's a spare entry in the array. for (thrdIndex = 0; thrdIndex < taskArraySize && taskArray[thrdIndex] != 0; thrdIndex++); if (thrdIndex == taskArraySize) // Need to expand the array { ProcessTaskData **newArray = (ProcessTaskData **)realloc(taskArray, sizeof(ProcessTaskData *)*(taskArraySize+1)); if (newArray) { taskArray = newArray; taskArraySize++; } else { delete(newTaskData); schedLock.Unlock(); raise_exception_string(taskData, EXC_thread, "Too many threads"); } } // Add into the new entry taskArray[thrdIndex] = newTaskData; newTaskData->threadObject->Set(0, TAGGED(thrdIndex)); // Set to the index schedLock.Unlock(); Handle stack = // Allocate the stack in the parent's heap. alloc_and_save(taskData, machineDependent->InitialStackSize(), F_MUTABLE_BIT|F_STACK_OBJ); newTaskData->stack = (StackObject *)DEREFHANDLE(stack); // Also allocate anything needed for the new stack in the parent's heap. // The child still has inMLHeap set so mustn't GC. machineDependent->InitStackFrame(taskData, stack, threadFunction, args); // Now actually fork the thread. bool success = false; schedLock.Lock(); #ifdef HAVE_PTHREAD // Create a thread that isn't joinable since we don't want to wait // for it to finish. pthread_attr_t attrs; pthread_attr_init(&attrs); pthread_attr_setdetachstate(&attrs, PTHREAD_CREATE_DETACHED); success = pthread_create(&newTaskData->pthreadId, &attrs, NewThreadFunction, newTaskData) == 0; pthread_attr_destroy(&attrs); #elif defined(HAVE_WINDOWS_H) DWORD dwThrdId; // Have to provide this although we don't use it. newTaskData->threadHandle = CreateThread(NULL, 0, NewThreadFunction, newTaskData, 0, &dwThrdId); success = newTaskData->threadHandle != NULL; #endif if (success) { schedLock.Unlock(); return threadId; } // Thread creation failed. taskArray[thrdIndex] = 0; delete(newTaskData); schedLock.Unlock(); raise_exception_string(taskData, EXC_thread, "Thread creation failed"); } // ForkFromRTS. Creates a new thread from within the RTS. This is currently used // only to run a signal function. bool Processes::ForkFromRTS(TaskData *taskData, Handle proc, Handle arg) { try { (void)ForkThread((ProcessTaskData*)taskData, proc, arg, TAGGED(PFLAG_SYNCH)); return true; } catch (IOException) { // If it failed return false; } } // Deal with any interrupt or kill requests. bool Processes::ProcessAsynchRequests(TaskData *taskData) { bool wasInterrupted = false; ProcessTaskData *ptaskData = (ProcessTaskData *)taskData; schedLock.Lock(); switch (ptaskData->requests) { case kRequestNone: schedLock.Unlock(); break; case kRequestInterrupt: { // Handle asynchronous interrupts only. // We've been interrupted. POLYUNSIGNED attrs = ThreadAttrs(ptaskData); POLYUNSIGNED intBits = attrs & PFLAG_INTMASK; if (intBits == PFLAG_ASYNCH || intBits == PFLAG_ASYNCH_ONCE) { if (intBits == PFLAG_ASYNCH_ONCE) { // Set this so from now on it's synchronous. // This word is only ever set by the thread itself so // we don't need to synchronise. attrs = (attrs & (~PFLAG_INTMASK)) | PFLAG_SYNCH; ptaskData->threadObject->Set(1, TAGGED(attrs)); } ptaskData->requests = kRequestNone; // Clear this ptaskData->threadObject->Set(3, TAGGED(0)); // And in the ML copy schedLock.Unlock(); // Don't actually throw the exception here. machineDependent->SetException(taskData, interrupt_exn); wasInterrupted = true; } else schedLock.Unlock(); } break; case kRequestKill: // The thread has been asked to stop. schedLock.Unlock(); throw KillException(); // Doesn't return. } #ifndef HAVE_WINDOWS_H // Start the profile timer if needed. if (profileMode == kProfileTime) { if (! ptaskData->runningProfileTimer) { ptaskData->runningProfileTimer = true; StartProfilingTimer(); } } else ptaskData->runningProfileTimer = false; // The timer will be stopped next time it goes off. #endif return wasInterrupted; } // If this thread is processing interrupts synchronously and has been // interrupted clear the interrupt and raise the exception. This is // called from IO routines which may block. void Processes::TestSynchronousRequests(TaskData *taskData) { ProcessTaskData *ptaskData = (ProcessTaskData *)taskData; schedLock.Lock(); switch (ptaskData->requests) { case kRequestNone: schedLock.Unlock(); break; case kRequestInterrupt: { // Handle synchronous interrupts only. // We've been interrupted. POLYUNSIGNED attrs = ThreadAttrs(ptaskData); POLYUNSIGNED intBits = attrs & PFLAG_INTMASK; if (intBits == PFLAG_SYNCH) { ptaskData->requests = kRequestNone; // Clear this ptaskData->threadObject->Set(3, TAGGED(0)); schedLock.Unlock(); machineDependent->SetException(taskData, interrupt_exn); throw IOException(EXC_EXCEPTION); } else schedLock.Unlock(); } break; case kRequestKill: // The thread has been asked to stop. schedLock.Unlock(); throw KillException(); // Doesn't return. } } // Stop. Usually called by one of the threads but // in the Windows version can also be called by the GUI or // it can be called from the default console interrupt handler. // This is more complicated than it seems. We must avoid // calling exit while there are other threads running because // exit will finalise the modules and deallocate memory etc. // However some threads may be deadlocked or we may be in the // middle of a very slow GC and we just want it to stop. void Processes::CrowBarFn(void) { #if (defined(HAVE_PTHREAD) || defined(HAVE_WINDOWS_H)) shutdownLock.Lock(); crowbarRunning = true; if (crowbarLock.WaitFor(&shutdownLock, 20000)) // Wait for 20s { // We've been woken by the main thread. Let it do the shutdown. crowbarStopped.Signal(); shutdownLock.Unlock(); } else { #if defined(HAVE_WINDOWS_H) ExitProcess(1); #else _exit(1); // Something is stuck. Get out without calling destructors. #endif } #endif } #ifdef HAVE_PTHREAD static void *crowBarFn(void*) { processesModule.CrowBarFn(); return 0; } #elif defined(HAVE_WINDOWS_H) static DWORD WINAPI crowBarFn(LPVOID arg) { processesModule.CrowBarFn(); return 0; } #endif void Processes::Exit(int n) { if (singleThreaded) finish(n); // Start a crowbar thread. This will stop everything if the main thread // does not reach the point of stopping within 5 seconds. #if (defined(HAVE_PTHREAD)) // Create a thread that isn't joinable since we don't want to wait // for it to finish. pthread_attr_t attrs; pthread_attr_init(&attrs); pthread_attr_setdetachstate(&attrs, PTHREAD_CREATE_DETACHED); pthread_t threadId; (void)pthread_create(&threadId, &attrs, crowBarFn, 0); pthread_attr_destroy(&attrs); #elif defined(HAVE_WINDOWS_H) DWORD dwThrdId; HANDLE hCrowBarThread = CreateThread(NULL, 0, crowBarFn, 0, 0, &dwThrdId); CloseHandle(hCrowBarThread); // Not needed #endif // We may be in an interrupt handler with schedLock held. // Just set the exit request and go. exitResult = n; exitRequest = true; initialThreadWait.Signal(); // Wake it if it's sleeping. } /******************************************************************************/ /* */ /* catchVTALRM - handler for alarm-clock signal */ /* */ /******************************************************************************/ #if !defined(HAVE_WINDOWS_H) // N.B. This may be called either by an ML thread or by the main thread. // On the main thread taskData will be null. static void catchVTALRM(SIG_HANDLER_ARGS(sig, context)) { ASSERT(sig == SIGVTALRM); if (profileMode != kProfileTime) { // We stop the timer for this thread on the next signal after we end profile static struct itimerval stoptime = {{0, 0}, {0, 0}}; /* Stop the timer */ setitimer(ITIMER_VIRTUAL, & stoptime, NULL); } else { TaskData *taskData = processes->GetTaskDataForThread(); handleProfileTrap(taskData, (SIGNALCONTEXT*)context); } } #else /* Windows including Cygwin */ // This runs as a separate thread. Every millisecond it checks the CPU time used // by each ML thread and increments the count for each thread that has used a // millisecond of CPU time. static bool testCPUtime(HANDLE hThread, LONGLONG &lastCPUTime) { FILETIME cTime, eTime, kTime, uTime; // Try to get the thread CPU time if possible. This isn't supported // in Windows 95/98 so if it fails we just include this thread anyway. if (GetThreadTimes(hThread, &cTime, &eTime, &kTime, &uTime)) { LONGLONG totalTime = 0; LARGE_INTEGER li; li.LowPart = kTime.dwLowDateTime; li.HighPart = kTime.dwHighDateTime; totalTime += li.QuadPart; li.LowPart = uTime.dwLowDateTime; li.HighPart = uTime.dwHighDateTime; totalTime += li.QuadPart; if (totalTime - lastCPUTime >= 10000) { lastCPUTime = totalTime; return true; } return false; } else return true; // Failed to get thread time, maybe Win95. } void Processes::ProfileInterrupt(void) { // Wait for millisecond or until the stop event is signalled. while (WaitForSingleObject(hStopEvent, 1) == WAIT_TIMEOUT) { // We need to hold schedLock to examine the taskArray but // that is held during garbage collection. if (schedLock.Trylock()) { for (unsigned i = 0; i < taskArraySize; i++) { ProcessTaskData *p = taskArray[i]; if (p && p->threadHandle) { if (testCPUtime(p->threadHandle, p->lastCPUTime)) { CONTEXT context; SuspendThread(p->threadHandle); context.ContextFlags = CONTEXT_CONTROL; /* Get Eip and Esp */ if (GetThreadContext(p->threadHandle, &context)) { handleProfileTrap(p, &context); } ResumeThread(p->threadHandle); } } } schedLock.Unlock(); } // Check the CPU time used by the main thread. This is used for GC // so we need to check that as well. if (testCPUtime(mainThreadHandle, lastCPUTime)) handleProfileTrap(NULL, NULL); } } DWORD WINAPI ProfilingTimer(LPVOID parm) { processesModule.ProfileInterrupt(); return 0; } #endif // Profiling control. Called by the root thread. void Processes::StartProfiling(void) { #ifdef HAVE_WINDOWS_H DWORD threadId; if (profilingHd) return; ResetEvent(hStopEvent); profilingHd = CreateThread(NULL, 0, ProfilingTimer, NULL, 0, &threadId); if (profilingHd == NULL) fputs("Creating ProfilingTimer thread failed.\n", stdout); /* Give this a higher than normal priority so it pre-empts the main thread. Without this it will tend only to be run when the main thread blocks for some reason. */ SetThreadPriority(profilingHd, THREAD_PRIORITY_ABOVE_NORMAL); #else // In Linux, at least, we need to run a timer in each thread. // We request each to enter the RTS so that it will start the timer. // Since this is being run by the main thread while all the ML threads // are paused this may not actually be necessary. for (unsigned i = 0; i < taskArraySize; i++) { ProcessTaskData *taskData = taskArray[i]; if (taskData) { machineDependent->InterruptCode(taskData); } } StartProfilingTimer(); // Start the timer in the root thread. #endif } void Processes::StopProfiling(void) { #ifdef HAVE_WINDOWS_H if (hStopEvent) SetEvent(hStopEvent); // Wait for the thread to stop if (profilingHd) WaitForSingleObject(profilingHd, 10000); CloseHandle(profilingHd); profilingHd = NULL; #endif } // Called by the ML signal handling thread. It blocks until a signal // arrives. There should only be a single thread waiting here. bool Processes::WaitForSignal(TaskData *taskData, PLock *sigLock) { ProcessTaskData *ptaskData = (ProcessTaskData *)taskData; // We need to hold the signal lock until we have acquired schedLock. schedLock.Lock(); sigLock->Unlock(); if (sigTask != 0) { schedLock.Unlock(); return false; } sigTask = ptaskData; if (ptaskData->requests == kRequestNone) { // Now release the ML memory. A GC can start. ThreadReleaseMLMemoryWithSchedLock(ptaskData); ptaskData->threadLock.Wait(&schedLock); // We want to use the memory again. ThreadUseMLMemoryWithSchedLock(ptaskData); } sigTask = 0; schedLock.Unlock(); return true; } // Called by the signal detection thread to wake up the signal handler // thread. Must be called AFTER releasing sigLock. void Processes::SignalArrived(void) { PLocker locker(&schedLock); if (sigTask) sigTask->threadLock.Signal(); } void Processes::Init(void) { #ifdef HAVE_WINDOWS_H // Create event to wake up from IO sleeping. hWakeupEvent = CreateEvent(NULL, TRUE, FALSE, NULL); #endif #ifdef HAVE_PTHREAD pthread_key_create(&tlsId, NULL); #elif defined(HAVE_WINDOWS_H) tlsId = TlsAlloc(); #else singleThreaded = true; #endif #if defined(HAVE_WINDOWS_H) /* Windows including Cygwin. */ // Create stop event for time profiling. hStopEvent = CreateEvent(NULL, TRUE, FALSE, NULL); // Get the thread handle for this thread. It's the same as // hMainThread except that we don't have that in the Cygwin version. HANDLE thisProcess = GetCurrentProcess(); DuplicateHandle(thisProcess, GetCurrentThread(), thisProcess, &mainThreadHandle, THREAD_ALL_ACCESS, FALSE, 0); #else // Set up a signal handler. This will be the same for all threads. markSignalInuse(SIGVTALRM); setSignalHandler(SIGVTALRM, catchVTALRM); #endif } #ifndef HAVE_WINDOWS_H // On Linux, at least, each thread needs to run this. void Processes::StartProfilingTimer(void) { // set virtual timer to go off every millisecond struct itimerval starttime; starttime.it_interval.tv_sec = starttime.it_value.tv_sec = 0; starttime.it_interval.tv_usec = starttime.it_value.tv_usec = 1000; setitimer(ITIMER_VIRTUAL,&starttime,NULL); } #endif void Processes::Reinit(void) { } void Processes::Uninit(void) { #ifdef HAVE_WINDOWS_H if (hWakeupEvent) SetEvent(hWakeupEvent); #endif #ifdef HAVE_WINDOWS_H if (hWakeupEvent) CloseHandle(hWakeupEvent); hWakeupEvent = NULL; #endif #ifdef HAVE_PTHREAD pthread_key_delete(tlsId); #elif defined(HAVE_WINDOWS_H) TlsFree(tlsId); #endif #if defined(HAVE_WINDOWS_H) /* Stop the timer and profiling threads. */ if (hStopEvent) SetEvent(hStopEvent); if (profilingHd) { WaitForSingleObject(profilingHd, 10000); CloseHandle(profilingHd); profilingHd = NULL; } if (hStopEvent) CloseHandle(hStopEvent); hStopEvent = NULL; if (mainThreadHandle) CloseHandle(mainThreadHandle); mainThreadHandle = NULL; #else profileMode = kProfileOff; // Make sure the timer is not running struct itimerval stoptime; memset(&stoptime, 0, sizeof(stoptime)); setitimer(ITIMER_VIRTUAL, &stoptime, NULL); #endif } void Processes::GarbageCollect(ScanAddress *process) /* Ensures that all the objects are retained and their addresses updated. */ { /* The interrupt exn */ if (interrupt_exn != 0) { PolyObject *p = interrupt_exn; process->ScanRuntimeAddress(&p, ScanAddress::STRENGTH_STRONG); interrupt_exn = (PolyException*)p; } for (unsigned i = 0; i < taskArraySize; i++) { if (taskArray[i]) taskArray[i]->GarbageCollect(process); } } void ProcessTaskData::GarbageCollect(ScanAddress *process) { saveVec.gcScan(process); if (stack != 0) { PolyObject *p = stack; process->ScanRuntimeAddress(&p, ScanAddress::STRENGTH_STRONG); stack = (StackObject*)p; } if (threadObject != 0) { PolyObject *p = threadObject; process->ScanRuntimeAddress(&p, ScanAddress::STRENGTH_STRONG); threadObject = (ThreadObject*)p; } if (blockMutex != 0) process->ScanRuntimeAddress(&blockMutex, ScanAddress::STRENGTH_STRONG); // The allocation spaces are no longer valid. allocPointer = 0; allocLimit = 0; // Divide the allocation size by four. If we have made a single allocation // since the last GC the size will have been doubled after the allocation. // On average for each thread, apart from the one that ran out of space // and requested the GC, half of the space will be unused so reducing by // four should give a good estimate for next time. if (allocCount != 0) { // Do this only once for each GC. allocCount = 0; allocSize = allocSize/4; if (allocSize < MIN_HEAP_SIZE) allocSize = MIN_HEAP_SIZE; } } polyml.5.2.1/libpolyml/processes.h0000644000175000017500000001603110760751400016157 0ustar daviddavid/* Title: Lightweight process library Author: David C.J. Matthews Copyright (c) 2007,8 David C.J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef _PROCESSES_H_ #define _PROCESSES_H_ #ifdef WIN32 #include "winconfig.h" #else #include "config.h" #endif #include "globals.h" #include "rts_module.h" #include "save_vec.h" #include "noreturn.h" class SaveVecEntry; typedef SaveVecEntry *Handle; class StackObject; class PolyWord; class ScanAddress; class MDTaskData; class Exporter; #define MIN_HEAP_SIZE 4096 // Minimum and initial heap segment size (words) // This is the ML "thread identifier" object. The fields // are read and set by the ML code. class ThreadObject: public PolyObject { public: PolyWord index; // Tagged integer with the index into the taskArray // Not used by ML PolyWord flags; // Tagged integer containing flags indicating how interrupts // are handled. Set by ML but only by the thread itself PolyWord threadLocal; // Head of a list of thread-local store items. // Handled entirely by ML but only by the thread. PolyWord requestCopy; // A tagged integer copy of the "requests" field. // This is provided so that ML can easily test if there // is an interrupt pending. }; // Per-thread data. class TaskData { public: TaskData(); virtual ~TaskData(); void FillUnusedSpace(void); virtual void GarbageCollect(ScanAddress *process) = 0; virtual void Lock(void) = 0; virtual void Unlock(void) = 0; // Increment the allocation count and adjust the allocation size for // the next allocation. Doubles the allocation for next time. virtual void IncrementAllocationCount(void) { allocCount++; allocSize = allocSize*2; } MDTaskData *mdTaskData; // Machine-specific task data. SaveVec saveVec; PolyWord *allocPointer; // Allocation pointer - decremented towards... PolyWord *allocLimit; // ... lower limit of allocation POLYUNSIGNED allocSize; // The preferred heap segment size unsigned allocCount; // The number of allocations since the last GC StackObject *stack; ThreadObject *threadObject; // Pointer to the thread object. int lastError; // Last error from foreign code. Handle x_ehandle, y_ehandle; // Space to extend short precision args. void *signalStack; // Stack to handle interrupts (Unix only) bool pendingInterrupt; // The thread should trap into the RTS soon. private: PolyWord x_extend[2], y_extend[2]; SaveVecEntry x_extend_addr, y_extend_addr; }; NORETURNFN(extern Handle exitThread(TaskData *mdTaskData)); Handle AtomicIncrement(TaskData *taskData, Handle mutexp); Handle AtomicDecrement(TaskData *taskData, Handle mutexp); Handle ThreadSelf(TaskData *taskData); Handle ThreadDispatch(TaskData *taskData, Handle args, Handle code); class ScanAddress; // Data structure used for requests from a thread to the root // thread. These are GCs or similar. class MainThreadRequest { public: MainThreadRequest (): completed(false) {} virtual ~MainThreadRequest () {} // Suppress silly GCC warning bool completed; virtual void Perform() = 0; }; class PLock; // External interface to the Process module. These functions are all implemented // by the Processes class. class ProcessExternal { public: virtual ~ProcessExternal() {} // Defined to suppress a warning from GCC virtual TaskData *GetTaskDataForThread(void) = 0; // Request all ML threads to exit and set the result code. Does not cause // the calling thread itself to exit since this may be called on the GUI thread. virtual void Exit(int n) = 0; // Exit from this thread. virtual NORETURNFN(void ThreadExit(TaskData *taskData)) = 0; virtual void BroadcastInterrupt(void) = 0; virtual void BeginRootThread(PolyObject *rootFunction) = 0; // Called when a thread may block. Never returns. May cause a retry. virtual NORETURNFN(void BlockAndRestart(TaskData *taskData, int fd, bool posixInterruptable, int ioCall)) = 0; // Called when a thread may block. Returns some time later when perhaps // the input is available. virtual void ThreadPauseForIO(TaskData *taskData, int fd) = 0; // As ThreadPauseForIO but when there is no file descriptor virtual void ThreadPause(TaskData *taskData) { ThreadPauseForIO(taskData, -1); } // If a thread is blocking for some time it should release its use // of the ML memory. That allows a GC. ThreadUseMLMemory returns true if // a GC was in progress. virtual void ThreadUseMLMemory(TaskData *taskData) = 0; virtual void ThreadReleaseMLMemory(TaskData *taskData) = 0; // Requests from the threads for actions that need to be performed by // the root thread. virtual void MakeRootRequest(TaskData *taskData, MainThreadRequest *request) = 0; // Deal with any interrupt or kill requests. virtual bool ProcessAsynchRequests(TaskData *taskData) = 0; // Process an interrupt request synchronously. virtual void TestSynchronousRequests(TaskData *taskData) = 0; // ForkFromRTS. Creates a new thread from within the RTS. virtual bool ForkFromRTS(TaskData *taskData, Handle proc, Handle arg) = 0; // Profiling control. virtual void StartProfiling(void) = 0; virtual void StopProfiling(void) = 0; // Find space for an object. Returns a pointer to the start. "words" must include // the length word and the result points at where the length word will go. // If the allocation succeeds it may update the allocation values in the taskData object. // If the heap is exhausted it may set this thread (or other threads) to raise an exception. virtual PolyWord *FindAllocationSpace(TaskData *taskData, POLYUNSIGNED words, bool alwaysInSeg) = 0; // Signal handling support. The ML signal handler thread blocks until it is // woken up by the signal detection thread. virtual bool WaitForSignal(TaskData *taskData, PLock *sigLock) = 0; virtual void SignalArrived(void) = 0; // After a Unix fork we only have a single thread in the new process. virtual void SetSingleThreaded(void) = 0; }; extern ProcessExternal *processes; #define IO_SPACING 8 // This is a bit of a mess. #endif polyml.5.2.1/libpolyml/profiling.cpp0000644000175000017500000004213110751066777016515 0ustar daviddavid/* Title: Profiling Author: Dave Matthews, Cambridge University Computer Laboratory Copyright (c) 2000-7 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifdef WIN32 #include "winconfig.h" #else #include "config.h" #endif #ifdef HAVE_STDIO_H #include #endif #ifdef HAVE_ASSERT_H #include #define ASSERT(x) assert(x) #else #define ASSERT(x) 0 #endif #ifdef HAVE_SYS_PARAM_H #include #endif #ifdef HAVE_SYS_TIME_H #include #endif #ifdef HAVE_SIGNAL_H #include #endif #ifdef HAVE_ERRNO_H #include #endif #ifdef HAVE_FCNTL_H #include #endif #ifdef HAVE_UNISTD_H #include #endif #ifdef HAVE_STDLIB_H #include #endif #ifdef HAVE_STRING_H #include #endif #ifdef HAVE_LIMITS_H #include #endif /************************************************************************ * * Include runtime headers * ************************************************************************/ #include "globals.h" #include "sighandler.h" #include "arb.h" #include "machine_dep.h" #include "foreign.h" #include "diagnostics.h" #include "processes.h" #include "polystring.h" #include "profiling.h" #include "save_vec.h" #include "rts_module.h" #include "gc.h" // For gc_phase #include "memmgr.h" #include "scanaddrs.h" #include "locking.h" /******************************************************************************/ /* */ /* PROFILING SHARED DATA */ /* */ /******************************************************************************/ static POLYUNSIGNED gc_count1 = 0; static POLYUNSIGNED gc_count2 = 0; static POLYUNSIGNED gc_count3 = 0; static POLYUNSIGNED total_count = 0; static POLYUNSIGNED unknown_count = 0; ProfileMode profileMode; /* If Accumulated is added to one of the above profiling is only turned off by the next call with PROF_ACCUMULATED+PROF_OFF. This allows us to profile the compiler. */ #define PROF_ACCUMULATED 4 /******************************************************************************/ /* */ /* PROFILING FUNCTIONS */ /* */ /******************************************************************************/ typedef struct { POLYUNSIGNED count; PolyWord functionName; } PROFENTRY, *PPROFENTRY; /* Initial vector size. */ #define INITSIZE 40 /* This structure is used to retain count information. Whenever counting is turned off we go through the store checking for non-zero counts and build a table of the count with the name of the function. That is then sorted and printed. */ static struct { POLYUNSIGNED total; PPROFENTRY pTab; int size; int used; } P; // Lock to serialise updates of counts. Only used during update. // Not required when we print the counts since there's only one thread // running then. static PLock countLock; // Adds incr to the profile count for the function pointed at by // pc or by one of its callers. // This is called from a signal handler in the case of time profiling. void add_count(TaskData *taskData, POLYCODEPTR fpc, PolyWord *sp, int incr) { /* The first PC may be valid even if it's not a code pointer */ bool is_code = true; PolyWord pc = PolyWord::FromCodePtr(fpc); StackObject *stack = taskData->stack; PolyWord *endStack = stack->Offset(stack->Length()); /* First try the pc value we have been given - if that fails search down the stack to see if there is a return address we can use. */ for (;;) { /* Get the address of the code segment from the code pointer */ if (pc.IsCodePtr() || is_code) { is_code = false; // Check that the pc value is within the heap. It could be // in the assembly code. MemSpace *space = gMem.SpaceForAddress(pc.AsAddress()); if (space != 0) { PolyObject *ptr = ObjCodePtrToPtr(pc.AsCodePtr()); ASSERT(ptr->IsCodeObject()); PolyWord *consts = ptr->ConstPtrForCode(); if (consts[0] != TAGGED(0)) // Skip anonymous code. { PLocker locker(&countLock); ((POLYUNSIGNED*)consts)[-1] += incr; total_count += incr; return; } } /* else just fall through and try next candidate address */ } /* OBJ_IS_CODEPTR(pc) */ /* Find next candidate address */ if (sp < endStack) pc = *sp++; else /* Reached bottom of stack without finding valid code pointer */ { PLocker locker(&countLock); unknown_count += incr; total_count += incr; return; } } /* loop "forever" */ /*NOTREACHED*/ } /* newProfileEntry - return the address of an entry in the profile table, extending it if necessary. */ static PPROFENTRY newProfileEntry(void) { if (P.used == P.size) { if (P.size == 0) P.size = INITSIZE; else P.size += P.size/2; P.pTab = (PPROFENTRY)realloc(P.pTab, P.size*sizeof(PROFENTRY)); } return &P.pTab[P.used++]; } /* qsortTab - sort the profiling results by count. It could use the name as a secondary sort but that's probably unnecessary. I'm not sure that Quicksort is the best way of sorting the table since the values tend to be very unevenly spread, with a few large values and large numbers of very small values. */ static void qsortTab(int nStart, int nEnd) { int startPos, endPos; if (nEnd - nStart <= 1) return; if (nEnd - nStart == 2) { if (P.pTab[nStart].count > P.pTab[nStart+1].count) { /* Swap entries. */ PROFENTRY saved = P.pTab[nStart]; P.pTab[nStart] = P.pTab[nStart+1]; P.pTab[nStart+1] = saved; } return; } /* Three or more entries. */ startPos = nStart; endPos = nEnd-1; PROFENTRY median = P.pTab[startPos]; /* Use the first entry as the median. */ while (1) { while (endPos > startPos && P.pTab[endPos].count > median.count) endPos--; if (endPos == startPos) break; P.pTab[startPos++] = P.pTab[endPos]; if (endPos == startPos) break; while (endPos > startPos && P.pTab[startPos].count <= median.count) startPos++; if (endPos == startPos) break; P.pTab[endPos--] = P.pTab[startPos]; if (endPos == startPos) break; } P.pTab[startPos] = median; qsortTab(nStart, startPos); qsortTab(startPos+1, nEnd); } /* writeProfileResults - print out the saved results. */ static void writeProfileResults(void) { if (P.used != 0) { int i; /* Sort the table. */ qsortTab(0, P.used); /* Print it out. */ for (i = 0; i < P.used; i++) { PPROFENTRY pEnt = &P.pTab[i]; fprintf(stdout, "%10lu ", pEnt->count); print_string(pEnt->functionName); putc ('\n', stdout); } } free(P.pTab); P.pTab = 0; P.size = 0; P.used = 0; } // We don't use ScanAddress here because we're only interested in the // objects themselves not the addresses in them. static void PrintProfileCounts(PolyWord *bottom, PolyWord *top) { PolyWord *ptr = bottom; while (ptr < top) { ptr++; // Skip the length word PolyObject *obj = (PolyObject*)ptr; if (obj->ContainsForwardingPtr()) { // It's a forwarding pointer - get the length from the new location while (obj->ContainsForwardingPtr()) obj = obj->GetForwardingPtr(); ASSERT(obj->ContainsNormalLengthWord()); ptr += obj->Length(); } else { ASSERT(obj->ContainsNormalLengthWord()); if (obj->IsCodeObject()) { PolyWord *firstConstant = obj->ConstPtrForCode(); PolyWord name = firstConstant[0]; // The word before is an untagged count POLYUNSIGNED count = firstConstant[-1].AsUnsigned(); if (count != 0) { if (name != TAGGED(0)) { PPROFENTRY pEnt = newProfileEntry(); pEnt->count = count; // This should be a valid string which may be a single character. ASSERT(name.IsTagged() || name.AsObjPtr()->IsByteObject()); pEnt->functionName = name; } firstConstant[-1] = PolyWord::FromUnsigned(0); P.total += count; } /* count != 0 */ } /* code object */ ptr += obj->Length(); } /* else */ } /* while */ } /* This type is coercible to PolyString *. We can use static "pstrings" since we are not going to garbage collect while we are printing out the profiling information. */ static struct { POLYUNSIGNED length; char chars[40]; } psMarkPhase, psCopyPhase, psUpdatePhase, psGCTotal, psUnknown; static void printprofile(void) /* Print profiling information and reset profile counts. */ /* Profile counts are also reset by commit so that objects */ /* written to the persistent store always have zero counts. */ { PPROFENTRY pEnt; /* flush old user output before printing profile SPF 30/9/94 */ fflush (stdout); P.total = 0; P.used = 0; if (total_count != 0) { unsigned j; for (j = 0; j < gMem.npSpaces; j++) { MemSpace *space = gMem.pSpaces[j]; // Permanent areas are filled with objects from the bottom. PrintProfileCounts(space->bottom, space->top); // Bottom to top } for (j = 0; j < gMem.nlSpaces; j++) { LocalMemSpace *space = gMem.lSpaces[j]; // Local areas only have objects from the allocation pointer to the top. PrintProfileCounts(space->pointer, space->top); } } // else if we haven't actually had an interrupt avoid expensive scan of memory. if (gc_count1 || gc_count2 || gc_count3) { int gc_count = gc_count1 + gc_count2 + gc_count3; P.total += gc_count; total_count += gc_count; pEnt = newProfileEntry(); strcpy(psMarkPhase.chars, "GARBAGE COLLECTION (mark phase)"); psMarkPhase.length = strlen(psMarkPhase.chars); pEnt->count = gc_count1; pEnt->functionName = PolyWord::FromUnsigned((POLYUNSIGNED)&psMarkPhase); pEnt = newProfileEntry(); strcpy(psCopyPhase.chars, "GARBAGE COLLECTION (copy phase)"); psCopyPhase.length = strlen(psCopyPhase.chars); pEnt->count = gc_count2; pEnt->functionName = PolyWord::FromUnsigned((POLYUNSIGNED)&psCopyPhase); pEnt = newProfileEntry(); strcpy(psUpdatePhase.chars, "GARBAGE COLLECTION (update phase)"); psUpdatePhase.length = strlen(psUpdatePhase.chars); pEnt->count = gc_count3; pEnt->functionName = PolyWord::FromUnsigned((POLYUNSIGNED)&psUpdatePhase); pEnt = newProfileEntry(); strcpy(psGCTotal.chars, "GARBAGE COLLECTION (total)"); psGCTotal.length = strlen(psGCTotal.chars); pEnt->count = gc_count; pEnt->functionName = PolyWord::FromUnsigned((POLYUNSIGNED)&psGCTotal); gc_count1 = 0; gc_count2 = 0; gc_count3 = 0; } if (unknown_count) { total_count += unknown_count; P.total += unknown_count; pEnt = newProfileEntry(); strcpy(psUnknown.chars, "UNKNOWN"); psUnknown.length = strlen(psUnknown.chars); pEnt->count = unknown_count; pEnt->functionName = PolyWord::FromUnsigned((POLYUNSIGNED)&psUnknown); unknown_count = 0; } writeProfileResults(); if (total_count) { printf("\nTotal: %lu; Counted: %lu; Uncounted: %lu", total_count, P.total, total_count - P.total); total_count = 0; putc('\n', stdout); } /* flush profile before printing next user output SPF 30/9/94 */ fflush (stdout); } void handleProfileTrap(TaskData *taskData, SIGNALCONTEXT *context) { /* If we are in the garbage-collector add the count to "gc_count" otherwise try to find out where we are. */ switch (gc_phase) { case 0 : { if (taskData) { PolyWord *sp; POLYCODEPTR pc; if (machineDependent->GetPCandSPFromContext(taskData, context, sp, pc)) add_count(taskData, pc, sp, 1); else unknown_count++; } else unknown_count++; // On Mac OS X all virtual timer interrupts seem to be directed to the root thread // so all the counts will be "unknown". } break; case 1 : gc_count1++; break; case 2 : gc_count2++; break; case 3 : gc_count3++; break; default : unknown_count++; break; } } class ProfileRequest: public MainThreadRequest { public: ProfileRequest(unsigned prof): mode(prof) {} virtual void Perform(); unsigned mode; }; // To speed up testing whether profiling is off already we // maintain a variable that contains the global state. static unsigned profile_mode = 0; static PLock profLock; // Called from ML to control profiling. Handle profilerc(TaskData *taskData, Handle mode_handle) /* Profiler - generates statistical profiles of the code. The parameter is an integer which determines the value to be profiled. When profiler is called it always resets the profiling and prints out any values which have been accumulated. If the parameter is 0 this is all it does, if the parameter is 1 then it produces time profiling, if the parameter is 2 it produces store profiling. 3 - arbitrary precision emulation traps. */ { unsigned mode = get_C_ulong(taskData, DEREFWORDHANDLE(mode_handle)); { PLocker locker(&profLock); if (mode == profile_mode) // No change in mode = no-op return taskData->saveVec.push(TAGGED(0)); /* profiling 0 turns off profiling and prints results, but is ignored for profile_modes > 4. To get the accumulated results of these, set profiling to 4. */ if (mode == 0 && profile_mode > PROF_ACCUMULATED) return taskData->saveVec.push(TAGGED(0)); profile_mode = mode; } // All these actions are performed by the root thread. Only profile // printing needs to be performed with all the threads stopped but it's // simpler to serialise all requests. ProfileRequest request(mode); processes->MakeRootRequest(taskData, &request); return taskData->saveVec.push(TAGGED(0)); } // This is called from the root thread when all the ML threads have been paused. void ProfileRequest::Perform() { switch (mode & ~PROF_ACCUMULATED) { case kProfileOff: // Turn off old profiling mechanism and print out accumulated results profileMode = kProfileOff; processes->StopProfiling(); printprofile(); break; case kProfileTime: profileMode = kProfileTime; processes->StartProfiling(); break; case kProfileStoreAllocation: profileMode = kProfileStoreAllocation; break; case kProfileEmulation: profileMode = kProfileEmulation; break; default: /* do nothing */ break; } } /* profilerc */ class Profiling: public RtsModule { public: virtual void Init(void); }; // Declare this. It will be automatically added to the table. static Profiling profileModule; void Profiling::Init(void) { // Reset profiling counts. profileMode = kProfileOff; gc_count1 = 0; gc_count2 = 0; gc_count3 = 0; total_count = 0; unknown_count = 0; } polyml.5.2.1/libpolyml/profiling.h0000644000175000017500000000270610602661056016150 0ustar daviddavid/* Title: profiling.h Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef _PROFILING_H_DEFINED #define _PROFILING_H_DEFINED 1 class SaveVecEntry; typedef SaveVecEntry *Handle; class TaskData; // Current profiling mode typedef enum { kProfileOff = 0, kProfileTime, kProfileStoreAllocation, kProfileEmulation } ProfileMode; extern ProfileMode profileMode; #include "machine_dep.h" // For SIGNALCONTEXT extern void handleProfileTrap(TaskData *taskData, SIGNALCONTEXT *context); extern Handle profilerc(TaskData *taskData, Handle mode_handle); extern void add_count(TaskData *taskData, POLYCODEPTR pc, PolyWord *sp, int incr); #endif /* _PROFILING_H_DEFINED */ polyml.5.2.1/libpolyml/proper_io.cpp0000644000175000017500000000524510602661056016511 0ustar daviddavid/* Title: Wrap-arounds for I/O functions Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifdef WIN32 #include "winconfig.h" #else #include "config.h" #endif #ifdef HAVE_ERRNO_H #include #endif #ifdef HAVE_SYS_TYPES_H #include /* Freebsd 2.1 at least requires this before stat.h */ #endif #ifdef HAVE_SYS_STAT_H #include #endif #include "proper_io.h" // DCJM 11/5/06 - Do we really need this "fix" for a bug ten years ago in an OS that's // probably never used now? int proper_stat(char *filename, struct stat *fbp) { int res = stat(filename, fbp); while (res != 0 && errno == EINTR) { res = stat(filename, fbp); /* There's a bug in SunOS 5.3 (at least) whereby the stat following an interrupted stat call can give junk results (ENOENT on a real file). I suspect a timing-related problem on automounted file systems. So let's try one more time, just to be sure. SPF 16/12/96 */ if (res != 0) { res = stat(filename, fbp); } }; return res; } #ifndef WINDOWS_PC /* I don't know whether the same applies to lstat but we'll define it in the same way just in case. DCJM 16/5/00. */ int proper_lstat(char *filename, struct stat *fbp) { int res = lstat(filename, fbp); while (res != 0 && errno == EINTR) { res = lstat(filename, fbp); if (res != 0) { res = lstat(filename, fbp); } }; return res; } #endif /* There is a problem with getrusage on Solaris where it sometimes fails with EINTR. // This is despite the documentation which doesn't mention this and is probably because // it is implemented by opening a special device. We need to handle this and there's really // no harm in doing that on all (Unix) systems. DCJM 27/2/03. */ #ifndef WINDOWS_PC int proper_getrusage(int who, struct rusage *rusage) { while (1) { int res = getrusage(who, rusage); if (res == 0 || errno != EINTR) return res; } } #endif polyml.5.2.1/libpolyml/proper_io.h0000644000175000017500000000272610602661056016157 0ustar daviddavid/* Title: proper_io.h Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef _PROPER_IO_H_DEFINED #define _PROPER_IO_H_DEFINED 1 #ifdef WIN32 #include "winconfig.h" #else #include "config.h" #endif #ifdef HAVE_STDIO_H #include #endif #ifdef HAVE_SYS_TYPES_H #include #endif int proper_stat(char *, struct stat *); int proper_lstat(char *, struct stat *); #ifdef HAVE_GETRUSAGE #ifdef HAVE_SYS_TIME_H #include #endif #ifdef HAVE_SYS_RESOURCE_H #include #endif int proper_getrusage(int who, struct rusage *rusage); #endif #define proper_fwrite_chars(ptr,nchars,stream) (int)fwrite(ptr,1,nchars,stream) #endif /* _PROPER_IO_H_DEFINED */ polyml.5.2.1/libpolyml/realconv.cpp0000644000175000017500000020754110701431570016323 0ustar daviddavid/* Note: Although strtod and dtoa seem to be present on some systems they are not always included in the headers or in the libraries. DCJM 6/4/00 */ /**************************************************************** * * The author of this software is David M. Gay. * * Copyright (c) 1991, 2000, 2001 by Lucent Technologies. * * Permission to use, copy, modify, and distribute this software for any * purpose without fee is hereby granted, provided that this entire notice * is included in all copies of any software which is or includes a copy * or modification of this software and in all copies of the supporting * documentation for such software. * * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED * WARRANTY. IN PARTICULAR, NEITHER THE AUTHOR NOR LUCENT MAKES ANY * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY * OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE. * ***************************************************************/ /* Please send bug reports to David M. Gay (dmg at acm dot org, * with " at " changed at "@" and " dot " changed to "."). */ /* On a machine with IEEE extended-precision registers, it is * necessary to specify double-precision (53-bit) rounding precision * before invoking strtod or dtoa. If the machine uses (the equivalent * of) Intel 80x87 arithmetic, the call * _control87(PC_53, MCW_PC); * does this with many compilers. Whether this or another call is * appropriate depends on the compiler; for this to work, it may be * necessary to #include "float.h" or another system-dependent header * file. */ /* strtod for IEEE-, VAX-, and IBM-arithmetic machines. * * This strtod returns a nearest machine number to the input decimal * string (or sets errno to ERANGE). With IEEE arithmetic, ties are * broken by the IEEE round-even rule. Otherwise ties are broken by * biased rounding (add half and chop). * * Inspired loosely by William D. Clinger's paper "How to Read Floating * Point Numbers Accurately" [Proc. ACM SIGPLAN '90, pp. 92-101]. * * Modifications: * * 1. We only require IEEE, IBM, or VAX double-precision * arithmetic (not IEEE double-extended). * 2. We get by with floating-point arithmetic in a case that * Clinger missed -- when we're computing d * 10^n * for a small integer d and the integer n is not too * much larger than 22 (the maximum integer k for which * we can represent 10^k exactly), we may be able to * compute (d*10^k) * 10^(e-k) with just one roundoff. * 3. Rather than a bit-at-a-time adjustment of the binary * result in the hard case, we use floating-point * arithmetic to determine the adjustment to within * one bit; only in really hard cases do we need to * compute a second residual. * 4. Because of 3., we don't need a large table of powers of 10 * for ten-to-e (just some small tables, e.g. of 10^k * for 0 <= k <= 22). */ /* * #define IEEE_8087 for IEEE-arithmetic machines where the least * significant byte has the lowest address. * #define IEEE_MC68k for IEEE-arithmetic machines where the most * significant byte has the lowest address. * #define Long int on machines with 32-bit ints and 64-bit longs. * #define IBM for IBM mainframe-style floating-point arithmetic. * #define VAX for VAX-style floating-point arithmetic (D_floating). * #define No_leftright to omit left-right logic in fast floating-point * computation of dtoa. * #define Honor_FLT_ROUNDS if FLT_ROUNDS can assume the values 2 or 3 * and strtod and dtoa should round accordingly. * #define Check_FLT_ROUNDS if FLT_ROUNDS can assume the values 2 or 3 * and Honor_FLT_ROUNDS is not #defined. * #define RND_PRODQUOT to use rnd_prod and rnd_quot (assembly routines * that use extended-precision instructions to compute rounded * products and quotients) with IBM. * #define ROUND_BIASED for IEEE-format with biased rounding. * #define Inaccurate_Divide for IEEE-format with correctly rounded * products but inaccurate quotients, e.g., for Intel i860. * #define NO_LONG_LONG on machines that do not have a "long long" * integer type (of >= 64 bits). On such machines, you can * #define Just_16 to store 16 bits per 32-bit Long when doing * high-precision integer arithmetic. Whether this speeds things * up or slows things down depends on the machine and the number * being converted. If long long is available and the name is * something other than "long long", #define Llong to be the name, * and if "unsigned Llong" does not work as an unsigned version of * Llong, #define #ULLong to be the corresponding unsigned type. * #define KR_headers for old-style C function headers. * #define Bad_float_h if your system lacks a float.h or if it does not * define some or all of DBL_DIG, DBL_MAX_10_EXP, DBL_MAX_EXP, * FLT_RADIX, FLT_ROUNDS, and DBL_MAX. * #define MALLOC your_malloc, where your_malloc(n) acts like malloc(n) * if memory is available and otherwise does something you deem * appropriate. If MALLOC is undefined, malloc will be invoked * directly -- and assumed always to succeed. * #define Omit_Private_Memory to omit logic (added Jan. 1998) for making * memory allocations from a private pool of memory when possible. * When used, the private pool is PRIVATE_MEM bytes long: 2304 bytes, * unless #defined to be a different length. This default length * suffices to get rid of MALLOC calls except for unusual cases, * such as decimal-to-binary conversion of a very long string of * digits. The longest string dtoa can return is about 751 bytes * long. For conversions by strtod of strings of 800 digits and * all dtoa conversions in single-threaded executions with 8-byte * pointers, PRIVATE_MEM >= 7400 appears to suffice; with 4-byte * pointers, PRIVATE_MEM >= 7112 appears adequate. * #define INFNAN_CHECK on IEEE systems to cause strtod to check for * Infinity and NaN (case insensitively). On some systems (e.g., * some HP systems), it may be necessary to #define NAN_WORD0 * appropriately -- to the most significant word of a quiet NaN. * (On HP Series 700/800 machines, -DNAN_WORD0=0x7ff40000 works.) * When INFNAN_CHECK is #defined and No_Hex_NaN is not #defined, * strtod also accepts (case insensitively) strings of the form * NaN(x), where x is a string of hexadecimal digits and spaces; * if there is only one string of hexadecimal digits, it is taken * for the 52 fraction bits of the resulting NaN; if there are two * or more strings of hex digits, the first is for the high 20 bits, * the second and subsequent for the low 32 bits, with intervening * white space ignored; but if this results in none of the 52 * fraction bits being on (an IEEE Infinity symbol), then NAN_WORD0 * and NAN_WORD1 are used instead. * #define MULTIPLE_THREADS if the system offers preemptively scheduled * multiple threads. In this case, you must provide (or suitably * #define) two locks, acquired by ACQUIRE_DTOA_LOCK(n) and freed * by FREE_DTOA_LOCK(n) for n = 0 or 1. (The second lock, accessed * in pow5mult, ensures lazy evaluation of only one copy of high * powers of 5; omitting this lock would introduce a small * probability of wasting memory, but would otherwise be harmless.) * You must also invoke freedtoa(s) to free the value s returned by * dtoa. You may do so whether or not MULTIPLE_THREADS is #defined. * #define NO_IEEE_Scale to disable new (Feb. 1997) logic in strtod that * avoids underflows on inputs whose result does not underflow. * If you #define NO_IEEE_Scale on a machine that uses IEEE-format * floating-point numbers and flushes underflows to zero rather * than implementing gradual underflow, then you must also #define * Sudden_Underflow. * #define YES_ALIAS to permit aliasing certain double values with * arrays of ULongs. This leads to slightly better code with * some compilers and was always used prior to 19990916, but it * is not strictly legal and can cause trouble with aggressively * optimizing compilers (e.g., gcc 2.95.1 under -O2). * #define USE_LOCALE to use the current locale's decimal_point value. * #define SET_INEXACT if IEEE arithmetic is being used and extra * computation should be done to set the inexact flag when the * result is inexact and avoid setting inexact when the result * is exact. In this case, dtoa.c must be compiled in * an environment, perhaps provided by #include "dtoa.c" in a * suitable wrapper, that defines two functions, * int get_inexact(void); * void clear_inexact(void); * such that get_inexact() returns a nonzero value if the * inexact bit is already set, and clear_inexact() sets the * inexact bit to 0. When SET_INEXACT is #defined, strtod * also does extra computations to set the underflow and overflow * flags when appropriate (i.e., when the result is tiny and * inexact or when it is a numeric value rounded to +-infinity). * #define NO_ERRNO if strtod should not assign errno = ERANGE when * the result overflows to +-Infinity or underflows to 0. */ #ifdef WIN32 #include "winconfig.h" #else #include "config.h" #endif #ifdef HAVE_SYS_PARAM_H #include #endif #include "realconv.h" #include "locking.h" // Try to determine the byte order to set either IEEE_8087 or IEEE_MC68k #ifdef __BYTE_ORDER #if __BYTE_ORDER == __LITTLE_ENDIAN #define IEEE_8087 // Little endian #elif __BYTE_ORDER == __BIG_ENDIAN #define IEEE_MC68k // Big endian #endif #endif #if !defined(IEEE_8087) && ! defined(IEEE_MC68k) #if defined(WINDOWS_PC) || defined(HOSTARCHITECTURE_X86) || defined (__i386__) || defined (_M_IX86) || \ defined (vax) || defined (__alpha) #define IEEE_8087 #else #define IEEE_MC68k #endif #endif #if (SIZEOF_LONG == 8) // If "long" is the same size as "double" we need to define this. #define Long int #endif #ifndef HAVE_LONG_LONG #define NO_LONG_LONG #endif #ifndef Long #define Long long #endif #ifndef ULong typedef unsigned Long ULong; #endif #ifdef DEBUG #include "stdio.h" #define Bug(x) {fprintf(stderr, "%s\n", x); exit(1);} #endif #include "stdlib.h" #include "string.h" #ifdef USE_LOCALE #include "locale.h" #endif #ifdef MALLOC #ifdef KR_headers extern char *MALLOC(); #else extern void *MALLOC(size_t); #endif #else #define MALLOC malloc #endif #ifndef Omit_Private_Memory #ifndef PRIVATE_MEM #define PRIVATE_MEM 2304 #endif #define PRIVATE_mem ((PRIVATE_MEM+sizeof(double)-1)/sizeof(double)) static double private_mem[PRIVATE_mem], *pmem_next = private_mem; #endif #undef IEEE_Arith #undef Avoid_Underflow #ifdef IEEE_MC68k #define IEEE_Arith #endif #ifdef IEEE_8087 #define IEEE_Arith #endif #include "errno.h" #ifdef Bad_float_h #ifdef IEEE_Arith #define DBL_DIG 15 #define DBL_MAX_10_EXP 308 #define DBL_MAX_EXP 1024 #define FLT_RADIX 2 #endif /*IEEE_Arith*/ #ifdef IBM #define DBL_DIG 16 #define DBL_MAX_10_EXP 75 #define DBL_MAX_EXP 63 #define FLT_RADIX 16 #define DBL_MAX 7.2370055773322621e+75 #endif #ifdef VAX #define DBL_DIG 16 #define DBL_MAX_10_EXP 38 #define DBL_MAX_EXP 127 #define FLT_RADIX 2 #define DBL_MAX 1.7014118346046923e+38 #endif #ifndef LONG_MAX #define LONG_MAX 2147483647 #endif #else /* ifndef Bad_float_h */ #include "float.h" #endif /* Bad_float_h */ #ifndef __MATH_H__ #include "math.h" #endif #ifdef __cplusplus extern "C" { #endif #ifndef CONST #ifdef KR_headers #define CONST /* blank */ #else #define CONST const #endif #endif #if defined(IEEE_8087) + defined(IEEE_MC68k) + defined(VAX) + defined(IBM) != 1 Exactly one of IEEE_8087, IEEE_MC68k, VAX, or IBM should be defined. #endif typedef union { double d; ULong L[2]; } U; #ifdef YES_ALIAS #define dval(x) x #ifdef IEEE_8087 #define word0(x) ((ULong *)&x)[1] #define word1(x) ((ULong *)&x)[0] #else #define word0(x) ((ULong *)&x)[0] #define word1(x) ((ULong *)&x)[1] #endif #else #ifdef IEEE_8087 #define word0(x) ((U*)&x)->L[1] #define word1(x) ((U*)&x)->L[0] #else #define word0(x) ((U*)&x)->L[0] #define word1(x) ((U*)&x)->L[1] #endif #define dval(x) ((U*)&x)->d #endif /* The following definition of Storeinc is appropriate for MIPS processors. * An alternative that might be better on some machines is * #define Storeinc(a,b,c) (*a++ = b << 16 | c & 0xffff) */ #if defined(IEEE_8087) + defined(VAX) #define Storeinc(a,b,c) (((unsigned short *)a)[1] = (unsigned short)b, \ ((unsigned short *)a)[0] = (unsigned short)c, a++) #else #define Storeinc(a,b,c) (((unsigned short *)a)[0] = (unsigned short)b, \ ((unsigned short *)a)[1] = (unsigned short)c, a++) #endif /* #define P DBL_MANT_DIG */ /* Ten_pmax = floor(P*log(2)/log(5)) */ /* Bletch = (highest power of 2 < DBL_MAX_10_EXP) / 16 */ /* Quick_max = floor((P-1)*log(FLT_RADIX)/log(10) - 1) */ /* Int_max = floor(P*log(FLT_RADIX)/log(10) - 1) */ #ifdef IEEE_Arith #define Exp_shift 20 #define Exp_shift1 20 #define Exp_msk1 0x100000 #define Exp_msk11 0x100000 #define Exp_mask 0x7ff00000 #define P 53 #define Bias 1023 #define Emin (-1022) #define Exp_1 0x3ff00000 #define Exp_11 0x3ff00000 #define Ebits 11 #define Frac_mask 0xfffff #define Frac_mask1 0xfffff #define Ten_pmax 22 #define Bletch 0x10 #define Bndry_mask 0xfffff #define Bndry_mask1 0xfffff #define LSB 1 #define Sign_bit 0x80000000 #define Log2P 1 #define Tiny0 0 #define Tiny1 1 #define Quick_max 14 #define Int_max 14 #ifndef NO_IEEE_Scale #define Avoid_Underflow #ifdef Flush_Denorm /* debugging option */ #undef Sudden_Underflow #endif #endif #ifndef Flt_Rounds #ifdef FLT_ROUNDS #define Flt_Rounds FLT_ROUNDS #else #define Flt_Rounds 1 #endif #endif /*Flt_Rounds*/ #ifdef Honor_FLT_ROUNDS #define Rounding rounding #undef Check_FLT_ROUNDS #define Check_FLT_ROUNDS #else #define Rounding Flt_Rounds #endif #else /* ifndef IEEE_Arith */ #undef Check_FLT_ROUNDS #undef Honor_FLT_ROUNDS #undef SET_INEXACT #undef Sudden_Underflow #define Sudden_Underflow #ifdef IBM #undef Flt_Rounds #define Flt_Rounds 0 #define Exp_shift 24 #define Exp_shift1 24 #define Exp_msk1 0x1000000 #define Exp_msk11 0x1000000 #define Exp_mask 0x7f000000 #define P 14 #define Bias 65 #define Exp_1 0x41000000 #define Exp_11 0x41000000 #define Ebits 8 /* exponent has 7 bits, but 8 is the right value in b2d */ #define Frac_mask 0xffffff #define Frac_mask1 0xffffff #define Bletch 4 #define Ten_pmax 22 #define Bndry_mask 0xefffff #define Bndry_mask1 0xffffff #define LSB 1 #define Sign_bit 0x80000000 #define Log2P 4 #define Tiny0 0x100000 #define Tiny1 0 #define Quick_max 14 #define Int_max 15 #else /* VAX */ #undef Flt_Rounds #define Flt_Rounds 1 #define Exp_shift 23 #define Exp_shift1 7 #define Exp_msk1 0x80 #define Exp_msk11 0x800000 #define Exp_mask 0x7f80 #define P 56 #define Bias 129 #define Exp_1 0x40800000 #define Exp_11 0x4080 #define Ebits 8 #define Frac_mask 0x7fffff #define Frac_mask1 0xffff007f #define Ten_pmax 24 #define Bletch 2 #define Bndry_mask 0xffff007f #define Bndry_mask1 0xffff007f #define LSB 0x10000 #define Sign_bit 0x8000 #define Log2P 1 #define Tiny0 0x80 #define Tiny1 0 #define Quick_max 15 #define Int_max 15 #endif /* IBM, VAX */ #endif /* IEEE_Arith */ #ifndef IEEE_Arith #define ROUND_BIASED #endif #ifdef RND_PRODQUOT #define rounded_product(a,b) a = rnd_prod(a, b) #define rounded_quotient(a,b) a = rnd_quot(a, b) #ifdef KR_headers extern double rnd_prod(), rnd_quot(); #else extern double rnd_prod(double, double), rnd_quot(double, double); #endif #else #define rounded_product(a,b) a *= b #define rounded_quotient(a,b) a /= b #endif #define Big0 (Frac_mask1 | Exp_msk1*(DBL_MAX_EXP+Bias-1)) #define Big1 0xffffffff #ifndef Pack_32 #define Pack_32 #endif #ifdef KR_headers #define FFFFFFFF ((((unsigned long)0xffff)<<16)|(unsigned long)0xffff) #else #define FFFFFFFF 0xffffffffUL #endif #ifdef NO_LONG_LONG #undef ULLong #ifdef Just_16 #undef Pack_32 /* When Pack_32 is not defined, we store 16 bits per 32-bit Long. * This makes some inner loops simpler and sometimes saves work * during multiplications, but it often seems to make things slightly * slower. Hence the default is now to store 32 bits per Long. */ #endif #else /* long long available */ #ifndef Llong #define Llong long long #endif #ifndef ULLong #define ULLong unsigned Llong #endif #endif /* NO_LONG_LONG */ #define MULTIPLE_THREADS static PLock dtoaLocks[2]; #define ACQUIRE_DTOA_LOCK(n) { dtoaLocks[n].Lock(); } #define FREE_DTOA_LOCK(n) { dtoaLocks[n].Unlock(); } #ifndef MULTIPLE_THREADS #define ACQUIRE_DTOA_LOCK(n) /*nothing*/ #define FREE_DTOA_LOCK(n) /*nothing*/ #endif #define Kmax 15 #ifdef __cplusplus extern "C" double strtod(const char *s00, char **se); extern "C" char *dtoa(double d, int mode, int ndigits, int *decpt, int *sign, char **rve); #endif struct Bigint { struct Bigint *next; int k, maxwds, sign, wds; ULong x[1]; }; typedef struct Bigint Bigint; static Bigint *freelist[Kmax+1]; static Bigint * Balloc #ifdef KR_headers (k) int k; #else (int k) #endif { int x; Bigint *rv; #ifndef Omit_Private_Memory unsigned int len; #endif ACQUIRE_DTOA_LOCK(0); if ((rv = freelist[k])) { freelist[k] = rv->next; } else { x = 1 << k; #ifdef Omit_Private_Memory rv = (Bigint *)MALLOC(sizeof(Bigint) + (x-1)*sizeof(ULong)); #else len = (sizeof(Bigint) + (x-1)*sizeof(ULong) + sizeof(double) - 1) /sizeof(double); if (pmem_next - private_mem + len <= PRIVATE_mem) { rv = (Bigint*)pmem_next; pmem_next += len; } else rv = (Bigint*)MALLOC(len*sizeof(double)); #endif rv->k = k; rv->maxwds = x; } FREE_DTOA_LOCK(0); rv->sign = rv->wds = 0; return rv; } static void Bfree #ifdef KR_headers (v) Bigint *v; #else (Bigint *v) #endif { if (v) { ACQUIRE_DTOA_LOCK(0); v->next = freelist[v->k]; freelist[v->k] = v; FREE_DTOA_LOCK(0); } } #define Bcopy(x,y) memcpy((char *)&x->sign, (char *)&y->sign, \ y->wds*sizeof(Long) + 2*sizeof(int)) static Bigint * multadd #ifdef KR_headers (b, m, a) Bigint *b; int m, a; #else (Bigint *b, int m, int a) /* multiply by m and add a */ #endif { int i, wds; #ifdef ULLong ULong *x; ULLong carry, y; #else ULong carry, *x, y; #ifdef Pack_32 ULong xi, z; #endif #endif Bigint *b1; wds = b->wds; x = b->x; i = 0; carry = a; do { #ifdef ULLong y = *x * (ULLong)m + carry; carry = y >> 32; *x++ = y & FFFFFFFF; #else #ifdef Pack_32 xi = *x; y = (xi & 0xffff) * m + carry; z = (xi >> 16) * m + (y >> 16); carry = z >> 16; *x++ = (z << 16) + (y & 0xffff); #else y = *x * m + carry; carry = y >> 16; *x++ = y & 0xffff; #endif #endif } while(++i < wds); if (carry) { if (wds >= b->maxwds) { b1 = Balloc(b->k+1); Bcopy(b1, b); Bfree(b); b = b1; } b->x[wds++] = carry; b->wds = wds; } return b; } #ifndef HAVE_STRTOD static Bigint * s2b #ifdef KR_headers (s, nd0, nd, y9) CONST char *s; int nd0, nd; ULong y9; #else (CONST char *s, int nd0, int nd, ULong y9) #endif { Bigint *b; int i, k; Long x, y; x = (nd + 8) / 9; for(k = 0, y = 1; x > y; y <<= 1, k++) ; #ifdef Pack_32 b = Balloc(k); b->x[0] = y9; b->wds = 1; #else b = Balloc(k+1); b->x[0] = y9 & 0xffff; b->wds = (b->x[1] = y9 >> 16) ? 2 : 1; #endif i = 9; if (9 < nd0) { s += 9; do b = multadd(b, 10, *s++ - '0'); while(++i < nd0); s++; } else s += 10; for(; i < nd; i++) b = multadd(b, 10, *s++ - '0'); return b; } #endif // HAVE_STRTOD static int hi0bits #ifdef KR_headers (x) register ULong x; #else (register ULong x) #endif { register int k = 0; if (!(x & 0xffff0000)) { k = 16; x <<= 16; } if (!(x & 0xff000000)) { k += 8; x <<= 8; } if (!(x & 0xf0000000)) { k += 4; x <<= 4; } if (!(x & 0xc0000000)) { k += 2; x <<= 2; } if (!(x & 0x80000000)) { k++; if (!(x & 0x40000000)) return 32; } return k; } static int lo0bits #ifdef KR_headers (y) ULong *y; #else (ULong *y) #endif { register int k; register ULong x = *y; if (x & 7) { if (x & 1) return 0; if (x & 2) { *y = x >> 1; return 1; } *y = x >> 2; return 2; } k = 0; if (!(x & 0xffff)) { k = 16; x >>= 16; } if (!(x & 0xff)) { k += 8; x >>= 8; } if (!(x & 0xf)) { k += 4; x >>= 4; } if (!(x & 0x3)) { k += 2; x >>= 2; } if (!(x & 1)) { k++; x >>= 1; if (!x) return 32; } *y = x; return k; } static Bigint * i2b #ifdef KR_headers (i) int i; #else (int i) #endif { Bigint *b; b = Balloc(1); b->x[0] = i; b->wds = 1; return b; } static Bigint * mult #ifdef KR_headers (a, b) Bigint *a, *b; #else (Bigint *a, Bigint *b) #endif { Bigint *c; int k, wa, wb, wc; ULong *x, *xa, *xae, *xb, *xbe, *xc, *xc0; ULong y; #ifdef ULLong ULLong carry, z; #else ULong carry, z; #ifdef Pack_32 ULong z2; #endif #endif if (a->wds < b->wds) { c = a; a = b; b = c; } k = a->k; wa = a->wds; wb = b->wds; wc = wa + wb; if (wc > a->maxwds) k++; c = Balloc(k); for(x = c->x, xa = x + wc; x < xa; x++) *x = 0; xa = a->x; xae = xa + wa; xb = b->x; xbe = xb + wb; xc0 = c->x; #ifdef ULLong for(; xb < xbe; xc0++) { if ((y = *xb++)) { x = xa; xc = xc0; carry = 0; do { z = *x++ * (ULLong)y + *xc + carry; carry = z >> 32; *xc++ = z & FFFFFFFF; } while(x < xae); *xc = carry; } } #else #ifdef Pack_32 for(; xb < xbe; xb++, xc0++) { if (y = *xb & 0xffff) { x = xa; xc = xc0; carry = 0; do { z = (*x & 0xffff) * y + (*xc & 0xffff) + carry; carry = z >> 16; z2 = (*x++ >> 16) * y + (*xc >> 16) + carry; carry = z2 >> 16; Storeinc(xc, z2, z); } while(x < xae); *xc = carry; } if (y = *xb >> 16) { x = xa; xc = xc0; carry = 0; z2 = *xc; do { z = (*x & 0xffff) * y + (*xc >> 16) + carry; carry = z >> 16; Storeinc(xc, z, z2); z2 = (*x++ >> 16) * y + (*xc & 0xffff) + carry; carry = z2 >> 16; } while(x < xae); *xc = z2; } } #else for(; xb < xbe; xc0++) { if (y = *xb++) { x = xa; xc = xc0; carry = 0; do { z = *x++ * y + *xc + carry; carry = z >> 16; *xc++ = z & 0xffff; } while(x < xae); *xc = carry; } } #endif #endif for(xc0 = c->x, xc = xc0 + wc; wc > 0 && !*--xc; --wc) ; c->wds = wc; return c; } static Bigint *p5s; static Bigint * pow5mult #ifdef KR_headers (b, k) Bigint *b; int k; #else (Bigint *b, int k) #endif { Bigint *b1, *p5, *p51; int i; static int p05[3] = { 5, 25, 125 }; if ((i = k & 3)) b = multadd(b, p05[i-1], 0); if (!(k >>= 2)) return b; if (!(p5 = p5s)) { /* first time */ #ifdef MULTIPLE_THREADS ACQUIRE_DTOA_LOCK(1); if (!(p5 = p5s)) { p5 = p5s = i2b(625); p5->next = 0; } FREE_DTOA_LOCK(1); #else p5 = p5s = i2b(625); p5->next = 0; #endif } for(;;) { if (k & 1) { b1 = mult(b, p5); Bfree(b); b = b1; } if (!(k >>= 1)) break; if (!(p51 = p5->next)) { #ifdef MULTIPLE_THREADS ACQUIRE_DTOA_LOCK(1); if (!(p51 = p5->next)) { p51 = p5->next = mult(p5,p5); p51->next = 0; } FREE_DTOA_LOCK(1); #else p51 = p5->next = mult(p5,p5); p51->next = 0; #endif } p5 = p51; } return b; } static Bigint * lshift #ifdef KR_headers (b, k) Bigint *b; int k; #else (Bigint *b, int k) #endif { int i, k1, n, n1; Bigint *b1; ULong *x, *x1, *xe, z; #ifdef Pack_32 n = k >> 5; #else n = k >> 4; #endif k1 = b->k; n1 = n + b->wds + 1; for(i = b->maxwds; n1 > i; i <<= 1) k1++; b1 = Balloc(k1); x1 = b1->x; for(i = 0; i < n; i++) *x1++ = 0; x = b->x; xe = x + b->wds; #ifdef Pack_32 if (k &= 0x1f) { k1 = 32 - k; z = 0; do { *x1++ = *x << k | z; z = *x++ >> k1; } while(x < xe); if ((*x1 = z)) ++n1; } #else if (k &= 0xf) { k1 = 16 - k; z = 0; do { *x1++ = *x << k & 0xffff | z; z = *x++ >> k1; } while(x < xe); if (*x1 = z) ++n1; } #endif else do *x1++ = *x++; while(x < xe); b1->wds = n1 - 1; Bfree(b); return b1; } static int cmp #ifdef KR_headers (a, b) Bigint *a, *b; #else (Bigint *a, Bigint *b) #endif { ULong *xa, *xa0, *xb, *xb0; int i, j; i = a->wds; j = b->wds; #ifdef DEBUG if (i > 1 && !a->x[i-1]) Bug("cmp called with a->x[a->wds-1] == 0"); if (j > 1 && !b->x[j-1]) Bug("cmp called with b->x[b->wds-1] == 0"); #endif if (i -= j) return i; xa0 = a->x; xa = xa0 + j; xb0 = b->x; xb = xb0 + j; for(;;) { if (*--xa != *--xb) return *xa < *xb ? -1 : 1; if (xa <= xa0) break; } return 0; } static Bigint * diff #ifdef KR_headers (a, b) Bigint *a, *b; #else (Bigint *a, Bigint *b) #endif { Bigint *c; int i, wa, wb; ULong *xa, *xae, *xb, *xbe, *xc; #ifdef ULLong ULLong borrow, y; #else ULong borrow, y; #ifdef Pack_32 ULong z; #endif #endif i = cmp(a,b); if (!i) { c = Balloc(0); c->wds = 1; c->x[0] = 0; return c; } if (i < 0) { c = a; a = b; b = c; i = 1; } else i = 0; c = Balloc(a->k); c->sign = i; wa = a->wds; xa = a->x; xae = xa + wa; wb = b->wds; xb = b->x; xbe = xb + wb; xc = c->x; borrow = 0; #ifdef ULLong do { y = (ULLong)*xa++ - *xb++ - borrow; borrow = y >> 32 & (ULong)1; *xc++ = y & FFFFFFFF; } while(xb < xbe); while(xa < xae) { y = *xa++ - borrow; borrow = y >> 32 & (ULong)1; *xc++ = y & FFFFFFFF; } #else #ifdef Pack_32 do { y = (*xa & 0xffff) - (*xb & 0xffff) - borrow; borrow = (y & 0x10000) >> 16; z = (*xa++ >> 16) - (*xb++ >> 16) - borrow; borrow = (z & 0x10000) >> 16; Storeinc(xc, z, y); } while(xb < xbe); while(xa < xae) { y = (*xa & 0xffff) - borrow; borrow = (y & 0x10000) >> 16; z = (*xa++ >> 16) - borrow; borrow = (z & 0x10000) >> 16; Storeinc(xc, z, y); } #else do { y = *xa++ - *xb++ - borrow; borrow = (y & 0x10000) >> 16; *xc++ = y & 0xffff; } while(xb < xbe); while(xa < xae) { y = *xa++ - borrow; borrow = (y & 0x10000) >> 16; *xc++ = y & 0xffff; } #endif #endif while(!*--xc) wa--; c->wds = wa; return c; } #ifndef HAVE_STRTOD static double ulp #ifdef KR_headers (x) double x; #else (double x) #endif { register Long L; double a; L = (word0(x) & Exp_mask) - (P-1)*Exp_msk1; #ifndef Avoid_Underflow #ifndef Sudden_Underflow if (L > 0) { #endif #endif #ifdef IBM L |= Exp_msk1 >> 4; #endif word0(a) = L; word1(a) = 0; #ifndef Avoid_Underflow #ifndef Sudden_Underflow } else { L = -L >> Exp_shift; if (L < Exp_shift) { word0(a) = 0x80000 >> L; word1(a) = 0; } else { word0(a) = 0; L -= Exp_shift; word1(a) = L >= 31 ? 1 : 1 << 31 - L; } } #endif #endif return dval(a); } static double b2d #ifdef KR_headers (a, e) Bigint *a; int *e; #else (Bigint *a, int *e) #endif { ULong *xa, *xa0, w, y, z; int k; double d; #ifdef VAX ULong d0, d1; #else #define d0 word0(d) #define d1 word1(d) #endif xa0 = a->x; xa = xa0 + a->wds; y = *--xa; #ifdef DEBUG if (!y) Bug("zero y in b2d"); #endif k = hi0bits(y); *e = 32 - k; #ifdef Pack_32 if (k < Ebits) { d0 = Exp_1 | y >> Ebits - k; w = xa > xa0 ? *--xa : 0; d1 = y << (32-Ebits) + k | w >> Ebits - k; goto ret_d; } z = xa > xa0 ? *--xa : 0; if (k -= Ebits) { d0 = Exp_1 | y << k | z >> 32 - k; y = xa > xa0 ? *--xa : 0; d1 = z << k | y >> 32 - k; } else { d0 = Exp_1 | y; d1 = z; } #else if (k < Ebits + 16) { z = xa > xa0 ? *--xa : 0; d0 = Exp_1 | y << k - Ebits | z >> Ebits + 16 - k; w = xa > xa0 ? *--xa : 0; y = xa > xa0 ? *--xa : 0; d1 = z << k + 16 - Ebits | w << k - Ebits | y >> 16 + Ebits - k; goto ret_d; } z = xa > xa0 ? *--xa : 0; w = xa > xa0 ? *--xa : 0; k -= Ebits + 16; d0 = Exp_1 | y << k + 16 | z << k | w >> 16 - k; y = xa > xa0 ? *--xa : 0; d1 = w << k + 16 | y << k; #endif ret_d: #ifdef VAX word0(d) = d0 >> 16 | d0 << 16; word1(d) = d1 >> 16 | d1 << 16; #else #undef d0 #undef d1 #endif return dval(d); } #endif // HAVE_STRTOD static Bigint * d2b #ifdef KR_headers (d, e, bits) double d; int *e, *bits; #else (double d, int *e, int *bits) #endif { Bigint *b; int de, k; ULong *x, y, z; #ifndef Sudden_Underflow int i; #endif #ifdef VAX ULong d0, d1; d0 = word0(d) >> 16 | word0(d) << 16; d1 = word1(d) >> 16 | word1(d) << 16; #else #define d0 word0(d) #define d1 word1(d) #endif #ifdef Pack_32 b = Balloc(1); #else b = Balloc(2); #endif x = b->x; z = d0 & Frac_mask; d0 &= 0x7fffffff; /* clear sign bit, which we ignore */ #ifdef Sudden_Underflow de = (int)(d0 >> Exp_shift); #ifndef IBM z |= Exp_msk11; #endif #else if ((de = (int)(d0 >> Exp_shift))) z |= Exp_msk1; #endif #ifdef Pack_32 if ((y = d1)) { if ((k = lo0bits(&y))) { x[0] = y | z << (32 - k); z >>= k; } else x[0] = y; #ifndef Sudden_Underflow i = #endif b->wds = (x[1] = z) ? 2 : 1; } else { #ifdef DEBUG if (!z) Bug("Zero passed to d2b"); #endif k = lo0bits(&z); x[0] = z; #ifndef Sudden_Underflow i = #endif b->wds = 1; k += 32; } #else if (y = d1) { if (k = lo0bits(&y)) if (k >= 16) { x[0] = y | z << 32 - k & 0xffff; x[1] = z >> k - 16 & 0xffff; x[2] = z >> k; i = 2; } else { x[0] = y & 0xffff; x[1] = y >> 16 | z << 16 - k & 0xffff; x[2] = z >> k & 0xffff; x[3] = z >> k+16; i = 3; } else { x[0] = y & 0xffff; x[1] = y >> 16; x[2] = z & 0xffff; x[3] = z >> 16; i = 3; } } else { #ifdef DEBUG if (!z) Bug("Zero passed to d2b"); #endif k = lo0bits(&z); if (k >= 16) { x[0] = z; i = 0; } else { x[0] = z & 0xffff; x[1] = z >> 16; i = 1; } k += 32; } while(!x[i]) --i; b->wds = i + 1; #endif #ifndef Sudden_Underflow if (de) { #endif #ifdef IBM *e = (de - Bias - (P-1) << 2) + k; *bits = 4*P + 8 - k - hi0bits(word0(d) & Frac_mask); #else *e = de - Bias - (P-1) + k; *bits = P - k; #endif #ifndef Sudden_Underflow } else { *e = de - Bias - (P-1) + 1 + k; #ifdef Pack_32 *bits = 32*i - hi0bits(x[i-1]); #else *bits = (i+2)*16 - hi0bits(x[i]); #endif } #endif return b; } #undef d0 #undef d1 #ifndef HAVE_STRTOD static double ratio #ifdef KR_headers (a, b) Bigint *a, *b; #else (Bigint *a, Bigint *b) #endif { double da, db; int k, ka, kb; dval(da) = b2d(a, &ka); dval(db) = b2d(b, &kb); #ifdef Pack_32 k = ka - kb + 32*(a->wds - b->wds); #else k = ka - kb + 16*(a->wds - b->wds); #endif #ifdef IBM if (k > 0) { word0(da) += (k >> 2)*Exp_msk1; if (k &= 3) dval(da) *= 1 << k; } else { k = -k; word0(db) += (k >> 2)*Exp_msk1; if (k &= 3) dval(db) *= 1 << k; } #else if (k > 0) word0(da) += k*Exp_msk1; else { k = -k; word0(db) += k*Exp_msk1; } #endif return dval(da) / dval(db); } #endif // HAVE_STRTOD static CONST double tens[] = { 1e0, 1e1, 1e2, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, 1e10, 1e11, 1e12, 1e13, 1e14, 1e15, 1e16, 1e17, 1e18, 1e19, 1e20, 1e21, 1e22 #ifdef VAX , 1e23, 1e24 #endif }; static CONST double #ifdef IEEE_Arith bigtens[] = { 1e16, 1e32, 1e64, 1e128, 1e256 }; #ifndef HAVE_STRTOD static CONST double tinytens[] = { 1e-16, 1e-32, 1e-64, 1e-128, #ifdef Avoid_Underflow 9007199254740992.*9007199254740992.e-256 /* = 2^106 * 1e-53 */ #else 1e-256 #endif }; #endif /* The factor of 2^53 in tinytens[4] helps us avoid setting the underflow */ /* flag unnecessarily. It leads to a song and dance at the end of strtod. */ #define Scale_Bit 0x10 #define n_bigtens 5 #else #ifdef IBM bigtens[] = { 1e16, 1e32, 1e64 }; static CONST double tinytens[] = { 1e-16, 1e-32, 1e-64 }; #define n_bigtens 3 #else bigtens[] = { 1e16, 1e32 }; static CONST double tinytens[] = { 1e-16, 1e-32 }; #define n_bigtens 2 #endif #endif #ifndef IEEE_Arith #undef INFNAN_CHECK #endif #ifdef INFNAN_CHECK #ifndef NAN_WORD0 #define NAN_WORD0 0x7ff80000 #endif #ifndef NAN_WORD1 #define NAN_WORD1 0 #endif static int match #ifdef KR_headers (sp, t) char **sp, *t; #else (CONST char **sp, char *t) #endif { int c, d; CONST char *s = *sp; while(d = *t++) { if ((c = *++s) >= 'A' && c <= 'Z') c += 'a' - 'A'; if (c != d) return 0; } *sp = s + 1; return 1; } #ifndef No_Hex_NaN static void hexnan #ifdef KR_headers (rvp, sp) double *rvp; CONST char **sp; #else (double *rvp, CONST char **sp) #endif { ULong c, x[2]; CONST char *s; int havedig, udx0, xshift; x[0] = x[1] = 0; havedig = xshift = 0; udx0 = 1; s = *sp; while(c = *(CONST unsigned char*)++s) { if (c >= '0' && c <= '9') c -= '0'; else if (c >= 'a' && c <= 'f') c += 10 - 'a'; else if (c >= 'A' && c <= 'F') c += 10 - 'A'; else if (c <= ' ') { if (udx0 && havedig) { udx0 = 0; xshift = 1; } continue; } else if (/*(*/ c == ')' && havedig) { *sp = s + 1; break; } else return; /* invalid form: don't change *sp */ havedig = 1; if (xshift) { xshift = 0; x[0] = x[1]; x[1] = 0; } if (udx0) x[0] = (x[0] << 4) | (x[1] >> 28); x[1] = (x[1] << 4) | c; } if ((x[0] &= 0xfffff) || x[1]) { word0(*rvp) = Exp_mask | x[0]; word1(*rvp) = x[1]; } } #endif /*No_Hex_NaN*/ #endif /* INFNAN_CHECK */ #ifndef HAVE_STRTOD double strtod #ifdef KR_headers (s00, se) CONST char *s00; char **se; #else (CONST char *s00, char **se) #endif { #ifdef Avoid_Underflow int scale; #endif int bb2, bb5, bbe, bd2, bd5, bbbits, bs2, c, dsign, e, e1, esign, i, j, k, nd, nd0, nf, nz, nz0, sign; CONST char *s, *s0, *s1; double aadj, aadj1, adj, rv, rv0; Long L; ULong y, z; Bigint *bb, *bb1, *bd, *bd0, *bs, *delta; #ifdef SET_INEXACT int inexact, oldinexact; #endif #ifdef Honor_FLT_ROUNDS int rounding; #endif #ifdef USE_LOCALE CONST char *s2; #endif sign = nz0 = nz = 0; dval(rv) = 0.; for(s = s00;;s++) switch(*s) { case '-': sign = 1; /* no break */ case '+': if (*++s) goto break2; /* no break */ case 0: goto ret0; case '\t': case '\n': case '\v': case '\f': case '\r': case ' ': continue; default: goto break2; } break2: if (*s == '0') { nz0 = 1; while(*++s == '0') ; if (!*s) goto ret; } s0 = s; y = z = 0; for(nd = nf = 0; (c = *s) >= '0' && c <= '9'; nd++, s++) if (nd < 9) y = 10*y + c - '0'; else if (nd < 16) z = 10*z + c - '0'; nd0 = nd; #ifdef USE_LOCALE s1 = localeconv()->decimal_point; if (c == *s1) { c = '.'; if (*++s1) { s2 = s; for(;;) { if (*++s2 != *s1) { c = 0; break; } if (!*++s1) { s = s2; break; } } } } #endif if (c == '.') { c = *++s; if (!nd) { for(; c == '0'; c = *++s) nz++; if (c > '0' && c <= '9') { s0 = s; nf += nz; nz = 0; goto have_dig; } goto dig_done; } for(; c >= '0' && c <= '9'; c = *++s) { have_dig: nz++; if (c -= '0') { nf += nz; for(i = 1; i < nz; i++) if (nd++ < 9) y *= 10; else if (nd <= DBL_DIG + 1) z *= 10; if (nd++ < 9) y = 10*y + c; else if (nd <= DBL_DIG + 1) z = 10*z + c; nz = 0; } } } dig_done: e = 0; if (c == 'e' || c == 'E') { if (!nd && !nz && !nz0) { goto ret0; } s00 = s; esign = 0; switch(c = *++s) { case '-': esign = 1; case '+': c = *++s; } if (c >= '0' && c <= '9') { while(c == '0') c = *++s; if (c > '0' && c <= '9') { L = c - '0'; s1 = s; while((c = *++s) >= '0' && c <= '9') L = 10*L + c - '0'; if (s - s1 > 8 || L > 19999) /* Avoid confusion from exponents * so large that e might overflow. */ e = 19999; /* safe for 16 bit ints */ else e = (int)L; if (esign) e = -e; } else e = 0; } else s = s00; } if (!nd) { if (!nz && !nz0) { #ifdef INFNAN_CHECK /* Check for Nan and Infinity */ switch(c) { case 'i': case 'I': if (match(&s,"nf")) { --s; if (!match(&s,"inity")) ++s; word0(rv) = 0x7ff00000; word1(rv) = 0; goto ret; } break; case 'n': case 'N': if (match(&s, "an")) { word0(rv) = NAN_WORD0; word1(rv) = NAN_WORD1; #ifndef No_Hex_NaN if (*s == '(') /*)*/ hexnan(&rv, &s); #endif goto ret; } } #endif /* INFNAN_CHECK */ ret0: s = s00; sign = 0; } goto ret; } e1 = e -= nf; /* Now we have nd0 digits, starting at s0, followed by a * decimal point, followed by nd-nd0 digits. The number we're * after is the integer represented by those digits times * 10**e */ if (!nd0) nd0 = nd; k = nd < DBL_DIG + 1 ? nd : DBL_DIG + 1; dval(rv) = y; if (k > 9) { #ifdef SET_INEXACT if (k > DBL_DIG) oldinexact = get_inexact(); #endif dval(rv) = tens[k - 9] * dval(rv) + z; } bd0 = 0; if (nd <= DBL_DIG #ifndef RND_PRODQUOT #ifndef Honor_FLT_ROUNDS && Flt_Rounds == 1 #endif #endif ) { if (!e) goto ret; if (e > 0) { if (e <= Ten_pmax) { #ifdef VAX goto vax_ovfl_check; #else #ifdef Honor_FLT_ROUNDS /* round correctly FLT_ROUNDS = 2 or 3 */ if (sign) { rv = -rv; sign = 0; } #endif /* rv = */ rounded_product(dval(rv), tens[e]); goto ret; #endif } i = DBL_DIG - nd; if (e <= Ten_pmax + i) { /* A fancier test would sometimes let us do * this for larger i values. */ #ifdef Honor_FLT_ROUNDS /* round correctly FLT_ROUNDS = 2 or 3 */ if (sign) { rv = -rv; sign = 0; } #endif e -= i; dval(rv) *= tens[i]; #ifdef VAX /* VAX exponent range is so narrow we must * worry about overflow here... */ vax_ovfl_check: word0(rv) -= P*Exp_msk1; /* rv = */ rounded_product(dval(rv), tens[e]); if ((word0(rv) & Exp_mask) > Exp_msk1*(DBL_MAX_EXP+Bias-1-P)) goto ovfl; word0(rv) += P*Exp_msk1; #else /* rv = */ rounded_product(dval(rv), tens[e]); #endif goto ret; } } #ifndef Inaccurate_Divide else if (e >= -Ten_pmax) { #ifdef Honor_FLT_ROUNDS /* round correctly FLT_ROUNDS = 2 or 3 */ if (sign) { rv = -rv; sign = 0; } #endif /* rv = */ rounded_quotient(dval(rv), tens[-e]); goto ret; } #endif } e1 += nd - k; #ifdef IEEE_Arith #ifdef SET_INEXACT inexact = 1; if (k <= DBL_DIG) oldinexact = get_inexact(); #endif #ifdef Avoid_Underflow scale = 0; #endif #ifdef Honor_FLT_ROUNDS if ((rounding = Flt_Rounds) >= 2) { if (sign) rounding = rounding == 2 ? 0 : 2; else if (rounding != 2) rounding = 0; } #endif #endif /*IEEE_Arith*/ /* Get starting approximation = rv * 10**e1 */ if (e1 > 0) { if (i = e1 & 15) dval(rv) *= tens[i]; if (e1 &= ~15) { if (e1 > DBL_MAX_10_EXP) { ovfl: #ifndef NO_ERRNO errno = ERANGE; #endif /* Can't trust HUGE_VAL */ #ifdef IEEE_Arith #ifdef Honor_FLT_ROUNDS switch(rounding) { case 0: /* toward 0 */ case 3: /* toward -infinity */ word0(rv) = Big0; word1(rv) = Big1; break; default: word0(rv) = Exp_mask; word1(rv) = 0; } #else /*Honor_FLT_ROUNDS*/ word0(rv) = Exp_mask; word1(rv) = 0; #endif /*Honor_FLT_ROUNDS*/ #ifdef SET_INEXACT /* set overflow bit */ dval(rv0) = 1e300; dval(rv0) *= dval(rv0); #endif #else /*IEEE_Arith*/ word0(rv) = Big0; word1(rv) = Big1; #endif /*IEEE_Arith*/ if (bd0) goto retfree; goto ret; } e1 >>= 4; for(j = 0; e1 > 1; j++, e1 >>= 1) if (e1 & 1) dval(rv) *= bigtens[j]; /* The last multiplication could overflow. */ word0(rv) -= P*Exp_msk1; dval(rv) *= bigtens[j]; if ((z = word0(rv) & Exp_mask) > Exp_msk1*(DBL_MAX_EXP+Bias-P)) goto ovfl; if (z > Exp_msk1*(DBL_MAX_EXP+Bias-1-P)) { /* set to largest number */ /* (Can't trust DBL_MAX) */ word0(rv) = Big0; word1(rv) = Big1; } else word0(rv) += P*Exp_msk1; } } else if (e1 < 0) { e1 = -e1; if (i = e1 & 15) dval(rv) /= tens[i]; if (e1 >>= 4) { if (e1 >= 1 << n_bigtens) goto undfl; #ifdef Avoid_Underflow if (e1 & Scale_Bit) scale = 2*P; for(j = 0; e1 > 0; j++, e1 >>= 1) if (e1 & 1) dval(rv) *= tinytens[j]; if (scale && (j = 2*P + 1 - ((word0(rv) & Exp_mask) >> Exp_shift)) > 0) { /* scaled rv is denormal; zap j low bits */ if (j >= 32) { word1(rv) = 0; if (j >= 53) word0(rv) = (P+2)*Exp_msk1; else word0(rv) &= 0xffffffff << j-32; } else word1(rv) &= 0xffffffff << j; } #else for(j = 0; e1 > 1; j++, e1 >>= 1) if (e1 & 1) dval(rv) *= tinytens[j]; /* The last multiplication could underflow. */ dval(rv0) = dval(rv); dval(rv) *= tinytens[j]; if (!dval(rv)) { dval(rv) = 2.*dval(rv0); dval(rv) *= tinytens[j]; #endif if (!dval(rv)) { undfl: dval(rv) = 0.; #ifndef NO_ERRNO errno = ERANGE; #endif if (bd0) goto retfree; goto ret; } #ifndef Avoid_Underflow word0(rv) = Tiny0; word1(rv) = Tiny1; /* The refinement below will clean * this approximation up. */ } #endif } } /* Now the hard part -- adjusting rv to the correct value.*/ /* Put digits into bd: true value = bd * 10^e */ bd0 = s2b(s0, nd0, nd, y); for(;;) { bd = Balloc(bd0->k); Bcopy(bd, bd0); bb = d2b(dval(rv), &bbe, &bbbits); /* rv = bb * 2^bbe */ bs = i2b(1); if (e >= 0) { bb2 = bb5 = 0; bd2 = bd5 = e; } else { bb2 = bb5 = -e; bd2 = bd5 = 0; } if (bbe >= 0) bb2 += bbe; else bd2 -= bbe; bs2 = bb2; #ifdef Honor_FLT_ROUNDS if (rounding != 1) bs2++; #endif #ifdef Avoid_Underflow j = bbe - scale; i = j + bbbits - 1; /* logb(rv) */ if (i < Emin) /* denormal */ j += P - Emin; else j = P + 1 - bbbits; #else /*Avoid_Underflow*/ #ifdef Sudden_Underflow #ifdef IBM j = 1 + 4*P - 3 - bbbits + ((bbe + bbbits - 1) & 3); #else j = P + 1 - bbbits; #endif #else /*Sudden_Underflow*/ j = bbe; i = j + bbbits - 1; /* logb(rv) */ if (i < Emin) /* denormal */ j += P - Emin; else j = P + 1 - bbbits; #endif /*Sudden_Underflow*/ #endif /*Avoid_Underflow*/ bb2 += j; bd2 += j; #ifdef Avoid_Underflow bd2 += scale; #endif i = bb2 < bd2 ? bb2 : bd2; if (i > bs2) i = bs2; if (i > 0) { bb2 -= i; bd2 -= i; bs2 -= i; } if (bb5 > 0) { bs = pow5mult(bs, bb5); bb1 = mult(bs, bb); Bfree(bb); bb = bb1; } if (bb2 > 0) bb = lshift(bb, bb2); if (bd5 > 0) bd = pow5mult(bd, bd5); if (bd2 > 0) bd = lshift(bd, bd2); if (bs2 > 0) bs = lshift(bs, bs2); delta = diff(bb, bd); dsign = delta->sign; delta->sign = 0; i = cmp(delta, bs); #ifdef Honor_FLT_ROUNDS if (rounding != 1) { if (i < 0) { /* Error is less than an ulp */ if (!delta->x[0] && delta->wds <= 1) { /* exact */ #ifdef SET_INEXACT inexact = 0; #endif break; } if (rounding) { if (dsign) { adj = 1.; goto apply_adj; } } else if (!dsign) { adj = -1.; if (!word1(rv) && !(word0(rv) & Frac_mask)) { y = word0(rv) & Exp_mask; #ifdef Avoid_Underflow if (!scale || y > 2*P*Exp_msk1) #else if (y) #endif { delta = lshift(delta,Log2P); if (cmp(delta, bs) <= 0) adj = -0.5; } } apply_adj: #ifdef Avoid_Underflow if (scale && (y = word0(rv) & Exp_mask) <= 2*P*Exp_msk1) word0(adj) += (2*P+1)*Exp_msk1 - y; #else #ifdef Sudden_Underflow if ((word0(rv) & Exp_mask) <= P*Exp_msk1) { word0(rv) += P*Exp_msk1; dval(rv) += adj*ulp(dval(rv)); word0(rv) -= P*Exp_msk1; } else #endif /*Sudden_Underflow*/ #endif /*Avoid_Underflow*/ dval(rv) += adj*ulp(dval(rv)); } break; } adj = ratio(delta, bs); if (adj < 1.) adj = 1.; if (adj <= 0x7ffffffe) { /* adj = rounding ? ceil(adj) : floor(adj); */ y = adj; if (y != adj) { if (!((rounding>>1) ^ dsign)) y++; adj = y; } } #ifdef Avoid_Underflow if (scale && (y = word0(rv) & Exp_mask) <= 2*P*Exp_msk1) word0(adj) += (2*P+1)*Exp_msk1 - y; #else #ifdef Sudden_Underflow if ((word0(rv) & Exp_mask) <= P*Exp_msk1) { word0(rv) += P*Exp_msk1; adj *= ulp(dval(rv)); if (dsign) dval(rv) += adj; else dval(rv) -= adj; word0(rv) -= P*Exp_msk1; goto cont; } #endif /*Sudden_Underflow*/ #endif /*Avoid_Underflow*/ adj *= ulp(dval(rv)); if (dsign) dval(rv) += adj; else dval(rv) -= adj; goto cont; } #endif /*Honor_FLT_ROUNDS*/ if (i < 0) { /* Error is less than half an ulp -- check for * special case of mantissa a power of two. */ if (dsign || word1(rv) || word0(rv) & Bndry_mask #ifdef IEEE_Arith #ifdef Avoid_Underflow || (word0(rv) & Exp_mask) <= (2*P+1)*Exp_msk1 #else || (word0(rv) & Exp_mask) <= Exp_msk1 #endif #endif ) { #ifdef SET_INEXACT if (!delta->x[0] && delta->wds <= 1) inexact = 0; #endif break; } if (!delta->x[0] && delta->wds <= 1) { /* exact result */ #ifdef SET_INEXACT inexact = 0; #endif break; } delta = lshift(delta,Log2P); if (cmp(delta, bs) > 0) goto drop_down; break; } if (i == 0) { /* exactly half-way between */ if (dsign) { if ((word0(rv) & Bndry_mask1) == Bndry_mask1 && word1(rv) == ( #ifdef Avoid_Underflow (scale && (y = word0(rv) & Exp_mask) <= 2*P*Exp_msk1) ? (0xffffffff & (0xffffffff << (2*P+1-(y>>Exp_shift)))) : #endif 0xffffffff)) { /*boundary case -- increment exponent*/ word0(rv) = (word0(rv) & Exp_mask) + Exp_msk1 #ifdef IBM | Exp_msk1 >> 4 #endif ; word1(rv) = 0; #ifdef Avoid_Underflow dsign = 0; #endif break; } } else if (!(word0(rv) & Bndry_mask) && !word1(rv)) { drop_down: /* boundary case -- decrement exponent */ #ifdef Sudden_Underflow /*{{*/ L = word0(rv) & Exp_mask; #ifdef IBM if (L < Exp_msk1) #else #ifdef Avoid_Underflow if (L <= (scale ? (2*P+1)*Exp_msk1 : Exp_msk1)) #else if (L <= Exp_msk1) #endif /*Avoid_Underflow*/ #endif /*IBM*/ goto undfl; L -= Exp_msk1; #else /*Sudden_Underflow}{*/ #ifdef Avoid_Underflow if (scale) { L = word0(rv) & Exp_mask; if (L <= (2*P+1)*Exp_msk1) { if (L > (P+2)*Exp_msk1) /* round even ==> */ /* accept rv */ break; /* rv = smallest denormal */ goto undfl; } } #endif /*Avoid_Underflow*/ L = (word0(rv) & Exp_mask) - Exp_msk1; #endif /*Sudden_Underflow}}*/ word0(rv) = L | Bndry_mask1; word1(rv) = 0xffffffff; #ifdef IBM goto cont; #else break; #endif } #ifndef ROUND_BIASED if (!(word1(rv) & LSB)) break; #endif if (dsign) dval(rv) += ulp(dval(rv)); #ifndef ROUND_BIASED else { dval(rv) -= ulp(dval(rv)); #ifndef Sudden_Underflow if (!dval(rv)) goto undfl; #endif } #ifdef Avoid_Underflow dsign = 1 - dsign; #endif #endif break; } if ((aadj = ratio(delta, bs)) <= 2.) { if (dsign) aadj = aadj1 = 1.; else if (word1(rv) || word0(rv) & Bndry_mask) { #ifndef Sudden_Underflow if (word1(rv) == Tiny1 && !word0(rv)) goto undfl; #endif aadj = 1.; aadj1 = -1.; } else { /* special case -- power of FLT_RADIX to be */ /* rounded down... */ if (aadj < 2./FLT_RADIX) aadj = 1./FLT_RADIX; else aadj *= 0.5; aadj1 = -aadj; } } else { aadj *= 0.5; aadj1 = dsign ? aadj : -aadj; #ifdef Check_FLT_ROUNDS switch(Rounding) { case 2: /* towards +infinity */ aadj1 -= 0.5; break; case 0: /* towards 0 */ case 3: /* towards -infinity */ aadj1 += 0.5; } #else if (Flt_Rounds == 0) aadj1 += 0.5; #endif /*Check_FLT_ROUNDS*/ } y = word0(rv) & Exp_mask; /* Check for overflow */ if (y == Exp_msk1*(DBL_MAX_EXP+Bias-1)) { dval(rv0) = dval(rv); word0(rv) -= P*Exp_msk1; adj = aadj1 * ulp(dval(rv)); dval(rv) += adj; if ((word0(rv) & Exp_mask) >= Exp_msk1*(DBL_MAX_EXP+Bias-P)) { if (word0(rv0) == Big0 && word1(rv0) == Big1) goto ovfl; word0(rv) = Big0; word1(rv) = Big1; goto cont; } else word0(rv) += P*Exp_msk1; } else { #ifdef Avoid_Underflow if (scale && y <= 2*P*Exp_msk1) { if (aadj <= 0x7fffffff) { if ((z = aadj) <= 0) z = 1; aadj = z; aadj1 = dsign ? aadj : -aadj; } word0(aadj1) += (2*P+1)*Exp_msk1 - y; } adj = aadj1 * ulp(dval(rv)); dval(rv) += adj; #else #ifdef Sudden_Underflow if ((word0(rv) & Exp_mask) <= P*Exp_msk1) { dval(rv0) = dval(rv); word0(rv) += P*Exp_msk1; adj = aadj1 * ulp(dval(rv)); dval(rv) += adj; #ifdef IBM if ((word0(rv) & Exp_mask) < P*Exp_msk1) #else if ((word0(rv) & Exp_mask) <= P*Exp_msk1) #endif { if (word0(rv0) == Tiny0 && word1(rv0) == Tiny1) goto undfl; word0(rv) = Tiny0; word1(rv) = Tiny1; goto cont; } else word0(rv) -= P*Exp_msk1; } else { adj = aadj1 * ulp(dval(rv)); dval(rv) += adj; } #else /*Sudden_Underflow*/ /* Compute adj so that the IEEE rounding rules will * correctly round rv + adj in some half-way cases. * If rv * ulp(rv) is denormalized (i.e., * y <= (P-1)*Exp_msk1), we must adjust aadj to avoid * trouble from bits lost to denormalization; * example: 1.2e-307 . */ if (y <= (P-1)*Exp_msk1 && aadj > 1.) { aadj1 = (double)(int)(aadj + 0.5); if (!dsign) aadj1 = -aadj1; } adj = aadj1 * ulp(dval(rv)); dval(rv) += adj; #endif /*Sudden_Underflow*/ #endif /*Avoid_Underflow*/ } z = word0(rv) & Exp_mask; #ifndef SET_INEXACT #ifdef Avoid_Underflow if (!scale) #endif if (y == z) { /* Can we stop now? */ L = (Long)aadj; aadj -= L; /* The tolerances below are conservative. */ if (dsign || word1(rv) || word0(rv) & Bndry_mask) { if (aadj < .4999999 || aadj > .5000001) break; } else if (aadj < .4999999/FLT_RADIX) break; } #endif cont: Bfree(bb); Bfree(bd); Bfree(bs); Bfree(delta); } #ifdef SET_INEXACT if (inexact) { if (!oldinexact) { word0(rv0) = Exp_1 + (70 << Exp_shift); word1(rv0) = 0; dval(rv0) += 1.; } } else if (!oldinexact) clear_inexact(); #endif #ifdef Avoid_Underflow if (scale) { word0(rv0) = Exp_1 - 2*P*Exp_msk1; word1(rv0) = 0; dval(rv) *= dval(rv0); #ifndef NO_ERRNO /* try to avoid the bug of testing an 8087 register value */ if (word0(rv) == 0 && word1(rv) == 0) errno = ERANGE; #endif } #endif /* Avoid_Underflow */ #ifdef SET_INEXACT if (inexact && !(word0(rv) & Exp_mask)) { /* set underflow bit */ dval(rv0) = 1e-300; dval(rv0) *= dval(rv0); } #endif retfree: Bfree(bb); Bfree(bd); Bfree(bs); Bfree(bd0); Bfree(delta); ret: if (se) *se = (char *)s; return sign ? -dval(rv) : dval(rv); } #endif // HAVE_STRTOD #ifndef HAVE_DTOA static int quorem #ifdef KR_headers (b, S) Bigint *b, *S; #else (Bigint *b, Bigint *S) #endif { int n; ULong *bx, *bxe, q, *sx, *sxe; #ifdef ULLong ULLong borrow, carry, y, ys; #else ULong borrow, carry, y, ys; #ifdef Pack_32 ULong si, z, zs; #endif #endif n = S->wds; #ifdef DEBUG /*debug*/ if (b->wds > n) /*debug*/ Bug("oversize b in quorem"); #endif if (b->wds < n) return 0; sx = S->x; sxe = sx + --n; bx = b->x; bxe = bx + n; q = *bxe / (*sxe + 1); /* ensure q <= true quotient */ #ifdef DEBUG /*debug*/ if (q > 9) /*debug*/ Bug("oversized quotient in quorem"); #endif if (q) { borrow = 0; carry = 0; do { #ifdef ULLong ys = *sx++ * (ULLong)q + carry; carry = ys >> 32; y = *bx - (ys & FFFFFFFF) - borrow; borrow = y >> 32 & (ULong)1; *bx++ = y & FFFFFFFF; #else #ifdef Pack_32 si = *sx++; ys = (si & 0xffff) * q + carry; zs = (si >> 16) * q + (ys >> 16); carry = zs >> 16; y = (*bx & 0xffff) - (ys & 0xffff) - borrow; borrow = (y & 0x10000) >> 16; z = (*bx >> 16) - (zs & 0xffff) - borrow; borrow = (z & 0x10000) >> 16; Storeinc(bx, z, y); #else ys = *sx++ * q + carry; carry = ys >> 16; y = *bx - (ys & 0xffff) - borrow; borrow = (y & 0x10000) >> 16; *bx++ = y & 0xffff; #endif #endif } while(sx <= sxe); if (!*bxe) { bx = b->x; while(--bxe > bx && !*bxe) --n; b->wds = n; } } if (cmp(b, S) >= 0) { q++; borrow = 0; carry = 0; bx = b->x; sx = S->x; do { #ifdef ULLong ys = *sx++ + carry; carry = ys >> 32; y = *bx - (ys & FFFFFFFF) - borrow; borrow = y >> 32 & (ULong)1; *bx++ = y & FFFFFFFF; #else #ifdef Pack_32 si = *sx++; ys = (si & 0xffff) + carry; zs = (si >> 16) + (ys >> 16); carry = zs >> 16; y = (*bx & 0xffff) - (ys & 0xffff) - borrow; borrow = (y & 0x10000) >> 16; z = (*bx >> 16) - (zs & 0xffff) - borrow; borrow = (z & 0x10000) >> 16; Storeinc(bx, z, y); #else ys = *sx++ + carry; carry = ys >> 16; y = *bx - (ys & 0xffff) - borrow; borrow = (y & 0x10000) >> 16; *bx++ = y & 0xffff; #endif #endif } while(sx <= sxe); bx = b->x; bxe = bx + n; if (!*bxe) { while(--bxe > bx && !*bxe) --n; b->wds = n; } } return q; } #ifndef MULTIPLE_THREADS static char *dtoa_result; #endif static char * #ifdef KR_headers rv_alloc(i) int i; #else rv_alloc(int i) #endif { int j, k, *r; j = sizeof(ULong); for(k = 0; (int)(sizeof(Bigint) - sizeof(ULong) - sizeof(int)) + j <= i; j <<= 1) k++; r = (int*)Balloc(k); *r = k; return #ifndef MULTIPLE_THREADS dtoa_result = #endif (char *)(r+1); } static char * #ifdef KR_headers nrv_alloc(s, rve, n) char *s, **rve; int n; #else nrv_alloc(const char *s, char **rve, int n) #endif { char *rv, *t; t = rv = rv_alloc(n); while((*t = *s++)) t++; if (rve) *rve = t; return rv; } /* freedtoa(s) must be used to free values s returned by dtoa * when MULTIPLE_THREADS is #defined. It should be used in all cases, * but for consistency with earlier versions of dtoa, it is optional * when MULTIPLE_THREADS is not defined. */ void #ifdef KR_headers freedtoa(s) char *s; #else freedtoa(char *s) #endif { Bigint *b = (Bigint *)((int *)s - 1); b->maxwds = 1 << (b->k = *(int*)b); Bfree(b); #ifndef MULTIPLE_THREADS if (s == dtoa_result) dtoa_result = 0; #endif } /* dtoa for IEEE arithmetic (dmg): convert double to ASCII string. * * Inspired by "How to Print Floating-Point Numbers Accurately" by * Guy L. Steele, Jr. and Jon L. White [Proc. ACM SIGPLAN '90, pp. 112-126]. * * Modifications: * 1. Rather than iterating, we use a simple numeric overestimate * to determine k = floor(log10(d)). We scale relevant * quantities using O(log2(k)) rather than O(k) multiplications. * 2. For some modes > 2 (corresponding to ecvt and fcvt), we don't * try to generate digits strictly left to right. Instead, we * compute with fewer bits and propagate the carry if necessary * when rounding the final digit up. This is often faster. * 3. Under the assumption that input will be rounded nearest, * mode 0 renders 1e23 as 1e23 rather than 9.999999999999999e22. * That is, we allow equality in stopping tests when the * round-nearest rule will give the same floating-point value * as would satisfaction of the stopping test with strict * inequality. * 4. We remove common factors of powers of 2 from relevant * quantities. * 5. When converting floating-point integers less than 1e16, * we use floating-point arithmetic rather than resorting * to multiple-precision integers. * 6. When asked to produce fewer than 15 digits, we first try * to get by with floating-point arithmetic; we resort to * multiple-precision integer arithmetic only if we cannot * guarantee that the floating-point calculation has given * the correctly rounded result. For k requested digits and * "uniformly" distributed input, the probability is * something like 10^(k-15) that we must resort to the Long * calculation. */ char * dtoa #ifdef KR_headers (d, mode, ndigits, decpt, sign, rve) double d; int mode, ndigits, *decpt, *sign; char **rve; #else (double d, int mode, int ndigits, int *decpt, int *sign, char **rve) #endif { /* Arguments ndigits, decpt, sign are similar to those of ecvt and fcvt; trailing zeros are suppressed from the returned string. If not null, *rve is set to point to the end of the return value. If d is +-Infinity or NaN, then *decpt is set to 9999. mode: 0 ==> shortest string that yields d when read in and rounded to nearest. 1 ==> like 0, but with Steele & White stopping rule; e.g. with IEEE P754 arithmetic , mode 0 gives 1e23 whereas mode 1 gives 9.999999999999999e22. 2 ==> max(1,ndigits) significant digits. This gives a return value similar to that of ecvt, except that trailing zeros are suppressed. 3 ==> through ndigits past the decimal point. This gives a return value similar to that from fcvt, except that trailing zeros are suppressed, and ndigits can be negative. 4,5 ==> similar to 2 and 3, respectively, but (in round-nearest mode) with the tests of mode 0 to possibly return a shorter string that rounds to d. With IEEE arithmetic and compilation with -DHonor_FLT_ROUNDS, modes 4 and 5 behave the same as modes 2 and 3 when FLT_ROUNDS != 1. 6-9 ==> Debugging modes similar to mode - 4: don't try fast floating-point estimate (if applicable). Values of mode other than 0-9 are treated as mode 0. Sufficient space is allocated to the return value to hold the suppressed trailing zeros. */ int bbits, b2, b5, be, dig, i, ieps, ilim=0, ilim0, ilim1=0, j, j1, k, k0, k_check, leftright, m2, m5, s2, s5, spec_case, try_quick; Long L; #ifndef Sudden_Underflow int denorm; ULong x; #endif Bigint *b, *b1, *delta, *mlo, *mhi, *S; double d2, ds, eps; char *s, *s0; #ifdef Honor_FLT_ROUNDS int rounding; #endif #ifdef SET_INEXACT int inexact, oldinexact; #endif #ifndef MULTIPLE_THREADS if (dtoa_result) { freedtoa(dtoa_result); dtoa_result = 0; } #endif if (word0(d) & Sign_bit) { /* set sign for everything, including 0's and NaNs */ *sign = 1; word0(d) &= ~Sign_bit; /* clear sign bit */ } else *sign = 0; #if defined(IEEE_Arith) + defined(VAX) #ifdef IEEE_Arith if ((word0(d) & Exp_mask) == Exp_mask) #else if (word0(d) == 0x8000) #endif { /* Infinity or NaN */ *decpt = 9999; #ifdef IEEE_Arith if (!word1(d) && !(word0(d) & 0xfffff)) return nrv_alloc("Infinity", rve, 8); #endif return nrv_alloc("NaN", rve, 3); } #endif #ifdef IBM dval(d) += 0; /* normalize */ #endif if (!dval(d)) { *decpt = 1; return nrv_alloc("0", rve, 1); } #ifdef SET_INEXACT try_quick = oldinexact = get_inexact(); inexact = 1; #endif #ifdef Honor_FLT_ROUNDS if ((rounding = Flt_Rounds) >= 2) { if (*sign) rounding = rounding == 2 ? 0 : 2; else if (rounding != 2) rounding = 0; } #endif b = d2b(dval(d), &be, &bbits); #ifdef Sudden_Underflow i = (int)(word0(d) >> Exp_shift1 & (Exp_mask>>Exp_shift1)); #else if ((i = (int)(word0(d) >> Exp_shift1 & (Exp_mask>>Exp_shift1)))) { #endif dval(d2) = dval(d); word0(d2) &= Frac_mask1; word0(d2) |= Exp_11; #ifdef IBM if (j = 11 - hi0bits(word0(d2) & Frac_mask)) dval(d2) /= 1 << j; #endif /* log(x) ~=~ log(1.5) + (x-1.5)/1.5 * log10(x) = log(x) / log(10) * ~=~ log(1.5)/log(10) + (x-1.5)/(1.5*log(10)) * log10(d) = (i-Bias)*log(2)/log(10) + log10(d2) * * This suggests computing an approximation k to log10(d) by * * k = (i - Bias)*0.301029995663981 * + ( (d2-1.5)*0.289529654602168 + 0.176091259055681 ); * * We want k to be too large rather than too small. * The error in the first-order Taylor series approximation * is in our favor, so we just round up the constant enough * to compensate for any error in the multiplication of * (i - Bias) by 0.301029995663981; since |i - Bias| <= 1077, * and 1077 * 0.30103 * 2^-52 ~=~ 7.2e-14, * adding 1e-13 to the constant term more than suffices. * Hence we adjust the constant term to 0.1760912590558. * (We could get a more accurate k by invoking log10, * but this is probably not worthwhile.) */ i -= Bias; #ifdef IBM i <<= 2; i += j; #endif #ifndef Sudden_Underflow denorm = 0; } else { /* d is denormalized */ i = bbits + be + (Bias + (P-1) - 1); x = i > 32 ? word0(d) << (64 - i) | word1(d) >> (i - 32) : word1(d) << (32 - i); dval(d2) = x; word0(d2) -= 31*Exp_msk1; /* adjust exponent */ i -= (Bias + (P-1) - 1) + 1; denorm = 1; } #endif ds = (dval(d2)-1.5)*0.289529654602168 + 0.1760912590558 + i*0.301029995663981; k = (int)ds; if (ds < 0. && ds != k) k--; /* want k = floor(ds) */ k_check = 1; if (k >= 0 && k <= Ten_pmax) { if (dval(d) < tens[k]) k--; k_check = 0; } j = bbits - i - 1; if (j >= 0) { b2 = 0; s2 = j; } else { b2 = -j; s2 = 0; } if (k >= 0) { b5 = 0; s5 = k; s2 += k; } else { b2 -= k; b5 = -k; s5 = 0; } if (mode < 0 || mode > 9) mode = 0; #ifndef SET_INEXACT #ifdef Check_FLT_ROUNDS try_quick = Rounding == 1; #else try_quick = 1; #endif #endif /*SET_INEXACT*/ if (mode > 5) { mode -= 4; try_quick = 0; } leftright = 1; switch(mode) { case 0: case 1: ilim = ilim1 = -1; i = 18; ndigits = 0; break; case 2: leftright = 0; /* no break */ case 4: if (ndigits <= 0) ndigits = 1; ilim = ilim1 = i = ndigits; break; case 3: leftright = 0; /* no break */ case 5: i = ndigits + k + 1; ilim = i; ilim1 = i - 1; if (i <= 0) i = 1; } s = s0 = rv_alloc(i); #ifdef Honor_FLT_ROUNDS if (mode > 1 && rounding != 1) leftright = 0; #endif if (ilim >= 0 && ilim <= Quick_max && try_quick) { /* Try to get by with floating-point arithmetic. */ i = 0; dval(d2) = dval(d); k0 = k; ilim0 = ilim; ieps = 2; /* conservative */ if (k > 0) { ds = tens[k&0xf]; j = k >> 4; if (j & Bletch) { /* prevent overflows */ j &= Bletch - 1; dval(d) /= bigtens[n_bigtens-1]; ieps++; } for(; j; j >>= 1, i++) if (j & 1) { ieps++; ds *= bigtens[i]; } dval(d) /= ds; } else if ((j1 = -k)) { dval(d) *= tens[j1 & 0xf]; for(j = j1 >> 4; j; j >>= 1, i++) if (j & 1) { ieps++; dval(d) *= bigtens[i]; } } if (k_check && dval(d) < 1. && ilim > 0) { if (ilim1 <= 0) goto fast_failed; ilim = ilim1; k--; dval(d) *= 10.; ieps++; } dval(eps) = ieps*dval(d) + 7.; word0(eps) -= (P-1)*Exp_msk1; if (ilim == 0) { S = mhi = 0; dval(d) -= 5.; if (dval(d) > dval(eps)) goto one_digit; if (dval(d) < -dval(eps)) goto no_digits; goto fast_failed; } #ifndef No_leftright if (leftright) { /* Use Steele & White method of only * generating digits needed. */ dval(eps) = 0.5/tens[ilim-1] - dval(eps); for(i = 0;;) { L = dval(d); dval(d) -= L; *s++ = '0' + (int)L; if (dval(d) < dval(eps)) goto ret1; if (1. - dval(d) < dval(eps)) goto bump_up; if (++i >= ilim) break; dval(eps) *= 10.; dval(d) *= 10.; } } else { #endif /* Generate ilim digits, then fix them up. */ dval(eps) *= tens[ilim-1]; for(i = 1;; i++, dval(d) *= 10.) { L = (Long)(dval(d)); if (!(dval(d) -= L)) ilim = i; *s++ = '0' + (int)L; if (i == ilim) { if (dval(d) > 0.5 + dval(eps)) goto bump_up; else if (dval(d) < 0.5 - dval(eps)) { while(*--s == '0'); s++; goto ret1; } break; } } #ifndef No_leftright } #endif fast_failed: s = s0; dval(d) = dval(d2); k = k0; ilim = ilim0; } /* Do we have a "small" integer? */ if (be >= 0 && k <= Int_max) { /* Yes. */ ds = tens[k]; if (ndigits < 0 && ilim <= 0) { S = mhi = 0; if (ilim < 0 || dval(d) <= 5*ds) goto no_digits; goto one_digit; } for(i = 1;; i++, dval(d) *= 10.) { L = (Long)(dval(d) / ds); dval(d) -= L*ds; #ifdef Check_FLT_ROUNDS /* If FLT_ROUNDS == 2, L will usually be high by 1 */ if (dval(d) < 0) { L--; dval(d) += ds; } #endif *s++ = '0' + (int)L; if (!dval(d)) { #ifdef SET_INEXACT inexact = 0; #endif break; } if (i == ilim) { #ifdef Honor_FLT_ROUNDS if (mode > 1) switch(rounding) { case 0: goto ret1; case 2: goto bump_up; } #endif dval(d) += dval(d); if (dval(d) > ds || (dval(d) == ds && L & 1)) { bump_up: while(*--s == '9') if (s == s0) { k++; *s = '0'; break; } ++*s++; } break; } } goto ret1; } m2 = b2; m5 = b5; mhi = mlo = 0; if (leftright) { i = #ifndef Sudden_Underflow denorm ? be + (Bias + (P-1) - 1 + 1) : #endif #ifdef IBM 1 + 4*P - 3 - bbits + ((bbits + be - 1) & 3); #else 1 + P - bbits; #endif b2 += i; s2 += i; mhi = i2b(1); } if (m2 > 0 && s2 > 0) { i = m2 < s2 ? m2 : s2; b2 -= i; m2 -= i; s2 -= i; } if (b5 > 0) { if (leftright) { if (m5 > 0) { mhi = pow5mult(mhi, m5); b1 = mult(mhi, b); Bfree(b); b = b1; } if ((j = b5 - m5)) b = pow5mult(b, j); } else b = pow5mult(b, b5); } S = i2b(1); if (s5 > 0) S = pow5mult(S, s5); /* Check for special case that d is a normalized power of 2. */ spec_case = 0; if ((mode < 2 || leftright) #ifdef Honor_FLT_ROUNDS && rounding == 1 #endif ) { if (!word1(d) && !(word0(d) & Bndry_mask) #ifndef Sudden_Underflow && word0(d) & (Exp_mask & ~Exp_msk1) #endif ) { /* The special case */ b2 += Log2P; s2 += Log2P; spec_case = 1; } } /* Arrange for convenient computation of quotients: * shift left if necessary so divisor has 4 leading 0 bits. * * Perhaps we should just compute leading 28 bits of S once * and for all and pass them and a shift to quorem, so it * can do shifts and ors to compute the numerator for q. */ #ifdef Pack_32 if ((i = ((s5 ? 32 - hi0bits(S->x[S->wds-1]) : 1) + s2) & 0x1f)) i = 32 - i; #else if ((i = ((s5 ? 32 - hi0bits(S->x[S->wds-1]) : 1) + s2) & 0xf)) i = 16 - i; #endif if (i > 4) { i -= 4; b2 += i; m2 += i; s2 += i; } else if (i < 4) { i += 28; b2 += i; m2 += i; s2 += i; } if (b2 > 0) b = lshift(b, b2); if (s2 > 0) S = lshift(S, s2); if (k_check) { if (cmp(b,S) < 0) { k--; b = multadd(b, 10, 0); /* we botched the k estimate */ if (leftright) mhi = multadd(mhi, 10, 0); ilim = ilim1; } } if (ilim <= 0 && (mode == 3 || mode == 5)) { if (ilim < 0 || cmp(b,S = multadd(S,5,0)) <= 0) { /* no digits, fcvt style */ no_digits: k = -1 - ndigits; goto ret; } one_digit: *s++ = '1'; k++; goto ret; } if (leftright) { if (m2 > 0) mhi = lshift(mhi, m2); /* Compute mlo -- check for special case * that d is a normalized power of 2. */ mlo = mhi; if (spec_case) { mhi = Balloc(mhi->k); Bcopy(mhi, mlo); mhi = lshift(mhi, Log2P); } for(i = 1;;i++) { dig = quorem(b,S) + '0'; /* Do we yet have the shortest decimal string * that will round to d? */ j = cmp(b, mlo); delta = diff(S, mhi); j1 = delta->sign ? 1 : cmp(b, delta); Bfree(delta); #ifndef ROUND_BIASED if (j1 == 0 && mode != 1 && !(word1(d) & 1) #ifdef Honor_FLT_ROUNDS && rounding >= 1 #endif ) { if (dig == '9') goto round_9_up; if (j > 0) dig++; #ifdef SET_INEXACT else if (!b->x[0] && b->wds <= 1) inexact = 0; #endif *s++ = dig; goto ret; } #endif if (j < 0 || (j == 0 && mode != 1 #ifndef ROUND_BIASED && !(word1(d) & 1) #endif )) { if (!b->x[0] && b->wds <= 1) { #ifdef SET_INEXACT inexact = 0; #endif goto accept_dig; } #ifdef Honor_FLT_ROUNDS if (mode > 1) switch(rounding) { case 0: goto accept_dig; case 2: goto keep_dig; } #endif /*Honor_FLT_ROUNDS*/ if (j1 > 0) { b = lshift(b, 1); j1 = cmp(b, S); if ((j1 > 0 || (j1 == 0 && dig & 1)) && dig++ == '9') goto round_9_up; } accept_dig: *s++ = dig; goto ret; } if (j1 > 0) { #ifdef Honor_FLT_ROUNDS if (!rounding) goto accept_dig; #endif if (dig == '9') { /* possible if i == 1 */ round_9_up: *s++ = '9'; goto roundoff; } *s++ = dig + 1; goto ret; } #ifdef Honor_FLT_ROUNDS keep_dig: #endif *s++ = dig; if (i == ilim) break; b = multadd(b, 10, 0); if (mlo == mhi) mlo = mhi = multadd(mhi, 10, 0); else { mlo = multadd(mlo, 10, 0); mhi = multadd(mhi, 10, 0); } } } else for(i = 1;; i++) { *s++ = dig = quorem(b,S) + '0'; if (!b->x[0] && b->wds <= 1) { #ifdef SET_INEXACT inexact = 0; #endif goto ret; } if (i >= ilim) break; b = multadd(b, 10, 0); } /* Round off last digit */ #ifdef Honor_FLT_ROUNDS switch(rounding) { case 0: goto trimzeros; case 2: goto roundoff; } #endif b = lshift(b, 1); j = cmp(b, S); if (j > 0 || (j == 0 && dig & 1)) { roundoff: while(*--s == '9') if (s == s0) { k++; *s++ = '1'; goto ret; } ++*s++; } else { #ifdef Honor_FLT_ROUNDS trimzeros: #endif while(*--s == '0'); s++; } ret: Bfree(S); if (mhi) { if (mlo && mlo != mhi) Bfree(mlo); Bfree(mhi); } ret1: #ifdef SET_INEXACT if (inexact) { if (!oldinexact) { word0(d) = Exp_1 + (70 << Exp_shift); word1(d) = 0; dval(d) += 1.; } } else if (!oldinexact) clear_inexact(); #endif Bfree(b); *s = 0; *decpt = k + 1; if (rve) *rve = s; return s0; } #endif // HAVE_DTOA #ifdef __cplusplus } #endif polyml.5.2.1/libpolyml/realconv.h0000644000175000017500000000247010602661056015766 0ustar daviddavid/* Title: Real number conversion Author: Dave Matthews, Cambridge University Computer Laboratory Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef REALCONV_H #define REALCONV_H #ifdef WIN32 #include "winconfig.h" #else #include "config.h" #endif #ifdef __cplusplus extern "C" { #endif #ifndef HAVE_STRTOD extern double strtod(const char *s00, char **se); #endif #ifndef HAVE_DTOA extern char *dtoa(double d, int mode, int ndigits, int *decpt, int *sign, char **rve); #endif #ifdef __cplusplus }; #endif #endif polyml.5.2.1/libpolyml/reals.cpp0000644000175000017500000006127611025706374015632 0ustar daviddavid/* Title: Real number package. Author: Dave Matthews, Cambridge University Computer Laboratory Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifdef WIN32 #include "winconfig.h" #else #include "config.h" #endif #ifdef HAVE_IEEEFP_H /* Other operating systems include "finite" in math.h, but Solaris doesn't? */ #include #endif #ifdef HAVE_FPU_CONTROL_H #include #endif #ifdef HAVE_FENV_H #include #endif #if (defined(WIN32)) #define finite _finite #define isnan _isnan #define copysign _copysign #endif #ifdef HAVE_FLOAT_H #include #endif #ifdef HAVE_MATH_H #include #endif #ifdef HAVE_STDIO_H #include #endif #ifdef HAVE_STRING_H #include #endif #ifdef HAVE_ERRNO_H #include #endif #ifdef HAVE_STDLIB_H #include #endif #include "globals.h" #include "run_time.h" #include "reals.h" #include "arb.h" #include "sys.h" #include "realconv.h" #include "polystring.h" #include "save_vec.h" #include "rts_module.h" #include "machine_dep.h" #include "processes.h" /* The Standard Basis Library assumes IEEE representation for reals. Among other things it does not permit equality on reals. That simplifies things considerably since we don't have to worry about there being two different representations of zero as 0 and ~0. We also don't need to check that the result is finite since NaN is allowed as a result. This code could do with being checked by someone who really understands IEEE floating point arithmetic. The original real number functions all had separate entries in the interface vector. Newly added functions all go through a single dispatch function. DCJM: March 2000. */ double posInf, negInf, notANumber; /* Real numbers are represented by the address of the value. */ #define DBLE sizeof(double) union db { double dble; byte bytes[DBLE]; }; /* Assumes that there will be a separate handler for floating point overflow and underflow. */ /* tidied up 27/10/93 SPF */ /* can't assume (double *) has same alignment as (PolyWord *), so all the */ /* parameters should be passed in as a Handle, not (double **). */ double real_arg(Handle x) { union db r_arg_x; for (unsigned i = 0; i < DBLE; i++) { r_arg_x.bytes[i] = DEREFBYTEHANDLE(x)[i]; } return r_arg_x.dble; } Handle real_result(TaskData *mdTaskData, double x) { union db argx; argx.dble = x; PolyObject *v = alloc(mdTaskData, DBLE/sizeof(PolyWord), F_BYTE_OBJ); /* Copy as words in case the alignment is wrong. */ for(unsigned i = 0; i < DBLE; i++) { v->AsBytePtr()[i] = argx.bytes[i]; } return mdTaskData->saveVec.push(v); } /* CALL_IO2(Real_add, REF, REF, NOIND) */ Handle Real_addc(TaskData *mdTaskData, Handle y, Handle x) { return real_result(mdTaskData, real_arg(x)+real_arg(y)); } /* CALL_IO2(Real_sub, REF, REF, NOIND) */ Handle Real_subc(TaskData *mdTaskData, Handle y, Handle x) { return real_result(mdTaskData, real_arg(x)-real_arg(y)); } /* CALL_IO2(Real_mul, REF, REF, NOIND) */ Handle Real_mulc(TaskData *mdTaskData, Handle y, Handle x) { return real_result(mdTaskData, real_arg(x)*real_arg(y)); } /* CALL_IO2(Real_div, REF, REF, NOIND) */ Handle Real_divc(TaskData *mdTaskData, Handle y, Handle x) { double dx = real_arg(x); double dy = real_arg(y); return real_result(mdTaskData, dx/dy); } /* CALL_IO1(Real_neg, REF, NOIND) */ Handle Real_negc(TaskData *mdTaskData, Handle x) { return real_result(mdTaskData, -real_arg(x)); } /* The old Real_comp function isn't right for IEEE arithmetic. These functions were added to implement these correctly. On Windows, at any rate, the comparison operations do not necessarily return false on unordered arguments so we have to explicitly test for NaN. */ Handle Real_geqc(TaskData *mdTaskData, Handle y, Handle x) { double dx = real_arg(x), dy = real_arg(y); if (isnan(dx) || isnan(dy)) return mdTaskData->saveVec.push(TAGGED(0)); return mdTaskData->saveVec.push(dx >= dy ? TAGGED(1) : TAGGED(0)); } Handle Real_leqc(TaskData *mdTaskData, Handle y, Handle x) { double dx = real_arg(x), dy = real_arg(y); if (isnan(dx) || isnan(dy)) return mdTaskData->saveVec.push(TAGGED(0)); return mdTaskData->saveVec.push(dx <= dy ? TAGGED(1) : TAGGED(0)); } Handle Real_gtrc(TaskData *mdTaskData, Handle y, Handle x) { double dx = real_arg(x), dy = real_arg(y); if (isnan(dx) || isnan(dy)) return mdTaskData->saveVec.push(TAGGED(0)); return mdTaskData->saveVec.push(dx > dy ? TAGGED(1) : TAGGED(0)); } Handle Real_lssc(TaskData *mdTaskData, Handle y, Handle x) { double dx = real_arg(x), dy = real_arg(y); if (isnan(dx) || isnan(dy)) return mdTaskData->saveVec.push(TAGGED(0)); return mdTaskData->saveVec.push(dx < dy ? TAGGED(1) : TAGGED(0)); } Handle Real_eqc(TaskData *mdTaskData, Handle y, Handle x) { double dx = real_arg(x), dy = real_arg(y); if (isnan(dx) || isnan(dy)) return mdTaskData->saveVec.push(TAGGED(0)); return mdTaskData->saveVec.push(dx == dy ? TAGGED(1) : TAGGED(0)); } Handle Real_neqc(TaskData *mdTaskData, Handle y, Handle x) { double dx = real_arg(x), dy = real_arg(y); if (isnan(dx) || isnan(dy)) return mdTaskData->saveVec.push(TAGGED(1)); return mdTaskData->saveVec.push(dx != dy ? TAGGED(1) : TAGGED(0)); } /* CALL_IO1(Real_float, REF, NOIND) */ Handle Real_floatc(TaskData *mdTaskData, Handle x) /* SHORT int to real */ { POLYSIGNED n = UNTAGGED(DEREFWORDHANDLE(x)); return real_result(mdTaskData, (double)n); } /* CALL_IO1(Real_int, REF, NOIND) */ Handle Real_intc(TaskData *mdTaskData, Handle x) /* real to SHORT int */ { double dx = real_arg(x); double di = floor(dx); /* Get the largest integer <= dx */ POLYSIGNED i = (POLYSIGNED) di ; /* Convert (truncate) this to integer */ /* Bug fix thanks to Mike Crawley at Brunel. */ if (di > (double)MAXTAGGED || di < -(double)MAXTAGGED -1) { raise_exception0(mdTaskData, EXC_size); } return mdTaskData->saveVec.push(TAGGED(i)); } /* CALL_IO1(Real_sqrt, REF, NOIND) */ Handle Real_sqrtc(TaskData *mdTaskData, Handle arg) { double dx = real_arg(arg); return real_result(mdTaskData, sqrt(dx)); } /* CALL_IO1(Real_sin, REF, NOIND) */ Handle Real_sinc(TaskData *mdTaskData, Handle arg) { return real_result(mdTaskData, sin(real_arg(arg))); } /* CALL_IO1(Real_cos, REF, NOIND) */ Handle Real_cosc(TaskData *mdTaskData, Handle arg) { return real_result(mdTaskData, cos(real_arg(arg))); } /* CALL_IO1(Real_arctan, REF, NOIND) */ Handle Real_arctanc(TaskData *mdTaskData, Handle arg) { return real_result(mdTaskData, atan(real_arg(arg))); } /* CALL_IO1(Real_exp, REF, NOIND) */ Handle Real_expc(TaskData *mdTaskData, Handle arg) { return real_result(mdTaskData, exp(real_arg(arg))); } /* CALL_IO1(Real_ln, REF, NOIND) */ Handle Real_lnc(TaskData *mdTaskData, Handle arg) { double x = real_arg(arg); /* Make sure the result conforms to the definition. */ if (x < 0.0) return real_result(mdTaskData, notANumber); /* Nan. */ else if (x == 0.0) /* x may be +0.0 or -0.0 */ return real_result(mdTaskData, negInf); /* -infinity. */ else return real_result(mdTaskData, log(x)); } /* Real_Rep and Real_reprc are redundant. This is now dealt with by a function within the basis library. DCJM June 2002.*/ static void Real_Rep(TaskData *mdTaskData, double val, char *string_buffer) /* Puts the string representation into ``string_buffer'' and edits it into the Poly representation. i.e. replacing '-' by '~' and removing '+', and putting in a ".0" if the number does not have an E or a decimal point. */ { int dot_or_e = 0, digits = 0; char *sptr; /* First handle the special cases. We can't rely on sprintf doing them in the way we want. */ if (isnan(val)) { strcpy(string_buffer, "nan"); } else if (! finite(val)) { if (val > 0.0) strcpy(string_buffer, "inf"); else strcpy(string_buffer, "~inf"); } else if (val == 0.0) { if (copysign(1.0, val) < 0.0) strcpy(string_buffer, "~0.0"); else strcpy(string_buffer, "0.0"); } else { sprintf(string_buffer, "%.10G", val); for(sptr = string_buffer; *sptr != '\0'; sptr++) { if (*sptr == '-') *sptr = '~'; else if (*sptr == '+') { /* Shift the rest up to cover the '+' */ strcpy(sptr, sptr+1); sptr--; } else if (*sptr == '.' || *sptr == 'E') { if (! digits) { /* Must have a digit before the decimal point - shift down and put in a zero. */ register char *p; for (p = sptr; *p != '\0'; p++); for (; p >= sptr; p--) p[1] = *p; *sptr = '0'; digits = 1; } dot_or_e = 1; } else if (*sptr >= '0' && *sptr <= '9') digits = 1; } if (!dot_or_e) strcat(string_buffer, ".0"); } } /* Real_Rep */ /* CALL_IO1(Real_repr, REF, NOIND) */ Handle Real_reprc(TaskData *mdTaskData, Handle val) /* real to string */ { char string_buffer[30]; Real_Rep(mdTaskData, real_arg(val), string_buffer); return mdTaskData->saveVec.push(C_string_to_Poly(mdTaskData, string_buffer)); } /* Real_reprc */ /* CALL_IO1(Real_conv, REF, NOIND) */ Handle Real_convc(TaskData *mdTaskData, Handle str) /* string to real */ { double result; int i; char *finish; char *string_buffer = Poly_string_to_C_alloc(DEREFHANDLE(str)); /* Scan the string turning '~' into '-' */ for(i = 0; string_buffer[i] != '\0'; i ++) { if (string_buffer[i] == '~') string_buffer[i] = '-'; } /* Now convert it */ result = strtod(string_buffer, &finish); bool isError = *finish != '\0'; // Test before deallocating free(string_buffer); // We no longer detect overflow and underflow and instead return // (signed) zeros for underflow and (signed) infinities for overflow. if (isError) raise_exception_string(mdTaskData, EXC_conversion, ""); return real_result(mdTaskData, result); }/* Real_conv */ static double real_arg1(Handle x) { union db r_arg_x; for(unsigned i = 0; i < DBLE; i++) { r_arg_x.bytes[i] = DEREFHANDLE(x)->Get(0).AsObjPtr()->AsBytePtr()[i]; } return r_arg_x.dble; } static double real_arg2(Handle x) { union db r_arg_x; for(unsigned i = 0; i < DBLE; i++) { r_arg_x.bytes[i] = DEREFHANDLE(x)->Get(1).AsObjPtr()->AsBytePtr()[i]; } return r_arg_x.dble; } static Handle powerOf(TaskData *mdTaskData, Handle args) { double x = real_arg1(args), y = real_arg2(args); /* Some of the special cases are defined and don't seem to match the C pow function (at least as implemented in MS C). */ /* Maybe handle all this in ML? */ if (isnan(x)) { if (y == 0.0) return real_result(mdTaskData, 1.0); else return real_result(mdTaskData, notANumber); } else if (isnan(y)) return real_result(mdTaskData, y); /* i.e. nan. */ else if (x == 0.0 && y < 0.0) { /* This case is not handled correctly in Solaris. It always returns -infinity. */ int iy = (int)floor(y); /* If x is -0.0 and y is an odd integer the result is -infinity. */ if (copysign(1.0, x) < 0.0 && (double)iy == y && (iy & 1)) return real_result(mdTaskData, negInf); /* -infinity. */ else return real_result(mdTaskData, posInf); /* +infinity. */ } return real_result(mdTaskData, pow(x, y)); } // It would be nice to be able to use autoconf to test for these as functions // but they are frequently inlined #if defined(HAVE_FENV_H) // C99 version. This is becoming the most common. static PolyWord getrounding(TaskData *) { switch (fegetround()) { case FE_TONEAREST: return TAGGED(0); case FE_DOWNWARD: return TAGGED(1); case FE_UPWARD: return TAGGED(2); case FE_TOWARDZERO: return TAGGED(3); } return TAGGED(0); // Keep the compiler happy } static void setrounding(TaskData *taskData, Handle args) { switch (get_C_long(taskData, DEREFWORDHANDLE(args))) { case 0: fesetround(FE_TONEAREST); break; // Choose nearest case 1: fesetround(FE_DOWNWARD); break; // Towards negative infinity case 2: fesetround(FE_UPWARD); break; // Towards positive infinity case 3: fesetround(FE_TOWARDZERO); break; // Truncate towards zero } } #elif (defined(HAVE_IEEEFP_H) && ! defined(__CYGWIN__)) // Older FreeBSD. Cygwin has the ieeefp.h header but not the functions! static PolyWord getrounding(TaskData *) { switch (fpgetround()) { case FP_RN: return TAGGED(0); case FP_RM: return TAGGED(1); case FP_RP: return TAGGED(2); case FP_RZ: return TAGGED(3); default: return TAGGED(0); /* Shouldn't happen. */ } } static void setrounding(TaskData *taskData, Handle args) { switch (get_C_long(taskData, DEREFWORDHANDLE(args))) { case 0: fpsetround(FP_RN); break; /* Choose nearest */ case 1: fpsetround(FP_RM); break; /* Towards negative infinity */ case 2: fpsetround(FP_RP); break; /* Towards positive infinity */ case 3: fpsetround(FP_RZ); break; /* Truncate towards zero */ } } #elif defined(WINDOWS_PC) // Windows version static PolyWord getrounding(TaskData *) { switch (_controlfp(0,0) & _MCW_RC) { case _RC_NEAR: return TAGGED(0); case _RC_DOWN: return TAGGED(1); case _RC_UP: return TAGGED(2); case _RC_CHOP: return TAGGED(3); } return TAGGED(0); // Keep the compiler happy } static void setrounding(TaskData *mdTaskData, Handle args) { switch (get_C_long(mdTaskData, DEREFWORDHANDLE(args))) { case 0: _controlfp(_RC_NEAR, _MCW_RC); break; // Choose nearest case 1: _controlfp(_RC_DOWN, _MCW_RC); break; // Towards negative infinity case 2: _controlfp(_RC_UP, _MCW_RC); break; // Towards positive infinity case 3: _controlfp(_RC_CHOP, _MCW_RC); break; // Truncate towards zero } } #elif defined(_FPU_GETCW) && defined(_FPU_SETCW) // Older Linux version static PolyWord getrounding(TaskData *) { fpu_control_t ctrl; _FPU_GETCW(ctrl); switch (ctrl & _FPU_RC_ZERO) { case _FPU_RC_NEAREST: return TAGGED(0); case _FPU_RC_DOWN: return TAGGED(1); case _FPU_RC_UP: return TAGGED(2); case _FPU_RC_ZERO: return TAGGED(4); } return TAGGED(0); /* Never reached but this avoids warning message. */ } static void setrounding(TaskData *taskData, Handle args) { fpu_control_t ctrl; _FPU_GETCW(ctrl); ctrl &= ~_FPU_RC_ZERO; /* Mask off any existing rounding. */ switch (get_C_long(taskData, DEREFWORDHANDLE(args))) { case 0: ctrl |= _FPU_RC_NEAREST; case 1: ctrl |= _FPU_RC_DOWN; case 2: ctrl |= _FPU_RC_UP; case 3: ctrl |= _FPU_RC_ZERO; } _FPU_SETCW(ctrl); } #elif (defined(HOSTARCHITECTURE_PPC) && defined(MACOSX)) // Older versions of the Mac OS X didn't have a suitable function. static void getround(union db *res) { __asm__ ("mffs f0"); __asm__ ("stfd f0,0(r3)"); } static PolyWord getrounding(TaskData *) { union db roundingRes; getround(&roundingRes); switch (roundingRes.wrd[1] & 3) { case 0: return TAGGED(0); /* Choose nearest */ case 1: return TAGGED(3); /* Round towards zero */ case 2: return TAGGED(2); /* Towards positive infinity */ case 3: return TAGGED(1); /* Towards negative infinity */ } return TAGGED(0); /* Never reached but this avoids warning message. */ } static void setrounding(TaskData *taskData, Handle args) { switch (get_C_long(taskData, DEREFWORDHANDLE(args))) { case 0: __asm__("mtfsfi 7,0"); break; /* Choose nearest */ case 1: __asm__("mtfsfi 7,3"); break; /* Towards negative infinity */ case 2: __asm__("mtfsfi 7,2"); break; /* Towards positive infinity */ case 3: __asm__("mtfsfi 7,1"); break; /* Truncate towards zero */ } } #else // Give up. static PolyWord getrounding(TaskData *mdTaskData) { raise_exception_string(mdTaskData, EXC_Fail, "Unable to get flaoting point rounding control"); } static void setrounding(TaskData *mdTaskData, Handle) { raise_exception_string(mdTaskData, EXC_Fail, "Unable to set flaoting point rounding control"); } #endif Handle Real_strc(TaskData *mdTaskData, Handle hDigits, Handle hMode, Handle arg) { double dx = real_arg(arg); int decpt, sign; int mode = get_C_long(mdTaskData, DEREFWORDHANDLE(hMode)); int digits = get_C_long(mdTaskData, DEREFWORDHANDLE(hDigits)); /* Compute the shortest string which gives the required value. */ /* N.B. dtoa uses static buffers and is NOT thread-safe. */ char *chars = dtoa(dx, mode, digits, &decpt, &sign, NULL); /* We have to be careful in case an allocation causes a garbage collection. */ PolyWord pStr = C_string_to_Poly(mdTaskData, chars); Handle ppStr = mdTaskData->saveVec.push(pStr); /* Allocate a triple for the results. */ PolyObject *result = alloc(mdTaskData, 3); result->Set(0, DEREFWORDHANDLE(ppStr)); result->Set(1, TAGGED(decpt)); result->Set(2, TAGGED(sign)); return mdTaskData->saveVec.push(result); } /* Functions added for Standard Basis Library are all indirected through here. */ Handle Real_dispatchc(TaskData *mdTaskData, Handle args, Handle code) { int c = get_C_long(mdTaskData, DEREFWORDHANDLE(code)); switch (c) { case 0: /* tan */ return real_result(mdTaskData, tan(real_arg(args))); case 1: /* asin */ { double x = real_arg(args); if (x < -1.0 || x > 1.0) return real_result(mdTaskData, notANumber); else return real_result(mdTaskData, asin(x)); } case 2: /* acos */ { double x = real_arg(args); if (x < -1.0 || x > 1.0) return real_result(mdTaskData, notANumber); else return real_result(mdTaskData, acos(x)); } case 3: /* atan2 */ return real_result(mdTaskData, atan2(real_arg1(args), real_arg2(args))); case 4: /* pow */ return powerOf(mdTaskData, args); case 5: /* log10 */ { double x = real_arg(args); /* Make sure the result conforms to the definition. */ if (x < 0.0) return real_result(mdTaskData, notANumber); /* Nan. */ else if (x == 0.0) /* x may be +0.0 or -0.0 */ return real_result(mdTaskData, negInf); /* -infinity. */ else return real_result(mdTaskData, log10(x)); } case 6: /* sinh */ return real_result(mdTaskData, sinh(real_arg(args))); case 7: /* cosh */ return real_result(mdTaskData, cosh(real_arg(args))); case 8: /* tanh */ return real_result(mdTaskData, tanh(real_arg(args))); case 9: /* setroundingmode */ setrounding(mdTaskData, args); return mdTaskData->saveVec.push(TAGGED(0)); /* Unit */ case 10: /* getroundingmode */ return mdTaskData->saveVec.push(getrounding(mdTaskData)); /* Floating point representation queries. */ #ifdef _DBL_RADIX case 11: /* Value of radix */ return mdTaskData->saveVec.push(TAGGED(_DBL_RADIX)); #else case 11: /* Value of radix */ return mdTaskData->saveVec.push(TAGGED(FLT_RADIX)); #endif case 12: /* Value of precision */ return mdTaskData->saveVec.push(TAGGED(DBL_MANT_DIG)); case 13: /* Maximum number */ return real_result(mdTaskData, DBL_MAX); /* float.h describes DBL_MIN as the minimum positive number. In fact this is the minimum NORMALISED number. The smallest number which can be represented is DBL_MIN*2**(-DBL_MANT_DIG) */ case 14: /* Minimum normalised number. */ return real_result(mdTaskData, DBL_MIN); case 15: /* Is finite */ return mdTaskData->saveVec.push(finite(real_arg(args)) ? TAGGED(1) : TAGGED(0)); case 16: /* Is Nan */ return mdTaskData->saveVec.push(isnan(real_arg(args)) ? TAGGED(1) : TAGGED(0)); case 17: /* Get sign bit. There may be better ways to find this. */ return mdTaskData->saveVec.push(copysign(1.0, real_arg(args)) < 0.0 ? TAGGED(1) : TAGGED(0)); case 18: /* Copy sign. */ return real_result(mdTaskData, copysign(real_arg1(args), real_arg2(args))); case 19: /* Return largest integral value (as a real) <= x. */ return real_result(mdTaskData, floor(real_arg(args))); case 20: /* Return smallest integral value (as a real) >= x */ return real_result(mdTaskData, ceil(real_arg(args))); case 21: { /* Truncate towards zero */ double dx = real_arg(args); if (dx >= 0.0) return real_result(mdTaskData, floor(dx)); else return real_result(mdTaskData, ceil(dx)); } case 22: /* Round to nearest integral value. */ { double dx = real_arg(args); double drem = fmod(dx, 2.0); if (drem == 0.5 || drem == -1.5) /* If the value was exactly positive even + 0.5 or negative odd -0.5 round it down, otherwise round it up. */ return real_result(mdTaskData, ceil(dx-0.5)); else return real_result(mdTaskData, floor(dx+0.5)); } case 23: /* Compute ldexp */ { int exp = get_C_long(mdTaskData, DEREFHANDLE(args)->Get(1)); return real_result(mdTaskData, ldexp(real_arg1(args), exp)); } case 24: /* Get mantissa. */ { int exp; return real_result(mdTaskData, frexp(real_arg(args), &exp)); } case 25: /* Get exponent. */ { int exp; (void)frexp(real_arg(args), &exp); return mdTaskData->saveVec.push(TAGGED(exp)); } case 26: /* Return the mantissa from a Nan as a real number. */ // I think this is no longer used. { union db r_arg_x, r_arg_y; /* We want to simply replace the exponent by the exponent value for 0.5<=x<1. I think there may be a more portable way of doing this. */ r_arg_x.dble = posInf; /* Positive infinity. */ r_arg_y.dble = 0.5; /* Use the infinity value as a mask, removing any bits set and replace by the exponent from 0.5. */ byte *barg = DEREFBYTEHANDLE(args); for(unsigned i = 0; i < DBLE; i++) { r_arg_x.bytes[i] = (barg[i] & ~r_arg_x.bytes[i]) | r_arg_y.bytes[i]; } return real_result(mdTaskData, r_arg_x.dble); } case 27: /* Construct a Nan from a given mantissa. */ // I think this is no longer used. { union db r_arg; r_arg.dble = posInf; /* Positive infinity. */ /* OR in the exponent. */ byte *barg = DEREFBYTEHANDLE(args); for(unsigned i = 0; i < DBLE; i++) { r_arg.bytes[i] = r_arg.bytes[i] | barg[i]; } return real_result(mdTaskData, r_arg.dble); } case 28: /* Return the number of bytes for a real. */ return mdTaskData->saveVec.push(TAGGED(sizeof(double))); default: { char msg[100]; sprintf(msg, "Unknown real arithmetic function: %d", c); raise_exception_string(mdTaskData, EXC_Fail, msg); return 0; } } } class RealArithmetic: public RtsModule { public: virtual void Init(void); }; // Declare this. It will be automatically added to the table. static RealArithmetic realModule; void RealArithmetic::Init(void) { /* Some compilers object to overflow in constants so we compute the values here. */ double zero = 0.0; #if(defined(HAVE_IEEEFP_H) && ! defined(__CYGWIN__)) /* In FreeBSD 3.4 at least, we sometimes get floating point exceptions if we don't clear the mask. Maybe need to do this on other platforms as well just to be sure. */ fpsetmask(0); #endif posInf = 1.0 / zero; negInf = -1.0 / zero; notANumber = zero / zero; } polyml.5.2.1/libpolyml/reals.h0000644000175000017500000000501610602661056015262 0ustar daviddavid/* Title: reals.h Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef _REALS_H #define _REALS_H class SaveVecEntry; typedef SaveVecEntry *Handle; class TaskData; extern double real_arg(Handle x); // Also used in "foreign.cpp" extern Handle real_result(TaskData *mdTaskData, double x); // Also used in "foreign.cpp" extern Handle Real_addc (TaskData *mdTaskData, Handle, Handle); extern Handle Real_subc (TaskData *mdTaskData, Handle, Handle); extern Handle Real_mulc (TaskData *mdTaskData, Handle, Handle); extern Handle Real_divc (TaskData *mdTaskData, Handle, Handle); extern Handle Real_negc (TaskData *mdTaskData, Handle); extern Handle Real_convc (TaskData *mdTaskData, Handle); extern Handle Real_intc (TaskData *mdTaskData, Handle); extern Handle Real_floatc (TaskData *mdTaskData, Handle); extern Handle Real_sqrtc (TaskData *mdTaskData, Handle); extern Handle Real_sinc (TaskData *mdTaskData, Handle); extern Handle Real_cosc (TaskData *mdTaskData, Handle); extern Handle Real_arctanc (TaskData *mdTaskData, Handle); extern Handle Real_expc (TaskData *mdTaskData, Handle); extern Handle Real_lnc (TaskData *mdTaskData, Handle); extern Handle Real_reprc (TaskData *mdTaskData, Handle); extern Handle Real_strc(TaskData *mdTaskData, Handle hDigits, Handle hMode, Handle arg); extern Handle Real_geqc(TaskData *mdTaskData, Handle y, Handle x); extern Handle Real_leqc(TaskData *mdTaskData, Handle y, Handle x); extern Handle Real_gtrc(TaskData *mdTaskData, Handle y, Handle x); extern Handle Real_lssc(TaskData *mdTaskData, Handle y, Handle x); extern Handle Real_eqc(TaskData *mdTaskData, Handle y, Handle x); extern Handle Real_neqc(TaskData *mdTaskData, Handle y, Handle x); extern Handle Real_dispatchc(TaskData *mdTaskData, Handle args, Handle code); #endif polyml.5.2.1/libpolyml/rts_module.cpp0000644000175000017500000000341210667031571016666 0ustar daviddavid/* Title: rts_module.cpp - Base class for the run-time system modules. Copyright (c) 2006 David C.J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifdef WIN32 #include "winconfig.h" #else #include "config.h" #endif #include "rts_module.h" #include "diagnostics.h" #define MAX_MODULES 20 static RtsModule *module_table[MAX_MODULES]; static unsigned modCount = 0; // Add a module to the table. This will be done during the static // initialisation phase. void RtsModule::RegisterModule(void) { if (modCount == MAX_MODULES) Crash("Too many run-time modules\n"); module_table[modCount++] = this; } void InitModules(void) { for(unsigned i = 0; i < modCount; i++) module_table[i]->Init(); } void ReinitModules(void) { for(unsigned i = 0; i < modCount; i++) module_table[i]->Reinit(); } void UninitModules(void) { for(unsigned i = 0; i < modCount; i++) module_table[i]->Uninit(); } void GCModules(ScanAddress *process) { for(unsigned i = 0; i < modCount; i++) module_table[i]->GarbageCollect(process); } polyml.5.2.1/libpolyml/rts_module.h0000644000175000017500000000260610667031571016337 0ustar daviddavid/* Title: rts_module.h - Base class for the run-time system modules. Copyright (c) 2006 David C.J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef RTS_MODULE_H_INCLUDED #define RTS_MODULE_H_INCLUDED class ScanAddress; class TaskData; class RtsModule { public: RtsModule() { RegisterModule(); } virtual ~RtsModule() {} // To keep GCC happy virtual void Init(void) {} virtual void Uninit(void) {} virtual void Reinit(void) {} virtual void GarbageCollect(ScanAddress * /*process*/) {} private: void RegisterModule(void); }; void InitModules(void); void ReinitModules(void); void UninitModules(void); void GCModules(ScanAddress *process); #endif polyml.5.2.1/libpolyml/run_time.cpp0000644000175000017500000014577310772160234016350 0ustar daviddavid/* Title: Run-time system. Author: Dave Matthews, Cambridge University Computer Laboratory Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ /* Contains most of the routines in the interface_map vector. Others are in their own modules e.g. arb.c, reals.c and persistence.c */ #ifdef WIN32 #include "winconfig.h" #else #include "config.h" #endif /************************************************************************ * * Include system headers * ************************************************************************/ #ifdef HAVE_STDIO_H #include #endif #ifdef HAVE_SIGNAL_H #include #endif #ifdef HAVE_ERRNO_H #include #endif #ifdef HAVE_FCNTL_H #include #endif #ifdef HAVE_STDLIB_H #include #endif #ifdef HAVE_STRING_H #include #endif #ifdef HAVE_LIMITS_H #include #endif #ifdef HAVE_ASSERT_H #include #define ASSERT(x) assert(x) #else #define ASSERT(x) 0 #endif #ifdef HAVE_WINDOWS_H #include #endif #ifdef HAVE_PROCESS_H #include #endif #ifdef HAVE_SYS_TYPES_H #include #endif #ifdef HAVE_SYS_STAT_H #include #endif #ifdef HAVE_IO_H #include #endif #ifdef HAVE_EXCPT_H #include #endif #ifdef HAVE_SYS_TIMES_H #include #endif #ifdef HAVE_SYS_SYSTEMINFO_H #include #endif #ifdef HAVE_UNISTD_H #include #endif /************************************************************************ * * Include runtime headers * ************************************************************************/ #include "globals.h" #include "gc.h" #include "xwindows.h" #include "mpoly.h" #include "arb.h" #include "machine_dep.h" #include "objsize.h" #include "foreign.h" #include "diagnostics.h" #include "processes.h" #include "profiling.h" #include "basicio.h" #include "run_time.h" #include "sys.h" #include "process_env.h" #include "timing.h" #include "network.h" #include "os_specific.h" #include "sighandler.h" #include "reals.h" #include "scanaddrs.h" #include "check_objects.h" #include "polystring.h" #include "poly_specific.h" #include "save_vec.h" #include "rts_module.h" #include "memmgr.h" #define SAVE(x) taskData->saveVec.push(x) #define SIZEOF(x) (sizeof(x)/sizeof(PolyWord)) // used heavily by MD_init_interface_vector in machine_dep.c void add_word_to_io_area (unsigned sysop, PolyWord val) { ASSERT (sysop > 0 && sysop < 256); PolyWord *objAddr = IoEntry(sysop); objAddr[0] = val; } /******************************************************************************/ /* */ /* STORAGE ALLOCATION */ /* */ /******************************************************************************/ // This is the storage allocator for allocating heap objects in the RTS. PolyObject *alloc(TaskData *taskData, POLYUNSIGNED data_words, unsigned flags) /* Allocate a number of words. */ { POLYUNSIGNED words = data_words + 1; if (profileMode == kProfileStoreAllocation) { StackObject *stack = taskData->stack; add_count(taskData, stack->p_pc, stack->p_sp, words); } PolyWord *foundSpace = processes->FindAllocationSpace(taskData, words, false); if (foundSpace == 0) { // Failed - the thread is set to raise an exception. throw IOException(EXC_EXCEPTION); } PolyObject *pObj = (PolyObject*)(foundSpace + 1); pObj->SetLengthWord(data_words, flags); // Must initialise object here, because GC doesn't clean store. // N.B. This sets the store to zero NOT TAGGED(0). // This is particularly important for byte segments (e.g. strings) since the // ML code may leave bytes at the end uninitialised. Structure equality // checks all the bytes so for it to work properly we need to be sure that // they always have the same value. for (POLYUNSIGNED i = 0; i < data_words; i++) pObj->Set(i, PolyWord::FromUnsigned(0)); return pObj; } /******************************************************************************/ /* */ /* alloc_and_save - called by run-time system */ /* */ /******************************************************************************/ Handle alloc_and_save(TaskData *taskData, POLYUNSIGNED size, unsigned flags) /* Allocate and save the result on the vector. */ { return SAVE(alloc(taskData, size, flags)); } /******************************************************************************/ /* */ /* full_gc_c - called by assembly code */ /* */ /******************************************************************************/ /* CALL_IO0(full_gc_, NOIND) */ Handle full_gc_c(TaskData *taskData) { FullGC(taskData); return SAVE(TAGGED(0)); } /******************************************************************************/ /* */ /* EXCEPTIONS */ /* */ /******************************************************************************/ Handle make_exn(TaskData *taskData, int id, Handle arg) { const char *exName; switch (id) { case EXC_interrupt: exName = "Interrupt"; break; case EXC_syserr: exName = "SysErr"; break; case EXC_size: exName = "Size"; break; case EXC_overflow: exName = "Overflow"; break; case EXC_underflow: exName = "Underflow"; break; case EXC_divide: exName = "Div"; break; case EXC_conversion: exName = "Conversion"; break; case EXC_XWindows: exName = "XWindows"; break; case EXC_subscript: exName = "Subscript"; break; case EXC_foreign: exName = "Foreign"; break; case EXC_Fail: exName = "Fail"; break; case EXC_thread: exName = "Thread"; break; default: ASSERT(0); exName = "Unknown"; // Shouldn't happen. } Handle pushed_name = SAVE(C_string_to_Poly(taskData, exName)); Handle exnHandle = alloc_and_save(taskData, SIZEOF(poly_exn)); DEREFEXNHANDLE(exnHandle)->ex_id = TAGGED(id); DEREFEXNHANDLE(exnHandle)->ex_name = DEREFWORD(pushed_name); DEREFEXNHANDLE(exnHandle)->arg = DEREFWORDHANDLE(arg); return exnHandle; } /******************************************************************************/ /* */ /* raise_exception - called by run-time system */ /* */ /******************************************************************************/ void raise_exception(TaskData *taskData, int id, Handle arg) /* Raise an exception with no arguments. */ { Handle exn = make_exn(taskData, id, arg); /* N.B. We must create the packet first BEFORE dereferencing the process handle just in case a GC while creating the packet moves the process and/or the stack. */ machineDependent->SetException(taskData, DEREFEXNHANDLE(exn)); throw IOException(EXC_EXCEPTION); /* Return to Poly code immediately. */ /*NOTREACHED*/ } /******************************************************************************/ /* */ /* raise_exception0 - called by run-time system */ /* */ /******************************************************************************/ void raise_exception0(TaskData *taskData, int id) /* Raise an exception with no arguments. */ { raise_exception(taskData, id, SAVE(TAGGED(0))); /*NOTREACHED*/ } /******************************************************************************/ /* */ /* raise_exception_string - called by run-time system */ /* */ /******************************************************************************/ void raise_exception_string(TaskData *taskData, int id, const char *str) /* Raise an exception with a C string as the argument. */ { raise_exception(taskData, id, SAVE(C_string_to_Poly(taskData, str))); /*NOTREACHED*/ } /******************************************************************************/ /* */ /* create_syscall_exception - called by run-time system */ /* */ /******************************************************************************/ // Create a syscall exception packet. Handle create_syscall_exception(TaskData *taskData, const char *errmsg, int err) { /* exception SysErr of (string * syserror Option.option) */ /* If the argument is zero we don't have a suitable error number so map this to NONE. Other values are mapped to SOME(n) */ /* Create a pair of the error message and the error number. */ Handle pushed_option, pushed_name, pair; if (err == 0) pushed_option = SAVE(NONE_VALUE); /* NONE */ else { /* SOME err */ Handle errornum = Make_arbitrary_precision(taskData, err); pushed_option = alloc_and_save(taskData, 1); DEREFHANDLE(pushed_option)->Set(0, DEREFWORDHANDLE(errornum)); } pushed_name = SAVE(C_string_to_Poly(taskData, errmsg)); pair = alloc_and_save(taskData, 2); DEREFHANDLE(pair)->Set(0, DEREFWORDHANDLE(pushed_name)); DEREFHANDLE(pair)->Set(1, DEREFWORDHANDLE(pushed_option)); return pair; } /* Raises a Syserr exception. */ void raise_syscall(TaskData *taskData, const char *errmsg, int err) { raise_exception(taskData, EXC_syserr, create_syscall_exception(taskData, errmsg, err)); } // Raises a Fail exception. void raise_fail(TaskData *taskData, const char *errmsg) { raise_exception_string(taskData, EXC_Fail, errmsg); } /******************************************************************************/ /* */ /* TRACE FUNCTIONS */ /* */ /******************************************************************************/ bool trace_allowed = false; // Allows ^C to abort a trace. /******************************************************************************/ /* */ /* give_stack_trace - utility function - doesn't allocate */ /* */ /******************************************************************************/ void give_stack_trace(TaskData *taskData, PolyWord *sp, PolyWord *finish) { /* Now search for the return addresses on the stack. The values we find on the stack which are not PolyWord aligned may be either return addresses or the addresses of handlers. */ trace_allowed = true; /* May be switch off by catchINT. */ // The exception handler is used to suppress the addresses of // handlers which would otherwise look like return addresses. // Since we don't pass that in we may find it is actually out of // date if we are producing a trace as a result of pressing ^C. StackObject *stack = taskData->stack; PolyWord *exceptions = stack->p_hr; PolyWord *endStack = stack->Offset(stack->Length()); #ifdef DEBUG printf("starting trace: sp = %p, finish = %p, end_of_stack = %p\n", sp, finish, endStack); fflush(stdout); #endif if (finish > endStack) finish = endStack; for(; trace_allowed && sp < finish-1; sp++) { PolyWord pc = *sp; /* If this is an exception handler do not treat it as return address, just get the next handler */ if (sp == exceptions) { /* Skip over the handlers until we find the next pointer up the stack. */ while (sp < finish) { exceptions = (*sp).AsStackAddr(); if (exceptions >= sp && exceptions <= endStack) break; sp++; } } else if (pc.IsCodePtr()) { /* A code pointer will be either a return address or a pointer to the constant section. (Or an exception handler?) */ PolyWord *ptr; // We used to have a check that this was not a constant area // pointer but we don't have those any more. /* Initialise ptr to points at the end-of-code marker */ OBJ_CODEPTR_TO_CONSTS_PTR(pc, ptr); PolyWord p_name = ptr[3]; /* Get procedure name */ /* The name may be zero if it is anonymous */ if (p_name == TAGGED(0)) fputs("\n",stdout); else { print_string(p_name); putc('\n',stdout); } } } fflush(stdout); } /******************************************************************************/ /* */ /* stack_trace_c - called from assembly code */ /* */ /******************************************************************************/ /* CALL_IO0(stack_trace_, NOIND) */ static Handle stack_trace_c(TaskData *taskData) { StackObject *stack = taskData->stack; PolyWord *endStack = stack->Offset(stack->Length()); give_stack_trace (taskData, stack->p_sp, endStack); return SAVE(TAGGED(0)); } /******************************************************************************/ /* */ /* ex_tracec - called from assembly code */ /* */ /******************************************************************************/ /* CALL_IO2(ex_trace, REF, REF, NOIND) */ Handle ex_tracec(TaskData *taskData, Handle exnHandle, Handle handler_handle) { PolyWord *handler = DEREFWORD(handler_handle).AsStackAddr(); fputs("\nException trace for exception - ", stdout); print_string(((poly_exn *)DEREFHANDLE(exnHandle))->ex_name); putc('\n',stdout); /* Trace down as far as the dummy handler on the stack. */ StackObject *stack = taskData->stack; give_stack_trace(taskData, stack->p_sp, handler); fputs("End of trace\n\n",stdout); fflush(stdout); /* Set up the next handler so we don't come back here when we raise the exception again. */ taskData->stack->p_hr = (PolyWord*)(handler->AsStackAddr()); /* Set the exception data back again. */ machineDependent->SetException(taskData, (poly_exn *)DEREFHANDLE(exnHandle)); throw IOException(EXC_EXCEPTION); /* Reraise the exception. */ /*NOTREACHED*/ } /* end of interrupt handling */ // Return the address of the iovec entry for a given index. Handle io_operation_c(TaskData *taskData, Handle entry) { POLYUNSIGNED entryNo = get_C_ulong(taskData, DEREFWORD(entry)); if (entryNo >= POLY_SYS_vecsize) raise_exception0(taskData, EXC_subscript); return SAVE((PolyObject*)IoEntry(entryNo)); } /******************************************************************************/ /* */ /* INITIALISATION */ /* */ /******************************************************************************/ /******************************************************************************/ /* */ /* re_init_run_time_system - called from mpoly.c */ /* */ /******************************************************************************/ void re_init_run_time_system(void) { ReinitModules(); } /******************************************************************************/ /* */ /* init_run_time_system - called from mpoly.c */ /* */ /******************************************************************************/ void init_run_time_system(void) { InitModules(); // Initialise other modules. } /******************************************************************************/ /* */ /* uninit_run_time_system - called from ??? */ /* */ /******************************************************************************/ /* Release all resources. This is really only needed with Windows when running as a DLL within the address space of another process. */ void uninit_run_time_system(void) { UninitModules(); #if (0) uninit_xwindow_system(); /* Probably needs to be done. */ #endif } /******************************************************************************/ /* */ /* get_flags_c - called from machine_assembly.s */ /* */ /******************************************************************************/ /* CALL_IO1(get_flags_,REF,NOIND) */ static Handle get_flags_c(TaskData *taskData, Handle addr_handle) { PolyObject *pt = DEREFWORDHANDLE(addr_handle); PolyWord *addr = (PolyWord*)pt; /* This is for backwards compatibility only. Previously this was used to test for an IO address. Instead an entry has been added to process_env to test for an IO address. */ if (gMem.IsIOPointer(addr)) { return SAVE(TAGGED(256)); } else { const POLYUNSIGNED old_word = pt->LengthWord(); const POLYUNSIGNED old_flags = ((old_word & OBJ_PRIVATE_USER_FLAGS_MASK) >> OBJ_PRIVATE_FLAGS_SHIFT); return SAVE(TAGGED(old_flags)); } } // This is called twice when constructing a piece of code. The first // time is to convert a mutable byte segment into a mutable code segment and // the second call is to freeze the mutable code segment. The reason for the // two calls is that we first have to make sure we have a validly formatted code // segment with the "number of constants" value set before we can make it a code // segment and actually store the constants in it. Handle CodeSegmentFlags(TaskData *taskData, Handle flags_handle, Handle addr_handle) { PolyObject *pt = DEREFWORDHANDLE(addr_handle); unsigned short newFlags = get_C_ushort(taskData, DEREFWORD(flags_handle)); if (newFlags >= 256) raise_exception_string(taskData, EXC_Fail, "FreezeCodeSegment flags must be less than 256"); if (! pt->IsMutable()) raise_exception_string(taskData, EXC_Fail, "FreezeCodeSegment must be applied to a mutable segment"); const POLYUNSIGNED objLength = pt->Length(); pt->SetLengthWord(objLength, (byte)newFlags); // Flush the cache on architectures that need it. if (pt->IsCodeObject() && ! pt->IsMutable()) machineDependent->FlushInstructionCache(pt, objLength * sizeof(PolyWord)); return SAVE(TAGGED(0)); } /******************************************************************************/ /* */ /* BadOpCode_c - called from machine_assembly.s */ /* */ /******************************************************************************/ Handle BadOpCode_c(TaskData *taskData) { raise_exception_string(taskData, EXC_Fail, "Bad RunTime OpCode"); return SAVE(TAGGED(1)); } /* CALL_IO3(assign_byte_long_, REF, REF, REF, NOIND) */ static Handle assign_byte_long_c(TaskData *taskData, Handle value_handle, Handle byte_no, Handle vector) { PolyWord value = DEREFHANDLE(value_handle); POLYUNSIGNED offset = get_C_ulong(taskData, DEREFWORDHANDLE(byte_no)); /* SPF 31/10/93 */ byte *pointer = DEREFBYTEHANDLE(vector); byte v = (byte)UNTAGGED(value); pointer[offset] = v; return taskData->saveVec.push(TAGGED(0)); } /* CALL_IO3(assign_word_long_, REF, REF, REF, NOIND) */ static Handle assign_word_long_c(TaskData *taskData, Handle value_handle, Handle word_no, Handle vector) { PolyWord value = DEREFHANDLE(value_handle); POLYUNSIGNED offset = get_C_ulong(taskData, DEREFWORDHANDLE(word_no)); /* SPF 31/10/93 */ PolyObject *pointer = DEREFWORDHANDLE(vector); pointer->Set(offset, value); return taskData->saveVec.push(TAGGED(0)); } /* CALL_IO5(move_bytes_long_, REF, REF, REF, REF, REF, NOIND) */ /* Move a segment of bytes, typically a string. */ static Handle move_bytes_long_c(TaskData *taskData, Handle len, Handle dest_offset_handle, Handle dest_handle, Handle src_offset_handle, Handle src_handle) { unsigned src_offset = get_C_ulong(taskData, DEREFWORDHANDLE(src_offset_handle)); byte *source = DEREFBYTEHANDLE(src_handle) + src_offset; unsigned dest_offset = get_C_ulong(taskData, DEREFWORDHANDLE(dest_offset_handle)); byte *destination = DEREFBYTEHANDLE(dest_handle); byte *dest = destination + dest_offset; unsigned bytes = get_C_ulong(taskData, DEREFWORDHANDLE(len)); PolyObject *obj = DEREFHANDLE(dest_handle); ASSERT(obj->IsByteObject()); memmove(dest, source, bytes); /* must work for overlapping segments. */ return taskData->saveVec.push(TAGGED(0)); } /* CALL_IO5(move_words_long_, REF, REF, REF, REF, REF, NOIND) */ /* Move a segment of words. Similar to move_bytes_long_ except that it is used for PolyWord segments. */ static Handle move_words_long_c(TaskData *taskData, Handle len, Handle dest_offset_handle, Handle dest_handle, Handle src_offset_handle, Handle src_handle) { POLYUNSIGNED src_offset = get_C_ulong(taskData, DEREFWORDHANDLE(src_offset_handle)); PolyObject *sourceObj = DEREFWORDHANDLE(src_handle); PolyWord *source = sourceObj->Offset(src_offset); POLYUNSIGNED dest_offset = get_C_ulong(taskData, DEREFWORDHANDLE(dest_offset_handle)); PolyObject *destObject = DEREFWORDHANDLE(dest_handle); PolyWord *dest = destObject->Offset(dest_offset); POLYUNSIGNED words = get_C_ulong(taskData, DEREFWORDHANDLE(len)); ASSERT(! destObject->IsByteObject()); memmove(dest, source, words*sizeof(PolyWord)); /* must work for overlapping segments. */ return taskData->saveVec.push(TAGGED(0)); } static Handle vec_length_c(TaskData *taskData, Handle vector) /* Length of a vector */ { POLYUNSIGNED length = vector->WordP()->Length(); return Make_arbitrary_precision(taskData, length); } static Handle load_byte_long_c(TaskData *taskData, Handle byte_no /* offset in BYTES */, Handle addr) { POLYUNSIGNED offset = get_C_ulong(taskData, DEREFWORDHANDLE(byte_no)); return taskData->saveVec.push(TAGGED(DEREFBYTEHANDLE(addr)[offset])); } static Handle load_word_long_c(TaskData *taskData, Handle word_no /* offset in WORDS */, Handle addr) { POLYUNSIGNED offset = get_C_ulong(taskData, DEREFWORDHANDLE(word_no)); return taskData->saveVec.push(addr->Word().AsObjPtr()->Get(offset)); } // In most cases the assembly coded version of this will handle the // allocation. The function can be called by the assembly code // when it finds it has run out. Using it avoids us having a // return address into the assembly code. static Handle alloc_store_long_c(TaskData *taskData, Handle initial, Handle flags_handle, Handle size ) { POLYUNSIGNED flags = get_C_ulong(taskData, DEREFWORD(flags_handle)); POLYUNSIGNED usize = get_C_ulong(taskData, DEREFWORD(size)); if (usize == 0) usize = 1; if (usize >= MAX_OBJECT_SIZE) raise_exception0(taskData, EXC_size); PolyObject *vector = alloc(taskData, usize, flags| F_MUTABLE_BIT); PolyWord value = DEREFWORD(initial); if (vector->IsByteObject()) { // Byte segments are supposed to be initialised only with zero if (value != TAGGED(0)) raise_exception_string(taskData, EXC_Fail, "non-zero byte segment"); } else if (value != PolyWord::FromUnsigned(0)) { for (POLYUNSIGNED i = 0; i < usize; i++) vector->Set(i, value); } return taskData->saveVec.push(vector); } /* Word functions. These functions assume that their arguments are tagged integers and treat them as unsigned values. These functions will almost always be implemented directly in the code generator with back-up versions in the machine-dependent assembly code section. They are included here for completeness. */ static Handle mul_word_c(TaskData *taskData, Handle y, Handle x) { POLYUNSIGNED wx = UNTAGGED_UNSIGNED(DEREFWORD(x)); POLYUNSIGNED wy = UNTAGGED_UNSIGNED(DEREFWORD(y)); return taskData->saveVec.push(TAGGED(wx*wy)); } static Handle plus_word_c(TaskData *taskData, Handle y, Handle x) { POLYUNSIGNED wx = UNTAGGED_UNSIGNED(DEREFWORD(x)); POLYUNSIGNED wy = UNTAGGED_UNSIGNED(DEREFWORD(y)); return taskData->saveVec.push(TAGGED(wx+wy)); } static Handle minus_word_c(TaskData *taskData, Handle y, Handle x) { POLYUNSIGNED wx = UNTAGGED_UNSIGNED(DEREFWORD(x)); POLYUNSIGNED wy = UNTAGGED_UNSIGNED(DEREFWORD(y)); return taskData->saveVec.push(TAGGED(wx-wy)); } static Handle div_word_c(TaskData *taskData, Handle y, Handle x) { POLYUNSIGNED wx = UNTAGGED_UNSIGNED(DEREFWORD(x)); POLYUNSIGNED wy = UNTAGGED_UNSIGNED(DEREFWORD(y)); if (wy == 0) raise_exception0(taskData, EXC_divide); return taskData->saveVec.push(TAGGED(wx/wy)); } static Handle mod_word_c(TaskData *taskData, Handle y, Handle x) { // In most cases it doesn't matter whether we use UNTAGGED or UNTAGGED_UNSIGNED // but in mod we will get the wrong answer if we use UNTAGGED here. POLYUNSIGNED wx = UNTAGGED_UNSIGNED(DEREFWORD(x)); POLYUNSIGNED wy = UNTAGGED_UNSIGNED(DEREFWORD(y)); if (wy == 0) raise_exception0(taskData, EXC_divide); return taskData->saveVec.push(TAGGED(wx%wy)); } static Handle word_eq_c(TaskData *taskData, Handle y, Handle x) { POLYUNSIGNED wx = UNTAGGED_UNSIGNED(DEREFWORD(x)); POLYUNSIGNED wy = UNTAGGED_UNSIGNED(DEREFWORD(y)); return taskData->saveVec.push(wx==wy ? TAGGED(1) : TAGGED(0)); } static Handle word_neq_c(TaskData *taskData, Handle y, Handle x) { POLYUNSIGNED wx = UNTAGGED_UNSIGNED(DEREFWORD(x)); POLYUNSIGNED wy = UNTAGGED_UNSIGNED(DEREFWORD(y)); return taskData->saveVec.push(wx!=wy ? TAGGED(1) : TAGGED(0)); } static Handle word_geq_c(TaskData *taskData, Handle y, Handle x) { POLYUNSIGNED wx = UNTAGGED_UNSIGNED(DEREFWORD(x)); POLYUNSIGNED wy = UNTAGGED_UNSIGNED(DEREFWORD(y)); return taskData->saveVec.push(wx>=wy ? TAGGED(1) : TAGGED(0)); } static Handle word_leq_c(TaskData *taskData, Handle y, Handle x) { POLYUNSIGNED wx = UNTAGGED_UNSIGNED(DEREFWORD(x)); POLYUNSIGNED wy = UNTAGGED_UNSIGNED(DEREFWORD(y)); return taskData->saveVec.push(wx<=wy ? TAGGED(1) : TAGGED(0)); } static Handle word_gtr_c(TaskData *taskData, Handle y, Handle x) { POLYUNSIGNED wx = UNTAGGED_UNSIGNED(DEREFWORD(x)); POLYUNSIGNED wy = UNTAGGED_UNSIGNED(DEREFWORD(y)); return taskData->saveVec.push(wx>wy ? TAGGED(1) : TAGGED(0)); } static Handle word_lss_c(TaskData *taskData, Handle y, Handle x) { POLYUNSIGNED wx = UNTAGGED_UNSIGNED(DEREFWORD(x)); POLYUNSIGNED wy = UNTAGGED_UNSIGNED(DEREFWORD(y)); return taskData->saveVec.push(wxsaveVec.push(TAGGED(wx & wy)); } static Handle or_word_c(TaskData *taskData, Handle y, Handle x) { /* Normally it isn't necessary to remove the tags and put them back on again. We leave this code as it is just in case some architecture does it differently. */ POLYUNSIGNED wx = UNTAGGED_UNSIGNED(DEREFWORD(x)); POLYUNSIGNED wy = UNTAGGED_UNSIGNED(DEREFWORD(y)); return taskData->saveVec.push(TAGGED(wx | wy)); } static Handle xor_word_c(TaskData *taskData, Handle y, Handle x) { POLYUNSIGNED wx = UNTAGGED_UNSIGNED(DEREFWORD(x)); POLYUNSIGNED wy = UNTAGGED_UNSIGNED(DEREFWORD(y)); return taskData->saveVec.push(TAGGED(wx ^ wy)); } static Handle not_bool_c(TaskData *taskData, Handle x) { return taskData->saveVec.push(DEREFWORD(x) == TAGGED(0) ? TAGGED(1) : TAGGED(0)); } static Handle shift_left_word_c(TaskData *taskData, Handle y, Handle x) { POLYUNSIGNED wx = UNTAGGED_UNSIGNED(DEREFWORD(x)); POLYUNSIGNED wy = UNTAGGED_UNSIGNED(DEREFWORD(y)); /* It is defined to return 0 if the shift is greater than the number of bits in the PolyWord. The shift instructions on many architectures don't get that right. */ if (wy > sizeof(PolyWord)*8) return taskData->saveVec.push(TAGGED(0)); return taskData->saveVec.push(TAGGED(wx< sizeof(PolyWord)*8) return taskData->saveVec.push(TAGGED(0)); return taskData->saveVec.push(TAGGED(wx>>wy)); } static Handle shift_right_arith_word_c(TaskData *taskData, Handle y, Handle x) { POLYUNSIGNED wx = UNTAGGED_UNSIGNED(DEREFWORD(x)); /* Treat as a signed quantity. */ POLYUNSIGNED wy = UNTAGGED_UNSIGNED(DEREFWORD(y)); /* It is defined to return 0 or ~1 if the shift is greater than the number of bits in the word. The shift instructions on many architectures don't get that right. */ if (wy > sizeof(PolyWord)*8) return taskData->saveVec.push(wx < 0 ? TAGGED(-1) : TAGGED(0)); return taskData->saveVec.push(TAGGED(wx>>wy)); } static Handle set_code_constant(TaskData *taskData, Handle data, Handle constant, Handle offseth, Handle base) { machineDependent->SetCodeConstant(taskData, data, constant, offseth, base); return taskData->saveVec.push(TAGGED(0)); } void CheckAndGrowStack(TaskData *taskData, PolyWord *lower_limit) /* Expands the current stack if it has grown. We cannot shrink a stack segment when it grows smaller because the frame is checked only at the beginning of a procedure to ensure that there is enough space for the maximum that can be allocated. */ { /* Get current size of new stack segment. */ POLYUNSIGNED old_len = OBJECT_LENGTH(taskData->stack); /* The minimum size must include the reserved space for the registers. */ POLYUNSIGNED min_size = ((PolyWord*)taskData->stack) + old_len - lower_limit + taskData->stack->p_space; if (old_len >= min_size) return; /* Ok with present size. */ // If it is too small double its size. // BUT, the maximum size is 2^24-1 words (on 32 bit) or 2^56-1 on 64 bit. if (old_len == MAX_OBJECT_SIZE) { /* Cannot expand the stack any further. */ fprintf(stderr, "Warning - Stack limit reached - interrupting process\n"); // We really should do this only if the thread is handling interrupts // asynchronously. On the other hand what else do we do? Handle exn = make_exn(taskData, EXC_interrupt, SAVE(TAGGED(0))); machineDependent->SetException(taskData, DEREFEXNHANDLE(exn)); return; } POLYUNSIGNED new_len; /* New size */ for (new_len = old_len; new_len < min_size; new_len *= 2); if (new_len > MAX_OBJECT_SIZE) new_len = MAX_OBJECT_SIZE; /* Must make a new frame and copy the data over. */ StackObject *new_stack = // N.B. May throw a C++ exception. (StackObject *)alloc(taskData, new_len, F_MUTABLE_BIT|F_STACK_OBJ); CopyStackFrame(taskData->stack, new_stack); taskData->stack = new_stack; } // This is used after executing each top-level command to minimise the // heap size. It's fairly dubious and there ought to be a better way to do this. static Handle shrink_stack_c(TaskData *taskData, Handle reserved_space) /* Shrinks the current stack. */ { int reserved = get_C_long(taskData, DEREFWORDHANDLE(reserved_space)); int old_len; /* Current size of stack segment. */ int new_len; /* New size */ int min_size; StackObject *new_stack; if (reserved < 0) { raise_exception0(taskData, EXC_size); } /* Get current size of new stack segment. */ old_len = OBJECT_LENGTH(taskData->stack); /* The minimum size must include the reserved space for the registers. */ min_size = (((PolyWord*)taskData->stack) + old_len - (PolyWord*)taskData->stack->p_sp) + taskData->stack->p_space + reserved; for (new_len = machineDependent->InitialStackSize(); new_len < min_size; new_len *= 2); if (old_len <= new_len) return SAVE(TAGGED(0)); /* OK with present size. */ /* Must make a new frame and copy the data over. */ new_stack = (StackObject *)alloc(taskData, new_len, F_MUTABLE_BIT|F_STACK_OBJ); CopyStackFrame(taskData->stack, new_stack); taskData->stack = new_stack; return SAVE(TAGGED(0)); } Handle EnterPolyCode(TaskData *taskData) /* Called from "main" to enter the code. */ { Handle hOriginal = taskData->saveVec.mark(); // Set this up for the IO calls. while (1) { taskData->saveVec.reset(hOriginal); // Remove old RTS arguments and results. // Run the ML code and return with the function to call. int ioFunction = machineDependent->SwitchToPoly(taskData); try { switch (ioFunction) { case -1: // We've been interrupted. This usually involves simulating a // stack overflow so we could come here because of a genuine // stack overflow. // Previously this code was executed on every RTS call but there // were problems on Mac OS X at least with contention on schedLock. taskData->pendingInterrupt = false; // Clear this before we handle these // Process any asynchronous events i.e. interrupts or kill processes->ProcessAsynchRequests(taskData); // Release and re-acquire use of the ML memory to allow another thread // to GC. processes->ThreadReleaseMLMemory(taskData); processes->ThreadUseMLMemory(taskData); break; case -2: // A callback has returned. return machineDependent->CallBackResult(taskData); case POLY_SYS_exit: machineDependent->CallIO1(taskData, &finishc); break; case POLY_SYS_alloc_store: machineDependent->CallIO3(taskData, &alloc_store_long_c); break; case POLY_SYS_chdir: machineDependent->CallIO1(taskData, &change_dirc); break; case POLY_SYS_get_length: machineDependent->CallIO1(taskData, &vec_length_c); break; case POLY_SYS_get_flags: machineDependent->CallIO1(taskData, &get_flags_c); break; case POLY_SYS_str_compare: machineDependent->CallIO2(taskData, compareStrings); break; case POLY_SYS_teststreq: machineDependent->CallIO2(taskData, &testStringEqual); break; case POLY_SYS_teststrneq: machineDependent->CallIO2(taskData, &testStringNotEqual); break; case POLY_SYS_teststrgtr: machineDependent->CallIO2(taskData, &testStringGreater); break; case POLY_SYS_teststrlss: machineDependent->CallIO2(taskData, &testStringLess); break; case POLY_SYS_teststrgeq: machineDependent->CallIO2(taskData, &testStringGreaterOrEqual); break; case POLY_SYS_teststrleq: machineDependent->CallIO2(taskData, &testStringLessOrEqual); break; case POLY_SYS_exception_trace: // Special case. machineDependent->SetExceptionTrace(taskData); break; // case POLY_SYS_lockseg: machineDependent->CallIO1(taskData, &locksegc); break; case POLY_SYS_profiler: machineDependent->CallIO1(taskData, &profilerc); break; // case POLY_SYS_is_short: machineDependent->CallIO1(taskData, &is_shortc); break; case POLY_SYS_aplus: machineDependent->CallIO2(taskData, &add_longc); break; case POLY_SYS_aminus: machineDependent->CallIO2(taskData, &sub_longc); break; case POLY_SYS_amul: machineDependent->CallIO2(taskData, &mult_longc); break; case POLY_SYS_adiv: machineDependent->CallIO2(taskData, &div_longc); break; case POLY_SYS_amod: machineDependent->CallIO2(taskData, &rem_longc); break; case POLY_SYS_aneg: machineDependent->CallIO1(taskData, &neg_longc); break; case POLY_SYS_equala: machineDependent->CallIO2(taskData, &equal_longc); break; case POLY_SYS_ora: machineDependent->CallIO2(taskData, &or_longc); break; case POLY_SYS_anda: machineDependent->CallIO2(taskData, &and_longc); break; case POLY_SYS_xora: machineDependent->CallIO2(taskData, &xor_longc); break; case POLY_SYS_Real_str: machineDependent->CallIO3(taskData, &Real_strc); break; case POLY_SYS_Real_geq: machineDependent->CallIO2(taskData, &Real_geqc); break; case POLY_SYS_Real_leq: machineDependent->CallIO2(taskData, &Real_leqc); break; case POLY_SYS_Real_gtr: machineDependent->CallIO2(taskData, &Real_gtrc); break; case POLY_SYS_Real_lss: machineDependent->CallIO2(taskData, &Real_lssc); break; case POLY_SYS_Real_eq: machineDependent->CallIO2(taskData, &Real_eqc); break; case POLY_SYS_Real_neq: machineDependent->CallIO2(taskData, &Real_neqc); break; case POLY_SYS_Real_Dispatch: machineDependent->CallIO2(taskData, &Real_dispatchc); break; case POLY_SYS_Add_real: machineDependent->CallIO2(taskData, &Real_addc); break; case POLY_SYS_Sub_real: machineDependent->CallIO2(taskData, &Real_subc); break; case POLY_SYS_Mul_real: machineDependent->CallIO2(taskData, &Real_mulc); break; case POLY_SYS_Div_real: machineDependent->CallIO2(taskData, &Real_divc); break; case POLY_SYS_Neg_real: machineDependent->CallIO1(taskData, &Real_negc); break; case POLY_SYS_Repr_real: machineDependent->CallIO1(taskData, &Real_reprc); break; case POLY_SYS_conv_real: machineDependent->CallIO1(taskData, &Real_convc); break; case POLY_SYS_real_to_int: machineDependent->CallIO1(taskData, &Real_intc); break; case POLY_SYS_int_to_real: machineDependent->CallIO1(taskData, &Real_floatc); break; case POLY_SYS_sqrt_real: machineDependent->CallIO1(taskData, &Real_sqrtc); break; case POLY_SYS_sin_real: machineDependent->CallIO1(taskData, &Real_sinc); break; case POLY_SYS_cos_real: machineDependent->CallIO1(taskData, &Real_cosc); break; case POLY_SYS_arctan_real: machineDependent->CallIO1(taskData, &Real_arctanc); break; case POLY_SYS_exp_real: machineDependent->CallIO1(taskData, &Real_expc); break; case POLY_SYS_ln_real: machineDependent->CallIO1(taskData, &Real_lnc); break; case POLY_SYS_io_operation: machineDependent->CallIO1(taskData, &io_operation_c); break; case POLY_SYS_atomic_incr: machineDependent->CallIO1(taskData, &AtomicIncrement); break; case POLY_SYS_atomic_decr: machineDependent->CallIO1(taskData, &AtomicDecrement); break; case POLY_SYS_thread_self: machineDependent->CallIO0(taskData, &ThreadSelf); break; case POLY_SYS_thread_dispatch: machineDependent->CallIO2(taskData, &ThreadDispatch); break; // case POLY_SYS_offset_address: machineDependent->CallIO2(taskData, &offset_addressc); break; case POLY_SYS_shift_right_word: machineDependent->CallIO2(taskData, &shift_right_word_c); break; case POLY_SYS_word_neq: machineDependent->CallIO2(taskData, &word_neq_c); break; case POLY_SYS_not_bool: machineDependent->CallIO1(taskData, ¬_bool_c); break; case POLY_SYS_string_length: machineDependent->CallIO1(taskData, &string_length_c); break; case POLY_SYS_int_eq: machineDependent->CallIO2(taskData, &equal_longc); break; case POLY_SYS_int_neq: machineDependent->CallIO2(taskData, ¬_equal_longc); break; case POLY_SYS_int_geq: machineDependent->CallIO2(taskData, &ge_longc); break; case POLY_SYS_int_leq: machineDependent->CallIO2(taskData, &le_longc); break; case POLY_SYS_int_gtr: machineDependent->CallIO2(taskData, >_longc); break; case POLY_SYS_int_lss: machineDependent->CallIO2(taskData, &ls_longc); break; case POLY_SYS_or_word: machineDependent->CallIO2(taskData, &or_word_c); break; case POLY_SYS_and_word: machineDependent->CallIO2(taskData, &and_word_c); break; case POLY_SYS_xor_word: machineDependent->CallIO2(taskData, &xor_word_c); break; case POLY_SYS_shift_left_word: machineDependent->CallIO2(taskData, &shift_left_word_c); break; case POLY_SYS_word_eq: machineDependent->CallIO2(taskData, &word_eq_c); break; case POLY_SYS_load_byte: machineDependent->CallIO2(taskData, &load_byte_long_c); break; case POLY_SYS_load_word: machineDependent->CallIO2(taskData, &load_word_long_c); break; // case POLY_SYS_is_big_endian: machineDependent->CallIO0(taskData, &is_big_endianc); break; // case POLY_SYS_bytes_per_word: machineDependent->CallIO0(taskData, &bytes_per_wordc); break; case POLY_SYS_assign_byte: machineDependent->CallIO3(taskData, &assign_byte_long_c); break; case POLY_SYS_assign_word: machineDependent->CallIO3(taskData, &assign_word_long_c); break; // ObjSize and ShowSize are now in the poly_specific functions and // probably should be removed from here. case POLY_SYS_objsize: machineDependent->CallIO1(taskData, &ObjSize); break; case POLY_SYS_showsize: machineDependent->CallIO1(taskData, &ShowSize); break; case POLY_SYS_timing_dispatch: machineDependent->CallIO2(taskData, &timing_dispatch_c); break; case POLY_SYS_XWindows: machineDependent->CallIO1(taskData, &XWindows_c); break; case POLY_SYS_full_gc: machineDependent->CallIO0(taskData, &full_gc_c); break; case POLY_SYS_stack_trace: machineDependent->CallIO0(taskData, & stack_trace_c); break; case POLY_SYS_foreign_dispatch: machineDependent->CallIO2(taskData, &foreign_dispatch_c); break; case POLY_SYS_callcode_tupled: machineDependent->CallCodeTupled(taskData); break; case POLY_SYS_process_env: machineDependent->CallIO2(taskData, &process_env_dispatch_c); break; // case POLY_SYS_set_string_length: machineDependent->CallIO2(taskData, &set_string_length_c); break; case POLY_SYS_shrink_stack: machineDependent->CallIO1(taskData, &shrink_stack_c); break; case POLY_SYS_code_flags: machineDependent->CallIO2(taskData, &CodeSegmentFlags); break; case POLY_SYS_shift_right_arith_word: machineDependent->CallIO2(taskData, &shift_right_arith_word_c); break; case POLY_SYS_get_first_long_word: case POLY_SYS_int_to_word: // POLY_SYS_int_to_word has generally been replaced by POLY_SYS_get_first_long_word. // The reason is that POLY_SYS_int_to_word may be applied to either a long or // a short argument whereas POLY_SYS_get_first_long_word must be applied to a // long argument and can be implemented very easily in the code-generator, at // least on a little-endian machine. machineDependent->CallIO1(taskData, &int_to_word_c); break; case POLY_SYS_poly_specific: machineDependent->CallIO2(taskData, &poly_dispatch_c); break; case POLY_SYS_set_code_constant: machineDependent->CallIO4(taskData, &set_code_constant); break; case POLY_SYS_move_bytes: machineDependent->CallIO5(taskData, &move_bytes_long_c); break; case POLY_SYS_move_words: machineDependent->CallIO5(taskData, &move_words_long_c); break; case POLY_SYS_mul_word: machineDependent->CallIO2(taskData, &mul_word_c); break; case POLY_SYS_plus_word: machineDependent->CallIO2(taskData, &plus_word_c); break; case POLY_SYS_minus_word: machineDependent->CallIO2(taskData, &minus_word_c); break; case POLY_SYS_div_word: machineDependent->CallIO2(taskData, &div_word_c); break; case POLY_SYS_mod_word: machineDependent->CallIO2(taskData, &mod_word_c); break; case POLY_SYS_word_geq: machineDependent->CallIO2(taskData, &word_geq_c); break; case POLY_SYS_word_leq: machineDependent->CallIO2(taskData, &word_leq_c); break; case POLY_SYS_word_gtr: machineDependent->CallIO2(taskData, &word_gtr_c); break; case POLY_SYS_word_lss: machineDependent->CallIO2(taskData, &word_lss_c); break; case POLY_SYS_io_dispatch: machineDependent->CallIO3(taskData, &IO_dispatch_c); break; case POLY_SYS_network: machineDependent->CallIO2(taskData, &Net_dispatch_c); break; case POLY_SYS_os_specific: machineDependent->CallIO2(taskData, &OS_spec_dispatch_c); break; case POLY_SYS_signal_handler: machineDependent->CallIO2(taskData, &Sig_dispatch_c); break; case POLY_SYS_kill_self: machineDependent->CallIO0(taskData, exitThread); break; // This is called from assembly code and doesn't actually have an entry in the // io vector. case POLY_SYS_give_ex_trace: machineDependent->CallIO2(taskData, ex_tracec); break; default: Crash("Unknown io operation %d\n", ioFunction); } } catch (IOException) { } } } polyml.5.2.1/libpolyml/run_time.h0000644000175000017500000000664110761260531016002 0ustar daviddavid/* Title: run_time.h Copyright (c) 2000-7 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef _RUNTIME_H_DEFINED #define _RUNTIME_H_DEFINED 1 #include "globals.h" // PolyWord, PolyObject etc #include "noreturn.h" class SaveVecEntry; typedef SaveVecEntry *Handle; class TaskData; // Exceptions thrown by C++ code. Indicates that the caller should not return normally. // They can be thrown in one of two different situations: // 1. The IO function needs to raise an ML exception // 2. The IO function needs to retry the call. There may have been a process switch. enum EXCEPTION_REASON { EXC_EXCEPTION, EXC_RETRY }; class IOException { public: IOException(enum EXCEPTION_REASON reason): m_reason(reason) { } enum EXCEPTION_REASON m_reason; }; // This exception is used in the exporter and sharedata code. It is // converted into an ML exception at the outer level. class MemoryException { public: MemoryException() {} }; // A request to kill the thread raises this exception. class KillException { public: KillException() {} }; /* storage allocation functions */ extern PolyObject *alloc(TaskData *taskData, POLYUNSIGNED words, unsigned flags = 0); extern Handle alloc_and_save(TaskData *taskData, POLYUNSIGNED words, unsigned flags = 0); extern Handle ex_tracec(TaskData *taskData, Handle exc_data, Handle handler_handle); /* exceptions and interrupts */ NORETURNFN(extern void raise_exception(TaskData *taskData, int id, Handle arg)); NORETURNFN(extern void raise_exception0(TaskData *taskData, int id)); NORETURNFN(extern void raise_exception_string(TaskData *taskData, int id, const char *str)); NORETURNFN(extern void raise_syscall(TaskData *taskData, const char *errmsg, int err)); NORETURNFN(extern void raise_fail(TaskData *taskData, const char *errmsg)); Handle create_syscall_exception(TaskData *taskData, const char *errmsg, int err); typedef void (*InterruptFunc)(int signum); extern void register_interrupt_proc(InterruptFunc int_proc); extern void re_init_run_time_system(void); extern void init_run_time_system(void); extern Handle EnterPolyCode(TaskData *taskData); extern void give_stack_trace(TaskData *taskData, PolyWord *stackPtr, PolyWord *finish); extern void uninit_run_time_system(void); Handle make_exn(TaskData *taskData, int id, Handle arg); extern bool trace_allowed; extern void add_word_to_io_area(unsigned sysop, PolyWord val); extern Handle CodeSegmentFlags(TaskData *taskData, Handle flags_handle, Handle addr_handle); // Check to see that there is space in the stack. May GC and may raise a C++ exception. extern void CheckAndGrowStack(TaskData *mdTaskData, PolyWord *lower_limit); #endif /* _RUNTIME_H_DEFINED */ polyml.5.2.1/libpolyml/save_vec.cpp0000644000175000017500000000674010673474613016320 0ustar daviddavid/* Title: save_vec.cpp - The save vector holds temporary values that may move as the result of a garbage collection. Copyright (c) 2006 David C.J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifdef WIN32 #include "winconfig.h" #else #include "config.h" #endif #ifdef HAVE_ASSERT_H #include #define ASSERT(x) assert(x) #else #define ASSERT(x) #endif #include "globals.h" #include "save_vec.h" #include "check_objects.h" #include "scanaddrs.h" #define SVEC_SIZE 1000 SaveVec::SaveVec() { save_vec = new SaveVecEntry[SVEC_SIZE]; save_vec_addr = save_vec; } SaveVec::~SaveVec() { delete[](save_vec); } // DCJM - I've used this in a few cases where we iterate over a list // and want to avoid overflowing the save vec. I've assumed that simply // resetting the list doesn't actually destroy the entry on the save vec // and it's safe to still use it provided that doesn't result in allocation. void SaveVec::reset(Handle old_value) { ASSERT(old_value >= save_vec && old_value <= save_vec_addr); save_vec_addr = old_value; } Handle SaveVec::push(PolyWord valu) /* Push a PolyWord onto the save vec. */ { ASSERT(save_vec_addr < save_vec+SVEC_SIZE); Check(valu); *save_vec_addr = SaveVecEntry(valu); return save_vec_addr++; } /******************************************************************************/ /* */ /* run_time_gc - utility function, called indirectly */ /* */ /******************************************************************************/ void SaveVec::gcScan(ScanAddress *process) /* Ensures that all the objects are retained and their addresses updated. */ { for (Handle sv = save_vec; sv < save_vec_addr; sv++) { PolyWord *saved = &(sv->m_Handle); if ((*saved).IsTagged()) {} // Don't need to do anything else if ((*saved).IsCodePtr()) { // We can have code pointers in set_code_address. // Find the start of the code segment PolyObject *obj = ObjCodePtrToPtr(saved->AsCodePtr()); // Calculate the byte offset of this value within the code object. POLYUNSIGNED offset = saved->AsCodePtr() - (byte*)obj; process->ScanRuntimeAddress(&obj, ScanAddress::STRENGTH_STRONG); *saved = PolyWord::FromCodePtr((byte*)obj + offset); } else { ASSERT((*saved).IsDataPtr()); PolyObject *obj = (*saved).AsObjPtr(); process->ScanRuntimeAddress(&obj, ScanAddress::STRENGTH_STRONG); *saved = obj; } } } // We just have one of these. static SaveVec save; SaveVec *gSaveVec = &save; polyml.5.2.1/libpolyml/save_vec.h0000644000175000017500000000516210665263522015756 0ustar daviddavid/* Title: save_vec.h - The save vector holds temporary values that may move as the result of a garbage collection. Copyright (c) 2006 David C.J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef SAVE_VEC_H_DEFINED #define SAVE_VEC_H_DEFINED #include "globals.h" // For PolyWord /* A handle is the address of an element of save_vec */ /* This element points at an element of the Poly heap */ /* The element is currently represented as a (PolyWord *) */ class SaveVecEntry { public: SaveVecEntry(PolyWord w): m_Handle(w) {} SaveVecEntry(): m_Handle(PolyWord::FromUnsigned(0)) {} // Just used when initialising the vec PolyWord Word() { return m_Handle; } PolyObject *WordP() { return m_Handle.AsObjPtr(); } private: PolyWord m_Handle; friend class SaveVec; }; typedef SaveVecEntry *Handle; #define DEREFWORD(_x) ((_x)->Word()) #define DEREFHANDLE(_x) ((_x)->WordP()) #define DEREFWORDHANDLE(_x) ((_x)->WordP()) #define DEREFBYTEHANDLE(_x) ((byte *)DEREFHANDLE(_x)) #define DEREFLISTHANDLE(_x) ((ML_Cons_Cell *)DEREFHANDLE(_x)) #define DEREFEXNHANDLE(_x) ((poly_exn *)DEREFHANDLE(_x)) #define DEREFSTREAMHANDLE(_x) ((StreamToken*)DEREFHANDLE(_x)) class ScanAddress; class SaveVec { public: SaveVec(); ~SaveVec(); // Clear the save vec at the start of an RTS call void init(void) { save_vec_addr = save_vec; } // Add a word to the save vec Handle push(PolyWord valu); // Mark a position Handle mark(void) { return save_vec_addr; } // Reset to the mark void reset(Handle mark); bool isValidHandle(Handle h) { return h >= save_vec && h < save_vec_addr; } // Check it is in the range. // Called by the garbage collector to scan and then update the addresses in the // vector. void gcScan(ScanAddress *process); private: SaveVecEntry *save_vec; SaveVecEntry *save_vec_addr; }; #endif polyml.5.2.1/libpolyml/savestate.cpp0000644000175000017500000011751010772160234016511 0ustar daviddavid/* Title: savestate.cpp - Save and Load state Copyright (c) 2007 David C.J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifdef WIN32 #include "winconfig.h" #else #include "config.h" #endif #ifdef HAVE_STDIO_H #include #endif #ifdef HAVE_WINDOWS_H #include // For MAX_PATH #endif #ifdef HAVE_SYS_PARAM_H #include // For MAX_PATH #endif #ifdef HAVE_ERRNO_H #include #endif #ifdef HAVE_TIME_H #include #endif #ifdef HAVE_SYS_TYPES_H #include #endif #ifdef HAVE_ASSERT_H #include #define ASSERT(x) assert(x) #else #define ASSERT(x) #endif #include "globals.h" #include "savestate.h" #include "processes.h" #include "run_time.h" #include "polystring.h" #include "scanaddrs.h" #include "arb.h" #include "memmgr.h" #include "polyexports.h" #include "mpoly.h" // For exportTimeStamp #include "exporter.h" // For CopyScan #include "machine_dep.h" #include "osmem.h" #if(!defined(MAXPATHLEN) && defined(MAX_PATH)) #define MAXPATHLEN MAX_PATH #endif // Helper class to close files on exit. class AutoClose { public: AutoClose(FILE *f = 0): m_file(f) {} ~AutoClose() { if (m_file) ::fclose(m_file); } operator FILE*() { return m_file; } private: FILE *m_file; }; // This is probably generally useful so may be moved into // a general header file. template class AutoFree { public: AutoFree(BASE p = 0): m_value(p) {} ~AutoFree() { free(m_value); } // Automatic conversions to the base type. operator BASE() { return m_value; } BASE operator = (BASE p) { return (m_value = p); } private: BASE m_value; }; /* * Structure definitions for the saved state files. */ #define SAVEDSTATESIGNATURE "POLYSAVE" #define SAVEDSTATEVERSION 1 // File header for a saved state file. This appears as the first entry // in the file. typedef struct _savedStateHeader { // These entries are primarily to check that we have a valid // saved state file before we try to interpret anything else. char headerSignature[8]; // Should contain SAVEDSTATESIGNATURE unsigned headerVersion; // Should contain SAVEDSTATEVERSION unsigned headerLength; // Number of bytes in the header unsigned segmentDescrLength; // Number of bytes in a descriptor // These entries contain the real data. off_t segmentDescr; // Position of segment descriptor table unsigned segmentDescrCount; // Number of segment descriptors in the table off_t stringTable; // Pointer to the string table (zero if none) size_t stringTableSize; // Size of string table unsigned parentNameEntry; // Position of parent name in string table (0 if top) UNSIGNEDADDR timeStamp; // The time stamp for this file. UNSIGNEDADDR fileSignature; // The signature for this file. UNSIGNEDADDR parentTimeStamp; // The time stamp for the parent. UNSIGNEDADDR parentSignature; // The signature for the parent. } SavedStateHeader; // Entry for segment table. This describes the segments on the disc that // need to be loaded into memory. typedef struct _savedStateSegmentDescr { off_t segmentData; // Position of the segment data size_t segmentSize; // Size of the segment data off_t relocations; // Position of the relocation table unsigned relocationCount; // Number of entries in relocation table unsigned relocationSize; // Size of a relocation entry unsigned segmentFlags; // Segment flags (see SSF_ values) unsigned segmentIndex; // The index of this segment or the segment it overwrites void *originalAddress; // The base address when the segment was written. } SavedStateSegmentDescr; #define SSF_WRITABLE 1 // The segment contains mutable data #define SSF_OVERWRITE 2 // The segment overwrites the data (mutable) in a parent. #define SSF_NOOVERWRITE 4 // The segment must not be further overwritten typedef struct _relocationEntry { // Each entry indicates a location that has to be set to an address. // The location to be set is determined by adding "relocAddress" to the base address of // this segment (the one to which these relocations apply) and the value to store // by adding "targetAddress" to the base address of the segment indicated by "targetSegment". POLYUNSIGNED relocAddress; // The (byte) offset in this segment that we will set POLYUNSIGNED targetAddress; // The value to add to the base of the destination segment unsigned targetSegment; // The base segment. 0 is IO segment. ScanRelocationKind relKind; // The kind of relocation (processor dependent). } RelocationEntry; #define SAVE(x) taskData->saveVec.push(x) /* * Hierarchy table: contains information about last loaded or saved state. */ // Pointer to list of files loaded in last load. // There's no need for a lock since the update is only made when all // the ML threads have stopped. class HierarchyTable { public: HierarchyTable(const char *file, UNSIGNEDADDR time): fileName(strdup(file)), timeStamp(time) { } AutoFree fileName; UNSIGNEDADDR timeStamp; }; HierarchyTable **hierarchyTable; static unsigned hierarchyDepth; static bool AddHierarchyEntry(const char *fileName, UNSIGNEDADDR timeStamp) { // Add an entry to the hierarchy table for this file. HierarchyTable *newEntry = new HierarchyTable(fileName, timeStamp); if (newEntry == 0) return false; HierarchyTable **newTable = (HierarchyTable **)realloc(hierarchyTable, sizeof(HierarchyTable *)*(hierarchyDepth+1)); if (newTable == 0) return false; hierarchyTable = newTable; hierarchyTable[hierarchyDepth++] = newEntry; return true; } /* * Saving state. */ // This class is used to create the relocations. It uses Exporter // for this but this may perhaps be too heavyweight. class SaveStateExport: public Exporter, public ScanAddress { public: SaveStateExport(): relocationCount(0) {} public: virtual void exportStore(void) {} // Not used. private: // ScanAddress overrides virtual void ScanConstant(byte *addrOfConst, ScanRelocationKind code); // At the moment we should only get calls to ScanConstant. virtual PolyObject *ScanObjectAddress(PolyObject *base) { return base; } private: void setRelocationAddress(void *p, POLYUNSIGNED *reloc); PolyWord createRelocation(PolyWord p, void *relocAddr); unsigned relocationCount; friend class SaveRequest; }; // Generate the address relative to the start of the segment. void SaveStateExport::setRelocationAddress(void *p, POLYUNSIGNED *reloc) { unsigned area = findArea(p); POLYUNSIGNED offset = (char*)p - (char*)memTable[area].mtAddr; *reloc = offset; } // Create a relocation entry for an address at a given location. PolyWord SaveStateExport::createRelocation(PolyWord p, void *relocAddr) { RelocationEntry reloc; // Set the offset within the section we're scanning. setRelocationAddress(relocAddr, &reloc.relocAddress); void *addr = p.AsAddress(); unsigned addrArea = findArea(addr); reloc.targetAddress = (char*)addr - (char*)memTable[addrArea].mtAddr; reloc.targetSegment = memTable[addrArea].mtIndex; reloc.relKind = PROCESS_RELOC_DIRECT; fwrite(&reloc, sizeof(reloc), 1, exportFile); relocationCount++; return p; // Don't change the contents } /* This is called for each constant within the code. Print a relocation entry for the word and return a value that means that the offset is saved in original word. */ void SaveStateExport::ScanConstant(byte *addr, ScanRelocationKind code) { PolyWord p = GetConstantValue(addr, code); if (IS_INT(p) || p == PolyWord::FromUnsigned(0)) return; void *a = p.AsAddress(); unsigned aArea = findArea(a); // We don't need a relocation if this is relative to the current segment // since the relative address will already be right. if (code == PROCESS_RELOC_I386RELATIVE && aArea == findArea(addr)) return; // Set the value at the address to the offset relative to the symbol. RelocationEntry reloc; setRelocationAddress(addr, &reloc.relocAddress); reloc.targetAddress = (char*)a - (char*)memTable[aArea].mtAddr; reloc.targetSegment = memTable[aArea].mtIndex; reloc.relKind = code; fwrite(&reloc, sizeof(reloc), 1, exportFile); relocationCount++; } // Request to the main thread to save data. class SaveRequest: public MainThreadRequest { public: SaveRequest(const char *name, unsigned h): fileName(name), newHierarchy(h), errorMessage(0), errCode(0) {} virtual void Perform(); const char *fileName; unsigned newHierarchy; const char *errorMessage; int errCode; }; // This class is used to update references to objects that have moved. If // we have copied an object into the area to be exported we may still have references // to it from the stack or from RTS data structures. We have to ensure that these // are updated. // This is very similar to ProcessFixupAddress in sharedata.cpp class SaveFixupAddress: public ScanAddress { protected: virtual POLYUNSIGNED ScanAddressAt(PolyWord *pt); virtual PolyObject *ScanObjectAddress(PolyObject *base) { return GetNewAddress(base).AsObjPtr(); } PolyWord GetNewAddress(PolyWord old); }; POLYUNSIGNED SaveFixupAddress::ScanAddressAt(PolyWord *pt) { *pt = GetNewAddress(*pt); return 0; } // Returns the new address if the argument is the address of an object that // has moved, otherwise returns the original. PolyWord SaveFixupAddress::GetNewAddress(PolyWord old) { if (old.IsTagged() || old == PolyWord::FromUnsigned(0) || gMem.IsIOPointer(old.AsAddress())) return old; // Nothing to do. // When we are updating addresses in the stack or in code segments we may have // code pointers. if (old.IsCodePtr()) { // Find the start of the code segment PolyObject *oldObject = ObjCodePtrToPtr(old.AsCodePtr()); // Calculate the byte offset of this value within the code object. POLYUNSIGNED offset = old.AsCodePtr() - (byte*)oldObject; PolyWord newObject = GetNewAddress(oldObject); return PolyWord::FromCodePtr(newObject.AsCodePtr() + offset); } ASSERT(old.IsDataPtr()); PolyObject *obj = old.AsObjPtr(); if (obj->ContainsForwardingPtr()) // tombstone is a pointer to a moved object { PolyObject *newp = obj->GetForwardingPtr(); ASSERT (newp->ContainsNormalLengthWord()); return newp; } ASSERT (obj->ContainsNormalLengthWord()); // object is not moved return old; } // Called by the root thread to actually save the state and write the file. void SaveRequest::Perform() { SaveStateExport exports; // Open the file. This could quite reasonably fail if the path is wrong. exports.exportFile = fopen(fileName, "wb"); if (exports.exportFile == NULL) { errorMessage = "Cannot open save file"; errCode = errno; return; } // Scan over the permanent mutable area copying all reachable data that is // not in a lower hierarchy into new permanent segments. CopyScan copyScan(newHierarchy); bool success = true; try { for (unsigned i = 0; i < gMem.npSpaces; i++) { PermanentMemSpace *space = gMem.pSpaces[i]; if (space->isMutable && ! space->noOverwrite) copyScan.ScanAddressesInRegion(space->bottom, space->top); } } catch (MemoryException) { success = false; } // Copy the areas into the export object. Make sufficient space for // the largest possible number of entries. exports.memTable = new memoryTableEntry[gMem.neSpaces+gMem.npSpaces+1]; exports.ioMemEntry = 0; // The IO vector. unsigned memTableCount = 0; MemSpace *ioSpace = gMem.IoSpace(); exports.memTable[0].mtAddr = ioSpace->bottom; exports.memTable[0].mtLength = (char*)ioSpace->top - (char*)ioSpace->bottom; exports.memTable[0].mtFlags = 0; exports.memTable[0].mtIndex = 0; memTableCount++; // Permanent spaces at higher level. These have to have entries although // only the mutable entries will be written. for (unsigned w = 0; w < gMem.npSpaces; w++) { PermanentMemSpace *space = gMem.pSpaces[w]; if (space->hierarchy < newHierarchy) { memoryTableEntry *entry = &exports.memTable[memTableCount++]; entry->mtAddr = space->bottom; entry->mtLength = (space->topPointer-space->bottom)*sizeof(PolyWord); entry->mtIndex = space->index; if (space->isMutable) { entry->mtFlags = MTF_WRITEABLE; if (space->noOverwrite) entry->mtFlags |= MTF_NO_OVERWRITE; } else entry->mtFlags = MTF_EXECUTABLE; } } unsigned permanentEntries = memTableCount; // Remember where new entries start. // Newly created spaces. for (unsigned i = 0; i < gMem.neSpaces; i++) { memoryTableEntry *entry = &exports.memTable[memTableCount++]; PermanentMemSpace *space = gMem.eSpaces[i]; entry->mtAddr = space->bottom; entry->mtLength = (space->topPointer-space->bottom)*sizeof(PolyWord); entry->mtIndex = space->index; if (space->isMutable) { entry->mtFlags = MTF_WRITEABLE; if (space->noOverwrite) entry->mtFlags |= MTF_NO_OVERWRITE; } else entry->mtFlags = MTF_EXECUTABLE; } exports.memTableEntries = memTableCount; exports.ioSpacing = IO_SPACING; // Update references to moved objects. SaveFixupAddress fixup; for (unsigned l = 0; l < gMem.nlSpaces; l++) { LocalMemSpace *space = gMem.lSpaces[l]; fixup.ScanAddressesInRegion(space->pointer, space->top); } GCModules(&fixup); // Update the global memory space table. Old segments at the same level // or lower are removed. The new segments become permanent. if (! success || ! gMem.PromoteExportSpaces(newHierarchy)) { errorMessage = "Out of Memory"; errCode = ENOMEM; return; } // Remove any deeper entries from the hierarchy table. while (hierarchyDepth > newHierarchy-1) { hierarchyDepth--; delete(hierarchyTable[hierarchyDepth]); hierarchyTable[hierarchyDepth] = 0; } // Write out the file header. SavedStateHeader saveHeader; memset(&saveHeader, 0, sizeof(saveHeader)); saveHeader.headerLength = sizeof(saveHeader); strncpy(saveHeader.headerSignature, SAVEDSTATESIGNATURE, sizeof(saveHeader.headerSignature)); saveHeader.headerVersion = SAVEDSTATEVERSION; saveHeader.segmentDescrLength = sizeof(SavedStateSegmentDescr); if (newHierarchy == 1) saveHeader.parentTimeStamp = exportTimeStamp; else { saveHeader.parentTimeStamp = hierarchyTable[newHierarchy-2]->timeStamp; saveHeader.parentNameEntry = 1; // Always the first entry. } saveHeader.timeStamp = time(NULL); saveHeader.segmentDescrCount = exports.memTableEntries; // One segment for each space. // Write out the header. fwrite(&saveHeader, sizeof(saveHeader), 1, exports.exportFile); // We need a segment header for each permanent area whether it is // actually in this file or not. SavedStateSegmentDescr *descrs = new SavedStateSegmentDescr [exports.memTableEntries]; for (unsigned j = 0; j < exports.memTableEntries; j++) { memoryTableEntry *entry = &exports.memTable[j]; memset(&descrs[j], 0, sizeof(SavedStateSegmentDescr)); descrs[j].relocationSize = sizeof(RelocationEntry); descrs[j].segmentIndex = entry->mtIndex; descrs[j].segmentSize = entry->mtLength; // Set this even if we don't write it. descrs[j].originalAddress = entry->mtAddr; if (entry->mtFlags & MTF_WRITEABLE) { descrs[j].segmentFlags |= SSF_WRITABLE; if (entry->mtFlags & MTF_NO_OVERWRITE) descrs[j].segmentFlags |= SSF_NOOVERWRITE; if (j < permanentEntries && (entry->mtFlags & MTF_NO_OVERWRITE) == 0) descrs[j].segmentFlags |= SSF_OVERWRITE; } } // Write out temporarily. Will be overwritten at the end. saveHeader.segmentDescr = ftell(exports.exportFile); fwrite(descrs, sizeof(SavedStateSegmentDescr), exports.memTableEntries, exports.exportFile); // Write out the relocations and the data. for (unsigned k = 1 /* Not IO area */; k < exports.memTableEntries; k++) { memoryTableEntry *entry = &exports.memTable[k]; // Write out the contents if this is new or if it is a normal, overwritable // mutable area. if (k >= permanentEntries || (entry->mtFlags & (MTF_WRITEABLE|MTF_NO_OVERWRITE)) == MTF_WRITEABLE) { descrs[k].relocations = ftell(exports.exportFile); // Have to write this out. exports.relocationCount = 0; // Create the relocation table. char *start = (char*)entry->mtAddr; char *end = start + entry->mtLength; for (PolyWord *p = (PolyWord*)start; p < (PolyWord*)end; ) { p++; PolyObject *obj = (PolyObject*)p; POLYUNSIGNED length = obj->Length(); // Most relocations can be computed when the saved state is // loaded so we only write out the difficult ones: those that // occur within compiled code. // exports.relocateObject(obj); if (length != 0 && obj->IsCodeObject()) machineDependent->ScanConstantsWithinCode(obj, &exports); p += length; } descrs[k].relocationCount = exports.relocationCount; // Write out the data. descrs[k].segmentData = ftell(exports.exportFile); fwrite(entry->mtAddr, entry->mtLength, 1, exports.exportFile); } } // If this is a child we need to write a string table containing the parent name. if (newHierarchy > 1) { saveHeader.stringTable = ftell(exports.exportFile); fputc(0, exports.exportFile); // First byte of string table is zero fputs(hierarchyTable[newHierarchy-2]->fileName, exports.exportFile); fputc(0, exports.exportFile); // A terminating null. saveHeader.stringTableSize = strlen(hierarchyTable[newHierarchy-2]->fileName) + 2; } // Rewrite the header and the segment tables now they're complete. fseek(exports.exportFile, 0, SEEK_SET); fwrite(&saveHeader, sizeof(saveHeader), 1, exports.exportFile); fwrite(descrs, sizeof(SavedStateSegmentDescr), exports.memTableEntries, exports.exportFile); // Add an entry to the hierarchy table for this file. (void)AddHierarchyEntry(fileName, saveHeader.timeStamp); delete[](descrs); } Handle SaveState(TaskData *taskData, Handle args) { char fileNameBuff[MAXPATHLEN]; POLYUNSIGNED length = Poly_string_to_C(DEREFHANDLE(args)->Get(0), fileNameBuff, MAXPATHLEN); if (length > MAXPATHLEN) raise_syscall(taskData, "File name too long", ENAMETOOLONG); // The value of depth is zero for top-level save so we need to add one for hierarchy. unsigned newHierarchy = get_C_ulong(taskData, DEREFHANDLE(args)->Get(1)) + 1; // We don't support hierarchical saving at the moment. if (newHierarchy > hierarchyDepth+1) raise_fail(taskData, "Depth must be no more than the current hierarchy plus one"); SaveRequest request(fileNameBuff, newHierarchy); processes->MakeRootRequest(taskData, &request); if (request.errorMessage) raise_syscall(taskData, request.errorMessage, request.errCode); return SAVE(TAGGED(0)); } /* * Loading saved state files. */ class StateLoader: public MainThreadRequest { public: StateLoader(const char *file): errorResult(0), errNumber(0) { strcpy(fileName, file); } virtual void Perform(void); bool LoadFile(void); const char *errorResult; // The fileName here is the last file loaded. As well as using it // to load the name can also be printed out at the end to identify the // particular file in the hierarchy that failed. char fileName[MAXPATHLEN]; int errNumber; }; // Called by the main thread once all the ML threads have stopped. void StateLoader::Perform(void) { (void)LoadFile(); } // This class is used to relocate addresses in areas that have been loaded. class LoadRelocate { public: LoadRelocate(): descrs(0), nDescrs(0), errorMessage(0) {} ~LoadRelocate(); void RelocateObject(PolyObject *p); void RelocateAddressAt(PolyWord *pt); SavedStateSegmentDescr *descrs; unsigned nDescrs; const char *errorMessage; }; LoadRelocate::~LoadRelocate() { if (descrs) delete[](descrs); } // Update the addresses in a group of words. void LoadRelocate::RelocateAddressAt(PolyWord *pt) { PolyWord val = *pt; if (val.IsTagged()) return; // Which segment is this address in? unsigned i; for (i = 0; i < nDescrs; i++) { SavedStateSegmentDescr *descr = &descrs[i]; if (val.AsAddress() > descr->originalAddress && val.AsAddress() <= (char*)descr->originalAddress + descr->segmentSize) { // It's in this segment: relocate it to the current position. MemSpace *space = descr->segmentIndex == 0 ? gMem.IoSpace() : gMem.SpaceForIndex(descr->segmentIndex); // Error if this doesn't match. byte *setAddress = (byte*)space->bottom + ((char*)val.AsAddress() - (char*)descr->originalAddress); *pt = PolyWord::FromCodePtr(setAddress); break; } } if (i == nDescrs) { // Error: Not found. errorMessage = "Unmatched address"; } } // This is based on Exporter::relocateObject but does the reverse. // It attempts to adjust all the addresses in the object when it has // been read in. void LoadRelocate::RelocateObject(PolyObject *p) { if (p->IsByteObject()) { } else if (p->IsCodeObject()) { POLYUNSIGNED constCount; PolyWord *cp; ASSERT(! p->IsMutable() ); p->GetConstSegmentForCode(cp, constCount); /* Now the constant area. */ for (POLYUNSIGNED i = 0; i < constCount; i++) RelocateAddressAt(&(cp[i])); // N.B. This does not deal with constants within the code. These have // to be handled by real relocation entries. } else if (p->IsStackObject()) { StackObject *s = (StackObject*)p; POLYUNSIGNED length = p->Length(); ASSERT(! p->IsMutable()); // Should have been frozen /* First the standard registers, space, pc, sp, hr. */ // pc may be TAGGED(0) indicating a retry. PolyWord pc = PolyWord::FromCodePtr(s->p_pc); if (pc != TAGGED(0)) { RelocateAddressAt(&pc); s->p_pc = pc.AsCodePtr(); } PolyWord *stackPtr = s->p_sp; // Save this before we change it. // These point within the current stack. PolyWord sp = PolyWord::FromStackAddr(s->p_sp); RelocateAddressAt(&sp); s->p_sp = sp.AsStackAddr(); PolyWord hr = PolyWord::FromStackAddr(s->p_hr); RelocateAddressAt(&hr); s->p_hr = hr.AsStackAddr(); /* Checked registers. */ PolyWord *stackStart = (PolyWord*)p; PolyWord *stackEnd = stackStart+length; for (POLYUNSIGNED i = 0; i < s->p_nreg; i++) { PolyWord r = s->p_reg[i]; if (r.AsStackAddr() >= stackStart && r.AsStackAddr() < stackEnd) RelocateAddressAt(&s->p_reg[i]); /* It seems we can have zeros in the registers, at least on the i386. */ else if (r == PolyWord::FromUnsigned(0)) {} else RelocateAddressAt(&(s->p_reg[i])); } /* Now the values on the stack. */ for (PolyWord *q = stackPtr; q < stackEnd; q++) RelocateAddressAt(q); } else /* Ordinary objects, essentially tuples. */ { POLYUNSIGNED length = p->Length(); for (POLYUNSIGNED i = 0; i < length; i++) RelocateAddressAt(p->Offset(i)); } } // Load a saved state file. Calls itself to handle parent files. bool StateLoader::LoadFile() { LoadRelocate relocate; AutoFree thisFile(strdup(fileName)); AutoClose loadFile(fopen(fileName, "rb")); if ((FILE*)loadFile == NULL) { errorResult = "Cannot open load file"; errNumber = errno; return false; } SavedStateHeader header; // Read the header and check the signature. if (fread(&header, sizeof(SavedStateHeader), 1, loadFile) != 1) { errorResult = "Unable to load header"; return false; } if (strncmp(header.headerSignature, SAVEDSTATESIGNATURE, sizeof(header.headerSignature)) != 0) { errorResult = "File is not a saved state"; return false; } if (header.headerVersion != SAVEDSTATEVERSION || header.headerLength != sizeof(SavedStateHeader) || header.segmentDescrLength != sizeof(SavedStateSegmentDescr)) { errorResult = "Unsupported version of saved state file"; return false; } // Have verified that this is a reasonable saved state file. If it isn't a // top-level file we have to load the parents first. if (header.parentNameEntry != 0) { unsigned toRead = header.stringTableSize-header.parentNameEntry; if (MAXPATHLEN < toRead) toRead = MAXPATHLEN; if (header.parentNameEntry >= header.stringTableSize /* Bad entry */ || fseek(loadFile, header.stringTable + header.parentNameEntry, SEEK_SET) != 0 || fread(fileName, 1, toRead, loadFile) != toRead) { errorResult = "Unable to read parent file name"; return false; } fileName[toRead] = 0; // Should already be null-terminated, but just in case. if (! LoadFile()) return false; // Check the parent time stamp. ASSERT(hierarchyDepth > 0 && hierarchyTable[hierarchyDepth-1] != 0); if (header.parentTimeStamp != hierarchyTable[hierarchyDepth-1]->timeStamp) { // Time-stamps don't match. errorResult = "The parent for this saved state does not match or has been changed"; return false; } } else // Top-level file { if (header.parentTimeStamp != exportTimeStamp) { // Time-stamp does not match executable. errorResult = "Saved state was exported from a different executable or the executable has changed"; return false; } // Any existing spaces at this level or greater must be turned // into local spaces. We may have references from the stack to objects that // have previously been imported but otherwise these spaces are no longer // needed. gMem.DemoteImportSpaces(); // Clean out the hierarchy table. for (unsigned h = 0; h < hierarchyDepth; h++) { delete(hierarchyTable[h]); hierarchyTable[h] = 0; } hierarchyDepth = 0; } // Now have a valid, matching saved state. // Load the segment descriptors. relocate.nDescrs = header.segmentDescrCount; relocate.descrs = new SavedStateSegmentDescr[relocate.nDescrs]; if (fseek(loadFile, header.segmentDescr, SEEK_SET) != 0 || fread(relocate.descrs, sizeof(SavedStateSegmentDescr), relocate.nDescrs, loadFile) != relocate.nDescrs) { errorResult = "Unable to read segment descriptors"; return false; } // Read in and create the new segments first. If we have problems, // in particular if we have run out of memory, then it's easier to recover. for (unsigned i = 0; i < relocate.nDescrs; i++) { SavedStateSegmentDescr *descr = &relocate.descrs[i]; MemSpace *space = descr->segmentIndex == 0 ? gMem.IoSpace() : gMem.SpaceForIndex(descr->segmentIndex); if (descr->segmentData == 0) { // No data - just an entry in the index. if (space == NULL/* || descr->segmentSize != (size_t)((char*)space->top - (char*)space->bottom)*/) { errorResult = "Mismatch for existing memory space"; return false; } } else if ((descr->segmentFlags & SSF_OVERWRITE) == 0) { // New segment. if (space != NULL) { errorResult = "Segment already exists"; return false; } // Allocate memory for the new segment. size_t actualSize = descr->segmentSize; PolyWord *mem = (PolyWord*)osMemoryManager->Allocate(actualSize, PERMISSION_READ|PERMISSION_WRITE|PERMISSION_EXEC); if (mem == 0) { errorResult = "Unable to allocate memory"; return false; } if (fseek(loadFile, descr->segmentData, SEEK_SET) != 0 || fread(mem, descr->segmentSize, 1, loadFile) != 1) { errorResult = "Unable to read segment"; osMemoryManager->Free(mem, descr->segmentSize); return false; } // Fill unused space to the top of the area. gMem.FillUnusedSpace(mem+descr->segmentSize/sizeof(PolyWord), (actualSize-descr->segmentSize)/sizeof(PolyWord)); // At the moment we leave all segments with write access. space = gMem.NewPermanentSpace(mem, actualSize / sizeof(PolyWord), (descr->segmentFlags & SSF_WRITABLE) != 0, (descr->segmentFlags & SSF_NOOVERWRITE) != 0, descr->segmentIndex, hierarchyDepth+1); } } // Now read in the mutable overwrites and relocate. for (unsigned j = 0; j < relocate.nDescrs; j++) { SavedStateSegmentDescr *descr = &relocate.descrs[j]; MemSpace *space = descr->segmentIndex == 0 ? gMem.IoSpace() : gMem.SpaceForIndex(descr->segmentIndex); ASSERT(space != NULL); // We should have created it. if (descr->segmentFlags & SSF_OVERWRITE) { if (fseek(loadFile, descr->segmentData, SEEK_SET) != 0 || fread(space->bottom, descr->segmentSize, 1, loadFile) != 1) { errorResult = "Unable to read segment"; return false; } } // Relocation. if (descr->segmentData != 0) { // Adjust the addresses in the loaded segment. for (PolyWord *p = space->bottom; p < space->top; ) { p++; PolyObject *obj = (PolyObject*)p; POLYUNSIGNED length = obj->Length(); relocate.RelocateObject(obj); p += length; } } // Process explicit relocations. // If we get errors just skip the error and continue rather than leave // everything in an unstable state. if (descr->relocations) { if (fseek(loadFile, descr->relocations, SEEK_SET) != 0) { errorResult = "Unable to read relocation segment"; } for (unsigned k = 0; k < descr->relocationCount; k++) { RelocationEntry reloc; if (fread(&reloc, sizeof(reloc), 1, loadFile) != 1) { errorResult = "Unable to read relocation segment"; } MemSpace *toSpace = reloc.targetSegment == 0 ? gMem.IoSpace() : gMem.SpaceForIndex(reloc.targetSegment); if (toSpace == NULL) { errorResult = "Unknown space reference in relocation"; continue; } byte *setAddress = (byte*)space->bottom + reloc.relocAddress; byte *targetAddress = (byte*)toSpace->bottom + reloc.targetAddress; if (setAddress >= (byte*)space->top || targetAddress >= (byte*)toSpace->top) { errorResult = "Bad relocation"; continue; } ScanAddress::SetConstantValue(setAddress, PolyWord::FromCodePtr(targetAddress), reloc.relKind); } } } // Add an entry to the hierarchy table for this file. if (! AddHierarchyEntry(thisFile, header.timeStamp)) return false; return true; // Succeeded } Handle LoadState(TaskData *taskData, Handle hFileName) // Load a saved state file and any ancestors. { // Open the load file char fileNameBuff[MAXPATHLEN]; POLYUNSIGNED length = Poly_string_to_C(DEREFHANDLE(hFileName), fileNameBuff, MAXPATHLEN); if (length > MAXPATHLEN) raise_syscall(taskData, "File name too long", ENAMETOOLONG); StateLoader loader(fileNameBuff); // Request the main thread to do the load. This may set the error string if it failed. processes->MakeRootRequest(taskData, &loader); if (loader.errorResult != 0) { if (loader.errNumber == 0) raise_fail(taskData, loader.errorResult); else { char buff[MAXPATHLEN+100]; strcpy(buff, loader.errorResult); strcat(buff, ": "); strcat(buff, loader.fileName); raise_syscall(taskData, buff, loader.errNumber); } } return SAVE(TAGGED(0)); } /* * Additional functions to provide information or change saved-state files. */ // These functions do not affect the global state so can be executed by // the ML threads directly. Handle ShowHierarchy(TaskData *taskData) // Return the list of files in the hierarchy. { Handle saved = taskData->saveVec.mark(); Handle list = SAVE(ListNull); // Process this in reverse order. for (unsigned i = hierarchyDepth; i > 0; i--) { Handle value = SAVE(C_string_to_Poly(taskData, hierarchyTable[i-1]->fileName)); Handle next = alloc_and_save(taskData, sizeof(ML_Cons_Cell)/sizeof(PolyWord)); DEREFLISTHANDLE(next)->h = DEREFWORDHANDLE(value); DEREFLISTHANDLE(next)->t = DEREFLISTHANDLE(list); taskData->saveVec.reset(saved); list = SAVE(DEREFHANDLE(next)); } return list; } Handle RenameParent(TaskData *taskData, Handle args) // Change the name of the immediate parent stored in a child { char fileNameBuff[MAXPATHLEN], parentNameBuff[MAXPATHLEN]; // The name of the file to modify. POLYUNSIGNED fileLength = Poly_string_to_C(DEREFHANDLE(args)->Get(0), fileNameBuff, MAXPATHLEN); if (fileLength > MAXPATHLEN) raise_syscall(taskData, "File name too long", ENAMETOOLONG); // The new parent name to insert. POLYUNSIGNED parentLength = Poly_string_to_C(DEREFHANDLE(args)->Get(1), parentNameBuff, MAXPATHLEN); if (parentLength > MAXPATHLEN) raise_syscall(taskData, "Parent name too long", ENAMETOOLONG); AutoClose loadFile(fopen(fileNameBuff, "r+b")); // Open for reading and writing if ((FILE*)loadFile == NULL) { char buff[MAXPATHLEN+1+23]; strcpy(buff, "Cannot open load file: "); strcat(buff, fileNameBuff); raise_syscall(taskData, buff, errno); } SavedStateHeader header; // Read the header and check the signature. if (fread(&header, sizeof(SavedStateHeader), 1, loadFile) != 1) raise_fail(taskData, "Unable to load header"); if (strncmp(header.headerSignature, SAVEDSTATESIGNATURE, sizeof(header.headerSignature)) != 0) raise_fail(taskData, "File is not a saved state"); if (header.headerVersion != SAVEDSTATEVERSION || header.headerLength != sizeof(SavedStateHeader) || header.segmentDescrLength != sizeof(SavedStateSegmentDescr)) { raise_fail(taskData, "Unsupported version of saved state file"); } // Does this actually have a parent? if (header.parentNameEntry == 0) raise_fail(taskData, "File does not have a parent"); // At the moment the only entry in the string table is the parent // name so we can simply write a new one on the end of the file. // This makes the file grow slightly each time but it shouldn't be // significant. fseek(loadFile, 0, SEEK_END); header.stringTable = ftell(loadFile); // Remember where this is fputc(0, loadFile); // First byte of string table is zero fputs(parentNameBuff, loadFile); fputc(0, loadFile); // A terminating null. header.stringTableSize = strlen(parentNameBuff) + 2; // Now rewind and write the header with the revised string table. fseek(loadFile, 0, SEEK_SET); fwrite(&header, sizeof(header), 1, loadFile); return SAVE(TAGGED(0)); } Handle ShowParent(TaskData *taskData, Handle hFileName) // Return the name of the immediate parent stored in a child { char fileNameBuff[MAXPATHLEN+1]; POLYUNSIGNED length = Poly_string_to_C(DEREFHANDLE(hFileName), fileNameBuff, MAXPATHLEN); if (length > MAXPATHLEN) raise_syscall(taskData, "File name too long", ENAMETOOLONG); AutoClose loadFile(fopen(fileNameBuff, "rb")); if ((FILE*)loadFile == NULL) { char buff[MAXPATHLEN+1+23]; strcpy(buff, "Cannot open load file: "); strcat(buff, fileNameBuff); raise_syscall(taskData, buff, errno); } SavedStateHeader header; // Read the header and check the signature. if (fread(&header, sizeof(SavedStateHeader), 1, loadFile) != 1) raise_fail(taskData, "Unable to load header"); if (strncmp(header.headerSignature, SAVEDSTATESIGNATURE, sizeof(header.headerSignature)) != 0) raise_fail(taskData, "File is not a saved state"); if (header.headerVersion != SAVEDSTATEVERSION || header.headerLength != sizeof(SavedStateHeader) || header.segmentDescrLength != sizeof(SavedStateSegmentDescr)) { raise_fail(taskData, "Unsupported version of saved state file"); } // Does this have a parent? if (header.parentNameEntry != 0) { char parentFileName[MAXPATHLEN+1]; unsigned toRead = header.stringTableSize-header.parentNameEntry; if (MAXPATHLEN < toRead) toRead = MAXPATHLEN; if (header.parentNameEntry >= header.stringTableSize /* Bad entry */ || fseek(loadFile, header.stringTable + header.parentNameEntry, SEEK_SET) != 0 || fread(parentFileName, 1, toRead, loadFile) != toRead) { raise_fail(taskData, "Unable to read parent file name"); } parentFileName[toRead] = 0; // Should already be null-terminated, but just in case. // Convert the name into a Poly string and then build a "Some" value. // It's possible, although silly, to have the empty string as a parent name. Handle resVal = SAVE(C_string_to_Poly(taskData, parentFileName)); Handle result = alloc_and_save(taskData, 1); DEREFHANDLE(result)->Set(0, DEREFWORDHANDLE(resVal)); return result; } else return SAVE(NONE_VALUE); } polyml.5.2.1/libpolyml/savestate.h0000644000175000017500000000267610670766461016177 0ustar daviddavid/* Title: savestate.h - Save and Load state Copyright (c) 2007 David C.J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef SAVESTATE_H_INCLUDED #define SAVESTATE_H_INCLUDED class SaveVecEntry; typedef SaveVecEntry *Handle; class TaskData; // Write a saved state file. Handle SaveState(TaskData *taskData, Handle args); // Load a saved state file and any ancestors. Handle LoadState(TaskData *taskData, Handle hFileName); // Show the hierarchy. Handle ShowHierarchy(TaskData *taskData); // Change the name of the immediate parent stored in a child Handle RenameParent(TaskData *taskData, Handle args); // Return the name of the immediate parent stored in a child Handle ShowParent(TaskData *taskData, Handle hFileName); #endif polyml.5.2.1/libpolyml/scanaddrs.cpp0000644000175000017500000003624710760535022016461 0ustar daviddavid/* Title: Address scanner Copyright (c) 2006-8 David C.J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifdef WIN32 #include "winconfig.h" #else #include "config.h" #endif #ifdef HAVE_ASSERT_H #include #define ASSERT(x) assert(x) #else #define ASSERT(x) 0 #endif #include "globals.h" #include "scanaddrs.h" #include "machine_dep.h" #include "check_objects.h" #include "diagnostics.h" // Process the value at a given location and update it as necessary. POLYUNSIGNED ScanAddress::ScanAddressAt(PolyWord *pt) { PolyWord val = *pt; if (IS_INT(val) || val == PolyWord::FromUnsigned(0)) { // We can get zeros in the constant area if we garbage collect // while compiling some code. */ } else if (val.IsCodePtr()) { // We can get code pointers either in the stack as return addresses or // handler pointers or in constants in code segments as the addresses of // exception handlers. // Find the start of the code segment PolyObject *oldObject = ObjCodePtrToPtr(val.AsCodePtr()); // Calculate the byte offset of this value within the code object. POLYUNSIGNED offset = val.AsCodePtr() - (byte*)oldObject; // Mustn't use ScanAddressAt here. That's only valid if the value points // into the area being updated. PolyObject *newObject = ScanObjectAddress(oldObject); *pt = PolyWord::FromCodePtr((byte*)newObject + offset); } else { ASSERT(OBJ_IS_DATAPTR(val)); // Database pointer, local pointer or IO pointer. // We need to include IO area pointers when we produce an object module. *pt = ScanObjectAddress(val.AsObjPtr()); } return 0; } // Process a value within the stack. PolyWord ScanAddress::ScanStackAddress(PolyWord val, StackObject *base, bool isCode) { PolyWord *end = (PolyWord*)base + base->Length(); ASSERT(base->ContainsNormalLengthWord()); ASSERT(base->IsStackObject()); // If isCode is set we definitely have a code address. It may have the // bottom bit set or it may be word aligned. if (isCode || val.IsCodePtr()) { /* Find the start of the code segment */ PolyObject *oldObject = ObjCodePtrToPtr(val.AsCodePtr()); // Calculate the byte offset of this value within the code object. POLYUNSIGNED offset = val.AsCodePtr() - (byte*)oldObject; PolyObject *newObject = ScanObjectAddress(oldObject); return PolyWord::FromCodePtr((byte*)newObject + offset); } else if (val.IsTagged() || (val.AsAddress() > base && val.AsAddress() <= end)) /* We don't need to process tagged integers (now we've checked it isn't a code address) and we don't need to process addresses within the current stack. If the containing stack has moved the stack addresses will have been updated by CopyStack. */ /* N.B. We have "<= end" rather than "< end" because it is possible for the stack to be completely empty on a terminated thread. */ return val; else { ASSERT(val.IsDataPtr()); return ScanObjectAddress(val.AsObjPtr()); } } // General purpose object processor, Processes all the addresses in an object. // Handles the various kinds of object that may contain addresses. void ScanAddress::ScanAddressesInObject(PolyObject *obj, POLYUNSIGNED lengthWord) { do { ASSERT (OBJ_IS_LENGTH(lengthWord)); CheckObjectL (obj, lengthWord); if (OBJ_IS_BYTE_OBJECT(lengthWord)) return; /* Nothing more to do */ POLYUNSIGNED length = OBJ_OBJECT_LENGTH(lengthWord); PolyWord *baseAddr = (PolyWord*)obj; if (OBJ_IS_STACK_OBJECT(lengthWord)) { StackObject *stack = (StackObject *) obj; PolyWord *stackPtr = stack->p_sp; // Save this BEFORE we update PolyWord *stackEnd = (PolyWord*)obj + length; // Either this is TAGGED(0) indicating a retry or it's a code pointer. if (stack->p_pc != TAGGED(0).AsCodePtr()) stack->p_pc = ScanStackAddress (PolyWord::FromCodePtr(stack->p_pc), stack, true).AsCodePtr(); // Stack pointer and handler pointers stack->p_sp = ScanStackAddress (PolyWord::FromStackAddr(stack->p_sp), stack, false).AsStackAddr(); stack->p_hr = ScanStackAddress (PolyWord::FromStackAddr(stack->p_hr), stack, false).AsStackAddr(); // The checked registers. for (POLYUNSIGNED i = 0; i < stack->p_nreg; i++) stack->p_reg[i] = ScanStackAddress(stack->p_reg[i], stack, false); // Now the values on the stack. for (PolyWord *q = stackPtr; q < stackEnd; q++) *q = ScanStackAddress(*q,stack, false); return; // We're done. } else if (OBJ_IS_CODE_OBJECT(lengthWord)) { // Scan constants within the code. machineDependent->ScanConstantsWithinCode(obj, obj, length, this); // Skip to the constants and get ready to scan them. obj->GetConstSegmentForCode(length, baseAddr, length); } // else it's a normal object, PolyWord *endWord = baseAddr + length; // We want to minimise the actual recursion we preform so we try to // use tail recursion if we can. We first scan from the end and // remove any words that don't need recursion. POLYUNSIGNED lastLengthWord = 0; while (endWord != baseAddr) { PolyWord wordAt = endWord[-1]; if (IS_INT(wordAt) || wordAt == PolyWord::FromUnsigned(0)) endWord--; // Don't need to look at this. else if ((lastLengthWord = ScanAddressAt(endWord-1)) != 0) // We need to process this one break; else endWord--; // We're not interested in this. } if (endWord == baseAddr) return; // We've done everything. // There is at least one word that needs to be processed, the // one at endWord-1. // Now process from the beginning forward to see if there are // any words before this that need to be handled. This way we are more // likely to handle the head of a list by recursion and the // tail by looping (tail recursion). while (baseAddr < endWord-1) { PolyWord wordAt = *baseAddr; if (IS_INT(wordAt) || wordAt == PolyWord::FromUnsigned(0)) baseAddr++; // Don't need to look at this. else { POLYUNSIGNED lengthWord = ScanAddressAt(baseAddr); if (lengthWord != 0) { wordAt = *baseAddr; // Reload because it may have been side-effected // We really have to process this recursively. if (wordAt.IsCodePtr()) ScanAddressesInObject(ObjCodePtrToPtr(wordAt.AsCodePtr()), lengthWord); else ScanAddressesInObject(wordAt.AsObjPtr(), lengthWord); baseAddr++; } else baseAddr++; } } // Finally process the last word we found that has to be processed. // Do this by looping rather than recursion. PolyWord wordAt = *baseAddr; // Last word to do. // This must be an address if (wordAt.IsCodePtr()) obj = ObjCodePtrToPtr(wordAt.AsCodePtr()); else obj = wordAt.AsObjPtr(); lengthWord = lastLengthWord; } while(1); } void ScanAddress::ScanAddressesInRegion(PolyWord *region, PolyWord *end) { PolyWord *pt = region; while (pt < end) { pt++; // Skip length word. // pt actually points AT the object here. PolyObject *obj = (PolyObject*)pt; if (obj->ContainsForwardingPtr()) /* skip over moved object */ { // We can now get multiple forwarding pointers as a result // of applying ShareData repeatedly. Perhaps we should // turn the forwarding pointers back into normal words in // an extra pass. while (obj->ContainsForwardingPtr()) obj = obj->GetForwardingPtr(); ASSERT(obj->ContainsNormalLengthWord()); CheckObject(obj); pt += obj->Length(); } else { ASSERT(obj->ContainsNormalLengthWord()); POLYUNSIGNED length = obj->Length(); if (pt+length > end) Crash("Malformed object at %p - length %lu\n", pt, length); if (length != 0) ScanAddressesInObject(obj); pt += length; } } } // Extract a constant from the code. PolyWord ScanAddress::GetConstantValue(byte *addressOfConstant, ScanRelocationKind code) { switch (code) { case PROCESS_RELOC_DIRECT: // 32 or 64 bit address of target { POLYUNSIGNED valu; unsigned i; byte *pt = addressOfConstant; if (*pt & 0x80) valu = 0-1; else valu = 0; for (i = sizeof(PolyWord); i > 0; i--) valu = (valu << 8) | pt[i-1]; /* The old code generator generated reverse subtraction of words using a move immediate which loaded a register with a the tagged value plus one. In practice the only reverse subtraction of a constant is 0-x so for backwards compatibility we need to treat 2 specially. */ ASSERT(valu != 2); return PolyWord::FromUnsigned(valu); } case PROCESS_RELOC_I386RELATIVE: // 32 or 64 bit relative address { POLYSIGNED disp; byte *pt = addressOfConstant; // Get the displacement. This is signed. if (*pt & 0x80) disp = -1; else disp = 0; // Set the sign just in case. for(unsigned i = sizeof(PolyWord); i > 0; i--) disp = (disp << 8) | pt[i-1]; byte *absAddr = pt + disp + sizeof(PolyWord); // The address is relative to AFTER the constant return PolyWord::FromCodePtr(absAddr); } case PROCESS_RELOC_PPCDUAL16SIGNED: // Power PC - two consecutive words case PROCESS_RELOC_PPCDUAL16UNSIGNED: { // The second word may be a sign-extending "add" instruction or // a non-signing extending "or" instruction. bool isSigned = code == PROCESS_RELOC_PPCDUAL16SIGNED; POLYUNSIGNED *pt = (POLYUNSIGNED *)addressOfConstant; // Put together the two halves. POLYUNSIGNED hi = pt[0] & 0xffff; POLYUNSIGNED lo = pt[1] & 0xffff; if (lo >= 32768 && isSigned) hi--; // Correct for sign extension. return PolyWord::FromUnsigned((hi << 16) + lo); } case PROCESS_RELOC_SPARCDUAL: // Sparc - Sethi and Add instruction pair. { POLYUNSIGNED *pt = (POLYUNSIGNED *)addressOfConstant; // Put together the two halves. POLYUNSIGNED valu = (pt[0] << 10) | (pt[1] & 0x3ff); return PolyWord::FromUnsigned(valu); } case PROCESS_RELOC_SPARCRELATIVE: // Call instruction with 30-bit word displacement { POLYUNSIGNED *pt = (POLYUNSIGNED *)addressOfConstant; POLYSIGNED disp = (*pt) & 0x3fffffff; // This will work on a 32-bit machine because shifting the 30 bits will set the // sign bit. return PolyWord::FromStackAddr((PolyWord*)pt + disp); } default: ASSERT(false); return TAGGED(0); } } // Store a constant value. Also used with a patch table when importing a saved heap which has // been exported using the C exporter. void ScanAddress::SetConstantValue(byte *addressOfConstant, PolyWord p, ScanRelocationKind code) { switch (code) { case PROCESS_RELOC_DIRECT: // 32 or 64 bit address of target { POLYUNSIGNED valu = p.AsUnsigned(); for (unsigned i = 0; i < sizeof(PolyWord); i++) { addressOfConstant[i] = (byte)(valu & 255); valu >>= 8; } } break; case PROCESS_RELOC_I386RELATIVE: // 32 or 64 bit relative address { POLYSIGNED newDisp = p.AsCodePtr() - addressOfConstant - sizeof(PolyWord); for (unsigned i = 0; i < sizeof(PolyWord); i++) { addressOfConstant[i] = (byte)(newDisp & 0xff); newDisp >>= 8; } } break; case PROCESS_RELOC_PPCDUAL16SIGNED: // Power PC - two consecutive words case PROCESS_RELOC_PPCDUAL16UNSIGNED: { // The second word may be a sign-extending "add" instruction or // a non-signing extending "or" instruction. bool isSigned = code == PROCESS_RELOC_PPCDUAL16SIGNED; POLYUNSIGNED *pt = (POLYUNSIGNED *)addressOfConstant; POLYUNSIGNED hi = p.AsUnsigned() >> 16; POLYUNSIGNED lo = p.AsUnsigned() & 0xffff; if ((lo & 0x8000) && isSigned) hi++; // Adjust the for sign extension. pt[0] = (pt[0] & 0xffff0000) | hi; pt[1] = (pt[1] & 0xffff0000) | lo; } break; case PROCESS_RELOC_SPARCDUAL: // Sparc - SETHI has top 22 bits, ADD has low 10 bits. { POLYUNSIGNED *pt = (POLYUNSIGNED *)addressOfConstant; POLYUNSIGNED valu = p.AsUnsigned(); pt[0] = (pt[0] & 0xffc00000) | (valu >> 10); pt[1] = (pt[1] & 0xfffff000) | (valu & 0x3ff); } break; case PROCESS_RELOC_SPARCRELATIVE: // Call instruction with 30-bit word displacement { POLYUNSIGNED *pt = (POLYUNSIGNED *)addressOfConstant; POLYSIGNED newDisp = p.AsStackAddr() - (PolyWord*)addressOfConstant; *pt = (newDisp & 0x3fffffff) | 0x40000000; } break; } } // The default action is to call the DEFAULT ScanAddressAt NOT the virtual which means that it calls // ScanObjectAddress for the base address of the object referred to. void ScanAddress::ScanConstant(byte *addressOfConstant, ScanRelocationKind code) { PolyWord p = GetConstantValue(addressOfConstant, code); if (! IS_INT(p)) { PolyWord oldValue = p; ScanAddress::ScanAddressAt(&p); if (p != oldValue) // Update it if it has changed. SetConstantValue(addressOfConstant, p, code); } } polyml.5.2.1/libpolyml/scanaddrs.h0000644000175000017500000001142410760535022016114 0ustar daviddavid/* Title: scanaddrs.h - Scan addresses in objects Copyright (c) 2006-8 David C.J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef SCANADDRS_H_INCLUDED #define SCANADDRS_H_INCLUDED #include "globals.h" // Type of relocations. N.B. These values are built into saved states. Either add // new entries to the end or update the saved state version number. typedef enum { PROCESS_RELOC_DIRECT = 0, // 32 or 64 bit address of target PROCESS_RELOC_I386RELATIVE, // 32 or 64 bit relative address PROCESS_RELOC_PPCDUAL16SIGNED, // Power PC - two consecutive words - second is signed. PROCESS_RELOC_PPCDUAL16UNSIGNED, // Power PC - two consecutive words - second is unsigned PROCESS_RELOC_SPARCDUAL, // SPARC - two consecutive words PROCESS_RELOC_SPARCRELATIVE // Sparc - 30 bit relative address } ScanRelocationKind; class ScanAddress { public: virtual ~ScanAddress() {} // Keeps gcc happy protected: // Scan an address in the memory. "pt" always points into an object. // It is not called with pt pointing at a C++ automatic variable. // Tagged integers have already been filtered out. // The result is the length word of the object to use if the object // is to be processed recursively or 0 if it should not be. // Default action - call ScanObjectAddress for the base object address of // the address. virtual POLYUNSIGNED ScanAddressAt(PolyWord *pt); public: // The fundamental overridable for this class. Takes the object address and returns // the updated address. If nothing else is overridden everything eventually comes here. virtual PolyObject *ScanObjectAddress(PolyObject *base) = 0;// { return base; } typedef enum { STRENGTH_STRONG = 0, STRENGTH_WEAK = 1 } RtsStrength; // Scan an address in the run-time system. This normally just applies ScanObjectAddress // but if this is a weak reference it can set *pt to NULL virtual void ScanRuntimeAddress(PolyObject **pt, RtsStrength weak) { *pt = ScanObjectAddress(*pt); } // Process a constant within the code. // The default action is to call the DEFAULT ScanAddressAt NOT the virtual which means that it calls // ScanObjectAddress for the base address of the object referred to. virtual void ScanConstant(byte *addressOfConstant, ScanRelocationKind code); // Scan the objects in the region and process their addresses. Applies ScanAddressesInObject // to each of the objects. The "region" argument points AT the first length word. // Typically used to scan or update addresses in the mutable area. void ScanAddressesInRegion(PolyWord *region, PolyWord *endOfRegion); protected: // General object processor. // If the object is a word object calls ScanAddressesAt for all the addresses. // // If the object is a code object calls ScanAddressesAt for the constant area and // calls (indirectly) ScanConstant, and by default ScanObjectAddress for addresses within // the code // // If the object is a stack calls ScanStackAddress which calls ScanObjectAddress for // addresses within the code. virtual void ScanAddressesInObject(PolyObject *base, POLYUNSIGNED lengthWord); void ScanAddressesInObject(PolyObject *base) { ScanAddressesInObject(base, base->LengthWord()); } // Process a word found on the stack and return the (updated) value. Stacks may contain // code addresses and addresses within the current stack. "isCode" is set to true for // the program counter which may be a code address but not satisfy IsCodeObject. // The default action is to ignore integers and addresses within the stack and to call // ScanObjectAddress for the base addresses of all other addresses. PolyWord ScanStackAddress(PolyWord val, StackObject *base, bool isCode); // Extract a constant from the code. static PolyWord GetConstantValue(byte *addressOfConstant, ScanRelocationKind code); public: // Store a constant in the code. static void SetConstantValue(byte *addressOfConstant, PolyWord p, ScanRelocationKind code); }; #endif polyml.5.2.1/libpolyml/sharedata.cpp0000644000175000017500000005165510711401021016436 0ustar daviddavid/* Title: Share common immutable data Copyright (c) 2000 Cambridge University Technical Services Limited and David C. J. Matthews 2006 This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifdef WIN32 #include "winconfig.h" #else #include "config.h" #endif #ifdef HAVE_STDIO_H #include #endif #ifdef HAVE_STDLIB_H #include #endif #ifdef HAVE_ASSERT_H #include #define ASSERT(x) assert(x) #else #define ASSERT(x) #endif #ifdef HAVE_STRING_H #include #endif #include "globals.h" #include "save_vec.h" #include "machine_dep.h" #include "scanaddrs.h" #include "run_time.h" #include "sys.h" #include "gc.h" #include "rts_module.h" #include "memmgr.h" #include "processes.h" /* This code was largely written by Simon Finn as a database improver for the the memory-mapped persistent store version. The aim is that where two immutable objects (cells) contain the same data (i.e. where ML equality would say they were equal) they should be merged so that only a single object is retained. The basic algorithm works like this: 1. From the root, recursively process all objects and calculate a "depth" for each object. Mutable data, stacks and code segments have depth 0 and cannot be merged. Byte segments (e.g. strings and long-format arbitrary precision values) have depth 1. Other cells have depths of 1 or greater, the depth being the maximum recursion depth until a byte segment or an object with depth 0 is reached. Cycles of immutable data don't arise normally in ML but could be produced as a result of locking mutable objects. To avoid infinite recursion cycles are broken by setting the depth of an object to zero before processing it. The depth of each object is stored in the length word of the object. This ensures each object is processed once only. 2. Vectors are created containing objects of the same depth, from 1 to the maximum depth found. 3. We begin a loop starting at depth 1. 4. The objects are sorted by their contents so bringing together objects with the same contents. The contents are considered simply as uninterpreted bits. 5. The sorted vector is processed to find those objects that are actually bitwise equal. One object is selected to be retained and its length word is restored to be a normal length (phase 1 had set it to be a depth). The other objects have their length words turned into tombstones pointing at the retained object. 6. Objects at the next depth are first processed to find pointers to objects that moved in the previous step (or that step with a lower depth). The addresses are updated to point to the retained object. The effect of this step is to ensure that now two objects that are equal in ML terms have identical contents. e.g. If we have val a = ("abc", "def") and b = ("abc", "def") then we will have merged the two occurrences of "abc" and "def" in the previous pass of level 1 objects. This step ensures that the two cells containing the pairs both hold pointers to the same objects and so are bitwise equal. 7. Repeat with 4, 5 and 6 until all the levels have been processed. Each object is processed once and at the end most of the objects have been updated with the shared addresses. We have to scan all the mutable and code objects to update the addresses but also have to scan the immutables because of the possibility of missing an update as a result of breaking a loop (see SPF's comment below). DCJM 3/8/06 */ /******************************************************************************/ /* */ /* Data objects */ /* */ /******************************************************************************/ /* Meaning of length word: (1) bit 31 (msbit) = 0, bits 0-23 = length, bits 24-30 = flags (2) bit 31 = 1, bit 30 = 1, bits 0-30 = depth (2) bit 31 = 1, bit 30 = 0, bits 0-30 = forwarding pointer>>2 */ typedef struct { POLYUNSIGNED L; PolyObject *pt; } Item; class Vector { public: static Vector *AddDepth(POLYUNSIGNED depth); Vector(POLYUNSIGNED d): depth(d), nitems(0), vsize(0), vector(0), next(0) {} ~Vector() { free(vector); } POLYUNSIGNED depth; POLYUNSIGNED nitems; POLYUNSIGNED vsize; Item *vector; Vector *next; }; static Vector *vectors = 0; // Returns true if this is an address into either the permanent or temporary areas. inline bool IsDataAddress(PolyWord p) { MemSpace *space = gMem.SpaceForAddress(p.AsAddress()); return space != 0 && space->spaceType != ST_IO; } Vector * Vector::AddDepth(POLYUNSIGNED depth) { Vector *v; Vector **L = & vectors; for (v = *L; v && v->depth < depth; v = *L) { L = & v->next; } if (v && v->depth == depth) return v; v = new Vector(depth); if (v == 0) // Should throw an exception, but just in case... throw MemoryException(); v->next = *L; *L = v; return v; } /******************************************************************************/ /* */ /* AddToVector */ /* */ /******************************************************************************/ static void AddToVector(POLYUNSIGNED depth, POLYUNSIGNED L, PolyObject *pt) { Vector *v = Vector::AddDepth (depth); ASSERT (v->nitems <= v->vsize); if (v->nitems == v->vsize) { unsigned long new_vsize = 2 * v->vsize + 1; if (new_vsize < 15) new_vsize = 15; Item *new_vector = (Item *)realloc (v->vector, new_vsize*sizeof(Item)); if (new_vector == 0) throw MemoryException(); v->vector = new_vector; v->vsize = new_vsize; } ASSERT (v->nitems < v->vsize); v->vector[v->nitems].L = L; v->vector[v->nitems].pt = pt; v->nitems++; ASSERT (v->nitems <= v->vsize); } /******************************************************************************/ /* */ /* CompareItems */ /* */ /******************************************************************************/ static int CompareItems(const void *arg_a, const void *arg_b) { Item *a = (Item *)arg_a; Item *b = (Item *)arg_b; PolyObject *x = a->pt; PolyObject *y = b->pt; POLYUNSIGNED A = x->LengthWord(); POLYUNSIGNED B = y->LengthWord(); ASSERT (OBJ_IS_DEPTH(A)); ASSERT (OBJ_IS_DEPTH(B)); ASSERT (A == B); // Should be the same depth. ASSERT (OBJ_IS_LENGTH(a->L)); ASSERT (OBJ_IS_LENGTH(b->L)); if (a->L > b->L) return 1; if (a->L < b->L) return -1; // Return simple bitwise equality. return memcmp(x, y, OBJ_OBJECT_LENGTH(a->L)*sizeof(PolyWord)); } /******************************************************************************/ /* */ /* MergeSameItems */ /* */ /******************************************************************************/ static POLYUNSIGNED MergeSameItems(Vector *v) { POLYUNSIGNED N = v->nitems; Item *itemVec = v->vector; POLYUNSIGNED n = 0; POLYUNSIGNED i = 0; while (i < N) { ASSERT (OBJ_IS_DEPTH(itemVec[i].pt->LengthWord())); PolyObject *toShare = NULL; // Candidate to share. unsigned minHierarchy = 0; POLYUNSIGNED j; for (j = i; j < N; j++) { // Search for identical objects. Don't bother to compare it with itself. if (i != j && CompareItems (& itemVec[i], & itemVec[j]) != 0) break; // Choose an object in the permanent memory if that is available. // This is necessary to retain the invariant that no object in // the permanent memory points to an object in the temporary heap. // (There may well be pointers to this object elsewhere in the permanent // heap). // Choose the lowest hierarchy value for preference since that // may reduce the size of saved state when resaving already saved // data. MemSpace *space = gMem.SpaceForAddress(itemVec[j].pt); if (space->spaceType == ST_PERMANENT) { PermanentMemSpace *pSpace = (PermanentMemSpace *)space; if (toShare == NULL || pSpace->hierarchy < minHierarchy) { toShare = itemVec[j].pt; minHierarchy = pSpace->hierarchy; } } } // If there isn't a permanent object choose the first in the table. if (toShare == NULL) toShare = itemVec[i].pt; POLYUNSIGNED k = j; // Remember the first object that didn't match. //.For each identical object set all but the one we want to point to // the shared object. for (j = i; j < k; j++) { ASSERT (OBJ_IS_DEPTH(itemVec[j].pt->LengthWord())); if (itemVec[j].pt == toShare) { // This is the common object. toShare->SetLengthWord(itemVec[j].L); // restore genuine length word ASSERT (OBJ_IS_LENGTH(toShare->LengthWord())); } else { itemVec[j].pt->SetForwardingPtr(toShare); /* an indirection */ ASSERT (itemVec[j].pt->ContainsForwardingPtr()); } n++; } ASSERT(! OBJ_IS_DEPTH(itemVec[i].pt->LengthWord())); i = k; } return n; } class ProcessFixupAddress: public ScanAddress { public: void FixupItems (Vector *v); protected: virtual POLYUNSIGNED ScanAddressAt(PolyWord *pt); virtual PolyObject *ScanObjectAddress(PolyObject *base) { return GetNewAddress(base).AsObjPtr(); } PolyWord GetNewAddress(PolyWord old); }; POLYUNSIGNED ProcessFixupAddress::ScanAddressAt(PolyWord *pt) { *pt = GetNewAddress(*pt); // If we are updating an immutable object in the permanent memory we mustn't // have it contain an address in the temporary heap. Mutables are ok since the // garbage collector always scans that area. // ASSERT(!(H->i_space.bottom <= pt && pt < H->i_space.pointer) || (*pt).IsTagged() || // gMem.IsPermanentMemoryPointer((*pt).AsAddress()) || gMem.IsIOPointer((*pt).AsAddress())); return 0; } // Returns the new address if the argument is the address of an object that // has moved, otherwise returns the original. PolyWord ProcessFixupAddress::GetNewAddress(PolyWord old) { if (old.IsTagged() || old == PolyWord::FromUnsigned(0) || gMem.IsIOPointer(old.AsAddress())) return old; // Nothing to do. // When we are updating addresses in the stack or in code segments we may have // code pointers. if (old.IsCodePtr()) { // Find the start of the code segment PolyObject *oldObject = ObjCodePtrToPtr(old.AsCodePtr()); // Calculate the byte offset of this value within the code object. POLYUNSIGNED offset = old.AsCodePtr() - (byte*)oldObject; PolyWord newObject = GetNewAddress(oldObject); return PolyWord::FromCodePtr(newObject.AsCodePtr() + offset); } ASSERT(old.IsDataPtr()); ASSERT(IsDataAddress(old)); PolyObject *obj = old.AsObjPtr(); POLYUNSIGNED L = obj->LengthWord(); // Generally each address will point to an object processed at a lower depth. // The exception is if we have a cycle and have assigned the rest of the // structure to a higher depth. // N.B. We return the original address here but this could actually share // with something else and not be retained. if (OBJ_IS_DEPTH(L)) return old; if (obj->ContainsForwardingPtr()) // tombstone is a pointer to a shared object { PolyObject *newp = obj->GetForwardingPtr(); ASSERT (newp->ContainsNormalLengthWord()); return newp; } ASSERT (obj->ContainsNormalLengthWord()); // object is not shared return old; } void ProcessFixupAddress::FixupItems (Vector *v) { POLYUNSIGNED N = v->nitems; Item *V = v->vector; for (POLYUNSIGNED i = 0; i < N; i++) { ScanAddressesInObject(V[i].pt, V[i].L); } } class ProcessAddToVector: public ScanAddress { public: ProcessAddToVector() {} virtual POLYUNSIGNED ScanAddressAt(PolyWord *pt) { (void)AddObjectsToDepthVectors(*pt); return 0; } virtual PolyObject *ScanObjectAddress(PolyObject *base) { (void)AddObjectsToDepthVectors(base); return base; } protected: POLYUNSIGNED AddObjectsToDepthVectors(PolyWord old); }; POLYUNSIGNED ProcessAddToVector::AddObjectsToDepthVectors(PolyWord old) { // If this is a tagged integer or an IO pointer that's simply a constant. if (old.IsTagged() || old == PolyWord::FromUnsigned(0) || gMem.IsIOPointer(old.AsAddress())) return 0; ASSERT(IsDataAddress(old)); PolyObject *obj = old.AsObjPtr(); POLYUNSIGNED L = obj->LengthWord(); if (OBJ_IS_DEPTH(L)) // tombstone contains genuine depth or 0. return OBJ_GET_DEPTH(L); ASSERT (OBJ_IS_LENGTH(L)); // Byte objects always have depth 1 and can't contain addresses. if (obj->IsByteObject()) { obj->SetLengthWord(OBJ_SET_DEPTH(1)); AddToVector (1, L, old.AsObjPtr());// add to vector at correct depth return 1; } // set initial depth to 0 (to cope with loops) obj->SetLengthWord(OBJ_SET_DEPTH(0)); /* There's a problem sharing code objects if they have relative calls/jumps in them to other code. The code of two functions may be identical (e.g. they both call functions 100 bytes ahead) and so they will appear the same but if the functions they jump to are different they are actually different. For that reason we don't share code segments. DCJM 4/1/01 */ if (OBJ_IS_MUTABLE_OBJECT(L) || OBJ_IS_STACK_OBJECT(L) || OBJ_IS_CODE_OBJECT(L)) { // These always have depth 0. We still have to process any addresses within them. ScanAddressesInObject(obj, L); // Add these at depth zero. This allows us to restore the length words. AddToVector (0, L, old.AsObjPtr()); return 0; } ASSERT(OBJ_IS_WORD_OBJECT(L)); // That leaves immutable data objects. POLYUNSIGNED depth = 0; POLYUNSIGNED n = OBJ_OBJECT_LENGTH(L); PolyWord *pt = (PolyWord*)obj; // Process all the values in this object and calculate the maximum depth. for(POLYUNSIGNED i = 0; i < n; i++) { POLYUNSIGNED d = AddObjectsToDepthVectors(*pt); if (d > depth) depth = d; pt++; } depth++; // Plus one for this object. obj->SetLengthWord(OBJ_SET_DEPTH(depth));// set genuine depth. AddToVector (depth, L, old.AsObjPtr());// add to vector at correct depth return depth; } static void RestoreLengthWords(Vector *vec) { // Restore the length words. Item *itemVec = vec->vector; for (POLYUNSIGNED i = 0; i < vec->nitems; i++) { itemVec[i].pt->SetLengthWord(itemVec[i].L); // restore genuine length word ASSERT (OBJ_IS_LENGTH(itemVec[i].pt->LengthWord())); } } static unsigned verbose = 0; // This is called by the root thread to do the work. bool RunShareData(PolyObject *root) { POLYUNSIGNED totalObjects = 0; POLYUNSIGNED totalShared = 0; vectors = 0; // Build the vectors from the immutable objects. ProcessAddToVector addToVector; try { (void)addToVector.ScanObjectAddress(root); } catch (MemoryException) { // If we run out of memory and raise an exception we have to clean up. while (vectors) { Vector *v = vectors; vectors = v->next; delete(v); } return false; // Run out of memory. } ProcessFixupAddress fixup; Vector *vec = vectors; if (vec && vec->depth == 0) // Skip the level zero objects. vec = vec->next; // We fix them up when we've done all the rest. while (vec) { fixup.FixupItems(vec); qsort (vec->vector, vec->nitems, sizeof(Item), CompareItems); POLYUNSIGNED n = MergeSameItems (vec); if (n && verbose) { printf("Level %4lu, Objects %6lu, Shared %6lu\n", vec->depth, vec->nitems, n); } totalObjects += vec->nitems; totalShared += n; vec = vec->next; // Get the next vector (if any) } /* At this stage, we have fixed up most but not all of the forwarding pointers. The ones that we haven't fixed up arise from situations such as the following: X -> Y <-> Z i.e. Y and Z form a loop, and X is isomorphic to Z. When we assigned the depths, we have to arbitrarily break the loop between Y and Z. Suppose Y is assigned to level 1, and Z is assigned to level 2. When we process level 1 and fixup Y, there's nothing to do, since Z is still an ordinary object. However when we process level 2, we find that X and Z are isomorphic so we arbitrarily choose one of them and turn it into a "tombstone" pointing at the other. If we change Z into the tombstone, then Y now contains a pointer that needs fixing up. That's why we need the second fixup pass. Note also that if we had broken the loop the other way, we would have assigned Z to level 1, Y to level 2 and X to level 3, so we would have missed the chance to share Z and X. Perhaps that's why running the program repeatedly sometimes finds extra things to share? SPF 26/1/95 */ /* We have updated the addresses in objects with non-zero level so they point to the single occurrence but we need to do the same with level 0 objects (mutables, stacks and code). */ vec = vectors; if (vec && vec->depth == 0) { Vector *v = vec; RestoreLengthWords(v); fixup.FixupItems(v); vec = vec->next; delete(v); // Free all the data } /* Previously we made a complete scan over the memory updating any addresses so that if we have shared two substructures within our root we would also share any external pointers. This has been removed but we have to reinstate the length words we've overwritten with forwarding pointers because there may be references to unshared objects from outside. */ while (vec != 0) { Vector *v = vec; RestoreLengthWords(v); vec = vec->next; delete(v); } if (verbose) { printf ("Total Objects %6lu, Total Shared %6lu\n", totalObjects, totalShared); fflush(stdout); /* We need this for Windows at least. */ } return true; // Succeeded. } class ShareRequest: public MainThreadRequest { public: ShareRequest(Handle root): shareRoot(root), result(false) {} virtual void Perform() { result = RunShareData(shareRoot->WordP()); } Handle shareRoot; bool result; }; // ShareData. This is the main entry point. // Because this can recurse deeply it needs to be run by the main thread. // Also it manipulates the heap in ways that could mess up other threads // so we need to stop them before executing this. void ShareData(TaskData *taskData, Handle root) { if (! root->Word().IsDataPtr()) return; // Nothing to do. We could do handle a code pointer but it shouldn't occur. // Request a full GC to reduce the size of fix-ups. FullGC(taskData); // Request the main thread to do the sharing. ShareRequest request(root); processes->MakeRootRequest(taskData, &request); // Raise an exception if it failed. if (! request.result) raise_exception_string(taskData, EXC_Fail, "Insufficient memory"); } polyml.5.2.1/libpolyml/sharedata.h0000644000175000017500000000213010663564002016102 0ustar daviddavid/* Title: Share common immutable data Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef _SHAREDATA_H #define _SHAREDATA_H // Called by the thread to make the request. void ShareData(TaskData *taskData, Handle root); // Called by the root thread to do the work. bool RunShareData(PolyObject *root); #endif polyml.5.2.1/libpolyml/sighandler.cpp0000644000175000017500000004351411046571775016647 0ustar daviddavid/* Title: Signal handling Author: David C.J. Matthews Copyright (c) 2000-8 David C.J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifdef WIN32 #include "winconfig.h" #else #include "config.h" #endif #ifdef HAVE_STDIO_H #include #endif #ifdef HAVE_SYS_TYPES_H #include #endif #ifdef HAVE_SIGNAL_H #include #endif #ifdef HAVE_ERRNO_H #include #endif #ifdef HAVE_ASSERT_H #include #define ASSERT(x) assert(x) #else #define ASSERT(x) 0 #endif #ifdef HAVE_STRING_H #include #endif #ifdef HAVE_IO_H #include #endif #ifdef HAVE_UNISTD_H #include #endif #ifdef HAVE_STDLIB_H #include // For malloc #endif #ifdef HAVE_SEMAPHORE_H #include #endif #ifdef HAVE_SYS_TYPES_H #include #endif #ifdef HAVE_SYS_STAT_H #include #endif #ifdef HAVE_FCNTL_H #include #endif /* Signal handling is complicated in a multi-threaded environment. The pthread mutex and condition variables are not safe to use in a signal handler so we need to use POSIX semaphores since sem_post is safe. */ #if (defined(HAVE_STACK_T) && defined(HAVE_SIGALTSTACK)) extern "C" { // This is missing in older versions of Mac OS X int sigaltstack(const stack_t *, stack_t *); } #endif #include "globals.h" #include "arb.h" #include "run_time.h" #include "sighandler.h" #include "processes.h" #include "machine_dep.h" #include "sys.h" #include "save_vec.h" #include "rts_module.h" #include "gc.h" // For convertedWeak #include "scanaddrs.h" #include "locking.h" #ifdef WINDOWS_PC #include "Console.h" #endif #define SAVE(x) taskData->saveVec.push(x) #define SIZEOF(x) (sizeof(x)/sizeof(word)) #define DEFAULT_SIG 0 #define IGNORE_SIG 1 #define HANDLE_SIG 2 // This is only used in SignalRequest static struct _sigData { bool nonMaskable; // True if this sig is used within the RTS. Must not be ignored or replaced PolyWord handler; // User-installed handler, TAGGED(DEFAULT_SIG) or TAGGED(IGNORE_SIG) int signalCount; } sigData[NSIG]; unsigned receivedSignalCount = 0; // Incremented each time we get a signal // sigLock protects access to the signalCount values in sigData but // not the "handler" field. static PLock sigLock; #if (defined(HAVE_LIBPTHREAD) && defined(HAVE_PTHREAD_H) && defined(HAVE_SEMAPHORE_H)) static pthread_t detectionThreadId; // Thread processing signals. static sem_t *waitSema; static int lastSignals[NSIG]; #endif // This must not be called from an asynchronous signal handler. static void signalArrived(int sig) { sigLock.Lock(); receivedSignalCount++; sigData[sig].signalCount++; sigLock.Unlock(); // To avoid deadlock we must release sigLock first. processes->SignalArrived(); } // Called whenever a signal handler is installed other than in this // module. Because modules are initialised in an unspecified order // we may have already masked off this signal. void markSignalInuse(int sig) { sigData[sig].nonMaskable = true; #if (defined(HAVE_LIBPTHREAD) && defined(HAVE_PTHREAD_H)) // Enable this signal. sigset_t sigset; sigemptyset(&sigset); sigaddset(&sigset, sig); pthread_sigmask(SIG_UNBLOCK, &sigset, NULL); #endif } /* Find the existing handler for this signal. */ static PolyWord findHandler(int sig) { if ((unsigned)sig >= NSIG) // Check it's in range. return TAGGED(DEFAULT_SIG); /* Not there - default action. */ else return sigData[sig].handler; } #ifdef WINDOWS_PC // This is called to simulate a SIGINT in Windows. void RequestConsoleInterrupt(void) { // The default action for SIGINT is to exit. if (findHandler(SIGINT) == TAGGED(DEFAULT_SIG)) processes->Exit(2); // Exit with the signal value. else signalArrived(SIGINT); } #endif #if (defined(HAVE_LIBPTHREAD) && defined(HAVE_PTHREAD_H) && defined(HAVE_SEMAPHORE_H)) // Request the main thread to change the blocking state of a signal. class SignalRequest: public MainThreadRequest { public: SignalRequest(int s, int r): signl(s), state(r) {} virtual void Perform(); int signl, state; }; // Called whenever a signal is received. static void handle_signal(SIG_HANDLER_ARGS(s, c)) { if (waitSema != 0) { lastSignals[s]++; // Assume this is atomic with respect to reading. // Wake the signal detection thread. sem_post(waitSema); } } void SignalRequest::Perform() { struct sigaction action; memset(&action, 0, sizeof(action)); switch (state) { case DEFAULT_SIG: action.sa_handler = SIG_DFL; sigaction(signl, &action, 0); break; case IGNORE_SIG: action.sa_handler = SIG_IGN; sigaction(signl, &action, 0); break; case HANDLE_SIG: setSignalHandler(signl, handle_signal); break; } } #endif /* CALL_IO2(Sig_dispatch_,IND) */ /* This function behaves fairly similarly to the Unix and Windows signal handler. It takes a signal number and a handler which may be a function or may be 0 (default) or 1 (ignore) and returns the value corresponding to the previous handler. I've used a general dispatch function here to allow for future expansion. */ Handle Sig_dispatch_c(TaskData *taskData, Handle args, Handle code) { int c = get_C_long(taskData, DEREFWORDHANDLE(code)); switch (c) { case 0: /* Set up signal handler. */ { int sign; int action; Handle oldaction; { // Lock while we look at the signal vector but release // it before making a root request. PLocker locker(&sigLock); // We have to pass this to the main thread to // set up the signal handler. sign = get_C_long(taskData, DEREFHANDLE(args)->Get(0)); /* Decode the action if it is Ignore or Default. */ if (IS_INT(DEREFHANDLE(args)->Get(1))) action = UNTAGGED(DEREFHANDLE(args)->Get(1)); else action = HANDLE_SIG; /* Set the handler. */ if (sign <= 0 || sign >= NSIG) raise_syscall(taskData, "Invalid signal value", EINVAL); /* Get the old action before updating the vector. */ oldaction = SAVE(findHandler(sign)); // Now update it. sigData[sign].handler = DEREFWORDHANDLE(args)->Get(1); } // Request a change in the masking by the root thread. // This doesn't do anything in Windows so the only "signal" // we affect is SIGINT and that is handled by RequestConsoleInterrupt. if (! sigData[sign].nonMaskable) { #if (defined(HAVE_LIBPTHREAD) && defined(HAVE_PTHREAD_H) && defined(HAVE_SEMAPHORE_H)) SignalRequest request(sign, action); processes->MakeRootRequest(taskData, &request); #endif } return oldaction; } case 1: // Called by the signal handler thread. Blocks until a signal // is available. { while (true) { processes->ProcessAsynchRequests(taskData); // Check for kill. sigLock.Lock(); // Any pending signals? for (int sig = 0; sig < NSIG; sig++) { if (sigData[sig].signalCount > 0) { sigData[sig].signalCount--; if (!IS_INT(findHandler(sig))) /* If it's not DEFAULT or IGNORE. */ { // Create a pair of the handler and signal and pass // them back to be run. Handle pair = alloc_and_save(taskData, 2); // Have to call findHandler again here because that // allocation could have garbage collected. DEREFHANDLE(pair)->Set(0, findHandler(sig)); DEREFHANDLE(pair)->Set(1, TAGGED(sig)); sigLock.Unlock(); return pair; } } } if (convertedWeak) { // Last GC converted a weak SOME into NONE. This isn't // anything to do with signals but the signal thread can // deal with this. sigLock.Unlock(); convertedWeak = false; return SAVE(TAGGED(0)); } // No pending signal. Wait until we're woken up. // This releases sigLock after acquiring schedLock. if (! processes->WaitForSignal(taskData, &sigLock)) raise_exception_string(taskData, EXC_Fail, "Only one thread may wait for signals"); } } default: { char msg[100]; sprintf(msg, "Unknown signal function: %d", c); raise_exception_string(taskData, EXC_Fail, msg); return 0; } } } // Set up per-thread signal data: basically signal stack. // This is really only needed for profiling timer signals. void initThreadSignals(TaskData *taskData) { #if (!(defined(WINDOWS_PC)||defined(MACOSX))) // On the i386, at least, we need to set up a signal stack for // each thread if it might receive a signal. ML code checks for // stack overflow but a signal could result in C code being // executed on the ML stack. The signal stack avoids this. // On some architectures the C stack pointer is left unused // when executing ML code so this isn't a problem. // In Linux each thread can receive a SIGVTALRM signal when // profiling. // This is currently disabled in Mac OS X. In 10.4 and before // setting a signal stack in a thread seemed to set it for the // whole process and crash with an illegal instruction on the // second signal. This isn't currently a problem since only the // main thread receives signals in Mac OS X. #if (defined(SA_ONSTACK) && defined(HAVE_SIGALTSTACK)) taskData->signalStack = malloc(SIGSTKSZ); #ifdef HAVE_STACK_T stack_t ex_stack; #else // This used to be used in FreeBSD and Mac OS X struct sigaltstack ex_stack; #endif memset(&ex_stack, 0, sizeof(ex_stack)); // Cast to char* because ss_sp is char* in FreeBSD. // Linux simply casts it back to void*. ex_stack.ss_sp = (char*)taskData->signalStack; ex_stack.ss_size = SIGSTKSZ; ex_stack.ss_flags = 0; /* not SS_DISABLE */ int sigaltstack_result = sigaltstack(&ex_stack, NULL); ASSERT(sigaltstack_result == 0); #endif #endif /* not the PC */ #if (defined(HAVE_LIBPTHREAD) && defined(HAVE_PTHREAD_H)) // Block all signals except those marked as in use by the RTS so // that they will only be picked up by the signal detection thread. // Since the signal mask is inherited we really don't need to do // this for every thread, just the initial one. sigset_t sigset; sigfillset(&sigset); for (int i = 0; i < NSIG; i++) { if (sigData[i].nonMaskable) sigdelset(&sigset, i); } pthread_sigmask(SIG_SETMASK, &sigset, NULL); #endif } /* General purpose function to set up a signal handler. */ #ifndef WINDOWS_PC bool setSignalHandler(int sig, signal_handler_type func) { struct sigaction sigcatch; memset(&sigcatch, 0, sizeof(sigcatch)); sigcatch.sa_sigaction = func; /* Both Linux and FreeBSD now use SA_SIGINFO in a similar way. If SA_SIGINFO is set the handler is supposed to be in sa_sigaction rather than sa_handler (actually this is a union so they're in the same place). */ init_asyncmask(&sigcatch.sa_mask); sigcatch.sa_flags = 0; #if defined(SA_ONSTACK) && defined(HAVE_SIGALTSTACK) sigcatch.sa_flags |= SA_ONSTACK; #endif #ifdef SA_RESTART sigcatch.sa_flags |= SA_RESTART; #endif #ifdef SA_SIGINFO sigcatch.sa_flags |= SA_SIGINFO; #endif #ifdef SV_SAVE_REGS sigcatch.sa_flags |= SV_SAVE_REGS; #endif return sigaction(sig, &sigcatch,NULL) >= 0; } // Signals to mask off when handling a signal. The signal being handled // is always masked off. This really only applied when emulation traps // and requests to GC involved signals. That no longer applies except // on the Sparc. void init_asyncmask(sigset_t *mask) { /* disable asynchronous interrupts while servicing interrupt */ sigemptyset(mask); sigaddset(mask,SIGVTALRM); sigaddset(mask,SIGINT); sigaddset(mask,SIGUSR2); sigaddset(mask,SIGWINCH); // This next used to be needed when emulation traps resulted in // signals. This no longer applies except on the Sparc. #ifdef SPARC sigaddset(mask,SIGILL); sigaddset(mask,SIGFPE); /* Mask off SIGSEGV. This is definitely needed when we are installing a handler for SIGINT under Linux and may also be needed in other cases as well e.g. SIGVTALRM. Without it typing control-C to a program which is taking lots of emulation traps can cause a crash because the signals are delivered in the "wrong" order and the pc value given to catchSEGV can point at the handler for SIGINT. DCJM 7/2/01. */ sigaddset(mask,SIGSEGV); /* And, just to be sure, include SIGBUS. DCJM 22/5/02. */ sigaddset(mask,SIGBUS); #endif } #endif class SigHandler: public RtsModule { public: virtual void Init(void); virtual void GarbageCollect(ScanAddress * /*process*/); }; // Declare this. It will be automatically added to the table. static SigHandler sighandlerModule; #if (defined(HAVE_LIBPTHREAD) && defined(HAVE_PTHREAD_H) && defined(HAVE_SEMAPHORE_H)) // This thread is really only to convert between POSIX semaphores and // pthread condition variables. It waits for a semphore to be released by the // signal handler running on the main thread and then wakes up the ML handler // thread. The ML thread must not wait directly on a POSIX semaphore because it // may also be woken by other events, particularly a kill request when the program // exits. static void *SignalDetectionThread(void *) { // Block all signals so they will be delivered to the main thread. sigset_t active_signals; sigfillset(&active_signals); pthread_sigmask(SIG_SETMASK, &active_signals, NULL); int readSignals[NSIG]; memset(readSignals, 0, sizeof(readSignals)); while (true) { if (waitSema == 0) return 0; // Wait until we are woken up by an arriving signal. // waitSema will be incremented for each signal so we should // not block until we have processed them all. while (sem_wait(waitSema) == -1) { if (errno != EINTR) return 0; } for (int j = 1; j < NSIG; j++) { if (readSignals[j] < lastSignals[j]) { readSignals[j]++; signalArrived(j); } } } } #endif #if (defined(HAVE_SEMAPHORE_H)) static sem_t waitSemaphore; // Initialise a semphore. Tries to create an unnamed semaphore if // it can but tries a named semaphore if it can't. Mac OS X only // supports named semaphores. static sem_t *init_semaphore(sem_t *sema, int init) { if (sem_init(sema, 0, init) == 0) return sema; #if (defined(__CYGWIN__)) // Cygwin doesn't define sem_unlink but that doesn't matter // since sem_init works. return 0; #else char semname[30]; static int count=0; sprintf(semname, "poly%0d-%0d", (int)getpid(), count++); sema = sem_open(semname, O_CREAT|O_EXCL, 00666, init); if (sema == (sem_t*)SEM_FAILED) return 0; sem_unlink(semname); return sema; #endif } #endif void SigHandler::Init(void) { // Mark certain signals as non-maskable since they really // indicate a fatal error. #ifdef SIGSEGV sigData[SIGSEGV].nonMaskable = true; #endif #ifdef SIGBUS sigData[SIGBUS].nonMaskable = true; #endif #ifdef SIGILL sigData[SIGILL].nonMaskable = true; #endif #if (defined(HAVE_LIBPTHREAD) && defined(HAVE_PTHREAD_H) && defined(HAVE_SEMAPHORE_H)) // Initialise the "wait" semaphore so that it blocks immediately. waitSema = init_semaphore(&waitSemaphore, 0); if (waitSema == 0) return; // Create a new thread to handle signals synchronously. // for it to finish. pthread_attr_t attrs; pthread_attr_init(&attrs); pthread_attr_setdetachstate(&attrs, PTHREAD_CREATE_DETACHED); #ifdef PTHREAD_STACK_MIN #if (PTHREAD_STACK_MIN < 4096) pthread_attr_setstacksize(&attrs, 4096); // But not too small: FreeBSD makes it 2k #else pthread_attr_setstacksize(&attrs, PTHREAD_STACK_MIN); // Only small stack. #endif #endif pthread_create(&detectionThreadId, &attrs, SignalDetectionThread, 0); pthread_attr_destroy(&attrs); #endif } void SigHandler::GarbageCollect(ScanAddress *process) { for (unsigned i = 0; i < NSIG; i++) { if (sigData[i].handler != PolyWord::FromUnsigned(0) && sigData[i].handler.IsDataPtr()) { PolyObject *obj = sigData[i].handler.AsObjPtr(); process->ScanRuntimeAddress(&obj, ScanAddress::STRENGTH_STRONG); sigData[i].handler = obj; } } } polyml.5.2.1/libpolyml/sighandler.h0000644000175000017500000000316310757045072016302 0ustar daviddavid/* Title: sighandler.h Copyright (c) 2000-7 David C.J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef _SIGHANDLER_H #define _SIGHANDLER_H 1 class SaveVecEntry; typedef SaveVecEntry *Handle; class TaskData; extern Handle Sig_dispatch_c(TaskData *taskData, Handle handler, Handle sig); extern void markSignalInuse(int sig); #ifdef WINDOWS_PC extern void RequestConsoleInterrupt(void); #else #ifdef HAVE_SIGNAL_H #include #endif extern void init_asyncmask(sigset_t *mask); #define SIG_HANDLER_ARGS(_sig,_contxt) int _sig, siginfo_t *, void *_contxt typedef void (*signal_handler_type)(SIG_HANDLER_ARGS(s, c)); extern bool setSignalHandler(int sig, signal_handler_type func); // Set up per-thread signal data: basically signal stack. extern void initThreadSignals(TaskData *taskData); #endif /* ! WIN32 */ extern unsigned receivedSignalCount; // Incremented each time we get a signal #endif polyml.5.2.1/libpolyml/sparc_assembly.S0000644000175000017500000015643510703177731017156 0ustar daviddavid! ! Title: Assembly code routines for the poly system. ! Author: David Matthews ! Copyright (c) Cambridge University Technical Services Limited 2000-7 ! ! This library is free software; you can redistribute it and/or ! modify it under the terms of the GNU Lesser General Public ! License as published by the Free Software Foundation; either ! version 2.1 of the License, or (at your option) any later version. ! ! This library is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ! Lesser General Public License for more details. ! ! You should have received a copy of the GNU Lesser General Public ! License along with this library; if not, write to the Free Software ! Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ! ! Call machine code from the interpreter. ! /* Linkage conventions: We ignore the register window and use only the %o, %l and %g register sets. %i0, the original parameter to the C code, points to a memRegisters structure. %i1 is currently unused %i2 and %i3 are unsaved scratch registers. The difference is that if %i2 is the target of a sethi/add combination the value is assumed to be an address and can be updated by the GC whereas if it is %i3 it is not. %i4 and %i5 are saved unchecked registers. %i6 and %i7 are never used (%i7 is the return address from ML to C). %o0 is used for the first argument to a function, and for the result. %o1-%o3 are used for the next 3 args, any others being passed on the stack. %o4 is a general work register (previously the code address/constant ptr) %o5 is the closure pointer or static link pointer. %o6 is never used (the system assumes it points to an area where regs can be stored). %o7 is the return address i.e. the address of the jmpl instruction. Return is done by jmp %o7+6. 2 is always added to %o7 on compiled function entry so that it is distinguishable from other addresses which point at the start of objects. %g3 points to the top exception handler, %g4 is the stack pointer, %g5 is the heap limit - previously stack limit register, %g6 is the heap pointer, %g7 is unused - used by pthread library %g1 and %g2 are available as work regs, as are the %l registers. %i4 and %i5 are untagged scratch registers which don't need to contain tagged values. They should NEVER contain pointers if there is any possibility of a garbage collection, since the garbage collector doesn't change the values in these registers. Other register MUST contain properly tagged values if there any a possibility of a garbage collection. */ /* Include sys.h for the POLY_SYS entries. */ #include "sys.h" /* Assume we're compiling for ELF and don't need an underscore for globals */ #define gbl(id) id #define gbla(id) id##a #define gblc(id) id##c #define globldec(id) \ .globl gbl(id); \ gbl(id): /* Standard start-up for inline calls (those that don't call C) */ #define INLINE_ROUTINE(id) \ globldec(id) \ or %o7,2,%o7; /* Required by ML compiler */ \ mov UNIT,%o4 /* This can be removed once we use a temporary reg here. */ /* relative to a StackObject structure */ #define P_SPACE(base) [base+0] #define P_PC(base) [base+4] #define P_SP(base) [base+8] #define P_HR(base) [base+12] #define P_NREG(base) [base+16] #define P_REG(i,base) [base+(20+4*i)] /* Relative to the MemRegisters structure. This is pointed at by %i0. */ #define MR_INRTS [%i0+0] #define MR_REQUEST [%i0+4] #define MR_REASON [%i0+8] #define MR_HEAPPOINTER [%i0+12] #define MR_HEAPSPACET [%i0+16] #define MR_POLYSTACK [%i0+20] #define MR_STACKLIMIT [%i0+24] #define MR_STACKTOP [%i0+28] #define MR_IOENTRY [%i0+36] #define MR_THREADID [%i0+40] #define MR_GLOBALLOCK [%i0+44] #define loadg(x, r) sethi %hi(x),r; ld [r+%lo(x)],r #define storeg(r, x, w) sethi %hi(x),w; st r,[w+%lo(x)] /* The shift up/down mnemonics are different for the AIX versions */ #define shiftup(word,places) ((word)<<(places)) #define shiftdown(word,places) ((word)>>(places)) /* The bottom two bits are used as tags */ #define TAGSHIFT 2 #define TAGBITS (0x3) #define TAGGED(n) (shiftup(n,TAGSHIFT)+1) #define TRUE TAGGED(1) #define FALSE TAGGED(0) #define UNIT TAGGED(0) /* Used to convert byte-counts to word-counts. It's just a coincidence that this is the same as TAGSHIFT on this machine. SPF 18/12/95 */ #define WORDSHIFT 2 /* The most significant TYPESHIFT of a length-word are type bits. The remaining 32-TYPESHIFT bits constitute an unsigned integer which is the number of words (not counting the length-word itself) contained in the object. SPF 18/12/95 */ #define TYPESHIFT 8 /* Register mask entries - must match coding used in codeCons.ML */ #define M_O0 0x000001 #define M_O1 0x000002 #define M_O2 0x000004 #define M_O3 0x000008 #define M_O4 0x000010 #define M_O5 0x000020 #define M_G1 0x000040 /* O6 is not used */ #define M_O7 0x000080 #define M_L0 0x000100 #define M_L1 0x000200 #define M_L2 0x000400 #define M_L3 0x000800 #define M_L4 0x001000 #define M_L5 0x002000 #define M_L6 0x004000 #define M_L7 0x008000 #define M_G2 0x010000 /* TODO: The present mask entries are just a first go through. Most of them are set to Mask_all when they certainly don't need to be. DCJM 11/12/00. */ #define RegMask(name,mask) Mask_##name=mask /* Default mask for unused entries and also for the special cases where we don't know what the effect of calling the function will be. */ RegMask(all,0x1ffff) /* SparcAsmSaveStateAndReturn. Saves the ML state into poly_stack and returns to C. This is the return half of the code in SparcAsmSwitchToPoly. */ .global gbl(SparcAsmSaveStateAndReturn) gbl(SparcAsmSaveStateAndReturn): nop nop nop ld MR_POLYSTACK,%i3 st %g6,MR_HEAPPOINTER ! Save the heap address st %g1,P_REG(0,%i3) ! general registers st %g2,P_REG(1,%i3) st %o0,P_REG(2,%i3) st %o1,P_REG(3,%i3) st %o2,P_REG(4,%i3) st %o3,P_REG(5,%i3) st %o4,P_REG(6,%i3) st %o5,P_REG(7,%i3) st %o7,P_REG(9,%i3) st %l0,P_REG(10,%i3) st %l1,P_REG(11,%i3) st %l2,P_REG(12,%i3) st %l3,P_REG(13,%i3) st %l4,P_REG(14,%i3) st %l5,P_REG(15,%i3) st %l6,P_REG(16,%i3) st %l7,P_REG(17,%i3) st %i4,[%i3+96] ! Unchecked reg st %i5,[%i3+100] ! Unchecked st %g3,[%i3+12] ! hr st %g4,[%i3+8] ! sp mov 1,%g1 st %g1,MR_INRTS ! Set the InRunTime flag ld [%sp+92],%i7 ! Return to C. This code is the counterpart to the "save" at the start ! of SparcAsmSwitchToPoly. ret restore ! DELAY SLOT /***************************************************************************/ /* SparcAsmSwitchToPoly */ /***************************************************************************/ /* Entry point for C */ .global gbl(SparcAsmSwitchToPoly) gbl(SparcAsmSwitchToPoly): /* The ML code is treated as a single C procedure. It is called with "memRegisters" as its argument and returns whenever it needs RTS support. It can also be forced to return when it receives a signal by having the signal handler set the PC values to SparcAsmSaveStateAndReturn. The C stack pointer (%o6) is never modified by the ML code. */ save %sp,-120,%sp ! Create a new frame (%sp == %o6). This has two local words. ! Save these for the moment. st %i7,[%sp+92] ! Save the return address in the frame. First local word. ! %i0 contains the address of memRegs. Save that in the stack st %i0,[%sp+188] ! This is the conventional location for the first parameter ld MR_POLYSTACK,%i3 ld P_SP(%i3),%g4 ! sp ld P_HR(%i3),%g3 ! hr /* Now rsp, rhr and rsl have been loaded we can clear inRTS */ st %g0,MR_INRTS ld MR_HEAPPOINTER,%g6 ! Local pointer ld MR_HEAPSPACET,%g5 ! Set to space available - maxint ld P_REG(0,%i3),%g1 ld P_REG(1,%i3),%g2 ld P_REG(2,%i3),%o0 ld P_REG(3,%i3),%o1 ld P_REG(4,%i3),%o2 ld P_REG(5,%i3),%o3 ld P_REG(6,%i3),%o4 ld P_REG(7,%i3),%o5 ! /* There's a slot reserved for %o6, but we mustn't touch that register. */ ld P_REG(9,%i3),%o7 ld P_REG(10,%i3),%l0 ld P_REG(11,%i3),%l1 ld P_REG(12,%i3),%l2 ld P_REG(13,%i3),%l3 ld P_REG(14,%i3),%l4 ld P_REG(15,%i3),%l5 ld P_REG(16,%i3),%l6 ld P_REG(17,%i3),%l7 ! /* There's a slot reserved for the untagged register count. */ ld P_REG(19,%i3),%i4 ld P_REG(20,%i3),%i5 ld P_REG(21,%i3),%i2 ! condition code (only for emulation) ld P_PC(%i3),%i3 ! pc ! The condition code is not preserved across most traps and is only used ! when emulating an arbitrary precision comparison instruction. jmp %i3 ! cmp %i2,0 ! DELAY SLOT Set the condition code /***************************************************************************/ /* Standard C call macro */ /***************************************************************************/ /* Set the request code and return to C, saving the registers on the way. The first word must be or %o7,2,%o7. The function call sequence may skip this word if it is jumping to the function (and so an earlier call will have or-ed it already) rather than calling. */ #define CALL_IO(name, ioCall) \ .global gbla(name); \ gbla(name): \ or %o7,2,%o7; \ ld MR_IOENTRY,%i4; \ mov ioCall,%i3; \ jmp %i4; \ st %i3,MR_REQUEST; /* Delay slot */ \ RegMask(name, Mask_all) /***************************************************************************/ /* Functions implemented in C */ /***************************************************************************/ CALL_IO(finish, POLY_SYS_exit) CALL_IO(change_dir, POLY_SYS_chdir) CALL_IO(profiler, POLY_SYS_profiler) CALL_IO(Real_str,POLY_SYS_Real_str) CALL_IO(Real_geq,POLY_SYS_Real_geq) CALL_IO(Real_leq,POLY_SYS_Real_leq) CALL_IO(Real_gtr,POLY_SYS_Real_gtr) CALL_IO(Real_lss,POLY_SYS_Real_lss) CALL_IO(Real_eq,POLY_SYS_Real_eq) CALL_IO(Real_neq,POLY_SYS_Real_neq) CALL_IO(Real_dispatch,POLY_SYS_Real_Dispatch) CALL_IO(Real_add, POLY_SYS_Add_real) CALL_IO(Real_sub, POLY_SYS_Sub_real) CALL_IO(Real_mul, POLY_SYS_Mul_real) CALL_IO(Real_div, POLY_SYS_Div_real) CALL_IO(Real_neg, POLY_SYS_Neg_real) CALL_IO(Real_int, POLY_SYS_real_to_int) CALL_IO(Real_float, POLY_SYS_int_to_real) CALL_IO(Real_sqrt, POLY_SYS_sqrt_real) CALL_IO(Real_sin, POLY_SYS_sin_real) CALL_IO(Real_cos, POLY_SYS_cos_real) CALL_IO(Real_arctan, POLY_SYS_arctan_real) CALL_IO(Real_exp, POLY_SYS_exp_real) CALL_IO(Real_ln, POLY_SYS_ln_real) CALL_IO(Real_repr, POLY_SYS_Repr_real) CALL_IO(Real_conv, POLY_SYS_conv_real) CALL_IO(thread_dispatch, POLY_SYS_thread_dispatch) CALL_IO(kill_self, POLY_SYS_kill_self) CALL_IO(objsize_, POLY_SYS_objsize) ! MJC 27/04/88 CALL_IO(showsize_, POLY_SYS_showsize) ! MJC 09/03/89 CALL_IO(timing_dispatch_,POLY_SYS_timing_dispatch) ! DCJM 10/4/00 CALL_IO(XWindows_, POLY_SYS_XWindows) ! MJC 27/09/90 CALL_IO(full_gc_, POLY_SYS_full_gc) ! MJC 18/03/91 CALL_IO(stack_trace_, POLY_SYS_stack_trace) ! MJC 18/03/91 CALL_IO(foreign_dispatch_, POLY_SYS_foreign_dispatch) ! NIC 22/04/94 CALL_IO(IO_dispatch_, POLY_SYS_io_dispatch) ! DCJM 8/5/00 CALL_IO(Net_dispatch_, POLY_SYS_network) ! DCJM 22/5/00 CALL_IO(OS_spec_dispatch_, POLY_SYS_os_specific) ! DCJM 22/5/00 CALL_IO(Sig_dispatch_, POLY_SYS_signal_handler) ! DCJM 18/7/00 CALL_IO(shrink_stack_, POLY_SYS_shrink_stack) ! SPF 1/12/96 CALL_IO(process_env_dispatch_,POLY_SYS_process_env) ! DCJM 25/4/2000 CALL_IO(get_flags_, POLY_SYS_get_flags) CALL_IO(set_flags_, POLY_SYS_code_flags) ! SPF 12/02/97 CALL_IO(set_code_constant, POLY_SYS_set_code_constant) ! DCJM 11/1/2001 CALL_IO(poly_dispatch_, POLY_SYS_poly_specific) CALL_IO(callcode_tupled, POLY_SYS_callcode_tupled) CALL_IO(io_operation, POLY_SYS_io_operation) CALL_IO(exception_trace, POLY_SYS_exception_trace) ! alloc(size, flags, initial). Allocates a segment of a given size and ! initialises it. globldec(alloc_store) CALL_IO(alloc_store_long_, POLY_SYS_alloc_store) RegMask(alloc_store,Mask_all) INLINE_ROUTINE(int_to_word) /* Extract the low order 32 bits from an integer. If it is a tagged integer there's nothing to do, if it is a long integer we have to extract the low order word from the vector. */ ! This first part is no longer used. Word.fromInt is now implemented using ! is_short and get_first_word_long. andcc %o0,1,%g0 be itw0 /* If it's long we have to get the first word. */ nop jmp %o7+6 /* If it's short we just return it. */ nop INLINE_ROUTINE(get_first_long_word_a) ! We have to get the word from the vector of bytes, but it is ! in little-endian order. itw0: ldub [%o0],%i5 sll %i5,TAGSHIFT,%o1 ! Put tag shifted value into o1 ldub [%o0+1],%i5 sll %i5,(TAGSHIFT+8),%i5 or %i5,%o1,%o1 ldub [%o0+2],%i5 sll %i5,(TAGSHIFT+16),%i5 or %i5,%o1,%o1 ldub [%o0+3],%i5 sll %i5,(TAGSHIFT+24),%i5 or %i5,%o1,%o1 ldub [%o0-4],%i5 ! See if the "negative" bit is set andcc %i5,0x10,%g0 bne,a itw1 sub %g0,%o1,%o1 ! Delay slot - annulled if not negative itw1: jmp %o7+6 or %o1,1,%o0 ! Put result into o0 ensuring tag is set. RegMask(get_first_long_word,Mask_all) RegMask(int_to_word,Mask_all) INLINE_ROUTINE(not_bool) jmp %o7+6 xor %o0,4,%o0 ! use of delay slot (SPF 13/10/94) RegMask(not_bool,M_O0|M_O7|M_O4) INLINE_ROUTINE(or_word) jmp %o7+6 or %o0,%o1,%o0 RegMask(or_word,M_O0|M_O7|M_O4) INLINE_ROUTINE(and_word) jmp %o7+6 and %o0,%o1,%o0 RegMask(and_word,M_O0|M_O7|M_O4) INLINE_ROUTINE(xor_word) xor %o0,%o1,%i4 ! This will zero the tag field (tags were equal) jmp %o7+6 or %i4,1,%o0 ! restore the tag bit RegMask(xor_word,M_O0|M_O7|M_O4) ! Assume that both args are tagged integers ! Word.<<(a,b) is defined to return 0 if b > Word.wordSize INLINE_ROUTINE(shift_left_word) subcc %o1,TAGGED(32-TAGSHIFT),%g0 bgu,a slw1 mov 0,%i4 ! Only if branch taken i.e. %o1 > 30 sub %o0,1,%i4 ! untag value to shift (but offset by 2) srl %o1,TAGSHIFT,%i5 ! amount to shift sll %i4,%i5,%i4 slw1: jmp %o7+6 or %i4,1,%o0 ! restore the tag bit RegMask(shift_left_word,M_O0|M_O7|M_O4) ! Assume that both args are tagged integers ! Word.>>(a,b) is defined to return 0 if b > Word.wordSize INLINE_ROUTINE(shift_right_word) subcc %o1,TAGGED(32-TAGSHIFT),%g0 bgu,a srw1 mov 0,%i4 ! Only if branch taken i.e. %o1 > 30 srl %o1,TAGSHIFT,%i5 ! amount to shift srl %o0,%i5,%i4 andn %i4,TAGBITS,%i4 ! remove stray bits from tag positions srw1: jmp %o7+6 or %i4,1,%o0 ! restore the tag bit RegMask(shift_right_word,M_O0|M_O7|M_O4) ! Assume that both args are tagged integers ! Word.~>>(a,b) is defined to return 0 or ~1 if b > Word.wordSize INLINE_ROUTINE(shift_right_arith_word) subcc %o1,TAGGED(32-TAGSHIFT),%g0 bgu,a saw1 mov TAGGED(32-TAGSHIFT),%o1 ! Set the shift to 30. This will give us either 0 or ~1. saw1: srl %o1,TAGSHIFT,%i5 ! amount to shift sra %o0,%i5,%i4 andn %i4,TAGBITS,%i4 ! remove stray bits from tag positions jmp %o7+6 or %i4,1,%o0 ! restore the tag bit RegMask(shift_right_arith_word,M_O0|M_O7|M_O4) ! This is needed in the code generator, but is a very risky thing to do. INLINE_ROUTINE(offset_address) srl %o1,TAGSHIFT,%i5 ! untag offset jmp %o7+6 add %o0,%i5,%o0 RegMask(offset_address,M_O0|M_O7|M_O4) ! INLINE_ROUTINE(name) could be inlined to use delay slot. SPF 17/7/96 #define TEST(name, br_cond) \ INLINE_ROUTINE(name); \ cmp %o0,%o1; \ br_cond 1f; \ nop; \ jmp %o7+6; \ mov FALSE,%o0; \ 1: jmp %o7+6; \ mov TRUE,%o0; \ RegMask(name,M_O0|M_O7|M_O4) TEST(int_eq,be) TEST(int_neq,bne) INLINE_ROUTINE(locksega) ! Clears the "mutable" bit on a segment ldub [%o0-4],%i4 andn %i4,0x40,%i4 ! Reset mutable bit stb %i4,[%o0-4] ! (DELAY SLOT) jmp %o7+6 mov UNIT,%o0 RegMask(lockseg,Mask_all) INLINE_ROUTINE(get_length_a) ld [%o0-4],%i4 sll %i4,TYPESHIFT,%i4 ! Clear top byte srl %i4,(TYPESHIFT-TAGSHIFT),%i4 jmp %o7+6 add %i4,1,%o0 ! return it as a tagged integer RegMask(get_length,M_O0|M_O7|M_O4) ! String comparison operations. INLINE_ROUTINE(teststrneq) ba ts1 mov FALSE,%o2 ! return false (tagged 0) if strings are equal /* String equality code rewritten (SPF 14/10/94) this code wouldn't work for Dave's run-time system */ INLINE_ROUTINE(teststreq) mov TRUE,%o2 ! return true (tagged 1) if strings are equal ts1: cmp %o0,%o1 ! are the two values identical? be ts_equal andcc %o0,TAGBITS,%g0 bnz ts_unequal ! return if arg1 is a single char (i.e. tag is non-zero) andcc %o1,TAGBITS,%g0 bnz ts_unequal ! return if arg2 is a single char nop ! We have two "long" strings ld [%o0-4],%i4 ! get the length words ld [%o1-4],%i5 cmp %i4,%i5 bne ts_unequal ! return if length words differ sll %i4,TYPESHIFT,%i4 ! remove type bits srl %i4,(TYPESHIFT-WORDSHIFT),%i4 ! convert to byte offset ! The main loop: %i4 has the word offset of the last word we checked ts5: subcc %i4,4,%i4 bl ts_equal ! /* return if we've checked all the words */ ! nop ! /* Don't need a "nop" here, since reloading the length word would be safe */ ld [%o0+%i4],%i5 ld [%o1+%i4],%l2 cmp %i5,%l2 be ts5 mov UNIT,%l2 ! zap l2 ! /* We've found a difference, so return false */ ts_unequal: jmp %o7+6 ! invert "string_equal" boolean xor %o2,4,%o0 ! 1 xor 4 = 5; 5 xor 4 = 1 ts_equal: jmp %o7+6 ! return "string_equal" boolean mov %o2,%o0 RegMask(teststreq,Mask_all) RegMask(teststrneq,Mask_all) INLINE_ROUTINE(teststrgeq) mov %o7,%i2 ! Save real return addr call test_string ! nop mov %i2,%o7 ! Restore return address and clobber bad address bge teststrgeq1 ! Skip if it's greater or equal mov TRUE,%o0 ! Delay slot mov FALSE,%o0 teststrgeq1: jmp %o7+6 nop INLINE_ROUTINE(teststrleq) mov %o7,%i2 ! Save real return addr call test_string ! nop mov %i2,%o7 ! Restore return address and clobber bad address ble,a teststrleq1 ! Skip if it's less or equal mov TRUE,%o0 ! Delay slot mov FALSE,%o0 teststrleq1: jmp %o7+6 nop INLINE_ROUTINE(teststrlss) mov %o7,%i2 ! Save real return addr call test_string ! nop mov %i2,%o7 ! Restore return address and clobber bad address bl teststrlss1 ! Skip if it's less. mov TRUE,%o0 ! Delay slot mov FALSE,%o0 teststrlss1: jmp %o7+6 nop INLINE_ROUTINE(teststrgtr) mov %o7,%i2 ! Save real return addr call test_string ! nop mov %i2,%o7 ! Restore return address and clobber bad address bg teststrgtr1 ! Skip if it's greater mov TRUE,%o0 ! Delay slot mov FALSE,%o0 teststrgtr1: jmp %o7+6 nop INLINE_ROUTINE(str_comparea) mov %o7,%i2 ! Save real return addr call test_string ! nop mov %i2,%o7 ! Restore return address and clobber bad address /* Set the result to -1 if less, 0 if equal and 1 if greater. */ beq str_comp1 mov TAGGED(0),%o0 ! Delay slot bg str_comp1 mov TAGGED(1),%o0 ! Delay slot mov TAGGED(-1),%o0 str_comp1: jmp %o7+6 nop RegMask(teststrgeq,Mask_all) RegMask(teststrleq,Mask_all) RegMask(teststrgtr,Mask_all) RegMask(teststrlss,Mask_all) RegMask(str_compare,Mask_all) /***************************************************************************/ /* test_string - basic string comparison utility function */ /***************************************************************************/ /* Compare two strings; returns with condition codes set appropriately. */ /* N.B. Doesn't adjust %o7. Even with 2 added this will be an invalid address so the caller must overwrite %o7. */ test_string: andcc %o0,TAGBITS,%g0 ! Single char? be,a test_string2 ! Skip if already an address. Annul the next instr if it's short. ld [%o0],%i4 ! Use the delay slot to get the length andcc %o1,TAGBITS,%g0 ! test arg2 /* arg1 is a single character - is arg2? */ be,a test_string1 ! Must annul the next instr if this is a single char. ld [%o1],%i5 ! Use the delay slot to get the length /* Both are single characters - just compare them */ jmp %o7+8 cmp %o0,%o1 ! In the delay slot test_string1: /* arg1 is a single character, but arg2 isn't. */ /* Is arg2 a null string? - return "GT" if 1 > length(arg2). */ mov 1,%i4 cmp %i4,%i5 bg test_string6 nop /* Compare arg1 with the first byte of arg2. If the bytes differ, that's the result we want. */ ldub [%o1+4],%i5 srl %o0,TAGSHIFT,%i4 cmp %i4,%i5 bne test_string6 mov 0,%i4 ! Delay slot. Set %i4 to zero ready for test /* But if they're equal set "less" because A is less than B */ jmp %o7+8 cmp %i4,1 ! In the delay slot. test_string2: andcc %o1,TAGBITS,%g0 ! test arg2 /* arg1 is not a single character - is arg2? */ be,a test_string3 ! Annul the next instr if it's short ld [%o1],%i5 ! Use the delay slot to get the length /* arg1 is not a single character, but arg2 is. Is arg1 a null string? - return "LT" if length(arg1) < 1. */ cmp %i4,1 bl test_string6 nop /* Compare first byte of arg1 with arg2. If the bytes differ, that's the result we want. */ ldub [%o0+4],%i4 srl %o1,TAGSHIFT,%i5 cmp %i4,%i5 bne test_string6 mov 1,%i4 ! Delay slot. Set %i4 to 1 ready for test /* But if they're equal set "greater" because A is greater than B */ jmp %o7+8 cmp %i4,0 ! In the delay slot. test_string3: /* Both are addresses rather than single characters. We've loaded the length of arg1 into i4 and of arg2 in i5 in the delay slots. */ ! A is greater than B if, at the first position at which A and B differ, ! A[i] > B[i] or if the end of B is found before they differ. ! Set %i4 to the shorter length and %i5 to a -ve value if B is shorter subcc %i5,%i4,%i5 ! Set i5 to excess of B over A bneg,a test_string3a ! i.e. execute next instr if negative addcc %i4,%i5,%i4 ! Subtract (negative) excess if A is longer test_string3a: cmp %i4,0 ! Check the length first time through. It's possible the above code will do that. test_string4: ! Start of main loop. The length is checked either above or in the dealy slot below. bne test_string5 nop b test_string5a ! Results depend on the lengths cmp %i4,%i5 ! In the delay slot, compare i4 which is zero with the length excess test_string5: ldub [%o0+4],%i3 ldub [%o1+4],%g1 add %o0,1,%o0 add %o1,1,%o1 cmp %i3,%g1 be,a test_string4 ! Repeat if equal. If it isn't annul the next instr. subcc %i4,1,%i4 ! Subtract 1 and set the condition code ! If we find a difference we return with the result in the condition codes. test_string5a: mov TAGGED(0),%o0 ! Clobber these which will point into the string mov TAGGED(0),%o1 mov TAGGED(0),%g1 ! and this which is an untagged character test_string6: jmp %o7+8 nop /* raisex is used by compiled code. N.B. note that raisex is NOT the same as raise_ex */ INLINE_ROUTINE(raisex) ld MR_STACKTOP,%i3 ! i3 = end_of_stack ld [%o0],%i4 ! i4 = exception id ld [%g3],%i5 ! i5 = handler id mov %g3,%o1 ! o1 = handler ptr ! Loop to find the handler for this exception. Handlers consist of one or more ! pairs of identifier and code address, followed by the address of the next ! handler. rsx1: cmp %i5,TAGGED(0) ! Is the handler identifier 0 or TAGGED(0)? bleu rsx7 ! If so we have a default handler. ! nop ! Unnecessary NOP deleted ! non-default handler cmp %i4,%i5 ! Does it match the exception id? beq rsx7 ! Skip if we found a match. nop ! This handler does not match - try the next one. ! This can be either a genuine handler pair, or a ! pointer up the stack. ld [%o1+8],%i5 ! Get the next handler id add %o1,8,%o1 ! Increment the handler pointer ! The very last handler points at itself, so we use "blu", not "bleu" here cmp %i5,%o1 blu rsx1 ! Not a stack pointer (too small) ! nop ! Unnecessary NOP deleted cmp %i5,%i3 bgeu rsx1 ! Not a stack pointer (too large) nop ! /* It's a stack pointer - get the next batch of handlers */ mov %i5,%o1 b rsx1 ld [%i5],%i5 rsx7: ! We have found the right handler - %o1 points to the data ld [%o1+4],%o7 ! Get the handler entry point rsx6: ld [%o1+8],%i5 ! Get the next handler id add %o1,8,%o1 ! The very last handler points at itself, so we use "blu", not "bleu" here cmp %i5,%o1 blu rsx6 ! Not a stack pointer (too small) ! nop ! Unnecessary NOP deleted cmp %i5,%i3 bgeu rsx6 ! Not a stack pointer (too large) ! nop ! Unnecessary NOP deleted /* o1 now points at the pointer to the next group of handlers i.e. the old (saved) value of the handler register and %i5 contains the pointer itself */ /* Is this handler a real one, or was it set by exception_trace? */ cmp %o7,TAGGED(0) bleu rsx8 nop ! Ordinary exception add %o1,4,%g4 ! Pop stack back past saved rhr mov %i5,%g3 ! Reload rhr from saved value jmp %o7-2 ! Now enter the handler mov UNIT,%o1 ! Zap bad value in %o1 rsx8: /*We've found a handler set by exception_trace. ! Push %o7 onto the stack. It should contain a "return" ! address inside the function that raised the exception. ! (That's because raising an exception is actually a CALL ! to the RTS.) Pushing it onto the stack allows ex_tracec ! to identify the function that raised the exception. We ! then put a dummy value into %o7 (so it's not mistaken for a normal return address) and ! finally call ex_tracec, which doesn't return but actually ! unwinds the stack to the next handler and the re-raises the ! exception. ! SPF 9/4/97 */ mov %o0,%l1 st %o7,[%g4-4] mov %o1,%o0 ! stack-mark is arg1 sub %g4,4,%g4 mov %l1,%o1 ! exception packet is arg2 mov TAGGED(1),%o7 ! make return address look like a tagged int. CALL_IO(ex_trace, POLY_SYS_give_ex_trace) ! Arbitrary precision arithmetic. These only call the procedures in arb.c ! if the values are in the long format. INLINE_ROUTINE(neg_long) sub %o0,1,%i4 ! Remove tag tsubcctv %g0,%i4,%i4 jmp %o7+6 add %i4,1,%o0 RegMask(aneg,M_O0|M_O7|M_O4) INLINE_ROUTINE(add_long) sub %o0,1,%i4 ! Remove tags sub %o1,1,%i5 taddcctv %i4,%i5,%i4 ! Check tags and overflow jmp %o7+6 add %i4,1,%o0 ! Restore tag RegMask(aplus,M_O0|M_O7|M_O4) INLINE_ROUTINE(sub_long) sub %o0,1,%i4 ! Remove tags sub %o1,1,%i5 tsubcctv %i4,%i5,%i4 ! Check tags and overflow jmp %o7+6 add %i4,1,%o0 ! Restore tag RegMask(aminus,M_O0|M_O7|M_O4) INLINE_ROUTINE(mult_long) and %o0,1,%i5 ! test for any long arguments andcc %o1,%i5,%g0 bz mul_really_long mov %o7,%i5 ! (DELAY SLOT) Save link reg call mul_signed nop bnz mul_really_long ! Skip if overflow mov %i5,%o7 ! (DELAY SLOT) Restore link jmp %o7+6 mov %o2,%o0 ! Get result. mul_really_long: CALL_IO(mult_long, POLY_SYS_amul) RegMask(amul,Mask_all) CALL_IO(div_long, POLY_SYS_adiv) RegMask(adiv,Mask_all) CALL_IO(rem_long, POLY_SYS_amod) RegMask(amod,Mask_all) ! INLINE_ROUTINE(name) not optimised due to possible trap. SPF 17/7/96 #define ARBTEST(name, br_cond) \ INLINE_ROUTINE(name); \ sub %o0,1,%i4; \ sub %o1,1,%i5; \ tsubcctv %i4,%i5,%g0; \ br_cond 1f; \ nop; \ jmp %o7+6; \ mov FALSE,%o0; \ 1: jmp %o7+6; \ mov TRUE,%o0 ARBTEST(equal_long, be) ARBTEST(int_geq, bge) ARBTEST(int_leq, ble) ARBTEST(int_gtr, bg) ARBTEST(int_lss, bl) RegMask(equala,M_O0|M_O4|M_O7) RegMask(int_geq,M_O0|M_O4|M_O7) RegMask(int_leq,M_O0|M_O4|M_O7) RegMask(int_gtr,M_O0|M_O4|M_O7) RegMask(int_lss,M_O0|M_O4|M_O7) INLINE_ROUTINE(or_long) and %o0,1,%i5 ! test for any long arguments andcc %o1,%i5,%g0 bz or_really_long nop jmp %o7+6 or %o0,%o1,%o0 or_really_long: CALL_IO(or_long, POLY_SYS_ora) RegMask(ora,Mask_all) INLINE_ROUTINE(and_long) and %o0,1,%i5 ! test for any long arguments andcc %o1,%i5,%g0 bz and_really_long nop jmp %o7+6 and %o0,%o1,%o0 and_really_long: CALL_IO(and_long, POLY_SYS_anda) RegMask(anda,Mask_all) INLINE_ROUTINE(xor_long) and %o0,1,%i5 ! test for any long arguments andcc %o1,%i5,%g0 bz xor_really_long nop xor %o0,%o1,%i4 ! This will zero the tag field (tags were equal) jmp %o7+6 or %i4,1,%o0 ! restore the tag bit xor_really_long: CALL_IO(xor_long, POLY_SYS_xora) RegMask(xora,Mask_all) INLINE_ROUTINE(is_shorta) and %o0,1,%i4 ! %i4 = 1 for short, 0 for others sll %i4,TAGSHIFT,%i4 jmp %o7+6 add %i4,1,%o0 ! Tag and return it RegMask(is_short,M_O0|M_O4|M_O7) /* These are the same as int_eq/neq. These were previously distinct because pointer equality required special code in the old persistent store system. That is no longer relevant. */ TEST(word_eq, be) TEST(word_neq, bne) INLINE_ROUTINE(load_byte) /* We can assume index will not overflow 30 bits Shouldn't we check for Range though? */ sra %o1,TAGSHIFT,%i5 ! was srl ldub [%o0+%i5],%i4 sll %i4,TAGSHIFT,%i4 ! tag it jmp %o7+6 add %i4,1,%o0 RegMask(load_byte,M_O0|M_O4|M_O7) INLINE_ROUTINE(load_word) /* We can assume index will not overflow 30 bits Shouldn't we check for Range though? */ sub %o1,1,%i5 ! Remove tag bit - the result is a word offset jmp %o7+6 ld [%o0+%i5],%o0 ! /* Load in the delay slot wouldn't work on Dave's system */ RegMask(load_word,M_O0|M_O4|M_O7) INLINE_ROUTINE(assign_byte) /* We can assume index will not overflow 30 bits Shouldn't we check for Range though? */ srl %o1,TAGSHIFT,%i4 ! Remove tag on arg2 srl %o2,TAGSHIFT,%i5 ! Remove tag on arg3 stb %i5,[%o0+%i4] jmp %o7+6 mov UNIT,%o0 ! result of operation is unit RegMask(assign_byte,Mask_all) INLINE_ROUTINE(assign_word) /* We can assume index will not overflow 30 bits Shouldn't we check for Range though? */ ! The following only works if TAGSHIFT = WORDSHIFT sub %o1,1,%i4 ! Remove tag bit on arg2 (but keep shift) st %o2,[%o0+%i4] jmp %o7+6 mov UNIT,%o0 ! result of operation is unit RegMask(assign_word,Mask_all) INLINE_ROUTINE(string_length) andcc %o0,TAGBITS,%g0 ! Single char strings are represented by the character bz,a sl1 ld [%o0],%i4 ! Get length field ! a single character jmp %o7+6 ! Return TAGGED(1) mov TAGGED(1),%o0 ! not a single character string sl1: sll %i4,TAGSHIFT,%i4 ! Return tagged length jmp %o7+6 add %i4,1,%o0 RegMask(string_length,M_O0|M_O4|M_O7) ! Store the length of a string in the first word. INLINE_ROUTINE(set_string_length_a) srl %o1,TAGSHIFT,%i4 ! Untag the length st %i4,[%o0] jmp %o7+6 ! Return UNIT mov UNIT,%o0 RegMask (set_string_length,M_O0|M_O4|M_O7) INLINE_ROUTINE(is_big_endian) jmp %o7+6 mov TRUE,%o0 !(DELAY SLOT) SPARC is big-endian RegMask(is_big_endian,M_O0|M_O4|M_O7) INLINE_ROUTINE(bytes_per_word) jmp %o7+6 mov TAGGED(4),%o0 !(DELAY SLOT) 4 bytes per word RegMask(bytes_per_word,M_O0|M_O4|M_O7) ! 30-bit signed multiply routine. Takes two tagged 31 bit integers in %o0 and ! %o1 and returns a tagged result in %o2, clearing the Z condition code if ! there has been an overflow. ! It does not modify %o0 or %o1 so that it can be used for arbitrary ! precision multiplies which overflow. ! This code is almost a direct copy of the signed multiply routine in ! the Sparc Architecture Manual. mul_signed: sub %o1,1,%o1 ! Just remove tag bit sra %o0,TAGSHIFT,%o4 ! Shift other arg mov %o4,%y ! multiplier to y reg ! We have to allow 3 instruction after the mov %o4,%y before the first ! mulscc so we might as well use that time to see if we can do it quicker. andncc %o4,0xfff,%g0 be mls3 andcc %g0,%g0,%o4 ! (DELAY SLOT) zero pp and clear N and V mulscc %o4,%o1,%o4 ! first iteration mulscc %o4,%o1,%o4 mulscc %o4,%o1,%o4 mulscc %o4,%o1,%o4 mulscc %o4,%o1,%o4 mulscc %o4,%o1,%o4 mulscc %o4,%o1,%o4 mulscc %o4,%o1,%o4 mulscc %o4,%o1,%o4 mulscc %o4,%o1,%o4 mulscc %o4,%o1,%o4 mulscc %o4,%o1,%o4 mulscc %o4,%o1,%o4 mulscc %o4,%o1,%o4 mulscc %o4,%o1,%o4 mulscc %o4,%o1,%o4 mulscc %o4,%o1,%o4 mulscc %o4,%o1,%o4 mulscc %o4,%o1,%o4 mulscc %o4,%o1,%o4 mulscc %o4,%o1,%o4 mulscc %o4,%o1,%o4 mulscc %o4,%o1,%o4 mulscc %o4,%o1,%o4 mulscc %o4,%o1,%o4 mulscc %o4,%o1,%o4 mulscc %o4,%o1,%o4 mulscc %o4,%o1,%o4 mulscc %o4,%o1,%o4 mulscc %o4,%o1,%o4 mulscc %o4,%o1,%o4 mulscc %o4,%o1,%o4 ! 32nd iteration mulscc %o4,%o1,%o4 ! last iteration only shifts /* Correction for negative multiplier. Since we don't actually use the high order part the only reason for doing this is to get the overflow check right. */ tst %o0 rd %y,%o2 bge mls1 nop ! Delay slot sub %o4,%o1,%o4 mls1: add %o1,1,%o1 ! Restore o1 to original value. ! Now check for overflow, setting Z if no overflow addcc %o2,1,%o2 ! Set tag bit in result and test. bge mls2 cmp %o4,0 ! (DELAY SLOT) no overflow if = 0 cmp %o4,-1 ! no overflow if = -1 mls2: mov 1,%o4 ! clear o4 (which will be invalid). jmp %o7+8 clr %o7 ! ! Quicker version for small multipliers. mls3: mulscc %o4,%o1,%o4 ! First iteration of 13 mulscc %o4,%o1,%o4 mulscc %o4,%o1,%o4 mulscc %o4,%o1,%o4 mulscc %o4,%o1,%o4 mulscc %o4,%o1,%o4 mulscc %o4,%o1,%o4 mulscc %o4,%o1,%o4 mulscc %o4,%o1,%o4 mulscc %o4,%o1,%o4 mulscc %o4,%o1,%o4 mulscc %o4,%o1,%o4 ! 12th iteration mulscc %o4,%o1,%o4 ! last iteration only shifts ! rd %y,%o5 sll %o4,12,%o2 srl %o5,20,%o5 orcc %o5,%o2,%o2 add %o2,1,%o2 ! Set tag bit in result. mov UNIT,%o5 ! Clear o5 (invalid value). add %o1,1,%o1 ! Restore o1 to original value. ! Now check for overflow, setting Z if no overflow sra %o4,20,%o4 bge mls4 cmp %o4,0 cmp %o4,-1 mls4: mov UNIT,%o4 ! clear o4 (which will be invalid). jmp %o7+8 clr %o7 /* ! Synchronise the i-cache with the d-cache following a garbage collection ! Necessary on some machines, but not on others - it depends whether ! or not the hardware performs automatic synchronisation. I don't (yet) ! know how to find out what sort of machine we're running on, so ! (conservatively) assume we always have to flush the cache. ! SPF 18/12/95 ! The address to start the flush is on %o0, the length in bytes is in %o1 ! This routine corrupts %o0, %o1 and %o2. It doesn't matter if we flush ! too much, so we make the main loop execute 4 flush instructions to ! reduce the loop overhead. If extra "flush" instruction caused a problem, ! we would have to rewrite the loop initialisation code to be more careful. ! For multiprocessor v9 implementations, we should probably have some ! "membar" instructions in this routine (at the start). However, since v8 ! processors don't support this instruction, and since Poly/ML is designed ! to run in a single thread (on a single processor), I'm not going to do ! this. SPF 18/12/95 */ globldec(SparcAsmFlushInstructionCache) and %o0,0x7,%o2 andn %o0,0x7,%o0 ! align on double word add %o1,%o2,%o1 ! adjust byte-count to compensate fic1: subcc %o1,32,%o1 ! decrement byte-count flush %o0 flush %o0+8 flush %o0+16 flush %o0+24 bgt fic1 ! loop if byte-count is still positive add %o0,32,%o0 ! (DELAY SLOT) jmp %o7+8 ! return to caller nop !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! INLINE_ROUTINE(move_bytes) ! Move a segment of memory from one location to another. ! Must deal with the case of overlapping segments correctly. ! (source (o0), source_offset (o1), destination (o2), dest_offset (o3), length ([%g4])) srl %o1,TAGSHIFT,%i4 ! Remove tag on source offset srl %o3,TAGSHIFT,%i5 ! Remove tag on arg3 ld [%g4],%i3 ! length add %i4,%o0,%i4 ! source address srl %i3,TAGSHIFT,%i3 ! untagged length cmp %i3,0 be mvb3 add %i5,%o2,%i5 ! Use delay slot to calculate destination address cmp %i5,%i4 ! carry not set if dest >= source ! If dest >= src then use decrementing moves else ! use incrementing moves. bcs mvb2 nop sub %i4,1,%i4 sub %i5,1,%i5 ldub [%i4+%i3],%o0 ! get the first value before the loop mvb1: stb %o0,[%i5+%i3] subcc %i3,1,%i3 bne,a mvb1 ldub [%i4+%i3],%o0 ! use delay slot to load next value ba mvb3 nop mvb2: ldub [%i4],%o0 add %i4,1,%i4 ! incr source pointer stb %o0,[%i5] subcc %i3,1,%i3 bne mvb2 add %i5,1,%i5 ! use delay slot to increment dest ptr. mvb3: add %g4,4,%g4 ! pop the extra arg from the stack jmp %o7+6 mov UNIT,%o0 ! result of operation is unit RegMask(move_bytes,Mask_all) ! Should really be the union of the local and non-local cases INLINE_ROUTINE(move_words) CALL_IO(move_words_long_, POLY_SYS_move_words) RegMask(move_words,Mask_all) ! Word functions. These are all unsigned and do not raise Overflow INLINE_ROUTINE(mul_word) /* mul_signed works equally for signed or unsigned arithmetic if we're not interested in overflow. */ mov %o7,%i5 ! (DELAY SLOT) Save link reg call mul_signed nop mov %i5,%o7 ! (DELAY SLOT) Restore link jmp %o7+6 mov %o2,%o0 ! Get result. RegMask(mul_word,Mask_all) INLINE_ROUTINE(plus_word) sub %o1,1,%i5 ! Remove a tag jmp %o7+6 add %o0,%i5,%o0 ! Add the values RegMask(plus_word,M_O0|M_O4|M_O7) INLINE_ROUTINE(minus_word) sub %o1,1,%i5 ! Remove a tag jmp %o7+6 sub %o0,%i5,%o0 ! Subtract the untagged value. RegMask(minus_word,M_O0|M_O4|M_O7) ! Unsigned operations for word_div and word_rem CALL_IO(div_word, POLY_SYS_div_word) CALL_IO(mod_word, POLY_SYS_mod_word) ! Unsigned tests on words. TEST(word_geq,bcc) TEST(word_leq,bleu) TEST(word_gtr,bgu) TEST(word_lss,bcs) INLINE_ROUTINE(atomic_incr) ld MR_GLOBALLOCK,%i5 ! Load address of global lock ati1: ldstub [%i5],%i4 ! Load current value and set to 0xff cmp %i4,0 ! Was it previously locked? bne ati1 ! If yes, keep looping nop ld [%o0],%i4 ! First word of mutex add %i4,shiftup(1,TAGSHIFT),%i4 ! Add one st %i4,[%o0] ! Store in mutex mov %i4,%o0 ! Result to result reg mov 0,%i4 ! Set the lock to zero st %i4,[%i5] jmp %o7+6 nop RegMask (atomic_incr,M_O0|M_O4|M_O7) INLINE_ROUTINE(atomic_decr) ld MR_GLOBALLOCK,%i5 ! Load address of global lock atd1: ldstub [%i5],%i4 ! Load current value and set to 0xff cmp %i4,0 ! Was it previously locked? bne atd1 ! If yes, keep looping nop ld [%o0],%i4 ! First word of mutex sub %i4,shiftup(1,TAGSHIFT),%i4 ! Add one st %i4,[%o0] ! Store in mutex mov %i4,%o0 ! Result to result reg mov 0,%i4 ! Set the lock to zero st %i4,[%i5] jmp %o7+6 nop RegMask (atomic_decr,M_O0|M_O4|M_O7) INLINE_ROUTINE(thread_self) jmp %o7+6 ld MR_THREADID,%o0 ! (DELAY SLOT) Return thread id RegMask (thread_self,M_O0|M_O4|M_O7) /* Register mask vector. - extern int registerMaskVector[]; Each entry in this vector is a set of the registers modified by the function. It is an untagged bitmap with the registers encoded in the same way as in the code generator. Unused entries are set to Mask_all for safety in case a new entry is added to the iovector without also adding an entry here. */ globldec(registerMaskVector) .long Mask_all /* 0 is unused */ .long Mask_finish /* 1 */ .long Mask_all /* 2 - now unused */ .long Mask_all /* 3 is unused */ .long Mask_all /* 4 is unused */ .long Mask_all /* 5 is unused */ .long Mask_all /* 6 - now unused */ .long Mask_all /* 7 is unused */ .long Mask_all /* 8 is unused */ .long Mask_change_dir /* 9 */ .long Mask_all /* 10 is unused */ .long Mask_alloc_store /* 11 */ .long Mask_all /* 12 is unused */ .long Mask_all /* return = 13 */ .long Mask_all /* raisex = 14 */ .long Mask_get_length /* 15 */ .long Mask_all /* 16 is unused */ .long Mask_get_flags_ /* 17 */ .long Mask_all /* 18 - now unused */ .long Mask_all /* 19 - now unused */ .long Mask_all /* 20 - now unused */ .long Mask_all /* 21 is unused */ .long Mask_all /* 22 is unused */ .long Mask_str_compare /* 23 */ .long Mask_teststreq /* 24 */ .long Mask_teststrneq /* 25 */ .long Mask_teststrgtr /* 26 */ .long Mask_teststrlss /* 27 */ .long Mask_teststrgeq /* 28 */ .long Mask_teststrleq /* 29 */ .long Mask_exception_trace /* 30 */ .long Mask_all /* 31 */ .long Mask_all /* 32 - now unused */ .long Mask_all /* 33 - now unused */ .long Mask_all /* 34 - now unused */ .long Mask_all /* 35 - now unused */ .long Mask_all /* 36 - now unused */ .long Mask_all /* 37 is unused */ .long Mask_all /* 38 is unused */ .long Mask_all /* 39 is unused */ .long Mask_all /* 40 */ .long Mask_all /* 41 is unused */ .long Mask_all /* 42 */ .long Mask_all /* 43 */ .long Mask_all /* 44 - now unused */ .long Mask_all /* 45 - now unused */ .long Mask_all /* 46 - now unused */ .long Mask_lockseg /* 47 */ .long Mask_all /* nullorzero = 48 */ .long Mask_all /* 49 - now unused */ .long Mask_all /* 50 - now unused */ .long Mask_Net_dispatch_ /* 51 */ .long Mask_OS_spec_dispatch_ /* 52 */ .long Mask_all /* 53 - now unused */ .long Mask_all /* 54 - now unused */ .long Mask_all /* version_number = 55 */ .long Mask_all /* 56 is unused */ .long Mask_all /* 57 is unused */ .long Mask_all /* 58 is unused */ .long Mask_all /* 59 is unused */ .long Mask_all /* 60 is unused */ .long Mask_IO_dispatch_ /* 61 */ .long Mask_Sig_dispatch_ /* 62 */ .long Mask_all /* 63 is unused */ .long Mask_all /* 64 is unused */ .long Mask_all /* 65 is unused */ .long Mask_all /* 66 is unused */ .long Mask_all /* 67 is unused */ .long Mask_all /* 68 is unused */ .long Mask_all /* 69 is unused */ .long Mask_atomic_incr /* 70 */ .long Mask_atomic_decr /* 71 */ .long Mask_thread_self /* 72 */ .long Mask_thread_dispatch /* 73 */ .long Mask_all /* 74 is unused */ .long Mask_all /* 75 is unused */ .long Mask_all /* 76 is unused */ .long Mask_all /* 77 is unused */ .long Mask_all /* 78 is unused */ .long Mask_all /* 79 is unused */ .long Mask_all /* Mask_version_number_1 = 80 */ .long Mask_all /* 81 - now unused */ .long Mask_all /* 82 - now unused */ .long Mask_all /* 83 - now unused */ .long Mask_kill_self /* 84 */ .long Mask_all /* 85 - now unused */ .long Mask_all /* 86 - now unused */ .long Mask_all /* 87 - now unused */ .long Mask_profiler /* 88 */ .long Mask_all /* 89 is unused */ .long Mask_all /* 90 is unused */ .long Mask_all /* 91 is unused */ .long Mask_full_gc_ /* 92 */ .long Mask_stack_trace_ /* 93 */ .long Mask_timing_dispatch_ /* 94 */ .long Mask_all /* 95 is unused */ .long Mask_all /* 96 is unused */ .long Mask_all /* 97 is unused */ .long Mask_all /* 98 is unused */ .long Mask_objsize_ /* 99 */ .long Mask_showsize_ /* 100 */ .long Mask_all /* 101 is unused */ .long Mask_all /* 102 is unused */ .long Mask_all /* 103 - now unused */ .long Mask_all /* 104 is unused */ .long Mask_is_short /* 105 */ .long Mask_aplus /* 106 */ .long Mask_aminus /* 107 */ .long Mask_amul /* 108 */ .long Mask_adiv /* 109 */ .long Mask_amod /* 110 */ .long Mask_aneg /* 111 */ .long Mask_xora /* 112 */ .long Mask_equala /* 113 */ .long Mask_ora /* 114 */ .long Mask_anda /* 115 */ .long Mask_all /* version_number_3 = 116 */ .long Mask_Real_str /* 117 */ .long Mask_Real_geq /* 118 */ .long Mask_Real_leq /* 119 */ .long Mask_Real_gtr /* 120 */ .long Mask_Real_lss /* 121 */ .long Mask_Real_eq /* 122 */ .long Mask_Real_neq /* 123 */ .long Mask_Real_dispatch /* 124 */ .long Mask_Real_add /* 125 */ .long Mask_Real_sub /* 126 */ .long Mask_Real_mul /* 127 */ .long Mask_Real_div /* 128 */ .long Mask_all /* 129 is unused */ .long Mask_Real_neg /* 130 */ .long Mask_all /* 131 is unused */ .long Mask_Real_repr /* 132 */ .long Mask_Real_conv /* 133 */ .long Mask_Real_int /* 134 */ .long Mask_Real_float /* 135 */ .long Mask_Real_sqrt /* 136 */ .long Mask_Real_sin /* 137 */ .long Mask_Real_cos /* 138 */ .long Mask_Real_arctan /* 139 */ .long Mask_Real_exp /* 140 */ .long Mask_Real_ln /* 141 */ .long Mask_all /* 142 - now unused */ .long Mask_all /* 143 is unused */ .long Mask_all /* 144 is unused */ .long Mask_all /* 145 is unused */ .long Mask_all /* 146 is unused */ .long Mask_all /* 147 is unused */ .long Mask_all /* stdin = 148 */ .long Mask_all /* stdout= 149 */ .long Mask_process_env_dispatch_ /* 150 */ .long Mask_set_string_length /* 151 */ .long Mask_get_first_long_word /* 152 */ .long Mask_all /* 153 is unused */ .long Mask_all /* 154 is unused */ .long Mask_all /* 155 is unused */ .long Mask_all /* 156 is unused */ .long Mask_all /* 157 is unused */ .long Mask_all /* 158 is unused */ .long Mask_all /* 159 is unused */ .long Mask_all /* 160 is unused */ .long Mask_all /* 161 is unused */ .long Mask_all /* 162 is unused */ .long Mask_all /* 163 is unused */ .long Mask_all /* 164 is unused */ .long Mask_all /* 165 is unused */ .long Mask_all /* 166 is unused */ .long Mask_all /* 167 is unused */ .long Mask_all /* 168 is unused */ .long Mask_all /* 169 is unused */ .long Mask_all /* 170 is unused */ .long Mask_all /* 171 is unused */ .long Mask_all /* 172 is unused */ .long Mask_all /* 173 is unused */ .long Mask_all /* 174 is unused */ .long Mask_all /* 175 is unused */ .long Mask_all /* 176 is unused */ .long Mask_all /* 177 is unused */ .long Mask_all /* 178 is unused */ .long Mask_all /* 179 is unused */ .long Mask_all /* 180 is unused */ .long Mask_all /* 181 is unused */ .long Mask_all /* 182 is unused */ .long Mask_all /* 183 is unused */ .long Mask_all /* 184 is unused */ .long Mask_all /* 185 is unused */ .long Mask_all /* 186 is unused */ .long Mask_all /* 187 is unused */ .long Mask_all /* 188 is unused */ .long Mask_io_operation /* 189 */ .long Mask_all /* 190 is unused */ .long Mask_all /* 191 - now unused */ .long Mask_all /* 192 is unused */ .long Mask_all /* 193 is unused */ .long Mask_set_code_constant /* 194 */ .long Mask_move_words /* 195 */ .long Mask_shift_right_arith_word /* 196 */ .long Mask_int_to_word /* 197 */ .long Mask_move_bytes /* 198 */ .long Mask_all /* 199 now unused */ .long Mask_set_flags_ /* 200 */ .long Mask_shrink_stack_ /* 201 */ .long Mask_all /* stderr = 202 */ .long Mask_all /* 203 now unused */ .long Mask_callcode_tupled /* 204 */ .long Mask_foreign_dispatch_ /* 205 */ .long Mask_all /* 206 now unused */ .long Mask_all /* 207 is unused */ .long Mask_all /* 208 now unused */ .long Mask_XWindows_ /* 209 */ .long Mask_all /* 210 is unused */ .long Mask_all /* 211 is unused */ .long Mask_all /* 212 is unused */ .long Mask_is_big_endian /* 213 */ .long Mask_bytes_per_word /* 214 */ .long Mask_offset_address /* 215 */ .long Mask_shift_right_word /* 216 */ .long Mask_word_neq /* 217 */ .long Mask_not_bool /* 218 */ .long Mask_all /* 219 is unused */ .long Mask_all /* 220 is unused */ .long Mask_all /* 221 is unused */ .long Mask_all /* 222 is unused */ .long Mask_string_length /* 223 */ .long Mask_all /* 224 is unused */ .long Mask_all /* 225 is unused */ .long Mask_all /* 226 is unused */ .long Mask_all /* 227 is unused */ .long Mask_all /* 228 is unused */ .long Mask_int_eq /* 229 */ .long Mask_int_neq /* 230 */ .long Mask_int_geq /* 231 */ .long Mask_int_leq /* 232 */ .long Mask_int_gtr /* 233 */ .long Mask_int_lss /* 234 */ .long Mask_all /* 235 - now unused */ .long Mask_all /* 236 is unused */ .long Mask_all /* 237 is unused */ .long Mask_mul_word /* 238 */ .long Mask_plus_word /* 239 */ .long Mask_minus_word /* 240 */ .long Mask_div_word /* 241 */ .long Mask_or_word /* 242 */ .long Mask_and_word /* 243 */ .long Mask_xor_word /* 244 */ .long Mask_shift_left_word /* 245 */ .long Mask_mod_word /* 246 */ .long Mask_word_geq /* 247 */ .long Mask_word_leq /* 248 */ .long Mask_word_gtr /* 249 */ .long Mask_word_lss /* 250 */ .long Mask_word_eq /* 251 */ .long Mask_load_byte /* 252 */ .long Mask_load_word /* 253 */ .long Mask_assign_byte /* 254 */ .long Mask_assign_word /* 255 */ polyml.5.2.1/libpolyml/sparc_dep.cpp0000644000175000017500000016466110772160234016463 0ustar daviddavid/* Title: Sparc dependent code. Author: Dave Matthews, Cambridge University Computer Laboratory Copyright (c) 2000-7 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #ifdef HAVE_STDIO_H #include #endif #ifdef HAVE_SYS_TIME_H #include #endif #ifdef HAVE_SYS_FILE_H #include #endif #ifdef HAVE_STDLIB_H #include #endif #ifdef HAVE_SIGNAL_H #include #endif #ifdef HAVE_ASSERT_H #include #define ASSERT(x) assert(x) #else #define ASSERT(x) #endif #ifdef HAVE_SYS_ERRNO_H #include #endif #ifdef HAVE_UCONTEXT_H #include #endif #ifdef HAVE_STRING_H #include #endif #include "globals.h" #include "gc.h" #include "run_time.h" #include "mpoly.h" #include "arb.h" #include "diagnostics.h" #include "processes.h" #include "sys.h" #include "profiling.h" #include "sighandler.h" #include "machine_dep.h" #include "save_vec.h" #include "scanaddrs.h" #include "check_objects.h" #include "memmgr.h" // Values for the returnReason enum RETURN_REASON { RETURN_IO_CALL = 0, RETURN_IO_EXCEPTION }; /* Note: we've reserved a slot for %o6, but we're not allowed to change it since it's the C stack pointer, so we really only have 17 usable tagged registers. SPF 30/1/97. */ /* Location of these registers in taskData->stack->p_reg[] */ #define OFFSET_REGRESULT 2 /* regResult == argReg0 on SPARC */ #define OFFSET_ARGREG0 2 #define OFFSET_ARGREG1 3 #define OFFSET_ARGREG2 4 #define OFFSET_ARGREG3 5 #define OFFSET_REGCLOSURE 7 #define OFFSET_REGRETURN 9 /* slots 0 and 1 are used for %g1 and %g2 */ #define SAVERETURNOFFSET 2 /* The first instruction executed after native code returns is the saved return address + 6 */ #define RETURNOFFSET 6 #define HANDLEROFFSET 2 /* the amount of ML stack space to reserve for registers, C exception handling etc. The compiler requires us to reserve 2 stack-frames worth (2 * 20 words) plus whatever we require for the register save area. We actually reserve slightly more than this. SPF 3/3/97 */ #define CHECKED_REGS 18 #define UNCHECKED_REGS 3 #define EXTRA_STACK 0 #define OVERFLOW_STACK_SIZE \ (50 + \ sizeof(StackObject)/sizeof(PolyWord) + \ CHECKED_REGS + \ UNCHECKED_REGS + \ EXTRA_STACK) // %i0 points to this structure while in the ML code. The offsets // of some items, in particular raiseException, are bound into the // code and must not be changed. Other offsets are bound into the // assembly code. typedef struct _MemRegisters { int inRTS; /* This is set when taskData->stack->p_pc and taskData->stack->p_sp are set */ int requestCode; int returnReason; PolyWord *heapPointer; POLYUNSIGNED heapSpaceT; // The heap space = -maxint+space StackObject *polyStack; PolyWord *stackLimit; PolyWord *stackTop; // Used in "raisex" byte *raiseException; // Called to raise an exception byte *ioEntry; // Called to save the ML state and return to C. PolyObject *threadId; // Pointer to ML thread object. unsigned *globalLock; // Pointer to global lock. } MemRegisters; class SparcTaskData: public MDTaskData { public: SparcTaskData(): allocWords(0) { memRegisters.inRTS = 1; // We start off in the RTS. } POLYUNSIGNED allocWords; // The words to allocate. MemRegisters memRegisters; }; class SparcDependent: public MachineDependent { public: SparcDependent(): globalLock(0) {} // Create a task data object. virtual MDTaskData *CreateTaskData(void) { return new SparcTaskData(); } virtual void InitStackFrame(TaskData *taskData, Handle stack, Handle proc, Handle arg); virtual unsigned InitialStackSize(void) { return 128+OVERFLOW_STACK_SIZE; } // Initial size of a stack virtual int SwitchToPoly(TaskData *taskData); virtual void SetForRetry(TaskData *taskData, int ioCall); virtual void InitInterfaceVector(void); virtual void SetException(TaskData *taskData, poly_exn *exc); virtual void ResetSignals(void); virtual void ScanConstantsWithinCode(PolyObject *addr, PolyObject *oldAddr, POLYUNSIGNED length, ScanAddress *process); virtual void InterruptCode(TaskData *taskData); virtual int GetIOFunctionRegisterMask(int ioCall); virtual bool GetPCandSPFromContext(TaskData *taskData, SIGNALCONTEXT *context, PolyWord *&sp, POLYCODEPTR &pc); virtual void CallIO0(TaskData *taskData, Handle(*ioFun)(TaskData *)); virtual void CallIO1(TaskData *taskData, Handle(*ioFun)(TaskData *, Handle)); virtual void CallIO2(TaskData *taskData, Handle(*ioFun)(TaskData *, Handle, Handle)); virtual void CallIO3(TaskData *taskData, Handle(*ioFun)(TaskData *, Handle, Handle, Handle)); virtual void CallIO4(TaskData *taskData, Handle(*ioFun)(TaskData *, Handle, Handle, Handle, Handle)); virtual void CallIO5(TaskData *taskData, Handle(*ioFun)(TaskData *, Handle, Handle, Handle, Handle, Handle)); virtual Handle CallBackResult(TaskData *taskData); virtual void SetExceptionTrace(TaskData *taskData); virtual void CallCodeTupled(TaskData *taskData); virtual Architectures MachineArchitecture(void) { return MA_Sparc; } virtual void SetCodeConstant(TaskData *taskData, Handle data, Handle constant, Handle offseth, Handle base); virtual void FlushInstructionCache(void *p, POLYUNSIGNED bytes); // Increment or decrement the first word of the object pointed to by the // mutex argument and return the new value. virtual Handle AtomicIncrement(TaskData *taskData, Handle mutexp); virtual Handle AtomicDecrement(TaskData *taskData, Handle mutexp); private: bool TrapHandle(TaskData *taskData); void StartIOCall(TaskData *taskData); void SetMemRegisters(TaskData *taskData); Handle BuildCodeSegment(TaskData *taskData, const unsigned *code, unsigned codeWords, char functionName); Handle BuildKillSelfCode(TaskData *taskData); unsigned globalLock; // This is used in atomic increment and decrement. }; #define VERSION_NUMBER POLY_version_number extern "C" { extern int finisha(); extern int install_roota(); extern int strconcata(); extern int change_dira(); extern int str_comparea(); extern int teststreq(); extern int teststrneq(); extern int teststrgtr(); extern int teststrlss(); extern int teststrgeq(); extern int teststrleq(); extern int locksega(); extern int profilera(); extern int add_long(); extern int sub_long(); extern int mult_long(); extern int div_longa(); extern int rem_longa(); extern int neg_long(); extern int or_long(); extern int and_long(); extern int xor_long(); extern int equal_long(); extern int Real_stra(); extern int Real_geqa(); extern int Real_leqa(); extern int Real_gtra(); extern int Real_lssa(); extern int Real_eqa(); extern int Real_neqa(); extern int Real_dispatcha(); extern int Real_adda(); extern int Real_suba(); extern int Real_mula(); extern int Real_diva(); extern int Real_nega(); extern int Real_repra(); extern int Real_conva(); extern int Real_inta(); extern int Real_floata(); extern int Real_sqrta(); extern int Real_sina(); extern int Real_cosa(); extern int Real_arctana(); extern int Real_expa(); extern int Real_lna(); extern int io_operationa(); extern int shift_right_word(); extern int word_neq(); extern int not_bool(); extern int string_length(); extern int int_eq(); extern int int_neq(); extern int int_geq(); extern int int_leq(); extern int int_gtr(); extern int int_lss(); extern int string_suba(); extern int or_word(); extern int and_word(); extern int xor_word(); extern int shift_left_word(); extern int word_eq(); extern int load_byte(); extern int load_word(); extern int assign_byte(); extern int assign_word(); extern int atomic_incr(); extern int atomic_decr(); extern int thread_self(); extern int thread_dispatcha(); extern int kill_selfa(); extern int alloc_store(); extern int get_length_a(); extern int get_flags_a(); extern int set_flags_a(); extern int int_to_word(); extern int set_code_constanta(); extern int move_bytes(); extern int move_words(); extern int shift_right_arith_word(); extern int raisex(); extern int exception_tracea(); extern int offset_address(); extern int is_shorta(); extern int is_big_endian(); extern int bytes_per_word(); extern int mul_word(); extern int plus_word(); extern int minus_word(); extern int div_worda(); extern int mod_worda(); extern int word_geq(); extern int word_leq(); extern int word_gtr(); extern int word_lss(); extern int objsize_a(); extern int showsize_a(); extern int timing_dispatch_a(); extern int XWindows_a(); /* MJC 27/09/90 */ extern int full_gc_a(); /* MJC 18/03/91 */ extern int stack_trace_a(); /* MJC 18/03/91 */ extern int foreign_dispatch_a(); /* NIC 22/04/94 */ extern int callcode_tupleda(); /* SPF 07/07/94 - for ML version of compiler */ extern int process_env_dispatch_a(); /* DCJM 25/4/00 */ extern int set_string_length_a(); /* DCJM 28/2/01 */ extern int get_first_long_word_a(); /* DCJM 28/2/01 */ extern int shrink_stack_a(); /* SPF 1/12/96 */ extern int IO_dispatch_a(); /* DCJM 8/5/00 */ extern int Net_dispatch_a(); /* DCJM 22/5/00 */ extern int OS_spec_dispatch_a(); /* DCJM 22/5/00 */ extern int Sig_dispatch_a(); /* DCJM 18/7/00 */ extern int poly_dispatch_a(); extern void SparcAsmSwitchToPoly(MemRegisters *); extern int SparcAsmSaveStateAndReturn(void); extern void SparcAsmFlushInstructionCache(void *p, POLYUNSIGNED bytes); }; void SparcDependent::InitStackFrame(TaskData *taskData, Handle stackh, Handle proc, Handle arg) /* Initialise stack frame. */ { /* This code is pretty tricky. (1) We pretend that the function we want to call is actually an RTS entry that has been interrupted, so that it gets called via the RTS call retry mechanism. (2) We have to ensure that if the function returns or is interrupted, it gets into the kill_self code. (3) This is the last exception handler on the stack, so we make it point at itself. */ unsigned i; StackObject *stack = (StackObject *)DEREFWORDHANDLE(stackh); POLYUNSIGNED stack_size = stack->Length(); stack->p_space = OVERFLOW_STACK_SIZE; stack->p_pc = PC_RETRY_SPECIAL; /* As if we had called MD_set_for_retry. */ stack->p_nreg = CHECKED_REGS; stack->p_sp = (PolyWord*)stack + stack_size - 3; stack->p_hr = stack->p_sp; /* Reset all registers since this may be an old stack frame */ for (i = 0; i < CHECKED_REGS; i++) stack->p_reg[i] = TAGGED(0); // Set the default handler and return address to point to this code. // We have to offset the addresses by two bytes because the code to enter and a handler // or return from a function always subtracts two. Handle killCode = BuildKillSelfCode(taskData); PolyWord killJump = PolyWord::FromUnsigned(killCode->Word().AsUnsigned() | HANDLEROFFSET); stack = (StackObject *)DEREFWORDHANDLE(stackh); // In case it's moved stack->p_reg[OFFSET_REGCLOSURE] = DEREFWORD(proc); /* Set regClosureto the closure address. */ stack->p_reg[CHECKED_REGS] = PolyWord::FromUnsigned(UNCHECKED_REGS); // If this function takes an argument store it in the argument register. If it doesn't // we've set argReg0 to TAGGED(0) already. if (arg != 0) stack->p_reg[OFFSET_ARGREG0] = DEREFWORD(arg); /* Since they're unchecked, they don't need to be initialised, but set them to 0 anyway. */ for (i = 0; i < UNCHECKED_REGS; i++) stack->p_reg[CHECKED_REGS+1+i] = PolyWord::FromUnsigned(0); /* Set up exception handler group - there's no previous handler so point "previous handler" pointer at itself.*/ stack->Set(stack_size-1, PolyWord::FromStackAddr(stack->Offset(stack_size-1))); stack->Set(stack_size-2, killJump); stack->Set(stack_size-3, TAGGED(0)); /* Default handler. */ // Return address into %o7 plus 2 bytes. A return will always add 6 to the value. stack->p_reg[OFFSET_REGRETURN] = killJump; } bool SparcDependent::GetPCandSPFromContext(TaskData *taskData, SIGNALCONTEXT *context, PolyWord *&sp, POLYCODEPTR &pc) { SparcTaskData *mdTask = (SparcTaskData*)taskData->mdTaskData; if (mdTask->memRegisters.inRTS) { sp = taskData->stack->p_sp; pc = taskData->stack->p_pc; return true; } else /* in poly code or assembly code */ { /* NB Poly/ML uses register g4 as the stack pointer, C appears to use o6. */ sp = (PolyWord *)context->uc_mcontext.gregs[REG_G4]; pc = (byte *)context->uc_mcontext.gregs[REG_PC]; return true; } } void SparcDependent::InterruptCode(TaskData *taskData) { SparcTaskData *mdTask = (SparcTaskData*)taskData->mdTaskData; if (taskData->stack != 0) mdTask->memRegisters.stackLimit = taskData->stack->Offset(taskData->stack->Length()-1); } // These are just for debugging. They record the last point before // the memory was checked. byte *lastPC; int lastRequest, lastReason; PolyWord *lastBase; int SparcDependent::SwitchToPoly(TaskData *taskData) /* (Re)-enter the Poly code from C. */ { SparcTaskData *mdTask = (SparcTaskData*)taskData->mdTaskData; Handle mark = taskData->saveVec.mark(); while (1) { taskData->saveVec.reset(mark); // Remove old data e.g. from arbitrary precision. CheckMemory(); // Do any memory checking. // Remember the position after the last time we checked // the memory. lastPC = taskData->stack->p_pc; lastRequest = mdTask->memRegisters.requestCode; lastReason = mdTask->memRegisters.returnReason; lastBase = taskData->allocPointer; SetMemRegisters(taskData); SparcAsmSwitchToPoly(&mdTask->memRegisters); // Load registers. Returns as a result of an RTS call. taskData->allocPointer = mdTask->memRegisters.heapPointer - 1; // Get updated limit pointer. mdTask->allocWords = 0; // Always zero except if this is a memory trap. switch (mdTask->memRegisters.returnReason) { case RETURN_IO_CALL: // The ML code wants an IO call. return mdTask->memRegisters.requestCode; case RETURN_IO_EXCEPTION: try { // We have had a trap of some sort if (TrapHandle(taskData)) return -1; // Safe to process interrupts. } catch (IOException) { // We may get an exception while handling this if we run out of store } } } } void SparcDependent::SetMemRegisters(TaskData *taskData) { SparcTaskData *mdTask = (SparcTaskData*)taskData->mdTaskData; mdTask->memRegisters.requestCode = 0; mdTask->memRegisters.returnReason = RETURN_IO_CALL; // If we haven't yet set the allocation area or we don't have enough we need // to create one (or a new one). if (taskData->allocPointer <= taskData->allocLimit + mdTask->allocWords || (userOptions.debug & DEBUG_FORCEGC)) { if (taskData->allocPointer < taskData->allocLimit) Crash ("Bad length in heap overflow trap"); // Find some space to allocate in. Updates taskData->allocPointer and // returns a pointer to the newly allocated space (if allocWords != 0) (void)processes->FindAllocationSpace(taskData, mdTask->allocWords, true); } else if (mdTask->allocWords != 0) // May just be store profiling. taskData->allocPointer -= mdTask->allocWords; mdTask->memRegisters.polyStack = taskData->stack; mdTask->memRegisters.stackTop = taskData->stack->Offset(taskData->stack->Length()); // Set the raiseException entry to point to the assembly code. mdTask->memRegisters.raiseException = (byte*)raisex; // Entry point to save the state for an IO call. This is the common entry // point for all the return and IO-call cases. mdTask->memRegisters.ioEntry = (byte*)SparcAsmSaveStateAndReturn; // If we have run out of store, either just above or while allocating in the RTS, // allocPointer and allocLimit will have been set to zero as part of the GC. We will // now be raising an exception which may free some store but we need to come back here // before we allocate anything. To avoid a problem when testing allocPointer and // allocLimit below we need to make sure that the values are still non-negative // after substracting any object size. if (taskData->allocPointer == 0) taskData->allocPointer += MAX_OBJECT_SIZE; if (taskData->allocLimit == 0) taskData->allocLimit += MAX_OBJECT_SIZE; // Set up heap pointers. mdTask->memRegisters.heapPointer = taskData->allocPointer+1; // This points beyond the length word // The Sparc version sets %g5 to be -maxint + space. Each time an object is allocated // the size is deducted from this until eventually the space is exhausted. At that // point the subtraction results in an overflow which traps. if (profileMode == kProfileStoreAllocation || (userOptions.debug & DEBUG_REGION_CHECK)) mdTask->memRegisters.heapSpaceT = 0x80000000; else mdTask->memRegisters.heapSpaceT = ((char*)taskData->allocPointer-(char*)taskData->allocLimit) | 0x80000000; mdTask->memRegisters.stackLimit = taskData->stack->Offset(taskData->stack->p_space); mdTask->memRegisters.threadId = taskData->threadObject; mdTask->memRegisters.globalLock = &globalLock; if (taskData->stack->p_pc == PC_RETRY_SPECIAL) // We need to retry the call. The entry point should be the // first word of the closure which is in %o4. taskData->stack->p_pc = taskData->stack->p_reg[OFFSET_REGCLOSURE].AsObjPtr()->Get(0).AsCodePtr(); } // Called as part of the call of an IO function. void SparcDependent::StartIOCall(TaskData *taskData) { // Set the return address to be the contents of the return register // after skipping the CALL instruction and delay slot. // This is a real return address which is safe for the p_pc field but // not allowed to remain in a register field. We have to OR in the // return offset there. Because this may be a retry we may already // have been here before so we use OR rather than ADD. POLYUNSIGNED returnAddr = taskData->stack->p_reg[OFFSET_REGRETURN].AsUnsigned(); returnAddr |= SAVERETURNOFFSET; // Make it a valid code address. taskData->stack->p_reg[OFFSET_REGRETURN] = PolyWord::FromUnsigned(returnAddr); taskData->stack->p_pc = (byte*)(returnAddr + RETURNOFFSET); } // IO Functions called indirectly from assembly code. void SparcDependent::CallIO0(TaskData *taskData, Handle (*ioFun)(TaskData *)) { StartIOCall(taskData); try { Handle result = (*ioFun)(taskData); taskData->stack->p_reg[OFFSET_REGRESULT] = result->Word(); } catch (IOException exc) { switch (exc.m_reason) { case EXC_EXCEPTION: return; case EXC_RETRY: return; } } } void SparcDependent::CallIO1(TaskData *taskData, Handle (*ioFun)(TaskData *, Handle)) { StartIOCall(taskData); Handle saved1 = taskData->saveVec.push(taskData->stack->p_reg[OFFSET_ARGREG0]); try { Handle result = (*ioFun)(taskData, saved1); taskData->stack->p_reg[OFFSET_REGRESULT] = result->Word(); } catch (IOException exc) { switch (exc.m_reason) { case EXC_EXCEPTION: return; case EXC_RETRY: return; } } } void SparcDependent::CallIO2(TaskData *taskData, Handle (*ioFun)(TaskData *, Handle, Handle)) { StartIOCall(taskData); Handle saved1 = taskData->saveVec.push(taskData->stack->p_reg[OFFSET_ARGREG0]); Handle saved2 = taskData->saveVec.push(taskData->stack->p_reg[OFFSET_ARGREG1]); try { Handle result = (*ioFun)(taskData, saved2, saved1); taskData->stack->p_reg[OFFSET_REGRESULT] = result->Word(); } catch (IOException exc) { switch (exc.m_reason) { case EXC_EXCEPTION: return; case EXC_RETRY: return; } } } void SparcDependent::CallIO3(TaskData *taskData, Handle (*ioFun)(TaskData *, Handle, Handle, Handle)) { StartIOCall(taskData); Handle saved1 = taskData->saveVec.push(taskData->stack->p_reg[OFFSET_ARGREG0]); Handle saved2 = taskData->saveVec.push(taskData->stack->p_reg[OFFSET_ARGREG1]); Handle saved3 = taskData->saveVec.push(taskData->stack->p_reg[OFFSET_ARGREG2]); try { Handle result = (*ioFun)(taskData, saved3, saved2, saved1); taskData->stack->p_reg[OFFSET_REGRESULT] = result->Word(); } catch (IOException exc) { switch (exc.m_reason) { case EXC_EXCEPTION: return; case EXC_RETRY: return; } } } // The only function with four arguments is SetCodeConstant. void SparcDependent::CallIO4(TaskData *taskData, Handle (*ioFun)(TaskData *, Handle, Handle, Handle, Handle)) { StartIOCall(taskData); Handle saved1 = taskData->saveVec.push(taskData->stack->p_reg[OFFSET_ARGREG0]); Handle saved2 = taskData->saveVec.push(taskData->stack->p_reg[OFFSET_ARGREG1]); Handle saved3 = taskData->saveVec.push(taskData->stack->p_reg[OFFSET_ARGREG2]); Handle saved4 = taskData->saveVec.push(taskData->stack->p_reg[OFFSET_ARGREG3]); try { Handle result = (*ioFun)(taskData, saved4, saved3, saved2, saved1); taskData->stack->p_reg[OFFSET_REGRESULT] = result->Word(); } catch (IOException exc) { switch (exc.m_reason) { case EXC_EXCEPTION: return; case EXC_RETRY: return; } } } // The only functions with 5 args are move_bytes/word_long void SparcDependent::CallIO5(TaskData *taskData, Handle (*ioFun)(TaskData *, Handle, Handle, Handle, Handle, Handle)) { StartIOCall(taskData); Handle saved1 = taskData->saveVec.push(taskData->stack->p_reg[OFFSET_ARGREG0]); Handle saved2 = taskData->saveVec.push(taskData->stack->p_reg[OFFSET_ARGREG1]); Handle saved3 = taskData->saveVec.push(taskData->stack->p_reg[OFFSET_ARGREG2]); Handle saved4 = taskData->saveVec.push(taskData->stack->p_reg[OFFSET_ARGREG3]); Handle saved5 = taskData->saveVec.push(taskData->stack->p_sp[0]); try { Handle result = (*ioFun)(taskData, saved5, saved4, saved3, saved2, saved1); taskData->stack->p_reg[OFFSET_REGRESULT] = result->Word(); taskData->stack->p_sp++; // Pop the final argument now we're returning. } catch (IOException exc) { switch (exc.m_reason) { case EXC_EXCEPTION: return; case EXC_RETRY: return; } } } // Return the callback result. The current ML process (thread) terminates. Handle SparcDependent::CallBackResult(TaskData *taskData) { return taskData->saveVec.push(taskData->stack->p_reg[OFFSET_ARGREG0]); // Argument to return is in %o0. } void SparcDependent::SetForRetry(TaskData *taskData, int ioCall) { taskData->stack->p_pc = PC_RETRY_SPECIAL; /* This value is treated specially. */ } // Call a piece of compiled code. Note: this doesn't come via CallIO1 // so StartIOCall has not been called. void SparcDependent::CallCodeTupled(TaskData *taskData) { // The eventual return address is in %o7 - leave it there // but call StartIOCall to make sure it's tagged before any possible G.C. StartIOCall(taskData); PolyObject *argTuple = taskData->stack->p_reg[OFFSET_ARGREG0].AsObjPtr(); Handle closure = taskData->saveVec.push(argTuple->Get(0)); Handle argvec = taskData->saveVec.push(argTuple->Get(1)); if (! IS_INT(DEREFWORD(argvec))) // May be nil if there are no args. { PolyObject *argv = DEREFHANDLE(argvec); POLYUNSIGNED argCount = argv->Length(); if (argCount > 4) { // Check we have space for the arguments. This may result in a GC which // in turn may throw a C++ exception. try { CheckAndGrowStack(taskData, taskData->stack->p_sp - (argCount - 4)); } catch (IOException exc) { ASSERT(exc.m_reason == EXC_EXCEPTION); // This should be the only one return; // Will have been set up to raise an exception. } } // First argument is in %o0 taskData->stack->p_reg[OFFSET_ARGREG0] = argv->Get(0); // Second arg, if there is one, goes into %o1 etc. if (argCount > 1) taskData->stack->p_reg[OFFSET_ARGREG1] = argv->Get(1); if (argCount > 2) taskData->stack->p_reg[OFFSET_ARGREG2] = argv->Get(2); if (argCount > 3) taskData->stack->p_reg[OFFSET_ARGREG3] = argv->Get(3); // Remaining args go on the stack. for (POLYUNSIGNED i = 4; i < argCount; i++) *(--taskData->stack->p_sp) = argv->Get(i+2); } // The closure goes into the closure reg. taskData->stack->p_reg[OFFSET_REGCLOSURE] = DEREFWORD(closure); // First word of closure is entry point. taskData->stack->p_pc = DEREFHANDLE(closure)->Get(0).AsCodePtr(); // pc points to the start of the code } // This code is executed if the function returns without raising an exception. Because // the normal function return sequence jumps to %o7+6 we have to have two nops at the start. static unsigned setExceptionCode[] = { 0x01000000, // nop 0x01000000, // nop 0xde01200c, // ld [%g4+12],%o7 ! Get original return addr 0xc6012008, // ld [%g4+8],%g3 ! Restore previous handler 0x81c3e006, // jmp %o7+6 0x88012010 // add %g4,16,%g4 ! Pop these from stack DELAY SLOT }; // Set up a special handler that will trace any uncaught exception within a function. void SparcDependent::SetExceptionTrace(TaskData *taskData) { // Save the return address for when we've called the function. This will // be popped by the special "return" code we'll set up. *(--taskData->stack->p_sp) = PolyWord::FromUnsigned(taskData->stack->p_reg[OFFSET_REGRETURN].AsUnsigned() | SAVERETURNOFFSET); *(--taskData->stack->p_sp) = PolyWord::FromStackAddr(taskData->stack->p_hr); // Save previous handler. *(--taskData->stack->p_sp) = TAGGED(0); // Push special handler address. *(--taskData->stack->p_sp) = TAGGED(0); // Push "catch all" exception id. taskData->stack->p_hr = taskData->stack->p_sp; // This is the new handler. Handle fun = taskData->saveVec.push(taskData->stack->p_reg[OFFSET_ARGREG0]); // Argument - function to call and trace taskData->stack->p_reg[OFFSET_REGCLOSURE] = DEREFWORD(fun); // Closure register must contain the closure taskData->stack->p_pc = DEREFHANDLE(fun)->Get(0).AsCodePtr(); // pc points to the start of the code Handle retCode = BuildCodeSegment(taskData, setExceptionCode, sizeof(setExceptionCode)/sizeof(unsigned), 'R'); // Set %o7 so that if the traced function returns normally (i.e. without raising an // exception) it will enter the "return" code which will remove this handler. taskData->stack->p_reg[OFFSET_REGRETURN] = PolyWord::FromUnsigned(retCode->Word().AsUnsigned() | SAVERETURNOFFSET); taskData->stack->p_reg[OFFSET_ARGREG0] = TAGGED(0); // Give the function we're calling a unit argument. } // In Solaris the trap instructions result in SIGSEGVs. static void catchSEGV(SIG_HANDLER_ARGS(s, context)) { assert(s == SIGSEGV); assert(context != NULL); SIGNALCONTEXT *cntxt = (SIGNALCONTEXT *)context; TaskData *taskData = processes->GetTaskDataForThread(); if (taskData == 0) { signal(SIGSEGV,SIG_DFL); return; } SparcTaskData *mdTask = (SparcTaskData*)taskData->mdTaskData; if (mdTask->memRegisters.inRTS) { signal(SIGSEGV,SIG_DFL); return; } /* NOW, we are in the run-time system */ mdTask->memRegisters.inRTS = 1; mdTask->memRegisters.returnReason = RETURN_IO_EXCEPTION; /* This piece of code is extremely messy. It has to get the state when the interrupt occured by unwinding the stack. It can then save the registers and call ``translate''. */ taskData->stack->p_pc = (byte*)cntxt->uc_mcontext.gregs[REG_PC]; /* Save trapping pc. */ cntxt->uc_mcontext.gregs[REG_PC] = (int)&SparcAsmSaveStateAndReturn; /* Restart in trap_handler. */ cntxt->uc_mcontext.gregs[REG_nPC] = cntxt->uc_mcontext.gregs[REG_PC] + 4; } /******************************************************************************/ /* */ /* catchILL - utility function */ /* */ /******************************************************************************/ static void catchILL(SIG_HANDLER_ARGS(s, context)) { assert(s == SIGILL); assert(context != NULL); #ifdef SOLARIS SIGNALCONTEXT *cntxt = (SIGNALCONTEXT *)context; #else // Linux sigcontext *cntxt = (sigcontext*)context; #endif TaskData *taskData = processes->GetTaskDataForThread(); if (taskData == 0) { signal(SIGILL,SIG_DFL); return; } SparcTaskData *mdTask = (SparcTaskData*)taskData->mdTaskData; /* Shouldn't get stack overflow in run-time system */ if (mdTask->memRegisters.inRTS) { { /* use standard SYSV calls */ sigset_t mask; assert(sigemptyset(&mask) == 0); assert(sigaddset(&mask,SIGILL) == 0); assert(sigprocmask(SIG_UNBLOCK,&mask,NULL) == 0); } if (gc_phase != 0) printf("\nStack overflow in the garbage collector.\n"); else printf("\nStack overflow in the runtime system.\n"); printf("You may need to increase your stack limit and try again.\n"); fflush(stdout); exit(1); /*NOTREACHED*/ } /* NOW, we are in the run-time system */ mdTask->memRegisters.inRTS = 1; mdTask->memRegisters.returnReason = RETURN_IO_EXCEPTION; /* This piece of code is extremely messy. It has to get the state when the interrupt occured by unwinding the stack. It can then save the registers and call ``translate''. */ #ifdef SOLARIS taskData->stack->p_pc = (byte*)cntxt->uc_mcontext.gregs[REG_PC]; /* Save trapping pc. */ cntxt->uc_mcontext.gregs[REG_PC] = (int)&SparcAsmSaveStateAndReturn; /* Restart in trap_handler. */ cntxt->uc_mcontext.gregs[REG_nPC] = cntxt->uc_mcontext.gregs[REG_PC] + 4; #else taskData->stack->p_pc = (byte*)cntxt->si_regs.pc; cntxt->si_regs.pc = (int)&SparcAsmSaveStateAndReturn; /* Restart in trap_handler. */ cntxt->si_regs.npc = cntxt->si_regs.pc + 4; #endif /* "returns" to MD_trap_handler */ } /******************************************************************************/ /* */ /* catchEMT - utility function */ /* */ /******************************************************************************/ static void catchEMT(SIG_HANDLER_ARGS(s, context)) { assert(s == SIGEMT); assert(context != NULL); #ifdef SOLARIS SIGNALCONTEXT *cntxt = (SIGNALCONTEXT *)context; #else // Linux sigcontext *cntxt = (sigcontext*)context; #endif TaskData *taskData = processes->GetTaskDataForThread(); if (taskData == 0) { signal(SIGEMT,SIG_DFL); return; } SparcTaskData *mdTask = (SparcTaskData*)taskData->mdTaskData; /* shouldn't get SIGEMT from run-time system, */ /* so reinstall default handler and return for retry, */ /* which should lead to core dump. */ if (mdTask->memRegisters.inRTS) { signal(SIGEMT,SIG_DFL); return; } /* NOW, we are in the run-time system */ mdTask->memRegisters.inRTS = 1; mdTask->memRegisters.returnReason = RETURN_IO_EXCEPTION; /* This piece of code is extremely messy. It has to get the state when the interrupt occured by unwinding the stack. It can then save the registers and call ``translate''. */ #ifdef SOLARIS taskData->stack->p_pc = (byte*)cntxt->uc_mcontext.gregs[REG_PC]; /* Save trapping pc. */ cntxt->uc_mcontext.gregs[REG_PC] = (int)&SparcAsmSaveStateAndReturn; /* Restart in trap_handler. */ cntxt->uc_mcontext.gregs[REG_nPC] = cntxt->uc_mcontext.gregs[REG_PC] + 4; #else taskData->stack->p_pc = (byte*)cntxt->si_regs.pc; cntxt->si_regs.pc = (int)&SparcAsmSaveStateAndReturn; /* Restart in trap_handler. */ cntxt->si_regs.npc = cntxt->si_regs.pc + 4; #endif /* "returns" to MD_trap_handler */ } /* end of Solaris2 signal handling */ static PolyWord zero = PolyWord::FromUnsigned(0); /******************************************************************************/ /* */ /* get_reg - utility function */ /* */ /******************************************************************************/ static PolyWord *get_reg(TaskData *taskData, int rno) /* Returns a pointer to the register given by the 5 bit value rno. */ { if (8 <= rno && rno <= 23) /* %o0 - %l7 */ return &taskData->stack->p_reg[rno-6]; else switch (rno) { case 0: /* %g0 */ return &zero; case 1: /* %g1 */ return &taskData->stack->p_reg[0]; case 2: /* %g2 */ return &taskData->stack->p_reg[1]; /* These last two are used as unchecked work registers. */ case 28: /* %i4 */ return &taskData->stack->p_reg[CHECKED_REGS+1]; case 29: /* %i5 */ return &taskData->stack->p_reg[CHECKED_REGS+2]; case 3: /* %g3 (hr) */ return (PolyWord*)&taskData->stack->p_hr; case 4: /* %g4 (sp) */ return (PolyWord*)&taskData->stack->p_sp; default: Crash("Unknown register %d at %x\n", rno, (int)(taskData->stack->p_pc)); /*NOTREACHED*/ } } #define ALIGNED(p) ((p.AsUnsigned() & (sizeof(PolyWord)-1)) == 0) // In many case we will have subtracted one from the argument and need to add it back. // If this was a short integer that will retag it but if it was actually long // it will turn it back into an address. inline PolyWord AddOne(PolyWord p) { return PolyWord::FromUnsigned(p.AsUnsigned() + 1); } // The reverse operation to put the result back. inline PolyWord SubOne(PolyWord p) { return PolyWord::FromUnsigned(p.AsUnsigned() - 1); } static void emulate_trap(TaskData *taskData, POLYUNSIGNED instr) /* Emulate a taddcctv or tsubcctv instruction. */ /* One or both of the arguments may be i4 or i5. These registers are saved by the trap handler but are not preserved by the garbage collector. */ { unsigned rd = (instr >> 25) & 31; /* Destination register. */ Handle arg1 = taskData->saveVec.push(AddOne(*(get_reg(taskData, (instr >> 14) & 31)))); Handle arg2; if (instr & 0x2000) { /* Immediate - the argument is the value in the instruction with the bottom tag bit set. */ if (instr & 0x1000) arg2 = taskData->saveVec.push(PolyWord::FromSigned(-((POLYSIGNED)instr & 0xfff) + 1)); else arg2 = taskData->saveVec.push(PolyWord::FromUnsigned((instr & 0xfff) + 1)); } else arg2 = taskData->saveVec.push(AddOne(*(get_reg(taskData, instr & 31)))); if (rd == 0) /* g0 */ { /* If we are putting the result into g0 it must be because we are interested in the condition code. We do a comparison rather than a subtraction. */ int r = compareLong(taskData, arg2, arg1); // Put the result of the comparison in the condition code field. We compare // this with zero in MD_switch_to_poly to actually set the codes. taskData->stack->p_reg[CHECKED_REGS+3] = PolyWord::FromUnsigned(r); } else if ((instr & 0x2000) == 0) { /* We have to be careful here. Multiplication is done by repeated addition using values in i4 and i5. They are assumed to have had 1 subtracted from them, but if we have a garbage collection while doing the long-precision operation they may be left pointing in the wrong place. We save the values +1 on the save vec so they will be updated if they are addresses, and put them back just before putting in the result. */ Handle i4v = taskData->saveVec.push(AddOne(taskData->stack->p_reg[CHECKED_REGS+1])); Handle i5v = taskData->saveVec.push(AddOne(taskData->stack->p_reg[CHECKED_REGS+2])); Handle res; if (instr & 0x80000) res = sub_longc(taskData, arg2, arg1); else res = add_longc(taskData, arg2, arg1); /* Put back the values into i4 and i5, and then put in the result (into either i4 or i5). */ taskData->stack->p_reg[CHECKED_REGS+1] = SubOne(i4v->Word()); taskData->stack->p_reg[CHECKED_REGS+2] = SubOne(i5v->Word()); *(get_reg(taskData, rd)) = SubOne(res->Word()); } else { /* Adding or subtracting a constant - can't be doing a multiplication and we must not save i4 or i5 because only one of them is being used in this operation and the other may contain anything. */ Handle res; if (instr & 0x80000) res = sub_longc(taskData, arg2, arg1); else res = add_longc(taskData, arg2, arg1); /* Subtract 1 from the result (we will add it back in the next instr), and put it in the destination register. */ *(get_reg(taskData, rd)) = SubOne(res->Word()); } } bool SparcDependent::TrapHandle(TaskData *taskData) /* Called from MD_trap_handler after registers have been saved in taskData->stack. */ { SparcTaskData *mdTask = (SparcTaskData*)taskData->mdTaskData; mdTask->memRegisters.inRTS = 1; POLYUNSIGNED instr = *(POLYUNSIGNED*)taskData->stack->p_pc; /* instruction that trapped. */ /* Trap instructions can be as a result of stack or heap overflow, or may be caused by arithmetic overflows when using tagged numbers. Various different traps are in use. tlu 24 (previously tlu 16) occurs as a result of stack overflow. tsubcctv %g5,?,%g5 occurs as a result of storage allocation. taddcctv and tsubcctv occur as a result of arithmetic overflow. */ /* Skip over the trap instruction. */ taskData->stack->p_pc += 4; if (instr == 0x8bd02010 || instr == 0x8bd02018) /* tlu 24 is stack overflow */ { /* Check the size of the stack and expand if necessary. */ /* We need to examine the previous instruction */ /* in order to work out the required amount of space. */ instr = *(POLYUNSIGNED*)(taskData->stack->p_pc-8); /* get previous instruction */ if (instr == 0x80a1001b) /* cmp %g4, %i3 is normal stack check */ CheckAndGrowStack(taskData, taskData->stack->p_sp); /* may allocate */ else if (instr == 0x80a7401b) /* cmp %i5, %i3 is large stack check */ CheckAndGrowStack(taskData, taskData->stack->p_reg[CHECKED_REGS+2].AsStackAddr()); else Crash ("Bad stack check sequence"); /* may allocate */ // Now handle any interrupts. return true; } else if ((instr & 0xfffff000) == 0x8b196000 /* tsubcctv %g5,len,%g5 */ || (instr & 0xffffe01f) == 0x8b19401d /* tsubcctv %g5,%i5,%g5 */) { POLYUNSIGNED len; if (instr & 0x00002000) // Immediate data len = instr & 0xfff; else // In i5. len = taskData->stack->p_reg[CHECKED_REGS+2].AsUnsigned(); len = len / sizeof(PolyWord); /* printf ("Trap:0x%08x = tsubcctv %%g5,%d,%%g5\n",instr,len); */ if (profileMode == kProfileStoreAllocation) add_count(taskData, taskData->stack->p_pc, taskData->stack->p_sp, len); else if (taskData->allocPointer >= taskData->allocLimit && ! (userOptions.debug & DEBUG_REGION_CHECK)) Crash ("Spurious %%g5 trap"); if (taskData->allocPointer < taskData->allocLimit) { taskData->allocPointer += len; if (taskData->allocPointer < taskData->allocLimit) Crash ("Bad length in %%g5 trap"); mdTask->allocWords = len; // Actually allocate it in SetMemRegisters. } } else if ((instr & 0xc1f00000) == 0x81100000 /* tsubcctv or taddcctv */) { if (profileMode == kProfileEmulation) add_count(taskData, taskData->stack->p_pc, taskData->stack->p_sp, 1); emulate_trap(taskData, instr); } else Crash("Bad trap pc=%p, instr=%08x",taskData->stack->p_pc-4,instr); return false; } static void add_function_to_io_area(int x, int (*y)()) { add_word_to_io_area(x, PolyWord::FromUnsigned((POLYUNSIGNED)y)); } void SparcDependent::InitInterfaceVector(void) { add_function_to_io_area(POLY_SYS_exit, &finisha); add_function_to_io_area(POLY_SYS_alloc_store, &alloc_store); add_function_to_io_area(POLY_SYS_chdir, &change_dira); add_function_to_io_area(POLY_SYS_get_length, &get_length_a); add_function_to_io_area(POLY_SYS_get_flags, &get_flags_a); add_function_to_io_area(POLY_SYS_str_compare, &str_comparea); add_function_to_io_area(POLY_SYS_teststreq, &teststreq); add_function_to_io_area(POLY_SYS_teststrneq, &teststrneq); add_function_to_io_area(POLY_SYS_teststrgtr, &teststrgtr); add_function_to_io_area(POLY_SYS_teststrlss, &teststrlss); add_function_to_io_area(POLY_SYS_teststrgeq, &teststrgeq); add_function_to_io_area(POLY_SYS_teststrleq, &teststrleq); add_function_to_io_area(POLY_SYS_exception_trace, &exception_tracea); add_function_to_io_area(POLY_SYS_lockseg, &locksega); add_function_to_io_area(POLY_SYS_profiler, &profilera); add_function_to_io_area(POLY_SYS_is_short, &is_shorta); add_function_to_io_area(POLY_SYS_aplus, &add_long); add_function_to_io_area(POLY_SYS_aminus, &sub_long); add_function_to_io_area(POLY_SYS_amul, &mult_long); add_function_to_io_area(POLY_SYS_adiv, &div_longa); add_function_to_io_area(POLY_SYS_amod, &rem_longa); add_function_to_io_area(POLY_SYS_aneg, &neg_long); add_function_to_io_area(POLY_SYS_equala, &equal_long); add_function_to_io_area(POLY_SYS_ora, &or_long); add_function_to_io_area(POLY_SYS_anda, &and_long); add_function_to_io_area(POLY_SYS_xora, &xor_long); add_function_to_io_area(POLY_SYS_Real_str, &Real_stra); add_function_to_io_area(POLY_SYS_Real_geq, &Real_geqa); add_function_to_io_area(POLY_SYS_Real_leq, &Real_leqa); add_function_to_io_area(POLY_SYS_Real_gtr, &Real_gtra); add_function_to_io_area(POLY_SYS_Real_lss, &Real_lssa); add_function_to_io_area(POLY_SYS_Real_eq, &Real_eqa); add_function_to_io_area(POLY_SYS_Real_neq, &Real_neqa); add_function_to_io_area(POLY_SYS_Real_Dispatch, &Real_dispatcha); add_function_to_io_area(POLY_SYS_Add_real, &Real_adda); add_function_to_io_area(POLY_SYS_Sub_real, &Real_suba); add_function_to_io_area(POLY_SYS_Mul_real, &Real_mula); add_function_to_io_area(POLY_SYS_Div_real, &Real_diva); add_function_to_io_area(POLY_SYS_Neg_real, &Real_nega); add_function_to_io_area(POLY_SYS_Repr_real, &Real_repra); add_function_to_io_area(POLY_SYS_conv_real, &Real_conva); add_function_to_io_area(POLY_SYS_real_to_int, &Real_inta); add_function_to_io_area(POLY_SYS_int_to_real, &Real_floata); add_function_to_io_area(POLY_SYS_sqrt_real, &Real_sqrta); add_function_to_io_area(POLY_SYS_sin_real, &Real_sina); add_function_to_io_area(POLY_SYS_cos_real, &Real_cosa); add_function_to_io_area(POLY_SYS_arctan_real, &Real_arctana); add_function_to_io_area(POLY_SYS_exp_real, &Real_expa); add_function_to_io_area(POLY_SYS_ln_real, &Real_lna); add_function_to_io_area(POLY_SYS_io_operation, &io_operationa); add_function_to_io_area(POLY_SYS_atomic_incr, &atomic_incr); add_function_to_io_area(POLY_SYS_atomic_decr, &atomic_decr); add_function_to_io_area(POLY_SYS_thread_self, &thread_self); add_function_to_io_area(POLY_SYS_thread_dispatch, &thread_dispatcha); add_function_to_io_area(POLY_SYS_offset_address, &offset_address); add_function_to_io_area(POLY_SYS_shift_right_word, &shift_right_word); add_function_to_io_area(POLY_SYS_word_neq, &word_neq); add_function_to_io_area(POLY_SYS_not_bool, ¬_bool); add_function_to_io_area(POLY_SYS_string_length, &string_length); add_function_to_io_area(POLY_SYS_int_eq, &int_eq); add_function_to_io_area(POLY_SYS_int_neq, &int_neq); add_function_to_io_area(POLY_SYS_int_geq, &int_geq); add_function_to_io_area(POLY_SYS_int_leq, &int_leq); add_function_to_io_area(POLY_SYS_int_gtr, &int_gtr); add_function_to_io_area(POLY_SYS_int_lss, &int_lss); add_function_to_io_area(POLY_SYS_or_word, &or_word); add_function_to_io_area(POLY_SYS_and_word, &and_word); add_function_to_io_area(POLY_SYS_xor_word, &xor_word); add_function_to_io_area(POLY_SYS_shift_left_word, &shift_left_word); add_function_to_io_area(POLY_SYS_word_eq, &word_eq); add_function_to_io_area(POLY_SYS_load_byte, &load_byte); add_function_to_io_area(POLY_SYS_load_word, &load_word); add_function_to_io_area(POLY_SYS_is_big_endian, &is_big_endian); add_function_to_io_area(POLY_SYS_bytes_per_word, &bytes_per_word); add_function_to_io_area(POLY_SYS_assign_byte, &assign_byte); add_function_to_io_area(POLY_SYS_assign_word, &assign_word); add_function_to_io_area(POLY_SYS_objsize, & objsize_a ); /* MJC 27/04/88 */ add_function_to_io_area(POLY_SYS_showsize,& showsize_a); /* MJC 09/03/89 */ add_function_to_io_area(POLY_SYS_timing_dispatch, & timing_dispatch_a); /* DCJM 10/4/00 */ add_function_to_io_area(POLY_SYS_XWindows,& XWindows_a); /* MJC 27/09/90 */ add_function_to_io_area(POLY_SYS_full_gc, & full_gc_a); /* MJC 18/03/91 */ add_function_to_io_area(POLY_SYS_stack_trace, & stack_trace_a); /* MJC 18/03/91 */ add_function_to_io_area(POLY_SYS_foreign_dispatch, &foreign_dispatch_a); /* NIC 22/04/94 */ add_function_to_io_area(POLY_SYS_callcode_tupled, &callcode_tupleda); /* SPF 07/07/94 */ add_function_to_io_area(POLY_SYS_process_env, &process_env_dispatch_a); /* DCJM 25/4/00 */ add_function_to_io_area(POLY_SYS_set_string_length, &set_string_length_a); /* DCJM 28/2/01 */ add_function_to_io_area(POLY_SYS_get_first_long_word, &get_first_long_word_a); /* DCJM 28/2/01 */ add_function_to_io_area(POLY_SYS_shrink_stack, &shrink_stack_a); /* SPF 9/12/96 */ add_function_to_io_area(POLY_SYS_code_flags, &set_flags_a); /* SPF 12/02/97 */ add_function_to_io_area(POLY_SYS_shift_right_arith_word, &shift_right_arith_word); /* DCJM 10/10/99 */ add_function_to_io_area(POLY_SYS_int_to_word, &int_to_word); /* DCJM 10/10/99 */ add_function_to_io_area(POLY_SYS_set_code_constant,&set_code_constanta); /* DCJM 2/1/01 */ add_function_to_io_area(POLY_SYS_move_bytes, &move_bytes); /* DCJM 10/10/99 */ add_function_to_io_area(POLY_SYS_move_words, &move_words); /* DCJM 10/10/99 */ add_function_to_io_area(POLY_SYS_mul_word, &mul_word); /* DCJM 10/10/99 */ add_function_to_io_area(POLY_SYS_plus_word, &plus_word); /* DCJM 10/10/99 */ add_function_to_io_area(POLY_SYS_minus_word, &minus_word); /* DCJM 10/10/99 */ add_function_to_io_area(POLY_SYS_div_word, &div_worda); /* DCJM 10/10/99 */ add_function_to_io_area(POLY_SYS_mod_word, &mod_worda); /* DCJM 10/10/99 */ add_function_to_io_area(POLY_SYS_word_geq, &word_geq); add_function_to_io_area(POLY_SYS_word_leq, &word_leq); add_function_to_io_area(POLY_SYS_word_gtr, &word_gtr); add_function_to_io_area(POLY_SYS_word_lss, &word_lss); add_function_to_io_area(POLY_SYS_io_dispatch, &IO_dispatch_a); /* DCJM 8/5/00 */ add_function_to_io_area(POLY_SYS_network, &Net_dispatch_a); /* DCJM 8/5/00 */ add_function_to_io_area(POLY_SYS_os_specific, &OS_spec_dispatch_a); /* DCJM 8/5/00 */ add_function_to_io_area(POLY_SYS_signal_handler, &Sig_dispatch_a); /* DCJM 18/7/00 */ add_function_to_io_area(POLY_SYS_poly_specific, &poly_dispatch_a); /* DCJM 17/6/06 */ // This is now a "closure" like all the other entries. add_function_to_io_area(POLY_SYS_raisex, raisex); // Set up the signal handlers. { /* Solaris 2 */ struct sigaction catchvec; /* disable all interrupts while we are in the interupt handler */ sigfillset(&catchvec.sa_mask); catchvec.sa_flags = SA_ONSTACK | SA_SIGINFO | SA_RESTART; catchvec.sa_sigaction = catchEMT; assert(sigaction(SIGEMT, &catchvec, 0) == 0); markSignalInuse(SIGEMT); sigfillset(&catchvec.sa_mask); catchvec.sa_flags = SA_ONSTACK | SA_SIGINFO | SA_RESTART; catchvec.sa_sigaction = catchILL; assert(sigaction(SIGILL, &catchvec, 0) == 0); markSignalInuse(SIGILL); /* SIGSEGV seems to be generated by the trap instructions in Solaris. */ sigemptyset(&catchvec.sa_mask); catchvec.sa_flags = SA_ONSTACK | SA_SIGINFO; catchvec.sa_sigaction = catchSEGV; assert(sigaction(SIGSEGV, &catchvec, 0) == 0); markSignalInuse(SIGSEGV); } } // Build an ML code segment on the heap to hold a copy of a piece of code Handle SparcDependent::BuildCodeSegment(TaskData *taskData, const unsigned *code, unsigned codeWords, char functionName) { POLYUNSIGNED words = codeWords + 6; Handle codeHandle = alloc_and_save(taskData, words, F_CODE_OBJ); byte *cp = codeHandle->Word().AsCodePtr(); memcpy(cp, code, codeWords*sizeof(PolyWord)); codeHandle->WordP()->Set(codeWords++, PolyWord::FromUnsigned(0)); // Marker word codeHandle->WordP()->Set(codeWords, PolyWord::FromUnsigned(codeWords*sizeof(PolyWord))); // Bytes to the start codeWords++; codeHandle->WordP()->Set(codeWords++, PolyWord::FromUnsigned(0)); // Profile count codeHandle->WordP()->Set(codeWords++, TAGGED(functionName)); // Name of function - single character codeHandle->WordP()->Set(codeWords++, TAGGED(0)); // Register set codeHandle->WordP()->Set(codeWords++, PolyWord::FromUnsigned(2)); // Number of constants FlushInstructionCache(cp, codeWords*sizeof(PolyWord)); return codeHandle; } // Generate a code sequence to enter the RTS with a request to kill // the current process (thread). This is slightly different to the normal // RTS call sequence because it is entered as though some previous code had // RETURNED to it. That's why we need two nops at the start and don't adjust // %o7. static unsigned killSelfCode[] = { 0x01000000, // nop 0x01000000, // nop 0xf8062024, // ld [36+%i0].%i4 0xb6102054, // mov POLY_SYS_kill_self,%i3 0x81c70000, // jmp %i4 0xf6262004 // st %i3,[%i0+4] ! DELAY SLOT }; // We need the kill-self code in a little function. Handle SparcDependent::BuildKillSelfCode(TaskData *taskData) { return BuildCodeSegment(taskData, killSelfCode, sizeof(killSelfCode)/sizeof(unsigned), 'K'); } void SparcDependent::SetException(TaskData *taskData, poly_exn *exc) /* Set up the stack of a process to raise an exception. */ { taskData->stack->p_reg[OFFSET_REGCLOSURE] = (PolyObject*)IoEntry(POLY_SYS_raisex); taskData->stack->p_pc = PC_RETRY_SPECIAL; taskData->stack->p_reg[OFFSET_REGRESULT] = exc; } /******************************************************************************/ /* */ /* MD_reset_signals - called by run_time.c */ /* */ /******************************************************************************/ void SparcDependent::ResetSignals(void) { /* restore default signal handling in child process after a "fork". */ signal(SIGFPE, SIG_DFL); signal(SIGEMT, SIG_DFL); signal(SIGILL, SIG_DFL); /* "just in case" */ signal(SIGBUS, SIG_DFL); signal(SIGSEGV, SIG_DFL); } void SparcDependent::ScanConstantsWithinCode(PolyObject *addr, PolyObject *old, POLYUNSIGNED length, ScanAddress *process) { PolyWord *pt = (PolyWord*)addr; PolyWord *end; POLYUNSIGNED unused; /* Find the end of the code (before the constants). */ addr->GetConstSegmentForCode(length, end, unused); end -= 3; assert(end->AsUnsigned() == 0); /* This should be the marker PolyWord. */ while (pt != end) { POLYUNSIGNED instr = (*pt).AsUnsigned(); if ((instr & 0xc1c00000) == 0x01000000) /* sethi instr. */ { unsigned reg = (instr >> 25) & 31; // If the register is %i3, %i4 or %i5 the value is an integer even // if it is untagged. If it's %g0 this is simply a nop. if (reg < 27 && reg != 0) { /* Next must be an ADD instruction. */ assert((pt[1].AsUnsigned() & 0xc1f83000) == 0x80002000); /* Process this address. */ process->ScanConstant((byte*)pt, PROCESS_RELOC_SPARCDUAL); pt++; // Skip the second word. } } else if ((instr & 0xc0000000) == 0x40000000) /* Call instr. */ { POLYSIGNED disp = instr & 0x3fffffff; // Word displacement. // We're assuming here that multiplying by 4 will turn an unsigned value into a signed. PolyWord *absAddr = pt + disp; // Ignore it if it's local to this code seg. if (! (absAddr >= (PolyWord*)addr && absAddr < end)) { /* The old value of the displacement was relative to the old address. */ absAddr = absAddr - (PolyWord*)addr + (PolyWord*)old; // We have to correct the displacement for the new location and store // that away before we call ScanConstant. POLYSIGNED newDisp = absAddr - pt; *pt = PolyWord::FromUnsigned((newDisp & 0x3fffffff) | 0x40000000); process->ScanConstant((byte*)pt, PROCESS_RELOC_SPARCRELATIVE); } } pt++; } } /* Store a constant at a specific address in the code. This is used by the code generator. It needs to be built into the RTS because we have to split the value in order to store it into two instructions. Separately the two values might well be invalid addresses. */ void SparcDependent::SetCodeConstant(TaskData *taskData, Handle data, Handle constant, Handle offseth, Handle base) { /* The offset is a byte count. */ unsigned offset = get_C_ulong(taskData, DEREFWORD(offseth)); POLYUNSIGNED *pointer = (POLYUNSIGNED*)(DEREFWORD(base).AsCodePtr() + offset); assert((offset & 3) == 0); if (pointer[0] == 0x40000000) /* Call instruction. */ { POLYUNSIGNED *c = (POLYUNSIGNED*)(DEREFWORD(constant).AsCodePtr()); int disp = c - pointer; /* Signed displacement in words. */ pointer[0] = (disp & 0x3fffffff) | 0x40000000; } else { POLYUNSIGNED c = DEREFWORD(constant).AsUnsigned(); // N.B. This may well really be an address. unsigned hi = c >> 10, lo = c & 0x3ff; /* The first PolyWord must be SETHI. */ assert((pointer[0] & 0xc1ffffff) == 0x01000000); /* and the next must be ADD. The immediate value must currently be tagged(0). */ assert((pointer[1] & 0xc1f83fff) == 0x80002001); pointer[0] |= hi; pointer[1] = (pointer[1] & 0xfffff000) | lo; } } // We have assembly code versions of atomic increment and decrement and it's // important that if we use the same method of locking a mutex whether it's // done in the assembly code or the RTS. // Increment the value contained in the first word of the mutex. Handle SparcDependent::AtomicIncrement(TaskData *taskData, Handle mutexp) { PolyObject *p = DEREFHANDLE(mutexp); unsigned *gLock = &globalLock; __asm__ __volatile__ ( "1: ldstub [%0],%%l0\n" // Load the value in globalLock and set it to 0xff " cmp %%l0,0\n" // If the value was already 0xff try again " bne 1b\n" " nop\n" : // No output :"r"(gLock) // %0 - Input - Address of globalLock : "%l0", "cc", "memory" // Modifies l0, cc and memory ); PolyWord result = PolyWord::FromUnsigned(p->Get(0).AsUnsigned() + (1<Set(0, result); globalLock = 0; // Release the lock return taskData->saveVec.push(result); } // Decrement the value contained in the first word of the mutex. Handle SparcDependent::AtomicDecrement(TaskData *taskData, Handle mutexp) { PolyObject *p = DEREFHANDLE(mutexp); unsigned *gLock = &globalLock; __asm__ __volatile__ ( "1: ldstub [%0],%%l0\n" // Load the value in globalLock and set it to 0xff " cmp %%l0,0\n" // If the value was already 0xff try again " bne 1b\n" " nop\n" : // No output :"r"(gLock) // %0 - Input - Address of globalLock : "%l0", "cc", "memory" // Modifies l0, cc and memory ); PolyWord result = PolyWord::FromUnsigned(p->Get(0).AsUnsigned() - (1<Set(0, result); globalLock = 0; // Release the lock return taskData->saveVec.push(result); } void SparcDependent::FlushInstructionCache(void *p, POLYUNSIGNED bytes) { SparcAsmFlushInstructionCache(p, bytes); } extern "C" int registerMaskVector[]; int SparcDependent::GetIOFunctionRegisterMask(int ioCall) { return registerMaskVector[ioCall]; } static SparcDependent sparcDependent; MachineDependent *machineDependent = &sparcDependent; polyml.5.2.1/libpolyml/sys.h0000644000175000017500000002152610700752455015001 0ustar daviddavid/* Title: sys.h Copyright (c) 2000-7 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ /* This file is included in some of the assembly code files so it must only contain preprocessor directives and not C code. */ #ifndef _SYS_H #define _SYS_H /********************************************************************* * * Entries in the IO area. * *********************************************************************/ #define POLY_SYS_exit 1 #define POLY_SYS_chdir 9 #define POLY_SYS_alloc_store 11 #define POLY_SYS_raisex 14 /* This is now used only by SetException. */ #define POLY_SYS_get_length 15 #define POLY_SYS_get_flags 17 #define POLY_SYS_str_compare 23 /* DCJM 21/3/06 */ #define POLY_SYS_teststreq 24 #define POLY_SYS_teststrneq 25 #define POLY_SYS_teststrgtr 26 #define POLY_SYS_teststrlss 27 #define POLY_SYS_teststrgeq 28 #define POLY_SYS_teststrleq 29 #define POLY_SYS_exception_trace 30 #define POLY_SYS_give_ex_trace 31 /* Called from exception unwind code. */ #define POLY_SYS_lockseg 47 #define POLY_SYS_emptystring 48 #define POLY_SYS_nullvector 49 #define POLY_SYS_network 51 /* DCJM 22/5/00 */ #define POLY_SYS_os_specific 52 /* DCJM 22/5/00 */ #define POLY_SYS_io_dispatch 61 /* DCJM 8/5/00 */ #define POLY_SYS_signal_handler 62 /* DCJM 18/7/00 */ #define POLY_SYS_atomic_incr 70 /* DCJM 12/3/07 */ #define POLY_SYS_atomic_decr 71 /* DCJM 12/3/07 */ #define POLY_SYS_thread_self 72 /* DCJM 12/3/07 */ #define POLY_SYS_thread_dispatch 73 /* DCJM 12/3/07 */ //#define POLY_SYS_fork_process 82 //#define POLY_SYS_choice_process 83 #define POLY_SYS_kill_self 84 //#define POLY_SYS_int_process 85 //#define POLY_SYS_send_on_channel 86 //#define POLY_SYS_receive_on_channel 87 #define POLY_SYS_profiler 88 #define POLY_SYS_full_gc 92 /* MJC 18/03/91 */ #define POLY_SYS_stack_trace 93 /* MJC 18/03/91 */ #define POLY_SYS_timing_dispatch 94 /* DCJM 10/4/00 */ #define POLY_SYS_objsize 99 /* MJC 27/04/88 */ #define POLY_SYS_showsize 100 /* MJC 09/03/89 */ //#define POLY_SYS_interrupt_console_processes 103 /* MJC 01/08/90 */ #define POLY_SYS_is_short 105 #define POLY_SYS_aplus 106 #define POLY_SYS_aminus 107 #define POLY_SYS_amul 108 #define POLY_SYS_adiv 109 #define POLY_SYS_amod 110 #define POLY_SYS_aneg 111 #define POLY_SYS_xora 112 /* DCJM 21/6/00 */ #define POLY_SYS_equala 113 #define POLY_SYS_ora 114 /* DCJM 21/6/00 */ #define POLY_SYS_anda 115 /* DCJM 21/6/00 */ #define POLY_SYS_Real_str 117 /* DCJM 6/4/00 */ #define POLY_SYS_Real_geq 118 /* DCJM 28/3/00 */ #define POLY_SYS_Real_leq 119 /* DCJM 28/3/00 */ #define POLY_SYS_Real_gtr 120 /* DCJM 28/3/00 */ #define POLY_SYS_Real_lss 121 /* DCJM 28/3/00 */ #define POLY_SYS_Real_eq 122 /* DCJM 28/3/00 */ #define POLY_SYS_Real_neq 123 /* DCJM 28/3/00 */ #define POLY_SYS_Real_Dispatch 124 /* DCJM 25/3/00 */ #define POLY_SYS_Add_real 125 #define POLY_SYS_Sub_real 126 #define POLY_SYS_Mul_real 127 #define POLY_SYS_Div_real 128 #define POLY_SYS_Neg_real 130 #define POLY_SYS_Repr_real 132 #define POLY_SYS_conv_real 133 #define POLY_SYS_real_to_int 134 #define POLY_SYS_int_to_real 135 #define POLY_SYS_sqrt_real 136 #define POLY_SYS_sin_real 137 #define POLY_SYS_cos_real 138 #define POLY_SYS_arctan_real 139 #define POLY_SYS_exp_real 140 #define POLY_SYS_ln_real 141 #define POLY_SYS_stdin 148 #define POLY_SYS_stdout 149 #define POLY_SYS_process_env 150 /* DCJM 25/4/00 */ #define POLY_SYS_set_string_length 151 /* DCJM 28/2/01 */ #define POLY_SYS_get_first_long_word 152 /* DCJM 28/2/01 */ #define POLY_SYS_poly_specific 153 /* DCJM 17/6/06 */ #define POLY_SYS_io_operation 189 #define POLY_SYS_set_code_constant 194 /* DCJM 2/1/01 */ #define POLY_SYS_move_words 195 /* DCJM 9/10/99 */ #define POLY_SYS_shift_right_arith_word 196 /* DCJM 9/10/99 */ #define POLY_SYS_int_to_word 197 /* DCJM 9/10/99 */ /* Obsolete: Now replaced by POLY_SYS_get_first_long_word. */ #define POLY_SYS_move_bytes 198 /* DCJM 9/10/99 */ #define POLY_SYS_code_flags 200 /* Previously POLY_SYS_set_flags */ #define POLY_SYS_shrink_stack 201 /* SPF 9/12/96 */ #define POLY_SYS_stderr 202 /* SPF 29/11/96 */ #define POLY_SYS_callcode_tupled 204 /* SPF 07/07/94 */ #define POLY_SYS_foreign_dispatch 205 /* NIC 22/04/94 */ #define POLY_SYS_XWindows 209 /* MJC 27/09/90 */ #define POLY_SYS_is_big_endian 213 /* added 30/3/95 (DCJM) */ #define POLY_SYS_bytes_per_word 214 /* added 30/3/95 (DCJM) */ #define POLY_SYS_offset_address 215 #define POLY_SYS_shift_right_word 216 #define POLY_SYS_word_neq 217 #define POLY_SYS_not_bool 218 #define POLY_SYS_string_length 223 #define POLY_SYS_int_eq 229 #define POLY_SYS_int_neq 230 #define POLY_SYS_int_geq 231 #define POLY_SYS_int_leq 232 #define POLY_SYS_int_gtr 233 #define POLY_SYS_int_lss 234 #define POLY_SYS_mul_word 238 /* Reinstated DCJM 9/10/99 */ #define POLY_SYS_plus_word 239 /* Reinstated DCJM 9/10/99 */ #define POLY_SYS_minus_word 240 /* Reinstated DCJM 9/10/99 */ #define POLY_SYS_div_word 241 /* Reinstated DCJM 9/10/99 */ #define POLY_SYS_or_word 242 #define POLY_SYS_and_word 243 #define POLY_SYS_xor_word 244 #define POLY_SYS_shift_left_word 245 #define POLY_SYS_mod_word 246 /* Reinstated DCJM 9/10/99 */ #define POLY_SYS_word_geq 247 /* Reinstated DCJM 9/10/99 */ #define POLY_SYS_word_leq 248 /* Reinstated DCJM 9/10/99 */ #define POLY_SYS_word_gtr 249 /* Reinstated DCJM 9/10/99 */ #define POLY_SYS_word_lss 250 /* Reinstated DCJM 9/10/99 */ #define POLY_SYS_word_eq 251 #define POLY_SYS_load_byte 252 #define POLY_SYS_load_word 253 #define POLY_SYS_assign_byte 254 #define POLY_SYS_assign_word 255 /********************************************************************* * * The number of entries in the IO area. * *********************************************************************/ #define POLY_SYS_vecsize 256 /****************************************************************** * * Exception identifiers * ******************************************************************/ #define EXC_interrupt 1 /* SML90.Interrupt */ #define EXC_syserr 2 /* System call failed. */ /* EXC_size (formerly EXC_range) is raised in a number of places, most particularly in alloc_store when given a length which is too large. As "Size" it is used extensively in the Basis library. */ #define EXC_size 4 /* General.Size */ #define EXC_overflow 5 /* General.Overflow */ #define EXC_underflow 6 /* This does not correspond to any ML exception. */ #define EXC_divide 7 /* General.Div */ #define EXC_conversion 8 /* EXC_conversion is used within the compiler and by conversion routines added by the compiler in order to signal failure of conversion. */ #define EXC_XWindows 10 /* EXC_subscript is raised both by the string subscript function and also by substring. As "Subscript" it is used extensively in the Basis library. */ #define EXC_subscript 11 /* General.Subscript */ #define EXC_thread 12 /* Thread.Thread. */ /* DCJM 13/3/07 */ #define EXC_foreign 23 /* nic 4/5/94 */ #define EXC_Fail 103 /* DCJM 11/5/06 */ // Make sure to add any additional exceptions to make_exn. #endif polyml.5.2.1/libpolyml/timing.cpp0000644000175000017500000003623210672471771016014 0ustar daviddavid/* Title: Time functions. Author: Dave Matthews, Cambridge University Computer Laboratory Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifdef WIN32 #include "winconfig.h" #else #include "config.h" #endif #ifdef HAVE_STDLIB_H #include #endif #ifdef HAVE_LOCALE_H #include #endif #ifdef HAVE_SYS_PARAM_H #include #endif #ifdef HAVE_TIME_H #include #endif #ifdef HAVE_SYS_TIMES_H #include #endif #ifdef HAVE_SYS_TIME_H #include #endif #ifdef HAVE_SYS_RESOURCE_H #include #endif #ifdef HAVE_SYS_TYPES_H #include #endif #ifdef HAVE_SYS_STAT_H #include #endif #ifdef HAVE_SYS_SIGNAL_H #include #endif #ifdef HAVE_ERRNO_H #include #endif #ifdef HAVE_UNISTD_H #include #endif #ifdef HAVE_STRING_H #include #endif #ifdef HAVE_LIMITS_H #include #endif #ifdef HAVE_ASSERT_H #include #endif /************************************************************************ * * Include runtime headers * ************************************************************************/ #include "proper_io.h" #include "globals.h" #include "mpoly.h" #include "arb.h" #include "machine_dep.h" #include "run_time.h" #include "sys.h" #include "timing.h" #include "polystring.h" #include "save_vec.h" #include "rts_module.h" #include "processes.h" #ifdef WINDOWS_PC /* Windows file times are 64-bit numbers representing times in tenths of a microsecond. */ #define TICKS_PER_MICROSECOND 10 #ifdef __GNUC__ #define SECSSINCE1601 11644473600LL #else #define SECSSINCE1601 11644473600 #endif #else /* For Unix return times in microseconds. */ #define TICKS_PER_MICROSECOND 1 #endif /* The original Poly timing functions used a variety of timing bases (e.g. seconds, tenths of a second). The old functions have been retained but the intention is to phase them out in favour of new functions. Most of these are handled through the timing_dispatch function. The intention behind the timing functions is to make use of the arbitrary precision arithmetic to allow for a wider range of dates than the usual mktime range of 1970 to 2036. We also want to handle more accurate timing than per second or per microsecond where the operating system provides it. */ #ifdef WINDOWS_PC static FILETIME startTime; static LARGE_INTEGER gcUTime, gcSTime; #else static struct timeval startTime; static struct timeval gcUTime, gcSTime; /* Functions to add and subtract times. */ static void addTimes(struct timeval *result, struct timeval *x); static void subTimes(struct timeval *result, struct timeval *x); #endif Handle timing_dispatch_c(TaskData *taskData, Handle args, Handle code) { int c = get_C_long(taskData, DEREFWORDHANDLE(code)); switch (c) { case 0: /* Get ticks per microsecond. */ return Make_arbitrary_precision(taskData, TICKS_PER_MICROSECOND); case 1: /* Return time since the time base. */ { #ifdef WINDOWS_PC FILETIME ft; GetSystemTimeAsFileTime(&ft); return Make_arb_from_pair(taskData, ft.dwHighDateTime, ft.dwLowDateTime); #else struct timeval tv; if (gettimeofday(&tv, NULL) != 0) raise_syscall(taskData, "gettimeofday failed", errno); return Make_arb_from_pair_scaled(taskData, tv.tv_sec, tv.tv_usec, 1000000); #endif } case 2: /* Return the base year. This is the year which corresponds to zero in the timing sequence. */ #ifdef WINDOWS_PC return Make_arbitrary_precision(taskData, 1601); #else return Make_arbitrary_precision(taskData, 1970); #endif case 3: /* In both Windows and Unix the time base is 1st of January in the base year. This function is provided just in case we are running on a system with a different base. It returns the number of seconds after 1st January of the base year that corresponds to zero of the time base. */ return Make_arbitrary_precision(taskData, 0); case 4: /* Return the time offset which applied/will apply at the specified time (in seconds). */ { int localoff; time_t theTime; #ifdef WINDOWS_PC /* Although the offset is in seconds it is since 1601. */ LARGE_INTEGER liTime; get_C_pair(taskData, DEREFWORDHANDLE(args), (unsigned long*)&liTime.HighPart, (unsigned long*)&liTime.LowPart); /* May raise exception. */ theTime = (long)(liTime.QuadPart - SECSSINCE1601); #else theTime = get_C_long(taskData, DEREFWORDHANDLE(args)); /* May raise exception. */ #endif struct tm *loctime = gmtime(&theTime); if (loctime == NULL) raise_exception0(taskData, EXC_size); localoff = (loctime->tm_hour*60 + loctime->tm_min)*60 + loctime->tm_sec; loctime = localtime(&theTime); if (loctime == NULL) raise_exception0(taskData, EXC_size); localoff -= (loctime->tm_hour*60 + loctime->tm_min)*60 + loctime->tm_sec; return Make_arbitrary_precision(taskData, localoff); } case 5: /* Find out if Summer Time (daylight saving) was/will be in effect. */ { time_t theTime; #ifdef WINDOWS_PC /* Although the offset is in seconds it is since 1601. */ LARGE_INTEGER liTime; get_C_pair(taskData, DEREFWORDHANDLE(args), (unsigned long*)&liTime.HighPart, (unsigned long*)&liTime.LowPart); /* May raise exception. */ theTime = (long)(liTime.QuadPart - SECSSINCE1601); #else theTime = get_C_long(taskData, DEREFWORDHANDLE(args)); /* May raise exception. */ #endif struct tm *loctime = localtime(&theTime); if (loctime == NULL) raise_exception0(taskData, EXC_size); return Make_arbitrary_precision(taskData, loctime->tm_isdst); } case 6: /* Call strftime. It would be possible to do much of this in ML except that it requires the current locale. */ { struct tm time; char *format, buff[2048]; Handle resString; /* Get the format string. */ format = Poly_string_to_C_alloc(DEREFHANDLE(args)->Get(0)); /* Copy the time information. */ time.tm_year = get_C_long(taskData, DEREFHANDLE(args)->Get(1)) - 1900; time.tm_mon = get_C_long(taskData, DEREFHANDLE(args)->Get(2)); time.tm_mday = get_C_long(taskData, DEREFHANDLE(args)->Get(3)); time.tm_hour = get_C_long(taskData, DEREFHANDLE(args)->Get(4)); time.tm_min = get_C_long(taskData, DEREFHANDLE(args)->Get(5)); time.tm_sec = get_C_long(taskData, DEREFHANDLE(args)->Get(6)); time.tm_wday = get_C_long(taskData, DEREFHANDLE(args)->Get(7)); time.tm_yday = get_C_long(taskData, DEREFHANDLE(args)->Get(8)); time.tm_isdst = get_C_long(taskData, DEREFHANDLE(args)->Get(9)); #ifdef WINDOWS_PC _tzset(); /* Make sure we set the current locale. */ #else setlocale(LC_TIME, ""); #endif /* It would be better to dynamically allocate the string rather than use a fixed size but Unix unlike Windows does not distinguish between an error in the input and the buffer being too small. */ if (strftime(buff, sizeof(buff), format, &time) <= 0) { /* Error */ free(format); raise_exception0(taskData, EXC_size); } resString = taskData->saveVec.push(C_string_to_Poly(taskData, buff)); free(format); return resString; } case 7: /* Return User CPU time since the start. */ { #ifdef WINDOWS_PC FILETIME ut, ct, et, kt; if (GetProcessTimes(GetCurrentProcess(), &ct, &et, &kt, &ut)) return Make_arb_from_pair(taskData, ut.dwHighDateTime, ut.dwLowDateTime); /* GetProcessTimes failed, assume because this is not NT. Have to use real time. */ GetSystemTimeAsFileTime(&ut); LARGE_INTEGER li, lj; li.LowPart = ut.dwLowDateTime; li.HighPart = ut.dwHighDateTime; lj.LowPart = startTime.dwLowDateTime; lj.HighPart = startTime.dwHighDateTime; li.QuadPart -= lj.QuadPart; return Make_arb_from_pair(taskData, li.HighPart, li.LowPart); #else struct rusage rusage; if (proper_getrusage(RUSAGE_SELF, &rusage) != 0) raise_syscall(taskData, "getrusage failed", errno); return Make_arb_from_pair_scaled(taskData, rusage.ru_utime.tv_sec, rusage.ru_utime.tv_usec, 1000000); #endif } case 8: /* Return System CPU time since the start. */ { #ifdef WINDOWS_PC FILETIME ct, et, kt, ut; if (GetProcessTimes(GetCurrentProcess(), &ct, &et, &kt, &ut)) return Make_arb_from_pair(taskData, kt.dwHighDateTime, kt.dwLowDateTime); /* If GetProcessTimes fails just return 0. */ return Make_arbitrary_precision(taskData, 0); #else struct rusage rusage; if (proper_getrusage(RUSAGE_SELF, &rusage) != 0) raise_syscall(taskData, "getrusage failed", errno); return Make_arb_from_pair_scaled(taskData, rusage.ru_stime.tv_sec, rusage.ru_stime.tv_usec, 1000000); #endif } case 9: /* Return GC time since the start. */ #ifdef WINDOWS_PC return Make_arb_from_pair(taskData, gcUTime.HighPart, gcUTime.LowPart); #else return Make_arb_from_pair_scaled(taskData, gcUTime.tv_sec, gcUTime.tv_usec, 1000000); #endif case 10: /* Return real time since the start. */ { #ifdef WINDOWS_PC FILETIME ft; LARGE_INTEGER li, lj; GetSystemTimeAsFileTime(&ft); li.LowPart = ft.dwLowDateTime; li.HighPart = ft.dwHighDateTime; lj.LowPart = startTime.dwLowDateTime; lj.HighPart = startTime.dwHighDateTime; li.QuadPart -= lj.QuadPart; return Make_arb_from_pair(taskData, li.HighPart, li.LowPart); #else struct timeval tv; if (gettimeofday(&tv, NULL) != 0) raise_syscall(taskData, "gettimeofday failed", errno); subTimes(&tv, &startTime); return Make_arb_from_pair_scaled(taskData, tv.tv_sec, tv.tv_usec, 1000000); #endif } /* These next two are used only in the Posix structure. */ case 11: /* Return User CPU time used by child processes. */ { #ifdef WINDOWS_PC return Make_arbitrary_precision(taskData, 0); #else struct rusage rusage; if (proper_getrusage(RUSAGE_CHILDREN, &rusage) != 0) raise_syscall(taskData, "getrusage failed", errno); return Make_arb_from_pair_scaled(taskData, rusage.ru_utime.tv_sec, rusage.ru_utime.tv_usec, 1000000); #endif } case 12: /* Return System CPU time used by child processes. */ { #ifdef WINDOWS_PC return Make_arbitrary_precision(taskData, 0); #else struct rusage rusage; if (proper_getrusage(RUSAGE_CHILDREN, &rusage) != 0) raise_syscall(taskData, "getrusage failed", errno); return Make_arb_from_pair_scaled(taskData, rusage.ru_stime.tv_sec, rusage.ru_stime.tv_usec, 1000000); #endif } case 13: /* Return GC system time since the start. */ /* This function was added in Gansner & Reppy. */ #ifdef WINDOWS_PC return Make_arb_from_pair(taskData, gcSTime.HighPart, gcSTime.LowPart); #else return Make_arb_from_pair_scaled(taskData, gcSTime.tv_sec, gcSTime.tv_usec, 1000000); #endif default: { char msg[100]; sprintf(msg, "Unknown timing function: %d", c); raise_exception_string(taskData, EXC_Fail, msg); return 0; } } } /* This function is called at the beginning and end of garbage collection to record the time used. To speed up garbage collection we decide to do this only if there is a timer running. */ void record_gc_time(bool isEnd) { #ifdef WINDOWS_PC FILETIME kt, ut; FILETIME ct, et; if (! GetProcessTimes(GetCurrentProcess(), &ct, &et, &kt, &ut)) { /* GetProcessTimes failed, assume because this is not NT. Have to use real time. */ GetSystemTimeAsFileTime(&ut); kt.dwHighDateTime = kt.dwLowDateTime = 0; } LARGE_INTEGER liU, liS; liU.LowPart = ut.dwLowDateTime; liU.HighPart = ut.dwHighDateTime; liS.LowPart = kt.dwLowDateTime; liS.HighPart = kt.dwHighDateTime; /* If this is the start we subtract the current time from the accumulator. At the end we add it so that the result is right. Since the user program can't call in to get the GC time while we're actually collecting that's quite safe. */ if (isEnd) { gcUTime.QuadPart += liU.QuadPart; gcSTime.QuadPart += liS.QuadPart; } else { gcUTime.QuadPart -= liU.QuadPart; gcSTime.QuadPart -= liS.QuadPart; } #else struct rusage rusage; if (proper_getrusage(RUSAGE_SELF, &rusage) != 0) return; if (isEnd) { addTimes(&gcUTime, &rusage.ru_utime); addTimes(&gcSTime, &rusage.ru_stime); } else { subTimes(&gcUTime, &rusage.ru_utime); subTimes(&gcSTime, &rusage.ru_stime); } #endif } #ifndef WINDOWS_PC static void addTimes(struct timeval *result, struct timeval *x) { long uSecs = result->tv_usec + x->tv_usec; result->tv_sec += x->tv_sec; if (uSecs >= 1000000) { result->tv_sec++; uSecs -= 1000000; } result->tv_usec = uSecs; } static void subTimes(struct timeval *result, struct timeval *x) { long uSecs = result->tv_usec - x->tv_usec; result->tv_sec -= x->tv_sec; if (uSecs < 0) { result->tv_sec--; uSecs += 1000000; } result->tv_usec = uSecs; } #endif class Timing: public RtsModule { public: virtual void Init(void); }; // Declare this. It will be automatically added to the table. static Timing timingModule; void Timing::Init(void) { #ifdef WINDOWS_PC /* Record an initial time of day to use as the basis of real timing and also CPU timing if GetProcessTimes doesn't work. */ GetSystemTimeAsFileTime(&startTime); #else gettimeofday(&startTime, NULL); #endif } polyml.5.2.1/libpolyml/timing.h0000644000175000017500000000233510655067471015455 0ustar daviddavid/* Title: Header for time functions Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef _TIMING_H_DEFINED #define _TIMING_H_DEFINED 1 class SaveVecEntry; typedef SaveVecEntry *Handle; class TaskData; /* time functions etc */ extern Handle timing_dispatch_c(TaskData *taskData, Handle args, Handle code); /* Called by the garbage collector at the beginning and end of garbage collection. */ extern void record_gc_time(bool isEnd); #endif polyml.5.2.1/libpolyml/unix_specific.cpp0000644000175000017500000021034610760751400017341 0ustar daviddavid/* Title: Operating Specific functions: Unix version. Copyright (c) 2000-8 David C. J. Matthews Portions of this code are derived from the original stream io package copyright CUTS 1983-2000. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifdef WIN32 #include "winconfig.h" #else #include "config.h" #endif #ifdef HAVE_STDIO_H #include #endif #ifdef HAVE_UNISTD_H #include #endif #ifdef HAVE_STRING_H #include #endif #ifdef HAVE_ERRNO_H #include #endif #ifdef HAVE_ASSERT_H #include #endif #ifdef HAVE_STDLIB_H #include #endif #ifdef HAVE_LIMITS_H #include #endif #ifdef HAVE_FCNTL_H #include #endif #ifdef HAVE_PWD_H #include #endif #ifdef HAVE_GRP_H #include #endif #ifdef HAVE_SYS_TYPES_H #include #endif #ifdef HAVE_SYS_PARAM_H #include #endif #ifdef HAVE_SYS_WAIT_H #include #endif #ifdef HAVE_SYS_IOCTL_H #include #endif #ifdef HAVE_SYS_SIGNAL_H #include #endif #ifdef HAVE_SYS_TIME_H #include #endif #ifdef HAVE_SYS_TERMIOS_H #include #endif #ifdef HAVE_SYS_STAT_H #include #endif #ifdef HAVE_SYS_UTSNAME_H #include #endif #ifdef HAVE_SIGNAL_H #include #endif #include "globals.h" #include "arb.h" #include "run_time.h" #include "io_internal.h" #include "sys.h" #include "diagnostics.h" #include "machine_dep.h" #include "os_specific.h" #include "gc.h" #include "processes.h" #include "mpoly.h" #include "sighandler.h" #include "polystring.h" #include "save_vec.h" #include "rts_module.h" #define STREAMID(x) (DEREFSTREAMHANDLE(x)->streamNo) #define SAVE(x) taskData->saveVec.push(x) #define ALLOC(n) alloc_and_save(taskData, n) #define SIZEOF(x) (sizeof(x)/sizeof(PolyWord)) /* Table of constants returned by call 4. */ static int unixConstVec[] = { /* Error codes. */ E2BIG, /* 0 */ EACCES, EAGAIN, EBADF, #ifdef EBADMSG /* This is not defined in FreeBSD. */ EBADMSG, #else 0, #endif EBUSY, #ifdef ECANCELED /* This is not defined in Linux. Perhaps somone knows how to spell "cancelled". */ ECANCELED, #else 0, /* Perhaps some other value. */ #endif ECHILD, EDEADLK, EDOM, EEXIST, EFAULT, EFBIG, EINPROGRESS, EINTR, EINVAL, EIO, EISDIR, ELOOP, EMFILE, EMLINK, /* 20 */ EMSGSIZE, ENAMETOOLONG, ENFILE, ENODEV, ENOENT, ENOEXEC, ENOLCK, ENOMEM, ENOSPC, ENOSYS, ENOTDIR, ENOTEMPTY, #ifdef ENOTSUP /* Not defined in Linux. */ ENOTSUP, #else 0, #endif ENOTTY, ENXIO, EPERM, EPIPE, ERANGE, EROFS, ESPIPE, ESRCH, EXDEV, /* 42 */ /* Signals. */ SIGABRT, /* 43 */ SIGALRM, SIGBUS, SIGFPE, SIGHUP, SIGILL, SIGINT, SIGKILL, SIGPIPE, SIGQUIT, SIGSEGV, SIGTERM, SIGUSR1, SIGUSR2, SIGCHLD, SIGCONT, SIGSTOP, SIGTSTP, SIGTTIN, SIGTTOU, /* 62 */ /* Open flags. */ O_RDONLY, /* 63 */ O_WRONLY, O_RDWR, O_APPEND, O_EXCL, O_NOCTTY, O_NONBLOCK, #ifdef O_SYNC O_SYNC, /* Not defined in FreeBSD. */ #else 0, #endif O_TRUNC, /* 71 */ /* TTY: Special characters. */ VEOF, /* 72 */ VEOL, VERASE, VINTR, VKILL, VMIN, VQUIT, VSUSP, VTIME, VSTART, VSTOP, NCCS, /* 83 */ /* TTY: Input mode. */ BRKINT, /* 84 */ ICRNL, IGNBRK, IGNCR, IGNPAR, INLCR, INPCK, ISTRIP, IXOFF, IXON, PARMRK, /* 94 */ /* TTY: Output mode. */ OPOST, /* 95 */ /* TTY: Control modes. */ CLOCAL, /* 96 */ CREAD, CS5, CS6, CS7, CS8, CSIZE, CSTOPB, HUPCL, PARENB, PARODD, /* 106 */ /* TTY: Local modes. */ ECHO, /* 107 */ ECHOE, ECHOK, ECHONL, ICANON, IEXTEN, ISIG, NOFLSH, TOSTOP, /* 115 */ /* TTY: Speeds. */ B0, /* 116 */ B50, B75, B110, B134, B150, B200, B300, B600, B1200, B1800, B2400, B4800, B9600, B19200, B38400, /* 131 */ /* FD flags. */ FD_CLOEXEC, /* 132 */ /* Wait flags. */ WUNTRACED, /* 133 */ WNOHANG, /* 134 */ /* tcsetattr flags. */ TCSANOW, /* 135 */ TCSADRAIN, TCSAFLUSH, /* tcflow flags. */ TCOOFF, /* 138 */ TCOON, TCIOFF, TCION, /* tcflush flags. */ TCIFLUSH, /* 142 */ TCOFLUSH, TCIOFLUSH, /* File permissions. */ S_IRUSR, /* 145 */ S_IWUSR, S_IXUSR, S_IRGRP, S_IWGRP, S_IXGRP, S_IROTH, S_IWOTH, S_IXOTH, S_ISUID, S_ISGID, /* 155 */ /* Bits for access function. */ R_OK, /* 156 */ W_OK, X_OK, F_OK, /* 159 */ /* Values for lseek. */ SEEK_SET, /* 160 */ SEEK_CUR, SEEK_END, /* 162 */ /* Values for lock types. */ F_RDLCK, /* 163 */ F_WRLCK, F_UNLCK, /* 165 */ /* Mask for file access. */ O_ACCMODE, /* 166 */ }; /* Auxiliary functions which implement the more complex cases. */ static Handle waitForProcess(TaskData *taskData, Handle args); static Handle makePasswordEntry(TaskData *taskData, struct passwd *pw); static Handle makeGroupEntry(TaskData *taskData, struct group *grp); static Handle getUname(TaskData *taskData); static Handle getSysConf(TaskData *taskData, Handle args); static Handle getTTYattrs(TaskData *taskData, Handle args); static Handle setTTYattrs(TaskData *taskData, Handle args); static Handle getStatInfo(TaskData *taskData, struct stat *buf); static Handle lockCommand(TaskData *taskData, int cmd, Handle args); static int findPathVar(TaskData *taskData, PolyWord ps); // Unmask all signals just before exec. static void restoreSignals(void) { sigset_t sigset; sigemptyset(&sigset); sigprocmask(SIG_SETMASK, &sigset, NULL); } Handle OS_spec_dispatch_c(TaskData *taskData, Handle args, Handle code) { int c = get_C_long(taskData, DEREFWORDHANDLE(code)); switch (c) { case 0: /* Return our OS type. Not in any structure. */ return Make_arbitrary_precision(taskData, 0); /* 0 for Unix. */ case 4: /* Return a constant. */ { unsigned i = get_C_long(taskData, DEREFWORDHANDLE(args)); if (i < 0 || i >= sizeof(unixConstVec)/sizeof(unixConstVec[0])) raise_syscall(taskData, "Invalid index", 0); return Make_unsigned(taskData, unixConstVec[i]); } case 5: /* fork. */ { pid_t pid = fork(); if (pid < 0) raise_syscall(taskData, "fork failed", errno); if (pid == 0) processes->SetSingleThreaded(); return Make_unsigned(taskData, pid); } case 6: /* kill */ { int pid = get_C_long(taskData, DEREFHANDLE(args)->Get(0)); int sig = get_C_long(taskData, DEREFHANDLE(args)->Get(1)); if (kill(pid, sig) < 0) raise_syscall(taskData, "kill failed", errno); return Make_unsigned(taskData, 0); } case 7: /* get process id */ { pid_t pid = getpid(); if (pid < 0) raise_syscall(taskData, "getpid failed", errno); return Make_unsigned(taskData, pid); } case 8: /* get process id of parent */ { pid_t pid = getppid(); if (pid < 0) raise_syscall(taskData, "getppid failed", errno); return Make_unsigned(taskData, pid); } case 9: /* get real user id */ { uid_t uid = getuid(); if (uid < 0) raise_syscall(taskData, "getuid failed", errno); return Make_unsigned(taskData, uid); } case 10: /* get effective user id */ { uid_t uid = geteuid(); if (uid < 0) raise_syscall(taskData, "geteuid failed", errno); return Make_unsigned(taskData, uid); } case 11: /* get real group id */ { gid_t gid = getgid(); if (gid < 0) raise_syscall(taskData, "getgid failed", errno); return Make_unsigned(taskData, gid); } case 12: /* get effective group id */ { gid_t gid = getegid(); if (gid < 0) raise_syscall(taskData, "getegid failed", errno); return Make_unsigned(taskData, gid); } case 13: /* Return process group */ { pid_t pid = getpgrp(); if (pid < 0) raise_syscall(taskData, "getpgrp failed", errno); return Make_unsigned(taskData, pid); } case 14: /* Wait for child process to terminate. */ return waitForProcess(taskData, args); case 15: /* Unpack a process result. */ { int resType, resVal; Handle result, typeHandle, resHandle; int status = get_C_long(taskData, DEREFWORDHANDLE(args)); if (WIFEXITED(status)) { resType = 1; resVal = WEXITSTATUS(status); } else if (WIFSIGNALED(status)) { resType = 2; resVal = WTERMSIG(status); } else if (WIFSTOPPED(status)) { resType = 3; resVal = WSTOPSIG(status); } else { /* ?? */ resType = 0; resVal = 0; } typeHandle = Make_arbitrary_precision(taskData, resType); resHandle = Make_arbitrary_precision(taskData, resVal); result = ALLOC(2); DEREFHANDLE(result)->Set(0, DEREFWORDHANDLE(typeHandle)); DEREFHANDLE(result)->Set(1, DEREFWORDHANDLE(resHandle)); return result; } case 16: /* Pack up a process result. The inverse of the previous call. */ { int resType = get_C_long(taskData, DEREFHANDLE(args)->Get(0)); int resVal = get_C_long(taskData, DEREFHANDLE(args)->Get(1)); int result = 0; switch (resType) { case 1: /* Exited */ result = resVal << 8; break; case 2: /* Signalled */ result = resVal; break; case 3: /* Stopped */ result = (resVal << 8) | 0177; } return Make_unsigned(taskData, result); } case 17: /* Run a new executable. */ { char *path = Poly_string_to_C_alloc(DEREFHANDLE(args)->Get(0)); char **argl = stringListToVector(SAVE(DEREFHANDLE(args)->Get(1))); int err; restoreSignals(); execv(path, argl); err = errno; /* We only get here if there's been an error. */ free(path); freeStringVector(argl); raise_syscall(taskData, "execv failed", err); } case 18: /* Run a new executable with given environment. */ { char *path = Poly_string_to_C_alloc(DEREFHANDLE(args)->Get(0)); char **argl = stringListToVector(SAVE(DEREFHANDLE(args)->Get(1))); char **envl = stringListToVector(SAVE(DEREFHANDLE(args)->Get(2))); int err; restoreSignals(); execve(path, argl, envl); err = errno; /* We only get here if there's been an error. */ free(path); freeStringVector(argl); freeStringVector(envl); raise_syscall(taskData, "execve failed", err); } case 19: /* Run a new executable using PATH environment variable. */ { char *path = Poly_string_to_C_alloc(DEREFHANDLE(args)->Get(0)); char **argl = stringListToVector(SAVE(DEREFHANDLE(args)->Get(1))); int err; restoreSignals(); execvp(path, argl); err = errno; /* We only get here if there's been an error. */ free(path); freeStringVector(argl); raise_syscall(taskData, "execvp failed", err); } case 20: /* Sets an alarm and returns the current alarm time. A value of zero for the time cancels the timer. */ { /* We have a value in microseconds. We need to split it into seconds and microseconds. */ Handle hTime = args; Handle hMillion = Make_arbitrary_precision(taskData, 1000000); struct itimerval newTimer, oldTimer; newTimer.it_interval.tv_sec = 0; newTimer.it_interval.tv_usec = 0; newTimer.it_value.tv_sec = get_C_long(taskData, DEREFWORDHANDLE(div_longc(taskData, hMillion, hTime))); newTimer.it_value.tv_usec = get_C_long(taskData, DEREFWORDHANDLE(rem_longc(taskData, hMillion, hTime))); if (setitimer(ITIMER_REAL, &newTimer, &oldTimer) != 0) raise_syscall(taskData, "setitimer failed", errno); Handle result = /* Return the previous setting. */ Make_arb_from_pair_scaled(taskData, oldTimer.it_value.tv_sec, oldTimer.it_value.tv_usec, 1000000); return result; } case 21: /* Pause until signal. */ { /* This never returns. When a signal is handled it will be interrupted. */ processes->BlockAndRestart(taskData, -1, true /* Interruptable. */, POLY_SYS_os_specific); } case 22: /* Sleep until given time or until a signal. Note: this is called with an absolute time as an argument and returns a relative time as result. This RTS call is tried repeatedly until either the time has expired or a signal has occurred. */ { struct timeval tv; /* We have a value in microseconds. We need to split it into seconds and microseconds. */ Handle hTime = args; Handle hMillion = Make_arbitrary_precision(taskData, 1000000); unsigned long secs = get_C_ulong(taskData, DEREFWORDHANDLE(div_longc(taskData, hMillion, hTime))); unsigned long usecs = get_C_ulong(taskData, DEREFWORDHANDLE(rem_longc(taskData, hMillion, hTime))); /* Has the time expired? */ if (gettimeofday(&tv, NULL) != 0) raise_syscall(taskData, "gettimeofday failed", errno); /* If the timeout time is earlier than the current time we must return, otherwise we block. This can be interrupted by a signal. */ if ((unsigned long)tv.tv_sec < secs || ((unsigned long)tv.tv_sec == secs && (unsigned long)tv.tv_usec < usecs)) processes->BlockAndRestart(taskData, -1, true /* Interruptable. */, POLY_SYS_os_specific); return Make_arbitrary_precision(taskData, 0); } case 23: /* Set uid. */ { uid_t uid = get_C_long(taskData, DEREFWORDHANDLE(args)); if (setuid(uid) != 0) raise_syscall(taskData, "setuid failed", errno); return Make_arbitrary_precision(taskData, 0); } case 24: /* Set gid. */ { gid_t gid = get_C_long(taskData, DEREFWORDHANDLE(args)); if (setgid(gid) != 0) raise_syscall(taskData, "setgid failed", errno); return Make_arbitrary_precision(taskData, 0); } case 25: /* Get group list. */ { // This previously allocated gid_t[NGROUPS_MAX] on the stack but this // requires quite a bit of stack space. gid_t gid[1]; int ngroups = getgroups(0, gid); // Just get the number. if (ngroups < 0) raise_syscall(taskData, "getgroups failed", errno); if (ngroups == 0) return SAVE(ListNull); gid_t *groups = (gid_t*)calloc(sizeof(gid_t), ngroups); if (groups == 0) raise_syscall(taskData, "Unable to allocate memory", errno); if (getgroups(ngroups, groups) < 0) { int lasterr = errno; free(groups); raise_syscall(taskData, "getgroups failed", lasterr); } Handle saved = taskData->saveVec.mark(); Handle list = SAVE(ListNull); /* It's simplest to process the integers in reverse order */ while (--ngroups >= 0) { Handle value = Make_arbitrary_precision(taskData, groups[ngroups]); Handle next = ALLOC(SIZEOF(ML_Cons_Cell)); DEREFLISTHANDLE(next)->h = DEREFWORDHANDLE(value); DEREFLISTHANDLE(next)->t = DEREFLISTHANDLE(list); taskData->saveVec.reset(saved); list = SAVE(DEREFHANDLE(next)); } free(groups); return list; } case 26: /* Get login name. */ { char *login = getlogin(); if (login == 0) raise_syscall(taskData, "getlogin failed", errno); return SAVE(C_string_to_Poly(taskData, login)); } case 27: /* Set sid */ { pid_t pid = setsid(); if (pid < 0) raise_syscall(taskData, "setsid failed", errno); return Make_arbitrary_precision(taskData, pid); } case 28: /* Set process group. */ { pid_t pid = get_C_long(taskData, DEREFHANDLE(args)->Get(0)); pid_t pgid = get_C_long(taskData, DEREFHANDLE(args)->Get(1)); if (setpgid(pid, pgid) < 0 ) raise_syscall(taskData, "setpgid failed", errno); return Make_arbitrary_precision(taskData, 0); } case 29: /* uname */ return getUname(taskData); case 30: /* Get controlling terminal. */ { char *term = ctermid(0); /* Can this generate an error? */ if (term == 0) raise_syscall(taskData, "ctermid failed", errno); return SAVE(C_string_to_Poly(taskData, term)); } case 31: /* Get terminal name for file descriptor. */ { PIOSTRUCT str = get_stream(args->WordP()); char *term; if (str == NULL) raise_syscall(taskData, "Stream is closed", EBADF); term = ttyname(str->device.ioDesc); if (term == 0) raise_syscall(taskData, "ttyname failed", errno); return SAVE(C_string_to_Poly(taskData, term)); } case 32: /* Test if file descriptor is a terminal. Returns false if the stream is closed. */ { PIOSTRUCT str = get_stream(args->WordP()); if (str != NULL && isatty(str->device.ioDesc)) return Make_arbitrary_precision(taskData, 1); else return Make_arbitrary_precision(taskData, 0); } case 33: /* sysconf. */ return getSysConf(taskData, args); /* Filesys entries. */ case 50: /* Set the file creation mask and return the old one. */ { mode_t mode = get_C_ulong(taskData, DEREFWORDHANDLE(args)); return Make_unsigned(taskData, umask(mode)); } case 51: /* Create a hard link. */ { char *old = Poly_string_to_C_alloc(DEREFHANDLE(args)->Get(0)); char *newp = Poly_string_to_C_alloc(DEREFHANDLE(args)->Get(1)); int err, res; res = link(old, newp); err = errno; /* Save the error result in case free changes it. */ free(old); free(newp); if (res < 0) raise_syscall(taskData, "link failed", err); return Make_arbitrary_precision(taskData, 0); } case 52: /* Create a directory. There is an OS-independent version in basicio which uses a default creation mode. */ { char *name = Poly_string_to_C_alloc(DEREFHANDLE(args)->Get(0)); mode_t mode = get_C_long(taskData, DEREFHANDLE(args)->Get(1)); int err, res; res = mkdir(name, mode); err = errno; /* Save the error result in case free changes it. */ free(name); if (res < 0) raise_syscall(taskData, "mkdir failed", err); return Make_arbitrary_precision(taskData, 0); } case 53: /* Create a fifo. */ { char *name = Poly_string_to_C_alloc(DEREFHANDLE(args)->Get(0)); mode_t mode = get_C_long(taskData, DEREFHANDLE(args)->Get(1)); int err, res; res = mkfifo(name, mode); err = errno; /* Save the error result in case free changes it. */ free(name); if (res < 0) raise_syscall(taskData, "mkfifo failed", err); return Make_arbitrary_precision(taskData, 0); } case 54: /* Create a symbolic link. */ { char *old = Poly_string_to_C_alloc(DEREFHANDLE(args)->Get(0)); char *newp = Poly_string_to_C_alloc(DEREFHANDLE(args)->Get(1)); int err, res; res = symlink(old, newp); err = errno; /* Save the error result in case free changes it. */ free(old); free(newp); if (res < 0) raise_syscall(taskData, "link failed", err); return Make_arbitrary_precision(taskData, 0); } case 55: /* Get information about a file. */ { struct stat buf; int res, err; char *name = Poly_string_to_C_alloc(DEREFWORD(args)); res = stat(name, &buf); err = errno; free(name); if (res < 0) raise_syscall(taskData, "stat failed", err); return getStatInfo(taskData, &buf); } case 56: /* Get information about a symbolic link. */ { struct stat buf; int res, err; char *name = Poly_string_to_C_alloc(DEREFWORD(args)); res = lstat(name, &buf); err = errno; free(name); if (res < 0) raise_syscall(taskData, "lstat failed", err); return getStatInfo(taskData, &buf); } case 57: /* Get information about an open file. */ { struct stat buf; PIOSTRUCT strm = get_stream(args->WordP()); if (strm == NULL) raise_syscall(taskData, "Stream is closed", EBADF); if (fstat(strm->device.ioDesc, &buf) < 0) raise_syscall(taskData, "fstat failed", errno); return getStatInfo(taskData, &buf); } case 58: /* Test access rights to a file. */ { char *name = Poly_string_to_C_alloc(DEREFHANDLE(args)->Get(0)); int amode = get_C_long(taskData, DEREFHANDLE(args)->Get(1)); int res; res = access(name, amode); free(name); /* Return false if error, true if not. It's not clear that this is correct since there are several reasons why we might get -1 as the result. */ return Make_arbitrary_precision(taskData, res < 0 ? 0 : 1); } case 59: /* Change access rights. */ { char *name = Poly_string_to_C_alloc(DEREFHANDLE(args)->Get(0)); mode_t mode = get_C_long(taskData, DEREFHANDLE(args)->Get(1)); int err, res; res = chmod(name, mode); err = errno; /* Save the error result in case free changes it. */ free(name); if (res < 0) raise_syscall(taskData, "chmod failed", err); return Make_arbitrary_precision(taskData, 0); } case 60: /* Change access rights on open file. */ { PIOSTRUCT strm = get_stream(DEREFHANDLE(args)->Get(0).AsObjPtr()); mode_t mode = get_C_long(taskData, DEREFHANDLE(args)->Get(1)); if (strm == NULL) raise_syscall(taskData, "Stream is closed", EBADF); if (fchmod(strm->device.ioDesc, mode) < 0) raise_syscall(taskData, "fchmod failed", errno); return Make_arbitrary_precision(taskData, 0); } case 61: /* Change owner and group. */ { char *name = Poly_string_to_C_alloc(DEREFHANDLE(args)->Get(0)); uid_t uid = get_C_long(taskData, DEREFHANDLE(args)->Get(1)); gid_t gid = get_C_long(taskData, DEREFHANDLE(args)->Get(2)); int err, res; res = chown(name, uid, gid); err = errno; /* Save the error result in case free changes it. */ free(name); if (res < 0) raise_syscall(taskData, "chown failed", err); return Make_arbitrary_precision(taskData, 0); } case 62: /* Change owner and group on open file. */ { PIOSTRUCT strm = get_stream(DEREFHANDLE(args)->Get(0).AsObjPtr()); uid_t uid = get_C_long(taskData, DEREFHANDLE(args)->Get(1)); gid_t gid = get_C_long(taskData, DEREFHANDLE(args)->Get(2)); if (strm == NULL) raise_syscall(taskData, "Stream is closed", EBADF); if (fchown(strm->device.ioDesc, uid, gid) < 0) raise_syscall(taskData, "fchown failed", errno); return Make_arbitrary_precision(taskData, 0); } case 63: /* Set access and modification times. We use utimes rather than utime since it allows us to be more accurate. There's a similar function in basicio which sets both the access and modification times to the same time. */ { char *name = Poly_string_to_C_alloc(DEREFHANDLE(args)->Get(0)); Handle hAccess = SAVE(DEREFHANDLE(args)->Get(1)); Handle hMod = SAVE(DEREFHANDLE(args)->Get(2)); struct timeval times[2]; /* We have a value in microseconds. We need to split it into seconds and microseconds. N.B. The arguments to div_longc and rem_longc are in reverse order. */ Handle hMillion = Make_arbitrary_precision(taskData, 1000000); unsigned secsAccess = get_C_ulong(taskData, DEREFWORDHANDLE(div_longc(taskData, hMillion, hAccess))); unsigned usecsAccess = get_C_ulong(taskData, DEREFWORDHANDLE(rem_longc(taskData, hMillion, hAccess))); unsigned secsMod = get_C_ulong(taskData, DEREFWORDHANDLE(div_longc(taskData, hMillion, hMod))); unsigned usecsMod = get_C_ulong(taskData, DEREFWORDHANDLE(rem_longc(taskData, hMillion, hMod))); int err, res; times[0].tv_sec = secsAccess; times[0].tv_usec = usecsAccess; times[1].tv_sec = secsMod; times[1].tv_usec = usecsMod; res = utimes(name, times); err = errno; /* Save the error result in case free changes it. */ free(name); if (res < 0) raise_syscall(taskData, "utimes failed", err); return Make_arbitrary_precision(taskData, 0); } case 64: /* Set access and modification times to the current time. This could be defined in terms of the previous call and Time.now but it could result in an error due to rounding. This is probably safer. */ { char *name = Poly_string_to_C_alloc(DEREFWORD(args)); int err, res; res = utimes(name, 0); err = errno; /* Save the error result in case free changes it. */ free(name); if (res < 0) raise_syscall(taskData, "utimes failed", err); return Make_arbitrary_precision(taskData, 0); } case 65: /* Truncate an open file. */ { PIOSTRUCT strm = get_stream(DEREFHANDLE(args)->Get(0).AsObjPtr()); int size = get_C_long(taskData, DEREFHANDLE(args)->Get(1)); if (strm == NULL) raise_syscall(taskData, "Stream is closed", EBADF); if (ftruncate(strm->device.ioDesc, size) < 0) raise_syscall(taskData, "ftruncate failed", errno); return Make_arbitrary_precision(taskData, 0); } case 66: /* Get the configured limits for a file. */ { /* Look up the variable. May raise an exception. */ int nvar = findPathVar(taskData, DEREFHANDLE(args)->Get(1)); char *name = Poly_string_to_C_alloc(DEREFHANDLE(args)->Get(0)); int err, res; /* Set errno to zero. If there is no limit pathconf returns -1 but does not change errno. */ errno = 0; res = pathconf(name, nvar); err = errno; /* Save the error result in case free changes it. */ free(name); /* We return -1 as a valid result indicating no limit. */ if (res < 0 && err != 0) raise_syscall(taskData, "pathconf failed", err); return Make_arbitrary_precision(taskData, res); } case 67: /* Get the configured limits for an open file. */ { /* Look up the variable. May raise an exception. */ int nvar = findPathVar(taskData, DEREFHANDLE(args)->Get(1)); PIOSTRUCT strm = get_stream(DEREFHANDLE(args)->Get(0).AsObjPtr()); int res; if (strm == NULL) raise_syscall(taskData, "Stream is closed", EBADF); errno = 0; /* Unchanged if there is no limit. */ res = fpathconf(strm->device.ioDesc, nvar); if (res < 0 && errno != 0) raise_syscall(taskData, "fpathconf failed", errno); return Make_arbitrary_precision(taskData, res); } /* Password and group entries. */ case 100: /* Get Password entry by name. */ { char pwName[200]; int length; struct passwd *pw; length = Poly_string_to_C(DEREFWORD(args), pwName, 200); if (length > 200) raise_syscall(taskData, "Password name too long", ENAMETOOLONG); pw = getpwnam(pwName); if (pw == NULL) raise_syscall(taskData, "Password entry not found", ENOENT); return makePasswordEntry(taskData, pw); } case 101: /* Get password entry by uid. */ { int uid = get_C_long(taskData, DEREFWORDHANDLE(args)); struct passwd *pw = getpwuid(uid); if (pw == NULL) raise_syscall(taskData, "Password entry not found", ENOENT); return makePasswordEntry(taskData, pw); } case 102: /* Get group entry by name. */ { struct group *grp; char grpName[200]; int length; length = Poly_string_to_C(DEREFWORD(args), grpName, 200); if (length > 200) raise_syscall(taskData, "Group name too long", ENAMETOOLONG); grp = getgrnam(grpName); if (grp == NULL) raise_syscall(taskData, "Group entry not found", ENOENT); return makeGroupEntry(taskData, grp); } case 103: /* Get group entry by gid. */ { int gid = get_C_long(taskData, DEREFWORDHANDLE(args)); struct group *grp = getgrgid(gid); if (grp == NULL) raise_syscall(taskData, "Group entry not found", ENOENT); return makeGroupEntry(taskData, grp); } /* IO Entries. */ case 110: /* Create a pipe. */ { int filedes[2]; Handle strRead = make_stream_entry(taskData); Handle strWrite = make_stream_entry(taskData); Handle result; PIOSTRUCT instrm, outstrm; if (pipe(filedes) < 0) raise_syscall(taskData, "pipe failed", errno); instrm = &basic_io_vector[STREAMID(strRead)]; outstrm = &basic_io_vector[STREAMID(strWrite)]; instrm->device.ioDesc = filedes[0]; instrm->ioBits = IO_BIT_OPEN | IO_BIT_READ; outstrm->device.ioDesc = filedes[1]; outstrm->ioBits = IO_BIT_OPEN | IO_BIT_WRITE; result = ALLOC(2); DEREFHANDLE(result)->Set(0, DEREFWORDHANDLE(strRead)); DEREFHANDLE(result)->Set(1, DEREFWORDHANDLE(strWrite)); return result; } case 111: /* Duplicate a file descriptor. */ { PIOSTRUCT str = get_stream(args->WordP()); PIOSTRUCT newstr; Handle strToken = make_stream_entry(taskData); int fd; if (str == NULL) raise_syscall(taskData, "Stream is closed", EBADF); fd = dup(str->device.ioDesc); if (fd < 0) raise_syscall(taskData, "dup failed", errno); newstr = &basic_io_vector[STREAMID(strToken)]; newstr->device.ioDesc = fd; /* I'm assuming that we're not going to put any other status information in the bits. */ newstr->ioBits = str->ioBits; return strToken; } case 112: /* Duplicate a file descriptor to a given entry. */ { PIOSTRUCT old = get_stream(DEREFHANDLE(args)->Get(0).AsObjPtr()); PIOSTRUCT newp = get_stream(DEREFHANDLE(args)->Get(1).AsObjPtr()); /* The "newp" entry must be an open entry in our io table. It may, though, be an entry added through wordToFD (basicio call 31) which may not refer to a valid descriptor. */ if (old == NULL || newp == NULL) raise_syscall(taskData, "Stream is closed", EBADF); if (dup2(old->device.ioDesc, newp->device.ioDesc) < 0) raise_syscall(taskData, "dup2 failed", errno); newp->ioBits = old->ioBits; return Make_arbitrary_precision(taskData, 0); } case 113: /* Duplicate a file descriptor to an entry equal to or greater than the given value. */ { PIOSTRUCT old = get_stream(DEREFHANDLE(args)->Get(0).AsObjPtr()); PIOSTRUCT base = get_stream(DEREFHANDLE(args)->Get(1).AsObjPtr()); int newfd; Handle strToken = make_stream_entry(taskData); PIOSTRUCT newstr; /* The "base" entry must be an open entry in our io table. It may, though, be an entry added through wordToFD (basicio call 31) which may not refer to a valid descriptor. */ if (old == NULL || base == NULL) raise_syscall(taskData, "Stream is closed", EBADF); newfd = fcntl(old->device.ioDesc, F_DUPFD, base->device.ioDesc); if (newfd < 0) raise_syscall(taskData, "dup2 failed", errno); newstr = &basic_io_vector[STREAMID(strToken)]; newstr->device.ioDesc = newfd; /* I'm assuming that we're not going to put any other status information in the bits. */ newstr->ioBits = old->ioBits; return strToken; } case 114: /* Get the file descriptor flags. */ { PIOSTRUCT strm = get_stream(args->WordP()); int res; if (strm == NULL) raise_syscall(taskData, "Stream is closed", EBADF); res = fcntl(strm->device.ioDesc, F_GETFD); if (res < 0) raise_syscall(taskData, "fcntl failed", errno); return Make_arbitrary_precision(taskData, res); } case 115: /* Set the file descriptor flags. */ { PIOSTRUCT strm = get_stream(DEREFHANDLE(args)->Get(0).AsObjPtr()); int flags = get_C_long(taskData, DEREFHANDLE(args)->Get(1)); if (strm == NULL) raise_syscall(taskData, "Stream is closed", EBADF); if (fcntl(strm->device.ioDesc, F_SETFD, flags) < 0) raise_syscall(taskData, "fcntl failed", errno); return Make_arbitrary_precision(taskData, 0); } case 116: /* Get the file status and access flags. */ { PIOSTRUCT strm = get_stream(args->WordP()); int res; if (strm == NULL) raise_syscall(taskData, "Stream is closed", EBADF); res = fcntl(strm->device.ioDesc, F_GETFL); if (res < 0) raise_syscall(taskData, "fcntl failed", errno); return Make_arbitrary_precision(taskData, res); } case 117: /* Set the file status and access flags. */ { PIOSTRUCT strm = get_stream(DEREFHANDLE(args)->Get(0).AsObjPtr()); int flags = get_C_long(taskData, DEREFHANDLE(args)->Get(1)); if (strm == NULL) raise_syscall(taskData, "Stream is closed", EBADF); if (fcntl(strm->device.ioDesc, F_SETFL, flags) < 0) raise_syscall(taskData, "fcntl failed", errno); return Make_arbitrary_precision(taskData, 0); } case 118: /* Seek to a position on the stream. */ { PIOSTRUCT strm = get_stream(DEREFHANDLE(args)->Get(0).AsObjPtr()); long position = get_C_long(taskData, DEREFHANDLE(args)->Get(1)); int whence = get_C_long(taskData, DEREFHANDLE(args)->Get(2)); long newpos; if (strm == NULL) raise_syscall(taskData, "Stream is closed", EBADF); newpos = lseek(strm->device.ioDesc, position, whence); if (newpos < 0) raise_syscall(taskData, "lseek failed", errno); return Make_arbitrary_precision(taskData, newpos); } case 119: /* Synchronise file contents. */ { PIOSTRUCT strm = get_stream(args->WordP()); if (strm == NULL) raise_syscall(taskData, "Stream is closed", EBADF); if (fsync(strm->device.ioDesc) < 0) raise_syscall(taskData, "fsync failed", errno); return Make_arbitrary_precision(taskData, 0); } case 120: /* get lock */ return lockCommand(taskData, F_GETLK, args); case 121: /* set lock */ return lockCommand(taskData, F_SETLK, args); case 122: /* wait for lock */ /* TODO: This may well block the whole process. We should look at the result and retry if need be. */ return lockCommand(taskData, F_SETLKW, args); /* TTY entries. */ case 150: /* Get attributes. */ return getTTYattrs(taskData, args); case 151: /* Set attributes. */ return setTTYattrs(taskData, args); case 152: /* Send a break. */ { PIOSTRUCT strm = get_stream(DEREFHANDLE(args)->Get(0).AsObjPtr()); int duration = get_C_long(taskData, DEREFHANDLE(args)->Get(1)); if (strm == NULL) raise_syscall(taskData, "Stream is closed", EBADF); if (tcsendbreak(strm->device.ioDesc, duration) < 0) raise_syscall(taskData, "tcsendbreak failed", errno); return Make_arbitrary_precision(taskData, 0); } case 153: /* Wait for output to drain. */ { /* TODO: This will block the process. It really needs to check whether the stream has drained and run another process until it has. */ PIOSTRUCT strm = get_stream(args->WordP()); if (strm == NULL) raise_syscall(taskData, "Stream is closed", EBADF); if (tcdrain(strm->device.ioDesc) < 0) raise_syscall(taskData, "tcdrain failed", errno); return Make_arbitrary_precision(taskData, 0); } case 154: /* Flush terminal stream. */ { PIOSTRUCT strm = get_stream(DEREFHANDLE(args)->Get(0).AsObjPtr()); int qs = get_C_long(taskData, DEREFHANDLE(args)->Get(1)); if (strm == NULL) raise_syscall(taskData, "Stream is closed", EBADF); if (tcflush(strm->device.ioDesc, qs) < 0) raise_syscall(taskData, "tcflush failed", errno); return Make_arbitrary_precision(taskData, 0); } case 155: /* Flow control. */ { PIOSTRUCT strm = get_stream(DEREFHANDLE(args)->Get(0).AsObjPtr()); int action = get_C_long(taskData, DEREFHANDLE(args)->Get(1)); if (strm == NULL) raise_syscall(taskData, "Stream is closed", EBADF); if (tcflow(strm->device.ioDesc, action) < 0) raise_syscall(taskData, "tcflow failed", errno); return Make_arbitrary_precision(taskData, 0); } case 156: /* Get process group. */ { PIOSTRUCT strm = get_stream(args->WordP()); pid_t pid; if (strm == NULL) raise_syscall(taskData, "Stream is closed", EBADF); pid = tcgetpgrp(strm->device.ioDesc); if (pid < 0) raise_syscall(taskData, "tcgetpgrp failed", errno); return Make_arbitrary_precision(taskData, pid); } case 157: /* Set process group. */ { PIOSTRUCT strm = get_stream(DEREFHANDLE(args)->Get(0).AsObjPtr()); pid_t pid = get_C_long(taskData, DEREFHANDLE(args)->Get(1)); if (strm == NULL) raise_syscall(taskData, "Stream is closed", EBADF); if (tcsetpgrp(strm->device.ioDesc, pid) < 0) raise_syscall(taskData, "tcsetpgrp failed", errno); return Make_arbitrary_precision(taskData, 0); } default: { char msg[100]; sprintf(msg, "Unknown unix-specific function: %d", c); raise_exception_string(taskData, EXC_Fail, msg); } } } Handle waitForProcess(TaskData *taskData, Handle args) /* Get result status of a child process. */ { TryAgain: int kind = get_C_long(taskData, DEREFHANDLE(args)->Get(0)); int pid = get_C_long(taskData, DEREFHANDLE(args)->Get(1)); int callFlags = get_C_long(taskData, DEREFHANDLE(args)->Get(2)); int flags = callFlags | WNOHANG; // Add in WNOHANG so we never block. pid_t pres = 0; int status; switch (kind) { case 0: /* Wait for any child. */ pres = waitpid(-1, &status, flags); break; case 1: /* Wait for specific process. */ pres = waitpid(pid, &status, flags); break; case 2: /* Wait for any in current process group. */ pres = waitpid(0, &status, flags); break; case 3: /* Wait for child in given process group */ pres = waitpid(-pid, &status, flags); break; } if (pres < 0) { if (errno == EINTR) goto TryAgain; else raise_syscall(taskData, "wait failed", errno); } /* If the caller did not specify WNOHANG but there wasn't a child process waiting we have to block and come back here later. */ if (pres == 0 && !(callFlags & WNOHANG)) processes->BlockAndRestart(taskData, -1, false, POLY_SYS_os_specific); /* Construct the result tuple. */ { Handle result, pidHandle, resHandle; pidHandle = Make_arbitrary_precision(taskData, pres); resHandle = Make_arbitrary_precision(taskData, status); result = ALLOC(2); DEREFHANDLE(result)->Set(0, DEREFWORDHANDLE(pidHandle)); DEREFHANDLE(result)->Set(1, DEREFWORDHANDLE(resHandle)); return result; } } static Handle makePasswordEntry(TaskData *taskData, struct passwd *pw) /* Return a password entry. */ { Handle nameHandle, uidHandle, gidHandle, homeHandle, shellHandle, result; nameHandle = SAVE(C_string_to_Poly(taskData, pw->pw_name)); uidHandle = Make_arbitrary_precision(taskData, pw->pw_uid); gidHandle = Make_arbitrary_precision(taskData, pw->pw_gid); homeHandle = SAVE(C_string_to_Poly(taskData, pw->pw_dir)); shellHandle = SAVE(C_string_to_Poly(taskData, pw->pw_shell)); result = ALLOC(5); DEREFHANDLE(result)->Set(0, DEREFWORDHANDLE(nameHandle)); DEREFHANDLE(result)->Set(1, DEREFWORDHANDLE(uidHandle)); DEREFHANDLE(result)->Set(2, DEREFWORDHANDLE(gidHandle)); DEREFHANDLE(result)->Set(3, DEREFWORDHANDLE(homeHandle)); DEREFHANDLE(result)->Set(4, DEREFWORDHANDLE(shellHandle)); return result; } static Handle makeGroupEntry(TaskData *taskData, struct group *grp) { Handle nameHandle, gidHandle, membersHandle, result; int i; char **p; nameHandle = SAVE(C_string_to_Poly(taskData, grp->gr_name)); gidHandle = Make_arbitrary_precision(taskData, grp->gr_gid); /* Group members. */ for (i=0, p = grp->gr_mem; *p != NULL; p++, i++); membersHandle = convert_string_list(taskData, i, grp->gr_mem); result = ALLOC(3); DEREFHANDLE(result)->Set(0, DEREFWORDHANDLE(nameHandle)); DEREFHANDLE(result)->Set(1, DEREFWORDHANDLE(gidHandle)); DEREFHANDLE(result)->Set(2, DEREFWORDHANDLE(membersHandle)); return result; } /* Make a cons cell for a pair of strings. */ // Doesn't currently reset the save vec so it's only safe for a small number // of cells. static void makeStringPairList(TaskData *taskData, Handle &list, const char *s1, const char *s2) { Handle nameHandle, valueHandle, pairHandle, next; /* This has to be done carefully to ensure we don't throw anything away if we garbage-collect and also to ensure that each object is fully initialised before the next object is created. */ /* Make the strings. */ nameHandle = SAVE(C_string_to_Poly(taskData, s1)); valueHandle = SAVE(C_string_to_Poly(taskData, s2)); /* Make the pair. */ pairHandle = ALLOC(2); DEREFHANDLE(pairHandle)->Set(0, DEREFWORDHANDLE(nameHandle)); DEREFHANDLE(pairHandle)->Set(1, DEREFWORDHANDLE(valueHandle)); /* Make the cons cell. */ next = ALLOC(SIZEOF(ML_Cons_Cell)); DEREFLISTHANDLE(next)->h = DEREFWORDHANDLE(pairHandle); DEREFLISTHANDLE(next)->t = DEREFLISTHANDLE(list); list = SAVE(DEREFHANDLE(next)); } /* Return the uname information. */ static Handle getUname(TaskData *taskData) { #ifdef HAVE_SYS_UTSNAME_H struct utsname name; Handle list = SAVE(ListNull); if (uname(&name) < 0) raise_syscall(taskData, "uname failed", errno); makeStringPairList(taskData, list, "sysname", name.sysname); makeStringPairList(taskData, list, "nodename", name.nodename); makeStringPairList(taskData, list, "release", name.release); makeStringPairList(taskData, list, "version", name.version); makeStringPairList(taskData, list, "machine", name.machine); return list; #else raise_syscall(taskData, "uname not available on this machine", errno); #endif } /* Return the contents of a stat buffer. */ static Handle getStatInfo(TaskData *taskData, struct stat *buf) { int kind; Handle result, modeHandle, kindHandle, inoHandle, devHandle, linkHandle; Handle uidHandle, gidHandle, sizeHandle, atimeHandle, mtimeHandle, ctimeHandle; /* Get the protection mode, masking off the file type info. */ modeHandle = Make_unsigned(taskData, buf->st_mode & (S_IRWXU|S_IRWXG|S_IRWXO|S_ISUID|S_ISGID)); if (S_ISDIR(buf->st_mode)) kind = 1; else if (S_ISCHR(buf->st_mode)) kind = 2; else if (S_ISBLK(buf->st_mode)) kind = 3; else if (S_ISFIFO(buf->st_mode)) kind = 4; else if ((buf->st_mode & S_IFMT) == S_IFLNK) kind = 5; else if ((buf->st_mode & S_IFMT) == S_IFSOCK) kind = 6; else /* Regular. */ kind = 0; kindHandle = Make_unsigned(taskData, kind); inoHandle = Make_unsigned(taskData, buf->st_ino); devHandle = Make_unsigned(taskData, buf->st_dev); linkHandle = Make_unsigned(taskData, buf->st_nlink); uidHandle = Make_unsigned(taskData, buf->st_uid); gidHandle = Make_unsigned(taskData, buf->st_gid); sizeHandle = Make_unsigned(taskData, buf->st_size); /* TODO: The only really standard time fields give the seconds part. There are various extensions which would give us microseconds or nanoseconds. */ atimeHandle = Make_arb_from_pair_scaled(taskData, buf->st_atime, 0, 1000000); mtimeHandle = Make_arb_from_pair_scaled(taskData, buf->st_mtime, 0, 1000000); ctimeHandle = Make_arb_from_pair_scaled(taskData, buf->st_ctime, 0, 1000000); result = ALLOC(11); DEREFHANDLE(result)->Set(0, DEREFWORDHANDLE(modeHandle)); DEREFHANDLE(result)->Set(1, DEREFWORDHANDLE(kindHandle)); DEREFHANDLE(result)->Set(2, DEREFWORDHANDLE(inoHandle)); DEREFHANDLE(result)->Set(3, DEREFWORDHANDLE(devHandle)); DEREFHANDLE(result)->Set(4, DEREFWORDHANDLE(linkHandle)); DEREFHANDLE(result)->Set(5, DEREFWORDHANDLE(uidHandle)); DEREFHANDLE(result)->Set(6, DEREFWORDHANDLE(gidHandle)); DEREFHANDLE(result)->Set(7, DEREFWORDHANDLE(sizeHandle)); DEREFHANDLE(result)->Set(8, DEREFWORDHANDLE(atimeHandle)); DEREFHANDLE(result)->Set(9, DEREFWORDHANDLE(mtimeHandle)); DEREFHANDLE(result)->Set(10, DEREFWORDHANDLE(ctimeHandle)); return result; } static Handle getTTYattrs(TaskData *taskData, Handle args) { PIOSTRUCT strm = get_stream(args->WordP()); struct termios tios; speed_t ispeed, ospeed; Handle ifHandle, ofHandle, cfHandle, lfHandle, ccHandle; Handle isHandle, osHandle, result; if (strm == NULL) raise_syscall(taskData, "Stream is closed", EBADF); if (tcgetattr(strm->device.ioDesc, &tios) < 0) raise_syscall(taskData, "tcgetattr failed", errno); /* Extract the speed entries. */ ospeed = cfgetospeed(&tios); ispeed = cfgetispeed(&tios); /* Set the speed entries to zero. In Solaris, at least, the speed is encoded in the flags and we don't want any confusion. The order of these functions is significant. */ cfsetospeed(&tios, B0); cfsetispeed(&tios, B0); /* Convert the values to ML representation. */ ifHandle = Make_unsigned(taskData, tios.c_iflag); ofHandle = Make_unsigned(taskData, tios.c_oflag); cfHandle = Make_unsigned(taskData, tios.c_cflag); lfHandle = Make_unsigned(taskData, tios.c_lflag); /* The cc vector is treated as a string. */ ccHandle = SAVE(Buffer_to_Poly(taskData, (const char *)tios.c_cc, NCCS)); isHandle = Make_unsigned(taskData, ispeed); osHandle = Make_unsigned(taskData, ospeed); /* We can now create the result tuple. */ result = ALLOC(7); DEREFHANDLE(result)->Set(0, DEREFWORDHANDLE(ifHandle)); DEREFHANDLE(result)->Set(1, DEREFWORDHANDLE(ofHandle)); DEREFHANDLE(result)->Set(2, DEREFWORDHANDLE(cfHandle)); DEREFHANDLE(result)->Set(3, DEREFWORDHANDLE(lfHandle)); DEREFHANDLE(result)->Set(4, DEREFWORDHANDLE(ccHandle)); DEREFHANDLE(result)->Set(5, DEREFWORDHANDLE(isHandle)); DEREFHANDLE(result)->Set(6, DEREFWORDHANDLE(osHandle)); return result; } /* Assemble the tios structure from the arguments and set the TTY attributes. */ static Handle setTTYattrs(TaskData *taskData, Handle args) { PIOSTRUCT strm = get_stream(DEREFHANDLE(args)->Get(0).AsObjPtr()); int actions = get_C_long(taskData, DEREFHANDLE(args)->Get(1)); struct termios tios; speed_t ispeed, ospeed; if (strm == NULL) raise_syscall(taskData, "Stream is closed", EBADF); /* Make sure anything unset is zero. It might be better to call tcgetattr instead. */ memset(&tios, 0, sizeof(tios)); tios.c_iflag = get_C_ulong(taskData, DEREFHANDLE(args)->Get(2)); tios.c_oflag = get_C_ulong(taskData, DEREFHANDLE(args)->Get(3)); tios.c_cflag = get_C_ulong(taskData, DEREFHANDLE(args)->Get(4)); tios.c_lflag = get_C_ulong(taskData, DEREFHANDLE(args)->Get(5)); /* The cc vector should be a string of exactly NCCS characters. It may well contain nulls so we can't use Poly_string_to_C to copy it. */ PolyWord ccv = DEREFHANDLE(args)->Get(6); if (ccv.IsTagged()) // Just to check. raise_syscall(taskData, "Incorrect cc vector", EINVAL); PolyStringObject * ccvs = (PolyStringObject *)ccv.AsObjPtr(); if (ccvs->length != NCCS) // Just to check. */ raise_syscall(taskData, "Incorrect cc vector", EINVAL); memcpy(tios.c_cc, ccvs->chars, NCCS); ispeed = get_C_ulong(taskData, DEREFHANDLE(args)->Get(7)); ospeed = get_C_ulong(taskData, DEREFHANDLE(args)->Get(8)); if (cfsetispeed(&tios, ispeed) < 0) raise_syscall(taskData, "cfsetispeed failed", errno); if (cfsetospeed(&tios, ospeed) < 0) raise_syscall(taskData, "cfsetospeed failed", errno); /* Now it's all set we can call tcsetattr to do the work. */ if (tcsetattr(strm->device.ioDesc, actions, &tios) < 0) raise_syscall(taskData, "tcsetattr failed", errno); return Make_arbitrary_precision(taskData, 0); } /* Lock/unlock/test file locks. Returns the, possibly modified, argument structure. */ static Handle lockCommand(TaskData *taskData, int cmd, Handle args) { PIOSTRUCT strm = get_stream(DEREFHANDLE(args)->Get(0).AsObjPtr()); struct flock lock; Handle result, typeHandle, whenceHandle, startHandle, lenHandle, pidHandle; memset(&lock, 0, sizeof(lock)); /* Make sure unused fields are zero. */ if (strm == NULL) raise_syscall(taskData, "Stream is closed", EBADF); lock.l_type = get_C_long(taskData, DEREFHANDLE(args)->Get(1)); lock.l_whence = get_C_long(taskData, DEREFHANDLE(args)->Get(2)); lock.l_start = get_C_long(taskData, DEREFHANDLE(args)->Get(3)); lock.l_len = get_C_long(taskData, DEREFHANDLE(args)->Get(4)); lock.l_pid = get_C_long(taskData, DEREFHANDLE(args)->Get(5)); if (fcntl(strm->device.ioDesc, cmd, &lock) < 0) raise_syscall(taskData, "fcntl failed", errno); /* Construct the result. */ typeHandle = Make_arbitrary_precision(taskData, lock.l_type); whenceHandle = Make_arbitrary_precision(taskData, lock.l_whence); startHandle = Make_arbitrary_precision(taskData, lock.l_start); lenHandle = Make_arbitrary_precision(taskData, lock.l_len); pidHandle = Make_arbitrary_precision(taskData, lock.l_pid); result = ALLOC(5); DEREFHANDLE(result)->Set(0, DEREFWORDHANDLE(typeHandle)); DEREFHANDLE(result)->Set(1, DEREFWORDHANDLE(whenceHandle)); DEREFHANDLE(result)->Set(2, DEREFWORDHANDLE(startHandle)); DEREFHANDLE(result)->Set(3, DEREFWORDHANDLE(lenHandle)); DEREFHANDLE(result)->Set(4, DEREFWORDHANDLE(pidHandle)); return result; } /* This table maps string arguments for sysconf into the corresponding constants. */ /* These are highly OS dependent. It has been configured on Solaris 2.8, Linux Redhat 5.2 and FreeBSD 3.4. */ static struct { const char *saName; int saVal; } sysArgTable[] = { { "_SC_ARG_MAX", _SC_ARG_MAX }, { "_SC_CHILD_MAX", _SC_CHILD_MAX }, { "_SC_CLK_TCK", _SC_CLK_TCK }, { "_SC_NGROUPS_MAX", _SC_NGROUPS_MAX }, { "_SC_OPEN_MAX", _SC_OPEN_MAX }, { "_SC_JOB_CONTROL", _SC_JOB_CONTROL }, { "_SC_SAVED_IDS", _SC_SAVED_IDS }, { "_SC_VERSION", _SC_VERSION }, #ifdef _SC_PASS_MAX { "_SC_PASS_MAX", _SC_PASS_MAX }, #endif #ifdef _SC_LOGNAME_MAX { "_SC_LOGNAME_MAX", _SC_LOGNAME_MAX }, #endif #ifdef _SC_PAGESIZE { "_SC_PAGESIZE", _SC_PAGESIZE }, #endif #ifdef _SC_XOPEN_VERSION { "_SC_XOPEN_VERSION", _SC_XOPEN_VERSION }, #endif #ifdef _SC_NPROCESSORS_CONF { "_SC_NPROCESSORS_CONF", _SC_NPROCESSORS_CONF }, #endif #ifdef _SC_NPROCESSORS_ONLN { "_SC_NPROCESSORS_ONLN", _SC_NPROCESSORS_ONLN }, #endif #ifdef _SC_STREAM_MAX { "_SC_STREAM_MAX", _SC_STREAM_MAX }, #endif #ifdef _SC_TZNAME_MAX { "_SC_TZNAME_MAX", _SC_TZNAME_MAX }, #endif #ifdef _SC_AIO_LISTIO_MAX { "_SC_AIO_LISTIO_MAX", _SC_AIO_LISTIO_MAX }, #endif #ifdef _SC_AIO_MAX { "_SC_AIO_MAX", _SC_AIO_MAX }, #endif #ifdef _SC_AIO_PRIO_DELTA_MAX { "_SC_AIO_PRIO_DELTA_MAX", _SC_AIO_PRIO_DELTA_MAX }, #endif #ifdef _SC_ASYNCHRONOUS_IO { "_SC_ASYNCHRONOUS_IO", _SC_ASYNCHRONOUS_IO }, #endif #ifdef _SC_DELAYTIMER_MAX { "_SC_DELAYTIMER_MAX", _SC_DELAYTIMER_MAX }, #endif #ifdef _SC_FSYNC { "_SC_FSYNC", _SC_FSYNC }, #endif #ifdef _SC_MAPPED_FILES { "_SC_MAPPED_FILES", _SC_MAPPED_FILES }, #endif #ifdef _SC_MEMLOCK { "_SC_MEMLOCK", _SC_MEMLOCK }, #endif #ifdef _SC_MEMLOCK_RANGE { "_SC_MEMLOCK_RANGE", _SC_MEMLOCK_RANGE }, #endif #ifdef _SC_MEMORY_PROTECTION { "_SC_MEMORY_PROTECTION", _SC_MEMORY_PROTECTION }, #endif #ifdef _SC_MESSAGE_PASSING { "_SC_MESSAGE_PASSING", _SC_MESSAGE_PASSING }, #endif #ifdef _SC_MQ_OPEN_MAX { "_SC_MQ_OPEN_MAX", _SC_MQ_OPEN_MAX }, #endif #ifdef _SC_MQ_PRIO_MAX { "_SC_MQ_PRIO_MAX", _SC_MQ_PRIO_MAX }, #endif #ifdef _SC_PRIORITIZED_IO { "_SC_PRIORITIZED_IO", _SC_PRIORITIZED_IO }, #endif #ifdef _SC_PRIORITY_SCHEDULING { "_SC_PRIORITY_SCHEDULING", _SC_PRIORITY_SCHEDULING }, #endif #ifdef _SC_REALTIME_SIGNALS { "_SC_REALTIME_SIGNALS", _SC_REALTIME_SIGNALS }, #endif #ifdef _SC_RTSIG_MAX { "_SC_RTSIG_MAX", _SC_RTSIG_MAX }, #endif #ifdef _SC_SEMAPHORES { "_SC_SEMAPHORES", _SC_SEMAPHORES }, #endif #ifdef _SC_SEM_NSEMS_MAX { "_SC_SEM_NSEMS_MAX", _SC_SEM_NSEMS_MAX }, #endif #ifdef _SC_SEM_VALUE_MAX { "_SC_SEM_VALUE_MAX", _SC_SEM_VALUE_MAX }, #endif #ifdef _SC_SHARED_MEMORY_OBJECTS { "_SC_SHARED_MEMORY_OBJECTS", _SC_SHARED_MEMORY_OBJECTS }, #endif #ifdef _SC_SIGQUEUE_MAX { "_SC_SIGQUEUE_MAX", _SC_SIGQUEUE_MAX }, #endif #ifdef _SC_SIGRT_MIN { "_SC_SIGRT_MIN", _SC_SIGRT_MIN }, #endif #ifdef _SC_SIGRT_MAX { "_SC_SIGRT_MAX", _SC_SIGRT_MAX }, #endif #ifdef _SC_SYNCHRONIZED_IO { "_SC_SYNCHRONIZED_IO", _SC_SYNCHRONIZED_IO }, #endif #ifdef _SC_TIMERS { "_SC_TIMERS", _SC_TIMERS }, #endif #ifdef _SC_TIMER_MAX { "_SC_TIMER_MAX", _SC_TIMER_MAX }, #endif #ifdef _SC_2_C_BIND { "_SC_2_C_BIND", _SC_2_C_BIND }, #endif #ifdef _SC_2_C_DEV { "_SC_2_C_DEV", _SC_2_C_DEV }, #endif #ifdef _SC_2_C_VERSION { "_SC_2_C_VERSION", _SC_2_C_VERSION }, #endif #ifdef _SC_2_FORT_DEV { "_SC_2_FORT_DEV", _SC_2_FORT_DEV }, #endif #ifdef _SC_2_FORT_RUN { "_SC_2_FORT_RUN", _SC_2_FORT_RUN }, #endif #ifdef _SC_2_LOCALEDEF { "_SC_2_LOCALEDEF", _SC_2_LOCALEDEF }, #endif #ifdef _SC_2_SW_DEV { "_SC_2_SW_DEV", _SC_2_SW_DEV }, #endif #ifdef _SC_2_UPE { "_SC_2_UPE", _SC_2_UPE }, #endif #ifdef _SC_2_VERSION { "_SC_2_VERSION", _SC_2_VERSION }, #endif #ifdef _SC_BC_BASE_MAX { "_SC_BC_BASE_MAX", _SC_BC_BASE_MAX }, #endif #ifdef _SC_BC_DIM_MAX { "_SC_BC_DIM_MAX", _SC_BC_DIM_MAX }, #endif #ifdef _SC_BC_SCALE_MAX { "_SC_BC_SCALE_MAX", _SC_BC_SCALE_MAX }, #endif #ifdef _SC_BC_STRING_MAX { "_SC_BC_STRING_MAX", _SC_BC_STRING_MAX }, #endif #ifdef _SC_COLL_WEIGHTS_MAX { "_SC_COLL_WEIGHTS_MAX", _SC_COLL_WEIGHTS_MAX }, #endif #ifdef _SC_EXPR_NEST_MAX { "_SC_EXPR_NEST_MAX", _SC_EXPR_NEST_MAX }, #endif #ifdef _SC_LINE_MAX { "_SC_LINE_MAX", _SC_LINE_MAX }, #endif #ifdef _SC_RE_DUP_MAX { "_SC_RE_DUP_MAX", _SC_RE_DUP_MAX }, #endif #ifdef _SC_XOPEN_CRYPT { "_SC_XOPEN_CRYPT", _SC_XOPEN_CRYPT }, #endif #ifdef _SC_XOPEN_ENH_I18N { "_SC_XOPEN_ENH_I18N", _SC_XOPEN_ENH_I18N }, #endif #ifdef _SC_XOPEN_SHM { "_SC_XOPEN_SHM", _SC_XOPEN_SHM }, #endif #ifdef _SC_2_CHAR_TERM { "_SC_2_CHAR_TERM", _SC_2_CHAR_TERM }, #endif #ifdef _SC_XOPEN_XCU_VERSION { "_SC_XOPEN_XCU_VERSION", _SC_XOPEN_XCU_VERSION }, #endif #ifdef _SC_ATEXIT_MAX { "_SC_ATEXIT_MAX", _SC_ATEXIT_MAX }, #endif #ifdef _SC_IOV_MAX { "_SC_IOV_MAX", _SC_IOV_MAX }, #endif #ifdef _SC_XOPEN_UNIX { "_SC_XOPEN_UNIX", _SC_XOPEN_UNIX }, #endif #ifdef _SC_PAGE_SIZE { "_SC_PAGE_SIZE", _SC_PAGE_SIZE }, #endif #ifdef _SC_T_IOV_MAX { "_SC_T_IOV_MAX", _SC_T_IOV_MAX }, #endif #ifdef _SC_PHYS_PAGES { "_SC_PHYS_PAGES", _SC_PHYS_PAGES }, #endif #ifdef _SC_AVPHYS_PAGES { "_SC_AVPHYS_PAGES", _SC_AVPHYS_PAGES }, #endif #ifdef _SC_COHER_BLKSZ { "_SC_COHER_BLKSZ", _SC_COHER_BLKSZ }, #endif #ifdef _SC_SPLIT_CACHE { "_SC_SPLIT_CACHE", _SC_SPLIT_CACHE }, #endif #ifdef _SC_ICACHE_SZ { "_SC_ICACHE_SZ", _SC_ICACHE_SZ }, #endif #ifdef _SC_DCACHE_SZ { "_SC_DCACHE_SZ", _SC_DCACHE_SZ }, #endif #ifdef _SC_ICACHE_LINESZ { "_SC_ICACHE_LINESZ", _SC_ICACHE_LINESZ }, #endif #ifdef _SC_DCACHE_LINESZ { "_SC_DCACHE_LINESZ", _SC_DCACHE_LINESZ }, #endif #ifdef _SC_ICACHE_BLKSZ { "_SC_ICACHE_BLKSZ", _SC_ICACHE_BLKSZ }, #endif #ifdef _SC_DCACHE_BLKSZ { "_SC_DCACHE_BLKSZ", _SC_DCACHE_BLKSZ }, #endif #ifdef _SC_DCACHE_TBLKSZ { "_SC_DCACHE_TBLKSZ", _SC_DCACHE_TBLKSZ }, #endif #ifdef _SC_ICACHE_ASSOC { "_SC_ICACHE_ASSOC", _SC_ICACHE_ASSOC }, #endif #ifdef _SC_DCACHE_ASSOC { "_SC_DCACHE_ASSOC", _SC_DCACHE_ASSOC }, #endif #ifdef _SC_MAXPID { "_SC_MAXPID", _SC_MAXPID }, #endif #ifdef _SC_STACK_PROT { "_SC_STACK_PROT", _SC_STACK_PROT }, #endif #ifdef _SC_THREAD_DESTRUCTOR_ITERATIONS { "_SC_THREAD_DESTRUCTOR_ITERATIONS", _SC_THREAD_DESTRUCTOR_ITERATIONS }, #endif #ifdef _SC_GETGR_R_SIZE_MAX { "_SC_GETGR_R_SIZE_MAX", _SC_GETGR_R_SIZE_MAX }, #endif #ifdef _SC_GETPW_R_SIZE_MAX { "_SC_GETPW_R_SIZE_MAX", _SC_GETPW_R_SIZE_MAX }, #endif #ifdef _SC_LOGIN_NAME_MAX { "_SC_LOGIN_NAME_MAX", _SC_LOGIN_NAME_MAX }, #endif #ifdef _SC_THREAD_KEYS_MAX { "_SC_THREAD_KEYS_MAX", _SC_THREAD_KEYS_MAX }, #endif #ifdef _SC_THREAD_STACK_MI { "_SC_THREAD_STACK_MIN", _SC_THREAD_STACK_MIN }, #endif #ifdef _SC_THREAD_THREADS_MAX { "_SC_THREAD_THREADS_MAX", _SC_THREAD_THREADS_MAX }, #endif #ifdef _SC_THREAD_ATTR_STACKADDR { "_SC_THREAD_ATTR_STACKADDR", _SC_THREAD_ATTR_STACKADDR }, #endif #ifdef _SC_THREAD_ATTR_STACKSIZE { "_SC_THREAD_ATTR_STACKSIZE", _SC_THREAD_ATTR_STACKSIZE }, #endif #ifdef _SC_THREAD_PRIORITY_SCHEDULING { "_SC_THREAD_PRIORITY_SCHEDULING", _SC_THREAD_PRIORITY_SCHEDULING }, #endif #ifdef _SC_THREAD_PRIO_INHERIT { "_SC_THREAD_PRIO_INHERIT", _SC_THREAD_PRIO_INHERIT }, #endif #ifdef _SC_THREAD_PRIO_PROTECT { "_SC_THREAD_PRIO_PROTECT", _SC_THREAD_PRIO_PROTECT }, #endif #ifdef _SC_THREAD_PROCESS_SHARED { "_SC_THREAD_PROCESS_SHARED", _SC_THREAD_PROCESS_SHARED }, #endif #ifdef _SC_XOPEN_LEGACY { "_SC_XOPEN_LEGACY", _SC_XOPEN_LEGACY }, #endif #ifdef _SC_XOPEN_REALTIME { "_SC_XOPEN_REALTIME", _SC_XOPEN_REALTIME }, #endif #ifdef _SC_XOPEN_REALTIME_THREADS { "_SC_XOPEN_REALTIME_THREADS", _SC_XOPEN_REALTIME_THREADS }, #endif #ifdef _SC_XBS5_ILP32_OFF32 { "_SC_XBS5_ILP32_OFF32", _SC_XBS5_ILP32_OFF32 }, #endif #ifdef _SC_XBS5_ILP32_OFFBIG { "_SC_XBS5_ILP32_OFFBIG", _SC_XBS5_ILP32_OFFBIG }, #endif #ifdef _SC_XBS5_LP64_OFF64 { "_SC_XBS5_LP64_OFF64", _SC_XBS5_LP64_OFF64 }, #endif #ifdef _SC_XBS5_LPBIG_OFFBIG { "_SC_XBS5_LPBIG_OFFBIG", _SC_XBS5_LPBIG_OFFBIG }, #endif #ifdef _SC_EQUIV_CLASS_MAX { "_SC_EQUIV_CLASS_MAX", _SC_EQUIV_CLASS_MAX }, #endif #ifdef _SC_CHARCLASS_NAME_MAX { "_SC_CHARCLASS_NAME_MAX", _SC_CHARCLASS_NAME_MAX }, #endif #ifdef _SC_PII { "_SC_PII", _SC_PII }, #endif #ifdef _SC_PII_XTI { "_SC_PII_XTI", _SC_PII_XTI }, #endif #ifdef _SC_PII_SOCKET { "_SC_PII_SOCKET", _SC_PII_SOCKET }, #endif #ifdef _SC_PII_INTERNET { "_SC_PII_INTERNET", _SC_PII_INTERNET }, #endif #ifdef _SC_PII_OSI { "_SC_PII_OSI", _SC_PII_OSI }, #endif #ifdef _SC_POLL { "_SC_POLL", _SC_POLL }, #endif #ifdef _SC_SELECT { "_SC_SELECT", _SC_SELECT }, #endif #ifdef _SC_UIO_MAXIOV { "_SC_UIO_MAXIOV", _SC_UIO_MAXIOV }, #endif #ifdef _SC_PII_INTERNET_STREAM { "_SC_PII_INTERNET_STREAM", _SC_PII_INTERNET_STREAM }, #endif #ifdef _SC_PII_INTERNET_DGRAM { "_SC_PII_INTERNET_DGRAM", _SC_PII_INTERNET_DGRAM }, #endif #ifdef _SC_PII_OSI_COTS { "_SC_PII_OSI_COTS", _SC_PII_OSI_COTS }, #endif #ifdef _SC_PII_OSI_CLTS { "_SC_PII_OSI_CLTS", _SC_PII_OSI_CLTS }, #endif #ifdef _SC_PII_OSI_M { "_SC_PII_OSI_M", _SC_PII_OSI_M }, #endif #ifdef _SC_T_IOV_MAX { "_SC_T_IOV_MAX", _SC_T_IOV_MAX }, #endif #ifdef _SC_THREADS { "_SC_THREADS", _SC_THREADS }, #endif #ifdef _SC_THREAD_SAFE_FUNCTIONS { "_SC_THREAD_SAFE_FUNCTIONS", _SC_THREAD_SAFE_FUNCTIONS }, #endif #ifdef _SC_TTY_NAME_MAX { "_SC_TTY_NAME_MAX", _SC_TTY_NAME_MAX }, #endif #ifdef _SC_XOPEN_XPG2 { "_SC_XOPEN_XPG2", _SC_XOPEN_XPG2 }, #endif #ifdef _SC_XOPEN_XPG3 { "_SC_XOPEN_XPG3", _SC_XOPEN_XPG3 }, #endif #ifdef _SC_XOPEN_XPG4 { "_SC_XOPEN_XPG4", _SC_XOPEN_XPG4 }, #endif #ifdef _SC_CHAR_BIT { "_SC_CHAR_BIT", _SC_CHAR_BIT }, #endif #ifdef _SC_CHAR_MAX { "_SC_CHAR_MAX", _SC_CHAR_MAX }, #endif #ifdef _SC_CHAR_MIN { "_SC_CHAR_MIN", _SC_CHAR_MIN }, #endif #ifdef _SC_INT_MAX { "_SC_INT_MAX", _SC_INT_MAX }, #endif #ifdef _SC_INT_MIN { "_SC_INT_MIN", _SC_INT_MIN }, #endif #ifdef _SC_LONG_BIT { "_SC_LONG_BIT", _SC_LONG_BIT }, #endif #ifdef _SC_WORD_BIT { "_SC_WORD_BIT", _SC_WORD_BIT }, #endif #ifdef _SC_MB_LEN_MAX { "_SC_MB_LEN_MAX", _SC_MB_LEN_MAX }, #endif #ifdef _SC_NZERO { "_SC_NZERO", _SC_NZERO }, #endif #ifdef _SC_SSIZE_MAX { "_SC_SSIZE_MAX", _SC_SSIZE_MAX }, #endif #ifdef _SC_SCHAR_MAX { "_SC_SCHAR_MAX", _SC_SCHAR_MAX }, #endif #ifdef _SC_SCHAR_MIN { "_SC_SCHAR_MIN", _SC_SCHAR_MIN }, #endif #ifdef _SC_SHRT_MAX { "_SC_SHRT_MAX", _SC_SHRT_MAX }, #endif #ifdef _SC_SHRT_MIN { "_SC_SHRT_MIN", _SC_SHRT_MIN }, #endif #ifdef _SC_UCHAR_MAX { "_SC_UCHAR_MAX", _SC_UCHAR_MAX }, #endif #ifdef _SC_UINT_MAX { "_SC_UINT_MAX", _SC_UINT_MAX }, #endif #ifdef _SC_ULONG_MAX { "_SC_ULONG_MAX", _SC_ULONG_MAX }, #endif #ifdef _SC_USHRT_MAX { "_SC_USHRT_MAX", _SC_USHRT_MAX }, #endif #ifdef _SC_NL_ARGMAX { "_SC_NL_ARGMAX", _SC_NL_ARGMAX }, #endif #ifdef _SC_NL_LANGMAX { "_SC_NL_LANGMAX", _SC_NL_LANGMAX }, #endif #ifdef _SC_NL_MSGMAX { "_SC_NL_MSGMAX", _SC_NL_MSGMAX }, #endif #ifdef _SC_NL_NMAX { "_SC_NL_NMAX", _SC_NL_NMAX }, #endif #ifdef _SC_NL_SETMAX { "_SC_NL_SETMAX", _SC_NL_SETMAX }, #endif }; static Handle getSysConf(TaskData *taskData, Handle args) { char argName[200]; int length; unsigned i; long res; length = Poly_string_to_C(DEREFWORD(args), argName, 200); if (length > 200) raise_syscall(taskData, "Argument name too long", ENAMETOOLONG); for (i = 0; i < sizeof(sysArgTable)/sizeof(sysArgTable[0]); i++) { if (strcmp(argName, sysArgTable[i].saName) == 0) break; /* See if it matches without the _SC_ at the beginning. */ if (strcmp(argName, sysArgTable[i].saName+4) == 0) break; } if (i == sizeof(sysArgTable)/sizeof(sysArgTable[0])) raise_syscall(taskData, "sysconf argument not found", EINVAL); errno = 0; /* Sysconf may return -1 without updating errno. */ res = sysconf(sysArgTable[i].saVal); if (res < 0) raise_syscall(taskData, "sysconf failed", errno); return Make_arbitrary_precision(taskData, res); } static struct { const char *pcName; int pcVal; } pathConfTable[] = { { "_PC_LINK_MAX", _PC_LINK_MAX }, { "_PC_MAX_CANON", _PC_MAX_CANON }, { "_PC_MAX_INPUT", _PC_MAX_INPUT }, { "_PC_NAME_MAX", _PC_NAME_MAX }, { "_PC_PATH_MAX", _PC_PATH_MAX }, { "_PC_PIPE_BUF", _PC_PIPE_BUF }, { "_PC_NO_TRUNC", _PC_NO_TRUNC }, { "_PC_VDISABLE", _PC_VDISABLE }, { "_PC_CHOWN_RESTRICTED", _PC_CHOWN_RESTRICTED }, #ifdef _PC_ASYNC_IO { "_PC_ASYNC_IO", _PC_ASYNC_IO }, #endif #ifdef _PC_PRIO_IO { "_PC_PRIO_IO", _PC_PRIO_IO }, #endif #ifdef _PC_SYNC_IO { "_PC_SYNC_IO", _PC_SYNC_IO }, #endif #ifdef _PC_FILESIZEBITS { "_PC_FILESIZEBITS", _PC_FILESIZEBITS }, #endif #ifdef _PC_SOCK_MAXBUF { "_PC_SOCK_MAXBUF", _PC_SOCK_MAXBUF }, #endif }; /* Look up a path variable in the table. */ static int findPathVar(TaskData *taskData, PolyWord ps) { char argName[200]; int length; unsigned i; length = Poly_string_to_C(ps, argName, 200); if (length > 200) raise_syscall(taskData, "Argument name too long", ENAMETOOLONG); for (i = 0; i < sizeof(pathConfTable)/sizeof(pathConfTable[0]); i++) { if (strcmp(argName, pathConfTable[i].pcName) == 0) return pathConfTable[i].pcVal; /* See if it matches without the _PC_ at the beginning. */ if (strcmp(argName, pathConfTable[i].pcName+4) == 0) return pathConfTable[i].pcVal; } raise_syscall(taskData, "pathconf argument not found", EINVAL); } class UnixSpecific: public RtsModule { public: virtual void Init(void); }; // Declare this. It will be automatically added to the table. static UnixSpecific unixModule; void UnixSpecific::Init(void) { struct sigaction sigcatch; /* Ignore SIGPIPE - return any errors as failure to write. */ memset(&sigcatch, 0, sizeof(sigcatch)); sigcatch.sa_handler = SIG_IGN; sigaction(SIGPIPE, &sigcatch, NULL); } polyml.5.2.1/libpolyml/version.h0000644000175000017500000000261511076111240015632 0ustar daviddavid/* Title: version.h Copyright (c) 2000-7 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef VERSION_H_INCLUDED #define VERSION_H_INCLUDED // Poly/ML system interface level #define POLY_version_number 520 // POLY_version_number is written into all exported files and tested // when we start up. The idea is to ensure that if a file is exported // from one version of the library it will run successfully if linked // with a different version. // We currently export version 5.2 but will support either that or 5.1. #define FIRST_supported_version 510 #define LAST_supported_version 520 #define TextVersion "5.2.1" #endif polyml.5.2.1/libpolyml/windows_specific.cpp0000644000175000017500000013517510772160234020060 0ustar daviddavid/* Title: Operating Specific functions: Windows version. Copyright (c) 2000 David C. J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifdef WIN32 #include "winconfig.h" #else #include "config.h" #endif #ifdef HAVE_STDIO_H #include #endif #include #ifdef USEWINSOCK2 #include #else #include #endif #ifdef HAVE_TCHAR_H #include #endif #ifdef HAVE_IO_H #include #endif #ifdef HAVE_FCNTL_H #include #endif #ifdef HAVE_ERRNO_H #include #endif #include #include "globals.h" #include "arb.h" #include "gc.h" #include "run_time.h" #include "io_internal.h" #include "os_specific.h" #include "sys.h" #include "processes.h" #include "Console.h" #include "mpoly.h" #include "diagnostics.h" #include "scanaddrs.h" #include "polystring.h" #include "save_vec.h" #include "rts_module.h" #include "machine_dep.h" #define STREAMID(x) (DEREFSTREAMHANDLE(x)->streamNo) #define SAVE(x) taskData->saveVec.push(x) #define SIZEOF(x) (sizeof(x)/sizeof(word)) typedef enum { HE_UNUSED, HE_REGISTRY, HE_PROCESS, HE_DDECONVERSATION } HANDENTRYTYPE; /* Table of open handles. This is modelled after the IO table in basicio.c and performs a similar function. Each resource has an entry in here and there is a token which is an ML object. The token is simply a word containing the index in the table. It is the token itself which represents the entry within the ML world. The token is checked against the entry whenever it is used since it is possible for the tokens to be persistent although the corresponding entry in the table will not make sense in a subsequent session. This table also allows us to garbage-collect entries since if the token becomes unreachable we know that there is no longer a reference to the entry within ML. */ typedef struct { PolyObject *token; /* pointer into ML heap */ HANDENTRYTYPE entryType; /* Type of handle */ union { HKEY hKey; /* Registry key. */ struct { /* Process and IO channels. */ HANDLE hProcess, hInput, hOutput; PolyObject *readToken, *writeToken; } process; HCONV hcDDEConv; /* DDE Conversation. */ } entry; } HANDLETAB, *PHANDLETAB; static PHANDLETAB handleTable; static POLYUNSIGNED maxHandleTab; /* General "close" function which may be called from the garbage-collector. */ static void close_handle(PHANDLETAB pTab) { switch (pTab->entryType) { case HE_REGISTRY: RegCloseKey(pTab->entry.hKey); break; case HE_PROCESS: if (pTab->entry.process.hProcess) CloseHandle(pTab->entry.process.hProcess); if (pTab->entry.process.hInput != INVALID_HANDLE_VALUE) CloseHandle(pTab->entry.process.hInput); if (pTab->entry.process.hOutput != INVALID_HANDLE_VALUE) CloseHandle(pTab->entry.process.hOutput); break; case HE_DDECONVERSATION: CloseDDEConversation(pTab->entry.hcDDEConv); break; case HE_UNUSED: break; // Avoid warnings } pTab->token = 0; pTab->entryType = HE_UNUSED; } static PHANDLETAB get_handle(PolyWord token, HANDENTRYTYPE heType) { StreamToken *handle_token = (StreamToken*)token.AsObjPtr(); POLYUNSIGNED handle_no = handle_token->streamNo; if (handle_no >= maxHandleTab || handleTable[handle_no].token != handle_token || handleTable[handle_no].entryType != heType) return 0; return &handleTable[handle_no]; } static Handle make_handle_entry(TaskData *taskData) { POLYUNSIGNED handle_no; Handle str_token; bool have_collected = false; do { for(handle_no = 0; handle_no < maxHandleTab && handleTable[handle_no].token != 0; handle_no++); /* Check we have enough space. */ if (handle_no >= maxHandleTab) { /* No space. */ /* See if we have unreferenced streams. */ if (! have_collected) { FullGC(taskData); have_collected = true; } else /* No space - expand vector. */ { int oldMax = maxHandleTab; maxHandleTab += maxHandleTab/2; handleTable = (PHANDLETAB)realloc(handleTable, maxHandleTab*sizeof(HANDLETAB)); /* Clear the new space. */ memset(handleTable+oldMax, 0, (maxHandleTab-oldMax)*sizeof(HANDLETAB)); } } } while (handle_no >= maxHandleTab); str_token = alloc_and_save(taskData, 1, F_BYTE_OBJ); STREAMID(str_token) = handle_no; /* Clear the entry then set the token. */ memset(&handleTable[handle_no], 0, sizeof(HANDLETAB)); handleTable[handle_no].token = DEREFWORDHANDLE(str_token); return str_token; } static Handle execute(TaskData *taskData, Handle pname); static Handle simpleExecute(TaskData *taskData, Handle args); static Handle openProcessHandle(TaskData *taskData, Handle args, BOOL fIsRead, BOOL fIsText); static Handle openRegistryKey(TaskData *taskData, Handle args, HKEY hkParent); static Handle createRegistryKey(TaskData *taskData, Handle args, HKEY hkParent); static Handle queryRegistryKey(TaskData *taskData, Handle args, HKEY hkParent); static Handle setRegistryKey(TaskData *taskData, Handle args, HKEY hkParent); static Handle deleteRegistryKey(TaskData *taskData, Handle args, HKEY hkParent); static Handle deleteRegistryValue(TaskData *taskData, Handle args, HKEY hkParent); static Handle enumerateRegistry(TaskData *taskData, Handle args, HKEY hkey, BOOL isKey); // Vector of constants returned by call1006 static int winConstVec[] = { KEY_ALL_ACCESS, // 0 KEY_CREATE_LINK, KEY_CREATE_SUB_KEY, KEY_ENUMERATE_SUB_KEYS, KEY_EXECUTE, KEY_NOTIFY, KEY_QUERY_VALUE, KEY_READ, KEY_SET_VALUE, KEY_WRITE, // 9 STATUS_ACCESS_VIOLATION, // 10 STATUS_ARRAY_BOUNDS_EXCEEDED, STATUS_BREAKPOINT, STATUS_CONTROL_C_EXIT, STATUS_DATATYPE_MISALIGNMENT, STATUS_FLOAT_DENORMAL_OPERAND, STATUS_FLOAT_DIVIDE_BY_ZERO, STATUS_FLOAT_INEXACT_RESULT, STATUS_FLOAT_INVALID_OPERATION, STATUS_FLOAT_OVERFLOW, STATUS_FLOAT_STACK_CHECK, STATUS_FLOAT_UNDERFLOW, STATUS_GUARD_PAGE_VIOLATION, STATUS_INTEGER_DIVIDE_BY_ZERO, STATUS_INTEGER_OVERFLOW, STATUS_ILLEGAL_INSTRUCTION, STATUS_INVALID_DISPOSITION, #ifdef STATUS_INVALID_HANDLE STATUS_INVALID_HANDLE, #else 0, // Not defined in Win CE #endif STATUS_IN_PAGE_ERROR, STATUS_NONCONTINUABLE_EXCEPTION, STATUS_PENDING, STATUS_PRIVILEGED_INSTRUCTION, STATUS_SINGLE_STEP, STATUS_STACK_OVERFLOW, STATUS_TIMEOUT, STATUS_USER_APC, // 35 VER_PLATFORM_WIN32s, // 36 VER_PLATFORM_WIN32_WINDOWS, VER_PLATFORM_WIN32_NT, // 38 // VER_PLATFORM_WIN32_CE is only defined in the Windows CE headers #ifdef VER_PLATFORM_WIN32_CE VER_PLATFORM_WIN32_CE, // 39 #else 3, // 39 #endif }; HKEY hkPredefinedKeyTab[] = { HKEY_CLASSES_ROOT, HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE, HKEY_USERS, #ifdef HKEY_PERFORMANCE_DATA HKEY_PERFORMANCE_DATA, #else 0, // Not defined in Win CE #endif #ifdef HKEY_CURRENT_CONFIG HKEY_CURRENT_CONFIG, #else 0, #endif #ifdef HKEY_DYN_DATA HKEY_DYN_DATA #else 0 #endif }; Handle OS_spec_dispatch_c(TaskData *taskData, Handle args, Handle code) { int c = get_C_long(taskData, DEREFWORD(code)); switch (c) { case 0: /* Return our OS type. Not in any structure. */ return Make_arbitrary_precision(taskData, 1); /* 1 for Windows. */ /* Windows-specific functions. */ case 1000: /* execute */ return execute(taskData, args); case 1001: /* Get input stream as text. */ return openProcessHandle(taskData, args, TRUE, TRUE); case 1002: /* Get output stream as text. */ return openProcessHandle(taskData, args, FALSE, TRUE); case 1003: /* Get input stream as binary. */ return openProcessHandle(taskData, args, TRUE, FALSE); case 1004: /* Get output stream as binary. */ return openProcessHandle(taskData, args, FALSE, FALSE); case 1005: /* Get result of process. */ { PHANDLETAB hnd = get_handle(DEREFWORD(args), HE_PROCESS); DWORD dwResult; if (hnd == 0) raise_syscall(taskData, "Process is closed", EINVAL); // Close the streams. Either of them may have been // passed to the stream package. if (hnd->entry.process.hInput != INVALID_HANDLE_VALUE) CloseHandle(hnd->entry.process.hInput); hnd->entry.process.hInput = INVALID_HANDLE_VALUE; if (hnd->entry.process.readToken) { PIOSTRUCT strm = get_stream(hnd->entry.process.readToken); if (strm != NULL) close_stream(strm); } hnd->entry.process.readToken = 0; if (hnd->entry.process.hOutput != INVALID_HANDLE_VALUE) CloseHandle(hnd->entry.process.hOutput); hnd->entry.process.hOutput = INVALID_HANDLE_VALUE; if (hnd->entry.process.writeToken) { PIOSTRUCT strm = get_stream(hnd->entry.process.writeToken); if (strm != NULL) close_stream(strm); } hnd->entry.process.writeToken = 0; // See if it's finished. if (GetExitCodeProcess(hnd->entry.process.hProcess, &dwResult) == 0) raise_syscall(taskData, "GetExitCodeProcess failed", -(int)GetLastError()); if (dwResult == STILL_ACTIVE) /* Run some other ML processes and come back in at the top some time later*/ processes->BlockAndRestart(taskData, -1, false, POLY_SYS_os_specific); /* Finished - return the result. */ /* Note: we haven't closed the handle because we might want to ask for the result again. We only close it when we've garbage-collected the token. Doing this runs the risk of running out of handles. Maybe change it and remember the result in ML. */ return Make_unsigned(taskData, dwResult); } case 1006: /* Return a constant. */ { int i = get_C_long(taskData, DEREFWORD(args)); if (i < 0 || i >= (int)(sizeof(winConstVec)/sizeof(winConstVec[0]))) raise_syscall(taskData, "Invalid index", 0); return Make_unsigned(taskData, winConstVec[i]); } /* Registry functions. */ case 1007: // Open a key within one of the roots. { unsigned keyIndex = get_C_ulong(taskData, DEREFWORDHANDLE(args)->Get(0)); // This should only ever happen as a result of a fault in // the Windows structure. if (keyIndex >= sizeof(hkPredefinedKeyTab)/sizeof(hkPredefinedKeyTab[0])) raise_syscall(taskData, "Invalid index", 0); return openRegistryKey(taskData, args, hkPredefinedKeyTab[keyIndex]); } case 1008: // Open a subkey of an opened key. { PHANDLETAB hnd = get_handle(DEREFHANDLE(args)->Get(0), HE_REGISTRY); if (hnd == 0) raise_syscall(taskData, "Handle is closed", -ERROR_INVALID_HANDLE); return openRegistryKey(taskData, args, hnd->entry.hKey); } case 1009: // Create a subkey within one of the roots. { unsigned keyIndex = get_C_ulong(taskData, DEREFWORDHANDLE(args)->Get(0)); // This should only ever happen as a result of a fault in // the Windows structure. if (keyIndex >= sizeof(hkPredefinedKeyTab)/sizeof(hkPredefinedKeyTab[0])) raise_syscall(taskData, "Invalid index", 0); return createRegistryKey(taskData, args, hkPredefinedKeyTab[keyIndex]); } case 1010: // Create a subkey within an opened key. { PHANDLETAB hnd = get_handle(DEREFHANDLE(args)->Get(0), HE_REGISTRY); if (hnd == 0) raise_syscall(taskData, "Handle is closed", -ERROR_INVALID_HANDLE); return createRegistryKey(taskData, args, hnd->entry.hKey); } case 1011: // Close a registry handle. { PHANDLETAB hnd = get_handle(DEREFWORD(args), HE_REGISTRY); if (hnd != 0) close_handle(hnd); return Make_arbitrary_precision(taskData, 0); } case 1012: // Get a value { unsigned keyIndex = get_C_ulong(taskData, DEREFWORDHANDLE(args)->Get(0)); // This should only ever happen as a result of a fault in // the Windows structure. if (keyIndex >= sizeof(hkPredefinedKeyTab)/sizeof(hkPredefinedKeyTab[0])) raise_syscall(taskData, "Invalid index", 0); return queryRegistryKey(taskData, args, hkPredefinedKeyTab[keyIndex]); } case 1013: // Get a value { PHANDLETAB hnd = get_handle(DEREFHANDLE(args)->Get(0), HE_REGISTRY); if (hnd == 0) raise_syscall(taskData, "Handle is closed", -ERROR_INVALID_HANDLE); return queryRegistryKey(taskData, args, hnd->entry.hKey); } case 1014: // Delete a subkey { unsigned keyIndex = get_C_ulong(taskData, DEREFWORDHANDLE(args)->Get(0)); // This should only ever happen as a result of a fault in // the Windows structure. if (keyIndex >= sizeof(hkPredefinedKeyTab)/sizeof(hkPredefinedKeyTab[0])) raise_syscall(taskData, "Invalid index", 0); return deleteRegistryKey(taskData, args, hkPredefinedKeyTab[keyIndex]); } case 1015: // Delete a subkey { PHANDLETAB hnd = get_handle(DEREFHANDLE(args)->Get(0), HE_REGISTRY); if (hnd == 0) raise_syscall(taskData, "Handle is closed", -ERROR_INVALID_HANDLE); return deleteRegistryKey(taskData, args, hnd->entry.hKey); } case 1016: // Set a value { unsigned keyIndex = get_C_ulong(taskData, DEREFWORDHANDLE(args)->Get(0)); // This should only ever happen as a result of a fault in // the Windows structure. if (keyIndex >= sizeof(hkPredefinedKeyTab)/sizeof(hkPredefinedKeyTab[0])) raise_syscall(taskData, "Invalid index", 0); return setRegistryKey(taskData, args, hkPredefinedKeyTab[keyIndex]); } case 1017: // Set a value { PHANDLETAB hnd = get_handle(DEREFHANDLE(args)->Get(0), HE_REGISTRY); if (hnd == 0) raise_syscall(taskData, "Handle is closed", -ERROR_INVALID_HANDLE); return setRegistryKey(taskData, args, hnd->entry.hKey); } case 1018: // Enumerate a key in the predefined keys { unsigned keyIndex = get_C_ulong(taskData, DEREFWORDHANDLE(args)->Get(0)); if (keyIndex >= sizeof(hkPredefinedKeyTab)/sizeof(hkPredefinedKeyTab[0])) raise_syscall(taskData, "Invalid index", 0); return enumerateRegistry(taskData, args, hkPredefinedKeyTab[keyIndex], TRUE); } case 1019: // Enumerate a key in an opened key { PHANDLETAB hnd = get_handle(DEREFHANDLE(args)->Get(0), HE_REGISTRY); if (hnd == 0) raise_syscall(taskData, "Handle is closed", -ERROR_INVALID_HANDLE); return enumerateRegistry(taskData, args, hnd->entry.hKey, TRUE); } case 1020: // Enumerate a value in the predefined keys { unsigned keyIndex = get_C_ulong(taskData, DEREFWORDHANDLE(args)->Get(0)); if (keyIndex >= sizeof(hkPredefinedKeyTab)/sizeof(hkPredefinedKeyTab[0])) raise_syscall(taskData, "Invalid index", 0); return enumerateRegistry(taskData, args, hkPredefinedKeyTab[keyIndex], FALSE); } case 1021: // Enumerate a value in an opened key { PHANDLETAB hnd = get_handle(DEREFHANDLE(args)->Get(0), HE_REGISTRY); if (hnd == 0) raise_syscall(taskData, "Handle is closed", -ERROR_INVALID_HANDLE); return enumerateRegistry(taskData, args, hnd->entry.hKey, FALSE); } case 1022: // Delete a value { unsigned keyIndex = get_C_ulong(taskData, DEREFWORDHANDLE(args)->Get(0)); // This should only ever happen as a result of a fault in // the Windows structure. if (keyIndex >= sizeof(hkPredefinedKeyTab)/sizeof(hkPredefinedKeyTab[0])) raise_syscall(taskData, "Invalid index", 0); return deleteRegistryValue(taskData, args, hkPredefinedKeyTab[keyIndex]); } case 1023: // Delete a value { PHANDLETAB hnd = get_handle(DEREFHANDLE(args)->Get(0), HE_REGISTRY); if (hnd == 0) raise_syscall(taskData, "Handle is closed", -ERROR_INVALID_HANDLE); return deleteRegistryValue(taskData, args, hnd->entry.hKey); } case 1030: // Convert UTC time values to local time. { FILETIME ftUTC, ftLocal; /* Get the file time. */ get_C_pair(taskData, DEREFWORDHANDLE(args), &ftUTC.dwHighDateTime, &ftUTC.dwLowDateTime); if (! FileTimeToLocalFileTime(&ftUTC, &ftLocal)) raise_syscall(taskData, "FileTimeToLocalFileTime failed", -(int)GetLastError()); return Make_arb_from_pair(taskData, ftLocal.dwHighDateTime, ftLocal.dwLowDateTime); } case 1031: // Convert local time values to UTC. { FILETIME ftUTC, ftLocal; /* Get the file time. */ get_C_pair(taskData, DEREFWORDHANDLE(args), &ftLocal.dwHighDateTime, &ftLocal.dwLowDateTime); if (! LocalFileTimeToFileTime(&ftLocal, &ftUTC)) raise_syscall(taskData, "LocalFileTimeToFileTime failed", -(int)GetLastError()); return Make_arb_from_pair(taskData, ftUTC.dwHighDateTime, ftUTC.dwLowDateTime); } case 1032: // Get volume information. { char rootName[MAX_PATH], volName[MAX_PATH], sysName[MAX_PATH]; DWORD dwVolSerial, dwMaxComponentLen, dwFlags; Handle volHandle, sysHandle, serialHandle, maxCompHandle; Handle resultHandle; int length = Poly_string_to_C(DEREFWORD(args), rootName, MAX_PATH); if (length > MAX_PATH) raise_syscall(taskData, "Root name too long", ENAMETOOLONG); if (!GetVolumeInformation(rootName, volName, MAX_PATH, &dwVolSerial, &dwMaxComponentLen, &dwFlags, sysName, MAX_PATH)) raise_syscall(taskData, "GetVolumeInformation failed", -(int)GetLastError()); volHandle = SAVE(C_string_to_Poly(taskData, volName)); sysHandle = SAVE(C_string_to_Poly(taskData, sysName)); serialHandle = Make_unsigned(taskData, dwVolSerial); maxCompHandle = Make_unsigned(taskData, dwMaxComponentLen); resultHandle = alloc_and_save(taskData, 4); DEREFHANDLE(resultHandle)->Set(0, DEREFWORDHANDLE(volHandle)); DEREFHANDLE(resultHandle)->Set(1, DEREFWORDHANDLE(sysHandle)); DEREFHANDLE(resultHandle)->Set(2, DEREFWORDHANDLE(serialHandle)); DEREFHANDLE(resultHandle)->Set(3, DEREFWORDHANDLE(maxCompHandle)); return resultHandle; } case 1033: { char fileName[MAX_PATH], execName[MAX_PATH]; int length = Poly_string_to_C(DEREFWORD(args), fileName, MAX_PATH); HINSTANCE hInst; if (length > MAX_PATH) raise_syscall(taskData, "File name too long", ENAMETOOLONG); hInst = FindExecutable(fileName, NULL, execName); if ((unsigned)hInst <= 32) { raise_syscall(taskData, "FindExecutable failed", -(int)hInst); } return SAVE(C_string_to_Poly(taskData, execName)); } case 1034: // Open a document { SHELLEXECUTEINFO shellEx; memset(&shellEx, 0, sizeof(shellEx)); shellEx.cbSize = sizeof(shellEx); shellEx.lpVerb = _T("open"); shellEx.lpFile = Poly_string_to_T_alloc(DEREFWORD(args)); shellEx.hwnd = hMainWindow; shellEx.nShow = SW_SHOWNORMAL; BOOL fRes = ShellExecuteEx(&shellEx); free((void*)shellEx.lpFile); if (! fRes) raise_syscall(taskData, "ShellExecuteEx failed", 0-GetLastError()); return Make_arbitrary_precision(taskData, 0); } case 1035: // Launch an application. { SHELLEXECUTEINFO shellEx; memset(&shellEx, 0, sizeof(shellEx)); shellEx.cbSize = sizeof(shellEx); shellEx.lpVerb = _T("open"); shellEx.lpFile = Poly_string_to_T_alloc(args->WordP()->Get(0)); shellEx.lpParameters = Poly_string_to_T_alloc(args->WordP()->Get(1)); shellEx.nShow = SW_SHOWNORMAL; BOOL fRes = ShellExecuteEx(&shellEx); free((void*)shellEx.lpFile); free((void*)shellEx.lpParameters); if (! fRes) raise_syscall(taskData, "ShellExecuteEx failed", 0-GetLastError()); return Make_arbitrary_precision(taskData, 0); } case 1036: // Does the process have its own console? return Make_arbitrary_precision(taskData, hMainWindow != NULL ? 1: 0); case 1037: // Simple execute. return simpleExecute(taskData, args); // DDE case 1038: // Start DDE dialogue. { Handle handToken; PHANDLETAB pTab; HCONV hcDDEConv; char *serviceName = Poly_string_to_C_alloc(args->WordP()->Get(0)); char *topicName = Poly_string_to_C_alloc(args->WordP()->Get(1)); /* Send a request to the main thread to do the work. */ hcDDEConv = StartDDEConversation(serviceName, topicName); free(serviceName); free(topicName); if (hcDDEConv == 0) raise_syscall(taskData, "DdeConnect failed", 0); // Create an entry to return the conversation. handToken = make_handle_entry(taskData); pTab = &handleTable[STREAMID(handToken)]; pTab->entryType = HE_DDECONVERSATION; pTab->entry.hcDDEConv = hcDDEConv; return handToken; } case 1039: // Send DDE execute request. { PHANDLETAB hnd = get_handle(DEREFHANDLE(args)->Get(0), HE_DDECONVERSATION); LRESULT res; char *command; if (hnd == NULL) { raise_syscall(taskData, "DDE Conversation is closed", 0); } command = Poly_string_to_C_alloc(args->WordP()->Get(1)); /* Send a request to the main thread to do the work. */ res = ExecuteDDE(command, hnd->entry.hcDDEConv); free(command); if (res == -1) raise_syscall(taskData, "DdeClientTransaction failed", 0); else return Make_arbitrary_precision(taskData, res); } case 1040: // Close a DDE conversation. { PHANDLETAB hnd = get_handle(args->Word(), HE_DDECONVERSATION); if (hnd != 0) close_handle(hnd); return Make_arbitrary_precision(taskData, 0); } // Configuration functions. case 1050: // Get version data { OSVERSIONINFO osver; Handle resVal, major, minor, build, platform, version; osver.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); if (! GetVersionEx(&osver)) raise_syscall(taskData, "GetVersionEx failed", -(int)GetLastError()); major = Make_unsigned(taskData, osver.dwMajorVersion); minor = Make_unsigned(taskData, osver.dwMinorVersion); build = Make_unsigned(taskData, osver.dwBuildNumber); platform = Make_unsigned(taskData, osver.dwPlatformId); version = SAVE(C_string_to_Poly(taskData, osver.szCSDVersion)); resVal = alloc_and_save(taskData, 5); DEREFHANDLE(resVal)->Set(0, DEREFWORDHANDLE(major)); DEREFHANDLE(resVal)->Set(1, DEREFWORDHANDLE(minor)); DEREFHANDLE(resVal)->Set(2, DEREFWORDHANDLE(build)); DEREFHANDLE(resVal)->Set(3, DEREFWORDHANDLE(platform)); DEREFHANDLE(resVal)->Set(4, DEREFWORDHANDLE(version)); return resVal; } case 1051: // Get windows directory { char path[MAX_PATH+1]; if (GetWindowsDirectory(path, sizeof(path)/sizeof(char)) == 0) raise_syscall(taskData, "GetWindowsDirectory failed", -(int)GetLastError()); return SAVE(C_string_to_Poly(taskData, path)); } case 1052: // Get system directory { char path[MAX_PATH+1]; if (GetSystemDirectory(path, sizeof(path)/sizeof(char)) == 0) raise_syscall(taskData, "GetSystemDirectory failed", -(int)GetLastError()); return SAVE(C_string_to_Poly(taskData, path)); } case 1053: // Get computer name { char name[MAX_COMPUTERNAME_LENGTH +1]; DWORD dwSize = MAX_COMPUTERNAME_LENGTH +1; if (GetComputerName(name, &dwSize) == 0) raise_syscall(taskData, "GetComputerName failed", -(int)GetLastError()); return SAVE(C_string_to_Poly(taskData, name)); } case 1054: // Get user name { char name[UNLEN +1]; DWORD dwSize = UNLEN +1; if (GetUserName(name, &dwSize) == 0) raise_syscall(taskData, "GetUserName failed", -(int)GetLastError()); return SAVE(C_string_to_Poly(taskData, name)); } case 1100: // Get the error result from the last call. // This is saved when we make a call to a foreign function. { return(SAVE(TAGGED(taskData->lastError))); } case 1101: // Wait for a message. { while (1) { HWND hwnd = (HWND)get_C_long(taskData, DEREFWORDHANDLE(args)->Get(0)); /* Handles are treated as SIGNED. */ UINT wMsgFilterMin = get_C_ulong(taskData, DEREFWORDHANDLE(args)->Get(1)); UINT wMsgFilterMax = get_C_ulong(taskData, DEREFWORDHANDLE(args)->Get(2)); MSG msg; processes->ThreadReleaseMLMemory(taskData); // N.B. PeekMessage may directly call the window proc resulting in a // callback to ML. For this to work a callback must not overwrite "args". BOOL result = PeekMessage(&msg, hwnd, wMsgFilterMin, wMsgFilterMax, PM_NOREMOVE); processes->ThreadUseMLMemory(taskData); if (result) return Make_arbitrary_precision(taskData, 0); // Pause until a message arrives. processes->ThreadPause(taskData); } } // case 1102: // Return the address of the window callback function. case 1103: // Return the application instance. return Make_arbitrary_precision(taskData, (int)hApplicationInstance); case 1104: // Return the main window handle return Make_arbitrary_precision(taskData, (int)hMainWindow); // case 1105: // Set the callback function default: { char msg[100]; sprintf(msg, "Unknown windows-specific function: %d", c); raise_exception_string(taskData, EXC_Fail, msg); return 0; } } } /* The Windows version of this is more complicated than the Unix version because we can't manipulate the pipe handles in the child process. Everything has to be set up in the parent. As with Unix we create two pipes and pass one end of each pipe to the child. The end we pass to the child is "inheritable" (i.e. duplicated in the child as with Unix file descriptors) while the ends we keep in the parent are non-inheritable (i.e. not duplicated in the child). DCJM: December 1999. */ static Handle execute(TaskData *taskData, Handle args) { char *commandName = 0, *arguments = 0; LPSTR lpszError = ""; HANDLE hWriteToChild = INVALID_HANDLE_VALUE, hReadFromParent = INVALID_HANDLE_VALUE, hWriteToParent = INVALID_HANDLE_VALUE, hReadFromChild = INVALID_HANDLE_VALUE; HANDLE hTemp; STARTUPINFO startupInfo; PROCESS_INFORMATION processInfo; Handle handToken = make_handle_entry(taskData); PHANDLETAB pTab = &handleTable[STREAMID(handToken)]; commandName = Poly_string_to_C_alloc(args->WordP()->Get(0)); arguments = Poly_string_to_C_alloc(args->WordP()->Get(1)); // Create pipes for connection. Setting the security argument to NULL creates // the pipe handles as non-inheritable. We have to make sure that the // child process does not inherit handles for the parent end of the // connection otherwise the pipe will remain open after the parent has // closed its end, causing the child process to sit around even after // the parent process has gone away. if (!CreatePipe(&hReadFromParent, &hWriteToChild, NULL, 0)) { lpszError = "Could not create pipe"; goto error; } if (!CreatePipe(&hReadFromChild, &hWriteToParent, NULL, 0)) { lpszError = "Could not create pipe"; goto error; } // Convert the handles we want to pass to the child into inheritable // handles by duplicating and replacing them with the duplicates. if (! DuplicateHandle(GetCurrentProcess(), hWriteToParent, GetCurrentProcess(), &hTemp, 0, TRUE, // inheritable DUPLICATE_SAME_ACCESS )) { lpszError = "Could not create pipe"; goto error; } CloseHandle(hWriteToParent); hWriteToParent = hTemp; if (! DuplicateHandle(GetCurrentProcess(), hReadFromParent, GetCurrentProcess(), &hTemp, 0, TRUE, // inheritable DUPLICATE_SAME_ACCESS )) { lpszError = "Could not create pipe"; goto error; } CloseHandle(hReadFromParent); hReadFromParent = hTemp; // Create a STARTUPINFO structure in which to pass the pipes as stdin // and stdout to the new process. memset(&startupInfo, 0, sizeof(startupInfo)); startupInfo.cb = sizeof(startupInfo); startupInfo.dwFlags = STARTF_USESTDHANDLES; startupInfo.hStdInput = hReadFromParent; startupInfo.hStdOutput = hWriteToParent; // What should we do about the stderr? For the moment, inherit the original. startupInfo.hStdError = GetStdHandle(STD_ERROR_HANDLE); // Try starting the process first using the given name. if (!CreateProcess(commandName, arguments, // Command line NULL, NULL, TRUE, // Security attributes. Inherit handles CREATE_NO_WINDOW, // creation flags NULL, NULL, // Inherit our environment and directory &startupInfo, &processInfo)) { lpszError = "Could not create process"; goto error; } free(commandName); free(arguments); /* Close thread handle since we don't need it. */ CloseHandle(processInfo.hThread); /* Close the sides of the pipes we don't use in the parent. */ CloseHandle(hReadFromParent); CloseHandle(hWriteToParent); pTab->entryType = HE_PROCESS; pTab->entry.process.hProcess = processInfo.hProcess; pTab->entry.process.hInput = hReadFromChild; pTab->entry.process.hOutput = hWriteToChild; pTab->entry.process.readToken = 0; pTab->entry.process.writeToken = 0; return(handToken); error: { int err = GetLastError(); free(commandName); free(arguments); // Close all the pipe handles. if (hWriteToChild != INVALID_HANDLE_VALUE) CloseHandle(hWriteToChild); if (hReadFromParent != INVALID_HANDLE_VALUE) CloseHandle(hReadFromParent); if (hWriteToParent != INVALID_HANDLE_VALUE) CloseHandle(hWriteToParent); if (hReadFromChild != INVALID_HANDLE_VALUE) CloseHandle(hReadFromChild); raise_syscall(taskData, lpszError, -err); return NULL; // Never reached. } } static Handle simpleExecute(TaskData *taskData, Handle args) { HANDLE hNull = INVALID_HANDLE_VALUE; PROCESS_INFORMATION processInfo; Handle handToken; PHANDLETAB pTab; TCHAR *commandName = Poly_string_to_T_alloc(args->WordP()->Get(0)); TCHAR *arguments = Poly_string_to_T_alloc(args->WordP()->Get(1)); STARTUPINFO startupInfo; // Open a handle to NUL for input and output. hNull = CreateFile(_T("NUL"), GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); // Create a STARTUPINFO structure in which to pass hNULL as stdin // and stdout to the new process. memset(&startupInfo, 0, sizeof(startupInfo)); startupInfo.cb = sizeof(startupInfo); startupInfo.dwFlags = STARTF_USESTDHANDLES; startupInfo.hStdInput = hNull; startupInfo.hStdOutput = hNull; startupInfo.hStdError = hNull; STARTUPINFO *start = &startupInfo; // Try starting the process first using the given name. if (!CreateProcess(commandName, arguments, // Command line NULL, NULL, // Security attributes TRUE, CREATE_NO_WINDOW, // Inherit handles, creation flags NULL, NULL, // Inherit our environment and directory start, &processInfo)) { int nErr = GetLastError(); // Clean up free(commandName); free(arguments); CloseHandle(hNull); raise_syscall(taskData, "CreateProcess failed", -nErr); } free(commandName); free(arguments); /* Close thread handle since we don't need it. */ CloseHandle(processInfo.hThread); #ifndef _WIN32_WCE CloseHandle(hNull); // We no longer need this #endif handToken = make_handle_entry(taskData); pTab = &handleTable[STREAMID(handToken)]; pTab->entryType = HE_PROCESS; pTab->entry.process.hProcess = processInfo.hProcess; // We only use the process handle entry. pTab->entry.process.hInput = INVALID_HANDLE_VALUE; pTab->entry.process.hOutput = INVALID_HANDLE_VALUE; pTab->entry.process.readToken = 0; pTab->entry.process.writeToken = 0; return(handToken); } /* Return a stream, either text or binary, connected to an open process. */ static Handle openProcessHandle(TaskData *taskData, Handle args, BOOL fIsRead, BOOL fIsText) { PHANDLETAB hnd = get_handle(args->Word(), HE_PROCESS); HANDLE hStream; int mode = 0, ioBits = 0; if (hnd == 0) raise_syscall(taskData, "Process is closed", EINVAL); if (fIsRead) hStream = hnd->entry.process.hInput; else hStream = hnd->entry.process.hOutput; /* I had previously assumed that it wasn't possible to get the same stream twice. The current basis library definition allows it but warns it may produce unpredictable results. For the moment we don't allow it because we could get problems with closing the same handle twice. */ #ifdef _WIN32_WCE // Not possible in Windows CE. raise_syscall(taskData, "Process is closed", EBADF); return 0; #else if (hStream == INVALID_HANDLE_VALUE) raise_syscall(taskData, "Process is closed", EBADF); if (fIsRead) { mode = _O_RDONLY; ioBits = IO_BIT_READ; } else { mode = 0; ioBits = IO_BIT_WRITE; } if (fIsText) mode |= _O_TEXT; else mode |= _O_BINARY; Handle str_token = make_stream_entry(taskData); PIOSTRUCT strm = &basic_io_vector[STREAMID(str_token)]; strm->device.ioDesc = _open_osfhandle ((long)hStream, mode); if (strm->device.ioDesc == -1) raise_syscall(taskData, "_open_osfhandle failed", errno); strm->ioBits = ioBits | IO_BIT_OPEN | IO_BIT_PIPE; /* The responsibility for closing the handle is passed to the stream package. We need to retain a pointer to the stream entry so that we can close the stream in "reap". */ if (fIsRead) { hnd->entry.process.hInput = INVALID_HANDLE_VALUE; hnd->entry.process.readToken = strm->token; } else { hnd->entry.process.hOutput = INVALID_HANDLE_VALUE; hnd->entry.process.writeToken = strm->token; } return str_token; #endif } // Open a registry key and make an entry in the table for it. static Handle openRegistryKey(TaskData *taskData, Handle args, HKEY hkParent) { TCHAR keyName[MAX_PATH]; LONG lRes; Handle result; PHANDLETAB pTab; HKEY hkey; REGSAM sam = get_C_ulong(taskData, DEREFWORDHANDLE(args)->Get(2)); int length = Poly_string_to_C(args->WordP()->Get(1), keyName, MAX_PATH); if (length > MAX_PATH) raise_syscall(taskData, "Key name too long", ENAMETOOLONG); // Try opening the key. lRes = RegOpenKeyEx(hkParent, keyName, 0, sam, &hkey); if (lRes != ERROR_SUCCESS) raise_syscall(taskData, "RegOpenKeyEx failed", -lRes); // Make an entry in the table. result = make_handle_entry(taskData); pTab = &handleTable[STREAMID(result)]; pTab->entryType = HE_REGISTRY; pTab->entry.hKey = hkey; return result; } // Create a registry key and make an entry in the table for it. static Handle createRegistryKey(TaskData *taskData, Handle args, HKEY hkParent) { TCHAR keyName[MAX_PATH]; LONG lRes; Handle keyResult, dispRes, pair; PHANDLETAB pTab; HKEY hkey; DWORD dwDisp; REGSAM sam = get_C_ulong(taskData, DEREFWORDHANDLE(args)->Get(3)); int opt = get_C_ulong(taskData, DEREFWORDHANDLE(args)->Get(2)); int length = Poly_string_to_C(args->WordP()->Get(1), keyName, MAX_PATH); if (length > MAX_PATH) raise_syscall(taskData, "Key name too long", ENAMETOOLONG); // Try opening the key. lRes = RegCreateKeyEx(hkParent, keyName, 0, NULL, opt ? REG_OPTION_NON_VOLATILE : REG_OPTION_VOLATILE, sam, NULL, &hkey, &dwDisp); if (lRes != ERROR_SUCCESS) raise_syscall(taskData, "RegCreateKeyEx failed", -lRes); // Make an entry in the table. keyResult = make_handle_entry(taskData); pTab = &handleTable[STREAMID(keyResult)]; pTab->entryType = HE_REGISTRY; pTab->entry.hKey = hkey; // Record whether this was new or old. dispRes = Make_unsigned(taskData, dwDisp == REG_CREATED_NEW_KEY ? 0: 1); /* Return a pair of the disposition and the token. */ pair = alloc_and_save(taskData, 2); DEREFHANDLE(pair)->Set(0, DEREFWORDHANDLE(dispRes)); DEREFHANDLE(pair)->Set(1, DEREFWORDHANDLE(keyResult)); return pair; } // Delete a key. Note that in Windows NT (but not 95) this will fail if // the key has subkeys. static Handle deleteRegistryKey(TaskData *taskData, Handle args, HKEY hkParent) { TCHAR keyName[MAX_PATH]; LONG lRes; int length = Poly_string_to_C(args->WordP()->Get(1), keyName, MAX_PATH); if (length > MAX_PATH) raise_syscall(taskData, "Key name too long", ENAMETOOLONG); // Try deleting the key. lRes = RegDeleteKey(hkParent, keyName); if (lRes != ERROR_SUCCESS) /* Return the error. */ raise_syscall(taskData, "RegDeleteKey failed", -lRes); return Make_arbitrary_precision(taskData, 0); } static Handle deleteRegistryValue(TaskData *taskData, Handle args, HKEY hkParent) { TCHAR keyName[MAX_PATH]; LONG lRes; int length = Poly_string_to_C(args->WordP()->Get(1).AsObjPtr(), keyName, MAX_PATH); if (length > MAX_PATH) raise_syscall(taskData, "Key name too long", ENAMETOOLONG); // Try deleting the value. lRes = RegDeleteValue(hkParent, keyName); if (lRes != ERROR_SUCCESS) /* Return the original error. */ raise_syscall(taskData, "RegDeleteValue failed", -lRes); return Make_arbitrary_precision(taskData, 0); } static Handle queryRegistryKey(TaskData *taskData, Handle args, HKEY hkey) { TCHAR valName[MAX_PATH]; byte *keyValue = 0; LONG lRes; DWORD valSize; Handle result, resVal, resType; DWORD dwType; int length = Poly_string_to_C(args->WordP()->Get(1), valName, MAX_PATH); if (length > MAX_PATH) raise_syscall(taskData, "Value name too long", ENAMETOOLONG); // How long is the entry? lRes = RegQueryValueEx(hkey, valName, 0, NULL, NULL, &valSize); // When opening HKEY_PERFORMANCE_DATA we don't get a sensible // answer here. if (lRes == ERROR_MORE_DATA) valSize = 1024; // Guess else if (lRes != ERROR_SUCCESS) raise_syscall(taskData, "RegQueryValueEx failed", -lRes); // Allocate that much store and get the value. We could // try reading directly into ML store to save copying but // it hardly seems worthwhile. // Note: It seems that valSize can be zero for some items. if (valSize == 0) resVal = SAVE(Buffer_to_Poly(taskData, "", 0)); else { do { keyValue = (byte*)realloc(keyValue, valSize); lRes = RegQueryValueEx(hkey, valName, 0, &dwType, keyValue, &valSize); // In the special case of HKEY_PERFORMANCE_DATA we may need to keep // growing the buffer. if (lRes == ERROR_MORE_DATA) valSize = valSize + 1024; } while (lRes == ERROR_MORE_DATA); if (lRes != ERROR_SUCCESS) { free(keyValue); raise_syscall(taskData, "RegQueryValue failed", -lRes); } resVal = SAVE(Buffer_to_Poly(taskData, (char*)keyValue, valSize)); free(keyValue); } /* Create a pair containing the type and the value. */ resType = Make_arbitrary_precision(taskData, dwType); result = alloc_and_save(taskData, 2); DEREFHANDLE(result)->Set(0, DEREFWORDHANDLE(resType)); DEREFHANDLE(result)->Set(1, DEREFWORDHANDLE(resVal)); return result; } static Handle setRegistryKey(TaskData *taskData, Handle args, HKEY hkey) { TCHAR valName[MAX_PATH]; LONG lRes; PolyWord str = args->WordP()->Get(3); int length = Poly_string_to_C(args->WordP()->Get(1), valName, MAX_PATH); DWORD dwType = get_C_ulong(taskData, DEREFWORDHANDLE(args)->Get(2)); if (length > MAX_PATH) raise_syscall(taskData, "Value name too long", ENAMETOOLONG); // The value is binary. Strings will already have had a null added. if (IS_INT(str)) { byte b = (byte)UNTAGGED(str); // Single byte value. lRes = RegSetValueEx(hkey, valName, 0, dwType, &b, 1); } else { PolyStringObject *ps = (PolyStringObject*)str.AsObjPtr(); lRes = RegSetValueEx(hkey, valName, 0, dwType, (CONST BYTE *)ps->chars, ps->length); } if (lRes != ERROR_SUCCESS) raise_syscall(taskData, "RegSetValue failed", -lRes); return Make_arbitrary_precision(taskData, 0); } // Enumerate a key or a value. Returns a string option containing NONE if // no key/value could be found or SOME s where s is the name of the key/value. static Handle enumerateRegistry(TaskData *taskData, Handle args, HKEY hkey, BOOL isKey) { DWORD num = get_C_ulong(taskData, DEREFWORDHANDLE(args)->Get(1)); LONG lRes; TCHAR keyName[MAX_PATH]; DWORD dwLength = sizeof(keyName)/sizeof(keyName[0]); Handle result, resVal; if (isKey) { FILETIME ftMod; lRes = RegEnumKeyEx(hkey, num, keyName, &dwLength, NULL, NULL, NULL, &ftMod); if (lRes != ERROR_SUCCESS && lRes != ERROR_NO_MORE_ITEMS) raise_syscall(taskData, "RegEnumKeyEx failed", -lRes); } else { lRes = RegEnumValue(hkey, num, keyName, &dwLength, NULL, NULL, NULL, NULL); if (lRes != ERROR_SUCCESS && lRes != ERROR_NO_MORE_ITEMS) raise_syscall(taskData, "RegEnumValue failed", -lRes); } if (lRes == ERROR_NO_MORE_ITEMS) return SAVE(NONE_VALUE); /* NONE. */ resVal = SAVE(C_string_to_Poly(taskData, keyName)); result = alloc_and_save(taskData, 1); DEREFHANDLE(result)->Set(0, DEREFWORDHANDLE(resVal)); return result; } class WindowsModule: public RtsModule { public: virtual void Init(void); virtual void Uninit(void); void GarbageCollect(ScanAddress *process); }; // Declare this. It will be automatically added to the table. static WindowsModule windowsModule; void WindowsModule::GarbageCollect(ScanAddress *process) /* Ensures that all the objects are retained and their addresses updated. */ { POLYUNSIGNED i; /* Entries in the file table. These are marked as weak references so may return 0 for unreferenced streams. */ for(i = 0; i < maxHandleTab; i++) { PHANDLETAB str = &(handleTable[i]); if (str->token != 0) { if (str->entryType == HE_PROCESS) { /* Update the references to opened streams but do this only as weak references. If the stream has gone away then that's fine. */ if (str->entry.process.readToken) process->ScanRuntimeAddress(&str->entry.process.readToken, ScanAddress::STRENGTH_WEAK); if (str->entry.process.writeToken) process->ScanRuntimeAddress(&str->entry.process.writeToken, ScanAddress::STRENGTH_WEAK); } process->ScanRuntimeAddress(&str->token, ScanAddress::STRENGTH_WEAK); /* Unreferenced entries may return zero. */ if (str->token == 0 && str->entryType != HE_UNUSED) close_handle(str); } } } void WindowsModule::Uninit(void) { if (handleTable) { for (POLYUNSIGNED i = 0; i < maxHandleTab; i++) { if (handleTable[i].token != 0) close_handle(&handleTable[i]); } free(handleTable); } handleTable = NULL; } void WindowsModule::Init(void) { maxHandleTab = 5; /* Initialise to a small number. */ /* A vector for the streams (initialised by calloc) */ handleTable = (PHANDLETAB)calloc(maxHandleTab,sizeof(HANDLETAB)); } polyml.5.2.1/libpolyml/x86_dep.cpp0000644000175000017500000026062710772160234015777 0ustar daviddavid/* Title: Machine dependent code for i386 and X64 under Windows and Unix Copyright (c) 2000-7 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifdef WIN32 #include "winconfig.h" #else #include "config.h" #endif #ifdef HAVE_STDLIB_H #include #endif #include #ifdef HAVE_SIGNAL_H #include #endif #ifdef HAVE_ASSERT_H #include #define ASSERT(x) assert(x) #else #define ASSERT(x) #endif #ifdef HAVE_STRING_H #include #endif #ifdef WINDOWS_PC #include #include #endif #include "globals.h" #include "run_time.h" #include "mpoly.h" #include "arb.h" #include "diagnostics.h" #include "processes.h" #include "sys.h" #include "profiling.h" #include "sighandler.h" #include "machine_dep.h" #include "scanaddrs.h" #include "gc.h" #include "check_objects.h" #include "save_vec.h" #include "memmgr.h" #include "foreign.h" #ifndef HAVE_SIGALTSTACK // If we can't handle signals on a separate stack make sure there's space // on the Poly stack. At the moment this includes Windows although we // probably don't need this. #define EXTRA_STACK 1024 #else #define EXTRA_STACK 0 #endif #ifndef HOSTARCHITECTURE_X86_64 #define CHECKED_REGS 6 #else /* HOSTARCHITECTURE_X86_64 */ #define CHECKED_REGS 13 #endif /* HOSTARCHITECTURE_X86_64 */ /* The unchecked reg field is used for the condition codes. */ #define UNCHECKED_REGS 1 /* the amount of ML stack space to reserve for registers, C exception handling etc. The compiler requires us to reserve 2 stack-frames worth (2 * 20 words) plus whatever we require for the register save area. We actually reserve slightly more than this. SPF 3/3/97 */ #define OVERFLOW_STACK_SIZE \ (50 + \ sizeof(StackObject)/sizeof(PolyWord) + \ CHECKED_REGS + \ UNCHECKED_REGS + \ EXTRA_STACK) // These "memory registers" are referenced from the assembly code. // Some are actually referenced from ML code so the offsets are built in. typedef struct _MemRegisters { // These offsets are built into the code generator and assembly code PolyWord *localMpointer; // Allocation ptr + 1 word PolyWord *handlerRegister; // Current exception handler // Originally these next two were checked using a BOUNDS instruction. That compared // a value against a lower and upper limit. PolyWord *localMbottom; // Base of memory + 1 word PolyWord *stackLimit; // Lower limit of stack // We don't actually need to do the check against the upper limit but // we need to pass this to the assembly code so this is a convenient place // to do it. PolyWord *stackTop; // Upper limit of stack // These offsets are built into the assembly code section byte requestCode; // IO function to call. // The offset (20/40) of requestCode is built into the MAKE_IO_CALL_SEQUENCE macro byte inRTS; // Flag indicating we're not in ML byte returnReason; // Reason for returning from ML. // The offset (22/42) of returnReason is built into the MAKE_IO_CALL_SEQUENCE macro StackObject *polyStack; // Current stack base PolyWord *savedSp; // Saved C stack pointer byte *heapOverflow; // Called when the heap limit is reached byte *stackOverflow; // Called when the stack limit is reached byte *stackOverflowEx; // Called when the stack limit is reached (alternate) byte *raiseException; // Called to raise an exception. The packet is passed in eax. // The offset (48/96) of ioEntry is built into the MAKE_IO_CALL_SEQUENCE macro byte *ioEntry; // Called for an IO function byte *raiseDiv; // Called to raise the Div exception. byte *arbEmulation; // This address is called to emulate an arbitrary precision op PolyObject *threadId; // My thread id. Saves having to call into RTS for it. POLYSIGNED real_temp; // Space used to convert integers to reals. } MemRegisters; class X86TaskData: public MDTaskData { public: X86TaskData(): allocReg(0), allocWords(0) { memRegisters.inRTS = 1; // We start off in the RTS. } unsigned allocReg; // The register to take the allocated space. POLYUNSIGNED allocWords; // The words to allocate. Handle callBackResult; MemRegisters memRegisters; }; class X86Dependent: public MachineDependent { public: X86Dependent() {} // Create a task data object. virtual MDTaskData *CreateTaskData(void) { return new X86TaskData(); } virtual unsigned InitialStackSize(void) { return 128+OVERFLOW_STACK_SIZE; } // Initial size of a stack virtual void InitInterfaceVector(void); virtual void ResetSignals(void); virtual void ScanConstantsWithinCode(PolyObject *addr, PolyObject *oldAddr, POLYUNSIGNED length, ScanAddress *process); virtual int GetIOFunctionRegisterMask(int ioCall); virtual Architectures MachineArchitecture(void) #ifndef HOSTARCHITECTURE_X86_64 { return MA_I386; } #else /* HOSTARCHITECTURE_X86_64 */ { return MA_X86_64; } #endif /* HOSTARCHITECTURE_X86_64 */ virtual void SetCodeConstant(TaskData *taskData, Handle data, Handle constant, Handle offseth, Handle base); #ifndef HOSTARCHITECTURE_X86_64 virtual unsigned char *BuildCallback(TaskData *taskData, int cbEntryNo, Handle cResultType, int nArgsToRemove); virtual void GetCallbackArg(void **args, void *argLoc, int nSize); #endif virtual int SwitchToPoly(TaskData *taskData); virtual void SetForRetry(TaskData *taskData, int ioCall); virtual void InterruptCode(TaskData *taskData); virtual bool GetPCandSPFromContext(TaskData *taskData, SIGNALCONTEXT *context, PolyWord *&sp, POLYCODEPTR &pc); virtual void InitStackFrame(TaskData *taskData, Handle stack, Handle proc, Handle arg); virtual void SetException(TaskData *taskData, poly_exn *exc); virtual void CallIO0(TaskData *taskData, Handle(*ioFun)(TaskData *)); virtual void CallIO1(TaskData *taskData, Handle(*ioFun)(TaskData *, Handle)); virtual void CallIO2(TaskData *taskData, Handle(*ioFun)(TaskData *, Handle, Handle)); virtual void CallIO3(TaskData *taskData, Handle(*ioFun)(TaskData *, Handle, Handle, Handle)); virtual void CallIO4(TaskData *taskData, Handle(*ioFun)(TaskData *, Handle, Handle, Handle, Handle)); virtual void CallIO5(TaskData *taskData, Handle(*ioFun)(TaskData *, Handle, Handle, Handle, Handle, Handle)); virtual Handle CallBackResult(TaskData *taskData) { return ((X86TaskData*)taskData->mdTaskData)->callBackResult; } virtual void SetExceptionTrace(TaskData *taskData); virtual void CallCodeTupled(TaskData *taskData); virtual void SetCallbackFunction(TaskData *taskData, Handle func, Handle args); // Increment or decrement the first word of the object pointed to by the // mutex argument and return the new value. virtual Handle AtomicIncrement(TaskData *taskData, Handle mutexp); virtual Handle AtomicDecrement(TaskData *taskData, Handle mutexp); void SetMemRegisters(TaskData *taskData); void SaveMemRegisters(TaskData *taskData); void HeapOverflowTrap(TaskData *taskData); void ArbitraryPrecisionTrap(TaskData *taskData); PolyWord *get_reg(TaskData *taskData, int n); void do_compare(TaskData *taskData, PolyWord v1, PolyWord v2); void do_op(TaskData *taskData, int dest, PolyWord v1, PolyWord v2, Handle (*op)(TaskData *, Handle, Handle)); bool emulate_instrs(TaskData *taskData); Handle BuildCodeSegment(TaskData *taskData, const byte *code, unsigned bytes, char functionName); Handle BuildKillSelf(TaskData *taskData); }; // Entry code sequences - copied to memRegisters before entering ML. static byte *heapOverflow, *stackOverflow, *stackOverflowEx, *raiseDiv, *arbEmulation; /********************************************************************** * * Register usage: * * %Reax: First argument to function. Result of function call. * %Rebx: Second argument to function. * %Recx: General register * %Redx: Closure pointer in call. * %Rebp: Points to memory used for extra registers * %Resi: General register. * %Redi: General register. * %Resp: Stack pointer. * The following apply only on the X64 * %R8: Third argument to function * %R9: Fourth argument to function * %R10: Fifth argument to function * %R11: General register * %R12: General register * %R13: General register * %R14: General register * %R15: Memory allocation pointer * **********************************************************************/ /********************************************************************** * * Register fields in the stack. * **********************************************************************/ #define PSP_EAX(stack) (stack)->p_reg[0] #define PSP_EBX(stack) (stack)->p_reg[1] #define PSP_ECX(stack) (stack)->p_reg[2] #define PSP_EDX(stack) (stack)->p_reg[3] #define PSP_ESI(stack) (stack)->p_reg[4] #define PSP_EDI(stack) (stack)->p_reg[5] // X64 registers only #define PSP_R8(stack) (stack)->p_reg[6] #define PSP_R9(stack) (stack)->p_reg[7] #define PSP_R10(stack) (stack)->p_reg[8] #define PSP_R11(stack) (stack)->p_reg[9] #define PSP_R12(stack) (stack)->p_reg[10] #define PSP_R13(stack) (stack)->p_reg[11] #define PSP_R14(stack) (stack)->p_reg[12] #define PSP_EFLAGS(stack) (stack)->p_reg[CHECKED_REGS+1] #define PSP_IC(stack) (stack)->p_pc #define PSP_INCR_PC(stack, n) (stack)->p_pc += n #define PSP_SP(stack) (stack)->p_sp #define PSP_HR(stack) (stack)->hr // Values for the returnReason byte enum RETURN_REASON { RETURN_IO_CALL = 0, RETURN_HEAP_OVERFLOW, RETURN_STACK_OVERFLOW, RETURN_STACK_OVERFLOWEX, RETURN_RAISE_DIV, RETURN_ARB_EMULATION, RETURN_CALLBACK_RETURN, RETURN_CALLBACK_EXCEPTION }; extern "C" { // These are declared in the assembly code segment. void X86AsmSwitchToPoly(MemRegisters *); void X86AsmSaveStateAndReturn(void); // These are declared in the assembly code. They provide hand coded versions // of simple functions. Some cases, such as adding words, are actually handled by // the code generator, so the assembly code versions would only be called when // the function is passed as a closure e.g. map (op+) [(1,2),(3,4)] extern int alloc_store(); extern int get_length_a(); extern int str_compare(); extern int teststreq(), teststrneq(), teststrgtr(), teststrlss(), teststrgeq(), teststrleq(); extern int locksega(); extern int is_shorta(); extern int add_long(), sub_long(), mult_long(), div_long(), rem_long(), neg_long(); extern int equal_long(), or_long(), and_long(), xor_long(); extern int offset_address(); extern int shift_right_word(); extern int word_neq(); extern int not_bool(); extern int string_length(); extern int int_eq(), int_neq(), int_geq(), int_leq(), int_gtr(), int_lss(); extern int or_word(), and_word(), xor_word(), shift_left_word(), shift_right_arith_word(); extern int word_eq(); extern int load_byte(), load_word(); extern int is_big_endian(); extern int bytes_per_word(); extern int assign_byte(), assign_word(); extern int set_string_length_a(); extern int get_first_long_word_a(); extern int int_to_word(); extern int move_bytes(), move_words(); extern int mul_word(), plus_word(), minus_word(), div_word(), mod_word(); extern int word_geq(), word_leq(), word_gtr(), word_lss(); extern int raisex(); extern int thread_self(), atomic_increment(), atomic_decrement(); extern int real_add(), real_sub(), real_mul(), real_div(), real_neg(); extern int real_geq(), real_leq(), real_gtr(), real_lss(), real_eq(), real_neq(); extern int real_from_int(); }; // Run the current ML process. X86AsmSwitchToPoly saves the C state so that // whenever the ML requires assistance from the rest of the RTS it simply // returns to C with the appropriate values set in memRegisters.requestCode and // int X86Dependent::SwitchToPoly(TaskData *taskData) // (Re)-enter the Poly code from C. Returns with the io function to call or // -1 if we are responding to an interrupt. { X86TaskData *mdTask = (X86TaskData*)taskData->mdTaskData; Handle mark = taskData->saveVec.mark(); do { taskData->saveVec.reset(mark); // Remove old data e.g. from arbitrary precision. CheckMemory(); // Do any memory checking before calling SetMemRegisters // (which may set pc to a temporarily bad value if this is a retry). SetMemRegisters(taskData); X86AsmSwitchToPoly(&mdTask->memRegisters); SaveMemRegisters(taskData); // Update globals from the memory registers. // Handle any heap/stack overflows or arbitrary precision traps. switch (mdTask->memRegisters.returnReason) { case RETURN_IO_CALL: return mdTask->memRegisters.requestCode; case RETURN_HEAP_OVERFLOW: // The heap has overflowed. Pop the return address into the program counter. // It may well not be a valid code address anyway. PSP_IC(taskData->stack) = (*(PSP_SP(taskData->stack))++).AsCodePtr(); HeapOverflowTrap(taskData); // Computes a value for allocWords only break; case RETURN_STACK_OVERFLOW: try { // The stack check has failed. This may either be because we really have // overflowed the stack or because the stack limit value has been adjusted // to result in a call here. PSP_IC(taskData->stack) = (*PSP_SP(taskData->stack)++).AsCodePtr(); CheckAndGrowStack(taskData, taskData->stack->p_sp); } catch (IOException) { // We may get an exception while handling this if we run out of store } return -1; // We're in a safe state to handle any interrupts. case RETURN_STACK_OVERFLOWEX: try { // Stack limit overflow. If the required stack space is larger than // the fixed overflow size the code will calculate the limit in %EDI. // We need to extract that and the clear that register since it may // very well be outside the stack and therefore a "bad address". PolyWord *stackP = PSP_EDI(taskData->stack).AsStackAddr(); PSP_EDI(taskData->stack) = TAGGED(0); PSP_IC(taskData->stack) = (*PSP_SP(taskData->stack)++).AsCodePtr(); CheckAndGrowStack(taskData, stackP); } catch (IOException) { // We may get an exception while handling this if we run out of store } return -1; // We're in a safe state to handle any interrupts. case RETURN_RAISE_DIV: try { // Generally arithmetic operations don't raise exceptions. Overflow // is either ignored, for Word operations, or results in a call to // the abitrary precision emulation code. This is the exception // (no pun intended). PSP_IC(taskData->stack) = (*PSP_SP(taskData->stack)++).AsCodePtr(); // Set all the registers to a safe value here. We will almost certainly // have shifted a value in one of the registers before testing it for zero. for (POLYUNSIGNED i = 0; i < taskData->stack->p_nreg; i++) taskData->stack->p_reg[i] = TAGGED(0); raise_exception0(taskData, EXC_divide); } catch (IOException) { // Handle the C++ exception. } break; case RETURN_ARB_EMULATION: try { PSP_IC(taskData->stack) = (*PSP_SP(taskData->stack)++).AsCodePtr(); ArbitraryPrecisionTrap(taskData); } catch (IOException) { // We may get an exception in the trap handler e.g. if we run out of store. } break; case RETURN_CALLBACK_RETURN: // Remove the extra exception handler we created in SetCallbackFunction ASSERT(taskData->stack->p_hr == PSP_SP(taskData->stack)); PSP_SP(taskData->stack) += 2; taskData->stack->p_hr = (*(PSP_SP(taskData->stack)++)).AsStackAddr(); // Restore the previous handler. mdTask->callBackResult = taskData->saveVec.push(PSP_EAX(taskData->stack)); // Argument to return is in EAX. // Restore the registers #ifdef HOSTARCHITECTURE_X86_64 PSP_R10(taskData->stack) = *PSP_SP(taskData->stack)++; PSP_R9(taskData->stack) = *PSP_SP(taskData->stack)++; PSP_R8(taskData->stack) = *PSP_SP(taskData->stack)++; #endif PSP_EBX(taskData->stack) = *PSP_SP(taskData->stack)++; PSP_EAX(taskData->stack) = *PSP_SP(taskData->stack)++; PSP_EDX(taskData->stack) = *PSP_SP(taskData->stack)++; taskData->stack->p_pc = (*PSP_SP(taskData->stack)).AsCodePtr(); // Set the return address return -2; case RETURN_CALLBACK_EXCEPTION: // An ML callback has raised an exception. SetException(taskData, (poly_exn *)PSP_EAX(taskData->stack).AsObjPtr()); // Raise a C++ exception. If the foreign function that called this callback // doesn't handle the exception it will be raised in the calling ML function. // But if it is caught we may have a problem ... throw IOException(EXC_EXCEPTION); default: Crash("Unknown return reason code %u", mdTask->memRegisters.returnReason); } } while (1); } void X86Dependent::InitStackFrame(TaskData *parentTaskData, Handle stackh, Handle proc, Handle arg) /* Initialise stack frame. */ { StackObject *newStack = (StackObject *)DEREFWORDHANDLE(stackh); POLYUNSIGNED stack_size = newStack->Length(); POLYUNSIGNED topStack = stack_size-5; newStack->p_space = OVERFLOW_STACK_SIZE; newStack->p_pc = PC_RETRY_SPECIAL; newStack->p_sp = newStack->Offset(topStack); newStack->p_hr = newStack->Offset(topStack)+1; newStack->p_nreg = CHECKED_REGS; for (POLYUNSIGNED i = 0; i < CHECKED_REGS; i++) newStack->p_reg[i] = TAGGED(0); newStack->p_reg[CHECKED_REGS] = PolyWord::FromUnsigned(UNCHECKED_REGS); /* 1 unchecked register */ newStack->p_reg[CHECKED_REGS+1] = PolyWord::FromUnsigned(0); newStack->p_reg[3] = DEREFWORDHANDLE(proc); /* rdx - closure pointer */ /* If this function takes an argument store it in the argument register. */ if (arg != 0) newStack->p_reg[0] = DEREFWORD(arg); /* We initialise the end of the stack with a sequence that will jump to kill_self whether the process ends with a normal return or by raising an exception. There's one additional complication. kill_self is called via CallIO0 which loads the value at *p_sp into p_pc assuming this is a return address. We need to make sure that this value is acceptable since this stack may be scanned by a subsequent minor GC if it's already been copied by a minor GC. */ newStack->Set(topStack+4, TAGGED(0)); // Acceptable value if we've exited by exception. /* No previous handler so point it at itself. */ newStack->Set(topStack+3, PolyWord::FromStackAddr(newStack->Offset(topStack)+3)); // Set the default handler and return address to point to this code. // It's not necessary, on this architecture at least, to make these off-word // aligned since we're pointing at the start of some code. That may be // necessary on e.g. the Sparc(?), which always subtracts two from a return // address before jumping to it. Handle killCode = BuildKillSelf(parentTaskData); PolyWord killJump = killCode->Word(); newStack = (StackObject *)DEREFWORDHANDLE(stackh); // In case it's moved newStack->Set(topStack+2, killJump); // Default handler. /* Set up exception handler. This also, conveniently, ends up in p_pc if we return normally. */ newStack->Set(topStack+1, TAGGED(0)); /* Default handler. */ // Normal Return address. newStack->Set(topStack, killJump); } // IO Functions called indirectly from assembly code. void X86Dependent::CallIO0(TaskData *taskData, Handle (*ioFun)(TaskData *)) { // Set the return address now. taskData->stack->p_pc = (*PSP_SP(taskData->stack)).AsCodePtr(); try { Handle result = (*ioFun)(taskData); PSP_EAX(taskData->stack) = result->Word(); // If this is a normal return we can pop the return address. // If this has raised an exception, set for retry or changed process // we mustn't. N,B, The return address could have changed because of GC PSP_SP(taskData->stack)++; } catch (IOException exc) { switch (exc.m_reason) { case EXC_EXCEPTION: return; case EXC_RETRY: return; } } } void X86Dependent::CallIO1(TaskData *taskData, Handle (*ioFun)(TaskData *, Handle)) { taskData->stack->p_pc = (*PSP_SP(taskData->stack)).AsCodePtr(); Handle saved1 = taskData->saveVec.push(PSP_EAX(taskData->stack)); try { Handle result = (*ioFun)(taskData, saved1); PSP_EAX(taskData->stack) = result->Word(); PSP_SP(taskData->stack)++; // Pop the return address. } catch (IOException exc) { switch (exc.m_reason) { case EXC_EXCEPTION: return; case EXC_RETRY: return; } } } void X86Dependent::CallIO2(TaskData *taskData, Handle (*ioFun)(TaskData *, Handle, Handle)) { taskData->stack->p_pc = (*PSP_SP(taskData->stack)).AsCodePtr(); Handle saved1 = taskData->saveVec.push(PSP_EAX(taskData->stack)); Handle saved2 = taskData->saveVec.push(PSP_EBX(taskData->stack)); try { Handle result = (*ioFun)(taskData, saved2, saved1); PSP_EAX(taskData->stack) = result->Word(); PSP_SP(taskData->stack)++; } catch (IOException exc) { switch (exc.m_reason) { case EXC_EXCEPTION: return; case EXC_RETRY: return; } } } void X86Dependent::CallIO3(TaskData *taskData, Handle (*ioFun)(TaskData *, Handle, Handle, Handle)) { taskData->stack->p_pc = (*PSP_SP(taskData->stack)).AsCodePtr(); Handle saved1 = taskData->saveVec.push(PSP_EAX(taskData->stack)); Handle saved2 = taskData->saveVec.push(PSP_EBX(taskData->stack)); #ifndef HOSTARCHITECTURE_X86_64 Handle saved3 = taskData->saveVec.push(PSP_SP(taskData->stack)[1]); #else /* HOSTARCHITECTURE_X86_64 */ Handle saved3 = taskData->saveVec.push(PSP_R8(taskData->stack)); #endif /* HOSTARCHITECTURE_X86_64 */ try { Handle result = (*ioFun)(taskData, saved3, saved2, saved1); PSP_EAX(taskData->stack) = result->Word(); #ifndef HOSTARCHITECTURE_X86_64 PSP_SP(taskData->stack) += 2; // Pop the return address and a stack arg. #else /* HOSTARCHITECTURE_X86_64 */ PSP_SP(taskData->stack)++; #endif /* HOSTARCHITECTURE_X86_64 */ } catch (IOException exc) { switch (exc.m_reason) { case EXC_EXCEPTION: return; case EXC_RETRY: return; } } } void X86Dependent::CallIO4(TaskData *taskData, Handle (*ioFun)(TaskData *, Handle, Handle, Handle, Handle)) { taskData->stack->p_pc = (*PSP_SP(taskData->stack)).AsCodePtr(); Handle saved1 = taskData->saveVec.push(PSP_EAX(taskData->stack)); Handle saved2 = taskData->saveVec.push(PSP_EBX(taskData->stack)); #ifndef HOSTARCHITECTURE_X86_64 Handle saved3 = taskData->saveVec.push(PSP_SP(taskData->stack)[2]); Handle saved4 = taskData->saveVec.push(PSP_SP(taskData->stack)[1]); #else /* HOSTARCHITECTURE_X86_64 */ Handle saved3 = taskData->saveVec.push(PSP_R8(taskData->stack)); Handle saved4 = taskData->saveVec.push(PSP_R9(taskData->stack)); #endif /* HOSTARCHITECTURE_X86_64 */ try { Handle result = (*ioFun)(taskData, saved4, saved3, saved2, saved1); PSP_EAX(taskData->stack) = result->Word(); #ifndef HOSTARCHITECTURE_X86_64 PSP_SP(taskData->stack) += 3; // Pop the return address and two stack args. #else /* HOSTARCHITECTURE_X86_64 */ PSP_SP(taskData->stack)++; #endif /* HOSTARCHITECTURE_X86_64 */ } catch (IOException exc) { switch (exc.m_reason) { case EXC_EXCEPTION: return; case EXC_RETRY: return; } } } // The only functions with 5 args are move_bytes/word_long void X86Dependent::CallIO5(TaskData *taskData, Handle (*ioFun)(TaskData *, Handle, Handle, Handle, Handle, Handle)) { taskData->stack->p_pc = (*PSP_SP(taskData->stack)).AsCodePtr(); Handle saved1 = taskData->saveVec.push(PSP_EAX(taskData->stack)); Handle saved2 = taskData->saveVec.push(PSP_EBX(taskData->stack)); #ifndef HOSTARCHITECTURE_X86_64 Handle saved3 = taskData->saveVec.push(PSP_SP(taskData->stack)[3]); Handle saved4 = taskData->saveVec.push(PSP_SP(taskData->stack)[2]); Handle saved5 = taskData->saveVec.push(PSP_SP(taskData->stack)[1]); #else /* HOSTARCHITECTURE_X86_64 */ Handle saved3 = taskData->saveVec.push(PSP_R8(taskData->stack)); Handle saved4 = taskData->saveVec.push(PSP_R9(taskData->stack)); Handle saved5 = taskData->saveVec.push(PSP_R10(taskData->stack)); #endif /* HOSTARCHITECTURE_X86_64 */ try { Handle result = (*ioFun)(taskData, saved5, saved4, saved3, saved2, saved1); PSP_EAX(taskData->stack) = result->Word(); #ifndef HOSTARCHITECTURE_X86_64 PSP_SP(taskData->stack) += 4; // Pop the return address and 3 stack args #else /* HOSTARCHITECTURE_X86_64 */ PSP_SP(taskData->stack)++; #endif /* HOSTARCHITECTURE_X86_64 */ } catch (IOException exc) { switch (exc.m_reason) { case EXC_EXCEPTION: return; case EXC_RETRY: return; } } } // Build an ML code segment to hold a copy of a piece of code Handle X86Dependent::BuildCodeSegment(TaskData *taskData, const byte *code, unsigned bytes, char functionName) { POLYUNSIGNED codeWords = (bytes + sizeof(PolyWord)-1) / sizeof(PolyWord); POLYUNSIGNED words = codeWords + 6; Handle codeHandle = alloc_and_save(taskData, words, F_BYTE_OBJ|F_MUTABLE_BIT); byte *cp = codeHandle->Word().AsCodePtr(); memcpy(cp, code, bytes); if (bytes % sizeof(PolyWord) != 0) // Fill unused bytes with NOPs memset(cp+bytes, 0x90, sizeof(PolyWord)- bytes % sizeof(PolyWord)); codeHandle->WordP()->Set(codeWords++, PolyWord::FromUnsigned(0)); // Marker word codeHandle->WordP()->Set(codeWords, PolyWord::FromUnsigned(codeWords*sizeof(PolyWord))); // Bytes to the start codeWords++; codeHandle->WordP()->Set(codeWords++, PolyWord::FromUnsigned(0)); // Profile count codeHandle->WordP()->Set(codeWords++, TAGGED(functionName)); // Name of function codeHandle->WordP()->Set(codeWords++, TAGGED(0)); // Register set codeHandle->WordP()->Set(codeWords++, PolyWord::FromUnsigned(2)); // Number of constants CodeSegmentFlags(taskData, taskData->saveVec.push(TAGGED(F_CODE_OBJ)), codeHandle); return codeHandle; } // Set up a handler that, if it's called, will print an exception trace. // If the handler isn't called the dummy handler is simply removed. // This is tricky since when we "return" we actually need to run the new // function. void X86Dependent::SetExceptionTrace(TaskData *taskData) { taskData->stack->p_pc = (*PSP_SP(taskData->stack)).AsCodePtr(); Handle fun = taskData->saveVec.push(PSP_EAX(taskData->stack)); PolyObject *functToCall = fun->WordP(); PSP_EDX(taskData->stack) = functToCall; // Closure address // Leave the return address where it is on the stack. taskData->stack->p_pc = functToCall->Get(0).AsCodePtr(); // First word of closure is entry pt. *(--PSP_SP(taskData->stack)) = PolyWord::FromStackAddr(taskData->stack->p_hr); // Create a special handler entry // We have to use a special entry here that can be recognised by the exception // unwinding code because we want to know the stack pointer that is in effect // at the time the exception is raised. If we simply put a normal handler in here // that handler would be called after the stack was unwound. *(--PSP_SP(taskData->stack)) = TAGGED(0); *(--PSP_SP(taskData->stack)) = TAGGED(0); taskData->stack->p_hr = PSP_SP(taskData->stack); byte *codeAddr; #ifndef __GNUC__ #ifdef HOSTARCHITECTURE_X86_64 ASSERT(0); // Inline assembly not supported on Windows 64-bit #else __asm { call endCode add esp,8 // Remove handler pop dword ptr [4+ebp] // Restore the old handler ret // Return to the original caller endCode: pop eax mov codeAddr,eax } #endif #else // GCC __asm__ __volatile__ ( "call 1f;" #ifndef HOSTARCHITECTURE_X86_64 "addl $8,%%esp;" "popl 4(%%ebp);" #else /* HOSTARCHITECTURE_X86_64 */ "addq $16,%%rsp;" "popq 8(%%rbp);" #endif /* HOSTARCHITECTURE_X86_64 */ "ret;" "nop;" // Add an extra byte so that we have 8 bytes on both X86 and X86_64 "1: pop %0" :"=r"(codeAddr) ); #endif Handle retCode = BuildCodeSegment(taskData, codeAddr, 8 /* Code is 8 bytes */, 'R'); *(--PSP_SP(taskData->stack)) = retCode->WordP(); // Code for normal return. PSP_EAX(taskData->stack) = TAGGED(0); // Set the argument of the function to "unit". } // In Solaris-x86 the registers are named EIP and ESP. #if (!defined(REG_EIP) && defined(EIP)) #define REG_EIP EIP #endif #if (!defined(REG_ESP) && defined(ESP)) #define REG_ESP ESP #endif // Get the PC and SP(stack) from a signal context. This is needed for profiling. bool X86Dependent::GetPCandSPFromContext(TaskData *taskData, SIGNALCONTEXT *context, PolyWord * &sp, POLYCODEPTR &pc) { X86TaskData *mdTask = (X86TaskData*)taskData->mdTaskData; if (mdTask->memRegisters.inRTS) { sp = taskData->stack->p_sp; pc = taskData->stack->p_pc; return true; } // The tests for HAVE_UCONTEXT_T, HAVE_STRUCT_SIGCONTEXT and HAVE_WINDOWS_H need // to follow the tests in machine_dep.h. #if defined(HAVE_UCONTEXT_T) #ifdef HAVE_MCONTEXT_T_GREGS // Linux #ifndef HOSTARCHITECTURE_X86_64 pc = (byte*)context->uc_mcontext.gregs[REG_EIP]; sp = (PolyWord*)context->uc_mcontext.gregs[REG_ESP]; #else /* HOSTARCHITECTURE_X86_64 */ pc = (byte*)context->uc_mcontext.gregs[REG_RIP]; sp = (PolyWord*)context->uc_mcontext.gregs[REG_RSP]; #endif /* HOSTARCHITECTURE_X86_64 */ #elif defined(HAVE_MCONTEXT_T_MC_ESP) // FreeBSD #ifndef HOSTARCHITECTURE_X86_64 pc = (byte*)context->uc_mcontext.mc_eip; sp = (PolyWord*)context->uc_mcontext.mc_esp; #else /* HOSTARCHITECTURE_X86_64 */ pc = (byte*)context->uc_mcontext.mc_rip; sp = (PolyWord*)context->uc_mcontext.mc_rsp; #endif /* HOSTARCHITECTURE_X86_64 */ #else // Mac OS X #ifndef HOSTARCHITECTURE_X86_64 #if(defined(HAVE_STRUCT_MCONTEXT_SS)||defined(HAVE_STRUCT___DARWIN_MCONTEXT32_SS)) pc = (byte*)context->uc_mcontext->ss.eip; sp = (PolyWord*)context->uc_mcontext->ss.esp; #elif(defined(HAVE_STRUCT___DARWIN_MCONTEXT32___SS)) pc = (byte*)context->uc_mcontext->__ss.__eip; sp = (PolyWord*)context->uc_mcontext->__ss.__esp; #else return false; #endif #else /* HOSTARCHITECTURE_X86_64 */ #if(defined(HAVE_STRUCT_MCONTEXT_SS)||defined(HAVE_STRUCT___DARWIN_MCONTEXT64_SS)) pc = (byte*)context->uc_mcontext->ss.rip; sp = (PolyWord*)context->uc_mcontext->ss.rsp; #elif(defined(HAVE_STRUCT___DARWIN_MCONTEXT64___SS)) pc = (byte*)context->uc_mcontext->__ss.__rip; sp = (PolyWord*)context->uc_mcontext->__ss.__rsp; #else return false; #endif #endif /* HOSTARCHITECTURE_X86_64 */ #endif #elif defined(HAVE_STRUCT_SIGCONTEXT) pc = (byte*)context->sc_pc; sp = (PolyWord*)context->sc_sp; #elif defined(HAVE_WINDOWS_H) #ifdef _WIN64 sp = (PolyWord *)context->Rsp; pc = (POLYCODEPTR)context->Rip; #else // Windows 32 including cygwin. sp = (PolyWord *)context->Esp; pc = (POLYCODEPTR)context->Eip; #endif #else // Can't get context. return false; #endif // Check the sp value is in the current stack. if (sp >= (PolyWord*)taskData->stack && sp < taskData->stack->Offset(taskData->stack->Length())) return true; else return false; // Bad stack pointer } void X86Dependent::InterruptCode(TaskData *taskData) { X86TaskData *mdTask = (X86TaskData*)taskData->mdTaskData; // Set the stack limit pointer to the top of the stack to cause // a trap when we next check for stack overflow. // SetMemRegisters actually does this anyway if "pendingInterrupt" is set but // it's safe to do this repeatedly. if (taskData->stack != 0) mdTask->memRegisters.stackLimit = taskData->stack->Offset(taskData->stack->Length()-1); taskData->pendingInterrupt = true; } // This is called from SwitchToPoly before we enter the ML code. void X86Dependent::SetMemRegisters(TaskData *taskData) { X86TaskData *mdTask = (X86TaskData*)taskData->mdTaskData; // Copy the current store limits into variables before we go into the assembly code. // If we haven't yet set the allocation area or we don't have enough we need // to create one (or a new one). if (taskData->allocPointer <= taskData->allocLimit + mdTask->allocWords || (userOptions.debug & DEBUG_FORCEGC)) { if (taskData->allocPointer < taskData->allocLimit) Crash ("Bad length in heap overflow trap"); // Find some space to allocate in. Updates taskData->allocPointer and // returns a pointer to the newly allocated space (if allocWords != 0) PolyWord *space = processes->FindAllocationSpace(taskData, mdTask->allocWords, true); if (space == 0) { // We will now raise an exception instead of returning. // Set allocWords to zero so we don't set the allocation register // since that could be holding the exception packet. mdTask->allocWords = 0; } // Undo the allocation just now. taskData->allocPointer += mdTask->allocWords; } if (mdTask->allocWords != 0) { // If we have had a heap trap we actually do the allocation here. // We will have already garbage collected and recovered sufficient space. // This also happens if we have just trapped because of store profiling. taskData->allocPointer -= mdTask->allocWords; // Now allocate #ifndef HOSTARCHITECTURE_X86_64 // Set the allocation register to this area. *(get_reg(taskData, mdTask->allocReg)) = PolyWord::FromStackAddr(taskData->allocPointer + 1); /* remember: it's off-by-one */ #endif mdTask->allocWords = 0; } // If we have run out of store, either just above or while allocating in the RTS, // allocPointer and allocLimit will have been set to zero as part of the GC. We will // now be raising an exception which may free some store but we need to come back here // before we allocate anything. The compiled code uses unsigned arithmetic to check for // heap overflow but only after subtracting the space required. We need to make sure // that the values are still non-negative after substracting any object size. if (taskData->allocPointer == 0) taskData->allocPointer += MAX_OBJECT_SIZE; if (taskData->allocLimit == 0) taskData->allocLimit += MAX_OBJECT_SIZE; mdTask->memRegisters.localMbottom = taskData->allocLimit + 1; mdTask->memRegisters.localMpointer = taskData->allocPointer + 1; // If we are profiling store allocation we set mem_hl so that a trap // will be generated. if (profileMode == kProfileStoreAllocation || (userOptions.debug & (DEBUG_FORCEGC|DEBUG_REGION_CHECK))) mdTask->memRegisters.localMbottom = mdTask->memRegisters.localMpointer; mdTask->memRegisters.polyStack = taskData->stack; // Whenever the ML code enters a function it checks that the stack pointer is above // this value. The default is to set it to the top of the reserved area // but if we've had an interrupt we set it to the end of the stack. // InterruptCode may be called either when the thread is in the RTS or in ML code. mdTask->memRegisters.stackTop = taskData->stack->Offset(taskData->stack->Length() - 1); if (taskData->pendingInterrupt) mdTask->memRegisters.stackLimit = taskData->stack->Offset(taskData->stack->Length()-1); else mdTask->memRegisters.stackLimit = taskData->stack->Offset(taskData->stack->p_space); mdTask->memRegisters.handlerRegister = taskData->stack->p_hr; mdTask->memRegisters.requestCode = 0; // Clear these because only one will be set. mdTask->memRegisters.returnReason = RETURN_IO_CALL; // Point "raiseException" at the assembly code for "raisex" mdTask->memRegisters.raiseException = (byte*)raisex; // Entry point to save the state for an IO call. This is the common entry // point for all the return and IO-call cases. mdTask->memRegisters.ioEntry = (byte*)X86AsmSaveStateAndReturn; mdTask->memRegisters.heapOverflow = heapOverflow; mdTask->memRegisters.stackOverflow = stackOverflow; mdTask->memRegisters.stackOverflowEx = stackOverflowEx; mdTask->memRegisters.raiseDiv = raiseDiv; mdTask->memRegisters.arbEmulation = arbEmulation; mdTask->memRegisters.threadId = taskData->threadObject; // We set the PC to zero to indicate that we should retry the call to the RTS // function. In that case we need to set it back to the code address before we // return. This is also used if we have raised an exception. if (PSP_IC(taskData->stack) == PC_RETRY_SPECIAL) taskData->stack->p_pc = PSP_EDX(taskData->stack).AsObjPtr()->Get(0).AsCodePtr(); } // This is called whenever we have returned from ML to C. void X86Dependent::SaveMemRegisters(TaskData *taskData) { X86TaskData *mdTask = (X86TaskData*)taskData->mdTaskData; // Check a few items on the stack to see it hasn't been overwritten if (! taskData->stack->IsStackObject() || taskData->stack->p_space != OVERFLOW_STACK_SIZE || taskData->stack->p_nreg != CHECKED_REGS || taskData->stack->p_reg[CHECKED_REGS] != PolyWord::FromUnsigned(UNCHECKED_REGS)) Crash("Stack overwritten\n"); taskData->allocPointer = mdTask->memRegisters.localMpointer - 1; taskData->stack->p_hr = mdTask->memRegisters.handlerRegister; mdTask->allocWords = 0; } // Called if we need the ML code to retry an RTS call. void X86Dependent::SetForRetry(TaskData *taskData, int ioCall) { /* We now have to set the closure entry for the RTS call to work. DCJM 4/1/01. */ PSP_EDX(taskData->stack) = (PolyObject*)IoEntry(ioCall); taskData->stack->p_pc = PC_RETRY_SPECIAL; // This value is treated specially in SetMemRegisters } PolyWord *X86Dependent::get_reg(TaskData *taskData, int n) /* Returns a pointer to the register given by n. */ { switch (n) { case 0: return &PSP_EAX(taskData->stack); case 1: return &PSP_ECX(taskData->stack); case 2: return &PSP_EDX(taskData->stack); case 3: return &PSP_EBX(taskData->stack); case 4: return (PolyWord*)&taskData->stack->p_sp; case 6: return &PSP_ESI(taskData->stack); case 7: return &PSP_EDI(taskData->stack); #ifdef HOSTARCHITECTURE_X86_64 case 8: return &PSP_R8(taskData->stack); case 9: return &PSP_R9(taskData->stack); case 10: return &PSP_R10(taskData->stack); case 11: return &PSP_R11(taskData->stack); case 12: return &PSP_R12(taskData->stack); case 13: return &PSP_R13(taskData->stack); case 14: return &PSP_R14(taskData->stack); // R15 is the heap pointer so shouldn't occur here. #endif /* HOSTARCHITECTURE_X86_64 */ default: Crash("Unknown register %d at %p\n", n, PSP_IC(taskData->stack)); } } // Called as a result of a heap overflow trap void X86Dependent::HeapOverflowTrap(TaskData *taskData) { X86TaskData *mdTask = (X86TaskData*)taskData->mdTaskData; POLYUNSIGNED wordsNeeded = 0; // The next instruction, after any branches round forwarding pointers, will // be a store of register containing the adjusted heap pointer. We need to // find that register and the value in it in order to find out how big the // area we actually wanted is. while (PSP_IC(taskData->stack)[0] == 0xeb) { if (PSP_IC(taskData->stack)[1] >= 128) PSP_IC(taskData->stack) += 256 - PSP_IC(taskData->stack)[1] + 2; else PSP_IC(taskData->stack) += PSP_IC(taskData->stack)[1] + 2; } #ifndef HOSTARCHITECTURE_X86_64 // This should be movl REG,0[%ebp]. ASSERT(PSP_IC(taskData->stack)[0] == 0x89); mdTask->allocReg = (PSP_IC(taskData->stack)[1] >> 3) & 7; // Remember this until we allocate the memory PolyWord *reg = get_reg(taskData, mdTask->allocReg); PolyWord reg_val = *reg; // The space we need is the difference between this register // and the current value of newptr. // The +1 here is because memRegisters.localMpointer is A.M.pointer +1. The reason // is that after the allocation we have the register pointing at the address we will // actually use. wordsNeeded = (taskData->allocPointer - (PolyWord*)reg_val.AsAddress()) + 1; *reg = TAGGED(0); // Clear this - it's not a valid address. /* length in words, including length word */ ASSERT (wordsNeeded <= (1<<24)); /* Max object size including length/flag word is 2^24 words. */ #else /* HOSTARCHITECTURE_X86_64 */ // This should be movq Length,-8(%r15) ASSERT(PSP_IC(taskData->stack)[0] == 0x49 && PSP_IC(taskData->stack)[1] == 0xc7 && PSP_IC(taskData->stack)[2] == 0x47 && PSP_IC(taskData->stack)[3] == 0xf8); // The Length field should be in the next word. N.B. This assumes that // the length word < 2^31. ASSERT((PSP_IC(taskData->stack)[7] & 0x80) == 0); // Should not be negative for (unsigned i = 7; i >= 4; i--) wordsNeeded = (wordsNeeded << 8) | PSP_IC(taskData->stack)[i]; wordsNeeded += 1; // That was the object size. We need to add one for the length word. #endif /* HOSTARCHITECTURE_X86_64 */ if (profileMode == kProfileStoreAllocation) add_count(taskData, PSP_IC(taskData->stack), PSP_SP(taskData->stack), wordsNeeded); #ifdef HOSTARCHITECTURE_X86_64 // On the X64 the value that ends up in allocSpace->pointer includes the // attempted allocation. Add back the space we tried to allocate taskData->allocPointer += wordsNeeded; #endif /* HOSTARCHITECTURE_X86_64 */ mdTask->allocWords = wordsNeeded; // The actual allocation is done in SetMemRegisters. } /******************************************************************************/ /* */ /* do_compare - do a "long" comparison, setting the flags register */ /* */ /******************************************************************************/ void X86Dependent::do_compare(TaskData *taskData, PolyWord v1, PolyWord v2) { Handle val1, val2; /* Must push these to the save vec. A persistent store trap might cause a garbage collection and move the stack. */ val1 = taskData->saveVec.push(v1); val2 = taskData->saveVec.push(v2); int r = compareLong(taskData, val2, val1); /* Clear the flags. */ POLYUNSIGNED flags = PSP_EFLAGS(taskData->stack).AsUnsigned(); flags &= -256; if (r == 0) flags |= 0x40; else if (r < 0) flags |= 0x80; PSP_EFLAGS(taskData->stack) = PolyWord::FromUnsigned(flags); } /******************************************************************************/ /* */ /* do_op - do a "long" operation, setting the destination register */ /* */ /******************************************************************************/ void X86Dependent::do_op(TaskData *taskData, int dest, PolyWord v1, PolyWord v2, Handle (*op)(TaskData *, Handle, Handle)) { Handle val1, val2, result; /* Must push these to the save vec. A persistent store trap or a garbage collection might move the stack. */ val1 = taskData->saveVec.push(v1); val2 = taskData->saveVec.push(v2); /* Clobber the destination which may have overflowed. */ *(get_reg(taskData, dest)) = TAGGED(0); result = op (taskData, val2, val1); /* N.B parameters are intentionally reversed */ /* N.B. the stack may have moved so we must recompute get_reg(dest). */ *(get_reg(taskData, dest)) = DEREFWORD(result); } // Emulate a long precision operation. bool X86Dependent::emulate_instrs(TaskData *taskData) { int src1 = -1, src2 = -1, dest = -1; bool doneSubtraction = false; while(1) { byte rexPrefix = 0; #ifdef HOSTARCHITECTURE_X86_64 // Get any REX prefix if (PSP_IC(taskData->stack)[0] >= 0x40 && PSP_IC(taskData->stack)[0] <= 0x4f) { rexPrefix = PSP_IC(taskData->stack)[0]; PSP_INCR_PC(taskData->stack, 1); } #endif /* HOSTARCHITECTURE_X86_64 */ // Decode the register fields and include any REX bits int bbb = PSP_IC(taskData->stack)[1] & 7; if (rexPrefix & 0x1) bbb += 8; int rrr = (PSP_IC(taskData->stack)[1] >> 3) & 7; if (rexPrefix & 0x4) rrr += 8; switch (PSP_IC(taskData->stack)[0]) { case 0x03: /* add. */ if ((PSP_IC(taskData->stack)[1] & 0xc0) != 0xc0) Crash("Expected register"); if (dest != rrr) Crash("Expected same destination register."); src2 = bbb; do_op(taskData, dest, *(get_reg(taskData, src1)), *(get_reg(taskData, src2)), add_longc); PSP_INCR_PC(taskData->stack, 2); return true; case 0x2b: /* Subtraction. */ if ((PSP_IC(taskData->stack)[1] & 0xc0) != 0xc0) Crash("Expected register"); if (dest != rrr) Crash("Expected same destination register."); src2 = bbb; do_op(taskData, dest, *(get_reg(taskData, src1)), *(get_reg(taskData, src2)), sub_longc); PSP_INCR_PC(taskData->stack, 2); // The next instruction should be a lea to put on the tag. // The result is already tagged so we need to skip that. // Previously this removed the tag and returned but CheckRegion // didn't like this. doneSubtraction = true; break; case 0x3b: /* Compare. */ if ((PSP_IC(taskData->stack)[1] & 0xc0) != 0xc0) Crash("Expected register"); src1 = rrr; src2 = bbb; do_compare(taskData, *(get_reg(taskData, src1)), *(get_reg(taskData, src2))); PSP_INCR_PC(taskData->stack, 2); return true; case 0x8d: /* leal - Used to remove a tag before an add and multiply. */ // Also used to put the tag on after a subtraction. if ((PSP_IC(taskData->stack)[1] & 7) == 4) { // R12 (and RSP but that isn't used here) have to be encoded with a SIB byte. ASSERT((PSP_IC(taskData->stack)[2] & 7) == 4); // Should be same register PSP_INCR_PC(taskData->stack, 1); } if (doneSubtraction) { PSP_INCR_PC(taskData->stack, 3); return true; } if (src1 == -1) src1 = bbb; else src2 = bbb; dest = rrr; ASSERT(PSP_IC(taskData->stack)[2] == 0xff); PSP_INCR_PC(taskData->stack, 3); break; case 0x89: /* movl: move source into dest. */ if ((PSP_IC(taskData->stack)[1] & 0xc0) != 0xc0) Crash("Can't move into store."); dest = bbb; if (src1 == -1) src1 = rrr; else src2 = rrr; PSP_INCR_PC(taskData->stack, 2); /* Next should be add-immediate. */ break; case 0x83: { /* One byte immediate: Add, sub or compare. */ int cval = PSP_IC(taskData->stack)[2]; if (cval >= 128) cval -= 256; switch (PSP_IC(taskData->stack)[1] & (7 << 3)) // This is a code. Ignore any REX override. { case (0 << 3): /* add */ { if (dest != bbb) Crash("Expected same destination register."); /* immediate value is shifted, but hasn't had 1 added; do this now before calling add_longc */ do_op(taskData, dest, *(get_reg(taskData, src1)), PolyWord::FromSigned(cval+1), add_longc); break; } case (5 << 3): /* sub */ { if (dest != bbb) Crash("Expected same destination register."); /* immediate value is shifted, but hasn't had 1 added; do this now before calling sub_longc */ do_op(taskData, dest, *(get_reg(taskData, src1)), PolyWord::FromSigned(cval+1), sub_longc); break; } case (7 << 3): /* cmp */ { if ((PSP_IC(taskData->stack)[1] & 0xc0) != 0xc0) Crash("Can't test with store."); src1 = bbb; /* immediate value is already tagged */ do_compare(taskData, *(get_reg(taskData, src1)), PolyWord::FromSigned(cval)); break; } default: Crash("Unknown instruction after overflow trap"); } PSP_INCR_PC(taskData->stack, 3); return true; } case 0x81: { /* 4 byte immediate: Add, sub or compare. */ int cval = PSP_IC(taskData->stack)[5]; if (cval >= 128) cval -= 256; cval = cval*256 + PSP_IC(taskData->stack)[4]; cval = cval*256 + PSP_IC(taskData->stack)[3]; cval = cval*256 + PSP_IC(taskData->stack)[2]; if ((PSP_IC(taskData->stack)[1] & 0xc0) != 0xc0) Crash("Expected register"); switch (PSP_IC(taskData->stack)[1] & (7 << 3)) { case (0 << 3): /* add */ { if (dest != bbb) Crash("Expected same destination register."); /* immediate value is shifted, but hasn't had 1 added; do this now before calling add_longc */ do_op(taskData, dest, *(get_reg(taskData, src1)), PolyWord::FromSigned(cval+1), add_longc); break; } case (5 << 3): /* sub */ { if (dest != bbb) Crash("Expected same destination register."); /* immediate value is shifted, but hasn't had 1 added; do this now before calling sub_longc */ do_op(taskData, dest, *(get_reg(taskData, src1)), PolyWord::FromSigned(cval+1), sub_longc); break; } case (7 << 3): /* cmp */ { src1 = bbb; /* immediate value is already tagged */ do_compare(taskData, *(get_reg(taskData, src1)), PolyWord::FromSigned(cval)); break; } default: Crash("Unknown instruction after overflow trap"); } PSP_INCR_PC(taskData->stack, 6); return true; } case 0xeb: /* jmp - used in branch forwarding. */ /* While forwarded jumps are always positive we may use backward branches in the future. */ if (PSP_IC(taskData->stack)[1] >= 128) PSP_INCR_PC(taskData->stack, 256 - PSP_IC(taskData->stack)[1] + 2); else PSP_INCR_PC(taskData->stack, PSP_IC(taskData->stack)[1] + 2); break; case 0x50: /* push eax - used before a multiply. */ #ifdef HOSTARCHITECTURE_X86_64 ASSERT((rexPrefix & 1) == 0); // Check it's not r8 #endif /* HOSTARCHITECTURE_X86_64 */ *(--PSP_SP(taskData->stack)) = PSP_EAX(taskData->stack); PSP_INCR_PC(taskData->stack, 1); break; case 0x52: /* push edx - used before a multiply. */ #ifdef HOSTARCHITECTURE_X86_64 ASSERT((rexPrefix & 1) == 0); // Check it's not r10 #endif /* HOSTARCHITECTURE_X86_64 */ *(--PSP_SP(taskData->stack)) = PSP_EDX(taskData->stack); PSP_INCR_PC(taskData->stack, 1); break; case 0xd1: /* Group1A - must be sar edx before a multiply. */ if (PSP_IC(taskData->stack)[1] != 0xfa) Crash("Unknown instruction after overflow trap"); PSP_INCR_PC(taskData->stack, 2); /* If we haven't moved anything into edx then edx must be one of the arguments. */ if (src2 == -1) src2 = 2; /* edx. */ break; case 0xf7: /* Multiply instruction. */ if (PSP_IC(taskData->stack)[1] != 0xea) Crash("Unknown instruction after overflow trap"); do_op(taskData, 0 /* eax */, *(get_reg(taskData, src1)), *(get_reg(taskData, src2)), mult_longc); /* Subtract one because the next instruction will tag it. */ PSP_EAX(taskData->stack) = PolyWord::FromUnsigned(PSP_EAX(taskData->stack).AsUnsigned() - 1); PSP_INCR_PC(taskData->stack, 2); return true; default: Crash("Unknown instruction after overflow trap"); } } return false; } void X86Dependent::ArbitraryPrecisionTrap(TaskData *taskData) { // Arithmetic operation has overflowed or detected long values. if (profileMode == kProfileEmulation) add_count(taskData, PSP_IC(taskData->stack), PSP_SP(taskData->stack), 1); // Emulate the arbitrary precision instruction. if (! emulate_instrs(taskData)) Crash("Arbitrary precision emulation fault at %x\n", PSP_IC(taskData->stack)); } // These macros build small pieces of assembly code for each io call. // The code simply sets the requestCode value and jumps to // X86AsmSaveStateAndReturn. The address of these code pieces is // stored in iovec. Values in iovec are never looked at with the // garbage collector so that's safe. // N.B. The length of this code (7) is built into BuildKillSelf // It's 7 bytes on both x86 and X86_64. #define MAKE_CALL_SEQUENCE_BYTES 7 #ifndef __GNUC__ // Windows #ifndef HOSTARCHITECTURE_X86_64 #define MAKE_IO_CALL_SEQUENCE(ioNum, result) \ { \ __asm call endCode##ioNum \ __asm mov byte ptr [20+ebp],ioNum \ __asm jmp dword ptr [48+ebp] \ __asm endCode##ioNum: pop eax \ __asm mov result,eax \ } #define MAKE_EXTRA_CALL_SEQUENCE(exNum, result) \ { \ __asm call endCodeX##exNum \ __asm mov byte ptr [22+ebp],exNum \ __asm jmp dword ptr [48+ebp] \ __asm endCodeX##exNum: pop eax \ __asm mov result,eax \ } #else /* HOSTARCHITECTURE_X86_64 */ // Visual C++ on X64 doesn't support inline assembly code #endif /* HOSTARCHITECTURE_X86_64 */ #else #ifndef HOSTARCHITECTURE_X86_64 #define MAKE_IO_CALL_SEQUENCE(ioNum, result) \ { \ __asm__ __volatile__ ( "call 1f; " \ "movb %1,20(%%ebp); " \ "jmp *48(%%ebp); " \ "1: popl %0" \ :"=r"(result) \ :"i"(ioNum) \ ); \ } #define MAKE_EXTRA_CALL_SEQUENCE(exNum, result) \ { \ __asm__ __volatile__ ( "call 1f; " \ "movb %1,22(%%ebp); " \ "jmp *48(%%ebp); " \ "1: popl %0" \ :"=r"(result) \ :"i"(exNum) \ ); \ } #else /* HOSTARCHITECTURE_X86_64 */ #define MAKE_IO_CALL_SEQUENCE(ioNum, result) \ { \ __asm__ __volatile__ ( "call 1f; " \ "movb %1,40(%%rbp); " \ "jmp *96(%%rbp); " \ "1: popq %0" \ :"=r"(result) \ :"i"(ioNum) \ ); \ } #define MAKE_EXTRA_CALL_SEQUENCE(exNum, result) \ { \ __asm__ __volatile__ ( "call 1f; " \ "movb %1,42(%%rbp); " \ "jmp *96(%%rbp); " \ "1: popq %0" \ :"=r"(result) \ :"i"(exNum) \ ); \ } #endif /* HOSTARCHITECTURE_X86_64 */ #endif static void add_function_to_io_area(int x, int (*y)()) { add_word_to_io_area(x, PolyWord::FromUnsigned((POLYUNSIGNED)y)); } /******************************************************************************/ /* */ /* MD_init_interface_vector - called from run-time system */ /* */ /******************************************************************************/ void X86Dependent::InitInterfaceVector(void) { unsigned char *codeAddr; MAKE_IO_CALL_SEQUENCE(POLY_SYS_exit, codeAddr); add_word_to_io_area(POLY_SYS_exit, PolyWord::FromCodePtr(codeAddr)); add_function_to_io_area(POLY_SYS_alloc_store, &alloc_store); MAKE_IO_CALL_SEQUENCE(POLY_SYS_chdir, codeAddr); add_word_to_io_area(POLY_SYS_chdir, PolyWord::FromCodePtr(codeAddr)); add_function_to_io_area(POLY_SYS_get_length, &get_length_a); MAKE_IO_CALL_SEQUENCE(POLY_SYS_get_flags, codeAddr); add_word_to_io_area(POLY_SYS_get_flags, PolyWord::FromCodePtr(codeAddr)); add_function_to_io_area(POLY_SYS_str_compare, str_compare); add_function_to_io_area(POLY_SYS_teststreq, &teststreq); add_function_to_io_area(POLY_SYS_teststrneq, &teststrneq); add_function_to_io_area(POLY_SYS_teststrgtr, &teststrgtr); add_function_to_io_area(POLY_SYS_teststrlss, &teststrlss); add_function_to_io_area(POLY_SYS_teststrgeq, &teststrgeq); add_function_to_io_area(POLY_SYS_teststrleq, &teststrleq); MAKE_IO_CALL_SEQUENCE(POLY_SYS_exception_trace, codeAddr); add_word_to_io_area(POLY_SYS_exception_trace, PolyWord::FromCodePtr(codeAddr)); add_function_to_io_area(POLY_SYS_lockseg, &locksega); MAKE_IO_CALL_SEQUENCE(POLY_SYS_profiler, codeAddr); add_word_to_io_area(POLY_SYS_profiler, PolyWord::FromCodePtr(codeAddr)); add_function_to_io_area(POLY_SYS_is_short, &is_shorta); add_function_to_io_area(POLY_SYS_aplus, &add_long); // Retain add_function_to_io_area(POLY_SYS_aminus, &sub_long); add_function_to_io_area(POLY_SYS_amul, &mult_long); add_function_to_io_area(POLY_SYS_adiv, &div_long); add_function_to_io_area(POLY_SYS_amod, &rem_long); add_function_to_io_area(POLY_SYS_aneg, &neg_long); add_function_to_io_area(POLY_SYS_equala, &equal_long); add_function_to_io_area(POLY_SYS_ora, &or_long); add_function_to_io_area(POLY_SYS_anda, &and_long); add_function_to_io_area(POLY_SYS_xora, &xor_long); MAKE_IO_CALL_SEQUENCE(POLY_SYS_Real_str, codeAddr); add_word_to_io_area(POLY_SYS_Real_str, PolyWord::FromCodePtr(codeAddr)); add_function_to_io_area(POLY_SYS_Real_geq, real_geq); add_function_to_io_area(POLY_SYS_Real_leq, real_leq); add_function_to_io_area(POLY_SYS_Real_gtr, real_gtr); add_function_to_io_area(POLY_SYS_Real_lss, real_lss); add_function_to_io_area(POLY_SYS_Real_eq, real_eq); add_function_to_io_area(POLY_SYS_Real_neq, real_neq); MAKE_IO_CALL_SEQUENCE(POLY_SYS_Real_Dispatch, codeAddr); add_word_to_io_area(POLY_SYS_Real_Dispatch, PolyWord::FromCodePtr(codeAddr)); add_function_to_io_area(POLY_SYS_Add_real, real_add); add_function_to_io_area(POLY_SYS_Sub_real, real_sub); add_function_to_io_area(POLY_SYS_Mul_real, real_mul); add_function_to_io_area(POLY_SYS_Div_real, real_div); add_function_to_io_area(POLY_SYS_Neg_real, real_neg); MAKE_IO_CALL_SEQUENCE(POLY_SYS_Repr_real, codeAddr); add_word_to_io_area(POLY_SYS_Repr_real, PolyWord::FromCodePtr(codeAddr)); MAKE_IO_CALL_SEQUENCE(POLY_SYS_conv_real, codeAddr); add_word_to_io_area(POLY_SYS_conv_real, PolyWord::FromCodePtr(codeAddr)); MAKE_IO_CALL_SEQUENCE(POLY_SYS_real_to_int, codeAddr); add_word_to_io_area(POLY_SYS_real_to_int, PolyWord::FromCodePtr(codeAddr)); add_function_to_io_area(POLY_SYS_int_to_real, real_from_int); MAKE_IO_CALL_SEQUENCE(POLY_SYS_sqrt_real, codeAddr); add_word_to_io_area(POLY_SYS_sqrt_real, PolyWord::FromCodePtr(codeAddr)); MAKE_IO_CALL_SEQUENCE(POLY_SYS_sin_real, codeAddr); add_word_to_io_area(POLY_SYS_sin_real, PolyWord::FromCodePtr(codeAddr)); MAKE_IO_CALL_SEQUENCE(POLY_SYS_cos_real, codeAddr); add_word_to_io_area(POLY_SYS_cos_real, PolyWord::FromCodePtr(codeAddr)); MAKE_IO_CALL_SEQUENCE(POLY_SYS_arctan_real, codeAddr); add_word_to_io_area(POLY_SYS_arctan_real, PolyWord::FromCodePtr(codeAddr)); MAKE_IO_CALL_SEQUENCE(POLY_SYS_exp_real, codeAddr); add_word_to_io_area(POLY_SYS_exp_real, PolyWord::FromCodePtr(codeAddr)); MAKE_IO_CALL_SEQUENCE(POLY_SYS_ln_real, codeAddr); add_word_to_io_area(POLY_SYS_ln_real, PolyWord::FromCodePtr(codeAddr)); MAKE_IO_CALL_SEQUENCE(POLY_SYS_io_operation, codeAddr); add_word_to_io_area(POLY_SYS_io_operation, PolyWord::FromCodePtr(codeAddr)); add_function_to_io_area(POLY_SYS_atomic_incr, &atomic_increment); add_function_to_io_area(POLY_SYS_atomic_decr, &atomic_decrement); add_function_to_io_area(POLY_SYS_thread_self, &thread_self); MAKE_IO_CALL_SEQUENCE(POLY_SYS_thread_dispatch, codeAddr); add_word_to_io_area(POLY_SYS_thread_dispatch, PolyWord::FromCodePtr(codeAddr)); MAKE_IO_CALL_SEQUENCE(POLY_SYS_kill_self, codeAddr); add_word_to_io_area(POLY_SYS_kill_self, PolyWord::FromCodePtr(codeAddr)); add_function_to_io_area(POLY_SYS_offset_address, &offset_address); add_function_to_io_area(POLY_SYS_shift_right_word, &shift_right_word); add_function_to_io_area(POLY_SYS_word_neq, &word_neq); add_function_to_io_area(POLY_SYS_not_bool, ¬_bool); add_function_to_io_area(POLY_SYS_string_length, &string_length); add_function_to_io_area(POLY_SYS_int_eq, &int_eq); add_function_to_io_area(POLY_SYS_int_neq, &int_neq); add_function_to_io_area(POLY_SYS_int_geq, &int_geq); add_function_to_io_area(POLY_SYS_int_leq, &int_leq); add_function_to_io_area(POLY_SYS_int_gtr, &int_gtr); add_function_to_io_area(POLY_SYS_int_lss, &int_lss); add_function_to_io_area(POLY_SYS_or_word, &or_word); add_function_to_io_area(POLY_SYS_and_word, &and_word); add_function_to_io_area(POLY_SYS_xor_word, &xor_word); add_function_to_io_area(POLY_SYS_shift_left_word, &shift_left_word); add_function_to_io_area(POLY_SYS_word_eq, &word_eq); add_function_to_io_area(POLY_SYS_load_byte, &load_byte); add_function_to_io_area(POLY_SYS_load_word, &load_word); add_function_to_io_area(POLY_SYS_is_big_endian, &is_big_endian); add_function_to_io_area(POLY_SYS_bytes_per_word, &bytes_per_word); add_function_to_io_area(POLY_SYS_assign_byte, &assign_byte); add_function_to_io_area(POLY_SYS_assign_word, &assign_word); MAKE_IO_CALL_SEQUENCE(POLY_SYS_objsize, codeAddr); add_word_to_io_area(POLY_SYS_objsize, PolyWord::FromCodePtr(codeAddr)); MAKE_IO_CALL_SEQUENCE(POLY_SYS_showsize, codeAddr); add_word_to_io_area(POLY_SYS_showsize, PolyWord::FromCodePtr(codeAddr)); MAKE_IO_CALL_SEQUENCE(POLY_SYS_timing_dispatch, codeAddr); add_word_to_io_area(POLY_SYS_timing_dispatch, PolyWord::FromCodePtr(codeAddr)); MAKE_IO_CALL_SEQUENCE(POLY_SYS_XWindows, codeAddr); add_word_to_io_area(POLY_SYS_XWindows, PolyWord::FromCodePtr(codeAddr)); MAKE_IO_CALL_SEQUENCE(POLY_SYS_full_gc, codeAddr); add_word_to_io_area(POLY_SYS_full_gc, PolyWord::FromCodePtr(codeAddr)); MAKE_IO_CALL_SEQUENCE(POLY_SYS_stack_trace, codeAddr); add_word_to_io_area(POLY_SYS_stack_trace, PolyWord::FromCodePtr(codeAddr)); MAKE_IO_CALL_SEQUENCE(POLY_SYS_foreign_dispatch, codeAddr); add_word_to_io_area(POLY_SYS_foreign_dispatch, PolyWord::FromCodePtr(codeAddr)); MAKE_IO_CALL_SEQUENCE(POLY_SYS_callcode_tupled, codeAddr); add_word_to_io_area(POLY_SYS_callcode_tupled, PolyWord::FromCodePtr(codeAddr)); MAKE_IO_CALL_SEQUENCE(POLY_SYS_process_env, codeAddr); add_word_to_io_area(POLY_SYS_process_env, PolyWord::FromCodePtr(codeAddr)); add_function_to_io_area(POLY_SYS_set_string_length, &set_string_length_a); /* DCJM 28/2/01 */ add_function_to_io_area(POLY_SYS_get_first_long_word, &get_first_long_word_a); /* DCJM 28/2/01 */ MAKE_IO_CALL_SEQUENCE(POLY_SYS_shrink_stack, codeAddr); add_word_to_io_area(POLY_SYS_shrink_stack, PolyWord::FromCodePtr(codeAddr)); MAKE_IO_CALL_SEQUENCE(POLY_SYS_code_flags, codeAddr); add_word_to_io_area(POLY_SYS_code_flags, PolyWord::FromCodePtr(codeAddr)); add_function_to_io_area(POLY_SYS_shift_right_arith_word, &shift_right_arith_word); /* DCJM 10/10/99 */ add_function_to_io_area(POLY_SYS_int_to_word, &int_to_word); /* DCJM 10/10/99 */ MAKE_IO_CALL_SEQUENCE(POLY_SYS_set_code_constant, codeAddr); /* DCJM 2/1/01 */ add_word_to_io_area(POLY_SYS_set_code_constant, PolyWord::FromCodePtr(codeAddr)); MAKE_IO_CALL_SEQUENCE(POLY_SYS_poly_specific, codeAddr); /* DCJM 19/6/06 */ add_word_to_io_area(POLY_SYS_poly_specific, PolyWord::FromCodePtr(codeAddr)); add_function_to_io_area(POLY_SYS_move_bytes, &move_bytes); /* DCJM 10/10/99 */ add_function_to_io_area(POLY_SYS_move_words, &move_words); /* DCJM 10/10/99 */ add_function_to_io_area(POLY_SYS_mul_word, &mul_word); /* DCJM 10/10/99 */ add_function_to_io_area(POLY_SYS_plus_word, &plus_word); /* DCJM 10/10/99 */ add_function_to_io_area(POLY_SYS_minus_word, &minus_word); /* DCJM 10/10/99 */ add_function_to_io_area(POLY_SYS_div_word, &div_word); /* DCJM 10/10/99 */ add_function_to_io_area(POLY_SYS_mod_word, &mod_word); /* DCJM 10/10/99 */ add_function_to_io_area(POLY_SYS_word_geq, &word_geq); add_function_to_io_area(POLY_SYS_word_leq, &word_leq); add_function_to_io_area(POLY_SYS_word_gtr, &word_gtr); add_function_to_io_area(POLY_SYS_word_lss, &word_lss); // This used to contain the code itself. Now this is set up as a "closure" // but is only used for exceptions raised within the RTS. add_function_to_io_area(POLY_SYS_raisex, &raisex); MAKE_IO_CALL_SEQUENCE(POLY_SYS_io_dispatch, codeAddr); add_word_to_io_area(POLY_SYS_io_dispatch, PolyWord::FromCodePtr(codeAddr)); MAKE_IO_CALL_SEQUENCE(POLY_SYS_network, codeAddr); add_word_to_io_area(POLY_SYS_network, PolyWord::FromCodePtr(codeAddr)); MAKE_IO_CALL_SEQUENCE(POLY_SYS_os_specific, codeAddr); add_word_to_io_area(POLY_SYS_os_specific, PolyWord::FromCodePtr(codeAddr)); MAKE_IO_CALL_SEQUENCE(POLY_SYS_signal_handler, codeAddr); add_word_to_io_area(POLY_SYS_signal_handler, PolyWord::FromCodePtr(codeAddr)); // Entries for special cases. These are generally, but not always, called from // compiled code. MAKE_EXTRA_CALL_SEQUENCE(RETURN_HEAP_OVERFLOW, heapOverflow); MAKE_EXTRA_CALL_SEQUENCE(RETURN_STACK_OVERFLOW, stackOverflow); MAKE_EXTRA_CALL_SEQUENCE(RETURN_STACK_OVERFLOWEX, stackOverflowEx); MAKE_EXTRA_CALL_SEQUENCE(RETURN_RAISE_DIV, raiseDiv); MAKE_EXTRA_CALL_SEQUENCE(RETURN_ARB_EMULATION, arbEmulation); } // We need the kill-self code in a little function. Handle X86Dependent::BuildKillSelf(TaskData *taskData) { byte *codeAddr; MAKE_IO_CALL_SEQUENCE(POLY_SYS_kill_self, codeAddr); return BuildCodeSegment(taskData, codeAddr, MAKE_CALL_SEQUENCE_BYTES, 'K'); } void X86Dependent::SetException(TaskData *taskData, poly_exn *exc) // Set up the stack of a process to raise an exception. { PSP_EDX(taskData->stack) = (PolyObject*)IoEntry(POLY_SYS_raisex); PSP_IC(taskData->stack) = PC_RETRY_SPECIAL; PSP_EAX(taskData->stack) = exc; /* put exception data into eax */ } void X86Dependent::ResetSignals(void) { /* restore default signal handling. */ /* SIGILL, SIGEMT are not used in PC version */ signal(SIGFPE, SIG_DFL); } // Call a piece of compiled code. void X86Dependent::CallCodeTupled(TaskData *taskData) { // The eventual return address is on the stack - leave it there. PolyObject *argTuple = PSP_EAX(taskData->stack).AsObjPtr(); Handle closure = taskData->saveVec.push(argTuple->Get(0)); Handle argvec = taskData->saveVec.push(argTuple->Get(1)); if (! IS_INT(DEREFWORD(argvec))) // May be nil if there are no args. { PolyObject *argv = DEREFHANDLE(argvec); POLYUNSIGNED argCount = argv->Length(); // Check we have space for the arguments. This may result in a GC which // in turn may throw a C++ exception. if (argCount > 2) { try { CheckAndGrowStack(taskData, taskData->stack->p_sp - (argCount - 2)); } catch (IOException) { return; // Will have been set up to raise an exception. } } // First argument is in EAX PSP_EAX(taskData->stack) = argv->Get(0); // Second arg, if there is one, goes into EBX if (argCount > 1) PSP_EBX(taskData->stack) = argv->Get(1); #ifdef HOSTARCHITECTURE_X86_64 if (argCount > 2) PSP_R8(taskData->stack) = argv->Get(2); if (argCount > 3) PSP_R9(taskData->stack) = argv->Get(3); if (argCount > 4) PSP_R10(taskData->stack) = argv->Get(4); #endif /* HOSTARCHITECTURE_X86_64 */ // Remaining args go on the stack. #ifndef HOSTARCHITECTURE_X86_64 for (POLYUNSIGNED i = 2; i < argCount; i++) *(--PSP_SP(taskData->stack)) = argv->Get(i+2); #else /* HOSTARCHITECTURE_X86_64 */ for (POLYUNSIGNED i = 5; i < argCount; i++) *(--PSP_SP(taskData->stack)) = argv->Get(i); #endif /* HOSTARCHITECTURE_X86_64 */ } // The closure goes into the closure reg. PSP_EDX(taskData->stack) = DEREFWORD(closure); // First word of closure is entry point. PSP_IC(taskData->stack) = (PSP_EDX(taskData->stack)).AsObjPtr()->Get(0).AsCodePtr(); } // Sets up a callback function on the current stack. The present state is that // the ML code has made a call in to foreign_dispatch. We need to set the stack // up so that we will enter the callback (as with CallCodeTupled) but when we return // the result we enter callback_return. void X86Dependent::SetCallbackFunction(TaskData *taskData, Handle func, Handle args) { byte *codeAddr1, *codeAddr2; MAKE_EXTRA_CALL_SEQUENCE(RETURN_CALLBACK_RETURN, codeAddr1); Handle callBackReturn = BuildCodeSegment(taskData, codeAddr1, MAKE_CALL_SEQUENCE_BYTES, 'C'); MAKE_EXTRA_CALL_SEQUENCE(RETURN_CALLBACK_EXCEPTION, codeAddr2); Handle callBackException = BuildCodeSegment(taskData, codeAddr2, MAKE_CALL_SEQUENCE_BYTES, 'X'); // Save the closure pointer and argument registers to the stack. If we have to // retry the current RTS call we need these to have their original values. *(--PSP_SP(taskData->stack)) = PSP_EDX(taskData->stack); *(--PSP_SP(taskData->stack)) = PSP_EAX(taskData->stack); *(--PSP_SP(taskData->stack)) = PSP_EBX(taskData->stack); #ifdef HOSTARCHITECTURE_X86_64 *(--PSP_SP(taskData->stack)) = PSP_R8(taskData->stack); *(--PSP_SP(taskData->stack)) = PSP_R9(taskData->stack); *(--PSP_SP(taskData->stack)) = PSP_R10(taskData->stack); #endif // Set up an exception handler so we will enter callBackException if there is an exception. *(--PSP_SP(taskData->stack)) = PolyWord::FromStackAddr(taskData->stack->p_hr); // Create a special handler entry *(--PSP_SP(taskData->stack)) = callBackException->Word(); *(--PSP_SP(taskData->stack)) = TAGGED(0); taskData->stack->p_hr = PSP_SP(taskData->stack); // Push the call to callBackReturn onto the stack as the return address. *(--PSP_SP(taskData->stack)) = callBackReturn->Word(); // Set up the entry point of the callback. PolyObject *functToCall = func->WordP(); PSP_EDX(taskData->stack) = functToCall; // Closure address PSP_EAX(taskData->stack) = args->Word(); taskData->stack->p_pc = functToCall->Get(0).AsCodePtr(); // First word of closure is entry pt. } static void skipea(byte **pt, ScanAddress *process) { unsigned int modrm = *((*pt)++); unsigned int md = modrm >> 6; unsigned int rm = modrm & 7; if (md == 3) { } /* Register. */ else if (rm == 4) { /* s-i-b present. */ unsigned int sib = *((*pt)++); if (md == 0) { if ((sib & 7) == 5) { /* An immediate address. */ #ifndef HOSTARCHITECTURE_X86_64 process->ScanConstant(*pt, PROCESS_RELOC_DIRECT); #endif /* HOSTARCHITECTURE_X86_64 */ (*pt) += 4; } } else if (md == 1) (*pt)++; else if (md == 2) (*pt) += 4; } else if (md == 0 && rm == 5) { #ifndef HOSTARCHITECTURE_X86_64 /* Absolute address. */ process->ScanConstant(*pt, PROCESS_RELOC_DIRECT); #endif /* HOSTARCHITECTURE_X86_64 */ *pt += 4; } else { if (md == 1) *pt += 1; else if (md == 2) *pt += 4; } } /* Added to deal with constants within the code rather than in the constant area. The constant area is still needed for the function name. DCJM 2/1/2001 */ void X86Dependent::ScanConstantsWithinCode(PolyObject *addr, PolyObject *old, POLYUNSIGNED length, ScanAddress *process) { byte *pt = (byte*)addr; PolyWord *end; POLYUNSIGNED unused; /* Find the end of the code (before the constants). */ addr->GetConstSegmentForCode(length, end, unused); end -= 3; assert(end->AsUnsigned() == 0); /* This should be the marker word. */ while (pt != (byte*)end) { #ifdef HOSTARCHITECTURE_X86_64 // REX prefixes. Set this first. byte lastRex; if (*pt >= 0x40 && *pt <= 0x4f) lastRex = *pt++; else lastRex = 0; //printf("pt=%p *pt=%x\n", pt, *pt); #endif /* HOSTARCHITECTURE_X86_64 */ switch (*pt) { case 0x50: case 0x51: case 0x52: case 0x53: case 0x54: case 0x55: case 0x56: case 0x57: /* Push */ case 0x58: case 0x59: case 0x5a: case 0x5b: case 0x5c: case 0x5d: case 0x5e: case 0x5f: /* Pop */ case 0x90: /* nop */ case 0xc3: /* ret */ case 0xf9: /* stc */ case 0xce: /* into */ pt += 1; break; case 0x70: case 0x72: case 0x73: case 0x74: case 0x75: case 0x76: case 0x77: case 0x7c: case 0x7d: case 0x7e: case 0x7f: case 0xeb: /* short jumps. */ case 0xcd: /* INT */ case 0xa8: /* TEST_ACC8 */ case 0x6a: /* PUSH_8 */ pt += 2; break; case 0xc2: /* RET_16 */ pt += 3; break; case 0x03: case 0x0b: case 0x13: case 0x1b: case 0x23: case 0x2b: case 0x33: case 0x3b: /* Add r,ea etc. */ case 0x88: /* MOVB_R_A */ case 0x89: /* MOVL_R_A */ case 0x8b: /* MOVL_A_R */ case 0x62: /* BOUNDL */ case 0xff: /* Group5 */ case 0xd1: /* Group2_1_A */ case 0x8f: /* POP_A */ case 0x8d: /* leal. */ pt++; skipea(&pt, process); break; case 0xf6: /* Group3_a */ { int isTest = 0; pt++; /* The test instruction has an immediate operand. */ if ((*pt & 0x38) == 0) isTest = 1; skipea(&pt, process); if (isTest) pt++; break; } case 0xf7: /* Group3_A */ { int isTest = 0; pt++; /* The test instruction has an immediate operand. */ if ((*pt & 0x38) == 0) isTest = 1; skipea(&pt, process); if (isTest) pt += 4; break; } case 0xc1: /* Group2_8_A */ case 0xc6: /* MOVB_8_A */ case 0x83: /* Group1_8_A */ pt++; skipea(&pt, process); pt++; break; case 0x81: /* Group1_32_A */ { pt ++; skipea(&pt, process); /* Ignore the 32 bit constant here. It may be untagged and it shouldn't be an address. */ pt += 4; break; } case 0xe8: case 0xe9: // Long jump and call. These are used to call constant (known) functions // and also long jumps within the function. { pt++; POLYSIGNED disp = (pt[3] & 0x80) ? -1 : 0; // Set the sign just in case. for(unsigned i = 4; i > 0; i--) disp = (disp << 8) | pt[i-1]; byte *absAddr = pt + disp + 4; // The address is relative to AFTER the constant // If the new address is within the current piece of code we don't do anything if (absAddr >= (byte*)addr && absAddr < (byte*)end) {} else { #ifdef HOSTARCHITECTURE_X86_64 ASSERT(sizeof(PolyWord) == 4); // Should only be used internally on x64 #endif /* HOSTARCHITECTURE_X86_64 */ if (addr != old) { // The old value of the displacement was relative to the old address before // we copied this code segment. // We have to correct it back to the original address. absAddr = absAddr - (byte*)addr + (byte*)old; // We have to correct the displacement for the new location and store // that away before we call ScanConstant. POLYSIGNED newDisp = absAddr - pt - 4; for (unsigned i = 0; i < 4; i++) { pt[i] = (byte)(newDisp & 0xff); newDisp >>= 8; } } process->ScanConstant(pt, PROCESS_RELOC_I386RELATIVE); } pt += 4; break; } case 0xc7:/* MOVL_32_A */ { pt++; if ((*pt & 0xc0) == 0x40 /* Byte offset or sib present */ && ((*pt & 7) != 4) /* But not sib present */ && pt[1] == 256-sizeof(PolyWord)) { /* We may use a move instruction to set the length word on a new segment. We mustn't try to treat this as a constant. */ pt += 6; /* Skip the modrm byte, the offset and the constant. */ } else { skipea(&pt, process); #ifndef HOSTARCHITECTURE_X86_64 process->ScanConstant(pt, PROCESS_RELOC_DIRECT); #endif /* HOSTARCHITECTURE_X86_64 */ pt += 4; } break; } case 0xb8: case 0xb9: case 0xba: case 0xbb: case 0xbc: case 0xbd: case 0xbe: case 0xbf: /* MOVL_32_64_R */ pt ++; #ifdef HOSTARCHITECTURE_X86_64 if ((lastRex & 8) == 0) pt += 4; // 32-bit mode on 64-bits. Can this occur? else #endif /* HOSTARCHITECTURE_X86_64 */ { // 32 bits in 32-bit mode, 64-bits in 64-bit mode. process->ScanConstant(pt, PROCESS_RELOC_DIRECT); pt += sizeof(PolyWord); } break; case 0x68: /* PUSH_32 */ pt ++; #ifndef HOSTARCHITECTURE_X86_64 process->ScanConstant(pt, PROCESS_RELOC_DIRECT); #endif /* HOSTARCHITECTURE_X86_64 */ pt += 4; break; case 0x0f: /* ESCAPE */ { pt++; switch (*pt) { case 0xb6: /* movzl */ pt++; skipea(&pt, process); break; case 0x80: case 0x81: case 0x82: case 0x83: case 0x84: case 0x85: case 0x86: case 0x87: case 0x88: case 0x89: case 0x8a: case 0x8b: case 0x8c: case 0x8d: case 0x8e: case 0x8f: /* Conditional branches with 32-bit displacement. */ pt += 5; break; default: Crash("Unknown opcode %d at %p\n", *pt, pt); } break; } default: Crash("Unknown opcode %d at %p\n", *pt, pt); } } } extern "C" int registerMaskVector[]; int X86Dependent::GetIOFunctionRegisterMask(int ioCall) { return registerMaskVector[ioCall]; } // Store a constant in the code segment. This has to be handled specially because // the constant is probably an address. // At the moment this assumes we're dealing with a 32-bit constant on a 32-bit machine // and a 64-bit constant on a 64-bit machine. void X86Dependent::SetCodeConstant(TaskData *taskData, Handle data, Handle constant, Handle offseth, Handle base) { POLYUNSIGNED offset = get_C_ulong(taskData, DEREFWORD(offseth)); // Byte offset byte *pointer = DEREFWORD(base).AsCodePtr() + offset; POLYUNSIGNED flags = UNTAGGED(DEREFWORD(data)); POLYUNSIGNED c = DEREFWORD(constant).AsUnsigned(); // N.B. This may well really be an address. if (flags == 1) c -= (POLYUNSIGNED)(pointer + sizeof(PolyWord)); // Relative address. Relative to AFTER the pointer. // Store the value into the code. It can be on an arbitrary alignment. for (unsigned i = 0; i < sizeof(PolyWord); i++) { pointer[i] = (byte)(c & 255); c >>= 8; } } #ifndef HOSTARCHITECTURE_X86_64 // This will only work on the i386. The X86_64 uses different conventions with some arguments // in registers. /* We have to compile the callback function dynamically. This code mallocs the store for it. At least at the moment, the store is never freed. If we decide to garbage collect it we could store it in a vol. */ unsigned char *X86Dependent::BuildCallback(TaskData *taskData, int cbEntryNo, Handle cResultType, int nArgsToRemove) { int max_callback_size = 36; /* Sufficient for the largest callback (actually 33 I think).*/ unsigned char *result = (unsigned char*)malloc(max_callback_size); /* TODO: This does not allocate memory with execute permissions and that could cause problems in newer operating systems such as Windows XP SP2. DCJM 19/8/04. */ unsigned char *p = result; long cbAddr = (long)&CCallbackFunction; /* This code creates a variable on the stack which is initialised to point to the first arg, then calls "CCallbackFunction" with the address of this variable and the callback reference number. When "CCallbackFunction" returns with the ADDRESS of the result this code extracts the result in the appropriate form and returns with it. */ // We only need one word on the stack but Mac OS X requires the stack to be aligned // on a 16-byte boundary, With the return address, the saved EBP pushed by ENTER and // the two words we push as arguments that means we need 16 bytes here. *p++ = 0xC8; /* enter 16, 0 */ *p++ = 0x10; *p++ = 0x00; *p++ = 0x00; *p++ = 0x8D; /* lea eax,[ebp+8] */ /* Address of first arg. */ *p++ = 0x45; *p++ = 0x08; *p++ = 0x89; /* mov dword ptr [ebp-4],eax */ /* Store it in the variable. */ *p++ = 0x45; *p++ = 0xFC; *p++ = 0x8D; /* lea ecx,[ebp-4] */ /* Get the address of the variable. */ *p++ = 0x4D; *p++ = 0xFC; *p++ = 0x51; /* push ecx */ *p++ = 0x68; /* push cbEntryNo */ *p++ = cbEntryNo & 0xff; cbEntryNo = cbEntryNo >> 8; *p++ = cbEntryNo & 0xff; cbEntryNo = cbEntryNo >> 8; *p++ = cbEntryNo & 0xff; cbEntryNo = cbEntryNo >> 8; *p++ = cbEntryNo & 0xff; /* The call is PC relative so we have to subtract the address of the END of the call instruction. */ cbAddr -= (int)p + 5; /* The instruction is 5 bytes long. */ *p++ = 0xE8; /* call cbAddr */ *p++ = cbAddr & 0xff; cbAddr = cbAddr >> 8; *p++ = cbAddr & 0xff; cbAddr = cbAddr >> 8; *p++ = cbAddr & 0xff; cbAddr = cbAddr >> 8; *p++ = cbAddr & 0xff; *p++ = 0x83; /* add esp,8 */ /* Probably not needed since we're about to leave. */ *p++ = 0xC4; *p++ = 0x08; /* Put in the return sequence. eax points to the C_pointer for the result. */ if (! IS_INT(DEREFWORD(cResultType))) { /* We might be able to get this to work but it's probably too much effort. */ raise_exception_string(taskData, EXC_foreign, "Structure results from callbacks are not supported\n"); } else { switch (UNTAGGED(DEREFWORD(cResultType))) { case Cchar: /* movsbl eax, [eax] */ *p++ = 0x0f; *p++ = 0xbe; *p++ = 0x00; break; case Cshort: /* movswl eax, [eax] */ *p++ = 0x0f; *p++ = 0xbf; *p++ = 0x00; break; case Cfloat: /* flds [eax] */ *p++ = 0xD9; *p++ = 0x00; break; case Cdouble: /* fldl [eax] */ *p++ = 0xDD; *p++ = 0x00; break; case Cint: case Cuint: case Clong: case Cpointer: *p++ = 0x8B; /* mov eax,dword ptr [eax] */ *p++ = 0x00; break; default: Crash("Unknown C type"); /* This shouldn't happen */ } } *p++ = 0xC9; /* leave */ // We use a simple "ret" instruction if this is a C function and "ret n" if it's Pascal. if (nArgsToRemove == 0) *p++ = 0xC3; /* Usual case for C functions */ else { /* Pascal calling convention - remove arguments. */ *p++ = 0xC2; /* ret n */ *p++ = nArgsToRemove & 0xff; nArgsToRemove = nArgsToRemove >> 8; *p++ = nArgsToRemove & 0xff; } ASSERT(p - result <= max_callback_size); return result; } /* This function retrieves the callback arguments. How the arguments to the function are stored is likely to be machine-dependent since some arguments are likely to be passed in registers and others on the stack. On the i386 it's easy - all arguments are on the stack. */ void X86Dependent::GetCallbackArg(void **args, void *argLoc, int nSize) { /* nSize is the size of the result when we copy it into the vol. char and short arguments are always expanded to int. This code will work for little-endians but NOT for big-endian machines. */ memcpy(argLoc, *args, nSize); /* Go on to the next argument. */ nSize += sizeof(int)-1; nSize &= -(int)sizeof(int); *args = (void*) (*(char**)args + nSize); } #endif // Atomic addition. Returns the new value static POLYUNSIGNED AtomicAdd(PolyObject *p, POLYUNSIGNED toAdd) { POLYUNSIGNED result; #ifdef HOSTARCHITECTURE_X86_64 #ifdef __GNUC__ // Unix - x64 __asm__ __volatile__ ( "lock xaddq %1,(%2) " // Do atomic addition : "=r" (result) // Output : "0" (toAdd), "r" (p) // Input : "cc", "memory" // Modifies cc and memory ); #else // Visual C++ on X64 doesn't support inline assembly code #endif // ! __GNUC__ // #else // ! HOSTARCHITECTURE_X86_64 #ifdef __GNUC__ // Unix - x32 __asm__ __volatile__ ( "lock; xaddl %1,(%2) " // Do atomic addition : "=r" (result) // Output : "0" (toAdd), "r" (p) // Input : "cc", "memory" // Modifies cc and memory ); #else // Windows __asm { mov ebx,toAdd mov eax,p lock xadd [eax],ebx mov result,ebx } #endif // ! __GNUC__ #endif return result + toAdd; // Adjust to the new value. } Handle X86Dependent::AtomicIncrement(TaskData *taskData, Handle mutexp) { PolyObject *p = DEREFHANDLE(mutexp); POLYUNSIGNED result = AtomicAdd(p, 1 << POLY_TAGSHIFT); return taskData->saveVec.push(PolyWord::FromUnsigned(result)); } // Decrement the value contained in the first word of the mutex. Handle X86Dependent::AtomicDecrement(TaskData *taskData, Handle mutexp) { PolyObject *p = DEREFHANDLE(mutexp); POLYUNSIGNED result = AtomicAdd(p, (-1) << POLY_TAGSHIFT); return taskData->saveVec.push(PolyWord::FromUnsigned(result)); } static X86Dependent x86Dependent; MachineDependent *machineDependent = &x86Dependent; polyml.5.2.1/libpolyml/x86asm.asm0000644000175000017500000021521311025706625015637 0ustar daviddavid;# ;# Title: Assembly code routines for the poly system. ;# Author: David Matthews ;# Copyright (c) Cambridge University Technical Services Limited 2000 ;# This library is free software; you can redistribute it and/or ;# modify it under the terms of the GNU Lesser General Public ;# License as published by the Free Software Foundation; either ;# version 2.1 of the License, or (at your option) any later version. ;# ;# This library is distributed in the hope that it will be useful, ;# but WITHOUT ANY WARRANTY; without even the implied warranty of ;# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ;# Lesser General Public License for more details. ;# ;# You should have received a copy of the GNU Lesser General Public ;# License along with this library; if not, write to the Free Software ;# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ;# ;# ;# ;# ;# ********************************************************************* ;# * IMPORTANT * ;# * This file is used directly by MASM but is also converted * ;# * for use by gas on Unix. For reasons best known to the respective * ;# * developers the assembly language accepted by gas is different * ;# * from that used by MASM. This file uses a sort of half-way house * ;# * between the two versions in that the gas instruction ordering is * ;# * used i.e. the first argument is the source and the second the * ;# * destination, but the MASM format of addresses is used. * ;# * After making any changes to this file ensure that it can be * ;# * successfully converted and compiled under both MASM and gas. * ;# * DCJM January 2000 * ;# ********************************************************************* ;# ;# Registers used :- ;# ;# %Reax: First argument to function. Result of function call. ;# %Rebx: Second argument to function. ;# %Recx: General register ;# %Redx: Closure pointer in call. ;# %Rebp: Points to memory used for extra registers ;# %Resi: General register. ;# %Redi: General register. ;# %Resp: Stack pointer. ;# X86_64 Additional registers ;# %R8: Third argument to function ;# %R9: Fourth argument to function ;# %R10: Fifth argument to function ;# %R11: General register ;# %R12: General register ;# %R13: General register ;# %R14: General register ;# %R15: Memory allocation pointer IFDEF WINDOWS .486 .model flat,c ;# No name munging needed in MASM EXTNAME TEXTEQU <> ;# CALLMACRO is used to indicate to the converter that we have a macro ;# since macros have to be converted into C preprocessor macros. CALLMACRO TEXTEQU <> IFNDEF HOSTARCHITECTURE_X86_64 Reax TEXTEQU Rebx TEXTEQU Recx TEXTEQU Redx TEXTEQU Resi TEXTEQU Redi TEXTEQU Resp TEXTEQU Rebp TEXTEQU ELSE Reax TEXTEQU Rebx TEXTEQU Recx TEXTEQU Redx TEXTEQU Resi TEXTEQU Redi TEXTEQU Resp TEXTEQU Rebp TEXTEQU ENDIF R_cl TEXTEQU R_bl TEXTEQU R_al TEXTEQU R_ax TEXTEQU CONST TEXTEQU <> ;# gas-style instructions ;# These are the reverse order from MASM. MOVL MACRO f,t mov t,f ENDM MOVB MACRO f,t mov t,f ENDM ADDL MACRO f,t add t,f ENDM SUBL MACRO f,t sub t,f ENDM XORL MACRO f,t xor t,f ENDM ORL MACRO f,t or t,f ENDM ANDL MACRO f,t and t,f ENDM CMPL MACRO f,t cmp t,f ENDM CMPB MACRO f,t cmp t,f ENDM LEAL MACRO f,t lea t,f ENDM SHRL MACRO f,t shr t,f ENDM SARL MACRO f,t sar t,f ENDM SHLL MACRO f,t shl t,f ENDM TESTL MACRO f,t test t,f ENDM IMULL MACRO f,t imul t,f ENDM LOCKXADDL MACRO f,t lock xadd t,f ENDM MULL TEXTEQU NEGL TEXTEQU PUSHL TEXTEQU POPL TEXTEQU POPFL TEXTEQU PUSHAL TEXTEQU POPAL TEXTEQU INCL TEXTEQU ELSE #include "config.h" ;# External names in older versions of FreeBSD have a leading underscore. #if ! defined(__ELF__) #define EXTNAME(x) _##x #else #define EXTNAME(x) x #endif IFNDEF HOSTARCHITECTURE_X86_64 #define Reax %eax #define Rebx %ebx #define Recx %ecx #define Redx %edx #define Resi %esi #define Redi %edi #define Resp %esp #define Rebp %ebp ELSE #define Reax %rax #define Rebx %rbx #define Recx %rcx #define Redx %rdx #define Resi %rsi #define Redi %rdi #define Resp %rsp #define Rebp %rbp ENDIF #define R_al %al #define R_cl %cl #define R_bl %bl #define R_ax %ax IFDEF HOSTARCHITECTURE_X86_64 #define R8 %r8 #define R9 %r9 #define R10 %r10 #define R11 %r11 #define R12 %r12 #define R13 %r13 #define R14 %r14 #define R15 %r15 ENDIF #define CONST $ #define END IFDEF HOSTARCHITECTURE_X86_64 #define MOVL movq #define MOVB movb #define ADDL addq #define SUBL subq #define XORL xorq #define ORL orq #define ANDL andq #define CMPL cmpq #define CMPB cmpb #define LEAL leaq #define SHRL shrq #define SARL sarq #define SHLL shlq #define TESTL testq #define IMULL imulq #define MULL mulq #define NEGL negq #define PUSHL pushq #define POPL popq #define POPFL popfq #define PUSHAL pushaq #define POPAL popaq #define LOCKXADDL lock xaddq ELSE #define MOVL movl #define MOVB movb #define ADDL addl #define SUBL subl #define XORL xorl #define ORL orl #define ANDL andl #define CMPL cmpl #define CMPB cmpb #define LEAL leal #define SHRL shrl #define SARL sarl #define SHLL shll #define TESTL testl #define IMULL imull #define MULL mull #define NEGL negl #define PUSHL pushl #define POPL popl #define POPFL popfl #define PUSHAL pushal #define POPAL popal ;# Older versions of GCC require a semicolon here. #define LOCKXADDL lock; xaddl ENDIF ENDIF ;# Register mask entries - must match coding used in codeCons.ML IFDEF WINDOWS M_Reax EQU 1 M_Recx EQU 2 M_Redx EQU 4 M_Rebx EQU 8 M_Resi EQU 16 M_Redi EQU 32 ;# Set the register mask entry RegMask MACRO name,mask Mname TEXTEQU %Mname EQU mask ENDM ELSE ;# Register mask entries - must match coding used in codeCons.ML #define M_Reax 1 #define M_Recx 2 #define M_Redx 4 #define M_Rebx 8 #define M_Resi 16 #define M_Redi 32 IFDEF HOSTARCHITECTURE_X86_64 #define M_R8 64 #define M_R9 128 #define M_R10 256 #define M_R11 512 #define M_R12 1024 #define M_R13 2048 #define M_R14 4096 ENDIF #define RegMask(name,mask) \ .set Mask_##name, mask #define OR | ENDIF ;# Default mask for unused entries. This is set to all the registers ;# for safety in case a new function is added without adding an entry ;# here. IFNDEF HOSTARCHITECTURE_X86_64 CALLMACRO RegMask all,(M_Reax OR M_Rebx OR M_Recx OR M_Redx OR M_Resi OR M_Redi) ELSE CALLMACRO RegMask all,(M_Reax OR M_Rebx OR M_Recx OR M_Redx OR M_Resi OR M_Redi OR M_R8 OR M_R9 OR M_R10 OR M_R11 OR M_R12 OR M_R13 OR M_R14) ;# When we perform an IO call we modify the return register and may also modify the "closure" register ;# in order to do a retry. CALLMACRO RegMask ioCall,(M_Reax OR M_Redx) ENDIF ;# ;# Macro to begin the hand-coded functions ;# IFDEF WINDOWS INLINE_ROUTINE MACRO id PUBLIC id id: ENDM ELSE IFDEF MACOSX #define GLOBAL .globl ELSE #define GLOBAL .global ENDIF #define INLINE_ROUTINE(id) \ GLOBAL EXTNAME(id); \ EXTNAME(id): ENDIF IFDEF WINDOWS ;# ;# Tagged values. A few operations, such as shift assume that the tag bit ;# is the bottom bit. ;# TAG EQU 1 TAGSHIFT EQU 1 TAGMULT EQU 2 TAGGED MACRO i LOCAL t t TEXTEQU EXITM %t ENDM MAKETAGGED MACRO f,t lea t,1[f*2] ENDM ELSE .set TAG, 1 .set TAGSHIFT, 1 .set TAGMULT, (1 << TAGSHIFT) #define TAGGED(i) ((i << TAGSHIFT) | TAG) #define MAKETAGGED(from,to) LEAL TAG(,from,2),to ENDIF IFDEF WINDOWS NIL TEXTEQU TAGGED(0) UNIT TEXTEQU TAGGED(0) ZERO TEXTEQU TAGGED(0) FALSE TEXTEQU TAGGED(0) TRUE TEXTEQU TAGGED(1) MINUS1 TEXTEQU TAGGED(0-1) B_bytes EQU 01h B_mutablebytes EQU 41h B_mutable EQU 40h IFNDEF HOSTARCHITECTURE_X86_64 Max_Length EQU 00ffffffh ELSE Max_Length EQU 00ffffffffffffffh ENDIF ELSE .set NIL, TAGGED(0) .set UNIT, TAGGED(0) .set ZERO, TAGGED(0) .set FALSE, TAGGED(0) .set TRUE, TAGGED(1) .set MINUS1, TAGGED(0-1) .set B_bytes, 0x01 .set B_mutable, 0x40 .set B_mutablebytes, 0x41 IFNDEF HOSTARCHITECTURE_X86_64 .set Max_Length, 0x00ffffff ELSE .set Max_Length, 0x00ffffffffffffff ENDIF ENDIF ;# The "memory registers" are pointed to by Rebp within the ML code ;# The first few offsets are built into the compiled code. ;# All the offsets are built into x86_dep.c . IFDEF WINDOWS LocalMpointer EQU 0 IFNDEF HOSTARCHITECTURE_X86_64 HandlerRegister EQU 4 LocalMbottom EQU 8 StackTop EQU 16 ;# Upper limit of stack RequestCode EQU 20 ;# Byte: Io function to call. InRTS EQU 21 ;# Byte: Set when in the RTS PolyStack EQU 24 ;# Current stack base SavedSp EQU 28 ;# Saved stack pointer IOEntryPoint EQU 48 ;# IO call RaiseDiv EQU 52 ;# Call to raise the Div exception ArbEmulation EQU 56 ;# Arbitrary precision emulation ThreadId EQU 60 ;# My thread id RealTemp EQU 64 ;# Space for int-real conversions ELSE HandlerRegister EQU 8 LocalMbottom EQU 16 StackLimit EQU 24 ;# Lower limit of stack StackTop EQU 32 ;# Upper limit of stack RequestCode EQU 40 ;# Byte: Io function to call. InRTS EQU 41 ;# Byte: Set when in the RTS ReturnReason EQU 42 ;# Byte: Reason for returning from ML. PolyStack EQU 48 ;# Current stack base SavedSp EQU 56 ;# Saved stack pointer HeapOverflow EQU 64 ;# Heap overflow code StackOverflow EQU 72 ;# Stack overflow code StackOverflowEx EQU 80 ;# Stack overflow code (for EDI) RaiseExEntry EQU 88 ;# Raise exception IOEntryPoint EQU 96 ;# IO call RaiseDiv EQU 104 ;# Exception trace ArbEmulation EQU 112 ;# Arbitrary precision emulation ThreadId EQU 120 ;# My thread id RealTemp EQU 128 ;# Space for int-real conversions ENDIF ELSE .set LocalMpointer,0 IFNDEF HOSTARCHITECTURE_X86_64 .set HandlerRegister,4 .set LocalMbottom,8 .set StackTop,16 .set RequestCode,20 .set InRTS,21 .set PolyStack,24 .set SavedSp,28 .set IOEntryPoint,48 .set RaiseDiv,52 .set ArbEmulation,56 .set ThreadId,60 .set RealTemp,64 ELSE .set HandlerRegister,8 .set LocalMbottom,16 .set StackLimit,24 .set StackTop,32 .set RequestCode,40 .set InRTS,41 .set PolyStack,48 .set SavedSp,56 .set HeapOverflow,64 .set StackOverflow,72 .set StackOverflowEx,80 .set RaiseExEntry,88 .set IOEntryPoint,96 .set RaiseDiv,104 .set ArbEmulation,112 .set ThreadId,120 .set RealTemp,128 ENDIF ENDIF ;# IO function numbers. These are functions that are called ;# to handle special cases in this code IFDEF WINDOWS POLY_SYS_alloc_store EQU 11 POLY_SYS_give_ex_trace EQU 31 POLY_SYS_aplus EQU 106 POLY_SYS_aminus EQU 107 POLY_SYS_amul EQU 108 POLY_SYS_adiv EQU 109 POLY_SYS_amod EQU 110 POLY_SYS_aneg EQU 111 POLY_SYS_xora EQU 112 POLY_SYS_equala EQU 113 POLY_SYS_ora EQU 114 POLY_SYS_anda EQU 115 POLY_SYS_int_geq EQU 231 POLY_SYS_int_leq EQU 232 POLY_SYS_int_gtr EQU 233 POLY_SYS_int_lss EQU 234 POLY_SYS_Add_real EQU 125 POLY_SYS_Sub_real EQU 126 POLY_SYS_Mul_real EQU 127 POLY_SYS_Div_real EQU 128 POLY_SYS_Neg_real EQU 130 POLY_SYS_real_to_int EQU 134 POLY_SYS_int_to_real EQU 135 POLY_SYS_sqrt_real EQU 136 POLY_SYS_sin_real EQU 137 POLY_SYS_cos_real EQU 138 POLY_SYS_arctan_real EQU 139 POLY_SYS_exp_real EQU 140 POLY_SYS_ln_real EQU 141 ELSE #include "sys.h" ENDIF ;# ;# Stack format from objects.h is: ;# typedef struct ;# { byte offset of start ;# word p_space ; 0 ;# byte *p_pc ; 4 ;# word *p_sp ; 8 ;# word *p_hr ; 12 ;# word p_nreg ; 16 = no of checked registers (always CHECKED_REGS) ;# word p_reg[1] ; 20 ;# } StackObject ; ;# ;# ;# Starting offsets IFDEF WINDOWS SPACE_OFF EQU 0 PC_OFF EQU 4 SP_OFF EQU 8 HR_OFF EQU 12 EAX_OFF EQU 20 EBX_OFF EQU 24 ECX_OFF EQU 28 EDX_OFF EQU 32 ESI_OFF EQU 36 EDI_OFF EQU 40 FLAGS_OFF EQU 48 ELSE .set SPACE_OFF, 0 IFNDEF HOSTARCHITECTURE_X86_64 .set PC_OFF, 4 .set SP_OFF, 8 .set HR_OFF, 12 .set EAX_OFF, 20 .set EBX_OFF, 24 .set ECX_OFF, 28 .set EDX_OFF, 32 .set ESI_OFF, 36 .set EDI_OFF, 40 .set FLAGS_OFF, 48 ELSE .set PC_OFF, 8 .set SP_OFF, 16 .set HR_OFF, 24 ;# 32 is the count of the number of checked registers .set EAX_OFF, 40 .set EBX_OFF, 48 .set ECX_OFF, 56 .set EDX_OFF, 64 .set ESI_OFF, 72 .set EDI_OFF, 80 .set R8_OFF, 88 .set R9_OFF, 96 .set R10_OFF, 104 .set R11_OFF, 112 .set R12_OFF, 120 .set R13_OFF, 128 .set R14_OFF, 136 ;# 144 is the count of the number of unchecked registers .set FLAGS_OFF, 152 ENDIF ENDIF ;# ;# CODE STARTS HERE ;# IFDEF WINDOWS .CODE ELSE .text ENDIF ;# Define standard call macro. CALL_IO ioCallNo where ioCallNo is the io function to call. ;# We need to include M_Redx in the register sets. MD_set_for_retry may modify it ;# if the function was called directly and not via the closure register. IFDEF WINDOWS CALL_IO MACRO index mov byte ptr [RequestCode+Rebp],index IFNDEF HOSTARCHITECTURE_X86_64 jmp dword ptr [IOEntryPoint+Rebp] ELSE jmp qword ptr [IOEntryPoint+Rebp] ENDIF ENDM ELSE #define CALL_IO(index) \ MOVB $index,RequestCode[Rebp]; \ jmp *IOEntryPoint[Rebp]; ENDIF ;# Load the registers from the ML stack and jump to the code. ;# This is used to start ML code. ;# The argument is the address of the MemRegisters struct and goes into %rbp. IFDEF WINDOWS PUBLIC X86AsmSwitchToPoly X86AsmSwitchToPoly: ELSE GLOBAL EXTNAME(X86AsmSwitchToPoly) EXTNAME(X86AsmSwitchToPoly): ;# Entry point from C ENDIF IFNDEF HOSTARCHITECTURE_X86_64 MOVL 4[Resp],Recx ;# Argument - address of MemRegisters - goes into Rebp PUSHAL ;# Save all the registers just to be safe MOVL Resp,SavedSp[Recx] ;# savedSp:=%Resp - Save the system stack pointer. MOVL Recx,Rebp ;# Put address of MemRegisters where it belongs ELSE ;# The argument to the function is passed in Redi PUSHL Rebp ;# Save callee--save registers PUSHL Rebx PUSHL %r12 PUSHL %r13 PUSHL %r14 PUSHL %r15 MOVL Resp,SavedSp[Redi] ;# savedSp:=%Resp - Save the system stack pointer. MOVL Redi,Rebp ;# Put address of MemRegisters where it belongs ENDIF MOVL PolyStack[Rebp],Reax IFDEF HOSTARCHITECTURE_X86_64 MOVL LocalMpointer[Rebp],R15 ;# Set the heap pointer register ENDIF MOVL SP_OFF[Reax],Resp ;# Set the new stack ptr PUSHL PC_OFF[Reax] ;# Push the code address PUSHL FLAGS_OFF[Reax] ;# Push the flags MOVL EBX_OFF[Reax],Rebx ;# Load the registers MOVL ECX_OFF[Reax],Recx MOVL EDX_OFF[Reax],Redx MOVL ESI_OFF[Reax],Resi MOVL EDI_OFF[Reax],Redi IFDEF HOSTARCHITECTURE_X86_64 MOVL R8_OFF[Reax],R8 MOVL R9_OFF[Reax],R9 MOVL R10_OFF[Reax],R10 MOVL R11_OFF[Reax],R11 MOVL R12_OFF[Reax],R12 MOVL R13_OFF[Reax],R13 MOVL R14_OFF[Reax],R14 ENDIF MOVL EAX_OFF[Reax],Reax POPFL ;# reset flags IFDEF WINDOWS mov byte ptr [InRTS+Rebp],0 ELSE MOVB CONST 0,InRTS[Rebp] ;# inRTS:=0 (stack now kosher) ENDIF ret ;# Jump to code address ;# Code to save the state and switch to C IFDEF WINDOWS PUBLIC X86AsmSaveStateAndReturn X86AsmSaveStateAndReturn PROC ELSE GLOBAL EXTNAME(X86AsmSaveStateAndReturn) EXTNAME(X86AsmSaveStateAndReturn): ENDIF PUSHL Reax ;# Save eax MOVL PolyStack[Rebp],Reax MOVL Rebx,EBX_OFF[Reax] MOVL Recx,ECX_OFF[Reax] MOVL Redx,EDX_OFF[Reax] MOVL Resi,ESI_OFF[Reax] MOVL Redi,EDI_OFF[Reax] IFDEF HOSTARCHITECTURE_X86_64 MOVL R8,R8_OFF[Reax] MOVL R9,R9_OFF[Reax] MOVL R10,R10_OFF[Reax] MOVL R11,R11_OFF[Reax] MOVL R12,R12_OFF[Reax] MOVL R13,R13_OFF[Reax] MOVL R14,R14_OFF[Reax] MOVL R15,LocalMpointer[Rebp] ;# Save the heap pointer ENDIF POPL Rebx ;# Get old eax value MOVL Rebx,EAX_OFF[Reax] MOVL Resp,SP_OFF[Reax] IFDEF WINDOWS mov byte ptr [InRTS+Rebp],1 ELSE MOVB CONST 1,InRTS[Rebp] ;# inRTS:=0 (stack now kosher) ENDIF MOVL SavedSp[Rebp],Resp IFNDEF HOSTARCHITECTURE_X86_64 POPAL ELSE POPL %r15 ;# Restore callee-save registers POPL %r14 POPL %r13 POPL %r12 POPL Rebx POPL Rebp ENDIF ret IFDEF WINDOWS X86AsmSaveStateAndReturn ENDP ENDIF ;# ;# A number of functions implemented in Assembly for efficiency reasons ;# CALLMACRO INLINE_ROUTINE int_to_word ;# Extract the low order bits from a word. TESTL CONST TAG,Reax jz get_first_long_word_a1 ret ;# Return the argument CALLMACRO RegMask int_to_word,(M_Reax) ;# This is now used in conjunction with isShort in Word.fromInt. get_first_long_word_a1: CALLMACRO INLINE_ROUTINE get_first_long_word_a IFDEF WINDOWS test byte ptr [Reax-1],CONST 16 ;# 16 is the "negative" bit ELSE testb CONST 16,(-1)[Reax] ;# 16 is the "negative" bit ENDIF MOVL [Reax],Reax ;# Extract the word which is already little-endian jz gfw1 NEGL Reax ;# We can ignore overflow gfw1: CALLMACRO MAKETAGGED Reax,Reax ret CALLMACRO RegMask get_first_long_word,(M_Reax) CALLMACRO INLINE_ROUTINE move_bytes ;# Move a segment of memory from one location to another. ;# Must deal with the case of overlapping segments correctly. ;# (source, sourc_offset, destination, dest_offset, length) ;# Assume that the offsets and length are all short integers. IFNDEF HOSTARCHITECTURE_X86_64 MOVL 12[Resp],Redi ;# Destination address MOVL 8[Resp],Recx ;# Destination offset, untagged ELSE MOVL R8,Redi ;# Destination address MOVL R9,Recx ;# Destination offset, untagged ENDIF SHRL CONST TAGSHIFT,Recx ADDL Recx,Redi MOVL Reax,Resi ;# Source address SHRL CONST TAGSHIFT,Rebx ADDL Rebx,Resi IFNDEF HOSTARCHITECTURE_X86_64 MOVL 4[Resp],Recx ;# Get the length to move ELSE MOVL R10,Recx ;# Get the length to move ENDIF SHRL CONST TAGSHIFT,Recx cld ;# Default to increment Redi,Resi CMPL Redi,Resi ;# Check for potential overlap ;# If dest > src then use decrementing moves else ;# use incrementing moves. ja mvb1 std ;# Decrement Redi,Resi LEAL (-1)[Resi+Recx],Resi LEAL (-1)[Redi+Recx],Redi mvb1: IFDEF WINDOWS rep movsb ;# Copy the bytes ELSE rep movsb ;# Copy the bytes ENDIF MOVL CONST UNIT,Reax ;# The function returns unit MOVL Reax,Rebx ;# Clobber bad value in %rbx MOVL Reax,Recx ;# and %Recx MOVL Reax,Redi MOVL Reax,Resi ;# Visual Studio 5 C++ seems to assume that the direction flag ;# is cleared. I think that`s a bug but we have to go along with it. cld IFNDEF HOSTARCHITECTURE_X86_64 ret CONST 12 ELSE ret ENDIF CALLMACRO RegMask move_bytes,Mask_all CALLMACRO INLINE_ROUTINE move_words ;# Move a segment of memory from one location to another. ;# Must deal with the case of overlapping segments correctly. ;# (source, source_offset, destination, dest_offset, length) ;# Assume that the offsets and length are all short integers. IFNDEF HOSTARCHITECTURE_X86_64 MOVL 12[Resp],Redi ;# Destination address MOVL 8[Resp],Recx ;# Destination offset LEAL (-2)[Redi+Recx*2],Redi ;# Destination address plus offset LEAL (-2)[Reax+Rebx*2],Resi ;# Source address plus offset MOVL 4[Resp],Recx ;# Get the length to move (words) ELSE MOVL R8,Redi ;# Destination address MOVL R9,Recx ;# Destination offset LEAL (-4)[Redi+Recx*4],Redi ;# Destination address plus offset LEAL (-4)[Reax+Rebx*4],Resi ;# Source address plus offset MOVL R10,Recx ;# Get the length to move (words) ENDIF SHRL CONST TAGSHIFT,Recx cld ;# Default to increment Redi,Resi CMPL Redi,Resi ;# Check for potential overlap ;# If dest > src then use decrementing moves else ;# use incrementing moves. ja mvw1 std ;# Decrement Redi,Resi IFNDEF HOSTARCHITECTURE_X86_64 LEAL (-4)[Resi+Recx*4],Resi LEAL (-4)[Redi+Recx*4],Redi ELSE LEAL (-8)[Resi+Recx*8],Resi LEAL (-8)[Redi+Recx*8],Redi ENDIF mvw1: IFDEF WINDOWS IFNDEF HOSTARCHITECTURE_X86_64 rep movsd ;# Copy the words ELSE rep movsq ;# Copy the words ENDIF ELSE rep IFNDEF HOSTARCHITECTURE_X86_64 movsl ;# Copy the words ELSE movsq ;# Copy the words ENDIF ENDIF MOVL CONST UNIT,Reax ;# The function returns unit MOVL Reax,Recx ;# Clobber bad values MOVL Reax,Redi MOVL Reax,Resi ;# Visual Studio 5 C++ seems to assume that the direction flag ;# is cleared. I think that`s a bug but we have to go along with it. cld IFNDEF HOSTARCHITECTURE_X86_64 ret CONST 12 ELSE ret ENDIF CALLMACRO RegMask move_words,Mask_all ;# CALLMACRO INLINE_ROUTINE int_eq CMPL Rebx,Reax je RetTrue RetFalse: MOVL CONST FALSE,Reax ret CALLMACRO RegMask int_eq,(M_Reax) CALLMACRO INLINE_ROUTINE int_neq CMPL Rebx,Reax je RetFalse RetTrue: MOVL CONST TRUE,Reax ret CALLMACRO RegMask int_neq,(M_Reax) CALLMACRO INLINE_ROUTINE not_bool XORL CONST (TRUE-TAG),Reax ;# Change the value but leave the tag ret CALLMACRO RegMask not_bool,(M_Reax) ;# or, and, xor shift etc. assume the values are tagged integers CALLMACRO INLINE_ROUTINE or_word ORL Rebx,Reax ret CALLMACRO RegMask or_word,(M_Reax) CALLMACRO INLINE_ROUTINE and_word ANDL Rebx,Reax ret CALLMACRO RegMask and_word,(M_Reax) CALLMACRO INLINE_ROUTINE xor_word XORL Rebx,Reax ORL CONST TAG,Reax ;# restore the tag ret CALLMACRO RegMask xor_word,(M_Reax) CALLMACRO INLINE_ROUTINE shift_left_word ;# Assume that both args are tagged integers ;# Word.<<(a,b) is defined to return 0 if b > Word.wordSize IFNDEF HOSTARCHITECTURE_X86_64 CMPL CONST TAGGED(31),Rebx ELSE CMPL CONST TAGGED(63),Rebx ENDIF jb slw1 MOVL CONST ZERO,Reax ret slw1: MOVL Rebx,Recx SHRL CONST TAGSHIFT,Recx ;# remove tag SUBL CONST TAG,Reax SHLL R_cl,Reax ORL CONST TAG,Reax ;# restore the tag MOVL Reax,Recx ;# clobber %Recx ret CALLMACRO RegMask shift_left_word,(M_Reax OR M_Recx) CALLMACRO INLINE_ROUTINE shift_right_word ;# Word.>>(a,b) is defined to return 0 if b > Word.wordSize IFNDEF HOSTARCHITECTURE_X86_64 CMPL CONST TAGGED(31),Rebx ELSE CMPL CONST TAGGED(63),Rebx ENDIF jb srw1 MOVL CONST ZERO,Reax ret srw1: MOVL Rebx,Recx SHRL CONST TAGSHIFT,Recx ;# remove tag SHRL R_cl,Reax ORL CONST TAG,Reax ;# restore the tag MOVL Reax,Recx ;# clobber %Recx ret CALLMACRO RegMask shift_right_word,(M_Reax OR M_Recx) CALLMACRO INLINE_ROUTINE shift_right_arith_word ;# Word.~>>(a,b) is defined to return 0 or ~1 if b > Word.wordSize ;# The easiest way to do that is to set the shift to 31. IFNDEF HOSTARCHITECTURE_X86_64 CMPL CONST TAGGED(31),Rebx ELSE CMPL CONST TAGGED(63),Rebx ENDIF jb sra1 IFNDEF HOSTARCHITECTURE_X86_64 MOVL CONST TAGGED(31),Rebx ELSE MOVL CONST TAGGED(63),Rebx ENDIF sra1: MOVL Rebx,Recx SHRL CONST TAGSHIFT,Recx ;# remove tag SARL R_cl,Reax ORL CONST TAG,Reax ;# restore the tag MOVL Reax,Recx ;# clobber %Recx ret CALLMACRO RegMask shift_right_arith_word,(M_Reax OR M_Recx) CALLMACRO INLINE_ROUTINE locksega ;# Clears the "mutable" bit on a segment IFDEF WINDOWS and byte ptr [Reax-1],CONST(0ffh-B_mutable) ELSE andb CONST(0xff-B_mutable),-1[Reax] ENDIF MOVL CONST TAGGED(0),Reax ;# Return Unit, ret CALLMACRO RegMask lockseg,M_Reax ;#INLINE_ROUTINE(get_flags) ;# CMPL data0,%Reax ;# jb vf1 ; skip if < data0 ;# movzbl (%Reax-1),%Reax ; if > data0 return flag ;# SHLL $TAGSHIFT,%Reax ; Tag it ;# ORL $TAG,%Reax ;# ret ;# ;#vf1: mov $TAGGED(256),%Reax ; if < data0 must be in io area, return 256 ;# ret ;# For backwards compatibility this needs to call the RTS. ;# In due course it should be possible to have it simply return ;# the top byte of the length word as a tagged integer. ;# CALLMACRO CALL_IO1 get_flags_ ;# CALLMACRO INLINE_ROUTINE get_flags_a ;# movzx Reax, byte ptr [Reax-1] ;# LEAL 1[Reax*2],Reax ;# ret ;# CALLMACRO RegMask get_flags_,(M_Reax) CALLMACRO INLINE_ROUTINE get_length_a IFNDEF HOSTARCHITECTURE_X86_64 MOVL (-4)[Reax],Reax ELSE MOVL (-8)[Reax],Reax ENDIF SHLL CONST 8,Reax ;# Clear top byte SHRL CONST(8-TAGSHIFT),Reax ;# Make it a tagged integer ORL CONST TAG,Reax ret CALLMACRO RegMask get_length,(M_Reax) CALLMACRO INLINE_ROUTINE is_shorta ;# Returns true if the argument is tagged ANDL CONST TAG,Reax jz RetFalse jmp RetTrue CALLMACRO RegMask is_short,(M_Reax) CALLMACRO INLINE_ROUTINE string_length TESTL CONST TAG,Reax ;# Single char strings are represented by the jnz RetOne ;# character. MOVL [Reax],Reax ;# Get length field CALLMACRO MAKETAGGED Reax,Reax ret RetOne: MOVL CONST TAGGED(1),Reax ret CALLMACRO RegMask string_length,(M_Reax) ;# Store the length of a string in the first word. CALLMACRO INLINE_ROUTINE set_string_length_a SHRL CONST TAGSHIFT,Rebx ;# Untag the length MOVL Rebx,[Reax] MOVL CONST UNIT,Reax ;# Return unit MOVL Reax,Rebx ;# Clobber untagged value ret CALLMACRO RegMask set_string_length,(M_Reax OR M_Rebx) ;# raisex (formerly raisexn) is used by compiled code. CALLMACRO INLINE_ROUTINE raisex MOVL HandlerRegister[Rebp],Recx ;# Get next handler into %rcx ;# Loop to find the handler for this exception. Handlers consist of one or more ;# pairs of identifier and code address, followed by the address of the next ;# handler. rsx1: IFDEF WINDOWS cmp dword ptr [Recx],TAGGED(0) ELSE CMPL CONST TAGGED(0),[Recx] ENDIF je rsx7 ;# default handler if it is TAGGED(0) MOVL [Recx],Rebx ;# Arg1 - the identifier for this handler CMPL [Reax],Rebx ;# Compare with exception tag - Have we got the right handler? je rsx7 ;# Skip if we found a match. IFNDEF HOSTARCHITECTURE_X86_64 ADDL CONST 8,Recx ;# Look at the next handler. ELSE ADDL CONST 16,Recx ;# Look at the next handler. ENDIF MOVL [Recx],Rebx CMPL Recx,Rebx ;# Is it a pointer to the next handler i.e. jb rsx1 ;# does it point further up the stack or at itself. ;# (The last handler on the stack points at itself). CMPL StackTop[Rebp],Rebx ja rsx1 ;# If not it must be a new pair, so look at that. MOVL Rebx,Recx ;# It is a pointer to a new handler. jmp rsx1 rsx7: ;# We have found the right handler - %Recx points to the data IFNDEF HOSTARCHITECTURE_X86_64 ADDL CONST 4,Recx ;# point it at the code ELSE ADDL CONST 8,Recx ;# point it at the code ENDIF MOVL [Recx],Redx ;# Get the handler entry point ;# There may be some other identifier/entry point pairs in this group. ;# We have to remove them and find the pointer to the next handler in the ;# chain. This becomes the new handler pointer. rsx6: IFNDEF HOSTARCHITECTURE_X86_64 ADDL CONST 4,Recx ELSE ADDL CONST 8,Recx ENDIF MOVL [Recx],Rebx CMPL Recx,Rebx ;# Is it a pointer to the next handler i.e. jb rsx6 ;# does it point further up the stack or at itself? CMPL StackTop[Rebp],Rebx ja rsx6 ;# We`re now pointing to the pointer to the next handler. CMPL CONST TAGGED(0),Redx ;# See if it was set up by exception_trace je rsx9 ;# Ordinary exception MOVL Recx,Resp ;# Move stack pointer to handler frame POPL HandlerRegister[Rebp] ;# Load previous handler MOVL CONST UNIT,Rebx ;# The values in some regs are illegal. MOVL CONST UNIT,Recx PUSHL Redx MOVL Rebx,Redx ret ;# Now enter the handler rsx9: ;# Must give an exception trace - ex_tracec unwinds to the next handler. MOVL Reax,Rebx MOVL Recx,Reax CALLMACRO CALL_IO POLY_SYS_give_ex_trace CALLMACRO INLINE_ROUTINE load_byte MOVL Rebx,Redi SHRL CONST TAGSHIFT,Redi IFDEF WINDOWS movzx Redi, byte ptr [Reax][Redi] ELSE IFNDEF HOSTARCHITECTURE_X86_64 movzbl (Reax,Redi,1),Redi ELSE movzbq (Reax,Redi,1),Redi ENDIF ENDIF CALLMACRO MAKETAGGED Redi,Reax MOVL Reax,Redi ;# Clobber bad value in %Redi ret CALLMACRO RegMask load_byte,(M_Reax OR M_Redi) CALLMACRO INLINE_ROUTINE load_word IFNDEF HOSTARCHITECTURE_X86_64 MOVL (-2)[Reax+Rebx*2],Reax ELSE MOVL (-4)[Reax+Rebx*4],Reax ENDIF MOVL Reax,Rebx ret CALLMACRO RegMask load_word,(M_Reax) CALLMACRO INLINE_ROUTINE assign_byte ;# We can assume that the data value will not overflow 30 bits (it is only 1 byte!) IFNDEF HOSTARCHITECTURE_X86_64 MOVL 4[Resp],Recx ELSE MOVL R8,Recx ENDIF SHRL CONST TAGSHIFT,Recx ;# Remove tags from data value ;# We can assume that the index will not overflow 30 bits i.e. it is a tagged short SHRL CONST TAGSHIFT,Rebx ;# Remove tags from offset MOVB R_cl,[Reax+Rebx] MOVL CONST UNIT,Reax ;# The function returns unit MOVL Reax,Rebx ;# Clobber bad value in %Rebx MOVL Reax,Recx ;# and %Recx IFNDEF HOSTARCHITECTURE_X86_64 ret CONST 4 ELSE ret ENDIF CALLMACRO RegMask assign_byte,(M_Reax OR M_Rebx OR M_Recx) CALLMACRO INLINE_ROUTINE assign_word IFNDEF HOSTARCHITECTURE_X86_64 MOVL 4[Resp],Recx MOVL Recx,(-2)[Reax+Rebx*2] ELSE MOVL R8,(-4)[Reax+Rebx*4] ;# The offset is tagged already ENDIF MOVL CONST UNIT,Reax ;# The function returns unit IFNDEF HOSTARCHITECTURE_X86_64 ret CONST 4 CALLMACRO RegMask assign_word,(M_Reax OR M_Recx) ELSE ret CALLMACRO RegMask assign_word,(M_Reax) ENDIF ;# alloc(size, flags, initial). Allocates a segment of a given size and ;# initialises it. ;# ;# This is primarily used for arrays and for strings. Refs are ;# allocated using inline code. CALLMACRO INLINE_ROUTINE alloc_store ;# alloc(size, flags, initial). Allocates a segment of a given size and ;# initialises it. ;# First check that the length is acceptable TESTL CONST TAG,Reax jz alloc_in_rts ;# Get the RTS to raise an exception MOVL Reax,Redi SHRL CONST TAGSHIFT,Redi ;# Remove tag jnz allst0 ;# (test for 0) Make zero sized objects 1 MOVL CONST 1,Redi ;# because they mess up the g.c. MOVL CONST TAGGED(1),Reax allst0: IFNDEF HOSTARCHITECTURE_X86_64 CMPL CONST Max_Length,Redi ;# Length field must fit in 24 bits ELSE MOVL CONST Max_Length,Redx ;# Length field must fit in 56 bits CMPL Redx,Redi ENDIF ja alloc_in_rts ;# Get the RTS to raise an exception IFNDEF HOSTARCHITECTURE_X86_64 INCL Redi ;# Add 1 word SHLL CONST 2,Redi ;# Get length in bytes MOVL LocalMpointer[Rebp],Redx ELSE ADDL CONST 1,Redi ;# Add 1 word SHLL CONST 3,Redi ;# Get length in bytes MOVL R15,Redx ENDIF SUBL Redi,Redx ;# Allocate the space MOVL Reax,Redi ;# Clobber bad value in Redi CMPL LocalMbottom[Rebp],Redx ;# Check for free space IFNDEF HOSTARCHITECTURE_X86_64 jb alloc_in_rts ;# TODO: Is this exactly the right test? MOVL Redx,LocalMpointer[Rebp] ;# Put back in the heap ptr ELSE jb alloc_in_rts MOVL Redx,R15 ;# Put back in the heap ptr ENDIF SHRL CONST TAGSHIFT,Reax IFNDEF HOSTARCHITECTURE_X86_64 MOVL Reax,(-4)[Redx] ;# Put in length ELSE MOVL Reax,(-8)[Redx] ;# Put in length ENDIF SHRL CONST TAGSHIFT,Rebx ;# remove tag from flag ORL CONST B_mutable,Rebx ;# set mutable bit MOVB R_bl,(-1)[Redx] ;# and put it in. ;# Initialise the store. MOVL Reax,Recx ;# Get back the no. of words. IFNDEF HOSTARCHITECTURE_X86_64 MOVL 4[Resp],Reax ;# Get initial value. ELSE MOVL R8,Reax ;# Get initial value. ENDIF CMPL CONST B_mutablebytes,Rebx jne allst2 ;# If this is a byte seg SHRL CONST TAGSHIFT,Reax ;# untag the initialiser IFNDEF HOSTARCHITECTURE_X86_64 SHLL CONST 2,Recx ;# Convert to bytes ELSE SHLL CONST 3,Recx ;# Convert to bytes ENDIF MOVL Redx,Redi IFDEF WINDOWS rep stosb ELSE rep stosb ENDIF jmp allst3 ;# If this is a word segment allst2: MOVL Redx,Redi IFDEF WINDOWS rep stosd ELSE rep IFNDEF HOSTARCHITECTURE_X86_64 stosl ELSE stosq ENDIF ENDIF allst3: MOVL Redx,Reax MOVL Reax,Recx ;# Clobber these MOVL Reax,Redx MOVL Reax,Rebx MOVL Reax,Redi IFNDEF HOSTARCHITECTURE_X86_64 ret CONST 4 ELSE ret ENDIF CALLMACRO RegMask alloc_store,(M_Reax OR M_Rebx OR M_Recx OR M_Redx OR M_Redi) ;# This is used if we have reached the store limit and need to garbage-collect. alloc_in_rts: MOVL Reax,Redx ;# Clobber these first MOVL Reax,Redi CALLMACRO CALL_IO POLY_SYS_alloc_store CALLMACRO INLINE_ROUTINE add_long MOVL Reax,Redi ANDL Rebx,Redi ANDL CONST TAG,Redi jz add_really_long LEAL (-TAG)[Reax],Redi ADDL Rebx,Redi jo add_really_long MOVL Redi,Reax ret add_really_long: MOVL Reax,Redi CALLMACRO CALL_IO POLY_SYS_aplus CALLMACRO RegMask aplus,(M_Reax OR M_Redi OR Mask_all) CALLMACRO INLINE_ROUTINE sub_long MOVL Reax,Redi ANDL Rebx,Redi ANDL CONST TAG,Redi jz sub_really_long MOVL Reax,Redi SUBL Rebx,Redi jo sub_really_long LEAL TAG[Redi],Reax ;# Put back the tag MOVL Reax,Redi ret sub_really_long: MOVL Reax,Redi CALLMACRO CALL_IO POLY_SYS_aminus CALLMACRO RegMask aminus,(M_Reax OR M_Redi OR Mask_all) CALLMACRO INLINE_ROUTINE mult_long MOVL Reax,Redi ANDL Rebx,Redi ANDL CONST TAG,Redi jz mul_really_long MOVL Rebx,Redi SARL CONST TAGSHIFT,Redi ;# Shift multiplicand MOVL Reax,Resi SUBL CONST TAG,Resi ;# Just subtract off the tag off multiplier IMULL Redi,Resi jo mul_really_long ADDL CONST TAG,Resi MOVL Resi,Reax MOVL Reax,Redi ret mul_really_long: MOVL Reax,Resi ;# Clobber this MOVL Reax,Redi CALLMACRO CALL_IO POLY_SYS_amul CALLMACRO RegMask amul,(M_Reax OR M_Redi OR M_Resi OR Mask_all) CALLMACRO INLINE_ROUTINE div_long MOVL Reax,Redi ANDL Rebx,Redi ANDL CONST TAG,Redi ;# %Redi now contains $0 or $1 (both legal!) jz div_really_long CMPL CONST TAGGED(0),Rebx ;# Check that it's non-zero jz div_really_long ;# We don't want a trap. ;# The only case of overflow is dividing the smallest negative number by -1 CMPL CONST TAGGED((-1)),Rebx jz div_really_long SARL CONST TAGSHIFT,Reax MOVL Rebx,Redi SARL CONST TAGSHIFT,Redi IFNDEF HOSTARCHITECTURE_X86_64 cdq ELSE cqo ENDIF idiv Redi CALLMACRO MAKETAGGED Reax,Reax MOVL Reax,Redx MOVL Reax,Redi ret div_really_long: MOVL Reax,Redi CALLMACRO CALL_IO POLY_SYS_adiv CALLMACRO RegMask adiv,(M_Reax OR M_Redi OR M_Redx OR Mask_all) CALLMACRO INLINE_ROUTINE rem_long MOVL Reax,Redi ANDL Rebx,Redi ANDL CONST TAG,Redi ;# %Redi now contains $0 or $1 (both legal! jz rem_really_long CMPL CONST TAGGED(0),Rebx ;# Check that it's non-zero jz rem_really_long ;# We don't want a trap. ;# The only case of overflow is dividing the smallest negative number by -1 CMPL CONST TAGGED((-1)),Rebx jz rem_really_long SARL CONST TAGSHIFT,Reax MOVL Rebx,Redi SARL CONST TAGSHIFT,Redi IFNDEF HOSTARCHITECTURE_X86_64 cdq ELSE cqo ENDIF idiv Redi CALLMACRO MAKETAGGED Redx,Reax MOVL Reax,Redx MOVL Reax,Redi ret rem_really_long: MOVL Reax,Redi CALLMACRO CALL_IO POLY_SYS_amod CALLMACRO RegMask amod,(M_Reax OR M_Redi OR M_Redx OR Mask_all) CALLMACRO INLINE_ROUTINE equal_long CMPL Reax,Rebx je RetTrue MOVL Reax,Recx ;# If either is short ORL Rebx,Reax ;# the result is false ANDL CONST TAG,Reax jnz RetFalse MOVL Recx,Reax CALLMACRO CALL_IO POLY_SYS_equala CALLMACRO RegMask equala,(M_Reax OR M_Recx OR Mask_all) CALLMACRO INLINE_ROUTINE or_long IFDEF NOTATTHEMOMENT MOVL Reax,Redi ANDL Rebx,Redi ANDL CONST TAG,Redi jz or_really_long ORL Rebx,Reax MOVL Reax,Redi ret or_really_long: ENDIF CALLMACRO CALL_IO POLY_SYS_ora CALLMACRO RegMask ora,(M_Reax OR M_Redi OR Mask_all) CALLMACRO INLINE_ROUTINE xor_long IFDEF NOTATTHEMOMENT MOVL Reax,Redi ANDL Rebx,Redi ANDL CONST TAG,Redi jz xor_really_long XORL Rebx,Reax ORL CONST TAG,Reax ;# restore the tag MOVL Reax,Redi ret xor_really_long: ENDIF CALLMACRO CALL_IO POLY_SYS_xora CALLMACRO RegMask xora,(M_Reax OR M_Redi OR Mask_all) CALLMACRO INLINE_ROUTINE and_long IFDEF NOTATTHEMOMENT MOVL Reax,Redi ANDL Rebx,Redi ANDL CONST TAG,Redi jz and_really_long ANDL Rebx,Reax MOVL Reax,Redi ret and_really_long: ENDIF CALLMACRO CALL_IO POLY_SYS_anda CALLMACRO RegMask anda,(M_Reax OR M_Redi OR Mask_all) CALLMACRO INLINE_ROUTINE neg_long TESTL CONST TAG,Reax jz neg_really_long MOVL CONST (TAGGED(0)+TAG),Redi SUBL Reax,Redi jo neg_really_long MOVL Redi,Reax ret neg_really_long: MOVL Reax,Redi CALLMACRO CALL_IO POLY_SYS_aneg CALLMACRO RegMask aneg,(M_Reax OR M_Redi OR Mask_all) CALLMACRO INLINE_ROUTINE int_geq MOVL Reax,Recx ;# Use long test if either is long ANDL Rebx,Reax ANDL CONST TAG,Reax jz igeq1 CMPL Rebx,Recx jge RetTrue jmp RetFalse igeq1: MOVL Recx,Reax CALLMACRO CALL_IO POLY_SYS_int_geq CALLMACRO RegMask int_geq,(M_Reax OR M_Recx OR Mask_all) CALLMACRO INLINE_ROUTINE int_leq MOVL Reax,Recx ANDL Rebx,Reax ANDL CONST TAG,Reax jz ileq1 CMPL Rebx,Recx jle RetTrue jmp RetFalse ileq1: MOVL Recx,Reax CALLMACRO CALL_IO POLY_SYS_int_leq CALLMACRO RegMask int_leq,(M_Reax OR M_Recx OR Mask_all) CALLMACRO INLINE_ROUTINE int_gtr MOVL Reax,Recx ANDL Rebx,Reax ANDL CONST TAG,Reax jz igtr1 CMPL Rebx,Recx jg RetTrue jmp RetFalse igtr1: MOVL Recx,Reax CALLMACRO CALL_IO POLY_SYS_int_gtr CALLMACRO RegMask int_gtr,(M_Reax OR M_Recx OR Mask_all) CALLMACRO INLINE_ROUTINE int_lss MOVL Reax,Recx ANDL Rebx,Reax ANDL CONST TAG,Reax jz ilss1 CMPL Rebx,Recx jl RetTrue jmp RetFalse ilss1: MOVL Recx,Reax CALLMACRO CALL_IO POLY_SYS_int_lss CALLMACRO RegMask int_lss,(M_Reax OR M_Recx OR Mask_all) CALLMACRO INLINE_ROUTINE offset_address ;# This is needed in the code generator, but is a very risky thing to do. SHRL CONST TAGSHIFT,Rebx ;# Untag ADDL Rebx,Reax ;# and add in MOVL Reax,Rebx ret CALLMACRO RegMask offset_address,(M_Reax OR M_Rebx) CALLMACRO INLINE_ROUTINE teststreq MOVL Reax,Recx ;# Are either just single chars? ORL Rebx,Reax ANDL CONST TAG,Reax jz teststreq2 CMPL Rebx,Recx ;# Must be identical jz RetTrue jmp RetFalse teststreq2: MOVL Recx,Reax MOVL Rebx,Redi ;# Move ready for cmpsb. MOVL [Reax],Recx ;# Get length IFNDEF HOSTARCHITECTURE_X86_64 ADDL CONST 4,Recx ;# add 4 for the length field. ELSE ADDL CONST 8,Recx ;# add 8 for the length field. ENDIF MOVL Reax,Resi ;# Move to correct reg for cmpsb cld ;# Make sure we increment CMPL Reax,Reax ;# Set the Zero bit ;# Compare the strings. Because the length field is at the beginning ;# it does not matter if the value we loaded into %Recx is wrong IFDEF WINDOWS repe cmpsb ELSE repe cmpsb ENDIF MOVL Reax,Resi ;# Make these valid MOVL Reax,Recx MOVL Reax,Redi jz RetTrue jmp RetFalse CALLMACRO RegMask teststreq,(M_Reax OR M_Recx OR M_Redi OR M_Resi) CALLMACRO INLINE_ROUTINE teststrneq MOVL Reax,Recx ;# Are either just single chars? ORL Rebx,Reax ANDL CONST TAG,Reax jz teststrneq2 CMPL Rebx,Recx ;# Must be identical jz RetFalse jmp RetTrue teststrneq2: MOVL Recx,Reax MOVL Rebx,Redi ;# Move ready for cmpsb. MOVL [Reax],Recx ;# Get length IFNDEF HOSTARCHITECTURE_X86_64 ADDL CONST 4,Recx ;# add 4 for the length field. ELSE ADDL CONST 8,Recx ;# add 8 for the length field. ENDIF MOVL Reax,Resi ;# Move to correct reg for cmpsb cld ;# Make sure we increment CMPL Reax,Reax ;# Set the Zero bit ;# Compare the strings. Because the length field is at the beginning ;# it does not matter if the value we loaded into %Recx is wrong IFDEF WINDOWS repe cmpsb ELSE repe cmpsb ENDIF MOVL Reax,Resi ;# Make these valid MOVL Reax,Recx MOVL Reax,Redi jz RetFalse jmp RetTrue CALLMACRO RegMask teststrneq,(M_Reax OR M_Recx OR M_Redi OR M_Resi) ;# General test routine. Returns with the condition codes set ;# appropriately. teststr: TESTL CONST TAG,Reax ;# Is arg1 short jz tststr1 TESTL CONST TAG,Rebx ;# Yes: is arg2 also short? jz tststr0a ;# Both are short - just compare the characters CMPL Rebx,Reax ret tststr0a: MOVL CONST 1,Redi ;# Is arg2 the null string ? CMPL [Rebx],Redi jg tststr4 ;# Return with "gtr" set if it is SHRL CONST TAGSHIFT,Reax IFNDEF HOSTARCHITECTURE_X86_64 CMPB 4[Rebx],R_al ELSE CMPB 8[Rebx],R_al ENDIF jne tststr4 ;# If they're not equal that's the result CMPL CONST 256,Reax ;# But if they're equal set "less" because A is less than B jmp tststr4 tststr1: ;# arg2 is not short. Is arg1 ? TESTL CONST TAG,Rebx jz tststr2 MOVL [Reax],Redi ;# Is arg1 the null string CMPL CONST 1,Redi jl tststr4 ;# Return with "less" set if it is SHRL CONST TAGSHIFT,Rebx IFNDEF HOSTARCHITECTURE_X86_64 MOVB 4[Reax],R_cl ELSE MOVB 8[Reax],R_cl ENDIF CMPB R_bl,R_cl jne tststr4 ;# If they're not equal that's the result CMPL CONST 0,Redi ;# But if they're equal set "greater" because A is greater than B jmp tststr4 tststr2: MOVL [Reax],Redi ;# Get length. MOVL [Rebx],Recx ;# CMPL Recx,Redi ;# Find shorter length jge tststr3 MOVL Redi,Recx tststr3: IFNDEF HOSTARCHITECTURE_X86_64 LEAL 4[Reax],Resi ;# Load ptrs for cmpsb LEAL 4[Rebx],Redi ELSE LEAL 8[Reax],Resi ;# Load ptrs for cmpsb LEAL 8[Rebx],Redi ENDIF cld ;# Make sure we increment CMPL Reax,Reax ;# Set the Zero bit IFDEF WINDOWS repe cmpsb ;# Compare while equal and Recx > 0 ELSE repe IFNDEF HOSTARCHITECTURE_X86_64 cmpsb ;# Compare while equal and %ecx > 0 ELSE cmpsb ;# Compare while equal and %rcx > 0 ENDIF ENDIF jnz tststr4 ;# Strings are equal as far as the shorter of the two. Have to compare ;# the lengths. MOVL [Reax],Redi CMPL [Rebx],Redi tststr4: MOVL CONST 1,Reax ;# Clobber these MOVL Reax,Rebx MOVL Reax,Recx MOVL Reax,Resi MOVL Reax,Redi ret ;# These functions compare strings for lexical ordering. This version, at ;# any rate, assumes that they are UNSIGNED bytes. CALLMACRO INLINE_ROUTINE str_compare call teststr ja RetTrue ;# Return TAGGED(1) if it's greater je RetFalse ;# Return TAGGED(0) if it's equal MOVL CONST MINUS1,Reax ;# Return TAGGED(-1) if it's less. ret CALLMACRO RegMask str_compare,(M_Reax OR M_Recx OR M_Redi OR M_Resi) CALLMACRO INLINE_ROUTINE teststrgeq call teststr jnb RetTrue jmp RetFalse CALLMACRO RegMask teststrgeq,(M_Reax OR M_Recx OR M_Redi OR M_Resi) CALLMACRO INLINE_ROUTINE teststrleq call teststr jna RetTrue jmp RetFalse CALLMACRO RegMask teststrleq,(M_Reax OR M_Recx OR M_Redi OR M_Resi) CALLMACRO INLINE_ROUTINE teststrlss call teststr jb RetTrue jmp RetFalse CALLMACRO RegMask teststrlss,(M_Reax OR M_Recx OR M_Redi OR M_Resi) CALLMACRO INLINE_ROUTINE teststrgtr call teststr ja RetTrue jmp RetFalse CALLMACRO RegMask teststrgtr,(M_Reax OR M_Recx OR M_Redi OR M_Resi) CALLMACRO INLINE_ROUTINE is_big_endian jmp RetFalse ;# I386/486 is little-endian CALLMACRO RegMask is_big_endian,(M_Reax) CALLMACRO INLINE_ROUTINE bytes_per_word IFNDEF HOSTARCHITECTURE_X86_64 MOVL CONST TAGGED(4),Reax ;# 4 bytes per word ELSE MOVL CONST TAGGED(8),Reax ;# 8 bytes per word ENDIF ret CALLMACRO RegMask bytes_per_word,(M_Reax) ;# Word functions. These are all unsigned and do not raise Overflow CALLMACRO INLINE_ROUTINE mul_word SHRL CONST TAGSHIFT,Rebx ;# Untag the multiplier SUBL CONST TAG,Reax ;# Remove the tag from the multiplicand MULL Rebx ;# unsigned multiplication ADDL CONST TAG,Reax ;# Add back the tag, but don`t shift MOVL Reax,Redx ;# clobber this which has the high-end result MOVL Reax,Rebx ;# and the other bad result. ret CALLMACRO RegMask mul_word,(M_Reax OR M_Rebx OR M_Redx) CALLMACRO INLINE_ROUTINE plus_word LEAL (-TAG)[Reax+Rebx],Reax ;# Add the values and subtract a tag ret CALLMACRO RegMask plus_word,(M_Reax) CALLMACRO INLINE_ROUTINE minus_word SUBL Rebx,Reax ADDL CONST TAG,Reax ;# Put back the tag ret CALLMACRO RegMask minus_word,(M_Reax) CALLMACRO INLINE_ROUTINE div_word SHRL CONST TAGSHIFT,Rebx jz raise_div_ex MOVL Reax,Redi SHRL CONST TAGSHIFT,Reax MOVL CONST 0,Redx div Rebx CALLMACRO MAKETAGGED Reax,Reax MOVL Reax,Redx MOVL Reax,Rebx ret CALLMACRO RegMask div_word,(M_Reax OR M_Rebx OR M_Redx) CALLMACRO INLINE_ROUTINE mod_word SHRL CONST TAGSHIFT,Rebx jz raise_div_ex MOVL Reax,Redi SHRL CONST TAGSHIFT,Reax MOVL CONST 0,Redx div Rebx CALLMACRO MAKETAGGED Redx,Reax MOVL Reax,Redx MOVL Reax,Rebx ret CALLMACRO RegMask mod_word,(M_Reax OR M_Rebx OR M_Redx) raise_div_ex: IFDEF WINDOWS jmp dword ptr [RaiseDiv+Rebp] ELSE jmp *RaiseDiv[Rebp] ENDIF CALLMACRO INLINE_ROUTINE word_eq CMPL Rebx,Reax jz RetTrue ;# True if they are equal. jmp RetFalse CALLMACRO RegMask word_eq,(M_Reax) CALLMACRO INLINE_ROUTINE word_neq CMPL Rebx,Reax jz RetFalse jmp RetTrue CALLMACRO RegMask word_neq,(M_Reax) CALLMACRO INLINE_ROUTINE word_geq CMPL Rebx,Reax jnb RetTrue jmp RetFalse CALLMACRO RegMask word_geq,(M_Reax) CALLMACRO INLINE_ROUTINE word_leq CMPL Rebx,Reax jna RetTrue jmp RetFalse CALLMACRO RegMask word_leq,(M_Reax) CALLMACRO INLINE_ROUTINE word_gtr CMPL Rebx,Reax ja RetTrue jmp RetFalse CALLMACRO RegMask word_gtr,(M_Reax) CALLMACRO INLINE_ROUTINE word_lss CMPL Rebx,Reax jb RetTrue jmp RetFalse CALLMACRO RegMask word_lss,(M_Reax) ;# Atomically increment the value at the address of the arg and return the ;# updated value. Since the xadd instruction returns the original value ;# we have to increment it. CALLMACRO INLINE_ROUTINE atomic_increment MOVL CONST 2,Rebx LOCKXADDL Rebx,[Reax] ADDL CONST 2,Rebx MOVL Rebx,Reax ret CALLMACRO RegMask atomic_incr,(M_Reax OR M_Rebx) ;# Atomically decrement the value at the address of the arg and return the ;# updated value. Since the xadd instruction returns the original value ;# we have to decrement it. CALLMACRO INLINE_ROUTINE atomic_decrement MOVL CONST -2,Rebx LOCKXADDL Rebx,[Reax] MOVL Rebx,Reax SUBL CONST 2,Reax ret CALLMACRO RegMask atomic_decr,(M_Reax OR M_Rebx) ;# Return the thread id object for the current thread CALLMACRO INLINE_ROUTINE thread_self MOVL ThreadId[Rebp],Reax ret CALLMACRO RegMask thread_self,(M_Reax) ;# FLOATING POINT ;# If we have insufficient space for the result we call in to ;# main RTS to do the work. mem_for_real: ;# Allocate memory for the result. IFNDEF HOSTARCHITECTURE_X86_64 MOVL LocalMpointer[Rebp],Recx SUBL CONST 12,Recx ;# Length word (4 bytes) + 8 bytes ELSE MOVL R15,Recx SUBL CONST 16,Recx ;# Length word (4 bytes) + 8 bytes ENDIF IFDEF TEST_ALLOC ;# Test case - this will always force a call into RTS. CMPL LocalMpointer[Rebp],Recx ELSE CMPL LocalMbottom[Rebp],Recx ENDIF jb mem_for_real1 IFNDEF HOSTARCHITECTURE_X86_64 MOVL Recx,LocalMpointer[Rebp] ;# Updated allocation pointer IFDEF WINDOWS mov dword ptr (-4)[Recx],01000002h ;# Length word: ELSE MOVL CONST 0x01000002,(-4)[Recx] ;# Two words plus tag ENDIF ELSE MOVL Recx,R15 ;# Updated allocation pointer MOVL CONST 1,(-8)[Recx] ;# One word MOVB CONST B_bytes,(-1)[Recx] ;# Set the byte flag. ENDIF ret mem_for_real1: ;# Not enough store: clobber bad value in ecx. MOVL CONST 1,Recx ret CALLMACRO INLINE_ROUTINE real_add call mem_for_real jb real_add_1 ;# Not enough space - call RTS. ;# Do the operation and put the result in the allocated ;# space. IFDEF WINDOWS FLD qword ptr [Reax] FADD qword ptr [Rebx] FSTP qword ptr [Recx] ELSE FLDL [Reax] FADDL [Rebx] FSTPL [Recx] ENDIF MOVL Recx,Reax ret real_add_1: CALLMACRO CALL_IO POLY_SYS_Add_real CALLMACRO RegMask real_add,(M_Reax OR M_Recx OR M_Redx OR Mask_all) CALLMACRO INLINE_ROUTINE real_sub call mem_for_real jb real_sub_1 ;# Not enough space - call RTS. ;# Do the operation and put the result in the allocated ;# space. IFDEF WINDOWS FLD qword ptr [Reax] FSUB qword ptr [Rebx] FSTP qword ptr [Recx] ELSE FLDL [Reax] FSUBL [Rebx] FSTPL [Recx] ENDIF MOVL Recx,Reax ret real_sub_1: CALLMACRO CALL_IO POLY_SYS_Sub_real CALLMACRO RegMask real_sub,(M_Reax OR M_Recx OR M_Redx OR Mask_all) CALLMACRO INLINE_ROUTINE real_mul call mem_for_real jb real_mul_1 ;# Not enough space - call RTS. ;# Do the operation and put the result in the allocated ;# space. IFDEF WINDOWS FLD qword ptr [Reax] FMUL qword ptr [Rebx] FSTP qword ptr [Recx] ELSE FLDL [Reax] FMULL [Rebx] FSTPL [Recx] ENDIF MOVL Recx,Reax ret real_mul_1: CALLMACRO CALL_IO POLY_SYS_Mul_real CALLMACRO RegMask real_mul,(M_Reax OR M_Recx OR M_Redx OR Mask_all) CALLMACRO INLINE_ROUTINE real_div call mem_for_real jb real_div_1 ;# Not enough space - call RTS. ;# Do the operation and put the result in the allocated ;# space. IFDEF WINDOWS FLD qword ptr [Reax] FDIV qword ptr [Rebx] FSTP qword ptr [Recx] ELSE FLDL [Reax] FDIVL [Rebx] FSTPL [Recx] ENDIF MOVL Recx,Reax ret real_div_1: CALLMACRO CALL_IO POLY_SYS_Div_real CALLMACRO RegMask real_div,(M_Reax OR M_Recx OR M_Redx OR Mask_all) CALLMACRO INLINE_ROUTINE real_neg call mem_for_real jb real_neg_1 ;# Not enough space - call RTS. ;# Do the operation and put the result in the allocated ;# space. ;# N.B. Real.~ X is not the same as 0.0 - X. Real.~ 0.0 is ~0.0; IFDEF WINDOWS FLD qword ptr [Reax] FCHS FSTP qword ptr [Recx] ELSE FLDL [Reax] FCHS FSTPL [Recx] ENDIF MOVL Recx,Reax ret real_neg_1: CALLMACRO CALL_IO POLY_SYS_Neg_real CALLMACRO RegMask real_neg,(M_Reax OR M_Recx OR M_Redx OR Mask_all) CALLMACRO INLINE_ROUTINE real_eq IFDEF WINDOWS FLD qword ptr [Reax] FCOMP qword ptr [Rebx] ELSE FLDL [Reax] FCOMPL [Rebx] ENDIF FNSTSW R_ax ;# Not all 64-bit processors support SAHF. ;# The result is true if the zero flag is set and parity flag clear. ANDL CONST 17408,Reax ;# 0x4400 CMPL CONST 16384,Reax ;# 0x4000 je RetTrue jmp RetFalse CALLMACRO RegMask real_eq,(M_Reax) CALLMACRO INLINE_ROUTINE real_neq IFDEF WINDOWS FLD qword ptr [Reax] FCOMP qword ptr [Rebx] ELSE FLDL [Reax] FCOMPL [Rebx] ENDIF FNSTSW R_ax ANDL CONST 17408,Reax ;# 0x4400 CMPL CONST 16384,Reax ;# 0x4000 jne RetTrue jmp RetFalse CALLMACRO RegMask real_neq,(M_Reax) CALLMACRO INLINE_ROUTINE real_lss ;# Compare Rebx > Reax IFDEF WINDOWS FLD qword ptr [Rebx] FCOMP qword ptr [Reax] ELSE FLDL [Rebx] FCOMPL [Reax] ENDIF FNSTSW R_ax ;# True if the carry flag (C0), zero flag (C3) and parity (C2) are all clear ANDL CONST 17664,Reax ;# 0x4500 je RetTrue jmp RetFalse CALLMACRO RegMask real_lss,(M_Reax) CALLMACRO INLINE_ROUTINE real_gtr IFDEF WINDOWS FLD qword ptr [Reax] FCOMP qword ptr [Rebx] ELSE FLDL [Reax] FCOMPL [Rebx] ENDIF FNSTSW R_ax ;# True if the carry flag (C0), zero flag (C3) and parity (C2) are all clear ANDL CONST 17664,Reax ;# 0x4500 je RetTrue jmp RetFalse CALLMACRO RegMask real_gtr,(M_Reax) CALLMACRO INLINE_ROUTINE real_leq ;# Compare Rebx > Reax IFDEF WINDOWS FLD qword ptr [Rebx] FCOMP qword ptr [Reax] ELSE FLDL [Rebx] FCOMPL [Reax] ENDIF FNSTSW R_ax ;# True if the carry flag (C0) and parity (C2) are both clear ANDL CONST 1280,Reax ;# 0x500 je RetTrue jmp RetFalse CALLMACRO RegMask real_leq,(M_Reax) CALLMACRO INLINE_ROUTINE real_geq IFDEF WINDOWS FLD qword ptr [Reax] FCOMP qword ptr [Rebx] ELSE FLDL [Reax] FCOMPL [Rebx] ENDIF FNSTSW R_ax ;# True if the carry flag (C0) and parity (C2) are both clear ANDL CONST 1280,Reax ;# 0x500 je RetTrue jmp RetFalse CALLMACRO RegMask real_geq,(M_Reax) CALLMACRO INLINE_ROUTINE real_from_int call mem_for_real jb real_float_1 ;# Not enough space - call RTS. SARL CONST TAGSHIFT,Reax ;# Untag the value MOVL Reax,RealTemp[Rebp] ;# Save it in a temporary IFDEF WINDOWS FILD dword ptr RealTemp[Rebp] FSTP qword ptr [Recx] ELSE IFDEF HOSTARCHITECTURE_X86_64 FILDQ RealTemp[Rebp] ELSE FILDL RealTemp[Rebp] ENDIF FSTPL [Recx] ENDIF MOVL Recx,Reax ret real_float_1: CALLMACRO CALL_IO POLY_SYS_int_to_real CALLMACRO RegMask real_from_int,(M_Reax OR M_Recx OR M_Redx OR Mask_all) ;# Register mask vector. - extern int registerMaskVector[]; ;# Each entry in this vector is a set of the registers modified ;# by the function. It is an untagged bitmap with the registers ;# encoded in the same way as the IFDEF WINDOWS align 4 PUBLIC registerMaskVector registerMaskVector dd Mask_all ;# 0 is unused ELSE IFNDEF HOSTARCHITECTURE_X86_64 GLOBAL EXTNAME(registerMaskVector) ELSE .global EXTNAME(registerMaskVector) ENDIF EXTNAME(registerMaskVector): #define dd .long dd Mask_all ;# 0 is unused ENDIF dd Mask_all ;# 1 dd Mask_all ;# 2 dd Mask_all ;# 3 is unused dd Mask_all ;# 4 is unused dd Mask_all ;# 5 is unused dd Mask_all ;# 6 dd Mask_all ;# 7 is unused dd Mask_all ;# 8 is unused dd Mask_all ;# 9 dd Mask_all ;# 10 is unused dd Mask_alloc_store ;# 11 dd Mask_all ;# 12 dd Mask_all ;# return = 13 dd Mask_all ;# raisex = 14 dd Mask_get_length ;# 15 dd Mask_all ;# 16 is unused dd Mask_all ;# 17 dd Mask_all ;# 18 is no longer used dd Mask_all ;# 19 is no longer used dd Mask_all ;# 20 is no longer used dd Mask_all ;# 21 is unused dd Mask_all ;# 22 is unused dd Mask_str_compare ;# 23 dd Mask_teststreq ;# 24 dd Mask_teststrneq ;# 25 dd Mask_teststrgtr ;# 26 dd Mask_teststrlss ;# 27 dd Mask_teststrgeq ;# 28 dd Mask_teststrleq ;# 29 dd Mask_all ;# 30 dd Mask_all ;# 31 is no longer used dd Mask_all ;# 32 is no longer used dd Mask_all ;# 33 is no longer used dd Mask_all ;# 34 is no longer used dd Mask_all ;# 35 is no longer used dd Mask_all ;# 36 is no longer used dd Mask_all ;# 37 is unused dd Mask_all ;# 38 is unused dd Mask_all ;# 39 is unused dd Mask_all ;# 40 dd Mask_all ;# 41 is unused dd Mask_all ;# 42 dd Mask_all ;# 43 dd Mask_all ;# 44 is no longer used dd Mask_all ;# 45 is no longer used dd Mask_all ;# 46 dd Mask_lockseg ;# 47 dd Mask_all ;# nullorzero = 48 dd Mask_all ;# 49 is no longer used dd Mask_all ;# 50 is no longer used dd Mask_all ;# 51 dd Mask_all ;# 52 dd Mask_all ;# 53 is unused dd Mask_all ;# 54 is unused dd Mask_all ;# version_number = 55 dd Mask_all ;# 56 is unused dd Mask_all ;# 57 is unused dd Mask_all ;# 58 is unused dd Mask_all ;# 59 is unused dd Mask_all ;# 60 is unused dd Mask_all ;# 61 dd Mask_all ;# 62 dd Mask_all ;# 63 is unused dd Mask_all ;# 64 is unused dd Mask_all ;# 65 is unused dd Mask_all ;# 66 is unused dd Mask_all ;# 67 is unused dd Mask_all ;# 68 is unused dd Mask_all ;# 69 is unused dd Mask_atomic_incr ;# 70 dd Mask_atomic_decr ;# 71 dd Mask_thread_self ;# 72 dd Mask_all ;# 73 dd Mask_all ;# 74 is unused dd Mask_all ;# 75 is unused dd Mask_all ;# 76 is unused dd Mask_all ;# 77 is unused dd Mask_all ;# 78 is unused dd Mask_all ;# 79 is unused dd Mask_all ;# Mask_version_number_1 = 80 dd Mask_all ;# 81 is now unused dd Mask_all ;# 82 is now unused dd Mask_all ;# 83 is now unused dd Mask_all ;# 84 dd Mask_all ;# 85 is now unused dd Mask_all ;# 86 is now unused dd Mask_all ;# 87 is now unused dd Mask_all ;# 88 dd Mask_all ;# 89 is unused dd Mask_all ;# 90 is unused dd Mask_all ;# 91 is unused dd Mask_all ;# 92 dd Mask_all ;# 93 dd Mask_all ;# 94 dd Mask_all ;# 95 is unused dd Mask_all ;# 96 is unused dd Mask_all ;# 97 is unused dd Mask_all ;# 98 dd Mask_all ;# 99 dd Mask_all ;# 100 dd Mask_all ;# 101 is unused dd Mask_all ;# 102 is unused dd Mask_all ;# 103 dd Mask_all ;# 104 is unused dd Mask_is_short ;# 105 dd Mask_aplus ;# 106 dd Mask_aminus ;# 107 dd Mask_amul ;# 108 dd Mask_adiv ;# 109 dd Mask_amod ;# 110 dd Mask_aneg ;# 111 dd Mask_xora ;# 112 dd Mask_equala ;# 113 dd Mask_ora ;# 114 dd Mask_anda ;# 115 dd Mask_all ;# version_number_3 = 116 dd Mask_all ;# 117 dd Mask_real_geq ;# 118 dd Mask_real_leq ;# 119 dd Mask_real_gtr ;# 120 dd Mask_real_lss ;# 121 dd Mask_real_eq ;# 122 dd Mask_real_neq ;# 123 dd Mask_all ;# 124 dd Mask_real_add ;# 125 dd Mask_real_sub ;# 126 dd Mask_real_mul ;# 127 dd Mask_real_div ;# 128 dd Mask_all ;# 129 is unused dd Mask_real_neg ;# 130 dd Mask_all ;# 131 is unused dd Mask_all ;# 132 dd Mask_all ;# 133 dd Mask_all ;# 134 dd Mask_real_from_int ;# 135 dd Mask_all ;# 136 dd Mask_all ;# 137 dd Mask_all ;# 138 dd Mask_all ;# 139 dd Mask_all ;# 140 dd Mask_all ;# 141 dd Mask_all ;# 142 is no longer used dd Mask_all ;# 143 is unused dd Mask_all ;# 144 is unused dd Mask_all ;# 145 is unused dd Mask_all ;# 146 is unused dd Mask_all ;# 147 is unused dd Mask_all ;# stdin = 148 dd Mask_all ;# stdout= 149 dd Mask_all ;# 150 dd Mask_set_string_length ;# 151 dd Mask_get_first_long_word ;# 152 dd Mask_all ;# 153 is unused dd Mask_all ;# 154 is unused dd Mask_all ;# 155 is unused dd Mask_all ;# 156 is unused dd Mask_all ;# 157 is unused dd Mask_all ;# 158 is unused dd Mask_all ;# 159 is unused dd Mask_all ;# 160 is unused dd Mask_all ;# 161 is unused dd Mask_all ;# 162 is unused dd Mask_all ;# 163 is unused dd Mask_all ;# 164 is unused dd Mask_all ;# 165 is unused dd Mask_all ;# 166 is unused dd Mask_all ;# 167 is unused dd Mask_all ;# 168 is unused dd Mask_all ;# 169 is unused dd Mask_all ;# 170 is unused dd Mask_all ;# 171 is unused dd Mask_all ;# 172 is unused dd Mask_all ;# 173 is unused dd Mask_all ;# 174 is unused dd Mask_all ;# 175 is unused dd Mask_all ;# 176 is unused dd Mask_all ;# 177 is unused dd Mask_all ;# 178 is unused dd Mask_all ;# 179 is unused dd Mask_all ;# 180 is unused dd Mask_all ;# 181 is unused dd Mask_all ;# 182 is unused dd Mask_all ;# 183 is unused dd Mask_all ;# 184 is unused dd Mask_all ;# 185 is unused dd Mask_all ;# 186 is unused dd Mask_all ;# 187 is unused dd Mask_all ;# 188 is unused dd Mask_all ;# 189 dd Mask_all ;# 190 is unused dd Mask_all ;# 191 is no longer used dd Mask_all ;# 192 is unused dd Mask_all ;# 193 is unused dd Mask_all ;# 194 dd Mask_move_words ;# 195 dd Mask_shift_right_arith_word ;# 196 dd Mask_int_to_word ;# 197 dd Mask_move_bytes ;# 198 dd Mask_all ;# 199 now unused dd Mask_all ;# 200 dd Mask_all ;# 201 dd Mask_all ;# stderr = 202 dd Mask_all ;# 203 now unused dd Mask_all ;# 204 dd Mask_all ;# 205 dd Mask_all ;# 206 dd Mask_all ;# 207 is unused dd Mask_all ;# 208 now unused dd Mask_all ;# 209 dd Mask_all ;# 210 is unused dd Mask_all ;# 211 is unused dd Mask_all ;# 212 is unused dd Mask_is_big_endian ;# 213 dd Mask_bytes_per_word ;# 214 dd Mask_offset_address ;# 215 dd Mask_shift_right_word ;# 216 dd Mask_word_neq ;# 217 dd Mask_not_bool ;# 218 dd Mask_all ;# 219 is unused dd Mask_all ;# 220 is unused dd Mask_all ;# 221 is unused dd Mask_all ;# 222 is unused dd Mask_string_length ;# 223 dd Mask_all ;# 224 is unused dd Mask_all ;# 225 is unused dd Mask_all ;# 226 is unused dd Mask_all ;# 227 is unused dd Mask_all ;# 228 is unused dd Mask_int_eq ;# 229 dd Mask_int_neq ;# 230 dd Mask_int_geq ;# 231 dd Mask_int_leq ;# 232 dd Mask_int_gtr ;# 233 dd Mask_int_lss ;# 234 dd Mask_all ;# 235 dd Mask_all ;# 236 is unused dd Mask_all ;# 237 is unused dd Mask_mul_word ;# 238 dd Mask_plus_word ;# 239 dd Mask_minus_word ;# 240 dd Mask_div_word ;# 241 dd Mask_or_word ;# 242 dd Mask_and_word ;# 243 dd Mask_xor_word ;# 244 dd Mask_shift_left_word ;# 245 dd Mask_mod_word ;# 246 dd Mask_word_geq ;# 247 dd Mask_word_leq ;# 248 dd Mask_word_gtr ;# 249 dd Mask_word_lss ;# 250 dd Mask_word_eq ;# 251 dd Mask_load_byte ;# 252 dd Mask_load_word ;# 253 dd Mask_assign_byte ;# 254 dd Mask_assign_word ;# 255 IFDEF HOSTARCHITECTURE_X86_64 ENDIF END polyml.5.2.1/libpolyml/xcall_numbers.h0000644000175000017500000005612610506226527017025 0ustar daviddavid/* Title: X-Windows/Motif calls. Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #define XCALL_Not 10 #define XCALL_And 11 #define XCALL_Or 12 #define XCALL_Xor 13 #define XCALL_DownShift 14 #define XCALL_UpShift 15 #define XCALL_NoDrawable 20 #define XCALL_NoCursor 21 #define XCALL_NoFont 22 #define XCALL_NoColormap 23 #define XCALL_NoVisual 24 #define XCALL_GetTimeOfDay 30 /* Colorcells 100 */ #define XCALL_XAllocColor 103 #define XCALL_XAllocColorCells 104 #define XCALL_XAllocColorPlanes 105 #define XCALL_XAllocNamedColor 106 #define XCALL_XFreeColors 107 #define XCALL_XLookupColor 108 #define XCALL_XParseColor 109 #define XCALL_XQueryColor 110 #define XCALL_XQueryColors 111 #define XCALL_XStoreColor 112 #define XCALL_XStoreColors 113 #define XCALL_XStoreNamedColor 114 #define XCALL_BlackPixel 115 #define XCALL_WhitePixel 116 /* Colormaps 150 */ #define XCALL_XCopyColormapAndFree 150 #define XCALL_XCreateColormap 151 #define XCALL_XInstallColormap 154 #define XCALL_XListInstalledColormaps 155 #define XCALL_XUninstallColormap 158 #define XCALL_DefaultColormap 159 #define XCALL_DefaultVisual 160 #define XCALL_DisplayCells 161 #define XCALL_VisualClass 162 #define XCALL_VisualRedMask 163 #define XCALL_VisualGreenMask 164 #define XCALL_VisualBlueMask 165 /* Cursors 200 */ #define XCALL_XCreateFontCursor 200 #define XCALL_XCreateGlyphCursor 201 #define XCALL_XCreatePixmapCursor 202 #define XCALL_XDefineCursor 203 #define XCALL_XQueryBestCursor 205 #define XCALL_XRecolorCursor 206 #define XCALL_XUndefineCursor 207 #define XCALL_XOpenDisplay 222 /* Display Specifications 250 */ #define XCALL_CellsOfScreen 250 #define XCALL_DefaultDepth 251 #define XCALL_DisplayHeight 252 #define XCALL_DisplayHeightMM 253 #define XCALL_DisplayPlanes 254 #define XCALL_DisplayString 255 #define XCALL_DisplayWidth 256 #define XCALL_DisplayWidthMM 257 #define XCALL_DoesBackingStore 258 #define XCALL_DoesSaveUnders 259 #define XCALL_EventMaskOfScreen 260 #define XCALL_MaxCmapsOfScreen 261 #define XCALL_MinCmapsOfScreen 262 #define XCALL_ProtocolRevision 263 #define XCALL_ProtocolVersion 264 #define XCALL_ServerVendor 265 #define XCALL_VendorRelease 266 /* Drawing Primitives 300 */ #define XCALL_XClearArea 300 #define XCALL_XClearWindow 301 #define XCALL_XCopyArea 302 #define XCALL_XCopyPlane 303 #define XCALL_XDrawArc 304 #define XCALL_XDrawArcs 305 #define XCALL_XDrawImageString 306 #define XCALL_XDrawImageString16 307 #define XCALL_XDrawLine 308 #define XCALL_XDrawLines 309 #define XCALL_XDrawPoint 310 #define XCALL_XDrawPoints 311 #define XCALL_XDrawRectangle 312 #define XCALL_XDrawRectangles 313 #define XCALL_XDrawSegments 314 #define XCALL_XDrawString 315 #define XCALL_XDrawString16 316 #define XCALL_XDrawText 317 #define XCALL_XDrawText16 318 #define XCALL_XFillArc 319 #define XCALL_XFillArcs 320 #define XCALL_XFillPolygon 321 #define XCALL_XFillRectangle 322 #define XCALL_XFillRectangles 323 /* Events 350 */ #define XCALL_XSelectInput 350 #define XCALL_XSynchronize 351 #define XCALL_GetState 361 #define XCALL_SetState 362 #define XCALL_NextEvent 365 #define XCALL_InsertTimeout 366 #define XCALL_XSetInputFocus 370 #define XCALL_XGetInputFocus 371 #define XCALL_XSetSelectionOwner 372 #define XCALL_XGetSelectionOwner 373 #define XCALL_XConvertSelection 374 #define XCALL_XSendSelectionNotify 375 #define XCALL_XDeleteProperty 376 #define XCALL_XInternAtom 377 #define XCALL_XGetAtomName 378 /* Fonts 400 */ #define XCALL_XGetFontPath 401 #define XCALL_XListFonts 402 #define XCALL_XListFontsWithInfo 403 #define XCALL_XLoadFont 404 #define XCALL_XLoadQueryFont 405 #define XCALL_XQueryFont 406 #define XCALL_XSetFontPath 407 /* Grabbing 450 */ /* Graphics Context 500 */ #define XCALL_DefaultGC 500 #define XCALL_UpdateGC 501 #define XCALL_XCreateGC 503 #define XCALL_XSetClipRectangles 509 #define XCALL_XSetDashes 510 /* Images 550 */ #define XCALL_XAddPixel 550 #define XCALL_XGetImage 552 #define XCALL_XGetPixel 553 #define XCALL_XGetSubImage 554 #define XCALL_XPutImage 555 #define XCALL_XPutPixel 556 #define XCALL_XSubImage 557 #define XCALL_BitmapBitOrder 558 #define XCALL_BitmapPad 559 #define XCALL_BitmapUnit 560 #define XCALL_ByteOrder 561 /* Keyboard 600 */ #define XCALL_XLookupString 611 #define XCALL_XQueryKeymap 612 #define XCALL_IsCursorKey 618 #define XCALL_IsFunctionKey 619 #define XCALL_IsKeypadKey 620 #define XCALL_IsMiscFunctionKey 621 #define XCALL_IsModifierKey 622 #define XCALL_IsPFKey 623 /* Output Buffer 650 */ #define XCALL_XFlush 650 #define XCALL_XSync 651 /* Pointers 700 */ #define XCALL_XQueryPointer 703 /* Regions 750 */ /* Save Set 800 */ /* Screen Saver 850 */ #define XCALL_XActivateScreenSaver 850 #define XCALL_XForceScreenSaver 851 #define XCALL_XGetScreenSaver 852 #define XCALL_XResetScreenSaver 853 #define XCALL_XSetScreenSaver 854 /* Standard Geometry 900 */ #define XCALL_XTranslateCoordinates 902 /* Text 950 */ #define XCALL_XTextExtents 950 #define XCALL_XTextExtents16 951 #define XCALL_XTextWidth 952 #define XCALL_XTextWidth16 953 /* Tiles, Pixmaps, Stipples and Bitmaps 1000 */ #define XCALL_XCreateBitmapFromData 1000 #define XCALL_XCreatePixmap 1001 #define XCALL_XCreatePixmapFromBitmapData 1002 #define XCALL_XQueryBestStipple 1004 #define XCALL_XQueryBestTile 1005 #define XCALL_XReadBitmapFile 1006 #define XCALL_XWriteBitmapFile 1007 /* User Preferences 1050 */ #define XCALL_XAutoRepeatOff 1050 #define XCALL_XAutoRepeatOn 1051 #define XCALL_XBell 1052 #define XCALL_XGetDefault 1053 /* Window Attributes 1100 */ #define XCALL_ChangeWindow 1100 #define XCALL_XGetGeometry 1101 #define XCALL_XGetWindowAttributes 1102 #define XCALL_XSetWindowBorderWidth 1107 /* Window Configuration 1150 */ #define XCALL_XCirculateSubwindows 1150 #define XCALL_XConfigureWindow 1153 #define XCALL_XLowerWindow 1154 #define XCALL_XMapRaised 1155 #define XCALL_XMapSubwindows 1156 #define XCALL_XMapWindow 1157 #define XCALL_XMoveResizeWindow 1158 #define XCALL_XMoveWindow 1159 #define XCALL_XQueryTree 1160 #define XCALL_XRaiseWindow 1161 #define XCALL_XReparentWindow 1162 #define XCALL_XResizeWindow 1163 #define XCALL_XRestackWindows 1164 #define XCALL_XUnmapSubwindows 1165 #define XCALL_XUnmapWindow 1166 /* Window Existence 1200 */ #define XCALL_RootWindow 1200 #define XCALL_DestroyXObject 1201 #define XCALL_XDestroySubwindows 1202 #define XCALL_XCreateSimpleWindow 1203 #define XCALL_XCreateWindow 1204 /* Window Manager 1250 */ #define XCALL_XSetProperty 1299 #define XCALL_XGetTextProperty 1250 #define XCALL_XGetWMHints 1253 #define XCALL_XGetWMSizeHints 1255 #define XCALL_XGetIconSizes 1257 #define XCALL_XGetTransientForHint 1259 #define XCALL_XGetWMColormapWindows 1261 #define XCALL_XGetRGBColormaps 1263 #define XCALL_XWMGeometry 1264 /* Miscellaneous and Convenience functions 1300 */ #define XCALL_GetID 1300 #define XCALL_ResourceExists 1301 #define XCALL_GetDisplay 1303 /* X Toolkit 3000 */ #define XCALL_NoWidget 3000 #define XCALL_AppInitialise 3001 #define XCALL_XtRealizeWidget 3002 #define XCALL_XtManageChildren 3003 #define XCALL_XtUnmanageChildren 3004 #define XCALL_XtDestroyWidget 3005 #define XCALL_SetCallbacks 3006 #define XCALL_XtSetValues 3007 #define XCALL_GetValue 3008 #define XCALL_XtParent 3009 #define XCALL_XtWindow 3010 #define XCALL_XtDisplay 3011 #define XCALL_XtUnrealizeWidget 3012 #define XCALL_XtName 3013 #define XCALL_XtParseTranslationTable 3014 #define XCALL_XtOverrideTranslations 3015 #define XCALL_XtAugmentTranslations 3016 #define XCALL_XtUninstallTranslations 3017 #define XCALL_XtTranslateTablePrint 3018 #define XCALL_XtCreatePopupShell 3019 #define XCALL_InsertWidgetTimeout 3020 #define XCALL_GetWidgetState 3021 #define XCALL_SetWidgetState 3022 #define XCALL_XtSetSensitive 3023 #define XCALL_XtIsSensitive 3024 #define XCALL_GetSubresources 3025 #define XCALL_Cast 3026 /* added 6/12/94 SPF */ #define XCALL_XtPopup 3027 #define XCALL_XtPopdown 3028 #define XCALL_XtMapWidget 3029 #define XCALL_XtUnmapWidget 3030 /* added 19/1/95 SPF */ #define XCALL_XtIsManaged 3031 #define XCALL_XtIsRealized 3032 /* added 23/3/01 DCJM */ #define XCALL_XtGetApplicationResources 3033 #define XCALL_XtAddEventHandler 3034 #define XCALL_XmCreateArrowButton 4000 #define XCALL_XmCreateArrowButtonGadget 4001 #define XCALL_XmCreateBulletinBoard 4002 #define XCALL_XmCreateBulletinBoardDialog 4003 #define XCALL_XmCreateCascadeButton 4004 #define XCALL_XmCreateCascadeButtonGadget 4005 #define XCALL_XmCreateCommand 4006 #define XCALL_XmCreateDialogShell 4007 #define XCALL_XmCreateDrawingArea 4008 #define XCALL_XmCreateDrawnButton 4009 #define XCALL_XmCreateErrorDialog 4010 #define XCALL_XmCreateFileSelectionBox 4011 #define XCALL_XmCreateFileSelectionDialog 4012 #define XCALL_XmCreateForm 4013 #define XCALL_XmCreateFormDialog 4014 #define XCALL_XmCreateFrame 4015 #define XCALL_XmCreateInformationDialog 4016 #define XCALL_XmCreateLabel 4017 #define XCALL_XmCreateLabelGadget 4018 #define XCALL_XmCreateList 4019 #define XCALL_XmCreateMainWindow 4020 #define XCALL_XmCreateMenuBar 4021 #define XCALL_XmCreateMenuShell 4022 #define XCALL_XmCreateMessageBox 4023 #define XCALL_XmCreateMessageDialog 4024 #define XCALL_XmCreateOptionMenu 4025 #define XCALL_XmCreatePanedWindow 4026 #define XCALL_XmCreatePopupMenu 4027 #define XCALL_XmCreatePromptDialog 4028 #define XCALL_XmCreatePulldownMenu 4029 #define XCALL_XmCreatePushButton 4030 #define XCALL_XmCreatePushButtonGadget 4031 #define XCALL_XmCreateQuestionDialog 4032 #define XCALL_XmCreateRadioBox 4033 #define XCALL_XmCreateRowColumn 4034 #define XCALL_XmCreateScale 4035 #define XCALL_XmCreateScrollBar 4036 #define XCALL_XmCreateScrolledList 4037 #define XCALL_XmCreateScrolledText 4038 #define XCALL_XmCreateScrolledWindow 4039 #define XCALL_XmCreateSelectionBox 4040 #define XCALL_XmCreateSelectionDialog 4041 #define XCALL_XmCreateSeparator 4042 #define XCALL_XmCreateSeparatorGadget 4043 #define XCALL_XmCreateSimpleCheckBox 4044 #define XCALL_XmCreateSimpleMenuBar 4045 #define XCALL_XmCreateSimpleOptionMenu 4046 #define XCALL_XmCreateSimplePopupMenu 4047 #define XCALL_XmCreateSimplePulldownMenu 4048 #define XCALL_XmCreateSimpleRadioBox 4049 #define XCALL_XmCreateText 4050 #define XCALL_XmCreateTextField 4051 #define XCALL_XmCreateToggleButton 4052 #define XCALL_XmCreateToggleButtonGadget 4053 #define XCALL_XmCreateWarningDialog 4054 #define XCALL_XmCreateWorkArea 4055 #define XCALL_XmCreateWorkingDialog 4056 #define XCALL_XmCascadeButtonHighlight 4060 #define XCALL_XmCommandError 4061 #define XCALL_XmCommandGetChild 4062 #define XCALL_XmFileSelectionBoxGetChild 4063 #define XCALL_XmFileSelectionDoSearch 4064 #define XCALL_XmIsSomething 4080 #define XCALL_XmMainWindowSetAreas 4100 #define XCALL_XmMainWindowSepX 4101 #define XCALL_XmMessageBoxGetChild 4105 #define XCALL_XmOptionButtonGadget 4106 #define XCALL_XmOptionLabelGadget 4107 #define XCALL_XmSelectionBoxGetChild 4108 #define XCALL_XmSetMenuCursor 4200 #define XCALL_XmScrolledWindowSetAreas 4201 #define XCALL_XmTextGetString 4202 #define XCALL_XmTextSetString 4203 #define XCALL_XmTextSetInsertionPosition 4204 #define XCALL_XmTrackingLocate 4210 #define XCALL_XmUpdateDisplay 4211 /* XmText widget 4300 */ /* XmTextClearSelection 4300 */ /* XmTextCopy 4301 */ /* XmTextCut 4302 */ #define XCALL_XmTextGetAddMode 4303 #define XCALL_XmTextGetBaseline 4304 #define XCALL_XmTextGetCursorPosition 4305 #define XCALL_XmTextGetEditable 4306 #define XCALL_XmTextGetInsertionPosition 4307 #define XCALL_XmTextGetLastPosition 4308 #define XCALL_XmTextGetMaxLength 4309 #define XCALL_XmTextGetSelection 4310 /* XmTextGetSelectionPosition 4311 */ /* XCALL_XmTextGetString defined above */ /* XmTextGetSource 4313 */ #define XCALL_XmTextGetTopCharacter 4314 #define XCALL_XmTextInsert 4315 #define XCALL_XmTextPaste 4316 /* XmTextPosToXY 4317 */ #define XCALL_XmTextRemove 4318 #define XCALL_XmTextReplace 4319 #define XCALL_XmTextScroll 4320 #define XCALL_XmTextSetAddMode 4321 #define XCALL_XmTextSetCursorPosition 4322 #define XCALL_XmTextSetEditable 4323 /* XmTextSetHighlight 4324 */ /* XCALL_XmTextSetInsertionPosition defined above */ #define XCALL_XmTextSetMaxLength 4326 /* XmTextSetSelection 4327 */ /* XmTextSetSource 4328 */ /* XCALL_XmTextSetString defined above */ #define XCALL_XmTextSetTopCharacter 4330 #define XCALL_XmTextShowPosition 4331 #define XCALL_XmTextXYToPos 4332 #if 0 /* should think about adding the following sometime, but */ /* they are not supported by the (SUNOS) 1.1.4a toolkit */ extern int XmTextGetSubstring() extern int XmTextGetSubstringWcs() extern wchar_t * XmTextGetStringWcs() extern void XmTextSetStringWcs() extern void XmTextReplaceWcs() extern void XmTextInsertWcs() extern wchar_t * XmTextGetSelectionWcs() extern void XmTextDisableRedisplay() extern void XmTextEnableRedisplay() extern Boolean XmTextFindString() extern Boolean XmTextFindStringWcs() #endif /* XmTextField widget 4350 */ /* XmTextFieldClearSelection 4350 */ /* XmTextFieldCopy 4351 */ /* XmTextFieldCut 4352 */ #define XCALL_XmTextFieldGetAddMode 4353 #define XCALL_XmTextFieldGetBaseline 4354 #define XCALL_XmTextFieldGetCursorPosition 4355 #define XCALL_XmTextFieldGetEditable 4356 #define XCALL_XmTextFieldGetInsertionPosition 4357 #define XCALL_XmTextFieldGetLastPosition 4358 #define XCALL_XmTextFieldGetMaxLength 4359 #define XCALL_XmTextFieldGetSelection 4360 /* XmTextFieldGetSelectionPosition 4361 */ #define XCALL_XmTextFieldGetString 4362 #define XCALL_XmTextFieldInsert 4363 #define XCALL_XmTextFieldPaste 4364 /* XmTextFieldPosToXY 4365 */ #define XCALL_XmTextFieldRemove 4366 #define XCALL_XmTextFieldReplace 4367 #define XCALL_XmTextFieldSetAddMode 4368 #define XCALL_XmTextFieldSetCursorPosition 4369 #define XCALL_XmTextFieldSetEditable 4370 /* XmTextFieldSetHighlight 4371 */ #define XCALL_XmTextFieldSetInsertionPosition 4372 #define XCALL_XmTextFieldSetMaxLength 4373 /* XmTextFieldSetSelection 4374 */ #define XCALL_XmTextFieldSetString 4375 #define XCALL_XmTextFieldShowPosition 4376 #define XCALL_XmTextFieldXYToPos 4377 #if 0 /* should think about adding the following sometime, but */ /* they are not supported by the (SUNOS) 1.1.4a toolkit */ extern int XmTextFieldGetSubstring() extern wchar_t * XmTextFieldGetStringWcs() extern int XmTextFieldGetSubstringWcs() extern void XmTextFieldSetStringWcs() extern void XmTextFieldReplaceWcs() extern void XmTextFieldInsertWcs() extern wchar_t * XmTextFieldGetSelectionWcs() #endif /* XmList widget 4400 */ #define XCALL_XmListAddItem 4400 #define XCALL_XmListAddItemUnselected 4401 #define XCALL_XmListAddItems 4402 #define XCALL_XmListDeleteAllItems 4403 #define XCALL_XmListDeleteItem 4404 #define XCALL_XmListDeleteItems 4405 #define XCALL_XmListDeletePos 4406 #define XCALL_XmListDeleteItemsPos 4407 #define XCALL_XmListDeselectAllItems 4408 #define XCALL_XmListDeselectItem 4409 #define XCALL_XmListDeselectPos 4410 #define XCALL_XmListGetMatchPos 4411 #define XCALL_XmListGetSelectedPos 4412 #define XCALL_XmListItemExists 4413 #define XCALL_XmListItemPos 4414 #define XCALL_XmListReplaceItems 4415 #define XCALL_XmListReplaceItemsPos 4416 #define XCALL_XmListSelectItem 4417 #define XCALL_XmListSelectPos 4418 #define XCALL_XmListSetAddMode 4419 #define XCALL_XmListSetBottomItem 4420 #define XCALL_XmListSetBottomPos 4421 #define XCALL_XmListSetHorizPos 4422 #define XCALL_XmListSetItem 4423 #define XCALL_XmListSetPos 4424 /* Added by DCJM. 23/3/01. */ #define XCALL_XmMenuPosition 4500 #if 0 /* Not supported by the SUNOS version of the tool-kit */ #define XCALL_XmListAddItemsUnselected #define XCALL_XmListDeletePositions #define XCALL_XmListGetKbdItemPos #define XCALL_XmListPosSelected #define XCALL_XmListReplaceItemsPosUnselected #define XCALL_XmListReplaceItemsPositions #define XCALL_XmListSetKbdItemPos #define XCALL_XmListUpdateSelectedList #define XCALL_XmListYToPos #define XCALL_XmListPosToBounds #endif polyml.5.2.1/libpolyml/xwindows.cpp0000644000175000017500000114614711051016234016374 0ustar daviddavid/* Title: X-Windows/Motif Interface. Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifdef _WIN32_WCE #include "winceconfig.h" #else #ifdef WIN32 #include "winconfig.h" #else #include "config.h" #endif #endif #if (defined(HAVE_LIBXM) && defined(HAVE_LIBXEXT) && defined(HAVE_LIBXT) && defined(HAVE_X11_XLIB_H) && defined(HAVE_XM_XM_H)) // Then we have enough for X-windows /* xwindows.c */ /* Removed indirection from get_C_* functions SPF 31/10/93 */ /* Added Handle type 2/11/93 */ /* Fixed "GetString can only be used once" bug 17/11/93 */ /* Dealing with gcc warning messages SPF 6/1/94 */ /* Retrofit to old Sun cc SPF 7/1/94 */ /* 25/1/94 SPF Fixed bug in EmptyVisual (core-dump when v==NULL) */ /* Comment added 4/11/93 SPF Global Invariants: (1) Get functions promise not to allocate on the Poly/ML heap (2) The Poly/ML heap contains pointers into the C heap! As these are only valid for one session, the run-time system records which Poly/ML objects have been created in the current session. Only these objects contain valid C pointers, and so may be dereferenced. The "bad" Poly/ML objects are: Flags Object Bad Field Access Function ----- ------ --------- --------------- M X_GC_Object GC *gc GetGC X_Font_Object Font *font GetFont ditto XFontStruct **fs GetFS X_Cursor_Object Cursor *cursor GetCursor BM X_Window_Object Drawable *drawable GetDrawable, GetPixmap X_Pixmap_Object Pixmap *pixmap GetDrawable, GetPixmap X_Colormap_Object Colormap *cmap GetColormap X_Visual_Object Visual **visual GetVisual (* FISHY *) B X_Display_Object Display *display (?) GetDisplay (?) ditto XtAppContext app_context NONE(?) M X_Widget_Object Widget *widget GetWidget, GetNWidget B X_Trans_Object XtTranslations table GetTrans B X_Acc_Object XtAccelerators acc GetAcc WARNING: the above list of unsafe fields was created by SPF and may be incomplete. The function CheckExists should be called on these objects before it is safe to use any of the above fields. That's because the object may have been created in a previous ML session, so the pointers that it contains may no longer be valid. Using the appropriate access function listed above guarantees that CheckExists is called. Exception: the fields can safely be tested against C's zero (None, Null) even if CheckExists hasn't been called. Note that this is only database-safe because this value is used for uninitialised fields, so it doesn't confuse the garbage-collector. For all the above fields EXCEPT display, app_context, table, acc the run-time system creates an indirection object in the Poly heap. These fields don't need an indirection object because the object which contains them is itself a BYTE object. This indirection is a byte-object. The indirection is necessary because the garbage collector would object to finding a C pointer in a standard ML labelled record. The alternative would be to store the C pointer as an ML integer, but then we would have to convert back to a C pointer befor we could dereference it. For similar reasons, eventMask is also stored as a boxed PolyWord. abstype Colormap = Colormap with end; (* X_Colormap_Object *) abstype Cursor = Cursor with end; (* X_Cursor_Object *) abstype Drawable = Drawable with end; (* X_Window_Object, XPixmap_Object *) abstype Font = Font with end; (* X_Font_Object *) abstype GC = GC with end; (* X_GC_Object *) abstype Visual = Visual with end; (* X_Visual_Object *) abstype Display = Display with end; (* X_Display_Object *) abstype Widget = Widget of int with end; abstype XtAccelerators = XtAccelerators of int with end; abstype XtTranslations = XtTranslations of int with end; */ /* MLXPoint, MLXRectangle, MLXArc, MLPair, MLTriple added 31/10/93 SPF */ #ifdef HAVE_STDIO_H #include #endif #ifdef HAVE_SYS_TYPES_H #include #endif #ifdef HAVE_SYS_TIME_H #include #endif #ifdef HAVE_SIGNAL_H #include #endif #ifdef HAVE_STDLIB_H #include #endif #ifdef HAVE_FCNTL_H #include #endif #ifdef HAVE_CTYPE_H #include #endif #ifdef HAVE_STDLIB_H #include #endif #ifdef HAVE_ASSERT_H #include #endif #ifdef HAVE_UNISTD_H #include #endif #ifdef HAVE_ALLOCA_H #include #endif /* what goes wrong? ... gid, fd, private15 inaccessible */ /* THIS NEEDS TO BE FIXED!!!! */ #define XLIB_ILLEGAL_ACCESS 1 /* We need access to some opaque structures */ /* use prototypes, but make sure we get Booleans, not ints */ #define NeedWidePrototypes 0 #include #include /* IsCursorKey, IsFunctionKey, et cetera */ #include /* needed for protocol names such as X_CreateWindow */ #include /* XA_ATOM, et cetera */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include /* Motif 1.2 */ #include /* for XmIsDesktopObject */ #include /* for XmIsExtObject */ #include /* for XmIsShellExt */ #include /* for XmIsVendorShellExt */ #include #if(0) /* for XmIsWorldObject */ /* This is not supported in FreeBSD or Solaris 8. */ #include #endif #include "globals.h" #include "sys.h" #include "xwindows.h" #include "run_time.h" #include "arb.h" #include "mpoly.h" #include "gc.h" #include "xcall_numbers.h" #include "diagnostics.h" #include "processes.h" #include "rts_module.h" #include "save_vec.h" #include "polystring.h" #include "scanaddrs.h" #include "memmgr.h" #include "machine_dep.h" #include "processes.h" #include "basicio.h" // For process_may_block. /* The following are only forward so we can declare attributes */ static void RaiseXWindows(TaskData *taskData, const char *s) __attribute__((noreturn)); #define ButtonClickMask (((unsigned)1 << 31)) #define XMASK(m) ((m) &~ButtonClickMask) #undef SIZEOF #define debug1(fmt,p1) { /*EMPTY*/ } #undef debug1 #define debug1(fmt,p1) {if (userOptions.debug & DEBUG_X) printf(fmt,p1);} #define debug3(fmt,p1,p2,p3) {if (userOptions.debug & DEBUG_X) printf(fmt,p1,p2,p3);} #define debugCreate(type,value) debug1("%lx " #type " created\n",(unsigned long)(value)) #define debugReclaim(type,value) debug1("%lx " #type " reclaimed\n",(unsigned long)(value)) #define debugReclaimRef(type,value) debug1("%lx " #type " reference reclaimed\n",(unsigned long)(value)) #define debugRefer(type,value) debug1("%lx " #type " referenced\n",(unsigned long)(value)) #define debugCreateCallback(MLValue,CValue,CListCell) debug3("%p Widget callback reference created (%p,%p)\n",CValue,CListCell,MLValue) #define debugReclaimCallback(MLValue,CValue,CListCell) debug3("%p Widget callback reference removed (%p,%p)\n",CValue,CListCell,MLValue) /* forward declarations */ static Atom WM_DELETE_WINDOW(Display *d); /* was int SPF 6/1/94 */ #define DEREFDISPLAYHANDLE(h) ((X_Display_Object *)DEREFHANDLE(h)) #define DEREFWINDOWHANDLE(h) ((X_Window_Object *)DEREFHANDLE(h)) #define DEREFXOBJECTHANDLE(h) ((X_Object *)DEREFHANDLE(h)) #define SAVE(x) taskData->saveVec.push(x) #define Make_int(x) Make_arbitrary_precision(taskData, x) #define Make_string(s) SAVE(C_string_to_Poly(taskData, s)) #define Make_bool(b) Make_unsigned(taskData, (b) != 0) #define SIZEOF(x) (sizeof(x)/sizeof(PolyWord)) #define min(a,b) (a < b ? a : b) #define max(a,b) (a > b ? a : b) #define ISNIL(p) (ML_Cons_Cell::IsNull(p)) #define NONNIL(p) (!ISNIL(p)) typedef Handle EventHandle; /********************************************************************************/ /* Objects are created MUTABLE and are FINISHED when all their fields have been */ /* filled in (assuming they are immutable objects). This is so that we can */ /* consider the possibility of storing immutable objects in read-only memory */ /* segments (not currently implemented). SPF 7/12/93 */ /********************************************************************************/ static Handle FINISHED(TaskData *taskData, Handle P) { PolyObject *pt = DEREFHANDLE(P); assert(taskData->saveVec.isValidHandle(P)); assert(pt->IsMutable()); POLYUNSIGNED lengthW = pt->LengthWord(); pt->SetLengthWord(lengthW & ~_OBJ_MUTABLE_BIT); return P; } static void RaiseXWindows(TaskData *taskData, const char *s) { if (gc_phase == 0) { raise_exception_string(taskData, EXC_XWindows,s); } else { /* Crash added 7/7/94 SPF */ Crash("Tried to raise exception (XWindows \"%s\") during garbage collection\n",s); } /*NOTREACHED*/ } /* bugfixed 6/12/94 SPF */ #define RaiseXWindows2(varmessage,constmessage) \ { \ const char message[] = constmessage; \ int n1 = strlen(varmessage); \ int n2 = strlen(message); \ char *mess = (char *)alloca(n1 + n2 + 1); \ strcat(strncpy(mess,varmessage,n1),message); \ RaiseXWindows(taskData, mess); \ /*NOTREACHED*/ \ } static void RaiseRange(TaskData *taskData) { raise_exception0(taskData, EXC_size); } typedef unsigned char uchar; static uchar get_C_uchar(TaskData *taskData, PolyWord a) { unsigned u = get_C_ushort(taskData, a); if (u >= 256) RaiseRange(taskData); return u; } /******************************************************************************/ /* */ /* String */ /* */ /******************************************************************************/ //#define String PolyStringObject //#define GetString(s) _GetString((PolyWord *)(s)) /* can only be called TABLESIZE times per X opcode */ static PolyStringObject *GetString(PolyWord s) { #define TABLESIZE 5 static PolyStringObject string[TABLESIZE]; static int index = 0; if (! s.IsTagged()) return (PolyStringObject *) s.AsObjPtr(); index = (index + 1) % TABLESIZE; string[index].length = 1; string[index].chars[0] = UNTAGGED(s); return &string[index]; #undef TABLESIZE } /******************************************************************************/ /* */ /* XObjects (Type definitions) */ /* */ /******************************************************************************/ /* We keep a list of all objects created by calls to X. */ /* When an object is created we add an entry to the list and */ /* return the entry. If the entry becomes inaccessible */ /* by the garbage collector then we free the object. */ /* The list is created by malloc so that it is not in the heap. */ // Types of objects. These are tagged when they are stored // in objects because some objects are not byte objects. typedef enum { X_GC = 111, X_Font = 222, X_Cursor = 333, X_Window = 444, X_Pixmap = 555, X_Colormap = 666, X_Visual = 777, X_Display = 888, X_Widget = 999, X_Trans = 1111, X_Acc = 2222 } X_types; class X_Object: public PolyObject { public: X_Object(): type(TAGGED(1)) {} // Just to keep gcc happy PolyWord type; }; class X_Trans_Object: public X_Object /* BYTE object */ { public: XtTranslations table; /* C value */ }; class X_Acc_Object: public X_Object /* BYTE object */ { public: XtAccelerators acc; /* C value */ }; class X_Display_Object: public X_Object /* BYTE object */ { public: Display *display; /* C value */ unsigned screen; /* C value */ XtAppContext app_context; /* C value */ } ; class X_Font_Object: public X_Object { public: Font *font; /* Token for C value */ XFontStruct **fs; /* Token for C value */ X_Display_Object *ds; /* Token */ } ; class X_Cursor_Object: public X_Object { public: Cursor *cursor; /* Token for C value */ X_Display_Object *ds; /* Token */ } ; class X_Pixmap_Object: public X_Object { public: Pixmap *pixmap; /* Token for C value */ X_Display_Object *ds; /* Token */ } ; class X_Colormap_Object: public X_Object { public: Colormap *cmap; /* Token for C value */ X_Display_Object *ds; /* Token */ } ; class X_Widget_Object: public X_Object /* MUTABLE */ { public: Widget *widget; /* Token for C value */ PolyWord callbackList; /* mutable */ PolyWord state; /* mutable */ X_Display_Object *ds; /* Token */ } ; class X_Visual_Object: public X_Object { public: Visual **visual; /* Token for C value */ X_Display_Object *ds; /* Token */ } ; class X_GC_Object: public X_Object /* MUTABLE */ { public: GC *gc; /* Token for C value */ X_Font_Object *font_object; /* mutable; may be 0 */ X_Pixmap_Object *tile; /* mutable; may be 0 */ X_Pixmap_Object *stipple; /* mutable; may be 0 */ X_Pixmap_Object *clipMask; /* mutable; may be 0 */ X_Display_Object *ds; /* Token */ } ; class X_Window_Struct: public X_Object /* MUTABLE */ { public: Drawable *drawable; /* Token for C value */ PolyWord handler; /* mutable? */ PolyWord state; /* mutable? */ PolyObject *eventMask; /* Token for C value; token itself is mutable */ X_Colormap_Object *colormap_object; /* mutable; may be 0 */ X_Cursor_Object *cursor_object; /* mutable; may be 0 */ X_Pixmap_Object *backgroundPixmap; /* mutable; may be 0 */ X_Pixmap_Object *borderPixmap; /* mutable; may be 0 */ X_Window_Struct *parent; /* may be 0 */ X_Display_Object *ds; /* Token */ }; typedef X_Window_Struct X_Window_Object; /******************************************************************************/ /* */ /* Forward declarations */ /* */ /******************************************************************************/ static Font GetFont(TaskData *taskData, X_Object *P); static Cursor GetCursor(TaskData *taskData,X_Object *P); static Colormap GetColormap(TaskData *taskData,X_Object *P); static Visual *GetVisual(TaskData *taskData,X_Object *P); static XtTranslations GetTrans(TaskData *taskData,X_Object *P); static XtAccelerators GetAcc(TaskData *taskData,X_Object *P); static Pixmap GetPixmap(TaskData *, X_Object *P); static Widget GetNWidget(TaskData *, X_Object *P); static Window GetWindow(TaskData *, X_Object *P); static Display *GetDisplay(TaskData *, X_Object *P); static void DestroyWindow(X_Object *W); static void DestroySubwindows(X_Object *W); static X_GC_Object *GCObject(X_Object *P); static X_Pixmap_Object *PixmapObject(X_Object *P); static X_Widget_Object *WidgetObject(TaskData *, X_Object *P); static X_Window_Object *WindowObject(X_Object *P); /******************************************************************************/ /* */ /* C lists (Type definitions) */ /* */ /******************************************************************************/ typedef struct X_List_struct X_List; struct X_List_struct { X_List *next; /* pointer into C heap */ X_Object *object; /* pointer into Poly heap; weak */ }; typedef struct timeval TimeVal; /* In C heap */ typedef struct T_List_struct T_List; struct T_List_struct { T_List *next; /* pointer into C heap */ TimeVal timeout; /* here */ X_Window_Object *window_object; /* pointer into Poly heap, or 0; weak */ X_Widget_Object *widget_object; /* pointer into Poly heap, or 0; strong */ PolyObject *alpha; /* pointer into Poly heap; strong */ PolyObject *handler; /* pointer into Poly heap; strong */ int expired; /* here */ }; /* NB precisely one of window_object and widget_object should be non-zero */ /* In C heap */ typedef struct C_List_struct C_List; struct C_List_struct { PolyObject *function; /* pointer into Poly heap; strong */ X_Widget_Object *widget_object; /* pointer into Poly heap; strong */ C_List *next; /* pointer into C heap */ }; /* lists of X objects currently in Poly heap i.e. those created in this session */ #define XLISTSIZE 1001 /* must be coprime to 4 ('cos pointers are PolyWord-aligned) */ static X_List *XList[XLISTSIZE] = {0}; static T_List *TList = 0; /* C pending messages list, ordered by arrival time */ static C_List *CList = 0; /* Acts as root for objects "owned" by C callbacks */ static PolyWord FList = TAGGED(0); /* ML Callback list - acts as a Root for the Heap */ static PolyWord GList = TAGGED(0); /* ML Event list - acts as a Root for the Heap */ static Bool callbacks_enabled = False; /******************************************************************************/ /* */ /* High-speed XList routines */ /* */ /******************************************************************************/ /* maps an (X_Object *) to an (unsigned); this mapping from must give the same */ /* (unsigned) for each (X_Object) for an entire Poly/ML session, even though its */ /* address may change at every garbage collection. */ /* The way we achieve this is by returning the address of the corresponding C */ /* object. Note that since the ML object doesn't necessarily correspond to a real*/ /* C object, this value may be neither valid nor sensible (but it WILL be a */ /* constant). */ /* Unfortunately, we can't do this for GCs or VISUALS, since the actual C object */ /* contains the id we want, and we can't access the id if we haven't got the */ /* object. For these, we return a constant instead. */ static unsigned long hashId(X_Object *P) { #define HASH_GC 0 #define HASH_VISUAL 1 switch(UNTAGGED(P->type)) { case X_GC: return HASH_GC; case X_Font: return (unsigned long)(*(((X_Font_Object*)P)->font)); case X_Cursor: return (unsigned long)(*(((X_Cursor_Object*)P)->cursor)); case X_Window: return (unsigned long)(*(((X_Window_Struct*)P)->drawable)); case X_Pixmap: return (unsigned long)(*(((X_Pixmap_Object*)P)->pixmap)); case X_Colormap: return (unsigned long)(*(((X_Colormap_Object*)P)->cmap)); case X_Visual: return HASH_VISUAL; case X_Display: return (unsigned long)(((X_Display_Object*)P)->display); case X_Widget: return (unsigned long)(*(((X_Widget_Object*)P)->widget)); case X_Trans: return (unsigned long)(((X_Trans_Object*)P)->table); case X_Acc: return (unsigned long)(((X_Acc_Object*)P)->acc); default: Crash ("Bad X_Object type (%d) in hashId",UNTAGGED(P->type)); } /*NOTREACHED*/ } static void initXList(void) { int i; for (i = 0; i < XLISTSIZE; i++) { XList[i] = NULL; } } static X_List **hashXList(X_Object *P) { unsigned long id = hashId(P); unsigned n = (id % XLISTSIZE); /* a poor hash function, but good enough for now */ return &(XList[n]); } static X_List *findXList(unsigned long id) { unsigned n = (id % XLISTSIZE); /* a poor hash function, but good enough for now */ return XList[n]; } /******************************************************************************/ /* */ /* C lists (Polymorphic functions) */ /* */ /******************************************************************************/ // Creates a list from a vector of items. static Handle CreateList4(TaskData *taskData, unsigned n, void *p, unsigned objSize, Handle (*f)(TaskData *, void *)) { Handle saved = taskData->saveVec.mark(); Handle list = SAVE(ListNull); // Process the vector in reverse order. That way we can make the // cells as immutable objects rather than having to create them as // mutable and then lock them. while (n) { n--; byte *objP = (byte*)p + objSize*n; Handle value = (* f)(taskData, objP); Handle next = alloc_and_save(taskData, SIZEOF(ML_Cons_Cell)); DEREFLISTHANDLE(next)->h = DEREFWORDHANDLE(value); DEREFLISTHANDLE(next)->t = DEREFLISTHANDLE(list); /* reset save vector to stop it overflowing */ taskData->saveVec.reset(saved); list = SAVE(DEREFHANDLE(next)); } return list; } static Handle CreateList4I(TaskData *taskData, unsigned n, void *p, unsigned objSize, Handle (*f)(TaskData *, void *, unsigned i)) { Handle saved = taskData->saveVec.mark(); Handle list = SAVE(ListNull); while (n) { n--; byte *objP = (byte*)p + objSize*n; Handle value = (* f)(taskData, objP, n); Handle next = alloc_and_save(taskData, SIZEOF(ML_Cons_Cell)); DEREFLISTHANDLE(next)->h = DEREFWORDHANDLE(value); DEREFLISTHANDLE(next)->t = DEREFLISTHANDLE(list); /* reset save vector to stop it overflowing */ taskData->saveVec.reset(saved); list = SAVE(DEREFHANDLE(next)); } return list; } static Handle CreateList5(TaskData *taskData, POLYUNSIGNED n, void *p, POLYUNSIGNED objSize, Handle (*f)(TaskData *, void *, Handle), Handle a1) { Handle saved = taskData->saveVec.mark(); Handle list = SAVE(ListNull); // Process the vector in reverse order. That way we can make the // cells as immutable objects rather than having to create them as // mutable and then lock them. while (n) { n--; byte *objP = (byte*)p + objSize*n; Handle value = (* f)(taskData, objP, a1); Handle next = alloc_and_save(taskData, SIZEOF(ML_Cons_Cell)); DEREFLISTHANDLE(next)->h = DEREFWORDHANDLE(value); DEREFLISTHANDLE(next)->t = DEREFLISTHANDLE(list); /* reset save vector to stop it overflowing */ taskData->saveVec.reset(saved); list = SAVE(DEREFHANDLE(next)); } return list; } static void GetList4(TaskData *taskData, PolyWord list, void *v, unsigned bytes, void (*get)(TaskData *, PolyWord, void*, unsigned)) { unsigned i = 0; byte *s = (byte*)v; for(PolyWord p = list; NONNIL(p); p = ((ML_Cons_Cell*)p.AsObjPtr())->t) { (* get)(taskData, ((ML_Cons_Cell*)p.AsObjPtr())->h, s, i); s += bytes; i++; } } /* ListLength no longer requires indirection via handle SPF 4/11/93 */ static unsigned ListLength(PolyWord list) { unsigned n = 0; for(PolyWord p = list; NONNIL(p); p = ((ML_Cons_Cell*)p.AsObjPtr())->t) n++; return n; } /******************************************************************************/ /* */ /* TList Purge Functions (SPF 29/11/93) */ /* */ /******************************************************************************/ static void PurgePendingWidgetMessages(X_Widget_Object *P) { T_List **T = &TList; while(*T) { T_List *t = *T; if (t->widget_object == P) /* clear out pending messages for this widget */ { *T = t->next; free(t); } else T = &t->next; } } static void PurgePendingWindowMessages(X_Window_Object *P) { T_List **T = &TList; while(*T) { T_List *t = *T; if (t->window_object == P) /* clear out pending messages for this window */ { *T = t->next; free(t); } else T = &t->next; } } /******************************************************************************/ /* */ /* CList Purge Functions (SPF 29/2/96) */ /* */ /******************************************************************************/ static void PurgeCCallbacks(X_Widget_Object *P, Widget w) { C_List **C = &CList; while(*C) { C_List *c = *C; if (c->widget_object == P) /* clear out callback info for this widget */ { debugReclaimCallback(P,w,c); *C = c->next; free(c); } else C = &c->next; } } /******************************************************************************/ /* */ /* XObjects (Polymorphic functions 1) */ /* */ /******************************************************************************/ static int ResourceExists(X_Object *P) { X_List *L; for(L = *hashXList(P); L; L = L->next) { if (L->object == P) return 1; } return 0; } /* SafeResourceExists is like ResourceExists but doesn't assume that we actually have a valid X object, so it doesn't use hashing. SPF 6/4/95 */ static int SafeResourceExists(X_Object *P) { unsigned n; for (n = 0; n < XLISTSIZE; n++) { X_List *L; for(L = XList[n]; L; L = L->next) { if (L->object == P) return 1; } } return 0; } static void DestroyXObject(X_Object *P) { TaskData *taskData = processes->GetTaskDataForThread(); X_List **X = hashXList(P); switch(UNTAGGED(P->type)) { case X_GC: { X_GC_Object *G = GCObject(P); GC gc = *G->gc; Display *d = G->ds->display; if (gc == DefaultGC(d,G->ds->screen)) { debugReclaimRef(GC,gc->gid); } else { debugReclaim(GC,gc->gid); XFreeGC(d,gc); /* SAFE(?) */ } break; } case X_Font: { Font f = GetFont(taskData, P); if (f == None) { debugReclaimRef(Font,f); } else { debugReclaim(Font,f); #if NEVER XUnloadFont(GetDisplay(taskData, P),f); #endif } break; } case X_Cursor: { Cursor cursor = GetCursor(taskData, P); if (cursor == None) { debugReclaimRef(Cursor,cursor); } else { debugReclaim(Cursor,cursor); #if NEVER XFreeCursor(GetDisplay(taskData, P),cursor); #endif } break; } case X_Window: { /* added 29/11/93 SPF */ PurgePendingWindowMessages(WindowObject(P)); if (((X_Window_Object *)P)->parent != 0) /* this clients window */ { debugReclaim(Window,GetWindow(taskData, P)); DestroyWindow(P); } else /* None, ParentRelative, and other clients windows */ { debugReclaimRef(Window,GetWindow(taskData, P)); } break; } case X_Pixmap: { Pixmap pixmap = GetPixmap(taskData, P); if (pixmap == None) { debugReclaimRef(Pixmap,pixmap); } else { debugReclaim(Pixmap,pixmap); #if NEVER XFreePixmap(GetDisplay(taskData, P),pixmap); #endif } break; } case X_Colormap: { Colormap cmap = GetColormap(taskData, P); if (cmap == None) { debugReclaimRef(Colormap,cmap); } else { debugReclaim(Colormap,cmap); #if NEVER XFreeColormap(GetDisplay(taskData, P),cmap); #endif } break; } case X_Visual: { Visual *visual = GetVisual(taskData, P); debugReclaimRef(Visual,visual->visualid); break; } case X_Widget: { Widget widget = GetNWidget(taskData, P); PurgePendingWidgetMessages(WidgetObject(taskData, P)); debugReclaimRef(Widget,widget); break; } case X_Trans: { XtTranslations table = GetTrans(taskData, P); debugReclaimRef(Trans,table); break; } case X_Acc: { XtAccelerators acc = GetAcc(taskData, (X_Object *)P); debugReclaimRef(Acc,acc); break; } default: Crash ("Unknown X_Object type %d",UNTAGGED(P->type)); } while(*X) { X_List *L = *X; if (L->object == P) { *X = L->next; free(L); return; } else X = &L->next; } printf("DestroyXObject: destroy failed\n"); } #define CheckExists(P,resource) \ {\ if (! ResourceExists(P)) RaiseXWindows(taskData, (char*) "Non-existent " #resource); \ } static X_Font_Object *FontObject(X_Object *P) { assert(UNTAGGED(P->type) == X_Font); return (X_Font_Object *)P; } static X_Object *FindResource ( Handle dsHandle, /* Handle to (X_Display_Object *) */ X_types type, unsigned long id, unsigned long hashid ) { X_List *L; X_Display_Object *d = (type == X_Widget) ? NULL : DEREFDISPLAYHANDLE(dsHandle); for(L = findXList(hashid); L; L = L->next) { X_Object *P = L->object; if (UNTAGGED(P->type) == type) { switch(type) { case X_GC: if (((X_GC_Object*)P)->ds == d && (*((X_GC_Object*)P)->gc)->gid == id) return P; break; case X_Font: if (((X_Font_Object*)P)->ds == d && (*((X_Font_Object*)P)->font) == id) return P; break; case X_Cursor: if (((X_Cursor_Object*)P)->ds == d && (*((X_Cursor_Object*)P)->cursor) == id) return P; break; case X_Window: if (((X_Window_Object*)P)->ds == d && (*((X_Window_Object*)P)->drawable) == id) return P; break; case X_Pixmap: if (((X_Pixmap_Object*)P)->ds == d && (*((X_Pixmap_Object*)P)->pixmap) == id) return P; break; case X_Colormap: if (((X_Colormap_Object*)P)->ds == d && (*((X_Colormap_Object*)P)->cmap) == id) return P; break; case X_Visual: if (((X_Visual_Object*)P)->ds == d && (*((X_Visual_Object*)P)->visual)->visualid == id) return P; break; case X_Widget: if (*(((X_Widget_Object*)P)->widget) == (Widget) id) return P; break; case X_Display: break; case X_Trans: break; case X_Acc: break; default: Crash ("Bad X_Object type (%d) in FindResource", type); } } } return 0; } // Why are there these casts to unsigned here???? #define FindWindow(d,id) ((X_Window_Object *) FindResource(d,X_Window,(unsigned long)id,(unsigned long)id)) #define FindPixmap(d,id) ((X_Pixmap_Object *) FindResource(d,X_Pixmap,(unsigned long)id,(unsigned long)id)) #define FindCursor(d,id) ((X_Cursor_Object *) FindResource(d,X_Cursor,(unsigned long)id,(unsigned long)id)) #define FindFont(d,id) ((X_Font_Object *) FindResource(d,X_Font,(unsigned long)id,(unsigned long)id)) #define FindColormap(d,id) ((X_Colormap_Object *) FindResource(d,X_Colormap,(unsigned long)id,(unsigned long)id)) #define FindWidget(id) ((X_Widget_Object *) FindResource((Handle)NULL,X_Widget,(unsigned long)id,(unsigned long)id)) /* can't use id for hashing in the following, so use arbitrary values instead */ #define FindGC(d,id) ((X_GC_Object *) FindResource(d,X_GC,(unsigned long)id,HASH_GC)) #define FindVisual(d,id) ((X_Visual_Object *) FindResource(d,X_Visual,(unsigned long)id,HASH_VISUAL)) static Handle AddXObject(Handle objectHandle) { X_List **X = hashXList(DEREFXOBJECTHANDLE(objectHandle)); X_List *L = (X_List *) malloc(sizeof(X_List)); L->next = *X; L->object = (X_Object *)DEREFHANDLE(objectHandle); *X = L; return objectHandle; } /******************************************************************************/ /* */ /* MLXPoint - implements ML XPoint datatype */ /* */ /******************************************************************************/ typedef struct /* depends on XPoint datatype + ML compiler hash function */ { PolyWord x; /* ML int */ PolyWord y; /* ML int */ } MLXPoint; inline MLXPoint * Point(PolyWord p) { return (MLXPoint *) p.AsObjPtr(); } /* shouldn't these be long values? */ inline short GetPointX(TaskData *taskData, PolyWord p) { return get_C_short(taskData, Point(p)->x); } inline short GetPointY(TaskData *taskData, PolyWord p) { return get_C_short(taskData, Point(p)->y); } inline short GetOffsetX(TaskData *taskData, PolyWord p) { return get_C_ushort(taskData, Point(p)->x); } inline short GetOffsetY(TaskData *taskData, PolyWord p) { return get_C_ushort(taskData, Point(p)->y); } static Handle CreatePoint(TaskData *taskData, int x, int y) { Handle pointHandle = alloc_and_save(taskData, SIZEOF(MLXPoint), F_MUTABLE_BIT); /* Still allocating, so must use explicit DEREF for each element */ #define point ((MLXPoint *)DEREFHANDLE(pointHandle)) point->x = DEREFWORD(Make_int(x)); point->y = DEREFWORD(Make_int(y)); #undef point return FINISHED(taskData, pointHandle); } static void GetPoints(TaskData *taskData, PolyWord p, void *v, unsigned) { XPoint *A = (XPoint *)v; A->x = GetPointX(taskData, p); A->y = GetPointY(taskData, p); } /******************************************************************************/ /* */ /* MLXRectangle - implements ML XRectangle datatype */ /* */ /******************************************************************************/ typedef struct /* depends on XRectangle datatype + ML compiler hash function */ { PolyWord top; /* ML int */ PolyWord left; /* ML int */ PolyWord right; /* ML int */ PolyWord bottom; /* ML int */ } MLXRectangle; inline MLXRectangle *Rect(PolyWord R) { return (MLXRectangle *) R.AsObjPtr(); } inline short GetRectTop(TaskData *taskData, PolyWord R) { return get_C_short(taskData, Rect(R)->top); } inline short GetRectLeft(TaskData *taskData, PolyWord R) { return get_C_short(taskData, Rect(R)->left); } inline short GetRectRight(TaskData *taskData, PolyWord R) { return get_C_short(taskData, Rect(R)->right); } inline short GetRectBottom(TaskData *taskData, PolyWord R) { return get_C_short(taskData, Rect(R)->bottom); } #define GetRectX(taskData, R) GetRectLeft(taskData, R) #define GetRectY(taskData, R) GetRectTop(taskData, R) /* functions added 29/10/93 SPF */ static unsigned GetRectW(TaskData *taskData, PolyWord R) { long result = GetRectRight(taskData, R) - GetRectLeft(taskData, R); if (result < 0) RaiseRange(taskData); return (unsigned)result; } static unsigned GetRectH(TaskData *taskData, PolyWord R) { long result = GetRectBottom(taskData, R) - GetRectTop(taskData, R); if (result < 0) RaiseRange(taskData); return (unsigned)result; } /* static MLXRectangle **CreateRect(top,left,bottom,right) */ static Handle CreateRect(TaskData *taskData, int top, int left, int bottom, int right) { Handle rectHandle = alloc_and_save(taskData, SIZEOF(MLXRectangle), F_MUTABLE_BIT); /* Still allocating, so must use explicit DEREF for each element */ #define rect ((MLXRectangle *)DEREFHANDLE(rectHandle)) rect->top = DEREFWORD(Make_int(top)); rect->left = DEREFWORD(Make_int(left)); rect->right = DEREFWORD(Make_int(right)); rect->bottom = DEREFWORD(Make_int(bottom)); #undef rect return FINISHED(taskData, rectHandle); } #define CreateArea(w,h) CreateRect(taskData, 0,0,(int)h,(int)w) static void GetRects(TaskData *taskData, PolyWord p, void *v, unsigned) { XRectangle *A = (XRectangle *)v; A->x = GetRectX(taskData, p); A->y = GetRectY(taskData, p); A->width = GetRectW(taskData, p); A->height = GetRectH(taskData, p); } static void CheckZeroRect(TaskData *taskData, PolyWord R) { unsigned x = GetRectX(taskData, R); unsigned y = GetRectY(taskData, R); unsigned w = GetRectW(taskData, R); unsigned h = GetRectH(taskData, R); if (x != 0 || y != 0 || /* w <= 0 || h <= 0 || w,h now unsigned SPF 29/10/93 */ w == 0 || h == 0 || w > 65535 || h > 65535) RaiseRange(taskData); } /******************************************************************************/ /* */ /* MLXArc - implements ML XArc datatype */ /* */ /******************************************************************************/ /* MLXArc added 31/10/93 SPF; depends on ML XArc datatype */ typedef struct { PolyWord r; /* MMLXRectangle* */ PolyWord a1; /* ML int */ PolyWord a2; /* ML int */ } MLXArc; inline MLXArc *Arc(PolyWord A) { return (MLXArc *) A.AsObjPtr(); } inline PolyWord GetArcR(PolyWord A) { return Arc(A)->r; } inline short GetArcA1(TaskData *taskData, PolyWord A) { return get_C_short(taskData, Arc(A)->a1); } inline short GetArcA2(TaskData *taskData, PolyWord A) { return get_C_short(taskData, Arc(A)->a2); } static void GetArcs(TaskData *taskData, PolyWord p, void *v, unsigned) { XArc *A = (XArc *)v; A->x = GetRectX(taskData, GetArcR(p)); A->y = GetRectY(taskData, GetArcR(p)); A->width = GetRectW(taskData, GetArcR(p)); A->height = GetRectH(taskData, GetArcR(p)); A->angle1 = GetArcA1(taskData, p); A->angle2 = GetArcA2(taskData, p); } /******************************************************************************/ /* */ /* Colormap */ /* */ /******************************************************************************/ static X_Colormap_Object *ColormapObject(X_Object *P) { assert(UNTAGGED(P->type) == X_Colormap); return (X_Colormap_Object *)P; } static Colormap GetColormap(TaskData *taskData, X_Object *P) { assert(UNTAGGED(P->type) == X_Colormap); /* val NoColormap = xcall (23,0) : Colormap; */ /* special case for NoColormap - correct(?) */ if ( *(((X_Colormap_Object *)P)->cmap) == None) return None; CheckExists(P,colormap); return *(((X_Colormap_Object *)P)->cmap); } static Handle EmptyColormap ( TaskData *taskData, Handle dsHandle /* Handle to (X_Display_Object *) */, Colormap id ) { X_Colormap_Object *E = FindColormap(dsHandle,id); if (E) { return SAVE(E); } else { Handle objectHandle = alloc_and_save(taskData, SIZEOF(X_Colormap_Object), F_MUTABLE_BIT); Handle cmapHandle = alloc_and_save(taskData, 1, F_MUTABLE_BIT | F_BYTE_OBJ); /* Must do all allocations before we do the first dereference */ X_Colormap_Object *object = (X_Colormap_Object *)DEREFHANDLE(objectHandle); Colormap *cmap = (Colormap *)DEREFHANDLE(cmapHandle); *cmap = id; FINISHED(taskData, cmapHandle); object->type = TAGGED(X_Colormap); object->cmap = cmap; object->ds = DEREFDISPLAYHANDLE(dsHandle); debugRefer(Colormap,id); return AddXObject(FINISHED(taskData, objectHandle)); } } /******************************************************************************/ /* */ /* Visual */ /* */ /******************************************************************************/ static Visual *GetVisual(TaskData *taskData, X_Object *P) { static Visual EMPTYVISUAL = { 0 }; assert(UNTAGGED(P->type) == X_Visual); /* val NoVisual = xcall (24,0) : Visual; */ /* special case for NoVisual */ if (*(((X_Visual_Object *)P)->visual) == None) return &EMPTYVISUAL; /* FISHY (?) */ CheckExists(P,visual); return *(((X_Visual_Object *)P)->visual); } static Handle EmptyVisual ( TaskData *taskData, Handle dsHandle, /* Handle to (X_Display_Object *) */ Visual *v ) { if (v != None) { X_Visual_Object *E = FindVisual(dsHandle,v->visualid); if (E) return SAVE(E); } /* else */ { Handle objectHandle = alloc_and_save(taskData, SIZEOF(X_Visual_Object), F_MUTABLE_BIT); Handle visualHandle = alloc_and_save(taskData, 1, F_MUTABLE_BIT|F_BYTE_OBJ); /* Must do all allocations before we do the first dereference */ X_Visual_Object *object = (X_Visual_Object *)DEREFHANDLE(objectHandle); Visual **visual = (Visual **)DEREFHANDLE(visualHandle); *visual = v; FINISHED(taskData, visualHandle); object->type = TAGGED(X_Visual); object->visual = visual; object->ds = DEREFDISPLAYHANDLE(dsHandle); debugRefer(Visual,(v == None) ? None : v->visualid); return AddXObject(FINISHED(taskData, objectHandle)); } } /******************************************************************************/ /* */ /* GC */ /* */ /******************************************************************************/ static X_GC_Object *GCObject(X_Object *P) { assert(UNTAGGED(P->type) == X_GC); return (X_GC_Object *)P; } static GC GetGC(TaskData *taskData, X_Object *P) { assert(UNTAGGED(P->type) == X_GC); CheckExists(P,gc); return *(((X_GC_Object *)P)->gc); } static Handle GetDefaultGC(TaskData *taskData, Handle dsHandle /* Handle to (X_Display_Object *) */) { GC defaultGC = DefaultGC(DEREFDISPLAYHANDLE(dsHandle)->display, DEREFDISPLAYHANDLE(dsHandle)->screen); X_GC_Object *G = FindGC(dsHandle,defaultGC->gid); if (G) { return SAVE(G); } else { Handle objectHandle = alloc_and_save(taskData, SIZEOF(X_GC_Object), F_MUTABLE_BIT); Handle GCHandle = alloc_and_save(taskData, 1, F_MUTABLE_BIT|F_BYTE_OBJ); /* Must do all allocations before we do the first dereference */ X_GC_Object *object = (X_GC_Object *)DEREFHANDLE(objectHandle); GC *gc = (GC *)DEREFHANDLE(GCHandle); *gc = defaultGC; FINISHED(taskData, GCHandle); debugRefer(GC,defaultGC->gid); object->type = TAGGED(X_GC); object->gc = gc; object->ds = DEREFDISPLAYHANDLE(dsHandle); /* object->font_object = 0; object->tile = 0; object->stipple = 0; object->clipMask = 0; */ return AddXObject(objectHandle); /* must stay MUTABLE */ } } static void ChangeGC(TaskData *taskData, X_GC_Object *G, unsigned n, PolyWord P) { XGCValues v; unsigned mask = 1 << n; switch(mask) { case GCFunction: v.function = get_C_ushort(taskData, P); break; case GCPlaneMask: v.plane_mask = get_C_ulong (taskData, P); break; case GCForeground: v.foreground = get_C_ulong (taskData, P); break; case GCBackground: v.background = get_C_ulong (taskData, P); break; case GCLineWidth: v.line_width = get_C_short (taskData, P); break; case GCLineStyle: v.line_style = get_C_ushort(taskData, P); break; case GCCapStyle: v.cap_style = get_C_ushort(taskData, P); break; case GCJoinStyle: v.join_style = get_C_ushort(taskData, P); break; case GCFillStyle: v.fill_style = get_C_ushort(taskData, P); break; case GCFillRule: v.fill_rule = get_C_ushort(taskData, P); break; case GCTileStipXOrigin: v.ts_x_origin = get_C_short (taskData, P); break; case GCTileStipYOrigin: v.ts_y_origin = get_C_short (taskData, P); break; case GCSubwindowMode: v.subwindow_mode = get_C_ushort(taskData, P); break; case GCGraphicsExposures: v.graphics_exposures = get_C_ushort(taskData, P); break; case GCClipXOrigin: v.clip_x_origin = get_C_short (taskData, P); break; case GCClipYOrigin: v.clip_y_origin = get_C_short (taskData, P); break; case GCDashOffset: v.dash_offset = get_C_ushort(taskData, P); break; case GCDashList: v.dashes = get_C_uchar (taskData, P); break; case GCArcMode: v.arc_mode = get_C_ushort(taskData, P); break; case GCFont: v.font = GetFont(taskData, (X_Object *)P.AsObjPtr()); G->font_object = FontObject((X_Object *)P.AsObjPtr()); break; case GCTile: v.tile = GetPixmap(taskData, (X_Object *)P.AsObjPtr()); G->tile = PixmapObject((X_Object *)P.AsObjPtr()); break; case GCStipple: v.stipple = GetPixmap(taskData, (X_Object *)P.AsObjPtr()); G->stipple = PixmapObject((X_Object *)P.AsObjPtr()); break; case GCClipMask: v.clip_mask = GetPixmap(taskData, (X_Object *)P.AsObjPtr()); G->clipMask = PixmapObject((X_Object *)P.AsObjPtr()); break; default: Crash ("Bad gc mask %u",mask); } XChangeGC(GetDisplay(taskData, (X_Object *)G),GetGC(taskData, (X_Object *)G),mask,&v); } static Handle CreateGC ( TaskData *taskData, Handle dsHandle /* Handle to (X_Display_Object *) */, Drawable w ) { Handle objectHandle = alloc_and_save(taskData, SIZEOF(X_GC_Object), F_MUTABLE_BIT); Handle GCHandle = alloc_and_save(taskData, 1, F_MUTABLE_BIT|F_BYTE_OBJ); /* Must do all allocations before we do the first dereference */ X_GC_Object *object = (X_GC_Object *)DEREFHANDLE(objectHandle); GC *gc = (GC *)DEREFHANDLE(GCHandle); *gc = XCreateGC(DEREFDISPLAYHANDLE(dsHandle)->display,w,0,0); FINISHED(taskData, GCHandle); debugCreate(GC,(*gc)->gid); object->type = TAGGED(X_GC); object->gc = gc; object->ds = DEREFDISPLAYHANDLE(dsHandle); /* object->font_object = 0; object->tile = 0; object->stipple = 0; object->clipMask = 0; */ return AddXObject(objectHandle); /* must remain MUTABLE */ } /******************************************************************************/ /* */ /* Window */ /* */ /******************************************************************************/ static X_Window_Object *WindowObject(X_Object *P) { assert(UNTAGGED(P->type) == X_Window); return (X_Window_Object *)P; } static Window GetWindow(TaskData *taskData, X_Object *P) { if (UNTAGGED(P->type) == X_Pixmap) { if (*((X_Pixmap_Object*)P)->pixmap == None) return None; RaiseXWindows(taskData, "Not a window"); } assert(UNTAGGED(P->type) == X_Window); CheckExists(P,window); return *(((X_Window_Object*)P)->drawable); } static Handle EmptyWindow ( TaskData *taskData, Handle dsHandle, /* Handle to (X_Display_Object *) */ Window w ) { X_Window_Object *W = FindWindow(dsHandle,w); if (W) { return SAVE(W); } else { Handle objectHandle = alloc_and_save(taskData, SIZEOF(X_Window_Object), F_MUTABLE_BIT); Handle eventMaskHandle = alloc_and_save(taskData, 1, F_MUTABLE_BIT|F_BYTE_OBJ); Handle drawableHandle = alloc_and_save(taskData, 1, F_MUTABLE_BIT|F_BYTE_OBJ); /* Must do all allocations before we do the first dereference */ X_Window_Object *object = DEREFWINDOWHANDLE(objectHandle); Drawable *drawable = (Drawable *)DEREFHANDLE(drawableHandle); PolyObject *eventMask = DEREFHANDLE(eventMaskHandle); *drawable = w; FINISHED(taskData, drawableHandle); #ifdef nodef /* DCJM: This gets in the way of trying to handle ButtonPress events - get rid of it. */ /* so that Motif windows get ButtonClick XEvent structures */ eventMask->Set(0, PolyWord::FromUnsigned(ButtonClickMask)); /* eventMask must remain MUTABLE */ #else eventMask->Set(0, PolyWord::FromUnsigned(0)); #endif object->type = TAGGED(X_Window); object->drawable = drawable; object->handler = TAGGED(0); object->state = TAGGED(0); object->eventMask = eventMask; /* object->colormap_object = 0; object->cursor_object = 0; object->backgroundPixmap = 0; object->borderPixmap = 0; object->parent = 0; */ object->ds = DEREFDISPLAYHANDLE(dsHandle); debugRefer(Window,w); return AddXObject(objectHandle); /* must remain MUTABLE */ } } /******************************************************************************/ /* */ /* Pixmap */ /* */ /******************************************************************************/ static X_Pixmap_Object *PixmapObject(X_Object *P) { assert(UNTAGGED(P->type) == X_Pixmap); return (X_Pixmap_Object *)P; } static Pixmap GetPixmap(TaskData *taskData, X_Object *P) { if (UNTAGGED(P->type) == X_Window) { if (! ResourceExists(P)) { debug1("Non-existent window %lx\n",(long)P); } if (*(((X_Window_Object*)P)->drawable) == None) return None; RaiseXWindows(taskData, "Not a pixmap"); } assert(UNTAGGED(P->type) == X_Pixmap); /* val NoDrawable = xcall (20,0) : Drawable; */ /* val ParentRelative = xcall (20,1) : Drawable; */ /* special case for NoDrawable */ if (*((X_Pixmap_Object*)P)->pixmap == 0) return None; /* special case for ParentRelative */ if (*((X_Pixmap_Object*)P)->pixmap == 1) return None; CheckExists(P,pixmap); return *(((X_Pixmap_Object*)P)->pixmap); } static Handle EmptyPixmap ( TaskData *taskData, Handle dsHandle, /* Handle to (X_Display_Object *) */ Pixmap id ) { X_Pixmap_Object *E = FindPixmap(dsHandle,id); if (E) { return SAVE(E); } else { Handle objectHandle = alloc_and_save(taskData, SIZEOF(X_Pixmap_Object), F_MUTABLE_BIT); Handle pixmapHandle = alloc_and_save(taskData, 1, F_MUTABLE_BIT|F_BYTE_OBJ); /* Must do all allocations before we do the first dereference */ X_Pixmap_Object *object = (X_Pixmap_Object *)DEREFHANDLE(objectHandle); Pixmap *pixmap = (Pixmap *)DEREFHANDLE(pixmapHandle); *pixmap = id; FINISHED(taskData, pixmapHandle); object->type = TAGGED(X_Pixmap); object->pixmap = pixmap; object->ds = DEREFDISPLAYHANDLE(dsHandle); debugCreate(Pixmap,id); return AddXObject(FINISHED(taskData, objectHandle)); } } /******************************************************************************/ /* */ /* Drawable */ /* */ /******************************************************************************/ static Drawable GetDrawable(TaskData *taskData, X_Object *P) { CheckExists(P,drawable); switch(UNTAGGED(P->type)) { case X_Window: return *(((X_Window_Object*)P)->drawable); case X_Pixmap: return *(((X_Pixmap_Object*)P)->pixmap); default: Crash ("Bad X_Object type (%d) in GetDrawable",UNTAGGED(P->type)); } /*NOTREACHED*/ } /******************************************************************************/ /* */ /* DS / Display */ /* */ /******************************************************************************/ static Handle GetDS(TaskData *taskData, X_Object *P) { X_Display_Object *ds; CheckExists(P,resource); switch(UNTAGGED(P->type)) { case X_GC: ds = ((X_GC_Object*)P)->ds; break; case X_Font: ds = ((X_Font_Object*)P)->ds; break; case X_Cursor: ds = ((X_Cursor_Object*)P)->ds; break; case X_Window: ds = ((X_Window_Object*)P)->ds; break; case X_Pixmap: ds = ((X_Pixmap_Object*)P)->ds; break; case X_Colormap: ds = ((X_Colormap_Object*)P)->ds; break; case X_Visual: ds = ((X_Visual_Object*)P)->ds; break; case X_Widget: ds = ((X_Widget_Object*)P)->ds; break; case X_Display: ds = (X_Display_Object*)P; break; /* i.e. P cast to the right type */ default: Crash ("Bad X_Object type (%d) in GetDS",UNTAGGED(P->type)); } assert((PolyWord)ds != TAGGED(0)); return SAVE(ds); } static Display *GetDisplay(TaskData *taskData, X_Object *P) { CheckExists(P,resource); switch(UNTAGGED(P->type)) { case X_GC: return ((X_GC_Object*)P)->ds->display; case X_Font: return ((X_Font_Object*)P)->ds->display; case X_Cursor: return ((X_Cursor_Object*)P)->ds->display; case X_Window: return ((X_Window_Object*)P)->ds->display; case X_Pixmap: return ((X_Pixmap_Object*)P)->ds->display; case X_Colormap: return ((X_Colormap_Object*)P)->ds->display; case X_Visual: return ((X_Visual_Object*)P)->ds->display; case X_Widget: return ((X_Widget_Object*)P)->ds->display; case X_Display: return ((X_Display_Object*)P)->display; default: Crash ("Bad X_Object type (%d) in GetDisplay",UNTAGGED(P->type)); } /*NOTREACHED*/ } /******************************************************************************/ /* */ /* FS / Font */ /* */ /******************************************************************************/ static Font GetFont(TaskData *taskData, X_Object *P) { assert(UNTAGGED(P->type) == X_Font); /* val NoFont = xcall (22,0) : Font; */ /* special case for NoFont - valid(?) */ if (*(((X_Font_Object *)P)->font) == None) return None; CheckExists(P,font); return *(((X_Font_Object *)P)->font); } static Handle EmptyFont ( TaskData *taskData, Handle dsHandle, /* Handle to (X_Display_Object *) */ Font id, XFontStruct *fs ) { X_Font_Object *E = FindFont(dsHandle,id); if (E && (fs == NULL || *(E->fs) == fs)) { return SAVE(E); } else { Handle objectHandle = alloc_and_save(taskData, SIZEOF(X_Font_Object), F_MUTABLE_BIT); Handle fontHandle = alloc_and_save(taskData, 1, F_MUTABLE_BIT|F_BYTE_OBJ); Handle FSHandle = alloc_and_save(taskData, 1, F_MUTABLE_BIT|F_BYTE_OBJ); /* Must do all allocations before we do the first dereference */ X_Font_Object *object = (X_Font_Object *)DEREFHANDLE(objectHandle); Font *font = (Font *)DEREFHANDLE(fontHandle); XFontStruct **xfstr = (XFontStruct **)DEREFHANDLE(FSHandle); *font = id; FINISHED(taskData, fontHandle); *xfstr = fs; FINISHED(taskData, FSHandle); object->type = TAGGED(X_Font); object->font = font; object->fs = xfstr; object->ds = DEREFDISPLAYHANDLE(dsHandle); debugCreate(Font,id); return AddXObject(FINISHED(taskData, objectHandle)); } } /******************************************************************************/ /* */ /* Cursor */ /* */ /******************************************************************************/ static X_Cursor_Object *CursorObject(X_Object *P) { assert(UNTAGGED(P->type) == X_Cursor); return (X_Cursor_Object *)P; } static Cursor GetCursor(TaskData *taskData, X_Object *P) { assert(UNTAGGED(P->type) == X_Cursor); /* val NoCursor = xcall (21,0) : Cursor; */ /* special case for NoCursor */ if (*(((X_Cursor_Object *)P)->cursor) == None) return None; CheckExists(P,cursor); return *(((X_Cursor_Object *)P)->cursor); } static Handle EmptyCursor ( TaskData *taskData, Handle dsHandle, /* Handle to (X_Display_Object *) */ Cursor id ) { X_Cursor_Object *E = FindCursor(dsHandle,id); if (E) { return SAVE(E); } else { Handle objectHandle = alloc_and_save(taskData, SIZEOF(X_Cursor_Object), F_MUTABLE_BIT); Handle cursorHandle = alloc_and_save(taskData, 1, F_MUTABLE_BIT|F_BYTE_OBJ); /* Must do all allocations before we do the first dereference */ X_Cursor_Object *object = (X_Cursor_Object *)DEREFHANDLE(objectHandle); Cursor *cursor = (Cursor *)DEREFHANDLE(cursorHandle); *cursor = id; FINISHED(taskData, cursorHandle); object->type = TAGGED(X_Cursor); object->cursor = cursor; object->ds = DEREFDISPLAYHANDLE(dsHandle); debugRefer(Cursor,id); return AddXObject(FINISHED(taskData, objectHandle)); } } static Handle CreateFontCursor ( TaskData *taskData, Handle dsHandle, /* Handle to (X_Display_Object *) */ unsigned shape ) { return EmptyCursor(taskData, dsHandle,XCreateFontCursor(DEREFDISPLAYHANDLE(dsHandle)->display,shape)); } static Handle CreateGlyphCursor ( TaskData *taskData, Handle dsHandle, /* Handle to (X_Display_Object *) */ Font sf, Font mf, unsigned sc, unsigned mc, XColor *foreground, XColor *background ) { return EmptyCursor(taskData, dsHandle,XCreateGlyphCursor(DEREFDISPLAYHANDLE(dsHandle)->display,sf,mf,sc,mc,foreground,background)); } static Handle CreatePixmapCursor ( TaskData *taskData, Handle dsHandle, /* Handle to (X_Display_Object *) */ Pixmap source, Pixmap mask, XColor *foreground, XColor *background, unsigned x, unsigned y ) { return EmptyCursor(taskData, dsHandle,XCreatePixmapCursor(DEREFDISPLAYHANDLE(dsHandle)->display,source,mask,foreground,background,x,y)); } /******************************************************************************/ /* */ /* Widget */ /* */ /******************************************************************************/ static Widget GetNWidget(TaskData *taskData, X_Object *P) { assert(UNTAGGED(P->type) == X_Widget); if (*(((X_Widget_Object *)P)->widget) == NULL) return NULL; CheckExists(P,widget); return *(((X_Widget_Object *)P)->widget); } static Widget GetWidget(TaskData *taskData, X_Object *P) { assert(UNTAGGED(P->type) == X_Widget); if (*(((X_Widget_Object *)P)->widget) == NULL) { RaiseXWindows(taskData, "Not a real widget"); } CheckExists(P,widget); return *(((X_Widget_Object *)P)->widget); } /* added 6/11/94 SPF */ static Widget GetRealizedWidget(TaskData *taskData, char *where, X_Object *P) { Widget w; assert(UNTAGGED(P->type) == X_Widget); w = *(((X_Widget_Object *)P)->widget); if (w == NULL) { RaiseXWindows2(where,": not a real widget"); } CheckExists(P,widget); if (XtIsRealized(w) == False) { RaiseXWindows2(where,": widget is not realized"); } return w; } /* P is a pointer to an X_Widget_Object */ static X_Widget_Object *WidgetObjectToken(X_Object *P) { assert(UNTAGGED(P->type) == X_Widget); return (X_Widget_Object *)P; } /* P is a pointer to an X_Widget_Object, which is bound to a C widget */ static X_Widget_Object *WidgetObject(TaskData *taskData, X_Object *P) { assert(UNTAGGED(P->type) == X_Widget); CheckExists(P,widget); return (X_Widget_Object *)P; } static Handle EmptyWidget ( TaskData *taskData, Handle dsHandle, /* Handle to (X_Display_Object *) */ Widget id ) { X_Widget_Object *E = FindWidget(id); if (E) { return SAVE(E); } else { Handle objectHandle = alloc_and_save(taskData, SIZEOF(X_Widget_Object), F_MUTABLE_BIT); Handle widgetHandle = alloc_and_save(taskData, 1, F_MUTABLE_BIT|F_BYTE_OBJ); /* Must do all allocations before we do the first dereference */ X_Widget_Object *object = (X_Widget_Object *)DEREFHANDLE(objectHandle); Widget *widget = (Widget *)DEREFHANDLE(widgetHandle); *widget = id; FINISHED(taskData, widgetHandle); object->type = TAGGED(X_Widget); object->widget = widget; object->callbackList = ListNull; object->state = TAGGED(0); object->ds = DEREFDISPLAYHANDLE(dsHandle); debugRefer(Widget,id); return AddXObject(objectHandle); /* Must stay MUTABLE */ } } static Handle NewWidget ( TaskData *taskData, Handle dsHandle, /* Handle to (X_Display_Object *) */ Widget id ) { X_Widget_Object *E = FindWidget(id); if (E) DestroyXObject((X_Object *)E); return EmptyWidget(taskData, dsHandle,id); } /******************************************************************************/ /* */ /* Text Widgets */ /* */ /******************************************************************************/ static Widget GetTextWidget(TaskData *taskData, char *funcname, X_Object *P) { Widget w = GetWidget(taskData, P); if (XmIsText(w)) return w; /* Text operations are also legal on TextField widgets */ if (XmIsTextField(w)) return w; RaiseXWindows2(funcname,": not a Text or TextField widget"); /*NOTREACHED*/ } /******************************************************************************/ /* */ /* TextField Widgets */ /* */ /******************************************************************************/ static Widget GetTextFieldWidget(TaskData *taskData, char *funcname, X_Object *P) { Widget w = GetWidget(taskData, P); if (XmIsTextField(w)) return w; RaiseXWindows2(funcname,": not a TextField widget"); /*NOTREACHED*/ } /******************************************************************************/ /* */ /* List Widgets */ /* */ /******************************************************************************/ static Widget GetListWidget(TaskData *taskData, char *funcname, X_Object *P) { Widget w = GetWidget(taskData, P); if (XmIsList(w)) return w; RaiseXWindows2(funcname,": not a List widget"); /*NOTREACHED*/ } /******************************************************************************/ /* */ /* Window */ /* */ /******************************************************************************/ static void RemoveWindowEvents(Display *d, Window w) { XEvent event; XSync(d,False); while(XCheckWindowEvent(d,w,~0,&event)) { /* do nothing */ } } static Handle AddWindow ( TaskData *taskData, Window W, Handle handlerHandle, /* Handle to (PolyWord *) (?) */ Handle stateHandle, /* Handle to (PolyWord *) (?) */ Handle parentHandle /* Handle to (X_Window_Object *) */ ) { XWMHints hints; Atom deleteWindow; /* was int SPF 6/1/94 */ Display *d = GetDisplay(taskData, DEREFXOBJECTHANDLE(parentHandle)); Handle objectHandle = alloc_and_save(taskData, SIZEOF(X_Window_Object), F_MUTABLE_BIT); Handle eventMaskHandle = alloc_and_save(taskData, 1, F_MUTABLE_BIT|F_BYTE_OBJ); Handle drawableHandle = alloc_and_save(taskData, 1, F_MUTABLE_BIT|F_BYTE_OBJ); /* Must do all allocations before we do the first dereference */ X_Window_Object *object = DEREFWINDOWHANDLE(objectHandle); Drawable *drawable = (Drawable *)DEREFHANDLE(drawableHandle); PolyObject *eventMask = DEREFHANDLE(eventMaskHandle); eventMask->Set(0, PolyWord::FromUnsigned(0)); /* eventMask must remain MUTABLE */ *drawable = W; FINISHED(taskData, drawableHandle); hints.flags = InputHint; hints.input = True; XSetWMHints(d,W,&hints); deleteWindow = WM_DELETE_WINDOW(d); if (deleteWindow != None) XSetWMProtocols(d,W,&deleteWindow,1); debugCreate(Window,W); object->type = TAGGED(X_Window); object->drawable = drawable; object->eventMask = eventMask; object->handler = DEREFHANDLE(handlerHandle); object->state = DEREFHANDLE(stateHandle); object->parent = DEREFWINDOWHANDLE(parentHandle); object->ds = DEREFWINDOWHANDLE(parentHandle)->ds; /* Tidy up (?) */ /* object->colormap_object = 0; object->cursor_object = 0; object->backgroundPixmap = 0; object->borderPixmap = 0; */ if (ISNIL(DEREFHANDLE(handlerHandle))) Crash ("No handler set"); return AddXObject(objectHandle); /* object must remain MUTABLE */ } static void DestroyWindow(X_Object *W /* Should be a Window Object! */) { TaskData *taskData = processes->GetTaskDataForThread(); Window w = GetWindow(taskData, W); Display *d = GetDisplay(taskData, W); debugReclaim(Window,w); XUnmapWindow(d,w); DestroySubwindows(W); XDestroyWindow(d,w); RemoveWindowEvents(d,w); } static Handle CreateSimpleWindow ( TaskData *taskData, Handle parent, /* Handle to (X_Window_Object *) */ int x, int y, unsigned w, unsigned h, unsigned borderWidth, unsigned border, unsigned background, Handle handler, /* Handle to (PolyWord *) (?) */ Handle state /* Handle to (PolyWord *) (?) */ ) { Window W = XCreateSimpleWindow(GetDisplay(taskData, DEREFXOBJECTHANDLE(parent)), GetWindow(taskData, DEREFXOBJECTHANDLE(parent)), x,y,w,h, borderWidth,border,background); if (W == 0) RaiseXWindows(taskData, "XCreateSimpleWindow failed"); return AddWindow(taskData,W,handler,state,parent); } static Handle CreateWindow ( TaskData *taskData, Handle parent, /* Handle to (X_Window_Object *) */ int x, int y, unsigned w, unsigned h, unsigned borderWidth, unsigned depth, unsigned clas, Visual *visual, Handle handler, /* Handle to (PolyWord *) (?) */ Handle state /* Handle to (PolyWord *) (?) */ ) { Window W; W = XCreateWindow(GetDisplay(taskData, DEREFXOBJECTHANDLE(parent)), GetWindow(taskData, DEREFXOBJECTHANDLE(parent)), x,y,w,h, borderWidth,depth,clas,visual,0,0); if (W == 0) RaiseXWindows(taskData, "XCreateWindow failed"); return AddWindow(taskData,W,handler,state,parent); } static void DestroySubwindows(X_Object *W /* should be a Window object! */) { TaskData *taskData = processes->GetTaskDataForThread(); Window root,parent,*children; unsigned n; int s; Window w = GetWindow(taskData, W); Display *d = GetDisplay(taskData, W); s = XQueryTree(d,w,&root,&parent,&children,&n); if (s == 0) { RaiseXWindows(taskData, "XDestroySubwindows failed"); return; } XUnmapSubwindows(d,w); if (n) { Handle dsHandle = GetDS(taskData, W); while(n--) { X_Window_Object *child = FindWindow(dsHandle,children[n]); if (child) DestroyXObject((X_Object *)child); } XFree((char *)children); } XDestroySubwindows(d,w); } /******************************************************************************/ /* */ /* Translations / Accelerators */ /* */ /******************************************************************************/ static Handle EmptyTrans(TaskData *taskData, XtTranslations table) { Handle objectHandle = alloc_and_save(taskData, SIZEOF(X_Trans_Object), F_MUTABLE_BIT|F_BYTE_OBJ); /* Must do all allocations before we do the first dereference */ X_Trans_Object *object = (X_Trans_Object *)DEREFHANDLE(objectHandle); /* OK to store C values because this is a byte object */ object->type = TAGGED(X_Trans); object->table = table; debugRefer(Trans,table); return AddXObject(FINISHED(taskData, objectHandle)); } static XtTranslations GetTrans(TaskData *taskData, X_Object *P) { assert(UNTAGGED(P->type) == X_Trans); CheckExists(P,trans); return ((X_Trans_Object *)P)->table; } static Handle EmptyAcc(TaskData *taskData, XtTranslations acc) { Handle objectHandle = alloc_and_save(taskData, SIZEOF(X_Acc_Object), F_MUTABLE_BIT|F_BYTE_OBJ); /* Must do all allocations before we do the first dereference */ X_Acc_Object *object = (X_Acc_Object *)DEREFHANDLE(objectHandle); /* OK to store C values because this is a byte object */ object->type = TAGGED(X_Acc); object->acc = acc; debugRefer(Acc,acc); return AddXObject(FINISHED(taskData, objectHandle)); } static XtAccelerators GetAcc(TaskData *taskData, X_Object *P) { assert(UNTAGGED(P->type) == X_Acc); CheckExists(P,acc); return ((X_Acc_Object *)P)->acc; } /******************************************************************************/ /* */ /* Utility functions */ /* */ /******************************************************************************/ static XtGrabKind GetXtGrabKind(TaskData *taskData, PolyWord P) { int i = get_C_long(taskData, P); /* This encoding must be the same as that used in Motif/ml_bind.ML */ switch (i) { case 0: return XtGrabNone; case 1: return XtGrabNonexclusive; case 2: return XtGrabExclusive; default: Crash ("Bad XtGrabKind index (%d) in GetXtGrabKind",i); } return XtGrabNone; /* to keep lint/gcc happy */ } /******************************************************************************/ /* */ /* MLXStandardColormap - implements ML XStandardColormap datatype */ /* */ /******************************************************************************/ typedef struct { X_Colormap_Object *Colormap; PolyWord redMax; /* ML int */ PolyWord redMult; /* ML int */ PolyWord greenMax; /* ML int */ PolyWord greenMult; /* ML int */ PolyWord blueMax; /* ML int */ PolyWord blueMult; /* ML int */ PolyWord basePixel; /* ML int */ X_Visual_Object *visual; } MLXStandardColormap; static void GetStandardColormap(TaskData *taskData, PolyWord p, void *v, unsigned) { MLXStandardColormap *P = (MLXStandardColormap *)p.AsObjPtr(); XStandardColormap *s = (XStandardColormap *)v; s->colormap = GetColormap(taskData, (X_Object *)P->Colormap); s->red_max = get_C_ulong(taskData, P->redMax); s->red_mult = get_C_ulong(taskData, P->redMult); s->green_max = get_C_ulong(taskData, P->greenMax); s->green_mult = get_C_ulong(taskData, P->greenMult); s->blue_max = get_C_ulong(taskData, P->blueMax); s->blue_mult = get_C_ulong(taskData, P->blueMult); s->base_pixel = get_C_ulong(taskData, P->basePixel); s->visualid = GetVisual(taskData, (X_Object *)P->visual)->visualid; /* UNSAFE(?) */ s->killid = None; } static Handle CreateStandardColormap ( TaskData *taskData, void *v, Handle dsHandle /* Handle to (X_Display_Object *) */ ) { XStandardColormap *s = (XStandardColormap *)v; XVisualInfo T; XVisualInfo *info; int count; Handle tupleHandle = alloc_and_save(taskData, SIZEOF(MLXStandardColormap), F_MUTABLE_BIT); T.visualid = s->visualid; T.visual = None; info = XGetVisualInfo(DEREFDISPLAYHANDLE(dsHandle)->display,VisualIDMask,&T,&count); if (info) { T.visual = info->visual; XFree((char *)info); } /* Still allocating, so must use explicit DEREF for each element */ #define tuple /* hack */((MLXStandardColormap *)DEREFHANDLE(tupleHandle)) tuple->Colormap = (X_Colormap_Object *)DEREFHANDLE(EmptyColormap(taskData, dsHandle,s->colormap)); tuple->redMax = DEREFWORD(Make_unsigned(taskData, s->red_max)); tuple->redMult = DEREFWORD(Make_unsigned(taskData, s->red_mult)); tuple->greenMax = DEREFWORD(Make_unsigned(taskData, s->green_max)); tuple->greenMult = DEREFWORD(Make_unsigned(taskData, s->green_mult)); tuple->blueMax = DEREFWORD(Make_unsigned(taskData, s->blue_max)); tuple->blueMult = DEREFWORD(Make_unsigned(taskData, s->blue_mult)); tuple->basePixel = DEREFWORD(Make_unsigned(taskData, s->base_pixel)); tuple->visual = (X_Visual_Object *)DEREFHANDLE(EmptyVisual(taskData, dsHandle,T.visual)); #undef tuple return FINISHED(taskData, tupleHandle); } /******************************************************************************/ /* */ /* Polymorphic pairs */ /* */ /******************************************************************************/ class MLPair: public PolyObject { public: PolyWord x0; /* first value */ PolyWord x1; /* second value */ }; /* Polymorphic pair creation */ static Handle CreatePair(TaskData *taskData, Handle p1, Handle p2) { Handle pairHandle = alloc_and_save(taskData, SIZEOF(MLPair), F_MUTABLE_BIT); /* Still allocating, so must use explicit DEREF for each element */ #define pair ((MLPair *)DEREFHANDLE(pairHandle)) pair->x0 = DEREFWORD(p1); pair->x1 = DEREFWORD(p2); #undef pair return FINISHED(taskData, pairHandle); } /******************************************************************************/ /* */ /* Polymorphic triples */ /* */ /******************************************************************************/ class MLTriple: public PolyObject { public: PolyWord x0; /* first value */ PolyWord x1; /* second value */ PolyWord x2; /* third value */ }; inline PolyWord FST(PolyWord P) { return ((MLTriple*)P.AsObjPtr())->x0; } inline PolyWord SND(PolyWord P) { return ((MLTriple*)P.AsObjPtr())->x1; } inline PolyWord THIRD(PolyWord P) { return ((MLTriple*)P.AsObjPtr())->x2; } static Handle CreateTriple(TaskData *taskData, Handle p1, Handle p2, Handle p3) { Handle tripleHandle = alloc_and_save(taskData, SIZEOF(MLTriple), F_MUTABLE_BIT); /* Still allocating, so must use explicit DEREF for each element */ #define triple ((MLTriple *)DEREFHANDLE(tripleHandle)) triple->x0 = DEREFWORD(p1); triple->x1 = DEREFWORD(p2); triple->x2 = DEREFWORD(p3); #undef triple return FINISHED(taskData, tripleHandle); } /******************************************************************************/ /* */ /* MLXImage - Implements ML XImage datatype */ /* */ /******************************************************************************/ typedef struct { PolyWord data; /* ML (abstype containing) string */ PolyWord size; /* MLXRectangle * */ PolyWord depth; /* ML int */ PolyWord format; /* (short ML int) XYBitmap | XYPixmap | ZPixmap */ PolyWord xoffset; /* ML int */ PolyWord bitmapPad; /* ML int */ PolyWord byteOrder; /* (short ML int) LSBFirst | MSBFirst */ PolyWord bitmapUnit; /* ML int */ PolyWord bitsPerPixel; /* ML int */ PolyWord bytesPerLine; /* ML int */ PolyWord visualRedMask; /* ML int */ PolyWord bitmapBitOrder; /* (short ML int) LSBFirst | MSBFirst */ PolyWord visualBlueMask; /* ML int */ PolyWord visualGreenMask; /* ML int */ } MLXImage; #define MLImageFormat(n) (n+1) #define MLImageOrder(n) (n+1) #define CImageFormat(n) (n-1) #define CImageOrder(n) (n-1) static unsigned ImageBytes(XImage *image) { unsigned dsize = image->bytes_per_line * image->height; if (image->format == XYPixmap) dsize = dsize * image->depth; return dsize; } static XImage *GetXImage(TaskData *taskData, Display *d, PolyWord p) /* can only be called once per X opcode */ { MLXImage *I = (MLXImage *)p.AsObjPtr(); static XImage image = { 0 }; PolyStringObject *data = GetString(I->data); unsigned width = GetRectW(taskData, I->size); unsigned height = GetRectH(taskData, I->size); unsigned depth = get_C_ulong(taskData, I->depth); unsigned format = get_C_ulong(taskData, I->format); int xoffset = get_C_short(taskData, I->xoffset); int bitmapPad = get_C_short(taskData, I->bitmapPad); int bytesPerLine = get_C_long (taskData, I->bytesPerLine); unsigned byteOrder = get_C_ulong(taskData, I->byteOrder); unsigned bitmapUnit = get_C_ulong(taskData, I->bitmapUnit); unsigned bitsPerPixel = get_C_ulong(taskData, I->bitsPerPixel); unsigned bitmapBitOrder = get_C_ulong(taskData, I->bitmapBitOrder); format = CImageFormat(format); byteOrder = CImageOrder(byteOrder); bitmapBitOrder = CImageOrder(bitmapBitOrder); image.width = width; image.height = height; image.xoffset = xoffset; image.format = format; image.data = data->chars; image.byte_order = byteOrder; image.bitmap_unit = bitmapUnit; image.bitmap_bit_order = bitmapBitOrder; image.bitmap_pad = bitmapPad; image.depth = depth; image.bytes_per_line = bytesPerLine; image.bits_per_pixel = bitsPerPixel; image.red_mask = get_C_ulong(taskData, I->visualRedMask); image.green_mask = get_C_ulong(taskData, I->visualGreenMask); image.blue_mask = get_C_ulong(taskData, I->visualBlueMask); if (ImageBytes(&image) != data->length) RaiseXWindows(taskData, "Bad image string length"); return ℑ } static Handle CreateImage(TaskData *taskData, XImage *image) { Handle XHandle = alloc_and_save(taskData, SIZEOF(MLXImage), F_MUTABLE_BIT); int dsize = ImageBytes(image); /* Still allocating, so must use explicit DEREF for each element */ #define X ((MLXImage *)DEREFHANDLE(XHandle)) X->data = Buffer_to_Poly(taskData, image->data,dsize); X->size = DEREFWORD(CreateArea(image->width,image->height)); X->depth = DEREFWORD(Make_unsigned(taskData, image->depth)); X->format = DEREFWORD(Make_unsigned(taskData, MLImageFormat(image->format))); X->xoffset = DEREFWORD(Make_int(image->xoffset)); X->bitmapPad = DEREFWORD(Make_int(image->bitmap_pad)); X->byteOrder = DEREFWORD(Make_unsigned(taskData, MLImageOrder(image->byte_order))); X->bitmapUnit = DEREFWORD(Make_unsigned(taskData, image->bitmap_unit)); X->bitsPerPixel = DEREFWORD(Make_unsigned(taskData, image->bits_per_pixel)); X->bytesPerLine = DEREFWORD(Make_int(image->bytes_per_line)); X->visualRedMask = DEREFWORD(Make_unsigned(taskData, image->red_mask)); X->bitmapBitOrder = DEREFWORD(Make_unsigned(taskData, MLImageOrder(image->bitmap_bit_order))); X->visualBlueMask = DEREFWORD(Make_unsigned(taskData, image->blue_mask)); X->visualGreenMask = DEREFWORD(Make_unsigned(taskData, image->green_mask)); #undef X XDestroyImage(image); return FINISHED(taskData, XHandle); } static Handle GetImage ( TaskData *taskData, Display *d, Drawable drawable, int x, int y, unsigned w, unsigned h, unsigned /* long */ mask, int format ) { XImage *image = XGetImage(d,drawable,x,y,w,h,mask,CImageFormat(format)); if (image == 0) RaiseXWindows(taskData, "XGetImage failed"); return CreateImage(taskData, image); } static Handle SubImage ( TaskData *taskData, XImage *image, int x, int y, unsigned w, unsigned h ) { XImage *subimage = XSubImage(image,x,y,w,h); if (subimage == 0) RaiseXWindows(taskData, "XSubImage failed"); return CreateImage(taskData, subimage); } /******************************************************************************/ /* */ /* XImage */ /* */ /******************************************************************************/ static void GetSubImage ( Display *d, Drawable drawable, int sx, int sy, unsigned sw, unsigned sh, unsigned /* long */ mask, int format, XImage *image, int dx, int dy ) { XGetSubImage(d,drawable,sx,sy,sw,sh,mask,CImageFormat(format),image,dx,dy); /* XFree((char *)image); */ } static void PutImage ( Display *d, Drawable drawable, GC gc, XImage *image, int sx, int sy, int dx, int dy, unsigned dw, unsigned dh ) { XPutImage(d,drawable,gc,image,sx,sy,dx,dy,dw,dh); /* XFree((char *)image); */ } static Handle GetPixel(TaskData *taskData, XImage *image, int x, int y) { unsigned pixel = XGetPixel(image,x,y); /* XFree((char *)image); */ return Make_unsigned(taskData, pixel); } static void PutPixel(XImage *image, int x, int y, unsigned pixel) { XPutPixel(image,x,y,pixel); /* XFree((char *)image); */ } static void AddPixel(XImage *image, unsigned value) { XAddPixel(image,value); /* XFree((char *)image); */ } /******************************************************************************/ /* */ /* TimeVal */ /* */ /******************************************************************************/ static int DoubleClickTime = 250; /* Double click time in milliseconds */ static int MouseDrift = 5; /* Mouse movement allowed in button events */ static void NormaliseTime(TimeVal *t) { while(t->tv_usec >= 1000000) { t->tv_usec -= 1000000; t->tv_sec++; } while(t->tv_usec < 0) { t->tv_usec += 1000000; t->tv_sec--; } } static void TimeAdd(TimeVal *a, TimeVal *b, TimeVal *t) { t->tv_sec = a->tv_sec + b->tv_sec; t->tv_usec = a->tv_usec + b->tv_usec; NormaliseTime(t); } static int TimeLt(TimeVal *a, TimeVal *b) { return ((a->tv_sec < b->tv_sec) || ((a->tv_sec == b->tv_sec) && (a->tv_usec < b->tv_usec))); } static int TimeLeq(TimeVal *a, TimeVal *b) { return ((a->tv_sec < b->tv_sec) || ((a->tv_sec == b->tv_sec) && (a->tv_usec <= b->tv_usec))); } /******************************************************************************/ /* */ /* (?) */ /* */ /******************************************************************************/ typedef struct { XButtonEvent *button; /* initial button press event */ int up,down; /* count of button transitions */ } PredicateArgs; static Bool SameClickEvent(Display *dpy, XEvent *ev, XPointer arg) { PredicateArgs *A = (PredicateArgs *)arg; switch(ev->type) { case MotionNotify: { int dx = ev->xmotion.x - A->button->x; int dy = ev->xmotion.y - A->button->y; if (ev->xmotion.window != A->button->window) return False; if (abs(dx) > MouseDrift) return False; if (abs(dy) > MouseDrift) return False; return True; } case ButtonPress: case ButtonRelease: { int dx = ev->xbutton.x - A->button->x; int dy = ev->xbutton.y - A->button->y; if (ev->xbutton.window != A->button->window) return False; if (ev->xbutton.button != A->button->button) return False; if (abs(dx) > MouseDrift) return False; if (abs(dy) > MouseDrift) return False; if (ev->type == ButtonPress) A->down++; else A->up++; return True; } } return False; } static void WaitDoubleClickTime(Handle dsHandle, PredicateArgs *A) { XEvent N; TimeVal start_time,end_time,dt; Display *d = DEREFDISPLAYHANDLE(dsHandle)->display; /* AIX doesn't document support for NULL pointers in the select call, so we have to initialise empty fd_sets instead. SPF 30/10/95 */ fd_set read_fds, write_fds, except_fds; FD_ZERO(&read_fds); FD_ZERO(&write_fds); FD_ZERO(&except_fds); { unsigned fd = d->fd; assert (0 <= fd && fd < FD_SETSIZE); FD_SET(fd,&read_fds); } gettimeofday(&start_time, NULL); dt.tv_sec = 0; dt.tv_usec = DoubleClickTime * 1000; TimeAdd(&start_time,&dt,&end_time); for (;;) { int extended = 0; while(XCheckIfEvent(d,&N,SameClickEvent,(char *) A)) { if (DEREFDISPLAYHANDLE(dsHandle)->app_context) XtDispatchEvent(&N); extended = 1; } if (QLength(d)) break; /* some other event to be processed next */ if (extended) /* button event extended, so extend time period */ { dt.tv_sec = 0; dt.tv_usec = DoubleClickTime * 1000; TimeAdd(&end_time,&dt,&end_time); } if (TimeLeq(&end_time,&start_time)) break; /* the time period has elapsed */ select(FD_SETSIZE,&read_fds,&write_fds,&except_fds,&dt); gettimeofday(&start_time, NULL); } } static Handle GetKeyVector(TaskData *taskData, void *k, unsigned i) { uchar *keys = (uchar*)k; unsigned index = i / 8; unsigned mask = 1 << (i % 8); return Make_bool(keys[index] & mask); } static Handle QueryKeymap(TaskData *taskData, Display *d) { char keys[32]; XQueryKeymap(d, keys); return CreateList4I(taskData, 256,keys,0,GetKeyVector); } /******************************************************************************/ /* */ /* EventName */ /* */ /******************************************************************************/ typedef struct { const char *name; int type; } EventName; static EventName EventNames[] = { { "KeyPress",KeyPress }, { "KeyRelease",KeyRelease }, { "ButtonPress",ButtonPress }, { "ButtonRelease",ButtonRelease }, { "MotionNotify",MotionNotify }, { "EnterNotify",EnterNotify }, { "LeaveNotify",LeaveNotify }, { "FocusIn",FocusIn }, { "FocusOut",FocusOut }, { "KeymapNotify",KeymapNotify }, { "Expose",Expose }, { "GraphicsExpose",GraphicsExpose }, { "NoExpose",NoExpose }, { "VisibilityNotify",VisibilityNotify }, { "CreateNotify",CreateNotify }, { "DestroyNotify",DestroyNotify }, { "UnmapNotify",UnmapNotify }, { "MapNotify",MapNotify }, { "MapRequest",MapRequest }, { "ReparentNotify",ReparentNotify }, { "ConfigureNotify",ConfigureNotify }, { "ConfigureRequest",ConfigureRequest }, { "GravityNotify",GravityNotify }, { "ResizeRequest",ResizeRequest }, { "CirculateNotify",CirculateNotify }, { "CirculateRequest",CirculateRequest }, { "PropertyNotify",PropertyNotify }, { "SelectionClear",SelectionClear }, { "SelectionRequest",SelectionRequest }, { "SelectionNotify",SelectionNotify }, { "ColormapNotify",ColormapNotify }, { "ClientMessage",ClientMessage }, { "MappingNotify",MappingNotify }, }; #define NEVENTS (sizeof(EventNames)/sizeof(EventName)) static const char *DebugEventName(int type) { for(unsigned i = 0; i < NEVENTS; i++) { if (EventNames[i].type == type) return EventNames[i].name; } return "** BAD EVENT **"; } static int WM_PROTOCOLS(Display *d) { static int protocols = None; if (protocols == None) protocols = XInternAtom(d,"WM_PROTOCOLS",True); return protocols; } static Atom WM_DELETE_WINDOW(Display *d) { static Atom deleteWindow = None; if (deleteWindow == None) deleteWindow = XInternAtom(d,"WM_DELETE_WINDOW",True); return deleteWindow; } /******************************************************************************/ /* */ /* Structures used by CreateEvent function. */ /* */ /* These typedefs should correspond with the tuples used by MakeXKeyEvent etc */ /* */ /******************************************************************************/ typedef struct { X_Window_Object *root; X_Window_Object *subwindow; PolyWord time; /* ML int */ MLXPoint *pointer; MLXPoint *rootPointer; PolyWord modifiers; /* ML modifier (int) */ PolyWord keycode; /* ML int */ } ML_KeyEvent_Data; typedef struct { X_Window_Object *root; X_Window_Object *subwindow; PolyWord time; /* ML int */ MLXPoint *pointer; MLXPoint *rootPointer; PolyWord modifiers; /* ML modifier (int) */ PolyWord button; /* ML int */ } ML_ButtonEvent_Data; typedef struct { X_Window_Object *root; X_Window_Object *subwindow; PolyWord time; /* ML int */ MLXPoint *pointer; MLXPoint *rootPointer; PolyWord modifiers; /* ML modifier (int) */ PolyWord button; /* ML int */ PolyWord up; /* ML int */ PolyWord down; /* ML int */ } ML_ButtonClick_Data; typedef struct { X_Window_Object *root; X_Window_Object *subwindow; PolyWord time; /* ML int */ MLXPoint *pointer; MLXPoint *rootPointer; PolyWord modifiers; /* ML modifier (int) */ PolyWord isHint; /* ML bool */ } ML_MotionEvent_Data; typedef struct { X_Window_Object *root; X_Window_Object *subwindow; PolyWord time; /* ML int */ MLXPoint *pointer; MLXPoint *rootPointer; PolyWord mode; /* ? */ PolyWord detail; /* ? */ PolyWord focus; /* ? */ PolyWord modifiers; /* ML modifier (int) */ } ML_CrossingEvent_Data; typedef struct { MLXRectangle *region; PolyWord count; /* ML int */ } ML_ExposeEvent_Data; typedef struct { X_Window_Object *window; MLXPoint *position; MLXRectangle *size; PolyWord borderWidth; /* ML int */ X_Window_Object *above; PolyWord overrideRedirect; /* ML bool */ } ML_ConfigureNotify_Data; typedef struct { X_Window_Object *window; MLXPoint *position; MLXRectangle *size; PolyWord borderWidth; X_Window_Object *above; PolyWord detail; /* ? */ } ML_ConfigureRequest_Data; typedef struct { MLXRectangle *region; PolyWord count; /* ML int */ PolyWord code; /* ML int */ } ML_GraphicsExposeEvent_Data; typedef struct { PolyWord mode; /* ML int ? */ PolyWord detail; /* ML int ? */ } ML_FocusChangeEvent_Data; typedef struct { X_Window_Object *window; MLXPoint *position; MLXRectangle *size; PolyWord borderWidth; /* ML int */ PolyWord overrideRedirect; /* ML bool */ } ML_CreateEvent_Data; typedef struct { X_Window_Object *window; PolyWord fromConfigure; /* ML bool */ } ML_UnmapEvent_Data; typedef struct { X_Window_Object *window; PolyWord overrideRedirect; /* ML bool */ } ML_MapEvent_Data; typedef struct { X_Window_Object *window; X_Window_Object *parent; MLXPoint *position; PolyWord overrideRedirect; /* ML bool */ } ML_ReparentEvent_Data; typedef struct { X_Window_Object *window; MLXPoint *position; } ML_GravityEvent_Data; typedef struct { X_Window_Object *window; PolyWord place; } ML_CirculateEvent_Data; typedef struct { X_Colormap_Object *colormap_object; PolyWord c_new; /* ML bool */ PolyWord installed; /* ML bool */ } ML_ColormapEvent_Data; typedef struct { PolyWord selection; /* ML int */ PolyWord time; /* ML int */ } ML_SelectionClear_Data; typedef struct { X_Window_Object *requestor; PolyWord selection; /* ML int */ PolyWord target; /* ML int */ PolyWord property; /* ML int */ PolyWord time; /* ML int */ } ML_SelectionRequest_Data; typedef struct { PolyWord selection; /* ML int */ PolyWord target; /* ML int */ PolyWord property; /* ML int */ PolyWord time; /* ML int */ } ML_Selection_Data; class ML_Event: public PolyObject { public: PolyWord type; /* ML (?) */ PolyWord sendEvent; /* ML bool */ PolyWord window; /* X_Window_Object* */ PolyWord data; /* pointer to event-specific data, in ML_XXX_Data format */ PolyWord callbacks; /* ML list of something */ PolyWord events; /* ML list */ }; /******************************************************************************/ /* */ /* CreateEvent function */ /* */ /******************************************************************************/ static Handle CreateEvent ( TaskData *taskData, Handle dsHandle, /* Handle to (X_Display_Object *) */ XEvent *ev, Handle W /* Handle to (X_Window_Object *) */ ) { Handle eventHandle = alloc_and_save(taskData, SIZEOF(ML_Event), F_MUTABLE_BIT); Display *d = DEREFDISPLAYHANDLE(dsHandle)->display; int type = ev->xany.type; int send_event = ev->xany.send_event; assert(d == ev->xany.display); if (userOptions.debug & DEBUG_X) { printf("CreateEvent called, type=%s,", DebugEventName(type)); printf(" window=%lx\n", ev->xany.window); } #define event ((ML_Event *)DEREFHANDLE(eventHandle)) event->type = DEREFWORD(Make_unsigned(taskData, type)); event->sendEvent = DEREFWORD(Make_bool(send_event)); event->window = DEREFWINDOWHANDLE(W); switch(type) { case KeyPress: case KeyRelease: { Handle dataHandle = alloc_and_save(taskData, SIZEOF(ML_KeyEvent_Data), F_MUTABLE_BIT); #define data ((ML_KeyEvent_Data *)DEREFHANDLE(dataHandle)) data->root = DEREFWINDOWHANDLE(EmptyWindow(taskData, dsHandle,ev->xkey.root)); data->subwindow = DEREFWINDOWHANDLE(EmptyWindow(taskData, dsHandle,ev->xkey.subwindow)); data->time = DEREFWORD(Make_unsigned(taskData, ev->xkey.time)); data->pointer = (MLXPoint *)DEREFHANDLE(CreatePoint(taskData, ev->xkey.x,ev->xkey.y)); data->rootPointer = (MLXPoint *)DEREFHANDLE(CreatePoint(taskData, ev->xkey.x_root,ev->xkey.y_root)); data->modifiers = DEREFWORD(Make_unsigned(taskData, ev->xkey.state)); data->keycode = DEREFWORD(Make_unsigned(taskData, ev->xkey.keycode)); #undef data event->data = DEREFHANDLE(FINISHED(taskData, dataHandle)); break; } case ButtonPress: case ButtonRelease: { if (DEREFWINDOWHANDLE(W)->eventMask->Get(0).AsUnsigned() & ButtonClickMask) { Handle dataHandle; PredicateArgs A; A.button = &ev->xbutton; A.up = (ev->type == ButtonRelease); A.down = (ev->type == ButtonPress); WaitDoubleClickTime(dsHandle,&A); dataHandle = alloc_and_save(taskData, SIZEOF(ML_ButtonClick_Data), F_MUTABLE_BIT); #define data ((ML_ButtonClick_Data *)DEREFHANDLE(dataHandle)) data->root = DEREFWINDOWHANDLE(EmptyWindow(taskData, dsHandle,ev->xbutton.root)); data->subwindow = DEREFWINDOWHANDLE(EmptyWindow(taskData, dsHandle,ev->xbutton.subwindow)); data->time = DEREFWORD(Make_unsigned(taskData, ev->xbutton.time)); data->pointer = (MLXPoint *) DEREFHANDLE(CreatePoint(taskData, ev->xbutton.x,ev->xbutton.y)); data->rootPointer = (MLXPoint *) DEREFHANDLE(CreatePoint(taskData, ev->xbutton.x_root,ev->xbutton.y_root)); data->modifiers = DEREFWORD(Make_unsigned(taskData, ev->xbutton.state)); data->button = DEREFWORD(Make_unsigned(taskData, ev->xbutton.button)); data->up = DEREFWORD(Make_unsigned(taskData, A.up)); data->down = DEREFWORD(Make_unsigned(taskData, A.down)); #undef data event->type = DEREFWORD(Make_unsigned(taskData, 42)); /* What's this for? */ event->data = DEREFWORD(FINISHED(taskData, dataHandle)); } else { Handle dataHandle = alloc_and_save(taskData, SIZEOF(ML_ButtonEvent_Data), F_MUTABLE_BIT); #define data ((ML_ButtonEvent_Data *)DEREFHANDLE(dataHandle)) data->root = DEREFWINDOWHANDLE(EmptyWindow(taskData, dsHandle,ev->xbutton.root)); data->subwindow = DEREFWINDOWHANDLE(EmptyWindow(taskData, dsHandle,ev->xbutton.subwindow)); data->time = DEREFWORD(Make_unsigned(taskData, ev->xbutton.time)); data->pointer = (MLXPoint *) DEREFHANDLE(CreatePoint(taskData, ev->xbutton.x,ev->xbutton.y)); data->rootPointer = (MLXPoint *) DEREFHANDLE(CreatePoint(taskData, ev->xbutton.x_root,ev->xbutton.y_root)); data->modifiers = DEREFWORD(Make_unsigned(taskData, ev->xbutton.state)); data->button = DEREFWORD(Make_unsigned(taskData, ev->xbutton.button)); #undef data event->data = DEREFWORD(FINISHED(taskData, dataHandle)); } break; } case MotionNotify: { Handle dataHandle = alloc_and_save(taskData, SIZEOF(ML_MotionEvent_Data), F_MUTABLE_BIT); #define data ((ML_MotionEvent_Data *)DEREFHANDLE(dataHandle)) data->root = DEREFWINDOWHANDLE(EmptyWindow(taskData, dsHandle,ev->xmotion.root)); data->subwindow = DEREFWINDOWHANDLE(EmptyWindow(taskData, dsHandle,ev->xmotion.subwindow)); data->time = DEREFWORD(Make_unsigned(taskData, ev->xmotion.time)); data->pointer = (MLXPoint *) DEREFHANDLE(CreatePoint(taskData, ev->xmotion.x,ev->xmotion.y)); data->rootPointer = (MLXPoint *) DEREFHANDLE(CreatePoint(taskData, ev->xmotion.x_root,ev->xmotion.y_root)); data->modifiers = DEREFWORD(Make_unsigned(taskData, ev->xmotion.state)); data->isHint = DEREFWORD(Make_unsigned(taskData, ev->xmotion.is_hint)); #undef data event->data = DEREFWORD(FINISHED(taskData, dataHandle)); break; } case EnterNotify: case LeaveNotify: { Handle dataHandle = alloc_and_save(taskData, SIZEOF(ML_CrossingEvent_Data), F_MUTABLE_BIT); #define data ((ML_CrossingEvent_Data *)DEREFHANDLE(dataHandle)) data->root = DEREFWINDOWHANDLE(EmptyWindow(taskData, dsHandle,ev->xcrossing.root)); data->subwindow = DEREFWINDOWHANDLE(EmptyWindow(taskData, dsHandle,ev->xcrossing.subwindow)); data->time = DEREFWORD(Make_unsigned(taskData, ev->xcrossing.time)); data->pointer = (MLXPoint *) DEREFHANDLE(CreatePoint(taskData, ev->xcrossing.x,ev->xcrossing.y)); data->rootPointer = (MLXPoint *) DEREFHANDLE(CreatePoint(taskData, ev->xcrossing.x_root,ev->xcrossing.y_root)); data->mode = DEREFWORD(Make_unsigned(taskData, ev->xcrossing.mode)); data->detail = DEREFWORD(Make_unsigned(taskData, ev->xcrossing.detail)); data->focus = DEREFWORD(Make_bool(ev->xcrossing.focus)); data->modifiers = DEREFWORD(Make_unsigned(taskData, ev->xcrossing.state)); #undef data event->data = DEREFWORD(FINISHED(taskData, dataHandle)); break; } case Expose: { int left = ev->xexpose.x; int top = ev->xexpose.y; int right = left + ev->xexpose.width; int bottom = top + ev->xexpose.height; Handle dataHandle; while(XCheckTypedWindowEvent(d,ev->xexpose.window,Expose,ev)) { int L = ev->xexpose.x; int T = ev->xexpose.y; int R = L + ev->xexpose.width; int B = T + ev->xexpose.height; assert(ev->type == Expose); left = min(left,L); top = min(top,T); right = max(right,R); bottom = max(bottom,B); } dataHandle = alloc_and_save(taskData, SIZEOF(ML_ExposeEvent_Data), F_MUTABLE_BIT); #define data ((ML_ExposeEvent_Data *)DEREFHANDLE(dataHandle)) data->region = (MLXRectangle *)DEREFHANDLE(CreateRect(taskData, top,left,bottom,right)); data->count = DEREFWORD(Make_unsigned(taskData, 0)); #undef data event->data = DEREFWORD(FINISHED(taskData, dataHandle)); break; } case GraphicsExpose: { int left = ev->xgraphicsexpose.x; int top = ev->xgraphicsexpose.y; int right = left + ev->xgraphicsexpose.width; int bottom = top + ev->xgraphicsexpose.height; Handle dataHandle = alloc_and_save(taskData, SIZEOF(ML_GraphicsExposeEvent_Data), F_MUTABLE_BIT); #define data ((ML_GraphicsExposeEvent_Data *)DEREFHANDLE(dataHandle)) data->region = (MLXRectangle *)DEREFHANDLE(CreateRect(taskData, top,left,bottom,right)); data->count = DEREFWORD(Make_unsigned(taskData, ev->xgraphicsexpose.count)); data->code = DEREFWORD(Make_unsigned(taskData, ev->xgraphicsexpose.major_code)); #undef data event->data = DEREFWORD(FINISHED(taskData, dataHandle)); break; } case NoExpose: { event->data = DEREFWORD(Make_unsigned(taskData, ev->xnoexpose.major_code)); break; } case ConfigureNotify: { Handle dataHandle = alloc_and_save(taskData, SIZEOF(ML_ConfigureNotify_Data), F_MUTABLE_BIT); #define data ((ML_ConfigureNotify_Data *)DEREFHANDLE(dataHandle)) data->window = DEREFWINDOWHANDLE(EmptyWindow(taskData, dsHandle,ev->xconfigure.window)); data->position = (MLXPoint *) DEREFHANDLE(CreatePoint(taskData, ev->xconfigure.x,ev->xconfigure.y)); data->size = (MLXRectangle *) DEREFHANDLE(CreateArea(ev->xconfigure.width,ev->xconfigure.height)); data->borderWidth = DEREFWORD(Make_int(ev->xconfigure.border_width)); data->above = DEREFWINDOWHANDLE(EmptyWindow(taskData, dsHandle,ev->xconfigure.above)); data->overrideRedirect = DEREFWORD(Make_bool(ev->xconfigure.override_redirect)); #undef data event->data = DEREFWORD(FINISHED(taskData, dataHandle)); break; } case FocusIn: case FocusOut: { Handle dataHandle = alloc_and_save(taskData, SIZEOF(ML_FocusChangeEvent_Data), F_MUTABLE_BIT); #define data ((ML_FocusChangeEvent_Data *)DEREFHANDLE(dataHandle)) data->mode = DEREFWORD(Make_int(ev->xfocus.mode)); data->detail = DEREFWORD(Make_int(ev->xfocus.detail)); #undef data event->data = DEREFWORD(FINISHED(taskData, dataHandle)); break; } case VisibilityNotify: { event->data = DEREFWORD(Make_int(ev->xvisibility.state)); break; } case CreateNotify: { Handle dataHandle = alloc_and_save(taskData, SIZEOF(ML_CreateEvent_Data), F_MUTABLE_BIT); #define data ((ML_CreateEvent_Data *)DEREFHANDLE(dataHandle)) data->window = DEREFWINDOWHANDLE(EmptyWindow(taskData, dsHandle,ev->xcreatewindow.window)); data->position = (MLXPoint *) DEREFHANDLE(CreatePoint(taskData, ev->xcreatewindow.x,ev->xcreatewindow.y)); data->size = (MLXRectangle *) DEREFHANDLE(CreateArea(ev->xcreatewindow.width,ev->xcreatewindow.height)); data->borderWidth = DEREFWORD(Make_int(ev->xcreatewindow.border_width)); data->overrideRedirect = DEREFWORD(Make_bool(ev->xcreatewindow.override_redirect)); #undef data event->data = DEREFHANDLE(FINISHED(taskData, dataHandle)); break; } case DestroyNotify: { debugReclaim(Window,ev->xdestroywindow.window); event->data = DEREFWORD(EmptyWindow(taskData, dsHandle,ev->xdestroywindow.window)); break; } case UnmapNotify: { Handle dataHandle = alloc_and_save(taskData, SIZEOF(ML_UnmapEvent_Data), F_MUTABLE_BIT); #define data ((ML_UnmapEvent_Data *)DEREFHANDLE(dataHandle)) data->window = DEREFWINDOWHANDLE(EmptyWindow(taskData, dsHandle,ev->xunmap.window)); data->fromConfigure = DEREFWORD(Make_bool(ev->xunmap.from_configure)); #undef data event->data = DEREFWORD(FINISHED(taskData, dataHandle)); break; } case MapNotify: { Handle dataHandle = alloc_and_save(taskData, SIZEOF(ML_MapEvent_Data), F_MUTABLE_BIT); #define data ((ML_MapEvent_Data *)DEREFHANDLE(dataHandle)) data->window = DEREFWINDOWHANDLE(EmptyWindow(taskData, dsHandle,ev->xmap.window)); data->overrideRedirect = DEREFWORD(Make_bool(ev->xmap.override_redirect)); #undef data event->data = DEREFWORD(FINISHED(taskData, dataHandle)); break; } case MapRequest: { event->data = DEREFWORD(EmptyWindow(taskData, dsHandle,ev->xmaprequest.window)); break; } case ReparentNotify: { Handle dataHandle = alloc_and_save(taskData, SIZEOF(ML_ReparentEvent_Data), F_MUTABLE_BIT); #define data ((ML_ReparentEvent_Data *)DEREFHANDLE(dataHandle)) data->window = DEREFWINDOWHANDLE(EmptyWindow(taskData, dsHandle,ev->xreparent.window)); data->parent = DEREFWINDOWHANDLE(EmptyWindow(taskData, dsHandle,ev->xreparent.parent)); data->position = (MLXPoint *) DEREFHANDLE(CreatePoint(taskData, ev->xreparent.x,ev->xreparent.y)); data->overrideRedirect = DEREFWORD(Make_bool(ev->xreparent.override_redirect)); #undef data event->data = DEREFWORD(FINISHED(taskData, dataHandle)); break; } case ConfigureRequest: { Handle dataHandle = alloc_and_save(taskData, SIZEOF(ML_ConfigureRequest_Data), F_MUTABLE_BIT); #define data ((ML_ConfigureRequest_Data *)DEREFHANDLE(dataHandle)) data->window = DEREFWINDOWHANDLE(EmptyWindow(taskData, dsHandle,ev->xconfigurerequest.window)); data->position = (MLXPoint *) DEREFHANDLE(CreatePoint(taskData, ev->xconfigurerequest.x,ev->xconfigurerequest.y)); data->size = (MLXRectangle *) DEREFHANDLE(CreateArea(ev->xconfigurerequest.width,ev->xconfigurerequest.height)); data->borderWidth = DEREFWORD(Make_int(ev->xconfigurerequest.border_width)); data->above = DEREFWINDOWHANDLE(EmptyWindow(taskData, dsHandle,ev->xconfigurerequest.above)); data->detail = DEREFWORD(Make_int(ev->xconfigurerequest.detail)); #undef data event->data = DEREFWORD(FINISHED(taskData, dataHandle)); break; } case GravityNotify: { Handle dataHandle = alloc_and_save(taskData, SIZEOF(ML_GravityEvent_Data), F_MUTABLE_BIT); #define data ((ML_GravityEvent_Data *)DEREFHANDLE(dataHandle)) data->window = DEREFWINDOWHANDLE(EmptyWindow(taskData, dsHandle,ev->xgravity.window)); data->position = (MLXPoint *) DEREFHANDLE(CreatePoint(taskData, ev->xgravity.x,ev->xgravity.y)); #undef data event->data = DEREFWORD(FINISHED(taskData, dataHandle)); break; } case ResizeRequest: { event->data = DEREFWORD(CreateArea(ev->xresizerequest.width,ev->xresizerequest.height)); break; } case CirculateNotify: { Handle dataHandle = alloc_and_save(taskData, SIZEOF(ML_CirculateEvent_Data), F_MUTABLE_BIT); #define data ((ML_CirculateEvent_Data *)DEREFHANDLE(dataHandle)) data->window = DEREFWINDOWHANDLE(EmptyWindow(taskData, dsHandle,ev->xcirculate.window)); data->place = DEREFWORD(Make_int(ev->xcirculate.place)); #undef data event->data = DEREFWORD(FINISHED(taskData, dataHandle)); break; } case CirculateRequest: { Handle dataHandle = alloc_and_save(taskData, SIZEOF(ML_CirculateEvent_Data), F_MUTABLE_BIT); #define data ((ML_CirculateEvent_Data *)DEREFHANDLE(dataHandle)) data->window = DEREFWINDOWHANDLE(EmptyWindow(taskData, dsHandle,ev->xcirculaterequest.window)); data->place = DEREFWORD(Make_int(ev->xcirculaterequest.place)); #undef data event->data = DEREFWORD(FINISHED(taskData, dataHandle)); break; } case ColormapNotify: { Handle dataHandle = alloc_and_save(taskData, SIZEOF(ML_ColormapEvent_Data), F_MUTABLE_BIT); #define data ((ML_ColormapEvent_Data *)DEREFHANDLE(dataHandle)) data->colormap_object = (X_Colormap_Object *)DEREFHANDLE(EmptyColormap(taskData, dsHandle,ev->xcolormap.colormap)); data->c_new = DEREFWORD(Make_bool(ev->xcolormap.c_new)); data->installed = DEREFWORD(Make_bool(ev->xcolormap.state == ColormapInstalled)); #undef data event->data = DEREFWORD(FINISHED(taskData, dataHandle)); break; } case MappingNotify: { XRefreshKeyboardMapping((XMappingEvent *)ev); /* cast added SPF 6/1/94 */ return 0; /* HACK !!!! */ } case SelectionClear: { Handle dataHandle = alloc_and_save(taskData, SIZEOF(ML_SelectionClear_Data), F_MUTABLE_BIT); #define data ((ML_SelectionClear_Data *)DEREFHANDLE(dataHandle)) data->selection = DEREFWORD(Make_unsigned(taskData, ev->xselectionclear.selection)); data->time = DEREFWORD(Make_unsigned(taskData, ev->xselectionclear.time)); #undef data event->data = DEREFWORD(FINISHED(taskData, dataHandle)); break; } case SelectionNotify: { Handle dataHandle = alloc_and_save(taskData, SIZEOF(ML_Selection_Data), F_MUTABLE_BIT); #define data ((ML_Selection_Data *)DEREFHANDLE(dataHandle)) data->selection = DEREFWORD(Make_unsigned(taskData, ev->xselection.selection)); data->target = DEREFWORD(Make_unsigned(taskData, ev->xselection.target)); data->property = DEREFWORD(Make_unsigned(taskData, ev->xselection.property)); data->time = DEREFWORD(Make_unsigned(taskData, ev->xselection.time)); #undef data event->data = DEREFWORD(FINISHED(taskData, dataHandle)); break; } case SelectionRequest: { Handle dataHandle = alloc_and_save(taskData, SIZEOF(ML_SelectionRequest_Data), F_MUTABLE_BIT); #define data ((ML_SelectionRequest_Data *)DEREFHANDLE(dataHandle)) data->requestor = DEREFWINDOWHANDLE(EmptyWindow(taskData, dsHandle,ev->xselectionrequest.requestor)); data->selection = DEREFWORD(Make_unsigned(taskData, ev->xselectionrequest.selection)); data->target = DEREFWORD(Make_unsigned(taskData, ev->xselectionrequest.target)); data->property = DEREFWORD(Make_unsigned(taskData, ev->xselectionrequest.property)); data->time = DEREFWORD(Make_unsigned(taskData, ev->xselectionrequest.time)); #undef data event->data = DEREFWORD(FINISHED(taskData, dataHandle)); break; } case ClientMessage: { unsigned protocols = WM_PROTOCOLS(d); int deleteWindow = WM_DELETE_WINDOW(d); if (protocols != None && deleteWindow != None && ev->xclient.message_type == protocols && ev->xclient.format == 32 && ev->xclient.data.l[0] == deleteWindow) { event->type = DEREFWORD(Make_unsigned(taskData, 43)); /* (?) */ break; } else return 0; } case PropertyNotify: return 0; case KeymapNotify: return 0; /* Broken: the window field does not tell me the window requesting this event */ default: Crash ("Bad event type %x",ev->type); } event->callbacks = FList; /* Safe, since FList is a Root */ FList = TAGGED(0); event->events = GList; /* Safe, since GList is a Root */ GList = TAGGED(0); return FINISHED(taskData, eventHandle); #undef event } /******************************************************************************/ /* */ /* HERE */ /* */ /******************************************************************************/ static Handle LookupString(TaskData *taskData, Display *d, unsigned keycode, unsigned modifiers) { XKeyEvent ev; int n; KeySym keysym; /* was int SPF 6/1/94 */ char buffer[500]; ev.display = d; ev.keycode = keycode; ev.state = modifiers; n = XLookupString(&ev,buffer,sizeof(buffer)-1,&keysym,NULL); buffer[n] = '\0'; return CreatePair(taskData, Make_string(buffer),Make_unsigned(taskData, keysym)); } static Handle GetScreenSaver(TaskData *taskData, Display *d) { int timeout,interval,blanking,exposures; Handle tuple; XGetScreenSaver(d,&timeout,&interval,&blanking,&exposures); tuple = alloc_and_save(taskData, 4, F_MUTABLE_BIT); #define data DEREFHANDLE(tuple) data->Set(0, DEREFWORD(Make_int(timeout))); data->Set(1, DEREFWORD(Make_int(interval))); data->Set(2, DEREFWORD(Make_unsigned(taskData, blanking))); data->Set(3, DEREFWORD(Make_unsigned(taskData, exposures))); #undef data return FINISHED(taskData, tuple); } static Handle TranslateCoordinates ( TaskData *taskData, Handle dsHandle, /* Handle to (X_Display_Object *) */ Window src, Window dst, int x, int y ) { Window child; int dx,dy,s; s = XTranslateCoordinates(DEREFDISPLAYHANDLE(dsHandle)->display,src,dst,x,y,&dx,&dy,&child); if (s == 0) RaiseXWindows(taskData, "XTranslateCoordinates failed"); return CreatePair(taskData, CreatePoint(taskData, dx,dy),EmptyWindow(taskData, dsHandle,child)); } static Handle QueryBest ( TaskData *taskData, int (*f)(Display*, Drawable, unsigned, unsigned, unsigned *, unsigned *), Display *d, Drawable drawable, unsigned width, unsigned height ) { unsigned W,H; int s = (* f)(d,drawable,width,height,&W,&H); if (s == 0) RaiseXWindows(taskData, "XQueryBest failed"); return CreateArea(W,H); } static Handle QueryPointer ( TaskData *taskData, Handle dsHandle, /* Handle to (X_Display_Object *) */ Window w ) { Window root,child; int rootX,rootY; int winX,winY; unsigned mask; int s; Handle tuple; s = XQueryPointer(DEREFDISPLAYHANDLE(dsHandle)->display,w,&root,&child,&rootX,&rootY,&winX,&winY,&mask); tuple = alloc_and_save(taskData, 6, F_MUTABLE_BIT); #define data DEREFHANDLE(tuple) data->Set(0, DEREFWORD(Make_unsigned(taskData, s))); data->Set(1, DEREFWORD(EmptyWindow(taskData, dsHandle,root))); data->Set(2, DEREFWORD(EmptyWindow(taskData, dsHandle,child))); data->Set(3, DEREFWORD(CreatePoint(taskData, rootX,rootY))); data->Set(4, DEREFWORD(CreatePoint(taskData, winX,winY))); data->Set(5, DEREFWORD(Make_unsigned(taskData, mask))); #undef data return FINISHED(taskData, tuple); } static Handle ReadBitmap ( TaskData *taskData, Handle dsHandle, /* handle to (X_Display_Object *) */ Drawable w, PolyStringObject *string ) { unsigned width,height; char name[500]; int s,xhot,yhot; Pixmap pixmap; Handle tuple; Poly_string_to_C(string,name,sizeof(name)); s = XReadBitmapFile(DEREFDISPLAYHANDLE(dsHandle)->display,w,name,&width,&height,&pixmap,&xhot,&yhot); tuple = alloc_and_save(taskData, 4, F_MUTABLE_BIT); #define data DEREFHANDLE(tuple) data->Set(0,DEREFWORD(Make_unsigned(taskData, s))); if (s == BitmapSuccess) { data->Set(1, DEREFWORD(EmptyPixmap(taskData, dsHandle,pixmap))); data->Set(2, DEREFWORD(CreateArea(width,height))); data->Set(3, DEREFWORD(CreatePoint(taskData, xhot,yhot))); } /******************** What if we don't succeed? Badly-formed tuple !!!! */ #undef data return FINISHED(taskData, tuple); } static Handle WriteBitmapFile ( TaskData *taskData, PolyStringObject *string, Display *d, Pixmap bitmap, unsigned w, unsigned h, int x, int y ) { char name[500]; int s; Poly_string_to_C(string,name,sizeof(name)); s = XWriteBitmapFile(d,name,bitmap,w,h,x,y); return Make_unsigned(taskData, s); } static Handle GetDefault(TaskData *taskData, Display *d, PolyStringObject *s1, PolyStringObject *s2) { char program[500]; char option[500]; char *s; Poly_string_to_C(s1,program,sizeof(program)); Poly_string_to_C(s2,option ,sizeof(option)); s = XGetDefault(d,program,option); if (s == NULL) RaiseXWindows(taskData, "XGetDefault failed"); return Make_string(s); } static void GetWindows(TaskData *taskData, PolyWord p, void *w, unsigned) { *(Window *)w = GetWindow(taskData, (X_Object *)p.AsObjPtr()); } static void GetSegments(TaskData *taskData, PolyWord pp, void *w, unsigned) { XSegment *A = (XSegment *)w; PolyObject *p = pp.AsObjPtr(); A->x1 = GetPointX(taskData, p->Get(0)); A->y1 = GetPointY(taskData, p->Get(0)); A->x2 = GetPointX(taskData, p->Get(1)); A->y2 = GetPointY(taskData, p->Get(1)); } static void GetChar2(TaskData *taskData, PolyWord p, void *v, unsigned) { XChar2b *A = (XChar2b *)v; unsigned u = get_C_ushort(taskData, p); A->byte1 = u >> 8; A->byte2 = u &0xFF; } static void CopyString(TaskData *, PolyWord w, void *v, unsigned) { char **p = (char**)v; PolyStringObject *s = GetString(w); POLYUNSIGNED n = s->length+1; *p = (char*)malloc(n); Poly_string_to_C(s,*p,n); } static void GetText(TaskData *taskData, PolyWord p, void *w, unsigned) { XTextItem *A = (XTextItem *)w; PolyObject *obj = p.AsObjPtr(); CopyString(taskData, obj->Get(0), &A->chars, 0); A->nchars = strlen(A->chars); A->delta = get_C_short(taskData, obj->Get(1)); A->font = GetFont(taskData, (X_Object *)obj->Get(2).AsObjPtr()); } static void GetText16(TaskData *taskData, PolyWord p, void *v, unsigned) { XTextItem16 *A = (XTextItem16 *)v; PolyObject *obj = p.AsObjPtr(); unsigned N = ListLength(obj->Get(0)); XChar2b *L = (XChar2b *) malloc(N * sizeof(XChar2b)); GetList4(taskData,obj->Get(0),L,sizeof(XChar2b),GetChar2); A->chars = L; A->nchars = N; A->delta = get_C_short(taskData, obj->Get(1)); A->font = GetFont(taskData, (X_Object *)obj->Get(2).AsObjPtr()); } typedef void (*GetFunc)(TaskData *taskData, PolyWord, void*, unsigned); static void SetClipRectangles ( TaskData *taskData, Display *d, GC gc, int x, int y, Handle list, unsigned order ) { if (ISNIL(DEREFWORD(list))) { XSetClipRectangles(d,gc,x,y,NULL,0,order); } else { unsigned N = ListLength(DEREFWORD(list)); XRectangle *L = (XRectangle *) alloca(N * sizeof(XRectangle)); GetList4(taskData, DEREFWORD(list),L,sizeof(XRectangle),GetRects); XSetClipRectangles(d,gc,x,y,L,N,order); } } static void GetUChars(TaskData *taskData, PolyWord p, void *u, unsigned) { *(uchar*)u = get_C_uchar(taskData, p); } static void SetDashes ( TaskData *taskData, Display *d, GC gc, unsigned offset, Handle list ) { if (NONNIL(DEREFWORD(list))) { unsigned N = ListLength(DEREFWORD(list)); char *D = (char *) alloca(N); GetList4(taskData,DEREFWORD(list),D,sizeof(uchar),GetUChars); XSetDashes(d,gc,offset,D,N); } } static Handle CreateDrawable ( TaskData *taskData, void *p, Handle dsHandle /* Handle to (X_Display_Object *) */ ) { return EmptyWindow(taskData, dsHandle,*(Window*)p); } static Handle QueryTree ( TaskData *taskData, Handle dsHandle, /* Handle to (X_Display_Object *) */ Window w ) { Window root,parent,*children; unsigned n; Handle data; int s = XQueryTree(DEREFDISPLAYHANDLE(dsHandle)->display,w,&root,&parent,&children,&n); if (s == 0) RaiseXWindows(taskData, "XQueryTree failed"); data = CreateTriple(taskData, EmptyWindow(taskData, dsHandle,root), EmptyWindow(taskData, dsHandle,parent), CreateList5(taskData, n,children,sizeof(Window),CreateDrawable,dsHandle)); if (n) XFree((char *)children); return data; } static void RestackWindows(TaskData *taskData, Handle list /* handle to list of X_Window_Objects (?) */) { if (NONNIL(DEREFWORD(list))) { unsigned N = ListLength(DEREFWORD(list)); Window *W = (Window *) alloca(N * sizeof(Window)); Display *d = GetDisplay(taskData, (X_Object *)DEREFLISTHANDLE(list)->h.AsObjPtr()); GetList4(taskData, DEREFWORD(list),W,sizeof(Window),GetWindows); XRestackWindows(d,W,N); } } static Handle GetGeometry ( TaskData *taskData, Handle dsHandle, /* Handle to (X_Display_Object *) */ Drawable w ) { int x,y; unsigned width,height,borderWidth,depth; Window root; Handle dataHandle; int s = XGetGeometry(DEREFDISPLAYHANDLE(dsHandle)->display,w,&root,&x,&y,&width,&height,&borderWidth,&depth); if (s == 0) RaiseXWindows(taskData, "XGetGeometry failed"); dataHandle = alloc_and_save(taskData, 5, F_MUTABLE_BIT); #define data DEREFHANDLE(dataHandle) data->Set(0, DEREFWORD(EmptyWindow(taskData, dsHandle,root))); data->Set(1, DEREFWORD(CreatePoint(taskData, x,y))); data->Set(2, DEREFWORD(CreateArea(width,height))); data->Set(3, DEREFWORD(Make_unsigned(taskData, borderWidth))); data->Set(4, DEREFWORD(Make_unsigned(taskData, depth))); #undef data return FINISHED(taskData, dataHandle); } static Handle GetWindowAttributes ( TaskData *taskData, Handle dsHandle, /* Handle to (X_Display_Object *) */ Drawable w ) { XWindowAttributes wa; Handle dataHandle; int s = XGetWindowAttributes(DEREFDISPLAYHANDLE(dsHandle)->display,w,&wa); if (s == 0) RaiseXWindows(taskData, "XGetWindowAttributes failed"); dataHandle = alloc_and_save(taskData, 20, F_MUTABLE_BIT); /* HACKY - should define struct? */ DEREFHANDLE(dataHandle)->Set( 0, DEREFWORD(CreatePoint(taskData, wa.x,wa.y))); DEREFHANDLE(dataHandle)->Set( 1, DEREFWORD(CreateArea(wa.width,wa.height))); DEREFHANDLE(dataHandle)->Set( 2, DEREFWORD(Make_int(wa.border_width))); DEREFHANDLE(dataHandle)->Set( 3, DEREFWORD(Make_unsigned(taskData, wa.depth))); DEREFHANDLE(dataHandle)->Set( 4, DEREFWORD(EmptyVisual(taskData, dsHandle,wa.visual))); DEREFHANDLE(dataHandle)->Set( 5, DEREFWORD(EmptyWindow(taskData, dsHandle,wa.root))); DEREFHANDLE(dataHandle)->Set( 6, DEREFWORD(Make_unsigned(taskData, wa.c_class))); DEREFHANDLE(dataHandle)->Set( 7, DEREFWORD(Make_unsigned(taskData, wa.bit_gravity))); DEREFHANDLE(dataHandle)->Set( 8, DEREFWORD(Make_unsigned(taskData, wa.win_gravity))); DEREFHANDLE(dataHandle)->Set( 9, DEREFWORD(Make_unsigned(taskData, wa.backing_store))); DEREFHANDLE(dataHandle)->Set(10, DEREFWORD(Make_unsigned(taskData, wa.backing_planes))); DEREFHANDLE(dataHandle)->Set(11, DEREFWORD(Make_unsigned(taskData, wa.backing_pixel))); DEREFHANDLE(dataHandle)->Set(12, DEREFWORD(Make_bool(wa.save_under))); DEREFHANDLE(dataHandle)->Set(13, DEREFWORD(EmptyColormap(taskData, dsHandle,wa.colormap))); DEREFHANDLE(dataHandle)->Set(14, DEREFWORD(Make_bool(wa.map_installed))); DEREFHANDLE(dataHandle)->Set(15, DEREFWORD(Make_unsigned(taskData, wa.map_state))); DEREFHANDLE(dataHandle)->Set(16, DEREFWORD(Make_unsigned(taskData, wa.all_event_masks))); DEREFHANDLE(dataHandle)->Set(17, DEREFWORD(Make_unsigned(taskData, wa.your_event_mask))); DEREFHANDLE(dataHandle)->Set(18, DEREFWORD(Make_unsigned(taskData, wa.do_not_propagate_mask))); DEREFHANDLE(dataHandle)->Set(19, DEREFWORD(Make_bool(wa.override_redirect))); return FINISHED(taskData, dataHandle); } static void ChangeWindowAttributes ( TaskData *taskData, X_Window_Object *W, unsigned n, PolyWord P ) { XSetWindowAttributes a; unsigned mask = 1 << n; switch(mask) { case CWBitGravity: a.bit_gravity = get_C_ulong(taskData, P); break; case CWWinGravity: a.win_gravity = get_C_ulong(taskData, P); break; case CWBackingStore: a.backing_store = get_C_ulong(taskData, P); break; case CWBackingPlanes: a.backing_planes = get_C_ulong(taskData, P); break; case CWBackingPixel: a.backing_pixel = get_C_ulong(taskData, P); break; case CWOverrideRedirect: a.override_redirect = get_C_ulong(taskData, P); break; case CWSaveUnder: a.save_under = get_C_ulong(taskData, P); break; case CWEventMask: a.event_mask = get_C_ulong(taskData, P); break; case CWDontPropagate: a.do_not_propagate_mask = get_C_ulong(taskData, P); break; case CWBackPixel: a.background_pixel = get_C_ulong(taskData, P); W->backgroundPixmap = 0; break; case CWBackPixmap: a.background_pixmap = GetPixmap(taskData, (X_Object *)P.AsObjPtr()); W->backgroundPixmap = PixmapObject((X_Object *)P.AsObjPtr()); break; case CWBorderPixel: a.border_pixel = get_C_ulong(taskData, P); W->borderPixmap = 0; break; case CWBorderPixmap: a.border_pixmap = GetPixmap(taskData, (X_Object *)P.AsObjPtr()); W->borderPixmap = PixmapObject((X_Object *)P.AsObjPtr()); break; case CWColormap: a.colormap = GetColormap(taskData, (X_Object *)P.AsObjPtr()); W->colormap_object = ColormapObject((X_Object *)P.AsObjPtr()); break; case CWCursor: a.cursor = GetCursor(taskData, (X_Object *)P.AsObjPtr()); W->cursor_object = CursorObject((X_Object *)P.AsObjPtr()); break; default: Crash ("Bad window mask %u",mask); } XChangeWindowAttributes(GetDisplay(taskData, (X_Object *)W),GetWindow(taskData, (X_Object *)W),mask,&a); } static void ConfigureWindow ( TaskData *taskData, Display *d, Window w, PolyWord tup /* (P,S,w,d,s,flags) */ ) { PolyObject *tuple = tup.AsObjPtr(); XWindowChanges wc; unsigned mask = get_C_ulong(taskData, tuple->Get(5)); CheckZeroRect(taskData, tuple->Get(1)); wc.x = GetPointX (taskData,tuple->Get(0)); wc.y = GetPointY (taskData,tuple->Get(0)); wc.width = GetRectW (taskData,tuple->Get(1)); wc.height = GetRectH (taskData,tuple->Get(1)); wc.border_width = get_C_ulong(taskData, tuple->Get(2)); wc.sibling = GetWindow (taskData,(X_Object *)tuple->Get(3).AsObjPtr()); wc.stack_mode = get_C_ulong(taskData, tuple->Get(4)); XConfigureWindow(d,w,mask,&wc); } /* The order of these depends on the XColor datatype */ typedef struct { PolyWord red; /* ML bool */ PolyWord blue; /* ML bool */ PolyWord doRed; /* ML bool */ PolyWord green; /* ML int */ PolyWord pixel; /* ML int */ PolyWord doBlue; /* ML int */ PolyWord doGreen; /* ML int */ } MLXColor; /* in Poly heap */ static void ClearXColor(XColor *x) { x->red = x->green = x->blue = x->pixel = x->flags = 0; } static Handle CreateXColor(TaskData *taskData, XColor *x) { Handle XHandle = alloc_and_save(taskData, SIZEOF(MLXColor), F_MUTABLE_BIT); #define X ((MLXColor *)DEREFHANDLE(XHandle)) X->red = DEREFWORD(Make_unsigned(taskData, x->red)); X->green = DEREFWORD(Make_unsigned(taskData, x->green)); X->blue = DEREFWORD(Make_unsigned(taskData, x->blue)); X->pixel = DEREFWORD(Make_unsigned(taskData, x->pixel)); X->doRed = DEREFWORD(Make_bool(x->flags &DoRed)); X->doGreen = DEREFWORD(Make_bool(x->flags &DoGreen)); X->doBlue = DEREFWORD(Make_bool(x->flags &DoBlue)); #undef X return FINISHED(taskData, XHandle); } static Handle CreateXColorF(TaskData *taskData, void *p) { return CreateXColor(taskData, (XColor*)p); } static XColor xcolor1 = { 0 }; static XColor xcolor2 = { 0 }; static void GetXColor(TaskData *taskData, PolyWord p, void *v, unsigned) { MLXColor *P = (MLXColor *)p.AsObjPtr(); XColor *x = (XColor *)v; x->red = get_C_ushort(taskData, P->red); x->green = get_C_ushort(taskData, P->green); x->blue = get_C_ushort(taskData, P->blue); x->pixel = get_C_ulong (taskData, P->pixel); x->flags = (DoRed * get_C_ulong(taskData, P->doRed)) | (DoGreen * get_C_ulong(taskData, P->doGreen)) | (DoBlue * get_C_ulong(taskData, P->doBlue)); } static XColor *GetXColor1(TaskData *taskData, PolyWord P) { GetXColor(taskData, P, &xcolor1, 0); return &xcolor1; } static XColor *GetXColor2(TaskData *taskData, PolyWord P) { GetXColor(taskData, P, &xcolor2, 0); return &xcolor2; } static Handle AllocColor(TaskData *taskData, Display *d, Colormap cmap, XColor *x) { int s = XAllocColor(d,cmap,x); if (s == 0) RaiseXWindows(taskData, "XAllocColor failed"); return CreateXColor(taskData, x); } static Handle CreateUnsigned(TaskData *taskData, void *q) { unsigned *p = (unsigned *)q; return Make_unsigned(taskData, *p); } static Handle CreateUnsignedLong(TaskData *taskData, void *p) { return Make_unsigned(taskData, *(unsigned long*)p); } static Handle AllocColorCells ( TaskData *taskData, Display *d, Colormap cmap, unsigned contig, unsigned nplanes, unsigned ncolors ) { unsigned long *masks; /* was unsigned SPF 6/1/94 */ unsigned long *pixels; /* was unsigned SPF 6/1/94 */ int s; if (ncolors < 1) RaiseRange(taskData); masks = (unsigned long *) alloca(nplanes * sizeof(unsigned long)); pixels = (unsigned long *) alloca(ncolors * sizeof(unsigned long)); s = XAllocColorCells(d,cmap,contig,masks,nplanes,pixels,ncolors); if (s == 0) RaiseXWindows (taskData, "XAllocColorCells failed"); return CreatePair(taskData, CreateList4(taskData,nplanes,masks ,sizeof(unsigned long),CreateUnsignedLong), CreateList4(taskData,ncolors,pixels,sizeof(unsigned long),CreateUnsignedLong)); } static Handle AllocColorPlanes ( TaskData *taskData, Display *d, Colormap cmap, unsigned contig, unsigned ncolors, unsigned nreds, unsigned ngreens, unsigned nblues ) { unsigned long rmask; /* was unsigned SPF 6/1/94 */ unsigned long gmask; /* was unsigned SPF 6/1/94 */ unsigned long bmask; /* was unsigned SPF 6/1/94 */ unsigned long *pixels; /* was unsigned SPF 6/1/94 */ Handle tuple; int s; if (ncolors < 1) RaiseRange(taskData); pixels = (unsigned long *) alloca(ncolors * sizeof(unsigned long)); s = XAllocColorPlanes(d,cmap,contig,pixels,ncolors,nreds,ngreens,nblues,&rmask,&gmask,&bmask); if (s == 0) RaiseXWindows (taskData, "XAllocColorPlanes failed"); tuple = alloc_and_save(taskData, 4, F_MUTABLE_BIT); #define data DEREFHANDLE(tuple) data->Set(0, DEREFWORD(CreateList4(taskData,ncolors,pixels,sizeof(unsigned long),CreateUnsignedLong))); data->Set(1, DEREFWORD(Make_unsigned(taskData, rmask))); data->Set(2, DEREFWORD(Make_unsigned(taskData, gmask))); data->Set(3, DEREFWORD(Make_unsigned(taskData, bmask))); #undef data return FINISHED(taskData, tuple); } static Handle AllocNamedColor(TaskData *taskData, Display *d, Colormap cmap, PolyStringObject *string) { char name[500]; int s; XColor hardware; XColor database; ClearXColor(&hardware); ClearXColor(&database); Poly_string_to_C(string,name,sizeof(name)); s = XAllocNamedColor(d,cmap,name,&hardware,&database); if (s == 0) RaiseXWindows (taskData, "XAllocNamedColor failed"); return CreatePair(taskData, CreateXColor(taskData, &hardware),CreateXColor(taskData, &database)); } static Handle LookupColor(TaskData *taskData, Display *d, Colormap cmap, PolyStringObject *string) { char name[500]; int s; XColor hardware; XColor database; ClearXColor(&hardware); ClearXColor(&database); Poly_string_to_C(string,name,sizeof(name)); s = XLookupColor(d,cmap,name,&database,&hardware); if (s == 0) RaiseXWindows (taskData, "XLookupColor failed"); return CreatePair(taskData, CreateXColor(taskData, &database),CreateXColor(taskData, &hardware)); } static Handle ParseColor(TaskData *taskData, Display *d, Colormap cmap, PolyStringObject *string) { char name[500]; int s; XColor x; ClearXColor(&x); Poly_string_to_C(string,name,sizeof(name)); s = XParseColor(d,cmap,name,&x); if (s == 0) RaiseXWindows(taskData, "XParseColor failed"); return CreateXColor(taskData, &x); } static Handle QueryColor(TaskData *taskData, Display *d, Colormap cmap, unsigned pixel) { XColor x; ClearXColor(&x); x.pixel = pixel; XQueryColor(d,cmap,&x); return CreateXColor(taskData, &x); } static void GetXPixel(TaskData *taskData, PolyWord p, void *v, unsigned) { XColor *X = (XColor *)v; ClearXColor(X); X->pixel = get_C_ulong(taskData, p); } static Handle QueryColors(TaskData *taskData, Display *d, Colormap cmap, Handle list) { unsigned N = ListLength(DEREFWORD(list)); XColor *P = (XColor *) alloca(N * sizeof(XColor)); GetList4(taskData, DEREFWORD(list),P,sizeof(XColor),GetXPixel); XQueryColors(d,cmap,P,N); return CreateList4(taskData,N,P,sizeof(XColor),CreateXColorF); } static void StoreNamedColor ( Display *d, Colormap cmap, PolyStringObject *string, unsigned pixel, unsigned doRed, unsigned doGreen, unsigned doBlue ) { unsigned flags = (DoRed * doRed) | (DoGreen * doGreen) | (DoBlue * doBlue); char name[500]; Poly_string_to_C(string,name,sizeof(name)); XStoreNamedColor(d,cmap,name,pixel,flags); } static void StoreColors(TaskData *taskData, Display *d, Colormap cmap, Handle list) { unsigned N = ListLength(DEREFWORD(list)); XColor *P = (XColor *) alloca(N * sizeof(XColor)); GetList4(taskData, DEREFWORD(list),P,sizeof(XColor),GetXColor); XStoreColors(d,cmap,P,N); } static void GetUnsigned(TaskData *taskData, PolyWord p, void *v, unsigned) { unsigned *u = (unsigned *)v; *u = get_C_ulong(taskData, p); } static void GetUnsignedLong(TaskData *taskData, PolyWord p, void *v, unsigned) { unsigned long *u = (unsigned long *)v; *u = get_C_ulong(taskData, p); } static void FreeColors ( TaskData *taskData, Display *d, Colormap cmap, Handle list, unsigned planes ) { unsigned N = ListLength(DEREFWORD(list)); unsigned long *P = (unsigned long *) alloca(N * sizeof(unsigned long)); GetList4(taskData,DEREFWORD(list),P,sizeof(unsigned long),GetUnsignedLong); XFreeColors(d,cmap,P,N,planes); } static Handle CreateColormap ( TaskData *taskData, void *p, Handle dsHandle /* handle to (X_Display_Object *) */ ) { return EmptyColormap(taskData, dsHandle,*(Colormap *)p); } static Handle ListInstalledColormaps ( TaskData *taskData, Handle dsHandle, /* handle to (X_Display_Object *) */ Drawable drawable ) { int count; Colormap *cmaps; Handle list; cmaps = XListInstalledColormaps(DEREFDISPLAYHANDLE(dsHandle)->display,drawable,&count); if (cmaps == 0) RaiseXWindows(taskData, "XListInstalledColormaps failed"); list = CreateList5(taskData,count,cmaps,sizeof(Colormap),CreateColormap,dsHandle); XFree((char *)cmaps); return list; } static Handle GetTimeOfDay(TaskData *taskData) { TimeVal now; gettimeofday(&now, NULL); return CreatePair(taskData, Make_unsigned(taskData, now.tv_sec),Make_unsigned(taskData, now.tv_usec)); } static Handle GetState(TaskData *taskData, X_Window_Object *P) { assert(UNTAGGED(P->type) == X_Window); CheckExists((X_Object *)P,window); if (ISNIL(P->handler)) Crash ("No handler set"); return CreatePair(taskData, SAVE(P->handler),SAVE(P->state)); } static void SetState(X_Window_Object *W, PolyWord handler, PolyWord state) { if (! ResourceExists((X_Object *)W)) return; assert(W->type == TAGGED(X_Window)); if (NONNIL(handler)) { /* we are setting the handler and initial state */ /* so we need to remove all pending messages for */ /* this window since they will have the wrong type */ PurgePendingWindowMessages(W); W->handler = handler; W->state = state; } else W->state = state; /* just update state */ } /* Check if the first timer event has already expired. */ static void CheckTimerQueue(void) { if (TList) { TimeVal now; gettimeofday(&now, NULL); TList->expired = TimeLeq(&TList->timeout,&now); } } static void InsertTimeout ( TaskData *taskData, X_Window_Object *window_object, unsigned ms, PolyWord alpha, PolyWord handler ) { T_List **tail; T_List *newp; TimeVal now; assert(window_object->type == TAGGED(X_Window)); CheckExists((X_Object *)window_object,window); if (ISNIL(window_object->handler)) Crash ("No handler set"); if (window_object->handler != handler) RaiseXWindows(taskData, "Handler mismatch"); { /* find insertion point in list */ TimeVal dt; gettimeofday(&now, NULL); dt.tv_sec = ms / 1000; dt.tv_usec = 1000 * (ms % 1000); newp = (T_List *) malloc(sizeof(T_List)); TimeAdd(&now,&dt,&newp->timeout); /* We use TimeLt here, not TimeLeq, because we want to add new messages AFTER existing ones. SPF 21/3/97 */ for(tail = &TList; *tail; tail = &(*tail)->next) { if (TimeLt(&newp->timeout,&(*tail)->timeout)) break; } } newp->next = *tail; newp->window_object = window_object; newp->widget_object = (X_Widget_Object *)0; newp->alpha = alpha.AsObjPtr(); newp->handler = handler.AsObjPtr(); newp->expired = 0; *tail = newp; } /* called when a widget is destroyed by Xt/Motif */ static void DestroyWidgetCallback ( Widget widget, XtPointer client_data, XtPointer call_data ) { /* find the ML widget (if any) associated with the C widget */ X_Widget_Object *widget_object = FindWidget(widget); if (widget_object != NULL) { /* Destroy the ML widget representations */ DestroyXObject((X_Object *)widget_object); /* Assume we can't get a C callback from a destroyed widget */ PurgeCCallbacks(widget_object,widget); } debugReclaim(Widget,widget); } #if 0 #define CheckRealized(Widget,Where)\ { \ if (XtIsRealized(Widget) == False) \ RaiseXWindows(taskData, #Where ": widget is not realized"); \ } static Window WindowOfWidget(TaskData *taskData, Widget widget) { CheckRealized(widget,WindowOfWidget); return XtWindowOfObject(widget); } #endif /* Now returns NULL (None) for unrealized widgets SPF 1/2/94 */ static Window WindowOfWidget(Widget widget) { return XtIsRealized(widget) ? XtWindowOfObject(widget) : None; } static void InsertWidgetTimeout ( TaskData *taskData, X_Widget_Object *widget_object, unsigned ms, PolyWord alpha, PolyWord handler ) { T_List **tail; T_List *newp; TimeVal now; assert(widget_object->type == TAGGED(X_Widget)); CheckExists((X_Object *)widget_object,widget); #if NEVER CheckRealized(GetWidget(taskData, (X_Object *)widget_object),InsertWidgetTimeout); #endif /* check that handler occurs in widget's callback list */ { PolyWord p = widget_object->callbackList; for(; NONNIL(p); p = ((ML_Cons_Cell*)p.AsObjPtr())->t) { MLPair *q = (MLPair *)((ML_Cons_Cell*)p.AsObjPtr())->h.AsObjPtr(); if (SND(q) == handler) break; } if (ISNIL(p)) RaiseXWindows(taskData, "Handler mismatch"); } { TimeVal dt; gettimeofday(&now, NULL); dt.tv_sec = ms / 1000; dt.tv_usec = 1000 * (ms % 1000); newp = (T_List *) malloc(sizeof(T_List)); TimeAdd(&now,&dt,&newp->timeout); /* We use TimeNegative here, not TimeExpired, because we want to add new messages AFTER existing ones. SPF 21/3/97 */ for(tail = &TList; *tail; tail = &(*tail)->next) { if (TimeLt(&newp->timeout,&(*tail)->timeout)) break; } } newp->next = *tail; newp->window_object = (X_Window_Object *)0; newp->widget_object = widget_object; newp->alpha = alpha.AsObjPtr(); newp->handler = handler.AsObjPtr(); newp->expired = 0; *tail = newp; } static Handle NextEvent(TaskData *taskData, Handle dsHandle /* handle to (X_Display_Object *) */) { for (;;) { /* Added here SPF 23/2/95 - check whether a timer event has expired */ CheckTimerQueue(); if (TList && TList->expired) { T_List *next = TList->next; EventHandle E = alloc_and_save(taskData, SIZEOF(ML_Event), F_MUTABLE_BIT); #define event ((ML_Event *)DEREFHANDLE(E)) event->type = DEREFWORD(Make_unsigned(taskData, 99)); event->sendEvent = DEREFWORD(Make_bool(True)); event->data = TList->alpha; if (TList->window_object != 0) { assert(TList->widget_object == 0); event->window = TList->window_object; event->callbacks = ListNull; event->events = ListNull; assert(TList->window_object->handler == TList->handler); } else /* it is a Widget message */ { /* TList->widget_object etc. act like Roots */ assert(TList->widget_object != 0); { Window w = WindowOfWidget(GetWidget(taskData, (X_Object *)TList->widget_object)); event->window = DEREFWINDOWHANDLE(EmptyWindow(taskData, GetDS(taskData, (X_Object *)TList->widget_object),w)); } { /* create callback list - allocates storage */ Handle tailHandle = SAVE(ListNull); Handle widgetHandle = SAVE(TList->widget_object); Handle handlerHandle = SAVE(TList->handler); Handle pairHandle = CreatePair(taskData, widgetHandle,handlerHandle); event->callbacks = DEREFLISTHANDLE(CreatePair(taskData, pairHandle,tailHandle)); event->events = ListNull; } } #undef event free(TList); TList = next; return FINISHED(taskData, E); } else /* ! (TList && TList->expired) */ if (DEREFDISPLAYHANDLE(dsHandle)->app_context == 0) /* use XNextEvent to get next event */ { Display *display = DEREFDISPLAYHANDLE(dsHandle)->display; int pending = XPending(display); if (pending == 0) { process_may_block(taskData, display->fd, POLY_SYS_XWindows); } else /* X Event arrived */ { XEvent ev; X_Window_Object *W; XNextEvent(display,&ev); W = FindWindow(dsHandle,ev.xany.window); if (W && NONNIL(W->handler)) { EventHandle E = CreateEvent(taskData, dsHandle,&ev,SAVE(W)); if (E) return E; } } } else /* use XtAppNextEvent to get next event */ { /* should use Xt to do time events as well */ int pending = XtAppPending(DEREFDISPLAYHANDLE(dsHandle)->app_context); if (pending == 0) { process_may_block(taskData, DEREFDISPLAYHANDLE(dsHandle)->display->fd, POLY_SYS_XWindows); } else { if ((pending & XtIMXEvent) == 0) /* not an X Event, probably an Xt timer event */ { assert(FList == TAGGED(0)); callbacks_enabled = True; XtAppProcessEvent(DEREFDISPLAYHANDLE(dsHandle)->app_context,pending); callbacks_enabled = False; if (FList != TAGGED(0)) { EventHandle E = alloc_and_save(taskData, SIZEOF(ML_Event), F_MUTABLE_BIT); #define event ((ML_Event *)DEREFHANDLE(E)) event->type = DEREFWORD(Make_unsigned(taskData, 100)); event->sendEvent = DEREFWORD(Make_bool(True)); event->window = TAGGED(0); event->data = TAGGED(0); event->callbacks = FList; /* FList != 0 */ event->events = GList; #undef event FList = TAGGED(0); GList = TAGGED(0); return FINISHED(taskData, E); } } else /* Xt Event arrived */ { XEvent ev; int dispatched; assert(FList == TAGGED(0)); XtAppNextEvent(DEREFDISPLAYHANDLE(dsHandle)->app_context,&ev); callbacks_enabled = True; dispatched = XtDispatchEvent(&ev); callbacks_enabled = False; if (!dispatched) { X_Window_Object *W = FindWindow(dsHandle,ev.xany.window); assert(FList == TAGGED(0) && GList == TAGGED(0)); if (W && NONNIL(W->handler)) { EventHandle E = CreateEvent(taskData, dsHandle,&ev,SAVE(W)); if (E) return E; } } else if (! FList.IsTagged() || ! GList.IsTagged()) { EventHandle E = CreateEvent(taskData, dsHandle,&ev,EmptyWindow(taskData, dsHandle,ev.xany.window)); if (E) return E; } } } } } } static Handle GetInputFocus(TaskData *taskData, Handle dsHandle /* handle to (X_Display_Object *) */) { Window focus; int revertTo; XGetInputFocus(DEREFDISPLAYHANDLE(dsHandle)->display,&focus,&revertTo); return CreatePair(taskData, EmptyWindow(taskData, dsHandle,focus),Make_unsigned(taskData, revertTo)); } static void SetSelectionOwner ( Handle dsHandle, /* handle to (X_Display_Object *) */ unsigned selection, Window owner, unsigned time ) { Window old = XGetSelectionOwner(DEREFDISPLAYHANDLE(dsHandle)->display,selection); if (old != owner) { /* SelectionClear is only sent by the server when the ownership of a */ /* selection passes from one client to another. We want every ML */ /* window to behave like a separate client, so when the ownership of */ /* a selection passes from one ML window to another we have to send */ /* the SelectionClear ourselves. */ X_Window_Object *W = FindWindow(dsHandle,old); if (W && NONNIL(W->handler)) /* this clients window */ { XEvent event; /* was XSelectionClearEvent SPF 6/1/94 */ event.xselectionclear.type = SelectionClear; event.xselectionclear.serial = 0; event.xselectionclear.send_event = True; event.xselectionclear.display = DEREFDISPLAYHANDLE(dsHandle)->display; event.xselectionclear.window = old; event.xselectionclear.selection = selection; event.xselectionclear.time = time; XSendEvent(DEREFDISPLAYHANDLE(dsHandle)->display,old,True,0,&event); } } XSetSelectionOwner(DEREFDISPLAYHANDLE(dsHandle)->display,selection,owner,time); } static void SendSelectionNotify ( Display *d, unsigned selection, unsigned target, unsigned property, Window requestor, unsigned time ) { XEvent event; /* was XSelectionEvent SPF 6/1/94 */ event.xselection.type = SelectionNotify; event.xselection.serial = 0; event.xselection.send_event = True; event.xselection.display = d; event.xselection.requestor = requestor; event.xselection.selection = selection; event.xselection.target = target; event.xselection.property = property; event.xselection.time = time; XSendEvent(d,requestor,True,0,&event); } static Handle InternAtom ( TaskData *taskData, Display *d, PolyStringObject *string, Bool only_if_exists ) { char name[500]; Poly_string_to_C(string,name,sizeof(name)); return Make_unsigned(taskData, XInternAtom(d,name,only_if_exists)); } static Handle GetAtomName(TaskData *taskData, Display *d, unsigned atom) { Handle s; char *name = XGetAtomName(d,atom); if (name == NULL) RaiseXWindows(taskData, "XGetAtomName failed"); s = Make_string(name); XFree((char *)name); return s; } /* The order of these depends on the XCharStruct datatype */ typedef struct { PolyWord width; /* ML int */ PolyWord ascent; /* ML int */ PolyWord descent; /* ML int */ PolyWord lbearing; /* ML int */ PolyWord rbearing; /* ML int */ PolyWord attributes; /* ML int */ } MLXCharStruct; static Handle CreateCharStruct(TaskData *taskData, void *v) { XCharStruct *cs = (XCharStruct *)v; Handle dataHandle = alloc_and_save(taskData, SIZEOF(MLXCharStruct), F_MUTABLE_BIT); #define data ((MLXCharStruct *)DEREFHANDLE(dataHandle)) data->width = DEREFWORD(Make_int(cs->width)); data->ascent = DEREFWORD(Make_int(cs->ascent)); data->descent = DEREFWORD(Make_int(cs->descent)); data->lbearing = DEREFWORD(Make_int(cs->lbearing)); data->rbearing = DEREFWORD(Make_int(cs->rbearing)); data->attributes = DEREFWORD(Make_unsigned(taskData, cs->attributes)); #undef data return FINISHED(taskData, dataHandle); } /* The order of these depends on the XFontStruct datatype */ typedef struct { X_Font_Object *font_object; PolyWord ascent; /* ML int */ PolyWord descent; /* ML int */ PolyWord maxChar; /* ML int */ PolyWord minChar; /* ML int */ PolyWord perChar; /* ML XCharStruct list */ PolyWord maxByte1; /* ML int */ PolyWord minByte1; /* ML int */ PolyWord direction; /* (short ML int) FontLeftToRight | FontRightToLeft */ MLXCharStruct *maxBounds; MLXCharStruct *minBounds; PolyWord defaultChar; /* ML int */ PolyWord allCharsExist; /* ML bool */ } MLXFontStruct; static Handle CreateFontStruct ( TaskData *taskData, void *v, Handle dsHandle /* Handle to (X_Display_Object *) */ ) { XFontStruct *fs = (XFontStruct *)v; Handle dataHandle = alloc_and_save(taskData, SIZEOF(MLXFontStruct), F_MUTABLE_BIT); int n = fs->max_char_or_byte2 - fs->min_char_or_byte2 + 1; if (fs->per_char == 0) n = 0; #define data ((MLXFontStruct *)DEREFHANDLE(dataHandle)) data->font_object = (X_Font_Object *)DEREFHANDLE(EmptyFont(taskData, dsHandle,fs->fid,fs)); data->ascent = DEREFWORD(Make_int(fs->ascent)); data->descent = DEREFWORD(Make_int(fs->descent)); data->maxChar = DEREFWORD(Make_unsigned(taskData, fs->max_char_or_byte2)); data->minChar = DEREFWORD(Make_unsigned(taskData, fs->min_char_or_byte2)); data->perChar = DEREFHANDLE(CreateList4(taskData,n,fs->per_char,sizeof(XCharStruct),CreateCharStruct)); data->maxByte1 = DEREFWORD(Make_unsigned(taskData, fs->max_byte1)); data->minByte1 = DEREFWORD(Make_unsigned(taskData, fs->min_byte1)); data->direction = DEREFWORD(Make_unsigned(taskData, (fs->direction == FontLeftToRight) ? 1 : 2)); data->maxBounds = (MLXCharStruct *)DEREFHANDLE(CreateCharStruct(taskData, &fs->max_bounds)); data->minBounds = (MLXCharStruct *)DEREFHANDLE(CreateCharStruct(taskData, &fs->min_bounds)); data->defaultChar = DEREFWORD(Make_unsigned(taskData, fs->default_char)); data->allCharsExist = DEREFWORD(Make_bool(fs->all_chars_exist)); #undef data return FINISHED(taskData, dataHandle); } static XFontStruct *GetFS(TaskData *taskData, X_Font_Object *P) { assert(UNTAGGED(P->type) == X_Font); if (*(P->fs) == NULL) RaiseXWindows(taskData, "Not a real XFontStruct"); CheckExists((X_Object *)P,font); return *(P->fs); } static XFontStruct *GetFontStruct(TaskData *taskData,PolyWord p) { MLXFontStruct *P = (MLXFontStruct *)p.AsObjPtr(); return GetFS(taskData,P->font_object); } static Handle CreateString(TaskData *taskData, void *s) { return Make_string(*(char **)s); } static Handle GetFontPath(TaskData *taskData, Display *d) { Handle list; char **names; int count; names = XGetFontPath(d,&count); if (names == 0) RaiseXWindows(taskData, "XGetFontPath failed"); list = CreateList4(taskData,count,names,sizeof(char *),CreateString); XFreeFontNames(names); return list; } static void FreeStrings(char **s, int n) { while(n--) free(*s++); return; } static void SetFontPath(TaskData *taskData, Display *d, Handle list) { if (NONNIL(DEREFWORD(list))) { unsigned N = ListLength(DEREFWORD(list)); char **D = (char **) alloca(N * sizeof(char *)); GetList4(taskData, DEREFWORD(list),D,sizeof(char *),CopyString); XSetFontPath(d,D,N); FreeStrings(D,N); } return; } static Handle ListFonts(TaskData *taskData,Display *d, PolyStringObject *string, unsigned maxnames) { char name[500]; Handle list; char **names; int count; Poly_string_to_C(string,name,sizeof(name)); names = XListFonts(d,name,maxnames,&count); if (names == 0) RaiseXWindows(taskData, "XListFonts failed"); list = CreateList4(taskData,count,names,sizeof(char *),CreateString); XFreeFontNames(names); return list; } static Handle ListFontsWithInfo ( TaskData *taskData, Handle dsHandle, /* Handle to (X_Display_Object *) */ PolyStringObject *string, unsigned maxnames ) { char name[500]; char **names; int count; XFontStruct *info; Handle pair; Poly_string_to_C(string,name,sizeof(name)); names = XListFontsWithInfo(DEREFDISPLAYHANDLE(dsHandle)->display,name,maxnames,&count,&info); if (names == 0) RaiseXWindows(taskData, "XListFontsWithInfo failed"); pair = CreatePair(taskData, CreateList4(taskData,count,names,sizeof(char *),CreateString), CreateList5(taskData,count,info,sizeof(XFontStruct),CreateFontStruct,dsHandle)); XFree((char *)info); XFreeFontNames(names); return pair; } static Handle LoadFont ( TaskData *taskData, Handle dsHandle, /* Handle to (X_Display_Object *) */ PolyStringObject *string ) { char name[500]; Font font; Poly_string_to_C(string,name,sizeof(name)); font = XLoadFont(DEREFDISPLAYHANDLE(dsHandle)->display,name); if (font == 0) RaiseXWindows(taskData, "XLoadFont failed"); return EmptyFont(taskData, dsHandle,font,(XFontStruct *)NULL); } static Handle LoadQueryFont ( TaskData *taskData, Handle dsHandle, /* Handle to (X_Display_Object *) */ PolyStringObject *string ) { char name[500]; XFontStruct *fs; Poly_string_to_C(string,name,sizeof(name)); fs = XLoadQueryFont(DEREFDISPLAYHANDLE(dsHandle)->display,name); if (fs == 0) RaiseXWindows(taskData, "XLoadQueryFont failed"); return CreateFontStruct(taskData,fs,dsHandle); } static Handle QueryFont ( TaskData *taskData, Handle dsHandle, /* Handle to (X_Display_Object *) */ Font font ) { XFontStruct *fs; fs = XQueryFont(DEREFDISPLAYHANDLE(dsHandle)->display,font); if (fs == 0) RaiseXWindows(taskData, "XQueryFont failed"); return CreateFontStruct(taskData,fs,dsHandle); } static Handle TextExtents(TaskData *taskData, XFontStruct *fs, PolyStringObject *s) { Handle dataHandle = alloc_and_save(taskData, 4, F_MUTABLE_BIT); int direction,ascent,descent; XCharStruct overall; XTextExtents(fs,s->chars,s->length,&direction,&ascent,&descent,&overall); #define data DEREFHANDLE(dataHandle) data->Set(0, DEREFWORD(Make_unsigned(taskData, (direction == FontLeftToRight) ? 1 : 2))); data->Set(1, DEREFWORD(Make_int(ascent))); data->Set(2, DEREFWORD(Make_int(descent))); data->Set(3, DEREFWORD(CreateCharStruct(taskData, &overall))); #undef data return FINISHED(taskData, dataHandle); } static Handle TextExtents16(TaskData *taskData, XFontStruct *fs, Handle list) { Handle dataHandle = alloc_and_save(taskData, 4, F_MUTABLE_BIT); int direction,ascent,descent; XCharStruct overall; unsigned N = ListLength(DEREFWORD(list)); XChar2b *L = (XChar2b *) alloca(N * sizeof(XChar2b)); GetList4(taskData,DEREFWORD(list),L,sizeof(XChar2b),GetChar2); XTextExtents16(fs,L,N,&direction,&ascent,&descent,&overall); #define data DEREFHANDLE(dataHandle) data->Set(0, DEREFWORD(Make_unsigned(taskData, (direction == FontLeftToRight) ? 1 : 2))); data->Set(1, DEREFWORD(Make_int(ascent))); data->Set(2, DEREFWORD(Make_int(descent))); data->Set(3, DEREFWORD(CreateCharStruct(taskData, &overall))); #undef data return FINISHED(taskData, dataHandle); } static Handle TextWidth(TaskData *taskData, XFontStruct *fs, PolyStringObject *s) { if (fs->per_char == 0) return Make_int(s->length * fs->max_bounds.width); return Make_int(XTextWidth(fs,s->chars,s->length)); } static Handle TextWidth16(TaskData *taskData, XFontStruct *fs, Handle list) { unsigned N = ListLength(DEREFWORD(list)); XChar2b *L = (XChar2b *) alloca(N * sizeof(XChar2b)); GetList4(taskData, DEREFWORD(list),L,sizeof(XChar2b),GetChar2); return Make_int(XTextWidth16(fs,L,N)); } static Handle GetTextProperty(TaskData *taskData, Display *d, Window w, unsigned property) { XTextProperty T; Handle tuple; int s = XGetTextProperty(d,w,&T,property); if (s == 0) RaiseXWindows(taskData, "XGetTextProperty failed"); tuple = alloc_and_save(taskData, 4, F_MUTABLE_BIT); #define data DEREFHANDLE(tuple) data->Set(0, Buffer_to_Poly(taskData, (char *)T.value,T.nitems * T.format / 8)); data->Set(1, DEREFWORD(Make_unsigned(taskData, T.encoding))); data->Set(2, DEREFWORD(Make_int(T.format))); data->Set(3, DEREFWORD(Make_unsigned(taskData, T.nitems))); #undef data return FINISHED(taskData, tuple); } static void GetXWMHints(TaskData *taskData, PolyWord p, void *v, unsigned) { PolyObject *P = p.AsObjPtr(); XWMHints *H = (XWMHints *)v; H->input = get_C_ulong(taskData, P->Get(0)); H->initial_state = get_C_ulong(taskData, P->Get(1)); H->icon_pixmap = GetPixmap(taskData, (X_Object *)P->Get(2).AsObjPtr()); H->icon_window = GetWindow(taskData, (X_Object *)P->Get(3).AsObjPtr()); H->icon_x = GetPointX(taskData, P->Get(4)); H->icon_y = GetPointY(taskData, P->Get(4)); H->icon_mask = GetPixmap(taskData, (X_Object *)P->Get(5).AsObjPtr()); H->flags = get_C_ulong(taskData, P->Get(6)); H->window_group = 0; } typedef struct { PolyWord x0; PolyWord x1; PolyWord x2; PolyWord x3; PolyWord x4; PolyWord x5; /* pair of points */ PolyWord x6; PolyWord x7; PolyWord x8; } MLXWMSizeHintsTuple; static void GetXWMSizeHints(TaskData *taskData, PolyWord p, void *v, unsigned) { MLXWMSizeHintsTuple *P = (MLXWMSizeHintsTuple *)p.AsObjPtr(); XSizeHints *H = (XSizeHints *)v; CheckZeroRect(taskData, P->x1); CheckZeroRect(taskData, P->x2); CheckZeroRect(taskData, P->x3); CheckZeroRect(taskData, P->x4); CheckZeroRect(taskData, P->x6); H->x = GetPointX(taskData, P->x0); H->y = GetPointY(taskData, P->x0); H->width = GetRectW(taskData, P->x1); H->height = GetRectH(taskData, P->x1); H->min_width = GetRectW(taskData, P->x2); H->min_height = GetRectH(taskData, P->x2); H->max_width = GetRectW(taskData, P->x3); H->max_height = GetRectH(taskData, P->x3); H->width_inc = GetRectW(taskData, P->x4); H->height_inc = GetRectH(taskData, P->x4); H->min_aspect.x = GetPointX(taskData, FST(P->x5)); H->min_aspect.y = GetPointY(taskData, FST(P->x5)); H->max_aspect.x = GetPointX(taskData, SND(P->x5)); H->max_aspect.y = GetPointY(taskData, SND(P->x5)); H->base_width = GetRectW(taskData, P->x6); H->base_height = GetRectH(taskData, P->x6); H->win_gravity = get_C_ulong(taskData, P -> x7); H->flags = get_C_ulong(taskData, P -> x8); } static void GetIconSize(TaskData *taskData, PolyWord p, void *v, unsigned) { MLTriple *P = (MLTriple *)p.AsObjPtr(); XIconSize *s = (XIconSize *)v; CheckZeroRect(taskData, FST(P)); CheckZeroRect(taskData, SND(P)); CheckZeroRect(taskData, THIRD(P)); s->min_width = GetRectW(taskData, FST(P)); s->min_height = GetRectH(taskData, FST(P)); s->max_width = GetRectW(taskData, SND(P)); s->max_height = GetRectH(taskData, SND(P)); s->width_inc = GetRectW(taskData, THIRD(P)); s->height_inc = GetRectH(taskData, THIRD(P)); } static void GetSigned(TaskData *taskData, PolyWord p, void *i, unsigned) { *(int*)i = get_C_long(taskData, p); } static void GetPixmaps(TaskData *taskData, PolyWord pp, void *m, unsigned) { X_Object *p = (X_Object *)pp.AsObjPtr(); *(Pixmap *)m = GetPixmap(taskData, p); } static void GetColormaps(TaskData *taskData, PolyWord pp, void *v, unsigned) { X_Object *p = (X_Object *)pp.AsObjPtr(); *(Colormap *)v = GetColormap(taskData, p); } static void GetCursors(TaskData *taskData, PolyWord pp, void *c, unsigned) { X_Object *p = (X_Object *)pp.AsObjPtr(); *(Cursor *)c = GetCursor(taskData, p); } static void GetDrawables(TaskData *taskData, PolyWord pp, void *d, unsigned) { X_Object *p = (X_Object *)pp.AsObjPtr(); *(Drawable *)d = GetDrawable(taskData, p); } static void GetFonts(TaskData *taskData, PolyWord pp, void *f, unsigned) { X_Object *p = (X_Object *)pp.AsObjPtr(); *(Font *)f = GetFont(taskData, p); } static void GetVisualIds(TaskData *taskData, PolyWord pp, void *u, unsigned) { X_Object *p = (X_Object *)pp.AsObjPtr(); *(unsigned *)u = GetVisual(taskData, p)->visualid; } static void SetProperty ( TaskData *taskData, Display *d, Window w, unsigned property, unsigned target, Handle list, unsigned encoding ) { unsigned format; unsigned bytes; uchar *value; /* SPF 7/7/94 - XA_STRING pulled out as special case; this enables */ /* gcc to understand the previously data-dependant control flow. */ if (encoding == XA_STRING) { PolyStringObject *s = GetString (DEREFHANDLE(list)); format = 8; bytes = s->length; value = (uchar *) s->chars; } else { unsigned length = ListLength(DEREFWORD(list)); unsigned size; GetFunc get; switch(encoding) { case XA_ATOM: size = sizeof(unsigned); get = GetUnsigned; format = 32; break; case XA_BITMAP: size = sizeof(Pixmap); get = GetPixmaps; format = 32; break; case XA_COLORMAP: size = sizeof(Colormap); get = GetColormaps; format = 32; break; case XA_CURSOR: size = sizeof(Cursor); get = GetCursors; format = 32; break; case XA_DRAWABLE: size = sizeof(Drawable); get = GetDrawables; format = 32; break; case XA_FONT: size = sizeof(Font); get = GetFonts; format = 32; break; case XA_PIXMAP: size = sizeof(Pixmap); get = GetPixmaps; format = 32; break; case XA_VISUALID: size = sizeof(unsigned); get = GetVisualIds; format = 32; break; case XA_CARDINAL: size = sizeof(unsigned); get = GetUnsigned; format = 32; break; case XA_INTEGER: size = sizeof(int); get = GetSigned; format = 32; break; case XA_WINDOW: size = sizeof(Window); get = GetWindows; format = 32; break; case XA_ARC: size = sizeof(XArc); get = GetArcs; format = 16; break; case XA_POINT: size = sizeof(XPoint); get = GetPoints; format = 16; break; case XA_RECTANGLE: size = sizeof(XRectangle); get = GetRects; format = 16; break; case XA_RGB_COLOR_MAP: size = sizeof(XStandardColormap); get = GetStandardColormap; format = 32; break; case XA_WM_HINTS: size = sizeof(XWMHints); get = GetXWMHints; format = 32; break; case XA_WM_SIZE_HINTS: size = sizeof(XSizeHints); get = GetXWMSizeHints; format = 32; break; case XA_WM_ICON_SIZE: size = sizeof(XIconSize); get = GetIconSize; format = 32; break; default: Crash ("Bad property type %x",encoding); /*NOTREACHED*/ } bytes = length * size; value = (uchar *) alloca(bytes); GetList4(taskData, DEREFWORD(list),value,(int)size,get); } { XTextProperty T; T.value = value; T.encoding = target; T.format = format; T.nitems = (bytes * 8) / format; XSetTextProperty(d,w,&T,property); } } static Handle GetWMHints ( TaskData *taskData, Handle dsHandle, /* Handle to (X_Display_Object *) */ Window w ) { Handle tuple = alloc_and_save(taskData, 7, F_MUTABLE_BIT); XWMHints *H = XGetWMHints(DEREFDISPLAYHANDLE(dsHandle)->display,w); if (H) { #define data DEREFHANDLE(tuple) data->Set(0, DEREFWORD(Make_unsigned(taskData, H->input))); data->Set(1, DEREFWORD(Make_unsigned(taskData, H->initial_state))); data->Set(2, DEREFWORD(EmptyPixmap(taskData, dsHandle,H->icon_pixmap))); data->Set(3, DEREFWORD(EmptyWindow(taskData, dsHandle,H->icon_window))); data->Set(4, DEREFWORD(CreatePoint(taskData, H->icon_x,H->icon_y))); data->Set(5, DEREFWORD(EmptyPixmap(taskData, dsHandle,H->icon_mask))); data->Set(6, DEREFWORD(Make_unsigned(taskData, H->flags))); #undef data XFree((char *)H); } /* else what (?) */ return FINISHED(taskData, tuple); } static Handle GetWMSizeHints ( TaskData *taskData, Display *d, Window w, unsigned property ) { XSizeHints H; long supplied; /* was unsigned SPF 6/1/94 */ Handle tuple = alloc_and_save(taskData, 9, F_MUTABLE_BIT); int s = XGetWMSizeHints(d,w,&H,&supplied,property); if (s) { Handle p1 = CreatePoint(taskData, H.min_aspect.x,H.min_aspect.y); Handle p2 = CreatePoint(taskData, H.max_aspect.x,H.max_aspect.y); #define data DEREFHANDLE(tuple) data->Set(0, DEREFWORD(CreatePoint(taskData, H.x,H.y))); data->Set(1, DEREFWORD(CreateArea(H.width,H.height))); data->Set(2, DEREFWORD(CreateArea(H.min_width,H.min_height))); data->Set(3, DEREFWORD(CreateArea(H.max_width,H.max_height))); data->Set(4, DEREFWORD(CreateArea(H.width_inc,H.height_inc))); data->Set(5, DEREFWORD(CreatePair(taskData, p1,p2))); data->Set(6, DEREFWORD(CreateArea(H.base_width,H.base_height))); data->Set(7, DEREFWORD(Make_unsigned(taskData, H.win_gravity))); data->Set(8, DEREFWORD(Make_unsigned(taskData, H.flags))); #undef data } /* else (?) */ return FINISHED(taskData, tuple); } #if 0 typedef struct { MLPair *x0; /* pair of points */ MLXRectangle *x1; PolyWord x2; /* ML int */ } MLWMGeometryTriple; #endif static Handle WMGeometry ( TaskData *taskData, Handle dsHandle, /* Handle to (X_Display_Object *) */ PolyStringObject *user, PolyStringObject *def, unsigned borderWidth, PolyWord P ) { XSizeHints H; int x,y,width,height,gravity,mask; char userGeometry[500],defaultGeometry[500]; GetXWMSizeHints(taskData, P, &H, 0); Poly_string_to_C(user,userGeometry ,sizeof(userGeometry)); Poly_string_to_C(def ,defaultGeometry,sizeof(defaultGeometry)); mask = XWMGeometry(DEREFDISPLAYHANDLE(dsHandle)->display, DEREFDISPLAYHANDLE(dsHandle)->screen, userGeometry, defaultGeometry, borderWidth, &H,&x,&y,&width,&height,&gravity); return CreateTriple(taskData, CreatePoint(taskData, x,y),CreateArea(width,height),Make_unsigned(taskData, gravity)); } static Handle CreateIconSize(TaskData *taskData, void *v) { XIconSize *s = (XIconSize *)v; return CreateTriple(taskData, CreateArea(s->min_width,s->min_height), CreateArea(s->max_width,s->max_height), CreateArea(s->width_inc,s->height_inc)); } static Handle GetIconSizes(TaskData *taskData, Display *d, Window w) { XIconSize *sizes; int count; int s = XGetIconSizes(d,w,&sizes,&count); if (s) { Handle list = CreateList4(taskData,count,sizes,sizeof(XIconSize),CreateIconSize); XFree((char *)sizes); return list; } return SAVE(ListNull); } static Handle GetTransientForHint ( TaskData *taskData, Handle dsHandle, /* Handle to (X_Display_Object *) */ Window w ) { Window p; int s = XGetTransientForHint(DEREFDISPLAYHANDLE(dsHandle)->display,w,&p); if (s == 0) RaiseXWindows(taskData, "XGetTransientForHint failed"); return EmptyWindow(taskData, dsHandle,p); } static Handle GetWMColormapWindows ( TaskData *taskData, Handle dsHandle, /* Handle to (X_Display_Object *) */ Window parent ) { Window *windows; int count; int s = XGetWMColormapWindows(DEREFDISPLAYHANDLE(dsHandle)->display,parent,&windows,&count); if (s) { Handle list = CreateList5(taskData,count,windows,sizeof(Window),CreateDrawable,dsHandle); XFree((char *)windows); return list; } return SAVE(ListNull); } static Handle GetRGBColormaps ( TaskData *taskData, Handle dsHandle, /* Handle to (X_Display_Object *) */ Window w, unsigned property ) { XStandardColormap *maps; int count; int s = XGetRGBColormaps(DEREFDISPLAYHANDLE(dsHandle)->display,w,&maps,&count,property); if (s) { Handle list = CreateList5(taskData,count,maps,sizeof(XStandardColormap),CreateStandardColormap,dsHandle); XFree((char *)maps); return list; } return SAVE(ListNull); } static Handle GetID(TaskData *taskData, X_Object *P) { switch(UNTAGGED(P->type)) { case X_GC: return Make_unsigned(taskData, GetGC(taskData, P)->gid); /* GCID */ case X_Font: return Make_unsigned(taskData, GetFont(taskData, P)); /* FontID */ case X_Cursor: return Make_unsigned(taskData, GetCursor(taskData, P)); /* CursorId */ case X_Window: return Make_unsigned(taskData, GetWindow(taskData, P)); /* DrawableID */ case X_Pixmap: return Make_unsigned(taskData, GetPixmap(taskData, P)); /* DrawableID */ case X_Colormap: return Make_unsigned(taskData, GetColormap(taskData, P)); /* ColormapID */ case X_Visual: return Make_unsigned(taskData, GetVisual(taskData, P)->visualid); /* VisualID */ case X_Widget: return Make_unsigned(taskData, (unsigned long)GetNWidget(taskData, P)); /* Widget -- SAFE(?) */ default: Crash ("Bad X_Object type (%d) in GetID",UNTAGGED(P->type)) /*NOTREACHED*/; } } static Handle OpenDisplay(TaskData *taskData, PolyStringObject *string) { char name[500]; Display *display; Handle dsHandle /* Handle to (X_Display_Object *) */; Poly_string_to_C(string,name,sizeof(name)); if (userOptions.noDisplay) RaiseXWindows(taskData, "XOpenDisplay failed"); display = XOpenDisplay(name); if (display == 0) RaiseXWindows(taskData, "XOpenDisplay failed"); /* I don't think this is needed. DCJM 26/5/2000. */ /* add_file_descr(display->fd); */ dsHandle = alloc_and_save(taskData, SIZEOF(X_Display_Object), F_MUTABLE_BIT|F_BYTE_OBJ); debug1 ("%s display opened\n",DisplayString(display)); debug1 ("%x display fd\n",display->fd); #define ds DEREFDISPLAYHANDLE(dsHandle) /* Ok to store C values because this is a byte object */ ds->type = TAGGED(X_Display); ds->display = display; ds->screen = DefaultScreen(display); ds->app_context = 0; #undef ds return AddXObject(FINISHED(taskData, dsHandle)); } /* indirection removed SPF 11/11/93 */ static XmFontList GetXmFontList(PolyWord p /* NOT a handle */) { if (NONNIL(p)) { char charset[500]; XmFontList L; MLPair *q = (MLPair *)(((ML_Cons_Cell*)p.AsObjPtr())->h.AsObjPtr()); Poly_string_to_C(SND(q),charset,sizeof(charset)); L = XmFontListCreate((XFontStruct *)FST(q).AsObjPtr(),charset); /* cast added SPF 6/1/94 */ p = ((ML_Cons_Cell*)p.AsObjPtr())->t; while(NONNIL(p)) { q = (MLPair *)(((ML_Cons_Cell*)p.AsObjPtr())->h.AsObjPtr()); Poly_string_to_C(SND(q),charset,sizeof(charset)); L = XmFontListAdd(L,(XFontStruct *)FST(q).AsObjPtr(),charset); /* cast added SPF 6/1/94 */ p = ((ML_Cons_Cell*)p.AsObjPtr())->t; } return L; } return 0; } /* datatype CType = CAccelerators of XtAccelerators | CBool of bool | CColormap of Colormap | CCursor of Cursor | CDimension of int | CFontList of (XFontStruct * string) list | CInt of int | CIntTable of int list | CKeySym of int | CPixmap of Drawable | CPosition of int | CString of string | CStringTable of string list | CTrans of XtTranslations | CUnsignedChar of int | CUnsignedTable of int list | CVisual of Visual | CWidget of Widget | CWidgetList of Widget list | CXmString of XmString | CXmStringTable of XmString list; */ #define CAccelerators 1 #define CBool 2 #define CColormap 3 #define CCursor 4 #define CDimension 5 #define CFontList 6 #define CInt 7 #define CIntTable 8 #define CKeySym 9 #define CPixmap 10 #define CPosition 11 #define CString 12 #define CStringTable 13 #define CTrans 14 #define CUnsignedChar 15 #define CUnsignedTable 16 #define CVisual 17 #define CWidget 18 #define CWidgetList 19 #define CXmString 20 #define CXmStringTable 21 typedef struct { unsigned tag; unsigned N; char *name; union { XtAccelerators acc; Boolean boolean; Colormap cmap; Cursor cursor; Dimension dim; XmFontList F; int i; int *I; KeySym keysym; Pixmap pixmap; Position posn; char *string; char **S; XtTranslations trans; uchar u; uchar *U; Visual *visual; Widget widget; WidgetList W; XmString xmString; XmString *X; } u; } ArgType; static void GetXmString(TaskData *taskData, PolyWord w, void *v, unsigned ) { XmString *p = (XmString *)v; char *s; CopyString(taskData, w, &s, 0); *p = XmStringCreateLtoR(s, (char *)XmSTRING_DEFAULT_CHARSET); free(s); } static void GetXmStrings(TaskData *taskData, PolyWord list, ArgType *T) { T->N = 0; T->u.X = 0; if (NONNIL(list)) { T->N = ListLength(list); T->u.X = (XmString *) malloc(T->N * sizeof(XmString)); GetList4(taskData, list,T->u.X,sizeof(XmString),GetXmString); } } static void GetStrings(TaskData *taskData, PolyWord list, ArgType *T) { T->N = 0; T->u.S = 0; if (NONNIL(list)) { T->N = ListLength(list); T->u.S = (char **) malloc(T->N * sizeof(char *)); GetList4(taskData, list,T->u.S,sizeof(char *),CopyString); } } static void FreeXmStrings(ArgType *T) { for(unsigned i = 0; i < T->N; i++) XmStringFree (T->u.X[i]); free(T->u.X); } static void GetITable(TaskData *taskData, PolyWord list, ArgType *T) { T->N = 0; T->u.I = 0; if (NONNIL(list)) { T->N = ListLength(list); T->u.I = (int *) malloc(T->N * sizeof(int)); GetList4(taskData, list,T->u.I,sizeof(int),GetUnsigned); } } static void GetUTable(TaskData *taskData, PolyWord list, ArgType *T) { T->N = 0; T->u.U = 0; if (NONNIL(list)) { T->N = ListLength(list); T->u.U = (uchar *)malloc(T->N * sizeof(uchar)); GetList4(taskData, list,T->u.U,sizeof(uchar),GetUChars); } } /* case CIntTable: GetITable ((ML_Cons_Cell *)v,T); break; case CUnsignedTable: GetUTable ((ML_Cons_Cell *)v,T); break; case CString: CopyString (v,&T->u.string); break; case CStringTable: GetStrings ((ML_Cons_Cell *)v,T); break; case CXmString: GetXmString (v,&T->u.xmString); break; case CXmStringTable: GetXmStrings((ML_Cons_Cell *)v,T); break; */ static void FreeArgs(ArgType *T, unsigned N) { while(N--) { free(T->name); switch(T->tag) { case CAccelerators: break; case CBool: break; case CColormap: break; case CCursor: break; case CDimension: break; case CFontList: XmFontListFree(T->u.F); break; case CInt: break; case CIntTable: break; case CKeySym: break; case CPixmap: break; case CPosition: break; case CString: XtFree(T->u.string); break; case CStringTable: FreeStrings(T->u.S,T->N); free(T->u.S); break; case CTrans: break; case CUnsignedChar: break; case CUnsignedTable: break; case CVisual: break; case CWidget: break; case CWidgetList: break; case CXmString: XmStringFree (T->u.xmString); break; case CXmStringTable: FreeXmStrings(T); break; default: Crash ("Bad arg type %x",T->tag); } T++; } } /* type Arg sharing type Arg = exn; val Exn: Arg -> Exn = Cast; val Arg: Exn -> Arg = Cast; datatype Exn = EXN of unit ref * string * unit; */ /* (string,(v,tag)) */ static void SetArgTypeP(TaskData *taskData, PolyWord fst, PolyWord snd, ArgType *T) { PolyWord v = FST(snd); T->tag = UNTAGGED(SND(snd)); T->N = 0; T->u.i = 0; CopyString(taskData, fst, &T->name, 0); switch(T->tag) { case CAccelerators: T->u.acc = GetAcc (taskData, (X_Object *)v.AsObjPtr()); break; case CBool: T->u.boolean = get_C_ulong (taskData, v); break; case CColormap: T->u.cmap = GetColormap (taskData, (X_Object *)v.AsObjPtr()); break; case CCursor: T->u.cursor = GetCursor (taskData, (X_Object *)v.AsObjPtr()); break; case CDimension: T->u.dim = get_C_ushort (taskData, v); break; case CFontList: T->u.F = GetXmFontList(v); break; case CInt: T->u.i = get_C_long (taskData, v); break; case CKeySym: T->u.keysym = get_C_ulong (taskData, v); break; case CPixmap: T->u.pixmap = GetPixmap (taskData, (X_Object *)v.AsObjPtr()); break; case CPosition: T->u.posn = get_C_short (taskData, v); break; case CTrans: T->u.trans = GetTrans (taskData, (X_Object *)v.AsObjPtr()); break; case CUnsignedChar: T->u.u = get_C_uchar (taskData, v); break; case CVisual: T->u.visual = GetVisual (taskData, (X_Object *)v.AsObjPtr()); break; case CWidget: T->u.widget = GetNWidget (taskData, (X_Object *)v.AsObjPtr()); break; /* The following types allocate memory, but only in the C heap */ case CIntTable: GetITable (taskData, v,T); break; case CUnsignedTable: GetUTable (taskData, v,T); break; case CString: CopyString (taskData, v, &T->u.string, 0); break; case CStringTable: GetStrings (taskData, v,T); break; case CXmString: GetXmString (taskData, v, &T->u.xmString, 0); break; case CXmStringTable: GetXmStrings(taskData, v,T); break; default: Crash ("Bad arg type %x",T->tag); } } static void SetArgType(TaskData *taskData, PolyWord p, void *v, unsigned) { ArgType *T = (ArgType *)v; SetArgTypeP(taskData, FST(p), SND(p), T); } static void SetArgs(Arg *A, ArgType *T, unsigned N) { while(N--) { A->name = T->name; switch(T->tag) { case CAccelerators: A->value = (XtArgVal) T->u.acc; break; case CBool: A->value = (XtArgVal) T->u.boolean; break; case CColormap: A->value = (XtArgVal) T->u.cmap; break; case CCursor: A->value = (XtArgVal) T->u.cursor; break; case CDimension: A->value = (XtArgVal) T->u.dim; break; case CFontList: A->value = (XtArgVal) T->u.F; break; case CInt: A->value = (XtArgVal) T->u.i; break; case CIntTable: A->value = (XtArgVal) T->u.I; break; case CKeySym: A->value = (XtArgVal) T->u.keysym; break; case CPixmap: A->value = (XtArgVal) T->u.pixmap; break; case CPosition: A->value = (XtArgVal) T->u.posn; break; case CString: A->value = (XtArgVal) T->u.string; break; case CStringTable: A->value = (XtArgVal) T->u.S; break; case CTrans: A->value = (XtArgVal) T->u.trans; break; case CUnsignedChar: A->value = (XtArgVal) T->u.u; break; case CUnsignedTable: A->value = (XtArgVal) T->u.U; break; case CVisual: A->value = (XtArgVal) T->u.visual; break; case CWidget: A->value = (XtArgVal) T->u.widget; break; case CXmString: A->value = (XtArgVal) T->u.xmString; break; case CXmStringTable: A->value = (XtArgVal) T->u.X; break; default: Crash ("Bad arg type %x",T->tag); } A++; T++; } } /* add current callback to (pending?) FList */ static void RunWidgetCallback(Widget w, XtPointer closure, XtPointer call_data) { C_List *C = (C_List *)closure; if (callbacks_enabled) { // Only synchronous callbacks are handled. TaskData *taskData = processes->GetTaskDataForThread(); Handle tailHandle = SAVE(FList); Handle widgetHandle = SAVE(C->widget_object); Handle functionHandle = SAVE(C->function); Handle pairHandle = CreatePair(taskData, widgetHandle,functionHandle); FList = DEREFWORD(CreatePair(taskData, pairHandle,tailHandle)); } #if 0 else printf("Ignoring event for widget %p\n",C->widget_object); #endif } static void SetCallbacks(TaskData *taskData, X_Widget_Object *W, PolyWord list, PolyWord initial) { char name[100]; Widget w = GetWidget(taskData, (X_Object *)W); assert(w != NULL); /* SPF */ assert(w != (Widget)1); /* SPF */ for(PolyWord pp = W->callbackList; NONNIL(pp); pp = ((ML_Cons_Cell*)pp.AsObjPtr())->t) { MLPair *q = (MLPair *)((ML_Cons_Cell*)pp.AsObjPtr())->h.AsObjPtr(); Poly_string_to_C(FST(q),name,sizeof(name)); if (strcmp(name,"messageCallback") != 0 && strcmp(name,XtNdestroyCallback) != 0) { XtRemoveAllCallbacks(w,name); } } #if 0 /* We no longer need the old callback data for this widget, assuming we've replaced all the callbacks. But what if we've only replaced some of them? It's probably better to allow this space leak that to delete vital callback data. I'll have to think about this hard sometime. (Of course, the user isn't supposed to call XtSetCallbacks more than once, in which case the problem doesn't even arise.) SPF 29/2/96 */ PurgeCCallbacks(W,w); #endif for(PolyWord p = list; NONNIL(p); p = ((ML_Cons_Cell*)p.AsObjPtr())->t) { C_List *C = (C_List *)malloc(sizeof(C_List)); MLPair *q = (MLPair *)((ML_Cons_Cell*)p.AsObjPtr())->h.AsObjPtr(); C->function = SND(q).AsObjPtr(); C->widget_object = W; C->next = CList; debugCreateCallback(W,w,C); CList = C; Poly_string_to_C(FST(q),name,sizeof(name)); if (strcmp(name,"messageCallback") != 0 && strcmp(name,XtNdestroyCallback) != 0) { XtAddCallback(w,name,RunWidgetCallback,C); } } W->state = initial; W->callbackList = list; } static void RunWidgetEventhandler (Widget w, XtPointer p, XEvent *ev, Boolean *c) { C_List *C = (C_List *)p; if ( callbacks_enabled ) { TaskData *taskData = processes->GetTaskDataForThread(); Handle tailHandle = SAVE(GList); Handle widgetHandle = SAVE(C->widget_object); Handle functionHandle = SAVE(C->function); Handle pairHandle = CreatePair(taskData, widgetHandle,functionHandle); GList = (ML_Cons_Cell *)DEREFHANDLE(CreatePair(taskData, pairHandle,tailHandle)); } } static void AddEventhandler ( TaskData *taskData, X_Widget_Object *W, EventMask EventM, Boolean nonmask, Handle p) { Widget w = GetWidget(taskData, (X_Object *)W) ; C_List *C = (C_List *) malloc ( sizeof(C_List) ) ; /* Add the function to the callback list, so that it will not be G.C'ed away. */ C->function = DEREFHANDLE(p); C->widget_object = W ; C->next = CList ; CList = C ; XtAddEventHandler (w, EventM, nonmask, RunWidgetEventhandler, C); } static Handle AppInitialise ( TaskData *taskData, PolyWord s1, PolyWord s2, PolyWord s3, Handle fallbackHead, Handle argHead ) { char displayName[500]; char appName[500]; char appClass[500]; XtAppContext app_context; Display *display; Widget shell; Handle dsHandle /* Handle to (X_Display_Object *) */; int argc = 0; /* an "int" for Solaris, but should be "unsigned" for SunOS */ unsigned F = ListLength(DEREFWORD(fallbackHead)) + 1; unsigned N = ListLength(DEREFWORD(argHead)); char **S = (char **) alloca(F * sizeof(char *)); Arg *R = (Arg *) alloca(N * sizeof(Arg)); ArgType *T = (ArgType *) alloca(N * sizeof(ArgType)); Poly_string_to_C(s1,displayName ,sizeof(displayName)); Poly_string_to_C(s2,appName ,sizeof(appName)); Poly_string_to_C(s3,appClass ,sizeof(appClass)); if (userOptions.noDisplay) RaiseXWindows(taskData, "XtAppInitialise failed (-noDisplay specified)"); app_context = XtCreateApplicationContext(); GetList4(taskData, DEREFWORD(fallbackHead),S,sizeof(char *),CopyString); S[F-1] = NULL; /* list must be NULL terminated */ XtAppSetFallbackResources(app_context,S); display = XtOpenDisplay(app_context,displayName,appName,appClass,NULL,0,&argc,0); if (display == 0) RaiseXWindows(taskData, "XtAppInitialise failed (can't open display)"); /* I don't think this is needed. DCJM 26/5/2000 */ /* add_file_descr(display->fd); */ debug1 ("%s display opened\n",DisplayString(display)); debug1 ("%x display fd\n",display->fd); /* ok to store C values because this is a BYTE object */ dsHandle = alloc_and_save(taskData, SIZEOF(X_Display_Object), F_MUTABLE_BIT|F_BYTE_OBJ); DEREFDISPLAYHANDLE(dsHandle)->type = TAGGED(X_Display); DEREFDISPLAYHANDLE(dsHandle)->display = display; DEREFDISPLAYHANDLE(dsHandle)->screen = DefaultScreen(display); DEREFDISPLAYHANDLE(dsHandle)->app_context = app_context; AddXObject(FINISHED(taskData, dsHandle)); GetList4(taskData, DEREFWORD(argHead),T,sizeof(ArgType),SetArgType); SetArgs(R,T,N); shell = XtAppCreateShell(appName,appClass,applicationShellWidgetClass,display,R,N); FreeArgs(T,N); if (shell == 0) RaiseXWindows(taskData, "XtAppInitialise failed (can't create application shell)"); /* added 7/12/94 SPF */ XtAddCallback(shell,XtNdestroyCallback,DestroyWidgetCallback,NULL); return NewWidget(taskData, dsHandle,shell); } static Handle CreatePopupShell ( TaskData *taskData, PolyStringObject *s, Handle dsHandle, /* Handle to (X_Display_Object *) */ Widget parent, Handle list ) { char name[100]; Widget shell; unsigned N = ListLength(DEREFWORD(list)); Arg *A = (Arg *) alloca(N * sizeof(Arg)); ArgType *T = (ArgType *) alloca(N * sizeof(ArgType)); GetList4(taskData, DEREFWORD(list),T,sizeof(ArgType),SetArgType); SetArgs(A,T,N); Poly_string_to_C(s,name,sizeof(name)); shell = XtCreatePopupShell(name,applicationShellWidgetClass,parent,A,N); FreeArgs(T,N); if (shell == 0) RaiseXWindows(taskData, "XtCreatePopupShell failed"); /* added 7/12/94 SPF */ XtAddCallback(shell,XtNdestroyCallback,DestroyWidgetCallback,NULL); return NewWidget(taskData, dsHandle,shell); } static Handle CreateXm ( TaskData *taskData, Widget (*create)(Widget, String, ArgList, Cardinal), char *failed, Handle dsHandle, /* Handle to (X_Display_Object *) */ Widget parent, PolyStringObject *s, Handle list /* Handle to (ML_Cons_Cell *) */ ) { char name[100]; Widget w; unsigned N = ListLength(DEREFWORD(list)); Arg *A = (Arg *) alloca(N * sizeof(Arg)); ArgType *T = (ArgType *) alloca(N * sizeof(ArgType)); GetList4(taskData, DEREFWORD(list),T,sizeof(ArgType),SetArgType); SetArgs(A,T,N); Poly_string_to_C(s,name,sizeof(name)); w = (* create)(parent,name,A,N); FreeArgs(T,N); if (w == 0) RaiseXWindows(taskData, failed); XtAddCallback(w,XtNdestroyCallback,DestroyWidgetCallback,NULL); return NewWidget(taskData, dsHandle,w); } static void SetValues(TaskData *taskData, Widget w, Handle list) { unsigned N = ListLength(DEREFWORD(list)); Arg *A = (Arg *) alloca(N * sizeof(Arg)); ArgType *T = (ArgType *) alloca(N * sizeof(ArgType)); GetList4(taskData, DEREFWORD(list),T,sizeof(ArgType),SetArgType); SetArgs(A,T,N); XtSetValues(w,A,N); FreeArgs(T,N); } typedef struct { const char *listName; char *intName; } StringPair; static StringPair listTypes[] = { {"argv" ,(char *) "argc"}, {"buttonAccelerators" ,(char *) "buttonCount"}, {"buttonAcceleratorText" ,(char *) "buttonCount"}, {"buttonMnemonicCharSets",(char *) "buttonCount"}, {"buttonMnemonics" ,(char *) "buttonCount"}, {"buttons" ,(char *) "buttonCount"}, {"buttonType" ,(char *) "buttonCount"}, {"children" ,(char *) "numChildren"}, {"dirListItems" ,(char *) "dirListItemCount"}, {"fileListItems" ,(char *) "fileListItemCount"}, {"historyItems" ,(char *) "historyItemCount"}, {"items" ,(char *) "itemCount"}, {"listItems" ,(char *) "listItemCount"}, {"selectedItems" ,(char *) "selectedItemCount"}, {"selectionArray" ,(char *) "selectionArrayCount"}, }; #define MAXListTYPES (sizeof(listTypes)/sizeof(listTypes[0])) /* (string,(v,tag)) - ML (string*Ctype) */ static void GetArgType ( TaskData *taskData, PolyWord p, ArgType *T, int i, /* not used; needed to keep function type right */ Widget w ) { T->tag = UNTAGGED(SND(SND(p))); T->N = 0; T->u.i = 0; CopyString(taskData, FST(p), &T->name, 0); if (T->tag == CIntTable || T->tag == CUnsignedTable || T->tag == CWidgetList || T->tag == CStringTable || T->tag == CXmStringTable) /* if it is a list type we need to get the length from another resource */ { Arg arg; unsigned i; int result; for(i = 0; i < MAXListTYPES; i++) { if (strcmp(listTypes[i].listName,T->name) == 0) break; } if (i == MAXListTYPES) Crash ("Bad list resource name %s",T->name); arg.name = listTypes[i].intName; arg.value = (XtArgVal) &result; /* Bug fix here which only appeared in OpenMotif and LessTif. We need to pass the address of an integer here to receive the result. DCJM 17/5/02. */ XtGetValues(w, &arg, 1); T->N = result; } } static Handle CreateWidget(TaskData *taskData, void *p, Handle dsHandle /* Handle to (X_Display_Object *) */) { return EmptyWidget(taskData, dsHandle, *(Widget*)p); } static Handle CreateXmString(TaskData *taskData, void *t) { char *s; Handle S; XmStringGetLtoR(*(XmString *)t,(char *) XmSTRING_DEFAULT_CHARSET,&s); S = Make_string(s); XtFree(s); return S; } static Handle CreateFontList ( TaskData *taskData, Handle dsHandle, /* Handle to (X_Display_Object *) */ XmFontList F ) { XmFontContext C; XmStringCharSet charset; XFontStruct *fs; Handle list = 0; Handle tail = 0; if (XmFontListInitFontContext(&C,F) == False) return SAVE(ListNull); // TODO: This previously reset the save vector each time to make sure it // didn't overflow. I've removed that code but it needs to be put back. while (XmFontListGetNextFont(C,&charset,&fs)) { Handle L = alloc_and_save(taskData, SIZEOF(ML_Cons_Cell), F_MUTABLE_BIT); if (list == 0) list = L; // This is the first. if (tail != 0) { DEREFLISTHANDLE(tail)->t = DEREFWORD(L); FINISHED(taskData, tail); } tail = L; /* the new list element is joined on, but not filled in */ DEREFLISTHANDLE(tail)->h = DEREFWORD(CreatePair(taskData, CreateFontStruct(taskData,fs,dsHandle),Make_string(charset))); DEREFLISTHANDLE(tail)->t = ListNull; } XmFontListFreeFontContext(C); if (tail != 0) FINISHED(taskData, tail); return list; } static Handle CreateUChar(TaskData *taskData, void *p) { return Make_unsigned(taskData, *(uchar *)p); } static Handle CreateArg(TaskData *taskData, void *v, Handle dsHandle /* Handle to (X_Display_Object *) */) { ArgType *T = (ArgType *)v; Handle value; switch(T->tag) { case CAccelerators: value = EmptyAcc (taskData, T->u.acc); break; case CBool: value = Make_bool (T->u.boolean); break; case CColormap: value = EmptyColormap (taskData, dsHandle,T->u.cmap); break; case CCursor: value = EmptyCursor (taskData, dsHandle,T->u.cursor); break; case CDimension: value = Make_int (T->u.dim); break; case CFontList: value = CreateFontList(taskData, dsHandle,T->u.F); break; case CInt: value = Make_int (T->u.i); break; case CKeySym: value = Make_unsigned (taskData, T->u.keysym); break; case CPixmap: value = EmptyPixmap (taskData, dsHandle,T->u.pixmap); break; case CPosition: value = Make_int (T->u.posn); break; case CString: value = Make_string (T->u.string); break; case CTrans: value = EmptyTrans (taskData, T->u.trans); break; case CUnsignedChar: value = Make_unsigned (taskData, T->u.u); break; case CVisual: value = EmptyVisual (taskData, dsHandle,T->u.visual); break; case CWidget: value = EmptyWidget (taskData, dsHandle,T->u.widget); break; case CXmString: value = CreateXmString(taskData, &T->u.xmString); break; case CIntTable: value = CreateList4(taskData, T->N,T->u.I,sizeof(int), CreateUnsigned); break; case CUnsignedTable: value = CreateList4(taskData, T->N,T->u.U,sizeof(uchar), CreateUChar); break; case CStringTable: value = CreateList4(taskData, T->N,T->u.S,sizeof(char *), CreateString); break; case CWidgetList: value = CreateList5(taskData,T->N,T->u.W,sizeof(Widget), CreateWidget,dsHandle); break; case CXmStringTable: value = CreateList4(taskData, T->N,T->u.X,sizeof(XmString),CreateXmString); break; default: Crash ("Bad arg type %x",T->tag); /*NOTREACHED*/ } return value; } static Handle GetValue ( TaskData *taskData, Handle dsHandle, /* Handle to (X_Display_Object *) */ Widget w, PolyWord pair /* ML (string*Ctype) */ ) { Arg A; ArgType T; XmString *X = (XmString *) 0x55555555; XmString *Y = (XmString *) 0xAAAAAAAA; GetArgType(taskData,pair,&T,0,w); A.name = T.name; A.value = (XtArgVal) &T.u; T.u.X = X; /* The value is set to X. If it is left set to X */ /* then this may be a value this widget doesn't have. */ XtGetValues(w,&A,1); if (T.u.X == X) { T.u.X = Y; XtGetValues(w,&A,1); if (T.u.X == Y) { char buffer[500]; sprintf(buffer,"XtGetValues (%s) failed",T.name); RaiseXWindows(taskData, buffer); } } return CreateArg(taskData, &T,dsHandle); } /* What is the real ML type of p? (string*Ctype*string*string*string*Ctype) */ static void GetResource ( TaskData *taskData, PolyWord pp, XtResource *R, int i, ArgType *T, ArgType *D, Widget w ) { PolyObject *p = pp.AsObjPtr(); GetArgType(taskData,pp,&T[i],0,w); /* HACK !!! */ CopyString(taskData, p->Get(0), &R->resource_name, 0); CopyString(taskData, p->Get(2), &R->resource_class, 0); CopyString(taskData, p->Get(3), &R->resource_type, 0); R->resource_size = 4; R->resource_offset = (byte*)(&T[i].u) - (byte*)(T); SetArgTypeP(taskData, p->Get(4), p->Get(5), &D[i]); /* This was a hack. I hope I converted it correctly. DCJM */ R->default_type = D[i].name; if (UNTAGGED(p->Get(5).AsObjPtr()->Get(1)) == CString) R->default_addr = (XtPointer) D[i].u.string; else R->default_addr = (XtPointer) &D[i].u; } static Handle GetSubresources ( TaskData *taskData, Handle dsHandle, /* Handle to (X_Display_Object *) */ Widget w, PolyStringObject *s1, PolyStringObject *s2, Handle list ) { char name [100]; char clas[100]; unsigned N = ListLength(DEREFWORD(list)); ArgType *T = (ArgType *) alloca(N * sizeof(ArgType)); ArgType *D = (ArgType *) alloca(N * sizeof(ArgType)); XtResource *R = (XtResource *) alloca(N * sizeof(XtResource)); { unsigned i = 0; for(PolyWord p = DEREFWORD(list); NONNIL(p); p = ((ML_Cons_Cell *)p.AsObjPtr())->t) { GetResource(taskData,((ML_Cons_Cell *)p.AsObjPtr())->h,&R[i],i,T,D,w); i++; } } Poly_string_to_C(s1,name ,sizeof(name)); Poly_string_to_C(s2,clas,sizeof(clas)); XtGetSubresources(w,T,name,clas,R,N,NULL,0); return CreateList5(taskData,N,T,sizeof(ArgType),CreateArg,dsHandle); } static Handle GetApplicationResources (TaskData *taskData, Handle dsHandle, /* Handle to (X_Display_Object *) */ Widget w, Handle list ) { unsigned N = ListLength (DEREFLISTHANDLE(list)) ; ArgType *T = (ArgType *) alloca ( N * sizeof(ArgType) ) ; ArgType *D = (ArgType *) alloca ( N * sizeof(ArgType) ) ; XtResource *R = (XtResource *) alloca ( N * sizeof(XtResource) ) ; { unsigned i = 0; for(PolyWord p = DEREFWORD(list); NONNIL(p); p = ((ML_Cons_Cell *)p.AsObjPtr())->t) { GetResource(taskData,((ML_Cons_Cell *)p.AsObjPtr())->h,&R[i],i,T,D,w); i++; } } XtGetApplicationResources ( w,T,R,N,NULL,0 ) ; return CreateList5 (taskData, N,T,sizeof(ArgType),CreateArg,dsHandle ) ; } static void GetChild(TaskData *taskData, PolyWord p, void *v, unsigned) { Widget *w = (Widget *)v; *w = GetWidget(taskData, (X_Object *)p.AsObjPtr()); if (XtParent(*w) == NULL) RaiseXWindows(taskData, "not a child"); } static void ManageChildren(TaskData *taskData, Handle list) { unsigned N = ListLength(DEREFWORD(list)); Widget *W = (Widget *) alloca(N * sizeof(Widget)); GetList4(taskData, DEREFWORD(list),W,sizeof(Widget),GetChild); XtManageChildren(W,N); } static void UnmanageChildren(TaskData *taskData, Handle list) { unsigned N = ListLength(DEREFWORD(list)); Widget *W = (Widget *) alloca(N * sizeof(Widget)); GetList4(taskData, DEREFWORD(list),W,sizeof(Widget),GetChild); XtUnmanageChildren(W,N); } static Handle ParseTranslationTable(TaskData *taskData, PolyStringObject *s) { XtTranslations table; int size = s->length + 1; char *buffer = (char *)alloca(size); Poly_string_to_C(s,buffer,size); table = XtParseTranslationTable(buffer); return EmptyTrans(taskData, table); } static void CommandError(TaskData *taskData, Widget w, PolyWord s) { XmString p; GetXmString(taskData, s, &p, 0); XmCommandError(w,p); XmStringFree (p); } static void FileSelectionDoSearch(TaskData *taskData, Widget w, PolyWord s) { XmString p; GetXmString(taskData, s, &p, 0); XmFileSelectionDoSearch(w,p); XmStringFree (p); } static void MenuPosition (Widget w, int x, int y) { XButtonPressedEvent ev; memset (&ev, 0, sizeof(ev)); ev.type = 4; /* Must be button. */ ev.x_root = x; ev.y_root = y; ev.button = 3; /* Is this required? */ ev.same_screen = 1; /* Assume this. */ XmMenuPosition (w, &ev); } static Handle XmIsSomething(TaskData *taskData, unsigned is_code, Widget widget) { unsigned i; switch(is_code) { case 1: i = XmIsArrowButton (widget); break; case 2: i = XmIsArrowButtonGadget (widget); break; case 3: i = XmIsBulletinBoard (widget); break; case 4: i = XmIsCascadeButton (widget); break; case 5: i = XmIsCascadeButtonGadget(widget); break; case 6: i = XmIsCommand (widget); break; case 7: i = XmIsDesktopObject (widget); break; /* ok - SPF 9/8/94 */ case 8: i = XmIsDialogShell (widget); break; /* Unsupported in Motif 1.2 case 9: i = XmIsDisplayObject (widget); break; */ case 10: i = XmIsDrawingArea (widget); break; case 11: i = XmIsDrawnButton (widget); break; case 12: i = XmIsExtObject (widget); break; /* ok - SPF 9/8/94 */ case 13: i = XmIsFileSelectionBox (widget); break; case 14: i = XmIsForm (widget); break; case 15: i = XmIsFrame (widget); break; case 16: i = XmIsGadget (widget); break; case 17: i = XmIsLabel (widget); break; case 18: i = XmIsLabelGadget (widget); break; case 19: i = XmIsList (widget); break; case 20: i = XmIsMainWindow (widget); break; case 21: i = XmIsManager (widget); break; case 22: i = XmIsMenuShell (widget); break; case 23: i = XmIsMessageBox (widget); break; case 24: i = XmIsMotifWMRunning (widget); break; case 25: i = XmIsPanedWindow (widget); break; case 26: i = XmIsPrimitive (widget); break; case 27: i = XmIsPushButton (widget); break; case 28: i = XmIsPushButtonGadget (widget); break; case 29: i = XmIsRowColumn (widget); break; case 30: i = XmIsScale (widget); break; /* Unsupported in Motif 1.2 case 31: i = XmIsScreenObject (widget); break; */ case 32: i = XmIsScrollBar (widget); break; case 33: i = XmIsScrolledWindow (widget); break; case 34: i = XmIsSelectionBox (widget); break; case 35: i = XmIsSeparator (widget); break; case 36: i = XmIsSeparatorGadget (widget); break; #ifdef LESSTIF_VERSION /* This is not supported in LessTif, at least not 0.89. */ case 37: RaiseXWindows(taskData, "XmIsShellExt: not implemented"); #else case 37: i = XmIsShellExt (widget); break; /* ok - SPF 9/8/94 */ #endif case 38: i = XmIsText (widget); break; case 39: i = XmIsTextField (widget); break; case 40: i = XmIsToggleButton (widget); break; case 41: i = XmIsToggleButtonGadget (widget); break; case 42: i = XmIsVendorShell (widget); break; case 43: i = XmIsVendorShellExt (widget); break; /* ok - SPF 9/8/94 */ /* Unsupported in Motif 1.2 case 44: i = XmIsWorldObject (widget); break; */ default: Crash ("Bad code (%d) in XmIsSomething",is_code); /* NOTREACHED*/ } return Make_bool(i); } /******************************************************************************/ /* */ /* Wrappers for standard widget operations */ /* */ /******************************************************************************/ /************************* 0 parameters, no result ****************************/ /* widget -> unit */ static void WidgetAction ( TaskData *taskData, char *func_name, Widget getWidget(TaskData *, char *, X_Object *), void applyFunc(Widget), X_Object *arg1 ) { Widget w = getWidget(taskData,func_name,arg1); applyFunc(w); } /************************* 1 parameter, no result *****************************/ /* widget -> bool -> unit */ static void WidgetBoolAction ( TaskData *taskData, char *func_name, Widget getWidget(TaskData *, char *, X_Object *), void applyFunc(Widget, Boolean), X_Object *arg1, PolyWord arg2 ) { Widget w = getWidget(taskData,func_name,arg1); Boolean b = (get_C_short(taskData, arg2) != 0); applyFunc(w,b); } /* widget -> int -> unit */ static void WidgetIntAction ( TaskData *taskData, char *func_name, Widget getWidget(TaskData *, char *, X_Object *), void applyFunc(Widget, int), X_Object *arg1, PolyWord arg2 ) { Widget w = getWidget(taskData,func_name,arg1); int i = get_C_long(taskData, arg2); applyFunc(w,i); } /* widget -> int -> unit */ static void WidgetLongAction ( TaskData *taskData, char *func_name, Widget getWidget(TaskData *, char *, X_Object *), void applyFunc(Widget, long), X_Object *arg1, PolyWord arg2 ) { Widget w = getWidget(taskData,func_name,arg1); long i = get_C_long(taskData, arg2); applyFunc(w,i); } /* widget -> string -> unit */ static void WidgetXmstringAction ( TaskData *taskData, char *func_name, Widget getWidget(TaskData *, char *, X_Object *), void applyFunc(Widget, XmString), X_Object *arg1, PolyWord arg2 ) { Widget w = getWidget(taskData,func_name,arg1); XmString s; GetXmString(taskData, arg2, &s, 0); applyFunc(w,s); XmStringFree(s); } /* widget -> string list -> unit */ static void WidgetXmstringlistAction ( TaskData *taskData, char *func_name, Widget getWidget(TaskData *, char *, X_Object *), void applyFunc(Widget, XmString *, int), X_Object *arg1, ML_Cons_Cell *arg2 ) { Widget w = getWidget(taskData,func_name,arg1); unsigned n = ListLength(arg2); XmString *strings = (XmString *)alloca(n * sizeof(XmString)); GetList4(taskData, arg2,strings,sizeof(XmString),GetXmString); applyFunc(w,strings,n); for (unsigned i = 0; i < n; i ++) XmStringFree(strings[i]); } /************************* 2 parameters, no result ****************************/ /* widget -> int -> bool -> unit */ static void WidgetIntBoolAction ( TaskData *taskData, char *func_name, Widget getWidget(TaskData *, char *, X_Object *), void applyFunc(Widget, int, Boolean), X_Object *arg1, PolyWord arg2, PolyWord arg3 ) { Widget w = getWidget(taskData,func_name,arg1); int i = get_C_long(taskData, arg2); Boolean b = (get_C_ushort(taskData, arg3) != 0); applyFunc(w,i,b); } /* widget -> int -> int -> unit */ static void WidgetIntIntAction ( TaskData *taskData, char *func_name, Widget getWidget(TaskData *, char *, X_Object *), void applyFunc(Widget, int, int), X_Object *arg1, PolyWord arg2, PolyWord arg3 ) { Widget w = getWidget(taskData,func_name,arg1); int x = get_C_long(taskData, arg2); int y = get_C_long(taskData, arg3); applyFunc(w,x,y); } /* widget -> string -> bool -> unit */ static void WidgetXmstringBoolAction ( TaskData *taskData, char *func_name, Widget getWidget(TaskData *, char *, X_Object *), void applyFunc(Widget, XmString, Boolean), X_Object *arg1, PolyWord arg2, PolyWord arg3 ) { Widget w = getWidget(taskData,func_name,arg1); XmString s; Boolean b = (get_C_ushort(taskData, arg3) != 0); GetXmString(taskData, arg2, &s, 0); applyFunc(w,s,b); XmStringFree(s); } /* widget -> string -> int -> unit */ static void WidgetXmstringIntAction ( TaskData *taskData, char *func_name, Widget getWidget(TaskData *, char *, X_Object *), void applyFunc(Widget, XmString, int), X_Object *arg1, PolyWord arg2, PolyWord arg3 ) { Widget w = getWidget(taskData,func_name,arg1); XmString s; int i = get_C_long(taskData, arg3); GetXmString(taskData, arg2, &s, 0); applyFunc(w,s,i); XmStringFree(s); } /* widget -> string list -> int -> unit */ static void WidgetXmstringlistIntAction ( TaskData *taskData, char *func_name, Widget getWidget(TaskData *, char *, X_Object *), void applyFunc(Widget, XmString *, int, int), X_Object *arg1, ML_Cons_Cell *arg2, PolyWord arg3 ) { Widget w = getWidget(taskData,func_name,arg1); unsigned n = ListLength(arg2); int i = get_C_long(taskData, arg3); XmString *strings = (XmString *)alloca(n * sizeof(XmString)); GetList4(taskData, arg2,strings,sizeof(XmString),GetXmString); applyFunc(w,strings,n,i); for (unsigned i = 0; i < n; i ++) XmStringFree(strings[i]); } /************************* n parameters, some result **************************/ static Handle int_ptr_to_arb(TaskData *taskData, void *p) { return Make_arbitrary_precision(taskData, *(int *)p); } /* widget -> int */ static Handle WidgetToInt ( TaskData *taskData, char *func_name, Widget getWidget(TaskData *, char *, X_Object *), int applyFunc(Widget), X_Object *arg1 ) { Widget w = getWidget(taskData, func_name,arg1); int res = applyFunc(w); return(Make_arbitrary_precision(taskData, res)); } /* widget -> int */ static Handle WidgetToLong ( TaskData *taskData, char *func_name, Widget getWidget(TaskData *taskData, char *, X_Object *), long applyFunc(Widget), X_Object *arg1 ) { Widget w = getWidget(taskData, func_name,arg1); long res = applyFunc(w); return(Make_unsigned(taskData, res)); } #if 0 /* widget -> int */ static Handle WidgetToUnsigned ( TaskData *taskData, char *func_name, Widget getWidget(TaskData *, char *, X_Object *), unsigned applyFunc(Widget), X_Object *arg1 ) { Widget w = getWidget(taskData, func_name,arg1); unsigned res = applyFunc(w); return(Make_unsigned(taskData, res)); } #endif /* widget -> bool */ static Handle WidgetToBool ( TaskData *taskData, char *func_name, Widget getWidget(TaskData *, char *, X_Object *), Boolean applyFunc(Widget), X_Object *arg1 ) { Widget w = getWidget(taskData, func_name,arg1); Boolean res = applyFunc(w); return(Make_bool(res)); } /* widget -> string */ static Handle WidgetToString ( TaskData *taskData, char *func_name, Widget getWidget(TaskData *, char *, X_Object *), char *applyFunc(Widget), X_Object *arg1 ) { Widget w = getWidget(taskData, func_name,arg1); char *s = applyFunc(w); Handle res = Make_string(s); /* safe, even if C pointer is NULL */ XtFree(s); return(res); } /* widget -> int list */ static Handle WidgetToIntlist ( TaskData *taskData, char *func_name, Widget getWidget(TaskData *, char *, X_Object *), Boolean applyFunc(Widget, int**, int *), X_Object *arg1 ) { int item_count, *items; Boolean non_empty; Widget w = getWidget(taskData,func_name,arg1); non_empty = applyFunc(w, &items, &item_count); if (non_empty != TRUE) /* nothing found, and Motif hasn't allocated any space */ /* so just retun nil */ { return (SAVE(ListNull)); } else /* copy the list into the ML heap, then free it */ { Handle res = CreateList4(taskData, item_count,items,sizeof(int),int_ptr_to_arb); XtFree((char *)items); return res; } } /* widget -> string -> int list */ static Handle WidgetXmstringToIntlist ( TaskData *taskData, char *func_name, Widget getWidget(TaskData *, char *, X_Object *), Boolean applyFunc(Widget, XmString, int**, int *), X_Object *arg1, PolyWord arg2 ) { int item_count, *items; Boolean non_empty; Widget w = getWidget(taskData,func_name,arg1); XmString s; GetXmString(taskData, arg2, &s, 0); non_empty = applyFunc(w, s, &items, &item_count); XmStringFree(s); if (non_empty != TRUE) /* nothing found, so just retun nil */ { return (SAVE(ListNull)); } else /* copy the list into the ML heap, then free it */ { Handle res = CreateList4(taskData, item_count,items,sizeof(int),int_ptr_to_arb); XtFree((char *)items); return res; } } /* widget -> string -> int */ static Handle WidgetXmstringToInt ( TaskData *taskData, char *func_name, Widget getWidget(TaskData *, char *, X_Object *), int applyFunc(Widget, XmString), X_Object *arg1, PolyWord arg2 ) { Widget w = getWidget(taskData,func_name,arg1); XmString s; int res; GetXmString(taskData, arg2, &s, 0); res = applyFunc(w, s); XmStringFree(s); return (Make_int(res)); } /* widget -> string -> bool */ static Handle WidgetXmstringToBool ( TaskData *taskData, char *func_name, Widget getWidget(TaskData *, char *, X_Object *), Boolean applyFunc(Widget, XmString), X_Object *arg1, PolyWord arg2 ) { Widget w = getWidget(taskData,func_name,arg1); XmString s; Boolean res; GetXmString(taskData, arg2, &s, 0); res = applyFunc(w, s); XmStringFree(s); return (Make_bool(res)); } /******************************************************************************/ /* code added SPF 25/2/95 */ static bool isPossibleString(PolyObject *P) { if (!OBJ_IS_DATAPTR(P)) return false; POLYUNSIGNED L = P->LengthWord(); if (! OBJ_IS_BYTE_OBJECT(L)) return false; /* get object PolyWord count */ POLYUNSIGNED n = OBJ_OBJECT_LENGTH(L); if (n < 1) return false; /* get string byte count */ POLYUNSIGNED m = P->Get(0).AsUnsigned(); /* number of words to hold the bytes */ m = (m + 3) / 4; /* number of words to hold the bytes, plus the byte count */ m = m + 1; /* If that's the same as the object PolyWord count, we've probably got a genuine string! */ return (m == n); } /* Prints out the contents of a PolyWord in the X interface tuple */ static void DebugPrintWord(PolyWord P /* was X_Object *P */) { TaskData *taskData = processes->GetTaskDataForThread(); if (IS_INT((P))) { printf("Short %d", (int)UNTAGGED(P)); return; } if (gMem.IsIOPointer(P.AsAddress())) { printf("IO %p",P.AsAddress()); return; } if (isPossibleString(P.AsObjPtr())) { if (((PolyStringObject*)P.AsObjPtr())->length <= 40) { printf("String: \""); print_string((PolyStringObject*) P.AsObjPtr()); printf("\""); return; } else { printf("Long String: %p", P.AsAddress()); return; } } /* The problem with the following code was that we can't be sure that the object we have is really an X_Object - it might just look like one. If this is the case, when we try to validate the object using ResourceExists we may get a core dump because ResourceExists assumes it has a valid X_Object and calls hashId which dereferences fields within the so-called X_object. That's why we redefine ResourceExists to be SafeResourceExists which doesn't make any assumptions about the contents of the so-called X_object. SPF 6/4/95 */ #define XP ((X_Object *)P.AsObjPtr()) #define ResourceExists SafeResourceExists { switch(UNTAGGED(XP->type)) { case X_GC: (ResourceExists(XP) ? printf("GC %lx", GetGC(taskData, XP)->gid) : printf("Old GC <%lx>",P.AsUnsigned())); return; case X_Font: (ResourceExists(XP) ? printf("Font %lx",GetFont(taskData, XP)) : printf("Old Font <%x>",(int)P.AsUnsigned())); return; case X_Cursor: (ResourceExists(XP) ? printf("Cursor %lx",GetCursor(taskData, XP)) : printf("Old Cursor <%x>",(int)P.AsUnsigned())); return; case X_Window: (ResourceExists(XP) ? printf("Window %lx",GetWindow(taskData, XP)) : printf("Old Window <%p>",P.AsAddress())); return; case X_Pixmap: (ResourceExists(XP) ? printf("Pixmap %lx",GetPixmap(taskData, XP)) : printf("Old Pixmap <%p>",P.AsAddress())); return; case X_Colormap: (ResourceExists(XP) ? printf("Colormap %lx",GetColormap(taskData, XP)) : printf("Old Colormap <%p>",P.AsAddress())); return; case X_Visual: (ResourceExists(XP) ? printf("Visual %lx",GetVisual(taskData, XP)->visualid) : printf("Old Visual <%p>",P.AsAddress())); return; case X_Widget: (ResourceExists(XP) ? printf("Widget %p",GetNWidget(taskData, XP)) : printf("Old Widget <%p>",P.AsAddress())); return; case X_Trans: (ResourceExists(XP) ? printf("Trans %p",GetTrans(taskData, XP)) : printf("Old Trans <%p>",P.AsAddress())); return; case X_Acc: (ResourceExists(XP) ? printf("Acc %p",GetAcc(taskData, XP)) : printf("Old Acc <%p>",P.AsAddress())); return; case X_Display: (ResourceExists(XP) ? printf("Display %s", DisplayString(GetDisplay(taskData, XP))) + printf(":%x", GetDisplay(taskData, XP)->fd) : printf("Old Display <%p>",P.AsAddress())); return; default: printf("Pointer "ZERO_X"%p",P.AsAddress()); return; } } #undef ResourceExists #undef XP } /* Prints out the contents of the X interface tuple */ static void DebugPrintCode(PolyObject *pt) { POLYUNSIGNED N = pt->Length(); POLYUNSIGNED i = 1; assert(IS_INT(pt->Get(0))); printf("%ld:(", UNTAGGED(pt->Get(0))); while(i < N) { DebugPrintWord(pt->Get(i++)); if (i < N) printf(","); } printf(")\n"); } #define P0 DEREFHANDLE(params)->Get(0) #define P1 DEREFHANDLE(params)->Get(1) #define P2 DEREFHANDLE(params)->Get(2) #define P3 DEREFHANDLE(params)->Get(3) #define P4 DEREFHANDLE(params)->Get(4) #define P5 DEREFHANDLE(params)->Get(5) #define P6 DEREFHANDLE(params)->Get(6) #define P7 DEREFHANDLE(params)->Get(7) #define P8 DEREFHANDLE(params)->Get(8) #define P9 DEREFHANDLE(params)->Get(9) #define P10 DEREFHANDLE(params)->Get(10) #define P11 DEREFHANDLE(params)->Get(11) #define P12 DEREFHANDLE(params)->Get(12) #define XP1 ((X_Object *)P1.AsObjPtr()) #define XP2 ((X_Object *)P2.AsObjPtr()) #define XP3 ((X_Object *)P3.AsObjPtr()) #define XP4 ((X_Object *)P4.AsObjPtr()) #define XP5 ((X_Object *)P5.AsObjPtr()) #define XP6 ((X_Object *)P6.AsObjPtr()) #define XP7 ((X_Object *)P7.AsObjPtr()) /* Xwindows_c gets passed the address of an object in save_vec, */ /* which is itself a pointer to a tuple in the Poly heap. */ Handle XWindows_c(TaskData *taskData, Handle params) { int code = get_C_short(taskData, P0); if ((userOptions.debug & DEBUG_X)) DebugPrintCode(DEREFHANDLE(params)); switch(code) { case XCALL_Not: return Make_unsigned(taskData, ~ get_C_ulong(taskData, P1)); case XCALL_And: return Make_unsigned(taskData, get_C_ulong(taskData, P1) & get_C_ulong(taskData, P2)); case XCALL_Or: return Make_unsigned(taskData, get_C_ulong(taskData, P1) | get_C_ulong(taskData, P2)); case XCALL_Xor: return Make_unsigned(taskData, get_C_ulong(taskData, P1) ^ get_C_ulong(taskData, P2)); case XCALL_DownShift: return Make_unsigned(taskData, get_C_ulong(taskData, P1) >> get_C_ulong(taskData, P2)); case XCALL_UpShift: return Make_unsigned(taskData, get_C_ulong(taskData, P1) << get_C_ulong(taskData, P2)); case XCALL_NoDrawable: return EmptyPixmap(taskData, SAVE(ListNull),(Pixmap)get_C_ulong(taskData, P1)); case XCALL_NoCursor: return EmptyCursor(taskData, SAVE(ListNull),(Cursor)None); case XCALL_NoFont: return EmptyFont(taskData, SAVE(ListNull),(Font)None,(XFontStruct *)NULL); case XCALL_NoColormap: return EmptyColormap(taskData, SAVE(ListNull),(Colormap) None); case XCALL_NoVisual: return EmptyVisual(taskData, SAVE(ListNull),(Visual *)None); case XCALL_GetTimeOfDay: return GetTimeOfDay(taskData); /* Colorcells 100 */ case XCALL_XAllocColor: return AllocColor(taskData, GetDisplay(taskData, XP1),GetColormap(taskData, XP1),GetXColor1(taskData, P2)); case XCALL_XAllocColorCells: return AllocColorCells(taskData, GetDisplay(taskData, XP1), GetColormap(taskData, XP1), get_C_ulong(taskData, P2), get_C_ulong(taskData, P3), get_C_ulong(taskData, P4)); case XCALL_XAllocColorPlanes: return AllocColorPlanes(taskData, GetDisplay(taskData, XP1), GetColormap(taskData, XP1), get_C_ulong(taskData, P2), get_C_ulong(taskData, P3), get_C_ulong(taskData, P4), get_C_ulong(taskData, P5), get_C_ulong(taskData, P6)); case XCALL_XAllocNamedColor: return AllocNamedColor(taskData, GetDisplay(taskData, XP1),GetColormap(taskData, XP1),GetString(P2)); case XCALL_XFreeColors: FreeColors(taskData, GetDisplay(taskData, XP1),GetColormap(taskData, XP1),SAVE(P2),get_C_ulong(taskData, P3)); break; case XCALL_XLookupColor: return LookupColor(taskData, GetDisplay(taskData, XP1),GetColormap(taskData, XP1),GetString(P2)); case XCALL_XParseColor: return ParseColor(taskData, GetDisplay(taskData, XP1),GetColormap(taskData, XP1),GetString(P2)); case XCALL_XQueryColor: return QueryColor(taskData, GetDisplay(taskData, XP1),GetColormap(taskData, XP1),get_C_ulong(taskData, P2)); case XCALL_XQueryColors: return QueryColors(taskData, GetDisplay(taskData, XP1),GetColormap(taskData, XP1),SAVE(P2)); case XCALL_XStoreColor: XStoreColor(GetDisplay(taskData, XP1),GetColormap(taskData, XP1),GetXColor1(taskData, P2)); break; case XCALL_XStoreColors: StoreColors(taskData, GetDisplay(taskData, XP1),GetColormap(taskData, XP1),SAVE(P2)); break; case XCALL_XStoreNamedColor: StoreNamedColor(GetDisplay(taskData, XP1), GetColormap(taskData, XP1), GetString(P2), get_C_ulong(taskData, P3), get_C_ulong(taskData, P4), get_C_ulong(taskData, P5), get_C_ulong(taskData, P6)); break; case XCALL_BlackPixel: { Handle dsHandle /* Handle to (X_Display_Object *) */ = GetDS(taskData, XP1); return Make_unsigned(taskData, BlackPixel(DEREFDISPLAYHANDLE(dsHandle)->display, DEREFDISPLAYHANDLE(dsHandle)->screen)); } case XCALL_WhitePixel: { Handle dsHandle /* Handle to (X_Display_Object *) */ = GetDS(taskData, XP1); return Make_unsigned(taskData, WhitePixel(DEREFDISPLAYHANDLE(dsHandle)->display, DEREFDISPLAYHANDLE(dsHandle)->screen)); } /* Colormaps 150 */ case XCALL_XCopyColormapAndFree: return EmptyColormap(taskData, GetDS(taskData, XP1),XCopyColormapAndFree(GetDisplay(taskData, XP1),GetColormap(taskData, XP1))); case XCALL_XCreateColormap: return EmptyColormap(taskData, GetDS(taskData, XP1),XCreateColormap(GetDisplay(taskData, XP1),GetDrawable(taskData, XP1),GetVisual(taskData, XP2),get_C_ulong(taskData, P3))); case XCALL_XInstallColormap: XInstallColormap(GetDisplay(taskData, XP1),GetColormap(taskData, XP1)); break; case XCALL_XListInstalledColormaps: return ListInstalledColormaps(taskData, GetDS(taskData, XP1),GetDrawable(taskData, XP1)); case XCALL_XUninstallColormap: XUninstallColormap(GetDisplay(taskData, XP1),GetColormap(taskData, XP1)); break; case XCALL_DefaultColormap: { Handle dsHandle /* Handle to (X_Display_Object *) */ = GetDS(taskData, XP1); return EmptyColormap(taskData, dsHandle, DefaultColormap(DEREFDISPLAYHANDLE(dsHandle)->display, DEREFDISPLAYHANDLE(dsHandle)->screen)); } case XCALL_DefaultVisual: { Handle dsHandle /* Handle to (X_Display_Object *) */ = GetDS(taskData, XP1); return EmptyVisual(taskData, dsHandle, DefaultVisual(DEREFDISPLAYHANDLE(dsHandle)->display, DEREFDISPLAYHANDLE(dsHandle)->screen)); } case XCALL_DisplayCells: { Handle dsHandle /* Handle to (X_Display_Object *) */ = GetDS(taskData, XP1); return Make_unsigned(taskData, DisplayCells(DEREFDISPLAYHANDLE(dsHandle)->display, DEREFDISPLAYHANDLE(dsHandle)->screen)); } case XCALL_VisualClass: return Make_unsigned(taskData, GetVisual(taskData, XP1)->c_class); case XCALL_VisualRedMask: return Make_unsigned(taskData, GetVisual(taskData, XP1)->red_mask); case XCALL_VisualGreenMask: return Make_unsigned(taskData, GetVisual(taskData, XP1)->green_mask); case XCALL_VisualBlueMask: return Make_unsigned(taskData, GetVisual(taskData, XP1)->blue_mask); /* Cursors 200 */ case XCALL_XCreateFontCursor: return CreateFontCursor(taskData, GetDS(taskData, XP1),get_C_ulong(taskData, P2)); case XCALL_XCreateGlyphCursor: return CreateGlyphCursor(taskData, GetDS(taskData, XP1), GetFont(taskData, XP1), GetFont(taskData, XP2), get_C_ulong(taskData, P3), get_C_ulong(taskData, P4), GetXColor1(taskData, P5), GetXColor2(taskData, P6)); case XCALL_XCreatePixmapCursor: return CreatePixmapCursor(taskData, GetDS(taskData, XP1), GetPixmap(taskData, XP1), /* source */ GetPixmap(taskData, XP2), /* mask */ GetXColor1(taskData, P3), /* foreground */ GetXColor2(taskData, P4), /* background */ GetOffsetX(taskData, P5), /* x */ GetOffsetY(taskData, P5) /* y */); case XCALL_XDefineCursor: XDefineCursor(GetDisplay(taskData, XP1),GetWindow(taskData, XP1),GetCursor(taskData, XP2)); WindowObject(XP1)->cursor_object = CursorObject(XP2); break; case XCALL_XQueryBestCursor: CheckZeroRect(taskData, P2); return QueryBest(taskData, XQueryBestCursor, GetDisplay(taskData, XP1), GetDrawable(taskData, XP1), GetRectW(taskData, P2), GetRectH(taskData, P2)); case XCALL_XRecolorCursor: XRecolorCursor(GetDisplay(taskData, XP1), GetCursor(taskData, XP1), GetXColor1(taskData, P2), GetXColor2(taskData, P3)); break; case XCALL_XUndefineCursor: XUndefineCursor(GetDisplay(taskData, XP1),GetWindow(taskData, XP1)); WindowObject(XP1)->cursor_object = 0; break; /* Display Specifications 250 */ case XCALL_XOpenDisplay: return OpenDisplay(taskData, GetString(XP1)); #define DODISPLAYOP(op) \ {\ Handle dsHandle /* Handle to (X_Display_Object *) */ = GetDS(taskData, XP1);\ return Make_unsigned(taskData, op(DEREFDISPLAYHANDLE(dsHandle)->display,\ DEREFDISPLAYHANDLE(dsHandle)->screen));\ } case XCALL_CellsOfScreen: { Handle dsHandle /* Handle to (X_Display_Object *) */ = GetDS(taskData, XP1); return Make_unsigned(taskData, CellsOfScreen(ScreenOfDisplay(DEREFDISPLAYHANDLE(dsHandle)->display, DEREFDISPLAYHANDLE(dsHandle)->screen))); } case XCALL_DefaultDepth: DODISPLAYOP(DefaultDepth) case XCALL_DisplayHeight: DODISPLAYOP(DisplayHeight) case XCALL_DisplayHeightMM: DODISPLAYOP(DisplayHeightMM) case XCALL_DisplayPlanes: DODISPLAYOP(DisplayPlanes) case XCALL_DisplayString: { Handle dsHandle /* Handle to (X_Display_Object *) */ = GetDS(taskData, XP1); return Make_string(DisplayString(DEREFDISPLAYHANDLE(dsHandle)->display)); } case XCALL_DisplayWidth: DODISPLAYOP(DisplayWidth) case XCALL_DisplayWidthMM: DODISPLAYOP(DisplayWidthMM) #undef DODISPLAYOP #define DODISPLAYSCREENOP(op) \ {\ Handle dsHandle /* Handle to (X_Display_Object *) */ = GetDS(taskData, XP1);\ return Make_unsigned(taskData, op(ScreenOfDisplay(DEREFDISPLAYHANDLE(dsHandle)->display,\ DEREFDISPLAYHANDLE(dsHandle)->screen)));\ } case XCALL_DoesBackingStore: DODISPLAYSCREENOP(DoesBackingStore) case XCALL_DoesSaveUnders: DODISPLAYSCREENOP(DoesSaveUnders) case XCALL_EventMaskOfScreen: DODISPLAYSCREENOP(EventMaskOfScreen) case XCALL_MaxCmapsOfScreen: DODISPLAYSCREENOP(MaxCmapsOfScreen) case XCALL_MinCmapsOfScreen: DODISPLAYSCREENOP(MinCmapsOfScreen) #undef DODISPLAYSCREENOP case XCALL_ProtocolRevision: { Handle dsHandle /* Handle to (X_Display_Object *) */ = GetDS(taskData, XP1); return Make_unsigned(taskData, ProtocolRevision(DEREFDISPLAYHANDLE(dsHandle)->display)); } case XCALL_ProtocolVersion: { Handle dsHandle /* Handle to (X_Display_Object *) */ = GetDS(taskData, XP1); return Make_unsigned(taskData, ProtocolVersion(DEREFDISPLAYHANDLE(dsHandle)->display)); } case XCALL_ServerVendor: { Handle dsHandle /* Handle to (X_Display_Object *) */ = GetDS(taskData, XP1); return Make_string (ServerVendor(DEREFDISPLAYHANDLE(dsHandle)->display)); } case XCALL_VendorRelease: { Handle dsHandle /* Handle to (X_Display_Object *) */ = GetDS(taskData, XP1); return Make_unsigned(taskData, VendorRelease(DEREFDISPLAYHANDLE(dsHandle)->display)); } /* Drawing Primitives 300 */ case XCALL_XClearArea: XClearArea(GetDisplay(taskData, XP1), GetWindow(taskData, XP1), GetRectX(taskData, P2), GetRectY(taskData, P2), GetRectW(taskData, P2), GetRectH(taskData, P2), get_C_ulong(taskData, P3)); break; case XCALL_XClearWindow: XClearWindow(GetDisplay(taskData, XP1),GetWindow(taskData, XP1)); break; case XCALL_XCopyArea: XCopyArea(GetDisplay(taskData, XP1), GetDrawable(taskData, XP1), GetDrawable(taskData, XP2), GetGC(taskData, XP3), GetPointX(taskData, P4), GetPointY(taskData, P4), GetRectW(taskData, P5), GetRectH(taskData, P5), GetRectX(taskData, P5), GetRectY(taskData, P5)); break; case XCALL_XCopyPlane: XCopyPlane(GetDisplay(taskData, XP1), GetDrawable(taskData, XP1), GetDrawable(taskData, XP2), GetGC(taskData, XP3), GetPointX(taskData, P4), GetPointY(taskData, P4), GetRectW(taskData, P5), GetRectH(taskData, P5), GetRectX(taskData, P5), GetRectY(taskData, P5), get_C_ulong(taskData, P6)); break; case XCALL_XDrawArc: XDrawArc(GetDisplay(taskData, XP1), GetDrawable(taskData, XP1), GetGC(taskData, XP2), GetRectX(taskData, GetArcR(P3)), GetRectY(taskData, GetArcR(P3)), GetRectW(taskData, GetArcR(P3)), GetRectH(taskData, GetArcR(P3)), GetArcA1(taskData, P3), GetArcA2(taskData, P3)); break; case XCALL_XDrawArcs: { Handle list = SAVE(P3); if (NONNIL(DEREFWORD(list))) { unsigned N = ListLength(DEREFWORD(list)); XArc *L = (XArc *)alloca(N * sizeof(XArc)); GetList4(taskData, DEREFWORD(list), L, sizeof(XArc), GetArcs); XDrawArcs(GetDisplay(taskData, XP1), GetDrawable(taskData, XP1), GetGC(taskData, XP2), L, N); } } break; case XCALL_XDrawImageString: XDrawImageString(GetDisplay(taskData, XP1), GetDrawable(taskData, XP1), GetGC(taskData, XP2), GetPointX(taskData, P3), GetPointY(taskData, P3), GetString(P4)->chars, GetString(P4)->length); break; case XCALL_XDrawImageString16: { Handle list = SAVE(P4); if (NONNIL(DEREFWORD(list))) { unsigned N = ListLength(DEREFWORD(list)); XChar2b *L = (XChar2b *)alloca(N * sizeof(XChar2b)); GetList4(taskData, DEREFWORD(list),L, sizeof(XChar2b), GetChar2); XDrawImageString16(GetDisplay(taskData, XP1),GetDrawable(taskData, XP1),GetGC(taskData, XP2),GetPointX(taskData, P3),GetPointY(taskData, P3),L,N); } } break; case XCALL_XDrawLine: XDrawLine(GetDisplay(taskData, XP1), GetDrawable(taskData, XP1), GetGC(taskData, XP2), GetPointX(taskData, P3), GetPointY(taskData, P3), GetPointX(taskData, P4), GetPointY(taskData, P4)); break; case XCALL_XDrawLines: { Handle list = SAVE(P3); if (NONNIL(DEREFWORD(list))) { unsigned N = ListLength(DEREFWORD(list)); XPoint *L = (XPoint *)alloca(N * sizeof(XPoint)); GetList4(taskData, DEREFWORD(list), L, sizeof(XPoint), GetPoints); XDrawLines(GetDisplay(taskData, XP1), GetDrawable(taskData, XP1), GetGC(taskData, XP2), L, N, get_C_ulong(taskData, P4)); } } break; case XCALL_XDrawPoint: XDrawPoint(GetDisplay(taskData, XP1), GetDrawable(taskData, XP1), GetGC(taskData, XP2), GetPointX(taskData, P3), GetPointY(taskData, P3)); break; case XCALL_XDrawPoints: { Handle list = SAVE(P3); if (NONNIL(DEREFWORD(list))) { unsigned N = ListLength(DEREFWORD(list)); XPoint *L = (XPoint *)alloca(N * sizeof(XPoint)); GetList4(taskData, DEREFWORD(list),L,sizeof(XPoint),GetPoints); XDrawPoints(GetDisplay(taskData, XP1), GetDrawable(taskData, XP1), GetGC(taskData, XP2), L, N, get_C_ulong(taskData, P4)); } } break; case XCALL_XDrawRectangle: XDrawRectangle(GetDisplay(taskData, XP1), GetDrawable(taskData, XP1), GetGC(taskData, XP2), GetRectX(taskData, P3), GetRectY(taskData, P3), GetRectW(taskData, P3), GetRectH(taskData, P3)); break; case XCALL_XDrawRectangles: { Handle list = SAVE(P3); if (NONNIL(DEREFWORD(list))) { unsigned N = ListLength(DEREFWORD(list)); XRectangle *L = (XRectangle *)alloca(N * sizeof(XRectangle)); GetList4(taskData, DEREFWORD(list),L,sizeof(XRectangle),GetRects); XDrawRectangles(GetDisplay(taskData, XP1),GetDrawable(taskData, XP1),GetGC(taskData, XP2),L,N); } } break; case XCALL_XDrawSegments: { Handle list = SAVE(P3); if (NONNIL(DEREFWORD(list))) { unsigned N = ListLength(DEREFWORD(list)); XSegment *L = (XSegment *)alloca(N * sizeof(XSegment)); GetList4(taskData, DEREFWORD(list),L,sizeof(XSegment),GetSegments); XDrawSegments(GetDisplay(taskData, XP1),GetDrawable(taskData, XP1),GetGC(taskData, XP2),L,N); } } break; case XCALL_XDrawString: XDrawString(GetDisplay(taskData, XP1), GetDrawable(taskData, XP1), GetGC(taskData, XP2), GetPointX(taskData, P3), GetPointY(taskData, P3), GetString(P4)->chars, GetString(P4)->length); break; case XCALL_XDrawString16: { Handle list = SAVE(P4); if (NONNIL(DEREFWORD(list))) { unsigned N = ListLength(DEREFWORD(list)); XChar2b *L = (XChar2b *)alloca(N * sizeof(XChar2b)); GetList4(taskData, DEREFWORD(list),L,sizeof(XChar2b),GetChar2); XDrawString16(GetDisplay(taskData, XP1),GetDrawable(taskData, XP1),GetGC(taskData, XP2),GetPointX(taskData, P3),GetPointY(taskData, P3),L,N); } } break; case XCALL_XDrawText: { Handle list = SAVE(P4); if (NONNIL(DEREFWORD(list))) { unsigned N = ListLength(DEREFWORD(list)); XTextItem *L = (XTextItem *)alloca(N * sizeof(XTextItem)); GetList4(taskData, DEREFWORD(list),L,sizeof(XTextItem),GetText); XDrawText(GetDisplay(taskData, XP1),GetDrawable(taskData, XP1),GetGC(taskData, XP2),GetPointX(taskData, P3),GetPointY(taskData, P3),L,N); while (N--) { free(L->chars); L++; } } } break; case XCALL_XDrawText16: { Handle list = SAVE(P4); if (NONNIL(DEREFWORD(list))) { unsigned N = ListLength(DEREFWORD(list)); XTextItem16 *L = (XTextItem16 *)alloca(N * sizeof(XTextItem16)); GetList4(taskData, DEREFWORD(list),L,sizeof(XTextItem16), GetText16); XDrawText16(GetDisplay(taskData, XP1),GetDrawable(taskData, XP1),GetGC(taskData, XP2),GetPointX(taskData, P3),GetPointY(taskData, P3),L,N); while (N--) { free(L->chars); L++; } } } break; case XCALL_XFillArc: XFillArc(GetDisplay(taskData, XP1), GetDrawable(taskData, XP1), GetGC(taskData, XP2), GetRectX(taskData, GetArcR(P3)), GetRectY(taskData, GetArcR(P3)), GetRectW(taskData, GetArcR(P3)), GetRectH(taskData, GetArcR(P3)), GetArcA1(taskData, P3), GetArcA2(taskData, P3)); break; case XCALL_XFillArcs: { Handle list = SAVE(P3); if (NONNIL(DEREFWORD(list))) { unsigned N = ListLength(DEREFWORD(list)); XArc *L = (XArc *)alloca(N * sizeof(XArc)); GetList4(taskData, DEREFWORD(list),L,sizeof(XArc),GetArcs); XFillArcs(GetDisplay(taskData, XP1),GetDrawable(taskData, XP1),GetGC(taskData, XP2),L,N); } } break; case XCALL_XFillPolygon: { Handle list = SAVE(P3); if (NONNIL(DEREFWORD(list))) { unsigned N = ListLength(DEREFWORD(list)); XPoint *L = (XPoint *)alloca(N * sizeof(XPoint)); GetList4(taskData, DEREFWORD(list),L,sizeof(XPoint),GetPoints); XFillPolygon(GetDisplay(taskData, XP1),GetDrawable(taskData, XP1),GetGC(taskData, XP2),L,N,get_C_ulong(taskData, P4),get_C_ulong(taskData, P5)); } } break; case XCALL_XFillRectangle: XFillRectangle(GetDisplay(taskData, XP1), GetDrawable(taskData, XP1), GetGC(taskData, XP2), GetRectX(taskData, P3), GetRectY(taskData, P3), GetRectW(taskData, P3), GetRectH(taskData, P3)); break; case XCALL_XFillRectangles: { Handle list = SAVE(P3); if (NONNIL(DEREFWORD(list))) { unsigned N = ListLength(DEREFWORD(list)); XRectangle *L = (XRectangle *)alloca(N * sizeof(XRectangle)); GetList4(taskData, DEREFWORD(list),L,sizeof(XRectangle),GetRects); XFillRectangles(GetDisplay(taskData, XP1),GetDrawable(taskData, XP1),GetGC(taskData, XP2),L,N); } } break; /* Events 350 */ case XCALL_XSelectInput: (WindowObject(XP1))->eventMask->Set(0, PolyWord::FromUnsigned(get_C_ulong(taskData, P2))); XSelectInput(GetDisplay(taskData, XP1),GetWindow(taskData, XP1),XMASK((WindowObject(XP1))->eventMask->Get(0).AsUnsigned())); break; case XCALL_XSynchronize: XSynchronize(GetDisplay(taskData, XP1),get_C_ulong(taskData, P2)); break; case XCALL_GetState: return GetState(taskData, WindowObject(XP1)); /* WindowObject added SPF */ case XCALL_SetState: SetState(WindowObject(XP1),P2,P3); /* WindowObject added SPF */ break; case XCALL_NextEvent: return NextEvent(taskData, GetDS(taskData, XP1)); case XCALL_InsertTimeout: InsertTimeout(taskData, WindowObject(XP1),get_C_ulong(taskData, P2),P3,P4); /* WindowObject added SPF */ break; case XCALL_XSetInputFocus: XSetInputFocus(GetDisplay(taskData, XP1),GetWindow(taskData, XP2),get_C_ulong(taskData, P3),get_C_ulong(taskData, P4)); break; case XCALL_XGetInputFocus: return GetInputFocus(taskData, GetDS(taskData, XP1)); case XCALL_XSetSelectionOwner: SetSelectionOwner(GetDS(taskData, XP1),get_C_ulong(taskData, P2),GetWindow(taskData, XP3),get_C_ulong(taskData, P4)); break; case XCALL_XGetSelectionOwner: { Handle dsHandle /* Handle to (X_Display_Object *) */ = GetDS(taskData, XP1); return EmptyWindow(taskData, dsHandle,XGetSelectionOwner(DEREFDISPLAYHANDLE(dsHandle)->display, get_C_ulong(taskData, P2))); } case XCALL_XConvertSelection: XConvertSelection(GetDisplay(taskData, XP4), get_C_ulong(taskData, P1), get_C_ulong(taskData, P2), get_C_ulong(taskData, P3), GetWindow(taskData, XP4), get_C_ulong(taskData, P5)); break; case XCALL_XSendSelectionNotify: SendSelectionNotify(GetDisplay(taskData, XP4), get_C_ulong(taskData, P1), get_C_ulong(taskData, P2), get_C_ulong(taskData, P3), GetWindow(taskData, XP4), get_C_ulong(taskData, P5)); break; case XCALL_XDeleteProperty: XDeleteProperty(GetDisplay(taskData, XP1),GetWindow(taskData, XP1),get_C_ulong(taskData, P2)); break; case XCALL_XInternAtom: return InternAtom(taskData, GetDisplay(taskData, XP1),GetString(P2),get_C_long(taskData, P3)); case XCALL_XGetAtomName: return GetAtomName(taskData, GetDisplay(taskData, XP1),get_C_ulong(taskData, P2)); /* Fonts 400 */ case XCALL_XGetFontPath: return GetFontPath(taskData, GetDisplay(taskData, XP1)); case XCALL_XListFonts: return ListFonts(taskData, GetDisplay(taskData, XP1),GetString(P2),get_C_ulong(taskData, P3)); case XCALL_XListFontsWithInfo: return ListFontsWithInfo(taskData, GetDS(taskData, XP1),GetString(P2),get_C_ulong(taskData, P3)); case XCALL_XLoadFont: return LoadFont(taskData, GetDS(taskData, XP1),GetString(P2)); case XCALL_XLoadQueryFont: return LoadQueryFont(taskData, GetDS(taskData, XP1),GetString(P2)); case XCALL_XQueryFont: return QueryFont(taskData, GetDS(taskData, XP1),GetFont(taskData, XP1)); case XCALL_XSetFontPath: SetFontPath(taskData, GetDisplay(taskData, XP1),SAVE(P2)); break; /* Grabbing 450 */ /* Graphics Context 500 */ case XCALL_DefaultGC: return GetDefaultGC(taskData, GetDS(taskData, XP1)); case XCALL_UpdateGC: ChangeGC(taskData, GCObject(XP1),get_C_ulong(taskData, P2),P3); break; case XCALL_XCreateGC: return CreateGC(taskData, GetDS(taskData, XP1),GetDrawable(taskData, XP1)); case XCALL_XSetClipRectangles: SetClipRectangles(taskData, GetDisplay(taskData, XP1), GetGC(taskData, XP1), GetPointX(taskData, P2), GetPointY(taskData, P2), SAVE(P3), get_C_ulong(taskData, P4)); break; case XCALL_XSetDashes: SetDashes(taskData, GetDisplay(taskData, XP1), GetGC(taskData, XP1), get_C_ulong(taskData, P2), SAVE(P3)); break; /* Images 550 */ case XCALL_XAddPixel: AddPixel(GetXImage(taskData, GetDisplay(taskData, XP1),P2),get_C_ulong(taskData, P3)); break; case XCALL_XGetImage: return GetImage(taskData, GetDisplay(taskData, XP1), GetDrawable(taskData, XP1), GetRectX(taskData, P2), GetRectY(taskData, P2), GetRectW(taskData, P2), GetRectH(taskData, P2), get_C_ulong(taskData, P3), get_C_long(taskData, P4)); case XCALL_XGetPixel: return GetPixel(taskData, GetXImage(taskData, GetDisplay(taskData, XP1),P2), GetPointX(taskData, P3), GetPointY(taskData, P3)); case XCALL_XGetSubImage: GetSubImage(GetDisplay(taskData, XP1), GetDrawable(taskData, XP1), GetRectX(taskData, P2), GetRectY(taskData, P2), GetRectW(taskData, P2), GetRectH(taskData, P2), get_C_ulong(taskData, P3), get_C_long(taskData, P4), GetXImage(taskData, GetDisplay(taskData, XP1),P5), GetPointX(taskData, P6), GetPointY(taskData, P6)); break; case XCALL_XPutImage: PutImage(GetDisplay(taskData, XP1), GetDrawable(taskData, XP1), GetGC(taskData, XP2), GetXImage(taskData, GetDisplay(taskData, XP1),P3), GetPointX(taskData, P4), GetPointY(taskData, P4), GetRectX(taskData, P5), GetRectY(taskData, P5), GetRectW(taskData, P5), GetRectH(taskData, P5)); break; case XCALL_XPutPixel: PutPixel(GetXImage(taskData, GetDisplay(taskData, XP1),P2), GetPointX(taskData, P3), GetPointY(taskData, P3), get_C_ulong(taskData, P4)); break; case XCALL_XSubImage: return SubImage(taskData, GetXImage(taskData, GetDisplay(taskData, XP1),P2), GetRectX(taskData, P3), GetRectY(taskData, P3), GetRectW(taskData, P3), GetRectH(taskData, P3)); case XCALL_BitmapBitOrder: return Make_unsigned(taskData, MLImageOrder(BitmapBitOrder(GetDisplay(taskData, XP1)))); case XCALL_BitmapPad: return Make_unsigned(taskData, BitmapPad(GetDisplay(taskData, XP1))); case XCALL_BitmapUnit: return Make_unsigned(taskData, BitmapUnit(GetDisplay(taskData, XP1))); case XCALL_ByteOrder: return Make_unsigned(taskData, MLImageOrder(ImageByteOrder(GetDisplay(taskData, XP1)))); /* Keyboard 600 */ case XCALL_XLookupString: return LookupString(taskData, GetDisplay(taskData, XP1),get_C_ulong(taskData, P2),get_C_ulong(taskData, P3)); case XCALL_XQueryKeymap: return QueryKeymap(taskData, GetDisplay(taskData, XP1)); case XCALL_IsCursorKey: return Make_bool(IsCursorKey(get_C_ulong(taskData, P1))); case XCALL_IsFunctionKey: return Make_bool(IsFunctionKey(get_C_ulong(taskData, P1))); case XCALL_IsKeypadKey: return Make_bool(IsKeypadKey(get_C_ulong(taskData, P1))); case XCALL_IsMiscFunctionKey: return Make_bool(IsMiscFunctionKey(get_C_ulong(taskData, P1))); case XCALL_IsModifierKey: return Make_bool(IsModifierKey(get_C_ulong(taskData, P1))); case XCALL_IsPFKey: return Make_bool(IsPFKey(get_C_ulong(taskData, P1))); /* Output Buffer 650 */ case XCALL_XFlush: XFlush(GetDisplay(taskData, XP1)); break; case XCALL_XSync: XSync(GetDisplay(taskData, XP1),get_C_ulong(taskData, P2)); break; /* Pointers 700 */ case XCALL_XQueryPointer: return QueryPointer(taskData, GetDS(taskData, XP1),GetWindow(taskData, XP1)); /* Regions 750*/ /* SAVE Set 800 */ /* Screen Saver 850 */ case XCALL_XActivateScreenSaver: XActivateScreenSaver(GetDisplay(taskData, XP1)); break; case XCALL_XForceScreenSaver: XForceScreenSaver(GetDisplay(taskData, XP1),get_C_ulong(taskData, P2)); break; case XCALL_XGetScreenSaver: return GetScreenSaver(taskData, GetDisplay(taskData, XP1)); case XCALL_XResetScreenSaver: XResetScreenSaver(GetDisplay(taskData, XP1)); break; case XCALL_XSetScreenSaver: XSetScreenSaver(GetDisplay(taskData, XP1), get_C_long(taskData, P2), get_C_long(taskData, P3), get_C_ulong(taskData, P4), get_C_ulong(taskData, P5)); break; /* Standard Geometry 900 */ case XCALL_XTranslateCoordinates: return TranslateCoordinates(taskData, GetDS(taskData, XP1), GetWindow(taskData, XP1), GetWindow(taskData, XP2), GetPointX(taskData, P3), GetPointY(taskData, P3)); /* Text 950 */ case XCALL_XTextExtents: return TextExtents(taskData, GetFontStruct(taskData, P1),GetString(P2)); case XCALL_XTextExtents16: return TextExtents16(taskData, GetFontStruct(taskData, P1),SAVE(P2)); case XCALL_XTextWidth: return TextWidth(taskData, GetFontStruct(taskData, P1),GetString(P2)); case XCALL_XTextWidth16: return TextWidth16(taskData, GetFontStruct(taskData, P1),SAVE(P2)); /* Tiles, Pixmaps, Stipples and Bitmaps 1000 */ case XCALL_XCreateBitmapFromData: { Handle dsHandle /* Handle to (X_Display_Object *) */ = GetDS(taskData, XP1); CheckZeroRect(taskData, P3); return EmptyPixmap(taskData, dsHandle, XCreateBitmapFromData( DEREFDISPLAYHANDLE(dsHandle)->display, GetDrawable(taskData, XP1), /* drawable */ GetString(P2)->chars, /* data */ GetRectW(taskData, P3), /* width */ GetRectH(taskData, P3))); /* height */ } case XCALL_XCreatePixmap: { Handle dsHandle /* Handle to (X_Display_Object *) */ = GetDS(taskData, XP1); CheckZeroRect(taskData, P2); return EmptyPixmap(taskData, dsHandle, XCreatePixmap( DEREFDISPLAYHANDLE(dsHandle)->display, GetDrawable(taskData, XP1), /* drawable */ GetRectW(taskData, P2), /* width */ GetRectH(taskData, P2), /* height */ get_C_ulong(taskData, P3))); /* depth */ } case XCALL_XCreatePixmapFromBitmapData: { Handle dsHandle /* Handle to (X_Display_Object *) */ = GetDS(taskData, XP1); CheckZeroRect(taskData, P3); return EmptyPixmap(taskData, dsHandle, XCreatePixmapFromBitmapData( DEREFDISPLAYHANDLE(dsHandle)->display, GetDrawable(taskData, XP1), /* drawable */ GetString(P2)->chars, /* data */ GetRectW(taskData, P3), /* width */ GetRectH(taskData, P3), /* height */ get_C_ulong(taskData, P4), /* foreground */ get_C_ulong(taskData, P5), /* background */ get_C_ulong(taskData, P6))); /* depth */ } case XCALL_XQueryBestStipple: CheckZeroRect(taskData, P2); return QueryBest(taskData, XQueryBestStipple, GetDisplay(taskData, XP1), GetDrawable(taskData, XP1), GetRectW(taskData, P2), GetRectH(taskData, P2)); case XCALL_XQueryBestTile: CheckZeroRect(taskData, P2); return QueryBest(taskData, XQueryBestTile, GetDisplay(taskData, XP1), GetDrawable(taskData, XP1), GetRectW(taskData, P2), GetRectH(taskData, P2)); case XCALL_XReadBitmapFile: return ReadBitmap(taskData, GetDS(taskData, XP1),GetDrawable(taskData, XP1),GetString(P2)); case XCALL_XWriteBitmapFile: CheckZeroRect(taskData, P3); return WriteBitmapFile(taskData, GetString(XP1), GetDisplay(taskData, XP2), GetPixmap(taskData, XP2), GetRectW(taskData, P3), GetRectH(taskData, P3), GetPointX(taskData, P4), GetPointY(taskData, P4)); /* User Preferences 1050 */ case XCALL_XAutoRepeatOff: XAutoRepeatOff(GetDisplay(taskData, XP1)); break; case XCALL_XAutoRepeatOn: XAutoRepeatOn (GetDisplay(taskData, XP1)); break; case XCALL_XBell: XBell(GetDisplay(taskData, XP1),get_C_short(taskData, P2)); break; case XCALL_XGetDefault: return GetDefault(taskData, GetDisplay(taskData, XP1),GetString(P2),GetString(P3)); /* Window Attributes 1100 */ case XCALL_ChangeWindow: ChangeWindowAttributes(taskData, WindowObject(XP1),get_C_ulong(taskData, P2),P3); break; case XCALL_XGetGeometry: return GetGeometry(taskData, GetDS(taskData, XP1),GetDrawable(taskData, XP1)); case XCALL_XGetWindowAttributes: return GetWindowAttributes(taskData, GetDS(taskData, XP1),GetDrawable(taskData, XP1)); case XCALL_XSetWindowBorderWidth: XSetWindowBorderWidth(GetDisplay(taskData, XP1),GetWindow(taskData, XP1),get_C_ulong(taskData, P2)); break; /* Window Configuration 1150 */ case XCALL_XCirculateSubwindows: XCirculateSubwindows(GetDisplay(taskData, XP1),GetWindow(taskData, XP1),get_C_ulong(taskData, P2)); break; case XCALL_XConfigureWindow: ConfigureWindow(taskData, GetDisplay(taskData, XP1),GetWindow(taskData, XP1), P2); break; case XCALL_XLowerWindow: XLowerWindow(GetDisplay(taskData, XP1),GetWindow(taskData, XP1)); break; case XCALL_XMapRaised: XMapRaised(GetDisplay(taskData, XP1),GetWindow(taskData, XP1)); break; case XCALL_XMapSubwindows: XMapSubwindows(GetDisplay(taskData, XP1),GetWindow(taskData, XP1)); break; case XCALL_XMapWindow: XMapWindow(GetDisplay(taskData, XP1),GetWindow(taskData, XP1)); break; case XCALL_XMoveResizeWindow: CheckZeroRect(taskData, P3); XMoveResizeWindow(GetDisplay(taskData, XP1), GetWindow(taskData, XP1), GetPointX(taskData, P2), GetPointY(taskData, P2), GetRectW(taskData, P3), GetRectH(taskData, P3)); break; case XCALL_XMoveWindow: XMoveWindow(GetDisplay(taskData, XP1), GetWindow(taskData, XP1), GetPointX(taskData, P2), GetPointY(taskData, P2)); break; case XCALL_XQueryTree: return QueryTree(taskData,GetDS(taskData, XP1),GetWindow(taskData, XP1)); case XCALL_XRaiseWindow: XRaiseWindow(GetDisplay(taskData, XP1),GetWindow(taskData, XP1)); break; case XCALL_XReparentWindow: XReparentWindow(GetDisplay(taskData, XP1), GetWindow(taskData, XP1), GetWindow(taskData, XP2), GetPointX(taskData, P3), GetPointY(taskData, P3)); break; case XCALL_XResizeWindow: CheckZeroRect(taskData, P2); XResizeWindow(GetDisplay(taskData, XP1), GetWindow(taskData, XP1), GetRectW(taskData, P2), GetRectH(taskData, P2)); break; case XCALL_XRestackWindows: RestackWindows(taskData, SAVE(P1)); break; case XCALL_XUnmapSubwindows: XUnmapSubwindows(GetDisplay(taskData, XP1),GetWindow(taskData, XP1)); break; case XCALL_XUnmapWindow: XUnmapWindow(GetDisplay(taskData, XP1),GetWindow(taskData, XP1)); break; /* Window Existence 1200 */ case XCALL_RootWindow: { Handle dsHandle /* Handle to (X_Display_Object *) */ = GetDS(taskData, XP1); return EmptyWindow(taskData, dsHandle, RootWindow(DEREFDISPLAYHANDLE(dsHandle)->display, DEREFDISPLAYHANDLE(dsHandle)->screen)); } case XCALL_DestroyXObject: DestroyXObject(XP1); break; case XCALL_XDestroySubwindows: DestroySubwindows(XP1); break; case XCALL_XCreateSimpleWindow: CheckZeroRect(taskData, P3); return CreateSimpleWindow(taskData, SAVE(XP1), /* parent */ GetPointX(taskData, P2), /* x */ GetPointY(taskData, P2), /* y */ GetRectW(taskData, P3), /* w */ GetRectH(taskData, P3), /* h */ get_C_ulong(taskData, P4), /* borderWidth */ get_C_ulong(taskData, P5), /* border */ get_C_ulong(taskData, P6), /* background */ SAVE(P7), /* handler */ SAVE(P8)); /* state */ case XCALL_XCreateWindow: CheckZeroRect(taskData, P3); return CreateWindow(taskData, SAVE(XP1), /* parent */ GetPointX(taskData, P2), /* x */ GetPointY(taskData, P2), /* y */ GetRectW(taskData, P3), /* w */ GetRectH(taskData, P3), /* h */ get_C_ulong(taskData, P4), /* borderWidth */ get_C_ulong(taskData, P5), /* depth */ get_C_ulong(taskData, P6), /* class */ GetVisual(taskData, XP7), /* visual */ SAVE(P8), /* handler */ SAVE(P9)); /* state */ /* Window Manager 1250 */ case XCALL_XSetProperty: SetProperty(taskData, GetDisplay(taskData, XP1), GetWindow(taskData, XP1), get_C_ulong(taskData, P2), get_C_ulong(taskData, P3), SAVE(P4), get_C_ulong(taskData, P5)); break; case XCALL_XGetTextProperty: return GetTextProperty(taskData, GetDisplay(taskData, XP1),GetWindow(taskData, XP1),get_C_ulong(taskData, P2)); case XCALL_XGetWMHints: return GetWMHints(taskData, GetDS(taskData, XP1),GetWindow(taskData, XP1)); case XCALL_XGetWMSizeHints: return GetWMSizeHints(taskData, GetDisplay(taskData, XP1),GetWindow(taskData, XP1),get_C_ulong(taskData, P2)); case XCALL_XGetIconSizes: return GetIconSizes(taskData, GetDisplay(taskData, XP1),GetWindow(taskData, XP1)); case XCALL_XGetTransientForHint: return GetTransientForHint(taskData, GetDS(taskData, XP1),GetWindow(taskData, XP1)); case XCALL_XGetWMColormapWindows: return GetWMColormapWindows(taskData, GetDS(taskData, XP1),GetWindow(taskData, XP1)); case XCALL_XGetRGBColormaps: return GetRGBColormaps(taskData, GetDS(taskData, XP1),GetWindow(taskData, XP1),get_C_ulong(taskData, P2)); case XCALL_XWMGeometry: return WMGeometry(taskData, GetDS(taskData, XP1), GetString(P2), GetString(P3), get_C_ulong(taskData, P4), P5); /* Miscellaneous 1300 */ case XCALL_GetID: return GetID(taskData, XP1); case XCALL_ResourceExists: return Make_bool(ResourceExists(XP1)); case XCALL_GetDisplay: return GetDS(taskData, XP1); /******************************************************************************/ /* */ /* Xt Calls */ /* */ /******************************************************************************/ case XCALL_NoWidget: return EmptyWidget(taskData, SAVE(ListNull), (Widget)NULL); case XCALL_AppInitialise: return AppInitialise(taskData, P1, /* display name */ P2, /* application name */ P3, /* application class */ SAVE(P4), /* Fallback list */ SAVE(P5) /* Arg list */); case XCALL_XtRealizeWidget: XtRealizeWidget(GetWidget(taskData, XP1)); break; case XCALL_XtManageChildren: ManageChildren(taskData, SAVE(P1)); break; case XCALL_XtUnmanageChildren: UnmanageChildren(taskData, SAVE(P1)); break; case XCALL_XtDestroyWidget: { Widget w = GetWidget(taskData, XP1); XtDestroyWidget(w); /* The following test seems necessary - sometimes the callback from */ /* the above call destroys the widget, sometimes it doesn't. I think */ /* it always should, and I can't work out why this strange behaviour */ /* occurs. SPF 9/12/93 */ if (ResourceExists(XP1)) { DestroyXObject(XP1); PurgeCCallbacks((X_Widget_Object *)XP1,w); } break; } case XCALL_SetCallbacks: SetCallbacks (taskData, WidgetObject(taskData, XP1),P2,P3); break; /* WidgetObject added SPF */ case XCALL_XtSetValues: SetValues(taskData, GetWidget(taskData, XP1),SAVE(P2)); break; case XCALL_GetValue: return GetValue(taskData, GetDS(taskData, XP1),GetWidget(taskData, XP1),P2); case XCALL_XtParent: return EmptyWidget(taskData, GetDS(taskData, XP1),XtParent(GetWidget(taskData, XP1))); case XCALL_XtWindow: return EmptyWindow(taskData, GetDS(taskData, XP1),WindowOfWidget(GetWidget(taskData, XP1))); case XCALL_XtDisplay: return GetDS(taskData, XP1); case XCALL_XtUnrealizeWidget: XtUnrealizeWidget(GetWidget(taskData, XP1)); break; case XCALL_XtName: return Make_string(XtName(GetWidget(taskData, XP1))); case XCALL_XtParseTranslationTable: return ParseTranslationTable(taskData, GetString(XP1)); case XCALL_XtOverrideTranslations: XtOverrideTranslations(GetWidget(taskData, XP1),GetTrans(taskData, XP2)); break; case XCALL_XtAugmentTranslations: XtAugmentTranslations(GetWidget(taskData, XP1),GetTrans(taskData, XP2)); break; case XCALL_XtUninstallTranslations: XtUninstallTranslations(GetWidget(taskData, XP1)); break; /* case XCALL_XtTranslateTablePrint: _XtTranslateTablePrint(GetTrans(taskData, XP1)); break; */ case XCALL_XtCreatePopupShell: return CreatePopupShell(taskData, GetString(XP1),GetDS(taskData, XP2),GetWidget(taskData, XP2),SAVE(P3)); case XCALL_InsertWidgetTimeout: InsertWidgetTimeout(taskData, WidgetObject(taskData, XP1),get_C_ulong(taskData, P2),P3,P4); break; /* WidgetObject added SPF */ case XCALL_GetWidgetState: return SAVE(WidgetObjectToken(XP1)->state); /* was WidgetObject(XP1) (SPF) */ case XCALL_SetWidgetState: WidgetObjectToken(XP1)->state = P2; break; /* was WidgetObject(XP1) (SPF) */ case XCALL_XtSetSensitive: XtSetSensitive(GetWidget(taskData, XP1),get_C_ulong(taskData, P2)); break; case XCALL_XtIsSensitive: return Make_bool(XtIsSensitive(GetWidget(taskData, XP1))); case XCALL_GetSubresources: return GetSubresources(taskData, GetDS(taskData, XP1), GetWidget(taskData, XP1), GetString(P2), GetString(P3), SAVE(P4)); case XCALL_Cast: return SAVE(P1); case XCALL_XtPopup: XtPopup(GetWidget(taskData, XP1),GetXtGrabKind(taskData, P2)); break; case XCALL_XtPopdown: XtPopdown(GetWidget(taskData, XP1)); break; case XCALL_XtMapWidget: XtMapWidget(GetRealizedWidget(taskData, (char *) "XtMapWidget",XP1)); break; case XCALL_XtUnmapWidget: XtUnmapWidget(GetRealizedWidget(taskData, (char *) "XtUnmapWidget",XP1)); break; case XCALL_XtIsManaged: return Make_bool(XtIsManaged(GetWidget(taskData, XP1))); case XCALL_XtIsRealized: return Make_bool(XtIsRealized(GetWidget(taskData, XP1))); /* Added DCJM. */ case XCALL_XtGetApplicationResources: return GetApplicationResources (taskData, GetDS(taskData, XP1),GetWidget(taskData, XP1),SAVE(P2) ) ; case XCALL_XtAddEventHandler: AddEventhandler (taskData, WidgetObject(taskData, XP1), get_C_ulong(taskData, P2), get_C_ulong(taskData, P3), SAVE(P4)); break; /******************************************************************************/ /* */ /* Motif Calls - widget creation */ /* */ /******************************************************************************/ /* Motif 4000 */ #define XMCREATE(number,name) \ case number: return CreateXm(taskData, name, (char *) \ #name " failed", \ GetDS(taskData, XP1), \ GetWidget(taskData, XP1), \ GetString(P2), \ SAVE(P3)) XMCREATE(XCALL_XmCreateArrowButton,XmCreateArrowButton); XMCREATE(XCALL_XmCreateArrowButtonGadget,XmCreateArrowButtonGadget); XMCREATE(XCALL_XmCreateBulletinBoard,XmCreateBulletinBoard); XMCREATE(XCALL_XmCreateBulletinBoardDialog,XmCreateBulletinBoardDialog); XMCREATE(XCALL_XmCreateCascadeButton,XmCreateCascadeButton); XMCREATE(XCALL_XmCreateCascadeButtonGadget,XmCreateCascadeButtonGadget); XMCREATE(XCALL_XmCreateCommand,XmCreateCommand); XMCREATE(XCALL_XmCreateDialogShell,XmCreateDialogShell); XMCREATE(XCALL_XmCreateDrawingArea,XmCreateDrawingArea); XMCREATE(XCALL_XmCreateDrawnButton,XmCreateDrawnButton); XMCREATE(XCALL_XmCreateErrorDialog,XmCreateErrorDialog); XMCREATE(XCALL_XmCreateFileSelectionBox,XmCreateFileSelectionBox); XMCREATE(XCALL_XmCreateFileSelectionDialog,XmCreateFileSelectionDialog); XMCREATE(XCALL_XmCreateForm,XmCreateForm); XMCREATE(XCALL_XmCreateFormDialog,XmCreateFormDialog); XMCREATE(XCALL_XmCreateFrame,XmCreateFrame); XMCREATE(XCALL_XmCreateInformationDialog,XmCreateInformationDialog); XMCREATE(XCALL_XmCreateLabel,XmCreateLabel); XMCREATE(XCALL_XmCreateLabelGadget,XmCreateLabelGadget); XMCREATE(XCALL_XmCreateList,XmCreateList); XMCREATE(XCALL_XmCreateMainWindow,XmCreateMainWindow); XMCREATE(XCALL_XmCreateMenuBar,XmCreateMenuBar); XMCREATE(XCALL_XmCreateMenuShell,XmCreateMenuShell); XMCREATE(XCALL_XmCreateMessageBox,XmCreateMessageBox); XMCREATE(XCALL_XmCreateMessageDialog,XmCreateMessageDialog); XMCREATE(XCALL_XmCreateOptionMenu,XmCreateOptionMenu); XMCREATE(XCALL_XmCreatePanedWindow,XmCreatePanedWindow); XMCREATE(XCALL_XmCreatePopupMenu,XmCreatePopupMenu); XMCREATE(XCALL_XmCreatePromptDialog,XmCreatePromptDialog); XMCREATE(XCALL_XmCreatePulldownMenu,XmCreatePulldownMenu); XMCREATE(XCALL_XmCreatePushButton,XmCreatePushButton); XMCREATE(XCALL_XmCreatePushButtonGadget,XmCreatePushButtonGadget); XMCREATE(XCALL_XmCreateQuestionDialog,XmCreateQuestionDialog); XMCREATE(XCALL_XmCreateRadioBox,XmCreateRadioBox); XMCREATE(XCALL_XmCreateRowColumn,XmCreateRowColumn); XMCREATE(XCALL_XmCreateScale,XmCreateScale); XMCREATE(XCALL_XmCreateScrollBar,XmCreateScrollBar); XMCREATE(XCALL_XmCreateScrolledList,XmCreateScrolledList); XMCREATE(XCALL_XmCreateScrolledText,XmCreateScrolledText); XMCREATE(XCALL_XmCreateScrolledWindow,XmCreateScrolledWindow); XMCREATE(XCALL_XmCreateSelectionBox,XmCreateSelectionBox); XMCREATE(XCALL_XmCreateSelectionDialog,XmCreateSelectionDialog); XMCREATE(XCALL_XmCreateSeparator,XmCreateSeparator); XMCREATE(XCALL_XmCreateSeparatorGadget,XmCreateSeparatorGadget); XMCREATE(XCALL_XmCreateSimpleCheckBox,XmCreateSimpleCheckBox); XMCREATE(XCALL_XmCreateSimpleMenuBar,XmCreateSimpleMenuBar); XMCREATE(XCALL_XmCreateSimpleOptionMenu,XmCreateSimpleOptionMenu); XMCREATE(XCALL_XmCreateSimplePopupMenu,XmCreateSimplePopupMenu); XMCREATE(XCALL_XmCreateSimplePulldownMenu,XmCreateSimplePulldownMenu); XMCREATE(XCALL_XmCreateSimpleRadioBox,XmCreateSimpleRadioBox); XMCREATE(XCALL_XmCreateText,XmCreateText); XMCREATE(XCALL_XmCreateTextField,XmCreateTextField); XMCREATE(XCALL_XmCreateToggleButton,XmCreateToggleButton); XMCREATE(XCALL_XmCreateToggleButtonGadget,XmCreateToggleButtonGadget); XMCREATE(XCALL_XmCreateWarningDialog,XmCreateWarningDialog); XMCREATE(XCALL_XmCreateWorkArea,XmCreateWorkArea); XMCREATE(XCALL_XmCreateWorkingDialog,XmCreateWorkingDialog); #undef XMCREATE /******************************************************************************/ /* */ /* Motif Calls - miscellaneous */ /* */ /******************************************************************************/ case XCALL_XmCascadeButtonHighlight: XmCascadeButtonHighlight(GetWidget(taskData, XP1),get_C_ulong(taskData, P2)); break; case XCALL_XmCommandError: CommandError(taskData, GetWidget(taskData, XP1),P2); break; case XCALL_XmCommandGetChild: return EmptyWidget(taskData, GetDS(taskData, XP1), XmCommandGetChild(GetWidget(taskData, XP1),get_C_ulong(taskData, P2))); case XCALL_XmFileSelectionBoxGetChild: return EmptyWidget(taskData, GetDS(taskData, XP1), XmFileSelectionBoxGetChild(GetWidget(taskData, XP1),get_C_ulong(taskData, P2))); case XCALL_XmFileSelectionDoSearch: FileSelectionDoSearch(taskData, GetWidget(taskData, XP1),P2); break; case XCALL_XmIsSomething: return XmIsSomething(taskData, get_C_ulong(taskData, P1),GetWidget(taskData, XP2)); case XCALL_XmMainWindowSetAreas: XmMainWindowSetAreas(GetWidget(taskData, XP1), GetNWidget(taskData, XP2), GetNWidget(taskData, XP3), GetNWidget(taskData, XP4), GetNWidget(taskData, XP5), GetNWidget(taskData, XP6)); break; case XCALL_XmMainWindowSepX: switch(get_C_ulong(taskData, P2)) { case 1: return EmptyWidget(taskData, GetDS(taskData, XP1),XmMainWindowSep1(GetWidget(taskData, XP1))); case 2: return EmptyWidget(taskData, GetDS(taskData, XP1),XmMainWindowSep2(GetWidget(taskData, XP1))); default: return EmptyWidget(taskData, GetDS(taskData, XP1),XmMainWindowSep3(GetWidget(taskData, XP1))); } case XCALL_XmMessageBoxGetChild: return EmptyWidget(taskData, GetDS(taskData, XP1), XmMessageBoxGetChild(GetWidget(taskData, XP1),get_C_ulong(taskData, P2))); case XCALL_XmOptionButtonGadget: return EmptyWidget(taskData, GetDS(taskData, XP1),XmOptionButtonGadget(GetWidget(taskData, XP1))); case XCALL_XmOptionLabelGadget: return EmptyWidget(taskData, GetDS(taskData, XP1),XmOptionLabelGadget (GetWidget(taskData, XP1))); case XCALL_XmSelectionBoxGetChild: return EmptyWidget(taskData, GetDS(taskData, XP1), XmSelectionBoxGetChild(GetWidget(taskData, XP1),get_C_ulong(taskData, P2))); case XCALL_XmSetMenuCursor: XmSetMenuCursor(GetDisplay(taskData, XP1),GetCursor(taskData, XP2)); break; case XCALL_XmScrolledWindowSetAreas: XmScrolledWindowSetAreas(GetWidget(taskData, XP1), GetNWidget(taskData, XP2), GetNWidget(taskData, XP3), GetNWidget(taskData, XP4)); break; /******************************************************************************/ /* */ /* Operations on XmText widgets */ /* */ /******************************************************************************/ #define TextWidgetToLong(func) \ case XCALL_ ## func : \ return(WidgetToLong(taskData,(char *) #func,GetTextWidget,func,XP1)) #define TextWidgetToInt(func) \ case XCALL_ ## func : \ return(WidgetToInt(taskData,(char *) #func,GetTextWidget,func,XP1)) #define TextWidgetToBool(func) \ case XCALL_ ## func : \ return(WidgetToBool(taskData,(char *) #func,GetTextWidget,func,XP1)) #define TextWidgetToString(func) \ case XCALL_ ## func : \ return(WidgetToString(taskData,(char *) #func,GetTextWidget,func,XP1)) #define TextWidgetIntAction(func) \ case XCALL_ ## func : \ WidgetIntAction(taskData,(char *) #func,GetTextWidget,func,XP1,P2); \ break #define TextWidgetLongAction(func) \ case XCALL_ ## func : \ WidgetLongAction(taskData,(char *) #func,GetTextWidget,func,XP1,P2); \ break #define TextWidgetBoolAction(func) \ case XCALL_ ## func : \ WidgetBoolAction(taskData,(char *) #func,GetTextWidget,func,XP1,P2); \ break /* XmTextClearSelection not supported */ /* XmTextCopy not supported */ /* XmTextCut not supported */ #ifdef LESSTIF_VERSION /* This is not supported in LessTif, at least not 0.89. */ case XCALL_XmTextGetAddMode: RaiseXWindows(taskData, "XmTextGetAddMode: not implemented"); #else TextWidgetToBool(XmTextGetAddMode); #endif TextWidgetToLong(XmTextGetCursorPosition); TextWidgetToInt(XmTextGetBaseline); TextWidgetToBool(XmTextGetEditable); TextWidgetToLong(XmTextGetInsertionPosition); TextWidgetToLong(XmTextGetLastPosition); TextWidgetToInt(XmTextGetMaxLength); TextWidgetToString(XmTextGetSelection); /* XmTextGetSelectionPosition not supported */ TextWidgetToString(XmTextGetString); /* XmTextGetSource not supported */ TextWidgetToLong(XmTextGetTopCharacter); case XCALL_XmTextInsert: { Widget w = GetTextWidget(taskData, (char *) "XmTextInsert",XP1); { unsigned pos = get_C_ulong(taskData, P2); PolyStringObject *s = GetString(P3); int size = s->length + 1; char *buffer = (char *)alloca(size); Poly_string_to_C(s,buffer,size); XmTextInsert(w,pos,buffer); break; } } TextWidgetToBool(XmTextPaste); /* with side effect! */ /* XmTextPosToXY not supported */ TextWidgetToBool(XmTextRemove); /* with side effect! */ case XCALL_XmTextReplace: { Widget w = GetTextWidget(taskData, (char *) "XmTextReplace",XP1); { unsigned from_pos = get_C_ulong(taskData, P2); unsigned to_pos = get_C_ulong(taskData, P3); PolyStringObject *s = GetString(P4); int size = s->length + 1; char *buffer = (char *)alloca(size); Poly_string_to_C(s,buffer,size); XmTextReplace(w,from_pos,to_pos,buffer); break; } } TextWidgetIntAction(XmTextScroll); /* for side effect! */ TextWidgetBoolAction(XmTextSetAddMode); TextWidgetLongAction(XmTextSetCursorPosition); TextWidgetBoolAction(XmTextSetEditable); /* XmTextSetHighlight not supported */ TextWidgetLongAction(XmTextSetInsertionPosition); TextWidgetIntAction(XmTextSetMaxLength); /* XmTextSetSelection not supported */ /* XmTextSetSource not supported */ /* inlined SPF 15/2/94 */ case XCALL_XmTextSetString: { Widget w = GetTextWidget(taskData, (char *) "XmTextSetString",XP1); { PolyStringObject *s = GetString(P2); int size = s->length + 1; char *buffer = (char *)alloca(size); Poly_string_to_C(s,buffer,size); XmTextSetString(w,buffer); break; } } TextWidgetLongAction(XmTextSetTopCharacter); TextWidgetLongAction(XmTextShowPosition); case XCALL_XmTextXYToPos: { Widget w = GetTextWidget(taskData, (char *) "XmTextXYToPos",XP1); { int x = get_C_long(taskData, P2); int y = get_C_long(taskData, P3); return Make_int(XmTextXYToPos(w,x,y)); } } #undef TextWidgetToLong #undef TextWidgetToInt #undef TextWidgetToBool #undef TextWidgetToString #undef TextWidgetIntAction #undef TextWidgetBoolAction /******************************************************************************/ /* */ /* Operations on XmTextField widgets */ /* */ /******************************************************************************/ #define TextFieldWidgetToLong(func) \ case XCALL_ ## func : \ return(WidgetToLong(taskData, (char *) #func,GetTextFieldWidget,func,XP1)) #define TextFieldWidgetToInt(func) \ case XCALL_ ## func : \ return(WidgetToInt(taskData, (char *) #func,GetTextFieldWidget,func,XP1)) #define TextFieldWidgetToBool(func) \ case XCALL_ ## func : \ return(WidgetToBool(taskData, (char *) #func,GetTextFieldWidget,func,XP1)) #define TextFieldWidgetToString(func) \ case XCALL_ ## func : \ return(WidgetToString(taskData, (char *) #func,GetTextFieldWidget,func,XP1)) #define TextFieldWidgetIntAction(func) \ case XCALL_ ## func : \ WidgetIntAction(taskData, (char *) #func,GetTextFieldWidget,func,XP1,P2); \ break #define TextFieldWidgetLongAction(func) \ case XCALL_ ## func : \ WidgetLongAction(taskData, (char *) #func,GetTextFieldWidget,func,XP1,P2); \ break #define TextFieldWidgetBoolAction(func) \ case XCALL_ ## func : \ WidgetBoolAction(taskData, (char *) #func,GetTextFieldWidget,func,XP1,P2); \ break /* XmTextFieldClearSelection not supported */ /* XmTextFieldCopy not supported */ /* XmTextFieldCut not supported */ #ifdef LESSTIF_VERSION /* This is not supported in LessTif, at least not 0.89. */ case XCALL_XmTextFieldGetAddMode: RaiseXWindows(taskData, "XmTextFieldGetAddMode: not implemented"); #else TextFieldWidgetToBool(XmTextFieldGetAddMode); #endif TextFieldWidgetToInt(XmTextFieldGetBaseline); TextFieldWidgetToLong(XmTextFieldGetCursorPosition); TextFieldWidgetToBool(XmTextFieldGetEditable); TextFieldWidgetToLong(XmTextFieldGetInsertionPosition); TextFieldWidgetToLong(XmTextFieldGetLastPosition); TextFieldWidgetToInt(XmTextFieldGetMaxLength); TextFieldWidgetToString(XmTextFieldGetSelection); /* XmTextFieldGetSelectionPosition not supported */ TextFieldWidgetToString(XmTextFieldGetString); /* XmTextFieldGetSource not supported */ case XCALL_XmTextFieldInsert: { Widget w = GetTextFieldWidget(taskData, (char *) "XmTextFieldInsert",XP1); { unsigned pos = get_C_ulong(taskData, P2); PolyStringObject *s = GetString(P3); int size = s->length + 1; char *buffer = (char *)alloca(size); Poly_string_to_C(s,buffer,size); XmTextFieldInsert(w,pos,buffer); break; } } TextFieldWidgetToBool(XmTextFieldPaste); /* for side effect! */ /* XmTextFieldPosToXY not supported */ TextFieldWidgetToBool(XmTextFieldRemove); /* for side effect! */ case XCALL_XmTextFieldReplace: { Widget w = GetTextFieldWidget(taskData, (char *) "XmTextFieldReplace",XP1); { unsigned from_pos = get_C_ulong(taskData, P2); unsigned to_pos = get_C_ulong(taskData, P3); PolyStringObject *s = GetString(P4); int size = s->length + 1; char *buffer = (char *)alloca(size); Poly_string_to_C(s,buffer,size); XmTextFieldReplace(w,from_pos,to_pos,buffer); break; } } TextFieldWidgetBoolAction(XmTextFieldSetAddMode); TextFieldWidgetLongAction(XmTextFieldSetCursorPosition); TextFieldWidgetBoolAction(XmTextFieldSetEditable); /* XmTextFieldSetHighlight not supported */ TextFieldWidgetLongAction(XmTextFieldSetInsertionPosition); TextFieldWidgetIntAction(XmTextFieldSetMaxLength); /* XmTextFieldSetSelection not supported */ /* inlined SPF 15/2/94 */ case XCALL_XmTextFieldSetString: { Widget w = GetTextFieldWidget(taskData, (char *) "XmTextFieldSetString",XP1); { PolyStringObject *s = GetString(P2); int size = s->length + 1; char *buffer = (char *)alloca(size); Poly_string_to_C(s,buffer,size); XmTextFieldSetString(w,buffer); break; } } TextFieldWidgetLongAction(XmTextFieldShowPosition); /* for side effect! */ case XCALL_XmTextFieldXYToPos: { Widget w = GetTextFieldWidget(taskData, (char *) "XmTextFieldXYToPos",XP1); { int x = get_C_long(taskData, P2); int y = get_C_long(taskData, P3); return Make_int(XmTextFieldXYToPos(w,x,y)); } } case XCALL_XmTrackingLocate: return EmptyWidget(taskData, GetDS(taskData, XP1), XmTrackingLocate(GetWidget(taskData, XP1),GetCursor(taskData, XP2),get_C_ulong(taskData, P3))); case XCALL_XmUpdateDisplay: XmUpdateDisplay(GetWidget(taskData, XP1)); break; #undef TextFieldWidgetToLong #undef TextFieldWidgetToInt #undef TextFieldWidgetToBool #undef TextFieldWidgetToString #undef TextFieldWidgetIntAction #undef TextFieldWidgetLongAction #undef TextFieldWidgetBoolAction /******************************************************************************/ /* */ /* Operations on XmList widgets */ /* */ /******************************************************************************/ #define ListWidgetAction(func) \ case XCALL_ ## func : \ WidgetAction(taskData, (char *) #func,GetListWidget,func,XP1); \ break #define ListWidgetBoolAction(func) \ case XCALL_ ## func : \ WidgetBoolAction(taskData, (char *) #func,GetListWidget,func,XP1,P2); \ break #define ListWidgetXmstringAction(func) \ case XCALL_ ## func : \ WidgetXmstringAction(taskData, (char *) #func,GetListWidget,func,XP1,P2); \ break #define ListWidgetXmstringlistAction(func) \ case XCALL_ ## func : \ WidgetXmstringlistAction(taskData, (char *) #func,GetListWidget,func,XP1,(ML_Cons_Cell *)XP2); \ break #define ListWidgetIntAction(func) \ case XCALL_ ## func : \ WidgetIntAction(taskData, (char *) #func,GetListWidget,func,XP1,P2); \ break #define ListWidgetIntIntAction(func) \ case XCALL_ ## func : \ WidgetIntIntAction(taskData, (char *) #func,GetListWidget,func,XP1,P2,P3); \ break #define ListWidgetXmstringIntAction(func) \ case XCALL_ ## func : \ WidgetXmstringIntAction(taskData, (char *) #func,GetListWidget,func,XP1,P2,P3); \ break #define ListWidgetIntBoolAction(func) \ case XCALL_ ## func : \ WidgetIntBoolAction(taskData, (char *) #func,GetListWidget,func,XP1,P2,P3); \ break #define ListWidgetXmstringBoolAction(func) \ case XCALL_ ## func : \ WidgetXmstringBoolAction(taskData, (char *) #func,GetListWidget,func,XP1,P2,P3); \ break #define ListWidgetXmstringlistIntAction(func) \ case XCALL_ ## func : \ WidgetXmstringlistIntAction(taskData, (char *) #func,GetListWidget,func,XP1,(ML_Cons_Cell *)XP2,P3); \ break #define ListWidgetXmstringToIntlist(func) \ case XCALL_ ## func : \ return(WidgetXmstringToIntlist(taskData, (char *) #func,GetListWidget,func,XP1,P2)) #define ListWidgetToIntlist(func) \ case XCALL_ ## func : \ return(WidgetToIntlist(taskData, (char *) #func,GetListWidget,func,XP1)) #define ListWidgetXmstringToBool(func) \ case XCALL_ ## func : \ return(WidgetXmstringToBool(taskData, (char *) #func,GetListWidget,func,XP1,P2)) #define ListWidgetXmstringToInt(func) \ case XCALL_ ## func : \ return(WidgetXmstringToInt(taskData, (char *) #func,GetListWidget,func,XP1,P2)) /************************* Adding Items to List *******************************/ ListWidgetXmstringIntAction(XmListAddItem); ListWidgetXmstringIntAction(XmListAddItemUnselected); ListWidgetXmstringlistIntAction(XmListAddItems); /************************* Deleting Items from List ***************************/ ListWidgetAction(XmListDeleteAllItems); ListWidgetXmstringAction(XmListDeleteItem); ListWidgetXmstringlistAction(XmListDeleteItems); ListWidgetIntAction(XmListDeletePos); ListWidgetIntIntAction(XmListDeleteItemsPos); /************************* Deselecting Items **********************************/ ListWidgetAction(XmListDeselectAllItems); ListWidgetXmstringAction(XmListDeselectItem); ListWidgetIntAction(XmListDeselectPos); /************************* Query Functions ************************************/ ListWidgetXmstringToIntlist(XmListGetMatchPos); ListWidgetToIntlist(XmListGetSelectedPos); ListWidgetXmstringToBool(XmListItemExists); ListWidgetXmstringToInt(XmListItemPos); /************************* Replacing Items in the List ************************/ case XCALL_XmListReplaceItems: /* Unpairing the strings is done in the ML, because it's easier there. */ { Widget w = GetListWidget(taskData, (char *) "XmListReplaceItems",XP1); unsigned n = ListLength(P2); unsigned n2 = ListLength(P3); if (n != n2) { RaiseXWindows(taskData, "XmListReplaceItems: strings lists are different lengths"); } else { XmString *oldstrings = (XmString *)alloca(n * sizeof(XmString)); XmString *newstrings = (XmString *)alloca(n * sizeof(XmString)); GetList4(taskData, P2,oldstrings,sizeof(XmString),GetXmString); GetList4(taskData, P3,newstrings,sizeof(XmString),GetXmString); XmListReplaceItems(w,oldstrings,n,newstrings); for (unsigned i = 0; i < n; i ++) XmStringFree(oldstrings[i]); for (unsigned i = 0; i < n; i ++) XmStringFree(newstrings[i]); } break; } ListWidgetXmstringlistIntAction(XmListReplaceItemsPos); /************************* Selecting Items in the List ************************/ ListWidgetXmstringBoolAction(XmListSelectItem); ListWidgetIntBoolAction(XmListSelectPos); /************************* Set Add Mode ***************************************/ ListWidgetBoolAction(XmListSetAddMode); /************************* Set Appearance *************************************/ ListWidgetXmstringAction(XmListSetBottomItem); ListWidgetIntAction(XmListSetBottomPos); ListWidgetIntAction(XmListSetHorizPos); ListWidgetXmstringAction(XmListSetItem); ListWidgetIntAction(XmListSetPos); #undef ListWidgetAction #undef ListWidgetBoolAction #undef ListWidgetXmstringAction #undef ListWidgetXmstringlistAction #undef ListWidgetIntAction #undef ListWidgetIntIntAction #undef ListWidgetXmstringIntAction #undef ListWidgetXmstringBoolAction #undef ListWidgetXmstringlistIntAction #undef ListWidgetXmstringToIntlist #undef ListWidgetToIntlist #undef ListWidgetXmstringToBool #undef ListWidgetXmstringToInt /* Calls added by DCJM. */ case XCALL_XmMenuPosition: MenuPosition( GetWidget(taskData, XP1), get_C_ulong(taskData, P2), get_C_ulong(taskData, P3)); break; /******************************************************************************/ /* */ /* Default case */ /* */ /******************************************************************************/ default: Crash ("Unimplemented X Windows call %d", code); } return Make_bool(False); } typedef struct { int code; const char *name; } CodeName; static CodeName ProtocolNames[] = { { X_CreateWindow,"XCreateWindow"}, { X_ChangeWindowAttributes,"XChangeWindowAttributes"}, { X_GetWindowAttributes,"XGetWindowAttributes"}, { X_DestroyWindow,"XDestroyWindow"}, { X_DestroySubwindows,"XDestroySubwindows"}, { X_ChangeSaveSet,"XChangeSAVESet"}, { X_ReparentWindow,"XReparentWindow"}, { X_MapWindow,"XMapWindow"}, { X_MapSubwindows,"XMapSubwindows"}, { X_UnmapWindow,"XUnmapWindow"}, { X_UnmapSubwindows,"XUnmapSubwindows"}, { X_ConfigureWindow,"XConfigureWindow"}, { X_CirculateWindow,"XCirculateWindow"}, { X_GetGeometry,"XGetGeometry"}, { X_QueryTree,"XQueryTree"}, { X_InternAtom,"XInternAtom"}, { X_GetAtomName,"XGetAtomName"}, { X_ChangeProperty,"XChangeProperty"}, { X_DeleteProperty,"XDeleteProperty"}, { X_GetProperty,"XGetProperty"}, { X_ListProperties,"XListProperties"}, { X_SetSelectionOwner,"XSetSelectionOwner"}, { X_GetSelectionOwner,"XGetSelectionOwner"}, { X_ConvertSelection,"XConvertSelection"}, { X_SendEvent,"XSendEvent"}, { X_GrabPointer,"XGrabPointer"}, { X_UngrabPointer,"XUngrabPointer"}, { X_GrabButton,"XGrabButton"}, { X_UngrabButton,"XUngrabButton"}, { X_ChangeActivePointerGrab,"XChangeActivePointerGrab"}, { X_GrabKeyboard,"XGrabKeyboard"}, { X_UngrabKeyboard,"XUngrabKeyboard"}, { X_GrabKey,"XGrabKey"}, { X_UngrabKey,"XUngrabKey"}, { X_AllowEvents,"XAllowEvents"}, { X_GrabServer,"XGrabServer"}, { X_UngrabServer,"XUngrabServer"}, { X_QueryPointer,"XQueryPointer"}, { X_GetMotionEvents,"XGetMotionEvents"}, { X_TranslateCoords,"XTranslateCoords"}, { X_WarpPointer,"XWarpPointer"}, { X_SetInputFocus,"XSetInputFocus"}, { X_GetInputFocus,"XGetInputFocus"}, { X_QueryKeymap,"XQueryKeymap"}, { X_OpenFont,"XOpenFont"}, { X_CloseFont,"XCloseFont"}, { X_QueryFont,"XQueryFont"}, { X_QueryTextExtents,"XQueryTextExtents"}, { X_ListFonts,"XListFonts"}, { X_ListFontsWithInfo,"XListFontsWithInfo"}, { X_SetFontPath,"XSetFontPath"}, { X_GetFontPath,"XGetFontPath"}, { X_CreatePixmap,"XCreatePixmap"}, { X_FreePixmap,"XFreePixmap"}, { X_CreateGC,"XCreateGC"}, { X_ChangeGC,"XChangeGC"}, { X_CopyGC,"XCopyGC"}, { X_SetDashes,"XSetDashes"}, { X_SetClipRectangles,"XSetClipRectangles"}, { X_FreeGC,"XFreeGC"}, { X_ClearArea,"XClearArea"}, { X_CopyArea,"XCopyArea"}, { X_CopyPlane,"XCopyPlane"}, { X_PolyPoint,"XPolyPoint"}, { X_PolyLine,"XPolyLine"}, { X_PolySegment,"XPolySegment"}, { X_PolyRectangle,"XPolyRectangle"}, { X_PolyArc,"XPolyArc"}, { X_FillPoly,"XFillPoly"}, { X_PolyFillRectangle,"XPolyFillRectangle"}, { X_PolyFillArc,"XPolyFillArc"}, { X_PutImage,"XPutImage"}, { X_GetImage,"XGetImage"}, { X_PolyText8,"XPolyText8"}, { X_PolyText16,"XPolyText16"}, { X_ImageText8,"XImageText8"}, { X_ImageText16,"XImageText16"}, { X_CreateColormap,"XCreateColormap"}, { X_FreeColormap,"XFreeColormap"}, { X_CopyColormapAndFree,"XCopyColormapAndFree"}, { X_InstallColormap,"XInstallColormap"}, { X_UninstallColormap,"XUninstallColormap"}, { X_ListInstalledColormaps,"XListInstalledColormaps"}, { X_AllocColor,"XAllocColor"}, { X_AllocNamedColor,"XAllocNamedColor"}, { X_AllocColorCells,"XAllocColorCells"}, { X_AllocColorPlanes,"XAllocColorPlanes"}, { X_FreeColors,"XFreeColors"}, { X_StoreColors,"XStoreColors"}, { X_StoreNamedColor,"XStoreNamedColor"}, { X_QueryColors,"XQueryColors"}, { X_LookupColor,"XLookupColor"}, { X_CreateCursor,"XCreateCursor"}, { X_CreateGlyphCursor,"XCreateGlyphCursor"}, { X_FreeCursor,"XFreeCursor"}, { X_RecolorCursor,"XRecolorCursor"}, { X_QueryBestSize,"XQueryBestSize"}, { X_QueryExtension,"XQueryExtension"}, { X_ListExtensions,"XListExtensions"}, { X_ChangeKeyboardMapping,"XChangeKeyboardMapping"}, { X_GetKeyboardMapping,"XGetKeyboardMapping"}, { X_ChangeKeyboardControl,"XChangeKeyboardControl"}, { X_GetKeyboardControl,"XGetKeyboardControl"}, { X_Bell,"XBell"}, { X_ChangePointerControl,"XChangePointerControl"}, { X_GetPointerControl,"XGetPointerControl"}, { X_SetScreenSaver,"XSetScreenSaver"}, { X_GetScreenSaver,"XGetScreenSaver"}, { X_ChangeHosts,"XChangeHosts"}, { X_ListHosts,"XListHosts"}, { X_SetAccessControl,"XSetAccessControl"}, { X_SetCloseDownMode,"XSetCloseDownMode"}, { X_KillClient,"XKillClient"}, { X_RotateProperties,"XRotateProperties"}, { X_ForceScreenSaver,"XForceScreenSaver"}, { X_SetPointerMapping,"XSetPointerMapping"}, { X_GetPointerMapping,"XGetPointerMapping"}, { X_SetModifierMapping,"XSetModifierMapping"}, { X_GetModifierMapping,"XGetModifierMapping"}, { X_NoOperation,"XNoOperation"} }; static CodeName ProtocolErrors[] = { { Success,"Success"}, { BadRequest,"BadRequest"}, { BadValue,"BadValue"}, { BadWindow,"BadWindow"}, { BadPixmap,"BadPixmap"}, { BadAtom,"BadAtom"}, { BadCursor,"BadCursor"}, { BadFont,"BadFont"}, { BadMatch,"BadMatch"}, { BadDrawable,"BadDrawable"}, { BadAccess,"BadAccess"}, { BadAlloc,"BadAlloc"}, { BadColor,"BadColor"}, { BadGC,"BadGC"}, { BadIDChoice,"BadIDChoice"}, { BadName,"BadName"}, { BadLength,"BadLength"}, { BadImplementation,"BadImplementation"} }; static int XWindowsError(Display *display, XErrorEvent *error) { const char *errorName = "unknown"; const char *requestName = "unknown"; int i,n; char buffer[500]; n = sizeof(ProtocolErrors) / sizeof(ProtocolErrors[0]); for(i = 0; i < n; i++) { if (ProtocolErrors[i].code == error->error_code) { errorName = ProtocolErrors[i].name; } } n = sizeof(ProtocolNames) / sizeof(ProtocolNames[0]); for(i = 0; i < n; i++) { if (ProtocolNames[i].code == error->request_code) { requestName = ProtocolNames[i].name; } } sprintf(buffer,"%s in %s",errorName,requestName); printf("\nX Error %s\n\n", buffer); #if NEVER /* Raise exception if we are running in synchronous mode */ if (display->private15) RaiseXWindows(taskData, buffer); #endif return 0; /* DUMMY value - SPF 6/1/94 */ } class XWinModule: public RtsModule { public: virtual void Init(void); void GarbageCollect(ScanAddress *process); }; // Declare this. It will be automatically added to the table. static XWinModule xwinModule; void XWinModule::GarbageCollect(ScanAddress *process) { /* Process all the objects in the list. If an object */ /* is not found from outside then it is removed. */ T_List **T = &TList; C_List **C = &CList; int i; /* process all XList headers */ for (i = 0; i < XLISTSIZE; i++) { X_List *L = XList[i]; while(L) { PolyObject *P = L->object; /* copy object pointer */ X_List *N = L->next; /* copy next pointer */ process->ScanRuntimeAddress(&P, ScanAddress::STRENGTH_WEAK); /* P may have been moved, or overwritten with a 0 if not accessible */ if (P == 0) DestroyXObject(L->object); else L->object = (X_Object*)P; L = N; } } /* Process the timeout/message list */ while (*T) { T_List *t = *T; process->ScanRuntimeAddress(&t->alpha, ScanAddress::STRENGTH_STRONG); process->ScanRuntimeAddress(&t->handler, ScanAddress::STRENGTH_STRONG); PolyObject *obj = t->window_object; process->ScanRuntimeAddress(&obj, ScanAddress::STRENGTH_WEAK); t->window_object = (X_Window_Object*)obj; obj = t->widget_object; process->ScanRuntimeAddress(&obj, ScanAddress::STRENGTH_STRONG); t->widget_object = (X_Widget_Object*)obj; // DCJM: I don't understand this. The widget entry will never go // to zero since it's strong not weak. if (t->window_object == 0 && t->widget_object == 0) { *T = t->next; free(t); } else T = &t->next; } /* Process the callback list */ while(*C) { C_List *c = *C; process->ScanRuntimeAddress(&c->function, ScanAddress::STRENGTH_STRONG); PolyObject *obj = c->widget_object; process->ScanRuntimeAddress(&obj, ScanAddress::STRENGTH_STRONG); c->widget_object = (X_Widget_Object*)obj; /* DCJM: This doesn't make sense. The widget entry will only go to zero if the G.C. operation was weak, not strong as in the line above. */ if (c->widget_object == 0) { *C = c->next; free(c); } else C = &c->next; } /* Process the callback waiting list */ if (! FList.IsTagged()) { PolyObject *obj = FList.AsObjPtr(); process->ScanRuntimeAddress(&obj, ScanAddress::STRENGTH_STRONG); FList = obj; } /* and the Xt event waiting list. */ if (! GList.IsTagged()) { PolyObject *obj = GList.AsObjPtr(); process->ScanRuntimeAddress(&obj, ScanAddress::STRENGTH_STRONG) ; GList = obj; } } void XWinModule::Init(void) { initXList(); /* added 9/12/93 SPF */ XtToolkitInitialize(); XSetErrorHandler(XWindowsError); } #else // We haven't got X or we haven't got Motif #include "globals.h" #include "run_time.h" #include "sys.h" #include "save_vec.h" #include "machine_dep.h" #include "processes.h" #include "xwindows.h" Handle XWindows_c(TaskData *taskData, Handle/*params*/) { raise_exception_string(taskData, EXC_XWindows, "Not implemented"); /*NOTREACHED*/ return taskData->saveVec.push(TAGGED(0)); /* just to keep lint happy */ } #endif polyml.5.2.1/libpolyml/xwindows.h0000644000175000017500000000216010602661056016033 0ustar daviddavid/* Title: xwindows.h - export signature for xwindows.c, noxwindows.c Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ /* created 26/10/93 - SPF */ #ifndef XWINDOWS_H_INCLUDED #define XWINDOWS_H_INCLUDED class SaveVecEntry; typedef SaveVecEntry *Handle; class TaskData; extern Handle XWindows_c(TaskData *taskData, Handle params); #endif polyml.5.2.1/mlsource/0000755000175000017500000000000011100060550013611 5ustar daviddavidpolyml.5.2.1/mlsource/MLCompiler/0000755000175000017500000000000011100060544015617 5ustar daviddavidpolyml.5.2.1/mlsource/MLCompiler/Boot/0000755000175000017500000000000011100060544016522 5ustar daviddavidpolyml.5.2.1/mlsource/MLCompiler/Boot/Address.ML0000644000175000017500000001672010772153507020367 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* TODO: This duplicates some of the Word structure although it adds certain "unsafe" and Poly-specific functions. It probably should be rewritten now that we have the standard basis library. DCJM June 2000. *) structure Address :> (*****************************************************************************) (* Address export signature *) (*****************************************************************************) sig type machineWord type address type handler type short = Word.word val wordEq : 'a * 'a -> bool val isShort : 'a -> bool exception Cast of string; val unsafeCast: 'a -> 'b val toMachineWord : 'a -> machineWord val toShort : 'a -> short val toAddress : 'a -> address val loadByte: (address * Word.word) -> Word8.word val loadWord: (address * Word.word) -> machineWord val assignByte: (address * Word.word * Word8.word) -> unit val assignWord: (address * Word.word * machineWord) -> unit val alloc: (short * Word8.word * machineWord) -> address val lock: address -> unit val length: address -> short val flags: address -> Word8.word val setFlags: address * Word8.word -> unit val getFlags: address -> Word8.word val wordSize: int val F_words : Word8.word val F_bytes : Word8.word val F_code : Word8.word val F_stack : Word8.word val F_negative : Word8.word val F_mutable : Word8.word val F_gc : Word8.word; val isWords : address -> bool; val isBytes : address -> bool; val isCode : address -> bool; val isStack : address -> bool; val isMutable:address -> bool; val call: (address * machineWord) -> machineWord val isIoAddress : address -> bool (* The following function is VERY unsafe and should only be *) (* used by the Poly/ML code generator (ML version). *) val offsetAddr : address * short -> handler end = let open RuntimeCalls; in (*****************************************************************************) (* Address structure body *) (*****************************************************************************) struct type machineWord = word (* a legal ML object (tag = 0 or 1) *) and address = word (* a normal pointer (tag = 0) *) and handler = word (* pointer to exception handler (tag = 2!) *) and short = word; (* a 31/63-bit int (tag = 1) *) (* pointer equality *) val wordEq = PolyML.pointerEq val unsafeCast : 'a -> 'b = RunCall.unsafeCast; local val short : machineWord->bool = RunCall.run_call1 POLY_SYS_is_short in fun isShort (x:'a): bool = unsafeCast short x end (* The following cast is always safe *) val toMachineWord : 'a -> machineWord = unsafeCast; (* The following casts need checking *) exception Cast of string; fun toShort (w:'a) : short = if isShort w then unsafeCast w else raise Cast "toShort"; fun toAddress (w:'a) : address = if isShort w then raise Cast "toAddress" else unsafeCast w; (* Note: assignByte should *not* be used with word-objects (we might copy half a pointer into the object, then call the garbage collector) loadWord should *not* be used with byte-objects (we might load something that's not a valid ML value, then call the garbage collector) Violating these assertions may corrupt the heap and cause unpredictable behaviour. It's safe to use assignWord with a byte-object or loadByte with a word-object but it may not do what you expect. One difference is that loadWord / assignWord leave the tag bits unchanged but loadByte / assignByte strip and replace them. Another difference is that the offset for the "Word" functions is in words, whereas the offset for the "Byte" functions is in bytes. *) val loadByte: (address * Word.word) -> Word8.word = RunCall.run_call2 POLY_SYS_load_byte; val loadWord: (address * Word.word) -> machineWord = RunCall.run_call2 POLY_SYS_load_word; val assignByte: (address * Word.word * Word8.word) -> unit = RunCall.run_call3 POLY_SYS_assign_byte; val assignWord: (address * Word.word * machineWord) -> unit = RunCall.run_call3 POLY_SYS_assign_word; val alloc: (short * Word8.word * machineWord) -> address = RunCall.run_call3 POLY_SYS_alloc_store; val lock: address -> unit = RunCall.run_call1 POLY_SYS_lockseg; val getFlags: address -> Word8.word = RunCall.run_call1 POLY_SYS_get_flags; val setFlags: address * Word8.word -> unit = RunCall.run_call2 POLY_SYS_code_flags; val wordSize: int = RunCall.run_call0 POLY_SYS_bytes_per_word (); val length: address -> Word.word = RunCall.run_call1 POLY_SYS_get_length; val flags: address -> Word8.word = RunCall.run_call1 POLY_SYS_get_flags; (* "call" added SPF 7/7/94, corrected 13/7/94, 8/9/94 *) (* call takes the address of the code of a function [N.B. *NOT* *) (* the closure for the function] that uses Poly parameter *) (* conventions (values in registers e.g. an ML secondary entry *) (* point) and applies it to the address of a single ML tuple. *) (* N.B. it MUST be a tuple, even if there's only one parameter. *) (* However, since unit is a "short" not an "address", the type *) (* of the second parameter has to be "word" (not "address"). *) (* The run-time system functions all use Poly convention. *) val call: (address * machineWord) -> machineWord = RunCall.run_call1 POLY_SYS_callcode_tupled; val F_words : Word8.word = 0wx00; val F_bytes : Word8.word = 0wx01; val F_code : Word8.word = 0wx02; val F_stack : Word8.word = 0wx03; val F_negative : Word8.word = 0wx20; val F_mutable : Word8.word = 0wx40; val F_gc : Word8.word = 0wx80; local val doCall: int*address -> bool = RunCall.run_call2 RuntimeCalls.POLY_SYS_process_env in fun isIoAddress (a: address) : bool = doCall(102, a) end (* The following function is VERY unsafe and should only be *) (* used by the Poly/ML code generator (ML version). *) val offsetAddr : address * short -> handler = RunCall.run_call2 POLY_SYS_offset_address; local val typeMask : Word8.word = 0wx03; fun isType (t: Word8.word) (a: address):bool = Word8.andb(flags a, typeMask) = t in val isWords = isType F_words; val isBytes = isType F_bytes; val isCode = isType F_code; val isStack = isType F_stack; (* The mutable flag may be used with any of the others. *) fun isMutable a = Word8.andb(flags a, F_mutable) = F_mutable end; end end; (* open RuntimeCalls *) polyml.5.2.1/mlsource/MLCompiler/Boot/HashTable.ML0000644000175000017500000002127510766424667020651 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* Hash table type - Creates a hash table of specified initial size. This version expands the hash table and rehashes when the table gets too full *) (* Changes: 25/03/94 SPF bugfix (off-by-one error in hashOver/next function) *) (* HACKS: Misc, Array, Int.rem *) structure HashTable: (*****************************************************************************) (* HashTable export signature *) (*****************************************************************************) sig type 'a hash type 'a iter val hashMake: int -> '_a hash val hashSet: '_a hash * string * '_a -> unit val hashSub: 'a hash * string -> 'a option (* An iterator over the non-empty entries in the table. *) val hashOver: 'a hash -> (string * 'a) iter val hashFold: 'a hash -> (string -> 'a -> 'b -> 'b) -> 'b -> 'b (* Construct an immutable hash table from a mutable one. *) val hashFreeze: 'a hash -> 'a hash end = (*****************************************************************************) (* HashTable structure body *) (*****************************************************************************) struct local open Misc; infix 8 sub (* Each entry in the table is a pair containing the key and the value. *) (* make namedOption local, because that means the new compiler can optimise its representation. SPF 11/5/95 *) datatype 'a namedOption = None | Some of (string * 'a); in type 'a iter = 'a iter; fun hashValue (N : int) (str: string) : int = Word.toInt( Word.mod( CharVector.foldr (fn (ch: char, n: Word.word) => Word.fromInt(Char.ord ch) + 0w7*n) 0w0 str, (Word.fromInt N))) (* The above function is the quickest and simplest way of computing the hash value now that we have Word.* and Word.mod compiled inline. They aren't implemented in all code-generators so it could be worth retaining the old code. DCJM 26/2/01. *) datatype 'a hash = Hash of { used: int ref, entries: 'a namedOption array ref, hash: (string -> int) ref } | Frozen of { entries: 'a namedOption vector, hash: (string -> int) }; fun hashMake (n : int) = Hash { used = ref 0, entries = ref (Array.array (n, None)), hash = ref (hashValue n) } handle Size => raise InternalError ("HashTable.hash: " ^ Int.toString n); fun hashSub (Hash {entries = ref A, hash = ref hashN, ...}, name : string) : 'a option = (* Searches the table starting from the position given by the hash value. *) let open Array (* Loops until it either finds an empty entry - in which case it returns NONE, or it finds the name it is looking for. There will always be several empty entries because we rehash if it gets too full. *) fun find i = let val h = A sub i; in case h of None => NONE | Some (n,v) => if name = n then SOME v else find ((if i = 0 then length A else i) - 1) end in find (hashN name) end | hashSub (Frozen {entries = V, hash = hashN, ...}, name : string) : 'a option = let open Vector fun find i = let val h = V sub i; in case h of None => NONE | Some (n,v) => if name = n then SOME v else find ((if i = 0 then length V else i) - 1) end in find (hashN name) end fun hashSet (Frozen _, name : string, value : '_a) : unit = raise Fail ("Attempt to set a value with name (" ^ name ^ ") in a frozen hash table") | hashSet (Hash {entries, used, hash}, name : string, value : '_a) = let open Array (* Enters the value at the first free entry at or after the one pointed to by the hash value. *) fun enterTab (A : '_a namedOption array, i : int, None : '_a namedOption) = () | enterTab (A, i, entry as Some (name,_)) = let fun enter (i : int) : unit = (* Loops until it either finds an empty entry - in which case it enters the value in there, or it finds the string. *) case (A sub i) of None => update (A, i, entry) | Some (n : string, _) => if n = name then update (A, i, entry) (* Same name as previous - overwrite it *) else enter ((if i = 0 then length A else i) - 1); in enter i end val A : '_a namedOption array = !entries; val N : int = length A; val hashN : string -> int = !hash val U : unit = enterTab (A, hashN name, Some (name, value)); val U : unit = used := !used + 1; in (* Do we need to rehash ? *) if !used * 5 > N * 4 (* More than 80% full so rehash *) then let val newN : int = N * 2; (* Double the size *) val newA : '_a namedOption array = array (newN, None); val hashNewN : string -> int = hashValue newN; fun copyOver (index : int) : unit = if index < 0 then () else ( case (A sub index) of None => () | entry as Some (name : string,_) => enterTab (newA, hashNewN name, entry); copyOver (index - 1) ); val U : unit = entries := newA; val U : unit = hash := hashNewN; in copyOver (length A - 1) end else () end; fun hashOver table = let val (length, getItem) = case table of Hash { entries = ref e, ...} => (Array.length e, fn i => Array.sub(e, i)) | Frozen { entries, ... } => (Vector.length entries, fn i => Vector.sub(entries, i)) (* An iterator over the non-empty entries in the table. *) fun continue i = i < length; fun value i = (* Must check for limit since value can be called explicitly even if continue is false. *) if continue i then case (getItem i) of None => raise InternalError "HashTable.hashOver.value (None)" | Some pair => pair else raise InternalError "HashTable.hashOver.value (limit passed)" (* Return the next non-empty entry. *) fun next i = let val n = i + 1; in if n >= length then makeIter n (* stop if we've reached the end (bugfixed SPF 25/3/94) *) else case (getItem n) of None => next n | Some _ => makeIter n end and makeIter i = Iter { continue = continue i, next = fn () => next i, value = fn () => value i }; in next ~1 end; fun hashFold table f = let fun foldF i acc = if not (Continue i) then acc else let val (name,alpha) = Value i; in foldF (Next i) (f name alpha acc) end in foldF (hashOver table) end; (* If this is a mutable hash table create an immutable one from it. The reason for this is to reduce the number of mutables stored. TODO: Possible change the size of the table rather than simply copy it. *) fun hashFreeze (Hash{entries = ref e, hash = ref hashN, ...}) = Frozen{ entries = Array.vector e, hash = hashN } | hashFreeze h = h end (* local *); end (* HashTable *); polyml.5.2.1/mlsource/MLCompiler/Boot/Misc.ML0000644000175000017500000001334510766424606017701 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure Misc : (*****************************************************************************) (* Misc exports signature *) (*****************************************************************************) sig (* standard exceptions used by the compiler *) exception Interrupt; (* These are handled in the compiler *) exception Conversion of string; (* string to int conversion failure *) (* This isn't handled at all (except generically) *) exception InternalError of string; (* compiler error *) val quickSort : ('a -> 'a -> bool) -> 'a list -> 'a list val unescapeString : string -> string type 'a iter; val Iter : {next: unit -> 'a iter, value: unit -> 'a, continue: bool} -> 'a iter val Continue : 'a iter -> bool val Value : 'a iter -> 'a val Next : 'a iter -> 'a iter val iterList : 'a iter -> 'a list val upto : int -> int -> int iter val downto : int -> int -> int iter val for : 'a iter -> ('a -> 'b) -> unit val forsucc: ('a -> 'a) -> ('a * 'b -> bool) -> 'a -> 'b -> ('a -> 'c) -> unit val first : ('a -> bool) -> ('a -> 'b) -> (unit -> 'b) -> 'a iter -> 'b val mapIterator : ('a -> 'b) -> 'a iter -> 'b list val revfoldIterator : ('a -> 'b -> 'b) -> 'b -> 'a iter -> 'b val lookupDefault : ('a -> 'b option) -> ('a -> 'b option) -> 'a -> 'b option end = (*****************************************************************************) (* Misc structure body *) (*****************************************************************************) struct open RuntimeCalls; (* for POLY_SYS and EXC numbers *) exception Interrupt = SML90.Interrupt; (* These are handled in the compiler *) (* Conversion may be also raised by run-time Conversion routines *) local structure Conversion = RunCall.Run_exception1 ( type ex_type = string; val ex_iden = EXC_conversion ); in exception Conversion = Conversion.ex; end; (* This isn't handled at all (except generically) *) exception InternalError of string; (* compiler error *) fun filter f [] = [] | filter f (h::t) = if f h then h :: filter f t else filter f t; fun quickSort (leq:'a -> 'a -> bool) ([]:'a list) = [] | quickSort (leq:'a -> 'a -> bool) ([h]:'a list) = [h] | quickSort (leq:'a -> 'a -> bool) ((h::t) :'a list) = let val (after, befor) = List.partition (leq h) t in quickSort leq befor @ (h :: quickSort leq after) end; (* Convert a string, recognising and converting escape codes. This is installed as the initial string conversion function and replaced when the String structure is compiled. We can't use fromString because it stops on invalid input and returns as much as it can rather than raising an exception. *) fun unescapeString(s: string) : string = let val len = size s fun rdr i = if i = len then NONE else SOME(String.sub(s, i), i+1) (* Repeatedly convert escape sequences and accumulate the results in a list. *) fun convChars i = if i = len then [] (* Finished *) else case Char.scan rdr i of NONE => (* Bad conversion *) raise Conversion "Invalid string constant" | SOME(res, j) => res :: convChars j in String.implode(convChars 0) end fun forsucc succ (op <=) = let fun for first last f = if first <= last then (f first; for (succ first) last f) else (); in for end; datatype 'a iter = Iter of { continue: bool, value: unit -> 'a, next: unit -> 'a iter }; fun Continue (Iter {continue,...}) = continue; fun Value (Iter {value,...}) = value(); fun Next (Iter {next,...}) = next(); fun iterList i = if Continue i then Value i :: iterList (Next i) else []; fun first condition (* The condition to search for *) thenpart (* Executed if found *) elsepart (* Executed if not *) = let fun search i = if Continue i then let val v = Value i; in if condition v then thenpart v else search (Next i) end else elsepart() in search end; fun for i body = if Continue i then (body (Value i); for (Next i) body) else (); fun mapIterator f i = map f (iterList i); (*fun revfoldIterator f x i = revfold f x (iterList i);*) fun revfoldIterator f x i = if Continue i then revfoldIterator f (f (Value i) x) (Next i) else x fun upto start finish = let fun succ n = Iter { continue = n <= finish, next = fn () => succ (n+1), value = fn () => n }; in succ start end; fun downto start finish = let fun pred n = Iter { continue = n >= finish, next = fn () => pred (n-1), value = fn () => n }; in pred start end; fun lookupDefault first second = (fn key => case first key of NONE => second key | v => v); end (* Misc *); polyml.5.2.1/mlsource/MLCompiler/Boot/PrettyPrinter.ML0000644000175000017500000004445110313043342021621 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* Title: PrettyPrinter.ML - extracted from Bootstrap File. Author: Dave Matthews, Cambridge University Computer Laboratory Copyright Cambridge University 1986 *) (* Based on the paper by D.C Oppen in ACM ToPLAS Vol. 2 No. 4 Oct 1980 *) (* N.B. There is a known bug in Oppen's algorithm. Although he claims that it works in constant space, this isn't true - for highly nested block structures the scan stack (or is it the token queue?) can overflow. This doesn't appear to happen for the ML pretty-printer, but it did occur for one version of ICL's ProofPower pretty-printer which also uses this interface. One day we'll have to fix the algorithm using stretch arrays (but it's too tricky to do it now). SPF 16/8/94 *) (* HACKS: refers to Misc.InternalError *) structure PrettyPrinter : (*****************************************************************************) (* PrettyPrinter output signature *) (*****************************************************************************) sig type prettyPrinter val ppAddString : prettyPrinter -> string -> unit val ppBeginBlock : prettyPrinter -> int * bool -> unit val ppEndBlock : prettyPrinter -> unit -> unit val ppBreak : prettyPrinter -> int * int -> unit val ppEliding : prettyPrinter -> unit -> bool val ppEndStream : prettyPrinter -> unit -> unit val ppLineBreak : prettyPrinter -> unit -> unit val prettyPrint : int * (string -> unit) -> prettyPrinter; val uglyPrint : (string -> unit) -> prettyPrinter; end = (*****************************************************************************) (* PrettyPrinter structure body *) (*****************************************************************************) struct exception InternalError = Misc.InternalError; type prettyPrinter = { addString: string -> unit, (* Put in a string *) beginBlock: int * bool -> unit, (* Begin a block. (indent for block, true if lines must be consistently broken). *) endBlock: unit -> unit, (* End of a block. *) break: int * int -> unit, (* A break - (number of spaces, offset for overflow) *) eliding: unit -> bool, (* True if this block is not being displayed. *) endStream: unit -> unit, (* End of stream. *) lineBreak: unit -> unit (* Force a break. *) } val ppAddString : prettyPrinter -> string -> unit = #addString; val ppBeginBlock : prettyPrinter -> int * bool -> unit = #beginBlock; val ppEndBlock : prettyPrinter -> unit -> unit = #endBlock; val ppBreak : prettyPrinter -> int * int -> unit = #break; val ppEliding : prettyPrinter -> unit -> bool = #eliding; val ppEndStream : prettyPrinter -> unit -> unit = #endStream; val ppLineBreak : prettyPrinter -> unit -> unit = #lineBreak; fun uglyPrint (stream : string -> unit) : prettyPrinter = let fun break (n, x) = if n <= 0 then () else (stream " "; break (n - 1, x)); in { addString = stream, beginBlock = fn (i : int, b : bool) => (), endBlock = fn () => (), break = break, eliding = fn () => true, endStream = fn () => (), lineBreak = fn () => () } end; fun prettyPrint (lineWidth : int, stream : string -> unit) : prettyPrinter = let val space = ref lineWidth; (* Space left on line. *) (*****************************************************************************) (* Tokens *) (*****************************************************************************) (* These tokens represent the different kinds of objects present in the stream. *) datatype token = String of string | Break of {blanks: int, offset: int} | Begin of {offset: int, consistent: bool} | End ; (*****************************************************************************) (* Print Stack *) (*****************************************************************************) local (* only used in printOut *) (* An entry on the stack is either "fits" if it fits on the line, or consistent or inconsistent in which case a new line will be necessary and the value is the indentation. *) datatype printStackEntry = Fits | Consistent of int | Inconsistent of int; val printStack : printStackEntry list ref = ref []; fun pushPrintStack (x : printStackEntry) : unit = printStack := x :: !printStack; fun popPrintStack () : unit = case !printStack of [] => raise InternalError "popPrintStack: print stack empty" | (x::xs) => printStack := xs ; val indentation = ref 0; (* Current indentation *) in (* Entries are made on the print stack for each "begin" and removed at the corresponding "end". The top item is inspected on each "break" to decide whether to put in a new line. *) fun printOut (Break {blanks, offset}, breakSize :int) : unit = (* size of the blank and the next string/block *) (* Printing out a blank may either involve just printing the required number of spaces or it may involve breaking the line. We first look at the top of the stack which shows the requirements for this block. If the whole block fits then there is no problem, this blank and its following string/block will definitely fit. If the block does not fit we break the line if it is a consistently breaking block, or if the blank and its following string/block will not fit. *) let (* Indent by a given number of characters. *) fun indent n = if n <= 0 then () else (stream " "; indent (n - 1)); (* All this block fits or this line fits. *) fun useOldLine () = ( (* Just print out the required number of spaces *) space := !space - blanks; indent blanks ) (* Have to put in a new line. *) fun useNewLine n = ( (* Add any indentation for the break, and make this the current indentation. *) indentation := offset + n; space := lineWidth - !indentation; stream "\n"; (* new line *) indent (!indentation) ) in case !printStack of [] => (* no previous block - this case added 7/10/94 SPF *) useNewLine 0 (* use new line SPF 12/5/95 *) | (Fits :: _) => useOldLine () | (Consistent n :: _)=> useNewLine n | (Inconsistent n :: _) => if breakSize <= !space then useOldLine () else useNewLine n end (* Break clause of printOut *) | printOut (Begin {offset, consistent}, breakSize :int) : unit = (* Push an entry onto the stack. *) (* If the whole block fits then use a "fits" entry otherwise either a "consistent" or "inconsistent" with the identation. *) let val stackEntry = if breakSize <= !space then Fits else ( (* Add this offset to the current indentation *) indentation := !indentation + offset; (* Set indentation of block to this *) if consistent then Consistent (!indentation) else Inconsistent (!indentation) ); in pushPrintStack stackEntry end (* Begin clause of printOut *) | printOut (String s, breakSize :int) : unit = ( if breakSize > !space then space := 0 else space := !space - breakSize; stream s ) | printOut (End, breakSize :int) : unit = ( popPrintStack () (* remove the "begin" *) ) end; (* scope of printStack *) (*****************************************************************************) (* Token queue *) (*****************************************************************************) (* Tokens are held on a token queue which remembers the token and the computed sizes. They are put on the queue by "enQueue" and removed by "deQueue". The sizes of begin-end blocks and of blanks are initially set to a negative number to indicate "unknown" and are then filled in later by setTokenSize. In the case of "begins" and "blanks" the number used is -rightTotal so that adding in rightTotal later will give the number of characters in the block or immediately after the blank. Objects whose sizes are unknown have their index pushed onto the scanStack so that they can be fixed up later. As soon as the first (leftmost) token has a positive size it, and any following tokens with positive sizes can be printed. *) local val vecSize = 3 * lineWidth; fun inc n = (n + 1) mod vecSize; fun dec n = (n - 1) mod vecSize; val left = ref 0; val right = ref 0; in (* visible refs (yeuch) *) val rightTotal = ref 0; val leftTotal = ref 0; (* queue contains the tokens and their sizes. *) val queue = Array.array (vecSize, (End,0)); fun queueRight () : int = !right; fun queueEmpty () : bool = !right = !left; (* Add to the queue. *) fun enQueue (t: token, s : int, len: int) : unit= ( rightTotal := !rightTotal + len; right := inc (!right); if queueEmpty () then raise InternalError "token queue full" else Array.update (queue, !right, (t,s)) ); (* Remove from the queue. *) fun deQueue () = (* Print objects from the token queue until we either exhaust it or we find something whose length we don't know. *) let val nextLeft = inc (!left); val (token, size) = Array.sub (queue, nextLeft); in if size >= 0 andalso not (queueEmpty ()) then ( left := nextLeft; printOut (token, size); case token of Break {blanks, ...} => leftTotal := !leftTotal + blanks | String _ => leftTotal := !leftTotal + size | _ => () ; deQueue() ) else () end (* deQueue*); (* Reset the queue. *) fun clearQueue ()= ( left := 0; right := 0; leftTotal := 0; rightTotal := 0 ); end (* token queue functions *); (*****************************************************************************) (* Scan stack *) (*****************************************************************************) (* The scan stack contains pointers into the token queue. It behaves like a stack except that entries may be removed from the bottom as well. *) (* Indices of tokens whose sizes are unknown are pushed onto this stack and removed, by setTokenSize, when the size becomes known. If the line becomes too full tokens may be forcibly removed from the bottom by setting their sizes to infinity (addstring). *) local val vecSize = 3 * lineWidth; fun inc n = (n + 1) mod vecSize; fun dec n = (n - 1) mod vecSize; val vec = Array.array (vecSize, 0); val top = ref 0; val bottom = ref 0; in (* Usual stack functions. *) fun scanEmpty () : bool = !top = !bottom; fun scanTop () : int = if scanEmpty () then raise InternalError "PrettyPrinter.scanTop: stack empty" else Array.sub (vec, !top); fun scanPush (x : int) : unit = ( top := inc (!top); if scanEmpty () then raise InternalError "PrettyPrinter.scanPush: stack full" else Array.update (vec, !top, x) ); fun scanPop () : int = if scanEmpty () then raise InternalError "scanPop: stack empty" else let val result = Array.sub (vec, !top); in top := dec (!top); result end; fun scanPopBottom () : int = (* Remove from the bottom *) if scanEmpty () then raise InternalError "PrettyPrinter.scanPopBottom: stack empty" else ( bottom := inc (!bottom); Array.sub (vec, !bottom) ); end (* scan stack functions *); (*****************************************************************************) (* setTokenSize *) (*****************************************************************************) fun setTokenSize () = (* Sets the size of the last object or block on the stack. *) let fun adjustSize (index:int) = let val (token,size) = Array.sub (queue, index) val newSize = size + !rightTotal in Array.update (queue, index, (token,newSize)) end; fun isBegin (Begin _) = true | isBegin _ = false fun topNotBegin () : bool = ( if scanEmpty () (* scan stack *) then false else not (isBegin (#1 (Array.sub (queue, scanTop ())))) ); in if topNotBegin () then let val index = scanPop () in case Array.sub (queue, index) of (* If it was an "end" then set the sizes of everything back to the corresponding "begin". *) (End,size) => ( Array.update(queue, index, (End,1)); (* set size of "end" *) while topNotBegin () (* set sizes until the "begin" *) do setTokenSize (); (* should now be at a "begin" *) if not (scanEmpty ()) (* set its size *) then adjustSize (scanPop ()) else (); setTokenSize () (* Process any preceeding blank. *) ) | _ => (* blank (strings aren't put on the stack). *) adjustSize index end else () end; (*****************************************************************************) (* The interface procedures *) (*****************************************************************************) fun addString (st: string) : unit = let val strLength = size st; in if scanEmpty () then printOut (String st, strLength) else ( (* Put the string on the queue. *) enQueue (String st, strLength, strLength); (* If there is no longer enough space on the line force out some tokens. *) while ( not (queueEmpty ()) andalso !rightTotal - !leftTotal > !space andalso not (scanEmpty()) ) do let val index = scanPopBottom (); val (token,_) = Array.sub (queue,index); in Array.update (queue, index, (token, 999 (*infinity*))); deQueue() end ) end (* addstring *); fun break (blanks : int, offset: int) : unit = ( if scanEmpty() then clearQueue() else (); (* set the size of any previous block or break. *) setTokenSize(); enQueue (Break {blanks = blanks, offset = offset}, ~ (!rightTotal), blanks); scanPush (queueRight ()) ); fun lineBreak () : unit = break (lineWidth + 1, 0); fun endStream () : unit = ( lineBreak (); setTokenSize (); deQueue () ); val depth = ref 0; (* count of begins - ends *) fun beginBlock (offset : int, consistent : bool) : unit = ( depth := !depth + 1; if scanEmpty () then clearQueue () else (); enQueue (Begin {offset = offset, consistent = consistent}, ~ (!rightTotal), 0); scanPush (queueRight ()) ); fun endBlock () : unit = ( if scanEmpty () then printOut (End, 0) else ( enQueue (End, ~1, 0); scanPush (queueRight ()) ); depth := !depth - 1; (* Force out anything remaining *) if !depth = 0 then endStream () else () ); fun eliding () : bool = false (* Never eliding *) in (* body of prettyPrint *) { addString = addString, beginBlock = beginBlock, endBlock = endBlock, break = break, eliding = eliding, endStream = endStream, lineBreak = lineBreak } end; (* prettyPrint *) end (* PrettyPrinter *); polyml.5.2.1/mlsource/MLCompiler/Boot/StretchArray.ML0000644000175000017500000001103210506226527021402 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* Title: StretchArray.ML Author: Simon Finn, Abstract Hardware Ltd. *) (* Version of array which expands as new elements are assigned. Used for tables which have no obvious upper limit. This is used in CODETREE and the resulting tables are captured in the environments of the resulting values. Previously this resulted in a lot of mutable data being kept around and in particularly ending up in exported module. The garbage collector has to scan mutables on every collection so mutable data can have a disproportionate effect on performance. We now freeze the tables once they have been created. This costs extra time during compilation but that should be more than made up for by faster garbage collection. *) structure StretchArray : sig type 'a stretchArray; exception Subscript; exception Size; val stretchArray : int * 'a -> 'a stretchArray; val update : 'a stretchArray * int * 'a -> unit; val length : 'a stretchArray -> int; val sub : 'a stretchArray * int -> 'a; val freeze : 'a stretchArray -> unit val vector: 'a stretchArray -> 'a vector end = struct val expansionFactor = 3; (* Factor by which to increase size. *) exception Subscript = (*Array.*)Subscript and Size = (*Array.*)Size; (* use Array to hold the contents - less efficient than making this a primitive, but does it matter? *) datatype 'a vecOrArray = AnArray of 'a array | AVector of 'a vector type 'a stretchArray = { initialVal : 'a, contents : 'a vecOrArray ref } fun stretchArray (originalSize: int, initialVal: 'a) :'a stretchArray = { initialVal = initialVal, contents = ref (AnArray(Array.array(originalSize, initialVal))) }; fun length { contents = ref (AnArray a), ...} = Array.length a | length { contents = ref (AVector v), ...} = Vector.length v (* Returns the value if there is one, otherwise returns the default. *) infix 9 sub; fun ({contents = ref (AnArray a), initialVal, ...} :'a stretchArray) sub index : 'a = if index < Array.length a then Array.sub (a, index) (* may raise Subscript *) else initialVal | ({contents = ref (AVector v), initialVal, ...} :'a stretchArray) sub index : 'a = if index < Vector.length v then Vector.sub (v, index) (* may raise Subscript *) else initialVal (* Sets the appropriate entry. *) fun update ({contents = ref (AVector _), ...}, _, _) = raise Fail "Attempt to update a locked stretchArray" | update ({contents = contents as ref (AnArray a), initialVal, ... }: 'a stretchArray, index: int, value: 'a) : unit = if index < Array.length a then Array.update (a, index, value) (* May raise Subscript if the index is -ve *) else let (* The new vector must be big enough to hold the new item and expanded by the expansion factor. *) val oldSize = Array.length a; val newSize = Int.max (oldSize * expansionFactor, index + 1); val newVec = Array.array(newSize, initialVal); in Array.copy{src=a, dst=newVec, di=0}; contents := AnArray newVec; Array.update (newVec, index, value) end (* Create an immutable vector from the current contents of the array. *) fun vector ({contents = ref (AnArray a), ...}: 'a stretchArray): 'a vector = Array.vector a | vector {contents = ref (AVector v), ...} = v (* Turn an array into a vector and turn the ref into an immutable. *) fun freeze {contents = ref (AVector v), ...} = () | freeze {contents = contents as ref (AnArray a), ...} = ( contents := AVector(Array.vector a); Address.lock(Address.toAddress contents) ) end; polyml.5.2.1/mlsource/MLCompiler/Boot/UniversalTable.ML0000644000175000017500000001416710766424667021740 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure UniversalTable : sig type universal; type 'a tag; type univTable; type 'a iter; val makeUnivTable: unit -> univTable; val univEnter: univTable * 'a tag * string * 'a -> unit; val univLookup: univTable * 'a tag * string -> 'a option; val univDelete: univTable * 'a tag * string -> unit; val univOver: univTable -> (string * universal) iter; val univFold: univTable * (string * universal * 'a -> 'a) * 'a -> 'a; val univOverSpecific: univTable * 'a tag -> (string * 'a) iter; (* Freeze a mutable table so it is immutable. *) val univFreeze: univTable -> univTable end = struct local open Misc; open HashTable; open Universal; in type universal = universal type 'a tag = 'a tag; type 'a iter = 'a iter; abstype univTable = Table of universal list hash with fun makeUnivTable() = Table (hashMake 10); (* Choose a number. *) fun univLookup (Table tab, t:'a tag, name:string) : 'a option = let fun search [] = NONE | search (H::T) = if tagIs t H then SOME (tagProject t H) else search T; in case hashSub (tab, name) of NONE => NONE | SOME t => search t end; fun univEnter (Table tab, t:'a tag, name:string, v:'a) : unit = let val u = tagInject t v; (* If there is already an entry we add it to the list, otherwise we start a new list. *) fun search [] = [u] | search (H::T) = if tagIs t H then u :: T else H :: search T; val newList = case hashSub (tab, name) of SOME v => search v | NONE => [u] in hashSet (tab, name, newList) end; fun univDelete (Table tab, t:'a tag, name:string) : unit = let fun search [] = [] | search (H::T) = if tagIs t H then T else H :: search T; in case hashSub (tab, name) of SOME l => hashSet (tab, name, search l) | NONE => () end; local fun fst (a,b) = a; fun snd (a,b) = b; in fun univOver (Table tab) = (* Iterator over all the entries. *) let fun continue (_,[]) = false | continue _ = true; fun value (_,[]) = raise InternalError "UniversalTable.univOver.value" | value (i,H::_) = (fst (Value i),H); (* Get the next table entry which has something in it. *) fun nextList i = let val nt = Next i; in if Continue nt (* Have we reached the end ? *) then (* No, but the entry may be empty if it has been deleted. *) case snd (Value nt) of [] => nextList nt | nl => (nt,nl) else (nt,[]) (* At the end *) end; (* Return the next FULL entry. *) fun next (ti,[]) = raise InternalError "UniversalTable.univOver.next" | next (ti,[x]) = makeIter (nextList ti) (* Finished one list - get the next. *) | next (ti,_::T) = makeIter (ti,T) and makeIter i = Iter { continue = continue i, next = fn () => next i, value = fn () => value i }; val t1 = hashOver tab; in makeIter (if Continue t1 then case snd (Value t1) of [] => nextList t1 | l1 => (t1,l1) else (t1,[])) end; (* Iterator over entries with a specific tag. *) fun univOverSpecific (tab : univTable, t:'a tag) = let fun tagMatches i = tagIs t (snd (Value i)); (* Return the next entry with the specific tag *) fun continue (n : (string * universal) iter) : bool = Continue n andalso (tagMatches n orelse continue (Next n)); fun try (n : (string * universal) iter) : (string * 'a) iter = if Continue n then if tagMatches n then makeIter n else try (Next n) else makeIter n (* ??? SPF/18/8/94 *) and makeIter (i : (string * universal) iter) : (string * 'a) iter = Iter { continue = continue i, (* was "Continue i" (SPF 18/8/94) *) next = fn () => try (Next i), value = fn () => let val (s,u) = Value i in (s, tagProject t u) end }; in try (univOver tab) end; fun univFold (table, f, acc) = let fun foldF i acc = if not (Continue i) then acc else let val (name,u) = Value i; in foldF (Next i) (f (name, u, acc)) end; in foldF (univOver table) acc end; end (* local *); fun univFreeze (Table h) = Table(hashFreeze h) end (* with *); end (* local *); end (* UniversalTable *); polyml.5.2.1/mlsource/MLCompiler/Boot/ml_bind.ML0000644000175000017500000000204310572333305020371 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure Boot = struct structure Address = Address structure Misc = Misc structure HashTable = HashTable structure UniversalTable = UniversalTable structure PrettyPrinter = PrettyPrinter structure StretchArray = StretchArray end; polyml.5.2.1/mlsource/MLCompiler/COMPILER_BODY.ML0000644000175000017500000005505711003076053020120 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited Modified David C.J. Matthews 2008. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* Title: Body of ML Compiler. Author: Dave Matthews, Cambridge University Computer Laboratory Copyright Cambridge University 1985 *) functor COMPILER_BODY ( (*****************************************************************************) (* SYMSET *) (*****************************************************************************) structure SYMSET : sig type sys type symset val inside: sys * symset -> bool; val ++ : symset * symset -> symset val abortParse: symset val semicolon: symset end; (*****************************************************************************) (* LEX *) (*****************************************************************************) structure LEX : sig type lexan type sys type prettyPrinter val insymbol: lexan -> unit val sy: lexan -> sys val errorOccurred: lexan -> bool val resetLexan: lexan -> unit val flushLexan: lexan -> unit; val initial: (unit -> char option) * Universal.universal list -> lexan; end; (*****************************************************************************) (* CODETREE *) (*****************************************************************************) structure CODETREE : sig type codetree type prettyPrinter val genCode: codetree * Universal.universal list -> unit -> codetree val pretty: codetree * prettyPrinter -> unit; end; (*****************************************************************************) (* STRUCTVALS *) (*****************************************************************************) structure STRUCTVALS : sig type structVals type signatures type fixStatus type functors type typeConstrs; type types val isEmpty: types -> bool type values val isValueConstructor: values -> bool datatype env = Env of { lookupVal: string -> values option, lookupType: string -> typeConstrs option, lookupFix: string -> fixStatus option, lookupStruct: string -> structVals option, lookupSig: string -> signatures option, lookupFunct: string -> functors option, enterVal: string * values -> unit, enterType: string * typeConstrs -> unit, enterFix: string * fixStatus -> unit, enterStruct: string * structVals -> unit, enterSig: string * signatures -> unit, enterFunct: string * functors -> unit }; end; (*****************************************************************************) (* VALUEOPS *) (*****************************************************************************) structure VALUEOPS : sig type values type structVals type functors type signatures type fixStatus type typeConstrs type nameSpace = { lookupVal: string -> values option, lookupType: string -> typeConstrs option, lookupFix: string -> fixStatus option, lookupStruct: string -> structVals option, lookupSig: string -> signatures option, lookupFunct: string -> functors option, enterVal: string * values -> unit, enterType: string * typeConstrs -> unit, enterFix: string * fixStatus -> unit, enterStruct: string * structVals -> unit, enterSig: string * signatures -> unit, enterFunct: string * functors -> unit, allVal: unit -> (string*values) list, allType: unit -> (string*typeConstrs) list, allFix: unit -> (string*fixStatus) list, allStruct: unit -> (string*structVals) list, allSig: unit -> (string*signatures) list, allFunct: unit -> (string*functors) list }; val exnName : exn -> string val printSpaceTag: nameSpace Universal.tag val nullEnvironment : nameSpace end; (*****************************************************************************) (* STRUCTURES *) (*****************************************************************************) structure STRUCTURES : sig type structs type lexan type prettyPrinter type codetree type env type values type structVals type functors type fixStatus type typeConstrs type signatures val pass2Structs: structs list * lexan * env -> unit val checkForFreeTypeVars: ((string*values->unit)->unit) * ((string*structVals->unit)->unit) * ((string*functors->unit)->unit) * lexan -> unit val pass4Structs: codetree * structs list -> { fixes: (string * fixStatus) list, values: (string * values) list, structures: (string * structVals) list, signatures: (string * signatures) list, functors: (string * functors) list, types: (string* typeConstrs) list }; val gencodeStructs: structs list * lexan -> codetree; val displayStructs: structs list * int * prettyPrinter -> unit end; (*****************************************************************************) (* PARSEDEC *) (*****************************************************************************) structure PARSEDEC : sig type lexan type symset type fixStatus type structs val parseDec: symset * lexan * { enterFix: string * fixStatus -> unit, lookupFix: string -> fixStatus option } -> structs list end; (*****************************************************************************) (* DEBUG *) (*****************************************************************************) structure DEBUG : sig val parsetreeTag : bool Universal.tag val codetreeTag : bool Universal.tag val timingTag : bool Universal.tag val profilingTag : int Universal.tag val traceCompilerTag : bool Universal.tag val compilerOutputTag: (string->unit) Universal.tag val getParameter : 'a Universal.tag -> Universal.universal list -> 'a end; (*****************************************************************************) (* UTILITIES *) (*****************************************************************************) structure UTILITIES : sig val searchList: unit -> { apply: (string * 'a -> unit) -> unit, enter: string * 'a -> unit, lookup: string -> 'a option} end; (*****************************************************************************) (* PRETTYPRINTER *) (*****************************************************************************) structure PRETTYPRINTER : sig type prettyPrinter val ppAddString : prettyPrinter -> string -> unit val ppBeginBlock : prettyPrinter -> int * bool -> unit val ppEndBlock : prettyPrinter -> unit -> unit val ppBreak : prettyPrinter -> int * int -> unit val ppLineBreak : prettyPrinter -> unit -> unit val ppEndStream : prettyPrinter -> unit -> unit val prettyPrint : int * (string -> unit) -> prettyPrinter; end; (*****************************************************************************) (* MISC *) (*****************************************************************************) structure MISC : sig exception InternalError of string val lookupDefault : ('a -> 'b option) -> ('a -> 'b option) -> 'a -> 'b option val quickSort : ('a -> 'a -> bool) -> 'a list -> 'a list end; (*****************************************************************************) (* COMPILERBODY sharing constraints *) (*****************************************************************************) sharing type PRETTYPRINTER.prettyPrinter = LEX.prettyPrinter = STRUCTURES.prettyPrinter = CODETREE.prettyPrinter sharing type SYMSET.sys = LEX.sys sharing type SYMSET.symset = PARSEDEC.symset sharing type LEX.lexan = PARSEDEC.lexan = STRUCTURES.lexan sharing type STRUCTVALS.fixStatus = PARSEDEC.fixStatus = VALUEOPS.fixStatus = STRUCTURES.fixStatus sharing type PARSEDEC.structs = STRUCTURES.structs sharing type STRUCTURES.codetree = CODETREE.codetree sharing type STRUCTVALS.env = STRUCTURES.env sharing type STRUCTVALS.typeConstrs = STRUCTURES.typeConstrs = VALUEOPS.typeConstrs sharing type VALUEOPS.values = STRUCTVALS.values = STRUCTURES.values sharing type VALUEOPS.structVals = STRUCTVALS.structVals = STRUCTURES.structVals sharing type VALUEOPS.functors = STRUCTVALS.functors = STRUCTURES.functors sharing type VALUEOPS.signatures = STRUCTVALS.signatures = STRUCTURES.signatures (*****************************************************************************) (* COMPILERBODY export signature *) (*****************************************************************************) ) : sig type values; type typeConstrs; type fixStatus; type structVals; type signatures; type functors; type nameSpace = { lookupVal: string -> values option, lookupType: string -> typeConstrs option, lookupFix: string -> fixStatus option, lookupStruct: string -> structVals option, lookupSig: string -> signatures option, lookupFunct: string -> functors option, enterVal: string * values -> unit, enterType: string * typeConstrs -> unit, enterFix: string * fixStatus -> unit, enterStruct: string * structVals -> unit, enterSig: string * signatures -> unit, enterFunct: string * functors -> unit, allVal: unit -> (string*values) list, allType: unit -> (string*typeConstrs) list, allFix: unit -> (string*fixStatus) list, allStruct: unit -> (string*structVals) list, allSig: unit -> (string*signatures) list, allFunct: unit -> (string*functors) list }; (* The completed compiler. *) val compiler : nameSpace * (unit->char option) * Universal.universal list -> unit -> { fixes: (string * fixStatus) list, values: (string * values) list, structures: (string * structVals) list, signatures: (string * signatures) list, functors: (string * functors) list, types: (string * typeConstrs) list }; end = (*****************************************************************************) (* COMPILERBODY functor body *) (*****************************************************************************) struct open MISC; open STRUCTVALS; open PRETTYPRINTER; open LEX; type nameSpace = VALUEOPS.nameSpace fun printTimes print (parseTime,pass2Time,treeTime,codeTime,endRunTime) : unit = let fun printTime t = print(Time.fmt 1 t) in print "Timing - parse:"; printTime(parseTime); print ", semantics:"; printTime(pass2Time-parseTime); print ", translate:"; printTime(treeTime-pass2Time); print ", generate:"; printTime(codeTime-treeTime); print ", run:"; printTime(endRunTime); print "\n" end (* switch profiling on/off *) val systemProfile : int -> unit = RunCall.run_call1 RuntimeCalls.POLY_SYS_profiler; fun startProfile (level : int) : unit = if level <> 0 then systemProfile level else (); fun stopProfile (level : int) : unit = if level <> 0 then systemProfile 0 else (); val stopSyms = let open SYMSET in op ++ (abortParse, semicolon) end; fun baseCompiler (lex : lexan, nameSpace: nameSpace, debugSwitches) : unit -> { fixes: (string * fixStatus) list, values: (string * values) list, structures: (string * structVals) list, signatures: (string * signatures) list, functors: (string * functors) list, types: (string * typeConstrs) list } = let (* let1 *) val compilerOutput = DEBUG.getParameter DEBUG.compilerOutputTag debugSwitches and timing = DEBUG.getParameter DEBUG.timingTag debugSwitches and printCodetree = DEBUG.getParameter DEBUG.codetreeTag debugSwitches and printParsetree = DEBUG.getParameter DEBUG.parsetreeTag debugSwitches and profiling = DEBUG.getParameter DEBUG.profilingTag debugSwitches val globals = { lookupFix = #lookupFix nameSpace, lookupVal = #lookupVal nameSpace, lookupType = #lookupType nameSpace, lookupSig = #lookupSig nameSpace, lookupStruct = #lookupStruct nameSpace, lookupFunct = #lookupFunct nameSpace, enterFix = #enterFix nameSpace, enterVal = #enterVal nameSpace, enterType = #enterType nameSpace, enterStruct = #enterStruct nameSpace, enterSig = #enterSig nameSpace, enterFunct = #enterFunct nameSpace }; (* Return the total user+system time since the start. *) fun cpuTime start = let val {usr, sys} = Timer.checkCPUTimer start in usr+sys end val startTime = Timer.startCPUTimer(); (* Clear lexer error state (but NOT look-ahead state) *) val U : unit = resetLexan lex; (* Ignore semicolon (if any) from the previous declaration. The very first token produced by the lexer is a semicolon, which makes life easier. DON'T make this a loop because the prompt only gets reset on a new call to "compiler". This means that if we try to process more than one (empty) statement at a time, we'll get the wrong (secondary) prompt! SPF 19/4/96 *) val U : unit = if SYMSET.inside (sy lex, SYMSET.semicolon) then insymbol lex else (); in (* let1 *) (* An empty declaration (or end of file!) *) if SYMSET.inside (sy lex, stopSyms) then if errorOccurred lex (* We could have, for example, an unterminated comment. *) then (resetLexan lex; raise Fail "Static errors (pass 1)") else fn () => { fixes=[], values=[], structures=[], functors=[], types=[], signatures=[] } (* Do nothing *) else let (* let2 *) (* create a "throw away" compiling environment for this topdec *) val newFixEnv = UTILITIES.searchList (); val enterFix = #enter newFixEnv; val lookupFix = lookupDefault (#lookup newFixEnv) (#lookupFix globals); (* parse a topdec *) val parseTree : STRUCTURES.structs list = PARSEDEC.parseDec (stopSyms, lex, {enterFix = enterFix, lookupFix = lookupFix}); val parseTime = cpuTime startTime; val UUU:unit = if printParsetree then let val pstream = prettyPrint (77, compilerOutput); in ppBeginBlock pstream (0, false); STRUCTURES.displayStructs (parseTree, 10000, pstream); ppEndBlock pstream () end else (); val U : unit = if errorOccurred lex then (resetLexan lex; raise Fail "Static errors (pass 1)") else () (* extend throw-away compiling environment *) val newValEnv = UTILITIES.searchList(); val newTypeEnv = UTILITIES.searchList(); val newStrEnv = UTILITIES.searchList(); val newSigEnv = UTILITIES.searchList(); val newFuncEnv = UTILITIES.searchList(); (* create an "env" from the throw-away environment *) val lookupVal = lookupDefault (#lookup newValEnv) (#lookupVal globals); val lookupType = lookupDefault (#lookup newTypeEnv) (#lookupType globals); val lookupStruct = lookupDefault (#lookup newStrEnv) (#lookupStruct globals); val lookupSig = lookupDefault (#lookup newSigEnv) (#lookupSig globals); val lookupFunct = lookupDefault (#lookup newFuncEnv) (#lookupFunct globals); (* For each declaration we enter a reference to the identifier in this table. We can then construct code which will load each value into a vector which can be returned. Used for variables and exceptions. *) val locals = { lookupVal = lookupVal, lookupType = lookupType, lookupFix = lookupFix, lookupStruct = lookupStruct, lookupSig = lookupSig, lookupFunct = lookupFunct, enterVal = #enter newValEnv, enterType = #enter newTypeEnv, enterFix = enterFix, enterStruct = #enter newStrEnv, enterSig = #enter newSigEnv, enterFunct = #enter newFuncEnv }; val localEnv : env = STRUCTVALS.Env locals; (* If no errors then do second pass to match identifiers and declarations and return type of expression. *) val UUU:unit = STRUCTURES.pass2Structs (parseTree, lex, localEnv); (* We need to check that no top-level value has a free type variable in its type. We can only do that once unification is complete because one declaration may "freeze" the type of another within a single "topdec". Don't do this check if we've already reported an error. Mistyped top-level functions are given type ('a) which then would be reported as an error here. *) val U: unit = if errorOccurred lex then () else STRUCTURES.checkForFreeTypeVars(#apply newValEnv, #apply newStrEnv, #apply newFuncEnv, lex); val pass2Time = cpuTime startTime; val U : unit = if errorOccurred lex then (resetLexan lex; raise Fail "Static errors (pass2)") else (); (* Only code-generate if there were no errors and it's not a directive. *) val optimisedCode : CODETREE.codetree = STRUCTURES.gencodeStructs (parseTree, lex); val treeTime = cpuTime startTime; val U : unit = if errorOccurred lex then (* Errors can be produced during the code-generation phase. *) (resetLexan lex; raise Fail "Static errors (pass3)") else (); val UUU:unit = if printCodetree then let val pstream = prettyPrint (77, compilerOutput); in ppBeginBlock pstream (0, false); CODETREE.pretty (optimisedCode, pstream); ppEndBlock pstream () end else (); val resultCode : unit -> CODETREE.codetree = CODETREE.genCode(optimisedCode, debugSwitches); val codeTime = cpuTime startTime; in (* let2 *) (* This is the procedure which is returned as the result of the compilation. *) fn () => let (* let3 *) (* Save the value of the profiling switch, and switch profiling on if required. *) val wasProfiling = profiling; val startRunTime = Timer.startCPUTimer(); (* Save the run-time *) val () = startProfile wasProfiling; val resultVec = (* Now run it *) resultCode () handle exn => (* Exceptions in run-time code. *) let val () = stopProfile wasProfiling; val endRunTime = cpuTime startRunTime; (* if we are profiling, stop and force out the profile counts *) val () = stopProfile wasProfiling; in (* print out timing info *) if timing then printTimes compilerOutput (parseTime,pass2Time,treeTime,codeTime,endRunTime) else (); raise exn end val () = stopProfile wasProfiling; val endRunTime = cpuTime startRunTime; val extractedResults = STRUCTURES.pass4Structs (resultVec, parseTree) in (* let3 *) (* print out timing info *) if timing then printTimes compilerOutput (parseTime,pass2Time,treeTime,codeTime,endRunTime) else (); extractedResults end (* let3 *) end (* let2 *) end; (* let1 *) fun compiler (nameSpace: nameSpace, getChar: unit->char option, parameters: Universal.universal list) : unit -> { fixes: (string * fixStatus) list, values: (string * values) list, structures: (string * structVals) list, signatures: (string * signatures) list, functors: (string * functors) list, types: (string * typeConstrs) list } = let val debugSwitches = parameters val lex = LEX.initial(getChar, debugSwitches); val traceCompiler = DEBUG.getParameter DEBUG.traceCompilerTag debugSwitches val compilerOutput = DEBUG.getParameter DEBUG.compilerOutputTag debugSwitches in ( if traceCompiler then PolyML.exception_trace (fn () => baseCompiler(lex, nameSpace, debugSwitches)) else baseCompiler(lex, nameSpace, debugSwitches) ) handle SML90.Interrupt => ( LEX.flushLexan lex; (* No longer needed? *) compilerOutput ("Compilation interrupted\n"); raise SML90.Interrupt ) | Fail s => raise Fail s (* static errors - caught by next level up *) | InternalError s => let val s' = "Exception- InternalError: " ^ String.toString s ^ " raised while compiling" in compilerOutput (s' ^ "\n"); raise Fail s' end | exn => let val s' = "Exception- " ^ VALUEOPS.exnName exn ^ " unexpectedly raised while compiling" in compilerOutput (s' ^ "\n"); raise Fail s' end end end; (* struct *) polyml.5.2.1/mlsource/MLCompiler/CompilerBody.ML0000644000175000017500000000252011003076053020444 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* Title: Make the ML system. Author: Mike Crawley Copyright AHL 1993 *) structure CompilerBody = COMPILER_BODY ( structure SYMBOLS = Symbols structure SYMSET = SymSet structure LEX = Lex structure CODETREE = CodeTree structure STRUCTVALS = StructVals structure VALUEOPS = ValueOps structure STRUCTURES = Structures structure PARSEDEC = ParseDec structure DEBUG = Debug structure UTILITIES = Utilities structure MISC = Misc structure PRETTYPRINTER = PrettyPrinter ) ; polyml.5.2.1/mlsource/MLCompiler/CompilerVersion.sml0000644000175000017500000000151211020177030021453 0ustar daviddavid(* Copyright (c) 2007-8 David C.J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure CompilerVersion = struct val compilerVersion = "5.2 Release" end; polyml.5.2.1/mlsource/MLCompiler/DEBUGGER_.sml0000644000175000017500000002663311003075664017704 0ustar daviddavid(* Title: Source level debugger for Poly/ML Author: David Matthews Copyright (c) David Matthews 2000 This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) functor DEBUGGER_ ( (*****************************************************************************) (* STRUCTVALS *) (*****************************************************************************) structure STRUCTVALS : sig type types type typeConstrs type fixStatus type structVals type signatures type functors type values type codetree type valAccess val Global: codetree -> valAccess val makeValueConstr: string * types * bool * valAccess -> values; end; (*****************************************************************************) (* VALUEOPS *) (*****************************************************************************) structure VALUEOPS : sig type codetree type types type values type fixStatus type structVals type prettyPrinter type machineWord type signatures type functors type typeConstrs type nameSpace = { lookupVal: string -> values option, lookupType: string -> typeConstrs option, lookupFix: string -> fixStatus option, lookupStruct: string -> structVals option, lookupSig: string -> signatures option, lookupFunct: string -> functors option, enterVal: string * values -> unit, enterType: string * typeConstrs -> unit, enterFix: string * fixStatus -> unit, enterStruct: string * structVals -> unit, enterSig: string * signatures -> unit, enterFunct: string * functors -> unit, allVal: unit -> (string*values) list, allType: unit -> (string*typeConstrs) list, allFix: unit -> (string*fixStatus) list, allStruct: unit -> (string*structVals) list, allSig: unit -> (string*signatures) list, allFunct: unit -> (string*functors) list }; val mkGvar: string * types * codetree -> values val mkGex: string * types * codetree -> values end structure CODETREE : sig type machineWord type codetree val mkConst: machineWord -> codetree; val CodeZero: codetree; end structure TYPETREE: sig type types val unitType: types; val exnType: types; end structure ADDRESS : sig type machineWord; val toMachineWord: 'a -> machineWord end; sharing type CODETREE.machineWord = VALUEOPS.machineWord = ADDRESS.machineWord sharing type CODETREE.codetree = VALUEOPS.codetree = STRUCTVALS.codetree sharing type STRUCTVALS.values = VALUEOPS.values sharing type STRUCTVALS.types = VALUEOPS.types = TYPETREE.types sharing type STRUCTVALS.typeConstrs = VALUEOPS.typeConstrs sharing type STRUCTVALS.fixStatus = VALUEOPS.fixStatus sharing type STRUCTVALS.structVals = VALUEOPS.structVals sharing type STRUCTVALS.signatures = VALUEOPS.signatures sharing type STRUCTVALS.functors = VALUEOPS.functors ) : sig type types type values type machineWord type fixStatus type structVals type typeConstrs type signatures type functors datatype environEntry = EnvValue of string * types | EnvException of string * types | EnvVConstr of string * types * bool | EnvStaticLevel type nameSpace = { lookupVal: string -> values option, lookupType: string -> typeConstrs option, lookupFix: string -> fixStatus option, lookupStruct: string -> structVals option, lookupSig: string -> signatures option, lookupFunct: string -> functors option, enterVal: string * values -> unit, enterType: string * typeConstrs -> unit, enterFix: string * fixStatus -> unit, enterStruct: string * structVals -> unit, enterSig: string * signatures -> unit, enterFunct: string * functors -> unit, allVal: unit -> (string*values) list, allType: unit -> (string*typeConstrs) list, allFix: unit -> (string*fixStatus) list, allStruct: unit -> (string*structVals) list, allSig: unit -> (string*signatures) list, allFunct: unit -> (string*functors) list }; (* The debugger function supplied to the compiler. *) type debugger = int * values * int * string * string * nameSpace -> unit val nullDebug: debugger val debuggerFunTag : debugger Universal.tag datatype debugReason = DebugEnter of machineWord * types | DebugLeave of machineWord * types | DebugException of exn | DebugStep (* Functions inserted into the compiled code. *) val debugFunction: debugger * debugReason * string * string * int -> environEntry list -> machineWord list -> unit end = struct open STRUCTVALS VALUEOPS CODETREE (* The static environment contains these kinds of entries. *) datatype environEntry = EnvValue of string * types | EnvException of string * types | EnvVConstr of string * types * bool | EnvStaticLevel datatype debugReason = DebugEnter of machineWord * types | DebugLeave of machineWord * types | DebugException of exn | DebugStep (* We pass an integer code plus a value as arguments to the debugger function rather than a datatype because it's simpler when passing arguments through the bootstrap. *) type debugger = int * values * int * string * string * nameSpace -> unit (* Create a tag so that the debugger can be included in the parameters. *) val debuggerFunTag : debugger Universal.tag = Universal.tag() fun nullDebug _ = () (* Reason codes passed to the debugger function. *) val debugEnterFun = 1 and debugLeaveFun = 2 and debugExceptFun = 3 and debugLineChange = 4 val dummyValue = mkGvar("", TYPETREE.unitType, CodeZero) fun makeSpace ctEnv rtEnv = let (* Create the environment. *) fun lookupValues (EnvValue(name, ty) :: ntl, valu :: vl) s = if name = s then SOME(mkGvar(name, ty, mkConst valu)) else lookupValues(ntl, vl) s | lookupValues (EnvException(name, ty) :: ntl, valu :: vl) s = if name = s then SOME(mkGex(name, ty, mkConst valu)) else lookupValues(ntl, vl) s | lookupValues (EnvVConstr(name, ty, nullary) :: ntl, valu :: vl) s = if name = s then SOME(makeValueConstr(name, ty, nullary, Global(mkConst valu))) else lookupValues(ntl, vl) s | lookupValues (EnvStaticLevel :: ntl, vl) s = (* Static level markers have no effect here. *) lookupValues(ntl, vl) s | lookupValues _ _ = (* The name we are looking for isn't in the environment. The lists should be the same length. *) NONE fun allValues (EnvValue(name, ty) :: ntl, valu :: vl) = (name, mkGvar(name, ty, mkConst valu)) :: allValues(ntl, vl) | allValues (EnvException(name, ty) :: ntl, valu :: vl) = (name, mkGex(name, ty, mkConst valu)) :: allValues(ntl, vl) | allValues (EnvVConstr(name, ty, nullary) :: ntl, valu :: vl) = (name, makeValueConstr(name, ty, nullary, Global(mkConst valu))) :: allValues(ntl, vl) | allValues (EnvStaticLevel :: ntl, vl) = allValues(ntl, vl) | allValues _ = [] (* We have a full environment here for future expansion but at the moment only the value environment is used. *) fun noLook _ = NONE and noEnter _ = raise Fail "Cannot update this name space" and allEmpty _ = [] in { lookupVal = lookupValues(ctEnv, rtEnv), lookupType = noLook, lookupFix = noLook, lookupStruct = noLook, lookupSig = noLook, lookupFunct = noLook, enterVal = noEnter, enterType = noEnter, enterFix = noEnter, enterStruct = noEnter, enterSig = noEnter, enterFunct = noEnter, allVal = fn () => allValues(ctEnv, rtEnv), allType = allEmpty, allFix = allEmpty, allStruct = allEmpty, allSig = allEmpty, allFunct = allEmpty } end; (* A pointer to this function is inserted in the code for each line. *) (* Although the nameTypeList and valueList are the same length we build them separately. This allows the nameTypeList to be built at compile time and reduces the run-time costs. *) fun debugFunction (debugger, reason, fileName, functionName, line) staticEnv valueList = let (* The function name supplied is made up to be suitable for output when profiling. We need to clean it up a bit for use here. The general form is F().S.v-f(2)g where F is a functor, S a structure, v a val declaration, f a curried function and g the function itself. If we're within a function we may also have '()' at the end. For the moment just strip out the argument numbers. *) fun checkChar (#")", (_, l)) = (true, #")" :: l) (* Start of parens *) | checkChar (#"(", (_, l)) = (false, #"(" :: l) (* End of parens *) | checkChar (_, (true, l)) = (true, l) (* Remove the character *) | checkChar (c, (false, l)) = (false, c :: l) val (_, chars) = List.foldr checkChar (false, []) (explode functionName) val name1 = String.implode chars (* Remove final '()'. This makes the name within the function consistent with the name on entry and exit to the function. *) fun removeSuffix s1 s2 = if String.isSuffix s1 s2 then String.substring(s2, 0, String.size s2-String.size s1) else s2 (* Remove the trailing '()' which appears inside the function so that we get the same name for the entry and exit code as we do inside the function. If this function is defined by a val declaration rather than a fun declaration remove the trailing '-' *) val processedName = removeSuffix "-" (removeSuffix "()" name1) val (code, value) = case reason of DebugEnter (argValue, argType) => (debugEnterFun, mkGvar("", argType, mkConst argValue)) | DebugLeave (fnResult, resType) => (debugLeaveFun, mkGvar("", resType, mkConst fnResult)) | DebugException exn => let val exnVal = ADDRESS.toMachineWord exn (* The exception is always a value of type exn. *) val resVal = mkGvar("", TYPETREE.exnType, mkConst exnVal) in (debugExceptFun, resVal) end | DebugStep => (debugLineChange, dummyValue) in debugger(code, value, line, fileName, processedName, makeSpace staticEnv valueList) end end; polyml.5.2.1/mlsource/MLCompiler/Debug.ML0000644000175000017500000001260011003075604017103 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited Modified David C.J. Matthews 2008. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* Title: Control debugging output. Author: Dave Matthews, Cambridge University Computer Laboratory Copyright Cambridge University 1985 *) structure Debug = (*****************************************************************************) (* Body of DEBUG *) (*****************************************************************************) struct local open Universal in (* Print error and warning messages. *) val errorMessageProcTag: (string * bool * int -> unit) tag = tag() (* Compiler output. Used for timing information and compiler debug output. *) val compilerOutputTag: (string->unit) tag = tag() (* Get the current line number. *) val lineNumberTag: (unit->int) tag = tag() (* File name. Only used in the debugger so may be taken out. *) val fileNameTag: string tag = tag() (* Print times for compilation and execution: default false. *) val timingTag: bool tag = tag() (* Profile executed code? default 0. *) val profilingTag: int tag = tag() (* How much to print in error messages? default 6 *) val errorDepthTag: int tag = tag() (* Control print depth in PolyML.print. *) val printDepthFunTag: (unit->int) tag = tag() (* Length of line in PolyML.print. error messages etc. *) val lineLengthTag: int tag = tag() (* ML97 or ML90 mode? default ML97 *) val ml90Tag: bool tag = tag() (* Compile in debugging code? default false *) val debugTag: bool tag = tag() (* Stream to use for output in PolyML.print *) val printStringTag: (string->unit) tag = tag() (* Compilation fine tuning. *) (* Should functors be made inline? default true. *) val inlineFunctorsTag: bool tag = tag() (* Control how big functions should be before they're not inlined. *) val maxInlineSizeTag: int tag = tag() (* Compiler debugging. *) (* Trace exceptions generated within the compiler? default false. *) val traceCompilerTag: bool tag = tag() (* Print parsetree after parsing? default false *) val parsetreeTag: bool tag = tag() (* Print codetree after compiling? default false *) val codetreeTag: bool tag = tag() (* Print the optimised code after compiling? default false *) val codetreeAfterOptTag: bool tag = tag() (* Print pseudo-stack in code-generator? default false *) val pstackTraceTag: bool tag = tag() (* Print assembly code in code-generator? default false *) val assemblyCodeTag: bool tag = tag() (* To avoid circularity of dependencies a few tags are defined elsewhere: *) (* val printSpaceTag: ValueOps.nameSpace tag val debuggerFunTag: Debgger.debugger tag *) val defaults = [ tagInject errorMessageProcTag (fn _ => raise Fail "error in program"), tagInject compilerOutputTag (fn _ => ()), (* Discard output. *) tagInject lineNumberTag (fn () => 0), (* Zero line number *) tagInject fileNameTag "", tagInject inlineFunctorsTag true, tagInject maxInlineSizeTag 40, tagInject parsetreeTag false, tagInject codetreeTag false, tagInject pstackTraceTag false, tagInject assemblyCodeTag false, tagInject codetreeAfterOptTag false, tagInject timingTag false, tagInject profilingTag 0, tagInject errorDepthTag 6, tagInject printDepthFunTag (fn () => 0), tagInject lineLengthTag 77, tagInject traceCompilerTag false, tagInject ml90Tag false, tagInject debugTag false, tagInject printStringTag (fn s => raise Fail "No stream") ] fun getParameter (t:'a tag) (tagList: universal list) :'a = case List.find (tagIs t) tagList of SOME a => tagProject t a | NONE => (* Use the default *) ( case List.find (tagIs t) defaults of SOME a => tagProject t a | NONE => raise Misc.InternalError "tag missing" ) end end; polyml.5.2.1/mlsource/MLCompiler/Debugger.sml0000644000175000017500000000203011003075664020066 0ustar daviddavid(* Title: Source level debugger for Poly/ML Author: David Matthews Copyright (c) David Matthews 2000 This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure Debugger = DEBUGGER_( structure STRUCTVALS = StructVals structure CODETREE = CodeTree structure VALUEOPS = ValueOps structure TYPETREE = TypeTree structure ADDRESS = Address ); polyml.5.2.1/mlsource/MLCompiler/INITIALISE_.ML0000644000175000017500000016121011020251325017643 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited Updated David C.J. Matthews 2008 This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* Title: Initialise ML Global Declarations. Author: Dave Matthews,Cambridge University Computer Laboratory Copyright Cambridge University 1985 *) functor INITIALISE_ ( (*****************************************************************************) (* TYPETREE *) (*****************************************************************************) structure TYPETREE : sig type types; type typeConstrs; val mkTypeVar: int * bool * bool * bool -> types; val mkTypeConstruction: string * typeConstrs * types list -> types; val mkProductType: types list -> types; val mkFunctionType: types * types -> types; val mkOverloadSet: typeConstrs list -> types; val mkLabelled: {name: string, typeof: types } list * bool -> types; val mkLabelEntry: string * types -> {name: string, typeof: types }; val sortLabels: {name: string, typeof: types } list * (string -> unit) -> {name: string, typeof: types } list; val boolType: types; val intType: types; val stringType: types; val unitType: types; val charType: types; val wordType: types; val exnType: types; type prettyPrinter val displayTypeConstrs: typeConstrs * int * prettyPrinter * bool -> unit end; (*****************************************************************************) (* STRUCTVALS *) (*****************************************************************************) structure STRUCTVALS : sig (* Structures *) type structVals; type signatures; type valAccess; type codetree; type values; type typeId; val undefinedStruct: structVals; val structSignat: structVals -> signatures; val makeEmptyGlobal: string -> structVals; val makeLocalStruct: string * signatures -> structVals; (* Functors *) type functors; val makeFunctor: string * structVals * signatures * valAccess -> functors; (* Signatures *) type univTable; val sigTab: signatures -> univTable; val makeSignatures: string -> signatures; val makeCopy: string * signatures * int * int -> signatures; val makeFreeId: unit -> typeId; val makeBoundId: int -> typeId; (* Types *) type types; type typeConstrs; val emptyType: types; val tcSetConstructors: typeConstrs * values list -> unit; val tcTypeVars: typeConstrs -> types list val makeTypeConstrs: string * types list * types * typeId * bool * int -> typeConstrs; val makeFrozenTypeConstrs: string * types list * types * typeId * bool * int -> typeConstrs; val generalisable: int; val boolType: typeConstrs; val intType: typeConstrs; val charType: typeConstrs; val stringType: typeConstrs; val realType: typeConstrs; val refType: typeConstrs; val unitType: typeConstrs; val exnType: typeConstrs; val wordType: typeConstrs; val listType: typeConstrs; (* Access to values, structures etc. *) val makeGlobal: codetree -> valAccess; (* Values. *) datatype typeDependent = Print | PrintSpace | MakeString | MakeStringSpace | InstallPP | Equal | NotEqual | AddOverload | TypeDep; val makeFormalV: string * types * int -> values; val makeFormalEx: string * types * int -> values; val makeOverloaded: string * types * typeDependent -> values; type fixStatus; datatype env = Env of { lookupVal: string -> values option, lookupType: string -> typeConstrs option, lookupFix: string -> fixStatus option, lookupStruct: string -> structVals option, lookupSig: string -> signatures option, lookupFunct: string -> functors option, enterVal: string * values -> unit, enterType: string * typeConstrs -> unit, enterFix: string * fixStatus -> unit, enterStruct: string * structVals -> unit, enterSig: string * signatures -> unit, enterFunct: string * functors -> unit }; val makeEnv: signatures -> env; type 'a tag; val valueVar: values tag; val typeConstrVar: typeConstrs tag; val fixVar: fixStatus tag; val structVar: structVals tag; val signatureVar: signatures tag; val functorVar: functors tag; end; (*****************************************************************************) (* VALUEOPS *) (*****************************************************************************) structure VALUEOPS : sig type codetree type types type values type representations type prettyPrinter type structVals type functors type signatures type fixStatus type typeConstrs type nameSpace; (* Construction functions. *) val mkGvar: string * types * codetree -> values val mkGex: string * types * codetree -> values val mkGconstr: string * types * codetree * bool -> values (* Standard values *) val nilConstructor: values; val consConstructor: values; val RefForm: representations; val BoxedForm: representations; val EnumForm: int -> representations; val createNullaryConstructor: representations * string -> codetree val createUnaryConstructor: representations * string -> codetree val displayFixStatus: fixStatus * int * prettyPrinter -> unit (* nameSpace arg is used to get fixity and for exception packets. bool arg is ture if we should print type with the structure name. *) val displaySignatures: signatures * int * prettyPrinter * nameSpace * bool -> unit val displayStructures: structVals * int * prettyPrinter * nameSpace * bool -> unit val displayFunctors: functors * int * prettyPrinter * nameSpace * bool -> unit val displayValues: values * int * prettyPrinter * nameSpace * bool -> unit val printValues: values * int * prettyPrinter * nameSpace -> unit val printSpaceTag: nameSpace Universal.tag end; (*****************************************************************************) (* CODETREE *) (*****************************************************************************) structure CODETREE : sig type machineWord type codetree val CodeNil: codetree; val CodeZero: codetree; val mkEnv: codetree list -> codetree; val mkDec: int * codetree -> codetree; val mkLoad: int * int -> codetree; val mkInd: int * codetree -> codetree; val mkConst: machineWord -> codetree; val mkInlproc: codetree * int * int * string -> codetree; val mkIf: codetree * codetree * codetree -> codetree; val mkEval: codetree * codetree list * bool -> codetree; val identityFunction: string -> codetree; val mkTuple: codetree list -> codetree; val mkStr: string -> codetree; val mkRaise: codetree -> codetree; end; (*****************************************************************************) (* MAKE *) (*****************************************************************************) structure MAKE : sig type gEnv type env type values; type typeConstrs; type fixStatus; type structVals; type signatures; type functors; type nameSpace; val gEnvAsEnv : gEnv -> env val gEnvAsNameSpace: gEnv -> nameSpace val useIntoEnv : gEnv -> string -> unit val compiler : nameSpace * (unit->char option) * Universal.universal list -> unit -> { fixes: (string * fixStatus) list, values: (string * values) list, structures: (string * structVals) list, signatures: (string * signatures) list, functors: (string * functors) list, types: (string* typeConstrs) list }; end; (*****************************************************************************) (* ADDRESS *) (*****************************************************************************) structure ADDRESS : sig type machineWord val toMachineWord : 'a -> machineWord; end; (*****************************************************************************) (* DEBUG *) (*****************************************************************************) structure DEBUG : sig val errorMessageProcTag: (string * bool * int -> unit) Universal.tag val compilerOutputTag: (string->unit) Universal.tag val lineNumberTag: (unit->int) Universal.tag val fileNameTag: string Universal.tag val profilingTag : int Universal.tag; val timingTag : bool Universal.tag; val printDepthFunTag : (unit->int) Universal.tag; val errorDepthTag : int Universal.tag; val lineLengthTag : int Universal.tag; val assemblyCodeTag : bool Universal.tag; val parsetreeTag : bool Universal.tag; val codetreeTag : bool Universal.tag; val pstackTraceTag : bool Universal.tag; val codetreeAfterOptTag : bool Universal.tag; val traceCompilerTag : bool Universal.tag; val inlineFunctorsTag : bool Universal.tag; val maxInlineSizeTag : int Universal.tag; val ml90Tag : bool Universal.tag; val debugTag : bool Universal.tag; val printStringTag : (string->unit) Universal.tag; end; (*****************************************************************************) (* MISC *) (*****************************************************************************) structure MISC : sig type 'a iter val unescapeString : string -> string val mapIterator : ('a -> 'b) -> 'a iter -> 'b list val upto : int -> int -> int iter exception Conversion of string; (* string to int conversion failure *) end; (*****************************************************************************) (* DEBUGGER *) (*****************************************************************************) structure DEBUGGER : sig type values; type nameSpace; (* The debugger function supplied to the compiler. *) type debugger = int * values * int * string * string * nameSpace -> unit val debuggerFunTag : debugger Universal.tag end; (*****************************************************************************) (* PRETTYPRINTER *) (*****************************************************************************) structure PRETTYPRINTER : sig type prettyPrinter val prettyPrint : int * (string -> unit) -> prettyPrinter; val uglyPrint : (string -> unit) -> prettyPrinter; val ppAddString : prettyPrinter -> string -> unit val ppBeginBlock : prettyPrinter -> int * bool -> unit val ppEndBlock : prettyPrinter -> unit -> unit val ppBreak : prettyPrinter -> int * int -> unit end; structure VERSION: sig val compilerVersion: string end; (*****************************************************************************) (* INITIALISE sharing constraints *) (*****************************************************************************) sharing type ADDRESS.machineWord = CODETREE.machineWord sharing type CODETREE.codetree = VALUEOPS.codetree = STRUCTVALS.codetree sharing type STRUCTVALS.values = VALUEOPS.values = MAKE.values sharing type TYPETREE.types = STRUCTVALS.types = VALUEOPS.types sharing type TYPETREE.typeConstrs = STRUCTVALS.typeConstrs = MAKE.typeConstrs = VALUEOPS.typeConstrs sharing type STRUCTVALS.env = MAKE.env sharing type STRUCTVALS.functors = MAKE.functors = VALUEOPS.functors sharing type STRUCTVALS.structVals = MAKE.structVals = VALUEOPS.structVals sharing type STRUCTVALS.signatures = MAKE.signatures = VALUEOPS.signatures sharing type STRUCTVALS.fixStatus = MAKE.fixStatus = VALUEOPS.fixStatus sharing type VALUEOPS.prettyPrinter = TYPETREE.prettyPrinter = PRETTYPRINTER.prettyPrinter sharing type MAKE.nameSpace = VALUEOPS.nameSpace ) : (*****************************************************************************) (* INITIALISE export signature *) (*****************************************************************************) sig type gEnv val initGlobalEnv : gEnv -> unit end = (*****************************************************************************) (* INITIALISE functor body *) (*****************************************************************************) struct (* Don't open TYPETREE 'cos names clash with STRUCTVALS *) open STRUCTVALS; open VALUEOPS; open CODETREE; open ADDRESS; open MAKE; open MISC; open RuntimeCalls; (* for POLY_SYS calls *) (*****************************************************************************) (* Untility functions *) (*****************************************************************************) fun applyList f [] = () | applyList f (h :: t) = (f h : unit; applyList f t); (*****************************************************************************) (* initGlobalEnv *) (*****************************************************************************) fun initGlobalEnv(globalTable : gEnv) = let val Env globalEnv = MAKE.gEnvAsEnv globalTable (*****************************************************************************) (* Utilities *) (*****************************************************************************) (* shouldn't these be imported from somewhere? *) fun ioOp (x: int) : 'a = RunCall.run_call1 POLY_SYS_io_operation x; val intZero = mkConst (toMachineWord 0); val realZero = mkConst (toMachineWord 0.0); fun loadArg n = mkLoad (~ n, 0); fun mkEntry n = mkConst (ioOp n); val enterGlobalValue = #enterVal globalEnv; val enterGlobalType = #enterType globalEnv; (* Some routines to help make the types. *) local (* careful - STRUCTVALS.intType differs from TYPETREE.intType *) open TYPETREE; in (* Make some type variables *) fun makeEqTV () = mkTypeVar (generalisable, true, false, false); fun makeTV () = mkTypeVar (generalisable, false, false, false); fun makeImpTV () = mkTypeVar (generalisable, false, false, true); (* Make some functions *) infixr 5 ->> fun a ->> b = mkFunctionType (a, b); infix 7 **; fun a ** b = mkProductType [a, b]; (* Type identifiers for the types of the declarations. *) val Int = intType; val String = stringType; val Bool = boolType; val Unit = unitType; val Char = charType; val Word = wordType; val mkTypeConstruction = mkTypeConstruction; val mkTypeVar = mkTypeVar; end; (* List of something *) fun List (base : types) : types = mkTypeConstruction ("list", listType, [base]); (* ref something *) fun Ref (base : types) : types = mkTypeConstruction ("ref", refType, [base]); (* option something *) val optionType = makeTypeConstrs("option", [makeTV()], emptyType, makeFreeId (), true, 0); fun Option (base : types) : types = mkTypeConstruction ("option", optionType, [base]); (* Type-dependent functions. *) fun mkSpecialFun (name:string) (typeof:types) (opn: typeDependent) : values = makeOverloaded (name, typeof, opn); (* Overloaded functions. *) fun mkOverloaded (name:string) (typeof: types) : values = mkSpecialFun name typeof TypeDep; (*****************************************************************************) (* unit *) (*****************************************************************************) val () = enterGlobalType ("unit", unitType); (*****************************************************************************) (* bool *) (*****************************************************************************) local val falseCons = mkGconstr ("false", Bool, createNullaryConstructor(EnumForm 0, "false"), true); val trueCons = mkGconstr ("true", Bool, createNullaryConstructor(EnumForm 1, "true"), true); in val () = enterGlobalType ("bool", boolType); val () = enterGlobalValue ("true", trueCons); val () = enterGlobalValue ("false", falseCons); (* Put these constructors onto the boolean type. *) val () = tcSetConstructors (boolType, [trueCons, falseCons]); end; (*****************************************************************************) (* int *) (*****************************************************************************) val () = enterGlobalType ("int", intType); (*****************************************************************************) (* char *) (*****************************************************************************) val () = enterGlobalType ("char", charType); (*****************************************************************************) (* string *) (*****************************************************************************) val () = enterGlobalType ("string", stringType); (* chr - define it as an identity function for now. It is redefined in the prelude to check that the value is a valid character. *) local val chrCode = identityFunction "chr"; val chrType = Int ->> String; val chrVal = mkGvar ("chr", chrType, chrCode); in val () = enterGlobalValue ("chr", chrVal); end; (*****************************************************************************) (* real *) (*****************************************************************************) val () = enterGlobalType ("real", realType); (*****************************************************************************) (* 'a list *) (*****************************************************************************) val () = enterGlobalType ("list", listType); val () = enterGlobalValue ("::", consConstructor); val () = enterGlobalValue ("nil", nilConstructor); (* Put these constructors onto the list type. *) val () = tcSetConstructors (listType, [consConstructor, nilConstructor]); (*****************************************************************************) (* 'a option *) (*****************************************************************************) local val optionTypeVars = tcTypeVars optionType; val alpha = hd optionTypeVars; val alphaOption = mkTypeConstruction ("option", optionType, optionTypeVars); val someType = TYPETREE.mkFunctionType (alpha, alphaOption); (* These two representations are built into the RTS. *) val NoneForm = EnumForm 0; val SomeForm = BoxedForm; val noneConstructor = mkGconstr ("NONE", alphaOption, createNullaryConstructor(NoneForm, "NONE"), true); val someConstructor = mkGconstr ("SOME", someType, createUnaryConstructor(SomeForm, "SOME"), false); in val () = enterGlobalType ("option", optionType); val () = enterGlobalValue ("SOME", someConstructor); val () = enterGlobalValue ("NONE", noneConstructor); (* Put these constructors onto the option type. N.B. as with all value constructors these need to be in alphabetical order. *) val () = tcSetConstructors (optionType, [noneConstructor, someConstructor]); end; (*****************************************************************************) (* ref *) (*****************************************************************************) local val refCons = let val a : types = makeImpTV (); in mkGconstr ("ref", a ->> Ref a, createUnaryConstructor(RefForm, "ref"), false) end in val () = enterGlobalType ("ref", refType); val () = enterGlobalValue ("ref", refCons); (* Put this constructor onto the ref type. *) val () = tcSetConstructors (refType, [refCons]); end; (* '!' does not really have to be here but it makes it easier to ensure that it is implemented in-line. *) local val plingCode = (* we load the zero'th word from the parameter *) mkInlproc (mkEval (mkConst (ioOp POLY_SYS_load_word), [(loadArg 1), CodeZero], false) (* NOT early *), 0, 1, "!(1)"); val plingType = let val a = makeTV () in Ref a ->> a end; val plingVal = mkGvar ("!", plingType, plingCode); in val () = enterGlobalValue ("!", plingVal); end; (*****************************************************************************) (* exn *) (*****************************************************************************) val () = enterGlobalType ("exn", exnType); (*****************************************************************************) (* word *) (*****************************************************************************) val () = enterGlobalType ("word", wordType); (*****************************************************************************) (* 'a vector *) (*****************************************************************************) (* The only reason we have vector here is to get equality right. We need vector to be an equality type and to use structure equality. We can't add an overload for "=" as we do with arrays because that causes the type to have a ref-style equality i.e. 'a vector would permit equality even if 'a did not. *) val vectorType = makeFrozenTypeConstrs("vector", [makeTV()], emptyType, makeFreeId (), true, 0); val () = enterGlobalType ("vector", vectorType); (*****************************************************************************) (* System functions (in structure RunCall) *) (*****************************************************************************) local val runCall = makeEmptyGlobal "RunCall"; in val () = #enterStruct globalEnv ("RunCall", runCall); val (Env runCallEnv) = makeEnv (structSignat runCall); end; fun enterRunCall (name : string, entry : codetree, typ : types) : unit = let val value = mkGvar (name, typ, entry); in #enterVal runCallEnv (name, value) end; (*****************************************************************************) (* RunCall.unsafeCast *) (*****************************************************************************) local val a = makeTV (); val b = makeTV (); val unsafeCastType = a ->> b; val unsafeCastEntry : codetree = let val name = "unsafeCast(1)"; val level = 1; val args = 1; val body = mkLoad (~1, 0) (* just the parameter *) in mkInlproc (body, level, args, name) end; in val () = enterRunCall ("unsafeCast", unsafeCastEntry, unsafeCastType); end; (*****************************************************************************) (* RunCall.run_call* *) (*****************************************************************************) local val a = makeTV (); val b = makeTV (); val c = makeTV (); val d = makeTV (); val e = makeTV (); val f = makeTV (); val runCall0Type = Int ->> Unit ->> a; val runCall1Type = Int ->> a ->> b; val runCall2Type = Int ->> TYPETREE.mkProductType [a,b] ->> c; val runCall3Type = Int ->> TYPETREE.mkProductType [a,b,c] ->> d; val runCall4Type = Int ->> TYPETREE.mkProductType [a,b,c,d] ->> e; val runCall5Type = Int ->> TYPETREE.mkProductType [a,b,c,d,e] ->> f; (* We used to have the following definition: val runCall1Entry = mkEntry POLY_SYS_io_operation; but it didn't work as well, because CODETREE.ML wouldn't optimise expressions like: RunCall.run_call1 POLY_SYS_io_operation because there was nothing to tell it that this should be evaluated "early". Now we use an inline procedure wrapped round the constant, and set the "early" flag in the inline proc. SPF 2/5/95. *) val runCall1Entry : codetree = let val name = "run_call1(1)"; val ioOpEntry = mkEntry POLY_SYS_io_operation; val level = 1; val args = 1; val n = mkLoad (~1, 0) (* the outer parameter *) val body = mkEval (ioOpEntry, [n], true); (* early! *) in mkInlproc (body, level, args, name) end; fun makeRunCallTupled (width:int) : codetree = let (* These declarations should really be read in the reverse order. We are trying to build the codetree for something like the following: val run_call3 = fn (n:int) => let val f = ioOp n in fn (x,y,z) => f end; where "f " designates Poly-style (values in registers) uncurried parameter passing. *) val name = "run_call" ^ Int.toString width; val ioOpEntry = mkEntry POLY_SYS_io_operation; val innerBody : codetree = let val f = mkLoad (1, 1); (* first item from enclosing scope *) val tuple = mkLoad (~1, 0); (* the inner parameter *) val args = mapIterator (fn n => mkInd (n, tuple)) (upto 0 (width - 1)); in mkEval (f, args, false) (* no early evaluation (f may have side effects!) *) end; val innerLambda : codetree = let val level = 2; val args = 1; in mkInlproc (innerBody, level, args, name ^ "(1)") end; val outerBody : codetree = let val n = mkLoad (~1, 0) (* the outer parameter *) val f = mkEval (ioOpEntry, [n], true); (* early evaluation possible *) in mkEnv [ mkDec (1, f), innerLambda ] end; val outerLambda : codetree = let val level = 1; val args = 1; in mkInlproc (outerBody, level, args, name) end; in outerLambda end; val runCall0Entry = makeRunCallTupled 0; val runCall2Entry = makeRunCallTupled 2; val runCall3Entry = makeRunCallTupled 3; val runCall4Entry = makeRunCallTupled 4; val runCall5Entry = makeRunCallTupled 5; in val () = enterRunCall ("run_call0", runCall0Entry, runCall0Type); val () = enterRunCall ("run_call1", runCall1Entry, runCall1Type); val () = enterRunCall ("run_call2", runCall2Entry, runCall2Type); val () = enterRunCall ("run_call3", runCall3Entry, runCall3Type); val () = enterRunCall ("run_call4", runCall4Entry, runCall4Type); val () = enterRunCall ("run_call5", runCall5Entry, runCall5Type); end; (*****************************************************************************) (* Bootstrapping functions (in structure Bootstrap) *) (*****************************************************************************) local val bootstrap = makeEmptyGlobal "Bootstrap"; in val () = #enterStruct globalEnv ("Bootstrap", bootstrap); val (Env bootstrapEnv) = makeEnv (structSignat bootstrap); end; fun enterBootstrap (name : string, entry : codetree, typ : types) : unit = let val value = mkGvar (name, typ, entry); in #enterVal bootstrapEnv (name, value) end; (*****************************************************************************) (* Initialisation and bootstrapping functions *) (*****************************************************************************) local fun addVal (name : string, value : 'a, typ : types) : unit = enterBootstrap (name, mkConst (toMachineWord value), typ) (* These are only used during the bootstrap phase. Replacements are installed once the appropriate modules of the basis library are compiled. *) fun intOfString s = let val radix = if String.size s >= 3 andalso String.substring(s, 0, 2) = "0x" orelse String.size s >= 4 andalso String.substring(s, 0, 3) = "~0x" then StringCvt.HEX else StringCvt.DEC in case StringCvt.scanString (Int.scan radix) s of NONE => raise Conversion "Invalid integer constant" | SOME res => res end fun wordOfString s = let val radix = if String.size s > 2 andalso String.sub(s, 2) = #"x" then StringCvt.HEX else StringCvt.DEC in case StringCvt.scanString (Word.scan radix) s of NONE => raise Conversion "Invalid word constant" | SOME res => res end in (* When we start the compiler we don't have any conversion functions. We can't even use a literal string until we have installed a basic converter. *) val () = addVal ("convStringName", "convString", String); val () = addVal ("convInt", intOfString, String ->> Int); val () = addVal ("convWord", wordOfString, String ->> Word); (* Convert a string, recognising and converting the escape codes. *) val () = addVal ("convString", unescapeString, String ->> String); end; (*****************************************************************************) (* Polymorphic functions *) (*****************************************************************************) (* "=', '<>', PolyML.print etc are type-specific function which appear to be polymorphic. The compiler recognises these and treats them specially. For (in)equality that means generating type-specific versions of the equality operations; for print etc that means printing in a type-specific way. They can become true polymorphic functions and lose their type-specificity. For (in)equality that means defaulting to structure equality which is normal and expected behaviour. For print etc that means losing the ability to print and just printing "?" so it's important to avoid that happening. "open" treats type-specific functions specially and retains the type-specificity. That's important to allow the prelude code to expand the PolyML structure. *) local val eqType = let val a = makeEqTV () in a ** a ->> Bool end; val eqVal = mkSpecialFun "=" eqType Equal; in val () = enterGlobalValue ("=", eqVal); end; local val neqType = let val a = makeEqTV () in a ** a ->> Bool end; val neqVal = mkSpecialFun "<>" neqType NotEqual; in val () = enterGlobalValue ("<>", neqVal); end; (*****************************************************************************) (* PolyML structure *) (*****************************************************************************) local val polyml = makeEmptyGlobal "PolyML"; in val () = #enterStruct globalEnv ("PolyML", polyml); val (Env polyMLEnv) = makeEnv (structSignat polyml); val enterPolyMLVal = #enterVal polyMLEnv; end; (*****************************************************************************) (* Namespace functions *) (*****************************************************************************) local (* This version of the environment must match that used in the NameSpace structure. *) open TYPETREE (* Create a new structure for them. *) val nameSpace = makeEmptyGlobal "NameSpace"; val _ = #enterStruct polyMLEnv ("NameSpace", nameSpace); val (Env nameSpaceEnv) = makeEnv (structSignat nameSpace); (* Types for the basic values. These are opaque. *) fun createType typeName = let val typeconstr = makeTypeConstrs(typeName, [], emptyType, makeFreeId (), false, 0); in #enterType nameSpaceEnv (typeName, typeconstr); mkTypeConstruction (typeName, typeconstr, []) end; val valueVal = createType "valueVal" val typeVal = createType "typeVal" val fixityVal = createType "fixityVal" val signatureVal = createType "signatureVal" val structureVal = createType "structureVal" val functorVal = createType "functorVal" (* nameSpace type. Labelled record. *) fun createFields(name, vType): { name: string, typeof: types} list = let val enterFun = String ** vType ->> Unit val lookupFun = String ->> Option vType val allFun = Unit ->> List (String ** vType) in [mkLabelEntry("enter" ^ name, enterFun), mkLabelEntry("lookup" ^ name, lookupFun), mkLabelEntry("all" ^ name, allFun)] end (* We have to use the same names as we use in the env type because we're passing "env" values through the bootstrap. *) val valTypes = [("Val", valueVal), ("Type", typeVal), ("Fix", fixityVal), ("Struct", structureVal), ("Sig", signatureVal), ("Funct", functorVal)]; val fields = List.foldl (fn (p,l) => createFields p @ l) [] valTypes val recordType = makeTypeConstrs("nameSpace", [], mkLabelled(sortLabels(fields, fn _ => ()), true), makeFreeId (), false, 0); val () = #enterType nameSpaceEnv ("nameSpace", recordType); val debugFields = List.map (fn (n,v) => mkLabelEntry("lookup" ^ n, String ->> Option v)) valTypes val debugRecord = mkLabelled(sortLabels(debugFields, fn _ => ()), true); val debugType = (debugRecord ** (Unit ->> Bool)) ->> Unit val setDbtype = debugType ->> Unit (* The result type of the compiler includes valueVal etc. *) val resultFields = List.map TYPETREE.mkLabelEntry [("values", List(String ** valueVal)), ("fixes", List(String ** fixityVal)), ("types", List(String ** typeVal)), ("structures", List(String ** structureVal)), ("signatures", List(String ** signatureVal)), ("functors", List(String ** functorVal))] in val nameSpaceType = mkTypeConstruction ("nameSpace", recordType, []) val execResult = mkLabelled(sortLabels(resultFields, fn _ => ()), true) val valueVal = valueVal val typeVal = typeVal val fixityVal = fixityVal val signatureVal = signatureVal val structureVal = structureVal val functorVal = functorVal end (*****************************************************************************) (* Funny polymorphic functions (in structure PolyML) *) (*****************************************************************************) local val printType = let val a = makeTV () in a ->> a end; val printVal = mkSpecialFun "print" printType Print; in val () = enterPolyMLVal ("print", printVal); end; local val printType = let val a = makeTV () in TYPETREE.mkProductType[a, nameSpaceType, String ->> Unit, Int] ->> Unit end; val printVal = mkSpecialFun "printInNameSpace" printType PrintSpace; in val () = enterPolyMLVal ("printInNameSpace", printVal); end; local val makeStringType = let val a = makeTV () in a ->> String end; val makeStringVal = mkSpecialFun "makestring" makeStringType MakeString; in val () = enterPolyMLVal ("makestring", makeStringVal); end; local val makeStringType = let val a = makeTV () in a ** nameSpaceType ->> String end; val makeStringVal = mkSpecialFun "makestringInNameSpace" makeStringType MakeStringSpace; in val () = enterPolyMLVal ("makestringInNameSpace", makeStringVal); end; local val a = makeTV (); val b = makeTV (); val printTupleType = TYPETREE.mkProductType [ String ->> Unit, (* addString *) Int ** Bool ->> Unit, (* beginBracket *) Int ** Int ->> Unit, (* space *) Unit ->> Unit (* endBracket *) ]; val installPPType = (printTupleType ->> Int ->> b ->> a ->> Unit) ->> Unit; val installPPVal = mkSpecialFun "install_pp" installPPType InstallPP; in val () = enterPolyMLVal ("install_pp", installPPVal); end; (* This goes in RunCall since it's only for the basis library. *) local val addOverloadType = let val a = makeTV () and b = makeTV () in (a ->> b) ->> String ->> Unit end; val addOverloadVal = mkSpecialFun "addOverload" addOverloadType AddOverload; in val () = #enterVal runCallEnv ("addOverload", addOverloadVal); end; (*****************************************************************************) (* Bootstrap.Universal *) (*****************************************************************************) local (* This is used as one of the arguments to the compiler function. *) open TYPETREE val uniStruct = makeEmptyGlobal "Universal"; val _ = #enterStruct bootstrapEnv ("Universal", uniStruct); val (Env uniStructEnv) = makeEnv (structSignat uniStruct); fun enterUniversal (name : string, entry : codetree, typ : types) : unit = let val value = mkGvar (name, typ, entry); in #enterVal uniStructEnv (name, value) end; (* type 'a tag *) val tagConstr = makeTypeConstrs("tag", [makeTV()], emptyType, makeFreeId (), false, 0); val () = #enterType uniStructEnv ("tag", tagConstr); (* type universal *) val univConstr = makeTypeConstrs("universal", [], emptyType, makeFreeId (), false, 0); val () = #enterType uniStructEnv ("universal", univConstr); fun Tag base = mkTypeConstruction ("tag", tagConstr, [base]) val Universal = mkTypeConstruction ("universal", univConstr, []) (* val tagInject : 'a tag -> 'a -> universal *) val injectType = let val a = makeTV() in Tag a ->> a ->> Universal end val () = enterUniversal ("tagInject", mkConst (toMachineWord Universal.tagInject), injectType) (* We don't actually need tagIs and tagProject since this is only used for the compiler. Universal is redefined in the basis library. *) val projectType = let val a = makeTV() in Tag a ->> Universal ->> a end val () = enterUniversal ("tagProject", mkConst (toMachineWord Universal.tagProject), projectType) val testType = let val a = makeTV() in Tag a ->> Universal ->> Bool end val () = enterUniversal ("tagIs", mkConst (toMachineWord Universal.tagIs), testType) in val Tag = Tag and Universal = Universal end (*****************************************************************************) (* Bootstrap.ExnMessage *) (*****************************************************************************) (* This wraps PolyML.makestring to allow it to be used in General.exnMessage without capturing the environment at that point. *) local open TYPETREE val exnStruct = makeEmptyGlobal "ExnMessage"; val _ = #enterStruct bootstrapEnv ("ExnMessage", exnStruct); val (Env exnStructEnv) = makeEnv (structSignat exnStruct); in val () = #enterVal exnStructEnv ("exnMessage", makeOverloaded("exnMessage", exnType ->> String, MakeString)) end (*****************************************************************************) (* PolyML.compiler etc *) (*****************************************************************************) local open TYPETREE val compilerType : types = mkProductType[nameSpaceType, Unit ->> Option Char, List Universal] ->> Unit ->> execResult; in val () = enterBootstrap ("use", mkConst (toMachineWord (useIntoEnv globalTable)), String ->> Unit) val () = enterPolyMLVal("compiler", mkGvar ("compiler", compilerType, mkConst (toMachineWord compiler))); val () = enterBootstrap("globalSpace", mkConst (toMachineWord(gEnvAsNameSpace globalTable)), nameSpaceType) end; (*****************************************************************************) (* Overloaded functions. *) (*****************************************************************************) local val ty = TYPETREE.mkOverloadSet[] val addType = ty ** ty ->> ty; val negType = ty ->> ty; val cmpType = ty ** ty ->> Bool; in val () = enterGlobalValue ("+", mkOverloaded "+" addType); val () = enterGlobalValue ("-", mkOverloaded "-" addType); val () = enterGlobalValue ("*", mkOverloaded "*" addType); val () = enterGlobalValue ("~", mkOverloaded "~" negType); val () = enterGlobalValue ("abs", mkOverloaded "abs" negType); val () = enterGlobalValue (">=", mkOverloaded ">=" cmpType); val () = enterGlobalValue ("<=", mkOverloaded "<=" cmpType); val () = enterGlobalValue (">", mkOverloaded ">" cmpType); val () = enterGlobalValue ("<", mkOverloaded "<" cmpType); (* The following overloads are added in ML97 *) val () = enterGlobalValue ("div", mkOverloaded "div" addType); val () = enterGlobalValue ("mod", mkOverloaded "mod" addType); val () = enterGlobalValue ("/", mkOverloaded "/" addType); end; (*****************************************************************************) (* Funny functor PolyML.Run_exception0 *) (*****************************************************************************) (* "Run_exception0" and "Run_exception1" allow exceptions in the run-time system to be passed into ML. Run_exception0 is used for exceptions without arguments, and Run_exception1 for exceptions that have arguments. *) (* functor Run_exception0(val ex_iden: int end) : sig exception ex end *) local (* Argument signature. *) local (* make an anonymous, empty signature *) val sig0 : signatures = makeSignatures ""; val (Env argEnv) = makeEnv sig0; val exIdenVal : values = makeFormalV ("ex_iden", Int, 0); val () = #enterVal argEnv ("ex_iden", exIdenVal); in val argSig0 = makeCopy ("", sig0, 0, 0) end (* Result signature. *) local (* make an anonymous, empty signature *) val sig0 = makeSignatures "" val (Env resEnv) = makeEnv sig0; val exType = emptyType; val exVal = makeFormalEx ("ex", exType, 0); val () = #enterVal resEnv ("ex", exVal); in val resSig0 = makeCopy ("", sig0, 0, 0); end (* The functor turns the value into an exception by returning the argument. *) val Run_exception0 = makeFunctor ( "Run_exception0", makeLocalStruct ("", argSig0), resSig0, makeGlobal (identityFunction "Run_exception0") ); in val () = #enterFunct runCallEnv ("Run_exception0", Run_exception0); end; (*****************************************************************************) (* Funny functor RunCall.Run_exception1 *) (*****************************************************************************) (* functor Run_exception1(sig type exType; val ex_iden: int end) : sig exception ex of exType end *) local (* Make a nullary type constructor (the type of the exception) *) val exTypeConstr = makeFrozenTypeConstrs ("ex_type", [], emptyType, makeBoundId 0, false, 0); (* Argument signature. *) local (* make an anonymous, empty signature *) val sig1 = makeSignatures ""; val (Env argEnv) = makeEnv sig1; val exIdenVal = makeFormalV ("ex_iden", Int, 0); val () = #enterType argEnv ("ex_type", exTypeConstr); val () = #enterVal argEnv ("ex_iden", exIdenVal); in (* Contains 1 bound type *) val argSig1 = makeCopy ("", sig1, 0, 1); end (* Result signature. *) local (* make an anonymous, empty signature *) val sig1 = makeSignatures ""; val (Env resEnv) = makeEnv sig1; (* get the actual type from the nullary type constructor *) val exType = mkTypeConstruction ("ex_type", exTypeConstr, []); val exVal = makeFormalEx ("ex", exType, 0); val () = #enterVal resEnv ("ex", exVal); in (* 1 bound type inherited from argument sig *) val resSig1 = makeCopy ("", sig1, 0, 1); end (* The functor turns the value into an exception by returning the argument. *) val Run_exception1 = makeFunctor ( "Run_exception1", makeLocalStruct ("", argSig1), resSig1, makeGlobal (identityFunction "Run_exception1") ); in val () = #enterFunct runCallEnv ("Run_exception1", Run_exception1); end; (*****************************************************************************) (* Bootstrap entries copied from DEBUG *) (*****************************************************************************) local open DEBUG; val debuggerType = TYPETREE.mkProductType[Int, valueVal, Int, String, String, nameSpaceType] ->> Unit in val () = applyList (fn (name, v, t) => enterBootstrap(name, mkConst v, t)) [ ("compilerVersion", toMachineWord VERSION.compilerVersion, String), ("errorMessageProcTag", toMachineWord errorMessageProcTag, Tag (TYPETREE.mkProductType[String, Bool, Int] ->> Unit)), ("compilerOutputTag", toMachineWord compilerOutputTag, Tag (String->>Unit)), ("lineNumberTag", toMachineWord lineNumberTag, Tag (Unit->>Int)), ("fileNameTag", toMachineWord fileNameTag, Tag String), ("maxInlineSizeTag", toMachineWord maxInlineSizeTag, Tag Int), ("assemblyCodeTag", toMachineWord assemblyCodeTag, Tag Bool), ("parsetreeTag", toMachineWord parsetreeTag, Tag Bool), ("codetreeTag", toMachineWord codetreeTag, Tag Bool), ("pstackTraceTag", toMachineWord pstackTraceTag, Tag Bool), ("codetreeAfterOptTag", toMachineWord codetreeAfterOptTag, Tag Bool), ("traceCompilerTag", toMachineWord traceCompilerTag, Tag Bool), ("inlineFunctorsTag", toMachineWord inlineFunctorsTag, Tag Bool), ("ml90Tag", toMachineWord ml90Tag, Tag Bool), ("debugTag", toMachineWord debugTag, Tag Bool), ("profilingTag", toMachineWord DEBUG.profilingTag, Tag Int), ("timingTag", toMachineWord DEBUG.timingTag, Tag Bool), ("printDepthFunTag", toMachineWord DEBUG.printDepthFunTag, Tag (Unit->>Int)), ("errorDepthTag", toMachineWord DEBUG.errorDepthTag, Tag Int), ("lineLengthTag", toMachineWord DEBUG.lineLengthTag, Tag Int), ("printStringTag", toMachineWord DEBUG.printStringTag, Tag (String->>Unit)), ("printEnvironTag", toMachineWord VALUEOPS.printSpaceTag, Tag nameSpaceType), ("debuggerTag", toMachineWord DEBUGGER.debuggerFunTag, Tag debuggerType) ] end; (*****************************************************************************) (* Bootstrap entries for printing *) (*****************************************************************************) local open TYPETREE PRETTYPRINTER fun displayFix((name: string, f: fixStatus), stream: string->unit) = let val pstream = prettyPrint (77, stream) in ppBeginBlock pstream (0, false); displayFixStatus (f, 999 (* Actually unused. *), pstream); ppBreak pstream (1, 0); ppAddString pstream name; ppEndBlock pstream () end and displaySig(s: signatures, depth: int, space: nameSpace, withStruct: bool, stream: string->unit) = displaySignatures(s, depth, prettyPrint (77, stream), space, withStruct) and displayStruct(s: structVals, depth: int, space: nameSpace, withStruct: bool, stream: string->unit) = displayStructures(s, depth, prettyPrint (77, stream), space, withStruct) and displayFunct(f: functors, depth: int, space: nameSpace, withStruct: bool, stream: string->unit) = displayFunctors(f, depth, prettyPrint (77, stream), space, withStruct) and displayVal(v: values, depth: int, space: nameSpace, withStruct: bool, stream: string->unit) = displayValues(v, depth, prettyPrint (77, stream), space, withStruct) and displayType(t: typeConstrs, depth: int, withStruct: bool, stream: string->unit) = displayTypeConstrs(t, depth, prettyPrint (77, stream), withStruct) (* Used to print values in the debugger. Use uglyPrint here to keep it simple and on one line. *) and printVal(v: values, depth: int, space: nameSpace, stream: string->unit) = printValues(v, depth, uglyPrint stream, space) in val () = applyList (fn (name, v, t) => enterBootstrap(name, mkConst v, t)) [ ("displayFix", toMachineWord displayFix, (String ** fixityVal) ** (String ->> Unit) ->>Unit), ("displaySig", toMachineWord displaySig, mkProductType[signatureVal, Int, nameSpaceType, Bool, (String ->> Unit)] ->> Unit), ("displayStruct", toMachineWord displayStruct, mkProductType[structureVal, Int, nameSpaceType, Bool, (String ->> Unit)] ->> Unit), ("displayFunct", toMachineWord displayFunct, mkProductType[functorVal, Int, nameSpaceType, Bool, (String ->> Unit)] ->> Unit), ("displayVal", toMachineWord displayVal, mkProductType[valueVal, Int, nameSpaceType, Bool, (String ->> Unit)] ->> Unit), ("printVal", toMachineWord printVal, mkProductType[valueVal, Int, nameSpaceType, (String ->> Unit)] ->> Unit), ("displayType", toMachineWord displayType, mkProductType[typeVal, Int, Bool, (String ->> Unit)] ->> Unit) ] end; in () end (* initGlobalEnv *); end; polyml.5.2.1/mlsource/MLCompiler/Initialise.ML0000644000175000017500000000227311003076053020153 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure Initialise = INITIALISE_ ( structure TYPETREE = TypeTree structure STRUCTVALS = StructVals structure VALUEOPS = ValueOps structure CODETREE = CodeTree structure ADDRESS = Address structure DEBUG = Debug structure MAKE = Make structure MISC = Misc structure DEBUGGER = Debugger structure VERSION = CompilerVersion structure PRETTYPRINTER = PrettyPrinter ); polyml.5.2.1/mlsource/MLCompiler/IntSet.ML0000644000175000017500000000414410313043332017263 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure IntSet : (*****************************************************************************) (* IntSet export signature *) (*****************************************************************************) sig type set; val empty: set; val plus: set * set -> set; val minus: set * set -> set; val star: set * set -> set; val mk: int -> set; val upto : int * int -> set; val inside: int * set -> bool; end = (*****************************************************************************) (* IntSet structure body *) (*****************************************************************************) struct abstype set = Set of int -> bool with val empty : set = Set (fn _ => false); (* ... fun plus (Set f, Set g) = Set (fn x => f x orelse g x); ... *) (* Experiment! *) fun plus (Set f, Set g) = Set (fn x => g x orelse f x); fun star (Set f, Set g) = Set (fn x => f x andalso g x); fun minus (Set f, Set g) = Set (fn x => f x andalso not (g x)); fun mk (i : int) = Set (fn j => j = i) infix 8 upto; fun first upto last = Set (fn i => first <= i andalso i <= last); infix 5 inside eq neq; fun i inside (Set f) = f i; end; end (* IntSet *); polyml.5.2.1/mlsource/MLCompiler/LEX_.ML0000644000175000017500000005722111003076053016653 0ustar daviddavid(* Original Poly version: Title: Lexical Analyser. Author: Dave Matthews, Cambridge University Computer Laboratory Copyright Cambridge University 1985 ML translation and other changes: Copyright (c) 2000 Cambridge University Technical Services Limited Further development: Copyright (c) 2000-7 David C.J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) functor LEX_ ( (*****************************************************************************) (* PRETTYPRINTER *) (*****************************************************************************) structure PRETTYPRINTER: sig type prettyPrinter val ppAddString : prettyPrinter -> string -> unit val ppBeginBlock : prettyPrinter -> int * bool -> unit val ppEndBlock : prettyPrinter -> unit -> unit val ppBreak : prettyPrinter -> int * int -> unit val ppLineBreak : prettyPrinter -> unit -> unit val prettyPrint : int * (string -> unit) -> prettyPrinter; end; (*****************************************************************************) (* MISC exports signature *) (*****************************************************************************) structure MISC : sig exception InternalError of string; (* compiler error *) end (*****************************************************************************) (* SYMBOLS *) (*****************************************************************************) structure SYMBOLS : sig type sys; val abortParse: sys; val othersy: sys; val typeIdent: sys; val ident: sys; val integerConst: sys; val stringConst: sys; val semicolon: sys; val comma: sys; val leftParen: sys; val rightParen: sys; val leftBrack: sys; val rightBrack: sys; val leftCurly: sys; val rightCurly: sys; val threeDots: sys; val underline: sys; val realConst: sys; val wordConst: sys; val charConst: sys; val lookup: string -> sys; val eq : sys * sys -> bool; val neq : sys * sys -> bool; end structure DEBUG: sig val errorMessageProcTag: (string * bool * int -> unit) Universal.tag val lineNumberTag: (unit -> int) Universal.tag val getParameter : 'a Universal.tag -> Universal.universal list -> 'a end ) : (*****************************************************************************) (* LEX export signature *) (*****************************************************************************) sig type lexan; type sys; type prettyPrinter; val insymbol: lexan -> unit; (* insymbol sets sy and id which are exported as "read-only" *) val sy: lexan -> sys; val id: lexan -> string; val lineno: lexan -> int; val pushBackSymbol: lexan * sys -> unit; val initial: (unit -> char option) * Universal.universal list -> lexan; (* Error handling *) val errorProc: lexan * int * (prettyPrinter -> unit) -> unit; val errorMessage: lexan * int * string -> unit; val warningProc: lexan * int * (prettyPrinter -> unit) -> unit; val warningMessage: lexan * int * string -> unit; val errorOccurred: lexan -> bool; val resetLexan: lexan -> unit; val flushLexan: lexan -> unit; val nullLex: lexan; (* Used when no errors are expected - streams raise exceptions. *) (* To save passing an extra argument to many functions we include the debug/control parameters here. *) val debugParams: lexan -> Universal.universal list end (* LEX export signature *) = (*****************************************************************************) (* LEX functor body *) (*****************************************************************************) struct open MISC; open PRETTYPRINTER; open SYMBOLS; infix 8 eq neq; type lexan = { stream: unit -> char option, lineno: unit -> int, ch: char ref, sy: sys ref, id: string ref, messageOut: string * bool * int -> unit, errors: bool ref, pushedSym: sys ref, extraChars: char list ref, debugParams: Universal.universal list }; (* The lexical analyser reads characters from the stream and updates the references in the lexan structure. That's not perhaps very ML-like but the lexical analyser can be a hot-spot in the compiler unless it's made as fast as possible. *) val eofChar = Char.chr 4; (* ctrl/D *) val isNumeric = Char.isDigit and isAlphabetic = Char.isAlpha and isWhiteSpace = Char.isSpace and isHexadecimal = Char.isHexDigit (* For our purposes we include quote and underscore. *) fun isAlphaNumeric c = Char.isAlphaNum c orelse c = #"'" orelse c = #"_" val isOperator = Char.contains ":=<>+*!^/|&%~-?`@\\$#"; (* The initial state looks like we've just processed a complete ML declaration *) fun initial (stream, parameters) : lexan = let open DEBUG val errorMessageProc = getParameter errorMessageProcTag parameters val lineno = getParameter lineNumberTag parameters in { stream = stream, lineno = lineno, ch = ref #" ", (* " " - we've just "clobbered the ";" *) sy = ref semicolon, (* ";" *) id = ref "", messageOut = errorMessageProc, errors = ref false, pushedSym = ref othersy, extraChars = ref [], debugParams = parameters } end val nullLex = initial (fn () => NONE, []); (* Error messages *) fun errorOccurred ({errors, ...}: lexan) = ! errors; (* Reset lexer following bad parse *) fun resetLexan ({errors, ...} : lexan) = (errors := false); (* Flush lexer state following user interrupt *) fun flushLexan ({errors, ch, sy, pushedSym, extraChars, ...} : lexan) = (errors := false; ch := #" "; sy := semicolon; pushedSym := othersy; extraChars := []); fun lineno ({lineno,...}:lexan) = lineno(); fun ewProc ({messageOut,errors,...} : lexan) hardError line eproc = let val message = ref [] (* Build up the context in here. *) val pprint = prettyPrint(77, fn s => message := s :: !message); in (* If this is a hard error we have to set the flag to prevent further passes. *) if hardError then errors := true else (); (* Print out the message *) ppBeginBlock pprint (0, false); eproc pprint; ppEndBlock pprint (); messageOut(concat(List.rev (!message)), hardError, line) end; (* General purpose error messages typically including pretty-printed parse tree. *) fun errorProc (state, lineno, eproc) = ewProc state true (*hard*) lineno eproc; (* Simple strings. *) fun errorMessage (state, lineno, str) = ewProc state true (*hard*) lineno (fn pp => ppAddString pp str); (* Warnings are non-fatal errors. i.e. errors is not set. *) fun warningProc (state, lineno, eproc) = ewProc state false (*soft*) lineno eproc; fun warningMessage (state, lineno, str) = ewProc state false (*soft*) lineno (fn pp => ppAddString pp str); exception EndOfLine; (* "ch" contains the next character in the stream. extraChars is a hack that is needed to deal with a number that looks like it might be a real number but actually isn't. *) fun nextCh({ch, stream, extraChars = ref [], ...}) = ch := getOpt(stream(), eofChar) | nextCh({ch, extraChars = extra as ref(c::l), ...}) = (extra := l; ch := c) and skipWhiteSpace (state as {ch = ref c, ...}:lexan) : char = if isWhiteSpace c then (nextCh state; skipWhiteSpace state) else c (* If a character has been read which is its own terminator (e.g.";") then don't read the next character, just clobber the current one. (The only place this matters is when the user types x;y; at the terminal when the compiler is called first to process the x; and then it is called again (with reinitialisation) to process the y;. Replacing it with a space means that the next character will be read from the input stream since leading spaces are skipped. Many symbols (e.g. identifiers) are not self-terminating so the terminating character is remembered in ch. *) and chRead({ch, ...}:lexan) = ch := #" " (* " " *); (* Leave string construction until we have all the characters. Since Single character strings are the same as single characters it doesn't cost anything to apply "str" but it allows us to conatenate with any prefix string in one go. *) fun readChars (state as { stream, ch, ... }) (isOk: char -> bool) (s: string) : string = let fun loop (): string list = let val theChar = ! ch; in if isOk theChar then (nextCh state; str theChar :: loop ()) else [] end; in concat (s :: loop ()) end; (* Read in a number. *) fun parseNumber (state as { sy, id, ch, extraChars, ... }) = ( sy := integerConst; (* Copy digits into the buffer. *) id := readChars state isNumeric ""; (* May be the end of an integer, part of a real number, or w for word or x for hex. *) if !ch = #"w" andalso !id = "0" then (* word constant. *) ( sy := wordConst; nextCh state; if !ch = #"x" then ( nextCh state; if isHexadecimal (!ch) then id := readChars state isHexadecimal "0wx" else errorMessage (state, lineno state, "malformed word constant: " ^ !id ^ str(!ch)) ) else if isNumeric (!ch) then id := readChars state isNumeric "0w" else errorMessage (state, lineno state, "malformed word constant: " ^ !id ^ str(!ch)) ) else if !ch = #"x" andalso !id = "0" then (* Hexadecimal integer constant. *) ( nextCh state; if isHexadecimal (!ch) then id := readChars state isHexadecimal "0x" else errorMessage (state, lineno state, "malformed integer constant: " ^ !id ^ str(!ch)) ) else if !ch = #"." orelse !ch = #"E" orelse !ch = #"e" (* "e" is allowed in ML97 *) then (* possible real constant. *) ( if !ch = #"." then ( sy := realConst; (* Add the "." to the string. *) id := !id ^ "."; nextCh state; (* Must be followed by at least one digit. *) if not (isNumeric (!ch)) then errorMessage (state, lineno state, "malformed real number: " ^ !id ^ str(!ch)) else id := readChars state isNumeric (!id) ) else (); (* There's a nasty here. We may actually have 1e~; which should (probably) be treated as 1 e ~ ; That means that if after we've read the e and possible ~ we find that the next character is not a digit we return the number read so far and leave the e, ~ and whatever character we found to be read next time. *) if !ch = #"E" orelse !ch = #"e" then let val eChar = !ch in nextCh state; (* May be followed by a ~ *) (* If it's followed by a digit we have an exponent otherwise we have a number followed by a identifier. In that case we have to leave the identifier until the next time we're called. *) if !ch = #"~" then ( nextCh state; if isNumeric(!ch) then (sy := realConst; id := readChars state isNumeric (!id ^ "E~")) else (extraChars := [#"~", !ch]; ch := eChar) ) else ( if isNumeric(!ch) then (sy := realConst; id := readChars state isNumeric (!id ^ "E")) else (extraChars := [!ch]; ch := eChar) ) end else () ) else () ); fun parseString (state as { ch, id, ... }) = let (* The original version of this simply concatenated the characters onto "id". For very long strings that's expensive since each concatenation copies the existing string, resulting in quadratic performance. This version creates a list and then implodes it. DCJM 24/5/02. *) fun getString (soFar: char list) = ( case !ch of #"\"" (* double-quote. *) => (* Finished - return result. *) (chRead state; soFar) | #"\n" => (nextCh state; raise EndOfLine) | #"\\" => (* Escape *) let val _ = nextCh state; (* Skip the escape char. *) val next = !ch; (* Look at the next char. *) val _ = nextCh state; in (* Remove \f...\ sequences but otherwise leave the string as it is. Escape sequences are processed in the conversion function. In particular we can only decide whether \uxxxx is valid when we know whether we are converting to Ascii or Unicode. *) if isWhiteSpace next then ( if skipWhiteSpace state = #"\\" then () else ( errorMessage (state, lineno state, "unexpected character " ^ String.toString (str (!ch)) ^" in \\ ... \\"); while !ch <> #"\\" andalso !ch <> #"\"" andalso !ch <> eofChar do nextCh state ); nextCh state; getString soFar ) else if next = #"^" (* \^c escape sequence for Control+c *) then let val next2 = !ch; val _ = nextCh state; in getString (next2 :: #"^" :: #"\\" :: soFar) end else getString (next :: #"\\" :: soFar) end | ch => (* Anything else *) ( nextCh state; if ch = eofChar then raise EndOfLine else if Char.isPrint ch (* Ok if it's printable. *) then getString (ch :: soFar) else (* Report unprintable characters. *) ( errorMessage (state, lineno state, "unprintable character " ^ Char.toString ch ^ " found in string"); getString soFar ) ) ) in nextCh state; (* Skip the opening quote. *) id := String.implode(List.rev(getString [])) handle EndOfLine => errorMessage (state, lineno state, "no matching quote found on this line") end (* parseString *) (* parseComment deals with nested comments. Returns with !ch containing the first character AFTER the comment. *) fun parseComment (state as { stream, ch, ... }) = let (* skipComment is called after we've already seen the "(" and "*", and returns the first chararacter AFTER the comment. *) fun skipComment () : char = let val startLine : int = lineno state; (* Returns the first chararacter AFTER the comment *) fun skipCommentBody (firstCh : char) : char = if firstCh = eofChar then ( errorMessage (state, lineno state, "end of file found in comment (starts at line " ^ Int.toString startLine ^ ")"); firstCh ) else case (firstCh, getOpt(stream (), eofChar)) of (#"*", #")") => getOpt(stream (), eofChar) (* End of comment - return next ch. *) | (#"(", #"*") => skipCommentBody (skipComment ()) (* Nested comment. *) | (_, nextCh) => skipCommentBody nextCh in skipCommentBody (getOpt(stream (), eofChar)) (* Skip the initial "*" *) end; (* skipComment *) in ch := skipComment () end (* parseComment *); (* Sets "id" and "sy" if an identifier is read. Looks up a word to see if it is reserved. *) fun parseIdent (state as { ch, id, sy, ... }) charsetTest first (* any characters read so far *) = let val idVal = readChars state charsetTest first; in (* Qualified names may involve fields of different lexical form e.g. A.B.+ *) if !ch = #"." (* May be qualified *) then let val () = nextCh state; val c = !ch; in if isAlphabetic c then parseIdent state isAlphaNumeric (idVal ^ ".") else if isOperator c then parseIdent state isOperator (idVal ^ ".") else errorMessage (state, lineno state, "invalid identifer - "^ idVal ^ "." ^ str c) end else ( id := idVal; sy := (if 0 < size idVal andalso String.str(String.sub(idVal, 0)) = "'" then typeIdent else lookup idVal) ) end; (* parseIdent *) (* Main lexical analyser loop. *) fun parseToken (state as { ch, id, sy, ... }) = ( case skipWhiteSpace state (* remove leading spaces *) of #"~" => (* Either an operator or part of a number. *) ( nextCh state;(* get next character *) if isNumeric (!ch) then ( (* Read the number and sets sy to integerConst. *) parseNumber state; (* Prepend the "~" to the num *) id := "~" ^ !id ) else (* Part of an operator. *) parseIdent state isOperator "~" ) | #"#" =>(* Either an operator, which include a field selection or a character constant. N.B. It is not absolutely clear whether any separator is allowed between # and the following string constant. Assume that it isn't for the moment. *) ( nextCh state;(* get next character *) if !ch = #"\"" then (parseString state; sy := charConst) else (* Part of an operator. *) parseIdent state isOperator "#" ) | #"\"" (* double quote. *) => (parseString state; sy := stringConst) | #";" => (sy := semicolon; chRead state) | #"," => (sy := comma; chRead state) | #"(" => ( nextCh state; if !ch <> #"*" then sy := leftParen else parseComment state ) | #")" => (sy := rightParen; chRead state) | #"[" => (sy := leftBrack; chRead state) | #"]" => (sy := rightBrack; chRead state) | #"_" => (sy := underline; chRead state) | #"{" => (sy := leftCurly; chRead state) | #"}" => (sy := rightCurly; chRead state) | #"." => (* "..." *) ( nextCh state; if !ch <> #"." then errorMessage (state, lineno state, "unknown symbol ." ^ str(!ch)) else ( nextCh state; if !ch <> #"." then errorMessage (state, lineno state, "unknown symbol .." ^ str(!ch)) else (sy := threeDots; chRead state) ) ) | firstCh => (* These can't be so easily incorporated into a "case". *) if firstCh = eofChar then sy := abortParse else if isNumeric firstCh then parseNumber state else if isAlphabetic firstCh orelse firstCh = #"'" then parseIdent state isAlphaNumeric "" else if isOperator firstCh (* excludes ~ which has already been done *) then parseIdent state isOperator "" else let (* illegal character *) val printableFirstCh = Char.toString firstCh in (* Report the character. *) errorMessage (state, lineno state, "unknown character \"" ^ printableFirstCh ^ "\""); chRead state end; (* Read another token if this wasn't recognised. *) if (!sy eq othersy) then parseToken state else () ); (* parseToken *) (* Insymbol - exported interface to lexical analyser. *) fun insymbol (state as {sy,pushedSym,...}:lexan) = if ! pushedSym neq othersy then pushedSym := othersy (* pushedSym is a hack to handle the difficulty of parsing val ('a, 'b) f = ... compared with val (a, b) = ... and the similar fun declarations. It's also used to handle where type t = int and type ... compared with where type t = int and S = sig ...*) else ( if (! sy) eq abortParse (* already end-of-file? *) then ( errorMessage (state, lineno state, "unexpected end of file encountered"); raise InternalError "end of file" ) else (); sy := othersy; (* default - anything unrecognisable *) parseToken state ); (* insymbol *) fun pushBackSymbol ({pushedSym,...}:lexan, sym) = if !pushedSym neq othersy then raise InternalError "Attempt to push two parentheses" else pushedSym := sym (* exported version of sy and id. *) fun sy ({sy=ref sy, pushedSym = ref pushed, ...}:lexan) = if pushed neq othersy then pushed else sy; fun id ({id=ref id,...}:lexan) = id; val debugParams = #debugParams end (* LEX functor body *); polyml.5.2.1/mlsource/MLCompiler/Lex.ML0000644000175000017500000000170511003076053016610 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure Lex = LEX_ ( structure SYMBOLS = Symbols structure MISC = Misc structure PRETTYPRINTER = PrettyPrinter structure DEBUG = Debug ); polyml.5.2.1/mlsource/MLCompiler/MAKE_.ML0000644000175000017500000004370511003076053016742 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited Modified David C.J. Matthews 2008. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* Title: Poly Make Program. Author: Dave Matthews, Cambridge University Computer Laboratory Copyright Cambridge University 1985 *) (* This code is now only used during the bootstrap process. *) functor MAKE_ ( (*****************************************************************************) (* COMPILERBODY *) (*****************************************************************************) structure COMPILERBODY : sig type values; type typeConstrs; type fixStatus; type structVals; type signatures; type functors; type nameSpace = { lookupVal: string -> values option, lookupType: string -> typeConstrs option, lookupFix: string -> fixStatus option, lookupStruct: string -> structVals option, lookupSig: string -> signatures option, lookupFunct: string -> functors option, enterVal: string * values -> unit, enterType: string * typeConstrs -> unit, enterFix: string * fixStatus -> unit, enterStruct: string * structVals -> unit, enterSig: string * signatures -> unit, enterFunct: string * functors -> unit, allVal: unit -> (string*values) list, allType: unit -> (string*typeConstrs) list, allFix: unit -> (string*fixStatus) list, allStruct: unit -> (string*structVals) list, allSig: unit -> (string*signatures) list, allFunct: unit -> (string*functors) list }; (* The completed compiler. *) val compiler : nameSpace * (unit->char option) * Universal.universal list -> unit -> { fixes: (string * fixStatus) list, values: (string * values) list, structures: (string * structVals) list, signatures: (string * signatures) list, functors: (string * functors) list, types: (string * typeConstrs) list }; end; (*****************************************************************************) (* HASHTABLE *) (*****************************************************************************) structure HASHTABLE: sig type 'a hash type 'a iter val hashMake: int -> '_a hash val hashSet: '_a hash * string * '_a -> unit val hashSub: 'a hash * string -> 'a option (* An iterator over the non-empty entries in the table. *) val hashOver: 'a hash -> (string * 'a) iter end; (*****************************************************************************) (* UNIVERSALTABLE *) (*****************************************************************************) structure UNIVERSALTABLE : sig type 'a tag = 'a Universal.tag; type univTable; type 'a iter; val makeUnivTable: unit -> univTable val univEnter: univTable * 'a tag * string * 'a -> unit; val univLookup: univTable * 'a tag * string -> 'a option; val univDelete: univTable * 'a tag * string -> unit; val univOverSpecific: univTable * 'a tag -> (string * 'a) iter; end; (*****************************************************************************) (* STRUCTVALS *) (*****************************************************************************) structure STRUCTVALS : sig type 'a tag = 'a Universal.tag; type types; type values; type typeConstrs; type fixStatus; type structVals; type signatures; type functors; datatype env = Env of { lookupVal: string -> values option, lookupType: string -> typeConstrs option, lookupFix: string -> fixStatus option, lookupStruct: string -> structVals option, lookupSig: string -> signatures option, lookupFunct: string -> functors option, enterVal: string * values -> unit, enterType: string * typeConstrs -> unit, enterFix: string * fixStatus -> unit, enterStruct: string * structVals -> unit, enterSig: string * signatures -> unit, enterFunct: string * functors -> unit }; val valueVar: values tag; val typeConstrVar: typeConstrs tag; val fixVar: fixStatus tag; val structVar: structVals tag; val signatureVar: signatures tag; val functorVar: functors tag; end; structure MISC : sig type 'a iter exception InternalError of string; (* compiler bugs *) val revfoldIterator : ('a -> 'b -> 'b) -> 'b -> 'a iter -> 'b val mapIterator : ('a -> 'b) -> 'a iter -> 'b list val quickSort : ('a -> 'a -> bool) -> 'a list -> 'a list val iterList : 'a iter -> 'a list end; structure DEBUG: sig val errorMessageProcTag: (string * bool * int -> unit) Universal.tag val compilerOutputTag: (string->unit) Universal.tag val lineNumberTag: (unit->int) Universal.tag val maxInlineSizeTag: int Universal.tag end (*****************************************************************************) (* MAKE sharing constraints *) (*****************************************************************************) sharing type MISC.iter = HASHTABLE.iter = UNIVERSALTABLE.iter sharing type STRUCTVALS.values = COMPILERBODY.values sharing type STRUCTVALS.structVals = COMPILERBODY.structVals sharing type STRUCTVALS.typeConstrs = COMPILERBODY.typeConstrs sharing type STRUCTVALS.fixStatus = COMPILERBODY.fixStatus sharing type STRUCTVALS.signatures = COMPILERBODY.signatures sharing type STRUCTVALS.functors = COMPILERBODY.functors ) : (*****************************************************************************) (* MAKE export signature *) (*****************************************************************************) sig type env type gEnv type values; type typeConstrs; type fixStatus; type structVals; type signatures; type functors; type nameSpace = { lookupVal: string -> values option, lookupType: string -> typeConstrs option, lookupFix: string -> fixStatus option, lookupStruct: string -> structVals option, lookupSig: string -> signatures option, lookupFunct: string -> functors option, enterVal: string * values -> unit, enterType: string * typeConstrs -> unit, enterFix: string * fixStatus -> unit, enterStruct: string * structVals -> unit, enterSig: string * signatures -> unit, enterFunct: string * functors -> unit, allVal: unit -> (string*values) list, allType: unit -> (string*typeConstrs) list, allFix: unit -> (string*fixStatus) list, allStruct: unit -> (string*structVals) list, allSig: unit -> (string*signatures) list, allFunct: unit -> (string*functors) list }; val compiler : nameSpace * (unit->char option) * Universal.universal list -> unit -> { fixes: (string * fixStatus) list, values: (string * values) list, structures: (string * structVals) list, signatures: (string * signatures) list, functors: (string * functors) list, types: (string * typeConstrs) list }; val makeGEnv : unit -> gEnv val gEnvAsEnv : gEnv -> env val gEnvAsNameSpace: gEnv -> nameSpace val useIntoEnv : gEnv -> string -> unit val shellProc : gEnv -> unit -> unit (* The command processor *) end = let in (*****************************************************************************) (* MAKE functor body *) (*****************************************************************************) struct open MISC; type univTable = UNIVERSALTABLE.univTable; type values = STRUCTVALS.values type typeConstrs = STRUCTVALS.typeConstrs type fixStatus = STRUCTVALS.fixStatus type structVals = STRUCTVALS.structVals type signatures = STRUCTVALS.signatures type functors = STRUCTVALS.functors type env = STRUCTVALS.env open COMPILERBODY val eofChar = Char.chr 4; (* ctrl/D *) local open UNIVERSALTABLE open Thread.Thread open Thread.Mutex in (* Create an environment with a mutex to protect concurrent access. *) datatype gEnv = DbEnv of mutex * univTable (* Lock the mutex during any lookup or entry. This is primarily to avoid the underlying hash table from being rehashed by different threads at the same time. This code should be in a library. *) fun protect mutx f = let (* Turn off interrupts while we have the lock. *) val oldAttrs = getAttributes() val () = setAttributes[InterruptState InterruptDefer] val () = lock mutx val result = f() handle exn => (unlock mutx; setAttributes oldAttrs; raise exn) in unlock mutx; setAttributes oldAttrs; result end (* Create an environment *) fun makeGEnv () : gEnv = DbEnv (mutex(), makeUnivTable()); (* enter a value into an environment *) fun dbEnvEnter (DbEnv(mutx, db)) (t : 'a tag) (s : string, v : 'a) : unit = protect mutx (fn () => univEnter (db, t, s, v)) (* find a value in an environment *) fun dbEnvLookup (DbEnv(mutx, db)) (t : 'a tag) (s : string) : 'a option = protect mutx(fn () => univLookup (db, t, s)) (* delete an entry, but only from the top-level table *) fun dbEnvForget (DbEnv(mutx, db)) (s : string, t : 'a tag) : unit = protect mutx (fn () => univDelete (db, t, s)) fun dbEnvAll (DbEnv(mutx, db)) (t : 'a tag) () : (string * 'a) list = protect mutx (fn () => iterList (univOverSpecific (db, t))) fun gEnvAsEnv gEnv = STRUCTVALS.Env { lookupFix = dbEnvLookup gEnv STRUCTVALS.fixVar, lookupVal = dbEnvLookup gEnv STRUCTVALS.valueVar, lookupType = dbEnvLookup gEnv STRUCTVALS.typeConstrVar, lookupSig = dbEnvLookup gEnv STRUCTVALS.signatureVar, lookupStruct = dbEnvLookup gEnv STRUCTVALS.structVar, lookupFunct = dbEnvLookup gEnv STRUCTVALS.functorVar, enterFix = dbEnvEnter gEnv STRUCTVALS.fixVar, enterVal = dbEnvEnter gEnv STRUCTVALS.valueVar, enterType = dbEnvEnter gEnv STRUCTVALS.typeConstrVar, enterSig = dbEnvEnter gEnv STRUCTVALS.signatureVar, enterStruct = dbEnvEnter gEnv STRUCTVALS.structVar, enterFunct = dbEnvEnter gEnv STRUCTVALS.functorVar }; fun gEnvAsNameSpace gEnv: nameSpace = { lookupFix = dbEnvLookup gEnv STRUCTVALS.fixVar, lookupVal = dbEnvLookup gEnv STRUCTVALS.valueVar, lookupType = dbEnvLookup gEnv STRUCTVALS.typeConstrVar, lookupSig = dbEnvLookup gEnv STRUCTVALS.signatureVar, lookupStruct = dbEnvLookup gEnv STRUCTVALS.structVar, lookupFunct = dbEnvLookup gEnv STRUCTVALS.functorVar, enterFix = dbEnvEnter gEnv STRUCTVALS.fixVar, enterVal = dbEnvEnter gEnv STRUCTVALS.valueVar, enterType = dbEnvEnter gEnv STRUCTVALS.typeConstrVar, enterSig = dbEnvEnter gEnv STRUCTVALS.signatureVar, enterStruct = dbEnvEnter gEnv STRUCTVALS.structVar, enterFunct = dbEnvEnter gEnv STRUCTVALS.functorVar, allFix = dbEnvAll gEnv STRUCTVALS.fixVar, allVal = dbEnvAll gEnv STRUCTVALS.valueVar, allType = dbEnvAll gEnv STRUCTVALS.typeConstrVar, allSig = dbEnvAll gEnv STRUCTVALS.signatureVar, allStruct = dbEnvAll gEnv STRUCTVALS.structVar, allFunct = dbEnvAll gEnv STRUCTVALS.functorVar }; end; (*****************************************************************************) (* useIntoEnv (runcompiler with ML compiler bound in) *) (*****************************************************************************) fun useIntoEnv (globalEnv : gEnv) : string -> unit = let val useEnv : nameSpace = { lookupFix = dbEnvLookup globalEnv STRUCTVALS.fixVar, lookupVal = dbEnvLookup globalEnv STRUCTVALS.valueVar, lookupType = dbEnvLookup globalEnv STRUCTVALS.typeConstrVar, lookupSig = dbEnvLookup globalEnv STRUCTVALS.signatureVar, lookupStruct = dbEnvLookup globalEnv STRUCTVALS.structVar, lookupFunct = dbEnvLookup globalEnv STRUCTVALS.functorVar, enterFix = dbEnvEnter globalEnv STRUCTVALS.fixVar, enterVal = dbEnvEnter globalEnv STRUCTVALS.valueVar, enterType = dbEnvEnter globalEnv STRUCTVALS.typeConstrVar, enterStruct = dbEnvEnter globalEnv STRUCTVALS.structVar, enterSig = dbEnvEnter globalEnv STRUCTVALS.signatureVar, enterFunct = dbEnvEnter globalEnv STRUCTVALS.functorVar, allFix = dbEnvAll globalEnv STRUCTVALS.fixVar, allVal = dbEnvAll globalEnv STRUCTVALS.valueVar, allType = dbEnvAll globalEnv STRUCTVALS.typeConstrVar, allSig = dbEnvAll globalEnv STRUCTVALS.signatureVar, allStruct = dbEnvAll globalEnv STRUCTVALS.structVar, allFunct = dbEnvAll globalEnv STRUCTVALS.functorVar }; (*****************************************************************************) (* use *) (*****************************************************************************) fun use (fileName : string) = let val inStream = if fileName = "" then TextIO.stdIn else TextIO.openIn fileName; val lineNo = ref 1; val eof = ref false; fun getChar () : char option = case TextIO.input1 inStream of eoln as SOME #"\n" => ( lineNo := !lineNo + 1; eoln ) | NONE => (eof := true; NONE) | c => c fun errorProc (message, hard, line) = TextIO.print(concat [if hard then "Error-" else "Warning-", " in '", fileName, "', line ", Int.toString line, ".\n", message]) in ( while not (! eof) do let open DEBUG Universal (* Compile the code *) val code = COMPILERBODY.compiler (useEnv, getChar, [ tagInject compilerOutputTag print, tagInject lineNumberTag (fn () => !lineNo), tagInject errorMessageProcTag errorProc, (* Set the debug level to 50 while compiling the basis. This makes sure that String.foldr can be expanded inline which reduces the garbage in the hashValue function. *) tagInject maxInlineSizeTag 50 (* Need printer environment so that when we compile General.exnMessage it all works. *) ] ) (* execute the code and get the resulting declarations. *) val { fixes, values, structures, signatures, functors, types } = code () in (* Just enter the values in the environment without printing. *) List.app (#enterFix useEnv) fixes; List.app (#enterVal useEnv) values; List.app (#enterStruct useEnv) structures; List.app (#enterSig useEnv) signatures; List.app (#enterFunct useEnv) functors; List.app (#enterType useEnv) types end ) handle Fail s => (* E.g. syntax error. *) ( TextIO.closeIn inStream; raise Fail s ) | exn => (* close inStream if an error occurs *) ( print ("Exception- " ^ General.exnName exn ^ " raised\n"); TextIO.closeIn inStream; raise exn ); TextIO.closeIn inStream end (* use *) in use end; (* scope of useIntoEnv *) fun shellProc (globalEnv : gEnv) () : unit = useIntoEnv (globalEnv : gEnv) "" end (* MAKE *) end; (* structure-level let *) polyml.5.2.1/mlsource/MLCompiler/Make.ML0000644000175000017500000000205611003076053016735 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure Make = MAKE_ ( structure STRUCTVALS = StructVals; structure HASHTABLE = HashTable; structure LEX = Lex; structure COMPILERBODY = CompilerBody; structure MISC = Misc; structure UNIVERSALTABLE = UniversalTable structure DEBUG = Debug ); polyml.5.2.1/mlsource/MLCompiler/PARSE_DEC.ML0000644000175000017500000024242011003076053017406 0ustar daviddavid(* Copyright (c) 2000-7 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* Title: Parse Expressions and Declarations. Author: Dave Matthews, Cambridge University Computer Laboratory Copyright Cambridge University 1985 *) functor PARSE_DEC ( (*****************************************************************************) (* SYMBOLS *) (*****************************************************************************) structure SYMBOLS : sig type sys val abortParse: sys val ident: sys val abstypeSy: sys val andSy: sys val andalsoSy: sys val asSy: sys val caseSy: sys val datatypeSy: sys val doSy: sys val elseSy: sys val endSy: sys val exceptionSy: sys val fnSy: sys val funSy: sys val handleSy: sys val ifSy: sys val inSy: sys val infixSy: sys val infixrSy: sys val letSy: sys val localSy: sys val nonfixSy: sys val ofSy: sys val opSy: sys val openSy: sys val orelseSy: sys val raiseSy: sys val recSy: sys val thenSy: sys val typeSy: sys val valSy: sys val withSy: sys val whileSy: sys val leftParen: sys val rightParen: sys val leftBrack: sys val rightBrack: sys val comma: sys val colon: sys val semicolon: sys val thickArrow: sys val verticalBar: sys val equalsSign: sys val underline: sys val typeIdent: sys val realConst: sys val stringConst: sys val integerConst: sys val charConst: sys val wordConst: sys val asterisk: sys val arrow: sys val leftCurly: sys val rightCurly: sys val threeDots: sys val colonGt: sys val hashSign: sys val structureSy: sys val signatureSy: sys val structSy: sys val sigSy: sys val sharingSy: sys val functorSy: sys val withtypeSy: sys val eqtypeSy: sys val includeSy: sys val whereSy: sys; val eq: sys * sys -> bool val neq: sys * sys -> bool end; (*****************************************************************************) (* SYMSET *) (*****************************************************************************) structure SYMSET : sig type symset type sys val inside: sys * symset -> bool val ++ :symset * symset -> symset val ident: symset val andSy: symset val andalsoSy: symset val asSy: symset val doSy: symset val elseSy: symset val endSy: symset val handleSy: symset val inSy: symset val letSy: symset val localSy: symset val ofSy: symset val opSy: symset val orelseSy: symset val thenSy: symset val withSy: symset val leftParen: symset val rightParen: symset val rightBrack: symset val comma: symset val colon: symset val colonGt: symset val semicolon: symset val thickArrow: symset val verticalBar: symset val equalsSign: symset val typeIdent: symset val rightCurly: symset val structureSy: symset val signatureSy: symset val structSy: symset val sigSy: symset val sharingSy: symset val functorSy: symset val withtypeSy: symset val whereSy: symset val empty: symset val variableSys: symset val startAtomicSys: symset val startPatternSys: symset val startMatchSys: symset val startExpressionSys: symset val startDecSys: symset val declarableVarSys: symset val startTypeSys: symset val startSigSys: symset val startTopSys: symset end; (*****************************************************************************) (* LEX *) (*****************************************************************************) structure LEX : sig type lexan type sys val insymbol: lexan -> unit (* insymbol sets sy and id which are exported as "read-only" *) val sy: lexan -> sys val id: lexan -> string val lineno: lexan -> int (* pushBackSymbol is a hack. It pushes a symbol back into the lexical analysis stream. *) val pushBackSymbol: lexan * sys -> unit; (* Error handling *) val errorMessage: lexan * int * string -> unit val warningMessage: lexan * int * string -> unit val debugParams: lexan -> Universal.universal list end; (*****************************************************************************) (* SKIPS *) (*****************************************************************************) structure SKIPS : sig type sys type lexan type symset val testfor: sys * symset * lexan -> bool val getsym: sys * lexan -> unit val badsyms: sys * lexan -> unit val notfound: string * lexan -> unit val skipon: symset * symset * string * lexan -> unit val getid: symset * symset * lexan -> string val getLabel: symset * lexan -> string val getList: sys * symset * lexan * (unit -> 'a) -> 'a list end; (*****************************************************************************) (* STRUCTVALS *) (*****************************************************************************) structure STRUCTVALS : sig type types type values; type typeConstrs; type structVals; val badType: types val emptyType: types val generalisable: int (* Infix status *) datatype fixStatus = Infix of int | InfixR of int | Nonfix; val undefinedValue: values; val undefinedStruct: structVals; end; (*****************************************************************************) (* TYPETREE *) (*****************************************************************************) structure TYPETREE : sig type types val unitType: types val mkTypeVar: int * bool * bool * bool -> types val mkLabelled: {name: string, typeof: types } list * bool -> types; val mkLabelEntry: string * types -> {name: string, typeof: types }; val mkFunctionType: types * types -> types; (* added 6/12/95 SPS *) val badType: types; end; (*****************************************************************************) (* PARSETREE *) (*****************************************************************************) structure PARSETREE : sig type types type fixStatus (********* parsetree definition copied here to reduce garbage ***************) type typeConstrs; type values; type structVals; (* An identifier is just a name. In the second pass it is associated with a particular declaration and the type is assigned into the type field. The type of this identifier is needed to deal with overloaded operators. If we have an occurence of ``='', say, the type of the value will be 'a * 'a -> bool but the type of a particular occurence, i.e. the type of the identifier must be int * int -> bool, say, after all the unification has been done. *) type parsetree and valbind and fvalbind and fvalclause and typebind and datatypebind and exbind and structureIdentForm; val isIdent : parsetree -> bool; val mkIdent : string -> parsetree; val mkString : string -> parsetree; val mkInt : string -> parsetree; val mkReal : string -> parsetree; val mkChar : string -> parsetree; val mkWord : string -> parsetree; val mkApplic : parsetree * parsetree -> parsetree; val mkCond : parsetree * parsetree * parsetree -> parsetree; val mkTupleTree : parsetree list -> parsetree; val mkValDeclaration : valbind list * { lookup: string -> types option, apply: (string * types -> unit) -> unit } * { lookup: string -> types option, apply: (string * types -> unit) -> unit } -> parsetree; val mkFunDeclaration : fvalbind list * { lookup: string -> types option, apply: (string * types -> unit) -> unit } * { lookup: string -> types option, apply: (string * types -> unit) -> unit } -> parsetree; val mkOpenTree : structureIdentForm list -> parsetree; val mkStructureIdent : string -> structureIdentForm; val mkValBinding : parsetree * parsetree * int -> valbind; val recValbind: valbind; val mkClausal : fvalclause list -> fvalbind; val mkClause : parsetree * parsetree * int -> fvalclause; val mkList : parsetree list -> parsetree; val mkConstraint : parsetree * types -> parsetree; val mkLayered : parsetree * parsetree -> parsetree; val mkFn : parsetree list -> parsetree; val mkMatchTree : parsetree * parsetree * int -> parsetree; val mkLocalDeclaration : (parsetree * int) list * (parsetree * int) list * bool -> parsetree; val mkTypeDeclaration : typebind list -> parsetree; val mkDatatypeDeclaration : datatypebind list * typebind list -> parsetree; val mkDatatypeReplication : string * string -> parsetree; val mkAbstypeDeclaration : datatypebind list * typebind list * (parsetree * int) list -> parsetree; val mkTypeBinding : string * types list * types * bool -> typebind; val mkDatatypeBinding : string * types list * (string*types) list -> datatypebind; val mkExBinding : string * parsetree * types -> exbind; val mkLabelledTree : (string * parsetree) list * bool -> parsetree; val mkSelector : string -> parsetree; val mkRaise : parsetree -> parsetree; val mkHandleTree : parsetree * parsetree list -> parsetree; val mkWhile : parsetree * parsetree -> parsetree; val mkCase : parsetree * parsetree list -> parsetree; val mkAndalso : parsetree * parsetree -> parsetree; val mkOrelse : parsetree * parsetree -> parsetree; val mkDirective : string list * fixStatus -> parsetree; val mkExpseq : (parsetree * int) list -> parsetree; val mkExDeclaration : exbind list -> parsetree; val unit : parsetree; val wildCard : parsetree; val emptyTree : parsetree; end; (*****************************************************************************) (* STRUCTURES *) (*****************************************************************************) structure STRUCTURES : sig (* Structures form the global name spaces. *) type structs type types type parsetree type sigBind and functorBind and structBind val emptyStruct: structs (* added SPF 6/2/94 *) val mkStructureDec: structBind list -> structs val mkStruct: structs list -> structs val mkSignatureDec: sigBind list -> structs val mkSig: structs list -> structs val mkFunctorDec: functorBind list -> structs val mkInclude: structs list -> structs val mkLocaldec: structs list * structs list * bool * int -> structs val mkTopLevel: parsetree * int -> structs val mkStructureBinding: string * structs * bool * structs * int -> structBind val mkStructIdent: string -> structs val mkSigIdent: string -> structs val mkSignatureBinding: string * structs * int -> sigBind val mkValSig: string * types * int -> structs val mkExSig: string * types * int -> structs val mkFunctorAppl: string * structs -> structs val mkFormalArg: string * structs -> structs val mkFunctorBinding: string * structs * bool * structs * structs * int -> functorBind val mkSharing: bool * string list * int -> structs val mkWhereType: structs * types list * string * types * int -> structs val mkSigConstraint: structs * structs * bool -> structs end; (* STRUCTURES *) (*****************************************************************************) (* PARSETYPE *) (*****************************************************************************) structure PARSETYPE : sig type symset type lexan type types val parseType: symset * lexan * {lookupTvar:string -> types} -> types end; (*****************************************************************************) (* UTILITIES *) (*****************************************************************************) structure UTILITIES : sig type lexan val searchList: unit -> { apply: (string * 'a -> unit) -> unit, enter: string * 'a -> unit, lookup: string -> 'a option } val checkForDots: string * lexan * int -> unit end; (*****************************************************************************) (* MISC *) (*****************************************************************************) structure MISC : sig val lookupDefault : ('a -> 'b option) -> ('a -> 'b option) -> 'a -> 'b option end; (*****************************************************************************) (* DEBUG *) (*****************************************************************************) structure DEBUG : sig val ml90Tag: bool Universal.tag val getParameter : 'a Universal.tag -> Universal.universal list -> 'a end; (*****************************************************************************) (* PARSEDEC sharing constraints *) (*****************************************************************************) sharing type SYMBOLS.sys = SYMSET.sys = SKIPS.sys = LEX.sys sharing type SYMSET.symset = SKIPS.symset = PARSETYPE.symset sharing type LEX.lexan = SKIPS.lexan = PARSETYPE.lexan = UTILITIES.lexan sharing type STRUCTVALS.types = TYPETREE.types = PARSETREE.types = PARSETYPE.types = STRUCTURES.types sharing type STRUCTVALS.fixStatus = PARSETREE.fixStatus sharing type PARSETREE.parsetree = STRUCTURES.parsetree sharing type STRUCTVALS.values = PARSETREE.values sharing type STRUCTVALS.structVals = PARSETREE.structVals sharing type STRUCTVALS.typeConstrs = PARSETREE.typeConstrs ) : (*****************************************************************************) (* PARSEDEC export signature *) (*****************************************************************************) sig type lexan; type symset; type fixStatus; type structs; val parseDec: symset * lexan * { enterFix: string * fixStatus -> unit, lookupFix: string -> fixStatus option } -> structs list; end = (*****************************************************************************) (* PARSEDEC functor body *) (*****************************************************************************) struct open MISC; (* Cannot open SYMBOLS due to name clashes with SYMSET *) val eq = SYMBOLS.eq; infix 5 eq; val neq = SYMBOLS.neq; infix 5 neq; open SYMSET; infix 9 ++; infix 4 inside; open LEX; open SKIPS; open STRUCTVALS; open TYPETREE; open PARSETREE; open STRUCTURES; open PARSETYPE; open UTILITIES; open DEBUG; (* constant sets defined here to reduce run-time garbage SPF 24/9/94 *) val structureLocalSy = structureSy ++ localSy; val structureLocalStartDecSy = structureSy ++ localSy ++ startDecSys; val commaRightCurlySy = comma ++ rightCurly; val declarableVarOpSy = declarableVarSys ++ opSy; val declarableVarLetSy = declarableVarSys ++ letSy; val startTypeDeclarableVarOpSy = startTypeSys ++ declarableVarOpSy; val startDecStructureSy = startDecSys ++ structureSy; val ofVerticalBarSy = ofSy ++ verticalBar; val semicolonStartDecSy = semicolon ++ startDecSys; val semicolonStartDecStructureSy = semicolonStartDecSy ++ structureSy; val commaRightBrackSy = comma ++ rightBrack; val rightParenCommaSy = rightParen ++ comma; val rightParenSemicolonSy = rightParen ++ semicolon; val rightParenSemicolonCommaSy = rightParenSemicolonSy ++ comma; val rightParenEqualsSignAndSy = rightParen ++ equalsSign ++ andSy; val colonAsSy = colon ++ asSy; val colonEqualsSignSy = colon ++ colonGt ++ equalsSign; val thenStartExpressionSy = thenSy ++ startExpressionSys; val elseStartExpressionSy = elseSy ++ startExpressionSys; val ofStartMatchSy = ofSy ++ startMatchSys; val semicolonEndSy = semicolon ++ endSy val andalsoColonSy = andalsoSy ++ colon; val withTypeWithSy = withtypeSy ++ withSy; val ofEqualsSignSy = ofSy ++ equalsSign; val inEndSy = inSy ++ endSy; val startSigEndSy = startSigSys ++ endSy; val startSigEndAndSy = startSigEndSy ++ andSy; val endAndSy = endSy ++ andSy; val semicolonStartSigSys = startSigSys ++ semicolon; val topdecStartSy = functorSy ++ signatureSy ++ structureLocalStartDecSy; (* added SPF 6/2/94 *) fun mkLocalFixEnv {enterFix,lookupFix,lookupTvar} = let val newFixEnv = searchList (); in { enterFix = #enter newFixEnv, lookupFix = lookupDefault (#lookup newFixEnv) lookupFix, lookupTvar = lookupTvar } end; (* added SPF 6/2/94 *) fun mkLocalBodyFixEnv {enterFix,lookupFix,lookupTvar} outerEnterFix = { enterFix = fn (p as (n, v)) => (enterFix p; outerEnterFix p), lookupFix = lookupFix, lookupTvar = lookupTvar } (* added SPF 17/4/96 *) fun getLongId (kind, fsys, lex) = getid (kind, fsys, lex); (* added SPF 17/4/96 *) fun getShortId (kind, fsys, lex) = let val iden = getid (kind, fsys, lex); val U : unit = checkForDots (iden, lex, lineno lex); in iden end; (* Attributes of type variables. *) fun isEqtype name = size name > 1 andalso String.str(String.sub(name, 1)) = "'"; (* All explicit type variables are weak in ML97. This provides compatibility with ML90. *) fun isWeak (name, lex) = not (getParameter ml90Tag (debugParams lex)) orelse (size name > 1 andalso String.str(String.sub(name, 1)) = "_") orelse (isEqtype name andalso size name > 2 andalso String.str(String.sub(name, 2)) = "_"); (* Global declarations *) fun parseDec (fsys, lex, {enterFix,lookupFix}) : structs list = let (* These procedures to parse type declarations are used in both signature and expression parsing. *) fun getTypeVars (isDatatype, {apply,enter,lookup}) = let (* Optional type identifier or sequence of type identifiers. Used in type and datatype declarations and also in val and fun declarations. *) (* The type identifiers must be remembered since they will occur subsequently in the components. This is the only case where type variables are actually bound. *) fun getTypeVar () : types = (* Read a type variable and return it. *) if (sy lex) neq SYMBOLS.typeIdent then (badsyms (SYMBOLS.typeIdent, lex); badType) (* SPF 6/12/95 *) else let val iden = id lex; (* Each type variable must be distinct. *) val U : unit = apply (fn (nm,_) => if nm = iden (* Same name ? *) then errorMessage (lex, lineno lex, nm ^ " has already been used.") else () ); (* Construct a type variable and enter it. Equality and weakness are only set if this is a datatype (or abstype). The type variable should be non-unifiable to get value-constructor signature checking right.*) (* DCJM 11/2/00. isDatatype is now true for tyvarseqs in fun and val. I don't think it matters what it is set to in datatypes. *) val isEqtype = isDatatype andalso isEqtype iden; val isWeak = isDatatype andalso isWeak (iden, lex); val tyVar = mkTypeVar (generalisable, isEqtype, true, isWeak); in enter (iden, tyVar); insymbol lex; tyVar end; (* getTypeVar *) in (* May be one type variable or a bracketed sequence. *) if (sy lex) eq SYMBOLS.typeIdent then [getTypeVar()] (* One type var. *) else if (sy lex) eq SYMBOLS.leftParen then (* Sequence. *) ( insymbol lex; (* There is an awkward parsing problem here if we have either val (a, b) = ... or fun (a X b) = ... We only know that we haven't got a tyvarseq once we find a symbol that isn't a tyvar. The easiest way round this is to push the parenthesis back into the lex stream and return an empty tyvarseq. *) if (sy lex) neq SYMBOLS.typeIdent then (pushBackSymbol(lex, SYMBOLS.leftParen); [] ) else let val t = getList (SYMBOLS.comma, typeIdent, lex, getTypeVar); in getsym (SYMBOLS.rightParen, lex); t end ) else [] (* None at all. *) end; (* getTypeVars *) fun getShortNonInfix opThere sys fsys lex {enterFix,lookupFix,lookupTvar} = let (* op followed by a (short) constructor *) val id = getShortId (sys, fsys, lex); val isInfix = case lookupFix id of SOME (Infix _) => true | SOME (InfixR _) => true | _ => false (* It is infix if we find it and it has been declared as infix. If it hasn't been declared then it isn't infix.*) val U : unit = if isInfix andalso not opThere then warningMessage (lex, lineno lex, "(" ^ id ^") has infix status but was not preceded by op.") else (); in id end; fun getLongNonInfix opThere sys fsys lex {enterFix,lookupFix,lookupTvar} = let (* op followed by a (long) variable *) val id = getLongId (sys, fsys, lex); val isInfix = case lookupFix id of SOME (Infix _) => true | SOME (InfixR _) => true | _ => false in if isInfix andalso not opThere then warningMessage (lex, lineno lex, "(" ^ id ^") has infix status but was not preceded by op.") else (); id end; fun andBindings fsys p = (* Handles a sequence of non-recursive declarations separated by "and". *) p (fsys ++ andSy) :: (if testfor (SYMBOLS.andSy, empty, lex) then andBindings fsys p else []); fun genTypeVarEnv {lookup,enter,apply} = { (* All type variables used on the right-hand side of the type binding must have been declared before the new type constructor *) lookupTvar = fn name => (case lookup name of SOME t => t | NONE => ( errorMessage (lex, lineno lex, name ^ " has not been declared in type declaration"); badType ) ) } (* genTypeVarEnv *); fun typeBinding isSpec isEqtype {enterFix,lookupFix,lookupTvar} fsys = let val newTVenv = searchList (); val typeVars = getTypeVars (false, newTVenv); (* The name of the type *) val typeName = getShortId (ident, fsys ++ equalsSign, lex); (* val typeVarEnv = { lookupTvar = lookupDefault (#lookup newTVenv) lookupTvar } *) val typeVarEnv = genTypeVarEnv newTVenv; val matchedType = (* If this is part of a signature we do not need to have an "= ty" after it. If it is an eqtype we must not have one. *) if (isSpec andalso (sy lex) neq SYMBOLS.equalsSign) orelse isEqtype then emptyType else ( getsym (SYMBOLS.equalsSign, lex); (* Followed by a type or a sequence of constructors *) skipon (startTypeSys, fsys, "type", lex); parseType (fsys, lex, typeVarEnv) ) in mkTypeBinding (typeName, typeVars, matchedType, isEqtype) end (* typeBinding *); fun datatypeDecOrRepl fsys env isSpecification = (* "datatype" has been read. This may be followed by tycon = datatype ... if it is a datatype replication or by tyvarseq tycon = vid ... if it is a datatype binding. We can only distinguish the two when we reach either the second datatype or an identifier. This is used both for declarations and for specifications. *) let val U = insymbol lex; val newTVenv = searchList (); (* The type variables will be empty if this is a replication. *) val typeVars = getTypeVars (true, newTVenv); (* The name of the type *) val typeName = getShortId (ident, fsys ++ equalsSign, lex); val U : unit = getsym (SYMBOLS.equalsSign, lex); in if (sy lex) eq SYMBOLS.datatypeSy then (* Replication *) let (* Check that the type var sequence was empty. *) val U: unit = case typeVars of [] => () | _ => errorMessage (lex, lineno lex, "Datatype replication must not contain type variables"); val U = insymbol lex; val originalTypeName = getLongId (ident, fsys, lex); in mkDatatypeReplication(typeName, originalTypeName) end else (* Binding *) let (* Process the rest of this binding. *) val db = datatypeBind (fsys ++ withtypeSy ++ andSy) env typeName typeVars newTVenv isSpecification; (* Process any others *) val dbs = if testfor (SYMBOLS.andSy, empty, lex) then andBindings (fsys ++ withtypeSy) (fn fsys => datatypeBinding fsys env isSpecification) else [] val withtypes = if testfor (SYMBOLS.withtypeSy, empty, lex) then andBindings fsys (typeBinding false false env) else []; in mkDatatypeDeclaration (db :: dbs, withtypes) end end and datatypeBind fsys env typeName typeVars newTVenv isSpecification = (* Process the rest of a binding. *) let (* Followed by a type or a sequence of constructors *) val U = skipon (startTypeDeclarableVarOpSy, fsys, "type", lex); (* In ML 90 all type variables on the right hand side of a datbind had to appear in the tyvarseq on the left. That restriction appears to have been removed for declarations, but not specifications, in ML97. This appears, though, to have been a mistake so I'm reinstating the old behaviour. *) (* val typeVarEnv = { lookupTvar = lookupDefault (#lookup newTVenv) (#lookupTvar env) } *) val typeVarEnv = genTypeVarEnv newTVenv; fun constrs fsys = let val opThere = (sy lex) eq SYMBOLS.opSy; val U = if opThere then insymbol lex else (); (* Identifier - name of constructor *) val constrName = getShortNonInfix (opThere orelse isSpecification) declarableVarSys (fsys ++ ofVerticalBarSy) lex env; (* If there is an "of" after this then the constructor is a function from the type following the "of" to the type being declared. Otherwise it is a constant of the type being declared. *) val component = if (sy lex) eq SYMBOLS.ofSy then (insymbol lex;(* Followed by a type. *) (constrName, parseType (fsys ++ verticalBar, lex, typeVarEnv))) else (constrName, emptyType); in component :: (if testfor (SYMBOLS.verticalBar, empty, lex) then constrs fsys else []) end in mkDatatypeBinding (typeName, typeVars, constrs fsys) end and datatypeBinding fsys env isSpecification = (* Datatype and abstype declarations and datatype specifications. *) let val newTVenv = searchList (); val typeVars = getTypeVars (true, newTVenv); (* The name of the type *) val typeName = getShortId (ident, fsys ++ equalsSign, lex); val U : unit = getsym (SYMBOLS.equalsSign, lex); in datatypeBind fsys env typeName typeVars newTVenv isSpecification end; fun makeTypeVarEnv() = (* Make an environment for type variables. A type variable is put into the environment if it is not already there. Type variables are always put into the most local scope first and then tidied up in the second pass. *) let val {enter,lookup,apply} = searchList (); (* Type variables used here should go in the scope of the most local val or fun. *) fun lookupT name = let (* These type variables are not unifiable until they are generalised. *) val newTypeVar = mkTypeVar (generalisable, isEqtype name, true, isWeak(name, lex)); val U : unit = enter (name, newTypeVar); in newTypeVar end; in { lookupTvar = fn s => case lookup s of SOME t => t | NONE => lookupT s, lookup = lookup, apply = apply, enter = enter } end (* makeTypeVarEnv *); fun dec fsys lex decOnly (env as {enterFix,lookupFix,lookupTvar}) = let (* Sequence of declarations optionally separated by semicolons. *) fun decSequence fsys env : (parsetree * int) list= if (sy lex) eq SYMBOLS.semicolon then (* Semicolons are optional. *) (insymbol lex; decSequence fsys env) else if (sy lex) inside startDecSys then let val lno = lineno lex in (dec (fsys ++ semicolonStartDecSy) lex true env, lno) :: decSequence fsys env end else (* May be empty *) []; (* Constraints *) fun constraint exp fsys (env as {enterFix,lookupFix,lookupTvar}) = if testfor (SYMBOLS.colon, empty, lex) then constraint (mkConstraint (exp, parseType (fsys ++ colon, lex, {lookupTvar=lookupTvar}))) fsys env else exp; fun getConstant mkConst = let (* Return the string. *) val data = id lex; (* Save it before insymbol. *) val U : unit = insymbol lex; in mkConst data end; fun parseInfix fsys opSys startSys atomic {enterFix: string * fixStatus -> unit, lookupFix: string -> fixStatus option, lookupTvar: string -> types } = let (* Infix operators have a precedence value associated with them, the larger the value the more tightly they bind. *) val opStartSy = opSy ++ startSys; fun parseApplication fsys pproc = (* Applies a function to an argument and then tries to apply that to the next expression/pattern. *) if (sy lex) inside startSys then (* Read an argument and apply the constructor *) if (sy lex) inside opSys andalso ( (* It is infix if we find it and it has been declared as infix. If it hasn't been declared then it isn't infix. *) case lookupFix(id lex) of SOME (Infix _) => true | SOME (InfixR _) => true | _ => false ) then (* it's an infix operator - don't treat it as an arg. *) pproc else let val arg = atomic (fsys ++ startSys) in parseApplication fsys (mkApplic (pproc, arg)) end else pproc; (* end parseApplication *) fun readNextOps () = (* Gets the operand and the following operator (if any) *) let val express = (* Procedure applications *) parseApplication (fsys ++ opSys) (atomic (fsys ++ opStartSy)); val operator = if (sy lex) inside opSys then getLongId (opSys, fsys, lex) else ""; val fix = if operator = "" then Nonfix else valOf(lookupFix operator); val preclevl = (* ~1 if not infix or infixr *) case fix of Infix prec => prec | InfixR prec => prec | Nonfix => ~1 (* Not infix *); val right = case fix of InfixR _ => true | _ => false; (* undefined if not infix or infixr *) in {express=express,operator=operator,fix=fix,preclevl=preclevl,right=right} end; fun nextLevel {express,operator,fix,preclevl,right} returnLevel (* if we get an operator with this level then we must return. *) rightOperator (* except if we have this operator (ml90 only). *) = let val next = readNextOps(); (* get the next operator and operand.*) val U: unit = (* In ML97 two operators of the same precedence must both be left associative or both right associative. *) if getParameter ml90Tag (debugParams lex) then () else if #preclevl next = preclevl andalso right <> #right next then errorMessage (lex, lineno lex, "Mixed right and left associative operators of the same precedence.") else (); val rightOp = if #preclevl next > preclevl orelse (* next operator is more binding-it must be processed first *) right andalso (if getParameter ml90Tag (debugParams lex) then #operator next = operator else #preclevl next = preclevl) (* next operator is same as previous and right assoc. The ML standard (ML90) says that different operators of the same precedence are always associate to the left (even if they are both right associative operators). *) (* This has changed in ML97. Now right operators of the same precedence associate to the right. *) then nextLevel next (preclevl+1) (if right then operator else ".") else next; (* At this point we are either at the end of the expression or ``rightOp'' contains an operator which is as weak or weaker than the ``previous''. We can therefore apply the previous operator to the previous operand and the ``rightOp'' operand. *) val oper = mkIdent operator; val applied = { express = mkApplic (oper, mkTupleTree [express,#express rightOp]), operator = #operator rightOp, fix = #fix rightOp, preclevl = #preclevl rightOp, right = #right rightOp }; (* If the right operator is stronger than the ``returnLimit'' (i.e. stronger than the operator before this series) then repeat else return this result. *) in if #preclevl rightOp >= returnLevel orelse #operator rightOp = rightOperator then nextLevel applied returnLevel rightOperator else applied end (* nextLevel *); (* parseInfix *) val ops = readNextOps (); (* Get the first item. *) in if #preclevl ops < 0 (* no operator *) then #express ops else #express (nextLevel ops 0 ".") end (* parseInfix *); fun pattern fsys lex (env as {enterFix,lookupFix,lookupTvar}) = (* Parse a pattern or a fun name apat ... apat sequence. *) let fun constraintOrLayered pat fsys = let val isVar = isIdent pat; val constr = constraint pat (fsys ++ asSy) env; in if testfor (SYMBOLS.asSy, empty, lex) then ( (* Layered pattern *) if not isVar then errorMessage (lex, lineno lex, "Expected id or id:ty before `as'") else (); mkLayered (constr, pattern fsys lex env) ) else constr end; fun atomicPattern fsys = let val sym = sy lex; in if sym eq SYMBOLS.underline (* wild card *) then let val U : unit = insymbol lex; in wildCard end else if sym eq SYMBOLS.leftBrack (* list - may be empty *) then let val U : unit = insymbol lex; val p = if (sy lex) neq SYMBOLS.rightBrack (* may be empty *) then let fun varsList() = pattern (fsys ++ commaRightBrackSy) lex env :: (if testfor (SYMBOLS.comma, empty, lex) then varsList() else []); in varsList() end else []; val U : unit = getsym (SYMBOLS.rightBrack, lex); in mkList p end (* bracketed pattern or unit value. *) else if sym eq SYMBOLS.leftParen then let val U = insymbol lex; val p = if (sy lex) neq SYMBOLS.rightParen then let val first = pattern (fsys ++ rightParenCommaSy) lex env; (* May be a tuple *) in if testfor (SYMBOLS.comma, empty, lex) then let (* It is a tuple - read the other patterns and make the tuple. *) fun tuples () = pattern (fsys ++ rightParenCommaSy) lex env :: (if testfor (SYMBOLS.comma, empty, lex) then tuples () else []); in mkTupleTree (first :: tuples()) end else first (* just one *) end else unit; val U : unit = getsym (SYMBOLS.rightParen, lex); in p end (* Either a labelled record or unit. *) else if (sy lex) eq SYMBOLS.leftCurly then let val U : unit = insymbol lex; in if testfor (SYMBOLS.rightCurly, empty, lex) then unit (* Empty parentheses denote unit *) else let (* lab1 = pat1, __ , labn = patn <<, ... >>*) fun getLabels () = if testfor (SYMBOLS.threeDots, empty, lex) then {frozen = false,result = []} else let val fsys = fsys ++ commaRightCurlySy; val ident = getLabel (fsys ++ equalsSign, lex); val patt = if testfor (SYMBOLS.equalsSign, empty, lex) (* Simple case -- lab = pat *) then pattern fsys lex env else (* sugared form - label is also identifier *) ( (* Sugared form not allowed for numeric labels. *) if 0 < size ident andalso String.str(String.sub(ident, 0)) >= "1" andalso String.str(String.sub(ident, 0)) <= "9" then errorMessage (lex, lineno lex, " = pat expected after numeric label") else (); (* May have constraint and/or be layered. *) constraintOrLayered (mkIdent ident) fsys ); val this = (ident, patt); in if testfor (SYMBOLS.comma, declarableVarSys, lex) then let val getRest = getLabels (); in {frozen = #frozen getRest, result = this :: #result getRest} end else (* Finished. *) {frozen = true,result = [this]} end (* getLabels *); val {frozen, result} = getLabels (); val U : unit = getsym (SYMBOLS.rightCurly, lex); in mkLabelledTree (result, frozen) end end (* Constants *) else if sym eq SYMBOLS.stringConst then getConstant mkString else if sym eq SYMBOLS.integerConst then getConstant mkInt else if sym eq SYMBOLS.realConst then ( (* Real literals were allowed in patterns in ML90. *) if getParameter ml90Tag (debugParams lex) then () else errorMessage (lex, lineno lex, "Real constants not allowed in patterns"); getConstant mkReal ) else if sym eq SYMBOLS.charConst then getConstant mkChar else if sym eq SYMBOLS.wordConst then getConstant mkWord else if (sy lex) inside declarableVarOpSy (* Identifiers *) then let val opThere = (sy lex) eq SYMBOLS.opSy; val U : unit = if opThere then insymbol lex else (); in mkIdent (getLongNonInfix opThere declarableVarSys fsys lex env) end else (skipon (empty, fsys, "Pattern", lex); emptyTree) end (* atomicPattern *); (* pattern *) val U = skipon (startPatternSys, fsys, "Pattern", lex); val pat = constraintOrLayered (parseInfix (fsys ++ colonAsSy) declarableVarSys startPatternSys atomicPattern env) fsys; val U : unit = skipon (fsys, empty, "End of pattern", lex); in pat end; fun expression fsys (env as {enterFix,lookupFix,lookupTvar}) = (* Parse an expression *) let fun expressions fsys separator env = (* Sequence of expressions separated by semicolons or commas. Returns the list. *) getList (separator, empty, lex, fn () => expression fsys env); fun expressionLineList fsys separator env : (parsetree * int) list = (* Similar to "expressions" except it returns parsetree X line pairs. *) let fun getExpLine () = let val lno = lineno lex in (expression fsys env, lno) end in getList (separator, empty, lex, getExpLine) end; fun match fsys = (* vs1.exp1 | .. | vsn.expn *) let val U : unit = skipon (startMatchSys, fsys, "Match", lex); val lno = lineno lex; (* Read the pattern. *) val vars = pattern (fsys ++ thickArrow) lex env; val U : unit = (* We expect to get a => here but a common problem is to confuse matches with fun declarations and use a = here. We report it as an error but swallow it as though it was what we wanted. *) if (sy lex) eq SYMBOLS.thickArrow then insymbol lex else ( notfound ("=>", lex); if (sy lex) eq SYMBOLS.equalsSign then insymbol lex else () ) (* And now the expression. *) val exp = expression (fsys ++ verticalBar) env; (* Deal with any other alternatives by recursing. *) (* Construct this node, and append any more. *) val res = mkMatchTree (vars, exp, lno) :: (if testfor (SYMBOLS.verticalBar, empty, lex) then match fsys else []); in skipon (fsys, empty, "End of match", lex); res end; fun atomicExpression fsys = if (sy lex) eq SYMBOLS.leftBrack then let val U : unit = insymbol lex; val p = if (sy lex) neq SYMBOLS.rightBrack (* may be empty *) then expressions (fsys ++ commaRightBrackSy) SYMBOLS.comma env else []; val U : unit = getsym (SYMBOLS.rightBrack, lex); in mkList p end (* A parenthesised expression, a tuple, a sequence or a unit value *) else if (sy lex) eq SYMBOLS.leftParen then let val U : unit = insymbol lex; in if testfor (SYMBOLS.rightParen, empty, lex) then unit (* Empty parentheses denote unit *) else let val firstLine = lineno lex; val firstExp = expression (fsys ++ rightParenSemicolonCommaSy) env; val exps = if testfor (SYMBOLS.comma, empty, lex) then (* It is a tuple - read the other expressions and make the tuple. *) mkTupleTree (firstExp :: expressions (fsys ++ rightParenCommaSy) SYMBOLS.comma env) else if testfor (SYMBOLS.semicolon, empty, lex) then mkExpseq ((firstExp, firstLine) :: expressionLineList (fsys ++ rightParenSemicolonSy) SYMBOLS.semicolon env) else (* Only one *) firstExp; val U : unit = getsym (SYMBOLS.rightParen, lex); in exps end end (* Either a labelled record or unit. *) else if (sy lex) eq SYMBOLS.leftCurly then let val U : unit = insymbol lex; in if testfor (SYMBOLS.rightCurly, empty, lex) then unit (* Empty parentheses denote unit *) else let (* lab1 = exp1, __ , labn = expn *) val labelled = mkLabelledTree (getList (SYMBOLS.comma, empty, lex, fn () => let val ident = getLabel (fsys ++ equalsSign, lex); in getsym (SYMBOLS.equalsSign, lex); (ident, expression (fsys ++ commaRightCurlySy) env) end), true) (* expressions cannot contain ``...'' *); val U : unit = getsym (SYMBOLS.rightCurly, lex); in labelled end end (* local declaration *) else if (sy lex) eq SYMBOLS.letSy then let val U : unit = insymbol lex; val newEnv = mkLocalFixEnv env val decs = decSequence (fsys ++ inSy) newEnv; val U : unit = getsym (SYMBOLS.inSy, lex); val exp = expressionLineList (fsys ++ semicolonEndSy) SYMBOLS.semicolon newEnv; val U : unit = getsym (SYMBOLS.endSy, lex); val U : unit = skipon (fsys, empty, "End of let expression", lex); in mkLocalDeclaration (decs, exp, false) (* "let" rather than "local"*) end (* ordinary expression - qualified names allowed *) else let val opThere = (sy lex) eq SYMBOLS.opSy; val U = if opThere then insymbol lex else (); val sym = sy lex; in if sym inside variableSys then mkIdent (getLongNonInfix opThere variableSys fsys lex env) else if sym eq SYMBOLS.hashSign (* Selector. *) then ( insymbol lex; mkSelector (getLabel (fsys, lex)) ) else if sym eq SYMBOLS.stringConst then getConstant mkString else if sym eq SYMBOLS.integerConst then getConstant mkInt else if sym eq SYMBOLS.realConst then getConstant mkReal else if sym eq SYMBOLS.wordConst then getConstant mkWord else if sym eq SYMBOLS.charConst then getConstant mkChar else (* Expected something e.g. an identifier. *) (badsyms (SYMBOLS.ident, lex); emptyTree) end (* end atomicExpression *); fun keyWordExp fsys = (* Expressions introduced by keywords, atomic expressions or infixed expressions. Expressions introduced by keywords (e.g. if) swallow all of the rest of the expression but they can appear within other keyword expressions or after "andalso" and "orelse". *) let val sym = (sy lex); in (* if expression *) if sym eq SYMBOLS.ifSy then let val U : unit = insymbol lex; val test = expression (fsys ++ thenStartExpressionSy) env; val U : unit = getsym (SYMBOLS.thenSy, lex); val thenPt = expression (fsys ++ elseStartExpressionSy) env; val U : unit = getsym (SYMBOLS.elseSy, lex); val elsePt = expression fsys env; in mkCond (test, thenPt, elsePt) end (* while expression *) else if sym eq SYMBOLS.whileSy then let val U : unit = insymbol lex; val test = expression (fsys ++ doSy) env; in if (sy lex) eq SYMBOLS.doSy then let val U : unit = insymbol lex; in mkWhile (test, expression fsys env) end else (badsyms (SYMBOLS.doSy, lex); emptyTree) end (* case expression *) else if sym eq SYMBOLS.caseSy then let val U : unit = insymbol lex; val exp = expression (fsys ++ ofStartMatchSy) env; val U : unit = getsym (SYMBOLS.ofSy, lex); in mkCase (exp, match fsys) end (* raise exception *) else if sym eq SYMBOLS.raiseSy then let val U : unit = insymbol lex; in mkRaise (expression fsys env) end (* fn expression *) else if (sy lex) eq SYMBOLS.fnSy then let val U : unit = insymbol lex; in mkFn (match (fsys ++ semicolon)) end (* type constraint, or similar *) else let val exp = parseInfix (fsys ++ andalsoColonSy) variableSys startAtomicSys atomicExpression env in constraint exp (fsys ++ andalsoSy) env end end (* keyWordExp *); fun parseAndalso fsys = (* EXP1 andalso EXP2 = if EXP1 then EXP2 else false *) let val first = keyWordExp (fsys ++ andalsoSy); (* N.B. If the expression had been introduced by a keyword (e.g. if) then the "else" part would have swallowed any "andalso". *) in if (sy lex) eq SYMBOLS.andalsoSy then (insymbol lex; mkAndalso (first, parseAndalso fsys)) else first end; fun parseOrelse fsys = (* EXP1 orelse EXP2 = if EXP1 then true else EXP2 *) let val first = parseAndalso (fsys ++ orelseSy); in if (sy lex) eq SYMBOLS.orelseSy then (insymbol lex; mkOrelse (first, parseOrelse fsys)) else first end; in skipon (startExpressionSys, fsys, "Expression", lex); if (sy lex) inside startExpressionSys then let val exp = parseOrelse (fsys ++ handleSy); in if (sy lex) eq SYMBOLS.handleSy then (insymbol lex; (* Remove "handle" *) mkHandleTree (exp, match fsys)) else exp end else emptyTree (* No expression *) end; (* expression *) in (* One declaration. "decOnly" is true if the derived form exp => val it = exp is not allowed here. *) if decOnly orelse (sy lex) inside startDecSys then let val sym = (sy lex); in if sym eq SYMBOLS.valSy then let val U : unit = insymbol lex; (* Create two different scopes, for explicitly declared type variables and those implicitly declared. *) val implicitTvars = makeTypeVarEnv() and explicitTvars = makeTypeVarEnv(); val newEnv = {enterFix = #enterFix env, lookupFix = #lookupFix env, lookupTvar = (* Look up type variables in the explicit environment, otherwise look them up and add them to the implicit environment. *) fn s => case #lookup explicitTvars s of SOME t => t | NONE => #lookupTvar implicitTvars s}; (* Tyvarseq *) val U = getTypeVars(true, { enter = #enter explicitTvars, lookup = #lookup explicitTvars, apply = #apply explicitTvars}); (* Processes a value binding. *) (* We check for qualified names in the second pass *) fun valB fsys = let val recursive = (sy lex) eq SYMBOLS.recSy in while (sy lex) eq SYMBOLS.recSy do insymbol lex; (* Could be more than one *) if recursive then recValbind :: valB fsys else let val lno = lineno lex; (* Pattern *) val vars = pattern (fsys ++ equalsSign) lex newEnv; (* = *) val U : unit = getsym (SYMBOLS.equalsSign, lex); (* expression *) val exp = expression fsys newEnv; in mkValBinding (vars, exp, lno) :: (if testfor (SYMBOLS.andSy, empty, lex) then valB fsys else []) end end; val bindings = valB (fsys ++ andSy) in mkValDeclaration (bindings, {lookup= #lookup explicitTvars, apply= #apply explicitTvars}, {lookup= #lookup implicitTvars, apply= #apply implicitTvars}) end else if sym eq SYMBOLS.funSy then let val U = insymbol lex; (* Create two different scopes, for explicitly declared type variables and those implicitly declared. *) val implicitTvars = makeTypeVarEnv() and explicitTvars = makeTypeVarEnv(); val newEnv = {enterFix = #enterFix env, lookupFix = #lookupFix env, lookupTvar = fn s => case #lookup explicitTvars s of SOME t => t | NONE => #lookupTvar implicitTvars s}; (* Tyvarseq *) val U = getTypeVars(true, { enter = #enter explicitTvars, lookup = #lookup explicitTvars, apply = #apply explicitTvars}); fun funB fsys = (* Processes a fun binding. *) (* We check for qualified names in the second pass *) let fun bindings() = let val lno = lineno lex; (* Pattern - This isn't really a pattern but we can parse it as that and sort it out later. *) val vars = pattern (fsys ++ equalsSign) lex newEnv; (* = *) (* We expect an equals sign here but a common problem is to confuse fun declarations with matches and use a => here. Report the error but swallow the =>. *) val U : unit = if (sy lex) eq SYMBOLS.equalsSign then insymbol lex else ( notfound ("=", lex); if (sy lex) eq SYMBOLS.thickArrow then insymbol lex else () ); (* expression *) val exp = expression (fsys ++ verticalBar) newEnv; val bind = mkClause (vars, exp, lno); (* Followed by a vertical bar and another binding ? *) val rest = if testfor (SYMBOLS.verticalBar, empty, lex) then bindings () else [] in bind :: rest end; in mkClausal (bindings ()) end (* funB *); val bindings = andBindings fsys funB; in mkFunDeclaration (bindings, {lookup= #lookup explicitTvars, apply= #apply explicitTvars}, {lookup= #lookup implicitTvars, apply= #apply implicitTvars}) end else if sym eq SYMBOLS.typeSy then ( insymbol lex; mkTypeDeclaration (andBindings fsys (typeBinding false false env)) ) else if sym eq SYMBOLS.datatypeSy then datatypeDecOrRepl fsys env false else if sym eq SYMBOLS.abstypeSy then let val U = insymbol lex; val tb = andBindings (fsys ++ withTypeWithSy) (fn fsys => datatypeBinding fsys env false); val withtypes = if testfor (SYMBOLS.withtypeSy, empty, lex) then andBindings (fsys ++ withSy) (typeBinding false false env) else []; val U : unit = getsym (SYMBOLS.withSy, lex); val decs = decSequence (fsys ++ endSy) env; in getsym (SYMBOLS.endSy, lex); mkAbstypeDeclaration (tb, withtypes, decs) end else if sym eq SYMBOLS.exceptionSy then let (* Declares exception identifiers and their types. *) val U = insymbol lex; (* Get an exception binding. Qualified names prohibited. *) fun exceptionBinding fsys = let (* First the identifier. *) val iden = getShortId (variableSys, fsys ++ ofEqualsSignSy, lex); in (* Either excon of ty or excon = excon' *) if testfor (SYMBOLS.ofSy, empty, lex) then mkExBinding (iden, emptyTree, parseType (fsys ++ equalsSign, lex, {lookupTvar= #lookupTvar env})) else if testfor (SYMBOLS.equalsSign, empty, lex) then let (* Must be = excon' *) val oldIden = getLongId (variableSys, fsys, lex); in mkExBinding (iden, mkIdent oldIden, emptyType) end else mkExBinding (iden, emptyTree, emptyType) end; in mkExDeclaration (andBindings fsys exceptionBinding) end else if sym eq SYMBOLS.localSy then let val U = insymbol lex; (* Infix status have this scope. Type-variables have the scope of the enclosing val or fun. *) val newEnv = mkLocalFixEnv env (* The local declaration *) val ins = decSequence (fsys ++ inEndSy) newEnv; val U : unit = getsym (SYMBOLS.inSy, lex); (* Decs are added to both the local and surrounding environment. *) val resultEnv = mkLocalBodyFixEnv newEnv enterFix val body = decSequence (fsys ++ endSy) resultEnv; in getsym (SYMBOLS.endSy, lex); mkLocalDeclaration (ins, body, true) (*"local" rather than "let"*) end else if sym eq SYMBOLS.infixSy orelse sym eq SYMBOLS.infixrSy orelse sym eq SYMBOLS.nonfixSy then let val U = insymbol lex; val fixForm = if sym eq SYMBOLS.nonfixSy then Nonfix else let val precNo = if (sy lex) eq SYMBOLS.integerConst then (* Read a precedence number *) let val num = valOf(Int.fromString (id lex)) in if num < 0 orelse num > 9 then errorMessage (lex, lineno lex, "Precedence " ^ id lex ^ " not allowed, must be between 0 and 9") else (); insymbol lex; num end else 0 (* default is zero *); in if sym eq SYMBOLS.infixSy then Infix precNo (* infix *) else InfixR precNo (* infixr *) end; (* Should now be at least one variable. *) val U = skipon (variableSys, fsys, "Variable", lex); (* Read the variables and put them in the environ with their fix status. Qualified names prohibited. *) fun vars() = if (sy lex) inside variableSys then let val iden = getShortId (variableSys, fsys, lex); val U : unit = #enterFix env (iden, fixForm); in iden :: vars() end else []; in mkDirective (vars (), fixForm) end (* "open" declaration - qualified names allowed *) else if testfor (SYMBOLS.openSy, empty, lex) then let fun vars() = if (sy lex) inside variableSys then let val iden = getLongId (variableSys, fsys, lex); in mkStructureIdent iden :: vars() end else []; in if (sy lex) inside variableSys then mkOpenTree (vars()) else (* Identifier missing. *) (badsyms (SYMBOLS.ident, lex); emptyTree) end else emptyTree (* Empty declaration. *) end else let (* Single expression allowed - short for val it = exp *) val newTvars = makeTypeVarEnv(); val explicitTvars = makeTypeVarEnv();(* This will always be empty. *) val newEnv = {enterFix = #enterFix env, lookupFix = #lookupFix env, lookupTvar = #lookupTvar newTvars}; val lno = lineno lex; val exp = expression fsys newEnv in mkValDeclaration ([mkValBinding (mkIdent "it", exp, lno)], {lookup= #lookup explicitTvars,apply= #apply explicitTvars}, {lookup= #lookup newTvars,apply= #apply newTvars}) end end (* dec *); (* Parses a signature. *) fun parseSignature (fsys : symset) (lex : lexan) (env as {enterFix,lookupFix,lookupTvar}) : structs = let (* May be either a signature name or a sig spec .. spec end seq followed by multiple where type expressions. *) val U : unit = skipon (declarableVarSys ++ sigSy, fsys, "Start of signature", lex) val sigexp : structs = if testfor (SYMBOLS.sigSy, empty, lex) then let (* sig *) val sgn = mkSig (signatureSpec (fsys ++ endSy ++ whereSy ++ semicolon) lex env) in getsym (SYMBOLS.endSy, lex); sgn end else if (sy lex) eq SYMBOLS.ident then mkSigIdent (getShortId (declarableVarSys, fsys ++ whereSy, lex)) else (* Only if parse error which will have been reported in skipon. *) emptyStruct; fun getWhereTypes sigexp = let (* This is similar to a type binding but with the possibility that the type is a longtycon. *) val U: unit = getsym(SYMBOLS.typeSy, lex); val lno = lineno lex val newTVenv = searchList (); val typeVars = getTypeVars (false, newTVenv); val typeName = getLongId (ident, fsys ++ equalsSign, lex); val typeVarEnv = genTypeVarEnv newTVenv; val _ = getsym (SYMBOLS.equalsSign, lex); (* Followed by a type or a sequence of constructors *) val _ = skipon (startTypeSys, fsys, "type", lex); val constrainedSig = mkWhereType(sigexp, typeVars, typeName, parseType (fsys ++ whereSy ++ andSy, lex, typeVarEnv), lno) in if testfor (SYMBOLS.whereSy, empty, lex) (* Recurse to handle any other wheres. *) then getWhereTypes constrainedSig else if testfor (SYMBOLS.andSy, empty, lex) then (* There are two possibilities here. It may be the start of another type abbreviation or it may be the start of another signature. *) if sy lex eq SYMBOLS.typeSy then getWhereTypes constrainedSig else (* Push the "and" back into the lexer so it can be picked out later. *) ( pushBackSymbol(lex, SYMBOLS.andSy); constrainedSig ) else constrainedSig end in if testfor (SYMBOLS.whereSy, empty, lex) then getWhereTypes sigexp else sigexp end (* parseSignature *) (* Sequence of "specs" *) and signatureSpec (fsys : symset) (lex : lexan) (env as {enterFix,lookupFix,lookupTvar}) : structs list = let val signatureTvars = makeTypeVarEnv(); fun parseSigEntries () : structs list = let val U : unit = skipon (fsys ++ semicolonStartSigSys, fsys, "Signature", lex) val sym = sy lex; val thisSig = if sym eq SYMBOLS.datatypeSy then let val lno = lineno lex val sys = fsys ++ startSigEndSy val newenv = {enterFix = #enterFix env, lookupFix = #lookupFix env, (* All type variables on the right hand side of a datatype specification must appear on the left. *) lookupTvar = fn name => ( errorMessage (lex, lineno lex, name ^ " has not been declared in type declaration"); badType ) } in [mkTopLevel (datatypeDecOrRepl sys newenv true, lno)] end else if sym eq SYMBOLS.typeSy then (* It isn't obvious whether specifications of the form type s and t = int * int (i.e. mixed specifications and abbreviations) are allowed. For the moment allow them. *) let val lno = lineno lex val sys = fsys ++ startSigEndSy in insymbol lex; [mkTopLevel (mkTypeDeclaration (andBindings sys (typeBinding true false env)), lno)] end else if sym eq SYMBOLS.eqtypeSy then let val lno = lineno lex val sys = fsys ++ startSigEndSy in insymbol lex; [mkTopLevel (mkTypeDeclaration (andBindings sys (typeBinding true true env)), lno)] end else if sym eq SYMBOLS.valSy then let val UUU = insymbol lex fun doVal () = let val lno = lineno lex; val id = getShortId (declarableVarSys, fsys ++ colon, lex); val U : unit = getsym (SYMBOLS.colon, lex); val ty = parseType (fsys ++ startSigEndAndSy, lex, {lookupTvar = #lookupTvar signatureTvars}); (* bugfixed SPF 19/2/94 - was #lookup signatureTvars *) in mkValSig (id, ty, lno) end in getList (SYMBOLS.andSy, empty, lex, doVal) end (* val *) else if sym eq SYMBOLS.exceptionSy then let(* exception id1 of ty1 and _ and idn of tyn *) val U : unit = insymbol lex fun doEx () = let val lno = lineno lex val id = getShortId (variableSys, fsys ++ ofSy, lex) val ty = if testfor (SYMBOLS.ofSy, empty, lex) then parseType (fsys ++ startSigEndAndSy, lex, {lookupTvar = lookupTvar}) else (* Nullary *) emptyType; in mkExSig (id, ty, lno) end in getList (SYMBOLS.andSy, empty, lex, doEx) end (* exception *) else if sym eq SYMBOLS.structureSy then let val U : unit = insymbol lex fun doStructure () = let val lno = lineno lex val id = getShortId (variableSys, empty, lex) val U : unit = getsym (SYMBOLS.colon, lex) val sgn = parseSignature (fsys ++ startSigEndAndSy) lex env in mkStructureBinding (id, sgn, false, emptyStruct, lno) end in [mkStructureDec (getList (SYMBOLS.andSy, empty, lex, doStructure))] end else if sym eq SYMBOLS.includeSy then let (* In ML 97 we can have "include sigexp" but in addition as a derived form we can have "include ident...ident". Presumably this is for backwards compatibility. sigexp may be a single identifier but could also be an identifier with a "where type" constraint. I hate this sort of inconsistency. The simplest way to deal with this is to parse the first one as a general signature and then allow multiple identifiers. That is rather more general than the syntax allows and perhaps we should check that the first signature was simply an identifier. *) val UUU = insymbol lex val U : unit = skipon (declarableVarSys ++ sigSy, fsys, "Start of signature", lex) val firstSig = parseSignature (fsys ++ startSigEndSy ++ declarableVarSys) lex env fun sigids () = if (sy lex) eq SYMBOLS.ident then mkSigIdent (getShortId (declarableVarSys, fsys, lex)) :: sigids() else [] in [mkInclude (firstSig :: sigids())] end else if sym eq SYMBOLS.sharingSy then let (* sharing *) val UUU = insymbol lex (* Now the types or structures. *) fun doSharing () : structs = let val lno = lineno lex val isType = testfor (SYMBOLS.typeSy, empty, lex) fun getShare () : string = (getLongId (declarableVarSys, fsys ++ rightParenEqualsSignAndSy, lex)); val shares = getShare () val U : unit = getsym (SYMBOLS.equalsSign, lex) val share: structs = mkSharing (isType, shares :: getList (SYMBOLS.equalsSign, ident, lex, getShare), lno) in if (sy lex) eq SYMBOLS.andSy andalso not (getParameter ml90Tag (debugParams lex)) then errorMessage (lex, lineno lex, "sharing ... and ... is not allowed in ML97") else (); share end (* doSharing *) in getList (SYMBOLS.andSy, declarableVarSys, lex, doSharing) end else [] (* Empty. *) (* end of parse of thisSig *) (* continue until the `end' *) val UUU = if (sy lex) eq SYMBOLS.semicolon then insymbol lex else (); in if (sy lex) inside semicolonStartSigSys then thisSig @ parseSigEntries () else thisSig end (* parseSigEntries *) in parseSigEntries () end (* signatureSpec *); fun signatureDec (fsys : symset) (lex : lexan) (env as {enterFix,lookupFix,lookupTvar}) : structs = let val UUU = insymbol lex fun doSigDec () = let val lno = lineno lex val id = getShortId (variableSys, empty, lex); val U : unit = getsym (SYMBOLS.equalsSign, lex) val sgn = parseSignature (fsys ++ endAndSy) lex env in mkSignatureBinding (id, sgn, lno) end in mkSignatureDec (getList (SYMBOLS.andSy, empty, lex, doSigDec)) end fun structVal (fsys : symset) (lex : lexan) (env as {enterFix,lookupFix,lookupTvar}) : structs = let (* Series of declarations inside struct...end or (...) in functor application. *) fun structEnd (fsys: symset) : structs = let (* Infix declarations are local to struct ... end. *) val structEnv = mkLocalFixEnv env in mkStruct (strDec (fsys ++ endSy) lex structEnv) end (* structEnd *) val UUU = skipon (structSy ++ declarableVarLetSy, fsys, "struct or functor application", lex); val fsysPcolon = fsys ++ colon ++ colonGt val strExp = if testfor (SYMBOLS.structSy, empty, lex) then let(* It's a new structure *) val str = structEnd fsysPcolon val U : unit = getsym (SYMBOLS.endSy, lex) in str end else if testfor (SYMBOLS.letSy, empty, lex) then let (* Fixity is local. *) val lno = lineno lex; val newEnv = mkLocalFixEnv env (* The local declaration *) val ins = strDec (fsysPcolon ++ inEndSy) lex newEnv val U : unit = getsym (SYMBOLS.inSy, lex) val body = [structVal (fsysPcolon ++ endSy) lex newEnv] val U : unit = getsym (SYMBOLS.endSy, lex) in mkLocaldec (ins, body, (* "let" rather than "local" *) false, lno) end else let (* Either a structure path or a functor application *) val iden = getLongId (declarableVarSys, fsysPcolon ++ leftParen, lex); in if testfor (SYMBOLS.leftParen, empty, lex) then let (* functor application *) (* Functor names shouldn't be qualified, so we ought to check this here using: checkForDots (iden, lex, lineno lex) Unfortunately, this breaks the Poly/ML prelude, which needs the functor RunCall.Run_exception1, so I've taken this check out again! SPF 17/4/96 *) val parameter = if (sy lex) eq SYMBOLS.rightParen (* Empty parameter list *) then mkStruct [] else let val tsys = fsysPcolon ++ rightParenCommaSy in (* May be either a structure value or a sequence of declarations. *) if (sy lex) inside startDecStructureSy then structEnd tsys (* implied struct...end *) else structVal tsys lex env end val U : unit = getsym (SYMBOLS.rightParen, lex) in mkFunctorAppl (iden, parameter) end else mkStructIdent iden end (* We may have one or more constraints. *) fun doConstraints strExp = if testfor (SYMBOLS.colon, empty, lex) then doConstraints(mkSigConstraint(strExp, parseSignature fsysPcolon lex env, false)) else if testfor (SYMBOLS.colonGt, empty, lex) then doConstraints(mkSigConstraint(strExp, parseSignature fsysPcolon lex env, true)) else strExp in doConstraints strExp end (* structVal *) and structureDec (fsys : symset) (lex : lexan) (env as {enterFix,lookupFix,lookupTvar}) : structs = if testfor (SYMBOLS.structureSy, empty, lex) then let fun doStrDec () = let (* Read strId <<: sig>> = str *) val lno = lineno lex (* First the identifier *) val strId = getShortId (declarableVarSys, fsys ++ colonEqualsSignSy, lex); (* Next the signature if there is one. *) val isOpaque = (sy lex) eq SYMBOLS.colonGt; val sgn = if testfor (SYMBOLS.colon, empty, lex) orelse testfor (SYMBOLS.colonGt, empty, lex) then parseSignature (fsys ++ equalsSign) lex env else emptyStruct (* Now the equals sign *) val U : unit = getsym (SYMBOLS.equalsSign, lex) in (* And finally the structure value. *) mkStructureBinding (strId, sgn, isOpaque, structVal fsys lex env, lno) end in mkStructureDec (getList (SYMBOLS.andSy, structSy, lex, doStrDec)) end else if testfor (SYMBOLS.localSy, empty, lex) then let val lno = lineno lex val newEnv = mkLocalFixEnv env (* The local declaration *) val ins = strDec (fsys ++ inEndSy) lex newEnv val U : unit = getsym (SYMBOLS.inSy, lex) (* Decs are added to both the local and surrounding environment. *) val resultEnv = mkLocalBodyFixEnv newEnv enterFix val body = strDec (fsys ++ endSy) lex resultEnv val U : unit = getsym (SYMBOLS.endSy, lex) in mkLocaldec (ins, body, true, lno) end else emptyStruct (* end of structureDec *) (* Functor declarations. *) and functorDec (fsys : symset) (lex : lexan) (env as {enterFix,lookupFix,lookupTvar}) : structs = let val UUU = insymbol lex; (* remove ``functor'' *) fun doFunctDec () : functorBind = let (* Read fncId (<> ) <<: sig>> = str *) (* First the identifier *) val lno = lineno lex val strId = getShortId (declarableVarSys, fsys ++ colonEqualsSignSy, lex); val U : unit = getsym (SYMBOLS.leftParen, lex); (* Now the parameters *) val tsys = fsys ++ rightParenCommaSy; val parameter = (* empty | name:sigexp | spec *) if (sy lex) eq SYMBOLS.rightParen (* empty *) then mkFormalArg ("", mkSig []) else if (sy lex) inside startSigSys (* spec *) then mkFormalArg ("", mkSig (signatureSpec tsys lex env)) (* name : sigexp *) else let val strId = getShortId (declarableVarSys, tsys ++ colon, lex); val U : unit = getsym (SYMBOLS.colon, lex) (* Next the signature. *) val sgn = parseSignature (tsys ++ sharingSy) lex env in mkFormalArg (strId, sgn) end (* parameter *) val U : unit = getsym (SYMBOLS.rightParen, lex) (* Next the signature if there is one. *) val isOpaque = (sy lex) eq SYMBOLS.colonGt; val sgn = if testfor (SYMBOLS.colon, empty, lex) orelse testfor (SYMBOLS.colonGt, empty, lex) then parseSignature (fsys ++ equalsSign) lex env else emptyStruct (* Now the equals sign *) val U : unit = getsym (SYMBOLS.equalsSign, lex) in (* And finally the functor value. *) mkFunctorBinding (strId, sgn, isOpaque, structVal fsys lex env, parameter, lno) end (* doFunctDec *) in mkFunctorDec (getList (SYMBOLS.andSy, structSy, lex, doFunctDec)) end (* functorDec *) and strDec (fsys : symset) (lex : lexan) (env as {enterFix,lookupFix,lookupTvar}) : structs list = (* A sequence of declarations, optionally separated by semicolons. *) let fun getDecs () : structs list = let val tsys = fsys ++ semicolonStartDecStructureSy; in (* Semicolons are optional. *) if (sy lex) eq SYMBOLS.semicolon then let val UUU = insymbol lex in getDecs () end else if (sy lex) inside structureLocalSy then (structureDec tsys lex env) :: getDecs() else if (sy lex) inside startDecSys then let val lno = lineno lex in (mkTopLevel (dec tsys lex true env, lno)) :: getDecs() end else (* May be empty *) [] end (* getDecs *) in (* Return the declarations. *) getDecs () end (* strDec *); val globalEnv = (* Extend the fixity environment with a type var environment which traps top-level type variables in exceptions. *) { enterFix = enterFix, lookupFix = lookupFix, lookupTvar = fn (s : string) => let val U : unit = errorMessage (lex, lineno lex, "Free type variables not allowed"); in mkTypeVar (generalisable, false, true, true) end} (* May be structure/functor dec, signature dec or top-level dec. Treat "local" as a structure dec even if it is actually declaring a value or type. *) val tsys = fsys ++ startTopSys; fun doStrDecs () = if (sy lex) eq SYMBOLS.structureSy orelse (sy lex) eq SYMBOLS.localSy (* Structure or local declarations. Treat all local declarations as strDecs since this includes the case of local dec in dec. *) then structureDec tsys lex globalEnv else let val lno = lineno lex in mkTopLevel (dec tsys lex true globalEnv, lno) end fun parseTopDecs (okStartSet : symset) : structs list = let val startSym = sy lex; in if startSym eq SYMBOLS.semicolon orelse startSym eq SYMBOLS.abortParse then [] else if startSym inside topdecStartSy then let (* Is this the same kind of topdec as the previous one? This is no longer required in ML97. *) val U : unit = if not (startSym inside okStartSet) andalso getParameter ml90Tag (debugParams lex) then warningMessage (lex, lineno lex, "ML Standard requires ';' between different kinds of top-level declaration.") else (); val (aDec : structs, newOkStartSet : symset) = if startSym eq SYMBOLS.functorSy then (functorDec tsys lex globalEnv, functorSy) else if startSym eq SYMBOLS.signatureSy then (signatureDec tsys lex globalEnv, signatureSy) else if startSym eq SYMBOLS.structureSy then (structureDec tsys lex globalEnv, structureLocalStartDecSy) (* Local declarations are ambiguous; we treat them as strDecs *) else if startSym eq SYMBOLS.localSy then (structureDec tsys lex globalEnv, structureLocalStartDecSy) (* let, val, fun etc. *) else let val lno : int = lineno lex; in (mkTopLevel (dec tsys lex true globalEnv, lno), structureLocalStartDecSy) end; in aDec :: parseTopDecs newOkStartSet end else let val U : unit = notfound (";", lex); in [] end end; (* parseTopDecs *) in (* body of parseDec *) (* topdecs are either fundecs, sigdecs, strDecs (including decs) or a single expression. We now handle everything except the single expression in "parseTopDecs". This makes it easier to produce warning messages for missing semi-colons that the ML Standard requires between different kinds of topdec. SPF 18/7/96 *) if (sy lex) inside topdecStartSy then parseTopDecs topdecStartSy else let (* expression - only one allowed. *) val lno : int = lineno lex; val aDec : structs = mkTopLevel (dec tsys lex false globalEnv, lno); val U : unit = if (sy lex) neq SYMBOLS.semicolon andalso (sy lex) neq SYMBOLS.abortParse then notfound (";", lex) else () in [aDec] end end; (* parseDec *) end (* PARSEDEC *); polyml.5.2.1/mlsource/MLCompiler/PARSE_TREE.ML0000644000175000017500000063522611012550217017563 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited Further development: Copyright (c) 2000-8 David C.J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* Title: Parse Tree Structure and Operations. Author: Dave Matthews, Cambridge University Computer Laboratory Copyright Cambridge University 1985 *) functor PARSE_TREE ( (*****************************************************************************) (* LEX *) (*****************************************************************************) structure LEX : sig type lexan; type prettyPrinter; val errorProc: lexan * int * (prettyPrinter -> unit) -> unit; val warningProc: lexan * int * (prettyPrinter -> unit) -> unit; val debugParams: lexan -> Universal.universal list end; (*****************************************************************************) (* CODETREE *) (*****************************************************************************) (* This tree represents the intermediate code between the parse tree and the final machine code *) structure CODETREE : sig type machineWord type codetree val CodeNil: codetree val CodeZero: codetree val Ldexc: codetree val MatchFail: codetree val mkAltMatch: codetree * codetree -> codetree val mkConst: machineWord -> codetree val mkLoad: int * int -> codetree val mkInd: int * codetree -> codetree val mkProc: codetree * int * int * string -> codetree val mkInlproc: codetree * int * int * string -> codetree val mkEval: codetree * codetree list * bool -> codetree val mkStr: string -> codetree val mkNot: codetree -> codetree val mkCand: codetree * codetree -> codetree val mkCor: codetree * codetree -> codetree val mkRaise: codetree -> codetree val mkDec: int * codetree -> codetree val mkIf: codetree * codetree * codetree -> codetree val mkWhile: codetree * codetree -> codetree val mkEnv: codetree list -> codetree val mkTuple: codetree list -> codetree val mkHandle: codetree * codetree list * codetree -> codetree val mkMutualDecs: codetree list -> codetree val mkContainer: int -> codetree val mkSetContainer: codetree * codetree * int -> codetree val mkTupleFromContainer: codetree * int -> codetree val multipleUses: codetree * (unit -> int) * int -> {load: int -> codetree, dec: codetree list} val evalue: codetree -> machineWord; val structureEq: machineWord * machineWord -> bool end; (*****************************************************************************) (* STRUCTVALS *) (*****************************************************************************) structure STRUCTVALS : sig (* Structures *) type structVals; type signatures; type functors; type fixStatus; type typeId; type typeConstrs; type typeDependent; type codetree val undefinedStruct: structVals; val isUndefinedStruct: structVals -> bool; val makeSelectedStruct: structVals * structVals -> structVals; val structSignat: structVals -> signatures; (* Signatures *) type univTable val sigTab: signatures -> univTable; (* Types *) val makeVariableId: unit -> typeId; val isVariableId: typeId -> bool; val unifyTypeIds: typeId * typeId -> bool; val sameTypeId: typeId * typeId -> bool; type 'a possRef (* A type is the union of these different cases. *) type typeVarForm datatype types = TypeVar of typeVarForm | TypeConstruction of (* typeConstructionForm *) { name: string, value: typeConstrs possRef, args: types list } | FunctionType of (* functionTypeForm *) { arg: types, result: types } | LabelledType of (* labelledRecForm *) { recList: { name: string, typeof: types } list, frozen: bool, genericInstance: typeVarForm list } | OverloadSet of (* overloadSetForm *) { typeset: typeConstrs list } | BadType | EmptyType ; datatype valAccess = Global of codetree | Local of { addr: int ref, level: int ref } | Selected of { addr: int, base: structVals } | Formal of int | Overloaded of typeDependent (* Values only. *) and values = Value of { name: string, typeOf: types, access: valAccess, class: valueClass } (* Classes of values. *) and valueClass = SimpleValue | Exception | Constructor of { nullary: bool } val tcName: typeConstrs -> string; val tcEquivalent: typeConstrs -> types; val tcSetConstructors: typeConstrs * values list -> unit; val tcTypeVars: typeConstrs -> types list; val tcSetEquality: typeConstrs * bool -> unit; val tcConstructors: typeConstrs -> values list; val makeTypeConstrs: string * types list * types * typeId * bool * int -> typeConstrs; val isConstructor: values -> bool; val isUndefinedValue: values -> bool; val listType: typeConstrs; val undefType: typeConstrs; val generalisable: int; (* Values. *) val undefinedValue: values; val valName: values -> string val valTypeOf: values -> types val TypeDep: typeDependent val makeOverloaded: string * types * typeDependent -> values; datatype env = Env of { lookupVal: string -> values option, lookupType: string -> typeConstrs option, lookupFix: string -> fixStatus option, lookupStruct: string -> structVals option, lookupSig: string -> signatures option, lookupFunct: string -> functors option, enterVal: string * values -> unit, enterType: string * typeConstrs -> unit, enterFix: string * fixStatus -> unit, enterStruct: string * structVals -> unit, enterSig: string * signatures -> unit, enterFunct: string * functors -> unit }; type 'a tag; val structVar: structVals tag; val valueVar: values tag; val typeConstrVar: typeConstrs tag; end; (*****************************************************************************) (* TYPETREE *) (*****************************************************************************) structure TYPETREE : sig type types; type values; type lexan; type prettyPrinter; type typeConstrs; val unify: types * types * lexan * int * (prettyPrinter -> unit) -> unit; val apply: types * types * lexan * int * (prettyPrinter -> unit) -> types; val allowGeneralisation: types * int * bool * lexan * int * (prettyPrinter -> unit) -> unit; val generalise: types * bool -> types; (* Check for a local datatype "escaping". Added for ML97. *) val checkForLocalDatatypes: types * int * (string -> unit) -> unit; val mkProductType: types list -> types; val mkTypeVar: int * bool * bool * bool -> types; val mkTypeConstruction: string * typeConstrs * types list -> types; val mkFunctionType: types * types -> types; val mkLabelled: {name: string, typeof: types } list * bool -> types; val mkLabelEntry: string * types -> {name: string, typeof: types }; val sortLabels: {name: string, typeof: types } list * (string -> unit) -> {name: string, typeof: types } list; val entryNumber: string * types -> int; val recordNotFrozen: types -> bool; val recordWidth: types -> int; (* Unify two type variables which would otherwise be non-unifiable. *) val linkTypeVars: types * types -> unit; val setTvarLevel: types * int -> unit; (* Gets the lists of constructors from a type. *) val getConstrList: types -> values list; (* Second pass on type identifiers which associates type constructors with names. *) val assignTypes: types * (string -> typeConstrs) * lexan * int -> unit; (* Print out a type structure. *) val display: types * int * prettyPrinter * bool -> unit; (* A list of type variables. *) val displayTypeVariables: types list * int * prettyPrinter * bool -> unit; (* Standard types. *) val boolType: types; val intType: types; val charType: types; (* added 22/8/96 SPF *) val stringType: types; val realType: types; val unitType: types; val exnType: types; val mkOverloadSet: typeConstrs list -> types; val genEqualityFunctions: typeConstrs list * (string -> unit) * bool -> unit; end; (*****************************************************************************) (* VALUEOPS *) (*****************************************************************************) structure VALUEOPS : sig type machineWord; type types; type codetree type values; type structVals; type lexan; type prettyPrinter; type typeConstrs; type fixStatus; val chooseConstrRepr : (string*types) list -> codetree list val overloadType: values * bool -> types (* Construction functions. *) val mkVar: string * types -> values; val mkSelectedVar: values * structVals -> values; val mkGconstr: string * types * codetree * bool -> values; val mkEx: string * types -> values; val mkSelectedType: typeConstrs * string * structVals option -> typeConstrs (* Standard values *) val nilConstructor: values; val consConstructor: values; (* Print values. *) val displayFixStatus: fixStatus * int * prettyPrinter -> unit; (* Code-generate. *) val mkExIden: unit -> codetree val codeVal: values * int * types * lexan * int -> codetree val codeExFunction: values * int * types * lexan * int -> codetree val applyFunction: values * codetree * int * types * lexan * int -> codetree val getOverloadInstance: string * types * bool * lexan * int -> codetree*string val isTheSameException: values * values -> bool val raiseBind: codetree; val raiseMatch: codetree; val makeGuard: values * codetree * int -> codetree val makeInverse: values * codetree * int -> codetree; (* Look-up functions. *) val lookupStructure: string * {lookupStruct: string -> structVals option} * string * (string -> unit) -> structVals val lookupValue: string * {lookupVal: string -> values option, lookupStruct: string -> structVals option} * string * (string -> unit) -> values val lookupTyp: {lookupType: string -> typeConstrs option, lookupStruct: string -> structVals option} * string * (string -> unit) -> typeConstrs end; (*****************************************************************************) (* UTILITIES *) (*****************************************************************************) structure UTILITIES : sig type lexan; val noDuplicates: (string -> unit) -> { apply: (string * 'a -> unit) -> unit, enter: string * 'a -> unit, lookup: string -> 'a option}; val searchList: unit -> { apply: (string * 'a -> unit) -> unit, enter: string * 'a -> unit, lookup: string -> 'a option }; val checkForDots: string * lexan * int -> unit; val splitString: string -> { first:string,second:string } end; (*****************************************************************************) (* UNIVERSALTABLE *) (*****************************************************************************) structure UNIVERSALTABLE: sig type universal; type univTable; val univFold: univTable * (string * universal * 'a -> 'a) * 'a -> 'a; end; (*****************************************************************************) (* DEBUG *) (*****************************************************************************) structure DEBUG : sig val ml90Tag: bool Universal.tag val debugTag: bool Universal.tag val errorDepthTag : int Universal.tag val fileNameTag: string Universal.tag val getParameter : 'a Universal.tag -> Universal.universal list -> 'a end; (*****************************************************************************) (* MISC *) (*****************************************************************************) structure MISC : sig (* These are handled in the compiler *) exception Conversion of string; (* string to int conversion failure *) (* This isn't handled at all (except generically) *) exception InternalError of string; (* compiler error *) val quickSort : ('a -> 'a -> bool) -> 'a list -> 'a list; val lookupDefault : ('a -> 'b option) -> ('a -> 'b option) -> 'a -> 'b option end (* MISC *); (*****************************************************************************) (* PRETTYPRINTER *) (*****************************************************************************) structure PRETTYPRINTER : sig type prettyPrinter val ppAddString : prettyPrinter -> string -> unit val ppBeginBlock : prettyPrinter -> int * bool -> unit val ppEndBlock : prettyPrinter -> unit -> unit val ppBreak : prettyPrinter -> int * int -> unit end; (*****************************************************************************) (* UNIVERSAL *) (*****************************************************************************) structure UNIVERSAL : sig type universal type 'a tag val tagIs : 'a tag -> universal -> bool val tagProject : 'a tag -> universal -> 'a end; (*****************************************************************************) (* ADDRESS *) (*****************************************************************************) structure ADDRESS : sig type machineWord; (* any legal bit-pattern (tag = 0 or 1) *) val toMachineWord: 'a -> machineWord end; (*****************************************************************************) (* DEBUGGER *) (*****************************************************************************) structure DEBUGGER : sig type types type machineWord datatype environEntry = EnvValue of string * types | EnvException of string * types | EnvVConstr of string * types * bool | EnvStaticLevel type debugger; val nullDebug: debugger val debuggerFunTag : debugger Universal.tag datatype debugReason = DebugEnter of machineWord * types | DebugLeave of machineWord * types | DebugException of exn | DebugStep (* Functions inserted into the compiled code. *) val debugFunction: debugger * debugReason * string * string * int -> environEntry list -> machineWord list -> unit end; (*****************************************************************************) (* PARSETREE sharing constraints *) (*****************************************************************************) sharing type LEX.lexan = UTILITIES.lexan = TYPETREE.lexan = VALUEOPS.lexan = UTILITIES.lexan sharing type STRUCTVALS.typeConstrs = TYPETREE.typeConstrs = VALUEOPS.typeConstrs sharing type STRUCTVALS.structVals = VALUEOPS.structVals sharing type STRUCTVALS.types = VALUEOPS.types = DEBUGGER.types = TYPETREE.types sharing type STRUCTVALS.values = VALUEOPS.values = TYPETREE.values sharing type CODETREE.codetree = VALUEOPS.codetree sharing type LEX.prettyPrinter = TYPETREE.prettyPrinter = VALUEOPS.prettyPrinter = PRETTYPRINTER.prettyPrinter sharing type ADDRESS.machineWord = CODETREE.machineWord = DEBUGGER.machineWord = VALUEOPS.machineWord sharing type UNIVERSALTABLE.univTable = STRUCTVALS.univTable sharing type STRUCTVALS.tag = UNIVERSAL.tag; sharing type UNIVERSALTABLE.universal = UNIVERSAL.universal; sharing type STRUCTVALS.fixStatus = VALUEOPS.fixStatus ) : (*****************************************************************************) (* PARSETREE export signature *) (*****************************************************************************) sig type machineWord; type types; type fixStatus; type lexan; type prettyPrinter; type typeId; type codetree; type env; type typeConstrs; type values; type structVals; type environEntry; type structureIdentForm; (* An identifier is just a name. In the second pass it is associated with a particular declaration and the type is assigned into the type field. The type of this identifier is needed to deal with overloaded operators. If we have an occurence of ``='', say, the type of the value will be 'a * 'a -> bool but the type of a particular occurence, i.e. the type of the identifier must be int * int -> bool, say, after all the unification has been done. *) type parsetree and valbind and fvalbind and fvalclause and typebind and datatypebind and exbind; val isIdent : parsetree -> bool; val mkIdent : string -> parsetree; val mkString : string -> parsetree; val mkInt : string -> parsetree; val mkReal : string -> parsetree; val mkChar : string -> parsetree; val mkWord : string -> parsetree; val mkApplic : parsetree * parsetree -> parsetree; val mkCond : parsetree * parsetree * parsetree -> parsetree; val mkTupleTree : parsetree list -> parsetree; val mkValDeclaration : valbind list * { lookup: string -> types option, apply: (string * types -> unit) -> unit } * { lookup: string -> types option, apply: (string * types -> unit) -> unit } -> parsetree; val mkFunDeclaration : fvalbind list * { lookup: string -> types option, apply: (string * types -> unit) -> unit } * { lookup: string -> types option, apply: (string * types -> unit) -> unit } -> parsetree; val mkOpenTree : structureIdentForm list -> parsetree; val mkStructureIdent : string -> structureIdentForm; val mkValBinding : parsetree * parsetree * int -> valbind; val recValbind: valbind; val mkClausal : fvalclause list -> fvalbind; val mkClause : parsetree * parsetree * int -> fvalclause; val mkList : parsetree list -> parsetree; val mkConstraint : parsetree * types -> parsetree; val mkLayered : parsetree * parsetree -> parsetree; val mkFn : parsetree list -> parsetree; val mkMatchTree : parsetree * parsetree * int -> parsetree; val mkLocalDeclaration : (parsetree * int) list * (parsetree * int) list * bool -> parsetree; val mkTypeDeclaration : typebind list -> parsetree; val mkDatatypeDeclaration : datatypebind list * typebind list -> parsetree; val mkDatatypeReplication : string * string -> parsetree; val mkAbstypeDeclaration : datatypebind list * typebind list * (parsetree * int) list -> parsetree; val mkTypeBinding : string * types list * types * bool -> typebind; val mkDatatypeBinding : string * types list * (string*types) list -> datatypebind; val mkExBinding : string * parsetree * types -> exbind; val mkLabelledTree : (string * parsetree) list * bool -> parsetree; val mkSelector : string -> parsetree; val mkRaise : parsetree -> parsetree; val mkHandleTree : parsetree * parsetree list -> parsetree; val mkWhile : parsetree * parsetree -> parsetree; val mkCase : parsetree * parsetree list -> parsetree; val mkAndalso : parsetree * parsetree -> parsetree; val mkOrelse : parsetree * parsetree -> parsetree; val mkDirective : string list * fixStatus -> parsetree; val mkExpseq : (parsetree * int) list -> parsetree; val mkExDeclaration : exbind list -> parsetree; val unit : parsetree; val wildCard : parsetree; val emptyTree : parsetree; val pass2: parsetree * (unit -> typeId) * env * lexan * int * string -> types; type debugenv = environEntry list * (int->codetree) val gencode: parsetree * lexan * debugenv * int * int ref * string * int -> codetree list * debugenv; (* only used for debugging and error messages! *) val ptDisplay: parsetree * int * prettyPrinter -> unit; end (* PARSETREE export signature *) = (*****************************************************************************) (* PARSETREE functor body *) (*****************************************************************************) struct open MISC; open LEX; open CODETREE; open STRUCTVALS; open TYPETREE; open VALUEOPS; open UTILITIES; open DEBUG; open UNIVERSALTABLE; open UNIVERSAL; open PRETTYPRINTER; open ADDRESS; open RuntimeCalls; (* for POLY_SYS numbers *) val ioOp : int -> machineWord = RunCall.run_call1 POLY_SYS_io_operation; infix 9 sub; (********* types constructors copied here to reduce garbage ***************) val emptyType = EmptyType; val badType = BadType; fun isEmpty EmptyType = true | isEmpty _ = false; (************************************************************) val makeRaise = CODETREE.mkRaise; (* to avoid confusion! *) val makeWhile = CODETREE.mkWhile; (* to avoid confusion! *) abstype parsetree = Ident of identForm | Literal of literalForm | Applic of applicForm | Cond of condForm | TupleTree of parsetree list | ValDeclaration of valDecForm | FunDeclaration of funDecForm | OpenDec of { decs: structureIdentForm list, variables: values list ref } | Constraint of constraintForm | Layered of layeredForm | Fn of parsetree list | MatchTree of matchForm | Localdec of localdecForm | TypeDeclaration of typebind list | AbstypeDeclaration of abstypeDeclarationForm | DatatypeDeclaration of abstypeDeclarationForm | DatatypeReplication of datatypeReplicationForm | ExpSeq of (parsetree * int) list | Directive of directiveForm | ExDeclaration of exbind list | Raise of parsetree | HandleTree of handleTreeForm | While of whileForm | Case of caseForm | Andalso of andOrForm | Orelse of andOrForm | Labelled of labelledForm | Selector of selectorForm | List of parsetree list | EmptyTree | WildCard | Unit and valbind = (* Value bindings are either a binding or a list of recursive bindings.*) ValBind of (* Consists of a declaration part (pattern) and an expression. *) { dec: parsetree, exp: parsetree, line: int } | RecValBind and fvalbind = (* Function binding *) (* `Fun' bindings *) (* A function binding is a list of clauses, each of which uses a valBinding to hold the list of patterns and the corresponding function body. The second pass extracts the function variable and the number of patterns in each clause. It checks that they are the same in each clause. *) FValBind of { clauses: fvalclause list, numOfPatts: int ref, functVar: values ref, argType: types ref, resultType: types ref } and fvalclause = (* Clause within a function binding. *) FValClause of { dec: parsetree, exp: parsetree, line: int } and typebind = (* Non-generative type binding *) TypeBind of { name: string, typeVars: types list, decType: types, isEqtype: bool (* True if this was an eqtype in a signature. *) } and datatypebind = (* Generative type binding *) DatatypeBind of { name: string, typeVars: types list, constrs: (string*types) list, tcon: typeConstrs ref, valueConstrs: values list ref } and exbind = (* An exception declaration. It has a name and optionally a previous exception and a type. *) ExBind of { name: string, previous: parsetree, typeof: types, value: values ref } (* An identifier is just a name. In the second pass it is associated with a particular declaration and the type is assigned into the type field. The type of this identifier is needed to deal with overloaded operators. If we have an occurence of ``='', say, the type of the value will be 'a * 'a -> bool but the type of a particular occurence, i.e. the type of the identifier must be int * int -> bool, say, after all the unification has been done. *) withtype identForm = { name: string, typeof: types ref, value: values ref } (* Literal constants may be overloaded on more than one type. The types are specified by installing appropriate conversion functions: convInt, convReal, convChar, convString and convWord. *) and literalForm = { converter: values, typeof: types ref, literal: string } (* Function application *) and applicForm = { f: parsetree, arg: parsetree } (* Conditional *) and condForm = { test: parsetree, thenpt: parsetree, elsept: parsetree } (* Val and fun declarations. *) and valDecForm = { dec: valbind list, explicit: {lookup: string -> types option, apply: (string * types -> unit) -> unit }, implicit: {lookup: string -> types option, apply: (string * types -> unit) -> unit }, variables: values list ref (* list of variables declared *) } and funDecForm = { dec: fvalbind list, explicit: {lookup: string -> types option, apply: (string * types -> unit) -> unit }, implicit: {lookup: string -> types option, apply: (string * types -> unit) -> unit } } (* Name of a structure. Used only in an ``open'' declaration. *) and structureIdentForm = { name: string, value: structVals ref } (* Constraint (explicit type given) *) (* A constraint has a value and a type. The actual type, will, however be the unification of these two and not necessarily the given type. *) and constraintForm = { value: parsetree, given: types } (* Layered pattern. Equivalent to an ordinary pattern except that the variable is given the name of the object which is to be matched. *) and layeredForm = { var: parsetree, pattern: parsetree } (* A match is a pattern and an expression. If the pattern matches then the expression is evaluated in the environment of the pattern. *) and matchForm = { vars: parsetree, exp: parsetree, line: int, argType: types ref, resType: types ref } (* Used for local dec in dec and let dec in exp. *) and localdecForm = { decs: (parsetree * int) list, body: (parsetree * int) list, loc: bool, varsInBody: values list ref (* Variables in the in..dec part of a local declaration. *) } (* Datatype and Abstract Type declarations *) and abstypeDeclarationForm = { typelist: datatypebind list, withtypes: typebind list, declist: (parsetree * int) list } and datatypeReplicationForm = { newType: string, oldType: string } (* Directives are infix, infixr and nonfix. They are processed by the parser itself and only appear in the parse tree for completeness. *) and directiveForm = { tlist: string list, fix: fixStatus } (* Execute an expression and catch any exceptions. *) and handleTreeForm = { exp: parsetree, hrules: parsetree list } (* Ordinary while-loop *) and whileForm = { test: parsetree, body: parsetree } (* Case-statement *) and caseForm = { test: parsetree, match: parsetree list } (* andalso/orelse *) and andOrForm = { first: parsetree, second: parsetree } and labelledForm = { recList: (string * parsetree) list, frozen: bool, typeof: types ref } (* Labelled record & the entry in the list. "frozen" is false if it's a pattern with "...". *) and selectorForm = { name: string, labType: types, typeof: types } with (***************************************************************************** Pretty Printing ******************************************************************************) fun isIdent (Ident _) = true | isIdent _ = false; fun isApplic (Applic _) = true | isApplic _ = false; fun isTupleTree (TupleTree _) = true | isTupleTree _ = false; fun isAbstypeDeclaration (AbstypeDeclaration _) = true | isAbstypeDeclaration _ = false; fun isEmptyTree EmptyTree = true | isEmptyTree _ = false; val unit = Unit; val wildCard = WildCard; val emptyTree = EmptyTree; fun mkIdent name : parsetree = Ident { name = name, typeof = ref badType, value = ref undefinedValue }; local (* Make overloaded functions for the conversions. *) (* For the moment we make the type string->t and raise an exception if the constant cannot be converted. *) val ty = mkOverloadSet[] val funType = mkFunctionType (stringType, ty); fun mkOverloaded name : values = makeOverloaded (name, funType, TypeDep) in val convString = mkOverloaded "convString" and convInt = mkOverloaded "convInt" and convWord = mkOverloaded "convWord" and convChar = mkOverloaded "convChar" and convReal = mkOverloaded "convReal" end; fun mkString(s: string): parsetree = Literal{converter=convString, literal=s, typeof=ref badType}; fun mkInt (i : string) : parsetree = Literal{converter=convInt, literal=i, typeof=ref badType}; fun mkReal (r : string) : parsetree = Literal{converter=convReal, literal=r, typeof=ref badType}; fun mkChar (c : string) : parsetree = Literal{converter=convChar, literal=c, typeof=ref badType}; fun mkWord (w : string) : parsetree = Literal{converter=convWord, literal=w, typeof=ref badType}; fun mkApplic (f, arg) : parsetree = Applic { f = f, arg = arg }; fun mkCond (test, thenpt, elsept) : parsetree = Cond { test = test, thenpt = thenpt, elsept = elsept }; val mkTupleTree : parsetree list -> parsetree = TupleTree; fun mkValDeclaration (dec, explicit, implicit) : parsetree = ValDeclaration { dec = dec, explicit = explicit, implicit = implicit, variables = ref [] }; fun mkFunDeclaration (dec, explicit, implicit) : parsetree = FunDeclaration { dec=dec, explicit = explicit, implicit = implicit }; fun mkOpenTree(ptl : structureIdentForm list): parsetree = OpenDec{decs=ptl, variables=ref []}; fun mkStructureIdent name : structureIdentForm = { name = name, value = ref undefinedStruct }; fun mkValBinding (dec, exp, line) : valbind = ValBind { dec = dec, exp = exp, line = line }; val recValbind = RecValBind; fun mkClausal clauses : fvalbind = FValBind { clauses = clauses, numOfPatts = ref 0, functVar = ref undefinedValue, argType = ref badType, resultType = ref badType }; fun mkClause (dec, exp, line) : fvalclause = FValClause { dec = dec, exp = exp, line = line }; val mkList : parsetree list -> parsetree = List; fun mkConstraint (value, given) : parsetree = Constraint { value = value, given = given }; fun mkLayered (var, pattern) : parsetree = Layered { var = var, pattern = pattern }; val mkFn : parsetree list -> parsetree = Fn; fun mkMatchTree (vars, exp, line) : parsetree = MatchTree { vars = vars, exp = exp, line = line, argType = ref badType, resType = ref badType }; fun mkLocalDeclaration (decs, body, loc) : parsetree = Localdec { decs = decs, body = body, loc = loc, varsInBody = ref [] }; val mkTypeDeclaration : typebind list -> parsetree = TypeDeclaration; fun mkDatatypeDeclaration (typelist, withtypes) : parsetree = DatatypeDeclaration { typelist = typelist, withtypes = withtypes, declist = [] }; fun mkAbstypeDeclaration (typelist, withtypes, declist) : parsetree = AbstypeDeclaration { typelist = typelist, withtypes = withtypes, declist = declist }; fun mkDatatypeReplication (newType, oldType) : parsetree = DatatypeReplication { oldType = oldType, newType = newType }; fun mkTypeBinding (name, typeVars, decType, isEqtype) : typebind = TypeBind { name = name, typeVars = typeVars, decType = decType, isEqtype = isEqtype }; fun mkDatatypeBinding (name, typeVars, constrs) : datatypebind = DatatypeBind { name = name, typeVars = typeVars, constrs = constrs, tcon = ref undefType, valueConstrs = ref [] }; fun mkExBinding (name, previous, typeof) : exbind = ExBind { name = name, previous = previous, typeof = typeof, value = ref undefinedValue }; fun mkLabelledTree (recList, frozen) : parsetree = Labelled { recList = recList, frozen = frozen, typeof = ref emptyType }; fun mkSelector name : parsetree = let val resType = mkTypeVar (generalisable, false, false, false); val entryType = mkLabelEntry (name, resType); val labType = mkLabelled ([entryType], false) (* Not frozen*); in Selector { name = name, labType = labType, typeof = mkFunctionType (labType, resType) } end; val mkRaise : parsetree -> parsetree = Raise; fun mkHandleTree (exp, hrules) : parsetree = HandleTree { exp = exp, hrules = hrules }; fun mkWhile (test, body) : parsetree = While { test = test, body = body }; fun mkCase (test, match) : parsetree = Case { test = test, match = match }; fun mkAndalso (first, second) : parsetree = Andalso { first = first, second = second }; fun mkOrelse (first, second) : parsetree = Orelse { first = first, second = second }; fun mkDirective (tlist, fix) : parsetree = Directive { tlist = tlist, fix = fix }; val mkExpseq : (parsetree * int) list -> parsetree = ExpSeq; val mkExDeclaration : exbind list -> parsetree = ExDeclaration; (* We actually have 2 separate pretty printers! This one is only used for debugging and error messages. The proper top-level pretty-printer is the collection of "display" functions in VALUEOPS.ML. This needs sorting! DCJM: The reason for that is that this pretty printer prints the parse tree whereas the one in Valueops prints values. *) (* Generates a pretty-printed representation of a piece of tree. *) fun ptDisplay (c : parsetree, (* The value to print. *) depth : int, (* The number of levels to display. *) pprint : prettyPrinter) : unit = let (* Prints a list of items. *) fun printList (doPrint: 'a*int*prettyPrinter->unit) (c: 'a list, separator, depth) = if depth <= 0 then ppAddString pprint "..." else case c of [] => () | [v] => doPrint (v, depth, pprint) | (v::vs) => ( ppBeginBlock pprint (0, false); doPrint (v, depth, pprint); ppBreak pprint (if separator = "," orelse separator = ";" orelse separator = "" then 0 else 1, 0); ppAddString pprint separator; ppEndBlock pprint (); ppBreak pprint (1, 0); printList doPrint (vs, separator, depth - 1) ) (* end printList *); val displayList = printList ptDisplay (* type bindings and datatype bindings are used in several cases *) fun printTypeBind (TypeBind{name, typeVars, decType, ...}, depth, pprint) = ( ppBeginBlock pprint (3, true); displayTypeVariables (typeVars, depth, pprint, true); ppAddString pprint name; (* The type may be missing if this is a signature. *) case decType of EmptyType => () | _ => ( ppBreak pprint (1, 0); ppAddString pprint "="; ppBreak pprint (1, 0); display (decType, depth, pprint, true) ); ppEndBlock pprint () ) and printDatatypeBind (DatatypeBind{name, typeVars, constrs, ...}, depth, pprint) = ( ppBeginBlock pprint (3, true); displayTypeVariables (typeVars, depth, pprint, true); ppAddString pprint name; ppBreak pprint (1, 0); ppAddString pprint "="; ppBreak pprint (1, 0); printList printConstructor (constrs, "|", depth - 1); ppEndBlock pprint () ) and printConstructor ((name, argtype), depth, pprint) = ( ppBeginBlock pprint (2, false); ppAddString pprint name; if isEmpty argtype then () else ( ppBreak pprint (1, 0); ppAddString pprint "of"; ppBreak pprint (1, 0); display (argtype, depth, pprint, true) ); ppEndBlock pprint () ) in if depth <= 0 (* elide further text. *) then ppAddString pprint "..." else case c of Ident {name, ...} => ppAddString pprint name | Literal{literal, converter, ...} => let val convName = valName converter val lit = if convName = "convString" then concat["\"" , literal, "\""] else literal in ppAddString pprint lit end | Applic {f, arg} => ( ppBeginBlock pprint (0, false); (* No need to parenthesise *) if isApplic f orelse isIdent f then ptDisplay (f, depth - 1, pprint) else ( (* Put parentheses round the function. *) ppAddString pprint "("; ppBreak pprint (0, 0); ptDisplay (f, depth - 1, pprint); ppBreak pprint (0, 0); ppAddString pprint ")" ); ppBreak pprint (0, 0); if isTupleTree arg then (* will have parens anyway *) ptDisplay (arg, depth - 1, pprint) else ( (* Put parentheses round the argument. *) ppAddString pprint "("; ppBreak pprint (0, 0); ptDisplay (arg, depth - 1, pprint); ppBreak pprint (0, 0); ppAddString pprint ")" ); ppEndBlock pprint () ) | Cond {test, thenpt, elsept} => ( ppBeginBlock pprint (0, false); ppAddString pprint "if"; ppBreak pprint (1, 0); ptDisplay (test, depth - 1, pprint); ppBreak pprint (1, 0); ppAddString pprint "then"; ppBreak pprint (1, 0); ptDisplay (thenpt, depth - 1, pprint); ppBreak pprint (1, 0); ppAddString pprint "else"; ppBreak pprint (1, 0); ptDisplay (elsept, depth - 1, pprint); ppEndBlock pprint () ) | TupleTree ptl => ( ppBeginBlock pprint (3, true); ppAddString pprint "("; ppBreak pprint (1, 0); displayList (ptl, ",", depth - 1); ppBreak pprint (0, 0); ppAddString pprint ")"; ppEndBlock pprint () ) | ValDeclaration {dec, explicit, ...} => let fun printValBind (RecValBind, depth, pprint) = ( ppAddString pprint "rec"; ppBreak pprint (1, 0) ) | printValBind (ValBind{dec, exp, ...}, depth, pprint) = ( ppBeginBlock pprint (3, true); ptDisplay (dec, depth - 1, pprint); ppBreak pprint (1, 0); ppAddString pprint "="; ppBreak pprint (1, 0); ptDisplay (exp, depth - 1, pprint); ppEndBlock pprint () ) in ppBeginBlock pprint (3, true); ppAddString pprint "val"; ppBreak pprint (1, 0); (* TODO: Display the explicit type variables. *) (* displayTypeVariables (explicit, depth, pprint); *) (* TODO: This prints val rec f as "val rec and f". *) printList printValBind (dec, "and", depth - 1); ppEndBlock pprint () end | FunDeclaration {dec, explicit={apply, ...}, ...} => let fun printfvalbind (FValBind{clauses, ...}, depth, pprint) = printList printClause (clauses, "|", depth - 1) and printClause (FValClause{dec, exp, ...}, depth, pprint) = ( ppBeginBlock pprint (3, true); ptDisplay (dec, depth - 1, pprint); ppBreak pprint (1, 0); ppAddString pprint "="; ppBreak pprint (1, 0); ptDisplay (exp, depth - 1, pprint); ppEndBlock pprint () ) in ppBeginBlock pprint (3, true); ppAddString pprint "fun"; ppBreak pprint (1, 0); (* TODO: Display the explicit type variables. *) (* displayTypeVariables (explicit, depth, pprint); *) printList printfvalbind (dec, "and", depth - 1); ppEndBlock pprint () end | OpenDec {decs, ...} => let fun printStrName ({name, ...}: structureIdentForm, _, pprint) = ppAddString pprint name in ppBeginBlock pprint (3, true); ppAddString pprint "open"; ppBreak pprint (1, 0); printList printStrName (decs, "", depth - 1); ppEndBlock pprint () end | List ptl => ( ppBeginBlock pprint (3, true); ppAddString pprint "["; ppBreak pprint (1, 0); displayList (ptl, ",", depth - 1); ppBreak pprint (0, 0); ppAddString pprint "]"; ppEndBlock pprint () ) | Constraint {value, given} => ( ppBeginBlock pprint (3, false); ptDisplay (value, depth - 1, pprint); ppBreak pprint (1, 0); ppAddString pprint ":"; ppBreak pprint (1, 0); display (given, depth, pprint, true); ppEndBlock pprint () ) | Layered {var, pattern} => ( ppBeginBlock pprint (3, true); ptDisplay (var, depth - 1, pprint); ppBreak pprint (1, 0); ppAddString pprint "as"; ppBreak pprint (1, 0); ptDisplay (pattern, depth - 1, pprint); ppEndBlock pprint () ) | MatchTree {vars, exp, ...} => ( ppBeginBlock pprint (0, false); ptDisplay (vars, depth - 1, pprint); ppBreak pprint (1, 0); ppAddString pprint "=>"; ppBreak pprint (1, 0); ptDisplay (exp, depth - 1, pprint); ppEndBlock pprint () ) | Fn ptl => ( ppBeginBlock pprint (3, true); ppAddString pprint "fn"; ppBreak pprint (1, 0); displayList (ptl, "|", depth - 1); ppEndBlock pprint () ) | Unit => ppAddString pprint "()" | WildCard => ppAddString pprint "_" | Localdec {loc, decs, body, ...} => ( ppBeginBlock pprint (3, false); ppAddString pprint (if loc then "local" else "let"); ppBreak pprint (1, 0); displayList (#1(ListPair.unzip decs), ";", depth - 1); ppBreak pprint (1, 0); ppAddString pprint "in"; ppBreak pprint (1, 0); displayList (#1(ListPair.unzip body), ";", depth - 1); ppBreak pprint (1, 0); ppAddString pprint "end"; ppEndBlock pprint () ) | TypeDeclaration ptl => let (* This is used both for type bindings and also in signatures. In a signature we may have "eqtype". *) val typeString = case ptl of TypeBind {isEqtype=true, ...} :: _ => "eqtype" | _ => "type" in ppBeginBlock pprint (3, true); ppAddString pprint typeString; ppBreak pprint (1, 0); printList printTypeBind (ptl, "and", depth - 1); ppEndBlock pprint () end | DatatypeDeclaration {typelist, withtypes, ...} => ( ppBeginBlock pprint (3, true); ppAddString pprint "datatype"; ppBreak pprint (1, 0); printList printDatatypeBind (typelist, "and", depth - 1); if null withtypes then () else ( ppBreak pprint (1, 0); ppAddString pprint "withtype"; ppBreak pprint (1, 0); printList printTypeBind (withtypes, "and", depth - 1) ); ppEndBlock pprint () ) | DatatypeReplication {newType, oldType} => ( ppBeginBlock pprint (3, true); ppAddString pprint "datatype"; ppBreak pprint (1, 0); ppAddString pprint newType; ppBreak pprint (1, 0); ppAddString pprint "="; ppBreak pprint (1, 0); ppAddString pprint "datatype"; ppBreak pprint (1, 0); ppAddString pprint oldType; ppEndBlock pprint () ) | AbstypeDeclaration {typelist, withtypes, declist} => ( ppBeginBlock pprint (3, true); ppAddString pprint "abstype"; ppBreak pprint (1, 0); printList printDatatypeBind (typelist, "and", depth - 1); ppBreak pprint (1, 0); if null withtypes then () else ( ppAddString pprint "withtype"; ppBreak pprint (1, 0); printList printTypeBind (withtypes, "and", depth - 1); ppBreak pprint (1, 0) ); ppAddString pprint "with"; ppBreak pprint (1, 0); ppBeginBlock pprint (3, true); displayList (#1 (ListPair.unzip declist), ";", depth - 1); ppEndBlock pprint (); ppEndBlock pprint () ) | ExpSeq ptl => ( ppBeginBlock pprint (3, true); ppAddString pprint "("; ppBreak pprint (0, 0); displayList (#1 (ListPair.unzip ptl), ";", depth - 1); ppBreak pprint (0, 0); ppAddString pprint ")"; ppEndBlock pprint () ) | Directive {fix, tlist} => ( ppBeginBlock pprint (3, true); displayFixStatus (fix, depth, pprint); ppBreak pprint (1, 0); printList (fn (name, _, pprint) => ppAddString pprint name) (tlist, "", depth - 1); ppEndBlock pprint () ) | ExDeclaration pt => let fun printExBind (ExBind {name, typeof, previous, ...}, depth, pprint) = ( ppBeginBlock pprint (0, false); ppAddString pprint name; if isEmpty typeof then () else ( ppBreak pprint (1, 0); ppAddString pprint "of"; ppBreak pprint (1, 0); display (typeof, depth, pprint, true) ); if isEmptyTree previous then () else ( ppBreak pprint (1, 0); ppAddString pprint "="; ppBreak pprint (1, 0); ptDisplay (previous, depth - 1, pprint) ); ppEndBlock pprint () ) in ppBeginBlock pprint (3, true); ppAddString pprint "exception"; ppBreak pprint (1, 0); printList printExBind (pt, "and", depth - 1); ppEndBlock pprint () end | Raise pt => ( ppBeginBlock pprint (0, false); ppAddString pprint "raise"; ppBreak pprint (1, 0); ptDisplay (pt, depth - 1, pprint); ppEndBlock pprint () ) | HandleTree {exp, hrules} => ( ppBeginBlock pprint (0, false); ptDisplay (exp, depth - 1, pprint); ppBreak pprint (1, 0); ppBeginBlock pprint (3, true); ppAddString pprint "handle"; ppBreak pprint (1, 0); displayList (hrules, "|", depth - 1); ppEndBlock pprint (); ppEndBlock pprint () ) | While {test, body} => ( ppBeginBlock pprint (0, false); ppAddString pprint "while"; ppBreak pprint (1, 0); ptDisplay (test, depth - 1, pprint); ppBreak pprint (1, 0); ppAddString pprint "do"; ppBreak pprint (1, 0); ptDisplay (body, depth - 1, pprint); ppEndBlock pprint () ) | Case {test, match} => ( ppBeginBlock pprint (3, true); ppBeginBlock pprint (0, false); ppAddString pprint "case"; ppBreak pprint (1, 0); ptDisplay (test, depth - 1, pprint); ppBreak pprint (1, 0); ppAddString pprint "of"; ppEndBlock pprint (); ppBreak pprint (1, 0); displayList (match, "|", depth - 1); ppEndBlock pprint () ) | Andalso {first, second} => ( ppBeginBlock pprint (3, true); ptDisplay (first, depth - 1, pprint); ppBreak pprint (1, 0); ppAddString pprint "andalso"; ppBreak pprint (1, 0); ptDisplay (second, depth - 1, pprint); ppEndBlock pprint () ) | Orelse {first, second} => ( ppBeginBlock pprint (3, true); ptDisplay (first, depth - 1, pprint); ppBreak pprint (1, 0); ppAddString pprint "orelse"; ppBreak pprint (1, 0); ptDisplay (second, depth - 1, pprint); ppEndBlock pprint () ) | Labelled {recList, frozen, ...} => let fun displayRecList (c, depth) = if depth <= 0 then ppAddString pprint "..." else case c of [] => () | [(name, value)] => ( ppBeginBlock pprint (0, false); ppAddString pprint (name ^ " ="); ppBreak pprint (1, 0); ptDisplay (value, depth - 1, pprint); ppEndBlock pprint () ) | ((name, value)::vs) => ( ppBeginBlock pprint (0, false); ppBeginBlock pprint (0, false); ppAddString pprint (name ^ " ="); ppBreak pprint (1, 0); ptDisplay (value, depth - 1, pprint); ppEndBlock pprint (); ppBreak pprint (0, 0); ppAddString pprint ","; ppEndBlock pprint (); ppBreak pprint (1, 0); displayRecList (vs, depth - 1) ) (* end displayRecList *) in ppBeginBlock pprint (2, false); ppAddString pprint "{"; displayRecList (recList, depth - 1); if frozen then () else ppAddString pprint (if null recList then "..." else ", ..."); ppAddString pprint "}"; ppEndBlock pprint () end | Selector {name, ...} => ppAddString pprint ("#" ^ name) | EmptyTree => ppAddString pprint "" end; (* ptDisplay *) (* Error message routine. Used in both pass 2 and pass 3. *) fun errorNear (lex, hard, near, line, message) = let val printProc = if hard then errorProc else warningProc; in (* Puts out an error message and then prints the piece of tree. *) printProc (lex, line, fn (pprint:prettyPrinter) => let val parameters = debugParams lex val errorDepth = getParameter errorDepthTag parameters in ppBeginBlock pprint (0, false); ppAddString pprint message; ppBreak pprint (3, 0); ppBeginBlock pprint (0, false); ppAddString pprint "Found near"; ppBreak pprint (1, 0); ptDisplay (near, errorDepth, pprint); ppEndBlock pprint (); ppEndBlock pprint () end) end; (***************************************************************************** PASS 2 Identifier matching and type checking ******************************************************************************) (* Second pass of ML parse tree. *) (* This is pass 2 of the compiler. It walks over the parse tree generated by pass 1 and looks up identifiers to match them to declarations. It performs the type checking. "makeTypeId" is used to construct unique identifiers for types depending on the context (i.e. in a signature, structure or functor). *) fun pass2 (v, makeTypeId, env, lex, line, strName) = let (* Returns a function which can be passed to unify or apply to print a bit of context info. *) fun foundNear v (pprint: prettyPrinter) = let val parameters = debugParams lex val errorDepth = getParameter errorDepthTag parameters in ppAddString pprint "Found near"; ppBreak pprint (1, 0); ptDisplay (v, errorDepth, pprint) end; (* A simpler error message routine for lookup_... where the message does not involve pretty-printing anything. *) fun giveError (v, lex, line) = fn message => errorNear (lex, true, v, line, message); fun checkForBuiltIn (name, v, lex, lineno, isConstr) = (* ML97 does not allow the standard constructors to be rebound and does not allow "it" to become a constructor. *) if getParameter ml90Tag (debugParams lex) then () else if name = "true" orelse name = "false" orelse name = "nil" orelse name = "::" orelse name = "ref" orelse (isConstr andalso name = "it") then errorNear(lex, true, v, lineno, "Rebinding or specifying \"" ^ name ^ "\" is illegal") else () (* parameters re-ordered SPF 22/10/94 *) fun assignValues level letDepth line env near v = let (* Process each item of the sequence and return the type of the last item. A default item is returned if the list is empty. *) fun assignSeq env depth (l: (parsetree * int) list) = let fun applyList last [] = last | applyList last ((h, line) :: t) = applyList (assignValues level depth line env v h) t in applyList badType l end; fun ptAssignTypes t near line = assignTypes (t, fn s => lookupTyp ({lookupType = #lookupType env, lookupStruct = #lookupStruct env}, s, giveError (near, lex, line)), lex, line); (* Makes a type for an instance of an identifier. In the case of exceptions this means converting the type into a function and in the case of values or other constructors of making a copy of the type to create new instances of type variables. isExp is true if this an expression, false if it is a pattern. Generic imperative type variables are turned into ordinary type variables in patterns. *) fun instanceType (Value{class = Exception, typeOf, ...}) isExp = (* If this is an exception the type is either exn or t -> exn. *) if isEmpty typeOf then exnType else mkFunctionType (typeOf, exnType) | instanceType (v as Value{access=Overloaded _, ...}) isExp = (* Look up the current overloading for this function. *) overloadType(v, false) | instanceType (Value{typeOf, ...}) isExp = (* The types of constructors and variables are copied to create new instances of type variables. *) generalise (typeOf, isExp); fun processPattern pat enterResult level notConst isRec line = let val mapProcessPattern = map (fn x => processPattern x enterResult level notConst isRec line); in case pat of Ident {name, value, typeof} => (* Variable or nullary constructor. *) let (* Look up the name. If it is a constructor then use it, otherwise return `undefined'. If it is a qualified name, i.e. it contains a full-stop, we assume it is a constructor and give an error message if it does not exist. *) (* In ML 97 recursive declarations such as val rec f = ... override constructor status. If this is a recursive declaration we don't check for constructor status. *) val names = splitString name; val nameVal = if not (getParameter ml90Tag (debugParams lex)) andalso isRec then undefinedValue else if #first names = "" then (* Not qualified - may be a variable. *) getOpt (#lookupVal env name, undefinedValue) else (* Qualified - cannot be a variable. *) lookupValue ("Constructor", {lookupVal= #lookupVal env, lookupStruct= #lookupStruct env}, name, giveError (pat, lex, line)); val instanceType = (* If the result is a constructor use it. *) if isConstructor nameVal (* exceptions. *) then ( if notConst then errorNear (lex, true, pat, line, "Identifier before `as' must not be a constructor") else (); (* set this value in the record *) value := nameVal; (* Must be a nullary constructor otherwise it should have been applied to something. *) let val isNullary = case nameVal of Value{class=Constructor{nullary}, ...} => nullary | Value{typeOf, ...} => (* exception *) isEmpty typeOf in if isNullary then () else errorNear (lex, true, pat, line, "Constructor must be applied to something.") end; instanceType nameVal false (* pattern *) ) (* If undefined or another variable, construct a new variable. *) else let val var = mkVar (name, mkTypeVar (level, false, false, false)); in checkForDots (name, lex, line); (* Must not be qualified *) (* Must not be "true", "false" etc. *) checkForBuiltIn (name, v, lex, line, false); enterResult (name, var); value := var; valTypeOf var (* and return its type *) end; in typeof := instanceType; instanceType end | Literal{converter, typeof, ...} => let (* Find out the overloadings on this converter and construct an instance of it. The converters are all functions from string to the result type. *) val instanceType = overloadType(converter, true) (* Apply the converter to string to get the type of the literal. *) val instance = apply(instanceType, stringType, lex, line, foundNear pat) in typeof := instance; (* Remember it *) instance end | Applic {f = con, arg} => let (* Apply the function to the argument and return the result. *) (* Function must be a constructor. *) val conType = case con of Ident {name, value, ...} => let (* Look up the value and return the type. *) val constrVal = lookupValue ("Constructor", {lookupVal = #lookupVal env, lookupStruct = #lookupStruct env}, name, giveError (pat, lex, line)); in if isConstructor constrVal then let val U : unit = value := constrVal; in instanceType constrVal false (* pattern *) end else let (* Undeclared or a variable. *) val U : unit = if isUndefinedValue constrVal then () else errorNear (lex, true, pat, line, name ^ " is not a constructor") in badType end end | _ => (* con is not an Ident *) let val U : unit = errorNear (lex, true, pat, line, "Constructor in a pattern was not an identifier"); in badType end; val patType = processPattern arg enterResult level notConst isRec line; in apply (conType, patType, lex, line, foundNear pat) end (* Applic *) | TupleTree ptl => (* Construct the type obtained by mapping "processPattern" onto each element of the tuple. *) mkProductType (mapProcessPattern ptl) | Labelled {recList, frozen, typeof} => let (* Process each item in the list. *) fun mapLabels [] = [] | mapLabels ((name, value)::T) = (* Type is a label entry with the label name and the type of the pattern. *) mkLabelEntry (name, processPattern value enterResult level notConst isRec line) :: mapLabels T; val patType = mkLabelled (sortLabels (mapLabels recList, fn msg => errorNear (lex, true, pat, line, msg)), frozen); in typeof := patType; patType end | List ptl => let (* Applies "processPattern" to every element of a list and unifies the types. Returns a type variable if the list is empty *) fun processList tlist = let (* Construct a type variable and unite all the types to that. *) val basicType = mkTypeVar (generalisable, false, false, false); fun applyList [] = () | applyList (h::t) = let val typ = processPattern h enterResult level notConst isRec line val U : unit = unify (typ, basicType, lex, line, foundNear pat); in applyList t end; in applyList tlist; basicType (*Return the type variable - united to all the types*) end (* processList *); in mkTypeConstruction ("list", listType, [processList ptl]) end | Constraint {value, given} => let val valType = processPattern value enterResult level notConst isRec line; val U : unit = ptAssignTypes given pat line; (* These must be unifiable. *) val U : unit = unify (valType, given, lex, line, foundNear pat); in given end | Layered {var, pattern} => let (* Unify the variable and the pattern - At this stage that simply involves assigning the type of the pattern to the variable, but it may result in more unification when the variable is used *) (* The "variable" must be either id or id: ty but we have to check that the id is not a constructor. *) val varType = processPattern var enterResult level true isRec line; val patType = processPattern pattern enterResult level notConst isRec line val U : unit = unify (varType, patType, lex, line, foundNear pat); in varType end | Unit => unitType | WildCard => mkTypeVar (generalisable, false, false, false) | _ => (* not a legal pattern *) badType end; (* processPattern *) (* Applies "assignValues" to every element of a list and unifies the types. Returns a type variable if the list is empty. *) fun assignList tlist = let (* Construct a type variable and unite all the types to that. *) val basicType = mkTypeVar (generalisable, false, false, false); fun applyList [] = () | applyList (h::t) = let val typ = assValues v h; val U : unit = unify (typ, basicType, lex, line, foundNear v); in applyList t end; in applyList tlist; basicType (* Return the type variable - united to all the types *) end (* assignList *) (* val assValues = assignValues level line env; *) and assValues near v = case v of Ident {name, value, typeof} => let val expValue = lookupValue ("Value or constructor", {lookupVal = #lookupVal env, lookupStruct = #lookupStruct env}, name, giveError (near, lex, line)); (* Set the value and type found. *) val instanceType = instanceType expValue true (* expression *); in value := expValue; typeof := instanceType; instanceType (* Result is the instance type. *) end | Literal{converter, typeof, ...} => let (* Find out the overloadings on this converter and construct an instance of it. The converters are all functions from string to the result type. *) val instanceType = overloadType(converter, true) val instance = apply(instanceType, stringType, lex, line, foundNear near) in typeof := instance; (* Remember it *) instance end | Applic {f, arg} => let (* Apply the function to the argument and return the result. *) val funType = assValues near f; (* SPF 22/10/94 *) val argType = assValues near arg; in apply (funType, argType, lex, line, foundNear near) end | Cond {test, thenpt, elsept} => let (* The test must be bool, and the then and else parts must be the same. The result is either of these two once they have been unified. *) val testType = assValues v test; val U : unit = unify (testType, boolType, lex, line, foundNear v); val thenType = assValues v thenpt; val elseType = assValues v elsept; val U : unit = unify (thenType, elseType, lex, line, foundNear v); in thenType (* or equally elseType *) end | TupleTree ptl => (* Construct the type obtained by mapping "assignValue" onto each element of the tuple. *) mkProductType (map (assValues near) ptl) (* SPF 22/10/94 *) | Labelled {recList, frozen, typeof} => let (* Process each item in the list. *) fun msgFn msg = errorNear (lex, true, v, line, msg); fun labEntryToLabType (name, value) = {name = name, typeof = assValues v value } val expType = mkLabelled (sortLabels (map labEntryToLabType recList, msgFn), frozen) (* should always be true *); in typeof := expType; expType end | Selector {typeof, ...} => typeof (* Already made. *) | ValDeclaration {dec, explicit, implicit, variables} => assValDeclaration dec explicit implicit variables | FunDeclaration {dec, explicit, implicit} => assFunDeclaration dec explicit implicit | OpenDec{decs=ptl, variables} => let (* Go down the list of names opening the structures. *) (* We have to be careful because open A B is not the same as open A; open B if A contains a structure called B. *) (* We accumulate the values so that we can produce debugging information if we need to. Note: we have to be careful if we have the same name in multiple structures. *) val valTable = HashTable.hashMake 10 (* First get the structures... *) fun findStructure ({name, ...}: structureIdentForm) = lookupStructure ("Structure", {lookupStruct = #lookupStruct env}, name, giveError (v, lex, line)) val strs : structVals list = map findStructure ptl; (* Value and substructure entries in a structure will generally have "Formal" access which simply gives the offset of the entry within the parent structure. We need to convert these into "Select" entries to capture the address of the base structure. *) fun copyEntries str = if isUndefinedStruct str then () else let val sigTbl = structSignat str; (* Get the tables. *) fun copyEntry (dName, dVal, ()) = if (tagIs typeConstrVar dVal) then let (* If this is a datatype we have to apply mkSelectedVar to the value constructors. It will not do anything if the constructors are global but if we are opening the argument to a functor we need to do this. It's essential if we subsequently replicate this datatype. Note: we don't add the value constructors to the environment at this point. While a signature cannot contain values which "mask" constructors we can have a structure containing values which mask constructors. *) val tcons = tagProject typeConstrVar dVal in #enterType env (dName, if null(tcConstructors tcons) then tcons (* Not a datatype. *) else mkSelectedType(tcons, tcName tcons, SOME str)) end else if (tagIs valueVar dVal) then let (* If this is a datatype we could use findValueConstructor here to save constructing a new object. It's probably not worth it. *) val selectedVar = mkSelectedVar (tagProject valueVar dVal, str); in HashTable.hashSet(valTable, dName, selectedVar); #enterVal env (dName, selectedVar) end else if (tagIs structVar dVal) then let val selectedStruct = makeSelectedStruct (tagProject structVar dVal, str); in #enterStruct env (dName, selectedStruct) end else () in univFold (sigTab sigTbl, copyEntry, ()) end (* ...then put them into the name space. *) val () = List.app copyEntries strs; in variables := HashTable.hashFold valTable (fn _ => fn v => fn t => v :: t) []; badType (* Does not return a type *) end | TypeDeclaration tlist => let (* Non-generative type binding *) fun messFn name = errorNear (lex, true, v, line, name ^ " has already been bound in this declaration"); val newEnv = noDuplicates messFn; (* First match all the types on the right-hand sides. *) fun processTypeBody (TypeBind {decType, ...}) = ptAssignTypes decType v line val () = List.app processTypeBody tlist; (* Can now declare the new types. *) fun processType (TypeBind {name, typeVars, decType, isEqtype}) = let (* Construct a type constructor which is an alias of the right-hand side of the declaration. If the right-hand side were a type constructor we could use the same unique id, but it is probably not worth it. *) val tcon = makeTypeConstrs (strName ^ name, typeVars, decType, makeTypeId (), isEqtype (* In most cases we look at the equivalent. *), 0 (* This is only required for datatypes. *)); in checkForDots (name, lex, line); (* Must not be qualified *) #enter newEnv (name, tcon); (* Check for duplicates. *) #enterType env (name, tcon) (* Put in the surrounding scope. *) end val () = List.app processType tlist; in badType (* Does not return a type *) end | DatatypeDeclaration {typelist, withtypes, declist} => assAbsData false typelist withtypes declist | AbstypeDeclaration {typelist, withtypes, declist} => assAbsData true typelist withtypes declist | DatatypeReplication{oldType, newType} => (* Adds both the type and the constructors to the current environment. *) let (* Look up the type constructor in the environment. *) val oldTypeCons: typeConstrs = lookupTyp ({lookupType = #lookupType env, lookupStruct = #lookupStruct env}, oldType, giveError (near, lex, line)); (* If the type name was qualified (e.g. S.t) we need to find the value constructors from the same structure. *) val {first = namePrefix, ...} = splitString oldType; val baseStruct = if namePrefix = "" then NONE else SOME(lookupStructure("Structure", {lookupStruct = #lookupStruct env}, namePrefix, giveError (v, lex, line))) (* Copy the datatype, converting any Formal constructors to Selected. *) val newTypeCons = mkSelectedType(oldTypeCons, strName ^ newType, baseStruct) val newValConstrs = tcConstructors newTypeCons in (* Check that it has at least one constructor. *) case newValConstrs of [] => errorNear (lex, true, v, line, oldType ^ " is not a datatype") | _ => (); (* Enter the value constrs in the environment. *) List.app (fn c => (#enterVal env) (valName c, c)) newValConstrs; (* Add this type constructor to the environment. *) (#enterType env) (newType, newTypeCons); badType (* Does not return a type *) end | List ptl => mkTypeConstruction ("list", listType, [assignList ptl]) | Constraint {value, given} => let val valType = assValues near value; (* SPF 22/10/94 *) val U : unit = ptAssignTypes given v line; (* These must be unifiable. *) val U : unit = unify (valType, given, lex, line, foundNear v); in given end | Fn ptl => (* Must unify the types of each of the alternatives.*) assignList ptl | MatchTree {vars, exp, line, resType, argType} => let (* A match is a function from the pattern to the expression *) (* Process the pattern looking for variables. *) (* Construct a new environment for the variables. *) fun messFn name = errorNear (lex, true, v, line, name ^ " has already been bound in this match"); val newEnv = noDuplicates messFn; val newLevel = level + 1; val decs = processPattern vars (#enter newEnv) newLevel false false line; (* The identifiers declared in the pattern are available in the body of the function. *) val bodyEnv = { lookupVal = lookupDefault (#lookup newEnv) (#lookupVal env), lookupType = #lookupType env, lookupFix = #lookupFix env, lookupStruct = #lookupStruct env, lookupSig = #lookupSig env, lookupFunct = #lookupFunct env, lookupTvars = #lookupTvars env, enterVal = #enterVal env, enterType = #enterType env, enterFix = #enterFix env, enterStruct = #enterStruct env, enterSig = #enterSig env, enterFunct = #enterFunct env }; (* Now the body. *) val expType = assignValues newLevel letDepth line bodyEnv v exp; in resType := expType; argType := decs; (* Check the type of parameters to the function to make sure they have not been unified with local datatypes. We don't need to check the result type because the check in "Localdec" will do that. *) checkForLocalDatatypes(decs, letDepth, giveError (v, lex, line)); (* Result is a function from the type of the pattern to the type of the body. This previously generalised the resulting type. Why? *) mkFunctionType (decs, expType) end (* MatchTree *) | Unit => unitType | Localdec {decs, body, loc, varsInBody} => let (* Local declarations or expressions. *) val newValEnv = searchList(); val newTypeEnv = searchList(); val newStrEnv = searchList(); val newLetDepth = if loc then letDepth else letDepth+1; (* The environment for the local declarations. *) val localEnv = { lookupVal = lookupDefault (#lookup newValEnv) (#lookupVal env), lookupType = lookupDefault (#lookup newTypeEnv) (#lookupType env), lookupFix = #lookupFix env, (* This environment is needed if we open a structure which has sub-structures. *) lookupStruct = lookupDefault (#lookup newStrEnv) (#lookupStruct env), lookupSig = #lookupSig env, lookupFunct = #lookupFunct env, lookupTvars = #lookupTvars env, enterVal = #enter newValEnv, enterType = #enter newTypeEnv, (* Fixity has already been dealt with in the parsing process. The only reason we deal with it here is to ensure that declarations are printed in the correct order. We simply need to make sure that local fixity declarations are ignored. *) enterFix = fn _ => (), enterStruct = #enter newStrEnv, enterSig = #enterSig env, enterFunct = #enterFunct env }; (* Process the local declarations and discard the result. *) val U : types = assignSeq localEnv newLetDepth decs; (* This is the environment used for the body of the declaration. Declarations are added both to the local environment and to the surrounding scope. *) val bodyEnv = { (* Look-ups come from the local environment *) lookupVal = #lookupVal localEnv, lookupType = #lookupType localEnv, lookupFix = #lookupFix localEnv, lookupStruct = #lookupStruct localEnv, lookupSig = #lookupSig localEnv, lookupFunct = #lookupFunct localEnv, lookupTvars = #lookupTvars localEnv, enterVal = fn (pair as (name, v)) => (varsInBody := v :: ! varsInBody; #enter newValEnv pair; #enterVal env pair), enterType = fn (pair as (name, v)) => (#enter newTypeEnv pair; #enterType env pair), enterFix = #enterFix env, enterStruct = fn (pair as (name, v)) => (#enter newStrEnv pair; #enterStruct env pair), enterSig = #enterSig env, enterFunct = #enterFunct env }; (* Now the body, returning its result if it is an expression. *) val resType = assignSeq bodyEnv newLetDepth body in (* If this is a let expression we have to check that there are no datatypes escaping. *) if loc then () else checkForLocalDatatypes(resType, letDepth, giveError (v, lex, line)); resType end (* LocalDec *) | ExpSeq ptl => (* A sequence of expressions separated by semicolons. Result is result of last expression. *) assignSeq env letDepth ptl | ExDeclaration tlist => let fun messFn name = errorNear (lex, true, v, line, name ^ " has already been bound in this declaration"); (* Construct an environment to check for duplicate declarations. There is no need for a value since all this is doing is checking. *) val dupEnv = noDuplicates messFn; fun processException (ExBind {name, previous, typeof, value}) = let (* Fill in any types *) val U : unit = ptAssignTypes typeof v line; val U : unit = if isEmpty typeof then () else let (* Make the type weak. *) val weakTv = mkTypeVar (generalisable, false, false, true); in unify (typeof, weakTv, lex, line, foundNear v) end; val exValue = case previous of EmptyTree => (* Generative binding. *) mkEx (name, typeof) | Ident {name = prevName, value = prevValue, ...} => let (* ex = ex' i.e. a non-generative binding? *) (* Match up the previous exception. *) val prev = lookupValue ("Exception", {lookupVal= #lookupVal env, lookupStruct= #lookupStruct env}, prevName, giveError (v, lex, line)) in (* Check that it is an exception *) case prev of Value{class=Exception, ...} => () | _ => errorNear (lex, true, v, line, "(" ^ prevName ^ ") is not an exception."); prevValue := prev; (* Set the value of the looked-up identifier. *) (* The result is an exception with the same type. *) mkEx (name, valTypeOf prev) end | _ => raise InternalError "processException: badly-formed parse-tree" in (* Save this value. *) value := exValue; (* In the check environment *) #enter dupEnv (name, emptyType); (* Must not be qualified *) checkForDots (name, lex, line) : unit; (* Must not be "true", "false" etc. *) checkForBuiltIn (name, v, lex, line, true) : unit; (* Put this exception into the env *) #enterVal env (name, exValue) end val () = List.app processException tlist; in badType end (* ExDeclaration *) | Raise pt => let val exType = assValues v pt; (* The exception value must have type exn. *) val U : unit = unify (exnType, exType, lex, line, foundNear v); in (* Matches anything *) mkTypeVar (generalisable, false, false, false) end | HandleTree {exp, hrules} => let (* If the expression returns type E the handler must be exn -> E *) val expType = assValues v exp; (* Unify the handler with a function from exn -> expType *) val U : unit = unify (assignList hrules, mkFunctionType (exnType, expType), lex, line, foundNear v); in expType (* Result is expType. *) end | While {test, body} => let val testType = assValues v test; (* Test must be bool. Result is unit *) val U : unit = unify (testType, boolType, lex, line, foundNear v); (* Result of body is discarded. *) val U : types = assValues v body; in unitType end | Case {test, match} => let val funType = assignList match; val argType = assValues v test; in (* The matches constitute a function from the test type to the result of the case statement, so we apply the match type to the test. *) apply (funType, argType, lex, line, foundNear v) end | Andalso {first, second} => let (* Both parts must be bool and the result is bool. *) val fstType = assValues v first; val U : unit = unify (fstType, boolType, lex, line, foundNear v); val sndType = assValues v second; val U : unit = unify (sndType, boolType, lex, line, foundNear v); in boolType end | Orelse {first, second} => let (* Both parts must be bool and the result is bool. *) val fstType = assValues v first; val U : unit = unify (fstType, boolType, lex, line, foundNear v); val sndType = assValues v second; val U : unit = unify (sndType, boolType, lex, line, foundNear v); in boolType end | Directive { tlist, fix } => ( (* Infix declarations have already been processed by the parser. We include them here merely so that we get all declarations in the correct order. *) List.app (fn name => #enterFix env (name, fix)) tlist; badType ) | WildCard => (* Should never occur in an expression. *) raise InternalError "assignTypes: wildcard found" | Layered _ => raise InternalError "assignTypes: layered pattern found" | EmptyTree => raise InternalError "assignTypes: emptytree found" (* end of assValues *) and assValDeclaration (valdecs: valbind list) explicit implicit variables = let val newLevel = level + 1; (* Set the scope of explicit type variables. *) val U: unit = #apply explicit(fn (_, tv) => setTvarLevel (tv, newLevel)); (* For each implicit type variable associated with this value declaration, link it to any type variable with the same name in an outer scope. *) val () = #apply implicit (fn (name, tv) => case #lookupTvars env name of SOME v => linkTypeVars(v, tv) | NONE => setTvarLevel (tv, newLevel)); (* If it isn't there set the level of the type variable. *) (* Construct a new environment for the variables. *) val newEnv = noDuplicates (fn name => errorNear (lex, true, v, line, name ^ " has already been bound in this declaration")); (* This environment is those identifiers declared by recursive bindings *) val recEnv = searchList (); (* If this is a recursive declaration we will have to find all the variables declared by the patterns in each binding before we can look at the bodies of the bindings. For simplicity we process the patterns first even if this is not recursive but arrange for the variables to be added to the environment after rather than before processing the bodies. The result of processing the patterns is a list of their types. Each item in the list must be unified with the type of the corresponding body. *) (* Process the patterns. *) fun mapProcess [] isRec = [] | mapProcess (RecValBind :: tlist) isRec = (* If we have val x=1 and rec ... we will have an and-list as the last element of the list. (It must be the last because the inner and-list will swallow all the rest). All those entries will be recursive. *) mapProcess tlist true | mapProcess ((ValBind {dec,line,...}) :: ptl) isRec = let (* To check that every binding actually declares something i.e. to catch val _ = 99, we enter the names through the following environment. *) val nothingEntered = ref true; fun enterVals (pair as (name, v)) = (nothingEntered := false; #enter newEnv pair; if isRec then #enter recEnv pair else ()); val patType = processPattern dec enterVals newLevel false isRec line; (* Give a warning if no variables are declared, except at top level. This check was removed in ML97. *) in if !nothingEntered andalso level <> 1 andalso getParameter ml90Tag (debugParams lex) then errorNear (lex, false, dec, line, "Pattern does not declare any variables.") else (); patType :: mapProcess ptl isRec end; val decs = mapProcess valdecs false; (* Now the bodies. *) (* Check that the types match by going down the list of value bindings and the list of types produced from the patterns, and matching corresponding types. *) fun checkTypes [] [] isRec = () | checkTypes dl (RecValBind :: tlist) isRec = checkTypes dl tlist true | checkTypes (d::dl) ((ValBind {dec, exp, line,...}) :: ptl) isRec = let val newEnv = { (* If this is recursive we find the recursive names and others in the surrounding scope. *) lookupVal = if isRec then lookupDefault (#lookup recEnv) (#lookupVal env) else #lookupVal env, lookupType = #lookupType env, lookupFix = #lookupFix env, lookupStruct = #lookupStruct env, lookupSig = #lookupSig env, lookupFunct = #lookupFunct env, (* Extend the environment of type variables. *) lookupTvars = lookupDefault (#lookup explicit) (lookupDefault (#lookup implicit) (#lookupTvars env)), enterVal = #enterVal env, enterType = #enterType env, enterFix = #enterFix env, enterStruct = #enterStruct env, enterSig = #enterSig env, enterFunct = #enterFunct env } val typ = assignValues newLevel letDepth line newEnv exp exp; val U : unit = unify (d, typ, lex, line, foundNear v); (* true if the expression is a possibly-constrained fn-expression *) fun isConstrainedFn (exp : parsetree) : bool = case exp of Constraint {value, ...} => isConstrainedFn value | Fn _ => true | _ => false; in (* Must check that the expression is of the form FN match. *) (* N.B. the code generator assumes this is true. *) if isRec andalso not (isConstrainedFn exp) then errorNear (lex, true, v, line, "Recursive declaration is not of the form `fn match'") else (); checkTypes dl ptl isRec end | checkTypes decs _ isRec = raise InternalError "checkTypes: badly-formed parse-tree"; (* Variables, constructors and fn are non-expansive. [] is a derived form of "nil" so must be included. Integer and string constants are also constructors but cannot involve imperative type variables. Constrained versions are also non-expansive. This has been extended and made more explicit in ML 97. *) fun nonExpansive (Fn _) = true | nonExpansive (Ident _) = true | nonExpansive (List []) = true | nonExpansive (List elems) = not (getParameter ml90Tag (debugParams lex)) andalso List.foldl (fn (v, a) => a andalso nonExpansive v) true elems | nonExpansive (Constraint {value, ...}) = nonExpansive value | nonExpansive (Literal _) = true | nonExpansive Unit = true | nonExpansive (TupleTree elems) = not (getParameter ml90Tag (debugParams lex)) andalso List.foldl (fn (v, a) => a andalso nonExpansive v) true elems | nonExpansive (Labelled{recList, ...}) = not (getParameter ml90Tag (debugParams lex)) andalso List.foldl (fn ((n, v), a) => a andalso nonExpansive v) true recList (* Every element must be non-expansive *) | nonExpansive (Applic{f, arg}) = not (getParameter ml90Tag (debugParams lex)) andalso isNonRefConstructor f andalso nonExpansive arg | nonExpansive (Selector _) = not (getParameter ml90Tag (debugParams lex)) (* derived from fn {..} => ...*) | nonExpansive _ = false (* An application is non-expansive only if it is a, possibly constrained, constructor which is not ref. *) and isNonRefConstructor (Ident {value=ref v, name, ...}) = (* Rather than looking at the name it might be better to look at the operation. This is probably ok since we're not allowed to rebind "ref". *) isConstructor v andalso name <> "ref" | isNonRefConstructor (Constraint {value, ...}) = isNonRefConstructor value | isNonRefConstructor _ = false (* Now allow generalisation on the variables being declared. For imperative type variables we have to know whether the expression is expansive. *) fun allowGen decs [] = () | allowGen decs (RecValBind :: tlist) = allowGen decs tlist | allowGen (d::dl) ((ValBind {exp, line,...}) :: ptl) = let val U : unit = allowGeneralisation (d, newLevel, nonExpansive exp, lex, line, foundNear v); (* Check the type to make sure that a local datatype is not escaping. Checking here is really only needed in the recursive case (where a recursive call inside the body sets the type of the function) because the result will be checked elsewhere. *) val U: unit = checkForLocalDatatypes(d, letDepth, giveError (v, lex, line)) in allowGen dl ptl end (* allowGen *) | allowGen _ _ = raise InternalError "allowGen: badly-formed parse-tree"; val U : unit = checkTypes decs valdecs false; val U : unit = allowGen decs valdecs; (* And declare the new names into the surrounding environment. *) val U : unit = #apply newEnv (fn nv as (_, var) => (#enterVal env nv; variables := var :: !variables)); in badType (* Type should not be used *) end (* assValDeclaration *) and assFunDeclaration (tlist: fvalbind list) explicit implicit = let val funLevel = level + 1; (* Level for function names. *) (* Set the scope of explicit type variables. *) val U: unit = #apply explicit(fn (name, tv) => setTvarLevel (tv, funLevel)); (* For each implicit type variable associated with this value declaration, link it to any type variable with the same name in an outer scope. *) val () = #apply implicit (fn (name, tv) => case #lookupTvars env name of SOME v => linkTypeVars(v, tv) | NONE => setTvarLevel (tv, funLevel)); (* If it isn't there set the level of the type variable. *) (* Construct a new environment for the variables. *) fun msgFn name = errorNear (lex, true, v, line, name ^ " has already been bound in this declaration"); val newEnv = noDuplicates msgFn; fun getName pat = case pat of Constraint {value, ...} => getName value | Applic {f, arg} => getName f | Ident {name, ...} => name | _ => ""; (* error - report it later. *) fun getArity pat = case pat of Constraint {value, ...} => getArity value | Applic {f, arg} => getArity f + 1 | Ident {name, ...} => 0 | _ => 0; (* error - report it later. *) (* Since this is a recursive declaration we must get the function names first. Because of the way they are parsed they are hidden as applications of the function to one or more patterns. There may be more than one clause in a function binding but each should declare the same function and have the same number of patterns. We need to know the number of patterns and the function name in the third pass so we save them in the function binding. *) (* findNameAndPatts. Find the name and number of patterns in the first of the clauses. The other clauses should be the same. We check that later. *) fun findNameAndPatts (FValBind {clauses = (FValClause {dec, exp, line}::_), numOfPatts, functVar, ...}) = let (* Just look at the first clause for the moment. *) val name = getName dec; val arity = getArity dec; (* Declare a new identifier with this name. *) val funVar = mkVar (name, mkTypeVar (funLevel, false, false, false)); val U : unit = numOfPatts := arity; val U : unit = (* Put the results onto the function binding. *) if arity = 0 then errorNear (lex, true, v, line, "Clausal function does not have any parameters.") else (); in if name <> "" then let (* Must not be qualified *) val U : unit = checkForDots (name, lex, line); (* Must not be "true", "false" etc. but may be "it" *) val U : unit = checkForBuiltIn (name, v, lex, line, false) : unit; (* Look up the name to check it isn't a constructor. *) (* This check no longer applies in ML97. *) val value = getOpt(#lookupVal env name, undefinedValue); val U :unit = if getParameter ml90Tag (debugParams lex) andalso isConstructor value then errorNear (lex, true, v, line, "Variable " ^ String.toString name ^ " already declared as a constructor") else () val U : unit = functVar := funVar; in (* Enter it in the environment. *) #enter newEnv (name, funVar) end else () end | findNameAndPatts _ = raise InternalError "findNameAndPatts: badly-formed parse-tree"; val () = List.app findNameAndPatts tlist; (* Can now process the clausal functions in the environment of the function names and using the information about function name and number of patterns we have saved. *) fun processFun (FValBind {clauses, numOfPatts, functVar, argType, resultType})= let val functVar = !functVar; (* Each fun binding in the declaration may consist of several clauses. Each must have the same function name, the same number of patterns and a unifiable type. *) fun processClause (FValClause {dec, exp, line}) = let (* Each clause is a val binding with the function and patterns as the `pattern' and the function body as the `expression' *) (* Construct a new environment for the variables in the patts. *) fun messFn name = errorNear (lex, true, dec, line, name ^ " has already been bound in this clause."); val varEnv = noDuplicates messFn; val varLevel = funLevel + 1; (* Level for variables. *) (* Processes a single alternative. Similar to processPattern. A variable for the function being declared is passed as a parameter so that its type can be used for the result. *) fun doPatterns pat numOfPats : types * types list = case pat of Constraint {value, given} => let (* Check the constraint against the returned type. *) val (patType, argTypes) = doPatterns value numOfPats; val U : unit = ptAssignTypes given pat line; (* These must be unifiable. *) val U : unit = unify (patType, given, lex, line, foundNear dec); in (patType, argTypes) end | Applic {f, arg} => let (* Apply the function to this pattern. Return the result type. This will have the effect of making the function we are declaring into a function from the type of the pattern to some other type yet to be determined. This type will be found when we unify with the body of the function. *) val (funType, argTypes) = doPatterns f (numOfPats - 1); val argType = processPattern arg (#enter varEnv) varLevel false false line; in (apply (funType, argType, lex, line, foundNear dec), argType :: argTypes) end | Ident {name, value, ...} => let (* We have presumably reached the function name. *) val functName = valName functVar; in (* Must check this is the same name. *) if name = functName then () else errorNear (lex, true, dec, line, "In clausal function one clause defines "^ name ^ " and another defines " ^ functName); (* And it has the same number of patterns. *) if numOfPats = 0 then () else errorNear (lex, true, dec, line, "Clausal function contains clauses with " ^ "different numbers of patterns"); value := functVar; (valTypeOf functVar, []) (* Return function type. *) end | EmptyTree => (badType, []) | _ => let (* error *) val U : unit = errorNear (lex, true, pat, line, "Start of clausal function is not a variable") in (badType, []) end (* end doPatterns *); val (pattType, argTypeList) = doPatterns dec (!numOfPatts); val () = argType := (case argTypeList of [] => badType (* error *) | [single] => single | multiple => mkProductType(List.rev multiple)) (* The identifiers declared in the pattern are available in the body of the function. Since it is recursive the function names are also available. *) val bodyEnv = { lookupVal = lookupDefault (#lookup varEnv) (lookupDefault (#lookup newEnv) (#lookupVal env)), lookupType = #lookupType env, lookupFix = #lookupFix env, lookupStruct = #lookupStruct env, lookupSig = #lookupSig env, lookupFunct = #lookupFunct env, (* Extend the environment of type variables. *) lookupTvars = lookupDefault (#lookup explicit) (lookupDefault (#lookup implicit) (#lookupTvars env)), enterVal = #enterVal env, enterType = #enterType env, enterFix = #enterFix env, enterStruct = #enterStruct env, enterSig = #enterSig env, enterFunct = #enterFunct env }; (* Now the body. *) (* The type from `doPatterns' is the effect of applying the function to the patterns. This must be unified with the type of the expression which will set the result type of the function. *) val expTyp = assignValues varLevel letDepth line bodyEnv exp exp; in (* body of processClause *) (* Remember the result type for the debugger. Actually this assigns the result type for each clause in the fun but they will all be the same type because we've used the same variable for the function in each pattern. *) resultType := expTyp; (* Unify the pattern and the clause body. *) unify (pattType, expTyp, lex, line, foundNear dec) end in (* body of processFun *) List.app processClause clauses end val () = List.app processFun tlist; (* Now declare the new names into the surrounding environment, releasing the copy flags on the type variables. All fun bindings are non-expansive. *) val U : unit = #apply newEnv (fn (pair as (name, var)) => let val ty: types = valTypeOf var val U : unit = allowGeneralisation(ty, funLevel, true, lex, line, foundNear v); (* Check the type to make sure that a local datatype is not escaping as a result of a recursive application of the function to a local datatype. *) val U: unit = checkForLocalDatatypes(ty, letDepth, giveError (v, lex, line)) in #enterVal env pair end); in badType (* Type should not be used *) end (* FunDeclaration *) and assAbsData isAbs (typeList : datatypebind list) withtypes declist = let (* A type declaration causes a type to be entered in the type environment, together with some constructors. *) fun messFn name = errorNear (lex, true, v, line, name ^ " has already been bound in this declaration"); val newEnv = noDuplicates messFn; (* datatype and abstype declarations are both recursive so we can enter the type names into the environment during a first pass, and then process the value constructors during a second. *) fun enterType tcon typeName = ( checkForDots (typeName, lex, line) : unit; (* Must not be qualified *) #enter newEnv (typeName, tcon); (* Check for duplicates. *) #enterType env (typeName, tcon) (* and put in the enclosing scope *) ); (* Make the type constructors and put them in a list. *) fun enterTcon (DatatypeBind {name, tcon, typeVars, ...}) = let val tc = makeTypeConstrs (strName ^ name, typeVars, emptyType, makeTypeId (), false, letDepth) in tcon := tc; enterType tc name; tc end val listOfTypes = map enterTcon typeList; (* First match all the types on the right-hand sides using the datatypes and the existing bindings. *) fun processType (TypeBind {decType, ...}) = ptAssignTypes decType v line val () = List.app processType withtypes; (* Can now enter the `withtypes'. *) fun enterWithType (TypeBind {name, typeVars, decType, ...}) = let (* Construct a type constructor which is an alias of the right-hand side of the declaration. *) val tcon = makeTypeConstrs (strName ^ name, typeVars, decType, makeTypeId (), false, 0); in enterType tcon name end val () = List.app enterWithType withtypes; (* For the constructors *) fun messFn name = errorNear (lex, true, v, line, name ^ " has already been used as a constructor in this type"); val consEnv = noDuplicates messFn; (* Now process the types and generate the constructors. *) fun genValueConstrs (DatatypeBind {name, typeVars, constrs, ...}, typ) = let val numOfConstrs = length constrs; (* The new constructor applied to the type variables (if any) *) val resultType = mkTypeConstruction (name, typ, typeVars); (* Sort the constructors by name. This simplifies matching with datatypes in signatures. *) fun leq (xname: string, _) (yname, _) = xname < yname; val sortedConstrs = quickSort leq constrs; fun processConstr ((name, argtype), repn) = let val cons = if isEmpty argtype then mkGconstr (name, resultType, repn, true) else mkGconstr (name, mkFunctionType (argtype, resultType), repn, false); (* Name must not be qualified *) val U : unit = checkForDots (name, lex, line); (* Must not be "true", "false" etc. *) val U : unit = checkForBuiltIn (name, v, lex, line, true) : unit; (* Put into the environment. *) val U : unit = #enter consEnv (name, cons); in cons end (* processConstr *) (* Declares the constructors and return a list of them. *) fun decCons cs = let (* Match up identifiers to type constructors. *) (* This side-effects "argtype" to set equivalence fields *) val () = List.app(fn (_, t) => ptAssignTypes t v line) cs (* Choose the representation for the constructors. *) val reprs = chooseConstrRepr cs; in ListPair.map processConstr (cs,reprs) end; (* decCons*) in tcSetConstructors (typ, decCons sortedConstrs) : unit end (* genValueConstrs *) val U : unit = ListPair.app genValueConstrs (typeList, listOfTypes); (* Third pass - Check to see if equality testing is allowed for these types. No error messages should be produced. In ML90 we did not do this here for datatypes in signatures. Instead all the datatypes in a signature were analysed as a whole. *) val U : unit = genEqualityFunctions(listOfTypes, fn s => raise InternalError s, false) ; (* If this is a datatype declaration the value constructors should be entered in the surrounding scope, otherwise (abstract type declaration) we evaluate the declarations in an environment containing the value constructors, but the value constructors themselves do not appear in the surrounding scope. *) val U : unit = if not isAbs then #apply consEnv (#enterVal env) else let (* Abstract type *) (* The declarations have to be evaluated in an environment in which the constructors have been declared. When an identifier is looked up it may: (a) be one of these new declarations, or else (b) be a constructor from the type declarations, or else (c) be outside the abstract type declaration. New declarations are entered in the local environment so that they can be found under (a) and in the surrounding environment where they will be available after this declaration. *) val decEnv = let val localEnv = searchList (); fun enterValFn (pair as (name, v)) = (#enter localEnv pair; #enterVal env pair); val lookupValFn = lookupDefault (#lookup localEnv) (lookupDefault (#lookup consEnv) (#lookupVal env)) in { lookupVal = lookupValFn, lookupType = #lookupType env, lookupFix = #lookupFix env, lookupStruct = #lookupStruct env, lookupSig = #lookupSig env, lookupFunct = #lookupFunct env, lookupTvars = #lookupTvars env, enterVal = enterValFn, enterType = #enterType env, enterFix = #enterFix env, enterStruct = #enterStruct env, enterSig = #enterSig env, enterFunct = #enterFunct env } end; (* Process the declarations, discarding the result. *) val U : types = assignSeq decEnv letDepth declist; fun setConstructors (DatatypeBind {tcon=ref tc, valueConstrs, ...}) = ( tcSetEquality (tc, false); valueConstrs := tcConstructors tc; tcSetConstructors (tc, []) ) in (* Now clobber the equality operations and the constructor list - equality and printing are not allowed outside the abstract type declaration, and the type should not match a datatype in a signature. The problem is that we need the constructor list for exhaustiveness checking of patterns inside the abstype declaration but we do exhaustiveness checking during the code generation phase. *) List.app setConstructors typeList end; in badType (* Does not return a type *) end (* assAbsData *) in assValues near v end (* assignValues *); val Env gEnv = env val env = { lookupVal = #lookupVal gEnv, lookupType = #lookupType gEnv, lookupFix = #lookupFix gEnv, lookupStruct = #lookupStruct gEnv, lookupSig = #lookupSig gEnv, lookupFunct = #lookupFunct gEnv, lookupTvars = fn name => NONE, enterVal = #enterVal gEnv, enterType = #enterType gEnv, enterFix = #enterFix gEnv, enterStruct = #enterStruct gEnv, enterSig = #enterSig gEnv, enterFunct = #enterFunct gEnv }; in assignValues 1 0 line env v v end (* pass2 *); (***************************************************************************** PASS 3 Code Tree Generation ******************************************************************************) (* Generate code from ML parse tree. *) datatype environEntry = datatype DEBUGGER.environEntry local (* gencode *) (* Generates a block from a sequence of declarations/statements, unless there is only one, in which case it returns that one. *) fun mkblock [] = mkEnv [] (* Empty - generate ``void'' *) | mkblock [c] = c | mkblock clist = mkEnv clist; val singleArg = mkLoad (~1, 0); (* Make a tuple out of a set of arguments or return the single argument if there is just one. *) fun mkArgTuple from downto = let (* Makes a list of arguments. *) fun mkArgList num = if num < downto then [] else mkLoad (~ num, 0) :: mkArgList (num - 1); in if from = downto (* "tuple" is a singleton (SPF) *) then mkLoad (~ from, 0) else mkTuple (mkArgList from) end; (* Load args by selecting from a tuple. *) fun loadArgs size arg = let (* Makes arguments by taking apart the tuple. *) fun mkargs num = if num = size then [] else mkInd (num, arg) :: mkargs (num + 1); in if size = 1 (* "tuple" is a singleton (SPF) *) then [arg] else mkargs 0 end; (* tupleWidth returns the width of a tuple or record or 1 if it isn't one. It is used to detect both argument tuples and results. When used for arguments the idea is that frequently a tuple is used as a way of passing multiple arguments and these can be passed on the stack. When used for results the idea is to create the result tuple on the stack and avoid garbage collector and allocator time. If we could tell that the caller was simply going to explode it we would gain but if the caller needed a tuple on the heap we wouldn't. We wouldn't actually lose if we were going to create a tuple and return it but we would lose if we exploded a tuple here and then created a new one in the caller. This version of the code assumes that if we create a tuple on one branch we're going to create one on others which may not be correct. *) fun tupleWidth(TupleTree l) = List.length l | tupleWidth(Labelled{typeof, ...}) = if recordNotFrozen (! typeof) (* An error, but reported elsewhere. *) then 1 (* Safe enough *) else recordWidth (! typeof) | tupleWidth(Cond{thenpt, elsept, ...}) = let val w = tupleWidth thenpt in if w = 1 then tupleWidth elsept else w end | tupleWidth(Constraint{value, ...}) = tupleWidth value | tupleWidth(HandleTree{exp, ...}) = (* Look only at the expression and ignore the handlers on the, possibly erroneous, assumption that they won't normally be executed. *) tupleWidth exp | tupleWidth(Localdec{body=[], ...}) = raise InternalError "tupleWidth: empty localdec" | tupleWidth(Localdec{body, ...}) = (* We are only interested in the last expression. *) tupleWidth(#1(List.last body)) | tupleWidth(Case{match, ...}) = let fun getWidth(MatchTree{exp, ...}) = tupleWidth exp | getWidth _ = raise InternalError "getWidth" in List.foldl(fn(v, 1) => getWidth v | (_, s) => s) 1 match end | tupleWidth _ = 1 in (* Start of the code-generator itself. *) type debugenv = environEntry list * (int->codetree) (* Code generates the parse tree. `pt' is the tree of declarations, `valDeclarations' and `exDeclarations' are the lists of the value and exception variables which have been declared at the top level. `level' is the initial level which is only non-zero if we are declaring a functor. `Addresses' is a variable which contains the current address for top-level declarations. It has to be a parameter to `gencode' to handle structure declarations containing applications of functors. *) fun gencode (pt : parsetree, lex: lexan, debugEnv: debugenv, level, addresses, structName: string, line) : codetree list * debugenv = let fun mkAddr () = let val addr = !addresses; in addresses := addr + 1; addr end; val level = ref level; (* Incremented by one for each nested proc. *) val lastLine = ref 0 (* The last line for which we produced debug info. *) val fileName = getParameter fileNameTag (debugParams lex) (* Debugging control and debug function. *) val debugging = getParameter debugTag (debugParams lex) val debuggerFun = case List.find (Universal.tagIs DEBUGGER.debuggerFunTag) (LEX.debugParams lex) of SOME f => Universal.tagProject DEBUGGER.debuggerFunTag f | NONE => DEBUGGER.nullDebug (* Add a call to the debugger. *) fun addDebugCall (decName: string, (ctEnv, rtEnv), line: int) : codetree = let open DEBUGGER val debugger = debugFunction(debuggerFun, DebugStep, fileName, decName, line) ctEnv in lastLine := line; mkEval(mkConst(toMachineWord debugger), [rtEnv(!level)], false) end (* Add a debug call if line has changed. This is used between declarations and expression sequences to avoid more than one call on a line. *) fun changeLine (decName, env, line) = if not debugging orelse line = !lastLine then [] else [addDebugCall(decName, env, line)] fun createDebugEntry (v: values, (ctEnv, rtEnv), loadVal) = if not debugging then { dec = [], rtEnv = rtEnv, ctEnv = ctEnv } else let val newEnv = (* Create a new entry in the environment. *) mkTuple [ loadVal (* Value. *), rtEnv(!level) ] val { dec, load } = multipleUses (newEnv, mkAddr, !level) val ctEntry = case v of Value{class=Exception, name, typeOf, ...} => EnvException(name, typeOf) | Value{class=Constructor{nullary}, name, typeOf, ...} => EnvVConstr(name, typeOf, nullary) | Value{name, typeOf, ...} => EnvValue(name, typeOf) in { dec = dec, rtEnv = load, ctEnv = ctEntry :: ctEnv} end (* Start a new static level. This is currently used only to distinguish function arguments from the surrounding static environment. *) fun newDebugLevel (ctEnv, rtEnv) = (EnvStaticLevel :: ctEnv, rtEnv) fun makeDebugEntries (vars: values list, debugEnv: debugenv) = if debugging then let fun loadVar (var, (decs, env)) = let val loadVal = codeVal (var, !level, valTypeOf var, lex, line) val {dec, rtEnv, ctEnv} = createDebugEntry(var, env, loadVal) in (decs @ dec, (ctEnv, rtEnv)) end in List.foldl loadVar ([], debugEnv) vars end else ([], debugEnv) (* In order to build a call stack in the debugger we need to know about function entry and exit. It would be simpler to wrap the whole function in a debug function (i.e. loop the call through the debugger) but that would prevent us from using certain call optimisations. *) fun wrapFunctionInDebug(body: codetree, name: string, argCode: codetree, argType: types, restype: types, (ctEnv, rtEnv)): codetree = if not debugging then body (* Return it unchanged. *) else let open DEBUGGER (* At the moment we can't deal with function arguments. *) fun enterFunction (rtEnv, args) = debugFunction(debuggerFun, DebugEnter(args, argType), fileName, name, line) ctEnv rtEnv and leaveFunction (rtEnv, result) = (debugFunction(debuggerFun, DebugLeave(result, restype), fileName, name, line) ctEnv rtEnv; result) and exceptionFunction (rtEnv, exn) = (debugFunction(debuggerFun, DebugException exn, fileName, name, line) ctEnv rtEnv; raise exn) val entryCode = toMachineWord enterFunction and exitCode = toMachineWord leaveFunction and exceptionCode = toMachineWord exceptionFunction in mkEnv [ (* Call the enter code. *) mkEval(mkConst entryCode, [mkTuple[rtEnv(!level), argCode]], false), (* Call the exit code with the function result. The function is wrapped in a handler that catches all exceptions and calls the exception code. *) mkEval(mkConst exitCode, [mkTuple[rtEnv(!level), mkHandle (body, [CodeZero (* all exceptions *)], mkEval(mkConst exceptionCode, [mkTuple[rtEnv(!level), Ldexc]], false))] ], false) ] end (* datatype 'a option = SOME of 'a | NONE *) (* Convert a literal constant. We can only do this once any overloading has been resolved. *) fun getLiteralValue(converter, literal, instance, line, near): machineWord option = let val (conv, name) = getOverloadInstance(valName converter, instance, true, lex, line) in SOME(RunCall.unsafeCast(evalue conv) literal) handle Match => NONE (* Overload error *) | Conversion s => ( errorNear (lex, true, near, line, "Conversion exception ("^s^") raised while converting " ^ literal ^ " to " ^ name); NONE ) | Overflow => ( errorNear (lex, true, near, line, "Overflow exception raised while converting " ^ literal ^ " to " ^ name); NONE ) | _ => ( errorNear (lex, true, near, line, "Exception raised while converting " ^ literal ^ " to " ^ name); NONE ) end (* Devised by Mike Fourman, Nick Rothwell and me (DCJM). First coded up by Nick Rothwell for the Kit Compiler. First phase of the match compiler. The purpose of this phase is to take a match (a set of patterns) and bring together the elements that will be discriminated by testing any particular part of the value. Where a pattern is a tuple, for example, it is possible to discriminate on each of the fields independently, but it may be more efficient to discriminate on one of the fields first, and then on the others. The aim is to produce a set of tests that discriminate between the patterns quickly. *) abstype patSet = PatSet of int list with (* Each leaf in the tree contains a number which identifies the pattern it came from. As well as linking back to the patterns, these numbers represent an ordering, because earlier patterns mask out later ones. *) (* A set of pattern identifiers. *) val empty = PatSet []; fun singleton i = PatSet [i]; fun list (PatSet p) = p; infix 3 :::; fun a ::: b = PatSet (a :: list b); fun isEmpty (PatSet p) = null p; fun first (PatSet p) = hd p; fun next (PatSet p) = PatSet (tl p); (* Set from i to j inclusive. *) fun from i j = if i > j then empty else i ::: from (i + 1) j; fun stringOfSet p = "[" ^ List.foldl (fn (i, s) => s ^ " " ^ Int.toString i) "" (list p) ^ "]"; infix 3 plus; infix 4 inside; infix 5 intersect; infix 6 diff; infix 7 eq; infix 8 eqSc infix 9 neq; (* Union of sets. *) fun a plus b = if isEmpty a then b else if isEmpty b then a else if first a = first b then first a ::: (next a plus next b) else if first a < first b then first a ::: (next a plus b) else first b ::: (a plus next b); (* Set membership. *) fun i inside a = if isEmpty a then false else if i = first a then true else if i < first a then false else i inside next a; (* Intersection of sets. *) fun a intersect b = if isEmpty a orelse isEmpty b then empty else if first a = first b then first a ::: ((next a) intersect (next b)) else if first a < first b then (next a) intersect b else a intersect next b; (* Set difference. *) fun a diff b = if isEmpty a then empty else if isEmpty b then a else if first a = first b then (next a) diff (next b) else if first a < first b then first a ::: ((next a) diff b) else a diff next b; (* Set equality. *) fun a eq b = if isEmpty a then isEmpty b else if isEmpty b then false else first a = first b andalso next a eq next b; fun a neq b = not (a eq b); end (* patSet *); datatype aot = Aot of { patts: aots, (* Choices made at this point. *) defaults: patSet, (* Patterns that do not discriminate on this node. *) width: int, (* For cons nodes the no. of constrs in the datatype. *) vars: values list (* The variables bound at this point. *) } and aots = TupleField of aot list (* Each element of the list is a field of the tuple. *) | Cons of consrec list (* List of constructors. *) | Excons of consrec list (* Exception constructors. *) | Scons of sconsrec list (* Int, char, string, real. *) | Wild (* Patterns that do not discriminate at all. *) (* Datatype constructors and exception constructors. *) withtype consrec = { constructor: values, (* The constructor itself. *) patts: patSet, (* Patterns that use this constructor *) appliedTo: aot (* Patterns this constructor was applied to. *) } and sconsrec = { eqFun: codetree, (* Equality functions for this type*) specVal: machineWord option, (* The constant value. NONE here means we had a conversion error. *) patts: patSet (* Patterns containing this value. *) }; fun makeAot patts defaults width vars = Aot { patts = patts, defaults = defaults, width = width, vars = vars }; fun makeConsrec constructor patts appliedTo = { constructor = constructor, patts = patts, appliedTo = appliedTo }; fun makeSconsrec eqFun specVal patts : sconsrec = { eqFun = eqFun, specVal = specVal, patts = patts }; fun aVars (Aot {vars,...}) = vars; (* An empty wild card - can be expanded as required. *) val aotEmpty = makeAot Wild empty 0 []; (* A new wild card entry with the same defaults as a previous entry. *) fun wild (Aot {defaults, ...}) = makeAot Wild defaults 0 []; (* Take a pattern and merge it into an andOrTree. *) fun buildAot vars (tree as Aot {patts = treePatts, defaults = treeDefaults, vars = treeVars, ...}) patNo line = let (* Add a default (wild card or variable) to every node in the tree. *) fun addDefault (Aot {patts, defaults, width, vars}) patNo = let fun addDefaultToConsrec {constructor, patts, appliedTo} = makeConsrec constructor patts (addDefault appliedTo patNo) val newPatts = case patts of TupleField pl => TupleField (map (fn a => addDefault a patNo) pl) | Cons cl => Cons (map addDefaultToConsrec cl) | Excons cl => Excons (map addDefaultToConsrec cl) | otherPattern => (* Wild, Scons *) otherPattern; in makeAot newPatts (defaults plus singleton patNo) width vars end (* addDefault *); fun addVar (Aot {patts, defaults, width, vars}) var = makeAot patts defaults width (var :: vars); (* Add a constructor to the tree. It can only be added to a cons node or a wild card. *) fun addConstr cons doArg (tree as Aot {patts, defaults, width, vars}) patNo = let val consName = valName cons; in case patts of Wild => let (* Expand out the wildCard into a constructor node. *) (* Get the constructor list from the type information of the constructor and put the length of this list into the "width". *) val noOfConstrs = length (getConstrList (valTypeOf cons)); val cr = makeConsrec cons (singleton patNo) (* Expand the argument *) (doArg (wild tree)); in makeAot (Cons [cr]) defaults noOfConstrs vars end | Cons pl => let (* Merge this constructor with other occurences. *) fun addClist [] = (* Not there - add this on the end. *) [makeConsrec cons (singleton patNo) (doArg (wild tree))] | addClist (ccl::ccls) = if valName (#constructor ccl) = consName then (* Merge in. *) makeConsrec cons (singleton patNo plus #patts ccl) (doArg (#appliedTo ccl)) :: ccls else (* Carry on looking. *) ccl :: addClist ccls; in makeAot (Cons (addClist pl)) defaults width vars end | _ => raise InternalError "addConstr: badly-formed and-or tree" end (* addConstr *); (* Add a special constructor to the tree. Very similar to preceding. *) fun addSconstr eqFun cval (Aot {patts, defaults, width, vars}) patNo = case patts of Wild => (* Expand out the wildCard into a constructor node. *) makeAot (Scons [makeSconsrec eqFun cval (singleton patNo)]) defaults 0 vars | Scons pl => let (* Must be scons *) (* Merge this constructor with other occurrences. *) fun addClist [] = (* Not there - add this on the end. *) [makeSconsrec eqFun cval (singleton patNo)] | addClist (ccl :: ccls) = if (case (cval, #specVal ccl) of (SOME a, SOME b) => structureEq(a, b) | _ => false) (* N.B. It is essential that this equality is done using the general structure equality and NOT using an optimised machineWord*machineWord->bool version. The constants could be pointers to strings or long integers. *) then (* Merge in. *) makeSconsrec eqFun cval (singleton patNo plus #patts ccl) :: ccls else (* Carry on looking. *) ccl :: addClist ccls; in makeAot (Scons (addClist pl)) defaults 0 vars end | _ => raise InternalError "addSconstr: badly-formed and-or tree" (* end addSconstr *); (* Add an exception constructor to the tree. Similar to the above except that exception constructors must be kept in order. *) fun addExconstr cons arg (Aot {patts, defaults, width, vars}) patNo = let val consName = valName cons; in case patts of Wild => (* Expand out the wildCard into a constructor node. *) let val cr = makeConsrec cons (singleton patNo) (buildAot arg (wild tree) patNo line) in makeAot (Excons [cr]) defaults 0 vars end | Excons (cl as (h::t)) => let (* The exception constructor list is maintained in reverse order. We have to be careful about merging exception constructors. Two exceptions may have different names but actually have the same exception value, or have the same (short) name but come from different structures. We only add to the last entry in the list if we can tell that it is the same exception. We could be more sophisticated and allow merging with other entries if we could show that the entries we were skipping over were definitely different, but it's probably not worth it. *) val newList = if isTheSameException (#constructor h, cons) then makeConsrec cons ((singleton patNo) plus (#patts h)) (buildAot arg (#appliedTo h) patNo line) :: t else makeConsrec cons (singleton patNo) (buildAot arg (wild tree) patNo line) :: cl; in makeAot (Excons newList) defaults 0 vars end | _ => raise InternalError "addExconstr: badly-formed and-or tree" end (* addExconstr *); in (* body of buildAot *) case vars of Ident {value=ref ident, ... } => ( case ident of Value{class=Constructor _, ...} => (* Only nullary constructors. Constructors with arguments will be dealt with by ``isApplic'. *) addConstr ident (fn a => buildAot wildCard a patNo line) tree patNo | Value{class=Exception, ...} => addExconstr ident wildCard tree patNo | _ => (* variable - matches everything. Defaults here and pushes a var. *) addVar (addDefault tree patNo) ident ) | TupleTree ptl => (* Tree must be a wild card or a tuple. *) (case treePatts of Wild => let val tlist = map (fn el => buildAot el (wild tree) patNo line) ptl; in makeAot (TupleField tlist) treeDefaults 0 treeVars end | TupleField pl => let (* Must be tuple already. *) (* Merge each field of the tuple in with the corresponding field of the existing tree. *) fun mergel [] [] = [] (* Should both finish together *) | mergel (t::tl) (a::al) = buildAot t a patNo line :: mergel tl al | mergel _ _ = raise InternalError "mergel"; val tlist = mergel ptl pl; in makeAot (TupleField tlist) treeDefaults 0 treeVars end | _ => raise InternalError "pattern is not a tuple in a-o-t") | Labelled {recList, frozen, typeof} => let (* Treat as a tuple, but in the order of the record entries. Missing entries are replaced by wild-cards. The order of the patterns given may bear no relation to the order in the record which will be matched. e.g. case X of (a = 1, ...) => ___ | (b = 2, a = 3) => ___ *) (* Check that the type is frozen. *) (* This check is probably redundant since we now check at the point when we generalise the type (except for top-level expressions - those could be detected in checkForFreeTypeVariables). Retain it for the moment. DCJM 15/8/2000. *) val U = if recordNotFrozen (! typeof) then errorNear (lex, true, vars, line, "Can't find a fixed record type.") else (); (* Make a list of wild cards. *) fun buildl 0 = [] | buildl n = wildCard :: buildl (n-1); (* Get the maximum number of patterns. *) val wilds = buildl (recordWidth (! typeof)); (* Now REPLACE entries from the actual pattern, leaving the defaulting ones behind. *) (* Take a pattern and add it into the list. *) fun mergen (h :: t) 0 pat = pat :: t | mergen (h :: t) n pat = h :: mergen t (n - 1) pat | mergen [] _ _ = raise InternalError "mergen"; fun enterLabel ((name, value), l) = (* Put this label in the appropriate place in the tree. *) mergen l (entryNumber (name, ! typeof)) value val tupleList = List.foldl enterLabel wilds recList; in (* And process it as a tuple. *) buildAot (TupleTree tupleList) tree patNo line end | Applic{f = Ident{value = ref applVal, ...}, arg} => ( case applVal of Value{class=Constructor _, ...} => addConstr applVal (fn atree => buildAot arg atree patNo line) tree patNo | Value{class=Exception, ...} => addExconstr applVal arg tree patNo | _ => tree (* Only if error *) ) | Applic _ => tree (* Only if error *) | Unit => (* There is only one value so it matches everything. *) addDefault tree patNo | WildCard => addDefault tree patNo (* matches everything *) | List ptl => let (* Generate suitable combinations of cons and nil. e.g [1,2,3] becomes ::(1, ::(2, ::(3, nil))). *) fun processList [] tree = (* At the end put in a nil constructor. *) addConstr nilConstructor (fn a => buildAot wildCard a patNo line) tree patNo | processList (h :: t) tree = (* Cons node. *) let fun mkConsPat (Aot {patts = TupleField [hPat, tPat], defaults, width, vars}) = let (* The argument is a pair consisting of the list element and the rest of the list. *) val tlist = [buildAot h hPat patNo line, processList t tPat]; in makeAot (TupleField tlist) defaults 0 vars end | mkConsPat (tree as Aot {patts = Wild, defaults, width, vars}) = let val hPat = wild tree; val tPat = wild tree; val tlist = [buildAot h hPat patNo line, processList t tPat]; in makeAot (TupleField tlist) defaults 0 vars end | mkConsPat _ = raise InternalError "mkConsPat: badly-formed parse-tree" in addConstr consConstructor mkConsPat tree patNo end (* end processList *); in processList ptl tree end | Literal{converter, literal, typeof=ref instance} => let (* At the same time we have to get the equality function for this type to plug into the code. This will find a type-specific equality function if there is one otherwise default to structure equality. *) val (equality, _) = getOverloadInstance("=", instance, false, lex, line) val litValue: machineWord option = getLiteralValue(converter, literal, instance, line, vars) in addSconstr equality litValue tree patNo end | Constraint {value, given} => (* process the pattern *) buildAot value tree patNo line | Layered {var, pattern} => (* process the pattern *) let (* A layered pattern may involve a constraint which has to be removed. *) fun getVar pat = case pat of Ident {value, ...} => !value | Constraint {value, ...} => getVar value | _ => undefinedValue (* error *); in addVar (buildAot pattern tree patNo line) (getVar var) end | _ => tree (* error cases *) end; (* buildAot *) fun buildTree (patts: parsetree list) = let (* Merge together all the patterns into a single tree. *) fun maket [] patNo tree = tree | maket ((MatchTree{vars, line, ...})::t) patNo tree = maket t (patNo + 1) (buildAot vars tree patNo line) | maket _ _ _ = raise InternalError "maket - badly formed parsetree" in maket patts 1 aotEmpty end; (* Find all the variables declared by each pattern. *) fun findVars vars varl = case vars of Ident {value, ...} => let val ident = ! value; in if isConstructor ident then varl (* Ignore constructors *) else ident :: varl end | TupleTree ptl => List.foldl (fn (v1, v2) => findVars v1 v2) varl ptl | Labelled {recList, ...} => List.foldl (fn ((_, value), v) => findVars value v) varl recList (* Application of a constructor: only the argument can contain vars. *) | Applic {f, arg} => findVars arg varl | List ptl => List.foldl (fn (v1, v2) => findVars v1 v2) varl ptl | Constraint {value, ...} => findVars value varl | Layered {var, pattern} => (* There may be a constraint on the variable so it is easiest to recurse. *) findVars pattern (findVars var varl) | _ => varl (* constants and error cases. *); val findAllVars = map (fn (MatchTree{vars, ...}) => findVars vars [] | _ => raise InternalError "findAllVars - badly formed parsetree"); (* Put the arg into a local declaration and set the address of any variables to it. We declare all the variables that can be declared at this point, even though they may not be in different patterns. *) fun declareVars (tree : aot, arg : codetree, env: debugenv) : {load: codetree, decs: codetree list, env: debugenv} = let val addressOfVar = mkAddr (); val dec = mkDec (addressOfVar, arg) and load = mkLoad (addressOfVar, 0) fun setAddr (v as Value{access=Local{addr=lvAddr, level=lvLevel}, ...}, (oldDec, oldEnv) ) = let (* Set the address of the variable to this and create debug environment entries if required. *) val {dec=nextDec, ctEnv, rtEnv} = createDebugEntry(v, oldEnv, load) in lvAddr := addressOfVar; lvLevel := !level; (oldDec @ nextDec, (ctEnv, rtEnv)) end | setAddr _ = raise InternalError "setAddr" val (envDec, newEnv) = List.foldl setAddr ([], env) (aVars tree) in {decs = dec :: envDec, load = load, env = newEnv} end; (* The code and the pattern from which it came, 0 if the default, ~1 if more than one pattern. This is used to remove redundant tests that are sometimes put in where we have a wild card above a constructor. *) type patcode = {code: codetree list, pat: int}; fun makePatcode code pat : patcode = { code = code, pat = pat }; val matchFailCode : patcode = makePatcode [MatchFail] 0; val raiseMatchCode : patcode = makePatcode [raiseMatch] 0; val raiseBindCode : patcode = makePatcode [raiseBind] 0; (* Code generate a set of patterns. tree is the aot we are working on, arg is the code representing the argument to take apart. The set of patterns which are active are held in "active", and "othermatches" is a continuation of other patterns when we have done this one. "default" is the default code executed if no pattern matches and is needed only because of problems with exceptions. "isBind" is a flag indicating whether we are processing a variable binding. The set of patterns is needed primarily for tuples. If we have patterns like (A, A) => ..| (B,B) => ... | _ => ... when we have tested that the first field is actually A we are only interested in patterns 1 and 3, so that testing for the second field being B is unnecessary in this case. Similarly when we test for the second field being B we can eliminate pattern 1. Actually this does not work properly for exceptions because of exception aliasing. e.g. X 1 => ... | Y _ => ... | _ => ... It is possible that X and Y might be the same exception, so that the fact that the constructor matches X does not imply that it cannot also match Y. *) fun codePatt (tree as Aot {patts, defaults, width, vars}) (arg : codetree) (active : patSet) (othermatches : (patSet * (unit->patcode) * debugenv) -> patcode) (default : unit -> patcode) (isBind : bool) (debugEnv: debugenv) : patcode = let val decl : {load: codetree, decs: codetree list, env: debugenv} = declareVars (tree, arg, debugEnv); val load : codetree = #load decl; (* In several cases below we used "arg". "arg" is the code used to create the value to be taken apart and may well involve several indirections. I've changed them to use "load" since that avoids duplication of code. It probably doesn't matter too much since the low level code-generator will probably optimise these anyway. DCJM 27/3/01. *) (* Get the set of defaults which are active. *) val activeDefaults : patSet = defaults intersect active; (* Code-generate a list of constructors. "constrsLeft" is the number of constructors left to deal with. If this gets to 1 we have dealt with all the rest. *) fun genConstrs ([]:consrec list) constrsLeft = (* Come to the end without exhausting the datatype. *) othermatches(activeDefaults, default, #env decl) | genConstrs (p :: ps) constrsLeft = let (* If this is not in the active set we skip it. *) val newActive = (#patts p) intersect active; in (* If the set is empty we don't bother with this constructor. *) if newActive eq empty then genConstrs ps constrsLeft (* N.B. NOT "(constrsLeft - 1)", since we haven't matched! *) else if constrsLeft = 1 then (* We have put all the other constructors in this datatype out so there is no need to test for this case. *) codePatt (#appliedTo p) (makeInverse (#constructor p, load, !level)) (newActive plus activeDefaults) othermatches default isBind (#env decl) else let (* Code generate the choice. *) val testCode = makeGuard (#constructor p, load, !level); (* If it succeeds we have to take apart the argument of the constructor. *) val thenCode : patcode = codePatt (#appliedTo p) (makeInverse (#constructor p, load, !level)) (newActive plus activeDefaults) othermatches default isBind (#env decl); (* Otherwise we look at the next constructor in the list. *) val elseCode : patcode = genConstrs ps (constrsLeft - 1); in (* If we are binding a pattern to an expression we have to ensure that the variable bindings remain after the test has returned. To do this we change the test round so that the else-part, which just raises an exception, is done first, and the then-part is done after the test. e.g. val (a::b) = e generates code similar to if not (e is ::) then raise Bind; val a = e.0; val b = e.1 Note: the reason bindings are treated differently is that the then-part contains ONLY the matching code, whereas for function-argument and exception-handler matches, the then-part contains ALL the relevant code, including the uses of any matched variables. This means that we have to retain the bindings. The point about the structure of an "if", is that merging the two paths through the if-expression destroys any binding that were only made in one half. SPF 25/11/96 *) if isBind then makePatcode (mkIf (mkNot testCode, mkblock (#code elseCode), CodeNil) :: #code thenCode) ~1 else if #pat thenCode = #pat elseCode andalso #pat thenCode >= 0 then elseCode (* This didn't actually do any discrimination, probably because a default was above a constructor. *) else makePatcode [mkIf (testCode, mkblock (#code thenCode), mkblock (#code elseCode))] ~1 end end (* genConstrs *); fun genExnConstrs ([]:consrec list)= (* Process the feualt matches, if any. *) othermatches(activeDefaults, default, #env decl) | genExnConstrs (p :: ps) = let (* If this is not in the active set we skip it. *) val newActive = (#patts p) intersect active; in (* If the set is empty we don't bother with this constructor. *) if newActive eq empty then genExnConstrs ps else let (* Code generate the choice. *) (* Called if this exception constructor matches, but none of the active patterns match, either because the values in the datatype do not match (e.g. value is A 2, but pattern is A 1), or because of other fields in the tuple (e.g. value is (A, 2) but pattern is (A, 1)). If this were an ordinary constructor we would go straight to the default, because if it matches this constructor it could not match any of the others, but with exceptions it can match other exceptions, so we have to test them. We do this by generating MatchFail, which jumps to the "handler" of the enclosing AltMatch construct. *) (* This doesn't work properly for bindings since the values we bind have to be retained after this match. However, this isn't really a problem. The reason for using AltMatch is to avoid the code blow-up that used to occur with complex matches. That doesn't happen with bindings because the elseCode simply raises a Bind exception. DCJM 27/3/01. *) (* If the match fails we look at the next constructor in the list. *) val elseCode : patcode = genExnConstrs ps; fun codeDefault () = if isBind then elseCode else matchFailCode; val testCode = makeGuard (#constructor p, load, !level); (* If it succeeds we have to take apart the argument of the constructor. *) val thenCode : patcode = codePatt (#appliedTo p) (makeInverse (#constructor p, load, !level)) newActive othermatches codeDefault isBind (#env decl) in (* If we are binding a pattern to an expression we have to ensure that the variable bindings remain after the test has returned. To do this we change the test round so that the else-part, which just raises an exception, is done first, and the then-part is done after the test. e.g. val (a::b) = e generates code similar to if not (e is ::) then raise Bind; val a = e.0; val b = e.1 *) (* There was a bug here because the code used an AltMatch which doesn't work properly if the elseCode makes bindings which have to be retained after the AltMatch. Since a binding can only have a single pattern we don't need to use an AltMatch here. DCJM 27/3/01. *) if isBind then makePatcode (mkIf (mkNot testCode, mkblock (#code elseCode), CodeNil):: #code thenCode) ~1 (* Needed? *) else if #pat thenCode = #pat elseCode andalso #pat thenCode >= 0 then elseCode else makePatcode [ mkAltMatch ( mkIf (testCode, mkblock (#code thenCode), MatchFail), mkblock (#code elseCode) ) ] ~1 end end (* genExnConstrs *); (* Look at the kinds of pattern. - If there is nothing left (match is not exhaustive) or if all the active patterns will default, we can skip any checks. *) val pattCode = if active eq empty orelse active eq activeDefaults then othermatches(active, default, #env decl) else case patts of TupleField [patt] => codePatt patt load (* optimise unary tuples - no indirection! *) active othermatches default isBind (#env decl) | TupleField asTuples => let (* A simple-minded scheme would despatch the first column and then do the others. The scheme used here tries to do better by choosing the column that has any wild card furthest down the column. *) val noOfCols = length asTuples; fun despatch colsToDo (active, def, env) = let (* Find the "depth" of pattern i.e. the position of any defaults. If one of the fields is itself a tuple find the maximum depth of its fields, since if we decide to discriminate on this field we will come back and choose the deepest in that tuple. *) fun pattDepth (Aot {patts, defaults,...}) = case patts of TupleField pl => List.foldl (fn (t, d) => Int.max(pattDepth t, d)) 0 pl | _ => let (* Wild cards, constructors etc. *) val activeDefaults = defaults intersect active; in if activeDefaults eq empty then (* No default - the depth is the number of patterns that will be discriminated. Apart from Cons which could be a complete match, all the other cases will only occur if the match is not exhaustive. *) case patts of Cons cl => length cl + 1 | Excons cl => length cl + 1 | Scons sl => length sl + 1 | _ => 0 (* Error? *) else first activeDefaults end; fun findDeepest column bestcol depth = if column = noOfCols (* Finished. *) then bestcol else if column inside colsToDo then let val thisDepth = pattDepth (List.nth(asTuples, column)); in if thisDepth > depth then findDeepest (column + 1) column thisDepth else findDeepest (column + 1) bestcol depth end else findDeepest (column + 1) bestcol depth; in (* If we have done all the columns we can stop. (Or if the active set is empty). *) if colsToDo eq empty orelse active eq empty then othermatches(active, def, env) else let val bestcol = findDeepest 0 0 0; in codePatt (List.nth(asTuples, bestcol)) (mkInd (bestcol, load)) active (despatch (colsToDo diff (singleton bestcol))) def isBind env end end (* despatch *); in despatch (from 0 (noOfCols-1)) (active, default, #env decl) end (* TupleField. *) | Cons cl => genConstrs cl width | Excons cl => (* Must reverse the list because exception constructors are in reverse order from their order in the patterns, and ordering matters for exceptions. *) genExnConstrs (rev cl) | Scons sl => let (* Int, real, string *) (* Generate if..then..else for each of the choices. *) fun foldConstrs ([]: sconsrec list) = othermatches(activeDefaults, default, #env decl) | foldConstrs (v :: vs) = let (* If this pattern is in the active set we discriminate on it. *) val newActive = (#patts v) intersect active; in if newActive eq empty then (* No point *) foldConstrs vs else let val constVal = case #specVal v of NONE => CodeZero | SOME w => mkConst w val testCode = mkEval(#eqFun v, [mkTuple[constVal, load]], true) (* If it is a binding we turn the test round - see comment in genConstrs. *) val rest = othermatches(newActive plus activeDefaults, default, #env decl); (* If we have a handler of the form handle e as Io "abc" => we will generate a handler which catches all Io exceptions and checks the argument. If it fails to match it generates the other cases as explicit checks. The other cases will generate a new address for "e" (even though "e" is not used in them "declareVars" does all). We have to make sure that we code-generate BEFORE we go on to the next case. (i.e. we must call "othermatches" before "foldConstrs"). *) val elsept = foldConstrs vs; in if isBind then makePatcode (mkIf (mkNot testCode, mkblock (#code elsept), CodeNil) :: #code rest) ~1 (* Match or handler. *) else if (#pat rest) = (#pat elsept) andalso (#pat rest) >= 0 then elsept else makePatcode [mkIf (testCode, mkblock (#code rest), mkblock (#code elsept))] ~1 end end (* foldConstrs *); in foldConstrs sl end | _ => (* wild - no choices to make here. *) othermatches(activeDefaults, default, #env decl) in makePatcode (#decs decl @ #code pattCode) (#pat pattCode) end; (* codePatt *) (* Make an argument list from the variables bound in the pattern. *) fun makeArglist [] argno = [] | makeArglist (Value{access=Local{addr=ref lvAddr, ...}, ...} :: vs) argno = mkLoad (lvAddr, 0) :: makeArglist vs (argno - 1) | makeArglist _ argno = raise InternalError "makeArgList" (* Generate variable-bindings (declarations) for each of the expressions as functions. *) fun cgExps [] varl base patNo uses decName debugEnv cgExpression lex near = [] | cgExps (MatchTree {exp, line, ...} ::al) (vl::vll) base patNo uses decName debugEnv cgExpression lex near = let val noOfArgs = length vl; val patNoIndex = patNo - 1; open Array val pattUses = uses sub patNoIndex; val U : unit = if pattUses = 0 then errorNear (lex, false, near, line, "Pattern " ^ Int.toString patNo ^ " is redundant.") else (); val U = level := !level + 1; (* For the function. *) (* Set the addresses to be suitable for arguments. At the same time create a debugging environment if required. *) fun setAddr (v as Value{access=Local{addr=lvAddr, level=lvLevel}, ...}, (argno, oldDec, oldEnv)) = let val load = mkLoad (~argno, 0) val {dec=nextDec, ctEnv, rtEnv} = createDebugEntry(v, oldEnv, load) in lvAddr := ~argno; lvLevel := !level; (argno - 1, oldDec @ nextDec, (ctEnv, rtEnv)) end | setAddr _ = raise InternalError "setAddr" val (_, envDec, newEnv) = List.foldl setAddr (noOfArgs, [], debugEnv) vl val functionBody = mkEnv(envDec @ [cgExpression (exp, newEnv, decName, line)]); val U = level := !level - 1; (* Back to the surroundings. *) (* Make it an inline function if it only used once. *) val theCode = (if pattUses = 1 then mkInlproc else mkProc) (functionBody, !level, noOfArgs, decName ^ "/" ^ Int.toString patNo); in mkDec (base + patNoIndex, theCode) :: cgExps al vll base (patNo + 1) uses decName debugEnv cgExpression lex near end | cgExps _ _ base patNo uses decName debugEnv cgExpression lex near = raise InternalError "cgExps"; fun codeMatch (near : parsetree, alt : parsetree list, arg : codetree, lex : lexan, decName : string, debugEnv : debugenv, cgExpression : parsetree * debugenv * string * int -> codetree, isHandlerMatch : bool) : codetree = let val noOfPats = length alt; val andortree = buildTree alt; val allVars = findAllVars alt; val lineNo = case alt of MatchTree {line, ... } :: _ => line | _ => raise Match (* Save the argument in a variable. *) val decCode = multipleUses (arg, mkAddr, !level); (* Generate code to load it. *) val loadExpCode = #load decCode (!level); (* Generate a range of addresses for the expressions. *) val baseAddr = !addresses; val U = addresses := baseAddr + noOfPats; (* Make an array to count the number of references to a pattern. This is used to decide whether to use a function for certain expressions or to make it inline. *) val uses = Array.array (noOfPats, 0); (* Set to false if we find it is not exhaustive. *) val exhaustive = ref true; (* Make some code to insert at defaults. *) val codeDefault : unit -> patcode = if isHandlerMatch then (fn () => makePatcode [makeRaise loadExpCode] 0) else (fn () => (exhaustive := false; raiseMatchCode)); (* Generate the code and also check for redundancy and exhaustiveness. *) val code : patcode = codePatt andortree loadExpCode (from 1 noOfPats) (fn (pattsLeft, default, env) => (* This function is called when we done all the discrimination we can. We fire off the first pattern in the set. *) if pattsLeft eq empty then default () else let val pattChosen = first pattsLeft; val pattChosenIndex = pattChosen - 1; in (* Increment the count for this pattern. *) Array.update (uses, pattChosenIndex,(Array.sub(uses, pattChosenIndex)) + 1); (* If we have a single pattern it cannot be duplicated so we can put the code in immediately, other cases are made into inline functions and inserted later. *) (* The idea is to avoid the code size blowing up if we have a large expression which occurs multiple times in the resulting code e.g. case x of [1,2,3,4] => exp1 | _ => exp2 Here exp2 will be called at several points in the code. DCJM 13/2/01. *) if noOfPats = 1 then ( case alt of MatchTree {exp, line, ... } :: _ => makePatcode [cgExpression (exp, env, decName, line)] pattChosen | _ => raise InternalError "codeMatch - badly formed parsetree" ) else let val thisVars = List.nth(allVars, pattChosenIndex); val noOfArgs = length thisVars; val argsForCall = makeArglist thisVars noOfArgs; in (* Call the appropriate expression function. *) makePatcode [mkEval (mkLoad (baseAddr + pattChosenIndex, 0), argsForCall, false)] pattChosen end end ) codeDefault false debugEnv; (* Report inexhaustiveness if necessary. *) val U : unit = if not (!exhaustive) then errorNear (lex, false, near, lineNo, "Matches are not exhaustive.") else (); in if noOfPats = 1 then (* Special case to speed up compilation. If we have a single pattern we put the code in immediately. *) mkblock (#dec decCode @ #code code) else let (* Now generate the expressions as functions, inline if only used once. Also checks for redundancy. *) val expressionFuns = cgExps alt allVars baseAddr 1 uses decName debugEnv cgExpression lex near; in (* Return the code in a block. *) mkblock (#dec decCode @ (expressionFuns @ #code code)) end end (* codeMatch *); (* Part of a val-binding. *) fun codeBind near decl exp lex line debugEnv = let (* Build a single pattern tree. *) val andortree = buildAot decl aotEmpty 1 line; (* Save the argument in a variable. *) val decCode = multipleUses (exp, mkAddr, !level); (* Generate code to load it. *) val loadExpCode = #load decCode (!level); val exhaustive = ref true; (* Set to false if we find it is not exhaustive. *) (* Make some code to insert at defaults. *) fun codeDefault () = (exhaustive := false; raiseBindCode); (* Generate the code and also check for redundancy and exhaustiveness. *) val code : patcode = codePatt andortree loadExpCode (singleton 1) (fn (pattsLeft, default, _) => if pattsLeft eq empty then (default ()) else makePatcode [] ~1 ) codeDefault true debugEnv; (* Report inexhaustiveness if necessary. *) val U : unit = if not (!exhaustive) andalso (!level) > 0 then errorNear (lex, false, near, line, "Pattern is not exhaustive.") else (); in #dec decCode @ #code code (* Return the code *) end (* codeBind *); (* Code-generates a sequence of declarations. "decName" is a string which is used to identify functions in profiles. "otherdecs" is a continuation for the rest of the block. It is needed to deal with cases such as let val a :: b = x; val ... in ... end, where the code is a test that only includes the rest of the declarations and the body if the test for "x" being a cons-cell is true. *) fun codeSequence (dlist: (parsetree * int) list, debugEnv: debugenv, decName: string) : codetree list * debugenv = let (* Makes a block from a series of alternatives in a match. Used only for functions. *) fun codeAlt (near: parsetree, alt : parsetree list, arg : codetree, decName : string, debugEnv : debugenv) : codetree = let (* Insert a call to the debugger in each arm of the match after the variables have been bound but before the body. *) fun cgExp (c: parsetree, debugEnv: debugenv, decName: string, line: int) = if debugging then mkEnv[addDebugCall(decName, debugEnv, line), codegen(c, debugEnv, decName, line)] else codegen(c, debugEnv, decName, line) in codeMatch (near, alt, arg, lex, decName, debugEnv, cgExp, false) end (* Code-generates a piece of tree. *) and codegen (c: parsetree, debugEnv: debugenv, decName: string, line: int) : codetree = let fun codeList debugEnv [] = [] | codeList debugEnv ((x, line)::tl) = (* Generate any line change code first, then this entry, then the rest. *) changeLine(decName, debugEnv, line) @ (codegen (x, debugEnv, decName, line) :: codeList debugEnv tl) in case c of Ident {value, typeof, ...} => let val v : values = !value; (* The instance type is not necessarily the same as the type of the value of the identifier. e.g. in the expression 1 :: nil, "::" has an instance type of int * list int -> list int but the type of "::" is 'a * 'a list -> 'a list. *) in case v of Value{class=Exception, ...} => codeExFunction (v, !level, !typeof, lex, line) | Value{class=Constructor _, ...} => let (* When using the constructor as a value we just want then second word. *) val constrTuple = codeVal (v, !level, !typeof, lex, line) in mkInd(1, constrTuple) end | _ => codeVal (v, !level, !typeof, lex, line) end | Literal{converter, literal, typeof=ref instance} => ( case getLiteralValue(converter, literal, instance, line, c) of SOME w => mkConst w | NONE => CodeNil ) | Applic {f, arg} => let (* The overloaded functions of more than one argument are applied to their arguments rather than to a tuple. *) (* The only other optimisation we make is to remove applications of constructors such as ``::'' which are no-ops. *) val argument : codetree = codegen (arg, debugEnv, decName, line); in (* If the function is an identifier then see if it is a global constructor. If it is not then we must code-generate the whole identifier, not the value it is bound to. *) case f of Ident {value, typeof, ...} => let val function : values = !value; val instanceType = !typeof; in applyFunction (function, argument, !level, instanceType, lex, line) : codetree end | _ => mkEval (codegen (f, debugEnv, decName, line), [argument], false) (* not early *) : codetree end | Cond {test, thenpt, elsept} => mkIf (codegen (test, debugEnv, decName, line), codegen (thenpt, debugEnv, decName, line), codegen (elsept, debugEnv, decName, line)) : codetree | TupleTree [pt] => (* can this occur? *) codegen (pt, debugEnv, decName, line) (* optimise unary tuples *) | TupleTree ptl => let (* Construct a vector of objects. *) val args = map (fn x => codegen (x, debugEnv, decName, line)) ptl; in mkTuple args : codetree end | Labelled {recList = [(_, value)], ...} => codegen (value, debugEnv, decName, line) (* optimise unary tuples *) | Labelled {recList, typeof, ...} => let (* We must evaluate the expressions in the order they are written. This is not necessarily the order they appear in the record. *) val recordSize = length recList; (* The size of the record. *) (* First declare the values as local variables. *) (* We work down the list evaluating the expressions and putting the results away in temporaries. When we reach the end we construct the tuple by asking for each entry in turn. *) fun declist [] look = let val args = List.tabulate (recordSize, look); in [mkTuple args] end | declist ((name, value) :: t) look = let val thisDec = multipleUses (codegen (value, debugEnv, decName, line), mkAddr, !level); val myPosition = entryNumber (name, !typeof); fun lookFn i = if i = myPosition then #load thisDec (!level) else look i in #dec thisDec @ declist t lookFn end (* declist *) in (* Create the record and package it up as a block. *) mkEnv (declist recList (fn i => raise InternalError "missing in record")) : codetree end | Selector {name, labType, ...} => let (* Check that the type is frozen. *) val U = if recordNotFrozen labType then errorNear (lex, true, c, line, "Can't find a fixed record type.") else (); val selectorBody : codetree = if recordWidth labType = 1 then singleArg (* optimise unary tuples - no indirection! *) else let val offset : int = entryNumber (name, labType); in mkInd (offset, singleArg) end in (* Make an inline function. *) mkInlproc (selectorBody, !level + 1, 1, decName ^ "#" ^ name) : codetree end | Unit => (* Use zero. It is possible to have () = (). *) CodeZero : codetree | List ptl => let (* Construct a list. *) (* At the end of the list put a "nil" *) fun consList [] = CodeZero | consList (h :: t) = let val H = codegen (h, debugEnv, decName, line); val T = consList t; in mkTuple [H,T] end (* consList*); in consList ptl : codetree end | Constraint {value, ...} => (* code gen. the value *) codegen (value, debugEnv, decName, line) : codetree | Fn _ => (* Function *) mkblock (codeProc c decName false (ref 0)) : codetree | Localdec {decs, body, ...} => (* Local expressions only. Local declarations will be handled by codeSequence.*) let val (decs, newDebug) = codeSequence (decs, debugEnv, decName); val exps = codeList newDebug body; in mkblock (decs @ exps) : codetree end | ExpSeq ptl => (* Sequence of expressions. Discard results of all except the last. It isn't clear whether this will work properly since the code-generator does not expect expressions to return results unless they are wanted. It may be necessary to turn all except the last into declarations. *) mkblock (codeList debugEnv ptl) : codetree | Raise pt => makeRaise (codegen (pt, debugEnv, decName, line)) : codetree | HandleTree {exp, hrules} => (* Execute an expression in the scope of a handler *) let val handleExp : codetree = codegen (exp, debugEnv, decName, line); (* We only bother with matchTags because they allow PolyML.exception_trace to be more discriminating as to where the exception actually came from (by not bothering to match an exception for handlers than only reraise it again). We don't actually need the tags for pattern-matching because the actual handlers now contain all the pattern-matching code that is actually required for correct execution. If there's a default pattern, we just generate the single default tag (CodeZero), since we'll always match one of the user-supplied patterns. Matching twice (in the RTS and in compiled code) is something of an overhead, but I'm prepared to live with it for now - at least it meets the twin aims of a working exception_trace combined with avoiding exponential code blow-up (which the previous version didn't). SPF 25/11/96. *) val matchTagList : codetree list = case (buildTree hrules) of Aot { patts = Excons exList, defaults, ...} => if defaults eq empty then map (fn cons : consrec => codeVal (#constructor cons, !level, emptyType, lex, line)) exList else [CodeZero] | _ => [CodeZero] val handlerCode : codetree = codeMatch (c, hrules, Ldexc, lex, decName, debugEnv, codegen, true) in mkHandle (handleExp, matchTagList, handlerCode) : codetree end | While {test, body} => makeWhile (codegen (test, debugEnv, decName, line), codegen (body, debugEnv, decName, line)) : codetree | Case {test, match} => (* The matches are made into a series of tests and applied to the test expression. *) let val testCode : codetree = codegen (test, debugEnv, decName, line) in codeMatch (c, match, testCode, lex, decName, debugEnv, codegen, false) : codetree end | Andalso {first, second} => (* Equivalent to if first then second else false *) mkCand (codegen (first, debugEnv, decName, line), codegen (second, debugEnv, decName, line)) : codetree | Orelse {first, second} => (* Equivalent to if first then true else second *) mkCor (codegen (first, debugEnv, decName, line), codegen (second, debugEnv, decName, line)) : codetree | _ => (* empty and any others *) CodeNil : codetree end (* codegen *) (* Generate a function either as a free standing lambda expression or as a declaration. *) and codeProc c decName isRecursive varAddr = let fun getFnBody (exp : parsetree) : parsetree list = case exp of Constraint {value, ...} => getFnBody value | Fn e => e | _ => raise InternalError "getFnBody: not a constrained fn-expression"; val f = getFnBody c; val U = level := !level + 1; (* This function comprises a new declaration level*) val oldAddr = !addresses; val U = addresses := 1; val (firstPat, resType, argType) = case f of MatchTree {vars, resType = ref rtype, argType = ref atype, ...} :: _ => (vars, rtype, atype) | _ => raise InternalError "codeProc: body of fn is not a clause list"; val tupleSize = tupleWidth firstPat in if tupleSize <> 1 then let (* If the first pattern is a tuple we make a tuple from the arguments and pass that in. Could possibly treat labelled records in the same way but we have the problem of finding the size of the record. *) val newDecName : string = decName ^ "(" ^ Int.toString tupleSize ^ ")"; val newDebugEnv = newDebugLevel debugEnv val argumentCode = mkArgTuple tupleSize 1 val mainProc = mkProc (wrapFunctionInDebug (codeAlt (c, f, argumentCode, newDecName, newDebugEnv), newDecName, argumentCode, argType, resType, newDebugEnv), !level, tupleSize, newDecName); (* Reset level and addresses *) val U = level := !level - 1; val U = addresses := oldAddr; (* Now make a block containing the procedure which expects multiple arguments and an inline procedure which expects a single tuple argument and calls the main procedure after taking the tuple apart. *) val thisDec = multipleUses (mainProc, mkAddr, !level); val resProc = let (* Result procedure. *) val pr = mkInlproc (mkEval (#load thisDec (!level + 1), loadArgs tupleSize singleArg, false), !level + 1, 1, decName ^ "(1)"); in if isRecursive then mkDec (!varAddr, pr) else pr end; in #dec thisDec @ [resProc] end else let (* Ordinary function. *) (* Must set the address to zero to get recursive references right. *) val addr = !varAddr; val U = varAddr := 0; val newDecName : string = decName ^ "(1)"; val newDebug = newDebugLevel debugEnv val alt = codeAlt (c, f, mkLoad (~1, 0), newDecName, newDebug); (* If we're debugging add the debug info before resetting the level. *) val wrapped = wrapFunctionInDebug(alt, newDecName, mkLoad (~1, 0), argType, resType, newDebug) in varAddr := addr; (* Reset the address *) level := !level - 1; (* Reset level and addresses *) addresses := oldAddr; let val pr = mkProc (wrapped, !level + 1, 1, newDecName); in [if isRecursive then mkDec (addr, pr) else pr] end end end (* codeProc *); in (* codeSequence *) if null dlist then ([], debugEnv) else let val lineChangeCode = changeLine(decName, debugEnv, #2 (hd dlist)) val c : parsetree = #1 (hd dlist); (* First in the list. *) val (firstDec, firstEnv) = case c of FunDeclaration {dec = tlist, ...} => let (* Each function may result in either one or two functions actually being generated. If a function is not curried it will generate a single function of one argument, but if it is curried (e.g. fun f a b = ...) it will generate two mutually recursive functions. A function fun f a b = X will be translated into val rec f' = fn(a,b) => X and f = fn a => b => f'(a,b) with the second function (f) being inline. This allows the optimiser to replace references to f with all its arguments by f' which avoids building unneccessary closures. *) (* These are recursive declarations so we must set the address of each variable first. *) local fun setAddr (FValBind{ functVar = ref (Value{access=Local{addr=lvAddr, level=lvLevel}, ...}), ...}) = let (* Set the addresses of the variables. *) val addr = mkAddr (); val addr1 = mkAddr (); in lvAddr := addr; lvLevel := !level end | setAddr _ = raise InternalError "setAddr" in val () = List.app setAddr tlist; end (* Now we can process the function bindings. *) fun loadFunDecs [] = [] | loadFunDecs ((FValBind{numOfPatts = ref numOfPats, functVar = ref var, clauses, argType = ref aType, resultType = ref resType})::otherDecs) = let (* Make up the function, and if there are several mutually recursive functions, put it in the vector. *) val address = case var of Value{access=Local{addr, ...}, ...} => addr | _ => raise InternalError "lvAddr" val addr = !address; val procName = decName ^ valName var; (* Make a list of the patterns in the clause such that the lowest pattern in the structure is the first on the list. *) fun getPatts (Constraint {value, ...}) f acc = getPatts value f acc | getPatts (Applic{f=applF, arg=applA, ...}) f acc = getPatts applF f (f applA :: acc) | getPatts vars f acc = acc (* Produce a list of the size of any tuples or labelled records in the first clause. Tuples in the first clause are passed as separate arguments. We could look at the other clauses and only pass them as separate arguments if each clause contains a tuple. We can treat labelled records exactly like tuples here - we only need to worry about the mapping from labels to tuple offsets when we create the record (getting the order of evaluation right) and in the pattern-matching code (extracting the right fields). We don't have to worry about that here, because all we're doing is untupling and retupling, taking care always to put the values back at exactly the same offset we got them from. SPF 19/12/96 *) val tupleSeq : int list = case clauses of (FValClause{dec, ...} :: _) => getPatts dec tupleWidth [] | _ => raise InternalError "badly formed parse tree"; fun getResultTuple(FValClause{exp, ...}) = tupleWidth exp val resultTuples = List.foldl(fn(t, 1) => getResultTuple t | (_, s) => s) 1 clauses (* If we're debugging we want the result of the function so we don't do this optimisation. *) val resultTuple = if debugging then 1 else resultTuples val extraArg = if resultTuple = 1 then 0 else 1 (* Count the total number of arguments needed. *) val totalArgs = List.foldl (op +) extraArg tupleSeq (* The old test was "totalArgs = 1", but that's not really right, because we could have one genuine arg plus a lot of "()" patterns. We now use the normal inlining mechanism to optimise this (unusual) case too. SPF 19/12/96 *) val noInlineFunction = numOfPats = 1 andalso totalArgs = 1 (* If there is only one pattern and it is not a tuple we generate only one function so we recurse directly. *) val U : unit = if noInlineFunction then address := 0 else (); (* Marks a recursive call. *) (* This function comprises a new declaration level *) val U : unit = level := !level + 1; val oldAddr = !addresses; val U : unit = addresses := 1; (* Turn the list of clauses into a match. *) val matches = map (fn FValClause {dec=vbDec, exp=vbExp, line, ...} => let val patList = getPatts vbDec (fn x => x) []; in mkMatchTree (if numOfPats = 1 then hd patList else TupleTree patList, vbExp, line) end) clauses; (* We arrange for the inner function to be called with the curried arguments in reverse order, but the tupled arguments in the normal order. For example, the ML declaration: fun g a b c = ... gives the order fun g (a, b, c) = ... gives the order fun g (a, b) c (d, e, f) = ... gives the order We want reverse the order of curried arguments to produce better code. (The last curried argument often gets put into the first argument register by the normal calling mechanism, so we try to ensure that it stays there.) We don't reverse the order of tupled arguments because I'm still a bit confused about when a tuple is an argument tuple (reversed?) and when it isn't (not reversed). Just to confuse matters further, the argument numbering scheme is also reversed, so the first argument is actually the highest numbered! For example: is numbered <6,5,4,3,2,1>, so we have to produce: <<2,1>, 3, <6, 5, 4>> as our list of loads in "argList". SPF 19/12/96 *) fun makeArgs [] _ = [] | makeArgs (h::t) n = mkArgTuple (n + h) (n + 1) :: makeArgs t (n + h); val argList : codetree = if numOfPats = 1 then mkArgTuple totalArgs (extraArg+1) else mkTuple (makeArgs tupleSeq extraArg); val innerProcName : string = concat ([procName, "(" , Int.toString totalArgs, ")"]); val codeMatches : codetree = codeAlt (c, matches, argList, innerProcName, newDebugLevel debugEnv); (* If the result is a tuple we try to avoid creating it by adding an extra argument to the inline function and setting this to the result. *) val bodyCode = if resultTuple = 1 then codeMatches else (* The function sets the extra argument to the result of the body of the function. We use the last argument (addr = ~1) for the container so that other arguments will be passed in registers in preference. Since the container is used for the result this argument is more likely to have to be pushed onto the stack within the function than an argument which may have its last use early on. *) mkSetContainer(mkLoad(~1, 0), codeMatches, resultTuple) (* If we're debugging add the debug info before resetting the level. *) val wrapped = wrapFunctionInDebug(bodyCode, procName, argList, aType, resType, newDebugLevel debugEnv) (* Reset level and addresses *) val U = level := !level - 1; val U = addresses := oldAddr; val innerFun : codetree = mkProc (wrapped, !level + 1, totalArgs, innerProcName); (* We now have a function which can be applied to the arguments once we have them. If the function is curried we must make a set of nested inline procedures which will take one of the parameters at a time. If all the parameters are provided at once they will be optimised away. *) (* Make into curried functions *) fun makeFuns depth decName parms [] argCount = (* Got to the bottom. - put in a call to the procedure. *) if resultTuple = 1 then mkEval (mkLoad (addr + 1, numOfPats), parms, false) else (* Create a container for the result, side-effect it in the function, then create a tuple from it. Most of the time this will be optimised away. *) let val {load, dec} = multipleUses(mkContainer resultTuple, mkAddr, !level) val ld = load(!level) in mkEnv(dec @ [mkEval (mkLoad (addr + 1, numOfPats), parms @ [ld], false), mkTupleFromContainer(ld, resultTuple)]) end | makeFuns depth decName parms (t::ts) argCount = let (* Make a function. *) (* This function comprises a new declaration level *) val U = level := !level + 1; val oldAddr = !addresses; val U = addresses := 1; val newDecName : string = decName ^ "(1)"; (* Arguments from this tuple precede older arguments, but order of arguments within the tuple is preserved. SPF 19/12/96 *) val nextParms = loadArgs t (mkLoad (~1, depth)) @ parms; val body = makeFuns (depth - 1) newDecName nextParms ts (argCount + t); in (* Reset level and addresses *) level := !level - 1; addresses := oldAddr; mkInlproc (body, !level + 1, 1, newDecName) end (* end makeFuns *); (* Reset the address of the variable. *) val U : unit = address := addr; in if noInlineFunction then mkDec (addr, innerFun) :: loadFunDecs otherDecs else (* Return the `inner' procedure and the inline functions as a mutually recursive pair. Try putting the inner function first to see if the optimiser does better this way. *) mkDec (addr + 1, innerFun) :: mkDec (addr, makeFuns (numOfPats - 1) procName [] tupleSeq 0) :: loadFunDecs otherDecs end (* loadFunDecs *); val loaded = loadFunDecs tlist; (* Construct the debugging environment by loading all variables. This won't be available recursively in the functions but it will be in the rest of the scope. *) val vars = map (fn(FValBind{functVar, ...}) => !functVar) tlist val (decEnv, newDebugEnv) = makeDebugEntries(vars, debugEnv) in case loaded of [singleton] => (singleton :: decEnv, newDebugEnv) | _ => (* Put the declarations into a package of mutual decs. *) (mkMutualDecs loaded :: decEnv, newDebugEnv) end (* FunDeclaration *) | ValDeclaration {dec = valDec, variables = ref vars, ...} => let (* Recursive val declarations. *) fun codeRecursive [] = [] | codeRecursive (RecValBind :: ds) = (* e.g. val rec a = ... and rec b = ... *) codeRecursive ds | codeRecursive ((ValBind{dec=vbDec, exp=vbExp, ...})::ds) = let local (* The pattern being declared may be a variable or a constraint or (perversely) a layered pattern or a wild-card. *) fun getVars (Constraint{value, ...}) = getVars value | getVars (Layered{var, pattern, ...}) = getVars var @ getVars pattern | getVars (pat as (Ident _)) = [pat] | getVars _ = (* wild-card *) []; in val vars = getVars vbDec; end local (* Set the addresses of the variables. *) val addr = mkAddr (); (* Set all the variables for this declaration to the same address, since they all refer to the same function. There will normally be precisely one variable. *) fun setAddress ( Ident{value = ref(Value{access=Local{addr=lvAddr, level=lvLevel}, ...}),...}) = ( lvAddr := addr; lvLevel := !level ) | setAddress _ = raise InternalError "setAddress - badly formed parsetree" in val () = List.app setAddress vars; end; val rest = codeRecursive ds in (* Recursive declarations must be of the form var = fn ... so the declaration part of the binding must be an identifier pointing to a variable. *) case vars of [] => rest (* ignore it *) (* Perverse but legal: val rec _ = fn ... *) | (Ident{name = idname, value=ref idval, ...} :: _) => let (* Normally precisely one identifier, but may be more if layered. Just create one - all the others have the same address. *) val lvAddr = case idval of Value{access=Local{addr, ...}, ...} => addr | _ => raise InternalError "lvAddr"; in (* Must be a function. This returns either a single declaration or possibly a pair of mutually recursive functions. *) (codeProc vbExp idname true lvAddr) @ rest end | _ => raise InternalError "ValDeclaration - not a variable" end (* Non-recursive val bindings. Always called initially but will call codeRecursive as soon as it finds a "rec" to deal with the rest of the bindings. *) fun codeDecs [] = [] | codeDecs (RecValBind :: otherDecs) = let (* Recursive - all the rest must be recursive. *) val loaded = codeRecursive otherDecs; in (* If there is just one (may conceivably be none) *) if null loaded orelse null (tl loaded) then loaded (* Return the declarations (as a list) *) else (* Put the declarations into a package of mutual decs. *) [mkMutualDecs loaded] end | codeDecs ((ValBind{dec=vbDec, exp=vbExp, ...})::otherDecs) = let (* A binding. *) (* Codegen and push the declarations. For non-recursive declarations, where a declaration may involve a pattern with more than one variable, we need to process the patterns to get the variables. *) (* First the result of the expression is bound to a variable. *) (* added to improve name generation SPF 18/10/94 *) fun getName (Ident {name, ...}) = name | getName (Constraint {value, ...}) = getName value | getName (Layered {var=vbl, pattern, ...}) = ( case vbl of Ident {name, ...} => name (* could (perversely) be "_" *) | _ => getName pattern ) | getName _ = "" (* give up *) val name = (* Get the name of this declaration. *) decName ^ getName vbDec ^ "-"; val decCode = codeBind c vbDec (codegen (vbExp, debugEnv, name, line)) lex line debugEnv in decCode @ codeDecs otherDecs end val decCode = codeDecs valDec (* Construct the debugging environment by loading all variables. *) val (decEnv, env) = makeDebugEntries (vars, debugEnv) in (decCode @ decEnv, env) end (* ValDeclaration *) | Localdec {decs, body, varsInBody=ref vars, ...} => (* Local declarations only *) let (* Simply process the declarations in sequence. *) val (decCode, decEnv) = codeSequence (decs, debugEnv, decName) val (bodyCode, bodyEnv) = codeSequence (body, decEnv, decName) (* We can't simply pass through the environment because it would include the declarations in the local part. Instead we create a new environment here containing only the variables in the in...dec part. *) val (decEnv, resEnv) = makeDebugEntries (vars, debugEnv) in (decCode @ bodyCode @ decEnv, resEnv) end | ExDeclaration tlist => let fun codeEx (ExBind{value=ref exval, previous, ... }) = let val ex = exval; (* This exception is treated in the same way as a local variable except that the value it contains is created by generating a word on the heap. The address of this word constitutes a unique identifier. Non-generative exception bindings i.e. exception ex=ex' merely copy the word from the previous exception. *) val (lvAddr, lvLevel) = case ex of Value{access=Local{addr, level}, ...} => (addr, level) | _ => raise InternalError "lvAddr" in lvAddr := mkAddr (); lvLevel := !level; mkDec (! lvAddr, case previous of EmptyTree => (* Generate a new exception. This is a single mutable word which acts as a token. It is a mutable to ensure that there is precisely one copy of it. *) mkExIden () | Ident{value=ref prevVal, ...} => (* Copy the previous value. N.B. We want the exception identifier here so we can't call codegen. *) codeVal (prevVal, !level, emptyType, lex, line) | _ => raise InternalError "codeEx" ) end (* codeEx *); val exdecs = map codeEx tlist fun getValue(ExBind{value=ref exval, ...}) = exval val (debugDecs, newDebugEnv) = makeDebugEntries(map getValue tlist, debugEnv) in (exdecs @ debugDecs, newDebugEnv) end (* ExDeclaration *) | AbstypeDeclaration {typelist=typeList, declist, ...} => let (* Code-generate the declarations. *) (* We have to put the constructors back onto the abstype temporarily so that we can do exhaustiveness checking. *) val () = List.app (fn (DatatypeBind{tcon=ref tc, valueConstrs = ref vconstrs, ...}) => tcSetConstructors (tc, vconstrs) ) typeList; (* The debugging environment for the declarations should include the constructors but the result shouldn't. For the moment ignore the constructors. *) val (code, newDebug) = codeSequence (declist, debugEnv, decName); (* Now we can take the constructors off again. *) val () = List.app (fn (DatatypeBind{tcon=ref tc, ...}) => tcSetConstructors (tc, [])) typeList; in (code, newDebug) end (* AbstypeDeclaration *) | DatatypeDeclaration {typelist, ...} => (* We just need the value constructors for the debug env. Later we will include the types as well. *) let fun getConstrs(DatatypeBind {tcon = ref tc, ...}, (decs, debugEnv)) = let val (newDecs, newDebug) = makeDebugEntries(tcConstructors tc, debugEnv) in (decs @ newDecs, newDebug) end val (decs: codetree list, newDebugenv: debugenv) = List.foldl getConstrs ([], debugEnv) typelist in (decs, newDebugenv) end | OpenDec {variables=ref vars, ...} => (* All we need to do here is make debugging entries. *) makeDebugEntries(vars, debugEnv) | _ => (* c is Directive or TypeDeclaration*) ([], debugEnv); val (decRest, finalEnv) = codeSequence (tl dlist, firstEnv, decName) in (* Append the remaining declarations. *) (lineChangeCode @ firstDec @ decRest, finalEnv) end end (* codeSequence *); in codeSequence ([(pt, line)], debugEnv, structName) end (* gencode *) end (* type *) end; (* parsetree abstype *) end (* PARSETREE *); polyml.5.2.1/mlsource/MLCompiler/PARSE_TYPE.ML0000644000175000017500000002237510313043335017601 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* Title: Parse Types. Author: Dave Matthews, Cambridge University Computer Laboratory Copyright Cambridge University 1985 *) functor PARSE_TYPE ( (*****************************************************************************) (* SYMBOLS *) (*****************************************************************************) structure SYMBOLS : sig type sys; val leftParen: sys; val typeIdent: sys; val comma: sys; val rightParen: sys; val asterisk: sys; val arrow: sys; val leftCurly: sys; val rightCurly: sys; val colon: sys; val ident: sys; val eq: sys * sys -> bool end; (*****************************************************************************) (* SYMSET *) (*****************************************************************************) structure SYMSET : sig type symset; type sys; val empty: symset; val comma: symset; val rightParen: symset; val asterisk: symset; val arrow: symset; val rightCurly: symset; val colon: symset; val ident: symset; val startTypeSys: symset; val inside: sys * symset -> bool; val ++ : symset * symset -> symset end; (*****************************************************************************) (* LEX *) (*****************************************************************************) structure LEX : sig type lexan; type sys; val insymbol: lexan -> unit; val sy: lexan -> sys; val id: lexan -> string; val lineno: lexan -> int; val errorMessage: lexan * int * string -> unit; end; (*****************************************************************************) (* SKIPS *) (*****************************************************************************) structure SKIPS : sig type sys; type lexan; type symset; val badsyms: sys * lexan -> unit; val testfor: sys * symset * lexan -> bool; val getsym: sys * lexan -> unit; val skipon: symset * symset * string * lexan -> unit; val getid: symset * symset * lexan -> string; val getLabel: symset * lexan -> string; val getList: sys * symset * lexan * (unit -> 'a) -> 'a list end; (*****************************************************************************) (* STRUCTVALS *) (*****************************************************************************) structure STRUCTVALS : sig type types; type typeConstrs; val badType: types; val undefType: typeConstrs; end; (*****************************************************************************) (* TYPETREE *) (*****************************************************************************) structure TYPETREE : sig type types; type typeConstrs; val mkTypeConstruction: string * typeConstrs * types list -> types; val mkProductType: types list -> types; val mkFunctionType: types * types -> types; val mkLabelled: {name: string, typeof: types } list * bool -> types; val mkLabelEntry: string * types -> {name: string, typeof: types }; val sortLabels: {name: string, typeof: types } list * (string -> unit) -> {name: string, typeof: types } list; val unitType: types end; (*****************************************************************************) (* PARSETYPE sharing constraints *) (*****************************************************************************) sharing type SYMBOLS.sys = SYMSET.sys = SKIPS.sys = LEX.sys sharing type SYMSET.symset = SKIPS.symset sharing type LEX.lexan = SKIPS.lexan sharing type STRUCTVALS.types = TYPETREE.types sharing type STRUCTVALS.typeConstrs = TYPETREE.typeConstrs ) : (*****************************************************************************) (* PARSETYPE export signature *) (*****************************************************************************) sig type symset; type lexan; type types; val parseType: symset * lexan * {lookupTvar:string -> types} -> types; end = (*****************************************************************************) (* PARSETYPE functor body *) (*****************************************************************************) struct open LEX; open SYMSET; open SKIPS; open TYPETREE; open SYMBOLS; open STRUCTVALS; infix 7 eq; infix 8 ++; infix 8 inside; (* defined here to save re-evaluation (SPF 24/9/94) *) val tyseqSyntax = SYMSET.comma ++ SYMSET.rightParen; val lrSyntax = SYMSET.comma ++ SYMSET.rightCurly; fun parseType (fsys, lex, env as {lookupTvar}) = let fun tupleType fsys = let fun basicType fsys = let (* First part may be a type sequence. *) val tySeq = if sy lex eq leftParen then (* sequence of types *) let fun processList () = let val thisType = if sy lex inside startTypeSys then parseType (fsys ++ tyseqSyntax, lex, env) else ( badsyms (typeIdent, lex); badType (* not there *) ); in (* Check for any more *) if testfor (SYMBOLS.comma, startTypeSys, lex) then thisType :: processList() (* get some more *) else [thisType] (* that's it *) end (* processList *); (* code bugfixed SPF 19/2/94 *) val UUU = insymbol lex; (* Remove opening bracket *) val sequence = processList(); (* read list of items *) in getsym (SYMBOLS.rightParen, lex); sequence end else if sy lex eq leftCurly then ( insymbol lex; (* Remove opening bracket *) if testfor (SYMBOLS.rightCurly, empty, lex) then [unitType] else let (* All the labels should be the same sort. *) val l = getList (SYMBOLS.comma, empty, lex, fn () => let val name = getLabel (fsys ++ SYMSET.colon, lex); in getsym (SYMBOLS.colon, lex); mkLabelEntry (name, parseType (fsys ++ lrSyntax, lex, env)) end); in getsym (SYMBOLS.rightCurly, lex); [mkLabelled (sortLabels (l, fn msg => errorMessage (lex, lineno lex, msg)), true) (* frozen *)] end ) else if sy lex eq typeIdent then let (* type variable *) val ty = [#lookupTvar env (id lex)]; in getsym (typeIdent, lex); ty end else if sy lex eq SYMBOLS.ident (* Constructor such as `int' *) then [mkTypeConstruction (getid (SYMSET.ident, fsys, lex), undefType, [])] else ( badsyms (SYMBOLS.ident, lex); [] ); in (* Type sequence read. Can now have some type constructors. *) if sy lex eq SYMBOLS.ident then let (* Returns the type made from the constructors. *) fun constructors args = let val constructed = mkTypeConstruction (id lex, undefType, args); in insymbol lex; if sy lex eq SYMBOLS.ident then constructors [constructed] else constructed end; in constructors tySeq end (* no constructor - get the first part of the sequence and check that that's all. *) else case tySeq of [] => badType | [t] => t | (t::_) => (badsyms (SYMBOLS.ident, lex); t) end (* basicType *); (* ty * .. * ty *) val fsys' = fsys ++ SYMSET.asterisk; val firstPart = basicType fsys'; in if testfor (SYMBOLS.asterisk, empty, lex) then let fun parseRest () = basicType fsys' :: (if testfor (SYMBOLS.asterisk, empty, lex) then parseRest () else [] ); in mkProductType (firstPart :: parseRest ()) end else firstPart end; (* tupleType *)(* ty -> ty *) val firstType = tupleType (fsys ++ SYMSET.arrow); in if testfor (SYMBOLS.arrow, empty, lex) then mkFunctionType (firstType, parseType (fsys, lex, env)) else ( skipon (fsys, empty, "End of type", lex); firstType ) end; end; polyml.5.2.1/mlsource/MLCompiler/PRINT_TABLE.ML0000644000175000017500000001337410772157213017702 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* Title: Table of printing functions for user-defined types. Author: Dave Matthews, Cambridge University Computer Laboratory Copyright Cambridge University 1990 *) (* implicitly imports Boot.Misc, Boot.PrettyPrinter, StructVals and Address *) (* The original purpose of this module was to allow for type-dependent print functions to be installed by the user. That requires a special mechanism to allow a function to be installed in a child database without needing to be able to write to the top-level database containing the compiler. This has been extended to deal with SML97 overloading for both functions and literal constants and also for ref-like types which support pointer equality even though these cases are intended only for the implementors of libraries which would probably be in the top-level database. *) functor PRINT_TABLE ( structure CODETREE: sig type machineWord; type codetree end; (*****************************************************************************) (* STRUCTVALS *) (*****************************************************************************) structure STRUCTVALS : sig type typeId; type typeConstrs val sameTypeId: typeId * typeId -> bool; val tcIdentifier: typeConstrs -> typeId end; (*****************************************************************************) (* PRETTYPRINTER *) (*****************************************************************************) structure PRETTYPRINTER : sig type prettyPrinter; end): (*****************************************************************************) (* PRINTTABLE export signature *) (*****************************************************************************) sig type machineWord type typeId; type prettyPrinter; type typeConstrs type codetree val addPp: typeId * (prettyPrinter -> int -> machineWord -> machineWord -> unit) -> unit; val getPrint: typeId -> (prettyPrinter -> int -> machineWord -> machineWord -> unit); val addOverload: string * typeConstrs * codetree -> unit val getOverloads: string -> (typeConstrs * codetree) list val getOverload: string * typeConstrs * (unit->codetree) -> codetree end = (*****************************************************************************) (* PRINTTABLE functor body *) (*****************************************************************************) struct open STRUCTVALS; open PRETTYPRINTER; open CODETREE type overloadEntry = string * typeConstrs * codetree; (* Create a ref to hold the list *) val overloadTable : overloadEntry list ref = ref [] (* The most recent ref refers to the current level of the hierarchy, so is the one we should update. *) fun addOverload (name, cons, overload) = let (* Remove any existing occurrences of the type. The only reason is to allow any existing function to be garbage-collected. *) fun filter [] = [] | filter ((this as (n, t, _)) :: rest) = if n = name andalso sameTypeId (tcIdentifier cons, tcIdentifier t) then filter rest else this :: filter rest in overloadTable := (name, cons, overload) :: filter (!overloadTable) end (* Return all the overloads for a particular identifier. *) fun getOverloads name = let fun searchList [] = [] | searchList ((n,t,v)::rest) = if name = n then (t, v) :: searchList rest else searchList rest in searchList (! overloadTable) end; (* Return the first matching overload or call mkDefault. *) fun getOverload(name, constr, mkDefault) = let fun searchList [] = mkDefault() | searchList ((n,t,v)::rest) = if name = n andalso sameTypeId (tcIdentifier constr, tcIdentifier t) then v else searchList rest in searchList (! overloadTable) end; (* TODO: Treat the pretty print functions as just another form of overloading except that we only want the most recent occurrence. *) type printEntry = typeId * (prettyPrinter -> int -> machineWord -> machineWord -> unit); (* Create a ref to hold the list. *) val printTable : printEntry list ref = ref []; fun addPp (consid, pproc) = let (* Remove any existing occurrences of the type. The only reason is to allow any existing function to be garbage-collected. *) fun filter [] = [] | filter ((this as (i, _)) :: rest) = if sameTypeId (i, consid) then filter rest else this :: filter rest in printTable := (consid,pproc) :: filter (!printTable) end (* However, we should search ALL the refs when we lookup a constructor *) fun getPrint id = let fun searchList [] = raise Subscript | searchList ((i,p)::t) = if sameTypeId (i, id) then p else searchList t; in searchList (! printTable) end; end; polyml.5.2.1/mlsource/MLCompiler/ParseDec.ML0000644000175000017500000000235710313043335017552 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure ParseDec = PARSE_DEC ( structure MISC = Misc structure SYMBOLS = Symbols structure LEX = Lex structure SYMSET = SymSet structure SKIPS = Skips structure STRUCTVALS = StructVals structure TYPETREE = TypeTree structure PARSETREE = ParseTree structure STRUCTURES = Structures structure PARSETYPE = ParseType structure UTILITIES = Utilities structure DEBUG = Debug ); polyml.5.2.1/mlsource/MLCompiler/ParseTree.ML0000644000175000017500000000250010772157213017756 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure ParseTree = PARSE_TREE ( structure LEX = Lex structure CODETREE = CodeTree structure STRUCTVALS = StructVals structure TYPETREE = TypeTree structure VALUEOPS = ValueOps structure UTILITIES = Utilities structure UNIVERSAL = Universal structure UNIVERSALTABLE = UniversalTable structure MISC = Misc structure PRETTYPRINTER = PrettyPrinter structure DEBUG = Debug structure ADDRESS = Address structure RUNCALL = RunCall structure DEBUGGER = Debugger ) ; polyml.5.2.1/mlsource/MLCompiler/ParseType.ML0000644000175000017500000000204510313043335017772 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure ParseType = PARSE_TYPE ( structure LEX = Lex structure SYMSET = SymSet structure SKIPS = Skips structure TYPETREE = TypeTree structure SYMBOLS = Symbols structure STRUCTVALS = StructVals ) ; polyml.5.2.1/mlsource/MLCompiler/PrintTable.ML0000644000175000017500000000170710772157213020140 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure PrintTable = PRINT_TABLE ( structure CODETREE = CodeTree structure STRUCTVALS = StructVals structure PRETTYPRINTER = PrettyPrinter ); polyml.5.2.1/mlsource/MLCompiler/SKIPS_.ML0000644000175000017500000001371510313043335017114 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* Title: Auxiliary Parsing Functions. Author: Dave Matthews, Cambridge University Computer Laboratory Copyright Cambridge University 1985 *) functor SKIPS_ ( (*****************************************************************************) (* SYMBOLS *) (*****************************************************************************) structure SYMBOLS : sig type sys; val stringConst: sys; val integerConst: sys; val eq : sys * sys -> bool; val repr: sys -> string; end; (*****************************************************************************) (* LEX *) (*****************************************************************************) structure LEX : sig type lexan; type sys; val sy: lexan -> sys; val id: lexan -> string; val insymbol: lexan -> unit; val lineno: lexan -> int; val errorMessage: lexan * int * string -> unit; end; (*****************************************************************************) (* SYMSET *) (*****************************************************************************) structure SYMSET : sig type symset; type sys; val inside: sys * symset -> bool; val ++ : symset * symset -> symset; val ident: symset; val typeIdent: symset; val integerConst: symset; val realConst: symset; val declarableVarSys: symset; end; (*****************************************************************************) (* SKIPS sharing constraints *) (*****************************************************************************) sharing type SYMBOLS.sys = LEX.sys = SYMSET.sys ) : (*****************************************************************************) (* SKIPS export signature *) (*****************************************************************************) sig type sys; type lexan; type symset; val notfound: string * lexan -> unit; val badsyms: sys * lexan -> unit; val getsym: sys * lexan -> unit; val skipon: symset * symset * string * lexan -> unit; val testfor: sys * symset * lexan -> bool; val getid: symset * symset * lexan -> string; val getLabel: symset * lexan -> string; val getList: sys * symset * lexan * (unit -> 'a) -> 'a list; end = (*****************************************************************************) (* SKIPS functor body *) (*****************************************************************************) struct infix 5 inside; infix 6 ++; infix 8 eq; open SYMBOLS LEX SYMSET; local (* Result is in ``id'' *) val idSys = ident ++ typeIdent ++ integerConst ++ realConst; in (* Try to recreate the original lexical item. *) fun notfound (expected, lex) = let val found = if sy lex eq SYMBOLS.stringConst then "\"" ^ id lex ^ "\"" else if sy lex inside idSys then id lex else repr (sy lex) in errorMessage (lex, lineno lex, expected ^ " expected but " ^ found ^ " was found") end; end; fun badsyms (sym, lex) = (notfound (repr sym, lex); insymbol lex); fun getsym (sym, lex) = if (sy lex) eq sym then insymbol lex else notfound (repr sym, lex); infix 5 notin; fun a notin b = not (a inside b); (* used at the end of a syntactic unit to check that the current symbol is a suitable terminator *) fun skipon (a, b, errmss, lex) = if (sy lex) notin a then ( notfound (errmss, lex); while sy lex notin (a ++ b) do insymbol lex ) else (); (* returns an identifier *) fun getid (syms, fsys, lex) = if (sy lex) inside syms then let val iden = id lex in insymbol lex; iden end else ( notfound ("Identifier", lex); while sy lex notin fsys do insymbol lex; "" ); (* Read a label and check that it is valid if numeric. *) fun getLabel (fsys, lex) = if (sy lex) eq SYMBOLS.integerConst then let val iden = id lex; val firstCh = String.str(String.sub(iden, 0)); in insymbol lex; if firstCh = "~" orelse firstCh = "0" then errorMessage (lex, lineno lex, "Labels must be 1,2,3,....") else (); iden end else getid (declarableVarSys, fsys, lex); (* Tests for a symbol and removes it if it is there. startsys is the set of symbols which can start each element. *) fun testfor (sym, startsys, lex) = (* repeat if the separator or a starting sym is found *) if sy lex eq sym then (insymbol lex; true) else if sy lex inside startsys then (badsyms (sym, lex); true) else false; fun getList (separator, startsys, lex, each) = let fun forList () = each () :: (if testfor (separator, startsys, lex) then forList () else []); in forList () end; end (* SKIPS *); polyml.5.2.1/mlsource/MLCompiler/STRUCTURES_.ML0000644000175000017500000045042711003076053017753 0ustar daviddavid(* Copyright (c) 2000-7 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* Title: Module Structure and Operations. Author: Dave Matthews, Cambridge University Computer Laboratory Copyright Cambridge University 1985 *) functor STRUCTURES_ ( (*****************************************************************************) (* LEX *) (*****************************************************************************) structure LEX : sig type lexan; type prettyPrinter; val errorProc: lexan * int * (prettyPrinter -> unit) -> unit; val errorMessage: lexan * int * string -> unit; val warningProc: lexan * int * (prettyPrinter -> unit) -> unit; val lineno: lexan -> int; val nullLex: lexan; (* Used when no errors are expected - streams raise exceptions. *) val debugParams: lexan -> Universal.universal list end; (*****************************************************************************) (* CODETREE *) (*****************************************************************************) structure CODETREE : sig type machineWord; type codetree; val CodeNil: codetree; val CodeZero: codetree; val mkLoad: int * int -> codetree; val mkConst: machineWord -> codetree; val mkDec: int * codetree -> codetree; val mkInd: int * codetree -> codetree; val mkProc: codetree * int * int * string -> codetree; val mkMacroProc: codetree * int * int * string -> codetree; val mkStr: string -> codetree; val mkRaise: codetree -> codetree; val mkEval: codetree * codetree list * bool -> codetree; val mkTuple: codetree list -> codetree; val mkEnv: codetree list -> codetree; val multipleUses: codetree * (unit -> int) * int -> {load: int -> codetree, dec: codetree list}; end (* CODETREE *); (*****************************************************************************) (* STRUCTVALS *) (*****************************************************************************) structure STRUCTVALS : sig type signatures; type typeDependent; type codetree; type typeId; type types type 'a tag; datatype structVals = NoStruct | Struct of { name: string, signat: signatures, access: valAccess } and values = Value of { name: string, typeOf: types, access: valAccess, class: valueClass } (* Classes of values. *) and valueClass = SimpleValue | Exception | Constructor of { nullary: bool } and valAccess = Global of codetree | Local of { addr: int ref, level: int ref } | Selected of { addr: int, base: structVals } | Formal of int | Overloaded of typeDependent (* Values only. *) (* Structures *) val undefinedStruct: structVals; val isUndefinedStruct: structVals -> bool; val structSignat: structVals -> signatures; val structName: structVals -> string; val structAccess: structVals -> valAccess; val structVar: structVals tag; val makeSelectedStruct: structVals * structVals -> structVals; val makeLocalStruct: string * signatures -> structVals; val makeGlobalStruct: string * signatures * codetree -> structVals; val makeFormalStruct: string * signatures * int -> structVals; (* Functors *) type functors; val undefinedFunctor: functors; val isUndefinedFunctor: functors -> bool; val functorName: functors -> string; val functorArg: functors -> structVals; val functorResult: functors -> signatures; val functorAccess: functors -> valAccess; val makeFunctor: string * structVals * signatures * valAccess -> functors; (* Signatures *) type univTable; val sigName: signatures -> string; val sigTab: signatures -> univTable; val sigMinTypes: signatures -> int; val sigMaxTypes: signatures -> int; val makeSignatures: string -> signatures; val makeCopy: string * signatures * int * int -> signatures; (* type or structure identifiers *) val makeFreeId: unit -> typeId; val makeVariableId: unit -> typeId; val makeBoundId: int -> typeId; val unsetId: typeId; val isUnsetId: typeId -> bool; val isFreeId: typeId -> bool; val isBoundId: typeId -> bool; val isVariableId: typeId -> bool; val offsetId: typeId -> int; val sameTypeId: typeId * typeId -> bool; val unifyTypeIds: typeId * typeId -> bool; (* Types *) (* Standard type constructors. *) type typeConstrs; val undefType: typeConstrs; val tcName: typeConstrs -> string; val tcArity: typeConstrs -> int; val tcTypeVars: typeConstrs -> types list; val tcEquality: typeConstrs -> bool; val tcEquivalent: typeConstrs -> types; val tcConstructors: typeConstrs -> values list; val tcSetConstructors: typeConstrs * values list -> unit; val tcIdentifier: typeConstrs -> typeId; val typeConstrVar: typeConstrs tag; val makeTypeConstrs: string * types list * types * typeId * bool * int -> typeConstrs; val badType: types; val emptyType: types; val isEmpty: types -> bool; val makeValueConstr: string * types * bool * valAccess -> values; val isConstructor: values -> bool; (* Access to values, structures etc. *) val makeGlobal: codetree -> valAccess; val makeLocal: unit -> valAccess; val makeFormal: int -> valAccess; val isGlobal: valAccess -> bool; val isLocal: valAccess -> bool; val isFormal: valAccess -> bool; val isSelected: valAccess -> bool; val vaGlobal: valAccess -> codetree; val vaFormal: valAccess -> int; val vaLocal: valAccess -> { addr: int ref, level: int ref }; val vaSelected: valAccess -> { addr: int, base: structVals }; (* Values. *) val valName: values -> string; val valTypeOf: values -> types; val valueVar: values tag; (* Infix status *) type fixStatus; val fixVar: fixStatus tag; datatype env = Env of { lookupVal: string -> values option, lookupType: string -> typeConstrs option, lookupFix: string -> fixStatus option, lookupStruct: string -> structVals option, lookupSig: string -> signatures option, lookupFunct: string -> functors option, enterVal: string * values -> unit, enterType: string * typeConstrs -> unit, enterFix: string * fixStatus -> unit, enterStruct: string * structVals -> unit, enterSig: string * signatures -> unit, enterFunct: string * functors -> unit }; val makeEnv: signatures -> env; end (* STRUCTVALS *); (*****************************************************************************) (* VALUEOPS *) (*****************************************************************************) structure VALUEOPS : sig type types; type codetree; type values; type structVals; type valAccess; type lexan; type typeConstrs; type fixStatus val mkGvar: string * types * codetree -> values; val mkGex: string * types * codetree -> values; val mkSelectedVar: values * structVals -> values; val codeStruct: structVals * int -> codetree; val codeAccess: valAccess * int -> codetree val codeVal: values * int * types * lexan * int -> codetree val codeExFunction: values * int * types * lexan * int -> codetree val lookupAny: string * (string -> 'a option) * (string -> structVals option) * (structVals -> string -> 'a option) * string * 'a * (string -> unit) -> 'a val lookupStructure: string * {lookupStruct: string -> structVals option} * string * (string -> unit) -> structVals val lookupStructureDirectly: string * {lookupStruct: string -> structVals option} * string * (string -> unit) -> structVals val lookupTyp: {lookupType: string -> typeConstrs option, lookupStruct: string -> structVals option} * string * (string -> unit) -> typeConstrs end (* VALUEOPS *); (*****************************************************************************) (* TYPETREE *) (*****************************************************************************) structure TYPETREE : sig type typeConstrs; type types; type lexan; type prettyPrinter; type typeId; type values; val mkTypeConstruction: string * typeConstrs * types list -> types; val mkFunctionType: types * types -> types; (* Fill in the values of type variables and make checks. *) val assignTypes: types * (string -> typeConstrs) * lexan * int -> unit; val exnType: types; (* Match a candidate to a target type. *) val matchTypes: types * types * (typeId -> typeConstrs option) * lexan * int * (prettyPrinter -> unit) -> unit; (* Used to establish sharing constraints between type constructors. *) val linkTypeConstructors: typeConstrs * typeConstrs * (string -> unit) -> unit; (* Used to link a type constructor to a type as the result of a "where type" construction. *) val setWhereType: typeConstrs * typeConstrs * (string -> unit) -> unit; (* Check that a type constructor permits equality. *) val permitsEquality: typeConstrs -> bool; val copyType: types * (types -> types) * (typeConstrs -> typeConstrs) -> types; val setTypeConstr: typeConstrs * (typeConstrs -> typeId) -> unit; val enterTypeConstrs: typeConstrs * typeConstrs * { enter: typeId * typeConstrs -> unit, lookup: typeId -> typeConstrs option} -> unit; val identical: types * types -> bool; val identicalConstr: typeConstrs * typeConstrs -> bool; val makeEquivalent: typeConstrs * types list -> types; val genEqualityFunctions: typeConstrs list * (string -> unit) * bool -> unit; val checkWellFormed: types * (string -> unit) -> unit; val findValueConstructor: values -> values; val copyTypeConstr: typeConstrs * (typeId -> bool) * (unit -> typeId) * {enter: typeId * typeConstrs -> unit, lookup: typeId -> typeConstrs option} * (types -> types) * string -> typeConstrs; val display: types * int * prettyPrinter * bool -> unit; val displayTypeConstrs: typeConstrs * int * prettyPrinter * bool -> unit; (* A list of type variables. *) val displayTypeVariables: types list * int * prettyPrinter * bool -> unit; (* added SPF 16/4/95 *) val sameTypeVar : types * types -> bool; (* Check for free type variables. Added for ML97. *) val checkForFreeTypeVariables: string * types * lexan -> unit; end (* TYPETREE *); (*****************************************************************************) (* PARSETREE *) (*****************************************************************************) structure PARSETREE : sig type parsetree; type types; type lexan; type prettyPrinter; type typeId; type env; type codetree; type environEntry type fixStatus type values val ptDisplay: parsetree * int * prettyPrinter -> unit; val pass2: parsetree * (unit -> typeId) * env * lexan * int * string -> types; type debugenv = environEntry list * (int->codetree) val gencode: parsetree * lexan * debugenv * int * int ref * string * int -> codetree list * debugenv end; (*****************************************************************************) (* MISC *) (*****************************************************************************) structure MISC : sig exception InternalError of string; (* compiler error *) val lookupDefault : ('a -> 'b option) -> ('a -> 'b option) -> 'a -> 'b option end; (*****************************************************************************) (* UTILITIES *) (*****************************************************************************) structure UTILITIES : sig val noDuplicates: (string -> unit) -> { apply: (string * 'a -> unit) -> unit, enter: string * 'a -> unit, lookup: string -> 'a option }; val searchList: unit -> { apply: (string * 'a -> unit) -> unit, enter: string * 'a -> unit, lookup: string -> 'a option }; val splitString: string -> { first:string,second:string } end; (*****************************************************************************) (* UNIVERSAL *) (*****************************************************************************) structure UNIVERSAL : sig type universal type 'a tag val tagIs : 'a tag -> universal -> bool val tagProject : 'a tag -> universal -> 'a end; (*****************************************************************************) (* UNIVERSALTABLE *) (*****************************************************************************) structure UNIVERSALTABLE: sig type universal type univTable type 'a tag val univEnter: univTable * 'a tag * string * 'a -> unit; val univLookup: univTable * 'a tag * string -> 'a option; val univFold: univTable * (string * universal * 'a -> 'a) * 'a -> 'a; end; (*****************************************************************************) (* DEBUG *) (*****************************************************************************) structure DEBUG : sig val ml90Tag: bool Universal.tag val inlineFunctorsTag: bool Universal.tag val errorDepthTag : int Universal.tag val getParameter : 'a Universal.tag -> Universal.universal list -> 'a end; (*****************************************************************************) (* PRETTYPRINTER *) (*****************************************************************************) structure PRETTYPRINTER : sig type prettyPrinter val ppAddString : prettyPrinter -> string -> unit val ppBeginBlock : prettyPrinter -> int * bool -> unit val ppEndBlock : prettyPrinter -> unit -> unit val ppBreak : prettyPrinter -> int * int -> unit end; (*****************************************************************************) (* STRETCHARRAY *) (*****************************************************************************) structure STRETCHARRAY : sig type 'a stretchArray val stretchArray : int * '_a -> '_a stretchArray val update : '_a stretchArray * int * '_a -> unit val sub : 'a stretchArray * int -> 'a end; (*****************************************************************************) (* STRUCTURES sharing constraints *) (*****************************************************************************) sharing type LEX.lexan = VALUEOPS.lexan = TYPETREE.lexan = PARSETREE.lexan sharing type LEX.prettyPrinter = PARSETREE.prettyPrinter = TYPETREE.prettyPrinter = PRETTYPRINTER.prettyPrinter sharing type CODETREE.codetree = VALUEOPS.codetree = PARSETREE.codetree = STRUCTVALS.codetree sharing type STRUCTVALS.types = VALUEOPS.types = TYPETREE.types = PARSETREE.types sharing type STRUCTVALS.values = VALUEOPS.values = PARSETREE.values = TYPETREE.values sharing type STRUCTVALS.typeId = TYPETREE.typeId = PARSETREE.typeId sharing type STRUCTVALS.structVals = VALUEOPS.structVals sharing type STRUCTVALS.valAccess = VALUEOPS.valAccess sharing type STRUCTVALS.typeConstrs = VALUEOPS.typeConstrs = TYPETREE.typeConstrs sharing type STRUCTVALS.tag = UNIVERSALTABLE.tag = UNIVERSAL.tag sharing type STRUCTVALS.env = PARSETREE.env sharing type UNIVERSALTABLE.univTable = STRUCTVALS.univTable sharing type UNIVERSALTABLE.universal = UNIVERSAL.universal; sharing type STRUCTVALS.fixStatus = PARSETREE.fixStatus = VALUEOPS.fixStatus ) : (*****************************************************************************) (* STRUCTURES export signature *) (*****************************************************************************) sig (* Structures form the global name spaces. *) type structs; type structVals; type types; type parsetree; type lexan; type prettyPrinter; type values; type typeConstrs; type codetree; type signatures; type functors; type env; type sigBind and functorBind and structBind type machineWord type fixStatus val isEmptyStruct: structs -> bool; val emptyStruct: structs (* added 8/2/94 SPF *) val mkStructureDec: structBind list -> structs; val mkStruct: structs list -> structs; val mkSignatureDec: sigBind list -> structs; val mkSig: structs list -> structs; val mkFunctorDec: functorBind list -> structs; val mkInclude: structs list -> structs; val mkLocaldec: structs list * structs list * bool * int -> structs; val mkTopLevel: parsetree * int -> structs; val mkStructureBinding: string * structs * bool * structs * int -> structBind; val mkStructIdent: string -> structs; val mkSigIdent: string -> structs; val mkSignatureBinding: string * structs * int -> sigBind; val mkValSig: string * types * int -> structs; val mkExSig: string * types * int -> structs; val mkFunctorAppl: string * structs -> structs; val mkFormalArg: string * structs -> structs; val mkFunctorBinding: string * structs * bool * structs * structs * int -> functorBind; val mkSharing: bool * string list * int -> structs; val mkWhereType: structs * types list * string * types * int -> structs val mkSigConstraint: structs * structs * bool -> structs val pass2Structs: structs list * lexan * env -> unit; val checkForFreeTypeVars: ((string*values->unit)->unit) * ((string*structVals->unit)->unit) * ((string*functors->unit)->unit) * lexan -> unit val pass4Structs: codetree * structs list -> { fixes: (string * fixStatus) list, values: (string * values) list, structures: (string * structVals) list, signatures: (string * signatures) list, functors: (string * functors) list, types: (string* typeConstrs) list }; val gencodeStructs: structs list * lexan -> codetree; val displayStructs: structs list * int * prettyPrinter -> unit; end (* STRUCTURES export signature *) = (*****************************************************************************) (* STRUCTURES functor body *) (*****************************************************************************) struct open MISC; open PRETTYPRINTER; open LEX; open CODETREE; open STRUCTVALS; open VALUEOPS; open TYPETREE; open PARSETREE; open UTILITIES; open DEBUG; open UNIVERSALTABLE; open UNIVERSAL; (* for tag record selectors *) val displayType = TYPETREE.display; (* Union of the various kinds of core language declaration. Structures are included because they can be declared by opening a structure with substructures. *) datatype coreDeclaration = CoreValue of values | CoreType of typeConstrs | CoreFix of string*fixStatus (* Include the name because it isn't part of fixStatus. *) | CoreStruct of structVals (* "structs" is the abstract syntax for the module language. *) datatype structs = StructureDec of structBind list (* List of structure decs *) | StructureIdent of structureIdentForm (* A structure name *) | StructDec of structDecForm (* struct ... end *) | SignatureDec of sigBind list (* List of signature decs *) | SignatureIdent of string (* A signature name *) | SigDec of structs list (* sig ... end *) | ValSig of valExSig | ExSig of valExSig | FunctorDec of functorBind list (* List of functor decs. *) | FunctorAppl of functorApplForm (* Appln of a functor *) | Singleton of singletonForm (* Any other decln. *) | FormalArg of formalArgStruct (* Functor arg. *) | Sharing of shareConstraint (* Sharing constraints. *) | WhereType of whereTypeStruct (* type realisation. *) | Localdec of localdecStruct (* Local/Let. *) | IncludeSig of structs list (* Include. *) | SigConstraint of (* Constraint of str to match sig. *) { str: structs, (* Structure to constain *) csig: structs, (* Constraining signature *) opaque: bool (* True if opaque, false if transparent. *) } | EmptyStruct (* Error cases. *) (* List of structures. *) withtype structBind = { name: string, (* The name of the structure *) sigStruct: structs, (* Its signature *) opaque: bool, (* true if it was :> rather than : *) value: structs, (* And its value *) valRef: structVals ref, (* The structure variable declared. *) line: int } (* The constraint could be removed from here and instead the parser could desugar the structure binding. i.e. structure S: SIG = STREXP becomes structure S = STREXP: SIG. structBind is also used for structures within signatures where this wouldn't work so a separate data structure for structure specifications would be needed. *) and sigBind = { name: string, (* The name of the signature *) sigStruct: structs,(* Its value *) sigRef: signatures ref, (* The "value" of the signature. *) line: int } (* A reference to a name *) and structureIdentForm = { name: string, (* The name *) valRef: structVals ref (* The variable found. *) } (* struct ... end *) and structDecForm = { alist: structs list, (* The list of items in it. *) value: signatures (* The value *) } and singletonForm = { dec: parsetree, (* The value *) vars: coreDeclaration list ref, (* The declarations *) line: int } (* Signature of a value or exception. *) and valExSig = { name: string, typeof: types, line: int } (* Application of a functor. *) and functorApplForm = { name: string, arg: structs, valRef: functors ref (* The functor looked up. *) } (* Functor binding. *) and functorBind = { name: string, sigStruct: structs, opaque: bool, (* true if it was :> rather than : *) body: structs, arg: structs, valRef: functors ref, (* The functor variable declared. *) line: int } and formalArgStruct = { name: string, sigStruct: structs, valRef: structVals ref } (* The structure variable. *) and shareConstraint = { isType: bool, shares: string list, line: int } and whereTypeStruct = { sigExp: structs, typeVars: types list, typeName: string, realisation: types, line: int } (* Used for local strdec in strdec and let strdec in strexp. *) and localdecStruct = { decs: structs list, body: structs list, localDec: bool, line: int } (* with *) fun isSignatureIdent (SignatureIdent x) = true | isSignatureIdent _ = false; fun isEmptyStruct EmptyStruct = true | isEmptyStruct _ = false; (* Make a signature for initialisating variables and for undeclared signature variables. *) val undefinedSignature = makeCopy("UNDEFINED", makeSignatures "UNDEFINED", 0, 0); (* Construction functions called by the parser. *) val emptyStruct = EmptyStruct; (* added SPF 8/2/94 *) val mkStructureDec = StructureDec; fun mkStructureBinding (name, signat, opaque, value, line) = { name = name, sigStruct = signat, opaque = opaque, value = value, valRef = ref undefinedStruct, line = line }; fun mkStructIdent name = StructureIdent { name = name, valRef = ref undefinedStruct }; (* For struct...end, make a signature to accept the values. *) fun mkStruct alist = StructDec { alist = alist, value = makeSignatures "" }; val mkSignatureDec = SignatureDec; fun mkSignatureBinding (name, sg, ln) = { name = name, sigStruct = sg, line = ln, sigRef = ref undefinedSignature }; val mkSigIdent = SignatureIdent; val mkSig = SigDec; fun mkTopLevel (dec, line) = Singleton { dec = dec, vars = ref [], line = line }; val mkFunctorDec = FunctorDec; fun mkFunctorBinding (name, signat, opaque, body, arg, line) = { name = name, sigStruct = signat, opaque = opaque, body = body, arg = arg, valRef = ref undefinedFunctor, line = line }; fun mkFunctorAppl (name, arg) = FunctorAppl { name = name, arg = arg, valRef = ref undefinedFunctor }; fun mkValSig (name, typeof, line) = ValSig { name = name, typeof = typeof, line = line }; fun mkExSig (name, typeof, line) = ExSig { name = name, typeof = typeof, line = line }; fun mkFormalArg (name, signat) = FormalArg { name = name, sigStruct = signat, valRef = ref undefinedStruct }; fun mkSharing (isType, shares, line) = Sharing { isType = isType, shares = shares, line = line }; fun mkWhereType (sigexp, typeVars, name, types, line) = WhereType { sigExp = sigexp, typeVars = typeVars, typeName = name, realisation = types, line = line }; fun mkLocaldec (decs, body, localDec, line) = Localdec { decs = decs, body = body, localDec = localDec, line = line }; val mkInclude = IncludeSig; fun mkSigConstraint(str, csig, opaque) = SigConstraint{str=str, csig=csig, opaque=opaque} (* end; structs abstype *) (* Pretty printing *) fun displayStructs (strs : structs list, depth : int, pprint: prettyPrinter ) : unit = let (* Prints a list of items. *) fun displayList ([], separator, depth) dodisplay = () | displayList ([v], separator, depth) dodisplay = if depth <= 0 then ppAddString pprint "..." else dodisplay (v, depth) | displayList (v::vs, separator, depth) dodisplay = if depth <= 0 then ppAddString pprint "..." else let val brk = if separator = "," orelse separator = ";" then 0 else 1 in ppBeginBlock pprint (0, false); dodisplay (v, depth); ppBreak pprint (brk, 0); ppAddString pprint separator; ppEndBlock pprint (); ppBreak pprint (1, 0); displayList (vs, separator, depth - 1) dodisplay end (* displayList *) fun display (str, depth) = ( if depth <= 0 (* elide further text. *) then ppAddString pprint "..." else case str of StructureDec (structList : structBind list) => let fun displayStructBind ( {name, sigStruct, value, opaque, ...}: structBind, depth) = ( ppBeginBlock pprint (3, false); ppAddString pprint name; if isEmptyStruct sigStruct then () else (* Signature is optional *) ( ppAddString pprint (if opaque then " :>" else " :"); ppBreak pprint (1, 0); display (sigStruct, depth - 1) ); if isEmptyStruct value then () else (* May be a structure signature *) ( ppAddString pprint " ="; ppBreak pprint (1, 0); display (value, depth - 1) ); ppEndBlock pprint () ) in ppBeginBlock pprint (3, false); ppAddString pprint "structure"; ppBreak pprint (1, 0); displayList (structList, "and", depth) displayStructBind; ppEndBlock pprint () end | StructureIdent {name, ...} => ppAddString pprint name | StructDec {alist, ...} => ( ppBeginBlock pprint (1, true); ppAddString pprint "struct"; ppBreak pprint (1, 0); displayList (alist, "", depth) display; ppBreak pprint (1, 0); ppAddString pprint "end"; ppEndBlock pprint () ) | SignatureDec (structList : sigBind list) => let fun displaySigBind ({name, sigStruct, ...}: sigBind, depth) = ( ppBeginBlock pprint (3, false); ppAddString pprint (name ^ " ="); ppBreak pprint (1, 0); display (sigStruct, depth - 1); ppEndBlock pprint () ) in ppBeginBlock pprint (3, false); ppAddString pprint "signature"; ppBreak pprint (1, 0); displayList (structList, "and", depth) displaySigBind; ppEndBlock pprint () end | SignatureIdent (name : string) => ppAddString pprint name | SigDec (structList : structs list) => ( ppBeginBlock pprint (1, true); ppAddString pprint "sig"; ppBreak pprint (1, 0); displayList (structList, "", depth) display; ppBreak pprint (1, 0); ppAddString pprint "end"; ppEndBlock pprint () ) | ValSig {name, typeof, ...} => let in ppBeginBlock pprint (0, false); ppAddString pprint "val"; ppBreak pprint (1, 1); ppAddString pprint (name ^ " :"); ppBreak pprint (1, 0); displayType (typeof, depth - 1, pprint, true); ppEndBlock pprint () end | ExSig {name, typeof, ...} => let in ppBeginBlock pprint (0, false); ppAddString pprint "exception"; ppBreak pprint (1, 1); ppAddString pprint (name ^ " :"); ppBreak pprint (1, 0); displayType (typeof, depth - 1, pprint, true); ppEndBlock pprint () end | FunctorDec (structList : functorBind list) => let fun displayFunctBind ( {name, arg, sigStruct, body, opaque, ...}: functorBind, depth) = ( ppBeginBlock pprint (3, false); ppAddString pprint (name ^ "("); ppBreak pprint (1, 0); ppBeginBlock pprint (3, true); display (arg, depth - 1); ppEndBlock pprint (); ppAddString pprint ")"; if not (isEmptyStruct sigStruct) then (* Signature is optional *) ( ppAddString pprint(if opaque then " :>" else " :"); ppBreak pprint (1, 0); display (sigStruct, depth - 1) ) else (); ppBreak pprint (1, 0); ppAddString pprint "="; ppBreak pprint (1, 0); display (body, depth - 1); ppEndBlock pprint () ) in ppBeginBlock pprint (3, false); ppAddString pprint "functor"; ppBreak pprint (1, 0); displayList (structList, "and", depth) displayFunctBind; ppEndBlock pprint () end | FunctorAppl {name, arg, ...} => let in ppBeginBlock pprint (1, false); ppAddString pprint (name ^ "("); ppBreak pprint (0, 0); display (arg, depth); ppBreak pprint (0, 0); ppAddString pprint ")"; ppEndBlock pprint () end | FormalArg {name, sigStruct, ...} => let in ppBeginBlock pprint (1, false); if name = "" then () else ( ppAddString pprint (name ^ " :"); ppBreak pprint (1, 2) ); display (sigStruct, depth - 1); ppEndBlock pprint () end | Sharing { isType, shares, ... } => ( ppBeginBlock pprint (3, false); ppAddString pprint "sharing"; ppBreak pprint (1, 0); if not isType then () else ( ppAddString pprint "type"; ppBreak pprint (1, 0) ); displayList (shares, "=", depth) (fn (name, depth) => ppAddString pprint name); ppEndBlock pprint () ) | WhereType { sigExp, typeVars, typeName, realisation, ... } => ( ppBeginBlock pprint (3, false); display (sigExp, depth); ppBreak pprint (1, 0); ppAddString pprint "where"; ppBreak pprint (1, 0); ppAddString pprint "type"; ppBreak pprint (1, 0); displayTypeVariables (typeVars, depth, pprint, true); ppAddString pprint typeName; ppBreak pprint (1, 0); ppAddString pprint "="; ppBreak pprint (1, 0); displayType (realisation, depth - 1, pprint, true); ppEndBlock pprint () ) | Localdec {decs, body, localDec, ...} => ( ppBeginBlock pprint (3, false); ppAddString pprint (if localDec then "local" else "let"); ppBreak pprint (1, 0); displayList (decs, ";", depth - 1) display; ppBreak pprint (1, 0); ppAddString pprint "in"; ppBreak pprint (1, 0); displayList (body, ";", depth - 1) display; ppBreak pprint (1, 0); ppAddString pprint "end"; ppEndBlock pprint () ) | IncludeSig (structList : structs list) => ( ppBeginBlock pprint (3, true); ppAddString pprint "include"; ppBreak pprint (1, 0); displayList (structList, "", depth - 1) display; ppEndBlock pprint () ) | Singleton {dec, ...} => ptDisplay (dec, depth - 1, pprint) | SigConstraint{str, csig, opaque} => ( display (str, depth - 1); ppAddString pprint (if opaque then " :>" else " :"); ppBreak pprint (1, 0); display (csig, depth - 1) ) | EmptyStruct => ppAddString pprint ("") ); in displayList (strs, "", depth) display end (* displayStructs *); (* Puts out an error message and then prints the piece of tree. *) fun errorNear (lex, hard, near, lno, message) : unit = let val printProc = if hard then errorProc else warningProc; in printProc (lex, lno, fn (pprint: prettyPrinter) => let val parameters = debugParams lex val errorDepth = getParameter errorDepthTag parameters in ppBeginBlock pprint (0, false); ppAddString pprint message; ppBreak pprint (3, 0); ppBeginBlock pprint (0, false); ppAddString pprint "Found near"; ppBreak pprint (1, 0); displayStructs ([near], errorDepth, pprint); ppEndBlock pprint (); ppEndBlock pprint () end) end; (* Returns a function which can be passed to typetree.match to print a bit of context information. *) fun foundNear (sVal : structs, name : string, lex) : prettyPrinter -> unit = fn (pprint: prettyPrinter) => let val parameters = debugParams lex val errorDepth = getParameter errorDepthTag parameters in ppAddString pprint ("While checking (" ^ name ^ ") near"); ppBreak pprint (1, 2); displayStructs ([sVal], errorDepth, pprint) end; (* Error message routine for lookupType and lookupStructure. *) fun giveError (sVal : structs, lno : int, lex : lexan) : string -> unit = fn (message : string) => errorNear (lex, true, sVal, lno, message); (* Structures and values in signatures. *) (* Formal paramater to a functor - either value or exception. *) fun mkFormal (name : string, class, typ, addr) = Value{class=class, name=name, typeOf=typ, access=Formal addr} (* A null map from a structure identifier to anything. *) fun nullMap (id : 'a) : 'b option = NONE; (* Check that a matching has succeeded, and check the value constructors if they are datatypes. Used for both signature matching and also for sharing constraints where there is no obvious direction of matching. However the rule for signature matching requires the types of the constructors to match whereas the rule for sharing only requires that they have the same names (type checking in that case could require second-order unification). *) fun checkTypeConstrs (candid, target, targTypeMap, checkTypes, lex : lexan, near, lno : int ) : unit= let val candidName : string = tcName candid; val targetName : string = tcName target; fun checkConstrs ([], []) = () | checkConstrs (cList, []) = errorNear (lex, true, near, lno, "Too many constructors to match type (" ^ candidName ^ ")") | checkConstrs ([], tList) = errorNear (lex, true, near, lno, "Not enough constructors to match type (" ^ candidName ^ ")") | checkConstrs (cVal :: cList, tVal :: tList) = let val cName : string = valName cVal; val tName : string = valName tVal; in (* Check they have the same name. *) if cName <> tName then errorNear (lex, true, near, lno, "Looking for constructor " ^ tName ^ " but found " ^ cName) (* Check their types match. *) else let (* This works correctly for polytypes (e.g. datatype 'a t = ...) because the type variables in the signature will be non-unifiable. checkTypes does nothing if we are generating a sharing constraint and then the rest of the list. *) val cType : types = valTypeOf cVal; val tType : types = valTypeOf tVal; val U : unit = checkTypes (cType, tType, cName); in checkConstrs (cList, tList) end end; in if tcArity candid <> tcArity target then () (* Have already given the error message. *) else let (* Check the type constructors themselves first. This checks that the sharing constraints have been satisfied. *) val tvars : types list = tcTypeVars target; (* either will do *) val U : unit = matchTypes (mkTypeConstruction (candidName, candid, tvars), mkTypeConstruction (targetName, target, tvars), targTypeMap, lex, lno, foundNear (near, targetName, lex)); val candidConstrs : values list = tcConstructors candid; val targetConstrs : values list = tcConstructors target; in (* We have already checked for matching a type in the structure to a datatype in the signature. *) if null targetConstrs orelse null candidConstrs then () else checkConstrs (candidConstrs, targetConstrs) end end (* checkTypeConstrs *); (* Check that a candidate signature (actually the environment part of a structure) matches a target signature. The direction is important because a candidate is allowed to have more components and more polymorphism than the target. Along with the candidate and target signatures we also pass maps which are applied to the structure and type "names" (unique ids) before the matching process. *) type 'a map = { lookup: typeId -> 'a option, enter: typeId * 'a -> unit }; fun matchSigs (candidate : signatures, target : signatures, tArgTypeMap : typeConstrs map, near, lno : int, lex : lexan ) : unit = let val lookupType = #lookup tArgTypeMap; (* Match names (unique ids) for types. This is slightly more complicated than simply assigning the stamps. *) fun matchNames (candidate, target) : unit= univFold (sigTab target, (fn (dName, dVal, ()) => if tagIs typeConstrVar dVal then let (* See if there is one with the same name. *) val target = tagProject typeConstrVar dVal; in (* Match up the types. This does certain checks but does not check sharing. Equality is checked for. *) case univLookup (sigTab candidate, typeConstrVar, dName) of SOME candid => if not (isUnsetId (tcIdentifier target)) (* just in case *) then ( (* Check for arity and equality - value constructors are checked later. If the target is a bound identifier in the range it can be matched by a candidate. *) enterTypeConstrs (target, candid, tArgTypeMap); if tcArity target <> tcArity candid then errorNear (lex, true, near, lno, "Types (" ^ tcName target ^ ") have different arities.") else if tcEquality target andalso not (permitsEquality candid) then errorNear (lex, true, near, lno, "(" ^ tcName candid ^ ") is not an eqtype") else if not (null (tcConstructors target)) andalso null (tcConstructors candid) then errorNear (lex, true, near, lno, "(" ^ tcName candid ^ ") is not a datatype") else () ) else () | NONE => errorNear (lex, true, near, lno, "Type (" ^ dName ^ ") missing in structure.") end else if tagIs structVar dVal then let (* and sub-structures. *) val target = (tagProject structVar) dVal; (* For each target structure: find a candidate with the same name and recursively check them. *) in case univLookup (sigTab candidate, structVar, dName) of SOME candid => matchNames (structSignat candid, structSignat target) | NONE => errorNear (lex, true, near, lno, "Structure (" ^ dName ^ ") missing in structure.") end else () (* not a type or structure *) ), (* end of fn *) () (* default value for fold *) ) (* matchNames *); val U : unit = matchNames (candidate, target); (* Match the values and exceptions in the signatures. This actually does the checking of types. *) fun matchVals (candidate, target) : unit = (* Map the identifiers first, returning the originals if they are not in the map. *) let val checkTypesAndStructures : unit = univFold (sigTab target, (fn (dName, dVal, ()) => if tagIs typeConstrVar dVal then let (* For each type in the target ... *) val target = tagProject typeConstrVar dVal; (* Find a candidate with the same name. *) in case univLookup (sigTab candidate, typeConstrVar, dName) of SOME candid => (* Now check that the types match. *) checkTypeConstrs (candid, target, lookupType, fn (c, t, n) => matchTypes (c, t, lookupType, lex, lno, foundNear (near, n, lex)), lex, near, lno) | NONE => () (* If the lookup failed ignore the error - we've already reported it in matchNames *) end else if tagIs structVar dVal then let (* and each sub-structure *) val target = tagProject structVar dVal; in (* For each target structure: find a candidate with the same name and recursively check them. *) case univLookup (sigTab candidate, structVar, dName) of SOME candid => matchVals (structSignat candid, structSignat target) | NONE => () (* Ignore the error - we've already reported it in matchNames *) end else () ), (* fn *) () ); val checkValuesAndExceptions : unit = (* Finally the values and exceptions. *) univFold (sigTab target, (fn (dName, dVal, ()) => if tagIs valueVar dVal then let val v = tagProject valueVar dVal; in (* The constructors in the target are ignored since they have already been checked. *) case v of Value{class=Constructor _, ...} => () | _ => case univLookup (sigTab candidate, valueVar, dName) (* Look up a corresponding value and check the type. *) of SOME candid => let val vIsEx = case v of Value{class=Exception, ...} => true | _ => false and cIsEx = case candid of Value{class=Exception, ...} => true | _ => false in (* Check that exceptions have matched with exceptions and values with values, and have not mixed. *) if not cIsEx andalso vIsEx then errorNear (lex, true, near, lno, "Value (" ^ dName ^ ") must be an exception to match the signature.") (* An exception will match a value provided the types are right. *) else if cIsEx andalso not vIsEx then let val exType = valTypeOf candid; val candidType = if isEmpty exType then exnType else mkFunctionType (exType, exnType) in matchTypes (candidType, valTypeOf v, lookupType, lex, lno, foundNear (near, dName, lex)) end else matchTypes (valTypeOf candid, valTypeOf v, lookupType, lex, lno, foundNear (near, dName, lex)) end | NONE => errorNear (lex, true, near, lno, "Value (" ^ dName ^ ") missing in structure.") end else () ), () ) in () end (* matchVals *); in matchVals (candidate, target) end (* matchSigs *); fun typeMatchTab (minOffset : int, size : int) : typeConstrs map = let (* Make a vector with an entry for each bound name. *) val v = Array.array (Int.max(0, size), undefType) ; in (* Return the entry corresponding to the name, unless it is empty when an exception is raised. *) { lookup = (fn id => ( if not (isBoundId id) orelse offsetId id < minOffset orelse offsetId id >= size (* It is possible for the offset to be >= size if the type is being shared inside the result signature of a functor. It will only happen for types inside structures which are shared. *) then NONE (* Not present if it isn't bound. *) else let (* Must be a bound stamp. *) val entry = Array.sub (v, offsetId id); (* SPF 7/6/94 fixed off-by-one *) in if isUnsetId (tcIdentifier entry) (* undefType *) then NONE else SOME entry end ) ), enter = (fn (id, value) => if isBoundId id andalso offsetId id >= minOffset andalso offsetId id < size then Array.update (v, offsetId id, value) else () ) } end; type tsvEnv = { enterType: string * typeConstrs -> unit, enterStruct: string * structVals -> unit, enterVal : string * values -> unit }; fun tsvEnv (Env E) = {enterType = #enterType E, enterStruct = #enterStruct E, enterVal = #enterVal E}; (* Copy the signature so that types in different signatures are distinct. *) fun copySig (source : signatures, mustCopyType : typeId -> bool, makeTypeId : unit -> typeId, typeMap : typeConstrs map, strName : string) : signatures = let (* Make a new signature. *) val newSig = makeSignatures (sigName source); (* Copy everything into the new signature. *) val tab = sigTab newSig val lastAddr = fullCopySig (0, source, { enterType = fn (s,v) => univEnter (tab, typeConstrVar, s, v), enterStruct = fn (s,v) => univEnter (tab, structVar, s, v), enterVal = fn (s,v) => univEnter (tab, valueVar, s, v) }, mustCopyType, makeTypeId, typeMap, strName); in makeCopy(sigName source, newSig, sigMinTypes newSig, sigMaxTypes newSig) end (* copySig *) (* Generate new entries for all the elements of the signature. *) and fullCopySig (offset : int, source : signatures, resEnv : tsvEnv, mustCopyType : typeId -> bool, makeTypeId : unit -> typeId, typeMap : typeConstrs map, strName : string) : int = let fun copyTypeCons (tcon : typeConstrs) : typeConstrs = copyTypeConstr (tcon, mustCopyType, makeTypeId, typeMap, fn x => x, strName); fun copyTyp (t : types) : types = copyType (t, fn x => x, (* Don't bother with type variables. *) copyTypeCons); (* First copy the type constructors in this signature and any substructures. It's inefficient but harmless to do this again for substructures. TODO: Tidy this up. *) val u: unit = copyTypeConstructors(source, mustCopyType, makeTypeId, typeMap, strName) in univFold (sigTab source, (fn (dName: string, dVal: universal, num) => (if tagIs structVar dVal then let val oldStruct = tagProject structVar dVal; val oldSig = structSignat oldStruct; (* Make a new sub-structure. *) val newSig = copySig (oldSig, mustCopyType, makeTypeId, typeMap, strName ^ dName ^ "."); val addr = if isFormal (structAccess oldStruct) then vaFormal (structAccess oldStruct) + offset else num (* From sig ... open Global; ... end *); val newStruct = makeFormalStruct (structName oldStruct, newSig, addr); in #enterStruct resEnv (dName, newStruct); Int.max(num, addr+1) end (* structures *) else if tagIs typeConstrVar dVal then let (* Types *) val address = ref num (* Make a new constructor. *) val oldConstr = tagProject typeConstrVar dVal; (* The new type constructor will use the NEW polymorphic type variables. This is because copyTypeCons uses the table built by matchSigs which maps OLD constructors to NEW ones, and the NEW constructors contain NEW type variables. *) val newConstr = copyTypeCons oldConstr; (* We must copy the datatype if any of the value constructors have to be copied. The datatype may be rigid but some of the value constructors may refer to flexible type names. *) val mustCopy = ref (not (identicalConstr (newConstr, oldConstr))); local val oldTypeVars : types list = tcTypeVars oldConstr; val newTypeVars : types list = tcTypeVars newConstr; (* We CAN legitimately get different numbers of type variables here, it we're trying to recover from a user error that we've already diagnosed. We'll just ignore the extra variables. SPF 26/6/96 *) fun zipTypeVars (x::xs) (y::ys) = (x, y) :: zipTypeVars xs ys | zipTypeVars _ _ = [] val typeVarTable : (types * types) list = zipTypeVars oldTypeVars newTypeVars; fun copyTypeVar (t : types) : types = let fun search [] = t | search ((oldTypeVar, newTypeVar) :: rest) = if sameTypeVar (t, oldTypeVar) then newTypeVar else search rest in search typeVarTable end; in (* Dave was wrong - we DO need to copy the polymorphic type variables - at least, we do here! This version hides the old version of copyTyp, which is in the enclosing environment. The entire type/signature matching code needs a thorough overhaul. SPF 16/4/96 *) (* TODO: If SPF is right we also need to redefine copyTypeCons. DCJM 17/2/00. *) fun copyTyp (t : types) : types = copyType (t, copyTypeVar, copyTypeCons); end; (* Now copy the value constructors. The equality status and any equivalence (i.e. type t = ...) will have been processed when the constructor was copied. What's going on here? Copying the type constructor will use the NEW polymorphic variables, but copying the rest of the type will use the OLD ones, since copyTyp doesn't copy individual type variables - what a MESS! I think this means that we end up with OLD variables throughout. SPF 15/4/96 *) val copiedConstrs = map (fn (v as Value{name, typeOf, class, access}) => let (* Copy its type and make a new constructor if the type has changed. *) val newType = copyTyp typeOf; val typeChanged = not (identical (newType, typeOf)); val (newAccess, addressChanged) = case access of Formal addr => let val newAddr = addr+offset in address := Int.max(newAddr+1, !address); (Formal newAddr, offset <> 0) end | access => (access, false) (* If this datatype shares with another one we will already have constructors available. This can happen, in particular, if we have a signature constraining the result of a structure. There will be sharing between the datatype in the implementing structure and the result signature. *) val copy = if typeChanged orelse addressChanged then let val v' = Value{name=name, typeOf=newType, class=class, access=newAccess} (* See if the constructor already exists. *) in let val original = findValueConstructor v' in (* We try to use the original if it is global since that allows us to print values of the datatype. If it is not global we MUSTN'T use the copy. It may be local and so may not exist later on. *) case original of Value{access=Global _, ...} => original | _ => v' end end else v; in if typeChanged orelse addressChanged then mustCopy := true else (); copy (* Return the copy. *) end) (tcConstructors oldConstr); in if !mustCopy then let (* If the copied datatype already has constructors on it we must have two datatypes which share. They need not necessarily have the same constructors e.g. datatype t = X of int t can share with datatype t = X of int * int or even with datatype t = X of bool . We have to make a new type constructor in that case. We don't need to put this in the typeMap table because we can always return the type that is already in there. This will also work correctly if we have a type constructor which does not itself need to be copied (e.g. it is rigid) but at least one of whose value constructors involves a flexible type. Another case could be where we have a structure containing a datatype. The type in the signature may be either a datatype or a type. *) val newType = if not (null (tcConstructors newConstr)) then (* Matched to a datatype. Use the NEW types throughout *) makeTypeConstrs (* Necessary? *) (tcName newConstr, tcTypeVars newConstr, emptyType, tcIdentifier newConstr, tcEquality newConstr, 0) (* old (16/4/96) ... makeTypeConstrs (tcName oldConstr, tcTypeVars oldConstr, makeEquivalent (newConstr, tcTypeVars oldConstr), tcIdentifier newConstr, tcEquality newConstr) ... *) else newConstr; in (* Put the new constructors on the result type *) tcSetConstructors (newType, copiedConstrs); (* and put it into the table. *) #enterType resEnv (dName, newType) end else #enterType resEnv (dName, newConstr); Int.max(num, !address) end (* Finally the values and exceptions. *) else if tagIs valueVar dVal then let val v = tagProject valueVar dVal; in case v of Value {typeOf=oldType, class, name, access=Formal addr, ...} => let val newType = copyTyp oldType; val newAddr = addr + offset; (* Make a new entry if the address or type have changed. *) val res = if addr <> newAddr orelse not (identical (newType, oldType)) then mkFormal (name, class, newType, newAddr) else v; in #enterVal resEnv (name, res); Int.max(num, newAddr+1) end | Value {typeOf, class, name, access, ...} => (* Values in the result signature of a structure may be globals as a result of a call to extractValsToSig. This applies if we have a functor which returns a global structure e.g. structure S = ...; functor F() = S. We still have to consider the possibility that the types might be different due to an opaque signature e.g. structure S1 :> SIG = S2. *) let val newType = copyTyp typeOf; (* Can save creating a new object if the address and type are the same as they were. *) val res = if not (identical (newType, typeOf)) then Value {typeOf=newType, class=class, name=name, access=access} else v in #enterVal resEnv (name, res); num end end else num ) ), offset ) end (* fullCopySig *) (* Make entries for all the type constructors. The only reason for doing this separately from fullCopySig is to try to ensure that the names we give the types are appropriate. If we do this as part of fullCopySig we could get the wrong name in cases such as sig structure S: sig type t end structure T : sig val x: S.t end end. If fullCopySig happens to process "x" before "S" it will copy "t" and give it the name "T.t" rather than "S.t". *) and copyTypeConstructors( source: signatures, mustCopyType : typeId -> bool, makeTypeId : unit -> typeId, typeMap : typeConstrs map, strName : string): unit = let fun copyTypeCons (tcon : typeConstrs) : typeConstrs = copyTypeConstr (tcon, mustCopyType, makeTypeId, typeMap, fn x => x, strName); in univFold (sigTab source, (fn (dName: string, dVal: universal, ()) => (if tagIs structVar dVal then let val oldStruct = tagProject structVar dVal; val oldSig = structSignat oldStruct; in copyTypeConstructors(oldSig, mustCopyType, makeTypeId, typeMap, strName ^ dName ^ ".") end (* structures *) else if tagIs typeConstrVar dVal then let (* Types *) (* Make a new constructor. It will be entered in the match table and picked up when we copy the signature. *) val oldConstr = tagProject typeConstrVar dVal; val newConstr = copyTypeCons oldConstr in () end else () ) ), () ) end; (* This used to be checkExplicitness which, as well as replacing variable stamps with bound stamps also checked for type explicitness. That is no longer required since ML97 does not allow types to be redefined. *) fun renameVariableAsBound (signat, initTypeId, errorMessage) = let (* First set every different variable stamp in types to be new bound stamps. We may not start at zero if this is the result signature of a functor because there may be sharing between the argument and the result. *) val typeCounter = ref initTypeId; fun makeTypeId () = let val n = !typeCounter; in typeCounter := n + 1; makeBoundId n end fun setStamps source = (* Don't make the signature bound yet, we may have several shared structures and if we make any of them bound we will make them all bound. Process all the types. *) univFold (sigTab source, (fn (dName, dVal, ()) => if tagIs structVar dVal then setStamps (structSignat (tagProject structVar dVal)) else if tagIs typeConstrVar dVal then setTypeConstr (tagProject typeConstrVar dVal, fn tc => makeTypeId ()) else () ), () ); in setStamps signat; (* Set the size of the type table for the signature we return. *) makeCopy (sigName signat, signat, initTypeId, !typeCounter) end (* renameVariableAsBound *); val makeEnv = fn x => let val Env e = makeEnv x in e end; (* Second pass - identify names with values and type-check *) fun pass2Structs (strs : structs list, lex : lexan, Env env : env) : unit = let fun pass2Struct (strs : structs list, typeNo : int ref, Env env : env, lno : int, strName : string ) : unit = let (* Get the value from a signature-returning expression (either the name of a signature or sig ... end. The names (type and structure ids) in the signature are bound names. *) fun sigVal (str : structs, initTypeId : int, Env globalEnv : env, lno : int, strName : string ) : signatures = let (* Process a sharing constraint. *) fun applySharingConstraint ({shares = tlist, isType, line}: shareConstraint, Env tEnv : env, near : structs) : unit = let fun shareTypes (aType : typeConstrs, bType : typeConstrs, lno : int ) : unit = (* In ML90 we had to check that two datatypes which shared were "consistent" i.e. had the same constructor names (but not necessarily the same types since that would have required second order unification). That requirement has been removed in ML97. *) linkTypeConstructors (aType, bType, giveError (near, lno, lex)); (********************* Start of SPF's rewrite (incomplete!) **********************) (* The purpose of the following code was to fix some bugs in my original structure sharing code for ML90 and also to simplify it. In particular it detected cyclic sharing constraints more accurately. These were cases of "sharing A = A.B" which were illegal in ML90 but are legal in ML97 (it's a short-hand for sharing type A.t = A.B.t). Much of it is no longer relevant since we are only interested in sharing types in ML97. I've simplified it somewhat but it might be worth simplifying it further. DCJM 27/7/00. *) (* useful stuff *) (* sets as unordered lists *) fun member (eq : 'a * 'a -> bool) x [] = false | member (eq : 'a * 'a -> bool) x (h :: t) = eq (x, h) orelse member eq x t; fun addToSet (eq : 'a * 'a -> bool) x l = if member eq x l then l else x :: l; fun union (eq : 'a * 'a -> bool) [] l = l | union (eq : 'a * 'a -> bool) (h :: t) l = if member eq h l then union eq t l else h :: union eq t l; fun unionMap (eq : 'b * 'b -> bool) (f : 'a -> 'b list) ([] : 'a list) : 'b list = [] | unionMap (eq : 'b * 'b -> bool) (f : 'a -> 'b list) (h :: t) = union eq (f h) (unionMap eq f t) type virtStruct = signatures list; (* Find all the substructure names occurring in a single structure *) fun subStructureNames (sigVal : signatures) : string list = univFold (sigTab sigVal, fn (structName, dVal, names) => if tagIs structVar dVal then structName :: names else names, []); (* Find all the type constructor names occurring in a single structure *) fun typeConstrNames (sigVal : signatures) : string list = univFold (sigTab sigVal, fn (typeName, dVal, names) => if tagIs typeConstrVar dVal then typeName :: names else names, []); (* Find all the substructure names occurring in a virtual structure. *) fun virtSubStructureNames sigs : string list = unionMap (op =) subStructureNames sigs; (* Find all the type constructor names occurring in a virtual structure. *) fun virtTypeConstrNames sigs : string list = unionMap (op =) typeConstrNames sigs; (* Find the named virtual substructure of a virtual structure. *) fun getVirtSubStructure sigs (strName : string) : virtStruct = let (* Look up the name of the substructure. It may not be there because not every substructure occurs in every structure of the virtual structure. *) val substrList : signatures list = List.foldr (fn (sigVal : signatures, res : signatures list) => case univLookup (sigTab sigVal, structVar, strName) of SOME str => structSignat str :: res | NONE => res) [] sigs; in substrList end; (* Find the named typed constructors of a virtual structure. *) fun getVirtTypeConstrs sigs (typeName : string) : typeConstrs list = let fun funForFold (sigVal : signatures, res : typeConstrs list) : typeConstrs list = case univLookup (sigTab sigVal, typeConstrVar, typeName) of SOME r => r :: res | NONE => res in List.foldr funForFold [] sigs end; (* Find all the substructure names occurring in a list of virtual structures *) fun listVirtSubStructureNames (virts : virtStruct list) : string list = unionMap (op =) virtSubStructureNames virts; (* Find all the type constructor names occurring in a list of virtual structures *) fun listVirtTypeConstrNames (virts : virtStruct list) : string list = unionMap (op =) virtTypeConstrNames virts; (* Find all the named virtual substructures occurring in a list of virtual structures *) fun listVirtSubStructures (virts : virtStruct list) (strName : string) : virtStruct list = let fun funForFold (vs : virtStruct, res : virtStruct list) : virtStruct list = getVirtSubStructure vs strName :: res in List.foldr funForFold [] virts end; (* Find all the named virtual type constructors occurring in a list of virtual structures *) fun listVirtTypeConstrs (virts : virtStruct list) (strName : string) : typeConstrs list = let fun funForFold (vs : virtStruct, res : typeConstrs list) : typeConstrs list = (getVirtTypeConstrs vs strName) @ res in List.foldr funForFold [] virts end; fun shareVirtStructs ([], _) = raise InternalError "Empty sharing list" | shareVirtStructs (virts, _) = let (* Share the types *) val typeConstrNames : string list = listVirtTypeConstrNames virts; fun shareVirtTypeConstr (typeName : string) : unit = let (* Find all the type constructors with this name *) val tcs : typeConstrs list = listVirtTypeConstrs virts typeName; fun shareWith (tc : typeConstrs) ([] : typeConstrs list) = () | shareWith tc (h :: t) = let val U : unit = shareTypes (tc, h, lno); in shareWith tc t end; fun shareAll ([] : typeConstrs list) = () | shareAll (h :: t) = let val U : unit = shareWith h t in shareAll t end; in (* Share them all pair-wise (inefficient!) *) shareAll tcs end; val U : unit list = map shareVirtTypeConstr typeConstrNames; (* Share the substructures *) val subStrNames : string list = listVirtSubStructureNames virts; fun shareVirtSubstruct (strName : string) : unit = shareVirtStructs (listVirtSubStructures virts strName, lno); in map shareVirtSubstruct subStrNames; () end; fun shareStructures (shareList : signatures list, lno : int) : unit = shareVirtStructs (map (fn strVal => [strVal]) shareList, lno); (* When looking up the structure and type names we look only in the signature in ML97. We add this to make it clear that we are only looking up in the signature otherwise we get confusing messages such as "type (int) has not been declared". *) fun lookupFailure msg = giveError (str, line, lex) (msg ^ " in signature.") in if isType then let (* Type sharing. *) fun lookupSharing (name: string) = lookupTyp ({ lookupType = #lookupType tEnv, lookupStruct = #lookupStruct tEnv }, name, lookupFailure) val first = lookupSharing (hd tlist); in if not (isUnsetId (tcIdentifier first)) then List.app (fn typ => shareTypes (lookupSharing typ, first, line)) (tl tlist) else () end else let (* structure sharing. *) fun getStructSignat (name: string) : signatures = let val subStr : structVals = lookupStructureDirectly ("Structure" , {lookupStruct = #lookupStruct tEnv}, name, lookupFailure); in structSignat subStr end in (* Now share all these signatures. *) shareStructures (map getStructSignat tlist, line) end end (* applySharingConstraint *); (**************************** End of SPF's rewrite *************************) (* Look up a signature. Strictly a signature cannot be contained in a structure but this allows a structure to be used as a general name space. *) fun lookSig (name : string, lno : int) : signatures = let val errorFn = giveError (str, lno, lex); fun lookupFn s = #lookupSig (makeEnv (structSignat s)); in lookupAny (name, #lookupSig globalEnv, #lookupStruct globalEnv, lookupFn, "Signature", undefinedSignature, errorFn) end (* Construct a signature. *) fun sigValue (str : structs, Env env : env, lno : int, strName: string) = let (* Make a new signature. *) val sigName = case str of SignatureIdent name => name | _ => "" val newSig = makeSignatures sigName; (* Copy everything into the new signature. *) val structEnv = makeEnv newSig; (* ML 97 does not allow multiple declarations in a signature. *) fun checkAndEnter enter lookup kind (s: string, v) = if getParameter ml90Tag (debugParams lex) then enter(s, v) else case lookup s of SOME _ => (* Already there. *) errorNear (lex, true, str, lno, kind ^ " (" ^ s ^ ") is already present in this signature.") | NONE => enter(s, v) val checkedStructEnv = { lookupVal = #lookupVal structEnv, lookupType = #lookupType structEnv, lookupFix = #lookupFix structEnv, lookupStruct = #lookupStruct structEnv, lookupSig = #lookupSig structEnv, lookupFunct = #lookupFunct structEnv, enterVal = checkAndEnter (#enterVal structEnv) (#lookupVal structEnv) "Value", enterType = checkAndEnter (#enterType structEnv) (#lookupType structEnv) "Type", enterStruct = checkAndEnter (#enterStruct structEnv) (#lookupStruct structEnv) "Structure", (* These next three can't occur. *) enterFix = checkAndEnter (#enterFix structEnv) (#lookupFix structEnv) "Fixity", enterSig = checkAndEnter (#enterSig structEnv) (#lookupSig structEnv) "Signature", enterFunct = checkAndEnter (#enterFunct structEnv) (#lookupFunct structEnv) "Functor" } in makeSigInto(str, Env checkedStructEnv, Env env, lno, strName, 0); (* Make a copy to freeze it as immutable.*) makeCopy(sigName, newSig, sigMinTypes newSig, sigMaxTypes newSig) end (* Constructs a signature and inserts it into an environment at a given offset. Generally offset will be zero except if we are including a signature. *) and makeSigInto(str: structs, Env structEnv, (* The immediately enclosing sig. *) Env globalEnv, (* The surrounding environment excluding this sig. *) lno: int, strName: string, offset: int): int = (* Either a named signature or sig ... end or one of these with possibly multiple where type realisations. *) case str of SignatureIdent name => let (* Look up the signature and copy it to get new instances of variables. *) val sourceSig = lookSig (name, lno); val typeMap : typeConstrs map = typeMatchTab (sigMinTypes sourceSig, sigMaxTypes sourceSig); in (* Copy the signature into the result. *) fullCopySig(offset, sourceSig, tsvEnv (Env structEnv), isBoundId, makeVariableId, typeMap, strName) end | SigDec (sigsList : structs list) => (* sig .... end *) let (* Process the entries in the signature and allocate an address to each. *) fun processSig (signat, offset : int, lno : int) : int = case signat of StructureDec (structList : structBind list) => let (* Each element in the list should be a structure binding. *) fun pStruct [] offset = offset | pStruct (({name, sigStruct, line, ...}: structBind) :: t) offset = let (* Create a new surrounding environment to include the surrounding structure. This is the scope for any structures or types. Specifically, if we look up a type defined by a "where type" we use this environment and not the signature we're creating. *) val newEnv = { lookupVal = #lookupVal structEnv, lookupType = lookupDefault (#lookupType structEnv) (#lookupType globalEnv), lookupFix = #lookupFix structEnv, lookupStruct = lookupDefault (#lookupStruct structEnv) (#lookupStruct globalEnv), lookupSig = #lookupSig structEnv, lookupFunct = #lookupFunct structEnv, enterVal = #enterVal structEnv, enterType = #enterType structEnv, enterStruct = #enterStruct structEnv, enterFix = #enterFix structEnv, enterSig = #enterSig structEnv, enterFunct = #enterFunct structEnv }; val resSig = sigValue (sigStruct, Env newEnv, line, strName ^ name ^ "."); (* Process the rest of the list before declaring the structure. *) val result = pStruct t (offset + 1); (* Make a structure. *) val resStruct = makeFormalStruct (name, resSig, offset); val U : unit = #enterStruct structEnv (name, resStruct); in result (* One slot for each structure. *) end in pStruct structList offset end | ValSig {name, typeof, line} => let val errorFn = giveError (signat, line, lex); fun lookup s = lookupTyp ({ lookupType = lookupDefault (#lookupType structEnv) (#lookupType globalEnv), lookupStruct = lookupDefault (#lookupStruct structEnv) (#lookupStruct globalEnv) }, s, errorFn); in (* If the type is not found give an error. *) (* Check for rebinding of built-ins. "it" is allowed here. *) if getParameter ml90Tag (debugParams lex) then () else if name = "true" orelse name = "false" orelse name = "nil" orelse name = "::" orelse name = "ref" then errorFn("Specifying \"" ^ name ^ "\" is illegal.") else (); assignTypes (typeof, lookup, lex, line); (* The type is copied before being entered in the environment. This isn't logically necessary but has the effect of removing ref we put in for type constructions. *) #enterVal structEnv (name, mkFormal (name, SimpleValue, copyType (typeof, fn x => x, fn x => x), offset)); (offset + 1) end | ExSig {name, typeof, line} => let val errorFn = giveError (signat, line, lex); fun lookup s = lookupTyp ({ lookupType = lookupDefault (#lookupType structEnv) (#lookupType globalEnv), lookupStruct = lookupDefault (#lookupStruct structEnv) (#lookupStruct globalEnv) }, s, errorFn); in (* If the type is not found give an error. *) (* Check for rebinding of built-ins. "it" is not allowed. *) if getParameter ml90Tag (debugParams lex) then () else if name = "true" orelse name = "false" orelse name = "nil" orelse name = "::" orelse name = "ref" orelse name = "it" then errorFn("Specifying \"" ^ name ^ "\" is illegal.") else (); assignTypes (typeof, lookup, lex, line); #enterVal structEnv (name, mkFormal (name, Exception, typeof, offset)); (offset + 1) end | IncludeSig (structList : structs list) => let (* include sigid ... sigid or include sigexp. For simplicity we handle the slightly more general case of a list of signature expressions. The contents of the signature are added to the environment. *) fun includeSigExp (str: structs, offset) = makeSigInto(str, Env structEnv, Env globalEnv, lno, strName, offset) in List.foldl includeSigExp offset structList end | Sharing (share : shareConstraint) => (* Sharing constraint. *) let (* In ML90 it was possible to share with any identifier in scope. In ML97 sharing is restricted to identifiers in the "spec". *) val envForSharing = if getParameter ml90Tag (debugParams lex) then Env { lookupVal = #lookupVal structEnv, lookupType = lookupDefault (#lookupType structEnv) (#lookupType globalEnv), lookupFix = #lookupFix structEnv, lookupStruct = lookupDefault (#lookupStruct structEnv) (#lookupStruct globalEnv), lookupSig = #lookupSig structEnv, lookupFunct = #lookupFunct structEnv, enterVal = #enterVal structEnv, enterType = #enterType structEnv, enterStruct = #enterStruct structEnv, enterFix = #enterFix structEnv, enterSig = #enterSig structEnv, enterFunct = #enterFunct structEnv } else Env structEnv in applySharingConstraint (share, envForSharing, str); offset (* No entry *) end | Singleton {dec, line, ...} => let (* datatype or type binding(s) *) (* This pass puts the data constructors into the environment. *) val addrs = ref offset (* Pass2 creates value constructors of datatypes as global values. Rather than complicate pass2 by trying to make formal values in this case it's easier to trap the value constructors at this point. N.B. We may get constructors from a datatype declaration or from datatype replication. *) fun enterVal(name, Value{class=class, typeOf, ...}) = let val addr = !addrs val _ = addrs := addr+1 in (#enterVal structEnv)(name, Value{class=class, typeOf=typeOf, access=Formal addr, name=name}) end (* Record all the datatypes we declare. *) val datatypeList = ref [] fun enterType(name, tyCons) = ( if isEmpty (tcEquivalent tyCons) then datatypeList := tyCons :: !datatypeList else (); #enterType structEnv (name, tyCons) ) val newEnv = { lookupVal = #lookupVal structEnv, lookupType = lookupDefault (#lookupType structEnv) (#lookupType globalEnv), lookupFix = #lookupFix structEnv, lookupStruct = lookupDefault (#lookupStruct structEnv) (#lookupStruct globalEnv), lookupSig = #lookupSig structEnv, lookupFunct = #lookupFunct structEnv, enterVal = enterVal, enterType = enterType, enterStruct = #enterStruct structEnv, enterFix = #enterFix structEnv, enterSig = #enterSig structEnv, enterFunct = #enterFunct structEnv }; val t : types = pass2 (dec, makeVariableId, Env newEnv, lex, line, strName); (* Replace the constructor list for the datatype with the modified constructors. All the constructors should be in the set. Is it possible that one might not be because of an error? *) fun findConstr(v: values): values = getOpt((#lookupVal structEnv)(valName v), v) fun updateConstrList tyCons = tcSetConstructors(tyCons, List.map findConstr (tcConstructors tyCons)) val _ = List.app updateConstrList (!datatypeList) in ! addrs end | _ => raise InternalError "processSig: not a signature" (* end processSig *); in List.foldl (fn (signat, offset) => processSig (signat, offset, lno)) offset sigsList end | WhereType { sigExp, typeVars, typeName, realisation, line } => let (* We construct the signature into the result signature. When we apply the "where" we need to look up the types (and structures) only within the signature constrained by the "where" and not in the surrounding signature. e.g. If we have sig type t include S where type t = ... end we need to generate an error if S does not include t. Of course if it does that's also an error since t would be rebound! Equally, we must look up the right hand side of a where type in the surrounding scope, which will consist of the global environment and the signature excluding the entries we're adding here. *) val findTypes = searchList() and findStructs = searchList() val newEnv = { lookupVal = #lookupVal structEnv, lookupType = lookupDefault (#lookup findTypes) (lookupDefault (#lookupType structEnv) (#lookupType globalEnv)), lookupFix = #lookupFix structEnv, lookupStruct = lookupDefault (#lookup findStructs) (lookupDefault (#lookupStruct structEnv) (#lookupStruct globalEnv)), lookupSig = #lookupSig structEnv, lookupFunct = #lookupFunct structEnv, enterVal = #enterVal structEnv, enterType = #enter findTypes, enterFix = #enterFix structEnv, enterStruct = #enter findStructs, enterSig = #enterSig structEnv, enterFunct = #enterFunct structEnv } val resAddr = makeSigInto(sigExp, Env newEnv, Env globalEnv, lno, strName, offset) fun lookupFailure msg = giveError (str, line, lex) (msg ^ " in signature.") (* Look up the type constructor in the signature. *) val typeConstr = lookupTyp ({ lookupType = #lookup findTypes, lookupStruct = #lookup findStructs }, typeName, lookupFailure); (* The type, though, is looked up in the surrounding environment. *) fun lookupGlobal s = lookupTyp ({ lookupType = lookupDefault (#lookupType structEnv) (#lookupType globalEnv), lookupStruct = lookupDefault (#lookupStruct structEnv) (#lookupStruct globalEnv) }, s, giveError (str, line, lex)) (* Process the type, looking up any type constructors. *) val U: unit = assignTypes (realisation, lookupGlobal, lex, line); (* Now build a dummy type constructor whose equivalent is the type on the right hand side. *) val dummyTypeCons = makeTypeConstrs (typeName, typeVars, realisation, makeVariableId(), false, 0); in (* Now match these up. This is very similar to an ML90 sharing constraint where one of the types was rigid. *) setWhereType(typeConstr, dummyTypeCons, giveError (str, line, lex)); (* Finally we can safely add the new declarations to the surrounding scope. *) #apply findTypes (#enterType structEnv); #apply findStructs (#enterStruct structEnv); resAddr end | _ => raise InternalError "makeSigInto: not a SigIdent nor a SigDec"; (* end makeSigInto *) in case str of SignatureIdent (name : string) => (* We can speed things up because the stamps are already bound. N.B. When processing the result signature of a functor we explicitly check for this case. *) lookSig (name, lno) | _ => let (* Anything else has to be copied. *) val result = sigValue (str, Env globalEnv, lno, strName); (* We used to have code in here to generate equality types for all the datatypes in the signature and also to check that the signature was well formed (that meant that if we had shared a structure in the signature with a global structure then every type and substructure in the shared structure had a counterpart in the global structure). That has all changed in ML97. *) in (* Now enumerate the bound names. *) renameVariableAsBound(result, initTypeId, giveError (str, lno, lex)) end (* not (isSignatureIdent str) *) end (* sigVal *); (* Process structure-returning expressions i.e. structure names, struct..end values and functor applications. typeNo is the number of the next bound identifier. If < 0 make a free identifier. *) fun structValue str typeNo (Env env) lno strName = let (* Look up a structure name. *) fun lookStr name kind = lookupStructure (kind,{lookupStruct = #lookupStruct env}, name, giveError (str, lno, lex)); (* these were anonymous fn; moved here for convenience SPF 11/8/94 *) fun newTypeId () = let val n = !typeNo; in if n < 0 then makeFreeId () else (typeNo := n + 1; makeBoundId n) end; in case str of StructureIdent {name, valRef} => let (* Look up the name and save the value. *) val result = lookStr name "Structure"; in if isUndefinedStruct result then undefinedSignature else (valRef := result; structSignat result ) end | FunctorAppl {name, arg, valRef} => (* The result structure must be copied to generate a new environment. This will make new types so that different applications of the functor yield different types. There may be dependencies between the parameters and result signatures so copying may have to take that into account. *) let (* Look up the name, and copy the structure. Strictly functors cannot be contained in structures but this allows structures to be used as general name spaces. *) val functr: functors = lookupAny (name, #lookupFunct env, #lookupStruct env, (fn s => #lookupFunct (makeEnv (structSignat s))), "Functor", undefinedFunctor, giveError (str, lno, lex)); in if isUndefinedFunctor functr then undefinedSignature else let val U : unit = valRef := functr; (* save it till later. *) val resultSig : signatures = functorResult functr; val argStruct : structVals = functorArg functr; (* We must ensure that types are correctly shared between the arguments and the result. This table keeps track of which actual parameters have been matched to the formals and are then used in the generation of new stamps for types declared in the functor. *) val typeMap : typeConstrs map = typeMatchTab (sigMinTypes resultSig, sigMaxTypes resultSig); (* Get the actual parameter value. *) val argSig = structValue arg typeNo (Env env) lno ""; (* Check that the actual arguments match formal arguments, and instantiate the variables. *) val U : unit = matchSigs (argSig, structSignat argStruct, typeMap, str, lno, lex); in (* Finally copy the result signature, incorporating the actual args, and creating new stamps for any generative stamps (i.e. stamps that were not put in the table before. *) copySig (resultSig, isBoundId, newTypeId, typeMap, strName) end end | StructDec {alist, value = signat} => let (* Collection of declarations packaged into a structure or a collection of signatures. *) (* Some of the environment, the types and the value constructors, is generated during the first pass. Get the environment from the structure. *) val structEnv = makeEnv signat; (* Make a result signature. This will have the value and structure entries as formals. *) val resultSig = makeSignatures (sigName signat); val resultEnv = makeEnv resultSig; val addrs = ref 0; (* This environment receives the declarations from calling pass2. *) val newEnv = { enterType = fn (pair as (name,v)) => ( #enterType structEnv pair; #enterType resultEnv pair ), (* Should never occur. *) enterSig = fn (pair as (name,v)) => ( #enterSig structEnv pair; #enterSig resultEnv pair ), (* Never occurs in normal ML, might happen if we opened a structure that was actually a name space. *) enterFunct = fn (pair as (name,v)) => ( #enterFunct structEnv pair; #enterFunct resultEnv pair ), (* Enter the value in the environment of the struct..end, but turn local declarations or selections from other structures into entries for the result vector. *) enterVal = fn (pair as (name,v)) => ( #enterVal structEnv pair; case v of Value{access=Overloaded _, ...} => #enterVal resultEnv pair (* Just copy. *) | Value{class, typeOf, ...} => let (* Local or selected. *) val isVal = not (isConstructor v); val a = !addrs; in #enterVal resultEnv (name, mkFormal (name, class, typeOf, a)); addrs := a + 1 end ), (* Make entries in the result vector. *) enterStruct = fn (pair as (name, str)) => let val U = #enterStruct structEnv pair; val resSig = structSignat str; val a = !addrs; in #enterStruct resultEnv (name, makeFormalStruct (name, resSig, a)); addrs := a + 1 end, lookupVal = lookupDefault (#lookupVal structEnv) (#lookupVal env), lookupType = lookupDefault (#lookupType structEnv) (#lookupType env), lookupStruct = lookupDefault (#lookupStruct structEnv) (#lookupStruct env), lookupSig = #lookupSig env, (* Global *) lookupFunct = #lookupFunct env, (* Global *) lookupFix = #lookupFix env, (* Fixity declarations are dealt with in the parsing process. They are only processed again in this pass in order to get declarations in the right order. *) enterFix = fn _ => () }; (* process body of structure *) val U : unit = pass2Struct (alist, typeNo, Env newEnv, lno, strName); in resultSig end | Localdec {decs, body = [localStr], line, ...} => let (* let strdec in strexp end *) val newEnv = makeEnv (makeSignatures ""); (* The environment for the local declarations. *) val localEnv = { lookupVal = lookupDefault (#lookupVal newEnv) (#lookupVal env), lookupType = lookupDefault (#lookupType newEnv) (#lookupType env), lookupFix = #lookupFix newEnv, lookupStruct = lookupDefault (#lookupStruct newEnv) (#lookupStruct env), lookupSig = #lookupSig env, lookupFunct = #lookupFunct env, (* Sigs and functs are global *) enterVal = #enterVal newEnv, enterType = #enterType newEnv, (* Fixity declarations are dealt with in the parsing process. At this stage we simply need to make sure that local declarations aren't entered into the global environment. *) enterFix = fn _ => (), enterStruct = #enterStruct newEnv, enterSig = #enterSig newEnv, enterFunct = #enterFunct newEnv }; (* Process the local declarations. *) val U : unit = pass2Struct (decs, typeNo, Env localEnv, line, strName); in (* There should just be one entry in the "body" list. *) structValue localStr typeNo (Env localEnv) line strName end | SigConstraint { str, csig, opaque } => let (* struct: sig or struct :> sig *) val resSig = structValue str typeNo (Env env) lno strName; val explicitSig : signatures = sigVal(csig, Int.max(!typeNo, 0), Env env, lno, strName); (* Make tables to contain the matched ids. *) val typeMap : typeConstrs map = typeMatchTab (sigMinTypes explicitSig, sigMaxTypes explicitSig); fun mustCopyType (s : typeId) : bool = isBoundId s andalso offsetId s >= sigMinTypes explicitSig; (* These maps are used to construct the resultant signature. If we are using transparent matching we use the map constructed from matching the signature to the structure but if we are using opaque matching we need to make new instances of every type. *) val resTypeMap = if opaque then typeMatchTab (sigMinTypes explicitSig, sigMaxTypes explicitSig) else typeMap; in matchSigs (resSig, explicitSig, typeMap, str, lno, lex); (* Copy the signature to ensure that any "names" from the structure value are copied into the result signature. *) copySig (explicitSig, mustCopyType, newTypeId, resTypeMap, strName) end | _ => raise InternalError "structValue: not a value" end (* structValue *); (* compare with newTypeId above!!! *) fun makeTypeId () = let val n = !typeNo; in if n < 0 then makeFreeId () else (typeNo := n + 1; makeBoundId n) end; fun pass2StructureDec (str : structs, structList : structBind list) : unit = let (* Declaration of structures. *) (* The declarations must be made in parallel. i.e. structure A = struct ... end and B = A; binds B to the A in the PREVIOUS environment, not the A being declared. *) val sEnv = (* The new names. *) noDuplicates (fn name => errorNear (lex, true, str, lno, "Structure " ^ name ^ " has already been bound in this declaration") ); (* Put the new names into this environment. *) fun pass2StructureBind ({name, sigStruct, value, valRef, line, opaque}) : unit= let (* Each element in the list is a structure binding. *) val resSig = structValue value typeNo (Env env) line (strName ^ name ^"."); val resultSig = if isEmptyStruct sigStruct then resSig (* No signature to match. *) else let (* Get the explicit signature. If we are inside a functor we have to make any new bound names outside the range we have already used. If !typeNo is less than 0 this means we are not in a functor so we actually start at 0. *) val explicitSig : signatures = sigVal (sigStruct, Int.max (!typeNo, 0), Env env, line, strName ^ name ^ "."); (* Make tables to contain the matched ids. *) val typeMap : typeConstrs map = typeMatchTab (sigMinTypes explicitSig, sigMaxTypes explicitSig); fun mustCopyType (s : typeId) : bool = isBoundId s andalso offsetId s >= sigMinTypes explicitSig; (* These maps are used to construct the resultant signature. If we are using transparent matching we use the map constructed from matching the signature to the structure but if we are using opaque matching we need to make new instances of every type. *) val resTypeMap = if opaque then typeMatchTab (sigMinTypes explicitSig, sigMaxTypes explicitSig) else typeMap; in (* Match the signature. *) matchSigs (resSig, explicitSig, typeMap, str, line, lex); (* And copy it to put in the names from the structure. *) copySig (explicitSig, mustCopyType, makeTypeId, resTypeMap, strName ^ name ^ ".") end; (* Now make a local structure variable using this signature. *) val var = makeLocalStruct (name, resultSig); in #enter sEnv (name, var); valRef := var end in List.app pass2StructureBind structList; (* Put them into the enclosing env. *) #apply sEnv (#enterStruct env) end; (* pass2StructureDec *) fun pass2FunctorDec (s: structs, structList : functorBind list) : unit = let (* There is a restriction that the same name may not be bound twice. As with other bindings functor bindings happen in parallel. DCJM 6/1/00. *) val sEnv = (* The new names. *) noDuplicates (fn name => errorNear (lex, true, s, lno, "Functor " ^ name ^ " has already been bound in this declaration") ); (* Put the new names into this environment. *) fun pass2FunctorBind ({name, arg = FormalArg arg, body, sigStruct, valRef, line, opaque}) = let (* We must copy the signatures to ensure that arguments with the same signature are different. Make an environment to contain the arguments. *) val argEnv = makeEnv (makeSignatures ""); val {name = argName, sigStruct = argSig, valRef = argVal} = arg; (* If it is a "spec" it must be wrapped up in sig...end. We can't have a functor declaration in another functor (at least in the current definition of ML so we can start this at 0, rather than !typeNo). *) val signat : signatures = let val spec = case argSig of SignatureIdent _ => argSig | SigDec _ => argSig | WhereType _ => argSig | _ => mkSig [argSig] in sigVal (spec, 0, Env env, line, "") end; val resArg = makeLocalStruct (argName, signat); in (* Put the copied version in. *) if argName <> "" then #enterStruct argEnv (argName, resArg) else (* Open the dummy argument. Similar to "open" in treestruct. *) univFold (sigTab signat, (fn (dName, dVal, ()) => if tagIs typeConstrVar dVal then #enterType argEnv (dName, tagProject typeConstrVar dVal) else if tagIs valueVar dVal then #enterVal argEnv (dName, mkSelectedVar (tagProject valueVar dVal, resArg)) else if tagIs structVar dVal then #enterStruct argEnv (dName, makeSelectedStruct (tagProject structVar dVal, resArg)) else () ), () ); argVal := resArg; (* Now process the body of the functor using the environment of the arguments to the functor and the global environment. *) let val envWithArgs = { lookupVal = lookupDefault (#lookupVal argEnv) (#lookupVal env), lookupType = lookupDefault (#lookupType argEnv) (#lookupType env), lookupFix = #lookupFix env, lookupStruct = lookupDefault (#lookupStruct argEnv) (#lookupStruct env), lookupSig = #lookupSig env, lookupFunct = #lookupFunct env, enterVal = #enterVal env, enterType = #enterType env, enterFix = fn _ => (), enterStruct = #enterStruct env, enterSig = #enterSig env, enterFunct = #enterFunct env }; (* In sigVal we will have allocated a range of bound stamps for the argument signature. We need to extend the range for stamps in the body. *) val typeStamps = ref (sigMaxTypes signat); fun newTypeId () = let val n = !typeStamps; in typeStamps := n + 1; makeBoundId n end; val resSig = structValue body typeStamps (Env envWithArgs) line (strName ^ name ^ "()."); val resultSig = if isEmptyStruct sigStruct then resSig (* No signature to match. *) else let (* Get the explicit result signature. *) val startTypes = sigMaxTypes signat; val explicitSig : signatures = sigVal (sigStruct, startTypes, Env envWithArgs, line, strName ^ name ^ "()."); (* Make tables to contain the matched names. If we have a named signature we won't have copied it so the names will start from zero, but since we can't have any sharing with the argument there isn't a problem. Otherwise we may have some sharing with the argument and we have to keep the names distinct. *) val fromZero = isSignatureIdent sigStruct; val typeMap : typeConstrs map = typeMatchTab (sigMinTypes explicitSig, sigMaxTypes explicitSig); fun mustCopyType s = isBoundId s andalso offsetId s >= sigMinTypes explicitSig; (* These maps are used to construct the resultant signature. If we are using transparent matching we use the map constructed from matching the signature to the structure but if we are using opaque matching we need to make new instances of every type. *) val resTypeMap = if opaque then typeMatchTab (sigMinTypes explicitSig, sigMaxTypes explicitSig) else typeMap in (* Match the signature. *) matchSigs (resSig, explicitSig, typeMap, s, line, lex); (* And copy it to put in the names from the args and generative names. All the names will normally be in the table already so copySig will not make any new ones, merely link up the values to their new types. We have to be careful if we have names used in the explicit result signature which have come from the argument, particularly if there is no type constructor in the result with that name. e.g. functor F(type t end): sig val x: t end = ... To handle that we only copy bound names actually in the explicit signature. New names are generated in exceptional circumstances, mainly if there has been an error in matching. *) (* The above comment was true when we only had transparent matching. In ML 97, with opaque matching, we generate new names for all types which are not constrained by sharing constraints. *) copySig (explicitSig, mustCopyType, newTypeId, resTypeMap, strName ^ name ^ "().") end; (* Now make a local functor variable and put it in the name space. Because functors can only be declared at the top level the only way it can be used is if we have functor F(..) = ... functor G() = ..F.. with no semicolon between them. They will then be taken as a single declaration and F will be picked up as a local. *) (* Set the size of the type map. *) val sig' = makeCopy (sigName resultSig, resultSig, 0, !typeStamps); val var = makeFunctor (name, resArg, sig', makeLocal ()); in #enter sEnv (name, var); valRef := var end end | pass2FunctorBind _ = raise InternalError "pass2FunctorBind" in (* Each element in the list is a functor binding. *) List.app pass2FunctorBind structList; (* Put them into the enclosing env. *) #apply sEnv (#enterFunct env) end; (* pass2FunctorDec *) fun pass2SignatureDec (str: structs, structList : sigBind list) : unit = let (* There is a restriction that the same name may not be bound twice. As with other bindings functor bindings happen in parallel. DCJM 6/1/00. *) val sEnv = (* The new names. *) noDuplicates (fn name => errorNear (lex, true, str, lno, "Signature " ^ name ^ " has already been bound in this declaration") ); fun pass2SignatureBind ({name, sigStruct, line, sigRef}) = let (* Each element in the list is a signature binding. *) (* Get the signature. We can't have a declaration of a signature inside a functor so we can start at 0 rather than !typeNo. *) val resSig : signatures = sigVal (sigStruct, 0, Env env, line, strName ^ name ^ "."); (* Generate a signature with the new name and put it in the table *) val copiedSig = makeCopy (name, resSig, sigMinTypes resSig, sigMaxTypes resSig) in sigRef := copiedSig; (* Remember the signature for pass4. *) #enter sEnv (name, copiedSig) end in List.app pass2SignatureBind structList; (* Put them into the enclosing env. *) #apply sEnv (#enterSig env) end; (* pass2SignatureDec *) fun pass2Localdec (decs : structs list, body : structs list) : unit = let val newEnv = makeEnv (makeSignatures ""); (* The environment for the local declarations. *) val localEnv = { lookupVal = lookupDefault (#lookupVal newEnv) (#lookupVal env), lookupType = lookupDefault (#lookupType newEnv) (#lookupType env), lookupFix = #lookupFix newEnv, lookupStruct = lookupDefault (#lookupStruct newEnv) (#lookupStruct env), lookupSig = #lookupSig env, lookupFunct = #lookupFunct env, enterVal = #enterVal newEnv, enterType = #enterType newEnv, enterFix = fn _ => (), enterStruct = #enterStruct newEnv, enterSig = #enterSig newEnv, enterFunct = #enterFunct newEnv }; (* Process the local declarations. *) val U = pass2Struct (decs, typeNo, Env localEnv, lno, strName); (* This is the environment used for the body of the declaration. Declarations are added both to the local environment and to the surrounding scope. *) (* Look-ups come from the local env *) val bodyEnv = { lookupVal = #lookupVal localEnv, lookupType = #lookupType localEnv, lookupFix = #lookupFix localEnv, lookupStruct = #lookupStruct localEnv, lookupSig = #lookupSig localEnv, lookupFunct = #lookupFunct localEnv, enterVal = fn (pair as (name, v)) => ( #enterVal newEnv pair; #enterVal env pair ), enterType = fn (pair as (name, v)) => ( #enterType newEnv pair; #enterType env pair ), enterFix = #enterFix localEnv, enterStruct = fn (pair as (name, v)) => ( #enterStruct newEnv pair; #enterStruct env pair ), enterSig = fn (pair as (name, v)) => ( #enterSig newEnv pair; #enterSig env pair ), enterFunct = #enterFunct localEnv }; in (* Now the body. *) pass2Struct (body, typeNo, Env bodyEnv, lno, strName) end; (* pass2Localdec *) fun pass2Singleton (dec : parsetree, vars, line : int) : unit = let (* Single declaration - may declare several names. *) (* As well as entering the declarations we must keep a list of the value and exception declarations. *) val newEnv = { lookupVal = #lookupVal env, lookupType = #lookupType env, lookupFix = #lookupFix env, lookupStruct = #lookupStruct env, lookupSig = #lookupSig env, lookupFunct = #lookupFunct env, (* Must add the entries onto the end in case a declaration with the same name is made. e.g. local ... in val a=1; val a=2 end. *) enterVal = fn (pair as (name,v)) => ( #enterVal env pair; vars := !vars @ [CoreValue v] ), enterType = fn (pair as (name,t)) => ( #enterType env pair; vars := !vars @ [CoreType t] ), enterFix = fn (pair as (name,f)) => ( #enterFix env pair; vars := !vars @ [CoreFix pair] ), (* This will only be used if we do `open A' where A contains sub-structures. *) enterStruct = fn (pair as (name,v)) => ( #enterStruct env pair; vars := !vars @ [CoreStruct v] ), enterSig = #enterSig env, enterFunct = #enterFunct env }; val discard : types = pass2 (dec, makeTypeId, Env newEnv, lex, line, strName); in () end; (* pass2Singleton *) fun pass2Dec (str : structs) : unit = case str of StructureDec (structList : structBind list) => pass2StructureDec (str, structList) | FunctorDec (structList : functorBind list) => pass2FunctorDec (str, structList) | SignatureDec (structList : sigBind list) => pass2SignatureDec (str, structList) | Localdec {decs, body, ...} => pass2Localdec (decs, body) | Singleton {dec, vars, line} => pass2Singleton (dec, vars, line) | _ => (* empty (we should check this!!!) *) (); in List.app pass2Dec strs (* Process all the top level entries. *) end (* pass2Struct *); in (* Structures and types at the top level are free identifiers. *) pass2Struct (strs, (* make free ids *) ref ~1, Env env, lineno lex, "") end (*pass2Structs *); (* When we have done all the unification we can we need to check all the values for free type variables. The arguments to this function are functions which yield all the values, structures and functors in the top-level environment. *) fun checkForFreeTypeVars(applyVal, applyStruct, applyFunc, lex : lexan) = let (* Check the type of a value. *) fun checkValue(name: string, v: values) = checkForFreeTypeVariables(name, valTypeOf v, lex) (* Find all the values in the structure. *) fun checkStruct(name: string, s: signatures) = let fun checkEntry(dName: string, dVal: universal, ()) = if tagIs structVar dVal then checkStruct(name ^ dName ^ ".", structSignat((tagProject structVar) dVal)) else if tagIs valueVar dVal then checkValue(name ^ dName, (tagProject valueVar) dVal) else () in univFold(sigTab s, checkEntry, ()) end in applyVal(fn (s: string, v: values) => checkValue(s, v)); applyStruct( fn (n: string, s: structVals) => checkStruct(n^".", structSignat s)); (* Look at the result signature of the functor. *) applyFunc( fn (n: string, f: functors) => checkStruct(n^"().", functorResult f)) end; (* * * Code-generation phase. * * *) (* Generate code from the expressions and arrange to return the results so that "pass4" can find them. *) fun gencodeStructs (strs, lex) = let (* Each top level declaration is assigned a distinct address. *) val addresses = ref 1; fun mkAddr () = let val addr = !addresses in addresses := addr + 1; addr end; val level = ref 0; (* Only non-zero inside a functor body *) (* Apply a function which returns a pair of codelists to a list of structs. This now threads the debugging environment through the functions so the name is no longer really appropriate. DCJM 23/2/01. *) fun mapPair (f: 'a * debugenv -> {code: codetree list, load: codetree list, debug: debugenv}) [] debug = { code = [], load = [], debug = debug } | mapPair f (h::t) debug = let (* Process the list in order. In the case of a declaration sequence later entries in the list may refer to earlier ones. *) val this = f (h, debug); val rest = mapPair f t (#debug this); in (* Return the combined code. *) { code = #code this @ #code rest, load = #load this @ #load rest, debug = #debug rest } end; (* Code-generate a structure value, and return the result after matching it to the required signature. *) fun structureCode (str, resultSig, strName, debugEnv) = let (* Generate a new structure which will match the given signature. A structure is represented by a vector of entries, and its signature is a map which gives the offset in the vector of each value. When we match a signature the candidate structure will in general not have its entries in the same positions as the target. We have to construct a new structure from it with the entries in the correct positions. In most cases the optimiser will simplify this code considerably so there is no harm in using a general mechanism. *) fun matchStructure (code : codetree, source : signatures, dest : signatures) = ( let val decs = multipleUses (code, mkAddr, !level); val load = #load decs (!level); (* All local *) (* To save taking apart a structure and then rebuilding it, if the structure has not changed we just copy it. *) val useOriginal = ref true; (* We put the entries into this vector and then flatten it. *) val resVec = STRETCHARRAY.stretchArray (10 (* Guess *), CodeZero); val maxEntry = ref 0; fun addToList code addr = ( STRETCHARRAY.update (resVec, addr, code); (* SPF 7/6/94 fixed off-by-one *) if addr >= !maxEntry then maxEntry := addr + 1 else () ); val U : unit = (* Structures. *) univFold (sigTab dest, (fn (dName, dVal, ()) => if tagIs structVar dVal then let val dval = tagProject structVar dVal; in if isFormal (structAccess dval) then let val destAddr = vaFormal (structAccess dval); val sourceStruct = valOf(univLookup (sigTab source, structVar, dName)); val access = structAccess sourceStruct; (* Since these have come from a signature we might expect all the entries to be "formal". However if the structure is global the entries in the signature may be global, and if the structure is in a "struct .. end" it may be local. *) val code = if isFormal access then let (* select from the code. *) val U : unit = if vaFormal access <> destAddr then useOriginal := false else () in mkInd (vaFormal access, load) end else let val U : unit = useOriginal := false; in codeStruct (sourceStruct, !level) end; val matched = matchStructure (code, structSignat sourceStruct, structSignat dval); val U : unit = if not (#unchanged matched) then useOriginal := false else (); in addToList (#code matched) destAddr end else () end else if tagIs valueVar dVal then let (* values. *) val dval = tagProject valueVar dVal; in case dval of Value{access=Formal addr, ...} => let val sourceVal = valOf(univLookup (sigTab source, valueVar, dName)); (* If we have an exception matching a value we have to generate a packet or a function yielding a packet. *) val excBecomesVal = case (dval, sourceVal) of (Value{class=SimpleValue, ...}, Value{class=Exception, ...}) => true | _ => false (* Similarly, if we have a constructor which becomes a value we have to extract the injection function or the value. *) val constrBecomesVal = case (dval, sourceVal) of (Value{class=SimpleValue, ...}, Value{class=Constructor _, ...}) => true | _ => false (* If the entry is from a signature select from the code. *) val code = case sourceVal of Value{access=Formal svAddr, ...} => let val UUU = if svAddr <> addr orelse excBecomesVal orelse constrBecomesVal then useOriginal := false else (); in if excBecomesVal then (* Have to make a packet or a function returning a packet. *) if isEmpty (valTypeOf dval) then mkTuple [mkInd (svAddr, load), mkStr (valName dval), CodeZero] else mkProc (mkTuple [mkInd (svAddr, #load decs (!level + 1)), mkStr (valName dval), mkLoad (~1, 0)], 1, 1, "") else if constrBecomesVal then mkInd(1, mkInd (svAddr, load)) else mkInd (svAddr, load) end | _ => let val UUU = useOriginal := false; in if excBecomesVal then codeExFunction(sourceVal, !level, valTypeOf dval, lex, 0 (* line no *)) else let val valu = codeVal (sourceVal, !level, valTypeOf dval, lex, 0) in if constrBecomesVal then mkInd(1, valu) else valu end end; in addToList code addr end | _ => () end else if tagIs typeConstrVar dVal then (* We need to process the value constructors. We may well process them as values anyway but we don't always. *) let val tcons = tagProject typeConstrVar dVal; val matchedType = valOf(univLookup (sigTab source, typeConstrVar, dName)) fun processConstructor(Value{access=Formal dstAddr, ...}, Value{access=Formal svAddr, ...}) = (* Selecting from a signature. *) ( if svAddr <> dstAddr then useOriginal := false else (); addToList (mkInd (svAddr, load)) dstAddr ) | processConstructor(Value{access=Formal dstAddr, typeOf, ...}, sourceVal) = (* Any other source. *) ( useOriginal := false; addToList (codeVal (sourceVal, !level, typeOf, lex, 0)) dstAddr ) | processConstructor _ = () in ListPair.app processConstructor (tcConstructors tcons, tcConstructors matchedType) end else () ), () ); in (* If we have copied the original we can use it unchanged. *) if !useOriginal then { code = code, unchanged = true } else (* Put the entries into a list for the vector. *) let val codeList = List.tabulate (!maxEntry, fn i => STRETCHARRAY.sub (resVec,i)) in { code = mkEnv (#dec decs @ [mkTuple codeList]), unchanged = false } end end ); in case str of FunctorAppl {name, arg, valRef} => let val functs = !valRef; val applyCode : codetree = mkEval (codeAccess (functorAccess functs, !level), [structureCode (arg, structSignat (functorArg functs), strName, debugEnv)], false); in (* Evaluate the functor and match to the result. *) #code (matchStructure (applyCode, functorResult functs, resultSig)) end | StructureIdent {valRef, ...} => let val v = !valRef; val valCode : codetree = codeStruct (v, !level); (* Get the structure. *) in #code (matchStructure (valCode, structSignat v, resultSig)) end | Localdec {decs, body = [localStr], ...} => let (* let strdec in strexp end *) (* Generate the declarations but throw away the loads. *) (* TODO: Get the debug environment correct here. *) val coded = mapPair (fn (str, debug) => codeStrdecs (strName, str, debug)) decs debugEnv; in mkEnv (#code coded @ [structureCode (localStr, resultSig, strName, #debug coded)]) end | StructDec {alist, value} => let val coded = mapStrdecs alist strName debugEnv; in (* The result is a block containing the declarations and code to load the results. *) mkEnv (#code coded @ [#code (matchStructure (mkTuple (#load coded), value, resultSig))]) end | SigConstraint { str, ... } => structureCode (str, resultSig, strName, debugEnv) | _ => raise InternalError "structureCode: not a structure" end (* structureCode *) (* We need to generate code for the declaration and then code to load the results into a tuple. *) and codeStrdecs (strName, str, debugEnv: debugenv): { code: codetree list, load: codetree list, debug: debugenv} = case str of StructureDec (structList : structBind list) => let fun codeStructureBind ({name, value, valRef, ...}: structBind, debug) = let (* Set the address of the variable representing this structure. *) val addr = mkAddr(); val var = vaLocal (structAccess (!valRef)); val U : unit = #addr var := addr; val U : unit = #level var := !level; val sName = strName ^ name ^ "." val strCode = structureCode (value, structSignat (!valRef), sName, debug) in (* Get the code and save the result in the variable. *) { code = [mkDec (addr, strCode)], (* Load the variable. *) load = [mkLoad (addr, 0)], debug = debug (* We don't do structures at the moment. *) } end in (* Code-generate each declaration. *) mapPair codeStructureBind structList debugEnv end | FunctorDec (structList : functorBind list) => let fun codeFunctorBind ({name, arg = FormalArg arg, body, valRef, ...}: functorBind, debugEnv) = let val {valRef = argVal, ...} = arg; (* Go down one level. *) val U = level := !level + 1; (* Save the value and set to 1 *) val addr = !addresses; val U = addresses := 1; val arg = vaLocal (structAccess (!argVal)); val U = #addr arg := ~1; val U = #level arg := !level; val func = !valRef; val name : string = strName ^ name; (* Process the body and make a procedure out of it. *) val functorCode : codetree = (if getParameter inlineFunctorsTag (debugParams lex) then mkMacroProc else mkProc) (structureCode (body, functorResult func, name ^ "().", debugEnv), !level, 1, name); (* Go back down a level and add 1 to address. *) val U = level := !level - 1; val U = addresses := addr + 1; (* Set the address of this variable. Because functors can only be declared at the top level the only way it can be used is if we have functor F(..) = ... functor G() = ..F.. with no semicolon between them. They will then be taken as a single declaration and F will be picked up as a local. *) val var = vaLocal (functorAccess func); val U = #addr var := addr; val U = #level var := !level; in { code = [mkDec (addr, functorCode)], load = [mkLoad (addr, 0)], (* Load the variable. *) debug = debugEnv } end | codeFunctorBind _ = raise InternalError "codeFunctorBind: not a FunctorBind" in mapPair codeFunctorBind structList debugEnv end | Localdec {decs, body, ...} => let (* Accumulate the code from the declarations, and the code to load the results. *) (* TODO: Get the environment right here. *) val codeDecs = mapStrdecs decs strName debugEnv; val codeBody = mapStrdecs body strName (#debug codeDecs); in (* Combine the lists. *) { code = #code codeDecs @ #code codeBody, load = #load codeBody, (* Result is just the body. *) debug = #debug codeBody (* TODO: This isn't correct. *) } end | Singleton {dec, vars, line, ...} => let (* Load each variable and exception that has been declared. Since value declarations may be mutually recursive we have to code-generate the declarations first then return the values. *) fun filterVals (CoreValue v) = SOME(codeVal (v, !level, badType, nullLex, 0)) | filterVals _ = NONE val (code, newDebug) = gencode (dec, lex, debugEnv, !level, addresses, strName, line) in { code = code, load = List.mapPartial filterVals (!vars), debug = newDebug } end | _ => (* signature decs *) { code = [], load = [], debug = debugEnv } (* end codeStrdecs *) and mapStrdecs strs strName debugEnv = mapPair (fn (str, debug) => codeStrdecs (strName, str, debug)) strs debugEnv; val coded = mapStrdecs strs "" ([], fn _ => CodeZero); (* Process top level list. *) in (* The result is code for a vector containing the results of the declarations which pass4 can use to pull out the values after the code has been run. *) mkEnv (#code coded @ [mkTuple (#load coded)]) end (* gencodeStructs *); (* Once the code has been executed the declarations must be added to the global scope. The type and infix status environments have already been processed so they can be dumped into the global environment unchanged. The values and exceptions, however, have to be picked out the compiled code. Note: The value constructors are actually produced at the same time as their types but are dumped out by enterGlobals. *) (* This previously only processed declarations which required some code-generation and evaluation (structures, values and functors). It now includes types, signatures and fixity so that all declarations can be printed in the order of declaration. DCJM 6/6/02. *) fun pass4Structs (results, strs) = let (* Process the datatypes in the structure and turn their value constructors into Global entries. We only need this in order to be able to print values of datatypes which have been produced in structures or functors with opaque signatures. We could do this for other values as well but it's not really necessary. Because of sharing, value constructors from structures or functors without opaque matching will already be global. *) fun extractValsToSig (results: codetree, signat: signatures) = univFold (sigTab signat, (fn (dName, dVal, ()) => if tagIs structVar dVal then let (* Structures in the signature. *) val subStr = tagProject structVar dVal; (* Process this signature. *) val base = case structAccess subStr of Formal addr => mkInd (addr, results) | Global code => code | _ => raise InternalError "extractValsToSig: bad access"; in (* We could create a global substructure here and enter it. *) extractValsToSig (base, structSignat subStr) end (* else if tagIs valueVar dVal then let (* Values. *) val v = tagProject valueVar dVal; in case v of Value {name, typeOf, class, access = Formal addr } => let val ind = mkInd (addr, results); val globalVal = Value{name=name, typeOf=typeOf, class=class, access=Global ind} in univEnter (sigTab signat, valueVar, dName, globalVal) end | _ => () end *) else if tagIs typeConstrVar dVal then let (* Types. *) val tcons = tagProject typeConstrVar dVal; (* Update the constructor list. *) fun copyAConstructor(Value{name=cName, typeOf, class, access = Formal addr}) = Value{name=cName, typeOf=typeOf, class=class, access=Global(mkInd(addr, results))} | copyAConstructor c = c (* Already a global. *) in tcSetConstructors(tcons, map copyAConstructor (tcConstructors tcons)) end else () (* Anything else *) ), (* end fn *) () ) (* end extractValsToSig *); fun extractStruct(str, args as (addr, { fixes, values, structures, signatures, functors, types } )) = case str of FunctorDec (structList : functorBind list) => let fun extractFunctorBind ({name, valRef, ...}: functorBind, (addr, funcs)) = let val code = mkInd (addr, results); val func = !valRef; val funcTree = makeFunctor (functorName func, functorArg func, functorResult func, makeGlobal code); in (addr + 1, (name, funcTree) :: funcs) end (* Get the functor values. *) val (newAddr, newfunctors ) = List.foldl extractFunctorBind (addr, functors) structList in (newAddr, { functors=newfunctors, fixes=fixes, values=values, signatures=signatures, structures=structures, types=types }) end | StructureDec (structList : structBind list) => let fun extractStructureBind ({name, valRef, ...}: structBind, (addr, structures)) = let val resultSig = structSignat (!valRef); val structCode = mkInd (addr, results) in (* Convert the values to global. More importantly convert any datatypes with non-global value constructors. *) extractValsToSig (structCode, resultSig); (* Make a global structure. *) (addr + 1, (name, makeGlobalStruct (name, resultSig, structCode)) :: structures) end val (newAddr, newstructures) = List.foldl extractStructureBind (addr, structures) structList in (newAddr, { structures=newstructures, functors=functors, signatures=signatures, fixes=fixes, values=values, types=types }) end | Localdec {body, ...} => List.foldl extractStruct args body (* Value, exception or type declaration at the top level. *) | Singleton {vars, ...} => let (* Enter the values and exceptions. *) fun makeDecs (CoreValue dec, (addr, { fixes, values, structures, signatures, functors, types } )) = ( case dec of Value{access=Overloaded _, ...} => (* enter it as it is. *) (addr+1, { fixes=fixes, values=(valName dec, dec) :: values, structures=structures, signatures=signatures, functors=functors, types=types }) | Value{class, name, typeOf, ...} => (* take the value out of the result vector. *) let val codeVal = mkInd (addr, results); val name = valName dec; val val' = Value{class=class, name=name, typeOf=typeOf, access=Global codeVal} in (addr+1, { fixes=fixes, values=(name, val') :: values, structures=structures, signatures=signatures, functors=functors, types=types } ) end ) | makeDecs (CoreStruct dec, (addr, {fixes, values, structures, signatures, functors, types})) = (* Any structures will only come from "open A" where A contains sub-structures. "A" must be global otherwise the open would not be global, so all the sub-structures must be global. *) (addr, { fixes=fixes, values=values, structures=(structName dec, dec) :: structures, signatures=signatures, functors=functors, types=types } ) | makeDecs (CoreFix pair, (addr, {fixes, values, structures, signatures, functors, types})) = (addr, { fixes=pair :: fixes, values=values, structures=structures, signatures=signatures, functors=functors, types=types } ) | makeDecs (CoreType dec, (addr, {fixes, values, structures, signatures, functors, types})) = (addr, { fixes=fixes, values=values, structures=structures, signatures=signatures, functors=functors, types=(#second(splitString(tcName dec)), dec) :: types } ) in List.foldl makeDecs args (!vars) end | SignatureDec (structList : sigBind list) => let val newSigs = List.map (fn ({sigRef=ref s, name, ...}: sigBind) => (name, s)) structList in (addr, { fixes=fixes, values=values, structures=structures, signatures=newSigs @ signatures, functors=functors, types=types } ) end | _ => args; (* end extractStruct *) val empty = { fixes=[], values=[], structures=[], functors=[], types=[], signatures=[] } val (lastAddr, result) = List.foldl extractStruct (0, empty) strs; (* The entries in "result" are in reverse order of declaration and may contain duplicates. We need to reverse and filter the lists so that we end up with the lists in order and with duplicates removed. *) fun revFilter result [] = result | revFilter result ((nameValue as (name, _)) ::rest) = let (* Remove any entries further down the list if they have the same name. *) val filtered = List.filter (fn (n,_) => name <> n) rest in revFilter (nameValue :: result) filtered end in { fixes=revFilter [] (#fixes result), values=revFilter [] (#values result), structures=revFilter [] (#structures result), functors=revFilter [] (#functors result), types=revFilter [] (#types result), signatures=revFilter [] (#signatures result) } end (* pass4Structs *) end; polyml.5.2.1/mlsource/MLCompiler/STRUCT_VALS.ML0000644000175000017500000007722011003075473017743 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* Title: Global and Local values. Author: Dave Matthews,Cambridge University Computer Laboratory Copyright Cambridge University 1985 *) (* This type contains the basic structures of global and local declarations. Putting the global declarations in a separate type allows us to install a new compiler (particularly to fix bugs) and still be compatible with declarations made with the old compiler. It is also convenient to put local values in here as well. *) functor STRUCT_VALS ( (*****************************************************************************) (* CODETREE *) (*****************************************************************************) structure CODETREE : sig type codetree val CodeZero : codetree end; (*****************************************************************************) (* MISC *) (*****************************************************************************) structure MISC : sig exception InternalError of string; end; (*****************************************************************************) (* UNIVERSAL *) (*****************************************************************************) structure UNIVERSAL : sig type 'a tag val tag : unit -> 'a tag end; (*****************************************************************************) (* UNIVERSALTABLE *) (*****************************************************************************) structure UNIVERSALTABLE : sig type 'a tag; type univTable; val makeUnivTable: unit -> univTable; val univEnter: univTable * 'a tag * string * 'a -> unit; val univLookup: univTable * 'a tag * string -> 'a option; (* Freeze a mutable table so it is immutable. *) val univFreeze: univTable -> univTable end; (*****************************************************************************) (* STRUCTVALS sharing constraints *) (*****************************************************************************) sharing type UNIVERSAL.tag = UNIVERSALTABLE.tag ) : (*****************************************************************************) (* STRUCTVALS export signature *) (*****************************************************************************) sig (* Structures *) type signatures; type codetree; type typeId; (* type identifiers. In the old (ML90) version these were used for structures as well. *) val unsetId: typeId; val isUnsetId: typeId -> bool; val isFreeId: typeId -> bool; val isBoundId: typeId -> bool; val isVariableId: typeId -> bool; val offsetId: typeId -> int; val sameTypeId: typeId * typeId -> bool; val unifyTypeIds: typeId * typeId -> bool; val makeFreeId: unit -> typeId; val makeVariableId: unit -> typeId; val makeBoundId: int -> typeId; (* Types *) datatype 'a possRef = FrozenRef of 'a | VariableRef of 'a ref val pling: 'a possRef -> 'a val updatePR: 'a possRef * 'a -> unit (* Standard type constructors. *) type typeVarForm; type typeConstrs; (* A type is the union of these different cases. *) datatype types = TypeVar of typeVarForm | TypeConstruction of (* typeConstructionForm *) { name: string, value: typeConstrs possRef, args: types list } | FunctionType of (* functionTypeForm *) { arg: types, result: types } | LabelledType of (* labelledRecForm *) { recList: { name: string, typeof: types } list, frozen: bool, genericInstance: typeVarForm list } | OverloadSet of (* overloadSetForm *) { typeset: typeConstrs list } | BadType | EmptyType and valAccess = Global of codetree | Local of { addr: int ref, level: int ref } | Selected of { addr: int, base: structVals } | Formal of int | Overloaded of typeDependent (* Values only. *) (* Structures. *) and structVals = NoStruct | Struct of { name: string, signat: signatures, access: valAccess } (* Values. *) and typeDependent = Print | PrintSpace | MakeString | MakeStringSpace | InstallPP | Equal | NotEqual | AddOverload | TypeDep and values = Value of { name: string, typeOf: types, access: valAccess, class: valueClass } (* Classes of values. *) and valueClass = SimpleValue | Exception | Constructor of { nullary: bool } ; val badType: types; val emptyType: types; val isBad: types -> bool; val isEmpty: types -> bool; val tcName: typeConstrs -> string; val tcArity: typeConstrs -> int; val tcTypeVars: typeConstrs -> types list; val tcEquivalent: typeConstrs -> types; val tcSetEquivalent: typeConstrs * types -> unit; val tcConstructors: typeConstrs -> values list; val tcSetConstructors: typeConstrs * values list -> unit; val tcEquality: typeConstrs -> bool; val tcSetEquality: typeConstrs * bool -> unit; val tcIdentifier: typeConstrs -> typeId; val tcLetDepth: typeConstrs -> int; (* These are all logically equivalent but include differing numbers of refs *) val makeTypeConstrs: string * types list * types * typeId * bool * int-> typeConstrs; val makeFrozenTypeConstrs: string * types list * types * typeId * bool * int-> typeConstrs; val tvLevel: typeVarForm -> int; val tvEquality: typeVarForm -> bool; val tvNonUnifiable: typeVarForm -> bool; val tvWeak: typeVarForm -> bool; val tvValue: typeVarForm -> types; val tvSetValue: typeVarForm * types -> unit; val sameTv: typeVarForm * typeVarForm -> bool; val makeTv: types * int * bool * bool * bool -> typeVarForm; val generalisable: int; val boolType: typeConstrs; val intType: typeConstrs; val charType: typeConstrs; (* added 22/8/96 SPF *) val stringType: typeConstrs; val wordType: typeConstrs; val realType: typeConstrs; val refType: typeConstrs; val unitType: typeConstrs; val exnType: typeConstrs; val listType: typeConstrs; val undefType: typeConstrs; (* Access to values, structures etc. *) val isGlobal: valAccess -> bool; val isLocal: valAccess -> bool; val isSelected: valAccess -> bool; val isFormal: valAccess -> bool; val makeGlobal: codetree -> valAccess; val makeLocal: unit -> valAccess; val makeSelected: int * structVals -> valAccess; val makeFormal: int -> valAccess; val vaGlobal: valAccess -> codetree; val vaFormal: valAccess -> int; val vaLocal: valAccess -> { addr: int ref, level: int ref }; val vaSelected: valAccess -> { addr: int, base: structVals }; val undefinedStruct: structVals; val isUndefinedStruct: structVals -> bool; val structSignat: structVals -> signatures; val structName: structVals -> string; val structAccess: structVals -> valAccess; val makeEmptyGlobal: string -> structVals; val makeGlobalStruct: string * signatures * codetree -> structVals; val makeLocalStruct: string * signatures -> structVals; val makeFormalStruct: string * signatures * int -> structVals; val makeSelectedStruct: structVals * structVals -> structVals; (* Functors *) type functors; val undefinedFunctor: functors; val isUndefinedFunctor: functors -> bool; val functorName: functors -> string; val functorArg: functors -> structVals; val functorResult: functors -> signatures; val functorAccess: functors -> valAccess; val makeFunctor: string * structVals * signatures * valAccess -> functors; (* Signatures *) type univTable; val sigName: signatures -> string; val sigTab: signatures -> univTable; val sigMinTypes: signatures -> int; val sigMaxTypes: signatures -> int; val makeSignatures: string -> signatures; val makeCopy: string * signatures * int * int -> signatures; (* Values. *) val valName: values -> string val valTypeOf: values -> types val undefinedValue: values; val isUndefinedValue: values -> bool; val isConstructor: values -> bool; val isValueConstructor: values -> bool val makeGlobalV: string * types * codetree -> values; val makeLocalV: string * types * int ref * int ref -> values; val makeFormalV: string * types * int -> values; val makeFormalEx: string * types * int -> values; val makeOverloaded: string * types * typeDependent -> values; val makeValueConstr: string * types * bool * valAccess -> values; (* Infix status *) datatype fixStatus = Infix of int | InfixR of int | Nonfix; datatype env = Env of { lookupVal: string -> values option, lookupType: string -> typeConstrs option, lookupFix: string -> fixStatus option, lookupStruct: string -> structVals option, lookupSig: string -> signatures option, lookupFunct: string -> functors option, enterVal: string * values -> unit, enterType: string * typeConstrs -> unit, enterFix: string * fixStatus -> unit, enterStruct: string * structVals -> unit, enterSig: string * signatures -> unit, enterFunct: string * functors -> unit }; val makeEnv: signatures -> env; type 'a tag; val valueVar: values tag; val typeConstrVar: typeConstrs tag; val fixVar: fixStatus tag; val structVar: structVals tag; val signatureVar: signatures tag; val functorVar: functors tag; end (* STRUCTVALS export signature *) = (*****************************************************************************) (* STRUCTVALS functor body *) (*****************************************************************************) struct open CODETREE; open MISC; open UNIVERSAL; open UNIVERSALTABLE; (* The idea of this is reduce the number of mutable objects. *) datatype 'a possRef = FrozenRef of 'a | VariableRef of 'a ref fun pling(FrozenRef x) = x | pling(VariableRef(ref x)) = x fun updatePR(VariableRef r, x) = r := x | updatePR(FrozenRef _, _) = raise Fail "Assignment to frozen ref" abstype uniqueId = Unique of int ref with fun makeUnique () = Unique (ref 0); (* REF HOTSPOT - 400 *) fun sameUnique (Unique a, Unique b) = (a = b); end; (* There are three classes of structure or type identifier. Variables occur in signatures and can be assigned to other variables or constants by sharing constraints or by signature matching. Free constants arise from top level structures or types or those in top level structures. Bound constants occur in the arguments to functors or in structures or types constructed inside a functor (and therefore generated when the functor is applied). *) abstype typeId = Unset | Free of uniqueId | Bound of int | Variable of typeId ref with (* Variable stamps: can be set to other stamps whether variable or free. *) val unsetId = Unset; fun makeFreeId () = Free (makeUnique ()); val makeBoundId = Bound; fun makeVariableId () = Variable (ref Unset); (* REF HOTSPOT - 260 *) (* If it is a constant or an unset variable return it, otherwise return the value the variable is bound to. *) fun realId id = ( case id of Variable (ref v) => (case v of Unset => id | _ => realId v) | _ => id ); (* Unset variable. *) fun isUnsetId Unset = true | isUnsetId _ = false; fun isVariableId x = case (realId x) of Variable _ => true | _ => false; fun isFreeId x = case (realId x) of Free _ => true | _ => false; fun isBoundId x = case (realId x) of Bound _ => true | _ => false; (* Find the number - assuming it is bound. *) fun offsetId x = case (realId x) of Bound i => i | _ => raise InternalError "offsetId: not a Bound"; (* Are two type constructors the same. *) fun sameTypeId (cons1, cons2) = let val id1 = realId cons1; val id2 = realId cons2; in case (id1, id2) of (Variable a, Variable b) => (a = b) | (Free a, Free b) => sameUnique (a, b) | (Bound a, Bound b) => (a = b) | _ => false end; (* Do the unification and return whether they are equal. *) fun unifyTypeIds (x, y) : bool = let val x1 = realId x; val y1 = realId y; in case (x1, y1) of (Bound a, Bound b) => a = b | (Free a, Free b) => sameUnique (a, b) | (Variable x2, Variable y2) => x2 = y2 orelse (x2 := y1; true) | (Variable x2, _) => (x2 := y1; true) | (_, Variable y2) => (y2 := x1; true) | _ => false end; end; (* typeId abstype *) (* Used for both signatures of local structures and for global structures (name spaces). Strictly signatures do not contain fix-status functors or signatures but as we use these structures for top-level name-spaces we have to have tables for these. *) abstype signatures = Signatures of { name: string, tab: univTable, minTypes: int, maxTypes: int } with fun sigName (Signatures {name,...}) = name; fun sigTab (Signatures {tab,...}) = tab; fun sigMinTypes (Signatures {minTypes,...}) = minTypes; fun sigMaxTypes (Signatures {maxTypes,...}) = maxTypes; fun makeSignatures name = Signatures { name = name, tab = makeUnivTable(), minTypes = 0, maxTypes = 0 }; (* Used when we want to give a name to a signature. *) fun makeCopy (name, copy, minTypes, maxTypes) = Signatures { name = name, tab = univFreeze(sigTab copy), minTypes = minTypes, maxTypes = maxTypes }; end; (* signatures abstype *) (* Types. *) (* Level at which type is generalisable. *) val generalisable = 9999; (* A type is the union of these different cases. *) datatype types = TypeVar of typeVarForm | TypeConstruction of typeConstructionForm | FunctionType of functionTypeForm | LabelledType of labelledRecForm | OverloadSet of overloadSetForm | BadType | EmptyType and typeConstrs = TypeConstrs of { name: string, arity: int, typeVars: types list, updatable: (* We have a single ref here to minimise the number of refs. *) { equiv: types, constrs: values list, (* List of value constructors. *) equal: bool } possRef, identifier: typeId, letDepth: int (* Added 7/8/00 DCJM. Needed to check for local datatypes. *) } (* Access to a value, structure or functor. *) and valAccess = Global of codetree | Local of { addr: int ref, level: int ref } | Selected of { addr: int, base: structVals } | Formal of int | Overloaded of typeDependent (* Values only. *) (* Structures. *) and structVals = NoStruct | Struct of { name: string, signat: signatures, access: valAccess } (* Values. *) (* The overloaded functions divide up into basically two groups: Those =, <>, print and makestring which are infinitely overloaded and those *, + etc which are overloaded on a limited range of types. *) and typeDependent = Print | PrintSpace | MakeString | MakeStringSpace | InstallPP | Equal | NotEqual | AddOverload | TypeDep and values = Value of { name: string, typeOf: types, access: valAccess, class: valueClass } (* Classes of values. *) and valueClass = SimpleValue | Exception | Constructor of { nullary: bool } withtype typeConstructionForm = { name: string, value: typeConstrs possRef, args: types list } and typeVarForm = { value: types ref, encoding: Word.word } (* A function type takes two types, the argument and the result. *) and functionTypeForm = { arg: types, result: types } (* A fixed labelled record. *) and labelledRecForm = { recList: { name: string, typeof: types } list, frozen: bool, genericInstance: (*typeVarForm*) { value: types ref, encoding: Word.word } list } (* A set of type contructors. This is used only during the compilation process and represents the set of possible types which may occur. It functions in much the same way as a type variable. Because we only allow overloading on monomorphic type constructors such as "int" and "word" we can restrict the set to containing only type constructors rather than general types. This overload set was added for ML 97 because ML 97, unlike ML 90, defaults overloaded operators and constants if unification does not result in a single type being found. The overload set is used in a similar way to a flexible record and will always be pointed at by a type variable so that the set can be replaced by a single type construction if the unification reduces to a single type. *) and overloadSetForm = { typeset: typeConstrs list } (* Destructors, constructors and predicates for types *) val emptyType = EmptyType; val badType = BadType; fun isEmpty EmptyType = true | isEmpty _ = false; fun isBad BadType = true | isBad _ = false; fun makeValueConstr (name, typeOf, nullary, access) : values = Value { name = name, typeOf = typeOf, access = access, class = Constructor { nullary = nullary } }; (* A type variable is implemented as a true variable i.e. it can be assigned a particular type when it is unified. Initially it is set to EmptyType which represents an unset type variable. When it is unified with a type it is set to point to the type it has been unified with. Type variables associated with variables have level set to the nesting level, others have level set to "generalisable". If two type variables are united their levels are set to the lower of the two. If level is not "generalisable" the type variable is not generalisable. This is needed to deal with cases like fn a => let val x = a in x end and fn a => let val x = hd a in x end The level is set to "generalisable" at the end of the block with that level. Actually ``level'' is not actually changed - instead the type variable is assigned to a new variable with the correct level, since only the last variable in a sequence is looked at. ``equality'' is true if this is an equality variable e.g. ''a. ``nonunifiable'' is true for type variables introduced explicitly or type variables in signatures. Such type variables can have their level changed but cannot be unified with other types, with other nonunifiable type variables or with equality variables (unless it is already an equality variable). ``weak'' is true if this is an imperative type variable e.g. '_a *) fun sameTv (a : typeVarForm, b : typeVarForm) : bool = #value a = #value b; (* If the same ref it must be the same *) (* To save space "equality", "nonunifiable" and "weak" are encoded together with the level. *) local open Word infix 8 >> << infix 7 andb infix 6 orb in fun makeTv (t : types, lev, equality, nonunifiable, weak) : typeVarForm = { value = ref t, (* REF HOTSPOT - 400 *) encoding = (fromInt lev << 0w3) orb (if equality then 0w4 else 0w0) orb (if nonunifiable then 0w2 else 0w0) orb (if weak then 0w1 else 0w0) }; fun tvSetValue ({ value, ...} : typeVarForm, t : types) = value := t; fun tvValue ({value = ref v, ...} : typeVarForm) : types = v; fun tvLevel ({encoding, ...} : typeVarForm) : int = Word.toInt(encoding >> 0w3); fun tvEquality ({encoding, ...} : typeVarForm) = encoding andb 0w4 <> 0w0; fun tvNonUnifiable ({encoding, ...} : typeVarForm) = encoding andb 0w2 <> 0w0; fun tvWeak ({encoding, ...} : typeVarForm) = encoding andb 0w1 <> 0w0; end; (* Type constructors are identifiers which take zero or more types and yield a type as result. Their main property is that two type constructors can be unified iff they are the same constructor. We use a "struct" so that we can test for equivalence, and so we have a "nil" value for Unset type identifiers. In this case we will have a list of constructors for the type. Another use for constructors is for aliasing types. In this case "typeVars" points to a list of type variables which are used in the "equivalent" type. ``equality'' is a flag indicating if the values can be tested for equality. *) fun tcName (TypeConstrs {name,...} : typeConstrs) = name; fun tcArity (TypeConstrs {arity,...} : typeConstrs) = arity; fun tcTypeVars (TypeConstrs {typeVars,...} : typeConstrs) = typeVars; fun tcIdentifier (TypeConstrs {identifier,...} : typeConstrs) = identifier; local fun getUpdatable (TypeConstrs {updatable,...} : typeConstrs) = pling updatable; in val tcEquivalent = #equiv o getUpdatable val tcConstructors = #constrs o getUpdatable val tcEquality = #equal o getUpdatable; fun tcSetEquivalent (TypeConstrs {updatable,...}, t) = let val v = pling updatable in updatePR(updatable, { equiv = t, constrs = #constrs v, equal = #equal v}) end fun tcSetConstructors (TypeConstrs {updatable,...}, constrs) = let val v = pling updatable in updatePR(updatable, { equiv = #equiv v, constrs = constrs, equal = #equal v}) end fun tcSetEquality (TypeConstrs {updatable,...}, eq) = let val v = pling updatable in updatePR(updatable, { equiv = #equiv v, constrs = #constrs v, equal = eq}) end end fun tcLetDepth (TypeConstrs {letDepth,...} : typeConstrs) = letDepth; fun makeTypeConstrs (name, typeVars, equivalent, uid, equ, depth) = TypeConstrs { name = name, arity = length typeVars, typeVars = typeVars, updatable = VariableRef (ref (* REF HOTSPOT - 690 refs here. *) { equiv = equivalent, constrs = [], equal = equ }), identifier = uid, letDepth = depth }; fun makeFrozenTypeConstrs (name, typeVars, equivalent, uid, equ, depth) = TypeConstrs { name = name, arity = length typeVars, typeVars = typeVars, updatable = FrozenRef { equiv = equivalent, constrs = [], equal = equ }, identifier = uid, letDepth = depth }; fun baseType name eq = makeFrozenTypeConstrs (name, [], EmptyType, makeFreeId (), eq, 0); val boolType = makeTypeConstrs ("bool", [], EmptyType, makeFreeId (), true, 0); val intType = baseType "int" true; val charType = baseType "char" true; val stringType = baseType "string" true; val wordType = baseType "word" true; val realType = baseType "real" false; (* Not an eqtype in ML97. *) val exnType = baseType "exn" false; (* The unit type is equivalent to the empty record. *) val unitType = makeFrozenTypeConstrs ("unit", [], LabelledType {recList = [], frozen = true, genericInstance = []}, makeFreeId (), true, 0); val listType = makeTypeConstrs ("list", [TypeVar (makeTv (EmptyType, generalisable, false, false, false))], EmptyType, makeFreeId (), true, 0); val refType = makeTypeConstrs ("ref", [TypeVar (makeTv (EmptyType, generalisable, false, false, false))], EmptyType, makeFreeId (), true, 0); val undefType = makeFrozenTypeConstrs ("undefined", [], EmptyType, unsetId, false, 0); (* Infix status. *) datatype fixStatus = Infix of int | InfixR of int | Nonfix; fun isGlobal (Global _) = true | isGlobal _ = false; fun isLocal (Local _) = true | isLocal _ = false; fun isSelected (Selected _) = true | isSelected _ = false; fun isFormal (Formal _) = true | isFormal _ = false; fun vaGlobal (Global x) = x | vaGlobal _ = raise Match; fun vaLocal (Local x) = x | vaLocal _ = raise Match; fun vaSelected (Selected x) = x | vaSelected _ = raise Match; fun vaFormal (Formal x) = x | vaFormal _ = raise Match; val makeGlobal = Global; val makeFormal = Formal; fun makeLocal () = Local { addr = ref 0, level = ref 0 }; fun makeSelected (addr, base) = Selected { addr = addr, base = base }; fun makeStruct (name, signat, access) = Struct { name = name, signat = signat, access = access }; val undefinedStruct = NoStruct; fun isUndefinedStruct NoStruct = true | isUndefinedStruct _ = false; fun structName NoStruct = "" | structName (Struct {name,...}) = name; fun structAccess NoStruct = raise Match | structAccess (Struct {access,...}) = access; (* Return the signature. *) fun structSignat NoStruct = makeSignatures "" (* only if an error *) | structSignat (Struct {signat,...}) = signat; (* Global structure *) fun makeGlobalStruct (name, signat, code) = makeStruct (name, makeCopy("", signat, sigMinTypes signat, sigMaxTypes signat), makeGlobal code); (* This is used for the top-level name space so must be mutable. *) fun makeEmptyGlobal name = makeStruct (name, makeSignatures "", makeGlobal CodeZero); (* Local structure. *) fun makeLocalStruct (name, signat) = makeStruct (name, signat, makeLocal ()); (* Structure in a local structure or a functor argument. *) fun makeSelectedStruct (selected, base) = ( case structAccess selected of Formal sel => makeStruct (structName selected, structSignat selected, makeSelected (sel, base)) | _ => selected ); fun makeFormalStruct (name, signat, addr) = makeStruct (name, signat, makeFormal addr); (* Values. *) fun makeGlobalV (name, typeOf, code) : values = Value{ name = name, typeOf = typeOf, access = Global code, class = SimpleValue }; fun makeLocalV (name, typeOf, addr, level) : values = Value{ name = name, typeOf = typeOf, access = Local {addr = addr, level = level}, class = SimpleValue }; fun makeFormalV (name, typeOf, addr) : values = Value{ name = name, typeOf = typeOf, access = Formal addr, class = SimpleValue }; fun makeFormalEx (name, typeOf, addr) : values = Value{ name = name, typeOf = typeOf, access = Formal addr, class = Exception }; fun makeOverloaded (name, typeOf, operation) : values = Value{ name = name, typeOf = typeOf, access = Overloaded operation, class = SimpleValue}; val undefinedValue = makeGlobalV("", BadType, CodeZero); fun isUndefinedValue(Value{name = "", ...}) = true | isUndefinedValue _ = false fun valName (Value{name, ...}) = name fun valTypeOf (Value{typeOf, ...}) = typeOf fun isConstructor (Value{class=Constructor _, ...}) = true | isConstructor (Value{class=Exception, ...}) = true | isConstructor _ = false; fun isValueConstructor (Value{class=Constructor _, ...}) = true | isValueConstructor _ = false; (* Functor value. *) abstype functors = NoFunctor | Functor of { name: string, arg: structVals, result: signatures, access: valAccess } with fun makeFunctor (name, arg, result, access) = Functor { name = name, arg = arg, result = result, access = access }; val undefinedFunctor = NoFunctor; fun isUndefinedFunctor NoFunctor = true | isUndefinedFunctor _ = false; fun functorName NoFunctor = raise Match | functorName (Functor {name,...}) = name; fun functorArg NoFunctor = raise Match | functorArg (Functor {arg,...}) = arg; fun functorResult NoFunctor = raise Match | functorResult (Functor {result,...}) = result; fun functorAccess NoFunctor = raise Match | functorAccess (Functor {access,...}) = access; end; (* functors abstype *) val valueVar: values tag = tag(); val typeConstrVar: typeConstrs tag = tag(); val fixVar: fixStatus tag = tag(); val structVar: structVals tag = tag(); val signatureVar: signatures tag = tag(); val functorVar: functors tag = tag(); fun makeLook (t:'a tag) table = fn n => univLookup (table, t, n); fun makeEnter (t:'a tag) table = fn (n, v) => univEnter (table, t, n, v); datatype env = Env of { lookupVal: string -> values option, lookupType: string -> typeConstrs option, lookupFix: string -> fixStatus option, lookupStruct: string -> structVals option, lookupSig: string -> signatures option, lookupFunct: string -> functors option, enterVal: string * values -> unit, enterType: string * typeConstrs -> unit, enterFix: string * fixStatus -> unit, enterStruct: string * structVals -> unit, enterSig: string * signatures -> unit, enterFunct: string * functors -> unit }; (* This creates functions for entering and looking up names. *) fun makeEnv s = let val tab = sigTab s; in Env { lookupVal = makeLook valueVar tab, lookupType = makeLook typeConstrVar tab, lookupFix = makeLook fixVar tab, lookupStruct = makeLook structVar tab, lookupSig = makeLook signatureVar tab, lookupFunct = makeLook functorVar tab, enterVal = makeEnter valueVar tab, enterType = makeEnter typeConstrVar tab, enterFix = makeEnter fixVar tab, enterStruct = makeEnter structVar tab, enterSig = makeEnter signatureVar tab, enterFunct = makeEnter functorVar tab } end; end (* STRUCTVALS *); polyml.5.2.1/mlsource/MLCompiler/SYM_SET.ML0000644000175000017500000002655310313043337017255 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* Title: Symbols Sets. Author: Dave Matthews, Cambridge University Computer Laboratory Copyright Cambridge University 1985 *) functor SYM_SET () : (*****************************************************************************) (* SYMSET export signature *) (*****************************************************************************) sig type symset; type sys; val inside: sys * symset -> bool; val ++ :symset * symset -> symset; val abortParse: symset; val ident: symset; val abstypeSy: symset; val andSy: symset; val andalsoSy: symset; val asSy: symset; val caseSy: symset; val datatypeSy: symset; val doSy: symset; val elseSy: symset; val endSy: symset; val exceptionSy: symset; val fnSy: symset; val funSy: symset; val handleSy: symset; val ifSy: symset; val inSy: symset; val infixSy: symset; val infixrSy: symset; val letSy: symset; val localSy: symset; val nonfixSy: symset; val ofSy: symset; val opSy: symset; val openSy: symset; val orelseSy: symset; val raiseSy: symset; val recSy: symset; val thenSy: symset; val typeSy: symset; val valSy: symset; val withSy: symset; val whileSy: symset; val leftParen: symset; val rightParen: symset; val leftBrack: symset; val rightBrack: symset; val comma: symset; val colon: symset; val semicolon: symset; val thickArrow: symset; val verticalBar: symset; val equalsSign: symset; val underline: symset; val typeIdent: symset; val stringConst: symset; val integerConst: symset; val asterisk: symset; val arrow: symset; val realConst: symset; val wordConst: symset; val charConst: symset; val leftCurly: symset; val rightCurly: symset; val dot: symset; val threeDots: symset; val colonGt: symset; val hashSign: symset; val structureSy: symset; val signatureSy: symset; val structSy: symset; val sigSy: symset; val sharingSy: symset; val functorSy: symset; val withtypeSy: symset; val eqtypeSy: symset; val includeSy: symset; val whereSy: symset; val othersy: symset; val empty: symset; val variableSys: symset; val constructorSys: symset; val startAtomicSys: symset; val startPatternSys: symset; val startMatchSys: symset; val startExpressionSys: symset; val startDecSys: symset; val declarableVarSys: symset; val startTypeSys: symset; val startSigSys: symset; val startTopSys: symset; end (* SYMSET export signature *) = let (*****************************************************************************) (* SYMBOLS *) (*****************************************************************************) structure SYMBOLS : sig type sys; val down: sys -> int; val abortParse: sys; val ident: sys; val abstypeSy: sys; val andSy: sys; val andalsoSy: sys; val asSy: sys; val caseSy: sys; val datatypeSy: sys; val doSy: sys; val elseSy: sys; val endSy: sys; val exceptionSy: sys; val fnSy: sys; val funSy: sys; val handleSy: sys; val ifSy: sys; val inSy: sys; val infixSy: sys; val infixrSy: sys; val letSy: sys; val localSy: sys; val nonfixSy: sys; val ofSy: sys; val opSy: sys; val openSy: sys; val orelseSy: sys; val raiseSy: sys; val recSy: sys; val thenSy: sys; val typeSy: sys; val valSy: sys; val withSy: sys; val whileSy: sys; val leftParen: sys; val rightParen: sys; val leftBrack: sys; val rightBrack: sys; val comma: sys; val colon: sys; val semicolon: sys; val thickArrow: sys; val verticalBar: sys; val equalsSign: sys; val underline: sys; val typeIdent: sys; val stringConst: sys; val integerConst: sys; val asterisk: sys; val arrow: sys; val realConst: sys; val wordConst: sys; val charConst: sys; val leftCurly: sys; val rightCurly: sys; val dot: sys; val threeDots: sys; val colonGt: sys; val hashSign: sys; val structureSy: sys; val signatureSy: sys; val structSy: sys; val sigSy: sys; val sharingSy: sys; val functorSy: sys; val withtypeSy: sys; val eqtypeSy: sys; val includeSy: sys; val whereSy: sys; val othersy: sys; val maxsym: sys; end = Symbols (*****************************************************************************) (* SYMS *) (*****************************************************************************) structure SYMS : sig type set; val empty: set; val plus: set * set -> set; val mk: int -> set; val inside: int * set -> bool; end = Syms in (*****************************************************************************) (* SYMSET functor body *) (*****************************************************************************) struct type sys = SYMBOLS.sys; val down = SYMBOLS.down; type symset = SYMS.set; val empty = SYMS.empty; fun mk sym = SYMS.mk (down sym); infix 5 inside; infix 6 ++; fun sym inside s = SYMS.inside (down sym,s); (* fun a ++ b = SYMS.plus (a,b); *) val op ++ = SYMS.plus; (* redefined to reduce garbage SPF 26/9/94 *) val abortParse = mk SYMBOLS.abortParse; val ident = mk SYMBOLS.ident; val abstypeSy = mk SYMBOLS.abstypeSy; val andSy = mk SYMBOLS.andSy; val andalsoSy = mk SYMBOLS.andalsoSy; val asSy = mk SYMBOLS.asSy; val caseSy = mk SYMBOLS.caseSy; val datatypeSy = mk SYMBOLS.datatypeSy; val doSy = mk SYMBOLS.doSy; val elseSy = mk SYMBOLS.elseSy; val endSy = mk SYMBOLS.endSy; val exceptionSy = mk SYMBOLS.exceptionSy; val fnSy = mk SYMBOLS.fnSy; val funSy = mk SYMBOLS.funSy; val handleSy = mk SYMBOLS.handleSy; val ifSy = mk SYMBOLS.ifSy; val inSy = mk SYMBOLS.inSy; val infixSy = mk SYMBOLS.infixSy; val infixrSy = mk SYMBOLS.infixrSy; val letSy = mk SYMBOLS.letSy; val localSy = mk SYMBOLS.localSy; val nonfixSy = mk SYMBOLS.nonfixSy; val ofSy = mk SYMBOLS.ofSy; val opSy = mk SYMBOLS.opSy; val openSy = mk SYMBOLS.openSy; val orelseSy = mk SYMBOLS.orelseSy; val raiseSy = mk SYMBOLS.raiseSy; val recSy = mk SYMBOLS.recSy; val thenSy = mk SYMBOLS.thenSy; val typeSy = mk SYMBOLS.typeSy; val valSy = mk SYMBOLS.valSy; val withSy = mk SYMBOLS.withSy; val whileSy = mk SYMBOLS.whileSy; val structureSy = mk SYMBOLS.structureSy; val signatureSy = mk SYMBOLS.signatureSy; val structSy = mk SYMBOLS.structSy; val sigSy = mk SYMBOLS.sigSy; val sharingSy = mk SYMBOLS.sharingSy; val functorSy = mk SYMBOLS.functorSy; val withtypeSy = mk SYMBOLS.withtypeSy; val eqtypeSy = mk SYMBOLS.eqtypeSy; val includeSy = mk SYMBOLS.includeSy; val whereSy = mk SYMBOLS.whereSy; val leftParen = mk SYMBOLS.leftParen; val rightParen = mk SYMBOLS.rightParen; val leftBrack = mk SYMBOLS.leftBrack; val rightBrack = mk SYMBOLS.rightBrack; val comma = mk SYMBOLS.comma; val colon = mk SYMBOLS.colon; val semicolon = mk SYMBOLS.semicolon; val verticalBar = mk SYMBOLS.verticalBar; val equalsSign = mk SYMBOLS.equalsSign; val thickArrow = mk SYMBOLS.thickArrow; val underline = mk SYMBOLS.underline; val typeIdent = mk SYMBOLS.typeIdent; val stringConst = mk SYMBOLS.stringConst; val integerConst = mk SYMBOLS.integerConst; val realConst = mk SYMBOLS.realConst; val wordConst = mk SYMBOLS.wordConst; val charConst = mk SYMBOLS.charConst; val asterisk = mk SYMBOLS.asterisk; val arrow = mk SYMBOLS.arrow; val leftCurly = mk SYMBOLS.leftCurly; val rightCurly = mk SYMBOLS.rightCurly; val dot = mk SYMBOLS.dot; val threeDots = mk SYMBOLS.threeDots; val colonGt = mk SYMBOLS.colonGt; val hashSign = mk SYMBOLS.hashSign; val othersy = mk SYMBOLS.othersy; (* Collections of symbol sets for various syntactic elements *) (* Symbols which can be declared as identifiers *) val declarableVarSys = ident ++ asterisk; (* Symbols which can be variables *) val variableSys = declarableVarSys ++ equalsSign; (* Symbols which can be constructors *) val constructorSys = declarableVarSys ++ stringConst ++ integerConst ++ realConst ++ wordConst ++ charConst; (* The symbols which can start an atomic expression *) val startAtomicSys = letSy ++ opSy ++ leftBrack ++ leftParen ++ leftCurly ++ variableSys ++ constructorSys ++ hashSign; (* The symbols which can start a pattern, Note: "=" is not among them. *) (* real constants are not allowed in patterns in ML97. We leave them in and sort it out later. *) val startPatternSys = underline ++ declarableVarSys ++ constructorSys ++ leftParen ++ leftBrack ++ leftCurly ++ opSy; (* The symbols which can start a match *) val startMatchSys = startPatternSys; (* The symbols which can start an expression *) val startExpressionSys = raiseSy ++ ifSy ++ whileSy ++ caseSy ++ fnSy ++ startAtomicSys; (* The symbols which can start a declaration *) val startDecSys = valSy ++ typeSy ++ abstypeSy ++ exceptionSy ++ localSy ++ infixSy ++ infixrSy ++ nonfixSy ++ openSy ++ funSy ++ datatypeSy; (* Symbols which can start a type. *) val startTypeSys = typeIdent ++ ident ++ leftParen ++ leftCurly; (* Symbols which can start a signature. Strictly speaking "sharing" cannot start a signature. *) val startSigSys = datatypeSy ++ typeSy ++ eqtypeSy ++ valSy ++ exceptionSy ++ structureSy ++ sharingSy ++ includeSy; val startTopSys = structureSy ++ functorSy ++ signatureSy ++ startDecSys ++ startExpressionSys end (* SYMSET functor body *) end (* structure-level let *); polyml.5.2.1/mlsource/MLCompiler/Skips.ML0000644000175000017500000000164110313043337017152 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure Skips = SKIPS_ ( structure SYMBOLS = Symbols structure LEX = Lex structure SYMSET = SymSet ); polyml.5.2.1/mlsource/MLCompiler/StructVals.ML0000644000175000017500000000175610313043337020202 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure StructVals = STRUCT_VALS ( structure CODETREE = CodeTree structure MISC = Misc structure UNIVERSAL = Universal structure UNIVERSALTABLE = UniversalTable ); polyml.5.2.1/mlsource/MLCompiler/Structures.ML0000644000175000017500000000251110767671763020270 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure Structures = STRUCTURES_ ( structure LEX = Lex structure CODETREE = CodeTree structure STRUCTVALS = StructVals structure VALUEOPS = ValueOps structure TYPETREE = TypeTree structure PARSETREE = ParseTree structure UTILITIES = Utilities structure PRETTYPRINTER = PrettyPrinter structure MISC = Misc structure UNIVERSAL = Universal structure UNIVERSALTABLE = UniversalTable structure DEBUG = Debug structure STRETCHARRAY = StretchArray structure DEBUGGER = Debugger ); polyml.5.2.1/mlsource/MLCompiler/SymSet.ML0000644000175000017500000000152410313043337017305 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure SymSet = SYM_SET ( structure SYMBOLS = Symbols ) ; polyml.5.2.1/mlsource/MLCompiler/Symbols.ML0000644000175000017500000002043611003076053017512 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* Title: Lexical symbols for ML compiler. Author: Dave Matthews, Cambridge University Computer Laboratory Copyright Cambridge University 1985 *) structure Symbols : sig type sys; val abortParse: sys; val ident: sys; val abstypeSy: sys; val andSy: sys; val andalsoSy: sys; val asSy: sys; val caseSy: sys; val datatypeSy: sys; val doSy: sys; val elseSy: sys; val endSy: sys; val exceptionSy: sys; val fnSy: sys; val funSy: sys; val handleSy: sys; val ifSy: sys; val inSy: sys; val infixSy: sys; val infixrSy: sys; val letSy: sys; val localSy: sys; val nonfixSy: sys; val ofSy: sys; val opSy: sys; val openSy: sys; val orelseSy: sys; val raiseSy: sys; val recSy: sys; val thenSy: sys; val typeSy: sys; val valSy: sys; val withSy: sys; val whileSy: sys; val leftParen: sys; val rightParen: sys; val leftBrack: sys; val rightBrack: sys; val comma: sys; val colon: sys; val semicolon: sys; val thickArrow: sys; val verticalBar: sys; val equalsSign: sys; val underline: sys; val typeIdent: sys; val stringConst: sys; val integerConst: sys; val asterisk: sys; val arrow: sys; val realConst: sys; val leftCurly: sys; val rightCurly: sys; val dot: sys; val threeDots: sys; val colonGt: sys; val hashSign: sys; val structureSy: sys; val signatureSy: sys; val structSy: sys; val sigSy: sys; val sharingSy: sys; val functorSy: sys; val withtypeSy: sys; val eqtypeSy: sys; val includeSy: sys; val whereSy: sys; val wordConst: sys; val charConst: sys; val othersy: sys; val maxsym: sys; val repr: sys -> string; val lookup: string -> sys; val eq: sys * sys -> bool; val neq: sys * sys -> bool; val down: sys -> int; end = struct (* The symbol declarations for the compiler *) abstype sys = sys of int with val abortParse = sys 0; val ident = sys 1; (* Reserved words *) val abstypeSy = sys 2; val andSy = sys 3; val andalsoSy = sys 4; val asSy = sys 5; val caseSy = sys 6; val datatypeSy = sys 7; val doSy = sys 8; val elseSy = sys 9; val endSy = sys 10; val exceptionSy = sys 11; val fnSy = sys 12; val funSy = sys 13; val handleSy = sys 14; val ifSy = sys 15; val inSy = sys 16; val infixSy = sys 17; val infixrSy = sys 18; val letSy = sys 19; val localSy = sys 20; val nonfixSy = sys 21; val ofSy = sys 22; val opSy = sys 23; val openSy = sys 24; val orelseSy = sys 25; val raiseSy = sys 26; val recSy = sys 27; val thenSy = sys 28; val typeSy = sys 29; val valSy = sys 30; val withSy = sys 31; val whileSy = sys 32; val structureSy = sys 33; val signatureSy = sys 34; val structSy = sys 35; val sigSy = sys 36; val sharingSy = sys 37; val functorSy = sys 38; val withtypeSy = sys 39; val eqtypeSy = sys 40; val includeSy = sys 41; val whereSy = sys 42; (* Reserved operators *) val hashSign = sys 43; val verticalBar = sys 44; val equalsSign = sys 45; val thickArrow = sys 46; val colon = sys 47; val asterisk = sys 48; val arrow = sys 49; val colonGt = sys 50; (* Special symbols *) val underline = sys 51; val leftParen = sys 52; val rightParen = sys 53; val leftBrack = sys 54; val rightBrack = sys 55; val comma = sys 56; val semicolon = sys 57; val leftCurly = sys 58; val rightCurly = sys 59; val dot = sys 60; val threeDots = sys 61; (* Others *) val typeIdent = sys 62; val stringConst = sys 63; val integerConst = sys 64; val realConst = sys 65; val wordConst = sys 66; val charConst = sys 67; val othersy = sys 68; val maxsym = othersy; fun down (sys n) = n; fun succ (sys n) = sys (n+1); infix 7 eq neq leq; fun a eq b = (down a = down b); fun a leq b = (down a <= down b); fun a neq b = (down a <> down b); open Vector; infix 8 sub; val resw = fromList ["\^G", "", "abstype", "and", "andalso", "as", "case", "datatype", "do", "else", "end", "exception", "fn", "fun", "handle", "if", "in", "infix", "infixr", "let", "local", "nonfix", "of", "op", "open", "orelse", "raise", "rec", "then", "type", "val", "with", "while", "structure", "signature", "struct", "sig", "sharing", "functor", "withtype", "eqtype", "include", "where", "#", "|", "=", "=>", ":", "*", "->", ":>", "_", "(", ")", "[", "]", ",", ";", "{", "}", ".", "...", "", "", "", "", "", "", "unknown symbol"]; fun repr sym = resw sub (down sym); local open Boot.HashTable; open Boot.Misc; (* Make table sparse to minimise collisions. SPF 11/5/95 *) val table: sys hash = hashMake (4 * down maxsym); (* Enter each reserved word in the hash table *) val U : unit = forsucc succ (op leq) abstypeSy colonGt (fn sym => hashSet (table, repr sym, sym)); in (* Returns the symbol if it is in the table else ident *) fun lookup str = getOpt(hashSub (table, str), ident); end; end (* with *); end (* Symbols *); polyml.5.2.1/mlsource/MLCompiler/Syms.ML0000644000175000017500000000161210313043337017012 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* ... structure Syms = POWER_SET(val maxElement = Symbols.down Symbols.maxsym); ... *) structure Syms = IntSet; polyml.5.2.1/mlsource/MLCompiler/TYPE_TREE.ML0000644000175000017500000037023111003076053017463 0ustar daviddavid(* Original Poly version: Title: Operations on type structures. Author: Dave Matthews, Cambridge University Computer Laboratory Copyright Cambridge University 1985 3/6/94 SPF fixed bug in allowGeneralisation 6/6/94 SPF fixed bug in match ML translation and other changes: Copyright (c) 2000 Cambridge University Technical Services Limited Further development: Copyright (c) 2000-8 David C.J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) functor TYPE_TREE ( (*****************************************************************************) (* SYSTEM *) (*****************************************************************************) structure ADDRESS : sig val wordEq: 'a * 'a -> bool end; (*****************************************************************************) (* DEBUG *) (*****************************************************************************) structure DEBUG : sig val ml90Tag: bool Universal.tag val errorDepthTag: int Universal.tag val getParameter : 'a Universal.tag -> Universal.universal list -> 'a end; (*****************************************************************************) (* LEX *) (*****************************************************************************) structure LEX : sig type lexan; type prettyPrinter; val errorProc: lexan * int * (prettyPrinter -> unit) -> unit; val errorMessage: lexan * int * string -> unit; val warningMessage: lexan * int * string -> unit; val lineno: lexan -> int; val debugParams: lexan -> Universal.universal list end; (*****************************************************************************) (* STRUCTVALS *) (*****************************************************************************) structure STRUCTVALS : sig type values; type typeConstrs; type typeId; datatype 'a possRef = FrozenRef of 'a | VariableRef of 'a ref val pling: 'a possRef -> 'a val updatePR: 'a possRef * 'a -> unit (* A type is the union of these different cases. *) type typeVarForm; datatype types = TypeVar of typeVarForm | TypeConstruction of (* typeConstructionForm *) { name: string, value: typeConstrs possRef, args: types list } | FunctionType of (* functionTypeForm *) { arg: types, result: types } | LabelledType of (* labelledRecForm *) { recList: { name: string, typeof: types } list, frozen: bool, genericInstance: typeVarForm list } | OverloadSet of (* overloadSetForm *) { typeset: typeConstrs list } | BadType | EmptyType ; val valName: values -> string val valTypeOf: values -> types val isUnsetId: typeId -> bool; val isBoundId: typeId -> bool; val isVariableId: typeId -> bool; val sameTypeId : typeId * typeId -> bool; val unifyTypeIds: typeId * typeId -> bool; val makeFreeId: unit -> typeId; val tcName: typeConstrs -> string; val tcArity: typeConstrs -> int; val tcTypeVars: typeConstrs -> types list; val tcEquivalent: typeConstrs -> types; val tcSetEquivalent: typeConstrs * types -> unit; val tcConstructors: typeConstrs -> values list; val tcEquality: typeConstrs -> bool; val tcSetEquality: typeConstrs * bool -> unit; val tcIdentifier: typeConstrs -> typeId; val tcLetDepth: typeConstrs -> int; val makeTypeConstrs: string * types list * types * typeId * bool * int-> typeConstrs; val makeFrozenTypeConstrs: string * types list * types * typeId * bool * int-> typeConstrs; val emptyType: types; val tvLevel: typeVarForm -> int; val tvEquality: typeVarForm -> bool; val tvNonUnifiable: typeVarForm -> bool; val tvWeak: typeVarForm -> bool; val tvValue: typeVarForm -> types; val tvSetValue: typeVarForm * types -> unit; val sameTv: typeVarForm * typeVarForm -> bool; val makeTv: types * int * bool * bool * bool -> typeVarForm; (* Standard type constructors. *) val generalisable: int; val boolType: typeConstrs; val intType: typeConstrs; val charType: typeConstrs; val stringType: typeConstrs; val wordType: typeConstrs; val realType: typeConstrs; val unitType: typeConstrs; val exnType: typeConstrs; val undefType: typeConstrs; end; (*****************************************************************************) (* UTILITIES *) (*****************************************************************************) structure UTILITIES : sig val mapTable: ('a * 'a -> bool) -> {enter: 'a * 'b -> unit, lookup: 'a -> 'b option} val splitString: string -> { first:string, second:string } end; (*****************************************************************************) (* PRETTYPRINTER *) (*****************************************************************************) structure PRETTYPRINTER : sig type prettyPrinter val ppAddString : prettyPrinter -> string -> unit val ppBeginBlock : prettyPrinter -> int * bool -> unit val ppEndBlock : prettyPrinter -> unit -> unit val ppBreak : prettyPrinter -> int * int -> unit end; (*****************************************************************************) (* MISC *) (*****************************************************************************) structure MISC : sig exception InternalError of string; val lookupDefault : ('a -> 'b option) -> ('a -> 'b option) -> 'a -> 'b option end; (*****************************************************************************) (* PRINTTABLE *) (*****************************************************************************) structure PRINTTABLE : sig type typeConstrs type codetree val getOverload: string * typeConstrs * (unit->codetree) -> codetree end; (*****************************************************************************) (* CODETREE *) (*****************************************************************************) structure CODETREE : sig type codetree val CodeNil: codetree; val isCodeNil: codetree -> bool; end; (*****************************************************************************) (* TYPETREE sharing constraints *) (*****************************************************************************) sharing type LEX.prettyPrinter = PRETTYPRINTER.prettyPrinter sharing type PRINTTABLE.codetree = CODETREE.codetree sharing type PRINTTABLE.typeConstrs = STRUCTVALS.typeConstrs ) : (*****************************************************************************) (* TYPETREE exports signature *) (*****************************************************************************) sig type types; type values; type typeConstrs; type lexan; type prettyPrinter; type typeId; val mkTypeVar: int * bool * bool * bool -> types; val mkTypeConstruction: string * typeConstrs * types list -> types; val mkProductType: types list -> types; val mkFunctionType: types * types -> types; val mkLabelled: {name: string, typeof: types } list * bool -> types; val mkLabelEntry: string * types -> {name: string, typeof: types }; val mkOverloadSet: typeConstrs list -> types; val sortLabels: {name: string, typeof: types } list * (string -> unit) -> {name: string, typeof: types } list; val entryNumber: string * types -> int; val recordNotFrozen: types -> bool; val recordWidth: types -> int; val makeEquivalent: typeConstrs * types list -> types; val firstArg: types -> types; (* Unify two type variables which would otherwise be non-unifiable. *) val linkTypeVars: types * types -> unit; val setTvarLevel: types * int -> unit; (* Get the constructor list from a type. *) val getConstrList: types -> values list; (* Fill in the values of type variables and make checks. *) val assignTypes: types * (string -> typeConstrs) * lexan * int -> unit; (* Copy a type. *) val copyType: types * (types -> types) * (typeConstrs -> typeConstrs) -> types; (* Print it out prettily *) val display: types * int * prettyPrinter * bool -> unit; (* Print out a type constructor. *) val displayTypeConstrs: typeConstrs * int * prettyPrinter * bool -> unit; (* A list of type variables. *) val displayTypeVariables: types list * int * prettyPrinter * bool -> unit; (* Create an instance of an overloaded type. *) val generaliseOverload: types * typeConstrs list * bool -> types; (* Returns the preferred type constructor from an overload. *) val typeConstrFromOverload: types * bool -> typeConstrs; (* Error message when overloading cannot be resolved. It is put in this module because we want the message to refer to the argument. *) val overloadError: types * string * string * lexan * int -> unit; val genEqualityFunctions: typeConstrs list * (string -> unit) * bool -> unit; (* Checking procedures *) (* Match a candidate to a target type. *) val matchTypes: types * types * (typeId -> typeConstrs option) * lexan * int * (prettyPrinter -> unit) -> unit; (* Unify two type structures to give a unified type. *) val unify: types * types * lexan * int * (prettyPrinter -> unit) -> unit; (* Apply a function to an argument and yield a result type. *) val apply: types * types * lexan * int * (prettyPrinter -> unit) -> types; (* Used to establish sharing constraints between type constructors. *) val linkTypeConstructors: typeConstrs * typeConstrs * (string -> unit) -> unit; (* Used to link a type constructor to a type as the result of a "where type" construction. *) val setWhereType: typeConstrs * typeConstrs * (string -> unit) -> unit; (* Check that a type constructor permits equality. *) val permitsEquality: typeConstrs -> bool; (* Generate new copies of all unbound type variables - this is used on all non-local values or constructors so that, for example, each occurence of "hd", which has type 'a list -> 'a, can be separately bound to types. isExp is false if we are processing a pattern. If we have "ref" as a constructor in a pattern we do not need to introduce imperative type variables. *) val generalise: types * bool -> types; (* Release type variables at this nesting level. *) val allowGeneralisation: types * int * bool * lexan * int * (prettyPrinter -> unit) -> unit; (* Check for a local datatype "escaping". Added for ML97. *) val checkForLocalDatatypes: types * int * (string -> unit) -> unit; (* Check for free type variables. Added for ML97. *) val checkForFreeTypeVariables: string * types * lexan -> unit; val constructorResult: types * types list -> types; val checkWellFormed: types * (string -> unit) -> unit; val findValueConstructor: values -> values; val copyTypeConstr: typeConstrs * (typeId -> bool) * (unit -> typeId) * {enter: typeId * typeConstrs -> unit, lookup: typeId -> typeConstrs option} * (types -> types) * string -> typeConstrs; val setTypeConstr: typeConstrs * (typeConstrs -> typeId) -> unit; val enterTypeConstrs: typeConstrs * typeConstrs * { enter: typeId * typeConstrs -> unit, lookup: typeId -> typeConstrs option} -> unit; val identical: types * types -> bool; val identicalConstr: typeConstrs * typeConstrs -> bool; val identicalList: types list * types list -> bool; val boolType: types; val intType: types; val charType: types; val stringType: types; val realType: types; val unitType: types; val exnType: types; val wordType: types; (* added 6/12/95 SPF *) val badType: types; (* added SPF 16/4/95 *) val sameTypeVar : types * types -> bool; end (* TYPETREE export signature *) = (*****************************************************************************) (* TYPETREE functor body *) (*****************************************************************************) struct open MISC; open PRETTYPRINTER; open STRUCTVALS; open LEX; open UTILITIES; open CODETREE; open PRINTTABLE; (* added 6/12/95 SPF *) val badType : types = BadType; (* added 16/4/96 SPF *) fun sameTypeVar (TypeVar x, TypeVar y) = sameTv (x, y) | sameTypeVar _ = false; (************* "types" constructors copied here to reduce garbage *********) fun isTypeVar (TypeVar _) = true | isTypeVar _ = false; fun isTypeConstruction (TypeConstruction _) = true | isTypeConstruction _ = false; fun isFunctionType (FunctionType _) = true | isFunctionType _ = false; fun isLabelled (LabelledType _) = true | isLabelled _ = false; fun isEmpty EmptyType = true | isEmpty _ = false; fun isBad BadType = true | isBad _ = false; val emptyType = EmptyType; type typeConstructionForm = { name: string, value: typeConstrs ref, args: types list } (* A function type takes two types, the argument and the result. *) and functionTypeForm = { arg: types, result: types } (* A fixed labelled record. *) and labelledRecForm = { recList: {name: string, typeof: types} list, frozen: bool }; fun typesTypeVar (TypeVar x) = x | typesTypeVar _ = raise Match; fun typesTypeConstruction (TypeConstruction x) = x | typesTypeConstruction _ = raise Match; fun typesFunctionType (FunctionType x) = x | typesFunctionType _ = raise Match; fun typesLabelled (LabelledType x) = x | typesLabelled _ = raise Match; (* A type construction is the application of a type constructor to a sequence of types to yield a type. A construction may have a nil list if it is a single type identifier such as ``int''. *) (* When a type constructor is encountered in the first pass this entry is put in. Subsequently a type constructor entry will be assigned to it so that the types can be checked. *) (*************) fun mkTypeVar (level, equality, nonunifiable, weak) = TypeVar (makeTv (emptyType, level, equality, nonunifiable, weak)); fun mkTypeConstruction (name, typc, args) = let (* If we're building a type construction from a known constructor set it now and freeze it. If we need to find it in a later pass make it a real ref. The idea is to avoid having unnecessary mutable objects. *) (* This is the ref hotspot in this module but has been reduced considerably now we copy types before entering them in signatures. It may be possible to reduce it further by copying datatype constructors. *) val typeCons = if isUnsetId (tcIdentifier typc) then VariableRef (ref typc) else FrozenRef typc in TypeConstruction {name = name, value = typeCons, args = args} end; local (* Turn a tuple into a record of the form {1=.., 2=... }*) fun maptoRecord ([], _) = [] | maptoRecord (H::T, i) = {name=Int.toString i, typeof=H} :: maptoRecord (T,i+1) in fun mkProductType (typel: types list) = LabelledType {recList = maptoRecord (typel, 1), frozen = true, genericInstance = []} end fun mkFunctionType (arg, result) = FunctionType {arg = arg, result = result}; fun mkOverloadSet [constr] = (* If there is just a single constructor in the set we make a type construction from it. *) mkTypeConstruction(tcName constr, constr, nil) | mkOverloadSet constrs = let (* Make a type variable and point this at the overload set so we can narrow down the overloading. *) val var = mkTypeVar (generalisable, false, false, false); val set = OverloadSet {typeset=constrs}; in tvSetValue (typesTypeVar var, set); var end fun mkLabelled (l, frozen) = let val lab = LabelledType {recList = l, frozen = frozen, genericInstance = []}; in if frozen then lab else let (* Use a type variable so that the record can be expanded. *) val var = mkTypeVar (generalisable, false, false, false); val U : unit = if isTypeVar var then tvSetValue (typesTypeVar var, lab) else (); in var end end; (* Must remove leading zeros because the labels are compared by string comparison. *) fun mkLabelEntry (name, t) = let fun stripZeros s = if size s <= 1 orelse String.str(String.sub(s, 0)) <> "0" then s else stripZeros (String.substring(s, 1, size s-1)); in {name = stripZeros name, typeof = t} end; (* Type identifiers bound to standard type constructors. *) val unitType = mkTypeConstruction ("unit", unitType, []); val intType = mkTypeConstruction ("int", intType, []); val realType = mkTypeConstruction ("real", realType, []); val charType = mkTypeConstruction ("char", charType, []); val stringType = mkTypeConstruction ("string", stringType, []); val boolType = mkTypeConstruction ("bool", boolType, []); val exnType = mkTypeConstruction ("exn", exnType, []); val wordType = mkTypeConstruction ("word", wordType, []); fun isUndefined cons = isUnsetId (tcIdentifier cons); (* Similar to alphabetic ordering except that shorter labels come before longer ones. This has the advantage that numerical labels are compared by their numerical order i.e. 1 < 2 < 10 whereas alphabetic ordering puts "1" < "10" < "2". *) fun compareLabels (a : string, b : string) : int = if size a = size b then if a = b then 0 else if a < b then ~1 else 1 else if size a < size b then ~1 else 1; (* Chains down a list of type variables returning the type they are bound to. As a side-effect it also points all the type variables at this type to reduce the need for future chaining and to free unused type variables. Normally a type variable points to at most one other, which then points to "empty". However if we have unified two type variables by pointing one at the other, there may be type variables which pointed to the first and which cannot be found and redirected at the second until they themselves are examined. *) (* rewritten using pattern-matching SPF 17/11/94 *) fun eventual (t as (TypeVar tv)) : types = let (* Note - don't change the level/copy information - the only type variable with this correct is the one at the end of the list. *) val oldVal = tvValue tv val newVal = eventual oldVal; (* Search that *) in (* Update the type variable to point to the last in the chain. Note: We don't do this if the value hasn't changed. It would seem that doing so ought to be perfectly harmless but it results in large number of expensive assignments to database variables. *) if ADDRESS.wordEq(oldVal, newVal) then () else tvSetValue (tv, newVal); (* Put it on *) case newVal of EmptyType => (* Not bound to anything - return the type variable *) t | LabelledType {frozen = false, recList = instanceList, genericInstance = genericInstance as generic :: _} => (* Flexible record type. We need to add any fields which have been added to the generic since we extracted this instance. In particular the generic might have been frozen. *) let fun createNewField{name, typeof = TypeVar gtv} = ( (*print(concat[ "createNewField:", "Generic - equality=", Bool.toString(tvEquality gtv), " level=", Int.toString(tvLevel gtv), " weakness=", Bool.toString(tvWeak gtv), " Instance - equality=", Bool.toString(tvEquality tv), " level=", Int.toString(tvLevel tv), " weakness=", Bool.toString(tvWeak tv), "\n" ]);*) { name = name, (* The new type variable has to be created with the same properties as if we had first generalised it from the generic and then unified with this instance. The level is inherited from the instance since the generic will always have level = generalisable. Nonunifiable must be false. *) typeof = mkTypeVar (tvLevel tv, tvEquality tv orelse tvEquality gtv, false, tvWeak gtv orelse tvWeak tv) } ) | createNewField _ = raise InternalError "createNewField: New field is not a type var" fun addToInstance([], []) = [] | addToInstance(generic :: geRest, []) = createNewField generic :: addToInstance(geRest, []) | addToInstance([], _) = raise InternalError "addToInstance: Entry in instance but not in generic" | addToInstance((generic as {name=gName, ...}):: geRest, inst as instance :: iRest) = let val order = compareLabels (gName, #name instance); in if order = 0 (* Equal *) then instance :: addToInstance(geRest, iRest) else if order < 0 (* generic name < instance name *) then createNewField generic :: addToInstance(geRest, inst) else raise InternalError "addToInstance: Entry in instance but not in generic" end val (newList, nowFrozen) = case tvValue generic of LabelledType { recList, frozen, ... } => (addToInstance(recList, instanceList), frozen) | _ => raise InternalError "unifyRecords: Not a labelled record" val newRecord = LabelledType {frozen = nowFrozen, genericInstance = genericInstance, recList = newList} in tvSetValue(tv, newRecord); if nowFrozen then newRecord else t end | LabelledType {frozen = false, ...} => t (* Flexible record with no generic instances - return the variable. *) | OverloadSet _ => (* Return the set of types. *) t | _ => newVal (* Return the type it is bound to *) end | eventual t (* not a type variable *) = t; (* Apply a function to every element of a type. *) (* rewritten using pattern-matching SPF 17/11/94 *) fun foldType f = let fun foldT typ v = let val t = eventual typ; val res = f t v; (* Process this entry. *) in case t of TypeVar tv => foldT (tvValue tv) res | TypeConstruction {args, ...} => (* Then process the arguments. *) List.foldr (fn (t, v) => foldT t v) res args | FunctionType {arg, result} => foldT arg (foldT result res) | LabelledType {recList,...} => List.foldr (fn ({ name, typeof }, v) => foldT typeof v) res recList | BadType => res | EmptyType => res | OverloadSet _ => res end; in foldT end; (* Associates type constructors from the environment with type identifiers (NOT type variables) *) fun assignTypes (t : types, lookupType : string -> typeConstrs, lex : lexan, lineno : int) : unit = let fun assTypes (typ : types) () : unit = case typ of TypeConstruction {name: string, value, args: types list} => (* Assign constructor, then the parameters. *) if isUndefined (pling value) then let (* Must check that it has not already been set - We might have unitType from an empty record. *) val constructor : typeConstrs = lookupType name; in updatePR(value, constructor); (* Check that it has the correct arity. *) if not (isUndefined constructor) then let val arity : int = tcArity constructor; val num : int = length args; in if arity <> num then (* Give an error message *) errorMessage (lex, lineno, String.concat["Type constructor (", tcName constructor, ") requires ", Int.toString arity, " type(s) not ", Int.toString num]) else () end else () end else () | _ => () (* not a TypeConstruction *) in (* Apply this to all the types. *) foldType assTypes t () end; (* Checks to see whether a labelled record is in the form of a product i.e. 1=, 2= We only need this for prettyprinting. Zero-length records (i.e. unit) and singleton records are not considered as tuples. *) fun isProductType(LabelledType{recList=recList as _::_::_, frozen=true, ...}) = let fun isRec [] n = true | isRec ({name, typeof} :: l) n = name = Int.toString n andalso isRec l (n+1) in isRec recList 1 end | isProductType _ = false; (* Basic procedure to print a type structure. *) (* prints a block of items *) fun tDisp (t : types, depth : int, pprint: prettyPrinter, typeVarName : typeVarForm -> string, withStructName) : unit = let (* prints a block of items *) fun dispP (t : types, depth : int) : unit = let (* prints a block of items *) fun parenthesise depth t = if depth <= 1 then ppAddString pprint "..." else ( ppBeginBlock pprint (0, false); ppAddString pprint "("; ppBreak pprint (0, 0); dispP (t, depth - 1); ppBreak pprint (0, 0); ppAddString pprint ")"; ppEndBlock pprint () ); (* prints a sequence of items *) fun prettyList [] depth separator = () | prettyList [H] depth separator = let val v = eventual H; in if separator = "*" andalso (isFunctionType v orelse isProductType v) then (* Must bracket the expression *) parenthesise depth v else dispP (v, depth) end | prettyList (H :: T) depth separator = if depth <= 0 then ppAddString pprint "..." else let val v = eventual H; in ppBeginBlock pprint (0, false); if separator = "*" andalso (isFunctionType v orelse isProductType v) then (* Must bracket the expression *) parenthesise depth v else dispP (v, depth); ppBreak pprint (if separator = "," then 0 else 1, 0); ppAddString pprint separator; ppEndBlock pprint (); ppBreak pprint (1, 0); prettyList T (depth - 1) separator end; val typ = eventual t; (* Find the real type structure *) in case typ of TypeVar tyVar => let val tyVal : types = tvValue tyVar; in case tyVal of EmptyType => ppAddString pprint (typeVarName tyVar) | _ => dispP (tyVal, depth) end (* Type construction with no arguments *) | TypeConstruction {args = [], name, value, ...} => let val constrName = if isUndefined(pling value) then name else tcName(pling value) in (* When printing a type constructor we remove any structure name if the option is not set. *) ppAddString pprint (if withStructName then constrName else #second(splitString constrName)) end (* Type construction with one or more arguments - print out as (a, b, c) cons *) | TypeConstruction {args, name, value, ...} => if depth <= 0 then ppAddString pprint "..." else let val argVal = eventual (hd args); val T = tl args; (* Use the name of the type constructor to which this is bound if it is defined. *) val tcName = if isUndefined(pling value) then name else tcName(pling value) in ppBeginBlock pprint (0, false); if not (null T) orelse isProductType argVal orelse isFunctionType argVal then (* parenthesise if there is more than one or if it is a product or function type. *) if depth <= 1 then ppAddString pprint "..." else ( ppBeginBlock pprint (0, false); ppAddString pprint "("; ppBreak pprint (0, 0); prettyList args (depth - 1) ","; ppBreak pprint (0, 0); ppAddString pprint ")"; ppEndBlock pprint () ) else dispP (argVal, depth - 1); ppBreak pprint (1, 0); ppAddString pprint tcName; ppEndBlock pprint () end | FunctionType {arg, result} => if depth <= 0 then ppAddString pprint "..." else (* print out in infix notation *) let val evArg = eventual arg; in ppBeginBlock pprint (0, false); (* If the argument is a function it must be printed as (a-> b)->.. *) if isFunctionType evArg then parenthesise depth evArg else dispP (evArg, depth - 1); ppBreak pprint (1, 0); ppAddString pprint "->"; ppBreak pprint (1, 0); dispP (result, depth - 1); ppEndBlock pprint () end | LabelledType {recList, frozen, ...} => if depth <= 0 then ppAddString pprint "..." else if isProductType typ then (* Print as a product *) ( ppBeginBlock pprint (0, false) (* Print them as t1 * t2 * t3 .... *); prettyList (map (fn {name, typeof} => typeof) recList) depth "*"; ppEndBlock pprint () ) else (* Print as a record *) ( ppBeginBlock pprint (2, false); ppAddString pprint "{"; let fun pRec [] depth = () | pRec ({name, typeof} :: T) depth = if depth <= 0 then ppAddString pprint "..." else ( ppBeginBlock pprint (0, false); ppBeginBlock pprint (0, false); ppAddString pprint (name ^ ":"); ppBreak pprint (1, 0); dispP (typeof, depth - 1); ppEndBlock pprint (); if null T then () else ( ppBreak pprint (0, 0); ppAddString pprint "," ); ppEndBlock pprint (); if null T then () else ( ppBreak pprint (1, 0); pRec T (depth-1) ) ) in pRec recList (depth - 1) end; if not frozen then let val dots = case recList of [] => "..." | _ => ", ..." in ppAddString pprint dots end else (); ppAddString pprint "}"; ppEndBlock pprint () ) | OverloadSet {typeset = []} => ppAddString pprint "no type" | OverloadSet {typeset = tconslist} => (* Just print the type constructors separated by / *) let fun printTCcons [] = () | printTCcons [tcons] = ppAddString pprint (tcName tcons) | printTCcons (tcons::rest) = ( ppAddString pprint (tcName tcons); ppBreak pprint (0, 0); ppAddString pprint "/"; printTCcons rest ) in ppBeginBlock pprint (0, false); printTCcons tconslist; ppEndBlock pprint () end | EmptyType => ppAddString pprint "no type" | BadType => ppAddString pprint "bad" end (* dispP *) in dispP (t, depth) end (* tDisp *); (* Generate unique type-variable names. *) fun varNameSequence () : typeVarForm -> string = (* We need to ensure that every distinct type variable has a distinct name. Each new type variable is given a name starting at "'a" and going on through the alphabet. *) let datatype names = Names of {name: string, entry: typeVarForm}; val nameNum = ref ~1; val gNameList = ref []; (* List of names *) in (* If the type is already there return the name we have given it otherwise make a new name and put it in the list. *) fn (var : typeVarForm) => case List.find (fn (Names {entry,...}) => sameTv (entry, var)) (!gNameList) of NONE => (* Not on the list - make a new name *) let fun name num = (if num >= 26 then name (num div 26 - 1) else "") ^ String.str (Char.chr (num mod 26 + Char.ord #"a")); val () = nameNum := !nameNum + 1; val n = (if tvEquality var then "''" else "'") ^ (*(if ml90 lex andalso tvWeak var then "_" else "") ^*) name(!nameNum); (* Should explicit type variables be distinguished? *) in gNameList := Names{name=n, entry=var} :: !gNameList; n end | SOME (Names {name,...}) => name end (* varNameSequence *); (* Print a type (as a block of items) *) fun display (t : types, depth : int, pprint : prettyPrinter, withStruct) = tDisp (t, depth, pprint, varNameSequence (), withStruct) (* Print out one or more type variables (unblocked) *) fun printTypeVars (vars : types list, depth : int, typeV : typeVarForm -> string, pprint : prettyPrinter, withStruct) : unit = let val numOfVars = length vars; in (* Just print the variable *) if numOfVars = 1 then ( tDisp (hd vars, depth, pprint, typeV, withStruct); ppBreak pprint (1, 0) ) else ( if numOfVars > 1 then (* Must parenthesise them. *) if depth <= 1 then ppAddString pprint "..." else ( ppBeginBlock pprint (0, false); ppAddString pprint "("; ppBreak pprint (0, 0); let fun pVars vars depth = if depth <= 0 then ppAddString pprint "..." else if not (null vars) then ( tDisp (hd vars, depth, pprint, typeV, withStruct); ppBreak pprint (0, 0); if not (null (tl vars)) then ( ppAddString pprint ","; ppBreak pprint (1, 0); pVars (tl vars) (depth - 1) ) else () ) else () in pVars vars depth end; ppAddString pprint ")"; ppEndBlock pprint (); ppBreak pprint (1, 0) ) else () ) end (* printTypeVars *); (* Version used in parsetree. *) fun displayTypeVariables (vars : types list, depth : int, pprint : prettyPrinter, withStruct) : unit = printTypeVars (vars, depth, varNameSequence (), pprint, withStruct); (* Prints out a type constructor e.g. type 'a fred = 'a * 'a or datatype 'a joe = bill of 'a list | mary of 'a * int or simply type 'a abs if the type is abstract. *) fun displayTypeConstrs (tCons : typeConstrs, depth : int, pprint : prettyPrinter, withStruct) : unit = let val typeV : typeVarForm -> string = varNameSequence (); in if depth <= 0 then ppAddString pprint "..." else if not (null (tcConstructors tCons)) then let (* It has constructors - datatype declaration *) (* Print a single constructor (blocked) *) fun pValConstr (first, name, typeOf, depth) = let val U : unit = if first then ppBreak pprint (1, 2) else ppBreak pprint (1, 0) in (* 1 *) ppBeginBlock pprint (0, false); (* 2 *) ppBeginBlock pprint (0, false); if first then ppBreak pprint (0, 2) else let in (* 3 *) ppBeginBlock pprint (0, false); ppAddString pprint "|"; ppBreak pprint (1, 2); (* 3 *) ppEndBlock pprint () end; if depth <= 0 then ppAddString pprint "..." else let in ppAddString pprint name; (* Function - get the argument type *) if isFunctionType typeOf then ( ppBreak pprint (1, 4); ppAddString pprint "of" ) else () end; (* 2 *) ppEndBlock pprint (); if isFunctionType typeOf andalso depth > 0 then ( ppBreak pprint (1, 4); (* print the type as a single block of output *) tDisp (#arg (typesFunctionType typeOf), depth - 1, pprint, typeV, withStruct) ) else (); (* 1 *) ppEndBlock pprint () end; (* pValConstr *) (* Print a sequence of constructors (unblocked) *) fun pValConstrRest ([], depth) = () | pValConstrRest (H :: T, depth) = if depth < 0 then () else let in pValConstr (false, valName H, valTypeOf H, depth); pValConstrRest (T, depth - 1) end; fun pValConstrList ([], depth) = () (* shouldn't occur *) | pValConstrList (H :: T, depth) = let in ppBeginBlock pprint (2, true); pValConstr (true, valName H, valTypeOf H, depth); pValConstrRest (T, depth - 1); ppEndBlock pprint () end; (* Remove any structure name. *) val tcname = #second(splitString(tcName tCons)) in ppBeginBlock pprint (0, false); ppAddString pprint "datatype"; ppBreak pprint (1, 2); printTypeVars (tcTypeVars tCons, depth, typeV, pprint, withStruct); ppAddString pprint (tcname ^ " ="); pValConstrList (tcConstructors tCons, depth - 1); ppEndBlock pprint () end else (* Either direct type equivalent, or an abstract type *) let (* Remove any structure name. *) val tcname = #second(splitString(tcName tCons)) in ppBeginBlock pprint (3, false); ppAddString pprint (if tcEquality tCons then "eqtype" else "type"); ppBreak pprint (1, 0); printTypeVars (tcTypeVars tCons, depth, typeV, pprint, withStruct); ppAddString pprint tcname; (* Don't try to print the type it is equivalent to, it will probably be confusing if this is the result of a functor application. *) ppEndBlock pprint () end end (* displayTypeConstrs *); (* When we have finished processing a list of patterns we need to check that the record is now frozen. *) fun recordNotFrozen (TypeVar t) : bool = (* Follow the chain *) recordNotFrozen (tvValue t) | recordNotFrozen (LabelledType { frozen, ... }) = not frozen | recordNotFrozen _ = false (* record or type alias *); fun matchError (s1 : string, alpha : types, s2 : string, beta : types, s3 : string, lex : lexan, lineno : int, moreInfo : prettyPrinter -> unit) : unit = ( errorProc (lex, lineno, fn (pprint : prettyPrinter) => let (* Use a single sequence. *) val vars : typeVarForm -> string = varNameSequence (); open DEBUG val parameters = LEX.debugParams lex val errorDepth = getParameter errorDepthTag parameters in ppBeginBlock pprint (3, false); ppAddString pprint s1; ppBreak pprint (1, 0); tDisp (alpha, errorDepth, pprint, vars, true); ppBreak pprint (1, 0); ppAddString pprint s2; ppBreak pprint (1, 0); tDisp (beta, errorDepth, pprint, vars, true); ppBreak pprint (1, 0); ppAddString pprint s3; ppBreak pprint (1, 0); moreInfo pprint; ppEndBlock pprint () end ) ) (* matchError *); (* True if two types are equal. Used to reduce the storage required when copying signatures. Rewritten using pattern-matching. SPF 17/11/94. *) fun equalTypes (TypeConstruction x) (TypeConstruction y) = sameTypeId (tcIdentifier (pling(#value x)), tcIdentifier(pling(#value y))) andalso equalTypeLists (#args x) (#args y) | equalTypes (FunctionType x) (FunctionType y) = equalTypes (#arg x) (#arg y) andalso equalTypes (#result x) (#result y) | equalTypes (LabelledType x) (LabelledType y) = #frozen x andalso #frozen y andalso equalRecordLists (#recList x) (#recList y) | equalTypes (TypeVar x) (TypeVar y) = sameTv (x, y) | equalTypes BadType BadType = true | equalTypes EmptyType EmptyType = true | equalTypes _ _ = false and equalTypeLists [] [] = true | equalTypeLists (x::xs) (y::ys) = equalTypes x y andalso equalTypeLists xs ys | equalTypeLists _ _ = false and equalRecordLists [] [] = true | equalRecordLists (x::xs) (y::ys) = #name x = #name y andalso equalTypes(#typeof x) (#typeof y) andalso equalRecordLists xs ys | equalRecordLists _ _ = false; fun trivMap (t : types) : types = t; (* See if the types are the same. This is a bit of a fudge, but saves carrying around a flag saying whether the structures were copied. This is only an optimisation. If the values are different it will not go wrong. *) val identical : types * types -> bool = ADDRESS.wordEq; val identicalConstr : typeConstrs * typeConstrs -> bool = ADDRESS.wordEq; val identicalList : 'a list * 'a list -> bool = ADDRESS.wordEq; (* Copy a type, avoiding copying type structures unnecessarily. Used to make new type variables for all distinct type variables when generalising polymorphic functions, and to make new type stamps for type constructors when generalising signatures. *) fun copyType (at, copyTypeVar, copyTypeConstr) = let fun copyList [] = [] | copyList (l as (h :: t)) = let val h' = copyType (h, copyTypeVar, copyTypeConstr); val t' = copyList t; in if identical (h', h) andalso identicalList (t', t) then l else h' :: t' end (* copyList *); fun copyRecordList [] = [] | copyRecordList (l as ({name, typeof} :: t)) = let val typeof' = copyType (typeof, copyTypeVar, copyTypeConstr); val t' = copyRecordList t; in if identical (typeof', typeof) andalso identicalList (t', t) then l else {name=name, typeof=typeof'} :: t' end (* copyList *); val atyp = eventual at; in case atyp of TypeVar _ => (* Unbound type variable, flexible record or overloading. *) copyTypeVar atyp | TypeConstruction {name, value, args} => let val copiedArgs = copyList args; val copiedConstr = copyTypeConstr (pling value); (* Use the name from the copied constructor. This will normally be the same as the original EXCEPT in the case where we are using copyType to generate copies of the value constructors of replicated datatypes. *) val copiedName = tcName copiedConstr in if identicalList (copiedArgs, args) andalso identicalConstr (copiedConstr, pling value) (* Although it's logically unnecessary we also copy it if we have a ref pointing to the constructor. This reduces the number of refs left around. *) andalso (case value of FrozenRef _ => true | _ => false) then atyp else (* Must copy it. *) mkTypeConstruction (copiedName, copiedConstr, copiedArgs) end | FunctionType {arg, result} => let val copiedArg = copyType (arg, copyTypeVar, copyTypeConstr); val copiedRes = copyType (result, copyTypeVar, copyTypeConstr); in if identical (copiedArg, arg) andalso identical (copiedRes, result) then atyp else FunctionType {arg = copiedArg, result = copiedRes} end | LabelledType {recList, frozen, ...} => (* Rigid labelled records only. Flexible ones are treated as type vars. *) let val copiedList = copyRecordList recList; in if identicalList (copiedList, recList) then atyp else LabelledType {recList = copiedList, frozen = frozen, genericInstance = []} end | EmptyType => EmptyType | BadType => BadType | OverloadSet _ => raise InternalError "copyType: OverloadSet found" end (* copyType *); (* Copy a type constructor and any types it uses in its "equivalent" list. Does not copy value constructors. *) fun copyTypeConstr (tcon, mustCopy, makeId, typeMap as {enter,lookup}, copyTypeVar, strName) = let val id = tcIdentifier tcon; val equiv = tcEquivalent tcon; (* Now copy any equivalent and put it on. *) val copiedEquiv = if isEmpty equiv then equiv else (* Back out the change needed for free type variables. DCJM 12/4/00. *) (* let (* We apply copyTypeVar to free type variables but not to bound vars. *) val boundTVs = tcTypeVars tcon fun copyFreeTVs tv = first(fn t => sameTypeVar(t, tv)) (fn _ => tv) (fn () => copyTypeVar tv) (overList boundTVs) fun copyTC tcon = copyTypeConstr (tcon, mustCopy, makeId, typeMap, copyFreeTVs) in copyType (equiv, copyFreeTVs, copyTC) end *) copyType (equiv, trivMap, (* Don't bother with type variables. *) fn tcon => copyTypeConstr (tcon, mustCopy, makeId, typeMap, trivMap, strName)); in (* Now copy the type constructor if either the id of this constructor must be copied or if its equivalent must be copied. It is possible that we may have to copy the constructor even if its equivalent has not changed (e.g. this constructor shares with a free type). We still copy it to make sure that the length of bound stamps is right. *) (* DCJM 17/2/00. If we have a type (rather than a datatype) and the "equivalent" has changed we must ensure that we always get a new copy. This is essential if the type has free variables. *) (* DCJM 9/5/00. Now backed out this change because it seems that the change to the definition which would allow free type variables is actually a mistake. *) if mustCopy id orelse not (identical (equiv, copiedEquiv)) then (* If it is the appropriate type of identifier. *) (* We share occurences of type constructors (not just their identifiers) so that if we have a value of a type which is a datatype we can find the constructors when we need to print it. *) case lookup id of (* Return it if it is in the table. *) SOME i => i | NONE => let (* Not there, so copy it. *) (* Replace any signature name by the given structure name unless this is is a type equivalence. It may be that the type is not actually declared in this structure. *) val newName = if isEmpty equiv then strName ^ #second(splitString(tcName tcon)) else tcName tcon val r = makeTypeConstrs (newName, tcTypeVars tcon, copiedEquiv, makeId (), tcEquality tcon, 0 (* Always global. *)); (* And put it in the table *) val U : unit = enter (id, r); in r end else tcon end (* copyTypeConstr *); datatype match = Matched of {old: typeVarForm, new: types}; (* Generate a mapping from one set of type variables to another. *) fun tvarSequence (matched : match list, isExp : bool) : types -> types = let val madeList = ref matched (* List of tyVars. *); in fn (atyp : types) => let val tyVar = typesTypeVar atyp; (* See if we have already made a type variable for it. *) fun pTypeVar ([] : match list) = let (* Not on the list - make a new name *) (* Make a unifiable type variable even if the original is nonunifiable. *) val n : types = mkTypeVar (generalisable, tvEquality tyVar, false, tvWeak tyVar andalso isExp); in (* Set the new variable to have the same value as the existing. That is only really needed if we have an overload set. *) tvSetValue (typesTypeVar n, tvValue tyVar); madeList := Matched {old = tyVar, new = n} :: !madeList; n end | pTypeVar (Matched {old, new} :: rest) = if sameTv (old, tyVar) then new else pTypeVar rest; in pTypeVar (!madeList) end end (* tvarSequence *); fun generaliseTypes (atyp : types, matched : match list, isExp : bool) : types = let val tvs : types -> types = tvarSequence (matched, isExp); fun copyTypeVar (atyp as TypeVar tyVar) = if tvLevel tyVar <> generalisable then atyp (* Not generalisable. *) else (* Unbound, overload set or flexible record *) let val newTv = tvs atyp in (* If we have a type variable pointing to a generic flexible record we have to retain a reference to the original so that we can add fields as necessary. We also have to generalise the fields since that won't have been done. The generic instance includes any generic instances used in the original type. *) case tvValue tyVar of valu as LabelledType{genericInstance, ...} => ( case copyType (valu, copyTypeVar, fn t => t) of LabelledType{recList, frozen, ... } => tvSetValue (typesTypeVar newTv, LabelledType{recList = recList, frozen = frozen, genericInstance = tyVar :: genericInstance}) | _ => raise InternalError "Copy of labelled record is not a labelled record" ) | _ => (); newTv end | copyTypeVar atyp = atyp (* We only copy type constructors if their "equivalent" has changed which will only happen if they contain a free type variable. *) (* I'm using makeFreeId here but I'm not convinced that's right. DCJM 17/2/00. *) (* I've now backed this change out because it seems that the "change" to the definition which would allow free type variables was actually a mistake. DCJM 12/4/00 *) (* fun copyTCons tcon = copyTypeConstr(tcon, fn _ => false, makeFreeId, {enter = fn _ => (), lookup = fn _ => raise ValueMissing "" }, copyTypeVar) *) in (* Only process type variables. Return type constructors unchanged. *) copyType (atyp, copyTypeVar, fn t => t (*copyTCons*)) end (* generaliseTypes *); (* Exported wrapper for generaliseTypes. *) fun generalise (atyp : types, isExp : bool) : types = generaliseTypes (atyp, [], isExp); fun checkForLocalDatatypes(ty: types, depth: int, errorFn: string->unit) : unit = let fun checkTypes (typ: types) (ok: bool) : bool = case typ of TypeConstruction {value, ...} => if ok andalso tcLetDepth (pling value) > depth then ( errorFn("Type contains local datatype (" ^ tcName (pling value) ^")"); false ) else true | _ => true in foldType checkTypes ty true; () end (* Make a match list from a list of type variables and types. *) fun copyVars (varlist : types list, arglist : types list) : match list = case (varlist, arglist) of (var::vars, arg::args) => Matched {old = typesTypeVar var, new = arg} :: copyVars (vars, args) | _ => [] (* These will normally be nil at the same time but if we have had an error they may not be. *) (* Find the argument type which gives this result when the constructor is applied. If we have, for example, a value of type int list and we have discovered that this is a "::" node we have to work back by comparing the type of "::" ('a * 'a list -> 'a list) to find the argument of the constructor (int * int list) and hence how to print it. (Actually "list" is treated specially). *) fun constructorResult (constrType : types, typeArgs : types list) : types = let val constrFun = typesFunctionType constrType; in generaliseTypes (#arg constrFun, copyVars (#args (typesTypeConstruction (#result constrFun)), typeArgs), true) end; (* If we have a type construction which is an alias for another type we construct the alias by first instantiating all the type variables and then copying the type. *) fun makeEquivalent (atyp, args) = generaliseTypes (tcEquivalent atyp, copyVars (tcTypeVars atyp, args), true); (* This 3-valued logic is used because in a few cases we may not be sure if equality testing is allowed. If we have 2 mutually recursive datatypes t = x of s | ... and s = z of t we would first examine "t", find that it uses "s", look at "s", find that refers back to "t". To avoid infinite recursion we return the result that equality "maybe" allowed for "t" and hence for "s". However we may find that the other constructors for "t" do not allow equality and so equality will not be allowed for "s" either. *) datatype tri = Yes (* 3-valued logic *) | No | Maybe; (* Returns a flag saying if equality testing is allowed for values of the given type. "equality" is used both to generate the code for a specific call of equality e.g. (a, b, c) = f(x), and to generate the equality operation for a type when it is declared. In the latter case type variables may be parameters which will be filled in later e.g. type 'a list = nil | op :: of ('a * 'a list). "search" is a function which looks up constructors in mutually recursive type declarations. "lookupTypeVar" deals with type variables. If they represent parameters to a type declaration equality checking will be allowed. If we are unifying this type to an equality type variable they will be unified to new equality type variables. Otherwise equality is not allowed. *) fun equality (ty, search, lookupTypeVar) : tri = let (* Can't use foldT because it is not monotonic (equality on ref 'a is allowed). *) (* Returns Yes only if equality testing is allowed for all types in the list. *) fun eqForList ([], soFar) = soFar | eqForList (x::xs, soFar) = case equality (x, search, lookupTypeVar) of No => No | Maybe => eqForList (xs, Maybe) | Yes => eqForList (xs, soFar); in case eventual ty of TypeVar tyVar => (* The type variable may point to a flexible record or an overload set or it may be the end of the chain. If this is a labelled record we have to make sure that any fields we add also admit equality. lookupTypeVar makes the type variable an equality type so that any new fields are checked for equality but we also have to call "equality" to check the existing fields. *) if tvEquality tyVar then Yes else ( case tvValue tyVar of lab as LabelledType _ => ( case lookupTypeVar tyVar of No => No | _ => equality (lab, search, lookupTypeVar) ) | _ => lookupTypeVar tyVar ) | FunctionType {...} => No (* No equality on function types! *) | TypeConstruction {value, args, ...} => let val constr = pling value; in if isUndefined constr then No (* ref - Equality is permitted on refs of all types *) (* The Definition of Standard ML says that ref is the ONLY type constructor which is treated in this way. The standard basis library says that other mutable types such as array should also work this way. We allow this by searching for an overloaded equality operation on the type. If it is there we treat the type as admitting equality whether it is monomorphic or polymorphic and whatever the types it is applied to. *) else if not (isCodeNil(getOverload("=", constr, fn()=>CodeNil))) then Yes (* "real" is an equality type in ML90 but not in ML97. *) else if sameTypeId (tcIdentifier constr, tcIdentifier STRUCTVALS.realType) then (*if ml90 lex then Yes else *)No (* Others apart from ref and real *) else if tcEquality constr (* Equality allowed. *) then eqForList (args, Yes) (* Must be allowed for all the args *) else if isEmpty (tcEquivalent constr) then let (* Not an alias. - Look it up. *) val s = search (tcIdentifier constr); in if s = No then No else eqForList (args, s) end (* May be an alias for a type that allows equality. *) else equality (makeEquivalent (constr, args), search, lookupTypeVar) end (* TypeConstruction *) | LabelledType {recList, ...} => (* Record equality if all subtypes are (ignore frozen!) *) (* TODO: Avoid copying the list? *) eqForList (map (fn{name,typeof}=>typeof) recList, Yes) | OverloadSet {typeset} => (* This should not happen because all overload sets should be pointed to by type variables and so should be handled in the TypeVar case. *) raise InternalError "equality - Overloadset found" | BadType => No | EmptyType => (* shouldn't occur *) No end; (* When a datatype is declared we test to see if equality is allowed. The types are mutually recursive so value constructors of one type may take arguments involving values of any of the others. *) fun genEqualityFunctions (types, errorMessage, inSignature) = let datatype state = Processed of tri (* Already processed or processing. *) | NotSeen of typeConstrs list (* Value is list of constrs. *); (* This table tells us, for each type constructor, whether it definitely admits equality, definitely does not or whether we have yet to look at it. *) fun isProcessed (Processed _) = true | isProcessed _ = false; fun isNotSeen (NotSeen _) = true | isNotSeen _ = false; fun stateProcessed (Processed x) = x | stateProcessed _ = raise Match; fun stateNotSeen (NotSeen x) = x | stateNotSeen _ = raise Match; val {enter:typeId * state -> unit,lookup} = mapTable sameTypeId; (* Look at each of the constructors in the list. Equality testing is only allowed if it is allowed for each of the alternatives. *) fun constrEq constructor [] soFar = soFar (* end of list - all o.k. *) | constrEq constructor (h :: t) soFar = (* The constructor may be a constant e.g. datatype 'a list = nil | ... or a function e.g. datatype 'a list = ... cons of 'a * 'a list. *) if not (isFunctionType (valTypeOf h)) (* Constant *) then constrEq constructor t soFar (* Go on to the next. *) else let (* Function - look at the argument type. *) (* Search the list for the type variable. If it is there it is a formal parameter to a datatype so equality testing will be allowed if it is allowed for the actual parameter. *) val eq = equality (#arg (typesFunctionType (valTypeOf h)), genEquality, fn tyVar => if List.exists (fn v => sameTv (typesTypeVar v, tyVar)) (tcTypeVars constructor) then Yes else No ); in if eq = No then (* Not allowed. *) No else (* O.k. - go on to the next. *) constrEq constructor t (if eq = Maybe then Maybe else soFar) end (* constrEq *) (* This procedure checks to see if equality is allowed for this datatype. *) and genEquality constructorId = let (* Look it up to see if we have already done it. It may fail because we may have constructors that do not admit equality. *) val thisState = getOpt(lookup constructorId, Processed No); in if isProcessed thisState then stateProcessed thisState (* Have either done it already or are currently doing it. *) else (* notSeen - look at it now. *) ( (* Equality is allowed for this datatype only if all of them admit it. There are various other alternatives but this is what the standard says. If the "name" is rigid (free) we must not grant equality if it is not already there although that is not an error. *) (* Set the state to "Maybe". This prevents infinite recursion. *) enter (constructorId, Processed Maybe); let val eq = List.foldl (fn (cons, t) => if t = No then No else if inSignature andalso not (isVariableId constructorId) andalso not (tcEquality cons) then No else constrEq cons (tcConstructors cons) t) Yes (stateNotSeen thisState); in (* Set the state we have found if it is "yes" or "no". If it is maybe we have a recursive reference which appears to admit equality, but may not. E.g. if we have datatype t = A of s | B of int->int and s = C of t if we start processing "t" we will go on to "s" and do that before returning to "t". It is only later we find that "t" does not admit equality. If we get "Maybe" as the final result when all the recursion has been unwound we can set the result to "yes", but any intermediate "Maybe"s have to be done again. *) enter (constructorId, if eq = Maybe then thisState else Processed eq); eq end ) end (* genEquality *); in (* If we have an eqtype we set it to true, otherwise we set all of them to "notSeen" with the constructor as value. *) List.app (fn dec => let (* If we have two datatypes which share we may already have one in the table. We have to link them together. *) val tclist = case lookup (tcIdentifier dec) of NONE => [dec] | SOME l => let val others = stateNotSeen l val newList = dec :: others; in (* If any of these are already equality types (i.e. share with an eqtype) then they all must be. *) if tcEquality dec orelse tcEquality (hd others) then List.app (fn d => tcSetEquality (d, true)) newList else (); newList end in enter (tcIdentifier dec, NotSeen tclist) end) types; (* Apply genEquality to each element of the list. *) List.app (fn constructor => let val constructorId = tcIdentifier constructor; val eqForCons = genEquality constructorId; in (* If the result is "Maybe" it involves a recursive reference, but the rest of the type allows equality. The type admits equality. *) if eqForCons = No then (* Equality not allowed *) ( (* If it has been shared with an eqtype it will have the equality flag set. If it does not admit equality it is an error. *) if tcEquality constructor then errorMessage ("Type (" ^ tcName constructor ^ ") does not respect equality") else () ) else ( (* Turn on equality. *) enter (constructorId, Processed Yes); tcSetEquality (constructor, true) ) end) types end (* genEqualityFunctions *); (* Test to see is a type constructor is in an overload set. *) fun isInSet(tcons: typeConstrs, (H::T): typeConstrs list) = sameTypeId (tcIdentifier tcons, tcIdentifier H) orelse isInSet(tcons, T) | isInSet(tcons: typeConstrs, []: typeConstrs list) = false (* Type matching algorithm for both unification and signature matching. *) fun typeMatch (Atype : types, (* candidate type when signature matching *) Btype : types, (* target type when signature matching *) (* mapA : types -> types, *) (* As this was always trivmap I've removed it *) mapB : types -> types, (* Map type constructors in the target. *) cantMatch : types * types * string -> unit) : unit = let fun match (Atype : types, Btype : types, (* mapA : types -> types, *) mapB : types -> types) : unit = let (* Check two records/tuples and return the combined type. *) fun unifyRecords (recA as {frozen=typAFrozen, recList=typAlist, genericInstance = gA}, recB as {frozen=typBFrozen, recList=typBlist, genericInstance = gB}, typA : types, typB : types, (*mapA, *)mapB) : types = let (* If we add a field to the instance we have to add a corresponding type variable to the generic. *) fun addFieldToGeneric field generic = let (* The new entry is just a type variable. *) val newEntry = ( (*print(concat[ "newEntry:", "equality=", Bool.toString(tvEquality generic), " level=", Int.toString(tvLevel generic), " weakness=", Bool.toString(tvWeak generic), "\n" ]);*) { name = field, (* The entry must at least inherit the equality attribute (and weakness?). We should have tvLevel generic = generalisable and tvNonUnifiable generic = false. *) typeof = mkTypeVar(tvLevel generic, tvEquality generic, tvNonUnifiable generic, tvWeak generic)} ) fun addEntry [] = [newEntry] | addEntry ((ge as {name, typeof = _}) :: geRest) = let val order = compareLabels (name, field) in if order = 0 then ge :: geRest (* Already there - this may be a duplicate. *) else if order < 0 then ge :: addEntry geRest else newEntry :: ge :: geRest end in case tvValue generic of LabelledType { recList, frozen = false, ...} => tvSetValue(generic, LabelledType { recList = addEntry recList, frozen = false, genericInstance = []}) | LabelledType { recList, frozen = true, ...} => let (* It seems that in obscure circumstances (see regression file p073) we can have a generic that is already frozen. In that case all the field we want to add should already be in the frozen record otherwise it's an error. I don't really understand this and I don't know whether it's actually possible to have a missing field at this point. *) fun checkEntries [] = () | checkEntries ((ge as {name, typeof = _}) :: geRest) = let val order = compareLabels (name, field) in if order = 0 (* It's there *) then () else if order < 0 then checkEntries geRest else cantMatch (typA, mapB typB, "(Field " ^ name ^ " missing)") end in checkEntries recList end | _ => raise InternalError "addFieldToGeneric: Not a labelled record" end fun freezeGeneric generic = case tvValue generic of LabelledType { recList, ...} => tvSetValue(generic, LabelledType { recList = recList, frozen = true, genericInstance = []}) | _ => raise InternalError "freezeGeneric: Not a labelled record" fun matchLabelled ([], []) = [] (* Something left in bList - this is fine if typeA is not frozen. e.g. (a: s, b: t) will match (a: s, ...) but not just (a:s). *) | matchLabelled ([], bList as {name=bName, ...} :: _) = ( if typAFrozen then cantMatch (typA, mapB typB, "(Field " ^ bName ^ " missing)") else (* Add all the extra fields in bList to all the generics for A. *) List.app(fn {name, typeof} => List.app (addFieldToGeneric name) gA) bList; bList (* return the remainder of the list *) ) | matchLabelled (aList as {name=aName, ...} :: _, []) = (* Something left in bList *) ( if typBFrozen then cantMatch (typA, mapB typB, "(Field " ^ aName ^ " missing)") else List.app(fn {name, typeof} => List.app (addFieldToGeneric name) gB) aList; aList (* the rest of aList *) ) | matchLabelled (aList as ((aVal as {name=aName,typeof=aType})::aRest), bList as ((bVal as {name=bName,typeof=bType})::bRest)) = (* both not nil - look at the names. *) let val order = compareLabels (aName, bName); in if order = 0 (* equal *) then (* same name - must be unifiable types *) ( (* The result is (either) one of these with the rest of the list. *) match (aType, bType, mapB); aVal :: matchLabelled (aRest, bRest) ) else if order < 0 (* aName < bName *) then ( (* The entries in each list are in order so this means that this entry is not in bList. If the typeB is frozen this is an error. *) if typBFrozen (* Continue with the entry removed. *) then (cantMatch (typA, mapB typB, "(Field " ^ aName ^ " missing)"); aList) else ( List.app (addFieldToGeneric aName) gB; aVal :: matchLabelled (aRest, bList) ) ) else (* aName > bName *) if typAFrozen then (cantMatch (typA, mapB typB, "(Field " ^ bName ^ " missing)"); bList) else ( List.app (addFieldToGeneric bName) gA; bVal :: matchLabelled (aList, bRest) ) end (* not nil *); (* Return the combined list. Only actually used if both are flexible. *) val result = matchLabelled (typAlist, typBlist) (* We append the generic instances. This may create duplicates if, for example, we are unifying a record with itself. *) in if typAFrozen then (if typBFrozen then () else List.app freezeGeneric gB; typA) else if typBFrozen then (if typAFrozen then () else List.app freezeGeneric gA; typB) else LabelledType {recList = result, frozen = false, genericInstance = gA @ gB} end (* unifyRecords *); (* Sets a type variable to a value. - Checks that the type variable we are assigning does not occur in the expression we are about to assign to it. Such cases can occur if we have infinitely-typed expressions such as fun a. a::a where a has type 'a list list ... Also propagates the level information of the type variable. Now also deals with flexible records. *) fun assign (var, t) = let (* Mapped over the type to be assigned. *) (* Returns "true" if it is safe to make the assignment. Sorts out imperative type variables and propagates level information. N.B. It does not propagate equality status. The reason is that if we are unifying ''a with '_b ref, the '_b does NOT become an equality type var. In all other cases it would. *) fun checkForLoops t false = false | checkForLoops (TypeVar tvar) true = let (* The level is the minimum of the two, and if we are unifying with an equality type variable we must make this into one. *) val minLev = Int.min (tvLevel var, tvLevel tvar); (* Make the resultant type variable weak unless we are really unifying it with an overload set. *) val isWeak = ((tvWeak var) orelse (tvWeak tvar)) andalso (case tvValue tvar of OverloadSet _ => false | _ => true) in if (tvLevel tvar <> minLev) orelse (tvWeak tvar <> isWeak) then (* If it is nonunifiable we cannot make its level larger. *) if tvNonUnifiable tvar then cantMatch (Atype, mapB Btype, "(Type variable is free in surrounding scope)") else let (* Must make a new type var with the right properties *) (* This type variable may be a flexible record, in which case we have to save the record and put it on the new type variable. foldType will apply checkForLoops to the record. *) val newTv = mkTypeVar (minLev, tvEquality tvar, false, isWeak); in tvSetValue (typesTypeVar newTv, tvValue tvar); tvSetValue (tvar, newTv) end else (); not (sameTv (tvar, var)) (* Safe if vars are different. *) end | checkForLoops _ true = true (* end checkForLoops *); val varVal = tvValue var (* Current value of the variable to be set. *) in (* start of "assign" *) case varVal of LabelledType _ => (* Flexible record. Check that the records are compatible. *) match (varVal, t, (*trivMap, *)trivMap) | OverloadSet _ => (* OverloadSet. Check that the sets match. This is only in the case where t is something other than an overload set since we remove the overload set from a variable when unifying two sets. *) match (varVal, t, (*trivMap, *)trivMap) | _ => (); (* If this type variable was put in explicitly then it can't be assigned to something else. (We have already checked for the type variables being the same). *) if tvNonUnifiable var orelse not (foldType checkForLoops t true) then let (* The one case where an apparent occurs check is not an error is when unifying 'a with ('a,'b) x, where x was defined by type ('a,'b) x = 'a. In this case we are really unifying 'a and 'a and so there is no problem. *) (* This originally just checked a single level of expansion. I've now turned it into a function to handle arbitrary levels. e.g. (('a, 'b) x, 'c) x DCJM 22/8/00. *) fun checkRealError (TypeConstruction {value, args, ...}) = let val constr = pling value in isEmpty (tcEquivalent constr) orelse let (* expand type constructor to get its body *) val equiv = eventual (makeEquivalent (constr, args)); in checkRealError equiv end end | checkRealError (TypeVar tv) = (* is it the same type variable that we started with? *) not (sameTv (tv, var)) | checkRealError _ = true val realError = checkRealError t in if realError then let (* generate the right error message. *) val msg = if tvNonUnifiable var then "(Cannot unify with explicit type variable)" else "(Type variable to be unified occurs in type)"; in cantMatch (Atype, mapB Btype, msg) end else () end else let (* Occurs check succeeded. *) fun canMkEqTv (tvar : typeVarForm) : tri = (* Turn it into an equality type var. *) if tvEquality tvar then Yes (* If it is nonunifiable we cannot make it into an equality type var. *) else if tvNonUnifiable tvar then No else (* Must make a new type var with the right properties *) let (* This type variable may be a flexible record or an overload set, in which case we have to save the record and put it on the new type variable. We have to do both because we have to ensure that the existing fields in the flexible record admit equality and ALSO that any additional fields we may add by unification with other records also admit equality. *) val newTv = mkTypeVar (tvLevel tvar, true, false, tvWeak tvar); val oldValue = tvValue tvar in tvSetValue (tvar, newTv); (* If this is an overloaded type we must remove any types that don't admit equality. *) case oldValue of OverloadSet{typeset} => (*if ml90 lex then (* real admits equality in ML90 but not in ML97. I am assuming here that we will not try overloading on any other type which would not admit equality. *) ( tvSetValue (typesTypeVar newTv, oldValue); Yes ) else*) let (* Remove any types which do not admit equality. *) fun filter [] = [] | filter (h::t) = if tcEquality h then h :: filter t else filter t in case filter typeset of [] => No | [constr] => ( (* Turn a singleton into a type construction. *) tvSetValue (typesTypeVar newTv, mkTypeConstruction(tcName constr, constr, nil)); Yes ) | newset => ( tvSetValue (typesTypeVar newTv, OverloadSet{typeset=newset}); Yes ) end | _ => (* Labelled record or unbound variable. *) ( tvSetValue (typesTypeVar newTv, oldValue); Yes ) end; in (* If we are unifying a type with an equality type variable we must ensure that equality is allowed for that type. This will turn most type variables into equality type vars. *) if tvEquality var andalso equality (t, fn _ => No, canMkEqTv) = No then cantMatch (Atype, mapB Btype, "(Requires equality type)") (* TODO: This can result in an unhelpful message if var is bound to a flexible record since there is no indication in the printed type that the flexible record is an equality type. It would be improved if we set the value to be EmptyType. At least then the type variable would be printed which would be an equality type. --- Adding the "Requires equality type" should improve things. *) else (); (* Actually make the assignment. It doesn't matter if var is a labelled record, because t will be either a fixed record or a combination of the fields of var and t. Likewise if var was previously an overload set this may replace the set by a single type construction. *) tvSetValue (var, t) end end (* assign *); (* First find see if typeA and typeB are unified to anything already, and get the end of a list of "flexibles". *) val tA = eventual Atype; val tB = eventual Btype; in (* start of "match" *) case (tA, tB) of (BadType, _) => () (* If either is an error don't try to match *) | (_, BadType) => () | (TypeVar typeAVar, TypeVar _) => (* Unbound type variable, flexible record or overload set. *) let (* Even if this is a one-way match we can allow type variables in the typeA to be instantiated to anything in the typeB. *) val typeAVal = tvValue typeAVar; (* We have two unbound type variables or flex. records. *) val typB = mapB tB in case typB of TypeVar typeBVar => if sameTv (typeAVar, typeBVar) (* same type variable? *) then () else (* no - assign one to the other *) if tvNonUnifiable typeAVar (* If we have a nonunifiable type variable we want to assign the typeB to it. If the typeB is nonunifiable as well we will get an error message. *) then assign (typeBVar, tA) else let (* If they are both flexible records we first set the typeB to the union of the records, and then set the typeA to that. In that way we propagate properties such as equality and level between the two variables. *) val typBVal = tvValue typeBVar in case (typeAVal, typBVal) of (LabelledType recA, LabelledType recB) => ( (* Turn these back into simple type variables to save checking the combined record against the originals when we make the assignment. (Would be safe but redundant). *) tvSetValue (typeBVar, emptyType); tvSetValue (typeAVar, emptyType); assign (typeBVar, unifyRecords (recA, recB, typeAVal, typBVal, (*trivMap, *)trivMap)); assign (typeAVar, typB) ) | (OverloadSet{typeset=setA}, OverloadSet{typeset=setB}) => let (* The lists aren't ordered so we just have to go through by hand. *) fun intersect(a, []) = [] | intersect(a, H::T) = if isInSet(H, a) then H::intersect(a, T) else intersect(a, T) val newSet = intersect(setA, setB) in case newSet of [] => cantMatch (Atype, mapB Btype, "(Incompatible overloadings)") | _ => ( tvSetValue (typeBVar, emptyType); tvSetValue (typeAVar, emptyType); (* I've changed this from OverloadSet{typeset=newset} to use mkOverloadSet. The main reason was that it fixed a bug which resulted from a violation of the assumption that "equality" would not be passed an overload set except when pointed to by a type variable. It also removed the need for a separate test for singleton sets since mkOverloadSet deals with them. DCJM 1/9/00. *) assign (typeBVar, mkOverloadSet newSet); assign (typeAVar, typB) ) end | (EmptyType, _) => (* A is not a record or an overload set. *) assign (typeAVar, typB) | (_, EmptyType) => (* A is a record but B isn't *) assign (typeBVar, tA) (* typeB is ordinary type var. *) | _ => (* Bad combination of labelled record and overload set *) cantMatch (Atype, mapB Btype, "(Incompatible types)") end | typB => match (tA, typB, (*trivMap, *)trivMap) end | (TypeVar typeAVar, _) => (* typeB is not a type variable so set typeA to typeB.*) (* Be careful if this is a non-unifiable type variable being matched to the special case of the identity type-construction. *) ( if tvNonUnifiable typeAVar then ( case tB of TypeConstruction {value, args, ...} => let val constr = pling value in if isUndefined constr orelse isEmpty (tcEquivalent constr) then ( case mapB tB of TypeConstruction {value, args, ...} => let val constr = pling value in if isUndefined constr orelse isEmpty (tcEquivalent constr) then assign (typeAVar, mapB tB) else match(tA, eventual (makeEquivalent (constr, args)), trivMap) end | _ => assign (typeAVar, mapB tB) ) else match(tA, eventual (makeEquivalent (constr, args)), mapB) end | _ => assign (typeAVar, mapB tB) ) else assign (typeAVar, mapB tB) ) | (_, TypeVar typeBVar) => (* and typeA is not *) ( (* We have to check for the special case of the identity type-construction. *) if tvNonUnifiable typeBVar then ( case tA of TypeConstruction {value, args, ...} => let val constr = pling value in if isUndefined constr orelse isEmpty (tcEquivalent constr) then ( case mapB tB of TypeVar tv => (* This will fail if we are matching a signature because the typeB will be non-unifiable. *) assign (tv, mapB tA) (* set typeB to typeA *) | typB => match (tA, typB, (*mapA, *)trivMap) ) else match(eventual (makeEquivalent (constr, args)), tB, mapB) end | _ => ( case mapB tB of TypeVar tv => (* This will fail if we are matching a signature because the typeB will be non-unifiable. *) assign (tv, mapB tA) (* set typeB to typeA *) | typB => match (tA, typB, (*mapA, *)trivMap) ) ) else ( case mapB tB of TypeVar tv => (* This will fail if we are matching a signature because the typeB will be non-unifiable. *) assign (tv, mapB tA) (* set typeB to typeA *) | typB => match (tA, typB, (*mapA, *)trivMap) ) ) | (TypeConstruction({value = valueA, args=tAargs, ...}), TypeConstruction ({value = valueB, args=tBargs, ...})) => let val tACons = pling valueA and tBCons = pling valueB in (* We may have a number of possibilities here. a) If tA is an alias we simply expand it out and recurse (even if tB is the same alias). e.g. if we have string t where type 'a t = int*'a we expand string t into int*string and try to unify that. b) map it and see if the result is an alias. -- NOW REMOVED c) If tB is a type construction and it is an alias we expand that e.g. unifying "int list" and "int t" where type 'a t = 'a list (particularly common in signature/structure matching.) d) Finally we try to unify the stamps and the arguments. *) if not (isUndefined tACons orelse isEmpty (tcEquivalent tACons)) (* Candidate is an alias - expand it. *) then match (makeEquivalent (tACons, tAargs), tB, (*mapA, *)mapB) else if not (isUndefined tBCons orelse isEmpty (tcEquivalent tBCons)) then match (tA, makeEquivalent (tBCons, tBargs), (*trivMap, *)mapB) else case mapB tB of (typB as TypeConstruction({value=valueB, args=typeBargs, ...})) => let val typeBCons = pling valueB in (* If the typeB is an alias it must be expanded. *) if not(isUndefined typeBCons) andalso not(isEmpty (tcEquivalent typeBCons)) then match (tA, makeEquivalent (typeBCons, typeBargs), (*trivMap, *)trivMap) else if sameTypeId (tcIdentifier tACons, tcIdentifier typeBCons) then let (* Same type constructor - do the arguments match? *) fun matchLists [] [] = () | matchLists (a::al) (b::bl) = ( match (a, b, (*trivMap, *)trivMap); matchLists al bl ) | matchLists _ _ = (* This should only happen as a result of a different error. *) cantMatch (Atype, mapB Btype, "(Different numbers of arguments)") in matchLists tAargs typeBargs end else cantMatch (tA, typB, "(Different type constructors)") end | typB => (* Mapping the construction gave us something other than a construction. *) match (tA, typB, (*trivMap, *)trivMap) end | (OverloadSet {typeset}, TypeConstruction {value=valueB, args=tBargs, ...}) => (* The candidate is an overloaded type and the target is a type construction. *) let val tBCons = pling valueB in if not (isUndefined tBCons orelse isEmpty (tcEquivalent tBCons)) then match (tA, makeEquivalent (tBCons, tBargs), (*mapA, *)mapB) else ( case mapB tB of typB as TypeConstruction{value=valueB, args=typeBargs, ...} => let val typeBCons = pling valueB in if isUndefined typeBCons then () else if not(isEmpty (tcEquivalent typeBCons)) then match (tA, makeEquivalent (typeBCons, typeBargs), trivMap) else (* See if the target type is among those in the overload set. *) if null typeBargs (* Must be a nullary type constructor. *) andalso isInSet(tBCons, typeset) then () (* ok. *) else cantMatch (tA, typB, "(Overloading does not include type)") end | typB => match (tA, typB, (*mapA,*) trivMap) ) end | (TypeConstruction {value=valueA, args=tAargs, ...}, OverloadSet {typeset}) => let val tACons = pling valueA in if not (isUndefined tACons orelse isEmpty (tcEquivalent tACons)) then match (makeEquivalent (tACons, tAargs), tB, (*mapA, *)mapB) (* We should never find an overload set as the target for a signature match but it is perfectly possible for tB to be an overload set when unifying two types. *) else if null tAargs andalso isInSet(tACons, typeset) then () (* ok. *) else cantMatch (tA, mapB tB, "(Overloading does not include type)") end (* (OverloadSet , OverloadSet) should not occur because that should be handled in the (TypeVar, TypeVar) case. *) | (TypeConstruction({value = valueA, args=tAargs, ...}), _) => let val tACons = pling valueA in if not (isUndefined tACons orelse isEmpty (tcEquivalent tACons)) (* Candidate is an alias - expand it. *) then match (makeEquivalent (tACons, tAargs), tB, mapB) else (* typB not a construction (but typeA is) *) cantMatch (tA, mapB tB, "(Incompatible types)") end | (_, TypeConstruction {value=valueB, args=tBargs, ...}) => (* and typeA is not. *) (* May have a type equivalence e.g. "string t" matches int*string if type 'a t = int * 'a . Alternatively we may be matching a structure to a signature where the signature says "type t" and the structure contains "type t = int->int" (say). We need to set the type in the signature to int->int. *) let val tBCons = pling valueB in if not (isUndefined tBCons orelse isEmpty (tcEquivalent tBCons)) then match (tA, makeEquivalent (tBCons, tBargs), mapB) else ( case mapB tB of typB as TypeConstruction{value = valueB, args=typeBargs, ...} => let val typeBCons = pling valueB in if isUndefined typeBCons then () else if not(isEmpty (tcEquivalent typeBCons)) then match (tA, makeEquivalent (typeBCons, typeBargs), trivMap) else cantMatch (typB, tA, "(Incompatible types)") end | typB => match (tA, typB, trivMap) ) end | (FunctionType {arg=typAarg, result=typAres, ...}, FunctionType {arg=typBarg, result=typBres, ...}) => ( (* must be unifiable functions *) (* In principle it doesn't matter whether we unify arguments or results first but it could affect the error messages. Is this the best way to do it? *) match (typAarg, typBarg, (*mapA, *) mapB); match (typAres, typBres, (*mapA, *) mapB) ) | (EmptyType, EmptyType) => () (* This occurs only with exceptions - empty means no argument *) | (LabelledType recA, LabelledType recB) => (* Unify the records, but discard the result because at least one of the records is frozen. *) (unifyRecords (recA, recB, tA, tB, (*mapA, *) mapB); ()) (* | (LabelledType recA, _) => ( (* DCJM: Why do we map labelled records when we don't map functions? Is it something to do with flexible records? Try commenting this out. *) case mapB tB of LabelledType recB => (unifyRecords (recA, recB, tA, tB, trivMap); ()) | typB => cantMatch (tA, typB, "") ) *) | _ => cantMatch (tA, mapB tB, "(Incompatible types)") end; (* match *) in match (Atype, Btype, (*mapA, *)mapB) end; (* typeMatch *) fun unify (alpha : types, beta : types, lex : lexan, lineno : int, moreInfo : prettyPrinter -> unit) : unit = let fun cantMatch (typeA, typeB, reason) = matchError ("Can't unify", typeA, "with", typeB, reason, lex, lineno, moreInfo); in typeMatch (alpha, beta, (*trivMap, *)trivMap, cantMatch) end; (* Given a function type returns the first argument if the function takes a tuple otherwise returns the only argument. Extended to include the case where the argument is not a function in order to work properly for overloaded literals. *) fun firstArg(FunctionType{arg= LabelledType { recList = {typeof, ...} ::_, ...}, ...}) = eventual typeof | firstArg(FunctionType{arg, ...}) = eventual arg | firstArg t = eventual t (* Returns the result type of a function. *) fun getResult(FunctionType{result, ...}) = eventual result | getResult _ = raise InternalError "getResult - not a function"; (* Returns an instance of an overloaded function using the supplied list of type constructors for the overloading. *) fun generaliseOverload(t, constrs, isConverter) = let val arg = if isConverter then getResult t else firstArg t in case arg of TypeVar tv => (* The argument should be a type variable, possibly set to an empty overload set. This should be replaced by the current overload set in the copied function type. *) generaliseTypes(t, [Matched{old=tv, new=mkOverloadSet constrs}], true) | _ => raise InternalError "generaliseOverload - arg is not a type var" end (* Return a type constructor from an overload. If there are several (i.e. the overloading has not resolved to a single type) it returns the "best". Returns undefType if there is no suitable type or if there is more than one type in ML 90. *) fun typeConstrFromOverload(f, isConverter) = let fun prefType(TypeVar tvar) = ( (* If we still have an overload set that's because it has not reduced to a single type. In ML 97 we default to int, real, word, char or string in that order. This works correctly for overloading literals so long as the literal conversion functions are correctly installed. *) case tvValue tvar of OverloadSet{typeset} => let (* If we accept this type we have to freeze the overloading to this type. I'm not happy about doing this here but it seems the easiest solution. *) fun freezeType tcons = ( tvSetValue(tvar, mkTypeConstruction(tcName tcons, tcons, [])); tcons ) in (*if ml90 lex andalso not isConverter then undefType (* No defaulting on functions in ML 90 but allow defaulting on literals *) else *)if isInSet(STRUCTVALS.intType, typeset) then freezeType STRUCTVALS.intType else if isInSet(STRUCTVALS.realType, typeset) then freezeType STRUCTVALS.realType else if isInSet(STRUCTVALS.wordType, typeset) then freezeType STRUCTVALS.wordType else if isInSet(STRUCTVALS.charType, typeset) then freezeType STRUCTVALS.charType else if isInSet(STRUCTVALS.stringType, typeset) then freezeType STRUCTVALS.stringType else undefType end | _ => undefType (* Unbound or flexible record. *) ) | prefType(TypeConstruction{value, args, ...}) = let val constr = pling value in if isEmpty (tcEquivalent constr) then constr (* Generally args will be nil in this case but in the special case of looking for an equality function for 'a ref or 'a array it may not be. *) else prefType (makeEquivalent (constr, args)) end | prefType _ = undefType in prefType(firstArg f) end; (* Error message about overloading. *) fun overloadError (t : types, opName : string, types : string, lex : lexan, lineno : int) : unit = (* Find the argument type of the function. *) let (* Get the first arg if there are more than one, and see if it is matched to anything. *) val arg = firstArg t open DEBUG val parameters = debugParams lex val errorDepth = getParameter errorDepthTag parameters in if isTypeVar arg (* Unresolved *) then errorMessage (lex, lineno, "Unable to resolve overloading for " ^ opName) else errorProc (lex, lineno, fn (pprint:prettyPrinter) => ( ppBeginBlock pprint (3, true); ppAddString pprint (opName ^ " is overloaded on " ^ types ^ " but not "); display (arg, errorDepth, pprint, true); ppEndBlock pprint () )) end (* overloadError *); fun apply (f, arg, lex, lineno, moreInfo) = let val ef = eventual f; in if isFunctionType ef then (* Special case for functions. *) let val funType = typesFunctionType ef; val U : unit = unify (#arg funType, arg, lex, lineno, moreInfo); in #result funType end else (* Type variables etc. - Use general case. *) let (* Make arg->'a, and unify with the function. *) val resType = mkTypeVar (generalisable, false, false, false); val fType = mkFunctionType (arg, resType); (* This may involve more than just assigning the type to "ef". *) val U : unit = unify (ef, fType, lex, lineno, moreInfo); in resType (* The result is the type variable unified to the result. *) end end (* apply *); (* Assigns type variables to variables with generalisation permitted if their level is at least that of the current level. In ML90 mode this produces an error message for any top-level free imperative type variables. We don't do that in ML97 because it is possible that another declaration may "freeze" the type variable before the composite expression reaches the top level. *) fun allowGeneralisation (t, level, nonExpansive, lex, lineno, moreInfo) = let fun giveError(s1: string, s2: string) = errorProc(lex, lineno, fn (pprint: prettyPrinter) => let (* Use a single sequence. *) val vars : typeVarForm -> string = varNameSequence (); open DEBUG val parameters = debugParams lex val errorDepth = getParameter errorDepthTag parameters in ppBeginBlock pprint (3, false); ppAddString pprint s1; ppBreak pprint (1, 0); tDisp (t, errorDepth, pprint, vars, true); ppBreak pprint (1, 0); ppAddString pprint s2; ppBreak pprint (1, 0); moreInfo pprint; ppEndBlock pprint () end); fun general (TypeVar tvar) showError = if tvLevel tvar >= level andalso tvLevel tvar <> generalisable then let (* Is this an overload set ? *) val isOverloadSet = case tvValue tvar of OverloadSet _ => true | _ => false (* Make a new generisable type variable, except that weak type variables in an expansive context cannot be generalised. We also don't generalise if this is an overload set. The reason for that is that it allows us to get overloading information from the surrounding context. e.g. let fun f x y = x+y in f 2.0 end. An alternative would be take the default type (in this case int). DCJM 1/9/00. *) val ml90 = DEBUG.getParameter DEBUG.ml90Tag (debugParams lex) val nonCopiable = (not nonExpansive andalso (tvWeak tvar orelse not ml90)) orelse isOverloadSet; val newLevel = if nonCopiable then level-1 else generalisable (* copiable *); val ml90 = DEBUG.getParameter DEBUG.ml90Tag (debugParams lex) val isOk = (* If the type variable has top-level scope then we have a free type variable. We only want to generate this message once even if we have multiple type variables.*) (* If the type variable is non-unifiable and the expression is expansive then we have an error since this will have to be a monotype. *) if tvNonUnifiable tvar andalso nonCopiable andalso showError then ( giveError("Type", "includes a free type variable"); false ) else if newLevel = 1 andalso showError andalso ml90 andalso not isOverloadSet then ( giveError ("Type", "includes a free imperative type variable"); false ) else showError; val newVal = mkTypeVar (newLevel, tvEquality tvar, if nonCopiable then (tvNonUnifiable tvar) else false, tvWeak tvar) in (* If an explicit type variable is going out of scope we can generalise it, except if it is nonunifiable. *) (* It may be a flexible record so we have to transfer the record to the new variable. *) tvSetValue (typesTypeVar newVal, tvValue tvar); tvSetValue (tvar, newVal); isOk end else showError | general _ isOk = isOk in foldType general t true; () end (* end allowGeneralisation *); (* Check for free type variables. Added for ML97. This replaces the test in allowGeneralisation above and is applied to all top-level values including those in structures and functors. *) (* I've changed this from giving an error message, which prevented the code from evaluating, to giving a warning and setting the type variables to unique type variables. That allows, for example, fun f x = raise x; f Subscript; to work. DCJM 8/3/01. *) fun checkForFreeTypeVariables(valName: string, ty: types, lex: lexan) : unit = let (* Generate new names for the type constructors. *) val count = ref 0 fun genName num = (if num >= 26 then genName (num div 26 - 1) else "") ^ String.str (Char.chr (num mod 26 + Char.ord #"a")); fun checkTypes (TypeVar tvar) () = if isEmpty(tvValue tvar) andalso tvLevel tvar = 1 then (* The type variable is unbound (specifically, not an overload set) and it is not generic i.e. it must have come from an expansive expression. *) let val name = "_" ^ genName(!count) val _ = count := !count + 1; val tCons = makeFrozenTypeConstrs (name, [], emptyType, makeFreeId(), tvEquality tvar, 0); val newVal = mkTypeConstruction(name, tCons, []) in warningMessage(lex, lineno lex, concat["The type of (", valName, ") contains a free type variable.\n", "Setting it to a unique monotype."]); tvSetValue (tvar, newVal) end else () | checkTypes _ () = () in foldType checkTypes ty (); () end (* Sets any variable stamps in the type to new bound stamps. This is used in the final phase of compiling a signature when we need to turn variable stamps into bound stamps. *) fun setTypeConstr (tcon, makeId) = let val id = tcIdentifier tcon; val equiv = tcEquivalent tcon; in if not (isEmpty equiv) then setTypes (equiv, makeId) else (); if isVariableId id then (unifyTypeIds (id, makeId tcon); ()) else () end (* Applies setTypeConstr to every type constructor. *) and setTypes (t, makeId) = let fun setTypeConstrVal t () = if isTypeConstruction t then setTypeConstr(pling (#value (typesTypeConstruction t)), makeId) else (); in foldType setTypeConstrVal t () end (* Enter a type constructor into the match table. *) (* We should simply have to enter the candidate type against the target identifier in the table, but unfortunately it is not always that simple. It is possible that the target has an "equivalent" which is no longer in the signature and so will not match up to a candidate. e.g. sig type a type b sharing type a=b type b end could end up with a pointing to b which is no longer there. *) (* Put the candidate against this entry in the table and also against any equivalents of this target which are not already matched. *) fun enterTypeConstrs (target, candidate, matchTab as {enter,lookup}) = let val equiv = tcEquivalent target; in if isBoundId (tcIdentifier target) then #enter matchTab (tcIdentifier target, candidate) else (); if isTypeConstruction equiv then let val t = pling (#value (typesTypeConstruction equiv)); (* Is it in the table already? If so don't overwrite it. *) in case #lookup matchTab (tcIdentifier t) of SOME _ => () | NONE => enterTypeConstrs (t, candidate, matchTab) end else () end; (* Check that two types match. *) fun matchTypes (candidate : types, target : types, targMap : typeId -> typeConstrs option, lex : lexan, lineno : int, moreInfo : prettyPrinter -> unit) : unit = let fun copyTarget t = (* Don't bother with type variables. *) copyType (t, trivMap, fn tcon => ( (* Copy it if it is in the map. *) copyTypeConstr (tcon, (fn id => case targMap id of SOME _ => true | NONE => false), makeFreeId, (* Not used. *) {lookup = targMap, enter = (fn (id, tc) => ())}, trivMap, "" ) )); (* Do the match to a version of the candidate with copies of the type variables so that we can instantiate them. We could do this by passing in a mapping function but the problem is that if we have a type variable that gets unified to another variable we will not map it properly if it occurs again (we call "eventual" and get the second tv before calling the map function so we get a second copy and not the first copy). *) val copiedCandidate : types = generalise (candidate, true); fun cantMatch (candidate, target, reason) = matchError ("Can't match", candidate, "to", target, reason, lex, lineno, moreInfo); in typeMatch (copiedCandidate, target, copyTarget, cantMatch) end; (* Returns true if a type constructor permits equality. *) fun permitsEquality constr = if tcEquality constr then true else if isEmpty(tcEquivalent constr) then false else not (equality (mkTypeConstruction (tcName constr, constr, tcTypeVars constr), fn tri => No, fn tri => Yes) = No); (* Try to set one type constructor to point to the other. It may not succeed if they are both already assigned to other types in which case no error message is produced. These errors are detected by a second pass using matchTypes later on. This is used to establish sharing constraints, which can be a problem since either type constructor could be a variable or rigid depending on other sharing. *) fun linkTypeConstructors (typeA, typeB, cantMatch) = let (* Set the equivalent field of a type constructor to a type. *) fun setEquiv toSet v = let (* Make a type construction out of constructor, using type variables from "toSet". *) val construction = mkTypeConstruction (tcName v, v, tcTypeVars toSet); (* If "toSet" is an eqtype we need to check that the "v" also is one. If we are establishing a sharing constraint between two variable types one of which is an eqtype we have to make them all eqtypes. *) in if tcEquality toSet then if isVariableId (tcIdentifier v) andalso isEmpty (tcEquivalent v) then tcSetEquality (v, true) else if not (permitsEquality v) then cantMatch ("Cannot share: (" ^ tcName v ^ ") is not an eqtype") else () else (); (* Set the "equivalent" to the value. We can't simply set the stamps to be the same because the equality attribute is held in the type constructor instead (as the semantics says) in the name. We would have a problem if we shared a type with a datatype that was later found to be an eqtype. *) tcSetEquivalent (toSet, construction) end (* setEquiv *); in if isUndefined typeA orelse isUndefined typeB then () else if tcArity typeA <> tcArity typeB (* Check arity. *) then cantMatch ("Cannot share: Types (" ^ tcName typeA ^ ") have different arities.") else let (* The argument lists must be identical lists of type variables. *) fun eqArgs [] [] = true | eqArgs (TypeVar ta :: al) (TypeVar tb :: bl) = sameTv (ta, tb) andalso eqArgs al bl | eqArgs _ _ = false; (* First see if either has been matched to another type. If what it has been matched to is a type constructor then we look at that. *) val AEquiv = tcEquivalent typeA; val BEquiv = tcEquivalent typeB; in if not (isEmpty AEquiv) then (* This type is matched to something else. This could have arisen either from a previous sharing constraint or from a type abbreviation. This is only allowed if it is another type constructor. In ML90, where we can share with rigid types, this could also arise as a result of sharing with a rigid type construction. We ignore that, since we're not trying to maintain full compatibility with ML90, and generate an error message anyway. *) ( if isTypeConstruction AEquiv andalso eqArgs (#args (typesTypeConstruction AEquiv)) (tcTypeVars typeA) then linkTypeConstructors (pling (#value (typesTypeConstruction AEquiv)), typeB, cantMatch) else cantMatch ("Cannot share: (" ^ tcName typeA ^ ") is a type function") ) else if not (isEmpty BEquiv) then (* ditto for type B *) ( if isTypeConstruction BEquiv andalso eqArgs (#args (typesTypeConstruction BEquiv)) (tcTypeVars typeB) then linkTypeConstructors (typeA, pling (#value (typesTypeConstruction BEquiv)), cantMatch) else cantMatch ("Cannot share: (" ^ tcName typeB ^ ") is a type function") ) (* Neither A nor B can already be matched to anything. *) else if sameTypeId (tcIdentifier typeA, tcIdentifier typeB) (* Are they the same already? If so skip all this. *) then () else let (* Not there. *) val AIsDatatype = not (null(tcConstructors typeA)); val BIsDatatype = not (null(tcConstructors typeB)); (* If we have a variable type constructor which is a type or eqtype (but not a datatype) we can set its "equivalent" field to the other type constr. *) in (* In ML90 we are allowed to unify a rigid and a flexible type. In ML97 both must be flexible. *) if not (isVariableId (tcIdentifier typeA)) (*andalso not (ml90 lex)*) then cantMatch ("Cannot share: (" ^ tcName typeA ^ ") is not flexible") else if not (isVariableId (tcIdentifier typeB)) (*andalso not (ml90 lex)*) then cantMatch ("Cannot share: (" ^ tcName typeB ^ ") is not flexible") else if isVariableId (tcIdentifier typeA) andalso not AIsDatatype then setEquiv typeA typeB else if isVariableId (tcIdentifier typeB) andalso not BIsDatatype then setEquiv typeB typeA (* We have two type constructors in which neither has an equivalent field which is set or can be set. They must either be datatypes or rigid (non-variable) abstract types. We just try to link their stamps. We check by a later pass that this has succeeded. *) else if isVariableId (tcIdentifier typeA) orelse isVariableId (tcIdentifier typeB) then let (* If they are both rigid this is not going to work. Skip it and report the error later. *) (* Equality status. If either has equality status then the result should have equality, except that we can't change the equality status of a rigid (free) stamp. We have to do this before unifying the stamps because that could change the kind of stamp. *) val AEq = permitsEquality typeA; val BEq = permitsEquality typeB; in ( if AEq andalso not BEq then (* Want to set B to be an eqtype as well. *) if isVariableId (tcIdentifier typeB) then (tcSetEquality (typeB, true); true) else (cantMatch ("Cannot share: (" ^ tcName typeB ^ ") is not an eqtype"); false) else if BEq andalso not AEq then (* Want to set A to be an eqtype as well. *) if isVariableId (tcIdentifier typeA) then (tcSetEquality (typeA, true); true) else (cantMatch ("Cannot share: (" ^ tcName typeA ^ ") is not an eqtype"); false) else true ) andalso (* Unify the type "names" (unique ids). *) unifyTypeIds (tcIdentifier typeA, tcIdentifier typeB); () end else (* Both are rigid. This case can only occur if ml90 is true. We've already checked that they don't have the same type name so we can just generate an error message. *) cantMatch ("Cannot share: (" ^ tcName typeA ^ ") and (" ^ tcName typeB ^ ") are different types") end end end (* linkTypeConstructors *); (* Set a type constructor looked up in the signature to a dummy type constructor representing the type realisation. The reason for using a dummy type constructor is that it allows us to match up the type variables used in the original declaration of the type with the type variables used in the realisation. It also means that the code is very similar to the old (ML90) version of linkTypeConstructors which worked with rigid type constructors as well as flexible. *) fun setWhereType (tcToSet, equivTc, cantSet) = let (* Set the equivalent field of a type constructor to a type. *) fun setEquiv toSet v = let (* Make a type construction out of constructor, using type variables from "toSet". *) val construction = mkTypeConstruction (tcName v, v, tcTypeVars toSet); (* If "toSet" is an eqtype we need to check that the "v" also is one. If we are establishing a sharing constraint between two variable types one of which is an eqtype we have to make them all eqtypes. *) in if tcEquality toSet then if isVariableId (tcIdentifier v) andalso isEmpty (tcEquivalent v) then tcSetEquality (v, true) else if not (permitsEquality v) then cantSet ("(" ^ tcName v ^ ") is not an eqtype") else () else (); (* Set the "equivalent" to the value. We can't simply set the stamps to be the same because the equality attribute is held in the type constructor instead (as the semantics says) in the name. We would have a problem if we shared a type with a datatype that was later found to be an eqtype. *) tcSetEquivalent (toSet, construction) end (* setEquiv *) in if isUndefined tcToSet then () (* Probably because looking up the type constructor name failed. *) else if tcArity tcToSet <> tcArity equivTc (* Check arity. *) then cantSet ("Cannot apply type realisation: Types (" ^ tcName tcToSet ^ ") have different arities.") else let (* The argument lists must be identical lists of type variables. *) fun eqArgs [] [] = true | eqArgs (TypeVar ta :: al) (TypeVar tb :: bl) = sameTv (ta, tb) andalso eqArgs al bl | eqArgs _ _ = false; (* First see if either has been matched to another type. If what it has been matched to is a type constructor then we look at that. *) val toSetEquiv = tcEquivalent tcToSet; val equivEquiv = tcEquivalent equivTc; in if not (isEmpty toSetEquiv) then (* It's bound to something. I really don't know if this is legal or not. If it is legal it's only legal if it's bound to another type name. This might arise as a result of a sharing constraint. *) ( case toSetEquiv of TypeConstruction {value, args, ... } => if eqArgs args (tcTypeVars tcToSet) then setWhereType (pling value, equivTc, cantSet) else cantSet ("Cannot apply type realisation: (" ^ tcName tcToSet ^ ") is a type function") | _ => cantSet ("Cannot apply type realisation: (" ^ tcName tcToSet ^ ") is a type function") ) (* If the type we are trying to assign is a simple construction of a type constructor with matching type variables then we try to match to that. (e.g. where type 'a A.t = 'a s). In this case only it is possible for A.t to be a datatype if s is also a datatype. *) else if isTypeConstruction equivEquiv andalso eqArgs (#args (typesTypeConstruction equivEquiv)) (tcTypeVars equivTc) then setWhereType (tcToSet, pling (#value (typesTypeConstruction equivEquiv)), cantSet) (* It must have a variable stamp. The only way I can see that it might not be would be if another "where type" has already been applied to this type. *) else if not (isVariableId (tcIdentifier tcToSet)) then cantSet ("Cannot apply type realisation: (" ^ tcName tcToSet ^ ") is already free.") (* If it's an eqtype then the type function must admit equality. Again, I don't know if it's legal to use "where type" to set the "equivalent" of an eqtype at all. *) else if tcEquality tcToSet andalso not (permitsEquality equivTc) then cantSet ("Cannot apply type realisation: (" ^ tcName tcToSet ^ ") is an eqtype but the type does not permit equality.") (* Check if it's a datatype. If we need to get the effect of a "where type" constraint with a datatype we have to use datatype replication. *) (* It's not clear at the moment whether this is allowed or not. I'm going to allow it for the moment. N.B. We don't check the constructors. That's because we can't be sure that there aren't other datatypes which already share with this one and they are allowed to have different constructors in ML97. e.g. sig datatype t = A|B of int datatype s = X of real sharing type s = t end is legal in ML97, although unmatchable. If we apply a "where type" constraint to, say s, e.g. where type s = bool, we don't check it. *) else if not (null(tcConstructors tcToSet)) then (* cantSet ("Cannot apply type realisation: (" ^ tcName tcToSet ^ ") is a datatype.") *) if null(tcConstructors equivTc) then cantSet ("Cannot apply type realisation: (" ^ tcName tcToSet ^ ") is a datatype but (" ^ tcName equivTc ^ ") is not.") else (unifyTypeIds(tcIdentifier tcToSet, tcIdentifier equivTc); ()) else (* Just set the equivalent field to point to the type. *) setEquiv tcToSet equivTc end end (* setWhereType *); (* A simple sort routine - particularly if the list is already sorted. Reports duplicate names. *) fun sortLabels ([], duplicate) = [] | sortLabels (s::rest, duplicate) = let fun enter s name [] = [s] | enter s name (l as ( (h as {name=hname, typeof}) :: t)) = let val comp = compareLabels (name, hname); in if comp = 0 (* Equal. *) then duplicate ("Label (" ^ name ^ ") appears more than once.") else (); if comp <= 0 then s :: l else h :: enter s name t end; in enter s (#name s) (sortLabels (rest, duplicate)) end; (* Returns the number of the entry in the list. Used to find out the location of fields in a labelled record for expressions and pattern matching. Assumes that the label appears in the list somewhere. *) fun entryNumber (label, LabelledType{recList, ...}) = let (* Count up the list. *) fun entry ({name, typeof}::l) n = if name = label then n else entry l (n + 1) | entry [] _ = raise Match in entry recList 0 end | entryNumber (label, TypeVar tvar) = entryNumber (label, tvValue tvar) | entryNumber (label, TypeConstruction{value, ...}) = (* Type alias *) entryNumber (label, tcEquivalent(pling value)) | entryNumber (label, _) = raise InternalError "entryNumber - not a record" (* Size of a labelled record. *) fun recordWidth (LabelledType{recList, ...}) = length recList | recordWidth (TypeVar tvar) = recordWidth (tvValue tvar) | recordWidth (TypeConstruction{value, ...}) = (* Type alias *) recordWidth (tcEquivalent(pling value)) | recordWidth _ = raise InternalError "entryNumber - not a record" (* Unify two type variables which would otherwise be non-unifiable. Used when we have found a local type variable with the same name as a global one. *) fun linkTypeVars (a, b) = let val ta = typesTypeVar (eventual a); (* Must both be type vars. *) val tb = typesTypeVar (eventual b); in (* Set the one with the higher level to point to the one with the lower, so that the effective level is the lower. *) if (tvLevel ta) > (tvLevel tb) then tvSetValue (ta, b) else tvSetValue (tb, a) end; (* Set its level by setting it to a new type variable. *) fun setTvarLevel (typ, level) = let val tv = typesTypeVar (eventual typ); (* Must be type var. *) in tvSetValue (tv, mkTypeVar (level, tvEquality tv, true, tvWeak tv)) end; (* Checks that every type identifier mentioned is rigid. Used when we have unified a rigid and a flexible structure. *) fun checkWellFormed (t, errorMessage) = let fun check typ () = if isTypeConstruction typ then let val cons = typesTypeConstruction typ; val constructor = pling (#value cons); val equiv = tcEquivalent constructor; in if not (isEmpty equiv) then checkWellFormed (equiv, errorMessage) else if isVariableId (tcIdentifier constructor) then errorMessage ("Ill-formed signature - type (" ^ tcName constructor ^") is not rigid.") else () end else (); in (* Apply this to all the types. *) foldType check t () end; (* Applied to type constructions (e.g. 'a list) to get the value constructors for the type constructor. Used in the match compiler to find the number of constructors in a datatype. *) fun getConstrList (TypeConstruction{value, args, ...}) = let val constr = pling value val l = tcConstructors constr in (* In a few cases it is possible for the value to be an equivalent. *) if null l andalso not(isEmpty(tcEquivalent constr)) then getConstrList (makeEquivalent (constr, args)) else l end | getConstrList (FunctionType{result, ...}) = (* May be the type of a constructor - look at result type *) getConstrList result | getConstrList _ = []; (* Find a value constructor in the list of constructors for the datatype. This is used in structures.copySig to reduce the amount of space used *) fun findValueConstructor copied = let val t = valTypeOf copied; val name = valName copied; (* The value constructor's type may be a value of the datatype or a function returning a value. *) val construction = if isFunctionType t then #result(typesFunctionType t) else t; val constructor = pling (#value (typesTypeConstruction construction)); (* If the value constructor is in the list return it otherwise return the copied version. In fact the only case when it will not be in the list is if the list is empty. We have to check the types are the same because we also use this when copying datatypes. *) in case List.find (fn v => valName v = name) (tcConstructors constructor) of SOME v => if equalTypes (valTypeOf v) t then v else copied | NONE => copied end; end (* TYPETREE *); polyml.5.2.1/mlsource/MLCompiler/TypeTree.ML0000644000175000017500000000223210506226527017627 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure TypeTree = TYPE_TREE ( structure ADDRESS = Address structure DEBUG = Debug structure LEX = Lex structure STRUCTVALS = StructVals structure UTILITIES = Utilities structure MISC = Misc structure PRETTYPRINTER = PrettyPrinter structure CODETREE = CodeTree structure PRINTTABLE = PrintTable ) ; polyml.5.2.1/mlsource/MLCompiler/UTILITIES_.ML0000644000175000017500000001422510766425750017614 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* Title: Various Utilities. Author: Dave Matthews, Cambridge University Computer Laboratory Copyright Cambridge University 1988 *) functor UTILITIES_ ( (*****************************************************************************) (* LEX *) (*****************************************************************************) structure LEX : sig type lexan; val errorMessage: lexan * int * string -> unit; end ) : (*****************************************************************************) (* UTILITIES export signature *) (*****************************************************************************) sig type lexan; val noDuplicates: (string -> unit) -> { apply: (string * 'a -> unit) -> unit, enter: string * 'a -> unit, lookup: string -> 'a option }; val searchList: unit -> { apply: (string * 'a -> unit) -> unit, enter: string * 'a -> unit, lookup: string -> 'a option}; val checkForDots: string * lexan * int -> unit; val mapTable: ('a * 'a -> bool) -> {enter: 'a * 'b -> unit, lookup: 'a -> 'b option}; val splitString: string -> { first:string,second:string } end (* UTILITIES export signature *) = (*****************************************************************************) (* UTILITIES functor body *) (*****************************************************************************) struct open LEX; (* A search list in which an identifier may only be entered once. Entering it a second time gives an error message (""fail"" is called) *) fun noDuplicates fail = let val variable = ref ([]); (* Works down the list from the first declaration to the last, applying a function to each element. *) fun apply f = let fun appl [] = () | appl ((name,value)::T) = (appl T; f (name, value)) in appl (!variable) end; (* Add entry to the list if it is not already there. If it is then call 'fail'. *) fun enter (name : string, value) = let fun look [] = variable := (name,value) :: !variable | look ((n,_)::T) = if n = name then fail name else look T; in look (!variable) end; (* Look up name *) fun lookup (name : string) = let fun look [] = NONE | look ((n,v)::T) = if n = name then SOME v else look T; in look (!variable) end; in { apply = apply, enter = enter, lookup = lookup } end; fun searchList () = let val variable = ref []; (* Works down the list from the first declaration to the last, applying a function to each element. *) fun apply f = let fun appl [] = () | appl ((name,value)::T) = (appl T; f (name, value)) in appl (!variable) end (* apply *); (* Add to list. *) fun enter (name : string, value) = variable := (name,value) :: !variable; (* Look up name *) fun lookup (name : string) = let fun look [] = NONE | look ((n,v)::T) = if n = name then SOME v else look T; in look (!variable) end; in { apply = apply, enter = enter, lookup = lookup } end; (* searchList *) fun checkForDots (name, lex, lineno) = let fun check i = if i > size name then () else if String.str(String.sub(name, i-1)) = "." then errorMessage (lex, lineno, "qualified name " ^ name ^ " illegal here") else check (i + 1) in check 1 end; (* Creates a table which will match values of one type and return corresponding results. *) fun mapTable (same : 'a * 'a -> bool) : {enter: 'a * 'b -> unit, lookup: 'a -> 'b option} = let val table : ('a * 'b) list ref = ref []; (* Don't allow duplicate keys in the list! *) local fun member (x, [] : ('a * 'b) list) = false | member (x, h::t) = same (#1 h, x) orelse member (x, t); fun delete (x, [] : ('a * 'b) list) = [] | delete (x, h::t) = if same (#1 h, x) then t else h :: delete (x, t); in fun enter (entry as (a: 'a, b: 'b)) : unit = let val list = !table; val newList = if member (a, list) then delete (a, list) else list; in table := entry :: newList end; end; (* old ... (* Add a newType entry to the table. *) fun enter (a, b) = table := (a,b) :: !table; ... *) (* Get a value if it's there *) fun lookup (x : 'a) : 'b option = let fun search [] = NONE | search ((a, b) :: T) = if same (a, x) then SOME b else search T; in search (!table) end; in {enter = enter, lookup = lookup} end; fun splitString s = (* Divides a name into its components. Returns the string split at the last ".". The first part is empty if there are no dots in it. *) let val (first, second) = Substring.splitr(fn c => c <> #".") (Substring.full s) in if Substring.isEmpty first then {first = "", second = s} else {first = Substring.string(Substring.trimr 1 first), second = Substring.string second } end end; polyml.5.2.1/mlsource/MLCompiler/Utilities.ML0000644000175000017500000000154310766425750020054 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure Utilities = UTILITIES_ ( structure LEX = Lex ); polyml.5.2.1/mlsource/MLCompiler/VALUE_OPS.ML0000644000175000017500000033401611003076053017461 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited Modified David C.J. Matthews 2008. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* Title: Operations on global and local values. Author: Dave Matthews, Cambridge University Computer Laboratory Copyright Cambridge University 1986 *) functor VALUE_OPS ( (*****************************************************************************) (* LEX *) (*****************************************************************************) structure LEX : sig type lexan val nullLex: lexan val debugParams: lexan -> Universal.universal list end; (*****************************************************************************) (* CODETREE *) (*****************************************************************************) structure CODETREE : sig type machineWord type codetree val CodeNil: codetree; val CodeTrue: codetree; val CodeZero: codetree; val isCodeNil: codetree -> bool; val mkTuple: codetree list -> codetree; val mkRecLoad: int -> codetree; val mkLoad: int * int -> codetree; val mkInd: int * codetree -> codetree; val mkConst: machineWord -> codetree; val mkEnv: codetree list -> codetree; val mkProc: codetree * int * int * string -> codetree; val mkInlproc: codetree * int * int * string -> codetree; val mkEval: codetree * codetree list * bool -> codetree; val mkStr: string -> codetree; val mkRaise: codetree -> codetree; val mkNot: codetree -> codetree; val mkTestnull: codetree -> codetree; val mkTestnotnull: codetree -> codetree; val mkTestinteq: codetree * codetree -> codetree; val mkTestptreq: codetree * codetree -> codetree; val mkCand: codetree * codetree -> codetree; val mkCor: codetree * codetree -> codetree; val mkMutualDecs: codetree list -> codetree; val mkIf: codetree * codetree * codetree -> codetree; val mkDec: int * codetree -> codetree; val evalue: codetree -> machineWord; val structureEq: machineWord * machineWord -> bool val genCode: codetree * Universal.universal list -> unit -> codetree end; (*****************************************************************************) (* STRUCTVALS *) (*****************************************************************************) structure STRUCTVALS : sig type structVals type codetree type signatures type typeConstrs type univTable val sigName: signatures -> string val sigTab: signatures -> univTable type typeId val isUnsetId: typeId -> bool val sameTypeId: typeId * typeId -> bool type typeVarForm type 'a possRef val pling: 'a possRef -> 'a (* A type is the union of these different cases. *) datatype types = TypeVar of typeVarForm | TypeConstruction of (* typeConstructionForm *) { name: string, value: typeConstrs possRef, args: types list } | FunctionType of (* functionTypeForm *) { arg: types, result: types } | LabelledType of (* labelledRecForm *) { recList: { name: string, typeof: types } list, frozen: bool, genericInstance: typeVarForm list } | OverloadSet of (* overloadSetForm *) { typeset: typeConstrs list } | BadType | EmptyType ; datatype valAccess = Global of codetree | Local of { addr: int ref, level: int ref } | Selected of { addr: int, base: structVals } | Formal of int | Overloaded of typeDependent (* Values only. *) and typeDependent = Print | PrintSpace | MakeString | MakeStringSpace | InstallPP | Equal | NotEqual | AddOverload | TypeDep and values = Value of { name: string, typeOf: types, access: valAccess, class: valueClass } (* Classes of values. *) and valueClass = SimpleValue | Exception | Constructor of { nullary: bool } val tvValue: typeVarForm -> types val sameTv: typeVarForm * typeVarForm -> bool; val tcName: typeConstrs -> string val tcTypeVars: typeConstrs -> types list val tcEquivalent: typeConstrs -> types val tcConstructors: typeConstrs -> values list val tcIdentifier: typeConstrs -> typeId val tcEquality: typeConstrs -> bool; val tcLetDepth: typeConstrs -> int; val tcSetConstructors: typeConstrs * values list -> unit; val makeTypeConstrs: string * types list * types * typeId * bool * int -> typeConstrs; val isFreeId: typeId -> bool; val boolType: typeConstrs val intType: typeConstrs val charType: typeConstrs val stringType: typeConstrs val wordType: typeConstrs; val realType: typeConstrs val unitType: typeConstrs val exnType: typeConstrs val listType: typeConstrs val refType: typeConstrs val undefType: typeConstrs val undefinedStruct: structVals val isUndefinedStruct: structVals -> bool val structSignat: structVals -> signatures val structName: structVals -> string val structAccess: structVals -> valAccess val makeSelectedStruct: structVals * structVals -> structVals type functors val functorName: functors -> string val functorArg: functors -> structVals val functorResult: functors -> signatures val undefinedValue: values val makeValueConstr: string * types * bool * valAccess -> values val makeGlobalV: string * types * codetree -> values val makeLocalV: string * types * int ref * int ref -> values val valName: values -> string val valTypeOf: values -> types datatype fixStatus = Infix of int | InfixR of int | Nonfix; datatype env = Env of { lookupVal: string -> values option, lookupType: string -> typeConstrs option, lookupFix: string -> fixStatus option, lookupStruct: string -> structVals option, lookupSig: string -> signatures option, lookupFunct: string -> functors option, enterVal: string * values -> unit, enterType: string * typeConstrs -> unit, enterFix: string * fixStatus -> unit, enterStruct: string * structVals -> unit, enterSig: string * signatures -> unit, enterFunct: string * functors -> unit }; val makeEnv: signatures -> env; type 'a tag = 'a Universal.tag; val signatureVar: signatures tag val structVar: structVals tag val typeConstrVar: typeConstrs tag val valueVar: values tag val fixVar: fixStatus tag end; (*****************************************************************************) (* TYPESTRUCT *) (*****************************************************************************) structure TYPESTRUCT : sig type typeConstrs type types type lexan type prettyPrinter type values val mkTypeConstruction: string * typeConstrs * types list -> types val mkFunctionType: types * types -> types val mkProductType: types list -> types val generalise: types * bool -> types; val overloadError: types * string * string * lexan * int -> unit val generaliseOverload: types * typeConstrs list * bool -> types; val typeConstrFromOverload: types * bool -> typeConstrs; val makeEquivalent: typeConstrs * types list -> types val constructorResult: types * types list -> types val display: types * int * prettyPrinter * bool -> unit val displayTypeConstrs: typeConstrs * int * prettyPrinter * bool -> unit val sameTypeVar : types * types -> bool; val firstArg: types -> types; val copyType:types * (types -> types) * (typeConstrs -> typeConstrs) -> types; end; (*****************************************************************************) (* PRINTTABLE *) (*****************************************************************************) structure PRINTTABLE : sig type machineWord type typeId type prettyPrinter type typeConstrs type codetree val addPp: typeId * (prettyPrinter -> int -> machineWord -> machineWord -> unit) -> unit val getPrint: typeId -> (prettyPrinter -> int -> machineWord -> machineWord -> unit) val addOverload: string * typeConstrs * codetree -> unit val getOverloads: string -> (typeConstrs * codetree) list val getOverload: string * typeConstrs * (unit->codetree) -> codetree end; (*****************************************************************************) (* UNIVERSALTABLE *) (*****************************************************************************) structure UNIVERSALTABLE: sig type universal = Universal.universal type univTable type 'a iter val univOver: univTable -> (string * universal) iter; end; (*****************************************************************************) (* DEBUG *) (*****************************************************************************) structure DEBUG : sig val printDepthFunTag : (unit->int) Universal.tag val printStringTag : (string->unit) Universal.tag val getParameter : 'a Universal.tag -> Universal.universal list -> 'a end; (*****************************************************************************) (* MISC *) (*****************************************************************************) structure MISC : sig exception InternalError of string; (* compiler error *) val quickSort : ('a -> 'a -> bool) -> 'a list -> 'a list type 'a iter; val for : 'a iter -> ('a -> 'b) -> unit val iterList : 'a iter -> 'a list end; (*****************************************************************************) (* PRETTYPRINTER *) (*****************************************************************************) structure PRETTYPRINTER : sig type prettyPrinter val ppAddString : prettyPrinter -> string -> unit val ppBeginBlock : prettyPrinter -> int * bool -> unit val ppEndBlock : prettyPrinter -> unit -> unit val ppBreak : prettyPrinter -> int * int -> unit val prettyPrint : int * (string -> unit) -> prettyPrinter; val uglyPrint : (string -> unit) -> prettyPrinter; end; (* DCJM 8/8/00. Previously Address was a global but we aren't allowed to have sharing constraints with globals in ML97. We could use a "where type" constraint but then we couldn't bootstrap from ML90. *) structure ADDRESS : sig type machineWord; (* any legal bit-pattern (tag = 0 or 1) *) type address; (* an object that's represented as a pointer *) type short = Word.word; (* an object that's represented as a 30-bit int *) val wordEq : 'a * 'a -> bool val unsafeCast : 'a -> 'b; val isShort : 'a -> bool; (* The following casts are always safe *) val toMachineWord : 'a -> machineWord; (* The following casts are checked at run-time *) val toShort : 'a -> short; val toAddress : 'a -> address; val alloc: (short * Word8.word * machineWord) -> address; val loadByte: (address * short) -> Word8.word; val loadWord: (address * short) -> machineWord; val assignWord: (address * short * machineWord) -> unit val lock: address -> unit val length: address -> short; val F_words : Word8.word; val F_bytes : Word8.word; val F_mutable : Word8.word; end; (*****************************************************************************) (* UTILITIES *) (*****************************************************************************) structure UTILITIES : sig val splitString: string -> { first:string,second:string } end; (*****************************************************************************) (* VALUEOPS sharing constraints *) (*****************************************************************************) sharing type CODETREE.codetree = STRUCTVALS.codetree = PRINTTABLE.codetree sharing type STRUCTVALS.typeConstrs = TYPESTRUCT.typeConstrs = PRINTTABLE.typeConstrs sharing type STRUCTVALS.types = TYPESTRUCT.types sharing type STRUCTVALS.values = TYPESTRUCT.values sharing type STRUCTVALS.typeId = PRINTTABLE.typeId sharing type LEX.lexan = TYPESTRUCT.lexan sharing type PRINTTABLE.prettyPrinter = TYPESTRUCT.prettyPrinter = PRETTYPRINTER.prettyPrinter sharing type UNIVERSALTABLE.iter = MISC.iter sharing type ADDRESS.machineWord = CODETREE.machineWord = PRINTTABLE.machineWord sharing type UNIVERSALTABLE.univTable = STRUCTVALS.univTable ) : (*****************************************************************************) (* VALUEOPS exports signature *) (*****************************************************************************) sig type machineWord type lexan type prettyPrinter type codetree type types type values type structVals type functors type valAccess type typeConstrs type signatures type fixStatus type univTable val exnId : exn -> machineWord val exnName : exn -> string val exnValue : exn -> machineWord val overloadType: values * bool -> types val chooseConstrRepr : (string*types) list -> codetree list (* Construction functions. *) val mkGvar: string * types * codetree -> values val mkVar: string * types -> values val mkSelectedVar: values * structVals -> values val mkGconstr: string * types * codetree * bool -> values val mkGex: string * types * codetree -> values val mkEx: string * types -> values val mkSelectedType: typeConstrs * string * structVals option -> typeConstrs (* Standard values *) val nilConstructor: values; val consConstructor: values; type nameSpace = { lookupVal: string -> values option, lookupType: string -> typeConstrs option, lookupFix: string -> fixStatus option, lookupStruct: string -> structVals option, lookupSig: string -> signatures option, lookupFunct: string -> functors option, enterVal: string * values -> unit, enterType: string * typeConstrs -> unit, enterFix: string * fixStatus -> unit, enterStruct: string * structVals -> unit, enterSig: string * signatures -> unit, enterFunct: string * functors -> unit, allVal: unit -> (string*values) list, allType: unit -> (string*typeConstrs) list, allFix: unit -> (string*fixStatus) list, allStruct: unit -> (string*structVals) list, allSig: unit -> (string*signatures) list, allFunct: unit -> (string*functors) list }; (* Print values. *) val displayFixStatus: fixStatus * int * prettyPrinter -> unit val displaySignatures: signatures * int * prettyPrinter * nameSpace * bool -> unit val displayStructures: structVals * int * prettyPrinter * nameSpace * bool -> unit val displayFunctors: functors * int * prettyPrinter * nameSpace * bool -> unit val displayValues: values * int * prettyPrinter * nameSpace * bool -> unit val printStruct: machineWord * types * int * prettyPrinter * nameSpace -> unit val printValues: values * int * prettyPrinter * nameSpace -> unit val printSpaceTag: nameSpace Universal.tag val nullEnvironment : nameSpace val codeStruct: structVals * int -> codetree val codeAccess: valAccess * int -> codetree val mkExIden: unit -> codetree val codeVal: values * int * types * lexan * int -> codetree val codeExFunction: values * int * types * lexan * int -> codetree val applyFunction: values * codetree * int * types * lexan * int -> codetree val getOverloadInstance: string * types * bool * lexan * int -> codetree*string val isTheSameException: values * values -> bool val raiseBind: codetree val raiseMatch: codetree val makeGuard: values * codetree * int -> codetree val makeInverse: values * codetree * int -> codetree val lookupAny: string * (string -> 'a option) * (string -> structVals option) * (structVals -> string -> 'a option) * string * 'a * (string -> unit) -> 'a val lookupStructure: string * {lookupStruct: string -> structVals option} * string * (string -> unit) -> structVals val lookupStructureDirectly: string * {lookupStruct: string -> structVals option} * string * (string -> unit) -> structVals val lookupValue: string * {lookupVal: string -> values option, lookupStruct: string -> structVals option} * string * (string -> unit) -> values val lookupTyp: {lookupType: string -> typeConstrs option, lookupStruct: string -> structVals option} * string * (string -> unit) -> typeConstrs type representations val RefForm: representations; val BoxedForm: representations; val EnumForm: int -> representations; val createNullaryConstructor: representations * string -> codetree val createUnaryConstructor: representations * string -> codetree end (* VALUEOPS exports signature *) = (*****************************************************************************) (* VALUEOPS functor body *) (*****************************************************************************) struct open MISC; open PRETTYPRINTER; open LEX; open CODETREE; open STRUCTVALS; open TYPESTRUCT; open PRINTTABLE; open DEBUG; open ADDRESS; open UNIVERSALTABLE; open Universal; (* for tag etc. *) open RuntimeCalls; (* for POLY_SYS and EXC numbers *) open UTILITIES; val lengthW = ADDRESS.length; val length = List.length; (* gets a value from the run-time system; usually this is a closure, but sometimes it's an int. *) val ioOp : int -> machineWord = RunCall.run_call1 POLY_SYS_io_operation; val andb = Word8.andb and orb = Word8.orb infix 6 andb; infix 7 orb; (************* "types" constructors copied here to reduce garbage *********) fun isTypeVar (TypeVar _) = true | isTypeVar _ = false; fun isTypeConstruction (TypeConstruction _) = true | isTypeConstruction _ = false; fun isFunctionType (FunctionType _) = true | isFunctionType _ = false; fun isLabelled (LabelledType _) = true | isLabelled _ = false; fun isEmpty EmptyType = true | isEmpty _ = false; val emptyType = EmptyType; val badType = BadType; type typeConstructionForm = { name: string, value: typeConstrs ref, args: types list } (* A function type takes two types, the argument and the result. *) and functionTypeForm = { arg: types, result: types } (* An entry in a labelled record type. *) and labelledRecEntry = { name: string, typeOf: types } (* A fixed labelled record. *) and labelledRecForm = { recList: { name: string, typeof: types } list, frozen: bool }; fun typesTypeVar (TypeVar x) = x | typesTypeVar _ = raise Match; fun typesTypeConstruction (TypeConstruction x) = x | typesTypeConstruction _ = raise Match; fun typesFunctionType (FunctionType x) = x | typesFunctionType _ = raise Match; fun typesLabelled (LabelledType x) = x | typesLabelled _ = raise Match; fun ffArg ({arg,...} : functionTypeForm) = arg; fun ffResult ({result,...} : functionTypeForm) = result; fun lreName ({name,...} : labelledRecEntry) = name; fun lreTypeOf ({typeOf,...} : labelledRecEntry) = typeOf; fun lrfFrozen ({frozen,...} : labelledRecForm) = frozen; fun lrfRecList ({recList,...} : labelledRecForm) = recList; fun tcfArgs ({args,...} : typeConstructionForm) = args; fun tcfName ({name,...} : typeConstructionForm) = name; fun tcfValue ({value,...} : typeConstructionForm) = !value; (*************) (* Functions to construct the values. *) fun mkGconstr (name, typeof, code, nullary) = makeValueConstr (name, typeof, nullary, Global code); (* Global variable *) val mkGvar = makeGlobalV (* Local variable - Generated by the second pass. *) fun mkVar (name, typeof) = makeLocalV (name, typeof, ref 0, ref 0); (* Value in a local structure or a functor argument. May be simple value, exception or constructor. *) fun mkSelectedVar (Value { access = Formal addr, name, typeOf, class}, base) = (* If the argument is "formal" set the base to the base structure. *) Value{name=name, typeOf=typeOf, class=class, access=Selected{addr=addr, base=base}} | mkSelectedVar(selected, _) = selected (* global or overloaded? *); (* Construct a global exception. *) fun mkGex (name, typeof, code) = Value{ name = name, typeOf = typeof, access = Global code, class = Exception } (* Construct a local exception. *) fun mkEx (name, typeof) = Value{ name = name, typeOf = typeof, access = Local{addr = ref 0, level = ref 0}, class = Exception } (* Copy a datatype (if necessary), converting the constructors to selections on a base structure. This is used both when opening a structure and also for replicating a datatype. *) fun mkSelectedType(tcons: typeConstrs, newName: string, baseStruct: structVals option): typeConstrs = let (* Create a new constructor with the same unique ID. *) val typeID = tcIdentifier tcons; val newTypeCons = makeTypeConstrs(newName, tcTypeVars tcons, EmptyType, typeID, tcEquality tcons, tcLetDepth tcons); (* Copy the value constructors. *) fun copyAConstructor(Value{name=cName, typeOf, class, access}) = let (* Copy the types of value constructors replacing occurrences of the old type with the new one. This is not strictly necessary but improves printing. e.g. local datatype X = A | B in datatype Y = datatype X end; A; prints A: Y rather than A: X *) fun copyTypeCons (tcon : typeConstrs) : typeConstrs = if sameTypeId(tcIdentifier tcon, typeID) then newTypeCons else tcon; fun copyTyp (t : types) : types = copyType (t, fn x => x, (* Don't bother with type variables. *) copyTypeCons); val newType = copyTyp typeOf; val newAccess = case (access, baseStruct) of (* If we are opening a structure we must have a base structure and we turn Formal entries into Selected. If we are replicating a datatype within a signature the original constructors will be Formal. *) (Formal addr, SOME base) => Selected{base=base, addr=addr} | (Formal _, NONE) => access | _ => access; (* Probably already a global. *) in Value{name=cName, typeOf=newType, class=class, access=newAccess} end val newValConstrs = map copyAConstructor (tcConstructors tcons) in tcSetConstructors(newTypeCons, newValConstrs); newTypeCons end (*****************************************************************************) (* Representation of Exceptions (incomplete!) *) (*****************************************************************************) fun exnId (value : exn) : machineWord = loadWord (toAddress value, 0w0); fun exnName (value : exn) : string = unsafeCast (loadWord (toAddress value, 0w1)); fun exnValue (value : exn) : machineWord = unsafeCast (loadWord (toAddress value, 0w2)); val toExn : machineWord -> exn = unsafeCast; (*****************************************************************************) (* Representation of Datatype Constructors *) (*****************************************************************************) (* These are the possible representations of a value constructor. *) datatype representations = RefForm (* As for OnlyOne but must be a monotype. *) | UnitForm (* If the only value in an enumeration. *) | OnlyOne (* If only one constructor, there is no tag or box. *) (* Could be replaced by "UnboxedForm"? *) | EnumForm of int (* Enumeration - argument is the number. (short?) *) | BoxedForm (* Boxed but not tagged (only unary constructor) *) | UnboxedForm (* Unboxed and untagged (only unary constructor) *) | ConstForm of machineWord (* Constant - argument is a tagged value. *) | TaggedBox of int (* Union - tagged and boxed. i.e. the representation is a pair whose first word is the tag and second is the value. *) | TaggedTuple of int * int (* Union - tagged but with in-line tuple. i.e. for a tuple of size n the representation is a tuple of size n+1 whose first word contains the tag. *) (* This makes the isConsTest "fn x => not (isShort x)" rather than "fn x => x <> 0", but that shouldn't give any worse code. If it does, we'll have to reinstate ConsForm as a primitive. *) val NilForm = EnumForm 0; val ConsForm = UnboxedForm; (* Similarly, this makes the tests for UnitForm and OnlyOne more expensive, but we shouldn't be generating them anyway (especially as the tests seem buggy). That's what fancy compilation of pattern-matching does for you! Of course, if it doesn't work, we can always reinstate them. SPF 22/10/94 *) (* Don't do this ... val UnitForm = EnumForm 0; ... because it breaks the (hacky!) pretty-printing of arrays. (Array values are represented by a UnitForm value constructor; if we use an EnumForm instead, constrMatches fails, so we get a (handled) exception inside the pretty-printer. This is all very sad. The right fix would be to generalise use-defined pretty-printers to handle parameterised types, and add one of these for arrays. SPF 2/7/96 *) (* I've done that although whether it fixes this particular problem or not I don't know. DCJM Sept 2000. *) val arg1 = mkLoad (~1, 0); (* saves a lot of garbage *) val arg2 = mkLoad (~2, 0); (* Don't do this ... val OnlyOne = UnboxedForm; ... because that gives the wrong test if the value isn't boxed. SPF 22/10/94 *) local val mutableFlags = F_words orb F_mutable; fun abstract (doIt: codetree -> codetree) (name : string) : codetree = mkInlproc (doIt arg1, 0, 1, name); (* we use toShort to check that the tag actually fits in a 30-bit integer *) fun mkTag (tag:int) : codetree = mkConst (toMachineWord (toShort tag)); (* tag now moved into first word SPF 22/10/94 *) (* get the tag from a TaggedBox or ConstForm *) fun loadTag (u: machineWord) : machineWord = loadWord (toAddress u, 0w0); (* tag is first field *) (* get the data from a TaggedBox *) fun loadTaggedBoxedValue (u: machineWord) : machineWord = loadWord (toAddress u, 0w1); (* contents is second field *) (* get the data from a BoxedForm or a RefForm *) fun loadBoxedValue (u: machineWord) : machineWord = loadWord (toAddress u, 0w0); fun loadTaggedTupleValue (n: int) (u : machineWord) : machineWord = let val vec = alloc (toShort n, mutableFlags, toMachineWord 0); fun copyField i = let val w : machineWord = loadWord (toAddress u, toShort (i + 1)); in assignWord (toAddress vec, toShort i, w) end; fun copyFields i = if i < n then (copyField i; copyFields (i + 1)) else (); val U : unit = copyFields 0; val U : unit = lock vec; in toMachineWord vec end; fun identityApplyCode v = v; (* no-op *) fun boxApplyCode v = mkTuple [v]; (* Inject into a union. Generate as mkTuple(arg, tag). *) (* we use toShort to check that the tag actually fits in a 30-bit integer *) fun tagBoxApplyCode (tag:int) (v : codetree) = mkTuple [mkTag tag, v]; (* Inject into a tagged tuple - we could improve this if we knew that arg is an explicit tuple already, but the optimiser should do this anyway. I have also coded this using inline procedures with explicit applications because I can't work out how to make a well-formed block (because declartion addresses are *not* local to a block?) SPF 25/10/94 *) fun tagTupleCode (tag:int) (n:int) (name:string) : codetree = let (* copy n data fields out of ordinary record *) fun getFields i = if i < n then mkInd (i, arg1) :: getFields (i + 1) else []; in mkInlproc (mkTuple (mkTag tag :: getFields 0), 0, 1, name) end; fun tagTupleApplyCode (tag:int) (n:int) (arg:codetree) : codetree = mkEval (tagTupleCode tag n "", [arg], true); fun taggedTupleDestructCode (n:int) (arg:codetree) : codetree = let (* copy n data fields out of tagged record *) fun getFields i = if i <= n then mkInd (i, arg1) :: getFields (i + 1) else []; val proc = mkInlproc (mkTuple (getFields 1), 0, 1, "") in mkEval (proc, [arg], true) end; (* allocate 1 mutable word, initialise to "v"; do not evaluate "early" *) fun refApplyCode (v: codetree) = mkEval (mkConst (ioOp POLY_SYS_alloc_store), [mkConst (toMachineWord 1), mkConst (toMachineWord mutableFlags), v], false); (* If we need to make a "real" functions, here's how *) val refCode = abstract refApplyCode "ref"; (* val consCode = abstract identityApplyCode "::" *); val identityCode = abstract identityApplyCode; val boxCode = abstract boxApplyCode; fun tagBoxCode (tag:int) = abstract (tagBoxApplyCode tag); fun tagTupleCode (tag:int) (n:int) = abstract (tagTupleApplyCode tag n); fun testTag (tag: int) (v: codetree) = mkTestinteq (mkTag tag, v); fun testBoxedTag (tag: int) (v: codetree) : codetree = mkTestinteq (mkTag tag, mkInd (0, v)); (* tag is first field *) fun taggedBoxDestructCode (box : codetree) : codetree = mkInd (1, box); (* contents is second field of record *) (* Use loadWord not indirect because the optimiser reorders indirections. *) fun refDestructCode (v : codetree) : codetree = mkEval (mkConst (ioOp POLY_SYS_load_word), [v, CodeZero], false) (* NOT early *) fun testBoxed (v: codetree) : codetree = (* not (isShort v) *) mkEval (mkConst (ioOp POLY_SYS_not_bool), [mkEval (mkConst (ioOp POLY_SYS_is_short), [v], true)], true); fun boxedDestructCode (box : codetree) : codetree = mkInd (0, box); (* The run-time representation of the constructor's value *) fun constrMake (test: representations) (name: string) : codetree = case test of UnboxedForm => identityCode name | BoxedForm => boxCode name | TaggedBox tag => tagBoxCode tag name | TaggedTuple (tag, n) => tagTupleCode tag n name | RefForm => refCode | ConstForm c => mkConst c (* tagged value. *) | EnumForm tag => mkConst (toMachineWord (toShort tag)) | OnlyOne => identityCode name | UnitForm => CodeZero ; (* How to apply the constructor at run-time *) fun constrApply (test: representations) : codetree -> codetree = case test of UnboxedForm => identityApplyCode | BoxedForm => boxApplyCode | RefForm => refApplyCode | TaggedBox tag => tagBoxApplyCode tag | TaggedTuple (tag, n) => tagTupleApplyCode tag n | OnlyOne => identityApplyCode | _ => (fn arg => raise InternalError "constant can't be applied") (* The run-time test whether a value matches a constructor. *) fun constrMatch (test: representations) (value:codetree) : codetree = case test of UnboxedForm => testBoxed value | BoxedForm => testBoxed value | RefForm => CodeTrue | EnumForm tag => testTag tag value | TaggedBox tag => testBoxedTag tag value | TaggedTuple (tag, n) => testBoxedTag tag value | ConstForm c => testBoxedTag (Word.toIntX (* May be signed. *) (toShort (loadTag c))) value | OnlyOne => CodeTrue | UnitForm => CodeTrue ; (* The compile-time test whether a value matches a constructor. *) (* fun constrMatches (test: representations) (value: word) : bool = case test of UnboxedForm => not (isShort value) | BoxedForm => not (isShort value) | RefForm => true | EnumForm tag => wordEq (value, toMachineWord tag) | TaggedBox tag => wordEq (loadTag value, toMachineWord tag) | TaggedTuple (tag, n) => wordEq (loadTag value, toMachineWord tag) | ConstForm c => wordEq (loadTag value, loadTag c) | OnlyOne => true | UnitForm => true ; *) (* The run-time code to destruct a construction. *) (* shouldn't the CodeZero's raise an exception instead? *) fun constrDestruct (test: representations) (value: codetree) : codetree = case test of UnboxedForm => identityApplyCode value | BoxedForm => boxedDestructCode value | RefForm => refDestructCode value | TaggedBox tag => taggedBoxDestructCode value | TaggedTuple (tag, n) => taggedTupleDestructCode n value | OnlyOne => identityApplyCode value | EnumForm tag => CodeZero (* To keep optimiser happy. *) | ConstForm c => CodeZero (* (rather than raising an exception) *) | UnitForm => CodeZero ; (* The compile-time function to destruct a construction. *) (* fun constrFetch (test: representations) (value: machineWord) : machineWord = case test of UnboxedForm => value | BoxedForm => loadBoxedValue value | RefForm => loadBoxedValue value | TaggedBox tag => loadTaggedBoxedValue value | TaggedTuple (tag,n) => loadTaggedTupleValue n value | OnlyOne => value | EnumForm tag => loadTag value (* shouldn't occur, but ... *) | ConstForm c => value (* shouldn't occur, but ... *) | UnitForm => value (* occurs for arrays! *) ; *) in (* Constructors are now represented as run-time values. A nullary constructor is a pair consisting of a test function and the constructor value. A unary constructor is a triple: a test function, an injection function and a projection function. Previously constructors were handled entirely at compile with the appropriate functions inserted whenever a constructor was used. This worked fine except in one case: when a datatype was used in a structure we couldn't use the optimal representation because it might match a datatype in a signature and we needed the same representation in both cases. This arises if we have a datatype such as type t = int * int datatype s = X | Y of t We can use an optimised representation because we know that Y constructors are always boxed. If we have type t = int datatype s = X | Y of t we can't do that and have to create tagged pairs for Y values. Unfortunately we could pass either of these to a functor expecting a signature of the form sig type t datatype s = X | Y of t end If we handle constructors entirely at compile time we are forced to use the same representation for Y constructors in both cases. By passing the constructors as run-time values we can use different representations. This actually costs very little at run-time because functor are inlined so the constructor functions become inserted inline. DCJM 18/5/01. *) fun createNullaryConstructor (test: representations, name: string): codetree = let val code = mkTuple[mkInlproc(constrMatch test arg1, 0, 1, name), (* Test function. *) constrMake test name (* Value. *)] in (* Code generate the tuple now. This saves us having multiple occurrences of the code but more importantly allows us to be able to print values of this datatype (printstruct uses evalue and that only works if we have a constant). *) genCode (code, [] (* No debugging output *)) () end fun createUnaryConstructor(test: representations, name: string): codetree = let val code = mkTuple[mkInlproc(constrMatch test arg1, 0, 1, name), (* Test function. *) mkInlproc(constrApply test arg1, 0, 1, name), (* Injection function. *) mkInlproc(constrDestruct test arg1, 0, 1, name) (* Projection function. *)] in (* Code generate the tuple now. *) genCode (code, [] (* No debugging output *)) () end (* Construct a nex execption identifier - it's really just a unit ref. *) fun mkExIden () : codetree = refApplyCode CodeZero; end; (* RefForm is used for "ref" (only). We use various representations of datatype / abstype constructors. Nullary constructors are represented as: UnitForm (if it's the only constructor in the datatype) EnumForm (if there's no more than one unary constructor) ConstForm (otherwise) Unary constructors are represented as: OnlyOne (if it's the only constructor in the datatype) UnboxedForm (if it's the only unary constructor, applied to a tuple) TaggedTuple (if it's not the only unary constructor, applied to a tuple, and we don't need backwards compatibility) BoxedForm (if it's the only unary constructor) TaggedBox (otherwise) Note that we can't use UnboxedForm/TaggedTuple if the datatype might appear in a signature, because the signature might be ambiguous about whether the argument is a tuple or not. In these cases, we always use BoxedForm/TaggedBox instead. Note that we use ConstForm, not EnumForm, for nullary constructors when the unary constructors are represented as TaggedTuple/TaggedBox because that allows the TaggedBox test to be: fn w => wordEq (loadWord (w,0), tag) rather than: fn w => not (isShort w) andalso wordEq (loadWord (w,0), tag) In my ignorance, I tried combining EnumForms with TaggedBoxes *without* changing the TaggedBox test and got a lot of core dumps as my reward (the machine didn't like fetching the tag from address 5!). SPF 20/10/94 *) datatype constructorKind = Nullary (* a nullary constructor *) | UnaryGeneric (* a normal unary constructor *) | UnaryFunction (* unary constructor applied to a function *) | UnaryTupled of int (* a unary constructor applied to a tuple of size n *) ; (* Make an object with the appropriate tag. Doing it here means we only do it once for this object. *) fun genConstForm (n :int) : representations = let (* In the new datatype format, I've moved the tag word, so we only need a one-word object. SPF 26/5/95 *) val vec : address = alloc (0w1, F_words, toMachineWord n); val U : unit = lock vec; in ConstForm (toMachineWord vec) end; (* Choose tags in the sequence 0, ~1, 1, ~2, 2, ... because that maximises the chance of the tag being implemented by "immediate" data in the low-level generator. Note this means that "bool" gets a *different* representation than what its natural datatype declaration would give! Of course, we can't do this for the "Old" representations anyway. SPF 18/2/1998 *) fun nextTag n = if n < 0 then ~ n else ~ (n + 1); (* We use this version if all the constructors are nullary (i.e. constants) except possibly one. The (at most one) unary constructor is represented by the boxed value and the nullary constructors by untagged integers. *) (* Note that "UnaryTupled 0" (which would arise as a result of a declaration of the form datatype t = A of () | ... ) can't be represented as "UnboxedForm" because "{}" is represented as a short (unboxed) integer. *) fun chooseOptimisedRepr1 n [] = [] | chooseOptimisedRepr1 n (h :: t) = case h of (Nullary, name) => createNullaryConstructor(EnumForm n, name) :: chooseOptimisedRepr1 (nextTag n) t | (UnaryGeneric, name) => createUnaryConstructor(BoxedForm, name) :: chooseOptimisedRepr1 n t | (UnaryFunction, name) => createUnaryConstructor(UnboxedForm, name) :: chooseOptimisedRepr1 n t | (UnaryTupled 0, name) => createUnaryConstructor(BoxedForm, name) :: chooseOptimisedRepr1 n t | (UnaryTupled _, name) => createUnaryConstructor(UnboxedForm, name) :: chooseOptimisedRepr1 n t (* We use this version there's more than 1 unary constructor. *) (* With this representation constructors of small tuples make tuples of size n+1 whose first word is the tag. Nullary constructors are represented by single word objects containing the tag. *) fun chooseOptimisedRepr2 n [] = [] | chooseOptimisedRepr2 n (h :: t) = let val repr = case h of (Nullary, name) => createNullaryConstructor(genConstForm n, name) | (UnaryGeneric, name) => createUnaryConstructor(TaggedBox n, name) | (UnaryFunction, name) => createUnaryConstructor(TaggedBox n, name) | (UnaryTupled i, name) => createUnaryConstructor( if i <= 4 (*!maxPacking*) then TaggedTuple (n, i) else TaggedBox n, name) in repr :: chooseOptimisedRepr2 (nextTag n) t end; fun getTupleKind t = case t of LabelledType {recList = [{typeof=t', ...}], frozen = true, ...} => (* Singleton records are always represented simply by the value. *) getTupleKind t' | LabelledType {recList, frozen = true, ...} => UnaryTupled (length recList) | FunctionType _ => UnaryFunction | TypeConstruction {name, value, args} => let val cons = pling value val equiv = tcEquivalent cons; in (* We may have a type equivalence or this may be a datatype. *) if not (isEmpty equiv) then getTupleKind (makeEquivalent(cons, args)) else if sameTypeId (tcIdentifier cons, tcIdentifier refType) then UnaryGeneric (* A tuple ref is NOT the same as the tuple. *) else (* Datatype. For the moment we only consider datatypes with a single constructor since we want to find the width of the tuple. At present we simply return UnaryGeneric for all other cases but it might be helpful to return a special result when we have a datatype which we know will always be boxed. *) case tcConstructors cons of [Value{typeOf, class=Constructor{nullary=false}, ...}] => (* This may be a polymorphic datatype in which case we have to invert the constructor to find the base type. e.g. we may have an instance (int*int) t where t was declared as datatype 'a t = X of 'a .*) getTupleKind(constructorResult(typeOf, args)) | _ => UnaryGeneric end | _ => UnaryGeneric (* This now creates the functions as well as choosing the representation. *) fun chooseConstrRepr cs = let fun checkArgKind (name, EmptyType) = (Nullary, name) | checkArgKind (name, argType) = (getTupleKind argType, name) val kinds = map checkArgKind cs; fun chooseRepr [(Nullary, name)] = [createNullaryConstructor(UnitForm, name)] | chooseRepr [(UnaryGeneric, name)] = [createUnaryConstructor(OnlyOne, name)] | chooseRepr [(UnaryFunction, name)] = [createUnaryConstructor(OnlyOne, name)] | chooseRepr [(UnaryTupled _, name)] = [createUnaryConstructor(OnlyOne, name)] | chooseRepr l = let val unaryCount = List.foldl(fn((Nullary, _), n) => n | (_,n) => n+1) 0 l in (* tags now allocated from 0 (SPF 22/10/94) *) if unaryCount <= 1 then chooseOptimisedRepr1 0 l (* can save the box *) else chooseOptimisedRepr2 0 l (* can use tagged tuples *) end; in chooseRepr kinds end; (* RefForm, NilForm and ConsForm are only used for built-in types *) (*****************************************************************************) (* Standard values and exceptions. *) (*****************************************************************************) (* Nil and :: are used in parsetree for lists constructed using [ ... ] and are also used for initialisation. *) local val listTypeVars = tcTypeVars listType; val alpha = hd listTypeVars; val alphaList = mkTypeConstruction ("list", listType, listTypeVars); val consType = mkFunctionType (mkProductType [alpha, alphaList], alphaList); in val nilConstructor = mkGconstr ("nil", alphaList, createNullaryConstructor(NilForm, "nil"), true); val consConstructor = mkGconstr ("::", consType, createUnaryConstructor(ConsForm, "::"), false); end; (* Create exception values - Small integer values are used for run-time system exceptions but only (currently) up to 22. *) val bindExceptionVal = mkConst (toMachineWord EXC_Bind); val matchExceptionVal = mkConst (toMachineWord EXC_Match); (*****************************************************************************) (* Look-up functions. *) fun mkEnv x = let val Env e = makeEnv x in e end (* Look up a structure. *) fun lookupStructure (kind, {lookupStruct:string -> structVals option}, name, errorMessage) = let fun lookupStr name secondary = let val {first = prefix, second = suffix} = splitString name; val strLookedUp = if prefix = "" then lookupStruct suffix else let (* Look up the first part in the structure environment. *) val str = lookupStructure ("Structure", {lookupStruct=lookupStruct}, prefix, errorMessage); in (* If the structure is not there the value can't be. *) if isUndefinedStruct str then SOME undefinedStruct else secondary str suffix (* Look up in it and select. *) end in case strLookedUp of SOME s => s | NONE => (* Not declared? *) (errorMessage (kind ^ " (" ^ suffix ^ ") has not been declared" ^ (if prefix = "" then "" else " in structure " ^ prefix)); undefinedStruct) end (* lookupStr *) in lookupStr name (fn baseStruct => let val look = #lookupStruct (mkEnv (structSignat baseStruct)); in fn name => case look name of SOME s => SOME(makeSelectedStruct (s, baseStruct)) | NONE => NONE end) end; fun lookupAny (name : string, primary: string -> 'a option, lookupStruct:string -> structVals option, secondary: structVals -> string -> 'a option, kind, undefined:'a, errorMessage) : 'a = let val {first = prefix, second = suffix} = splitString name; val found = if prefix = "" then primary suffix else let (* Look up the first part in the structure environment. *) val str = lookupStructure ("Structure", {lookupStruct=lookupStruct}, prefix, errorMessage); in (* If the structure is not there the value can't be. *) if isUndefinedStruct str then SOME undefined else secondary str suffix (* Look up in it and select. *) end in case found of SOME v => v | NONE => (* Not declared? *) (errorMessage (kind ^ " (" ^ suffix ^ ") has not been declared" ^ (if prefix = "" then "" else " in structure " ^ prefix)); undefined) end (* lookupAny *) (* Look up a structure but return the actual structure even if it is a formal. *) fun lookupStructureDirectly (kind, {lookupStruct}, name, errorMessage) = lookupAny (name, lookupStruct, lookupStruct, fn baseStruct => #lookupStruct (mkEnv (structSignat baseStruct)), kind, undefinedStruct, errorMessage); (* Look up a value, possibly in a structure. If it is in a structure we may have to apply a selection. *) fun lookupValue (kind, {lookupVal,lookupStruct}, name, errorMessage) = lookupAny (name, lookupVal, lookupStruct, fn baseStruct => let val look = #lookupVal (mkEnv (structSignat baseStruct)); in (fn name => case look name of SOME v => SOME(mkSelectedVar (v, baseStruct)) | NONE => NONE) end, kind, undefinedValue, errorMessage); fun lookupTyp ({lookupType,lookupStruct}, name, errorMessage) = lookupAny (name, lookupType, lookupStruct, (* Types do not require a selection from the source structure since there is no actual value. *) fn s => #lookupType (mkEnv (structSignat s)), "Type constructor", undefType, errorMessage); (* Printing. *) type nameSpace = { lookupVal: string -> values option, lookupType: string -> typeConstrs option, lookupFix: string -> fixStatus option, lookupStruct: string -> structVals option, lookupSig: string -> signatures option, lookupFunct: string -> functors option, enterVal: string * values -> unit, enterType: string * typeConstrs -> unit, enterFix: string * fixStatus -> unit, enterStruct: string * structVals -> unit, enterSig: string * signatures -> unit, enterFunct: string * functors -> unit, allVal: unit -> (string*values) list, allType: unit -> (string*typeConstrs) list, allFix: unit -> (string*fixStatus) list, allStruct: unit -> (string*structVals) list, allSig: unit -> (string*signatures) list, allFunct: unit -> (string*functors) list }; val nullEnvironment : nameSpace = { lookupVal = fn (s: string) => NONE, lookupType = fn (s: string) => NONE, lookupFix = fn (s: string) => NONE, lookupStruct = fn (s: string) => NONE, lookupSig = fn (s: string) => NONE, lookupFunct = fn (s: string) => NONE, enterVal = fn _ => (), enterType = fn _ => (), enterFix = fn _ => (), enterStruct = fn _ => (), enterSig = fn _ => (), enterFunct = fn _ => (), allVal = fn () => [], allType = fn () => [], allFix = fn () => [], allStruct = fn () => [], allSig = fn () => [], allFunct = fn () => [] } (* Debug tag for the name space for the printer environment. *) val printSpaceTag: nameSpace tag = Universal.tag() (* Checks to see whether a labelled record is in the form of a product i.e. 1=, 2= We only need this for prettyprinting. *) fun isProductType(LabelledType{recList, frozen=true, ...}) = let fun isRec [] n = true | isRec ({name, typeof} :: l) n = name = Int.toString n andalso isRec l (n+1) in isRec recList 1 end | isProductType _ = false; (* Find an exception with the given identifier. *) fun findException (allValues: values list, allStructs: structVals list) (w: machineWord): values option = let fun searchList f [] = NONE | searchList f (hd::tl) = case f hd of NONE => searchList f tl | result => result open ADDRESS (* Test a value to see if it's the exception we want. *) fun testValue base valu = case valu of (* Top-level exception *) Value{class = Exception, access = Global code, ...} => if wordEq(evalue code, w) then SOME valu else NONE (* Exception in a structure. *) | Value{class = Exception, access=Formal addr, ...} => if wordEq(loadWord(toAddress base, toShort addr), w) then SOME valu else NONE | _ => NONE (* Search for the exception in a structure. *) fun searchSpace(u: univTable, base: machineWord) = let (* Get a list of all the entries in this space. *) val decList = iterList (univOver u) fun findItem (s: string, u: universal): values option = if tagIs valueVar u (* Values *) then testValue base (tagProject valueVar u) else if tagIs structVar u then (* Search this structure recursively. *) let val str = tagProject structVar u val access = structAccess str in case access of Global code => (* Top-level structures. *) searchSpace(sigTab (structSignat str), evalue code) | Formal addr => (* Sub-structures. *) searchSpace(sigTab (structSignat str), loadWord(toAddress base, toShort addr)) | _ => NONE end else NONE (* Not a structure or a value. *) in searchList findItem decList end val globalBase = ADDRESS.toMachineWord 0 (* Unused. *) in (* First try the global values. *) case searchList (testValue globalBase) allValues of ex as SOME _ => ex (* found *) | NONE => (* Not found; try in the structures. *) searchList ( fn s => case structAccess s of Global code => searchSpace(sigTab (structSignat s), evalue code) | _ => NONE (* Should just be globals. *)) allStructs end (* This module prints a structure by following the type structure. *) fun printStruct (value:machineWord, types, depth, pprint:prettyPrinter, nameSpace: nameSpace) = let fun exceptionSearch (w: machineWord) : values option = let val values = #allVal nameSpace () and strs = #allStruct nameSpace () (* Filter out the strings. Order doesn't matter. *) fun getVal [] l = l | getVal ((_, v) :: r) l = getVal r (v::l) in findException(getVal values [], getVal strs []) w end val { lookupFix, lookupExnById} = { lookupFix = #lookupFix nameSpace, lookupExnById = exceptionSearch } fun pVec (num, value : machineWord, [], separator, leftPrec, rightPrec, depth) doPrint = () | pVec (num, value : machineWord, [t], separator, leftPrec, rightPrec, depth) doPrint = if num = 0 (* optimised unary tuples - no indirection! *) then doPrint (value, t, depth, rightPrec) else let val addr : address = toAddress value; val entryValue : machineWord = loadWord (addr, toShort num); in doPrint (entryValue, t, depth, rightPrec) end | pVec (num, value, t::ts, separator, leftPrec, rightPrec, depth) doPrint = if depth <= 0 then ppAddString pprint "..." else let val addr : address = toAddress value; val entryValue : machineWord = loadWord (addr, toShort num); in doPrint (entryValue, t, depth, leftPrec); (* Preceed infix ops by a space. *) if separator <> "," then ppBreak pprint (1, 0) else (); ppAddString pprint separator; ppBreak pprint (1, 0); pVec (num + 1, value, ts, separator, leftPrec, rightPrec, depth-1) doPrint end (* pVec *); fun prints (value : machineWord, types, depth, precedence, objList) : unit = let (* Print out the contents of a tuple or labelled record. *) (* Print the constructor in infix notation if appropriate. *) fun printInfixed(constrName, argType, args, objList) = let val maxPrec = 999; val thisPrecedence = getOpt(lookupFix constrName, Nonfix); (* Some of these need to be parenthesised. We replace values at level 1 by "..." rather than printing "(...)". *) fun mayParenthesise true f = if depth <= 1 then ppAddString pprint "..." else ( ppAddString pprint "("; f (depth-1); ppAddString pprint ")" ) | mayParenthesise false f = f depth in ppBeginBlock pprint (3, false); case (thisPrecedence, argType) of (Infix precNo, LabelledType{recList=recList as [{name="1", ...}, {name="2", ...}], ...}) => mayParenthesise (precNo < precedence) (fn depth => pVec (0, args, recList, constrName, precNo, precNo + 1, depth) (fn (value, {name, typeof}, depth, precedence) => prints (value, typeof, depth, precedence, objList) )) | (InfixR precNo, LabelledType{recList=recList as [{name="1", ...}, {name="2", ...}], ...}) => mayParenthesise (precNo < precedence) (fn depth => pVec (0, args, recList, constrName, precNo + 1, precNo, depth) (fn (value, {name, typeof}, depth, precedence) => prints (value, typeof, depth, precedence, objList) )) | _ => (* This constructor is not infix - print it in prefix notation. If the constructor is already applied to something we must parenthesise it. The argument precedence is set to infinity - i.e. any constructors must be in parentheses. *) mayParenthesise (precedence = maxPrec) (fn depth => ( (* Must precede infix constructors by ``op''. *) case thisPrecedence of Nonfix => () | _ => (ppAddString pprint "op"; ppBreak pprint (1, 0)); ppAddString pprint constrName; ppBreak pprint (1, 0); prints (args, argType, depth, maxPrec, objList) )) ; ppEndBlock pprint () end (* printInfixed *); (* Prints out a type construction by undoing the value constructors *) fun printConstruction typeArgs [] = raise InternalError "none matches" (* Shouldn't happen *) | printConstruction typeArgs (Value{name, typeOf, access=Global code, class = Constructor{nullary}} :: constrs) = let (* Try this constructor *) open ADDRESS val base = toAddress (evalue code) val test = loadWord(base, 0w0) (* First word is the test. *) val matches: bool = unsafeCast test value in if not matches (* try the next *) then printConstruction typeArgs constrs (* matches *) else if nullary then (* Just a constant *) ppAddString pprint name (* Not just a constant. *) else if depth <= 0 then ppAddString pprint "..." else let (* The test succeeded so this is the constructor that made this value - get the value out. *) val project = loadWord(base, 0w2) (* Third word is projection fn. *) val v : machineWord = unsafeCast project value (* Find the argument type which gives this result when the constructor is applied. If we have, for example, a value of type int list and we have discovered that this is a `::' node we have to work back by comparing the type of `::' ('a * 'a list -> 'a list) to find the argument of the constructor (int * int list) and hence how to print it. (Actually `list' is treated specially). *) val resType = constructorResult (typeOf, typeArgs); (* If the value we get back from undoing the constructor is the same as the constructed value, i.e. applying the constructor simply returns the argument, we don't want to add this value to the list. If we do we won't be able to print the constructed value. *) val newList = if ADDRESS.wordEq(v, value) then objList else value :: objList in printInfixed(name, resType, v, newList) end end (* Normally a datatype constructor will be global. If, though, we call PolyML.print within a functor on a datatype passed in as a functor argument the code to test for constructor will be in the actual argument. We could generate code to handle that case but it's probably not worth it. *) | printConstruction typeArgs _ = ppAddString pprint "?" (* printConstruction *) in (* If we have a circular structure we could end up looping until we reach the maximum depth. Instead we check for any structure we've seen before and just print .... We really only need to include mutable structures in the list because only they can form loops but it's easier to include everything. *) if List.exists (fn v => ADDRESS.wordEq(value, v)) objList then ppAddString pprint "..." else case types of TypeVar tyVar => let (* The type variable may be bound to something *) val tyVal = tvValue tyVar in if isEmpty tyVal then ppAddString pprint "?" else prints (value, tyVal, depth, precedence, objList) end | TypeConstruction{value=tval, args, ...} => let val constr = pling tval in if isUnsetId (tcIdentifier constr) then ppAddString pprint "?" (* Type-specific printing is all handled by the libraries now. *) (* Although unit is a type construction it is treated as equivalent to the empty labelled record. That means we can't install a pretty printer for it using install_pp. *) else if sameTypeId (tcIdentifier constr, tcIdentifier unitType) then ppAddString pprint "()" (* Leave this one, at least for the moment, since we need to be able to look the exception up in the environment. *) else if sameTypeId (tcIdentifier constr, tcIdentifier exnType) then let (* Exception. *) val exn : exn = unsafeCast value; val name : string = exnName exn; (* In order to be able to print this exception we need to find the type of any arguments. Previously we used the name to search for a global exception with that name but that doesn't help if the exception is in a structure. We now do a search of the complete name space. *) in case lookupExnById (exnId exn) of SOME exc => let val typeof = valTypeOf exc in if isEmpty typeof then ppAddString pprint name else printInfixed(name, typeof, exnValue exn, value::objList) end | NONE => ppAddString pprint name (* Just put the name. *) end else (* All the others. *) let (* Use the given print function if it is in the table, otherwise use the default. *) (* If we have a print function installed for this type constructor we have to pass it the functions to print the argument types (if any). *) fun makeArg argType = let fun printArg(v, depth) = prints(v, argType, depth, ~1, value::objList) in mkConst(toMachineWord printArg) end (* The easiest way to make a tuple is to use Codetree.mkTuple which makes a tuple immediately if all the arguments are constants. *) val argTuple = case args of [] => CodeZero | [t] => makeArg t | args => mkTuple(map makeArg args) in getPrint (tcIdentifier constr) pprint depth (evalue argTuple) value handle Subscript => ( if not (null (tcConstructors constr)) then printConstruction args (tcConstructors constr) else if not (isEmpty (tcEquivalent constr)) (* May be an alias *) then prints (value, makeEquivalent (constr, args), depth, precedence, objList) else ppAddString pprint "?" ) end (* isTypeConstruction *) end | FunctionType _ => ppAddString pprint "fn" | LabelledType {recList, ...} => if depth <= 0 then ppAddString pprint "..." else if isProductType types then (* If it is a record of the form {1=, 2=, ... } *) ( ppBeginBlock pprint (3, true); (* Print them as (t1, t2, t3) .... *) ppAddString pprint "("; pVec (0, value, recList, ",", ~1, ~1, depth) (fn (value, {name, typeof}, depth, precedence) => prints (value, typeof, depth, precedence, objList) ); ppAddString pprint ")"; ppEndBlock pprint () ) else ( ppBeginBlock pprint (3, true); (* Print them as ( a = X, b = Y ... ) *) ppAddString pprint "{"; pVec (0, value, recList, ",", ~1, ~1, depth) (fn (value : machineWord, {name, typeof}, depth, precedence) => ( ppBeginBlock pprint (0, false); ppAddString pprint (name ^ " ="); ppBreak pprint (1, 0); (* Don't add the current value to objList here. We may have an optimised unary tuple in which case the value will be the same as the one we've just had. Since we're only really concerned about references making loops that should be fine. *) prints (value, typeof, depth - 1, ~1, objList); ppEndBlock pprint () ) ); ppAddString pprint "}"; ppEndBlock pprint () ) | _ => ppAddString pprint "" end (* prints *); in prints (value, types, depth, ~1, []) end (* printStruct *); fun displayFixStatus (Nonfix, _, pprint: prettyPrinter) = ppAddString pprint "nonfix" | displayFixStatus (Infix prec, _, pprint) = ( ppBeginBlock pprint (0, false); ppAddString pprint "infix"; ppBreak pprint (1, 0); ppAddString pprint (Int.toString prec); ppEndBlock pprint () ) | displayFixStatus (InfixR prec, _, pprint) = ( ppBeginBlock pprint (0, false); ppAddString pprint "infixr"; ppBreak pprint (1, 0); ppAddString pprint (Int.toString prec); ppEndBlock pprint () ); (* displays value as a block, with no external formatting *) fun displayValues (Value{name, typeOf, class, access}, depth, pprint: prettyPrinter, nameSpace, parameters) = if depth <= 0 then ppAddString pprint "..." else case (class, access) of (SimpleValue, Global code) => ( ppBeginBlock pprint (0, false); ppAddString pprint "val"; ppBreak pprint (1, 0); ppAddString pprint (name ^ " ="); ppBreak pprint (1, 3); printStruct (evalue code, typeOf, depth, pprint, nameSpace) handle SML90.Interrupt => raise SML90.Interrupt | _ => ppAddString pprint ""; (* evalue will fail for "undefined" *) ppBreak pprint (1, 0); (* Put in a block to keep the colon with the type if we've had to break the block. *) ppBeginBlock pprint (0, false); ppAddString pprint ":"; ppBreak pprint (1, 3); display (typeOf, depth, pprint, parameters); ppEndBlock pprint (); ppEndBlock pprint () ) | (SimpleValue, _) => (* overloaded values only arise if we open PolyML. *) ( ppBeginBlock pprint (0, false); ppAddString pprint ("val " ^ name ^ " :"); ppBreak pprint (1, 3); display (typeOf, depth, pprint, parameters); ppEndBlock pprint () ) | (Exception, _) => ( ppBeginBlock pprint (0, false); ppAddString pprint "exception"; ppBreak pprint (1, 1); ppAddString pprint name; if not (isEmpty typeOf) then (* May not be parameterised. *) ( ppBreak pprint (1, 1); ppAddString pprint "of"; ppBreak pprint (1, 3); display (typeOf, depth, pprint, parameters) ) else (); ppEndBlock pprint () ) | _ => () (* Print global values. This is passed through the bootstrap and used in the debugger. *) fun printValues (Value{name, typeOf, class, access}, depth, pprint: prettyPrinter, nameSpace) = case (class, access) of (SimpleValue, Global code) => printStruct (evalue code, typeOf, depth, pprint, nameSpace) | _ => () (* Prints "sig ... end" as a block, with no external formatting *) fun displaySig (str, depth : int, pprint: prettyPrinter, space : int, nameSpace, parameters) : unit = let fun break () : unit = ppBreak pprint (1, 2); fun displaySpec (name, value) : unit = if (tagIs signatureVar value) then ( break (); displaySignatures (tagProject signatureVar value, depth - 1, pprint, nameSpace, parameters) ) else if (tagIs structVar value) then ( break (); displayStructures (tagProject structVar value, depth - 1, pprint, nameSpace, parameters) ) else if (tagIs typeConstrVar value) then ( break (); displayTypeConstrs (tagProject typeConstrVar value, depth, pprint, parameters) ) else if (tagIs valueVar value) then let (* Only print variables. Constructors are printed with their type. *) val value = tagProject valueVar value; in case value of Value{class = Constructor _, ...} => () | _ => ( break (); (* We lookup the infix status and any exception in the global environment only. Infix status isn't a property of a structure and it's too much trouble to look up exceptions in the structure. *) displayValues (value, depth, pprint, nameSpace, parameters) ) end else if (tagIs fixVar value) then ( break (); displayFixStatus (tagProject fixVar value, depth, pprint) ) else () (* end displaySpec *) in ppBeginBlock pprint (0, true); ppAddString pprint "sig"; if depth <= 1 (* If the depth is 1 each of the calls to displaySpec will print "..." so we replace them all by a single "..." here. *) then (ppBreak pprint (1, 0); ppAddString pprint "...") else let val declist = ref nil : (string * universal) list ref fun addToList nv = declist := nv :: !declist (* For the moment order them by name. We may change this to order primarily by kind and secondarily by name. *) fun order (s1: string, _) (s2: string, _) = s1 <= s2 in (* Put all the entries into a list. *) for (univOver (sigTab str)) addToList; (* Sort the list and print it. *) List.app displaySpec (quickSort order (!declist)) end; ppBreak pprint (1, 0); ppAddString pprint "end"; ppEndBlock pprint () end (* displaySig *) (* Print: signature S = sig .... end *) and displaySignatures (str, depth : int, pprint: prettyPrinter, nameSpace, parameters) : unit = if depth <= 0 then ppAddString pprint "..." else ( ppBeginBlock pprint (0, false); ppAddString pprint ("signature " ^ sigName str ^ " ="); ppBreak pprint (1, 2); displaySig (str, depth, pprint, 1, nameSpace, parameters); ppEndBlock pprint () ) (* print structure in a block (no external spacing) *) and displayStructures (str, depth, pprint: prettyPrinter, nameSpace, parameters) = let in if depth <= 0 then ppAddString pprint "..." else if isUndefinedStruct str then ppAddString pprint "" else let val structureName = structName str; val signatureName = sigName (structSignat str); in ppBeginBlock pprint (0, false); ppAddString pprint ("structure " ^ structureName ^ " :"); ppBreak pprint (1, 2); if signatureName <> "" then ppAddString pprint signatureName else displaySig (structSignat str, depth - 1, pprint, 1, nameSpace, parameters); ppEndBlock pprint () end end; fun displayFunctors (funct, depth, pprint: prettyPrinter, nameSpace, parameters) = if depth <= 0 then ppAddString pprint "..." else ( ppBeginBlock pprint (0, false); ppAddString pprint ("functor " ^ (functorName funct) ^ " ("); ppBreak pprint (0, 0); if structName (functorArg funct) <> "" then ( ppAddString pprint ((structName (functorArg funct)) ^ " :"); ppBreak pprint (1, 3) ) else (); displaySig (structSignat (functorArg funct), depth - 1, pprint, 0, nameSpace, parameters); ppAddString pprint ") :"; ppBreak pprint (1, 3); displaySig (functorResult funct, depth - 1, pprint, 1, nameSpace, parameters); ppEndBlock pprint () ); (* Code-generation. *) (* Code-generate the values. *) fun codeStruct (str, level) = (* Global structures have no code value. Instead the values are held in the values of the signature. *) if isUndefinedStruct str then CodeNil else codeAccess (structAccess str, level) and codeAccess (Global code, _) = code | codeAccess (Local{addr=ref locAddr, level=ref locLevel}, level) = let val levelDiff = level - locLevel; in if locAddr = 0 then mkRecLoad (levelDiff - 1) (* Recursive *) else mkLoad (locAddr, levelDiff) (* Argument or local *) end | codeAccess (Selected{addr, base}, level) = (* Select from a structure. *) mkInd (addr, codeStruct (base, level)) | codeAccess (acc, level) = raise InternalError "No access" (* codeAccess *); (* Raises an exception. *) fun raiseException exName exIden parm = mkRaise (mkTuple [exIden,mkStr exName,parm]); (* Raise match and bind exceptions. *) val raiseMatch = raiseException "Match" matchExceptionVal CodeZero; val raiseBind = raiseException "Bind" bindExceptionVal CodeZero; (*****************************************************************************) (* Equality function compiler *) (*****************************************************************************) (* This generates code to handle equality (i.e. = and <>) by generating functions based on the type of the arguments to be compared. For parameterised datatypes (e.g. 'a list) that means generating functions which are parameterised on the equality function for 'a. In a few cases (e.g where the type is a functor argument) we can't generate the function and we fall back to the general purpose structure equality function. The optimiser (codetree) does a good job of optimising the code and turning the functions into loops. *) fun genEqualityFunction(instance: types, level: int): codetree = let (* To reduce the size of the code we pass down the kind of result we want. *) datatype reskind = ApplyFun of ({level:int, myAddr: int}->codetree)*({level:int, myAddr: int}->codetree) | MakeFun (* If we get a function back it may take a pair as an argument or it may take two arguments. *) datatype resfun = PairArg of {level:int, myAddr: int} -> codetree | TwoArgs of {level:int, myAddr: int} -> codetree val baseLevel = level+1 local val addrs = ref 0 in fun mkaddrs () = (addrs := !addrs + 1; !addrs) end (* The list of functions. These are potentially mutually recursive. *) val generatedFuns: codetree list ref = ref [] (* The list of addresses of functions for datatypes. This allows us to make recursive calls for recursive datatypes and also to avoid generating the same function twice. e.g. datatype t = A of s | B and s = C of t | D. *) val datatypeList: (int * typeId) list ref = ref [] (* If we have a function we either return it or we apply it. The function will always take a single argument as a tuple. *) fun returnFun (f: resfun, MakeFun) = f | returnFun (TwoArgs f, ApplyFun(a1, a2)) = PairArg(fn lA => mkEval(f lA, [a1 lA, a2 lA], true)) | returnFun (PairArg f, ApplyFun(a1, a2)) = PairArg(fn lA => mkEval(f lA, [mkTuple[a1 lA, a2 lA]], true)) (* If we have a piece of code we may need to wrap it in a function. This is generally used to create the code for handling tuples. When creating a function this previously attempted to add the function to the generatedFuns list but that turned out to have a bug. If we have a tuple inside a parameterised datatype e.g. datatype 'a t = X of 'a * ... then we must make sure that we create the tuple equality function inside the equality function for t otherwise it won't be able to find the equality function for 'a. *) fun returnCode(mkCode, ApplyFun(a1, a2)) = PairArg(fn l => mkCode(a1, a2, l)) | returnCode(mkCode, MakeFun) = let fun wrappedCode {level, myAddr} = let val addr = mkaddrs() (* Should never be used since this isn't directly recursive. *) val newLevel = level+1 val code = mkCode(fn {level=l, ...} => mkLoad(~1, l-newLevel), fn {level=l, ...} => mkLoad(~2, l-newLevel), {level=newLevel, myAddr=addr}); in mkProc(code, newLevel, 2, "eq{...}(2)") end in TwoArgs wrappedCode end val default = PairArg(fn _ => mkConst (toMachineWord structureEq)) fun makeEq(ty: types, resKind: reskind, findTyVars: typeVarForm -> resfun): resfun = let fun equalityForDatatype(constr, vConstrs) : {level:int, myAddr: int} -> codetree = let val id = tcIdentifier constr val typeName = tcName constr val addr = mkaddrs() (* We need to record this address in the list. *) val _ = datatypeList := (addr, id) :: !datatypeList; (* If this is a polymorphic type constructor (e.g. 'a list) we have to pass the equality functions for the argument type (e.g. int if we have int list) as arguments to the equality function. *) val constructorTypeVars = tcTypeVars constr val nTypeVars = List.length constructorTypeVars val outerFunLevel = baseLevel+1 val newLevel = if nTypeVars = 0 then outerFunLevel else outerFunLevel+1 fun newTvFun tv = let fun findTv [] n = findTyVars tv (* Not in this list. *) | findTv (TypeVar tv' :: tvs) n = if sameTv(tv, tv') then TwoArgs(fn {level, ...} => mkLoad(n, level-outerFunLevel)) else findTv tvs (n+1) | findTv _ _ = raise InternalError "findTv: not a type variable" in findTv constructorTypeVars (~nTypeVars) end (* Filter out the EnumForm constructors. They arise in situations such as datatype t = A of int*int | B | C i.e. where we have only one non-nullary constructor and it is a tuple. In this case we can deal with all the nullary constructors simply by testing whether the two arguments are the same. We don't have to discriminate the individual cases. *) fun isEnum(Value{class=Constructor{nullary=true}, access=Global code, ...}) = let open ADDRESS in (* If the value is a short integer then we can check for equality using pointer equality. *) isShort(loadWord(toAddress(evalue code), 0w1)) end | isEnum _ = false fun processConstrs [] = (* The last of the alternatives is false *) CodeZero | processConstrs ((vConstr as Value{class, access, typeOf, name=tempConstrName, ...}) ::rest) = if isEnum vConstr then processConstrs rest else let val base = codeAccess(access, newLevel) fun matches arg = mkEval(mkInd(0, base) (* Test function. *), [arg], true) in case class of Constructor{nullary=true} => mkIf(matches arg1, matches arg2, processConstrs rest) | _ => (* We have to unwrap the value. *) let (* Get the constructor argument given the result type. We might actually be able to take the argument type off directly but there's some uncertainty about whether we use the same type variables for the constructors as for the datatype. (This only applies for polytypes). *) val resType = constructorResult(typeOf, constructorTypeVars) (* Code to extract the value. *) fun destruct argNo {level=l, ...} = mkEval(mkInd(2, codeAccess(access, l)) (* projection function. *), [mkLoad(argNo, l-newLevel)], true) (* Test whether the values match. *) val eqValue = applyEq(resType, destruct ~1, destruct ~2, {level=newLevel, myAddr=addr}, newTvFun) in (* We have equality if both values match this constructor and the values within the constructor match. *) mkIf(matches arg1, mkCand(matches arg2, eqValue), processConstrs rest) end end (* We previously only tested for bit-wise (pointer) equality if we had at least one "enum" constructor in which case the test would eliminate all the enum constructors. I've now extended this to all cases where there is more than one constructor. The idea is to speed up equality between identical data structures. *) val eqCode = case vConstrs of [vcons] => (* Single constructor. *) if isEnum vcons then CodeTrue (* Return true here: processConstrs would return false. *) else processConstrs vConstrs | _ => (* More than one constructor: should never be zero. *) mkCor(mkTestptreq(arg1, arg2), processConstrs vConstrs) val eqFun = mkProc(eqCode, newLevel, 2, "eq-" ^ typeName ^ "(2)") (* If this is a monotype we can return it directly otherwise we need to wrap it up in a function to take the equality functions for the argument types. *) val resFun = if nTypeVars = 0 then eqFun else mkProc(eqFun, outerFunLevel, nTypeVars, "eq-" ^ typeName ^ "(1)") in generatedFuns := !generatedFuns @ [mkDec(addr, resFun)]; fn {level=l, myAddr} => mkLoad(addr, l-baseLevel) end fun equalityForConstruction(constr, args, vConstrs): resfun = (* Generate an equality function for a datatype construction. *) let (* See if we are currently making this function or have already made it. If this is recursive we may be able to optimise it. *) val id = tcIdentifier constr val constrName = tcName constr fun searchList [] = NONE | searchList ((addr, t) :: rest) = if sameTypeId(t, id) then SOME addr else searchList rest val alreadyAddr = searchList (!datatypeList) (* Get the equality functions for the argument types. These want to be functions taking two arguments. This applies only to polytypes. *) fun getArg (lA as {level, myAddr}) ty : codetree = let val eqFun = makeEq(ty, MakeFun, findTyVars) in case eqFun of PairArg f => (* Have to make a function which takes two arguments. *) mkInlproc( mkEval(f{level=level+1, myAddr=myAddr}, [mkTuple[arg1, arg2]], true), level+1, 2, "eq-"^constrName^"(...)") | TwoArgs f => f lA end (* If we are compiling a recursive polytype (e.g. list) and we find a recursive call we can generate better code by calling the inner function directly, provided the recursive call involves the polymorphic type. This isn't true if we have datatype 'a t = X of int t | Y of 'a where the recursive call is not polymorphic. *) fun sameTypeVars(TypeVar tv, TypeVar tv') = sameTv(tv, tv') | sameTypeVars _ = false fun recursiveEq (addr, []) {level:int, myAddr: int} = if addr = myAddr then mkRecLoad(level-baseLevel-1) else mkLoad(addr, level-baseLevel) | recursiveEq (addr, _) (lA as {level:int, myAddr: int}) = if addr <> myAddr then mkEval(mkLoad(addr, level-baseLevel), map (getArg lA) args, true) else if ListPair.foldl (fn(a, b, t) => t andalso sameTypeVars(a,b)) true (args, tcTypeVars constr) then mkRecLoad(level-baseLevel-2) else mkEval(mkRecLoad(level-baseLevel-1), map (getArg lA) args, true) in (* Apply the function we obtained to any type arguments. *) case searchList (!datatypeList) of SOME addr => TwoArgs(recursiveEq(addr, args)) | NONE => let val eq = equalityForDatatype(constr, vConstrs) in case args of [] => TwoArgs eq | _ => TwoArgs(fn l => mkEval(eq l, map (getArg l) args, true)) end end in case ty of TypeVar tyVar => let (* The type variable may be bound to something. *) val tyVal = tvValue tyVar in (* If we have an unbound type variable it may either be a type constructor argument or it may be a free equality type variable. *) if isEmpty tyVal then returnFun(findTyVars tyVar, resKind) else makeEq(tyVal, resKind, findTyVars) end | TypeConstruction{value, args, ...} => let val constr = pling value val id = tcIdentifier constr (* See if we have a special version of equality for this type. N.B. The only special functions we have for polytypes are for 'a ref and 'a array. In these cases the function does pointer equality and is applied directly. We must not use the normal approach of combining the equality function for the polytype with that for the argument because in this case there may not be an equality function for the argument. e.g. we can use equality on (int->int) ref. *) val special = getOverload("=", constr, fn () => CodeNil); in if not (isCodeNil special) (* There's an overloading. *) then returnFun(PairArg(fn _ => special), resKind) else (* Not there *) if sameTypeId (id, tcIdentifier unitType) then (* unit - always true for equality. *) returnCode(fn _ => CodeTrue, resKind) else case tcConstructors constr of [] => (* Not a datatype. *) if not (isEmpty (tcEquivalent constr)) (* May be an alias *) then makeEq (makeEquivalent (constr, args), resKind, findTyVars) else (* An opaque eqtype - probably a functor argument. N.B. since we're returning the structure equality function we mustn't apply it to the equality function for the arguments. *) returnFun(default, resKind) | Value{access=Formal _, ...} :: _ => (* If the datatype constructor is a parameter to a functor the value constructors will be in parameter structure. It's too complicated to find out where the structure is so we just use structure equality. *) returnFun(default, resKind) | vConstrs => (* Datatype. *) returnFun( equalityForConstruction(constr, args, vConstrs), resKind) end | LabelledType {recList=[{typeof=singleton, ...}], ...} => (* Unary tuples are optimised - no indirection. *) makeEq(singleton, resKind, findTyVars) | LabelledType {recList, ...} => (* Combine the entries. fun eq(a,b) = #1 a = #1 b andalso #2 a = #2 b ... *) let fun eqTuple(arg1, arg2, lA) = let fun combineEntries ([], n) = CodeTrue | combineEntries ({typeof, name=_}::t, n) = mkCand (applyEq(typeof, fn l => mkInd(n, arg1 l), fn l => mkInd(n, arg2 l), lA, findTyVars), combineEntries (t, n+1)) in combineEntries(recList, 0) end in returnCode(eqTuple, resKind) end | _ => (* It is actually possible to get an equality function on functions in ML97 as a result of sharing constraints in a functor. The signature would not be matchable by a real structure so the functor could never be applied. Nevertheless the functor must compile so we just put in structure equality here. *) returnFun(default, resKind) end (* Make an equality function and apply it to the arguments. *) and applyEq(ty, arg1, arg2, lA, findTyVars): codetree = case makeEq(ty, ApplyFun(arg1, arg2), findTyVars) of PairArg c => c lA | TwoArgs _ => raise InternalError "applyEq: wrong result" (* The instance type is a function so we have to get the first argument. *) val argType = firstArg instance (* Get the final equality function and generate any which are needed as a side effect. *) val resultCode = makeEq(argType, MakeFun, fn _ => default) in (* The final result function must take a single argument. If we have generated a function the result must be one which takes two arguments. If we have not generated it it must have come from somewhere else so it must take a pair. *) case resultCode of PairArg c => c {level=baseLevel,myAddr=0} | TwoArgs c => let (* Must call c BEFORE we dereference generatedFuns because the call may generate new functions. *) val code = c {level=baseLevel,myAddr=0} val funs = ! generatedFuns val wrappedFuns = case funs of [singleton] => singleton | funs => mkMutualDecs funs in (* We need to wrap this up in a new inline function for two reasons. One is that it needs to take a single pair argument, the other is that we have allocated the addresses from 1 and we may get conflicts with addresses in the surrounding scope. *) mkInlproc(CODETREE.mkEnv[wrappedFuns, mkEval(code, [mkInd(0, arg1), mkInd(1, arg1)], true)], baseLevel, 1, "equality") end end (*****************************************************************************) (* datatype access functions *) (*****************************************************************************) (* Get the appropriate instance of an overloaded function. If the overloading has not resolved to a single type it finds the preferred type if possible (i.e. int for most overloadings, but possibly real, word, string or char for conversion functions.) *) fun getOverloadInstance(name, instance, isConv, lex, lineno): codetree*string = let val constr = typeConstrFromOverload(instance, isConv) (* If there is no matching type produce a message. That should only happen if we are running in ML90 mode and the overloading has not reduced to a single type. *) fun notFound () = if name = "=" (* Special case *) then mkConst (toMachineWord structureEq) else let val ops = getOverloads name (* Construct a list of the current overloadings. *) fun makeOverloadList [] = "" | makeOverloadList [(last, _)] = tcName last | makeOverloadList ((h, _)::l) = tcName h ^ "/" ^ makeOverloadList l val overloads = makeOverloadList ops in overloadError (instance, name, overloads, lex, lineno); CodeNil end in (getOverload(name, constr, notFound), tcName constr) end (* Code-generate an identifier matched to a value. N.B. If the value is a constructor it returns the pair or triple representing the functions on the constructor. *) fun codeVal (Value{access = Global code, ...}, _, _, _, _) = code | codeVal (Value{access = Local{addr=ref locAddr, level=ref locLevel}, ...}, level, _, _, _) = let (* Load the variable. *) val levelDiff = level - locLevel; in if locAddr = 0 then mkRecLoad (levelDiff - 1) (* Recursive *) else mkLoad (locAddr, levelDiff) (* Argument or local *) end | codeVal (Value{access = Selected{addr, base}, ...}, level, _, _, _) = (* Select from a structure. *) mkInd (addr, codeStruct (base, level)) | codeVal (Value{access = Formal _, ...}, level, _, _, _) = raise InternalError "codeVal - Formal" | codeVal (Value{access = Overloaded Print, ...}, level, instance, lex, _) = let (* "instance" should be 'a -> 'a. We need to get the 'a. *) val argType = if not (isFunctionType instance) then badType else ffArg (typesFunctionType instance); open DEBUG (* The parameter is the reference used to control the print depth when the value is actually printed. *) val printDepthFun = getParameter printDepthFunTag (LEX.debugParams lex) and printString = getParameter printStringTag (LEX.debugParams lex) val printSpace = case List.find (Universal.tagIs printSpaceTag) (LEX.debugParams lex) of SOME a => Universal.tagProject printSpaceTag a | NONE => nullEnvironment fun printProc value = ( printStruct (value, argType, printDepthFun(), prettyPrint (77, printString), printSpace); value ); (* Coerce the procedure so that it can be put into the code. *) in mkConst (toMachineWord printProc) end | codeVal (Value{access = Overloaded PrintSpace, ...}, level, instance, _, _) = let (* "instance" should be 'a * namespace * printer * int -> 'a. We need to get the 'a. *) val argType = case instance of FunctionType{arg= LabelledType { recList = {typeof, ...} ::_, ...}, ...} => typeof | _ => badType fun printProc (value, namespace, printer, depth): unit = ( printStruct (value, argType, depth, prettyPrint (77, printer), namespace) ) in mkConst (toMachineWord printProc) end | codeVal (Value{access = Overloaded MakeString, ...}, level, instance, lex, _) = let (* "instance" should be 'a -> string. We need to get the 'a. *) val argType = if not (isFunctionType instance) then badType else ffArg (typesFunctionType instance); val printSpace = case List.find (Universal.tagIs printSpaceTag) (LEX.debugParams lex) of SOME a => Universal.tagProject printSpaceTag a | NONE => nullEnvironment fun makeString value = let val result = ref ""; (* Accumulate results in this *) val pp = uglyPrint (fn s => result := !result ^ s); val U : unit = printStruct (value, argType, 10000, pp, printSpace); in ! result end; in mkConst (toMachineWord makeString) end | codeVal (Value{access = Overloaded MakeStringSpace, ...}, level, instance, lex, _) = let (* "instance" should be 'a * namespace -> string. We need to get the 'a. *) val argType = case instance of FunctionType{arg= LabelledType { recList = {typeof, ...} ::_, ...}, ...} => typeof | _ => badType fun printProc (value, namespace, printer) = let val result = ref ""; (* Accumulate results in this *) val pp = uglyPrint (fn s => result := !result ^ s); val () = printStruct (value, argType, 10000, pp, namespace); in !result end in mkConst (toMachineWord printProc) end | codeVal (Value{access = Overloaded InstallPP, ...}, level, instance, _, _) = let (* "instance" should be ((,,,) -> int-> 'a -> 'b -> unit) -> unit. We need to get the 'a and 'b. This function installs a pretty printer against the type which matches 'b. The type 'a is related to type of 'b as follows: If 'b is a monotype t then 'a is ignored. If 'b is a unary type constructor 'c t then 'a must have type 'c * int -> unit. If 'b is a binary or higher type constructor e.g. ('c, 'd, 'e) t then 'a must be a tuple of functions of the form ('c * int -> unit, 'd * int -> unit, 'e * int -> unit). When the installed function is called it will be passed the appropriate argument functions which it can call to print the argument types. *) fun rmvars (t as TypeVar tv) = ( case tvValue tv of EmptyType => t (* Unbound type variable - return it*) | t' => rmvars t' ) | rmvars t = t; val (installType, argPrints) = case instance of FunctionType{arg, ...} => (* arg should be (,,,)-> int -> 'a->..*) ( case arg of FunctionType{result, ...} => (* result should be int->'a->'b->unit*) ( case result of FunctionType{result, ...} => (* result should be 'a->'b->unit*) ( case result of FunctionType{arg=aType, result} => (* arg should be 'a, result should be 'b->unit.*) ( case result of FunctionType{arg=bType, ...} => (* arg should be 'b *) (rmvars bType, rmvars aType) | _ => (badType, badType) ) | _ => (badType, badType) ) | _ => (badType, badType) ) | _ => (badType, badType) ) | _ => (badType, badType); (* This is the type of the pretty-printer as seen by the user *) type pp = (* addString *) (string -> unit) * (* beginBlock *) (int * bool -> unit) * (* break *) (int * int -> unit) * (* endBlock *) (unit -> unit); fun installPp (pprint:pp -> int -> machineWord -> machineWord -> unit) = let (* Find the last type constructor in the chain. We have to install this against the last in the chain because type constructors in different modules may be at different points in the chain. *) (* This does mean that it's not possible to install a pretty printer for a type constructor rather than a datatype. *) fun followTypes (TypeConstruction{value, args, ...}) : typeId = let val constr = pling value in if isEmpty (tcEquivalent constr) then let val typeId : typeId = tcIdentifier constr; (* Check that the argument is a function from the type variable to unit. *) fun checkFun(tvar: types, FunctionType{arg, result}) = ( case rmvars arg of LabelledType{recList=[{name="1", typeof=arg}, {name="2", typeof=depthType}], frozen=true, ...} => if sameTypeVar(rmvars tvar, rmvars arg) then ( case rmvars depthType of TypeConstruction{value, args=[], ...} => if sameTypeId (tcIdentifier(pling value), tcIdentifier intType) then () else raise Fail "Argument printer must have type 'a*int->unit (second arg not int)" | _ => raise Fail "Argument printer must have type 'a*int->unit (second arg not type int)" ) else raise Fail "Argument printer must have type 'a*int->unit (mismatched 'a)" | _ => raise Fail "Argument printer must have type 'a*int->unit (not pair)" ) | checkFun(tvar: types, _) = raise Fail "Argument printer must have type 'a*int->unit (not function)" fun checkFuns([], []) = () | checkFuns(tvar::tRest, {name, typeof}::argRest) = (checkFun(tvar, typeof); checkFuns(tRest, argRest)) | checkFuns _ = raise Fail "Tuple size does not match type" in (* Check that the arity of the type constructor matches the arity of the tuple. *) case args of [] => (* Simple constructor *) () (* Ignore this for the moment. *) | [t] => checkFun(t, argPrints) | tlist => if not (isProductType argPrints) then raise Fail "Argument must be a tuple" else ( case argPrints of LabelledType{recList, ...} => checkFuns(tlist, recList) | _ => () ); (* Check that it's a top-level datatype (NOT in a functor) *) if not (isFreeId typeId) then raise Fail "Invalid type (not free at top-level)" else (); typeId end else followTypes (makeEquivalent (constr, args)) end | followTypes _ = raise Fail "Invalid type (not a type construction)"; fun pproc (pretty:prettyPrinter) : int -> machineWord -> machineWord -> unit = let val addString = ppAddString pretty; val beginBlock = ppBeginBlock pretty; val break = ppBreak pretty; val endBlock = ppEndBlock pretty; in pprint (addString, beginBlock, break, endBlock) end in addPp (followTypes installType, pproc) end (* installPp *); in mkConst (toMachineWord installPp) end | codeVal (value as Value{access = Overloaded _, ...}, level, instance, lex, lineno) = (* AddOverload, Equal, NotEqual, TypeDep *) mkProc (applyFunction (value, arg1, level, instance, lex, lineno), 1, 1, "") (* codeVal *) (* Some of these have a more efficient way of calling them as functions. *) and applyFunction (value as Value{class=Exception, ...}, argument, level, instance, lex, lineno) = let (* If we are applying it as a function we cannot be after the exception id, we must be constructing an exception packet. *) (* Get the exception id, put it in the packet with the exception name and the argument. *) val exIden = codeVal (value, level, instance, lex, lineno); in mkTuple (exIden :: mkStr (valName value) :: [argument]) end | applyFunction(value as Value{class=Constructor _, ...}, argument, level, instance, lex, lineno) = let (* If this is a value constructor we need to get the construction function and use that. *) val constrTriple = codeVal (value, level, instance, lex, lineno); in (* Don't apply this "early". It might be the ref constructor and that must not be applied until run-time. The optimiser should take care of any other cases. *) mkEval (mkInd(1, constrTriple), [argument], false) end | applyFunction (value as Value{access = Overloaded oper, name = valName, ...}, argument, level, instance, lex, lineno) = ( case oper of Equal => (* See if we have a special implementation for equality on this type. If not we have to fall back to the default structure equality. *) (* Note: the overloadings will normally be inline functions which will unwrap the argument tuple and so elide it away. structureEq, though, is passed here as a pointer to the code so no such optimisation is possible and we will always make a tuple which will then be unwrapped inside structureEq. Two solutions are possible: we could build structureEq into the RTS in which case it would take an argument pair (usually in registers) or we could write it in the prelude and set it as an overload with some special type so that getOverload would return it as the default. *) let val code = genEqualityFunction(instance, level) in mkEval (code, [argument], true) (* evaluate early *) end | NotEqual => let (* Use the "=" function to provide inequality as well as equality. *) val code = genEqualityFunction(instance, level) val isEqual = mkEval (code, [argument], true) (* evaluate early *) in mkNot isEqual end | TypeDep => let val (code, _) = getOverloadInstance(valName, instance, false, lex, lineno) in mkEval (code, [argument], true) (* evaluate early *) end | AddOverload => (* AddOverload is only intended for use by writers of library modules. It only does limited checking and should be regarded as "unsafe". *) let (* instance should be ('a->'b) -> string -> unit. For overloadings on most functions (e.g. abs and +) we are looking for the 'a, which may be a pair, but in the case of conversion functions we want the 'b. *) (* rmvars removes type variables put on by unification. *) fun rmvars (TypeVar tv) = rmvars(tvValue tv) | rmvars t = t fun followTypes(TypeConstruction{value, args, ...}):typeConstrs = let val constr = pling value in if isEmpty (tcEquivalent constr) then constr else followTypes (makeEquivalent (constr, args)) end | followTypes t = raise Fail "Invalid type (not a type construction)"; (* In normal use the instance type would be a function and everything would be fine. It is possible though that we might have something of the form val a = addOverload in which case we want to leave the error until runtime. This particular case seems to happen as a result of open PolyML when PolyML contains addOverload. *) val (argType, resultType) = case instance of FunctionType{arg,...} => ( case arg of (* We could do some checking of the type of the function such as checking that we either have something of the form t->t, t*t->t or t*t->bool or string->t in the case of conversion functions. It's probably not worth it since adding overloads is only intended to be done by writers of libraries. *) FunctionType{arg, result} => ( case (rmvars arg) of LabelledType{recList=[{typeof, ...}, _], ...} => (rmvars typeof, rmvars result) | t => (rmvars t, rmvars result) ) | _ => (badType, badType) ) | _ => (badType, badType) fun addOverloading (argCode: codetree) (name: string) = let val typeToUse = if size name > 4 andalso String.substring(name, 0, 4) = "conv" (* For conversion functions it's the result type we're interested in. For everything else it's the argument type. *) then resultType else argType val tcons = followTypes typeToUse in addOverload(name, tcons, argCode) end (* This function is used if we can't get the codetree at compile time. *) fun addOverloadGeneral (arg: machineWord) = addOverloading(mkConst arg) in (* This is messy but necessary for efficiency. If we simply treat addOverload as a function we would be able to pick up the additional overloading as a pointer to a function. Most overloads are small functions or wrapped calls to RTS functions and so we need to get the inline code for them. *) ( (* evalue raises an exception if "argument" is not a constant, or more usefully, a global value containing a constant and possibly a piece of codetree to inline. *) evalue(argument); mkConst (toMachineWord (addOverloading argument)) ) handle SML90.Interrupt => raise SML90.Interrupt | _ => mkEval (mkConst (toMachineWord addOverloadGeneral), [argument], false) end | _ => (* Print, MakeString, InstallPP *) (* Just call as functions. *) (* not early *) mkEval (codeVal (value, level, instance, lex, lineno), [argument], false) ) (* overloaded *) | applyFunction (value, argument, level, instance, lex, lineno) = (* Just call as functions. *) mkEval (codeVal (value, level, instance, lex ,lineno), [argument], false) (* end applyFunction *) (* If the exception is being used as a value we want an exception packet or a function to make a packet. If it is a nullary constructor make an exception packet now, otherwise generate a function to construct an exception packet. *) fun codeExFunction (value, level, instance, lex, lineno) = if isEmpty (valTypeOf value) (* N.B. Not "instance" *) then applyFunction (value, CodeZero, level, instance, lex, lineno) else mkProc (applyFunction (value, arg1, level + 1, instance, lex, lineno), 1, 1, ""); (* shouldn't this function be in-lined??? SPF 20/10/94 *) (* Operations to compile code from the representation of a constructor. *) (* Code to test whether a value matches a constructor. *) fun makeGuard (value as Value{class=Constructor _, ...}, testing, level) = mkEval(mkInd(0, codeVal (value, level, emptyType, nullLex, 0)), [testing], true) | makeGuard (value as Value{class=Exception, ...}, testing, level) = (* Should only be an exception. Get the value of the exception identifier and compare with the identifier in the exception packet. *) mkTestptreq (mkInd (0, testing), codeVal (value, level, emptyType, nullLex, 0)) | makeGuard _ = raise InternalError "makeGuard" (* Code to invert a constructor. i.e. return the value originally used as the argument. *) fun makeInverse(value as Value{class=Constructor{nullary=false}, ...}, arg, level): codetree = mkEval(mkInd(2, codeVal (value, level, emptyType, nullLex, 0)), [arg], false) (* NOT "early" - this may be the "ref" constructor. *) | makeInverse(value as Value{class=Constructor{nullary=true}, ...}, arg, level): codetree = (* makeInverse is called even on nullary constructors. Return zero to keep the optimiser happy. *) CodeZero | makeInverse (value as Value{class=Exception, ...}, arg, level) = (* Exceptions. - Get the parameter from third word *) mkInd (2,arg) | makeInverse _ = raise InternalError "makeInverse" (* Get the current overload set for the function and return a new instance of the type containing the overload set. *) fun overloadType(Value{typeOf, access = Overloaded TypeDep, name, ...}, isConv) = let fun getTypes [] = [] | getTypes ((t, _) :: l) = t :: getTypes l in generaliseOverload(typeOf, getTypes(getOverloads name), isConv) end | overloadType(Value{typeOf, ...}, isConv) = generalise(typeOf, true) (* True if the arguments are definitely the same exception. Used in the match compiler to see if we can merge adjacent exception patterns. Unlike the constructors of a datatype we can't assume that having the same (short) name means that the exceptions are the same, we have to look at the address. *) fun isTheSameException(Value{access = Global aCode, ...}, Value{access = Global bCode, ...}) : bool = wordEq(evalue aCode, evalue bCode) | isTheSameException(Value{access = Local{addr=ref aAddr, level=ref aLevel}, ...}, Value{access = Local{addr=ref bAddr, level=ref bLevel}, ...}) : bool = (* I don't like this. It assumes that the address and level have already been set. *) aAddr = bAddr andalso aLevel = bLevel | isTheSameException _ = false (* Forget about "selected" for the moment. *) end (* body of VALUEOPS *); polyml.5.2.1/mlsource/MLCompiler/ValueOps.ML0000644000175000017500000000237510772157213017634 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure ValueOps = VALUE_OPS ( structure LEX = Lex structure CODETREE = CodeTree structure STRUCTVALS = StructVals structure TYPESTRUCT = TypeTree structure PRINTTABLE = PrintTable structure UNIVERSALTABLE = UniversalTable structure DEBUG = Debug structure ADDRESS = Address structure MISC = Misc structure PRETTYPRINTER = PrettyPrinter structure UNIVERSAL = Universal structure UTILITIES = Utilities ) ; polyml.5.2.1/mlsource/MLCompiler/ml_bind.ML0000644000175000017500000000250511003076053017463 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure MLCompiler = struct local open RuntimeCalls; (* Create the global environment. *) val globalTable : Make.gEnv = Make.makeGEnv (); val mainShell = Make.shellProc globalTable; val () = Initialise.initGlobalEnv globalTable; in (* "use" is used only during testing to enable the basis to be compiled in. *) val use = Make.useIntoEnv globalTable; (* This is exported when building the normal distribution. *) val shell = mainShell end; end; polyml.5.2.1/mlsource/MLCompiler/CodeTree/0000755000175000017500000000000011100060547017314 5ustar daviddavidpolyml.5.2.1/mlsource/MLCompiler/CodeTree/CodeCons.hppa/0000755000175000017500000000000011100060550021732 5ustar daviddavidpolyml.5.2.1/mlsource/MLCompiler/CodeTree/CodeCons.hppa/CODECONS.ML0000644000175000017500000043535510313043352023406 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* This module contains the code vector and operations to insert code into it. Each procedure is compiled into a separate segment. Initially it is compiled into a fixed size segment, and then copied into a segment of the correct size at the end. This module contains all the definitions of the Sparc opcodes and registers. It uses "codeseg" to create and operate on the segment itself. *) (* Linkage conventions: ; Register Usage ; -------------- ; ; %r0 = pseudo register (constant 0) ; ; %r1 = scratch register (used as target of ADDIL) ; ; %r2 = scratch register ; ; %r3 = regStackPtr (dedicated) ; %r4 = regStackLim (dedicated) ; %r5 = regHeapPtr (dedicated) ; %r6 = regHeapLim (dedicated) ; %r7 = regHandler (dedicated) ; ; %r8 = regCode ; %r9 = regClosure ; ; %r10 - %r22 = general purpose registers ; ; %r23 = argReg3 ; %r24 = argReg2 ; %r25 = argReg1 ; %r26 = argReg0 ; ; %r27 = DON'T TOUCH ; ; %r28 = regResult ; %r29 = scratch register ; ; %r30 = DON'T TOUCH ; %r31 = regReturn (used as BLE link register) %r1 is junked by any instruction that may trap; %rt1 and %rt2 are literally preserved across traps, so they must never contain any tagged valuesm as the GC won't recognise these as such. Function Prologues ------------------ Unlike the SPARC, we make it the caller's resposibility to tag the return address (in the BLE delay slot). This means that functions have a maximum of 2 entry points: (1) L1/L2 Standard entry point - tagged return address is in regReturn (2) L3/L4 Self-call entry point - doesn't change regCode L1, L2: ADDIL L%,regCode LDO R%(%r1),regCode L3, L4: Note: most code segements will be short, in which case we won't need the "ADDIL, LDO" sequenece at all. Calling a Function ------------------ We make the global assumption that we are running in the segment addressed by %sr0. Call: BLE 0(%sr0,regCode) DEPI 2,32,2,regReturn (* tag return address *) Self-call: BL L3,%regReturn DEPI 2,32,2,regReturn (* tag return address *) Tail-call: BV %r0(regCode) COPY returnReg,regReturn (* If returnReg <> regReturn *) Self-tail-call: MOVB returnReg,regReturn,L4 (* If branch is less than 2^11 words *) NOP or ADDIL L%(L4-L1)-,regCode (* If we have a long branch *) LDO R%(L4-L1)-(%r1),%r1 BV %r0(%r1) COPY returnReg,regReturn Note that generating a "long" self-call implies we're going to need a "long" function prelude. Return: LDO -2(returnReg),%rt1 (* N.B. not regReturn *) BV %r0(%rt1) NOP *) functor CODECONS ( (*****************************************************************************) (* DEBUG *) (*****************************************************************************) structure DEBUG : sig val assemblyCode: bool ref; (* This is true if we are code-generating for the persistent store and have to be careful about traps etc. *) val persistentStore: bool (* If we are running with the distributed memory we cannot compile in load instructions. *) val allowMutableLoads: bool end; (*****************************************************************************) (* MISC *) (*****************************************************************************) structure MISC : sig exception InternalError of string val quickSort : ('a -> 'a -> bool) -> 'a list -> 'a list; end (*****************************************************************************) (* CODECONS sharing constraints *) (*****************************************************************************) (* removed SPF 24/9/94 ... sharing type ADDRESS.word = CODESEG.word sharing type ADDRESS.short = CODESEG.short sharing type ADDRESS.address = CODESEG.address ... *) ) : (*****************************************************************************) (* CODECONS export signature *) (*****************************************************************************) sig type word; (* added 13/7/94 SPF *) type short; type code; type reg; (* Machine registers *) type address; val regNone: reg; val regResult: reg; val regClosure: reg; val regCode: reg; val regStackPtr: reg; val regHandler: reg; val regReturn: reg; val regs: int; (* No of registers. *) val argRegs: int; (* No of args in registers. *) val regN: int -> reg; val nReg: reg -> int; val argReg: int -> reg; val regEq: reg * reg -> bool; val regNeq: reg * reg -> bool; val regPrint: reg -> unit; val regRepr: reg -> string; type addrs val codeCreate: bool * string -> code; (* makes the initial segment. *) (* Operations. *) type instrs; val instrMove: instrs; val instrAddA: instrs; val instrSubA: instrs; val instrRevSubA: instrs; val instrMulA: instrs; val instrOrW: instrs; val instrAndW: instrs; val instrXorW: instrs; val instrLoad: instrs; val instrLoadB: instrs; val instrVeclen: instrs; val instrPush: instrs; val instrUpshiftW: instrs; val instrDownshiftW: instrs; val instrBad: instrs; (* Can the we use the same register as the source and destination of an instructions? (it would be more flexible to make this a function of type "instrs -> bool", but a simple flag will suffice for now. SPF 17/1/97 *) val canShareRegs : bool; (* Enquire about operations. *) val instrIsRR: instrs -> bool; (* Is the general form implemented? *) val instrIsRI: instrs * word -> bool; (* Is the immediate value ok? *) (* Code generate operations. *) val genRR: instrs * reg * reg * reg * code -> unit; val genRI: instrs * reg * word * reg * code -> unit; type tests; val testNeqW: tests; val testEqW: tests; val testGeqW: tests; val testGtW: tests; val testLeqW: tests; val testLtW: tests; val testNeqA: tests; val testEqA: tests; val testGeqA: tests; val testGtA: tests; val testLeqA: tests; val testLtA: tests; val Short: tests; val Long: tests; type labels; (* The source of a jump. *) val noJump: labels; (* Compare and branch for fixed and arbitrary precision. *) val isCompRR: tests -> bool; val isCompRI: tests * word -> bool; val compareAndBranchRR: reg * reg * tests * code -> labels; val compareAndBranchRI: reg * word * tests * code -> labels; val genLoad: int * reg * reg * code -> unit; val genStore: reg * int * reg * code -> unit; val isStoreI: word -> bool; val genStoreI: word * int * reg * code -> unit; val genPush: reg * code -> unit; val genLoadPush: int * reg * code -> unit; val preferLoadPush: bool; val genLoadConst: word * reg * reg * code -> unit; val genLoadCoderef: code * reg * reg * code -> unit; val allocStore: int * short * reg * code -> unit; val setFlag: reg * code * short -> unit; val completeSegment: code -> unit; type callKinds; val StaticLink : callKinds; val FullCall : callKinds; val IoCall : callKinds; val Recursive : callKinds; val PureCode : callKinds; val callFunction: callKinds * code -> unit; val jumpToFunction: callKinds * reg * code -> unit; val returnFromFunction: reg * int * code -> unit; val raiseEx: code -> unit; val setSl: int * code -> unit; val copyCode: code * int -> address; val unconditionalBranch: code -> labels; type handlerLab; val pushAddress: reg * code -> handlerLab; val fixupHandler: handlerLab * code -> unit; val fixup: labels * code -> unit; (* Fix up a jump. *) (* ic - Address for the next instruction in the segment. *) val ic : code -> addrs; val jumpback: addrs * bool * code -> unit; (* Backwards jump. *) val resetStack: int * code -> unit; (* Set a pending reset *) val procName: code -> string; (* Name of the procedure. *) type cases type jumpTableAddrs val constrCases : int * addrs -> cases; val useIndexedCase: int * int * int * bool -> bool; val indexedCase : reg * reg * int * int * bool * code -> jumpTableAddrs; val makeJumpTable : jumpTableAddrs * cases list * addrs * int * int * code -> unit; end (* CODECONS export signature *) = let (*****************************************************************************) (* ADDRESS *) (*****************************************************************************) structure ADDRESS : sig type word; (* NB *not* eqtype, 'cos it might be a closure *) eqtype short; type address; type handler; val toAddress: 'a -> address val wordSize : int; (* still 4, but will change one day *) val wordEq : 'a * 'a -> bool val isShort: 'a -> bool; val toShort: 'a -> short; val toWord: 'a -> word; val toInt: short -> int; val toAddress: 'a -> address val loadByte: address * short -> short val loadWord: address * short -> word val nameOfCode: address -> string val unsafeCast: 'a -> 'b val Or: short * short -> short; val And: short * short -> short; val << : short * short -> short; val >> : short * short -> short; val offsetAddr : address * short -> handler val alloc: (short * short * word) -> address val length: address -> short val flags: address -> short val F_words : short val isWords : address -> bool; val isBytes : address -> bool; val isCode : address -> bool; val isString : word -> bool; val toString : word -> string; val lock : address -> unit; end = Address; (*****************************************************************************) (* CODESEG *) (*****************************************************************************) structure CODESEG : sig type word; type short; type address; type cseg; val csegMake: int -> cseg; val csegConvertToCode: cseg -> unit; val csegLock: cseg -> unit; val csegGet: cseg * int -> short; val csegSet: cseg * int * short -> unit; val csegPutWord: cseg * int * word -> unit; val csegCopySeg: cseg * cseg * int * int -> unit; val csegAddr: cseg -> address; end = CodeSeg; in (*****************************************************************************) (* CODECONS functor body *) (*****************************************************************************) struct open CODESEG; open DEBUG; open ADDRESS; open MISC; infix 8 >> <<; infix 7 And; infix 6 Or; fun applyList (f, []) = () | applyList (f, h::t) = let val U : unit = f h; in applyList (f, t) end; fun applyCountList (f, n, []) = () | applyCountList (f, n, h::t) = let val U : unit = f (n, h); in applyCountList (f, n + 1, t) end; fun revOnto ([], l) = l | revOnto (h :: t, l) = revOnto (t, h :: l); fun printString (s: string) = output(std_out,s); fun reprBool true = "true" | reprBool false = "false"; local fun hexDigit (n:int) : string = if n < 10 then chr (ord "0" + n) else chr (ord "a" - 10 + n); fun revHexDigits (width : int, x : int) : string list = let val lo = x mod 16 val hi = x div 16 in hexDigit lo :: (if x >= 16 orelse width > 1 then revHexDigits (width - 1, hi) else []) end; fun phex (width: int, x : int) : unit = let val hi = x div 16 val lo = x mod 16 in if x >= 16 orelse width > 1 then phex (width - 1, hi) else (); output (std_out, hexDigit lo) end; in (* prints a string representation of a number, padded to width characters *) fun reprHexN (width : int, n : int) : string = if n < 0 then implode ("-" :: rev (revHexDigits (width, ~n))) else implode (rev (revHexDigits (width, n))) fun reprHex (n : int) : string = reprHexN (0, n); (* prints a string representation of a number, padded to width characters *) fun printHexN (width : int, n : int) = if n < 0 then (output (std_out, "-"); phex (width - 1, ~ n)) else phex (width, n) fun printHex (n : int) : unit = printHexN (0, n); end; (*****************************************************************************) (* Useful constants *) (*****************************************************************************) (* These are specified as explicit constants, rather than calls to exp2 so that the code-generator can in-line them when it compiles itself. *) val exp2_1 = 2; val exp2_2 = 4; val exp2_3 = 8; val exp2_4 = 16; val exp2_5 = 32; val exp2_6 = 64; val exp2_7 = 128; val exp2_8 = 256; val exp2_10 = 1024; val exp2_11 = 2048; val exp2_13 = 8192; val exp2_16 = 65536; val exp2_20 = 1048576; val exp2_24 = 16777216; val exp2_29 = 536870912; (* Let's check that we got them right! *) local fun exp2 0 = 1 | exp2 n = 2 * exp2 (n - 1); in val U : bool = ( exp2_1 = exp2 1 andalso exp2_2 = exp2 2 andalso exp2_3 = exp2 3 andalso exp2_4 = exp2 4 andalso exp2_5 = exp2 5 andalso exp2_6 = exp2 6 andalso exp2_7 = exp2 7 andalso exp2_8 = exp2 8 andalso exp2_10 = exp2 10 andalso exp2_11 = exp2 11 andalso exp2_13 = exp2 13 andalso exp2_16 = exp2 16 andalso exp2_20 = exp2 20 andalso exp2_24 = exp2 24 andalso exp2_29 = exp2 29 ) orelse raise InternalError "CodeCons: Powers of 2 incorrectly specified"; end; val short0 = toShort 0; val short1 = toShort 1; val short2 = toShort 2; val short3 = toShort 3; val short4 = toShort 4; val short5 = toShort 5; val short6 = toShort 6; val short7 = toShort 7; val short8 = toShort 8; val short9 = toShort 9; val short10 = toShort 10; val short11 = toShort 11; val short12 = toShort 12; val short13 = toShort 13; val short14 = toShort 14; val short16 = toShort 16; val short18 = toShort 18; val short19 = toShort 19; val short20 = toShort 20; val short21 = toShort 21; val short22 = toShort 22; val short24 = toShort 24; val short25 = toShort 25; val short26 = toShort 26; val short27 = toShort 27; val short28 = toShort 28; val short30 = toShort 30; val short32 = toShort 32; val short33 = toShort 33; val short34 = toShort 34; val short35 = toShort 35; val short36 = toShort 36; val short37 = toShort 37; val short38 = toShort 38; val short40 = toShort 40; val short44 = toShort 44; val short50 = toShort 50; val short51 = toShort 51; val short52 = toShort 52; val short53 = toShort 53; val short56 = toShort 56; val short57 = toShort 57; val short58 = toShort 58; (* Masks for the least significant n bits *) val mask1Bit = toShort (exp2_1 - 1); val mask2Bits = toShort (exp2_2 - 1); val mask3Bits = toShort (exp2_3 - 1); val mask4Bits = toShort (exp2_4 - 1); val mask5Bits = toShort (exp2_5 - 1); val mask6Bits = toShort (exp2_6 - 1); val mask7Bits = toShort (exp2_7 - 1); val mask8Bits = toShort (exp2_8 - 1); val mask10Bits = toShort (exp2_10 - 1); val mask11Bits = toShort (exp2_11 - 1); (* These are defined here as explicit constants, so the *) (* code-generator can in-line them as immediates (I think). *) val TAGSHIFT = 1; val CODETAG = 2; val FLAGLENGTH = 8; (* There are 8 flag bits in the length word *) (* tag a short constant *) fun semiTagged c = exp2_1 * c; fun tagged c = exp2_1 * c + 1; (*****************************************************************************) (* 21-bit immediates *) (*****************************************************************************) (* 21-bit signed immediates are used with ADDIL *) abstype int21 = Int21 of int with fun getInt21 (Int21 i) = i; (* is21Bit is the test for signed 21-bit immediates *) fun is21Bit i = ~exp2_20 <= i andalso i <= exp2_20 - 1; fun int21 i = if is21Bit i then Int21 i else let val msg = implode [ "int21: can't convert ", Int.toString i, " into a 21-bit signed immediate" ] in raise InternalError msg end; end; (*****************************************************************************) (* 17-bit immediates *) (*****************************************************************************) (* 17-bit signed immediates are used for unconditional branches *) abstype int17 = Int17 of int with fun getInt17 (Int17 i) = i; (* We check for shorts first because that saves us an expensive compile-time trap if i is actually a long value. SPF 11/12/97 *) (* is17Bit is the test for signed 17-bit immediates *) fun is17Bit i = isShort i andalso ~exp2_16 <= i andalso i <= exp2_16 - 1; fun int17 i = if is17Bit i then Int17 i else let val msg = implode [ "int17: can't convert ", Int.toString i, " into a 17-bit signed immediate" ] in raise InternalError msg end; (* various small constants *) val int17_0 = Int17 0; end; (*****************************************************************************) (* 14-bit immediates *) (*****************************************************************************) (* 14-bit signed immediates are used for load and store instructions *) abstype int14 = Int14 of int with fun getInt14 (Int14 i) = i; (* is14Bit is the test for signed 14-bit immediates *) fun is14Bit i = isShort i andalso ~exp2_13 <= i andalso i <= exp2_13 - 1; fun int14 i = if is14Bit i then Int14 i else let val msg = implode [ "int14: can't convert ", Int.toString i, " into a 14-bit signed immediate" ] in raise InternalError msg end; (* various small constants *) val int14_0 = Int14 0; val int14_1 = Int14 1; val int14_minus1 = Int14 ~1; val int14_minus2 = Int14 ~2; val int14_minus4 = Int14 ~4; end; (*****************************************************************************) (* 12-bit immediates *) (*****************************************************************************) (* 12-bit signed immediates are used for conditional branches *) abstype int12 = Int12 of int with fun getInt12 (Int12 i) = i; (* is12Bit is the test for signed 12-bit immediates *) fun is12Bit i = isShort i andalso ~exp2_11 <= i andalso i <= exp2_11 - 1; fun isPositive12Bit i = isShort i andalso 0 <= i andalso i <= exp2_11 - 1; fun int12 i = if is12Bit i then Int12 i else let val msg = implode [ "int12: can't convert ", Int.toString i, " into a 12-bit signed immediate" ] in raise InternalError msg end; (* various small constants *) val int12_0 = Int12 0; end; (*****************************************************************************) (* 11-bit immediates *) (*****************************************************************************) (* 11-bit signed immediates are used for arithmetic instructions *) abstype int11 = Int11 of int with fun getInt11 (Int11 i) = i; (* is11Bit is the test for signed 11-bit immediates *) fun is11Bit i = isShort i andalso ~exp2_10 <= i andalso i <= exp2_10 - 1; fun int11 i = if is11Bit i then Int11 i else let val msg = implode [ "int11: can't convert ", Int.toString i, " into a 11-bit signed immediate" ] in raise InternalError msg end; (* various small constants *) val int11_minus1 = Int11 ~1; end; (*****************************************************************************) (* 5-bit immediates (signed) *) (*****************************************************************************) (* 5-bit signed immediates are used by the MOVIB and COMIV instructions. *) abstype int5 = Int5 of int with fun getInt5 (Int5 i) = i; (* is5Bit is the test for signed 5-bit immediates *) fun is5Bit i = isShort i andalso ~exp2_4 <= i andalso i <= exp2_4 - 1; fun int5 i = if is5Bit i then Int5 i else let val msg = implode [ "int5: can't convert ", Int.toString i, " into a 5-bit signed immediate" ] in raise InternalError msg end; (* various small constants *) val int5_0 = Int5 0; val int5_CODETAG = Int5 CODETAG; end; (*****************************************************************************) (* 5-bit immediates (unsigned) *) (*****************************************************************************) (* 5-bit unsigned immediates are used to designate registers and shifts. *) abstype nat5 = Nat5 of int with fun getNat5 (Nat5 i) = i; (* isUnsigned5Bit is the test for a unsigned 5-bit immediates *) fun isUnsigned5Bit i = isShort i andalso 0 <= i andalso i <= exp2_5 - 1; fun nat5 i = if isUnsigned5Bit i then Nat5 i else let val msg = implode [ "nat5: can't convert ", Int.toString i, " into a 5-bit unsigned immediate" ] in raise InternalError msg end; (* various small constants *) val nat5_TAGSHIFT = Nat5 TAGSHIFT; val nat5_FLAGLENGTH = Nat5 FLAGLENGTH; val nat5_FLminusTS = Nat5 (FLAGLENGTH - TAGSHIFT); end; (* nat5 *) (*****************************************************************************) (* splitLeftRight *) (*****************************************************************************) (* Note: we're only using the LSB 11 bits of the int14, so we don't have to worry about sign-extension vs zero-extension. SPF 19/2/97 *) fun splitLeftRight (n : int) : (int21 * int14) = let val left : int = n div exp2_11; val right : int = n mod exp2_11; in (int21 left, int14 right) end (*****************************************************************************) (* Abstype for registers *) (*****************************************************************************) infix 7 regEq regNeq regLeq regGeq regMinus; abstype reg = Reg of int (* registers. *) with val regZero = Reg 0; (* zero-source and dummy destination *) val regUnsafe = Reg 1; (* a very unsafe temporary - not saved across traps *) val regTemp1 = Reg 2; (* temporary for untagged values *) val regStackPtr = Reg 3; (* current ML stack pointer *) val regStackLim = Reg 4; (* lower limit of stack (pointer) *) val regHeapPtr = Reg 5; (* current heap allocation pointer *) val regHeapLim = Reg 6; (* number of available heap bytes (words?) *) val regHandler = Reg 7; (* pointer into the stack *) val regCode = Reg 8; (* address of code or constants *) val regClosure = Reg 9; (* address of closure (or static link) *) (* Reg 10 - Reg 22 are general purpose registers *) (* Reg 23 - Reg 26 are used for function arguments *) (* Reg 27 is the C static closure pointer - DON'T TOUCH *) val regResult = Reg 28; (* function results *) val regTemp2 = Reg 29; (* temporary for untagged values *) (* Reg 30 is the C stack pointer - DON'T TOUCH *) val regReturn = Reg 31; (* return address *) val regNone = regZero; (* Dummy register *) fun getReg (Reg r) = r; (* reg.down *) fun mkReg n = Reg n; (* reg.up *) fun getReg5 (Reg r) = nat5 r; (* The number of general registers. Includes result, closure, code, return and arg regs but not stackptr, handler, stack limit or heap ptrs. *) val regs = 21; (* r8-r26, r28, r31 *) (* The nth register (counting from 0). *) fun regN i = if i < 0 orelse i >= regs then let val msg = implode [ "regN: Bad register number ", Int.toString i ] in raise InternalError msg end else if i = 20 then mkReg 31 else if i = 19 then mkReg 28 else mkReg (26 - i) fun a regEq b = getReg a = getReg b; fun a regNeq b = getReg a <> getReg b; fun a regLeq b = getReg a <= getReg b; fun a regGeq b = getReg a >= getReg b; fun (Reg a) regMinus (Reg b) = a - b; (* The number of the register. *) fun nReg (Reg n) = if n = 31 then 20 else if n = 28 then 19 else if 8 <= n andalso n <= 26 then 26 - n else let val msg = implode [ "nReg: Bad register number ", Int.toString n ] in raise InternalError msg end; fun regRepr (Reg n) = case n of 3 => "%rsp" | 4 => "%rsl" | 5 => "%rhp" | 6 => "%rhl" | 7 => "%rhr" | _ => "%r" ^ Int.toString n; fun regPrint r = output (std_out, regRepr r); val argRegs = 4; (* Args 0, 1, 2, 3 correspond to r26, r25, r24, r23. *) fun argReg i = if 0 <= i andalso i < 4 then mkReg (26 - i) else let val msg = implode [ "argReg: bad register number ", Int.toString i ] in raise InternalError msg end; end; (* reg *) (*****************************************************************************) (* Abstype for instruction addresses *) (*****************************************************************************) infix 6 wordAddrPlus wordAddrMinus byteAddrMinus; infix 4 addrLt addrEq; (* All indexes into the code vector have type "addrs". In this version of the code generator, we're using WORD addresses. Earlier versions use BYTE addresses, so don't get confused!. SPF 18/2/97 *) abstype addrs = Addr of int with (* + is defined to add an integer to an address *) fun (Addr a) wordAddrPlus b = Addr (a + b); (* The difference between two addresses is an integer *) fun (Addr a) wordAddrMinus (Addr b) = a - b; fun (Addr a) byteAddrMinus (Addr b) = wordSize * (a - b); fun (Addr a) addrLt (Addr b) = a < b; fun (Addr a) addrEq (Addr b) = a = b; fun mkWordAddr n = Addr n; fun getWordAddr (Addr a) = a; fun getByteAddr (Addr a) = a * wordSize; val addrZero = mkWordAddr 0; val addrLast = mkWordAddr (exp2_29 - 1); (* A big number. *) end; (*****************************************************************************) (* The "quad" datatype (used for instruction words) *) (*****************************************************************************) datatype quad = (* the 4 bytes of the instruction word *) Quad of short * short * short * short (* break an instruction word into 4 bytes; try to do it in a way that *) (* will minimise the arithmetic - particularly for long values. *) fun toQuad (w : int) : quad = let val topHw = toShort (w div exp2_16); val bottomHw = toShort (w mod exp2_16); in Quad (topHw >> short8, mask8Bits And topHw, bottomHw >> short8, mask8Bits And bottomHw) end; (* returns *unsigned* integer *) fun fromQuad (Quad (b1,b2,b3,b4)) : int = let val topHw = toInt ((b1 << short8) Or b2); val bottomHw = toInt ((b3 << short8) Or b4); in topHw * exp2_16 + bottomHw end; val zeroQuad : quad = Quad (short0, short0, short0, short0); (*****************************************************************************) (* Getting and setting quads *) (*****************************************************************************) (* We're using a big-endian machine *) fun setQuad (Quad (b0, b1, b2, b3), addr : addrs, seg : cseg) : unit = let val a : int = getByteAddr addr; val U : unit = csegSet (seg, a, b0); val U : unit = csegSet (seg, a + 1, b1); val U : unit = csegSet (seg, a + 2, b2); in csegSet (seg, a + 3, b3) end; fun getQuad (addr : addrs, seg : cseg) : quad = let val a : int = getByteAddr addr; val b0 = csegGet (seg, a); val b1 = csegGet (seg, a + 1); val b2 = csegGet (seg, a + 2); val b3 = csegGet (seg, a + 3); in Quad (b0, b1, b2, b3) end; (*****************************************************************************) (* Types for branch labels *) (*****************************************************************************) datatype 'a option = None | Some of 'a datatype label = Label of addrs option ref; type labels = label list; (* for now *) val noJump : labels = []; (*****************************************************************************) (* The condition datatype *) (*****************************************************************************) (* We don't use the unsigned conditions, except for the stack check. *) datatype condition = NEVER | EQ | LT | LE | OD | TR | NE | GE | GT | EV ; fun reprCond (cond : condition) : string = case cond of NEVER => "NEVER" | EQ => "EQ" | LT => "LT" | LE => "LE" | OD => "OD" | TR => "TR" | NE => "NE" | GE => "GE" | GT => "GT" | EV => "EV" ; (* The tests are set up for an RI comparison, but we actually have an IR instruction *) fun swapArgs (cond : condition) : condition = case cond of NEVER => NEVER | EQ => EQ | LT => GT | LE => GE | OD => OD | TR => TR | NE => NE | GE => LE | GT => LT | EV => EV ; (* When we do branch extension, we need to invert the test in a COMIB/COMB instruction *) fun invert (cond : condition) : condition = case cond of NEVER => TR | EQ => NE | LT => GE | LE => GT | OD => EV | TR => NEVER | NE => EQ | GE => LT | GT => LE | EV => OD ; fun isEqTest (cond : condition) : bool = case cond of EQ => true | NE => true | _ => false (* Use for COMBT, COMIBT instructions *) fun encodeArithCond (cond : condition) : (bool * short) = case cond of NEVER => (true, short0) | EQ => (true, short1) | LT => (true, short2) | LE => (true, short3) | OD => (true, short7) | TR => (false, short0) | NE => (false, short1) | GE => (false, short2) | GT => (false, short3) | EV => (false, short7) ; (* Encoding of c,f fields for arithmetic/logical instructions. N.B these encoding are DIFFERENT from the ones we would have to use with the Shift/Extract/Deposit conditions. For the logical instructions, the encodings are correct, but not all are valid. *) val NEVER_short : short = (short0 << short1) Or short0; val LT_short : short = (short2 << short1) Or short0; val OD_short : short = (short7 << short1) Or short0; val EV_short : short = (short7 << short1) Or short1; val UGT_short : short = (short5 << short1) Or short1; (*****************************************************************************) (* The instruction datatype *) (*****************************************************************************) type nullify = bool; (* Number of instructions between address loaded by LOADCODEADDR and actual JUMPTABLE instruction. *) val jumpTableOffset : int = 4; (* The (synthetic) instructions we'll actually use. *) datatype instruction = COPY of reg * reg (* OR r,%r0,t *) | AND of reg * reg * reg | OR of reg * reg * reg | XOR of reg * reg * reg | TESTTAG1 of reg * reg (* OR,OD r1,r2,%r0 *) | TESTTAG2 of reg * reg (* AND,OD r1,r2,%r0 *) | ADDO of reg * reg * reg | ADDL of reg * reg * reg | SUB of reg * reg * reg | ARBSUB of reg * reg * reg (* SUBTO,EV r1,r2,rd *) | STACKCHECK of reg (* SUBT,>> %rsl,r,%r0 *) | HEAPCHECK of reg (* SUBT,< %rhl,r,%rhl *) | LSHR of nat5 * reg * reg (* EXTRU r,31-n,32-n,t *) | ASHR of nat5 * reg * reg (* EXTRS r,31-n,32-n,t *) | SHL of nat5 * reg * reg (* ZDEP r,31-n,32-n,t *) | TAGCODEREG of int5 * reg (* DEPI n,31,2,r *) | ARBADDI of int11 * reg * reg (* ADDITO,EV n,r1,rd *) | UNTAGCHECK of reg * reg (* ADDIT,OD -1,rs,rd *) | HEAPCHECKI of int11 (* ADDIT,< n,%rhl,%rhl *) | ADDIL of int21 * reg | LDO of int14 * reg * reg | LDB of int14 * reg * reg | LDW of int14 * reg * reg | STB of reg * int14 * reg | STW of reg * int14 * reg | STWM of reg * int14 * reg | LOADCONST of int * reg * reg (* LDW <4*n+offset>(b),t *) | LDBXSH of reg * reg * reg (* we're only interested in the LDWB,S variant *) | LDWXSH of reg * reg * reg (* we're only interested in the LDWX,S variant *) (* Unconditional calls and branches. CALLREG and CALLSELF never nullify. *) | BRANCH of nullify * label (* BL,? lab,regZero *) | CALLREG of reg (* BLE 0(%sr0,%r) *) | CALLSELF (* BL L3,regReturn *) | JUMPREG of nullify * reg (* BV,? %r0(%r) *) | JUMPSELF of nullify (* BL,? L4,regZero *) | LOADCODEADDR of reg (* BL 0,%r *) | JUMPTABLE of int * (label list ref) | BYTEOFFSET of addrs * label (* The "nullify" flag indicates whether we nullify the instruction in the delay slot for taken branches. Since this is NOT the HPPA semantics (for backwards conditional branches the HPPA nullifies the NON-taken branch), we have to ensure that the low-level code generator sees only forward branches (where our semantics agree with what HPPA provides). There's some code in revExpand that ensures that this is the case. SPF 7/3/97 *) | COMB of condition * nullify * reg * reg * label | COMIB of condition * nullify * int5 * reg * label (* Logically speaking, ARBCOMB etc should have nullify flags too, but the RTS emulation code isn't good enough to support delay slots so we have to ensure that taken branches are ALWAYS nullified. SPF 7/3/97 *) | ARBCOMB of condition * reg * reg * label | ARBCOMBAUX of condition * reg * reg * label (* used when r1 is known to be short *) | ARBCOMIB of condition * int5 * reg * label (* Pseudo-code for a branch-in point. *) | JUMPTARGET of label list (* Not yet used ... | MOVBTR of nullify * reg * reg * label (* we're only interested in the MOVB,TR variant *) | MOVIBTR of nullify * int5 * reg * label (* we're only interested in the MOVIB,TR variant *) ... *) ; (*****************************************************************************) (* Macro-instruction expander *) (*****************************************************************************) fun fixupLabel (target : addrs) (Label (r as (ref None))) = r := Some target | fixupLabel (target : addrs) (Label (r as (ref (Some _)))) = raise InternalError "fixupLabel: label already fixed up" fun inList (x, []) = false | inList (x, h :: t) = x = h orelse inList (x, t) fun remove (x, []) = [] | remove (x, h :: t) = if x = h then t else h :: remove (x, t); (* instrLength is the number of quads that the instruction will expand to. *) fun instrLength (COMB _ ) = raise InternalError "instrLength: COMB has variable length (branch extension possible)" | instrLength (COMIB _ ) = raise InternalError "instrLength: COMIB has variable length (branch extension possible)" | instrLength (ARBCOMB _ ) = raise InternalError "instrLength: ARBCOMB has variable length (branch extension possible)" | instrLength (ARBCOMBAUX _ ) = raise InternalError "instrLength: ARBCOMBAUX has variable length (branch extension possible)" | instrLength (JUMPTARGET _ ) = 0 | instrLength (JUMPTABLE (size, _)) = size | instrLength _ = 1 ; fun instrListLengthLoop (n, []) = n | instrListLengthLoop (n, h :: t) = instrListLengthLoop (n + instrLength h, t); fun instrListLength l = instrListLengthLoop (0, l); (* Notes: (1) Labels are now fixed-up relative to the END of the code. (2) Before the code is expanded, the nullify flag in COMB/COMIB assumes that we're going to have a forwards jump (this should always be the case unless we've chained them onto a backwards unconditional branch). After the code is expanded, it has its normal HPUX interpretation (but notice that we never create any backwards conditional jumps, so we can say that it still has the previous "nullify if jump is taken" interpretation). *) fun revExpandOnto (here : addrs, [], l) = (l, ~ (getWordAddr here)) | revExpandOnto (here : addrs, h :: t, l) = case h of COMB (cond : condition, nullify : bool, r1 : reg, r2 : reg, lab : label) => let val isShortForwardJump : bool = case lab of Label (ref (Some target)) => isPositive12Bit (target wordAddrMinus (here wordAddrPlus 1)) | _ => false; in if isShortForwardJump then revExpandOnto (here wordAddrPlus ~1, t, h :: l) else let val newLab : label = Label (ref (Some here)); in revExpandOnto (here wordAddrPlus ~2, t, COMB (invert cond, true, r1, r2, newLab) :: BRANCH (nullify, lab) :: JUMPTARGET [newLab] :: l) end end | COMIB (cond : condition, nullify : bool, imm : int5, r : reg, lab : label) => let val isShortForwardJump : bool = case lab of Label (ref (Some target)) => isPositive12Bit (target wordAddrMinus (here wordAddrPlus 1)) | _ => false; in if isShortForwardJump then revExpandOnto (here wordAddrPlus ~1, t, h :: l) else let val newLab : label = Label (ref (Some here)); in revExpandOnto (here wordAddrPlus ~2, t, COMIB (invert cond, true, imm, r, newLab) :: BRANCH (nullify, lab) :: JUMPTARGET [newLab] :: l) end end | ARBCOMB (cond : condition, r1 : reg, r2 : reg, lab : label) => let val TESTTAGS : reg * reg -> instruction = if isEqTest cond then TESTTAG1 else TESTTAG2; val isShortForwardJump : bool = case lab of Label (ref (Some target)) => isPositive12Bit (target wordAddrMinus (here wordAddrPlus 1)) | _ => false; in if isShortForwardJump then revExpandOnto (here wordAddrPlus ~3, t, TESTTAGS (r1, r2) :: UNTAGCHECK (regZero, regZero) :: COMB (cond, true, r1, r2, lab) :: l) else let val newLab : label = Label (ref (Some here)); in revExpandOnto (here wordAddrPlus ~4, t, TESTTAGS (r1, r2) :: UNTAGCHECK (regZero, regZero) :: COMB (invert cond, true, r1, r2, newLab) :: BRANCH (true, lab) :: JUMPTARGET [newLab] :: l) end end | ARBCOMBAUX (cond : condition, r1 : reg, r2 : reg, lab : label) => let val isShortForwardJump : bool = case lab of Label (ref (Some target)) => isPositive12Bit (target wordAddrMinus (here wordAddrPlus 1)) | _ => false; in if isShortForwardJump then revExpandOnto (here wordAddrPlus ~2, t, UNTAGCHECK (r2, regZero) :: COMB (cond, true, r1, r2, lab) :: l) else let val newLab : label = Label (ref (Some here)); in revExpandOnto (here wordAddrPlus ~3, t, UNTAGCHECK (r2, regZero) :: COMB (invert cond, true, r1, r2, newLab) :: BRANCH (true, lab) :: JUMPTARGET [newLab] :: l) end end | ARBCOMIB (cond : condition, imm : int5, r : reg, lab : label) => let val isShortForwardJump : bool = case lab of Label (ref (Some target)) => isPositive12Bit (target wordAddrMinus (here wordAddrPlus 1)) | _ => false; in if isShortForwardJump then revExpandOnto (here wordAddrPlus ~2, t, UNTAGCHECK (r, regZero) :: COMIB (cond, true, imm, r, lab) :: l) else let val newLab : label = Label (ref (Some here)); in revExpandOnto (here wordAddrPlus ~3, t, UNTAGCHECK (r, regZero) :: COMIB (invert cond, true, imm, r, newLab) :: BRANCH (true, lab) :: JUMPTARGET [newLab] :: l) end end | JUMPTARGET labs => let val U : unit = applyList (fixupLabel here, labs); in revExpandOnto (here, t, h :: l) end (* The labels are in reverse order (highest index first) *) | JUMPTABLE (tableSize, ref labList) => let val nextAddr : addrs = here wordAddrPlus (~ tableSize); val tableBase : addrs = nextAddr wordAddrPlus (~ jumpTableOffset); fun fillTable ([], l) = l | fillTable (lab :: labs, l) = fillTable (labs, BYTEOFFSET (tableBase, lab) :: l) in revExpandOnto (nextAddr, t, fillTable (labList, l)) end | _ => revExpandOnto (here wordAddrPlus ~1, t, h :: l); fun revExpand (l : instruction list) : instruction list * int = revExpandOnto (addrZero, l, []); (*****************************************************************************) (* The pretty-printer (for code) *) (*****************************************************************************) fun reprInstruction (segStartAddr : addrs, instr : instruction) : string = case instr of COPY (r1 : reg, rt : reg) => implode ["COPY (", regRepr r1, ", ", regRepr rt, ")"] | AND (r1 : reg, r2 : reg, rt : reg) => implode ["AND (", regRepr r1, ", ", regRepr r2, ", ", regRepr rt, ")"] | OR (r1 : reg, r2 : reg, rt : reg) => implode ["OR (", regRepr r1, ", ", regRepr r2, ", ", regRepr rt, ")"] | XOR (r1 : reg, r2 : reg, rt : reg) => implode ["XOR (", regRepr r1, ", ", regRepr r2, ", ", regRepr rt, ")"] | TESTTAG1 (r1 : reg, r2 : reg) => implode ["TESTTAG1 (", regRepr r1, ", ", regRepr r2, ")"] | TESTTAG2 (r1 : reg, r2 : reg) => (* AND,OD r1,r2,%r0 *) implode ["TESTTAG2 (", regRepr r1, ", ", regRepr r2, ")"] | ADDO (r1 : reg, r2 : reg, rt : reg) => implode ["ADDO (", regRepr r1, ", ", regRepr r2, ", ", regRepr rt, ")"] | ADDL (r1 : reg, r2 : reg, rt : reg) => implode ["ADDL (", regRepr r1, ", ", regRepr r2, ", ", regRepr rt, ")"] | SUB (r1 : reg, r2 : reg, rt : reg) => implode ["SUB (", regRepr r1, ", ", regRepr r2, ", ", regRepr rt, ")"] | ARBSUB (r1 : reg, r2 : reg, rt : reg) => implode ["ARBSUB (", regRepr r1, ", ", regRepr r2, ", ", regRepr rt, ")"] | STACKCHECK (r1 : reg) => implode ["STACKCHECK (", regRepr r1, ")"] | HEAPCHECK (r1 : reg) => implode ["HEAPCHECK (", regRepr r1, ")"] | ARBADDI (imm : int11, r1 : reg, rt : reg) => implode ["ARBADDI (", Int.toString (getInt11 imm), ", ", regRepr r1, ", ", regRepr rt, ")"] | UNTAGCHECK (r1 : reg, rt : reg) => (* ADDIT,OD -1,rs,rd *) implode ["UNTAGCHECK (", regRepr r1, ", ", regRepr rt, ")"] | HEAPCHECKI (imm : int11) => (* ADDIT,< n,%rhl,%rhl *) implode ["HEAPCHECKI (", Int.toString (getInt11 imm), ")"] | LSHR (sh : nat5, r1 : reg, rt : reg) => implode ["LSHR (", Int.toString (getNat5 sh), ", ", regRepr r1, ", ", regRepr rt, ")"] | ASHR (sh : nat5, r1 : reg, rt : reg) => (* EXTRS r,31-n,32-n,t *) implode ["ASHR (", Int.toString (getNat5 sh), ", ", regRepr r1, ", ", regRepr rt, ")"] | SHL (sh : nat5, r1 : reg, rt : reg) => (* ZDEP r,31-n,32-n,t *) implode ["SHL (", Int.toString (getNat5 sh), ", ", regRepr r1, ", ", regRepr rt, ")"] | TAGCODEREG (imm : int5, r : reg) => implode ["TAGCODEREG (", Int.toString (getInt5 imm), ", ", regRepr r, ")"] | ADDIL (imm : int21, r : reg) => implode ["ADDIL (", Int.toString (getInt21 imm), ", ", regRepr r, ")"] | LDO (imm : int14, rb : reg, rt : reg) => implode ["LDO (", Int.toString (getInt14 imm), ", ", regRepr rb, ", ", regRepr rt, ")"] | LDB (imm : int14, rb : reg, rt : reg) => implode ["LDB (", Int.toString (getInt14 imm), ", ", regRepr rb, ", ", regRepr rt, ")"] | LDW (imm : int14, rb : reg, rt : reg) => implode ["LDW (", Int.toString (getInt14 imm), ", ", regRepr rb, ", ", regRepr rt, ")"] | STB (rs : reg, imm : int14, rb : reg) => implode ["STB (", regRepr rs, ", ", Int.toString (getInt14 imm), ", ", regRepr rb, ")"] | STW (rs : reg, imm : int14, rb : reg) => implode ["STW (", regRepr rs, ", ", Int.toString (getInt14 imm), ", ", regRepr rb, ")"] | STWM (rs : reg, imm : int14, rb : reg) => implode ["STWM (", regRepr rs, ", ", Int.toString (getInt14 imm), ", ", regRepr rb, ")"] | LOADCONST (constNum : int, rb : reg, rt : reg) => (* LDW <4*n+offset>(b),t *) implode ["LOADCONST (", Int.toString constNum, ", " ,regRepr rb, ", ", regRepr rt, ")"] | LDBXSH (rx : reg, rb : reg, rt : reg) => implode ["LDBXSH (", regRepr rx, ", ", regRepr rb, ", ", regRepr rt, ")"] | LDWXSH (rx : reg, rb : reg, rt : reg) => implode ["LDWXSH (", regRepr rx, ", ", regRepr rb, ", ", regRepr rt, ")"] | BRANCH (nullify : bool, Label (ref None)) => implode ["BRANCH (", reprBool nullify, ", ???label???)"] | BRANCH (nullify : bool, Label (ref (Some targetAddr))) => let val byteAddr : int = targetAddr byteAddrMinus segStartAddr; in implode ["BRANCH (", reprBool nullify, ", ", Int.toString byteAddr, ")"] end | JUMPREG (nullify : bool, r : reg) => implode ["JUMPREG (", reprBool nullify, ", ", regRepr r, ")"] | JUMPSELF (nullify : bool) => implode ["JUMPSELF (", reprBool nullify, ")"] | LOADCODEADDR (r : reg) => implode ["LOADCODEADDR (", regRepr r, ")"] | BYTEOFFSET (tableAddr : addrs, Label (ref None)) => let val tableOffset : int = tableAddr byteAddrMinus segStartAddr; in implode ["BYTEOFFSET (", Int.toString tableOffset, ", ???label???)"] end | BYTEOFFSET (tableAddr : addrs, Label (ref (Some targetAddr))) => let val tableOffset : int = tableAddr byteAddrMinus segStartAddr; val targetOffset : int = targetAddr byteAddrMinus segStartAddr; in implode ["BYTEOFFSET (", Int.toString tableOffset, ", ", Int.toString targetOffset, ")"] end | CALLREG (r : reg) => implode ["CALLREG (", regRepr r, ")"] | CALLSELF => "CALLSELF" | COMB (cond : condition, nullify : bool, r1 : reg, r2 : reg, Label (ref None)) => implode ["COMB (", reprCond cond, ", ", reprBool nullify, ", ", regRepr r1, ", ", regRepr r2, ", ???label???)"] | COMB (cond : condition, nullify : bool, r1 : reg, r2 : reg, Label (ref (Some targetAddr))) => let val byteAddr : int = targetAddr byteAddrMinus segStartAddr; in implode ["COMB (", reprCond cond, ", ", reprBool nullify, ", ", regRepr r1, ", ", regRepr r2, ", ", Int.toString byteAddr, ")"] end | COMIB (cond : condition, nullify : bool, imm : int5, r : reg, Label (ref None)) => implode ["COMIB (", reprCond cond, ", ", reprBool nullify, ", ", Int.toString (getInt5 imm) , ", ", regRepr r, ", ???label???)"] | COMIB (cond : condition, nullify : bool, imm : int5, r : reg, Label (ref (Some targetAddr))) => let val byteAddr : int = targetAddr byteAddrMinus segStartAddr; in implode ["COMIB (", reprCond cond, ", ", reprBool nullify, ", ", Int.toString (getInt5 imm) , ", ", regRepr r, ", ", Int.toString byteAddr, ")"] end | ARBCOMB (cond : condition, r1 : reg, r2 : reg, _) => implode ["ARBCOMB (", reprCond cond, ", ", regRepr r1, ", ", regRepr r2, ", ???)"] | ARBCOMBAUX (cond : condition, r1 : reg, r2 : reg, _) => implode ["ARBCOMBAUX (", reprCond cond, ", ", regRepr r1, ", ", regRepr r2, ", ???)"] | ARBCOMIB (cond : condition, imm : int5, r : reg, _) => implode ["ARBCOMIB (", reprCond cond, ", ", Int.toString (getInt5 imm) , ", ", regRepr r, ", ???)"] | JUMPTARGET labs => implode ["JUMPTARGET (", Int.toString (length labs), ")"] | JUMPTABLE (size, _) => implode ["JUMPTABLE (", Int.toString size, " entries)"] (* ... | MOVBTR (nullify : bool, r1 : reg, rt : reg, Label (ref None)) => implode ["MOVBTR (", reprBool nullify, ", ", regRepr r1, ", ", regRepr rt, ", ???label???)"] | MOVBTR (nullify : bool, r1 : reg, rt : reg, Label (ref (Some targetAddr))) => let val byteAddr : int = targetAddr byteAddrMinus segStartAddr; in implode ["MOVBTR (", reprBool nullify, ", ", regRepr r1, ", ", regRepr rt, ", ", Int.toString byteAddr, ")"] end | MOVIBTR (nullify : bool, imm : int5, rt : reg, Label (ref None)) => implode ["MOVIBTR (", reprBool nullify, ", ", Int.toString (getInt5 imm) , ", ", regRepr rt, ", ???label???)"] | MOVIBTR (nullify : bool, imm : int5, rt : reg, Label (ref (Some targetAddr))) => let val byteAddr : int = targetAddr byteAddrMinus segStartAddr; in implode ["MOVIBTR (", reprBool nullify, ", ", Int.toString (getInt5 imm) , ", ", regRepr rt, ", ", Int.toString byteAddr, ")"] end; ... *) (* end reprInstruction *) (*****************************************************************************) (* The low-level code-generator *) (*****************************************************************************) local (* encoding of opcode2 field for arithmetic/logical instructions *) val ANDop2 : short = short8; val ORop2 : short = short9; val XORop2 : short = short10; (* 0x0A *) val SUBop2 : short = short16; (* 0x10 *) val SUBTop2 : short = short19; (* 0x13 *) val ADDLop2 : short = short40; (* 0x28 *) val SUBTOop2 : short = short51; (* 0x33 *) val ADDOop2 : short = short56; (* 0x38 *) fun mkALUquad (opcode2 : short, r1 : reg, r2 : reg, rt : reg, cf : short) : quad = let val opcode : short = short2; val r1_short : short = toShort (getReg r1); val r2_short : short = toShort (getReg r2); val rt_short : short = toShort (getReg rt); val b0 : short = (opcode << short2) Or ((r2_short >> short3) And mask2Bits); val b1 : short = ((r2_short And mask3Bits) << short5) Or r1_short; val b2 : short = (cf << short4) Or ((opcode2 >> short2) And mask4Bits); val b3 : short = ((opcode2 And mask2Bits) << short6) Or rt_short; (* bit 26 is zero *) in Quad (b0, b1, b2, b3) end; (* encoding of opcode field for ALU immediate instructions *) val ADDITop : short = short44 (* 0x2C *); fun mkALUimmedQuad (opcode : short, opcode2 : bool, imm : int11, r1 : reg, rt : reg, cf : short) : quad = let (* The only tricky part is that the sign bit of the immediate is stored in the LSB (not the nomal MSB) position. *) val r1_short : short = toShort (getReg r1); val rt_short : short = toShort (getReg rt); val imm_short : short = toShort (getInt11 imm); val op2_short : short = if opcode2 then short1 else short0; val b0 : short = (opcode << short2) Or ((r1_short >> short3) And mask2Bits); val b1 : short = ((r1_short And mask3Bits) << short5) Or rt_short; val b2 : short = (cf << short4) Or (op2_short << short3) Or ((imm_short >> short7) And mask3Bits); val b3 : short = ((imm_short And mask7Bits) << short1) Or ((imm_short >> short10) And mask1Bit); in Quad (b0, b1, b2, b3) end; (* encoding of opcode field for extract/deposit instructions *) val EXTRop : short = short52 (* 0x34 *); val DEPop : short = short53 (* 0x35 *); (* encoding of opcode2 field for extract/deposit instructions *) val EXTRUop2 : short = short6; val EXTRSop2 : short = short7; val ZDEPop2 : short = short2; val DEPIop2 : short = short7; fun mkExtrDepQuad (opcode : short, opcode2 : short, r2 : short, r1 : short, pos : short, len : short) : quad = let (* We generate the c field as zero (NEVER) *) val b0 : short = (opcode << short2) Or ((r2 >> short3) And mask2Bits); val b1 : short = ((r2 And mask3Bits) << short5) Or r1; val b2 : short = (opcode2 << short2) Or ((pos >> short3) And mask2Bits); (* c=0 *) val b3 : short = ((pos And mask3Bits) << short5) Or len; in Quad (b0, b1, b2, b3) end (* encoding of opcode field for load/store instructions *) val LDOop : short = short13; (* 0x0D *) val LDBop : short = short16; (* 0x10 *) val LDWop : short = short18; (* 0x12 *) val STBop : short = short24; (* 0x18 *) val STWop : short = short26; (* 0x1A *) val STWMop : short = short27; (* 0x1B *) fun mkLoadStoreQuad (opcode : short, rb : reg, rt : reg, offset : int14) : quad = let (* The only tricky part is that the sign bit of the offset is stored in the LSB (not the nomal MSB) position. *) val rb_short : short = toShort (getReg rb); val rt_short : short = toShort (getReg rt); val off_short : short = toShort (getInt14 offset); val b0 : short = (opcode << short2) Or ((rb_short >> short3) And mask2Bits); val b1 : short = ((rb_short And mask3Bits) << short5) Or rt_short; val b2 : short = (off_short >> short7) And mask6Bits; (* s field is zero *) val b3 : short = ((off_short And mask7Bits) << short1) Or ((off_short >> short13) And mask1Bit); in Quad (b0, b1, b2, b3) end; (* encoding of opcode2 field for indexed load instructions *) val LDWXop2 : short = short2; val LDBXop2 : short = short0; fun mkLoadXSHquad (opcode2 : short, rx : reg, rb : reg, rt : reg) : quad = let val opcode : short = short3; val rb_short : short = toShort (getReg rb); val rx_short : short = toShort (getReg rx); val rt_short : short = toShort (getReg rt); (* We generate the s, cc and m fields as zero; bit 19 must also be zero *) val b0 : short = (opcode << short2) Or ((rb_short >> short3) And mask2Bits); val b1 : short = ((rb_short And mask3Bits) << short5) Or rx_short; val b2 : short = (short1 << short5) Or ((opcode2 >> short2) And mask2Bits); (* u=1 *) val b3 : short = ((opcode2 And mask2Bits) << short6) Or rt_short; in Quad (b0, b1, b2, b3) end; (* encoding of opcode field for 17-bit unconditional branch instructions *) val BLop : short = short58; (* 0x3A *) val BLEop : short = short57; (* 0x39 *) (* encoding of opcode2 field for 17-bit unconditional branch instructions *) val BLop2 : short = short0; (* For BLE the opcode2 field encode the space register. *) fun mkUncondBranch17Quad (opcode : short, opcode2 : short, r : reg, offset : int17, nullify : bool) : quad = let (* The tricky part is that the offset gets horribly munged. *) val r_short : short = toShort (getReg r); val n_short : short = if nullify then short1 else short0; val off_short : short = toShort (getInt17 offset); val w1_short : short = (off_short >> short11) And mask5Bits; val w2_short : short = ((off_short And mask10Bits) << short1) Or ((off_short >> short10) And mask1Bit); val w3_short : short = (off_short >> short16) And mask1Bit; val b0 : short = (opcode << short2) Or ((r_short >> short3) And mask2Bits); val b1 : short = ((r_short And mask3Bits) << short5) Or w1_short; val b2 : short = (opcode2 << short5) Or ((w2_short >> short6) And mask5Bits); val b3 : short = ((w2_short And mask6Bits) << short2) Or (n_short << short1) Or w3_short; in Quad (b0, b1, b2, b3) end; fun mkBVquad (rx : reg, rb : reg, nullify : bool) : quad = let val opcode : short = short58; (* 0x3A *) (* same major opcode as BL *) val rb_short : short = toShort (getReg rb); val rx_short : short = toShort (getReg rx); val n_short : short = if nullify then short1 else short0; val opcode2 : short = short6; (* BL has 0 here *) val b0 : short = (opcode << short2) Or ((rb_short >> short3) And mask2Bits); val b1 : short = ((rb_short And mask3Bits) << short5) Or rx_short; val b2 : short = opcode2 << short5; (* displacement field is zero *) val b3 : short = n_short << short1; (* displacement field is zero *) in Quad (b0, b1, b2, b3) end; (* encoding of opcode field for conditional branch instructions *) val COMBTop : short = short32; (* 0x20 *) val COMBFop : short = short34; (* 0x22 *) val COMIBTop : short = short33; (* 0x21 *) val COMIBFop : short = short35; (* 0x23 *) val MOVBop : short = short50; (* 0x32 *) val MOVIBop : short = short51; (* 0x33 *) fun mkCondBranchQuad (opcode : short, dest : short, source : short, cond : short, offset : int12, nullify : bool) : quad = let (* The only tricky part is that the top 2 bits of the immediate is stored in the LSB (not the normal MSB) positions. *) val off_short : short = toShort (getInt12 offset); val n_short : short = if nullify then short1 else short0; val b0 : short = (opcode << short2) Or ((dest >> short3) And mask2Bits); val b1 : short = ((dest And mask3Bits) << short5) Or source; val b2 : short = (cond << short5) Or ((off_short >> short5) And mask5Bits) val b3 : short = ((off_short And mask5Bits) << short3) Or (((off_short >> short10) And mask1Bit) << short2) Or (n_short << short1) Or ((off_short >> short11) And mask1Bit); in Quad (b0, b1, b2, b3) end; fun mkQuad (thisAddr : addrs, (* relative to end of prelude *) instr : instruction, constByteOffset : int14, selfCallAddr : addrs ) : quad = case instr of COPY (r1 : reg, rt : reg) => mkALUquad (ORop2 : short, r1, regZero, rt, NEVER_short : short) | AND (r1 : reg, r2 : reg, rt : reg) => mkALUquad (ANDop2 : short, r1 : reg, r2 : reg, rt : reg, NEVER_short : short) | OR (r1 : reg, r2 : reg, rt : reg) => mkALUquad (ORop2 : short, r1 : reg, r2 : reg, rt : reg, NEVER_short : short) | XOR (r1 : reg, r2 : reg, rt : reg) => mkALUquad (XORop2 : short, r1 : reg, r2 : reg, rt : reg, NEVER_short : short) | TESTTAG1 (r1 : reg, r2 : reg) => (* OR,OD r1,r2,%r0 *) mkALUquad (ORop2 : short, r1 : reg, r2 : reg, regZero : reg, OD_short : short) | TESTTAG2 (r1 : reg, r2 : reg) => (* AND,OD r1,r2,%r0 *) mkALUquad (ANDop2 : short, r1 : reg, r2 : reg, regZero : reg, OD_short : short) | ADDO (r1 : reg, r2 : reg, rt : reg) => mkALUquad (ADDOop2 : short, r1 : reg, r2 : reg, rt : reg, NEVER_short : short) | ADDL (r1 : reg, r2 : reg, rt : reg) => mkALUquad (ADDLop2 : short, r1 : reg, r2 : reg, rt : reg, NEVER_short : short) | SUB (r1 : reg, r2 : reg, rt : reg) => mkALUquad (SUBop2 : short, r1 : reg, r2 : reg, rt : reg, NEVER_short : short) | ARBSUB (r1 : reg, r2 : reg, rt : reg) => (* SUBTO,EV r1,r2,rd *) mkALUquad (SUBTOop2 : short, r1 : reg, r2 : reg, rt : reg, EV_short : short) | STACKCHECK (r1 : reg) => (* SUBT,>> %rsl,r,%r0 *) mkALUquad (SUBTop2 : short, regStackLim : reg, r1 : reg, regZero : reg, UGT_short : short) | HEAPCHECK (r1 : reg) => (* SUBT,< %rhl,r,%rhl *) mkALUquad (SUBTop2 : short, regHeapLim : reg, r1 : reg, regHeapLim : reg, LT_short : short) | ARBADDI (imm : int11, r1 : reg, rt : reg) => (* ADDITO,EV n,r1,rd *) mkALUimmedQuad (ADDITop, true, imm, r1, rt, EV_short) | UNTAGCHECK (r1 : reg, rt : reg) => (* ADDIT,OD -1,rs,rd *) mkALUimmedQuad (ADDITop, false, int11_minus1, r1, rt, OD_short) | HEAPCHECKI (imm : int11) => (* ADDIT,< n,%rhl,%rhl *) mkALUimmedQuad (ADDITop, false, imm, regHeapLim, regHeapLim, LT_short) | LSHR (sh : nat5, r1 : reg, rt : reg) => (* EXTRU r,31-n,32-n,t *) let (* p = 31 - sh; len = 32 - sh; clen = 32 - len = sh; *) val rt_short : short = toShort (getReg rt); val r1_short : short = toShort (getReg r1); val sh_short : short = toShort (getNat5 sh); val p_short : short = toShort (31 - getNat5 sh); val clen_short : short = sh_short; in mkExtrDepQuad (EXTRop, EXTRUop2, r1_short, rt_short, p_short, clen_short) end | ASHR (sh : nat5, r1 : reg, rt : reg) => (* EXTRS r,31-n,32-n,t *) let (* p = 31 - sh; len = 32 - sh; clen = 32 - len = sh; *) val rt_short : short = toShort (getReg rt); val r1_short : short = toShort (getReg r1); val sh_short : short = toShort (getNat5 sh); val p_short : short = toShort (31 - getNat5 sh); val clen_short : short = sh_short; in mkExtrDepQuad (EXTRop, EXTRSop2, r1_short, rt_short, p_short, clen_short) end | SHL (sh : nat5, r1 : reg, rt : reg) => (* ZDEP r,31-n,32-n,t *) let (* p = 31 - sh; cp = 31 - p = sh; len = 32 - sh; clen = 32 - len = sh; *) val rt_short : short = toShort (getReg rt); val r1_short : short = toShort (getReg r1); val sh_short : short = toShort (getNat5 sh); val cp_short : short = sh_short; val clen_short : short = sh_short; in mkExtrDepQuad (DEPop, ZDEPop2, rt_short, r1_short, cp_short, clen_short) end | TAGCODEREG (imm : int5, rt : reg) => (* DEPI imm,31,2,rt *) let (* p = 31; cp = 31 - p = 0; len = 2; clen = 32 - len = 30; *) val rt_short : short = toShort (getReg rt); val imm5_short : short = toShort (getInt5 imm); val imm5_rep : short = ((imm5_short And mask4Bits) << short1) Or ((imm5_short >> short4) And mask1Bit); val cp_short : short = short0; val clen_short : short = short30; in mkExtrDepQuad (DEPop, DEPIop2, rt_short, imm5_rep, cp_short, clen_short) end | ADDIL (imm : int21, r : reg) => let (* The tricky part is that the offset gets horribly munged. The following use more instructions that strictly necessary, but I value correctness over speed! SPF 20/2/97 *) val opcode : short = short10; (* 0x0A *) val r_short : short = toShort (getReg r); val imm_short : short = toShort (getInt21 imm); val field0 : short = (imm_short >> short20) And mask1Bit; val field1 : short = (imm_short >> short9) And mask11Bits; val field2 : short = (imm_short >> short7) And mask2Bits; val field3 : short = (imm_short >> short2) And mask5Bits; val field4 : short = imm_short And mask2Bits; val rep_short : short = (field3 << short16) Or (field2 << short14) Or (field4 << short12) Or (field1 << short1) Or field0; val b0 : short = (opcode << short2) Or ((r_short >> short3) And mask2Bits); val b1 : short = ((r_short And mask3Bits) << short5) Or ((rep_short >> short16) And mask5Bits); val b2 : short = (rep_short >> short8) And mask8Bits; val b3 : short = rep_short And mask8Bits; in Quad (b0, b1, b2, b3) end | LDO (imm : int14, rb : reg, rt : reg) => mkLoadStoreQuad (LDOop, rb, rt, imm) | LDB (imm : int14, rb : reg, rt : reg) => mkLoadStoreQuad (LDBop, rb, rt, imm) | LDW (imm : int14, rb : reg, rt : reg) => mkLoadStoreQuad (LDWop, rb, rt, imm) | STB (rs : reg, imm : int14, rb : reg) => mkLoadStoreQuad (STBop, rb, rs, imm) | STW (rs : reg, imm : int14, rb : reg) => mkLoadStoreQuad (STWop, rb, rs, imm) | STWM (rs : reg, imm : int14, rb : reg) => mkLoadStoreQuad (STWMop, rb, rs, imm) | LOADCONST (constNum : int, rb : reg, rt : reg) => (* LDW <4*n+offset>(b),t *) let (* It's the responsibility of the prelude-generation code to ensure that constByteOffset is sufficiently small that this never overflows. SPF 20/2/1997 Unfortunately, if we have too many constants, this may not be possible. I need to look at where the LOADCONSTs are generated, and change the code to use a temporary register to bridge this gap. For now, I'll just make the error message more informative. SPF 23/3/1998 *) val imm : int = getInt14 constByteOffset + wordSize * constNum; in if is14Bit imm then mkLoadStoreQuad (LDWop, rb, rt, int14 imm) else raise InternalError (implode ["mkQuad: LOADCONST - constant number ", Int.toString constNum, " requires an offset of ", Int.toString imm, " which is too large for a signed 14-bit field"]) end | LDBXSH (rx : reg, rb : reg, rt : reg) => mkLoadXSHquad (LDBXop2, rx, rb, rt) | LDWXSH (rx : reg, rb : reg, rt : reg) => mkLoadXSHquad (LDWXop2, rx, rb, rt) | BRANCH (nullify : bool, Label (ref None)) => raise InternalError "mkQuad: BRANCH - jump has not been fixed-up" | BRANCH (nullify : bool, Label (ref (Some targetAddr))) => (* BL,? lab,regZero *) let val wordOffset : int = targetAddr wordAddrMinus (thisAddr wordAddrPlus 2); in if is17Bit wordOffset then mkUncondBranch17Quad (BLop, BLop2, regZero, int17 wordOffset, nullify) else raise InternalError "mkQuad: BRANCH - jump exceeds 17 bit range" end | JUMPREG (nullify : bool, destReg : reg) => (* BV,? regZero(destReg) *) mkBVquad (regZero, destReg, nullify) | JUMPSELF (nullify : bool) => (* BL,? L4,regZero *) let (* Offsets are calculated from 2 words beyond the current instruction *) val wordOffset : int = selfCallAddr wordAddrMinus (thisAddr wordAddrPlus 2); in if is17Bit wordOffset then mkUncondBranch17Quad (BLop, BLop2, regZero, int17 wordOffset, nullify) else raise InternalError "mkQuad: JUMPSELF - jump exceeds 17 bit range" end (* Load the absolute address of here+2 into destReg *) | LOADCODEADDR (destReg : reg) => (* BL,? $+2,destReg *) mkUncondBranch17Quad (BLop, BLop2, destReg, int17_0, false) (* Compute the byte offset lab - baseAddr *) | BYTEOFFSET (baseAddr : addrs, Label (ref None)) => raise InternalError "mkQuad: BYTEOFFSET - label has not been fixed-up" | BYTEOFFSET (tableAddr : addrs, Label (ref (Some targetAddr))) => let val byteOffset : int = targetAddr byteAddrMinus tableAddr; in toQuad byteOffset end | CALLREG (r : reg) => (* BLE 0(%sr0, %r) *) mkUncondBranch17Quad (BLEop, short0 (* %sr0 *), r, int17_0, false) | CALLSELF => (* BL L3,regReturn *) let (* Offsets are calculated from 2 words beyond the current instruction *) val wordOffset : int = selfCallAddr wordAddrMinus (thisAddr wordAddrPlus 2); in if is17Bit wordOffset then mkUncondBranch17Quad (BLop, BLop2, regReturn, int17 wordOffset, false) else raise InternalError "mkQuad: CALLSELF - jump exceeds 17 bit range" end | COMB (cond : condition, nullify : bool, r1 : reg, r2 : reg, Label (ref None)) => raise InternalError "mkQuad: COMB - jump has not been fixed-up" | COMB (cond : condition, nullify : bool, r1 : reg, r2 : reg, Label (ref (Some targetAddr))) => let val r2_short : short = toShort(getReg r2); val r1_short : short = toShort(getReg r1); val (posCond : bool, cond_short : short) = encodeArithCond cond; val wordOffset : int = targetAddr wordAddrMinus (thisAddr wordAddrPlus 2); in (* Nullification doesn't work "properly" for backwards condtional branches *) if wordOffset < 0 andalso nullify then raise InternalError "mkQuad: COMB - can't nullify backwards jump" else if is12Bit wordOffset then if posCond then mkCondBranchQuad (COMBTop, r2_short, r1_short, cond_short, int12 wordOffset, nullify) else mkCondBranchQuad (COMBFop, r2_short, r1_short, cond_short, int12 wordOffset, nullify) else raise InternalError "mkQuad: COMB - jump exceeds 12 bit range" end | COMIB (cond : condition, nullify : bool, imm : int5, r : reg, Label (ref None)) => raise InternalError "mkQuad: COMIB - jump has not been fixed-up" | COMIB (cond : condition, nullify : bool, imm : int5, r : reg, Label (ref (Some targetAddr))) => let val r_short : short = toShort(getReg r); val imm_short : short = toShort (getInt5 imm); val imm_rep : short = ((imm_short And mask4Bits) << short1) Or ((imm_short >> short4) And mask1Bit); val (posCond : bool, cond_short : short) = encodeArithCond cond; val wordOffset : int = targetAddr wordAddrMinus (thisAddr wordAddrPlus 2); in if wordOffset < 0 andalso nullify then raise InternalError "mkQuad: COMIB - can't nullify backwards jump" else if is12Bit wordOffset then if posCond then mkCondBranchQuad (COMIBTop, r_short, imm_rep, cond_short, int12 wordOffset, nullify) else mkCondBranchQuad (COMIBFop, r_short, imm_rep, cond_short, int12 wordOffset, nullify) else raise InternalError "mkQuad: COMIB - jump exceeds 12 bit range" end | ARBCOMB _ => raise InternalError "mkQuad: ARBCOMB not expanded" | ARBCOMBAUX _ => raise InternalError "mkQuad: ARBCOMBAUX not expanded" | ARBCOMIB _ => raise InternalError "mkQuad: ARBCOMIB not expanded" | JUMPTARGET _ => raise InternalError "mkQuad: JUMPTARGET doesn't generate code" | JUMPTABLE _ => raise InternalError "mkQuad: JUMPTABLE not expanded" (* ... | MOVBTR (nullify : bool, r1 : reg, rt : reg, Label (ref None)) => raise InternalError "mkQuad: MOVBTR - jump has not been fixed-up" | MOVBTR (nullify : bool, r1 : reg, rt : reg, Label (ref (Some targetAddr))) => let val rt_short : short = toShort (getReg rt); val r1_short : short = toShort (getReg r1); val cond_short : short = short4; (* encoding of TR using the shift/extract/deposit table *) val wordOffset : int = targetAddr wordAddrMinus (thisAddr wordAddrPlus 2); in if wordOffset < 0 andalso nullify then raise InternalError "mkQuad: MOVBTR - can't nullify backwards jump" else if is12Bit wordOffset then mkCondBranchQuad (MOVBop, rt_short, r1_short, cond_short, int12 wordOffset, nullify) else raise InternalError "mkQuad: MOVBTR - jump exceeds 12 bit range" end | MOVIBTR (nullify : bool, imm : int5, rt : reg, Label (ref None)) => raise InternalError "mkQuad: MOVIBTR - jump has not been fixed-up" | MOVIBTR (nullify : bool, imm : int5, rt : reg, Label (ref (Some targetAddr))) => let val rt_short : short = toShort (getReg rt); val imm_short : short = toShort (getInt5 imm); val imm_rep : short = ((imm_short And mask4Bits) << short1) Or ((imm_short >> short4) And mask1Bit); val cond_short : short = short4; (* encoding of TR using the shift/extract/deposit table *) val wordOffset : int = targetAddr wordAddrMinus (thisAddr wordAddrPlus 2); in if wordOffset < 0 andalso nullify then raise InternalError "mkQuad: MOVIBTR - can't nullify backwards jump" else if is12Bit wordOffset then mkCondBranchQuad (MOVIBop, rt_short, imm_rep, cond_short, int12 wordOffset, nullify) else raise InternalError "mkQuad: MOVIBTR - jump exceeds 12 bit range" end ... *) (* end mkQuad *) in fun genQuadsToSeg (seg : cseg, constByteOffset : int14, segStartAddr : addrs, selfCallAddr : addrs, instrList : instruction list) : unit = let fun genQuadToSeg (wordIndex : int, instr : instruction) : unit = let (* Relative to start of code segment *) val realAddr : addrs = mkWordAddr wordIndex; (* Relative to end of code segment *) val thisAddr : addrs = segStartAddr wordAddrPlus wordIndex; (* Quad generation uses addresses that are relative to the end of the segment. That's because branch labels are relative to the end of the segment, because that makes branches extension in revExpandOnto somewhat easier to implement. *) val thisQuad : quad = mkQuad (thisAddr, instr, constByteOffset, selfCallAddr); val U : unit = if (!assemblyCode) then let val U : unit = printString (Int.toString (getByteAddr realAddr)); val U : unit = printString "\t"; val U : unit = printHexN (8, fromQuad thisQuad); val U : unit = printString "\t"; val U : unit = printString (reprInstruction (segStartAddr, instr)); in printString "\n" end else () in setQuad (thisQuad, realAddr, seg) end; fun genQuadLoop (wordIndex, []) = () | genQuadLoop (wordIndex, instr :: rest) = case instr of JUMPTARGET labs => genQuadLoop (wordIndex, rest) | _ => let val U : unit = genQuadToSeg (wordIndex, instr) in genQuadLoop (wordIndex + 1, rest) end; in genQuadLoop (0, instrList) end; end; (* local *) (*************************************************************************** Functions that deal with 32-bit immediates (for convenience). If these functions are called with regStackPtr as an argument, it's the caller's responsibility to keep the stack-offset caching scheme in a consistent state. ***************************************************************************) (* Possibly we could be even more clever with our instruction choice for special cases. I'll look at this later. SPF 18/2/97 *) fun addImmed (imm : int, ra : reg, rt : reg) : instruction list = if imm = 0 then if ra regEq rt then [] else [COPY (ra, rt)] else if is14Bit imm then [LDO (int14 imm, ra, rt)] else let val (imm_left : int21, imm_right : int14) = splitLeftRight imm; in [ ADDIL (imm_left, ra), LDO (imm_right, regUnsafe, rt) ] end; fun loadImmed (imm : int, rt : reg) : instruction list = addImmed (imm, regZero, rt); (*****************************************************************************) (* The main "code" datatype *) (*****************************************************************************) datatype const = WVal of word (* an existing constant *) | CVal of code (* a forward-reference to another function *) | HVal of label (* a handler *) (* Constants which are too far to go inline in the code are put in a list and put at the end of the code. They are arranged so that the garbage collector can find them and change them as necessary. A reference to a constant is treated like a forward reference to a label. *) (* A code list is used to hold a list of code-vectors which must have the address of this code-vector put into it. *) and setCodeseg = Unset | Set of (cseg * addrs) (* Used for completing forward references. *) and code = Code of { procName: string, (* Name of the procedure. *) noClosure: bool, (* should we make a closure from this? *) codeVec: instruction list ref, (* The code we're generating (in reverse order) *) constVec: (int * const) list ref, (* Vector of words to be put at end *) numOfConsts: int ref, (* Number of constants that haven't been fixed up yet *) (* stackReset: int ref, *) (* Distance to reset the stack before the next instr. *) otherCodes: code list ref, (* Other code vectors with forward references to this vector. *) resultSeg: setCodeseg ref, (* The segment as the final result. *) mustCheckStack: bool ref, (* Set to true if stack check must be done. *) exited: bool ref, (* False if we can fall-through to here *) regTemp1Next: bool ref (* Used to share work between regTemp1 and regTemp2 *) }; (*****************************************************************************) (* Auxiliary functions on "code" *) (*****************************************************************************) fun procName (Code {procName,...}) = procName; fun noClosure (Code {noClosure,...}) = noClosure; fun codeVec (Code {codeVec,...}) = codeVec; fun constVec (Code {constVec,...}) = constVec; fun numOfConsts (Code {numOfConsts,...}) = numOfConsts; (*fun stackReset (Code {stackReset ,...}) = stackReset;*) fun otherCodes (Code {otherCodes,...}) = otherCodes; fun resultSeg (Code {resultSeg,...}) = resultSeg; fun mustCheckStack (Code {mustCheckStack,...}) = mustCheckStack; fun exited (Code {exited,...}) = exited; fun chooseTempReg (Code {regTemp1Next,...}) : reg = let val regTemp1Now : bool = !regTemp1Next; val U : unit = regTemp1Next := not regTemp1Now; in if regTemp1Now then regTemp1 else regTemp2 end; fun unreachable cvec = ! (exited cvec); (* Need not be exhaustive, but must be conservative! *) fun noFallThrough (instrList : instruction list) : bool = case instrList of (BRANCH (true, lab) :: _ ) => true | (JUMPSELF true :: _ ) => true | (JUMPREG (true, reg) :: _ ) => true | _ => false; (* Test for identity of the code segments by testing whether the resultSeg ref is the same. N.B. NOT its contents. *) infix is; fun a is b = (resultSeg a = resultSeg b); fun sameConst (WVal w1, WVal w2) = wordEq (w1, w2) | sameConst (HVal h1, HVal h2) = h1 = h2 | sameConst (CVal c1, CVal c2) = c1 is c2 | sameConst (_, _) = false; (* create and initialise a code segment *) fun codeCreate (noClosure : bool, name : string) : code = Code { procName = name, noClosure = noClosure, codeVec = ref [], constVec = ref [(0, WVal (if name = "" then toWord 0 else toWord name))], numOfConsts = ref 1, (* stackReset = ref 0, *) (* stack adjustment in WORDs *) otherCodes = ref [], resultSeg = ref Unset, (* Not yet done *) mustCheckStack = ref false, exited = ref false, regTemp1Next = ref true (* ref false would work just as well, I hope! *) }; (*****************************************************************************) (* Functions dealing with constants *) (*****************************************************************************) fun printConstVec (constants : (int * const) list, segStartAddr : addrs, constStartAddr : addrs) : unit = case constants of [] => () | _ => let val sortedConstants : (int * const) list = quickSort (fn (n1, _) => fn (n2, _) => n1 < n2) constants; fun printConstCode (a : address) : unit = printString ("code:\t" ^ nameOfCode a); fun printConstClosure (a : address) : unit = printString ("clos:\t" ^ nameOfCode a); fun printWords (a : address) : unit = let val objLength : int = toInt (ADDRESS.length a) in if objLength = 1 then printString ("words:\t1 word") else printString ("words:\t" ^ Int.toString objLength ^ " words") end; fun printBytes (a : address) : unit = let val objLength : int = toInt (ADDRESS.length a) in if objLength = 1 then printString ("bytes:\t1 word") else printString ("bytes:\t" ^ Int.toString objLength ^ " words") end; fun printConst (constNum : int, value : const) : unit = let val constAddr : addrs = constStartAddr wordAddrPlus constNum; val U : unit = printString (Int.toString (getByteAddr constAddr)); val U : unit = printString "\tconst "; val U : unit = printString (Int.toString constNum); val U : unit = printString " = \t"; val U : unit = case value of CVal c => let val U : unit = printString (if noClosure c then "code:\t" else "clos:\t"); in printString (procName c) end | HVal (Label (ref None)) => printString "handle:\t????? (not fixed up)" | HVal (Label (ref (Some targetAddr))) => let val U : unit = printString "handle:\t"; in printString (Int.toString (targetAddr byteAddrMinus segStartAddr)) end | WVal w => if isShort w then let val value : int = toInt (toShort w); val U : unit = printString "short:\t"; val U : unit = printHex value; val U : unit = printString " ("; val U : unit = printString (Int.toString value); in printString ")" end else if isString w then let val U : unit = printString "string:\t"; in printString (String.toString (toString w)) end else let val a : address = toAddress w; in if 256 <= toInt (flags a) then printString "RTS entry" else if isCode a then printConstCode a else if isBytes a then printBytes a else if isWords a andalso 1 <= toInt (ADDRESS.length a) then let val w' : word = loadWord (a, short0) in if not (isShort w') then let val a' : address = toAddress w'; in if toInt (flags a') < 256 andalso isCode a' then printConstClosure a' else printWords a (* First element of tuple is not a code segment *) end else printWords a (* First element of tuple is a short *) end else printWords a (* Not a proper tuple (shouldn't occur) *) end; in printString "\n" end (* printConst *) val U : unit = printString "Constants section:\n"; in applyList (printConst, sortedConstants) end; (* printConstVec *) (* Find the offset in the constant area of a constant. *) (* The first has offset 0. *) fun addConstToVec (valu : const, cvec : code) : int = let (* Search the list to see if the constant is already there. Handlers are never matched because they are assumed always to be different. *) fun findConst (valu, (n, v) :: t) = if sameConst (valu, v) then n else findConst (valu, t) | findConst (valu, []) = let val num : int = ! (numOfConsts cvec); val U : unit = numOfConsts cvec := num + 1; val U : unit = constVec cvec := (num, valu) :: ! (constVec cvec); in num end in findConst (valu, !(constVec cvec)) end; (* Make a reference to another procedure. Usually this will be a forward *) (* reference but it may have been compiled already, in which case we can *) (* put the code address in now. *) fun codeConst (r : code, cvec : code) : int = case ! (resultSeg r) of Set (seg : cseg, _) => let val addr : address = csegAddr seg; in addConstToVec (WVal (toWord addr), cvec) end | Unset => (* forward *) (* Add the referring procedure onto the list of the procedure referred to if it is not already there. This makes sure that when the referring procedure is finished and its address is known the address will be plugged in to every procedure which needs it. *) let fun onList (x, []) = false | onList (x, c::cs) = (x is c) orelse onList (x, cs); val codeList = ! (otherCodes r); val U : unit = if onList (cvec, codeList) then () else otherCodes r := cvec :: codeList; in addConstToVec (CVal r, cvec) end; (*****************************************************************************) (* Functions dealing with labels *) (*****************************************************************************) (*****************************************************************************) (* Code-generation functions (1) *) (*****************************************************************************) (* ... (* We start by being very simple-minded *) fun gen (cvec : code, instr : instruction) : unit = if unreachable cvec then () else codeVec cvec := instr :: (! (codeVec cvec)) fun genList (cvec : code, instrList : instruction list) : unit = if unreachable cvec then () else codeVec cvec := revOnto (instrList, ! (codeVec cvec)) ... *) (* A small, very local, optimisation *) fun optimisePushes (instrList : instruction list) : instruction list = case instrList of (STWM (rs1, n1, rb1) :: STWM (rs2, n2, rb2) :: rest) => if rb1 regEq rb2 andalso rb1 regNeq rs1 andalso rb1 regNeq rs2 then let val n : int = getInt14 n1 + getInt14 n2 in if is14Bit n then (STWM (rs1, int14 n, rb1) :: STW (rs2, n2, rb2) :: rest) else instrList end else instrList | _ => instrList (* Catch multiple pushes *) fun gen (cvec : code, instr : instruction) : unit = if unreachable cvec then () else codeVec cvec := optimisePushes (instr :: (! (codeVec cvec))) fun genList (cvec : code, [] : instruction list) : unit = () | genList (cvec : code, instr :: instrList) : unit = let val U : unit = gen (cvec, instr) in genList (cvec, instrList) end (*****************************************************************************) (* Non-naive jump fixup. *) (*****************************************************************************) (* This code deletes jumps to the immediately following instruction. It assumes that we generate a unique label for each jump, so that we can delete the label when we delete the jump. SPF 18/3/97 *) fun addLabels ([] : label list, instrList : instruction list) : instruction list = instrList | addLabels (labs : label list, instrList : instruction list) : instruction list = let val default : instruction list = JUMPTARGET labs :: instrList; in case instrList of [] => default | (instr :: rest) => case instr of JUMPTARGET labList => addLabels (labs @ labList, rest) | COMB (_, true, _, _, lab : label) => if inList (lab, labs) then addLabels (remove (lab, labs), rest) else default | COMIB (_, true, _, _, lab : label) => if inList (lab, labs) then addLabels (remove (lab, labs), rest) else default | ARBCOMB (_, _, _, lab : label) => if inList (lab, labs) then addLabels (remove (lab, labs), rest) else default | ARBCOMBAUX (_, _, _, lab : label) => if inList (lab, labs) then addLabels (remove (lab, labs), rest) else default | ARBCOMIB (_, _, _, lab : label) => if inList (lab, labs) then addLabels (remove (lab, labs), rest) else default | BRANCH (true, lab : label) => if inList (lab, labs) then addLabels (remove (lab, labs), rest) else (case rest of COMB (cond : condition, true, r1 : reg, r2 : reg, lab2 : label) :: rest2 => if inList (lab2, labs) then addLabels (remove (lab2, labs), COMB (invert cond, true, r1, r2, lab) :: rest2) else default | COMIB (cond : condition, true, imm : int5, r : reg, lab2 : label) :: rest2 => if inList (lab2, labs) then addLabels (remove (lab2, labs), COMIB (invert cond, true, imm, r, lab) :: rest2) else default | ARBCOMB (cond : condition, r1 : reg, r2 : reg, lab2 : label) :: rest2 => if inList (lab2, labs) then addLabels (remove (lab2, labs), ARBCOMB (invert cond, r1, r2, lab) :: rest2) else default | ARBCOMBAUX (cond : condition, r1 : reg, r2 : reg, lab2 : label) :: rest2 => if inList (lab2, labs) then addLabels (remove (lab2, labs), ARBCOMBAUX (invert cond, r1, r2, lab) :: rest2) else default | ARBCOMIB (cond : condition, imm : int5, r : reg, lab2 : label) :: rest2 => if inList (lab2, labs) then addLabels (remove (lab2, labs), ARBCOMIB (invert cond, imm, r, lab) :: rest2) else default | _ => default) | _ => default end; (* addSpecialLabel does NOT attempt to optimise jumps to this label. That's because it's only used for the default case for jump tables where (1) No optimisations should apply. (2) They would be unsafe because we use the same label for multiple branch instructions. *) fun addSpecialLabel (lab : label, instrList : instruction list) : instruction list = JUMPTARGET [lab] :: instrList; (*****************************************************************************) (* Functions that need to know about the stack-pointer adjustment cache. *) (*****************************************************************************) (* Exported: adds in the reset. Very naive version - will be changed later *) fun resetStack (wordOffset : int, cvec : code) : unit = genList (cvec, addImmed (wordOffset * wordSize, regStackPtr, regStackPtr)); fun genPendingStackAdjustment (cvec : code) : unit = (); fun genLimitStackReset (cvec : code) : unit = (); (* Exported: very naive version - will be changed later! *) fun setSl (wordOffset : int, cvec : code) : unit = genList (cvec, addImmed (wordOffset * wordSize, regStackPtr, regClosure)); (* Exported: very naive version - will be changed later! *) fun genPush (r : reg, cvec) : unit = gen (cvec, STWM (r, int14 (~ wordSize), regStackPtr)); (* Caching versions - actually appear to generate worse code ... (* Adds in the reset. *) fun resetStack (wordOffset : int, cvec) : unit = stackReset cvec := ! (stackReset cvec) + wordOffset; fun genPendingStackAdjustment (cvec : code) : unit = let val wordAdjustment : int = !(stackReset cvec); val byteAdjustment : int = wordAdjustment * wordSize; val U : unit = stackReset cvec := 0; in genList (cvec, addImmed (byteAdjustment, regStackPtr, regStackPtr)) end; fun genLimitStackReset (cvec : code) : unit = let (* Use isSafe12Bit rather than is12Bit to ensure that adjustedWordOffset in genPush remains a 12-bit quantity. SPF 16/10/1997 *) fun isSafe12Bit (i : int) : bool = ~exp2_11 + 1 <= i andalso i <= exp2_11 - 1; in if not (isSafe12Bit (!(stackReset cvec))) then genPendingStackAdjustment cvec else () end; fun setSl (wordOffset : int, cvec : code) : unit = let val U : unit = genLimitStackReset cvec; val adjustedWordOffset : int = wordOffset + !(stackReset cvec); val adjustedByteOffset : int = adjustedWordOffset * wordSize; in genList (cvec, addImmed (adjustedByteOffset, regStackPtr, regClosure)) end; fun genPush (r : reg, cvec : code) : unit = let val U : unit = genLimitStackReset cvec; val wordOffset : int = !(stackReset cvec); val adjustedWordOffset : int = wordOffset - 1; val U : unit = stackReset cvec := adjustedWordOffset; val adjustedByteOffset : int = adjustedWordOffset * wordSize; in gen (cvec, STW (r, int14 adjustedByteOffset, regStackPtr)) end; (* We want the peephole optimiser to combine the STW for the last push with the eventual stack adjustment (giving a STWM instead) but I haven't implemented this yet. SPF 16/10/1997 *) ... *) (* When we implement code reordering, this will have to change. *) fun genBlock (cvec : code, instrList : instruction list) : unit = let val U : unit = genPendingStackAdjustment cvec; in genList (cvec, instrList) end; fun fixup (labs : labels, cvec : code) : unit = case labs of [] => () (* Don't fixup a branch-in from dead code! *) | _ => let val U : unit = genPendingStackAdjustment cvec; val U : unit = exited cvec := false; in codeVec cvec := addLabels (labs, ! (codeVec cvec)) end; (* Used when the label may be the target of several branch instructions *) fun fixupSpecialLabel (lab : label, cvec : code) : unit = let val U : unit = genPendingStackAdjustment cvec; val U : unit = exited cvec := false; in codeVec cvec := addSpecialLabel (lab, ! (codeVec cvec)) end; (*************************************************************************** Load and Store operations. ***************************************************************************) (* Exported *) fun genLoad (byteOffset : int, ra : reg, rt : reg, cvec : code) : unit = (* It's safe to have rt = regUnsafe and genLoadPush uses this fact! *) if ra regEq regUnsafe then raise InternalError ("genStore: can't use " ^ regRepr regUnsafe) else let (* Do we need to fix-up the stack pointer? *) val U : unit = if rt regEq regStackPtr then genPendingStackAdjustment cvec else (); val adjustedOffset : int = byteOffset; (* ... val adjustedOffset : int = if ra regEq regStackPtr then let val U : unit = genLimitStackReset cvec; val wordAdjustment : int = !(stackReset cvec); in byteOffset + wordAdjustment * wordSize end else byteOffset; ... *) in if is14Bit adjustedOffset then gen (cvec, LDW (int14 adjustedOffset, ra, rt)) else let val (adjustedOffset_left : int21, adjustedOffset_right : int14) = splitLeftRight adjustedOffset; in genList (cvec, [ ADDIL (adjustedOffset_left, ra), LDW (adjustedOffset_right, regUnsafe, rt) ]) end end; (* Exported *) fun genStore (rs : reg, byteOffset : int, ra : reg, cvec : code) : unit = if rs regEq regUnsafe orelse ra regEq regUnsafe then raise InternalError ("genStore: can't use " ^ regRepr regUnsafe) else let (* Do we need to fix-up the stack pointer? *) val U : unit = if rs regEq regStackPtr then genPendingStackAdjustment cvec else (); val adjustedOffset : int = byteOffset; (* ... val adjustedOffset : int = if ra regEq regStackPtr then let val U : unit = genLimitStackReset cvec; val wordAdjustment : int = !(stackReset cvec); in byteOffset + wordAdjustment * wordSize end else byteOffset; ... *) in if is14Bit adjustedOffset then gen (cvec, STW (rs, int14 adjustedOffset, ra)) else let val (adjustedOffset_left : int21, adjustedOffset_right : int14) = splitLeftRight adjustedOffset; in genList (cvec, [ ADDIL (adjustedOffset_left, ra), STW (rs, adjustedOffset_right, regUnsafe) ]) end end; (* Exported - Can we store the value without going through a register? No. *) fun isStoreI (cnstnt: word) : bool = false; fun genStoreI (cnstnt: word, offset: int, rb: reg, cvec: code) : unit = raise InternalError "Not implemented: genStoreI"; (* Load a value and push it on the stack. Used when all the allocatable registers have run out. We must be very careful if we try to reorder this code, because it puts a tagged value into an untagged register. That's why we use regUnsafe - to remind ourseleves of the problem! *) fun genLoadPush (offset : int, base : reg, cvec : code) : unit = let (* We need to call genLimitStackReset here; otherwise genPush might call genPendingStackAdjustment which could corrupt regUnsafe. SPF 16/10/1997 *) val U : unit = genLimitStackReset cvec; val U : unit = genLoad (offset, base, regUnsafe, cvec); in genPush (regUnsafe, cvec) end; (* This is false because there's no quicker way than loading into a register and then pushing that. *) val preferLoadPush = false; (*****************************************************************************) (* Functions to generate (non-naive) branch instructions *) (*****************************************************************************) fun unconditionalBranch (cvec : code) : labels = let (* We have to do this before we look for old labels, as otherwise we might try to combine branches that require different stack adjustments! *) val U : unit = genPendingStackAdjustment cvec; val oldLabs : label list = case ! (codeVec cvec) of JUMPTARGET labs :: rest => let (* Ungenerate branch-in *) val U : unit = codeVec cvec := rest; val U : unit = exited cvec := noFallThrough rest; in labs end | _ => [] in if unreachable cvec then oldLabs else let (* branch-out required *) val lab : label = Label (ref None); val U : unit = genBlock (cvec, [BRANCH (true, lab)]) val U : unit = exited cvec := false; in lab :: oldLabs end end; (*************************************************************************** Functions for handling compiled constants ***************************************************************************) type handlerLab = label option; local (* Generating pseudo-instructions make this SO much easier. SPF 18/2/97 *) fun genLoadConstant (constNum : int, constR : reg, destR : reg, cvec : code) : unit = gen (cvec, LOADCONST (constNum, constR, destR)); in fun genLoadConst (v : word, constR : reg, destR : reg, cvec : code) : unit = if unreachable cvec then () else let val constNum : int = addConstToVec (WVal v, cvec); in genLoadConstant (constNum, constR, destR, cvec) end; fun genLoadCoderef (rf : code, constR : reg, destR : reg, cvec : code) : unit = if unreachable cvec then () else let val constNum : int = codeConst (rf : code, cvec); in genLoadConstant (constNum, constR, destR, cvec) end; fun pushAddress (constR : reg, cvec : code) : handlerLab = if unreachable cvec then None else let val lab : label = Label (ref None); val constNum : int = addConstToVec (HVal lab, cvec); val regTemp : reg = chooseTempReg cvec; val U : unit = genLoadConstant (constNum, constR, regTemp, cvec); val U : unit = genPush (regTemp, cvec); in Some lab end; end; (* Less naive now - even allows branch chaining! SPF 27/2/97 *) fun fixupHandler (None : handlerLab, cvec : code) : unit = () | fixupHandler (Some lab : handlerLab, cvec : code) : unit = fixup ([lab], cvec); (*************************************************************************** Functions calls and returns (plus raising exceptions) ***************************************************************************) datatype callKinds = StaticLink (* Static link call. *) | FullCall (* Full closure call. Includes calls to the run-time system. *) | Recursive (* The function calls itself. *) | PureCode (* The function calls a pre-compiled function. *); (* I/O calls are treated as full closure-calls; pure-code calls are just static-link calls where the caller hasn't initialised the closure. *) val IoCall : callKinds = FullCall; (***************************************************************************** Calling conventions: FullCall: the caller loads the function's closure into regClosure and then (the code here) loads regCode from the closure and jumps to that address. Since this code-generator doesn't support combined closure/code segments, regCode will always contain a valid pointer (unlike the SPARC, where the Poly version of compiler use optimised closures, which can cause a lot of grief). Note: actually there's still a problem calling RTS functions, since the RTS code address is NOT a valid ML value. We'll have to ensure that the RTS always zaps it. I discovered this problem in the SPARC version, but it occurs here too. SPF 18/7/96 IoCall: same as FullCall (on this architecture). We could use a temporary register rather than regCode, but this wouldn't actually gain us anything, as the RTS still has to handle the possibility of FullCall entry. SPF 18/7/96 StaticLink: the caller loads the function's static-link into regClosure and its code address into regCode and then (the code here) jumps to the code. Recursive: the caller loads its own function's closure/static-link into regClosure and its constants address into regCode and then (the code here) jumps to the start of its segment. (N.B. on architectures which don't have relative calls, we can always store the code address in the constants section, fetch it via the constants register and jump via a register. PureCode: the caller loads the functions' code address into regCode and then (the code here) jumps to the code. regClosure is treated as a scratch register. *****************************************************************************) (* Call a function. We have to set the stack-check flag to ensure that the called procedure receives its full minStackCheck words allocation of "free" stack. *) fun callFunction (callKind, cvec) : unit = let val U : unit = case callKind of Recursive => genBlock (cvec, [CALLSELF, TAGCODEREG (int5_CODETAG, regReturn)]) | PureCode => genBlock (cvec, [CALLREG regCode, TAGCODEREG (int5_CODETAG, regReturn)]) | StaticLink => genBlock (cvec, [CALLREG regCode, TAGCODEREG (int5_CODETAG, regReturn)]) | FullCall => let (* This is NOT generated as part of the following genBlock, because we want to allow the code-reordering phase (when written!) to move this instruction further back into the basic block. SPF 19/2/97 *) val U : unit = gen (cvec, LDW (int14_0, regClosure, regCode)); in genBlock (cvec, [CALLREG regCode, TAGCODEREG (int5_CODETAG, regReturn)]) end in mustCheckStack cvec := true end (* The exception argument has already been loaded into regResult and the address of raiseEx in the ioVector has been loaded into regCode. We use a call, not just a jump, so that the RTS exception handler can find (the name of) this code segment if it needs to do a stack trace. We also must ensure that the stack pointer is updated, since otherwise the handler register might point beyond the end of the stack. SPF 8/9/95 *) fun raiseEx cvec = let val U : unit = genBlock (cvec, [CALLREG regCode, TAGCODEREG (int5_CODETAG, regReturn)]); in (* we're not coming back, even though we've "called" the handler *) exited cvec := true end; (* Tail recursive jump to a function. We have to set the stack-check flag to enable the user to break out of loops. Exception: (hack!) we don't have to do this if we are calling a pre-compiled function (PureCode) because that can't possibly lead to an infinite regress. *) fun jumpToFunction (callKind, returnReg, cvec) : unit = let val U : unit = case callKind of Recursive => if returnReg regEq regReturn then genBlock (cvec, [JUMPSELF true]) else genBlock (cvec, [JUMPSELF false, COPY (returnReg, regReturn)]) | PureCode => let val U : unit = if returnReg regEq regCode then raise InternalError "jumpToFunction: returnReg is regCode" else (); in if returnReg regEq regReturn then genBlock (cvec, [JUMPREG (true, regCode)]) else genBlock (cvec, [JUMPREG (false, regCode), COPY (returnReg, regReturn)]) end | StaticLink => let val U : unit = if returnReg regEq regCode then raise InternalError "jumpToFunction: returnReg is regCode" else (); in if returnReg regEq regReturn then genBlock (cvec, [JUMPREG (true, regCode)]) else genBlock (cvec, [JUMPREG (false, regCode), COPY (returnReg, regReturn)]) end | FullCall => let val U : unit = if returnReg regEq regCode then raise InternalError "jumpToFunction: returnReg is regCode" else (); val U : unit = gen (cvec, LDW (int14_0, regClosure, regCode)); in if returnReg regEq regReturn then genBlock (cvec, [JUMPREG (true, regCode)]) else genBlock (cvec, [JUMPREG (false, regCode), COPY (returnReg, regReturn)]) end; val U : unit = case callKind of PureCode => () | _ => mustCheckStack cvec := true in exited cvec := true end; (* Return and remove args from stack. *) fun returnFromFunction (returnReg : reg, stackArgs : int, cvec : code) : unit = let val regTemp : reg = chooseTempReg cvec; val U : unit = gen (cvec, LDO (int14_minus2, returnReg, regTemp)); val U : unit = resetStack (stackArgs, cvec); (* Add in the reset. *) (* We could try to be clever and put the stack adjustment in the delay slot here! However, it might be better to improve the peephole optimiser instead. SPF 16/10/1997 *) val U : unit = genBlock (cvec, [JUMPREG (true, regTemp)]) in exited cvec := true end; fun allocStore (length : int, flag : short, resultReg : reg, cvec : code) : unit = if length < 1 orelse exp2_24 <= length then raise InternalError "allocStore: bad length" else let val words : int = length + 1; val bytes : int = words * wordSize; val decrement : int = ~ bytes; val lengthWord : int = length + (toInt flag * exp2_24); in if is11Bit decrement (* should we use words instead? *) then let val regTemp : reg = chooseTempReg cvec; val U : unit = genBlock (cvec, [HEAPCHECKI (int11 decrement)]); in genList (cvec, loadImmed (lengthWord, regTemp) @ [ LDO (int14 (wordSize + decrement), regHeapPtr, resultReg), STWM (regTemp, int14 decrement, regHeapPtr) ]) end else let val regTempA : reg = chooseTempReg cvec; val regTempB : reg = chooseTempReg cvec; val U : unit = genList (cvec, loadImmed (bytes, regTempA)); val U : unit = genBlock (cvec, [HEAPCHECK regTempA]); in (* Carefully coded to work even if regTempA = regTempB *) genList (cvec, SUB (regHeapPtr, regTempA, regHeapPtr) :: (loadImmed (lengthWord, regTempB) @ [ LDO (int14 wordSize, regHeapPtr, resultReg), STW (regTempB, int14_0, regHeapPtr) ])) end end; (* Remove the mutable bit; not safe for code objects. *) fun setFlag (baseReg : reg, cvec : code, flag : short) : unit = let val U : unit = if baseReg regEq regStackPtr then raise InternalError "setFlag: can't set flags on stack" else (); val flagRep : int = toInt flag; in if flagRep = 0 then gen (cvec, STB (regZero, int14_minus4, baseReg)) else let val regTemp : reg = chooseTempReg cvec; in genList (cvec, loadImmed (flagRep, regTemp) @ [STB (regTemp, int14_minus4, baseReg)]) end end; (* Don't need to do anything (until we implement code re-ordering). *) val completeSegment = (fn code => ()); (*************************************************************************** General operations ***************************************************************************) datatype instrs = InstrMove | InstrAddA | InstrSubA | InstrRevSubA | InstrMulA | InstrOrW | InstrAndW | InstrXorW | InstrLoad | InstrLoadB | InstrVeclen | InstrPush | InstrUpshiftW (* logical shift left *) | InstrDownshiftW (* logical shift right *) | InstrBad; (* Can the we use the same register as the source and destination of an instructions? On this machine - yes. *) val canShareRegs : bool = true; fun isInstrBad InstrBad = true | isInstrBad _ = false; (* exported versions *) val instrMove = InstrMove; val instrAddA = InstrAddA; val instrSubA = InstrSubA; val instrRevSubA = InstrRevSubA; val instrMulA = InstrMulA; val instrOrW = InstrOrW; val instrAndW = InstrAndW; val instrXorW = InstrXorW; val instrLoad = InstrLoad; val instrLoadB = InstrLoadB; val instrVeclen = InstrVeclen; val instrPush = InstrPush; val instrUpshiftW = InstrUpshiftW; val instrDownshiftW = InstrDownshiftW; val instrBad = InstrBad; datatype tests = Arb of condition (* Not EV/OD, TR/NEVER *) | Wrd of condition (* Not TR/NEVER *) | TagTest of bool (* true = Short, false = Long *) val testNeqW = Wrd NE; val testEqW = Wrd EQ; val testGeqW = Wrd GE; val testGtW = Wrd GT; val testLeqW = Wrd LE; val testLtW = Wrd LT; val testNeqA = Arb NE; val testEqA = Arb EQ; val testGeqA = Arb GE; val testGtA = Arb GT; val testLeqA = Arb LE; val testLtA = Arb LT; val Short = TagTest true; val Long = TagTest false; (*************************************************************************** RR implementation of general operations ***************************************************************************) (* Is there a general register/register operation? Some operations may not be implemented because this machine does not have a suitable instruction or simply because they have not yet been added to the code generator. It is possible for an instruction to be implemented as a register/immediate operation but not as a register/register operation (e.g. multiply) *) fun instrIsRR (instr : instrs) : bool = case instr of InstrMove => true | InstrAddA => true | InstrSubA => true | InstrRevSubA => true | InstrMulA => false (* for now *) | InstrOrW => true | InstrAndW => true | InstrXorW => true | InstrLoad => allowMutableLoads | InstrLoadB => allowMutableLoads | InstrVeclen => false (* immediate form only *) | InstrUpshiftW => false (* not very useful *) | InstrDownshiftW => false (* not very useful *) | InstrPush => true | InstrBad => false ; (* General register/register operation. *) fun genRR (instr : instrs, r1 : reg, r2 : reg, rd : reg, cvec : code) : unit = let val U : unit = (* We shouldn't do arithmetic on the stack pointer, but we ought to check, just in case. *) if rd regEq regStackPtr orelse r1 regEq regStackPtr orelse r2 regEq regStackPtr then genPendingStackAdjustment cvec else (); in case instr of InstrMove => gen (cvec, COPY (r1, rd)) | InstrAddA => let val regTemp : reg = chooseTempReg cvec; in if r1 regEq r2 then genBlock (cvec, [ UNTAGCHECK (r1, regTemp), ADDO (r1, regTemp, rd) ]) else genBlock (cvec, [ UNTAGCHECK (r2, regTemp), UNTAGCHECK (r1, regZero), ADDO (r1, regTemp, rd) ]) end | InstrSubA => if r1 regEq r2 then genList (cvec, loadImmed (tagged 0, rd)) else let val regTemp : reg = chooseTempReg cvec; in genBlock (cvec, [ UNTAGCHECK (r2, regTemp), ARBSUB (r1, regTemp, rd) ]) end | InstrRevSubA => if r1 regEq r2 then genList (cvec, loadImmed (tagged 0, rd)) else let val regTemp : reg = chooseTempReg cvec; in genBlock (cvec, [ UNTAGCHECK (r1, regTemp), ARBSUB (r2, regTemp, rd) ]) end | InstrOrW => gen (cvec, OR (r1, r2, rd)) | InstrAndW => gen (cvec, AND (r1, r2, rd)) | InstrXorW => if r1 regEq r2 then genList (cvec, loadImmed (tagged 0, rd)) else let val regTemp : reg = chooseTempReg cvec; in genList (cvec, [ XOR (r1, r2, regTemp), LDO (int14_1, regTemp, rd) ]) end | InstrLoad => let val regTemp : reg = chooseTempReg cvec; in genList (cvec, [ ASHR (nat5_TAGSHIFT, r2, regTemp), LDWXSH (regTemp, r1, rd) ]) end | InstrLoadB => let val regTemp : reg = chooseTempReg cvec; in genList (cvec, [ ASHR (nat5_TAGSHIFT, r2, regTemp), LDBXSH (regTemp, r1, regTemp), SHL (nat5_TAGSHIFT, regTemp, regTemp), LDO (int14_1, regTemp, rd) ]) end | InstrPush => (* Both rd and r2 are ignored. *) genPush (r1, cvec) | _ => raise InternalError "genRR: Unimplemented instruction" end; (* genRR *) (*************************************************************************** RI implementation of general operations ***************************************************************************) (* Is this argument acceptable as an immediate or should it be loaded into a register? *) fun instrIsRI (instr : instrs, cnstnt : word) : bool = isShort cnstnt andalso let val c : int = toInt (toShort cnstnt); in case instr of InstrMove => true (* is32Bit (tagged c) *) | InstrAddA => isShort (~ c) (* is32Bit (semiTagged (~ c)); false for MININT *) | InstrSubA => true (* is32Bit (semiTagged c) *) | InstrRevSubA => true (* is32Bit (tagged c) *) | InstrMulA => (~2 <= c andalso c <= 2) orelse c = 4 (* for now *) | InstrOrW => false (* for now *) | InstrAndW => false (* for now *) | InstrXorW => false (* for now *) | InstrLoad => true | InstrLoadB => true | InstrVeclen => true | InstrUpshiftW => 0 <= c andalso c < (32 - TAGSHIFT) | InstrDownshiftW => 0 <= c andalso c < (32 - TAGSHIFT) | InstrPush => false | InstrBad => false end; (* instrIsRI *) (* Register/immediate operations. In many of these operations we have to tag the immediate value. *) fun genRI (instr : instrs, rs : reg, constnt : word, rd : reg, cvec) : unit = let (* The constant value will always be a short integer so we can convert it directly. *) val c : int = toInt (toShort constnt); val U : unit = (* We shouldn't do arithmetic on the stack pointer, but we ought to check, just in case. *) if rd regEq regStackPtr orelse rs regEq regStackPtr then genPendingStackAdjustment cvec else (); in case instr of InstrMove => (* Load a constant into a register. rs is ignored. *) genList (cvec, loadImmed (tagged c, rd)) | InstrAddA => (* Arbitrary precision addition. *) let val c' : int = semiTagged c; in if is11Bit c' then genBlock (cvec, [ARBADDI (int11 c', rs, rd)]) else let val regTemp : reg = chooseTempReg cvec; val U : unit = genList(cvec, loadImmed (semiTagged (~ c), regTemp)); in genBlock (cvec, [ARBSUB (rs, regTemp, rd)]) end end | InstrSubA => (* Arbitrary precision subtraction. *) let val c' : int = semiTagged (~ c); in if is11Bit c' then genBlock (cvec, [ARBADDI (int11 c', rs, rd)]) else let val regTemp : reg = chooseTempReg cvec; val U : unit = genList(cvec, loadImmed (semiTagged c, regTemp)); in genBlock (cvec, [ARBSUB (rs, regTemp, rd)]) end end | InstrRevSubA => (* Arbitrary precision reverse subtraction. *) (* Must be very careful so that this works even if rs contains MININT, or if rs=rd *) let val regTemp : reg = chooseTempReg cvec; val U : unit = genList(cvec, LDO (int14_minus1, rs, regTemp) :: loadImmed (tagged c, rd)); in genBlock (cvec, [ARBSUB (rd, regTemp, rd)]) end | InstrMulA => let in case c of ~2 => (genRI (InstrRevSubA, rs, toWord 0, rd, cvec); genRR (InstrAddA, rd, rd, rd, cvec)) | ~1 => genRI (InstrRevSubA, rs, toWord 0, rd, cvec) | 0 => genRR (InstrMove, regZero, regZero, rd, cvec) | 1 => genRR (InstrMove, rs, regZero, rd, cvec) | 2 => genRR (InstrAddA, rs, rs, rd, cvec) | 4 => (genRR (InstrAddA, rs, rs, rd, cvec); genRR (InstrAddA, rd, rd, rd, cvec)) | _ => raise InternalError ("genRI: MulA - bad value " ^ Int.toString c) end (* It might be worth implementing these if the bits form a contiguous field *) | InstrOrW => raise InternalError "genRI: InstrOrW is not implemented" | InstrAndW => raise InternalError "genRI: InstrAndW is not implemented" | InstrXorW => raise InternalError "genRI: InstrXorW is not implemented" | InstrLoad => (* offset is in words *) genLoad (wordSize * c, rs, rd, cvec) | InstrLoadB => (* offset is in bytes *) if is14Bit c then let val regTemp : reg = chooseTempReg cvec; in genList (cvec, [ LDB (int14 c, rs, regTemp), SHL (nat5_TAGSHIFT, regTemp, regTemp), LDO (int14_1, regTemp, rd) ]) end else let val (byteOffset_left : int21, byteOffset_right : int14) = splitLeftRight c; val regTemp : reg = chooseTempReg cvec; in genList (cvec, [ ADDIL (byteOffset_left, rs), LDB (byteOffset_right, regUnsafe, regTemp), SHL (nat5_TAGSHIFT, regTemp, regTemp), LDO (int14_1, regTemp, rd) ]) end | InstrVeclen => let val regTemp : reg = chooseTempReg cvec; in genList (cvec, [ LDW (int14_minus4, rs, regTemp), SHL (nat5_FLAGLENGTH, regTemp, regTemp), LSHR (nat5_FLminusTS, regTemp, regTemp), LDO (int14_1, regTemp, rd) ]) end | InstrUpshiftW => (* logical shift left *) let val regTemp : reg = chooseTempReg cvec; in genList (cvec, [ LSHR (nat5_TAGSHIFT, rs, regTemp), SHL (nat5 (c + TAGSHIFT), regTemp, regTemp), LDO (int14_1, regTemp, rd) ]) end | InstrDownshiftW => (* logical shift right *) let val regTemp : reg = chooseTempReg cvec; in genList (cvec, [ LSHR (nat5 (c + TAGSHIFT), rs, regTemp), SHL (nat5_TAGSHIFT, regTemp, regTemp), LDO (int14_1, regTemp, rd) ]) end | InstrPush => raise InternalError "genRI: Unimplemented instruction (InstrPush)" | InstrBad => raise InternalError "genRI: Unimplemented instruction (InstrBad)" end; (* genRI *) (*************************************************************************** RI implementation of comparisons ***************************************************************************) (* Short/Long are not implemented *) fun isCompRR tc = case tc of TagTest _ => false | _ => true; (* Is this argument acceptable as an immediate or should it be *) (* loaded into a register? *) fun isCompRI (tc, cnstnt:word) : bool = isShort cnstnt; (* If this instruction is unreachable, we want to avoid generating a label (which would get fixed up, possibly making some other code spuriously reachable), which is why we have the "unreachable" test here. Without this test, we would correctly generate no code here but would generate code at the target of the non-generated branch, which would be silly. *) fun compareAndBranchRR (r1 : reg, r2 : reg, test : tests, cvec : code) : labels = if unreachable cvec then [] else case test of Wrd cond => let val lab : label = Label (ref None); val U : unit = genBlock (cvec, [COMB (cond, true, r1, r2, lab)]) in [lab] end | Arb cond => let val lab : label = Label (ref None); val U : unit = genBlock (cvec, [ARBCOMB (cond, r1, r2, lab)]); in [lab] end | _ => raise InternalError "compareAndBranchRR: Unimplemented test"; (* GCODE replaces Arb EQ/NE with Word EQ/NE for short constants, so there's no point generating clever code for Arb EQ/NE here. SPF 18/2/97 Oh. Apparently it doesn't actually do this, so let's do it here. SPF 21/2/97 *) fun compareAndBranchRI (r : reg, cnstnt : word, test : tests, cvec : code) : labels = if unreachable cvec then [] else case test of Wrd cond => let val c : int = tagged (toInt (toShort cnstnt)); val lab : label = Label (ref None); val U : unit = if is5Bit c then genBlock (cvec, [COMIB (swapArgs cond, true, int5 c, r, lab)]) else let (* It's safe to load a tagged SHORT into an untagged register *) val regTemp : reg = chooseTempReg cvec; val U : unit = genList (cvec, loadImmed (c, regTemp)); in genBlock (cvec, [COMB (cond, true, r, regTemp, lab)]) end in [lab] end | Arb EQ => compareAndBranchRI (r, cnstnt, Wrd EQ, cvec) | Arb NE => compareAndBranchRI (r, cnstnt, Wrd NE, cvec) | Arb cond => let val c : int = tagged (toInt (toShort cnstnt)); val lab : label = Label (ref None); val U : unit = if is5Bit c then genBlock (cvec, [ARBCOMIB (swapArgs cond, int5 c, r, lab)]) else let (* It's safe to load a tagged SHORT into an untagged register *) val regTemp : reg = chooseTempReg cvec; val U : unit = genList (cvec, loadImmed (c, regTemp)); in genBlock (cvec, [ARBCOMBAUX (swapArgs cond, regTemp, r, lab)]) end in [lab] end | TagTest b => (* The immediate is ignored *) let val lab : label = Label (ref None); val U : unit = genBlock (cvec, [COMB (if b then OD else EV, true, r, regZero, lab)]) in [lab] end; (* compareAndBranchRI *) (* set the num'th constant in seg to be value *) fun setConst (seg : cseg, constStartAddr : addrs, constNum : int, value : word) : unit = let val constAddr : addrs = constStartAddr wordAddrPlus constNum; in csegPutWord (seg, getWordAddr constAddr, value) end (* Fix up references from other vectors to this one. *) fun fixOtherRefs (refTo : code, value : word) : unit = let fun fixRef refFrom = case ! (resultSeg refFrom) of Unset => let (* The "refFrom" code hasn't allocated its code segment yet. *) fun replaceNonLocalConst (constEntry as (num : int, const : const)) : int * const = case const of CVal c => if c is refTo then (num, WVal value) else constEntry | _ => constEntry; in constVec refFrom := map replaceNonLocalConst (! (constVec refFrom)) end | Set (seg : cseg, constStartAddr : addrs) => let (* The "refFrom" code has already allocated its code segment. *) val noc = numOfConsts refFrom; fun putNonLocalConst (num : int, const : const) : unit = case const of CVal c => if c is refTo then let (* A reference to this one. *) (* Fix up the forward reference. *) val U : unit = setConst (seg, constStartAddr, num, value); in (* decrement the "pending references" count *) noc := !noc - 1 end else () | _ => (); (* look down its list of forward references until we find ourselves. *) val U : unit = applyList (putNonLocalConst, !(constVec refFrom)) in (* If there are no more references, we can lock it. *) if !noc = 0 then csegLock seg else () end (* fixRef *); in (* For each `code' which needs a forward reference to `refTo' fixing up. *) applyList (fixRef, !(otherCodes refTo)) end; (* fixOtherRefs *) (* The stack limit register is set at least twice this far from the end of the stack so we can simply compare the stack pointer with the stack limit register if we need less than this much. Setting it at twice this value means that procedures which use up to this much stack and do not call any other procedures do not need to check the stack at all. *) val minStackCheck = 20; (* Create the actual code segment. Fortunately, GCODE passes us the maximum stack usage (as calculated by TRANSTAB) so we don't need to recalculate it here. *) fun copyCode (cvec : code, stackRequired : int) : address = let (* Optimise the instructions for the body of the function *) val (bodyCode : instruction list, bodySize : int) = revExpand (! (codeVec cvec)); val U : unit = codeVec cvec := []; (* To reduce space requirements *) val numOfConst = !(numOfConsts cvec); val callsAProc = !(mustCheckStack cvec); (* Generate the prelude (iterative!) *) local val stackCheckCode : instruction list = if stackRequired >= minStackCheck then let val regTemp : reg = chooseTempReg cvec; in addImmed (~ (stackRequired * wordSize), regStackPtr, regTemp) @ [STACKCHECK regTemp] end (* If we call another function, we have to perform the following stack check to ensure that there are at least two minimal (minStackCheck words each) stack frames available - one for us, one for the (possibly leaf) function that we're calling. We don't need to do this if we make only tail calls (our caller has reserved a stack frame for us, which we share with our callee), but we'll normally perform the stack check anyway, to check for user interrupt. SPF 19/2/97 *) else if callsAProc then [STACKCHECK regStackPtr] (* Leaf or tail-call-only function - no stack check required. *) else []; in (* code segment size minimised (iteratively!) SPF 12/8/94 *) fun getPreludeCode (preludeSize : int) : int * int * instruction list * int * addrs = let val codeSize : int = preludeSize + bodySize; (* +4 for zero word, code size, profile count and constants count *) val segSize = codeSize + numOfConst + 4; (* This is the address of the end-of-code marker *) val lastAddr : addrs = mkWordAddr codeSize; (* This is the address of the zero'th constant +3 for zero word, code size, profile count *) val constStartAddr : addrs = lastAddr wordAddrPlus 3; (* What's going on here? We want to be able to address the constants using regCode. If we have a short segment, that's no problem. However, if we have a long code segment, the 14-bit offset in a LDW instruction isn't large enough to reach the constants section unless we adjust regCode first. If we need to do this, regCode will be pointing into the middle of the code segment, so we must tag it as a code pointer, and ensure that it address real code (before the zero word) rather than data. Subtracting 16 would skip the 3 "overhead" words: end-of-code marker word byte offset of start of code segment profiling word and make regCode point at the last real code word. We then subtract another 2 to get the tagging right. (We could add 2 instead, but I'm happier doing the subtraction, in case I've got an off-by-one somewhere.) SPF 21/2/97. *) val (constByteOffset : int, loadConstSegCode : instruction list) = if is14Bit (segSize * wordSize) then (getByteAddr constStartAddr, []) else let val offsetFromCodePtr = 18; val offsetOfConsts : int = getByteAddr constStartAddr - offsetFromCodePtr; in (offsetFromCodePtr, addImmed (offsetOfConsts, regCode, regCode)) end; val preludeCode : instruction list = (* L1,L2 here *) loadConstSegCode @ (* L3,L4 here *) stackCheckCode; (* Branch addresses are relative to the END of the code. SPF 7/3/97 *) val segStartAddr : addrs = mkWordAddr (~ codeSize); val selfCallAddr : addrs = segStartAddr wordAddrPlus (instrListLength loadConstSegCode); in (* does it fit? *) if instrListLength preludeCode = preludeSize then (codeSize, segSize, preludeCode, constByteOffset, selfCallAddr) else getPreludeCode (preludeSize + 1) end val (codeSize, segSize, preludeCode, constByteOffset, selfCallAddr) = (* iterate to find size of loadConstSegCode *) getPreludeCode (instrListLength stackCheckCode); end; (* local *) (* Get the intermediate code *) val instrList : instruction list = preludeCode @ bodyCode; (* Display the intermediate code *) val U : unit = if !assemblyCode then case procName cvec of "" => printString ":\n" | name => printString (name ^ ":\n") else (); (* Now make the byte segment that we'll turn into the code segment *) val seg : cseg = csegMake segSize; (* Perform the low-level code-generation into the byte segment, printing the code as we do so. Note that code labels are now calculated relative to the END of the code, which explains the following. *) val segStartAddr : addrs = mkWordAddr (~ codeSize); val U : unit = genQuadsToSeg (seg, int14 constByteOffset, segStartAddr, selfCallAddr, instrList); (* This is the address of the zero word, relative to the start of the code segment *) val lastAddr : addrs = mkWordAddr codeSize; (* This is the address of the zero'th constant (the name string) +3 for zero word, code size, profile count *) val constStartAddr : addrs = lastAddr wordAddrPlus 3; (* Print the constants *) val U : unit = if !assemblyCode then let val U : unit = printConstVec (! (constVec cvec), segStartAddr, constStartAddr) in printString "\n" end else (); (* Zero end-of-code marker *) local val addr : addrs = lastAddr; val quad : quad = zeroQuad; in val U : unit = setQuad (quad, addr, seg); end; (* Byte offset of start of code. *) local val addr : addrs = lastAddr wordAddrPlus 1; val quad : quad = toQuad (getByteAddr addr); in val U : unit = setQuad (quad, addr, seg); end; (* Next the profile count. *) local val addr : addrs = lastAddr wordAddrPlus 2; val quad : quad = toQuad 0; in val U : unit = setQuad (quad, addr, seg); end; (* Put in the number of constants (including the name string). *) local val addr : addrs = constStartAddr wordAddrPlus numOfConst; val quad : quad = toQuad numOfConst; in val U : unit = setQuad (quad, addr, seg); end; (* Now we've filled in all the C integers; now we need to convert the segment into a proper code segment before it's safe to put in any ML values. SPF 13/2/97 *) val U : unit = csegConvertToCode seg; val U : unit = resultSeg cvec := Set (seg, constStartAddr); (* Copy the objects (including the name string) from the constant list. *) fun putLocalConst (num : int, const : const) : unit = case const of WVal w => (* an ordinary (non-short) constant *) let val U : unit = setConst (seg, constStartAddr, num, w); in numOfConsts cvec := ! (numOfConsts cvec) - 1 end (* a handler *) | HVal (Label (ref None)) => raise InternalError "putLocalConst: handler not fixed-up" | HVal (Label (ref (Some targetAddr))) => let (* The following comment applies to offsetAddr *) (* Special function to add to an address. This only works if the resulting value is in a code segment and is on a word + 2 byte boundary. *) val handlerByteOffset : int = targetAddr byteAddrMinus segStartAddr; val handlerAddr : handler = offsetAddr (csegAddr seg, toShort (handlerByteOffset + 2)); val U :unit = setConst (seg, constStartAddr, num, toWord handlerAddr); in numOfConsts cvec := ! (numOfConsts cvec) - 1 end (* forward-reference - fix up later when we compile the referenced code *) | CVal _ => (); val U : unit = applyList (putLocalConst, (! (constVec cvec))); (* Switch off "mutable" bit now if we have no forward or recursive references to fix-up *) val U : unit = if !(numOfConsts cvec) = 0 then csegLock seg else (); (* Do we need to make a closure, or just return the code? *) val addr : address = if noClosure cvec then csegAddr seg else let val addr : address = alloc (short1, F_words, toWord (csegAddr seg)); (* Logically unnecessary; however the RTS currently allocates everything as mutable because Dave's code assumed that things were done this way and I'm not completely sure that everything that needs a mutable allocation actually asks for it yet. SPF 19/2/97 *) val U : unit = lock addr; in addr end (* Now we know the address of this object we can fix up any forward references outstanding. This is put in here because there may be directly recursive references. *) val U : unit = fixOtherRefs (cvec, toWord addr); in addr end (* copyCode *); (* Only used for while-loops. *) fun jumpback (lab : label, stackCheck : bool, cvec : code) : unit = let (* Put in a stack check. This is used to allow the code to be interrupted. *) val U : unit = if stackCheck then genBlock (cvec, [STACKCHECK regStackPtr]) else (); (* N.B. we don't do branch-chaining here, as otherwise we might end up with conditional backward jumps, which we can't nullify properly. SPF 27/2/97 *) (* We need genBlock here to force any pending stack adjustment to be taken. *) val U : unit = genBlock (cvec, [BRANCH (true, lab)]) in exited cvec := true end; (* ic function exported to gencode. Currently only used for backward jumps. *) (* We use a label (not an addrs), so this doesn't interfere with jump chaining and optimisation. SPF 28/2/97 *) val ic : code -> label = fn (cvec : code) => let val lab : label = Label (ref None); val U : unit = fixupSpecialLabel (lab, cvec); in lab end; (* The interface to GCODE isn't abstract enough; it thinks ic and jumpback manipulate the raw "addrs" type, (which is true in older versions of the code-generator). So ... *) type addrs = label; (* We need these types although we don't generate indexed cases. *) type cases = int * addrs; (* should tag be a short??? *) fun constrCases (p as (i,a)) = p; (* Dummy implementation ... type jumpTableAddrs = unit; fun useIndexedCase (min, max, numberOfCases, exhaustive) : bool = false; (* Never use indexed case. *) fun indexedCase (reg, reg2, min, max, exhaustive, cvec) : jumpTableAddrs = raise InternalError "Not implemented: indexedCase"; fun makeJumpTable (startTab, cl, default, min, max, cvec) : unit = raise InternalError "Not implemented: makeJumpTable"; ... *) type jumpTableAddrs = int * int * label * (label list ref); (* Used in quickSort *) fun ltCases ((i1, a1) : cases) ((i2, a2) : cases) = i1 < i2; fun useIndexedCase (min : int, max : int, numberOfCases : int, exhaustive : bool) : bool = isShort min andalso isShort max andalso isShort (~min + jumpTableOffset) andalso isShort (max - min + jumpTableOffset) andalso numberOfCases > 7 andalso numberOfCases >= (max - min) div 3; fun indexedCase (valReg : reg, constReg : reg, min : int, max : int, exhaustive : bool, cvec : code) : jumpTableAddrs = let (* Problem: we need multiple copies of defaultLabel, because the optimiser assumes that each label is used for only one jump. Solution: treat this label very carefully when we fix it up so that it doesn't get optimised away. *) val defaultLabel : label = Label (ref None); val entryList : label list ref = ref []; (* To be completed by makeJumpTable *) val jumptable : jumpTableAddrs = (min, max, defaultLabel, entryList) in if unreachable cvec then jumptable else let (* we need to generate code *) val taggedMin : int = tagged min; val taggedMax : int = tagged max; val rangeCheck : unit = if exhaustive then () else let (* Is it long? If so, jump to the default. We need this because we might be doing case-analysis on integers. For other types this is a waste of time - we know the tag must be a short - and we should change GCODE so we can eliminate this test. SPF 23/11/1997 We have to be *very* careful here, though. For optimised data-types, we might be comparing a pointer with a (short) integer. This means that we're not really testing long/short, we're testing pointer/short so we need to keep the test even if we know we're dealing with datatype tags (for some kinds of datatypes). This requires more work in the high-level code generator to distinguish these cases properly. SPF 11/12/1997 *) val U : unit = genBlock (cvec, [COMB (EV, true, valReg, regZero, defaultLabel)]); (* Is it less than the minimum? If so, jump to the default. *) val U : unit = if is5Bit taggedMin then genBlock (cvec, [COMIB (GT, true, int5 taggedMin, valReg, defaultLabel)]) else let val regTemp : reg = chooseTempReg cvec; val U : unit = genList (cvec, loadImmed (taggedMin, regTemp)); in genBlock (cvec, [COMB (LT, true, valReg, regTemp, defaultLabel)]) end; (* Is it greater than the maximum? If so, jump to the default. *) val U : unit = if is5Bit taggedMax then genBlock (cvec, [COMIB (LT, true, int5 taggedMax, valReg, defaultLabel)]) else let val regTemp : reg = chooseTempReg cvec; val U : unit = genList (cvec, loadImmed (taggedMax, regTemp)); in genBlock (cvec, [COMB (GT, true, valReg, regTemp, defaultLabel)]) end; in () end; val indexReg : reg = chooseTempReg cvec; val baseReg : reg = chooseTempReg cvec; val U : unit = if indexReg regEq baseReg then raise InternalError "indexedCase: run out of temporary registers" else (); val entryCount : int = max - min + 1; (* We have 3 overhead instructions between the table base and the actual JUMPTABLE instruction. This means that we want to map min => 4 min + 1 => 5 .... max => max - min + 4 We do this by subtracting (min - 4) from the value. Since everything is tagged, we have to tag this value first. Since we don't have a subtract immediate instruction, we add the negation of this number. *) val offset : int = min - jumpTableOffset; val U : unit = genBlock (cvec, addImmed (~ (tagged offset), valReg, indexReg) @ (* indexReg now contains a value in the range 4 .. max - min + 4, but shifted *) [ LOADCODEADDR baseReg, ASHR (nat5_TAGSHIFT, indexReg, indexReg), (* in DELAY slot *) (* indexReg now contains an untagged value in the range 3 .. max - min + 3; baseReg now contains the address of the base of the table, which is HERE; except that its lower 2 bits contain unknown values, so we have to mask these out. Were using a temporary register for "baseReg", so it doesn't matter that this isn't a legal code-pointer. SPF 11/12/1997 *) TAGCODEREG (int5_0, baseReg), LDWXSH (indexReg, baseReg, indexReg), ADDL (indexReg, baseReg, baseReg), JUMPREG (true, baseReg), JUMPTABLE (entryCount, entryList) ]); (* We don't fall through the JUMPTABLE instruction *) val U : unit = exited cvec := true; (* The default cases come here *) val U : unit = if exhaustive then () else fixupSpecialLabel (defaultLabel, cvec); in jumptable end (* we need to generate code *) end; (* indexedCase *) fun makeJumpTable (jumptab : jumpTableAddrs, caseList : cases list, default : label, min : int, max : int, cvec : code) : unit = let val (oldmin : int, oldmax : int, defaultLabel : label, entryList : label list ref) = jumptab; val U : unit = if (min = oldmin andalso max = oldmax) then () else raise InternalError "makeJumpTable: jump table has inconsistent range information" val U : unit = case !entryList of [] => () | _ => raise InternalError "makeJumpTable: jump table already created" val sortedList = quickSort ltCases caseList; (* We create the label list in reverse order (highest index first) *) fun createLabList (i, cl, labList) = if max < i then labList else case cl of [] => createLabList (i + 1, cl, defaultLabel :: labList) | ((j,caseLabel) :: t) => if i < j then createLabList (i + 1, cl, defaultLabel :: labList) else createLabList (i + 1, t, caseLabel :: labList) in entryList := createLabList (min, sortedList, []) end; end (* CODECONS functor body *) end (* structure-level let *) polyml.5.2.1/mlsource/MLCompiler/CodeTree/CodeCons.hppa/ml_bind.ML0000644000175000017500000000170010313043352023574 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure CodeCons = CODECONS ( structure CODESEG = CodeSeg structure DEBUG = Debug structure MISC = Boot.Misc structure ADDRESS = Address ); polyml.5.2.1/mlsource/MLCompiler/CodeTree/AMD64CODECONS.ML0000644000175000017500000044146311004344503021453 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* Adapted for the AMD64 from the I386 code generator. David C. J. Matthews 2006 *) (* Title: Code Generator Routines. Author: Dave Matthews, Cambridge University Computer Laboratory Copyright Cambridge University 1989 *) (* This module contains the code vector and operations to insert code into it. Each procedure is compiled into a separate segment. Initially it is compiled into a fixed size segment, and then copied into a segment of the correct size at the end. This module contains all the definitions of the i386 opCodes and registers. It uses "codeseg" to create and operate on the segment itself. *) (* 6-10/6/94 SPF added abstraction for opCodes, to replace old explicit hex(?) constants *) (* 13/6/94 SPF started work on i386 version (was SPARC!) *) (* August 2006 DCJM. Converted to AMD64. *) functor AMD64CODECONS ( (*****************************************************************************) (* DEBUG *) (*****************************************************************************) structure DEBUG : sig val assemblyCodeTag : bool Universal.tag val compilerOutputTag: (string->unit) Universal.tag val getParameter : 'a Universal.tag -> Universal.universal list -> 'a end; (*****************************************************************************) (* MISC *) (*****************************************************************************) structure MISC : sig exception InternalError of string end; ) : (*****************************************************************************) (* CODECONS export signature *) (*****************************************************************************) sig type machineWord; type short; type code; type reg; (* Machine registers *) type address; val regNone: reg; val regResult: reg; val regClosure: reg; val regStackPtr: reg; val regHandler: reg; val regReturn: reg; val regs: int; (* No of registers. *) val argRegs: int; (* No of args in registers. *) val regN: int -> reg; val nReg: reg -> int; val argReg: int -> reg; val regEq: reg * reg -> bool; val regNeq: reg * reg -> bool; val regRepr: reg -> string; type addrs val codeCreate: bool * string * Universal.universal list -> code; (* makes the initial segment. *) (* Operations. *) type instrs; val instrMove: instrs; val instrAddA: instrs; val instrSubA: instrs; val instrRevSubA: instrs; val instrMulA: instrs; val instrAddW: instrs; val instrSubW: instrs; val instrRevSubW: instrs; val instrMulW: instrs; val instrDivW: instrs; val instrModW: instrs; val instrOrW: instrs; val instrAndW: instrs; val instrXorW: instrs; val instrLoad: instrs; val instrLoadB: instrs; val instrVeclen: instrs; val instrVecflags: instrs; val instrPush: instrs; val instrUpshiftW: instrs; val instrDownshiftW: instrs; val instrDownshiftArithW: instrs; val instrGetFirstLong: instrs; val instrStringLength: instrs; val instrSetStringLength: instrs; val instrBad: instrs; (* Can the we use the same register as the source and destination of an instructions? (it would be more flexible to make this a function of type "instrs -> bool", but a simple flag will suffice for now. SPF 17/1/97 *) val canShareRegs : bool; (* Enquire about operations. *) val instrIsRR: instrs -> bool; (* Is the general form implemented? *) val instrIsRI: instrs * machineWord -> bool; (* Is the immediate value ok? *) (* Code generate operations. *) val genRR: instrs * reg * reg * reg * code -> unit; val genRI: instrs * reg * machineWord * reg * code -> unit; type tests; val testNeqW: tests; val testEqW: tests; val testGeqW: tests; val testGtW: tests; val testLeqW: tests; val testLtW: tests; val testNeqA: tests; val testEqA: tests; val testGeqA: tests; val testGtA: tests; val testLeqA: tests; val testLtA: tests; val Short: tests; val Long: tests; type labels; (* The source of a jump. *) val noJump: labels; (* Compare and branch for fixed and arbitrary precision. *) val isCompRR: tests -> bool; val isCompRI: tests * machineWord -> bool; val compareAndBranchRR: reg * reg * tests * code -> labels; val compareAndBranchRI: reg * machineWord * tests * code -> labels; datatype storeWidth = STORE_WORD | STORE_BYTE val genLoad: int * reg * reg * code -> unit; val isIndexedStore: storeWidth -> bool val genStore: reg * int * reg * storeWidth * reg * code -> unit; val isStoreI: machineWord * storeWidth * bool -> bool; val genStoreI: machineWord * int * reg * storeWidth * reg * code -> unit; val genPush: reg * code -> unit; val genLoadPush: int * reg * code -> unit; val preferLoadPush: bool; val genLoadCoderef: code * reg * code -> unit; val genStackOffset: reg * int * code -> unit; val allocStore: int * Word8.word * reg * code -> unit; val setFlag: reg * code * Word8.word -> unit; val completeSegment: code -> unit; datatype callKinds = Recursive | ConstantFun of machineWord * bool | CodeFun of code | FullCall val callFunction: callKinds * code -> unit; val jumpToFunction: callKinds * reg * code -> unit; val returnFromFunction: reg * int * code -> unit; val raiseException: code -> unit; type cseg; val copyCode: code * int * reg list -> address; val unconditionalBranch: code -> labels; type handlerLab; val loadHandlerAddress: reg * code -> handlerLab; val fixupHandler: handlerLab * code -> unit; val fixup: labels * code -> unit; (* Fix up a jump. *) (* ic - Address for the next instruction in the segment. *) val ic: code -> addrs; val jumpback: addrs * bool * code -> unit; (* Backwards jump. *) val resetStack: int * code -> unit; (* Set a pending reset *) val procName: code -> string; (* Name of the procedure. *) type cases type jumpTableAddrs val constrCases : int * addrs -> cases; val useIndexedCase: int * int * int * bool -> bool; val indexedCase : reg * reg * int * int * bool * code -> jumpTableAddrs; val makeJumpTable : jumpTableAddrs * cases list * addrs * int * int * code -> unit; val inlineAssignments: bool val codeAddress: code -> address option val traceContext: code -> string; end (* CODECONS export signature *) = let (*****************************************************************************) (* ADDRESS *) (*****************************************************************************) structure ADDRESS : sig type machineWord; (* NB *not* eqtype, 'cos it might be a closure *) type short = Word.word; type address; type handler; val wordEq : machineWord * machineWord -> bool val isShort: 'a -> bool; val toShort: 'a -> short; val toMachineWord: 'a -> machineWord; val offsetAddr : address * short -> handler val alloc: (short * Word8.word * machineWord) -> address val F_words : Word8.word val lock : address -> unit; val wordSize: int end = Address; (*****************************************************************************) (* CODESEG *) (*****************************************************************************) structure CODESEG : sig type machineWord; type short; type address; type cseg; val csegMake: int -> cseg; val csegConvertToCode: cseg -> unit; val csegLock: cseg -> unit; val csegGet: cseg * int -> Word8.word; val csegSet: cseg * int * Word8.word -> unit; val csegPutWord: cseg * int * machineWord -> unit; val csegCopySeg: cseg * cseg * int * int -> unit; val csegAddr: cseg -> address; val csegPutConstant: cseg * int * machineWord * 'a -> unit; end = CodeSeg; in (*****************************************************************************) (* CODECONS functor body *) (*****************************************************************************) struct open CODESEG; open DEBUG; open ADDRESS; open MISC; val toInt = Word.toIntX (* This previously just cast the value so continue to treat it as signed. *) val isX64 = wordSize = 8 (* Generate X64 instructions if the word length is 8. *) val short1 = toShort 1; (* added SPF - take numbers OUT of code *) (* These are defined here as explicit constants, so the *) (* code-generator can in-line them as immediates (I think). *) val exp2_3 = 0x8; val exp2_6 = 0x40; val exp2_7 = 0x80; val exp2_8 = 0x100; val exp2_16 = 0x10000; val exp2_24 = 0x1000000; val exp2_30 = 0x40000000; val exp2_31 = 0x80000000; val exp2_32 = 0x100000000; val exp2_56 = 0x100000000000000; val exp2_63 = 0x8000000000000000; val exp2_64 = 0x10000000000000000; (* Let's check that we got them right! *) local fun exp2 0 = 1 | exp2 n = 2 * exp2 (n - 1); in val UUU = ( exp2_3 = exp2 3 andalso exp2_6 = exp2 6 andalso exp2_7 = exp2 7 andalso exp2_8 = exp2 8 andalso exp2_16 = exp2 16 andalso exp2_24 = exp2 24 andalso exp2_30 = exp2 30 andalso exp2_31 = exp2 31 andalso exp2_32 = exp2 32 andalso exp2_56 = exp2 56 andalso exp2_63 = exp2 63 andalso exp2_64 = exp2 64 ) orelse raise InternalError "Powers of 2 incorrectly specified"; end; (* tag a short constant *) fun tag c = 2 * c + 1; (* shift a short constant, but don't set tag bit *) fun semitag c = 2 * c; fun is8Bit n = ~ exp2_7 <= n andalso n < exp2_7; infix 6 addrPlus addrMinus; infix 4 (* ? *) addrLt; (* SPF 5/1/95 *) infix 4 (* ? *) addrLe; (* All indexes into the code vector have type "addrs" *) (* This should be an abstype, but it's exported as an eqtype *) datatype addrs = Addr of int (* + is defined to add an integer to an address *) fun (Addr a) addrPlus b = Addr (a + b); (* The difference between two addresses is an integer *) fun (Addr a) addrMinus (Addr b) = a - b; fun (Addr a) addrLt (Addr b) = a < b; fun (Addr a) addrLe (Addr b) = a <= b; fun mkAddr n = Addr n; (* addr.up *) fun getAddr (Addr a) = a; (* addr.down *) val addrZero = mkAddr 0; val addrLast = mkAddr (if isX64 then exp2_56 -1 else exp2_30 - 1); (* A big number. *) (* The "value" points at the jump instruction, or rather at the jump offset part of it. It is a ref because we may have to change it if we have to put in a jump with a 32-bit offset. *) datatype jumpFrom = Jump8From of addrs | Jump32From of addrs type labels = (jumpFrom ref) list; val noJump = []:labels; (* This is the list of outstanding labels. Use a separate type from "labels" for extra security. *) type labList = (jumpFrom ref) list; datatype setCodeseg = Unset | Set of cseg (* Used for completing forward references. *) ; (* Constants which are too large to go inline in the code are put in a list and put at the end of the code. They are arranged so that the garbage collector can find them and change them as necessary. A reference to a constant is treated like a forward reference to a label. *) (* A code list is used to hold a list of code-vectors which must have the address of this code-vector put into it. *) datatype const = WVal of machineWord (* an existing constant *) | CVal of code (* a forward-reference to another function *) | HVal of addrs ref (* a handler *) and ConstPosn = InlineAbsolute (* The constant is within the code. *) | InlineRelative (* The constant is within the code but is PC relative (call or jmp). *) | ConstArea of int (* The constant is in the constant area. *) and code = Code of { codeVec: cseg, (* This segment is used as a buffer. When the procedure has been code generated it is copied into a new segment of the correct size *) ic: addrs ref, (* Pointer to first free location in "codevec" *) constVec: (* Constants used in the code *) {const: const, addrs: addrs, posn: ConstPosn} list ref, numOfConsts: int ref, (* size of constVec *) nonInlineConsts: int ref, stackReset: int ref, (* Distance to reset the stack before the next instr. *) pcOffset: int ref, (* Offset of code in final segment. *) (* This is used also to test for identity of code segments. *) labelList: labList ref, (* List of outstanding short branches. *) longestBranch: addrs ref, (* Address of the earliest 1-byte branch. *) procName: string, (* Name of the procedure. *) otherCodes: code list ref, (* Other code vectors with forward references to this vector. *) resultSeg: setCodeseg ref, (* The segment as the final result. *) mustCheckStack: bool ref, (* Set to true if stack check must be done. *) justComeFrom: labels ref, (* The label we have just jumped from. *) exited: bool ref, (* False if we can fall-through to here *) selfCalls: addrs list ref, (* List of recursive calls to patch up. *) selfJumps: labels ref, (* List of recursive tail-calls to patch up. *) noClosure: bool, (* should we make a closure from this? *) branchCheck: addrs ref, (* the address we last fixed up to. I added this to track down a bug and I've left it in for security. DCJM 19/1/01. *) printAssemblyCode:bool, (* Whether to print the code when we finish. *) printStream: string->unit (* The stream to use *) }; (* procName is exported. *) fun procName (Code {procName,...}) = procName; (* %ebp points to a structure that interfaces to the RTS. These are offsets into that structure. *) val MemRegLocalMPointer = 0 and MemRegHandlerRegister = wordSize and MemRegLocalMbottom = wordSize*2 and MemRegStackLimit = wordSize*3 and MemRegHeapOverflowCall = wordSize*8 and MemRegStackOverflowCall = wordSize*9 and MemRegStackOverflowCallEx = wordSize*10 and MemRegRaiseException = wordSize*11 and MemRegRaiseDiv = wordSize*13 and MemRegArbEmulation = wordSize*14 (* Several operations are not generated immediately but recorded and generated later. Labels (i.e. the destination of a branch) are recorded in just_come_from. Adjustments to the real stack pointer are recorded in stack_reset. The order in which these "instructions" are assumed to happen is of course significant. If just_come_from is not empty it is assumed to have happened before anything else. After that the stack pointer is adjusted and finally the next instruction is executed. *) val initialCodeSize = 15; (* words. Initial size of segment. *) (* Test for identity of the code segments by testing whether the pcOffset ref is the same. N.B. NOT its contents. *) infix is; fun (Code{pcOffset=a, ...}) is (Code{pcOffset=b, ...}) = a=b; (* create and initialise a code segment *) fun codeCreate (noClosure : bool, name : string, parameters) : code = Code { codeVec = csegMake initialCodeSize, (* a byte array *) ic = ref addrZero, constVec = ref [], numOfConsts = ref 0, nonInlineConsts = ref 0, stackReset = ref 0, pcOffset = ref 0, (* only non-zero after code is copied *) labelList = ref [], longestBranch = ref addrLast, (* None so far *) procName = name, otherCodes = ref [], resultSeg = ref Unset, (* Not yet done *) mustCheckStack = ref false, justComeFrom = ref [], exited = ref false, selfCalls = ref [], selfJumps = ref [], noClosure = noClosure, branchCheck = ref addrZero, printAssemblyCode = DEBUG.getParameter DEBUG.assemblyCodeTag parameters, printStream = DEBUG.getParameter DEBUG.compilerOutputTag parameters }; (* Put 1 unsigned byte at a given offset in the segment. *) fun set8u (b : int, addr, seg) = let val a = getAddr addr; in csegSet (seg, a, Word8.fromInt b) end; (* Put 1 signed byte at a given offset in the segment. *) fun set8s (b : int, addr, seg) = let val a = getAddr addr; val b' = if b < 0 then b + exp2_8 else b; in csegSet (seg, a, Word8.fromInt b') end; (* Get 1 unsigned byte from the given offset in the segment. *) fun get8u (a: int, seg: cseg) : int = Word8.toInt (csegGet (seg, a)); (* Get 1 signed byte from the given offset in the segment. *) fun get8s (a: int, seg: cseg) : int = Word8.toIntX (csegGet (seg, a)); (* Put 4 bytes at a given offset in the segment. *) (* b0 is the least significant byte. *) fun set4Bytes (b3, b2, b1, b0, addr, seg) = let val a = getAddr addr; in (* Little-endian *) csegSet (seg, a, Word8.fromInt b0); csegSet (seg, a + 1, Word8.fromInt b1); csegSet (seg, a + 2, Word8.fromInt b2); csegSet (seg, a + 3, Word8.fromInt b3) end; (* Put 1 unsigned word at a given offset in the segment. *) fun set32u (ival: int, addr: addrs, seg) : unit = let val topHw = ival div exp2_16; val bottomHw = ival mod exp2_16; val b3 = topHw div exp2_8; val b2 = topHw mod exp2_8; val b1 = bottomHw div exp2_8; val b0 = bottomHw mod exp2_8; in set4Bytes (b3, b2, b1, b0, addr, seg) end; fun setBytes(seg, ival, offset, 0) = () | setBytes(seg, ival, offset, count) = ( csegSet(seg, offset, Word8.fromInt(ival mod exp2_8)); setBytes(seg, ival div exp2_8, offset+1, count-1) ); fun setWordU (ival: int, addr: addrs, seg) : unit = setBytes(seg, ival, getAddr addr, wordSize) fun set64u (ival: int, addr: addrs, seg) : unit = setBytes(seg, ival, getAddr addr, 8) fun set64s (ival: int, addr: addrs, seg) : unit = let val topByte = (ival div exp2_56) mod exp2_8 in setBytes(seg, ival, getAddr addr, 7); setBytes(seg, if topByte < 0 then topByte + exp2_8 else topByte, getAddr addr + 7, 1) end (* Put 1 signed word at a given offset in the segment. *) fun set32s (ival: int, addr: addrs, seg) : unit = let val topHw = ival div exp2_16; val bottomHw = ival mod exp2_16; val b3 = topHw div exp2_8; val b2 = topHw mod exp2_8; val b1 = bottomHw div exp2_8; val b0 = bottomHw mod exp2_8; val b3' = if b3 < 0 then b3 + exp2_8 else b3; in set4Bytes (b3', b2, b1, b0, addr, seg) end; (* Get 1 signed 32 bit word from the given offset in the segment. *) fun get32s (a: int, seg: cseg) : int = let val b0 = Word8.toInt (csegGet (seg, a)); val b1 = Word8.toInt (csegGet (seg, a + 1)); val b2 = Word8.toInt (csegGet (seg, a + 2)); val b3 = Word8.toInt (csegGet (seg, a + 3)); val b3' = if b3 >= exp2_7 then b3 - exp2_8 else b3; val topHw = (b3' * exp2_8) + b2; val bottomHw = (b1 * exp2_8) + b0; in (topHw * exp2_16) + bottomHw end; fun get64s (a: int, seg: cseg) : int = let val b0 = Word8.toInt (csegGet (seg, a)); val b1 = Word8.toInt (csegGet (seg, a + 1)); val b2 = Word8.toInt (csegGet (seg, a + 2)); val b3 = Word8.toInt (csegGet (seg, a + 3)); val b4 = Word8.toInt (csegGet (seg, a + 4)); val b5 = Word8.toInt (csegGet (seg, a + 5)); val b6 = Word8.toInt (csegGet (seg, a + 6)); val b7 = Word8.toInt (csegGet (seg, a + 7)); val b7' = if b7 >= exp2_7 then b7 - exp2_8 else b7; in ((((((((b7' * exp2_8 + b6) * exp2_8 + b5) * exp2_8 + b4) * exp2_8 + b3) * exp2_8 + b2) * exp2_8) + b1) * exp2_8) + b0 end; (* Test whether a tagged value will fit into a 32-bit signed constant. *) fun isTagged32bitS(a: machineWord) = if isShort a then let val aI = toInt(toShort a) in ~exp2_30 <= aI andalso aI < exp2_30 end else false (* Code-generate a byte. *) fun gen8u (ival: int, Code {ic, codeVec, ...}) : unit = if 0 <= ival andalso ival < exp2_8 then let val icVal = !ic; in ic := icVal addrPlus 1; set8u (ival, icVal, codeVec) end else raise InternalError "gen8u: invalid byte"; (* Used for signed byte values. *) fun gen8s (ival: int, Code {ic, codeVec, ...}) = if ~exp2_7 <= ival andalso ival < exp2_7 then let val icVal = !ic; in ic := icVal addrPlus 1; set8s (ival, icVal, codeVec) end else raise InternalError "gen8s: invalid byte"; (* Code-generate a 32-bit word. *) fun gen32u (ival: int, Code {ic, codeVec, ...}) : unit = if 0 <= ival andalso (isShort ival orelse ival < exp2_32) (* Note: This previously was 0 <= ival andalso ival < exp2_32 The only reason for adding isShort ival is that doing so avoids almost all the arbitrary precision emulation traps that used to be generated here. *) then let val icVal = !ic; in ic := icVal addrPlus 4; set32u (ival, icVal, codeVec) end else raise InternalError "gen32u: invalid word"; fun gen32s (ival: int, Code {ic, codeVec, ...}) : unit = (* We really only need to check this on the 64-bit machine and it would otherwise be a hot-spot for arbitrary precision arithmetic on 32-bit m/c. *) if not isX64 orelse ~exp2_31 <= ival andalso ival < exp2_31 then let val icVal = !ic; in ic := icVal addrPlus 4; set32s (ival, icVal, codeVec) end else raise InternalError "gen32s: invalid word"; fun gen64u (ival: int, Code {ic, codeVec, ...}) : unit = if 0 <= ival andalso (isShort ival orelse ival < exp2_64) then let val icVal = !ic; in ic := icVal addrPlus 8; set64u (ival, icVal, codeVec) end else raise InternalError "gen32u: invalid word"; fun gen64s (ival: int, Code {ic, codeVec, ...}) : unit = let val icVal = !ic; in ic := icVal addrPlus 8; set64s (ival, icVal, codeVec) end datatype mode = Based (* mod = 0 *) | Based8 (* mod = 1 *) | Based32 (* mod = 2 *) | Register (* mod = 3 *) ; (* Put together the three fields which make up the mod r/m byte. *) fun modrm (md : mode, rg: int, rm : int) : int = let val modField = case md of Based => 0 * exp2_6 (* compile-time evaluated! *) | Based8 => 1 * exp2_6 | Based32 => 2 * exp2_6 | Register => 3 * exp2_6 ; in modField + (rg * exp2_3) + rm end; fun genmodrm (md : mode, rg: int, rm : int, cvec) : unit = gen8u (modrm (md, rg, rm), cvec); (* REX prefix *) fun rex {w,r,x,b} = 0x40 + (if w then 8 else 0) + (if r then 4 else 0) + (if x then 2 else 0) + (if b then 1 else 0); datatype scaleFactor = Scale1 (* s = 0 *) | Scale2 (* s = 1 *) | Scale4 (* s = 2 *) | Scale8 (* s = 3 *) ; (* Put together the three fields which make up the s-i-b byte. *) fun sib (s : scaleFactor, i: int, b : int) : int = let val sizeField = case s of Scale1 => 0 * exp2_6 | Scale2 => 1 * exp2_6 | Scale4 => 2 * exp2_6 | Scale8 => 3 * exp2_6 ; in sizeField + (i * exp2_3) + b end; fun gensib (s : scaleFactor, i: int, b : int, cvec : code) : unit = gen8u (sib (s, i, b), cvec); fun scSet (Set x) = x | scSet _ = raise InternalError "scSet"; (* Add a constant to the list along with its address. We mustn't put the constant directly in the code since at this stage the code is simply a byte segment and if we have a garbage collection the value won't be updated. *) fun addConstToVec (valu: const, posn: ConstPosn, cvec as Code{numOfConsts, constVec, ic, nonInlineConsts, ...}): unit = let (* Inline constants are in the body of the code. Non-inline constants are stored in the constant vector at the end of the code. The value that goes in here is the PC-relative offset of the constant. *) val realPosn = case posn of ConstArea _ => (nonInlineConsts := ! nonInlineConsts + 1; ConstArea(!nonInlineConsts)) | p => p val isInline = case posn of ConstArea _ => false | _ => true in numOfConsts := ! numOfConsts + 1; constVec := {const = valu, addrs = !ic, posn = realPosn} :: ! constVec; (* We must put a valid tagged integer in here because we might get a garbage collection after we have copied this code into the new code segment but before we've put in the real constant. If this is a relative branch we need to point this at itself. Until it is set to the relative offset of the destination it needs to contain an address within the code and this could be the last instruction. *) if isInline andalso wordSize = 8 then gen64s (tag 0, cvec) else gen32s (case posn of InlineRelative => ~5 | _ => tag 0, cvec) end abstype reg = Reg of int*bool (* registers. *) with (* These are the real registers we have. The AMD extension encodes the additional registers through the REX prefix. *) val eax = Reg (0, false); val ecx = Reg (1, false); val edx = Reg (2, false); val ebx = Reg (3, false); val esp = Reg (4, false); val ebp = Reg (5, false); val esi = Reg (6, false); val edi = Reg (7, false); val r8 = Reg (0, true); val r9 = Reg (1, true); val r10 = Reg (2, true); val r11 = Reg (3, true); val r12 = Reg (4, true); val r13 = Reg (5, true); val r14 = Reg (6, true); val r15 = Reg (7, true); (* Not real registers. *) val regNone = Reg (8, true); val regHandler = Reg (9, true); val regResult = eax; (* Result of function call goes in here. *) val regClosure = edx; (* Addr. of closure for fn. call goes here. *) val regStackPtr = esp; val regReturn = regNone; fun getReg (Reg rf) = rf; (* reg.down *) fun mkReg nf = Reg nf; (* reg.up *) (* The number of general registers. Includes result, closure, code, return and arg regs but not stackptr, handler, stack limit or heap ptrs. *) val regs = 13 (* eax, ebx, ecx, edx, esi, edi, r8-r14 *); (* N.B. The encoding of registers as integers here is used to encode the register modification sets. It MUST match the encoding used for IO functions in the registerMaskVector in the RTS assembly code section. *) (* The nth register (counting from 0). *) fun regN i = if i < 0 orelse i >= regs then raise InternalError "Bad register number" else if i <= 3 then mkReg (i, false) else if i = 4 orelse i = 5 then mkReg (i+2, false) else mkReg (i-6, true) infix 7 regEq regNeq; fun (Reg a) regEq (Reg b) = a = b; fun (Reg a) regNeq (Reg b) = a <> b; (* The number of the register. *) fun nReg(Reg(r, false)) = if r >= 6 then r-2 else r | nReg(Reg(r, true)) = r+6 fun regRepr (r as Reg(n, false)) = if r regEq eax then "%rax" else if r regEq ebx then "%rbx" else if r regEq ecx then "%rcx" else if r regEq edx then "%rdx" else if r regEq esp then "%rsp" else if r regEq ebp then "%rbp" else if r regEq esi then "%rsi" else if r regEq edi then "%rdi" else "Unknown" | regRepr (r as Reg(n, true)) = "%r" ^ Int.toString(n+8); fun regPrint r = TextIO.output (TextIO.stdOut, regRepr r); (* Arguments are passed in eax, ebx, r8, r9 and r10. *) val argRegs = 5; fun argReg 0 = eax | argReg 1 = ebx | argReg 2 = r8 | argReg 3 = r9 | argReg 4 = r10 | argReg i = raise InternalError ("Not arg reg " ^ Int.toString i); end (* reg *); datatype arithOp = ADD | OR | ADC | SBB | AND | SUB | XOR | CMP ; fun arithOpToInt ADD = 0 | arithOpToInt OR = 1 | arithOpToInt ADC = 2 | arithOpToInt SBB = 3 | arithOpToInt AND = 4 | arithOpToInt SUB = 5 | arithOpToInt XOR = 6 | arithOpToInt CMP = 7 ; (* Primary opCodes. N.B. only opCodes actually used are listed here. If new instruction are added check they will be handled by the run-time system in the event of trap. *) datatype opCode = Group1_8_A | Group1_32_A | JMP_8 | JMP_32 | CALL_32 | MOVL_A_R | MOVL_R_A | MOVB_R_A | PUSH_R of int | POP_R of int | Group5 | NOP | LEAL | MOVL_32_64_R of int | MOVL_32_A | MOVB_8_A | ESCAPE | POP_A | RET | RET_16 | JO | JE | JNE | JL | JGE | JLE | JG | JB | JNB | JNA | JA | Arith of arithOp * int | STC | Group3_A | Group3_a | Group2_8_A | Group2_1_A | PUSH_8 | PUSH_32 | TEST_ACC8 | MOVZX (* Needs ESCAPE code *) (* B6 *) ; fun opToInt opn = case opn of Group1_8_A => 0x83 | Group1_32_A => 0x81 | JMP_8 => 0xeb | JMP_32 => 0xe9 | CALL_32 => 0xe8 | MOVL_A_R => 0x8b | MOVL_R_A => 0x89 | MOVB_R_A => 0x88 | PUSH_R reg => 0x50 + reg | POP_R reg => 0x58 + reg | Group5 => 0xff | NOP => 0x90 | LEAL => 0x8d | MOVL_32_64_R reg => 0xb8 + reg | MOVL_32_A => 0xc7 | MOVB_8_A => 0xc6 | ESCAPE => 0x0f | POP_A => 0x8f | RET => 0xc3 | RET_16 => 0xc2 | JO => 0x70 | JB => 0x72 | JNB => 0x73 | JE => 0x74 | JNE => 0x75 | JNA => 0x76 | JA => 0x77 | JL => 0x7c | JGE => 0x7d | JLE => 0x7e | JG => 0x7f | Arith (ao,dw) => arithOpToInt ao * 8 + dw | STC => 0xf9 | Group3_A => 0xf7 | Group3_a => 0xf6 | Group2_8_A => 0xc1 | Group2_1_A => 0xd1 | PUSH_8 => 0x6a | PUSH_32 => 0x68 | TEST_ACC8 => 0xa8 | MOVZX => 0xb6 (* Needs ESCAPE code *) ; (* ... val eax = Reg 0; val ecx = Reg 1; val edx = Reg 2; val ebx = Reg 3; val esp = Reg 4; (* also used for "SIB used" and "no index" *) val ebp = Reg 5; (* also used for "absolute" *) val esi = Reg 6; val edi = Reg 7; type basereg = reg; {0,1,2,3,6,7 only} type indexreg = reg; {0,1,2,3,5,6,7 only} The i386 family has a horrendous collection of not-quite-orthogonal addressing modes. Register mode: (1) reg mod = 3; r/m = getReg reg DS-relative addressing modes: (2) DS:[basereg] mod = 0; r/m = getReg basereg (3) DS:[basereg + disp8] mod = 1; r/m = getReg basereg (4) DS:[basereg + disp32] mod = 2; r/m = getReg basereg (2a) DS:[basereg] mod = 0; r/m = 4; s = ?; i = 4; b = getReg basereg (3a) DS:[basereg + disp8] mod = 1; r/m = 4; s = ?; i = 4; b = getReg basereg (4a) DS:[basereg + disp32] mod = 2; r/m = 4; s = ?; i = 4; b = getReg basereg (5) DS:[basereg + (scale * indexreg)] mod = 0; r/m = 4; s = scale; i = getReg indexreg; b = getReg basereg (6) DS:[basereg + (scale * indexreg) + disp8] mod = 1; r/m = 4; s = scale; i = getReg indexreg; b = getReg basereg (7) DS:[basereg + (scale * indexreg) + disp32] mod = 2; r/m = 4; s = scale; i = getReg indexreg; b = getReg basereg (8) DS:disp32 mod = 0; r/m = 5 (8a) DS:[disp32] mod = 0; r/m = 4; s = ?; i = 4; b = 5 (9) DS:[disp32 + (scale * indexreg)] mod = 0; r/m = 4; s = scale; i = getReg indexreg; b = 5 SS-relative addressing modes: (10) SS:[ebp + disp8] mod = 1; r/m = 5 (11) SS:[ebp + disp32] mod = 2; r/m = 5 (12) SS:[ebp + (scale * indexreg) + disp8] mod = 1; r/m = 4; s = scale; i = getReg indexreg; b = 5 (13) SS:[ebp + (scale * indexreg) + disp32] mod = 2; r/m = 4; s = scale; i = getReg indexreg; b = 5 (14) SS:[esp + (scale * indexreg)] mod = 0; r/m = 4; s = scale; i = getReg indexreg; b = 4 (15) SS:[esp + (scale * indexreg) + disp8] mod = 1; r/m = 4; s = scale; i = getReg indexreg; b = 4 (16) SS:[esp + (scale * indexreg) + disp32] mod = 2; r/m = 4; s = scale; i = getReg indexreg; b = 4 ... *) (* Make a reference to another procedure. Usually this will be a forward reference but it may have been compiled already, in which case we can put the code address in now. *) fun codeConst (Code {resultSeg = ref(Set seg), ... }, posn, into) = (* Already done. *) addConstToVec (WVal (toMachineWord(csegAddr seg)), posn, into) | codeConst (r as Code {otherCodes, ... }, posn, into) = (* forward *) (* Add the referring procedure onto the list of the procedure referred to if it is not already there. This makes sure that when the referring procedure is finished and its address is known the address will be plugged in to every procedure which needs it. *) let fun onList x [] = false | onList x (c::cs) = (x is c) orelse onList x cs ; val codeList = ! otherCodes; in if onList into codeList then () else otherCodes := into :: codeList; addConstToVec (CVal r, posn, into) end; (* Removes a label from the list when it has been fixed up or converted to the long form. *) fun removeLabel (lab:addrs, Code{longestBranch, labelList, ... }) : unit = let fun removeEntry ([]: labList) : labList = [] | removeEntry ((entry as ref (Jump32From addr)) :: t) = removeEntry t (* we discard long jumps *) | removeEntry ((entry as ref (Jump8From addr)) :: t) = if lab = addr then removeEntry t else ( if addr addrLt !longestBranch then longestBranch := addr else (); entry :: removeEntry t ) (* removeEntry *); in (* Must also find the new longest branch. *) longestBranch := addrLast; labelList := removeEntry (! labelList) end; (* Fix up the list of labels. *) fun reallyFixBranches ([] : labels) cvec = () | reallyFixBranches (h::t) (cvec as Code{codeVec=cseg, ic, branchCheck, ...}) = ((case !h of Jump8From addr => let val offset : int = get8s (getAddr addr, cseg); val diff : int = (!ic addrMinus addr) - 1; in branchCheck := !ic; if is8Bit diff then () else raise InternalError "jump too large"; if offset <> 0 then raise InternalError "reallyFixBranches: jump already patched" else set8s (diff, addr, cseg); removeLabel (addr, cvec) end | Jump32From addr => let val offset : int = get32s (getAddr addr, cseg); val diff : int = (!ic addrMinus addr) - 4; in branchCheck := !ic; if offset <> 0 then raise InternalError "reallyFixBranches: jump already patched" else (* A zero offset is more than simply redundant, it can introduce zero words into the code which could be taken as markers. It will not normally be produced but can occur in very unusual cases. The only example I've seen is a branch extension in a complicated series of andalsos and orelses where the branch extension was followed by an unconditional branch which was then backed up by check_labs. We simply fill it with no-ops. *) if diff = 0 then let val a = getAddr addr; val nop = Word8.fromInt (opToInt NOP); in csegSet (cseg, a - 1, nop); csegSet (cseg, a, nop); csegSet (cseg, a + 1, nop); csegSet (cseg, a + 2, nop); csegSet (cseg, a + 3, nop) end else set32s (diff, addr, cseg) end ); reallyFixBranches t cvec ) fun fixRecursiveBranches (cvec, target, []) = () | fixRecursiveBranches (cvec as Code{codeVec=cseg, ...}, target, addrH :: addrT) = ((case !addrH of Jump8From addr => let val offset : int = get8s (getAddr addr, cseg); val diff : int = (target addrMinus addr) - 1; in if offset <> 0 then raise InternalError "fixRecursiveBranches: already patched" else (); if is8Bit diff then set8s (diff, addr, cseg) else raise InternalError "fixRecursiveBranches: branch too large" end | Jump32From addr => let val offset : int = get32s (getAddr addr, cseg); val diff : int = (target addrMinus addr) - 4; in if offset <> 0 then raise InternalError "fixRecursiveBranches: already patched" else (); if diff <> 0 then set32s (diff, addr, cseg) else raise InternalError "fixRecursiveBranches: zero offset" end ); fixRecursiveBranches (cvec, target, addrT) ); (* The address is the offset of the offset, not the instruction itself. *) fun fixRecursiveCalls (cvec, target, []) = () | fixRecursiveCalls (cvec as Code{codeVec=cseg, ...}, target, addrH :: addrT) = let val instr : int = get8u (getAddr addrH - 1, cseg); val offset : int = get32s (getAddr addrH, cseg); val diff : int = (target addrMinus addrH) - 4; in if instr <> opToInt CALL_32 then raise InternalError "fixRecursiveCalls: not a call instruction" else if offset <> 0 then raise InternalError "fixRecursiveCalls: already patched" else if diff = 0 then raise InternalError "fixRecursiveCalls: zero offset" else set32s (diff, addrH, cseg); fixRecursiveCalls (cvec, target, addrT) end; (* Deal with a pending fix-up. *) fun reallyFixup (cvec as Code{justComeFrom=ref [], ... }) = () | reallyFixup (cvec as Code{justComeFrom=jcf as ref labs, exited, ... }) = (exited := false; reallyFixBranches labs cvec; jcf := []); (* Adds the displacement to the stack pointer before an instruction is generated. *) fun resetSp (cvec as Code{stackReset, ...}) = ( (* Any pending jumps must be taken first. *) reallyFixup cvec; let val sr = !stackReset * wordSize; (* Offset in bytes. *) in stackReset := 0; if sr < 0 then raise InternalError "Negative stack reset" else if is8Bit sr then (* Can use one byte immediate *) ( gen8u(rex{w=true, r=false, x=false, b=false}, cvec); gen8u(opToInt Group1_8_A (* group1, 8-bit immediate *), cvec); genmodrm(Register, arithOpToInt ADD, #1 (getReg esp), cvec); gen8s(sr, cvec) ) else (* Need 32 bit immediate. *) ( gen8u(rex{w=true, r=false, x=false, b=false}, cvec); gen8u(opToInt Group1_32_A (* group1, 32-bit immediate *), cvec); genmodrm(Register, arithOpToInt ADD, #1 (getReg esp), cvec); gen32s(sr, cvec) ) end ) (* resetSp *); (* Do any pending instructions, but only fix up branches if there are instructions in the pipe-line. *) fun flushQueue (Code{stackReset = ref 0, ...}) = () | flushQueue cvec = resetSp cvec; (* Makes a new label. (no longer returns a list SPF) *) fun makeShortLabel (addr: addrs, Code{longestBranch, labelList ,...}) : jumpFrom ref = let val lab = ref (Jump8From addr); in if addr addrLt ! longestBranch then longestBranch := addr else (); labelList := lab :: ! labelList; lab end; (* Apparently fix up jumps - actually just record where we have come from *) fun fixup (labs:labels, cvec as Code{justComeFrom, exited, ic, branchCheck, procName, ...}) = let (* If the jump we are fixing up is immediately preceding, we can remove it. It is particularly important to remove 32 bit jumps to the next instruction because they would put a word of all zeros in the code, and that could be mistaken for a marker word. *) fun checkLabs [] = [] | checkLabs ((lab as ref (Jump8From addr))::labs) = if !ic addrMinus addr = 1 then ( if !ic addrLe !branchCheck then raise InternalError "Backing up too far (8bit)" else (); ic := addr addrPlus ~1; (* Back up over the opCode *) removeLabel (addr, cvec); exited := false; checkLabs labs ) else lab :: checkLabs labs | checkLabs ((lab as ref (Jump32From addr))::labs) = if !ic addrMinus addr = 4 then ( if !ic addrLe !branchCheck then raise InternalError "Backing up too far (32bit)" else (); ic := addr addrPlus ~1; (* Back up over the opCode *) exited := false; checkLabs labs ) else lab :: checkLabs labs fun doCheck labs = (* Repeatedly check the labels until we are no longer backing up. We may have several to back up if we have just extended some branches and then immediately fix them up. DCJM 19/1/01. *) let val lastIc = !ic val newLabs = checkLabs labs in if lastIc = !ic then newLabs else doCheck newLabs end in case labs of [] => () (* we're not actually jumping from anywhere *) | _ => ( (* Any pending stack reset must be done now. That may involve fixing up pending jumps because so take effect before the stack adjustment. *) flushQueue cvec; (* Add together the jumps to here and remove redundant jumps. *) justComeFrom := doCheck (labs @ !justComeFrom) ) end; fun checkBranchList (cvec as Code{longestBranch, justComeFrom, exited, ic, stackReset, labelList, ...}) (branched:bool) (size:int) = (* If the longest branch is close to going out of range it must be converted into a long form. *) (* If we have just made an unconditional branch then we make the distance shorter. *) let val maxDiff = (if branched then 100 else 127 - 5) - size; (* See if we must extend some branches. If we are going to fix up a label immediately we don't normally extend it. The exception is if we have to extend some other labels in which case we may have to extend this because the jumps we add may push this label out of range. DCJM 9/4/01. *) local val icOffset = if branched then !ic else !ic addrPlus 2 (* Size of the initial branch. *) fun checkLab (lab as ref (Jump8From addr), n) = if List.exists (fn a => a = lab) (! justComeFrom) then n (* Don't include it here. *) else if (icOffset addrMinus addr) + n > (100 - size) then n+5 else n | checkLab (_, n) = n (* Extending one branch may extend others. We need to process the list in reverse order. *) in val jumpSpace = List.foldr checkLab 0 (!labelList) end (* Go down the list converting any long labels, and finding the longest remaining. *) fun convertLabels ([]:labList) : labList = [] | convertLabels (lab::labs) = let (* Process the list starting at the end. The reason for this is that more recent labels appear before earlier ones. We must put the earliest labels in first because they may be about to go out of range. *) val convertRest = convertLabels labs; in (* Now do this entry. *) case !lab of Jump32From addr => (* shouldn't happen? *) convertRest | Jump8From addr => (* If we are about to fix this label up we don't need to extend it except that we must extend it if we are going to put in more branch extensions which will take it out of range. DCJM 9/4/01. *) if List.exists (fn a => a = lab) (! justComeFrom) andalso (jumpSpace = 0 orelse !ic addrMinus addr < 127 - jumpSpace) then lab :: convertRest else if !ic addrMinus addr > (100 - size) then (* Getting close - convert it. *) ( reallyFixBranches [lab] cvec; (* fix up short jump to here *) gen8u (opToInt JMP_32, cvec); gen32u (0, cvec); (* long jump to final destination *) lab := Jump32From (!ic addrPlus ~4); (* Return the rest of the list. *) convertRest ) else ( (* Not ready to remove this. Just find out if this is an earlier branch and continue. *) if addr addrLt ! longestBranch then longestBranch := addr else (); lab :: convertRest ) end (* convertLabels *); in if !ic addrMinus ! longestBranch > maxDiff then let (* Must save the stack-reset, otherwise "fixup" will try to reset it. *) val sr = !stackReset; val _ = stackReset := 0; (* Must skip round the branches unless we have just taken an unconditional branch. *) val lab = if branched then [] else ( exited := true; gen8u (opToInt JMP_8, cvec); gen8u (0, cvec); [makeShortLabel (!ic addrPlus ~1, cvec)] ); in (* Find the new longest branch. *) longestBranch := addrLast; (* Initial value. *) labelList := convertLabels (!labelList); fixup (lab, cvec); (* Continue with normal processing. *) stackReset := sr (* Restore old value. *) end else () end; (* Do all the outstanding operations including fixing up the branches. *) fun doPending (cvec as Code{exited, stackReset=ref stackReset, ...}, size) : unit = let val mustReset = stackReset <> 0; in (* If we have not exited and there are branches coming in here then we fix them up before jumping round any branch extensions. *) if ! exited then () else reallyFixup cvec; checkBranchList cvec (! exited) (if mustReset then size + 6 else size); (* Fix up any incoming branches, including a jump round any branch extensions. *) reallyFixup cvec; flushQueue cvec end; (* Generate an opCode byte after doing any pending operations. *) fun genop (opb:opCode, rx, cvec) = ( doPending (cvec, 15); case rx of NONE => () | SOME rxx => gen8u(rex rxx, cvec); (* 15 is maximum size of an instruction;. It's also big enough for a comparison and the following conditional branch. *) gen8u (opToInt opb, cvec) ); (* This has to be done quite carefully if we are to be able to back-up over jumps that point to the next instruction in fixup. We have to guarantee that if we back up we haven't already set a jump to point beyond where we're backing up. See below for more explanation. DCJM 19/1/01.*) fun putConditional (br: opCode, cvec as Code{ic, ...}) : jumpFrom ref = ( flushQueue cvec; (* Do any stack adjustments. *) gen8u (opToInt br, cvec); (* Don't use genop. *) gen8u (0, cvec); makeShortLabel (!ic addrPlus ~1, cvec) ); (* Generates an unconditional branch. *) fun unconditionalBranch (cvec as Code {justComeFrom, exited, ...}): labels = let (* If we have just jumped here we may be able to avoid generating a jump instruction. *) val U : unit = flushQueue cvec; (* Do any pending instructions. *) val labs = ! justComeFrom; in justComeFrom := []; (* We may get the sequence: jmp L1; L2: jmp L3. If this is the "jmp L3" we can simply remember everything that was supposed to jump to L2 and replace it with jumps to L3. *) (* This code has one disadvantage. If we have several short branches coming here we don't record against the branches themselves that they're all going to the same place. If we have to extend them we put in separate long branches for each rather than pointing them all at the same branch. This doesn't increase run-time but makes the code larger than it need be. DCJM 1/1/01. *) if ! exited then labs else let (* The code here has gone through various versions. The original version always fixed up pending branches so that if we had a short branch coming here we might avoid having to extend it. A subsequent version separated out long and short branches coming here and fixed up short branches but added long ones onto the label list. I discovered a bug with this which occurred when we put in branch extension code before an unconditional branch and then backed up over the unconditional branch and over one of the extended branches. Since we'd already fixed up (really fixed up) the branch round the branch extensions we ended up with that branch now pointing into the middle of the code we subsequently generated. We could get a similar situation if we have a conditional branch immediately before this instruction and back up over both, for example (if exp then () else (); ...). In that case we have to make sure we haven't already fixed up another branch to come here. Instead we must always add it onto the label list so that we only (really) fix it up when we generate something other than a branch. DCJM 19/1/01. *) val br = putConditional (JMP_8, cvec); in exited := true; br :: labs end end; (* unconditionalBranch *) fun genSelfBranch (cvec as Code{justComeFrom, exited, ic, ... }) : labels = let (* Do any pending instructions. *) val U : unit = flushQueue cvec; (* Can we get into the prelude with an 8-bit jump? *) (* Conservative estimation needs to allow for: (1) stack check (10 bytes) (2) 1 byte instruction + 1 byte offset (2 bytes) (3) possible programmer arithmetic error (6 bytes) *) fun isNearPrelude addr = getAddr addr <= 110; (* Is the jump long enough to reach back into the prelude? *) fun isLongJump (Jump32From _ ) = true | isLongJump (Jump8From addr) = isNearPrelude (addr addrPlus ~1) val labs = ! justComeFrom; val longJumps = List.filter (fn r => isLongJump (!r)) labs; val shortJumps = List.filter (fn r => not (isLongJump (!r))) labs; (* remove the "long enough" 8-bit jumps from the list of pending jumps to extend. *) fun tidy [] = () | tidy (ref (Jump32From _) :: t) = tidy t | tidy (ref (Jump8From a) :: t) = (removeLabel (a, cvec); tidy t); val U : unit = tidy longJumps; (* do we actually need to insert a jump into the codestream? *) val needsJump = case shortJumps of [] => not (! exited) | _ => true; in if needsJump then let (* fix up pending short jumps to here *) val U : unit = justComeFrom := shortJumps; val U : unit = doPending (cvec, 5); (* Now decide whether we can use an 8-bit jump here. *) (* N.B. we use gen8u here, not genop, because the latter calls "doPending (cvec, 12)" which could change the results of our "isNearPrelude (!ic)" test. *) val br = if isNearPrelude (!ic) then ( gen8u (opToInt JMP_8, cvec); gen8u (0, cvec); ref (Jump8From (!ic addrPlus ~1)) ) else ( gen8u (opToInt JMP_32, cvec); gen32u (0, cvec); ref (Jump32From (!ic addrPlus ~4)) ); in justComeFrom := []; exited := true; br :: longJumps end else ( justComeFrom := []; exited := true; longJumps ) end; (* genSelfBranch *) (* Exported. Adds in the reset. Does not actually generate code. *) fun resetStack (offset, Code{stackReset, ...}) : unit = stackReset := ! stackReset + offset; (* Generate the modrm and, if necessary, sib bytes followed by the displacement. *) fun genEACode (offset: int, rb: int, r: int, cvec) : unit = let val offsetCode = (* don't generate [ebp] (use [ebp+0]) 'cos it doesn't exist! *) if offset = 0 andalso rb <> 0x5 then Based (* no disp field *) else if is8Bit offset then Based8 (* use 8-bit disp field *) else Based32; (* use 32-bit disp field *) in if rb = 0x4 (* Code for esp and r12 *) then (* Need to use s-i-b byte. *) ( genmodrm (offsetCode, r, 4 (* use s-i-b *), cvec); gensib (Scale1, 4 (* no index *), rb, cvec) ) else genmodrm(offsetCode, r, rb, cvec); (* generate the disp field (if any) *) case offsetCode of Based8 => gen8s (offset, cvec) | Based32 => gen32s (offset, cvec) | _ => () end; (* Generate a opcode plus a modrm byte. *) fun genOpEA(opb:opCode, offset: int, rb: reg, r: reg, cvec): unit = let val (rbC, rbX) = getReg rb val (rrC, rrX) = getReg r in doPending (cvec, 15); (* For the moment always put in a REX prefix. *) gen8u(rex{w=true, r=rrX, b=rbX, x = false}, cvec); (* Generate the escape codes for the opcodes that need them. *) case opb of MOVZX => gen8u(opToInt ESCAPE, cvec) | _ => (); if offset < 0 andalso rb regEq esp then raise InternalError "Negative stack offset" else (); gen8u(opToInt opb, cvec); genEACode(offset, rbC, rrC, cvec) end; (* Generate a opcode plus a second modrm byte but where the "register" field in the modrm byte is actually a code. *) fun genOpPlus2(opb:opCode, offset: int, rb: reg, op2: int, cvec): unit = let val (rbC, rbX) = getReg rb in doPending (cvec, 15); (* For the moment always put in a REX prefix. *) (* If (opb = Group5 andalso op2 = 6 (* push *) orelse opb = POP_A) andalso not rbX then we don't need it. *) gen8u(rex{w=true, r=false, b=rbX, x = false}, cvec); gen8u(opToInt opb, cvec); genEACode(offset, rbC, op2, cvec) end; fun genOpReg(opb:opCode, rd: reg, rs: reg, cvec) = let val (rbC, rbX) = getReg rs val (rrC, rrX) = getReg rd in doPending (cvec, 15); (* For the moment always put in a REX prefix. *) gen8u(rex{w=true, r=rrX, b=rbX, x = false}, cvec); gen8u(opToInt opb, cvec); genmodrm(Register, rrC, rbC, cvec) end; fun genOpRegPlus2(opb:opCode, rd: reg, op2: int, cvec) = let val (rrC, rrX) = getReg rd in doPending (cvec, 15); (* For the moment always put in a REX prefix. *) gen8u(rex{w=true, r=false, b=rrX, x = false}, cvec); gen8u(opToInt opb, cvec); genmodrm(Register, op2, rrC, cvec) end; (* Similar to genOpEA, but used when there is an index register. rb may be regNone if no base register is required (used with leal to tag values). *) fun genOpIndexed (opb:opCode, offset: int, rb: reg, ri: reg, size : scaleFactor, rd: reg, cvec) = let val (rbC, rbX) = getReg rb val (riC, riX) = getReg ri val (rrC, rrX) = getReg rd val offsetCode = (* If rb is ebp or r13 we must put in a one byte displacement. *) if rb regEq regNone orelse offset = 0 andalso rbC <> 0x5 then Based (* no disp field *) else if is8Bit offset then Based8 (* use 8-bit disp field *) else Based32; (* use 32-bit disp field *) val basefield = if rb regEq regNone then 5 (* no base register *) else rbC; in doPending (cvec, 15); (* For the moment always put in a REX prefix. *) gen8u(rex{w=true, r=rrX, b=rbX andalso rb regNeq regNone, x=riX}, cvec); (* Generate the ESCAPE code if needed. *) case opb of MOVZX => gen8u(opToInt ESCAPE, cvec) | _ => (); gen8u(opToInt opb, cvec); genmodrm (offsetCode, rrC, 4 (* s-i-b *), cvec); gensib (size, riC, basefield, cvec); (* generate the disp field (if any) *) case offsetCode of Based8 => gen8s (offset, cvec) | Based32 => gen32s (offset, cvec) | _ => if rb regEq regNone (* 32 bit absolute used as base *) then gen32s (offset, cvec) else () end; fun genPushPop(opc: int->opCode, r: reg, cvec) = let val (rc, rx) = getReg r in (* These are always 64-bit but a REX prefix may be needed for the register. *) genop(opc rc, if rx then SOME{w=true, b = true, x=false, r = false } else NONE, cvec) end; (* Tag the value in register r *) fun genTag (r : reg, cvec) : unit = genOpIndexed(LEAL, 1, r, r, Scale1, r, cvec); fun genImmed (opn: arithOp, rd: reg, imm: int, cvec) : unit = if is8Bit imm then (* Can use one byte immediate *) ( genOpRegPlus2 (Group1_8_A, rd, arithOpToInt opn, cvec); gen8s (imm, cvec) ) else (* Need 32 bit immediate. *) ( genOpRegPlus2 (Group1_32_A, rd, arithOpToInt opn, cvec); gen32s(imm, cvec) ); fun genReg (opn: arithOp, rd: reg, rs: reg, cvec) : unit = genOpReg (Arith (opn, 3 (* r/m to reg *)), rd, rs, cvec) (* generate padding no-ops to align to n modulo 4 *) fun align (n:int, cvec as Code{ic, ...}) = while n - getAddr (!ic) mod 4 <> 0 do genop (NOP, NONE, cvec); (* Exported. - movl offset(rb),rd. *) fun genLoad (offset: int, rb: reg, rd: reg, cvec) : unit = if rd regEq regHandler (* Not a real register. *) then ( (* pushl offset(rb); popl 4(ebp) *) (* This only happens when we are popping the handler so we could simply pop it straight. *) genOpPlus2(Group5, offset, rb, 6 (* push *), cvec); genOpPlus2(POP_A, MemRegHandlerRegister, ebp, 0, cvec) ) else genOpEA(MOVL_A_R, offset, rb, rd, cvec); datatype storeWidth = STORE_WORD | STORE_BYTE fun isIndexedStore _ = true (* Yes, for both word and byte. *) (* Exported - Can we store the value without going through a register? Only if it is short and will fit in 32 bits. *) fun isStoreI (cnstnt: machineWord, _, _) = isTagged32bitS cnstnt; (* Store an immediate value at a given address and offset. *) fun genStoreI (cnstnt: machineWord, offset: int, rb: reg, STORE_WORD, ri: reg, cvec as Code{ic, ...}) = ( (* There was a problem here on the 32-bit machine where we could have an immediate that was nearly all zero combining with zeros in other bytes to give a words of zeros. That shouldn't be a problem on 64-bits because we don't have 64-bit immediates. *) if ri regEq regNone then genOpPlus2(MOVL_32_A, offset, rb, 0, cvec) else genOpIndexed(MOVL_32_A, offset-wordSize div 2, rb, ri, if wordSize = 4 then Scale2 else Scale4, mkReg(0, false), cvec); if isShort cnstnt then gen32s (tag(toInt (toShort cnstnt)), cvec) else addConstToVec (WVal cnstnt, InlineAbsolute, cvec) ) | genStoreI (cnstnt: machineWord, offset: int, rb: reg, STORE_BYTE, ri: reg, cvec) : unit = if not (isShort cnstnt) then (* This should never happen. *) raise InternalError "genStoreI: storing long constant as a byte" else let val v = toInt (toShort cnstnt) in if ri regEq regNone then ( genOpPlus2 (MOVB_8_A, offset, rb, 0, cvec); gen8u (v, cvec) ) else ( (* Untag the index first. *) genOpRegPlus2 (Group2_1_A, ri, 5 (* shr *), cvec); genOpIndexed(MOVB_8_A, offset, rb, ri, Scale1, mkReg(0, false), cvec); gen8u (v, cvec); (* Retag the index. *) genTag (ri, cvec) ) end (* Exported. *) (* Store a value on the stack. This is used when the registers need to be saved, for more than 4 arguments or to push an exception handler. *) fun genPush (r:reg, cvec) : unit = if r regEq regHandler (* Not a real register. *) then genOpPlus2(Group5, MemRegHandlerRegister, ebp, 6 (* push *), cvec) else genPushPop (PUSH_R, r, cvec); (* Exported. Load a value and push it on the stack. Used when all the allocatable registers have run out. Also used if preferLoadPush is true. *) fun genLoadPush (offset: int, rb: reg, cvec) : unit = genOpPlus2(Group5, offset, rb, 6 (* push *), cvec) val preferLoadPush : bool = true; (* It's cheap. *) (* Call the function. Must ensure that the return address is on a word + 2 byte boundary. *) (* Call the function. Must ensure that the return address is on a word + 2 byte boundary. *) fun genSelfCall (cvec as Code{ic, ...}) : addrs = ( (* Make sure anything pending is done first. *) (* 15 comes from the maximum instruction size (12) used in genop, together with up to 3 nops. *) doPending (cvec, 15+3); (* Ensure the return address is aligned on a word + 2 byte boundary. *) align (1, cvec); genop (CALL_32, NONE, cvec); (* 1 byte *) gen32u (0, cvec); (* 4 bytes *) if getAddr (!ic) mod 4 <> 2 then raise InternalError "genSelfCall: call not aligned" else (); !ic addrPlus ~4 ); (* Register/register move. *) fun genMove (rd:reg, rs:reg, cvec) : unit = (* Because we're using the register to EA instruction here the destination register is encoded in the "base" part and the source register in the "reg" part. *) genOpReg (MOVL_R_A, rs,rd, cvec) (* Add a register to a constant. *) fun genLeal (rd:reg, rs:reg, offset:int, cvec) : unit = genOpEA (LEAL, offset, rs, rd, cvec); (* Exported. - movl rs,offset(rb) / movb rs,offset(rb) *) fun genStore (rs: reg, offset: int, rb: reg, STORE_WORD, ri, cvec) : unit = if ri regEq regNone then genOpEA (MOVL_R_A, offset, rb, rs, cvec) else genOpIndexed(MOVL_R_A, offset- wordSize div 2, rb, ri, if wordSize = 4 then Scale2 else Scale4, rs, cvec) | genStore (rs: reg, offset: int, rb: reg, STORE_BYTE, ri, cvec) : unit = let (* Only some of the 32 bit registers can be used to store from. Eax, Ebx, Ecx and Edx are fine and the code used for those registers corresponds to their low-order byte. The other registers can't be used. In the absence of some way of telling the higher-level code-generator about this or finding out if a suitable register is free if we are given one of the other registers we just have to make the best of it. *) val regToStore = if #1 (getReg rs) <= 3 then rs (* No problem *) else if rb regNeq eax andalso ri regNeq eax then eax else if rb regNeq ebx andalso ri regNeq ebx then ebx else ecx (* Must be free *) in if rs regEq regToStore then () else (* Have to move the value into the the right register. *) ( genPush(regToStore, cvec); genMove(regToStore, rs, cvec) ); (* The value we store has to be untagged. *) genOpRegPlus2 (Group2_1_A, regToStore, 5 (* shr *), cvec); if ri regEq regNone then () else (* Untag the index as well. *) genOpRegPlus2 (Group2_1_A, ri, 5 (* shr *), cvec); if ri regEq regNone then genOpEA (MOVB_R_A, offset, rb, regToStore, cvec) else genOpIndexed(MOVB_R_A, offset, rb, ri, Scale1, regToStore, cvec); (* Restore the original value, either by popping or by retagging. This ensures we don't have a bad value around and also restores the original value since it may still be wanted. *) if rs regEq regToStore then genTag(rs, cvec) else genPushPop(POP_R, regToStore, cvec); if ri regEq regNone then () else (* retag the index as well. *) genTag (ri, cvec) end; (* Move an immediate value into a register. The immediate value may be any 32-bit number. *) fun genMoveI (rd:reg, immed:int, cvec) = (* There may be better ways e.g. xorl rd,rd; addl immed,rd. *) if not isX64 andalso isTagged32bitS(toMachineWord immed) then (* This is better on X64 but longer than a 32 bit immediate on i386 *) ( genOpRegPlus2 (MOVL_32_A, rd, 0, cvec); gen32s (immed, cvec) ) else let val (rc, rx) = getReg rd in genop (MOVL_32_64_R rc, SOME {w=true, r=false, b=rx, x=false}, cvec); if isX64 then gen64s (immed, cvec) else gen32s (immed, cvec) end; (* Exported. *) fun genLoadCoderef (c:code, rd:reg, cvec) : unit = let val (rc, rx) = getReg rd in genop (MOVL_32_64_R rc, SOME {w=true, r=false, b=rx, x=false}, cvec); codeConst (c, InlineAbsolute, cvec) end type handlerLab = addrs ref; (* Exported. Loads the address of the destination of a branch. Used to put in the address of the exception handler. We used to have pushAddress in place of this which pushed the address at the same time. On this architecture it can save an instruction but it's a problem on machines where we have to load the address into a register - we don't have a spare checked register available. *) fun loadHandlerAddress (rd, cvec) : handlerLab = let val lab = ref addrZero; val (rc, rx) = getReg rd in genop (MOVL_32_64_R rc, SOME {w=true, r=false, b=rx, x=false}, cvec); addConstToVec (HVal lab, InlineAbsolute, cvec); lab end; (* Exported *) fun fixupHandler (lab:handlerLab, cvec as Code{exited, ic, branchCheck, ...}) : unit = ( (* Make sure anything pending is done first. *) (* 15 comes from maximum instruction size + up to 3 nops. *) doPending (cvec, 15+3); (* Ensure the return address is aligned onto a word + 2 byte boundary. *) align (2, cvec); exited := false; branchCheck := !ic; lab := !ic ); datatype callKinds = Recursive (* The function calls itself. *) | ConstantFun of machineWord * bool (* A pre-compiled or io function. *) | CodeFun of code (* A static link call. *) | FullCall (* Full closure call *) (***************************************************************************** Calling conventions: FullCall: the caller loads the function's closure into regClosure and then (the code here) does an indirect jump through it. Recursive: the caller loads its own function's closure/static-link into regClosure and the code here does a jump to the start of the code. ConstantFun: a direct or indirect call through the given address. If possible the caller will have done the indirection for us and passed false as the indirection value. The exception is calls to IO functions where the address of the code itself is invalid. If the closure/static-link value is needed that will already have been loaded. CodeFun: the same as ConstantFun except that this is used only for static-link calls so is never indirect. *****************************************************************************) (* Call a function. *) fun callFunction (callKind, cvec as Code {selfCalls, mustCheckStack, ic, ... }) : unit = (* If we ever call a function we must do a stack check. *) ( mustCheckStack := true; case callKind of Recursive => let val lab : addrs = genSelfCall cvec; in selfCalls := lab :: ! selfCalls end | FullCall => (* Indirect call through closure reg. *) ( (* Make sure anything pending is done first. *) (* 18 comes from the maximum instruction size (12) used in genop, together with up to 3 nops. *) doPending (cvec, 15+3); (* Ensure the return address is aligned on a word + 2 byte boundary. *) align (0, cvec); genop (Group5, NONE, cvec); genmodrm(Based, 2 (* call *), #1 (getReg regClosure), cvec) ) | CodeFun c => ( (* Make sure anything pending is done first. *) doPending (cvec, 15+3); (* Ensure the return address is aligned on a word + 2 byte boundary. *) align (0, cvec); genop (Group5, NONE, cvec); genmodrm(Based, 2 (* call *), 5 (* PC rel *), cvec); codeConst (c, ConstArea 0, cvec) ) | ConstantFun(w, false) => ( (* Make sure anything pending is done first. *) doPending (cvec, 15+3); (* Ensure the return address is aligned on a word + 2 byte boundary. *) align (0, cvec); genop (Group5, NONE, cvec); genmodrm(Based, 2 (* call *), 5 (* PC rel *), cvec); addConstToVec (WVal w, ConstArea 0, cvec) ) | ConstantFun(w, true) => let val (rc, rx) = getReg regClosure in genop (MOVL_32_64_R rc, SOME {w=true, r=false, b=rx, x=false}, cvec); addConstToVec (WVal w, InlineAbsolute, cvec); (* Make sure anything pending is done first. *) doPending (cvec, 15+3); (* Ensure the return address is aligned on a word + 2 byte boundary. *) align (0, cvec); genop (Group5, NONE, cvec); genmodrm(Based, 2 (* call *), rc, cvec) end; if getAddr (!ic) mod 4 <> 2 (* This can be 8byte + 2 or 8byte + 6. *) then raise InternalError "callFunction: call not aligned" else () ); (* Exported. Tail recursive jump to a function. N.B. stack checking is used both to ensure that the stack does not overflow and also as a way for the RTS to interrupt the code at a safe place. The RTS can set the stack limit "register" at any time but the code will only take a trap when it next checks the stack. The only way to break out of infinite loops is for the user to type control-C and some time later for the code to do a stack check. We need to make sure that we check the stack in any function that my be recursive, directly or indirectly. *) fun jumpToFunction (callKind, returnReg, cvec as Code{selfJumps, exited, mustCheckStack, ...}) = ( (* Must push the return register? *) if returnReg regNeq regNone then genPushPop(PUSH_R, returnReg, cvec) else (); case callKind of Recursive => let val U : unit = mustCheckStack := true; val lab = genSelfBranch cvec; in selfJumps := lab @ ! selfJumps end | FullCall => ( (* Full closure call *) mustCheckStack := true; genop (Group5, NONE, cvec); genmodrm(Based, 4 (* jmp *), #1 (getReg regClosure), cvec) ) | CodeFun c => ( mustCheckStack := true; (* May be recursive. *) genop (Group5, NONE, cvec); genmodrm(Based, 4 (* jmp *), 5 (* PC rel *), cvec); codeConst (c, ConstArea 0, cvec) ) | ConstantFun(w, false) => ( mustCheckStack := true; (* May be recursive. *) genop (Group5, NONE, cvec); genmodrm(Based, 4 (* jmp *), 5 (* PC rel *), cvec); addConstToVec (WVal w, ConstArea 0, cvec) ) | ConstantFun(w, true) => (* Indirect jumps are used to call into the RTS. No need to check the stack. *) let val (rc, rx) = getReg regClosure in genop (MOVL_32_64_R rc, SOME {w=true, r=false, b=rx, x=false}, cvec); addConstToVec (WVal w, InlineAbsolute, cvec); genop (Group5, NONE, cvec); genmodrm(Based, 4 (* jmp *), rc, cvec) end; exited := true (* We're not coming back. *) ); (* Exported. Return and remove args. *) fun returnFromFunction (resReg, args, cvec as Code{exited, ...}) : unit = (if resReg regNeq regNone then raise InternalError "Wrong argument" else if args = 0 then genop (RET, NONE, cvec) else let val offset = args * wordSize in genop (RET_16, NONE, cvec); gen8u (offset mod exp2_8, cvec); gen8s (offset div exp2_8, cvec); (* Assume it will fit in 16 bits. *) if offset > 32767 then raise InternalError "Return offset too large" else () end; exited := true (* We're not coming back. *) ); (* Exported. The exception argument has already been loaded into eax *) (* Call, rather than jump to, the exception code so that we have the address of the caller if we need to produce an exception trace. *) fun raiseException cvec = ( doPending (cvec, 15+3); (* Since we're calling we put the "return address" on a word+2 byte boundary. This is never actually used as a return address but it's probably best to make sure it's properly aligned. It probably simplifies exception tracing which is the reason it's there. *) align (3, cvec); genop(Group5, NONE, cvec); genmodrm (Based8, 2 (* call *), #1 (getReg ebp), cvec); gen8u (MemRegRaiseException, cvec) ) (* Exported. Set a register to a particular offset in the stack. *) fun genStackOffset (reg, byteOffset, cvec) : unit = if byteOffset = 0 then genMove (reg, regStackPtr, cvec) else genLeal (reg, regStackPtr, byteOffset, cvec) (* Only used for while-loops. *) fun jumpback (lab, stackCheck, cvec as Code{exited, ic, ...}) : unit = ( (* Put in a stack check. This is used to allow the code to be interrupted. *) if stackCheck then ( (* cmp reg,16(%ebp)*) genOpEA(Arith (CMP, 3), MemRegStackLimit, ebp, esp, cvec); (* jnb 3 *) let val lab = [putConditional (JNB, cvec)] in (* call *) genop(Group5, NONE, cvec); genmodrm (Based8, 2 (* call *), #1 (getReg ebp), cvec); gen8u (MemRegStackOverflowCall, cvec); fixup (lab, cvec) end ) else (); (* Do any pending instructions before calculating the offset, just in case we put in some instructions first. *) doPending (cvec, 15); let val offset = lab addrMinus (!ic); (* Negative *) val offset2 = offset - 2; in if is8Bit offset2 then ( genop (JMP_8, NONE, cvec); gen8s (offset2, cvec) ) else ( genop (JMP_32, NONE, cvec); gen32s (offset - 5, cvec) ) end; exited := true ); (* Allocate store and put the resulting pointer in the result register. *) fun allocStore (size, flag, resultReg, cvec) : unit = let val bytes = (size + 1) * wordSize; val lengthWord = size + (Word8.toInt flag * exp2_56); (* Size + mutable. *) in (* subl (size+1)*4,r15; cmpl r15,8(%ebp); jnb 1f; call 40[%ebp]; 1f: movl size,-4(r15); movl r15,r *) genLeal (r15, r15, ~ bytes, cvec); (* TODO: What if it's too big to fit? *) genOpEA(Arith (CMP, 3 (* r/m to reg *)), MemRegLocalMbottom, ebp, r15, cvec); let val lab = [putConditional (JNB, cvec)] in (* If we don't have enough store for this allocation we call this function. *) genop (Group5, NONE, cvec); genmodrm(Based8, 2 (* call *), #1 (getReg ebp), cvec); gen8s (MemRegHeapOverflowCall, cvec); fixup (lab, cvec) end; (* Set the size field of a newly allocated piece of store. *) genOpPlus2 (MOVL_32_A, ~wordSize, r15, 0, cvec); gen32s (size, cvec); (* Set the flag byte separately. *) if flag <> 0w0 then ( genOpPlus2 (MOVB_8_A, ~1, r15, 0, cvec); gen8s (Word8.toInt flag, cvec) ) else (); (* TODO: What if the length won't fit in 32 bits? *) genMove(resultReg, r15, cvec) end; (* Remove the mutable bit by clearing the flag byte. *) fun setFlag (baseReg, cvec, flag) : unit = genStoreI (toMachineWord flag, ~1, baseReg, STORE_BYTE, regNone, cvec); (* Small tuples and closures are created by allocating the space and storing into it without setting the mutable bit. This is safe provided there are no traps until all the values have been stored, and gcode checks for this by loading all the values, apart from constants, into registers. We have to make sure that we don't mess this up by reordering a load instruction (which might cause a persistent store trap) before the final store. Gcode calls "completeSegment" after the last store and we flush the queue just to be on the safe side. *) (* This comment applied to the (very) old persistent store system and is no longer relevant. I've left the comment in because there may be code that assumes that this is still necessary. DCJM June 2006. *) val completeSegment = flushQueue; datatype instrs = instrMove | instrAddA | instrSubA | instrRevSubA | instrMulA | instrAddW | instrSubW | instrRevSubW | instrMulW | instrDivW | instrModW | instrOrW | instrAndW | instrXorW | instrLoad | instrLoadB | instrVeclen | instrVecflags | instrPush | instrUpshiftW (* logical shift left *) | instrDownshiftW (* logical shift right *) | instrDownshiftArithW (* arithmetic shift right *) | instrGetFirstLong | instrStringLength | instrSetStringLength | instrBad; (* Can the we use the same register as the source and destination of an instructions? On this machine - no. *) val canShareRegs : bool = false; (* Is there a general register/register operation? Some operations may not be implemented because this machine does not have a suitable instruction or simply because they have not yet been added to the code generator. It is possible for an instruction to be implemented as a register/immediate operation but not as a register/register operation (e.g. multiply) *) fun instrIsRR instrUpshiftW = false (* General shifts require CL register *) | instrIsRR instrDownshiftW = false | instrIsRR instrDownshiftArithW = false (* | instrIsRR instrMulA = false (* Too complicated to implement *) | instrIsRR instrMulW = false (* Too complicated to implement *) | instrIsRR instrDivW = false | instrIsRR instrModW = false *) | instrIsRR _ = true ; datatype tests = Length of opCode (* always a conditional jump *) | Arb of opCode | Wrd of opCode; val Short = Length JNE; val Long = Length JE; val testNeqW = Wrd JNE; val testEqW = Wrd JE; val testGeqW = Wrd JNB; (* These are UNsigned comparisons *) val testGtW = Wrd JA; val testLeqW = Wrd JNA; val testLtW = Wrd JB; val testNeqA = Arb JNE; val testEqA = Arb JE; val testGeqA = Arb JGE; val testGtA = Arb JG; val testLeqA = Arb JLE; val testLtA = Arb JL; (* Is this argument acceptable as an immediate or should it be loaded into a register? *) local fun isPower2 n = let fun p2 i = if i < n then p2 (i*2) else i = n in n > 0 andalso p2 1 end in fun instrIsRI (i, cnstnt) = case i of instrBad => false | instrRevSubA => false | instrRevSubW => false | instrMove => true | instrPush => true | instrMulA => isShort cnstnt andalso toInt (toShort cnstnt) = 2 | instrMulW => isShort cnstnt andalso isPower2(toInt (toShort cnstnt)) | instrDivW => isShort cnstnt andalso isPower2(toInt (toShort cnstnt)) | instrModW => isShort cnstnt andalso isPower2(toInt (toShort cnstnt)) | instrSetStringLength => false (* The string length is untagged and so it's not safe to put it inline. *) | _ => isTagged32bitS cnstnt (* All others must be short *) end; (* Test a single argument and trap if it is long. The result is the instruction address of the trap, and is used to jump back to if the instruction overflows. *) fun tagTest1 (r: reg, cvec as Code{ic, ...}) = let val (regNum, rx) = getReg r; in if r regEq eax then (* Special instruction for testing accumulator. Can use an 8-bit test. *) ( genop (TEST_ACC8, NONE, cvec); gen8u (1, cvec) ) else ( (* We can use a REX code to force it to always use the low order byte. *) genop (Group3_a, if rx orelse regNum >= 4 then SOME{w=false, r=false, b=rx, x=false} else NONE, cvec); genmodrm (Register, 0 (* test *), regNum, cvec); gen8u(1, cvec) ); let val lab = putConditional (JNE, cvec); (* generates code *) val jumpback = !ic; in genop(Group5, NONE, cvec); genmodrm (Based8, 2 (* call *), #1 (getReg ebp), cvec); gen8u (MemRegArbEmulation, cvec); fixup ([lab], cvec); jumpback end end; (* tagTest1 *) (* Test a pair of arguments and trap if either is long. The result is the instruction address of the trap, and is used to jump back to if the instruction overflows. *) fun tagTest2 (rd:reg, r1:reg, r2:reg, useOr:bool, cvec as Code{ic, ...}) : addrs = let (* In most cases we have to trap if EITHER is long, and so we AND together the arguments. However if we are comparing two arbitrary precision values for (in)equality, we need only trap if BOTH are long, since if one is long and the other not then they are both definitely different. *) val testOP = if useOr then OR else AND; in (* If the destination register is not the same as either source register we can use that directly, otherwise we have to push it. *) (* bug-fixed SPF 3/1/95 - now checks both r1 and r2. *) if rd regEq r1 then ( genPush (rd, cvec); genReg (testOP, rd, r2, cvec) ) else if rd regEq r2 then ( genPush (rd, cvec); genReg (testOP, rd, r1, cvec) ) else ( genMove (rd, r1, cvec); genReg (testOP, rd, r2, cvec) ); if rd regEq eax then (* Special instruction to test the accumulator. *) ( genop (TEST_ACC8, NONE, cvec); gen8u (1, cvec) ) else let val (regNum, rx) = getReg rd in (* We can use a REX code to force it to always use the low order byte. *) genop (Group3_a, if rx orelse regNum >= 4 then SOME{w=false, r=false, b=rx, x=false} else NONE, cvec); genmodrm (Register, 0 (* test *), regNum, cvec); gen8u(1, cvec) end; (* restore rd if it's used as a source register *) if (rd regEq r1) orelse (rd regEq r2) then genPushPop(POP_R, rd, cvec) else (); let val lab = putConditional (JNE, cvec); (* generates code *) val jumpback = !ic; in genop(Group5, NONE, cvec); genmodrm (Based8, 2 (* call *), #1 (getReg ebp), cvec); gen8u (MemRegArbEmulation, cvec); fixup ([lab], cvec); jumpback end end; (* generate the "jump on overflow" used to implement arbitrary-precision operations. *) fun genJO8 (addr, cvec as Code{ic, ...}) = let val U : unit = doPending (cvec, 15); val here = !ic; (* jump address calculations are relative to the value of the program counter *after* the instruction *) val offset = addr addrMinus (here addrPlus 2); in gen8u (opToInt JO, cvec); gen8s (offset, cvec) end (* All these can be handled. *) fun isCompRR tc = true; (* Is this argument acceptable as an immediate or should it be loaded into a register? *) fun isCompRI (tc, cnstnt) = case tc of Length _ => true | _ => isTagged32bitS cnstnt; (* The compare instruction sign-extends immediates. *) (* Fixed and arbitrary precision comparisons. *) fun compareAndBranchRR (r1, r2, tc, cvec) : labels = case tc of Wrd opc => ( genReg (CMP, r1, r2, cvec); [putConditional (opc, cvec)] ) | Arb opc => let (* Test the tags. If we are testing for equality we can OR the tags and only trap if both arguments are long. Try to use eax, ebx, ecx or edx for rd because then we can use a single byte test. *) val rd = if #1 (getReg r1) > 4 then r2 else r1; val useOr = case opc of JE => true | JNE => true | _ => false ; in tagTest2 (rd, r1, r2, useOr, cvec); genReg (CMP, r1, r2, cvec); [putConditional (opc, cvec)] end | _ => raise InternalError "Should not have short/long here"; fun compareAndBranchRI (r, cnstnt, tc, cvec) : labels = let val c = toInt (toShort cnstnt); in case tc of Length opc => ( (* Since we're only interested in the bottom bit we could use an 8-bit test, provided the value was in eax, ebx, ecx, edx. *) genOpRegPlus2 (Group3_A, r, 0, cvec); gen32u (1, cvec); [putConditional (opc, cvec)] ) | Wrd opc => ( genImmed (CMP, r, tag c, cvec); [putConditional (opc, cvec)] ) | Arb opc => ( (* Can do tests for (in)equality on arbitrary precision values without checking the tags since the values we're comparing against are short constants. *) case opc of JE => () | JNE => () | _ => (tagTest1 (r, cvec) : addrs; ()) ; genImmed (CMP, r, tag c, cvec); [putConditional (opc, cvec)] ) end; val inlineAssignments = true; (* Common code for div and mod word. They are identical apart from getting the result. *) fun divmodWord(isDiv: bool, r1:reg, r2:reg, rd:reg, cvec) : unit = let (* The divisor needs to be a different register from either eax or edx. It also needs to be different from r1 since we're going to modify divReg before we load r1 into eax. *) val divReg = if rd regNeq eax andalso rd regNeq edx then rd else if r1 regNeq ecx then ecx else esi in (* This is a bit complicated because the result is always placed in the EDX:EAX register pair so we have to save one or both. *) if rd regNeq eax then genPush(eax, cvec) else (); if rd regNeq edx then genPush(edx, cvec) else (); if divReg regNeq rd then genPush(divReg, cvec) else (); (* Untag, but don't shift, the divisor and dividend. *) if r2 regEq eax then ( if divReg regEq r1 then raise InternalError "Assertion failed: Invalid registers" else (); (* We use move followed by substraction since that tests the result for zero. *) genMove(divReg, r2, cvec); genImmed (SUB, divReg, 1, cvec); genLeal (eax, r1, ~1, cvec) ) else ( genLeal (eax, r1, ~1, cvec); genMove(divReg, r2, cvec); genImmed (SUB, divReg, 1, cvec) ); let val lab = [putConditional (JNE, cvec)] in (* call *) (* Use a call so we can get an exception trace. *) genop(Group5, NONE, cvec); genmodrm (Based8, 2 (* call *), #1 (getReg ebp), cvec); gen8u (MemRegRaiseDiv, cvec); fixup (lab, cvec) end; (* Do the division. *) genReg (XOR, edx, edx, cvec); genOpRegPlus2 (Group3_A, divReg, 6 (* div *), cvec); if isDiv then (* Tag the result into the result register. *) genOpIndexed(LEAL, 1, eax, eax, Scale1, rd, cvec) else (* Add the tag back into the remainder. *) genLeal (rd, edx, 1, cvec); (* Restore the saved registers. N.B. This also has the effect of making sure that both eax and edx contain valid values. *) if divReg regNeq rd then genPushPop(POP_R, divReg, cvec) else (); if rd regNeq edx then genPushPop(POP_R, edx, cvec) else (); if rd regNeq eax then genPushPop(POP_R, eax, cvec) else () end (* General register/register operation. *) fun genRR (inst, r1:reg, r2:reg, rd:reg, cvec) : unit = ( if (rd regEq r1) orelse (rd regEq r2) then raise InternalError "Registers must be different" else (); case inst of instrMove => (* Move from one register to another. r2 is ignored *) if rd regEq regHandler (* Not a real register. *) then genStore (r1, MemRegHandlerRegister, ebp, STORE_WORD, regNone, cvec) else genMove (rd, r1, cvec) | instrPush => (* Both rd and r2 are ignored. *) genPush (r1, cvec) | instrAddA => (* Arbitrary precision addition. *) (* If either argument is long, or if both arguments are short but the result overflows, the code branchs to "addr". This executes a trap which gets us into the run-time system which then emulates the instructions, using long arithmetic. Isn't that cute? To make it work, we have to be sure that the source and destination registers are different, because otherwise we wouldn't be able to perform the emulation following an arithmetic overflow. Warning: since the RTS can only emulate a few instructions, we have to be very careful about what code we generate here. For example, we use 2-byte "leal" instructions for tagging and untagging rather than 1-byte "add" instructions because the emulation has to treat these two operations differently. SPF 4/1/95 *) let val addr = tagTest2 (rd, r1, r2, false, cvec); (* generates code *) in (* Do the actual operation after removing a tag from one arg. *) genLeal (rd, r1, ~1, cvec); genReg (ADD, rd, r2, cvec); genJO8 (addr, cvec) end | instrSubA => (* Arbitrary precision subtraction. *) let val addr = tagTest2 (rd, r1, r2, false, cvec); (* generates code *) in (* Do the actual operation after removing a tag from one arg. *) genMove (rd, r1, cvec); genReg (SUB, rd, r2, cvec); genLeal (rd, rd, 1, cvec); (* Put back the tag. *) genJO8 (addr, cvec) end | instrRevSubA => (* Arbitrary precision subtraction. *) let val addr = tagTest2 (rd, r1, r2, false, cvec); (* generates code *) in (* Do the actual operation after removing a tag from one arg. *) genMove (rd, r2, cvec); genReg (SUB, rd, r1, cvec); genLeal (rd, rd, 1, cvec); (* Put back the tag. *) genJO8 (addr, cvec) end | instrMulA => (* Arbitrary precision multiplication. *) let val addr = tagTest2 (rd, r1, r2, false, cvec); (* generates code *) in (* This is a bit complicated because the result is always placed in the EDX:EAX register pair so we have to save one or both. *) (* If the multiply overflows we need to be able to recover the original arguments in order to emulate the instruction. *) if rd regNeq eax then genPush(eax, cvec) else (); if rd regNeq edx then genPush(edx, cvec) else (); if r2 regEq edx then ( (* Untag, but don't shift the multiplicand. *) genLeal (eax, r1, ~1, cvec); (* Shift down the multiplier. *) genOpRegPlus2 (Group2_1_A, edx, 7 (* sar *), cvec) ) else (* r2 <> edx *) ( (* Shift down the multiplier. *) if r1 regNeq edx then genMove(edx, r1, cvec) else (); genOpRegPlus2 (Group2_1_A, edx, 7 (* sar *), cvec); (* Untag, but don't shift the multiplicand. *) genLeal (eax, r2, ~1, cvec) ); (* Do the multiplication. *) genOpRegPlus2 (Group3_A, edx, 5 (* imull *), cvec); (* Add back the tag, but don't shift. *) genLeal (rd, eax, 1, cvec); (* Restore the saved registers. N.B. This also has the effect of making sure that both eax and edx contain valid values. *) if rd regNeq edx then genPushPop(POP_R, edx, cvec) else (); if rd regNeq eax then genPushPop(POP_R, eax, cvec) else (); genJO8 (addr, cvec) (* Check for overflow. *) end | instrAddW => (* Fixed precision addition. (Doesn't test for overflow.) *) ( (* Remove the tag from one argument, then add in the other. *) (* This could be done using a single leal instruction: leal rd,[r1+r2-1] *) genLeal (rd, r2, ~1, cvec); genReg (ADD, rd, r1, cvec) ) | instrSubW => (* Fixed precision subtraction. (Doesn't test for overflow.) *) ( genMove (rd, r1, cvec); genReg (SUB, rd, r2, cvec); genImmed (ADD, rd, 1, cvec) ) | instrRevSubW => (* Fixed precision subtraction. (Doesn't test for overflow.) *) ( genMove (rd, r2, cvec); genReg (SUB, rd, r1, cvec); genImmed (ADD, rd, 1, cvec) ) | instrMulW => (* Fixed precision multiplication. (Doesn't test for overflow.) *) ( (* This is a bit complicated because the result is always placed in the EDX:EAX register pair so we have to save one or both. *) if rd regNeq eax then genPush(eax, cvec) else (); if rd regNeq edx then genPush(edx, cvec) else (); if r2 regEq edx then ( (* Untag, but don't shift the multiplicand. *) genLeal (eax, r1, ~1, cvec); (* Shift down the multiplier. *) genOpRegPlus2 (Group2_1_A, edx, 5 (* shr *), cvec) ) else ( (* Shift down the multiplier. *) if r1 regNeq edx then genMove(edx, r1, cvec) else (); genOpRegPlus2 (Group2_1_A, edx, 5 (* shr *), cvec); (* Untag, but don't shift the multiplicand. *) genLeal (eax, r2, ~1, cvec) ); (* Do the multiplication. *) genOpRegPlus2 (Group3_A, edx, 4 (* mull *), cvec); (* Add back the tag, but don't shift. *) genLeal (rd, eax, 1, cvec); (* Restore the saved registers. N.B. This also has the effect of making sure that both eax and edx contain valid values. *) if rd regNeq edx then genPushPop(POP_R, edx, cvec) else (); if rd regNeq eax then genPushPop(POP_R, eax, cvec) else () ) | instrDivW => (* Fixed precision division. (Doesn't test for overflow.) *) divmodWord(true, r1, r2, rd, cvec) | instrModW => (* Fixed precision remainder. (Doesn't test for overflow.) *) divmodWord(false, r1, r2, rd, cvec) | instrOrW => (* Logical or. *) ( genMove (rd, r1, cvec); genReg (OR, rd, r2, cvec) ) | instrAndW => (* Logical and. *) ( genMove (rd, r1, cvec); genReg (AND, rd, r2, cvec) ) | instrXorW => ( (* Must remove the tag from one argument. *) genLeal (rd, r2, ~1, cvec); genReg (XOR, rd, r1, cvec) ) | instrLoad => (* Load a word. *) (* The index is already multiplied by 2, so we need only multiply by two again to give a word offset. Then we have to subtract 2 to account for the tag. *) genOpIndexed(MOVL_A_R, ~(wordSize div 2), r1, r2, if wordSize = 4 then Scale2 else Scale4, rd, cvec) | instrLoadB => (* Load a byte. *) ( (* mov r2,rd; shrl $1,rd; movzl 0(r1,rd,1),rd; leal 1(,rd,2),rd *) genMove (rd, r2, cvec); genOpRegPlus2 (Group2_1_A, rd, 5 (* shr *), cvec); genOpIndexed (MOVZX, 0, r1, rd, Scale1, rd, cvec); (* Tag the result. *) genTag (rd, cvec) ) | instrSetStringLength => (* Set the length word of a string. *) ( (* The length is untagged. *) genOpRegPlus2 (Group2_1_A, r2, 5 (* shr *), cvec); genOpEA (MOVL_R_A, 0, r1, r2, cvec); (* Restore the original value. This ensures we don't have a bad value around and also restores the original value since it may still be wanted. *) genTag(r2, cvec) ) | _ => (* bad and unimplemented instrs *) raise InternalError "Unimplemented instruction" ); (* end genRR *) (* Register/immediate operations. In many of these operations we have to tag the immediate value. *) fun genRI (inst, rs, constnt, rd, cvec) : unit = let (* log2 function for special cases of powers of 2. *) fun log2 n = let fun l2 i j = if i < n then l2 (i*2) (j+1) else if i = n then j else raise InternalError "Not a power of two" in if n <= 0 then raise InternalError "Not a power of two" else l2 1 0 end in if rd regEq rs andalso (case inst of instrPush => false | _ => true) then raise InternalError "Registers must be different" else (); case inst of instrMove => if isShort constnt then (* Load a constant into a register. rs is ignored. *) let val c = toInt (toShort constnt); val tagged = tag c; in genMoveI (rd, tagged, cvec) end else let val (rc, rx) = getReg rd in genop (MOVL_32_64_R rc, SOME {w=true, r=false, b=rx, x=false}, cvec); addConstToVec (WVal constnt, InlineAbsolute, cvec) (* Remember this constant and address. *) end | instrPush => if isTagged32bitS constnt then (* Both rd and rs are ignored. *) let val c = toInt (toShort constnt); val tagged = tag c; in if not (is8Bit tagged) then ( genop (PUSH_32, NONE, cvec); gen32s(tagged, cvec) ) else ( genop (PUSH_8, NONE, cvec); gen8s (tagged, cvec) ) end else if isX64 then (* Put it in the constant area. *) ( genop (Group5, NONE, cvec); genmodrm(Based, 6 (* push *), 5 (* PC rel *), cvec); addConstToVec (WVal constnt, ConstArea 0, cvec) ) else (* 32-bit *) ( genop (PUSH_32, NONE, cvec); addConstToVec (WVal constnt, InlineAbsolute, cvec) ) | instrAddA => (* Arbitrary precision addition. *) let val c = toInt (toShort constnt); val addr = tagTest1 (rs, cvec); in genMove (rd, rs, cvec); genImmed (ADD, rd, semitag c, cvec); genJO8 (addr, cvec) end | instrSubA => (* Arbitrary precision subtraction. *) let val c = toInt (toShort constnt); val addr = tagTest1 (rs, cvec); in genMove (rd, rs, cvec); genImmed (SUB, rd, semitag c, cvec); genJO8 (addr, cvec) end | instrAddW => (* Fixed precision addition - doesn't check for overflow. *) (* The argument is shifted but not tagged *) let val c = toInt (toShort constnt) in genLeal (rd, rs, semitag c, cvec) end | instrSubW => (* Fixed precision subtraction - doesn't check for overflow. *) (* The argument is shifted but not tagged. *) let val c = toInt (toShort constnt) in genLeal (rd, rs, ~ (semitag c), cvec) end (* Now removed. This is no longer safe now that we look for constants in the code. | instrRevSubW => (* Fixed precision reverse subtraction - doesn't check for overflow. *) ( genMoveI (rd, semitag c + 2, cvec); genReg (SUB, rd, rs, cvec) ) *) | instrOrW => (* Logical or. *) let val c = toInt (toShort constnt); val tagged = tag c; in genMove (rd, rs, cvec); genImmed (OR, rd, tagged, cvec) end | instrAndW => (* Logical and. *) let val c = toInt (toShort constnt); val tagged = tag c; in genMove (rd, rs, cvec); genImmed (AND, rd, tagged, cvec) end | instrXorW => (* Constant must be shifted but not tagged. *) let val c = toInt (toShort constnt) in genMove (rd, rs, cvec); genImmed (XOR, rd, semitag c, cvec) end | instrUpshiftW => (* Word shift of more than 63 (unsigned) is defined to return zero for the logical shifts and either 0 or all ones for the arithmetic shift. The i386 shift instructions mask the shift value instead. *) let val c = toInt (toShort constnt) in if c < 0 orelse c > 63 then genMoveI (rd, tag 0, cvec) else ( genLeal (rd, rs, ~1, cvec); (* Remove the tag. *) genOpRegPlus2 (Group2_8_A, rd, 4 (* shl *), cvec); gen8s (c, cvec); genImmed (OR, rd, tag 0, cvec) (* Put in the tag *) ) end | instrDownshiftW => let val c = toInt (toShort constnt) in if c < 0 orelse c > 63 then genMoveI (rd, tag 0, cvec) else ( genMove (rd, rs, cvec); genOpRegPlus2 (Group2_8_A, rd, 5 (* shr *), cvec); gen8s (c, cvec); genImmed (OR, rd, tag 0, cvec) (* Put in the tag *) ) end | instrDownshiftArithW => (* In this case it's easiest to set the shift to 63. *) let val c = toInt (toShort constnt) in genMove (rd, rs, cvec); genOpRegPlus2 (Group2_8_A, rd, 7 (* sar *), cvec); gen8s (if c < 0 orelse c > 63 then 63 else c, cvec); genImmed (OR, rd, tag 0, cvec) (* Put in the tag *) end | instrMulA => (* We only handle multiplication by two at the moment. We could handle a wider range but it's not that easy particularly because the overflow flag is not defined on shifts of more than one. *) let val c = toInt (toShort constnt) val addr = tagTest1 (rs, cvec); in if c = 2 then () else raise InternalError "Multiply not implemented"; (* Do the actual operation after removing a tag from one arg. *) genLeal (rd, rs, ~1, cvec); genReg (ADD, rd, rs, cvec); genJO8 (addr, cvec) end | instrMulW => let val c = toInt (toShort constnt) (* We only handle multiplication by powers of two at the moment. This is easier than for arbitrary precision multiplication because we don't have to detect overflow. *) val log2c = log2 c in if log2c = 0 (* Multiplying by one??? *) then genMove (rd, rs, cvec) else if log2c = 1 then (* Multiplying by 2. *) genOpIndexed (LEAL, ~1, rs, rs, Scale1, rd, cvec) else if log2c = 2 then (* Multiplying by 4 *) genOpIndexed(LEAL, ~3, regNone, rs, Scale4, rd, cvec) else if log2c = 3 then (* Multiplying by 8 *) genOpIndexed(LEAL, ~7, regNone, rs, Scale8, rd, cvec) else (* Other powers of 2. *) ( genMove (rd, rs, cvec); genOpRegPlus2 (Group2_8_A, rd, 4 (* shl *), cvec); gen8s (log2c, cvec); genLeal (rd, rd, 1-c, cvec) (* Remove the shifted tag and add the tag. *) ) end | instrDivW => let val c = toInt (toShort constnt) (* We only handle division by powers of two at the moment. *) val log2c = log2 c in if log2c = 0 (* Dividing by one??? *) then genMove (rd, rs, cvec) else (* Other powers of 2. *) ( genMove (rd, rs, cvec); genOpRegPlus2 (Group2_8_A, rd, 5 (* shr *), cvec); gen8s (log2c, cvec); (* Set the tag bit, which may already be set as a result of shifting a bit into it. *) genImmed (OR, rd, tag 0, cvec) ) end | instrModW => let val c = toInt (toShort constnt) val ASSERT = log2 c (* Check it's a power of 2. *) val tagged = tag (c-1) in genMove (rd, rs, cvec); genImmed (AND, rd, tagged, cvec) end | instrLoad => let val c = toInt (toShort constnt) in (* Offset is words so multiply by word size to get byte offset. *) genLoad (c * wordSize, rs, rd, cvec) end | instrLoadB => (* Load a byte. *) let val c = toInt (toShort constnt) in genOpEA(MOVZX (* 2 byte opcode *), c, rs, rd, cvec); (* Tag the result. *) genTag (rd, cvec) end | instrVeclen => ( genLoad (~wordSize, rs, rd, cvec); (* length only occupies the least significant 56 bits - the other bits are flags. We can't AND it with exp2_56-1 because that's too big so we shift it up and down again. *) genOpRegPlus2 (Group2_8_A, rd, 4 (* shl *),cvec); gen8s(8, cvec); genOpRegPlus2 (Group2_8_A, rd, 5 (* shr *), cvec); gen8s(8, cvec); (* Tag the result. *) genTag (rd, cvec) ) | instrVecflags => (* Load the flags byte. *) ( genOpEA (MOVZX (* 2 byte opcode *), ~1, rs, rd, cvec); (* Tag the result. *) genTag (rd, cvec) ) | instrGetFirstLong => let (* Get the first word of a long integer. We've already checked that it is long. *) (* Test the "sign bit" of the object. *) val _ = ( genOpPlus2(Group3_a, ~1, rs, 0 (* test *), cvec); gen8u (16, cvec) ) (* Load the unsigned, untagged, little-endian value. *) val _ = genLoad (0, rs, rd, cvec); (* Skip if the sign bit wasn't set. *) val l1 = [putConditional (JE, cvec)] in genOpRegPlus2(Group3_A, rd, 3 (* neg *), cvec); fixup(l1, cvec); genTag (rd, cvec) end | instrStringLength => let (* If it's tagged the result is 1 otherwise we need to load the length word and tag it. *) val l1 = compareAndBranchRI (rs, toMachineWord 0 (* Unused *), Long, cvec) val _ = genMoveI (rd, tag 1, cvec); val l2 = unconditionalBranch cvec in fixup(l1, cvec); genLoad (0, rs, rd, cvec); (* Load the length word. *) genTag (rd, cvec); (* And tag the result. *) fixup(l2, cvec) end | _ => (* bad *) raise InternalError "Unimplemented instruction" end; (* genRI *) type cases = int * addrs; (* On this architecture, the jumptable is physically inserted into the code as a vector of address offsets. The function "indexedCase" generates the space for the table and "makeJumpTable" inserts the actual entries, once the addresses are known. SPF 23/11/1997 Now changed to use a vector of jump instructions. These are padded out to 8 bytes with no-ops. The reason for the change is to ensure that the code segment only contains instructions so that we can scan for addresses within the code. It also simplifies and speeds up the indexed jump at the expense of doubling the size of the table itself. DCJM 1/1/2001 *) type jumpTableAddrs = addrs; fun constrCases (p as (i,a)) = p; type caseList = cases list; fun useIndexedCase (min:int, max:int, numberOfCases:int, exhaustive:bool) = isShort min andalso isShort max andalso numberOfCases > 7 andalso numberOfCases >= (max - min) div 3; fun indexedCase (r1:reg, r2:reg, min:int, max:int, exhaustive:bool, cvec as Code{exited, ic, ...}) : jumpTableAddrs = let val rangeCheck = if exhaustive then [] else let val taggedMin = tag min; val taggedMax = tag max; in (* Is it long? *) genOpRegPlus2 (Group3_A, r1, 0(* test *), cvec); gen32u(1, cvec); (* Need to check whether the branch is in range. *) let val l1 = putConditional (JE, cvec); (* Compare with the minimum. *) val UUU = genImmed(CMP, r1, taggedMin, cvec); val l2 = putConditional (JL, cvec); (* Compare with the maximum. *) val UUU = genImmed(CMP, r1, taggedMax, cvec); val l3 = putConditional (JG, cvec); in [l1, l2, l3] end end; val lab = ref addrZero; val (rc2, rx2) = getReg r2 in (* Load the address of the jump table. *) genop (MOVL_32_64_R rc2, SOME {w=true, r=false, b=rx2, x=false}, cvec); addConstToVec (HVal lab, InlineAbsolute, cvec); (* Compute the jump address. The index is a tagged integer so it is already multiplied by 2. We need to multiply by four to get the correct size. We subtract off the minimum value and also the shifted tag. *) genOpIndexed (LEAL, min * ~8 - 4, r2, r1, Scale4, r2, cvec); (* Jump into the jump table. Since each entry in the table is 8 bytes long r2 will still be on a word + 2 byte boundary. *) genop (Group5, if rx2 then SOME{w=false, r=false, b=rx2, x=false} else NONE, cvec); genmodrm(Register, 4 (* jmp *), rc2, cvec); exited := true; (* There's a very good chance that we will now extend the branches for the "out of range" checks. The code to do that doesn't know that all these branches will come to the same point so will generate three separate long branches. We could combine them but it's hardly worth it. *) doPending (cvec, (max - min + 1) * 8 (* size of table. *) + 3 (* Maximum alignment *)); (* The start address must be on a two byte boundary so that the address we've loaded is a valid code address. *) while getAddr (!ic) mod 4 <> 2 do genop (NOP, NONE, cvec); let fun initialiseTable i = if i > max then () (* Done *) else ( gen8u (opToInt JMP_32, cvec); gen32u (0, cvec); (* Add no-ops to make it 8 bytes. *) gen8u (opToInt NOP, cvec); gen8u (opToInt NOP, cvec); gen8u (opToInt NOP, cvec); initialiseTable (i+1) ) val here = !ic; in lab := here; initialiseTable min; fixup (rangeCheck, cvec); (* The default case comes in here. *) here end end; fun makeJumpTable (startTab:jumpTableAddrs, cl:caseList, default:addrs, min : int, max : int, Code{codeVec, ...}) : unit = let fun putCase i addr = let val addrOfJmp = startTab addrPlus ((i - min) * 8) val jumpOffset = (addr addrMinus addrOfJmp) - 5 (* From end of instr. *) in set32s(jumpOffset, addrOfJmp addrPlus 1, codeVec) end (* Initialise to the default. *) fun putInDefaults i = if i <= max then (putCase i default; putInDefaults(i+1)) else () (* Overwrite the defaults by the cases. N.B. We've generated the list in reverse order so if we have any duplicates we will correctly overwrite the later cases with earlier ones. *) fun putInCases [] = () | putInCases ((i, a) :: t) = (putCase i a; putInCases t) in putInDefaults min; putInCases cl end; fun printCode (Code{procName, numOfConsts, pcOffset, constVec, printStream, ...}) seg endcode = let val print = printStream val ptr = ref 0; (* prints a string representation of a number *) fun printHex v = print(Int.fmt StringCvt.HEX v) infix 3 +:= ; fun (x +:= y) = (x := !x + (y:int)); fun print32 () = let val valu = get32s (!ptr, seg); val U : unit = (ptr +:= 4); in if valu = tag 0 andalso !numOfConsts <> 0 then (* May be a reference to a code-segment we haven't generated yet. In that case we try to print the name of the function rather than simply printing "1". It might be nice to print the function name in other cases but that might be complicated. *) let val caddr = !ptr - 4 fun findRef [] = (* Not there - probably really tagged 0 *) printHex valu | findRef ({const = CVal(Code{procName, ...}), addrs, ...} :: rest) = if caddr = getAddr addrs + ! pcOffset*4 then print("=" ^ procName) else findRef rest | findRef (_ :: rest) = findRef rest in findRef(! constVec) end else printHex valu end; fun print64 () = let val valu = get64s(!ptr, seg); in printHex valu; ptr +:= 8 end fun get16s (a: int, seg: cseg) : int = let val b0 = Word8.toInt (csegGet (seg, a)); val b1 = Word8.toInt (csegGet (seg, a + 1)); val b1' = if b1 >= exp2_7 then b1 - exp2_8 else b1; in (b1' * exp2_8) + b0 end; fun print16 () = let val valu = get16s (!ptr, seg); val U : unit = (ptr +:= 2); in printHex valu end; fun print8 () = let val valu = get8s (!ptr, seg); val U : unit = ptr +:= 1; in printHex valu end; fun printJmp () = let val valu = get8s (!ptr, seg); val U : unit = ptr +:= 1; in printHex (valu + !ptr) end; (* Print an effective address. *) fun printEA rex = let val modrm = Word8.toInt (csegGet (seg, !ptr)); val U : unit = (ptr +:= 1); val md = modrm div 64; val rm = modrm mod 8; (* Decode the Rex prefix if present. *) val rexW = IntInf.andb(rex, 0x8) <> 0 val rexR = IntInf.andb(rex, 0x4) <> 0 val rexX = IntInf.andb(rex, 0x2) <> 0 val rexB = IntInf.andb(rex, 0x1) <> 0 in if md = 3 then print (regRepr (mkReg(rm, rexB))) else if rm = 4 then let (* s-i-b present. *) val sib = Word8.toInt (csegGet (seg, !ptr)); val U : unit = (ptr +:= 1); val ss = sib div 64; val index = (sib div 8) mod 8; val base = sib mod 8; in if md = 1 then print8 () else if md = 2 orelse base = 5 (* andalso md=0 *) then print32 () else (); print "("; if md <> 0 orelse base <> 5 then print (regRepr (mkReg(base, rexB))) else (); if index <> 4 (* No index. *) then print ("," ^ regRepr (mkReg(index, rexX)) ^ (if ss = 0 then ",1" else if ss = 1 then ",2" else if ss = 2 then ",4" else ",8")) else (); print ")" end else (* no s-i-b. *) if md = 0 andalso rm = 5 then (* PC relative. *) (print "(%rip+"; print32 (); print ")") else (* register plus offset. *) ( if md = 1 then print8 () else if md = 2 then print32 () else (); print ("(" ^ regRepr (mkReg(rm, rexB)) ^ ")") ) end; fun printArith opc = print (case opc of 0 => "add" | 1 => "or" | 2 => "adc" | 3 => "sbb" | 4 => "and" | 5 => "sub" | 6 => "xor" | _ => "cmp" ); in if procName = "" (* No name *) then print "?" else print procName; print ":\n"; while !ptr < endcode do let val U : unit = printHex (!ptr); (* The address. *) val U : unit = print "\t"; (* See if we have a REX byte. *) val rex = let val b = get8u (!ptr, seg); in if b >= 0x40 andalso b <= 0x4f then (ptr := !ptr + 1; b) else 0 end val rexW = IntInf.andb(rex, 0x8) <> 0 val rexR = IntInf.andb(rex, 0x4) <> 0 val rexX = IntInf.andb(rex, 0x2) <> 0 val rexB = IntInf.andb(rex, 0x1) <> 0 val opByte : int = get8u (!ptr, seg); val U : unit = ptr +:= 1; in if opByte = opToInt Group1_8_A orelse opByte = opToInt Group1_32_A then let (* Opcode is determined by next byte. *) val nb = Word8.toInt (csegGet (seg, !ptr)); in printArith ((nb div 8) mod 8); print "_rev\t"; printEA rex; (* These are the wrong way round. *) print ","; if opByte = opToInt Group1_8_A then print8 () else print32 () end : unit else if opByte = opToInt JE then (print "je\t"; printJmp()) : unit else if opByte = opToInt JNE then (print "jne\t"; printJmp()) : unit else if opByte = opToInt JO then (print "jo\t"; printJmp()) : unit else if opByte = opToInt JL then (print "jl\t"; printJmp()) : unit else if opByte = opToInt JG then (print "jg\t"; printJmp()) : unit else if opByte = opToInt JLE then (print "jle\t"; printJmp()) : unit else if opByte = opToInt JGE then (print "jge\t"; printJmp()) : unit else if opByte = opToInt JB then (print "jb\t"; printJmp()) : unit else if opByte = opToInt JA then (print "ja\t"; printJmp()) : unit else if opByte = opToInt JNA then (print "jna\t"; printJmp()) : unit else if opByte = opToInt JNB then (print "jnb\t"; printJmp()) : unit else if opByte = opToInt JMP_8 then (print "jmp\t"; printJmp()) : unit else if opByte = opToInt JMP_32 then let val valu = get32s (!ptr, seg); val U : unit = (ptr +:= 4); in print "jmp\t"; printHex (!ptr + valu) end : unit else if opByte = opToInt CALL_32 then let val valu = get32s (!ptr, seg); val U : unit = (ptr +:= 4); in print "call\t"; printHex (!ptr + valu) end : unit else if opByte = opToInt MOVL_A_R then let (* Register is in next byte. *) val nb = Word8.toInt (csegGet (seg, !ptr)); val reg = (nb div 8) mod 8; in print "movl\t"; printEA rex; print ","; print (regRepr (mkReg(reg, rexR))) end : unit else if opByte mod 8 = 3 andalso opByte < 3 * 16 + 15 (* 0x3f *) then let (* Register is in next byte. *) val nb = Word8.toInt (csegGet (seg, !ptr)); val reg = (nb div 8) mod 8; in printArith ((opByte div 8) mod 8); print "\t"; printEA rex; print ","; print (regRepr (mkReg(reg, rexR))) end : unit else if opByte = opToInt MOVL_R_A then let (* Register is in next byte. *) val nb = Word8.toInt (csegGet (seg, !ptr)); val reg = (nb div 8) mod 8; in print "movl\t"; print (regRepr (mkReg(reg, rexR))); print ","; printEA rex end : unit else if opByte = opToInt MOVB_R_A then let (* Register is in next byte. *) val nb = Word8.toInt (csegGet (seg, !ptr)); val reg = (nb div 8) mod 8; in print "movb\t"; if rexX then print ("r" ^ Int.toString(reg+8) ^ "B") else case reg of 0 => print "%al" | 1 => print "%cl" | 2 => print "%dl" | 3 => print "%bl" (* If there is a REX byte these select the low byte of the registers. *) | 4 => print (if rex = 0 then "%ah" else "%sil") | 5 => print (if rex = 0 then "%ch" else "%dil") | 6 => print (if rex = 0 then "%dh" else "%bpl") | 7 => print (if rex = 0 then "%bh" else "%spl") | _ => print "Unknown register"; print ","; printEA rex end : unit else if opByte >= opToInt (PUSH_R 0) andalso opByte <= opToInt (PUSH_R 7) then print ("pushl\t" ^ regRepr (mkReg (opByte mod 8, rexB))) : unit else if opByte >= opToInt (POP_R 0) andalso opByte <= opToInt (POP_R 7) then print ("pop\t" ^ regRepr (mkReg (opByte mod 8, rexB))) : unit else if opByte = opToInt NOP then print "nop" : unit else if opByte = opToInt LEAL then let (* Register is in next byte. *) val nb = Word8.toInt (csegGet (seg, !ptr)); val reg = (nb div 8) mod 8; in print "leal\t"; printEA rex; print ","; print (regRepr (mkReg(reg, rexR))) end : unit else if opByte >= opToInt (MOVL_32_64_R 0) andalso opByte <= opToInt (MOVL_32_64_R 7) then ( print "movl\t"; if rexW then print64 () else print32 (); print("," ^ regRepr (mkReg (opByte mod 8, rexB))) ) : unit else if opByte = opToInt MOVL_32_A then ( print "movl_rev\t"; printEA rex; (* These are the wrong way round. *) print ","; print32 () ) : unit else if opByte = opToInt MOVB_8_A then ( print "movb_rev\t"; printEA rex; (* These are the wrong way round. *) print ","; print8 () ) : unit else if opByte = opToInt PUSH_32 then (print "push\t"; print32 ()) : unit else if opByte = opToInt PUSH_8 then (print "push\t"; print8 ()) : unit else if opByte = opToInt Group5 then let (* Opcode is determined by next byte. *) val nb = Word8.toInt (csegGet (seg, !ptr)); val opc = (nb div 8) mod 8; in print (case opc of 2 => "call" | 4 => "jmp" | 6 => "push" | _ => "???" ); print "\t"; printEA rex end : unit else if opByte = opToInt Group3_A then let (* Opcode is determined by next byte. *) val nb = Word8.toInt (csegGet (seg, !ptr)); val opc = (nb div 8) mod 8; in print (case opc of 0 => "testl" | 3 => "negl" | 4 => "mull" | 5 => "imull" | 6 => "divl" | 7 => "idivl" | _ => "???" ); print "\t"; printEA rex; if opc = 0 then (print ","; print32 ()) else () end : unit else if opByte = opToInt Group3_a then let (* Opcode is determined by next byte. *) val nb = Word8.toInt (csegGet (seg, !ptr)); val opc = (nb div 8) mod 8; in print (case opc of 0 => "testb" | 3 => "negb" | _ => "???" ); print "\t"; printEA rex; if opc = 0 then (print ","; print8 ()) else () end : unit else if opByte = opToInt Group2_8_A then let (* Opcode is determined by next byte. *) val nb = Word8.toInt (csegGet (seg, !ptr)); val opc = (nb div 8) mod 8; in print (case opc of 4 => "shl" | 5 => "shr" | 7 => "sar" | _ => "???" ); print "\t"; printEA rex; (* These are the wrong way round. *) print ","; print8 () end : unit else if opByte = opToInt Group2_1_A then let (* Opcode is determined by next byte. *) val nb = Word8.toInt (csegGet (seg, !ptr)); val opc = (nb div 8) mod 8; in print (case opc of 5 => "shr" | 7 => "sar" | _ => "???" ); print "\t1,"; printEA rex end : unit else if opByte = opToInt ESCAPE then let (* Opcode is in next byte. *) val opByte2 = Word8.toInt (csegGet (seg, !ptr)); val U : unit = (ptr +:= 1); in if opByte2 = 11 * 16 + 6 (* 0xb6 *) then let val nb = Word8.toInt (csegGet (seg, !ptr)); val reg = (nb div 8) mod 8; in print "movzl\t"; printEA rex; print ","; print (regRepr (mkReg(reg, rexR))) end : unit else if opByte2 >= 8 * 16 (* 0x80 *) andalso opByte2 <= 8 * 16 + 15 (* 0x8f *) then let val valu = get32s (!ptr, seg); val U : unit = (ptr +:= 4); in print (if opByte2 = 8 * 16 (* 0x80 *) then "jo\t" else if opByte2 = 8 * 16 + 4 (* 0x84 *) then "je\t" else if opByte2 = 8 * 16 + 5 (* 0x85 *) then "jne\t" else if opByte2 = 8 * 16 + 12 (* 0x8c *) then "jl\t" else if opByte2 = 8 * 16 + 13 (* 0x8d *) then "jge\t" else if opByte2 = 8 * 16 + 14 (* 0x8e *) then "jle\t" else if opByte2 = 8 * 16 + 15 (* 0x8f *) then "jg\t" else if opByte2 = 8 * 16 + 2 (* 0x82 *) then "jb\t" else if opByte2 = 8 * 16 + 3 (* 0x83 *) then "jnb\t" else if opByte2 = 8 * 16 + 6 (* 0x86 *) then "jna\t" else if opByte2 = 8 * 16 + 7 (* 0x87 *) then "ja\t" else "???\t" ); printHex (!ptr + valu) end : unit else (print "esc\t"; printHex opByte2) : unit end (* ESCAPE *) else if opByte = opToInt POP_A then (print "pop\t"; printEA rex) : unit else if opByte = opToInt RET then print "ret" : unit else if opByte = opToInt STC then print "stc" : unit else if opByte = opToInt RET_16 then (print "ret\t"; print16 ()) : unit else if opByte = opToInt TEST_ACC8 then (print "testb\t%al,"; print8 ()) else printHex opByte : unit; print "\n" : unit end; (* end of while loop *) print "\n" end (* printCode *); (* constLabels - fill in a constant in the code. *) fun constLabels (Code{resultSeg=ref rseg, pcOffset=ref offset, ic = ref endByte, ...}, addr : addrs, value : machineWord, posn: ConstPosn) : unit = let val seg = scSet rseg; (* The address of the segment. *) val constAddr = addr addrPlus offset*wordSize; in case posn of InlineAbsolute => csegPutConstant (seg, getAddr constAddr, value, false) | InlineRelative => csegPutConstant (seg, getAddr constAddr, value, true) | ConstArea nonInlineCount => (* Not inline. Put the constant in the constant area and set the original address to be the relative offset to the constant itself. *) let val addrOfConst = getAddr (endByte addrPlus (offset + nonInlineCount-1 + 2+1+1) * wordSize); in csegPutConstant (seg, addrOfConst, value, false); set32s(addrOfConst - getAddr constAddr - 4, constAddr, seg) end end; (* Fix up references from other vectors to this one. *) fun fixOtherRefs (refTo as Code{otherCodes=ref otherCodes, ...}, value) = let fun fixRef (refFrom as Code{numOfConsts = noc, constVec = ref constVec, resultSeg = ref resultSeg, ...}) = let fun putConst {const = CVal cCode, addrs, posn, ...} = if cCode is refTo then (* A reference to this one. *) ( (* Fix up the forward reference. *) constLabels (refFrom, addrs, value, posn); (* decrement the "pending references" count *) noc := !noc - 1 ) else () | putConst _ = (); in (* look down its list of forward references until we find ourselves. *) List.app putConst constVec; (* If this function has no more references we can lock it. *) if !noc = 0 then csegLock (scSet resultSeg) else () end (* fixRef *); in (* For each `code' which needs a forward reference to `refTo' fixing up. *) List.app fixRef otherCodes end; (* fixOtherRefs *) (***************************************************************************) (* copyCode *) (***************************************************************************) (* The stack limit register is set at least twice this far from the end of the stack so we can simply compare the stack pointer with the stack limit register if we need less than this much. Setting it at twice this value means that procedures which use up to this much stack and do not call any other procedures do not need to check the stack at all. *) val minStackCheck = 20; (* Adds the constants onto the code, and copies the code into a new segment *) fun copyCode (cvec as Code{pcOffset, codeVec, noClosure, selfCalls = ref selfCalls, selfJumps = ref selfJumps, mustCheckStack = ref callsAProc, numOfConsts, nonInlineConsts = ref constsInConstArea, ic, constVec = ref constVec, resultSeg, procName, printAssemblyCode, printStream, ...}, stackRequired, registerSet) : address = let (* This aligns ic onto a fullword boundary. *) val U : unit = while getAddr (!ic) mod wordSize <> 0 do genop(NOP, NONE, cvec); val endic = !ic; (* Remember end *) val U : unit = if wordSize = 8 then gen64u(0, cvec) else gen32u (0, cvec); (* Marker - 0 (changes !ic) *) (* Prelude consists of 1) nops to make it a whole number of words 2) stack checking code *) local (* little-endian *) fun getBytes (0, x) = [] | getBytes (n, x) = (x mod exp2_8) :: getBytes (n - 1, x div exp2_8); fun testRegAndTrap (reg, entryPt) = [ rex{w=true,r=false,x=false,b=false}, (* cmp reg,16(%ebp)*) opToInt(Arith (CMP, 3)), modrm (Based8, #1 (getReg reg), #1 (getReg ebp)), MemRegStackLimit, (* jnb 3 *) opToInt JNB, 3, (* call *) opToInt Group5, modrm (Based8, 2 (* call *), #1 (getReg ebp)), entryPt ]; val stackCheckCode : int list = if stackRequired >= minStackCheck then let val stackByteAdjust = ~wordSize * stackRequired; val loadEdiCode : int list = if is8Bit stackByteAdjust then [ rex{w=true,r=false,x=false,b=false}, opToInt LEAL, modrm (Based8, #1(getReg edi), 4), (* Need s-i-b byte for %esp *) sib (Scale1, 4 (* no index *), #1(getReg esp)) ] @ getBytes (1, stackByteAdjust) else [ rex{w=true,r=false,x=false,b=false}, opToInt LEAL, modrm (Based32, #1(getReg edi), 4), (* Need s-i-b byte for %esp *) sib (Scale1, 4 (* no index *), #1(getReg esp)) ] @ getBytes (4, stackByteAdjust); val testEdiCode : int list = testRegAndTrap (edi, MemRegStackOverflowCallEx) in loadEdiCode @ testEdiCode (* The effect of this sequence is to generate an overflow trap if sp < sl *) end else if callsAProc (* check for user interrupt *) then testRegAndTrap (esp, MemRegStackOverflowCall) else (* no stack check required *) []; (***************************************************************************** Functions now have up to 2 entry points: (1) Standard entry point (2) Self-call entry point - doesn't change %ecx Entry point 1 is always the first word of the actual code. Entry point 2 can be at various offsets (if it is needed at all), but that's OK because it is only used for calls within the procedure itself. *****************************************************************************) val nopCode : int list = let (* Add sufficient No-ops to round this to a full word. *) val len = length stackCheckCode mod wordSize in if len = 0 then [] else List.tabulate(wordSize - len, fn _ => opToInt NOP) end in val preludeCode = nopCode @ stackCheckCode; val wordsForPrelude = length preludeCode div wordSize (* +5 for code size, profile count, function name, register mask and constants count *) val segSize = (getAddr (!ic)) div wordSize + constsInConstArea + wordsForPrelude + 5; (* byte offset of L2 label relative to start of post-prelude code. *) val L2Addr = mkAddr (~ (length stackCheckCode)); end; (* local *) (* fix-up all the self-calls *) val U : unit = fixRecursiveCalls (cvec, L2Addr, selfCalls); val U : unit = fixRecursiveBranches (cvec, L2Addr, selfJumps); (* Now make the byte segment that we'll turn into the code segment *) val seg : cseg = csegMake segSize; val offset = wordsForPrelude; val _ = resultSeg := Set seg; (* Copy the code into the new segment. *) val _ = pcOffset := offset; val _ = csegCopySeg (codeVec, seg, getAddr (! ic), offset); (* insert prelude code into segment *) local val ptr = ref 0; (* Generate the prelude. *) fun putPrelude (b: int) : unit = let val a = !ptr in csegSet (seg, a, Word8.fromInt b); ptr := a + 1 end; fun putPreludeList [] = () | putPreludeList (w::ws) = (putPrelude w; putPreludeList ws); in val U : unit = putPreludeList preludeCode end; local val endOfCode (* words *) = (getAddr (! ic)) div wordSize + offset; in (* Byte offset of start of code. *) local val byteEndofcode = endOfCode * wordSize; val addr = mkAddr byteEndofcode; in val U : unit = setWordU (byteEndofcode, addr, seg) end; (* Put in the number of constants. This must go in before we actually put in any constants. *) local val addr = mkAddr ((endOfCode + 3 + constsInConstArea + 1) * wordSize); in val U : unit = setWordU(2 + constsInConstArea, addr, seg) end; (* Next the profile count. *) local val addr = mkAddr ((endOfCode + 1) * wordSize); in val U : unit = setWordU (0, addr, seg) end; (* Now we've filled in all the C integers; now we need to convert the segment into a proper code segment before it's safe to put in any ML values. SPF 13/2/97 *) val U : unit = csegConvertToCode seg; local (* why do we treat the empty string as a special case? SPF 15/7/94 *) (* This is so that profiling can print "". Note that a tagged zero *is* a legal string (it's "\000"). SPF 14/10/94 *) val nameWord : machineWord = if procName = "" then toMachineWord 0 else toMachineWord procName; in val _ = csegPutWord (seg, endOfCode + 2, nameWord); end; local (* Encode the register mask. This encoding must be the same as the one used for assembly code segments. *) fun encodeReg(r, n: short): short = let open Word infix << orb val reg = 0w1 << Word.fromInt (nReg r) in reg orb n end val regSet = List.foldl encodeReg 0w0 registerSet in val U : unit = csegPutWord (seg, endOfCode + 3, toMachineWord regSet); end; end; (* scope of endOfCode *) in let (* and then copy the objects from the constant list. *) fun putConst {const = WVal c, addrs, posn, ...} = ( (* Can put these in now. *) constLabels (cvec, addrs, c, posn); numOfConsts := ! numOfConsts - 1 ) | putConst {const = HVal(ref hv), addrs, posn, ...} = let (* on the PC, we don't add the extra 2 (we do on the Sparc) *) (* SPF 24/4/95 *) val handlerByteOffset = getAddr hv + offset * wordSize; (* The following comment applies to offsetAddr *) (* Special function to add to an address. This only works if the resulting value is in a code segment and is on a word + 2 byte boundary. *) val handlerAddr : handler = offsetAddr (csegAddr seg, toShort handlerByteOffset); in constLabels (cvec, addrs, toMachineWord handlerAddr, posn); numOfConsts := ! numOfConsts - 1 end (* forward-reference - fix up later when we compile the referenced code *) | putConst {const = CVal _, ...} = () val _ = List.app putConst constVec; (* Switch off "mutable" bit now if we have no forward or recursive references to fix-up *) val _ = if ! numOfConsts = 0 then csegLock seg else (); (* Do we need to make a closure, or just return the code? *) val addr : address = if noClosure then csegAddr seg else let val addr : address = alloc (short1, F_words, toMachineWord (csegAddr seg)); (* Logically unnecessary; however the RTS currently allocates everything as mutable because Dave's code assumed that things were done this way and I'm not completely sure that everything that needs a mutable allocation actually asks for it yet. SPF 19/2/97 *) val U : unit = lock addr; in addr end (* Now we know the address of this object we can fix up any forward references outstanding. This is put in here because there may be directly recursive references. *) val U : unit = fixOtherRefs (cvec, toMachineWord addr); val U : unit = if printAssemblyCode then (* print out the code *) ( printCode cvec seg ((getAddr endic) + offset * wordSize); printStream "Register set = ["; List.app (fn r => (printStream " "; regPrint r)) registerSet; printStream "]\n\n" ) else (); in addr end (* the result *) end (* copyCode *); (* ic function exported to gencode. Currently only used for backward jumps. *) fun ic (cvec as Code {exited, ic=ic', branchCheck, ...}) = ( (* Make sure any pending operations are done. *) doPending (cvec, 0); exited := false; (* We may be jumping here. *) branchCheck := !ic'; ! ic' (* After any pending operations. *) ); fun codeAddress (cvec: code) : address option = (* This is used to find the register set for a function which was originally a forward reference. If it has now been compiled we can get the code. *) case cvec of Code {resultSeg = ref (Set cseg), ...} => SOME(csegAddr cseg) | Code {resultSeg = ref Unset, ...} => (* We haven't compiled this yet: assume worst case. *) NONE fun traceContext (Code {procName, ic = ref ic, ...}) = (* Function name and code offset to help tracing. *) procName ^ ":" ^ Int.fmt StringCvt.HEX (getAddr ic) end (* struct *) end (* CODECONS *); polyml.5.2.1/mlsource/MLCompiler/CodeTree/BaseCodeTree.sml0000644000175000017500000004324611003075353022332 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited Modified David C. J. Matthews 2008 This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* Basic code-tree data structure. This was previously partly in GCODE.ML and partly in CODETREE.ML. *) structure BaseCodeTree: BaseCodeTreeSig = struct open Address datatype inlineStatus = NonInline | MaybeInline | SmallFunction | OnlyInline; datatype codetree = MatchFail (* Pattern-match failure *) | AltMatch of codetree * codetree(* Pattern-match alternative choices *) | Declar of declarForm (* Make a local declaration or push an argument *) | Newenv of codetree list (* Start a block *) | Constnt of machineWord (* Load a constant *) | Extract of loadForm (* Get a local variable, an argument or a closure value *) | Indirect of { (* Load a value from a heap record *) base: codetree, offset: int } | Eval of (* Evaluate a function with an argument list. *) { function: codetree, argList: codetree list, earlyEval: bool } | Lambda of lambdaForm (* Lambda expressions. *) | MutualDecs of codetree list (* Set of mutually recursive declarations. *) | Cond of codetree * codetree * codetree (* If-statement *) | Case of (* Case expressions *) { cases : (codetree * int list) list, test : codetree, default : codetree, min : int, max : int } | BeginLoop of codetree * codetree list(* Start of tail-recursive inline function. *) | Loop of codetree list (* Jump back to start of tail-recursive function. *) | Raise of codetree (* Raise an exception *) | Ldexc (* Load the exception (used at the start of a handler) *) | Handle of (* Exception handler *) { (* Exception handler. *) exp : codetree, taglist : codetree list, handler : codetree } | Recconstr of codetree list (* Records (tuples) *) | Container of int (* Create a container for a tuple on the stack. *) | SetContainer of (* Copy a tuple to a container. *) { container: codetree, tuple: codetree, size: int } | TupleFromContainer of codetree * int (* Make a tuple from the contents of a container. *) | Global of optVal (* Global value *) | CodeNil and optVal = (* Global values - Also used in the optimiser. *) JustTheVal of codetree | ValWithDecs of {general : codetree, decs : codetree list} | OptVal of { (* Expression to load this value - always a constant in global values. *) general : codetree, (* If it is not CodeNil it is the code which generated the general value - either an inline procedure, a type constructor or a tuple. *) special : codetree, (* Environment for the special value. *) environ : loadForm * int * int -> optVal, (* Declarations to precede the value - Always nil for global values. *) decs : codetree list, (* A reference which is used to detect recursive inline expansions. *) recCall: bool ref } withtype loadForm = { (* Load a value. *) addr : int, level: int, fpRel: bool, lastRef: bool } and declarForm = { (* Declare a value or push an argument. *) value: codetree, addr: int, references: int } and diadic = codetree * codetree and triadic = codetree * codetree * codetree and lambdaForm = { (* Lambda expressions. *) body : codetree, isInline : inlineStatus, name : string, closure : codetree list, numArgs : int, level : int, closureRefs : int, makeClosure : bool }; open PrettyPrinter val ioOp : int -> machineWord = RunCall.run_call1 RuntimeCalls.POLY_SYS_io_operation; fun stringOfWord w = if isShort w then Word.toString (toShort w) else if isIoAddress(toAddress w) then (* RTS call - print the number. *) let fun matchIo n = if n = 256 then raise Misc.InternalError "Unknown RTS entry" else if wordEq (w, ioOp n) then " RTS" ^ Int.toString n else matchIo (n+1) in matchIo 0 end else if isWords(toAddress w) andalso Word.toInt(Address.length(toAddress w)) >= 1 then (* If it's the closure of a function try to print that. *) let val firstWord = loadWord(toAddress w, toShort 0) val doCall: int*machineWord -> string = RunCall.run_call2 RuntimeCalls.POLY_SYS_process_env in if not (isShort firstWord) andalso isCode(toAddress firstWord) then " (" ^ doCall(105, firstWord) ^ ")" (* Get the function name. *) else "" end else ""; fun pretty (pt : codetree, pprint: prettyPrinter) : unit = let fun pList ([]: 'b list) (sep: string) (disp: 'b->unit) = () | pList [h] sep disp = disp h | pList (h::t) sep disp = ( ppBeginBlock pprint (0, false); disp h; ppBreak pprint (0, 0); ppAddString pprint sep; ppEndBlock pprint (); ppBreak pprint (1, 0); pList t sep disp ); fun printList start lst sep = ( ppBeginBlock pprint (1, true); ppAddString pprint (start ^ "("); pList lst sep (fn x => (pretty (x, pprint))); ppBreak pprint (0, 0); ppAddString pprint (")"); ppEndBlock pprint () ); fun printMonad name pt = ( ppBeginBlock pprint (1, true); ppAddString pprint (name^"("); pretty (pt, pprint); ppBreak pprint (0, 0); ppAddString pprint (")"); ppEndBlock pprint () ); fun printDiad name (f,s) = ( ppBeginBlock pprint (1, true); ppAddString pprint (name^"("); pretty (f, pprint); ppAddString pprint ", "; ppBreak pprint (0, 0); pretty (s, pprint); ppBreak pprint (0, 0); ppAddString pprint (")"); ppEndBlock pprint () ); fun printTriad name (f,s,t) = ( ppBeginBlock pprint (1, true); ppAddString pprint (name^"("); pretty(f, pprint); ppAddString pprint ", "; ppBreak pprint (0, 0); pretty(s, pprint); ppAddString pprint ", "; ppBreak pprint (0, 0); pretty (t, pprint); ppBreak pprint (0, 0); ppAddString pprint (")"); ppEndBlock pprint () ); in case pt of CodeNil => ppAddString pprint "NIL" | MatchFail => ppAddString pprint "MATCHFAIL" | AltMatch pair => printDiad "ALTMATCH" pair | Eval {function, argList, earlyEval} => ( ppBeginBlock pprint (3, false); pretty (function, pprint); ppBreak pprint (0, 0); if earlyEval then ( ppAddString pprint "{early}"; ppBreak pprint (0, 0) ) else (); printList "$" argList ","; ppEndBlock pprint () ) | Declar {value, addr, references} => ( ppBeginBlock pprint (1, false); ppAddString pprint (concat ["DECL #", Int.toString addr, "{", Int.toString references, " uses} ="]); ppBreak pprint (1, 0); pretty (value, pprint); ppEndBlock pprint () ) | Extract {addr, level, fpRel, lastRef} => let val last = if lastRef then ", last" else ""; val str : string = if not fpRel then concat ["CLOS(", Int.toString level, ",", Int.toString addr, last, ")"] else if addr < 0 then concat ["PARAM(", Int.toString level, ",", Int.toString (~ addr), last, ")"] else concat ["LOCAL(", Int.toString level, ",", Int.toString addr, last, ")"] in ppAddString pprint str end | Indirect {base, offset} => let val str = "INDIRECT(" ^ Int.toString offset ^ ", "; in ppAddString pprint str; pretty (base, pprint); ppAddString pprint ")" end | Lambda {body, isInline, name, closure, numArgs, level, closureRefs, makeClosure} => let val inl = case isInline of NonInline => "" | MaybeInline => "INLINE" | SmallFunction => "SMALL" | OnlyInline => "ONLYINLINE" in ppBeginBlock pprint (1, true); ppAddString pprint ("LAMBDA"^inl^"("); ppBreak pprint (1, 0); ppAddString pprint name; ppBreak pprint (1, 0); ppAddString pprint ( "CL=" ^ Bool.toString makeClosure); ppAddString pprint (" CR=" ^ Int.toString closureRefs); ppAddString pprint (" LEV=" ^ Int.toString level); ppAddString pprint (" ARGS=" ^ Int.toString numArgs); printList " CLOS=" closure ","; ppBreak pprint (1, 0); pretty (body, pprint); ppAddString pprint "){LAMBDA}"; ppEndBlock pprint () end | Constnt w => ppAddString pprint ("LIT" ^ stringOfWord w) | Cond triple => printTriad "IF" triple | Newenv ptl => printList "BLOCK" ptl ";" | BeginLoop(loopExp, args) => ( ppBeginBlock pprint (3, false); printList "BEGINLOOP" args ","; ppBreak pprint (0, 0); ppAddString pprint "("; ppBreak pprint (0, 0); pretty (loopExp, pprint); ppBreak pprint (0, 0); ppAddString pprint ")"; ppEndBlock pprint () ) | Loop ptl => printList "LOOP" ptl "," | Raise c => printMonad "RAISE" c | Handle {exp, taglist, handler} => ( ppBeginBlock pprint (3, false); ppAddString pprint "HANDLE("; pretty (exp, pprint); ppAddString pprint "WITH"; ppBreak pprint (1, 0); pretty (handler, pprint); ppAddString pprint ")"; ppEndBlock pprint () ) | Ldexc => ppAddString pprint "LDEXC" | Case {cases, test, default, min, max} => ( ppBeginBlock pprint (1, true); ppAddString pprint (concat ["CASE ", Int.toString min, "-", Int.toString max, "(" ]); pretty (test, pprint); ppAddString pprint ")"; ppBreak pprint (1, 0); ppAddString pprint "("; ppBreak pprint (1, 0); pList cases "," (fn (exp : codetree, labels : int list) => ( ppBeginBlock pprint (1, true); List.app (fn l => ( ppAddString pprint (Int.toString l ^ ":"); ppBreak pprint (1, 0) ) ) labels; pretty (exp, pprint); ppEndBlock pprint () ) ); case default of CodeNil => () | _ => ( ppBreak pprint (1, 0); ppBeginBlock pprint (1, false); ppAddString pprint "ELSE:"; ppBreak pprint (1, 0); pretty (default, pprint); ppEndBlock pprint () ); ppBreak pprint (1, 0); ppAddString pprint (") {"^"CASE"^"}"); ppEndBlock pprint () ) | MutualDecs ptl => printList "MUTUAL" ptl " AND " | Recconstr ptl => printList "RECCONSTR" ptl "," | Container size => ppAddString pprint ("CONTAINER " ^ Int.toString size) | SetContainer{container, tuple, size} => ( ppBeginBlock pprint (3, false); ppAddString pprint ("SETCONTAINER(" ^ Int.toString size ^ ", "); pretty (container, pprint); ppBreak pprint (0, 0); ppAddString pprint ","; ppBreak pprint (1, 0); pretty (tuple, pprint); ppBreak pprint (0, 0); ppAddString pprint ")"; ppEndBlock pprint () ) | TupleFromContainer (container, size) => ( ppBeginBlock pprint (3, false); ppAddString pprint ("TUPLECONTAINER(" ^ Int.toString size ^ ", "); ppBreak pprint (0, 0); pretty (container, pprint); ppBreak pprint (0, 0); ppAddString pprint ")"; ppEndBlock pprint () ) | Global glob => ( ppBeginBlock pprint (1, true); ppAddString pprint "GLOBAL "; prettyOptVal (glob, pprint); ppAddString pprint " (*GLOBAL*)"; ppEndBlock pprint () ) (* That list should be exhaustive! *) end (* pretty *) and prettyOptVal (ov : optVal, pprint : prettyPrinter) = ( ppAddString pprint "("; pretty (optGeneral ov, pprint); ppAddString pprint ", "; ppBreak pprint (1, 0); pretty (optSpecial ov, pprint); ppBreak pprint (1, 0); ppAddString pprint ")" ) and optGeneral (OptVal {general,...}) = general | optGeneral (ValWithDecs {general, ...}) = general | optGeneral (JustTheVal ct) = ct and optSpecial (OptVal {special,...}) = special | optSpecial _ = CodeNil (* Test whether a piece of code is "small". This is used to decide whether a function should be made inline. *) fun isSmall (pt, maxSize) = let fun sizeList [] = 0 | sizeList (c::cs) = size c + sizeList cs and sizeCaseList [] = 0 | sizeCaseList ((c,il)::cs) = size c + List.length il + sizeCaseList cs and sizeOptVal (OptVal {general,...}) = size general | sizeOptVal (ValWithDecs {general, ...}) = size general | sizeOptVal (JustTheVal ct) = size ct (* some very rough size estimates *) and size pt = case pt of CodeNil => 0 | MatchFail => 1 | AltMatch (m1, m2) => size m1 + size m2 + 1 | Declar {value, ...} => size value | Newenv cl => sizeList cl | Constnt w => if isShort w then 0 else 1 | Extract _ => 1 (* optimistic *) | Indirect {base,...} => size base + 1 | Lambda {body,numArgs,...} => size body + numArgs | Eval {function,argList,...} => size function + sizeList argList + 2 | MutualDecs decs => sizeList decs (*!maxInlineSize*) | Cond (i,t,e) => size i + size t + size e + 2 | BeginLoop (b, args) => size b + sizeList args | Loop args => sizeList args + 1 | Raise c => size c + 1 | Ldexc => 1 | Handle {exp,taglist,handler} => size exp + size handler + sizeList taglist + List.length taglist | Recconstr cl => sizeList cl + 2 (* optimistic *) | Container size => 1 (* optimistic *) | SetContainer{container, tuple = Recconstr cl, ...} => (* We can optimise this. *) sizeList cl + size container | SetContainer{container, tuple, size=len} => size container + size tuple + len | TupleFromContainer(container, len) => len + size container + 2 (* As with Recconstr *) | Global glob => sizeOptVal glob | Case {test,default,cases,...} => size test + size default + sizeCaseList cases ; in (* We previously treated functions which only contained Lambdas as always small. I've now taken that out because it caused the code to blow up if the Lambda turned out to be a large function (e.g. fun f x = fn y => ...BIGCODE...). There may be a case for lifting the inner lambda out much as we already do with fun declarations but this needs to be done in the front end. DCJM 14/3/02. *) size pt < maxSize end; end; polyml.5.2.1/mlsource/MLCompiler/CodeTree/BaseCodeTreeSig.sml0000644000175000017500000001125211003075353022765 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited Modified David C. J. Matthews 2008 This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* Signature for the basic codetree types and operations. *) signature BaseCodeTreeSig = sig type machineWord datatype inlineStatus = NonInline | MaybeInline | SmallFunction | OnlyInline; datatype codetree = MatchFail (* Pattern-match failure *) | AltMatch of codetree * codetree(* Pattern-match alternative choices *) | Declar of declarForm (* Make a local declaration or push an argument *) | Newenv of codetree list (* Start a block *) | Constnt of machineWord (* Load a constant *) | Extract of loadForm (* Get a local variable, an argument or a closure value *) | Indirect of { (* Load a value from a heap record *) base: codetree, offset: int } | Eval of (* Evaluate a function with an argument list. *) { function: codetree, argList: codetree list, earlyEval: bool } | Lambda of lambdaForm (* Lambda expressions. *) | MutualDecs of codetree list (* Set of mutually recursive declarations. *) | Cond of codetree * codetree * codetree (* If-statement *) | Case of (* Case expressions *) { cases : (codetree * int list) list, test : codetree, default : codetree, min : int, max : int } | BeginLoop of codetree * codetree list(* Start of tail-recursive inline function. *) | Loop of codetree list (* Jump back to start of tail-recursive function. *) | Raise of codetree (* Raise an exception *) | Ldexc (* Load the exception (used at the start of a handler) *) | Handle of (* Exception handler *) { (* Exception handler. *) exp : codetree, taglist : codetree list, handler : codetree } | Recconstr of codetree list (* Records (tuples) *) | Container of int (* Create a container for a tuple on the stack. *) | SetContainer of (* Copy a tuple to a container. *) { container: codetree, tuple: codetree, size: int } | TupleFromContainer of codetree * int (* Make a tuple from the contents of a container. *) | Global of optVal (* Global value *) | CodeNil and optVal = (* Global values - Also used in the optimiser. *) JustTheVal of codetree | ValWithDecs of {general : codetree, decs : codetree list} | OptVal of { (* Expression to load this value - always a constant in global values. *) general : codetree, (* If it is not CodeNil it is the code which generated the general value - either an inline procedure, a type constructor or a tuple. *) special : codetree, (* Environment for the special value. *) environ : loadForm * int * int -> optVal, (* Declarations to precede the value - Always nil for global values. *) decs : codetree list, (* A reference which is used to detect recursive inline expansions. *) recCall: bool ref } withtype loadForm = { (* Load a value. *) addr : int, level: int, fpRel: bool, lastRef: bool } and declarForm = { (* Declare a value or push an argument. *) value: codetree, addr: int, references: int } and diadic = codetree * codetree and triadic = codetree * codetree * codetree and lambdaForm = { (* Lambda expressions. *) body : codetree, isInline : inlineStatus, name : string, closure : codetree list, numArgs : int, level : int, closureRefs : int, makeClosure : bool }; type prettyPrinter val pretty : codetree * prettyPrinter -> unit val isSmall : codetree * int -> bool end; polyml.5.2.1/mlsource/MLCompiler/CodeTree/CODETREE.ML0000644000175000017500000052137511011064322020751 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* Title: Machine-independent Code and Optimisation. Author: Dave Matthews, Cambridge University Computer Laboratory Copyright Cambridge University 1985 *) (* Substantially modified. Changes copyright. David C.J. Matthews 2001. *) functor CODETREE ( (*****************************************************************************) (* GCODE *) (*****************************************************************************) structure GCODE : sig type machineWord type codetree val gencode: codetree * Universal.universal list -> unit -> machineWord; end (* GCODE *); (*****************************************************************************) (* DEBUG *) (*****************************************************************************) structure DEBUG : sig val codetreeTag: bool Universal.tag (* If true then print the original code. *) val codetreeAfterOptTag: bool Universal.tag (* If true then print the optimised code. *) val maxInlineSizeTag: int Universal.tag val compilerOutputTag: (string->unit) Universal.tag val getParameter : 'a Universal.tag -> Universal.universal list -> 'a end (* DEBUG *); (*****************************************************************************) (* PRETTYPRINTER *) (*****************************************************************************) structure PRETTYPRINTER : sig type prettyPrinter val ppAddString : prettyPrinter -> string -> unit val ppBeginBlock : prettyPrinter -> int * bool -> unit val ppEndBlock : prettyPrinter -> unit -> unit val ppBreak : prettyPrinter -> int * int -> unit val prettyPrint : int * (string -> unit) -> prettyPrinter; end; (*****************************************************************************) (* MISC *) (*****************************************************************************) structure MISC : sig exception InternalError of string; end; (* DCJM 8/8/00. Previously Address was a global but we aren't allowed to have sharing constraints with globals in ML97. We could use a "where type" constraint but then we couldn't bootstrap from ML90. *) structure ADDRESS : sig type machineWord; type short = Word.word; type address; val alloc: short * Word8.word * machineWord -> address; val call: address * machineWord -> machineWord; val length: address -> short; val isShort: 'a -> bool; val toShort: 'a -> short; val toMachineWord: 'a -> machineWord; val toAddress: machineWord -> address; val wordEq: machineWord * machineWord -> bool; val isWords : address -> bool; val isMutable: address -> bool; val assignWord: address * short * machineWord -> unit; val loadWord: address * short -> machineWord; val F_words: Word8.word; val F_mutable: Word8.word; val lock: address -> unit val isIoAddress : address -> bool end; structure STRUCTUREEQ: sig type machineWord val structureEq: machineWord * machineWord -> bool; end structure BASECODETREE: BaseCodeTreeSig (*****************************************************************************) (* CODETREE sharing constraints *) (*****************************************************************************) sharing type ADDRESS.machineWord = BASECODETREE.machineWord = STRUCTUREEQ.machineWord = GCODE.machineWord sharing type BASECODETREE.codetree = GCODE.codetree sharing type PRETTYPRINTER.prettyPrinter = BASECODETREE.prettyPrinter ) : (*****************************************************************************) (* CODETREE export signature *) (*****************************************************************************) sig type machineWord type codetree type prettyPrinter val isCodeNil: codetree -> bool; val CodeNil: codetree; (* Empty codetree NOT the code for "nil" *) val CodeTrue: codetree; (* code for "true" *) val CodeFalse: codetree; (* code for "false" *) val CodeZero: codetree; (* code for 0, nil etc. *) val MatchFail: codetree; (* pattern match has failed *) val mkAltMatch: codetree * codetree -> codetree; val mkRecLoad: int-> codetree; val mkLoad: int * int -> codetree; val mkConst: machineWord -> codetree; val mkDec: int * codetree -> codetree; val mkInd: int * codetree -> codetree; val mkProc: codetree * int * int * string -> codetree; val mkInlproc: codetree * int * int * string -> codetree; val mkMacroProc: codetree * int * int * string -> codetree; val mkIf: codetree * codetree * codetree -> codetree; val mkWhile: codetree * codetree -> codetree; val mkEnv: codetree list -> codetree; val mkStr: string -> codetree; val mkTuple: codetree list -> codetree; val mkMutualDecs: codetree list -> codetree; val mkRaise: codetree -> codetree; val mkNot: codetree -> codetree; val mkTestnull: codetree -> codetree; val mkTestnotnull: codetree -> codetree; val mkCor: codetree * codetree -> codetree; val mkCand: codetree * codetree -> codetree; val mkTestptreq: codetree * codetree -> codetree; val mkTestinteq: codetree * codetree -> codetree; val mkHandle: codetree * codetree list * codetree -> codetree; val mkEval: codetree * codetree list * bool -> codetree; val identityFunction: string -> codetree; val Ldexc: codetree; val mkContainer: int -> codetree val mkSetContainer: codetree * codetree * int -> codetree val mkTupleFromContainer: codetree * int -> codetree val multipleUses: codetree * (unit -> int) * int -> {load: int -> codetree, dec: codetree list}; val pretty: codetree * prettyPrinter -> unit; val evalue: codetree -> machineWord; val genCode: codetree * Universal.universal list -> (unit -> codetree); val structureEq: machineWord * machineWord -> bool; end (* CODETREE export signature *) = (*****************************************************************************) (* CODETREE functor body *) (*****************************************************************************) struct open GCODE; open ADDRESS; open StretchArray; open MISC; (* after ADDRESS, so we get MISC.length, not ADDRESS.length *) open RuntimeCalls; (* for POLY_SYS numbers and EXC_nil *) open BASECODETREE; open PRETTYPRINTER; val structureEq = STRUCTUREEQ.structureEq infix 9 sub; val isConstnt = fn (Constnt _) => true | _ => false; val isCodeNil = fn CodeNil => true | _ => false; (* Exported *) (*****************************************************************************) (* optVal functions *) (*****************************************************************************) (* Processing each expression results in a "optVal" value. This contains a "general" value which can be used anywhere and a "special" value which provides optimisations of inline procedures and tuples. "environ" is a procedure for mapping addresses in "special" if it is used and "decs" is any declarations needed by either "general" or "special". The reason for returning both "general" and "special" is so that we only create a tuple or a procedure once. In the case of a tuple "special" contains code to generate the tuple from its elements and is provided so that operations which select from the tuple can be optimised into loading the element. "General" will contain code to generate the tuple, or in the case of a declaration of a tuple, will contain a "load" instruction to get the value. *) fun errorEnv (lf: loadForm, i1: int, i2: int) : optVal = raise InternalError "error env"; fun optGeneral (OptVal {general,...}) = general | optGeneral (ValWithDecs {general, ...}) = general | optGeneral (JustTheVal ct) = ct; fun optSpecial (OptVal {special,...}) = special | optSpecial _ = CodeNil; fun optEnviron (OptVal {environ,...}) = environ | optEnviron _ = errorEnv; fun optDecs (OptVal {decs,...}) = decs | optDecs (ValWithDecs {decs, ...}) = decs | optDecs (JustTheVal pt) = []; fun optRec (OptVal {recCall,...}) = recCall | optRec _ = ref false; (* Generate a temporary. *) val simpleOptVal : codetree -> optVal = JustTheVal; fun optVal (ov as {general, special, environ, decs, recCall}) : optVal = if isCodeNil special then case decs of [] => JustTheVal general | _ => ValWithDecs {general = general, decs = decs} else OptVal ov; fun sizeOptVal (ov : optVal, size: codetree -> int) = size (optGeneral ov); (* minor HACKS *) type casePair = codetree * int list; val codegen = gencode; (* gets a value from the run-time system *) val ioOp : int -> machineWord = RunCall.run_call1 POLY_SYS_io_operation; fun apply f [] = () | apply f (h::t) = (f h; apply f t); val word0 = toMachineWord 0; val word1 = toMachineWord 1; val False = word0; val True = word1; (* since code generator relies on these representations, we may as well export them *) val mkConst: machineWord->codetree = Constnt; val CodeFalse = mkConst False; val CodeTrue = mkConst True; val CodeZero = mkConst word0; val F_mutable_words : Word8.word = Word8.orb (F_words, F_mutable); type evalForm = { (* Evaluate a function with an argument list. *) function: codetree, argList: codetree list, earlyEval: bool } and declarForm = { (* Declare a value or push an argument. *) value: codetree, addr: int, references: int } and indForm = { (* Indirect off a value. *) base: codetree, offset: int } and diadic = codetree * codetree and triadic = codetree * codetree * codetree and lambdaForm = { (* Lambda expressions. *) body : codetree, isInline : inlineStatus, name : string, closure : codetree list, numArgs : int, level : int, closureRefs : int, makeClosure : bool } and casePair = (* Expressions and corresponding list of labels. *) codetree * int list and caseForm = { (* Case expressions *) cases : (codetree * int list) list, test : codetree, default : codetree, min : int, max : int } and handleForm = { (* Exception handler. *) exp : codetree, taglist : codetree list, handler : codetree }; (*************************** end of copied code *****************************) fun mkAltMatch (m1, m2) = AltMatch (m1, m2); fun mkDecRef ct i1 i2 = Declar {value = ct, addr = i1, references = i2}; fun mkGenLoad (i1, i2, bl, lf) = Extract {addr = i1, level = i2, fpRel = bl, lastRef = lf}; (* Used for recursive functions - setting the "closure" flag is a real hack. We also have to adjust the level number by one because we don't really create an extra level. I'm not sure whether this adjustment should really be here or in VALUEOPS.ML - it's currently in the latter, because I think it's a parser-related hack! SPF 11/4/96 *) fun mkRecLoad level = Extract {level = level, addr = 0, fpRel = false, lastRef = false}; fun mkLoad (addr,level) = Extract {level = level, addr = addr, fpRel = true, lastRef = false}; fun mkClosLoad addr last = Extract {level = 0, addr = addr, fpRel = false, lastRef = last}; val mkEnv = Newenv; (* Wrap up multiple entries. Return a single item unless it is a declaration. *) fun wrapEnv (l as [Declar _]) = mkEnv l | wrapEnv (l as [MutualDecs _]) = mkEnv l | wrapEnv [singleton] = singleton | wrapEnv multiple = mkEnv multiple (* generates a declaration operation *) fun mkDec (laddr, res) = mkDecRef res laddr 0; (* lambda operation: returns a procedure *) fun mkProc (lval, level, args, name) = Lambda { body = lval, isInline = (*if isSmall lval then SmallFunction else *) NonInline, name = name, closure = [], numArgs = args, level = level, closureRefs = 0, makeClosure = false } (* inline lambda operation: returns an inline procedure *) fun mkInlproc (lval, level, args, name) = Lambda { body = lval, isInline = MaybeInline, name = name, closure = [], numArgs = args, level = level, closureRefs = 0, makeClosure = false }; fun mkMacroProc (lval, level, args, name) = Lambda { body = lval, isInline = OnlyInline, name = name, closure = [], numArgs = args, level = level, closureRefs = 0, makeClosure = false }; fun mkEval (ct, clist, bl) = Eval {function = ct, argList = clist, earlyEval = bl}; fun mkNot arg = mkEval (mkConst (ioOp POLY_SYS_not_bool), [arg], true); val testptreqFunction = mkConst (ioOp POLY_SYS_word_eq); val testptrneqFunction = mkConst (ioOp POLY_SYS_word_neq); fun mkTestptreq (xp1, xp2) = mkEval (testptreqFunction, [xp1,xp2], true); fun mkTestptrneq (xp1, xp2) = mkEval (testptrneqFunction, [xp1,xp2], true); fun mkTestnull xp1 = mkTestptreq (xp1, CodeZero); fun mkTestnotnull xp1 = mkTestptrneq (xp1, CodeZero); val testnullFunction = mkInlproc (mkTestnull (mkLoad (~1, 0)), 0, 1, ""); val mkIf = Cond ; fun mkWhile(b, e) = (* Generated as if b then (e; ) else (). *) BeginLoop(mkIf(b, mkEnv[e, Loop[]], CodeZero), []) (* We previously had conditional-or and conditional-and as separate instructions. I've taken them out since they can be implemented just as efficiently as a normal conditional. In addition they were interfering with the optimisation where the second expression contained the last reference to something. We needed to add a "kill entry" to the other branch but there wasn't another branch to add it to. DCJM 7/12/00. *) fun mkCor(xp1, xp2) = mkIf(xp1, CodeTrue, xp2); fun mkCand(xp1, xp2) = mkIf(xp1, xp2, CodeZero); (* N.B. int equality is SHORT integer equality *) fun mkTestinteq (xp1, xp2) = mkEval (mkConst (ioOp POLY_SYS_int_eq), [xp1,xp2], true); fun mkHandle (exp, taglist, handler) = Handle {exp = exp, taglist = taglist, handler = handler}; val mkRaise = Raise; val mkMutualDecs = MutualDecs; fun mkStr (strbuff:string) = mkConst (toMachineWord strbuff); val mkContainer = Container (* If we have multiple references to a piece of code we may have to save it in a temporary and then use it from there. If the code has side-effects we certainly must do that to ensure that the side-effects are done exactly once and in the correct order, however if the code is just a constant or a load we can reduce the amount of code we generate by simply returning the original code. *) fun multipleUses (code as Constnt _, nextAddress, level) = {load = (fn _ => code), dec = []} | multipleUses (code as Extract{addr, level=loadLevel, ...}, nextAddress, level) = let (* May have to adjust the level. *) fun loadFn lev = if lev = level then code else mkLoad (addr, loadLevel + (lev - level)) in {load = loadFn, dec = []} end | multipleUses (code, nextAddress, level) = let val addr = nextAddress(); fun loadFn lev = mkLoad (addr, lev - level); in {load = loadFn, dec = [mkDec (addr, code)]} end (* multipleUses *); fun identityFunction (name : string) : codetree = mkInlproc (mkLoad (~1, 0), 0, 1, name) (* Returns its argument. *); fun mkIndirect ct i = Indirect {base = ct, offset = i}; (* Set the container to the fields of the record. Try to push this down as far as possible. *) fun mkSetContainer(container, Cond(ifpt, thenpt, elsept), size) = Cond(ifpt, mkSetContainer(container, thenpt, size), mkSetContainer(container, elsept, size)) | mkSetContainer(container, Newenv entries, size) = let fun applyLast [] = raise List.Empty | applyLast [last] = [mkSetContainer(container, last, size)] | applyLast (hd::tl) = hd :: applyLast tl in Newenv(applyLast entries) end | mkSetContainer(container, r as Raise _, size) = r (* We may well have the situation where one branch of an "if" raises an exception. We can simply raise the exception on that branch. *) | mkSetContainer(container, tuple, size) = SetContainer{container = container, tuple = tuple, size = size } (* Create a tuple from a container. *) val mkTupleFromContainer = TupleFromContainer (* Makes a constant value from an expression which is known to be *) (* constant but may involve inline procedures, types etc. *) fun makeConstVal (cVal:codetree) = let fun makeVal (Constnt c) = c (* should just be a tuple *) (* Get a vector, copy the entries into it and return it as a constant. *) | makeVal (Recconstr []) = word0 (* should have been optimised already! *) | makeVal (Recconstr xp) = let val vec : address = alloc (toShort (List.length xp), F_mutable_words, word0); fun copyToVec [] locn = () | copyToVec (h :: t) locn = ( assignWord (vec, toShort locn, makeVal h); copyToVec t (locn + 1) ); in copyToVec xp 0; lock vec; toMachineWord vec end | makeVal _ = raise InternalError "makeVal - not constant or record" in mkConst (makeVal cVal) end; local fun allConsts [] = true | allConsts (Constnt _ :: t) = allConsts t | allConsts _ = false in fun mkTuple xp = let val tuple = Recconstr xp in if allConsts xp then (* Make it now. *) makeConstVal tuple else tuple end; end; (* Look for an entry in a tuple. Used in both the optimiser and in mkInd. *) fun findEntryInBlock (Recconstr recs) offset = if offset < List.length recs then List.nth(recs, offset) else (* This can arise if we're processing a branch of a case discriminating on a datatype which won't actually match at run-time. *) mkRaise (mkTuple [mkConst (toMachineWord EXC_Bind), mkStr "Bind", CodeZero]) | findEntryInBlock (Constnt b) offset = ( (* The ML compiler may generate loads from invalid addresses as a result of a val binding to a constant which has the wrong shape. e.g. val a :: b = nil It will always result in a Bind exception being generated before the invalid load, but we have to be careful that the optimiser does not fall over. *) if isShort b orelse not (ADDRESS.isWords (toAddress b)) (* DCJM's bugfix SPF 25/1/95 *) orelse ADDRESS.length (toAddress b) <= Word.fromInt offset then mkRaise (mkTuple [mkConst (toMachineWord EXC_Bind), mkStr "Bind", CodeZero]) else mkConst (loadWord (toAddress b, toShort offset)) ) | findEntryInBlock (Global glob) offset = (* Do the selection now - it makes the code-tree much more readable if *) (* we don't print the whole of the int type whenever we have int.+. *) ( case optSpecial glob of recc as Recconstr _ => ( case findEntryInBlock recc offset of (* Most entries in the list are load instructions, however if the entry we want is in a type which has been extended we will return an indirection. DCJM 28/11/99. That may not apply to ML. *) Extract (ext as {level, ...}) => Global ((optEnviron glob) (ext, 0, (* global *) level)) | Indirect{base=Extract (ext as {level, ...}), offset} => let (* Must be indirecting on a local value. Look it up and do the indirection recursively. *) val newBase = Global ((optEnviron glob) (ext, 0, (* global *) level)) in findEntryInBlock newBase offset end | selection => selection (* constants *) ) | _ => findEntryInBlock (optGeneral glob) offset ) | findEntryInBlock base offset = Indirect {base = base, offset = offset} (* anything else *) (* end findEntryInBlock *); (* indirect load operation *) fun mkInd (addr, base as Global _ ) = findEntryInBlock base addr | mkInd (addr, base as Constnt _) = findEntryInBlock base addr | mkInd (addr, base) = Indirect {base = base, offset = addr}; (* Get the value from the code. *) fun evalue (Constnt c) : machineWord = c | evalue (Global g) : machineWord = evalue(optGeneral g) | evalue _ = raise InternalError "evalue: Not a constant" (* Test for possible side effects. If an expression has no side-effect and its result is not used then we don't need to generate it. An expresssion is side-effect free if it does not call a procedure or involve an instruction which could raise an exception. Only the more common instructions are included. There may be some safe expressions which this procedure thinks are unsafe. *) (* Calls which could raise an exception must not be included. Most arbitrary precision operations, word operations and real operations don't raise exceptions (we don't get overflow exceptions) so are safe. *) (* The application of ioOp has been moved out of the isInList since it turned out to be a hot-spot. *) val safeRTSCalls = map ioOp [POLY_SYS_get_length, POLY_SYS_get_flags, (* POLY_SYS_alloc_store, - can raise Size *) POLY_SYS_teststreq, POLY_SYS_teststrneq, POLY_SYS_teststrgtr, POLY_SYS_teststrlss, POLY_SYS_teststrgeq, POLY_SYS_teststrleq, POLY_SYS_is_short, POLY_SYS_aplus, POLY_SYS_aminus, POLY_SYS_amul, POLY_SYS_aneg, POLY_SYS_xora, POLY_SYS_equala, POLY_SYS_ora, POLY_SYS_anda, POLY_SYS_Real_str, POLY_SYS_Real_geq, POLY_SYS_Real_leq, POLY_SYS_Real_gtr, POLY_SYS_Real_lss, POLY_SYS_Real_eq, POLY_SYS_Real_neq, POLY_SYS_Add_real, POLY_SYS_Sub_real, POLY_SYS_Mul_real, POLY_SYS_Div_real, POLY_SYS_Neg_real, POLY_SYS_sqrt_real, POLY_SYS_sin_real, POLY_SYS_cos_real, POLY_SYS_arctan_real, POLY_SYS_exp_real, POLY_SYS_ln_real, POLY_SYS_io_operation, POLY_SYS_shift_right_arith_word, POLY_SYS_is_big_endian, POLY_SYS_bytes_per_word, POLY_SYS_shift_right_word, POLY_SYS_word_neq, POLY_SYS_not_bool, POLY_SYS_string_length, POLY_SYS_int_eq, POLY_SYS_int_neq, POLY_SYS_int_geq, POLY_SYS_int_leq, POLY_SYS_int_gtr, POLY_SYS_int_lss, POLY_SYS_mul_word, POLY_SYS_plus_word, POLY_SYS_minus_word, POLY_SYS_or_word, POLY_SYS_and_word, POLY_SYS_xor_word, POLY_SYS_shift_left_word, POLY_SYS_word_geq, POLY_SYS_word_leq, POLY_SYS_word_gtr, POLY_SYS_word_lss, POLY_SYS_word_eq, POLY_SYS_load_byte, POLY_SYS_load_word, POLY_SYS_get_first_long_word] val divisionOperations = map ioOp [POLY_SYS_adiv, POLY_SYS_amod, POLY_SYS_div_word, POLY_SYS_mod_word] (* Note: This simply returns true or false. For complex expressions, such as an RTS call whose argument has a side-effect, we could reduce the code by extracting the sub-expressions with side-effects and returning just those. *) fun sideEffectFree CodeNil = true | sideEffectFree (Lambda _) = true | sideEffectFree (Constnt _) = true | sideEffectFree (Extract _) = true | sideEffectFree (Declar{value, ...}) = sideEffectFree value | sideEffectFree (Cond(i, t, e)) = sideEffectFree i andalso sideEffectFree t andalso sideEffectFree e | sideEffectFree (Newenv decs) = testList decs | sideEffectFree (Handle { exp, taglist, handler }) = sideEffectFree exp andalso testList taglist andalso sideEffectFree handler | sideEffectFree (Recconstr recs) = testList recs | sideEffectFree (Indirect{base, ...}) = sideEffectFree base | sideEffectFree (MutualDecs decs) = testList decs (* An RTS call, which may actually be code which is inlined by the code-generator, may be side-effect free. This can occur if we have, for example, "if exp1 orelse exp2" where exp2 can be reduced to "true", typically because it's inside an inline function and some of the arguments to the function are constants. This then gets converted to (exp1; true) and we can eliminate exp1 if it is simply a comparison. *) | sideEffectFree (Eval{function=Constnt w, argList, ...}) = isIoAddress(toAddress w) andalso sideEffectFreeRTSCall(w, argList) andalso testList argList | sideEffectFree(Container _) = true (* But since SetContainer has a side-effect we'll always create the container even if it isn't used. *) | sideEffectFree(TupleFromContainer(c, _)) = sideEffectFree c | sideEffectFree _ = false (* Rest are unsafe (or too rare to be worth checking) *) and testList [] = true | testList (h :: t) = sideEffectFree h andalso testList t and sideEffectFreeRTSCall(function: machineWord, args: codetree list): bool = let fun isInList(ioCall, sofar) = sofar orelse wordEq (function, ioCall) in List.foldl isInList false safeRTSCalls orelse (* Division operations are safe if we know that the second argument is not zero. If it's long it can't be zero and we can't have long arguments for the word operations. *) (List.foldl isInList false divisionOperations andalso (case args of [_, Constnt c] => not (isShort c) orelse toShort c <> 0w0 | _ => false) ) end; (************************************************************************) (* earlyRtsCall *) (************************************************************************) (* Tests whether an RTS call in which all the arguments are constants can be evaluated immediately. Normally this will be clear from the RTS call itself but in a few cases we need to look at the arguments. It's quite safe to evaluate a function which results in an exception. It isn't safe to evaluate a function which might have a side-effect. *) fun earlyRtsCall(function: machineWord, args: codetree list): bool = let val safeForImmutable = [POLY_SYS_get_flags, POLY_SYS_load_byte, POLY_SYS_load_word] val safeCalls = [POLY_SYS_get_length, POLY_SYS_teststreq, POLY_SYS_teststrneq, POLY_SYS_teststrgtr, POLY_SYS_teststrlss, POLY_SYS_teststrgeq, POLY_SYS_teststrleq, POLY_SYS_is_short, POLY_SYS_aplus, POLY_SYS_aminus, POLY_SYS_amul, POLY_SYS_adiv, POLY_SYS_amod, POLY_SYS_aneg, POLY_SYS_xora, POLY_SYS_equala, POLY_SYS_ora, POLY_SYS_anda, POLY_SYS_Real_str, POLY_SYS_Real_geq, POLY_SYS_Real_leq, POLY_SYS_Real_gtr, POLY_SYS_Real_lss, POLY_SYS_Real_eq, POLY_SYS_Real_neq, POLY_SYS_Add_real, POLY_SYS_Sub_real, POLY_SYS_Mul_real, POLY_SYS_Div_real, POLY_SYS_Neg_real, POLY_SYS_conv_real, POLY_SYS_real_to_int, POLY_SYS_int_to_real, POLY_SYS_sqrt_real, POLY_SYS_sin_real, POLY_SYS_cos_real, POLY_SYS_arctan_real, POLY_SYS_exp_real, POLY_SYS_ln_real, POLY_SYS_io_operation, POLY_SYS_shift_right_arith_word, POLY_SYS_is_big_endian, POLY_SYS_bytes_per_word, POLY_SYS_shift_right_word, POLY_SYS_word_neq, POLY_SYS_not_bool, POLY_SYS_string_length, POLY_SYS_int_eq, POLY_SYS_int_neq, POLY_SYS_int_geq, POLY_SYS_int_leq, POLY_SYS_int_gtr, POLY_SYS_int_lss, POLY_SYS_mul_word, POLY_SYS_plus_word, POLY_SYS_minus_word, POLY_SYS_div_word, POLY_SYS_or_word, POLY_SYS_and_word, POLY_SYS_xor_word, POLY_SYS_shift_left_word, POLY_SYS_mod_word, POLY_SYS_word_geq, POLY_SYS_word_leq, POLY_SYS_word_gtr, POLY_SYS_word_lss, POLY_SYS_word_eq, POLY_SYS_get_first_long_word] fun isInList(ioCall, sofar) = sofar orelse wordEq (function, ioOp ioCall) fun isImmutable (Constnt w, sofar) = sofar andalso (isShort w orelse not(isMutable(toAddress w))) | isImmutable _ = raise InternalError "isImmutable: arg not constant" in if List.foldl isInList false safeCalls then true else if List.foldl isInList false safeForImmutable then (* These are safe if the first argument is immutable. If it's mutable we might find that the value has changed when we come to run the program. *) List.foldl isImmutable true args else false end (************************************************************************) (* evaluate *) (************************************************************************) (* Evaluates expressions by code-generating and running them. *) (* "resultCode" is a copied code expression. The result is either *) (* a constant or an exception. *) fun evaluate (resultCode as Constnt _) codegen = (* May already have been reduced to a constant. *) resultCode | evaluate (resultCode as Eval { function=evalFunction, argList, ...}) codegen = (* It's a function call - generate a call. This should only be as a result of "early" evaluation when all the arguments are constants or inline procedures. *) ( case evaluate evalFunction codegen of function as Raise _ => (* Could be an exception. *) function | function => let (* Evaluate each argument. *) (* NB This version of loadArgs is DIFFERENT from the old Poly version. The Poly version stores the arguments in reverse order, then uses "callcode" (run-time call POLY_SYS_callcode = 16) to apply the function. The ML version stores the parameters in the usual order, then uses "callcode_tupled" (run-time call POLY_SYS_callcode_tupled = 204) to apply the function. [The other difference is that "callcode" expects its two arguments in registers (Poly calling convention) but "callcode_tupled" expects to receive an ML pair (ML calling convention).] These interface differences are actually implicit in the fact that we use Address.call rather than address$call. SPF 8/7/94 *) val funcAddress = case function of Constnt addr => if isShort addr then raise InternalError "Code address is not an address" else toAddress addr | _ => raise InternalError "Code address is not a constant"; (* Finished loading the args; call the function. This may raise *) (* an exception, in which case we just return the original code *) (* rather than trying to sort out the exception packet. *) (* We would have a problem if the code we were executing could *) (* raise Interrupt ("is it the user, or is it the code?") but *) (* this isn't a problem because we never execute an explicit *) (* "raise" expression and none of the built-in functions can *) (* raise Interrupt. *) fun callFunction (argTuple:machineWord) = mkConst (call (funcAddress, argTuple)) handle SML90.Interrupt => raise SML90.Interrupt (* Must not handle this *) | _ => resultCode fun loadArgs (argVec : address) ([]:codetree list) locn = ( lock argVec; callFunction (toMachineWord argVec) ) | loadArgs (argVec : address) (h :: t) locn = ( case evaluate h codegen of arg as Raise _ => arg (* if argument is a "raise" expression, so is final result *) | Constnt cv => ( assignWord (argVec, toShort locn, cv); loadArgs argVec t (locn + 1) ) | _ => raise InternalError "Result of evaluate is not a constant" ) in case argList of [] => callFunction word0 (* empty tuple - don't allocate *) | argList => let val argVec = alloc (toShort (List.length argList), F_mutable_words, word0); in loadArgs argVec argList 0 end end ) | evaluate resultCode codegen = (* Compile the expression, evaluate it, and catch any exceptions. *) let val compiledCode = codegen resultCode; in mkConst (compiledCode ()) handle SML90.Interrupt => raise SML90.Interrupt (* Must not handle this *) | _ => resultCode end (* evaluate *); (************************************************************************) (* preCode *) (************************************************************************) (* This phase generates closures, decides if a procedure can be called *) (* with a static link, and calculates use-counts for declarations. *) (************************************************************************ The main point of this phase is to change the Loads to be closure-relative. At the start of the phase, they are mostly of the form: Extract {level = n, addr = m, fpRel = true} (m <> 0) which means: go out n (>= 0) levels of lambda binding, then get either (1) the m'th local (m > 0) (2) the ~m'th most recent parameter (m < 0) with a few of the form: Extract {level = n, addr = 0, fpRel = false} which means: load the n'th enclosing procedure (n = 0 means the current procedure). At the end of the phase, we have three possible forms: Extract {level = 0, addr = m, fpRel = true} (m <> 0) Extract {level = 0, addr = 0, fpRel = false} which are restricted forms of the above, and Extract {level = 0, addr = k, fpRel = false} which means extract the k'th (k > 0) element of the procedure's closure. The phase also constructs code to load the appropriate value into the procedure's closure. In addition to this, we want to work out when a procedure can be virtual i.e. when we can call it via a static link. We can do this if the procedure is never passed as a parameter, returned as a result or used in the closure of a non static-link procedure. The process starts by being optimistic, then marks each item as needing a closure when a "difficult" use is encountered. SPF 19/5/95 *************************************************************************) (* This previously used a use-counting mechanism to allow the code-generator to decide when a value, particularly one in a register, is no longer required. That the the disadvantage that it took no account of control flow so that in a function such as fun f (a, b) = if a then g a + 1 else b b was marked as in use in the then-part and saved across the call to g even though it is not actually required. This has been changed to add information about when the last reference to a variable occurs in any particular flow of control. Extra "kill" references are added to alternative flow of control, so for, example the above function would be rewritten as something like fun f (a, b) = if a then (b; g (a) + 1) else (a; b) DCJM 2000. *) fun preCode (codegen, pt) = let val initTrans = 5; (* Initial size of arrays. *) (* preCode.copyCode *) fun copyCode (pt, previous, argUses, closureUses) = let (* Tables for local declarations. "localUses" is the use count, and "closuresForLocals" a flag indicating that if the declaration is a procedure a closure must be made for it. *) val localUses = stretchArray (initTrans, false); val closuresForLocals = stretchArray (initTrans, false); (* used to indicate whether a local declaration is really a constant, so that we can in-line it. SPF 16/5/95 *) val localConsts = stretchArray (initTrans, NONE); abstype usageSet = UsageSet of {locals: int list ref, args: int list ref, clos: bool ref} with (* Used to give us a "kill set" for an expression. In the case of parallel flows of control (e.g. then- and else-parts of an if-then-else) we can explicitly kill variables if they appear in the kill set for one branch but not in another. e.g. in if x then y else z assuming that x, y, z are not used in subsequent expressions we can kill z in the then-branch and y in the else-branch. The advantage of this is that we don't need to save variables if they are never used. *) fun saveUsages() = let fun tabulate(size, vec) = let fun tabul n l = if n = size then l else if StretchArray.sub(vec, n) then tabul (n+1) (n::l) else tabul (n+1) l in tabul 0 [] end val localLength = StretchArray.length localUses and argLength = StretchArray.length argUses val localSaved = tabulate(localLength, localUses) and argSaved = tabulate(argLength, argUses) in UsageSet{locals=ref localSaved, args=ref argSaved, clos=ref(!closureUses)} end (* Restore the table to the saved values. *) fun setToSaved(UsageSet{locals=ref locals, args=ref args, clos}): unit = let fun copyArray i f t = if i < 0 (* Put in a check here temporarily. *) then (case f of [] => () | _ => raise InternalError "setToSaved: not empty") else case f of [] => ( StretchArray.update(t, i, false); copyArray (i-1) [] t ) | head :: tail => if head = i then ( StretchArray.update(t, i, true); copyArray (i-1) tail t ) else ( StretchArray.update(t, i, false); copyArray (i-1) f t ) in copyArray (StretchArray.length argUses -1) args argUses; copyArray (StretchArray.length localUses -1) locals localUses; closureUses := !clos end; (* Similar to setToSaved except that it sets the current set to the union of the current set and the saved set. *) fun addFromSaved(UsageSet{locals=ref locals, args=ref args, clos}): unit = let fun addArray [] t = () | addArray (head::tail) t = ( StretchArray.update(t, head, true); addArray tail t ) in addArray args argUses; addArray locals localUses; if !clos then closureUses := true else () end; fun inSet(UsageSet{locals=ref locals, args=ref args, clos}, addr, level) = if level > 0 then !clos else if addr < 0 then (* Argument *) List.exists(fn n => n = ~addr) args else (* Local *) List.exists(fn n => n = addr) locals; fun removeItem(UsageSet{locals, args, clos}, addr, level) = if level > 0 then clos := false else if addr < 0 then args := List.filter (fn n => n <> ~addr) (!args) else locals := List.filter (fn n => n <> addr) (!locals) (* Differences of two sets, used as kill entries. The differences are returned as Extract codetree entries. *) fun computeKillSets( thenUsage as UsageSet{locals=ref thenLoc, args=ref thenArgs, clos=thenClos}, elseUsage as UsageSet{locals=ref elseLoc, args=ref elseArgs, clos=elseClos}) = let fun killSets f [] [] inThenOnly inElseOnly = (inThenOnly, inElseOnly) | killSets f [] (inElseH::inElseT) inThenOnly inElseOnly = killSets f [] inElseT inThenOnly (mkGenLoad(f inElseH, 0, true, true) :: inElseOnly) | killSets f (inThenH::inThenT) [] inThenOnly inElseOnly = killSets f inThenT [] (mkGenLoad(f inThenH, 0, true, true) ::inThenOnly) inElseOnly | killSets f (inThen as inThenH::inThenT) (inElse as inElseH::inElseT) inThenOnly inElseOnly = if inThenH = inElseH then (* In both sets *) killSets f inThenT inElseT inThenOnly inElseOnly else if inThenH < inElseH then (* Only in Else part. *) killSets f inThen inElseT inThenOnly (mkGenLoad(f inElseH, 0, true, true) :: inElseOnly) else killSets f inThenT inElse (mkGenLoad(f inThenH, 0, true, true) ::inThenOnly) inElseOnly val (argThen, argElse) = killSets (op ~) thenArgs elseArgs [] [] val (localThen, localElse) = killSets (fn x=>x) thenLoc elseLoc argThen argElse val (closThen, closElse) = if !thenClos = !elseClos then (localThen, localElse) else if !thenClos then (mkClosLoad 0 true :: localThen, localElse) else (localThen, mkClosLoad 0 true :: localElse) in (closThen, closElse) end; end; (* returns the translated node *) fun locaddr (ptr as { addr=laddr, level=lev, ...}: loadForm) (closure : bool) : codetree = if lev <> 0 orelse laddr = 0 then (* non-local *) previous (ptr, lev, closure) else if laddr < 0 then let (* parameters *) val argNo = ~ laddr; val wasInUse = argUses sub argNo; in (* Mark the argument as used. *) update (argUses, argNo, true); mkGenLoad (laddr, 0, true, not wasInUse) end (* isOnstack *) else case (localConsts sub laddr) of (* SPF 16/5/95 *) SOME c => c (* just return the constant *) | NONE => let (* Mark as used and set closure flag if necessary. *) val wasInUse = localUses sub laddr in if closure then update (closuresForLocals, laddr, true) else (); update (localUses, laddr, true); mkGenLoad (laddr, 0, true, not wasInUse) end (* locaddr *); (* Map f onto a list tail first. N.B. It doesn't reverse the list. Generally used to map "insert" over a list where we need to ensure that last references to variables are detected correctly. *) fun revmap f [] = [] | revmap f (a::b) = let val rest = revmap f b in f a :: rest end (* preCode.copyCode.insert *) fun insert (pt:codetree) : codetree = let (* If "makeClosure" is true the procedure will need a full closure. *) (* It may need a full closure even if makeClosure is false if it *) (* involves a recursive reference which will need a closure. *) (* preCode.copyCode.insert.copyLambda *) fun copyLambda ({body=lambdaBody, level=nesting, numArgs, isInline, name=lambdaName, ...}: lambdaForm) makeClosure = let val newGrefs = ref []; (* non-local references *) val newNorefs = ref 0; (* number of non-local refs *) val refsToClosure = ref false; (* Number of references to the closure. *) (* A new table for the new procedure. *) (* preCode.copyCode.insert.copyLambda.prev *) fun prev (ptr as { addr, fpRel, ...} : loadForm, lev : int, closure: bool) : codetree = let (* Returns the closure address of the non-local *) (* preCode.copyCode.insert.copyLambda.prev.makeClosureEntry *) fun makeClosureEntry [] _ wasRefed = (* not found - construct new entry *) let val U = newGrefs := mkGenLoad (addr, lev - 1, fpRel, false) :: !newGrefs; val newAddr = !newNorefs + 1; in newNorefs := newAddr; (* increment count *) mkClosLoad newAddr (not wasRefed) end | makeClosureEntry (Extract{addr=loadAddr, level=loadLevel, fpRel=loadFpRel, ...} :: t) newAddr wasRefed = if loadAddr = addr andalso loadLevel = lev - 1 andalso loadFpRel = fpRel then mkClosLoad newAddr (not wasRefed) else makeClosureEntry t (newAddr - 1) wasRefed | makeClosureEntry (_ ::_) newAddr wasRefed = raise InternalError "makeClosureEntry: closure is not Extract"; in (* If we use a procedure on another level in a way that will require it to have a real closure we must make one for it. (i.e. we must set the "closure" flag.) This is necessary because we may, for example, pass an outer procedure as a parameter from within an inner procedure. The inner procedure may not itself need a closure so the non-local references it makes will not be forced to have closures, but the outer procedure will need one. *) if lev = 0 (* Reference to the closure itself. *) then let val U : unit = if addr <> 0 orelse fpRel then raise InternalError "prev: badly-formed load" else (); val U : unit = if closure then makeClosure := true else (); val wasRefed = ! refsToClosure in refsToClosure := true; mkClosLoad 0 (not wasRefed) end else if lev = 1 andalso addr > 0 then let (* local at this level *) val U : unit = if not fpRel then raise InternalError "prev: badly-formed load" else (); in case localConsts sub addr of SOME c => c (* propagate constant, rather than using closure *) | NONE => let val U : unit = if closure then update (closuresForLocals, addr, true) else (); val wasRefed = ! refsToClosure in refsToClosure := true; makeClosureEntry (!newGrefs) (!newNorefs) wasRefed end end else if lev = 1 andalso addr < 0 then let (* parameter at this level *) val U : unit = if not fpRel then raise InternalError "prev: badly-formed load" else (); val wasRefed = ! refsToClosure in refsToClosure := true; makeClosureEntry (!newGrefs) (!newNorefs) wasRefed end else let (* lev > 1 orelse (lev = 1 andalso addr = 0) *) (* Discard the result, unless it's a constant. We fix up the old (fp-relative) address in the closure list on the second pass. Why not now? That would make it harder to set the makeClosure flag for the closure lists of mutually-recursive definitions. But doesn't doing it this way risks making the refsToClosure count too high? SPF 19/5/95 *) val outerLoad : codetree = previous (ptr, lev - 1, closure) in case outerLoad of Constnt _ => outerLoad | _ => let val wasRefed = ! refsToClosure in refsToClosure := true; makeClosureEntry (!newGrefs) (!newNorefs) wasRefed end end end (* prev *); (* This could be a fixed array rather than stretchArray. The size is one more than the number of arguments because the arguments are numbered from ~1 .. ~n and we use the entries as ~arg. *) val argUses = stretchArray (numArgs+1, false); (* process the body *) val bodyCode = copyCode (lambdaBody, prev, argUses, refsToClosure); (* Add kill entries for unused arguments. Typically a function taking a unit argument will not use it. *) fun addKills n = if n > numArgs then nil else if not (StretchArray.sub(argUses, n)) then mkGenLoad(~n, 0, true, true) :: addKills (n+1) else addKills (n+1) val insertedCode = (* Wrap the lot up if necessary. *) case addKills 1 of nil => bodyCode | kills => Newenv(kills @ [bodyCode]) in (* body of preCode.copyCode.insert.copyLambda *) if null (!newGrefs) (* no external references *) then let (* Since we are code-generating the procedure before we have done a full analysis of any mutually-recursive functions, we have to conservatively assume that it will require a closure, even if all the uses of the procedure within its body are kosher. SPF 20/5/95. We now want recursive calls to be code-generated using the saved closure register, rather than by loading the address of the closure from the constants vector. This means that we can no longer set closureRefs to 0, since we will actually be *using* the closure. SPF 20/5/95 *) val copiedProc = Lambda { body = insertedCode, isInline = isInline, name = lambdaName, closure = [], numArgs = numArgs, level = nesting, closureRefs = if !refsToClosure then 1 else 0 (* was set to 0 *), makeClosure = true }; in (* Code generate it now so we get a constant. *) evaluate copiedProc codegen end else (* External references present. The closure will be copied later with copyProcClosure. *) Lambda { body = insertedCode, isInline = isInline, name = lambdaName, closure = !newGrefs, numArgs = numArgs, level = nesting, closureRefs = if !refsToClosure then 1 else 0, makeClosure = false } end (* copyLambda *); (* Copy the closure of a procedure which has previously been processed by copyLambda. *) (* preCode.copyCode.insert.copyProcClosure *) fun copyProcClosure (Lambda{ body, isInline, name, numArgs, level, closureRefs, closure, ...}) makeClosure = let (* process the non-locals in this procedure *) (* If a closure is needed then any procedures referred to from the closure also need closures.*) fun makeLoads (Extract ext) = locaddr ext makeClosure | makeLoads _ = raise InternalError "makeLoads - not an Extract" val copyRefs = rev (map makeLoads closure); in Lambda { body = body, isInline = isInline, name = name, closure = copyRefs, numArgs = numArgs, level = level, closureRefs = closureRefs, makeClosure = makeClosure } end | copyProcClosure pt makeClosure = pt (* may now be a constant *) (* end copyProcClosure *); in (* body of preCode.copyCode.insert *) case pt of (pt as MatchFail) => pt : codetree | AltMatch(x, y) => let val insY = insert y val insX = insert x in AltMatch (insX, insY) : codetree end | CodeNil => CodeNil | Eval { function, argList, ...} => let (* Process the arguments first. *) val newargs = revmap insert argList val func = case function of Extract ext => locaddr ext (* closure = *) false | first => insert first in (* If we are calling a procedure which has been declared this does not require it to have a closure. Any other use of the procedure would. *) mkEval (func, newargs, false) end : codetree | Extract ext => (* Load the value bound to an identifier. The closure flag is set to true since the only cases where a closure is not needed, eval and load-andStore, are handled separately. *) locaddr ext (* closure = *) true : codetree | Indirect {base, offset} => Indirect {base = insert base, offset = offset} | pt as Constnt _ => pt : codetree (* Constants can be returned untouched. *) | BeginLoop(body, argList) => (* Start of tail-recursive inline function. *) let (* Make entries in the tables for the arguments. I'm not sure if this is essential. *) fun declareArg(Declar{addr=caddr, ...}) = ( update (localUses, caddr, false); update (closuresForLocals, caddr, false); update (localConsts, caddr, NONE) ) | declareArg _ = raise InternalError "declareArg: not a declaration" val _ = List.app declareArg argList (* Process the body. *) val insBody = insert body (* Then the initial argument values. *) fun copyDec(Declar{addr, value, ...}) = ( (* Reset the uses for this entry since it's local. *) update (localUses, addr, false); mkDecRef (insert value) addr 1 ) | copyDec _ = raise InternalError "copyDec: not a declaration" val newargs = revmap copyDec argList (* TODO: Perhaps we should modify this so that any "last references" we find in the loop body are moved out to beyond the loop. *) in BeginLoop(insBody, newargs) end | Loop argList => (* Jump back to start of tail-recursive function. *) Loop(revmap insert argList) | Raise x => Raise (insert x) : codetree (* See if we can use a case-instruction. Arguably this belongs in the optimiser but it is only really possible when we have removed redundant declarations. *) | Cond (condTest, condThen, condElse) => copyCond (condTest, condThen, condElse) | Newenv ptElist => let (* Process the body. Recurses down the list of declarations and expressions processing each, and then reconstructs the list on the way back. *) (* body of preCode.copyCode.insert(isNewenv).copyDeclarations *) fun copyDeclarations ([]: codetree list) : codetree list = [] | copyDeclarations ((Declar{addr=caddr, value = pt, ...}) :: vs) : codetree list = let (* Set the table entries. *) (* DCJM 1/12/99. I think the reason for this is in case we have reused the address in a different block. *) val U = update (localUses, caddr, false); (* needed? *) val U = update (closuresForLocals, caddr, false); val U : unit = case pt of Constnt _ => update (localConsts, caddr, SOME pt) | _ => update (localConsts, caddr, NONE); (* needed? *) (* This must be done first, even for non-lambdas - why? *) (* The first declarative might be a set of mutual declarations, and we have to copy all their uses before we can successfully compile them because we need to know whether they will require closures. SPF 13/5/95 *) val rest = copyDeclarations vs; val wasUsed = localUses sub caddr; in (* It is never used and it has no side-effects so we can ignore it. *) if not wasUsed andalso sideEffectFree pt then rest else let val dec = case pt of Lambda lam => let val closure = ref (closuresForLocals sub caddr); val copiedLambda = copyLambda lam closure; in (* Note: copyLambda may have set closure *) copyProcClosure copiedLambda (! (closure)) end | _ => insert pt in (* Set the use count back to free otherwise this local declaration would become part of the kill set for the surrounding expression. *) update (localUses, caddr, false); mkDecRef dec caddr (if wasUsed then 1 else 0) :: rest end end (* copyDeclarations.isDeclar *) | copyDeclarations (MutualDecs mutualDecs :: vs) : codetree list = let (* Mutually recursive declarations. Any of the declarations may refer to any of the others. This causes several problems in working out the use-counts and whether the procedures (they should be procedures) need closures. A procedure will need a closure if any reference would require one (i.e. does anything other than call it). The reference may be from one of the other mutually recursive declarations and may be because that procedure requires a full closure. This means that once we have dealt with any references in the rest of the containing block we have to repeatedly scan the list of declarations removing those which need closures until we are left with those that do not. The use-counts can only be obtained when all the non-local lists have been copied. *) (* First go down the list making a declaration for each entry. This makes sure there is a table entry for all the declarations. *) fun applyFn (Declar{addr=caddr, value=dv, ...}) = ( (* SPF 16/5/95 *) case dv of Constnt _ => update (localConsts, caddr, SOME dv) | _ => (); update (localUses, caddr, false); update (closuresForLocals, caddr, false) ) | applyFn _ = raise InternalError "applyFn: not a Declar" val U = apply applyFn mutualDecs; (* Process the rest of the block. Identifies all other references to these declarations. *) val restOfBlock = copyDeclarations vs; (* We now want to find out which of the declarations require closures. First we copy all the declarations, except that we don't copy the non-local lists of procedures. *) fun copyDec (Declar{addr=caddr, value=dv, ...}) = let val closure = ref (closuresForLocals sub caddr); val dec = case dv of Lambda lam => copyLambda lam closure | _ => insert dv; (* SPF 18/5/95 - check whether we now have a constant *) val U : unit = case dec of Constnt _ => update (localConsts, caddr, SOME dec) | _ => update (localConsts, caddr, NONE); (* needed? *) (* copyLambda may set "closure" to true. *) val U : unit = update (closuresForLocals, caddr, !closure); in mkDec (caddr, dec) end | copyDec _ = raise InternalError "copyDec: not a Declar" val copiedDecs = map copyDec mutualDecs; (* We now have identified all possible references to the procedures apart from those of the closures themselves. Any of closures may refer to any other procedure so we must iterate until all the procedures which need full closures have been processed. *) fun processClosures [] outlist true = (* Sweep completed. - Must repeat. *) processClosures outlist [] false | processClosures [] outlist false = (* We have processed the whole of the list without finding anything which needs a closure. The remainder do not need full closures. *) let fun mkLightClosure (Declar{value, addr, ...}) = let val clos = copyProcClosure value false; in mkDec (addr, clos) end | mkLightClosure _ = raise InternalError "mkLightClosure: not a Declar" in map mkLightClosure outlist end | processClosures ((h as Declar{addr=caddr, value, ...})::t) outlist someFound = if closuresForLocals sub caddr then let (* Must copy it. *) val clos = copyProcClosure value true in mkDec (caddr, clos) :: processClosures t outlist true end (* Leave it for the moment. *) else processClosures t (h :: outlist) someFound | processClosures _ outlist someFound = raise InternalError "processClosures: not a Declar" (* Now we know all the references we can complete the declaration and put on the use-count. *) fun copyEntries [] = [] | copyEntries (Declar{ addr, value, ...} ::ds) = let val wasUsed = localUses sub addr; in if not wasUsed andalso sideEffectFree value then copyEntries ds else ( (* Set the use count back to false otherwise this entry would become part of the kill set for the surrounding expression. *) update(localUses, addr, false); mkDecRef value addr (if wasUsed then 1 else 0) :: copyEntries ds ) end | copyEntries (d::ds) = raise InternalError "copyEntries: Not a Declar"; val decs = copyEntries (processClosures copiedDecs [] false); in (* Return the mutual declarations and the rest of the block. *) case decs of [] => restOfBlock (* None left *) | [d] => d :: restOfBlock (* Just one *) | _ => mkMutualDecs decs :: restOfBlock end (* copyDeclarations.isMutualDecs *) | copyDeclarations (v :: vs) : codetree list = let (* Not a declaration - process this and the rest. *) (* Must process later expressions before earlier ones so that the last references to variables are found correctly. DCJM 30/11/99. *) val copiedRest = copyDeclarations vs; val copiedNode = insert v; in (* Expand out blocks *) case copiedNode of Newenv decs => decs @ copiedRest | _ => copiedNode :: copiedRest end (* copyDeclarations *); (* Can we optimise a tuple to a constant? It would be nice to adjust the local use counts when we find a constant, but I think we're already committed to the values we found on the previous pass. SPF 13/6/95. *) fun recopyValue (Recconstr recs) : codetree = mkTuple (map recopyValue recs) | recopyValue (v as Extract{level=lev, addr=laddr, ...}) : codetree = if lev = 0 andalso laddr > 0 then case (localConsts sub laddr) of SOME c => c | NONE => v else v | recopyValue v = v; fun recopyDeclaration (Declar{addr=caddr, value=pt as Recconstr _, references}) : codetree = let val pt' = recopyValue pt in if isConstnt pt' then update (localConsts, caddr, SOME pt') else update (localConsts, caddr, NONE); (* needed? *) mkDecRef pt' caddr references end | recopyDeclaration (v as Declar _) : codetree = v | recopyDeclaration (MutualDecs decs) : codetree = mkMutualDecs (map recopyDeclaration decs) | recopyDeclaration (v : codetree) : codetree = recopyValue v; (* recopy declarations to remove constant tuples SPF 13/6/95 *) val insElist = map recopyDeclaration (copyDeclarations ptElist); in (* If there is only one item then return that item (unless it is a declaration - this can occur if we have a block which contains a declaration to discard the result of a function call and only do its side-effects). *) wrapEnv insElist end : codetree (* isNewEnv *) | Recconstr recs => (* perhaps it's a constant now? *) (* Recconstr (map insert (cRecconstr pt)) : codetree *) mkTuple (revmap insert recs) : codetree | (pt as Ldexc) => pt : codetree (* just a constant so return it *) | Lambda lam => (* Must make a closure for this procedure because it is not a simple declaration. *) copyProcClosure (copyLambda lam (ref true)) true : codetree | Handle { exp, taglist, handler } => let (* The order here is important. We want to make sure that the last reference to a variable really is the last. *) val hand = insert handler; val exp = insert exp; val tags = map insert taglist in Handle {exp = exp, taglist = tags, handler = hand} end | Case { cases, test, default, min, max } => let fun insertCasePair ((e,l) : casePair) : casePair = (insert e, l); in Case { cases = revmap insertCasePair cases, default = insert default, test = insert test, (* Must be called last. *) min = min, max = max } end : codetree | c as Container _ => c | SetContainer {container, tuple, size} => SetContainer{container = insert container, tuple = insert tuple, size = size} | TupleFromContainer(container, size) => TupleFromContainer(insert container, size) | Global g => (* Should have been taken off by the optimiser. *) optGeneral g : codetree | _ => raise InternalError "unknown instruction" end and copyCond (condTest, condThen, condElse) = let (* Process each of the arms, computing the kill sets for each arm. *) (* Save the current usage set. Because we process the codetree in reverse order to the control flow entries in here show the variables which are in use after the if-expression has completed. *) val usagesAfterIf = saveUsages(); (* Process the then-part. Save the usage set which corresponds to variables which are in use in the flow of control through the then-part and afterwards. *) val insThen = insert condThen; val thenUsage = saveUsages(); (* Reset the use-counts to the saved value. *) val U: unit = setToSaved usagesAfterIf; (* Process the else-part. *) val insElse = insert condElse; val elseUsage = saveUsages(); (* Now compute the differences of the sets. The differences are returned as Extract codetree entries. *) val (killThenOnly, killElseOnly) = computeKillSets(thenUsage, elseUsage); (* Now ensure that all the variables that were used in the then-part are marked as used. It may be that they have already been set if they also appeared in the else-part. This sets the usage sets to the union of the then-part, the else-part and code after the if-expression. *) val U: unit = addFromSaved thenUsage; (* Add kill entries to the other branch. We simply add Extract entries with lastRef=true before the appropriate branch. This does what we want since the code-generator does not generate any code for them but it might make the intermediate code easier to read if we used a different instruction. *) fun addKillSet(original, []) = original (* No change *) | addKillSet(Newenv decs, killSet) = Newenv(killSet @ decs) | addKillSet(original, killSet) = Newenv(killSet @ [original]); (* Process the condition AFTER the then- and else-parts. *) val insFirst = insert condTest; datatype caseVal = NoCaseVal | CaseVal of { tags: int list, min: int, max: int, test: codetree }; (* True if both instructions are loads or indirections with the same effect. More complicated cases could be considered but function calls must always be treated as different. Now returns the variable, choosing the one which has lastRef set if possible. Note: the reason we consider Indirect entries here as well as Extract is because we (used to) defer Indirect entries. *) datatype similarity = Different | Similar of loadForm; fun similar (Extract (a as {addr=aAddr, level=aLevel, fpRel=aFpRel, lastRef=aRef})) (Extract (b as {addr=bAddr, level=bLevel, fpRel=bFpRel, lastRef=bRef})) = if aAddr = bAddr andalso aLevel = bLevel andalso aFpRel = bFpRel then if aRef then Similar a else Similar b else Different | similar (Indirect{offset=aOff, base=aBase}) (Indirect{offset=bOff, base=bBase}) = if aOff <> bOff then Different else similar aBase bBase | similar (a:codetree) (b:codetree) = Different; (* If we have a call to the int equality operation *) (* then we may be able to use a case statement. *) (* preCode.copyCode.insert.findCase *) fun findCase (evl as Eval{ function=Constnt cv, argList, ... }) : caseVal = (* Since we are comparing for equality with constants we can do a case for short integers (tags) or arbitrary precision integers. This will certainly work with the new (Sparc, Mips, I386) code-generator. *) (* The above comment is an oversimplification, because we can't be sure that the constant is a short. If it isn't, then word equality is *not* the same as integer equality, so I've added a test for this. I've also added code for all three types of equality test: int_eq 229 (used for case tags - but not necessarily short) equala 113 (arbitrary precision arithmetic) word_eq 251 (used for shorts) rather than just for the first two, since although the last case may not arise (says who?) it does no harm to test for it. SPF 12/10/94 *) if wordEq (cv, ioOp POLY_SYS_int_eq) orelse wordEq (cv, ioOp POLY_SYS_equala) orelse wordEq (cv, ioOp POLY_SYS_word_eq) then (* Should be just two arguments. *) case argList of [Constnt c1, arg2] => if isShort c1 then let val value : int = Word.toIntX (toShort c1); in CaseVal{tags=[value], min=value, max=value, test=arg2} end else NoCaseVal (* Not a short constant. *) | [arg1, Constnt c2] => if isShort c2 then let val value : int = Word.toIntX (toShort c2); in CaseVal{tags=[value], min=value, max=value, test=arg1} end else NoCaseVal (* Not a short constant. *) | _ => NoCaseVal (* Wrong number of arguments - should raise exception? *) else NoCaseVal (* Function is not a comparison. *) | findCase (Case{cases, min=minC, max=maxC, test, default}) : caseVal = (* If we have an expression like x = 1 cor x = 2 we can make a case-expression out of it. *) (* This is more complicated now that we've removed conditional-or and replaced it by a normal conditional. If the first expression is suitable for inclusion in the case it will already have been converted into a case. *) let (* To match the other cases we need to have the same test variable, all the cases must return CodeTrue and the default must be of the form caseVar = constant. i.e. it is of the form case x of n1 => true | n2 => true | _ => x = n3. *) val defCase: caseVal = findCase default (* Extract the tags and check that the results are all "true". *) fun checkCases [] = SOME [] | checkCases ((c, tags) :: t) = if case c of Constnt w => wordEq(w, True) | _ => false then case checkCases t of NONE => NONE | SOME tags' => SOME(tags @ tags') else NONE in case (defCase, checkCases cases) of (CaseVal{test=testDef, min=minDef, max=maxDef, tags=tagsDef}, SOME newTags) => if similar testDef test <> Different then CaseVal{tags = newTags @ tagsDef, min=Int.min(minC, minDef), max=Int.max(maxC, maxDef), (* Return the default test rather than the original because that might contain the last reference. *) test=testDef} else NoCaseVal | _ => NoCaseVal end (* isCor *) | findCase _ = NoCaseVal (* Neither of those instructions *) (* end findCase *); val testCase : caseVal = findCase insFirst; (*val insSecond : codetree = insThen; val insThird : codetree = insElse; *) in (* body of preCode.copyCode.insert(isCond) *) case testCase of NoCaseVal => (* Can't use a case *) mkIf (insFirst, addKillSet(insThen, killElseOnly), addKillSet(insElse, killThenOnly)) | CaseVal { tags=caseTags, min=caseMin, max=caseMax, test=caseTest } => (* Can use a case. Can we combine two cases? If we have an expression like "if x = a then .. else if x = b then ..." we can combine them into a single "case". *) case insElse of Case { cases=nextCases, min=nextMin, max=nextMax, test=nextTest, default=nextDefault } => ( case similar nextTest caseTest of (* Note - it is legal (though completely redundant) for the same case to appear more than once in the list. This is not checked for at this stage. *) (* We have to take care to get the "last-reference" flags and the kill-set right when "nextTest" is the last reference to the variable. (N.B. This means that it does not appear anywhere else in the case). There are two cases to consider: 1. If the then-part contains the variable e.g. if a = 1 then a else (case a of 2 => x | _ => y) Note: because the last reference for a appears in both the branches it will not be in either kill set. 2. If the then-part does not contain the variable e.g. if a = 1 then x else (case a of 2 => x | _ => y) Note: because the last reference to a appears only in the else-part it will be in killElseOnly. In 1 we transform this into case a of 1 => a | 2 => x | 3 => y i.e. the test is NOT the last reference but a must be killed on the other branches. In 2 we transform it into case a of 1 => x | 2 => y | 3 => z i.e. the test IS the last reference. *) Similar(testVar as {lastRef = true, addr, level, ...}) => let (* Contains the last reference to the test variable. *) (* Remove this variable from the usage table for the else-part since we are lifting it up to the test. *) val U: unit = removeItem(elseUsage, addr, level); (* Compute the new kill sets. *) val (killThenOnly, killElseOnly) = computeKillSets(thenUsage, elseUsage); in if inSet(thenUsage, addr, level) then (* Must be in the then-part. *) Case { cases = (addKillSet(insThen, killElseOnly), caseTags) :: map (fn (c, l) => (addKillSet(c, killThenOnly), l)) nextCases, test = caseTest, (* This will not be a last-ref *) default = addKillSet(nextDefault, killThenOnly), min = Int.min(caseMin, nextMin), max = Int.max(caseMax, nextMax) } else (* It was in killElseOnly *) Case { cases = (addKillSet(insThen, killElseOnly), caseTags) :: map (fn (c, l) => (addKillSet(c, killThenOnly), l)) nextCases, test = nextTest, (* Last reference *) default = addKillSet(nextDefault, killThenOnly), min = Int.min(caseMin, nextMin), max = Int.max(caseMax, nextMax) } end | Similar _ => (* Does not contain the last reference to the test variable or the test variable is non-local. Add the kill sets to appropriate cases. *) Case { cases = (addKillSet(insThen, killElseOnly), caseTags) :: map (fn (c, l) => (addKillSet(c, killThenOnly), l)) nextCases, test = nextTest, default = addKillSet(nextDefault, killThenOnly), min = Int.min(caseMin, nextMin), max = Int.max(caseMax, nextMax) } | Different => (* Two case expressions but they test different variables. We can't combine them. *) Case { cases = [(addKillSet(insThen, killElseOnly), caseTags)], test = caseTest, default = addKillSet(insElse, killThenOnly), min = caseMin, max = caseMax } ) | _ => (* insElse is not a case *) (* A nil entry for the default indicates that the case is exhaustive (ML only), so if we are converting an "if" without an "else" (Poly only) we put in a dummy "else". *) (* DCJM 28/11/99. Not true: I think this comment was left over from an old version of the compiler in which case instructions were actually generated by the ML->codetree code-generator. I think the idea was to optimise the case expression when it was applied to a datatype rather than to integers. For integers we always have to test that the value is in the range for which we have entries in the indexed case before we try computing the jump. If we know that the value can only correspond to jump table entries we can avoid that. At present the Case entries in codetree are only produced here. *) Case { cases = [(addKillSet(insThen, killElseOnly), caseTags)], test = caseTest, default = addKillSet(if isCodeNil insElse then CodeZero else insElse, killThenOnly), min = caseMin, max = caseMax } end : codetree (* body of preCode.copyCode.insert(isCond) *) in insert pt end (* copyCode *); val insertedCode = copyCode (pt, fn (lf, i , b) => raise InternalError "outer level reached in copyCode", stretchArray (initTrans, false), ref false); in insertedCode end (* preCode *); (* Remove redundant declarations from the code. This reduces the size of the data structure we retain for inline functions and speeds up compilation. More importantly it removes internal functions which have been completely inlined. These can mess up the optimisation which detects which parameters to a recursive function are unchanged. It actually duplicates work that is done later in preCode but adding this function significantly reduced compilation time by reducing the amount of garbage created through inline expansion. DCJM 29/12/00. *) (* This also ensures that recursive references are converted into the correct CLOS(0,0) form. DCJM 23/1/01. *) fun cleanProc (pt: codetree, prev: loadForm * int * int -> codetree, nestingDepth): codetree = let val locals = stretchArray (5 (* Initial size. *), false); fun cleanLambda(myAddr, {body, isInline, name, numArgs, level=nestingDepth, ...}) = let (* Start a new level. *) fun lookup(ext as {addr, fpRel, ...}, level, depth) = if level = 0 then if addr = myAddr andalso fpRel then (* It's a recursive reference. *) mkRecLoad(depth-nestingDepth) else ( if addr >= 0 andalso fpRel then update(locals, addr, true) else (); (* Recursive *) Extract ext ) else prev(ext, level-1, depth); val bodyCode = cleanProc(body, lookup, nestingDepth) in Lambda{body=bodyCode, isInline=isInline, name=name, closure=[], numArgs=numArgs, level=nestingDepth, closureRefs=0, makeClosure=false} end and cleanCode (Newenv decs) = let fun cleanDec(myAddr, Lambda lam) = cleanLambda(myAddr, lam) | cleanDec(_, d) = cleanCode d; (* Process the declarations in reverse order. *) fun processDecs [] = [] | processDecs(Declar{value, addr, references} :: rest) = let (* Clear the entry. I think it's possible that addresses have been reused in other blocks so do this just in case. *) val _ = update(locals, addr, false) val processedRest = processDecs rest in (* If this is used or if it has side-effects we must include it otherwise we can ignore it. *) if locals sub addr orelse not (sideEffectFree value) then Declar{value=cleanDec(addr, value), addr=addr, references=references} :: processedRest else processedRest end | processDecs(MutualDecs decs :: rest) = let (* Clear the entries just in case the addresses are reused. *) fun setEntry(Declar{addr, ...}) = update(locals, addr, false) | setEntry _ = raise InternalError "setEntry: unknown instr" val _ = List.app setEntry decs val processedRest = processDecs rest (* We now know the entries that have actually been used in the rest of the code. We need to include those declarations and any that they use. *) fun processMutuals [] excluded true = (* If we have included a function in this pass we have to reprocess the list of those we excluded before. *) processMutuals excluded [] false | processMutuals [] _ false = (* We didn't add anything more - finish *) [] | processMutuals( (this as Declar{addr, value, references}) :: rest) excluded added = if not (locals sub addr) then (* Put this on the excluded list. *) processMutuals rest (this::excluded) added else let (* Process this entry - it may cause other entries to become "used". *) val newEntry = Declar{value=cleanDec(addr, value), addr=addr, references=references} in newEntry :: processMutuals rest excluded true end | processMutuals _ _ _ = raise InternalError "processMutual: unknown instr" val processedDecs = processMutuals decs nil false in case processedDecs of [] => processedRest (* None at all. *) | [oneDec] => oneDec :: processedRest | mutuals => MutualDecs mutuals :: processedRest end | processDecs(Newenv decs :: rest) = (* Expand out blocks. *) let val processedRest = processDecs rest val processedDecs = processDecs decs in processedDecs @ processedRest end | processDecs(exp :: rest) = let (* Either the result expression or part of an expression being evaluated for its side-effects. We can eliminate it if it doesn't actually have a side-effect except if it is the result. Note: we have to process the rest of the list first because the code for SetContainer checks whether the container is used. *) val processedRest = processDecs rest val newExp = cleanCode exp in if sideEffectFree newExp andalso not(null processedRest) then processedRest else newExp :: processedRest end val res = processDecs decs in (* We need a Newenv entry except for singleton expressions. *) wrapEnv res end (* Newenv *) | cleanCode (dec as Extract(ext as {addr, level, fpRel, ...})) = (* If this is a local we need to mark it as used. *) if level = 0 then ( (* On this level. *) if addr >= 0 andalso fpRel then (* Local *) update(locals, addr, true) else (); (* Argument or recursive - ignore it. *) dec ) else (* Non-local. This may be a recursive call. *) prev(ext, level-1, nestingDepth) | cleanCode (Lambda lam) = cleanLambda(0, lam) (* All the other case simply map cleanCode over the tree. *) | cleanCode MatchFail = MatchFail | cleanCode (AltMatch(a, b)) = AltMatch(cleanCode a, cleanCode b) | cleanCode (c as Constnt _) = c | cleanCode (Indirect{base, offset}) = Indirect{base=cleanCode base, offset=offset} | cleanCode (Eval{function, argList, earlyEval}) = Eval{function=cleanCode function, argList = map cleanCode argList, earlyEval=earlyEval} | cleanCode(Cond(test, thenpt, elsept)) = Cond(cleanCode test, cleanCode thenpt, cleanCode elsept) | cleanCode(BeginLoop(body, argList)) = let val processedBody = cleanCode body fun copyDec(Declar{addr, value, ...}) = mkDec(addr, cleanCode value) | copyDec _ = raise InternalError "copyDec: not a declaration" val newargs = map copyDec argList in BeginLoop(processedBody, newargs) end | cleanCode(Loop args) = Loop(map cleanCode args) | cleanCode(Raise r) = Raise(cleanCode r) | cleanCode(Ldexc) = Ldexc | cleanCode(Handle{exp, taglist, handler}) = Handle{exp = cleanCode exp, taglist = map cleanCode taglist, handler = cleanCode handler} | cleanCode(Recconstr decs) = Recconstr(map cleanCode decs) | cleanCode(c as Container _) = c | cleanCode(SetContainer {container, tuple, size}) = let (* If the container is unused we don't need to set it. The container won't be created either. *) val used = case container of Extract{addr, level=0, fpRel=true, ...} => addr <= 0 orelse locals sub addr | _ => true (* Assume it is. *) in (* Disable this for the moment - it's probably not very useful anyway. It doesn't work at the moment because we sometimes make a local declaration point at another variable (in pushContainer and replaceContainerDec). The new variable may be set but not used while the old variable is used but not set. *) if not used andalso false then CodeZero (* Return something. *) else (* Push the container down the tree and then process it. If we've expanded an inline function we want to be able to find any tuple we're creating. *) case tuple of Cond _ => cleanCode(mkSetContainer(container, tuple, size)) | Newenv _ => cleanCode(mkSetContainer(container, tuple, size)) | r as Raise _ => (* If we're raising an exception we don't need to set the container. *) cleanCode r | _ => SetContainer{container = cleanCode container, tuple = cleanCode tuple, size = size} end | cleanCode(TupleFromContainer(container, size)) = TupleFromContainer(cleanCode container, size) | cleanCode CodeNil = CodeNil | cleanCode _ = raise InternalError "cleanCode: unknown instr" in cleanCode pt end (* cleanProc *); (************************************************************************) fun getSome (SOME v) = v | getSome NONE = raise InternalError "getSome"; val initTrans = 10; (* Initial size of arrays. *) (*****************************************************************************) (* changeLevel *) (*****************************************************************************) (* Change the level of an entry if necessary. This *) (* happens if we have a function inside an inline function. *) fun changeLevel entry 0 = entry (* No change needed*) | changeLevel entry correction = let fun changeL(ext as Extract{addr, level, fpRel, ...}, nesting) = if level >= 0 andalso level < nesting (* We enter declarations with level = ~1 for recursive calls when processing mutual recursion. *) then ext (* It's local to the function(s) we're processing. *) else mkGenLoad (addr, level + correction, fpRel, false) | changeL(Lambda{body, isInline, name, closure, numArgs, level, closureRefs, makeClosure}, nesting) = Lambda{body = changeL(body, nesting+1), isInline = isInline, name = name, closure = closure, numArgs = numArgs, level = level + correction, closureRefs = closureRefs, makeClosure = makeClosure } | changeL(Eval{function, argList, earlyEval}, nesting) = Eval{function = changeL(function, nesting), argList = map (fn a => changeL(a, nesting)) argList, earlyEval = earlyEval} | changeL(Indirect{ base, offset }, nesting) = Indirect{base = changeL(base, nesting), offset = offset } | changeL(Declar{value, addr, ...}, nesting) = mkDec(addr, changeL(value, nesting)) | changeL(Newenv l, nesting) = Newenv(map(fn d => changeL(d, nesting)) l) | changeL(c as Container _, _) = c | changeL(TupleFromContainer(container, size), nesting) = TupleFromContainer(changeL(container, nesting), size) | changeL(code, _) = (* The code we produce in these inline functions is very limited. *) let (* If we add something else it's very useful to know what it is. *) val pprint = prettyPrint(77, fn s => TextIO.output(TextIO.stdOut,s)); in ppBeginBlock pprint (1, false); pretty (code, pprint); ppEndBlock pprint (); raise InternalError "changeL: Unknown code" end in case optGeneral entry of gen as Extract _ => optVal { general = changeL(gen, 0), special = optSpecial entry, environ = optEnviron entry, decs = [], recCall = optRec entry } | Constnt _ => entry | gen as Lambda _ => optVal { general = changeL(gen, 0), special = optSpecial entry, environ = optEnviron entry, decs = [], recCall = optRec entry } | _ => raise InternalError "changeLevel: Unknown entry" end (* end changeLevel *); (*****************************************************************************) (* optimiseProc *) (*****************************************************************************) fun optimiseProc (pt : codetree, lookupNewAddr : loadForm * int * int -> optVal, lookupOldAddr : loadForm * int * int -> optVal, enterDec : int * optVal -> unit, enterNewDec : int * optVal -> unit, nestingOfThisProcedure : int, spval : int ref, earlyInline : bool, evaluate : codetree -> codetree, tailCallEntry: bool ref option, recursiveExpansions: ((codetree list * bool * int -> codetree list) * bool ref) list, maxInlineSize: int) = (* earlyInline is true if we are expanding a procedure declared "early inline". *) (* spval is the Declaration counter. Normally ref(1) except when expanding an inline procedure. *) (* tailCallEntry is NONE if this is not an inline function and SOME r if it is. r is set to true if a tail recursive LOOP instruction is generated. *) let (*****************************************************************************) (* newDecl (inside optimiseProc) *) (*****************************************************************************) (* Puts a new declaration into a table. Used for both local declarations and also parameters to inline procedures. "setTab" is the table to put the entry in and "pt" is the value to be put in the table. We try to optimise various cases, such as constants, where a value is declared but where it is more efficient when it is used to return the value itself rather than an instruction to load the value. *) fun stripDecs (ov : optVal) : optVal = case optDecs ov of [] => ov | _ => optVal { general = optGeneral ov, special = optSpecial ov, environ = optEnviron ov, decs = [], recCall = optRec ov }; fun newDecl (setTab, ins, addrs, pushProc) : codetree list = let val gen = optGeneral ins; in case gen of Constnt _ => let (* No need to generate code. *) val spec = optSpecial ins; val ov = (* If it is a non-inline procedure it must be declared. *) case (spec, pushProc) of (Lambda{isInline=NonInline, ...}, true) => simpleOptVal gen | _ => stripDecs ins (* Remove the declarations before entering it. *) val U : unit = setTab (addrs, ov); in (* Just return the declarations. *) optDecs ins end | Extract { level = 0, ...} => let (* Declaration is simply giving a new name to a local - can ignore this declaration. *) val optVal = stripDecs ins (* Simply copy the entry. *) val U : unit = setTab (addrs, optVal); in optDecs ins end (* old ... else if isIndirect gen then let (* It is safe to defer an indirection if we can. For instance, in ML fun f (a as (b,c)) will generate declarations of b and c as indirections on a. If b and c are not used immediately there is no point in loading them (it only uses up the registers). Once they are actually used they will be loaded into registers and those registers will be cached by the normal register caching scheme, so that if used again soon after they will not be reloaded. *) val ind = cIndirect gen; fun optSetTab (i, v) = setTab (i, optVal { (* Add on the indirection. *) general = mkInd (indOffset ind, optGeneral v), special = optSpecial v, environ = optEnviron v, decs = optDecs v }); in (* Take off the indirection from the value to be declared and add it to the load instruction. This causes the indirection to be deferred until the value is actually used. *) newDecl (optSetTab, optVal { general = indBase ind, special = optSpecial ins, environ = optEnviron ins, decs = optDecs ins }, addrs, pushProc) end ... *) | _ => let (* Declare an identifier to have this value. *) val decSpval = ! spval; val UUU = spval := decSpval + 1 ; (* The table entry is similar to the result of the expression except that the declarations are taken off and put into the containing block, and the general value is put into a local variable and replaced by an instruction to load from there. If the special is a non-inline procedure it is removed. Non-inline procedures are returned by copyLambda so that they can be inserted inline if they are immediately called (e.g. a catch phrase) but if they are declared they are created as normal procedures. We don't do this for parameters to inline procedures so that lambda-expressions passed to inline procedures will be expanded inline if they are only called inside the inline procedure. e.g. for(..., proc(..)(...)) will be expanded inline. *) val spec = optSpecial ins; val optSpec = case (spec, pushProc) of (Lambda{isInline=NonInline, ...}, true) => CodeNil | _ => spec val optV = optVal { general = mkLoad (decSpval, 0), special = optSpec, environ = optEnviron ins, decs = [], recCall = optRec ins }; val U : unit = setTab (addrs, optV); in optDecs ins @ [mkDecRef gen decSpval 0] end end (* newDecl *); (*****************************************************************************) (* optimise (inside optimiseProc) *) (*****************************************************************************) fun getGeneral ov = ( case optDecs ov of [] => optGeneral ov | decs => mkEnv (decs @ [optGeneral ov]) ) (* The main optimisation routine. *) (* Returns only the general value from an expression. *) fun generalOptimise(pt, tailCall) = getGeneral(optimise(pt, tailCall)) and general pt = generalOptimise(pt, NONE) and optimise (pt as MatchFail, _) = simpleOptVal pt | optimise (AltMatch(a, b), _) = simpleOptVal(AltMatch(general a, general b)) | optimise (CodeNil, _) = simpleOptVal CodeNil | optimise (evl as Eval{function, argList, earlyEval}, tailCall) = let (* Get the function to be called and see if it is inline or a lambda expression. *) val funct : optVal = optimise(function, NONE); val foptRec = optRec funct (* There are essentially two cases to consider - the procedure may be "inline" in which case it must be expanded as a block, or it must be called. *) fun notInlineCall recCall = let val argsAreConstants = ref true; fun copyArg arg = let val copied = general arg; in (* Check for early evaluation. *) if not (isConstnt copied) then argsAreConstants := false else (); copied end val copiedArgs = map copyArg argList; val gen = optGeneral funct and early = earlyEval orelse earlyInline (* If the procedure was declared as early or is inside an inline procedure declared as early we can try to evaluate it now. Also if it is a call to an RTS function (which may actually be code-generated inline by G_CODE) we can evaluate it if it's safe. *) val evalEarly = ! argsAreConstants andalso isConstnt (optGeneral funct) andalso (early orelse (case optGeneral funct of Constnt w => isIoAddress(toAddress w) andalso earlyRtsCall(w, copiedArgs) | _ => false ) ) val evCopiedCode = if evalEarly then evaluate (mkEval (gen, copiedArgs, early)) else case recCall of (* This is a recursive call to a function we're expanding. Is it tail recursive? We may have several levels of expansion. *) SOME (filterArgs, optr) => if (case tailCall of SOME tCall => optr = tCall (* same reference? *) | NONE => false) then Loop (filterArgs(copiedArgs, true, nestingOfThisProcedure)) else mkEval (gen, filterArgs(copiedArgs, false, nestingOfThisProcedure), early) (* Not a recursive expansion. *) | NONE => mkEval (gen, copiedArgs, early) in optVal { general = evCopiedCode, special = CodeNil, environ = errorEnv, decs = optDecs funct, recCall = ref false } end (* notInlineCall *) in case (List.find (fn (_, r) => r = foptRec) recursiveExpansions, optSpecial funct) of (recCall as SOME _, _) => (* We're already expanding this function - don't recursively expand it. Either loop or generate a function call. *) notInlineCall recCall | (_, Lambda { isInline, body=lambdaBody, name=lambdaName, closureRefs, ...}) => let (* Calling inline proc or a lambda expression which is just called. The procedure is replaced with a block containing declarations of the parameters. We need a new table here because the addresses we use to index it are the addresses which are local to the function. New addresses are created in the range of the surrounding function. *) val localVec = stretchArray (initTrans, NONE); val paramVec = stretchArray (initTrans, NONE); val localNewVec = stretchArray (initTrans, NONE); (* copies the argument list. *) fun copy [] argAddress = [] : codetree list | copy (h::t) argAddress = let fun setTab (index, v) = update (paramVec, ~index, SOME v); (* Make the declaration, picking out constants, inline procedures and load-and-stores. These are entered in the table, but nil is returned by "newDecl". *) val lapt = newDecl (setTab, optimise(h, NONE), argAddress, false); in (* Now process the rest of the declarations. *) lapt @ copy t (argAddress + 1) end (* end copy *); val nArgs = List.length argList val copiedArgs = copy argList (~nArgs); (* Create an immutable vector from the parameter array to reduce the amount of mutable data, *) val frozenParams = StretchArray.vector paramVec (* All declarations should be of positive addresses. *) fun setNewTabForInline (addr, v) = update (localNewVec, addr, SOME v) fun setTabForInline (index, v) = ( case optGeneral v of Extract{addr, ...} => if addr <= 0 then () else setNewTabForInline(addr, v) | _ => (); update (localVec, index, SOME v) ) fun lookupLocalNewAddr (ext as { addr, ...}, depth, levels) = (* It may be local to this function or to the surrounding scope. *) if levels <> 0 orelse addr <= 0 then lookupNewAddr(ext, depth, levels) else case localNewVec sub addr of SOME v => changeLevel v (depth - nestingOfThisProcedure) | NONE => lookupNewAddr(ext, depth, levels); val copiedBody = if isInline = MaybeInline orelse isInline = OnlyInline then(* It's a function the front-end has explicitly inlined. It can't be directly recursive. If it turns out to be indirectly recursive (i.e. it calls a function which then calls it recursively) that's fine - the recursive expansion will be stopped by the other function. *) let (* The environment for the expansion of this procedure is the table for local declarations and the original environment in which the function was declared for non-locals. *) fun lookupDec ({ addr=0, ...}, depth, 0) = (* Recursive reference - shouldn't happen. *) raise InternalError "lookupDec: Inline function recurses" | lookupDec ({ addr=index, ...}, depth, 0) = let (* On this level. *) val optVal = if index > 0 then getSome (localVec sub index) (* locals *) else getSome (Vector.sub(frozenParams, ~index)) (* parameters *) in changeLevel optVal (depth - nestingOfThisProcedure) end | lookupDec (ptr as { addr=index, ...}, depth, levels) = (optEnviron funct) (ptr, depth, levels - 1); in optimiseProc (lambdaBody, lookupLocalNewAddr, lookupDec, setTabForInline, setNewTabForInline, nestingOfThisProcedure, spval, earlyInline orelse earlyEval, evaluate, tailCall, recursiveExpansions, maxInlineSize) end else (* It's a "small" function. *) let (* Now load the procedure body itself. We first process it assuming that we won't need to treat any of the arguments specially. If we find that we generate a Loop instruction somewhere we have to make sure that any arguments we change in the course of the loop are taken out. For example: fun count'(n, []) = n | count' (n, _::t) = count'(n+1, t); fun count l = count'(0, l). In this case we would start by expanding count' using 0 for n throughout, since it's a constant. When we find the recursive call in which n becomes n+1 we find we have to take n out of the loop and treat it as a variable. We don't need to do this if the argument is passed through unchanged e.g. fun foldl f b [] = b | foldl f b (x::y) = foldl f (f(x, b)) y; where the same value for f is used everywhere and by treating it specially we can expand its call. This two-pass (it will normally be two-pass but could be more) approach allows us to optimise cases where we have a recursive function which happens to be non-recursive with particular constant values of the arguments. e.g. if x = nil ... generates a general recursive function for equality on lists but because of the nil argument this optimises down to a simple test. *) (* I'm now extending this to the general recursive case not just tail recursion. If we discover a recursive call while processing the function we turn this expansion into a function call and give up trying to inline it. Instead we create a special-purpose function for this call but with only the arguments that change as a result of the recursive calls actually passed as arguments. Other arguments can be inserted inline in function. e.g. fun map f [] = [] | map f (a::b) = f a :: map f b where when we map a function over a list we compile a specialised mapping function with the actual value of f inserted in it. *) val needsBeginLoop = ref false val needsRecursiveCall = ref false val argModificationVec = stretchArray (initTrans, false); (* Create addresses for the new variables for modified arguments. If newdecl created a variable we might be able to reuse that but it's easier to create new ones. *) val argBaseAddr = ! spval; val _ = spval := argBaseAddr + nArgs (* filterArgs is called whenever a recursive call is made to this function. *) fun filterArgs (argList, isTail, depth) = let fun filterArgs' 0 [] = [] | filterArgs' _ [] = raise InternalError "filterArgs': wrong number of args" | filterArgs' n (arg :: rest) = let (* Is this simply passing the original argument value? *) val original = getSome (Vector.sub(frozenParams, n)) val unChanged = case (arg, optGeneral original) of (Constnt w, Constnt w') => (* These may well be functions so don't use structure equality. *) wordEq(w, w') | (Extract {addr=aA, level=aL, fpRel=aFp, ...}, Extract {addr=bA, level=bL, fpRel=bFp, ...}) => aA = bA andalso aFp = bFp andalso aL = bL+depth-nestingOfThisProcedure | _ => false in if unChanged then () else update(argModificationVec, n, true); (* If any recursive call has changed it we need to include this argument even if it didn't change on this particular call. *) if argModificationVec sub n then arg :: filterArgs' (n-1) rest else (* Not modified *) filterArgs' (n-1) rest end in needsBeginLoop := true; (* Indicate we generated a Loop instr. *) (* If this isn't tail recursion we need a full call. *) if isTail then () else needsRecursiveCall := true; (* If we have a recursive inline function containing a local recursive inline function which calls the outer function (e.g. fun f a b = .... map (f a) ....) we may process the body of the inner function twice, once as a lambda and once when we attempt to expand it inline. That means we will process the recursive call to the outer function twice. The first call may filter out redundant arguments (e.g. "a" in the above example). *) if List.length argList <> nArgs then argList else filterArgs' nArgs argList end (* See how many arguments changed. *) fun countSet n 0 = n | countSet n i = if argModificationVec sub i then countSet (n+1) (i-1) else countSet n (i-1) fun checkRecursiveCalls lastModCount = (* We've found at least one non-tail recursive call so we're going to have to generate this function as a function and a call to that function. However we may well gain by inserting in line arguments which don't change as a result of recursion. *) let val nesting = nestingOfThisProcedure + 1 (* Find the parameter we're actually going to use. *) fun getParamNo n = if n = 0 then 0 else if argModificationVec sub (~n) then getParamNo (n+1) - 1 else getParamNo (n+1) fun prev ({ addr=0, ...}, depth, 0) = (* Recursive reference. We're going to generate this as a function so return a reference to the closure. I've ensured that we pass the appropriate value for recCall here although I don't know if it's necessary. *) optVal { general = mkGenLoad (0, depth - nesting, false, false), (* This is a bit of a mess. We need a non-nil value for special here in order to pass recCall correctly because optVal filters it otherwise. *) special = (*optSpecial funct *) mkGenLoad (0, depth - nesting, false, false), decs = [], recCall = foptRec, environ = errorEnv } | prev (ptr as { addr=index, ...}, depth, 0) = if index > 0 (* locals *) then changeLevel(getSome (localVec sub index)) (depth - nesting) else (* index < 0 - parameters *) if argModificationVec sub ~index then (* This argument has changed - find the corresponding actual argument. *) simpleOptVal(mkLoad(getParamNo index, depth-nesting)) else (* Unchanged - get the entry from the table, converting the level because it's in the surrounding scope. *) changeLevel (getSome (Vector.sub(frozenParams, ~index))) (depth-nesting+1) | prev (ptr as { addr=index, ...}, depth, levels) = (optEnviron funct) (ptr, depth, levels - 1); val newAddrTab = stretchArray (initTrans, NONE); (* localNewAddr is used as the environment of inline functions within the function we're processing. *) fun localNewAddr ({ addr=index, ...}, depth, 0) = if index > 0 then case newAddrTab sub index of NONE => (* Return the original entry if it's not there. *) simpleOptVal( mkGenLoad (index, depth - nesting, true, false)) | SOME v => changeLevel v (depth - nesting) else simpleOptVal (mkGenLoad (index, depth - nesting, index <> 0, false)) | localNewAddr (ptr, depth, levels) = lookupNewAddr (ptr, depth, levels - 1); fun setNewTab (addr, v) = update (newAddrTab, addr, SOME v) fun setTab (index, v) = ( case optGeneral v of Extract{addr, ...} => if addr <= 0 then () else setNewTab(addr, v) | _ => (); update (localVec, index, SOME v) ) val copiedBody = optimiseProc (lambdaBody, localNewAddr, prev, setTab, setNewTab, nesting, ref 1, earlyInline orelse earlyEval, evaluate, NONE, (* Don't generate loop instructions. *) (filterArgs, foptRec) :: recursiveExpansions, maxInlineSize) val newModCount = countSet 0 nArgs in if newModCount > lastModCount then (* We have some (more) arguments to include. *) checkRecursiveCalls newModCount else optVal { general = Lambda { body = getGeneral copiedBody, isInline = NonInline, name = lambdaName, closure = [], numArgs = lastModCount, level = nestingOfThisProcedure + 1, closureRefs = 0, makeClosure = false }, special = CodeNil, decs = [], recCall = ref false, environ = localNewAddr } end fun checkForLoopInstrs lastModCount = (* Called initially or while we only have tail recursive calls. We can inline the function. *) let fun prev (ptr as { addr=index, ...}, depth, 0) : optVal = let (* On this level. *) val optVal = if index = 0 (* Recursive reference - return the copied function after removing the declarations. These will be put on in the surrounding scope. We can't at this stage tell whether it's a call or some other recursive use (e.g. passing it as an argument) and it could be that it's an argument to an inline function which actually calls it. Since we include the original optRec value it can be sorted out later. *) then stripDecs funct else if index > 0 then getSome (localVec sub index) (* locals *) else (* index < 0 *) if argModificationVec sub ~index then (* This argument changes - must use a variable even if the original argument was a constant. *) simpleOptVal(mkLoad(argBaseAddr + nArgs + index, 0)) else getSome (Vector.sub(frozenParams, ~index)) (* parameters *) in changeLevel optVal (depth - nestingOfThisProcedure) end | prev (ptr as { addr=index, ...}, depth, levels) : optVal = (* On another level. *) (optEnviron funct) (ptr, depth, levels - 1); val copiedBody = optimiseProc (lambdaBody, lookupLocalNewAddr, prev, setTabForInline, setNewTabForInline, nestingOfThisProcedure, spval, earlyInline orelse earlyEval, evaluate, SOME foptRec, (filterArgs, foptRec) :: recursiveExpansions, maxInlineSize) in if ! needsRecursiveCall then (* We need a fully recursive call. *) checkRecursiveCalls (countSet 0 nArgs) else if ! needsBeginLoop then (* We've found at least one recursive call which changes its argument value. *) let val newModCount = countSet 0 nArgs in if newModCount > lastModCount then checkForLoopInstrs newModCount else copiedBody end else copiedBody end val procBody = checkForLoopInstrs 0 (* If we need to make the declarations put them in at the beginning of the loop. *) fun makeDecs 0 _ = [] | makeDecs n isCall = if not (argModificationVec sub n) then makeDecs (n-1) isCall else let val argVal = getGeneral(getSome (Vector.sub(frozenParams, n))) val argDec = (* If we are calling a function we just put the argument values in. *) if isCall then argVal else mkDec(argBaseAddr+nArgs-n, argVal) in argDec :: makeDecs (n-1) isCall end in if ! needsRecursiveCall then (* We need to put in a call to this function. *) let (* Put the function into the declarations. *) val addr = ! spval in spval := addr + 1; optVal{ general = mkEval(mkLoad(addr, 0), makeDecs nArgs true, false), special = CodeNil, decs = [mkDec(addr, getGeneral procBody)], recCall = ref false, environ = lookupNewAddr } end else if ! needsBeginLoop then simpleOptVal(BeginLoop(getGeneral procBody, makeDecs nArgs false)) else procBody end in StretchArray.freeze localVec; StretchArray.freeze localNewVec; (* The result is the result of the body of the inline procedure. *) (* The declarations needed for the inline procedure, the *) (* declarations used to load the arguments and the declarations *) (* in the expanded procedure are all concatenated together. We *) (* do not attempt to evaluate "early inline" procedures. Instead *) (* we try to ensure that all procedures inside are evaluated *) (*"early". *) optVal { general = optGeneral copiedBody, special = optSpecial copiedBody, environ = optEnviron copiedBody, decs = optDecs funct @ (copiedArgs @ optDecs copiedBody), recCall = optRec copiedBody } end | _ => notInlineCall NONE (* Not a Lambda and not recursive. *) end (* Eval { } *) | optimise (Extract(ext as {level, ...}), _) = lookupOldAddr (ext, nestingOfThisProcedure, level) | optimise (original as Lambda({body=lambdaBody, isInline=lambdaInline, name=lambdaName, numArgs, ...}), _) = let (* The nesting of this new procedure is the current nesting level plus one. Normally this will be the same as lambda.level except when we have a procedure inside an inline procedure. *) val nesting = nestingOfThisProcedure + 1; (* A new table for the new procedure. *) val oldAddrTab = stretchArray (initTrans, NONE); val newAddrTab = stretchArray (initTrans, NONE); fun localOldAddr ({ addr=index, ...}, depth, 0) = (* local declaration or argument. *) if index > 0 (* Local declaration. *) then changeLevel (getSome (oldAddrTab sub index)) (depth - nesting) (* Argument or closure. *) else simpleOptVal (mkGenLoad (index, depth - nesting, index <> 0, false)) | localOldAddr (ptr, depth, levels) = lookupOldAddr (ptr, depth, levels - 1); (* localNewAddr is used as the environment of inline functions within the function we're processing. All the entries in this table will have their "general" entries as simply Extract entries with the original address. Their "special" entries may be different. The only entries in the table will be those which correspond to declarations in the original code so there may be new declarations which aren't in the table. *) fun localNewAddr ({ addr=index, ...}, depth, 0) = if index > 0 then case newAddrTab sub index of NONE => (* Return the original entry if it's not there. *) simpleOptVal(mkGenLoad (index, depth - nesting, true, false)) | SOME v => changeLevel v (depth - nesting) else simpleOptVal (mkGenLoad (index, depth - nesting, index <> 0, false)) | localNewAddr (ptr, depth, levels) = lookupNewAddr (ptr, depth, levels - 1); fun setNewTab (addr, v) = update (newAddrTab, addr, SOME v) fun setTab (index, v) = ( case optGeneral v of Extract{addr, ...} => if addr <= 0 then () else setNewTab(addr, v) | _ => (); update (oldAddrTab, index, SOME v) ) val newCode = optimiseProc (lambdaBody, localNewAddr, localOldAddr, setTab, setNewTab, nesting, ref 1, false, evaluate, NONE, recursiveExpansions, maxInlineSize); (* nonLocals - a list of the non-local references made by this function. If this is empty the function can be code-generated immediately and returned as a constant. If it is non-empty it is set as the closure for the function. This is then used when processing mutually recursive functions to find the dependencies. *) val nonLocals = ref nil; fun addNonLocal(ext: loadForm as {addr, level, fpRel, ...}, depth) = let (* The level will be correct relative to the use, which may be in an inner function. We want the level relative to the scope in which this function is declared. *) val correctedLevel = level - (depth - nestingOfThisProcedure) fun findNonLocal(Extract{addr=addr', level=level', fpRel=fpRel', ...}) = addr = addr' andalso correctedLevel = level' andalso fpRel=fpRel' | findNonLocal _ = raise InternalError "findNonLocal: not Extract" in if List.exists findNonLocal (!nonLocals) then () (* Already there. *) else nonLocals := mkGenLoad(addr, correctedLevel, fpRel, false) :: ! nonLocals end fun checkRecursion(ext as {fpRel=oldfpRel, ...}, levels, depth) = case optGeneral(lookupNewAddr (ext, depth, levels)) of (res as Extract(ext as {addr=0, fpRel=false, level, ...})) => ( (* If this is just a recursive call it doesn't count as a non-local reference. This only happens if we turned a reference to a local into a recursive reference (i.e. fpRel was previously true). *) if levels = 0 andalso oldfpRel then () else addNonLocal(ext, depth); res ) | res as Extract(ext as {addr, level, fpRel, ...}) => ( addNonLocal(ext, depth); res ) | res => res (* We may have a constant in this table. *) val cleanedBody = cleanProc(getGeneral newCode, checkRecursion, nesting) val resultCode = case lambdaInline of OnlyInline => (* Used only for functors. Don't compile now. Return the processed version as the special value. *) optVal { general = CodeZero, (* Changed from using CodeNil here to CodeZero. This avoids a problem which only surfaced with the changes to ML97 and the possibility of mixing functor and value declarations in the same "program" (i.e. top-level declarations with a terminating semicolon. OnlyInline is used for functors which can only ever be called, never passed as values, so the "general" value is not really required. It can though appear in the result tuple of the "program" from which the (value) results of the program are extracted. DCJM 6/1/00 *) special = Lambda { body = cleanedBody, isInline = OnlyInline, name = lambdaName, closure = [], numArgs = numArgs, level = nesting, closureRefs = 0, makeClosure = false }, environ = lookupNewAddr, (* new addresses with cleanedBody. *) decs = [], recCall = ref false } | MaybeInline => (* Explicitly inlined functions. *) (* We return the processed version of the function as the general value but the unprocessed version as the special value. *) optVal { general = Lambda { body = cleanedBody, isInline = MaybeInline, name = lambdaName, closure = !nonLocals, (* Only looked at in MutualDecs. *) numArgs = numArgs, level = nesting, closureRefs = 0, makeClosure = false }, special = original, environ = lookupOldAddr, (* Old addresses with unprocessed body. *) decs = [], recCall = ref false (* *** REF HOTSPOT; Contributes many refs to the environment. *) } | _ => (* "Normal" function. If the function is small we mark it as inlineable. If the body has no free variables we compile it now so that we can propagate the resulting constant, otherwise we return the processed body. We return the processed body as the special value so that it can be inlined. We do this even in the case where the function isn't small because it is just possible we're going to apply the function immediately and in that case it's worth inlining it anyway. *) let val inlineType = if lambdaInline = NonInline andalso isSmall(cleanedBody, maxInlineSize) then SmallFunction else lambdaInline val copiedLambda = Lambda { body = cleanedBody, isInline = inlineType, name = lambdaName, closure = !nonLocals, (* Only looked at in MutualDecs. *) numArgs = numArgs, level = nesting, closureRefs = 0, makeClosure = false }; val general = (* If this has no free variables we can code-generate it now. *) if null (!nonLocals) then evaluate copiedLambda else copiedLambda in optVal { general = general, special = Lambda { body = cleanedBody, isInline = inlineType, name = lambdaName, closure = [], numArgs = numArgs, level = nesting, closureRefs = 0, makeClosure = false }, environ = lookupNewAddr, decs = [], recCall = ref false (* *** REF HOTSPOT; Contributes many refs to the environment. *) } end in StretchArray.freeze oldAddrTab; StretchArray.freeze newAddrTab; resultCode end (* Lambda{...} *) | optimise (pt as Constnt _, _) = simpleOptVal pt (* Return the original constant. *) | optimise (BeginLoop(body, args), tailCall) = let (* We could try extracting redundant loop variables but for the time being we just see whether we actually need a loop or not. This is needed if we have already constructed a loop from a recursive inline function and then expand it in another function. If some of the loop variables are now constants we may optimise away the loop altogether. e.g. equality for lists where we actually have if x = nil then ... *) val loops = ref false fun filterArgs (a, _, _) = (loops := true; a) val foptRec = ref false (* First process as though it was not a BeginLoop but just a set of declarations followed by an expression. *) val firstBeginBody = optimiseProc (mkEnv(args @ [body]), lookupNewAddr, lookupOldAddr, enterDec, enterNewDec, nestingOfThisProcedure, spval, earlyInline, evaluate, SOME foptRec, (filterArgs, foptRec) :: recursiveExpansions, maxInlineSize) in if not (! loops) then (* The Loop instructions have been optimised away. Since there's no BeginLoop we can reprocess it with the surrounding tail recursion. *) optimise(mkEnv(args @ [body]), tailCall) else (* It loops - have to reprocess. *) let (* The arguments to the functions are Declar entries but they must not be optimised. *) fun declArg(Declar{addr, value, ...}) = let val optVal = optimise(value, NONE) val decSpval = ! spval val _ = spval := decSpval + 1 val optV = simpleOptVal(mkLoad (decSpval, 0)) in enterDec(addr, optV); mkDec(decSpval, getGeneral optVal) end | declArg _ = raise InternalError "declArg: not Declar" val declArgs = map declArg args val beginBody = optimiseProc (body, lookupNewAddr, lookupOldAddr, enterDec, enterNewDec, nestingOfThisProcedure, spval, earlyInline, evaluate, SOME foptRec, (filterArgs, foptRec) :: recursiveExpansions, maxInlineSize) in simpleOptVal (BeginLoop (getGeneral beginBody, declArgs)) end end | optimise (Loop args, tailCall) = ( (* The Loop instruction should be at the tail of the corresponding BeginLoop. *) case (tailCall, recursiveExpansions) of (SOME fopt, (filterArgs, fopt') :: _) => if fopt <> fopt' then raise InternalError "Loop: mismatched BeginLoop" else simpleOptVal (Loop (filterArgs((map general args), true, nestingOfThisProcedure))) | _ => raise InternalError "Loop: not at tail of BeginLoop" ) | optimise (Raise x, _) = simpleOptVal (Raise (general x)) | optimise (Cond(condTest, condThen, condElse), tailCall) = let val insFirst = general condTest; in (* If the condition is a constant we need only return the appropriate arm. *) case insFirst of Constnt testResult => if wordEq (testResult, False) (* false - return else-part *) then (* if false then x else y == y *) if isCodeNil condElse (* May be nil. (Pattern-matching) *) then simpleOptVal (mkEnv []) else optimise(condElse, tailCall) (* if true then x else y == x *) else optimise(condThen, tailCall) (* return then-part *) | _ => let (* Perhaps the "if" is really a simpler expression? Unfortunately, we don't know whether we're returning a boolean result here so we can't optimise to andalso/orelse but we can at least look for the case where both results are constants. *) val insSecond = optimise(condThen, tailCall) val insThird = optimise(condElse, tailCall) (* If we have tuples on both arms we can probably combine them. *) fun combineTuples(containerAddr, thenAddr, elseAddr, thenRec, elseRec, size) = let val thenDecs = optDecs insSecond and elseDecs = optDecs insThird fun replaceContainerDec([], ad) = raise InternalError "replaceContainerDec" | replaceContainerDec((hd as Declar{addr, ...})::tl, ad)= if addr = ad then (* Found the declaration. If we are using this container address we remove this declaration. If we have containers on both branches we need to make them both point to the same container. *) if addr = containerAddr then tl else mkDec(addr, mkLoad(containerAddr, 0)) :: tl else hd :: replaceContainerDec(tl, ad) | replaceContainerDec(hd :: tl, ad) = hd :: replaceContainerDec(tl, ad) fun createBranch(recEntries, decEntries, cAddr) = case cAddr of SOME ad => (* We have a container on that branch ... *) wrapEnv(replaceContainerDec(decEntries, ad)) | NONE => wrapEnv(decEntries @ [mkSetContainer( mkLoad(containerAddr, 0), Recconstr recEntries, size)]) val thenPart = createBranch(thenRec, thenDecs, thenAddr) and elsePart = createBranch(elseRec, elseDecs, elseAddr) (* The result is a block which declares the container, side-effects it in the "if" and makes a tuple from the result. If we're lucky the resulting tuple will be optimised away. *) (* This code is the same as that used to optimise TupleFromContainer and is designed to allow us to optimise away the tuple creation if we use the individual fields. *) val baseAddr = !spval val _ = spval := baseAddr + size val specialDecs = List.tabulate(size, fn n => mkDec(n+baseAddr, mkInd(n, mkLoad(containerAddr, 0)))) val specialEntries = List.tabulate(size, fn n => mkLoad(n+baseAddr, 0)) fun env (l:loadForm, depth, levels) : optVal = changeLevel (simpleOptVal(Extract l)) (depth - nestingOfThisProcedure) in optVal { general = TupleFromContainer(mkLoad(containerAddr, 0), size), special = Recconstr specialEntries, environ = env, decs = mkDec(containerAddr, Container size) :: mkIf(insFirst, thenPart, elsePart) :: specialDecs, recCall = ref false } end (* combineTuples *) in case (optGeneral insSecond, optDecs insSecond, optGeneral insThird, optDecs insThird) of (second as Constnt c2, [], third as Constnt c3, []) => (* if x then y else y == (x; y) *) if wordEq (c2, c3) then if sideEffectFree insFirst then insSecond else (* Must put insFirst in decs, so it gets executed *) optVal { general = second, special = CodeNil, environ = errorEnv, decs = [insFirst], recCall = ref false } (* if x then true else false == x *) else if wordEq (c2, True) andalso wordEq (c3, False) then simpleOptVal insFirst (* if x then false else y == not x *) else if wordEq (c2, False) andalso wordEq (c3, True) then simpleOptVal (mkNot insFirst) else (* can't optimise *) simpleOptVal (mkIf (insFirst, second, third)) | (Recconstr thenRec, _, Recconstr elseRec, _) => (* Both tuples - are they the same size? They may not be if they are actually datatypes. *) if List.length thenRec = List.length elseRec then (* We can transform this into an operation which creates space on the stack, side-effects it and then picks up the result from it. *) let val size = List.length thenRec (* = List.length elseRec *) (* Create a new address for the container. *) val containerAddr = let val ad = !spval in spval := ad + 1; ad end in combineTuples(containerAddr, NONE, NONE, thenRec, elseRec, size) end else (* Different sizes - use default. *) simpleOptVal (mkIf (insFirst, getGeneral insSecond, getGeneral insThird)) | (TupleFromContainer(Extract{addr=thenAddr,level=0,fpRel=true, ...}, thenSize), _, TupleFromContainer(Extract{addr=elseAddr,level=0,fpRel=true, ...}, elseSize), _) => (* Have both been converted already. If we are returning a tuple from a container the container must be declared locally. *) if thenSize = elseSize then (* We can combine the containers. We can't if these are actually datatypes in which case they could be different sizes. *) let (* If we have already transformed this we will have a declaration of a container somewhere in the list. *) (* Use the address which has already been allocated for the else part. That makes it easier for the subsequent pass to convert this into a "case" if appropriate. *) val containerAddr = elseAddr in combineTuples(containerAddr, SOME thenAddr, SOME elseAddr, [], [], thenSize) end else (* Different sizes - use default. *) simpleOptVal (mkIf (insFirst, getGeneral insSecond, getGeneral insThird)) | (TupleFromContainer(Extract{addr=thenAddr,level=0,fpRel=true, ...}, thenSize), _, Recconstr elseRec, _) => (* The then-part has already been converted *) if thenSize = List.length elseRec then combineTuples(thenAddr, SOME thenAddr, NONE, [], elseRec, thenSize) else (* Different sizes - use default. *) simpleOptVal (mkIf (insFirst, getGeneral insSecond, getGeneral insThird)) | (Recconstr thenRec, _, TupleFromContainer(Extract{addr=elseAddr,level=0,fpRel=true, ...}, elseSize), _) => (* The else-part has already been converted *) if elseSize = List.length thenRec then combineTuples(elseAddr, NONE, SOME elseAddr, thenRec, [], elseSize) else (* Different sizes - use default. *) simpleOptVal (mkIf (insFirst, getGeneral insSecond, getGeneral insThird)) | _ => (* Not constants or records. *) simpleOptVal (mkIf (insFirst, getGeneral insSecond, getGeneral insThird)) end end (* isCond pt *) | optimise (Newenv envDecs, tailCall) = let (* Process the body. *) (* Recurses down the list of declarations and expressions processing each, and then reconstructs the list on the way back. *) (* Only if we have an empty block or a block containing only declarations i.e. a declaration is used to discard the result of a function and only perform its side-effects. *) fun copyDeclarations [] = simpleOptVal (mkEnv []) | copyDeclarations (Declar{addr=caddr, value, ...} :: vs) = let (* Add the declaration to the table. *) val dec = newDecl (enterDec, optimise(value, NONE), caddr, true); (* Deal with the rest of the block. *) val rest = copyDeclarations vs; in case dec of [] => rest | _ => (* Must put these declarations onto the list. *) optVal { general = optGeneral rest, special = optSpecial rest, environ = optEnviron rest, decs = dec @ optDecs rest, recCall = optRec rest } end | copyDeclarations (MutualDecs mutualDecs :: vs) = (* Mutually recursive declarations. Any of the declarations may refer to any of the others. They should all be lambdas. The front end generates functions with more than one argument (either curried or tupled) as pairs of mutually recursive functions. The main function body takes its arguments on the stack (or in registers) and the auxiliary inline function, possibly nested, takes the tupled or curried arguments and calls it. If the main function is recursive it will first call the inline function which is why the pair are mutually recursive. As far as possible we want to use the main function since that uses the least memory. Specifically, if the function recurses we want the recursive call to pass all the arguments if it can. We force the inline functions to be macros while processing the non-inline functions and then process the inlines. DCJM 23/1/01. *) let (* Split the inline and non-inline functions. *) val (inlines, nonInlines) = List.foldl ( fn (d, (inlines, nonInlines)) => case d of Declar{value = Lambda{ isInline=MaybeInline, ...}, ... } => (d::inlines, nonInlines) | _ => (inlines, d::nonInlines)) ([], []) mutualDecs; (* Go down the non-inline functions creating new addresses for them and entering them in the table. *) val startAddr = !spval val addresses = map (fn Declar{ value = decVal, addr, ... } => let val decSpval = !spval; in enterDec (addr, simpleOptVal (mkLoad (decSpval, 0))); spval := !spval + 1; decSpval end | _ => raise InternalError "mutualDecs: not Declar") nonInlines; val endAddr = !spval (* We can now process the inline functions. Since these can't be directly recursive we don't need to do anything special. *) val _ = List.app (fn Declar{ value, addr, ... } => enterDec (addr, optimise(value, NONE)) | _ => raise InternalError "mutualDecs: not Declar") inlines; (* Next process the non-inlines. We really want to be able to compile the functions now if we can and get a constant for the code address. We can do that for functions which make no non-local references or whose non-local references are by means of constants. For non-recursive declarations this is easy since an earlier declaration cannot depend on a later one but for mutually recursive declarations we don't know the dependencies. The simple case is where we have a function which does not depend on anything and so can be code-generated in the Lambda case. Code-generating that may allow others to be code-generated. Another case is where the functions depend on each other but not on anything else. We can compile them together but not individually. There are various versions of this second case. The only one we consider here is if all the (non-constant) functions are of that form in which case we process the whole mutually-recursive declaration. *) val hasNonLocalReference = ref false fun checkClosure (Extract{addr, level=0, fpRel=true, ...}) = if addr >= startAddr andalso addr < endAddr then () else hasNonLocalReference := true | checkClosure _ = hasNonLocalReference := true fun processNonInlines (Declar{ value = decVal, addr = decAddr, ... }, decSpval, (decs, otherChanges)) = (* Have a look at the old entry to see if it's a constant. *) let val oldEntry = lookupOldAddr( {addr=decAddr, level=0, fpRel=true, lastRef=false}, nestingOfThisProcedure, 0) val oldGen = optGeneral oldEntry in if isConstnt oldGen then (mkDec (decSpval, oldGen) :: decs, otherChanges) (* It's already a constant - don't reprocess. *) else let (* Set this entry to create a recursive call if we load the address while processing the function. The recursive call may come about as a result of expanding an inline function which then makes the recursive call. *) local val recursive = simpleOptVal (mkGenLoad (0, ~1, false, false)) in val _ = enterDec(decAddr, recursive); val _ = enterNewDec(decSpval, recursive) end; (* Now copy this entry. *) val ins = optimise(decVal, NONE) val gen = optGeneral ins; val spec = optSpecial ins; (* The general value is either a reference to the declaration or a constant if the function has just been compiled into a code segment. *) val isConstant = isConstnt gen val optGen = case gen of Constnt _ => gen | Lambda{closure, ...} => ( List.app checkClosure closure; mkLoad (decSpval, 0) ) | _ => raise InternalError "processNonInlines: Not a function"; (* Explicitly reset the entry in the new table. *) val _ = enterNewDec(decSpval, simpleOptVal optGen); (* If this is a small function we leave the special value so it can be inserted inline. Otherwise we clear it. *) val optSpec = case spec of Lambda{ isInline=NonInline, ...} => CodeNil | _ => optSpecial ins; val nowInline = not (isCodeNil optSpec) andalso isCodeNil(optSpecial oldEntry) (* If this is now a constant or it is a small function when it wasn't before we need to reprocess everything which depends on it to try to get the constant inserted everywhere it can be. *) in enterDec (decAddr, optVal { general = optGen, special = optSpec, environ = optEnviron ins, decs = optDecs ins, (* Should be nil. *) recCall = optRec ins }); ( mkDec (decSpval, gen) :: decs, otherChanges orelse isConstant orelse nowInline ) end end | processNonInlines _ = raise InternalError "processNonInlines: not Declar" fun repeatProcess () = let val (decs, haveChanged) = (* Use foldr here to keep the result in the same order in case we can compile them immediately below. *) ListPair.foldr processNonInlines ([], false) (nonInlines, addresses); in if haveChanged then repeatProcess () else decs end val decs = repeatProcess () val allAreConstants = List.foldl (fn(Declar{value=Constnt _, ...}, others) => others | _ => false) true decs (* If hasNonLocalReference is still false we can code-generate the mutual declarations. *) val decs = if ! hasNonLocalReference orelse allAreConstants then decs else let (* Create a tuple of Extract entries to get the result. *) val extracts = List.map ( fn (Declar{addr, ...}) => mkLoad(addr, 0) | _ => raise InternalError "extracts: not Declar") decs val code = mkEnv[mkMutualDecs decs, mkTuple extracts] (* Code generate it. *) val results = evaluate code fun reprocessDec(Declar{addr=decAddr, ...}, decSpval, (offset, others)) = let val oldEntry = lookupOldAddr( {addr=decAddr, level=0, fpRel=true, lastRef=false}, nestingOfThisProcedure, 0) in let val newConstant = findEntryInBlock results offset in (* Replace the entry by an entry with a constant. *) enterNewDec(decSpval, simpleOptVal newConstant); enterDec (decAddr, optVal { general = newConstant, special = optSpecial oldEntry, environ = optEnviron oldEntry, decs = optDecs oldEntry, (* Should be nil. *) recCall = optRec oldEntry }); (offset+1, mkDec(decSpval, newConstant) :: others) end end | reprocessDec _ = raise InternalError "reprocessDec: not Declar" val (_, newDecs) = ListPair.foldl reprocessDec (0, []) (nonInlines, addresses); in newDecs (* We've converted them all to constants. *) end (* Deal with the rest of the block *) val rest = copyDeclarations vs val result = case decs of [] => [] | [singleton] => [singleton] | multiple => [mkMutualDecs multiple] in (* and put these declarations onto the list. *) optVal { general = optGeneral rest, special = optSpecial rest, environ = optEnviron rest, decs = result @ optDecs rest, recCall = optRec rest } end | copyDeclarations [v] = (* Last expression. *) optimise(v, tailCall) | copyDeclarations (v :: vs) = let (* Not a declaration - process this and the rest.*) val copiedNode = optimise(v, NONE); val rest = copyDeclarations vs; in (* This must be a statement whose result is ignored. Put it into the declaration list. *) optVal { general = optGeneral rest, special = optSpecial rest, environ = optEnviron rest, decs = optDecs copiedNode @ (optGeneral copiedNode :: optDecs rest), recCall = optRec rest } end; (* copyDeclarations *) in copyDeclarations envDecs end (* isNewenv *) | optimise (Recconstr entries, _) = (* The main reason for optimising record constructions is that they appear as tuples in ML. We try to ensure that loads from locally created tuples do not involve indirecting from the tuple but can get the value which was put into the tuple directly. If that is successful we may find that the tuple is never used directly so the use-count mechanism will ensure it is never created. *) let val newTab = stretchArray (initTrans, NONE); fun setTab (i, v) = update (newTab, i, SOME v); (* The record construction is treated as a block of local declarations so that any expressions which might have side-effects are done exactly once. *) val allConsts = ref true; fun makeDecs [] addr = {decs = [], gen_args = [], spec_args = []} | makeDecs (h::t) addr = let (* Declare this value. If it is anything but a constant there will be some code. *) val newDecs = newDecl (setTab, optimise(h, NONE), addr, true); val thisArg = getSome (newTab sub addr); (* Get the value back. *) val rest = makeDecs t (addr + 1); val gen = optGeneral thisArg; val spec = optSpecial thisArg; val UUU = if not (isConstnt gen) then allConsts := false else (); val specArgs = if isCodeNil spec andalso isConstnt gen then gen :: #spec_args rest else mkLoad (addr, 0) :: #spec_args rest in {gen_args = gen :: #gen_args rest, spec_args = specArgs, decs = newDecs @ #decs rest } end; val newDecs = makeDecs entries 1; val newRec = Recconstr (#gen_args newDecs); val gen = if !allConsts then makeConstVal newRec else newRec; val spec = Recconstr (#spec_args newDecs); val vec = StretchArray.vector newTab fun env ({addr, ...}:loadForm, depth, levels) : optVal = changeLevel (getSome (Vector.sub(vec, addr))) (depth - nestingOfThisProcedure) in optVal { general = gen, special = spec, environ = env, decs = #decs newDecs, recCall = ref false } end | optimise (Indirect{ base, offset }, _) = let (* Try to do the selection now if possible. *) val source = optimise(base, NONE) in case (optSpecial source, optGeneral source) of (spec as Recconstr _, _) => let (* The "special" entry we've found is a record. That means that we are taking a field from a record we made earlier and so we should be able to get the original code we used when we made the record. That might mean the record is never used and we can optimise away the construction of it completely. The entry we get back from findEntryInBlock will either be a constant or a load. In that case we need to look it up in the environment we used for the record to give us an optVal. The previous code in newDecl, commented out by AHL, also put indirections into the table. To save having the various cases in here we simply call optimiseProc which will deal with them. DCJM 9/1/01. *) val specEntry = findEntryInBlock spec offset; val newCode = optimiseProc (specEntry, errorEnv, (* We must always look up old addresses. *) optEnviron source, enterDec, (* should not be used *) enterNewDec, (* should not be used *) nestingOfThisProcedure, spval, earlyInline, evaluate, NONE, recursiveExpansions, maxInlineSize); in optVal { general = optGeneral newCode, special = optSpecial newCode, environ = optEnviron newCode, decs = optDecs source @ optDecs newCode, recCall = optRec newCode } end | (_ , gen as Constnt _ ) => (* General is a constant - Do the selection now. *) optVal { general = findEntryInBlock gen offset, special = CodeNil, environ = errorEnv, decs = optDecs source, recCall = ref false } | (_, gen) => (* No special case possible. *) optVal { general = mkInd (offset, optGeneral source), special = CodeNil, environ = errorEnv, decs = optDecs source, recCall = ref false } end | optimise (pt as Ldexc, _) = simpleOptVal pt (* just a constant so return it *) | optimise (Handle { exp, taglist, handler }, tailCall) = simpleOptVal (Handle {exp = general exp, taglist = map general taglist, handler = generalOptimise(handler, tailCall)} ) (* Case expressions are generated only in preCode from if-then-else. *) (* | optimise (Case { cases, test, default, min, max }) = let fun optimiseCasePair ((e,l):casePair) : casePair = (general e, l); in simpleOptVal (Case { cases = map optimiseCasePair cases, test = general test, default = general default, min = min, max = max } ) end *) | optimise (c as Container _, _) = simpleOptVal c | optimise (TupleFromContainer(container, size), _) = let (* If possible we want to optimise this away in the same way as a tuple made with Recconstr. We have to be careful, though, that we have no references to the container after we return. We first make declarations for all the fields and then return a special entry which when we apply the "env" environment function to it gives us returns. That way if we never actually use this tuple as a single entity it won't be created. If we don't actually use a field the corresponding declaration will be removed in cleanCode. *) val optCont = optimise(container, NONE) (* Since "container" will always be an Extract entry we can have multiple references to it in the declarations. Include an assertion to that effect just in case future changes make that no longer true. *) val _ = case optGeneral optCont of Extract _ => () | _ => raise InternalError "optimise - container is not Extract" val baseAddr = !spval val _ = spval := baseAddr + size val specialDecs = List.tabulate(size, fn n => mkDec(n+baseAddr, mkInd(n, optGeneral optCont))) val specialEntries = List.tabulate(size, fn n => mkLoad(n+baseAddr, 0)) fun env (l:loadForm, depth, levels) : optVal = changeLevel (simpleOptVal(Extract l)) (depth - nestingOfThisProcedure) in optVal { general = TupleFromContainer(optGeneral optCont, size), special = Recconstr specialEntries, environ = env, decs = optDecs optCont @ specialDecs, recCall = ref false } end | optimise (SetContainer{container, tuple, size}, _) = ( (* Push the set-container down the tree and then process it. If we've expanded an inline function we want to be able to find any tuple we're creating. *) case tuple of Cond _ => optimise(mkSetContainer(container, tuple, size), NONE) | Newenv _ => optimise(mkSetContainer(container, tuple, size), NONE) | _ => let val optCont = general container and optTuple = general tuple (* If the "tuple" is an expanded inline function it may well contain an if-expression. If both branches were tuples we will have expanded it already and the result will be a TupleFromContainer. *) fun pushSetContainer(Cond(ifpt, thenpt, elsept), decs) = Cond(ifpt, wrapEnv(List.rev(pushSetContainer(thenpt, []))), wrapEnv(List.rev(pushSetContainer(elsept, []))) ) :: decs | pushSetContainer(Newenv env, decs) = let (* Get the declarations off the block and apply pushSetContainer to the last. *) fun applyToLast (d, []) = raise List.Empty | applyToLast (d, [last]) = pushSetContainer(last, d) | applyToLast (d, hd :: tl) = applyToLast(hd :: d, tl) in applyToLast(decs, env) end | pushSetContainer(tuple as TupleFromContainer( Extract{addr=innerAddr, level=0, fpRel=true, ...}, innerSize), decs) = if innerSize = size then ( case optCont of Extract{addr=containerAddr, level=0, fpRel=true, ...} => let (* We can remove the inner container and replace it by a reference to the outer. *) fun replaceContainerDec [] = raise InternalError "replaceContainerDec" | replaceContainerDec ((hd as Declar{addr, ...}) :: tl) = if addr = innerAddr then mkDec(addr, mkLoad(containerAddr, 0)) :: tl else hd :: replaceContainerDec tl | replaceContainerDec(hd :: tl) = hd :: replaceContainerDec tl in (* Just replace the declaration. *) replaceContainerDec decs end | _ => SetContainer{container = optCont, tuple = tuple, size = size} :: decs ) else SetContainer{container = optCont, tuple = tuple, size = size} :: decs | pushSetContainer(tuple, decs) = SetContainer{container = optCont, tuple = tuple, size = size} :: decs in simpleOptVal(wrapEnv(List.rev(pushSetContainer(optTuple, [])))) end ) | optimise (Global g, _) = g | optimise _ = raise InternalError "unknown instruction" (* optimise *); (*****************************************************************************) (* body of optimiseProc *) (*****************************************************************************) in optimise(pt, tailCallEntry) end (* optimiseProc *); (*****************************************************************************) (* genCode *) (*****************************************************************************) fun genCode(pt, debugSwitches) = let val printCodeTree = DEBUG.getParameter DEBUG.codetreeTag debugSwitches and printCodeTreeAfter = DEBUG.getParameter DEBUG.codetreeAfterOptTag debugSwitches and maxInlineSize = DEBUG.getParameter DEBUG.maxInlineSizeTag debugSwitches and stringPrint = DEBUG.getParameter DEBUG.compilerOutputTag debugSwitches (* This ensures that everything is printed just before it is code-generated. *) val codeGenAndPrint = if printCodeTreeAfter then (fn code => let val pprint = prettyPrint(77, stringPrint); in pretty (code, pprint); codegen(code, debugSwitches) end ) else fn code => codegen(code, debugSwitches); fun preCodeAndPrint code = ( if printCodeTree then pretty (code, prettyPrint(77, stringPrint)) else (); preCode (codeGenAndPrint, code) ) (* Optimise it. *) val oldAddrTab = stretchArray (initTrans, NONE); val newAddrTab = stretchArray (initTrans, NONE); val insertedCode = let (* Strip off a surrounding declaration. *) val pt = case pt of Declar{value, ...} => value | _ => pt; fun lookupOldAddr ({addr, ...}: loadForm, depth, 0) = changeLevel (getSome (oldAddrTab sub addr)) depth | lookupOldAddr _ = raise InternalError "outer level reached in lookupOldAddr"; fun lookupNewAddr ({addr, ...}: loadForm, depth, 0) = ( case newAddrTab sub addr of NONE => simpleOptVal(mkGenLoad (addr, depth, true, false)) | SOME v => changeLevel v depth ) | lookupNewAddr _ = raise InternalError "outer level reached in lookupNewAddr"; fun enterNewDec (addr, tab) = update (newAddrTab, addr, SOME tab) fun enterDec (addr, tab) = ( (* If the general part is an Extract entry we need to add an entry to the new address table as well as the old one. This is sufficient while newDecl does not treat Indirect entries specially. *) case optGeneral tab of Extract{addr=newAddr, ...} => enterNewDec (newAddr, tab) | _ => (); update (oldAddrTab, addr, SOME tab) ); fun eval pt = evaluate (preCodeAndPrint pt) codeGenAndPrint; val resultCode = optimiseProc (pt, lookupNewAddr, lookupOldAddr, enterDec, enterNewDec, 0, (* nesting *) ref 1, false, (*Not inline*) eval, NONE, [], maxInlineSize) in (* Turn the arrays into vectors. *) StretchArray.freeze oldAddrTab; StretchArray.freeze newAddrTab; resultCode end; (* insertedCode *) val gen = optGeneral insertedCode; val spec = optSpecial insertedCode; val decs = optDecs insertedCode; (* No longer treat top-level tuples as special (experiment!). This avoids building an extra environment around the tuple containing the values needed to build it. SPF 1/5/95 *) (* ... val notSpecial = if isLambda spec then (lambdaInline (cLambda spec) = NonInline) else (isCodeNil spec orelse isRecconstr spec) (* SPF 1/5/95 *) ... *) (* Treat top-level tuples as "special" again. Why? Suppose we have the declaration: val foo = fn (x,y) => ... This generates a tuple (a 1-tuple, actually), containing the naive code (arguments as a pair) for foo. However, if foo is small enough to in-line, it will be treated as "special" and the "special" code to construct the tuple will contain the "special" code to call the function with arguments in registers. Since we are keen to get the latter code (VERY keen for RTS calls), we just have to pay the cost of building the second (environment) tuple. SPF 9/5/95 *) val notSpecial = case spec of Lambda{isInline, ...} => isInline = NonInline | CodeNil => true | _ => false in if notSpecial then let (* Nothing special or it is a non-inline procedure - Code-generate it. *) val optCode = wrapEnv(decs @ [gen]) ; in if isConstnt optCode (* Save code-generating it. *) then (fn () => optCode) else let val code = codeGenAndPrint (preCodeAndPrint optCode); in (* Return procedure to execute it *) (fn () => Global (simpleOptVal (mkConst (code ())))) end end else (* There is something in "special". *) if null decs then (* Simply return it - it can have no non-local references. *) (fn () => Global insertedCode) else let (* We have some declarations to evaluate but we can't do that until we execute the code. Expand out any mutual declarations and remove any expressions which are being evaluated only for their side-effects. *) fun expandMutual [] = [] | expandMutual (MutualDecs dec :: decs) = expandMutual dec @ expandMutual decs | expandMutual ((dec as Declar _) :: decs) = dec :: expandMutual decs | expandMutual (dec :: decs) = expandMutual decs; (* expression *) (* There seems to be a problem with this code - we put declarations in the tuple even if those declarations are unused. In fact we can't tell whether the declarations are used, because we haven't computed their reference counts yet. This means that we can generate a LOT of junk if someone writes "open Motif" without first constraining it with a signature. I'll have to come back and look at this some time. SPF 3/4/97 *) (* It's more difficult than that. We need the declarations for the "special" entries so the reference counts won't help. Because of the optimisations we may well have declarations which are unused in the general entries but which are referred to by special entries. The purpose of this vector is to provide the "general" value (always a constant because it's been evaluated) for any declarations used in the special values. DCJM 19/3/01. *) (* For each declaration in the sequence generate a corresponding load instruction to get its value. The declarations will normally be in ascending order but there may be gaps if a declaration contains a block with declarations in it. The gaps are replaced with zero values. However mutually recursive declarations may be in a random order so the list may have to be sorted. *) fun getValues ([]: codetree list) (addr: int): codetree list = [] (* Last of all the general value. *) | getValues (decs as (Declar{addr=declAddr, ...} :: vs)) (addr: int): codetree list = if declAddr < addr (* Already done? *) then getValues vs addr (* remove *) else let fun findEntry [] = CodeZero (* Not found. *) | findEntry (Declar{addr=dAddr, value, ...} :: rest) = if dAddr <> addr then findEntry rest else (* Found the declaration. *) ( case value of Container size => (* We mustn't put container values in the result since they won't persist after the code that creates them has exited. We replace them with TupleFromContainer entries. *) TupleFromContainer(mkLoad (addr, 0), size) | _ => mkLoad (addr, 0) (* Found - put in a load. *) ) | findEntry _ = raise InternalError "findEntry: not Declar" in findEntry decs :: getValues decs (addr + 1) end | getValues _ _ = raise InternalError "getValues: not a Declar"; val ext = gen :: getValues (expandMutual decs) 1; val newDecs = mkEnv (decs @ [mkTuple ext]); val code = codeGenAndPrint (preCodeAndPrint(newDecs)); in (* We now have the values of the declarations. *) fn () => let (* Execute the code - the result is a vector with the declarations in it. *) val decVals : address = let val res = code () in if isShort res then raise InternalError "Result vector is not an address" else toAddress res end; (* Construct a new environment so that when an entry is looked up the corresponding constant is returned. *) fun newEnviron oldEnv (lval, depth, levels) = let val oldVal = oldEnv (lval, depth, levels); (* Get the constant out of the table. *) fun look (Extract{addr, ...}) : codetree = let val base = decVals; val offset = toShort addr; in mkConst (loadWord (base, offset)) end | look (g as Indirect{base, offset}) : codetree = let val v = look base; in case v of Constnt caddr => let val base = toAddress caddr; val offset = toShort offset; in mkConst (loadWord (base, offset)) end | _ => g end | look g = g; (* end look *) val specVal = optSpecial oldVal; val envVal = (* SPF 10/12/96 *) if isCodeNil specVal then errorEnv else newEnviron (optEnviron oldVal) in optVal { general = look (optGeneral oldVal), special = specVal, environ = envVal, decs = optDecs oldVal, (* should be nil *) recCall = optRec oldVal } end (* newEnviron *); (* Get the general value, the zero'th entry in the vector. *) val generalVal = loadWord (decVals, toShort 0); in (* and return the whole lot as a global value. *) Global (optVal { general = mkConst generalVal, special = spec, (* <> CodeNil *) environ = newEnviron (optEnviron insertedCode), decs = [], recCall = optRec insertedCode }) end end end; (* genCode *) end (* CODETREE functor body *); polyml.5.2.1/mlsource/MLCompiler/CodeTree/CODE_SEG.ML0000644000175000017500000002706110772155560021002 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* Title: Code vector operations. Author: Dave Matthews, Cambridge University Computer Laboratory Copyright Cambridge University 1985 *) (* This module constructs and operates on segments for machine code. "csegMake" constructs and returns a segment of the specified size with give flag codes. The segment can be read and written a byte at a time using the "csegGet" procedure, and the code can be entered using "csegCall" (this is only used if the code is an "early" procedure which must be called by the compiler or is a declaration or expression at the outer level. More usually "csegAddr" is used to return the address of the segment which is then compiled into another procedure as a constant. When a procedure has been compiled "csegLock" is called to remove the "mutable" bit. The segment then becomes a constant and cannot be changed. It is used in two ways. Initially the code is assembled into a segment which expands as necessary so that there is always room for the code. When the code has been completely assembled and we know how much there is, it is copied into a segment of the correct size. *) structure CODE_SEG : (*****************************************************************************) (* CODESEG export signature *) (*****************************************************************************) (* We use "int" rather than "short" for the indexes, to try to keep *) (* the interface complexity in this module. SPF 14/7/94 *) sig type machineWord; (* added 14/7/94 SPF *) type short; (* added 15/7/94 SPF *) type address; (* added 14/7/94 SPF *) type cseg; val csegMake: int -> cseg; val csegConvertToCode: cseg -> unit; val csegLock: cseg -> unit; val csegGet: cseg * int -> Word8.word; val csegSet: cseg * int * Word8.word -> unit; val csegGetWord: cseg * int -> machineWord; val csegPutWord: cseg * int * machineWord -> unit; val csegCopySeg: cseg * cseg * int * int -> unit; val csegAddr: cseg -> address; val csegPutConstant: cseg * int * machineWord * 'a -> unit; end = (*****************************************************************************) (* CODESEG functor body *) (*****************************************************************************) struct open Address; open Misc; datatype csegStatus = Bytes | UnlockedCode | LockedCode type cseg = (csegStatus * address) ref; fun objLength (a : address) : int = Word.toInt (length a); val expansionFactor = 3; (* Factor by which to increase size of segment *) val F_mutable_bytes = Word8.orb (F_mutable, F_bytes); val F_mutable_code = Word8.orb (F_mutable, F_code); fun csegMake (size : int) : cseg = let val vec : address = alloc (toShort size, F_mutable_bytes, toMachineWord 0); in ref (Bytes, vec) end; fun csegConvertToCode (r as ref (Bytes, addr)) : unit = let val U : unit = setFlags (addr, F_mutable_code); in r := (UnlockedCode, addr) end | csegConvertToCode _ = raise InternalError "csegConvertToCode: not a byte segment"; fun csegLock (r as ref (UnlockedCode, addr)) : unit = let val U : unit = setFlags (addr, F_code); in r := (LockedCode, addr) end | csegLock _ = raise InternalError "csegConvertToCode: not an unlocked code segment"; fun csegAddr (ref (status, addr)) : address = if status = Bytes then raise InternalError "csegAddr: not a code segment" else addr; (* The old comment said: Copies the first "length" words from the start of "fromVec" to the "offset" words in "toVec". Which is right, except that it copies the first length BYTES, not words, even though "offset" is in words! *) fun csegCopySeg (ref (Bytes, fromAddr), ref (Bytes, toAddr), lengthBytes : int, offsetWords : int) = let val fromLengthWords : int = objLength fromAddr; val toLengthWords : int = objLength toAddr; val fromLengthBytes : int = wordSize * fromLengthWords; val toLengthBytes : int = wordSize * toLengthWords; val offsetBytes : int = wordSize * offsetWords (* Copy the data a byte at a time (rather than a word) because the bytes copied might look like bad addresses. Note: this makes the rather rash assumption that we're copying the "code" part of the cseg, not the "constants" part, which *should* be copied a word at a time, since otherwise we could have a garbage collection while we're half-way through copying a pointer. We need to completely redesign this module to fix this problem. SPF 14/7/94. The redesign is that you shouldn't put ML constants into a codeseg without calling csegConvertToCode first. SPF 13/2/97 *) fun copyBytes (fromPtr:int) (toPtr:int) = if fromPtr = lengthBytes then () else let val byte = loadByte (fromAddr, toShort fromPtr); in assignByte (toAddr, toShort toPtr, byte); copyBytes (fromPtr + 1) (toPtr + 1) end (* must check: 0 <= lengthBytes <= fromLengthBytes 0 <= offsetWords offsetBytes + lengthBytes <= toLengthBytes *) val maxOffsetBytes = toLengthBytes - lengthBytes; in (* Check the lengths are in the range. *) if lengthBytes < 0 orelse fromLengthBytes < lengthBytes then let val msg = concat [ "csegCopySeg: Byte length ", Int.toString lengthBytes, " out of range 0..", Int.toString fromLengthBytes ] in raise InternalError msg end else if offsetBytes < 0 orelse maxOffsetBytes < offsetBytes then let val msg = concat [ "csegCopySeg: Byte offset ", Int.toString offsetBytes, " out of range 0..", Int.toString maxOffsetBytes ] in raise InternalError msg end else copyBytes 0 offsetBytes end | csegCopySeg _ = raise InternalError "csegCopySeg: can only copy between byte segements" (* Returns a value from the vector. *) fun csegGet (ref (status, addr), byteIndex : int) : Word8.word = let val lengthWords = objLength addr; val lengthBytes = wordSize * lengthWords; in if 0 <= byteIndex andalso byteIndex < lengthBytes then loadByte (addr, toShort byteIndex) else let val msg = concat [ "csegGet: Index ", Int.toString byteIndex, " out of range 0..", Int.toString lengthBytes ] in raise InternalError msg end end; fun csegSet (ref (LockedCode, addr), byteIndex:int, value:Word8.word) : unit = raise InternalError "csegSet: can't change locked code segement" | csegSet (r as (ref (status, addr)), byteIndex:int, value:Word8.word) : unit = let val lengthWords : int = objLength addr; val lengthBytes : int = wordSize * lengthWords; in if byteIndex < 0 then let val msg = concat [ "csegSet: Index ", Int.toString byteIndex, " out of range 0..infinity" ] in raise InternalError msg end else if byteIndex < lengthBytes then assignByte (addr, toShort byteIndex, value) else if status <> Bytes then raise InternalError "csegSet: can't extend code segment" else let (* length <= byteIndex; construct a new segment*) val oldSize : int = lengthWords; (* size in words *) val expSize : int = expansionFactor * oldSize; val wordIndex : int = byteIndex div wordSize; val minSize : int = wordIndex + 1; val newSize : int = Int.max(expSize, minSize); (* create temporary codeseg (with larger byte-vector) *) val newVec = alloc (toShort newSize, F_bytes, toMachineWord 0); val newSeg = (Bytes, newVec); in (* copy the old code into the new codeseg *) csegCopySeg (r, ref newSeg, lengthBytes, 0); (* assign the byte to the new codeseg's byte-vector *) assignByte (newVec, toShort byteIndex, value); (* update the old segment to point at the new byte-vector *) r := newSeg end end; (* Puts in a word at a given word offset. Does not expand the segment. *) fun csegPutWord (ref (UnlockedCode, addr), wordIndex:int, value:machineWord) : unit = let val lengthWords : int = objLength addr; in if wordIndex < 0 orelse lengthWords <= wordIndex then let val msg = concat [ "csegPutWord: Index ", Int.toString wordIndex, " out of range 0..", Int.toString lengthWords ] in raise InternalError msg end else assignWord (addr, toShort wordIndex, value) end | csegPutWord _ = raise InternalError "csegPutWord: not an unlocked code segment" (* Gets a word at a given word offset. Does not expand the segment. *) fun csegGetWord (ref (status, addr), wordIndex : int) : machineWord = let val lengthWords : int = objLength addr; in if status = Bytes then raise InternalError "csegGetWord: can't load a a word from a byte segment" else if wordIndex < 0 orelse lengthWords <= wordIndex then let val msg = concat [ "csegGetWord: Index ", Int.toString wordIndex, " out of range 0..", Int.toString lengthWords ] in raise InternalError msg end else loadWord (addr, toShort wordIndex) end; (* csegPutConstant: store a constant into the code. Exactly how this is done is architecture dependent: on the i386 it's simply a store, on other architectures the constant may have to be split between instructions. This means that it has to be done by the RTS so as to be certain that we don't have a garbage collection with an invalid address. DCJM 2/1/01. *) fun csegPutConstant (ref (UnlockedCode, addr), byteIndex:int, value:machineWord, data: 'a) : unit = let val lengthWords : int = objLength addr; val lengthBytes : int = wordSize * lengthWords; in if byteIndex < 0 orelse lengthBytes <= byteIndex then let val msg = concat [ "csegPutConstant: Index ", Int.toString byteIndex, " out of range 0..", Int.toString lengthWords ] in raise InternalError msg end else RunCall.run_call4 RuntimeCalls.POLY_SYS_set_code_constant (addr, toShort byteIndex, value, data) end | csegPutConstant _ = raise InternalError "csegPutConstant: not an unlocked code segment" end; (* CODE_SEG *) polyml.5.2.1/mlsource/MLCompiler/CodeTree/CodeCons.i386.ML0000644000175000017500000000170310506226527021747 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure CodeCons = I386CODECONS ( structure CODESEG = CodeSeg structure DEBUG = Debug structure MISC = Boot.Misc structure ADDRESS = Address ); polyml.5.2.1/mlsource/MLCompiler/CodeTree/CodeCons.ppc.ML0000644000175000017500000000170310506226527022040 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure CodeCons = PPCCODECONS ( structure CODESEG = CodeSeg structure DEBUG = Debug structure MISC = Boot.Misc structure ADDRESS = Address ); polyml.5.2.1/mlsource/MLCompiler/CodeTree/CodeCons.sparc.ML0000644000175000017500000000170410506226527022367 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure CodeCons = SPARCCODECONS ( structure CODESEG = CodeSeg structure DEBUG = Debug structure MISC = Boot.Misc structure ADDRESS = Address ); polyml.5.2.1/mlsource/MLCompiler/CodeTree/CodeCons.x86_64.ML0000644000175000017500000000165310506226530022212 0ustar daviddavid(* Copyright (c) 2006 David C. J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure CodeCons = AMD64CODECONS ( structure CODESEG = CodeSeg structure DEBUG = Debug structure MISC = Boot.Misc structure ADDRESS = Address ); polyml.5.2.1/mlsource/MLCompiler/CodeTree/CodeSeg.ML0000644000175000017500000000147110772155650021100 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure CodeSeg = CODE_SEG; polyml.5.2.1/mlsource/MLCompiler/CodeTree/GCode.ML0000644000175000017500000000200610772156403020540 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure GCode = G_CODE ( structure CODECONS = CodeCons structure TRANSTAB = TransTab structure BASECODETREE = BaseCodeTree structure MISC = Boot.Misc structure ADDRESS = Address ); polyml.5.2.1/mlsource/MLCompiler/CodeTree/GCode.interpreted.ML0000644000175000017500000000222110772156434023067 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) local structure CodeCons = INTCODECONS ( structure CODESEG = CodeSeg structure DEBUG = Debug structure MISC = Boot.Misc structure ADDRESS = Address ); in structure GCode = INTGCODE ( structure CODECONS = CodeCons structure BASECODETREE = BaseCodeTree structure MISC = Boot.Misc structure ADDRESS = Address ) end; polyml.5.2.1/mlsource/MLCompiler/CodeTree/G_CODE.ML0000644000175000017500000037553711003075354020556 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* Title: General purpose code generator. Author: Dave Matthews, Edinburgh University / Prolingua Ltd. Copyright D.C.J. Matthews 1991 *) (* Code is generated into a vector which is handled largely by the "codecons" module, and then copied into a vector of the correct size when complete. There are two kinds of linkage conventions according to whether a procedure requires a closure or only a static link. Procedures with no non-local references are considered as closure calls but are optimised by combining the closure into the code itself. Note that the garbage collector assumes that all registers contain either numbers (tagged) or valid addresses (the word before contains length and flags). *) functor G_CODE ( (*****************************************************************************) (* CODECONS *) (*****************************************************************************) structure CODECONS : sig type machineWord; type short = Word.word; type address; type addrs; (* NB this is *not* the same as "address" *) type code; type reg; (* Machine registers *) datatype storeWidth = STORE_WORD | STORE_BYTE val regNone: reg; val regResult: reg; val regClosure: reg; val regStackPtr: reg; val regHandler: reg; val regReturn: reg; val argReg: int -> reg; val argRegs: int; (* No of args in registers. *) val regEq : reg * reg -> bool val regNeq : reg * reg -> bool val codeCreate: bool * string * Universal.universal list -> code; (* create - Makes the initial segment. *) val copyCode: code * int * reg list -> address; val resetStack: int * code -> unit; (* Set a pending reset *) (* Comparison operations. *) type tests; val testNeqW: tests; val testEqW: tests; val testGeqW: tests; val testGtW: tests; val testLeqW: tests; val testLtW: tests; val testNeqA: tests; val testEqA: tests; val testGeqA: tests; val testGtA: tests; val testLeqA: tests; val testLtA: tests; val Short: tests; val Long: tests; type labels; (* The source of a jump. *) val isCompRR: tests -> bool; (* Is the general form implemented? *) val isCompRI: tests * machineWord -> bool; (* Is the immediate value ok? *) (* Binary operations. veclen isn't binary but it makes things easier. *) type instrs; val instrMove: instrs; val instrAddA: instrs; val instrSubA: instrs; val instrRevSubA: instrs; val instrMulA: instrs; val instrOrW: instrs; val instrAndW: instrs; val instrXorW: instrs; val instrAddW: instrs; val instrSubW: instrs; val instrRevSubW: instrs; val instrMulW: instrs; val instrDivW: instrs; val instrModW: instrs; val instrLoad: instrs; val instrLoadB: instrs; val instrVeclen: instrs; val instrVecflags: instrs; val instrUpshiftW: instrs; val instrDownshiftW: instrs; val instrDownshiftArithW: instrs; val instrGetFirstLong: instrs; val instrStringLength: instrs; val instrSetStringLength: instrs; val instrBad: instrs; val instrIsRR: instrs -> bool; (* Is the general form implemented? *) val instrIsRI: instrs * machineWord -> bool; (* Is the immediate value ok? *) val genRR: instrs * reg * reg * reg * code -> unit; val genLoad: int * reg * reg * code -> unit; val genPush: reg * code -> unit; (* Store allocation. *) val allocStore: int * Word8.word * reg * code -> unit; val setFlag: reg * code * Word8.word -> unit; val completeSegment: code -> unit; (* Backward jumps. *) val ic: code -> addrs; (* Function call and linkage. *) datatype callKinds = Recursive | ConstantFun of machineWord * bool | CodeFun of code | FullCall val callFunction: callKinds * code -> unit; val jumpToFunction: callKinds * reg * code -> unit; val returnFromFunction: reg * int * code -> unit; val genStackOffset: reg * int * code -> unit; val raiseException: code -> unit; type cases type jumpTableAddrs val constrCases : int * addrs -> cases; val useIndexedCase: int * int * int * bool -> bool; val indexedCase : reg * reg * int * int * bool * code -> jumpTableAddrs; val makeJumpTable : jumpTableAddrs * cases list * addrs * int * int * code -> unit; val inlineAssignments: bool; val isIndexedStore: storeWidth ->bool val traceContext: code -> string end (* CODECONS *); (*****************************************************************************) (* TRANSTAB *) (*****************************************************************************) structure TRANSTAB : sig type machineWord; type ttab; type reg; type code; type tests; type instrs; type addrs; type storeWidth; type regSet; val ttabCreate: Universal.universal list -> ttab; (* Register allocation *) val getRegister: ttab * code * reg -> unit; val getAnyRegister: ttab * code -> reg; val freeRegister: ttab * reg -> unit; val clearCache: ttab -> unit; val removeRegistersFromCache: ttab * regSet -> unit; (* Stack handling *) type stackIndex; val noIndex: stackIndex; (* Push entries *) val pushReg: ttab * reg -> stackIndex; val pushStack: ttab * int -> stackIndex; val pushConst: ttab * machineWord -> stackIndex; val pushCodeRef: ttab * code -> stackIndex; val pushNonLocal: ttab * ttab * stackIndex * (unit -> stackIndex) * code -> stackIndex; val incsp: ttab -> stackIndex; val decsp: ttab * int -> unit; val pushAll: ttab * code -> unit; val pushAllBut: ttab * code * ((stackIndex -> unit) -> unit) * regSet -> unit; val pushNonArguments: ttab * code * stackIndex list * regSet -> reg list; val pushSpecificEntry: ttab * code * stackIndex -> unit; val reserveStackSpace: ttab * code * int -> stackIndex; (* Code entries *) val loadToSpecificReg: code * ttab * reg * stackIndex * bool -> stackIndex; val containsLocal: ttab * reg -> unit; val loadEntry: code * ttab * stackIndex * bool -> reg*stackIndex; val lockRegister: ttab * reg -> unit; val unlockRegister: ttab * reg -> unit; val loadIfArg: code * ttab * stackIndex -> stackIndex val indirect: int * stackIndex * code * ttab -> stackIndex; val moveToVec: stackIndex * stackIndex * int * storeWidth * code * ttab -> unit; val removeStackEntry: ttab*stackIndex -> unit; val resetButReload: code * ttab * int -> unit; val pushValueToStack: code * ttab * stackIndex * int -> stackIndex; val storeInStack: code * ttab * stackIndex * int -> unit; val isProcB: ttab * int -> bool; val pstackForDec: ttab * int -> stackIndex; val realstackptr: ttab -> int; val maxstack: ttab -> int; val makeEntry: ttab * code * stackIndex * int * int * bool -> unit; val incrUseCount: ttab * stackIndex * int -> unit; (* ... (* for debugging *) val printStack: ttab -> string -> string -> unit; ... *) type stackMark; val markStack: ttab -> stackMark; val unmarkStack: ttab * stackMark -> unit; type labels; val noJump: labels; val isEmptyLabel: labels -> bool datatype mergeResult = NoMerge | MergeIndex of stackIndex; val unconditionalBranch: mergeResult * ttab * code -> labels; val jumpBack: addrs * ttab * code -> unit; val fixup: labels * ttab * code -> unit; val merge: labels * ttab * code * mergeResult * stackMark -> mergeResult; val mergeList: labels list * ttab * code * mergeResult * stackMark -> mergeResult; type handler; val pushAddress: ttab * code * int -> handler; val fixupH: handler * int * ttab * code -> unit; val exiting: ttab -> unit; val haveExited: ttab -> bool; datatype regHint = UseReg of reg | NoHint; val binaryOp: stackIndex * stackIndex * instrs * instrs * ttab * code * regHint -> stackIndex; val assignOp: stackIndex * stackIndex * stackIndex * storeWidth * ttab * code -> unit; val compareAndBranch: stackIndex * stackIndex * tests * tests * ttab * code -> labels; type savedState; val saveState : ttab * code -> savedState val startCase : ttab * code * savedState -> addrs val chooseRegister : ttab -> reg val addRegUse : ttab * reg -> unit val getRegisterSet: machineWord -> regSet val allRegisters : regSet val regSetUnion: regSet * regSet -> regSet val listToSet: reg list -> regSet val getFunctionRegSet: stackIndex * ttab -> regSet val addModifiedRegSet: ttab * regSet -> unit val getModifedRegSet: ttab -> reg list datatype argdest = ArgToRegister of reg | ArgToStack of int val getLoopDestinations: stackIndex list * ttab -> argdest list val callCode: stackIndex * bool * ttab * code -> unit val jumpToCode: stackIndex * bool * reg * ttab * code -> unit end (* TRANSTAB *); (*****************************************************************************) (* MISC *) (*****************************************************************************) structure MISC : sig exception InternalError of string; end; structure ADDRESS: sig type machineWord; (* NB *not* an eqtype *) type short = Word.word; type address; val wordEq: 'a * 'a -> bool; val isShort: 'a -> bool; val unsafeCast : 'a -> 'b; val toMachineWord: 'a -> machineWord; val toShort: 'a -> short; val toAddress: machineWord -> address; val loadByte: (address * short) -> Word8.word; val loadWord: address * short -> machineWord val flags: address -> Word8.word; val length: address -> short; val F_words: Word8.word; val F_bytes : Word8.word; val F_mutable: Word8.word; val alloc: short * Word8.word * machineWord -> address val isCode : address -> bool val isWords : address -> bool val call: address * machineWord -> machineWord val wordSize: int val isIoAddress : address -> bool end; structure BASECODETREE: BaseCodeTreeSig (*****************************************************************************) (* GCODE sharing constraints *) (*****************************************************************************) sharing type CODECONS.code = TRANSTAB.code sharing type CODECONS.instrs = TRANSTAB.instrs sharing type CODECONS.reg = TRANSTAB.reg sharing type CODECONS.tests = TRANSTAB.tests sharing type CODECONS.addrs = TRANSTAB.addrs sharing type ADDRESS.machineWord = CODECONS.machineWord = TRANSTAB.machineWord = BASECODETREE.machineWord sharing type ADDRESS.short = CODECONS.short sharing type ADDRESS.address = CODECONS.address sharing type CODECONS.storeWidth = TRANSTAB.storeWidth ) : (*****************************************************************************) (* GCODE export signature *) (*****************************************************************************) sig type codetree type machineWord val gencode: codetree * Universal.universal list -> unit -> machineWord; end = (*****************************************************************************) (* GCODE functor body *) (*****************************************************************************) struct open CODECONS; open TRANSTAB; open ADDRESS; open MISC; (* after address, so we get MISC.length, not ADDRESS.length *) open RuntimeCalls; (* for POLY_SYS numbers *) open BASECODETREE; val F_mutable_words = Word8.orb (F_mutable, F_words); val F_mutable_bytes = Word8.orb (F_mutable, F_bytes); val objLength = ADDRESS.length; infix 7 regEq regNeq; (*************************** end of copied code *****************************) (* gets a value from the run-time system; usually this is a closure, but sometimes it's an int. *) val ioOp : int -> machineWord = RunCall.run_call1 POLY_SYS_io_operation; (* minor HACKS *) fun forLoop f i n = if i > n then () else (f i; forLoop f (i + 1) n); val word0 = toMachineWord 0; val word1 = toMachineWord 1; val DummyValue : machineWord = word0; (* used as result of "raise e" etc. *) val UnitValue : machineWord = word0; (* unit *) val False : machineWord = word0; (* false *) val True : machineWord = word1; (* true *) val Zero : machineWord = word0; (* 0 *) val constntTrue = Constnt True; val constntFalse = Constnt False; (* Where the result, if any, should go *) datatype whereTo = NoResult (* discard result *) | ToReg of reg (* put result in a specific register *) | ToPstack (* Need a result but it can stay on the pseudo-stack *); fun isNoResult NoResult = true | isNoResult _ = false; fun isToReg (ToReg _) = true | isToReg _ = false; fun isToPstack ToPstack = true | isToPstack _ = false; (* Are we at the end of the procedure. *) datatype tail = EndOfProc | NotEnd; fun isEndOfProc EndOfProc = true | isEndOfProc _ = false; fun chooseMergeRegister (transtable: ttab, whereto : whereTo, tailKind : tail) : whereTo = case tailKind of EndOfProc => ToReg regResult | NotEnd => (case whereto of ToPstack => let val rr : reg = chooseRegister transtable; in if rr regEq regNone (* No register is free *) then ToReg regResult (* So choose an arbitrary register *) else ToReg rr end | _ => whereto); (* We're marking the pstack prior to splitting and (probably) rejoining the code streams. If the code streams produce a value, try to ensure that we have a register free prior to the split, as otherwise we may not have a register free to put the return value into, which will cause mergeState (in TRANSTAB) to fail. SPF 13/11/1998 *) (* I've reverted to the original markStack in order to test my changes to Transtab which should fix this problem along with others. DCJM 28/6/2000 *) fun markStack (transtable : ttab, cvec : code, carry : bool) : stackMark = let (* val U : unit = if carry then let val freeReg : reg = getAnyRegister (transtable, cvec); in freeRegister (transtable, freeReg) end else (); *) in TRANSTAB.markStack transtable end; (* Code generate a procedure or global declaration *) fun codegen (pt : codetree, cvec : code, declOnPrevLevel : int * (unit -> stackIndex) * ttab * code -> stackIndex, isStaticLink : int -> bool, loadStaticLink : int * (unit -> stackIndex) * ttab * code -> stackIndex*stackIndex, staticLinkRegSet : int -> regSet, discardClosure : bool, numOfArgs : int, closureRefs : int, debugSwitches : Universal.universal list) : address = let fun matchFailed _ = raise InternalError "codegen: unhandled pattern-match failure" (* make the translation table *) val transtable = ttabCreate debugSwitches; (* Header code for procedure. *) (* Put the arguments and closure/static link register onto the pseudo-stack. *) fun registerArg reg uses = if uses > 0 then let val U : unit = getRegister (transtable, cvec, reg); val addrInd = pushReg (transtable, reg); in incrUseCount (transtable, addrInd, uses - 1); addrInd end else noIndex; (* Push the return address - may have multiple references because we may exit at any of the "tails". *) val returnAddress = if regReturn regEq regNone then let (* The return address has already been pushed onto the stack, probably because the normal call sequence does it. *) val addr = incsp transtable; val U : unit = incrUseCount (transtable, addr, 1000000); in addr end else registerArg regReturn 1000000; (* If discardClosure is true, all uses of the closure are directly-recursive calls which will be handled as "Recursive". This doesn't require the function closure as a parameter. SPF 22/5/95 Unfortunately, this is not quite true - we can still embed the function in a datatype, so we still require access to the closure. However, this is handled by storing the closure in the constants section (it *is* a constant) if we have any such uses of it. SPF 30/5/95 Note that it's important for correctness that we load "embedded" uses of an empty closure from the constants section. If we tried to be clever and use the value that we find in closureReg at function entry, we would generate bad code. That's because functions with empty closures may get called using the PureCode calling convention, which doesn't actually initialise closureReg. Note also that it's the *calls* to codegen that have to be right, since the function that loads the closure is actually a parameter to codegen. SPF 2/1/97 *) val closureOrSlAddr = registerArg regClosure (if discardClosure then 0 else 1) (* A vector to map argument numbers into offsets on the pseudo stack. *) val argRegTab : stackIndex Array.array = Array.array (argRegs:int, noIndex: stackIndex); (* off-by-ones adjusted SPF 7/6/94 *) local fun pushArgRegs i = if i < numOfArgs andalso i < argRegs then let (* DCJM 29/11/99. Changed to use lastRef rather than reference counts. *) val U : unit = Array.update (argRegTab, i, registerArg (argReg i) 1); in pushArgRegs (i + 1) end else (); in val U = pushArgRegs 0; end; fun exit () = let val stackArgs = if numOfArgs < argRegs then 0 else numOfArgs - argRegs; in if regReturn regEq regNone then let (* Reset to just above the return address. *) val U : unit = resetStack (realstackptr transtable - 1, cvec); in returnFromFunction (regNone, stackArgs, cvec) end else let val (returnReg, returnOffset) = loadEntry (cvec, transtable, returnAddress, false); val U : unit = removeStackEntry (transtable, returnOffset) val U : unit = resetStack (realstackptr transtable, cvec); in returnFromFunction (returnReg, stackArgs, cvec) end; exiting transtable end (* Allocate a segment of the required size. *) fun callgetvec (csize, flag : Word8.word, whereto) : stackIndex = let (* Get a register for the result. We cannot use the local ptr. for the result because it's supposed always to point to the bottom of the local area. If we get a persistent store trap which results in a garbage-collection the newly allocated object might well be moved. The local ptr would be updated to point to this new location but would then be set to the bottom of store. *) (* Use the preferred reg if we can. *) val resultReg = case whereto of ToReg rr => ( getRegister (transtable, cvec, rr); rr ) | _ => getAnyRegister (transtable, cvec); val U = allocStore (csize, flag, resultReg, cvec); val resAddr = pushReg (transtable, resultReg); val U : unit = containsLocal (transtable, resultReg); (* Not persistent address. *) in resAddr end; (* Remove the mutable bit without affecting the use-count. *) fun lockSegment (entry, flag) : unit = let val U = incrUseCount (transtable, entry, 1); val (baseReg, baseIndex) = loadEntry (cvec, transtable, entry, false); in CODECONS.setFlag (baseReg, cvec, flag); removeStackEntry(transtable, baseIndex) end; infix 9 sub; (* was only 5 - gave subtle bugs. SPF 11/8/94 *) (* Loads a local, argument or closure value; translating local stack addresses to real stack offsets. N.B. In the case of non-local variables lastRef is true only for the last non-local variable, not the last use of this particular variable. *) fun locaddr ({ addr, fpRel, lastRef, ...}: loadForm): stackIndex = if fpRel then if addr < 0 (* Args. *) then let (* First four args are on the stack. *) val argOffset = numOfArgs + addr; in if argOffset < argRegs then let val regEntry = Array.sub (argRegTab, argOffset) in (* If this is NOT the last reference we need to increment the use count on the entry. *) if lastRef then () else incrUseCount(transtable, regEntry, 1); regEntry end else pushStack (transtable, addr * ~wordSize) end (* positive address - reference to entry on the pstack. *) else let val resIndex = pstackForDec (transtable, addr) in if lastRef then () else incrUseCount(transtable, resIndex, 1); resIndex end else (* cp relative *) let (* If this is the last reference to the closure we want it to be removed afterwards. makeSl is not always called if, for example, the value is constant. To ensure the use-count is correct we increment it if it is used and then decrement it afterwards. DCJM 2/12/99. *) val dec = declOnPrevLevel (addr, fn () => ( incrUseCount(transtable, closureOrSlAddr, 1); closureOrSlAddr), transtable, cvec) in if lastRef andalso not discardClosure then incrUseCount(transtable, closureOrSlAddr, ~1) else (); dec end (* locaddr *); (* For each load of a local in the tree it calls the `add' procedure. *) fun identifyLoads (expList : codetree list, transtable) : (stackIndex -> unit) -> unit = fn (add : stackIndex -> unit) => let (* Need to identify declarations within the current block. The declaration numbers are reused so we have to identify new declarations. *) val newDecs : bool StretchArray.stretchArray = StretchArray.stretchArray (4, false); fun loads (pt: codetree) : unit = case pt of MatchFail => () | AltMatch (exp1, exp2) => let val U : unit = loads exp1; in loads exp2 end | Extract {fpRel = true, addr = locn, lastRef, ...} => (* DCJM 29/11/99. Only call add if this is the last reference. *) if locn < 0 (* args - only look at those in the registers. *) then let val argOffset = numOfArgs + locn; in if argOffset < argRegs andalso lastRef then add (Array.sub (argRegTab, argOffset)) (* SPF 7/6/94 *) else () end else if not (StretchArray.sub (newDecs,locn)) andalso lastRef (* Ignore new declarations. *) then add (pstackForDec (transtable, locn)) else () (* If discardClosure is true, then we've already zeroed the use-count for closureOrSlAddr, so don't adjust it now. SPF 22/5/95 *) | Extract {fpRel = false, addr = _, level = _, lastRef, ...} => if not discardClosure (* Non-local *) andalso lastRef (* DCJM 1/12/99. *) then add closureOrSlAddr (* Reference to the closure. *) else () | Eval {function, argList, ...} => let val U : unit = loads function; in List.app loads argList end | Declar {addr, value, ...} => let (* Indicate that this is a new declaration. *) val U : unit = StretchArray.update (newDecs, addr, true); in loads value (* Check the expression. *) end | Indirect {base, ...} => loads base | Newenv vl => List.app loads vl | Recconstr vl => List.app loads vl | BeginLoop(body, args) => (List.app loads args; loads body) | Loop argList => List.app loads argList | Handle{exp, taglist, handler} => (List.app loads taglist; loads exp; loads handler) | MutualDecs decs => ( (* First process the declarations to ensure that new declarations are marked as such then process the values being declared. *) List.app( fn Declar{addr, ...} => StretchArray.update (newDecs, addr, true) | _ => raise InternalError "MutualDecs: not Declar") decs; List.app loads decs ) | _ => (); in List.app loads expList end; (* code-generates code from the tree *) (* SPF 2/5/95 - primBoolOps added to prevent loop when trying to inline unsupported boolean primitives. We might get the calling sequence: genEval -> genCond -> genTest -> genOtherTests -> gencde -> genEval where both versions of genEval are for the same (unsupported) boolean comparison. If this occurs, the second call will have primBoolOps set to false, and will generate a call to the RTS. Note that "whereto" is only a HINT. There is no guarantee that specifying "ToReg r" will actually get the value loaded into that register. For example, the code that handles constants completely ignores this hint. SPF 15/8/96 *) fun gencde (pt, primBoolOps, whereto, tailKind, matchFailFn, loopAddr) : mergeResult = let val needsResult : bool = not (isNoResult whereto); val result : mergeResult = case pt of MatchFail => (* A bit like Raise *) let val U : unit = matchFailFn (); in if needsResult then MergeIndex(pushConst (transtable, DummyValue)) else NoMerge (* Unused. *) end | AltMatch (exp1, exp2) => (* A bit like Cond *) let val mergeResult : bool = needsResult andalso not (isEndOfProc tailKind); val mark1 : stackMark = markStack (transtable, cvec, mergeResult); val mark2 : stackMark = markStack (transtable, cvec, mergeResult); val failLabs = ref ([] : labels list); fun newMatchFailFn () = let val thisFailure : labels = unconditionalBranch (NoMerge, transtable, cvec); in failLabs := thisFailure :: !failLabs end; (* SPF 27/11/96 - merged values don't necessarily go into regResult *) val whereto : whereTo = chooseMergeRegister (transtable, whereto, tailKind); val exp1Result = genToRegister (exp1, whereto, tailKind, newMatchFailFn, loopAddr); (* Optimisation: return immediately, if possible, rather than jumping and then returning. This may turn the following unconditional branch into dead code, in which case it will be removed by the lower-level code generator. SPF 25/11/96 *) val U : unit = if (isEndOfProc tailKind) andalso not (haveExited transtable) then exit () else (); (* If exp1 succeeded, we skip exp2 *) val suceedLab : labels = unconditionalBranch (exp1Result, transtable, cvec); (* If exp1 failed, we come here (with NO result). *) val discard = mergeList (!failLabs, transtable, cvec, NoMerge, mark2) (* Compile exp2 using the OLD matchFailFn *) val exp2result = genToRegister (exp2, whereto, tailKind, matchFailFn, loopAddr); in (* If exp1 succeeded, we merge back in here. *) merge (suceedLab, transtable, cvec, exp2result, mark1) end | Eval {function, argList, ...} => genEval (function, argList, primBoolOps, whereto, tailKind, matchFailFn) | Declar {addr, value, references} => let val decl : stackIndex = genToStack (value, matchFailFn); (* Put the entry for this declaration in the table and set its use-count. *) (* Is it a procedure which can be called with a static link? *) val slProc : bool = case value of Lambda {makeClosure = false, ...} => true | _ => false; val U : unit= makeEntry (transtable, cvec, decl, addr, if references = 0 then 0 else 1, (* DCJM 29/11/99. *) slProc); in MergeIndex decl end | Extract ext => let val loc = locaddr ext in if needsResult then MergeIndex loc else (* If the result is not required discard it. This is used to remove variables which are not used on this path. *) ( removeStackEntry(transtable, loc); NoMerge ) end | Indirect {base, offset} => let val byteOffset : int = offset * wordSize; val baseCode : stackIndex = genToStack (base, matchFailFn); in (* Get the value to be indirected on. *) MergeIndex(indirect (byteOffset, baseCode, cvec, transtable)) end | Lambda lam => MergeIndex(genProc (lam, fn si => (), true, whereto, matchFailFn)) | Constnt w => MergeIndex(pushConst (transtable, w)) | Cond (testPart, thenPart, elsePart) => genCond (testPart, thenPart, elsePart, whereto, tailKind, matchFailFn, loopAddr) | Newenv vl => let (* Processes a list of entries. *) fun codeList [] whereto = (* Either the list is empty or the previous entry was a declaration. Generate a value to represent void.empty so that there is something on the stack. *) if needsResult then MergeIndex(pushConst (transtable, DummyValue)) else NoMerge (* Ignored *) | codeList ((valu as Declar _) :: valus) whereto = (* Declaration. *) let val discard = gencde (valu, true, NoResult, NotEnd, matchFailFn, loopAddr); in codeList valus whereto end | codeList [valu] whereto = (* Last entry is an expression. *) gencde (valu, true, whereto, tailKind, matchFailFn, loopAddr) | codeList (valu :: valus) whereto = (* Expression in a sequence. *) let val discard = gencde (valu, true, NoResult, NotEnd, matchFailFn, loopAddr); in codeList valus whereto end in codeList vl whereto end | BeginLoop(body, args) => let (* Execute the body which will contain at least one Loop instruction. There will also be path(s) which don't contain Loops and these will drop through. *) (* We must ensure that everything apart from the arguments has been pushed onto the stack. This may be unnecessary if the loop body is simple but is the only way to ensure that when we jump back to the start we have the same state as when we started. *) val U : unit = pushAllBut(transtable, cvec, identifyLoads (args, transtable), allRegisters); (* Load the arguments. We put them into registers at this stage to ensure that constants and "direct" entries are loaded. They may go onto the stack, which is fine. It could be worth doing this in two passes, the first simply evaluating the arguments onto the pstack, the second loading them into registers since that would generate better code when some arguments are constants but others are expressions that push those constants onto the stack. *) fun genLoopArg (Declar {addr, value, references}) = let (* This is almost the same as a normal declaration except that we have to make sure that we use a new location, stack or register, since we're going to be changing the contents of this location. The easiest way to do that is to load it into a register. We could do better if we are loading the last reference to the initial value in which case we could reuse its location. *) val index = genToStack(value, matchFailFn) val (_, decl) = loadEntry(cvec, transtable, index, true) (* It should not be a static-link function - just check. *) val _ = case value of Lambda {makeClosure = false, ...} => raise InternalError "LoopArg: static link function" | _ => () in makeEntry (transtable, cvec, decl, addr, if references = 0 then 0 else 1, (* DCJM 29/11/99. *) false); decl end | genLoopArg _ = raise InternalError "genLoopArg: not a declaration" val argIndexList = map genLoopArg args; (* Now we have loaded the registers we can find out the destinations i.e. the register or stack location they were in at the start of the loop. We have to do this after we've loaded all the arguments because we may have pushed some onto the stack as we loaded the later ones. That's fine so long as when we loop we put the new values in the same place. *) val U : unit = clearCache transtable; val argDestList = getLoopDestinations(argIndexList, transtable) (* Start of loop *) val startLoop (* L1 *) = ic cvec; val startSp = realstackptr transtable; in gencde (body, true, whereto, tailKind, matchFailFn, SOME(startLoop, startSp, argDestList)) end | Loop argList => let val (startLoop, startSp, argDestList) = case loopAddr of SOME l => l | NONE => raise InternalError "No BeginLoop for Loop instr" (* Evaluate the arguments. Try to put them in the destination register if we can. It doesn't matter at this stage too much. *) fun evalArg(arg, dest) = let val whereto = case dest of ArgToRegister reg => ToReg reg | ArgToStack _ => ToPstack val res = gencde (arg, true, whereto, NotEnd, matchFailFn, NONE) in case res of MergeIndex index => index | NoMerge => raise InternalError "evalArg: no result" end val argsOnPstack : stackIndex list = ListPair.map evalArg (argList, argDestList) fun moveArgs([], []) = [] | moveArgs(arg :: args, ArgToRegister reg :: dests) = let (* Do it in reverse order so that we can delay locking the register arguments. *) val argEntries = moveArgs(args, dests) val argEntry = loadToSpecificReg (cvec, transtable, reg, arg, false) in lockRegister(transtable, reg); argEntry :: argEntries end | moveArgs(arg :: args, ArgToStack offset :: dests) = ( storeInStack (cvec, transtable, arg, offset); moveArgs(args, dests) (* storeInStack removes its table entry *) ) | moveArgs _ = raise InternalError "moveArgs: Mismatched arguments" (* the arguments are now all in their rightful places. *) val argEntries = moveArgs(argsOnPstack, argDestList); in (* Remove the entries and unlock the registers. It may be unnecessary to remove the entries because we're about to fix up a jump but there's no harm in it. *) List.app ( fn (ArgToRegister reg) => unlockRegister(transtable, reg) | _ => ()) argDestList; List.app (fn index => removeStackEntry(transtable, index)) argEntries; (* We have to make sure that the real stack pointer is consistent. Don't have to record any change on the pseudo-stack because we are about to do a fixup and that will set the state to whatever it was when the test was done. *) resetStack (realstackptr transtable - startSp, cvec); (* Repeat. *) jumpBack (startLoop, transtable, cvec); (* Put on a dummy result. *) if needsResult then MergeIndex(pushConst (transtable, DummyValue)) else NoMerge (* Unused. *) end | Raise exp => let (* movl ,resultReg; jmp raisex *) val _ = (* Ensure the return address is on the stack in case we are tracing exceptions. *) pushSpecificEntry (transtable, cvec, returnAddress); val excVal = genToStack (exp, matchFailFn); val resultIndex = loadToSpecificReg (cvec, transtable, regResult, excVal, true); in raiseException cvec; removeStackEntry(transtable, resultIndex); exiting transtable; (* Nothing further *) (* Generate a value to represent void.empty so that there *) (* is something on the stack. *) if needsResult then MergeIndex(pushConst (transtable, DummyValue)) else NoMerge (* Unused. *) end | Handle {exp, taglist, handler} => let (* Push all regs - we don't know what the state will be when we reach the handler. *) (* ... val U : unit = pushAll (transtable, cvec); ... *) (* Experiment: don't push registers that aren't used in the handler. SPF 25/11/96 *) (* i.e. Push all registers except those whose last use occurs in the expression we're handling or in the set of exceptions we're catching. *) val U : unit = pushAllBut (transtable, cvec, identifyLoads (exp :: taglist, transtable), allRegisters); (* It's not clear what registers will be modified as a result of raising and handling an exception. Many functions may result in exceptions being raised and rather than add the registers to the register set of those functions it's probably better to include them in the modification set here. DCJM 26/11/00. *) val _ = addModifiedRegSet(transtable, allRegisters); (* This is the real stack state at the start of the handler *) val startOfHandler = realstackptr transtable; (* Remember this pseudo-stack position for later merge *) val mark : stackMark = markStack (transtable, cvec, needsResult); (* Save old handler - push regHandler *) val U : unit = genPush (regHandler, cvec); val oldIndex = incsp transtable; (* Now it's on the real stack we can remove it from the pstack. *) val U : unit = removeStackEntry(transtable, oldIndex); fun genTag (tag : codetree) : handler = let (* Push address of new handler. *) val rsp = realstackptr transtable; val handlerLab = pushAddress (transtable, cvec, rsp + 1); (* Push the exception to be caught. Ensure that it is the only item added to the stack. *) val locn = genToStack (tag, matchFailFn) val stackLocn = pushValueToStack (cvec, transtable, locn, rsp + 2); (* Now it's on the real stack we can remove it from the pstack. *) val U : unit = removeStackEntry(transtable, stackLocn); in handlerLab end; (* Generate the list of tags and handler addreses. We reverse the taglist so the tags that are first in the list are put on the stack last, so they are checked first. We reverse the result so that they get fixed up in stack order. (I don't think this is important, but I'm not sure.) Did you get all that? SPF 26/11/96 *) (* The checking order is important because we might have duplicate tags (unless the higher levels have removed them) e.g. exception X = Y ... handle X => ...| Y => ... . I don't think the fix-up order matters now. I think it had something to do with avoiding converting short branches into long ones. DCJM June 2000. *) val handlerList : handler list = rev (map genTag (rev taglist)); (* Initialise regHandler from regStackPtr *) val U : unit = genRR (instrMove, regStackPtr, regNone, regHandler, cvec); (* SPF 27/11/96 - merged values don't necessarily go into regResult *) val whereto : whereTo = chooseMergeRegister (transtable, whereto, tailKind); (* Code generate body, putting the result in result register. *) (* "NotEnd" because we have to come back to remove the handler. *) val bodyResult = genToRegister (exp, whereto, NotEnd, matchFailFn, loopAddr); (* Reload the old value of regHandler i.e. remove handler. *) val U : unit = genLoad ((realstackptr transtable - startOfHandler - 1) * wordSize, regStackPtr, regHandler, cvec) (* Optimisation: return immediately, if possible, rather than jumping and then returning. This may turn the following unconditional branch into dead code, in which case it will be removed by the lower-level code generator. SPF 25/11/96 *) val U : unit = if (isEndOfProc tailKind) andalso not (haveExited transtable) then exit () else (); (* Skip over the handler. *) val skipHandler = unconditionalBranch (bodyResult, transtable, cvec); (* Remove any result at the start of the handler. Need this because fixupH does not do setState. (It probably should do, though the state is fairly simple). *) val U : unit = case bodyResult of MergeIndex bodyIndex => removeStackEntry(transtable, bodyIndex) | NoMerge => (); (* Fix up the handler entry point - this resets the stack pointer and clears the cache since the state is not known. *) val U : unit list = map (fn handlerLab => fixupH (handlerLab, startOfHandler, transtable, cvec)) handlerList; (* The code for the handler body itself *) val handlerRes = genToRegister (handler, whereto, tailKind, matchFailFn, loopAddr); in (* Merge the results. SPF 25/11/96 *) merge (skipHandler, transtable, cvec, handlerRes, mark) end | Ldexc => ((* Exception packet is returned in result register. *) getRegister (transtable, cvec, regResult); MergeIndex(pushReg (transtable, regResult)) ) | Case {cases, test, default, min, max} => let (* Cases are constructed by the optimiser out of if-then-else expressions. There was a previous comment which suggested that an empty default case meant the case was exhaustive. I think this is a mistake which probably came from an early attempt at improving the handling of ML pattern matching. In fact an expression such as case x of Red=>.. | Green=>... | Blue => ... which is exhaustive will result in the Blue clause being the default case. *) val noDefault = case default of CodeNil => true | _ => false; val mergeResult = needsResult andalso not (isEndOfProc tailKind); (* Don't bother if the default is a constant and we don't actually want a result. This occurs as a result of ifs without elses (in Poly) being converted into cases. *) val needsDefaultCase = not noDefault (* andalso (needsResult orelse not (isConstnt default)) *); (* SPF 14/9/94; for ML: needsDefaultCase = not exhaustive *) (* DCJM: I think this is wrong. The Case codetree entry is constructed by the codetree optimiser out of if-then-else expressions. There are a very few instances of the ML code producing the equivalent of if-then without an else but they are all cas*) val U: unit = if noDefault andalso needsResult then raise InternalError "Case - no default" else (); val testValue = genToStack (test, matchFailFn); (* SPF 27/11/96 - merged values don't necessarily go into regResult *) val whereto : whereTo = chooseMergeRegister (transtable, whereto, tailKind); (* Count the total number of cases. *) fun countCases [] = 0 | countCases ((caseExp : codetree, caseLabels : int list) :: cps) = List.length caseLabels + countCases cps; (* This procedure decides whether to use a case instruction or a comparison depending on whether the cases are sparse. A more efficient algorithm, possibly using a binary chop, should probably be used for the sparse cases. *) fun caseCode (min:int) (max:int) (numberOfCases:int) [] : mergeResult = (* Put in the default case. *) if needsDefaultCase then genToRegister (default, whereto, tailKind, matchFailFn, loopAddr) else NoMerge (* Assume that we don't have a result. *) | caseCode (min:int) (max:int) (numberOfCases:int) (cp::cps) = if useIndexedCase (min, max, numberOfCases, noDefault) then let val mark = markStack (transtable, cvec, mergeResult); (* Get exclusive use so that indexedCase can modify the registers. *) val (testReg, testIndex) = loadEntry (cvec, transtable, testValue, true); val U: unit = removeStackEntry (transtable, testIndex); (* Need a work register. *) val U : unit = lockRegister (transtable, testReg); val workReg = getAnyRegister(transtable, cvec); val U: unit = freeRegister (transtable, workReg); val U : unit = unlockRegister (transtable, testReg); val caseInstr : jumpTableAddrs = indexedCase (testReg, workReg, min, max, noDefault, cvec); val startOfCase = saveState (transtable, cvec); (* Put in the default case, if there is one. *) val defaultCase = startCase (transtable, cvec, startOfCase); val exitDefault = if needsDefaultCase then let val defaultRes = genToRegister (default, whereto, tailKind, matchFailFn, loopAddr); (* Optimisation: return immediately, if possible, rather than jumping and then returning. This may turn the following unconditional branch into dead code, in which case it will be removed by the lower-level code generator. SPF 25/11/96 *) val U : unit = if (isEndOfProc tailKind) andalso not (haveExited transtable) then exit () else (); val lab = unconditionalBranch (defaultRes, transtable, cvec); val U : unit = case defaultRes of MergeIndex defaultIndex => removeStackEntry (transtable, defaultIndex) | NoMerge => () in lab end else unconditionalBranch (NoMerge, transtable, cvec); (* Generate the cases. N.B. We generate the list of cases in reverse order. makeJumpTable relies on this if we have any duplicates, which could arise if the higher level has turned an if-then-else into a case. e.g. if x = 1 then a else if x = 1 then b else c. *) fun genCases ((caseExp, caseLabels) :: cps) ccl = let val caseAddr = startCase (transtable, cvec, startOfCase); val mark = markStack (transtable, cvec, mergeResult); (* For each case label make an entry in the list. Add new entries at the beginning. *) val newCaseList = map (fn i => constrCases (i, caseAddr)) caseLabels @ ccl; (* Generate this case and exit if tail-recursive. *) val expResult = genToRegister (caseExp, whereto, tailKind, matchFailFn, loopAddr); val U : unit = if (isEndOfProc tailKind) andalso not (haveExited transtable) then exit () else (); in if null cps then ( (* Finished. *) makeJumpTable (caseInstr, newCaseList, defaultCase, min, max, cvec); expResult (* Last expression. *) ) else let val lab = unconditionalBranch (expResult, transtable, cvec); val U : unit = case expResult of MergeIndex expIndex => removeStackEntry(transtable, expIndex) | NoMerge => (); val lastResult = genCases cps newCaseList; in (* Now fix up the exit label. *) merge (lab, transtable, cvec, lastResult, mark) end end | genCases [] _ = raise InternalError "genCase - null case list"; (* genCases *) val caseResult = genCases (cp::cps) [] in merge (exitDefault, transtable, cvec, caseResult, mark) end (* useIndexedCase *) else let (* Don't use indexing. *) val mark = markStack (transtable, cvec, mergeResult); val lastCase = noDefault; val lastTest = null cps; (* If this is not the last test we increment the use count for the case expression so that it will not be thrown away. We need to do this because we're converting the case expression, which has a single "last reference" marker into a series of if-then-elses. *) val U : unit = if not lastTest then incrUseCount (transtable, testValue, 1) else () (* Compare the value with each of the case labels for this case. Returns the label jumped to if none of the cases match. *) fun putInCases [] = raise InternalError "putInCases has no cases" | putInCases [x] = (* last one - skip if value does not match. *) let val locn = pushConst (transtable, toMachineWord x); in (* should do arbitrary precision test here? Yes. *) compareAndBranch (testValue, locn, testNeqA, testNeqA, transtable, cvec) end | putInCases (x :: xs) = let (* More than one. If this one matches skip the other tests. *) val mark = markStack (transtable, cvec, mergeResult); (* Increment the use count so it doesn't get thrown away. *) val U = incrUseCount (transtable, testValue, 1); val locn = pushConst (transtable, toMachineWord x); val lab = (* should do arbitrary precision test here???? SPF *) compareAndBranch (testValue, locn, testEqA, testEqA, transtable, cvec); (* Drop through to other tests if it does not match. *) val rLab = putInCases xs; in merge (lab, transtable, cvec, NoMerge, mark); rLab end; (* putInCases *) val (caseExp : codetree, caseLabels : int list) = cp; val lab = putInCases caseLabels; (* If we have incremented the use count on the test value we need to decrement it here. That's because on this branch we are not going to test it again. DCJM 7/12/00. *) val U : unit = if not lastTest then incrUseCount (transtable, testValue, ~1) else () (* Generate this case and exit if tail-recursive. *) val thisCaseRes = genToRegister (caseExp, whereto, tailKind, matchFailFn, loopAddr); val U : unit = if isEndOfProc tailKind andalso not (haveExited transtable) then exit () else (); (* Jump round the other cases. *) val lab1 = unconditionalBranch (thisCaseRes, transtable, cvec); (* remove result of this case from pstack *) val U : unit = case thisCaseRes of MergeIndex resIndex => removeStackEntry(transtable, resIndex) | NoMerge => (); (* Do the other cases. *) val U : unit = fixup (lab, transtable, cvec); val caseResult = if lastCase then thisCaseRes else caseCode min max (numberOfCases - List.length caseLabels) cps in (* Merge all the results together. *) merge (lab1, transtable, cvec, caseResult, mark) end (* caseCode *); val result = caseCode min max (countCases cases) cases; (* v2.08 code-generator no longer clears the cache here *) (* val U : unit = clearCache transtable; *) in result end | MutualDecs dl => let (* Mutually recursive declarations. For the moment assume that these can only be procedures. Recurse down the list pushing the addresses of the closure vectors or forward references to the code, then unwind the recursion and fill in closures or compile the code. *) fun genMutualDecs [] = () | genMutualDecs ((Declar{value=dec, addr, references, ...})::ds) = ( case dec of Lambda (lam as { makeClosure,...}) => let val discard = genProc (lam, (* This procedure is called once the closure has been created but before the entries have been filled in. *) fn (r : stackIndex) => let val U : unit = makeEntry (transtable, cvec, r, addr, references, not makeClosure); in (* Now time to do the other closures. *) genMutualDecs ds end, null ds, (* Last one? *) ToPstack, matchFailFn) in () end | _ => let (* should only be constants i.e. procedures already compiled. *) val U : unit = makeEntry (transtable, cvec, genToStack (dec, matchFailFn), addr, references, false); in genMutualDecs ds end ) (* genMutualDecs *) | genMutualDecs (_) = raise InternalError "genMutualDecs - Not a declaration"; val U : unit = genMutualDecs dl; in NoMerge (* Unused. *) end | Recconstr reclist => let val vecsize = List.length reclist; in if vecsize = 0 (* shouldn't occur *) then MergeIndex(pushConst (transtable, UnitValue)) (* This code used to allocate a mutable vector for large (more than 5 word) allocations. The idea of this was to avoid calculating the values onto the stack. It didn't work, because the values have already been calculated by the time we get here. Furthermore, mutable allocations are more expensive (especially when we move the responsiblity for zeroing the heap from the RTS to the compiler), so I've now deleted this code. SPF 22/10/96 *) else let (* Since the vector is immutable, we have to evaluate all the values before we can allocate it. *) fun loadSmallVector [] byteOffset = callgetvec (vecsize, F_words, whereto) | loadSmallVector (h::t) byteOffset = let val v = genToStack (h, matchFailFn); val vec = loadSmallVector t (byteOffset + wordSize) val U : unit = moveToVec (vec, v, byteOffset, STORE_WORD, cvec, transtable) in vec end; val vec : stackIndex = loadSmallVector reclist 0; (* we have to make sure that the code-generator is not going to reorder the instructions so an instruction which might trap is put in the sequence of loads. *) val U : unit = completeSegment cvec; in MergeIndex vec end end | Container size => (* Reserve a number of words on the stack for use as a tuple on the stack. The result is the address of this space. *) MergeIndex(reserveStackSpace(transtable, cvec, size)) | SetContainer{container, tuple, size} => (* Copy the contents of a tuple into a container. *) let val vec = genToStack (container, matchFailFn); in case tuple of Recconstr cl => (* Simply set the container from the values. *) let fun setValue(v, byteOffset) = let val entry = genToStack (v, matchFailFn) in (* Move the entry into the container. Does not affect the use count for the container entry. *) moveToVec (vec, entry, byteOffset, STORE_WORD, cvec, transtable); byteOffset + wordSize end in List.foldl setValue 0 cl; () end | _ => let val tup = genToStack (tuple, matchFailFn); fun copy n = if n = size then () else let (* We need to ensure that the tuple entry is only removed when we load the last item from it. *) val byteOffset = n * wordSize val _ = if n = size - 1 then () else incrUseCount(transtable, tup, 1) val entry = indirect (byteOffset, tup, cvec, transtable) in moveToVec (vec, entry, byteOffset, STORE_WORD, cvec, transtable); copy (n+1) end in copy 0 end; removeStackEntry(transtable, vec); (* Free the container entry. *) (* Return a void result if necessary. *) if isNoResult whereto then NoMerge else MergeIndex(pushConst (transtable, DummyValue)) end | TupleFromContainer(container, size) => (* Create a tuple from the contents of a container. *) let val vec = genToStack (container, matchFailFn); val tup = callgetvec (size, F_words, whereto); fun copy n = if n = size then () else let (* We need to ensure that the container entry is only removed when we load the last item from it. *) val byteOffset = n * wordSize val _ = if n = size - 1 then () else incrUseCount(transtable, vec, 1) val entry = indirect (byteOffset, vec, cvec, transtable) in moveToVec (tup, entry, byteOffset, STORE_WORD, cvec, transtable); copy (n+1) end in copy 0; MergeIndex tup (* Result is the tuple. *) end | CodeNil => raise InternalError "gencde: can't code-generate CodeNil value" | Global _ => raise InternalError "gencde: can't code-generate Global value"; in result end (* gencde *) (* Generate an expression putting the result in any register, and return the location of it on the stack. *) and genToStack (pt : codetree, matchFailFn) : stackIndex = let val res = gencde (pt, true, ToPstack, NotEnd, matchFailFn, NONE) in case res of MergeIndex index => index | NoMerge => raise InternalError "genToStack: no result" end (* Generate an expression, with a hint that it should go into an argument register. SPF 15/8/96 *) and genArg (argNo : int, pt, matchFailFn) : stackIndex = let val whereto = if argNo < argRegs then ToReg (argReg argNo) else ToPstack val res = gencde (pt, true, whereto, NotEnd, matchFailFn, NONE) in case res of MergeIndex index => index | NoMerge => raise InternalError "genArg: no result" end (* ... (* Used when the result must be put in a register. *) and genToResult (pt, whereto, tailKind, matchFailFn, loopAddr) : unit = let (* Stack results are forced into result register *) val toWhere = if isToPstack whereto then ToReg regResult else whereto; val result = gencde (pt, true, toWhere, tailKind, matchFailFn, loopAddr); in (* If we need a result put it in the result reg. We request exclusive use of it because otherwise there is a problem when merging the results of an if-then-else if the result register is somewhere else on the pstack (e.g. let a == ...; if ... then a else ...) *) case toWhere of ToReg rr => loadToSpecificReg (cvec, transtable, rr, result, true) | _ => () end (* genToResult *) ... *) (* Used when the result must be put in a register. *) and genToRegister (pt, whereto, tailKind, matchFailFn, loopAddr) : mergeResult = let val result : mergeResult = gencde (pt, true, whereto, tailKind, matchFailFn, loopAddr); in (* If we need a result put it in the result reg. We request exclusive use of it because otherwise there is a problem when merging the results of an if-then-else if the result register is somewhere else on the pstack (e.g. let a == ...; if ... then a else ...), If we're at the end of a function, we're not merging, so we don't need exclusive use. However, I don't think we actually save anything by trying to make use of this fact so let's just be naive. SPF 27/11/96 *) case whereto of NoResult => NoMerge | ToReg rr => ( case result of MergeIndex index => MergeIndex(loadToSpecificReg (cvec, transtable, rr, index, true)) | NoMerge => raise InternalError "genToRegister: no result" ) | ToPstack => raise InternalError "genToRegister: not a register" end (* genToRegister *) (* `mutualRecursive' is only used for mutually recursive procedures where a procedure may not be able to fill in its closure if it does not procedure address has been pushed but before the code is generated. `lastDec' is true if there are no more mutually recursive declarations. *) and genProc ({ closure=closureList, makeClosure, name=lambdaName, body=lambdaBody, numArgs, closureRefs, ... }: lambdaForm, mutualRecursive, lastDec, whereto, matchFailFn) = let fun allConstnt [] = true | allConstnt (Constnt _ :: t) = allConstnt t | allConstnt _ = false; (* Finds the nth. item in the closure and returns the entry *) fun findClosure (h::t) 1 = (* found it *) h | findClosure (h::t) n = findClosure t (n - 1) | findClosure _ _ = raise InternalError "findClosure"; in if not makeClosure then let (* static link form *) (* If a procedure can be called by static link references then non-locals can be loaded by following the static chain. The offset is the entry in the (pseudo-)closure as with a procedure that requires a closure, but these can be translated into real stack offsets. A stack value which is loaded into a real or pseudo closure always has that load treated as one reference as far as the use counts are concerned, even though it may be loaded several times in an inner procedure or by different calls. `pushNonLocal' must not decrement the use count so that the stack values remain on the stack to be referenced by the procedure, and are only removed when the containing block is removed. *) val newCode = codeCreate (true (* just the code *), lambdaName, debugSwitches); (* Generates code for non-local references or recursive references. *) fun previous (prevloc, makeSl, newtab, cvec) = (* Although directly-recursive references do not involve calls to `previous' (the only directly-recursive references are recursive calls and they are dealt with in `loadSl') they may be produced as "kill entries" whose only effect is to indicate that the closure/static-link register is no longer required on a particular flow of control. DCJM 2/12/99. *) if prevloc = 0 then makeSl() else let (* The closure entry will usually be an Extract, but may have been compiled down to a real constant. This wouldn't happen if earlier phases were better at keeping constants out of closures (but that requires "sophisticated" analysis of mutually recursive declarations). SPF 8/3/96 We have to ensure that the constant value gets pushed onto "newtab" NOT "transtable", as otherwise we get very confusing bugs - as I found out the hard way! SPF 12/3/96 *) val closureEntry = findClosure closureList prevloc; in case closureEntry of Constnt w => (* Should we decrement the use count for closureOrSlAddr here? Probably, but I'm not yet absolutely convinced that it's safe, so I'm going to do nothing (carefully). I'll have to come back and look at this again later. SPF 2/5/97 *) pushConst (newtab, w) (* SPF 8/3/96 *) | Extract {fpRel = true, addr = locn, ...} => (* argument or on stack *) if locn < 0 (* argument *) then let val argOffset = numOfArgs + locn; in if argOffset < argRegs then pushNonLocal (transtable, newtab, Array.sub (argRegTab, argOffset), makeSl, cvec) else indirect (~locn * wordSize, makeSl (), cvec, newtab) end else (* on the stack *) pushNonLocal (transtable, newtab, pstackForDec (transtable, locn), makeSl, cvec) | Extract {fpRel = false, addr = locn, lastRef, ...} => (* Try the next level *) declOnPrevLevel (locn, fn () => pushNonLocal (transtable, newtab, closureOrSlAddr, makeSl, cvec), newtab, cvec) | _ => raise InternalError "previous: bad codetree in closure" end; (* Returns true if the procedure is to be called with a static link *) fun isSl prevloc = if prevloc = 0 then true (* Recursive call. It's this procedure *) else let (* Not directly recursive. *) val closureEntry = findClosure closureList prevloc; in (* We may have already compiled a "mutually recursive" function to a constant, if it doesn't actually depend on this one. (This wouldn't occur if the earlier stages were better at removing such fake dependencies.) SPF 8/3/96 If the constant is a closure, it doesn't need a static link; if it's a pure code segment, it may do. Is it safe to assume that it does? SPF 10/4/96 *) case closureEntry of Constnt (w : machineWord) => isCode (toAddress w) | Extract {fpRel = true, addr = correctedLoc, ...} => correctedLoc > 0 andalso isProcB (transtable, correctedLoc) | Extract {fpRel = false, addr = correctedLoc, ...} => isStaticLink correctedLoc (* Non-local *) | _ => raise InternalError "isSl: bad codetree in function closure" end; (* Loads the static link if the procedure is called with one and returns the entry point of the procedure on the stack. *) fun loadSl (prevloc, makeSl, callingTab, callingCvec): stackIndex*stackIndex = if prevloc = 0 then let (* Recursive call. *) val sl = makeSl(); (* Push the static link. *) val closureIndex = (* Load into regClosure *) loadToSpecificReg (callingCvec, callingTab, regClosure, sl, false); in (* And push the address of this procedure as the entry point. *) (pushCodeRef (callingTab, newCode), closureIndex) end else (* Non-recursive. *) case findClosure closureList prevloc of Extract { addr=correctedLoc, fpRel, lastRef, ...} => if fpRel then (* On this level *) let val closureIndex = (* Load closure/sl register with the static link. *) loadToSpecificReg (callingCvec, callingTab, regClosure, makeSl(), false) val procAddr = (* Get the address of the procedure. *) previous (prevloc, makeSl, callingTab, callingCvec) in (procAddr, closureIndex) end else (* Non-local *) loadStaticLink (correctedLoc, fn () => pushNonLocal (transtable, callingTab, closureOrSlAddr, makeSl, callingCvec), callingTab, callingCvec) | _ => raise InternalError "loadSl - closure not extract" (* loadSl *); (* Returns the register set for a static link function. *) fun slRegSet prevloc = if prevloc = 0 then allRegisters (* Recursive call - all registers. *) else let (* Not directly recursive. *) val closureEntry = findClosure closureList prevloc; in case closureEntry of Constnt (w : machineWord) => getRegisterSet w | Extract {fpRel = true, addr, ...} => if addr > 0 then getFunctionRegSet(pstackForDec (transtable, addr), transtable) else raise InternalError "slRegSet: argument" | Extract {fpRel = false, addr, ...} => staticLinkRegSet addr (* Non-local *) | _ => raise InternalError "slRegSet: bad codetree in function closure" end; (* Make sure all the closure values in registers are on the stack, in case they are used as non-locals. Changed this from the original code which pushed everything. DCJM 30/11/00. *) local fun pushClosure (Extract{fpRel=true, addr, ...}) = (* Local *) if addr < 0 then let val argOffset = numOfArgs + addr; in if argOffset < argRegs then pushSpecificEntry(transtable, cvec, Array.sub (argRegTab, argOffset)) else () end else (* on the stack *) pushSpecificEntry(transtable, cvec, pstackForDec (transtable, addr)) | pushClosure (Extract{fpRel=false, ...}) = (* Non-local or recursive reference: make sure the closure/static link pointer is on the stack. *) ( if discardClosure then () (* May not have a closure/sl. *) else pushSpecificEntry(transtable, cvec, closureOrSlAddr) ) | pushClosure _ = () (* Constant. *) in val _ = List.app pushClosure closureList end; (* Push a forward reference to the code in case of mutually recursive references. This is left as the result for normal references. *) val result = pushCodeRef (transtable, newCode); val U = mutualRecursive result; (* Any recursive references. *) (* Now code-generate the procedure, throwing away the result which will be put into the forward reference. *) val discard : address = codegen (lambdaBody, newCode, previous, isSl, loadSl, slRegSet, false, (* Presumably we need the static link, so don't discard regClosure. *) numArgs, closureRefs, debugSwitches); (* Note: we could sometimes discard the static link, but it's difficult to work out when this would be safe. That's because it would be unsafe if loadSl were ever called. This is in contrast to the "closure" case below, where loadSl is never called, so we can just check that the immediate closure contains only constants. SPF 2/5/97 *) in result end (* This is how DCJM optimises self-calls - rather than use "previous" to find out-of-scope references, he knows that the only such reference can be the closure itself, and so returns it as a codeRef. Treating the closure as a constant allows him to release closureReg (by setting its useCount to zero). I've removed that optimisation, and pick up self-references directly. This should allow a more general treatement eventually. SPF 20/5/95. Oops - we can have recursive references to the function that are not just simple calls (e.g. embedding it in a data-object). In such cases, we must store the closure in the constants section (since we've thrown away the copy that was in the closure register!). SPF 30/5/95. I've replaced the "isNil (lambdaClosure lam)" test with a test that all the items in the closure are constants. I've had to modify the "previous" code slightly, so that it can tell the difference between a load of a constant from the closure (translated into a load from the constants section) and a recursive reference to the closure itself. Later, we might want extend this by allowing codeRefs, not just pre-compiled constants and indirections, in the (logical) closure. SPF 2/5/97 *) else if allConstnt closureList (* Procedure with no non-local refererences. *) then let (* The only non-local references will be constants and references to the closure itself. We have to fetch these from the constants section because: (1) we don't save the closure register in the function body (2) we don't even initialise it if we use the PureCode calling convention SPF 2/1/97 *) val newCode = codeCreate (false (* make a closure *), lambdaName, debugSwitches); (* Should "previous" decrement the reference count for closureOrSlAddr? Probably, but I'm not quite sure that it's safe yet. It would be better to set discardClosure anyway so that we don't tie up a register in the first place, but for now I'll do nothing (carefully). SPF 2/5/97 *) fun previous (locn, _, newtab, code) = if locn = 0 then (* load the address of the closure itself *) pushCodeRef (newtab, newCode) else (* load a constant (item locn of the logical closure) *) case findClosure closureList locn of Constnt cval => pushConst (newtab, cval) | _ => raise InternalError "previous: closure not constant"; val closureAddr : address = codegen (lambdaBody, newCode, previous, fn n => false, fn (t, _, newtab, code) => raise InternalError "Not static link", fn _ => raise InternalError "Not static link", true, (* Discard regClosure *) numArgs, closureRefs, debugSwitches); val result = pushConst (transtable, toMachineWord closureAddr); val U : unit = mutualRecursive result; in result end else let (* Full closure required. *) (* Item n of the logical closure is which item of the physical closure? *) fun translateClosureIndex (Constnt _ :: t) 1 = raise InternalError "translateClosureIndex: constants don't belong in physical closure" | translateClosureIndex (h :: t) 1 = 1 | translateClosureIndex (Constnt _ :: t) n = translateClosureIndex t (n - 1) | translateClosureIndex (h :: t) n = translateClosureIndex t (n - 1) + 1 | translateClosureIndex [] _ = raise InternalError "translateClosureIndex: bad index into logical closure" (* Some of the non-local references will be references to the closure itself (for example, to embed it into a data-structure). We have to treat these slightly specially. They're still handled in the normal way by the reference-counting mechanism, so we don't have to do anything *too* clever here. SPF 2/1/97 If we're accessing a known constant in the closure, load it from the constants section rather than from the closure itself. Should we decrement the reference count for closureOrSlAddr here? Probably, but I'm not yet entirely sure that it would be safe. SPF 6/5/97 *) fun previous (locn, makeSl, newtab, cvec) = if locn = 0 then makeSl () (* load the address of the closure itself *) else let val closureItem = findClosure closureList locn; in case closureItem of Constnt cval => pushConst (newtab, cval) (* load the value as a constant *) | _ => let val newLocn : int = translateClosureIndex closureList locn val sl : stackIndex = makeSl (); (* load the closure *) in indirect (newLocn * wordSize, sl, cvec, newtab) (* load value from the closure *) end end; val newCode = codeCreate (true (* just the code *), lambdaName, debugSwitches); val codeAddr : address = (* code-gen procedure *) codegen (lambdaBody, newCode, previous, fn i => false, fn (n , _, tt, code) => raise InternalError "Not static link", fn _ => raise InternalError "Not static link", false, (* We need regClosure *) numArgs, closureRefs, debugSwitches); val res : machineWord = toMachineWord codeAddr; in if lastDec then let (* Can avoid having to set and clear the mutable bit. *) (* Load items for the closure. *) (* Compare with the code for Recconstr *) fun loadItems [] offset = let (* get store for closure *) val vector = callgetvec (offset, F_words, whereto) in (* Put code address into closure *) moveToVec (vector, pushConst (transtable, res), 0, STORE_WORD, cvec, transtable); vector end | loadItems (Constnt _ :: t) offset = (* constants don't belong in the physical closure *) loadItems t offset | loadItems (h :: t) offset = let val valIndex : stackIndex = genToStack (h, matchFailFn); val vec = loadItems t (offset + 1) in moveToVec (vec, valIndex, offset * wordSize, STORE_WORD, cvec, transtable); vec end; val vector = loadItems closureList 1; in (* Prevent any traps before the last store. *) completeSegment cvec; (* Have to call this mutualRecursive to register the address. *) mutualRecursive vector; vector end else let (* More mutually recursive declarations. We have to allocate as a mutable segment and then clear the mutable bit. We no longer need to explicitly clear the closure, because that is now handled by the allocation routine in the low-level code generator. SPF 21/11/96 *) fun nonConstntCount [] = 0 | nonConstntCount (Constnt _ :: t) = nonConstntCount t | nonConstntCount (h :: t) = nonConstntCount t + 1; val closureSize = nonConstntCount closureList + 1; (* get store for closure *) val vector = callgetvec (closureSize, F_mutable_words, whereto); (* Put code address into closure *) local val locn = pushConst (transtable, res); in val U : unit = moveToVec (vector, locn, 0, STORE_WORD, cvec, transtable); end; local (* Must clear each word of the closure in case we get a garbage collection. We didn't use to need this on AHL RTS, because the RTS initialised the store itself, but we've now removed this major overhead. Then we didn't need it because CODECONS always initialised mutable allocations, but that's not a good way to do refs, so I've reinstated this code. SPF 11/12/96 We would like use binary zero rather than DummyValue (tagged 0), here since we could generate better code for it on some machines (e.g. the SPARC), but the lower-level code generator doesn't expect to see this (non) value, and it actually causes a core dump. SPF 11/12/96 *) val locn = pushConst (transtable, DummyValue); val wordsToClear : int = closureSize - 1; val U : unit = incrUseCount (transtable, locn, wordsToClear -1); (* N.B. moveToVec doesn't count as a use of vector. *) fun storeWord i = moveToVec (vector, locn, i * wordSize, STORE_WORD, cvec, transtable) in val U : unit = forLoop storeWord 1 wordsToClear end; (* Have to ensure that the closure remains on the psuedo-stack until we've filled in all uses of it. The only references may be in the closures of other procedures so it's possible that its use-count could be zero when `mutualRecursive' returns. Have to increment the use-count and then decrement it afterwards to make sure it is still on the stack. *) val U : unit = incrUseCount (transtable, vector, 1); (* Any mutually recursive references. *) val U : unit = mutualRecursive vector; (* Load items for the closure. *) fun loadItems [] addr = () | loadItems (Constnt _ ::t) addr = (* constants don't belong in the physical closure *) loadItems t addr | loadItems (h::t) addr = let val U : unit = moveToVec (vector, genToStack (h, matchFailed), addr, STORE_WORD, cvec, transtable); in loadItems t (addr + wordSize) end; val U : unit = loadItems closureList wordSize; val U : unit = lockSegment (vector, F_words); val U : unit = incrUseCount (transtable, vector, ~1); in vector end end end (* genProc *) (* Generates test for if..then..else or while..do. Returns address of address field of jump. If jumpOn is true the jump is taken if the condition is true, if false it is taken if the condition is false. *) and genTest (pt, jumpOn, matchFailFn) : labels = let (* See if we can generate a conditional instruction. *) (* Those we can't deal with specially are evaluated to the stack and tested. *) fun genOtherTests () = let val top = gencde (pt, false, ToPstack, NotEnd, matchFailFn, NONE); (* Compare the result with false (tagged (0)) and skip if it does not match. *) val tst = if jumpOn then testNeqW else testEqW; val constFalse = pushConst (transtable, False); in case top of MergeIndex topIndex => compareAndBranch (topIndex, constFalse, tst, tst, transtable, cvec) | NoMerge => raise InternalError "genTest: No result" end (* genOtherTests *); in case pt of Cond (testPart, thenPart, elsePart) => let val mark1 = markStack (transtable, cvec, false); val mark2 = markStack (transtable, cvec, false); (* Test the condition part. *) val a : labels = genTest (testPart, false, matchFailFn) in if isEmptyLabel a then (* The test evaluated to true. We must only generate the then-part. This is more than an optimisation. "Nojump" does not set the correct state for the else-part which can cause problems. *) ( unmarkStack(transtable, mark2); unmarkStack(transtable, mark1); genTest (thenPart, jumpOn, matchFailFn) ) else if haveExited transtable then (* Unconditional jump. Only need the else-part. *) ( unmarkStack(transtable, mark2); unmarkStack(transtable, mark1); fixup (a, transtable, cvec); genTest (elsePart, jumpOn, matchFailFn) ) else let (* Now the `then-part' *) val b : labels = genTest (thenPart, jumpOn, matchFailFn); (* Put in an unconditional jump round the `else-part'. This will be taken if the `then-part' drops through. *) val notB = unconditionalBranch (NoMerge, transtable, cvec); (* Fill in the label for the then-part part. *) val U : unit = fixup (a, transtable, cvec); (* Now do the `else-part' and jump on the inverse of the condition. *) val notC = genTest (elsePart, not jumpOn, matchFailFn); (* i.e. we drop though if the condition is the one we should have jumped on. Now merge in the first label so we have both cases when we should jump together, *) val U = merge (b, transtable, cvec, NoMerge, mark2); (* and now take the jump. *) val resultLab = unconditionalBranch (NoMerge, transtable, cvec); (* Come here if we are not jumping. *) val U : unit = fixup (notB, transtable, cvec); val U = merge (notC, transtable, cvec, NoMerge, mark1); in resultLab end end (* Simple Cases generate better jumping code like this, rather than creating a boolean return value, then testing it and jumping on the result. We could be less special-case here, but this particular case is exceptionally important for handling inlined selector functions. SPF 24/2/1998 *) | Case {cases = [(result, [tag])], test, default, min, max} => let val equalFun : codetree = Constnt (ioOp POLY_SYS_equala); val arguments : codetree list = [test, Constnt (toMachineWord tag)]; val eqTest : codetree = Eval {function = equalFun, argList = arguments, earlyEval = true}; in genTest (Cond (eqTest, result, default), jumpOn, matchFailFn) end (* Constants - primarily for andalso/orelse. *) | Constnt w => (* If true and we jump on true or false and jump on false *) (* then put in an unconditional jump. *) if wordEq (w, True) = jumpOn then unconditionalBranch (NoMerge, transtable, cvec) else noJump (* else drop through. *) | Newenv vl => let (* Blocks and particularly inline procedures. *) (* Process the list up to the last item with "gencde", and the last item with "genTest". *) fun codeBlock [] = noJump | codeBlock [h] = genTest (h, jumpOn, matchFailFn) | codeBlock (h :: t) = let val U : mergeResult = gencde (h, true, NoResult, NotEnd, matchFailFn, NONE); in codeBlock t end; in codeBlock vl end | Eval {function = Constnt oper, argList = args, ...} => (* May be an interface operation which can be put in line. *) let (* Generate a compare instruction. *) fun genCompare (arg1, arg2, t, f, ti, fi) = let val test = if jumpOn then t else f; val revTest = if jumpOn then ti else fi; in (* Check that the instruction is implemented. N.B. if the first argument is a constant we will use the reversed instruction. It may only be implemented for constant values so it is not sufficient to check that the general form is implemented. *) if isCompRR test orelse (case arg1 of Constnt w => isCompRI (revTest, w) | _ => false) orelse (case arg2 of Constnt w => isCompRI (test, w) | _ => false) then let (* Generate the instruction and get the direction. *) val locnOfArg1 = genToStack (arg1, matchFailFn); val locnOfArg2 = genToStack (arg2, matchFailFn); in compareAndBranch (locnOfArg1, locnOfArg2, test, revTest, transtable, cvec) end else genOtherTests () end (* genCompare *); in case args of [] => (* We don't currently have any nullary special cases *) genOtherTests () | [arg] => (* unary special cases *) if wordEq (oper,ioOp POLY_SYS_not_bool) then genTest (arg, not jumpOn, matchFailFn) else if wordEq (oper,ioOp POLY_SYS_is_short) then ( case arg of Constnt (w : machineWord) => if isShort w then genTest (constntTrue, jumpOn, matchFailFn) else genTest (constntFalse, jumpOn, matchFailFn) (* Since "isShort" is a monadic operation we pretend that it has a second argument of 0. *) | _ => if isCompRI (Short, Zero) then let val locnOfArg1 = genToStack (arg, matchFailFn); val locnOfArg2 = pushConst (transtable, Zero); val testOp = if jumpOn then Short else Long; in compareAndBranch (locnOfArg1, locnOfArg2, testOp, testOp, transtable, cvec) end else genOtherTests () ) else (* Non-special unary function.*) genOtherTests () | [arg1, arg2] => (* binary special cases *) if wordEq (oper,ioOp POLY_SYS_int_eq) (* intEq (tag tests) *) then genCompare (arg1, arg2, testEqW, testNeqW, testEqW, testNeqW) else if wordEq (oper,ioOp POLY_SYS_int_neq) (* intNeq (tag tests) *) then genCompare (arg1, arg2, testNeqW, testEqW, testNeqW, testEqW) else if wordEq (oper,ioOp POLY_SYS_word_eq) then genCompare (arg1, arg2, testEqW, testNeqW, testEqW, testNeqW) else if wordEq (oper,ioOp POLY_SYS_word_neq) then genCompare (arg1, arg2, testNeqW, testEqW, testNeqW, testEqW) else if wordEq (oper,ioOp POLY_SYS_equala) then genCompare (arg1, arg2, testEqA, testNeqA, testEqA, testNeqA) else if wordEq (oper,ioOp POLY_SYS_int_geq) then genCompare (arg1, arg2, testGeqA, testLtA, testLeqA, testGtA) else if wordEq (oper,ioOp POLY_SYS_int_leq) then genCompare (arg1, arg2, testLeqA, testGtA, testGeqA, testLtA) else if wordEq (oper,ioOp POLY_SYS_int_gtr) then genCompare (arg1, arg2, testGtA, testLeqA, testLtA, testGeqA) else if wordEq (oper,ioOp POLY_SYS_int_lss) then genCompare (arg1, arg2, testLtA, testGeqA, testGtA, testLeqA) else if wordEq (oper,ioOp POLY_SYS_word_geq) then genCompare (arg1, arg2, testGeqW, testLtW, testLeqW, testGtW) else if wordEq (oper,ioOp POLY_SYS_word_leq) then genCompare (arg1, arg2, testLeqW, testGtW, testGeqW, testLtW) else if wordEq (oper,ioOp POLY_SYS_word_gtr) then genCompare (arg1, arg2, testGtW, testLeqW, testLtW, testGeqW) else if wordEq (oper,ioOp POLY_SYS_word_lss) then genCompare (arg1, arg2, testLtW, testGeqW, testGtW, testLeqW) else (* Non-special binary function. *) genOtherTests () | _ => (* Functions with more than 2 arguments. *) genOtherTests () end (* constant functions *) | _ => (* Anything else *) genOtherTests () end (* if/then/else, cand and cor. NB if/then/else may be translated into a CASE by the optimiser and code-generated there. *) and genCond (testExp, thenExp, elseExp, whereto, tailKind, matchFailFn, loopAddr) : mergeResult = let val needsResult = not (isNoResult whereto); val mergeResult : bool = needsResult andalso not (isEndOfProc tailKind); val mark = markStack (transtable, cvec, mergeResult); val lab = genTest (testExp, false, matchFailFn); (* code for condition *) (* There used to be code in here to handle specially the case where the test expression was a constant. I've taken that out, partly because the simple cases are dealt with by the optimiser but more seriously because it's necessary to deal with the slightly more general case where the test expression results in a constant (e.g. "if not false" or "if (print "something"; true)" ). There was a bug in the case where the expression resulted in "true" since "lab" becomes "noJump" if the jump is never taken. "fixup" leaves "exited" as true so no code is generated for the else-part but it doesn't set the pseudo-stack properly which can cause problems while processing the else-part. DCJM 27 June 2000. *) in (* brb L1; ..then.. brb L2; L1: ..else..; L2: *) case elseExp of CodeNil => (* No else-part - used for pattern-matching too *) let (* code for "then part" - noResult 'cos we generate "void" below*) val discard = genToRegister (thenExp, NoResult, tailKind, matchFailFn, loopAddr); val discard = merge (lab, transtable, cvec, NoMerge, mark); in if needsResult then MergeIndex(pushConst (transtable, DummyValue)) (* Generate a void result. *) else NoMerge (* Unused *) end | _ => if isEmptyLabel lab then ( (* Only the "then" part will be executed. Don't generate the else-part. *) unmarkStack(transtable, mark); gencde (thenExp, true, whereto, tailKind, matchFailFn, loopAddr) ) else if haveExited transtable then ( (* Jump was unconditional - just generate the else-part. *) unmarkStack(transtable, mark); fixup (lab, transtable, cvec); gencde (elseExp, true, whereto, tailKind, matchFailFn, loopAddr) ) else let (* SPF 27/11/96 - merged values don't necessarily go into regResult *) val whereto : whereTo = chooseMergeRegister (transtable, whereto, tailKind); (* code for "then part" *) val thenResult = genToRegister (thenExp, whereto, tailKind, matchFailFn, loopAddr); val U : unit = if isEndOfProc tailKind andalso not (haveExited transtable) then exit() else (); val lab1 = unconditionalBranch (thenResult, transtable, cvec); (* Get rid of the result from the stack. If there is a result then the "else-part" will push it. *) val U : unit = case thenResult of MergeIndex thenIndex => removeStackEntry(transtable, thenIndex) | NoMerge => (); (* start of "else part" *) val U : unit = fixup (lab, transtable, cvec); val elseResult = genToRegister (elseExp, whereto, tailKind, matchFailFn, loopAddr) in merge (lab1, transtable, cvec, elseResult, mark) end end (* genCond *) (* Call a function. Detects special cases of calls to the run-time system to do simple operations such as int arithmetic and generates the instructions directly. For ordinary calls it has to distinguish between those called with a static-link and those called with a closure. *) and genEval (evalFun, argList, primBoolOps, whereto, tailKind, matchFailFn) : mergeResult = let val needsResult : bool = not (isNoResult whereto); val argsToPass : int = List.length argList; (* First evaluate all the arguments to the pseudo stack. This returns a list of pseudo-stack indexes for the registers. *) fun evalArgs (argList : codetree list) : stackIndex list = let fun ldArgs [] (argNo : int) = [] | ldArgs (h::t) (argNo : int) = let val argLocn = if argNo < argRegs then let (* Put into a register. *) val argReg = argReg argNo; (* If we are evaluating an expression we might as well put the result in the register we want to use. They may not stay there because loading other arguments may involve function calls which will use these registers. For that reason we don't put constants in yet. *) val whereto = case h of Constnt _ => ToPstack | _ => ToReg argReg in case gencde (h, true, whereto, NotEnd, matchFailFn, NONE) of MergeIndex index => index | NoMerge => raise InternalError "ldArgs: No result" end else genToStack (h, matchFailFn) in argLocn :: ldArgs t (argNo + 1) end (* ldArgs *); in ldArgs argList 0 end (* evalArgs *); (* Second phase of argument evaluation. Push the values onto the real stack or load them into the argument registers. The result is the stack base for stack arguments together with a list of pseudo-stack entries for the arguments. *) fun pushArgs (argList : stackIndex list) : int * stackIndex list = let fun ldArgs [] (stackAddr : int) (argNo : int) = (stackAddr, []) | ldArgs (argLoc::t) (stackAddr : int) (argNo : int) = if argNo < argRegs then let (* Put into a register. *) val argReg = argReg argNo; (* Load the first before putting these into the registers. *) val (rAddr : int, others) = ldArgs t stackAddr (argNo + 1); val regEntry = loadToSpecificReg (cvec, transtable, argReg, argLoc, false); in lockRegister (transtable, argReg); (rAddr, regEntry :: others) end else let (* Store on the real stack. *) (* We take the current stack pointer as the base for the stack args. *) val sAddr : int = if stackAddr < 0 then realstackptr transtable else stackAddr; val pushedEntry = pushValueToStack (cvec, transtable, argLoc, sAddr + 1); val (rAddr, others) = ldArgs t (sAddr + 1) (argNo + 1) in (rAddr, pushedEntry :: others) end (* ldArgs *); in ldArgs argList ~1 0 end (* pushArgs *); (* Load arguments for a normal call. First argRegs arguments go into registers, the rest are pushed onto the stack. Returns the stack offset of the last argument if there are more than argRegs. *) (* Called after a function call, to reflect the results of the function call. *) fun setupResult (argsPassed : int, needsResult : bool, tailCall : bool, transtable : ttab) : mergeResult = let val argRegsUsed : int = if argsPassed < argRegs then argsPassed else argRegs; in (* Unlock the argument registers *) forLoop (fn argNo => unlockRegister (transtable, argReg argNo)) 0 (argRegsUsed - 1); (* Remove any stack arguments. For tail-calls, we mustn't do this, because the stack arguments have already vanished from the pstack - that's because storeInStack consumes its argument. Conversely, pushValueToStack, used to set up stack arguments normal calls, does NOT consume its pstack argument. This means that we mustn't call decsp for tail-calls, which in turn means that the real stack pointer doesn't get correctly adjusted. Fortunately, this is (just about) OK because this code is unreachable, and TRANSTAB.mergeLab is clever enough to avoid merging unreachable states. This whole area is a right mess, which I must sort out some time. SPF 13/3/97 Agreed. I've tried to tidy this up a bit. decsp now ONLY affects the real stack pointer rather than popping items from the pstack as well. It still needs more work. DCJM 25/11/99 *) if tailCall then exiting transtable else (); if argsPassed > argRegsUsed then decsp(transtable, argsPassed-argRegsUsed) else (); if not needsResult then NoMerge (* Unused *) else ( (* Result is returned in regResult. *) addRegUse (transtable, regResult); (* Needed? *) MergeIndex(pushReg (transtable, regResult)) ) end; (* Call a function. Used in cases when it's not tail-recursive. *) fun callProc (argList, procLocn, modifiedRegisters, loadProc: unit->(stackIndex option * bool * stackIndex list * reg list)) = let (* evaluate the arguments *) val evaluatedArgs = evalArgs argList (* Save any values to the stack other than those that are being used in this call. Values in registers not modified by the call are locked in their current registers. *) val lockedRegs = pushNonArguments(transtable, cvec, procLocn @ evaluatedArgs, modifiedRegisters); (* Push the arguments onto the real stack and/or load them into the argument registers. *) val (endOfArgs, argEntries) = pushArgs evaluatedArgs; (* load regClosure *) val (codeAddrOpt, isIndirect, codeEntries, regsLocked) = loadProc (); in (* Make sure that the arguments are contiguous on the stack and that there is nothing beyond them on it. *) if endOfArgs >= 0 then resetButReload (cvec, transtable, endOfArgs) else (); case codeAddrOpt of NONE => callFunction (Recursive, cvec) | SOME codeAddr => callCode(codeAddr, isIndirect, transtable, cvec); (* Unlock any registers we locked. *) List.app (fn r => unlockRegister (transtable, r)) (lockedRegs @ regsLocked); (* Remove the arguments and code/closure registers. *) List.app (fn index => removeStackEntry(transtable, index)) (codeEntries @ argEntries); (* Remove any registers from the cache which may have been modified by the function. *) removeRegistersFromCache(transtable, modifiedRegisters); setupResult (argsToPass, needsResult, false, transtable) end; (* callProc *) (* Enter a procedure by jumping rather than calling. *) fun jumpToProc (argList, loadProc: unit->(stackIndex option * bool * stackIndex list * reg list)) = let (* Compute the arguments, loading them into registers if they are in the argument area, and therefore could be overwritten. Values elsewhere on the stack will not be overwritten. (Of course, we might have to spill the registers again, but if that occurs the arguments will go into the reference-counted part of the real stack, so we can still guaranteee that moveArgs - below - won't zap old arguments while we still need them to initialise the new arguments.) Now try to generate the argument into the RIGHT register, to minimise the moveArgs-generated register-shuffling. SPF 15/8/96 *) fun genArgList n [] = [] : stackIndex list | genArgList n (arg :: args) = let val unsafelocn : stackIndex = genArg (n, arg, matchFailFn); val safeLocn : stackIndex = loadIfArg (cvec, transtable, unsafelocn); val safeLocns : stackIndex list = genArgList (n + 1) args; in safeLocn :: safeLocns end; val argsOnPstack : stackIndex list = genArgList 0 argList; (* Now move the arguments to their final destination. *) fun moveArgs [] argNo = [] | moveArgs (arg::args) argNo = if argNo < argRegs then let (* Do it in reverse order so that we can delay locking the register arguments. *) val argEntries = moveArgs args (argNo + 1); val argReg = argReg argNo; val argEntry = loadToSpecificReg (cvec, transtable, argReg, arg, false); in lockRegister (transtable, argReg); argEntry :: argEntries end else let val offset = if numOfArgs < argRegs then argNo - argRegs else argNo - numOfArgs; (* Store it in the stack, reloading anything it displaces. *) val U : unit = storeInStack (cvec, transtable, arg, offset); in moveArgs args (argNo + 1); [] (* storeInStack removes its table entry *) end; (* the arguments are now all in their rightful places *) val argEntries = moveArgs argsOnPstack 0; (* Now load regClosure as appropriate. We delay this until now, because we don't want to zap regCode before we've loaded all the constant arguments. *) val (codeAddrOpt, isIndirect, callEntries, registersLocked) = loadProc (); (* Get the return address. *) val returnReg : reg = if regReturn regEq regNone then (* The return address is on the stack. Do we need to load it? *) (* Only if we're passing a different number of arguments on stack - this would change the offset of the return address. *) if argsToPass = numOfArgs orelse (numOfArgs <= argRegs andalso argsToPass <= argRegs) then regNone (* Leave it there. *) else let val (reg, regIndex) = loadEntry (cvec, transtable, returnAddress, false) in removeStackEntry(transtable, regIndex); reg end else let (* Reload the return address into the return register. *) val regIndex = loadToSpecificReg (cvec, transtable, regReturn, returnAddress, false); in removeStackEntry(transtable, regIndex); regReturn end; (* Move the stack pointer if necessary. *) val stackArgs = if numOfArgs <= argRegs then 0 else numOfArgs - argRegs; val stackArgsToPass = if argsToPass <= argRegs then 0 else argsToPass - argRegs; val diffInArgs = stackArgs - stackArgsToPass; (* One more "arg" if the return address is passed on the stack. *) val adjust : int = if returnReg regEq regNone then 1 else 0; val stackMove : int = realstackptr transtable + diffInArgs - adjust; in resetStack (stackMove, cvec); (* Call the function. If it's not recursive we have to get the entry point. *) case codeAddrOpt of NONE => jumpToFunction (Recursive, returnReg, cvec) | SOME codeAddr => jumpToCode(codeAddr, isIndirect, returnReg, transtable, cvec); (* Unlock any registers we locked. *) List.app (fn r => unlockRegister (transtable, r)) registersLocked; (* Remove the arguments and code/closure registers. *) List.app (fn index => removeStackEntry(transtable, index)) (argEntries @ callEntries); (* Since we've exited we don't need to clear the cache. *) setupResult (argsToPass, needsResult, true, transtable) end; (* jumpToProc *) (* Call a closure function, i.e. not one that requires a static link. *) fun callClosure (clos : codetree option): mergeResult = let val tailCall = isEndOfProc tailKind; val bodyCall = not tailCall; local fun getArgRegs n = if n >= argRegs orelse n >= argsToPass then [] else argReg n :: getArgRegs(n+1) in val argRegs = getArgRegs 0 end (* Get the set of registers modified by this call. We have to include the argument, closure and code registers even if they're not actually modified because otherwise we may find that we've locked them. *) val registerSet = case clos of SOME (Constnt w) => regSetUnion(listToSet(regClosure :: argRegs), getRegisterSet w) | _ (* Recursive or not a constant. *) => allRegisters; (* Add the registers to the set modified by this function. We don't need to do this for recursive calls. In that case we must push all the registers (so we set registerSet to allRegisters) but the modification set for this function is simply the registers modified by everything else. *) val _ = case clos of NONE => () | _ => addModifiedRegSet(transtable, registerSet); (* Have to guarantee that the expression to return the procedure is evaluated before the arguments. *) (* In the recursive case the use count for closureOrSlAddr is set by the caller. DCJM 1/12/99. *) val procLocn = case clos of SOME(Constnt _) => noIndex (* Unused. *) | SOME c => genToStack (c, matchFailFn) (* the closure *) | NONE => noIndex (* Unused. *); local fun loadReg reg addr : stackIndex = let (* We don't need exclusive use of this value, because it only gets modified by the function call itself, not here. We either don't return from the function (tail-call: we set exited) or we explicitly clear the cache in setUpResult. *) val regIndex = loadToSpecificReg (cvec, transtable, reg, addr, false (* was bodyCall *)); in (* Lock the register down so that it doesn't get used to move values onto the stack. *) lockRegister (transtable, reg); regIndex end in fun loadClosureProc (): (stackIndex option * bool * stackIndex list * reg list) = case clos of SOME(c as Constnt w) => (* Do we need to load the closure register? *) let val addr = toAddress w; in if isIoAddress addr then (* We don't need the closure register but we can't do the indirection here. That's because the code address isn't valid. We have to do the indirection at run time. *) (SOME(pushConst(transtable, w)), true, [], []) else let val code : machineWord = loadWord (addr, 0w0) val codeLocn = pushConst(transtable, code) in if objLength addr = 0w1 then (* The closure is just one word - we don't need to put it in the closure register since the function won't need it. Do the indirection now. *) (SOME codeLocn, false, [], []) else (* We need to load the closure register. We have a choice here. We could either return the closure register as the address as we do in the general case, in which case we would do an indirect call through the closure register, or we can do the indirection here and do a direct call. On the i386 the latter is definitely better but on the PPC it will generate longer code, although possibly no slower if there was a pipeline stall. *) (SOME codeLocn, false, [loadReg regClosure (pushConst(transtable, w))], [regClosure]) end end | SOME _ => (* Calling a non-constant - load the closure register and set the code address as this with the "indirection" flag set to true. *) (SOME(loadReg regClosure procLocn), true, [], [regClosure]) | NONE => (* Recursive *) (* If this function requires a closure we need to reload the closure register with our original closure. *) if discardClosure then (NONE, false, [], []) else (NONE, false, [loadReg regClosure closureOrSlAddr], [regClosure]) end; in if tailCall then jumpToProc (argList, loadClosureProc) else callProc (argList, [procLocn], registerSet, loadClosureProc) end (* callClosure *) in (* body of genEval *) case evalFun of Constnt (oper : machineWord) => let val args = argList; val addr = toAddress oper; (* Unary operations are generated as binary operations where the second argument is a constant. e.g. neg(x) is generated as revsub(x, 0). *) fun genU i ri (constnt:machineWord): mergeResult = case args of [arg] => (* Check that the instruction is implemented. *) if instrIsRR i orelse instrIsRI (i, constnt) then let val locnOfArg1 : stackIndex = genToStack (arg, matchFailFn); val locnOfArg2 : stackIndex = pushConst (transtable, constnt); val regHint = case whereto of ToReg prefReg => UseReg prefReg | _ => NoHint in MergeIndex(binaryOp (locnOfArg1, locnOfArg2, i, ri, transtable, cvec, regHint)) end else callClosure (SOME evalFun) (* Have to use a function call *) | _ => raise InternalError "genU: compiling unary operator (argcount <> 1)"; fun genB i ri : mergeResult = case args of [arg1,arg2] => (* Check that the instruction is implemented. N.B. if the first argument is a constant we will use the reversed instruction. It may only be implemented for constant values so it is not sufficient to check that the general form is implemented. *) if instrIsRR i orelse (case arg1 of Constnt w => instrIsRI (ri, w) | _ => false) orelse (case arg2 of Constnt w => instrIsRI (i, w) | _ => false) then let val locnOfArg1 : stackIndex = genToStack (arg1, matchFailFn); val locnOfArg2 : stackIndex = genToStack (arg2, matchFailFn); val regHint = case whereto of ToReg prefReg => UseReg prefReg | _ => NoHint in MergeIndex(binaryOp (locnOfArg1, locnOfArg2, i, ri, transtable, cvec, regHint)) end else (* Have to use a function call *) callClosure (SOME evalFun) | _ => raise InternalError "genB: compiling binary operator (argcount <> 2)"; fun genAllocStore () : mergeResult = case args of [Constnt lengthCnst, Constnt flagsCnst, value] => if isShort lengthCnst andalso isShort flagsCnst then let (* Allocstore always constructs mutable segments and sets the mutable bit. *) val flags = Word8.orb(Word8.fromLargeWord(Word.toLargeWord(toShort flagsCnst)), F_mutable); in if flags = F_mutable_words (* Add byte segments if/when we have byte assignment. *) (* orelse wordEq (flags, F_mutable_bytes) *) then let (* only do easy cases *) val length : int = Word.toInt (toShort lengthCnst); in (* only in-line small allocations (principally refs) *) if 0 < length andalso length < 5 then let (* do it *) val locn = genToStack (value, matchFailFn); val U : unit = incrUseCount (transtable, locn, length - 1) val vec = callgetvec (length, flags, whereto); val (storeKind, unitSize) = if wordEq (flags, F_mutable_words) then (STORE_WORD, wordSize) else (STORE_BYTE, 1) fun fillVec byteOffset = if byteOffset < 0 then () else ( moveToVec (vec, locn, byteOffset, storeKind, cvec, transtable); fillVec (byteOffset - unitSize) ) in fillVec ((length - 1) * wordSize); MergeIndex vec end else (* too big to in-line (could use loop?) *) callClosure (SOME evalFun) end else (* byte/code segments are too tricky to in-line *) callClosure (SOME evalFun) end else (* crazy length or flag *) callClosure (SOME evalFun) | _ => (* probably non-constant length *) callClosure (SOME evalFun); fun genAssign isWord : mergeResult = case args of [addr,offset,value] => if isIndexedStore isWord orelse (case offset of Constnt w => (* The index ought always to be short. If it is we can use the normal store functions, which are always provided. *) isShort w | _ => false) then let val locnOfAddr : stackIndex = genToStack (addr, matchFailFn); val locnOfOffset : stackIndex = genToStack (offset, matchFailFn); val locnOfValue : stackIndex = genToStack (value, matchFailFn); in assignOp (locnOfAddr, locnOfOffset, locnOfValue, isWord, transtable, cvec); (* Put in a unit result if necessary. *) if needsResult then MergeIndex(pushConst (transtable, DummyValue)) else NoMerge (* Unused. *) end else (* Have to use a function call *) callClosure (SOME evalFun) | _ => raise InternalError "genAssign: argcount <> 3)"; in if isIoAddress addr then ( if wordEq (oper,ioOp POLY_SYS_get_length) then genU instrVeclen instrBad Zero (* dummy argument *) else if wordEq (oper,ioOp POLY_SYS_get_flags) then genU instrVecflags instrBad Zero (* dummy argument *) else if wordEq (oper,ioOp POLY_SYS_get_first_long_word) then genU instrGetFirstLong instrBad Zero (* dummy argument *) else if wordEq (oper,ioOp POLY_SYS_string_length) then genU instrStringLength instrBad Zero (* dummy argument *) else if wordEq (oper,ioOp POLY_SYS_set_string_length) then genB instrSetStringLength instrBad else if wordEq (oper,ioOp POLY_SYS_aplus) then genB instrAddA instrAddA else if wordEq (oper,ioOp POLY_SYS_aminus) then genB instrSubA instrRevSubA else if wordEq (oper,ioOp POLY_SYS_amul) then genB instrMulA instrMulA else if wordEq (oper,ioOp POLY_SYS_aneg) then genU instrRevSubA instrSubA Zero else if wordEq (oper,ioOp POLY_SYS_not_bool) then genU instrXorW instrXorW True (* xor with "true" *) else if wordEq (oper,ioOp POLY_SYS_or_word) then genB instrOrW instrOrW else if wordEq (oper,ioOp POLY_SYS_and_word) then genB instrAndW instrAndW else if wordEq (oper,ioOp POLY_SYS_xor_word) then genB instrXorW instrXorW else if wordEq (oper,ioOp POLY_SYS_shift_left_word) then genB instrUpshiftW instrBad else if wordEq (oper,ioOp POLY_SYS_shift_right_word) then genB instrDownshiftW instrBad else if wordEq (oper,ioOp POLY_SYS_shift_right_arith_word) then genB instrDownshiftArithW instrBad else if wordEq (oper,ioOp POLY_SYS_xor_word) then genB instrXorW instrXorW else if wordEq (oper,ioOp POLY_SYS_mul_word) then genB instrMulW instrMulW else if wordEq (oper,ioOp POLY_SYS_plus_word) then genB instrAddW instrAddW else if wordEq (oper,ioOp POLY_SYS_minus_word) then genB instrSubW instrRevSubW else if wordEq (oper,ioOp POLY_SYS_div_word) then genB instrDivW instrBad else if wordEq (oper,ioOp POLY_SYS_mod_word) then genB instrModW instrBad else if wordEq (oper,ioOp POLY_SYS_load_byte) then genB instrLoadB instrBad else if wordEq (oper,ioOp POLY_SYS_load_word) then genB instrLoad instrBad else if wordEq (oper,ioOp POLY_SYS_alloc_store) then genAllocStore () else if wordEq (oper,ioOp POLY_SYS_assign_word) andalso inlineAssignments then genAssign STORE_WORD else if wordEq (oper,ioOp POLY_SYS_assign_byte) andalso inlineAssignments then genAssign STORE_BYTE (* The point of the following code is to call genCond, which will call genTest which will hopefully use machine instructions for these operations. We could avoid this by duplicating most of the body of genTest (the "jumping" boolean code generator) here, but we would like to avoid that. SPF 21/11/96 *) else if primBoolOps andalso (wordEq (oper,ioOp POLY_SYS_int_eq) orelse wordEq (oper,ioOp POLY_SYS_int_neq) orelse wordEq (oper,ioOp POLY_SYS_word_eq) orelse wordEq (oper,ioOp POLY_SYS_word_neq) orelse wordEq (oper,ioOp POLY_SYS_equala) orelse wordEq (oper,ioOp POLY_SYS_int_geq) orelse wordEq (oper,ioOp POLY_SYS_int_leq) orelse wordEq (oper,ioOp POLY_SYS_int_gtr) orelse wordEq (oper,ioOp POLY_SYS_int_lss) orelse wordEq (oper,ioOp POLY_SYS_word_geq) orelse wordEq (oper,ioOp POLY_SYS_word_leq) orelse wordEq (oper,ioOp POLY_SYS_word_gtr) orelse wordEq (oper,ioOp POLY_SYS_word_lss)) then genCond (Eval {function = evalFun, argList = argList, earlyEval = false}, constntTrue, constntFalse, whereto, tailKind, matchFailFn, NONE) else (* unoptimised I/O call *) callClosure (SOME evalFun) ) else (* All other constant functions. *) callClosure (SOME evalFun) end | Extract {fpRel, addr, level, lastRef, ...} => let (* The procedure is being loaded from the stack or closure so it may be a static-link procedure. *) (* DCJM 1/12/99. TODO: We have a problem if the function is a closure reference (e.g. a recursive call) and the last reference to the closure is one of the arguments. In some cases at any rate we don't process the function until after we've processed the arguments resulting in us not being able to find something. I think it's probably only if we have static-linked functions that there is a problem when the something is start of the static link. I think if the function requires a closure then the closure is evaluated first even if it's a simple load. No, it's also needed in the recursive case at least. There was a definite bug in the case of a static-link call to a function where the last reference to the function was within the argument. DCJM 21/12/00. *) (* SPF 20/5/95 *) val selfCall = not fpRel andalso level = 0 andalso addr = 0; val staticCall = if fpRel (* Local or parameter *) then addr > 0 (* If not it must be a parameter - must be closure *) andalso isProcB (transtable, addr) (* local - look in table *) else isStaticLink addr; (* Non-local or recursive. *) in (* Is this a static link call? *) if staticCall then let (* Cannot use a jump to local static-link procedures because we may want local declarations on the current stack. *) val tailCall = isEndOfProc tailKind andalso not fpRel; val bodyCall = not tailCall; (* Load and lock regClosure. Returns the indexes of these entries in the stack. *) fun loadStaticLinkProc (): (stackIndex option * bool * stackIndex list * reg list) = if selfCall (* recursive *) then let (* Do we really need *exclusive* use of this register? Perhaps this is to force the old value onto the stack if we haven't saved it yet, but we should have done this in pushAllBut (below) unless we're in a tail-call in which case we're not coming back. SPF 23/5/95 *) val SL = closureOrSlAddr val closureIndex = loadToSpecificReg (cvec, transtable, regClosure, SL, false); val U : unit = lockRegister (transtable, regClosure); in (NONE, false, [closureIndex], [regClosure]) end else if fpRel (* Local *) then let (* Load entry point - this must be a local not an argument. *) val entryPt = pstackForDec (transtable, addr); (* We have already incremented the reference count when this is not the last reference so we don't need to do anything here. DCJM 21/12/00. *) (* Get the static link register. Will set its value later. *) val U : unit = getRegister (transtable, cvec, regClosure); val closureIndex = pushReg (transtable, regClosure); val U : unit = lockRegister (transtable, regClosure); in (* Set value of static link register now. The static link entry is now the address of the frame. DCJM 2/1/01. *) genStackOffset (regClosure, (realstackptr transtable - 1)*wordSize, cvec); (SOME entryPt, false, [closureIndex], [regClosure]) end else let (* Non-local or recursive. *) fun pushIt () = closureOrSlAddr; (* load SL register and return code address *) val (entryPt, slIndex) = loadStaticLink (addr, pushIt, transtable, cvec); in lockRegister (transtable, regClosure); (SOME entryPt, false, [slIndex], [regClosure]) end (* loadStaticLinkProc *); local fun getArgRegs n = if n >= argRegs orelse n >= argsToPass then [] else argReg n :: getArgRegs(n+1) val argRegs = listToSet(regClosure :: getArgRegs 0) in val registerSet = if selfCall then allRegisters (* Have to push everything. *) else if fpRel (* Local *) then if addr < 0 then raise InternalError "static link function is an argument" else regSetUnion(argRegs, getFunctionRegSet(pstackForDec (transtable, addr), transtable)) else (* Non local *) regSetUnion(argRegs, staticLinkRegSet addr) end in (* Add the registers modified by the function we're calling to those modified by this function. Don't need to do that in the recursive case. *) if selfCall then () else addModifiedRegSet(transtable, registerSet); (* Set the use count on the static link. I don't know whether this is needed in all cases so it could result in us incrementing it unnecessarily. It isn't needed if this function is local. DCJM 1/12/99. *) (* Increment the reference on the code if it's local and this is not the last reference. If it's non-local we don't actually change the reference count when we load it. DCJM 21/12/00. *) if lastRef then () else if fpRel (* It's local. *) then incrUseCount(transtable, pstackForDec (transtable, addr), 1) else incrUseCount(transtable, closureOrSlAddr, 1); if tailCall then jumpToProc (argList, loadStaticLinkProc) else callProc(argList, [], registerSet, loadStaticLinkProc) end (* Closure call - check for recursive calls. *) else ( (* Set the use count on the closure register if this is a recursive call. We have to do that for the recursive case because we don't pass the Extract entry in to callClosure. DCJM 1/12/99. *) if selfCall andalso not lastRef andalso not discardClosure then incrUseCount(transtable, closureOrSlAddr, 1) else(); callClosure (if selfCall then NONE else SOME evalFun) ) end | _ => (* The procedure is not being found by simply loading a value from the stack or the closure and is not a constant. *) callClosure (SOME evalFun) end (* genEval *); val resultReg = genToRegister (pt, ToReg regResult, EndOfProc, matchFailed, NONE); val U : unit = if not (haveExited transtable) then exit () else () in (* Having code generated the body of the procedure, it is copied into a new data segment. *) copyCode (cvec, maxstack transtable, getModifedRegSet transtable) end (* codegen *); fun gencode (Lambda { name, body, numArgs, closureRefs, ...}, debugSwitches) = let (* We are compiling a procedure. *) (* It is not essential to treat this specially, but it saves generating a piece of code whose only function is to return the address of the procedure. *) (* make the code buffer for the new procedure. *) val newCode = codeCreate (false (* make a closure *), name, debugSwitches); (* The only non-local references will be references to the closure itself. We have to fetch these from the constants section because: (1) we don't save the closure register in the function body (2) we don't even initialise it if we use the PureCode calling convention SPF 2/1/97 *) val closureAddr : address = codegen (body, newCode, fn (i , _, newtab, code) => pushCodeRef (newtab, newCode), fn i => false, fn (i, _, tt, c) => raise InternalError "Not static link", fn _ => raise InternalError "Not static link", true, (* Discard regClosure *) numArgs, closureRefs, debugSwitches); val res : machineWord = toMachineWord closureAddr; in (* Result is a procedure which returns the address of the procedure. *) (fn () => res) end | gencode (pt, debugSwitches) = let (* Compile a top-level expression. *) val newCode = codeCreate (false (* make a closure *), "", debugSwitches); (* There should be *no* non-local references. SPF 2/1/97 *) val closureAddr : address = codegen (pt, newCode, fn (i, _, tt, c) => raise InternalError "top level reached", fn i => false, fn (i, _, tt, c) => raise InternalError "Not static link", fn _ => raise InternalError "Not static link", true, (* Discard regClosure *) 0, (* No args. *) 0, (* No recursive references *) debugSwitches); in (* Result is a procedure to execute the code. *) fn () => call (closureAddr, toMachineWord ()) end (* gencode *); end; (* GCODE functor body *) polyml.5.2.1/mlsource/MLCompiler/CodeTree/I386CODECONS.ML0000644000175000017500000040622711003075354021334 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* Title: Code Generator Routines. Author: Dave Matthews, Cambridge University Computer Laboratory Copyright Cambridge University 1989 *) (* This module contains the code vector and operations to insert code into it. Each procedure is compiled into a separate segment. Initially it is compiled into a fixed size segment, and then copied into a segment of the correct size at the end. This module contains all the definitions of the Sparc opCodes and registers. It uses "codeseg" to create and operate on the segment itself. *) (* 6-10/6/94 SPF added abstraction for opCodes, to replace old explicit hex(?) constants *) (* 13/6/94 SPF started work on i386 version (was SPARC!) *) functor I386CODECONS ( (*****************************************************************************) (* DEBUG *) (*****************************************************************************) structure DEBUG : sig val assemblyCodeTag : bool Universal.tag val compilerOutputTag: (string->unit) Universal.tag val getParameter : 'a Universal.tag -> Universal.universal list -> 'a end; (*****************************************************************************) (* MISC *) (*****************************************************************************) structure MISC : sig exception InternalError of string end; (*****************************************************************************) (* CODECONS sharing constraints *) (*****************************************************************************) (* removed SPF 24/9/94 ... sharing type ADDRESS.word = CODESEG.word sharing type ADDRESS.short = CODESEG.short sharing type ADDRESS.address = CODESEG.address ... *) ) : (*****************************************************************************) (* CODECONS export signature *) (*****************************************************************************) sig type machineWord; type short; type code; type reg; (* Machine registers *) type address; val regNone: reg; val regResult: reg; val regClosure: reg; val regStackPtr: reg; val regHandler: reg; val regReturn: reg; val regs: int; (* No of registers. *) val argRegs: int; (* No of args in registers. *) val regN: int -> reg; val nReg: reg -> int; val argReg: int -> reg; val regEq: reg * reg -> bool; val regNeq: reg * reg -> bool; val regRepr: reg -> string; type addrs val codeCreate: bool * string * Universal.universal list -> code; (* makes the initial segment. *) (* Operations. *) type instrs; val instrMove: instrs; val instrAddA: instrs; val instrSubA: instrs; val instrRevSubA: instrs; val instrMulA: instrs; val instrAddW: instrs; val instrSubW: instrs; val instrRevSubW: instrs; val instrMulW: instrs; val instrDivW: instrs; val instrModW: instrs; val instrOrW: instrs; val instrAndW: instrs; val instrXorW: instrs; val instrLoad: instrs; val instrLoadB: instrs; val instrVeclen: instrs; val instrVecflags: instrs; val instrPush: instrs; val instrUpshiftW: instrs; val instrDownshiftW: instrs; val instrDownshiftArithW: instrs; val instrGetFirstLong: instrs; val instrStringLength: instrs; val instrSetStringLength: instrs; val instrBad: instrs; (* Can the we use the same register as the source and destination of an instructions? (it would be more flexible to make this a function of type "instrs -> bool", but a simple flag will suffice for now. SPF 17/1/97 *) val canShareRegs : bool; (* Enquire about operations. *) val instrIsRR: instrs -> bool; (* Is the general form implemented? *) val instrIsRI: instrs * machineWord -> bool; (* Is the immediate value ok? *) (* Code generate operations. *) val genRR: instrs * reg * reg * reg * code -> unit; val genRI: instrs * reg * machineWord * reg * code -> unit; type tests; val testNeqW: tests; val testEqW: tests; val testGeqW: tests; val testGtW: tests; val testLeqW: tests; val testLtW: tests; val testNeqA: tests; val testEqA: tests; val testGeqA: tests; val testGtA: tests; val testLeqA: tests; val testLtA: tests; val Short: tests; val Long: tests; type labels; (* The source of a jump. *) val noJump: labels; (* Compare and branch for fixed and arbitrary precision. *) val isCompRR: tests -> bool; val isCompRI: tests * machineWord -> bool; val compareAndBranchRR: reg * reg * tests * code -> labels; val compareAndBranchRI: reg * machineWord * tests * code -> labels; datatype storeWidth = STORE_WORD | STORE_BYTE val genLoad: int * reg * reg * code -> unit; val isIndexedStore: storeWidth -> bool val genStore: reg * int * reg * storeWidth * reg * code -> unit; val isStoreI: machineWord * storeWidth * bool -> bool; val genStoreI: machineWord * int * reg * storeWidth * reg * code -> unit; val genPush: reg * code -> unit; val genLoadPush: int * reg * code -> unit; val preferLoadPush: bool; val genLoadCoderef: code * reg * code -> unit; val genStackOffset: reg * int * code -> unit; val allocStore: int * Word8.word * reg * code -> unit; val setFlag: reg * code * Word8.word -> unit; val completeSegment: code -> unit; datatype callKinds = Recursive | ConstantFun of machineWord * bool | CodeFun of code | FullCall val callFunction: callKinds * code -> unit; val jumpToFunction: callKinds * reg * code -> unit; val returnFromFunction: reg * int * code -> unit; val raiseException: code -> unit; type cseg; val copyCode: code * int * reg list -> address; val unconditionalBranch: code -> labels; type handlerLab; val loadHandlerAddress: reg * code -> handlerLab; val fixupHandler: handlerLab * code -> unit; val fixup: labels * code -> unit; (* Fix up a jump. *) (* ic - Address for the next instruction in the segment. *) val ic: code -> addrs; val jumpback: addrs * bool * code -> unit; (* Backwards jump. *) val resetStack: int * code -> unit; (* Set a pending reset *) val procName: code -> string; (* Name of the procedure. *) type cases type jumpTableAddrs val constrCases : int * addrs -> cases; val useIndexedCase: int * int * int * bool -> bool; val indexedCase : reg * reg * int * int * bool * code -> jumpTableAddrs; val makeJumpTable : jumpTableAddrs * cases list * addrs * int * int * code -> unit; val inlineAssignments: bool val codeAddress: code -> address option val traceContext: code -> string; end (* CODECONS export signature *) = let (*****************************************************************************) (* ADDRESS *) (*****************************************************************************) structure ADDRESS : sig type machineWord; (* NB *not* eqtype, 'cos it might be a closure *) type short = Word.word; type address; type handler; val wordEq : machineWord * machineWord -> bool val isShort: 'a -> bool; val toShort: 'a -> short; val toMachineWord: 'a -> machineWord; val offsetAddr : address * short -> handler val alloc: (short * Word8.word * machineWord) -> address val F_words : Word8.word val lock : address -> unit; val wordSize: int end = Address; (*****************************************************************************) (* CODESEG *) (*****************************************************************************) structure CODESEG : sig type machineWord; type short; type address; type cseg; val csegMake: int -> cseg; val csegConvertToCode: cseg -> unit; val csegLock: cseg -> unit; val csegGet: cseg * int -> Word8.word; val csegSet: cseg * int * Word8.word -> unit; val csegPutWord: cseg * int * machineWord -> unit; val csegCopySeg: cseg * cseg * int * int -> unit; val csegAddr: cseg -> address; val csegPutConstant: cseg * int * machineWord * 'a -> unit; end = CodeSeg; in (*****************************************************************************) (* CODECONS functor body *) (*****************************************************************************) struct open CODESEG; open DEBUG; open ADDRESS; open MISC; val toInt = Word.toIntX (* This previously just cast the value so continue to treat it as signed. *) (* added SPF - take numbers OUT of code *) (* These are defined here as explicit constants, so the *) (* code-generator can in-line them as immediates (I think). *) val exp2_3 = 8; val exp2_6 = 64; val exp2_7 = 128; val exp2_8 = 256; val exp2_16 = 65536; val exp2_24 = 16777216; val exp2_30 = 1073741824; val exp2_31 = 2147483648; val exp2_32 = 4294967296; (* Let's check that we got them right! *) local fun exp2 0 = 1 | exp2 n = 2 * exp2 (n - 1); in val UUU = ( exp2_3 = exp2 3 andalso exp2_6 = exp2 6 andalso exp2_7 = exp2 7 andalso exp2_8 = exp2 8 andalso exp2_16 = exp2 16 andalso exp2_24 = exp2 24 andalso exp2_30 = exp2 30 andalso exp2_31 = exp2 31 andalso exp2_32 = exp2 32 ) orelse raise InternalError "Powers of 2 incorrectly specified"; end; (* tag a short constant *) fun tag c = 2 * c + 1; (* shift a short constant, but don't set tag bit *) fun semitag c = 2 * c; fun is8Bit n = ~ exp2_7 <= n andalso n < exp2_7; infix 6 addrPlus addrMinus; infix 4 (* ? *) addrLt; (* SPF 5/1/95 *) infix 4 (* ? *) addrLe; (* All indexes into the code vector have type "addrs" *) (* This should be an abstype, but it's exported as an eqtype *) datatype addrs = Addr of int (* + is defined to add an integer to an address *) fun (Addr a) addrPlus b = Addr (a + b); (* The difference between two addresses is an integer *) fun (Addr a) addrMinus (Addr b) = a - b; fun (Addr a) addrLt (Addr b) = a < b; fun (Addr a) addrLe (Addr b) = a <= b; fun mkAddr n = Addr n; (* addr.up *) fun getAddr (Addr a) = a; (* addr.down *) val addrZero = mkAddr 0; val addrLast = mkAddr (exp2_30 - 1); (* A big number. *) (* The "value" points at the jump instruction, or rather at the jump offset part of it. It is a ref because we may have to change it if we have to put in a jump with a 32-bit offset. *) datatype jumpFrom = Jump8From of addrs | Jump32From of addrs type labels = (jumpFrom ref) list; val noJump = []:labels; (* This is the list of outstanding labels. Use a separate type from "labels" for extra security. *) type labList = (jumpFrom ref) list; datatype setCodeseg = Unset | Set of cseg (* Used for completing forward references. *) ; (* Constants which are too large to go inline in the code are put in a list and put at the end of the code. They are arranged so that the garbage collector can find them and change them as necessary. A reference to a constant is treated like a forward reference to a label. *) (* A code list is used to hold a list of code-vectors which must have the address of this code-vector put into it. *) datatype const = WVal of machineWord (* an existing constant *) | CVal of code (* a forward-reference to another function *) | HVal of addrs ref (* a handler *) and code = Code of { codeVec: cseg, (* This segment is used as a buffer. When the procedure has been code generated it is copied into a new segment of the correct size *) ic: addrs ref, (* Pointer to first free location in "codevec" *) constVec: (const * addrs * bool) list ref, (* Constants used in the code *) numOfConsts: int ref, (* size of constVec *) stackReset: int ref, (* Distance to reset the stack before the next instr. *) pcOffset: int ref, (* Offset of code in final segment. *) (* This is used also to test for identity of code segments. *) labelList: labList ref, (* List of outstanding short branches. *) longestBranch: addrs ref, (* Address of the earliest 1-byte branch. *) procName: string, (* Name of the procedure. *) otherCodes: code list ref, (* Other code vectors with forward references to this vector. *) resultSeg: setCodeseg ref, (* The segment as the final result. *) mustCheckStack: bool ref, (* Set to true if stack check must be done. *) justComeFrom: labels ref, (* The label we have just jumped from. *) exited: bool ref, (* False if we can fall-through to here *) selfCalls: addrs list ref, (* List of recursive calls to patch up. *) selfJumps: labels ref, (* List of recursive tail-calls to patch up. *) noClosure: bool, (* should we make a closure from this? *) branchCheck: addrs ref, (* the address we last fixed up to. I added this to track down a bug and I've left it in for security. DCJM 19/1/01. *) printAssemblyCode:bool, (* Whether to print the code when we finish. *) printStream: string->unit (* The stream to use *) }; (* procName is exported. *) fun procName (Code {procName,...}) = procName; (* %ebp points to a structure that interfaces to the RTS. These are offsets into that structure. *) val MemRegLocalMPointer = 0 and MemRegHandlerRegister = wordSize and MemRegLocalMbottom = wordSize*2 and MemRegStackLimit = wordSize*3 and MemRegHeapOverflowCall = wordSize*8 and MemRegStackOverflowCall = wordSize*9 and MemRegStackOverflowCallEx = wordSize*10 and MemRegRaiseException = wordSize*11 and MemRegRaiseDiv = wordSize*13 and MemRegArbEmulation = wordSize*14 (* Several operations are not generated immediately but recorded and generated later. Labels (i.e. the destination of a branch) are recorded in just_come_from. Adjustments to the real stack pointer are recorded in stack_reset. The order in which these "instructions" are assumed to happen is of course significant. If just_come_from is not empty it is assumed to have happened before anything else. After that the stack pointer is adjusted and finally the next instruction is executed. *) val codesize = 30; (* bytes. Initial size of segment. *) (* Test for identity of the code segments by testing whether the pcOffset ref is the same. N.B. NOT its contents. *) infix is; fun (Code{pcOffset=a, ...}) is (Code{pcOffset=b, ...}) = a=b; (* create and initialise a code segment *) fun codeCreate (noClosure : bool, name : string, parameters) : code = let val words = codesize div 4 in Code { codeVec = csegMake words, (* a byte array *) ic = ref addrZero, constVec = ref [], numOfConsts = ref 0, stackReset = ref 0, pcOffset = ref 0, (* only non-zero after code is copied *) labelList = ref [], longestBranch = ref addrLast, (* None so far *) procName = name, otherCodes = ref [], resultSeg = ref Unset, (* Not yet done *) mustCheckStack = ref false, justComeFrom = ref [], exited = ref false, selfCalls = ref [], selfJumps = ref [], noClosure = noClosure, branchCheck = ref addrZero, printAssemblyCode = DEBUG.getParameter DEBUG.assemblyCodeTag parameters, printStream = DEBUG.getParameter DEBUG.compilerOutputTag parameters } end; (* Put 1 unsigned byte at a given offset in the segment. *) fun set8u (b : int, addr, seg) = let val a = getAddr addr; in csegSet (seg, a, Word8.fromInt b) end; (* Put 1 signed byte at a given offset in the segment. *) fun set8s (b : int, addr, seg) = let val a = getAddr addr; val b' = if b < 0 then b + exp2_8 else b; in csegSet (seg, a, Word8.fromInt b') end; (* Get 1 unsigned byte from the given offset in the segment. *) fun get8u (a: int, seg: cseg) : int = Word8.toInt (csegGet (seg, a)); (* Get 1 signed byte from the given offset in the segment. *) fun get8s (a: int, seg: cseg) : int = Word8.toIntX (csegGet (seg, a)); (* Put 4 bytes at a given offset in the segment. *) (* b0 is the least significant byte. *) fun set4Bytes (b3, b2, b1, b0, addr, seg) = let val a = getAddr addr; in (* Little-endian *) csegSet (seg, a, Word8.fromInt b0); csegSet (seg, a + 1, Word8.fromInt b1); csegSet (seg, a + 2, Word8.fromInt b2); csegSet (seg, a + 3, Word8.fromInt b3) end; (* Put 1 unsigned word at a given offset in the segment. *) fun set32u (ival: int, addr: addrs, seg) : unit = let val topHw = ival div exp2_16; val bottomHw = ival mod exp2_16; val b3 = topHw div exp2_8; val b2 = topHw mod exp2_8; val b1 = bottomHw div exp2_8; val b0 = bottomHw mod exp2_8; in set4Bytes (b3, b2, b1, b0, addr, seg) end; (* Put 1 signed word at a given offset in the segment. *) fun set32s (ival: int, addr: addrs, seg) : unit = let val topHw = ival div exp2_16; val bottomHw = ival mod exp2_16; val b3 = topHw div exp2_8; val b2 = topHw mod exp2_8; val b1 = bottomHw div exp2_8; val b0 = bottomHw mod exp2_8; val b3' = if b3 < 0 then b3 + exp2_8 else b3; in set4Bytes (b3', b2, b1, b0, addr, seg) end; (* Get 1 signed word from the given offset in the segment. *) fun get32s (a: int, seg: cseg) : int = let val b0 = Word8.toInt (csegGet (seg, a)); val b1 = Word8.toInt (csegGet (seg, a + 1)); val b2 = Word8.toInt (csegGet (seg, a + 2)); val b3 = Word8.toInt (csegGet (seg, a + 3)); val b3' = if b3 >= exp2_7 then b3 - exp2_8 else b3; val topHw = (b3' * exp2_8) + b2; val bottomHw = (b1 * exp2_8) + b0; in (topHw * exp2_16) + bottomHw end; (* Code-generate a byte. *) fun gen8u (ival: int, Code {ic, codeVec, ...}) : unit = if 0 <= ival andalso ival < exp2_8 then let val icVal = !ic; in ic := icVal addrPlus 1; set8u (ival, icVal, codeVec) end else raise InternalError "gen8u: invalid byte"; (* Used for signed byte values. *) fun gen8s (ival: int, Code {ic, codeVec, ...}) = if ~exp2_7 <= ival andalso ival < exp2_7 then let val icVal = !ic; in ic := icVal addrPlus 1; set8s (ival, icVal, codeVec) end else raise InternalError "gen8s: invalid byte"; (* Code-generate a 32-bit word. *) fun gen32u (ival: int, Code {ic, codeVec, ...}) : unit = if 0 <= ival andalso (isShort ival orelse ival < exp2_32) (* Note: This previously was 0 <= ival andalso ival < exp2_32 The only reason for adding isShort ival is that doing so avoids almost all the arbitrary precision emulation traps that used to be generated here. *) then let val icVal = !ic; in ic := icVal addrPlus 4; set32u (ival, icVal, codeVec) end else raise InternalError "gen32u: invalid word"; fun gen32s (ival: int, Code {ic, codeVec, ...}) : unit = (* the Poly compiler generates buggy code for the commented-out test *) if true (* ~exp2_31 <= ival andalso ival < exp2_31 *) then let val icVal = !ic; in ic := icVal addrPlus 4; set32s (ival, icVal, codeVec) end else raise InternalError "gen32s: invalid word"; datatype mode = Based (* mod = 0 *) | Based8 (* mod = 1 *) | Based32 (* mod = 2 *) | Register (* mod = 3 *) ; (* Put together the three fields which make up the mod r/m byte. *) fun modrm (md : mode, rg: int, rm : int) : int = let val modField = case md of Based => 0 * exp2_6 (* compile-time evaluated! *) | Based8 => 1 * exp2_6 | Based32 => 2 * exp2_6 | Register => 3 * exp2_6 ; in modField + (rg * exp2_3) + rm end; fun genmodrm (md : mode, rg: int, rm : int, cvec) : unit = gen8u (modrm (md, rg, rm), cvec); datatype scaleFactor = Scale1 (* s = 0 *) | Scale2 (* s = 1 *) | Scale4 (* s = 2 *) | Scale8 (* s = 3 *) ; (* Put together the three fields which make up the s-i-b byte. *) fun sib (s : scaleFactor, i: int, b : int) : int = let val sizeField = case s of Scale1 => 0 * exp2_6 | Scale2 => 1 * exp2_6 | Scale4 => 2 * exp2_6 | Scale8 => 3 * exp2_6 ; in sizeField + (i * exp2_3) + b end; fun gensib (s : scaleFactor, i: int, b : int, cvec : code) : unit = gen8u (sib (s, i, b), cvec); fun scSet (Set x) = x | scSet _ = raise InternalError "scSet"; (* Add a constant to the list along with its address. We mustn't put the constant directly in the code since at this stage the code is simply a byte segment and if we have a garbage collection the value won't be updated. *) fun addConstToVec (valu: const, isRel, cvec as Code{numOfConsts, constVec, ic, ...}): unit = ( numOfConsts := ! numOfConsts + 1; constVec := (valu, !ic, isRel) :: ! constVec; (* We must put a valid tagged integer in here because we might get a garbage collection after we have copied this code into the new code segment but before we've put in the real constant. If this is a relative branch we need to point this at itself. Until it is set to the relative offset of the destination it needs to contain an address within the code and this could be the last instruction. *) gen32s (if isRel then ~5 else tag 0, cvec) ) abstype reg = Reg of int (* registers. *) with (* These are the real registers we have. *) val eax = Reg 0; val ecx = Reg 1; val edx = Reg 2; val ebx = Reg 3; val esp = Reg 4; val ebp = Reg 5; val esi = Reg 6; val edi = Reg 7; (* Not real registers. *) val regNone = Reg 8; val regHandler = Reg 9; val regResult = eax; (* Result of function call goes in here. *) val regClosure = edx; (* Addr. of closure for fn. call goes here. *) val regStackPtr = esp; val regReturn = regNone; fun getReg (Reg r) = r; (* reg.down *) fun mkReg n = Reg n; (* reg.up *) (* The number of general registers. Includes result, closure, code, return and arg regs but not stackptr, handler, stack limit or heap ptrs. *) val regs = 6 (* eax, ebx, ecx, edx, esi, edi *); (* N.B. The encoding of registers as integers here is used to encode the register modification sets. It MUST match the encoding used for IO functions in the registerMaskVector in the RTS assembly code section. *) (* The nth register (counting from 0). *) fun regN i = if i < 0 orelse i >= regs then raise InternalError "Bad register number" else if i = 4 then esi else if i = 5 then edi else mkReg i ; infix 7 regEq regNeq regLeq regGeq regMinus; fun a regEq b = getReg a = getReg b; fun a regNeq b = getReg a <> getReg b; fun a regLeq b = getReg a <= getReg b; fun a regGeq b = getReg a >= getReg b; fun (Reg a) regMinus (Reg b) = a - b; (* The number of the register. *) fun nReg r = if r regEq esi then 4 else if r regEq edi then 5 else getReg r; fun regRepr r = if r regEq eax then "%eax" else if r regEq ebx then "%ebx" else if r regEq ecx then "%ecx" else if r regEq edx then "%edx" else if r regEq esp then "%esp" else if r regEq ebp then "%ebp" else if r regEq esi then "%esi" else if r regEq edi then "%edi" else "r" ^ Int.toString (getReg r); (* Arguments are passed in eax and ebx. *) val argRegs = 2; fun argReg i = if i = 0 then eax else if i = 1 then ebx else raise InternalError ("Not arg reg " ^ Int.toString i); end (* reg *); datatype arithOp = ADD | OR | ADC | SBB | AND | SUB | XOR | CMP ; fun arithOpToInt ADD = 0 | arithOpToInt OR = 1 | arithOpToInt ADC = 2 | arithOpToInt SBB = 3 | arithOpToInt AND = 4 | arithOpToInt SUB = 5 | arithOpToInt XOR = 6 | arithOpToInt CMP = 7 ; (* Primary opCodes. N.B. only opCodes actually used are listed here. If new instruction are added check they will be handled by the run-time system in the event of trap. *) datatype opCode = Group1_8_A | Group1_32_A | JMP_8 | JMP_32 | CALL_32 (* SPF 6/6/95 *) | MOVL_A_R | MOVL_R_A | MOVB_R_A | PUSH_R of reg | POP_R of reg | Group5 | NOP | LEAL | MOVL_32_R of reg | MOVL_32_A | MOVB_8_A | ESCAPE | POP_A | RET | RET_16 | JO | JE | JNE | JL | JGE | JLE | JG | JB | JNB | JNA | JA | Arith of arithOp * int | STC | Group3_A | Group3_a | Group2_8_A | Group2_1_A | PUSH_8 | PUSH_32 | TEST_ACC8 ; fun opToInt opn = case opn of Group1_8_A => 8 * 16 + 3 (* opCode$0x83 *) | Group1_32_A => 8 * 16 + 1 (* opCode$0x81 *) | JMP_8 => 14 * 16 + 11 (* opCode$0xeb *) | JMP_32 => 14 * 16 + 9 (* opCode$0xe9 *) | CALL_32 => 14 * 16 + 8 (* opCode$0xe8 *) | MOVL_A_R => 8 * 16 + 11 (* opCode$0x8b *) | MOVL_R_A => 8 * 16 + 9 (* opCode$0x89 *) | MOVB_R_A => 8 * 16 + 8 (* opCode$0x88 *) | PUSH_R reg => 5 * 16 + 0 + getReg reg (* opCode$up(0x50 + r.down) *) | POP_R reg => 5 * 16 + 8 + getReg reg (* opCode$up(0x58 + r.down) *) | Group5 => 15 * 16 + 15 (* opCode$0xff *) | NOP => 9 * 16 + 0 (* opCode$0x90 *) | LEAL => 8 * 16 + 13 (* opCode$0x8d *) | MOVL_32_R reg => 11 * 16 + 8 + getReg reg (* opCode$up(0xb8 + r.down) *) | MOVL_32_A => 12 * 16 + 7 (* opCode$0xc7 *) | MOVB_8_A => 12 * 16 + 6 (* opCode$0xc6 *) | ESCAPE => 0 * 16 + 15 (* opCode$0x0f *) | POP_A => 8 * 16 + 15 (* opCode$0x8f *) | RET => 12 * 16 + 3 (* opCode$0xc3 *) | RET_16 => 12 * 16 + 2 (* opCode$0xc2 *) | JO => 7 * 16 + 0 (* opCode$0x70 *) | JB => 7 * 16 + 2 (* opCode$0x72 *) | JNB => 7 * 16 + 3 (* opCode$0x73 *) | JE => 7 * 16 + 4 (* opCode$0x74 *) | JNE => 7 * 16 + 5 (* opCode$0x75 *) | JNA => 7 * 16 + 6 (* opCode$0x76 *) | JA => 7 * 16 + 7 (* opCode$0x77 *) | JL => 7 * 16 + 12 (* opCode$0x7c *) | JGE => 7 * 16 + 13 (* opCode$0x7d *) | JLE => 7 * 16 + 14 (* opCode$0x7e *) | JG => 7 * 16 + 15 (* opCode$0x7f *) | Arith (ao,dw) => arithOpToInt ao * 8 + dw (* opCode$up(op.down*8+dw) *) | STC => 15 * 16 + 9 (* opCode$0xf9 *) | Group3_A => 15 * 16 + 7 (* opCode$0xf7 *) | Group3_a => 15 * 16 + 6 (* opCode$0xf6 *) | Group2_8_A => 12 * 16 + 1 (* opCode$0xc1 *) | Group2_1_A => 13 * 16 + 1 (* opCode$0xd1 *) | PUSH_8 => 6 * 16 + 10 (* opCode$0x6a *) | PUSH_32 => 6 * 16 + 8 (* opCode$0x68 *) | TEST_ACC8 => 10 * 16 + 8 (* opCode$0xa8 *) ; (* ... val eax = Reg 0; val ecx = Reg 1; val edx = Reg 2; val ebx = Reg 3; val esp = Reg 4; (* also used for "SIB used" and "no index" *) val ebp = Reg 5; (* also used for "absolute" *) val esi = Reg 6; val edi = Reg 7; type basereg = reg; {0,1,2,3,6,7 only} type indexreg = reg; {0,1,2,3,5,6,7 only} The i386 family has a horrendous collection of not-quite-orthogonal addressing modes. Register mode: (1) reg mod = 3; r/m = getReg reg DS-relative addressing modes: (2) DS:[basereg] mod = 0; r/m = getReg basereg (3) DS:[basereg + disp8] mod = 1; r/m = getReg basereg (4) DS:[basereg + disp32] mod = 2; r/m = getReg basereg (2a) DS:[basereg] mod = 0; r/m = 4; s = ?; i = 4; b = getReg basereg (3a) DS:[basereg + disp8] mod = 1; r/m = 4; s = ?; i = 4; b = getReg basereg (4a) DS:[basereg + disp32] mod = 2; r/m = 4; s = ?; i = 4; b = getReg basereg (5) DS:[basereg + (scale * indexreg)] mod = 0; r/m = 4; s = scale; i = getReg indexreg; b = getReg basereg (6) DS:[basereg + (scale * indexreg) + disp8] mod = 1; r/m = 4; s = scale; i = getReg indexreg; b = getReg basereg (7) DS:[basereg + (scale * indexreg) + disp32] mod = 2; r/m = 4; s = scale; i = getReg indexreg; b = getReg basereg (8) DS:disp32 mod = 0; r/m = 5 (8a) DS:[disp32] mod = 0; r/m = 4; s = ?; i = 4; b = 5 (9) DS:[disp32 + (scale * indexreg)] mod = 0; r/m = 4; s = scale; i = getReg indexreg; b = 5 SS-relative addressing modes: (10) SS:[ebp + disp8] mod = 1; r/m = 5 (11) SS:[ebp + disp32] mod = 2; r/m = 5 (12) SS:[ebp + (scale * indexreg) + disp8] mod = 1; r/m = 4; s = scale; i = getReg indexreg; b = 5 (13) SS:[ebp + (scale * indexreg) + disp32] mod = 2; r/m = 4; s = scale; i = getReg indexreg; b = 5 (14) SS:[esp + (scale * indexreg)] mod = 0; r/m = 4; s = scale; i = getReg indexreg; b = 4 (15) SS:[esp + (scale * indexreg) + disp8] mod = 1; r/m = 4; s = scale; i = getReg indexreg; b = 4 (16) SS:[esp + (scale * indexreg) + disp32] mod = 2; r/m = 4; s = scale; i = getReg indexreg; b = 4 ... *) (* Make a reference to another procedure. Usually this will be a forward reference but it may have been compiled already, in which case we can put the code address in now. *) fun codeConst (Code {resultSeg = ref(Set seg), ... }, isRel, into) = (* Already done. *) addConstToVec (WVal (toMachineWord(csegAddr seg)), isRel, into) | codeConst (r as Code {otherCodes, ... }, isRel, into) = (* forward *) (* Add the referring procedure onto the list of the procedure referred to if it is not already there. This makes sure that when the referring procedure is finished and its address is known the address will be plugged in to every procedure which needs it. *) let fun onList x [] = false | onList x (c::cs) = (x is c) orelse onList x cs ; val codeList = ! otherCodes; in if onList into codeList then () else otherCodes := into :: codeList; addConstToVec (CVal r, isRel, into) end; (* Removes a label from the list when it has been fixed up or converted to the long form. *) fun removeLabel (lab:addrs, Code{longestBranch, labelList, ... }) : unit = let fun removeEntry ([]: labList) : labList = [] | removeEntry ((entry as ref (Jump32From addr)) :: t) = removeEntry t (* we discard long jumps *) | removeEntry ((entry as ref (Jump8From addr)) :: t) = if lab = addr then removeEntry t else ( if addr addrLt !longestBranch then longestBranch := addr else (); entry :: removeEntry t ) (* removeEntry *); in (* Must also find the new longest branch. *) longestBranch := addrLast; labelList := removeEntry (! labelList) end; (* Fix up the list of labels. *) fun reallyFixBranches ([] : labels) cvec = () | reallyFixBranches (h::t) (cvec as Code{codeVec=cseg, ic, branchCheck, ...}) = ((case !h of Jump8From addr => let val offset : int = get8s (getAddr addr, cseg); val diff : int = (!ic addrMinus addr) - 1; in branchCheck := !ic; if is8Bit diff then () else raise InternalError "jump too large"; if offset <> 0 then raise InternalError "reallyFixBranches: jump already patched" else set8s (diff, addr, cseg); removeLabel (addr, cvec) end | Jump32From addr => let val offset : int = get32s (getAddr addr, cseg); val diff : int = (!ic addrMinus addr) - 4; in branchCheck := !ic; if offset <> 0 then raise InternalError "reallyFixBranches: jump already patched" else (* A zero offset is more than simply redundant, it can introduce zero words into the code which could be taken as markers. It will not normally be produced but can occur in very unusual cases. The only example I've seen is a branch extension in a complicated series of andalsos and orelses where the branch extension was followed by an unconditional branch which was then backed up by check_labs. We simply fill it with no-ops. *) if diff = 0 then let val a = getAddr addr; val nop = Word8.fromInt (opToInt NOP); in csegSet (cseg, a - 1, nop); csegSet (cseg, a, nop); csegSet (cseg, a + 1, nop); csegSet (cseg, a + 2, nop); csegSet (cseg, a + 3, nop) end else set32s (diff, addr, cseg) end ); reallyFixBranches t cvec ) fun fixRecursiveBranches (cvec, target, []) = () | fixRecursiveBranches (cvec as Code{codeVec=cseg, ...}, target, addrH :: addrT) = ((case !addrH of Jump8From addr => let val offset : int = get8s (getAddr addr, cseg); val diff : int = (target addrMinus addr) - 1; in if offset <> 0 then raise InternalError "fixRecursiveBranches: already patched" else (); if is8Bit diff then set8s (diff, addr, cseg) else raise InternalError "fixRecursiveBranches: branch too large" end | Jump32From addr => let val offset : int = get32s (getAddr addr, cseg); val diff : int = (target addrMinus addr) - 4; in if offset <> 0 then raise InternalError "fixRecursiveBranches: already patched" else (); if diff <> 0 then set32s (diff, addr, cseg) else raise InternalError "fixRecursiveBranches: zero offset" end ); fixRecursiveBranches (cvec, target, addrT) ); (* The address is the offset of the offset, not the instruction itself. *) fun fixRecursiveCalls (cvec, target, []) = () | fixRecursiveCalls (cvec as Code{codeVec=cseg, ...}, target, addrH :: addrT) = let val instr : int = get8u (getAddr addrH - 1, cseg); val offset : int = get32s (getAddr addrH, cseg); val diff : int = (target addrMinus addrH) - 4; in if instr <> opToInt CALL_32 then raise InternalError "fixRecursiveCalls: not a call instruction" else if offset <> 0 then raise InternalError "fixRecursiveCalls: already patched" else if diff = 0 then raise InternalError "fixRecursiveCalls: zero offset" else set32s (diff, addrH, cseg); fixRecursiveCalls (cvec, target, addrT) end; (* Deal with a pending fix-up. *) fun reallyFixup (cvec as Code{justComeFrom=ref [], ... }) = () | reallyFixup (cvec as Code{justComeFrom=jcf as ref labs, exited, ... }) = (exited := false; reallyFixBranches labs cvec; jcf := []); (* Adds the displacement to the stack pointer before an instruction is generated. *) fun resetSp (cvec as Code{stackReset, ...}) = ( (* Any pending jumps must be taken first. *) reallyFixup cvec; let val sr = !stackReset * 4; (* Offset in bytes. *) in stackReset := 0; if sr < 0 then raise InternalError "Negative stack reset" else if is8Bit sr then (* Can use one byte immediate *) ( gen8u(opToInt Group1_8_A (* group1, 8-bit immediate *), cvec); genmodrm(Register, arithOpToInt ADD, getReg esp, cvec); gen8s(sr, cvec) ) else (* Need 32 bit immediate. *) ( gen8u(opToInt Group1_32_A (* group1, 32-bit immediate *), cvec); genmodrm(Register, arithOpToInt ADD, getReg esp, cvec); gen32s(sr, cvec) ) end ) (* resetSp *); (* Do any pending instructions, but only fix up branches if there are instructions in the pipe-line. *) fun flushQueue (Code{stackReset = ref 0, ...}) = () | flushQueue cvec = resetSp cvec; (* Makes a new label. (no longer returns a list SPF) *) fun makeShortLabel (addr: addrs, Code{longestBranch, labelList ,...}) : jumpFrom ref = let val lab = ref (Jump8From addr); in if addr addrLt ! longestBranch then longestBranch := addr else (); labelList := lab :: ! labelList; lab end; (* Apparently fix up jumps - actually just record where we have come from *) fun fixup (labs:labels, cvec as Code{justComeFrom, exited, ic, branchCheck, procName, ...}) = let (* If the jump we are fixing up is immediately preceding, we can remove it. It is particularly important to remove 32 bit jumps to the next instruction because they would put a word of all zeros in the code, and that could be mistaken for a marker word. *) fun checkLabs [] = [] | checkLabs ((lab as ref (Jump8From addr))::labs) = if !ic addrMinus addr = 1 then ( if !ic addrLe !branchCheck then raise InternalError "Backing up too far (8bit)" else (); ic := addr addrPlus ~1; (* Back up over the opCode *) removeLabel (addr, cvec); exited := false; checkLabs labs ) else lab :: checkLabs labs | checkLabs ((lab as ref (Jump32From addr))::labs) = if !ic addrMinus addr = 4 then ( if !ic addrLe !branchCheck then raise InternalError "Backing up too far (32bit)" else (); ic := addr addrPlus ~1; (* Back up over the opCode *) exited := false; checkLabs labs ) else lab :: checkLabs labs fun doCheck labs = (* Repeatedly check the labels until we are no longer backing up. We may have several to back up if we have just extended some branches and then immediately fix them up. DCJM 19/1/01. *) let val lastIc = !ic val newLabs = checkLabs labs in if lastIc = !ic then newLabs else doCheck newLabs end in case labs of [] => () (* we're not actually jumping from anywhere *) | _ => ( (* Any pending stack reset must be done now. That may involve fixing up pending jumps because so take effect before the stack adjustment. *) flushQueue cvec; (* Add together the jumps to here and remove redundant jumps. *) justComeFrom := doCheck (labs @ !justComeFrom) ) end; fun checkBranchList (cvec as Code{longestBranch, justComeFrom, exited, ic, stackReset, labelList, ...}) (branched:bool) (size:int) = (* If the longest branch is close to going out of range it must be converted into a long form. *) (* If we have just made an unconditional branch then we make the distance shorter. *) let val maxDiff = (if branched then 100 else 127 - 5) - size; (* See if we must extend some branches. If we are going to fix up a label immediately we don't normally extend it. The exception is if we have to extend some other labels in which case we may have to extend this because the jumps we add may push this label out of range. DCJM 9/4/01. *) local val icOffset = if branched then !ic else !ic addrPlus 2 (* Size of the initial branch. *) fun checkLab (lab as ref (Jump8From addr), n) = if List.exists (fn a => a = lab) (! justComeFrom) then n (* Don't include it here. *) else if (icOffset addrMinus addr) + n > (100 - size) then n+5 else n | checkLab (_, n) = n (* Extending one branch may extend others. We need to process the list in reverse order. *) in val jumpSpace = List.foldr checkLab 0 (!labelList) end (* Go down the list converting any long labels, and finding the longest remaining. *) fun convertLabels ([]:labList) : labList = [] | convertLabels (lab::labs) = let (* Process the list starting at the end. The reason for this is that more recent labels appear before earlier ones. We must put the earliest labels in first because they may be about to go out of range. *) val convertRest = convertLabels labs; in (* Now do this entry. *) case !lab of Jump32From addr => (* shouldn't happen? *) convertRest | Jump8From addr => (* If we are about to fix this label up we don't need to extend it except that we must extend it if we are going to put in more branch extensions which will take it out of range. DCJM 9/4/01. *) if List.exists (fn a => a = lab) (! justComeFrom) andalso (jumpSpace = 0 orelse !ic addrMinus addr < 127 - jumpSpace) then lab :: convertRest else if !ic addrMinus addr > (100 - size) then (* Getting close - convert it. *) ( reallyFixBranches [lab] cvec; (* fix up short jump to here *) gen8u (opToInt JMP_32, cvec); gen32u (0, cvec); (* long jump to final destination *) lab := Jump32From (!ic addrPlus ~4); (* Return the rest of the list. *) convertRest ) else ( (* Not ready to remove this. Just find out if this is an earlier branch and continue. *) if addr addrLt ! longestBranch then longestBranch := addr else (); lab :: convertRest ) end (* convertLabels *); in if !ic addrMinus ! longestBranch > maxDiff then let (* Must save the stack-reset, otherwise "fixup" will try to reset it. *) val sr = !stackReset; val _ = stackReset := 0; (* Must skip round the branches unless we have just taken an unconditional branch. *) val lab = if branched then [] else ( exited := true; gen8u (opToInt JMP_8, cvec); gen8u (0, cvec); [makeShortLabel (!ic addrPlus ~1, cvec)] ); in (* Find the new longest branch. *) longestBranch := addrLast; (* Initial value. *) labelList := convertLabels (!labelList); fixup (lab, cvec); (* Continue with normal processing. *) stackReset := sr (* Restore old value. *) end else () end; (* Do all the outstanding operations including fixing up the branches. *) fun doPending (cvec as Code{exited, stackReset=ref stackReset, ...}, size) : unit = let val mustReset = stackReset <> 0; in (* If we have not exited and there are branches coming in here then we fix them up before jumping round any branch extensions. *) if ! exited then () else reallyFixup cvec; checkBranchList cvec (! exited) (if mustReset then size + 6 else size); (* Fix up any incoming branches, including a jump round any branch extensions. *) reallyFixup cvec; flushQueue cvec end; (* Generate an opCode byte after doing any pending operations. *) fun genop (opb:opCode, cvec) = ( doPending (cvec, 12); (* 12 is maximum size of an instruction. It's also big enough for a comparison and the following conditional branch. *) gen8u (opToInt opb, cvec) ); (* This has to be done quite carefully if we are to be able to back-up over jumps that point to the next instruction in fixup. We have to guarantee that if we back up we haven't already set a jump to point beyond where we're backing up. See below for more explanation. DCJM 19/1/01.*) fun putConditional (br: opCode, cvec as Code{ic, ...}) : jumpFrom ref = ( flushQueue cvec; (* Do any stack adjustments. *) gen8u (opToInt br, cvec); (* Don't use genop. *) gen8u (0, cvec); makeShortLabel (!ic addrPlus ~1, cvec) ); (* Generates an unconditional branch. *) fun unconditionalBranch (cvec as Code {justComeFrom, exited, ...}): labels = let (* If we have just jumped here we may be able to avoid generating a jump instruction. *) val U : unit = flushQueue cvec; (* Do any pending instructions. *) val labs = ! justComeFrom; in justComeFrom := []; (* We may get the sequence: jmp L1; L2: jmp L3. If this is the "jmp L3" we can simply remember everything that was supposed to jump to L2 and replace it with jumps to L3. *) (* This code has one disadvantage. If we have several short branches coming here we don't record against the branches themselves that they're all going to the same place. If we have to extend them we put in separate long branches for each rather than pointing them all at the same branch. This doesn't increase run-time but makes the code larger than it need be. DCJM 1/1/01. *) if ! exited then labs else let (* The code here has gone through various versions. The original version always fixed up pending branches so that if we had a short branch coming here we might avoid having to extend it. A subsequent version separated out long and short branches coming here and fixed up short branches but added long ones onto the label list. I discovered a bug with this which occurred when we put in branch extension code before an unconditional branch and then backed up over the unconditional branch and over one of the extended branches. Since we'd already fixed up (really fixed up) the branch round the branch extensions we ended up with that branch now pointing into the middle of the code we subsequently generated. We could get a similar situation if we have a conditional branch immediately before this instruction and back up over both, for example (if exp then () else (); ...). In that case we have to make sure we haven't already fixed up another branch to come here. Instead we must always add it onto the label list so that we only (really) fix it up when we generate something other than a branch. DCJM 19/1/01. *) val br = putConditional (JMP_8, cvec); in exited := true; br :: labs end end; (* unconditionalBranch *) fun genSelfBranch (cvec as Code{justComeFrom, exited, ic, ... }) : labels = let (* Do any pending instructions. *) val U : unit = flushQueue cvec; (* Can we get into the prelude with an 8-bit jump? *) (* Conservative estimation needs to allow for: (1) stack check (10 bytes) (2) 1 byte instruction + 1 byte offset (2 bytes) (3) possible programmer arithmetic error (6 bytes) *) fun isNearPrelude addr = getAddr addr <= 110; (* Is the jump long enough to reach back into the prelude? *) fun isLongJump (Jump32From _ ) = true | isLongJump (Jump8From addr) = isNearPrelude (addr addrPlus ~1) val labs = ! justComeFrom; val longJumps = List.filter (fn r => isLongJump (!r)) labs; val shortJumps = List.filter (fn r => not (isLongJump (!r))) labs; (* remove the "long enough" 8-bit jumps from the list of pending jumps to extend. *) fun tidy [] = () | tidy (ref (Jump32From _) :: t) = tidy t | tidy (ref (Jump8From a) :: t) = (removeLabel (a, cvec); tidy t); val U : unit = tidy longJumps; (* do we actually need to insert a jump into the codestream? *) val needsJump = case shortJumps of [] => not (! exited) | _ => true; in if needsJump then let (* fix up pending short jumps to here *) val U : unit = justComeFrom := shortJumps; val U : unit = doPending (cvec, 5); (* Now decide whether we can use an 8-bit jump here. *) (* N.B. we use gen8u here, not genop, because the latter calls "doPending (cvec, 12)" which could change the results of our "isNearPrelude (!ic)" test. *) val br = if isNearPrelude (!ic) then ( gen8u (opToInt JMP_8, cvec); gen8u (0, cvec); ref (Jump8From (!ic addrPlus ~1)) ) else ( gen8u (opToInt JMP_32, cvec); gen32u (0, cvec); ref (Jump32From (!ic addrPlus ~4)) ); in justComeFrom := []; exited := true; br :: longJumps end else ( justComeFrom := []; exited := true; longJumps ) end; (* genSelfBranch *) (* Exported. Adds in the reset. Does not actually generate code. *) fun resetStack (offset, Code{stackReset, ...}) : unit = stackReset := ! stackReset + offset; (* Generate an effective address. *) fun genEA (offset: int, rb: reg, r : reg, cvec) : unit = let val offsetCode = (* don't generate [ebp] (use [ebp+0]) 'cos it doesn't exist! *) if offset = 0 andalso (rb regNeq ebp) then Based (* no disp field *) else if is8Bit offset then Based8 (* use 8-bit disp field *) else Based32; (* use 32-bit disp field *) in if rb regEq esp then (* Need to use s-i-b byte. *) ( if offset < 0 then raise InternalError "Negative stack offset" else (); genmodrm (offsetCode, getReg r, 4 (* use SIB *), cvec); gensib (Scale1, 4 (* no index *), getReg esp, cvec) ) else genmodrm(offsetCode, getReg r, getReg rb, cvec); (* generate the disp field (if any) *) case offsetCode of Based8 => gen8s (offset, cvec) | Based32 => gen32s (offset, cvec) | _ => () end; (* Similar to genEA, but used when regfield is an extended opCode rather than a real register. *) fun genop2 (offset: int, rb: reg, opc: int, cvec) : unit = let val offsetCode = (* don't generate [ebp] (use [ebp+0]) 'cos it doesn't exist! *) if offset = 0 andalso (rb regNeq ebp) then Based (* no disp field *) else if is8Bit offset then Based8 (* use 8-bit disp field *) else Based32; (* use 32-bit disp field *) in if rb regEq esp then (* Need to use s-i-b byte. *) ( if offset < 0 then raise InternalError "Negative stack offset" else (); genmodrm (offsetCode, opc, 4 (* use s-i-b *), cvec); gensib (Scale1, 4 (* no index *), getReg esp, cvec) ) else genmodrm(offsetCode, opc, getReg rb, cvec); (* generate the disp field (if any) *) case offsetCode of Based8 => gen8s (offset, cvec) | Based32 => gen32s (offset, cvec) | _ => () end; (* Similar to genEA, but used when there is an index register. rb may be regNone if no base register is required (used with leal to tag values). *) fun genIndexed (offset: int, rb: reg, ri: reg, size : scaleFactor, rd: reg, cvec) = let val offsetCode = if rb regEq regNone orelse (offset = 0 andalso (rb regNeq ebp)) then Based (* no disp field *) else if is8Bit offset then Based8 (* use 8-bit disp field *) else Based32; (* use 32-bit disp field *) val basefield = if rb regEq regNone then 5 (* no base register *) else getReg rb; in genmodrm (offsetCode, getReg rd, 4 (* s-i-b *), cvec); gensib (size, getReg ri, basefield, cvec); (* generate the disp field (if any) *) case offsetCode of Based8 => gen8s (offset, cvec) | Based32 => gen32s (offset, cvec) | _ => if rb regEq regNone (* 32 bit absolute used as base *) then gen32s (offset, cvec) else () end; (* Tag the value in register r *) fun genTag (r : reg, cvec) : unit = ( (* old code (7 bytes) ... genop (LEAL, cvec); genIndexed (1, regNone, r, Scale2, r, cvec) ... *) (* new, more compact code (4 bytes) SPF 27/4/95 *) genop (LEAL, cvec); genIndexed (1, r, r, Scale1, r, cvec) ) fun genImmed (opn: arithOp, rd: reg, imm: int, cvec) : unit = if is8Bit imm then (* Can use one byte immediate *) ( genop (Group1_8_A (* group1, 8 bit immediate *), cvec); genmodrm(Register, arithOpToInt opn, getReg rd, cvec); gen8s (imm, cvec) ) else (* Need 32 bit immediate. *) ( genop (Group1_32_A (* group1, 32 bit immediate *), cvec); genmodrm(Register, arithOpToInt opn, getReg rd, cvec); gen32s(imm, cvec) ); fun genReg (opn: arithOp, rd: reg, rs: reg, cvec) : unit = ( genop (Arith (opn, 3 (* r/m to reg *)), cvec); genmodrm(Register, getReg rd, getReg rs, cvec) ); (* generate padding no-ops to align to n modulo 4 *) fun align (n:int, cvec as Code{ic, ...}) = case (n - getAddr (!ic)) mod 4 of 1 => genop (NOP, cvec) | 2 => genReg (OR, eax, eax, cvec) | 3 => genImmed (OR, eax, 0, cvec) | _ => () ; (* Exported. - movl offset(rb),rd. *) fun genLoad (offset: int, rb: reg, rd: reg, cvec) : unit = if rd regEq regHandler (* Not a real register. *) then ( (* pushl offset(rb); popl 4(ebp) *) (* This only happens when we are popping the handler so we could simply pop it straight. *) genop (Group5, cvec); genop2 (offset, rb, 6 (* push *), cvec); genop (POP_A, cvec); genop2 (MemRegHandlerRegister, ebp, 0, cvec) ) else ( genop (MOVL_A_R, cvec); genEA (offset, rb, rd, cvec) ); datatype storeWidth = STORE_WORD | STORE_BYTE fun isIndexedStore _ = true (* Yes, for both word and byte. *) (* Exported - Can we store the value without going through a register? *) fun isStoreI (cnstnt: machineWord, _, _) = isShort cnstnt; (* Store an immediate value at a given address and offset. *) fun genStoreI (cnstnt: machineWord, offset: int, rb: reg, STORE_WORD, ri: reg, cvec as Code{ic, ...}) = ( (* We have a little problem here: we have to be very careful that we don't end up with a full word of zeros on a word boundary because that is used as an end-of-code marker. This can arise if we have zero bytes in the high order part of the offset and zero bytes in the low order part of the immediate value. We can get the former if the offset is greater than 127 and we can get the latter if the immediate is an address but not if it is a tagged value. Furthermore the garbage collector may change the address in the future so even if it is safe now it may not always be. We add in no-ops to align the offset onto a word boundary ensuring that the offset and the immediate value never come together in the same word. There's also another case. If the mod-rm byte is zero and aligned on a word boundary then this could combine with the immediate value if all three low-order words were zero. It's very unlikely but we ought to consider it. *) if isShort cnstnt then () (* No problem. *) else if not (is8Bit offset) then ( doPending(cvec, 12 + 2); align(if ri regEq regNone then 2 else 1, cvec) ) else if offset = 0 andalso rb regEq eax andalso ri regEq regNone then (* modrm will be zero. We need to be sure that this is not the first byte in a word. *) ( doPending(cvec, 12 + 1); if getAddr (!ic) mod 4 = 3 (* opcode will be the last byte in this word. *) then align(1, cvec) else () ) else (); genop (MOVL_32_A, cvec); if ri regEq regNone then genop2 (offset, rb, 0, cvec) else genIndexed (offset-2, rb, ri, Scale2, mkReg 0, cvec); if isShort cnstnt then gen32s (Word.toIntX (toShort cnstnt) * 2 + 1, cvec) else addConstToVec (WVal cnstnt, false, cvec) ) | genStoreI (cnstnt: machineWord, offset: int, rb: reg, STORE_BYTE, ri: reg, cvec) : unit = if not (isShort cnstnt) then (* This should never happen. *) raise InternalError "genStoreI: storing long constant as a byte" else let val v = toInt (toShort cnstnt) in if ri regEq regNone then ( genop (MOVB_8_A, cvec); genop2 (offset, rb, 0, cvec); gen8u (v, cvec) ) else ( (* Untag the index first. *) genop (Group2_1_A, cvec); genmodrm(Register, 5 (* shr *), getReg ri, cvec); genop (MOVB_8_A, cvec); genIndexed (offset, rb, ri, Scale1, mkReg 0, cvec); gen8u (v, cvec); (* Retag the index. *) genTag (ri, cvec) ) end (* Exported. *) (* Store a value on the stack. This is used when the registers need to be saved, for more than 4 arguments or to push an exception handler. *) fun genPush (r:reg, cvec) : unit = if r regEq regHandler (* Not a real register. *) then ( genop (Group5, cvec); genop2 (MemRegHandlerRegister, ebp, 6 (* push *), cvec) ) else genop (PUSH_R r, cvec); (* Exported. Load a value and push it on the stack. Used when all the allocatable registers have run out. Also used if preferLoadPush is true. *) fun genLoadPush (offset: int, rb: reg, cvec) : unit = ( genop (Group5, cvec); genop2 (offset, rb, 6 (* push *), cvec) ); val preferLoadPush : bool = true; (* It's cheap. *) (* Call the function. Must ensure that the return address is on a word + 2 byte boundary. *) (* Call the function. Must ensure that the return address is on a word + 2 byte boundary. *) fun genSelfCall (cvec as Code{ic, ...}) : addrs = ( (* Make sure anything pending is done first. *) (* 15 comes from the maximum instruction size (12) used in genop, together with up to 3 nops. *) doPending (cvec, 15); (* Ensure the return address is aligned on a word + 2 byte boundary. *) align (1, cvec); genop (CALL_32, cvec); (* 1 byte *) gen32u (0, cvec); (* 4 bytes *) if getAddr (!ic) mod 4 <> 2 then raise InternalError "genSelfCall: call not aligned" else (); !ic addrPlus ~4 ); (* Register/register move. *) fun genMove (rd:reg, rs:reg, cvec) : unit = ( genop (MOVL_R_A, cvec); genmodrm(Register, getReg rs, getReg rd, cvec) ); (* Add a register to a constant. *) fun genLeal (rd:reg, rs:reg, offset:int, cvec) : unit = ( genop (LEAL, cvec); genEA (offset, rs, rd, cvec) ); (* Exported. - movl rs,offset(rb) / movb rs,offset(rb) *) fun genStore (rs: reg, offset: int, rb: reg, STORE_WORD, ri, cvec) : unit = ( genop (MOVL_R_A, cvec); if ri regEq regNone then genEA (offset, rb, rs, cvec) else genIndexed (offset-2, rb, ri, Scale2, rs, cvec) ) | genStore (rs: reg, offset: int, rb: reg, STORE_BYTE, ri, cvec) : unit = let (* Only some of the 32 bit registers can be used to store from. Eax, Ebx, Ecx and Edx are fine and the code used for those registers corresponds to their low-order byte. The other registers can't be used. In the absence of some way of telling the higher-level code-generator about this or finding out if a suitable register is free if we are given one of the other registers we just have to make the best of it. *) val regToStore = if getReg rs <= 3 then rs (* No problem *) else if rb regNeq eax andalso ri regNeq eax then eax else if rb regNeq ebx andalso ri regNeq ebx then ebx else ecx (* Must be free *) in if rs regEq regToStore then () else (* Have to move the value into the the right register. *) ( genPush(regToStore, cvec); genMove(regToStore, rs, cvec) ); (* The value we store has to be untagged. *) genop (Group2_1_A, cvec); genmodrm(Register, 5 (* shr *), getReg regToStore, cvec); if ri regEq regNone then () else ( (* Untag the index as well. *) genop (Group2_1_A, cvec); genmodrm(Register, 5 (* shr *), getReg ri, cvec) ); genop (MOVB_R_A, cvec); if ri regEq regNone then genEA (offset, rb, regToStore, cvec) else genIndexed (offset, rb, ri, Scale1, regToStore, cvec); (* Restore the original value, either by popping or by retagging. This ensures we don't have a bad value around and also restores the original value since it may still be wanted. *) if rs regEq regToStore then genTag(rs, cvec) else genop(POP_R regToStore, cvec); if ri regEq regNone then () else (* retag the index as well. *) genTag (ri, cvec) end; (* Move an immediate value into a register. The immediate value may be any 32-bit number. *) fun genMoveI (rd:reg, immed:int, cvec) = (* There may be better ways e.g. xorl rd,rd; addl immed,rd. *) (* Need 32 bit immediate. *) (* what if it's zero? (looks like marker word) SPF *) ( genop (MOVL_32_R rd, cvec); gen32s (immed, cvec) ); (* Exported. *) fun genLoadCoderef (c:code, rd:reg, cvec) : unit = ( genop (MOVL_32_R rd, cvec); codeConst (c, false, cvec) ) type handlerLab = addrs ref; (* Exported. Loads the address of the destination of a branch. Used to put in the address of the exception handler. We used to have pushAddress in place of this which pushed the address at the same time. On this architecture it can save an instruction but it's a problem on machines where we have to load the address into a register - we don't have a spare checked register available. *) fun loadHandlerAddress (rd, cvec) : handlerLab = let val lab = ref addrZero; in genop (MOVL_32_R rd, cvec); addConstToVec (HVal lab, false, cvec); lab end; (* Exported *) fun fixupHandler (lab:handlerLab, cvec as Code{exited, ic, branchCheck, ...}) : unit = ( (* Make sure anything pending is done first. *) (* 15 comes from maximum instruction size + up to 3 nops. *) doPending (cvec, 15); (* Ensure the return address is aligned onto a word + 2 byte boundary. *) align (2, cvec); exited := false; branchCheck := !ic; lab := !ic ); datatype callKinds = Recursive (* The function calls itself. *) | ConstantFun of machineWord * bool (* A pre-compiled or io function. *) | CodeFun of code (* A static link call. *) | FullCall (* Full closure call *) (***************************************************************************** Calling conventions: FullCall: the caller loads the function's closure into regClosure and then (the code here) does an indirect jump through it. Recursive: the caller loads its own function's closure/static-link into regClosure and the code here does a jump to the start of the code. ConstantFun: a direct or indirect call through the given address. If possible the caller will have done the indirection for us and passed false as the indirection value. The exception is calls to IO functions where the address of the code itself is invalid. If the closure/static-link value is needed that will already have been loaded. CodeFun: the same as ConstantFun except that this is used only for static-link calls so is never indirect. *****************************************************************************) (* Call a function. *) fun callFunction (callKind, cvec as Code {selfCalls, mustCheckStack, ic, ... }) : unit = (* If we ever call a function we must do a stack check. *) ( mustCheckStack := true; case callKind of Recursive => let val lab : addrs = genSelfCall cvec; in selfCalls := lab :: ! selfCalls end | FullCall => (* Indirect call through closure reg. *) ( (* Make sure anything pending is done first. *) (* 15 comes from the maximum instruction size (12) used in genop, together with up to 3 nops. *) doPending (cvec, 15); (* Ensure the return address is aligned on a word + 2 byte boundary. *) align (0, cvec); genop (Group5, cvec); genmodrm(Based, 2 (* call *), getReg regClosure, cvec) ) | CodeFun c => ( (* Make sure anything pending is done first. *) doPending (cvec, 15); (* Ensure the return address is aligned on a word + 2 byte boundary. *) align (1, cvec); genop (CALL_32, cvec); codeConst (c, true, cvec) ) | ConstantFun(w, false) => ( (* Make sure anything pending is done first. *) doPending (cvec, 15); (* Ensure the return address is aligned on a word + 2 byte boundary. *) align (1, cvec); genop (CALL_32, cvec); addConstToVec (WVal w, true, cvec) ) | ConstantFun(w, true) => ( (* Make sure anything pending is done first. *) doPending (cvec, 15); (* Ensure the return address is aligned on a word + 2 byte boundary. *) align (0, cvec); genop (Group5, cvec); genmodrm(Based, 2 (* call *), 5 (* Immediate address. *), cvec); addConstToVec (WVal w, false, cvec) ); if getAddr (!ic) mod 4 <> 2 then raise InternalError "callFunction: call not aligned" else () ); (* Exported. Tail recursive jump to a function. N.B. stack checking is used both to ensure that the stack does not overflow and also as a way for the RTS to interrupt the code at a safe place. The RTS can set the stack limit "register" at any time but the code will only take a trap when it next checks the stack. The only way to break out of infinite loops is for the user to type control-C and some time later for the code to do a stack check. We need to make sure that we check the stack in any function that my be recursive, directly or indirectly. *) fun jumpToFunction (callKind, returnReg, cvec as Code{selfJumps, exited, mustCheckStack, ...}) = ( (* Must push the return register? *) if returnReg regNeq regNone then genop (PUSH_R returnReg, cvec) else (); case callKind of Recursive => let val U : unit = mustCheckStack := true; val lab = genSelfBranch cvec; in selfJumps := lab @ ! selfJumps end | FullCall => ( (* Full closure call *) mustCheckStack := true; genop (Group5, cvec); genmodrm(Based, 4 (* jmp *), getReg regClosure, cvec) ) | CodeFun c => ( mustCheckStack := true; (* May be recursive. *) genop (JMP_32, cvec); codeConst (c, true, cvec) ) | ConstantFun(w, false) => ( mustCheckStack := true; (* May be recursive. *) genop (JMP_32, cvec); addConstToVec (WVal w, true, cvec) ) | ConstantFun(w, true) => ( (* Indirect jumps are used to call into the RTS. No need to check the stack. *) genop (Group5, cvec); genmodrm(Based, 4 (* jmp *), 5 (* Immediate address. *), cvec); addConstToVec (WVal w, false, cvec) ); exited := true (* We're not coming back. *) ); (* Exported. Return and remove args. *) fun returnFromFunction (resReg, args, cvec as Code{exited, ...}) : unit = (if resReg regNeq regNone then raise InternalError "Wrong argument" else if args = 0 then genop (RET, cvec) else let val offset = args * 4 in genop (RET_16, cvec); gen8u (offset mod exp2_8, cvec); gen8s (offset div exp2_8, cvec) end; exited := true (* We're not coming back. *) ); (* Exported. The exception argument has already been loaded into eax *) (* Call, rather than jump to, the exception code so that we have the address of the caller if we need to produce an exception trace. *) fun raiseException cvec = ( doPending (cvec, 15); (* Since we're calling we put the "return address" on a word+2 byte boundary. This is never actually used as a return address but it's probably best to make sure it's properly aligned. It probably simplifies exception tracing which is the reason it's there. *) align (3, cvec); genop(Group5, cvec); genmodrm (Based8, 2 (* call *), getReg ebp, cvec); gen8u (MemRegRaiseException, cvec) ) (* Exported. Set a register to a particular offset in the stack. *) fun genStackOffset (reg, byteOffset, cvec) : unit = if byteOffset = 0 then genMove (reg, regStackPtr, cvec) else genLeal (reg, regStackPtr, byteOffset, cvec) (* Only used for while-loops. *) fun jumpback (lab, stackCheck, cvec as Code{exited, ic, ...}) : unit = ( (* Put in a stack check. This is used to allow the code to be interrupted. *) if stackCheck then ( (* cmp reg,16(%ebp)*) genop(Arith (CMP, 3), cvec); genmodrm (Based8, getReg esp, getReg ebp, cvec); gen8u (MemRegStackLimit, cvec); (* jnb 3 *) let val lab = [putConditional (JNB, cvec)] in (* call *) genop(Group5, cvec); genmodrm (Based8, 2 (* call *), getReg ebp, cvec); gen8u (MemRegStackOverflowCall, cvec); fixup (lab, cvec) end ) else (); (* Do any pending instructions before calculating the offset, just in case we put in some instructions first. *) doPending (cvec, 12); let val offset = lab addrMinus (!ic); (* Negative *) val offset2 = offset - 2; in if is8Bit offset2 then ( genop (JMP_8, cvec); gen8s (offset2, cvec) ) else ( genop (JMP_32, cvec); gen32s (offset - 5, cvec) ) end; exited := true ); (* Allocate store and put the resulting pointer in the result register. *) fun allocStore (size, flag, resultReg, cvec) : unit = let val bytes = (size + 1) * 4; val lengthWord = size + (Word8.toInt flag * exp2_24); (* Size + mutable. *) in (* movl 0(%ebp),r; subl (size+1)*4,r; cmpl r,8(%ebp); jnb 1f; call 40[%ebp]; 1f: movl r,0(%ebp); movl size,-4(r); *) genLoad (MemRegLocalMPointer, ebp, resultReg, cvec); genLeal (resultReg, resultReg, ~ bytes, cvec); genop (Arith (CMP, 3 (* r/m to reg *)), cvec); genmodrm(Based8, getReg resultReg, getReg ebp, cvec); gen8s (MemRegLocalMbottom, cvec); let val lab = [putConditional (JNB, cvec)] in (* If we don't have enough store for this allocation we call this function. *) genop (Group5, cvec); genmodrm(Based8, 2 (* call *), getReg ebp, cvec); gen8s (MemRegHeapOverflowCall, cvec); fixup (lab, cvec) end; genStore (resultReg, MemRegLocalMPointer, ebp, STORE_WORD, regNone, cvec); (* Set the size field of a newly allocated piece of store. *) genop (MOVL_32_A, cvec); genmodrm(Based8, 0, getReg resultReg, cvec); gen8s (~4, cvec); gen32u (lengthWord, cvec) end; (* Remove the mutable bit by clearing the flag byte. *) fun setFlag (baseReg, cvec, flag) : unit = genStoreI (toMachineWord flag, ~1, baseReg, STORE_BYTE, regNone, cvec); (* Small tuples and closures are created by allocating the space and storing into it without setting the mutable bit. This is safe provided there are no traps until all the values have been stored, and gcode checks for this by loading all the values, apart from constants, into registers. We have to make sure that we don't mess this up by reordering a load instruction (which might cause a persistent store trap) before the final store. Gcode calls "completeSegment" after the last store and we flush the queue just to be on the safe side. *) (* This comment applied to the (very) old persistent store system and is no longer relevant. I've left the comment in because there may be code that assumes that this is still necessary. DCJM June 2006. *) val completeSegment = flushQueue; datatype instrs = instrMove | instrAddA | instrSubA | instrRevSubA | instrMulA | instrAddW | instrSubW | instrRevSubW | instrMulW | instrDivW | instrModW | instrOrW | instrAndW | instrXorW | instrLoad | instrLoadB | instrVeclen | instrVecflags | instrPush | instrUpshiftW (* logical shift left *) | instrDownshiftW (* logical shift right *) | instrDownshiftArithW (* arithmetic shift right *) | instrGetFirstLong | instrStringLength | instrSetStringLength | instrBad; (* Can the we use the same register as the source and destination of an instructions? On this machine - no. *) val canShareRegs : bool = false; (* Is there a general register/register operation? Some operations may not be implemented because this machine does not have a suitable instruction or simply because they have not yet been added to the code generator. It is possible for an instruction to be implemented as a register/immediate operation but not as a register/register operation (e.g. multiply) *) fun instrIsRR instrUpshiftW = false (* General shifts require CL register *) | instrIsRR instrDownshiftW = false | instrIsRR instrDownshiftArithW = false (* | instrIsRR instrMulA = false (* Too complicated to implement *) | instrIsRR instrMulW = false (* Too complicated to implement *) | instrIsRR instrDivW = false | instrIsRR instrModW = false *) | instrIsRR _ = true ; datatype tests = Length of opCode (* always a conditional jump *) | Arb of opCode | Wrd of opCode; val Short = Length JNE; val Long = Length JE; val testNeqW = Wrd JNE; val testEqW = Wrd JE; val testGeqW = Wrd JNB; (* These are UNsigned comparisons *) val testGtW = Wrd JA; val testLeqW = Wrd JNA; val testLtW = Wrd JB; val testNeqA = Arb JNE; val testEqA = Arb JE; val testGeqA = Arb JGE; val testGtA = Arb JG; val testLeqA = Arb JLE; val testLtA = Arb JL; (* Is this argument acceptable as an immediate or should it be loaded into a register? *) local fun isPower2 n = let fun p2 i = if i < n then p2 (i*2) else i = n in n > 0 andalso p2 1 end in fun instrIsRI (i, cnstnt) = case i of instrBad => false | instrRevSubA => false | instrRevSubW => false | instrMove => true (* All constants are immediate. *) | instrPush => true (* All constants are immediate. *) | instrMulA => isShort cnstnt andalso toInt (toShort cnstnt) = 2 | instrMulW => isShort cnstnt andalso isPower2(toInt (toShort cnstnt)) | instrDivW => isShort cnstnt andalso isPower2(toInt (toShort cnstnt)) | instrModW => isShort cnstnt andalso isPower2(toInt (toShort cnstnt)) | instrSetStringLength => false (* The string length is untagged and so it's not safe to put it inline. *) | _ => isShort cnstnt (* All others must be short *) end; (* Test a single argument and trap if it is long. The result is the instruction address of the trap, and is used to jump back to if the instruction overflows. *) fun tagTest1 (r: reg, cvec as Code{ic, ...}) = let val regNum = getReg r; in if regNum = getReg eax then (* Special instruction for testing accumulator. Can use an 8-bit test. *) ( genop (TEST_ACC8, cvec); gen8u (1, cvec) ) else if regNum < 4 (* can we use an 8-bit test? *) then (* Yes. The register value refers to low-order byte. *) ( genop (Group3_a, cvec); genmodrm (Register, 0 (* test *), regNum, cvec); gen8u (1, cvec) ) else ( genop (Group3_A, cvec); genmodrm (Register, 0 (* test *), regNum, cvec); gen32u (1, cvec) ); let val lab = putConditional (JNE, cvec); (* generates code *) val jumpback = !ic; in genop(Group5, cvec); genmodrm (Based8, 2 (* call *), getReg ebp, cvec); gen8u (MemRegArbEmulation, cvec); fixup ([lab], cvec); jumpback end end; (* tagTest1 *) (* Test a pair of arguments and trap if either is long. The result is the instruction address of the trap, and is used to jump back to if the instruction overflows. *) fun tagTest2 (rd:reg, r1:reg, r2:reg, useOr:bool, cvec as Code{ic, ...}) : addrs = let (* In most cases we have to trap if EITHER is long, and so we AND together the arguments. However if we are comparing two arbitrary precision values for (in)equality, we need only trap if BOTH are long, since if one is long and the other not then they are both definitely different. *) val testOP = if useOr then OR else AND; in (* If the destination register is not the same as either source register we can use that directly, otherwise we have to push it. *) (* bug-fixed SPF 3/1/95 - now checks both r1 and r2. *) if rd regEq r1 then ( genPush (rd, cvec); genReg (testOP, rd, r2, cvec) ) else if rd regEq r2 then ( genPush (rd, cvec); genReg (testOP, rd, r1, cvec) ) else ( genMove (rd, r1, cvec); genReg (testOP, rd, r2, cvec) ); if rd regEq eax then (* Special instruction to test the accumulator. *) ( genop (TEST_ACC8, cvec); gen8u (1, cvec) ) else if (getReg rd) < 4 (* We can only use 8-bit tests with first 4 regs! (SPF) *) then (* Use an 8-bit test. The register value refers to low-order byte. *) ( genop (Group3_a, cvec); genmodrm (Register, 0(* test *), getReg rd, cvec); gen8u (1, cvec) ) else ( genop (Group3_A, cvec); genmodrm (Register, 0(* test *), getReg rd, cvec); gen32u (1, cvec) ); (* restore rd if it's used as a source register *) if (rd regEq r1) orelse (rd regEq r2) then genop (POP_R rd, cvec) else (); let val lab = putConditional (JNE, cvec); (* generates code *) val jumpback = !ic; in genop(Group5, cvec); genmodrm (Based8, 2 (* call *), getReg ebp, cvec); gen8u (MemRegArbEmulation, cvec); fixup ([lab], cvec); jumpback end end; (* generate the "jump on overflow" used to implement arbitrary-precision operations. *) fun genJO8 (addr, cvec as Code{ic, ...}) = let val U : unit = doPending (cvec, 12); val here = !ic; (* jump address calculations are relative to the value of the program counter *after* the instruction *) val offset = addr addrMinus (here addrPlus 2); in gen8u (opToInt JO, cvec); gen8s (offset, cvec) end (* All these can be handled. *) fun isCompRR tc = true; (* Is this argument acceptable as an immediate or should it be loaded into a register? *) fun isCompRI (tc, cnstnt) = case tc of Length _ => true | _ => isShort cnstnt; (* check!!! SPF *) (* Fixed and arbitrary precision comparisons. *) fun compareAndBranchRR (r1, r2, tc, cvec) : labels = case tc of Wrd opc => ( genReg (CMP, r1, r2, cvec); [putConditional (opc, cvec)] ) | Arb opc => let (* Test the tags. If we are testing for equality we can OR the tags and only trap if both arguments are long. Try to use eax, ebx, ecx or edx for rd because then we can use a single byte test. *) val rd = if getReg r1 > 4 then r2 else r1; val useOr = case opc of JE => true | JNE => true | _ => false ; in tagTest2 (rd, r1, r2, useOr, cvec); genReg (CMP, r1, r2, cvec); [putConditional (opc, cvec)] end | _ => raise InternalError "Should not have short/long here"; fun compareAndBranchRI (r, cnstnt, tc, cvec) : labels = let val c = toInt (toShort cnstnt); in case tc of Length opc => ( (* Since we're only interested in the bottom bit we could use an 8-bit test, provided the value was in eax, ebx, ecx, edx. *) genop (Group3_A, cvec); genmodrm (Register, 0, getReg r, cvec); gen32u (1, cvec); [putConditional (opc, cvec)] ) | Wrd opc => ( genImmed (CMP, r, tag c, cvec); [putConditional (opc, cvec)] ) | Arb opc => ( (* Can do tests for (in)equality on arbitrary precision values without checking the tags since the values we're comparing against are short constants. *) case opc of JE => () | JNE => () | _ => (tagTest1 (r, cvec) : addrs; ()) ; genImmed (CMP, r, tag c, cvec); [putConditional (opc, cvec)] ) end; val inlineAssignments = true; (* Common code for div and mod word. They are identical apart from getting the result. *) fun divmodWord(isDiv: bool, r1:reg, r2:reg, rd:reg, cvec) : unit = let (* The divisor needs to be a different register from either eax or edx. It also needs to be different from r1 since we're going to modify divReg before we load r1 into eax. *) val divReg = if rd regNeq eax andalso rd regNeq edx then rd else if r1 regNeq ecx then ecx else esi in (* This is a bit complicated because the result is always placed in the EDX:EAX register pair so we have to save one or both. *) if rd regNeq eax then genPush(eax, cvec) else (); if rd regNeq edx then genPush(edx, cvec) else (); if divReg regNeq rd then genPush(divReg, cvec) else (); (* Untag, but don't shift, the divisor and dividend. *) if r2 regEq eax then ( if divReg regEq r1 then raise InternalError "Assertion failed: Invalid registers" else (); (* We use move followed by substraction since that tests the result for zero. *) genMove(divReg, r2, cvec); genImmed (SUB, divReg, 1, cvec); genLeal (eax, r1, ~1, cvec) ) else ( genLeal (eax, r1, ~1, cvec); genMove(divReg, r2, cvec); genImmed (SUB, divReg, 1, cvec) ); let val lab = [putConditional (JNE, cvec)] in (* call *) (* Use a call so we can get an exception trace. *) genop(Group5, cvec); genmodrm (Based8, 2 (* call *), getReg ebp, cvec); gen8u (MemRegRaiseDiv, cvec); fixup (lab, cvec) end; (* Do the division. *) genReg (XOR, edx, edx, cvec); genop (Group3_A, cvec); genmodrm(Register, 6 (* div *), getReg divReg, cvec); if isDiv then ( (* Tag the result into the result register. *) genop (LEAL, cvec); genIndexed (1, eax, eax, Scale1, rd, cvec) ) else (* Add the tag back into the remainder. *) genLeal (rd, edx, 1, cvec); (* Restore the saved registers. N.B. This also has the effect of making sure that both eax and edx contain valid values. *) if divReg regNeq rd then genop(POP_R divReg, cvec) else (); if rd regNeq edx then genop(POP_R edx, cvec) else (); if rd regNeq eax then genop(POP_R eax, cvec) else () end (* General register/register operation. *) fun genRR (inst, r1:reg, r2:reg, rd:reg, cvec) : unit = ( if (rd regEq r1) orelse (rd regEq r2) then raise InternalError "Registers must be different" else (); case inst of instrMove => (* Move from one register to another. r2 is ignored *) if rd regEq regHandler (* Not a real register. *) then genStore (r1, MemRegHandlerRegister, ebp, STORE_WORD, regNone, cvec) else genMove (rd, r1, cvec) | instrPush => (* Both rd and r2 are ignored. *) genPush (r1, cvec) | instrAddA => (* Arbitrary precision addition. *) (* If either argument is long, or if both arguments are short but the result overflows, the code branchs to "addr". This executes a trap which gets us into the run-time system which then emulates the instructions, using long arithmetic. Isn't that cute? To make it work, we have to be sure that the source and destination registers are different, because otherwise we wouldn't be able to perform the emulation following an arithmetic overflow. Warning: since the RTS can only emulate a few instructions, we have to be very careful about what code we generate here. For example, we use 2-byte "leal" instructions for tagging and untagging rather than 1-byte "add" instructions because the emulation has to treat these two operations differently. SPF 4/1/95 *) let val addr = tagTest2 (rd, r1, r2, false, cvec); (* generates code *) in (* Do the actual operation after removing a tag from one arg. *) genLeal (rd, r1, ~1, cvec); genReg (ADD, rd, r2, cvec); genJO8 (addr, cvec) end | instrSubA => (* Arbitrary precision subtraction. *) let val addr = tagTest2 (rd, r1, r2, false, cvec); (* generates code *) in (* Do the actual operation after removing a tag from one arg. *) genMove (rd, r1, cvec); genReg (SUB, rd, r2, cvec); genLeal (rd, rd, 1, cvec); (* Put back the tag. *) genJO8 (addr, cvec) end | instrRevSubA => (* Arbitrary precision subtraction. *) let val addr = tagTest2 (rd, r1, r2, false, cvec); (* generates code *) in (* Do the actual operation after removing a tag from one arg. *) genMove (rd, r2, cvec); genReg (SUB, rd, r1, cvec); genLeal (rd, rd, 1, cvec); (* Put back the tag. *) genJO8 (addr, cvec) end | instrMulA => (* Arbitrary precision multiplication. *) let val addr = tagTest2 (rd, r1, r2, false, cvec); (* generates code *) in (* This is a bit complicated because the result is always placed in the EDX:EAX register pair so we have to save one or both. *) (* If the multiply overflows we need to be able to recover the original arguments in order to emulate the instruction. *) if rd regNeq eax then genPush(eax, cvec) else (); if rd regNeq edx then genPush(edx, cvec) else (); if r2 regEq edx then ( (* Untag, but don't shift the multiplicand. *) genLeal (eax, r1, ~1, cvec); (* Shift down the multiplier. *) genop (Group2_1_A, cvec); genmodrm(Register, 7 (* sar *), getReg edx, cvec) ) else (* r2 <> edx *) ( (* Shift down the multiplier. *) if r1 regNeq edx then genMove(edx, r1, cvec) else (); genop (Group2_1_A, cvec); genmodrm(Register, 7 (* sar *), getReg edx, cvec); (* Untag, but don't shift the multiplicand. *) genLeal (eax, r2, ~1, cvec) ); (* Do the multiplication. *) genop (Group3_A, cvec); genmodrm(Register, 5 (* imull *), getReg edx, cvec); (* Add back the tag, but don't shift. *) genLeal (rd, eax, 1, cvec); (* Restore the saved registers. N.B. This also has the effect of making sure that both eax and edx contain valid values. *) if rd regNeq edx then genop(POP_R edx, cvec) else (); if rd regNeq eax then genop(POP_R eax, cvec) else (); genJO8 (addr, cvec) (* Check for overflow. *) end | instrAddW => (* Fixed precision addition. (Doesn't test for overflow.) *) ( (* Remove the tag from one argument, then add in the other. *) (* This could be done using a single leal instruction: leal rd,[r1+r2-1] *) genLeal (rd, r2, ~1, cvec); genReg (ADD, rd, r1, cvec) ) | instrSubW => (* Fixed precision subtraction. (Doesn't test for overflow.) *) ( genMove (rd, r1, cvec); genReg (SUB, rd, r2, cvec); genImmed (ADD, rd, 1, cvec) ) | instrRevSubW => (* Fixed precision subtraction. (Doesn't test for overflow.) *) ( genMove (rd, r2, cvec); genReg (SUB, rd, r1, cvec); genImmed (ADD, rd, 1, cvec) ) | instrMulW => (* Fixed precision multiplication. (Doesn't test for overflow.) *) ( (* This is a bit complicated because the result is always placed in the EDX:EAX register pair so we have to save one or both. *) if rd regNeq eax then genPush(eax, cvec) else (); if rd regNeq edx then genPush(edx, cvec) else (); if r2 regEq edx then ( (* Untag, but don't shift the multiplicand. *) genLeal (eax, r1, ~1, cvec); (* Shift down the multiplier. *) genop (Group2_1_A, cvec); genmodrm(Register, 5 (* shr *), getReg edx, cvec) ) else ( (* Shift down the multiplier. *) if r1 regNeq edx then genMove(edx, r1, cvec) else (); genop (Group2_1_A, cvec); genmodrm(Register, 5 (* shr *), getReg edx, cvec); (* Untag, but don't shift the multiplicand. *) genLeal (eax, r2, ~1, cvec) ); (* Do the multiplication. *) genop (Group3_A, cvec); genmodrm(Register, 4 (* mull *), getReg edx, cvec); (* Add back the tag, but don't shift. *) genLeal (rd, eax, 1, cvec); (* Restore the saved registers. N.B. This also has the effect of making sure that both eax and edx contain valid values. *) if rd regNeq edx then genop(POP_R edx, cvec) else (); if rd regNeq eax then genop(POP_R eax, cvec) else () ) | instrDivW => (* Fixed precision division. (Doesn't test for overflow.) *) divmodWord(true, r1, r2, rd, cvec) | instrModW => (* Fixed precision remainder. (Doesn't test for overflow.) *) divmodWord(false, r1, r2, rd, cvec) | instrOrW => (* Logical or. *) ( genMove (rd, r1, cvec); genReg (OR, rd, r2, cvec) ) | instrAndW => (* Logical and. *) ( genMove (rd, r1, cvec); genReg (AND, rd, r2, cvec) ) | instrXorW => ( (* Must remove the tag from one argument. *) genLeal (rd, r2, ~1, cvec); genReg (XOR, rd, r1, cvec) ) | instrLoad => (* Load a word. *) ( (* The index is already multiplied by 2, so we need only multiply by two again to give a word offset. Then we have to subtract 2 to account for the tag. *) genop (MOVL_A_R, cvec); genIndexed (~2, r1, r2, Scale2, rd, cvec) ) | instrLoadB => (* Load a byte. *) ( (* mov r2,rd; shrl $1,rd; movzl 0(r1,rd,1),rd; leal 1(,rd,2),rd *) genMove (rd, r2, cvec); genop (Group2_1_A, cvec); genmodrm(Register, 5 (* shr *), getReg rd, cvec); genop (ESCAPE, cvec); gen8u (11 * 16 + 6 (* movzl *), cvec); genIndexed (0, r1, rd, Scale1, rd, cvec); (* Tag the result. *) genTag (rd, cvec) ) | instrSetStringLength => (* Set the length word of a string. *) ( (* The length is untagged. *) genop (Group2_1_A, cvec); genmodrm(Register, 5 (* shr *), getReg r2, cvec); genop (MOVL_R_A, cvec); genEA (0, r1, r2, cvec); (* Restore the original value. This ensures we don't have a bad value around and also restores the original value since it may still be wanted. *) genTag(r2, cvec) ) | _ => (* bad and unimplemented instrs *) raise InternalError "Unimplemented instruction" ); (* end genRR *) (* Register/immediate operations. In many of these operations we have to tag the immediate value. *) fun genRI (inst, rs, constnt, rd, cvec) : unit = let (* log2 function for special cases of powers of 2. *) fun log2 n = let fun l2 i j = if i < n then l2 (i*2) (j+1) else if i = n then j else raise InternalError "Not a power of two" in if n <= 0 then raise InternalError "Not a power of two" else l2 1 0 end in if rd regEq rs andalso (case inst of instrPush => false | _ => true) then raise InternalError "Registers must be different" else (); case inst of instrMove => if isShort constnt then (* Load a constant into a register. rs is ignored. *) let val c = toInt (toShort constnt); val tagged = tag c; in genMoveI (rd, tagged, cvec) end else ( genop (MOVL_32_R rd, cvec); addConstToVec (WVal constnt, false, cvec) (* Remember this constant and address. *) ) | instrPush => if isShort constnt then (* Both rd and rs are ignored. *) let val c = toInt (toShort constnt); val tagged = tag c; in if not (is8Bit tagged) then ( genop (PUSH_32, cvec); gen32s(tagged, cvec) ) else ( genop (PUSH_8, cvec); gen8s (tagged, cvec) ) end else ( genop (PUSH_32, cvec); addConstToVec (WVal constnt, false, cvec) (* Remember this constant and address. *) ) | instrAddA => (* Arbitrary precision addition. *) let val c = toInt (toShort constnt); val addr = tagTest1 (rs, cvec); in genMove (rd, rs, cvec); genImmed (ADD, rd, semitag c, cvec); genJO8 (addr, cvec) end | instrSubA => (* Arbitrary precision subtraction. *) let val c = toInt (toShort constnt); val addr = tagTest1 (rs, cvec); in genMove (rd, rs, cvec); genImmed (SUB, rd, semitag c, cvec); (* needs AHL RTS *) genJO8 (addr, cvec) end | instrAddW => (* Fixed precision addition - doesn't check for overflow. *) (* The argument is shifted but not tagged *) let val c = toInt (toShort constnt) in genLeal (rd, rs, semitag c, cvec) end | instrSubW => (* Fixed precision subtraction - doesn't check for overflow. *) (* The argument is shifted but not tagged. *) let val c = toInt (toShort constnt) in genLeal (rd, rs, ~ (semitag c), cvec) end (* Now removed. This is no longer safe now that we look for constants in the code. | instrRevSubW => (* Fixed precision reverse subtraction - doesn't check for overflow. *) ( genMoveI (rd, semitag c + 2, cvec); genReg (SUB, rd, rs, cvec) ) *) | instrOrW => (* Logical or. *) let val c = toInt (toShort constnt); val tagged = tag c; in genMove (rd, rs, cvec); genImmed (OR, rd, tagged, cvec) end | instrAndW => (* Logical and. *) let val c = toInt (toShort constnt); val tagged = tag c; in genMove (rd, rs, cvec); genImmed (AND, rd, tagged, cvec) end | instrXorW => (* Constant must be shifted but not tagged. *) let val c = toInt (toShort constnt) in genMove (rd, rs, cvec); genImmed (XOR, rd, semitag c, cvec) end | instrUpshiftW => (* Word shift of more than 31 (unsigned) is defined to return zero for the logical shifts and either 0 or all ones for the arithmetic shift. The i386 shift instructions mask the shift value instead. *) let val c = toInt (toShort constnt) in if c < 0 orelse c > 31 then genMoveI (rd, tag 0, cvec) else let fun power2 n = if n = 0 then 1 else 2 * power2 (n-1) in genMove (rd, rs, cvec); genop (Group2_8_A, cvec); genmodrm(Register, 4 (* shl *), getReg rd, cvec); gen8s (c, cvec); (* We have shifted the tag bit along with everything else. We need to subtract the shifted tag bit and a tag bit to the end. *) genLeal (rd, rd, 1 - power2 c, cvec) end end | instrDownshiftW => let val c = toInt (toShort constnt) in if c < 0 orelse c > 31 then genMoveI (rd, tag 0, cvec) else ( genMove (rd, rs, cvec); genop (Group2_8_A, cvec); genmodrm(Register, 5 (* shr *), getReg rd, cvec); gen8s (c, cvec); genImmed (OR, rd, tag 0, cvec) (* Put in the tag *) ) end | instrDownshiftArithW => (* In this case it's easiest to set the shift to 31. *) let val c = toInt (toShort constnt) in genMove (rd, rs, cvec); genop (Group2_8_A, cvec); genmodrm(Register, 7 (* sar *), getReg rd, cvec); gen8s (if c < 0 orelse c > 31 then 31 else c, cvec); genImmed (OR, rd, tag 0, cvec) (* Put in the tag *) end | instrMulA => (* We only handle multiplication by two at the moment. We could handle a wider range but it's not that easy particularly because the overflow flag is not defined on shifts of more than one. *) let val c = toInt (toShort constnt) val addr = tagTest1 (rs, cvec); in if c = 2 then () else raise InternalError "Multiply not implemented"; (* Do the actual operation after removing a tag from one arg. *) genLeal (rd, rs, ~1, cvec); genReg (ADD, rd, rs, cvec); genJO8 (addr, cvec) end | instrMulW => let val c = toInt (toShort constnt) (* We only handle multiplication by powers of two at the moment. This is easier than for arbitrary precision multiplication because we don't have to detect overflow. *) val log2c = log2 c in if log2c = 0 (* Multiplying by one??? *) then genMove (rd, rs, cvec) else if log2c = 1 then (* Multiplying by 2. *) ( genop (LEAL, cvec); (* Using a base and index means the ~1 is just a byte. *) genIndexed (~1, rs, rs, Scale1, rd, cvec) ) else if log2c = 2 then (* Multiplying by 4 *) ( genop (LEAL, cvec); (* No base register: ~3 is a full word. *) genIndexed (~3, regNone, rs, Scale4, rd, cvec) ) else if log2c = 3 then (* Multiplying by 8 *) ( genop (LEAL, cvec); genIndexed (~7, regNone, rs, Scale8, rd, cvec) ) else (* Other powers of 2. *) ( genMove (rd, rs, cvec); genop (Group2_8_A, cvec); genmodrm(Register, 4 (* shl *), getReg rd, cvec); gen8s (log2c, cvec); genLeal (rd, rd, 1-c, cvec) (* Remove the shifted tag and add the tag. *) ) end | instrDivW => let val c = toInt (toShort constnt) (* We only handle division by powers of two at the moment. *) val log2c = log2 c in if log2c = 0 (* Dividing by one??? *) then genMove (rd, rs, cvec) else (* Other powers of 2. *) ( genMove (rd, rs, cvec); genop (Group2_8_A, cvec); genmodrm(Register, 5 (* shr *), getReg rd, cvec); gen8s (log2c, cvec); (* Set the tag bit, which may already be set as a result of shifting a bit into it. *) genImmed (OR, rd, tag 0, cvec) ) end | instrModW => let val c = toInt (toShort constnt) val ASSERT = log2 c (* Check it's a power of 2. *) val tagged = tag (c-1) in genMove (rd, rs, cvec); genImmed (AND, rd, tagged, cvec) end | instrLoad => let val c = toInt (toShort constnt) in (* Offset is words so multiply by 4 to get byte offset. *) genLoad (c * 4, rs, rd, cvec) end | instrLoadB => (* Load a byte. *) let val c = toInt (toShort constnt) in genop (ESCAPE, cvec); gen8u (11 * 16 + 6 (* movzx *), cvec); genEA (c, rs, rd, cvec); (* Tag the result. *) genTag (rd, cvec) end | instrVeclen => ( genLoad (~4, rs, rd, cvec); (* length only occupies the least significant 24 bits - the other bits are flags. *) genImmed (AND, rd, exp2_24 - 1, cvec); (* Tag the result. *) genTag (rd, cvec) ) | instrVecflags => (* Load the flags byte. *) ( genop (ESCAPE, cvec); gen8u (11 * 16 + 6 (* movzx *), cvec); genEA (~1, rs, rd, cvec); (* Tag the result. *) genTag (rd, cvec) ) | instrGetFirstLong => let (* Get the first word of a long integer. We've already checked that it is long. *) (* Test the "sign bit" of the object. *) val _ = ( genop (Group3_a, cvec); genmodrm(Based8, 0 (* test *), getReg rs, cvec); gen8s (~1, cvec); gen8u (16, cvec) ) (* Load the unsigned, untagged, little-endian value. *) val _ = genLoad (0, rs, rd, cvec); (* Skip if the sign bit wasn't set. *) val l1 = [putConditional (JE, cvec)] in genop(Group3_A, cvec); genmodrm(Register, 3 (* neg *), getReg rd, cvec); fixup(l1, cvec); genTag (rd, cvec) end | instrStringLength => let (* If it's tagged the result is 1 otherwise we need to load the length word and tag it. *) val l1 = compareAndBranchRI (rs, toMachineWord 0 (* Unused *), Long, cvec) val _ = genMoveI (rd, tag 1, cvec); val l2 = unconditionalBranch cvec in fixup(l1, cvec); genLoad (0, rs, rd, cvec); (* Load the length word. *) genTag (rd, cvec); (* And tag the result. *) fixup(l2, cvec) end | _ => (* bad *) raise InternalError "Unimplemented instruction" end; (* genRI *) type cases = int * addrs; (* On this architecture, the jumptable is physically inserted into the code as a vector of address offsets. The function "indexedCase" generates the space for the table and "makeJumpTable" inserts the actual entries, once the addresses are known. SPF 23/11/1997 Now changed to use a vector of jump instructions. These are padded out to 8 bytes with no-ops. The reason for the change is to ensure that the code segment only contains instructions so that we can scan for addresses within the code. It also simplifies and speeds up the indexed jump at the expense of doubling the size of the table itself. DCJM 1/1/2001 *) type jumpTableAddrs = addrs; fun constrCases (p as (i,a)) = p; type caseList = cases list; fun useIndexedCase (min:int, max:int, numberOfCases:int, exhaustive:bool) = isShort min andalso isShort max andalso numberOfCases > 7 andalso numberOfCases >= (max - min) div 3; fun indexedCase (r1:reg, r2:reg, min:int, max:int, exhaustive:bool, cvec as Code{exited, ic, ...}) : jumpTableAddrs = let val rangeCheck = if exhaustive then [] else let val taggedMin = tag min; val taggedMax = tag max; in (* Is it long? *) genop (Group3_A, cvec); genmodrm(Register, 0(* test *), getReg r1, cvec); gen32u(1, cvec); (* Need to check whether the branch is in range. *) let val l1 = putConditional (JE, cvec); (* Compare with the minimum. *) val UUU = genImmed(CMP, r1, taggedMin, cvec); val l2 = putConditional (JL, cvec); (* Compare with the maximum. *) val UUU = genImmed(CMP, r1, taggedMax, cvec); val l3 = putConditional (JG, cvec); in [l1, l2, l3] end end; val lab = ref addrZero; in (* Load the address of the jump table. *) genop (MOVL_32_R r2, cvec); addConstToVec (HVal lab, false, cvec); (* Compute the jump address. The index is a tagged integer so it is already multiplied by 2. We need to multiply by four to get the correct size. We subtract off the minimum value and also the shifted tag. *) genop (LEAL, cvec); genIndexed (min * ~8 - 4, r2, r1, Scale4, r2, cvec); (* Jump into the jump table. Since each entry in the table is 8 bytes long r2 will still be on a word + 2 byte boundary. *) genop (Group5, cvec); genmodrm(Register, 4 (* jmp *), getReg r2, cvec); exited := true; (* There's a very good chance that we will now extend the branches for the "out of range" checks. The code to do that doesn't know that all these branches will come to the same point so will generate three separate long branches. We could combine them but it's hardly worth it. *) doPending (cvec, (max - min + 1) * 8 (* size of table. *) + 3 (* Maximum alignment *)); (* The start address must be on a two byte boundary so that the address we've loaded is a valid code address. *) while getAddr (!ic) mod 4 <> 2 do genop (NOP, cvec); let fun initialiseTable i = if i > max then () (* Done *) else ( gen8u (opToInt JMP_32, cvec); gen32u (0, cvec); (* Add no-ops to make it 8 bytes. *) gen8u (opToInt NOP, cvec); gen8u (opToInt NOP, cvec); gen8u (opToInt NOP, cvec); initialiseTable (i+1) ) val here = !ic; in lab := here; initialiseTable min; fixup (rangeCheck, cvec); (* The default case comes in here. *) here end end; fun makeJumpTable (startTab:jumpTableAddrs, cl:caseList, default:addrs, min : int, max : int, Code{codeVec, ...}) : unit = let fun putCase i addr = let val addrOfJmp = startTab addrPlus ((i - min) * 8) val jumpOffset = (addr addrMinus addrOfJmp) - 5 (* From end of instr. *) in set32s(jumpOffset, addrOfJmp addrPlus 1, codeVec) end (* Initialise to the default. *) fun putInDefaults i = if i <= max then (putCase i default; putInDefaults(i+1)) else () (* Overwrite the defaults by the cases. N.B. We've generated the list in reverse order so if we have any duplicates we will correctly overwrite the later cases with earlier ones. *) fun putInCases [] = () | putInCases ((i, a) :: t) = (putCase i a; putInCases t) in putInDefaults min; putInCases cl end; fun printCode (Code{procName, numOfConsts, pcOffset, constVec, printStream, ...}) seg endcode = let val print = printStream val ptr = ref 0; (* prints a string representation of a number *) fun printHex v = print(Int.fmt StringCvt.HEX v) infix 3 +:= ; fun (x +:= y) = (x := !x + (y:int)); fun print32 () = let val valu = get32s (!ptr, seg); val U : unit = (ptr +:= 4); in if valu = tag 0 andalso !numOfConsts <> 0 then (* May be a reference to a code-segment we haven't generated yet. In that case we try to print the name of the function rather than simply printing "1". It might be nice to print the function name in other cases but that might be complicated. *) let val caddr = !ptr - 4 fun findRef [] = (* Not there - probably really tagged 0 *) printHex valu | findRef ((CVal(Code{procName, ...}), addr, _) :: rest) = if caddr = getAddr addr + ! pcOffset*4 then print("=" ^ procName) else findRef rest | findRef (_ :: rest) = findRef rest in findRef(! constVec) end else printHex valu end; fun get16s (a: int, seg: cseg) : int = let val b0 = Word8.toInt (csegGet (seg, a)); val b1 = Word8.toInt (csegGet (seg, a + 1)); val b1' = if b1 >= exp2_7 then b1 - exp2_8 else b1; in (b1' * exp2_8) + b0 end; fun print16 () = let val valu = get16s (!ptr, seg); val U : unit = (ptr +:= 2); in printHex valu end; fun print8 () = let val valu = get8s (!ptr, seg); val U : unit = ptr +:= 1; in printHex valu end; fun printJmp () = let val valu = get8s (!ptr, seg); val U : unit = ptr +:= 1; in printHex (valu + !ptr) end; (* Print an effective address. *) fun printEA () = let val modrm = Word8.toInt (csegGet (seg, !ptr)); val U : unit = (ptr +:= 1); val md = modrm div 64; val rm = modrm mod 8; in if md = 3 then print (regRepr (mkReg rm)) else if rm = 4 then let (* s-i-b present. *) val sib = Word8.toInt (csegGet (seg, !ptr)); val U : unit = (ptr +:= 1); val ss = sib div 64; val index = (sib div 8) mod 8; val base = sib mod 8; in if md = 1 then print8 () else if md = 2 orelse base = 5 (* andalso md=0 *) then print32 () else (); print "("; if md <> 0 orelse base <> 5 then print (regRepr (mkReg base)) else (); if index <> 4 (* No index. *) then print ("," ^ regRepr (mkReg index) ^ (if ss = 0 then ",1" else if ss = 1 then ",2" else if ss = 2 then ",4" (* N.B. *not* 3 - bugfix 29/3/95 *) else ",8")) else (); print ")" end else (* no s-i-b. *) if md = 0 andalso rm = 5 then (* Absolute address. *) (print "("; print32 (); print ")") else (* register plus offset. *) ( if md = 1 then print8 () else if md = 2 then print32 () else (); print ("(" ^ regRepr (mkReg rm) ^ ")") ) end; fun printArith opc = print (case opc of 0 => "add" | 1 => "or" | 2 => "adc" | 3 => "sbb" | 4 => "and" | 5 => "sub" | 6 => "xor" | _ => "cmp" ); in if procName = "" (* No name *) then print "?" else print procName; print ":\n"; while !ptr < endcode do let val U : unit = printHex (!ptr); (* The address. *) val U : unit = print "\t"; val opByte : int = get8u (!ptr, seg); val U : unit = ptr +:= 1; in if opByte = opToInt Group1_8_A orelse opByte = opToInt Group1_32_A then let (* Opcode is determined by next byte. *) val nb = Word8.toInt (csegGet (seg, !ptr)); in printArith ((nb div 8) mod 8); print "_rev\t"; printEA (); (* These are the wrong way round. *) print ","; if opByte = opToInt Group1_8_A then print8 () else print32 () end : unit else if opByte = opToInt JE then (print "je\t"; printJmp()) : unit else if opByte = opToInt JNE then (print "jne\t"; printJmp()) : unit else if opByte = opToInt JO then (print "jo\t"; printJmp()) : unit else if opByte = opToInt JL then (print "jl\t"; printJmp()) : unit else if opByte = opToInt JG then (print "jg\t"; printJmp()) : unit else if opByte = opToInt JLE then (print "jle\t"; printJmp()) : unit else if opByte = opToInt JGE then (print "jge\t"; printJmp()) : unit else if opByte = opToInt JB then (print "jb\t"; printJmp()) : unit else if opByte = opToInt JA then (print "ja\t"; printJmp()) : unit else if opByte = opToInt JNA then (print "jna\t"; printJmp()) : unit else if opByte = opToInt JNB then (print "jnb\t"; printJmp()) : unit else if opByte = opToInt JMP_8 then (print "jmp\t"; printJmp()) : unit else if opByte = opToInt JMP_32 then let val valu = get32s (!ptr, seg); val U : unit = (ptr +:= 4); in print "jmp\t"; printHex (!ptr + valu) end : unit else if opByte = opToInt CALL_32 then let val valu = get32s (!ptr, seg); val U : unit = (ptr +:= 4); in print "call\t"; printHex (!ptr + valu) end : unit else if opByte = opToInt MOVL_A_R then let (* Register is in next byte. *) val nb = Word8.toInt (csegGet (seg, !ptr)); val reg = (nb div 8) mod 8; in print "movl\t"; printEA (); print ","; print (regRepr (mkReg reg)) end : unit else if opByte mod 8 = 3 andalso opByte < 3 * 16 + 15 (* 0x3f *) then let (* Register is in next byte. *) val nb = Word8.toInt (csegGet (seg, !ptr)); val reg = (nb div 8) mod 8; in printArith ((opByte div 8) mod 8); print "\t"; printEA (); print ","; print (regRepr (mkReg reg)) end : unit else if opByte = opToInt MOVL_R_A then let (* Register is in next byte. *) val nb = Word8.toInt (csegGet (seg, !ptr)); val reg = (nb div 8) mod 8; in print "movl\t"; print (regRepr (mkReg reg)); print ","; printEA () end : unit else if opByte = opToInt MOVB_R_A then let (* Register is in next byte. *) val nb = Word8.toInt (csegGet (seg, !ptr)); val reg = (nb div 8) mod 8; in print "movb\t"; case reg of 0 => print "%al" | 1 => print "%cl" | 2 => print "%dl" | 3 => print "%bl" | 4 => print "%ah" | 5 => print "%ch" | 6 => print "%dh" | 7 => print "%bh" | _ => print ("r" ^ Int.toString reg); print ","; printEA () end : unit else if opByte >= opToInt (PUSH_R (mkReg 0)) andalso opByte <= opToInt (PUSH_R (mkReg 7)) then print ("pushl\t" ^ regRepr (mkReg (opByte mod 8))) : unit else if opByte >= opToInt (POP_R (mkReg 0)) andalso opByte <= opToInt (POP_R (mkReg 7)) then print ("pop\t" ^ regRepr (mkReg (opByte mod 8))) : unit else if opByte = opToInt NOP then print "nop" : unit else if opByte = opToInt LEAL then let (* Register is in next byte. *) val nb = Word8.toInt (csegGet (seg, !ptr)); val reg = (nb div 8) mod 8; in print "leal\t"; printEA (); print ","; print (regRepr (mkReg reg)) end : unit else if opByte >= opToInt (MOVL_32_R eax) andalso opByte <= opToInt (MOVL_32_R edi) then ( print "movl\t"; print32 (); print("," ^ regRepr (mkReg (opByte mod 8))) ) : unit else if opByte = opToInt MOVL_32_A then ( print "movl_rev\t"; printEA (); (* These are the wrong way round. *) print ","; print32 () ) : unit else if opByte = opToInt MOVB_8_A then ( print "movb_rev\t"; printEA (); (* These are the wrong way round. *) print ","; print8 () ) : unit else if opByte = opToInt PUSH_32 then (print "push\t"; print32 ()) : unit else if opByte = opToInt PUSH_8 then (print "push\t"; print8 ()) : unit else if opByte = opToInt Group5 then let (* Opcode is determined by next byte. *) val nb = Word8.toInt (csegGet (seg, !ptr)); val opc = (nb div 8) mod 8; in print (case opc of 2 => "call" | 4 => "jmp" | 6 => "push" | _ => "???" ); print "\t"; printEA () end : unit else if opByte = opToInt Group3_A then let (* Opcode is determined by next byte. *) val nb = Word8.toInt (csegGet (seg, !ptr)); val opc = (nb div 8) mod 8; in print (case opc of 0 => "testl" | 3 => "negl" | 4 => "mull" | 5 => "imull" | 6 => "divl" | 7 => "idivl" | _ => "???" ); print "\t"; printEA (); if opc = 0 then (print ","; print32 ()) else () end : unit else if opByte = opToInt Group3_a then let (* Opcode is determined by next byte. *) val nb = Word8.toInt (csegGet (seg, !ptr)); val opc = (nb div 8) mod 8; in print (case opc of 0 => "testb" | 3 => "negb" | _ => "???" ); print "\t"; printEA (); if opc = 0 then (print ","; print8 ()) else () end : unit else if opByte = opToInt Group2_8_A then let (* Opcode is determined by next byte. *) val nb = Word8.toInt (csegGet (seg, !ptr)); val opc = (nb div 8) mod 8; in print (case opc of 4 => "shl" | 5 => "shr" | 7 => "sar" | _ => "???" ); print "\t"; printEA (); (* These are the wrong way round. *) print ","; print8 () end : unit else if opByte = opToInt Group2_1_A then let (* Opcode is determined by next byte. *) val nb = Word8.toInt (csegGet (seg, !ptr)); val opc = (nb div 8) mod 8; in print (case opc of 5 => "shr" | 7 => "sar" | _ => "???" ); print "\t1,"; printEA () end : unit else if opByte = opToInt ESCAPE then let (* Opcode is in next byte. *) val opByte2 = Word8.toInt (csegGet (seg, !ptr)); val U : unit = (ptr +:= 1); in if opByte2 = 11 * 16 + 6 (* 0xb6 *) then let val nb = Word8.toInt (csegGet (seg, !ptr)); val reg = (nb div 8) mod 8; in print "movzl\t"; printEA (); print ","; print (regRepr (mkReg reg)) end : unit else if opByte2 >= 8 * 16 (* 0x80 *) andalso opByte2 <= 8 * 16 + 15 (* 0x8f *) then let val valu = get32s (!ptr, seg); val U : unit = (ptr +:= 4); in print (if opByte2 = 8 * 16 (* 0x80 *) then "jo\t" else if opByte2 = 8 * 16 + 4 (* 0x84 *) then "je\t" else if opByte2 = 8 * 16 + 5 (* 0x85 *) then "jne\t" else if opByte2 = 8 * 16 + 12 (* 0x8c *) then "jl\t" else if opByte2 = 8 * 16 + 13 (* 0x8d *) then "jge\t" else if opByte2 = 8 * 16 + 14 (* 0x8e *) then "jle\t" else if opByte2 = 8 * 16 + 15 (* 0x8f *) then "jg\t" else if opByte2 = 8 * 16 + 2 (* 0x82 *) then "jb\t" else if opByte2 = 8 * 16 + 3 (* 0x83 *) then "jnb\t" else if opByte2 = 8 * 16 + 6 (* 0x86 *) then "jna\t" else if opByte2 = 8 * 16 + 7 (* 0x87 *) then "ja\t" else "???\t" ); printHex (!ptr + valu) end : unit else (print "esc\t"; printHex opByte2) : unit end (* ESCAPE *) else if opByte = opToInt POP_A then (print "pop\t"; printEA ()) : unit else if opByte = opToInt RET then print "ret" : unit else if opByte = opToInt STC then print "stc" : unit else if opByte = opToInt RET_16 then (print "ret\t"; print16 ()) : unit else if opByte = opToInt TEST_ACC8 then (print "testb\t%al,"; print8 ()) else printHex opByte : unit; print "\n" : unit end; (* end of while loop *) print "\n" end (* printCode *); (* constLabels - fill in a constant in the code. *) fun constLabels (Code{resultSeg=ref rseg, pcOffset=ref offset, ...}, addr : addrs, value : machineWord, isRel: bool) : unit = let val seg = scSet rseg; (* The address of the segment. *) val constAddr = addr addrPlus offset*4; in csegPutConstant (seg, getAddr constAddr, value, isRel) end; (* Fix up references from other vectors to this one. *) fun fixOtherRefs (refTo as Code{otherCodes=ref otherCodes, ...}, value) = let fun fixRef (refFrom as Code{numOfConsts = noc, constVec = ref constVec, resultSeg = ref resultSeg, ...}) = let fun putConst (CVal cCode, addr, isRel) = if cCode is refTo then (* A reference to this one. *) ( (* Fix up the forward reference. *) constLabels (refFrom, addr, value, isRel); (* decrement the "pending references" count *) noc := !noc - 1 ) else () | putConst _ = (); in (* look down its list of forward references until we find ourselves. *) List.app putConst constVec; (* If this function has no more references we can lock it. *) if !noc = 0 then csegLock (scSet resultSeg) else () end (* fixRef *); in (* For each `code' which needs a forward reference to `refTo' fixing up. *) List.app fixRef otherCodes end; (* fixOtherRefs *) (***************************************************************************) (* copyCode *) (***************************************************************************) (* The stack limit register is set at least twice this far from the end of the stack so we can simply compare the stack pointer with the stack limit register if we need less than this much. Setting it at twice this value means that procedures which use up to this much stack and do not call any other procedures do not need to check the stack at all. *) val minStackCheck = 20; (* Adds the constants onto the code, and copies the code into a new segment *) fun copyCode (cvec as Code{pcOffset, codeVec, noClosure, selfCalls = ref selfCalls, selfJumps = ref selfJumps, mustCheckStack = ref callsAProc, numOfConsts, ic, constVec = ref constVec, resultSeg, procName, printAssemblyCode, printStream, ...}, stackRequired, registerSet) : address = let (* This aligns ic onto a fullword boundary. *) val U : unit = align (0, cvec); val endic = !ic; (* Remember end *) val U : unit = gen32u (0, cvec); (* Marker - 0 (changes !ic) *) (* Prelude consists of 1) nops to make it a whole number of words 2) code to set the pointer to the constant area. 3) stack checking code *) local (* little-endian *) fun getBytes (0, x) = [] | getBytes (n, x) = (x mod exp2_8) :: getBytes (n - 1, x div exp2_8); fun testRegAndTrap (reg, entryPt) = [ (* cmp reg,16(%ebp)*) opToInt(Arith (CMP, 3)), modrm (Based8, getReg reg, getReg ebp), MemRegStackLimit, (* jnb 3 *) opToInt JNB, 3, (* call *) opToInt Group5, modrm (Based8, 2 (* call *), getReg ebp), entryPt ]; val stackCheckCode : int list = if stackRequired >= minStackCheck then let val stackByteAdjust = ~4 * stackRequired; val loadEdiCode : int list = if is8Bit stackByteAdjust then [ opToInt LEAL, modrm (Based8, getReg edi, 4), (* Need s-i-b byte for %esp *) sib (Scale1, 4 (* no index *), getReg esp) ] @ getBytes (1, stackByteAdjust) else [ opToInt LEAL, modrm (Based32, getReg edi, 4), (* Need s-i-b byte for %esp *) sib (Scale1, 4 (* no index *), getReg esp) ] @ getBytes (4, stackByteAdjust); val testEdiCode : int list = testRegAndTrap (edi, MemRegStackOverflowCallEx) in (* leal -stack_reqd(%esp),%edi; boundl %edi,16(%ebp); *) loadEdiCode @ testEdiCode (* The effect of this sequence is to generate an overflow trap if sp < sl *) end else if callsAProc (* check for user interrupt *) then testRegAndTrap (esp, MemRegStackOverflowCall) else (* no stack check required *) []; (***************************************************************************** Functions now have up to 2 entry points: (1) Standard entry point (2) Self-call entry point - doesn't change %ecx Entry point 1 is always the first word of the actual code. Entry point 2 can be at various offsets (if it is needed at all), but that's OK because it is only used for calls within the procedure itself. *****************************************************************************) val nopCode : int list = let (* Add sufficient No-ops to round this to a full word. *) val len = length stackCheckCode mod wordSize in if len = 0 then [] else List.tabulate(wordSize - len, fn _ => opToInt NOP) end in val preludeCode = nopCode @ stackCheckCode; val wordsForPrelude = length preludeCode div wordSize (* +4 for code size, profile count, function name and constants count *) (* +1 for register mask. *) val segSize = (getAddr (!ic)) div wordSize + wordsForPrelude + 4 + 1; (* byte offset of L2 label relative to start of post-prelude code. *) val L2Addr = mkAddr (~ (length stackCheckCode)); end; (* local *) (* fix-up all the self-calls *) val U : unit = fixRecursiveCalls (cvec, L2Addr, selfCalls); val U : unit = fixRecursiveBranches (cvec, L2Addr, selfJumps); (* Now make the byte segment that we'll turn into the code segment *) val seg : cseg = csegMake segSize; val offset = wordsForPrelude; val _ = resultSeg := Set seg; (* Copy the code into the new segment. *) val _ = pcOffset := offset; val _ = csegCopySeg (codeVec, seg, getAddr (! ic), offset); (* insert prelude code into segment *) local val ptr = ref 0; (* Generate the prelude. *) fun putPrelude (b: int) : unit = let val a = !ptr in csegSet (seg, a, Word8.fromInt b); ptr := a + 1 end; fun putPreludeList [] = () | putPreludeList (w::ws) = (putPrelude w; putPreludeList ws); in val U : unit = putPreludeList preludeCode end; local val endOfCode (* words *) = (getAddr (! ic)) div 4 + offset; in (* Byte offset of start of code. *) local val byteEndofcode = endOfCode * 4; val addr = mkAddr byteEndofcode; in val U : unit = set32u (byteEndofcode, addr, seg) end; (* Put in the number of constants. This must go in before we actually put in any constants. There are now only two constants: the function name and the register mask. All other constants are in the code. *) local val addr = mkAddr ((endOfCode + 3 + 1) * 4); in val U : unit = set32u (2, addr, seg) end; (* Next the profile count. *) local val addr = mkAddr ((endOfCode + 1) * 4); in val U : unit = set32u (0, addr, seg) end; (* Now we've filled in all the C integers; now we need to convert the segment into a proper code segment before it's safe to put in any ML values. SPF 13/2/97 *) val U : unit = csegConvertToCode seg; local (* why do we treat the empty string as a special case? SPF 15/7/94 *) (* This is so that profiling can print "". Note that a tagged zero *is* a legal string (it's "\000"). SPF 14/10/94 *) val nameWord : machineWord = if procName = "" then toMachineWord 0 else toMachineWord procName; in val _ = csegPutWord (seg, endOfCode + 2, nameWord); end; local (* Encode the register mask. This encoding must be the same as the one used for assembly code segments. *) fun encodeReg(r, n: short): short = let open Word infix << orb val reg = 0w1 << Word.fromInt (nReg r) in reg orb n end val regSet = List.foldl encodeReg 0w0 registerSet in val U : unit = csegPutWord (seg, endOfCode + 3, toMachineWord regSet); end; end; (* scope of endOfCode *) in let (* and then copy the objects from the constant list. *) fun putConst (WVal c, addr, isRel) = ( (* Can put these in now. *) constLabels (cvec, addr, c, isRel); numOfConsts := ! numOfConsts - 1 ) | putConst (HVal(ref hv), addr, isRel) = let (* on the PC, we don't add the extra 2 (we do on the Sparc) *) (* SPF 24/4/95 *) val handlerByteOffset = getAddr hv + offset * 4; (* The following comment applies to offsetAddr *) (* Special function to add to an address. This only works if the resulting value is in a code segment and is on a word + 2 byte boundary. *) val handlerAddr : handler = offsetAddr (csegAddr seg, Word.fromInt handlerByteOffset); in constLabels (cvec, addr, toMachineWord handlerAddr, isRel); numOfConsts := ! numOfConsts - 1 end (* forward-reference - fix up later when we compile the referenced code *) | putConst (CVal _, _, _) = () val _ = List.app putConst constVec; (* Switch off "mutable" bit now if we have no forward or recursive references to fix-up *) val _ = if ! numOfConsts = 0 then csegLock seg else (); (* Do we need to make a closure, or just return the code? *) val addr : address = if noClosure then csegAddr seg else let val addr : address = alloc (0w1, F_words, toMachineWord (csegAddr seg)); (* Logically unnecessary; however the RTS currently allocates everything as mutable because Dave's code assumed that things were done this way and I'm not completely sure that everything that needs a mutable allocation actually asks for it yet. SPF 19/2/97 *) val U : unit = lock addr; in addr end (* Now we know the address of this object we can fix up any forward references outstanding. This is put in here because there may be directly recursive references. *) val U : unit = fixOtherRefs (cvec, toMachineWord addr); val U : unit = if printAssemblyCode then (* print out the code *) ( printCode cvec seg ((getAddr endic) + offset * 4); printStream "Register set = ["; List.app (fn r => (printStream " "; printStream(regRepr r))) registerSet; printStream "]\n\n" ) else (); in addr end (* the result *) end (* copyCode *); (* ic function exported to gencode. Currently only used for backward jumps. *) fun ic (cvec as Code {exited, ic=ic', branchCheck, ...}) = ( (* Make sure any pending operations are done. *) doPending (cvec, 0); exited := false; (* We may be jumping here. *) branchCheck := !ic'; ! ic' (* After any pending operations. *) ); fun codeAddress (cvec: code) : address option = (* This is used to find the register set for a function which was originally a forward reference. If it has now been compiled we can get the code. *) case cvec of Code {resultSeg = ref (Set cseg), ...} => SOME(csegAddr cseg) | Code {resultSeg = ref Unset, ...} => (* We haven't compiled this yet: assume worst case. *) NONE fun traceContext (Code {procName, ic = ref ic, ...}) = (* Function name and code offset to help tracing. *) procName ^ ":" ^ Int.fmt StringCvt.HEX (getAddr ic) end (* struct *) end (* CODECONS *); polyml.5.2.1/mlsource/MLCompiler/CodeTree/INTCODECONS.ML0000644000175000017500000023343411003075354021333 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* Title: Code Generator Routines. Author: Dave Matthews, Cambridge University Computer Laboratory Copyright Cambridge University 1985 *) (* This module contains the code vector and operations to insert code into it. Each procedure is compiled into a separate segment. Initially it is compiled into a fixed size segment, and then copied into a segment of the correct size at the end. *) functor INTCODECONS ( (*****************************************************************************) (* DEBUG *) (*****************************************************************************) structure DEBUG : sig val assemblyCodeTag : bool Universal.tag val compilerOutputTag: (string->unit) Universal.tag val getParameter : 'a Universal.tag -> Universal.universal list -> 'a end; (*****************************************************************************) (* MISC *) (*****************************************************************************) structure MISC : sig exception InternalError of string end ) : (*****************************************************************************) (* CODECONS export signature *) (*****************************************************************************) sig type machineWord; type address; type code; type opcode; eqtype addrs; (*hacky! *) type labels; val noJump: labels; val jumpFalse : opcode; val jump : opcode; val setHandler : opcode; val delHandler : opcode; val addrPlus : addrs * int -> addrs; val addrMinus : addrs * addrs -> int; val codeCreate: bool * string * Universal.universal list -> code; (* makes the initial segment. *) (* ic - Address for the next instruction in the segment. *) val ic: code -> addrs; (* putBytes : puts "length" bytes of "val" into locations "addr", "addr"+1 *) val putBytes: int * int * addrs * code -> unit; (* GEN- routines all put a value at the instruction counter and add an appropriate amount to it. *) (* genWord - Puts 2 bytes. *) val genWord : int * code -> unit; (* gen... - put instructions and their operands. *) val genCallClosure : code -> unit; val genRaiseEx : code -> unit; val genLock : code -> unit; val genLdexc : code -> unit; val genPushHandler : code -> unit; val genReturn : int * code -> unit; val genGetStore : int * code -> unit; val genLocal : int * code -> unit; val genIndirect : int * code -> unit; val genMoveToVec : int * code -> unit; val genSetStackVal : int * code -> unit; val genCase : int * code -> unit; val genTuple : int * code -> unit; val genTailCall : int * int * code -> unit; val genNonLocal : int * int * int * code -> unit; (* genEnter instructions are only needed when machine-code routines can call interpreted routines or vice-versa. The enterInt instruction causes the interpreter to be entered and the argument indicates the reason. *) val genEnterIntCatch : code -> unit; val genEnterIntProc : code * int -> unit; val genEnterIntCall : code * int -> unit; (* pushConst - Generates code to push a constant. *) val pushConst : machineWord * code -> unit; (* genCallSl - Generate callSl instructions which refer to either constants or are forward references to procedures which have not yet been compiled. *) val genCallSl : int * int * code * code -> unit; (* genRecRef - Recursive reference to a procedure. *) val genRecRef: code * code -> unit (* Create a container on the stack *) val genContainer : int * code -> unit; (* Copy a tuple into a container. *) val genSetContainer : int * code -> unit; (* Create a tuple from a container. *) val genTupleFromContainer : int * code -> unit; (* copyCode - Finish up after compiling a procedure. *) val copyCode : code -> address; (* getBytes - gets "length" bytes from locations "addr", "addr"+1... Returns a negative number if the first bit was set. *) val getBytes: int * addrs * code -> int; (* putBranchInstruction puts in an instruction which involves a forward reference. *) val putBranchInstruction: opcode * code -> labels; (* Instruction to delete a handler and skip round it. *) val fixup: labels * code -> unit; (* Fix up a forward reference. *) val linkLabels: labels * labels * code -> labels; (* Link label lists. *) val jumpback: addrs * code -> unit (* Backwards jump. *) val resetStack: int * bool * code -> unit; (* Set a pending reset *) val alignOffWord: code * int -> unit; (* Add a pad byte if the value would be word-aligned. *) end (* CODECONS export signature *) = let (*****************************************************************************) (* CODESEG *) (*****************************************************************************) structure CODESEG : sig type machineWord; type short; type address; type cseg; val csegMake: int -> cseg; val csegConvertToCode: cseg -> unit; val csegLock: cseg -> unit; val csegGet: cseg * int -> Word8.word; val csegSet: cseg * int * Word8.word -> unit; val csegPutWord: cseg * int * machineWord -> unit; val csegCopySeg: cseg * cseg * int * int -> unit; val csegAddr: cseg -> address; end = CodeSeg; (*****************************************************************************) (* ADDRESS *) (*****************************************************************************) structure ADDRESS : sig type machineWord; (* NB *not* eqtype, 'cos it might be a closure *) type short = Word.word; type address; type handler; val wordEq : 'a * 'a -> bool val isShort: 'a -> bool; val toShort: 'a -> short; val toMachineWord: 'a -> machineWord; val toAddress: 'a -> address val loadByte: address * short -> Word8.word val loadWord: address * short -> machineWord val unsafeCast: 'a -> 'b val alloc: (short * Word8.word * machineWord) -> address val length: address -> short val flags: address -> Word8.word val F_words : Word8.word val isWords : address -> bool; val isBytes : address -> bool; val isCode : address -> bool; val lock : address -> unit; val isIoAddress : address -> bool end = Address; in (*****************************************************************************) (* CODECONS functor body *) (*****************************************************************************) struct open CODESEG; open DEBUG; open ADDRESS; open MISC; (* The original way of dealing with constants was to store the offset (in bytes) of the constant from the end of the instruction. That has a problem when the database is ported to a different word-length machine because while the byte count to the end of the interpreted code does not change the marker word and other constants will all have a different length. I've changed it to use new instructions which take an extra argument which is the number of the constant. The byte offset is then always the number of bytes to the end of the code. DCJM 25/9/00. *) val usePortableConstantOffset = true; (* To make the code portable these are both functions. Note that similar changes are needed in Code_seg.ML and in the basis library. DCJM 28/9/00. *) (* Unfortunately the code-generator always evaluates these at compile time if it can. We need to use a ref to force it not to. It's too complicated making this completely word-length independent but it's useful to have it byte-order independent. *) local val bigEndian = ref RuntimeCalls.POLY_SYS_is_big_endian in fun littleEndian () : bool = not (RunCall.run_call0 (! bigEndian) ()) end; val wordLength : unit->int = RunCall.run_call0 RuntimeCalls.POLY_SYS_bytes_per_word; val MAXINTARGS = (* 31 *) 126; fun forLoop f i n = if i > n then () else (f i; forLoop f (i + 1) n); fun applyList (f, []) = () | applyList (f, h::t) = let val U : unit = f h; in applyList (f, t) end; fun applyCountList (f, n, []) = () | applyCountList (f, n, h::t) = let val U : unit = f (n, h); in applyCountList (f, n + 1, t) end; (*****************************************************************************) (* Abstype for instruction addresses *) (*****************************************************************************) infix 6 addrPlus addrMinus; infix 4 (* ? *) addrLt; (* All indexes into the code vector have type "addrs" *) (* This should be an abstype, but it's exported as an eqtype *) datatype addrs = Addr of int (* + is defined to add an integer to an address *) fun (Addr a) addrPlus b = Addr (a + b); (* The difference between two addresses is an integer *) fun (Addr a) addrMinus (Addr b) = a - b; fun (Addr a) addrLt (Addr b) = a < b; fun mkAddr n = Addr n; (* addr.up *) fun getAddr (Addr a) = a; (* addr.down *) val addrZero = mkAddr 0; val addrLast = mkAddr (Word.toInt (Word.<<(0w1, 0w29)) - 1); (* A big number. *) (*****************************************************************************) (* Opcodes *) (*****************************************************************************) (* These instructions are only needed during porting between interpreted and machine-code versions. The first should be the interrupt or break-point instruction of the host machine-code and causes the machine to enter the interpreter. It is ignored by the interpreter except immediately after the interpreter has been entered when result registers may be pushed depending on the argument. The second instruction should be a no-op in the machine code instruction set and has the reverse effect. It is never generated by this code-generator but it is needed in machine-code code-generators. Note: indirect forms of jumps are assumed to have the opcode 4 more than the corresponding direct form. *) local (* Not an abstype, because we we require the equality attribute *) datatype opcode = Opcode of int; in type opcode = opcode; fun opcode_down (Opcode n) : int = n; fun opcode_up (n : int) : opcode = Opcode n; val opcode_enterInt = Opcode 0; (* Opcode 1 reserved for Interpreter's internal use *) val opcode_jump = Opcode 2; val opcode_jumpFalse = Opcode 3; val opcode_containerW = Opcode 4; (* Added DCJM 5/10/05. *) val opcode_delHandler = Opcode 5; val opcode_jumpI = Opcode 6; val opcode_jumpIFalse = Opcode 7; val opcode_set_containerW = Opcode 8; (* Added DCJM 5/10/05. *) val opcode_delHandlerI = Opcode 9; val opcode_caseSwitch = Opcode 10; val opcode_callSl = Opcode 11; val opcode_callClosure = Opcode 12; val opcode_returnW = Opcode 13; val opcode_pad = Opcode 14; (* val opcode_projectW = Opcode 15; *) val opcode_raiseEx = Opcode 16; val opcode_getStoreW = Opcode 17; val opcode_nonLocal = Opcode 18; val opcode_localW = Opcode 19; val opcode_indirectW = Opcode 20; val opcode_moveToVecW = Opcode 21; val opcode_callSlX = Opcode 22; (* Added DCJM 25/9/00. *) val opcode_setStackValW = Opcode 23; val opcode_resetW = Opcode 24; val opcode_resetR_w = Opcode 25; val opcode_constAddr = Opcode 26; val opcode_constIntW = Opcode 27; val opcode_ioVecEntry = Opcode 28; val opcode_constNil = Opcode 29; val opcode_jumpBack = Opcode 30; val opcode_returnB = Opcode 31; (* val opcode_projectB = Opcode 32; *) val opcode_getStoreB = Opcode 33; val opcode_localB = Opcode 34; val opcode_indirectB = Opcode 35; val opcode_moveToVecB = Opcode 36; val opcode_setStackValB = Opcode 37; val opcode_resetB = Opcode 38; val opcode_resetRB = Opcode 39; val opcode_constIntB = Opcode 40; val opcode_local_0 = Opcode 41; val opcode_local_1 = Opcode 42; val opcode_local_2 = Opcode 43; val opcode_local_3 = Opcode 44; val opcode_local_4 = Opcode 45; val opcode_local_5 = Opcode 46; val opcode_local_6 = Opcode 47; val opcode_local_7 = Opcode 48; val opcode_local_8 = Opcode 49; val opcode_local_9 = Opcode 50; val opcode_local_10 = Opcode 51; val opcode_local_11 = Opcode 52; val opcode_indirect_0 = Opcode 53; val opcode_indirect_1 = Opcode 54; val opcode_indirect_2 = Opcode 55; val opcode_indirect_3 = Opcode 56; val opcode_indirect_4 = Opcode 57; val opcode_indirect_5 = Opcode 58; val opcode_const_0 = Opcode 59; val opcode_const_1 = Opcode 60; val opcode_const_2 = Opcode 61; val opcode_const_3 = Opcode 62; val opcode_const_4 = Opcode 63; val opcode_const_10 = Opcode 64; val opcode_return_0 = Opcode 65; val opcode_return_1 = Opcode 66; val opcode_return_2 = Opcode 67; val opcode_return_3 = Opcode 68; val opcode_moveToVec_0 = Opcode 69; val opcode_moveToVec_1 = Opcode 70; val opcode_moveToVec_2 = Opcode 71; val opcode_moveToVec_3 = Opcode 72; val opcode_moveToVec_4 = Opcode 73; val opcode_moveToVec_5 = Opcode 74; val opcode_moveToVec_6 = Opcode 75; val opcode_moveToVec_7 = Opcode 76; val opcode_constAddrX_b = Opcode 77; (* Added DCJM 25/9/00. *) val opcode_constAddrX_w = Opcode 78; (* Added DCJM 25/9/00. *) val opcode_callSlCX = Opcode 79; (* Added DCJM 25/9/00. *) val opcode_reset_1 = Opcode 80; val opcode_reset_2 = Opcode 81; val opcode_getStore_2 = Opcode 82; val opcode_getStore_3 = Opcode 83; val opcode_getStore_4 = Opcode 84; val opcode_tuple_containerW = Opcode 85; (* Added DCJM 5/10/05. *) val opcode_nonLocalL_1 = Opcode 86; val opcode_nonLocalL_2 = Opcode 87; val opcode_nonLocalL_3 = Opcode 88; val opcode_callSlC = Opcode 89; val opcode_ioVec_5 = Opcode 90; val opcode_ioVec_6 = Opcode 91; val opcode_integerAdd = Opcode 92; val opcode_integerMinus = Opcode 93; val opcode_integerEqual = Opcode 94; val opcode_integerLeq = Opcode 95; val opcode_integerGreater = Opcode 96; val opcode_booleanOr = Opcode 97; val opcode_wordEqual = Opcode 98; val opcode_assignWord = Opcode 99; val opcode_resetR_1 = Opcode 100; val opcode_resetR_2 = Opcode 101; val opcode_resetR_3 = Opcode 102; val opcode_tupleW = Opcode 103; val opcode_tupleB = Opcode 104; val opcode_tuple_2 = Opcode 105; val opcode_tuple_3 = Opcode 106; val opcode_tuple_4 = Opcode 107; val opcode_lock = Opcode 108; val opcode_ldexc = Opcode 109; val opcode_ioVec_225 = Opcode 110; val opcode_ioVec_226 = Opcode 111; val opcode_ioVec_229 = Opcode 112; val opcode_ioVec_233 = Opcode 113; val opcode_ioVec_236 = Opcode 114; val opcode_ioVec_251 = Opcode 115; val opcode_ioVec_253 = Opcode 116; val opcode_ioVec_255 = Opcode 117; val opcode_setHandler = Opcode 118; (* Opcode 119 not used *) val opcode_pushHandler = Opcode 120; (* Opcode 121 not used *) val opcode_setHandlerI = Opcode 122; val opcode_tailbb = Opcode 123; val opcode_tail = Opcode 124; val opcode_tail3b = Opcode 125; val opcode_tail4b = Opcode 126; val opcode_tail3_2 = Opcode 127; val opcode_tail3_3 = Opcode 128; (* val opcode_last = opcode_ioVec_225; *) local val repArray : string Array.array = Array.tabulate (256, fn (i : int) => ""); fun repUpdate (Opcode n, s) = Array.update (repArray, n, s); val U : unit = repUpdate(opcode_enterInt, "enterInt"); val U : unit = repUpdate(opcode_jump, "jump"); val U : unit = repUpdate(opcode_jumpFalse, "jumpFalse"); val U : unit = repUpdate(opcode_delHandler, "delHandler"); val U : unit = repUpdate(opcode_jumpI, "jumpI"); val U : unit = repUpdate(opcode_jumpIFalse, "jumpIFalse"); val U : unit = repUpdate(opcode_delHandlerI, "delHandlerI"); val U : unit = repUpdate(opcode_caseSwitch, "caseSwitch"); val U : unit = repUpdate(opcode_callSl, "callSl"); val U : unit = repUpdate(opcode_callSlX, "callSlX"); val U : unit = repUpdate(opcode_callClosure, "callClosure"); val U : unit = repUpdate(opcode_returnW, "returnW"); val U : unit = repUpdate(opcode_pad, "pad"); (* ... val U : unit = repUpdate(opcode_projectW, "projectW"); ... *) val U : unit = repUpdate(opcode_raiseEx, "raiseEx"); val U : unit = repUpdate(opcode_getStoreW, "getStoreW"); val U : unit = repUpdate(opcode_nonLocal, "nonLocal"); val U : unit = repUpdate(opcode_localW, "localW"); val U : unit = repUpdate(opcode_indirectW, "indirectW"); val U : unit = repUpdate(opcode_moveToVecW, "moveToVecW"); val U : unit = repUpdate(opcode_setStackValW, "setStackValW"); val U : unit = repUpdate(opcode_resetW, "resetW"); val U : unit = repUpdate(opcode_resetR_w, "resetR_w"); val U : unit = repUpdate(opcode_constAddr, "constAddr"); val U : unit = repUpdate(opcode_constAddrX_b, "constAddrX_b"); val U : unit = repUpdate(opcode_constAddrX_w, "constAddrX_w"); val U : unit = repUpdate(opcode_constIntW, "constIntW"); val U : unit = repUpdate(opcode_ioVecEntry, "ioVecEntry"); val U : unit = repUpdate(opcode_constNil, "constNil"); val U : unit = repUpdate(opcode_jumpBack, "jumpBack"); val U : unit = repUpdate(opcode_returnB, "returnB"); (* ... val U : unit = repUpdate(opcode_projectB, "projectB"); ... *) val U : unit = repUpdate(opcode_getStoreB, "getStoreB"); val U : unit = repUpdate(opcode_localB, "localB"); val U : unit = repUpdate(opcode_indirectB, "indirectB"); val U : unit = repUpdate(opcode_moveToVecB, "moveToVecB"); val U : unit = repUpdate(opcode_setStackValB, "setStackValB"); val U : unit = repUpdate(opcode_resetB, "resetB"); val U : unit = repUpdate(opcode_resetRB, "resetRB"); val U : unit = repUpdate(opcode_constIntB, "constIntB"); val U : unit = repUpdate(opcode_local_0, "local_0"); val U : unit = repUpdate(opcode_local_1, "local_1"); val U : unit = repUpdate(opcode_local_2, "local_2"); val U : unit = repUpdate(opcode_local_3, "local_3"); val U : unit = repUpdate(opcode_local_4, "local_4"); val U : unit = repUpdate(opcode_local_5, "local_5"); val U : unit = repUpdate(opcode_local_6, "local_6"); val U : unit = repUpdate(opcode_local_7, "local_7"); val U : unit = repUpdate(opcode_local_8, "local_8"); val U : unit = repUpdate(opcode_local_9, "local_9"); val U : unit = repUpdate(opcode_local_10, "local_10"); val U : unit = repUpdate(opcode_local_11, "local_11"); val U : unit = repUpdate(opcode_indirect_0, "indirect_0"); val U : unit = repUpdate(opcode_indirect_1, "indirect_1"); val U : unit = repUpdate(opcode_indirect_2, "indirect_2"); val U : unit = repUpdate(opcode_indirect_3, "indirect_3"); val U : unit = repUpdate(opcode_indirect_4, "indirect_4"); val U : unit = repUpdate(opcode_indirect_5, "indirect_5"); val U : unit = repUpdate(opcode_const_0, "const_0"); val U : unit = repUpdate(opcode_const_1, "const_1"); val U : unit = repUpdate(opcode_const_2, "const_2"); val U : unit = repUpdate(opcode_const_3, "const_3"); val U : unit = repUpdate(opcode_const_4, "const_4"); val U : unit = repUpdate(opcode_const_10, "const_10"); val U : unit = repUpdate(opcode_return_0, "return_0"); val U : unit = repUpdate(opcode_return_1, "return_1"); val U : unit = repUpdate(opcode_return_2, "return_2"); val U : unit = repUpdate(opcode_return_3, "return_3"); val U : unit = repUpdate(opcode_moveToVec_0, "moveToVec_0"); val U : unit = repUpdate(opcode_moveToVec_1, "moveToVec_1"); val U : unit = repUpdate(opcode_moveToVec_2, "moveToVec_2"); val U : unit = repUpdate(opcode_moveToVec_3, "moveToVec_3"); val U : unit = repUpdate(opcode_moveToVec_4, "moveToVec_4"); val U : unit = repUpdate(opcode_moveToVec_5, "moveToVec_5"); val U : unit = repUpdate(opcode_moveToVec_6, "moveToVec_6"); val U : unit = repUpdate(opcode_moveToVec_7, "moveToVec_7"); val U : unit = repUpdate(opcode_reset_1, "reset_1"); val U : unit = repUpdate(opcode_reset_2, "reset_2"); val U : unit = repUpdate(opcode_getStore_2, "getStore_2"); val U : unit = repUpdate(opcode_getStore_3, "getStore_3"); val U : unit = repUpdate(opcode_getStore_4, "getStore_4"); val U : unit = repUpdate(opcode_nonLocalL_1, "nonLocalL_1"); val U : unit = repUpdate(opcode_nonLocalL_2, "nonLocalL_2"); val U : unit = repUpdate(opcode_nonLocalL_3, "nonLocalL_3"); val U : unit = repUpdate(opcode_callSlC, "callSlC"); val U : unit = repUpdate(opcode_callSlCX, "callSlCX"); val U : unit = repUpdate(opcode_ioVec_5, "ioVec_5"); val U : unit = repUpdate(opcode_ioVec_6, "opcode_ioVec_6"); (* ... (* added missing instructions (not used yet!) SPF 28/6/95 *) (* Removed them again, becuase I'd rather see UNKNOWN if they ever get generated. SPF 9/1/96 *) val U : unit = repUpdate(opcode_integerAdd, "integerAdd"); val U : unit = repUpdate(opcode_integerMinus, "integerMinus"); val U : unit = repUpdate(opcode_integerEqual, "integerEqual"); val U : unit = repUpdate(opcode_integerLeq, "integerLeq"); val U : unit = repUpdate(opcode_integerGreater,"integerGreater"); val U : unit = repUpdate(opcode_booleanOr, "booleanOr"); val U : unit = repUpdate(opcode_wordEqual, "wordEqual"); val U : unit = repUpdate(opcode_assignWord, "assignWord"); ... *) val U : unit = repUpdate(opcode_resetR_1, "resetR_1"); val U : unit = repUpdate(opcode_resetR_2, "resetR_2"); val U : unit = repUpdate(opcode_resetR_3, "resetR_3"); val U : unit = repUpdate(opcode_tupleW, "tupleW"); val U : unit = repUpdate(opcode_tupleB, "tupleB"); val U : unit = repUpdate(opcode_tuple_2, "tuple_2"); val U : unit = repUpdate(opcode_tuple_3, "tuple_3"); val U : unit = repUpdate(opcode_tuple_4, "tuple_4"); val U : unit = repUpdate(opcode_lock, "lock"); val U : unit = repUpdate(opcode_ldexc, "ldexc"); val U : unit = repUpdate(opcode_ioVec_225, "ioVec_225"); val U : unit = repUpdate(opcode_ioVec_226, "ioVec_226"); val U : unit = repUpdate(opcode_ioVec_229, "ioVec_229"); val U : unit = repUpdate(opcode_ioVec_233, "ioVec_233"); val U : unit = repUpdate(opcode_ioVec_236, "ioVec_236"); val U : unit = repUpdate(opcode_ioVec_251, "ioVec_251"); val U : unit = repUpdate(opcode_ioVec_253, "ioVec_253"); val U : unit = repUpdate(opcode_ioVec_255, "ioVec_255"); val U : unit = repUpdate(opcode_setHandler, "setHandler"); val U : unit = repUpdate(opcode_pushHandler, "pushHandler"); val U : unit = repUpdate(opcode_setHandlerI, "setHandlerI"); val U : unit = repUpdate(opcode_tailbb, "tailbb"); val U : unit = repUpdate(opcode_tail, "tail"); val U : unit = repUpdate(opcode_tail3b, "tail3b"); val U : unit = repUpdate(opcode_tail4b, "tail4b"); val U : unit = repUpdate(opcode_tail3_2, "tail3_2"); val U : unit = repUpdate(opcode_tail3_3, "tail3_3"); in fun repr (Opcode n) : string = Array.sub (repArray, n); end; local val sizeArray : int Array.array = Array.array (256, 1); fun sizeUpdate (Opcode n, s) = Array.update (sizeArray, n, s); fun sizeUpdate (Opcode n, s) = Array.update (sizeArray, n, s); val U : unit = sizeUpdate(opcode_enterInt , 2); (* Restored DCJM 22/9/00. *) (* val U : unit = sizeUpdate(opcode_enterInt , 4); *)(* SPF 30/1/97 *) val U : unit = sizeUpdate(opcode_jump , 2); val U : unit = sizeUpdate(opcode_jumpFalse , 2); val U : unit = sizeUpdate(opcode_delHandler , 2); val U : unit = sizeUpdate(opcode_jumpI , 2); val U : unit = sizeUpdate(opcode_jumpIFalse , 2); val U : unit = sizeUpdate(opcode_delHandlerI , 2); val U : unit = sizeUpdate(opcode_caseSwitch , 3); val U : unit = sizeUpdate(opcode_callSl , 7); val U : unit = sizeUpdate(opcode_callSlX , 9); val U : unit = sizeUpdate(opcode_returnW , 3); (* val U : unit = sizeUpdate(opcode_projectW , 3); *) val U : unit = sizeUpdate(opcode_getStoreW , 3); val U : unit = sizeUpdate(opcode_nonLocal , 7); val U : unit = sizeUpdate(opcode_localW , 3); val U : unit = sizeUpdate(opcode_indirectW , 3); val U : unit = sizeUpdate(opcode_moveToVecW , 3); val U : unit = sizeUpdate(opcode_setStackValW, 3); val U : unit = sizeUpdate(opcode_resetW , 3); val U : unit = sizeUpdate(opcode_resetR_w , 3); val U : unit = sizeUpdate(opcode_constAddr , 3); val U : unit = sizeUpdate(opcode_constAddrX_b , 4); val U : unit = sizeUpdate(opcode_constAddrX_w , 5); val U : unit = sizeUpdate(opcode_constIntW , 3); val U : unit = sizeUpdate(opcode_ioVecEntry , 2); val U : unit = sizeUpdate(opcode_jumpBack , 2); val U : unit = sizeUpdate(opcode_returnB , 2); (* val U : unit = sizeUpdate(opcode_projectB , 2); *) val U : unit = sizeUpdate(opcode_getStoreB , 2); val U : unit = sizeUpdate(opcode_localB , 2); val U : unit = sizeUpdate(opcode_indirectB , 2); val U : unit = sizeUpdate(opcode_moveToVecB , 2); val U : unit = sizeUpdate(opcode_setStackValB, 2); val U : unit = sizeUpdate(opcode_resetB , 2); val U : unit = sizeUpdate(opcode_resetRB , 2); val U : unit = sizeUpdate(opcode_constIntB , 2); val U : unit = sizeUpdate(opcode_nonLocalL_1 , 2); val U : unit = sizeUpdate(opcode_nonLocalL_2 , 2); val U : unit = sizeUpdate(opcode_nonLocalL_3 , 2); val U : unit = sizeUpdate(opcode_callSlC , 4); val U : unit = sizeUpdate(opcode_callSlCX , 5); val U : unit = sizeUpdate(opcode_tupleW , 3); val U : unit = sizeUpdate(opcode_tupleB , 2); val U : unit = sizeUpdate(opcode_setHandler , 2); val U : unit = sizeUpdate(opcode_setHandlerI , 2); val U : unit = sizeUpdate(opcode_tailbb , 3); val U : unit = sizeUpdate(opcode_tail , 5); val U : unit = sizeUpdate(opcode_tail3b , 2); val U : unit = sizeUpdate(opcode_tail4b , 2); in fun size (Opcode n) : int = Array.sub (sizeArray, n); end; end; (* opcode abstype *) (*****************************************************************************) (* Types for branch labels *) (*****************************************************************************) (* The addrs is the address of the branch instruction, so we can fix up the branch later, NOT the address we're branching to, which we don't know when we generate the label. The cacheState indicates whether what was cached at the source of the jump. *) datatype jumpFrom = Jump8From of addrs (* branch instruction has 8-bit offset field *) | Jump16From of addrs; (* branch instruction has 16-bit offset field *) (* We need a jumpFrom ref, because we may have to indirect short branches via long branches if the offset won't fit into 14 bits *) type labels = (jumpFrom ref) list; val noJump : labels = []; (* This is the list of outstanding labels. Use a separate type from "labels" for extra security. *) type labList = (jumpFrom ref) list; (*****************************************************************************) (* The main "code" datatype *) (*****************************************************************************) datatype const = WVal of machineWord (* an existing constant *) | CVal of code (* a forward-reference to another function *) and setCodeseg = Unset | Set of cseg (* Used for completing forward references. *) and code = Code of { codeVec: cseg, (* This segment is used as a buffer. When the procedure has been code generated it is copied into a new segment of the correct size *) ic: addrs ref, (* Pointer to first free location in "codevec" *) constVec: const list ref, (* Vector of words to be put at end *) numOfConsts: int ref, (* size of constVec *) stackReset: int ref, (* Distance to reset the stack before the next instr. *) carry: bool ref, (* Should a value be moved down if stackReset <> 0? *) labelList: labList ref, (* List of outstanding short branches. *) longestBranch: addrs ref, (* Address of the earliest short branch.*) procName: string, (* Name of the procedure. *) otherCodes: code list ref, (* Other code vectors with forward references to this vector. *) resultSeg: setCodeseg ref, (* The segment as the final result. *) noClosure: bool, (* should we make a closure from this? *) constLoads: (addrs * int) list ref, (* where do we load constants? *) printAssemblyCode:bool, (* Whether to print the code when we finish. *) printStream: string->unit (* The stream to use *) }; (*****************************************************************************) (* Auxiliary functions on "code" *) (*****************************************************************************) fun codeVec (Code {codeVec,...}) = codeVec; fun ic (Code {ic,...}) = ic; fun constVec (Code {constVec,...}) = constVec; fun numOfConsts (Code {numOfConsts,...}) = numOfConsts; fun stackReset (Code {stackReset ,...}) = stackReset; fun carry (Code {carry,...}) = carry; fun labelList (Code {labelList,...}) = labelList; fun longestBranch (Code {longestBranch,...}) = longestBranch; fun procName (Code {procName,...}) = procName; fun otherCodes (Code {otherCodes,...}) = otherCodes; fun resultSeg (Code {resultSeg,...}) = resultSeg; fun noClosure (Code {noClosure,...}) = noClosure; fun constLoads (Code {constLoads,...}) = constLoads; fun scSet (Set x) = x | scSet _ = raise Match; fun isSet (Set _) = true | isSet _ = false val codesize = 32; (* bytes. Initial size of segment. *) (* Test for identity of the code segments by testing whether the numOfConsts ref is the same. N.B. NOT its contents. *) infix is; fun a is b = (numOfConsts a = numOfConsts b); fun sameConst (WVal w1, WVal w2) = wordEq (w1, w2) | sameConst (CVal c1, CVal c2) = c1 is c2 | sameConst (_, _) = false; (* create and initialise a code segment *) fun codeCreate (noClosure : bool, name : string, parameters) : code = let val words : int = codesize div wordLength(); in Code { codeVec = csegMake words, (* a byte array *) ic = ref addrZero, constVec = ref [], numOfConsts = ref 0, stackReset = ref 0, (* stack adjustment in WORDs *) carry = ref false, labelList = ref [], longestBranch = ref addrLast, (* None so far *) procName = name, otherCodes = ref [], resultSeg = ref Unset, (* Not yet done *) noClosure = noClosure, constLoads = ref [], printAssemblyCode = DEBUG.getParameter DEBUG.assemblyCodeTag parameters, printStream = DEBUG.getParameter DEBUG.compilerOutputTag parameters } end; fun setLong (value : int, Addr a : addrs, seg : cseg) : unit = let fun putBytes(value, a, seg, i) = if i = wordLength() then () else ( csegSet(seg, if littleEndian() then a+i else a+wordLength()-i-1, Word8.fromInt(value mod 256)); putBytes(value div 256, a, seg, i+1) ) in putBytes(value, a, seg, 0) end; fun putByte (ival: int, Addr a, cvec: code) : unit = csegSet(codeVec cvec, a, Word8.fromInt (if ival < 0 then 256 + ival else ival)); fun genByte (ival: int, cvec: code) : unit = let val icVal : addrs = ! (ic cvec); val U : unit = putByte (ival, icVal, cvec); in ic cvec := icVal addrPlus 1 end; fun genBytes (ival: int, length: int, cvec: code) : unit = let val U : unit = genByte (ival mod 256, cvec); in if length = 1 then () else genBytes (ival div 256, length - 1, cvec) end; fun genWord (ival : int, cvec : code) : unit = genBytes (ival, 2, cvec); (* puts "length" bytes of "val" into locations "addr", "addr"+1... *) fun putBytes (ival : int, length : int, addr : addrs, cvec : code) : unit = let val U : unit = putByte (ival mod 256, addr, cvec); in if length = 1 then () else putBytes (ival div 256, length - 1, addr addrPlus 1, cvec) end; fun getByte (Addr a, cvec : code) : int = Word8.toInt (csegGet (codeVec cvec, a)); (* Gets "length" bytes from locations "addr", "addr"+1... Returns an unsigned number. *) fun getB (length : int, addr : int, seg: cseg) : int = let val byte = Word8.toInt (csegGet (seg, addr)); in if length = 1 (* Top byte *) then byte else let val rest = getB (length - 1, addr + 1, seg); in rest * 256 + byte end end; fun getBytes (length: int, Addr a, cvec : code) : int = getB (length, a, codeVec cvec); fun resetSp (cvec: code) : unit = let val offset = !(stackReset cvec); val U : unit = if offset < 0 then raise InternalError ("resetSp: bad reset value " ^ Int.toString offset) else if offset = 0 then () else if 255 <= offset then let val opc = if !(carry cvec) then opcode_resetR_w else opcode_resetW; val U : unit = genByte (opcode_down opc, cvec); in genWord (offset, cvec) end else if !(carry cvec) then if 3 < offset then let val U : unit = genByte (opcode_down opcode_resetRB, cvec); in genByte (offset, cvec) end else let val opc : int = opcode_down opcode_resetR_1 + offset - 1; in genByte(opc, cvec) end else if 2 < offset then let val U : unit = genByte (opcode_down opcode_resetB, cvec); in genByte (offset, cvec) end else let val opc : int = opcode_down opcode_reset_1 + offset - 1; in genByte(opc, cvec) end in stackReset cvec := 0 end; (* resetSp *) (* The cvec holds a list of short branches so that they can be extended to long branches before they go out of range. If we fix up a short branch, we must call "removeLabel" to purge it from this list. To keep things simple, we call "removeLabel" whenever we fix up a jump - if the label is long, or if it doesn't appear in the list (which is the case for branches backwards), we just won't find it in the list. SPF 21/9/95 *) fun removeLabel (lab : addrs, cvec : code) : unit = let fun removeEntry ([]: labList) : labList = [] | removeEntry ((entry as ref (Jump16From _)) :: t) = removeEntry t (* we discard all long jumps *) | removeEntry ((entry as ref (Jump8From addr)) :: t) = if lab = addr then removeEntry t else let val U : unit = if addr addrLt !(longestBranch cvec) then longestBranch cvec := addr else (); in entry :: removeEntry t end; in (* We recompute the longest 14-bit branch. *) longestBranch cvec := addrLast; labelList cvec := removeEntry (! (labelList cvec)) end; fun fixupOffset (Jump8From addr, target : addrs, cvec : code) : unit = let (* Offsets are calculated from the END of the instruction, which explains the "+ 1" *) val newOffset : int = target addrMinus (addr addrPlus 1); val U : unit = if 0 <= newOffset andalso newOffset < 256 then () else raise InternalError "fixupOffset: jump too far (8-bit offset)" val oldOffset : int = getByte (addr, cvec); val U : unit = if oldOffset = 0 then () else raise InternalError "fixupOffset: 8-bit branch already fixed up" (* We're about to fix up the jump, so remove it from the list of pending short jumps. *) val U : unit = removeLabel (addr, cvec); in putByte (newOffset, addr, cvec) end | fixupOffset (Jump16From addr, target : addrs, cvec : code) : unit = let (* Offsets are calculated from the END of the instruction, which explains the "+ 2" *) val newOffset : int = target addrMinus (addr addrPlus 2); val U : unit = if ~32768 <= newOffset andalso newOffset < 32768 then () else raise InternalError "fixupOffset: jump too far (16-bit offset)" val oldOffset : int = getBytes (2, addr, cvec); val U : unit = if oldOffset = 0 then () else raise InternalError "fixupOffset: 16-bit branch already fixed up" in putBytes (newOffset, 2, addr, cvec) end; fun fixup ([] : labels, cvec: code) : unit = () | fixup (lab : labels, cvec: code) : unit = let (* Deal with any pending resets. *) val U : unit = resetSp cvec; val target : addrs = ! (ic cvec); in applyList (fn (ref jf) => fixupOffset (jf, target, cvec), lab) end; (* Makes a new label and puts it in the list. *) fun makeLabel (cvec: code, addr: addrs) : labels = let (* All labels are created as short jumps *) val lab : jumpFrom ref = ref (Jump8From addr); val U : unit = if addr addrLt !(longestBranch cvec) then longestBranch cvec := addr else (); (* Add to the list of pending fixups *) val U : unit = labelList cvec := lab :: !(labelList cvec); in [lab] end; (* If the longest branch is close to going out of range it must be converted into a long form. If the size is large (e.g. casel/casew) then all labels should be converted. If we have just made an unconditional branch then we make the distance shorter. 220 is just a fairly conservative number. (Dave used a clever calculation, but I don't like too much cleverness.) This code isn't very clever because it uses a separate 16-bit extension for each original 8-bit jump. I think Dave's original code tried to use a single 16-bit extension per target (not per jump). Since this code is only for use in bootstrapping, simplicity is more important than efficiency (KISS!). SPF 7/1/97 *) fun checkBranchList (cvec: code, branched: bool, size: int): unit = let val maxDiff = 220 - size; fun convertLabels ([]:labList) : labList = [] | convertLabels (lab::labs) = let (* Process the list starting at the end. The reason for this is that more recent labels appear before earlier ones. We must put the earliest labels in first because they may be about to go out of range. *) val convertRest = convertLabels labs; in (* Now do this entry. *) case !lab of Jump16From _ => (* shouldn't happen? *) convertRest | Jump8From addr => let val here : addrs = !(ic cvec); in if maxDiff < here addrMinus addr then let (* Getting close - fix up the short branch to indirect via here *) (* Offsets are calculated from the END of the instruction, which explains the "+ 1" *) val newOffset : int = here addrMinus (addr addrPlus 1); val U : unit = if 0 <= newOffset andalso newOffset < 256 then () else raise InternalError "checkBranchList: offset too large to convert" val oldOffset : int = getByte (addr, cvec); val U : unit = if oldOffset = 0 then () else raise InternalError "checkBranchList: 8-bit offset already fixed up"; (* Convert the instruction to the "indirect" form *) val instrAddr : addrs = addr addrPlus ~1; val oldInstrByte : int = getByte (instrAddr, cvec); val newInstrByte : int = oldInstrByte + 4; (* Fix up the instruction and offset *) val U : unit = putByte (newInstrByte, instrAddr, cvec); val U : unit = putByte (newOffset, addr, cvec); (* Generate the indirection itself, and alter the jump state *) val U : unit = genWord (0, cvec); val U : unit = lab := Jump16From here; in convertRest end else let (* Not ready to remove this. Just find out if this is an earlier branch and continue. *) val U : unit = if addr addrLt !(longestBranch cvec) then longestBranch cvec := addr else (); in lab :: convertRest end end end; (* convertLabels *) in if !(ic cvec) addrMinus !(longestBranch cvec) <= maxDiff then () else let (* Must save the stack-reset, otherwise "fixup" will try to reset it. *) val sr = ! (stackReset cvec); val U : unit = stackReset cvec := 0; (* Must skip round the branches unless we have just taken an unconditional branch. *) val lab : labels = if branched then noJump else let val U : unit = genByte(opcode_down opcode_jump, cvec); val U : unit = genByte(0, cvec); in makeLabel(cvec, !(ic cvec) addrPlus ~1) end (* Find the new longest branch while converting the labels *) val U : unit = longestBranch cvec := addrLast; val U : unit = labelList cvec := convertLabels (! (labelList cvec)); val U : unit = fixup (lab, cvec); (* Continue with normal processing. *) in stackReset cvec := sr (* Restore old value. *) end end; (* checkBranchList *) (* Dave had some complicated scheme here - with the new representation of labels, everything gets much simpler. *) fun linkLabels (lab1 : labels, lab2 : labels, cvec : code) : labels = lab1 @ lab2; (* Put in the opcode for an instruction. *) fun genOpc (opc: opcode, size: int, cvec: code) : unit = let val opn : int = opcode_down opc; (* ... val U : unit = if 0 <= opn andalso opn < 256 andalso opn <> opcode_down opcode_booleanOr then () else raise InternalError ("genOpc: bad opcode: " ^ Int.toString opn); ... *) val U : unit = checkBranchList (cvec, false, size); val U : unit = resetSp cvec; in genByte (opn, cvec) end; fun genRaiseEx (cvec: code) : unit = genOpc (opcode_raiseEx, 1, cvec); fun genLock(cvec: code) : unit = genOpc (opcode_lock, 1, cvec); fun genLdexc (cvec: code) : unit = genOpc (opcode_ldexc, 1, cvec); fun genPushHandler (cvec: code) : unit = genOpc (opcode_pushHandler, 1, cvec); (* Generate word, byte or single opcodes. The values from ``f'' to ``l'' are packed into the opcode by generating opF, opF+1, ... opF+(l-f). Other arguments which will fit into a byte generate opB followed by the argument. The rest require opW and a word argument. *) fun gen1 (opW: opcode, opB: opcode, opF: opcode, first : int, last : int, arg1: int, cvec: code) : unit = if (first <= arg1 andalso arg1 <= last) then genOpc (opcode_up (opcode_down opF + arg1 - first), 1, cvec) else if 0 <= arg1 andalso arg1 <= 254 (* why not 255? *) then let val U : unit = genOpc(opB, 2, cvec); in genByte(arg1, cvec) end else let val U : unit = genOpc(opW, 3, cvec); in genWord(arg1, cvec) end; fun genReturn (arg1 : int, cvec : code) : unit = gen1 (opcode_returnW, opcode_returnB, opcode_return_0, 0, 3, arg1, cvec); fun genGetStore (arg1 : int, cvec : code) : unit = gen1 (opcode_getStoreW, opcode_getStoreB, opcode_getStore_2, 2, 4, arg1, cvec); fun genLocal (arg1 : int, cvec : code) : unit = gen1 (opcode_localW, opcode_localB, opcode_local_0, 0, 11, arg1, cvec); fun genIndirect (arg1 : int, cvec : code) : unit = gen1 (opcode_indirectW, opcode_indirectB, opcode_indirect_0, 0, 5, arg1, cvec); fun genMoveToVec (arg1 : int, cvec : code) : unit = gen1 (opcode_moveToVecW, opcode_moveToVecB, opcode_moveToVec_0, 0, 7, arg1, cvec); fun genSetStackVal (arg1 : int, cvec : code) : unit = gen1 (opcode_setStackValW, opcode_setStackValB, opcode_setStackValB, (* Don't care - no "implied" form exists *) 1, 0, arg1, cvec); fun genCase (arg1 : int, cvec : code) : unit = let (* The destination addresses immediately follow the case instruction so we must make sure there is enough room. *) val U : unit = genOpc (opcode_caseSwitch, 3 + arg1 * 2, cvec); in genWord (arg1, cvec) end; fun genTuple (arg1: int, cvec: code) : unit = gen1 (opcode_tupleW, opcode_tupleB, opcode_tuple_2, 2, 4, arg1, cvec); (* Single byte argument. *) fun genIoVecEntry (arg: int, cvec : code) : unit = case arg of (* Some of these entries are very common. *) 5 => genOpc(opcode_ioVec_5, 1, cvec) | 6 => genOpc(opcode_ioVec_6, 1, cvec) | 225 => genOpc(opcode_ioVec_225, 1, cvec) | 226 => genOpc(opcode_ioVec_226, 1, cvec) | 229 => genOpc(opcode_ioVec_229, 1, cvec) | 233 => genOpc(opcode_ioVec_233, 1, cvec) | 236 => genOpc(opcode_ioVec_236, 1, cvec) | 251 => genOpc(opcode_ioVec_251, 1, cvec) | 253 => genOpc(opcode_ioVec_253, 1, cvec) | 255 => genOpc(opcode_ioVec_255, 1, cvec) | _ => let val U : unit = genOpc(opcode_ioVecEntry, 2, cvec); in genByte(arg, cvec) end; fun genNonLocal (arg1 : int, arg2 : int, arg3 : int, cvec: code) : unit = if arg1 <= 0 orelse arg2 <= 0 then raise InternalError "genNonLocal: invalid parameters" else if arg1 <= 16 andalso arg2 <= 3 andalso ~6 <= arg3 andalso arg3 <= 9 then let (* use a coded representation *) val opc = opcode_up(opcode_down opcode_nonLocalL_1 + arg2 - 1); val U : unit = genOpc (opc, 1, cvec); in genByte((arg1 - 1) * 16 + arg3 + 6, cvec) end else let val U : unit = genOpc (opcode_nonLocal, 5, cvec); val U : unit = genWord (arg1, cvec); val U : unit = genWord (arg2, cvec); in genWord (arg3, cvec) end; fun genEnterInt (cvec: code, args: int) : unit = let val U : unit = genByte(opcode_down opcode_enterInt, cvec); val U : unit = genByte(args + 1, cvec); in () end; fun genEnterIntCall (cvec: code, args: int) : unit = let val U : unit = if args < MAXINTARGS then () else raise InternalError "genEnterIntCall: too many arguments"; in genEnterInt(cvec, args) end; local val enterHandlerCode = (*2 * MAXINTARGS *) 254; in fun genEnterIntCatch (cvec: code) : unit = genEnterInt(cvec, enterHandlerCode); end; fun genEnterIntProc (cvec: code, args: int) : unit = let val U : unit = if args < MAXINTARGS then () else raise InternalError "genEnterIntProc: too many arguments"; val argCode : int = MAXINTARGS + args; (* Primary entry point (address 0) *) val U : unit = genEnterInt(cvec, argCode); in () end; (* Used for jump, jumpFalse, setHandler and delHandler. *) fun putBranchInstruction (opc: opcode, cvec: code) : labels = if opc = opcode_setHandler orelse opc = opcode_jumpFalse then let (* The next instruction may or will be executed. *) val U : unit = genOpc (opc, 3, cvec); (* why not 2? *) val U : unit = genByte (0, cvec); in makeLabel (cvec, !(ic cvec) addrPlus ~1) end else let (* Unconditional branches. *) val U : unit = resetSp cvec; val U : unit = genByte (opcode_down opc, cvec); val U : unit = genByte (0, cvec); val lab : labels = makeLabel (cvec, !(ic cvec) addrPlus ~1); (* Having just generated an unconditional branch we can extend branches without the overhead of an extra branch. That's why we did a genByte, rather than a genOpc, just now. *) val U : unit = checkBranchList (cvec, true, 0); in lab end; (* Generate either a short or long jump. *) fun jumpback (lab: addrs, cvec: code) : unit = let val U : unit = resetSp cvec; (* Don't use genOpc(opcode_jump) because we want to check the branch list afterwards, and also because it might generate some code if we try to use a short branch and take it over the limit. *) val newOffset : int = !(ic cvec) addrMinus lab; val U : unit = if newOffset < 256 then let (* short *) (* For opcode_jumpBack, exceptionally, the offset is relative to the START of the instruction. Also, the offset is backwards, as opposed to the usual forwards convention. *) val U : unit = genByte (opcode_down opcode_jumpBack, cvec); in genByte (newOffset, cvec) end else let (* must use indirect jump *) (* For all other jumps, the offset is relative to the END of the instruction, which explains the "0" and the "+ 4". *) val U : unit = genByte (opcode_down opcode_jumpI, cvec); val U : unit = genByte (0, cvec); (* Indirect through next word. *) in genWord (~ (newOffset + 4), cvec) end; in (* Having just generated an unconditional branch we can extend branches without the overhead of an extra branch. *) checkBranchList(cvec, true, 0) end; (* jumpback *) local fun fixupConstantLoad (constStartAddrs : addrs, cvec : code) = fn (fixupAddr : addrs, constNum : int) => let val oldOffset : int = getBytes (2, fixupAddr, cvec); val U : unit = if oldOffset = 0 then () else raise InternalError "fixupConstantLoad: already fixed-up"; val constAddr : addrs = if usePortableConstantOffset then constStartAddrs else constStartAddrs addrPlus (wordLength() * (constNum+4)); (* Offsets are calculated from the END of the instruction, which explains the "+ 2" *) val newOffset : int = constAddr addrMinus (fixupAddr addrPlus 2); val U : unit = if 0 <= newOffset andalso newOffset < 65536 then () else raise InternalError "fixupConstantLoad: constant too distant (16-bit offset)" in putBytes (newOffset, 2, fixupAddr, cvec) end in fun fixupConstantLoads (cvec, constStartAddrs, loadInfo) : unit = applyList (fixupConstantLoad (constStartAddrs, cvec), loadInfo); end; (* Find the offset in the constant area of a constant. *) (* The first has offset 0. *) fun addConstToVec (valu : const, cvec : code) : int = let (* Search the list to see if the constant is already there. *) fun findConst valu [] num = (* Add to the list *) ( numOfConsts cvec := ! (numOfConsts cvec) + 1; constVec cvec := ! (constVec cvec) @ [valu]; num ) | findConst valu (h :: t) num = if sameConst (valu, h) then num else findConst valu t (num + 1) (* Not equal *); in findConst valu (! (constVec cvec)) 0 end; fun genConstRef (constNum : int, cvec : code) : unit = let (* Remember address of the indirection so we can fix it up later *) val fixupAddrs : addrs = !(ic cvec); val U : unit = genWord (0, cvec); in constLoads cvec := (fixupAddrs, constNum) :: !(constLoads cvec) end; fun pushConst (value : machineWord, cvec : code) : unit = if isShort value andalso toShort value < 0w32768 then let val iVal: int = Word.toInt (toShort value); in if iVal = 10 then genOpc (opcode_const_10, 1, cvec) else if iVal <= 4 then genOpc (opcode_up (opcode_down opcode_const_0 + iVal), 1, cvec) else if iVal < 256 then let val U : unit = genOpc (opcode_constIntB, 2, cvec); in genByte (iVal, cvec) end else let val U : unit = genOpc (opcode_constIntW, 3, cvec); in genWord (iVal, cvec) end end else let (* address or large short *) val constNum : int = addConstToVec (WVal value, cvec); val U : unit = if not usePortableConstantOffset then genOpc (opcode_constAddr, 3, cvec) else if constNum < 256 then (genOpc (opcode_constAddrX_b, 4, cvec); genByte (constNum, cvec)) else (genOpc (opcode_constAddrX_w, 5, cvec); genWord (constNum, cvec)); in genConstRef (constNum, cvec) end; (* Now aligns *on* a word boundary, because machine instructions themselves adjust the return address etc. SPF 23/6/95 *) (* That may be OK for some architectures but it's no good for the portable interpreted code. Changed back to align OFF word. Note: I've left it as addr mod 4 <> 2 rather than addr mod wordLength <> 2 since I think that it would be safe to treat word+2 or word+6 as being code addresses. DCJM 21/9/2000. *) fun alignOffWord (cvec: code, length: int) : unit = let val mustReset = !(stackReset cvec) <> 0; (* Must allow enough space for the possible pad and the next instruction. It would be a nuisance if we had aligned it off a word boundary and then we found that genOpc lengthed some branches and put it back on a word boundary. *) (* Size is now increased to 20, to allow for extra "pad" instructions following enterInt. (8 + 10 < 20). This will (hopefully) fix the "jump too large" which appeared when I added the extra return-point. SPF 3/8/95 *) val size : int = if mustReset then 23 else 20; val U : unit = checkBranchList (cvec, false, size); val U : unit = resetSp cvec; in while (getAddr (! (ic cvec)) + length) mod 4 <> (* 0 *) 2 do genByte (opcode_down opcode_pad, cvec) end; fun genCallClosure (cvec: code) : unit = let val U : unit = alignOffWord(cvec, 1); in genOpc (opcode_callClosure, 1, cvec) end; fun genTailCall (toslide : int, slideby: int, cvec: code) : unit = if toslide < 256 andalso slideby < 256 then case (toslide, slideby) of (3, 2) => let val U : unit = alignOffWord (cvec, 1); in genOpc (opcode_tail3_2, 1, cvec) end | (3, 3) => let val U : unit = alignOffWord (cvec, 1); in genOpc (opcode_tail3_3, 1, cvec) end | (3, _) => let val U : unit = alignOffWord (cvec, 2); val U : unit = genOpc (opcode_tail3b, 2, cvec); in genByte (slideby, cvec) end | (4, _) => let val U : unit = alignOffWord (cvec, 2); val U : unit = genOpc (opcode_tail4b, 2, cvec); in genByte (slideby, cvec) end | (_, _) => let (* General byte case *) val U : unit = alignOffWord (cvec, 3); val U : unit = genOpc (opcode_tailbb, 3, cvec); val U : unit = genByte (toslide, cvec); in genByte (slideby, cvec) end else let (* General case. *) val U : unit = alignOffWord (cvec, 5); val U : unit = genOpc (opcode_tail, 5, cvec); val U : unit = genWord (toslide, cvec); in genWord(slideby, cvec) end; (* genTailCall *) (* Make a reference to another procedure. Usually this will be a forward *) (* reference but it may have been compiled already, in which case we can *) (* put the code address in now. *) fun codeConst (r : code, into : code) : int = let val cseg = ! (resultSeg r); in if isSet cseg (* Already done - insert the actual address *) then let val addr : address = csegAddr (scSet cseg); in addConstToVec (WVal (toMachineWord addr), into) end else (* forward *) (* Add the referring procedure onto the list of the procedure referred to if it is not already there. This makes sure that when the referring procedure is finished and its address is known the address will be plugged in to every procedure which needs it. *) let fun onList x [] = false | onList x (c::cs) = (x is c) orelse onList x cs; val codeList = ! (otherCodes r); val U : unit = if onList into codeList then () else otherCodes r := into :: codeList; in addConstToVec (CVal r, into) end end; (* Recursive reference, either direct or indirect. *) fun genRecRef (target : code, into: code) : unit = let val constNum : int = codeConst (target, into); val U : unit = if not usePortableConstantOffset then genOpc (opcode_constAddr, 3, into) else if constNum < 256 then (genOpc (opcode_constAddrX_b, 4, into); genByte (constNum, into)) else (genOpc (opcode_constAddrX_w, 5, into); genWord (constNum, into)); in genConstRef (constNum, into) end; (* Call to a procedure with a static link. *) fun genCallSl (offset : int, level : int, target : code, into: code) : unit = let val constNum : int = codeConst (target, into); (* The offset and level are coded into a single byte if they are within the range. *) in if level <= 15 andalso 2 <= offset andalso offset <= 17 andalso (not usePortableConstantOffset orelse constNum < 256) then ( if usePortableConstantOffset then ( alignOffWord (into, 5); genOpc (opcode_callSlCX, 5, into); genByte(constNum, into) ) else (alignOffWord (into, 4); genOpc (opcode_callSlC, 4, into)); genConstRef (constNum, into); genByte ((offset - 2) * 16 + level, into) ) else ( if usePortableConstantOffset then ( alignOffWord (into, 9); genOpc (opcode_callSlX, 9, into); genWord (constNum, into) ) else (alignOffWord (into, 7); genOpc (opcode_callSl, 7, into)); genConstRef (constNum, into); genWord (offset, into); genWord (level, into) ) end; fun genContainer (size : int, cvec: code) : unit = (genOpc(opcode_containerW, 3, cvec); genWord(size, cvec)); fun genSetContainer (size : int, cvec: code) : unit = (genOpc(opcode_set_containerW, 3, cvec); genWord(size, cvec)); fun genTupleFromContainer (size : int, cvec: code) : unit = (genOpc(opcode_tuple_containerW, 3, cvec); genWord(size, cvec)); (* Adds in the reset. *) fun resetStack (offset : int, carryValue : bool, cvec : code) : unit = let val U : unit = if 0 < offset then () else raise InternalError ("resetStack: bad offset " ^ Int.toString offset); val U : unit = stackReset cvec := !(stackReset cvec) + offset; in carry cvec := carryValue end; fun printCode (seg: cseg, procName: string, endcode : int, printStream) : unit = let val U : unit = printStream "\n"; val U : unit = if procName = "" (* No name *) then printStream "?" else printStream procName; val U : unit = printStream ":\n"; (* prints a string representation of a number *) fun printHex (v : int) : unit = printStream(Int.fmt StringCvt.HEX v); val ptr = ref 0; (* To make sure we do not print branch extensions as though they were instructions we keep a list of all indirect forward references and print values at those addresses as addresses. This list is sorted with the lowest address first. *) val indirections : int list ref = ref []; local fun addL (n, [] : int list) : int list = [n] | addL (n, l as (x :: xs)) = if n < x then n :: l else if n = x then l else x :: addL (n, xs) in fun addInd (ind : int) : unit = indirections := addL (ind, !indirections) end; (* Prints a relative address. *) fun printDisp (len: int, spacer: string, addToList: bool) : unit = let val ad : int = getB(len, !ptr, seg) + !ptr + len; val U : unit = if addToList then addInd ad else (); val U : unit = printStream spacer; val U : unit = printHex ad; in ptr := !ptr + len end; (* Prints an operand of an instruction *) fun printOp (len: int, spacer : string) : unit = let val U : unit = printStream spacer; val U : unit = printHex (getB (len, !ptr, seg)); in ptr := !ptr + len end; val U : unit = while !ptr < endcode do let val addr : int = !ptr; val U : unit = printHex addr; (* The address. *) val U : unit = if (case !indirections of v :: _ => v = addr | [] => false) then let (* It's an address. *) val U : unit = printDisp (2, "\t", false); in case !indirections of _ :: vs => indirections := vs | _ => raise InternalError "printCode: indirection list confused" end else let (* It's an instruction. *) val U : unit = printStream "\t"; val opc : opcode = opcode_up (Word8.toInt (csegGet (seg, !ptr))); (* opcode *) val U : unit = ptr := !ptr + 1; val U : unit = printStream (repr opc); val sz : int = size opc; in if sz = 1 then () else if opc = opcode_jump orelse opc = opcode_jumpFalse orelse opc = opcode_setHandler orelse opc = opcode_delHandler orelse opc = opcode_constAddr then printDisp (sz - 1, "\t", false) else if opc = opcode_jumpI orelse opc = opcode_jumpIFalse orelse opc = opcode_setHandlerI orelse opc = opcode_delHandlerI then printDisp (1, "\t", true) else if opc = opcode_jumpBack (* Should be negative *) then let val U : unit = printStream "\t"; val U : unit = printHex((!ptr - 1) - getB(1,!ptr,seg)); in ptr := !ptr + 1 end else if opc = opcode_nonLocal then let val U : unit = printOp (2, "\t"); val U : unit = printOp (2, ","); in printOp(2, ",") end else if opc = opcode_callSl then let val U : unit = printDisp (2, "\t", false); val U : unit = printOp (2, ","); in printOp (2, ",") end else if opc = opcode_callSlX then ( printOp (2, "\t"); printDisp (2, ",", false); printOp (2, ","); printOp (2, ",") ) else if opc = opcode_callSlC then ( printDisp (2, "\t", false); printOp (1, ",") ) else if opc = opcode_callSlCX then ( printOp (1, "\t"); printDisp (2, ",", false); printOp (1, ",") ) else if opc = opcode_caseSwitch then let (* Have to find out how many items there are. *) val limit : int = getB (2, !ptr, seg); val U : unit = printOp (2, "\t"); val base : int = !ptr; fun printEntry (i : int) = let val U : unit = printStream "\n\t"; val U : unit = printHex(base + getB(2, !ptr, seg)); in ptr := !ptr + 2 end; in forLoop printEntry 0 limit end else if opc = opcode_tail then let val U : unit = printOp (2, "\t"); in printOp (2, ",") end else if opc = opcode_tailbb then let val U : unit = printOp (1, "\t"); in printOp (1, ",") end else if opc = opcode_constAddrX_b then ( printOp (1, "\t"); printDisp (sz - 1, ",", false) ) else if opc = opcode_constAddrX_w then ( printOp (2, "\t"); printDisp (sz - 1, ",", false) ) else printOp (sz - 1, "\t") end; (* an instruction. *) in printStream "\n" end (* main loop *) in (* body of printCode *) () end; (* printCode *) (* The count of the number of constants is an untagged value so we can't use loadWord. *) fun loadConstCount (a : address, offset : int) : int = let val byteOffset : int = wordLength() * offset; fun loadBytes (i: int) (acc: int) : int = if i = wordLength() then acc else let val addr: int = if littleEndian() then byteOffset + wordLength() - i - 1 else byteOffset + i; val b = loadByte (a, toShort addr); val acc' = acc*256 + Word8.toInt b in loadBytes (i+1) acc' end in loadBytes 0 0 end; (* Bootstrapping problems currently prevent us from using Address.nameOfCode *) fun nameOfCode (a : address) = let val objLength : int = Word.toInt (ADDRESS.length a); val lastWord : int = objLength - 1; val constCount : int = loadConstCount (a, lastWord); val codeName : machineWord = loadWord (a, toShort (lastWord - constCount)); in unsafeCast codeName end; (* prints a string representation of a number *) fun printHex (v : int, printStream) : unit = printStream(Int.fmt StringCvt.HEX v); fun printConstCode (a : address, printStream) : unit = printStream ("code:\t" ^ nameOfCode a); fun printConstClosure (a : address, printStream) : unit = printStream ("clos:\t" ^ nameOfCode a); fun printWords (a : address, printStream) : unit = let val objLength : int = Word.toInt (ADDRESS.length a) in if objLength = 1 then printStream ("long:\t1 word") else printStream ("long:\t" ^ Int.toString objLength ^ " words") end; fun printBytes (a : address, printStream) : unit = let val objLength : int = Word.toInt (ADDRESS.length a) in if objLength = 1 then printStream ("bytes:\t1 word") else printStream ("bytes:\t" ^ Int.toString objLength ^ " words") end; fun printConst (c : const, printStream) : unit = case c of CVal c => let val U : unit = printStream(if noClosure c then "code:\t" else "clos:\t"); in printStream(procName c) end | WVal w => if isShort w then let val value : int = Word.toInt (toShort w); val U : unit = printStream "short:\t"; val U : unit = printHex(value, printStream); val U : unit = printStream " ("; val U : unit = printStream (Int.toString value); in printStream ")" end else let val a : address = toAddress w; in if isIoAddress a then printStream "RTS entry" else if isCode a then printConstCode(a, printStream) else if isBytes a then printBytes(a, printStream) else if isWords a andalso 0w1 <= ADDRESS.length a then let val w' : machineWord = loadWord (a, 0w0) in if not (isShort w') then let val a' : address = toAddress w'; in if not (isIoAddress a') andalso isCode a' then printConstClosure(a', printStream) else printWords(a, printStream) (* First element of tuple is not a code segment *) end else printWords(a, printStream) (* First element of tuple is a short *) end else printWords(a, printStream) (* Not a proper tuple (shouldn't occur) *) end; fun printConstants (addr : int, [] : const list, printStream) : unit = () | printConstants (addr : int, h :: t, printStream) : unit = let val U : unit = printHex(addr, printStream); val U : unit = printStream "\t"; val U : unit = printConst(h, printStream); val U : unit = printStream "\n"; in printConstants (addr + wordLength(), t, printStream) end; (* set the num'th constant in cvec to be value *) fun constLabels (cvec : code, num : int, value : machineWord) : unit = let val seg = scSet (!(resultSeg cvec)); (* The +2 in the next instruction is because ic is always the byte count of the word after the marker word. We need to skip over the function name and the profile count. *) val constAddr = (getAddr (!(ic cvec))) div wordLength() + num + 2; in csegPutWord (seg, constAddr, value) end; (* Fix up references from other vectors to this one. *) fun fixOtherRefs (refTo : code, value : machineWord) : unit = let fun fixRef (refFrom : code) : unit = let val noc = numOfConsts refFrom; fun putNonLocalConst (num : int, const : const) = case const of CVal c => if c is refTo then let (* A reference to this one. *) (* Fix up the forward reference. *) val U : unit = constLabels (refFrom, num, value); in (* decrement the "pending references" count *) noc := !noc - 1 end else () | _ => (); (* look down its list of forward references until we find ourselves. *) val U : unit = applyCountList (putNonLocalConst, 1, !(constVec refFrom)); in (* If there are no more references, we can lock it. *) if !noc = 0 then csegLock (scSet (! (resultSeg refFrom))) else () end (* fixRef *); in (* For each `code' which needs a forward reference to `refTo' fixing up. *) applyList (fixRef, !(otherCodes refTo)) end; (* fixOtherRefs *) (* Adds the constants onto the code, and copies the code into a new segment *) fun copyCode (cvec: code as Code{ printAssemblyCode, printStream, ...}) : address = let (* Pad out to long word boundary. Don't just leave as zero because, if the last instruction (return) had a zero argument, this could give a whole word of zero, which would mess up the garbage-collector. *) (* Now round up to 8 byte boundary. This makes porting to a 64 bit machine much simpler. DCJM 22/9/00. *) val alignTo = if wordLength() < 8 then 8 else wordLength(); val U : unit = while (getAddr (! (ic cvec)) mod alignTo) <> 0 do genByte (opcode_down opcode_pad, cvec); (* This also aligns ic onto a fullword boundary. *) val endIC = !(ic cvec); (* Remember end *) val U : unit = genBytes (0, wordLength(), cvec); (* Marker *) (* +4 for code size, profile count, function name and constants count *) val numOfConst = !(numOfConsts cvec); val endOfCode : int = getAddr (! (ic cvec)) div wordLength(); val segSize : int = endOfCode + numOfConst + 4; (* fix-up all the constant loads (or indirections) *) val U : unit = fixupConstantLoads (cvec, endIC, !(constLoads cvec)); (* Now make the byte segment that we'll turn into the code segment *) val seg : cseg = csegMake segSize; val U : unit = resultSeg cvec := Set seg; (* Copy the code into the new segment. *) val U : unit = csegCopySeg (codeVec cvec, seg, getAddr (!(ic cvec)), 0); (* Byte offset of start of code. *) local val byteEndOfCode = endOfCode * wordLength(); val addr = mkAddr byteEndOfCode; in val U : unit = setLong (byteEndOfCode, addr, seg); end; (* Put in the number of constants. This must go in before we actually put in any constants. *) local val addr = mkAddr ((segSize - 1) * wordLength()); in val U : unit = setLong (numOfConst + 1, addr, seg) end; (* Next the profile count. *) local val addr = mkAddr ((endOfCode + 1) * wordLength()); in val U : unit = setLong (0, addr, seg) end; (* Now we've filled in all the C integers; now we need to convert the segment into a proper code segment before it's safe to put in any ML values. SPF 13/2/97 *) val U : unit = csegConvertToCode seg; local (* why do we treat the empty string as a special case? SPF 15/7/94 *) (* This is so that profiling can print "". Note that a tagged zero *is* a legal string (it's "\000"). SPF 14/10/94 *) val name : string = procName cvec; val nameWord : machineWord = if name = "" then toMachineWord 0 else toMachineWord name; in val U : unit = csegPutWord (seg, endOfCode + 2, nameWord) end; (* and then copy the objects from the constant list. *) fun putLocalConsts [] num = () | putLocalConsts (c::cs) num = let val U : unit = case c of WVal w => (* an ordinary (non-short) constant *) let val U : unit = constLabels (cvec, num, w); in numOfConsts cvec := ! (numOfConsts cvec) - 1 end (* forward-reference - fix up later when we compile the referenced code *) | CVal _ => (); in putLocalConsts cs (num + 1) end; val U : unit = putLocalConsts (! (constVec cvec)) 1; (* Switch off "mutable" bit now if we have no forward or recursive references to fix-up *) val U : unit = if !(numOfConsts cvec) = 0 then csegLock seg else (); (* Do we need to make a closure, or just return the code? *) val addr : address = if noClosure cvec then csegAddr seg else let val addr : address = alloc (0w1, F_words, toMachineWord (csegAddr seg)); (* Logically unnecessary; however the RTS currently allocates everything as mutable because Dave's code assumed that things were done this way and I'm not completely sure that everything that needs a mutable allocation actually asks for it yet. SPF 19/2/97 *) val U : unit = lock addr; in addr end (* Now we know the address of this object we can fix up any forward references outstanding. This is put in here because there may be directly recursive references. *) val U : unit = fixOtherRefs (cvec, toMachineWord addr); val U : unit = if printAssemblyCode then let (* print out the code *) val U : unit = printCode (seg, procName cvec, getAddr endIC, printStream); (* Skip: byte offset of start of code segment, number of constants, profiling word, name of code segment *) val constants : const list = ! (constVec cvec); val U : unit = printConstants (getAddr endIC + 4*wordLength(), constants, printStream); in printStream"\n" end else (); in addr end (* copyCode *) (* ic function exported to GCODE *) val ic : code -> addrs = fn (cvec : code) => let (* Make sure any pending stack resets are done. *) val U : unit = resetSp cvec in ! (ic cvec) end; (* For export from the functor *) val jump : opcode = opcode_jump; val jumpFalse : opcode = opcode_jumpFalse; val setHandler : opcode = opcode_setHandler; val delHandler : opcode = opcode_delHandler; end (* CODECONS functor body *) end; (* structure-level let *) polyml.5.2.1/mlsource/MLCompiler/CodeTree/INTGCODE.ML0000644000175000017500000014556111003075354020762 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* Title: Generate interpretable code for Poly system from the code tree. Author: Dave Matthews, Cambridge University Computer Laboratory Copyright Cambridge University 1985 *) (* This code-generator is primarily intended as a porting aid from one machine-code to another. It is modelled on the VAX code-generator and has a similar structure. Note: It does not use the use-count information on declarations. *) functor INTGCODE ( (*****************************************************************************) (* CODECONS *) (*****************************************************************************) structure CODECONS : sig type machineWord; type address; type code; type opcode; eqtype addrs; (*hacky! *) type labels; val noJump: labels; val jumpFalse : opcode; val jump : opcode; val setHandler : opcode; val delHandler : opcode; val addrPlus : addrs * int -> addrs; val addrMinus : addrs * addrs -> int; val codeCreate: bool * string * Universal.universal list -> code; (* makes the initial segment. *) (* ic - Address for the next instruction in the segment. *) val ic: code -> addrs; (* putBytes : puts "length" bytes of "val" into locations "addr", "addr"+1 *) val putBytes : int * int * addrs * code -> unit; (* GEN- routines all put a value at the instruction counter and add an appropriate amount to it. *) (* genWord - Puts 2 bytes. *) val genWord : int * code -> unit; (* gen... - put instructions and their operands. *) val genCallClosure : code -> unit; val genRaiseEx : code -> unit; val genLock : code -> unit; val genLdexc : code -> unit; val genPushHandler : code -> unit; val genReturn : int * code -> unit; val genGetStore : int * code -> unit; val genLocal : int * code -> unit; val genIndirect : int * code -> unit; val genMoveToVec : int * code -> unit; val genSetStackVal : int * code -> unit; val genCase : int * code -> unit; val genTuple : int * code -> unit; val genTailCall : int * int * code -> unit; val genNonLocal : int * int * int * code -> unit; (* genEnter instructions are only needed when machine-code routines can call interpreted routines or vice-versa. The enterInt instruction causes the interpreter to be entered and the argument indicates the reason. *) val genEnterIntCatch : code -> unit; val genEnterIntProc : code * int -> unit; val genEnterIntCall : code * int -> unit; (* pushConst - Generates code to push a constant. *) val pushConst : machineWord * code -> unit; (* genCallSl - Generate callSl instructions which refer to either constants or are forward references to procedures which have not yet been compiled. *) val genCallSl : int * int * code * code -> unit; (* genRecRef - Recursive reference to a procedure. *) val genRecRef: code * code -> unit (* Create a container on the stack *) val genContainer : int * code -> unit; (* Copy a tuple into a container. *) val genSetContainer : int * code -> unit; (* Create a tuple from a container. *) val genTupleFromContainer : int * code -> unit; (* copyCode - Finish up after compiling a procedure. *) val copyCode : code -> address; (* getBytes - gets "length" bytes from locations "addr", "addr"+1... Returns a negative number if the first bit was set. *) val getBytes: int * addrs * code -> int; (* putBranchInstruction puts in an instruction which involves a forward reference. *) val putBranchInstruction: opcode * code -> labels; (* Instruction to delete a handler and skip round it. *) val fixup: labels * code -> unit; (* Fix up a forward reference. *) val linkLabels: labels * labels * code -> labels; (* Link label lists. *) val jumpback: addrs * code -> unit; (* Backwards jump. *) val resetStack: int * bool * code -> unit; (* Set a pending reset *) val alignOffWord: code * int -> unit; (* Add a pad byte if the value would be word-aligned. *) end (* CODECONS *); (*****************************************************************************) (* MISC *) (*****************************************************************************) structure MISC : sig exception InternalError of string; end; (* DCJM 26/9/00. Previously Address was a global but we aren't allowed to have sharing constraints with globals in ML97. We could use a "where type" constraint but then we couldn't bootstrap from ML90. *) (*****************************************************************************) (* ADDRESS *) (*****************************************************************************) structure ADDRESS : sig type machineWord; (* NB *not* an eqtype *) type short = Word.word; type address; val wordEq: 'a * 'a -> bool; val isShort: 'a -> bool; val unsafeCast : 'a -> 'b; val toMachineWord: 'a -> machineWord; val toShort: 'a -> short; val toAddress: machineWord -> address; val loadByte: (address * short) -> Word8.word; val loadWord: address * short -> machineWord val flags: address -> Word8.word; val length: address -> short; val wordSize: int val F_words: Word8.word; val F_bytes : Word8.word; val F_mutable: Word8.word; val alloc: short * Word8.word * machineWord -> address val isCode : address -> bool val call: address * machineWord -> machineWord end structure BASECODETREE: BaseCodeTreeSig (*****************************************************************************) (* GCODE sharing constraints *) (*****************************************************************************) sharing type ADDRESS.machineWord = CODECONS.machineWord = BASECODETREE.machineWord sharing type ADDRESS.address = CODECONS.address ) : (*****************************************************************************) (* GCODE export signature *) (*****************************************************************************) sig type codetree type machineWord val gencode: codetree * Universal.universal list -> unit -> machineWord; end = let (*****************************************************************************) (* STRETCHARRAY *) (*****************************************************************************) structure STRETCHARRAY : sig type 'a stretchArray; val stretchArray : int * '_a -> '_a stretchArray; val update : '_a stretchArray * int * '_a -> unit; val sub : 'a stretchArray * int -> 'a; end = StretchArray; in (*****************************************************************************) (* GCODE functor body *) (*****************************************************************************) struct open CODECONS; open ADDRESS; open BASECODETREE; open MISC; open RuntimeCalls; (* for POLY_SYS numbers *) val F_mutable_words = Word8.orb (F_mutable, F_words); val objLength = ADDRESS.length; (* gets a value from the run-time system; usually this is a closure, but sometimes it's an int. *) val ioOp : int -> machineWord = RunCall.run_call1 POLY_SYS_io_operation; (* minor HACKS *) fun forLoop f i n = if i > n then () else (f i; forLoop f (i + 1) n); fun apply f [] = () | apply f (h::t) = (f h; apply f t); val short0 : short = toShort 0; val short1 : short = toShort 1; val short2 : short = toShort 2; val word0 = toMachineWord 0; val word1 = toMachineWord 1; val DummyValue : machineWord = word0; (* used as result of "raise e" etc. *) val UnitValue : machineWord = word0; (* unit *) val False : machineWord = word0; (* false *) val True : machineWord = word1; (* true *) val Zero : machineWord = word0; (* 0 *) val constntTrue = Constnt True; val constntFalse = Constnt False; (* copied from CTREE.ML for efficiency (local calls can be inlined) *) type evalForm = { (* Evaluate a function with an argument list. *) function: codetree, argList: codetree list, earlyEval: bool } type caseForm = { (* Case expressions *) cases : (codetree * int list) list, test : codetree, default : codetree, min : int, max : int } (* Where the result, if any, should go *) datatype whereto = NoResult (* discard result *) | ToStack (* Need a result but it can stay on the pseudo-stack *); (* Are we at the end of the procedure. *) datatype tail = EndOfProc | NotEnd; datatype slValue = Address of int * int (* Address of an entry on the stack. *) | StaticLink of code * int (* A static linked procedure. *) | Recursive of code (* A recursive reference to a closure. *) (* Code generate a procedure or global declaration *) fun codegen (pt : codetree, cvec : code, loadStaticLink : int * int -> slValue, numOfArgs: int, parameters) : address = let fun matchFailed _ = raise InternalError "codegen: unhandled pattern-match failure" val initTrans = 5; (* Initial size of tables. *) val initStack = 10; datatype decEntry = StackAddr of int | ProcConst of code | Empty; val decVec : decEntry STRETCHARRAY.stretchArray = STRETCHARRAY.stretchArray (initTrans, Empty); (* Count of number of items on the stack. *) val realstackptr = ref 1; (* The static-link/closure ptr is already there *) (* Exited - set to true if we have jumped out. *) val exited = ref false; (* Push a value onto the stack. For the moment this merely involves adding corresponding values to the real and pseudo-stacks. *) fun incsp () : unit = realstackptr := !realstackptr + 1; (* An entry has been removed from the stack. *) fun decsp () : unit= realstackptr := !realstackptr - 1; (* Pushes a local or non-local stack value. *) fun pushStackValue (addr : int, level : int) : unit = let val U : unit = if level > 0 then (* Non-local *) genNonLocal(!realstackptr, level, addr, cvec) else (* Locals and references to the closure. *) genLocal(!realstackptr + addr, cvec); in incsp () end; (* Loads a local, argument or closure value; translating local stack addresses to real stack offsets. *) fun locaddr (ext : loadForm) : unit = let val locn = #addr ext; in if #fpRel ext then if locn < 0 (* Args. *) then pushStackValue (~locn, 0) else (* positive address - on the stack. *) case STRETCHARRAY.sub (decVec, locn) of StackAddr n => pushStackValue (~ n, 0) | _ => (* Should be on the stack, not a procedure. *) raise InternalError "locaddr: bad stack address" else (* closure-pointer relative *) case loadStaticLink (locn, 1) of Recursive code => let val U : unit = genRecRef (code, cvec) in incsp () end | Address (addr, level) => pushStackValue (addr, level) | StaticLink (code, level) => raise InternalError "locaddr: illegal use of static-link function" end; (* locaddr *) (* generates code from the tree *) fun gencde (pt : codetree, whereto : whereto, tailKind : tail, matchFailFn : unit -> unit, loopAddr) : unit = let (* Save the stack pointer value here. We may want to reset the stack. *) val oldsp = !realstackptr; val U : unit = case pt of MatchFail => (* Leave stack adjustments until later *) matchFailFn () | AltMatch (exp1, exp2) => (* A bit like Cond *) let val failLabs = ref ([] : labels list); fun newMatchFailFn () = let (* Cut back the stack and branch *) val adjustment = !realstackptr - oldsp; val U : unit = if adjustment < 0 then raise InternalError ("gencde (AltMatch): bad adjustment " ^ Int.toString adjustment) else if !exited orelse adjustment = 0 then () else resetStack (adjustment, false, cvec); val U : unit = realstackptr := oldsp; val thisFailure : labels = putBranchInstruction (jump, cvec); val U : unit = exited := true in failLabs := thisFailure :: !failLabs end; val U : unit = gencde (exp1, whereto, tailKind, newMatchFailFn, loopAddr); (* Get rid of the result from the stack. If there is a result then exp2 will push it. *) val U : unit = case whereto of ToStack => decsp () | NoResult => (); val exp1Exited : bool = !exited; (* If exp1 succeeded, we skip exp2 *) val suceedLab : labels = if exp1Exited then noJump else putBranchInstruction (jump, cvec); val U : unit = if !realstackptr = oldsp then () else raise InternalError "gencde: bad stack value" (* If exp1 failed, we come here (with NO result). *) val U : unit = exited := false; (* Don't try to be too clever *) val U : unit = apply (fn (lab : labels) => fixup (lab, cvec)) (!failLabs); (* Compile exp2 using the OLD matchFailFn *) val U : unit = gencde (exp2, whereto, tailKind, matchFailFn, loopAddr); (* If exp1 succeeded, we merge back in here. *) val U : unit = fixup (suceedLab, cvec); in exited := (!exited andalso exp1Exited) end | Eval evl => genEval (evl, tailKind, matchFailFn) (* Declarations are not necessarily nested in Newenv *) | Declar {value, addr, ...} => (* Put the entry for this declaration in the table. *) (case value of Lambda (lam as {makeClosure = false, name, ...}) => let val newCode : code = codeCreate (true, name, parameters); val U : unit = STRETCHARRAY.update (decVec, addr, ProcConst newCode); in genSlProc (lam, newCode) end | _ => (* Other declaration - to the stack. *) let val U : unit = gencde (value, ToStack, NotEnd, matchFailFn, loopAddr); in STRETCHARRAY.update (decVec, addr, StackAddr(!realstackptr)) end ) (* MutualDecs should nested in Newenv??? *) | MutualDecs _ => raise InternalError "gencde: MutualDecs only allowed inside Newenv" | Extract ext => (* This may just be being used to discard a value which isn't used on this branch. *) if whereto = NoResult then () else locaddr ext | Indirect {base, offset} => let val U : unit = gencde (base, ToStack, NotEnd, matchFailFn, loopAddr); in genIndirect (offset, cvec) end | Lambda lam => genProc (lam, false, fn () => (), matchFailFn) | Constnt w => let val U : unit = pushConst (w, cvec); in incsp () end | Cond (testPart, thenPart, elsePart) => genCond (testPart, thenPart, elsePart, whereto, tailKind, matchFailFn, loopAddr) | Newenv vl => let (* We can't just call "gencde" on all the elements of the list, because declarations must persist as long as they're in scope. We treat Declar and MutualDecs specially here, but just naively call gencde for expressions. SPF 7/1/97 *) (* Processes a list of entries. *) fun codeList [] = () | codeList (valu :: valus) = let val U : unit = case valu of MutualDecs dl => genMutualDecs (dl, matchFailFn) | Declar _ => gencde (valu, ToStack, NotEnd, matchFailFn, loopAddr) | _ => (* If this is the last one it is the result of the block so it is generated to the stack if the block needs a result. *) case valus of [] => gencde (valu, whereto, tailKind, matchFailFn, loopAddr) | _ => gencde (valu, NoResult, NotEnd, matchFailFn, loopAddr) in (* process the tail *) codeList valus end in codeList vl end | BeginLoop (body, args) => (* Execute the body which will contain at least one Loop instruction. There will also be path(s) which don't contain Loops and these will drop through. *) let (* Evaluate each of the arguments, pushing the result onto the stack. *) fun genLoopArg (Declar {addr, value, ...}) = ( gencde (value, ToStack, NotEnd, matchFailFn, loopAddr); STRETCHARRAY.update (decVec, addr, StackAddr (!realstackptr)); !realstackptr (* Return the posn on the stack. *) ) | genLoopArg _ = raise InternalError "genLoopArg: not a declaration" val argIndexList = map genLoopArg args; val startSp = ! realstackptr; (* Remember the current top of stack. *) val startLoop : addrs = ic cvec; (* Start of loop *) in (* Process the body, passing the jump-back address down for the Loop instruction(s). *) gencde (body, whereto, tailKind, matchFailFn, SOME(startLoop, startSp, argIndexList)) (* Leave the arguments on the stack. They can be cleared later if needed. *) end | Loop argList => (* Jump back to the enclosing BeginLoop. *) let val (startLoop, startSp, argIndexList) = case loopAddr of SOME l => l | NONE => raise InternalError "No BeginLoop for Loop instr" (* Evaluate the arguments. First push them to the stack because evaluating an argument may depend on the current value of others. Only when we've evaluated all of them can we overwrite the original argument positions. *) fun loadArgs ([], []) = !realstackptr - startSp (* The offset of all the args. *) | loadArgs (arg:: argList, argOffset :: argIndexList) = let (* Evaluate all the arguments. *) val U: unit = gencde (arg, ToStack, NotEnd, matchFailFn, NONE); val argOffset = loadArgs(argList, argIndexList); in genSetStackVal(argOffset, cvec); (* Copy the arg over. *) decsp(); (* The argument has now been popped. *) argOffset end | loadArgs _ = raise InternalError "loadArgs: Mismatched arguments"; val U: int = loadArgs(argList, argIndexList) in if !realstackptr <> startSp then resetStack (!realstackptr - startSp, false, cvec) (* Remove any local variables. *) else (); (* Jump back to the start of the loop. *) jumpback (startLoop, cvec) end | Raise exp => let val U : unit = gencde (exp, ToStack, NotEnd, matchFailFn, loopAddr); val U : unit = genRaiseEx cvec; in exited := true end | Handle {exp, taglist, handler} => let type handler = labels; (* Save old handler *) val U : unit = genPushHandler cvec; val U : unit = incsp (); fun genTag (tag : codetree) : handler = let (* Push address of new handler. *) val handlerLab : labels = putBranchInstruction (setHandler, cvec); val U : unit = incsp (); (* Push the exception to be caught. *) val U : unit = gencde (tag, ToStack, NotEnd, matchFailFn, loopAddr) in handlerLab end; (* Generate the list of tags and handler addreses. We reverse the taglist so the tags that are first in the list are put on the stack last, so they are checked first. We reverse the result so that they get fixed up in stack order. (I don't think this is important, but I'm not sure.) Did you get all that? SPF 26/11/96 *) val handlerList : handler list = rev (map genTag (rev taglist)); (* Code generate the body; "NotEnd" because we have to come back to remove the handler; "ToStack" because delHandler needs a result to carry down. *) val U : unit = gencde (exp, ToStack, NotEnd, matchFailFn, loopAddr); (* Now get out of the handler and restore the old one. *) val skipHandler : labels = putBranchInstruction (delHandler, cvec); (* Now process the handler itself. First we have to reset the stack. Note that we have to use "ToStack" again to be consistent with the stack-handling in the body-part. If we actually wanted "NoResult", the stack adjustment code at the end of gencde will take care of this. This means that I don't want to do any clever "end-of-function" optimisation either. SPF 6/1/97 The exception handler must be aligned to an odd word boundary so that the garbage collector does not get confused when it finds the address on the stack. Values on full-word boundaries always point to the start of objects whereas values off full-word boundaries (either return addresses or catch-phrases) point into code-segments. *) val U : unit = realstackptr := oldsp; val U : unit = exited := false; val U : unit = alignOffWord (cvec, 0); val U : unit = apply (fn handlerLab => fixup (handlerLab, cvec)) handlerList; (* If we were executing machine code we must re-enter the interpreter. *) val U : unit = genEnterIntCatch cvec; val U : unit = gencde (handler, ToStack, NotEnd, matchFailFn, loopAddr); (* Finally fix-up the jump around the handler *) val U : unit = fixup (skipHandler, cvec); in exited := false end | Ldexc => let (* Get the name of the exception. *) val U : unit = genLdexc cvec in incsp () end | Case (cas as {cases, test, default, min, max}) => let val numberOfCases = List.length cases; in if 3 * numberOfCases < max - min + 5 then genSparseCase(cas, whereto, tailKind, matchFailFn, loopAddr) else genDenseCase (cas, whereto, tailKind, matchFailFn, loopAddr) end | Recconstr recList => let (* Move the fields into the vector. *) fun loadItems [] = () | loadItems (v :: vs) = let val U : unit = gencde (v, ToStack, NotEnd, matchFailFn, loopAddr); in loadItems vs end; val size : int = List.length recList; val U : unit = loadItems recList; val U : unit = genTuple (size, cvec); in realstackptr := !realstackptr - (size - 1) end (* Containers are supposed to be implemented on the stack for efficiency. Unfortunately they cause problems in this code because we assume that if we generate a value to the stack it only occupies a single word. Rather than change this code and risk breaking something I'm simply generating them as mutable tuples on the heap. *) | Container size => (* Reserve a number of words on the stack for use as a tuple on the stack. The result is the address of this space. *) ( genContainer(size, cvec); (* Push the address of this container. *) incsp() (* Pushes a single word. *) ) | SetContainer{container, tuple, size} => (* Copy the contents of a tuple into a container. If the tuple is a Recconstr instruction we can avoid generating the tuple and then unpacking it and simply copy the fields that make up the tuple directly into the container. *) ( (* Load the address of the container. *) gencde (container, ToStack, NotEnd, matchFailFn, loopAddr); case tuple of Recconstr cl => (* Simply set the container from the values. *) let fun setValue(v, offset) = ( gencde (v, ToStack, NotEnd, matchFailFn, loopAddr); (* Move the entry into the container. This instruction pops the value to be moved but not the destination. *) genMoveToVec(offset, cvec); decsp(); offset + 1 ) in List.foldl setValue 0 cl; () (* The container address is still on the stack. *) end | _ => ( (* General case. *) gencde (tuple, ToStack, NotEnd, matchFailFn, loopAddr); genSetContainer(size, cvec); decsp(); decsp() ) ) | TupleFromContainer(container, size) => (* Create a tuple from the contents of a container. *) ( (* TODO: This returns a MUTABLE record which is different from the other code-generators. That could cause problems if we expect an immutable object. *) gencde(container, ToStack, NotEnd, matchFailFn, loopAddr) ) | CodeNil => raise InternalError "gencde: can't code-generate CodeNil value" | Global _ => raise InternalError "gencde: can't code-generate Global value"; in (* body of gencde *) (* This ensures that there is precisely one item on the stack if whereto = ToStack and no items if whereto = NoResult. There are two points to note carefully here: (1) Negative stack adjustments are legal if we have exited. This is because matchFailFn can cut the stack back too far for its immediately enclosing expression. This is harmless because the code actually exits that expression. (2) A stack adjustment of ~1 is legal if we're generating a declaration in "ToStack" mode, because not all declarations actually generate the dummy value that we expect. This used to be handled in resetStack itself, but it's more transparent to do it here. (In addition, there was a bug in resetStack - it accumulated the stack resets, but didn't correctly accumulate these "~1" dummy value pushes.) It's all much better now. SPF 9/1/97 *) case whereto of ToStack => let val newsp = oldsp + 1; val adjustment = !realstackptr - newsp; val U : unit = if !exited orelse adjustment = 0 then () else if adjustment < ~1 then raise InternalError ("gencde: bad adjustment " ^ Int.toString adjustment) (* Hack for declarations that should push values, but don't *) else if adjustment = ~1 then pushConst (DummyValue, cvec) else resetStack (adjustment, true, cvec); in realstackptr := newsp end | NoResult => let val adjustment = !realstackptr - oldsp; val U : unit = if !exited orelse adjustment = 0 then () else if adjustment < 0 then raise InternalError ("gencde: bad adjustment " ^ Int.toString adjustment) else resetStack (adjustment, false, cvec); in realstackptr := oldsp end end (* gencde *) (* doNext is only used for mutually recursive procedures where a procedure may not be able to fill in its closure if it does not have all the remaining declarations. *) and genProc (lam : lambdaForm, mutualDecs: bool, doNext: unit -> unit, matchFailFn : unit -> unit) : unit = if #makeClosure lam = false (* static link form *) then raise InternalError "static link not allowed here" else if (case #closure lam of [] => true | _ => false) then let val newCode : code = codeCreate(false, #name lam, parameters); (* The only global references are recursive ones (?) *) fun loadRecLink (addr : int, level : int) : slValue = Recursive newCode; (* Code-gen procedure. No non-local references. *) val res : address = codegen (#body lam, newCode, loadRecLink, #numArgs lam, parameters); val U : unit = pushConst(toMachineWord res, cvec); val U : unit = incsp(); in if mutualDecs then doNext () else () end else let (* Full closure required. *) (* If there is a closure we must fetch all non-local references from it. *) (* Loads the value from the closure. *) fun loadSl (addr : int, level : int) : slValue = if addr = 0 then (* recursive - return address of closure. *) Address (~1, level - 1) else (* Return an entry in the closure. *) Address (addr, level); val newCode : code = codeCreate (true, #name lam, parameters); (* Code-gen procedure. *) val res : address = codegen (#body lam, newCode, loadSl, #numArgs lam, parameters); val sizeOfClosure = List.length (#closure lam) + 1; in if mutualDecs then let (* Have to make the closure now and fill it in later. *) val U : unit = genGetStore (sizeOfClosure, cvec); val U : unit = incsp (); (* Put code address into closure *) val U : unit = pushConst(toMachineWord res, cvec); val U : unit = genMoveToVec(0, cvec); val entryAddr : int = !realstackptr; val U : unit = doNext (); (* Any mutually recursive procedures. *) (* Push the address of the vector - If we have processed other closures the vector will no longer be on the top of the stack. *) val U : unit = pushStackValue (~ entryAddr, 0); (* Load items for the closure. *) fun loadItems ([], _) = () | loadItems (v :: vs, addr : int) = let (* Generate an item and move it into the vector *) val U : unit = gencde (v, ToStack, NotEnd, matchFailed, NONE); val U : unit = genMoveToVec(addr, cvec); val U : unit = decsp (); in loadItems (vs, addr + 1) end; val U : unit = loadItems (#closure lam, 1); val U : unit = genLock cvec; (* Lock it. *) (* Remove the extra reference. *) val U : unit = resetStack (1, false, cvec); in realstackptr := !realstackptr - 1 end else let (* Put it on the stack. *) val U : unit = pushConst (toMachineWord res, cvec); val U : unit = incsp (); val U : unit = apply (fn (pt: codetree) => gencde (pt, ToStack, NotEnd, matchFailFn, NONE)) (#closure lam); val U : unit = genTuple (sizeOfClosure, cvec); in realstackptr := !realstackptr - (sizeOfClosure - 1) end end (* Generate a procedure to be called with a static link. *) and genSlProc (lam: lambdaForm, newCode: code) : unit = let (* If a procedure can be called by static link references then non-locals can be loaded by following the static chain. The offset is the entry in the (pseudo-)closure as with a procedure that requires a closure, but these can be translated into real stack offsets. *) val closureList = #closure lam; (* Finds the nth. item in the closure and returns the entry *) fun findClosure ((Extract ext) :: _, 1) : loadForm = ext | findClosure (_ :: t, n) = findClosure (t, n - 1) | findClosure (_, _) = raise InternalError "findClosure: bad Closure"; (* Get static link level and offset. *) fun loadSl (prevloc : int, level: int) : slValue = if prevloc = 0 (* recursive call *) then StaticLink (newCode, level) else let val closureEntry = findClosure (closureList, prevloc); val locn = #addr closureEntry; (* Get new address *) in if #fpRel closureEntry then (* This level *) if locn < 0 (* Address *) then Address (~ locn, level) else (* Local - is it a procedure? *) case STRETCHARRAY.sub (decVec, locn) of StackAddr n => Address (~ n, level) | ProcConst c => StaticLink (c, level) | Empty => raise InternalError "loadSl: missing decVec entry" else (* Try the next level *) loadStaticLink (locn, level + 1) end; (* loadSl *) (* Now code-generate the procedure. We can throw away the result because it will be assigned into the value we have just returned. *) val U : address = codegen (#body lam, newCode, loadSl, #numArgs lam, parameters) in () end (* genSlProc*) and genCond (first: codetree, second: codetree, third: codetree, whereto: whereto, tailKind: tail, matchFailFn : unit -> unit, loopAddr) : unit = let val U : unit = gencde (first, ToStack, NotEnd, matchFailFn, loopAddr); val toElse : labels = putBranchInstruction(jumpFalse, cvec); val U : unit = decsp(); in case third of CodeNil => (* No else-part *) let (* If there is no else-part then the then-part must return a value of type void for it to type-check. To save having to pop this value to get the stack level right we generate it with ``noresult'' and the stack resetting mechanism will ensure that a result is pushed if it is needed. *) val U : unit = gencde (second, NoResult, tailKind, matchFailFn, loopAddr); val U : unit = fixup (toElse, cvec) (* Skipped the then-part. *) in exited := false (* If the test failed we won't have exited. *) end | _ => let val U : unit = gencde (second, whereto, tailKind, matchFailFn, loopAddr); (* Get rid of the result from the stack. If there is a result then the ``else-part'' will push it. *) val U : unit = case whereto of ToStack => decsp () | NoResult => (); val thenExited : bool = !exited; val toExit : labels = if thenExited then noJump else putBranchInstruction (jump, cvec); (* start of "else part" *) val U : unit = fixup (toElse, cvec); val U : unit = exited := false; val U : unit = gencde (third, whereto, tailKind, matchFailFn, loopAddr); val elseExited : bool= !exited; val U : unit = fixup (toExit, cvec); in exited := (thenExited andalso elseExited) (* Only exited if both sides did. *) end end (* genCond *) and genEval (eval : evalForm, tailKind : tail, matchFailFn : unit -> unit) : unit = let val argList : codetree list = #argList eval; val argsToPass : int = List.length argList; (* Load arguments *) fun loadArgs [] = () | loadArgs (v :: vs) = let (* Push each expression onto the stack. *) val U : unit = gencde(v, ToStack, NotEnd, matchFailFn, NONE); in loadArgs vs end; (* Called after the args and the closure to call have been pushed onto the stack. *) fun callClosure () : unit = case tailKind of NotEnd => (* Normal call. *) genCallClosure cvec | EndOfProc => (* Tail recursive call. *) let (* Get the return address onto the top of the stack. *) val U : unit = pushStackValue (0, 0); (* Slide the return address, closure and args over the old closure, return address and args, and reset the stack. Then jump to the closure. *) val U : unit = genTailCall(argsToPass + 2, !realstackptr - 1 + (numOfArgs - argsToPass), cvec); (* It's "-1" not "-2", because we didn't bump the realstackptr when we pushed the return address. SPF 3/1/97 *) in exited := true end; val U : unit = case #function eval of (* The procedure is being loaded from the stack or closure so it may be a static-link procedure. *) Extract ext => let (* Since the procedure is on the stack there can be no side-effects in loading it. Can therefore load the arguments now. *) val U : unit = loadArgs argList; val staticLinkValue = if #fpRel ext then let (* Local *) val addr : int = #addr ext; in if addr < 0 (* Address *) then Address (~ addr, 0) else (* Local - is it a procedure? *) case STRETCHARRAY.sub (decVec, addr) of StackAddr n => Address (~ n, 0) | ProcConst c => StaticLink (c, 0) | Empty => raise InternalError "staticLinkValue: missing decVec entry" end else (* Non-local or recursive. *) loadStaticLink (#addr ext, 1); in case staticLinkValue of Address (addr, level) => let val U : unit = pushStackValue (addr, level); in callClosure () end (* recursive reference to a procedure - not static link. *) | Recursive code => let val U : unit = genRecRef (code, cvec); val U : unit = incsp(); in callClosure () end (* Static link *) | StaticLink (code, level) => let val U : unit = genCallSl(!realstackptr, level, code, cvec); in incsp () end end (* Extract *) | _ => (* The procedure is not being found by simply loading a value from the stack or the closure. *) let (* Must load the closure and call. *) (* Have to guarantee that the expression to return the procedure is evaluated before the arguments. *) (* Returns true if evaluating it later is safe. *) fun safeToLeave (node: codetree) : bool = case node of Constnt _ => true | Lambda _ => true | Indirect {base, ...} => (* Safe only if the expression (always a type) being indirected is. This is put in because calling procedures in a type is a common occurence and should be made reasonably efficient. *) safeToLeave base | _ => false val U : unit = if (case argList of [] => true | _ => safeToLeave (#function eval)) then let (* Can load the args first. *) val U : unit = loadArgs argList; in gencde (#function eval, ToStack, NotEnd, matchFailFn, NONE) end else let (* The expression for the procedure is too complicated to risk leaving. It might have a side-effect and we must ensure that any side-effects it has are done before the arguments are loaded. *) val U : unit = gencde(#function eval, ToStack, NotEnd, matchFailFn, NONE); val U : unit = loadArgs(argList); (* Load the procedure again. *) val U : unit = genLocal(argsToPass, cvec); in incsp () end in (* Call the procedure. *) callClosure () end; (* Not Extract *) (* Make sure we interpret when we return from the call *) val U : unit = genEnterIntCall (cvec, argsToPass); in (* body of genEval *) realstackptr := !realstackptr - argsToPass (* Args popped by caller. *) end (* This is used for cases which are not sparse i.e. the values occupy a narrow enough range to make indexing efficient. *) and genDenseCase (pt: caseForm, whereto: whereto, tailKind: tail, matchFailFn : unit -> unit, loopAddr) : unit = let (* If there is no default case the results are all void for the type-checking to work so we don't generate them. *) val whereto = case #default pt of CodeNil => NoResult | _ => whereto; val U : unit = gencde (#test pt, ToStack, NotEnd, matchFailFn, loopAddr); (* The exit jumps are chained together. *) val lastEndJump : labels ref = ref noJump; val limit : int = #max pt - #min pt; val U : unit = if #min pt = 0 then () else let (* Subtract lower limit. *) val U : unit = pushConst(toMachineWord (#min pt), cvec); val U : unit = pushConst(ioOp POLY_SYS_aminus, cvec); val U : unit = genCallClosure cvec; in genEnterIntCall (cvec, 2) (* added SPF 28/6/95 *) end; val U : unit = genCase (limit, cvec); val U : unit = decsp (); (* Addresses are relative to the first entry in the vector. *) val startVec : addrs = ic cvec; (* Set each address in the vector to point to the default - they will be overwritten by the actual address later. *) val defaultAddr : int = (limit + 1) * 2; val U : unit = forLoop (fn (_ : int) => genWord (defaultAddr, cvec)) 0 limit; (* The default case, if any, follows the case statement. *) val U : unit = case #default pt of CodeNil => () | c => gencde (c, whereto, tailKind, matchFailFn, loopAddr); val U : unit = exited := false; (* Now generate the code for each of the cases. *) fun genEachCase ([] : (codetree * int list) list) : unit = () | genEachCase ((body : codetree, matches : int list) :: otherCases) : unit = let (* First exit from the previous case or the default if this is the first. *) val U : unit = lastEndJump := linkLabels (!lastEndJump, if !exited then noJump else putBranchInstruction(jump, cvec), cvec); (* Remove the result - the last case will leave it. *) val U : unit = case whereto of ToStack => decsp () | NoResult => (); (* Now put the address of this code into the table if an entry has not already been set. If it has the new entry should be ignored. It is NOT an error (just redundant). *) fun genEachMatch (i: int) = let val entryAddr : addrs = addrPlus(startVec, (i - #min pt) * 2); in if getBytes(2, entryAddr, cvec) = defaultAddr then putBytes(addrMinus(ic cvec, startVec), 2, entryAddr, cvec) else () end val U : unit = apply genEachMatch matches; (* Generate code for this case *) val U : unit = exited := false; val U : unit = gencde (body, whereto, tailKind, matchFailFn, loopAddr); in genEachCase otherCases end; (* genEachCase *) val U : unit = genEachCase (#cases pt); (* Finally go down the list of exit labels pointing them to here. *) val U : unit = fixup (!lastEndJump, cvec); in exited := false end (* genDenseCase *) (* Generate a sparse case. *) and genSparseCase (pt : caseForm, whereto : whereto, tailKind : tail, matchFailFn : unit -> unit, loopAddr) : unit = let (* Have already dealt with cases where there is only one case. *) (* If there is no default case the results are all void for the type-checking to work so we don't generate them. *) val whereto = case #default pt of CodeNil => NoResult | _ => whereto; (* The exit jumps are chained together. *) val lastEndJump = ref noJump; fun caseCode ([], othersExited : bool) : bool = othersExited | caseCode ((body : codetree, matches : int list) :: otherCases, othersExited : bool) : bool = let fun putInCases ([]: int list) : labels = raise InternalError "putInCases: no labels" | putInCases (c :: cs) : labels = let val lastOne : bool = case cs of [] => true | _ => false; (* Is this really safe? What about multiple side-effects? SPF *) val U : unit = gencde (#test pt, ToStack, NotEnd, matchFailFn, loopAddr); (* Push the value to be compared. *) val U : unit = pushConst(toMachineWord c, cvec); (* Compare them. If this is the last one compare for equality and so skip to the next case if it is not equal, if there are more compare for inequality and skip the other tests if it matches. *) val U : unit = pushConst (ioOp (if lastOne then POLY_SYS_int_eq else POLY_SYS_int_neq), cvec); val U : unit = genCallClosure cvec; val U : unit = genEnterIntCall(cvec, 2); (* added SPF 28/6/95 *) val lab : labels = putBranchInstruction (jumpFalse, cvec); val U : unit = decsp (); (* Remove result of test. *) in (* body of putInCases *) if lastOne then lab (* last one - skip if value does not match. *) else let (* More than one. If this one matches skip the other tests. *) (* Drop through to other tests if it does not match. *) val rLab : labels = putInCases cs; val U : unit = fixup (lab, cvec); in rLab end end; (* putInCases *) val lab : labels = putInCases matches; (* Now the expression. *) val U : unit = gencde(body, whereto, tailKind, matchFailFn, loopAddr); val thisHasExited : bool = !exited; (* Remove the result - the default case will leave it. *) val U : unit = case whereto of ToStack => decsp () | NoResult => (); val U : unit = lastEndJump := linkLabels (!lastEndJump, if thisHasExited then noJump else putBranchInstruction(jump, cvec), cvec); (* Now the next case. *) val U : unit = fixup (lab, cvec); val U : unit = exited := false; in caseCode (otherCases, othersExited andalso thisHasExited) end; (* caseCode *) (* First the cases. *) val casesExited : bool = caseCode (#cases pt, true); val U : unit = exited := false; val U : unit = case #default pt of CodeNil => () | c => (* put in the default *) let val U : unit = gencde(#default pt, whereto, tailKind, matchFailFn, loopAddr); in exited := (!exited andalso casesExited) end; in (* Finally go down the list of exit labels pointing them to here. *) fixup (!lastEndJump, cvec) end (* Mutually recursive declarations. May be either procedures, constants or reccons (from type constructors). Recurse down the list pushing the addresses of the closure vectors, then unwind the recursion and fill them in. *) and genMutualDecs ([], matchFailFn) : unit = () | genMutualDecs (Declar decl :: otherDecs, matchFailFn) : unit = ( case #value decl of Lambda lam => if not (#makeClosure lam) then let (* Static link. *) (* Create a code-segment and put it in the table in case of mutually recursive references. *) val newCode : code = codeCreate(true, #name lam, parameters); val U : unit = STRETCHARRAY.update (decVec, #addr decl, ProcConst newCode); (* Deal with any other possible references. *) val U : unit = genMutualDecs (otherDecs, matchFailFn); in (* Can now process this procedure since we have made an entry in the table for everything it could refer to. *) genSlProc (lam, newCode) end else let (* Closure. *) fun doRest () : unit = let val U : unit = STRETCHARRAY.update (decVec, #addr decl, StackAddr (! realstackptr)); in (* Now time to do the other closures. *) genMutualDecs (otherDecs, matchFailFn) end in genProc (lam, true, doRest, matchFailFn) end | dec => (* constants or reccons.*) let val U : unit = gencde (dec, ToStack, NotEnd, matchFailFn, NONE); val U : unit = STRETCHARRAY.update (decVec, #addr decl, StackAddr (!realstackptr)); in genMutualDecs (otherDecs, matchFailFn) end ) | genMutualDecs _ : unit = raise InternalError "genMutualDecs: mutual declaration list contains non-declaration"; (* Closure procedures must start with ``enterIntProc''. This is actually a break-point instruction in the machine-code instruction set to make sure that the code is interpreted. It is a no-op if we are already interpreting. *) val U : unit = genEnterIntProc (cvec, numOfArgs); (* SPF 23/6/95 *) (* Generate the procedure. *) (* Assume we always want a result. There is otherwise a problem if the called routine returns a result of type void (i.e. no result) but the caller wants a result (e.g. the identity function). *) val U : unit = gencde (pt, ToStack, EndOfProc, matchFailed, NONE); val U : unit = if !exited then () else genReturn (numOfArgs, cvec); in (* body of codegen *) (* Having code-generated the body of the procedure, it is copied into a new data segment. *) copyCode cvec end (* codegen *); fun gencode (pt: codetree, parameters) : unit -> machineWord = case pt of Lambda lam => (* We are compiling a procedure. *) let (* It is not essential to treat this specially, but it saves generating a piece of code whose only function is to return the address of the procedure. *) (* make the code buffer for the new procedure. *) val newCode : code = codeCreate (false, #name lam, parameters); (* The only global references are recursive ones (?) *) fun loadRecLink (level : int, addr : int) : slValue = Recursive newCode; (* This procedure must have no non-local references. *) val closureAddr : address = codegen (#body lam, newCode, loadRecLink, #numArgs lam, parameters); val res : machineWord = toMachineWord closureAddr; in (* Result is a procedure which returns the address of the procedure. *) fn () => res end | _ => let (* Compile a top-level expression. *) val newCode : code = codeCreate(false, "", parameters); (* There ane *no* global references at all *) fun loadRecLink (level : int, addr : int) : slValue = raise InternalError "top level reached"; val closureAddr : address = codegen (pt, newCode, loadRecLink, 0, parameters) in (* Result is a procedure to execute the code. *) fn () => call (closureAddr, toMachineWord ()) end; (* gencode *) end (* GCODE functor body *) end; (* structure-level let *) polyml.5.2.1/mlsource/MLCompiler/CodeTree/PPCCODECONS.ML0000644000175000017500000051374611003075354021332 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* This module contains the code vector and operations to insert code into it. Each procedure is compiled into a separate segment. Initially it is compiled into a fixed size segment, and then copied into a segment of the correct size at the end. This module contains all the definitions of the Sparc opcodes and registers. It uses "codeseg" to create and operate on the segment itself. *) (* Linkage conventions: r0 scratch register (unsaved?) r1 - don't touch - dedicated C register (stack - like SPARC %o6) r2 - don't touch - dedicated C register (TOC) r3 used for the first argument to a function, and for the result. r4-r6 used for the next 3 args, any others being passed on the stack. r24 is the closure pointer or static link pointer (like SPARC %o5) r25 (rr) is used as the compiler-visible link register (like SPARC %o7) r26 is an unsaved temporary r27 (rsp) is the ML stack pointer, r28 (rsl) is the stack limit, r29 (rhp) is the heap pointer, r30 (rhl) is the heap limit, r31 (rhr) points to the top exception handler. r13 points to the "MemRegisters" structure. r7-r10 and r14-r22 (15 registers) are available as general work registers, as are r3-r6 and r23-r25, when they are not fulfilling their specialised duties. That's a total of 21 general-purpose registers (as opposed to 17 on the SPARC). r11, r12 are used as code-generator visible untagged registers. r26 is used as a compiler-invisible RTS scratch register for handling traps. LR is a semi-volatile register used to cache the return address. Executing a trap can copy rr into LR, even if it wasn't there before. Furthermore, it can change the tagged status of LR - it may be tagged after the trap, even if it was untagged before. What we do guarantee is that if LR cached rr before the trap, then it caches it afterwards (modulo possible tag bit discrepancies). Executing any function call (including an RTS call) invalidates both rr and LR. CTR is a volatile register - we use it to to return from traps and normal RTS calls, and it is also used to implement tail-calls. Note: the RS/6000 follows a callee-saves convention for r13-r31 inclusive, so we'll have to be careful to save these registers when we first enter ML. We can remove this later if it appears to be unnecessary. Function Prologues ------------------ Functions now have up to 3 entry points: (1) L1/L2 Standard entry point - return address in LR (2) Self-call entry point - doesn't change regCode (3) Self-tail-call entry point - doesn't change regReturn or regCode At all entry points, LR must contain the return address. At entry point L4, regReturn must contain it too. L1, L2: (* RetAddrInLR *) This previously set regCode to point to the constants area L3: (* RetAddrInLR *) mflr regReturn ori regReturn,regReturn,2 L4: (* Cached *) The code would be slightly longer if the argument to the addi won't fit into 16 bits - in that case we need to use a temporary register to construct the offset, which costs us an extra pair of instructions. N.B. We must use "ori", not "addi" to adjust regReturn. This is because we don't know whether or not the value in LR is already tagged. It will be untagged if it was put there by a "blrl" (or similar) call instruction, but it will be already tagged if it was put there by a "mtlr returnReg" tail-call instruction. Calling a Function ------------------ We cache "LR contains a valid return address". We also cache "regReturn contains a valid return address". Call: mtlr regCode blrl (* Clear LR/RR caches *) Self-call: bl L3 (* Clear LR/RR caches *) Tail-call: mtctr regCode (* Only if LR doesn't cache the return address *) mtlr returnReg bctr (* NOTREACHED *) Self-tail-call: (* Only if returnReg <> regReturn *) mr regReturn, returnReg (* Only if LR doesn't cache the return address *) mtlr returnReg b L4 (* NOTREACHED *) Return: (* Only if LR doesn't cache the return address *) mtlr returnReg blr (* NOTREACHED *) Write-to-regReturn: (* Clear RR cache *) On-branching: (* Clear LR/RR cache if any branch is uncached *) On-trap: (* Clear LR cache state, unless RR cache is set *) Note: we *don't* have to clear the cache for the stack-check trap in the prelude because the RTS trap-handler specifically copies regReturn into LR, which (at that point) is the correct action i.e. the both LR and RR caches are (implicitly) set at that point. Note: it's not completely clear that this caching version is a win (the cost is the extra "mtlr returnReg" instruction in an uncached (self-)tail-call that's needed to make the initial state "Cached".) It seems to give a slight overall speed-up though. *) functor PPCCODECONS ( (*****************************************************************************) (* DEBUG *) (*****************************************************************************) structure DEBUG : sig val assemblyCodeTag : bool Universal.tag val compilerOutputTag: (string->unit) Universal.tag val getParameter : 'a Universal.tag -> Universal.universal list -> 'a end; (*****************************************************************************) (* MISC *) (*****************************************************************************) structure MISC : sig exception InternalError of string end ) : (*****************************************************************************) (* CODECONS export signature *) (*****************************************************************************) sig type machineWord; type short; type code; type reg; (* Machine registers *) type address; val regNone: reg; val regResult: reg; val regClosure: reg; val regCode: reg option; val regStackPtr: reg; val regHandler: reg; val regReturn: reg; val regs: int; (* No of registers. *) val argRegs: int; (* No of args in registers. *) val regN: int -> reg; val nReg: reg -> int; val argReg: int -> reg; val regEq: reg * reg -> bool; val regNeq: reg * reg -> bool; val regRepr: reg -> string; type addrs val codeCreate: bool * string * Universal.universal list -> code; (* makes the initial segment. *) (* Operations. *) type instrs; val instrMove: instrs; val instrAddA: instrs; val instrSubA: instrs; val instrRevSubA: instrs; val instrMulA: instrs; val instrAddW: instrs; val instrSubW: instrs; val instrRevSubW: instrs; val instrMulW: instrs; val instrDivW: instrs; val instrModW: instrs; val instrOrW: instrs; val instrAndW: instrs; val instrXorW: instrs; val instrLoad: instrs; val instrLoadB: instrs; val instrVeclen: instrs; val instrVecflags: instrs; val instrPush: instrs; val instrUpshiftW: instrs; val instrDownshiftW: instrs; val instrDownshiftArithW: instrs; val instrGetFirstLong: instrs; val instrStringLength: instrs; val instrSetStringLength: instrs; val instrBad: instrs; (* Can the we use the same register as the source and destination of an instructions? (it would be more flexible to make this a function of type "instrs -> bool", but a simple flag will suffice for now. SPF 17/1/97 *) val canShareRegs : bool; (* Enquire about operations. *) val instrIsRR: instrs -> bool; (* Is the general form implemented? *) val instrIsRI: instrs * machineWord -> bool; (* Is the immediate value ok? *) (* Code generate operations. *) val genRR: instrs * reg * reg * reg * code -> unit; val genRI: instrs * reg * machineWord * reg * code -> unit; type tests; val testNeqW: tests; val testEqW: tests; val testGeqW: tests; val testGtW: tests; val testLeqW: tests; val testLtW: tests; val testNeqA: tests; val testEqA: tests; val testGeqA: tests; val testGtA: tests; val testLeqA: tests; val testLtA: tests; val Short: tests; val Long: tests; type labels; (* The source of a jump. *) val noJump: labels; (* Compare and branch for fixed and arbitrary precision. *) val isCompRR: tests -> bool; val isCompRI: tests * machineWord -> bool; val compareAndBranchRR: reg * reg * tests * code -> labels; val compareAndBranchRI: reg * machineWord * tests * code -> labels; datatype storeWidth = STORE_WORD | STORE_BYTE val genLoad: int * reg * reg * code -> unit; val isIndexedStore: storeWidth -> bool val genStore: reg * int * reg * storeWidth * reg * code -> unit; val isStoreI: machineWord * storeWidth * bool -> bool; val genStoreI: machineWord * int * reg * storeWidth * reg * code -> unit; val inlineAssignments: bool val genPush: reg * code -> unit; val genLoadPush: int * reg * code -> unit; val preferLoadPush: bool; val genLoadCoderef: code * reg * code -> unit; val allocStore: int * Word8.word * reg * code -> unit; val setFlag: reg * code * Word8.word -> unit; val completeSegment: code -> unit; datatype callKinds = Recursive | ConstantFun of machineWord * bool | CodeFun of code | FullCall val callFunction: callKinds * code -> unit; val jumpToFunction: callKinds * reg * code -> unit; val returnFromFunction: reg * int * code -> unit; val raiseException: code -> unit; val genStackOffset: reg * int * code -> unit; val copyCode: code * int * reg list -> address; val unconditionalBranch: code -> labels; type handlerLab; val loadHandlerAddress: reg * code -> handlerLab; val fixupHandler: handlerLab * code -> unit; val fixup: labels * code -> unit; (* Fix up a jump. *) (* ic - Address for the next instruction in the segment. *) val ic: code -> addrs; val jumpback: addrs * bool * code -> unit; (* Backwards jump. *) val resetStack: int * code -> unit; (* Set a pending reset *) val procName: code -> string; (* Name of the procedure. *) type cases type jumpTableAddrs val constrCases : int * addrs -> cases; val useIndexedCase: int * int * int * bool -> bool; val indexedCase : reg * reg * int * int * bool * code -> jumpTableAddrs; val makeJumpTable : jumpTableAddrs * cases list * addrs * int * int * code -> unit; val codeAddress: code -> address option val traceContext: code -> string; end (* CODECONS export signature *) = let (*****************************************************************************) (* ADDRESS *) (*****************************************************************************) structure ADDRESS : sig type machineWord; (* NB *not* eqtype, 'cos it might be a closure *) type short = Word.word; type address; type handler; val toAddress: 'a -> address val wordSize : int; (* still 4, but will change one day *) val wordEq : 'a * 'a -> bool val isShort: 'a -> bool; val toShort: 'a -> short; val toMachineWord: 'a -> machineWord; val loadByte: address * short -> Word8.word val loadWord: address * short -> machineWord val unsafeCast: 'a -> 'b val offsetAddr : address * short -> handler val alloc: (short * Word8.word * machineWord) -> address val length: address -> short val flags: address -> Word8.word val F_words : Word8.word val isWords : address -> bool; val isBytes : address -> bool; val isCode : address -> bool; val lock : address -> unit; end = Address; (*****************************************************************************) (* CODESEG *) (*****************************************************************************) structure CODESEG : sig type machineWord; type short = Word.word; type address; type cseg; val csegMake: int -> cseg; val csegConvertToCode: cseg -> unit; val csegLock: cseg -> unit; val csegGet: cseg * int -> Word8.word; val csegSet: cseg * int * Word8.word -> unit; val csegPutWord: cseg * int * machineWord -> unit; val csegCopySeg: cseg * cseg * int * int -> unit; val csegAddr: cseg -> address; val csegPutConstant: cseg * int * machineWord * 'a -> unit; end = CodeSeg; in (*****************************************************************************) (* CODECONS functor body *) (*****************************************************************************) struct open CODESEG; open DEBUG; open ADDRESS; open MISC; val toInt = Word.toIntX (* This previously just cast the value so continue to treat it as signed. *) fun applyCountList (f, n, []) = () | applyCountList (f, n, h::t) = let val U : unit = f (n, h); in applyCountList (f, n + 1, t) end; (*****************************************************************************) (* Useful constants *) (*****************************************************************************) (* These are defined here as explicit constants, so the *) (* code-generator can in-line them as immediates (I think). *) val TAGBITS = 1; (* Now 1 DCJM 13/11/00. *) val exp2_1 = 2; val exp2_2 = 4; val exp2_3 = 8; val exp2_4 = 16; val exp2_5 = 32; val exp2_6 = 64; val exp2_7 = 128; val exp2_8 = 256; val exp2_9 = 512; val exp2_10 = 1024; val exp2_11 = 2048; val exp2_12 = 4096; val exp2_13 = 8192; val exp2_14 = 16384; val exp2_15 = 32768; val exp2_16 = 65536; val exp2_19 = 524288; val exp2_21 = 2097152; val exp2_22 = 4194304; val exp2_23 = 8388608; val exp2_24 = 16777216; val exp2_25 = 33554432; val exp2_26 = 67108864; val exp2_29 = 536870912; val exp2_30 = 1073741824; val exp2_31 = 2147483648; val exp2_32 = 4294967296; (* Let's check that we got them right! *) local fun exp2 0 = 1 | exp2 n = 2 * exp2 (n - 1); in val U : bool = ( exp2_1 = exp2 1 andalso exp2_2 = exp2 2 andalso exp2_3 = exp2 3 andalso exp2_4 = exp2 4 andalso exp2_5 = exp2 5 andalso exp2_6 = exp2 6 andalso exp2_7 = exp2 7 andalso exp2_8 = exp2 8 andalso exp2_9 = exp2 9 andalso exp2_10 = exp2 10 andalso exp2_11 = exp2 11 andalso exp2_12 = exp2 12 andalso exp2_13 = exp2 13 andalso exp2_14 = exp2 14 andalso exp2_15 = exp2 15 andalso exp2_16 = exp2 16 andalso exp2_19 = exp2 19 andalso exp2_21 = exp2 21 andalso exp2_22 = exp2 22 andalso exp2_23 = exp2 23 andalso exp2_24 = exp2 24 andalso exp2_25 = exp2 25 andalso exp2_26 = exp2 26 andalso exp2_29 = exp2 29 andalso exp2_30 = exp2 30 andalso exp2_31 = exp2 31 andalso exp2_32 = exp2 32 ) orelse raise InternalError "CodeCons: Powers of 2 incorrectly specified"; end; val short0 = toShort 0; val short1 = toShort 1; val short2 = toShort 2; val short3 = toShort 3; val short5 = toShort 5; val short6 = toShort 6; val short7 = toShort 7; val short8 = toShort 8; val short10 = toShort 10; val short11 = toShort 11; val short14 = toShort 14; val short15 = toShort 15; val short16 = toShort 16; val short18 = toShort 18; val short19 = toShort 19; val short21 = toShort 21; val short22 = toShort 22; val short24 = toShort 24; val short25 = toShort 25; val short26 = toShort 26; val short27 = toShort 27; val short28 = toShort 28; val short29 = toShort 29; val short31 = toShort 31; val short32 = toShort 32; val short34 = toShort 34; val short36 = toShort 36; val short37 = toShort 37; val short38 = toShort 38; val short63 = toShort 63; val short127 = toShort 127; val short255 = toShort 255; val mask2Bits = short3; (* least significant 2 bits *) val mask3Bits = short7; (* least significant 3 bits *) val mask5Bits = short31; (* least significant 5 bits *) val mask6Bits = short63; (* least significant 6 bits *) val mask7Bits = short127; (* least significant 7 bits *) val mask8Bits = short255; (* least significant 8 bits *) val >> = Word.>> and << = Word.<< infix >> << (*****************************************************************************) (* 16-bit immediates *) (*****************************************************************************) (* Most Power immediates are 16 bits. Whether this is interpretted as a signed or unsigned number depends on the instruction. We'll store everything as unsigned integers because this makes the code generation slightly simpler, but we'll provide interfaces for both signed and unsigned numbers. *) abstype int16 = Imm16 of int with fun isZero16 (Imm16 0) = true | isZero16 (Imm16 _) = false; fun getInt16 (Imm16 i) = i; (* is16Bit is the test for signed immediates *) fun is16Bit i = ~ exp2_15 <= i andalso i < exp2_15; (* isUnsigned16Bit is the test for unsigned immediates *) fun isUnsigned16Bit i = 0 <= i andalso i < exp2_16; (* tag a short constant *) fun semiTagged c = exp2_1 * c; fun tagged c = exp2_1 * c + 1; (* isTaggable16Bit is the test whether the immediate will fit into 16 bits when tagged *) fun isTaggable16Bit i = ~ exp2_14 <= i andalso i < exp2_14; fun isTaggable16BitUnsigned i = 0 <= i andalso i < exp2_15; fun int16 i = if is16Bit i then if i < 0 then Imm16 (exp2_16 + i) else Imm16 i else let val msg = concat [ "int16: can't convert ", Int.toString i, " into a 16-bit signed immediate" ] in raise InternalError msg end; fun unsignedInt16 i = if isUnsigned16Bit i then Imm16 i else let val msg = concat [ "unsignedInt16: can't convert ", Int.toString i, " into a 16-bit unsigned immediate" ] in raise InternalError msg end; val int16_0 = Imm16 0; val int16_1 = Imm16 1; val int16_2 = Imm16 2; val int16_3 = Imm16 3; val int16_4 = Imm16 4; val int16_6 = Imm16 6; val int16_8 = Imm16 8; val int16_16 = Imm16 16; end; (* int16 *) (*****************************************************************************) (* 24-bit immediates *) (*****************************************************************************) (* Unconditional jumps and calls use 24-bit signed offsets. As for 16-bit immediates, we turn this into an unsigned quantity when we actually generate the code. *) abstype int24 = Imm24 of int with fun isZero24 (Imm24 0) = true | isZero24 (Imm24 _) = false; fun getInt24 (Imm24 i) = i; (* is24Bit is the test for signed 24-bit immediates *) fun is24Bit i = ~ exp2_23 <= i andalso i < exp2_23; fun int24 i = if is24Bit i then if i < 0 then Imm24 (exp2_24 + i) else Imm24 i else let val msg = concat [ "int24: can't convert ", Int.toString i, " into a 24-bit signed immediate" ] in raise InternalError msg end; val int24_0 = Imm24 0; end; (* int24 *) (*****************************************************************************) (* 14-bit immediates *) (*****************************************************************************) (* Conditional jumps use 14-bit signed offsets. As for 16-bit immediates, we turn this into an unsigned quantity when we actually generate the code. *) abstype int14 = Imm14 of int with fun isZero14 (Imm14 0) = true | isZero14 (Imm14 _) = false; fun getInt14 (Imm14 i) = i; (* is14Bit is the test for signed 14-bit immediates *) fun is14Bit i = ~ exp2_13 <= i andalso i < exp2_13; fun int14 i = if is14Bit i then if i < 0 then Imm14 (exp2_14 + i) else Imm14 i else let val msg = concat [ "int14: can't convert ", Int.toString i, " into a 14-bit signed immediate" ] in raise InternalError msg end; val int14_0 = Imm14 0; end; (* int14 *) (*****************************************************************************) (* 10-bit immediates *) (*****************************************************************************) (* X-form instructions use 10-bit extended opcodes. As for 16-bit immediates, we turn this into an unsigned quantity when we actually generate the code. *) abstype int10 = Imm10 of int with fun isZero10 (Imm10 0) = true | isZero10 (Imm10 _) = false; fun getInt10 (Imm10 i) = i; (* is10Bit is the test for signed 10-bit immediates *) fun is10Bit i = ~ exp2_9 <= i andalso i < exp2_9; fun int10 i = if is10Bit i then if i < 0 then Imm10 (exp2_10 + i) else Imm10 i else let val msg = concat [ "int10: can't convert ", Int.toString i, " into a 10-bit signed immediate" ] in raise InternalError msg end; val int10_0 = Imm10 0; val int10_4 = Imm10 4; val int10_8 = Imm10 8; val int10_16 = Imm10 16; val int10_23 = Imm10 23; val int10_28 = Imm10 28; val int10_32 = Imm10 32; val int10_87 = Imm10 87; val int10_151 = Imm10 151; val int10_215 = Imm10 215; val int10_235 = Imm10 235 val int10_266 = Imm10 266; val int10_316 = Imm10 316; val int10_339 = Imm10 339; val int10_444 = Imm10 444; val int10_459 = Imm10 459 val int10_467 = Imm10 467; val int10_512 = Imm10 512; (* *unsigned* 512 *) val int10_520 = Imm10 520; (* *unsigned* 520 *) val int10_528 = Imm10 528; (* *unsigned* 528 *) val int10_747 = Imm10 747; (* *unsigned* 747 *) val int10_778 = Imm10 778; (* *unsigned* 778 *) val int10_824 = Imm10 824; (* *unsigned* 824 *) end; (* int10 *) (*****************************************************************************) (* 5-bit immediates *) (*****************************************************************************) (* Various instruction fields use 5-bits. We treat these fields as as *unsigned* here. *) abstype int5 = Imm5 of int with fun getInt5 (Imm5 i) = i; (* is5Bit is the test for signed 5-bit immediates *) fun isUnsigned5Bit i = 0 <= i andalso i < exp2_5; fun int5 i = if isUnsigned5Bit i then Imm5 i else let val msg = concat [ "int5: can't convert ", Int.toString i, " into a 5-bit unsigned immediate" ] in raise InternalError msg end; (* various small constants *) val int5_0 = Imm5 0; val int5_1 = Imm5 1; val int5_2 = Imm5 2; val int5_3 = Imm5 3; val int5_4 = Imm5 4; val int5_5 = Imm5 5; val int5_12 = Imm5 12; val int5_13 = Imm5 13; val int5_31 = Imm5 31; end; (* int5 *) (*****************************************************************************) (* splitUnsignedInt *) (*****************************************************************************) (* The logical instructions don't sign-extend their arguments, so use this function to split the value into two halves. *) fun splitUnsignedInt (i:int) : int16 * int16 = let (* Values with the top bit set appear as negatives even though all values of type Word.word are unsigned. *) val pi = if i < 0 then exp2_32 + i else i; val lo16 = pi mod exp2_16; val hi16 = pi div exp2_16; val U : unit = if isUnsigned16Bit hi16 then () else let val msg = concat [ "splitUnsignedInt: can't convert ", Int.toString i, " into a 32-bit unsigned immediate" ] in raise InternalError msg end; in (unsignedInt16 lo16, unsignedInt16 hi16) end; (*****************************************************************************) (* splitSignedInt *) (*****************************************************************************) (* The addi instruction sign-extends its argument. We have to take this into account when we calculate the high-order part (for the addis instruction). If we didn't, we would be off by 16 high-order ones whenever bit15 is set. *) fun splitSignedInt (i:int) : int16 * int16 = let val lo16 = i mod exp2_16; val hi16 = i div exp2_16; val U : unit = if is16Bit hi16 then () else let val msg = concat [ "splitSignedInt: can't convert ", Int.toString i, " into a 32-bit signed immediate" ] in raise InternalError msg end; (* Take account of low-order sign-extension *) val hi16' = if lo16 < exp2_15 then hi16 else hi16 + 1; (* hi16' may have overflowed 16 bits, so adjust it back. *) val hi16'' = hi16' mod exp2_16; in (unsignedInt16 lo16, unsignedInt16 hi16'') end; (*****************************************************************************) (* Abstype for registers *) (*****************************************************************************) infix 7 regEq regNeq regLeq regGeq regMinus; abstype reg = Reg of int (* registers. *) with val regNone = Reg ~1; (* Dummy register *) val regZero = Reg 0; (* temporary / zero-source *) (* Reg 1 is the C stack pointer *) (* Reg 2 is the C TOC pointer *) val regResult = Reg 3; (* argument 1 and function results *) (* Reg 4 - Reg 6 are used for arguments 2-4 *) (* Reg 7 - Reg 10 are general purpose registers *) val regTemp1 = Reg 11; (* temporary *) val regTemp2 = Reg 12; (* temporary *) (* R13 points to the memRegisters structure. *) val regMemRegs = Reg 13; (* Reg 14 - Reg 22 are general purpose registers *) val regCode = NONE; (* No special register required *) val regClosure = Reg 24; (* address of closure (or static link) *) val regReturn = Reg 25; (* return address *) val regTemp3 = Reg 26; (* Unsaved temporary. *) val regStackPtr = Reg 27; (* current ML stack pointer *) (* r28 is no longer used *) val regHeapPtr = Reg 29; (* current heap allocation pointer *) val regHeapLim = Reg 30; (* number of available heap bytes (words?) *) val regHandler = Reg 31; (* pointer into the stack *) fun getReg (Reg r) = r; (* reg.down *) fun mkReg n = Reg n; (* reg.up *) fun getReg5 (Reg r) = int5 r; (* The number of general registers. Includes result, closure, code, return and arg regs but not stackptr, handler, stack limit or heap ptrs. *) val regs = 8 + 12; (* r3-r10, r14-r25 *) (* The nth register (counting from 0). *) fun regN i = if i < 0 orelse i >= regs then let val msg = concat [ "regN: Bad register number ", Int.toString i ] in raise InternalError msg end else if i < 8 then mkReg (i + 3) else mkReg (i + 6) fun a regEq b = getReg a = getReg b; fun a regNeq b = getReg a <> getReg b; fun a regLeq b = getReg a <= getReg b; fun a regGeq b = getReg a >= getReg b; fun (Reg a) regMinus (Reg b) = a - b; (* The number of the register. *) fun nReg (Reg n) = if 3 <= n andalso n <= 10 then n - 3 else if 14 <= n andalso n <= 25 then n - 6 else let val msg = concat [ "nReg: Bad register number ", Int.toString n ] in raise InternalError msg end; fun regRepr (Reg n) = "r" ^ Int.toString n; val argRegs = 4; (* Args 0, 1, 2, 3 correspond to r3, r4, r5, r6. *) fun argReg i = if 0 <= i andalso i < 4 then mkReg (i + 3) else let val msg = concat [ "argReg: bad register number ", Int.toString i ] in raise InternalError msg end; end; (* reg *) (*****************************************************************************) (* The opCode datatype *) (*****************************************************************************) (* The primary opcode - in the range 0 .. 63 *) datatype opCode = TWI (* 3 *) | MULLI (* 7 *) | CMPLI (* 10 *) | CMPI (* 11 *) | ADDI (* 14 *) | ADDIS (* 15 *) | BC (* 16 *) | B (* 18 *) | EXT19 (* 19 *) | RLWINM (* 21 *) | ORI (* 24 *) | ORIS (* 25 *) | XORI (* 26 *) | XORIS (* 27 *) | ANDIDOT (* 28 *) | ANDISDOT (* 29 *) | EXT31 (* 31 *) | LWZ (* 32 *) | LBZ (* 34 *) | STW (* 36 *) | STWU (* 37 *) | STB (* 38 *) ; fun opToShort (op1 : opCode) : short = case op1 of TWI => short3 | MULLI => short7 | CMPLI => short10 | CMPI => short11 | ADDI => short14 | ADDIS => short15 | BC => short16 | B => short18 | EXT19 => short19 | RLWINM => short21 | ORI => short24 | ORIS => short25 | XORI => short26 | XORIS => short27 | ANDIDOT => short28 | ANDISDOT => short29 | EXT31 => short31 | LWZ => short32 | LBZ => short34 | STW => short36 | STWU => short37 | STB => short38 ; (* EXT19 secondary opcodes *) datatype opCode19 = BCLR (* 16 *) | BCCTR (* 528 *) ; fun op19ToInt10 (op2 : opCode19) : int10 = case op2 of BCLR => int10_16 | BCCTR => int10_528 ; (* EXT31 secondary opcodes *) datatype opCode31 = CMP (* 0 *) | TW (* 4 *) | SUBFC (* 8 *) | LWZX (* 23 *) | AND (* 28 *) | CMPL (* 32 *) | LBZX (* 87 *) | STWX (* 151 *) | STBX (* 215 *) | MULLW (* 235 *) | ADD (* 266 *) | XOR (* 316 *) | MFSPR (* 339 *) | OR (* 444 *) | DIVWU (* 459 *) | MTSPR (* 467 *) | SUBFCO (* 520 (512 + 8) *) | MULLWO (* 747 (512 + 235) *) | ADDO (* 778 (512 + 266) *) | SRAWI (* 824 *) ; fun op31ToInt10 (op2 : opCode31) : int10 = case op2 of CMP => int10_0 | TW => int10_4 | SUBFC => int10_8 | LWZX => int10_23 | AND => int10_28 | CMPL => int10_32 | LBZX => int10_87 | STWX => int10_151 | STBX => int10_215 | ADD => int10_266 | XOR => int10_316 | MFSPR => int10_339 | OR => int10_444 | MTSPR => int10_467 | SUBFCO => int10_520 | ADDO => int10_778 | SRAWI => int10_824 | MULLW => int10_235 | DIVWU => int10_459 | MULLWO => int10_747 ; (*****************************************************************************) (* The testCode datatype *) (*****************************************************************************) datatype testCode = Lt | Gt | Eq | Ge | Le | Ne | SoInv (* used for arbitrary precision overflow only *) | NeInv (* used for zero divide detection only *) | GeInv (* used for heap and stack limit detection *) | EqInv (* used for arbitrary precision tag testing ??? Now removed ??? *) ; fun testToBiBoPair (tc : testCode) : int5 * int5 = case tc of Lt => (int5_12, int5_0) (* Branch if LT (bit 0) in CR0 is TRUE *) | Gt => (int5_12, int5_1) (* Branch if GT (bit 1) in CR0 is TRUE *) | Eq => (int5_12, int5_2) (* Branch if EQ (bit 2) in CR0 is TRUE *) | Ge => (int5_4, int5_0) (* Branch if LT (bit 0) in CR0 is FALSE *) | Le => (int5_4, int5_1) (* Branch if GT (bit 1) in CR0 is FALSE *) | Ne => (int5_4, int5_2) (* Branch if EQ (bit 2) in CR0 is FALSE *) | SoInv => (int5_13, int5_3) (* Branch if SO (bit 3) in CR0 is TRUE, but with inverted branch prediction *) | NeInv => (int5_5, int5_2) (* Branch if EQ (bit 2) in CR0 is FALSE, but with inverted branch prediction *) | GeInv => (int5_5, int5_0) (* Branch if LT (bit 0) in CR0 is FALSE, but with inverted branch prediction *) | EqInv => (int5_13, int5_2) (* Branch if EQ (bit 2) in CR0 is TRUE, but with inverted branch prediction *) ; (*****************************************************************************) (* Disassembler (unfinished) *) (*****************************************************************************) fun printHex(v, printStream) = printStream(Int.fmt StringCvt.HEX v) (* prints a string representation of a number, padded to width characters *) fun printHexN (width : int, n : int, printStream) = printStream(StringCvt.padLeft #"0" width (Int.fmt StringCvt.HEX n)) local fun printHex24 (n : int, printStream) = printHexN (6, n, printStream); fun printHex16 (n : int, printStream) = printHexN (4, n, printStream); fun printHex14 (n : int, printStream) = printHexN (4, n, printStream); fun printHex5 (n : int, printStream) = printHexN (2, n, printStream); fun splitMform (bits0_31 : int) : int * int * int * int * int * bool = let val bits0_25 = bits0_31 mod exp2_26; val bits0_20 = bits0_25 mod exp2_21; val bits0_15 = bits0_20 mod exp2_16; val bits0_10 = bits0_15 mod exp2_11; val bits0_5 = bits0_10 mod exp2_6; val bits0_0 = bits0_5 mod exp2_1; val bits21_25 = bits0_25 div exp2_21; val bits16_20 = bits0_20 div exp2_16; val bits11_15 = bits0_15 div exp2_11; val bits6_10 = bits0_10 div exp2_6; val bits1_5 = bits0_5 div exp2_1; in (bits21_25, bits16_20, bits11_15, bits6_10, bits1_5, bits0_0 = 1) end; fun splitDform (bits0_31 : int) : int * int * int = let val bits0_25 = bits0_31 mod exp2_26; val bits0_20 = bits0_25 mod exp2_21; val bits0_15 = bits0_20 mod exp2_16; val bits21_25 = bits0_25 div exp2_21; val bits16_20 = bits0_20 div exp2_16; in (bits21_25, bits16_20, bits0_15) end; fun splitBform (bits0_31 : int) : int * int * int * bool * bool = let val bits0_25 = bits0_31 mod exp2_26; val bits0_20 = bits0_31 mod exp2_21; val bits0_15 = bits0_20 mod exp2_16; val bits0_1 = bits0_31 mod exp2_2; val bits0_0 = bits0_1 mod exp2_1; val bits21_25 = bits0_25 div exp2_21; val bits16_20 = bits0_20 div exp2_16; val bits2_15 = bits0_15 div exp2_2; val bits1_1 = bits0_1 div exp2_1; in (bits21_25, bits16_20, bits2_15, bits1_1 = 1, bits0_0 = 1) end; fun splitIform (bits0_31 : int) : int * bool * bool = let val bits0_25 = bits0_31 mod exp2_26; val bits0_1 = bits0_25 mod exp2_2; val bits0_0 = bits0_1 mod exp2_1; val bits2_25 = bits0_25 div exp2_2; val bits1_1 = bits0_1 div exp2_1; in (bits2_25, bits1_1 = 1, bits0_0 = 1) end; fun splitXform (bits0_31 : int) : int * int * int * int * bool = let val bits0_25 = bits0_31 mod exp2_26; val bits0_20 = bits0_25 mod exp2_21; val bits0_15 = bits0_20 mod exp2_16; val bits0_10 = bits0_15 mod exp2_11; val bits0_0 = bits0_10 mod exp2_1; val bits21_25 = bits0_25 div exp2_21; val bits16_20 = bits0_20 div exp2_16; val bits11_15 = bits0_15 div exp2_11; val bits1_10 = bits0_10 div exp2_1; in (bits21_25, bits16_20, bits11_15, bits1_10, bits0_0 = 1) end; fun printUnknown (instr : int, printStream) : unit = let in printStream "??????\t" end; fun printArithmeticDform (name : string, instr : int, printStream) : unit = let val (RT : int, RA : int, SI : int) = splitDform instr; in printStream name; printStream "\t"; printStream(regRepr (mkReg RT)); printStream ","; printStream(regRepr (mkReg RA)); printStream ","; printHex16(SI, printStream) end; fun printArithmeticXform (name : string, instr : int, printStream) : unit = let val (RT : int, RA : int, RB : int, op2: int, Rc : bool) = splitXform instr; in printStream name; if Rc then printStream "." else (); printStream "\t"; printStream(regRepr (mkReg RT)); printStream ","; printStream(regRepr (mkReg RA)); printStream ","; printStream(regRepr (mkReg RB)) end; fun printLogicalDform (name : string, instr : int, printStream) : unit = let val (RS : int, RA : int, UI : int) = splitDform instr; in printStream name; printStream "\t"; printStream(regRepr (mkReg RA)); printStream ","; printStream(regRepr (mkReg RS)); printStream ","; printHex16(UI, printStream) end; fun printLogicalXform (name : string, instr : int, printStream) : unit = let val (RS : int, RA : int, RB : int, op2: int, Rc : bool) = splitXform instr; in printStream name; if Rc then printStream "." else (); printStream "\t"; printStream(regRepr (mkReg RA)); printStream ","; printStream(regRepr (mkReg RS)); printStream ","; printStream(regRepr (mkReg RB)) end; fun printStorageDform (name : string, instr : int, printStream) : unit = let val (RS : int, RA : int, D : int) = splitDform instr; in printStream name; printStream "\t"; printStream(regRepr (mkReg RS)); printStream ","; printStream(regRepr (mkReg RA)); printStream ","; printHex16(D, printStream) end; fun printStorageXform (name : string, instr : int, printStream) : unit = let val (RT : int, RA : int, RB : int, op2: int, Rc : bool) = splitXform instr; in printStream name; printStream "\t"; printStream(regRepr (mkReg RT)); printStream ","; printStream(regRepr (mkReg RA)); printStream ","; printStream(regRepr (mkReg RB)) end; fun printExt19 (instr : int, printStream) : unit = let val (BO : int, BI : int, _ : int, OP2 : int, LK : bool) = splitXform instr; in case OP2 of 16 => (* BCLR *) let in printStream (if LK then "bclrl\t" else "bclr\t"); printHex5(BO, printStream); printStream ","; printHex5(BI, printStream) end | 528 => (* BCCTR *) let in printStream (if LK then "bcctrl\t" else "bcctr\t"); printHex5(BO, printStream); printStream ","; printHex5(BI, printStream) end | _ => printUnknown(instr, printStream) end; fun printExt31 (instr : int, printStream) : unit = let val (F1 : int, F2 : int, F3 : int, OP2 : int, F4 : bool) = splitXform instr; in case OP2 of 0 => (* CMP *) let in printStream "cmp\t"; printHex5(F1, printStream); printStream ","; printStream(regRepr (mkReg F2)); printStream ","; printStream(regRepr (mkReg F3)) end | 4 => (* TW *) let in printStream "tw\t"; printHex5(F1, printStream); printStream ","; printStream(regRepr (mkReg F2)); printStream ","; printStream(regRepr (mkReg F3)) end | 8 => (* SUBFC *) printArithmeticXform ("subfc", instr, printStream) | 23 => (* LWZX *) printStorageXform ("lwzx", instr, printStream) | 28 => (* AND *) printLogicalXform ("and", instr, printStream) | 32 => (* CMPL *) let in printStream "cmpl\t"; printHex5(F1, printStream); printStream ","; printStream(regRepr (mkReg F2)); printStream ","; printStream(regRepr (mkReg F3)) end | 87 => (* LBZX *) printStorageXform ("lbzx", instr, printStream) | 151 => (* STWX *) printStorageXform ("stwx", instr, printStream) | 215 => (* STBX *) printStorageXform ("stbx", instr, printStream) | 266 => (* ADD *) printArithmeticXform ("add", instr, printStream) | 316 => (* XOR *) printLogicalXform ("xor", instr, printStream) | 339 => (* MFSPR *) ( case (F3, F2) of (0, 8) => ( printStream "mflr\t"; printStream(regRepr (mkReg F1)) ) | (0, 9) => ( printStream "mfctr\t"; printStream(regRepr (mkReg F1)) ) | _ => ( printStream "mfspr\t"; printStream(regRepr (mkReg F1)); printStream ","; printHex5(F2, printStream); printStream ","; printHex5(F3, printStream) ) ) | 444 => (* OR *) printLogicalXform ("or", instr, printStream) | 467 => (* MTSPR *) ( case (F3, F2) of (0, 8) => ( printStream "mtlr\t"; printStream(regRepr (mkReg F1)) ) | (0, 9) => ( printStream "mtctr\t"; printStream(regRepr (mkReg F1)) ) | _ => ( printStream "mtspr\t"; printStream(regRepr (mkReg F1)); printStream ","; printHex5(F2, printStream); printStream ","; printHex5(F3, printStream) ) ) | 520 => (* SUBFCO *) printArithmeticXform ("subfco", instr, printStream) | 778 => (* ADDO *) printArithmeticXform ("addo", instr, printStream) | 824 => (* SRAWI *) let in (* "logical therefore backwards" register ordering *) printStream "srawi\t"; printStream(regRepr (mkReg F2)); printStream ","; printStream(regRepr (mkReg F1)); printStream ","; printHex5(F3, printStream) end | 235 => (* MULLW *) printArithmeticXform ("mullw", instr, printStream) | 747 => (* MULLWO *) printArithmeticXform ("mullwo", instr, printStream) | 459 => (* DIVWU *) printArithmeticXform ("divwu", instr, printStream) | _ => printUnknown(instr, printStream) end; (* printExt31 *) in fun printInstr (addr : int, instr : int, printStream) : unit = let val OPCD_field : int = instr div exp2_26; (* MSB 6 bits *) in case OPCD_field of 3 => (* TWI *) let val (TO : int, RA : int, SI : int) = splitDform instr; in printStream "twi\t"; printHex5(TO, printStream); printStream ","; printStream(regRepr (mkReg RA)); printStream ","; printHex16(SI, printStream) end | 7 => (* MULLI *) let val (TO : int, RA : int, SI : int) = splitDform instr; in printStream "mulli\t"; printHex5(TO, printStream); printStream ","; printStream(regRepr (mkReg RA)); printStream ","; printHex16(SI, printStream) end | 10 => (* CMPLI *) let val (TO : int, RA : int, UI : int) = splitDform instr; in printStream "cmpli\t"; printHex5(TO, printStream); printStream ","; printStream(regRepr (mkReg RA)); printStream ","; printHex16(UI, printStream) end | 11 => (* CMPI *) let val (TO : int, RA : int, SI : int) = splitDform instr; in printStream "cmpi\t"; printHex5(TO, printStream); printStream ","; printStream(regRepr (mkReg RA)); printStream ","; printHex16(SI, printStream) end | 14 => (* ADDI *) printArithmeticDform ("addi", instr, printStream) | 15 => (* ADDIS *) printArithmeticDform ("addis", instr, printStream) | 16 => (* BC *) let val (BO : int, BI : int, BD : int, AA : bool, LK : bool) = splitBform instr; val offset = if BD < exp2_13 then BD else BD - exp2_14; in printStream (case (AA, LK) of (false, false) => "bc\t" | (false, true) => "bcl\t" | (true, false) => "bca\t" | (true, true) => "bcla\t"); printHex5(BO, printStream); printStream ","; printHex5(BI, printStream); printStream ","; printHex14(BD, printStream); if AA then printStream "\t;!!! absolute addressing ???" else (printStream "\t;to "; printHex (addr + 4 * offset, printStream)) end | 18 => (* B *) let val (LI : int, AA : bool, LK : bool) = splitIform instr; val offset = if LI < exp2_23 then LI else LI - exp2_24; in printStream (case (AA, LK) of (false, false) => "b\t" | (false, true) => "bl\t" | (true, false) => "ba\t" | (true, true) => "bla\t"); printHex24(LI, printStream); if AA then printStream "\t\t;!!! absolute addressing ???" else (printStream "\t\t;to "; printHex (addr + 4 * offset, printStream)) end | 19 => (* EXT19 *) printExt19(instr, printStream) | 21 => (* RLWINM *) let val (RS : int, RA : int, SH : int, MB : int, ME : int, Rc : bool) = splitMform instr; in printStream (if Rc then "rlwinm.\t" else "rlwinm\t"); printStream(regRepr (mkReg RA)); printStream ","; printStream(regRepr (mkReg RS)); printStream ","; printHex5(SH, printStream); printStream ","; printHex5(MB, printStream); printStream ","; printHex5(ME, printStream) end | 24 => (* ORI *) printLogicalDform ("ori", instr, printStream) | 25 => (* ORIS *) printLogicalDform ("oris", instr, printStream) | 26 => (* XORI *) printLogicalDform ("xori", instr, printStream) | 27 => (* XORIS *) printLogicalDform ("xoris", instr, printStream) | 28 => (* ANDIDOT *) printLogicalDform ("andi.", instr, printStream) | 29 => (* ANDISDOT *) printLogicalDform ("andis.", instr, printStream) | 31 => (* EXT31 *) printExt31(instr, printStream) | 32 => (* LWZ *) printStorageDform ("lwz", instr, printStream) | 34 => (* LBZ *) printStorageDform ("lbz", instr, printStream) | 36 => (* STW *) printStorageDform ("stw", instr, printStream) | 37 => (* STWU *) printStorageDform ("stwu", instr, printStream) | 38 => (* STB *) printStorageDform ("stb", instr, printStream) | _ => printUnknown(instr, printStream) end; (* printInstr *) end; (* Offsets in the memRegisters structure. This is pointed at by r13 *) val MemRegisterStackLimit = 24 (* This contains the current base of the stack. Also used by the RTS to cause an interrupt by being set to the end of the stack. *) val MemRegisterHeapOverflow = 28 (* Called when the heap limit is reached. *) val MemRegisterStackOverflow = 32 (* Called when the stack limit is reached. *) val MemRegisterStackOverflowEx = 36 (* Called when the stack limit is reached. *) val MemRegisterRaiseException = 40 (* Called to raise an exception with an exception packet. *) val MemRegisterIOEntry = 44 (* Called to make an IO call. Not currently used by the code-generator. *) val MemRegisterRaiseDiv = 48 (* Called to raise a divide exception. *) val MemRegisterArbEmulation = 52 (* Called to emulate an arbitrary precision instruction. *) (*****************************************************************************) (* The "quad" datatype (used for instruction words) *) (*****************************************************************************) datatype quad = (* the 4 bytes of the instruction word *) Quad of short * short * short * short (* break an instruction word into 4 bytes; try to do it in a way that *) (* will minimise the arithmetic - particularly for long values. *) fun toQuad (w : int) : quad = let val topHw = toShort (w div exp2_16); val bottomHw = toShort (w mod exp2_16); in Quad (topHw >> short8, Word.andb (mask8Bits, topHw), bottomHw >> short8, Word.andb (mask8Bits, bottomHw)) end; (* returns *unsigned* integer *) fun fromQuad (Quad (b1,b2,b3,b4)) : int = let val topHw = toInt (Word.orb (b1 << short8, b2)); val bottomHw = toInt (Word.orb (b3 << short8, b4)); in topHw * exp2_16 + bottomHw end; (*****************************************************************************) (* Basic instruction assembly routines *) (*****************************************************************************) fun IformQuad (op1: opCode, li : int24, aa : bool, lk : bool) : quad = let val op1_short = opToShort op1; (* 6 bits *) val li_short = toShort (getInt24 li); (* 24 bits *) val aa_short = if aa then short1 else short0; (* 1 bit *) val lk_short = if lk then short1 else short0; (* 1 bit *) val bits26_31 = op1_short << short2; (* 6 bits *) val bits24_25 = li_short >> short22; (* 2 bits *) val b1 = Word.orb (bits24_25, bits26_31); val bits16_23 = Word.andb (li_short >> short14, mask8Bits); val b2 = bits16_23; val bits8_15 = Word.andb (li_short >> short6, mask8Bits); val b3 = bits8_15; val bits2_7 = Word.andb (li_short, mask6Bits) << short2; val bits1_1 = aa_short << short1; val bits0_0 = lk_short; val b4 = Word.orb (bits0_0, Word.orb (bits1_1, bits2_7)); in Quad (b1, b2, b3, b4) end; fun BformQuad (op1: opCode, bo : int5, bi : int5, bd : int14, aa : bool, lk : bool) : quad = let val op1_short = opToShort op1; (* 6 bits *) val bo_short = toShort (getInt5 bo); (* 5 bits *) val bi_short = toShort (getInt5 bi); (* 5 bits *) val bd_short = toShort (getInt14 bd); (* 14 bits *) val aa_short = if aa then short1 else short0; (* 1 bit *) val lk_short = if lk then short1 else short0; (* 1 bit *) val bits26_31 = op1_short << short2; (* 6 bits *) val bits24_25 = bo_short >> short3; (* 2 bits *) val b1 = Word.orb (bits24_25, bits26_31); val bits21_23 = Word.andb (bo_short, mask3Bits) << short5 (* 3 bits *) val bits16_20 = bi_short; (* 5 bits *) val b2 = Word.orb (bits16_20, bits21_23); val bits8_15 = Word.andb (bd_short >> short6, mask8Bits); val b3 = bits8_15; val bits2_7 = Word.andb (bd_short, mask6Bits) << short2; val bits1_1 = aa_short << short1; val bits0_0 = lk_short; val b4 = Word.orb (bits0_0, Word.orb (bits1_1, bits2_7)); in Quad (b1, b2, b3, b4) end; fun DformQuad (op1: opCode, rt : int5, ra : int5, si : int16) : quad = let val op1_short = opToShort op1; (* 6 bits *) val rt_short = toShort (getInt5 rt); (* 5 bits *) val ra_short = toShort (getInt5 ra); (* 5 bits *) val si_short = toShort (getInt16 si); (* 16 bits *) val bits26_31 = op1_short << short2; (* 6 bits *) val bits24_25 = rt_short >> short3; (* 2 bits *) val b1 = Word.orb (bits24_25, bits26_31); val bits21_23 = Word.andb (rt_short, mask3Bits) << short5 (* 3 bits *) val bits16_20 = ra_short; (* 5 bits *) val b2 = Word.orb (bits16_20, bits21_23); val bits8_15 = si_short >> short8; (* 8 bits *) val b3 = bits8_15; val bits0_7 = Word.andb (si_short, mask8Bits); (* 8 bits *) val b4 = bits0_7; in Quad (b1, b2, b3, b4) end; (* field names based on add instruction *) fun XformQuad (op1: opCode, rt : int5, ra : int5, rb : int5, xo : int10, rc : bool) : quad = let val op1_short = opToShort op1; (* 6 bits *) val rt_short = toShort (getInt5 rt); (* 5 bits *) val ra_short = toShort (getInt5 ra); (* 5 bits *) val rb_short = toShort (getInt5 rb); (* 5 bits *) val xo_short = toShort (getInt10 xo); (* 10 bits *) val rc_short = if rc then short1 else short0; (* 1 bit *) val bits26_31 = op1_short << short2; (* 6 bits *) val bits24_25 = rt_short >> short3; (* 2 bits *) val b1 = Word.orb (bits24_25, bits26_31); val bits21_23 = Word.andb (rt_short, mask3Bits) << short5 (* 3 bits *) val bits16_20 = ra_short; (* 5 bits *) val b2 = Word.orb (bits16_20, bits21_23); val bits11_15 = rb_short << short3 (* 5 bits *) val bits8_10 = xo_short >> short7; (* 3 bits *) val b3 = Word.orb (bits8_10, bits11_15); val bits1_7 = Word.andb (xo_short, mask7Bits) << short1; (* 7 bits *) val bits0_0 = rc_short; (* 1 bit *) val b4 = Word.orb (bits0_0, bits1_7); in Quad (b1, b2, b3, b4) end; (* field names based on rlwinm instruction *) fun MformQuad (op1: opCode, rs : int5, ra : int5, sh : int5, mb : int5, me : int5, rc : bool) : quad = let val op1_short = opToShort op1; (* 6 bits *) val rs_short = toShort (getInt5 rs); (* 5 bits *) val ra_short = toShort (getInt5 ra); (* 5 bits *) val sh_short = toShort (getInt5 sh); (* 5 bits *) val mb_short = toShort (getInt5 mb); (* 5 bits *) val me_short = toShort (getInt5 me); (* 5 bits *) val rc_short = if rc then short1 else short0; (* 1 bit *) val bits26_31 = op1_short << short2; (* 6 bits *) val bits24_25 = rs_short >> short3; (* 2 bits *) val b1 = Word.orb (bits24_25, bits26_31); val bits21_23 = Word.andb (rs_short, mask3Bits) << short5 (* 3 bits *) val bits16_20 = ra_short; (* 5 bits *) val b2 = Word.orb (bits16_20, bits21_23); val bits11_15 = sh_short << short3 (* 5 bits *) val bits8_10 = mb_short >> short2; (* 3 bits *) val b3 = Word.orb (bits8_10, bits11_15); val bits6_7 = Word.andb (mb_short, mask2Bits) << short6; (* 2 bits *) val bits1_5 = me_short << short1; (* 5 bits *) val bits0_0 = rc_short; (* 1 bit *) val b4 = Word.orb (bits0_0, Word.orb(bits1_5, bits6_7)); in Quad (b1, b2, b3, b4) end; (*****************************************************************************) (* Instruction assembly routines - arithmetic *) (*****************************************************************************) fun addi (rt : reg, ra : reg, SI) = let val rt' : int5 = getReg5 rt; val ra' : int5 = getReg5 ra; in DformQuad (ADDI, rt' , ra' , SI) end; fun addis (rt : reg, ra : reg, SI) = let val rt' : int5 = getReg5 rt; val ra' : int5 = getReg5 ra; in DformQuad (ADDIS, rt', ra', SI) end; fun add (rt : reg, ra : reg, rb : reg) : quad = let val rt' : int5 = getReg5 rt; val ra' : int5 = getReg5 ra; val rb' : int5 = getReg5 rb; in XformQuad (EXT31, rt', ra', rb', op31ToInt10 ADD, false) end; fun sub (rt : reg, ra : reg, rb : reg) : quad = let val rt' : int5 = getReg5 rt; val ra' : int5 = getReg5 ra; val rb' : int5 = getReg5 rb; in (* ra and rb are swapped, because the actual instruction is "subfc" *) XformQuad (EXT31, rt', rb', ra', op31ToInt10 SUBFC, false) end; fun cmpl (ra : reg, rb : reg) : quad = let val ra' : int5 = getReg5 ra; val rb' : int5 = getReg5 rb; in XformQuad (EXT31, int5_0, ra', rb', op31ToInt10 CMPL, false) end; (* Comparisons only use CR field 0, for now. *) fun cmpi (ra : reg, SI : int16) : quad = let val ra' : int5 = getReg5 ra; in DformQuad (CMPI, int5_0, ra', SI) end; fun cmpli (ra : reg, SI : int16) : quad = let val ra' : int5 = getReg5 ra; in DformQuad (CMPLI, int5_0, ra', SI) end; (*****************************************************************************) (* Instruction assembly routines - logical operations *) (*****************************************************************************) fun ori (ra : reg, rs : reg, UI : int16) : quad = let val ra' : int5 = getReg5 ra; val rs' : int5 = getReg5 rs; in (* the RA and RS fields are "backwards" in logical operations *) DformQuad (ORI, rs', ra', UI) end; fun oris (ra : reg, rs : reg, UI : int16) : quad = let val ra' : int5 = getReg5 ra; val rs' : int5 = getReg5 rs; in (* the RA and RS fields are "backwards" in logical operations *) DformQuad (ORIS, rs', ra', UI) end; fun xori (ra : reg, rs : reg, UI : int16) : quad = let val ra' : int5 = getReg5 ra; val rs' : int5 = getReg5 rs; in (* the RA and RS fields are "backwards" in logical operations *) DformQuad (XORI, rs', ra', UI) end; fun xoris (ra : reg, rs : reg, UI : int16) : quad = let val ra' : int5 = getReg5 ra; val rs' : int5 = getReg5 rs; in (* the RA and RS fields are "backwards" in logical operations *) DformQuad (XORIS, rs', ra', UI) end; fun andiDot (ra : reg, rs : reg, UI : int16) : quad = let val ra' : int5 = getReg5 ra; val rs' : int5 = getReg5 rs; in DformQuad (ANDIDOT, rs', ra', UI) end; fun andisDot (ra : reg, rs : reg, UI : int16) : quad = let val ra' : int5 = getReg5 ra; val rs' : int5 = getReg5 rs; in (* the RA and RS fields are "backwards" in logical operations *) DformQuad (ANDISDOT, rs', ra', UI) end; (* "and" is an ML keyword, so we use "and_" *) fun and_ (ra : reg, rs : reg, rb : reg) : quad = let val ra' : int5 = getReg5 ra; val rs' : int5 = getReg5 rs; val rb' : int5 = getReg5 rb; in XformQuad (EXT31, rs', ra', rb', op31ToInt10 AND, false) end; fun rlwinmRc rc (ra : reg, rs : reg, sh : int, mb : int, me : int) : quad = let val ra' : int5 = getReg5 ra; val rs' : int5 = getReg5 rs; val sh' : int5 = int5 sh; val mb' : int5 = int5 mb; val me' : int5 = int5 me; in (* ra and rs are the "wrong" way round in the rlwinm instruction *) MformQuad (RLWINM, rs', ra', sh', mb', me', rc) end; val rlwinm = rlwinmRc false and rlwinmDot = rlwinmRc true (* require 0 <= shift < 32 *) fun slwi (ra : reg, rs : reg, shift : int) : quad = rlwinm (ra, rs, shift, 0, 31 - shift); (* Shift and set the condition codes. *) fun slwiDot (ra : reg, rs : reg, shift : int) : quad = rlwinmDot (ra, rs, shift, 0, 31 - shift); (* requires 0 <= shift < 32 *) fun srwi (ra : reg, rs : reg, shift : int) : quad = rlwinm (ra, rs, if shift = 0 then 0 else 32 - shift, shift, 31); fun srawi (ra : reg, rs : reg, shift : int) : quad = let val ra' : int5 = getReg5 ra; val rs' : int5 = getReg5 rs; val sh' : int5 = int5 shift; in XformQuad (EXT31, rs', ra', sh', op31ToInt10 SRAWI, false) end; fun mulli (rt : reg, ra : reg, SI) : quad = let val rt' : int5 = getReg5 rt; val ra' : int5 = getReg5 ra; in DformQuad (MULLI, rt' , ra' , SI) end; (*****************************************************************************) (* Instruction assembly routines - special registers *) (*****************************************************************************) local (* The 5-bit representation of the special registers *) val LR = int5 8; val CTR = int5 9; in fun mtlr (rs : reg) : quad = XformQuad (EXT31, getReg5 rs, LR, int5_0, op31ToInt10 MTSPR, false); fun mtctr (rs : reg) : quad = XformQuad (EXT31, getReg5 rs, CTR, int5_0, op31ToInt10 MTSPR, false); fun mflr (rt : reg) : quad = XformQuad (EXT31, getReg5 rt, LR, int5_0, op31ToInt10 MFSPR, false); fun mfctr (rt : reg) : quad = XformQuad (EXT31, getReg5 rt, CTR, int5_0, op31ToInt10 MFSPR, false); end; (*****************************************************************************) (* Instruction assembly routines - load and store *) (*****************************************************************************) fun lwz (rt : reg, ra : reg, SI : int16) : quad = let val rt' : int5 = getReg5 rt; val ra' : int5 = getReg5 ra; in DformQuad (LWZ, rt', ra', SI) end; fun lwzx (rt : reg, ra : reg, rb : reg) : quad = let val rt' : int5 = getReg5 rt; val ra' : int5 = getReg5 ra; val rb' : int5 = getReg5 rb; in XformQuad (EXT31, rt', ra', rb', op31ToInt10 LWZX, false) end; fun lbz (rt : reg, ra : reg, SI : int16) : quad = let val rt' : int5 = getReg5 rt; val ra' : int5 = getReg5 ra; in DformQuad (LBZ, rt', ra', SI) end; fun lbzx (rt : reg, ra : reg, rb : reg) : quad = let val rt' : int5 = getReg5 rt; val ra' : int5 = getReg5 ra; val rb' : int5 = getReg5 rb; in XformQuad (EXT31, rt', ra', rb', op31ToInt10 LBZX, false) end; fun stw (rs : reg, ra : reg, SI : int16) : quad = let val rs' : int5 = getReg5 rs; val ra' : int5 = getReg5 ra; in DformQuad (STW, rs', ra', SI) end; fun stwx (rs : reg, ra : reg, rb : reg) : quad = let val rs' : int5 = getReg5 rs; val ra' : int5 = getReg5 ra; val rb' : int5 = getReg5 rb; in XformQuad (EXT31, rs', ra', rb', op31ToInt10 STWX, false) end; fun stb (rs : reg, ra : reg, SI : int16) : quad = let val rs' : int5 = getReg5 rs; val ra' : int5 = getReg5 ra; in DformQuad (STB, rs', ra', SI) end; fun stbx (rs : reg, ra : reg, rb : reg) : quad = let val rs' : int5 = getReg5 rs; val ra' : int5 = getReg5 ra; val rb' : int5 = getReg5 rb; in XformQuad (EXT31, rs', ra', rb', op31ToInt10 STBX, false) end; fun stwu (rs : reg, ra : reg, SI : int16) : quad = let val rs' : int5 = getReg5 rs; val ra' : int5 = getReg5 ra; in DformQuad (STWU, rs', ra', SI) end; (*****************************************************************************) (* Instruction assembly routines - function calls *) (*****************************************************************************) (* blrl (sets LR) - used for function calls *) val blrlQuad : quad = XformQuad (EXT19, int5 20, int5_0, int5_0, op19ToInt10 BCLR, true); (* bctr (doesn't set LR) - used for tail-calls *) val bctrQuad : quad = XformQuad (EXT19, int5 20, int5_0, int5_0, op19ToInt10 BCCTR, false); (* blr (doesn't set LR) - used for function returns *) val blrQuad : quad = XformQuad (EXT19, int5 20, int5_0, int5_0, op19ToInt10 BCLR, false); (*****************************************************************************) (* Higher-level instruction assembly routines *) (*****************************************************************************) (* unconditional branch, pc-relative, don't set LR *) fun uncondBranch (disp : int24) : quad = IformQuad (B, disp, false, false); (* unconditional call, pc-relative, sets LR *) fun uncondCall (disp : int24) : quad = IformQuad (B, disp, false, true); (* unconditional call, pc-relative, set LR *) val call0Quad : quad = uncondCall int24_0; val branchAlwaysQuad : quad = uncondBranch int24_0; fun condBranch (cond : testCode, disp : int14) : quad = let val (bo : int5, bi : int5) = testToBiBoPair cond; in BformQuad (BC, bo, bi, disp, false, false) end; fun fixupCondBranch (instr : quad, disp : int14) : quad = let val (Quad (b1', b2', b3', b4')) = instr; val b1 = toInt b1'; val b2 = toInt b2'; val b3 = toInt b3'; val b4 = toInt b4'; val op1 = b1 div exp2_2; val bo = ((b1 mod exp2_2) * exp2_3) + (b2 div exp2_5); val bi = b2 mod exp2_5; val bd = (b3 * exp2_6) + (b4 div exp2_2); val aa_lk = b4 mod exp2_2; in if op1 = toInt (opToShort BC) andalso bd = 0 andalso aa_lk = 0 then BformQuad (BC, int5 bo, int5 bi, disp, false, false) else raise InternalError ("fixupCondBranch: can't fixup " ^ Int.toString (fromQuad instr)) end; fun fixupUncondBranch (instr : quad, disp : int24) : quad = let val (Quad (b1', b2', b3', b4')) = instr; val b1 = toInt b1'; val b2 = toInt b2'; val b3 = toInt b3'; val b4 = toInt b4'; val op1 = b1 div exp2_2; val li = ((b1 mod exp2_2) * exp2_22) + (b2 * exp2_14) + (b3 * exp2_6) + (b4 div exp2_2) val aa_lk = b4 mod exp2_2; in if op1 = toInt (opToShort B) andalso li = 0 andalso aa_lk = 0 then uncondBranch disp else raise InternalError ("fixupUncondBranch: can't fixup " ^ Int.toString (fromQuad instr)) end; fun fixupUncondCall (instr : quad, disp : int24) : quad = let val (Quad (b1', b2', b3', b4')) = instr; val b1 = toInt b1'; val b2 = toInt b2'; val b3 = toInt b3'; val b4 = toInt b4'; val op1 = b1 div exp2_2; val li = ((b1 mod exp2_2) * exp2_22) + (b2 * exp2_14) + (b3 * exp2_6) + (b4 div exp2_2) val aa_lk = b4 mod exp2_2; in if op1 = toInt (opToShort B) andalso li = 0 andalso aa_lk = 1 then uncondCall disp else raise InternalError ("fixupUncondCall: can't fixup " ^ Int.toString (fromQuad instr)) end; (*************************************************************************** Functions that deal with 32-bit immediates (for convenience). If these functions are called with regStackPtr as an argument, it's the caller's responsibility to keep the stack-offset caching scheme in a consistent state. ***************************************************************************) (* The addi and addis instructions treat r0 as 0 when used as a source *) fun addImmed (rt : reg, ra : reg, imm : int) : quad list = if rt regEq regZero then raise InternalError "addImmed: can't use r0 for add immediate" else let val (lo, hi) = splitSignedInt imm; in if isZero16 hi then if isZero16 lo andalso rt regEq ra then [] else [addi (rt, ra, lo)] else addis (rt, ra, hi) :: (if isZero16 lo then [] else [addi (rt, rt, lo)]) end; fun loadImmed (rt : reg, imm : int) : quad list = addImmed (rt, regZero, imm); (* Logical operations on immediates. The low-order part will always be non-zero for orImmed and andImmed because of the tag bit. *) fun orImmed (rt : reg, ra : reg, imm : int) : quad list = let val (lo, hi) = splitUnsignedInt imm; in if isZero16 hi then [ori (rt, ra, lo)] else [oris (rt, ra, hi), ori (rt, rt, lo)] end; fun xorImmed (rt : reg, ra : reg, imm : int) : quad list = let val (lo, hi) = splitUnsignedInt imm; in if isZero16 hi then if isZero16 lo andalso rt regEq ra then [] else [xori (rt, ra, lo)] else xoris (rt, ra, hi) :: (if isZero16 lo then [] else [xori (rt, rt, lo)]) end; (* We can't write andImmed in the same way as the above, because the andi./andis. instructions both zero-extend their immediate argument, which means they can't be combined without the use of an extra register. We use r0 as the auxiliary register. *) fun andImmed (rt : reg, ra : reg, imm : int) : quad list = let val (lo, hi) = splitUnsignedInt imm; in if isZero16 hi then [andiDot (rt, ra, lo)] else [addis (regZero, regZero, hi), (* r0 := hi << 16 *) ori (regZero, regZero, lo), (* r0 := r0 | lo *) and_ (rt, ra, regZero)] (* rt := ra & r0 *) end; (*****************************************************************************) (* Abstype for instruction addresses *) (*****************************************************************************) infix 6 wordAddrPlus wordAddrMinus; infix 4 addrLt addrEq; (* All indexes into the code vector have type "addrs". In this version of the code generator, we're using WORD addresses. Earlier versions use BYTE addresses, so don't get confused!. SPF 18/2/97 *) abstype addrs = Addr of int with (* + is defined to add an integer to an address *) fun (Addr a) wordAddrPlus b = Addr (a + b); (* The difference between two addresses is an integer *) fun (Addr a) wordAddrMinus (Addr b) = a - b; fun (Addr a) addrLt (Addr b) = a < b; fun (Addr a) addrEq (Addr b) = a = b; fun mkWordAddr n = Addr n; fun getWordAddr (Addr a) = a; fun getByteAddr (Addr a) = a * wordSize; val addrZero = mkWordAddr 0; val addrLast = mkWordAddr (exp2_29 - 1); (* A big number. *) end; (*****************************************************************************) (* Cache state *) (*****************************************************************************) datatype cacheState = Unreachable (* code is unreachable *) | Reachable of bool (* usable return address in LR *) ; (* This defines the information lattice for the cacheState datatype. It's actually a linear order. *) fun mergeCacheStates (Unreachable, state) = state | mergeCacheStates (Reachable lr1, Reachable lr2) = Reachable (lr1 andalso lr2) | mergeCacheStates (state, Unreachable) = state (* Use this when we modify (only) LR *) fun LRmodified Unreachable = Unreachable | LRmodified (Reachable true) = Reachable false | LRmodified state = state; (* Does LR cache the return address? *) fun LRcacheActive Unreachable = true (* sic *) | LRcacheActive (Reachable lr) = lr; (*****************************************************************************) (* Types for branch labels *) (*****************************************************************************) (* The addrs is the address of the branch instruction, so we can fix up the branch later, NOT the address we're branching to, which we don't know when we generate the label. The cacheState indicates whether what was cached at the source of the jump. *) datatype jumpFrom = Jump14From of addrs * cacheState (* branch instruction has 14-bit offset field *) | Jump24From of addrs * cacheState; (* branch instruction has 24-bit offset field *) fun isLongJump (Jump24From _ ) = true | isLongJump (Jump14From _ ) = false (* We need a jumpFrom ref, because we may have to indirect short branches via long branches if the offset won't fit into 14 bits *) type labels = (jumpFrom ref) list; val noJump : labels = []; (* This is the list of outstanding labels. Use a separate type from "labels" for extra security. *) type labList = (jumpFrom ref) list; (*****************************************************************************) (* The main "code" datatype *) (*****************************************************************************) datatype const = WVal of machineWord (* an existing constant *) | CVal of code (* a forward-reference to another function *) | HVal of addrs ref (* a handler *) (* Constants which are too far to go inline in the code are put in a list and put at the end of the code. They are arranged so that the garbage collector can find them and change them as necessary. A reference to a constant is treated like a forward reference to a label. *) (* A code list is used to hold a list of code-vectors which must have the address of this code-vector put into it. *) and setCodeseg = Unset | Set of cseg (* Used for completing forward references. *) and code = Code of { codeVec: cseg, (* This segment is used as a buffer. When the procedure has been code generated it is copied into a new segment of the correct size *) ic: addrs ref, (* Pointer to first free location in "codevec" *) constVec: (const * addrs) list ref, (* Constants used in the code *) numOfConsts: int ref, (* size of constVec *) stackReset: int ref, (* Distance to reset the stack before the next instr. *) pcOffset: int ref, (* Offset of code in final segment. *) (* This is used also to test for identity of code segments. *) labelList: labList ref, (* List of outstanding short branches. *) longestBranch: addrs ref, (* Address of the earliest short branch.*) procName: string, (* Name of the procedure. *) otherCodes: code list ref, (* Other code vectors with forward references to this vector. *) resultSeg: setCodeseg ref, (* The segment as the final result. *) mustCheckStack: bool ref, (* Set to true if stack check must be done. *) justComeFrom: labels ref, (* The label(s) we have just jumped from. *) selfCalls: addrs list ref, (* List of recursive calls to patch up. *) selfJumps: labels ref, (* List of recursive tail-calls to patch up. *) noClosure: bool, (* should we make a closure from this? *) cacheState: cacheState ref, (* Do we know anything useful here? *) needReturn: bool ref, (* Do we need to load regReturn in the prelude? *) printAssemblyCode:bool, (* Whether to print the code when we finish. *) printStream: string->unit (* The stream to use *) }; (* Invariant: the cached information in the justComeFrom list does *not* get incorporated into the cacheState until the branches are fixed up. This is so we can determine whether an instruction is only reachable by branches, in which case we may be able to perform the important null-jump optimisation. SPF 1/12/95 *) (*****************************************************************************) (* Auxiliary functions on "code" *) (*****************************************************************************) fun codeVec (Code {codeVec,...}) = codeVec; fun ic (Code {ic,...}) = ic; fun constVec (Code {constVec,...}) = constVec; fun numOfConsts (Code {numOfConsts,...}) = numOfConsts; fun stackReset (Code {stackReset ,...}) = stackReset; fun pcOffset (Code {pcOffset,...}) = pcOffset; fun labelList (Code {labelList,...}) = labelList; fun longestBranch (Code {longestBranch,...}) = longestBranch; fun procName (Code {procName,...}) = procName; fun otherCodes (Code {otherCodes,...}) = otherCodes; fun resultSeg (Code {resultSeg,...}) = resultSeg; fun mustCheckStack (Code {mustCheckStack,...}) = mustCheckStack; fun justComeFrom (Code {justComeFrom,...}) = justComeFrom; fun selfCalls (Code {selfCalls,...}) = selfCalls; fun selfJumps (Code {selfJumps,...}) = selfJumps; fun noClosure (Code {noClosure,...}) = noClosure; fun cacheState (Code {cacheState,...}) = cacheState; fun scSet (Set x) = x | scSet _ = raise Match; fun isSet (Set _) = true | isSet _ = false fun unreachable (Code {justComeFrom, cacheState, ...}) = case (justComeFrom, cacheState) of (ref [], ref Unreachable) => true | _ => false; (* Test for identity of the code segments by testing whether the pcOffset ref is the same. N.B. NOT its contents. *) infix is; fun a is b = (pcOffset a = pcOffset b); fun sameConst (WVal w1, WVal w2) = wordEq (w1, w2) | sameConst (HVal h1, HVal h2) = h1 = h2 | sameConst (CVal c1, CVal c2) = c1 is c2 | sameConst (_, _) = false; val codesize = 32; (* bytes. Initial size of segment. *) (* create and initialise a code segment *) fun codeCreate (noClosure, name, parameters) : code = let val words = codesize div 4 in Code { codeVec = csegMake words, (* a byte array *) ic = ref addrZero, constVec = ref [], numOfConsts = ref 0, stackReset = ref 0, (* stack adjustment in WORDs *) pcOffset = ref 0, (* only non-zero after code is copied *) labelList = ref [], longestBranch = ref addrLast, (* None so far *) procName = name, otherCodes = ref [], resultSeg = ref Unset, (* Not yet done *) mustCheckStack = ref false, justComeFrom = ref [], selfCalls = ref [], selfJumps = ref [], noClosure = noClosure, cacheState = ref (Reachable true), needReturn = ref false, printAssemblyCode = DEBUG.getParameter DEBUG.assemblyCodeTag parameters, printStream = DEBUG.getParameter DEBUG.compilerOutputTag parameters } end; (*****************************************************************************) (* Code for LR caching *) (*****************************************************************************) fun mergeCacheStateList (s1, []) = s1 | mergeCacheStateList (s1, ref (Jump14From (_, s2)) :: rest) = mergeCacheStateList (mergeCacheStates (s1, s2), rest) | mergeCacheStateList (s1, ref (Jump24From (_, s2)) :: rest) = mergeCacheStateList (mergeCacheStates (s1, s2), rest); (* Called when the preceding instruction causes an unconditional transfer of control. Used to reset any caching mechanisms (currently only for LR caching). SPF 30/11/95 *) fun cancelFallThrough (Code {cacheState, ...}) : unit = cacheState := Unreachable; (* Called when control may reach the current point other than by fall-through. SPF 30/11/95 *) (* If we clear the LR cache we need to load the return register in the prelude. *) fun clearAllCaches (Code {cacheState, needReturn, ...}) : unit = (cacheState := Reachable false; needReturn := true); (* We never actually modify the link-register cache on its own fun clearLRCache (Code {cacheState, ...}) : unit = (cacheState := LRmodified (!cacheState); needReturn := true); *) fun branchInPoint (Code {cacheState, justComeFrom, ...}) : unit = cacheState := mergeCacheStateList (!cacheState, !justComeFrom); (* Does LR contain a usable return address? We mustn't forget to check all the jumps-in that we haven't fixed up yet. SPF 30/11/95 *) fun returnAddrIsCached (Code {cacheState, justComeFrom, ...}) : bool = LRcacheActive (mergeCacheStateList (!cacheState, !justComeFrom)); (*****************************************************************************) (* Getting and setting quads *) (*****************************************************************************) (* Put 4 bytes at a given offset in the segment. *) (* Write out high order bytes followed by low order. Assume all arguments are +ve or zero. *) fun setQuad (Quad (b1,b2,b3,b4), addr:addrs, seg:cseg) : unit = let val a : int = getByteAddr addr; in csegSet (seg, a, Word8.fromLargeWord(Word.toLargeWord b1)); csegSet (seg, a + 1, Word8.fromLargeWord(Word.toLargeWord b2)); csegSet (seg, a + 2, Word8.fromLargeWord(Word.toLargeWord b3)); csegSet (seg, a + 3, Word8.fromLargeWord(Word.toLargeWord b4)) end; fun getQuad (addr:addrs, seg:cseg) : quad = let val a : int = getByteAddr addr; val b1 = Word.fromLargeWord(Word8.toLargeWord(csegGet (seg, a))) val b2 = Word.fromLargeWord(Word8.toLargeWord(csegGet (seg, a + 1))) val b3 = Word.fromLargeWord(Word8.toLargeWord(csegGet (seg, a + 2))) val b4 = Word.fromLargeWord(Word8.toLargeWord(csegGet (seg, a + 3))) in Quad (b1, b2, b3, b4) end; (* generate a quad and increment instruction counter *) fun genCodeQuad (instr : quad, cvec : code) : unit = let val addr = ! (ic cvec) in setQuad (instr, addr, codeVec cvec); ic cvec := addr wordAddrPlus 1 end; fun getCodeQuad (addr : addrs, cvec : code) : quad = let val seg = codeVec cvec; in getQuad (addr, seg) end; fun setCodeQuad (instr : quad, addr : addrs, cvec : code) : unit = let val seg = codeVec cvec; in setQuad (instr, addr, seg) end; (*****************************************************************************) (* Functions dealing with constants *) (*****************************************************************************) (* Make a reference to another procedure. Usually this will be a forward *) (* reference but it may have been compiled already, in which case we can *) (* put the code address in now. *) fun codeConst (Code {resultSeg = ref(Set seg), ... }, into) = (* Already done. *) WVal (toMachineWord(csegAddr seg)) | codeConst (r, into) = (* forward *) (* Add the referring procedure onto the list of the procedure referred to if it is not already there. This makes sure that when the referring procedure is finished and its address is known the address will be plugged in to every procedure which needs it. *) let fun onList x [] = false | onList x (c::cs) = (x is c) orelse onList x cs; val codeList = ! (otherCodes r); in if onList into codeList then () else otherCodes r := into :: codeList; CVal r end (*****************************************************************************) (* Functions dealing with labels *) (*****************************************************************************) (* The cvec holds a list of short branches so that they can be extended to long branches before they go out of range. If we fix up a short branch, we must call "removeLabel" to purge it from this list. To keep things simple, we call "removeLabel" whenever we fix up a jump - if the label is long, or if it doesn't appear in the list (which is the case for branhes backwards), we just won't find it in the list. SPF 21/9/95 *) fun removeLabel (lab : addrs, cvec) : unit = let fun removeEntry ([]: labList) : labList = [] | removeEntry ((entry as ref (Jump24From _)) :: t) = removeEntry t (* we discard all long jumps *) | removeEntry ((entry as ref (Jump14From (addr,_))) :: t) = if lab addrEq addr then removeEntry t else let val U : unit = if addr addrLt !(longestBranch cvec) then longestBranch cvec := addr else (); in entry :: removeEntry t end; in (* We recompute the longest 14-bit branch. *) longestBranch cvec := addrLast; labelList cvec := removeEntry (! (labelList cvec)) end; (* Makes a new short label. Called immediately after the jump has been generated, which accounts for the ~1. *) fun makeShortLabel (cvec : code) : jumpFrom ref = let val here : addrs = ! (ic cvec) wordAddrPlus ~1; val lab = ref (Jump14From (here, !(cacheState cvec))); in if here addrLt !(longestBranch cvec) then longestBranch cvec := here else (); labelList cvec := lab :: !(labelList cvec); lab end; (* Makes a new long label. Called immediately after the jump has been generated, which accounts for the ~1. *) fun makeLongLabel (cvec : code) : jumpFrom ref = let val here : addrs = ! (ic cvec) wordAddrPlus ~1; val lab = ref (Jump24From (here, !(cacheState cvec))); in (* longestBranch only refers to *short* branches *) lab end; fun getCallAddrs (cvec : code) : addrs = let val here = ! (ic cvec) wordAddrPlus ~1; in here end; (* fix up a call *) fun reallyFixCall (addr : addrs, target : addrs, cvec : code) : unit = let (* Compute offset in words, not bytes *) val diff : int = target wordAddrMinus addr; val diff24 : int24 = if is24Bit diff then int24 diff else raise InternalError "call too far (24-bit offset)" val oldInstr : quad = getCodeQuad (addr, cvec); val newInstr : quad = fixupUncondCall (oldInstr, diff24); in setCodeQuad (newInstr, addr, cvec) end fun reallyFixupBranch (Jump14From (addr, _), target : addrs, cvec : code) : unit = let (* Compute offset in words, not bytes *) val diff : int = target wordAddrMinus addr; val diff14 : int14 = if is14Bit diff then int14 diff else raise InternalError "jump too far (14-bit offset)" (* We're about to fix up the jump, so remove it from the list of pending short jumps. *) val U : unit = removeLabel (addr, cvec); val oldInstr : quad = getCodeQuad (addr, cvec); val newInstr : quad = fixupCondBranch (oldInstr, diff14); in setCodeQuad (newInstr, addr, cvec) end | reallyFixupBranch (Jump24From (addr, _), target : addrs, cvec : code) : unit = let (* Compute offset in words, not bytes *) val diff : int = target wordAddrMinus addr; val diff24 : int24 = if is24Bit diff then int24 diff else raise InternalError "jump too far (24-bit offset)" val oldInstr : quad = getCodeQuad (addr, cvec); val newInstr : quad = fixupUncondBranch (oldInstr, diff24); in setCodeQuad (newInstr, addr, cvec) end; fun reallyFixupBranches (target : addrs, l : labels, cvec : code) : unit = List.app (fn (ref x) => reallyFixupBranch (x, target, cvec)) l; (* Recursive branches can be treated just like ordinary branches. *) val fixupRecursiveBranches = reallyFixupBranches; fun fixupRecursiveCalls (target : addrs, l : addrs list, cvec : code) : unit = List.app (fn (x : addrs) => reallyFixCall (x, target, cvec)) l; (* Deal with a pending fix-up. *) fun reallyFixup cvec = let val jcf = justComeFrom cvec; val here = ! (ic cvec); in case ! jcf of [] => () | labs => ( branchInPoint cvec; reallyFixupBranches (here, labs, cvec); jcf := [] ) end; (*****************************************************************************) (* Code-generation functions (1) *) (*****************************************************************************) (* At the moment there are two kinds of operations that can be left pending and are not actually generated immediately. Changing the real stack pointer is not generated immediately because often these accumulate and sometimes even cancel out. Fixing up a branch is not done immediately in case we are going to jump somewhere else. If both the branch and stack movement are deferred the branch is assumed to have happened first. *) (* Generate an instruction. This may involve actually fixing up any pending branches whose target is immediately prior to the current instruction. It doesn't fix up the stack, so it mustn't be used naively. It *does* fix up branches-in, so it mustn't be used for branch-out instructions either. Also, it doesn't check for pending-jump overflow. *) fun genRawInstruction (instr : quad, cvec : code) : unit = if unreachable cvec then () else let val U : unit = reallyFixup cvec; in genCodeQuad (instr, cvec) end; fun genRawInstructionList (l : quad list, cvec : code) : unit = List.app (fn (x : quad) => genRawInstruction (x, cvec)) l; (* This must use the raw instruction generator, because it's used by "fixup", which is called from "checkBranchList, which is used by genInstruction. We just have to set maxDiff in checkBranchList sufficiently conservatively (small) so that any stack adjustment caused by fixup doesn't cause a pending-jump overflow. *) fun genPendingStackAdjustment cvec : unit = let val sr = stackReset cvec; val adj = !sr * 4; val U : unit = sr := 0; in genRawInstructionList (addImmed (regStackPtr, regStackPtr, adj), cvec) end; (* called immediately before a trap instruction is generated *) fun genTrapCacheFlush cvec : unit = genPendingStackAdjustment cvec; (*****************************************************************************) (* Functions that implement jump chaining. *) (*****************************************************************************) (* Apparently fix up jumps - actually just record where we have come from *) fun fixup (lab : labels, cvec : code) : unit = let (* If the jump we are fixing up is immediately preceding we can remove it. This is only safe if we've exited, as otherwise the current instruction might be the target of a jump backwards, or it might be the start of a handler. N.B. this *can* happen if the body of the handler is trivial, so that it just falls through to the post-handler code. I discovered this the hard way, of course. SPF 27/6/95. Note: now we've introduced LR caching, we have to merge the LR cache state of the label into the current LR cache state. (Otherwise we would get problems if we had LR uncached, did an unconditional jump, set the LR state cached because the code is unreachable then fixed up the jump to arrive at the code.) SPF 30/11/95 I've now delayed the state merging, so null-jump optimisation is back on the agenda! (The former version merged the states too early, so we couldn't determine whether we had "exited".) SPF 1/12/95 *) fun checkLabs [] = [] | checkLabs (lab :: labs) = let val icRef : addrs ref = ic cvec; in case !lab of Jump14From (addr, cachedState) => if !icRef wordAddrMinus addr = 1 then let (* simply skip back one instruction *) val U : unit = icRef := addr; (* remove the label from the "pending jumps" list *) val U : unit = removeLabel (addr, cvec); (* update the cached state, to reflect the dummy fixup *) val U : unit = cacheState cvec := mergeCacheStates (!(cacheState cvec), cachedState); in labs end else lab :: checkLabs labs | Jump24From (addr, cachedState) => if !icRef wordAddrMinus addr = 1 then let (* simply skip back one instruction *) val U : unit = icRef := addr; (* update the cached state, to reflect the dummy fixup *) val U : unit = cacheState cvec := mergeCacheStates (!(cacheState cvec), cachedState); in labs end else lab :: checkLabs labs end; (* We can't perform the null-jump optimisation if we haven't exited. *) fun checkLabsCarefully l = case ! (cacheState cvec) of Unreachable => checkLabs l | _ => l; in case lab of [] => () (* we're not actually jumping from anywhere *) | _ => let (* Any pending stack reset must be done now. That may involve fixing up pending jumps. *) val U : unit = genPendingStackAdjustment cvec; in (* Add together the jumps to here, updating the cache state *) justComeFrom cvec := checkLabsCarefully lab @ !(justComeFrom cvec) end end; (*****************************************************************************) (* checkBranchList: do we need to extend any short jumps? *) (*****************************************************************************) (* If the longest branch is close to going out of range it must be converted into a long form. This occurs very rarely - how often does a conditional branch exceed a 2^13 words displacement? Perhaps we should reduce maxDiff just to test the code? *) fun checkBranchList (needed : int, cvec:code) : unit = let (* val maxDiff = 100; for testing purposes *) val maxDiff : int = (exp2_13 - 1000) - needed; fun inList x [] = false | inList x (h::t) = (x = h) orelse inList x t; (* Go down the list converting any long labels, and finding the longest remaining. *) fun convertLabels ([]:labList) : labList = [] | convertLabels (lab::labs) = (* If we are about to fix up this label there's no point in extending it. *) if inList lab (! (justComeFrom cvec)) then lab :: convertLabels labs else let (* Process the list starting at the end. The reason for this is that more recent labels appear before earlier ones. We must put the earliest labels in first because they may be about to go out of range. *) val convertRest = convertLabels labs; in (* Now do this entry. *) case !lab of Jump24From _ => (* shouldn't happen? *) convertRest | Jump14From (addr, cachedState) => let val here : addrs = !(ic cvec); in if here wordAddrMinus addr > maxDiff then let (* Getting close - convert it. *) (* fix up the short branch to here *) val U : unit = branchInPoint cvec; val U : unit = reallyFixupBranch (!lab, here, cvec); (* recompute "here", in case we've generated some code *) val here : addrs = !(ic cvec); (* long jump to the final destination *) val U : unit = genCodeQuad (branchAlwaysQuad, cvec); (* alter the jump state on the old label (and discard the new one) *) val U : unit = lab := Jump24From (here, cachedState); (* We don't fall through from here. *) val U : unit = cancelFallThrough cvec; in convertRest end else let (* Not ready to remove this. Just find out if this is an earlier branch and continue. *) val U : unit = if addr addrLt !(longestBranch cvec) then longestBranch cvec := addr else (); in lab :: convertRest end end end (* convertLabels *); in if !(ic cvec) wordAddrMinus !(longestBranch cvec) > maxDiff (* rare *) then let (* Must save the stack-reset, otherwise "fixup" will try to reset it. *) val sr = ! (stackReset cvec); val U : unit = stackReset cvec := 0; (* Must skip round the branches unless we have just taken an unconditional branch. *) val lab = if unreachable cvec then [] else let val U : unit = genRawInstruction (branchAlwaysQuad, cvec); val lab = [makeLongLabel cvec]; val U : unit = cancelFallThrough cvec; in lab end (* Find the new longest branch while converting the labels *) val U : unit = longestBranch cvec := addrLast; val U : unit = labelList cvec := convertLabels (! (labelList cvec)); val U : unit = fixup (lab, cvec); (* Continue with normal processing. *) in stackReset cvec := sr (* Restore old value. *) end else () end; (*****************************************************************************) (* Code-generation functions (2) *) (*****************************************************************************) (* genInstruction is like genRawInstruction, except that it checks for pending-jump overflow. *) fun genInstruction (instr : quad, cvec : code) : unit = let (* fix up any pending-overflow jumps *) val U : unit = checkBranchList (0, cvec); in genRawInstruction (instr, cvec) end; fun genInstructionList (l : quad list, cvec : code) = List.app (fn (x : quad) => genInstruction (x, cvec)) l; (* These functions are stack-naive. *) fun genAddImmed (rt: reg, ra : reg, imm : int, cvec) = genInstructionList (addImmed (rt, ra, imm), cvec) fun genLoadImmed (rt: reg, imm : int, cvec) = genInstructionList (loadImmed (rt, imm), cvec) (*****************************************************************************) (* Functions that need to know about the stack-pointer adjustment cache. *) (*****************************************************************************) (* Adds in the reset. *) fun resetStack (offset, cvec) : unit = stackReset cvec := ! (stackReset cvec) + offset; (* genMove can be safely used with regStackPtr *) fun genMove (rt : reg, ra :reg, cvec) = let val adj = if ra regEq regStackPtr then 4 * !(stackReset cvec) else 0; val U : unit = if rt regEq regStackPtr then stackReset cvec := 0 else (); in genInstructionList (addImmed (rt, ra, adj), cvec) end; (* Exported. Set a register to a particular offset in the stack. *) fun genStackOffset (reg, byteOffset, cvec) : unit = let val adj = byteOffset + (! (stackReset cvec)) * 4; in genInstructionList (addImmed (reg, regStackPtr, adj), cvec) end; (*****************************************************************************) (* Functions to generate (non-naive) branch instructions *) (*****************************************************************************) (* Generates an unconditional branch. *) fun unconditionalBranch (cvec : code) : labels = if unreachable cvec then [] else let (* generate stack adjustment (if necessary) *) val U : unit = genPendingStackAdjustment cvec; (* If we are branching and we have just arrived from somewhere else we can combine this jump with the one we had just made. If we had an unconditional branch just before, we don't need to actually put a branch. Note that this can only happen if the stack adjustment is zero; otherwise the call to genPendingStackAdjustment will have already fixed up the jumps when it generated the stack-adjustment code. *) (* Save the just-come-from list *) val oldLab = !(justComeFrom cvec); (* Zap the original list, so we don't fix it up. We don't merge the states here (though that would be safe); instead we'll eventually do it when we get to the target of the jumps. SPF 1/12/95 *) val U : unit = justComeFrom cvec := []; (* The following code is very delicate. If we've just made the code unreachable (by redirecting the incoming jumps), we must *not* generate a new jump/address pair, since the lower-level routines would suppress the generation of the jump, but would still to fix it up later via its label. SPF 1/12/95 *) val lab : labels = if unreachable cvec then oldLab else let (* generate the actual branch *) val U : unit = genInstruction (branchAlwaysQuad, cvec); in makeLongLabel cvec :: oldLab end; (* This must be *after* we've generated the label, as otherwise the label would propagate the wrong cacheState forwards. SPF 1/12/95 *) val U : unit = cancelFallThrough cvec; in lab end; fun putConditional (test : testCode, cvec : code) : labels = if unreachable cvec then [] (* SPF 5/6/95 *) else let val U : unit = genPendingStackAdjustment cvec; (* may generate code *) val U : unit = genInstruction (condBranch (test, int14_0), cvec); in (* Make a label for this instruction. *) [makeShortLabel cvec] end; (*************************************************************************** Functions for logical and arithmetic operations. ***************************************************************************) (* Most of the arithmetic operations are of this form. *) (* Since they won't trap, we don't need to fix-up the stack; however, can we be sure that the stack-pointer isn't one of the operands? Let's check! SPF 16/5/95 We now have to check whether we have to clear the RR cache too. SPF 1/1/95. *) fun genX31 (rt : reg, ra : reg, rb : reg, op2 : opCode31, rc : bool, cvec : code) : unit = let val U : unit = if rt regEq regStackPtr orelse ra regEq regStackPtr orelse rb regEq regStackPtr then genPendingStackAdjustment cvec else (); (* Get the 5-bit representation of the registers. *) val rt' : int5 = getReg5 rt; val ra' : int5 = getReg5 ra; val rb' : int5 = getReg5 rb; val op2' : int10 = op31ToInt10 op2 in genInstruction (XformQuad (EXT31, rt', ra', rb', op2', rc), cvec) end; (* The "logical" instructions have the fields in a funny order *) fun genAnd (ra : reg, rs : reg, rb : reg, cvec : code) : unit = genX31 (rs, ra, rb, AND, false, cvec); fun genOr (ra : reg, rs : reg, rb : reg, cvec : code) : unit = genX31 (rs, ra, rb, OR, false, cvec); fun genXor (ra : reg, rs : reg, rb : reg, cvec : code) : unit = genX31 (rs, ra, rb, XOR, false, cvec); (* The arithmetic instructions don't. *) fun genAdd (rt : reg, ra : reg, rb : reg, cvec : code) : unit = genX31 (rt, ra, rb, ADD, false, cvec); (* We have a subtract-from instruction, not a straight subtract. *) fun genSubfc (rt : reg, ra : reg, rb : reg, cvec : code) : unit = genX31 (rt, ra, rb, SUBFC, false, cvec); (* These versions set the condition codes, including SO *) fun genAddoDot (rt : reg, ra : reg, rb : reg, cvec : code) : unit = genX31 (rt, ra, rb, ADDO, true, cvec); fun genSubfcoDot (rt : reg, ra : reg, rb : reg, cvec : code) : unit = genX31 (rt, ra, rb, SUBFCO, true, cvec); fun genCmp (ra : reg, rb : reg, cvec : code) : unit = genX31 (regZero, ra, rb, CMP, false, cvec); fun genCmpl (ra : reg, rb : reg, cvec : code) : unit = genX31 (regZero, ra, rb, CMPL, false, cvec); (*************************************************************************** Moves to and from special registers. ***************************************************************************) fun genMtlr (rs : reg, cvec : code) : unit = genInstruction (mtlr rs, cvec); fun genMflr (rt : reg, cvec : code) : unit = genInstruction (mflr rt, cvec); fun genMtctr (rs : reg, cvec : code) : unit = genInstruction (mtctr rs, cvec); (* ... fun genMfctr (rt : reg, cvec : code) : unit = genInstruction (mfctr rt, cvec); .... *) (*************************************************************************** Load and Store operations. ***************************************************************************) (* The order of the parameters for "genLoad" and "genStore" is fixed by the generic interface, which makes it rather unnatural for this machine. C'est la vie. *) (* genLoad corrupts regTemp1 *) fun genLoad (offset : int, ra : reg, rt : reg, cvec : code) : unit = if rt regEq regTemp1 orelse ra regEq regTemp1 then raise InternalError ("genLoad: can't use " ^ regRepr regTemp1) else let (* Do we need to fix-up the stack pointer? *) val U : unit = if rt regEq regStackPtr then genPendingStackAdjustment cvec else (); val adjustedOffset : int = if ra regEq regStackPtr then offset + 4 * !(stackReset cvec) else offset; in if is16Bit adjustedOffset then genInstruction (lwz (rt, ra, int16 adjustedOffset), cvec) else ( genLoadImmed (regTemp1, adjustedOffset, cvec); genInstruction (lwzx (rt, ra, regTemp1), cvec) ) end; datatype storeWidth = STORE_WORD | STORE_BYTE (* genStore corrupts regTemp1 *) fun genStoreWord (rs : reg, offset : int, ra : reg, index: reg, cvec : code) : unit = if rs regEq regTemp1 orelse ra regEq regTemp1 then raise InternalError ("genStore: can't use " ^ regRepr regTemp1) else let (* Do we need to fix-up the stack pointer? *) val U : unit = if rs regEq regStackPtr then genPendingStackAdjustment cvec else (); val adjustedOffset : int = if ra regEq regStackPtr then offset + 4 * !(stackReset cvec) else offset in if index regNeq regNone then ( if adjustedOffset <> 0 then raise InternalError "genStore: index with non-zero offset" else (); (* Shift to form word index, masking off the tag bits. *) genInstruction (rlwinm (regTemp1, index, 2 - TAGBITS, 0, 31-2), cvec); genInstruction (stwx (rs, ra, regTemp1), cvec) ) else if is16Bit adjustedOffset then (* If we're pushing onto the stack we can update the stack pointer at the same time. DCJM 22/12/00 *) if ra regEq regStackPtr andalso offset = 0 andalso index regEq regNone then ( genInstruction (stwu(rs, ra, int16 adjustedOffset), cvec); stackReset cvec := 0 ) else genInstruction (stw(rs, ra, int16 adjustedOffset), cvec) else ( genLoadImmed (regTemp1, adjustedOffset, cvec); genInstruction (stwx (rs, ra, regTemp1), cvec) ) end; (* genStoreByte corrupts regTemp1 and regTemp2 *) fun genStoreByte (rs : reg, ra : reg, offset : int, index: reg, cvec : code) : unit = if rs regEq regTemp1 orelse ra regEq regTemp1 then raise InternalError ("genStoreByte: can't use " ^ regRepr regTemp1) else let (* Do we need to fix-up the stack pointer? *) val U : unit = if rs regEq regStackPtr then genPendingStackAdjustment cvec else (); val adjustedOffset : int = if ra regEq regStackPtr then offset + 4 * !(stackReset cvec) else offset; in (* Untag the value to store. *) genInstruction (srawi (regTemp2, rs, TAGBITS), cvec); if index regNeq regNone then ( if adjustedOffset <> 0 then raise InternalError "genStoreByte: index with non-zero offset" else (); (* Untag the index. *) genInstruction (srawi (regTemp1, index, TAGBITS), cvec); genInstruction (stbx (regTemp2, ra, regTemp1), cvec) ) else if is16Bit adjustedOffset then genInstruction (stb (regTemp2, ra, int16 adjustedOffset), cvec) else ( genLoadImmed (regTemp1, adjustedOffset, cvec); genInstruction (stbx (rs, ra, regTemp1), cvec) ) end; (* General purpose store function. *) fun genStore (rs : reg, offset : int, ra : reg, STORE_WORD, index: reg, cvec : code) = genStoreWord (rs, offset, ra, index, cvec) | genStore(rs : reg, offset : int, ra : reg, STORE_BYTE, index: reg, cvec : code) = genStoreByte (rs, ra, offset, index, cvec); (* Inline assignments since the RTS now supports it. *) val inlineAssignments: bool = true fun isIndexedStore _ = true (* for both word and byte. *) (* Exported - Can we store the value without going through a register? No. *) fun isStoreI (cnstnt: machineWord, _, _) : bool = false; fun genStoreI (cnstnt: machineWord, offset: int, rb: reg, width, index: reg, cvec: code) : unit = raise InternalError "Not implemented: genStoreI"; (* Store a value on the stack. This is used when the registers need to be saved, for more than 4 arguments or to push an exception handler. *) fun genPush (r, cvec) : unit = let (* Just adjust stackReset to decrement the virtual stack pointer; genStore handles everything else. *) val sr = stackReset cvec; val U : unit = sr := !sr - 1; in genStoreWord (r, 0, regStackPtr, regNone, cvec) (* corrupts regTemp1 *) end; (* Load a value and push it on the stack. Used when all the allocatable registers have run out. *) (* Corrupts regTemp1 and regZero. *) fun genLoadPush (offset : int, base : reg, cvec : code) : unit = ( genLoad (offset, base, regZero, cvec); (* corrupts regTemp1 *) genPush (regZero, cvec) (* corrupts regTemp1 *) ); (* This is false because there's no quicker way than loading into a register and then pushing that. *) val preferLoadPush = false; (*************************************************************************** Functions for handling compiled constants ***************************************************************************) (* N.B. genLoadConstant must be very careful to do nothing for unreachable code, because otherwise genStoreOp won't generate any code, but fixupConstantLoad will later try to fixup a non-existant load. SPF 28/11/95 *) fun genLoadConstant (cnstnt, destR : reg, cvec as Code{numOfConsts, constVec, ic, ...}) : unit = if unreachable cvec then () else ( reallyFixup cvec; (* Probably not needed on PPC but can't hurt. *) numOfConsts := ! numOfConsts + 1; (* Generate a pair of instruction containing tagged 0. We mustn't put in the real value at the moment because this is a byte segment and so the value won't be updated as a result of any garbage collection. *) let val (lo,hi) = splitSignedInt(tagged 0) in (* The g.c. and set_code_constant need to be able to combine the upper and lower halves of the constant. To simplify this make sure that we don't fix up a branch between the two. Also SetCodeConstant in the RTS assumes that the "ic" value points at an addis instruction and not a branch. *) checkBranchList (2, cvec); (* Record the address after any branch. *) constVec := (cnstnt, !ic) :: ! constVec; genInstruction (addis (destR, regZero, hi), cvec); genInstruction (ori (destR, destR, lo), cvec) end ); fun genLoadCoderef (rf : code, destR, cvec) : unit = if unreachable cvec then () else genLoadConstant (codeConst (rf, cvec), destR, cvec) type handlerLab = addrs ref; fun loadHandlerAddress (destR : reg, cvec : code) : handlerLab = let val lab : handlerLab = ref addrZero; in genLoadConstant (HVal lab, destR, cvec); lab end; fun fixupHandler (lab, cvec) : unit = ( genPendingStackAdjustment cvec; clearAllCaches cvec; reallyFixup cvec; lab := ! (ic cvec) ); (*************************************************************************** Functions calls and returns (plus raising exceptions) ***************************************************************************) datatype callKinds = Recursive (* The function calls itself. *) | ConstantFun of machineWord * bool (* A pre-compiled or io function. *) | CodeFun of code (* A static link call. *) | FullCall (* Full closure call *) (***************************************************************************** Calling conventions: FullCall: the caller loads the function's closure into regClosure and then (the code here) does an indirect jump through it. Recursive: the caller loads its own function's closure/static-link into regClosure and the code here does a jump to the start of the code. ConstantFun: a direct or indirect call through the given address. If possible the caller will have done the indirection for us and passed false as the indirection value. The exception is calls to IO functions where the address of the code itself is invalid. If the closure/static-link value is needed that will already have been loaded. CodeFun: the same as ConstantFun except that this is used only for static-link calls so is never indirect. *****************************************************************************) (* Call a function. We have to set the stack-check flag to ensure that the called procedure receives its full minStackCheck words allocation of "free" stack. *) fun callFunction (callKind, cvec as Code {selfCalls, mustCheckStack, ... }) : unit = (* Mustn't add to selfCalls list unless we're actually generating code! *) if unreachable cvec then () else ( case callKind of Recursive => (* bl L3 *) ( genPendingStackAdjustment cvec; genInstruction (call0Quad, cvec); selfCalls := getCallAddrs cvec :: ! selfCalls ) | FullCall => (* lwz regZero,0(regClosure); mtlr regZero; blrl *) ( genLoad (0, regClosure, regZero, cvec); genMtlr (regZero, cvec); genPendingStackAdjustment cvec; genInstruction (blrlQuad, cvec) ) | ConstantFun(w, false) => ( genLoadConstant (WVal w, regZero, cvec); genMtlr (regZero, cvec); genPendingStackAdjustment cvec; genInstruction (blrlQuad, cvec) ) | ConstantFun(w, true) => ( (* Indirect call. Used to call the RTS. *) genLoadConstant (WVal w, regClosure, cvec); genLoad (0, regClosure, regZero, cvec); genMtlr (regZero, cvec); genPendingStackAdjustment cvec; genInstruction (blrlQuad, cvec) ) | CodeFun c => ( genLoadCoderef (c, regZero, cvec); genMtlr (regZero, cvec); genPendingStackAdjustment cvec; genInstruction (blrlQuad, cvec) ); clearAllCaches cvec; (* Clear the cache *) mustCheckStack := true ); (* Call, rather than jump to, the exception code so that we have the address of the caller if we need to produce an exception trace. Unlike most RTS calls we call without an indirection. *) (* TODO: callFunction will cause us to generate a stack check even if we don't actually need it. *) fun raiseException cvec = ( genLoad(MemRegisterRaiseException, regMemRegs, regZero, cvec); genMtlr(regZero, cvec); genInstruction(blrlQuad, cvec); (* That's the end of this basic block, even though we've "called" the handler *) cancelFallThrough cvec ) (* Tail recursive jump to a function. We have to set the stack-check flag to enable the user to break out of loops. Exception: (hack!) we don't have to do this if we are calling a pre-compiled function (PureCode) because that can't possibly lead to an infinite regress. *) fun jumpToFunction (callKind, returnReg, cvec as Code{selfJumps, mustCheckStack, ...}) : unit = (* Mustn't add to selfJumps list unless we're actually generating code! *) if unreachable cvec then () else ( case callKind of Recursive => (* mr regReturn,returnReg; mtlr returnReg; b L4 *) ( mustCheckStack := true; (* initialise regReturn and LR *) if regReturn regEq returnReg then () else genMove (regReturn, returnReg, cvec); if returnAddrIsCached cvec then () else genMtlr (returnReg, cvec); genPendingStackAdjustment cvec; selfJumps := unconditionalBranch cvec @ !selfJumps ) | FullCall => (* lwz regZero,0(regClosure); mtctr regZero; mtlr returnReg; bctr *) ( mustCheckStack := true; genLoad (0, regClosure, regZero, cvec); genMtctr (regZero, cvec); if returnAddrIsCached cvec then () else genMtlr (returnReg, cvec); genPendingStackAdjustment cvec; genInstruction (bctrQuad, cvec) ) | ConstantFun(w, false) => (* mtctr regZero; mtlr returnReg; bctr *) ( mustCheckStack := true; genLoadConstant (WVal w, regZero, cvec); genMtctr (regZero, cvec); if returnAddrIsCached cvec then () else genMtlr (returnReg, cvec); genPendingStackAdjustment cvec; genInstruction (bctrQuad, cvec) ) | ConstantFun(w, true) => ( (* Indirect jumps are used to call into the RTS. No need to check the stack. *) genLoadConstant (WVal w, regClosure, cvec); genLoad (0, regClosure, regZero, cvec); genMtctr (regZero, cvec); if returnAddrIsCached cvec then () else genMtlr (returnReg, cvec); genPendingStackAdjustment cvec; genInstruction (bctrQuad, cvec) ) | CodeFun c => ( mustCheckStack := true; genLoadCoderef (c, regZero, cvec); genMtctr (regZero, cvec); if returnAddrIsCached cvec then () else genMtlr (returnReg, cvec); genPendingStackAdjustment cvec; genInstruction (bctrQuad, cvec) ); (* That's the end of this basic block *) cancelFallThrough cvec ); (* Return and remove args from stack. *) fun returnFromFunction (returnReg, args, cvec) : unit = let (* mtlr resReg; blr *) val U : unit = resetStack (args, cvec); (* Add in the reset. *) val U : unit = if returnAddrIsCached cvec then () else genMtlr (returnReg, cvec); val U : unit = genPendingStackAdjustment cvec; val U : unit = genInstruction (blrQuad, cvec); in (* That's the end of this basic block *) cancelFallThrough cvec end; (* Only used for while-loops. *) fun jumpback (lab, stackCheck, cvec) : unit = let val U : unit = genPendingStackAdjustment cvec; (* Put in a stack check. This is used to allow the code to be interrupted. *) val U : unit = if stackCheck then let val () = genLoad(MemRegisterStackLimit, regMemRegs, regZero, cvec); val () = genCmpl(regStackPtr, regZero, cvec); val skipTrap = putConditional (GeInv, cvec) in genLoad(MemRegisterStackOverflow, regMemRegs, regZero, cvec); genMtlr(regZero, cvec); genInstruction(blrlQuad, cvec); fixup(skipTrap, cvec); clearAllCaches cvec end else (); val U : unit = reallyFixup cvec; val wordOffset : int = lab wordAddrMinus (! (ic cvec)); val U : unit = genInstruction (uncondBranch (int24 wordOffset), cvec) in cancelFallThrough cvec end; (* Allocate store and put the resulting pointer in the result register. *) (* Corrupts regTemp1 and regTemp2 *) fun allocStore (length : int, flag : Word8.word, resultReg : reg, cvec : code) : unit = if length < 1 orelse exp2_24 <= length then raise InternalError "allocStore: bad length" else let val bytes : int = (length + 1) * 4; val lengthWord : int = length + (Word8.toInt flag * exp2_24); val U : unit = genPendingStackAdjustment cvec; (* Load r12 with the length word first. This simplifies recovering if we get a trap since we then know how much space we actually wanted. *) val U : unit = genLoadImmed(regTemp2, lengthWord, cvec); (* addi rhp, rhp, -bytes ; cmpl rhp,rhl; bge+ L1 *) val U : unit = genInstructionList (addImmed (regHeapPtr, regHeapPtr, ~bytes), cvec) val U : unit = genCmpl (regHeapPtr, regHeapLim, cvec); val skipTrap = putConditional (GeInv, cvec) in genLoad(MemRegisterHeapOverflow, regMemRegs, regZero, cvec); genMtlr(regZero, cvec); genInstruction(blrlQuad, cvec); fixup(skipTrap, cvec); clearAllCaches cvec; (* If we've taken the trap LR won't be valid. *) genAddImmed(resultReg, regHeapPtr, 4, cvec); genInstruction(stw(regTemp2, regHeapPtr, int16_0), cvec) end; (* allocStore *) (* Remove the mutable bit; only safe for word objects. *) (* corrupts regTemp1 and regTemp2 *) fun setFlag (baseReg : reg, cvec : code, flag : Word8.word) : unit = let val flagRep : int = Word8.toInt flag; in genLoadImmed (regTemp2, flagRep, cvec); genStoreByte (regTemp2, baseReg, ~4, regNone, cvec) (* corrupts regTemp1 *) end (* Don't need to do anything on this machine. *) val completeSegment = (fn code => ()); (*************************************************************************** General operations ***************************************************************************) datatype instrs = InstrMove | InstrAddA | InstrSubA | InstrRevSubA | InstrMulA | InstrAddW (* Added and reinstated word functions DCJM 17/4/00. *) | InstrSubW | InstrRevSubW | InstrMulW | InstrDivW | InstrModW | InstrOrW | InstrAndW | InstrXorW | InstrLoad | InstrLoadB | InstrVeclen | InstrVecflags | InstrPush (* added 12/9/94 SPF for v2.08 compiler *) | InstrUpshiftW (* logical shift left *) | InstrDownshiftW (* logical shift right *) | InstrDownshiftArithW (* arithmetic shift right *) | InstrGetFirstLong | InstrStringLength | InstrSetStringLength | InstrBad; (* Can the we use the same register as the source and destination of an instructions? On this machine - yes. *) val canShareRegs : bool = true; (* exported versions *) val instrMove = InstrMove; val instrAddA = InstrAddA; val instrSubA = InstrSubA; val instrRevSubA = InstrRevSubA; val instrMulA = InstrMulA; val instrAddW = InstrAddW; val instrSubW = InstrSubW; val instrMulW = InstrMulW; val instrDivW = InstrDivW; val instrModW = InstrModW; val instrRevSubW = InstrRevSubW; val instrOrW = InstrOrW; val instrAndW = InstrAndW; val instrXorW = InstrXorW; val instrLoad = InstrLoad; val instrLoadB = InstrLoadB; val instrVeclen = InstrVeclen; val instrVecflags = InstrVecflags; val instrPush = InstrPush; val instrUpshiftW = InstrUpshiftW; val instrDownshiftW = InstrDownshiftW; val instrDownshiftArithW = InstrDownshiftArithW; val instrGetFirstLong = InstrGetFirstLong; val instrStringLength = InstrStringLength; val instrSetStringLength = InstrSetStringLength val instrBad = InstrBad; datatype tests = Short | Long | Arb of testCode | Wrd of testCode; val testNeqW = Wrd Ne; val testEqW = Wrd Eq; val testGeqW = Wrd Ge; val testGtW = Wrd Gt; val testLeqW = Wrd Le; val testLtW = Wrd Lt; val testNeqA = Arb Ne; val testEqA = Arb Eq; val testGeqA = Arb Ge; val testGtA = Arb Gt; val testLeqA = Arb Le; val testLtA = Arb Lt; (*************************************************************************** Auxilariary functions ***************************************************************************) (* Test a single argument and trap if it is long. The result is the instruction address of the trap, and is used to jump back to if the instruction overflows. *) fun genTagTest1 (r : reg, cvec : code) : addrs = let (* slwi. r0,r,31 - extract tag bit bne+ lab1 lab: lwz r0,16(r13) mtlr r0 blrl lab1: *) val U : unit = genInstruction (slwiDot (regZero, r, 31), cvec); (* Jump round the trap. We invert the prediction flag here because the default for a forward jump is "not taken" and this normally will be. *) val skipTrap = putConditional (NeInv, cvec) val U : unit = genTrapCacheFlush cvec; val lab : addrs = ! (ic cvec); val U : unit = genLoad(MemRegisterArbEmulation, regMemRegs, regZero, cvec); val U : unit = genMtlr(regZero, cvec); val U : unit = genInstruction(blrlQuad, cvec); val U : unit = fixup(skipTrap, cvec); val U : unit = clearAllCaches cvec; (* If we've taken the trap LR won't be valid. *) in lab end; (* Test a pair of arguments and trap if either is long. The result is the instruction address of the trap, and is used to jump back to if the instruction overflows. *) fun genTagTest2 (rx : reg, ry : reg, cvec : code) : addrs = if rx regEq ry then genTagTest1 (rx, cvec) else let val U : unit = genAnd (regTemp1, rx, ry, cvec); in genTagTest1 (regTemp1, cvec) end; fun genOverflowTest (lab : addrs, cvec : code) : unit = let val here : addrs = ! (ic cvec); val wordOffset : int = lab wordAddrMinus here; in (* Jump back to the RTS trap in the tag test code. We need to invert the prediction test here because the default for a backwards jump is to assume it is taken and this normally won't be. *) genInstruction (condBranch (SoInv, int14 wordOffset), cvec) end; (* genOverflowTest *) (*************************************************************************** RI implementation of comparisons ***************************************************************************) (* All are implemented. *) fun isCompRR tc = true; (* Is this argument acceptable as an immediate or should it be *) (* loaded into a register? *) fun isCompRI (tc, cnstnt:machineWord) : bool = case tc of Short => true | Long => true | Arb _ => isShort cnstnt andalso isTaggable16Bit (toInt (toShort cnstnt)) | Wrd _ => isShort cnstnt andalso isTaggable16BitUnsigned (toInt (toShort cnstnt)) ; fun genCmpi (ra : reg, SI : int16, cvec : code) : unit = genInstruction (cmpi (ra, SI), cvec); fun genCmpli (ra : reg, UI : int16, cvec : code) : unit = genInstruction (cmpli (ra, UI), cvec); (* Fixed and arbitrary precision comparisons. *) fun compareAndBranchRR (r1, r2, tc, cvec) : labels = case tc of Wrd test => let val U : unit = genCmpl (r1, r2, cvec); (* Word comparisons are unsigned. *) in putConditional (test, cvec) end | Arb test => let (* We generate the following code: and/or rtemp1, r1, r2 slwiDot rtemp1, rtemp1, 31 bne+ L1 lwz r0,52(r13) mtlr r0 blrl cmp r1, r2 bc label If either (or, both, for an equality test) argument is long, then rtemp1 becomes zero, which means we take the trap which causes the RTS to emulate the immediately following comparison. *) val U : unit = case test of Eq => genOr (regTemp1, r1, r2, cvec) | Ne => genOr (regTemp1, r1, r2, cvec) | _ => genAnd (regTemp1, r1, r2, cvec); val U : unit = genInstruction (slwiDot (regTemp1, regTemp1, 31), cvec); val U : unit = genTrapCacheFlush cvec; val skipTrap = putConditional (NeInv, cvec) val U : unit = genLoad(MemRegisterArbEmulation, regMemRegs, regZero, cvec); val U : unit = genMtlr(regZero, cvec); val U : unit = genInstruction(blrlQuad, cvec); val U : unit = fixup(skipTrap, cvec); val U : unit = genCmp (r1, r2, cvec); val U : unit = clearAllCaches cvec; (* If we've taken the trap LR won't be valid. *) in putConditional (test, cvec) end | _ => raise InternalError "compareAndBranchRR: Unimplemented test"; fun compareAndBranchRI (r:reg, cnstnt:machineWord, tc, cvec) : labels = case tc of Short => let val U : unit = genInstruction (andiDot (regTemp1, r, int16_1), cvec); in (* jump if the result is non-zero *) putConditional (Ne, cvec) end | Long => let val U : unit = genInstruction (andiDot (regTemp1, r, int16_1), cvec); in (* jump if the result is zero *) putConditional (Eq, cvec) end | Wrd test => let val c : int = toInt (toShort cnstnt); val ui : int16 = unsignedInt16 (tagged c); val U : unit = genCmpli (r, ui, cvec); (* Word comparisons are unsigned. *) in putConditional (test, cvec) end | Arb test => let val c : int = toInt (toShort cnstnt); val si : int16 = int16 (tagged c); in (* If we are testing for equality with a constant then we can simply test directly. *) case test of Eq => (genCmpi (r, si, cvec); putConditional (test, cvec)) | Ne => (genCmpi (r, si, cvec); putConditional (test, cvec)) | _ => let (* We generate the following code: slwi rtemp1, r, 31 slwiDot rtemp1, r, 31 bne+ L1 lwz r0,52(r13) mtlr r0 blrl cmpi r, si bc label If the argument is long, then rtemp1 becomes zero, which means we take the trap which causes the RTS to emulate the immediately following comparison. *) val U : unit = genInstruction (slwiDot (regTemp1, r, 31), cvec); val U : unit = genTrapCacheFlush cvec; val skipTrap = putConditional (NeInv, cvec) val U : unit = genLoad(MemRegisterArbEmulation, regMemRegs, regZero, cvec); val U : unit = genMtlr(regZero, cvec); val U : unit = genInstruction(blrlQuad, cvec); val U : unit = fixup(skipTrap, cvec); val U : unit = genCmpi (r, si, cvec); val U : unit = clearAllCaches cvec; (* If we've taken the trap LR won't be valid. *) in putConditional (test, cvec) end end; (* compareAndBranchRI *) (*************************************************************************** RR implementation of general operations ***************************************************************************) (* Is there a general register/register operation? Some operations may not be implemented because this machine does not have a suitable instruction or simply because they have not yet been added to the code generator. It is possible for an instruction to be implemented as a register/immediate operation but not as a register/register operation (e.g. multiply) *) fun instrIsRR (instr : instrs) : bool = case instr of InstrMove => true | InstrAddA => true | InstrSubA => true | InstrRevSubA => true | InstrMulA => true | InstrAddW => true | InstrSubW => true | InstrRevSubW => true | InstrMulW => true | InstrDivW => true | InstrModW => true | InstrOrW => true | InstrAndW => true | InstrXorW => true | InstrLoad => true | InstrLoadB => true | InstrVeclen => false (* immediate form only *) | InstrVecflags => false (* immediate form only *) | InstrUpshiftW => false | InstrDownshiftW => false | InstrDownshiftArithW => false | InstrGetFirstLong => false (* immediate form only *) | InstrStringLength => false (* immediate form only *) | InstrSetStringLength => true | InstrPush => true | InstrBad => false ; (* General register/register operation. *) fun genRR (instr : instrs, r1 : reg, r2 : reg, rd : reg, cvec : code) : unit = let val U : unit = (* We shouldn't do arithmetic on the stack pointer, but we ought to check, just in case. *) if rd regEq regStackPtr orelse r1 regEq regStackPtr orelse r2 regEq regStackPtr then genPendingStackAdjustment cvec else (); in case instr of InstrMove => genMove (rd, r1, cvec) | InstrAddA => let (* Untag one of the arguments. *) val U: unit = genAddImmed (regTemp2, r2, ~1, cvec) val lab : addrs = genTagTest2 (r1, r2, cvec) in genAddoDot (rd, r1, regTemp2, cvec); genOverflowTest (lab, cvec) end | InstrSubA => let (* Untag one of the arguments. *) val U: unit = genAddImmed (regTemp2, r2, ~1, cvec) val lab : addrs = genTagTest2 (r1, r2, cvec) in genSubfcoDot (rd, regTemp2, r1, cvec); genOverflowTest (lab, cvec) end | InstrRevSubA => let val U: unit = genAddImmed (regTemp2, r1, ~1, cvec) val lab : addrs = genTagTest2 (r1, r2, cvec); in genSubfcoDot (rd, regTemp2, r2, cvec); genOverflowTest (lab, cvec) end | InstrMulA => let (* Remove the tag from one of the args. *) val U: unit = genAddImmed (regTemp2, r2, ~1, cvec); (* Now test the tags. *) val lab : addrs = genTagTest2 (r1, r2, cvec) in (* Shift the other arg. *) genInstruction (srawi (regTemp1, r1, TAGBITS), cvec); (* Do the multiplication and test the tags. *) genX31(rd, regTemp2, regTemp1, MULLWO, true, cvec); genOverflowTest (lab, cvec); (* Set the correct tag. *) genAddImmed (rd, rd, 1, cvec) end | InstrAddW => ((* calculate (badly-tagged) result in rt2 *) genAdd (regTemp2, r1, r2, cvec); (* move result to rd, restoring correct tag *) genAddImmed (rd, regTemp2, ~1, cvec) ) | InstrSubW => ((* calculate (badly-tagged) result in rt2 *) genSubfc (regTemp2, r2, r1, cvec); (* move result to rd, restoring correct tag *) genAddImmed (rd, regTemp2, 1, cvec) ) | InstrRevSubW => ( (* calculate (badly-tagged) result in rt2 *) genSubfc (regTemp2, r1, r2, cvec); (* move result to rd, restoring correct tag *) genAddImmed (rd, regTemp2, 1, cvec) ) | InstrMulW => (* Fixed precision multiplication. (Doesn't test for overflow.) *) ( (* Untag one argument. *) genInstruction (srawi (regTemp2, r1, TAGBITS), cvec); (* Untag, but don't shift the multiplicand. *) genAddImmed(rd, r2, ~1, cvec); (* Do the multiplication. *) genX31 (rd, rd, regTemp2, MULLW, false, cvec); (* Add back the tag, but don't shift. *) genAddImmed(rd, rd, 1, cvec) ) | InstrDivW => let (* Test for zero. The addi instruction doesn't set the condition code. *) val U: unit = genCmpi (r2, int16_1, cvec); val skipException = putConditional(NeInv, cvec) in (* Raise the divide exception: lwz r0,48(r13); mtlr r0; blrl; *) genLoad(MemRegisterRaiseDiv, regMemRegs, regZero, cvec); genMtlr(regZero, cvec); genInstruction(blrlQuad, cvec); (* We could use a conditional branch-and-link*) fixup(skipException, cvec); (* We jump here if it was non-zero. *) (* Subtract the tag from the arguments. *) genAddImmed(regTemp2, r2, ~1, cvec); genAddImmed(regTemp1, r1, ~1, cvec); (* Do the division. *) genX31 (regTemp1, regTemp1, regTemp2, DIVWU, false, cvec); (* Tag the result. *) genInstruction (slwi (regTemp1, regTemp1, TAGBITS), cvec); genInstructionList (orImmed (rd, regTemp1, 1), cvec) end | InstrModW => (* Fixed precision remainder. *) (* We can't do this as a single instruction. Instead we have to use division, multiplication and subtraction. *) let (* Test for zero. The addi instruction doesn't set the condition code. *) val U: unit = genCmpi (r2, int16_1, cvec); val skipException = putConditional(NeInv, cvec) in (* Raise the divide exception: lwz r0,48(r13); mtlr r0; blrl; *) genLoad(MemRegisterRaiseDiv, regMemRegs, regZero, cvec); genMtlr(regZero, cvec); genInstruction(blrlQuad, cvec); (* We could use a conditional branch-and-link*) fixup(skipException, cvec); (* We jump here if it was non-zero. *) (* Just subtract the tags from the args. *) genAddImmed(regTemp1, r1, ~1, cvec); genAddImmed(regTemp2, r2, ~1, cvec); (* Do the division. *) genX31 (regTemp1, regTemp1, regTemp2, DIVWU, false, cvec); (* Multiply the result back again. *) genX31 (regTemp1, regTemp1, regTemp2, MULLW, false, cvec); (* Subtract this from the original, leaving us the tagged remainder. *) genSubfc (rd, regTemp1, r1, cvec) end | InstrOrW => genOr (rd, r1, r2, cvec) | InstrAndW => genAnd (rd, r1, r2, cvec) | InstrXorW => let val U : unit = genXor (regTemp2, r1, r2, cvec) in (* restore tag bit *) genInstructionList (orImmed (rd, regTemp2, 1), cvec) end | InstrLoad => let val FIRSTBIT = 0; val LASTBIT = 31 - 2; (* Shift to form word index, masking off the tag bits. *) val rlwinmQuad : quad = rlwinm (regTemp2, r2, 2 - TAGBITS, FIRSTBIT, LASTBIT); (* load the word *) val lwzxQuad : quad = lwzx (rd, r1, regTemp2); in genInstruction (rlwinmQuad, cvec); genInstruction (lwzxQuad, cvec) end | InstrLoadB => ( (* Untag the byte index *) genInstruction (srawi (regTemp2, r2, TAGBITS), cvec); (* Load the byte *) genInstruction (lbzx (regTemp1, r1, regTemp2), cvec); (* Shift up *) genInstruction (slwi (regTemp1, regTemp1, TAGBITS), cvec); (* Tag the result *) genInstructionList (orImmed (rd, regTemp1, 1), cvec) ) | InstrPush => (* RetAddrInBoth rd and r2 are ignored. *) genPush (r1, cvec) | InstrSetStringLength => ( (* Untag the value to store. *) genInstruction (srawi (regTemp2, r2, TAGBITS), cvec); (* Store it in the first word of the new string. *) genInstruction (stw (regTemp2, r1, int16_0), cvec) ) | _ => raise InternalError "genRR: Unimplemented instruction" end; (* genRR *) (*************************************************************************** RI implementation of general operations ***************************************************************************) (* Is this argument acceptable as an immediate or should it be loaded into a register? *) fun instrIsRI (instr : instrs, cnstnt : machineWord) : bool = let fun isShiftable c = 0 < c andalso c < (32 - TAGBITS) in case instr of InstrMove => true (* Always. *) | InstrAddA => isShort cnstnt | InstrSubA => isShort cnstnt | InstrRevSubA => isShort cnstnt | InstrMulA => isShort cnstnt andalso ~1 <= toInt (toShort cnstnt) andalso toInt (toShort cnstnt) <= 2 (* for now *) | InstrAddW => isShort cnstnt andalso isTaggable16Bit(toInt (toShort cnstnt)-1) | InstrSubW => isShort cnstnt andalso isTaggable16Bit(1 - toInt (toShort cnstnt)) | InstrRevSubW => isShort cnstnt andalso isShort (tagged(toInt (toShort cnstnt))+ 1) | InstrMulW => isShort cnstnt andalso is16Bit(toInt (toShort cnstnt)) | InstrDivW => false (* For now *) | InstrModW => false (* For now *) | InstrOrW => isShort cnstnt | InstrAndW => isShort cnstnt | InstrXorW => isShort cnstnt | InstrLoad => isShort cnstnt andalso isTaggable16Bit(toInt (toShort cnstnt)) | InstrLoadB => isShort cnstnt andalso is16Bit(toInt (toShort cnstnt)) | InstrVeclen => true (* Constant is ignored. *) | InstrVecflags => true (* Constant is ignored. *) | InstrUpshiftW => isShort cnstnt andalso isShiftable(toInt (toShort cnstnt)) | InstrDownshiftW => isShort cnstnt andalso isShiftable(toInt (toShort cnstnt)) | InstrDownshiftArithW => isShort cnstnt andalso isShiftable(toInt (toShort cnstnt)) | InstrPush => false | InstrGetFirstLong => false (* For the moment. *) | InstrStringLength => true (* Constant is ignored. *) | InstrSetStringLength => false (* Not at the moment. *) | InstrBad => false end; (* instrIsRI *) (* Register/immediate operations. In many of these operations we have to tag the immediate value. *) (* Register/immediate operations. In many of these operations we have to tag the immediate value. *) fun genRI (instr : instrs, rs : reg, constnt : machineWord, rd : reg, cvec) : unit = let val U : unit = (* We shouldn't do arithmetic on the stack pointer, but we ought to check, just in case. *) if rd regEq regStackPtr orelse rs regEq regStackPtr then genPendingStackAdjustment cvec else (); in case instr of InstrMove => (* Load a constant into a register. rs is ignored. *) if isShort constnt then genLoadImmed (rd, tagged(toInt (toShort constnt)), cvec) else genLoadConstant(WVal constnt, rd, cvec) | InstrAddA => (* Arbitrary precision addition. *) let val c = toInt (toShort constnt) val U : unit = genLoadImmed (regTemp2, tagged c - 1, cvec); val lab : addrs = genTagTest1 (rs, cvec); in genAddoDot (rd, rs, regTemp2, cvec); genOverflowTest (lab, cvec) end | InstrSubA => (* Arbitrary precision subtraction. *) let val c = toInt (toShort constnt) val U : unit = genLoadImmed (regTemp2, tagged c - 1, cvec); val lab : addrs = genTagTest1 (rs, cvec); in genSubfcoDot (rd, regTemp2, rs, cvec); genOverflowTest (lab, cvec) end | InstrRevSubA => (* Arbitrary precision reverse subtraction. *) let val c = toInt (toShort constnt) val U : unit = genLoadImmed (regTemp2, tagged c + 1, cvec); val lab : addrs = genTagTest1 (rs, cvec); in genSubfcoDot (rd, rs, regTemp2, cvec); genOverflowTest (lab, cvec) end | InstrMulA => let val c = toInt (toShort constnt) in case c of ~1 => genRI (InstrRevSubA, rs, toMachineWord 0, rd, cvec) | 0 => genRI (InstrMove, regZero, toMachineWord 0, rd, cvec) | 1 => genRR (InstrMove, rs, regZero, rd, cvec) | 2 => genRR (InstrAddA, rs, rs, rd, cvec) | _ => raise InternalError ("genRI: MulA - bad value " ^ Int.toString c) end | InstrAddW => let val c = toInt (toShort constnt) in (* pre-adjust tag of operand *) genAddImmed (rd, rs, tagged c - 1, cvec) end | InstrSubW => let val c = toInt (toShort constnt) in (* pre-adjust tag of operand *) genAddImmed (rd, rs, ~(tagged c - 1), cvec) end | InstrRevSubW => let val c = toInt (toShort constnt) in (* pre-adjust tag of operand *) genLoadImmed (regTemp1, tagged c + 1, cvec); genSubfc (rd, rs, regTemp1, cvec) end | InstrMulW => let val c = toInt (toShort constnt) in (* Subtract off the tag. *) genAddImmed (regTemp1, rs, ~1, cvec); (* Multiply by the untagged value. *) genInstruction(mulli(regTemp1, regTemp1, int16 c), cvec); (* Add back the tag. *) genAddImmed (rd, regTemp1, 1, cvec) end | InstrDivW => raise InternalError "genRI: Unimplemented instruction (InstrDivW)" | InstrModW => raise InternalError "genRI: Unimplemented instruction (InstrModW)" | InstrOrW => genInstructionList (orImmed (rd, rs, tagged(toInt (toShort constnt))), cvec) | InstrAndW => genInstructionList (andImmed (rd, rs, tagged(toInt (toShort constnt))), cvec) | InstrXorW => genInstructionList (xorImmed (rd, rs, semiTagged(toInt (toShort constnt))), cvec) | InstrLoad => (* offset is in words *) let val c = toInt (toShort constnt) in genInstruction (lwz (rd, rs, int16 (4 * c)), cvec) end | InstrLoadB => (* offset is in bytes *) let val c = toInt (toShort constnt) in genInstruction (lbz (regTemp2, rs, int16 c), cvec); genInstruction (slwi (regTemp2, regTemp2, TAGBITS), cvec); genInstruction (ori (rd, regTemp2, int16_1), cvec) end | InstrVeclen => let val FIRSTBIT = 8 - TAGBITS; val LASTBIT = 31 - TAGBITS; (* Get the 24-bit length field, upshifted by TAGBITS bits. *) val rlwinmQuad : quad = rlwinm (regTemp2, regTemp2, TAGBITS, FIRSTBIT, LASTBIT); in genLoad (~4, rs, regTemp2, cvec); genInstruction (rlwinmQuad, cvec); genInstruction (ori (rd, regTemp2, int16_1), cvec) end | InstrVecflags => (* Get the flag byte. N.B. This is only correct if we are running in big endian mode. DCJM 26/10/00. *) let val offset = ~4 (* ~1 on a little-endian. *) in genInstruction (lbz (regTemp2, rs, int16 offset), cvec); genInstruction (slwi (regTemp2, regTemp2, TAGBITS), cvec); genInstruction (ori (rd, regTemp2, int16_1), cvec) end | InstrUpshiftW => (* logical shift left *) let val c = toInt (toShort constnt) val FIRSTBIT = 0; val LASTBIT = (31 - TAGBITS) - c; (* The actual shift (must have 0 <= c < 30). *) (* This saves an instruction compared with removing the tagbits, then performing a normal left shift, but only works if we actually want part of the answer, rather than shifting evrything out. *) val rlwinmQuad : quad = rlwinm (regTemp2, rs, c, FIRSTBIT, LASTBIT); in genInstruction (rlwinmQuad, cvec); genInstruction (ori (rd, regTemp2, int16_1), cvec) end | InstrDownshiftW => (* logical shift right *) let val c = toInt (toShort constnt) val FIRSTBIT = 0; val LASTBIT = (31 - TAGBITS); (* The actual shift (must have 0 <= c < 32). *) val srwiQuad : quad = srwi (regTemp2, rs, c); (* Remove stray bits from the tag positions. *) val rlwinmQuad : quad = rlwinm (regTemp2, regTemp2, 0, FIRSTBIT, LASTBIT); in genInstruction (srwiQuad, cvec); genInstruction (rlwinmQuad, cvec); genInstruction (ori (rd, regTemp2, int16_1), cvec) end | InstrDownshiftArithW => (* arithmetic shift right *) let val c = toInt (toShort constnt) val FIRSTBIT = 0; val LASTBIT = (31 - TAGBITS); (* The actual shift (must have 0 <= c < 32). *) val srawiQuad : quad = srawi (regTemp2, rs, c); (* Remove stray bits from the tag positions. *) val rlwinmQuad : quad = rlwinm (regTemp2, regTemp2, 0, FIRSTBIT, LASTBIT); in genInstruction (srawiQuad, cvec); genInstruction (rlwinmQuad, cvec); genInstruction (ori (rd, regTemp2, int16_1), cvec) end | InstrStringLength => (* The second arg. is ignored. *) let (* If it's tagged the result is 1 otherwise we need to load the length word and tag it. *) val l1 = compareAndBranchRI (rs, toMachineWord 0 (* Unused *), Long, cvec) val _ = genLoadImmed (rd, tagged 1, cvec); val l2 = unconditionalBranch cvec in fixup(l1, cvec); (* Load the length word. *) genInstruction (lwz (regTemp2, rs, int16_0), cvec); genInstruction (slwi (regTemp2, regTemp2, TAGBITS), cvec); genInstruction (ori (rd, regTemp2, int16_1), cvec); fixup(l2, cvec) end | _ => raise InternalError "genRI: Unimplemented instruction" end; (* genRI *) fun printCode (seg, procName : string, lastAddr : addrs, printStream) : unit = let val ptr = ref addrZero; in if procName = "" (* No name *) then printStream "?" else printStream procName; printStream ":\n"; while !ptr addrLt lastAddr do let val thisAddr : addrs = !ptr; val U : unit = ptr := thisAddr wordAddrPlus 1; val byteAddr : int = getByteAddr thisAddr; val instr : int = fromQuad (getQuad (thisAddr, seg)); val U : unit = printHex(byteAddr, printStream); (* The address. *) val U : unit = printStream "\t"; val U : unit = printHexN (8, instr, printStream); (* The naked instruction. *) val U : unit = printStream "\t"; val U : unit = printInstr (byteAddr, instr, printStream); (* The decoded instruction. *) in printStream "\n" end end; (* printCode *) fun loadUnsigned (a : address, offset : int) : int = let (* Power PC is a big-endian machine *) val byteOffset : int = 4 * offset; val b0 = Word.fromLargeWord(Word8.toLargeWord(loadByte (a, toShort byteOffset))); val b1 = Word.fromLargeWord(Word8.toLargeWord(loadByte (a, toShort (byteOffset + 1)))); val b2 = Word.fromLargeWord(Word8.toLargeWord(loadByte (a, toShort (byteOffset + 2)))); val b3 = Word.fromLargeWord(Word8.toLargeWord(loadByte (a, toShort (byteOffset + 3)))); in fromQuad (Quad (b0, b1, b2, b3)) end; (* constLabels - fill in a constant in the code. *) fun constLabels (Code{resultSeg=ref rseg, pcOffset=ref offset, ...}, addr: addrs, value:machineWord) = let val seg = scSet rseg; val constAddr : addrs = addr wordAddrPlus offset; in csegPutConstant (seg, getByteAddr constAddr, value, 0) end; (* Fix up references from other vectors to this one. *) fun fixOtherRefs (refTo as Code{otherCodes=ref otherCodes, ...}, value) = let fun fixRef (refFrom as Code{numOfConsts = noc, constVec = ref constVec, resultSeg = ref resultSeg, ...}) = let fun putConst (CVal cCode, addr) = if cCode is refTo then (* A reference to this one. *) ( (* Fix up the forward reference. *) constLabels (refFrom, addr, value); (* decrement the "pending references" count *) noc := !noc - 1 ) else () | putConst _ = (); in (* look down its list of forward references until we find ourselves. *) List.app putConst constVec; (* If this function has no more references we can lock it. *) if !noc = 0 then csegLock (scSet resultSeg) else () end (* fixRef *); in (* For each `code' which needs a forward reference to `refTo' fixing up. *) List.app fixRef otherCodes end; (* fixOtherRefs *) (* The stack limit register is set at least twice this far from the end of the stack so we can simply compare the stack pointer with the stack limit register if we need less than this much. Setting it at twice this value means that procedures which use up to this much stack and do not call any other procedures do not need to check the stack at all. *) val minStackCheck = 20; (* Adds the constants onto the code, and copies the code into a new segment *) fun copyCode (cvec as Code{needReturn, pcOffset, codeVec, noClosure, selfCalls = ref selfCalls, selfJumps = ref selfJumps, mustCheckStack = ref callsAProc, numOfConsts, ic, constVec = ref constVec, resultSeg, procName, printAssemblyCode, printStream, ...}, stackRequired, registerSet) : address = let val callsAProc = !(mustCheckStack cvec); val endIC = !ic; (* Remember end *) (* Generate end-of-code marker *) val UUU = genCodeQuad (toQuad 0, cvec); (* changes !ic *) (***************************************************************************** N.B. The calling sequence has been simplified since it's no longer necessary to turn the register that points to the start of the code into a constant pointer. Some of the following may no longer apply. Function Prologues ------------------ Functions now have up to 3 entry points: (1) L1/L2 Standard entry point - return address is in LR (2) Self-call entry point - doesn't change regCode (3) Self-tail-call entry point - doesn't change regReturn or regCode At all entry points, LR must contain the return address. At entry point L4, regReturn must contain it too. L1, L2: (* Return address in LR only *) L3: (* Return address in LR only *) mflr regReturn ori regReturn,regReturn,2 L4: (* Return address in both LR and regReturn *) (* Return address in both LR and regReturn *) N.B. We must use "ori", not "addi" to adjust regReturn. This is because we don't know whether or not the value in LR is already tagged. It will be untagged if it was put there by a "blrl" (or similar) call instruction, but it will be already tagged if it was put there by a "mtlr returnReg" tail-call instruction. Stack-check code ---------------- The stack limit register is a pointer, below which rsp must not be decremented. (1) "No" stack check. cmpl rsp,rsl bge+ .+4 lwz r0,16(r13) mtlr r0 blrl (2) "Big" stack check ... load rsp- into rtemp1 ... cmpl rtemp1,rsl bge+ .+4 lwz r0,16(r13) mtlr r0 blrl *****************************************************************************) (* Generate the prelude (iterative!) *) local val regReturnCode = if ! needReturn orelse stackRequired >= minStackCheck orelse callsAProc then (* If we need to do a stack check we have to preserve the LR. *) [ mflr regReturn, ori (regReturn, regReturn, int16_2) ] else []; val stackCheckCode = if stackRequired >= minStackCheck then let (* We need to check the stack. *) val stackBytes = stackRequired * 4; in (* get the "minimum" sp into rt1 and trap if it is less than the stack limit register. There's probably a better way to construct this code - we should just subtract the constant using immediates, not load it into regTemp1 first. *) loadImmed (regTemp1, stackBytes) @ [ lwz(regZero, regMemRegs, int16 MemRegisterStackLimit), sub (regTemp1, regStackPtr, regTemp1), cmpl (regTemp1, regZero), condBranch(GeInv, int14 4), (* Call the "extended" entry. *) lwz(regZero, regMemRegs, int16 MemRegisterStackOverflowEx), mtlr(regZero), blrlQuad ] end else if callsAProc (* check for user interrupt *) then [ (* trap if current sp is less than stack limit register. This check is necessary because user interupts (^C) adjust the limit register precisely so this check will cause a trap is a "safe" state. *) lwz(regZero, regMemRegs, int16 MemRegisterStackLimit), cmpl (regStackPtr, regZero), condBranch(GeInv, int14 4), (* Call the "normal" entry. *) lwz(regZero, regMemRegs, int16 MemRegisterStackOverflow), mtlr(regZero), blrlQuad ] else (* no stack check required *) []; (* code segment size minimised (iteratively!) SPF 12/8/94 *) fun getPreludeCode spaceForPrelude (* an initial guess! *) = let (* +5 for code size, profile count, function name, register mask and constants count *) val segSize = getWordAddr (!ic) + spaceForPrelude + 5; (* Prelude consists of 1) moving or(lr,2) to regReturn 2) stack checking code *) (* size of the segment in bytes *) val byteSegSize : int = segSize * 4; val preludeCode = (* L1, L2 here *) (* L3 here *) regReturnCode @ (* L4 here *) stackCheckCode; in (* does it fit? *) if List.length preludeCode = spaceForPrelude then (spaceForPrelude,segSize,preludeCode) else getPreludeCode (spaceForPrelude + 1) end in val (spaceForPrelude,segSize,preludeCode) = (* iterate to find size of loadConstSegCode *) getPreludeCode (List.length regReturnCode + List.length stackCheckCode); (* byte offsets of L3 and L4 labels relative to start of post-prelude code. *) val L4Addr = mkWordAddr (~ (List.length stackCheckCode)); val L3Addr = mkWordAddr (~ (List.length regReturnCode + List.length stackCheckCode)); end; (* local *) (* fix-up all the self-calls *) val U : unit = fixupRecursiveCalls (L3Addr, selfCalls, cvec); val U : unit = fixupRecursiveBranches (L4Addr, selfJumps, cvec); (* Now make the byte segment that we'll turn into the code segment *) val seg : cseg = csegMake segSize; val offset = spaceForPrelude; val U : unit = resultSeg := Set seg; (* Copy the code into the new segment. *) val U : unit = pcOffset := offset; val U : unit = csegCopySeg (codeVec, seg, getByteAddr (! ic), offset); (* insert prelude code into segment *) local fun putPreludeQuad (wordAddr : int, w : quad) = setQuad (w, mkWordAddr wordAddr, seg); in val U : unit = applyCountList (putPreludeQuad, 0, preludeCode); end; local val endOfCode : addrs = (! ic) wordAddrPlus offset; in (* Byte offset of start of code. *) local val quad = toQuad (getByteAddr endOfCode); val addr = endOfCode; in val U : unit = setQuad (quad, addr, seg) end; (* Put in the number of constants. This must go in before we actually put in any constants. *) local val quad = toQuad 2; (* Just two constants now. *) val addr = endOfCode wordAddrPlus 4; in val U : unit = setQuad (quad, addr, seg) end; (* Next the profile count. *) local val quad = toQuad 0; val addr = endOfCode wordAddrPlus 1; in val U : unit = setQuad (quad, addr, seg) end; (* Now we've filled in all the C integers; now we need to convert the segment into a proper code segment before it's safe to put in any ML values. SPF 13/2/97 *) val U : unit = csegConvertToCode seg; local (* why do we treat the empty string as a special case? SPF 15/7/94 *) (* This is so that profiling can print "". Note that a tagged zero *is* a legal string (it's "\000"). SPF 14/10/94 *) val name : string = procName val nameWord : machineWord = if name = "" then toMachineWord 0 else toMachineWord name; val addr : addrs = endOfCode wordAddrPlus 2; in val U : unit = csegPutWord (seg, getWordAddr addr, nameWord) end local (* Encode the register mask. This encoding must be the same as the one used for assembly code segments. *) fun encodeReg(r, n: short): short = let open Word infix << orb val reg = 0w1 << Word.fromInt (nReg r) in reg orb n end val regSet = List.foldl encodeReg 0w0 registerSet in val U : unit = csegPutWord (seg, getWordAddr(endOfCode wordAddrPlus 3), toMachineWord regSet); end; end; (* scope of endofcode *) in let (* and then copy the objects from the constant list. *) fun putConst (WVal c, addr) = ( (* Can put these in now. *) constLabels (cvec, addr, c); numOfConsts := ! numOfConsts - 1 ) | putConst (HVal(ref hv), addr) = let (* The following comment applies to offsetAddr *) (* Special function to add to an address. This only works if the resulting value is in a code segment and is on a word + 2 byte boundary. *) val handlerByteOffset : int = getByteAddr (hv wordAddrPlus offset); val handlerAddr : handler = offsetAddr (csegAddr seg, toShort (handlerByteOffset + 2)); in constLabels (cvec, addr, toMachineWord handlerAddr); numOfConsts := ! numOfConsts - 1 end (* forward-reference - fix up later when we compile the referenced code *) | putConst (CVal _, _) = () val _ = List.app putConst constVec; (* Switch off "mutable" bit now if we have no forward or recursive references to fix-up *) val U : unit = if ! numOfConsts = 0 then csegLock seg else (); (* Do we need to make a closure, or just return the code? *) val addr : address = if noClosure then csegAddr seg else let val addr : address = alloc (short1, F_words, toMachineWord (csegAddr seg)); (* Logically unnecessary; however the RTS currently allocates everything as mutable because Dave's code assumed that things were done this way and I'm not completely sure that everything that needs a mutable allocation actually asks for it yet. SPF 19/2/97 *) val U : unit = lock addr; in addr end (* Now we know the address of this object we can fix up any forward references outstanding. This is put in here because there may be directly recursive references. *) val U : unit = fixOtherRefs (cvec, toMachineWord addr); val U : unit = if printAssemblyCode then let (* print out the code *) (* endcode is the address of the end-of-code marker word. *) val lastAddr : addrs = endIC wordAddrPlus offset; in printCode (seg, procName, lastAddr, printStream); printStream "Register set = ["; List.app (fn r => (print " "; printStream(regRepr r))) registerSet; printStream "]\n\n" end else (); in addr end (* the result *) end (* copyCode *); (* ic function exported to gencode. Currently only used for backward jumps. *) val ic = fn cvec => ( (* Make sure any pending operations are done. *) genPendingStackAdjustment cvec; reallyFixup cvec; clearAllCaches cvec; (* We may be jumping here. *) ! (ic cvec) ); (* We need these types although we don't generate indexed cases. *) type cases = {tag: int, addr: addrs}; (* should tag be a short??? *) type jumpTableAddrs = unit; fun constrCases (i, a) : cases = {tag = i, addr = a} fun useIndexedCase (min, max, numberOfCases, exhaustive) : bool = false; (* Never use indexed case. *) fun indexedCase (reg, reg2, min, max, exhaustive, cvec) : jumpTableAddrs = raise InternalError "Not implemented: indexedCase"; fun makeJumpTable (startTab, cl, default, min, max, cvec) : unit = raise InternalError "Not implemented: makeJumpTable"; fun codeAddress (cvec: code) : address option = (* This is used to find the register set for a function which was originally a forward reference. If it has now been compiled we can get the code. *) case cvec of Code {resultSeg = ref (Set cseg), ...} => SOME(csegAddr cseg) | Code {resultSeg = ref Unset, ...} => (* We haven't compiled this yet: assume worst case. *) NONE fun traceContext (Code {procName, ic = ref ic, ...}) = (* Function name and code offset to help tracing. *) procName ^ ":" ^ Int.fmt StringCvt.HEX (getByteAddr ic) end (* CODECONS functor body *) end (* structure-level let *) polyml.5.2.1/mlsource/MLCompiler/CodeTree/README.txt0000644000175000017500000000023710506226530021021 0ustar daviddavidIt was previously necessary to set up a symbolic link in this directory. PolyML.make now knows about architecture-specific files so that is no longer needed. polyml.5.2.1/mlsource/MLCompiler/CodeTree/SPARCCODECONS.ML0000644000175000017500000037155511003075354021560 0ustar daviddavid(* Copyright (c) 2000-7 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* Title: Code Generator Routines. Author: Dave Matthews, Cambridge University Computer Laboratory Copyright Cambridge University 1989 *) (* This module contains the code vector and operations to insert code into it. Each procedure is compiled into a separate segment. Initially it is compiled into a fixed size segment, and then copied into a segment of the correct size at the end. This module contains all the definitions of the Sparc opcodes and registers. It uses "codeseg" to create and operate on the segment itself. *) (* Linkage conventions: We ignore the register window and use only the %o, %l and %g register sets. %i0, the original parameter to the C code, points to a memRegisters structure. %i1 is currently unused %i2 and %i3 are unsaved scratch registers. The difference is that if %i2 is the target of a sethi/add combination the value is assumed to be an address and can be updated by the GC whereas if it is %i3 it is not. %i4 and %i5 are saved unchecked registers. %i6 and %i7 are never used (%i7 is the return address from ML to C). %o0 is used for the first argument to a function, and for the result. %o1-%o3 are used for the next 3 args, any others being passed on the stack. %o4 is the address of the code being called %o5 is the closure pointer or static link pointer. %o6 is never used (the system assumes it points to an area where regs can be stored). %o7 is the return address i.e. the address of the jmpl instruction. Return is done by jmp %o7+6. 2 is always added to %o7 on function entry so that it is distinguishable from other addresses which point at the start of objects. %g3 points to the top exception handler, %g4 is the stack pointer, %g5 is the heap limit - previously the stack limit register, %g6 is the heap pointer, %g7 is unused. This is used by the pthread library. %g1 and %g2 are available as work regs, as are the %l registers. %i4 is used an the arithmetic accumulator, which should contain only untagged values. By reserving it for this function, we can hope to minimise the number of untagging operations performed via a simple caching scheme. %i5 is used both for untagged arithmetic and as a general scratch register. %i4 and %i5 are not always preserved across traps, and they should never contain pointers, as they are not examined/adjusted by the garbage-collector. %i3 is used for stack adjustments, so we don't have to call doPendingStackAdjustment before we load an immediate. Other registers MUST contain properly tagged values if there any a possibility of a garbage collection. *) functor SPARCCODECONS ( (*****************************************************************************) (* DEBUG *) (*****************************************************************************) structure DEBUG : sig val assemblyCodeTag : bool Universal.tag val compilerOutputTag: (string->unit) Universal.tag val getParameter : 'a Universal.tag -> Universal.universal list -> 'a end; (*****************************************************************************) (* MISC *) (*****************************************************************************) structure MISC : sig exception InternalError of string end ) : (*****************************************************************************) (* CODECONS export signature *) (*****************************************************************************) sig type machineWord; type short; type code; type reg; (* Machine registers *) type address; val regNone: reg; val regResult: reg; val regClosure: reg; val regStackPtr: reg; val regHandler: reg; val regReturn: reg; val regs: int; (* No of registers. *) val argRegs: int; (* No of args in registers. *) val regN: int -> reg; val nReg: reg -> int; val argReg: int -> reg; val regEq: reg * reg -> bool; val regNeq: reg * reg -> bool; val regRepr: reg -> string; type addrs val codeCreate: bool * string * Universal.universal list -> code; (* makes the initial segment. *) (* Operations. *) type instrs; val instrMove: instrs; val instrAddA: instrs; val instrSubA: instrs; val instrRevSubA: instrs; val instrMulA: instrs; val instrAddW: instrs; val instrSubW: instrs; val instrRevSubW: instrs; val instrMulW: instrs; val instrDivW: instrs; val instrModW: instrs; val instrOrW: instrs; val instrAndW: instrs; val instrXorW: instrs; val instrLoad: instrs; val instrLoadB: instrs; val instrVeclen: instrs; val instrVecflags: instrs; val instrPush: instrs; val instrUpshiftW: instrs; val instrDownshiftW: instrs; val instrDownshiftArithW: instrs; val instrGetFirstLong: instrs; val instrStringLength: instrs; val instrSetStringLength: instrs; val instrBad: instrs; (* Can the we use the same register as the source and destination of an instructions? (it would be more flexible to make this a function of type "instrs -> bool", but a simple flag will suffice for now. SPF 17/1/97 *) val canShareRegs : bool; (* Enquire about operations. *) val instrIsRR: instrs -> bool; (* Is the general form implemented? *) val instrIsRI: instrs * machineWord -> bool; (* Is the immediate value ok? *) (* Code generate operations. *) val genRR: instrs * reg * reg * reg * code -> unit; val genRI: instrs * reg * machineWord * reg * code -> unit; type tests; val testNeqW: tests; val testEqW: tests; val testGeqW: tests; val testGtW: tests; val testLeqW: tests; val testLtW: tests; val testNeqA: tests; val testEqA: tests; val testGeqA: tests; val testGtA: tests; val testLeqA: tests; val testLtA: tests; val Short: tests; val Long: tests; type labels; (* The source of a jump. *) val noJump: labels; (* Compare and branch for fixed and arbitrary precision. *) val isCompRR: tests -> bool; val isCompRI: tests * machineWord -> bool; val compareAndBranchRR: reg * reg * tests * code -> labels; val compareAndBranchRI: reg * machineWord * tests * code -> labels; datatype storeWidth = STORE_WORD | STORE_BYTE val genLoad: int * reg * reg * code -> unit; val isIndexedStore: storeWidth -> bool val genStore: reg * int * reg * storeWidth * reg * code -> unit; val isStoreI: machineWord * storeWidth * bool -> bool; val genStoreI: machineWord * int * reg * storeWidth * reg * code -> unit; val inlineAssignments: bool val genPush: reg * code -> unit; val genLoadPush: int * reg * code -> unit; val preferLoadPush: bool; val genLoadCoderef: code * reg * code -> unit; val allocStore: int * Word8.word * reg * code -> unit; val setFlag: reg * code * Word8.word -> unit; val completeSegment: code -> unit; datatype callKinds = Recursive | ConstantFun of machineWord * bool | CodeFun of code | FullCall val callFunction: callKinds * code -> unit; val jumpToFunction: callKinds * reg * code -> unit; val returnFromFunction: reg * int * code -> unit; val raiseException: code -> unit; val genStackOffset: reg * int * code -> unit; val copyCode: code * int * reg list -> address; val unconditionalBranch: code -> labels; type handlerLab; val loadHandlerAddress: reg * code -> handlerLab; val fixupHandler: handlerLab * code -> unit; val fixup: labels * code -> unit; (* Fix up a jump. *) (* ic - Address for the next instruction in the segment. *) val ic: code -> addrs; val jumpback: addrs * bool * code -> unit; (* Backwards jump. *) val resetStack: int * code -> unit; (* Set a pending reset *) val procName: code -> string; (* Name of the procedure. *) type cases type jumpTableAddrs val constrCases : int * addrs -> cases; val useIndexedCase: int * int * int * bool -> bool; val indexedCase : reg * reg * int * int * bool * code -> jumpTableAddrs; val makeJumpTable : jumpTableAddrs * cases list * addrs * int * int * code -> unit; val codeAddress: code -> address option val traceContext: code -> string; end (* CODECONS export signature *) = let (*****************************************************************************) (* ADDRESS *) (*****************************************************************************) structure ADDRESS : sig type machineWord; (* NB *not* eqtype, 'cos it might be a closure *) type short = Word.word; type address; type handler; val wordSize : int; (* still 4, but will change one day *) val wordEq : 'a * 'a -> bool; val isShort: 'a -> bool; val toShort: 'a -> short; val toMachineWord: 'a -> machineWord; val toAddress: 'a -> address val loadByte: address * short -> Word8.word val loadWord: address * short -> machineWord val unsafeCast: 'a -> 'b val offsetAddr : address * short -> handler; val alloc: (short * Word8.word * machineWord) -> address; val length: address -> short; val flags: address -> Word8.word; val F_words : Word8.word; val isWords : address -> bool; val isBytes : address -> bool; val isCode : address -> bool; val lock : address -> unit; val isIoAddress : address -> bool end = Address; (*****************************************************************************) (* CODESEG *) (*****************************************************************************) structure CODESEG : sig type machineWord; type short; type address; type cseg; val csegMake: int -> cseg; val csegConvertToCode: cseg -> unit; val csegLock: cseg -> unit; val csegGet: cseg * int -> Word8.word; val csegSet: cseg * int * Word8.word -> unit; val csegPutWord: cseg * int * machineWord -> unit; val csegCopySeg: cseg * cseg * int * int -> unit; val csegAddr: cseg -> address; val csegPutConstant: cseg * int * machineWord * 'a -> unit; end = CodeSeg; in (*****************************************************************************) (* CODECONS functor body *) (*****************************************************************************) struct open CODESEG; open DEBUG; open ADDRESS; open MISC; val toInt = Word.toIntX (* This previously just cast the value so continue to treat it as signed. *) fun applyCountList (f, n, []) = () | applyCountList (f, n, h::t) = let val U : unit = f (n, h); in applyCountList (f, n + 1, t) end; (* added SPF - take numbers OUT of code *) (* These are defined here as explicit constants, so the *) (* code-generator can in-line them as immediates (I think). *) val exp2_2 = 4; val exp2_3 = 8; val exp2_4 = 16; val exp2_5 = 32; val exp2_6 = 64; val exp2_7 = 128; val exp2_8 = 256; val exp2_10 = 1024; val exp2_12 = 4096; val exp2_13 = 8192; val exp2_14 = 16384; val exp2_16 = 65536; val exp2_19 = 524288; val exp2_21 = 2097152; val exp2_22 = 4194304; val exp2_24 = 16777216; val exp2_25 = 33554432; val exp2_29 = 536870912; val exp2_30 = 1073741824; val exp2_31 = 2147483648; val exp2_32 = 4294967296; (* Let's check that we got them right! *) local fun exp2 0 = 1 | exp2 n = 2 * exp2 (n - 1); in val U : bool = ( exp2_2 = exp2 2 andalso exp2_3 = exp2 3 andalso exp2_4 = exp2 4 andalso exp2_5 = exp2 5 andalso exp2_6 = exp2 6 andalso exp2_7 = exp2 7 andalso exp2_8 = exp2 8 andalso exp2_10 = exp2 10 andalso exp2_12 = exp2 12 andalso exp2_13 = exp2 13 andalso exp2_14 = exp2 14 andalso exp2_16 = exp2 16 andalso exp2_19 = exp2 19 andalso exp2_21 = exp2 21 andalso exp2_22 = exp2 22 andalso exp2_24 = exp2 24 andalso exp2_25 = exp2 25 andalso exp2_29 = exp2 29 andalso exp2_30 = exp2 30 andalso exp2_31 = exp2 31 andalso exp2_32 = exp2 32 ) orelse raise InternalError "CodeCons: Powers of 2 incorrectly specified"; end; val mask2bits = 0w3; (* least significant 2 bits *) val mask5bits = 0w31; (* least significant 5 bits *) val mask6bits = 0w63; (* least significant 6 bits *) val mask8bits = 0w255; (* least significant 8 bits *) val >> = Word.>> and << = Word.<< infix >> <<; (* These are defined here as explicit constants, so the *) (* code-generator can in-line them as immediates (I think). *) val TAGSHIFT = 2; val TAGMASK = 3; val DATATAG = 1; val CODETAG = 2; val FLAGLENGTH = 8; (* There are 8 flag bits in the length word *) (* tag a short constant *) fun semiTagged c = exp2_2 * c; fun tagged c = exp2_2 * c + 1; (*****************************************************************************) (* Abstype for registers *) (*****************************************************************************) infix 7 regEq regNeq regLeq regGeq regMinus; abstype reg = Reg of int (* registers. *) with val g0 = Reg 0; val g1 = Reg 1; val g2 = Reg 2; val g3 = Reg 3; val g4 = Reg 4; val g5 = Reg 5; val g6 = Reg 6; val g7 = Reg 7; val o0 = Reg 8; val o1 = Reg 9; val o2 = Reg 10; val o3 = Reg 11; val o4 = Reg 12; val o5 = Reg 13; val o6 = Reg 14; val o7 = Reg 15; val l0 = Reg 16; val l1 = Reg 17; val l2 = Reg 18; val l3 = Reg 19; val l4 = Reg 20; val l5 = Reg 21; val l6 = Reg 22; val l7 = Reg 23; val i0 = Reg 24; val i1 = Reg 25; val i2 = Reg 26; val i3 = Reg 27; val i4 = Reg 28; val i5 = Reg 29; val i6 = Reg 30; val i7 = Reg 31; val psp = g4; val phr = g3; val regResult = o0; val regClosure = o5; val regCode = NONE; val regStackPtr = g4; val regHandler = g3; val regReturn = o7; val regNone = g0; fun getReg (Reg r) = r; (* reg.down *) fun mkReg n = Reg n; (* reg.up *) (* The number of general registers. Includes result, closure, code, return and arg regs but not stackptr, handler, stack limit or heap ptrs. *) val regs = 17 (* o0-o5, o7-l7, g1 and g2 *); (* The nth register (counting from 0). *) fun regN i = if i < 0 orelse i >= regs then let val msg = concat [ "regN: Bad register number ", Int.toString i ] in raise InternalError msg end else if i = 6 then g1 (* replace o6 *) else if i < 16 then mkReg (i + 8) (* o0 - l7 *) else g2 (* i = 16 *); fun a regEq b = getReg a = getReg b; fun a regNeq b = getReg a <> getReg b; fun a regLeq b = getReg a <= getReg b; fun a regGeq b = getReg a >= getReg b; fun (Reg a) regMinus (Reg b) = a - b; (* The number of the register. *) fun nReg r = if r regEq g1 then 6 else if r regGeq o0 andalso r regLeq l7 then getReg r - 8 else if r regEq g2 then 16 else let val msg = concat [ "nReg: Bad register number ", Int.toString (getReg r) ] in raise InternalError msg end; fun regRepr r = ( if r regEq psp then "psp" else if r regEq phr then "phr" else if r regLeq g7 then "g" ^ Int.toString (getReg r) (* use gn *) else if r regLeq o7 then "o" ^ Int.toString (r regMinus o0) (* use on *) else if r regLeq l7 then "l" ^ Int.toString (r regMinus l0) (* use ln *) else "i" ^ Int.toString (r regMinus i0) (* use in *) ); val argRegs = 4; (* Args 0, 1, 2, 3 correspond to o0, o1, o2, o3. *) fun argReg i = if i < 4 andalso i >= 0 then mkReg (i + 8) else let val msg = concat [ "argReg: bad register number ", Int.toString i ] in raise InternalError msg end; end; (* reg *) datatype CacheState = Empty (* i4 contains no useful value *) | Copy of reg; (* i4 contains an untagged copy of reg *) (*****************************************************************************) (* Abstype for instruction addresses *) (*****************************************************************************) infix 6 wordAddrPlus wordAddrMinus; infix 4 addrLt; (* All indexes into the code vector have type "addrs". In this version of the code generator, we're using WORD addresses. Earlier versions use BYTE addresses, so don't get confused!. SPF 18/2/97 *) abstype addrs = Addr of int with (* + is defined to add an integer to an address *) fun (Addr a) wordAddrPlus b = Addr (a + b); (* The difference between two addresses is an integer *) fun (Addr a) wordAddrMinus (Addr b) = a - b; fun (Addr a) addrLt (Addr b) = a < b; fun mkWordAddr n = Addr n; (* addr.up *) fun getWordAddr (Addr a) = a; fun getByteAddr (Addr a) = a * wordSize; val addrZero = mkWordAddr 0; end; (*****************************************************************************) (* Types for branch labels *) (*****************************************************************************) type labels = addrs list; val noJump = []:labels; datatype const = WVal of machineWord (* an existing constant *) | HVal of addrs ref (* a handler *) | CVal of code (* a forward-reference to another function *) (* Constants which are too large to go inline in the code are put in a list and put at the end of the code. They are arranged so that the garbage collector can find them and change them as necessary. A reference to a constant is treated like a forward reference to a label. *) (* A code list is used to hold a list of code-vectors which must have the address of this code-vector put into it. *) and setCodeseg = Unset | Set of cseg * int (* Code vector, plus size of prelude *) and code = Code of { procName: string, (* Name of the procedure. *) noClosure: bool, (* should we make a closure from this? *) codeVec: cseg, (* This segment is used as a buffer. When the procedure has been code generated it is copied into a new segment of the correct size *) ic: addrs ref, (* Pointer to first free location in "codevec" *) constVec: (const * addrs) list ref, (* Constants used in the code *) numOfConsts: int ref, (* Number of constants that haven't been fixed up yet *) stackReset: int ref, (* Distance to reset the stack before the next instr. *) otherCodes: code list ref, (* Other code vectors with forward references to this vector. *) resultSeg: setCodeseg ref, (* The segment as the final result. *) mustCheckStack: bool ref, (* Set to true if stack check must be done. *) justComeFrom: labels ref, (* The label(s) we have just jumped from. *) exited: bool ref, (* False if we can fall-through to here *) selfCalls: labels ref, (* List of recursive calls to patch up. *) selfJumps: labels ref, (* List of recursive tail-calls to patch up. *) accCache: CacheState ref, (* i4 contains the untagged value of what register? *) constLoads: (addrs * reg * reg * int) list ref, (* where do we load constants? *) printAssemblyCode:bool, (* Whether to print the code when we finish. *) printStream: string->unit (* The stream to use *) }; fun codeVec (Code {codeVec,...}) = codeVec; fun ic (Code {ic,...}) = ic; fun constVec (Code {constVec,...}) = constVec; fun numOfConsts (Code {numOfConsts,...}) = numOfConsts; fun stackReset (Code {stackReset ,...}) = stackReset ; fun procName (Code {procName,...}) = procName; fun otherCodes (Code {otherCodes,...}) = otherCodes; fun resultSeg (Code {resultSeg,...}) = resultSeg; fun mustCheckStack (Code {mustCheckStack,...}) = mustCheckStack; fun justComeFrom (Code {justComeFrom,...}) = justComeFrom; fun exited (Code {exited,...}) = exited; fun selfCalls (Code {selfCalls,...}) = selfCalls; fun selfJumps (Code {selfJumps,...}) = selfJumps; fun accCache (Code {accCache,...}) = accCache; fun noClosure (Code {noClosure,...}) = noClosure; fun constLoads (Code {constLoads,...}) = constLoads; fun unreachable cvec = case ! (justComeFrom cvec) of [] => ! (exited cvec) | _ => false; val codeSize = 8; (* Words. Initial size of segment. *) (* %i0 points to a structure that interfaces to the RTS. These are offsets into that structure. Currently only raiseException and the stack limit value (used to interrupt code) are used. *) val MemRegRaiseException = 32 val MemRegStackLimit = 24 (* Test for identity of the code segments by testing whether the resultSeg ref is the same. N.B. NOT its contents. *) infix is; fun a is b = (resultSeg a = resultSeg b); fun sameConst (WVal w1, WVal w2) = wordEq (w1, w2) | sameConst (HVal h1, HVal h2) = h1 = h2 | sameConst (CVal c1, CVal c2) = c1 is c2 | sameConst (_, _) = false; (* create and initialise a code segment *) fun codeCreate (noClosure, name, parameters) : code = Code { procName = name, noClosure = noClosure, codeVec = csegMake codeSize, (* a byte array *) ic = ref addrZero, constVec = ref [], numOfConsts = ref 0, stackReset = ref 0, otherCodes = ref [], resultSeg = ref Unset, (* Not yet done *) mustCheckStack = ref false, justComeFrom = ref [], exited = ref false, selfCalls = ref [], selfJumps = ref [], accCache = ref Empty, constLoads = ref [], printAssemblyCode = DEBUG.getParameter DEBUG.assemblyCodeTag parameters, printStream = DEBUG.getParameter DEBUG.compilerOutputTag parameters }; datatype quad = (* the 4 bytes of the instruction word *) Quad of short * short * short * short (* break an instruction word into 4 bytes; try to do it in a way that *) (* will minimise the arithmetic - particularly for long values. *) fun toQuad (w : int) : quad = let val topHw = toShort (w div exp2_16); val bottomHw = toShort (w mod exp2_16); in Quad (topHw >> 0w8, Word.andb (mask8bits, topHw), bottomHw >> 0w8, Word.andb (mask8bits, bottomHw)) end; (* returns *unsigned* integer *) fun fromQuad (Quad (b1,b2,b3,b4)) : int = let val topHw = toInt (Word.orb (b1 << 0w8, b2)); val bottomHw = toInt (Word.orb (b3 << 0w8, b4)); in topHw * exp2_16 + bottomHw end; (* Put 4 bytes at a given offset in the segment. *) (* Write out high order bytes followed by low order. Assume all arguments are +ve or zero. *) fun setQuad (Quad (b1,b2,b3,b4), addr : addrs, seg : cseg) = let val a : int = getByteAddr addr; in csegSet (seg, a, Word8.fromLargeWord(Word.toLargeWord b1)); csegSet (seg, a + 1, Word8.fromLargeWord(Word.toLargeWord b2)); csegSet (seg, a + 2, Word8.fromLargeWord(Word.toLargeWord b3)); csegSet (seg, a + 3, Word8.fromLargeWord(Word.toLargeWord b4)) end; fun getQuad (addr:addrs, seg:cseg) : quad = let val a : int = getByteAddr addr; val b1 = Word.fromLargeWord(Word8.toLargeWord(csegGet (seg, a))) val b2 = Word.fromLargeWord(Word8.toLargeWord(csegGet (seg, a + 1))) val b3 = Word.fromLargeWord(Word8.toLargeWord(csegGet (seg, a + 2))) val b4 = Word.fromLargeWord(Word8.toLargeWord(csegGet (seg, a + 3))) in Quad (b1, b2, b3, b4) end; (* generate a quad and increment instruction counter *) fun genCodeQuad (instr : quad, cvec) = let val addr = ! (ic cvec) in setQuad (instr, addr, codeVec cvec); ic cvec := addr wordAddrPlus 1 end; fun getCodeQuad (addr : addrs, code : code) : quad = let val seg = codeVec code; in getQuad (addr, seg) end; fun setCodeQuad (instr : quad, addr : addrs, code : code) : unit = let val seg = codeVec code; in setQuad (instr, addr, seg) end; fun isSet (Set _) = true | isSet _ = false fun scSet (Set x) = x | scSet _ = raise Match; (* Test condition codes. *) abstype testCode = Test of int with fun eqTest (Test x) (Test y) = x = y; val never = Test 0; (* Never true *) val e = Test 1; (* equal *) val le = Test 2; (* less or equal *) val l = Test 3; (* less than *) val leu = Test 4; (* low or same *) val cs = Test 5; (* carry set *) val neg = Test 6; (* minus *) val vs = Test 7; (* overflow *) val always = Test 8; (* always true *) val ne = Test 9; (* not equal *) val g = Test 10; (* greater than*) val ge = Test 11; (* greater or equal *) val gu = Test 12; (* high *) val cc = Test 13; (* carry clear *) val pos = Test 14; (* plus *) val vc = Test 15; (* no overflow *) fun tstRepr tst = if tst = never then "n" else if tst = e then "e" else if tst = le then "le" else if tst = l then "l" else if tst = leu then "leu" else if tst = cs then "cs" else if tst = neg then "neg" else if tst = vs then "vs" else if tst = always then "a" else if tst = ne then "ne" else if tst = g then "g" else if tst = ge then "ge" else if tst = gu then "gu" else if tst = cc then "cc" else if tst = pos then "pos" else "vc"; fun getTest (Test t) = t; (* test.down *) fun mkTest n = Test n; (* test.up *) end; (* effective address modes *) (* On the Sparc this is either a register or a 13-bit immediate. *) abstype mode13 = Register of reg | Imm13 of int (* 13 bit only *) with fun getMode13 (Register r) = getReg r | getMode13 (Imm13 i) = let (* remove sign *) val v = if i < 0 then exp2_13 + i else i in (* add "tag" bit *) v + exp2_13 end; fun isRegister (Register r) = true | isRegister (Imm13 i) = false; fun isImm13 (Register r) = false | isImm13 (Imm13 i) = true; fun getRegister (Register r) = r | getRegister (Imm13 i) = raise InternalError "getRegister"; fun getImm13 (Register r) = raise InternalError "getImm13" | getImm13 (Imm13 i) = i; fun eqMode13 (Register x) (Register y) = (x regEq y) | eqMode13 (Imm13 x) (Imm13 y) = (x = y) | eqMode13 _ _ = false; (* We check for shorts first because that saves us an expensive compile-time trap if v is actually a long value. SPF 19/12/95 *) (* v will fit into 13 bits *) fun is13Bit v = isShort v andalso ~ exp2_12 <= v andalso v < exp2_12; (* v will fit into 13 bits when tagged *) (* NB isTaggable13Bit b implies is13Bit (4*v) ... is13Bit (4*v+3) *) fun isTaggable13Bit v = ~ exp2_10 <= v andalso v < exp2_10; fun mReg r = Register r fun immed13 i = if is13Bit i then Imm13 i else let val msg = concat [ "immed13: can't convert ", Int.toString i, " into 13-bit immediate" ] in raise InternalError msg end; (* These are provided for convenience. *) val o5M = mReg o5; val i3M = mReg i3; val i4M = mReg i4; val i5M = mReg i5; val pspM = mReg psp; val g6M = mReg g6; val immed13_0 = immed13 0; val immed13_4 = immed13 4; val immed13_6 = immed13 6; val immed13_8 = immed13 8; val immed13_24 = immed13 24; val immed13_TAGSHIFT = immed13 TAGSHIFT; val immed13_TAGMASK = immed13 TAGMASK; val immed13_DATATAG = immed13 DATATAG; val immed13_CODETAG = immed13 CODETAG; fun signed13 (imm : int) : int = if imm < exp2_12 (* positive? *) then imm else (imm - exp2_13); end (* mode13 *); (* 30-bit mode for calls *) abstype mode30 = Imm30 of int (* 30 bit only *) with (* Unfortunately, we can't avoid the use of long arithmetic in the following code, because if i is negative, the result is (should be) >= exp2_29 i.e. it's not a 30-bit short. SPF 19/12/95 *) fun getMode30 (Imm30 i) = (* remove sign *) if i < 0 then exp2_30 + i else i; (* But we can work round this by returning a (signed) short. SPF 19/12/95 *) fun getMode30Short (Imm30 i) = toShort i; (* A hack that saves a lot of compile-time traps, assuming that the machine we're compiling on uses 30-bit shorts. SPF 19/12/95 *) fun is30Bit (v : int) = isShort v; (* ... fun is30Bit v = (* v will fit into 30 bits *) ~ exp2_29 <= v andalso v < exp2_29; ... *) fun immed30 i = Imm30 i; val immed30_0 = immed30 0; fun signed30 (imm : int) : int = if imm < exp2_29 (* positive? *) then imm else (imm - exp2_30); end (* mode30 *); (* 22-bit mode for jumps *) abstype mode22 = Imm22 of int (* 22 bit only *) with fun getMode22 (Imm22 i) = (* remove sign *) if i < 0 then exp2_22 + i else i; fun is22Bit v = (* v will fit into 22 bits *) ~ exp2_21 <= v andalso v < exp2_21; fun immed22 i = Imm22 i; val immed22_0 = immed22 0; fun signed22 (imm : int) : int = if imm < exp2_21 (* positive? *) then imm else (imm - exp2_22); end (* mode22 *); (* break a 32 bit word integer into 22 hi bits (+ve or -ve) + 10 lo bits (+ve) *) fun splitHiLo w = (* we assume ~exp2_31 <= w < exp2_31 *) let val lo = immed13 (w mod exp2_10); (* 0 <= lo < exp2_10 *) val hi = immed22 (w div exp2_10); (* ~exp2_21 <= hi < exp2_21 *) in (hi, lo) end; (* op2 opcodes *) datatype op2 = UNIMP (* 0 *) (* The official unimplemented instruction *) | UNIMP1 (* 1 *) | Bicc (* 2 *) | UNIMP3 (* 3 *) | SETHI (* 4 *) | UNIMP5 (* 5 *) | FBfcc (* 6 *) | CBccc (* 7 *) ; fun op2ToInt UNIMP = 0 | op2ToInt UNIMP1 = 1 | op2ToInt Bicc = 2 | op2ToInt UNIMP3 = 3 | op2ToInt SETHI = 4 | op2ToInt UNIMP5 = 5 | op2ToInt FBfcc = 6 | op2ToInt CBccc = 7 ; (* op3 opcodes used when op = 2 *) datatype op3_2 = ADD (* 0 *) | AND (* 1 *) | OR (* 2 *) | XOR (* 3 *) | SUB (* 4 *) | ANDN (* 5 *) | ORN (* 6 *) | XNOR (* 7 *) | ADDX (* 8 *) | UNIMP9 (* 9 *) | UNIMP10 (* 10 *) | UNIMP11 (* 11 *) | SUBX (* 12 *) | UNIMP13 (* 13 *) | UNIMP14 (* 14 *) | UNIMP15 (* 15 *) | ADDcc (* 16 *) | ANDcc (* 17 *) | ORcc (* 18 *) | XORcc (* 19 *) | SUBcc (* 20 *) | ANDNcc (* 21 *) | ORNcc (* 22 *) | XNORcc (* 23 *) | ADDXcc (* 24 *) | UNIMP25 (* 25 *) | UNIMP26 (* 26 *) | UNIMP27 (* 27 *) | SUBXcc (* 28 *) | UNIMP29 (* 29 *) | UNIMP30 (* 30 *) | UNIMP31 (* 31 *) | TADDcc (* 32 *) | TSUBcc (* 33 *) | TADDccTV (* 34 *) | TSUBccTV (* 35 *) | MULScc (* 36 *) | SLL (* 37 *) | SRL (* 38 *) | SRA (* 39 *) | RDY (* 40 *) | RDPSR (* 41 *) | RDWIM (* 42 *) | RDTBR (* 43 *) | UNIMP44 (* 44 *) | UNIMP45 (* 45 *) | UNIMP46 (* 46 *) | UNIMP47 (* 47 *) | WRY (* 48 *) | WRPSR (* 49 *) | WRWIM (* 50 *) | WRTBR (* 51 *) | FPop1 (* 52 *) | FPop2 (* 53 *) | CPop1 (* 54 *) | CPop2 (* 55 *) | JMPL (* 56 *) | RETT (* 57 *) | Ticc (* 58 *) | IFLUSH (* 69 *) | SAVE (* 60 *) | RESTORE (* 61 *) | UNIMP62 (* 62 *) | UNIMP63 (* 63 *) ; fun op3_2ToInt ADD = 0 | op3_2ToInt AND = 1 | op3_2ToInt OR = 2 | op3_2ToInt XOR = 3 | op3_2ToInt SUB = 4 | op3_2ToInt ANDN = 5 | op3_2ToInt ORN = 6 | op3_2ToInt XNOR = 7 | op3_2ToInt ADDX = 8 | op3_2ToInt UNIMP9 = 9 | op3_2ToInt UNIMP10 = 10 | op3_2ToInt UNIMP11 = 11 | op3_2ToInt SUBX = 12 | op3_2ToInt UNIMP13 = 13 | op3_2ToInt UNIMP14 = 14 | op3_2ToInt UNIMP15 = 15 | op3_2ToInt ADDcc = 16 | op3_2ToInt ANDcc = 17 | op3_2ToInt ORcc = 18 | op3_2ToInt XORcc = 19 | op3_2ToInt SUBcc = 20 | op3_2ToInt ANDNcc = 21 | op3_2ToInt ORNcc = 22 | op3_2ToInt XNORcc = 23 | op3_2ToInt ADDXcc = 24 | op3_2ToInt UNIMP25 = 25 | op3_2ToInt UNIMP26 = 26 | op3_2ToInt UNIMP27 = 27 | op3_2ToInt SUBXcc = 28 | op3_2ToInt UNIMP29 = 29 | op3_2ToInt UNIMP30 = 30 | op3_2ToInt UNIMP31 = 31 | op3_2ToInt TADDcc = 32 | op3_2ToInt TSUBcc = 33 | op3_2ToInt TADDccTV = 34 | op3_2ToInt TSUBccTV = 35 | op3_2ToInt MULScc = 36 | op3_2ToInt SLL = 37 | op3_2ToInt SRL = 38 | op3_2ToInt SRA = 39 | op3_2ToInt RDY = 40 | op3_2ToInt RDPSR = 41 | op3_2ToInt RDWIM = 42 | op3_2ToInt RDTBR = 43 | op3_2ToInt UNIMP44 = 44 | op3_2ToInt UNIMP45 = 45 | op3_2ToInt UNIMP46 = 46 | op3_2ToInt UNIMP47 = 47 | op3_2ToInt WRY = 48 | op3_2ToInt WRPSR = 49 | op3_2ToInt WRWIM = 50 | op3_2ToInt WRTBR = 51 | op3_2ToInt FPop1 = 52 | op3_2ToInt FPop2 = 53 | op3_2ToInt CPop1 = 54 | op3_2ToInt CPop2 = 55 | op3_2ToInt JMPL = 56 | op3_2ToInt RETT = 57 | op3_2ToInt Ticc = 58 | op3_2ToInt IFLUSH = 59 | op3_2ToInt SAVE = 60 | op3_2ToInt RESTORE = 61 | op3_2ToInt UNIMP62 = 62 | op3_2ToInt UNIMP63 = 63 ; datatype op3_3 = LD (* 0 *) | LDUB (* 1 *) | LDUH (* 2 *) | LDD (* 3 *) | ST (* 4 *) | STB (* 5 *) | STH (* 6 *) | STD (* 7 *) | UNIMP8 (* 8 *) | LDSB (* 9 *) | LDSH (* 10 *) | UNIMP11 (* 11 *) | UNIMP12 (* 12 *) | LDSTUB (* 13 *) | UNIMP14 (* 14 *) | SWAP (* 15 *) | LDA (* 16 *) | LDUBA (* 17 *) | LDUHA (* 18 *) | LDDA (* 19 *) | STA (* 20 *) | STBA (* 21 *) | STHA (* 22 *) | STDA (* 23 *) | UNIMP24 (* 24 *) | LDSBA (* 25 *) | LDSHA (* 26 *) | UNIMP27 (* 27 *) | UNIMP28 (* 28 *) | LDSTUBA (* 29 *) | UNIMP30 (* 30 *) | SWAPA (* 31 *) | LDF (* 32 *) | LDFSR (* 33 *) | UNIMP34 (* 34 *) | LDDF (* 35 *) | STF (* 36 *) | STFSR (* 37 *) | STDFQ (* 38 *) | STDF (* 39 *) | RDY (* 40 *) | UNIMP41 (* 41 *) | UNIMP42 (* 42 *) | UNIMP43 (* 43 *) | UNIMP44 (* 44 *) | UNIMP45 (* 45 *) | UNIMP46 (* 46 *) | UNIMP47 (* 47 *) | LDC (* 48 *) | LDCSR (* 49 *) | UNIMP50 (* 50 *) | LDDC (* 51 *) | STC (* 52 *) | STCSR (* 53 *) | STDCQ (* 54 *) | STDC (* 55 *) | UNIMP56 (* 56 *) | UNIMP57 (* 57 *) | UNIMP58 (* 58 *) | UNIMP59 (* 69 *) | UNIMP60 (* 60 *) | UNIMP61 (* 61 *) | UNIMP62 (* 62 *) | UNIMP63 (* 63 *) ; fun op3_3ToInt LD = 0 | op3_3ToInt LDUB = 1 | op3_3ToInt LDUH = 2 | op3_3ToInt LDD = 3 | op3_3ToInt ST = 4 | op3_3ToInt STB = 5 | op3_3ToInt STH = 6 | op3_3ToInt STD = 7 | op3_3ToInt UNIMP8 = 8 | op3_3ToInt LDSB = 9 | op3_3ToInt LDSH = 10 | op3_3ToInt UNIMP11 = 11 | op3_3ToInt UNIMP12 = 12 | op3_3ToInt LDSTUB = 13 | op3_3ToInt UNIMP14 = 14 | op3_3ToInt SWAP = 15 | op3_3ToInt LDA = 16 | op3_3ToInt LDUBA = 17 | op3_3ToInt LDUHA = 18 | op3_3ToInt LDDA = 19 | op3_3ToInt STA = 20 | op3_3ToInt STBA = 21 | op3_3ToInt STHA = 22 | op3_3ToInt STDA = 23 | op3_3ToInt UNIMP24 = 24 | op3_3ToInt LDSBA = 25 | op3_3ToInt LDSHA = 26 | op3_3ToInt UNIMP27 = 27 | op3_3ToInt UNIMP28 = 28 | op3_3ToInt LDSTUBA = 29 | op3_3ToInt UNIMP30 = 30 | op3_3ToInt SWAPA = 31 | op3_3ToInt LDF = 32 | op3_3ToInt LDFSR = 33 | op3_3ToInt UNIMP34 = 34 | op3_3ToInt LDDF = 35 | op3_3ToInt STF = 36 | op3_3ToInt STFSR = 37 | op3_3ToInt STDFQ = 38 | op3_3ToInt STDF = 39 | op3_3ToInt RDY = 40 | op3_3ToInt UNIMP41 = 41 | op3_3ToInt UNIMP42 = 42 | op3_3ToInt UNIMP43 = 43 | op3_3ToInt UNIMP44 = 44 | op3_3ToInt UNIMP45 = 45 | op3_3ToInt UNIMP46 = 46 | op3_3ToInt UNIMP47 = 47 | op3_3ToInt LDC = 48 | op3_3ToInt LDCSR = 49 | op3_3ToInt UNIMP50 = 50 | op3_3ToInt LDDC = 51 | op3_3ToInt STC = 52 | op3_3ToInt STCSR = 53 | op3_3ToInt STDCQ = 54 | op3_3ToInt STDC = 55 | op3_3ToInt UNIMP56 = 56 | op3_3ToInt UNIMP57 = 57 | op3_3ToInt UNIMP58 = 58 | op3_3ToInt UNIMP59 = 69 | op3_3ToInt UNIMP60 = 60 | op3_3ToInt UNIMP61 = 61 | op3_3ToInt UNIMP62 = 62 | op3_3ToInt UNIMP63 = 63 ; (* Specially written to reduce the number of emulation traps required *) fun callQuad (disp:mode30) : quad = let val addrBits : short = getMode30Short disp; val b4 : short = Word.andb (addrBits, mask8bits); val b3 : short = Word.andb (addrBits >> 0w8, mask8bits); val b2 : short = Word.andb (addrBits >> 0w16, mask8bits); val b1 : short = Word.andb (addrBits >> 0w24, mask6bits); val opc : short = toShort exp2_6; in Quad (Word.orb (opc, b1), b2, b3, b4) end; val call0 : quad = callQuad immed30_0; fun format3Quad (iOp:int, op3:int, rsn:int, mval:int, rdn:int) : quad = let val iop_short = toShort iOp; (* 2 bits *) val op3_short = toShort op3; (* 6 bits *) val rdn_short = toShort rdn; (* 5 bits *) val rsn_short = toShort rsn; (* 5 bits *) val mval_short = toShort mval; (* 14 bits *) val bits30_31 = iop_short << 0w6; (* 2 bits *) val bits25_29 = rdn_short << 0w1; (* 5 bits *) val bits24_24 = op3_short >> 0w5; (* 1 bit *) val b1 = Word.orb (Word.orb (bits25_29, bits24_24), bits30_31); val bits19_23 = Word.andb (op3_short, mask5bits) << 0w3; (* 5 bits *) val bits16_18 = rsn_short >> 0w2; (* 3 bits *) val b2 = Word.orb (bits16_18, bits19_23); val bits14_15 = Word.andb (rsn_short, mask2bits) << 0w6; (* 2 bits *) val bits8_13 = mval_short >> 0w8; (* 6 bits *) val b3 = Word.orb (bits8_13, bits14_15); val b4 = Word.andb (mval_short, mask8bits); (* 8 bits *) in Quad (b1, b2, b3, b4) end; fun fixupBranch (instr : quad, disp : mode22) : quad = let val (Quad (b1, b2, b3, b4)) = instr in if wordEq (0w0, b4) andalso wordEq (0w0, b3) andalso wordEq (0w0, Word.andb (b2, mask6bits)) then let val d = toShort (getMode22 disp); (* 22 bits will be a short *) val d4 = Word.andb (mask8bits, d); (* 8 bits *) val d3 = Word.andb (mask8bits, d >> 0w8); (* 8 bits *) val d2 = d >> 0w16; (* 6 bits *) in Quad (b1, Word.orb (b2, d2), d3, d4) end else raise InternalError "fixupBranch: already fixed-up" end; (* trap is a variation on format3 *) fun trap (cond:testCode, rs:reg, md:mode13) : quad = format3Quad (2, op3_2ToInt Ticc, getReg rs, getMode13 md, getTest cond) val tlu24 = trap (cs, g0, immed13_24); (* tlu 24 is a synonym for tcs 24 *) fun format2Quad (op2:int, imm:int (* unsigned *), rdn:int) : quad = let val rdn_short = toShort rdn; (* 5 bits *) val op2_short = toShort op2; (* 3 bits *) val imm_short = toShort imm; (* 22 bits *) (* val bits30_31 = 0w0; *) (* 2 bits *) val bits25_29 = rdn_short << 0w1; (* 5 bits *) val bits24_24 = op2_short >> 0w2; (* 1 bit *) val b1 = Word.orb (bits24_24, bits25_29); val bits22_23 = Word.andb (op2_short, mask2bits) << 0w6; (* 2 bits *) val bits16_21 = imm_short >> 0w16; (* 6 bits *) val b2 = Word.orb (bits16_21, bits22_23); val b3 = Word.andb (imm_short >> 0w8, mask8bits); val b4 = Word.andb (imm_short, mask8bits); in Quad (b1,b2,b3,b4) end; (* sethi and conditional branches are variations on format 2 *) fun sethi (v:mode22, rd:reg) : quad = format2Quad (op2ToInt SETHI, getMode22 v, getReg rd); (* opcode for a no-op - sethi 0,%0 *) val nopQuad : quad = sethi (immed22_0, g0); fun branch (annul:bool, cond:testCode, disp:mode22) : quad = let val tn = getTest cond; val rn = if annul then tn + exp2_4 else tn; in format2Quad (op2ToInt Bicc,getMode22 disp, rn) end; val branchAlwaysQuad : quad = branch (false (* no annul *), always, immed22_0); fun format3_2 (op3:op3_2, rs:reg, md:mode13, rd:reg) : quad = format3Quad (2, op3_2ToInt op3, getReg rs, getMode13 md, getReg rd); fun format3_3 (op3:op3_3, rs:reg, md:mode13, rd:reg) : quad = format3Quad (3, op3_3ToInt op3, getReg rs, getMode13 md, getReg rd); (* At the moment there are two kinds of operations that can be left pending and are not actually generated immediately. Changing the real stack pointer is not generated immediately because often these accumulate and sometimes even cancel out. Fixing up a branch is not done immediately in case we are going to jump somewhere else, and also because we can often use the delay slot of the jump. If both the branch and stack movement are deferred the branch is assumed to have happened first. *) (* Fix up the list of labels. *) fun reallyFixupBranches (cvec, target, []) = () | reallyFixupBranches (cvec, target, addrH :: addrT) = let val wordDiff : int = target wordAddrMinus addrH; val jumpInstr = getCodeQuad (addrH, cvec); val U : unit = if not (is22Bit wordDiff) (* 22 bit signed number *) then raise InternalError "reallyFixupBranches: jump too large" else (* Set this addr to point to the destination. *) setCodeQuad (fixupBranch (jumpInstr, immed22 wordDiff), addrH, cvec); in reallyFixupBranches (cvec, target, addrT) end; fun fixupRecursiveBranches (cvec, targetInstr, target, []) = () | fixupRecursiveBranches (cvec, targetInstr, target, addrH :: addrT) = let val nextAddr : addrs = addrH wordAddrPlus 1; val jumpInstr : quad = getCodeQuad (addrH, cvec); val nextInstr : quad = getCodeQuad (nextAddr, cvec); in if nextInstr <> nopQuad then let val wordDiff : int = target wordAddrMinus addrH; in if not (is22Bit wordDiff) then raise InternalError "fixupRecursiveBranches: jump too large" else setCodeQuad (fixupBranch (jumpInstr, immed22 wordDiff), addrH, cvec) end else let (* put targetInstr into the delay slot *) val newTarget : addrs = target wordAddrPlus 1; val wordDiff : int = newTarget wordAddrMinus addrH; in if not (is22Bit wordDiff) then raise InternalError "fixupRecursiveBranches: jump too large" else let val U : unit = setCodeQuad (fixupBranch (jumpInstr, immed22 wordDiff), addrH, cvec); in setCodeQuad (targetInstr, nextAddr, cvec) end end; fixupRecursiveBranches (cvec, targetInstr, target, addrT) end; fun fixupRecursiveCalls (cvec, targetInstr, target, []) = () | fixupRecursiveCalls (cvec, targetInstr, target, addrH :: addrT) = let val nextAddr : addrs = addrH wordAddrPlus 1; val callInstr : quad = getCodeQuad (addrH, cvec); val nextInstr : quad = getCodeQuad (nextAddr, cvec); in if callInstr <> call0 then raise InternalError "fixupRecursiveCalls: not a call instruction" else if nextInstr <> nopQuad then let val wordDiff : int = target wordAddrMinus addrH; in if not (is30Bit wordDiff) then raise InternalError "fixupRecursiveCalls: jump too large" else setCodeQuad (callQuad (immed30 wordDiff), addrH, cvec) end else let (* put targetInstr into the delay slot *) val newTarget : addrs = target wordAddrPlus 1; val wordDiff : int = newTarget wordAddrMinus addrH; in if not (is30Bit wordDiff) then raise InternalError "fixupRecursiveCalls: jump too large" else let val U : unit = setCodeQuad (callQuad (immed30 wordDiff), addrH, cvec); in setCodeQuad (targetInstr, nextAddr, cvec) end end; fixupRecursiveCalls (cvec, targetInstr, target, addrT) end; (* Deal with a pending fix-up. *) fun reallyFixup cvec = let val jcf = justComeFrom cvec; val here = ! (ic cvec); in case ! jcf of [] => () | labs => (exited cvec := false; reallyFixupBranches (cvec, here, labs); jcf := []) end; (* Generate an instruction. This may involve filling in a delay slot. *) (* What if we fill one delay slot, then find a second is already full? *) (* OK, since the two jumps will be sent to different destinations. *) fun genInstruction (instr : quad, cvec : code) : unit = if unreachable cvec then () else let val jcf = justComeFrom cvec fun fillDelays [] = [] | fillDelays (addr::addrs) = if getCodeQuad (addr wordAddrPlus 1, cvec) = nopQuad then let (* Put the instruction in the delay slot *) val U : unit = setCodeQuad (instr, addr wordAddrPlus 1, cvec); in (* Keep this label in the list for the next instruction. *) addr :: fillDelays addrs end else let (* Fix this up here. *) (* genLoadConstant? SPF *) val wordDiff : int = ! (ic cvec) wordAddrMinus addr; val jumpInstr = getCodeQuad (addr, cvec); val U : unit = if not (is22Bit wordDiff) (* 22 bit signed number *) then raise InternalError "genInstruction: jump too large" else (* Set this addr to point to the destination. *) setCodeQuad (fixupBranch (jumpInstr, immed22 wordDiff), addr, cvec); (* Must generate the instruction. *) val U : unit = exited cvec := false; in fillDelays addrs end; in case ! jcf of [] => () | labs => jcf := fillDelays labs; (* If we have managed to use delay slots we can keep defer those jumps for one instruction. If we have been unable to use any delay slot, or if we could have fallen through to here, we must generate the instruction. *) if not (! (exited cvec)) then genCodeQuad (instr, cvec) else () end (* genInstruction *); fun genInstructionList (cvec, []) = () | genInstructionList (cvec, w::ws) = (genInstruction (w, cvec); genInstructionList (cvec, ws)); (*************************************************************************** Functions for maintaining the write-through cache for untagged values. ***************************************************************************) fun cached (reg, cvec) = case ! (accCache cvec) of Empty => false | Copy r => r regEq reg fun cacheEmpty cvec = case !(accCache cvec) of Empty => true | _ => false; fun genUntagInstr (reg, cvec) = genInstruction (format3_2 (SUB, reg, immed13_DATATAG, i4), cvec); fun genTagInstr (reg, cvec) = genInstruction (format3_2 (ADD, i4, immed13_DATATAG, reg), cvec); (* process any pending writes, but remember state *) fun clearCache cvec = let val cache : CacheState ref = accCache cvec; in cache := Empty end; (* write the cache into reg *) fun writeCache (reg, cvec) = let val cache : CacheState ref = accCache cvec; in genTagInstr (reg, cvec); cache := Copy reg end; (* load the cache from reg *) fun readCache (reg, cvec) = let val cache : CacheState ref = accCache cvec; in case !cache of Empty => ( genUntagInstr (reg, cvec); cache := Copy reg ) | Copy r => if r regEq reg then () (* already there *) else ( genUntagInstr (reg, cvec); cache := Copy reg ) end; (***************************************************************************) (* load constant into i3, unless it's an immediate *) (* used for heap/stack addressing only *) fun immedCodeOffset (v:int) : quad list * mode13 = if is13Bit v then ([],immed13 v) else let val (hi,lo) = splitHiLo v val code = if eqMode13 lo immed13_0 (* minor optimisation *) then [sethi (hi, i3)] else [sethi (hi, i3), format3_2 (ADD, i3, lo, i3)] in (code, i3M) end; (* load constant into i5, unless it's an immediate *) (* We MUST use i5 for this, because the RTS won't understand the tsubcctv instruction in allocate-code if we use a different register. SPF 17/5/95 *) fun immedCodeData (v:int) : quad list * mode13 = if is13Bit v then ([],immed13 v) else let val (hi,lo) = splitHiLo v val code = if eqMode13 lo immed13_0 (* minor optimisation *) then [sethi (hi, i5)] else [sethi (hi, i5), format3_2 (ADD, i5, lo, i5)] in (code, i5M) end; (* Do outstanding operations in the right order. This deals with any stack resets which may involve fixing up some branches. *) fun doPendingStackAdjustment (cvec : code) : unit = case ! (stackReset cvec) of 0 => () | adj => let val (cl,imm) = immedCodeOffset (adj * wordSize); in stackReset cvec := 0; (* add %psp,imm,%psp *) genInstructionList (cvec, cl); genInstruction (format3_2 (ADD, psp, imm, psp), cvec) end; (* Called when about to generate a jump instruction. If we have a pending instruction we may be able to put it in the delay slot. This is called instead of doPendingStackAdjustment in those cases. *) fun putPendingInDelay (cvec : code) : quad = (* returns instruction to put in delay slot *) let (* Must take a jump here if it is pending. Can't put a jump in a delay slot. *) val U = reallyFixup cvec; (* justComeFrom cvec = [] *) val reset = ! (stackReset cvec) * wordSize; in if reset = 0 then nopQuad (* nothing useful to do *) else let val (cl,imm) = immedCodeOffset reset; val U : unit = genInstructionList (cvec, cl); val U : unit = stackReset cvec := 0; in format3_2 (ADD, psp, imm, psp) end end; (* Apparently fix up jumps - actually just record where we have come from *) fun fixup (lab : labels, cvec : code) : unit = let (* If the jump we are fixing up is an immediately preceding unconditional jump, we can remove it. This is particularly useful if we have used the delay slot for the whole of an else-part so we have nothing to jump over. It is also used for reducing the code for "andalso" and "orelse" to the minimal forms. N.B. this is only safe because the instruction in the delay slot is never itself the target of a jump, and because each label is only fixed up once. SPF 5/6/95. This is also only safe if we've exited, as otherwise the current instruction might be the target of a jump backwards, or it might be the start of a handler. N.B. this *can* happen if the body of the handler is trivial, so that it just falls through to the post-handler code. I discovered this the hard way, of course. SPF 27/6/95. *) fun checkLabs [] = [] | checkLabs (addr::addrs) = if ! (ic cvec) wordAddrMinus addr = 2 then let val instrQuad = getCodeQuad (addr, cvec); in if instrQuad = branchAlwaysQuad then let val delayQuad = getCodeQuad (addr wordAddrPlus 1, cvec); (* skip back two instructions *) val U : unit = ic cvec := addr; (* put the delay slot back into the instruction flow, using genCodeQuad not genInstruction to avoid prematurely fixing up any jumps. *) val U : unit = if delayQuad <> nopQuad then genCodeQuad (delayQuad, cvec) else (); (* We're now falling-through (rather than jumping) *) val U : unit = exited cvec := false; in addrs end else addr :: addrs (* we can't do anything clever *) end else addr :: checkLabs addrs; (* try the next jump *) (* We can't optimise if we haven't exited. *) fun checkLabsCarefully l = if ! (exited cvec) then checkLabs l else l; in case lab of [] => () (* we're not actually jumping from anywhere *) | _ => ( (* Since this is the start of a basic block, we must clear any caches that we maintaining. If we have a write-back (rather than write-through) cache, this may involve generating some code. *) clearCache cvec; (* Any pending stack reset must be done now. That may involve fixing up pending jumps. *) doPendingStackAdjustment cvec; (* Add together the jumps to here. *) justComeFrom cvec := checkLabsCarefully lab @ !(justComeFrom cvec) ) end; (* Adds in the reset. *) fun resetStack (offset : int, cvec : code) : unit = stackReset cvec := ! (stackReset cvec) + offset; (* Generates an unconditional branch. *) fun unconditionalBranch (cvec : code) : labels = if unreachable cvec then [] else if ! (stackReset cvec) = 0 then let (* If we are branching and we have just arrived from somewhere else we can combine this jump with the one we had just made. If we had an unconditional branch just before, we don't need to actually put a branch. *) val lab = if !(exited cvec) then !(justComeFrom cvec) (* no branch needed *) else ( (* Use genCodeQuad not genInstruction to avoid fixing up the outstanding branches. *) genCodeQuad (branchAlwaysQuad, cvec); (* ba *) genCodeQuad (nopQuad, cvec); exited cvec := true; (!(ic cvec) wordAddrPlus ~2) :: !(justComeFrom cvec) ); in justComeFrom cvec := []; lab end else let (* Stack needs adjustment - must generate the branch. *) val delayQuad = putPendingInDelay cvec; (* may generate code *) in genInstruction (branchAlwaysQuad, cvec); (* ba - no annul *) genInstruction (delayQuad, cvec); exited cvec := true; [!(ic cvec) wordAddrPlus ~2] end; (* Generates an unconditional call. *) fun genCall (cvec : code) = let val U : unit = clearCache cvec; (* end of basic block *) val delayQuad = putPendingInDelay cvec; (* may generate code *) in genInstruction (call0, cvec); genInstruction (delayQuad, cvec); !(ic cvec) wordAddrPlus ~2 end; fun putConditional (test : testCode, cvec : code) : labels = if unreachable cvec then [] (* SPF 5/6/95 *) else let val U : unit = clearCache cvec; (* end of basic block *) val delayQuad = putPendingInDelay cvec; (* may generate code *) (* If we have a pending instruction we put it in the delay slot and execute it whether or not we have take the branch, otherwise we put in a no-op and set the annul bit so that the delay slot can be filled in by the code to be executed at the destination of the branch. *) val annul = (delayQuad = nopQuad); in genInstruction (branch (annul, test, immed22_0), cvec); genInstruction (delayQuad, cvec); (* Make a label for this instruction. *) [! (ic cvec) wordAddrPlus ~2] end; (* Most of the arithmetic operations are of this form. *) (* Since they won't trap, we don't need to fix-up the stack; however, can we be sure that the stack-pointer isn't one of the operands? Let's check! SPF 16/5/95 *) fun type2 (c2 : op3_2) (r : reg, m : mode13, rd : reg, cvec : code) : unit = let val U : unit = if cached (rd, cvec) then clearCache cvec else (); val U : unit = if r regEq psp orelse rd regEq psp orelse eqMode13 m pspM then doPendingStackAdjustment cvec else (); in genInstruction (format3_2 (c2, r, m, rd), cvec) end; val genAnd = type2 AND; val genOr = type2 OR; val genXor = type2 XOR; val genAndn = type2 ANDN; val genSub = type2 SUB; val genAddcc = type2 ADDcc; val genAndcc = type2 ANDcc; val genSubcc = type2 SUBcc; val genSll = type2 SLL; val genSrl = type2 SRL; val genSra = type2 SRA; (* Special case for loading register from stack pointer. SPF 16/5/95 *) fun genAdd (r : reg, m : mode13, rd : reg, cvec : code) : unit = if r regEq psp andalso rd regNeq psp andalso isImm13 m then let val m' = getImm13 m + 4 * !(stackReset cvec); in if is13Bit m' then ( if cached (rd, cvec) then clearCache cvec else (); genInstruction (format3_2 (ADD, psp, immed13 m', rd), cvec) ) else type2 ADD (r, m, rd, cvec) end else type2 ADD (r, m, rd, cvec); (* subtract, but "save" result in g0 *) fun genCmp (r : reg, m : mode13, cvec : code) : unit = genSubcc (r, m, g0, cvec); (* or the source with 0 and put it in the destination. *) fun genMove (source : mode13, dest : reg, cvec : code) : unit = if eqMode13 source pspM andalso dest regNeq psp then let val adj = 4 * !(stackReset cvec); in if is13Bit adj then let val U : unit = if cached (dest, cvec) then clearCache cvec else (); in genInstruction (format3_2 (ADD, psp, immed13 adj, dest), cvec) end else genOr (g0, source, dest, cvec) end else genOr (g0, source, dest, cvec); (* These instruction may trap, so we must fix-up the stack. *) fun type2T (c2 : op3_2) (r : reg, m : mode13, rd : reg, cvec : code) : unit = ( (* The emulation of these instructions sometimes trashes i4, so clear the cache. *) clearCache cvec; doPendingStackAdjustment cvec; genInstruction (format3_2 (c2, r, m, rd), cvec) ); val genTaddcctv = type2T TADDccTV; val genTsubcctv = type2T TSUBccTV; (*************************************************************************** Functions that use cached values. ***************************************************************************) val genUntagToI4 : reg * code -> unit = readCache; val genTagFromI4 : reg * code -> unit = writeCache; fun genUntagToI5 (fromReg, cvec) = (* with a write-back cache, the value may *only* be in i4 *) if cached (fromReg, cvec) then genMove (i4M, i5, cvec) else genSub (fromReg, immed13_DATATAG, i5, cvec) (***************************************************************************) (* N.B. uses i5, which is never cached, so no "clearCache cvec" needed. *) fun genImmedData (cvec : code, v : int) : mode13 = let val (cl,loc) = immedCodeData v in (case cl of [] => () | _ => (* no need to adjust stack *) genInstructionList (cvec, cl)); loc end; fun genImmedOffset (cvec : code, v : int) : mode13 = let val (cl,loc) = immedCodeOffset v in (case cl of [] => () | _ => (* no need to adjust stack *) genInstructionList (cvec, cl)); loc end; fun genLoadImmed (v : int, rd : reg, cvec : code) : unit = let val U : unit = if cached (rd, cvec) then clearCache cvec else (); (* We shouldn't load immediates into psp, but if we try to, we have to ensure that it won't be corrupted by a subsequent stack adjustment. SPF 16/5/95 *) val U : unit = if rd regEq psp then doPendingStackAdjustment cvec else (); in if is13Bit v then genMove (immed13 v, rd, cvec) else let val (hi,lo) = splitHiLo v; in (* sethi %hi(v),%rd; add %rd,%lo(v),%rd; *) genInstruction (sethi (hi, rd), cvec); if eqMode13 lo immed13_0 then () (* minor optimisation *) else genAdd (rd, lo, rd, cvec) end end; (* This should be equivalent to the following definition: fun genLoadLengthWordImmed (flags, wordCount, rd, cvec) = genLoadImmed (flags * exp2_24 + wordCount, rd, cvec); except that the following version has been specially coded to avoid the use of compile-time long arithmetic. This little hack reduces compile-time for typical programs by several percent! SPF 19/12/95 *) (* We should have 0 <= flags < exp2_8; 0 < wordCount < exp2_24 *) fun genLoadLengthWordImmed (flags:int, wordCount:int, rd : reg, cvec) : unit = let val U : unit = if cached (rd, cvec) then clearCache cvec else (); (* We shouldn't load immediates into psp, but if we try to, we have to ensure that it won't be corrupted by a subsequent stack adjustment. SPF 16/5/95 *) val U : unit = if rd regEq psp then doPendingStackAdjustment cvec else (); in if flags = 0 andalso is13Bit wordCount then genMove (immed13 wordCount, rd, cvec) else let (* 8 bits + 14 bits + 10 bits = 32 bits *) val hi = immed22 (flags * exp2_14 + wordCount div exp2_10); val lo = immed13 (wordCount mod exp2_10); in (* sethi %hi(v),%rd; add %rd,%lo(v),%rd; *) genInstruction (sethi (hi, rd), cvec); if eqMode13 lo immed13_0 then () (* minor optimisation *) else genAdd (rd, lo, rd, cvec) end end; fun genLoadInstr (iop : op3_3) (rb : reg, m : mode13, rd : reg, cvec : code) : unit = let val U : unit = if cached (rd, cvec) then clearCache cvec else (); (* Do we need to fix-up the stack pointer? *) val U : unit = if rd regEq psp orelse rb regEq psp orelse eqMode13 m pspM then doPendingStackAdjustment cvec else () in genInstruction (format3_3 (iop, rb, m, rd), cvec) end; fun genLoad (offset : int, rb : reg, rd : reg, cvec : code) : unit = let val U : unit = if cached (rd, cvec) then clearCache cvec else (); (* Do we need to fix-up the stack pointer? *) val U : unit = if rd regEq psp then doPendingStackAdjustment cvec else (); val adjustedOffset = if rb regEq psp then offset + 4 * !(stackReset cvec) else offset; val imm = genImmedOffset (cvec, adjustedOffset); in genInstruction (format3_3 (LD, rb, imm, rd), cvec) end; datatype storeWidth = STORE_WORD | STORE_BYTE (* NB Load and Store have registers the other way round *) fun genStoreOp iop (rd : reg, offset : int, rb : reg, cvec : code) : unit = let (* Do we need to fix-up the stack pointer? Yes, if that's the register we're storing. *) val U : unit = if rd regEq psp then doPendingStackAdjustment cvec else (); val adjustedOffset = if rb regEq psp then offset + 4 * !(stackReset cvec) else offset; (* We can guarantee that rd <> %i3, so this is always safe. This wouldn't necessarily be the case if we used genImmedData instead of genImmedOffset. We might be called with rd = %i5 together with a large (non 13-bit) offset, and then everything would go horribly wrong. (Yes, it DID happen.) SPF 2/4/97 *) val imm = genImmedOffset (cvec, adjustedOffset); in genInstruction (format3_3 (iop, rb, imm, rd), cvec) end; (* General purpose store function. Since we don't allow indexed stores index should always be regNone. *) fun genStore (rd : reg, offset : int, rb : reg, STORE_WORD, index: reg, cvec : code) = if index regEq regNone then genStoreOp ST (rd, offset, rb, cvec) else ( (* At present the offset will always be zero if there is an index register. *) if offset = 0 then () else raise InternalError "genStore: index register and non-zero offset"; (* Untag the index. *) genUntagToI4 (index, cvec); genInstruction (format3_3 (ST, rb, i4M, rd), cvec) ) | genStore(rd : reg, offset : int, rb : reg, STORE_BYTE, index: reg, cvec : code) = ( (* Untag the value to store. *) genSrl (rd, immed13_TAGSHIFT, i5, cvec); if index regEq regNone then genStoreOp STB (i5, offset, rb, cvec) else ( (* At present the offset will always be zero if there is an index register. *) if offset = 0 then () else raise InternalError "genStore: index register and non-zero offset"; (* Shift index to remove tag and get byte-index *) clearCache cvec; genSra (index, immed13_TAGSHIFT, i4, cvec); genInstruction (format3_3 (STB, rb, i4M, i5), cvec) ) ); val genStoreWord = genStoreOp ST; val genStoreByte = genStoreOp STB; (* Start inlining assignments. *) val inlineAssignments: bool = true fun isIndexedStore _ = true (* Exported - Can we store the value without going through a register? Not really. But if we're going to do a store-byte we have to untag the value and it will definitely be better to do this by loading the untagged value directly into the register. This is very infrequent though, so for the moment we don't do it. *) fun isStoreI (cnstnt: machineWord, _, _) : bool = false; fun genStoreI (cnstnt: machineWord, offset: int, rb: reg, width, index: reg, cvec: code) : unit = raise InternalError "Not implemented: genStoreI"; (* Store a value on the stack. This is used when the registers need to be saved, for more than 4 arguments or to push an exception handler. *) fun genPush (r : reg, cvec : code) : unit = let (* If the adjusted byte-offset won't fit into 13 bits, flush the stack reset. *) val U : unit = if is13Bit (4 * (!(stackReset cvec) - 1)) then () else doPendingStackAdjustment cvec; (* generate the store *) val U : unit = genStoreWord (r, ~4, psp, cvec) in (* Finally adjust the stack reset (rather than adjusting the stack pointer itself). *) stackReset cvec := !(stackReset cvec) - 1 end; (* Load a value and push it on the stack. Used when all the allocatable registers have run out. *) (* Use i5 as a spare register. *) fun genLoadPush (offset : int, base : reg, cvec : code) : unit = let val U : unit = genLoad (offset, base, i5, cvec); in genPush (i5, cvec) end; (* This is false because there's no quicker way than loading into a register and then pushing that. *) val preferLoadPush = false; fun genJmpl (m : mode13, breg : reg, lreg : reg, cvec : code) : unit = let val U : unit = clearCache cvec; (* end of basic block *) val delayQuad = putPendingInDelay cvec; (* may generate code *) in (* jmpl breg+m,lreg *) genInstruction (format3_2 (JMPL, breg, m, lreg), cvec); genInstruction (delayQuad, cvec); (* we don't come back from a tailcall, so we've exited *) if lreg regEq g0 then exited cvec := true else () end; (* Make a reference to another procedure. Usually this will be a forward *) (* reference but it may have been compiled already, in which case we can *) (* put the code address in now. *) fun codeConst (Code {resultSeg = ref(Set(seg, _)), ... }, into) = (* Already done. *) WVal (toMachineWord(csegAddr seg)) | codeConst (r, into) = (* forward *) (* Add the referring procedure onto the list of the procedure referred to if it is not already there. This makes sure that when the referring procedure is finished and its address is known the address will be plugged in to every procedure which needs it. *) let fun onList x [] = false | onList x (c::cs) = (x is c) orelse onList x cs; val codeList = ! (otherCodes r); in if onList into codeList then () else otherCodes r := into :: codeList; CVal r end (* N.B. genLoadConstant must be very careful to do nothing for unreachable code, because otherwise genStoreOp won't generate any code, but fixupConstantLoad will later try to fixup a non-existant load. SPF 28/11/95 *) fun genLoadConstant (cnstnt, destR : reg, cvec as Code{numOfConsts, constVec, ic, ...}) : unit = if unreachable cvec then () else ( (* We can't afford to put this instruction in a delay slot, because we're trying to record its address, so force fix-up now. *) reallyFixup cvec; numOfConsts := ! numOfConsts + 1; constVec := (cnstnt, !ic) :: ! constVec; (* Generate a pair of instruction containing tagged 0. We mustn't put in the real value at the moment because this is a byte segment and so the value won't be updated as a result of any garbage collection. *) let val (hi,lo) = splitHiLo(tagged 0) in genInstruction (sethi (hi, destR), cvec); genAdd (destR, lo, destR, cvec) end ); fun genLoadCoderef (rf : code, destR : reg, cvec : code) : unit = if unreachable cvec then () else genLoadConstant (codeConst (rf, cvec), destR, cvec) type handlerLab = addrs ref; fun loadHandlerAddress (destR : reg, cvec : code) : handlerLab = let val lab : handlerLab = ref addrZero; in genLoadConstant (HVal lab, destR, cvec); lab end; fun fixupHandler (lab : handlerLab, cvec : code) : unit = ( clearCache cvec; (* start of basic block *) doPendingStackAdjustment cvec; reallyFixup cvec; exited cvec := false; lab := ! (ic cvec) ); datatype callKinds = Recursive (* The function calls itself. *) | ConstantFun of machineWord * bool (* A pre-compiled or io function. *) | CodeFun of code (* A static link call. *) | FullCall (* Full closure call *) (* NB this version of the compiler now assumes that the first instruction of the called function is ALWAYS "or %o7,2,%o7". (I had to rewrite the run-time system to achieve this.) We skip this instruction whenever possible. It would be nice to put it in the delay slot instead, but that would give us serious backwards comaptibility problems (our code couldn't be called by the Poly version of the compiler). The answer is to bootstrap a version of the source that does the check in BOTH places, then use it to bootstrap the version that only checks in the delay slot. Probably not worth the trouble though. SPF 14/10/94 I don't think this applies any longer. DCJM 25/7/06. *) (***************************************************************************** Calling conventions: FullCall: the caller loads the function's closure into regClosure and then (the code here) does an indirect jump through it. Recursive: the caller loads its own function's closure/static-link into regClosure and the code here does a jump to the start of the code. ConstantFun: a direct or indirect call through the given address. If possible the caller will have done the indirection for us and passed false as the indirection value. The exception is calls to IO functions where the address of the code itself is invalid. If the closure/static-link value is needed that will already have been loaded. CodeFun: the same as ConstantFun except that this is used only for static-link calls so is never indirect. *****************************************************************************) (* Call a function. We have to set the stack-check flag to ensure that the called procedure receives its full minStackCheck words allocation of "free" stack. *) fun callFunction (callKind : callKinds, cvec as Code{constVec, numOfConsts, ...} ) : unit = (* Mustn't add to selfCalls list unless we're actually generating code! *) if unreachable cvec then () else ( mustCheckStack cvec := true; case callKind of Recursive => let val lab = genCall cvec; in selfCalls cvec := lab :: !(selfCalls cvec) end | FullCall => ( genLoad (0, regClosure, i2, cvec); genJmpl (immed13_0, i2, regReturn, cvec) ) | ConstantFun(w, false) => let val lab = genCall cvec in numOfConsts := ! numOfConsts + 1; constVec := (WVal w, lab) :: ! constVec end | ConstantFun(w, true) => ( (* We can't use a CALL instruction here because we're calling into the RTS. *) (* We have to use i2 here because we want the GC to recognise this as an address. *) genLoadConstant (WVal w, regClosure, cvec); genLoad (0, regClosure, i2, cvec); genJmpl (immed13_0, i2, regReturn, cvec) ) | CodeFun c => let val lab = genCall cvec in numOfConsts := ! numOfConsts + 1; constVec := (codeConst(c, cvec), lab) :: ! constVec end ) (* Tail recursive jump to a function. We have to set the stack-check flag to enable the user to break out of loops. *) fun jumpToFunction (callKind : callKinds, returnReg : reg, cvec : code) : unit = (* Mustn't add to selfJumps list unless we're actually generating code! *) if unreachable cvec then () else let val U : unit = (* Put return address in the correct register. *) if returnReg regEq regReturn then () else genMove (mReg returnReg, regReturn, cvec); in case callKind of Recursive => let val U : unit = mustCheckStack cvec := true; val lab = unconditionalBranch cvec; in selfJumps cvec := lab @ !(selfJumps cvec) end | FullCall => ( mustCheckStack cvec := true; genLoad (0, regClosure, i2, cvec); (* Jump past the or %o7,2,%o7 at the start of every function. *) genJmpl (immed13_4, i2, g0, cvec) ) | ConstantFun(w, false) => ( mustCheckStack cvec := true; (* We MUST use i2 here because we want the GC to recognise this as an address. *) genLoadConstant (WVal w, i2, cvec); (* Jump past the or %o7,2,%o7 at the start of every function. *) genJmpl (immed13_4, i2, g0, cvec) ) | ConstantFun(w, true) => ( (* Indirect jumps are used to call into the RTS. No need to check the stack. *) genLoadConstant (WVal w, regClosure, cvec); genLoad (0, regClosure, i2, cvec); (* Jump past the or %o7,2,%o7 at the start of every function. *) genJmpl (immed13_4, i2, g0, cvec) ) | CodeFun c => ( mustCheckStack cvec := true; (* We MUST use i2 here because we want the GC to recognise this as an address. *) genLoadCoderef (c, i2, cvec); (* Jump past the or %o7,2,%o7 at the start of every function. *) genJmpl (immed13_4, i2, g0, cvec) ) end; (* Return and remove args. *) fun returnFromFunction (resReg : reg, args : int, cvec : code) : unit = ( resetStack (args, cvec); (* Add in the reset. *) genJmpl (immed13_6, resReg, g0, cvec) ); (* The exception argument has already been loaded into o0. We initialise o7 (the return address) because this is used by the RTS exception handler, when it does a stack trace. *) fun raiseException cvec = ( genLoad (MemRegRaiseException, i0, i2, cvec); genJmpl (immed13_0, i2, regReturn, cvec) ) (* Exported. Set a register to a particular offset in the stack. *) fun genStackOffset (reg, byteOffset, cvec) : unit = genAdd (regStackPtr, genImmedOffset(cvec, byteOffset), reg, cvec); (* Trap instruction. Causes trap if garbage-collection is needed or when the stack is about to overflow. *) fun genTrapls (cvec : code) : unit = ( doPendingStackAdjustment cvec; genInstruction (tlu24, cvec) ); (* Only used for while-loops. Could make use of the delay slot but probably not worth it. *) fun jumpback (lab : addrs, stackCheck : bool, cvec : code) : unit = ( clearCache cvec; (* end of basic block (not needed if we exit?) *) doPendingStackAdjustment cvec; (* Put in a stack check. This is used to allow the code to be interrupted. *) if stackCheck then ( (* If we trap the trap handling code examines the previous instruction to see how big to make the stack. That's really only relevant at the start of a function but we must ensure that the instruction immediately before the trap is a comparison. To do that we must make sure we don't move the comparison into a delay slot. *) (* That may no longer be a problem now we have to load a reg first. *) genLoad (MemRegStackLimit, i0, i3, cvec); reallyFixup cvec; genCmp (psp, i3M, cvec); genTrapls cvec ) else (); reallyFixup cvec; let val wordOffset : int = lab wordAddrMinus (! (ic cvec)); (* Negative *) in genInstruction (branch (true, always, immed22 wordOffset), cvec) end; exited cvec := true ); (* Allocate store and put the resulting pointer in the result register. *) fun allocStore (length : int, flag : Word8.word, resultReg : reg, cvec : code) : unit = if length < 1 orelse exp2_24 <= length then raise InternalError "allocStore: bad length" else let val bytes : int = (length + 1) * wordSize; in let val imm = genImmedData (cvec, bytes); (* may generate code *) in (* Decrement the store available (-maxint) and trap if it overflows. *) (* sub %g6,bytes,%g6; tsubcctv %g5,bytes,%g5 *) genSub (g6, imm, g6, cvec); genTsubcctv (g5, imm, g5, cvec) (* special case of tsubcctv *) end; (* Set the size field of a newly allocated piece of store and include the `mutable' bit. *) genLoadLengthWordImmed (Word8.toInt flag, length, i5, cvec); genMove (g6M, resultReg, cvec); genStoreWord (i5, ~4, g6, cvec) end; (* Remove the mutable bit; only save for word objects. *) fun setFlag (baseReg : reg, cvec : code, flag : Word8.word) : unit = let val flagRep = Word8.toInt flag; in if flagRep = 0 then genStoreByte (g0, ~4, baseReg, cvec) else ( genLoadImmed (flagRep, i5, cvec); genStoreByte (i5, ~4, baseReg, cvec) ) end (* Don't need to do anything on the Sparc. *) val completeSegment = (fn (cvec : code) => ()); datatype instrs = instrMove | instrAddA | instrSubA | instrRevSubA | instrMulA | instrAddW (* Various word functions added DCJM 17/4/00 *) | instrSubW | instrRevSubW | instrMulW | instrDivW | instrModW | instrOrW | instrAndW | instrXorW | instrLoad | instrLoadB | instrVeclen | instrVecflags | instrPush (* added 12/9/94 SPF for v2.08 compiler *) | instrUpshiftW (* logical shift left *) | instrDownshiftW (* arithmetic shift right *) | instrDownshiftArithW (* arithmetic shift right - added 17/4/00 DCJM *) | instrGetFirstLong | instrStringLength | instrSetStringLength | instrBad; (* Can the we use the same register as the source and destination of an instructions? On this machine - yes. *) val canShareRegs : bool = true; (* Is there a general register/register operation? Some operations may not be implemented because this machine does not have a suitable instruction or simply because they have not yet been added to the code generator. It is possible for an instruction to be implemented as a register/immediate operation but not as a register/register operation (e.g. multiply) *) fun instrIsRR i = case i of instrMulA => false | instrMulW => false | instrDivW => false | instrModW => false | instrVeclen => false (* immediate form only *) | instrVecflags => false (* immediate form only *) | instrUpshiftW => false | instrDownshiftW => false | instrDownshiftArithW => false | instrGetFirstLong => false (* immediate form only *) | instrStringLength => false (* immediate form only *) | instrSetStringLength => true | _ => true; datatype tests = Short | Long | Arb of testCode | Wrd of testCode; val testNeqW = Wrd ne; val testEqW = Wrd e; val testGeqW = Wrd cc; (* Word tests are UNsigned. DCJM 17/4/00. *) val testGtW = Wrd gu; val testLeqW = Wrd leu; val testLtW = Wrd cs; val testLtSignedW = Wrd l; (* These are needed for case checks. *) val testGtSignedW = Wrd g; val testNeqA = Arb ne; val testEqA = Arb e; val testGeqA = Arb ge; val testGtA = Arb g; val testLeqA = Arb le; val testLtA = Arb l; fun isLongTest Long = true | isLongTest _ = false; fun isShortTest Short = true | isShortTest _ = false; fun isArb (Arb _) = true | isArb _ = false; fun isWrd (Wrd _) = true | isWrd _ = false; fun tstArb (Arb x) = x | tstArb _ = raise Match; fun tstWrd (Wrd x) = x | tstWrd _ = raise Match; (* Is this argument acceptable as an immediate or should it be loaded into a register? *) fun instrIsRI (i : instrs, cnstnt:machineWord) : bool = (* For most instructions this is simply a question of whether the tagged value will fit in 13 (signed) bits. For the multiply instruction this is a question of whether it is small enough to be implemented by repeated addition, but 1024 seems like a reasonable limit. *) let fun isShiftable c = 0 <= c andalso c < (32 - TAGSHIFT) in case i of instrBad => false | instrMove => true (* Must always be implemented. *) | instrPush => false | instrUpshiftW => isShort cnstnt andalso isShiftable(toInt (toShort cnstnt)) | instrDownshiftW => isShort cnstnt andalso isShiftable(toInt (toShort cnstnt)) | instrDownshiftArithW => isShort cnstnt andalso isShiftable(toInt (toShort cnstnt)) | instrDivW => false | instrModW => false | instrMulW => false (* At least for the moment *) | instrVeclen => true | instrVecflags => true | instrLoadB => isShort cnstnt andalso is13Bit(toInt (toShort cnstnt)) | instrLoad => isShort cnstnt andalso isTaggable13Bit(toInt (toShort cnstnt)) | instrGetFirstLong => false (* Probably too difficult. *) | instrStringLength => true | instrSetStringLength => false (* Not at the moment. *) | _ => isShort cnstnt andalso isTaggable13Bit(toInt (toShort cnstnt)) end (* untag the arguments into the working registers, returning their locations in order *) fun untagBothArgs (r1 : reg, r2 : reg, cvec : code) : reg * mode13 = (* The following would be unsafe because the RTS assumes that (i4+1) and (i5+1) are valid tagged integers whenever we do a taddcctv or tsubcctv with a non-constant argument, which wouldn't necessarily be the case if we don't explicitly initialise both of them. *) (* ... if r1 regEq r2 then ( genUntagToI4 (r1, cvec); (i4, i4M) ) else ... *) if cached (r1, cvec) then (* r1 is cached *) ( genUntagToI4 (r1, cvec); (* "just in case" *) genUntagToI5 (r2, cvec); (i4, i5M) ) else (* perhaps r2 is cached *) ( genUntagToI4 (r2, cvec); genUntagToI5 (r1, cvec); (i5, i4M) ); (* useful for symmetric functions only *) fun untagOneArg (r1 : reg, r2 : reg, cvec : code) : reg * mode13 = if cached (r1, cvec) then (* r1 is cached *) ( genUntagToI4 (r1, cvec); (* "just in case" *) (r2, i4M) ) else (* perhaps r2 is cached *) ( genUntagToI4 (r2, cvec); (r1, i4M) ); (* All comparisons are implemented. *) fun isCompRR (tc : tests) : bool = case tc of Short => false | Long => false | Wrd t => true | Arb t => true; (* Is this argument acceptable as an immediate or should it be *) (* loaded into a register? *) fun isCompRI (tc : tests, cnstnt : machineWord) : bool = isLongTest tc orelse isShortTest tc orelse (isShort cnstnt andalso (* Must fit in immediate field. *) isTaggable13Bit (toInt (toShort cnstnt))); (* Fixed and arbitrary precision comparisons. *) fun compareAndBranchRR (r1 : reg, r2 : reg, tc : tests, cvec : code) : labels = if isArb tc then let (* Must remove the tags before doing the operation. *) val (arg1, arg2M) = untagBothArgs (r1, r2, cvec) in genTsubcctv (arg1, arg2M, g0, cvec); (* both i4 and i5 are "legal" *) putConditional (tstArb tc, cvec) end else if isWrd tc then (* Fixed *) ( genCmp (r1, mReg r2, cvec); putConditional (tstWrd tc, cvec) ) else raise InternalError "compareAndBranchRR: Unimplemented test"; fun compareAndBranchRI (r:reg, cnstnt:machineWord, tc : tests, cvec) : labels = if isShortTest tc then ( genAndcc (r, immed13_DATATAG, g0, cvec); putConditional (ne, cvec) ) else if isLongTest tc then ( genAndcc (r, immed13_DATATAG, g0, cvec); putConditional (e, cvec) ) else let val c = toInt (toShort cnstnt); in if isWrd tc (* Fixed *) then ( genCmp (r, immed13 (tagged c), cvec); putConditional (tstWrd tc, cvec) ) else let (* isArb tc *) (* If we are testing for equality with a constant then we can simply test directly. *) val tk = tstArb tc; in if eqTest tk e orelse eqTest tk ne then genCmp (r, immed13 (tagged c), cvec) else (* Must remove the tags before doing the operation. *) ( genUntagToI4 (r, cvec); genTsubcctv (i4, immed13 (semiTagged c), g0, cvec) ); putConditional (tk, cvec) end end; (* General register/register operation. *) fun genRR (inst : instrs, r1 : reg, r2 : reg, rd : reg, cvec : code) : unit = case inst of instrMove => (* Move from one register to another. r2 is ignored *) genMove (mReg r1, rd, cvec) | instrPush => (* Both rd and r2 are ignored. *) genPush (r1, cvec) | instrAddA => (* Arbitrary precision addition. *) let val (arg1, arg2M) = untagBothArgs (r1, r2, cvec) in genTaddcctv (arg1, arg2M, i4, cvec); (* both i4 and i5 are "legal" *) genTagFromI4 (rd, cvec) end | instrSubA => (* Arbitrary precision subtraction. *) let val (arg1, arg2M) = untagBothArgs (r1, r2, cvec) in genTsubcctv (arg1, arg2M, i4, cvec); (* both i4 and i5 are "legal" *) genTagFromI4 (rd, cvec) end | instrRevSubA => (* Arbitrary precision subtraction. *) let val (arg2, arg1M) = untagBothArgs (r2, r1, cvec) in genTsubcctv (arg2, arg1M, i4, cvec); (* both i4 and i5 are "legal" *) genTagFromI4 (rd, cvec) end | instrMulA => (* Arbitrary precision multiplication. *) raise InternalError "genRR: unsupported operation - instrMulA" | instrAddW => (* Word addition. *) (* Untag one of the arguments into i4, then add the other one to it. We don't care which argument gets untagged (addition is a symmetric operation), so we can try to be clever with the caching. *) let (* Word addition. *) val (arg1, arg2M) = untagOneArg (r1, r2, cvec) in genAdd (arg1, arg2M, rd, cvec) (* Ignore overflow. *) end | instrSubW => (* Word subtraction. *) (* Remove the tag from the second argument, then do the operation. *) ( genUntagToI4 (r2, cvec); genSub(r1, i4M, rd, cvec) (* Ignore overflow. *) ) | instrRevSubW => (* Fixed precision reverse subtraction. *) ( genUntagToI4 (r1, cvec); genSub (r2, i4M, rd, cvec) (* Ignore overflow. *) ) | instrMulW => (* Word multiplication. *) raise InternalError "genRR: unsupported operation - instrMulW" | instrDivW => (* Word multiplication. *) raise InternalError "genRR: unsupported operation - instrDivW" | instrModW => (* Word multiplication. *) raise InternalError "genRR: unsupported operation - instrModW" | instrOrW => (* tag preserved by operation *) genOr (r1, mReg r2, rd, cvec) (* Logical or. *) | instrAndW => (* tag preserved by operation *) genAnd (r1, mReg r2, rd, cvec) (* Logical and. *) | instrXorW => let (* Have to remove the tag from one argument. *) val (arg1, arg2M) = untagOneArg (r1, r2, cvec) in genXor (arg1, arg2M, rd, cvec) end | instrUpshiftW => raise InternalError "genRR: unsupported operation - instrUpshiftW" | instrDownshiftW => raise InternalError "genRR: unsupported operation - instrDownshiftW" | instrDownshiftArithW => raise InternalError "genRR: unsupported operation - instrDownshiftArithW" | instrLoad => (* Load a word. *) ( (* Remove the tag from the index. *) genUntagToI4 (r2, cvec); genLoadInstr LD (r1, i4M, rd, cvec) ) | instrLoadB => (* Load a byte. Leaves untagged value in i4 - worthwhile? *) ( (* Shift index to remove tag and get byte-index *) genSra (r2, immed13_TAGSHIFT, i5, cvec); genLoadInstr LDUB (r1, i5M, i5, cvec); (* Tag the result. *) genSll (i5, immed13_TAGSHIFT, i4, cvec); genTagFromI4 (rd, cvec) ) | instrSetStringLength => (* Set the length word of a string. *) ( (* Untag the value to store. *) genSra (r2, immed13_TAGSHIFT, i5, cvec); (* Store it in the first word of the new string. *) genStoreWord (i5, 0, r1, cvec) (* We really should set rd to "unit". *) ) | _ => raise InternalError "genRR: unsupported operation" (* end genRR *); (* Register/immediate operations. In many of these operations we have to tag the immediate value. *) fun genRI (inst : instrs, rs : reg, constnt : machineWord, rd : reg, cvec : code) : unit = case inst of instrMove => (* Load a constant into a register. rs is ignored. *) if isShort constnt andalso isTaggable13Bit(toInt (toShort constnt)) then genLoadImmed (tagged(toInt (toShort constnt)), rd, cvec) else genLoadConstant(WVal constnt, rd, cvec) | instrAddA => (* Arbitrary precision addition. *) let val c = toInt (toShort constnt) in (* Must remove the tags before doing the operation. *) genUntagToI4 (rs, cvec); genTaddcctv (i4, immed13 (semiTagged c), i4, cvec); (* add constant to i4 - OK *) genTagFromI4 (rd, cvec) (* Put back the tag in the result. *) end | instrSubA => (* Arbitrary precision subtraction. *) let val c = toInt (toShort constnt) in genUntagToI4 (rs, cvec); genTsubcctv (i4, immed13 (semiTagged c), i4, cvec); (* subtract constant from i4 - OK *) genTagFromI4 (rd, cvec) end | instrRevSubA => (* Arbitrary precision reverse subtraction. *) let val c = toInt (toShort constnt) in genUntagToI4 (rs, cvec); (* The following would be unsafe because the RTS assumes that (i4+1) and (i5+1) are valid tagged integers whenever we do a taddcctv or tsubcctv with a non-constant argument, which wouldn't necessarily be the case if we don't explicitly initialise both of them. *) (* ... if c = 0 then genTsubcctv (g0, i4M, i4, cvec) else ... *) ( genMove (immed13 (semiTagged c), i5, cvec); genTsubcctv (i5, i4M, i4, cvec) (* both i4 and i5 are "legal" *) ); genTagFromI4 (rd, cvec) end | instrMulA => let val c = toInt (toShort constnt) (* The following is tricky because the RTS assumes that (i4+1) and (i5+1) are valid tagged integers whenever we do a taddcctv or tsubcctv with a non-constant arguments. DCJM's version of the code-generator didn't ensure that this was always the case. *) (* The sparc does not have a multiply instruction but it may well be worth doing multiplications by constants by repeated addition. Do this if the constant is small (1024 seems small). *) fun mulConst (cn : int) : unit = let (* i4 must be "legal" on entry; i5 is trashed; res := c * i4; *) fun genMult (c, res) = if c = 0 then genLoadImmed (0, res, cvec) else if c = 1 then if res regEq i4 then () else genMove (i4M, res, cvec) else if c mod 8 = 7 (* DCJM's fancy optimisation *) then ( genMult ((c + 1) div 2, i5); (* initialise i5 *) genTaddcctv (i5, i5M, i5, cvec); (* both i4 and i5 are "legal" *) genTsubcctv (i5, i4M, res, cvec) (* both i4 and i5 are "legal" *) ) else if c mod 2 = 1 then ( genMult (c div 2, i5); (* initialise i5 *) genTaddcctv (i5, i5M, i5, cvec); (* both i4 and i5 are legal *) genTaddcctv (i5, i4M, res, cvec) (* both i4 and i5 are legal *) ) else (* c mod 2 = 0 *) ( genMult (c div 2, i5); (* initialise i5 *) genTaddcctv (i5, i5M, res, cvec) (* both i4 and i5 are legal *) ); in if cn = 0 (* It's possible someone might write this. *) then genMove (immed13 (tagged 0), rd, cvec) else if cn = 1 then genMove (mReg rs, rd, cvec) else if cn < 0 then (* Must negate the multiplicand. *) ( genUntagToI4 (rs, cvec); genMult (~ cn, i4); (* Initialises i4 *) genLoadImmed (0, i5, cvec); (* Puts a legal value into i5 *) genTsubcctv (i5, i4M, i4, cvec); (* O.K. since both i4 and i5 are legal *) genTagFromI4 (rd, cvec) (* Put the tag in the result. *) ) else (* Positive. *) ( genUntagToI4 (rs, cvec); genMult (cn, i4); genTagFromI4 (rd, cvec) (* Put the tag in the result. *) ) end (* mulConst *); in mulConst c end (* isInstrMulA *) | instrAddW => (* Word addition. *) (* The argument is shifted but not tagged. *) genAddcc (rs, immed13 (semiTagged(toInt (toShort constnt))), rd, cvec) | instrSubW => (* Fixed precision subtraction. *) genSubcc (rs, immed13 (semiTagged(toInt (toShort constnt))), rd, cvec) | instrRevSubW => (* Fixed precision reverse subtraction. *) ( (* Add one to the second tagged argument then do the subtraction. *) genMove (immed13(tagged(toInt (toShort constnt)) + tagged 0), i5, cvec); genSubcc (i5, mReg rs, rd, cvec) ) | instrOrW => genOr (rs, immed13 (tagged(toInt (toShort constnt))), rd, cvec) (* Logical or. *) | instrAndW => genAnd (rs, immed13 (tagged(toInt (toShort constnt))), rd, cvec) (* Use untagged value to ensure that tag is not changed. *) | instrXorW => genXor (rs, immed13 (semiTagged(toInt (toShort constnt))), rd, cvec) | instrUpshiftW => (* logical shift left *) ( genUntagToI4 (rs, cvec); genSll (i4, immed13(toInt (toShort constnt)), i4, cvec); genTagFromI4 (rd, cvec) ) | instrDownshiftW => (* logical shift right *) ( genSrl (rs, immed13(toInt (toShort constnt)), i5, cvec); genAndn (i5, immed13_TAGMASK, i4, cvec); (* remove stray bits from tag positions *) genTagFromI4 (rd, cvec) ) | instrDownshiftArithW => (* logical shift right *) ( genSra (rs, immed13(toInt (toShort constnt)), i5, cvec); genAndn (i5, immed13_TAGMASK, i4, cvec); (* remove stray bits from tag positions *) genTagFromI4 (rd, cvec) ) (* Load a word. Offset is words so multiply by 4 to get byte offset. *) | instrLoad => genLoadInstr LD (rs, immed13 ((toInt (toShort constnt)) * wordSize), rd, cvec) | instrLoadB => (* Load a byte. Offset is bytes. *) ( genLoadInstr LDUB (rs, immed13(toInt (toShort constnt)), i5, cvec); (* Tag the result. *) genSll (i5, immed13_TAGSHIFT, i4, cvec); genTagFromI4 (rd, cvec) ) | instrVeclen => (* The second arg. is ignored. *) ( genLoad (~4, rs, i5, cvec); genSll (i5, immed13_8, i5, cvec); (* Shift up to clear top byte. *) genSrl (i5, immed13_6, i4, cvec); genTagFromI4 (rd, cvec) ) | instrVecflags => (* The second arg. is ignored. *) ( (* Load the flag byte: Offset -4 on a big-endian machine. *) genLoadInstr LDUB (rs, immed13 ~4, i5, cvec); (* Tag the result. *) genSll (i5, immed13_TAGSHIFT, i4, cvec); genTagFromI4 (rd, cvec) ) | instrStringLength => (* The second arg. is ignored. *) let (* If it's tagged the result is 1 otherwise we need to load the length word and tag it. *) val l1 = compareAndBranchRI (rs, toMachineWord 0 (* Unused *), Short, cvec) val _ = genLoad (0, rs, i4, cvec); (* Load the length word. *) val _ = genSll (i4, immed13_TAGSHIFT, i4, cvec); val l2 = unconditionalBranch cvec in (* In practice the load-immediate gets put into the delay slot of the conditional branch and the unconditional branch is optimised away. *) fixup(l1, cvec); genLoadImmed (semiTagged 1, i4, cvec); fixup(l2, cvec); (* It's probably better to tag the result here because we may be able to optimise arithmetic after it. If we can't will have incurred the cost of an extra instruction in the case when we had a single character but this is probably worth paying. *) genTagFromI4 (rd, cvec) (* And tag the result. *) end | _ => raise InternalError "genRI: Unimplemented instruction" (* genRI *); (* this could be made more efficient (and readable??) using shorts *) fun printCode (seg : cseg, procName : string, lastAddr : addrs, printStream) : unit = let (* prints a string representation of a number *) fun printHex v = printStream(Int.fmt StringCvt.HEX v) fun regPrint r = printStream(regRepr r) fun printRimm iOp = if (iOp div exp2_13) mod 2 = 1 (* Set if immediate. *) then printHex (signed13 (iOp mod exp2_13)) else regPrint (mkReg (iOp mod exp2_5)); in if procName = "" (* No name *) then printStream "?" else printStream procName; printStream ":\n"; let val ptr = ref addrZero; in while !ptr addrLt lastAddr do let val thisAddr : addrs = !ptr; val U : unit = ptr := thisAddr wordAddrPlus 1; val instr : int = fromQuad (getQuad (thisAddr, seg)); val byteAddr : int = getByteAddr thisAddr; val topByte : int = Word8.toInt (csegGet (seg, byteAddr)); val format : int = topByte div exp2_6; val U : unit = printHex byteAddr; (* The real address. *) val U : unit = printStream "\t"; val U : unit = if format = 0 then let val op2 = (instr div exp2_22) mod 8; (* op2 field *) in case op2 of 4 => (* setHi *) if instr = fromQuad nopQuad (* nop is sethi 0,%g0 *) then printStream "nop" else ( printStream "sethi\t"; printHex (instr mod exp2_22); printStream ","; regPrint (mkReg (instr div exp2_25 mod exp2_5)) ) | 2 => (* branch *) let val disp22 = signed22 (instr mod exp2_22); val byteDisp = disp22 * wordSize; in printStream ("b" ^ tstRepr (mkTest ((instr div exp2_25) mod exp2_4))); if instr div exp2_29 = 1 (* annul bit *) then printStream ",a" else (); printStream "\t"; printHex disp22; (* signed *) printStream "\t\t;to "; printHex (byteAddr + byteDisp) end | 0 => (* unimp *) (printStream "unimp"; printStream "\t"; printHex instr) | _ => printHex instr end else if format = 1 then let val disp30 = signed30 (instr - exp2_30); val byteDisp = disp30 * wordSize; in printStream "call\t"; printHex disp30; printStream "\t\t;to "; printHex (byteAddr + byteDisp) end else if format = 2 then let val op3 = instr div exp2_19 mod exp2_6; val rs = mkReg (instr div exp2_14 mod exp2_5); val rd = mkReg (instr div exp2_25 mod exp2_5); local val table = [ (ADD,"add"), (AND,"and"), (OR,"or"), (XOR,"xor"), (ANDN,"andn"), (SUB,"sub"), (ADDcc,"addcc"), (ANDcc,"andcc"), (SUBcc,"subcc"), (TADDccTV,"taddcctv"), (TSUBccTV,"tsubcctv"), (SLL,"sll"), (SRL,"srl"), (SRA,"sra"), (JMPL,"jmpl") ] fun printFromTable x [] = printHex op3 | printFromTable x ((y,s)::t) = if x = op3_2ToInt y then printStream s else printFromTable op3 t in fun printOp3String x = printFromTable x table end val isMov = (op3 = op3_2ToInt OR) andalso (rs regEq g0); val isTrap = (op3 = op3_2ToInt Ticc); in if isMov then printStream "mov" else if isTrap then printStream ("t" ^ tstRepr (mkTest ((getReg rd) mod exp2_4))) else printOp3String op3; printStream "\t"; if isMov then () else (regPrint rs; printStream ","); printRimm instr; if isTrap then () else (printStream ","; regPrint rd) end else let (* 3 *) val op3 = instr div exp2_19 mod exp2_6; val rs = mkReg (instr div exp2_14 mod exp2_5); val rd = mkReg (instr div exp2_25 mod exp2_5); in if op3 = 0 orelse op3 = 1 then ( (if op3 = 0 then printStream "ld" else printStream "ldub"); printStream "\t["; regPrint rs; printStream "+"; printRimm instr; printStream "],"; regPrint rd ) else if op3 = 4 orelse op3 = 5 then ( printStream (if op3 = 4 then "st" else "stb"); printStream "\t"; regPrint rd; printStream ",["; regPrint rs; printStream "+"; printRimm instr; printStream "]" ) else ( printHex op3; printStream "\t"; regPrint rs; printStream ","; printRimm instr; printStream ","; regPrint rd ) end; in printStream "\n" end (* while *) end (* scope of ptr *) end (* printCode *); fun loadUnsigned (a : address, offset : int) : int = let (* SPARC is a big-endian machine *) val byteOffset : int = 4 * offset; val b0 : short = Word.fromLargeWord(Word8.toLargeWord(loadByte (a, toShort byteOffset))); val b1 : short = Word.fromLargeWord(Word8.toLargeWord(loadByte (a, toShort (byteOffset + 1)))); val b2 : short = Word.fromLargeWord(Word8.toLargeWord(loadByte (a, toShort (byteOffset + 2)))); val b3 : short = Word.fromLargeWord(Word8.toLargeWord(loadByte (a, toShort (byteOffset + 3)))); in fromQuad (Quad (b0, b1, b2, b3)) end; (* Bootstrapping problems currently prevent us from using Address.nameOfCode *) fun nameOfCode (a : address) : string = let val objLength : int = toInt (ADDRESS.length a); val lastWord : int = objLength - 1; val constCount : int = loadUnsigned (a, lastWord); val codeName : machineWord = loadWord (a, toShort (lastWord - constCount)); in unsafeCast codeName end; (* set the num'th constant in cvec to be value *) fun constLabels (cvec : code, addr: addrs, value : machineWord) : unit = let val (seg : cseg, preludeSize : int) = scSet (!(resultSeg cvec)); val constAddr : addrs = addr wordAddrPlus preludeSize; in csegPutConstant (seg, getByteAddr constAddr, value, 0) end; (* Fix up references from other vectors to this one. *) fun fixOtherRefs (refTo as Code{otherCodes=ref otherCodes, ...}, value) = let fun fixRef (refFrom : code) : unit = let val noc = numOfConsts refFrom; fun putNonLocalConst (CVal cCode, addr) : unit = if cCode is refTo then ( (* A reference to this one. *) (* Fix up the forward reference. *) constLabels (refFrom, addr, value); (* decrement the "pending references" count *) noc := !noc - 1 ) else () | putNonLocalConst _ = () in (* look down its list of forward references until we find ourselves. *) List.app putNonLocalConst (!(constVec refFrom)); (* If there are no more references, we can lock it. *) if !noc = 0 then csegLock (#1 (scSet (! (resultSeg refFrom)))) else () end (* fixRef *); in (* For each `code' which needs a forward reference to `refTo' fixing up. *) List.app fixRef otherCodes end; (* fixOtherRefs *) (* The stack limit register is set at least twice this far from the end of the stack so we can simply compare the stack pointer with the stack limit register if we need less than this much. Setting it at twice this value means that procedures which use up to this much stack and do not call any other procedures do not need to check the stack at all. *) val minStackCheck = 20; (* Adds the constants onto the code, and copies the code into a new segment *) fun copyCode (cvec as Code{printAssemblyCode, printStream, ...}, stackRequired, registerSet) : address = let val endIC = !(ic cvec); (* Remember end *) val callsAProc = !(mustCheckStack cvec); (***************************************************************************** Functions now have up to 4 entry points: (1) Standard entry point (2) Tail-call entry point - doesn't change %o7 (3) Self-call entry point - doesn't change %o4 (4) Self-tail-call entry point - doesn't change %o7 or %o4 Entry points 1 and 2 are always the first and second words of the actual code. Entry points 3 and 4 can be at various offsets (if they are needed at all), but that's OK because they are only used for calls within the procedure itself. The worst-case code for the prelude would be: L1: or %o7,2,%o7 L2: Previously this code loaded the address of the constant area. L3: or %o7,2,%o7 (It's OK to fall through and do this again) L4: sethi yhi,%i5 add %i5,ylo,%i5 ld [24+%i0],%i3 sub %psp,%i5,%psp cmp %i5,%i3 tlu 16 This assumes that both immediates (the offset of the constants section and the stack required) are larger than 13 bits, which would be unusual. If we have no self-calls (as opposed to self-jumps), we can produce: L1: or %o7,2,%o7 L2: L4: sethi yhi,%i5 add %i5,ylo,%i5 ld [24+%i0],%i3 sub %psp,%i5,%psp cmp %i5,%i3 tlu 16 *****************************************************************************) (* Generate the prelude (iterative!) *) local (* Or 2 into o7 (the return address) so that it is off-word aligned. Must do this before the stack-checking code. Also "jumpToFunction" assumes that this is the first instruction and can be skipped if we have already added 2 to o7. *) val o7Code = [format3_2 (OR, o7, immed13_CODETAG, o7)]; val lengthO7Code = 1; (* length o7Code *) val stackCheckCode = if stackRequired >= minStackCheck then let (* We need to check the stack. *) val loadSL = format3_3 (LD, i0, immed13 MemRegStackLimit, i3) val (cl,loc) = immedCodeData (stackRequired * wordSize) in (* get the "minimum" sp into i5 and trap if it is less than the stack limit register. *) loadSL :: cl @ [format3_2 (SUB, psp, loc, i5), (* N.B. not "ADD" SPF 13/10/94 *) format3_2 (SUBcc, i5, i3M, g0), tlu24] end (* If we call another function, we have to perform the following stack check to ensure that there are at least two minimal (minStackCheck words each) stack frames available - one for us, one for the (possibly leaf) function that we're calling. We don't need to do this if we only make tail calls (our caller has reserved a stack frame for us, which we share with our callee(, but we'll normally perform the stack check anyway, to check for user interrupt. SPF 19/2/97 *) else if callsAProc then [ (* trap if current sp is less than stack limit register. This check is necessary because user interupts (^C) adjust the limit register precisely so this check will cause a trap is a "safe" state. *) format3_3 (LD, i0, immed13 MemRegStackLimit, i3), format3_2 (SUBcc, psp, i3M, g0), tlu24 ] (* Leaf or tail-call-only function - no stack check required. *) else []; in (* code segment size minimised (iteratively!) SPF 12/8/94 *) (* I think this is no longer required now that we don't load the constant pointer. DCJM 12/1/01. *) fun getPreludeCode spaceForPrelude (* an initial guess! *) = let (* +6 for zero word, code size, profile count, constants count function name and register mask. *) val segSize = getWordAddr endIC + spaceForPrelude + 6; (* Prelude consists of 1) adding 2 to o7 (the return address reg) 2) stack checking code Note: we always have a stack-check, even for self tail-calls where we actually know that the stack is big enough. This is needed to allow the ^C break-in and profiling mechanisms to work smoothly, as otherwise we could get unbreakable loops. *) infixr 5 @; val preludeCode = (* L1 here *) o7Code @ (* L2 here *) [] @ (* L3 here *) [] @ (* L4 here *) stackCheckCode; in (* does it fit? *) if List.length preludeCode = spaceForPrelude then (spaceForPrelude,segSize,preludeCode) else getPreludeCode (spaceForPrelude + 1) end val (spaceForPrelude,segSize,preludeCode) = (* iterate to find size of loadConstSegCode *) getPreludeCode (lengthO7Code + List.length stackCheckCode); (* byte offsets of L3 and L4 labels relative to start of post-prelude code. *) val L4Addr = mkWordAddr (~ (List.length stackCheckCode)); val L4Target = case stackCheckCode of (c::cs) => c (* never a jump *) | [] => nopQuad (* should never get used *) val L3Addr = mkWordAddr (~ (lengthO7Code + List.length stackCheckCode)); val L3Target = case o7Code of (c::cs) => c (* never a jump *) | [] => L4Target; (* shouldn't occur *) end; (* local *) (* This is the address of the zero word *) val lastAddr : addrs = endIC wordAddrPlus spaceForPrelude; (* This is the address of the zero'th constant (the name string) +3 for zero word, code size, profile count *) val constStartAddr : addrs = lastAddr wordAddrPlus 3; (* fix-up all the self-calls *) val U : unit = fixupRecursiveCalls (cvec, L3Target, L3Addr, !(selfCalls cvec)); val U : unit = fixupRecursiveBranches (cvec, L4Target, L4Addr, !(selfJumps cvec)); (* Now make the byte segment that we'll turn into the code segment *) val seg : cseg = csegMake segSize; (* Copy the code into the new segment. *) val U : unit = csegCopySeg (codeVec cvec, seg, getByteAddr endIC, spaceForPrelude); (* insert prelude code into segment *) local fun putPreludeQuad (wordAddr : int, w : quad) = setQuad (w, mkWordAddr wordAddr, seg); in val U : unit = applyCountList (putPreludeQuad, 0, preludeCode); end; (* Zero end-of-code marker *) local val addr : addrs = lastAddr; val quad : quad = toQuad 0; in val U : unit = setQuad (quad, addr, seg) end; (* Byte offset of start of code. *) local val addr : addrs = lastAddr wordAddrPlus 1; val quad : quad = toQuad (getByteAddr addr); in val U : unit = setQuad (quad, addr, seg) end; (* Next the profile count. *) local val addr : addrs = lastAddr wordAddrPlus 2; val quad : quad = toQuad 0; in val U : unit = setQuad (quad, addr, seg) end; (* Put in the number of constants (including the name string). This is now always 2 - the name and the register mask. *) local val addr : addrs = constStartAddr wordAddrPlus 2; val quad : quad = toQuad 2; in val U : unit = setQuad (quad, addr, seg) end; (* Now we've filled in all the C integers; now we need to convert the segment into a proper code segment before it's safe to put in any ML values. SPF 13/2/97 *) val U : unit = csegConvertToCode seg; val U : unit = resultSeg cvec := Set (seg, spaceForPrelude); local val procName = procName cvec val nameWord : machineWord = if procName = "" then toMachineWord 0 else toMachineWord procName; in val _ = csegPutWord (seg, getWordAddr constStartAddr, nameWord); end; (* Insert the register set. *) local val addr : addrs = constStartAddr wordAddrPlus 1; fun encodeReg(r, n: short): short = let open Word infix << orb val reg = 0w1 << Word.fromInt (nReg r) in reg orb n end val regSet = List.foldl encodeReg 0w0 registerSet in val () = csegPutWord(seg, getWordAddr addr, toMachineWord regSet) end; (* Copy the objects (including the name string) from the constant list. *) fun putLocalConst (WVal c, addr) = (* an ordinary (non-short) constant *) ( constLabels (cvec, addr, c); numOfConsts cvec := ! (numOfConsts cvec) - 1 ) | putLocalConst (HVal href, addr) = (* a handler *) let (* The following comment applies to offsetAddr *) (* Special function to add to an address. This only works if the resulting value is in a code segment and is on a word + 2 byte boundary. *) val handlerByteOffset : int = getByteAddr ((!href) wordAddrPlus spaceForPrelude); val handlerAddr : handler = offsetAddr (csegAddr seg, toShort (handlerByteOffset + CODETAG)); in constLabels (cvec, addr, toMachineWord handlerAddr); numOfConsts cvec := ! (numOfConsts cvec) - 1 end (* forward-reference - fix up later when we compile the referenced code *) | putLocalConst (CVal _, addr) = (); val U : unit = List.app putLocalConst (! (constVec cvec)); (* Switch off "mutable" bit now if we have no forward or recursive references to fix-up *) val U : unit = if !(numOfConsts cvec) = 0 then csegLock seg else (); (* Do we need to make a closure, or just return the code? *) val addr : address = if noClosure cvec then csegAddr seg else let val addr : address = alloc (0w1, F_words, toMachineWord (csegAddr seg)); (* Logically unnecessary; however the RTS currently allocates everything as mutable because Dave's code assumed that things were done this way and I'm not completely sure that everything that needs a mutable allocation actually asks for it yet. SPF 19/2/97 *) val U : unit = lock addr; in addr end (* Now we know the address of this object we can fix up any forward references outstanding. This is put in here because there may be directly recursive references. *) val U : unit = fixOtherRefs (cvec, toMachineWord addr); val U : unit = if printAssemblyCode then let (* print out the code *) val U : unit = printCode (seg, procName cvec, lastAddr, printStream); in printStream "\n" end else (); in addr end (* copyCode *); (* We need these types although we don't generate indexed cases. *) type cases = int * addrs; (* should tag be a short??? *) fun constrCases (p as (i,a)) = p; (* Dummy implementation ... type jumpTableAddrs = unit; fun useIndexedCase (min, max, numberOfCases, exhaustive) : bool = false; (* Never use indexed case. *) fun indexedCase (reg, reg2, min, max, exhaustive, cvec) : jumpTableAddrs = raise InternalError "Not implemented: indexedCase"; fun makeJumpTable (startTab, cl, default, min, max, cvec) : unit = raise InternalError "Not implemented: makeJumpTable"; ... *) (* On this architecture, the jumptable is physically inserted into the code as a vector of address offsets. The function "indexedCase" generates the space for the table and "makeJumpTable" inserts the actual entries, once the addresses are known. SPF 23/11/1997 Note - this will confuse our disassembler. Must fix this some time! SPF 12/01/1998 *) type jumpTableAddrs = addrs; fun constrCases (p as (i,a)) = p; type caseList = cases list; fun useIndexedCase (min:int, max:int, numberOfCases:int, exhaustive:bool) = isShort min andalso isShort max andalso numberOfCases > 7 andalso numberOfCases >= (max - min) div 3; fun indexedCase (valReg : reg, workReg : reg, min:int, max:int, exhaustive:bool, cvec : code) : jumpTableAddrs = let val rangeCheck : labels = if exhaustive then [] else let (* Is it long? If so, jump to the default. We need this because we might be doing case-analysis on integers. For other types this is a waste of time - we know the tag must be a short - and we should change GCODE so we can eliminate this test. SPF 23/11/1997 We have to be *very* careful here, though. For optimised data-types, we might be comparing a pointer with a (short) integer. This means that we're not really testing long/short, we're testing pointer/short so we need to keep the test even if we know we're dealing with datatype tags (for some kinds of datatypes). This requires more work in the high-level code generator to distinguish these cases properly. SPF 11/12/1997 *) val l1 : labels = compareAndBranchRI (valReg, toMachineWord 0, Long, cvec); val l2 : labels = compareAndBranchRI (valReg, toMachineWord min, testLtSignedW, cvec); val l3 : labels = compareAndBranchRI (valReg, toMachineWord max, testGtSignedW, cvec); in l1 @ (l2 @ l3) end; (* Get the jumptable address into a register - not easy on this machine. Create a handler label and load that. *) val tableBase : handlerLab = loadHandlerAddress (workReg, cvec); (* constR now addresses the jumptable (but with a +2 offset) *) (* Adjust the index to be relative to the start of the table - don't forget to make it "out by 2" to account for the CODETAG. No scaling is required - lucky! *) val adjust : mode13 = genImmedData (cvec, ~ (tagged min + CODETAG)); val U : unit = genAdd (valReg, adjust, i5, cvec); (* i5 now contains the index into the jumptable *) val U : unit = genLoadInstr LD (workReg, i5M, i5, cvec); (* i5 now contains the distance between the jumptable and our destination, (adjusted for the +2 offset). *) val U : unit = genJmpl (i5M, workReg, g0, cvec); val U : unit = fixupHandler (tableBase, cvec); (* We generate the table itself here *) val tableBase : addrs = ! (ic cvec); val tableWords : int = max - min + 1; val tableBytes : int = tableWords * wordSize; val U : unit = ic cvec := tableBase wordAddrPlus tableWords; (* ... (* We haven't really fallen through to here. *) val U : unit = exited cvec := true; ... *) (* The default case comes in here. *) val U : unit = fixup (rangeCheck, cvec); in (* Return the address of the jumptable *) tableBase : jumpTableAddrs end; fun makeJumpTable (startTab:jumpTableAddrs, cl:caseList, default:addrs, min : int, max : int, cvec : code) : unit = let fun putCase (entryNo : int) (jumpAddr : addrs) = let val wordOffset : int = jumpAddr wordAddrMinus startTab; val byteOffset : int = wordOffset * wordSize; val entryAddr : addrs = startTab wordAddrPlus (entryNo - min); val entryQuad : quad = toQuad (byteOffset - CODETAG); in setCodeQuad (entryQuad, entryAddr, cvec) end; (* Initialise to the default. *) fun putInDefaults i = if i <= max then (putCase i default; putInDefaults(i+1)) else () (* Overwrite the defaults by the cases. N.B. We've generated the list in reverse order so if we have any duplicates we will correctly overwrite the later cases with earlier ones. *) fun putInCases [] = () | putInCases ((i, a) :: t) = (putCase i a; putInCases t) in putInDefaults min; putInCases cl end; (* ic function exported to gencode. Currently only used for backward jumps. *) val ic = fn cvec => ( (* Make sure any pending operations are done. *) clearCache cvec; doPendingStackAdjustment cvec; reallyFixup cvec; exited cvec := false; (* We may be jumping here. *) ! (ic cvec) ); fun codeAddress (cvec: code) : address option = (* This is used to find the register set for a function which was originally a forward reference. If it has now been compiled we can get the code. *) case cvec of Code {resultSeg = ref (Set (cseg, _)), ...} => SOME(csegAddr cseg) | Code {resultSeg = ref Unset, ...} => (* We haven't compiled this yet: assume worst case. *) NONE fun traceContext (Code {procName, ic = ref ic, ...}) = (* Function name and code offset to help tracing. *) procName ^ ":" ^ Int.fmt StringCvt.HEX (getByteAddr ic) end (* CODECONS functor body *) end (* structure-level let *) polyml.5.2.1/mlsource/MLCompiler/CodeTree/StructureEquality.sml0000644000175000017500000001443410772154631023571 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* Structure equality function. This is the fall-back when it is not possible to a create type-specific equality function. It would be preferable to have this as an RTS function since that would allow calls to avoid tupling the arguments. The problem is that structure equality requires an unbounded amount of stack space and that isn't possible in the RTS. *) structure StructureEquality: sig type machineWord = Address.machineWord val structureEq: machineWord * machineWord -> bool; end = struct open Address val andb = Word8.andb and orb = Word8.orb infix 6 andb; infix 7 orb; val objLength = Address.length; (* Compare two values for equality of their structures. Values with the mutable bit set are assumed to be references and are only equal if they are the same address. We assume that this will not be applied to code segments or stacks. The address of this function is put in the code to do the equality testing. *) fun structureEq (a:machineWord, b:machineWord) = if wordEq (a, b) then true else (* If either is a short, then they cannot be equal unless a = b. Other values are addresses so we have to use structural equality. *) if isShort a then false else if isShort b then false (* nil is a short now SPF 14/7/94 *) else let (* we promise to be very careful! *) val toAddress : 'a -> address = unsafeCast; val toShort : 'a -> short = unsafeCast; (* Both addresses *) val aa : address = toAddress a; val bb : address = toAddress b; val alw : Word.word = objLength aa; val blw : Word.word = objLength bb; in if not (wordEq (alw, blw)) then (* Must be same size and type. *) false else let val orFlags: Word8.word = flags aa orb flags bb in if orFlags andb F_mutable <> 0w0 (* In ML mutable objects are equal only if addresses are. This avoids the need to check for circularity. *) then false else if orFlags andb F_bytes <> 0w0 then let (* Byte vector. Each value is a byte and treated as equal only if each byte is equal. Can also arise when the garbage collector turns vectors of small integers into byte vectors to save repeated scans. *) (* Would it be more efficient to compare a word at a time? No, because byte-segments contain bit-patterns that aren't proper "words" SPF 14/7/94 *) fun compBytes i finish = if i = finish then true else loadByte (aa, i) = loadByte (bb, i) andalso compBytes (i + 0w1) finish; in compBytes 0w0 (*(alw * Word.fromInt wordSize) *) (* Temporary word-around for a bug in the i386 code-generator involving word multiplication by 4. *) (Word.fromInt(Word.toInt alw * wordSize)) end else if alw = 0w1 then structureEq (loadWord (aa, 0w0), loadWord (bb, 0w0)) else if alw = 0w2 then let (* Most objects are list cells or tagged values. *) (* We want to avoid recursing if we can easily see that the objects differ. Short integers differing mean that the objects do differ, otherwise if they are different pointers we have to follow them. *) val a0 : machineWord = loadWord (aa, 0w0); val a1 : machineWord = loadWord (aa, 0w1); val b0 : machineWord = loadWord (bb, 0w0); val b1 : machineWord = loadWord (bb, 0w1); in if isShort a0 then wordEq (a0, b0) andalso structureEq (a1, b1) else if isShort b0 then false else if isShort a1 then wordEq (a1, b1) andalso structureEq (a0, b0) else if isShort b1 then false else structureEq (a0, b0) andalso structureEq (a1, b1) end else let (* Larger objects. *) (* Compare the words of the vector. Work from the end back - this is more efficient for tagged values. *) (* compWords is compiled down to a loop to check all but the first word. *) fun compWords 0w0 = true | compWords i = structureEq (loadWord (aa, i), loadWord (bb, i)) andalso compWords (i - 0w1); in compWords (alw - 0w1) andalso (* Tail recurse on last entry. *) structureEq (loadWord (aa, 0w0), loadWord (bb, 0w0)) end end end (* structureEq *); end; (* StructureEquality. *) polyml.5.2.1/mlsource/MLCompiler/CodeTree/TRANS_TAB.ML0000644000175000017500000042406211003075354021137 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* Title: Pseudo-stack Operations for Code Generator. Author: Dave Matthews, Edinburgh University / Prolingua Ltd. Copyright D.C.J. Matthews 1991 *) (* Modified and improved. David C.J. Matthews 2000-2001. *) (* This part of the code-generator deals with the pseudo-stack and the translation of addresses into stack offsets. *) functor TRANS_TAB ( (*****************************************************************************) (* CODECONS *) (*****************************************************************************) structure CODECONS : sig type machineWord; type code; type reg; (* Machine registers *) type addrs; type address; datatype storeWidth = STORE_WORD | STORE_BYTE val canShareRegs : bool; (* True if we have genuine 3-address instructions. *) val regNone: reg; val regStackPtr: reg; val regClosure: reg; val regs: int; (* No of registers. *) val regN: int -> reg; val nReg: reg -> int; val regEq: reg * reg -> bool; val regNeq: reg * reg -> bool; val regRepr: reg -> string; val genLoad: int * reg * reg * code -> unit; val genStore: reg * int * reg * storeWidth * reg * code -> unit; val isStoreI: machineWord * storeWidth * bool -> bool; val genStoreI: machineWord * int * reg * storeWidth * reg * code -> unit; val genLoadCoderef: code * reg * code -> unit; val genLoadPush: int * reg * code -> unit; val genPush: reg * code -> unit; val preferLoadPush: bool; val genStackOffset: reg * int * code -> unit; type instrs; val instrMove: instrs; val instrPush: instrs; val instrIsRI: instrs * machineWord -> bool; (* Is the immediate value ok? *) val genRR: instrs * reg * reg * reg * code -> unit; val genRI: instrs * reg * machineWord * reg * code -> unit; type tests; val isCompRI: tests * machineWord -> bool; val resetStack: int * code -> unit; (* Set a pending reset *) val procName: code -> string; (* Name of the procedure. *) type labels; (* The source of a jump. *) val noJump: labels; val compareAndBranchRR: reg * reg * tests * code -> labels; val compareAndBranchRI: reg * machineWord * tests * code -> labels; val unconditionalBranch: code -> labels; val jumpback: addrs * bool * code -> unit; (* Backwards jump. *) val fixup: labels * code -> unit; (* Fix up a jump. *) type handlerLab; val loadHandlerAddress: reg * code -> handlerLab; val fixupHandler: handlerLab * code -> unit; val ic : code -> addrs val codeAddress: code -> address option datatype callKinds = Recursive | ConstantFun of machineWord * bool | CodeFun of code | FullCall val callFunction: callKinds * code -> unit; val jumpToFunction: callKinds * reg * code -> unit; val traceContext: code -> string; end (* CODECONS *); (*****************************************************************************) (* DEBUG *) (*****************************************************************************) structure DEBUG : sig (* Produce debugging output. *) val pstackTraceTag : bool Universal.tag val compilerOutputTag: (string->unit) Universal.tag val getParameter : 'a Universal.tag -> Universal.universal list -> 'a end; (*****************************************************************************) (* MISC *) (*****************************************************************************) structure MISC : sig exception InternalError of string; type 'a iter val Iter : { continue: bool, value: unit -> 'a, next: unit -> 'a iter } -> 'a iter val for : 'a iter -> ('a -> 'b) -> unit; val revfoldIterator : ('a -> 'b -> 'b) -> 'b -> 'a iter -> 'b end; (*****************************************************************************) (* ADDRESS *) (*****************************************************************************) structure ADDRESS : sig type machineWord; type short = Word.word; type address; val isShort : 'a -> bool; val toShort : 'a -> short; val toMachineWord: 'a -> machineWord; val toAddress: machineWord -> address; val loadWord: address * short -> machineWord; val wordEq : machineWord * machineWord -> bool; val wordSize: int val length: address -> Word.word; end; (*****************************************************************************) (* TRANSTAB sharing constraints *) (*****************************************************************************) sharing type ADDRESS.machineWord = CODECONS.machineWord ) : (*****************************************************************************) (* TRANSTAB export signature *) (*****************************************************************************) sig type machineWord; type ttab; type code; type reg; (* Machine registers *) type tests; type instrs; type addrs; type savedState; type storeWidth; type regSet val ttabCreate: Universal.universal list -> ttab; (* Register allocation *) val getRegister: ttab * code * reg -> unit; val getAnyRegister: ttab * code -> reg; val freeRegister: ttab * reg -> unit; val addRegUse: ttab * reg -> unit; val clearCache: ttab -> unit; val removeRegistersFromCache: ttab * regSet -> unit; (* Stack handling *) type stackIndex; val noIndex: stackIndex; (* For debugging only - not used in "official" builds *) val printStack: ttab -> string -> string -> unit (* Push entries *) val pushReg: ttab * reg -> stackIndex; val pushStack: ttab * int -> stackIndex; val pushConst: ttab * machineWord -> stackIndex; val pushCodeRef: ttab * code -> stackIndex; val pushNonLocal: ttab * ttab * stackIndex * (unit -> stackIndex) * code -> stackIndex; val pushAllBut: ttab * code * ((stackIndex -> unit) -> unit) * regSet -> unit; val pushNonArguments: ttab * code * stackIndex list * regSet -> reg list; val pushAll: ttab * code -> unit; val pushSpecificEntry: ttab * code * stackIndex -> unit; val incsp: ttab -> stackIndex; val decsp: ttab*int -> unit; val reserveStackSpace: ttab * code * int -> stackIndex; (* Code entries *) val loadEntry: code * ttab * stackIndex * bool -> reg*stackIndex; val loadToSpecificReg: code * ttab * reg * stackIndex * bool -> stackIndex; val containsLocal: ttab * reg -> unit; val lockRegister: ttab * reg -> unit; val unlockRegister: ttab * reg -> unit; val loadIfArg: code * ttab * stackIndex -> stackIndex val indirect: int * stackIndex * code * ttab -> stackIndex; val moveToVec: stackIndex * stackIndex * int * storeWidth * code * ttab -> unit; val removeStackEntry: ttab*stackIndex -> unit; val resetButReload: code * ttab * int -> unit; val pushValueToStack: code * ttab * stackIndex * int -> stackIndex; val storeInStack: code * ttab * stackIndex * int -> unit; val isProcB: ttab * int -> bool; val realstackptr: ttab -> int; val maxstack: ttab -> int; val pstackForDec: ttab * int -> stackIndex; val makeEntry: ttab * code * stackIndex * int * int * bool -> unit; val incrUseCount: ttab * stackIndex * int -> unit; type stackMark; val markStack: ttab -> stackMark; val unmarkStack: ttab * stackMark -> unit type labels; val noJump: labels; val isEmptyLabel: labels -> bool datatype mergeResult = NoMerge | MergeIndex of stackIndex; val unconditionalBranch: mergeResult * ttab * code -> labels; val jumpBack: addrs * ttab * code -> unit; val fixup: labels * ttab * code -> unit; val merge: labels * ttab * code * mergeResult * stackMark -> mergeResult; val mergeList: labels list * ttab * code * mergeResult * stackMark -> mergeResult; type handler; val pushAddress: ttab * code * int -> handler; val fixupH: handler * int * ttab * code -> unit; val exiting: ttab -> unit; val haveExited: ttab -> bool datatype regHint = UseReg of reg | NoHint; val binaryOp: stackIndex * stackIndex * instrs * instrs * ttab * code * regHint -> stackIndex; val assignOp: stackIndex * stackIndex * stackIndex * storeWidth * ttab * code -> unit; val compareAndBranch: stackIndex * stackIndex * tests * tests * ttab * code -> labels; val saveState : ttab * code -> savedState val startCase : ttab * code * savedState -> addrs val chooseRegister : ttab -> reg val getRegisterSet: machineWord -> regSet val getRegisterSetForCode: code -> regSet val allRegisters : regSet val regSetUnion: regSet * regSet -> regSet val listToSet: reg list -> regSet val getFunctionRegSet: stackIndex * ttab -> regSet val addModifiedRegSet: ttab * regSet -> unit val getModifedRegSet: ttab -> reg list datatype argdest = ArgToRegister of reg | ArgToStack of int val getLoopDestinations: stackIndex list * ttab -> argdest list val callCode: stackIndex * bool * ttab * code -> unit val jumpToCode: stackIndex * bool * reg * ttab * code -> unit end (* TRANSTAB export signature*) = let (*****************************************************************************) (* ARRAY *) (*****************************************************************************) structure ARRAY : sig type 'a array; val array : int * '_a -> '_a array; val sub : 'a array * int -> 'a; val update : 'a array * int * 'a -> unit; end = Array; (*****************************************************************************) (* STRETCHARRAY *) (*****************************************************************************) structure STRETCHARRAY : sig type 'a stretchArray; val stretchArray : int * '_a -> '_a stretchArray; val sub : 'a stretchArray * int -> 'a; val update : '_a stretchArray * int * '_a -> unit; end = StretchArray; in (*****************************************************************************) (* TRANSTAB functor body *) (*****************************************************************************) struct open CODECONS; infix 5 regEq regNeq; open DEBUG; open MISC; open ADDRESS; open ARRAY; datatype regHint = UseReg of reg | NoHint; (* The set of registers modified by a function. AllRegisters occurs so frequently that it's worth treating specially. *) abstype regSet = AllRegisters | SomeRegisters of reg list with (* This is the set of all registers and is used as the default if we are calling a non-constant function. *) local val listOfAllRegisters = let fun getRegs i l = if i < 0 then l else getRegs (i-1) (regN i :: l) in getRegs(regs-1) [] end fun merge(a, []) = a | merge([], a) = a | merge(a as h::t, b as h'::t') = if h regEq h' then h :: merge(t, t') else if nReg h < nReg h' then h :: merge(t, b) else h' :: merge(a, t') in fun singleton r = SomeRegisters [r] val allRegisters = AllRegisters val noRegisters = SomeRegisters [] fun isAllRegs AllRegisters = true | isAllRegs _ = false fun regSetUnion(AllRegisters, _) = AllRegisters | regSetUnion(_, AllRegisters) = AllRegisters | regSetUnion(SomeRegisters a, SomeRegisters b) = let val merged = merge(a, b) in if List.length merged = regs then AllRegisters else SomeRegisters merged end fun listToSet l = let (* Sort and remove duplicates. *) val merged = List.foldl (fn(a,b) => merge([a], b)) [] l in if List.length merged = regs then AllRegisters else SomeRegisters merged end fun setToList AllRegisters = listOfAllRegisters | setToList (SomeRegisters r) = r fun inverseSet AllRegisters = SomeRegisters [] | inverseSet (SomeRegisters []) = AllRegisters | inverseSet (SomeRegisters r) = let fun diff (a as h::t, b as h'::t') = if h regEq h' then diff(t, t') else if nReg h < nReg h' then h :: diff(t, b) else diff(a, t') | diff (a, _) = a in SomeRegisters(diff(listOfAllRegisters, r)) end fun inSet(r, AllRegisters) = true | inSet(r, SomeRegisters l) = let fun inset [] = false | inset (h::t) = h regEq r orelse inset t in inset l end end end; local val cFixup = CODECONS.fixup; val cFixupH = CODECONS.fixupHandler; fun forLoop f i n = if i > n then () else (f i; forLoop f (i + 1) n); nonfix sub; (* was only 5 - gave subtle bugs (SPF 11/8/94 *) (* local definitions, for brevity *) type 'a stretchArray = 'a STRETCHARRAY.stretchArray; val stretchArray = STRETCHARRAY.stretchArray; val stretchSub = STRETCHARRAY.sub; val stretchUpdate = STRETCHARRAY.update; (* ... type baseOffset = {base: reg, offset: int}; fun base ({base ,...}:baseOffset) = base; fun offset ({offset,...}:baseOffset) = offset; fun makeBaseOffset (base: reg) (offset: int) = {base = base, offset = offset}; ... *) abstype stackIndex = StackIndex of int with (* fixes off-by-one problem for array lookup *) fun getIndex (StackIndex n) = n; fun stackIndex n = StackIndex n; val first = stackIndex 0; val noIndex = stackIndex ~1; (* An invalid index. *) infix 4 indexEq indexNeq; fun (StackIndex a) indexEq (StackIndex b) = a = b; fun (StackIndex a) indexNeq (StackIndex b) = a <> b; infix 5 indexGt indexGeq indexLt indexPlus indexMinus; fun (StackIndex a) indexGt (StackIndex b) = a > b; fun (StackIndex a) indexGeq (StackIndex b) = a >= b; fun (StackIndex a) indexLt (StackIndex b) = a < b; fun (StackIndex a) indexPlus n = StackIndex (a + n); fun (StackIndex a) indexMinus n = StackIndex (a - n); end; datatype stackUnion = Register of reg (* In a register *) | Literal of machineWord (* A constant (was "int") *) | CodeRef of code (* Forward reference to code *) | Direct of {base: reg, offset: int} (* Register/Offset *) | Stack of int (* On the real stack. *) | Container of stackIndex list (* A group of stack entries. *) fun isRegister (Register _) = true | isRegister _ = false; datatype stackEntry = NoStackEntry | StackEntry of { ent: stackUnion, cache: reg, (* regNone means not cached. *) uses: int, destStack: int (* destStack is used to indicate where on the stack this entry must be placed if it has to be spilled. A value of ~1 means that we don't care. The reason for having this is to ensure that if we split a flow of control (e.g. the then- and else-parts of an "if") with a value in a register and have to spill the register in one branch then we spill it to the same location on the other branch. This ensures that when we merge the flows of control we don't have to mess around with the stack. *) }; fun makeStackEntry union reg i dest = StackEntry { ent = union, cache = reg, uses = i, destStack = dest }; val initTrans = 5; (* Initial size of tables. *) val initStack = 10; fun indDownto startInd finishInd = let fun prev n = Iter { continue = n indexGeq finishInd, next = fn () => prev (n indexMinus 1), value = fn () => n }; in prev startInd end; (* The set of available registers. A register is free if its use-count is zero. A register has a reference for each occurence in an entry on the pseudo-stack or cache field (even if the use-count of the stack entry is zero). *) (* Added modification set to indicate if a register has been changed. We assume that if a register is allocated it has been modified. DCJM 26/11/00. *) type rset = {vec: int array, nextr: int ref, modSet: regSet ref, freeRegs: int ref}; fun Vec ({vec ,...}:rset) = vec; fun Nextr ({nextr,...}:rset) = nextr; val vecSize = regs; fun nextRegNo ({nextr,...}:rset) : int = !nextr; fun setNextRegNo ({nextr,...}:rset,n : int) : unit = nextr := n; (* Returns the first free register. The start of the sequence is different each time to try to achieve a spread of usage. *) (* findFree seems to be biggest hot-spot in the whole compiler so we have to code it quite carefully. *) fun getAcceptableRegister ({vec,nextr,modSet,freeRegs}:rset, acceptable: regSet) = let val nextReg = ! nextr; fun isAcceptable r = inSet(r, acceptable) fun next n = if n = 0 then (vecSize - 1) else (n - 1); fun allocReg r = (* Mark the register as in use. *) let val i = nReg r in update (vec, i, 1); (* Set the register use-count to 1 *) modSet := regSetUnion(singleton r, ! modSet); (* Mark as used *) (* Next time start looking at the register before this. *) nextr := next i; freeRegs := !freeRegs - 1; r end (* SPF 7/6/94 fixed off-by-one problem *) (* Pick a modified register if possible to keep the set small. DCJM 26/11/00 *) fun findFree (i : int, firstChoice) : reg = let val useCount = sub (vec, i) and isModified = inSet(regN i, !modSet) and acceptable = isAcceptable(regN i) in if useCount = 0 andalso isModified andalso acceptable then (* Free and it's been modified already - use it. *) allocReg (regN i) else let (* Either it's in use or it hasn't been modified yet. *) val n = next i; val nextChoice = (* If we haven't found a register before and this is free pick this one. *) if firstChoice regEq regNone andalso useCount = 0 andalso acceptable then regN i else firstChoice in if n = nextReg then (* None free or the only one we found was unmodified. *) if nextChoice regEq regNone then regNone (* Not found. *) else allocReg nextChoice else findFree(n, nextChoice) end end; in if !freeRegs = 0 then regNone else findFree (nextReg, regNone) end; (* Get any register. *) fun getReg rset = getAcceptableRegister(rset, allRegisters) (* Print the allocated registers. *) fun printRegs printStream regs = let fun printReg i = let val useCount = sub (Vec regs, i) in if useCount > 0 then ( printStream " "; printStream (regRepr (regN i)); printStream "="; printStream(Int.toString useCount); {} ) else () end (* printReg *); in forLoop printReg 0 (vecSize - 1) end (* printRegs *); fun getRset ({vec=v, modSet, freeRegs, ...}: rset) reg = let val r = nReg reg; (* SPF 7/6/94 - fixed off-by-one *) val useCount = sub (v, r) in if useCount = 0 then ( update (v, r, 1); modSet := regSetUnion(singleton reg, ! modSet); freeRegs := !freeRegs - 1 ) else raise InternalError ("getRset: can't get register #" ^ Int.toString r) end; fun free (regs as {freeRegs, ...}) reg = let val r = nReg reg; (* SPF 7/6/94 - fixed off-by-one *) val v = Vec regs; val useCount = sub (v, r) in if useCount = 0 then raise InternalError ("free: register already free #" ^ Int.toString r) else ( if useCount = 1 then freeRegs := !freeRegs + 1 else (); update (v, r, useCount - 1) ) end; (* Increment use count. *) fun incr (regs as {freeRegs, ...}) reg = let val r = nReg reg; (* SPF 7/6/94 - fixed off-by-one *) val v = Vec regs; val useCount = sub (v, r) in if useCount = 0 then freeRegs := !freeRegs - 1 else (); update (v, r, useCount + 1) end; (* SPF 7/6/94 - fixed off-by-one *) fun rsetMake () : rset = {vec = array (vecSize, 0), nextr = ref (vecSize - 1), modSet = ref noRegisters, freeRegs = ref regs} fun usage regs reg = let val r = nReg reg; (* SPF 7/6/94 - fixed off-by-one *) val v = Vec regs; val useCount = sub (v, r) in useCount end; (* This table maps declaration numbers for a particular procedure or *) (* inline procedure block into pseudo-stack offsets. The pseudo-stack *) (* simulates the real stack and gives the real locations of objects *) (* which may be in store, on the real stack or in registers. It maintains *) (* use-counts for values and allows the stack to be contracted and *) (* registers to be re-used when they are no longer required. *) datatype ttab = Ttab of { decToPstack: stackIndex stretchArray, isProc: bool stretchArray, regset: rset, pstack: stackEntry stretchArray, (* Pseudo-stack *) pstackptr: stackIndex ref, realstackptr: int ref, maxstack: int ref, exited: bool ref, branched: bool ref, marker: stackIndex ref, lowestDirect: stackIndex ref, pstackTrace: bool, printStream: string->unit }; fun ttabCreate debugSwitches = Ttab { decToPstack = stretchArray (initTrans,noIndex), isProc = stretchArray (initTrans,false), regset = rsetMake(), pstack = stretchArray (initStack,NoStackEntry), pstackptr = ref first, realstackptr = ref 0, maxstack = ref 1, exited = ref false, branched = ref false, marker = ref first, lowestDirect = ref first, pstackTrace = DEBUG.getParameter DEBUG.pstackTraceTag debugSwitches, printStream = DEBUG.getParameter DEBUG.compilerOutputTag debugSwitches }; fun decToPstack (Ttab {decToPstack ,...}) = decToPstack; fun isProc (Ttab {isProc ,...}) = isProc; fun regset (Ttab {regset ,...}) = regset; (*fun pstack (Ttab {pstack ,...}) = pstack;*) fun pstackptr (Ttab {pstackptr ,...}) = pstackptr; fun realstackptr (Ttab {realstackptr,...}) = realstackptr; fun maxstack (Ttab {maxstack ,...}) = maxstack; fun exited (Ttab {exited ,...}) = exited; fun branched (Ttab {branched ,...}) = branched; fun marker (Ttab {marker ,...}) = marker; fun lowestDirect (Ttab {lowestDirect,...}) = lowestDirect; val pstackVal = ! o pstackptr; val realstackVal = ! o realstackptr; val maxstackVal = ! o maxstack; val exitedVal = ! o exited; val branchedVal = ! o branched; val markerVal = ! o marker; fun pstackEntry (Ttab{pstack, ...}) (locn:stackIndex) : stackEntry = stretchSub (pstack, getIndex locn); (* Returns the real entry from a chain of "copy" entries. Now that "copy" entries have been removed this just returns the entry. *) fun pstackRealEntry (Ttab{pstack, ...}) (locn:stackIndex) = case (stretchSub (pstack, getIndex locn)) of NoStackEntry => raise InternalError ("pstackRealEntry: not entry: " ^ Int.toString(getIndex locn)) | StackEntry record => (locn, record) (* An iterator over the pseudo stack. Returns only entries which are not nil, but it will return entries whose use counts have gone to zero, but which still have useful values in their caches. *) fun overStack table downwards = if downwards then let (* The basis is an index to the stack *) fun next i = let val nxt = i - 1; in (* At the bottom ? *) if nxt < 0 then nxt else case (pstackEntry table (stackIndex nxt)) of NoStackEntry => next nxt (* Empty entry - must continue *) | StackEntry _ => nxt end; fun mkIter i = Iter { continue = i >= 0, value = fn () => stackIndex i, next = fn () => mkIter (next i) }; in mkIter (next (getIndex (pstackVal table))) end else let (* upwards *) fun next i = let val nxt = i + 1; in if nxt >= getIndex (pstackVal table) then nxt else case (pstackEntry table (stackIndex nxt)) of NoStackEntry => next nxt (* Empty entry - must continue *) | StackEntry _ => nxt end; fun mkIter i = Iter { continue = i < getIndex (pstackVal table), value = fn () => stackIndex i, next = fn () => mkIter (next i) }; in mkIter (next ~1) end (* overStack *); fun printStackUnion printStream stackun = case stackun of Register reg => printStream(regRepr reg) | Literal w => if isShort w then printStream(Int.toString (Word.toIntX (toShort w))) else printStream "?" (* ??? *) | CodeRef si => ( printStream "("; printStream (procName si); printStream ")" ) | Direct {base, offset} => ( printStream(regRepr base); printStream "@("; printStream(Int.toString offset); printStream ")" ) | Stack i => ( printStream "base@("; printStream(Int.toString i); printStream ")" ) | Container l => ( printStream "["; List.app (fn i => (printStream(Int.toString(getIndex i)); printStream " ")) l; printStream "]" ) fun printEntry printStream NoStackEntry entry = () | printEntry printStream (StackEntry {ent, uses, cache, destStack}) entry = ( printStream(Int.toString(getIndex entry)); printStream " "; printStream(Int.toString uses); printStream " "; printStackUnion printStream ent; if cache regNeq regNone then (printStream " in "; printStream(regRepr cache)) else (); if destStack = ~1 then () else (printStream " to base@("; printStream(Int.toString(destStack* ~wordSize)); printStream")"); printStream "\n" ); fun printStack (table as Ttab {printStream, ...}) why whereTo = ( printStream ("\n" ^ why ^ " (" ^ whereTo ^ ")\n"); printStream "psp="; printStream(Int.toString(getIndex (pstackVal table))); printStream " lim="; printStream(Int.toString(getIndex (markerVal table))); printStream " rsp="; printStream (Int.toString(realstackVal table)); printStream "\n"; printStream "regs="; printRegs printStream (regset table); printStream "\n"; for (overStack table true (* downwards *)) (fn entry => printEntry printStream (pstackEntry table entry) entry) ); (* Removes empty entries from the top of the stack. *) fun clearOff table = let val newIndex = (pstackVal table) indexMinus 1 in if newIndex indexGeq (markerVal table) then case (pstackEntry table newIndex) of NoStackEntry => ( pstackptr table := newIndex; clearOff table ) | StackEntry _ => () else () end; (* clearOff *) (* Removes an entry which is no longer required. If the entry is cached it *) (* may be retained unless it refers to the stack or another register when *) (* it MUST be removed. *) fun removeEntry (table as Ttab{pstack, ...}) entry keepIfCache = case (pstackEntry table entry) of NoStackEntry => () (* now handles this case, so we don't have to check before calling "removeEntry" (SPF 19/11/94) *) | StackEntry {ent = stacken, cache, ...} => (* If we are removing an entry from the real stack it must not be retained in the cache since we may push something else into that location. Actual parameters to procedures are not use-counted in the same way as locals so it is worth keeping them cached. *) let val cacheReg = if cache regEq regNone then regNone else if not keepIfCache orelse (case stacken of Register reg => true | Stack i => i < 0 | _ => false) then (* Clear cache. *) ( free (regset table) cache; regNone ) else (* Retain cache value. *) cache; in if cacheReg regEq regNone then (* If the cache is (now) empty we can remove the entry completely. *) ( (* clobber the entry. *) stretchUpdate (pstack, getIndex entry, NoStackEntry); case stacken of Register reg => free (regset table) reg | Direct {base, ...} => free (regset table) base | Container l => List.app (fn i => incrUseCount(table, i, ~1)) l | _ => () ; clearOff table ) (* otherwise we just leave the entry there. *) else stretchUpdate (pstack, getIndex entry, makeStackEntry stacken cacheReg 0 ~1) end (* end removeEntry *) (* Add the number of uses to the use count of an item on the stack. *) and incrUseCount (table as Ttab{pstack, ...}, entry, incr) : unit = case (pstackEntry table entry) of NoStackEntry => raise InternalError ("incrUseCount: no entry " ^ Int.toString(getIndex entry)) | StackEntry {ent, cache, uses, destStack} => let val newUses = uses + incr; in if newUses <= 0 then removeEntry table entry true else stretchUpdate (pstack, getIndex entry, makeStackEntry ent cache newUses destStack) end; (* True if this is the last reference to this entry. i.e. the use-count *) (* of this entry is 1. *) fun lastReference table entry = case (pstackEntry table entry) of NoStackEntry => raise InternalError "lastReference: no entry" | StackEntry {uses, ...} => uses = 1 ; (* Push a value on the stack and return its location. *) fun pushPstack (table as Ttab{pstack, pstackTrace, ...}) entry name = let val stacktop = pstackVal table; val psp = getIndex stacktop; val destStack = case entry of Stack addr => addr div (~wordSize) | _ => ~1 in stretchUpdate (pstack, psp, makeStackEntry entry regNone 1 destStack); pstackptr table := stacktop indexPlus 1; if pstackTrace then printStack table name "" else (); stacktop end; in (* local definitions *) type stackIndex = stackIndex; type ttab = ttab; val ttabCreate = ttabCreate; val noIndex = noIndex; val incrUseCount = incrUseCount; val printStack = printStack; (* Push a value onto the real stack. *) fun incsp table = let val stackaddr = realstackVal table * ~wordSize; in realstackptr table := realstackVal table + 1; if realstackVal table > maxstackVal table then maxstack table := realstackVal table else (); pushPstack table (Stack stackaddr) "incsp" end; (* The top of the pseudo-stack is held in a register *) fun pushReg (table, reg) : stackIndex = pushPstack table (Register reg) "pushReg"; (* The top of the pseudo-stack is a constant *) fun pushConst (table, v : machineWord) : stackIndex = pushPstack table (Literal v) "pushConst"; (* The top of the pseudo-stack is a forward reference to a procedure. *) fun pushCodeRef (table, rf : code) : stackIndex = pushPstack table (CodeRef rf) "pushCodeRef"; fun addRegUse (table, reg) : unit = incr (regset table) reg; (* If we load a value into the last available register and then need to load another value (e.g. a second argument), it is possible for the first to be pushed onto the stack and the register to be re-used. To avoid this we increment the use count on the first register before we attempt to load the second value. This doesn't prevent the register being pushed onto the stack but it does prevent the register being reused. *) fun lockRegister (table as Ttab{pstackTrace, ...}, reg) = let val U : unit = addRegUse (table, reg); in if pstackTrace then printStack table "lockRegister" "" else () end; fun unlockRegister (table as Ttab{pstackTrace, ...}, reg) : unit = let val U : unit = free (regset table) reg; in if pstackTrace then printStack table "unlockRegister" "" else () end; (* Puts a value in the real stack onto the pseudo-stack. Used for references to arguments that have not been passed in registers. *) fun pushStack (table, addr : int) : stackIndex = let (* Enter it only if it is not already there. *) fun search s = if s indexGeq pstackVal table then pushPstack table (Stack addr) "pushStack" else case (pstackEntry table s) of StackEntry {ent = Stack index, ...} => if index = addr then ( incrUseCount (table, s, 1); s ) else search (s indexPlus 1) | _ => search (s indexPlus 1) in search first end; (* Remove registers from the cache. *) fun removeFromCache (table as Ttab{pstack, ...}) regSet (continue: unit -> bool) = let fun ok r = inSet(r, regSet) fun clear (entry: stackIndex) (limit: stackIndex) = if entry indexLt limit then let val stackent = pstackEntry table entry; in case stackent of NoStackEntry => () | StackEntry {ent = stacken, cache = cacheReg, uses, destStack} => if cacheReg regEq regNone then () else (* Remove the entry if the wanted register is the cache *) (* or the value being cached. *) if ok cacheReg orelse (case stacken of Register reg => ok reg | Direct {base,...} => ok base | _ => false) then (* If the use-count is positive, simply set the cache to *) (* empty, otherwise remove the entry. *) if uses = 0 then removeEntry table entry false else ( free (regset table) cacheReg; stretchUpdate (pstack, getIndex entry, makeStackEntry stacken regNone uses destStack) ) else (); if continue () then clear (entry indexPlus 1) limit else () end else (); (* end clear *) val second = first indexPlus 1; in (* Do the constant pointer last. If we are flushing the cache to free registers it's probably more use than the others. *) clear second (pstackVal table); if continue () then clear first second else () end; (* Remove everything from the cache. *) fun clearCache table = removeFromCache table allRegisters (fn () => true); fun removeRegistersFromCache (table, regs) = removeFromCache table regs (fn () => true); (* The value on the stack is no longer required. This now just decrements the use count. *) fun removeStackEntry (table, index) = incrUseCount(table, index, ~1) (* Reset the real stack stack pointer after a function call. *) fun decsp (table as Ttab{pstackTrace, ...}, args) = ( realstackptr table := realstackVal table - args; if pstackTrace then printStack table "decsp" "" else () ); (* Returns the pstack offset for a particular declaration number. *) fun pstackForDec (table, locn) : stackIndex = stretchSub (decToPstack table, locn); (* Called when a value has been newly created and so must be local. *) fun containsLocal (table, reg) : unit = (); (* Register to register move. *) fun moveRR rs rd cvec = genRR (instrMove, rs, regNone, rd, cvec); (* Frees registers by pushing values onto the stack or moving them to other registers. `selectRegister' selects which registers are affected, `selectEntry' selects which entries are affected. Used either to clear all registers or just to free a particular one. `loadIfPoss' is true if it is sufficient to move the entry to another register. *) fun pushRegisters (table as Ttab{pstack, pstackTrace, ...}) cvec regSet selectEntry loadIfPoss = let fun pushEntries entry = if entry indexLt pstackVal table then let val stackent = pstackEntry table entry; in case stackent of StackEntry {uses, ent = Direct {base, offset}, cache = cacheReg, destStack} => (* Values which are cached but are otherwise not needed have a zero use-count. There is no need to push them. In fact, we have to explicitly clear the entry as otherwise getRegister could fail because the register could be locked by a zero-use pstack entry. SPF 26/9/95 *) (* I don't understand this - we clear that register from the cache - try uncommenting this. DCJM 30/11/00 *) (* Was uncommenting this the cause of the bug in loadEntry I fixed on 17/1/01? If so the current code is better. DCJM 25/1/01. *) if (* *) uses = 0 orelse (* *) not (selectEntry entry) then () else let (* Push reg onto the stack without changing the use count.*) fun saveDirectOnStack () = ( alignStack(table, cvec, destStack); if cacheReg regNeq regNone then genPush (cacheReg, cvec) else genLoadPush (offset, base, cvec); (free (regset table) base) : unit; (* Overwrite this entry with a reference to the stack. *) let val stackAddr = realstackVal table in stretchUpdate (pstack, getIndex entry, makeStackEntry (Stack(stackAddr * ~wordSize)) cacheReg uses stackAddr) end; realstackptr table := realstackVal table + 1; if realstackVal table > maxstackVal table then maxstack table := realstackVal table else () ); fun saveDirectInReg destReg = ( (free (regset table) base) : unit; if cacheReg regEq destReg then () (* already cached in destination register *) else if cacheReg regEq regNone then genLoad (offset, base, destReg, cvec) else ( (* Cached in a different register - move it there and free the cache. *) moveRR cacheReg destReg cvec; free (regset table) cacheReg ); (* Clear out the cache and overwrite this entry with a reference to the register. *) stretchUpdate (pstack, getIndex entry, makeStackEntry (Register destReg) regNone uses destStack) ); fun discardDirect () = ( (free (regset table) base) : unit; if cacheReg regNeq regNone then (free (regset table) cacheReg) else (); stretchUpdate (pstack, getIndex entry, NoStackEntry) ); in if not (inSet(base, regSet)) then () else if uses = 0 then (* discardDirect () *) removeEntry table entry false else if not loadIfPoss (* Not allowed to move it to another register. *) then saveDirectOnStack () else if cacheReg regNeq regNone andalso not (inSet(cacheReg, regSet)) (* It's cached in an acceptable register. *) then saveDirectInReg cacheReg else let (* Is there an acceptable register free? If so load it into that. *) val destReg = getAcceptableRegister (regset table, inverseSet regSet); in if destReg regNeq regNone then saveDirectInReg destReg else saveDirectOnStack () end end | StackEntry {uses, ent = Register reg, cache = cacheReg, destStack} => if (* uses = 0 orelse *) not (selectEntry entry) then () else let (* Push reg onto the stack without changing the use count.*) fun saveRegOnStack () = ( alignStack(table, cvec, destStack); genPush (reg, cvec) : unit; let val newCache = (* Have pushed a register - can treat the register as caching the stack location we have pushed it into. *) if cacheReg regEq regNone then reg else (free (regset table) reg; cacheReg); val stackAddr = realstackVal table in (* Overwrite this entry with a reference to the stack. *) stretchUpdate (pstack, getIndex entry, makeStackEntry (Stack(stackAddr * ~wordSize)) newCache uses stackAddr); realstackptr table := realstackVal table + 1; if realstackVal table > maxstackVal table then maxstack table := realstackVal table else () end ); (* If we have any direct references using this register we can adjust them to use the new register. This is particularly important if we are moving values out of this register because we want to load it with something else. *) fun saveRegInReg destReg = let fun regChanged entry = if entry indexLt pstackVal table then ( case (pstackEntry table entry) of StackEntry {ent = Direct {base, offset}, cache, uses, destStack} => if base regEq reg then ( (* Decrement the use count for the source reg and increment it for the destination. *) free (regset table) reg; addRegUse (table, destReg); stretchUpdate (pstack, getIndex entry, makeStackEntry (Direct {base = destReg, offset = offset}) cache uses destStack) ) else () | _ => (); regChanged (entry indexPlus 1) ) else (); in free (regset table) reg : unit; if cacheReg regEq destReg then () (* already cached in destination register *) else moveRR reg destReg cvec; regChanged entry; (* Start from this entry not from the bottom *) (* Clear out the cache and overwrite this entry with a reference to the register. *) stretchUpdate (pstack, getIndex entry, makeStackEntry (Register destReg) regNone uses destStack) end; fun discardReg () = ( (free (regset table) reg) : unit; if cacheReg regNeq regNone then (free (regset table) cacheReg) else (); stretchUpdate (pstack, getIndex entry, NoStackEntry) ); in if not (inSet(reg, regSet)) then () else if uses = 0 then (* discardReg () *) removeEntry table entry false else if not loadIfPoss then saveRegOnStack () else if cacheReg regNeq regNone andalso not (inSet(cacheReg, regSet)) then saveRegInReg cacheReg else let val destReg = getAcceptableRegister (regset table, inverseSet regSet); in if destReg regNeq regNone then saveRegInReg destReg else saveRegOnStack () end end (* let for saveReg etc. *) | _ => (); (* neither Direct nor Register *) pushEntries (entry indexPlus 1) end (* let for stackent *) else () (* end pushEntries *); in pushEntries first; if pstackTrace then printStack table "pushRegisters" "" else () end and pushAnyEntryAtCurrentSP(table, cvec): bool = (* Check that the next stack location is not the destination of an entry which has not yet been pushed and pushes it if it is. *) let val currentSp = realstackVal table fun selectEntry addr = case (pstackEntry table addr) of NoStackEntry => raise InternalError "pushAnyEntryAtCurrentSP: no entry" | StackEntry {ent=Stack addr, ...} => (* Ok if already pushed. Check that we don't have an entry above the stack pointer. *) if addr > currentSp then raise InternalError "pushAnyEntryAtCurrentSP: entry above rsp" else false | StackEntry {destStack, ...} => (* Consistency check to make sure that we haven't got an unpushed entry below the current sp. *) if destStack >= 0 andalso destStack < currentSp then raise InternalError "pushAnyEntryAtCurrentSP: unpushed entry" else destStack = currentSp (* Push it if we're there. *) in pushRegisters table cvec allRegisters (* Any register *) selectEntry false; (* Return true if the stack pointer has changed. *) realstackVal table <> currentSp end and alignStack (table, cvec, addr): unit = if addr < 0 (* Can use any offset. *) (* There is a problem when we have gaps where we have reserved addresses which are not consecutive. This can arise if we have something like: val a = ... val b = ... val c = if ...then ...(*X*)[push a]; [push b] a(last ref) else (if ... then (*Y*)[push b because we need its register} else (*Z*)[push a into the unused addr ???]; [push b to its explicit addr]...; a(last ref) ) in ... b ... end. At X a and b are pushed and given explicit addresses but a is removed at the end of the branch. At Y we've lost the explicit address for "a" so we have a gap. What should we put in the gap? We might be lucky and push a into it but what if we put something else in there? All this is only a problem if, when we merge the states, we only try to push entries. If we could store into the stack we'd be fine. We can store registers into the stack but not "direct" entries. For the moment, use the lowest value above the current sp which is not currently reserved. DCJM 25/1/01.*) then let fun minReserved s i = case pstackEntry table s of StackEntry {destStack, ...} => Int.max(destStack+1, i) | _ => i val newAddr = revfoldIterator minReserved (realstackVal table) (indDownto ((pstackVal table) indexMinus 1) first) in alignStack (table, cvec, newAddr) end else (* We have an explicit offset *) ( if addr < realstackVal table then raise InternalError "pushRegisters: unpushed register" else (); if addr = realstackVal table then () (* Got there. *) else ( (* If there is another entry for this address push it. *) if pushAnyEntryAtCurrentSP(table, cvec) then () else (* Push any register simply to align the stack. *) ( genPush (regN 0, cvec); realstackptr table := realstackVal table + 1 ); alignStack(table, cvec, addr) (* Keep going. *) ) ); (* Push all registers. Now only used before a while-loop. Also used when we have run out of registers. That should be changed. *) fun pushAll (table, cvec) : unit = pushRegisters table cvec allRegisters (fn _ => true )(* all entries *) false; (* Push a specific entry. This should really be incorporated into pushRegisters since at the moment it processes all the entries and only selects the particular one. *) fun pushSpecificEntry (table, cvec, entry) : unit = pushRegisters table cvec allRegisters (fn e => e indexEq entry ) false; (* Used particularly before procedure calls where we want to ensure that anything in a register is pushed onto the stack unless its last reference is in the call itself. Also used before a handler. *) fun pushAllBut (table as Ttab{pstack, ...}, cvec, but, pushTheseRegs) : unit = let val useTab = stretchArray (initStack, 0); fun checkReg [] r = false | checkReg (h::t) r = h regEq r orelse checkReg t r in but (fn addr => let val (realAddr,_) = pstackRealEntry table addr val ind = getIndex realAddr in stretchUpdate (useTab, ind, stretchSub (useTab, ind) + 1) end); pushRegisters table cvec (* registers that are modified *) pushTheseRegs (* entries with more uses than this *) (fn addr => case (pstackEntry table addr) of NoStackEntry => raise InternalError "pushAllBut: no entry" | StackEntry {uses, destStack, ent, cache} => if uses > stretchSub (useTab, getIndex addr) then true else ( (* Set the destination stack for this entry to "undefined". That's safe because we're going to remove this entry. We do this because we may be about to push some arguments or exception handlers and destStack may be in that area. *) if destStack <= 0 then () else stretchUpdate (pstack, getIndex addr, makeStackEntry ent cache uses ~1); false ) ) false end; (* Ensures that all values which need to be preserved across a function call are pushed onto the stack or are in registers that will not be modified. *) fun pushNonArguments (table as Ttab{pstack, ...}, cvec, args, pushTheseRegs) : reg list = let fun checkAddress [] addr = false | checkAddress (h::t) addr = h indexEq addr orelse checkAddress t addr val onList = checkAddress args (* Get the list of registers which weren't pushed. We need to lock them so that they don't get pushed onto the stack while we are pushing the arguments. Actually I'm not sure this achieves what we want. *) fun getRegisterList entry regs = if entry indexLt pstackVal table then if onList entry (* Is it an argument? *) then (* Ignore this. *) getRegisterList (entry indexPlus 1) regs else let val stackent = pstackEntry table entry val nextRegs = case stackent of StackEntry {uses, ent = Direct {base, ...}, ...} => if uses = 0 then regs else (lockRegister(table, base); base::regs) | StackEntry {uses, ent = Register reg, ...} => if uses = 0 then regs else (lockRegister(table, reg); reg::regs) | _ => (* neither Direct nor Register *) regs in getRegisterList (entry indexPlus 1) nextRegs end else regs in pushRegisters table cvec (* registers that are modified *) pushTheseRegs (* Ignore entries corresponding to the arguments but only if they have a use count of exactly one, *) (fn addr => case (pstackEntry table addr) of NoStackEntry => raise InternalError "pushNonArguments: no entry" | StackEntry {uses, destStack, ent, cache} => if uses > 1 orelse not (onList addr) then true (* Must push it now if the register is modified. *) else (* Don't need to save it because it's an argument. *) ( (* Set the destination stack for this entry to "undefined". That's safe because we're going to remove this entry. We do this because we may be about to push some arguments and destStack may be in that area. There may not be the same need for this as in pushAllBut but it shouldn't do any harm. *) if destStack <= 0 then () else stretchUpdate (pstack, getIndex addr, makeStackEntry ent cache uses ~1); false ) ) (* If all the registers must be pushed there's no point in trying to move to another register. *) (not(isAllRegs pushTheseRegs)); getRegisterList first [] end; (* bugfixed makeEntry added 30/3/95 *) fun makeEntry (table as Ttab{pstackTrace, printStream, ...}, cvec : code, index, locn, use, isP) : unit = ( stretchUpdate (isProc table, locn, isP); stretchUpdate (decToPstack table, locn, index); (* There is a bug which can happen if we make a reference to a copy entry which refers to a register. If the value is used in a function call but also used after it, it is possible that pushAllBut will fail to save it because the use-count has been incremented on the copy entry but NOT on the register entry. This happens very rarely, so to avoid it, we explicitly push the register in that case. Extra comment (25/9/95): This appears also to happen if we have a direct entry, so we also save it in that case as well. What we really need is a complete rewrite of this module - it uses the wrong data-structures. SPF 25/9/95. DCJM 26/11/99. Copy entries have been removed, so this is no longer required. *) (* Add the number of uses (less one since the use-count will normally be one) to the use count. *) incrUseCount (table, index, use - 1); if pstackTrace then ( printStream "makeEntry: index="; printStream(Int.toString(getIndex index)); printStream " locn="; printStream(Int.toString locn); printStream " use="; printStream(Int.toString use); printStream "\n" ) else () ); type savedState = { pStackPtr: stackIndex, realStackPtr: int, pStack: stackEntry stretchArray, nextRegNo : int, context: string }; fun pStackPtr ({pStackPtr ,...}:savedState) = pStackPtr; fun realStackPtr ({realStackPtr,...}:savedState) = realStackPtr; fun pStack ({pStack ,...}:savedState) = pStack; (* compare with the similar functions for ttabs!!! *) fun pStackEntry (table : savedState) (locn:stackIndex) : stackEntry = stretchSub (pStack table, getIndex locn); fun printState printStream (save: savedState as {pStackPtr, realStackPtr, context, ... }) name = ( printStream name; printStream "\n"; printStream "context="; printStream context; printStream " psp="; printStream(Int.toString(getIndex pStackPtr)); printStream " rsp="; printStream(Int.toString realStackPtr); printStream "\n"; for (indDownto pStackPtr first) (fn entry => printEntry printStream (pStackEntry save entry) entry) ); (* Returns the real entry from a chain of "copy" entries. Now that "copy" entries have been removed this just returns the entry. *) fun pStackRealEntry (table:savedState) (locn:stackIndex) = let val pstack = pStack table in case (stretchSub (pstack, getIndex locn)) of NoStackEntry => raise InternalError "pStackRealEntry: no entry" | StackEntry record => (locn,record) end; (* Sets the pseudo stack into a state to which it can be restored later. It is used when there are conditional branches to ensure that the state is the same if the branch falls through or is taken. *) fun saveState (table as Ttab{pstackTrace, printStream, ...}, cvec) : savedState = let val maxIndex = getIndex (pstackVal table); val saveStack = stretchArray (maxIndex, NoStackEntry); fun copyState s = (* copy the state. *) ( if s indexLt pstackVal table then ( stretchUpdate (saveStack, getIndex s, pstackEntry table s); copyState (s indexPlus 1) ) else () ); val state = { pStackPtr = pstackVal table, realStackPtr = realstackVal table, pStack = saveStack, nextRegNo = nextRegNo (regset table), context = traceContext cvec } in copyState first; if pstackTrace then printState printStream state "saveState" else (); state end; (* Tries first of all, then pushes all the registers and tries again. *) fun getAnyRegister (table as Ttab{pstackTrace, ...}, cvec) : reg = (let (* First see if there is one free and grab that. *) val r = getReg (regset table); val r = if r regNeq regNone then r else let (* We seem to have run out. First flush the cache, then if that fails push all the registers. On the whole it seems to work better to free a lot of registers rather then just freeing a few. We tend to either have more than enough registers, or much too few. *) fun untilSomethingFree () : bool = let val rs = regset table; val r = getReg rs; val U : unit = if r regNeq regNone then free rs r else () in r regEq regNone end; val U : unit = removeFromCache table allRegisters untilSomethingFree; val r = getReg (regset table); in if r regNeq regNone then r else let val U : unit = pushAll (table, cvec); (* Pushed values stay in the cache. *) val U : unit = removeFromCache table allRegisters untilSomethingFree; val r = getReg (regset table); in (* If we still haven't found anything we are in big trouble. *) if r regNeq regNone then r else raise InternalError "No free registers" end end in if pstackTrace then printStack table "getAnyRegister" (traceContext cvec ) else (); r end) handle SML90.Interrupt => raise SML90.Interrupt | exn => (printStack table "getAnyRegister" (traceContext cvec); raise exn); (* getAnyRegister *) (* Resets the stack to the value given by removing any entries with non-zero use counts above it. This is fairly rare so does not have to be particularly efficient. Assumes that there are enough data registers to hold all the values. *) (* We use the stack for saving values, for function parameters and for handler entries. Function parameters and handler entries have specific formats with multiple words which must be contiguous. If we have to spill a register after, say, pushing one parameter and while computing another, we must reload any spilled values and set the real stack pointer correctly before continuing. *) fun resetButReload (cvec, table as Ttab{pstack, pstackTrace, ...}, stackOffset) : unit = let val oldSp = realstackVal table; (* Load any values above "stackOffset". *) fun loadEntries entry = if entry indexLt first then () else let val stackent = pstackEntry table entry; in case stackent of StackEntry {ent = Stack addr, cache, uses, ...} => if addr < ((stackOffset - 1) * ~wordSize) (* Above the limit on the stack. *) then let (* Load it without changing the use count. *) val reg = if cache regNeq regNone then cache else let val reg = getAnyRegister (table, cvec); val stackPtr = (realstackVal table - 1) * ~wordSize; in genLoad (addr - stackPtr, regStackPtr, reg, cvec); reg end; in (* Clear out the cache and overwrite this entry with a reference to the register. *) stretchUpdate (pstack, getIndex entry, makeStackEntry (Register reg) regNone uses ~1) end else () | _ => (); loadEntries (entry indexMinus 1) end (* loadEntries *); in loadEntries ((pstackVal table) indexMinus 1); (* If the real stack ptr has changed we must have pushed something, so our check has been useless. *) if realstackVal table <> oldSp then raise InternalError "resetButReload: must have pushed something more" else (); (* Now reset the stack pointer. *) resetStack (realstackVal table - stackOffset, cvec); realstackptr table := stackOffset; if pstackTrace then printStack table "resetButReload" (traceContext cvec) else () end; fun getRegister (table as Ttab{pstackTrace, ...}, cvec, reg) : unit = let (* Get it out of wherever it is being used. *) fun inUse () = usage (regset table) reg > 0 val thisReg = singleton reg in pushRegisters table cvec thisReg (fn _ => true) (* any entry *) true; (* Clear it out of the cache (if it is there) *) removeFromCache table thisReg inUse; (* Should now be free. *) getRset (regset table) reg; if pstackTrace then printStack table "getRegister" (traceContext cvec) else () end; fun freeRegister (table, reg) : unit = free (regset table) reg; fun chooseRegister (table : ttab) : reg = let fun chooseReg ({vec,nextr, ...}:rset) = let val nextReg = ! nextr; fun next n = if n = 0 then (vecSize - 1) else (n - 1); (* SPF 7/6/94 fixed off-by-one problem *) fun findFree (i : int) : reg = if sub (vec, i) = 0 then ( (* Next time start looking at the register before this. *) nextr := next i; (* Do we really want to do this? *) regN i ) else let val n = next i; in if n = nextReg then (* None free. *) regNone else findFree n end; in findFree nextReg end; in chooseReg (regset table) end (* Return the set of modified registers for this function. *) fun getModifedRegSet (Ttab{regset={modSet=ref modSet, ...}, ...}) : reg list = let fun getRegs(i, rset) = if i < 0 then rset else if inSet(regN i, modSet) then getRegs(i-1, regN i :: rset) else getRegs(i-1, rset) in getRegs(regs-1, []) end (* Add a set of registers to those modified by this function. This will be the set of registers modified by a function called by this one. *) fun addModifiedRegSet (transtable: ttab, regs: regSet): unit = let val Ttab{regset={modSet, ...}, ...} = transtable in modSet := regSetUnion(!modSet, regs) end (* Generates code for an entry on the pseudo-stack. *) (* Moves the entry (at locn) into destReg, decrementing the use-count for entry. Doesn't push anything new on the pstack. *) fun loadPstackEntry (table as Ttab{pstackTrace, ...}) locn (* Offset on the stack *) destReg cvec = let val (realLoc, {cache = cacheReg, ent, ...}) = pstackRealEntry table locn in if cacheReg regNeq regNone then ( if cacheReg regNeq destReg then moveRR cacheReg destReg cvec else () ) else case ent of Register reg => if reg regNeq destReg then moveRR reg destReg cvec else () | Literal lit => genRI (instrMove, regNone, lit, destReg, cvec) | CodeRef code => genLoadCoderef (code, destReg, cvec) | Direct {base, offset} => genLoad (offset, base, destReg, cvec) | Stack index => let val stackPtr = (realstackVal table - 1) * ~wordSize; in genLoad (index - stackPtr, regStackPtr, destReg, cvec) end | Container l => (* The first entry in the container gives us the address. *) case pstackRealEntry table (hd l) of (_, {ent = Stack index, ...}) => let val stackPtr = (realstackVal table - 1) * ~wordSize; in genStackOffset (destReg, index - stackPtr, cvec) end | _ => raise InternalError "loadPstackEntry: container entry is not on stack"; (* Decrement use count and remove if done. *) incrUseCount (table, locn, ~1); if pstackTrace then printStack table "loadPstackEntry" (traceContext cvec) else () end (* loadPstackEntry *) (* Pushes a new pstack entry; loads value into register; decrements the use count of old pstack entry. *) and loadEntry (cvec, table as Ttab{pstack, ...}, entry, willTrample) : reg*stackIndex = let val (realLoc, {ent = stackEntry, cache = cacheReg, uses, destStack}) = pstackRealEntry table entry; (* If we find an entry in the cache or already in a register we can use it provided it will not be modified or this is its last use. Otherwise we must make a copy of it. *) val lastRef = lastReference table entry; fun useCacheRegister () : reg*stackIndex = let (* The value is being cached and we can safely use the register. *) (* Get the register, increment its use count and put it on the stack *) (* If we are going to trample on the register we must remove it from the cache. If this is the last real reference that will not matter, but if this is actually a reference to a parameter which could be loaded onto the stack again we have to be careful that the cache does not indicate a register which has been changed. *) val U: unit = if willTrample then stretchUpdate (pstack, getIndex realLoc, makeStackEntry stackEntry regNone uses destStack) else addRegUse (table, cacheReg); val newEntry = pushReg (table, cacheReg) in (* Must decrement the use-count of the entry we are loading as though we had actually loaded it. *) incrUseCount (table, entry, ~1); (cacheReg, newEntry) end fun useNewRegister () : reg*stackIndex = let (* It is loaded into a register. This is complicated because we want to put entries into the cache if we can. They must not be put into the cache until after they have been loaded otherwise the load instruction will simply copy the new cache value. It is possible that a value might be cached in a data register when it is needed in an address register or vice-versa. *) val resultReg = getAnyRegister (table, cvec); in (* Get the entry again - getAnyRegister could have forced the entry onto the stack if it had run out of registers. *) case (pstackEntry table realLoc) of NoStackEntry => raise InternalError "loadEntry: entry deleted" | StackEntry {ent, uses, cache, destStack} => let (* If the value is already cached, keep it in the old cache register, rather than the new one. This should help to minimise register-register moves when we have to merge branches. SPF 5/6/95 *) val cacheIt = not willTrample andalso cache regEq regNone andalso case ent of Direct _ => true (* | Literal _ => true *) (* constants are not cached *) (* Cannot cache it if we are about to pop it. *) | Stack index => (0 <= index orelse not lastRef) | _ => false (* If we are going to cache it we musn't let it be removed. *) val U: unit = if cacheIt then incrUseCount (table, entry, 1) else (); val U: unit = loadPstackEntry table entry resultReg cvec; val newEntry = pushReg (table, resultReg); in if cacheIt then ( (* First remove any register already in the cache. This should now be a no-op. SPF 5/6/95 *) if cache regNeq regNone then freeRegister (table, cache) else (); (* put in the cache and restore use-count. *) stretchUpdate (pstack, getIndex realLoc, makeStackEntry ent resultReg uses destStack); addRegUse (table, resultReg); incrUseCount (table, entry, ~1) ) else (); (resultReg, newEntry) end end; (* useNewRegister *) in case stackEntry of Register reg => if not willTrample then (reg, entry) else if lastRef then ( (* We are going to trample on it but this is the last reference so we can use it. It may, though, be caching a value so we must remove it from the cache before we return it. DCJM 17/1/01. *) removeRegistersFromCache(table, listToSet [reg]); (reg, entry) ) else if cacheReg regNeq regNone (* Should not happen now. *) then useCacheRegister () else useNewRegister () (* Must copy it. *) | _ => if cacheReg regNeq regNone then useCacheRegister () else useNewRegister () (* Not in a register. *) end; (* Load a value into a specific register. Used for loading argument regs etc. Pushes a new entry onto the pstack (why?). *) fun loadToSpecificReg (cvec, table, reg, entry, needExclusive) : stackIndex = let val (_, {ent = stackEntry, cache = cacheReg, ...}) = pstackRealEntry table entry; val lastRef = lastReference table entry; in if (case stackEntry of Register r => r regEq reg | _ => false) then (* It's already in the right register. *) if needExclusive andalso not lastRef (* The value is in the register but we are going to change it - have to push the previous contents. *) then ( getRegister (table, cvec, reg); let val newEntry : stackIndex = pushReg (table, reg); in incrUseCount (table, entry, ~1); newEntry end ) (* Already there - use that entry. *) else entry else if cacheReg regEq reg then (* The register we want is caching the value - use it. *) ( (* Get the register, increment its use count and put it on the stack *) if needExclusive andalso not lastRef then getRegister (table, cvec, reg) else addRegUse (table, reg); let val newEntry : stackIndex = pushReg (table, reg); in (* Must decrement the use-count of the entry we are loading as though we had actually loaded it. *) incrUseCount (table, entry, ~1); newEntry end ) else ( (* Not in the register or must copy it. *) (* This entry may contain a reference to a storage location with the register we want as the index register. If this is the only reference to it then we can increment the use count and use the register. This saves us from copying the value into a second register in order to free this one, and then copying it back. i.e. can generate lw rn,0(rn) *) (* Remove it from the cache first - we have to check that its use count is 1 (i.e. it is not being used as base register for something else we want), but we don't care if it is only being cached. It's not clear that we want to do this for non-direct entries, but I would rather not change this code yet. SPF 25/5/95 *) removeFromCache table (singleton reg) (fn () => usage (regset table) reg > 0); (* We have now removed all "cache" uses of the register, but there may still be several "direct" uses of it. For the optimisation to work, there should only be one reference left - to this entry, which must be a "direct". *) if lastRef andalso usage (regset table) reg = 1 andalso (case stackEntry of Direct {base,...} => base regEq reg | _ => false) then addRegUse (table, reg) else getRegister (table, cvec, reg); (* sets usage to 1 *) loadPstackEntry table entry reg cvec; pushReg (table, reg) ) end; (* loadToSpecificReg *) (* Checks if we are going to overwrite the stack, and loads the entry into a register. *) fun loadEntryBeforeOverwriting (cvec:code) (table as Ttab{pstack, ...}) (offset:int) = if 0 <= offset andalso offset < realstackVal table then let (* May have to reload something. *) fun findTheEntry (entry: stackIndex) = if entry indexLt first then () (* finish *) else let val stackent = pstackEntry table entry; in case stackent of StackEntry {ent = Stack addr, cache, uses, ...} => if addr = offset * ~wordSize then let (* This is the entry. *) (* Load it without changing the use count. *) val reg = if cache regNeq regNone then cache else let val reg = getAnyRegister (table, cvec); val off = (realstackVal table - 1) * wordSize; val U : unit = genLoad (addr + off, regStackPtr, reg, cvec); in reg end; val newStackent = (* Make a new entry with a NEW stack destination. If we have to push it we have to use a new location. I don't like this but it's safe because this only occurs for a tail-recursive value or for a temporary value in an exception handler. *) makeStackEntry (Register reg) regNone uses ~1; in (* Clear out the cache and overwrite this entry with a reference to the register. *) stretchUpdate (pstack, getIndex entry, newStackent) end else () (* not this entry *) | _ => (); findTheEntry (entry indexMinus 1) end (* findTheEntry *) in findTheEntry ((pstackVal table) indexMinus 1) end else (); (* end of loadEntryBeforeOverwriting *) (* Store a pseudo-stack entry at a given location on the real stack. Used when making a tail-recursive call. The problem is that the old entry in the real stack may be in use, so we may have to reload it first. We load all the values before storing any, so there is no danger of overwriting entries in the argument area, but we may have had to push some of the registers while doing the load, so those entries will have to be saved. *) fun storeInStack (cvec, table, entry, locn) : unit = let (* Move it to the stack, using a move-immediate if possible. *) fun inc x = (x := !x + 1); fun generalStoreInStack () = (* General case. *) let val (reg, regEntry) = loadEntry (cvec, table, entry, false) in (* Lock the register, otherwise it might be used to load an entry. *) lockRegister (table, reg); loadEntryBeforeOverwriting cvec table locn; (* N.B. loadEntry may push values onto the stack, so we cannot use isPush. *) if (realstackVal table) = locn then ( genPush (reg, cvec); inc (realstackptr table) ) else let val loc = ((realstackVal table) - locn - 1) * wordSize in genStore (reg, loc, regStackPtr, STORE_WORD, regNone, cvec) end; unlockRegister (table, reg); removeStackEntry(table, regEntry) end; val isPush = (realstackVal table = locn); val (_,{ent = valEnt, cache = cacheReg, ...}) = pstackRealEntry table entry; in (* Select the best instruction to use. The default is to load it into a register and store or push that. *) case valEnt of Literal lit => if isPush andalso instrIsRI (instrPush, lit) then ( (* Push-immediate. *) loadEntryBeforeOverwriting cvec table locn; genRI (instrPush, regNone, lit, regNone, cvec); incrUseCount (table, entry, ~1); inc (realstackptr table) ) else if isStoreI(lit, STORE_WORD, false) then let (* Store immediate. *) val U : unit = loadEntryBeforeOverwriting cvec table locn; val locn = ((realstackVal table) - locn - 1) * wordSize val U : unit = genStoreI (lit, locn, regStackPtr, STORE_WORD, regNone, cvec); in (* Remove the entry for the literal. *) incrUseCount (table, entry, ~1) end else generalStoreInStack () | Direct {base, offset} => if preferLoadPush andalso isPush andalso cacheReg regEq regNone then let (* Push memory. *) val U : unit = loadEntryBeforeOverwriting cvec table locn; val U : unit = genLoadPush (offset, base, cvec); in incrUseCount (table, entry, ~1); inc (realstackptr table) end else generalStoreInStack () | Stack index => if preferLoadPush andalso isPush andalso cacheReg regEq regNone then let (* Push stack entry. *) val U : unit = loadEntryBeforeOverwriting cvec table locn; val locn = index + (realstackVal table - 1) * wordSize; val U : unit = genLoadPush (locn, regStackPtr, cvec); in incrUseCount (table, entry, ~1); inc (realstackptr table) end else generalStoreInStack () | _ => generalStoreInStack () ; if realstackVal table > maxstackVal table then maxstack table := realstackVal table else () end (* storeInStack *); (* Ensures that the top of the pseudo stack has been copied onto the real stack and is at the correct position. stackOffset contains the stack offset it should have. Primarily used to push arguments to procedures. *) fun pushValueToStack (cvec, table, entry, stackOffset) : stackIndex = let val U : unit = storeInStack (cvec, table, entry, stackOffset - 1) val U : unit = (* Remove any entries above the stack offset we need. *) if realstackVal table > stackOffset then resetButReload (cvec, table, stackOffset) else (); val stackAddr = (stackOffset - 1) * ~wordSize; val result : stackIndex = pushPstack table (Stack stackAddr) "pushValueToStack"; in (* The stack pointer should now be the required value. *) if realstackVal table <> stackOffset then raise InternalError "pushValueToStack: Couldn't push to stack" else (); result end; fun reserveStackSpace(table: ttab, cvec: code, space: int): stackIndex = (* Reserve space on the stack for a tuple. *) let (* We must first make sure that the space we're going to allocate hasn't been reserved for a register. *) val _ = alignStack(table, cvec, ~1) (* Initialise the store so that the garbage collector doesn't accidentally pick up an invalid pointer. *) (* The stack grows downwards so we want the entries in reverse order. The first entry must be lowest address. *) fun pushEntries 0 = [] | pushEntries n = let val pushRest = pushEntries (n-1) (* We could push a constant but on many architectures it's easier to push a register. It doesn't matter which provided it contains a valid tagged value or pointer. *) val _ = genPush (regN 0, cvec); val stackLocn = incsp table in stackLocn :: pushRest end; val entries = pushEntries space in pushPstack table (Container entries) "reserveStackSpace" end (* Generates an indirection on an item on the pseudo-stack. *) fun indirect (offSet, entry, cvec, table) : stackIndex = case pstackRealEntry table entry of (_, {ent = Container l, ...}) => (* If we are indirecting off a container we can simply load the entry. *) let val resIndex = List.nth(l, offSet div wordSize) in (* Increment its use count. *) incrUseCount (table, resIndex, 1); removeStackEntry(table, entry); (* Remove the container entry. *) resIndex end | (_, {ent = Literal i, ...}) => (* We won't normally get this because it will have been optimised out. The exception is when we have SetContainer with a tuple which is a constant. For safety we check that we have a valid address here although unlike in findEntryInBlock we should never actually get an invalid one. *) (* Actually, we can, in cases such as val (a,b) = raise ... where we will do an indirection on the dummyValue put on the pstack to represent the non-existent result of the "raise". In that case we put in a dummy result of zero. *) if isShort i andalso toShort i = 0w0 then pushConst(table, toMachineWord 0) else if isShort i orelse ADDRESS.length (toAddress i) <= Word.fromInt(offSet div wordSize) then raise InternalError "indirect - invalid constant address" else ( removeStackEntry(table, entry); (* Remove the container entry. *) pushConst (table, loadWord (toAddress i, toShort (offSet div wordSize))) ) | _ => let val (topReg, topEntry) = loadEntry (cvec, table, entry, false); val U = removeStackEntry(table, topEntry); (* Remove the entry for the register. *) (* and push the indirection *) (* Profiling shows that this search is where the compiler can spend most of its time. To speed it up we keep a lower limit pointer which saves us searching below the lowest direct entry. *) (* See if it is already on the stack. *) fun search s max foundD = if s indexGeq max then ( (* Not there. *) addRegUse (table, topReg); (* If this is below the previous lower limit we need to reset it. *) if !(lowestDirect table) indexGt (pstackVal table) then lowestDirect table := pstackVal table else (); pushPstack table (Direct {base = topReg, offset = offSet}) "indirect" ) else case (pstackEntry table s) of StackEntry {ent = Direct {base, offset}, ...} => ( (* If we found no direct entries below here then remember this as the first. *) if not foundD then lowestDirect table := s else (); if base regEq topReg andalso offset = offSet then (* Found it *) ( incrUseCount (table, s, 1); s ) else search (s indexPlus 1) max true (* Found one *) ) | _ => search (s indexPlus 1) max foundD; (* end search *) in search (! (lowestDirect table)) (pstackVal table) false end; (* Copies an item which is in another procedure, and therefore on a different table, onto the local stack. If the value is relative to the frame pointer we must generate a static-link entry and make the address relative to that. The only values should be either literals (i.e. the address of a static-link called procedure) or a stack value. *) fun pushNonLocal (fromTable, toTable, locn, makeSl, cvec) : stackIndex = let val (_,{ent = stacken, uses = use, ...}) = pstackRealEntry fromTable locn; in if use <= 0 then raise InternalError "pushNonLocal: zero use count" else (); (* Don't decrement the use-count because there will only be one count for all the references from this closure. *) case stacken of Literal lit => pushConst (toTable, lit) | CodeRef code => pushCodeRef (toTable, code) | Stack index => let (* Load static link entry (this points to the first word in the frame, not to the base of the frame). *) val sl = makeSl (); in (* Indirect to get the particular entry in the frame. *) indirect (index, sl, cvec, toTable) end | _ => raise InternalError "pushNonLocal: not Literal, CodeRef or Stack" end; fun isProcB (table, locn) : bool = stretchSub (isProc table, locn); (* Moves an expression into a newly created vector or into a container. *) fun moveToVec (vecEntry, valueEntry, addr, width, cvec, table) : unit = (* Vector index; Value to put in; Vector Offset, code; Translation table *) (* We have to load the vector address if we have just used the last free register. We could flush the registers and reuse topReg for valReg. Increment the use count on the register just to be sure. *) let val U : unit = incrUseCount (table, vecEntry, 1); val (topReg, topEntry) = loadEntry (cvec, table, vecEntry, false); (* We have to be careful if we have just used the last free register to load the vector address. We could flush the registers and reuse topReg for valReg. Increment the use count on the register just to be sure. *) val U : unit = lockRegister (table, topReg); fun storeViaRegister () = let val (valReg, regEntry) = loadEntry (cvec, table, valueEntry, false); in genStore (valReg, addr, topReg, width, regNone, cvec); removeStackEntry(table, regEntry) end; in case (pstackRealEntry table valueEntry) of (* Can we simply move it? *) (_,{ent = Literal lit,...}) => if isStoreI(lit, width, false) then ( genStoreI (lit, addr, topReg, width, regNone, cvec); (* Remove the entry for the literal. *) incrUseCount (table, valueEntry, ~1) ) else storeViaRegister () | _ => storeViaRegister () ; (* Release it. *) unlockRegister (table, topReg); removeStackEntry(table, topEntry) end; (* Loads a value into a register if it is in the argument area. Used for tail-recursive calls. "storeInStack" checks for overwriting entries elsewhere on the stack, but because the argument area is not represented by entries on the pstack it won't work for them. *) fun loadIfArg (cvec, table, entry) : stackIndex = let val (_,valEntry) = pstackRealEntry table entry in case (pstackRealEntry table entry) of (_,{ent = Stack index, ...}) => if index > 0 then let val (_, newEntry) = loadEntry (cvec, table, entry, false) in newEntry end else entry | _ => entry (* return the original. *) end; fun getRegisterSet (addr: machineWord): regSet = (* The set of register modified by a function. *) let val doCall: int*machineWord -> Word.word = RunCall.run_call2 RuntimeCalls.POLY_SYS_process_env val rSet = doCall(103, addr) (* Get the bit pattern from the function. *) (* It would be much better to use Word.word here rather than this Address type. The only reason we still use it is just in case we ever need to bootstrap from an old database. *) val andb = Word.andb and << = Word.<< infix andb << fun decodeBits (i: int) (l: reg list) = if i < 0 then l else if (rSet andb (0w1 << Word.fromInt i)) <> 0w0 then decodeBits (i-1) (regN i :: l) else decodeBits (i-1) l val registers = decodeBits (regs-1) [] in listToSet registers end fun getRegisterSetForCode (cvec: code) : regSet = (* Get the register set for a forward reference which may or may not have already been compiled. *) case codeAddress cvec of SOME addr => (* Now compiled - return the register set. *) getRegisterSet (toMachineWord addr) | NONE => (* We haven't compiled this yet: assume worst case. *) allRegisters (* Get the register set for an entry on the stack which will be the entry point of a function. If it's not a constant we have to assume it modifies any of the registers. *) fun getFunctionRegSet(index: stackIndex, transtab: ttab) : regSet = let val (_,{ent = stacken, ...}) = pstackRealEntry transtab index; in case stacken of Literal lit => getRegisterSet lit | CodeRef code => getRegisterSetForCode code | _ => allRegisters end; (* An optional result. i.e. if the code before the jump has returned a result this is the offset in the table of the result. *) datatype mergeResult = NoMerge | MergeIndex of stackIndex; (* A code label packaged up with a saved state. *) abstype labels = NoLabels | Labels of {result: mergeResult, lab: CODECONS.labels, state: savedState} with val noJump = NoLabels; fun isEmptyLabel NoLabels = true | isEmptyLabel _ = false; fun makeLabels res cLab sState = Labels {result=res, lab = cLab, state = sState}; fun labs (Labels {lab ,...}) = lab | labs _ = raise Match; fun state (Labels {state,...}) = state | state _ = raise Match; fun result (Labels {result,...}) = result | result _ = raise Match; end; (* Set the state to the saved values. *) fun setState (save : savedState, table as Ttab{pstack, pstackTrace, printStream, ...}, cvec, carry, mark, isMerge): mergeResult = let val U : unit = if pstackTrace then printState printStream save "setState" else (); (* This is logically unnecessary, but increases the likelihood that values moved out of resultReg (for example) are moved into the *same* register in the different branches. That in turn decreases the work we have to do when we merge the branches back again. SPF 5/6/95 *) val U : unit = setNextRegNo (regset table, #nextRegNo save); val topReg = case carry of NoMerge => regNone (* Unused *) | MergeIndex savedTop => ( case (pStackRealEntry save savedTop) of (_,{ent = Register reg, ...}) => reg | (_,{cache = cacheReg, ...}) => if cacheReg regNeq regNone then cacheReg else raise InternalError "setState: not a register" ) in (* Clobber all entries above the "mark". This will remove the result register if there is one. *) (* TODO: I don't like this. I think we should explicitly remove it. DCJM 30/11/99. *) for (indDownto (pstackVal table indexMinus 1) mark) (fn s => removeEntry table s true); let (* Set up the saved state. Need to set the register set. Free the registers from the table. *) fun frees s = if s indexGeq pstackVal table then () else let val stacken = pstackEntry table s; in case stacken of NoStackEntry => () | StackEntry {ent, cache, ...} => ( case ent of Register reg => freeRegister (table, reg) | Direct {base, ...} => freeRegister (table, base) | _ => () ; if cache regNeq regNone then freeRegister (table, cache) else () ) ; frees (s indexPlus 1) end; in frees first end; realstackptr table := realStackPtr save; let val oldPstackptr = pstackVal table; val U = pstackptr table := pStackPtr save; (* Go up the entries putting them onto the table from the saved state, then come back setting the use-counts where appropriate. We have to do it this way because of copy entries. *) (* But we don't have copy entries any longer so this could be improved. DCJM 30/11/99. *) fun putOnEntries s = if s indexGeq pStackPtr save then () else let val saveEntry = pStackEntry save s; val (tabUseCount, tabDestStack) = (* Get the use-count and stack destination in the table. *) if s indexGeq oldPstackptr then (0, ~1) else case (pstackEntry table s) of NoStackEntry => (0, ~1) | StackEntry {uses, destStack, ...} => (uses, if exitedVal table then ~1 else destStack) ; in (* Put the saved entry into the table. *) stretchUpdate (pstack, getIndex s, saveEntry); case saveEntry of NoStackEntry => putOnEntries (s indexPlus 1) | StackEntry {ent, cache, destStack, uses, ...} => ( (* Compute the new register set. *) case ent of Register reg => incr (regset table) reg | Direct {base, ...} => incr (regset table) base | _ => () ; if cache regNeq regNone then incr (regset table) cache else (); (* Propagate the destination stack offset information. If the saved offset is non-negative it must agree with the current information. *) if tabDestStack < 0 then () else if destStack >= 0 then (if destStack <> tabDestStack then raise InternalError "Different stack destinations" else () ) else stretchUpdate (pstack, getIndex s, makeStackEntry ent cache uses tabDestStack); putOnEntries (s indexPlus 1); (* Can now set the use counts. The use-counts may have changed and entries may have been removed because the use-counts of copy entries have been decremented. *) (* This no longer applies now that copy entries have been removed. Continue to do it that way for the moment. Note that with the change from use-counts to last-references we no longer reduce the use count to the lower of the saved and current values in the case where we are setting the state at the start of a parallel flow of control (e.g. at the start of the else-part of an if-then-else) but only when this is being used to "merge" flows of control where one flow has actually exited. In that case the use counts should normally agree but there may be cases where they don't, maybe associated with statically-linked functions. *) if isMerge then let val currUseCount = if s indexGeq (pstackVal table) then 0 else case (pstackEntry table s) of NoStackEntry => 0 | StackEntry {uses, ...} => uses in if tabUseCount < currUseCount then incrUseCount (table, s, tabUseCount - currUseCount) else () end else () ) end; val U: unit = putOnEntries first; val result: mergeResult = case carry of MergeIndex _ =>(* Put the result register onto the stack. *) ( getRegister (table, cvec, topReg); MergeIndex(pushReg (table, topReg)) ) | NoMerge => NoMerge in if pstackTrace then printStack table "setState" (traceContext cvec) else (); result end end; (* Loads all "direct" entries into registers. This is done when saving the state before a branch to avoid a problem when the states are merged back. When the states are merged we do it by loading entries into registers, but we may not have enough registers to load all the direct entries, so we do it now, and push entries to the stack as necessary. *) (* I've removed the calls to this to help test the new code with explicit stack destinations. DCJM 28/6/2000. *) fun loadDirectEntries (table as Ttab{pstack, ...}) cvec = let (* Load any values above "stackOffset". *) fun loadEntries entry max = if entry indexGeq max then () else ( case (pstackEntry table entry) of StackEntry {ent = Direct {base, ...}, uses, cache, destStack} => if uses <= 0 then () else if cache regNeq regNone then let val newStackent = makeStackEntry (Register cache) regNone uses destStack; val U : unit = stretchUpdate (pstack, getIndex entry, newStackent) in freeRegister (table, base) end else let val reg = getAnyRegister (table, cvec); in (* Getting a register could cause this entry to be pushed onto the stack, so we have to check again. *) case (pstackEntry table entry) of StackEntry {ent = Direct {base, offset}, cache, uses, destStack} => let val U : unit = genLoad (offset, base, reg, cvec) val newStackent = makeStackEntry (Register reg) regNone uses destStack val U : unit = stretchUpdate (pstack, getIndex entry, newStackent) in freeRegister (table, base) end | _ => (* Direct stackentry has already been pushed. *) freeRegister (table, reg) end (* not cached *) | _ => () (* not direct *) ; loadEntries (entry indexPlus 1) max ); (* end loadEntries *) in loadEntries (! (lowestDirect table)) (pstackVal table) end; fun unconditionalBranch (result, table, cvec) : labels = if branchedVal table then noJump else let (* val U : unit = loadDirectEntries table cvec *) val state = saveState (table, cvec); in branched table := true; makeLabels result (CODECONS.unconditionalBranch cvec) state end; fun jumpBack(start, table, cvec): unit = ( jumpback(start, true, cvec); branched table := true ) (* Record the stack limit when we diverge and then use it when we merge back again. *) type stackMark = { newMark: stackIndex, oldMark: stackIndex }; fun newMark ({newMark,...}: stackMark) = newMark; fun oldMark ({oldMark,...}: stackMark) = oldMark; fun makeStackMark (newM: stackIndex) (oldM: stackIndex) = { newMark = newM, oldMark = oldM }; fun markStack table = let val oldMark = markerVal table; val newMark = pstackVal table; in marker table := newMark; makeStackMark newMark oldMark end; fun unmarkStack(table, mark) = marker table := oldMark mark; (* mergeState is used when two flows of control merge e.g. at the end of the else-part of an if-then-else when the state saved at the end of the then-part has to be merged with the state resulting from the else-part. This function first tries to do what it can to make the current state match the saved state. If it can't do it it may require a "reverse merge" where we swap over the saved and current states. Ideally we would simply patch in extra code in the then-part but that's too complicated. Instead "fixup" does it by generating an unconditional branch, fixing up the original branch and then calling mergeState to try and merge again. This should only require one reverse to converge. I've virtually rewritten this function since it was the source of a number of bugs, particularly some identified by Simon Finn. The aim now is to converge by having a (partial) ordering on the types of entries: Stack > Register/Cached > Direct. We never load a stack entry into a register. DCJM 29/6/2000. *) fun mergeState (save : savedState, savedResult: mergeResult, table as Ttab{pstack, pstackTrace, printStream, ...}, currentResult: mergeResult, cvec, mark) : bool*mergeResult = let val needOtherWay = ref false; in if pstackTrace then ( printStack table ("mergeState") (traceContext cvec); printState printStream save "saved state" ) else (); if (markerVal table) indexNeq (newMark mark) then raise InternalError "Marker" else (); (* Merge the tables together. The only complication is that if both sides are returning values they may be at different locations on the pseudo stack. We load the top of the current stack into the register that was used for the top of the saved state and then remove it. There is no need to remove the top of the saved state because those entries will correspond to zero-use count entries in the current stack. *) let val topReg = case (savedResult, currentResult) of (MergeIndex savedTop, MergeIndex currentTop) => let val sTopReg = case (pStackRealEntry save savedTop) of (_,{ent = Register reg, ...}) => reg | (_,{cache = cacheReg, ...}) => if cacheReg regNeq regNone then cacheReg else raise InternalError "Not a register"; (* Load the value on the top of "table" into the same register (it ought to be there anyway). *) val regEntry = loadToSpecificReg (cvec, table, sTopReg, currentTop, true); in (* Because this register will be at a different offset in the table from in the saved state it is easier to remove the register and put it on later. *) removeStackEntry(table, regEntry); getRegister (table, cvec, sTopReg); sTopReg end | (NoMerge, NoMerge) => regNone (* Unused *) | _ => (* They should agree on whether they will return a result or not. *) raise InternalError "mergeState - Mismatched result states" in (* Clobber all entries above the "mark". These are values which are local to the block since the split and so are no longer required. They should normally have been removed as soon as they were no longer required. *) for (indDownto (pstackVal table indexMinus 1) (newMark mark)) (fn s => removeEntry table s true); (* First pass: get rid of entries which are no longer required. Also propagate stack destination info. That probably isn't required because it should already have happened (the saved state represents a previous state) but shouldn't be a problem. *) (* The entries on the stack will only be those that were there before we split the instruction streams we are now merging. All those pushed since then will be in different positions in the saved state and current state and so will be removed from the merged state. The common entries may differ if we have had to push some values that were in registers onto the real stack. *) for (indDownto (pstackVal table indexMinus 1) first) (fn s => case (pstackEntry table s, pStackEntry save s) of (NoStackEntry, _) => () (* No entry in table. *) | (StackEntry _, NoStackEntry) => (* table entry could be non-empty if it is a cache entry or if we are doing a backwards merge. If we do a backwards merge we can have entries in the table with non-zero use counts, but those can be removed. *) removeEntry table s false | (StackEntry {uses = tabUses, cache = tabCache, ent = tabEnt, destStack = tabDest}, StackEntry {uses = saveUses, cache = saveCache, ent = saveEnt, destStack = saveDest}) => let val mergedDest = if tabDest >= 0 then (if saveDest >= 0 andalso tabDest <> saveDest then raise InternalError "merge: mismatched destination" else (); tabDest ) else saveDest in if tabUses = 0 orelse saveUses = 0 (* The use-counts may be zero if we have retained an entry because it is cached in a register. We remove these entries unless it is the same value and cached in the same register *) then if tabCache regNeq saveCache then removeEntry table s false else case (tabEnt, saveEnt) of (Direct {base = tabBase, offset = tabOffset}, Direct {base = saveBase, offset = saveOffset}) => if tabBase regEq saveBase andalso tabOffset = saveOffset then () else removeEntry table s false | (Stack tabIndex, Stack saveIndex) => if tabIndex = saveIndex then () else removeEntry table s false | _ => removeEntry table s false else (* We need to retain this entry. *) ( if tabDest <> mergedDest then stretchUpdate (pstack, getIndex s, makeStackEntry tabEnt tabCache tabUses mergedDest) else () ) end ); (* Try to align the real stack pointer by popping unused values. We MUST remove entries which have been pushed onto the stack in the saved state but not in the current state since we'll have to push them here. We must not remove entries which are currently in use. One further complication is that we may have exception handler(s) on the real stack so we can't simply pop everything above the highest used stack position. It would probably be better if we recorded handler locations on the pstack - maybe change this. *) let (* Find the highest stack value which is actually in use. *) fun getInUse s i = case pstackEntry table s of StackEntry {ent = Stack addr, ...} => (* The stack pointer must be one more than the highest value in use. *) Int.max(addr div ~wordSize+1, i) | _ => i val stackInUse = (* This is the highest used stack location, but we may have a handler above it so we can't necessarily reset the stack to here. *) revfoldIterator getInUse 0 (indDownto ((pstackVal table) indexMinus 1) first) (* Examine the saved stack to see those entries which have been pushed in the saved state but not in the current state. We need to reset the stack below this. If there are no such entries we return the stack pointer from the saved state. *) fun getMinStack s i = case (pstackEntry table s, pStackEntry save s) of (StackEntry {ent = Stack addr, ...}, _) => i | (StackEntry _, StackEntry{ent = Stack addr, ...}) => (* We have an entry which has been pushed in the saved state but not in the current state. We have to set sp below this. *) let val minStack = Int.min(addr div ~wordSize, i) in if minStack < stackInUse (* Check that we don't have entries we're going to have to push below those we've already pushed. DCJM 25/1/01. *) then raise InternalError "mergeState: unpushed entries" else minStack end | _ => i; val minStack = revfoldIterator getMinStack (realStackPtr save) (indDownto ((pstackVal table) indexMinus 1) first) (* We can reset the stack to the maximum of the entries currently in use and those which need to be pushed or the saved sp if there aren't any. *) val maxStack = Int.max(stackInUse, minStack) in if maxStack < realstackVal table then ( resetStack (realstackVal table - maxStack, cvec); realstackptr table := maxStack ) else () end; (* Second pass: push any entry which was pushed in the saved state. *) (* We have a choice here about what to do when we have a value which is in a register on one branch and on the stack in the other. The original approach was to get both values back into the register by reloading the register from the stack. That worked well on the Sparc where there were plenty of registers but less well on the i386. The advantage is that if we have a branch which is small and frequently taken we don't incur any cost. e.g. "val x = ...; val y = if ... then 1 else f();" The register containing x has to be pushed before we call f but not before 1. If the then-branch is most frequently taken we don't want to incur extra cost by pushing x on that branch as well. There are two disadvantages of trying to reload registers. The first is that we may have to spill other registers as we do it and end up thrashing around trying to get the values into the correct registers. The other is that if we have to push the registers anyway we've incurred extra cost. The current approach is to move values to the stack. *) let fun mustPush s = case (pstackEntry table s, pStackEntry save s) of (StackEntry {ent = Stack _, ...}, StackEntry {ent = Stack _, ...}) => false (* both on stack *) | (StackEntry _, StackEntry {ent = Stack _, ...}) => true (* Saved value is on stack but current value isn't. *) | _ => false in (* Pushing one entry may result in others being pushed if they have a lower "destStack". *) pushRegisters table cvec allRegisters mustPush false end; (* Third pass: Load any entry which is in a register in the saved state and ensure that values in registers in the current state are moved into the same register as before. *) let (* Put the table entry in a specified register and make it a register entry. *) fun loadToReg (s, prefReg, tabEnt, tabCache, tabUses, tabDest) = let val dReg = if prefReg regEq regStackPtr then (* No preference. *) let val reg = getAnyRegister (table, cvec); in loadPstackEntry table s reg cvec; reg end else (* Put it in the preferred register. If it's already there we need to increment the use count because we will decrement it in "removeEntry". *) if (case tabEnt of Register reg => reg regEq prefReg | _ => false) orelse tabCache regEq prefReg (* Already there. *) then (addRegUse (table, prefReg); prefReg) (* Already there. *) else ( getRegister (table, cvec, prefReg); loadPstackEntry table s prefReg cvec; prefReg ) in (* loadPstackEntry will have decremented the use count and may have completely removed the entry. If it hasn't we need to remove it before we replace it with the loaded register. If we didn't call loadPstackEntry (because we already had the value in the correct register) we have to call removeEntry to decrement the register use count (we incremented it above) and so restore it to the original value. *) case (pstackEntry table s) of NoStackEntry => () | StackEntry _ => removeEntry table s false ; stretchUpdate (pstack, getIndex s, makeStackEntry (Register dReg) regNone tabUses tabDest) end (* loadToReg *) fun loadEntries s = case (pstackEntry table s, pStackEntry save s) of (StackEntry {ent = Stack _, ...}, _) => (* If it's in the stack we don't try reloading it. *) () | (StackEntry {ent = tabEnt, cache, uses, destStack, ...}, StackEntry {ent = Register savedReg, ...}) => loadToReg(s, savedReg, tabEnt, cache, uses, destStack) | (StackEntry{ent = tabEnt as Direct{base = tabBase, offset = tabOffset}, cache = tabCache, uses, destStack, ...}, StackEntry{ent = Direct{base = saveBase, offset = saveOffset}, cache = savedCache, ...}) => ( if tabOffset <> saveOffset then raise InternalError "merge: mismatched offsets" else (); (* If the base registers are different (which might happen if the original reg was required) we need to load this entry. We will probably also need to do a reverse merge and load the corresponding entry in the saved state. *) if tabBase regNeq saveBase then let val prefReg = if savedCache regNeq regNone then savedCache else if tabCache regNeq regNone then tabCache else regStackPtr; (* No preference. *) in loadToReg (s, prefReg, tabEnt, tabCache, uses, destStack) end else () ) | _ => () in for (indDownto (pstackVal table indexMinus 1) first) loadEntries end; (* Final pass: Check to see if we need to do a "reverse merge" i.e. operations that have to be done on the saved state before we can finally merge. Also flush mismatched items from the cache. *) let fun checkEntries s = case (pstackEntry table s, pStackEntry save s) of (StackEntry {uses = tabUses, cache = tabCache, ent = tabEnt, destStack = tabDest}, StackEntry {uses = saveUses, cache = saveCache, ent = saveEnt, destStack = saveDest}) => let fun flushCache () = if tabCache regNeq regNone andalso tabCache regNeq saveCache then ( free (regset table) tabCache; stretchUpdate (pstack, getIndex s, makeStackEntry tabEnt regNone tabUses tabDest) ) else () in case tabEnt of Register tabReg => ( (* It's fine if the saved value was cached in that register. *) if saveCache regEq tabReg then () else case saveEnt of Register saveReg => (* We should have moved these into the same register. It's possible it got moved again as a result of loading something else. *) if tabReg regNeq saveReg then needOtherWay := true else () | Stack _ => (* We should have pushed it in the second pass. *) raise InternalError "merge: unpushed entry" | _ => (* Maybe a Direct entry which has to be loaded in a reverse merge. *) needOtherWay := true ) | Literal w => ( case saveEnt of Literal _ => flushCache() | _ => raise InternalError "Literal mismatch" ) | CodeRef c => ( case saveEnt of CodeRef _ => flushCache() | _ => raise InternalError "Coderef mismatch" ) | Direct {base = tabBase, ...} => ( (* As with register entries these should have been merged but might have diverged again. *) if saveCache regEq tabCache then () else case saveEnt of Direct{base=saveBase, ...} => if tabBase regEq saveBase then flushCache() (* Ok but must flush cache. *) else needOtherWay := true | _ => raise InternalError "merge: mismatched Direct" ) | Stack tabIndex => ( case saveEnt of Stack saveIndex => ( (* Consistency check. *) if tabIndex = saveIndex then () else raise InternalError "merge: mismatched stack entries"; flushCache() ) | _ => (* Need to push this in a reverse merge. *) needOtherWay := true ) | Container _ => ( case saveEnt of Container _ => () | _ => raise InternalError "merge: mismatched Container" ) end | _ => () in for (indDownto (pstackVal table indexMinus 1) first) checkEntries end; (* Last of all, try to align the stack. If the current stack pointer is greater than the saved value we must have live values on the stack and have to do a reverse merge. If the saved stack pointer was greater than the current but otherwise everything is fine we just push some dummy values rather than doing a reverse merge. I may change this later. *) if realStackPtr save < realstackVal table then needOtherWay := true else (); if ! needOtherWay then () else while realStackPtr save > realstackVal table do (* Have to push something in order to align the stack. *) if pushAnyEntryAtCurrentSP(table, cvec) then () else (* Push a register just to align the stack. It would be better to push a register that wasn't currently saved but this will do for the moment. *) ( genPush (regN 0, cvec); realstackptr table := realstackVal table + 1 ); (* Push any result. *) let val result = case currentResult of MergeIndex _ => MergeIndex(pushReg (table, topReg)) | NoMerge => NoMerge in if pstackTrace then printStack table "mergeState" (traceContext cvec) else (); (!needOtherWay, result) end end end handle SML90.Interrupt => raise SML90.Interrupt | e => ( printStack table "mergeState" (traceContext cvec); printState printStream save "saved state"; raise e ); (* Fix up a label after an unconditional branch. *) fun fixup (lab, table, cvec) : unit = if not (branchedVal table) then raise InternalError "Not branched" else if isEmptyLabel lab then () else ( setState (state lab, table, cvec, NoMerge, pstackVal table, false); branched table := false; exited table := false; cFixup (labs lab, cvec) ); local (* Fix up a label. If this follows an unconditional branch we replace the existing state with the saved state, otherwise we have to merge in. *) fun mergeLab (lab, table, cvec, currentResult: mergeResult, mark) : mergeResult = if isEmptyLabel lab then currentResult else if ! (branched table) then let val newResult = setState (state lab, table, cvec, result lab, newMark mark, true); in branched table := false; exited table := false; cFixup (labs lab, cvec); newResult end else let val (otherWay, mergeRes) = mergeState (state lab, result lab, table, currentResult, cvec, mark); in (* We can generate code before we fix up the label, but if we want to add code to the other arm we have to put in an unconditional branch and make the changes after it. *) if otherWay then let (* Have to jump round to get the states the same. *) val lab1 = unconditionalBranch (mergeRes, table, cvec); val newResult = setState (state lab, table, cvec, result lab, newMark mark, true) in exited table := false; branched table := false; cFixup (labs lab, cvec); mergeLab (lab1, table, cvec, newResult, mark) (* Merge the other way. *) end else (cFixup (labs lab, cvec); mergeRes) end; in (* Fix up a label. If this follows an unconditional branch we replace the existing state with the saved state, otherwise we have to merge in. *) fun merge (lab, table, cvec, carry, mark) : mergeResult = let val res = mergeLab (lab, table, cvec, carry, mark); in (* Reset the marker even if we have not actually done any merging. *) unmarkStack(table, mark); res end; (* Fix up a list of labels, using the same stack mark *) fun mergeList (labs, table, cvec, carry, mark) : mergeResult = let fun mergeLabs (l, carry) = mergeLab (l, table, cvec, carry, mark) val mergeRes = List.foldl mergeLabs carry labs in unmarkStack(table, mark); mergeRes end; end; type handler = { lab: handlerLab, oldps: stackIndex }; (* Push the address of a handler. *) fun pushAddress (table, cvec, offset) : handler = let (* This is just after a mark. *) val reg = getAnyRegister(table, cvec) val oldps = pstackVal table (* Load the address of the handler into a register. *) val handlerLab = loadHandlerAddress(reg, cvec); val regEntry = pushReg(table, reg) (* Push it onto the stack at the specific offset. *) val pushedEntry = pushValueToStack (cvec, table, regEntry, offset); in (* Remove the pstack entry because we don't want it. *) removeStackEntry(table, pushedEntry); {lab = handlerLab, oldps = oldps} end; (* Fixup the address at the start of a handler. *) fun fixupH ({lab, oldps}, oldsp, table, cvec) : unit = ( clearCache table; (* Don't know the registers here. *) realstackptr table := oldsp; exited table := false; branched table := false; (* Remove any entries above the old pstack pointer. If the expression whose exceptions we are handling contained static-link functions there may be entries whose use-counts have not gone to zero. *) for (indDownto (pstackVal table indexMinus 1) oldps) (fn (s: stackIndex) => removeEntry table s false); cFixupH (lab, cvec) ); (* Generate a binary operation. *) fun binaryOp (arg1, arg2, instr, revinstr, table as Ttab{pstackTrace, ...}, cvec, hint) : stackIndex = let (* If the operand is a short constant we don't need to put it in a register. *) val (_,{ent = firstEnt, ...}) = pstackRealEntry table arg1; val (_,{ent = secondEnt,...}) = pstackRealEntry table arg2; fun genBinaryIR lit = let val (initialReg2, initialReg2Loc) = loadEntry (cvec, table, arg2, false); (* Lock the register to make sure that we don't accidentally reuse it for the result. *) val U : unit = lockRegister (table, initialReg2); (* Get a result register. It's a shame that if the value is already in the desired result register, then we have to choose a different register for the result. There are two reasons for this: (1) The i386 code generator can't share argument and result registers. (2) Even for the other code-generators, we have a problem because we requested non-exclusive use of the argument, so we can't zap it with the instruction we're about to execute, because its use-count might be greater than 1. One day I'll come back and improve this code further. What we want to do is to reserve the result register first, then load the argument. Unfortunately, this doesn't quite work - if the value is cached in the result register, this code will move it out, which we don't want (unless there's more than a single use required). I guess I'll need to write another low-level register allocation function. SPF 17/2/97 Current attempt: load the argument first, but try to resuse this register for the result if it's safe to do so. This is still not a perfect approach, but it should generate better code than the previous version. SPF 6/3/97 *) val (arg2Reg, arg2RegLoc, resReg) : reg * stackIndex * reg = case hint of NoHint => (initialReg2, initialReg2Loc, getAnyRegister (table, cvec)) | UseReg prefReg => if prefReg regEq initialReg2 then if canShareRegs then let (* We WANT to reuse the argument register for the result *) val U : unit = unlockRegister (table, initialReg2); val (arg2Reg, arg2RegLoc) = loadEntry (cvec, table, initialReg2Loc, true); val U : unit = addRegUse (table, arg2Reg); (* For use as result reg. *) val U : unit = lockRegister (table, arg2Reg); in (arg2Reg, arg2RegLoc, arg2Reg) end else (initialReg2, initialReg2Loc, getAnyRegister (table, cvec)) else let val U : unit = getRegister (table, cvec, prefReg); in (initialReg2, initialReg2Loc, prefReg) end; (* Generate the code. Since we've reversed the operation *) (* we have to use the reverse instruction. *) val U : unit = genRI (revinstr, arg2Reg, lit, resReg, cvec); (* Push the result onto the stack. *) val rreg = pushReg (table, resReg); val U : unit = unlockRegister (table, arg2Reg); in (* Remove the argument register. *) incrUseCount (table, arg2RegLoc, ~1); incrUseCount (table, arg1, ~1); rreg end; fun genBinaryRI lit = let val (initialReg1, initialReg1Loc) = loadEntry (cvec, table, arg1, false); val U : unit = lockRegister (table, initialReg1); val (arg1Reg, arg1RegLoc, resReg) : reg * stackIndex * reg = case hint of NoHint => (initialReg1, initialReg1Loc, getAnyRegister (table, cvec)) | UseReg prefReg => if prefReg regEq initialReg1 then if canShareRegs then let (* We WANT to reuse the argument register for the result *) val U : unit = unlockRegister (table, initialReg1); val (arg1Reg, arg1RegLoc) = loadEntry (cvec, table, initialReg1Loc, true); val U : unit = addRegUse (table, arg1Reg); (* For use as result reg. *) val U : unit = lockRegister (table, arg1Reg); in (arg1Reg, arg1RegLoc, arg1Reg) end else (initialReg1, initialReg1Loc, getAnyRegister (table, cvec)) else let val U : unit = getRegister (table, cvec, prefReg); in (initialReg1, initialReg1Loc, prefReg) end; val U : unit = genRI (instr, arg1Reg, lit, resReg, cvec); val rreg = pushReg (table, resReg); val U : unit = unlockRegister (table, arg1Reg); in incrUseCount (table, arg1RegLoc, ~1); incrUseCount (table, arg2, ~1); rreg end; fun genBinaryRR () = let val (initialReg1, initialReg1Loc) = loadEntry (cvec, table, arg1, false); val U : unit = lockRegister (table, initialReg1); val (initialReg2, initialReg2Loc) = loadEntry (cvec, table, arg2, false); val U : unit = lockRegister (table, initialReg2); (* We could improve this by considering what happens if arg1Reg and arg2Reg both share with prefReg, but that's getting too obscure to be worthe considering, and would require the construction of new low-level code, which I want to avoid. Note that even in the current code, initialReg1 = prefReg does NOT imply that arg1Reg = prefReg, because we might have needed to copy the value to another register if its use-count was more than 1. SPF 6/3/97 *) val (arg1Reg, arg1RegLoc, arg2Reg, arg2RegLoc, resReg) : reg * stackIndex * reg * stackIndex * reg = case hint of NoHint => (initialReg1, initialReg1Loc, initialReg2, initialReg2Loc, getAnyRegister (table, cvec)) | UseReg prefReg => if prefReg regEq initialReg1 then if canShareRegs then let (* We WANT to reuse the argument register for the result. *) val U : unit = unlockRegister (table, initialReg1); val (arg1Reg, arg1RegLoc) = loadEntry (cvec, table, initialReg1Loc, true); val U : unit = addRegUse (table, arg1Reg); (* For use as result reg. *) val U : unit = lockRegister (table, arg1Reg); in (arg1Reg, arg1RegLoc, initialReg2, initialReg2Loc, arg1Reg) end else (initialReg1, initialReg1Loc, initialReg2, initialReg2Loc, getAnyRegister (table, cvec)) else if prefReg regEq initialReg2 then if canShareRegs then let (* We WANT to reuse the argument register for the result *) val U : unit = unlockRegister (table, initialReg2); val (arg2Reg, arg2RegLoc) = loadEntry (cvec, table, initialReg2Loc, true); val U : unit = addRegUse (table, arg2Reg); (* For use as result reg. *) val U : unit = lockRegister (table, arg2Reg); in (initialReg1, initialReg1Loc, arg2Reg, arg2RegLoc, arg2Reg) end else (initialReg1, initialReg1Loc, initialReg2, initialReg2Loc, getAnyRegister (table, cvec)) else let val U : unit = getRegister (table, cvec, prefReg); in (initialReg1, initialReg1Loc, initialReg2, initialReg2Loc, prefReg) end; val U = genRR (instr, arg1Reg, arg2Reg, resReg, cvec); val rreg = pushReg (table, resReg); val U : unit = unlockRegister (table, arg1Reg); val U : unit = unlockRegister (table, arg2Reg); in incrUseCount (table, arg2RegLoc, ~1); (* Remove the register entries. *) incrUseCount (table, arg1RegLoc, ~1); rreg end; val result : stackIndex = (* If it is a constant we have to check that it is in the range *) (* for the instruction we want to use. *) case (firstEnt,secondEnt) of (Literal lit1, Literal lit2) => (* optimisation should have already dealt with this? *) if instrIsRI (revinstr, lit1) then genBinaryIR lit1 else if instrIsRI (instr, lit2) then genBinaryRI lit2 else genBinaryRR () | (Literal lit1, _) => if instrIsRI (revinstr, lit1) then genBinaryIR lit1 else genBinaryRR () | (_,Literal lit2) => if instrIsRI (instr, lit2) then genBinaryRI lit2 else genBinaryRR () | (_,_) => genBinaryRR (); val U : unit = if pstackTrace then printStack table "binaryOp" "" else (); in result end; fun assignOp (addr: stackIndex, offset: stackIndex, value: stackIndex, width:storeWidth, table: ttab, cvec: code) = let val (_,{ent = offsetEnt,...}) = pstackRealEntry table offset and (_,{ent = valueEnt,...}) = pstackRealEntry table value val (addrReg, addrEntry) = loadEntry (cvec, table, addr, false) (* This register must be locked so that we don't reuse it for the index or value. *) val U : unit = lockRegister (table, addrReg); (* The values are indexes but if we use a constant offset it must be in bytes. *) val unitSize = case width of STORE_WORD => wordSize | STORE_BYTE => 1 fun storeViaRegister offset = let val (valReg, regEntry) = loadEntry (cvec, table, value, false); in genStore (valReg, offset, addrReg, width, regNone, cvec); removeStackEntry(table, regEntry) (* Remove value entry. *) end; fun storeIndexedViaRegister () = let val (indexReg, indexRegEntry) = loadEntry (cvec, table, offset, false); val U : unit = lockRegister (table, indexReg); val (valReg, regEntry) = loadEntry (cvec, table, value, false); in genStore (valReg, 0, addrReg, width, indexReg, cvec); removeStackEntry(table, regEntry); (* Remove value entry. *) unlockRegister (table, indexReg); (* Release the index register. *) removeStackEntry(table, indexRegEntry) end in case (offsetEnt, valueEnt) of (Literal litOffset, Literal litValue) => (* Constant offset and constant value to be assigned. *) let val offsetInt = Word.toInt (toShort litOffset) * unitSize in if isStoreI(litValue, width, false) then ( genStoreI(litValue, offsetInt, addrReg, width, regNone, cvec); (* Remove the entry for the value. *) removeStackEntry(table, value) ) else storeViaRegister offsetInt; (* Remove the index. *) removeStackEntry(table, offset) end | (Literal litOffset, _) => let val offsetInt = Word.toInt (toShort litOffset) * unitSize in (* Constant offset but general value to be assigned. *) storeViaRegister offsetInt; (* Remove the index. *) removeStackEntry(table, offset) end | (_, Literal litValue) => if isStoreI(litValue, STORE_WORD, true) then (* Constant value but index value in register. *) let val (indexReg, indexRegEntry) = loadEntry (cvec, table, offset, false) in genStoreI(litValue, 0, addrReg, width, indexReg, cvec); (* Remove the entry for the value. *) removeStackEntry(table, value); (* Remove the index. *) removeStackEntry(table, indexRegEntry) end else storeIndexedViaRegister () | _ => storeIndexedViaRegister () ; (* Release the base register. *) unlockRegister (table, addrReg); removeStackEntry(table, addrEntry) end (* Generate a binary compare and jump operation. *) fun compareAndBranch (arg1, arg2, t, revt, table as Ttab{pstackTrace, ...}, cvec) : labels = let (* val U : unit = loadDirectEntries table cvec; *) val (_,{ent = firstEnt,...}) = pstackRealEntry table arg1; val (_,{ent = secondEnt,...}) = pstackRealEntry table arg2; fun genCompIR test lit = let val (arg2Reg, arg2RegLoc) = loadEntry (cvec, table, arg2, false); in (* Remove the register entry from the stack. *) incrUseCount (table, arg2RegLoc, ~1); incrUseCount (table, arg1, ~1); (* Generate the code. We have reversed it - Use the reversed test. *) compareAndBranchRI (arg2Reg, lit, test, cvec) end; fun genCompRI test lit = let val (arg1Reg, arg1RegLoc) = loadEntry (cvec, table, arg1, false); in incrUseCount (table, arg1RegLoc, ~1); incrUseCount (table, arg2, ~1); compareAndBranchRI (arg1Reg, lit, test, cvec) end; fun genCompRR test = let val (arg1Reg, arg1RegLoc) = loadEntry (cvec, table, arg1, false); val U : unit = lockRegister (table, arg1Reg); val (arg2Reg, arg2RegLoc) = loadEntry (cvec, table, arg2, false); val U : unit = unlockRegister (table, arg1Reg); in (* Remove the register entries. *) incrUseCount (table, arg1RegLoc, ~1); incrUseCount (table, arg2RegLoc, ~1); compareAndBranchRR (arg1Reg, arg2Reg, test, cvec) end; val lab = case (firstEnt, secondEnt) of (Literal lit1, Literal lit2) => if isCompRI (revt, lit1) then genCompIR revt lit1 else if isCompRI (t, lit2) then genCompRI t lit2 else genCompRR t | (Literal lit1, _) => if isCompRI (revt, lit1) then genCompIR revt lit1 else genCompRR t | (_, Literal lit2) => if isCompRI (t, lit2) then genCompRI t lit2 else genCompRR t | (_, _) => genCompRR t in if pstackTrace then printStack table "compareAndBranch" "" else (); (* Package the label up with the state. *) makeLabels NoMerge lab (saveState (table, cvec)) end (* Tail recursive jump to a function. *) fun jumpToCode(codeAddr, isIndirect, returnReg, transtable, cvec) = let val (_, {ent, ...}) = pstackRealEntry transtable codeAddr in case ent of Literal lit => jumpToFunction(ConstantFun(lit, isIndirect), returnReg, cvec) | CodeRef code => if isIndirect then raise InternalError "jumpToCode: indirect call to codeRef" else jumpToFunction(CodeFun code, returnReg, cvec) | Register reg => (* Should only be the closure register and only in the indirect case. *) if isIndirect andalso reg regEq regClosure then jumpToFunction(FullCall, returnReg, cvec) else raise InternalError "jumpToCode: Not indirection through closure reg" | _ => (* Anything else shouldn't happen. *) raise InternalError "jumpToCode: Not a constant or register"; incrUseCount (transtable, codeAddr, ~1) end; (* Call a function. *) fun callCode(codeAddr, isIndirect, transtable, cvec) = let val (_, {ent, ...}) = pstackRealEntry transtable codeAddr in case ent of Literal lit => callFunction(ConstantFun(lit, isIndirect), cvec) | CodeRef code => if isIndirect then raise InternalError "callCode: indirect call to codeRef" else callFunction(CodeFun code, cvec) | Register reg => (* Should only be the closure register and only in the indirect case. *) if isIndirect andalso reg regEq regClosure then callFunction(FullCall, cvec) else raise InternalError "callCode: Not indirection through closure reg" | _ => (* Anything else shouldn't happen. *) raise InternalError "callCode: Not a constant or register"; incrUseCount (transtable, codeAddr, ~1) end; fun startCase (table, cvec, state) : addrs = ( setState (state, table, cvec, NoMerge, pstackVal table, false); exited table := false; branched table := false; ic cvec ); (* These are exported as read-only. *) val maxstack = maxstackVal; val realstackptr = realstackVal; val haveExited = exitedVal (* This is called when we have either made a tail-recursive call, returned from a function or raised an exception. *) fun exiting table = ( branched table := true; exited table := true ) val allRegisters = allRegisters datatype argdest = ArgToRegister of reg | ArgToStack of int (* Get the destination for the argument of a loop instruction. This finds out where the argument was loaded at the start of the loop so that it can be put back there at the end. *) fun getLoopDestinations(indices, transtable) = let fun getLoopDest entry = case pstackEntry transtable entry of NoStackEntry => raise InternalError "getLoopDest: no entry" | StackEntry{ent = Stack index, ...} => ArgToStack index | StackEntry{ent = Register reg, ...} => ArgToRegister reg | _ => raise InternalError "getLoopDest: wrong entry type" in map getLoopDest indices end end; (* local for stackUnion datatype declaration *) end (* TRANSTAB *) end; (* let for body of TRANSTAB *) polyml.5.2.1/mlsource/MLCompiler/CodeTree/TransTab.ML0000644000175000017500000000201310313043350021256 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure TransTab = TRANS_TAB ( structure CODECONS = CodeCons structure DEBUG = Debug structure ARRAY = Array structure STRETCHARRAY = StretchArray structure ADDRESS = Address structure MISC = Misc ) polyml.5.2.1/mlsource/MLCompiler/CodeTree/ml_bind.ML0000644000175000017500000000221511003075354021156 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure CodeTree = CODETREE ( structure GCODE = GCode structure DEBUG = Debug structure PRETTYPRINTER = Boot.PrettyPrinter structure MISC = Boot.Misc structure STRETCHARRAY = StretchArray structure ADDRESS = Address structure STRUCTUREEQ = StructureEquality structure BASECODETREE = BaseCodeTree ); polyml.5.2.1/mlsource/BasisCompat.sml0000644000175000017500000000223210315770672016556 0ustar daviddavid(* BasisCompat: Include this to bootstrap the compiler with the old version of the basis library. Copyright (c) 2005 David C J Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* *) structure Array = struct open Array fun copy { src, dst, di } = Array.copy{src=src, dst=dst, di=di, si=0, len=NONE} end; structure TextIO = struct open TextIO fun inputLine f = case TextIO.inputLine f of "" => NONE | s => SOME s end; structure Substring = struct open Substring val full = all end; polyml.5.2.1/mlsource/BuildAll.sml0000644000175000017500000000214511003076226016031 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* Script to rebuild the compiler. *) PolyML.print_depth 0; PolyML.make "mlsource/MLCompiler/Boot"; PolyML.make "mlsource/MLCompiler"; (* Compile the prelude and basis in the new compiler. *) MLCompiler.use "mlsource/BuildBasis.sml"; (* This runs the new shell on top of the old one. *) MLCompiler.shell(); PolyML.rootFunction(); polyml.5.2.1/mlsource/BuildBasis.sml0000644000175000017500000000343110773147336016377 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited Modified David C.J. Matthews 2008 This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* Install initial conversion functions. These can be replaced later on. *) RunCall.addOverload Bootstrap.convString Bootstrap.convStringName; RunCall.addOverload Bootstrap.convInt "convInt"; RunCall.addOverload Bootstrap.convWord "convWord"; (* Build the main basis library. *) Bootstrap.use "basis/build.sml"; (* We've now set up the new name space so everything has to be compiled into that rather than the old space. *) PolyML.make "mlsource/extra/CInterface"; PolyML.use "mlsource/extra/CInterface/clean"; (* XWindows/Motif *) let val xcall: int*int->int*int = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows; (* See if the RTS supports the X GetTimeOfDay call. *) val isX = (xcall(30, 0); true) handle _ => false in if isX then ( PolyML.make "mlsource/extra/XWindows"; PolyML.make "mlsource/extra/Motif" ) else () end; PolyML.print_depth 100; (* Set the inline level to 40 which seems optimal. *) PolyML.Compiler.maxInlineSize := 40; polyml.5.2.1/mlsource/BuildExport.sml0000644000175000017500000000227111003113704016573 0ustar daviddavid(* Copyright (c) 2006-7 David C. J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* Compiler the compiler and export it as a portable file. The rest of the bootstrap process is then done when the portable file is imported. *) PolyML.print_depth 0; PolyML.make "mlsource/MLCompiler/Boot"; PolyML.make "mlsource/MLCompiler"; PolyML.shareCommonData MLCompiler.shell; PolyML.exportPortable("polytemp", fn () => (MLCompiler.shell(); OS.Process.exit OS.Process.success) handle _ => OS.Process.exit OS.Process.failure); polyml.5.2.1/mlsource/FromML90.sml0000644000175000017500000000061710313043330015641 0ustar daviddavid(* Extra declarations needed to bootstrap the old compiler. *) (* These are declared in General in the standard basis library which is opened at the top level. *) exception Subscript = Array.Subscript exception Size = Array.Size; exception Overflow = RunCall.Inner.Overflow; PolyML.use "mlsource/prelude/RuntimeCalls"; structure Vector = struct open Vector val fromList = vector end; polyml.5.2.1/mlsource/MiniBasis.sml0000644000175000017500000003065110313043330016213 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited and David C. J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* The compiler now makes use of the Standard Basis Library but the library can only be compiled in ML 97. This file contains a highly cut-down version of the basis library which will compile in ML 90 and allow the compiler to be bootstrapped. *) datatype 'a option = NONE | SOME of 'a local structure Fail = RunCall.Run_exception1 ( type ex_type = string; val ex_iden = RuntimeCalls.EXC_Fail ) in exception Fail = Fail.ex end; exception Subscript = Array.Subscript exception Size = Array.Size structure Vector = struct open Vector val fromList = vector end; structure Array = struct open Array local (* This relies on update and sub to do the bounds checking which isn't strictly correct. *) fun docopy(src, si, dst, di, len) = if len = 0 then () else ( update(dst, di, sub(src, si)); docopy(src, si+1, dst, di+1, len-1) ) in fun copy{src: 'a array, si: int, len=SOME l, dst: 'a array, di: int} = docopy(src, si, dst, di, l) | copy{src, si, len=NONE, dst, di} = docopy(src, si, dst, di, length src - si) end end; structure SML90 = struct exception Interrupt = Interrupt val std_out = std_out and output = output and chr = chr and ord = ord end; structure IO = struct exception Io = Io (* Actually not the same parameters. *) end structure TextIO = struct type instream = BasicIO.instream and outstream = BasicIO.outstream val openAppend: string -> outstream = ExtendedIO.open_append val openIn: string -> instream = BasicIO.open_in val openOut: string -> outstream = BasicIO.open_out val closeIn: instream -> unit = BasicIO.close_in val closeOut: outstream -> unit = BasicIO.close_out val flushOut: outstream -> unit = ExtendedIO.flush_out val inputLine = ExtendedIO.input_line fun canInput(strm, n) = if ExtendedIO.can_input(strm, n) then SOME n else NONE val output = BasicIO.output val stdIn = std_in and stdOut = std_out val endOfStream = end_of_stream fun lookahead strm = let val s = BasicIO.lookahead strm in if s = "" then NONE else SOME s end fun inputN(strm, n) = let val s = BasicIO.input(strm, n) val len = size s in if len = 0 then s else if len < n then s ^ inputN(strm, n-len) else s end fun input strm = BasicIO.input(strm, 100 (* Arbitrary number. *)) fun print s = (output(stdOut, s); flushOut stdOut) end structure StringCvt = struct datatype radix = BIN | OCT | DEC | HEX end; structure Int = struct val (* op quot: int * int -> int = RunCall.run_call2 POLY_SYS_adiv and *) op rem: int * int -> int = RunCall.run_call2 RuntimeCalls.POLY_SYS_amod local val ord0 = ord "0"; fun soi acc 0 = acc | soi acc n = soi (chr (n mod 10 + ord0) ^ acc) (n div 10); in fun toString 0 = "0" | toString n = if n < 0 then "~" ^ soi "" (~n) else soi "" n end local val ord0 = ord "0"; val ord9 = ord "9"; fun ioc c = let val ordc = ord c in if ordc < ord0 orelse ordc > ord9 then NONE else SOME(ordc - ord0) end; fun convert [] s n = if s then SOME(~n) else SOME n | convert (H::T) s n = case ioc H of NONE => NONE | SOME i => convert T s (n * 10 + i); in (* This is a cut-down version which works in the cases we need. *) fun fromString s = ( case explode s of [] => NONE | ["~"] => NONE | "~"::t => convert t true 0 | t => convert t false 0 ) end fun fmt StringCvt.HEX n = let fun hex n = let val d = n mod 16; val r = n div 16; val c = chr (if d < 10 then d + ord "0" else d - 10 + ord "a"); in if r = 0 then c else hex r ^ c end; in if n < 0 then "~0x" ^ hex (~n) else "0x" ^ hex n end | fmt StringCvt.DEC n = toString n | fmt _ _ = raise Fail "Not implemented" fun max(a: int, b: int) = if a > b then a else b and min(a: int, b: int) = if a < b then a else b end; structure String = struct (* N.B. The types of sub and implode are not the same as those in basis library version of String. *) local val string_sub = RunCall.run_call2 RuntimeCalls.POLY_SYS_string_sub in val sub : string*int->string = fn (s, i) => string_sub(s, i+1) end fun str c = c; local val ord0 = ord "0"; fun soi acc 0 = acc | soi acc n = soi (chr (n mod 10 + ord0) ^ acc) (n div 10); fun escape (c : string) : string = case c of "\"" => "\\\"" | "\\" => "\\\\" | "\n" => "\\n" | "\t" => "\\t" | _ => let val i : int = ord c in if i < 32 then "\\^" ^ chr (i + 64) else if i >= 127 then "\\" ^ soi "" i (* always 3 digits since 127 <= i < 256 *) else c end in fun toString (s: string) : string = implode (map escape (explode s)) end val concat: string list -> string = implode (* At this stage we define it to take a string list. *) val implode: string list -> string = implode fun substring(s: string, i: int, n: int): string = RunCall.run_call3 RuntimeCalls.POLY_SYS_substring (s,i+1,n) ; end; structure Char = struct val ord = ord val chr = chr fun isUpper (ch: string) = let val ch' = ord ch in ch' >= ord "A" andalso ch' <= ord "Z" end fun isLower (ch: string) = let val ch' = ord ch in ch' >= ord "a" andalso ch' <= ord "z" end local structure Conversion = RunCall.Run_exception1 ( type ex_type = string; val ex_iden = RuntimeCalls.EXC_conversion ); exception Conversion = Conversion.ex; fun numToString i = if i < 10 then chr(ord("0") + i) else numToString(i div 10) ^ chr(ord("0") + i) fun isWhiteSpace (ch:int) = case ch of 32 => true (* space *) | 10 => true (* newline *) | 9 => true (* tab *) | 12 => true (* formfeed *) | _ => false; fun processEscape getc src = case getc src of NONE => raise Conversion "Unexpected end of string" | SOME (ch, next) => if ord ch < 32 orelse ord ch >= 127 then raise Conversion ("Invalid character (code " ^ numToString(ord ch) ^ ") found") else if ch = chr 92 (* Backslash *) then case getc next of NONE => raise Conversion "Invalid escape sequence" | SOME (ch', next') => if ch' = "a" then (chr 7, next') else if ch' = "b" then (chr 8, next') else if ch' = "t" then (chr 9, next') else if ch' = "n" then (chr 10, next') else if ch' = "v" then (chr 11, next') else if ch' = "f" then (chr 12, next') else if ch' = "r" then (chr 13, next') else if ch' = chr 34 (* double quote *) then (chr 34, next') else if ch' = chr 92 (* backslash *) then (chr 92, next') else if ch' = "^" (* Escape character *) then ( case getc next' of NONE => raise Conversion "Invalid escape sequence" | SOME(ch'', next'') => if ord ch'' < 64 orelse ord ch'' > 95 then raise Conversion "Invalid escape sequence" else (chr(ord ch'' - 64), next'') ) else if ch' = "0" orelse ch' = "1" orelse ch' = "2" (* *) then case getc next' of NONE => raise Conversion "Invalid escape sequence" | SOME(ch2, next1) => case getc next1 of NONE => raise Conversion "Invalid escape sequence" | SOME(ch3, next'') => if ord ch2 < ord "0" orelse ord ch2 > ord "9" orelse ord ch3 < ord "0" orelse ord ch3 > ord "9" then raise Conversion "Invalid escape sequence" else let val code = (ord ch' - ord "0") * 100 + (ord ch2 - ord "0") * 10 + (ord ch3 - ord "0") in if code > 255 then raise Conversion "Invalid escape sequence" else (chr code, next'') end (* else if ch' = "u" (* Hexadecimal escape. *) then .... :: processEscape next' *) else if isWhiteSpace(ord ch') (* Skip white space *) then let fun skipSpace n = case getc n of NONE => raise Conversion "Invalid escape sequence" | SOME(ch, next) => if isWhiteSpace (ord ch) then skipSpace next else (ch, next) val (ch'', next'') = skipSpace next' in if ch'' <> chr 92 then raise Conversion "Invalid escape sequence" else processEscape getc next'' end else raise Conversion "Invalid escape sequence" else (ch, next) in fun scan getc src = ( SOME(processEscape getc src) ) handle _ => NONE end fun toString ch = String.toString(String.str ch) end; val concat = implode; structure Time = struct type time = int exception Time val zeroTime: time = 0 fun now () : time = RunCall.run_call2 RuntimeCalls.POLY_SYS_timing_dispatch (1, 0) handle _ => raise Time fun fmt (n: int) (t: time) = Int.toString (n div 10) ^ "." ^ Int.toString(n mod 10); end structure OS = struct type syserror = int exception SysErr of (string * syserror option) structure Process = struct type status = int val success = 0 fun exit (n: int) : unit = RunCall.run_call1 RuntimeCalls.POLY_SYS_exit n; fun system (command: string) : int = let val (inStream,outStream) = ExtendedIO.execute command; fun printString s = output(std_out, s) in close_out outStream; (* Read until end-of-file, which should synchronise with the command. *) while not (end_of_stream inStream) do printString (input (inStream,1)); close_in inStream; 0 end end structure FileSys = struct local val doIo: int*unit*string -> bool = RunCall.run_call3 RuntimeCalls.POLY_SYS_io_dispatch in fun isDir s = doIo(57, (), s) end local val doIo: int*unit*string -> Time.time = RunCall.run_call3 RuntimeCalls.POLY_SYS_io_dispatch in (* Get file modification time. *) fun modTime s = doIo(61, (), s) end end end; structure Date = struct type date = int fun fromTimeLocal t = t fun toString t = let val stringOfTime: int -> string = RunCall.run_call1 RuntimeCalls.POLY_SYS_repr_time; val st = stringOfTime t val len = size st in (* Remove the trailing newline. *) String.substring(st, 0, len-1) end end structure Timer = struct type cpu_timer = int*int local val doCall: int*unit -> Time.time = RunCall.run_call2 RuntimeCalls.POLY_SYS_timing_dispatch fun getUserTime() = doCall(7, ()) and getSysTime() = doCall(8, ()) in fun startCPUTimer () = (getUserTime(), getSysTime()) val checkCPUTimer : cpu_timer -> {usr : Time.time, sys : Time.time} = fn (u, s) => { sys=getSysTime()-s, usr=getSysTime()-u } end end structure List = struct exception Empty fun hd (a::_) = a | hd _ = raise Empty and tl (_::a) = a | tl _ = raise Empty fun null [] = true | null (_::_) = false fun nth([], _) = raise Subscript | nth(a::_, 0) = a | nth(_::l, i) = nth(l, i-1) fun exists f [] = false | exists f (a::b) = if f a then true else exists f b fun length l = let (* Tail-recursive function. *) fun len [] i = i | len (_::l) i = len l (i+1) in len l 0 end fun foldl f b [] = b | foldl f b (x::y) = foldl f (f(x, b)) y fun app f [] = () | app f (h::t) = (f h; app f t) end; structure ListPair = struct fun unzip ((a, b) :: l) = let val (x, y) = unzip l in (a :: x, b :: y) end | unzip [] = ([], []) end; exception Empty = List.Empty val hd = List.hd val tl = List.tl val null = List.null val length = List.length exception Overflow = Sum; (* structure General = struct exception Fail of string end; *)polyml.5.2.1/mlsource/extra/0000755000175000017500000000000011100060555014741 5ustar daviddavidpolyml.5.2.1/mlsource/extra/CInterface/0000755000175000017500000000000011100060550016737 5ustar daviddavidpolyml.5.2.1/mlsource/extra/CInterface/Conversions/0000755000175000017500000000000011100060550021247 5ustar daviddavidpolyml.5.2.1/mlsource/extra/CInterface/Conversions/CONVERSIONS.ML0000644000175000017500000000515710735745717023355 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (********************************************************************** * Import Signatures **********************************************************************) signature ForeignExceptionSig_Import = sig val Foreign : string -> exn end; (********************************************************************** * Functor Definition **********************************************************************) functor CONVERSIONS ( structure LowerLevel : LowerLevelSig structure CallWithConv : CallWithConvSig structure ForeignException : ForeignExceptionSig_Import sharing type LowerLevel.vol = CallWithConv.vol sharing LowerLevel.Ctype = CallWithConv.Ctype ) : ConversionsSig = struct open LowerLevel; open LowerLevel.Ctype; open CallWithConv; open ForeignException; (* Generally we don't want to convert a unit value into a void except in the case when we're returning a void result from a callback. Just return zero in that case. *) val VOID = mkConversion (fn _ => ()) (fn () => toCint 0) Cvoid local fun int2bool 0 = false | int2bool _ = true fun bool2int false = 0 | bool2int true = 1 in val BOOL = mapConversion (int2bool,bool2int) INT; end fun ID x = x; val POINTER = mkConversion ID ID (Cpointer Cvoid) fun POINTERTO conv = let val (from,to,ctype) = breakConversion conv in mkConversion (from o deref) (address o to) (Cpointer ctype) end; (*** The conversion STRING' is Like STRING conversion, except when converting from C to ML, it also copes with NULL pointers. (However, the ML string created is identical to the ML string created when converting a pointer to a null.) ***) val STRING' = mkConversion (fn v => if fromCint v = 0 then "" else fromCstring v) toCstring (Cpointer Cchar); end (* struct *) polyml.5.2.1/mlsource/extra/CInterface/Conversions/ml_bind.ML0000644000175000017500000000172410313043361023117 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure Conversions = CONVERSIONS (structure LowerLevel = LowerLevel structure CallWithConv = CallWithConv structure ForeignException = ForeignException); polyml.5.2.1/mlsource/extra/CInterface/BehaviourRefs.ML0000644000175000017500000000273310313043360021747 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure BehaviourRefs : BehaviourRefsSig = struct (********************************************************************** * Couple of refs to control behaviour. **********************************************************************) (*** Quantity of creation info strored: If this is too big, space usage will increase causing excessive GC. At the moment, we can only recreate (reload) symbols, so most of the time this info is only used for debugging. ***) val max_volatile_creation_info_depth = ref 5; (*** If true, we print a message to inform the user that a symbol is being reloaded. This is probably only useful as debuging info. ***) val inform_about_symbol_reload = ref false; end; polyml.5.2.1/mlsource/extra/CInterface/BehaviourRefsSig.ML0000644000175000017500000000164310313043360022411 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) signature BehaviourRefsSig = sig val max_volatile_creation_info_depth : int ref; val inform_about_symbol_reload : bool ref; end; polyml.5.2.1/mlsource/extra/CInterface/CALL_WITH_CONV.ML0000644000175000017500000002334610313043360021401 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (********************************************************************** * Functor Definition. **********************************************************************) functor CALL_WITH_CONV (structure LowerLevel : LowerLevelSig) : CallWithConvSig = struct structure Ctype = LowerLevel.Ctype open LowerLevel open Ctype (* ... exception Never of string; fun never s = raise Never s; ... *) fun never s = raise Union.Never s; local open Union in (* now defined in Union ... val deVol = fn (Vol x) => x | _ => never "deVol"; val deChar = fn (Char x) => x | _ => never "deChar"; val deFloat = fn (Float x) => x | _ => never "deFloat"; val deDouble = fn (Double x) => x | _ => never "deDouble"; val deInt = fn (Int x) => x | _ => never "deInt"; val deShort = fn (Short x) => x | _ => never "deShort"; val deLong = fn (Long x) => x | _ => never "deLong"; val deString = fn (String x) => x | _ => never "deString"; ... *) abstype 'a Conversion= Conversion of (vol union -> 'a) * ('a -> (Ctype * vol) union) * Ctype unionChoice with infix @ infix @@ fun (x @ Conversion(_,to,_)) = In (to x) fun (Conversion(from,_,choice) @@ pap) = case (pap choice) of (union,[]) => from union | _ => never "@@" val ignore = chooseVol Cvoid fun want (Conversion(_,_,choice)) = Out choice; fun from (Conversion(fr,_,_)) x = fr x; (********************************************************************** * Special Conversion (efficient) **********************************************************************) val CHAR = Conversion (deChar, Char, chooseChar); val FLOAT = Conversion (deFloat, Float, chooseFloat); val DOUBLE = Conversion (deDouble, Double, chooseDouble); val INT = Conversion (deInt, Int, chooseInt); val SHORT = Conversion (deShort, Short, chooseShort); val LONG = Conversion (deLong, Long, chooseLong); val STRING = Conversion (deString, String, chooseString); val UINT = Conversion (deUint, Uint, chooseUint); (* Added DCJM 17/5/01. *) fun mapConversion (from',to') (Conversion(from,to,choice)) = Conversion (fn x => from' (from x), fn x => to (to' x), choice) fun mkConversion from to ctype = Conversion (fn v => if isVol v then from (deVol v) else never "mkConversion", fn x => Vol (ctype, to x), chooseVol ctype) val Cstring = Cpointer Cchar; fun ID x = x; (* ... fun breakConversion (Conversion(from,to,choice)) = let fun makeBreaker (fromSpecial,toSpecial,ctype,fromUnion,toUnion) = (fn vol => from (toUnion (fromSpecial vol)), fn x => toSpecial (fromUnion (to x)), ctype) in case choice of chooseVol ctype => makeBreaker (ID, ID, ctype, fn x => #2 (deVol x), Vol) | chooseChar => makeBreaker (fromCchar, toCchar, Cchar, deChar, Char) | chooseFloat => makeBreaker (fromCfloat, toCfloat, Cfloat, deFloat, Float) | chooseDouble => makeBreaker (fromCdouble, toCdouble, Cdouble, deDouble, Double) | chooseInt => makeBreaker (fromCint, toCint, Cint, deInt, Int) | chooseShort => makeBreaker (fromCshort, toCshort, Cshort, deShort, Short) | chooseLong => makeBreaker (fromClong, toClong, Clong, deLong, Long) | chooseString => makeBreaker (fromCstring, toCstring, Cstring, deString, String) end ... *) fun breakConversion (Conversion(from,to,choice)) = let fun makeBreaker (fromSpecial,toSpecial,ctype,fromUnion,toUnion) = (fn vol => from (toUnion (fromSpecial vol)), fn x => toSpecial (fromUnion (to x)), ctype) in if isChooseVol choice then makeBreaker (ID, ID, deChooseVol choice, fn x => #2 (deVol x), Vol) else if isChooseChar choice then makeBreaker (fromCchar, toCchar, Cchar, deChar, Char) else if isChooseFloat choice then makeBreaker (fromCfloat, toCfloat, Cfloat, deFloat, Float) else if isChooseDouble choice then makeBreaker (fromCdouble, toCdouble, Cdouble, deDouble, Double) else if isChooseInt choice then makeBreaker (fromCint, toCint, Cint, deInt, Int) else if isChooseShort choice then makeBreaker (fromCshort, toCshort, Cshort, deShort, Short) else if isChooseLong choice then makeBreaker (fromClong, toClong, Clong, deLong, Long) else if isChooseUint choice then makeBreaker (fromCuint, toCuint, Cuint, deUint, Uint) else (* ishooseString choice *) makeBreaker (fromCstring, toCstring, Cstring, deString, String) end end (* abstype *) end (* local open Union *) fun global sym conv () = (****** * Access to global constants. * Reads the value each time final unit is applied. ******) let val (from,_,_) = breakConversion conv in from (mapSym deref sym) end; fun setGlobal sym conv v = (****** * Set the value of a global constant to a new value. ******) let val (_,to,ctype) = breakConversion conv in assign ctype (mapSym deref sym) (to v) end; local fun call s = call_sym_and_convert s in fun call0 sym () RET () = RET @@ call sym [] fun call1 sym (A) RET (a) = RET @@ call sym [a@A] fun call2 sym (A,B) RET (a,b) = RET @@ call sym [a@A,b@B] fun call3 sym (A,B,C) RET (a,b,c) = RET @@ call sym [a@A,b@B,c@C] fun call4 sym (A,B,C,D) RET (a,b,c,d) = RET @@ call sym [a@A,b@B,c@C,d@D] fun call5 sym (A,B,C,D,E) RET (a,b,c,d,e) = RET @@ call sym [a@A,b@B,c@C,d@D,e@E] fun call6 sym (A,B,C,D,E,F) RET (a,b,c,d,e,f) = RET @@ call sym [a@A,b@B,c@C,d@D,e@E,f@F] fun call7 sym (A,B,C,D,E,F,G) RET (a,b,c,d,e,f,g) = RET @@ call sym [a@A,b@B,c@C,d@D,e@E,f@F,g@G] fun call8 sym (A,B,C,D,E,F,G,H) RET (a,b,c,d,e,f,g,h) = RET @@ call sym [a@A,b@B,c@C,d@D,e@E,f@F,g@G,h@H] fun call9 sym (A,B,C,D,E,F,G,H,I) RET (a,b,c,d,e,f,g,h,i) = RET @@ call sym [a@A,b@B,c@C,d@D,e@E,f@F,g@G,h@H,i@I] fun call10 sym (A,B,C,D,E,F,G,H,I,J) RET (a,b,c,d,e,f,g,h,i,j) = RET @@ call sym [a@A,b@B,c@C,d@D,e@E,f@F,g@G,h@H,i@I,j@J] fun call11 sym (A,B,C,D,E,F,G,H,I,J,K) RET (a,b,c,d,e,f,g,h,i,j,k) = RET @@ call sym [a@A,b@B,c@C,d@D,e@E,f@F,g@G,h@H,i@I,j@J,k@K] fun call12 sym (A,B,C,D,E,F,G,H,I,J,K,L) RET (a,b,c,d,e,f,g,h,i,j,k,l) = RET @@ call sym [a@A,b@B,c@C,d@D,e@E,f@F,g@G,h@H,i@I,j@J,k@K,l@L] fun call13 sym (A,B,C,D,E,F,G,H,I,J,K,L,M) RET (a,b,c,d,e,f,g,h,i,j,k,l,m) = RET @@ call sym [a@A,b@B,c@C,d@D,e@E,f@F,g@G,h@H,i@I,j@J,k@K,l@L,m@M] fun call14 sym (A,B,C,D,E,F,G,H,I,J,K,L,M,N) RET (a,b,c,d,e,f,g,h,i,j,k,l,m,n) = RET @@ call sym [a@A,b@B,c@C,d@D,e@E,f@F,g@G,h@H,i@I,j@J,k@K,l@L,m@M,n@N] fun call15 sym (A,B,C,D,E,F,G,H,I,J,K,L,M,N,O) RET (a,b,c,d,e,f,g,h,i,j,k,l,m,n,p) = RET @@ call sym [a@A,b@B,c@C,d@D,e@E,f@F,g@G,h@H,i@I,j@J,k@K,l@L,m@M,n@N,p@O] fun call1ret1 sym () (X) () = case call sym [ want X ] ignore of (_,[x]) => (from X x) | _ => never "call1ret1" fun call2ret1 sym (A) (X) (a) = case call sym [ a@A, want X ] ignore of (_,[x]) => (from X x) | _ => never "call2ret1" fun call2ret2 sym () (X,Y) () = case call sym [ want X, want Y ] ignore of (_,[x,y]) => (from X x, from Y y) | _ => never "call2ret2" fun call3ret1 sym (A,B) (X) (a,b) = case call sym [ a@A, b@B, want X ] ignore of (_,[x]) => (from X x) | _ => never "call3ret1" fun call3ret2 sym (A) (X,Y) (a) = case call sym [ a@A, want X, want Y ] ignore of (_,[x,y]) => (from X x, from Y y) | _ => never "call3ret2" fun call4ret1 sym (A,B,C) (X) (a,b,c) = case call sym [ a@A, b@B, c@C, want X ] ignore of (_,[x]) => (from X x) | _ => never "call4ret1" fun call4ret2 sym (A,B) (X,Y) (a,b) = case call sym [ a@A, b@B, want X, want Y ] ignore of (_,[x,y]) => (from X x, from Y y) | _ => never "call4ret2" fun call4ret3 sym (A) (X,Y,Z) (a) = case call sym [ a@A, want X, want Y, want Z ] ignore of (_,[x,y,z]) => (from X x, from Y y, from Z z) | _ => never "call4ret3" fun call5ret1 sym (A,B,C,D) (X) (a,b,c,d) = case call sym [ a@A, b@B, c@C, d@D, want X ] ignore of (_,[x]) => (from X x) | _ => never "call5ret1" fun call5ret2 sym (A,B,C) (X,Y) (a,b,c) = case call sym [ a@A, b@B, c@C, want X, want Y ] ignore of (_,[x,y]) => (from X x, from Y y) | _ => never "call5ret2" end (* local *) end (* struct *) polyml.5.2.1/mlsource/extra/CInterface/CINTERFACE.ML0000644000175000017500000000336610313043360020611 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) functor CINTERFACE (structure ForeignException : ForeignExceptionSig structure ForeignDebug : ForeignDebugSig structure LowerLevel : OrigLowerLevelSig structure CallWithConv : CallWithConvSig structure Struct : StructSig structure Conversions : ConversionsSig structure StructConversionals : StructConversionalsSig sharing LowerLevel.Ctype = CallWithConv.Ctype = Struct.Ctype sharing type LowerLevel.vol = CallWithConv.vol = Struct.vol = Conversions.vol sharing type LowerLevel.sym = CallWithConv.sym sharing type CallWithConv.Conversion = Conversions.Conversion = StructConversionals.Conversion ) : CInterfaceSig = struct open ForeignException open ForeignDebug open LowerLevel open LowerLevel.BehaviourRefs open LowerLevel.Ctype open CallWithConv open Struct open Conversions open StructConversionals end; polyml.5.2.1/mlsource/extra/CInterface/CInterfaceSig.ML0000644000175000017500000003024210506226530021653 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) signature CInterfaceSig = sig (********************************************************************** * ForeignException **********************************************************************) exception Foreign of string; (********************************************************************** * ForeignDebug **********************************************************************) val get_foreign_debug : unit -> int val set_foreign_debug : int -> unit (********************************************************************** * Ctype **********************************************************************) include CtypeSig (********************************************************************** * LowerLevel **********************************************************************) type vol val alloc : int -> Ctype -> vol val address : vol -> vol val deref : vol -> vol val offset : int -> Ctype -> vol -> vol val assign : Ctype -> vol -> vol -> unit val max_volatile_creation_info_depth : int ref; val inform_about_symbol_reload : bool ref; val fillCstring : vol -> string -> unit val toCstring : string -> vol val toCchar : char -> vol val toCdouble : real -> vol val toCfloat : real -> vol val toCint : int -> vol val toClong : int -> vol val toCshort : int -> vol val toCuint : int -> vol val toCbytes : Word8Vector.vector -> vol (* These take an argument type list, the result type and an ML function and create a C function value which can be passed to a C function. Functions with Pascal calling conventions are used for Windows callbacks. *) val toCfunction : Ctype list -> Ctype -> (vol list -> vol) -> vol val toPascalfunction : Ctype list -> Ctype -> (vol list -> vol) -> vol (* We don't currently provide the reverse although we could probably use the call_sym function. val fromCfunction : vol -> (Ctype * vol) list -> Ctype -> vol val fromPascalfunction : vol -> (Ctype * vol) list -> Ctype -> vol *) val fromCstring : vol -> string val fromCchar : vol -> char val fromCdouble : vol -> real val fromCfloat : vol -> real val fromCint : vol -> int val fromClong : vol -> int val fromCshort : vol -> int val fromCuint : vol -> int val fromCbytes : vol * int -> Word8Vector.vector type dylib type sym val load_lib : string -> dylib val load_sym : dylib -> string -> sym val get_sym : string -> string -> sym val set_libPath : dylib -> string -> unit val get_libPath : dylib -> string val call_sym : sym -> (Ctype * vol) list -> Ctype -> vol structure Union : UnionSig val call_sym_and_convert : sym -> (Ctype, vol) Union.directedArg list -> Ctype Union.unionChoice -> (vol Union.union * vol Union.union list) val volOfSym : sym -> vol val mapSym : (vol -> 'a) -> sym -> 'a (********************************************************************** * CallWithConv **********************************************************************) type 'a Conversion; val mapConversion : ('a -> 'b) * ('b -> 'a) -> 'a Conversion -> 'b Conversion val mkConversion : (vol -> 'a) -> ('a -> vol) -> Ctype -> 'a Conversion val breakConversion : 'a Conversion -> (vol -> 'a) * ('a -> vol) * Ctype val global : sym -> 'a Conversion -> unit -> 'a val setGlobal:sym -> 'a Conversion -> 'a -> unit val call0 : sym -> unit -> 'a Conversion -> unit -> 'a val call1 : sym -> 'a Conversion -> 'b Conversion -> 'a -> 'b val call2 : sym -> 'a Conversion * 'b Conversion -> 'c Conversion -> 'a * 'b -> 'c val call3 : sym -> 'a Conversion * 'b Conversion * 'c Conversion -> 'd Conversion -> 'a * 'b * 'c -> 'd val call4 : sym -> 'a Conversion * 'b Conversion * 'c Conversion * 'd Conversion -> 'e Conversion -> 'a * 'b * 'c * 'd -> 'e val call5 : sym -> 'a Conversion * 'b Conversion * 'c Conversion * 'd Conversion * 'e Conversion -> 'f Conversion -> 'a * 'b * 'c * 'd * 'e -> 'f val call6 : sym -> 'a Conversion * 'b Conversion * 'c Conversion * 'd Conversion * 'e Conversion * 'f Conversion -> 'g Conversion -> 'a * 'b * 'c * 'd * 'e * 'f -> 'g val call7 : sym -> 'a Conversion * 'b Conversion * 'c Conversion * 'd Conversion * 'e Conversion * 'f Conversion * 'g Conversion -> 'h Conversion -> 'a * 'b * 'c * 'd * 'e * 'f * 'g -> 'h val call8 : sym -> 'a Conversion * 'b Conversion * 'c Conversion * 'd Conversion * 'e Conversion * 'f Conversion * 'g Conversion * 'h Conversion -> 'i Conversion -> 'a * 'b * 'c * 'd * 'e * 'f * 'g * 'h -> 'i val call9 : sym -> 'a Conversion * 'b Conversion * 'c Conversion * 'd Conversion * 'e Conversion * 'f Conversion * 'g Conversion * 'h Conversion * 'i Conversion -> 'j Conversion -> 'a * 'b * 'c * 'd * 'e * 'f * 'g * 'h * 'i -> 'j val call10 : sym -> 'a Conversion * 'b Conversion * 'c Conversion * 'd Conversion * 'e Conversion * 'f Conversion * 'g Conversion * 'h Conversion * 'i Conversion * 'j Conversion -> 'k Conversion -> 'a * 'b * 'c * 'd * 'e * 'f * 'g * 'h * 'i * 'j -> 'k val call11 : sym -> 'a Conversion * 'b Conversion * 'c Conversion * 'd Conversion * 'e Conversion * 'f Conversion * 'g Conversion * 'h Conversion * 'i Conversion * 'j Conversion * 'k Conversion -> 'l Conversion -> 'a * 'b * 'c * 'd * 'e * 'f * 'g * 'h * 'i * 'j * 'k -> 'l val call12 : sym -> 'a Conversion * 'b Conversion * 'c Conversion * 'd Conversion * 'e Conversion * 'f Conversion * 'g Conversion * 'h Conversion * 'i Conversion * 'j Conversion * 'k Conversion * 'l Conversion -> 'm Conversion -> 'a * 'b * 'c * 'd * 'e * 'f * 'g * 'h * 'i * 'j * 'k * 'l -> 'm val call13 : sym -> 'a Conversion * 'b Conversion * 'c Conversion * 'd Conversion * 'e Conversion * 'f Conversion * 'g Conversion * 'h Conversion * 'i Conversion * 'j Conversion * 'k Conversion * 'l Conversion * 'm Conversion -> 'n Conversion -> 'a * 'b * 'c * 'd * 'e * 'f * 'g * 'h * 'i * 'j * 'k * 'l * 'm -> 'n val call14 : sym -> 'a Conversion * 'b Conversion * 'c Conversion * 'd Conversion * 'e Conversion * 'f Conversion * 'g Conversion * 'h Conversion * 'i Conversion * 'j Conversion * 'k Conversion * 'l Conversion * 'm Conversion * 'n Conversion -> 'p Conversion -> 'a * 'b * 'c * 'd * 'e * 'f * 'g * 'h * 'i * 'j * 'k * 'l * 'm * 'n -> 'p val call15 : sym -> 'a Conversion * 'b Conversion * 'c Conversion * 'd Conversion * 'e Conversion * 'f Conversion * 'g Conversion * 'h Conversion * 'i Conversion * 'j Conversion * 'k Conversion * 'l Conversion * 'm Conversion * 'n Conversion * 'p Conversion -> 'q Conversion -> 'a * 'b * 'c * 'd * 'e * 'f * 'g * 'h * 'i * 'j * 'k * 'l * 'm * 'n * 'p -> 'q val call1ret1 : sym -> unit -> 'a Conversion -> unit -> 'a val call2ret1 : sym -> 'a Conversion -> 'b Conversion -> 'a -> 'b val call2ret2 : sym -> unit -> 'a Conversion * 'b Conversion -> unit -> 'a * 'b val call3ret1 : sym -> 'a Conversion * 'b Conversion -> 'c Conversion -> 'a * 'b -> 'c val call3ret2 : sym -> 'a Conversion -> 'b Conversion * 'c Conversion -> 'a -> 'b * 'c val call4ret1 : sym -> 'a Conversion * 'b Conversion * 'c Conversion -> 'd Conversion -> 'a * 'b * 'c -> 'd val call4ret2 : sym -> 'a Conversion * 'b Conversion -> 'c Conversion * 'd Conversion -> 'a * 'b -> 'c * 'd val call4ret3 : sym -> 'a Conversion -> 'b Conversion * 'c Conversion * 'd Conversion -> 'a -> 'b * 'c * 'd val call5ret1 : sym -> 'a Conversion * 'b Conversion * 'c Conversion * 'd Conversion -> 'e Conversion -> 'a * 'b * 'c * 'd -> 'e val call5ret2 : sym -> 'a Conversion * 'b Conversion * 'c Conversion -> 'd Conversion * 'e Conversion -> 'a * 'b * 'c -> 'd * 'e (********************************************************************** * Struct **********************************************************************) val break_struct : Ctype list -> vol -> vol list val make_struct : (Ctype * vol) list -> vol (********************************************************************** * Conversions **********************************************************************) val CHAR : char Conversion val DOUBLE : real Conversion val FLOAT : real Conversion val INT : int Conversion val LONG : int Conversion val SHORT : int Conversion val STRING : string Conversion val VOID : unit Conversion val BOOL : bool Conversion val POINTER : vol Conversion val UINT : int Conversion val POINTERTO : 'a Conversion -> 'a Conversion val STRING' : string Conversion (********************************************************************** * StructConversionals **********************************************************************) val STRUCT2 : 'a Conversion * 'b Conversion -> ('a * 'b) Conversion val STRUCT3 : 'a Conversion * 'b Conversion * 'c Conversion -> ('a * 'b * 'c) Conversion val STRUCT4 : 'a Conversion * 'b Conversion * 'c Conversion * 'd Conversion -> ('a * 'b * 'c * 'd) Conversion val STRUCT5 : 'a Conversion * 'b Conversion * 'c Conversion * 'd Conversion * 'e Conversion -> ('a * 'b * 'c * 'd * 'e) Conversion val STRUCT6 : 'a Conversion * 'b Conversion * 'c Conversion * 'd Conversion * 'e Conversion * 'f Conversion -> ('a * 'b * 'c * 'd * 'e * 'f) Conversion val STRUCT7 : 'a Conversion * 'b Conversion * 'c Conversion * 'd Conversion * 'e Conversion * 'f Conversion * 'g Conversion -> ('a * 'b * 'c * 'd * 'e * 'f * 'g) Conversion val STRUCT8 : 'a Conversion * 'b Conversion * 'c Conversion * 'd Conversion * 'e Conversion * 'f Conversion * 'g Conversion * 'h Conversion -> ('a * 'b * 'c * 'd * 'e * 'f * 'g * 'h) Conversion val STRUCT9 : 'a Conversion * 'b Conversion * 'c Conversion * 'd Conversion * 'e Conversion * 'f Conversion * 'g Conversion * 'h Conversion * 'i Conversion -> ('a * 'b * 'c * 'd * 'e * 'f * 'g * 'h * 'i) Conversion (********************************************************************** * Function Conversionals **********************************************************************) val FUNCTION0 : unit -> 'a Conversion -> ( unit -> 'a ) Conversion val PASCALFUNCTION0 : unit -> 'a Conversion -> ( unit -> 'a ) Conversion val FUNCTION1 : 'a Conversion -> 'b Conversion -> ( 'a -> 'b ) Conversion val PASCALFUNCTION1 : 'a Conversion -> 'b Conversion -> ( 'a -> 'b ) Conversion val FUNCTION2 : 'a Conversion * 'b Conversion -> 'c Conversion -> ( 'a * 'b -> 'c) Conversion val PASCALFUNCTION2 : 'a Conversion * 'b Conversion -> 'c Conversion -> ( 'a * 'b -> 'c) Conversion val FUNCTION3 : 'a Conversion * 'b Conversion * 'c Conversion -> 'd Conversion -> ( 'a * 'b * 'c -> 'd) Conversion val PASCALFUNCTION3 : 'a Conversion * 'b Conversion * 'c Conversion -> 'd Conversion -> ( 'a * 'b * 'c -> 'd) Conversion val FUNCTION4 : 'a Conversion * 'b Conversion * 'c Conversion * 'd Conversion -> 'e Conversion -> ( 'a * 'b * 'c * 'd -> 'e) Conversion val PASCALFUNCTION4 : 'a Conversion * 'b Conversion * 'c Conversion * 'd Conversion -> 'e Conversion -> ( 'a * 'b * 'c * 'd -> 'e) Conversion end; polyml.5.2.1/mlsource/extra/CInterface/CTYPE_SAVE_SIZEOF.ML0000644000175000017500000000426210313043360021763 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (*** This functor provides a wrapper around Ctype, which reduces the number of calls to Underlying.sizeof & Underlying.alignment by saving size & alignment information into each Ctype value. ***) functor CTYPE_SAVE_SIZEOF (Underlying : CtypeSig) : CtypeSig = struct open Underlying abstype Ctype = ctype of Underlying.Ctype * int * int with fun wrap ct = ctype (ct, Underlying.sizeof ct, Underlying.alignment ct) val Cvoid = ctype (Underlying.Cvoid, 0, 0); fun unpack (ctype (ct,_,_)) = ct; fun sizeof (ctype (_,size,_)) = size; fun alignment (ctype (_,_,alignment)) = alignment; end; val Cchar = wrap Underlying.Cchar; val Cdouble = wrap Underlying.Cdouble; val Cfloat = wrap Underlying.Cfloat; val Cint = wrap Underlying.Cint; val Clong = wrap Underlying.Clong; val Cuint = wrap Underlying.Cuint; val Cshort = wrap Underlying.Cshort; val voidStar = wrap Underlying.voidStar fun Cpointer t = wrap (Underlying.Cpointer (unpack t)); fun Cfunction(ts,t) = wrap (Underlying.Cfunction (map unpack ts, unpack t)); fun Cstruct ts = wrap (Underlying.Cstruct (map unpack ts)); fun align n t = Underlying.align n (unpack t); fun makeRaw t = Underlying.makeRaw (unpack t); end; polyml.5.2.1/mlsource/extra/CInterface/CallWithConv.ML0000644000175000017500000000155010313043360021534 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure CallWithConv = CALL_WITH_CONV (structure LowerLevel = LowerLevel); polyml.5.2.1/mlsource/extra/CInterface/CallWithConvSig.ML0000644000175000017500000001402410313043360022177 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) signature CallWithConvSig = sig type sym type vol structure Ctype : CtypeSig type 'a Conversion; val CHAR : char Conversion val FLOAT : real Conversion val DOUBLE : real Conversion val INT : int Conversion val SHORT : int Conversion val LONG : int Conversion val STRING : string Conversion val UINT : int Conversion val mapConversion : ('a -> 'b) * ('b -> 'a) -> 'a Conversion -> 'b Conversion val mkConversion : (vol -> 'a) -> ('a -> vol) -> Ctype.Ctype -> 'a Conversion val breakConversion : 'a Conversion -> (vol -> 'a) * ('a -> vol) * Ctype.Ctype val global : sym -> 'a Conversion -> unit -> 'a val setGlobal:sym -> 'a Conversion -> 'a -> unit val call0 : sym -> unit -> 'a Conversion -> unit -> 'a val call1 : sym -> 'a Conversion -> 'b Conversion -> 'a -> 'b val call2 : sym -> 'a Conversion * 'b Conversion -> 'c Conversion -> 'a * 'b -> 'c val call3 : sym -> 'a Conversion * 'b Conversion * 'c Conversion -> 'd Conversion -> 'a * 'b * 'c -> 'd val call4 : sym -> 'a Conversion * 'b Conversion * 'c Conversion * 'd Conversion -> 'e Conversion -> 'a * 'b * 'c * 'd -> 'e val call5 : sym -> 'a Conversion * 'b Conversion * 'c Conversion * 'd Conversion * 'e Conversion -> 'f Conversion -> 'a * 'b * 'c * 'd * 'e -> 'f val call6 : sym -> 'a Conversion * 'b Conversion * 'c Conversion * 'd Conversion * 'e Conversion * 'f Conversion -> 'g Conversion -> 'a * 'b * 'c * 'd * 'e * 'f -> 'g val call7 : sym -> 'a Conversion * 'b Conversion * 'c Conversion * 'd Conversion * 'e Conversion * 'f Conversion * 'g Conversion -> 'h Conversion -> 'a * 'b * 'c * 'd * 'e * 'f * 'g -> 'h val call8 : sym -> 'a Conversion * 'b Conversion * 'c Conversion * 'd Conversion * 'e Conversion * 'f Conversion * 'g Conversion * 'h Conversion -> 'i Conversion -> 'a * 'b * 'c * 'd * 'e * 'f * 'g * 'h -> 'i val call9 : sym -> 'a Conversion * 'b Conversion * 'c Conversion * 'd Conversion * 'e Conversion * 'f Conversion * 'g Conversion * 'h Conversion * 'i Conversion -> 'j Conversion -> 'a * 'b * 'c * 'd * 'e * 'f * 'g * 'h * 'i -> 'j val call10 : sym -> 'a Conversion * 'b Conversion * 'c Conversion * 'd Conversion * 'e Conversion * 'f Conversion * 'g Conversion * 'h Conversion * 'i Conversion * 'j Conversion -> 'k Conversion -> 'a * 'b * 'c * 'd * 'e * 'f * 'g * 'h * 'i * 'j -> 'k val call11 : sym -> 'a Conversion * 'b Conversion * 'c Conversion * 'd Conversion * 'e Conversion * 'f Conversion * 'g Conversion * 'h Conversion * 'i Conversion * 'j Conversion * 'k Conversion -> 'l Conversion -> 'a * 'b * 'c * 'd * 'e * 'f * 'g * 'h * 'i * 'j * 'k -> 'l val call12 : sym -> 'a Conversion * 'b Conversion * 'c Conversion * 'd Conversion * 'e Conversion * 'f Conversion * 'g Conversion * 'h Conversion * 'i Conversion * 'j Conversion * 'k Conversion * 'l Conversion -> 'm Conversion -> 'a * 'b * 'c * 'd * 'e * 'f * 'g * 'h * 'i * 'j * 'k * 'l -> 'm val call13 : sym -> 'a Conversion * 'b Conversion * 'c Conversion * 'd Conversion * 'e Conversion * 'f Conversion * 'g Conversion * 'h Conversion * 'i Conversion * 'j Conversion * 'k Conversion * 'l Conversion * 'm Conversion -> 'n Conversion -> 'a * 'b * 'c * 'd * 'e * 'f * 'g * 'h * 'i * 'j * 'k * 'l * 'm -> 'n val call14 : sym -> 'a Conversion * 'b Conversion * 'c Conversion * 'd Conversion * 'e Conversion * 'f Conversion * 'g Conversion * 'h Conversion * 'i Conversion * 'j Conversion * 'k Conversion * 'l Conversion * 'm Conversion * 'n Conversion -> 'p Conversion -> 'a * 'b * 'c * 'd * 'e * 'f * 'g * 'h * 'i * 'j * 'k * 'l * 'm * 'n -> 'p val call15 : sym -> 'a Conversion * 'b Conversion * 'c Conversion * 'd Conversion * 'e Conversion * 'f Conversion * 'g Conversion * 'h Conversion * 'i Conversion * 'j Conversion * 'k Conversion * 'l Conversion * 'm Conversion * 'n Conversion * 'p Conversion -> 'q Conversion -> 'a * 'b * 'c * 'd * 'e * 'f * 'g * 'h * 'i * 'j * 'k * 'l * 'm * 'n * 'p -> 'q val call1ret1 : sym -> unit -> 'a Conversion -> unit -> 'a val call2ret1 : sym -> 'a Conversion -> 'b Conversion -> 'a -> 'b val call2ret2 : sym -> unit -> 'a Conversion * 'b Conversion -> unit -> 'a * 'b val call3ret1 : sym -> 'a Conversion * 'b Conversion -> 'c Conversion -> 'a * 'b -> 'c val call3ret2 : sym -> 'a Conversion -> 'b Conversion * 'c Conversion -> 'a -> 'b * 'c val call4ret1 : sym -> 'a Conversion * 'b Conversion * 'c Conversion -> 'd Conversion -> 'a * 'b * 'c -> 'd val call4ret2 : sym -> 'a Conversion * 'b Conversion -> 'c Conversion * 'd Conversion -> 'a * 'b -> 'c * 'd val call4ret3 : sym -> 'a Conversion -> 'b Conversion * 'c Conversion * 'd Conversion -> 'a -> 'b * 'c * 'd val call5ret1 : sym -> 'a Conversion * 'b Conversion * 'c Conversion * 'd Conversion -> 'e Conversion -> 'a * 'b * 'c * 'd -> 'e val call5ret2 : sym -> 'a Conversion * 'b Conversion * 'c Conversion -> 'd Conversion * 'e Conversion -> 'a * 'b * 'c -> 'd * 'e end; polyml.5.2.1/mlsource/extra/CInterface/ConversionsSig.ML0000644000175000017500000000203510313043360022151 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) signature ConversionsSig = sig type 'a Conversion type vol val VOID : unit Conversion val BOOL : bool Conversion val POINTER : vol Conversion val POINTERTO : 'a Conversion -> 'a Conversion val STRING' : string Conversion end polyml.5.2.1/mlsource/extra/CInterface/CtypeSig.ML0000644000175000017500000000262210313043360020727 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) signature CtypeSig = sig type Ctype val Cchar : Ctype val Cdouble : Ctype val Cfloat : Ctype val Cint : Ctype val Clong : Ctype val Cshort : Ctype val Cuint : Ctype val Cpointer : Ctype -> Ctype val Cstruct : Ctype list -> Ctype val Cfunction : Ctype list * Ctype -> Ctype val Cvoid : Ctype val voidStar : Ctype exception IllegalUseOfVoid val sizeof : Ctype -> int val alignment : Ctype -> int val align : int -> Ctype -> int type RawCtype val makeRaw : Ctype -> RawCtype end; polyml.5.2.1/mlsource/extra/CInterface/Dispatch.ML0000644000175000017500000003401310767676673020776 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure Dispatch: DispatchSig = struct abstype machineWord = MachineWord of word with val toWord : 'a -> machineWord = RunCall.unsafeCast; val isShortInt : machineWord -> bool = RunCall.run_call1 RuntimeCalls.POLY_SYS_is_short; val toShortInt : machineWord -> int = RunCall.unsafeCast; (* used for tags *) val unsafeCast : machineWord -> 'a = RunCall.unsafeCast; (* used for data values *) end structure Union : UnionSig = struct (*** Defines datatypes used to communicate with new primitive: call_sym_and_convert. ***) exception Never of string; (* Used for failed assertions. *) fun never s = raise Never s; (* Don't use datatypes because their representations might change. Tags were originally allocated in alphabetical order, but ... datatype 'a union = Char of string | Double of real | Float of real | Int of int | Long of int | Short of int | String of string; | Vol of 'a ... *) (* "union" is the type of a raw value with the type information. *) (* we can't make this an abstype, because that might change the representation! *) type 'a union = machineWord * int; fun Char (x:char) : 'a union = (toWord x,1); fun Double (x:real) : 'a union = (toWord x,2); fun Float (x:real) : 'a union = (toWord x,3); fun Int (x:int) : 'a union = (toWord x,4); fun Long (x:int) : 'a union = (toWord x,5); fun Short (x:int) : 'a union = (toWord x,6); fun String (x:string) : 'a union = (toWord x,7); fun Vol (x:'a) : 'a union = (toWord x,8); fun Uint (x:int) : 'a union = (toWord x,9); fun isChar ((x,1) : 'a union) : bool = true | isChar _ = false; fun isDouble ((x,2) : 'a union) : bool = true | isDouble _ = false; fun isFloat ((x,3) : 'a union) : bool = true | isFloat _ = false; fun isInt ((x,4) : 'a union) : bool = true | isInt _ = false; fun isLong ((x,5) : 'a union) : bool = true | isLong _ = false; fun isShort ((x,6) : 'a union) : bool = true | isShort _ = false; fun isString ((x,7) : 'a union) : bool = true | isString _ = false; fun isVol ((x,8) : 'a union) : bool = true | isVol _ = false; fun isUint ((x,9) : 'a union) : bool = true | isUint _ = false; fun deChar ((x,1) : 'a union) : char = unsafeCast x | deChar _ = never "deChar"; fun deDouble ((x,2) : 'a union) : real = unsafeCast x | deDouble _ = never "deDouble"; fun deFloat ((x,3) : 'a union) : real = unsafeCast x | deFloat _ = never "deFloat"; fun deInt ((x,4) : 'a union) : int = unsafeCast x | deInt _ = never "deInt"; fun deLong ((x,5) : 'a union) : int = unsafeCast x | deLong _ = never "deLong"; fun deShort ((x,6) : 'a union) : int = unsafeCast x | deShort _ = never "deShort"; fun deString ((x,7) : 'a union) : string = unsafeCast x | deString _ = never "deString"; fun deVol ((x,8) : 'a union) : 'a = unsafeCast x | deVol _ = never "deVol"; fun deUint ((x,9) : 'a union) : int = unsafeCast x | deUint _ = never "deInt"; (* ... datatype 'a unionChoice = chooseChar | chooseDouble | chooseFloat | chooseInt | chooseLong | chooseShort | chooseString; | chooseVol of 'a ... *) (* unionChoice is the type information used when we want to indicate the type of a result. *) type 'a unionChoice = machineWord; local (* DCJM 25/3/00. This is a more complicated in ML97 than the original ML90. *) val w1: machineWord = toWord 1 and w2: machineWord = toWord 2 and w3: machineWord = toWord 3 and w4: machineWord = toWord 4 and w5: machineWord = toWord 5 and w6: machineWord = toWord 6 and w7: machineWord = toWord 7 and w9: machineWord = toWord 9 in val chooseChar : 'a unionChoice = w1; val chooseDouble : 'a unionChoice = w2; val chooseFloat : 'a unionChoice = w3; val chooseInt : 'a unionChoice = w4; val chooseLong : 'a unionChoice = w5; val chooseShort : 'a unionChoice = w6; val chooseString : 'a unionChoice = w7; val chooseUint : 'a unionChoice = w9; end; (* DCJM 8/10/99. This originally said simply {1=x} presumably with the intention of creating a single boxed object. That doesn't work any longer. Add an extra field to ensure that it's boxed. (We may be able to get the effect we want using datatype 'a t = A | B of 'a ) *) val chooseVol : 'a -> 'a unionChoice = fn x => toWord {1 = x, 2 = 99}; fun isChooseChar (x : 'a unionChoice) : bool = isShortInt x andalso toShortInt x = 1; fun isChooseDouble (x : 'a unionChoice) : bool = isShortInt x andalso toShortInt x = 2; fun isChooseFloat (x : 'a unionChoice) : bool = isShortInt x andalso toShortInt x = 3; fun isChooseInt (x : 'a unionChoice) : bool = isShortInt x andalso toShortInt x = 4; fun isChooseLong (x : 'a unionChoice) : bool = isShortInt x andalso toShortInt x = 5; fun isChooseShort (x : 'a unionChoice) : bool = isShortInt x andalso toShortInt x = 6; fun isChooseString (x : 'a unionChoice) : bool = isShortInt x andalso toShortInt x = 7; fun isChooseUint (x : 'a unionChoice) : bool = isShortInt x andalso toShortInt x = 9; fun isChooseVol (x : 'a unionChoice) : bool = not (isShortInt x); (* needed? *) (* DCJM 8/10/99. This original simply said { 1=y } but that no longer works. Changed so that it definitely indirects. *) fun deChooseVol (x : 'a unionChoice) : 'a = if not (isShortInt x) then (case unsafeCast x of {1 = y, ...}:'a * 'a => y) else never "deChooseVol"; (* directedArg is used to encode either an "in" parameter or an "out" parameter. *) (* ... datatype ('a, 'b) directedArg = In of ('a * 'b) union | Out of 'a unionChoice; ... *) type ('a,'b) directedArg = machineWord * int; val In : ('a * 'b) union -> ('a,'b) directedArg = fn x => (toWord x,1); val Out : 'a unionChoice -> ('a,'b) directedArg = fn x => (toWord x,2); val isIn : ('a,'b) directedArg -> bool = fn (x,1) => true | _ => false val isOut : ('a,'b) directedArg -> bool = fn (x,2) => true | _ => false val deIn : ('a,'b) directedArg -> ('a * 'b) union = fn (x,1) => unsafeCast x | _ => never "deIn" val deOut : ('a,'b) directedArg -> 'a unionChoice = fn (x,2) => unsafeCast x | _ => never "deOut" (* ... fun mapUnion f union = case union of Vol x => Vol (f x) | Char x => Char x | Double x => Double x | Float x => Float x | Int x => Int x | Short x => Short x | Long x => Long x | String x => String x ... *) fun mapUnion f (x : 'a union) = if isVol x then Vol (f (deVol x)) else x; (* ... fun mapUnionChoice f choice = case choice of chooseVol x => chooseVol (f x) | chooseChar => chooseChar | chooseDouble => chooseDouble | chooseFloat => chooseFloat | chooseInt => chooseInt | chooseShort => chooseShort | chooseLong => chooseLong | chooseString => chooseString ... *) fun mapUnionChoice f (x : 'a unionChoice) = if isChooseVol x then chooseVol (f (deChooseVol x)) else x; (* ... fun mapDirectedArg f g arg = case arg of In union => In (mapUnion (fn (ctype, vol) => (f ctype, g vol)) union) | Out choice => Out (mapUnionChoice f choice) ... *) fun mapDirectedArg f g (x : ('a,'b) directedArg) = if isIn x then In (mapUnion (fn (ctype, vol) => (f ctype, g vol)) (deIn x)) else Out (mapUnionChoice f (deOut x)) end; (* Don't use datatype because representation may change ... datatype RawCtype = Cchar | Cdouble | Cfloat | Cint | Clong | Cpointer | Cshort | Cstruct of int ... *) (* DCJM 23/3/04. This provides the interface to foreign.c in the run-time system. The representation is shared with that code. *) type RawCtype = machineWord; val Cchar = toWord 1; val Cdouble = toWord 2; val Cfloat = toWord 3; val Cint = toWord 4; val Clong = toWord 5; val Cpointer = toWord 6; val Cshort = toWord 7; (* 8 was previously "struct". *) val Cuint = toWord 9; (* DCJM 8/10/99. This originally said simply {1=n} presumably with the intention of creating a single boxed object. That doesn't work any longer. Add an extra field to ensure that it's boxed. (We may be able to get the effect we want using datatype 'a t = A | B of 'a ) *) (* For a structure "n" is the size. *) val Cstruct = fn (n : int) => toWord {1 = n, 2=999}; abstype rawvol = rawvol with end; (* Purely abstract type. *) fun foreign code args = RunCall.run_call2 RuntimeCalls.POLY_SYS_foreign_dispatch (code:int,args); local val dispatch_index = ref 0; in fun next currier = let val f = currier (foreign (!dispatch_index)) in dispatch_index := 1 + !dispatch_index; f end end (* Curry functions *) fun one f = f (* eta-reduced SPF 19/10/94 *) fun two f x y = f (x,y) fun three f x y z = f (x,y,z) (* The order of these declarations is critical - DO NOT CHANGE *) val get_foreign_debug = next(one); val set_foreign_debug = next(one); val load_lib = next(one); val load_sym = next(two); (* DCJM 7/4/04. It took me a while to figure out what was going on since I didn't have any documentation. There were two versions of call_sym: call_sym_origCversion and call_sym_and_convert. The older version, call_sym_origCversion, took three parameters: sym, args and retChoice. "sym" is the function to call, "args" is a list of pairs of type info (as a code) and values and "retChoice" indicates the type of the result. The result of this function is passed back as a vol. The newer version, call_sym_and_convert, also takes three parameters: sym, args and retChoice. "sym" and "retChoice" are the same as the previous version but "args" is now a list of entries which may be either "in" parameters which are the same as before or "out" parameters where only the type is supplied (since an "out" parameter doesn't have a value before the function is called). The result is now a pair where the first component is the function result as before and the second component the list of the values of the "out" parameters. The newer version does all the conversion of ML arguments into C values and of the result of the C function back into ML as part of a single RTS call whereas the older version required multiple RTS calls. *) val call_sym_and_convert = next(three); val alloc = next(one); (* Different name from that in foreign.c *) val address = next(one); val deref = next(one); val offset = next(two); val assign = next(three); val sizeof = next(one); (* Different name from that in foreign.c *) val alignment = next(one); val toCchar = next(one); val fromCchar = next(one); val toCdouble = next(one); val fromCdouble = next(one); val toCfloat = next(one); val fromCfloat = next(one); val toCint = next(one); val fromCint = next(one); val toClong = next(one); val fromClong = next(one); val toCshort = next(one); val fromCshort = next(one); val fillCstring = next(two); val toCstring = next(one); val fromCstring = next(one); val toCuint = next(one); (* Added DCJM 27/5/01 *) val fromCuint = next(one); (* Added DCJM 27/5/01 *) val toCbytes = next(one); (* Added DCJM 29/6/01 *) val fromCbytes = next(one); (* Added DCJM 29/6/01 *) (* Note: fromCbytes takes a pair. *) val toCfunction = next(three);(* Added DCJM 7/4/04 *) val toPascalfunction = next(three);(* Added DCJM 7/4/04 *) end (* struct *) polyml.5.2.1/mlsource/extra/CInterface/DispatchSig.ML0000644000175000017500000000530410506226530021410 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) signature DispatchSig = sig type rawvol type RawCtype val Cchar : RawCtype val Cdouble : RawCtype val Cfloat : RawCtype val Cint : RawCtype val Clong : RawCtype val Cpointer : RawCtype val Cshort : RawCtype val Cstruct : int -> RawCtype val Cuint : RawCtype val get_foreign_debug : unit -> int val set_foreign_debug : int -> unit val load_lib : string -> rawvol val load_sym : rawvol -> string -> rawvol structure Union : UnionSig val call_sym_and_convert : rawvol -> (RawCtype, rawvol) Union.directedArg list -> RawCtype Union.unionChoice -> (rawvol Union.union * rawvol Union.union list) val alloc : int -> rawvol val address : rawvol -> rawvol val deref : rawvol -> rawvol val offset : rawvol -> int -> rawvol val assign : rawvol -> rawvol -> int -> unit val sizeof : RawCtype -> int val alignment : RawCtype -> int val toCchar : char -> rawvol val toCdouble : real -> rawvol val toCfloat : real -> rawvol val toCint : int -> rawvol val toClong : int -> rawvol val toCshort : int -> rawvol val toCuint : int -> rawvol val fromCchar : rawvol -> char val fromCdouble : rawvol -> real val fromCfloat : rawvol -> real val fromCint : rawvol -> int val fromClong : rawvol -> int val fromCshort : rawvol -> int val fromCuint : rawvol -> int val fillCstring : rawvol -> string -> unit val toCstring : string -> rawvol val fromCstring : rawvol -> string val toCbytes : Word8Vector.vector -> rawvol val fromCbytes : rawvol * int -> Word8Vector.vector val toCfunction : RawCtype list -> RawCtype -> (rawvol list -> rawvol) -> rawvol val toPascalfunction : RawCtype list -> RawCtype -> (rawvol list -> rawvol) -> rawvol end; polyml.5.2.1/mlsource/extra/CInterface/ForeignDebug.ML0000644000175000017500000000151410313043360021537 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure ForeignDebug : ForeignDebugSig = Dispatch; polyml.5.2.1/mlsource/extra/CInterface/ForeignDebugSig.ML0000644000175000017500000000161710313043360022206 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) signature ForeignDebugSig = sig val get_foreign_debug : unit -> int val set_foreign_debug : int -> unit end; polyml.5.2.1/mlsource/extra/CInterface/ForeignException.ML0000644000175000017500000000210010313043360022437 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure ForeignException : ForeignExceptionSig = struct local structure Type = struct type ex_type = string; val ex_iden = 23; end; structure E: sig exception ex of string end = RunCall.Run_exception1(Type); in exception Foreign = E.ex; end; end; polyml.5.2.1/mlsource/extra/CInterface/ForeignExceptionSig.ML0000644000175000017500000000154110313043360023112 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) signature ForeignExceptionSig = sig exception Foreign of string end; polyml.5.2.1/mlsource/extra/CInterface/LowerLevel.ML0000644000175000017500000001721310506226530021270 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure LowerLevel = struct open Volatile; open Volatile.BehaviourRefs; open ForeignException; (********************************************************************** An 'a promise represents a suspended computation of type 'a. A promise is created by passing an 'a thunk (a function from unit to 'a) to makePromise. A promise is activated using forcePromise. When a promise is forced, the result is remembered for subsequent force. This ensures that the thunk passed to makePromise will be evaluated at most once. For example, evaluation of the following would cause the message, "computing..." to be echoed just once: fun echo s = output (std_out,s); let val P = makePromise (fn () => (echo "computing...\n"; 2 + 2)) in forcePromise P + forcePromise P end; **********************************************************************) datatype ('a,'b) either = This of 'a | That of 'b datatype 'a promise = Promise of (unit -> 'a, 'a) either ref fun makePromise thunk = Promise (ref (This thunk)); fun forcePromise (Promise thingref) = case (!thingref) of This thunk => let val res = thunk() in (thingref := That res; res) end | That res => res; (********************************************************************** An 'a inert represents a re-creatable value of type 'a. Recreation is performed when a given exception is raised during the subsequent use of the inert value. This is useful for objects which do not survive from one PolyML session to the next, e.g. values of type "vol". > makeInert CATCH BUILD Create an inert value by forcing the thunk BUILD. Use CATCH as a predicate on exception values. It must return true for any exception which indicates recreation of this inert value is necessary. Recreation will be achieved by re-forcing BUILD. > withInert INERT F Apply the function F to the value encapsulated within INERT. If during the course of this application recreation is necessary then perform that recreation. **********************************************************************) datatype 'a inert = Inert of 'a ref * (unit -> 'a) * (exn -> bool) fun makeInert catch build = Inert(ref(build()), build, catch); fun withInert (Inert(value,build,catch)) f = f (!value) handle e => if catch e then (value := build(); f (!value)) else raise e; (********************************************************************** * Debugging... **********************************************************************) fun inform str = (****** * Output a message if "inform_about_symbol_reload" ref is set. ******) if !inform_about_symbol_reload then TextIO.print str else (); (********************************************************************** * Combination of Inert & Promises... **********************************************************************) fun makeIP catch build = makePromise (fn () => makeInert catch build); fun withIP ip f = withInert (forcePromise ip) f (********************************************************************** * Implementation of dylib & sym. **********************************************************************) datatype dylib = Dylib of string ref * vol inert promise; datatype sym = Sym of vol inert promise; fun withDylib (Dylib(_,ip)) f = withIP ip f; fun withSym (Sym ip) f = withIP ip f; fun get_libPath (Dylib(pathRef,_)) = !pathRef; fun set_libPath (Dylib(pathRef,_)) path = pathRef := path; val catchIV = (****** * Returns "true" when given an `invalid volatile' exception. * Note: this string must *exactly* match the corresponding * string found in the runtime system file: .../Driver/foreign.c ******) fn Foreign "Invalid volatile" => true | _ => false; fun load_lib path = (****** * Load a dynamic library. * This loading is done lazily, i.e. not until the library is needed. * The library will automatically reload in subsequent PolyML sessions * using the latest pathname set by set_libPath above. ******) let val pathRef = ref path in Dylib(pathRef, makeIP catchIV (fn () => (inform ("Loading library: "^(!pathRef)^"\n"); Volatile.load_lib (!pathRef)))) end; fun load_sym dylib symName = (****** * Load a symbol from a dynamic library. * This loading is done lazily. Neither the library or the symbol * will be loaded until the symbol is actually needed. * The symbol will be reloaded in subsequent PolyML sessions. ******) Sym(makeIP catchIV (fn () => withDylib dylib (fn dylibVol => (inform ("Loading symbol: "^symName^"\n"); Volatile.load_sym dylibVol symName)))); fun call_sym_and_convert sym args retType = (****** * Call a symbol as a C-function. * May load/reload either the symbol, or both the symbol and the library. ******) withSym sym (fn symVol => Volatile.call_sym_and_convert symVol args retType); fun volOfSym sym = (****** * Extract a *valid* volatile from a symbol * May load/reload either the symbol, or both the symbol and the library. * * The reload is caused because we attempt to take the address * of the vol which will raise an exception if the vol is invalid. ******) withSym sym (fn symVol => (Volatile.address symVol; symVol)); fun mapSym f sym = (****** * Change order of params for export... ******) withSym sym f; fun get_sym libPath (*symName*) = (****** * Common combination of load_lib & load_sym. * Partial application will cause the library to be shared, and * hence only loaded/reloaded once per session. ******) load_sym (load_lib libPath) (*symName*) ; open Union; (* now imported from Union ... exception Never of string; ... *) fun never string = raise Never string; (* Define call_sym in terms of call_sym_and_convert *) fun call_sym sym args retCtype = let val result = call_sym_and_convert sym (map (fn x => In (Vol x)) args) (chooseVol retCtype) in case result of (v,[]) => if isVol v then deVol v else never "call_sym" | _ => never "call_sym" end end; polyml.5.2.1/mlsource/extra/CInterface/LowerLevelSig.ML0000644000175000017500000000544710313043360021733 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) signature LowerLevelSig = sig (* The first part of this is copied from VolatileSig *) type vol structure Ctype : CtypeSig structure BehaviourRefs : BehaviourRefsSig (* val load_lib : string -> vol val load_sym : vol -> string -> vol structure Union : UnionSig val call_sym_and_convert : vol -> (Ctype.Ctype, vol) Union.directedArg list -> Ctype.Ctype Union.unionChoice -> (vol Union.union * vol Union.union list) *) val alloc : int -> Ctype.Ctype -> vol val address : vol -> vol val deref : vol -> vol val offset : int -> Ctype.Ctype -> vol -> vol val assign : Ctype.Ctype -> vol -> vol -> unit val toCchar : char -> vol val toCdouble : real -> vol val toCfloat : real -> vol val toCint : int -> vol val toClong : int -> vol val toCshort : int -> vol val toCuint : int -> vol val fromCchar : vol -> char val fromCdouble : vol -> real val fromCfloat : vol -> real val fromCint : vol -> int val fromClong : vol -> int val fromCshort : vol -> int val fromCuint : vol -> int val fillCstring : vol -> string -> unit val toCstring : string -> vol val fromCstring : vol -> string val toCbytes : Word8Vector.vector -> vol val fromCbytes : vol * int -> Word8Vector.vector val toCfunction : Ctype.Ctype list -> Ctype.Ctype -> (vol list -> vol) -> vol val toPascalfunction : Ctype.Ctype list -> Ctype.Ctype -> (vol list -> vol) -> vol type dylib type sym (* overwite specifications in VolatileSig *) val load_lib : string -> dylib val load_sym : dylib -> string -> sym val get_sym : string -> string -> sym val set_libPath : dylib -> string -> unit val get_libPath : dylib -> string structure Union : UnionSig val call_sym_and_convert : sym -> (Ctype.Ctype, vol) Union.directedArg list -> Ctype.Ctype Union.unionChoice -> (vol Union.union * vol Union.union list) val volOfSym : sym -> vol val mapSym : (vol -> 'a) -> sym -> 'a (*end*) end; polyml.5.2.1/mlsource/extra/CInterface/OrigLowerLevelSig.ML0000644000175000017500000000220010313043360022534 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (*** To maintain top level interface we simulate old primitve call_sym in terms of new primitive call_sym_and_convert. This signature adds call_sym to LowerLevelSig. ***) signature OrigLowerLevelSig = sig include LowerLevelSig; (*local open Ctype in*) val call_sym : sym -> (Ctype.Ctype * vol) list -> Ctype.Ctype -> vol (*end*) end; polyml.5.2.1/mlsource/extra/CInterface/STRUCT_CONVERSIONALS.ML0000644000175000017500000003050610506226530022341 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (********************************************************************** * * Functor Application * **********************************************************************) functor STRUCT_CONVERSIONALS ( structure CallWithConv : CallWithConvSig structure Struct : StructSig structure ForeignException : ForeignExceptionSig structure LowerLevel : LowerLevelSig sharing type CallWithConv.vol = Struct.vol = LowerLevel.vol sharing Struct.Ctype = CallWithConv.Ctype = LowerLevel.Ctype ) : StructConversionalsSig = struct open Struct; open CallWithConv; open Ctype; open ForeignException; open LowerLevel; exception Zip; fun zip [] [] = [] | zip (x::xs) (y::ys) = (x,y) :: zip xs ys | zip _ _ = raise Zip; exception Break fun break2 ts v = case break_struct ts v of [a,b] => (a,b) | _ => raise Break fun break3 ts v = case break_struct ts v of [a,b,c] => (a,b,c) | _ => raise Break fun break4 ts v = case break_struct ts v of [a,b,c,d] => (a,b,c,d) | _ => raise Break fun break5 ts v = case break_struct ts v of [a,b,c,d,e] => (a,b,c,d,e) | _ => raise Break fun break6 ts v = case break_struct ts v of [a,b,c,d,e,f] => (a,b,c,d,e,f) | _ => raise Break fun break7 ts v = case break_struct ts v of [a,b,c,d,e,f,g] => (a,b,c,d,e,f,g) | _ => raise Break fun break8 ts v = case break_struct ts v of [a,b,c,d,e,f,g,h] => (a,b,c,d,e,f,g,h) | _ => raise Break fun break9 ts v = case break_struct ts v of [a,b,c,d,e,f,g,h,i] => (a,b,c,d,e,f,g,h,i) | _ => raise Break fun STRUCT2 (c1,c2) = let val (from1,to1,ctype1) = breakConversion c1 val (from2,to2,ctype2) = breakConversion c2 val ctypes = [ctype1,ctype2] fun from v = let val (v1,v2) = break2 ctypes v in (from1 v1,from2 v2) end fun to (a,b) = make_struct (zip ctypes [to1 a,to2 b]) in mkConversion from to (Cstruct ctypes) end fun STRUCT3 (c1,c2,c3) = let val (from1,to1,ctype1) = breakConversion c1 val (from2,to2,ctype2) = breakConversion c2 val (from3,to3,ctype3) = breakConversion c3 val ctypes = [ctype1,ctype2,ctype3] fun from v = let val (v1,v2,v3) = break3 ctypes v in (from1 v1,from2 v2,from3 v3) end fun to (a,b,c) = make_struct (zip ctypes [to1 a,to2 b,to3 c]) in mkConversion from to (Cstruct ctypes) end fun STRUCT4 (c1,c2,c3,c4) = let val (from1,to1,ctype1) = breakConversion c1 val (from2,to2,ctype2) = breakConversion c2 val (from3,to3,ctype3) = breakConversion c3 val (from4,to4,ctype4) = breakConversion c4 val ctypes = [ctype1,ctype2,ctype3,ctype4] fun from v = let val (v1,v2,v3,v4) = break4 ctypes v in (from1 v1,from2 v2,from3 v3,from4 v4) end fun to (a,b,c,d) = make_struct (zip ctypes [to1 a,to2 b,to3 c,to4 d]) in mkConversion from to (Cstruct ctypes) end fun STRUCT5 (c1,c2,c3,c4,c5) = let val (from1,to1,ctype1) = breakConversion c1 val (from2,to2,ctype2) = breakConversion c2 val (from3,to3,ctype3) = breakConversion c3 val (from4,to4,ctype4) = breakConversion c4 val (from5,to5,ctype5) = breakConversion c5 val ctypes = [ctype1,ctype2,ctype3,ctype4,ctype5] fun from v = let val (v1,v2,v3,v4,v5) = break5 ctypes v in (from1 v1,from2 v2,from3 v3,from4 v4,from5 v5) end fun to (a,b,c,d,e) = make_struct (zip ctypes [to1 a,to2 b,to3 c,to4 d,to5 e]) in mkConversion from to (Cstruct ctypes) end fun STRUCT6 (c1,c2,c3,c4,c5,c6) = let val (from1,to1,ctype1) = breakConversion c1 val (from2,to2,ctype2) = breakConversion c2 val (from3,to3,ctype3) = breakConversion c3 val (from4,to4,ctype4) = breakConversion c4 val (from5,to5,ctype5) = breakConversion c5 val (from6,to6,ctype6) = breakConversion c6 val ctypes = [ctype1,ctype2,ctype3,ctype4,ctype5,ctype6] fun from v = let val (v1,v2,v3,v4,v5,v6) = break6 ctypes v in (from1 v1,from2 v2,from3 v3,from4 v4,from5 v5,from6 v6) end fun to (a,b,c,d,e,f) = make_struct (zip ctypes [to1 a,to2 b,to3 c,to4 d,to5 e,to6 f]) in mkConversion from to (Cstruct ctypes) end fun STRUCT7 (c1,c2,c3,c4,c5,c6,c7) = let val (from1,to1,ctype1) = breakConversion c1 val (from2,to2,ctype2) = breakConversion c2 val (from3,to3,ctype3) = breakConversion c3 val (from4,to4,ctype4) = breakConversion c4 val (from5,to5,ctype5) = breakConversion c5 val (from6,to6,ctype6) = breakConversion c6 val (from7,to7,ctype7) = breakConversion c7 val ctypes = [ctype1,ctype2,ctype3,ctype4,ctype5,ctype6,ctype7] fun from v = let val (v1,v2,v3,v4,v5,v6,v7) = break7 ctypes v in (from1 v1,from2 v2,from3 v3,from4 v4,from5 v5,from6 v6,from7 v7) end fun to (a,b,c,d,e,f,g) = make_struct (zip ctypes [to1 a,to2 b,to3 c,to4 d,to5 e,to6 f,to7 g]) in mkConversion from to (Cstruct ctypes) end fun STRUCT8 (c1,c2,c3,c4,c5,c6,c7,c8) = let val (from1,to1,ctype1) = breakConversion c1 val (from2,to2,ctype2) = breakConversion c2 val (from3,to3,ctype3) = breakConversion c3 val (from4,to4,ctype4) = breakConversion c4 val (from5,to5,ctype5) = breakConversion c5 val (from6,to6,ctype6) = breakConversion c6 val (from7,to7,ctype7) = breakConversion c7 val (from8,to8,ctype8) = breakConversion c8 val ctypes = [ctype1,ctype2,ctype3,ctype4,ctype5,ctype6,ctype7,ctype8] fun from v = let val (v1,v2,v3,v4,v5,v6,v7,v8) = break8 ctypes v in (from1 v1,from2 v2,from3 v3,from4 v4,from5 v5,from6 v6,from7 v7,from8 v8) end fun to (a,b,c,d,e,f,g,h) = make_struct (zip ctypes [to1 a,to2 b,to3 c,to4 d,to5 e,to6 f,to7 g,to8 h]) in mkConversion from to (Cstruct ctypes) end fun STRUCT9 (c1,c2,c3,c4,c5,c6,c7,c8,c9) = let val (from1,to1,ctype1) = breakConversion c1 val (from2,to2,ctype2) = breakConversion c2 val (from3,to3,ctype3) = breakConversion c3 val (from4,to4,ctype4) = breakConversion c4 val (from5,to5,ctype5) = breakConversion c5 val (from6,to6,ctype6) = breakConversion c6 val (from7,to7,ctype7) = breakConversion c7 val (from8,to8,ctype8) = breakConversion c8 val (from9,to9,ctype9) = breakConversion c9 val ctypes = [ctype1,ctype2,ctype3,ctype4,ctype5,ctype6,ctype7,ctype8,ctype9] fun from v = let val (v1,v2,v3,v4,v5,v6,v7,v8,v9) = break9 ctypes v in (from1 v1,from2 v2,from3 v3,from4 v4,from5 v5,from6 v6,from7 v7,from8 v8,from9 v9) end fun to (a,b,c,d,e,f,g,h,i) = make_struct (zip ctypes [to1 a,to2 b,to3 c,to4 d,to5 e,to6 f,to7 g,to8 h,to9 i]) in mkConversion from to (Cstruct ctypes) end fun FUNCTION0 () (cr: 'a Conversion) = let val (_, tor, ctyper) = breakConversion cr (* Convert the result type. *) fun from v = raise Foreign "Conversion from C function to ML function is not implemented" (* Construct a wrapper function. The argument is ignored and the result is converted into a vol.*) fun convF f _ = tor(f()) fun to (f: unit->'a) : vol = toCfunction [] ctyper (convF f) in mkConversion from to (Cfunction ([], ctyper)) end; fun PASCALFUNCTION0 () cr = let val (_, tor, ctyper) = breakConversion cr (* Convert the result type. *) fun from v = raise Foreign "Conversion from C function to ML function is not implemented" fun convF f _ = tor(f()) fun to f = toPascalfunction [] ctyper (convF f) in mkConversion from to (Cfunction ([], ctyper)) end; fun FUNCTION1 c1 cr = let val (from1,_,ctype1) = breakConversion c1 val (_,tor,ctyper) = breakConversion cr fun from v = raise Foreign "Conversion from C function to ML function is not implemented" (* The wrapper function. We need a single argument. *) fun convF f [a] = tor(f(from1 a)) | convF _ _ = raise Union.Never "arg mismatch" fun to f : vol = toCfunction [ctype1] ctyper (convF f) in mkConversion from to (Cfunction ([ctype1], ctyper)) end; fun PASCALFUNCTION1 c1 cr = let val (from1,_,ctype1) = breakConversion c1 val (_,tor,ctyper) = breakConversion cr fun from v = raise Foreign "Conversion from C function to ML function is not implemented" fun convF f [a] = tor(f(from1 a)) | convF _ _ = raise Union.Never "arg mismatch" fun to f : vol = toPascalfunction [ctype1] ctyper (convF f) in mkConversion from to (Cfunction ([ctype1], ctyper)) end; fun FUNCTION2 (c1, c2) cr = let val (from1,_,ctype1) = breakConversion c1 val (from2,_,ctype2) = breakConversion c2 val (_,tor,ctyper) = breakConversion cr fun from v = raise Foreign "Conversion from C function to ML function is not implemented" fun convF f [a,b] = tor(f(from1 a, from2 b)) | convF _ _ = raise Union.Never "arg mismatch" fun to f = toCfunction [ctype1, ctype2] ctyper (convF f) in mkConversion from to (Cfunction ([ctype1, ctype2], ctyper)) end; fun PASCALFUNCTION2 (c1, c2) cr = let val (from1,_,ctype1) = breakConversion c1 val (from2,_,ctype2) = breakConversion c2 val (_,tor,ctyper) = breakConversion cr fun from v = raise Foreign "Conversion from C function to ML function is not implemented" fun convF f [a,b] = tor(f(from1 a, from2 b)) | convF _ _ = raise Union.Never "arg mismatch" fun to f = toPascalfunction [ctype1, ctype2] ctyper (convF f) in mkConversion from to (Cfunction ([ctype1, ctype2], ctyper)) end; fun FUNCTION3 (c1, c2, c3) cr = let val (from1,to1,ctype1) = breakConversion c1 val (from2,to2,ctype2) = breakConversion c2 val (from3,to3,ctype3) = breakConversion c3 val (fromr,tor,ctyper) = breakConversion cr fun from v = raise Foreign "Conversion from C function to ML function is not implemented" fun convF f [a,b,c] = tor(f(from1 a, from2 b, from3 c)) | convF _ _ = raise Union.Never "arg mismatch" fun to f = toCfunction [ctype1, ctype2, ctype3] ctyper (convF f) in mkConversion from to (Cfunction ([ctype1, ctype2, ctype3], ctyper)) end; fun PASCALFUNCTION3 (c1, c2, c3) cr = let val (from1,to1,ctype1) = breakConversion c1 val (from2,to2,ctype2) = breakConversion c2 val (from3,to3,ctype3) = breakConversion c3 val (fromr,tor,ctyper) = breakConversion cr fun from v = raise Foreign "Conversion from C function to ML function is not implemented" fun convF f [a,b,c] = tor(f(from1 a, from2 b, from3 c)) | convF _ _ = raise Union.Never "arg mismatch" fun to f = toPascalfunction [ctype1, ctype2, ctype3] ctyper (convF f) in mkConversion from to (Cfunction ([ctype1, ctype2, ctype3], ctyper)) end; fun FUNCTION4 (c1, c2, c3, c4) cr = let val (from1,to1,ctype1) = breakConversion c1 val (from2,to2,ctype2) = breakConversion c2 val (from3,to3,ctype3) = breakConversion c3 val (from4,to4,ctype4) = breakConversion c4 val (fromr,tor,ctyper) = breakConversion cr fun from v = raise Foreign "Conversion from C function to ML function is not implemented" fun convF f [a,b,c,d] = tor(f(from1 a, from2 b, from3 c, from4 d)) | convF _ _ = raise Union.Never "arg mismatch" fun to f = toCfunction [ctype1, ctype2, ctype3, ctype4] ctyper (convF f) in mkConversion from to (Cfunction ([ctype1, ctype2, ctype3, ctype4], ctyper)) end; fun PASCALFUNCTION4 (c1, c2, c3, c4) cr = let val (from1,to1,ctype1) = breakConversion c1 val (from2,to2,ctype2) = breakConversion c2 val (from3,to3,ctype3) = breakConversion c3 val (from4,to4,ctype4) = breakConversion c4 val (fromr,tor,ctyper) = breakConversion cr fun from v = raise Foreign "Conversion from C function to ML function is not implemented" fun convF f [a,b,c,d] = tor(f(from1 a, from2 b, from3 c, from4 d)) | convF _ _ = raise Union.Never "arg mismatch" fun to f = toPascalfunction [ctype1, ctype2, ctype3, ctype4] ctyper (convF f) in mkConversion from to (Cfunction ([ctype1, ctype2, ctype3, ctype4], ctyper)) end; (* val FUNCTION : 'a Conversion * 'b Conversion -> ( 'a -> 'b ) Conversion val PASCALFUNCTION : 'a Conversion * 'b Conversion -> ( 'a -> 'b ) Conversion *) end (* struct *) polyml.5.2.1/mlsource/extra/CInterface/StructConversionals.ML0000644000175000017500000000177410313043361023242 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure StructConversionals = STRUCT_CONVERSIONALS (structure CallWithConv = CallWithConv structure Struct = Struct structure ForeignException = ForeignException structure LowerLevel = LowerLevel); polyml.5.2.1/mlsource/extra/CInterface/StructConversionalsSig.ML0000644000175000017500000000600310506226530023700 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) signature StructConversionalsSig = sig type 'a Conversion val STRUCT2 : 'a Conversion * 'b Conversion -> ('a * 'b) Conversion val STRUCT3 : 'a Conversion * 'b Conversion * 'c Conversion -> ('a * 'b * 'c) Conversion val STRUCT4 : 'a Conversion * 'b Conversion * 'c Conversion * 'd Conversion -> ('a * 'b * 'c * 'd) Conversion val STRUCT5 : 'a Conversion * 'b Conversion * 'c Conversion * 'd Conversion * 'e Conversion -> ('a * 'b * 'c * 'd * 'e) Conversion val STRUCT6 : 'a Conversion * 'b Conversion * 'c Conversion * 'd Conversion * 'e Conversion * 'f Conversion -> ('a * 'b * 'c * 'd * 'e * 'f) Conversion val STRUCT7 : 'a Conversion * 'b Conversion * 'c Conversion * 'd Conversion * 'e Conversion * 'f Conversion * 'g Conversion -> ('a * 'b * 'c * 'd * 'e * 'f * 'g) Conversion val STRUCT8 : 'a Conversion * 'b Conversion * 'c Conversion * 'd Conversion * 'e Conversion * 'f Conversion * 'g Conversion * 'h Conversion -> ('a * 'b * 'c * 'd * 'e * 'f * 'g * 'h) Conversion val STRUCT9 : 'a Conversion * 'b Conversion * 'c Conversion * 'd Conversion * 'e Conversion * 'f Conversion * 'g Conversion * 'h Conversion * 'i Conversion -> ('a * 'b * 'c * 'd * 'e * 'f * 'g * 'h * 'i) Conversion val FUNCTION0 : unit -> 'a Conversion -> ( unit -> 'a ) Conversion val PASCALFUNCTION0 : unit -> 'a Conversion -> ( unit -> 'a ) Conversion val FUNCTION1 : 'a Conversion -> 'b Conversion -> ( 'a -> 'b ) Conversion val PASCALFUNCTION1 : 'a Conversion -> 'b Conversion -> ( 'a -> 'b ) Conversion val FUNCTION2 : 'a Conversion * 'b Conversion -> 'c Conversion -> ( 'a * 'b -> 'c) Conversion val PASCALFUNCTION2 : 'a Conversion * 'b Conversion -> 'c Conversion -> ( 'a * 'b -> 'c) Conversion val FUNCTION3 : 'a Conversion * 'b Conversion * 'c Conversion -> 'd Conversion -> ( 'a * 'b * 'c -> 'd) Conversion val PASCALFUNCTION3 : 'a Conversion * 'b Conversion * 'c Conversion -> 'd Conversion -> ( 'a * 'b * 'c -> 'd) Conversion val FUNCTION4 : 'a Conversion * 'b Conversion * 'c Conversion * 'd Conversion -> 'e Conversion -> ( 'a * 'b * 'c * 'd -> 'e) Conversion val PASCALFUNCTION4 : 'a Conversion * 'b Conversion * 'c Conversion * 'd Conversion -> 'e Conversion -> ( 'a * 'b * 'c * 'd -> 'e) Conversion end polyml.5.2.1/mlsource/extra/CInterface/StructSig.ML0000644000175000017500000000172110313043361021127 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) signature StructSig = sig type vol structure Ctype : CtypeSig val break_struct : Ctype.Ctype list -> vol -> vol list val make_struct : (Ctype.Ctype * vol) list -> vol end; polyml.5.2.1/mlsource/extra/CInterface/UnionSig.ML0000644000175000017500000000773010313043361020741 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (*** Defines datatypes used to communicate with new primitive: call_sym_and_convert. ***) signature UnionSig = sig (* raised if a destructor is given the wrong argument *) exception Never of string; (* datatype 'a union = Vol of 'a | Char of string | Double of real | Float of real | Int of int | Long of int | Short of int | String of string; *) type 'a union val Vol : 'a -> 'a union; val Char : char -> 'a union; val Double : real -> 'a union; val Float : real -> 'a union; val Int : int -> 'a union; val Long : int -> 'a union; val Short : int -> 'a union; val String : string -> 'a union; val Uint : int -> 'a union; val isVol : 'a union -> bool; val isChar : 'a union -> bool; val isDouble : 'a union -> bool; val isFloat : 'a union -> bool; val isInt : 'a union -> bool; val isLong : 'a union -> bool; val isShort : 'a union -> bool; val isString : 'a union -> bool; val isUint : 'a union -> bool; val deVol : 'a union -> 'a; val deChar : 'a union -> char; val deDouble : 'a union -> real; val deFloat : 'a union -> real; val deInt : 'a union -> int; val deLong : 'a union -> int; val deShort : 'a union -> int; val deString : 'a union -> string; val deUint : 'a union -> int; (* ... datatype 'ctype unionChoice = chooseVol of 'ctype | chooseChar | chooseDouble | chooseFloat | chooseInt | chooseLong | chooseShort | chooseString; ... *) type 'a unionChoice; val chooseChar : 'a unionChoice; val chooseDouble : 'a unionChoice; val chooseFloat : 'a unionChoice; val chooseInt : 'a unionChoice; val chooseLong : 'a unionChoice; val chooseShort : 'a unionChoice; val chooseString : 'a unionChoice; val chooseVol : 'a -> 'a unionChoice; val chooseUint : 'a unionChoice; val isChooseChar : 'a unionChoice -> bool; val isChooseDouble : 'a unionChoice -> bool; val isChooseFloat : 'a unionChoice -> bool; val isChooseInt : 'a unionChoice -> bool; val isChooseLong : 'a unionChoice -> bool; val isChooseShort : 'a unionChoice -> bool; val isChooseString : 'a unionChoice -> bool; val isChooseVol : 'a unionChoice -> bool; val isChooseUint : 'a unionChoice -> bool; val deChooseVol : 'a unionChoice -> 'a; (* ... datatype ('ctype, 'vol) directedArg = In of ('ctype * 'vol) union | Out of 'ctype unionChoice; ... *) type ('a,'b) directedArg; val In : ('a * 'b) union -> ('a,'b) directedArg; val Out : 'a unionChoice -> ('a,'b) directedArg; val isIn : ('a,'b) directedArg -> bool; val isOut : ('a,'b) directedArg -> bool ; val deIn : ('a,'b) directedArg -> ('a * 'b) union; val deOut : ('a,'b) directedArg -> 'a unionChoice; val mapUnion : ('a -> 'b) -> 'a union -> 'b union val mapUnionChoice : ('a -> 'b) -> 'a unionChoice -> 'b unionChoice val mapDirectedArg : ('a -> 'b) -> ('c -> 'd) -> ('a, 'c) directedArg -> ('b, 'd) directedArg end; polyml.5.2.1/mlsource/extra/CInterface/VOLS_THAT_HOLD_REFS.ML0000644000175000017500000002355610313043361022242 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (*** Implementaion of a wrapper for the raw C programming primitives, which provides the means for holding onto ML objects to avoid GC. ***) (* I think the idea here is to allow C data structures to be built up. If we allocate a C object using the low-level "alloc" function it may be freed by the GC if the corresponding ML object is no longer referenced. We don't want that to happen if we have stored a pointer to this C object in another C object. Only if the root of the whole structure is no longer reachable do we want the objects within the structure to be freed. DCJM 30/4/01. I've modified this to make it more efficient, particularly for large arrays. DCJM 27/6/01. *) (********************************************************************** * Functor Definition **********************************************************************) functor VOLS_THAT_HOLD_REFS (structure Underlying : VolatileSig structure ForeignException : ForeignExceptionSig) :> VolatileSig = struct structure Ctype = Underlying.Ctype structure BehaviourRefs = Underlying.BehaviourRefs structure Union = Underlying.Union val sizeof = Ctype.sizeof; open ForeignException open Union (*..... datatype owner = Owner of rawvol * dependancy ref list and vol = Vol of rawvol * dependancy where type dependancy = (int * owner) option .....*) (* The int records information for offset *) datatype owner = Owner of Underlying.vol * ownerOpt Array.array ref and ownerOpt = None | Some of int * owner (* This is more storage efficient than using "option". *) type vol = {thevol: Underlying.vol, depends: ownerOpt} fun vol(thevol, depends) = {thevol = thevol, depends = depends} val thevol: vol -> Underlying.vol = #thevol and depends: vol -> ownerOpt = #depends val PointerSize = sizeof (Ctype.Cpointer Ctype.Cvoid) val MaxVectorSize = 20 (* Maximum initial size of the dependency array. *) fun selfOwner v deps = (****** * Create a vol that `owns' itself, with dependencies "deps". ******) vol (v,Some(0,Owner(v, ref deps))) (*********************************************************************** a = alloc(n) ***********************************************************************) (* "alloc" allocates a new region of memory. The dependencies are initialised to None. If the region is large we don't allocate a dependency array that big at this stage. Instead we grow the array later if necessary. Typically large arrays are byte arrays and they don't actually have dependencies. *) fun alloc n ctype = let val m = n * sizeof ctype val v = Underlying.alloc n ctype in selfOwner v (Array.array(Int.min(m div PointerSize, MaxVectorSize), None)) end (*********************************************************************** a = &b ***********************************************************************) (* "address" creates a new vol containing the address of an existing one. We create a single element array to hold the dependencies. *) fun address ({thevol, depends}: vol) = let val v = Underlying.address thevol in selfOwner v (Array.array (1, depends)) end (*********************************************************************** a = *b ***********************************************************************) (* "deref" returns the value at the appropriate offset. The dependency is the dependency at the corresponding (word) offset. (We need to do this if, for example, we have created a list in the C space. If we extract the tail of a cell we need to hang on to the rest of the list.) *) fun deref({thevol, depends}: vol) = vol (Underlying.deref thevol, case depends of None => None | Some(i, Owner(_, ref refs)) => if i mod PointerSize <> 0 then None else let val j = i div PointerSize in if j < 0 orelse j >= Array.length refs then None else Array.sub(refs, j) end) (*********************************************************************** a = b.X (offset n objects of type ctype) [*a = ( char* )&b + n] ***********************************************************************) (* "offset" gives us a new address based on the old one. We shift the origin of the dependency index by the appropriate amount. Because offset can be applied to this vol to give a new address we can't select the dependency at this offset yet. This is where the self-owner comes in. Although we're creating a new vol here we need to retain the original vol in the event of a GC. *) fun offset n ctype ({thevol, depends}: vol) = let val m = n * sizeof ctype in vol (Underlying.offset n ctype thevol, case depends of None => None | Some (i,x) => Some (i+m, x)) end (*********************************************************************** a := b (n bytes) ***********************************************************************) (* When we make an assignment of h into g we update the dependencies of g to point to the dependencies of h. We may have to grow the destination array. *) fun assign ctype g h = let val n = sizeof ctype in case (depends g, depends h) of (Some(i, Owner(_, drefs as ref destRefs)), Some(j, Owner(_, ref sourceRefs))) => (* We only copy the references if we're moving at least a word and the source and destinations are word aligned. We also skip this if the offsets are negative. It's just possible that there might be a C function which would return an area of memory with a pointer offset within it. In that case we don't want to raise a Subscript exception but I don't know how to deal with the dependencies. *) if n < PointerSize orelse i mod PointerSize <> 0 orelse j mod PointerSize <> 0 orelse i < 0 orelse j < 0 then () else let (* Neither the source array nor the destination array may be big enough. *) val di = i div PointerSize (* Starting offset in dest. *) val si = j div PointerSize (* Starting offset in source. *) val maxLen = n div PointerSize (* Words to copy. *) val sLen = Array.length sourceRefs val toCopy = if si + maxLen <= sLen then maxLen else sLen - si in if toCopy <= 0 then () (* Nothing in the source to copy. *) else let val diMax = di + toCopy (* Maximum offset. *) val dLen = Array.length destRefs val dVec = if dLen < diMax then (* Need to grow array. *) let val newSize = Int.max(diMax, dLen + dLen div 2) val newArray = Array.array(newSize, None) in (* Copy the old dependencies *) Array.copy{dst = newArray, src = destRefs, di = 0}; drefs := newArray; (* Remember this new array. *) newArray end else destRefs in (* Copy the dependencies being updated by the assignment. *) ArraySlice.copy{dst = dVec, src = ArraySlice.slice(sourceRefs, si, SOME toCopy), di = di} end end | _ => (); Underlying.assign ctype (thevol g) (thevol h) end (********************************************************************** From / To C values **********************************************************************) fun makeVol v = selfOwner v (Array.array(1, None)) fun load_lib s = makeVol (Underlying.load_lib s) fun load_sym ({thevol, ...}: vol) s = makeVol (Underlying.load_sym thevol s) fun ID x = x; fun call_sym_and_convert g args rt = let val (u,us) = Underlying.call_sym_and_convert (thevol g) (map (mapDirectedArg ID thevol) args) rt in (mapUnion makeVol u, map (mapUnion makeVol) us) end; val toCchar = makeVol o Underlying.toCchar val toCdouble = makeVol o Underlying.toCdouble val toCfloat = makeVol o Underlying.toCfloat val toCint = makeVol o Underlying.toCint val toClong = makeVol o Underlying.toClong val toCshort = makeVol o Underlying.toCshort val toCstring = makeVol o Underlying.toCstring val toCuint = makeVol o Underlying.toCuint val toCbytes = makeVol o Underlying.toCbytes val fromCchar = Underlying.fromCchar o thevol val fromCdouble = Underlying.fromCdouble o thevol val fromCfloat = Underlying.fromCfloat o thevol val fromCint = Underlying.fromCint o thevol val fromClong = Underlying.fromClong o thevol val fromCshort = Underlying.fromCshort o thevol val fromCstring = Underlying.fromCstring o thevol val fromCuint = Underlying.fromCuint o thevol val fillCstring = Underlying.fillCstring o thevol fun fromCbytes(v, i) = Underlying.fromCbytes(thevol v, i) (* DCJM 7/4/04. I've added these although I suspect that they need to do more than they're currently doing. *) fun toCfunction argType resType (f: vol list -> vol) = let fun appF (args: Underlying.vol list) : Underlying.vol = let in thevol (f (map makeVol args)) end in makeVol (Underlying.toCfunction argType resType appF) end fun toPascalfunction argType resType (f: vol list -> vol) = let fun appF (args: Underlying.vol list) : Underlying.vol = let in thevol (f (map makeVol args)) end in makeVol (Underlying.toPascalfunction argType resType appF) end end (* struct *) polyml.5.2.1/mlsource/extra/CInterface/VOL_BASIC.ML0000644000175000017500000000340110313043361020536 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) functor VOL_BASIC (structure Ctype : CtypeSig structure BehaviourRefs : BehaviourRefsSig structure Dispatch : DispatchSig sharing type Dispatch.RawCtype = Ctype.RawCtype ) : VolatileSig = struct structure BehaviourRefs = BehaviourRefs; structure Ctype = Ctype structure Union = Dispatch.Union; open Dispatch type vol = rawvol open Union open Ctype fun offset i ct v = Dispatch.offset v (i * sizeof ct) fun alloc i ct = Dispatch.alloc (i * sizeof ct) fun assign ct v w = Dispatch.assign v w (sizeof ct) fun ID x = x; fun call_sym_and_convert v args rt = Dispatch.call_sym_and_convert v (map (mapDirectedArg makeRaw ID) args) (mapUnionChoice makeRaw rt) fun toCfunction argType resType f = let in Dispatch.toCfunction (map makeRaw argType) (makeRaw resType) f end fun toPascalfunction argType resType f = let in Dispatch.toPascalfunction (map makeRaw argType) (makeRaw resType) f end end; polyml.5.2.1/mlsource/extra/CInterface/VolBasic.ML0000644000175000017500000000165210313043361020705 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure VolBasic = VOL_BASIC(structure Dispatch = Dispatch structure BehaviourRefs = BehaviourRefs structure Ctype = Ctype); polyml.5.2.1/mlsource/extra/CInterface/VolatileSig.ML0000644000175000017500000000437010313043361021425 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* All volatile implementations must have this signature *) signature VolatileSig = sig type vol structure Ctype : CtypeSig structure BehaviourRefs : BehaviourRefsSig val load_lib : string -> vol val load_sym : vol -> string -> vol structure Union : UnionSig val call_sym_and_convert : vol -> (Ctype.Ctype, vol) Union.directedArg list -> Ctype.Ctype Union.unionChoice -> (vol Union.union * vol Union.union list) val alloc : int -> Ctype.Ctype -> vol val address : vol -> vol val deref : vol -> vol val offset : int -> Ctype.Ctype -> vol -> vol val assign : Ctype.Ctype -> vol -> vol -> unit val toCchar : char -> vol val toCdouble : real -> vol val toCfloat : real -> vol val toCint : int -> vol val toClong : int -> vol val toCshort : int -> vol val toCuint : int -> vol val fromCchar : vol -> char val fromCdouble : vol -> real val fromCfloat : vol -> real val fromCint : vol -> int val fromClong : vol -> int val fromCshort : vol -> int val fromCuint : vol -> int val fillCstring : vol -> string -> unit val toCstring : string -> vol val fromCstring : vol -> string val toCbytes : Word8Vector.vector -> vol val fromCbytes : vol * int -> Word8Vector.vector val toCfunction : Ctype.Ctype list -> Ctype.Ctype -> (vol list -> vol) -> vol val toPascalfunction : Ctype.Ctype list -> Ctype.Ctype -> (vol list -> vol) -> vol end; polyml.5.2.1/mlsource/extra/CInterface/clean.sml0000644000175000017500000000316710506226530020560 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* Clean up the name space by removing unnecessary declarations. *) val _ = List.app PolyML.Compiler.forgetSignature ["ForeignExceptionSig", "CallWithConvSig", "ConversionsSig", "ForeignDebugSig", "LowerLevelSig", "BehaviourRefsSig", "StructSig", "DispatchSig", "VolatileSig", "ForeignExceptionSig_Import", "OrigLowerLevelSig", "StructConversionalsSig", "UnionSig", "CtypeSig"]; val _ = List.app PolyML.Compiler.forgetStructure [ "LowerLevel", "ForeignDebug", "VolBasic", "Struct", "Dispatch", "Volatile", "Ctype", "StructConversionals", "CallWithConv", "BehaviourRefs", "ForeignException", "Conversions" ]; val _ = List.app PolyML.Compiler.forgetFunctor ["STRUCT", "CTYPE_SAVE_SIZEOF", "CINTERFACE", "CALL_WITH_CONV", "STRUCT_CONVERSIONALS", "CTYPE", "CONVERSIONS", "VOLS_THAT_HOLD_REFS", "VOL_BASIC"]; polyml.5.2.1/mlsource/extra/CInterface/ml_bind.ML0000644000175000017500000000226110313043361020604 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure CInterface (*: CInterfaceSig*) = CINTERFACE (structure ForeignException = ForeignException structure ForeignDebug = ForeignDebug structure LowerLevel = LowerLevel structure CallWithConv = CallWithConv structure Struct = Struct structure Conversions = Conversions structure StructConversionals = StructConversionals); polyml.5.2.1/mlsource/extra/CInterface/Ctype/0000755000175000017500000000000011100060550020023 5ustar daviddavidpolyml.5.2.1/mlsource/extra/CInterface/Ctype/CTYPE.ML0000644000175000017500000000734210313043361021155 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (********************************************************************** * Functor Definition **********************************************************************) functor CTYPE (structure Dispatch : DispatchSig) : CtypeSig = struct exception IllegalUseOfVoid; datatype Ctype = Cchar | Cdouble | Cfloat | Cint | Clong | Cshort | Cuint | Cpointer of Ctype | Cstruct of Ctype list | Cfunction of Ctype list * Ctype | Cvoid (* generally usefull definition *) val voidStar = Cpointer Cvoid; fun max x y = if (x:int) >= y then x else y fun maxlist [] acc = acc | maxlist (x::xs) acc = maxlist xs (max x acc) fun alignment Cchar = Dispatch.alignment Dispatch.Cchar | alignment Cdouble = Dispatch.alignment Dispatch.Cdouble | alignment Cfloat = Dispatch.alignment Dispatch.Cfloat | alignment Cint = Dispatch.alignment Dispatch.Cint | alignment Clong = Dispatch.alignment Dispatch.Clong | alignment Cshort = Dispatch.alignment Dispatch.Cshort | alignment Cuint = Dispatch.alignment Dispatch.Cuint | alignment (Cpointer _) = Dispatch.alignment Dispatch.Cpointer | alignment (Cfunction _) = Dispatch.alignment Dispatch.Cpointer | alignment (Cstruct ts) = maxlist (map alignment ts) 1 | alignment Cvoid = raise IllegalUseOfVoid fun align n t = (****** * returns first integer >= n * that satisfies alignment restructions of the ctype t ******) let val a = alignment t in a*((n-1) div a+1) end fun sizeof Cchar = Dispatch.sizeof Dispatch.Cchar | sizeof Cdouble = Dispatch.sizeof Dispatch.Cdouble | sizeof Cfloat = Dispatch.sizeof Dispatch.Cfloat | sizeof Cint = Dispatch.sizeof Dispatch.Cint | sizeof Clong = Dispatch.sizeof Dispatch.Clong | sizeof Cshort = Dispatch.sizeof Dispatch.Cshort | sizeof (Cpointer _) = Dispatch.sizeof Dispatch.Cpointer | sizeof Cuint = Dispatch.sizeof Dispatch.Cuint | sizeof (Cfunction _) = Dispatch.sizeof Dispatch.Cpointer | sizeof (Cstruct ts) = align (sizes 0 ts) (Cstruct ts) | sizeof Cvoid = raise IllegalUseOfVoid and sizes acc [] = acc | sizes acc (t::ts) = sizes (align acc t + sizeof t) ts type RawCtype = Dispatch.RawCtype; fun makeRaw Cchar = Dispatch.Cchar | makeRaw Cdouble = Dispatch.Cdouble | makeRaw Cfloat = Dispatch.Cfloat | makeRaw Cint = Dispatch.Cint | makeRaw Clong = Dispatch.Clong | makeRaw Cshort = Dispatch.Cshort | makeRaw Cuint = Dispatch.Cuint | makeRaw (Cpointer _) = Dispatch.Cpointer | makeRaw (Cfunction _) = Dispatch.Cpointer (*Always the same as a pointer?*) | makeRaw (t as Cstruct ts) = Dispatch.Cstruct (sizeof t) | makeRaw Cvoid = Dispatch.Cint (*hack*) end; (* struct *) polyml.5.2.1/mlsource/extra/CInterface/Ctype/ml_bind.ML0000644000175000017500000000155510313043361021675 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure Ctype = CTYPE_SAVE_SIZEOF (CTYPE (structure Dispatch = Dispatch)); polyml.5.2.1/mlsource/extra/CInterface/Examples/0000755000175000017500000000000011100060550020515 5ustar daviddavidpolyml.5.2.1/mlsource/extra/CInterface/Examples/Foreign.def0000644000175000017500000000026310735747061022615 0ustar daviddavid; Exports file for DLL LIBRARY "Foreign" DESCRIPTION 'ForeignTest Dynamic Link Library' EXPORTS DupNString SumTree ReturnR2 MakeCallback MakeCallback2 MakeCallback3 polyml.5.2.1/mlsource/extra/CInterface/Examples/ForeignTest.c0000644000175000017500000000426210735746331023143 0ustar daviddavid/* Example code for a C-library accessible from ML using the CInterface structure. Copyright David C.J. Matthews 1999 This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ /* Linux: cc -shared -o Foreign ForeignTest.c Windows: cl /MT ForeignTest.c /link /dll /out:Foreign.dll /def:Foreign.def Mac OS X : cc -dynamiclib -o Foreign.dylib ForeignTest.c */ #include #include /* Return a string duplicated n Times. */ char *DupNString(int n, char *str) { int nSize = strlen(str); char *res = malloc(n*nSize + 1); int i; *res = 0; for (i = 0; i < n; i++) strcat(res, str); return res; } typedef struct _tree { struct _tree *left, *right; int nValue; } *tree; int SumTree(tree t) { if (t == NULL) return 0; else return t->nValue + SumTree(t->left) + SumTree(t->right); } /* Tests to see whether small structures are returned specially. */ struct r2 { int n, m; }; struct r2 ReturnR2(int n, int m) { struct r2 ret; ret.n = n+1; ret.m = m+1; return ret; } /* Added. Callback function. */ typedef int (*INT_INT_CALLBACK) (int a, int b); int MakeCallback(int i, INT_INT_CALLBACK p) { return (*p)(i, 4) + (*p)(i+1, 5); } /* Another callback function. This tests the various argument types. */ typedef double (*DBL_CALLBACK) (int a, char b, double c, float d, short e, int *f); double MakeCallback2(DBL_CALLBACK p) { int x = 1; double y = p(12345, 'X', (double)1.414, (float)2.8, 44, &x); return y; } // Check that void results work for callbacks. void MakeCallback3(void(*mlcall)(int), int i) { mlcall(i+1); } polyml.5.2.1/mlsource/extra/CInterface/Examples/ForeignTest.sml0000644000175000017500000001011410735746331023505 0ustar daviddavid(* Example code for a C-library accessible from ML using the CInterface structure. Copyright David C.J. Matthews 1999-2006 This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) open CInterface; val mylib = CInterface.load_lib "Foreign"; (* Example of creating a conversion for a datatype. *) datatype intTree = NullTree | Node of {left: intTree, right: intTree, valu: int}; (* The corresponding C structure is typedef struct _tree { struct _tree *left, *right; int nValue; } *tree; *) local (* Start with the C structure. *) val TREENODE = STRUCT3(POINTER, POINTER, INT); val (unMakeStruct, mkStruct, structType) = breakConversion TREENODE; in (* The following function builds a C data structure from an ML datatype. *) fun tree2vol NullTree: vol = toCint 0 | tree2vol (Node{left, right, valu}) = let (* Construct a struct from the values. *) val str = mkStruct(tree2vol left, tree2vol right, valu) (* Allocate a struct on the heap. *) val v = alloc 1 structType in (* Copy it over *) assign structType v str; (* Return the address of the heap area. *) address v end; (* The inverse of tree2vol. We don't actually use this in this example. *) fun vol2tree v = if fromCint v = 0 then NullTree else let val struc = deref v (* Get the structure itself from the pointer. *) val (left, right, valu) = unMakeStruct struc in Node{left=vol2tree left, right=vol2tree right, valu = valu } end end; (* Build a conversion out of this. *) val TREE = mkConversion vol2tree tree2vol voidStar; val sumTree = CInterface.call1 ( CInterface.load_sym mylib "SumTree") TREE INT; val aTree = Node{left=Node{left=NullTree, right=NullTree, valu=4}, right=Node{ left= Node{left=NullTree, right=NullTree, valu=3}, right=NullTree, valu=5}, valu = 7}; sumTree aTree; (* Example of returning a structure. *) val returnR2 = CInterface.call2 ( CInterface.load_sym mylib "ReturnR2") (CInterface.INT, CInterface.INT) (STRUCT2(CInterface.INT, CInterface.INT)); (* This function crashes the old version. Now fixed. *) returnR2(5,6); (* Example of passing and returning strings. *) val dupNString = CInterface.call2 (CInterface.load_sym mylib "DupNString") (CInterface.INT, CInterface.STRING) CInterface.STRING; dupNString (4, "hi"); (* Example of a callback function. *) fun f (i, j) = (PolyML.print(i, j); i+j); val doAdd = call2 (load_sym mylib "MakeCallback") (INT, FUNCTION2 (INT, INT) INT) INT; doAdd(4, f); (* Check that an exception is properly propagated. *) (* This doesn't work if the library has been compiled with GCC. Foreign.c is C code not C++ and the C++ exception mechanism won't propagate a C++ exception through C code. *) (* doAdd(4, fn _ => raise Fail "failed"); *) (* int a, char b, double c, float d, short e, int *f *) fun myCallback [v1, v2, v3, v4, v5, v6] = let val a = fromCint v1; val b = fromCchar v2; val c = fromCdouble v3; val d = fromCfloat v4; val e = fromCshort v5 (* f ? *) in PolyML.print(a, b, c, d, e); toCdouble 99.0 end | myCallback _ = toCint 1234; val myCbVol = toCfunction [Cint, Cchar, Cdouble, Cfloat, Cshort, Cpointer Cint] Cdouble myCallback; val returnR3 = call_sym (load_sym mylib "MakeCallback2") [(Cpointer Cint, myCbVol) ] Cdouble; fromCdouble returnR3; val doit = call2(load_sym mylib "MakeCallback3") (FUNCTION1 INT VOID, INT) VOID; doit(fn i => print(Int.toString i), 2); polyml.5.2.1/mlsource/extra/CInterface/Struct/0000755000175000017500000000000011100060550020223 5ustar daviddavidpolyml.5.2.1/mlsource/extra/CInterface/Struct/STRUCT.ML0000644000175000017500000000356310313043361021516 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (********************************************************************** * * Functor Definition * **********************************************************************) functor STRUCT (structure LowerLevel : LowerLevelSig) : StructSig = struct open LowerLevel open Ctype local fun offsets acc [] = [] | offsets acc (t::ts) = let val pos = align acc t in pos :: offsets (pos + sizeof t) ts end in val offsets = offsets 0 end exception Zip; fun zip [] [] = [] | zip (x::xs) (y::ys) = (x,y) :: zip xs ys | zip _ _ = raise Zip; fun unzip [] = ([],[]) | unzip ((x,y)::xys) = let val (xs,ys) = unzip xys in (x::xs,y::ys) end; fun assigns (t::ts) (l::ls) (r::rs) = (assign t l r; assigns ts ls rs) | assigns _ _ _ = (); fun make_struct xs = let val (types,values) = unzip xs val space = alloc 1 (Cstruct types) val locations = map (fn n => offset n Cchar space) (offsets types) in assigns types locations values; space end fun break_struct types v = map (fn n => offset n Cchar v) (offsets types) end (* struct *) polyml.5.2.1/mlsource/extra/CInterface/Struct/ml_bind.ML0000644000175000017500000000153110313043361022067 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure Struct = STRUCT(structure LowerLevel = LowerLevel); polyml.5.2.1/mlsource/extra/CInterface/Volatile/0000755000175000017500000000000011100060550020516 5ustar daviddavidpolyml.5.2.1/mlsource/extra/CInterface/Volatile/Volatile.ml0000644000175000017500000002122010313043361022632 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (*** Implementaion of a wrapper for the raw C programming primitives, which provides the means for holding onto ML objects to avoid GC. Also Convert between Ctype & RawCtype where necessary. ***) signature VOLATILE_SIG = sig type vol type Ctype val load_lib : string -> vol val load_sym : vol -> string -> vol val call_sym : vol -> (Ctype * vol) list -> Ctype -> vol val alloc : int -> Ctype -> vol val address : vol -> vol val deref : vol -> vol val offset : int -> Ctype -> vol -> vol val assign : Ctype -> vol -> vol -> unit val toCchar : string -> vol val toCdouble : real -> vol val toCfloat : real -> vol val toCint : int -> vol val toClong : int -> vol val toCshort : int -> vol val toCuint : int -> vol val fromCchar : vol -> string val fromCdouble : vol -> real val fromCfloat : vol -> real val fromCint : vol -> int val fromClong : vol -> int val fromCshort : vol -> int val fromCuint : vol -> int end signature DISPATCH_SIG = sig type rawvol type RawCtype val load_lib : string -> rawvol val load_sym : rawvol -> string -> rawvol val call_sym : rawvol -> (RawCtype * rawvol) list -> RawCtype -> rawvol val alloc : int -> rawvol val address : rawvol -> rawvol val deref : rawvol -> rawvol val offset : rawvol -> int -> rawvol val assign : rawvol -> rawvol -> int -> unit val toCchar : string -> rawvol val toCdouble : real -> rawvol val toCfloat : real -> rawvol val toCint : int -> rawvol val toClong : int -> rawvol val toCshort : int -> rawvol val fromCchar : rawvol -> string val fromCdouble : rawvol -> real val fromCfloat : rawvol -> real val fromCint : rawvol -> int val fromClong : rawvol -> int val fromCshort : rawvol -> int end; signature RAW_CTYPE_SIG = sig datatype RawCtype = Cchar | Cdouble | Cfloat | Cint | Clong | Cpointer | Cshort | Cuint | Cstruct of int end; signature CTYPE_SIG = sig datatype Ctype = Cchar | Cdouble | Cfloat | Cint | Clong | Cshort | Cuint | Cpointer of Ctype | Cstruct of Ctype list (*| Cfunction of Ctype list * Ctype *) | Cvoid val sizeof : Ctype -> int end; signature FOREIGN_EXCEPTION_SIG = sig exception Foreign of string end; (********************************************************************** * * Functor Application * **********************************************************************) functor VOLATILE (structure Dispatch : DISPATCH_SIG structure RawCtype : RAW_CTYPE_SIG structure Ctype : CTYPE_SIG structure ForeignException : FOREIGN_EXCEPTION_SIG sharing type Dispatch.RawCtype = RawCtype.RawCtype ) : VOLATILE_SIG = struct (*** Make just type rawvol visible ***) local structure Rawvol : sig type rawvol end = Dispatch in open Rawvol end open Ctype open ForeignException (*..... datatype owner = Owner of rawvol * dependancy ref list and vol = Vol of rawvol * dependancy where type dependancy = (int * owner) option .....*) (* Local version of option *) datatype 'a option = Some of 'a | None; datatype owner = Owner of rawvol * (int * owner) option ref list abstype vol = Vol of rawvol * (int * owner) option with fun thevol (Vol (v,_)) = v fun depends (Vol (_,x)) = x val vol = Vol end val PointerSize = 4 (* DCJM: That should be obtained from bytes_per_word. *) fun copy n x = (****** * Make a list containing n elements all equal to x. ******) let fun copy' 0 acc = acc | copy' n acc = copy' (n-1) (x::acc) in if n <= 0 then [] else copy' n [] end fun drop 0 xs = xs | drop _ [] = [] | drop n (_::xs) = drop (n-1) xs; fun dependencies g = case depends g of None => [] | Some(i,Owner(_,refs)) => if i mod PointerSize = 0 then drop (i div PointerSize) refs else [] fun selfOwner v deps = (****** * Create a vol that `owns' itself, with depndancies "deps". ******) vol (v,Some(0,Owner(v,deps))) (*********************************************************************** a = alloc(n) ***********************************************************************) fun alloc n ctype = let val m = n * sizeof ctype val v = Dispatch.alloc m in selfOwner v (map ref (copy (m div PointerSize) None)) end (*********************************************************************** a = &b ***********************************************************************) fun address g = let val v = Dispatch.address (thevol g) in selfOwner v [ref (depends g)] end (*********************************************************************** a = *b ***********************************************************************) fun deref g = vol (Dispatch.deref (thevol g), case (dependencies g) of [] => None | (r::_) => !r) (*********************************************************************** a = b.X (offset n objects of type ctype) [*a = ( char* )&b + n] ***********************************************************************) fun offset n ctype g = let val m = n * sizeof ctype in vol (Dispatch.offset (thevol g) m, case depends g of None => None | Some (i,x) => Some (i+m, x)) end (*********************************************************************** a := b (n bytes) ***********************************************************************) fun copyRefs 0 _ _ = () | copyRefs n (g::gs) (h::hs) = (g := !h; copyRefs (n-1) gs hs) | copyRefs _ _ _ = () fun assign ctype g h = let val n = sizeof ctype in (copyRefs (n div 4) (dependencies g) (dependencies h); Dispatch.assign (thevol g) (thevol h) n) end (********************************************************************** From / To C values **********************************************************************) fun makeVol v = selfOwner v [] fun load_lib s = makeVol (Dispatch.load_lib s) handle Foreign mes => raise (Foreign ("load_lib "^s^": "^mes)) fun load_sym g s = makeVol (Dispatch.load_sym (thevol g) s) handle Foreign mes => raise (Foreign ("load_sym "^s^": "^mes)) fun convertRawCtype Cchar = RawCtype.Cchar | convertRawCtype Cdouble = RawCtype.Cdouble | convertRawCtype Cfloat = RawCtype.Cfloat | convertRawCtype Cint = RawCtype.Cint | convertRawCtype Clong = RawCtype.Clong | convertRawCtype Cshort = RawCtype.Cshort | convertRawCtype Cuint = RawCtype.Cuint | convertRawCtype (Cpointer _) = RawCtype.Cpointer (*| convertRawCtype (Cfunction _) = RawCtype.Cpointer*) (*hmm?*) | convertRawCtype (Cstruct ts) = RawCtype.Cstruct (sizeof (Cstruct ts)) | convertRawCtype Cvoid = RawCtype.Cint (*hack*) fun call_sym g args rt = makeVol (Dispatch.call_sym (thevol g) (map (fn (t,g) => (convertRawCtype t,thevol g)) args) (convertRawCtype rt)) val toCchar = makeVol o Dispatch.toCchar val toCdouble = makeVol o Dispatch.toCdouble val toCfloat = makeVol o Dispatch.toCfloat val toCint = makeVol o Dispatch.toCint val toClong = makeVol o Dispatch.toClong val toCshort = makeVol o Dispatch.toCshort val toCuint = makeVol o Dispatch.toCuint val fromCchar = Dispatch.fromCchar o thevol val fromCdouble = Dispatch.fromCdouble o thevol val fromCfloat = Dispatch.fromCfloat o thevol val fromCint = Dispatch.fromCint o thevol val fromClong = Dispatch.fromClong o thevol val fromCshort = Dispatch.fromCshort o thevol val fromCuint = Dispatch.fromCuint o thevol end (* struct *) polyml.5.2.1/mlsource/extra/CInterface/Volatile/ml_bind.ML0000644000175000017500000000162410313043361022365 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure Volatile = VOLS_THAT_HOLD_REFS (structure Underlying = VolBasic structure ForeignException = ForeignException); polyml.5.2.1/mlsource/extra/Motif/0000755000175000017500000000000011100060551016013 5ustar daviddavidpolyml.5.2.1/mlsource/extra/Motif/InitialiseCore.ML0000644000175000017500000004274210313043361021166 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure InitialiseCore = struct local open MotifTypes XmTypes MotifCore in val U = XtSetExceptionType XmNaccelerator XmRString ; val U = XtSetExceptionType XmNacceleratorText XmRXmString ; val U = XtSetExceptionType XmNaccelerators XmRAcceleratorTable ; val U = XtSetExceptionType XmNadjustLast XmRBool ; val U = XtSetExceptionType XmNadjustMargin XmRBool ; val U = XtSetExceptionType XmNalignment XmRAlignment ; val U = XtSetExceptionType XmNallowOverlap XmRBool ; val U = XtSetExceptionType XmNallowResize XmRBool ; val U = XtSetExceptionType XmNallowShellResize XmRBool ; val U = XtSetExceptionType XmNancestorSensitive XmRBool ; val U = XtSetExceptionType XmNapplyLabelString XmRXmString ; val U = XtSetExceptionType XmNargc XmRInt ; val U = XtSetExceptionType XmNargv XmRStringTable ; val U = XtSetExceptionType XmNarmColor XmRPixel ; val U = XtSetExceptionType XmNarmPixmap XmRPixmap ; val U = XtSetExceptionType XmNarrowDirection XmRArrowDirection ; val U = XtSetExceptionType XmNautoShowCursorPosition XmRBool ; val U = XtSetExceptionType XmNautoUnmanage XmRBool ; val U = XtSetExceptionType XmNautomaticSelection XmRBool ; val U = XtSetExceptionType XmNbackground XmRPixel ; val U = XtSetExceptionType XmNbackgroundPixmap XmRPixmap ; val U = XtSetExceptionType XmNbaseHeight XmRInt ; val U = XtSetExceptionType XmNbaseWidth XmRInt ; val U = XtSetExceptionType XmNblinkRate XmRInt ; val U = XtSetExceptionType XmNborderColor XmRPixel ; val U = XtSetExceptionType XmNborderPixmap XmRPixmap ; val U = XtSetExceptionType XmNborderWidth XmRDimension ; val U = XtSetExceptionType XmNbottomAttachment XmRAttachment ; val U = XtSetExceptionType XmNbottomOffset XmRInt ; val U = XtSetExceptionType XmNbottomPosition XmRInt ; val U = XtSetExceptionType XmNbottomShadowColor XmRPixel ; val U = XtSetExceptionType XmNbottomShadowPixmap XmRPixmap ; val U = XtSetExceptionType XmNbottomWidget XmRWidget ; val U = XtSetExceptionType XmNbuttonAcceleratorText XmRXmStringTable ; val U = XtSetExceptionType XmNbuttonAccelerators XmRStringTable ; val U = XtSetExceptionType XmNbuttonCount XmRInt ; val U = XtSetExceptionType XmNbuttonFontList XmRFontList ; val U = XtSetExceptionType XmNbuttonMnemonicCharSets XmRXmStringTable ; val U = XtSetExceptionType XmNbuttonMnemonics XmRKeySymTable ; val U = XtSetExceptionType XmNbuttonSet XmRInt ; val U = XtSetExceptionType XmNbuttonType XmRButtonTypeTable ; val U = XtSetExceptionType XmNbuttons XmRXmStringTable ; val U = XtSetExceptionType XmNcancelButton XmRWidget ; val U = XtSetExceptionType XmNcancelLabelString XmRXmString ; val U = XtSetExceptionType XmNcascadePixmap XmRPixmap ; val U = XtSetExceptionType XmNchildren XmRWidgetList ; val U = XtSetExceptionType XmNclipWindow XmRWidget ; val U = XtSetExceptionType XmNcolormap XmRColormap ; val U = XtSetExceptionType XmNcolumns XmRShort ; val U = XtSetExceptionType XmNcommand XmRXmString ; val U = XtSetExceptionType XmNcommandWindow XmRWidget ; val U = XtSetExceptionType XmNcommandWindowLocation XmRCommandWindowLocation ; val U = XtSetExceptionType XmNcursorPosition XmRInt ; val U = XtSetExceptionType XmNcursorPositionVisible XmRBool ; val U = XtSetExceptionType XmNdecimalPoints XmRShort ; val U = XtSetExceptionType XmNdefaultButton XmRWidget ; val U = XtSetExceptionType XmNdefaultButtonShadowThickness XmRDimension ; val U = XtSetExceptionType XmNdefaultButtonType XmRDefaultButtonType ; val U = XtSetExceptionType XmNdefaultFontList XmRFontList ; val U = XtSetExceptionType XmNdefaultPosition XmRBool ; val U = XtSetExceptionType XmNdeleteResponse XmRDeleteResponse ; val U = XtSetExceptionType XmNdepth XmRInt ; val U = XtSetExceptionType XmNdialogStyle XmRDialogStyle ; val U = XtSetExceptionType XmNdialogTitle XmRXmString ; val U = XtSetExceptionType XmNdialogType XmRDialogType ; val U = XtSetExceptionType XmNdirListItemCount XmRInt ; val U = XtSetExceptionType XmNdirListItems XmRXmStringTable ; val U = XtSetExceptionType XmNdirListLabelString XmRXmString ; val U = XtSetExceptionType XmNdirMask XmRXmString ; val U = XtSetExceptionType XmNdirSpec XmRXmString ; val U = XtSetExceptionType XmNdirectory XmRXmString ; val U = XtSetExceptionType XmNdirectoryValid XmRBool ; val U = XtSetExceptionType XmNdoubleClickInterval XmRInt ; val U = XtSetExceptionType XmNeditMode XmREditMode ; val U = XtSetExceptionType XmNeditable XmRBool ; val U = XtSetExceptionType XmNentryAlignment XmRAlignment ; val U = XtSetExceptionType XmNentryBorder XmRDimension ; val U = XtSetExceptionType XmNfileListItemCount XmRInt ; val U = XtSetExceptionType XmNfileListItems XmRXmStringTable ; val U = XtSetExceptionType XmNfileListLabelString XmRXmString ; val U = XtSetExceptionType XmNfileTypeMask XmRFileTypeMask ; val U = XtSetExceptionType XmNfillOnArm XmRBool ; val U = XtSetExceptionType XmNfillOnSelect XmRBool ; val U = XtSetExceptionType XmNfilterLabelString XmRXmString ; val U = XtSetExceptionType XmNfontList XmRFontList ; val U = XtSetExceptionType XmNforeground XmRPixel ; val U = XtSetExceptionType XmNfractionBase XmRInt ; val U = XtSetExceptionType XmNgeometry XmRString ; val U = XtSetExceptionType XmNheight XmRDimension ; val U = XtSetExceptionType XmNheightInc XmRInt ; val U = XtSetExceptionType XmNhelpLabelString XmRXmString ; val U = XtSetExceptionType XmNhighlightColor XmRPixel ; val U = XtSetExceptionType XmNhighlightOnEnter XmRBool ; val U = XtSetExceptionType XmNhighlightPixmap XmRPixmap ; val U = XtSetExceptionType XmNhighlightThickness XmRDimension ; val U = XtSetExceptionType XmNhistoryItemCount XmRInt ; val U = XtSetExceptionType XmNhistoryItems XmRXmStringTable ; val U = XtSetExceptionType XmNhistoryMaxItems XmRInt ; val U = XtSetExceptionType XmNhistoryVisibleItemCount XmRInt ; val U = XtSetExceptionType XmNhorizontalScrollBar XmRWidget ; val U = XtSetExceptionType XmNhorizontalSpacing XmRDimension ; val U = XtSetExceptionType XmNiconMask XmRPixmap ; val U = XtSetExceptionType XmNiconName XmRString ; val U = XtSetExceptionType XmNiconNameEncoding XmRAtom ; val U = XtSetExceptionType XmNiconPixmap XmRPixmap ; val U = XtSetExceptionType XmNiconWindow XmRPixmap ; val U = XtSetExceptionType XmNiconX XmRInt ; val U = XtSetExceptionType XmNiconY XmRInt ; val U = XtSetExceptionType XmNiconic XmRBool ; val U = XtSetExceptionType XmNincrement XmRInt ; val U = XtSetExceptionType XmNindicatorOn XmRBool ; val U = XtSetExceptionType XmNindicatorSize XmRDimension ; val U = XtSetExceptionType XmNindicatorType XmRIndicatorType ; val U = XtSetExceptionType XmNinitialDelay XmRInt ; val U = XtSetExceptionType XmNinitialResourcesPersistent XmRBool ; val U = XtSetExceptionType XmNinitialState XmRInitialState ; val U = XtSetExceptionType XmNinput XmRBool ; val U = XtSetExceptionType XmNisAligned XmRBool ; val U = XtSetExceptionType XmNisHomogeneous XmRBool ; val U = XtSetExceptionType XmNitemCount XmRInt ; val U = XtSetExceptionType XmNitems XmRXmStringTable ; val U = XtSetExceptionType XmNkeyboardFocusPolicy XmRKeyboardFocusPolicy ; val U = XtSetExceptionType XmNlabelFontList XmRFontList ; val U = XtSetExceptionType XmNlabelInsensitivePixmap XmRPixmap ; val U = XtSetExceptionType XmNlabelPixmap XmRPixmap ; val U = XtSetExceptionType XmNlabelString XmRXmString ; val U = XtSetExceptionType XmNlabelType XmRLabelType ; val U = XtSetExceptionType XmNleftAttachment XmRAttachment ; val U = XtSetExceptionType XmNleftOffset XmRInt ; val U = XtSetExceptionType XmNleftPosition XmRInt ; val U = XtSetExceptionType XmNleftWidget XmRWidget ; val U = XtSetExceptionType XmNlistItemCount XmRInt ; val U = XtSetExceptionType XmNlistItems XmRXmStringTable ; val U = XtSetExceptionType XmNlistLabelString XmRXmString ; val U = XtSetExceptionType XmNlistMarginHeight XmRDimension ; val U = XtSetExceptionType XmNlistMarginWidth XmRDimension ; val U = XtSetExceptionType XmNlistSizePolicy XmRVisualPolicy ; val U = XtSetExceptionType XmNlistSpacing XmRDimension ; val U = XtSetExceptionType XmNlistUpdated XmRBool ; val U = XtSetExceptionType XmNlistVisibleItemCount XmRInt ; val U = XtSetExceptionType XmNmainWindowMarginHeight XmRDimension ; val U = XtSetExceptionType XmNmainWindowMarginWidth XmRDimension ; val U = XtSetExceptionType XmNmappedWhenManaged XmRBool ; val U = XtSetExceptionType XmNmappingDelay XmRInt ; val U = XtSetExceptionType XmNmargin XmRDimension ; val U = XtSetExceptionType XmNmarginBottom XmRDimension ; val U = XtSetExceptionType XmNmarginHeight XmRDimension ; val U = XtSetExceptionType XmNmarginLeft XmRDimension ; val U = XtSetExceptionType XmNmarginRight XmRDimension ; val U = XtSetExceptionType XmNmarginTop XmRDimension ; val U = XtSetExceptionType XmNmarginWidth XmRDimension ; val U = XtSetExceptionType XmNmaxAspectX XmRInt ; val U = XtSetExceptionType XmNmaxAspectY XmRInt ; val U = XtSetExceptionType XmNmaxHeight XmRInt ; val U = XtSetExceptionType XmNmaxLength XmRInt ; val U = XtSetExceptionType XmNmaxWidth XmRInt ; val U = XtSetExceptionType XmNmaximum XmRInt ; val U = XtSetExceptionType XmNmenuAccelerator XmRString ; val U = XtSetExceptionType XmNmenuBar XmRWidget ; val U = XtSetExceptionType XmNmenuCursor XmRCursor ; val U = XtSetExceptionType XmNmenuHelpWidget XmRWidget ; val U = XtSetExceptionType XmNmenuHistory XmRWidget ; val U = XtSetExceptionType XmNmenuPost XmRString ; val U = XtSetExceptionType XmNmessageAlignment XmRAlignment ; val U = XtSetExceptionType XmNmessageString XmRXmString ; val U = XtSetExceptionType XmNmessageWindow XmRWidget ; val U = XtSetExceptionType XmNminAspectX XmRInt ; val U = XtSetExceptionType XmNminAspectY XmRInt ; val U = XtSetExceptionType XmNminHeight XmRInt ; val U = XtSetExceptionType XmNminWidth XmRInt ; val U = XtSetExceptionType XmNminimizeButtons XmRBool ; val U = XtSetExceptionType XmNminimum XmRInt ; val U = XtSetExceptionType XmNmnemonic XmRKeySym ; val U = XtSetExceptionType XmNmnemonicCharSet XmRString ; val U = XtSetExceptionType XmNmultiClick XmRMultiClick ; val U = XtSetExceptionType XmNmustMatch XmRBool ; val U = XtSetExceptionType XmNmwmDecorations XmRInt ; val U = XtSetExceptionType XmNmwmFunctions XmRInt ; val U = XtSetExceptionType XmNmwmInputMode XmRInt ; val U = XtSetExceptionType XmNmwmMenu XmRString ; val U = XtSetExceptionType XmNnavigationType XmRNavigationType ; val U = XtSetExceptionType XmNnoMatchString XmRXmString ; val U = XtSetExceptionType XmNnoResize XmRBool ; val U = XtSetExceptionType XmNnumChildren XmRCardinal ; val U = XtSetExceptionType XmNnumColumns XmRShort ; val U = XtSetExceptionType XmNokLabelString XmRXmString ; val U = XtSetExceptionType XmNoptionLabel XmRXmString ; val U = XtSetExceptionType XmNoptionMnemonic XmRKeySym ; val U = XtSetExceptionType XmNorientation XmROrientation ; val U = XtSetExceptionType XmNoverrideRedirect XmRBool ; val U = XtSetExceptionType XmNpacking XmRPacking ; val U = XtSetExceptionType XmNpageIncrement XmRInt ; val U = XtSetExceptionType XmNpaneMaximum XmRDimension ; val U = XtSetExceptionType XmNpaneMinimum XmRDimension ; val U = XtSetExceptionType XmNpattern XmRXmString ; val U = XtSetExceptionType XmNpendingDelete XmRBool ; val U = XtSetExceptionType XmNpopupEnabled XmRBool ; val U = XtSetExceptionType XmNpostFromButton XmRInt ; val U = XtSetExceptionType XmNprocessingDirection XmRProcessingDirection ; val U = XtSetExceptionType XmNpromptString XmRXmString ; val U = XtSetExceptionType XmNpushButtonEnabled XmRBool ; val U = XtSetExceptionType XmNradioAlwaysOne XmRBool ; val U = XtSetExceptionType XmNradioBehavior XmRBool ; val U = XtSetExceptionType XmNrecomputeSize XmRBool ; val U = XtSetExceptionType XmNrefigureMode XmRBool ; val U = XtSetExceptionType XmNrepeatDelay XmRInt ; val U = XtSetExceptionType XmNresizable XmRBool ; val U = XtSetExceptionType XmNresizeHeight XmRBool ; val U = XtSetExceptionType XmNresizePolicy XmRResizePolicy ; val U = XtSetExceptionType XmNresizeWidth XmRBool ; val U = XtSetExceptionType XmNrightAttachment XmRAttachment ; val U = XtSetExceptionType XmNrightOffset XmRInt ; val U = XtSetExceptionType XmNrightPosition XmRInt ; val U = XtSetExceptionType XmNrightWidget XmRWidget ; val U = XtSetExceptionType XmNrowColumnType XmRRowColumnType ; val U = XtSetExceptionType XmNrows XmRShort ; val U = XtSetExceptionType XmNrubberPositioning XmRBool ; val U = XtSetExceptionType XmNsashHeight XmRDimension ; val U = XtSetExceptionType XmNsashIndent XmRPosition ; val U = XtSetExceptionType XmNsashShadowThickness XmRDimension ; val U = XtSetExceptionType XmNsashWidth XmRDimension ; val U = XtSetExceptionType XmNsaveUnder XmRBool ; val U = XtSetExceptionType XmNscaleHeight XmRDimension ; val U = XtSetExceptionType XmNscaleMultiple XmRInt ; val U = XtSetExceptionType XmNscaleWidth XmRDimension ; val U = XtSetExceptionType XmNscrollBarDisplayPolicy XmRScrollBarDisplayPolicy ; val U = XtSetExceptionType XmNscrollBarPlacement XmRScrollBarPlacement ; val U = XtSetExceptionType XmNscrollHorizontal XmRBool ; val U = XtSetExceptionType XmNscrollLeftSide XmRBool ; val U = XtSetExceptionType XmNscrollTopSide XmRBool ; val U = XtSetExceptionType XmNscrollVertical XmRBool ; val U = XtSetExceptionType XmNscrolledWindowMarginHeight XmRDimension ; val U = XtSetExceptionType XmNscrolledWindowMarginWidth XmRDimension ; val U = XtSetExceptionType XmNscrollingPolicy XmRScrollingPolicy ; val U = XtSetExceptionType XmNselectColor XmRPixel ; val U = XtSetExceptionType XmNselectInsensitivePixmap XmRPixmap ; val U = XtSetExceptionType XmNselectPixmap XmRPixmap ; val U = XtSetExceptionType XmNselectThreshold XmRInt ; val U = XtSetExceptionType XmNselectedItemCount XmRInt ; val U = XtSetExceptionType XmNselectedItems XmRXmStringTable ; val U = XtSetExceptionType XmNselectionArray XmRTextScanTypeTable ; val U = XtSetExceptionType XmNselectionArrayCount XmRInt ; val U = XtSetExceptionType XmNselectionLabelString XmRXmString ; val U = XtSetExceptionType XmNselectionPolicy XmRSelectionPolicy ; val U = XtSetExceptionType XmNsensitive XmRBool ; val U = XtSetExceptionType XmNseparatorOn XmRBool ; val U = XtSetExceptionType XmNseparatorType XmRShadowType ; val U = XtSetExceptionType XmNset XmRBool ; val U = XtSetExceptionType XmNshadowThickness XmRDimension ; val U = XtSetExceptionType XmNshadowType XmRShadowType ; val U = XtSetExceptionType XmNshellUnitType XmRUnitType ; val U = XtSetExceptionType XmNshowArrows XmRBool ; val U = XtSetExceptionType XmNshowAsDefault XmRDimension ; val U = XtSetExceptionType XmNshowSeparator XmRBool ; val U = XtSetExceptionType XmNshowValue XmRBool ; val U = XtSetExceptionType XmNskipAdjust XmRBool ; val U = XtSetExceptionType XmNsliderSize XmRInt ; val U = XtSetExceptionType XmNspacing XmRDimension ; val U = XtSetExceptionType XmNstringDirection XmRStringDirection ; val U = XtSetExceptionType XmNsubMenuId XmRWidget ; val U = XtSetExceptionType XmNsymbolPixmap XmRPixmap ; val U = XtSetExceptionType XmNtextAccelerators XmRAcceleratorTable ; val U = XtSetExceptionType XmNtextColumns XmRShort ; val U = XtSetExceptionType XmNtextFontList XmRFontList ; val U = XtSetExceptionType XmNtextString XmRXmString ; val U = XtSetExceptionType XmNtextTranslations XmRTranslationTable ; val U = XtSetExceptionType XmNtitle XmRString ; val U = XtSetExceptionType XmNtitleEncoding XmRAtom ; val U = XtSetExceptionType XmNtitleString XmRXmString ; val U = XtSetExceptionType XmNtopAttachment XmRAttachment ; val U = XtSetExceptionType XmNtopCharacter XmRInt ; val U = XtSetExceptionType XmNtopItemPosition XmRInt ; val U = XtSetExceptionType XmNtopOffset XmRInt ; val U = XtSetExceptionType XmNtopPosition XmRInt ; val U = XtSetExceptionType XmNtopShadowColor XmRPixel ; val U = XtSetExceptionType XmNtopShadowPixmap XmRPixmap ; val U = XtSetExceptionType XmNtopWidget XmRWidget ; val U = XtSetExceptionType XmNtransient XmRBool ; val U = XtSetExceptionType XmNtransientFor XmRWidget ; val U = XtSetExceptionType XmNtranslations XmRTranslationTable ; val U = XtSetExceptionType XmNtraversalOn XmRBool ; val U = XtSetExceptionType XmNtroughColor XmRPixel ; val U = XtSetExceptionType XmNunitType XmRUnitType ; val U = XtSetExceptionType XmNuseAsyncGeometry XmRBool ; val U = XtSetExceptionType XmNvalue XmRInt ; val U = XtSetExceptionType XmNverifyBell XmRBool ; val U = XtSetExceptionType XmNverticalScrollBar XmRWidget ; val U = XtSetExceptionType XmNverticalSpacing XmRDimension ; (* The O'Reilly book says this resource is a short - it's wrong! *) val U = XtSetExceptionType XmNvisibleItemCount XmRInt; val U = XtSetExceptionType XmNvisibleWhenOff XmRBool ; val U = XtSetExceptionType XmNvisual XmRVisual ; val U = XtSetExceptionType XmNvisualPolicy XmRVisualPolicy ; val U = XtSetExceptionType XmNwaitForWm XmRBool ; val U = XtSetExceptionType XmNwidth XmRDimension ; val U = XtSetExceptionType XmNwidthInc XmRInt ; val U = XtSetExceptionType XmNwinGravity XmRInt ; val U = XtSetExceptionType XmNwindowGroup XmRPixmap ; val U = XtSetExceptionType XmNwmTimeout XmRInt ; val U = XtSetExceptionType XmNwordWrap XmRBool ; val U = XtSetExceptionType XmNworkWindow XmRWidget ; val U = XtSetExceptionType XmNx XmRPosition ; val U = XtSetExceptionType XmNy XmRPosition ; end (* local *) ; end (* struct *) ; polyml.5.2.1/mlsource/extra/Motif/MOTIF_SIG.ML0000644000175000017500000004571210313043361017643 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) signature MOTIF_SIG = sig include XM_TYPES val XtParseTranslationTable : string -> XtTranslations val XtOverrideTranslations : Widget -> XtTranslations -> unit val XtAugmentTranslations : Widget -> XtTranslations -> unit val XtUninstallTranslations : Widget -> unit val XtTranslateTablePrint : XtTranslations -> unit val NoWidget : Widget val WidgetID : Widget -> int val WidgetExists : Widget -> bool val XtAppInitialise : string -> string -> string -> string list -> Arg list -> Widget val XtCreatePopupShell : string -> Widget -> Arg list -> Widget val XtRealizeWidget : Widget -> unit val XtUnrealizeWidget : Widget -> unit val XtDestroyWidget : Widget -> unit val XtManageChild : Widget -> unit val XtUnmanageChild : Widget -> unit val XtManageChildren : Widget list -> unit val XtUnmanageChildren : Widget list -> unit val XtSetExceptionType : ('a -> Arg) -> ('a -> XmRType) -> unit val XtSetValue : Widget -> Arg -> unit val XtSetValues : Widget -> Arg list -> unit val XtGetValue : Widget -> string -> Arg val XtGetValues : Widget -> string list -> Arg list val XtGetSubresources : Widget -> string -> string -> (string * string * XmRType) list -> Arg list val XtParent : Widget -> Widget val XtWindow : Widget -> XWindows.Drawable val XtDisplay : Widget -> XWindows.Display val XtName : Widget -> string val XtSetCallbacks : Widget -> (XtCallback * (Widget * 'a XWindows.XEvent * '_b -> '_b)) list -> '_b -> int -> 'a -> unit val XtSetSensitive : Widget -> bool -> unit val XtIsSensitive : Widget -> bool (* added 6/12/94 SPF *) val XtPopup : Widget -> XtGrabKind -> unit; val XtPopdown : Widget -> unit; val XtMapWidget : Widget -> unit; val XtUnmapWidget : Widget -> unit; (* added 19/1/95 SPF *) val XtIsManaged : Widget -> bool val XtIsRealized : Widget -> bool (* Added by DCJM. 23/3/01. *) val XtGetApplicationResources: Widget -> (string * string * XmRType) list -> Arg list ; val XtAddEventHandler: Widget -> XWindows.EventMask list -> bool -> (Widget * 'a XWindows.XEvent -> unit) -> unit val XmCreateArrowButton : Widget -> string -> Arg list -> Widget val XmCreateArrowButtonGadget : Widget -> string -> Arg list -> Widget val XmCreateBulletinBoard : Widget -> string -> Arg list -> Widget val XmCreateBulletinBoardDialog : Widget -> string -> Arg list -> Widget val XmCreateCascadeButton : Widget -> string -> Arg list -> Widget val XmCreateCascadeButtonGadget : Widget -> string -> Arg list -> Widget val XmCreateCommand : Widget -> string -> Arg list -> Widget val XmCreateDialogShell : Widget -> string -> Arg list -> Widget val XmCreateDrawingArea : Widget -> string -> Arg list -> Widget val XmCreateDrawnButton : Widget -> string -> Arg list -> Widget val XmCreateErrorDialog : Widget -> string -> Arg list -> Widget val XmCreateFileSelectionBox : Widget -> string -> Arg list -> Widget val XmCreateFileSelectionDialog : Widget -> string -> Arg list -> Widget val XmCreateForm : Widget -> string -> Arg list -> Widget val XmCreateFormDialog : Widget -> string -> Arg list -> Widget val XmCreateFrame : Widget -> string -> Arg list -> Widget val XmCreateInformationDialog : Widget -> string -> Arg list -> Widget val XmCreateLabel : Widget -> string -> Arg list -> Widget val XmCreateLabelGadget : Widget -> string -> Arg list -> Widget val XmCreateList : Widget -> string -> Arg list -> Widget val XmCreateMainWindow : Widget -> string -> Arg list -> Widget val XmCreateMenuBar : Widget -> string -> Arg list -> Widget val XmCreateMenuShell : Widget -> string -> Arg list -> Widget val XmCreateMessageBox : Widget -> string -> Arg list -> Widget val XmCreateMessageDialog : Widget -> string -> Arg list -> Widget val XmCreateOptionMenu : Widget -> string -> Arg list -> Widget val XmCreatePanedWindow : Widget -> string -> Arg list -> Widget val XmCreatePopupMenu : Widget -> string -> Arg list -> Widget val XmCreatePromptDialog : Widget -> string -> Arg list -> Widget val XmCreatePulldownMenu : Widget -> string -> Arg list -> Widget val XmCreatePushButton : Widget -> string -> Arg list -> Widget val XmCreatePushButtonGadget : Widget -> string -> Arg list -> Widget val XmCreateQuestionDialog : Widget -> string -> Arg list -> Widget val XmCreateRadioBox : Widget -> string -> Arg list -> Widget val XmCreateRowColumn : Widget -> string -> Arg list -> Widget val XmCreateScale : Widget -> string -> Arg list -> Widget val XmCreateScrollBar : Widget -> string -> Arg list -> Widget val XmCreateScrolledList : Widget -> string -> Arg list -> Widget val XmCreateScrolledText : Widget -> string -> Arg list -> Widget val XmCreateScrolledWindow : Widget -> string -> Arg list -> Widget val XmCreateSelectionBox : Widget -> string -> Arg list -> Widget val XmCreateSelectionDialog : Widget -> string -> Arg list -> Widget val XmCreateSeparator : Widget -> string -> Arg list -> Widget val XmCreateSeparatorGadget : Widget -> string -> Arg list -> Widget val XmCreateSimpleCheckBox : Widget -> string -> Arg list -> Widget val XmCreateSimpleMenuBar : Widget -> string -> Arg list -> Widget val XmCreateSimpleOptionMenu : Widget -> string -> Arg list -> Widget val XmCreateSimplePopupMenu : Widget -> string -> Arg list -> Widget val XmCreateSimplePulldownMenu : Widget -> string -> Arg list -> Widget val XmCreateSimpleRadioBox : Widget -> string -> Arg list -> Widget val XmCreateText : Widget -> string -> Arg list -> Widget val XmCreateTextField : Widget -> string -> Arg list -> Widget val XmCreateToggleButton : Widget -> string -> Arg list -> Widget val XmCreateToggleButtonGadget : Widget -> string -> Arg list -> Widget val XmCreateWarningDialog : Widget -> string -> Arg list -> Widget val XmCreateWorkArea : Widget -> string -> Arg list -> Widget val XmCreateWorkingDialog : Widget -> string -> Arg list -> Widget val XmCascadeButtonHighlight : Widget -> bool -> unit val XmCommandError : Widget -> XmString -> unit val XmCommandGetChild : Widget -> XmDefaultButtonType -> Widget val XmFileSelectionBoxGetChild : Widget -> XmDefaultButtonType -> Widget val XmFileSelectionDoSearch : Widget -> XmString -> unit val XmIsArrowButton : Widget -> bool val XmIsArrowButtonGadget : Widget -> bool val XmIsBulletinBoard : Widget -> bool val XmIsCascadeButton : Widget -> bool val XmIsCascadeButtonGadget : Widget -> bool val XmIsCommand : Widget -> bool val XmIsDesktopObject : Widget -> bool val XmIsDialogShell : Widget -> bool (* unsupported by solaris version of toolkit ... val XmIsDisplayObject : Widget -> bool ... *) val XmIsDrawingArea : Widget -> bool val XmIsDrawnButton : Widget -> bool val XmIsExtObject : Widget -> bool val XmIsFileSelectionBox : Widget -> bool val XmIsForm : Widget -> bool val XmIsFrame : Widget -> bool val XmIsGadget : Widget -> bool val XmIsLabel : Widget -> bool val XmIsLabelGadget : Widget -> bool val XmIsList : Widget -> bool val XmIsMainWindow : Widget -> bool val XmIsManager : Widget -> bool val XmIsMenuShell : Widget -> bool val XmIsMessageBox : Widget -> bool val XmIsMotifWMRunning : Widget -> bool val XmIsPanedWindow : Widget -> bool val XmIsPrimitive : Widget -> bool val XmIsPushButton : Widget -> bool val XmIsPushButtonGadget : Widget -> bool val XmIsRowColumn : Widget -> bool val XmIsScale : Widget -> bool (* unsupported by solaris version of toolkit ... val XmIsScreenObject : Widget -> bool ... *) val XmIsScrollBar : Widget -> bool val XmIsScrolledWindow : Widget -> bool val XmIsSelectionBox : Widget -> bool val XmIsSeparator : Widget -> bool val XmIsSeparatorGadget : Widget -> bool val XmIsShellExt : Widget -> bool val XmIsText : Widget -> bool val XmIsTextField : Widget -> bool val XmIsToggleButton : Widget -> bool val XmIsToggleButtonGadget : Widget -> bool val XmIsVendorShell : Widget -> bool val XmIsVendorShellExt : Widget -> bool (* unsupported in Motif 1.2 val XmIsWorldObject : Widget -> bool *) val XmMainWindowSetAreas : Widget -> Widget -> Widget -> Widget -> Widget -> Widget -> unit val XmMainWindowSep1 : Widget -> Widget val XmMainWindowSep2 : Widget -> Widget val XmMainWindowSep3 : Widget -> Widget val XmMessageBoxGetChild : Widget -> XmDefaultButtonType -> Widget val XmOptionButtonGadget : Widget -> Widget val XmOptionLabelGadget : Widget -> Widget val XmScrolledWindowSetAreas : Widget -> Widget -> Widget -> Widget -> unit val XmSelectionBoxGetChild : Widget -> XmDefaultButtonType -> Widget val XmSetMenuCursor : XWindows.Display -> XWindows.Cursor -> unit val XmTrackingLocate : Widget -> XWindows.Cursor -> bool -> Widget val XmUpdateDisplay : Widget -> unit (******************************************************************************) (* *) (* Operations on XmText Widgets *) (* *) (******************************************************************************) val XmTextGetAddMode : Widget -> bool val XmTextGetBaseline : Widget -> int val XmTextGetCursorPosition : Widget -> int val XmTextGetEditable : Widget -> bool val XmTextGetInsertionPosition : Widget -> int val XmTextGetLastPosition : Widget -> int val XmTextGetMaxLength : Widget -> int val XmTextGetSelection : Widget -> int val XmTextGetString : Widget -> string val XmTextGetTopCharacter : Widget -> int val XmTextInsert : Widget -> int -> string -> unit val XmTextPaste : Widget -> bool val XmTextRemove : Widget -> bool val XmTextReplace : Widget -> int -> int -> string -> unit val XmTextScroll : Widget -> int -> unit val XmTextSetAddMode : Widget -> bool -> unit val XmTextSetCursorPosition : Widget -> int -> unit val XmTextSetEditable : Widget -> bool -> unit val XmTextSetInsertionPosition : Widget -> int -> unit val XmTextSetMaxLength : Widget -> int -> unit val XmTextSetString : Widget -> string -> unit val XmTextSetTopCharacter : Widget -> int -> unit val XmTextShowPosition : Widget -> int -> unit val XmTextXYToPos : Widget -> int -> int -> int (******************************************************************************) (* *) (* Operations on XmTextField Widgets *) (* *) (******************************************************************************) val XmTextFieldGetAddMode : Widget -> bool val XmTextFieldGetBaseline : Widget -> int val XmTextFieldGetCursorPosition : Widget -> int val XmTextFieldGetEditable : Widget -> bool val XmTextFieldGetInsertionPosition : Widget -> int val XmTextFieldGetLastPosition : Widget -> int val XmTextFieldGetMaxLength : Widget -> int val XmTextFieldGetSelection : Widget -> int val XmTextFieldGetString : Widget -> string val XmTextFieldInsert : Widget -> int -> string -> unit val XmTextFieldPaste : Widget -> bool val XmTextFieldRemove : Widget -> bool val XmTextFieldReplace : Widget -> int -> int -> string -> unit val XmTextFieldSetAddMode : Widget -> bool -> unit val XmTextFieldSetCursorPosition : Widget -> int -> unit val XmTextFieldSetEditable : Widget -> bool -> unit val XmTextFieldSetInsertionPosition : Widget -> int -> unit val XmTextFieldSetMaxLength : Widget -> int -> unit val XmTextFieldSetString : Widget -> string -> unit val XmTextFieldShowPosition : Widget -> int -> unit val XmTextFieldXYToPos : Widget -> int -> int -> int (******************************************************************************) (* *) (* Operations on XmList Widgets *) (* *) (******************************************************************************) (* This widget maintains an ordered list of strings. The user can select or deselect strings in the list. The programmer can refer to the strings either by name (passing in the string itself) or by position (passing in an integer; the first string in the list has position 1). *) (************************* Adding Items to List *******************************) (* Add one item (the string) at the specified postion (the int). *) (* If the string is in the Widget's current selected items list, it will be pre-selected. *) val XmListAddItem : Widget -> string -> int -> unit; (* As XmListAddItems, except that the new item is not pre-selected. *) val XmListAddItemUnselected : Widget -> string -> int -> unit; (* Add a number of items, starting at the specifed position. *) val XmListAddItems : Widget -> string list -> int -> unit; (************************* Deleting Items from List ***************************) (* Delete all items in the list *) val XmListDeleteAllItems : Widget -> unit; (* Delete the item (specified as a string) from the list *) val XmListDeleteItem : Widget -> string -> unit; (* Delete several item (specified as strings) from the list *) val XmListDeleteItems : Widget -> string list -> unit; (* Delete the item (specified by its position) from the widget *) val XmListDeletePos: Widget -> int -> unit; (* Delete several items (specified by their positions) from the widget *) val XmListDeleteItemsPos: Widget -> int -> int -> unit; (************************* Deselecting Items **********************************) (* Deselect all items in the list *) val XmListDeselectAllItems: Widget -> unit; (* Deselect the item (specified as a string). *) val XmListDeselectItem: Widget -> string -> unit; (* Deselect the item (specified by its position). *) val XmListDeselectPos: Widget -> int -> unit; (************************* Query Functions ************************************) (* Return the list of positions at which the string appears in the list *) val XmListGetMatchPos: Widget -> string -> int list (* Return the list of positions of the currently selected items *) val XmListGetSelectedPos: Widget -> int list (* Does the item occur in the list? *) val XmListItemExists: Widget -> string -> bool; (* What is the first occurrence of the item in the list? (0 if absent). *) val XmListItemPos: Widget -> string -> int; (************************* Replacing Items in the List ************************) (* For each (old, new) pair, replace each occurrence of "old" with "new". *) val XmListReplaceItems: Widget -> (string * string) list -> unit; (* Replace items in the list, starting at the specified position *) val XmListReplaceItemsPos: Widget -> string list -> int -> unit; (************************* Selecting Items in the List ************************) (* Highlight the specified item and add it to the list of selected items. If the bool is true, also invoke the selection callback. *) val XmListSelectItem: Widget -> string -> bool -> unit; val XmListSelectPos: Widget -> int -> bool -> unit; (************************* Set Add Mode ***************************************) (* Activate (bool is "true") or deactivate (bool is "false") Add Mode. *) val XmListSetAddMode: Widget -> bool -> unit; (************************* Set Appearance *************************************) (* Make an existing item the last visible item in the list. *) val XmListSetBottomItem: Widget -> string -> unit; val XmListSetBottomPos: Widget -> int -> unit; (* Moves the horizontal scroolbar to the speciied position *) val XmListSetHorizPos: Widget -> int -> unit; (* Make an existing item the first visible item in the list. *) val XmListSetItem: Widget -> string -> unit; val XmListSetPos: Widget -> int -> unit; (************************* Miscellaneous *************************************) (* Not supported by the SUNOS version of the tool-kit ... val XmListAddItemsUnselected : Widget -> string list -> int -> unit; val XmListDeletePositions: Widget -> int list -> unit; val XmListGetKbdItemPos: Widget -> int val XmListPosSelected: Widget -> int -> bool; val XmListReplaceItemsPosUnselected: Widget -> string list -> int -> unit; val XmListReplaceItemsPositions: Widget -> (int * string) list -> unit; val XmListSetKbdItemPos: Widget -> int -> bool; val XmListUpdateSelectedList: Widget -> unit; val XmListYToPos: Widget -> int -> int val XmListPosToBounds: Widget -> ??? ... *) (* Added by DCJM. 23/3/01. *) val XmMenuPosition: Widget -> 'a XWindows.XEvent -> unit (* local *) end (* signature *) polyml.5.2.1/mlsource/extra/Motif/MOTIF_TYPES.ML0000644000175000017500000002332410313043361020120 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) signature MOTIF_TYPES = sig structure XWINDOWS: sig type Colormap; type Cursor; type Display; type Drawable; type Visual; type XFontStruct; type XWMStateHint; type 'a XEvent; end; (* should we have a separate Xt level? Probaly. SPF 6/12/94 *) type Widget; type XtAccelerators; type XtTranslations; (* Added 6/12/94 SPF *) datatype XtGrabKind = XtGrabNone | XtGrabNonexclusive | XtGrabExclusive; datatype XmAlignment = XmALIGNMENT_BEGINNING | XmALIGNMENT_CENTER | XmALIGNMENT_END; datatype XmArrowDirection = XmARROW_UP | XmARROW_DOWN | XmARROW_LEFT | XmARROW_RIGHT; datatype XmAttachment = XmATTACH_NONE | XmATTACH_FORM | XmATTACH_OPPOSITE_FORM | XmATTACH_WIDGET | XmATTACH_OPPOSITE_WIDGET | XmATTACH_POSITION | XmATTACH_SELF; datatype XmButtonType = XmPUSHBUTTON | XmCHECKBUTTON | XmTOGGLEBUTTON | XmRADIOBUTTON | XmCASCADEBUTTON | XmSEPARATOR | XmDOUBLE_SEPARATOR | XmTITLE; datatype XmCommandWindowLocation = XmCOMMAND_ABOVE_WORKSPACE | XmCOMMAND_BELOW_WORKSPACE; datatype XmDefaultButtonType = XmDIALOG_NONE | XmDIALOG_APPLY_BUTTON | XmDIALOG_CANCEL_BUTTON | XmDIALOG_DEFAULT_BUTTON | XmDIALOG_OK_BUTTON | XmDIALOG_FILTER_LABEL | XmDIALOG_FILTER_TEXT | XmDIALOG_HELP_BUTTON | XmDIALOG_LIST | XmDIALOG_LIST_LABEL | XmDIALOG_MESSAGE_LABEL | XmDIALOG_SELECTION_LABEL | XmDIALOG_SYMBOL_LABEL | XmDIALOG_TEXT | XmDIALOG_SEPARATOR | XmDIALOG_DIR_LIST | XmDIALOG_DIR_LIST_LABEL (* | XmDIALOG_COMMAND_TEXT = XmDIALOG_TEXT | XmDIALOG_VALUE_TEXT = XmDIALOG_TEXT | XmDIALOG_PROMPT_LABEL = XmDIALOG_SELECTION_LABEL | XmDIALOG_HISTORY_LIST = XmDIALOG_LIST | XmDIALOG_FILE_LIST = XmDIALOG_LIST | XmDIALOG_FILE_LIST_LABEL = XmDIALOG_LIST_LABEL *); val XmDIALOG_COMMAND_TEXT: XmDefaultButtonType; val XmDIALOG_VALUE_TEXT: XmDefaultButtonType; val XmDIALOG_PROMPT_LABEL: XmDefaultButtonType; val XmDIALOG_HISTORY_LIST: XmDefaultButtonType; val XmDIALOG_FILE_LIST: XmDefaultButtonType; val XmDIALOG_FILE_LIST_LABEL: XmDefaultButtonType; datatype XmDeleteResponse = XmDESTROY | XmUNMAP | XmDO_NOTHING; datatype XmDialogStyle = XmDIALOG_MODELESS | XmDIALOG_PRIMARY_APPLICATION_MODAL | XmDIALOG_FULL_APPLICATION_MODAL | XmDIALOG_SYSTEM_MODAL (* | XmDIALOG_APPLICATION_MODAL *); val XmDIALOG_APPLICATION_MODAL: XmDialogStyle; datatype XmDialogType = XmDIALOG_ERROR | XmDIALOG_INFORMATION | XmDIALOG_MESSAGE | XmDIALOG_QUESTION | XmDIALOG_WARNING | XmDIALOG_WORKING | XmDIALOG_WORK_AREA | XmDIALOG_PROMPT | XmDIALOG_SELECTION | XmDIALOG_COMMAND | XmDIALOG_FILE_SELECTION; datatype XmEditMode = XmMULTI_LINE_EDIT | XmSINGLE_LINE_EDIT; datatype XmFileTypeMask = XmFILE_REGULAR | XmFILE_DIRECTORY | XmFILE_ANY_TYPE; datatype XmIndicatorType = XmN_OF_MANY | XmONE_OF_MANY; datatype XmKeyboardFocusPolicy = XmEXPLICIT | XmPOINTER; datatype XmLabelType = XmPIXMAP | XmSTRING; datatype XmMultiClickType = XmMULTICLICK_DISCARD | XmMULTICLICK_KEEP; datatype XmNavigationType = XmNONE | XmTAB_GROUP | XmSTICKY_TAB_GROUP | XmEXCLUSIVE_TAB_GROUP; datatype XmOrientation = XmVERTICAL | XmHORIZONTAL; datatype XmPacking = XmPACK_TIGHT | XmPACK_COLUMN | XmPACK_NONE; datatype XmProcessingDirection = XmMAX_ON_TOP | XmMAX_ON_BOTTOM | XmMAX_ON_LEFT | XmMAX_ON_RIGHT; datatype XmResizePolicy = XmRESIZE_NONE | XmRESIZE_ANY | XmRESIZE_GROW; datatype XmRowColumnType = XmWORK_AREA | XmMENU_BAR | XmMENU_PULLDOWN | XmMENU_POPUP | XmMENU_OPTION; datatype XmScrollBarDisplayPolicy = XmSTATIC | XmAS_NEEDED; datatype XmScrollBarPlacement = XmBOTTOM_RIGHT | XmTOP_RIGHT | XmBOTTOM_LEFT | XmTOP_LEFT; datatype XmScrollingPolicy = XmAUTOMATIC | XmAPPLICATION_DEFINED; datatype XmSelectionPolicy = XmSINGLE_SELECT | XmMULTIPLE_SELECT | XmEXTENDED_SELECT | XmBROWSE_SELECT; datatype XmShadowType = XmNO_LINE | XmSINGLE_LINE | XmDOUBLE_LINE | XmSINGLE_DASHED_LINE | XmDOUBLE_DASHED_LINE | XmSHADOW_ETCHED_IN | XmSHADOW_ETCHED_OUT | XmSHADOW_IN | XmSHADOW_OUT; datatype XmStringDirection = XmSTRING_DIRECTION_L_TO_R | XmSTRING_DIRECTION_R_TO_L | XmSTRING_DIRECTION_DEFAULT; datatype XmTextScanType = XmSELECT_POSITION | XmSELECT_WHITESPACE | XmSELECT_WORD | XmSELECT_LINE | XmSELECT_ALL | XmSELECT_PARAGRAPH; datatype XmUnitType = XmPIXELS | Xm100TH_MILLIMETERS | Xm1000TH_INCHES | Xm100TH_POINTS | Xm100TH_FONT_UNITS; datatype XmVisualPolicy = XmVARIABLE | XmCONSTANT | XmRESIZE_IF_POSSIBLE; type XmString = string; type Arg = exn; datatype XmRType = XmRAcceleratorTable of XtAccelerators | XmRAlignment of XmAlignment | XmRArrowDirection of XmArrowDirection | XmRAtom of int | XmRAttachment of XmAttachment | XmRBool of bool | XmRButtonTypeTable of XmButtonType list | XmRCardinal of int | XmRColormap of XWINDOWS.Colormap | XmRCommandWindowLocation of XmCommandWindowLocation | XmRCursor of XWINDOWS.Cursor | XmRDefaultButtonType of XmDefaultButtonType | XmRDeleteResponse of XmDeleteResponse | XmRDialogStyle of XmDialogStyle | XmRDialogType of XmDialogType | XmRDimension of int | XmREditMode of XmEditMode | XmRFileTypeMask of XmFileTypeMask | XmRFontList of (XWINDOWS.XFontStruct * string) list | XmRIndicatorType of XmIndicatorType | XmRInitialState of XWINDOWS.XWMStateHint | XmRInt of int | XmRKeySym of int | XmRKeySymTable of int list | XmRKeyboardFocusPolicy of XmKeyboardFocusPolicy | XmRLabelType of XmLabelType | XmRMultiClick of XmMultiClickType | XmRNavigationType of XmNavigationType | XmROrientation of XmOrientation | XmRPacking of XmPacking | XmRProcessingDirection of XmProcessingDirection | XmRResizePolicy of XmResizePolicy | XmRRowColumnType of XmRowColumnType | XmRPixel of int | XmRPixmap of XWINDOWS.Drawable | XmRPosition of int | XmRScrollBarDisplayPolicy of XmScrollBarDisplayPolicy | XmRScrollBarPlacement of XmScrollBarPlacement | XmRScrollingPolicy of XmScrollingPolicy | XmRSelectionPolicy of XmSelectionPolicy | XmRShadowType of XmShadowType | XmRShort of int | XmRStringDirection of XmStringDirection | XmRString of string | XmRStringTable of string list | XmRTextScanTypeTable of XmTextScanType list | XmRTranslationTable of XtTranslations | XmRUnitType of XmUnitType | XmRVisual of XWINDOWS.Visual | XmRVisualPolicy of XmVisualPolicy | XmRWidget of Widget | XmRWidgetList of Widget list | XmRXmString of XmString | XmRXmStringTable of XmString list; datatype XtCallback = XmNactivateCallback | XmNapplyCallback | XmNarmCallback | XmNbrowseSelectionCallback | XmNcancelCallback | XmNcascadingCallback | XmNcommandChangedCallback | XmNcommandEnteredCallback | XmNdecrementCallback | XmNdefaultActionCallback | XmNdestroyCallback | XmNdisarmCallback | XmNdragCallback | XmNentryCallback | XmNexposeCallback | XmNextendedSelectionCallback | XmNfocusCallback | XmNgainPrimaryCallback | XmNhelpCallback | XmNincrementCallback | XmNinputCallback | XmNlosePrimaryCallback | XmNlosingFocusCallback | XmNmapCallback | XmNmessageCallback (* this callback gets Message XEvents only *) | XmNmodifyVerifyCallback | XmNmotionVerifyCallback | XmNmultipleSelectionCallback | XmNnoMatchCallback | XmNokCallback | XmNpageDecrementCallback | XmNpageIncrementCallback | XmNpopdownCallback | XmNpopupCallback | XmNresizeCallback | XmNsimpleCallback | XmNsingleSelectionCallback | XmNtoBottomCallback | XmNtoTopCallback | XmNunmapCallback | XmNvalueChangedCallback; end; (* signature *) polyml.5.2.1/mlsource/extra/Motif/MotifCore.ML0000644000175000017500000011444011003114740020142 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* Note that this module depends on the compiler's *representation* of exceptions; this is absolutely disgusting, completely unnecessary, and a source of inefficiency (all those Casts!). When I have some spare time, I'm going to cure this. SPF 6/12/94 *) structure MotifCore = struct local open XWindows; open XCall; open MotifTypes; open XmTypes; fun fromAlignment XmALIGNMENT_BEGINNING = 0 | fromAlignment XmALIGNMENT_CENTER = 1 | fromAlignment XmALIGNMENT_END = 2; fun toAlignment 0 = XmALIGNMENT_BEGINNING | toAlignment 1 = XmALIGNMENT_CENTER | toAlignment _ = XmALIGNMENT_END; fun fromArrowDirection XmARROW_UP = 0 | fromArrowDirection XmARROW_DOWN = 1 | fromArrowDirection XmARROW_LEFT = 2 | fromArrowDirection XmARROW_RIGHT = 3; fun toArrowDirection 0 = XmARROW_UP | toArrowDirection 1 = XmARROW_DOWN | toArrowDirection 2 = XmARROW_LEFT | toArrowDirection _ = XmARROW_RIGHT; fun fromAttachment XmATTACH_NONE = 0 | fromAttachment XmATTACH_FORM = 1 | fromAttachment XmATTACH_OPPOSITE_FORM = 2 | fromAttachment XmATTACH_WIDGET = 3 | fromAttachment XmATTACH_OPPOSITE_WIDGET = 4 | fromAttachment XmATTACH_POSITION = 5 | fromAttachment XmATTACH_SELF = 6; fun toAttachment 0 = XmATTACH_NONE | toAttachment 1 = XmATTACH_FORM | toAttachment 2 = XmATTACH_OPPOSITE_FORM | toAttachment 3 = XmATTACH_WIDGET | toAttachment 4 = XmATTACH_OPPOSITE_WIDGET | toAttachment 5 = XmATTACH_POSITION | toAttachment _ = XmATTACH_SELF; fun fromButtonType XmPUSHBUTTON = 1 | fromButtonType XmCHECKBUTTON = 2 | fromButtonType XmTOGGLEBUTTON = 2 (* same as XmCHECKBUTTON *) | fromButtonType XmRADIOBUTTON = 3 | fromButtonType XmCASCADEBUTTON = 4 | fromButtonType XmSEPARATOR = 5 | fromButtonType XmDOUBLE_SEPARATOR = 6 | fromButtonType XmTITLE = 7; fun toButtonType 1 = XmPUSHBUTTON | toButtonType 2 = XmCHECKBUTTON | toButtonType 3 = XmRADIOBUTTON | toButtonType 4 = XmCASCADEBUTTON | toButtonType 5 = XmSEPARATOR | toButtonType 6 = XmDOUBLE_SEPARATOR | toButtonType _ = XmTITLE; fun fromCommandWindowLocation XmCOMMAND_ABOVE_WORKSPACE = 0 | fromCommandWindowLocation XmCOMMAND_BELOW_WORKSPACE = 1; fun toCommandWindowLocation 0 = XmCOMMAND_ABOVE_WORKSPACE | toCommandWindowLocation _ = XmCOMMAND_BELOW_WORKSPACE; fun fromDefaultButtonType XmDIALOG_NONE = 0 | fromDefaultButtonType XmDIALOG_APPLY_BUTTON = 1 | fromDefaultButtonType XmDIALOG_CANCEL_BUTTON = 2 | fromDefaultButtonType XmDIALOG_DEFAULT_BUTTON = 3 | fromDefaultButtonType XmDIALOG_OK_BUTTON = 4 | fromDefaultButtonType XmDIALOG_FILTER_LABEL = 5 | fromDefaultButtonType XmDIALOG_FILTER_TEXT = 6 | fromDefaultButtonType XmDIALOG_HELP_BUTTON = 7 | fromDefaultButtonType XmDIALOG_LIST = 8 | fromDefaultButtonType XmDIALOG_LIST_LABEL = 9 | fromDefaultButtonType XmDIALOG_MESSAGE_LABEL = 10 | fromDefaultButtonType XmDIALOG_SELECTION_LABEL = 11 | fromDefaultButtonType XmDIALOG_SYMBOL_LABEL = 12 | fromDefaultButtonType XmDIALOG_TEXT = 13 | fromDefaultButtonType XmDIALOG_SEPARATOR = 14 | fromDefaultButtonType XmDIALOG_DIR_LIST = 15 | fromDefaultButtonType XmDIALOG_DIR_LIST_LABEL = 16; fun toDefaultButtonType 0 = XmDIALOG_NONE | toDefaultButtonType 1 = XmDIALOG_APPLY_BUTTON | toDefaultButtonType 2 = XmDIALOG_CANCEL_BUTTON | toDefaultButtonType 3 = XmDIALOG_DEFAULT_BUTTON | toDefaultButtonType 4 = XmDIALOG_OK_BUTTON | toDefaultButtonType 5 = XmDIALOG_FILTER_LABEL | toDefaultButtonType 6 = XmDIALOG_FILTER_TEXT | toDefaultButtonType 7 = XmDIALOG_HELP_BUTTON | toDefaultButtonType 8 = XmDIALOG_LIST | toDefaultButtonType 9 = XmDIALOG_LIST_LABEL | toDefaultButtonType 10 = XmDIALOG_MESSAGE_LABEL | toDefaultButtonType 11 = XmDIALOG_SELECTION_LABEL | toDefaultButtonType 12 = XmDIALOG_SYMBOL_LABEL | toDefaultButtonType 13 = XmDIALOG_TEXT | toDefaultButtonType 14 = XmDIALOG_SEPARATOR | toDefaultButtonType 15 = XmDIALOG_DIR_LIST | toDefaultButtonType _ = XmDIALOG_DIR_LIST_LABEL; fun fromDeleteResponse XmDESTROY = 0 | fromDeleteResponse XmUNMAP = 1 | fromDeleteResponse XmDO_NOTHING = 2; fun toDeleteResponse 0 = XmDESTROY | toDeleteResponse 1 = XmUNMAP | toDeleteResponse _ = XmDO_NOTHING; fun fromDialogStyle XmDIALOG_MODELESS = 0 | fromDialogStyle XmDIALOG_PRIMARY_APPLICATION_MODAL = 1 | fromDialogStyle XmDIALOG_FULL_APPLICATION_MODAL = 2 | fromDialogStyle XmDIALOG_SYSTEM_MODAL = 3; fun toDialogStyle 0 = XmDIALOG_MODELESS | toDialogStyle 1 = XmDIALOG_PRIMARY_APPLICATION_MODAL | toDialogStyle 2 = XmDIALOG_FULL_APPLICATION_MODAL | toDialogStyle _ = XmDIALOG_SYSTEM_MODAL; fun fromDialogType XmDIALOG_ERROR = 1 (* XmMessageBox values *) | fromDialogType XmDIALOG_INFORMATION = 2 | fromDialogType XmDIALOG_MESSAGE = 3 | fromDialogType XmDIALOG_QUESTION = 4 | fromDialogType XmDIALOG_WARNING = 5 | fromDialogType XmDIALOG_WORKING = 6 | fromDialogType XmDIALOG_WORK_AREA = 0 (* XmSelectionBox values *) | fromDialogType XmDIALOG_PROMPT = 1 | fromDialogType XmDIALOG_SELECTION = 2 | fromDialogType XmDIALOG_COMMAND = 3 | fromDialogType XmDIALOG_FILE_SELECTION = 4; fun toDialogType 0 = XmDIALOG_WORK_AREA | toDialogType 1 = XmDIALOG_ERROR | toDialogType 2 = XmDIALOG_INFORMATION | toDialogType 3 = XmDIALOG_MESSAGE | toDialogType 4 = XmDIALOG_QUESTION | toDialogType 5 = XmDIALOG_WARNING | toDialogType _ = XmDIALOG_WORKING; fun fromEditMode XmMULTI_LINE_EDIT = 0 | fromEditMode XmSINGLE_LINE_EDIT = 1; fun toEditMode 0 = XmMULTI_LINE_EDIT | toEditMode _ = XmSINGLE_LINE_EDIT; fun fromFileTypeMask XmFILE_REGULAR = 1 | fromFileTypeMask XmFILE_DIRECTORY = 2 | fromFileTypeMask XmFILE_ANY_TYPE = 3; fun toFileTypeMask 1 = XmFILE_REGULAR | toFileTypeMask 2 = XmFILE_DIRECTORY | toFileTypeMask _ = XmFILE_ANY_TYPE; fun fromIndicatorType XmN_OF_MANY = 1 | fromIndicatorType XmONE_OF_MANY = 2; fun toIndicatorType 1 = XmN_OF_MANY | toIndicatorType _ = XmONE_OF_MANY; fun fromKeyboardFocusPolicy XmEXPLICIT = 0 | fromKeyboardFocusPolicy XmPOINTER = 1; fun toKeyboardFocusPolicy 0 = XmEXPLICIT | toKeyboardFocusPolicy _ = XmPOINTER; fun fromLabelType XmPIXMAP = 1 | fromLabelType XmSTRING = 2; fun toLabelType 1 = XmPIXMAP | toLabelType _ = XmSTRING; fun fromMultiClick XmMULTICLICK_DISCARD = 0 | fromMultiClick XmMULTICLICK_KEEP = 1; fun toMultiClick 0 = XmMULTICLICK_DISCARD | toMultiClick _ = XmMULTICLICK_KEEP; fun fromNavigationType XmNONE = 0 | fromNavigationType XmTAB_GROUP = 1 | fromNavigationType XmSTICKY_TAB_GROUP = 2 | fromNavigationType XmEXCLUSIVE_TAB_GROUP = 3; fun toNavigationType 0 = XmNONE | toNavigationType 1 = XmTAB_GROUP | toNavigationType 2 = XmSTICKY_TAB_GROUP | toNavigationType _ = XmEXCLUSIVE_TAB_GROUP; fun fromOrientation XmVERTICAL = 1 | fromOrientation XmHORIZONTAL = 2; fun toOrientation 1 = XmVERTICAL | toOrientation _ = XmHORIZONTAL; fun fromResizePolicy XmRESIZE_NONE = 0 | fromResizePolicy XmRESIZE_GROW = 1 | fromResizePolicy XmRESIZE_ANY = 2; fun toResizePolicy 0 = XmRESIZE_NONE | toResizePolicy 1 = XmRESIZE_GROW | toResizePolicy _ = XmRESIZE_ANY; fun fromRowColumnType XmWORK_AREA = 0 | fromRowColumnType XmMENU_BAR = 1 | fromRowColumnType XmMENU_PULLDOWN = 2 | fromRowColumnType XmMENU_POPUP = 3 | fromRowColumnType XmMENU_OPTION = 4; fun toRowColumnType 0 = XmWORK_AREA | toRowColumnType 1 = XmMENU_BAR | toRowColumnType 2 = XmMENU_PULLDOWN | toRowColumnType 3 = XmMENU_POPUP | toRowColumnType _ = XmMENU_OPTION; fun fromPacking XmPACK_TIGHT = 1 | fromPacking XmPACK_COLUMN = 2 | fromPacking XmPACK_NONE = 3; fun toPacking 1 = XmPACK_TIGHT | toPacking 2 = XmPACK_COLUMN | toPacking _ = XmPACK_NONE; fun fromProcessingDirection XmMAX_ON_TOP = 0 | fromProcessingDirection XmMAX_ON_BOTTOM = 1 | fromProcessingDirection XmMAX_ON_LEFT = 2 | fromProcessingDirection XmMAX_ON_RIGHT = 3; fun toProcessingDirection 0 = XmMAX_ON_TOP | toProcessingDirection 1 = XmMAX_ON_BOTTOM | toProcessingDirection 2 = XmMAX_ON_LEFT | toProcessingDirection _ = XmMAX_ON_RIGHT; fun fromScrollBarDisplayPolicy XmSTATIC = 0 | fromScrollBarDisplayPolicy XmAS_NEEDED = 1; fun toScrollBarDisplayPolicy 0 = XmSTATIC | toScrollBarDisplayPolicy _ = XmAS_NEEDED; fun fromScrollBarPlacement XmBOTTOM_RIGHT = 0 | fromScrollBarPlacement XmTOP_RIGHT = 1 | fromScrollBarPlacement XmBOTTOM_LEFT = 2 | fromScrollBarPlacement XmTOP_LEFT = 3; fun toScrollBarPlacement 0 = XmBOTTOM_RIGHT | toScrollBarPlacement 1 = XmTOP_RIGHT | toScrollBarPlacement 2 = XmBOTTOM_LEFT | toScrollBarPlacement _ = XmTOP_LEFT; fun fromScrollingPolicy XmAUTOMATIC = 0 | fromScrollingPolicy XmAPPLICATION_DEFINED = 1; fun toScrollingPolicy 0 = XmAUTOMATIC | toScrollingPolicy _ = XmAPPLICATION_DEFINED; fun fromSelectionPolicy XmSINGLE_SELECT = 0 | fromSelectionPolicy XmMULTIPLE_SELECT = 1 | fromSelectionPolicy XmEXTENDED_SELECT = 2 | fromSelectionPolicy XmBROWSE_SELECT = 3; fun toSelectionPolicy 0 = XmSINGLE_SELECT | toSelectionPolicy 1 = XmMULTIPLE_SELECT | toSelectionPolicy 2 = XmEXTENDED_SELECT | toSelectionPolicy _ = XmBROWSE_SELECT; fun fromShadowType XmNO_LINE = 0 | fromShadowType XmSINGLE_LINE = 1 | fromShadowType XmDOUBLE_LINE = 2 | fromShadowType XmSINGLE_DASHED_LINE = 3 | fromShadowType XmDOUBLE_DASHED_LINE = 4 | fromShadowType XmSHADOW_ETCHED_IN = 5 | fromShadowType XmSHADOW_ETCHED_OUT = 6 | fromShadowType XmSHADOW_IN = 7 | fromShadowType XmSHADOW_OUT = 8; fun toShadowType 0 = XmNO_LINE | toShadowType 1 = XmSINGLE_LINE | toShadowType 2 = XmDOUBLE_LINE | toShadowType 3 = XmSINGLE_DASHED_LINE | toShadowType 4 = XmDOUBLE_DASHED_LINE | toShadowType 5 = XmSHADOW_ETCHED_IN | toShadowType 6 = XmSHADOW_ETCHED_OUT | toShadowType 7 = XmSHADOW_IN | toShadowType _ = XmSHADOW_OUT; fun fromStringDirection XmSTRING_DIRECTION_L_TO_R = 0 | fromStringDirection XmSTRING_DIRECTION_R_TO_L = 1 | fromStringDirection XmSTRING_DIRECTION_DEFAULT = 255; fun toStringDirection 0 = XmSTRING_DIRECTION_L_TO_R | toStringDirection 1 = XmSTRING_DIRECTION_R_TO_L | toStringDirection _ = XmSTRING_DIRECTION_DEFAULT; fun fromTextScanType XmSELECT_POSITION = 0 | fromTextScanType XmSELECT_WHITESPACE = 1 | fromTextScanType XmSELECT_WORD = 2 | fromTextScanType XmSELECT_LINE = 3 | fromTextScanType XmSELECT_ALL = 4 | fromTextScanType XmSELECT_PARAGRAPH = 5; fun toTextScanType 0 = XmSELECT_POSITION | toTextScanType 1 = XmSELECT_WHITESPACE | toTextScanType 2 = XmSELECT_WORD | toTextScanType 3 = XmSELECT_LINE | toTextScanType 4 = XmSELECT_ALL | toTextScanType _ = XmSELECT_PARAGRAPH; fun fromUnitType XmPIXELS = 0 | fromUnitType Xm100TH_MILLIMETERS = 1 | fromUnitType Xm1000TH_INCHES = 2 | fromUnitType Xm100TH_POINTS = 3 | fromUnitType Xm100TH_FONT_UNITS = 4; fun toUnitType 0 = XmPIXELS | toUnitType 1 = Xm100TH_MILLIMETERS | toUnitType 2 = Xm1000TH_INCHES | toUnitType 3 = Xm100TH_POINTS | toUnitType _ = Xm100TH_FONT_UNITS; fun fromVisualPolicy XmVARIABLE = 0 | fromVisualPolicy XmCONSTANT = 1 | fromVisualPolicy XmRESIZE_IF_POSSIBLE = 2; fun toVisualPolicy 0 = XmVARIABLE | toVisualPolicy 1 = XmCONSTANT | toVisualPolicy _ = XmRESIZE_IF_POSSIBLE; fun fromXWMStateHint DontCareState = 0 | fromXWMStateHint NormalState = 1 | fromXWMStateHint ZoomState = 2 | fromXWMStateHint IconicState = 3 | fromXWMStateHint InactiveState = 4; fun toXWMStateHint 0 = DontCareState | toXWMStateHint 1 = NormalState | toXWMStateHint 2 = ZoomState | toXWMStateHint 3 = IconicState | toXWMStateHint _ = InactiveState; (* When this datatype changes the runtime system must change as well. *) (* I've removed this and replaced it simply by a tuple but making the tuple represent the values in the same way. That makes the interface independent of the way datatypes are represented. Note: the old representation of datatypes put the tag in the second word. DCJM 27/3/01. *) (* datatype CType = CAccelerators of XtAccelerators | CBool of bool (* typedef char Boolean *) | CColormap of Colormap | CCursor of Cursor | CDimension of int (* typedef unsigned short Dimension *) | CFontList of (XFontStruct * string) list | CInt of int | CIntTable of int list | CKeySym of int (* typedef unsigned int KeySym *) | CPixmap of Drawable | CPosition of int (* typedef short Position *) | CString of string | CStringTable of string list | CTrans of XtTranslations | CUnsignedChar of int | CUnsignedTable of int list (* typedef uchar * *) | CVisual of Visual | CWidget of Widget | CWidgetList of Widget list | CXmString of string | CXmStringTable of string list; *) val cAccelerators = 1 and cBool = 2 and cColormap = 3 and cCursor = 4 and cDimension = 5 and cFontList = 6 and cInt = 7 and cIntTable = 8 and cKeySym = 9 and cPixmap = 10 and cPosition = 11 and cString = 12 and cStringTable = 13 and cTrans = 14 and cUnsignedChar = 15 and cUnsignedTable = 16 and cVisual = 17 and cWidget = 18 and cWidgetList = 19 and cXmString = 20 and cXmStringTable = 21 fun I x = x; (* This version can be inlined for greater efficiency. SPF 1/6/95 *) val Cast : 'a -> 'b = RunCall.unsafeCast; val toInt : 'a -> int = Cast (* we could make this any type. *) fun CType (XmRAcceleratorTable a) = (toInt a, cAccelerators) | CType (XmRAlignment a) = (fromAlignment a, cUnsignedChar) | CType (XmRArrowDirection a) = (fromArrowDirection a, cUnsignedChar) | CType (XmRAtom i) = (i, cKeySym) (* Atom = unsigned = KeySym *) | CType (XmRAttachment a) = (fromAttachment a, cUnsignedChar) | CType (XmRBool b) = (toInt b, cBool) | CType (XmRButtonTypeTable L) = (toInt(map fromButtonType L), cUnsignedTable) | CType (XmRCardinal i) = (i, cKeySym) (* Cardinal = unsigned = KeySym *) | CType (XmRColormap c) = (toInt c, cColormap) | CType (XmRCommandWindowLocation t) = (fromCommandWindowLocation t, cUnsignedChar) | CType (XmRCursor c) = (toInt c, cCursor) | CType (XmRDefaultButtonType e) = (fromDefaultButtonType e, cInt) | CType (XmRDeleteResponse e) = (fromDeleteResponse e, cInt) | CType (XmRDialogStyle e) = (fromDialogStyle e, cInt) | CType (XmRDialogType e) = (fromDialogType e, cUnsignedChar) | CType (XmRDimension d) = (d, cDimension) | CType (XmREditMode e) = (fromEditMode e, cInt) | CType (XmRFileTypeMask m) = (fromFileTypeMask m, cUnsignedChar) | CType (XmRFontList L) = (toInt L, cFontList) | CType (XmRIndicatorType t) = (fromIndicatorType t, cUnsignedChar) | CType (XmRInitialState i) = (fromXWMStateHint i, cInt) | CType (XmRInt i) = (i, cInt) | CType (XmRKeySym k) = (k, cKeySym) | CType (XmRKeySymTable k) = (toInt k, cIntTable) | CType (XmRKeyboardFocusPolicy t) = (fromKeyboardFocusPolicy t, cUnsignedChar) | CType (XmRLabelType t) = (fromLabelType t, cUnsignedChar) | CType (XmRMultiClick t) = (fromMultiClick t, cUnsignedChar) | CType (XmRNavigationType t) = (fromNavigationType t, cUnsignedChar) | CType (XmROrientation r) = (fromOrientation r, cUnsignedChar) | CType (XmRPacking p) = (fromPacking p, cUnsignedChar) | CType (XmRProcessingDirection p) = (fromProcessingDirection p, cUnsignedChar) | CType (XmRResizePolicy p) = (fromResizePolicy p, cUnsignedChar) | CType (XmRRowColumnType p) = (fromRowColumnType p, cUnsignedChar) | CType (XmRPixel p) = (p, cInt) | CType (XmRPixmap p) = (toInt p, cPixmap) | CType (XmRPosition p) = (p, cPosition) | CType (XmRScrollBarDisplayPolicy p) = (fromScrollBarDisplayPolicy p, cUnsignedChar) | CType (XmRScrollBarPlacement p) = (fromScrollBarPlacement p, cUnsignedChar) | CType (XmRScrollingPolicy p) = (fromScrollingPolicy p, cUnsignedChar) | CType (XmRSelectionPolicy p) = (fromSelectionPolicy p, cUnsignedChar) | CType (XmRShadowType t) = (fromShadowType t, cUnsignedChar) | CType (XmRShort i) = (i, cPosition) (* Position = short *) | CType (XmRStringDirection t) = (fromStringDirection t, cUnsignedChar) | CType (XmRString s) = (toInt s, cString) | CType (XmRStringTable s) = (toInt s, cStringTable) | CType (XmRTextScanTypeTable L) = (toInt(map fromTextScanType L), cIntTable) | CType (XmRTranslationTable t) = (toInt t, cTrans) | CType (XmRUnitType t) = (fromUnitType t, cUnsignedChar) | CType (XmRVisual v) = (toInt v, cVisual) | CType (XmRVisualPolicy p) = (fromVisualPolicy p, cUnsignedChar) | CType (XmRWidget w) = (toInt w, cWidget) | CType (XmRWidgetList L) = (toInt L, cWidgetList) | CType (XmRXmString s) = (toInt s, cXmString) | CType (XmRXmStringTable t) = (toInt t, cXmStringTable); fun Convert (XmRAcceleratorTable _) = I | Convert (XmRAlignment _) = Cast toAlignment | Convert (XmRArrowDirection _) = Cast toArrowDirection | Convert (XmRAtom _) = I | Convert (XmRAttachment _) = Cast toAttachment | Convert (XmRBool _) = I | Convert (XmRButtonTypeTable _) = Cast (map toButtonType) | Convert (XmRCardinal _) = I | Convert (XmRColormap _) = I | Convert (XmRCommandWindowLocation _) = Cast toCommandWindowLocation | Convert (XmRCursor _) = I | Convert (XmRDefaultButtonType _) = Cast toDefaultButtonType | Convert (XmRDeleteResponse _) = Cast toDeleteResponse | Convert (XmRDialogStyle _) = Cast toDialogStyle | Convert (XmRDialogType _) = Cast toDialogType | Convert (XmRDimension _) = I | Convert (XmREditMode _) = Cast toEditMode | Convert (XmRFileTypeMask _) = Cast toFileTypeMask | Convert (XmRFontList _) = I | Convert (XmRIndicatorType _) = Cast toIndicatorType | Convert (XmRInitialState _) = Cast toXWMStateHint | Convert (XmRInt _) = I | Convert (XmRKeySym _) = I | Convert (XmRKeySymTable _) = I | Convert (XmRKeyboardFocusPolicy _) = Cast toKeyboardFocusPolicy | Convert (XmRLabelType _) = Cast toLabelType | Convert (XmRMultiClick _) = Cast toMultiClick | Convert (XmRNavigationType _) = Cast toNavigationType | Convert (XmROrientation _) = Cast toOrientation | Convert (XmRPacking _) = Cast toPacking | Convert (XmRProcessingDirection _) = Cast toProcessingDirection | Convert (XmRResizePolicy _) = Cast toResizePolicy | Convert (XmRRowColumnType _) = Cast toRowColumnType | Convert (XmRPixel _) = I | Convert (XmRPixmap _) = I | Convert (XmRPosition _) = I | Convert (XmRScrollBarDisplayPolicy _) = Cast toScrollBarDisplayPolicy | Convert (XmRScrollBarPlacement _) = Cast toScrollBarPlacement | Convert (XmRScrollingPolicy _) = Cast toScrollingPolicy | Convert (XmRSelectionPolicy _) = Cast toSelectionPolicy | Convert (XmRShadowType _) = Cast toShadowType | Convert (XmRShort _) = I | Convert (XmRStringDirection _) = Cast toStringDirection | Convert (XmRString _) = I | Convert (XmRStringTable _) = I | Convert (XmRTextScanTypeTable _) = Cast (map toTextScanType) | Convert (XmRTranslationTable _) = I | Convert (XmRUnitType _) = Cast toUnitType | Convert (XmRVisual _) = I | Convert (XmRVisualPolicy _) = Cast toVisualPolicy | Convert (XmRWidget _) = I | Convert (XmRWidgetList _) = I | Convert (XmRXmString _) = I | Convert (XmRXmStringTable _) = I; fun RName (XmRAcceleratorTable _) = "AcceleratorTable" | RName (XmRAlignment _) = "Alignment" | RName (XmRArrowDirection _) = "ArrowDirection" | RName (XmRAtom _) = "Atom" | RName (XmRAttachment _) = "Attachment" | RName (XmRBool _) = "Bool" | RName (XmRButtonTypeTable _) = "ButtonTypeTable" | RName (XmRCardinal _) = "Cardinal" | RName (XmRColormap _) = "Colormap" | RName (XmRCommandWindowLocation _) = "CommandWindowLocation" | RName (XmRCursor _) = "Cursor" | RName (XmRDefaultButtonType _) = "DefaultButtonType" | RName (XmRDeleteResponse _) = "DeleteResponse" | RName (XmRDialogStyle _) = "DialogStyle" | RName (XmRDialogType _) = "DialogType" | RName (XmRDimension _) = "Dimension" | RName (XmREditMode _) = "EditMode" | RName (XmRFileTypeMask _) = "FileTypeMask" | RName (XmRFontList _) = "FontList" | RName (XmRIndicatorType _) = "IndicatorType" | RName (XmRInitialState _) = "InitialState" | RName (XmRInt _) = "Int" | RName (XmRKeySym _) = "KeySym" | RName (XmRKeySymTable _) = "KeySymTable" | RName (XmRKeyboardFocusPolicy _) = "KeyboardFocusPolicy" | RName (XmRLabelType _) = "LabelType" | RName (XmRMultiClick _) = "MultiClick" | RName (XmRNavigationType _) = "NavigationType" | RName (XmROrientation _) = "Orientation" | RName (XmRPacking _) = "Packing" | RName (XmRProcessingDirection _) = "ProcessingDirection" | RName (XmRResizePolicy _) = "ResizePolicy" | RName (XmRRowColumnType _) = "RowColumnType" | RName (XmRPixel _) = "Pixel" | RName (XmRPixmap _) = "Pixmap" | RName (XmRPosition _) = "Position" | RName (XmRScrollBarDisplayPolicy _) = "ScrollBarDisplayPolicy" | RName (XmRScrollBarPlacement _) = "ScrollBarPlacement" | RName (XmRScrollingPolicy _) = "ScrollingPolicy" | RName (XmRSelectionPolicy _) = "SelectionPolicy" | RName (XmRShadowType _) = "ShadowType" | RName (XmRShort _) = "Short" | RName (XmRStringDirection _) = "StringDirection" | RName (XmRString _) = "String" | RName (XmRStringTable _) = "StringTable" | RName (XmRTextScanTypeTable _) = "TextScanTypeTable" | RName (XmRTranslationTable _) = "TranslationTable" | RName (XmRUnitType _) = "UnitType" | RName (XmRVisual _) = "Visual" | RName (XmRVisualPolicy _) = "VisualPolicy" | RName (XmRWidget _) = "Widget" | RName (XmRWidgetList _) = "WidgetList" | RName (XmRXmString _) = "XmString" | RName (XmRXmStringTable _) = "XmStringTable"; (* Added this function to remove the dependency on datatype representation. DCJM 28/3/01. *) fun insertValue (XmRAcceleratorTable _) v = XmRAcceleratorTable (Cast v) | insertValue (XmRAlignment _) v = XmRAlignment (Cast v) | insertValue (XmRArrowDirection _) v = XmRArrowDirection (Cast v) | insertValue (XmRAtom _) v = XmRAtom (Cast v) | insertValue (XmRAttachment _) v = XmRAttachment (Cast v) | insertValue (XmRBool _) v = XmRBool (Cast v) | insertValue (XmRButtonTypeTable _) v = XmRButtonTypeTable (Cast v) | insertValue (XmRCardinal _) v = XmRCardinal (Cast v) | insertValue (XmRColormap _) v = XmRColormap (Cast v) | insertValue (XmRCommandWindowLocation _) v = XmRCommandWindowLocation (Cast v) | insertValue (XmRCursor _) v = XmRCursor (Cast v) | insertValue (XmRDefaultButtonType _) v = XmRDefaultButtonType (Cast v) | insertValue (XmRDeleteResponse _) v = XmRDeleteResponse (Cast v) | insertValue (XmRDialogStyle _) v = XmRDialogStyle (Cast v) | insertValue (XmRDialogType _) v = XmRDialogType (Cast v) | insertValue (XmRDimension _) v = XmRDimension (Cast v) | insertValue (XmREditMode _) v = XmREditMode (Cast v) | insertValue (XmRFileTypeMask _) v = XmRFileTypeMask (Cast v) | insertValue (XmRFontList _) v = XmRFontList (Cast v) | insertValue (XmRIndicatorType _) v = XmRIndicatorType (Cast v) | insertValue (XmRInitialState _) v = XmRInitialState (Cast v) | insertValue (XmRInt _) v = XmRInt (Cast v) | insertValue (XmRKeySym _) v = XmRKeySym (Cast v) | insertValue (XmRKeySymTable _) v = XmRKeySymTable (Cast v) | insertValue (XmRKeyboardFocusPolicy _) v = XmRKeyboardFocusPolicy (Cast v) | insertValue (XmRLabelType _) v = XmRLabelType (Cast v) | insertValue (XmRMultiClick _) v = XmRMultiClick (Cast v) | insertValue (XmRNavigationType _) v = XmRNavigationType (Cast v) | insertValue (XmROrientation _) v = XmROrientation (Cast v) | insertValue (XmRPacking _) v = XmRPacking (Cast v) | insertValue (XmRProcessingDirection _) v = XmRProcessingDirection (Cast v) | insertValue (XmRResizePolicy _) v = XmRResizePolicy (Cast v) | insertValue (XmRRowColumnType _) v = XmRRowColumnType (Cast v) | insertValue (XmRPixel _) v = XmRPixel (Cast v) | insertValue (XmRPixmap _) v = XmRPixmap (Cast v) | insertValue (XmRPosition _) v = XmRPosition (Cast v) | insertValue (XmRScrollBarDisplayPolicy _) v = XmRScrollBarDisplayPolicy (Cast v) | insertValue (XmRScrollBarPlacement _) v = XmRScrollBarPlacement (Cast v) | insertValue (XmRScrollingPolicy _) v = XmRScrollingPolicy (Cast v) | insertValue (XmRSelectionPolicy _) v = XmRSelectionPolicy (Cast v) | insertValue (XmRShadowType _) v = XmRShadowType (Cast v) | insertValue (XmRShort _) v = XmRShort (Cast v) | insertValue (XmRStringDirection _) v = XmRStringDirection (Cast v) | insertValue (XmRString _) v = XmRString (Cast v) | insertValue (XmRStringTable _) v = XmRStringTable (Cast v) | insertValue (XmRTextScanTypeTable _) v = XmRTextScanTypeTable (Cast v) | insertValue (XmRTranslationTable _) v = XmRTranslationTable (Cast v) | insertValue (XmRUnitType _) v = XmRUnitType (Cast v) | insertValue (XmRVisual _) v = XmRVisual (Cast v) | insertValue (XmRVisualPolicy _) v = XmRVisualPolicy (Cast v) | insertValue (XmRWidget _) v = XmRWidget (Cast v) | insertValue (XmRWidgetList _) v = XmRWidgetList( Cast v) | insertValue (XmRXmString _) v = XmRXmString (Cast v) | insertValue (XmRXmStringTable _) v = XmRXmStringTable (Cast v); datatype Exn = EXN of unit ref * string * unit; val argTable = ref ([]:(Exn * string * XmRType) list); val Exn: Arg -> Exn = Cast; val Arg: Exn -> Arg = Cast; fun ArgName (e:Arg) = let (* open System; *) fun substring s i n = String.substring(s, i-1, n) val EXN (_,s,_) = Exn e; val n = size s; in if n < 3 orelse substring s 1 3 <> "XmN" then raise XWindows (s ^ " does not start with XmN") else substring s 4 (n - 3) end; fun FindByExn (e:Arg) = let val EXN (r1,n,value) = Exn e; (* This bit of code assumes that XmRType values are pairs with the tag in the second word and the value in the first. That's no longer correct. I've replaced it with the insertValue function above. DCJM 28/3/01. *) (*fun InsertValue (r:XmRType) = let val (_,tag) = Cast r; in Cast (value,tag):XmRType end;*) fun InsertValue (r:XmRType) = insertValue r value fun Find [] = raise XWindows (n ^ " has not been registered") | Find (H::T) = let val (EXN (r2,_,_),s,r) = H; in if r1 = r2 then (s,InsertValue r) else Find T end; in Find (!argTable) end; fun FindByString s = let fun Find [] = raise XWindows (s ^ " has not been registered.") | Find (H::T) = let val (_,t,_) = H; in if s = t then H else Find T end; in Find (!argTable) end; fun Length L = let fun Count [] n = n | Count (_::T) n = Count T (n+1); in Count L 0 end; in (*type CType = CType;*) val fromDefaultButtonType = fromDefaultButtonType; fun XtSetExnVals [] = [] | XtSetExnVals (H::T) = let val (s,r) = FindByExn H; val A = (s,CType r); in case H of XmNargv L => A :: XtSetExnVals (XmNargc (Length L) :: T) | XmNbuttonAccelerators L => A :: XtSetExnVals (XmNbuttonCount (Length L) :: T) | XmNbuttonAcceleratorText L => A :: XtSetExnVals (XmNbuttonCount (Length L) :: T) | XmNbuttonMnemonicCharSets L => A :: XtSetExnVals (XmNbuttonCount (Length L) :: T) | XmNbuttonMnemonics L => A :: XtSetExnVals (XmNbuttonCount (Length L) :: T) | XmNbuttons L => A :: XtSetExnVals (XmNbuttonCount (Length L) :: T) | XmNbuttonType L => A :: XtSetExnVals (XmNbuttonCount (Length L) :: T) | XmNchildren L => A :: XtSetExnVals (XmNnumChildren (Length L) :: T) | XmNdirListItems L => A :: XtSetExnVals (XmNdirListItemCount (Length L) :: T) | XmNfileListItems L => A :: XtSetExnVals (XmNfileListItemCount (Length L) :: T) | XmNhistoryItems L => A :: XtSetExnVals (XmNhistoryItemCount (Length L) :: T) | XmNitems L => A :: XtSetExnVals (XmNitemCount (Length L) :: T) | XmNlistItems L => A :: XtSetExnVals (XmNlistItemCount (Length L) :: T) | XmNselectedItems L => A :: XtSetExnVals (XmNselectedItemCount (Length L) :: T) | XmNselectionArray L => A :: XtSetExnVals (XmNselectionArrayCount (Length L) :: T) | _ => A :: XtSetExnVals T end; fun XtSetExceptionType (E:'a -> Arg) (R:'a -> XmRType) = let val a:'a = Cast 0; val e = E a; val r = R a; in argTable := (Exn e,ArgName e,r) :: !argTable end; fun XtGetValue (w:Widget) (s:string):Arg = let val (EXN (u,n,_),_,r) = FindByString s; in Arg (EXN (u,n,Convert r (xcall (XCALL_GetValue,w,(s,CType r))))) end; local fun GetExns [] R C = (R,C) | GetExns ((s,c,d)::T) R C = let val (EXN (u,n,_),_,r) = FindByString s; val convert = Convert r; fun MakeExn v = Arg (EXN (u,n,convert v)); in GetExns T ((s,CType r,c,RName r,RName d,CType d) :: R) (MakeExn :: C) end; fun Zip [] _ acc = acc | Zip _ [] acc = acc | Zip (v::V) (c::C) acc = Zip V C (c v :: acc) in fun XtGetSubresources (w:Widget) (name:string) (class:string) (L:(string * string * XmRType) list):Arg list = let val (R,C) = GetExns L [] []; val V = xcall (XCALL_GetSubresources,w,name,class,R) in Zip V C [] end; fun XtGetApplicationResources (w:Widget) (L:(string * string * XmRType) list):Arg list = let val (R,C) = GetExns L [] [] ; val V = xcall (XCALL_XtGetApplicationResources,w,R) in Zip V C [] end ; end; local (* These have been copied over from the XWindows module. *) infix 9 Or; fun a Or b = xcall (12,a:int,b:int):int ; fun fromEventMask list = let fun MaskBit KeyPressMask = 1 | MaskBit KeyReleaseMask = 2 | MaskBit ButtonPressMask = 4 | MaskBit ButtonReleaseMask = 8 | MaskBit EnterWindowMask = 16 | MaskBit LeaveWindowMask = 32 | MaskBit PointerMotionMask = 64 | MaskBit PointerMotionHintMask = 128 | MaskBit Button1MotionMask = 256 | MaskBit Button2MotionMask = 512 | MaskBit Button3MotionMask = 1024 | MaskBit Button4MotionMask = 2048 | MaskBit Button5MotionMask = 4096 | MaskBit ButtonMotionMask = 8192 | MaskBit KeymapStateMask = 16384 | MaskBit ExposureMask = 32768 | MaskBit VisibilityChangeMask = 65536 | MaskBit StructureNotifyMask = 131072 | MaskBit ResizeRedirectMask = 262144 | MaskBit SubstructureNotifyMask = 524288 | MaskBit SubstructureRedirectMask = 1048576 | MaskBit FocusChangeMask = 2097152 | MaskBit PropertyChangeMask = 4194304 | MaskBit ColormapChangeMask = 8388608 | MaskBit OwnerGrabButtonMask = 16777216 | MaskBit ButtonClickMask = 2147483648 Or MaskBit ButtonPressMask Or MaskBit ButtonReleaseMask (* extra event mask *) ; fun OrTogether [] acc = acc | OrTogether (H::T) acc = OrTogether T (MaskBit H Or acc) ; in OrTogether list 0 end in fun XtAddEventHandler (w: Widget) (ev: EventMask list) (nonmaskable: bool) (handler: Widget * 'a XEvent -> unit) : unit = xcall(XCALL_XtAddEventHandler, w, fromEventMask ev, nonmaskable, handler) end end (* local *); end (* struct *); polyml.5.2.1/mlsource/extra/Motif/MotifTypes.ML0000644000175000017500000003174010313043361020362 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure MotifTypes = struct structure XWINDOWS = XWindows ; local open XWindows ; in abstype Widget = Widget of int with end ; abstype XtAccelerators = XtAccelerators of int with end ; abstype XtTranslations = XtTranslations of int with end ; type XmString = string ; datatype XmAlignment = XmALIGNMENT_BEGINNING | XmALIGNMENT_CENTER | XmALIGNMENT_END ; datatype XmArrowDirection = XmARROW_UP | XmARROW_DOWN | XmARROW_LEFT | XmARROW_RIGHT ; datatype XmAttachment = XmATTACH_NONE | XmATTACH_FORM | XmATTACH_OPPOSITE_FORM | XmATTACH_WIDGET | XmATTACH_OPPOSITE_WIDGET | XmATTACH_POSITION | XmATTACH_SELF ; datatype XmButtonType = XmPUSHBUTTON | XmCHECKBUTTON | XmTOGGLEBUTTON | XmRADIOBUTTON | XmCASCADEBUTTON | XmSEPARATOR | XmDOUBLE_SEPARATOR | XmTITLE ; datatype XmCommandWindowLocation = XmCOMMAND_ABOVE_WORKSPACE | XmCOMMAND_BELOW_WORKSPACE ; datatype XmDefaultButtonType = XmDIALOG_NONE | XmDIALOG_APPLY_BUTTON | XmDIALOG_CANCEL_BUTTON | XmDIALOG_DEFAULT_BUTTON | XmDIALOG_OK_BUTTON | XmDIALOG_FILTER_LABEL | XmDIALOG_FILTER_TEXT | XmDIALOG_HELP_BUTTON | XmDIALOG_LIST | XmDIALOG_LIST_LABEL | XmDIALOG_MESSAGE_LABEL | XmDIALOG_SELECTION_LABEL | XmDIALOG_SYMBOL_LABEL | XmDIALOG_TEXT | XmDIALOG_SEPARATOR | XmDIALOG_DIR_LIST | XmDIALOG_DIR_LIST_LABEL (* | XmDIALOG_COMMAND_TEXT = XmDIALOG_TEXT | XmDIALOG_VALUE_TEXT = XmDIALOG_TEXT | XmDIALOG_PROMPT_LABEL = XmDIALOG_SELECTION_LABEL | XmDIALOG_HISTORY_LIST = XmDIALOG_LIST | XmDIALOG_FILE_LIST = XmDIALOG_LIST | XmDIALOG_FILE_LIST_LABEL = XmDIALOG_LIST_LABEL *) ; val XmDIALOG_COMMAND_TEXT = XmDIALOG_TEXT ; val XmDIALOG_VALUE_TEXT = XmDIALOG_TEXT ; val XmDIALOG_PROMPT_LABEL = XmDIALOG_SELECTION_LABEL ; val XmDIALOG_HISTORY_LIST = XmDIALOG_LIST ; val XmDIALOG_FILE_LIST = XmDIALOG_LIST ; val XmDIALOG_FILE_LIST_LABEL = XmDIALOG_LIST_LABEL ; datatype XmDeleteResponse = XmDESTROY | XmUNMAP | XmDO_NOTHING ; datatype XmDialogStyle = XmDIALOG_MODELESS | XmDIALOG_PRIMARY_APPLICATION_MODAL | XmDIALOG_FULL_APPLICATION_MODAL | XmDIALOG_SYSTEM_MODAL (* | XmDIALOG_APPLICATION_MODAL *) ; val XmDIALOG_APPLICATION_MODAL = XmDIALOG_PRIMARY_APPLICATION_MODAL ; datatype XmDialogType = XmDIALOG_ERROR | XmDIALOG_INFORMATION | XmDIALOG_MESSAGE | XmDIALOG_QUESTION | XmDIALOG_WARNING | XmDIALOG_WORKING | XmDIALOG_WORK_AREA | XmDIALOG_PROMPT | XmDIALOG_SELECTION | XmDIALOG_COMMAND | XmDIALOG_FILE_SELECTION ; datatype XmEditMode = XmMULTI_LINE_EDIT | XmSINGLE_LINE_EDIT ; datatype XmFileTypeMask = XmFILE_REGULAR | XmFILE_DIRECTORY | XmFILE_ANY_TYPE ; datatype XmIndicatorType = XmN_OF_MANY | XmONE_OF_MANY ; datatype XmKeyboardFocusPolicy = XmEXPLICIT | XmPOINTER ; datatype XmLabelType = XmPIXMAP | XmSTRING ; datatype XmMultiClickType = XmMULTICLICK_DISCARD | XmMULTICLICK_KEEP ; datatype XmNavigationType = XmNONE | XmTAB_GROUP | XmSTICKY_TAB_GROUP | XmEXCLUSIVE_TAB_GROUP ; datatype XmOrientation = XmVERTICAL | XmHORIZONTAL ; datatype XmPacking = XmPACK_TIGHT | XmPACK_COLUMN | XmPACK_NONE ; datatype XmProcessingDirection = XmMAX_ON_TOP | XmMAX_ON_BOTTOM | XmMAX_ON_LEFT | XmMAX_ON_RIGHT ; datatype XmResizePolicy = XmRESIZE_NONE | XmRESIZE_ANY | XmRESIZE_GROW ; datatype XmRowColumnType = XmWORK_AREA | XmMENU_BAR | XmMENU_PULLDOWN | XmMENU_POPUP | XmMENU_OPTION ; datatype XmScrollBarDisplayPolicy = XmSTATIC | XmAS_NEEDED ; datatype XmScrollBarPlacement = XmBOTTOM_RIGHT | XmTOP_RIGHT | XmBOTTOM_LEFT | XmTOP_LEFT ; datatype XmScrollingPolicy = XmAUTOMATIC | XmAPPLICATION_DEFINED ; datatype XmSelectionPolicy = XmSINGLE_SELECT | XmMULTIPLE_SELECT | XmEXTENDED_SELECT | XmBROWSE_SELECT ; datatype XmShadowType = XmNO_LINE | XmSINGLE_LINE | XmDOUBLE_LINE | XmSINGLE_DASHED_LINE | XmDOUBLE_DASHED_LINE | XmSHADOW_ETCHED_IN | XmSHADOW_ETCHED_OUT | XmSHADOW_IN | XmSHADOW_OUT ; datatype XmStringDirection = XmSTRING_DIRECTION_L_TO_R | XmSTRING_DIRECTION_R_TO_L | XmSTRING_DIRECTION_DEFAULT ; datatype XmTextScanType = XmSELECT_POSITION | XmSELECT_WHITESPACE | XmSELECT_WORD | XmSELECT_LINE | XmSELECT_ALL | XmSELECT_PARAGRAPH ; datatype XmUnitType = XmPIXELS | Xm100TH_MILLIMETERS | Xm1000TH_INCHES | Xm100TH_POINTS | Xm100TH_FONT_UNITS ; datatype XmVisualPolicy = XmVARIABLE | XmCONSTANT | XmRESIZE_IF_POSSIBLE ; type Arg = exn ; datatype XmRType = XmRAcceleratorTable of XtAccelerators | XmRAlignment of XmAlignment | XmRArrowDirection of XmArrowDirection | XmRAtom of int | XmRAttachment of XmAttachment | XmRBool of bool | XmRButtonTypeTable of XmButtonType list | XmRCardinal of int | XmRColormap of Colormap | XmRCommandWindowLocation of XmCommandWindowLocation | XmRCursor of Cursor | XmRDefaultButtonType of XmDefaultButtonType | XmRDeleteResponse of XmDeleteResponse | XmRDialogStyle of XmDialogStyle | XmRDialogType of XmDialogType | XmRDimension of int | XmREditMode of XmEditMode | XmRFileTypeMask of XmFileTypeMask | XmRFontList of (XFontStruct * string) list | XmRIndicatorType of XmIndicatorType | XmRInitialState of XWMStateHint | XmRInt of int | XmRKeySym of int | XmRKeySymTable of int list | XmRKeyboardFocusPolicy of XmKeyboardFocusPolicy | XmRLabelType of XmLabelType | XmRMultiClick of XmMultiClickType | XmRNavigationType of XmNavigationType | XmROrientation of XmOrientation | XmRPacking of XmPacking | XmRProcessingDirection of XmProcessingDirection | XmRResizePolicy of XmResizePolicy | XmRRowColumnType of XmRowColumnType | XmRPixel of int | XmRPixmap of Drawable | XmRPosition of int | XmRScrollBarDisplayPolicy of XmScrollBarDisplayPolicy | XmRScrollBarPlacement of XmScrollBarPlacement | XmRScrollingPolicy of XmScrollingPolicy | XmRSelectionPolicy of XmSelectionPolicy | XmRShadowType of XmShadowType | XmRShort of int | XmRStringDirection of XmStringDirection | XmRString of string | XmRStringTable of string list | XmRTextScanTypeTable of XmTextScanType list | XmRTranslationTable of XtTranslations | XmRUnitType of XmUnitType | XmRVisual of Visual | XmRVisualPolicy of XmVisualPolicy | XmRWidget of Widget | XmRWidgetList of Widget list | XmRXmString of XmString | XmRXmStringTable of XmString list ; datatype XtCallback = XmNactivateCallback | XmNapplyCallback | XmNarmCallback | XmNbrowseSelectionCallback | XmNcancelCallback | XmNcascadingCallback | XmNcommandChangedCallback | XmNcommandEnteredCallback | XmNdecrementCallback | XmNdefaultActionCallback | XmNdestroyCallback | XmNdisarmCallback | XmNdragCallback | XmNentryCallback | XmNexposeCallback | XmNextendedSelectionCallback | XmNfocusCallback | XmNgainPrimaryCallback | XmNhelpCallback | XmNincrementCallback | XmNinputCallback | XmNlosePrimaryCallback | XmNlosingFocusCallback | XmNmapCallback | XmNmessageCallback (* this callback gets Message XEvents only *) | XmNmodifyVerifyCallback | XmNmotionVerifyCallback | XmNmultipleSelectionCallback | XmNnoMatchCallback | XmNokCallback | XmNpageDecrementCallback | XmNpageIncrementCallback | XmNpopdownCallback | XmNpopupCallback | XmNresizeCallback | XmNsimpleCallback | XmNsingleSelectionCallback | XmNtoBottomCallback | XmNtoTopCallback | XmNunmapCallback | XmNvalueChangedCallback ; end (* local *) ; end (* struct *) ; polyml.5.2.1/mlsource/extra/Motif/XM_TYPES.ML0000644000175000017500000007232710313043362017576 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) signature XM_TYPES = sig include MOTIF_TYPES ; exception XmNaccelerator of string ; exception XmNacceleratorText of XmString ; exception XmNaccelerators of XtAccelerators ; exception XmNadjustLast of bool ; exception XmNadjustMargin of bool ; exception XmNalignment of XmAlignment ; exception XmNallowOverlap of bool ; exception XmNallowResize of bool ; exception XmNallowShellResize of bool ; exception XmNancestorSensitive of bool ; exception XmNapplyLabelString of XmString ; exception XmNargc of int ; exception XmNargv of string list ; exception XmNarmColor of int ; exception XmNarmPixmap of XWindows.Drawable ; exception XmNarrowDirection of XmArrowDirection ; exception XmNautoShowCursorPosition of bool ; exception XmNautoUnmanage of bool ; exception XmNautomaticSelection of bool ; exception XmNbackground of int ; exception XmNbackgroundPixmap of XWindows.Drawable ; exception XmNbaseHeight of int ; exception XmNbaseWidth of int ; exception XmNblinkRate of int ; exception XmNborderColor of int ; exception XmNborderPixmap of XWindows.Drawable ; exception XmNborderWidth of int ; exception XmNbottomAttachment of XmAttachment ; exception XmNbottomOffset of int ; exception XmNbottomPosition of int ; exception XmNbottomShadowColor of int ; exception XmNbottomShadowPixmap of XWindows.Drawable ; exception XmNbottomWidget of Widget ; exception XmNbuttonAcceleratorText of XmString list ; exception XmNbuttonAccelerators of string list ; exception XmNbuttonCount of int ; exception XmNbuttonFontList of (XWindows.XFontStruct * string) list ; exception XmNbuttonMnemonicCharSets of XmString list ; exception XmNbuttonMnemonics of int list ; exception XmNbuttonSet of int ; exception XmNbuttonType of XmButtonType list ; exception XmNbuttons of XmString list ; exception XmNcancelButton of Widget ; exception XmNcancelLabelString of XmString ; exception XmNcascadePixmap of XWindows.Drawable ; exception XmNchildren of Widget list ; exception XmNclipWindow of Widget ; exception XmNcolormap of XWindows.Colormap ; exception XmNcolumns of int ; exception XmNcommand of XmString ; exception XmNcommandWindow of Widget ; exception XmNcommandWindowLocation of XmCommandWindowLocation ; exception XmNcursorPosition of int ; exception XmNcursorPositionVisible of bool ; exception XmNdecimalPoints of int ; exception XmNdefaultButton of Widget ; exception XmNdefaultButtonShadowThickness of int ; exception XmNdefaultButtonType of XmDefaultButtonType ; exception XmNdefaultFontList of (XWindows.XFontStruct * string) list ; exception XmNdefaultPosition of bool ; exception XmNdeleteResponse of XmDeleteResponse ; exception XmNdepth of int ; exception XmNdialogStyle of XmDialogStyle ; exception XmNdialogTitle of XmString ; exception XmNdialogType of XmDialogType ; exception XmNdirListItemCount of int ; exception XmNdirListItems of XmString list ; exception XmNdirListLabelString of XmString ; exception XmNdirMask of XmString ; exception XmNdirSpec of XmString ; exception XmNdirectory of XmString ; exception XmNdirectoryValid of bool ; exception XmNdoubleClickInterval of int ; exception XmNeditMode of XmEditMode ; exception XmNeditable of bool ; exception XmNentryAlignment of XmAlignment ; exception XmNentryBorder of int ; exception XmNfileListItemCount of int ; exception XmNfileListItems of XmString list ; exception XmNfileListLabelString of XmString ; exception XmNfileTypeMask of XmFileTypeMask ; exception XmNfillOnArm of bool ; exception XmNfillOnSelect of bool ; exception XmNfilterLabelString of XmString ; exception XmNfontList of (XWindows.XFontStruct * string) list ; exception XmNforeground of int ; exception XmNfractionBase of int ; exception XmNgeometry of string ; exception XmNheight of int ; exception XmNheightInc of int ; exception XmNhelpLabelString of XmString ; exception XmNhighlightColor of int ; exception XmNhighlightOnEnter of bool ; exception XmNhighlightPixmap of XWindows.Drawable ; exception XmNhighlightThickness of int ; exception XmNhistoryItemCount of int ; exception XmNhistoryItems of XmString list ; exception XmNhistoryMaxItems of int ; exception XmNhistoryVisibleItemCount of int ; exception XmNhorizontalScrollBar of Widget ; exception XmNhorizontalSpacing of int ; exception XmNiconMask of XWindows.Drawable ; exception XmNiconName of string ; exception XmNiconNameEncoding of int ; exception XmNiconPixmap of XWindows.Drawable ; exception XmNiconWindow of XWindows.Drawable ; exception XmNiconX of int ; exception XmNiconY of int ; exception XmNiconic of bool ; exception XmNincrement of int ; exception XmNindicatorOn of bool ; exception XmNindicatorSize of int ; exception XmNindicatorType of XmIndicatorType ; exception XmNinitialDelay of int ; exception XmNinitialResourcesPersistent of bool ; exception XmNinitialState of XWindows.XWMStateHint ; exception XmNinput of bool ; exception XmNisAligned of bool ; exception XmNisHomogeneous of bool ; exception XmNitemCount of int ; exception XmNitems of XmString list ; exception XmNkeyboardFocusPolicy of XmKeyboardFocusPolicy ; exception XmNlabelFontList of (XWindows.XFontStruct * string) list ; exception XmNlabelInsensitivePixmap of XWindows.Drawable ; exception XmNlabelPixmap of XWindows.Drawable ; exception XmNlabelString of XmString ; exception XmNlabelType of XmLabelType ; exception XmNleftAttachment of XmAttachment ; exception XmNleftOffset of int ; exception XmNleftPosition of int ; exception XmNleftWidget of Widget ; exception XmNlistItemCount of int ; exception XmNlistItems of XmString list ; exception XmNlistLabelString of XmString ; exception XmNlistMarginHeight of int ; exception XmNlistMarginWidth of int ; exception XmNlistSizePolicy of XmVisualPolicy ; exception XmNlistSpacing of int ; exception XmNlistUpdated of bool ; exception XmNlistVisibleItemCount of int ; exception XmNmainWindowMarginHeight of int ; exception XmNmainWindowMarginWidth of int ; exception XmNmappedWhenManaged of bool ; exception XmNmappingDelay of int ; exception XmNmargin of int ; exception XmNmarginBottom of int ; exception XmNmarginHeight of int ; exception XmNmarginLeft of int ; exception XmNmarginRight of int ; exception XmNmarginTop of int ; exception XmNmarginWidth of int ; exception XmNmaxAspectX of int ; exception XmNmaxAspectY of int ; exception XmNmaxHeight of int ; exception XmNmaxLength of int ; exception XmNmaxWidth of int ; exception XmNmaximum of int ; exception XmNmenuAccelerator of string ; exception XmNmenuBar of Widget ; exception XmNmenuCursor of XWindows.Cursor ; exception XmNmenuHelpWidget of Widget ; exception XmNmenuHistory of Widget ; exception XmNmenuPost of string ; exception XmNmessageAlignment of XmAlignment ; exception XmNmessageString of XmString ; exception XmNmessageWindow of Widget ; exception XmNminAspectX of int ; exception XmNminAspectY of int ; exception XmNminHeight of int ; exception XmNminWidth of int ; exception XmNminimizeButtons of bool ; exception XmNminimum of int ; exception XmNmnemonic of int ; exception XmNmnemonicCharSet of string ; exception XmNmultiClick of XmMultiClickType ; exception XmNmustMatch of bool ; exception XmNmwmDecorations of int ; exception XmNmwmFunctions of int ; exception XmNmwmInputMode of int ; exception XmNmwmMenu of string ; exception XmNnavigationType of XmNavigationType ; exception XmNnoMatchString of XmString ; exception XmNnoResize of bool ; exception XmNnumChildren of int ; exception XmNnumColumns of int ; exception XmNokLabelString of XmString ; exception XmNoptionLabel of XmString ; exception XmNoptionMnemonic of int ; exception XmNorientation of XmOrientation ; exception XmNoverrideRedirect of bool ; exception XmNpacking of XmPacking ; exception XmNpageIncrement of int ; exception XmNpaneMaximum of int ; exception XmNpaneMinimum of int ; exception XmNpattern of XmString ; exception XmNpendingDelete of bool ; exception XmNpopupEnabled of bool ; exception XmNpostFromButton of int ; exception XmNprocessingDirection of XmProcessingDirection ; exception XmNpromptString of XmString ; exception XmNpushButtonEnabled of bool ; exception XmNradioAlwaysOne of bool ; exception XmNradioBehavior of bool ; exception XmNrecomputeSize of bool ; exception XmNrefigureMode of bool ; exception XmNrepeatDelay of int ; exception XmNresizable of bool ; exception XmNresizeHeight of bool ; exception XmNresizePolicy of XmResizePolicy ; exception XmNresizeWidth of bool ; exception XmNrightAttachment of XmAttachment ; exception XmNrightOffset of int ; exception XmNrightPosition of int ; exception XmNrightWidget of Widget ; exception XmNrowColumnType of XmRowColumnType ; exception XmNrows of int ; exception XmNrubberPositioning of bool ; exception XmNsashHeight of int ; exception XmNsashIndent of int ; exception XmNsashShadowThickness of int ; exception XmNsashWidth of int ; exception XmNsaveUnder of bool ; exception XmNscaleHeight of int ; exception XmNscaleMultiple of int ; exception XmNscaleWidth of int ; exception XmNscrollBarDisplayPolicy of XmScrollBarDisplayPolicy ; exception XmNscrollBarPlacement of XmScrollBarPlacement ; exception XmNscrollHorizontal of bool ; exception XmNscrollLeftSide of bool ; exception XmNscrollTopSide of bool ; exception XmNscrollVertical of bool ; exception XmNscrolledWindowMarginHeight of int ; exception XmNscrolledWindowMarginWidth of int ; exception XmNscrollingPolicy of XmScrollingPolicy ; exception XmNselectColor of int ; exception XmNselectInsensitivePixmap of XWindows.Drawable ; exception XmNselectPixmap of XWindows.Drawable ; exception XmNselectThreshold of int ; exception XmNselectedItemCount of int ; exception XmNselectedItems of XmString list ; exception XmNselectionArray of XmTextScanType list ; exception XmNselectionArrayCount of int ; exception XmNselectionLabelString of XmString ; exception XmNselectionPolicy of XmSelectionPolicy ; exception XmNsensitive of bool ; exception XmNseparatorOn of bool ; exception XmNseparatorType of XmShadowType ; exception XmNset of bool ; exception XmNshadowThickness of int ; exception XmNshadowType of XmShadowType ; exception XmNshellUnitType of XmUnitType ; exception XmNshowArrows of bool ; exception XmNshowAsDefault of int ; exception XmNshowSeparator of bool ; exception XmNshowValue of bool ; exception XmNskipAdjust of bool ; exception XmNsliderSize of int ; exception XmNspacing of int ; exception XmNstringDirection of XmStringDirection ; exception XmNsubMenuId of Widget ; exception XmNsymbolPixmap of XWindows.Drawable ; exception XmNtextAccelerators of XtAccelerators ; exception XmNtextColumns of int ; exception XmNtextFontList of (XWindows.XFontStruct * string) list ; exception XmNtextString of XmString ; exception XmNtextTranslations of XtTranslations ; exception XmNtitle of string ; exception XmNtitleEncoding of int ; exception XmNtitleString of XmString ; exception XmNtopAttachment of XmAttachment ; exception XmNtopCharacter of int ; exception XmNtopItemPosition of int ; exception XmNtopOffset of int ; exception XmNtopPosition of int ; exception XmNtopShadowColor of int ; exception XmNtopShadowPixmap of XWindows.Drawable ; exception XmNtopWidget of Widget ; exception XmNtransient of bool ; exception XmNtransientFor of Widget ; exception XmNtranslations of XtTranslations ; exception XmNtraversalOn of bool ; exception XmNtroughColor of int ; exception XmNunitType of XmUnitType ; exception XmNuseAsyncGeometry of bool ; exception XmNvalue of int ; exception XmNverifyBell of bool ; exception XmNverticalScrollBar of Widget ; exception XmNverticalSpacing of int ; exception XmNvisibleItemCount of int ; exception XmNvisibleWhenOff of bool ; exception XmNvisual of XWindows.Visual ; exception XmNvisualPolicy of XmVisualPolicy ; exception XmNwaitForWm of bool ; exception XmNwidth of int ; exception XmNwidthInc of int ; exception XmNwinGravity of int ; exception XmNwindowGroup of XWindows.Drawable ; exception XmNwmTimeout of int ; exception XmNwordWrap of bool ; exception XmNworkWindow of Widget ; exception XmNx of int ; exception XmNy of int ; val XmCAccelerator: string ; val XmCAcceleratorText: string ; val XmCAccelerators: string ; val XmCAdjustLast: string ; val XmCAdjustMargin: string ; val XmCAlignment: string ; val XmCAllowOverlap: string ; val XmCAllowShellResize: string ; val XmCApplyLabelString: string ; val XmCArgc: string ; val XmCArgv: string ; val XmCArmColor: string ; val XmCArmPixmap: string ; val XmCArrowDirection: string ; val XmCAttachment: string ; val XmCAutoShowCursorPosition: string ; val XmCAutoUnmanage: string ; val XmCAutomaticSelection: string ; val XmCBackground: string ; val XmCBackgroundPixmap: string ; val XmCBaseHeight: string ; val XmCBaseWidth: string ; val XmCBlinkRate: string ; val XmCBoolean: string ; val XmCBorderColor: string ; val XmCBorderWidth: string ; val XmCBottomShadowColor: string ; val XmCBottomShadowPixmap: string ; val XmCButtonAcceleratorText: string ; val XmCButtonAccelerators: string ; val XmCButtonCount: string ; val XmCButtonFontList: string ; val XmCButtonMnemonicCharSets: string ; val XmCButtonMnemonics: string ; val XmCButtonSet: string ; val XmCButtonType: string ; val XmCButtons: string ; val XmCCancelLabelString: string ; val XmCChildren: string ; val XmCClipWindow: string ; val XmCColormap: string ; val XmCColumns: string ; val XmCCommandWindow: string ; val XmCCommandWindowLocation: string ; val XmCCursor: string ; val XmCCursorPosition: string ; val XmCCursorPositionVisible: string ; val XmCDecimalPoints: string ; val XmCDefaultButtonShadowThickness: string ; val XmCDefaultButtonType: string ; val XmCDefaultFontList: string ; val XmCDefaultPosition: string ; val XmCDeleteResponse: string ; val XmCDepth: string ; val XmCDialogStyle: string ; val XmCDialogTitle: string ; val XmCDialogType: string ; val XmCDirListItemCount: string ; val XmCDirListItems: string ; val XmCDirListLabelString: string ; val XmCDirMask: string ; val XmCDirSpec: string ; val XmCDirectory: string ; val XmCDirectoryValid: string ; val XmCDoubleClickInterval: string ; val XmCEditMode: string ; val XmCEditable: string ; val XmCEntryBorder: string ; val XmCFileListItemCount: string ; val XmCFileListItems: string ; val XmCFileListLabelString: string ; val XmCFileTypeMask: string ; val XmCFillOnArm: string ; val XmCFillOnSelect: string ; val XmCFilterLabelString: string ; val XmCFontList: string ; val XmCForeground: string ; val XmCFraction: string ; val XmCGeometry: string ; val XmCHeight: string ; val XmCHeightInc: string ; val XmCHelpLabelString: string ; val XmCHighlightColor: string ; val XmCHighlightOnEnter: string ; val XmCHighlightPixmap: string ; val XmCHighlightThickness: string ; val XmCHorizontalScrollBar: string ; val XmCIconMask: string ; val XmCIconName: string ; val XmCIconNameEncoding: string ; val XmCIconPixmap: string ; val XmCIconWindow: string ; val XmCIconX: string ; val XmCIconY: string ; val XmCIconic: string ; val XmCIncrement: string ; val XmCIndicatorOn: string ; val XmCIndicatorSize: string ; val XmCIndicatorType: string ; val XmCInitialDelay: string ; val XmCInitialResourcesPersistent: string ; val XmCInitialState: string ; val XmCInput: string ; val XmCIsAligned: string ; val XmCIsHomogeneous: string ; val XmCItemCount: string ; val XmCItems: string ; val XmCKeyboardFocusPolicy: string ; val XmCLabelFontList: string ; val XmCLabelInsensitivePixmap: string ; val XmCLabelPixmap: string ; val XmCLabelString: string ; val XmCLabelType: string ; val XmCListLabelString: string ; val XmCListMarginHeight: string ; val XmCListMarginWidth: string ; val XmCListSizePolicy: string ; val XmCListSpacing: string ; val XmCListUpdated: string ; val XmCMainWindowMarginHeight: string ; val XmCMainWindowMarginWidth: string ; val XmCMappedWhenManaged: string ; val XmCMappingDelay: string ; val XmCMargin: string ; val XmCMarginBottom: string ; val XmCMarginHeight: string ; val XmCMarginLeft: string ; val XmCMarginRight: string ; val XmCMarginTop: string ; val XmCMarginWidth: string ; val XmCMaxAspectX: string ; val XmCMaxAspectY: string ; val XmCMaxHeight: string ; val XmCMaxItems: string ; val XmCMaxLength: string ; val XmCMaxWidth: string ; val XmCMaximum: string ; val XmCMenuBar: string ; val XmCMenuPost: string ; val XmCMenuWidget: string ; val XmCMessageString: string ; val XmCMessageWindow: string ; val XmCMinAspectX: string ; val XmCMinAspectY: string ; val XmCMinHeight: string ; val XmCMinWidth: string ; val XmCMinimizeButtons: string ; val XmCMinimum: string ; val XmCMnemonic: string ; val XmCMnemonicCharSet: string ; val XmCMultiClick: string ; val XmCMustMatch: string ; val XmCMwmDecorations: string ; val XmCMwmFunctions: string ; val XmCMwmInputMode: string ; val XmCMwmMenu: string ; val XmCNavigationType: string ; val XmCNoMatchString: string ; val XmCNoResize: string ; val XmCNumChildren: string ; val XmCNumColumns: string ; val XmCOffset: string ; val XmCOkLabelString: string ; val XmCOptionLabel: string ; val XmCOptionMnemonic: string ; val XmCOrientation: string ; val XmCOverrideRedirect: string ; val XmCPacking: string ; val XmCPageIncrement: string ; val XmCPaneMaximum: string ; val XmCPaneMinimum: string ; val XmCPattern: string ; val XmCPendingDelete: string ; val XmCPixmap: string ; val XmCPopupEnabled: string ; val XmCPosition: string ; val XmCPostFromButton: string ; val XmCProcessingDirection: string ; val XmCPromptString: string ; val XmCPushButtonEnabled: string ; val XmCRadioAlwaysOne: string ; val XmCRadioBehavior: string ; val XmCRecomputeSize: string ; val XmCRepeatDelay: string ; val XmCResizeHeight: string ; val XmCResizePolicy: string ; val XmCResizeWidth: string ; val XmCRowColumnType: string ; val XmCRows: string ; val XmCRubberPositioning: string ; val XmCSashHeight: string ; val XmCSashIndent: string ; val XmCSashWidth: string ; val XmCSaveUnder: string ; val XmCScaleHeight: string ; val XmCScaleMultiple: string ; val XmCScaleWidth: string ; val XmCScroll: string ; val XmCScrollBarDisplayPolicy: string ; val XmCScrollBarPlacement: string ; val XmCScrollSide: string ; val XmCScrolledWindowMarginHeight: string ; val XmCScrolledWindowMarginWidth: string ; val XmCScrollingPolicy: string ; val XmCSelectColor: string ; val XmCSelectInsensitivePixmap: string ; val XmCSelectPixmap: string ; val XmCSelectThreshold: string ; val XmCSelectedItemCount: string ; val XmCSelectedItems: string ; val XmCSelectionArray: string ; val XmCSelectionArrayCount: string ; val XmCSelectionLabelString: string ; val XmCSelectionPolicy: string ; val XmCSensitive: string ; val XmCSeparatorOn: string ; val XmCSeparatorType: string ; val XmCSet: string ; val XmCShadowThickness: string ; val XmCShadowType: string ; val XmCShellUnitType: string ; val XmCShowArrows: string ; val XmCShowAsDefault: string ; val XmCShowSeparator: string ; val XmCShowValue: string ; val XmCSliderSize: string ; val XmCSpacing: string ; val XmCStringDirection: string ; val XmCTextFontList: string ; val XmCTextPosition: string ; val XmCTextString: string ; val XmCTitle: string ; val XmCTitleEncoding: string ; val XmCTitleString: string ; val XmCTopItemPosition: string ; val XmCTopShadowColor: string ; val XmCTopShadowPixmap: string ; val XmCTransient: string ; val XmCTransientFor: string ; val XmCTranslations: string ; val XmCTraversalOn: string ; val XmCTroughColor: string ; val XmCUnitType: string ; val XmCUseAsyncGeometry: string ; val XmCValue: string ; val XmCVerifyBell: string ; val XmCVerticalScrollBar: string ; val XmCVisibleItemCount: string ; val XmCVisibleWhenOff: string ; val XmCVisual: string ; val XmCVisualPolicy: string ; val XmCWaitForWm: string ; val XmCWidget: string ; val XmCWidth: string ; val XmCWidthInc: string ; val XmCWinGravity: string ; val XmCWindowGroup: string ; val XmCWmTimeout: string ; val XmCWordWrap: string ; val XmCWorkWindow: string ; val XmCX: string ; val XmCY: string ; end (* sig *) ; polyml.5.2.1/mlsource/extra/Motif/XmNs.doc0000644000175000017500000005137410313043362017407 0ustar daviddavidXmNaccelerator XmCAccelerator string XmLabel XmNacceleratorText XmCAcceleratorText XmString XmLabel XmNaccelerators XmCAccelerators XtAccelerators Core XmNactivateCallback XmCCallback (callback) XmArrowButton,XmCascadeButton,XmDrawnButton,XmPushButton,XmText,XmTextField XmNadjustLast XmCAdjustLast bool XmRowColumn XmNadjustMargin XmCAdjustMargin bool XmRowColumn XmNalignment XmCAlignment XmAlignment XmLabel XmNallowOverlap XmCAllowOverlap bool XmBulletinBoard XmNallowResize XmCBoolean bool XmPanedWindow XmNallowShellResize XmCAllowShellResize bool Shell XmNancestorSensitive XmCBoolean bool Core,RectObj XmNapplyCallback XmCCallback (callback) XmSelectionBox XmNapplyLabelString XmCApplyLabelString XmString XmSelectionBox XmNargc XmCArgc int ApplicationShell XmNargv XmCArgv string list ApplicationShell XmNarmCallback XmCCallback (callback) XmArrowButton,XmDrawnButton,XmPushButton,XmToggleButton XmNarmColor XmCArmColor Pixel XmPushButton XmNarmPixmap XmCArmPixmap Drawable XmPushButton XmNarrowDirection XmCArrowDirection XmArrowDirection XmArrowButton XmNautoShowCursorPosition XmCAutoShowCursorPosition bool XmText XmNautoUnmanage XmCAutoUnmanage bool XmBulletinBoard XmNautomaticSelection XmCAutomaticSelection bool XmList XmNbackground XmCBackground Pixel Core XmNbackgroundPixmap XmCBackgroundPixmap Drawable Core XmNbaseHeight XmCBaseHeight int WMShell XmNbaseWidth XmCBaseWidth int WMShell XmNblinkRate XmCBlinkRate int XmText,XmTextField XmNborderColor XmCBorderColor Pixel Core XmNborderPixmap XmCPixmap Drawable Core XmNborderWidth XmCBorderWidth Dimension Core,RectObj XmNbottomAttachment XmCAttachment XmAttachment XmForm XmNbottomOffset XmCOffset int XmForm XmNbottomPosition XmCPosition int XmForm XmNbottomShadowColor XmCBottomShadowColor Pixel XmManager,XmPrimitive XmNbottomShadowPixmap XmCBottomShadowPixmap Drawable XmManager,XmPrimitive XmNbottomWidget XmCWidget Widget XmForm XmNbrowseSelectionCallback XmCCallback (callback) XmList XmNbuttonAcceleratorText XmCButtonAcceleratorText XmString list XmRowColumn XmNbuttonAccelerators XmCButtonAccelerators string list XmRowColumn XmNbuttonCount XmCButtonCount int XmRowColumn XmNbuttonFontList XmCButtonFontList XFontStruct list XmBulletinBoard XmNbuttonMnemonicCharSets XmCButtonMnemonicCharSets XmString list XmRowColumn XmNbuttonMnemonics XmCButtonMnemonics KeySym list XmRowColumn XmNbuttonSet XmCButtonSet int XmRowColumn XmNbuttonType XmCButtonType XmButtonType list XmRowColumn XmNbuttons XmCButtons XmString list XmRowColumn XmNcancelButton XmCWidget Widget XmBulletinBoard XmNcancelCallback XmCCallback (callback) XmMessageBox,XmSelectionBox XmNcancelLabelString XmCCancelLabelString XmString XmMessageBox,XmSelectionBox XmNcascadePixmap XmCPixmap Drawable XmCascadeButton XmNcascadingCallback XmCCallback (callback) XmCascadeButton XmNchildren XmCChildren Widget list Composite XmNclipWindow XmCClipWindow Widget XmScrolledWindow XmNcolormap XmCColormap Colormap Core XmNcolumns XmCColumns short XmText,XmTextField XmNcommand XmCTextString XmString XmCommand XmNcommandChangedCallback XmCCallback (callback) XmCommand XmNcommandEnteredCallback XmCCallback (callback) XmCommand XmNcommandWindow XmCCommandWindow Widget XmMainWindow XmNcommandWindowLocation XmCCommandWindowLocation XmCommandWindowLocation XmMainWindow XmNcursorPosition XmCCursorPosition XmTextPosition XmText,XmTextField XmNcursorPositionVisible XmCCursorPositionVisible bool XmText,XmTextField XmNdecimalPoints XmCDecimalPoints short XmScale XmNdecrementCallback XmCCallback (callback) XmScrollBar XmNdefaultActionCallback XmCCallback (callback) XmList XmNdefaultButton XmCWidget Widget XmBulletinBoard XmNdefaultButtonShadowThickness XmCDefaultButtonShadowThickness Dimension XmPushButton XmNdefaultButtonType XmCDefaultButtonType XmDefaultButtonType XmMessageBox XmNdefaultFontList XmCDefaultFontList XFontStruct list VendorShell,XmMenuShell XmNdefaultPosition XmCDefaultPosition bool XmBulletinBoard XmNdeleteResponse XmCDeleteResponse XmDeleteResponse VendorShell XmNdepth XmCDepth int Core XmNdestroyCallback XmCCallback (callback) Core,Object XmNdialogStyle XmCDialogStyle XmDialogStyle XmBulletinBoard XmNdialogTitle XmCDialogTitle XmString XmBulletinBoard XmNdialogType XmCDialogType XmDialogType XmMessageBox,XmSelectionBox XmNdirListItemCount XmCDirListItemCount int XmFileSelectionBox XmNdirListItems XmCDirListItems XmString list XmFileSelectionBox XmNdirListLabelString XmCDirListLabelString XmString XmFileSelectionBox XmNdirMask XmCDirMask XmString XmFileSelectionBox XmNdirSpec XmCDirSpec XmString XmFileSelectionBox XmNdirectory XmCDirectory XmString XmFileSelectionBox XmNdirectoryValid XmCDirectoryValid bool XmFileSelectionBox XmNdisarmCallback XmCDisarmCallback (callback) XmArrowButton,XmDrawnButton,XmPushButton,XmToggleButton XmNdoubleClickInterval XmCDoubleClickInterval int XmList XmNdragCallback XmCCallback (callback) XmScale,XmScrollBar XmNeditMode XmCEditMode XmEditMode XmText XmNeditable XmCEditable bool XmText,XmTextField XmNentryAlignment XmCAlignment XmAlignment XmRowColumn XmNentryBorder XmCEntryBorder Dimension XmRowColumn XmNentryCallback XmCCallback (callback) XmRowColumn XmNexposeCallback XmCCallback (callback) XmDrawingArea,XmDrawnButton XmNextendedSelectionCallback XmCCallback (callback) XmList XmNfileListItemCount XmCFileListItemCount int XmFileSelectionBox XmNfileListItems XmCFileListItems XmString list XmFileSelectionBox XmNfileListLabelString XmCFileListLabelString XmString XmFileSelectionBox XmNfileTypeMask XmCFileTypeMask XmFileTypeMask XmFileSelectionBox XmNfillOnArm XmCFillOnArm bool XmPushButton XmNfillOnSelect XmCFillOnSelect bool XmToggleButton XmNfilterLabelString XmCFilterLabelString XmString XmFileSelectionBox XmNfocusCallback XmCCallback (callback) XmBulletinBoard,XmText XmNfontList XmCFontList XFontStruct list XmLabel,XmList,XmScale,XmText,XmTextField XmNforeground XmCForeground Pixel XmManager,XmPrimitive XmNfractionBase XmCFraction int XmForm XmNgainPrimaryCallback XmCCallback (callback) XmText,XmTextField XmNgeometry XmCGeometry string Shell XmNheight XmCHeight Dimension Core,RectObj XmNheightInc XmCHeightInc int WMShell XmNhelpCallback XmCCallback (callback) XmGadget,XmManager,XmPrimitive XmNhelpLabelString XmCHelpLabelString XmString XmMessageBox,XmSelectionBox XmNhighlightColor XmCHighlightColor Pixel XmManager,XmPrimitive XmNhighlightOnEnter XmCHighlightOnEnter bool XmGadget,XmPrimitive,XmScale XmNhighlightPixmap XmCHighlightPixmap Drawable XmManager,XmPrimitive XmNhighlightThickness XmCHighlightThickness Dimension XmGadget,XmPrimitive,XmScale XmNhistoryItemCount XmCItemCount int XmCommand XmNhistoryItems XmCItems XmString list XmCommand XmNhistoryMaxItems XmCMaxItems int XmCommand XmNhistoryVisibleItemCount XmCVisibleItemCount int XmCommand XmNhorizontalScrollBar XmCHorizontalScrollBar Widget XmScrolledWindow XmNhorizontalSpacing XmCSpacing Dimension XmForm XmNiconMask XmCIconMask Drawable WMShell XmNiconName XmCIconName string TopLevelShell XmNiconNameEncoding XmCIconNameEncoding Atom TopLevelShell XmNiconPixmap XmCIconPixmap Drawable WMShell XmNiconWindow XmCIconWindow Drawable WMShell XmNiconX XmCIconX int WMShell XmNiconY XmCIconY int WMShell XmNiconic XmCIconic bool TopLevelShell XmNincrement XmCIncrement int XmScrollBar XmNincrementCallback XmCCallback (callback) XmScrollBar XmNindicatorOn XmCIndicatorOn bool XmToggleButton XmNindicatorSize XmCIndicatorSize Dimension XmToggleButton XmNindicatorType XmCIndicatorType XmIndicatorType XmToggleButton XmNinitialDelay XmCInitialDelay int XmScrollBar XmNinitialResourcesPersistent XmCInitialResourcesPersistent bool Core XmNinitialState XmCInitialState XWMStateHint WMShell XmNinput XmCInput bool WMShell XmNinputCallback XmCCallback (callback) XmDrawingArea XmNisAligned XmCIsAligned bool XmRowColumn XmNisHomogeneous XmCIsHomogeneous bool XmRowColumn XmNitemCount XmCItemCount int XmList XmNitems XmCItems XmString list XmList XmNkeyboardFocusPolicy XmCKeyboardFocusPolicy XmKeyboardFocusPolicy VendorShell XmNlabelFontList XmCLabelFontList XFontStruct list XmBulletinBoard XmNlabelInsensitivePixmap XmCLabelInsensitivePixmap Drawable XmLabel XmNlabelPixmap XmCLabelPixmap Drawable XmLabel XmNlabelString XmCLabelString XmString XmLabel,XmRowColumn XmNlabelType XmCLabelType XmLabelType XmLabel XmNleftAttachment XmCAttachment XmAttachment XmForm XmNleftOffset XmCOffset int XmForm XmNleftPosition XmCPosition int XmForm XmNleftWidget XmCWidget Widget XmForm XmNlistItemCount XmCItemCount int XmSelectionBox XmNlistItems XmCItems XmString list XmSelectionBox XmNlistLabelString XmCListLabelString XmString XmSelectionBox XmNlistMarginHeight XmCListMarginHeight Dimension XmList XmNlistMarginWidth XmCListMarginWidth Dimension XmList XmNlistSizePolicy XmCListSizePolicy XmVisualPolicy XmList XmNlistSpacing XmCListSpacing Dimension XmList XmNlistUpdated XmCListUpdated bool XmFileSelectionBox XmNlistVisibleItemCount XmCVisibleItemCount int XmSelectionBox XmNlosePrimaryCallback XmCCallback (callback) XmText,XmTextField XmNlosingFocusCallback XmCCallback (callback) XmText,XmTextField XmNmainWindowMarginHeight XmCMainWindowMarginHeight Dimension XmMainWindow XmNmainWindowMarginWidth XmCMainWindowMarginWidth Dimension XmMainWindow XmNmapCallback XmCCallback (callback) XmBulletinBoard,XmRowColumn XmNmappedWhenManaged XmCMappedWhenManaged bool Core XmNmappingDelay XmCMappingDelay int XmCascadeButton XmNmargin XmCMargin Dimension XmSeparator XmNmarginBottom XmCMarginBottom Dimension XmLabel XmNmarginHeight XmCMarginHeight Dimension XmBulletinBoard,XmDrawingArea,XmFrame,XmLabel,XmPanedWindow,XmRowColumn,XmText,XmTextField XmNmarginLeft XmCMarginLeft Dimension XmLabel XmNmarginRight XmCMarginRight Dimension XmLabel XmNmarginTop XmCMarginTop Dimension XmLabel XmNmarginWidth XmCMarginWidth Dimension XmBulletinBoard,XmDrawingArea,XmFrame,XmLabel,XmPanedWindow,XmRowColumn,XmText,XmTextField XmNmaxAspectX XmCMaxAspectX int WMShell XmNmaxAspectY XmCMaxAspectY int WMShell XmNmaxHeight XmCMaxHeight int WMShell XmNmaxLength XmCMaxLength int XmText,XmTextField XmNmaxWidth XmCMaxWidth int WMShell XmNmaximum XmCMaximum int XmScale,XmScrollBar XmNmenuAccelerator XmCAccelerators string XmRowColumn XmNmenuBar XmCMenuBar Widget XmMainWindow XmNmenuCursor XmCCursor Cursor XmRowColumn XmNmenuHelpWidget XmCMenuWidget Widget XmRowColumn XmNmenuHistory XmCMenuWidget Widget XmRowColumn XmNmenuPost XmCMenuPost string XmRowColumn XmNmessageAlignment XmCAlignment XmAlignment XmMessageBox XmNmessageCallback XmCCallback (callback) (everything) XmNmessageString XmCMessageString XmString XmMessageBox XmNmessageWindow XmCMessageWindow Widget XmMainWindow XmNminAspectX XmCMinAspectX int WMShell XmNminAspectY XmCMinAspectY int WMShell XmNminHeight XmCMinHeight int WMShell XmNminWidth XmCMinWidth int WMShell XmNminimizeButtons XmCMinimizeButtons bool XmMessageBox,XmSelectionBox XmNminimum XmCMinimum int XmScale,XmScrollBar XmNmnemonic XmCMnemonic KeySym XmLabel,XmRowColumn XmNmnemonicCharSet XmCMnemonicCharSet string XmLabel,XmRowColumn XmNmodifyVerifyCallback XmCCallback (callback) XmText,XmTextField XmNmotionVerifyCallback XmCCallback (callback) XmText,XmTextField XmNmultiClick XmCMultiClick XmMultiClickType XmArrowButton,XmDrawnButton,XmPushButton XmNmultipleSelectionCallback XmCCallback (callback) XmList XmNmustMatch XmCMustMatch bool XmSelectionBox XmNmwmDecorations XmCMwmDecorations int VendorShell XmNmwmFunctions XmCMwmFunctions int VendorShell XmNmwmInputMode XmCMwmInputMode int VendorShell XmNmwmMenu XmCMwmMenu string VendorShell XmNnavigationType XmCNavigationType XmNavigationType XmGadget,XmManager,XmPrimitive XmNnoMatchCallback XmCCallback (callback) XmSelectionBox XmNnoMatchString XmCNoMatchString XmString XmFileSelectionBox XmNnoResize XmCNoResize bool XmBulletinBoard XmNnumChildren XmCNumChildren Cardinal Composite XmNnumColumns XmCNumColumns short XmRowColumn XmNokCallback XmCCallback (callback) XmMessageBox,XmSelectionBox XmNokLabelString XmCOkLabelString XmString XmMessageBox,XmSelectionBox XmNoptionLabel XmCOptionLabel XmString XmRowColumn XmNoptionMnemonic XmCOptionMnemonic KeySym XmRowColumn XmNorientation XmCOrientation XmOrientation XmRowColumn,XmScale,XmScrollBar,XmSeparator XmNoverrideRedirect XmCOverrideRedirect bool Shell XmNpacking XmCPacking XmPacking XmRowColumn XmNpageDecrementCallback XmCCallback (callback) XmScrollBar XmNpageIncrement XmCPageIncrement int XmScrollBar XmNpageIncrementCallback XmCCallback (callback) XmScrollBar XmNpaneMaximum XmCPaneMaximum Dimension XmPanedWindow XmNpaneMinimum XmCPaneMinimum Dimension XmPanedWindow XmNpattern XmCPattern XmString XmFileSelectionBox XmNpendingDelete XmCPendingDelete bool XmText,XmTextField XmNpopdownCallback XmCCallback (callback) Shell XmNpopupCallback XmCCallback (callback) Shell XmNpopupEnabled XmCPopupEnabled bool XmRowColumn XmNpostFromButton XmCPostFromButton int XmRowColumn XmNprocessingDirection XmCProcessingDirection XmProcessingDirection XmScale,XmScrollBar XmNpromptString XmCPromptString XmString XmCommand XmNpushButtonEnabled XmCPushButtonEnabled bool XmDrawnButton XmNradioAlwaysOne XmCRadioAlwaysOne bool XmRowColumn XmNradioBehavior XmCRadioBehavior bool XmRowColumn XmNrecomputeSize XmCRecomputeSize bool XmLabel XmNrefigureMode XmCBoolean bool XmPanedWindow XmNrepeatDelay XmCRepeatDelay int XmScrollBar XmNresizable XmCBoolean bool XmForm XmNresizeCallback XmCCallback (callback) XmDrawingArea,XmDrawnButton XmNresizeHeight XmCResizeHeight bool XmRowColumn,XmText XmNresizePolicy XmCResizePolicy XmResizePolicy XmBulletinBoard,XmDrawingArea XmNresizeWidth XmCResizeWidth bool XmRowColumn,XmText,XmTextField XmNrightAttachment XmCAttachment XmAttachment XmForm XmNrightOffset XmCOffset int XmForm XmNrightPosition XmCPosition int XmForm XmNrightWidget XmCWidget Widget XmForm XmNrowColumnType XmCRowColumnType XmRowColumnType XmRowColumn XmNrows XmCRows short XmText XmNrubberPositioning XmCRubberPositioning bool XmForm XmNsashHeight XmCSashHeight Dimension XmPanedWindow XmNsashIndent XmCSashIndent Position XmPanedWindow XmNsashShadowThickness XmCShadowThickness Dimension XmPanedWindow XmNsashWidth XmCSashWidth Dimension XmPanedWindow XmNsaveUnder XmCSaveUnder bool Shell XmNscaleHeight XmCScaleHeight Dimension XmScale XmNscaleMultiple XmCScaleMultiple int XmScale XmNscaleWidth XmCScaleWidth Dimension XmScale XmNscrollBarDisplayPolicy XmCScrollBarDisplayPolicy XmScrollBarDisplayPolicy XmList,XmScrolledWindow XmNscrollBarPlacement XmCScrollBarPlacement XmScrollBarPlacement XmScrolledWindow XmNscrollHorizontal XmCScroll bool XmText XmNscrollLeftSide XmCScrollSide bool XmText XmNscrollTopSide XmCScrollSide bool XmText XmNscrollVertical XmCScroll bool XmText XmNscrolledWindowMarginHeight XmCScrolledWindowMarginHeight Dimension XmScrolledWindow XmNscrolledWindowMarginWidth XmCScrolledWindowMarginWidth Dimension XmScrolledWindow XmNscrollingPolicy XmCScrollingPolicy XmScrollingPolicy XmScrolledWindow XmNselectColor XmCSelectColor Pixel XmToggleButton XmNselectInsensitivePixmap XmCSelectInsensitivePixmap Drawable XmToggleButton XmNselectPixmap XmCSelectPixmap Drawable XmToggleButton XmNselectThreshold XmCSelectThreshold int XmText,XmTextField XmNselectedItemCount XmCSelectedItemCount int XmList XmNselectedItems XmCSelectedItems XmString list XmList XmNselectionArray XmCSelectionArray XmTextScanType list XmText,XmTextField XmNselectionArrayCount XmCSelectionArrayCount int XmText,XmTextField XmNselectionLabelString XmCSelectionLabelString XmString XmSelectionBox XmNselectionPolicy XmCSelectionPolicy XmSelectionPolicy XmList XmNsensitive XmCSensitive bool Core,RectObj XmNseparatorOn XmCSeparatorOn bool XmPanedWindow XmNseparatorType XmCSeparatorType XmShadowType XmSeparator XmNset XmCSet bool XmToggleButton XmNshadowThickness XmCShadowThickness Dimension XmGadget,XmManager,XmPrimitive XmNshadowType XmCShadowType XmShadowType XmBulletinBoard,XmDrawnButton,XmFrame XmNshellUnitType XmCShellUnitType XmUnitType VendorShell XmNshowArrows XmCShowArrows bool XmScrollBar XmNshowAsDefault XmCShowAsDefault Dimension XmPushButton XmNshowSeparator XmCShowSeparator bool XmMainWindow XmNshowValue XmCShowValue bool XmScale XmNsimpleCallback XmCCallback (callback) XmRowColumn XmNsingleSelectionCallback XmCCallback (callback) XmList XmNskipAdjust XmCBoolean bool XmPanedWindow XmNsliderSize XmCSliderSize int XmScrollBar XmNspacing XmCSpacing Dimension XmPanedWindow,XmRowColumn,XmScrolledWindow,XmToggleButton XmNstringDirection XmCStringDirection XmStringDirection XmLabel,XmList,XmManager XmNsubMenuId XmCMenuWidget Widget XmCascadeButton,XmRowColumn XmNsymbolPixmap XmCPixmap Drawable XmMessageBox XmNtextAccelerators XmCAccelerators XtAccelerators XmSelectionBox XmNtextColumns XmCColumns short XmSelectionBox XmNtextFontList XmCTextFontList XFontStruct list XmBulletinBoard XmNtextString XmCTextString XmString XmSelectionBox XmNtextTranslations XmCTranslations XtTranslations XmBulletinBoard XmNtitle XmCTitle string WMShell XmNtitleEncoding XmCTitleEncoding Atom WMShell XmNtitleString XmCTitleString XmString XmScale XmNtoBottomCallback XmCCallback (callback) XmScrollBar XmNtoTopCallback XmCCallback (callback) XmScrollBar XmNtopAttachment XmCAttachment XmAttachment XmForm XmNtopCharacter XmCTextPosition XmTextPosition XmText XmNtopItemPosition XmCTopItemPosition int XmList XmNtopOffset XmCOffset int XmForm XmNtopPosition XmCPosition int XmForm XmNtopShadowColor XmCTopShadowColor Pixel XmManager,XmPrimitive XmNtopShadowPixmap XmCTopShadowPixmap Drawable XmManager,XmPrimitive XmNtopWidget XmCWidget Widget XmForm XmNtransient XmCTransient bool WMShell XmNtransientFor XmCTransientFor Widget TransientShell XmNtranslations XmCTranslations XtTranslations Core XmNtraversalOn XmCTraversalOn bool XmGadget,XmManager,XmPrimitive XmNtroughColor XmCTroughColor Pixel XmScrollBar XmNunitType XmCUnitType XmUnitType XmGadget,XmManager,XmPrimitive XmNunmapCallback XmCCallback (callback) XmBulletinBoard,XmRowColumn XmNuseAsyncGeometry XmCUseAsyncGeometry bool VendorShell XmNvalue XmCValue int XmScale,XmScrollBar XmNvalueChangedCallback XmCCallback (callback) XmScale,XmScrollBar,XmText,XmTextField,XmToggleButton XmNverifyBell XmCVerifyBell bool XmText,XmTextField XmNverticalScrollBar XmCVerticalScrollBar Widget XmScrolledWindow XmNverticalSpacing XmCSpacing Dimension XmForm XmNvisibleItemCount XmCVisibleItemCount short XmList XmNvisibleWhenOff XmCVisibleWhenOff bool XmToggleButton XmNvisual XmCVisual Visual Shell XmNvisualPolicy XmCVisualPolicy XmVisualPolicy XmScrolledWindow XmNwaitForWm XmCWaitForWm bool WMShell XmNwidth XmCWidth Dimension Core,RectObj XmNwidthInc XmCWidthInc int WMShell XmNwinGravity XmCWinGravity int WMShell XmNwindowGroup XmCWindowGroup Drawable WMShell XmNwmTimeout XmCWmTimeout int WMShell XmNwordWrap XmCWordWrap bool XmText XmNworkWindow XmCWorkWindow Widget XmScrolledWindow XmNx XmCX Position Core,RectObj XmNy XmCY Position Core,RectObj NOT SUPPORTED XmNinsertPosition Composite XmNscreen Core XmNcreatePopupChildProc Shell XmNdirSearchProc XmFileSelectionBox XmNfileSearchProc XmFileSelectionBox XmNqualifySearchDataProc XmFileSelectionBox XmNuserData XmGadget,XmManager,XmPrimitive XmNentryClass XmRowColumn XmNwhichButton XmRowColumn XmNsource XmText polyml.5.2.1/mlsource/extra/Motif/XmTypes.ML0000644000175000017500000007707010313043362017677 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure XmTypes = struct local open MotifTypes XWindows in exception XmNaccelerator of string ; exception XmNacceleratorText of XmString ; exception XmNaccelerators of XtAccelerators ; exception XmNadjustLast of bool ; exception XmNadjustMargin of bool ; exception XmNalignment of XmAlignment ; exception XmNallowOverlap of bool ; exception XmNallowResize of bool ; exception XmNallowShellResize of bool ; exception XmNancestorSensitive of bool ; exception XmNapplyLabelString of XmString ; exception XmNargc of int ; exception XmNargv of string list ; exception XmNarmColor of int ; exception XmNarmPixmap of Drawable ; exception XmNarrowDirection of XmArrowDirection ; exception XmNautoShowCursorPosition of bool ; exception XmNautoUnmanage of bool ; exception XmNautomaticSelection of bool ; exception XmNbackground of int ; exception XmNbackgroundPixmap of Drawable ; exception XmNbaseHeight of int ; exception XmNbaseWidth of int ; exception XmNblinkRate of int ; exception XmNborderColor of int ; exception XmNborderPixmap of Drawable ; exception XmNborderWidth of int ; exception XmNbottomAttachment of XmAttachment ; exception XmNbottomOffset of int ; exception XmNbottomPosition of int ; exception XmNbottomShadowColor of int ; exception XmNbottomShadowPixmap of Drawable ; exception XmNbottomWidget of Widget ; exception XmNbuttonAcceleratorText of XmString list ; exception XmNbuttonAccelerators of string list ; exception XmNbuttonCount of int ; exception XmNbuttonFontList of (XFontStruct * string) list ; exception XmNbuttonMnemonicCharSets of XmString list ; exception XmNbuttonMnemonics of int list ; exception XmNbuttonSet of int ; exception XmNbuttonType of XmButtonType list ; exception XmNbuttons of XmString list ; exception XmNcancelButton of Widget ; exception XmNcancelLabelString of XmString ; exception XmNcascadePixmap of Drawable ; exception XmNchildren of Widget list ; exception XmNclipWindow of Widget ; exception XmNcolormap of Colormap ; exception XmNcolumns of int ; exception XmNcommand of XmString ; exception XmNcommandWindow of Widget ; exception XmNcommandWindowLocation of XmCommandWindowLocation ; exception XmNcursorPosition of int ; exception XmNcursorPositionVisible of bool ; exception XmNdecimalPoints of int ; exception XmNdefaultButton of Widget ; exception XmNdefaultButtonShadowThickness of int ; exception XmNdefaultButtonType of XmDefaultButtonType ; exception XmNdefaultFontList of (XFontStruct * string) list ; exception XmNdefaultPosition of bool ; exception XmNdeleteResponse of XmDeleteResponse ; exception XmNdepth of int ; exception XmNdialogStyle of XmDialogStyle ; exception XmNdialogTitle of XmString ; exception XmNdialogType of XmDialogType ; exception XmNdirListItemCount of int ; exception XmNdirListItems of XmString list ; exception XmNdirListLabelString of XmString ; exception XmNdirMask of XmString ; exception XmNdirSpec of XmString ; exception XmNdirectory of XmString ; exception XmNdirectoryValid of bool ; exception XmNdoubleClickInterval of int ; exception XmNeditMode of XmEditMode ; exception XmNeditable of bool ; exception XmNentryAlignment of XmAlignment ; exception XmNentryBorder of int ; exception XmNfileListItemCount of int ; exception XmNfileListItems of XmString list ; exception XmNfileListLabelString of XmString ; exception XmNfileTypeMask of XmFileTypeMask ; exception XmNfillOnArm of bool ; exception XmNfillOnSelect of bool ; exception XmNfilterLabelString of XmString ; exception XmNfontList of (XFontStruct * string) list ; exception XmNforeground of int ; exception XmNfractionBase of int ; exception XmNgeometry of string ; exception XmNheight of int ; exception XmNheightInc of int ; exception XmNhelpLabelString of XmString ; exception XmNhighlightColor of int ; exception XmNhighlightOnEnter of bool ; exception XmNhighlightPixmap of Drawable ; exception XmNhighlightThickness of int ; exception XmNhistoryItemCount of int ; exception XmNhistoryItems of XmString list ; exception XmNhistoryMaxItems of int ; exception XmNhistoryVisibleItemCount of int ; exception XmNhorizontalScrollBar of Widget ; exception XmNhorizontalSpacing of int ; exception XmNiconMask of Drawable ; exception XmNiconName of string ; exception XmNiconNameEncoding of int ; exception XmNiconPixmap of Drawable ; exception XmNiconWindow of Drawable ; exception XmNiconX of int ; exception XmNiconY of int ; exception XmNiconic of bool ; exception XmNincrement of int ; exception XmNindicatorOn of bool ; exception XmNindicatorSize of int ; exception XmNindicatorType of XmIndicatorType ; exception XmNinitialDelay of int ; exception XmNinitialResourcesPersistent of bool ; exception XmNinitialState of XWMStateHint ; exception XmNinput of bool ; exception XmNisAligned of bool ; exception XmNisHomogeneous of bool ; exception XmNitemCount of int ; exception XmNitems of XmString list ; exception XmNkeyboardFocusPolicy of XmKeyboardFocusPolicy ; exception XmNlabelFontList of (XFontStruct * string) list ; exception XmNlabelInsensitivePixmap of Drawable ; exception XmNlabelPixmap of Drawable ; exception XmNlabelString of XmString ; exception XmNlabelType of XmLabelType ; exception XmNleftAttachment of XmAttachment ; exception XmNleftOffset of int ; exception XmNleftPosition of int ; exception XmNleftWidget of Widget ; exception XmNlistItemCount of int ; exception XmNlistItems of XmString list ; exception XmNlistLabelString of XmString ; exception XmNlistMarginHeight of int ; exception XmNlistMarginWidth of int ; exception XmNlistSizePolicy of XmVisualPolicy ; exception XmNlistSpacing of int ; exception XmNlistUpdated of bool ; exception XmNlistVisibleItemCount of int ; exception XmNmainWindowMarginHeight of int ; exception XmNmainWindowMarginWidth of int ; exception XmNmappedWhenManaged of bool ; exception XmNmappingDelay of int ; exception XmNmargin of int ; exception XmNmarginBottom of int ; exception XmNmarginHeight of int ; exception XmNmarginLeft of int ; exception XmNmarginRight of int ; exception XmNmarginTop of int ; exception XmNmarginWidth of int ; exception XmNmaxAspectX of int ; exception XmNmaxAspectY of int ; exception XmNmaxHeight of int ; exception XmNmaxLength of int ; exception XmNmaxWidth of int ; exception XmNmaximum of int ; exception XmNmenuAccelerator of string ; exception XmNmenuBar of Widget ; exception XmNmenuCursor of Cursor ; exception XmNmenuHelpWidget of Widget ; exception XmNmenuHistory of Widget ; exception XmNmenuPost of string ; exception XmNmessageAlignment of XmAlignment ; exception XmNmessageString of XmString ; exception XmNmessageWindow of Widget ; exception XmNminAspectX of int ; exception XmNminAspectY of int ; exception XmNminHeight of int ; exception XmNminWidth of int ; exception XmNminimizeButtons of bool ; exception XmNminimum of int ; exception XmNmnemonic of int ; exception XmNmnemonicCharSet of string ; exception XmNmultiClick of XmMultiClickType ; exception XmNmustMatch of bool ; exception XmNmwmDecorations of int ; exception XmNmwmFunctions of int ; exception XmNmwmInputMode of int ; exception XmNmwmMenu of string ; exception XmNnavigationType of XmNavigationType ; exception XmNnoMatchString of XmString ; exception XmNnoResize of bool ; exception XmNnumChildren of int ; exception XmNnumColumns of int ; exception XmNokLabelString of XmString ; exception XmNoptionLabel of XmString ; exception XmNoptionMnemonic of int ; exception XmNorientation of XmOrientation ; exception XmNoverrideRedirect of bool ; exception XmNpacking of XmPacking ; exception XmNpageIncrement of int ; exception XmNpaneMaximum of int ; exception XmNpaneMinimum of int ; exception XmNpattern of XmString ; exception XmNpendingDelete of bool ; exception XmNpopupEnabled of bool ; exception XmNpostFromButton of int ; exception XmNprocessingDirection of XmProcessingDirection ; exception XmNpromptString of XmString ; exception XmNpushButtonEnabled of bool ; exception XmNradioAlwaysOne of bool ; exception XmNradioBehavior of bool ; exception XmNrecomputeSize of bool ; exception XmNrefigureMode of bool ; exception XmNrepeatDelay of int ; exception XmNresizable of bool ; exception XmNresizeHeight of bool ; exception XmNresizePolicy of XmResizePolicy ; exception XmNresizeWidth of bool ; exception XmNrightAttachment of XmAttachment ; exception XmNrightOffset of int ; exception XmNrightPosition of int ; exception XmNrightWidget of Widget ; exception XmNrowColumnType of XmRowColumnType ; exception XmNrows of int ; exception XmNrubberPositioning of bool ; exception XmNsashHeight of int ; exception XmNsashIndent of int ; exception XmNsashShadowThickness of int ; exception XmNsashWidth of int ; exception XmNsaveUnder of bool ; exception XmNscaleHeight of int ; exception XmNscaleMultiple of int ; exception XmNscaleWidth of int ; exception XmNscrollBarDisplayPolicy of XmScrollBarDisplayPolicy ; exception XmNscrollBarPlacement of XmScrollBarPlacement ; exception XmNscrollHorizontal of bool ; exception XmNscrollLeftSide of bool ; exception XmNscrollTopSide of bool ; exception XmNscrollVertical of bool ; exception XmNscrolledWindowMarginHeight of int ; exception XmNscrolledWindowMarginWidth of int ; exception XmNscrollingPolicy of XmScrollingPolicy ; exception XmNselectColor of int ; exception XmNselectInsensitivePixmap of Drawable ; exception XmNselectPixmap of Drawable ; exception XmNselectThreshold of int ; exception XmNselectedItemCount of int ; exception XmNselectedItems of XmString list ; exception XmNselectionArray of XmTextScanType list ; exception XmNselectionArrayCount of int ; exception XmNselectionLabelString of XmString ; exception XmNselectionPolicy of XmSelectionPolicy ; exception XmNsensitive of bool ; exception XmNseparatorOn of bool ; exception XmNseparatorType of XmShadowType ; exception XmNset of bool ; exception XmNshadowThickness of int ; exception XmNshadowType of XmShadowType ; exception XmNshellUnitType of XmUnitType ; exception XmNshowArrows of bool ; exception XmNshowAsDefault of int ; exception XmNshowSeparator of bool ; exception XmNshowValue of bool ; exception XmNskipAdjust of bool ; exception XmNsliderSize of int ; exception XmNspacing of int ; exception XmNstringDirection of XmStringDirection ; exception XmNsubMenuId of Widget ; exception XmNsymbolPixmap of Drawable ; exception XmNtextAccelerators of XtAccelerators ; exception XmNtextColumns of int ; exception XmNtextFontList of (XFontStruct * string) list ; exception XmNtextString of XmString ; exception XmNtextTranslations of XtTranslations ; exception XmNtitle of string ; exception XmNtitleEncoding of int ; exception XmNtitleString of XmString ; exception XmNtopAttachment of XmAttachment ; exception XmNtopCharacter of int ; exception XmNtopItemPosition of int ; exception XmNtopOffset of int ; exception XmNtopPosition of int ; exception XmNtopShadowColor of int ; exception XmNtopShadowPixmap of Drawable ; exception XmNtopWidget of Widget ; exception XmNtransient of bool ; exception XmNtransientFor of Widget ; exception XmNtranslations of XtTranslations ; exception XmNtraversalOn of bool ; exception XmNtroughColor of int ; exception XmNunitType of XmUnitType ; exception XmNuseAsyncGeometry of bool ; exception XmNvalue of int ; exception XmNverifyBell of bool ; exception XmNverticalScrollBar of Widget ; exception XmNverticalSpacing of int ; exception XmNvisibleItemCount of int ; exception XmNvisibleWhenOff of bool ; exception XmNvisual of Visual ; exception XmNvisualPolicy of XmVisualPolicy ; exception XmNwaitForWm of bool ; exception XmNwidth of int ; exception XmNwidthInc of int ; exception XmNwinGravity of int ; exception XmNwindowGroup of Drawable ; exception XmNwmTimeout of int ; exception XmNwordWrap of bool ; exception XmNworkWindow of Widget ; exception XmNx of int ; exception XmNy of int ; val XmCAccelerator = "Accelerator" ; val XmCAcceleratorText = "AcceleratorText" ; val XmCAccelerators = "Accelerators" ; val XmCAdjustLast = "AdjustLast" ; val XmCAdjustMargin = "AdjustMargin" ; val XmCAlignment = "Alignment" ; val XmCAllowOverlap = "AllowOverlap" ; val XmCAllowShellResize = "AllowShellResize" ; val XmCApplyLabelString = "ApplyLabelString" ; val XmCArgc = "Argc" ; val XmCArgv = "Argv" ; val XmCArmColor = "ArmColor" ; val XmCArmPixmap = "ArmPixmap" ; val XmCArrowDirection = "ArrowDirection" ; val XmCAttachment = "Attachment" ; val XmCAutoShowCursorPosition = "AutoShowCursorPosition" ; val XmCAutoUnmanage = "AutoUnmanage" ; val XmCAutomaticSelection = "AutomaticSelection" ; val XmCBackground = "Background" ; val XmCBackgroundPixmap = "BackgroundPixmap" ; val XmCBaseHeight = "BaseHeight" ; val XmCBaseWidth = "BaseWidth" ; val XmCBlinkRate = "BlinkRate" ; val XmCBoolean = "Boolean" ; val XmCBorderColor = "BorderColor" ; val XmCBorderWidth = "BorderWidth" ; val XmCBottomShadowColor = "BottomShadowColor" ; val XmCBottomShadowPixmap = "BottomShadowPixmap" ; val XmCButtonAcceleratorText = "ButtonAcceleratorText" ; val XmCButtonAccelerators = "ButtonAccelerators" ; val XmCButtonCount = "ButtonCount" ; val XmCButtonFontList = "ButtonFontList" ; val XmCButtonMnemonicCharSets = "ButtonMnemonicCharSets" ; val XmCButtonMnemonics = "ButtonMnemonics" ; val XmCButtonSet = "ButtonSet" ; val XmCButtonType = "ButtonType" ; val XmCButtons = "Buttons" ; val XmCCancelLabelString = "CancelLabelString" ; val XmCChildren = "Children" ; val XmCClipWindow = "ClipWindow" ; val XmCColormap = "Colormap" ; val XmCColumns = "Columns" ; val XmCCommandWindow = "CommandWindow" ; val XmCCommandWindowLocation = "CommandWindowLocation" ; val XmCCursor = "Cursor" ; val XmCCursorPosition = "CursorPosition" ; val XmCCursorPositionVisible = "CursorPositionVisible" ; val XmCDecimalPoints = "DecimalPoints" ; val XmCDefaultButtonShadowThickness = "DefaultButtonShadowThickness" ; val XmCDefaultButtonType = "DefaultButtonType" ; val XmCDefaultFontList = "DefaultFontList" ; val XmCDefaultPosition = "DefaultPosition" ; val XmCDeleteResponse = "DeleteResponse" ; val XmCDepth = "Depth" ; val XmCDialogStyle = "DialogStyle" ; val XmCDialogTitle = "DialogTitle" ; val XmCDialogType = "DialogType" ; val XmCDirListItemCount = "DirListItemCount" ; val XmCDirListItems = "DirListItems" ; val XmCDirListLabelString = "DirListLabelString" ; val XmCDirMask = "DirMask" ; val XmCDirSpec = "DirSpec" ; val XmCDirectory = "Directory" ; val XmCDirectoryValid = "DirectoryValid" ; val XmCDoubleClickInterval = "DoubleClickInterval" ; val XmCEditMode = "EditMode" ; val XmCEditable = "Editable" ; val XmCEntryBorder = "EntryBorder" ; val XmCFileListItemCount = "FileListItemCount" ; val XmCFileListItems = "FileListItems" ; val XmCFileListLabelString = "FileListLabelString" ; val XmCFileTypeMask = "FileTypeMask" ; val XmCFillOnArm = "FillOnArm" ; val XmCFillOnSelect = "FillOnSelect" ; val XmCFilterLabelString = "FilterLabelString" ; val XmCFontList = "FontList" ; val XmCForeground = "Foreground" ; val XmCFraction = "Fraction" ; val XmCGeometry = "Geometry" ; val XmCHeight = "Height" ; val XmCHeightInc = "HeightInc" ; val XmCHelpLabelString = "HelpLabelString" ; val XmCHighlightColor = "HighlightColor" ; val XmCHighlightOnEnter = "HighlightOnEnter" ; val XmCHighlightPixmap = "HighlightPixmap" ; val XmCHighlightThickness = "HighlightThickness" ; val XmCHorizontalScrollBar = "HorizontalScrollBar" ; val XmCIconMask = "IconMask" ; val XmCIconName = "IconName" ; val XmCIconNameEncoding = "IconNameEncoding" ; val XmCIconPixmap = "IconPixmap" ; val XmCIconWindow = "IconWindow" ; val XmCIconX = "IconX" ; val XmCIconY = "IconY" ; val XmCIconic = "Iconic" ; val XmCIncrement = "Increment" ; val XmCIndicatorOn = "IndicatorOn" ; val XmCIndicatorSize = "IndicatorSize" ; val XmCIndicatorType = "IndicatorType" ; val XmCInitialDelay = "InitialDelay" ; val XmCInitialResourcesPersistent = "InitialResourcesPersistent" ; val XmCInitialState = "InitialState" ; val XmCInput = "Input" ; val XmCIsAligned = "IsAligned" ; val XmCIsHomogeneous = "IsHomogeneous" ; val XmCItemCount = "ItemCount" ; val XmCItems = "Items" ; val XmCKeyboardFocusPolicy = "KeyboardFocusPolicy" ; val XmCLabelFontList = "LabelFontList" ; val XmCLabelInsensitivePixmap = "LabelInsensitivePixmap" ; val XmCLabelPixmap = "LabelPixmap" ; val XmCLabelString = "LabelString" ; val XmCLabelType = "LabelType" ; val XmCListLabelString = "ListLabelString" ; val XmCListMarginHeight = "ListMarginHeight" ; val XmCListMarginWidth = "ListMarginWidth" ; val XmCListSizePolicy = "ListSizePolicy" ; val XmCListSpacing = "ListSpacing" ; val XmCListUpdated = "ListUpdated" ; val XmCMainWindowMarginHeight = "MainWindowMarginHeight" ; val XmCMainWindowMarginWidth = "MainWindowMarginWidth" ; val XmCMappedWhenManaged = "MappedWhenManaged" ; val XmCMappingDelay = "MappingDelay" ; val XmCMargin = "Margin" ; val XmCMarginBottom = "MarginBottom" ; val XmCMarginHeight = "MarginHeight" ; val XmCMarginLeft = "MarginLeft" ; val XmCMarginRight = "MarginRight" ; val XmCMarginTop = "MarginTop" ; val XmCMarginWidth = "MarginWidth" ; val XmCMaxAspectX = "MaxAspectX" ; val XmCMaxAspectY = "MaxAspectY" ; val XmCMaxHeight = "MaxHeight" ; val XmCMaxItems = "MaxItems" ; val XmCMaxLength = "MaxLength" ; val XmCMaxWidth = "MaxWidth" ; val XmCMaximum = "Maximum" ; val XmCMenuBar = "MenuBar" ; val XmCMenuPost = "MenuPost" ; val XmCMenuWidget = "MenuWidget" ; val XmCMessageString = "MessageString" ; val XmCMessageWindow = "MessageWindow" ; val XmCMinAspectX = "MinAspectX" ; val XmCMinAspectY = "MinAspectY" ; val XmCMinHeight = "MinHeight" ; val XmCMinWidth = "MinWidth" ; val XmCMinimizeButtons = "MinimizeButtons" ; val XmCMinimum = "Minimum" ; val XmCMnemonic = "Mnemonic" ; val XmCMnemonicCharSet = "MnemonicCharSet" ; val XmCMultiClick = "MultiClick" ; val XmCMustMatch = "MustMatch" ; val XmCMwmDecorations = "MwmDecorations" ; val XmCMwmFunctions = "MwmFunctions" ; val XmCMwmInputMode = "MwmInputMode" ; val XmCMwmMenu = "MwmMenu" ; val XmCNavigationType = "NavigationType" ; val XmCNoMatchString = "NoMatchString" ; val XmCNoResize = "NoResize" ; val XmCNumChildren = "NumChildren" ; val XmCNumColumns = "NumColumns" ; val XmCOffset = "Offset" ; val XmCOkLabelString = "OkLabelString" ; val XmCOptionLabel = "OptionLabel" ; val XmCOptionMnemonic = "OptionMnemonic" ; val XmCOrientation = "Orientation" ; val XmCOverrideRedirect = "OverrideRedirect" ; val XmCPacking = "Packing" ; val XmCPageIncrement = "PageIncrement" ; val XmCPaneMaximum = "PaneMaximum" ; val XmCPaneMinimum = "PaneMinimum" ; val XmCPattern = "Pattern" ; val XmCPendingDelete = "PendingDelete" ; val XmCPixmap = "Pixmap" ; val XmCPopupEnabled = "PopupEnabled" ; val XmCPosition = "Position" ; val XmCPostFromButton = "PostFromButton" ; val XmCProcessingDirection = "ProcessingDirection" ; val XmCPromptString = "PromptString" ; val XmCPushButtonEnabled = "PushButtonEnabled" ; val XmCRadioAlwaysOne = "RadioAlwaysOne" ; val XmCRadioBehavior = "RadioBehavior" ; val XmCRecomputeSize = "RecomputeSize" ; val XmCRepeatDelay = "RepeatDelay" ; val XmCResizeHeight = "ResizeHeight" ; val XmCResizePolicy = "ResizePolicy" ; val XmCResizeWidth = "ResizeWidth" ; val XmCRowColumnType = "RowColumnType" ; val XmCRows = "Rows" ; val XmCRubberPositioning = "RubberPositioning" ; val XmCSashHeight = "SashHeight" ; val XmCSashIndent = "SashIndent" ; val XmCSashWidth = "SashWidth" ; val XmCSaveUnder = "SaveUnder" ; val XmCScaleHeight = "ScaleHeight" ; val XmCScaleMultiple = "ScaleMultiple" ; val XmCScaleWidth = "ScaleWidth" ; val XmCScroll = "Scroll" ; val XmCScrollBarDisplayPolicy = "ScrollBarDisplayPolicy" ; val XmCScrollBarPlacement = "ScrollBarPlacement" ; val XmCScrollSide = "ScrollSide" ; val XmCScrolledWindowMarginHeight = "ScrolledWindowMarginHeight" ; val XmCScrolledWindowMarginWidth = "ScrolledWindowMarginWidth" ; val XmCScrollingPolicy = "ScrollingPolicy" ; val XmCSelectColor = "SelectColor" ; val XmCSelectInsensitivePixmap = "SelectInsensitivePixmap" ; val XmCSelectPixmap = "SelectPixmap" ; val XmCSelectThreshold = "SelectThreshold" ; val XmCSelectedItemCount = "SelectedItemCount" ; val XmCSelectedItems = "SelectedItems" ; val XmCSelectionArray = "SelectionArray" ; val XmCSelectionArrayCount = "SelectionArrayCount" ; val XmCSelectionLabelString = "SelectionLabelString" ; val XmCSelectionPolicy = "SelectionPolicy" ; val XmCSensitive = "Sensitive" ; val XmCSeparatorOn = "SeparatorOn" ; val XmCSeparatorType = "SeparatorType" ; val XmCSet = "Set" ; val XmCShadowThickness = "ShadowThickness" ; val XmCShadowType = "ShadowType" ; val XmCShellUnitType = "ShellUnitType" ; val XmCShowArrows = "ShowArrows" ; val XmCShowAsDefault = "ShowAsDefault" ; val XmCShowSeparator = "ShowSeparator" ; val XmCShowValue = "ShowValue" ; val XmCSliderSize = "SliderSize" ; val XmCSpacing = "Spacing" ; val XmCStringDirection = "StringDirection" ; val XmCTextFontList = "TextFontList" ; val XmCTextPosition = "TextPosition" ; val XmCTextString = "TextString" ; val XmCTitle = "Title" ; val XmCTitleEncoding = "TitleEncoding" ; val XmCTitleString = "TitleString" ; val XmCTopItemPosition = "TopItemPosition" ; val XmCTopShadowColor = "TopShadowColor" ; val XmCTopShadowPixmap = "TopShadowPixmap" ; val XmCTransient = "Transient" ; val XmCTransientFor = "TransientFor" ; val XmCTranslations = "Translations" ; val XmCTraversalOn = "TraversalOn" ; val XmCTroughColor = "TroughColor" ; val XmCUnitType = "UnitType" ; val XmCUseAsyncGeometry = "UseAsyncGeometry" ; val XmCValue = "Value" ; val XmCVerifyBell = "VerifyBell" ; val XmCVerticalScrollBar = "VerticalScrollBar" ; val XmCVisibleItemCount = "VisibleItemCount" ; val XmCVisibleWhenOff = "VisibleWhenOff" ; val XmCVisual = "Visual" ; val XmCVisualPolicy = "VisualPolicy" ; val XmCWaitForWm = "WaitForWm" ; val XmCWidget = "Widget" ; val XmCWidth = "Width" ; val XmCWidthInc = "WidthInc" ; val XmCWinGravity = "WinGravity" ; val XmCWindowGroup = "WindowGroup" ; val XmCWmTimeout = "WmTimeout" ; val XmCWordWrap = "WordWrap" ; val XmCWorkWindow = "WorkWindow" ; val XmCX = "X" ; val XmCY = "Y" ; end (* local *) ; end (* struct *) ; polyml.5.2.1/mlsource/extra/Motif/initialClasses.awk0000644000175000017500000000021510313043362021472 0ustar daviddavid/NOT SUPPORTED/ { exit } { if ( NF >= 2 && $3 != "(callback)" ) { printf ("val %s = \"%s\" ;\n",$2,substr($2,4,length($2)-3)) ; } } polyml.5.2.1/mlsource/extra/Motif/makeClasses.awk0000644000175000017500000000016210313043362020757 0ustar daviddavid/NOT SUPPORTED/ { exit } { if ( NF >= 2 && $3 != "(callback)" ) { printf ("val %s: string ;\n",$2) ; } } polyml.5.2.1/mlsource/extra/Motif/makeExceptions.awk0000644000175000017500000000111210313043362021477 0ustar daviddavid/NOT SUPPORTED/ { exit } { if ( NF >= 2 && $3 != "(callback)" ) { if ( $3 == "Atom" ) $3 = "int" ; if ( $3 == "Cardinal" ) $3 = "int" ; if ( $3 == "Dimension" ) $3 = "int" ; if ( $3 == "KeySym" ) $3 = "int" ; if ( $3 == "Pixel" ) $3 = "int" ; if ( $3 == "Position" ) $3 = "int" ; if ( $3 == "XmTextPosition" ) $3 = "int" ; if ( $3 == "short" ) $3 = "int" ; if ( $4 == "list" ) printf ("exception %s of %s list ;\n",$1,$3) ; else printf ("exception %s of %s ;\n",$1,$3) ; } } polyml.5.2.1/mlsource/extra/Motif/makeInitials.awk0000644000175000017500000000650110313043362021141 0ustar daviddavid/NOT SUPPORTED/ { exit } { if ( NF >= 2 && $3 != "(callback)" ) { type = "unknown" ; if ( $3 =="Atom" ) type = "XmRAtom" ; if ( $3 =="Cardinal" ) type = "XmRCardinal" ; if ( $3 =="Colormap" ) type = "XmRColormap" ; if ( $3 =="Cursor" ) type = "XmRCursor" ; if ( $3 =="Dimension" ) type = "XmRDimension" ; if ( $3 =="Drawable" ) type = "XmRPixmap" ; if ( $3 =="KeySym" ) type = "XmRKeySym" ; if ( $3 =="KeySym" && $4 == "list" ) type = "XmRKeySymTable" ; if ( $3 =="Pixel" ) type = "XmRPixel" ; if ( $3 =="Position" ) type = "XmRPosition" ; if ( $3 =="Visual" ) type = "XmRVisual" ; if ( $3 =="Widget" ) type = "XmRWidget" ; if ( $3 =="Widget" && $4 == "list" ) type = "XmRWidgetList" ; if ( $3 =="XFontStruct" && $4 == "list" ) type = "XmRFontList" ; if ( $3 =="XWMStateHint" ) type = "XmRInitialState" ; if ( $3 =="XtAccelerators" ) type = "XmRAcceleratorTable" ; if ( $3 =="XmAlignment" ) type = "XmRAlignment" ; if ( $3 =="XmArrowDirection" ) type = "XmRArrowDirection" ; if ( $3 =="XmAttachment" ) type = "XmRAttachment" ; if ( $3 =="XmButtonType" && $4 == "list" ) type = "XmRButtonTypeTable" ; if ( $3 =="XmCommandWindowLocation" ) type = "XmRCommandWindowLocation" ; if ( $3 =="XmDefaultButtonType" ) type = "XmRDefaultButtonType" ; if ( $3 =="XmDeleteResponse" ) type = "XmRDeleteResponse" ; if ( $3 =="XmDialogStyle" ) type = "XmRDialogStyle" ; if ( $3 =="XmDialogType" ) type = "XmRDialogType" ; if ( $3 =="XmEditMode" ) type = "XmREditMode" ; if ( $3 =="XmFileTypeMask" ) type = "XmRFileTypeMask" ; if ( $3 =="XmIndicatorType" ) type = "XmRIndicatorType" ; if ( $3 =="XmKeyboardFocusPolicy" ) type = "XmRKeyboardFocusPolicy" ; if ( $3 =="XmLabelType" ) type = "XmRLabelType" ; if ( $3 =="XmMultiClickType" ) type = "XmRMultiClick" ; if ( $3 =="XmNavigationType" ) type = "XmRNavigationType" ; if ( $3 =="XmOrientation" ) type = "XmROrientation" ; if ( $3 =="XmPacking" ) type = "XmRPacking" ; if ( $3 =="XmProcessingDirection" ) type = "XmRProcessingDirection" ; if ( $3 =="XmResizePolicy" ) type = "XmRResizePolicy" ; if ( $3 =="XmRowColumnType" ) type = "XmRRowColumnType" ; if ( $3 =="XmScrollBarDisplayPolicy" ) type = "XmRScrollBarDisplayPolicy" ; if ( $3 =="XmScrollBarPlacement" ) type = "XmRScrollBarPlacement" ; if ( $3 =="XmScrollingPolicy" ) type = "XmRScrollingPolicy" ; if ( $3 =="XmSelectionPolicy" ) type = "XmRSelectionPolicy" ; if ( $3 =="XmShadowType" ) type = "XmRShadowType" ; if ( $3 =="XmString" ) type = "XmRXmString" ; if ( $3 =="XmString" && $4 == "list" ) type = "XmRXmStringTable" ; if ( $3 =="XmStringDirection" ) type = "XmRStringDirection" ; if ( $3 =="XmTextPosition" ) type = "XmRInt" ; if ( $3 =="XmTextScanType" && $4 == "list" ) type = "XmRTextScanTypeTable" ; if ( $3 =="XmUnitType" ) type = "XmRUnitType" ; if ( $3 =="XmVisualPolicy" ) type = "XmRVisualPolicy" ; if ( $3 =="XtTranslations" ) type = "XmRTranslationTable" ; if ( $3 =="bool" ) type = "XmRBool" ; if ( $3 =="int" ) type = "XmRInt" ; if ( $3 =="short" ) type = "XmRShort" ; if ( $3 =="string" ) type = "XmRString" ; if ( $3 =="string" && $4 == "list" ) type = "XmRStringTable" ; printf ("val U = XtSetExceptionType %s %s ;\n",$1,type) } } polyml.5.2.1/mlsource/extra/Motif/makeXmNs0000644000175000017500000000403310313043362017467 0ustar daviddavid# echo "signature XM_TYPES = sig" > XM_TYPES.ML echo "include MOTIF_TYPES ;" >> XM_TYPES.ML echo "local open XWINDOWS in" >> XM_TYPES.ML awk -f makeExceptions.awk < XmNs.doc | align_of >> XM_TYPES.ML awk -f makeClasses.awk < XmNs.doc | align_types | sort | uniq >> XM_TYPES.ML echo "end (* local *) ;" >> XM_TYPES.ML echo "end (* sig *) ;" >> XM_TYPES.ML echo "structure XmTypes = struct" > XmTypes.ML echo "local open MotifTypes XWindows in" >> XmTypes.ML awk -f makeExceptions.awk < XmNs.doc | align_of >> XmTypes.ML awk -f initialClasses.awk < XmNs.doc | align_equals | sort | uniq >> XmTypes.ML echo "end (* local *) ;" >> XmTypes.ML echo "end (* struct *) ;" >> XmTypes.ML echo "structure InitialiseCore = struct" > InitialiseCore.ML echo "local open MotifTypes XmTypes MotifCore in" >> InitialiseCore.ML awk -f makeInitials.awk < XmNs.doc >> InitialiseCore.ML echo "end (* local *) ;" >> InitialiseCore.ML echo "end (* struct *) ;" >> InitialiseCore.ML exit echo "signature XM_TYPES = sig" > XM_TYPES.ML echo "include MOTIF_TYPES ;" >> XM_TYPES.ML echo "local open XWINDOWS in" >> XM_TYPES.ML awk -f makeDatatype.awk < XmNs.doc | align_of >> XM_TYPES.ML echo "end (* local *) ;" >> XM_TYPES.ML echo "end (* sig *) ;" >> XM_TYPES.ML echo "structure XmTypes = struct" > XmTypes.ML echo "local open MotifTypes XWindows in" >> XmTypes.ML awk -f makeDatatype.awk < XmNs.doc | align_of >> XmTypes.ML echo "end (* local *) ;" >> XmTypes.ML echo "end (* struct *) ;" >> XmTypes.ML polyml.5.2.1/mlsource/extra/Motif/ml_bind.ML0000644000175000017500000007204310313043363017666 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure Motif: MOTIF_SIG = struct open MotifTypes; open XmTypes; open MotifCore; local open XWindows; open XCall; open InitialiseCore; in (******************************************************************************) (* *) (* A few Xt operations *) (* *) (******************************************************************************) val NoWidget:Widget = xcall (XCALL_NoWidget,0); fun WidgetID (w:Widget):int = xcall (XCALL_GetID,w); fun WidgetExists (w:Widget):bool = xcall (XCALL_ResourceExists,w); fun XtParseTranslationTable (s:string):XtTranslations = xcall (XCALL_XtParseTranslationTable,s); fun XtOverrideTranslations (w:Widget) (t:XtTranslations):unit = xcall (XCALL_XtOverrideTranslations,w,t); fun XtAugmentTranslations (w:Widget) (t:XtTranslations):unit = xcall (XCALL_XtAugmentTranslations,w,t); fun XtUninstallTranslations (w:Widget):unit = xcall (XCALL_XtUninstallTranslations,w); (* SPF 14/2/94 not currently supported by run-time ... fun XtTranslateTablePrint (t:XtTranslations):unit = xcall (XCALL_XtTranslateTablePrint,t); ... *) fun XtTranslateTablePrint (t:XtTranslations):unit = raise XWindows "XtTranslateTablePrint: not supported"; fun XtParent (w:Widget):Widget = xcall (XCALL_XtParent,w); fun XtWindow (w:Widget):Drawable = xcall (XCALL_XtWindow,w); fun XtDisplay (w:Widget):Display = xcall (XCALL_XtDisplay,w); fun XtName (w:Widget):string = xcall (XCALL_XtName,w); fun XtAppInitialise (D:string) (A:string) (C:string) (F:string list) (L:Arg list):Widget = let val shell = xcall (XCALL_AppInitialise,D,A,C,F,XtSetExnVals L); val display = XtDisplay shell; in XStartDisplayHandler display; shell end; fun XtCreatePopupShell (name:string) (parent:Widget) (L:Arg list):Widget = xcall (XCALL_XtCreatePopupShell,name,parent,XtSetExnVals L); fun XtRealizeWidget (w:Widget):unit = xcall (XCALL_XtRealizeWidget,w); fun XtUnrealizeWidget (w:Widget):unit = xcall (XCALL_XtUnrealizeWidget,w); fun XtDestroyWidget (w:Widget):unit = xcall (XCALL_XtDestroyWidget,w); fun XtManageChildren (L:Widget list):unit = xcall (XCALL_XtManageChildren,L); fun XtUnmanageChildren (L:Widget list):unit = xcall (XCALL_XtUnmanageChildren,L); fun XtManageChild w = XtManageChildren [w]; fun XtUnmanageChild w = XtUnmanageChildren [w]; fun XtSetValues (w:Widget) (L:Arg list):unit = xcall (XCALL_XtSetValues,w,XtSetExnVals L); fun XtSetValue w a = XtSetValues w [a]; fun XtGetValues w = map (XtGetValue w); (******************************************************************************) (* *) (* A few more Xt operations (SPF 6/12/94, 19/1/95) *) (* *) (******************************************************************************) datatype XtGrabKind = XtGrabNone | XtGrabNonexclusive | XtGrabExclusive; fun XtPopup (w: Widget) XtGrabNone : unit = xcall (XCALL_XtPopup,w,0) | XtPopup (w: Widget) XtGrabNonexclusive : unit = xcall (XCALL_XtPopup,w,1) | XtPopup (w: Widget) XtGrabExclusive : unit = xcall (XCALL_XtPopup,w,2); fun XtPopdown (w: Widget) : unit = xcall (XCALL_XtPopdown,w); fun XtMapWidget (w: Widget) : unit = xcall (XCALL_XtMapWidget,w); fun XtUnmapWidget (w: Widget) : unit = xcall (XCALL_XtUnmapWidget,w); fun XtIsManaged (w:Widget):bool = xcall (XCALL_XtIsManaged,w); fun XtIsRealized (w:Widget):bool = xcall (XCALL_XtIsRealized,w); (******************************************************************************) (* *) (* Motif Callbacks *) (* *) (******************************************************************************) datatype XtCallback = XmNactivateCallback | XmNapplyCallback | XmNarmCallback | XmNbrowseSelectionCallback | XmNcancelCallback | XmNcascadingCallback | XmNcommandChangedCallback | XmNcommandEnteredCallback | XmNdecrementCallback | XmNdefaultActionCallback | XmNdestroyCallback | XmNdisarmCallback | XmNdragCallback | XmNentryCallback | XmNexposeCallback | XmNextendedSelectionCallback | XmNfocusCallback | XmNgainPrimaryCallback | XmNhelpCallback | XmNincrementCallback | XmNinputCallback | XmNlosePrimaryCallback | XmNlosingFocusCallback | XmNmapCallback | XmNmessageCallback (* this callback gets Message XEvents only *) | XmNmodifyVerifyCallback | XmNmotionVerifyCallback | XmNmultipleSelectionCallback | XmNnoMatchCallback | XmNokCallback | XmNpageDecrementCallback | XmNpageIncrementCallback | XmNpopdownCallback | XmNpopupCallback | XmNresizeCallback | XmNsimpleCallback | XmNsingleSelectionCallback | XmNtoBottomCallback | XmNtoTopCallback | XmNunmapCallback | XmNvalueChangedCallback; local fun Name XmNactivateCallback = "activateCallback" | Name XmNapplyCallback = "applyCallback" | Name XmNarmCallback = "armCallback" | Name XmNbrowseSelectionCallback = "browseSelectionCallback" | Name XmNcancelCallback = "cancelCallback" | Name XmNcascadingCallback = "cascadingCallback" | Name XmNcommandChangedCallback = "commandChangedCallback" | Name XmNcommandEnteredCallback = "commandEnteredCallback" | Name XmNdecrementCallback = "decrementCallback" | Name XmNdefaultActionCallback = "defaultActionCallback" | Name XmNdestroyCallback = "destroyCallback" | Name XmNdisarmCallback = "disarmCallback" | Name XmNdragCallback = "dragCallback" | Name XmNentryCallback = "entryCallback" | Name XmNexposeCallback = "exposeCallback" | Name XmNextendedSelectionCallback = "extendedSelectionCallback" | Name XmNfocusCallback = "focusCallback" | Name XmNgainPrimaryCallback = "gainPrimaryCallback" | Name XmNhelpCallback = "helpCallback" | Name XmNincrementCallback = "incrementCallback" | Name XmNinputCallback = "inputCallback" | Name XmNlosePrimaryCallback = "losePrimaryCallback" | Name XmNlosingFocusCallback = "losingFocusCallback" | Name XmNmapCallback = "mapCallback" | Name XmNmessageCallback = "messageCallback" | Name XmNmodifyVerifyCallback = "modifyVerifyCallback" | Name XmNmotionVerifyCallback = "motionVerifyCallback" | Name XmNmultipleSelectionCallback = "multipleSelectionCallback" | Name XmNnoMatchCallback = "noMatchCallback" | Name XmNokCallback = "okCallback" | Name XmNpageDecrementCallback = "pageDecrementCallback" | Name XmNpageIncrementCallback = "pageIncrementCallback" | Name XmNpopdownCallback = "popdownCallback" | Name XmNpopupCallback = "popupCallback" | Name XmNresizeCallback = "resizeCallback" | Name XmNsimpleCallback = "simpleCallback" | Name XmNsingleSelectionCallback = "singleSelectionCallback" | Name XmNtoBottomCallback = "toBottomCallback" | Name XmNtoTopCallback = "toTopCallback" | Name XmNunmapCallback = "unmapCallback" | Name XmNvalueChangedCallback = "valueChangedCallback"; in fun XtSetCallbacks (w:Widget) (L:(XtCallback * (Widget * 'a XEvent * '_b -> '_b)) list) (initialState:'_b) = let fun NameCallbacks [] = [] | NameCallbacks ((c,f)::T) = (Name c,f) :: NameCallbacks T; datatype 'a option = None | Some of 'a; fun FindMessageCallback [] = None | FindMessageCallback ((XmNmessageCallback,f)::_) = Some f | FindMessageCallback (_::T) = FindMessageCallback T; val M = FindMessageCallback L; in xcall (XCALL_SetCallbacks,w,NameCallbacks L,initialState); fn (ms:int) => fn (alpha:'a) => case M of Some f => xcall (XCALL_InsertWidgetTimeout,w,ms,alpha,f) | None => () end; end; fun XtSetSensitive (w:Widget) (s:bool):unit = xcall (XCALL_XtSetSensitive,w,s); fun XtIsSensitive (w:Widget):bool = xcall (XCALL_XtIsSensitive,w); (******************************************************************************) (* *) (* Motif Widget Creation Routines *) (* *) (******************************************************************************) local fun CreateXm (n:int) (p:Widget) (s:string) (L:Arg list):Widget = xcall (n,p,s,XtSetExnVals L); in val XmCreateArrowButton = CreateXm XCALL_XmCreateArrowButton; val XmCreateArrowButtonGadget = CreateXm XCALL_XmCreateArrowButtonGadget; val XmCreateBulletinBoard = CreateXm XCALL_XmCreateBulletinBoard; val XmCreateBulletinBoardDialog = CreateXm XCALL_XmCreateBulletinBoardDialog; val XmCreateCascadeButton = CreateXm XCALL_XmCreateCascadeButton; val XmCreateCascadeButtonGadget = CreateXm XCALL_XmCreateCascadeButtonGadget; val XmCreateCommand = CreateXm XCALL_XmCreateCommand; val XmCreateDialogShell = CreateXm XCALL_XmCreateDialogShell; val XmCreateDrawingArea = CreateXm XCALL_XmCreateDrawingArea; val XmCreateDrawnButton = CreateXm XCALL_XmCreateDrawnButton; val XmCreateErrorDialog = CreateXm XCALL_XmCreateErrorDialog; val XmCreateFileSelectionBox = CreateXm XCALL_XmCreateFileSelectionBox; val XmCreateFileSelectionDialog = CreateXm XCALL_XmCreateFileSelectionDialog; val XmCreateForm = CreateXm XCALL_XmCreateForm; val XmCreateFormDialog = CreateXm XCALL_XmCreateFormDialog; val XmCreateFrame = CreateXm XCALL_XmCreateFrame; val XmCreateInformationDialog = CreateXm XCALL_XmCreateInformationDialog; val XmCreateLabel = CreateXm XCALL_XmCreateLabel; val XmCreateLabelGadget = CreateXm XCALL_XmCreateLabelGadget; val XmCreateList = CreateXm XCALL_XmCreateList; val XmCreateMainWindow = CreateXm XCALL_XmCreateMainWindow; val XmCreateMenuBar = CreateXm XCALL_XmCreateMenuBar; val XmCreateMenuShell = CreateXm XCALL_XmCreateMenuShell; val XmCreateMessageBox = CreateXm XCALL_XmCreateMessageBox; val XmCreateMessageDialog = CreateXm XCALL_XmCreateMessageDialog; val XmCreateOptionMenu = CreateXm XCALL_XmCreateOptionMenu; val XmCreatePanedWindow = CreateXm XCALL_XmCreatePanedWindow; val XmCreatePopupMenu = CreateXm XCALL_XmCreatePopupMenu; val XmCreatePromptDialog = CreateXm XCALL_XmCreatePromptDialog; val XmCreatePulldownMenu = CreateXm XCALL_XmCreatePulldownMenu; val XmCreatePushButton = CreateXm XCALL_XmCreatePushButton; val XmCreatePushButtonGadget = CreateXm XCALL_XmCreatePushButtonGadget; val XmCreateQuestionDialog = CreateXm XCALL_XmCreateQuestionDialog; val XmCreateRadioBox = CreateXm XCALL_XmCreateRadioBox; val XmCreateRowColumn = CreateXm XCALL_XmCreateRowColumn; val XmCreateScale = CreateXm XCALL_XmCreateScale; val XmCreateScrollBar = CreateXm XCALL_XmCreateScrollBar; val XmCreateScrolledList = CreateXm XCALL_XmCreateScrolledList; val XmCreateScrolledText = CreateXm XCALL_XmCreateScrolledText; val XmCreateScrolledWindow = CreateXm XCALL_XmCreateScrolledWindow; val XmCreateSelectionBox = CreateXm XCALL_XmCreateSelectionBox; val XmCreateSelectionDialog = CreateXm XCALL_XmCreateSelectionDialog; val XmCreateSeparator = CreateXm XCALL_XmCreateSeparator; val XmCreateSeparatorGadget = CreateXm XCALL_XmCreateSeparatorGadget; val XmCreateSimpleCheckBox = CreateXm XCALL_XmCreateSimpleCheckBox; val XmCreateSimpleMenuBar = CreateXm XCALL_XmCreateSimpleMenuBar; val XmCreateSimpleOptionMenu = CreateXm XCALL_XmCreateSimpleOptionMenu; val XmCreateSimplePopupMenu = CreateXm XCALL_XmCreateSimplePopupMenu; val XmCreateSimplePulldownMenu = CreateXm XCALL_XmCreateSimplePulldownMenu; val XmCreateSimpleRadioBox = CreateXm XCALL_XmCreateSimpleRadioBox; val XmCreateText = CreateXm XCALL_XmCreateText; val XmCreateTextField = CreateXm XCALL_XmCreateTextField; val XmCreateToggleButton = CreateXm XCALL_XmCreateToggleButton; val XmCreateToggleButtonGadget = CreateXm XCALL_XmCreateToggleButtonGadget; val XmCreateWarningDialog = CreateXm XCALL_XmCreateWarningDialog; val XmCreateWorkArea = CreateXm XCALL_XmCreateWorkArea; val XmCreateWorkingDialog = CreateXm XCALL_XmCreateWorkingDialog; end; (******************************************************************************) (* *) (* Motif Widget Query Routines *) (* *) (******************************************************************************) fun XmIsArrowButton (w:Widget):bool = xcall(XCALL_XmIsSomething, 1,w); fun XmIsArrowButtonGadget (w:Widget):bool = xcall(XCALL_XmIsSomething, 2,w); fun XmIsBulletinBoard (w:Widget):bool = xcall(XCALL_XmIsSomething, 3,w); fun XmIsCascadeButton (w:Widget):bool = xcall(XCALL_XmIsSomething, 4,w); fun XmIsCascadeButtonGadget (w:Widget):bool = xcall(XCALL_XmIsSomething, 5,w); fun XmIsCommand (w:Widget):bool = xcall(XCALL_XmIsSomething, 6,w); fun XmIsDesktopObject (w:Widget):bool = xcall(XCALL_XmIsSomething, 7,w); fun XmIsDialogShell (w:Widget):bool = xcall(XCALL_XmIsSomething, 8,w); (* unsupported by solaris version of toolkit ... fun XmIsDisplayObject (w:Widget):bool = xcall(XCALL_XmIsSomething, 9,w); ... *) fun XmIsDrawingArea (w:Widget):bool = xcall(XCALL_XmIsSomething,10,w); fun XmIsDrawnButton (w:Widget):bool = xcall(XCALL_XmIsSomething,11,w); fun XmIsExtObject (w:Widget):bool = xcall(XCALL_XmIsSomething,12,w); fun XmIsFileSelectionBox (w:Widget):bool = xcall(XCALL_XmIsSomething,13,w); fun XmIsForm (w:Widget):bool = xcall(XCALL_XmIsSomething,14,w); fun XmIsFrame (w:Widget):bool = xcall(XCALL_XmIsSomething,15,w); fun XmIsGadget (w:Widget):bool = xcall(XCALL_XmIsSomething,16,w); fun XmIsLabel (w:Widget):bool = xcall(XCALL_XmIsSomething,17,w); fun XmIsLabelGadget (w:Widget):bool = xcall(XCALL_XmIsSomething,18,w); fun XmIsList (w:Widget):bool = xcall(XCALL_XmIsSomething,19,w); fun XmIsMainWindow (w:Widget):bool = xcall(XCALL_XmIsSomething,20,w); fun XmIsManager (w:Widget):bool = xcall(XCALL_XmIsSomething,21,w); fun XmIsMenuShell (w:Widget):bool = xcall(XCALL_XmIsSomething,22,w); fun XmIsMessageBox (w:Widget):bool = xcall(XCALL_XmIsSomething,23,w); fun XmIsMotifWMRunning (w:Widget):bool = xcall(XCALL_XmIsSomething,24,w); fun XmIsPanedWindow (w:Widget):bool = xcall(XCALL_XmIsSomething,25,w); fun XmIsPrimitive (w:Widget):bool = xcall(XCALL_XmIsSomething,26,w); fun XmIsPushButton (w:Widget):bool = xcall(XCALL_XmIsSomething,27,w); fun XmIsPushButtonGadget (w:Widget):bool = xcall(XCALL_XmIsSomething,28,w); fun XmIsRowColumn (w:Widget):bool = xcall(XCALL_XmIsSomething,29,w); fun XmIsScale (w:Widget):bool = xcall(XCALL_XmIsSomething,30,w); (* unsupported by solaris version of toolkit ... fun XmIsScreenObject (w:Widget):bool = xcall(XCALL_XmIsSomething,31,w); ... *) fun XmIsScrollBar (w:Widget):bool = xcall(XCALL_XmIsSomething,32,w); fun XmIsScrolledWindow (w:Widget):bool = xcall(XCALL_XmIsSomething,33,w); fun XmIsSelectionBox (w:Widget):bool = xcall(XCALL_XmIsSomething,34,w); fun XmIsSeparator (w:Widget):bool = xcall(XCALL_XmIsSomething,35,w); fun XmIsSeparatorGadget (w:Widget):bool = xcall(XCALL_XmIsSomething,36,w); fun XmIsShellExt (w:Widget):bool = xcall(XCALL_XmIsSomething,37,w); fun XmIsText (w:Widget):bool = xcall(XCALL_XmIsSomething,38,w); fun XmIsTextField (w:Widget):bool = xcall(XCALL_XmIsSomething,39,w); fun XmIsToggleButton (w:Widget):bool = xcall(XCALL_XmIsSomething,40,w); fun XmIsToggleButtonGadget (w:Widget):bool = xcall(XCALL_XmIsSomething,41,w); fun XmIsVendorShell (w:Widget):bool = xcall(XCALL_XmIsSomething,42,w); fun XmIsVendorShellExt (w:Widget):bool = xcall(XCALL_XmIsSomething,43,w); (* Not supported in Motif 1.2 fun XmIsWorldObject (w:Widget):bool = xcall(XCALL_XmIsSomething,44,w); *) (******************************************************************************) (* *) (* Operations valid for specific Widget classes only *) (* *) (******************************************************************************) fun XmCascadeButtonHighlight (w:Widget) (b:bool):unit = xcall (XCALL_XmCascadeButtonHighlight,w,b); fun XmCommandError (w:Widget) (s:XmString):unit = xcall (XCALL_XmCommandError,w,s); fun XmCommandGetChild (w:Widget) (b:XmDefaultButtonType):Widget = xcall (XCALL_XmCommandGetChild,w,fromDefaultButtonType b); fun XmFileSelectionBoxGetChild (w:Widget) (b:XmDefaultButtonType):Widget = xcall (XCALL_XmFileSelectionBoxGetChild,w,fromDefaultButtonType b); fun XmFileSelectionDoSearch (w:Widget) (s:XmString):unit = xcall (XCALL_XmFileSelectionDoSearch,w,s); fun XmMainWindowSetAreas (a:Widget) (b:Widget) (c:Widget) (d:Widget) (e:Widget) (f:Widget):unit = xcall (XCALL_XmMainWindowSetAreas,a,b,c,d,e,f); fun XmMainWindowSep1 (w:Widget):Widget = xcall (XCALL_XmMainWindowSepX,w,1); fun XmMainWindowSep2 (w:Widget):Widget = xcall (XCALL_XmMainWindowSepX,w,2); fun XmMainWindowSep3 (w:Widget):Widget = xcall (XCALL_XmMainWindowSepX,w,3); fun XmMessageBoxGetChild (w:Widget) (b:XmDefaultButtonType):Widget = xcall (XCALL_XmMessageBoxGetChild,w,fromDefaultButtonType b); fun XmOptionButtonGadget (w:Widget):Widget = xcall (XCALL_XmOptionButtonGadget,w); fun XmOptionLabelGadget (w:Widget):Widget = xcall (XCALL_XmOptionLabelGadget,w); fun XmScrolledWindowSetAreas (a:Widget) (b:Widget) (c:Widget) (d:Widget):unit = xcall (XCALL_XmScrolledWindowSetAreas,a,b,c,d); fun XmSelectionBoxGetChild (w:Widget) (b:XmDefaultButtonType):Widget = xcall (XCALL_XmSelectionBoxGetChild,w,fromDefaultButtonType b); fun XmSetMenuCursor (d:Display) (c:Cursor):unit = xcall (XCALL_XmSetMenuCursor,d,c); fun XmTrackingLocate (w:Widget) (c:Cursor) (b:bool):Widget = xcall (XCALL_XmTrackingLocate,w,c,b); fun XmUpdateDisplay (w:Widget):unit = xcall (XCALL_XmUpdateDisplay,w); local type code = int; fun get (opn : code) : Widget -> '_a = fn (w:Widget) => xcall (opn,w); fun set (opn : code) : Widget -> '_a -> unit = fn (w:Widget) => fn(x:'_a) => xcall (opn,w,x); val getInt : code -> Widget -> int = get; val getBool : code -> Widget -> bool = get; val getString : code -> Widget -> string = get; val setInt : code -> Widget -> int -> unit = set; val setBool : code -> Widget -> bool -> unit = set; val setString : code -> Widget -> string -> unit = set; in (******************************************************************************) (* *) (* Operations on XmText Widgets *) (* *) (******************************************************************************) val XmTextGetAddMode = getBool XCALL_XmTextGetAddMode; val XmTextGetBaseline = getInt XCALL_XmTextGetBaseline; val XmTextGetCursorPosition = getInt XCALL_XmTextGetCursorPosition; val XmTextGetEditable = getBool XCALL_XmTextGetEditable; val XmTextGetInsertionPosition = getInt XCALL_XmTextGetInsertionPosition; val XmTextGetLastPosition = getInt XCALL_XmTextGetLastPosition; val XmTextGetMaxLength = getInt XCALL_XmTextGetMaxLength; val XmTextGetSelection = getInt XCALL_XmTextGetSelection; val XmTextGetString= getString XCALL_XmTextGetString; val XmTextGetTopCharacter = getInt XCALL_XmTextGetTopCharacter; fun XmTextInsert (w:Widget) (n:int) (s:string) : unit = xcall (XCALL_XmTextInsert,w,n,s); val XmTextPaste = getBool XCALL_XmTextPaste; val XmTextRemove = getBool XCALL_XmTextRemove; fun XmTextReplace (w:Widget) (from:int) (to:int) (s:string) : unit = xcall (XCALL_XmTextReplace,w,from,to,s); val XmTextScroll = setInt XCALL_XmTextScroll; val XmTextSetAddMode = setBool XCALL_XmTextSetAddMode; val XmTextSetCursorPosition = setInt XCALL_XmTextSetCursorPosition; val XmTextSetEditable = setBool XCALL_XmTextSetEditable; val XmTextSetInsertionPosition = setInt XCALL_XmTextSetInsertionPosition; val XmTextSetMaxLength = setInt XCALL_XmTextSetMaxLength; val XmTextSetString = setString XCALL_XmTextSetString; val XmTextSetTopCharacter = setInt XCALL_XmTextSetTopCharacter; val XmTextShowPosition = setInt XCALL_XmTextShowPosition; fun XmTextXYToPos (w:Widget) (x:int) (y:int) : int = xcall (XCALL_XmTextXYToPos,w,x,y); (******************************************************************************) (* *) (* Operations on XmTextField Widgets *) (* *) (******************************************************************************) val XmTextFieldGetAddMode = getBool XCALL_XmTextFieldGetAddMode; val XmTextFieldGetBaseline = getInt XCALL_XmTextFieldGetBaseline; val XmTextFieldGetCursorPosition = getInt XCALL_XmTextFieldGetCursorPosition; val XmTextFieldGetEditable = getBool XCALL_XmTextFieldGetEditable; val XmTextFieldGetInsertionPosition = getInt XCALL_XmTextFieldGetInsertionPosition; val XmTextFieldGetLastPosition = getInt XCALL_XmTextFieldGetLastPosition; val XmTextFieldGetMaxLength = getInt XCALL_XmTextFieldGetMaxLength; val XmTextFieldGetSelection = getInt XCALL_XmTextFieldGetSelection; val XmTextFieldGetString= getString XCALL_XmTextFieldGetString; fun XmTextFieldInsert (w:Widget) (n:int) (s:string) : unit = xcall (XCALL_XmTextFieldInsert,w,n,s); val XmTextFieldPaste = getBool XCALL_XmTextFieldPaste; val XmTextFieldRemove = getBool XCALL_XmTextFieldRemove; fun XmTextFieldReplace (w:Widget) (from:int) (to:int) (s:string) : unit = xcall (XCALL_XmTextFieldReplace,w,from,to,s); val XmTextFieldSetAddMode = setBool XCALL_XmTextFieldSetAddMode; val XmTextFieldSetCursorPosition = setInt XCALL_XmTextFieldSetCursorPosition; val XmTextFieldSetEditable = setBool XCALL_XmTextFieldSetEditable; val XmTextFieldSetInsertionPosition = setInt XCALL_XmTextFieldSetInsertionPosition; val XmTextFieldSetMaxLength = setInt XCALL_XmTextFieldSetMaxLength; val XmTextFieldSetString = setString XCALL_XmTextFieldSetString; val XmTextFieldShowPosition = setInt XCALL_XmTextFieldShowPosition; fun XmTextFieldXYToPos (w:Widget) (x:int) (y:int) : int = xcall (XCALL_XmTextFieldXYToPos,w,x,y); end; (* local *) (******************************************************************************) (* *) (* Operations on XmList Widgets *) (* *) (******************************************************************************) fun XmListAddItem (w: Widget) (s:string) (pos:int) : unit = xcall (XCALL_XmListAddItem,w,s,pos); fun XmListAddItemUnselected (w: Widget) (s: string) (pos: int) : unit = xcall (XCALL_XmListAddItemUnselected,w,s,pos); fun XmListAddItems (w: Widget) (sl: string list) (pos: int) : unit = xcall (XCALL_XmListAddItems,w,sl,pos); fun XmListDeleteAllItems (w: Widget) : unit = xcall (XCALL_XmListDeleteAllItems,w); fun XmListDeleteItem (w: Widget) (s: string) : unit = xcall (XCALL_XmListDeleteItem,w,s); fun XmListDeleteItems (w: Widget) (sl: string list) : unit = xcall (XCALL_XmListDeleteItems,w,sl); fun XmListDeletePos (w: Widget) (pos: int) : unit = xcall (XCALL_XmListDeletePos,w,pos); fun XmListDeleteItemsPos (w: Widget) (num: int) (pos: int) : unit = xcall (XCALL_XmListDeleteItemsPos,w,num,pos); fun XmListDeselectAllItems (w: Widget) : unit = xcall (XCALL_XmListDeselectAllItems,w); fun XmListDeselectItem (w: Widget) (s: string) : unit = xcall (XCALL_XmListDeselectItem,w,s); fun XmListDeselectPos (w: Widget) (pos: int) : unit = xcall (XCALL_XmListDeselectPos,w,pos); fun XmListGetMatchPos (w: Widget) (s: string) : int list = xcall (XCALL_XmListGetMatchPos,w,s); fun XmListGetSelectedPos (w: Widget) : int list = xcall (XCALL_XmListGetSelectedPos,w); fun XmListItemExists (w: Widget) (s: string) : bool = xcall (XCALL_XmListItemExists,w,s); fun XmListItemPos (w: Widget) (s: string) : int = xcall (XCALL_XmListItemPos,w,s); fun XmListReplaceItems (w: Widget) (oldNewPairs : (string * string) list) : unit = let val oldStrings = map #1 oldNewPairs; val newStrings = map #2 oldNewPairs; in xcall (XCALL_XmListReplaceItems,w,oldStrings,newStrings) end; fun XmListReplaceItemsPos (w: Widget) (sl: string list) (pos: int) : unit = xcall (XCALL_XmListReplaceItemsPos,w,sl,pos); fun XmListSelectItem (w: Widget) (s: string) (notify: bool) : unit = xcall (XCALL_XmListSelectItem,w,s,notify); fun XmListSelectPos (w: Widget) (pos: int) (notify: bool) : unit = xcall (XCALL_XmListSelectPos,w,pos,notify); fun XmListSetAddMode (w: Widget) (on: bool) : unit = xcall (XCALL_XmListSetAddMode,w,on); fun XmListSetBottomItem (w: Widget) (s:string) : unit = xcall (XCALL_XmListSetBottomItem,w,s); fun XmListSetBottomPos (w: Widget) (pos:int) : unit = xcall (XCALL_XmListSetBottomPos,w,pos); fun XmListSetHorizPos (w: Widget) (pos:int) : unit = xcall (XCALL_XmListSetHorizPos,w,pos); fun XmListSetItem (w: Widget) (s:string) : unit = xcall (XCALL_XmListSetItem,w,s); fun XmListSetPos (w: Widget) (pos:int) : unit = xcall (XCALL_XmListSetPos,w,pos); fun XmMenuPosition (w: Widget) (ev: 'a XEvent): unit = case ev of ButtonPress { rootPointer=XPoint{x,y}, ...} => xcall(XCALL_XmMenuPosition, w, x, y) | ButtonClick { rootPointer=XPoint{x,y}, ...} => xcall(XCALL_XmMenuPosition, w, x, y) | _ => raise XWindows("Bad event type in XmMenuPosition") end; (* local *) end; (* struct *) polyml.5.2.1/mlsource/extra/Win/0000755000175000017500000000000011100060552015473 5ustar daviddavidpolyml.5.2.1/mlsource/extra/Win/Examples/0000755000175000017500000000000011100060552017251 5ustar daviddavidpolyml.5.2.1/mlsource/extra/Win/Examples/bitViewer.sml0000644000175000017500000002201510676747352021761 0ustar daviddavid(* Copyright (c) 2001-7 David C.J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* Example bitmap viewer. *) fun bitViewer() = let open Window Message Class Clipboard Menu Bitmap DeviceContext Brush Metafile open Font Color Painting Globals val app = ApplicationInstance() (* Identifiers for the menu items. *) val menuCopy = 1 and menuPaste = 2 local val editMenu = let val editMenu = CreateMenu(); in AppendMenu(editMenu, [], MenuId menuCopy, MFT_STRING "&Copy"); AppendMenu(editMenu, [], MenuId menuPaste, MFT_STRING "&Paste"); editMenu end; in (* Create the main menu and append the sub-menu. *) val menu = CreateMenu(); val _ = AppendMenu(menu, [], MenuHandle editMenu, MFT_STRING "&Edit") end; (* Window procedure for the window. *) fun wndProc(w: HWND, WM_CREATE _, NONE) = let (* Create a sub-window to display a bitmap. *) val static = CreateWindow{class = Static, name = "", style = Static.Style.flags[Static.Style.WS_CHILD, Static.Style.WS_VISIBLE, Static.Style.SS_BITMAP], x = CW_USEDEFAULT, y = CW_USEDEFAULT, height = CW_USEDEFAULT, width = CW_USEDEFAULT, relation = ChildWindow{parent=w, id=99 (* Not used *)}, instance = app, init = ()} in (LRESINT 0, SOME static) (* Return it as the "state". *) end | wndProc(w: HWND, WM_PAINT, state as SOME static) = (* WM_PAINT is sent to the window when at least some of it needs to be redrawn. *) let (* Fill this window with grey. We use this to fill all the area that isn't occupied by the subwindow containing the bitmap. A simpler way of doing this is to define a background colour for the class in which case we don't have to process this message at all. *) val (hdc, ps) = BeginPaint w val grey = RGB{red=128, blue=128, green=128} val _ = SetBkColor(hdc, grey); (* ExtTextOut with the ETO_OPAQUE is a common way of filling an area with a single colour. *) val _ = ExtTextOut(hdc, {x=0, y=0}, [ETO_OPAQUE], SOME(#paint ps), "", []); in EndPaint(w, ps); (LRESINT 0, state) end | wndProc(w: HWND, WM_SIZE {width, height, ...}, state as SOME static) = (* The main window has been resized. Recentre the child window. *) let val subRect = GetClientRect static in MoveWindow{hWnd = static, x = (width - #right subRect) div 2, y = (height - #bottom subRect) div 2, height = #bottom subRect, width = #right subRect, repaint = true}; (LRESINT 0, state) end | wndProc(w: HWND, msg as WM_COMMAND{notifyCode = 0, wId = 1 (* menuCopy*), control}, state as SOME static) = (* WM_COMMAND messages are sent when a menu item is pulled down. wId is the value we set as the ID when we created the menu. *) (* Copy the bitmap to the window as a device-independent bitmap. We could equally just copy the bitmap handle and let the clipboard do the work. *) let val LRESHANDLE (bitMap: HBITMAP) = SendMessage(static, STM_GETIMAGE{imageType=IMAGE_BITMAP}) in if isHNull bitMap then (DefWindowProc(w, msg), state) else ( OpenClipboard(SOME w); let val _ = EmptyClipboard(); (* Become owner. *) val winDC = GetDC static (* The first call returns the header of the bitmap that will be created. We can use all the defaults in it but we need to know the height which is the number of scan lines. *) val dibHdr as {height, ...} = getBitmapInfoHdr(GetDIBits(winDC, bitMap, 0, 0, NONE)) val dib = GetDIBits(winDC, bitMap, 0, height, SOME dibHdr) val _ = ReleaseDC(static, winDC) in SetClipboardData(CH_DIB dib) end (* Make sure the clipboard is closed if anything goes wrong. *) handle exn => (CloseClipboard(); raise exn); CloseClipboard(); (LRESINT 0, state) ) end | wndProc(w: HWND, msg as WM_COMMAND{notifyCode = 0, wId = 2 (* menuPaste*), control}, state as SOME static) = ( case GetPriorityClipboardFormat[CF_DIB, CF_BITMAP, CF_ENHMETAFILE] of (* Some drawing programs paste metafile information rather than bitmaps. *) SOME CF_ENHMETAFILE => ( OpenClipboard(SOME w); let val CH_ENHMETAFILE emh = GetClipboardData CF_ENHMETAFILE; (* Get the bounding frame of this metafile. This gives us the size of the bitmap. *) val hdr as {bounds = { right, left, top, bottom }, ... } = GetEnhMetaFileHeader emh val winDC = GetDC static (* In order to write to a new bitmap we first have to create a memory device context and select a new bitmap into it. *) val memDC = CreateCompatibleDC winDC val emfSize: SIZE = {cx = right - left, cy = bottom - top} val newbm = CreateCompatibleBitmap(winDC, right - left, bottom - top) (* Select the bitmap into the memory DC to draw to it. *) val oldBM = SelectObject(memDC, newbm); (* Play the metafile *) val _ = PlayEnhMetaFile(memDC, emh, {top = 0, left = 0, right = right - left, bottom = bottom - top }) (* Deselect the bitmap by selecting in the original (most likely NULL). *) val _ = SelectObject(memDC, oldBM); val _ = DeleteDC memDC (* Get rid of the device context. *) val _ = ReleaseDC(static, winDC) in setBitmap(newbm, w, static) end (* Make sure the clipboard is closed if anything goes wrong. *) handle exn => (CloseClipboard(); raise exn); CloseClipboard(); (LRESINT 0, state) ) | SOME CF_DIB => ( OpenClipboard(SOME w); let val CH_DIB dib = GetClipboardData CF_DIB; val winDC = GetDC static val { width, height, ...} = getBitmapInfoHdr dib (* Height could be negative for a top-down DIB. *) val newbm = CreateCompatibleBitmap(winDC, width, abs height) val _ = SetDIBits(winDC, newbm, 0, abs height, dib) val _ = ReleaseDC(static, winDC) in setBitmap(newbm, w, static) end (* Make sure the clipboard is closed if anything goes wrong. *) handle exn => (CloseClipboard(); raise exn); CloseClipboard(); (LRESINT 0, state) ) (* The clipboard synthesises DIBs from bitmaps so this code will never be executed. It's included for information only. *) | SOME CF_BITMAP => ( OpenClipboard(SOME w); let val CH_BITMAP hb = GetClipboardData CF_BITMAP; (* Get the size of the bitmap *) val GO_Bitmap (bmp as {widthBytes, height, ...}) = GetObject hb (* Create a copy. *) val newb = CreateBitmapIndirect bmp val bytes = widthBytes*height val v = GetBitmapBits(hb, bytes) val _ = SetBitmapBits(newb, v); in setBitmap(newb, w, static) end (* Make sure the clipboard is closed if anything goes wrong. *) handle exn => (CloseClipboard(); raise exn); CloseClipboard(); (LRESINT 0, state) ) | _ => (DefWindowProc(w, msg), state) (* Nothing we can use. *) ) | wndProc(w: HWND, msg as WM_NCDESTROY, state) = (* When the window is closed we send a QUIT message which exits from the application loop. *) (PostQuitMessage 0; (DefWindowProc(w, msg), state)) | wndProc(w: HWND, msg: Message, state) = (DefWindowProc(w, msg), state) (* Anything else. *) and setBitmap(newb: HBITMAP, main: HWND, static: HWND) = let (* Set this copy as the new image and get back the old one. *) val LRESHANDLE oldBM = SendMessage(static, STM_SETIMAGE{image=newb, imageType=IMAGE_BITMAP}) (* Get the size of the main window and the subwindow. *) val mainRect = GetClientRect main and subRect = GetClientRect static in (* If there was previously a bitmap we have to delete it. *) if isHNull oldBM then () else DeleteObject oldBM; (* Centre the window. *) MoveWindow{hWnd = static, x = (#right mainRect - #right subRect) div 2, y = (#bottom mainRect - #bottom subRect) div 2, height = #bottom subRect, width = #right subRect, repaint = true} end (* Register a window class. *) val at = Class.RegisterClassEx{style = Class.Style.flags[], wndProc = wndProc, hInstance = app, hIcon = NONE, hCursor = NONE, hbrBackGround = NONE, menuName = NONE, className = "bitViewerClass", hIconSm = NONE}; val w = CreateWindow{class = at, name = "bitViewer", style = Window.Style.WS_OVERLAPPEDWINDOW, x = CW_USEDEFAULT, y = CW_USEDEFAULT, height = CW_USEDEFAULT, width = CW_USEDEFAULT, relation = PopupWindow menu, instance = app, init = NONE}; in ShowWindow(w, SW_SHOW); SetForegroundWindow w; RunApplication(); UnregisterClass("bitViewerClass", app) end; polyml.5.2.1/mlsource/extra/Win/Examples/dialTest.sml0000644000175000017500000000776410676747352021610 0ustar daviddavid(* Copyright (c) 2001-7 David C.J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* Test routine for dialogue. Tests various messages. *) fun dlgProc (h, Message.WM_INITDIALOG _, ()) = (Message.LRESINT 1, ()) | dlgProc (h, Message.WM_COMMAND{notifyCode = 0, wId, ...}, ()) = (if wId = MessageBox.IDOK orelse wId = MessageBox.IDCANCEL then (Dialog.EndDialog(h, wId); Message.PostQuitMessage 0) else (); (Message.LRESINT 1, ())) | dlgProc msg = ((*PolyML.print msg;*)(Message.LRESINT 0, ())); val dial = ref Base.hwndNull; local open Dialog Window.Style in val template = {x = 0, y = 0, cx = 215, cy = 135, font = SOME (8, "MS Sans Serif"), menu = NONE, class = NONE, style = flags[WS_POPUP, WS_CAPTION, WS_SYSMENU], title = "Dialogue", extendedStyle = 0, items = [{x = 158, y = 7, cx = 50, cy = 14, id = 1, creationData = NONE, extendedStyle = 0, class = DLG_BUTTON(flags[WS_CHILD, WS_VISIBLE, WS_TABSTOP]), title = DLG_TITLESTRING "OK"}, {x = 158, y = 24, cx = 50, cy = 14, id = 2,creationData = NONE, extendedStyle = 0, class = DLG_BUTTON(flags[WS_CHILD, WS_VISIBLE, WS_TABSTOP]), title = DLG_TITLESTRING "Cancel"}, {x = 45, y = 67, cx = 48, cy = 61, id = 1003, title = DLG_TITLESTRING "", creationData = NONE, extendedStyle = 0, class = DLG_COMBOBOX(flags[WS_CHILD, WS_VISIBLE, WS_VSCROLL, WS_TABSTOP])}, {x = 23, y = 26, cx = 19, cy = 8, id = 65535, creationData = NONE, extendedStyle = 0, class = DLG_STATIC(flags[WS_CHILD, WS_VISIBLE, WS_GROUP]), title = DLG_TITLESTRING "Static"}, {x = 64, y = 24, cx = 40, cy = 14, id = 1000, creationData = NONE, extendedStyle = 0, class = DLG_EDIT(flags[WS_CHILD, WS_VISIBLE, WS_BORDER, WS_TABSTOP]), title = DLG_TITLESTRING ""}, {x = 14, y = 47, cx = 103, cy = 11, id = 1001, creationData = NONE, extendedStyle = 0, class = DLG_SCROLLBAR(flags[WS_CHILD, WS_VISIBLE]), title = DLG_TITLESTRING ""}, {x = 136, y = 46, cx = 58, cy = 72, id = 1002, creationData = NONE, extendedStyle = 0, class = DLG_LISTBOX (flags[WS_CHILD, WS_VISIBLE, WS_BORDER, WS_VSCROLL, WS_TABSTOP]), title = DLG_TITLESTRING ""}]} fun makedial() = CreateDialogIndirect(Globals.ApplicationInstance(), template, Globals.MainWindow(), dlgProc, ()); end; (* val hi = Resource.LoadLibrary "C:\\Source Files\\DialogueDLL\\Debug\\DialogueDLL.dll"; fun makedial() = Dialog.CreateDialog(hi, Resource.IdAsString "MYDIALOGUE", Globals.MainWindow(), dlgProc, ()); *) (* The dialogue has to be created by the thread that will handle its messages. *) fun runDialogue() = ( dial := makedial(); Window.ShowWindow(!dial, Window.SW_SHOW); Window.SetForegroundWindow (!dial); Message.RunApplication(); () ); Thread.Thread.fork(runDialogue, []); val combo = Dialog.GetDlgItem(!dial, 1003); val scroll = Dialog.GetDlgItem(!dial, 1001); val listbox = Dialog.GetDlgItem(!dial, 1002); val info = ref {minPos = 10, maxPos = 20, pageSize = 4, pos = 15, trackPos = 0}; Message.SendMessage(scroll, Message.SBM_SETSCROLLINFO{info= !info, options=Scrollbar.SIF_ALL}); Message.SendMessage(scroll, Message.SBM_GETSCROLLINFO{info=info, options=Scrollbar.SIF_ALL}); !info; Message.SendMessage(combo, Message.CB_DIR{attrs = [], fileSpec ="C:\\*"}); Message.SendMessage(combo, Message.CB_DIR{attrs = [], fileSpec ="C:\\*"}); polyml.5.2.1/mlsource/extra/Win/Examples/mlEdit.sml0000644000175000017500000005314510676747352021247 0ustar daviddavid(* Copyright (c) 2001-7 David C.J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* Example text editor. *) fun mlEdit () = let open Window Message Menu Edit Class Dialog CommonDialog MessageBox Caret open DeviceContext Font Printing Transform Painting Color open Keyboard (* Define values to be delivered when the menu items are selected. The Id is delivered as part of a WM_COMMAND message. *) val menuOpen = 1 and menuQuit = 2 and menuSave = 3 and menuSaveAs = 4 and menuCut = 5 and menuCopy = 6 and menuPaste = 7 and menuFind = 8 and menuPageSetup = 9 and menuPrint = 10 and menuAbout = 11 val app = Globals.ApplicationInstance() (* Borrow the Poly icon from the application program. It happens to be icon id 102. If this doesn't work return NULL. *) val polyIcon = Icon.LoadIcon(app, Resource.MAKEINTRESOURCE 102) handle _ => Globals.hNull; local (* Create sub-menus. *) val fileMenu = let val fileMenu = CreateMenu(); in AppendMenu(fileMenu, [], MenuId menuOpen, MFT_STRING "&Open"); AppendMenu(fileMenu, [], MenuId menuSave, MFT_STRING "&Save"); AppendMenu(fileMenu, [], MenuId menuSaveAs, MFT_STRING "Save &As..."); AppendMenu(fileMenu, [], MenuId 0, MFT_SEPARATOR); AppendMenu(fileMenu, [], MenuId menuPageSetup, MFT_STRING "Page Set&up..."); AppendMenu(fileMenu, [], MenuId menuPrint, MFT_STRING "P&rint..."); AppendMenu(fileMenu, [], MenuId 0, MFT_SEPARATOR); AppendMenu(fileMenu, [], MenuId menuQuit, MFT_STRING "&Quit"); fileMenu end; val editMenu = let val editMenu = CreateMenu(); in AppendMenu(editMenu, [], MenuId menuCut, MFT_STRING "Cu&t"); AppendMenu(editMenu, [], MenuId menuCopy, MFT_STRING "&Copy"); AppendMenu(editMenu, [], MenuId menuPaste, MFT_STRING "&Paste"); AppendMenu(editMenu, [], MenuId menuFind, MFT_STRING "&Find"); editMenu end; val helpMenu = let val helpMenu = CreateMenu() in AppendMenu(helpMenu, [], MenuId menuAbout, MFT_STRING "&About mlEdit..."); helpMenu end in (* Create the main menu and append the sub-menus. *) val menu = CreateMenu(); val _ = AppendMenu(menu, [], MenuHandle fileMenu, MFT_STRING "&File"); val _ = AppendMenu(menu, [], MenuHandle editMenu, MFT_STRING "&Edit") val _ = AppendMenu(menu, [], MenuHandle helpMenu, MFT_STRING "&Help") end; (* The "state" of the editor. *) type state = { edit: HWND, (* Handle to the edit window. *) devMode: DEVMODE option, devNames: DEVNAMES option, (* Printer settings *) fileName: string } fun wndProc(hw: HWND, msg: Message, NONE): LRESULT * state option = ( case msg of WM_CREATE _ => (* Create an edit window and return it as the state. *) let val edit = CreateWindow{class = Class.Edit, name = "", (* The style does not include horizontal scrolling. That causes us to use word-wrapping. *) style = Edit.Style.flags[Edit.Style.WS_CHILD, Edit.Style.WS_VISIBLE, Edit.Style.WS_VSCROLL, (*Edit.Style.WS_HSCROLL, *)Edit.Style.ES_LEFT, Edit.Style.ES_MULTILINE, Edit.Style.ES_AUTOVSCROLL(*, Edit.Style.ES_AUTOHSCROLL*)], x = 0, y = 0, height = 0, width = 0, relation = ChildWindow{parent=hw, id=99}, instance = Globals.ApplicationInstance(), init = ()} (* Create a 10 point Courier font. *) val hDC = GetDC edit; val height = ~10 * GetDeviceCaps(hDC, LOGPIXELSY) div 72; val _ = ReleaseDC(edit, hDC); val hFont = CreateFont{height=height, width=0, escapement=0, orientation=0, weight=FW_DONTCARE, italic=false, underline=false, strikeOut=false, charSet=ANSI_CHARSET, outputPrecision=OUT_DEFAULT_PRECIS, clipPrecision=CLIP_DEFAULT_PRECIS, quality=DEFAULT_QUALITY, pitch=FIXED_PITCH, family=FF_MODERN, faceName="Courier"} in SendMessage(edit, WM_SETFONT{font=hFont, redrawflag=false}); (LRESINT 0, SOME{edit=edit, devMode=NONE, devNames = NONE, fileName=""}) end | _ => (DefWindowProc(hw, msg), NONE) ) | wndProc(hw: HWND, msg: Message, state: state option as SOME{edit, devMode, devNames, fileName, ...}) = case msg of WM_SETFOCUS _ => (* If we get a focus request we set the focus to the edit window. *) (SetFocus(SOME edit); (DefWindowProc(hw, msg), state)) | WM_SIZE{height, width, ...} => (* If we get a size change we set the size of the edit window. *) (MoveWindow{hWnd=edit, x=0, y=0, height=height, width=width, repaint=true}; (DefWindowProc(hw, msg), state)) | WM_NCDESTROY => (* When the window is closed we send a QUIT message which exits from the application loop. *) (PostQuitMessage 0; (DefWindowProc(hw, msg), state)) | WM_CLOSE => (* User has pressed the Close box. If it's ok to close we could call DestroyWindow ourselves. Just as an example we return NONE which passes it to the default window procedure and does it for us. *) (if checkForSave(hw, edit, fileName) then DefWindowProc(hw, msg) else LRESINT 0, state) | WM_COMMAND{notifyCode = 0, wId, control} => (* Menu selections arrive here. *) if wId = menuQuit then ( if checkForSave(hw, edit, fileName) then DestroyWindow hw else (); (LRESINT 0, state) ) else if wId = menuOpen then let val on = { owner = SOME hw, template = TemplateDefault, filter = [("Text Files (*.txt)", "*.txt"), ("ML Files (*.sml)", "*.sml"), ("All Files (*.*)", "*.*")], customFilter = NONE, filterIndex = 1, file = "", maxFile = 1000, fileTitle = "", initialDir = NONE, title = NONE, flags = OpenFileFlags.flags[OpenFileFlags.OFN_HIDEREADONLY], defExt = NONE } in case GetOpenFileName on of NONE => (LRESINT 0, state) | SOME {file, ...} => (* If it's been modified we need to ask before overwriting. *) if checkForSave(hw, edit, fileName) then (let val f = TextIO.openIn file (* Text input will convert CRNL to \n. We need to reverse the process. *) fun nlToCrnl s = String.translate(fn #"\n" => "\r\n" | c => String.str c) s in (* Should we save any existing file? *) SetWindowText(edit, nlToCrnl(TextIO.inputAll f)); TextIO.closeIn f; SendMessage(edit, EM_SETMODIFY{modified=false}); (LRESINT 0, SOME{edit=edit, devMode=devMode, devNames=devNames, fileName=file}) end) handle exn => (MessageBox(SOME hw, concat["Unable to open - ", file, "\n"(*, exnMessage exn*)], "Open failure", MessageBoxStyle.MB_OK); (LRESINT 0, state)) else (LRESINT 0, state) end else if wId = menuSave andalso fileName <> "" then (* Save to the original file name if there is one. *) ( saveDocument(hw, fileName, edit); (LRESINT 0, state) ) else if wId = menuSaveAs orelse wId = menuSave (* andalso fileName = "" *) then ( case saveAsDocument(hw, edit) of NONE => (LRESINT 0, state) | SOME newName => (LRESINT 0, (* Use the selected file name. *) SOME{edit=edit, devMode=devMode, devNames=devNames, fileName=newName}) ) else if wId = menuFind then let open FindReplaceFlags (* Create a "Find" dialogue. *) val find = FindText{owner = hw, template = TemplateDefault, flags=flags[FR_DOWN, FR_HIDEWHOLEWORD], findWhat="", replaceWith="", bufferSize = 100} in ShowWindow(find, SW_SHOW); (LRESINT 0, state) end (* Cut, Copy and Paste are all handled by the Edit window. *) else if wId = menuCut then (SendMessage(edit, WM_CUT); (LRESINT 0, state)) else if wId = menuCopy then (SendMessage(edit, WM_COPY); (LRESINT 0, state)) else if wId = menuPaste then (SendMessage(edit, WM_PASTE); (LRESINT 0, state)) else if wId = menuPageSetup then ( (* Put up the dialogue and change the settings if necessary. *) case PageSetupDlg {owner=SOME hw, devMode=devMode, devNames=devNames, flags=PageSetupFlags.flags[], paperSize={x=0,y=0}, minMargin={top=0,bottom=0,left=0,right=0}, margin={top=0,bottom=0,left=0,right=0}} of NONE => (LRESINT 0, state) | SOME {devMode, devNames, ...} => (LRESINT 0, SOME{edit=edit, devMode=devMode, devNames=devNames, fileName=fileName}) ) else if wId = menuPrint (* "Print" menu item. *) then let (* Put up the dialogue box to get the settings. *) val printSettings = PrintDlg {owner=SOME hw, devMode=devMode, devNames=devNames, context=NONE, flags=PrintDlgFlags.flags[PrintDlgFlags.PD_RETURNDC], fromPage=1, toPage= ~1, minPage=1, maxPage= ~1, copies=1}; in case printSettings of SOME {devMode, devNames, context = SOME hdc, flags, fromPage, toPage, ...} => (let (* If the "Selection" button has been pressed we only print the selection. *) val printWhat = if PrintDlgFlags.anySet(flags, PrintDlgFlags.PD_SELECTION) then let val from = ref 0 and to = ref 0 val _ = SendMessage(edit, EM_GETSEL{startPos = from, endPos = to}) val text = GetWindowText edit in if !from < 0 orelse !from > size text orelse !to < 0 orelse !from > size text then "" else String.substring(text, !from, !to - !from) end else (* "All" button pressed or "Pages" pressed. *) GetWindowText edit; val textLength = size printWhat (* Tell the spooler to start the document. *) val jobID = StartDoc(hdc, {docName=fileName, output=NONE, dType=NONE}) (* Find out how big a character is. From this we can work out how many characters fit on a line and how many lines on a page. Since we're using a fixed width font this is fairly easy. *) val _ = SetMapMode(hdc, MM_TEXT) val white = RGB{red=255, blue=255, green=255} val black = RGB{red=0, blue=0, green = 0} val pageWidth = GetDeviceCaps(hdc, HORZRES) and pageHeight = GetDeviceCaps(hdc, VERTRES) (* Create the same font as we're using on the screen. Since this is a fixed width font it makes calculating the number of characters fairly easy. *) val charHeight = ~10 * GetDeviceCaps(hdc, LOGPIXELSY) div 72; val hFont = CreateFont{height=charHeight, width=0, escapement=0, orientation=0, weight=FW_DONTCARE, italic=false, underline=false, strikeOut=false, charSet=ANSI_CHARSET, outputPrecision=OUT_DEFAULT_PRECIS, clipPrecision=CLIP_DEFAULT_PRECIS, quality=DEFAULT_QUALITY, pitch=FIXED_PITCH, family=FF_MODERN, faceName="Courier"} val oldFont = SelectObject(hdc, hFont); (* Use this font. *) val textMetric = GetTextMetrics hdc; fun printPage pno index = let (* If we are printing a range of pages we need to check whether we are in the range. *) val printThisPage = if PrintDlgFlags.anySet(flags, PrintDlgFlags.PD_PAGENUMS) then pno >= fromPage andalso (pno <= toPage orelse toPage < 0) else true val pageRect = {top=0, left=0, bottom=pageHeight, right=pageWidth} (* Calculate the number of lines and columns. *) val nLines = pageHeight div #height textMetric; val nCols = pageWidth div #maxCharWidth textMetric (* Output the lines to fill the page. *) fun outputLines lineNo p = if lineNo >= nLines then p (* Return last pointer. *) else let (* Find the point to split the line. We stop at the end of the text, a line break, the last word break on the line or the maximum number of characters. *) fun findEnd lastBreak i = if i >= textLength then (textLength, textLength) else if i-p > nCols then ( case lastBreak of NONE => (* No breaks on the line - break just before here. *) (i-1, i-1) | SOME b => b (* Break at the last break. *) ) else if i < textLength - 1 andalso String.sub(printWhat, i) = #"\r" andalso String.sub(printWhat, i+1) = #"\n" then (* End of line - stop here. *) (i, i+2) else if Char.isSpace(String.sub(printWhat, i)) then (* Remember this. *) findEnd (SOME(i, i+1)) (i+1) (* Actually tabs need to be handled more carefully. *) else findEnd lastBreak (i+1) val (endLine, nextLine) = findEnd NONE p val thisLine = if p >= textLength then "" else String.substring(printWhat, p, endLine-p) in if printThisPage then ( TabbedTextOut(hdc, {x=0, y= lineNo * #height textMetric}, thisLine, [], 0); () ) else (); outputLines (lineNo+1) nextLine end val nextPage = if printThisPage then let val _ = StartPage hdc; (* Fill the page with white. *) val _ = SetBkColor(hdc, white); val _ = SetTextColor(hdc, black); val _ = ExtTextOut(hdc, {x=0, y=0}, [ETO_OPAQUE], SOME pageRect, "", []); (* Print the text. *) val next = outputLines 0 index in EndPage hdc; next end else (* Format the page but don't print it. *) outputLines 0 index in if nextPage >= size printWhat then () else printPage (pno+1) nextPage end val _: unit = printPage 1 0 in EndDoc hdc; (* Restore the original font and delete the new one. *) SelectObject(hdc, oldFont); DeleteObject(hFont); DeleteDC hdc; (* Now delete the device context. *) (LRESINT 0, SOME{edit=edit, devMode=devMode, devNames=devNames, fileName=fileName}) end (* If any of the functions failed simply delete the device context and return the original state. *) handle (exn as OS.SysErr _) => ( print (exnName exn); AbortDoc hdc; DeleteDC hdc; (LRESINT 0, state))) | _ => (LRESINT 0, state) end else if wId = menuAbout then (aboutmlEdit hw; (LRESINT 0, state)) else (DefWindowProc(hw, msg), state) | FINDMSGSTRING{flags, findWhat, ...} => if FindReplaceFlags.anySet(flags, FindReplaceFlags.FR_DIALOGTERM) then (* The "find" box is going away. *) ( SetFocus(SOME edit); (LRESINT 0, state) ) else if FindReplaceFlags.anySet(flags, FindReplaceFlags.FR_FINDNEXT) then (* The Find Next button has been pressed. *) let (* Get the whole of the text - not very efficient. *) val text = GetWindowText edit val startPos = ref 0 and endPos = ref 0 (* Get the starting position. *) val _ = SendMessage(edit, EM_GETSEL{startPos=startPos, endPos=endPos}) val isDown = FindReplaceFlags.anySet(flags, FindReplaceFlags.FR_DOWN) (* Get the starting position for the search. *) val startPos = if isDown then !endPos else !startPos - 1 val findLen = size findWhat (* Get the options. *) local val toLower = String.map Char.toLower in val doMatch: string * string -> bool = if FindReplaceFlags.anySet(flags, FindReplaceFlags.FR_MATCHCASE) then op = else fn (s1, s2) => toLower s1 = toLower s2 end fun doFind p = let val isMatch = p >= 0 andalso size text - p >= size findWhat andalso doMatch(String.substring(text, p, findLen), findWhat) in if isMatch then p else if isDown then if p = size text then p (* Finish *) else doFind(p+1) else (* Find up *) if p = 0 then ~1 (* Finish *) else doFind(p-1) end val foundAt = doFind startPos in if foundAt >= 0 andalso foundAt + findLen < size text then ( SendMessage(edit, EM_SETSEL{startPos=foundAt, endPos=foundAt + findLen}); SendMessage(edit, EM_SCROLLCARET); () ) else MessageBeep(MessageBoxStyle.fromWord 0wxFFFFFFFF); (LRESINT 0, state) end else (DefWindowProc(hw, msg), state) | _ => (DefWindowProc(hw, msg), state) (* If this document has been modified we want to ask before quitting or opening a new document. *) and checkForSave(hw, edit, fileName) = case SendMessage(edit, EM_GETMODIFY) of LRESINT 0 => true (* Unmodified - continue. *) | _ => let val res = MessageBox(SOME hw, "Save document?", "Confirm", MessageBoxStyle.MB_YESNOCANCEL) in if res = IDYES then if fileName = "" then saveAsDocument(hw, edit) <> NONE else saveDocument(hw, fileName, edit) else if res = IDNO then true (* Continue anyway. *) else false (* Cancel - don't exit or open. *) end and saveDocument(hw, fileName, edit) = (* Write the document to the given file name. *) let (* Write the file as binary. That way we don't need to convert CRNL to NL before writing. *) val f = BinIO.openOut fileName val s = GetWindowText edit in BinIO.output(f, Byte.stringToBytes s); BinIO.closeOut f; (* Document is now unmodified. *) SendMessage(edit, EM_SETMODIFY{modified=false}); true (* Succeeded. *) end handle exn => (MessageBox(SOME hw, concat["Unable to save to - ", fileName, "\n"(*, exnMessage exn*)], "Open failure", MessageBoxStyle.MB_OK); false) and saveAsDocument(hw, edit) = (* Ask for the file name before trying to save. *) let val on = { owner = SOME hw, template = TemplateDefault, filter = [("Text Files (*.txt)", "*.txt"), ("ML Files (*.sml)", "*.sml"), ("All Files (*.*)", "*.*")], customFilter = NONE, filterIndex = 1, file = "", maxFile = 1000, fileTitle = "", initialDir = NONE, title = NONE, flags = OpenFileFlags.flags[], defExt = NONE } in case GetSaveFileName on of NONE => NONE | SOME {file, filterIndex, fileTitle, ...} => let (* If the user typed a file name without an extension use the extension from the appropriate filter. *) val suffix = case filterIndex of 1 => ".txt" | 2 => ".sml" | _ => "" val fileName = if Char.contains fileTitle #"." then file else file ^ suffix in if saveDocument(hw, fileName, edit) then SOME file (* Return the selected name. *) else NONE end end and aboutmlEdit hw = (* Called when the user selects "About..." from the help menu. *) let (* Dialogue template containing three items: an OK button, a static picture and a piece of text. *) val pictureId = 1000 (* Could use any number here. *) open Static.Style val template = {x = 0, y = 0, cx = 210, cy = 94, font = SOME (8, "MS Sans Serif"), menu = NONE, class = NONE,title = "About mlEdit", extendedStyle = 0, style = flags[WS_POPUP, WS_CAPTION], items = [{x = 73, y = 62, cx = 50, cy = 14, id = 1, class = DLG_BUTTON (flags[WS_CHILD, WS_VISIBLE, WS_TABSTOP]), title = DLG_TITLESTRING "OK", creationData = NONE, extendedStyle = 0}, {x = 7, y = 7, cx = 32, cy = 32, id = pictureId, class = DLG_STATIC (flags[WS_CHILD, WS_VISIBLE, SS_ICON]), title = DLG_TITLESTRING "", creationData = NONE, extendedStyle = 0}, {x = 15, y = 39, cx = 180, cy = 21, id = 65535, class = DLG_STATIC (flags[WS_CHILD, WS_VISIBLE, WS_GROUP]), title = DLG_TITLESTRING "mlEdit - An example of Windows programming in Poly/ML\ \\nCopyright David C.J. Matthews 2001-7", creationData = NONE, extendedStyle = 0}] } (* Dialogue procedure. *) fun dlgProc(dial, WM_INITDIALOG _, ()) = ( (* Send a message to the picture control to set it to this icon. *) SendMessage(GetDlgItem(dial, pictureId), STM_SETICON{icon=polyIcon}); (LRESINT 1, ()) ) | dlgProc(dial, WM_COMMAND{notifyCode = 0, wId=1 (* OK button *), ...}, ()) = (* When the OK button is pressed we end the dialogue. *) (EndDialog(dial, 1); (LRESINT 1, ()) ) | dlgProc _ = (LRESINT 0, ()) in DialogBoxIndirect(app, template, hw, dlgProc, ()); () end val className = "mlEditWindowClass" (* Register a class for the top-level window. Use the Poly icon from the application. *) val myWindowClass = RegisterClassEx{style = Class.Style.flags[], wndProc = wndProc, hInstance = app, hIcon = SOME polyIcon, hCursor = NONE, hbrBackGround = NONE, menuName = NONE, className = className, hIconSm = NONE}; val w = CreateWindow{class = myWindowClass, name = "mlEdit", style = Window.Style.WS_OVERLAPPEDWINDOW, x = CW_USEDEFAULT, y = CW_USEDEFAULT, height = CW_USEDEFAULT, width = CW_USEDEFAULT, relation = PopupWindow menu, instance = app, init = NONE}; in ShowWindow(w, SW_SHOW); SetForegroundWindow w; RunApplication(); (* Must unregister the class before returning otherwise RegisterClass will fail if we call mlEdit again. *) UnregisterClass(className, app) end; polyml.5.2.1/mlsource/extra/Win/Base.sml0000644000175000017500000010045610676745440017117 0ustar daviddavid(* Copyright (c) 2001 David C.J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* This contains various types and other values which are needed in various modules. All the exported types are contained in other structures. *) structure Base = struct local open CInterface in fun absConversion {abs,rep} C = let val (fromC,toC,Ctype) = breakConversion C in mkConversion (abs o fromC) (toC o rep) (Ctype) end (* In many cases we can pass a set of options as a bit set. *) fun bitsetConversion {abs, rep} = let val (fromC, toC, Ctype) = breakConversion INT val fromList = List.foldl (fn(i, n) => IntInf.orb(rep i, n)) 0 fun toList n = [abs n] (* This is a bit of a mess. *) in mkConversion (toList o fromCuint) (toCuint o fromList) Cuint end (* Whenever we call a foreign function we remember the value of GetLastError. We have to do that because we may have changed to a different ML process in the meantime and made another system call. *) fun GetLastError(): OS.syserror = RunCall.run_call2 RuntimeCalls.POLY_SYS_os_specific (1100, ()) (* Many system calls return bool. If the result is false we raise an exception. *) fun checkResult name true = () | checkResult name false = raise OS.SysErr(name, SOME(GetLastError())) (* SUCCESSSTATE returns a conversion which checks the result is true. It cannot be used for an argument, only a result. *) local val (fromCbool, _, bool) = breakConversion BOOL in fun SUCCESSSTATE name = mkConversion (checkResult name o fromCbool) (fn () => raise OS.SysErr("SUCCESSSTATE", NONE)) bool end type POINT = { x: int, y: int } local fun breakPoint ({x,y}: POINT) = (x,y) fun mkPoint (x,y): POINT = {x=x, y=y} in val POINT = absConversion {abs=mkPoint, rep=breakPoint} (STRUCT2 (LONG,LONG)) end type RECT = { left: int, top: int, right: int, bottom: int } local fun breakRect ({left,top,right,bottom}: RECT) = (left,top,right,bottom) fun mkRect (left,top,right,bottom): RECT = {left=left,top=top,right=right,bottom=bottom} in val RECT = absConversion {abs=mkRect, rep=breakRect} (STRUCT4 (LONG,LONG,LONG,LONG)) end type SIZE = { cx: int, cy: int } local fun breakSize ({cx,cy}: SIZE) = (cx,cy) fun mkSize (cx,cy): SIZE = {cx=cx, cy=cy} in val SIZE = absConversion {abs=mkSize, rep=breakSize} (STRUCT2 (LONG,LONG)) end (* Handles are generally opaque values. *) abstype 'a HANDLE = Hand of int with val hNull = Hand 0 fun isHNull(Hand 0) = true | isHNull _ = false (* We sometimes need the next two functions internally. They're needed externally unless we change the result type of SendMessage to allow us to return a handle for certain messages. *) val handleOfInt = Hand fun intOfHandle(Hand n) = n end (* We just need these as placeholders. We never create values of these types. They are used simply as a way of creating different handle types. *) abstype GdiObj = GdiObj and Instance = Instance and Drop = Drop and DeviceContext = DeviceContext and Menu = Menu and Window = Window with end (* HINSTANCE is used as an instance of a module. *) type HINSTANCE = Instance HANDLE and HDROP = Drop HANDLE and HGDIOBJ = GdiObj HANDLE and HDC = DeviceContext HANDLE and HMENU = Menu HANDLE and HWND = Window HANDLE local (* We need to use INT here rather than UINT to maintain compatibility with ApplicationInstance. *) fun HANDLE() = absConversion {abs=handleOfInt, rep=intOfHandle} INT fun hoptOfInt 0 = NONE | hoptOfInt i = SOME(handleOfInt i) fun HANDLEOPT() = absConversion {abs=hoptOfInt, rep=fn v => intOfHandle(getOpt(v, hNull)) } INT in val HGDIOBJ: HGDIOBJ Conversion = HANDLE() and HDROP: HDROP Conversion = HANDLE() and HMENU: HMENU Conversion = HANDLE() and HINSTANCE: HINSTANCE Conversion = HANDLE() and HDC: HDC Conversion = HANDLE() and HWND: HWND Conversion = HANDLE() val HMENUOPT: HMENU option Conversion = HANDLEOPT() and HGDIOBJOPT: HGDIOBJ option Conversion = HANDLEOPT() and HWNDOPT: HWND option Conversion = HANDLEOPT() end (* Temporary declarations. *) val hgdiObjNull:HGDIOBJ = hNull and isHgdiObjNull: HGDIOBJ -> bool = isHNull and hgdiAsInt: HGDIOBJ -> int = intOfHandle and intAsHgdi: int -> HGDIOBJ = handleOfInt and hdcNull: HDC = hNull and isHdcNull: HDC -> bool = isHNull and hmenuNull: HMENU = hNull and isHmenuNull: HMENU -> bool = isHNull and hinstanceNull: HINSTANCE = hNull and isHinstanceNull: HINSTANCE -> bool = isHNull and hwndNull: HWND = hNull (* All these are various kinds of HGDIOBJ. It's too complicated to try to use different types for them. *) type HPALETTE = HGDIOBJ and HFONT = HGDIOBJ and HPEN = HGDIOBJ and HBITMAP = HGDIOBJ and HRGN = HGDIOBJ and HBRUSH = HGDIOBJ and HENHMETAFILE = HGDIOBJ and HMETAFILE = HGDIOBJ val HPALETTE: HPALETTE Conversion = HGDIOBJ and HFONT: HFONT Conversion = HGDIOBJ and HPEN: HPEN Conversion = HGDIOBJ and HBITMAP: HBITMAP Conversion = HGDIOBJ and HRGN: HRGN Conversion = HGDIOBJ and HBRUSH: HBRUSH Conversion = HGDIOBJ and HENHMETAFILE: HENHMETAFILE Conversion = HGDIOBJ and HMETAFILE: HMETAFILE Conversion = HGDIOBJ (* I'm not so happy about treating these as HGDIOBJ but it makes the types of messages such as BM_SETIMAGE simpler. *) type HICON = HGDIOBJ and HCURSOR = HGDIOBJ val HICON = HGDIOBJ and HCURSOR = HGDIOBJ (* The easiest way to deal with datatypes is often by way of a table. *) fun tableLookup (table: (''a * int) list, default) = let fun toInt [] x = (case default of NONE => raise Fail "tableLookup: not found" | SOME (_, d) => d x) | toInt ((y, i) :: tl) x = if x = y then i else toInt tl x fun fromInt [] x = (case default of NONE => raise Fail ("tableLookup: not found" ^ Int.toString x) | SOME (d, _) => d x) | fromInt ((y, i) :: tl) x = if x = i then y else fromInt tl x in (toInt table, fromInt table) end fun tableConversion (table: (''a * int) list, default): ''a Conversion = let val (toInt, fromInt) = tableLookup(table, default) in absConversion {abs = fromInt, rep = toInt} INT end (* In other cases we have sets of options. We represent them by a list. The order of the elements in the table is significant if we are to be able to handle multiple bits. Patterns with more than one bit set MUST be placed later than those with a subset of those bits. *) fun tableSetLookup (table: (''a * int) list, default) = let (* Conversion to integer - just fold the values. *) fun toInt' [] x = (case default of NONE => raise Fail "tableLookup: not found" | SOME (_, d) => d x) | toInt' ((y, i) :: tl) x = if x = y then i else toInt' tl x val toInt = List.foldl (fn (a, b) => IntInf.orb(toInt' table a, b)) 0 (* It would speed up the searches if we ordered the list so that multiple bit entries preceded those with fewer bits but it's much easier to lay out the tables if we do it this way. *) fun fromInt _ _ 0 = [] (* Zero is an empty list. *) | fromInt [] NONE x = (* Not found *) (case default of NONE => raise Fail ("tableLookup: not found" ^ Int.toString x) | SOME (d, _) => [d x]) | fromInt [] (SOME(res, bits)) x = (* Found something - remove it from the set. *) (res :: fromInt table NONE (IntInf.andb(x, IntInf.notb bits))) | fromInt ((res, bits)::tl) sofar x = if bits <> 0 andalso IntInf.andb(x, bits) = bits then (* Matches *) fromInt tl (SOME(res, bits)) x else (* Doesn't match *) fromInt tl sofar x in (toInt, fromInt table NONE) end fun tableSetConversion (table: (''a * int) list, default): ''a list Conversion = let val (toInt, fromInt) = tableSetLookup(table, default) in absConversion {abs = fromInt, rep = toInt} INT end structure FindReplaceFlags:> sig include BIT_FLAGS val FR_DIALOGTERM : flags val FR_DOWN : flags val FR_FINDNEXT : flags val FR_HIDEMATCHCASE : flags val FR_HIDEUPDOWN : flags val FR_HIDEWHOLEWORD : flags val FR_MATCHCASE : flags val FR_NOMATCHCASE : flags val FR_NOUPDOWN : flags val FR_NOWHOLEWORD : flags val FR_REPLACE : flags val FR_REPLACEALL : flags val FR_SHOWHELP : flags val FR_WHOLEWORD : flags end = struct type flags = SysWord.word fun toWord f = f fun fromWord f = f val flags = List.foldl (fn (a, b) => SysWord.orb(a,b)) 0w0 fun allSet (fl1, fl2) = SysWord.andb(fl1, fl2) = fl1 fun anySet (fl1, fl2) = SysWord.andb(fl1, fl2) <> 0w0 fun clear (fl1, fl2) = SysWord.andb(SysWord.notb fl1, fl2) val FR_DOWN = 0wx00000001 val FR_WHOLEWORD = 0wx00000002 val FR_MATCHCASE = 0wx00000004 val FR_FINDNEXT = 0wx00000008 val FR_REPLACE = 0wx00000010 val FR_REPLACEALL = 0wx00000020 val FR_DIALOGTERM = 0wx00000040 val FR_SHOWHELP = 0wx00000080 val FR_NOUPDOWN = 0wx00000400 val FR_NOMATCHCASE = 0wx00000800 val FR_NOWHOLEWORD = 0wx00001000 val FR_HIDEUPDOWN = 0wx00004000 val FR_HIDEMATCHCASE = 0wx00008000 val FR_HIDEWHOLEWORD = 0wx00010000 val all = flags[FR_DOWN, FR_WHOLEWORD, FR_MATCHCASE, FR_FINDNEXT, FR_REPLACE, FR_REPLACEALL, FR_DIALOGTERM, FR_NOUPDOWN, FR_NOMATCHCASE, FR_NOWHOLEWORD, FR_HIDEUPDOWN, FR_HIDEMATCHCASE, FR_HIDEWHOLEWORD] val intersect = List.foldl (fn (a, b) => SysWord.andb(a,b)) all end (* The class "string" may be a name or an atom. *) datatype ClassType = NamedClass of string | ClassAtom of int local fun class2Vol (ClassAtom i) = if i >= 0 andalso i < 0xC000 then toCint i else raise Fail "atom out of range" | class2Vol (NamedClass s) = toCstring s fun vol2Class v = let val v' = fromCint v in if Address.isShort v then ClassAtom v' else NamedClass(fromCstring v) end in val CLASS = mkConversion vol2Class class2Vol voidStar end (* Clipboard formats. I've added CF_NONE, CF_PRIVATE, CF_GDIOBJ and CF_REGISTERED *) datatype ClipboardFormat = CF_NONE | CF_TEXT | CF_BITMAP | CF_METAFILEPICT | CF_SYLK | CF_DIF | CF_TIFF | CF_OEMTEXT | CF_DIB | CF_PALETTE | CF_PENDATA | CF_RIFF | CF_WAVE | CF_UNICODETEXT | CF_ENHMETAFILE | CF_OWNERDISPLAY | CF_DSPTEXT | CF_DSPBITMAP | CF_DSPMETAFILEPICT | CF_DSPENHMETAFILE | CF_PRIVATE of int | CF_GDIOBJ of int | CF_REGISTERED of int | CF_HDROP | CF_LOCALE local val tab = [ (CF_NONE, 0), (CF_TEXT, 1), (CF_BITMAP, 2), (CF_METAFILEPICT, 3), (CF_SYLK, 4), (CF_DIF, 5), (CF_TIFF, 6), (CF_OEMTEXT, 7), (CF_DIB, 8), (CF_PALETTE, 9), (CF_PENDATA, 10), (CF_RIFF, 11), (CF_WAVE, 12), (CF_UNICODETEXT, 13), (CF_ENHMETAFILE, 14), (CF_HDROP, 15), (CF_LOCALE, 16), (CF_OWNERDISPLAY, 0x0080), (CF_DSPTEXT, 0x0081), (CF_DSPBITMAP, 0x0082), (CF_DSPMETAFILEPICT, 0x0083), (CF_DSPENHMETAFILE, 0x008E) ] fun toInt (CF_PRIVATE i) = if i >= 0 andalso i < 0xff then 0x0200 + i else raise Size | toInt (CF_GDIOBJ i) = if i >= 0 andalso i < 0xff then 0x0300 + i else raise Size | toInt (CF_REGISTERED i) = i | toInt _ = raise Match fun fromInt i = if i >= 0x0200 andalso i <= 0x02ff then CF_PRIVATE(i-0x0200) else if i >= 0x0300 andalso i <= 0x03ff then CF_GDIOBJ(i-0x0300) else if i >= 0xC000 andalso i < 0xFFFF then CF_REGISTERED i else raise Match in val CLIPFORMAT = tableConversion(tab, SOME(fromInt, toInt)) end (* Resources may be specified by strings or by ints. Should this be an abstype? *) datatype RESID = IdAsInt of int | IdAsString of string local fun resid2Vol (IdAsInt i) = if i >= 0 andalso i < 65536 then toCint i else raise Fail "resource id out of range" | resid2Vol (IdAsString s) = toCstring s fun vol2Resid v = let val v' = fromCint v in if Address.isShort v then IdAsInt v' else IdAsString(fromCstring v) end in val RESID = mkConversion vol2Resid resid2Vol voidStar; end (*datatype HelpContext = HelpInfo_MenuItem of | HelpInfo_Window of type HELPINFO = { }*) (* Useful conversions. *) (* It would be nice if these were included in CInterface but that only goes as far as STRUCT9. *) fun STRUCT10 (c1,c2,c3,c4,c5,c6,c7,c8,c9,c10) = let fun break10 ts v = case break_struct ts v of [a,b,c,d,e,f,g,h,i,j] => (a,b,c,d,e,f,g,h,i,j) | _ => raise Fail "break" val (from1,to1,ctype1) = breakConversion c1 val (from2,to2,ctype2) = breakConversion c2 val (from3,to3,ctype3) = breakConversion c3 val (from4,to4,ctype4) = breakConversion c4 val (from5,to5,ctype5) = breakConversion c5 val (from6,to6,ctype6) = breakConversion c6 val (from7,to7,ctype7) = breakConversion c7 val (from8,to8,ctype8) = breakConversion c8 val (from9,to9,ctype9) = breakConversion c9 val (from10,to10,ctype10) = breakConversion c10 val ctypes = [ctype1,ctype2,ctype3,ctype4,ctype5,ctype6,ctype7,ctype8,ctype9,ctype10] fun from v = let val (v1,v2,v3,v4,v5,v6,v7,v8,v9,v10) = break10 ctypes v in (from1 v1,from2 v2,from3 v3,from4 v4,from5 v5,from6 v6, from7 v7,from8 v8,from9 v9,from10 v10) end fun to (a,b,c,d,e,f,g,h,i,j) = make_struct (ListPair.zip (ctypes, [to1 a,to2 b,to3 c,to4 d,to5 e, to6 f,to7 g,to8 h,to9 i,to10 j])) in mkConversion from to (Cstruct ctypes) end fun STRUCT11 (c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11) = let fun break11 ts v = case break_struct ts v of [a,b,c,d,e,f,g,h,i,j,k] => (a,b,c,d,e,f,g,h,i,j,k) | _ => raise Fail "break" val (from1,to1,ctype1) = breakConversion c1 val (from2,to2,ctype2) = breakConversion c2 val (from3,to3,ctype3) = breakConversion c3 val (from4,to4,ctype4) = breakConversion c4 val (from5,to5,ctype5) = breakConversion c5 val (from6,to6,ctype6) = breakConversion c6 val (from7,to7,ctype7) = breakConversion c7 val (from8,to8,ctype8) = breakConversion c8 val (from9,to9,ctype9) = breakConversion c9 val (from10,to10,ctype10) = breakConversion c10 val (from11,to11,ctype11) = breakConversion c11 val ctypes = [ctype1,ctype2,ctype3,ctype4,ctype5,ctype6, ctype7,ctype8,ctype9,ctype10,ctype11] fun from v = let val (v1,v2,v3,v4,v5,v6,v7,v8,v9,v10,v11) = break11 ctypes v in (from1 v1,from2 v2,from3 v3,from4 v4,from5 v5,from6 v6, from7 v7,from8 v8,from9 v9,from10 v10,from11 v11) end fun to (a,b,c,d,e,f,g,h,i,j,k) = make_struct (ListPair.zip (ctypes, [to1 a,to2 b,to3 c,to4 d,to5 e, to6 f, to7 g,to8 h,to9 i,to10 j,to11 k])) in mkConversion from to (Cstruct ctypes) end fun STRUCT12 (c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12) = let fun break12 ts v = case break_struct ts v of [a,b,c,d,e,f,g,h,i,j,k,l] => (a,b,c,d,e,f,g,h,i,j,k,l) | _ => raise Fail "break" val (from1,to1,ctype1) = breakConversion c1 val (from2,to2,ctype2) = breakConversion c2 val (from3,to3,ctype3) = breakConversion c3 val (from4,to4,ctype4) = breakConversion c4 val (from5,to5,ctype5) = breakConversion c5 val (from6,to6,ctype6) = breakConversion c6 val (from7,to7,ctype7) = breakConversion c7 val (from8,to8,ctype8) = breakConversion c8 val (from9,to9,ctype9) = breakConversion c9 val (from10,to10,ctype10) = breakConversion c10 val (from11,to11,ctype11) = breakConversion c11 val (from12,to12,ctype12) = breakConversion c12 val ctypes = [ctype1,ctype2,ctype3,ctype4,ctype5,ctype6, ctype7,ctype8,ctype9,ctype10,ctype11,ctype12] fun from v = let val (v1,v2,v3,v4,v5,v6,v7,v8,v9,v10,v11,v12) = break12 ctypes v in (from1 v1,from2 v2,from3 v3,from4 v4,from5 v5,from6 v6, from7 v7,from8 v8,from9 v9,from10 v10,from11 v11,from12 v12) end fun to (a,b,c,d,e,f,g,h,i,j,k,l) = make_struct (ListPair.zip (ctypes, [to1 a,to2 b,to3 c,to4 d,to5 e, to6 f, to7 g,to8 h,to9 i,to10 j,to11 k, to12 l])) in mkConversion from to (Cstruct ctypes) end fun STRUCT14 (c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14) = let fun break14 ts v = case break_struct ts v of [a,b,c,d,e,f,g,h,i,j,k,l,m,n] => (a,b,c,d,e,f,g,h,i,j,k,l,m,n) | _ => raise Fail "break" val (from1,to1,ctype1) = breakConversion c1 val (from2,to2,ctype2) = breakConversion c2 val (from3,to3,ctype3) = breakConversion c3 val (from4,to4,ctype4) = breakConversion c4 val (from5,to5,ctype5) = breakConversion c5 val (from6,to6,ctype6) = breakConversion c6 val (from7,to7,ctype7) = breakConversion c7 val (from8,to8,ctype8) = breakConversion c8 val (from9,to9,ctype9) = breakConversion c9 val (from10,to10,ctype10) = breakConversion c10 val (from11,to11,ctype11) = breakConversion c11 val (from12,to12,ctype12) = breakConversion c12 val (from13,to13,ctype13) = breakConversion c13 val (from14,to14,ctype14) = breakConversion c14 val ctypes = [ctype1,ctype2,ctype3,ctype4,ctype5,ctype6, ctype7,ctype8,ctype9,ctype10,ctype11,ctype12, ctype13,ctype14] fun from v = let val (v1,v2,v3,v4,v5,v6,v7,v8,v9,v10,v11,v12,v13,v14) = break14 ctypes v in (from1 v1,from2 v2,from3 v3,from4 v4,from5 v5,from6 v6, from7 v7,from8 v8,from9 v9,from10 v10,from11 v11,from12 v12, from13 v13,from14 v14) end fun to (a,b,c,d,e,f,g,h,i,j,k,l,m,n) = make_struct (ListPair.zip (ctypes, [to1 a,to2 b,to3 c,to4 d,to5 e, to6 f, to7 g,to8 h,to9 i,to10 j,to11 k, to12 l, to13 m, to14 n])) in mkConversion from to (Cstruct ctypes) end fun STRUCT16 (c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16) = let nonfix o fun break16 ts v = case break_struct ts v of [a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p] => (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p) | _ => raise Fail "break" val (from1,to1,ctype1) = breakConversion c1 val (from2,to2,ctype2) = breakConversion c2 val (from3,to3,ctype3) = breakConversion c3 val (from4,to4,ctype4) = breakConversion c4 val (from5,to5,ctype5) = breakConversion c5 val (from6,to6,ctype6) = breakConversion c6 val (from7,to7,ctype7) = breakConversion c7 val (from8,to8,ctype8) = breakConversion c8 val (from9,to9,ctype9) = breakConversion c9 val (from10,to10,ctype10) = breakConversion c10 val (from11,to11,ctype11) = breakConversion c11 val (from12,to12,ctype12) = breakConversion c12 val (from13,to13,ctype13) = breakConversion c13 val (from14,to14,ctype14) = breakConversion c14 val (from15,to15,ctype15) = breakConversion c15 val (from16,to16,ctype16) = breakConversion c16 val ctypes = [ctype1,ctype2,ctype3,ctype4,ctype5,ctype6, ctype7,ctype8,ctype9,ctype10,ctype11,ctype12, ctype13,ctype14,ctype15,ctype16] fun from v = let val (v1,v2,v3,v4,v5,v6,v7,v8,v9,v10,v11,v12,v13,v14,v15,v16) = break16 ctypes v in (from1 v1,from2 v2,from3 v3,from4 v4,from5 v5,from6 v6, from7 v7,from8 v8,from9 v9,from10 v10,from11 v11,from12 v12, from13 v13,from14 v14,from15 v15,from16 v16) end fun to (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p) = make_struct (ListPair.zip (ctypes, [to1 a,to2 b,to3 c,to4 d,to5 e, to6 f, to7 g,to8 h,to9 i,to10 j,to11 k, to12 l, to13 m, to14 n, to15 o, to16 p])) in mkConversion from to (Cstruct ctypes) end fun STRUCT18 (c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16,c17,c18) = let nonfix o fun break18 ts v = case break_struct ts v of [a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r] => (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r) | _ => raise Fail "break" val (from1,to1,ctype1) = breakConversion c1 val (from2,to2,ctype2) = breakConversion c2 val (from3,to3,ctype3) = breakConversion c3 val (from4,to4,ctype4) = breakConversion c4 val (from5,to5,ctype5) = breakConversion c5 val (from6,to6,ctype6) = breakConversion c6 val (from7,to7,ctype7) = breakConversion c7 val (from8,to8,ctype8) = breakConversion c8 val (from9,to9,ctype9) = breakConversion c9 val (from10,to10,ctype10) = breakConversion c10 val (from11,to11,ctype11) = breakConversion c11 val (from12,to12,ctype12) = breakConversion c12 val (from13,to13,ctype13) = breakConversion c13 val (from14,to14,ctype14) = breakConversion c14 val (from15,to15,ctype15) = breakConversion c15 val (from16,to16,ctype16) = breakConversion c16 val (from17,to17,ctype17) = breakConversion c17 val (from18,to18,ctype18) = breakConversion c18 val ctypes = [ctype1,ctype2,ctype3,ctype4,ctype5,ctype6, ctype7,ctype8,ctype9,ctype10,ctype11,ctype12, ctype13,ctype14,ctype15,ctype16,ctype17,ctype18] fun from v = let val (v1,v2,v3,v4,v5,v6,v7,v8,v9,v10, v11,v12,v13,v14,v15,v16,v17,v18) = break18 ctypes v in (from1 v1,from2 v2,from3 v3,from4 v4,from5 v5,from6 v6, from7 v7,from8 v8,from9 v9,from10 v10,from11 v11,from12 v12, from13 v13,from14 v14,from15 v15,from16 v16, from17 v17,from18 v18) end fun to (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r) = make_struct (ListPair.zip (ctypes, [to1 a,to2 b,to3 c,to4 d,to5 e, to6 f, to7 g,to8 h,to9 i,to10 j,to11 k, to12 l, to13 m,to14 n,to15 o, to16 p, to17 q,to18 r])) in mkConversion from to (Cstruct ctypes) end fun STRUCT19 (c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16,c17,c18,c19) = let nonfix o fun break19 ts v = case break_struct ts v of [a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s] => (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s) | _ => raise Fail "break" val (from1,to1,ctype1) = breakConversion c1 val (from2,to2,ctype2) = breakConversion c2 val (from3,to3,ctype3) = breakConversion c3 val (from4,to4,ctype4) = breakConversion c4 val (from5,to5,ctype5) = breakConversion c5 val (from6,to6,ctype6) = breakConversion c6 val (from7,to7,ctype7) = breakConversion c7 val (from8,to8,ctype8) = breakConversion c8 val (from9,to9,ctype9) = breakConversion c9 val (from10,to10,ctype10) = breakConversion c10 val (from11,to11,ctype11) = breakConversion c11 val (from12,to12,ctype12) = breakConversion c12 val (from13,to13,ctype13) = breakConversion c13 val (from14,to14,ctype14) = breakConversion c14 val (from15,to15,ctype15) = breakConversion c15 val (from16,to16,ctype16) = breakConversion c16 val (from17,to17,ctype17) = breakConversion c17 val (from18,to18,ctype18) = breakConversion c18 val (from19,to19,ctype19) = breakConversion c19 val ctypes = [ctype1,ctype2,ctype3,ctype4,ctype5,ctype6, ctype7,ctype8,ctype9,ctype10,ctype11,ctype12, ctype13,ctype14,ctype15,ctype16,ctype17,ctype18, ctype19] fun from v = let val (v1,v2,v3,v4,v5,v6,v7,v8,v9,v10, v11,v12,v13,v14,v15,v16,v17,v18,v19) = break19 ctypes v in (from1 v1,from2 v2,from3 v3,from4 v4,from5 v5,from6 v6, from7 v7,from8 v8,from9 v9,from10 v10,from11 v11,from12 v12, from13 v13,from14 v14,from15 v15,from16 v16, from17 v17,from18 v18,from19 v19) end fun to (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s) = make_struct (ListPair.zip (ctypes, [to1 a,to2 b,to3 c,to4 d,to5 e, to6 f, to7 g,to8 h,to9 i,to10 j,to11 k, to12 l, to13 m,to14 n,to15 o, to16 p, to17 q,to18 r,to19 s])) in mkConversion from to (Cstruct ctypes) end fun STRUCT20 (c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16,c17,c18,c19,c20) = let nonfix o fun break20 ts v = case break_struct ts v of [a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t] => (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t) | _ => raise Fail "break" val (from1,to1,ctype1) = breakConversion c1 val (from2,to2,ctype2) = breakConversion c2 val (from3,to3,ctype3) = breakConversion c3 val (from4,to4,ctype4) = breakConversion c4 val (from5,to5,ctype5) = breakConversion c5 val (from6,to6,ctype6) = breakConversion c6 val (from7,to7,ctype7) = breakConversion c7 val (from8,to8,ctype8) = breakConversion c8 val (from9,to9,ctype9) = breakConversion c9 val (from10,to10,ctype10) = breakConversion c10 val (from11,to11,ctype11) = breakConversion c11 val (from12,to12,ctype12) = breakConversion c12 val (from13,to13,ctype13) = breakConversion c13 val (from14,to14,ctype14) = breakConversion c14 val (from15,to15,ctype15) = breakConversion c15 val (from16,to16,ctype16) = breakConversion c16 val (from17,to17,ctype17) = breakConversion c17 val (from18,to18,ctype18) = breakConversion c18 val (from19,to19,ctype19) = breakConversion c19 val (from20,to20,ctype20) = breakConversion c20 val ctypes = [ctype1,ctype2,ctype3,ctype4,ctype5,ctype6, ctype7,ctype8,ctype9,ctype10,ctype11,ctype12, ctype13,ctype14,ctype15,ctype16,ctype17,ctype18, ctype19,ctype20] fun from v = let val (v1,v2,v3,v4,v5,v6,v7,v8,v9,v10, v11,v12,v13,v14,v15,v16,v17,v18,v19,v20) = break20 ctypes v in (from1 v1,from2 v2,from3 v3,from4 v4,from5 v5,from6 v6, from7 v7,from8 v8,from9 v9,from10 v10,from11 v11,from12 v12, from13 v13,from14 v14,from15 v15,from16 v16, from17 v17,from18 v18,from19 v19,from20 v20) end fun to (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t) = make_struct (ListPair.zip (ctypes, [to1 a,to2 b,to3 c,to4 d,to5 e, to6 f, to7 g,to8 h,to9 i,to10 j,to11 k, to12 l, to13 m,to14 n,to15 o, to16 p, to17 q,to18 r,to19 s,to20 t])) in mkConversion from to (Cstruct ctypes) end (* Conversion for a fixed size character array. *) fun CHARARRAY n = let val base = Cstruct (List.tabulate (n, fn _ => Cchar)) fun from (v: vol) : string = fromCstring(address v) fun to (s:string): vol = deref(toCstring(if size s > n-1 then String.substring(s, 0, n-1) else s)) in mkConversion from to base end fun kernel name = get_sym "kernel32.dll" name and user sym = get_sym "user32.DLL" sym and commdlg sym = get_sym "comdlg32.DLL" sym and gdi sym = get_sym "gdi32.DLL" sym and shell sym = get_sym "shell32.DLL" sym and comctl sym = get_sym "comctl32.DLL" sym (* Conversion to and from LargeWord.word. This is used for 32-bit flags. *) val WORD = absConversion {abs = LargeWord.fromInt, rep = LargeWord.toInt} UINT (* Various functions return zero if error. This conversion checks for that. *) fun POSINT name = absConversion {abs = fn 0 => raise OS.SysErr(name, SOME(GetLastError())) | n => n, rep = fn i => i} UINT (* Conversion between string option and C strings. NONE is converted to NULL. *) local fun toCstropt NONE = toCint 0 | toCstropt (SOME s) = toCstring s fun fromCstropt v = if fromCint v = 0 then NONE else SOME(fromCstring v) in val STRINGOPT = mkConversion fromCstropt toCstropt (Cpointer Cchar) end (* In several cases when extracting a string it is not possible in advance to know how big to make the buffer. This function loops until all the string has been extracted. *) fun getStringCall(f: vol*int -> int): string = let fun doCall initialSize = let (* Allocate a buffer to receive the result. For safety we make it one character longer than we actually say because it's not always clear whether the length we pass is the size including the NULL. Equally we are only certain we have read the whole string if the return value is less than initialSize-1 because the return value could be the number of real characters copied to the buffer. *) val buff = alloc (initialSize+1) Cchar val resultSize = f(address buff, initialSize) in if resultSize < initialSize-1 then (* We've got it all. *) fromCstring(address buff) else doCall(initialSize + initialSize div 2) end in doCall (*1024*) 3 (* Use a small size initially for testing. *) end (* Some C functions take a vector of values to allow a variable number of elements to be passed. We use a list for this in ML. *) fun list2Vector (conv: 'a Conversion) (l:'a list): vol * int = let val count = List.length l val (_, to, element) = breakConversion conv val vec =alloc count element fun setItem(item, n) = (assign element (offset n element vec) (to item); n+1) val _: int = List.foldl setItem 0 l in (address vec, count) end (* We have to allocate some of the values as global handles. *) abstype HGLOBAL = HG of int with val hglobalNull = HG 0 fun isHglobalNull(HG 0) = true | isHglobalNull _ = false val HGLOBAL = absConversion {abs=HG, rep=fn (HG i) => i} UINT end val GlobalAlloc = call2 (kernel "GlobalAlloc") (INT, INT) HGLOBAL val GlobalLock = call1 (kernel "GlobalLock") (HGLOBAL) POINTER val GlobalFree = call1 (kernel "GlobalFree") (HGLOBAL) HGLOBAL val GlobalSize = call1 (kernel "GlobalSize") (HGLOBAL) INT val GlobalUnlock = call1 (kernel "GlobalUnlock") (HGLOBAL) BOOL (* Conversion for Word8Vector. We can't do this as a general conversion because we can't find out how big the C vector is. *) val fromWord8vec = toCbytes and toWord8vec = fromCbytes (* Conversion for a fixed size byte array. *) fun BYTEARRAY n = let val base = Cstruct (List.tabulate (n, fn _ => Cchar)) fun from v = toWord8vec(address v, n) fun to w = if Word8Vector.length w <> n then raise Size else deref(fromWord8vec w) in mkConversion from to base end (* Conversion for a fixed size char array. *) fun CHARARRAY n = let val base = Cstruct (List.tabulate (n, fn _ => Cchar)) fun from (v: vol): string = let open Word8Vector infix sub val vector = toWord8vec(address v, n) val len = length vector (* This will be null-terminated - trim it at the first null. *) fun term i = if i = len orelse (vector sub i) = 0w0 then i else term (i+1) in Byte.unpackStringVec(Word8VectorSlice.slice(vector, 0, SOME(term 0))) end fun to (s: string): vol = let open Word8Array val substr = if size s < n then s else String.substring(s, 0, n-1) val arr = array(n, 0w0) val _ = copyVec{src=Byte.stringToBytes substr, dst=arr, di=0} in deref(fromWord8vec(vector arr)) end in mkConversion from to base end (* These should always be UNSIGNED values. *) local open LargeWord infix << >> orb andb in fun LOWORD(l) = toInt(fromInt l andb 0wxFFFF) fun HIWORD(l) = toInt((fromInt l >> 0w16) andb 0wxFFFF) fun MAKELONG(a, b) = toInt ((fromInt b << 0w16) orb (fromInt a andb 0wxFFFF)) fun HIBYTE(w) = toInt((fromInt w >> 0w8) andb 0wxFF) fun LOBYTE(w) = toInt(fromInt w andb 0wxFF) end (* Convert between strings and vectors containing Unicode characters. N.B. These are not null terminated. *) fun unicodeToString(w: Word8Vector.vector): string = let val inputLength = Word8Vector.length w val WideCharToMultiByte = call8 (kernel "WideCharToMultiByte") (INT, INT, POINTER, INT, POINTER, INT, INT, INT) INT; val outputBuf = alloc inputLength Cchar (* Assume big enough for the moment. *) val conv = WideCharToMultiByte(0 (* CP_ACP *), 0 (* Default *), fromWord8vec w, inputLength div 2, (* Number of Unicode characters. *) address outputBuf, inputLength, 0, 0); in (* We can't use fromCstring here because it's not necessarily null terminated. *) CharVector.tabulate(conv, fn i => fromCchar(offset i Cchar outputBuf)) end fun stringToUnicode(s: string): Word8Vector.vector = let val inputLength = size s val outputLength = inputLength * 2 (* Should be enough. *) val MultiByteToWideChar = call6 (kernel "MultiByteToWideChar") (INT, INT, STRING, INT, POINTER, INT) INT; val outputBuf = alloc outputLength Cchar val conv = MultiByteToWideChar(0 (* CP_ACP *), 0 (* Default *), s, inputLength, address outputBuf, outputLength+1); in toWord8vec (address outputBuf, conv*2) end end end; polyml.5.2.1/mlsource/extra/Win/Bitmap.sml0000644000175000017500000003776610766435270017473 0ustar daviddavid(* Copyright (c) 2001-7 David C.J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure Bitmap: sig type HBITMAP and HDC type COLORREF = Color.COLORREF type RECT = { top: int, left: int, bottom: int, right: int } type SIZE = { cx: int, cy: int } datatype BitmapCompression = BI_BITFIELDS | BI_RGB | BI_RLE4 | BI_RLE8 datatype FloodFillMode = FLOODFILLBORDER | FLOODFILLSURFACE type BITMAP = { width: int, height: int, widthBytes: int, planes: int, bitsPerPixel: int, bits: Word8Vector.vector option } type StretchMode val BLACKONWHITE : StretchMode val COLORONCOLOR : StretchMode val HALFTONE : StretchMode val MAXSTRETCHBLTMODE : StretchMode val WHITEONBLACK : StretchMode type RasterOpCode val BLACKNESS : RasterOpCode val DSTINVERT : RasterOpCode val MERGECOPY : RasterOpCode val MERGEPAINT : RasterOpCode val NOTSRCCOPY : RasterOpCode val NOTSRCERASE : RasterOpCode val PATCOPY : RasterOpCode val PATINVERT : RasterOpCode val PATPAINT : RasterOpCode val SRCAND : RasterOpCode val SRCCOPY : RasterOpCode val SRCERASE : RasterOpCode val SRCINVERT : RasterOpCode val SRCPAINT : RasterOpCode val WHITENESS : RasterOpCode val BitBlt : HDC * int * int * int * int * HDC * int * int * RasterOpCode -> unit val CreateBitmap : {bits: Word8Vector.vector option, width: int, height: int, planes: int, bitsPerPixel: int} -> HBITMAP val CreateBitmapIndirect : BITMAP -> HBITMAP val CreateCompatibleBitmap : HDC * int * int -> HBITMAP val ExtFloodFill : HDC * int * int * COLORREF * FloodFillMode -> unit val GetBitmapBits : HBITMAP * int -> Word8Vector.vector val GetBitmapDimensionEx : HBITMAP -> SIZE val GetPixel : HDC * int * int -> COLORREF val GetStretchBltMode : HDC -> StretchMode type QuaternaryRop val MAKEROP4 : {back: RasterOpCode, fore: RasterOpCode} -> QuaternaryRop val MaskBlt : HDC * int * int * int * int * HDC * int * int * HBITMAP * int * int * QuaternaryRop -> unit (*val PlgBlt : HDC * RECT * HDC * RECT * HBITMAP * int * int -> unit*) val SetBitmapBits : HBITMAP * Word8Vector.vector -> unit val SetBitmapDimensionEx : HBITMAP * int * int * SIZE -> SIZE val SetPixel : HDC * int * int * COLORREF -> COLORREF val SetStretchBltMode : HDC * StretchMode -> unit val StretchBlt : HDC * int * int * int * int * HDC * int * int * int * int * RasterOpCode -> unit type BITMAPINFOHEADER = { width: int, height: int, planes: int, bitsPerPixel: int, compression: BitmapCompression, sizeImage: int, xPelsPerM: int, yPelsPerM: int, clrUsed: int, clrImportant: int } (* ML extension to extract the information from a DIB. *) val getBitmapInfoHdr: Word8Vector.vector -> BITMAPINFOHEADER val GetDIBits: HDC * HBITMAP * int * int * BITMAPINFOHEADER option -> Word8Vector.vector val SetDIBits: HDC * HBITMAP * int * int * Word8Vector.vector -> unit end = struct local open CInterface Base fun callgdi name = call_sym (load_sym (load_lib "gdi32.DLL") name) fun gdicall_IIIM name CR (C1,C2,C3,C4) (a1,a2,a3,a4) = let val (from1,to1,ctype1) = breakConversion C1 val (from2,to2,ctype2) = breakConversion C2 val (from3,to3,ctype3) = breakConversion C3 val (from4,to4,ctype4) = breakConversion C4 val (fromR,toR,ctypeR) = breakConversion CR val va1 = to1 a1 val va2 = to2 a2 val va3 = to3 a3 val va4 = address (to4 a4) val res = callgdi name [(ctype1,va1),(ctype2,va2),(ctype3,va3),(Cpointer ctype4,va4)] ctypeR val _ : unit = fromR res in from4 (deref va4) end fun gdicall_IW name CR (C1,C2) (a1) = let val (from1,to1,ctype1) = breakConversion C1 val (from2,to2,ctype2) = breakConversion C2 val (fromR,toR,ctypeR) = breakConversion CR val va1 = to1 a1 val va2 = address (alloc 1 ctype2) val res = callgdi name [(ctype1,va1),(Cpointer ctype2,va2)] ctypeR val _: unit = fromR res in (from2 (deref va2)) end val XCOORD = INT : int Conversion val YCOORD = INT: int Conversion val XOFFSET = INT: int Conversion val YOFFSET = INT: int Conversion val WIDTH = INT: int Conversion val HEIGHT = INT: int Conversion fun checkBitmap name c = if isHgdiObjNull c then raise OS.SysErr(name, SOME(GetLastError())) else c in type HDC = HDC and HBITMAP = HBITMAP type COLORREF = Color.COLORREF type SIZE = SIZE and RECT = RECT open GdiBase local datatype StretchMode = W of int in type StretchMode = StretchMode val STRETCHMODE = absConversion {abs = W, rep = fn W n => n} INT val BLACKONWHITE = W (1) val WHITEONBLACK = W (2) val COLORONCOLOR = W (3) val HALFTONE = W (4) val MAXSTRETCHBLTMODE = W (4) end (*TYPE: FloodFillMode *) datatype FloodFillMode = FLOODFILLBORDER | FLOODFILLSURFACE local val tab = [ (FLOODFILLBORDER, 0), (FLOODFILLSURFACE, 1) ] in val FLOODFILLMODE = tableConversion(tab, NONE) end val ExtFloodFill = call5 (gdi "ExtFloodFill") (HDC,XCOORD,YCOORD,COLORREF,FLOODFILLMODE) (SUCCESSSTATE "ExtFloodFill") val GetPixel = call3 (gdi "GetPixel") (HDC,INT,INT) COLORREF val SetPixel = call4 (gdi "SetPixel") (HDC,INT,INT, COLORREF) COLORREF val BitBlt = call9 (gdi "BitBlt") (HDC,XCOORD,YCOORD,WIDTH,HEIGHT,HDC,XCOORD,YCOORD,RASTEROPCODE) (SUCCESSSTATE "BitBlt") val CreateCompatibleBitmap = checkBitmap "CreateCompatibleBitmap" o call3 (gdi "CreateCompatibleBitmap") (HDC,WIDTH,HEIGHT) HBITMAP val GetStretchBltMode = call1 (gdi "GetStretchBltMode") (HDC) STRETCHMODE (* TODO: The raster op is supposed to be a combined operation for the foreground and background. *) val MaskBlt = call12(gdi "MaskBlt") (HDC,XCOORD,YCOORD,WIDTH,HEIGHT,HDC,XCOORD,YCOORD,HBITMAP,XOFFSET, YOFFSET,QUATERNARY) (SUCCESSSTATE "MaskBlt") val SetStretchBltMode = call2(gdi "SetStretchBltMode") (HDC,STRETCHMODE) (SUCCESSSTATE "SetStretchBltMode") val StretchBlt = call11(gdi "StretchBlt") (HDC,XCOORD,YCOORD,WIDTH,HEIGHT,HDC,XCOORD,YCOORD,WIDTH,HEIGHT,RASTEROPCODE) (SUCCESSSTATE "StretchBlt") (* This definitely has the wrong type. *) (*val PlgBlt = call7 (gdi "PlgBlt")(HDC,RECT,HDC,RECT,HBITMAP,XCOORD,YCOORD) (SUCCESSSTATE "PlgBlt")*) val SetBitmapDimensionEx = gdicall_IIIM "SetBitmapDimensionEx" (SUCCESSSTATE "SetBitmapDimensionEx") (HBITMAP,WIDTH,HEIGHT,SIZE) val GetBitmapDimensionEx = gdicall_IW "GetBitmapDimensionEx" (SUCCESSSTATE "GetBitmapDimensionEx") (HBITMAP,SIZE) val CreateBitmapIndirect = checkBitmap "CreateBitmapIndirect" o call1 (gdi "CreateBitmapIndirect") (POINTERTO BITMAP) HBITMAP local val cbm = checkBitmap "CreateBitmap" o call5 (gdi "CreateBitmap") (INT, INT, INT, INT, POINTER) HBITMAP in fun CreateBitmap{width, height, planes, bitsPerPixel, bits} = cbm(width, height, planes, bitsPerPixel, case bits of NONE => toCint 0 | SOME v => fromWord8vec v) end local (* RGBQUAD values are four bytes of blue, green, red and a reserved byte. *) val RGBQUAD = STRUCT4(CHAR, CHAR, CHAR, CHAR) val (fromR, toR, rtype) = breakConversion RGBQUAD fun from v = let val (b, g, r, _) = fromR v in {red = ord r, blue = ord b, green = ord g} end fun to {red, green, blue} = toR(chr blue, chr green, chr red, #"\000") in val RGBQUAD = mkConversion from to rtype end (*TYPE: BitmapCompression *) datatype BitmapCompression = BI_RGB | BI_RLE8 | BI_RLE4 | BI_BITFIELDS local val tab = [ (BI_RGB, 0), (BI_RLE8, 1), (BI_RLE4, 2), (BI_BITFIELDS, 3) ] in val (fromComp, toComp) = tableLookup(tab, NONE) val BITCOMPRESSION = absConversion {abs = toComp, rep = fromComp} INT end type BITMAPINFOHEADER = { width: int, height: int, planes: int, bitsPerPixel: int, compression: BitmapCompression, sizeImage: int, xPelsPerM: int, yPelsPerM: int, clrUsed: int, clrImportant: int } (* Device-independent bitmaps are intended to be used for storing and transferring bitmaps. I've written this code to simplify the process of packing and unpacking them. In particular it takes care of the calculating the header size which is generally a bit of a pain. DCJM. *) fun getBitmapInfoHdr(w: Word8Vector.vector): BITMAPINFOHEADER = let val size = LargeWord.toInt(PackWord32Little.subVec(w, 0)) (* Check that the size of the structure given by the first word is less than the overall size. There are various extended versions of the BITMAPINFOHEADER structure but we only look at the fields in the basic one. *) val _ = if size > Word8Vector.length w then raise Fail "Bitmap length field is wrong" else () val width = LargeWord.toIntX(PackWord32Little.subVecX(w, 1)) val height = LargeWord.toIntX(PackWord32Little.subVecX(w, 2)) val planes = LargeWord.toIntX(PackWord16Little.subVecX(w, 6)) val bitsPerPixel = LargeWord.toIntX(PackWord16Little.subVecX(w, 7)) val compression = toComp(LargeWord.toIntX(PackWord32Little.subVecX(w, 4))) val sizeImage = LargeWord.toIntX(PackWord32Little.subVecX(w, 5)) val xPelsPerM = LargeWord.toIntX(PackWord32Little.subVecX(w, 6)) val yPelsPerM = LargeWord.toIntX(PackWord32Little.subVecX(w, 7)) val clrUsed = LargeWord.toIntX(PackWord32Little.subVecX(w, 8)) val clrImportant = LargeWord.toIntX(PackWord32Little.subVecX(w, 9)) in { width = width, height = height, bitsPerPixel = bitsPerPixel, planes = planes, compression = compression, sizeImage = sizeImage, xPelsPerM = xPelsPerM, yPelsPerM = yPelsPerM, clrUsed = clrUsed, clrImportant = clrImportant } end local val DIB_RGB_COLORS = 0 val DIB_PAL_COLORS = 1 val BITMAPINFOHEADER = STRUCT11(INT, LONG, LONG, SHORT, SHORT, BITCOMPRESSION, INT, LONG, LONG, INT, INT) val (fromR, toR, rtype) = breakConversion BITMAPINFOHEADER val getDIBits = call7 (gdi "GetDIBits") (HDC, HBITMAP, UINT, UINT, POINTER, POINTER, INT) INT val setDIBits = call7 (gdi "SetDIBits") (HDC, HBITMAP, UINT, UINT, POINTER, POINTER, INT) INT in (* This is all a bit messy. GetDIBits can be used in a number of ways to get all or part of the information. Passing NULL for the "bits" argument and setting bitsPerPixel to zero in the BITMAPINFO argument simply fills in the BITMAPINFOHEADER. With bitsPerPixel non-zero it builds a colour table on the end of the BITMAPINFO. With "bits" non-NULL it builds the colour table and creates the bitmap. If NONE is given as the header it returns a vector containing only the header, allowing getBitmapInfoHdr to be used to unpack it. Otherwise it uses the information in the supplied header to get the bitmap. It ignores the passed in sizeImage because that may be wrong. *) fun GetDIBits(hdc: HDC, hb: HBITMAP, startScan, scanLines, NONE) = let (* Allocate a vector for the result and set the length field and bitsPerPixel. The others don't matter. *) val v = toR(sizeof rtype, 0, 0, 0, 0, BI_RGB, 0, 0, 0, 0, 0) val res = getDIBits(hdc, hb, startScan, scanLines, toCint 0, address v, DIB_RGB_COLORS) in if res = 0 then raise OS.SysErr("GetDIBits", SOME(GetLastError())) else fromCbytes(address v, sizeof rtype) end | GetDIBits(hdc: HDC, hb: HBITMAP, startScan, scanLines, SOME {width, height, planes, bitsPerPixel, compression, sizeImage, xPelsPerM, yPelsPerM, clrUsed, clrImportant}) = let (* The passed in value for sizeImage may be wrong. Call GetDIBits to find the correct value. *) val v = toR(sizeof rtype, width, height, planes, bitsPerPixel, compression, sizeImage, xPelsPerM, yPelsPerM, clrUsed, clrImportant) (* This call will build a colour map so we have to have enough space for it. The biggest possible is with 8 bits. *) val w = alloc (sizeof rtype + 256*sizeof Cint) Cchar val _ = assign rtype w v val res = getDIBits(hdc, hb, startScan, scanLines, toCint 0, address w, DIB_RGB_COLORS) val _ = if res = 0 then raise OS.SysErr("GetDIBits", SOME(GetLastError())) else () val (_, _, _, _, _, _, sizeImage, _, _, _, _) = fromR w (* Calculate the size of the palette. *) val numColours = if clrUsed <> 0 then clrUsed else if bitsPerPixel < 16 then IntInf.<<(1, Word.fromInt bitsPerPixel) else if compression = BI_BITFIELDS then 3 (* These are DWORD colour masks not RGBQUADS. *) else 0 (* No colour table. *) val bitOffset = sizeof rtype + numColours * sizeof Cint val size = bitOffset + sizeImage val mem = alloc size Cchar val _ = assign rtype mem v val res = getDIBits(hdc, hb, startScan, scanLines, address(offset bitOffset Cchar mem), address mem, DIB_RGB_COLORS) in if res = 0 then raise OS.SysErr("GetDIBits", SOME(GetLastError())) else fromCbytes(address mem, size) end fun SetDIBits(hdc, hb, startScan, scanLines, w) = let val v = toCbytes w (* We need to work out the offset of the bits. For this we need the size of the header structure (which may not be a BITMAPINFOHEADER but some other version of it), the number of colours and the compression. *) val hdrSize = LargeWord.toInt(PackWord32Little.subVec(w, 0)) val { clrUsed, compression, bitsPerPixel, ...} = getBitmapInfoHdr w val numColours = if clrUsed <> 0 then clrUsed else if bitsPerPixel < 16 then IntInf.<<(1, Word.fromInt bitsPerPixel) else if compression = BI_BITFIELDS then 3 (* These are DWORD colour masks not RGBQUADS. *) else 0 (* No colour table. *) val bitOffset = hdrSize + numColours * sizeof Cint val res = setDIBits(hdc, hb, startScan, scanLines, address(offset bitOffset Cchar (deref v)), v, DIB_RGB_COLORS) in if res = 0 then raise OS.SysErr("SetDIBits", SOME(GetLastError())) else () end end (* GetBitmapBits and SetBitmapBits are supposedly obsolete but they're useful for copying device-dependent bitmaps. *) fun GetBitmapBits(hbm, bytes): Word8Vector.vector = let val gbb = call3 (gdi "GetBitmapBits") (HBITMAP, INT, POINTER) (POSINT "GetBitmapBits") val buff = alloc bytes Cchar val res = gbb(hbm, bytes, address buff) in toWord8vec (address buff, bytes) end fun SetBitmapBits(hbm, w) = let val sbb = call3 (gdi "SetBitmapBits") (HBITMAP, INT, POINTER) (POSINT "SetBitmapBits") val buff = fromWord8vec w val res = sbb(hbm, Word8Vector.length w, buff) in () end (* Other Bitmap functions: AlphaBlend CreateDIBitmap CreateDIBSection - This creates an area of memory to write to - won't work in ML. GetDIBColorTable GradientFill SetDIBColorTable SetDIBitsToDevice SetPixelV StretchDIBits TransparentBlt *) end end; polyml.5.2.1/mlsource/extra/Win/Brush.sml0000644000175000017500000001356310313043363017311 0ustar daviddavid(* Copyright (c) 2001 David C.J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure Brush: sig type HBITMAP and HBRUSH and HDC datatype HatchStyle = HS_BDIAGONAL | HS_CROSS | HS_DIAGCROSS | HS_FDIAGONAL | HS_HORIZONTAL | HS_VERTICAL datatype BrushStyle = BS_HATCHED of HatchStyle | BS_HOLLOW | BS_PATTERN of HBITMAP | BS_SOLID type COLORREF = Color.COLORREF type LOGBRUSH = BrushStyle * COLORREF type POINT = {x: int, y: int} type RasterOpCode = Bitmap.RasterOpCode datatype ColorType = COLOR_SCROLLBAR | COLOR_BACKGROUND | COLOR_ACTIVECAPTION | COLOR_INACTIVECAPTION | COLOR_MENU | COLOR_WINDOW | COLOR_WINDOWFRAME | COLOR_MENUTEXT | COLOR_WINDOWTEXT | COLOR_CAPTIONTEXT | COLOR_ACTIVEBORDER | COLOR_INACTIVEBORDER | COLOR_APPWORKSPACE | COLOR_HIGHLIGHT | COLOR_HIGHLIGHTTEXT | COLOR_BTNFACE | COLOR_BTNSHADOW | COLOR_GRAYTEXT | COLOR_BTNTEXT | COLOR_INACTIVECAPTIONTEXT | COLOR_BTNHIGHLIGHT | COLOR_3DDKSHADOW | COLOR_3DLIGHT | COLOR_INFOTEXT | COLOR_INFOBK val CreateBrushIndirect : LOGBRUSH -> HBRUSH val CreateHatchBrush : HatchStyle * COLORREF -> HBRUSH val CreatePatternBrush : HBITMAP -> HBRUSH val CreateSolidBrush : COLORREF -> HBRUSH val GetSysColorBrush : ColorType -> HBRUSH val GetBrushOrgEx : HDC -> POINT val PatBlt : HDC * int * int * int * int * RasterOpCode -> unit val SetBrushOrgEx : HDC * POINT -> POINT end = struct local open CInterface Base fun callgdi name = call_sym (load_sym (load_lib "gdi32.DLL") name) fun gdicall_IW name CR (C1,C2) (a1) = let val (from1,to1,ctype1) = breakConversion C1 val (from2,to2,ctype2) = breakConversion C2 val (fromR,toR,ctypeR) = breakConversion CR val va1 = to1 a1 val va2 = address (alloc 1 ctype2) val res = callgdi name [(ctype1,va1),(Cpointer ctype2,va2)] ctypeR val _: unit = fromR res in (from2 (deref va2)) end fun gdicall_IM name CR (C1,C2) (a1,a2) = let val (from1,to1,ctype1) = breakConversion C1 val (from2,to2,ctype2) = breakConversion C2 val (fromR,toR,ctypeR) = breakConversion CR val va1 = to1 a1 val va2 = address (to2 a2) val res = callgdi name [(ctype1,va1),(Cpointer ctype2,va2)] ctypeR val _ : unit = fromR res in from2 (deref va2) end val XCOORD = INT : int Conversion val YCOORD = INT: int Conversion val WIDTH = INT: int Conversion val HEIGHT = INT: int Conversion in type HBRUSH = HBRUSH and COLORREF = Color.COLORREF and HBITMAP = HBITMAP and HDC = HDC and POINT = POINT open GdiBase (* BRUSHES *) val CreateBrushIndirect = call1 (user "CreateBrushIndirect") (LOGBRUSH) HBRUSH and CreateHatchBrush = call2 (gdi "CreateHatchBrush") (HATCHSTYLE, COLORREF) HBRUSH and CreateSolidBrush = call1 (gdi "CreateSolidBrush") (COLORREF) HBRUSH val GetBrushOrgEx = gdicall_IW "GetBrushOrgEx" (SUCCESSSTATE "GetBrushOrgEx") (HDC,POINT) val SetBrushOrgEx = gdicall_IM "SetBrushOrgEx" (SUCCESSSTATE "SetBrushOrgEx") (HDC,POINT) val CreatePatternBrush = call1 (gdi "CreatePatternBrush") (HBITMAP) HBRUSH val PatBlt = call6(gdi "PatBlt") (HDC,XCOORD,YCOORD,WIDTH,HEIGHT,RASTEROPCODE) (SUCCESSSTATE "PatBlt") datatype ColorType = COLOR_SCROLLBAR | COLOR_BACKGROUND | COLOR_ACTIVECAPTION | COLOR_INACTIVECAPTION | COLOR_MENU | COLOR_WINDOW | COLOR_WINDOWFRAME | COLOR_MENUTEXT | COLOR_WINDOWTEXT | COLOR_CAPTIONTEXT | COLOR_ACTIVEBORDER | COLOR_INACTIVEBORDER | COLOR_APPWORKSPACE | COLOR_HIGHLIGHT | COLOR_HIGHLIGHTTEXT | COLOR_BTNFACE | COLOR_BTNSHADOW | COLOR_GRAYTEXT | COLOR_BTNTEXT | COLOR_INACTIVECAPTIONTEXT | COLOR_BTNHIGHLIGHT | COLOR_3DDKSHADOW | COLOR_3DLIGHT | COLOR_INFOTEXT | COLOR_INFOBK fun colourTypeToInt COLOR_SCROLLBAR = 0 | colourTypeToInt COLOR_BACKGROUND = 1 | colourTypeToInt COLOR_ACTIVECAPTION = 2 | colourTypeToInt COLOR_INACTIVECAPTION = 3 | colourTypeToInt COLOR_MENU = 4 | colourTypeToInt COLOR_WINDOW = 5 | colourTypeToInt COLOR_WINDOWFRAME = 6 | colourTypeToInt COLOR_MENUTEXT = 7 | colourTypeToInt COLOR_WINDOWTEXT = 8 | colourTypeToInt COLOR_CAPTIONTEXT = 9 | colourTypeToInt COLOR_ACTIVEBORDER = 10 | colourTypeToInt COLOR_INACTIVEBORDER = 11 | colourTypeToInt COLOR_APPWORKSPACE = 12 | colourTypeToInt COLOR_HIGHLIGHT = 13 | colourTypeToInt COLOR_HIGHLIGHTTEXT = 14 | colourTypeToInt COLOR_BTNFACE = 15 | colourTypeToInt COLOR_BTNSHADOW = 16 | colourTypeToInt COLOR_GRAYTEXT = 17 | colourTypeToInt COLOR_BTNTEXT = 18 | colourTypeToInt COLOR_INACTIVECAPTIONTEXT = 19 | colourTypeToInt COLOR_BTNHIGHLIGHT = 20 | colourTypeToInt COLOR_3DDKSHADOW = 21 | colourTypeToInt COLOR_3DLIGHT = 22 | colourTypeToInt COLOR_INFOTEXT = 23 | colourTypeToInt COLOR_INFOBK = 24 (* Create a brush from a system colour. *) val GetSysColorBrush = call1 (user "GetSysColorBrush") (INT) HBRUSH o colourTypeToInt (* Other Brush functions: CreateDIBPatternBrushPt *) end end; polyml.5.2.1/mlsource/extra/Win/Button.sml0000644000175000017500000001777610313043363017513 0ustar daviddavid(* Copyright (c) 2001 David C.J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* Buttons. *) structure Button: sig structure Style: sig include BIT_FLAGS where type flags = Window.Style.flags val WS_OVERLAPPED: flags and WS_POPUP: flags and WS_CHILD: flags and WS_MINIMIZE: flags and WS_VISIBLE: flags and WS_DISABLED:flags and WS_CLIPSIBLINGS:flags and WS_CLIPCHILDREN:flags and WS_MAXIMIZE:flags and WS_CAPTION:flags and WS_BORDER:flags and WS_DLGFRAME:flags and WS_VSCROLL:flags and WS_HSCROLL:flags and WS_SYSMENU:flags and WS_THICKFRAME:flags and WS_GROUP:flags and WS_TABSTOP:flags and WS_MINIMIZEBOX:flags and WS_MAXIMIZEBOX:flags and WS_TILED:flags and WS_ICONIC:flags and WS_SIZEBOX:flags and WS_OVERLAPPEDWINDOW:flags and WS_TILEDWINDOW:flags and WS_POPUPWINDOW:flags and WS_CHILDWINDOW:flags and BS_3STATE: flags and BS_AUTO3STATE: flags and BS_AUTOCHECKBOX: flags and BS_AUTORADIOBUTTON: flags and BS_BITMAP: flags and BS_BOTTOM: flags and BS_CENTER: flags and BS_CHECKBOX: flags and BS_DEFPUSHBUTTON: flags and BS_FLAT: flags and BS_GROUPBOX: flags and BS_ICON: flags and BS_LEFT: flags and BS_LEFTTEXT: flags and BS_MULTILINE: flags and BS_NOTIFY: flags and BS_OWNERDRAW: flags and BS_PUSHBUTTON: flags and BS_PUSHLIKE: flags and BS_RADIOBUTTON: flags and BS_RIGHT: flags and BS_RIGHTBUTTON: flags and BS_TEXT: flags and BS_TOP: flags and BS_USERBUTTON: flags and BS_VCENTER: flags end structure Notifications: sig val BN_CLICKED: int val BN_PAINT: int val BN_HILITE: int val BN_UNHILITE: int val BN_DISABLE: int val BN_DOUBLECLICKED: int val BN_PUSHED: int val BN_UNPUSHED: int val BN_DBLCLK: int val BN_SETFOCUS: int val BN_KILLFOCUS: int end structure State: sig val BST_UNCHECKED: int val BST_CHECKED: int val BST_INDETERMINATE: int val BST_PUSHED: int val BST_FOCUS: int end end = struct structure Style = struct open Window.Style (* Include all the windows styles. *) type flags = Window.Style.flags (* Causes the type to print as Dialog.Style.flags. *) val BS_PUSHBUTTON: flags = fromWord 0wx00000000 val BS_DEFPUSHBUTTON: flags = fromWord 0wx00000001 val BS_CHECKBOX: flags = fromWord 0wx00000002 val BS_AUTOCHECKBOX: flags = fromWord 0wx00000003 val BS_RADIOBUTTON: flags = fromWord 0wx00000004 val BS_3STATE: flags = fromWord 0wx00000005 val BS_AUTO3STATE: flags = fromWord 0wx00000006 val BS_GROUPBOX: flags = fromWord 0wx00000007 val BS_USERBUTTON: flags = fromWord 0wx00000008 val BS_AUTORADIOBUTTON: flags = fromWord 0wx00000009 val BS_OWNERDRAW: flags = fromWord 0wx0000000B val BS_LEFTTEXT: flags = fromWord 0wx00000020 val BS_TEXT: flags = fromWord 0wx00000000 val BS_ICON: flags = fromWord 0wx00000040 val BS_BITMAP: flags = fromWord 0wx00000080 val BS_LEFT: flags = fromWord 0wx00000100 val BS_RIGHT: flags = fromWord 0wx00000200 val BS_CENTER: flags = fromWord 0wx00000300 val BS_TOP: flags = fromWord 0wx00000400 val BS_BOTTOM: flags = fromWord 0wx00000800 val BS_VCENTER: flags = fromWord 0wx00000C00 val BS_PUSHLIKE: flags = fromWord 0wx00001000 val BS_MULTILINE: flags = fromWord 0wx00002000 val BS_NOTIFY: flags = fromWord 0wx00004000 val BS_FLAT: flags = fromWord 0wx00008000 val BS_RIGHTBUTTON: flags = BS_LEFTTEXT val all = flags[Window.Style.all, BS_PUSHBUTTON, BS_DEFPUSHBUTTON, BS_CHECKBOX, BS_AUTOCHECKBOX, BS_RADIOBUTTON, BS_3STATE, BS_AUTO3STATE, BS_GROUPBOX, BS_USERBUTTON, BS_AUTORADIOBUTTON, BS_OWNERDRAW, BS_LEFTTEXT, BS_TEXT, BS_ICON, BS_BITMAP, BS_LEFT, BS_RIGHT, BS_CENTER, BS_TOP, BS_BOTTOM, BS_VCENTER, BS_PUSHLIKE, BS_MULTILINE, BS_NOTIFY, BS_FLAT] val intersect = List.foldl (fn (a, b) => fromWord(SysWord.andb(toWord a, toWord b))) all end structure Notifications = struct val BN_CLICKED = 0 val BN_PAINT = 1 val BN_HILITE = 2 val BN_UNHILITE = 3 val BN_DISABLE = 4 val BN_DOUBLECLICKED = 5 val BN_PUSHED = BN_HILITE val BN_UNPUSHED = BN_UNHILITE val BN_DBLCLK = BN_DOUBLECLICKED val BN_SETFOCUS = 6 val BN_KILLFOCUS = 7 end (* These are returned by SendMessage(button, BM_GETCHECK) so need to be integers. *) structure State = struct val BST_UNCHECKED = 0x0000 val BST_CHECKED = 0x0001 val BST_INDETERMINATE = 0x0002 val BST_PUSHED = 0x0004 val BST_FOCUS = 0x0008 end end; (* let open Button.Style fun getType w = let val typeField = fromWord(SysWord.andb(toWord w, 0wx0f)) in if typeField = BS_PUSHBUTTON then "BS_PUSHBUTTON" else if typeField = BS_DEFPUSHBUTTON then "BS_DEFPUSHBUTTON" else if typeField = BS_CHECKBOX then "BS_CHECKBOX" else if typeField = BS_AUTOCHECKBOX then "BS_AUTOCHECKBOX" else if typeField = BS_RADIOBUTTON then "BS_RADIOBUTTON" else if typeField = BS_3STATE then "BS_3STATE" else if typeField = BS_AUTO3STATE then "BS_AUTO3STATE" else if typeField = BS_GROUPBOX then "BS_GROUPBOX" else if typeField = BS_USERBUTTON then "BS_USERBUTTON" else if typeField = BS_AUTORADIOBUTTON then "BS_AUTORADIOBUTTON" else if typeField = BS_OWNERDRAW then "BS_OWNERDRAW" else "??" end val flagTable = [(BS_LEFTTEXT, "BS_LEFTTEXT"), (BS_ICON, "BS_ICON"), (BS_BITMAP, "BS_BITMAP"), (BS_CENTER, "BS_CENTER"), (* Must come before the next two. *) (BS_LEFT, "BS_LEFT"), (BS_RIGHT, "BS_RIGHT"), (BS_VCENTER, "BS_VCENTER"), (* Must come before the next two. *) (BS_TOP, "BS_TOP"), (BS_BOTTOM, "BS_BOTTOM"), (BS_PUSHLIKE, "BS_PUSHLIKE"), (BS_MULTILINE, "BS_MULTILINE"), (BS_NOTIFY, "BS_NOTIFY"), (BS_FLAT, "BS_FLAT"), (WS_POPUP, "WS_POPUP"), (WS_CHILD, "WS_CHILD"), (WS_MINIMIZE, "WS_MINIMIZE"), (WS_VISIBLE, "WS_VISIBLE"), (WS_DISABLED, "WS_DISABLED"), (WS_CLIPSIBLINGS, "WS_CLIPSIBLINGS"), (WS_CLIPCHILDREN, "WS_CLIPCHILDREN"), (WS_MAXIMIZE, "WS_MAXIMIZE"), (WS_CAPTION, "WS_CAPTION"), (WS_BORDER, "WS_BORDER"), (WS_DLGFRAME, "WS_DLGFRAME"), (WS_VSCROLL, "WS_VSCROLL"), (WS_HSCROLL, "WS_HSCROLL"), (WS_SYSMENU, "WS_SYSMENU"), (WS_THICKFRAME, "WS_THICKFRAME"), (WS_GROUP, "WS_GROUP"), (WS_TABSTOP, "WS_TABSTOP"), (WS_MINIMIZEBOX, "WS_MINIMIZEBOX"), (WS_MAXIMIZEBOX, "WS_MAXIMIZEBOX")] fun accumulateFlags f [] = [] | accumulateFlags f ((w, s)::t) = if allSet(w, f) then s :: accumulateFlags(clear(w, f)) t else accumulateFlags f t fun printFlags(put, beg, brk, nd) depth _ x = (* This is just the code to print a list. *) let val stringFlags = getType x :: accumulateFlags x flagTable fun plist [] depth = () | plist _ 0 = put "..." | plist [h] depth = put h | plist (h::t) depth = ( put (h^","); brk (1, 0); plist t (depth - 1) ) in beg (3, false); put "["; if depth <= 0 then put "..." else plist stringFlags depth; put "]"; nd () end in PolyML.install_pp printFlags end; *)polyml.5.2.1/mlsource/extra/Win/Caret.sml0000644000175000017500000000601610313043363017257 0ustar daviddavid(* Copyright (c) 2001 David C.J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* Caret functions. *) structure Caret : sig type HWND and HBITMAP type POINT = { x: int, y: int } datatype caretShape = CaretBitmap of HBITMAP | CaretBlack of {width: int, height: int} | CaretGrey of {width: int, height: int} val CreateCaret : HWND * caretShape -> unit val DestroyCaret : unit -> unit val GetCaretBlinkTime : unit -> Time.time val GetCaretPos : unit -> POINT val HideCaret : HWND -> unit val SetCaretBlinkTime : Time.time -> unit val SetCaretPos : POINT -> unit val ShowCaret : HWND -> bool end = struct local open CInterface open Base in type HWND = HWND and HBITMAP = HBITMAP and POINT = POINT datatype caretShape = CaretBlack of {height: int, width: int} | CaretGrey of {height: int, width: int} | CaretBitmap of HBITMAP local val createCaret = call4 (user "CreateCaret") (HWND, HBITMAP, INT, INT) (SUCCESSSTATE "CreateCaret") in (* The x and y value are only used if the bitmap is not 0 or 1. *) fun CreateCaret(hw, CaretBlack{height, width}) = createCaret(hw, intAsHgdi 0, width, height) | CreateCaret(hw, CaretGrey{height, width}) = createCaret(hw, intAsHgdi 1, width, height) | CreateCaret(hw, CaretBitmap hb) = createCaret(hw, hb, 0, 0) end val DestroyCaret = call0 (user "DestroyCaret") () (SUCCESSSTATE "DestroyCaret") val GetCaretBlinkTime = Time.fromMilliseconds o (call0 (user "GetCaretBlinkTime") () UINT) val HideCaret = call1 (user "HideCaret") (HWND) (SUCCESSSTATE "HideCaret") val SetCaretBlinkTime = (call1 (user "SetCaretBlinkTime") UINT (SUCCESSSTATE "SetCaretBlinkTime")) o Time.toMilliseconds (* The result of ShowCaret may be false either if there was an error or if HideCaret was called more than once. *) val ShowCaret = call1 (user "ShowCaret") (HWND) BOOL local val getCaretPos = call1 (user "GetCaretPos") (POINTER) (SUCCESSSTATE "GetCaretPos") val setCaretPos = call2 (user "SetCaretPos") (INT, INT) (SUCCESSSTATE "SetCaretPos") val (fromCpt, _, ptStruct) = breakConversion POINT in fun GetCaretPos(): POINT = let val v = alloc 1 ptStruct val _: unit = getCaretPos(address v) in fromCpt v end and SetCaretPos({x, y}: POINT) = setCaretPos(x, y) end end end; polyml.5.2.1/mlsource/extra/Win/Class.sml0000644000175000017500000002012410676746633017310 0ustar daviddavid(* Copyright (c) 2001 David C.J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure Class: sig type HWND (* = Win.HWND *) and Message (* = Message.Message *) and HINSTANCE (* = Globals.HINSTANCE *) and HBRUSH (* = Brush.HBRUSH *) and HICON (* = Icon.HICON *) and HCURSOR (* = Cursor.HCURSOR *) and HGDIOBJ datatype LRESULT = LRESINT of int | LRESHANDLE of HGDIOBJ datatype 'a ATOM = Registered of {proc: HWND * Message * 'a -> LRESULT * 'a, className: string} | SystemClass of string val Button : unit ATOM val ComboBox : unit ATOM val ComboLBox : unit ATOM val DDEMLEvent : unit ATOM val Edit : unit ATOM val ListBox : unit ATOM val MDIClient : unit ATOM val ScrollBar : unit ATOM val Static : unit ATOM structure Style : sig include BIT_FLAGS val CS_BYTEALIGNCLIENT : flags val CS_BYTEALIGNWINDOW : flags val CS_CLASSDC : flags val CS_DBLCLKS : flags val CS_GLOBALCLASS : flags val CS_HREDRAW : flags val CS_KEYCVTWINDOW : flags val CS_NOCLOSE : flags val CS_NOKEYCVT : flags val CS_OWNDC : flags val CS_PARENTDC : flags val CS_SAVEBITS : flags val CS_VREDRAW : flags end type 'a WNDCLASSEX = {style: Style.flags, wndProc: HWND * Message * 'a -> LRESULT * 'a, hInstance: HINSTANCE, hIcon: HICON option, hCursor: HCURSOR option, hbrBackGround: HBRUSH option, menuName: Resource.RESID option, className: string, hIconSm: HICON option} val RegisterClassEx : 'a WNDCLASSEX -> 'a ATOM val UnregisterClass : string * HINSTANCE -> unit val GetClassName : HWND -> string val GetClassInfoEx: HINSTANCE * string -> 'a WNDCLASSEX end = struct local open CInterface open Base open Resource in type Message = MessageBase.Message type HWND = HWND and HINSTANCE = HINSTANCE and HICON = HICON and HBRUSH = HBRUSH and HCURSOR = HCURSOR and HGDIOBJ = HGDIOBJ datatype LRESULT = datatype MessageBase.LRESULT structure Style = struct type flags = SysWord.word fun toWord f = f fun fromWord f = f val flags = List.foldl (fn (a, b) => SysWord.orb(a,b)) 0w0 fun allSet (fl1, fl2) = SysWord.andb(fl1, fl2) = fl1 fun anySet (fl1, fl2) = SysWord.andb(fl1, fl2) <> 0w0 fun clear (fl1, fl2) = SysWord.andb(SysWord.notb fl1, fl2) val CS_VREDRAW: flags = 0wx0001 val CS_HREDRAW: flags = 0wx0002 val CS_KEYCVTWINDOW: flags = 0wx0004 val CS_DBLCLKS: flags = 0wx0008 val CS_OWNDC: flags = 0wx0020 val CS_CLASSDC: flags = 0wx0040 val CS_PARENTDC: flags = 0wx0080 val CS_NOKEYCVT: flags = 0wx0100 val CS_NOCLOSE: flags = 0wx0200 val CS_SAVEBITS: flags = 0wx0800 val CS_BYTEALIGNCLIENT: flags = 0wx1000 val CS_BYTEALIGNWINDOW: flags = 0wx2000 val CS_GLOBALCLASS: flags = 0wx4000 val all = flags[CS_VREDRAW, CS_HREDRAW, CS_KEYCVTWINDOW, CS_DBLCLKS, CS_OWNDC, CS_CLASSDC, CS_NOKEYCVT, CS_NOCLOSE, CS_SAVEBITS, CS_BYTEALIGNCLIENT, CS_BYTEALIGNWINDOW, CS_GLOBALCLASS] val intersect = List.foldl (fn (a, b) => SysWord.andb(a,b)) all end (* Classes are either registered by the user, in which case they have ML callback functions, or they are built-in, such as Edit. *) datatype 'a ATOM = Registered of { proc: HWND * Message * 'a -> LRESULT * 'a, className: string } | SystemClass of string val Button: unit ATOM = SystemClass "Button" and ComboBox: unit ATOM = SystemClass "ComboBox" and ComboLBox: unit ATOM = SystemClass "ComboLBox" and DDEMLEvent: unit ATOM = SystemClass "DDEMLEvent" and Edit: unit ATOM = SystemClass "Edit" and ListBox: unit ATOM = SystemClass "ListBox" and MDIClient: unit ATOM = SystemClass "MDIClient" (* Maybe treat this specially. *) and ScrollBar: unit ATOM = SystemClass "ScrollBar" and Static: unit ATOM = SystemClass "Static" type 'a WNDCLASSEX = {style: Style.flags, wndProc: HWND * Message * 'a -> LRESULT * 'a, hInstance: HINSTANCE, hIcon: HICON option, hCursor: HCURSOR option, hbrBackGround: HBRUSH option, menuName: RESID option, className: string, hIconSm: HICON option} local val WNDPROC = PASCALFUNCTION4 (HWND, INT, POINTER, POINTER) POINTER val WNDCLASSEX = STRUCT12(INT,WORD,WNDPROC,INT,INT,HINSTANCE,HGDIOBJOPT, HGDIOBJOPT,HGDIOBJOPT,RESID,STRING,HGDIOBJOPT) val (fromCwndclassex, toCwndclassex, wndclassEx) = breakConversion WNDCLASSEX val CallWindowProc = call5 (user "CallWindowProcA") (WNDPROC, HWND, INT, POINTER, POINTER) POINTER in fun RegisterClassEx({style: Style.flags, wndProc: HWND * Message * 'a -> LRESULT * 'a, hInstance: HINSTANCE, hIcon: HICON option, hCursor: HCURSOR option, hbrBackGround: HBRUSH option, menuName: RESID option, className: string, hIconSm: HICON option}: 'a WNDCLASSEX): 'a ATOM = let (* The window procedure we pass to the C call is our dispatch function in the RTS. *) val windowProc = Message.mainCallbackFunction val cWndClass = toCwndclassex(sizeof wndclassEx, Style.toWord style, windowProc, 0, (* Class extra *) 0, (* Window extra *) hInstance, hIcon, hCursor, hbrBackGround, getOpt(menuName, IdAsInt 0), className, hIconSm) val res = call1 (user "RegisterClassExA") (POINTER) INT (address cWndClass) (* The result is supposed to be an atom but it doesn't always work to pass this directly to CreateWindow. *) in if res = 0 then raise OS.SysErr("RegisterClassEx", SOME(GetLastError())) else Registered{proc = wndProc, className = className} end fun GetClassInfoEx(hInst, class): 'a WNDCLASSEX = let val v = toCwndclassex(sizeof wndclassEx, 0w0, fn _ => toCint 0, 0, 0, hNull, NONE, NONE, NONE, IdAsInt 0, "", NONE) val res = call3(user "GetClassInfoExA") (HINSTANCE, STRING, POINTER) (SUCCESSSTATE "GetClassInfoEx") (hInst, class, address v) val (_, style, wproc, _, _, hInstance, hIcon, hCursor, hbrBackGround, menuName, className, hIconSm) = fromCwndclassex v val mName = case menuName of IdAsInt 0 => NONE | IdAsString "" => NONE | m => SOME m fun wndProc(hwnd, msg, state) = let val (msgId: int, wParam: vol, lParam: vol) = Message.compileMessage msg val res: vol = CallWindowProc(wproc, hwnd, msgId, wParam, lParam) in (Message.messageReturnFromParams(msg, wParam, lParam, res), state) end in {style = Style.fromWord style, wndProc = wndProc, hInstance = hInstance, hIcon = hIcon, hCursor = hCursor, hbrBackGround = hbrBackGround, menuName = mName, className = className, hIconSm = hIconSm } end end (* The underlying call can take either a string or an atom. I really don't know which is better here. *) val UnregisterClass = call2 (user "UnregisterClassA") (STRING, HINSTANCE) (SUCCESSSTATE "UnregisterClass") local val getClassName = call3 (user "GetClassNameA") (HWND, POINTER, INT) INT in fun GetClassName hwnd = getStringCall(fn (v, i) => getClassName(hwnd, v, i)) end (* The following functions are used with window classes. GetClassInfoEx GetClassLong GetWindowLong SetClassLong SetWindowLong Obsolete Functions GetClassInfo GetClassWord GetWindowWord RegisterClass SetClassWord SetWindowWord *) end end; polyml.5.2.1/mlsource/extra/Win/Clipboard.sml0000644000175000017500000002577510506226530020140 0ustar daviddavid(* Copyright (c) 2001 David C.J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure Clipboard : sig (* Clipboard formats. I've added CF_NONE, CF_PRIVATE, CF_GDIOBJ and CF_REGISTERED *) datatype ClipboardFormat = CF_NONE | CF_TEXT | CF_BITMAP | CF_METAFILEPICT | CF_SYLK | CF_DIF | CF_TIFF | CF_OEMTEXT | CF_DIB | CF_PALETTE | CF_PENDATA | CF_RIFF | CF_WAVE | CF_UNICODETEXT | CF_ENHMETAFILE | CF_OWNERDISPLAY | CF_DSPTEXT | CF_DSPBITMAP | CF_DSPMETAFILEPICT | CF_DSPENHMETAFILE | CF_PRIVATE of int | CF_GDIOBJ of int | CF_REGISTERED of int | CF_HDROP | CF_LOCALE type HBITMAP and HPALETTE and HWND and HDROP datatype CLIPHANDLE = CH_NONE | CH_TEXT of string | CH_BITMAP of HBITMAP | CH_METAFILEPICT of Metafile.METAFILEPICT | CH_SYLK of Word8Vector.vector | CH_DIF of Word8Vector.vector | CH_TIFF of Word8Vector.vector | CH_OEMTEXT of string | CH_DIB of Word8Vector.vector | CH_PALETTE of HPALETTE | CH_PENDATA of Word8Vector.vector | CH_RIFF of Word8Vector.vector | CH_WAVE of Word8Vector.vector | CH_UNICODETEXT of Word8Vector.vector | CH_ENHMETAFILE of Metafile.HENHMETAFILE | CH_OWNERDISPLAY of Word8Vector.vector | CH_DSPTEXT of Word8Vector.vector | CH_DSPBITMAP of Word8Vector.vector | CH_DSPMETAFILEPICT of Word8Vector.vector | CH_DSPENHMETAFILE of Word8Vector.vector | CH_PRIVATE of int * Word8Vector.vector | CH_GDIOBJ of int * Word8Vector.vector | CH_REGISTERED of int * Word8Vector.vector | CH_HDROP of HDROP | CH_LOCALE of Word8Vector.vector val ChangeClipboardChain : HWND * HWND -> bool val CloseClipboard : unit -> unit val CountClipboardFormats : unit -> int val EmptyClipboard : unit -> unit val EnumClipboardFormats : ClipboardFormat -> ClipboardFormat val GetClipboardData : ClipboardFormat -> CLIPHANDLE val GetClipboardFormatName : ClipboardFormat -> string val GetClipboardOwner : unit -> HWND val GetClipboardViewer : unit -> HWND val GetOpenClipboardWindow : unit -> HWND val GetPriorityClipboardFormat : ClipboardFormat list -> ClipboardFormat option val IsClipboardFormatAvailable : ClipboardFormat -> bool val OpenClipboard : HWND option -> unit val RegisterClipboardFormat : string -> ClipboardFormat val SetClipboardData : CLIPHANDLE -> unit val SetClipboardViewer : HWND -> HWND end = struct local open CInterface open Base val GMEM_SHARE = 0x2000 and GMEM_MOVEABLE = 0x0002 val GMEM_OPTS = IntInf.orb(GMEM_SHARE, GMEM_MOVEABLE) val (fromHG, toHG, _) = breakConversion HGLOBAL val (fromHPAL, toHPAL, _) = breakConversion HPALETTE val (fromHBIT, toHBIT, _) = breakConversion HBITMAP val (fromHENH, toHENH, _) = breakConversion HENHMETAFILE val (fromHDRP, toHDRP, _) = breakConversion HDROP val (fromMFP, toMFP, mfpStruct) = breakConversion GdiBase.METAFILEPICT in type HBITMAP = HBITMAP and HPALETTE = HPALETTE and HWND = HWND and HDROP = HDROP datatype ClipboardFormat = datatype ClipboardFormat (* The data is transferred to and from the clipboard in various formats. I've added this datatype to deal with them. *) datatype CLIPHANDLE = CH_NONE | CH_TEXT of string | CH_BITMAP of HBITMAP | CH_METAFILEPICT of Metafile.METAFILEPICT | CH_SYLK of Word8Vector.vector | CH_DIF of Word8Vector.vector | CH_TIFF of Word8Vector.vector | CH_OEMTEXT of string | CH_DIB of Word8Vector.vector | CH_PALETTE of HPALETTE | CH_PENDATA of Word8Vector.vector | CH_RIFF of Word8Vector.vector | CH_WAVE of Word8Vector.vector | CH_UNICODETEXT of Word8Vector.vector | CH_ENHMETAFILE of Metafile.HENHMETAFILE | CH_OWNERDISPLAY of Word8Vector.vector | CH_DSPTEXT of Word8Vector.vector | CH_DSPBITMAP of Word8Vector.vector | CH_DSPMETAFILEPICT of Word8Vector.vector | CH_DSPENHMETAFILE of Word8Vector.vector | CH_PRIVATE of int * Word8Vector.vector | CH_GDIOBJ of int * Word8Vector.vector | CH_REGISTERED of int * Word8Vector.vector | CH_HDROP of HDROP | CH_LOCALE of Word8Vector.vector val ChangeClipboardChain = call2 (user "ChangeClipboardChain") (HWND, HWND) BOOL and CloseClipboard = call0 (user "CloseClipboard") () (SUCCESSSTATE "CloseClipboard") and CountClipboardFormats = call0 (user "CountClipboardFormats") () INT and EmptyClipboard = call0 (user "EmptyClipboard") () (SUCCESSSTATE "EmptyClipboard") and EnumClipboardFormats = call1 (user "EnumClipboardFormats") (CLIPFORMAT) CLIPFORMAT and GetClipboardOwner = call0 (user "GetClipboardOwner") () HWND and GetClipboardViewer = call0 (user "GetClipboardViewer") () HWND and GetOpenClipboardWindow = call0 (user "GetOpenClipboardWindow") () HWND and IsClipboardFormatAvailable = call1 (user "IsClipboardFormatAvailable") (CLIPFORMAT) BOOL and OpenClipboard = call1 (user "OpenClipboard") (HWNDOPT) (SUCCESSSTATE "OpenClipboard") and RegisterClipboardFormat = CF_REGISTERED o call1 (user "RegisterClipboardFormat") (STRING) INT and SetClipboardViewer = call1 (user "SetClipboardViewer") (HWND) HWND (* SetClipboardData copies the data to the clipboard. It is possible to pass NULL as the handle and instead process the WM_RENDERFORMAT message. We don't support that. *) fun SetClipboardData(clip: CLIPHANDLE): unit = let (* Most clipboard data is passed in memory allocated using GlobalAlloc. *) fun globString (s: string):vol = let val hGlob = GlobalAlloc(GMEM_OPTS, size s) val mem = deref(GlobalLock hGlob) in fillCstring mem s; GlobalUnlock hGlob; toHG hGlob end and globMem (w: Word8Vector.vector): vol = let val length = Word8Vector.length w val hGlob = GlobalAlloc(GMEM_OPTS, length) val buf = deref(GlobalLock hGlob) fun copyToBuf (i, v): unit = assign Cchar (offset i Cchar buf) (toCint(Word8.toInt v)) in Word8Vector.appi copyToBuf w; GlobalUnlock hGlob; toHG hGlob end (* Convert the various data formats and get the format type to pass. *) val (cf, data) = case clip of CH_NONE => raise Fail "SetClipboardData: No data" | CH_TEXT t => (CF_TEXT, globString t) | CH_BITMAP b => (CF_BITMAP, toHBIT b) | CH_METAFILEPICT p => let val mfp = toMFP p val hGlob = GlobalAlloc(GMEM_OPTS, sizeof mfpStruct) in assign mfpStruct (deref(GlobalLock hGlob)) mfp; GlobalUnlock hGlob; (CF_METAFILEPICT, toHG hGlob) end | CH_SYLK m => (CF_SYLK, globMem m) | CH_DIF m => (CF_DIF, globMem m) | CH_TIFF m => (CF_TIFF, globMem m) | CH_OEMTEXT t => (CF_OEMTEXT, globString t) | CH_DIB m => (CF_DIB, globMem m) | CH_PALETTE p => (CF_PALETTE, toHPAL p) | CH_PENDATA m => (CF_PENDATA, globMem m) | CH_RIFF m => (CF_RIFF, globMem m) | CH_WAVE m => (CF_WAVE, globMem m) | CH_UNICODETEXT m => (CF_UNICODETEXT, globMem m) | CH_ENHMETAFILE mf => (CF_ENHMETAFILE, toHENH mf) | CH_OWNERDISPLAY m => (CF_OWNERDISPLAY, globMem m) | CH_DSPTEXT m => (CF_DSPTEXT, globMem m) | CH_DSPBITMAP m => (CF_DSPBITMAP, globMem m) | CH_DSPMETAFILEPICT m => (CF_DSPMETAFILEPICT, globMem m) | CH_DSPENHMETAFILE m => (CF_DSPENHMETAFILE, globMem m) | CH_PRIVATE(i, m) => (CF_PRIVATE i, globMem m) | CH_GDIOBJ(i, m) => (CF_GDIOBJ i, globMem m) | CH_REGISTERED(i, m) => (CF_REGISTERED i, globMem m) | CH_HDROP d => (CF_HDROP, toHDRP d) | CH_LOCALE m => (CF_LOCALE, globMem m) val res = call2(user "SetClipboardData") (CLIPFORMAT, POINTER) POINTER (cf, data) in if fromCint res = 0 then raise OS.SysErr("SetClipboardData", SOME(GetLastError())) else () end fun GetClipboardData(f: ClipboardFormat): CLIPHANDLE = let (* The result of GetClipboardData is a handle, usually but not always an HGLOBAL pointing to a piece of memory. *) val res = call1 (user "GetClipboardData") (CLIPFORMAT) POINTER (f) val _ = if fromCint res = 0 then raise OS.SysErr("GetClipboardData", SOME(GetLastError())) else () fun getMem(p: vol) = let val hg = fromHG p val len = GlobalSize hg val res = toWord8vec(GlobalLock hg, len) in GlobalUnlock hg; res end and getText(p: vol): string = let val hg = fromHG p val s = fromCstring(GlobalLock hg) in GlobalUnlock hg; s end in case f of CF_NONE => CH_NONE | CF_TEXT => CH_TEXT(getText res) | CF_BITMAP => CH_BITMAP(fromHBIT res) | CF_METAFILEPICT => let val hg = fromHG res val res = CH_METAFILEPICT(fromMFP(deref(GlobalLock hg))) in GlobalUnlock hg; res end | CF_SYLK => CH_SYLK(getMem res) | CF_DIF => CH_DIF(getMem res) | CF_TIFF => CH_TIFF(getMem res) | CF_OEMTEXT => CH_OEMTEXT(getText res) | CF_DIB => CH_DIB(getMem res) | CF_PALETTE => CH_PALETTE(fromHPAL res) | CF_PENDATA => CH_PENDATA(getMem res) | CF_RIFF => CH_RIFF(getMem res) | CF_WAVE => CH_WAVE(getMem res) | CF_UNICODETEXT => CH_UNICODETEXT(getMem res) | CF_ENHMETAFILE => CH_ENHMETAFILE(fromHENH res) | CF_OWNERDISPLAY => CH_OWNERDISPLAY(getMem res) | CF_DSPTEXT => CH_DSPTEXT(getMem res) | CF_DSPBITMAP => CH_DSPBITMAP(getMem res) | CF_DSPMETAFILEPICT => CH_DSPMETAFILEPICT(getMem res) | CF_DSPENHMETAFILE => CH_DSPENHMETAFILE(getMem res) | CF_PRIVATE i => CH_PRIVATE(i, getMem res) | CF_GDIOBJ i => CH_GDIOBJ(i, getMem res) | CF_REGISTERED i => CH_REGISTERED(i, getMem res) | CF_HDROP => CH_HDROP(fromHDRP res) | CF_LOCALE => CH_LOCALE(getMem res) end local val getformat = call3 (user "GetClipboardFormatNameA") (CLIPFORMAT, POINTER, INT) INT in (* Loop until we have read the whole string. The result may legitimately be a null string. *) fun GetClipboardFormatName(f: ClipboardFormat): string = getStringCall(fn (buff, n) => getformat(f, buff, n)) end fun GetPriorityClipboardFormat(l: ClipboardFormat list): ClipboardFormat option = let val (vec, count) = list2Vector CLIPFORMAT l val res = call2(user "GetPriorityClipboardFormat") (POINTER, INT) INT (vec, count) val (toClip, _, _) = breakConversion CLIPFORMAT in (* It returns 0 if the clipboard is empty, ~1 if it doesn't contain any of the requested formats and >0 if it contains one of the formats. We map ~1 to NONE. *) if res < 0 then NONE else SOME(toClip(toCint res)) end end end; (* Other clipboard functions: GetClipboardSequenceNumber - Windows 98 and NT 5.0 only *) polyml.5.2.1/mlsource/extra/Win/Clipping.sml0000644000175000017500000000646410313043363017775 0ustar daviddavid(* Copyright (c) 2001 David C.J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure Clipping : sig type HDC and HRGN type RECT = { top: int, left: int, bottom: int, right: int } type RegionOperation = Region.RegionOperation type ResultRegion = Region.ResultRegion val ExcludeClipRect : HDC * RECT -> ResultRegion val ExtSelectClipRgn : HDC * HRGN * RegionOperation -> ResultRegion val GetClipBox : HDC -> ResultRegion * RECT val GetClipRgn : HDC * HRGN -> unit val GetMetaRgn : HDC * HRGN -> unit val IntersectClipRect : HDC * RECT -> ResultRegion val OffsetClipRgn : HDC * int * int -> ResultRegion val PtVisible : HDC * int * int * bool -> bool val RectVisible : HDC * RECT -> bool val SelectClipPath : HDC * RegionOperation -> unit val SelectClipRgn : HDC * HRGN -> unit val SetMetaRgn : HDC -> unit end = struct local open CInterface Base GdiBase val XCOORD = INT : int Conversion val YCOORD = INT: int Conversion val XOFFSET = INT: int Conversion val YOFFSET = INT: int Conversion in type RegionOperation = RegionOperation and ResultRegion = ResultRegion type RECT = RECT and HDC = HDC and HRGN = HRGN val ExtSelectClipRgn = call3(gdi "ExtSelectClipRgn") (HDC,HRGN,REGIONOPERATION) RESULTREGION val GetClipRgn = call2(gdi "GetClipRgn") (HDC,HRGN) (SUCCESSSTATE "GetClipRgn") val GetMetaRgn = call2(gdi "GetMetaRgn") (HDC,HRGN) (SUCCESSSTATE "GetMetaRgn") val OffsetClipRgn = call3(gdi "OffsetClipRgn") (HDC,XOFFSET,YOFFSET) RESULTREGION val RectVisible = call2(gdi "RectVisible") (HDC,POINTERTO RECT) BOOL val PtVisible = call4(gdi "PtVisible") (HDC,XCOORD,YCOORD,BOOL) BOOL val SelectClipPath = call2(gdi "SelectClipPath") (HDC,REGIONOPERATION) (SUCCESSSTATE "SelectClipPath") val SelectClipRgn = call2(gdi "SelectClipRgn") (HDC,HRGN) (SUCCESSSTATE "SelectClipRgn") val SetMetaRgn = call1(gdi "SetMetaRgn") (HDC) (SUCCESSSTATE "SetMetaRgn") fun ExcludeClipRect (h,{left,top,right,bottom}: RECT) = call5 (gdi "ExcludeClipRect") (HDC,LONG,LONG,LONG,LONG) RESULTREGION (h,left,top,right,bottom) fun IntersectClipRect (h,{left,top,right,bottom}: RECT) = call5 (gdi "IntersectClipRect") (HDC,LONG,LONG,LONG,LONG) RESULTREGION (h,left,top,right,bottom) fun GetClipBox hdc = let val (from,_,rtype) = breakConversion RECT val va = address (alloc 1 rtype) val res = call2 (gdi "GetClipBox") (HDC, POINTER) RESULTREGION (hdc, va) in (res, from(deref va)) end end end; polyml.5.2.1/mlsource/extra/Win/Color.sml0000644000175000017500000001660210313043363017301 0ustar daviddavid(* Copyright (c) 2001 David C.J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure Color (* Use American spelling for consistency. *): sig type HPALETTE and HDC datatype PaletteEntryFlag = PC_EXPLICIT | PC_NOCOLLAPSE | PC_NULL | PC_RESERVED type PALETTEENTRY = {red: int, green: int, blue: int, flags: PaletteEntryFlag} type COLORREF val toRGB : COLORREF -> {red: Int.int, blue: Int.int, green: Int.int} val RGB : {red: int, blue: int, green: int} -> COLORREF val PALETTERGB : {red: int, blue: int, green: int} -> COLORREF type SystemPaletteUse val SYSPAL_ERROR : SystemPaletteUse val SYSPAL_NOSTATIC : SystemPaletteUse val SYSPAL_STATIC : SystemPaletteUse val AnimatePalette : HPALETTE * int * PALETTEENTRY list -> bool val CreateHalftonePalette : HDC -> HPALETTE val CreatePalette : PALETTEENTRY list -> HPALETTE val GetNearestColor : HDC * COLORREF -> COLORREF val GetNearestPaletteIndex : HPALETTE * COLORREF -> int val GetPaletteEntries : HPALETTE * int * int -> PALETTEENTRY list val GetSystemPaletteEntries : HPALETTE * int * int -> PALETTEENTRY list val GetSystemPaletteUse : HDC -> SystemPaletteUse val RealizePalette : HDC -> int val ResizePalette : HPALETTE * int -> unit val SelectPalette : HDC * HPALETTE * bool -> HPALETTE val SetPaletteEntries : HPALETTE * int * PALETTEENTRY list -> unit val SetSystemPaletteUse : HDC * SystemPaletteUse -> SystemPaletteUse val UnrealizeObject : HPALETTE -> unit val UpdateColors : HDC -> unit end = struct local open CInterface Base in type HDC = HDC and HPALETTE = HPALETTE open GdiBase local datatype SystemPaletteUse = W of int in type SystemPaletteUse = SystemPaletteUse val SYSTEMPALETTEUSE = absConversion {abs = W, rep = fn W n => n} INT val SYSPAL_ERROR = W (0) val SYSPAL_STATIC = W (1) val SYSPAL_NOSTATIC = W (2) end datatype PaletteEntryFlag = PC_NULL | PC_RESERVED | PC_EXPLICIT | PC_NOCOLLAPSE type PALETTEENTRY = {red: int, green: int, blue: int, flags: PaletteEntryFlag} local open LargeWord infix 7 andb infix 6 orb infix 4 << >> fun toPE({red, green, blue, flags}: PALETTEENTRY) = fromInt red andb 0wxff orb (fromInt green andb 0wxff << 0w8) orb (fromInt blue andb 0wxff << 0w16) orb (case flags of PC_NULL => 0w0 | PC_RESERVED => 0w1 << 0w24 | PC_EXPLICIT => 0w2 << 0w24 | PC_NOCOLLAPSE => 0w4 << 0w24) fun fromPE w : PALETTEENTRY = let val red = toInt(w andb 0wxff) val green = toInt((w >> 0w8) andb 0wxff) val blue = toInt((w >> 0w16) andb 0wxff) val flags = case toInt(w >> 0w16) of 0 => PC_NULL | 1 => PC_RESERVED | 2 => PC_EXPLICIT | 4 => PC_NOCOLLAPSE | _ => raise Match in {red=red, green=green, blue=blue, flags=flags}: PALETTEENTRY end in val PALETTEENTRY = absConversion{abs = fromPE, rep = toPE} WORD end val GetSystemPaletteUse = call1(gdi "GetSystemPaletteUse") (HDC) SYSTEMPALETTEUSE val RealizePalette = call1(gdi "RealizePalette") (HDC) INT val ResizePalette = call2(gdi "ResizePalette") (HPALETTE,INT) (SUCCESSSTATE "ResizePalette") val SelectPalette = call3(gdi "SelectPalette") (HDC,HPALETTE,BOOL) HPALETTE val SetSystemPaletteUse = call2(gdi "SetSystemPaletteUse") (HDC,SYSTEMPALETTEUSE) SYSTEMPALETTEUSE val UpdateColors = call1(gdi "UpdateColors") (HDC) (SUCCESSSTATE "UpdateColors") val CreateHalftonePalette = call1(gdi "CreateHalftonePalette") (HDC) HPALETTE val GetNearestColor = call2 (gdi "GetNearestColor") (HDC,COLORREF) COLORREF val GetNearestPaletteIndex = call2 (gdi "GetNearestPaletteIndex") (HPALETTE,COLORREF) (INT) val UnrealizeObject = call1(gdi "UnrealizeObject") (HPALETTE) (SUCCESSSTATE "UnrealizeObject") fun AnimatePalette (h,start,pl) = let val count = List.length pl val (_, toPE, paletteEntry) = breakConversion PALETTEENTRY val pal = alloc count paletteEntry (* Copy the elements into the array. *) val _ = List.foldl (fn (pe, n) => (assign Clong (offset n Clong pal) (toPE pe); n+1)) 0 pl in call4 (gdi "AnimatePalette") (HPALETTE,INT,INT,POINTER) (BOOL) (h,start,count,address pal) end fun CreatePalette (pl) = let val count = List.length pl val (_, toPE, paletteEntry) = breakConversion PALETTEENTRY (* A LOGPALETTE consists of a version number, the number of palette entries and the entries themselves. It seems the version is 0x300. *) val logpal = alloc (count+1) Clong val _ = assign Cshort (offset 0 Cshort logpal) (toCshort 0x300) val u = assign Cshort (offset 1 Cshort logpal) (toCshort count) val _ = List.foldl (fn (pe, n) => (assign Clong (offset n Clong logpal) (toPE pe); n+1)) 1 pl in call1 (gdi "CreatePalette") (POINTER) (HPALETTE) (address logpal) end fun GetPaletteEntries (h,start,no) = let val (fromPE, _, paletteEntry) = breakConversion PALETTEENTRY val palarr = alloc no paletteEntry val res = call4 (gdi "GetPaletteEntries") (HPALETTE,INT,INT,POINTER) (INT) (h,start,no,address palarr) in if res <= 0 then raise OS.SysErr("GetPaletteEntries", SOME(GetLastError())) else List.tabulate(res, fn i => fromPE (offset i Clong palarr)) end fun GetSystemPaletteEntries (h,start,no) = let val (fromPE, _, paletteEntry) = breakConversion PALETTEENTRY val palarr = alloc no paletteEntry val res = call4 (gdi "GetSystemPaletteEntries") (HPALETTE,INT,INT,POINTER) (INT) (h,start,no,address palarr) in if res <= 0 then raise OS.SysErr("GetSystemPaletteEntries", SOME(GetLastError())) else List.tabulate(res, fn i => fromPE (offset i Clong palarr)) end fun SetPaletteEntries (h,start,pl) = let val count = List.length pl val (_, toPE, paletteEntry) = breakConversion PALETTEENTRY val pal = alloc count paletteEntry val _ = List.foldl (fn (pe, n) => (assign Clong (offset n Clong pal) (toPE pe); n+1)) 0 pl in call4 (gdi "SetPaletteEntries") (HPALETTE,INT,INT,POINTER) (SUCCESSSTATE "SetPaletteEntries") (h,start,count,address pal) end (* Other Colour functions: GetColorAdjustment GetSystemPaletteUse SetColorAdjustment *) end end; (* Install a pretty printer for COLORREF. *) local open Color fun printColorRef (put, beg, brk, nd) _ _ x = let val {red, green, blue} = toRGB x in put(concat["RGB{red=", Int.toString red, ",green=", Int.toString green, ",blue=", Int.toString blue, "}"]) end in val _ = PolyML.install_pp printColorRef end; polyml.5.2.1/mlsource/extra/Win/ComboBase.sml0000644000175000017500000000246310313043363020055 0ustar daviddavid(* Copyright (c) 2001 David C.J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure ComboBase = struct local open CInterface Base in datatype CBDirAttr = DDL_READWRITE | DDL_READONLY | DDL_HIDDEN | DDL_SYSTEM | DDL_DIRECTORY | DDL_ARCHIVE | DDL_POSTMSGS | DDL_DRIVES | DDL_EXCLUSIVE local val tab = [ (DDL_READWRITE, 0x0000), (DDL_READONLY, 0x0001), (DDL_HIDDEN, 0x0002), (DDL_SYSTEM, 0x0004), (DDL_DIRECTORY, 0x0010), (DDL_ARCHIVE, 0x0020), (DDL_POSTMSGS, 0x2000), (DDL_DRIVES, 0x4000), (DDL_EXCLUSIVE, 0x8000) ] in val CBDIRATTRS = tableSetConversion(tab, NONE) end end end; polyml.5.2.1/mlsource/extra/Win/Combobox.sml0000644000175000017500000001345510313043363017776 0ustar daviddavid(* Copyright (c) 2001 David C.J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* Comboboxes. *) structure Combobox: sig structure Style: sig include BIT_FLAGS where type flags = Window.Style.flags val WS_OVERLAPPED: flags and WS_POPUP: flags and WS_CHILD: flags and WS_MINIMIZE: flags and WS_VISIBLE: flags and WS_DISABLED:flags and WS_CLIPSIBLINGS:flags and WS_CLIPCHILDREN:flags and WS_MAXIMIZE:flags and WS_CAPTION:flags and WS_BORDER:flags and WS_DLGFRAME:flags and WS_VSCROLL:flags and WS_HSCROLL:flags and WS_SYSMENU:flags and WS_THICKFRAME:flags and WS_GROUP:flags and WS_TABSTOP:flags and WS_MINIMIZEBOX:flags and WS_MAXIMIZEBOX:flags and WS_TILED:flags and WS_ICONIC:flags and WS_SIZEBOX:flags and WS_OVERLAPPEDWINDOW:flags and WS_TILEDWINDOW:flags and WS_POPUPWINDOW: flags and WS_CHILDWINDOW: flags and CBS_SIMPLE: flags and CBS_DROPDOWN: flags and CBS_DROPDOWNLIST: flags and CBS_OWNERDRAWFIXED: flags and CBS_OWNERDRAWVARIABLE: flags and CBS_AUTOHSCROLL: flags and CBS_OEMCONVERT: flags and CBS_SORT: flags and CBS_HASSTRINGS: flags and CBS_NOINTEGRALHEIGHT: flags and CBS_DISABLENOSCROLL: flags and CBS_UPPERCASE: flags and CBS_LOWERCASE: flags end structure Notifications: sig val CBN_SELCHANGE: int val CBN_DBLCLK: int val CBN_SETFOCUS: int val CBN_KILLFOCUS: int val CBN_EDITCHANGE: int val CBN_EDITUPDATE: int val CBN_DROPDOWN: int val CBN_CLOSEUP: int val CBN_SELENDOK: int val CBN_SELENDCANCEL: int end datatype CBDirAttr = DDL_READWRITE | DDL_READONLY | DDL_HIDDEN | DDL_SYSTEM | DDL_DIRECTORY | DDL_ARCHIVE | DDL_POSTMSGS | DDL_DRIVES | DDL_EXCLUSIVE end = struct open ComboBase structure Style = struct open Window.Style (* Include all the windows styles. *) val CBS_SIMPLE = fromWord 0wx0001 val CBS_DROPDOWN = fromWord 0wx0002 val CBS_DROPDOWNLIST = fromWord 0wx0003 val CBS_OWNERDRAWFIXED = fromWord 0wx0010 val CBS_OWNERDRAWVARIABLE = fromWord 0wx0020 val CBS_AUTOHSCROLL = fromWord 0wx0040 val CBS_OEMCONVERT = fromWord 0wx0080 val CBS_SORT = fromWord 0wx0100 val CBS_HASSTRINGS = fromWord 0wx0200 val CBS_NOINTEGRALHEIGHT = fromWord 0wx0400 val CBS_DISABLENOSCROLL = fromWord 0wx0800 val CBS_UPPERCASE = fromWord 0wx2000 val CBS_LOWERCASE = fromWord 0wx4000 val all = flags[Window.Style.all, CBS_SIMPLE, CBS_DROPDOWN, CBS_DROPDOWNLIST, CBS_OWNERDRAWFIXED, CBS_OWNERDRAWVARIABLE, CBS_AUTOHSCROLL, CBS_OEMCONVERT, CBS_SORT, CBS_HASSTRINGS, CBS_NOINTEGRALHEIGHT, CBS_DISABLENOSCROLL, CBS_UPPERCASE, CBS_LOWERCASE] val intersect = List.foldl (fn (a, b) => fromWord(SysWord.andb(toWord a, toWord b))) all end structure Notifications = struct val CBN_SELCHANGE = 1 val CBN_DBLCLK = 2 val CBN_SETFOCUS = 3 val CBN_KILLFOCUS = 4 val CBN_EDITCHANGE = 5 val CBN_EDITUPDATE = 6 val CBN_DROPDOWN = 7 val CBN_CLOSEUP = 8 val CBN_SELENDOK = 9 val CBN_SELENDCANCEL = 10 end (* DlgDirListComboBox DlgDirSelectEx DlgDirSelectComboBoxEx *) end; (* let open Combobox.Style val flagTable = [(CBS_DROPDOWNLIST, "CBS_DROPDOWNLIST"), (* Must come before the next two. *) (CBS_SIMPLE, "CBS_SIMPLE"), (CBS_DROPDOWN, "CBS_DROPDOWN"), (CBS_OWNERDRAWFIXED, "CBS_OWNERDRAWFIXED"), (CBS_OWNERDRAWVARIABLE, "CBS_OWNERDRAWVARIABLE"), (CBS_AUTOHSCROLL, "CBS_AUTOHSCROLL"), (CBS_OEMCONVERT, "CBS_OEMCONVERT"), (CBS_SORT, "CBS_SORT"), (CBS_HASSTRINGS, "CBS_HASSTRINGS"), (CBS_NOINTEGRALHEIGHT, "CBS_NOINTEGRALHEIGHT"), (CBS_DISABLENOSCROLL, "CBS_DISABLENOSCROLL"), (CBS_UPPERCASE, "CBS_UPPERCASE"), (CBS_LOWERCASE, "CBS_LOWERCASE"), (WS_POPUP, "WS_POPUP"), (WS_CHILD, "WS_CHILD"), (WS_MINIMIZE, "WS_MINIMIZE"), (WS_VISIBLE, "WS_VISIBLE"), (WS_DISABLED, "WS_DISABLED"), (WS_CLIPSIBLINGS, "WS_CLIPSIBLINGS"), (WS_CLIPCHILDREN, "WS_CLIPCHILDREN"), (WS_MAXIMIZE, "WS_MAXIMIZE"), (WS_CAPTION, "WS_CAPTION"), (WS_BORDER, "WS_BORDER"), (WS_DLGFRAME, "WS_DLGFRAME"), (WS_VSCROLL, "WS_VSCROLL"), (WS_HSCROLL, "WS_HSCROLL"), (WS_SYSMENU, "WS_SYSMENU"), (WS_THICKFRAME, "WS_THICKFRAME"), (WS_GROUP, "WS_GROUP"), (WS_TABSTOP, "WS_TABSTOP"), (WS_MINIMIZEBOX, "WS_MINIMIZEBOX"), (WS_MAXIMIZEBOX, "WS_MAXIMIZEBOX")] fun accumulateFlags f [] = [] | accumulateFlags f ((w, s)::t) = if allSet(w, f) then s :: accumulateFlags(clear(w, f)) t else accumulateFlags f t fun printFlags(put, beg, brk, nd) depth _ x = (* This is just the code to print a list. *) let val stringFlags = accumulateFlags x flagTable fun plist [] depth = () | plist _ 0 = put "..." | plist [h] depth = put h | plist (h::t) depth = ( put (h^","); brk (1, 0); plist t (depth - 1) ) in beg (3, false); put "["; if depth <= 0 then put "..." else plist stringFlags depth; put "]"; nd () end in PolyML.install_pp printFlags end; *) polyml.5.2.1/mlsource/extra/Win/CommonControls.sml0000644000175000017500000003067510676746310021223 0ustar daviddavid(* Copyright (c) 2007 David C.J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* Common controls. *) structure CommonControls: sig type HWND and HINSTANCE and HBITMAP val InitCommonControls: unit->unit structure ToolbarStyle: sig include BIT_FLAGS where type flags = Window.Style.flags val WS_OVERLAPPED: flags and WS_POPUP: flags and WS_CHILD: flags and WS_MINIMIZE: flags and WS_VISIBLE: flags and WS_DISABLED:flags and WS_CLIPSIBLINGS:flags and WS_CLIPCHILDREN:flags and WS_MAXIMIZE:flags and WS_CAPTION:flags and WS_BORDER:flags and WS_DLGFRAME:flags and WS_VSCROLL:flags and WS_HSCROLL:flags and WS_SYSMENU:flags and WS_THICKFRAME:flags and WS_GROUP:flags and WS_TABSTOP:flags and WS_MINIMIZEBOX:flags and WS_MAXIMIZEBOX:flags and WS_TILED:flags and WS_ICONIC:flags and WS_SIZEBOX:flags and WS_OVERLAPPEDWINDOW:flags and WS_TILEDWINDOW:flags and WS_POPUPWINDOW:flags and WS_CHILDWINDOW:flags and TBSTYLE_BUTTON:flags and TBSTYLE_SEP:flags and TBSTYLE_CHECK:flags and TBSTYLE_GROUP:flags and TBSTYLE_CHECKGROUP:flags and TBSTYLE_DROPDOWN:flags and TBSTYLE_AUTOSIZE:flags and TBSTYLE_NOPREFIX:flags and TBSTYLE_TOOLTIPS:flags and TBSTYLE_WRAPABLE:flags and TBSTYLE_ALTDRAG:flags and TBSTYLE_FLAT:flags and TBSTYLE_LIST:flags and TBSTYLE_CUSTOMERASE:flags and TBSTYLE_REGISTERDROP:flags and TBSTYLE_TRANSPARENT:flags and BTNS_BUTTON:flags and BTNS_SEP:flags and BTNS_CHECK:flags and BTNS_GROUP:flags and BTNS_CHECKGROUP:flags and BTNS_DROPDOWN:flags and BTNS_AUTOSIZE:flags and BTNS_NOPREFIX:flags and BTNS_WHOLEDROPDOWN:flags end structure ToolbarState: sig include BIT_FLAGS val TBSTATE_CHECKED: flags and TBSTATE_PRESSED: flags and TBSTATE_ENABLED: flags and TBSTATE_HIDDEN: flags and TBSTATE_INDETERMINATE: flags and TBSTATE_WRAP: flags and TBSTATE_ELLIPSES: flags and TBSTATE_MARKED : flags end datatype ToolbarResource = ToolbarHandle of HBITMAP | ToolbarResource of HINSTANCE*Resource.RESID datatype ParentType = datatype Window.ParentType type TBBUTTON = { iBitmap: int, idCommand: int, fsState: ToolbarState.flags, fsStyle: ToolbarStyle.flags, dwData: int, isString: int}; val CreateToolbarEx: { relation: ParentType, style: ToolbarStyle.flags, nBitmaps: int, bitmaps: ToolbarResource, buttons: TBBUTTON list, xButton: int, yButton: int, xBitmap: int, yBitmap: int} -> HWND val CreateStatusWindow: { relation: ParentType, style: Window.Style.flags, text: string } -> HWND val SB_SIMPLEID: int structure StatusBarType: sig include BIT_FLAGS val SBT_NOBORDERS: flags and SBT_OWNERDRAW: flags and SBT_POPOUT: flags and SBT_RTLREADING : flags and SBT_TOOLTIPS: flags end (* Creating messages here is just too complicated. It's easier to do this with functions to send the message and deal with the result. *) val StatusBarSetText: {hWnd: HWND, iPart: int, uType: StatusBarType.flags, text: string}->int val StatusBarGetText: HWND*int -> string * StatusBarType.flags val StatusBarSetParts: HWND * int list -> bool end = struct datatype ParentType = datatype Window.ParentType local open CInterface open Globals open Base in type HWND = HWND and HINSTANCE = HINSTANCE and HBITMAP = HBITMAP val InitCommonControls = call0(comctl "InitCommonControls") () VOID structure ToolbarStyle = struct open Window.Style (* Include all the windows styles. *) val TBSTYLE_BUTTON = fromWord 0w0 val TBSTYLE_SEP = fromWord 0w1 val TBSTYLE_CHECK = fromWord 0w2 val TBSTYLE_GROUP = fromWord 0w4 val TBSTYLE_CHECKGROUP = flags[TBSTYLE_GROUP,TBSTYLE_CHECK] val TBSTYLE_DROPDOWN = fromWord 0w8 val TBSTYLE_AUTOSIZE = fromWord 0w16 val TBSTYLE_NOPREFIX = fromWord 0w32 val TBSTYLE_TOOLTIPS = fromWord 0w256 val TBSTYLE_WRAPABLE = fromWord 0w512 val TBSTYLE_ALTDRAG = fromWord 0w1024 val TBSTYLE_FLAT = fromWord 0w2048 val TBSTYLE_LIST = fromWord 0w4096 val TBSTYLE_CUSTOMERASE = fromWord 0w8192 val TBSTYLE_REGISTERDROP = fromWord 0wx4000 val TBSTYLE_TRANSPARENT = fromWord 0wx8000 (* -- These are used with TB_SETEXTENDEDSTYLE/TB_GETEXTENDEDSTYLE val TBSTYLE_EX_DRAWDDARROWS = fromWord 0wx00000001 val TBSTYLE_EX_MIXEDBUTTONS = fromWord 0w8 val TBSTYLE_EX_HIDECLIPPEDBUTTONS = fromWord 0w16 val TBSTYLE_EX_DOUBLEBUFFER = fromWord 0wx80*) val BTNS_BUTTON = TBSTYLE_BUTTON val BTNS_SEP = TBSTYLE_SEP val BTNS_CHECK = TBSTYLE_CHECK val BTNS_GROUP = TBSTYLE_GROUP val BTNS_CHECKGROUP = TBSTYLE_CHECKGROUP val BTNS_DROPDOWN = TBSTYLE_DROPDOWN val BTNS_AUTOSIZE = TBSTYLE_AUTOSIZE val BTNS_NOPREFIX = TBSTYLE_NOPREFIX val BTNS_WHOLEDROPDOWN = fromWord 0wx0080 val all = flags[Window.Style.all, TBSTYLE_BUTTON, TBSTYLE_SEP, TBSTYLE_CHECK, TBSTYLE_GROUP, TBSTYLE_DROPDOWN, TBSTYLE_AUTOSIZE, TBSTYLE_NOPREFIX, TBSTYLE_TOOLTIPS, TBSTYLE_WRAPABLE, TBSTYLE_ALTDRAG, TBSTYLE_FLAT, TBSTYLE_LIST, TBSTYLE_CUSTOMERASE, TBSTYLE_TRANSPARENT, BTNS_WHOLEDROPDOWN] val intersect = List.foldl (fn (a, b) => fromWord(SysWord.andb(toWord a, toWord b))) all end structure ToolbarState:> sig include BIT_FLAGS val TBSTATE_CHECKED: flags and TBSTATE_PRESSED: flags and TBSTATE_ENABLED: flags and TBSTATE_HIDDEN: flags and TBSTATE_INDETERMINATE: flags and TBSTATE_WRAP: flags and TBSTATE_ELLIPSES: flags and TBSTATE_MARKED : flags end = struct type flags = SysWord.word fun toWord f = f fun fromWord f = f val flags = List.foldl (fn (a, b) => SysWord.orb(a,b)) 0w0 fun allSet (fl1, fl2) = SysWord.andb(fl1, fl2) = fl1 fun anySet (fl1, fl2) = SysWord.andb(fl1, fl2) <> 0w0 fun clear (fl1, fl2) = SysWord.andb(SysWord.notb fl1, fl2) val TBSTATE_CHECKED = 0w1 val TBSTATE_PRESSED = 0w2 val TBSTATE_ENABLED = 0w4 val TBSTATE_HIDDEN = 0w8 val TBSTATE_INDETERMINATE = 0w16 val TBSTATE_WRAP = 0w32 val TBSTATE_ELLIPSES = 0wx40 val TBSTATE_MARKED = 0wx0080 val all = flags[TBSTATE_CHECKED, TBSTATE_PRESSED, TBSTATE_ENABLED, TBSTATE_HIDDEN, TBSTATE_INDETERMINATE, TBSTATE_WRAP, TBSTATE_ELLIPSES, TBSTATE_MARKED] val intersect = List.foldl (fn (a, b) => fromWord(SysWord.andb(toWord a, toWord b))) all end datatype ToolbarResource = ToolbarHandle of HBITMAP | ToolbarResource of HINSTANCE*Resource.RESID type TBBUTTON = { iBitmap: int, idCommand: int, fsState: ToolbarState.flags, fsStyle: ToolbarStyle.flags, dwData: int, isString: int}; val TBBUTTON = STRUCT6(INT, INT, CHAR, CHAR, INT, INT); val (_, _, tbButton) = breakConversion TBBUTTON fun CreateToolbarEx { relation: ParentType, style: ToolbarStyle.flags, nBitmaps: int, bitmaps: ToolbarResource, buttons: TBBUTTON list, xButton: int, yButton: int, xBitmap: int, yBitmap: int}: HWND = let (* We use the general form although this is really only ever a child. *) val (parent, childId, styleWord) = WinBase.unpackWindowRelation(relation, style) fun mapToStruct({iBitmap, idCommand, fsState, fsStyle, dwData, isString}:TBBUTTON) = (iBitmap, idCommand, chr(LargeWord.toInt(ToolbarState.toWord fsState)), chr(LargeWord.toInt(ToolbarStyle.toWord fsStyle)), dwData, isString) val (buttonVec, nButtons) = list2Vector TBBUTTON (map mapToStruct buttons) val CreateToolbarEx = call13 (comctl "CreateToolbarEx") (HWND,WORD,UINT,INT,HINSTANCE,RESID,POINTER,INT,INT,INT,INT,INT,UINT) HWND val (hBMInst, wBMID) = case bitmaps of ToolbarHandle hbm => (hinstanceNull, IdAsInt(intOfHandle hbm)) | ToolbarResource(hi, wb) => (hi, wb) val res = CreateToolbarEx(parent, styleWord, childId, nBitmaps, hBMInst, wBMID, buttonVec, nButtons, xButton, yButton, xBitmap, yBitmap, sizeof tbButton) in if isHNull res then raise OS.SysErr("CreateToolbarEx", SOME(GetLastError())) else (); res end fun CreateStatusWindow{ relation: ParentType, style: Window.Style.flags, text: string } = let val (parent, childId, styleWord) = WinBase.unpackWindowRelation(relation, style) val CreateStatusWindow = call4 (comctl "CreateStatusWindowA") (WORD,STRING,HWND,UINT) HWND val res = CreateStatusWindow(styleWord, text, parent, childId) in if isHNull res then raise OS.SysErr("CreateToolbarEx", SOME(GetLastError())) else (); res end val SB_SIMPLEID = 0x00ff structure StatusBarType: sig include BIT_FLAGS val SBT_NOBORDERS: flags and SBT_OWNERDRAW: flags and SBT_POPOUT: flags and SBT_RTLREADING : flags and SBT_TOOLTIPS: flags end = struct type flags = SysWord.word fun toWord f = f fun fromWord f = f val flags = List.foldl (fn (a, b) => SysWord.orb(a,b)) 0w0 fun allSet (fl1, fl2) = SysWord.andb(fl1, fl2) = fl1 fun anySet (fl1, fl2) = SysWord.andb(fl1, fl2) <> 0w0 fun clear (fl1, fl2) = SysWord.andb(SysWord.notb fl1, fl2) val SBT_NOBORDERS = 0w256 val SBT_OWNERDRAW = 0wx1000 val SBT_POPOUT = 0w512 val SBT_RTLREADING = 0w1024 val SBT_TOOLTIPS = 0wx0800 val all = flags[SBT_NOBORDERS, SBT_OWNERDRAW, SBT_POPOUT, SBT_RTLREADING, SBT_TOOLTIPS] val intersect = List.foldl (fn (a, b) => fromWord(SysWord.andb(toWord a, toWord b))) all end; val sendMsg = call4(user "SendMessageA") (HWND, INT, POINTER, POINTER) UINT fun StatusBarSetText{hWnd, iPart, uType, text} = sendMsg(hWnd, 0x401, toCint(IntInf.orb(iPart, LargeWord.toInt(StatusBarType.toWord uType))), toCstring text) fun StatusBarGetText(hWnd, iPart): string * StatusBarType.flags = let val result1 = sendMsg(hWnd, 0x403, toCint iPart, toCint 0); val length = LOWORD result1 val flags = StatusBarType.fromWord(LargeWord.fromInt(HIWORD result1)) in if StatusBarType.anySet(flags, StatusBarType.SBT_OWNERDRAW) then ("", flags) else let val buff = address(alloc (length+1) Cchar) val reply = sendMsg(hWnd, 0x402, toCint iPart, buff) in (if reply = 0 then "" else fromCstring buff, flags) end end fun StatusBarSetParts(hWnd, parts: int list): bool = let val (vec, nParts) = list2Vector INT parts in sendMsg(hWnd, 0x404, toCint nParts, vec) <> 0 end (* | compileMessage (SB_GETTEXT { iPart: int, text: string ref, length: int }) = (* Another case, like LB_GETTEXT. where we don't know the length so we add an extra argument to the ML message. *) (0x402, toCint iPart, address(alloc (length+1) Cchar)*) (* | compileMessage (SB_SETTEXT { iPart: int, uType: StatusBarType, text: string}) = (0x401, toCint 0, toCstring text) | compileMessage (SB_GETTEXT _) = (0x402, toCint 0, toCInt 0) | compileMessage (SB_GETTEXTLENGTH _) = (0x403, toCint 0, toCInt 0) | compileMessage (SB_SETPARTS _) = (0x404, toCint 0, toCInt 0) | compileMessage (SB_GETPARTS _) = (0x406, toCint 0, toCInt 0) | compileMessage (SB_GETBORDERS _) = (0x407, toCint 0, toCInt 0) | compileMessage (SB_SETMINHEIGHT _) = (0x408, toCint 0, toCInt 0) | compileMessage (SB_SIMPLE _) = (0x409, toCint 0, toCInt 0) | compileMessage (SB_GETRECT _) = (0x40A, toCint 0, toCInt 0)*) end end; polyml.5.2.1/mlsource/extra/Win/CommonDialog.sml0000644000175000017500000013572710506226530020610 0ustar daviddavid(* Copyright (c) 2001 David C.J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* Common dialogues. *) structure CommonDialog : sig type HWND and HDC and COLORREF = Color.COLORREF and HINSTANCE type POINT = { x: int, y: int } type RECT = { left: int, top: int, right: int, bottom: int } (* Error codes *) datatype CDERR = DIALOGFAILURE | GENERALCODES | STRUCTSIZE | INITIALIZATION | NOTEMPLATE | NOHINSTANCE | LOADSTRFAILURE | FINDRESFAILURE | LOADRESFAILURE | LOCKRESFAILURE | MEMALLOCFAILURE | MEMLOCKFAILURE | NOHOOK | REGISTERMSGFAIL | PRINTERCODES | SETUPFAILURE | PARSEFAILURE | RETDEFFAILURE | LOADDRVFAILURE | GETDEVMODEFAIL | INITFAILURE | NODEVICES | NODEFAULTPRN | DNDMMISMATCH | CREATEICFAILURE | PRINTERNOTFOUND | DEFAULTDIFFERENT | CHOOSEFONTCODES | NOFONTS | MAXLESSTHANMIN | FILENAMECODES | SUBCLASSFAILURE | INVALIDFILENAME | BUFFERTOOSMALL | FINDREPLACECODES | BUFFERLENGTHZERO | CHOOSECOLORCODES val CommDlgExtendedError : unit -> CDERR (* ChooseColor *) structure ChooseColorFlags : sig include BIT_FLAGS val CC_ANYCOLOR : flags val CC_FULLOPEN : flags val CC_PREVENTFULLOPEN : flags val CC_RGBINIT : flags val CC_SHOWHELP : flags val CC_SOLIDCOLOR : flags end type CHOOSECOLOR = { owner: HWND option, result: COLORREF, customColors: COLORREF list, flags: ChooseColorFlags.flags } val ChooseColor : CHOOSECOLOR -> CHOOSECOLOR option (* ChooseFont *) structure ChooseFontFlags : sig include BIT_FLAGS val CF_ANSIONLY : flags val CF_APPLY : flags val CF_BOTH : flags val CF_EFFECTS : flags val CF_FIXEDPITCHONLY : flags val CF_FORCEFONTEXIST : flags val CF_NOFACESEL : flags val CF_NOOEMFONTS : flags val CF_NOSCRIPTSEL : flags val CF_NOSIMULATIONS : flags val CF_NOSIZESEL : flags val CF_NOSTYLESEL : flags val CF_NOVECTORFONTS : flags val CF_NOVERTFONTS : flags val CF_PRINTERFONTS : flags val CF_SCALABLEONLY : flags val CF_SCREENFONTS : flags val CF_SCRIPTSONLY : flags val CF_SELECTSCRIPT : flags val CF_SHOWHELP : flags val CF_TTONLY : flags val CF_WYSIWYG : flags end structure ChooseFontTypes : sig include BIT_FLAGS val BOLD_FONTTYPE : flags val ITALIC_FONTTYPE : flags val PRINTER_FONTTYPE : flags val REGULAR_FONTTYPE : flags val SCREEN_FONTTYPE : flags val SIMULATED_FONTTYPE : flags end type CHOOSEFONT = { owner: HWND option, context: HDC option, logFont: Font.LOGFONT option, pointSize: int, flags: ChooseFontFlags.flags, colors: COLORREF, style: string option, fontType: ChooseFontTypes.flags, size: {min: int, max: int} option } val ChooseFont : CHOOSEFONT -> CHOOSEFONT option (* FindText and ReplaceText *) structure FindReplaceFlags : sig include BIT_FLAGS val FR_DIALOGTERM : flags val FR_DOWN : flags val FR_FINDNEXT : flags val FR_HIDEMATCHCASE : flags val FR_HIDEUPDOWN : flags val FR_HIDEWHOLEWORD : flags val FR_MATCHCASE : flags val FR_NOMATCHCASE : flags val FR_NOUPDOWN : flags val FR_NOWHOLEWORD : flags val FR_REPLACE : flags val FR_REPLACEALL : flags val FR_SHOWHELP : flags val FR_WHOLEWORD : flags end datatype TemplateType = TemplateDefault | TemplateHandle of Dialog.DLGTEMPLATE | TemplateResource of HINSTANCE * Resource.RESID type FINDREPLACE = { owner : HWND, template: TemplateType, flags: FindReplaceFlags.flags, findWhat: string, replaceWith: string, bufferSize: int } val FindText : FINDREPLACE -> HWND val ReplaceText : FINDREPLACE -> HWND (* GetOpenFileName and GetSaveFileName *) structure OpenFileFlags : sig include BIT_FLAGS val OFN_ALLOWMULTISELECT : flags val OFN_CREATEPROMPT : flags val OFN_EXPLORER : flags val OFN_EXTENSIONDIFFERENT : flags val OFN_FILEMUSTEXIST : flags val OFN_HIDEREADONLY : flags val OFN_LONGNAMES : flags val OFN_NOCHANGEDIR : flags val OFN_NODEREFERENCELINKS : flags val OFN_NOLONGNAMES : flags val OFN_NONETWORKBUTTON : flags val OFN_NOREADONLYRETURN : flags val OFN_NOTESTFILECREATE : flags val OFN_NOVALIDATE : flags val OFN_OVERWRITEPROMPT : flags val OFN_PATHMUSTEXIST : flags val OFN_READONLY : flags val OFN_SHAREAWARE : flags val OFN_SHOWHELP : flags end type OPENFILENAME = { owner: HWND option, template: TemplateType, filter: (string * string) list, customFilter: (string * string) option, filterIndex: int, file: string, (* Initial value of file and returned result. *) maxFile: int, (* Max size of expected file name. *) fileTitle : string, initialDir: string option, title: string option, (* Optional title - default is Save or Open. *) flags: OpenFileFlags.flags, defExt: string option } val GetFileTitle : string -> string val GetOpenFileName : OPENFILENAME -> OPENFILENAME option val GetSaveFileName : OPENFILENAME -> OPENFILENAME option (* PageSetupDlg *) structure PageSetupFlags : sig include BIT_FLAGS val PSD_DEFAULTMINMARGINS : flags val PSD_DISABLEMARGINS : flags val PSD_DISABLEORIENTATION : flags val PSD_DISABLEPAGEPAINTING : flags val PSD_DISABLEPAPER : flags val PSD_DISABLEPRINTER : flags val PSD_INHUNDREDTHSOFMILLIMETERS : flags val PSD_INTHOUSANDTHSOFINCHES : flags val PSD_MARGINS : flags val PSD_MINMARGINS : flags val PSD_NONETWORKBUTTON : flags val PSD_NOWARNING : flags val PSD_RETURNDEFAULT : flags val PSD_SHOWHELP : flags end type PAGESETUPDLG = { owner: HWND option, devMode: DeviceContext.DEVMODE option, devNames: DeviceContext.DEVNAMES option, flags: PageSetupFlags.flags, paperSize: POINT, minMargin: RECT, margin: RECT (* For the moment we ignore the other options. *) } val PageSetupDlg : PAGESETUPDLG -> PAGESETUPDLG option (* PrintDlg *) structure PrintDlgFlags : sig include BIT_FLAGS val PD_ALLPAGES : flags val PD_COLLATE : flags val PD_DISABLEPRINTTOFILE : flags val PD_HIDEPRINTTOFILE : flags val PD_NONETWORKBUTTON : flags val PD_NOPAGENUMS : flags val PD_NOSELECTION : flags val PD_NOWARNING : flags val PD_PAGENUMS : flags val PD_PRINTSETUP : flags val PD_PRINTTOFILE : flags val PD_RETURNDC : flags val PD_RETURNDEFAULT : flags val PD_RETURNIC : flags val PD_SELECTION : flags val PD_SHOWHELP : flags val PD_USEDEVMODECOPIES : flags val PD_USEDEVMODECOPIESANDCOLLATE : flags end type PRINTDLG = { owner: HWND option, devMode: DeviceContext.DEVMODE option, devNames: DeviceContext.DEVNAMES option, context: HDC option, flags: PrintDlgFlags.flags, fromPage: int, toPage: int, minPage: int, maxPage: int, copies: int (* For the moment we ignore the other options. *) } val PrintDlg : PRINTDLG -> PRINTDLG option end = struct local open CInterface open Globals open Base open DeviceContext Color Font GdiBase (* Copy a string to a particular offset in a buffer and add a null terminator. *) fun stringToBuf (buf, n, s) = let fun copyToBuf (buf, n) (i, v): unit = assign Cchar (offset (n+i) Cchar buf) (toCchar v) in CharVector.appi (copyToBuf (buf, n)) s; assign Cchar (offset (n + size s) Cchar buf) (toCint 0) end fun allocAndInitialise(space: int, str: string): vol = let val space = Int.max(space, size str) + 1 val buf = alloc space Cchar in stringToBuf(buf, 0, str); address buf end val (toHWND, fromHWND, _) = breakConversion HWND and (toRESID, fromRESID, _) = breakConversion RESID and (toHINST, fromHINST, _) = breakConversion HINSTANCE and (fromCDevMode, toCDevMode, _) = breakConversion DeviceBase.LPDEVMODE in type HWND = HWND and HDC = HDC and COLORREF = COLORREF and HINSTANCE = HINSTANCE type RECT = RECT and POINT = POINT datatype CDERR = DIALOGFAILURE (* 0xffff *) | GENERALCODES (* 0x0000 *) | STRUCTSIZE (* 0x0001 *) | INITIALIZATION (* 0x0002 *) | NOTEMPLATE (* 0x0003 *) | NOHINSTANCE (* 0x0004 *) | LOADSTRFAILURE (* 0x0005 *) | FINDRESFAILURE (* 0x0006 *) | LOADRESFAILURE (* 0x0007 *) | LOCKRESFAILURE (* 0x0008 *) | MEMALLOCFAILURE (* 0x0009 *) | MEMLOCKFAILURE (* 0x000A *) | NOHOOK (* 0x000B *) | REGISTERMSGFAIL (* 0x000C *) | PRINTERCODES (* 0x1000 *) | SETUPFAILURE (* 0x1001 *) | PARSEFAILURE (* 0x1002 *) | RETDEFFAILURE (* 0x1003 *) | LOADDRVFAILURE (* 0x1004 *) | GETDEVMODEFAIL (* 0x1005 *) | INITFAILURE (* 0x1006 *) | NODEVICES (* 0x1007 *) | NODEFAULTPRN (* 0x1008 *) | DNDMMISMATCH (* 0x1009 *) | CREATEICFAILURE (* 0x100A *) | PRINTERNOTFOUND (* 0x100B *) | DEFAULTDIFFERENT (* 0x100C *) | CHOOSEFONTCODES (* 0x2000 *) | NOFONTS (* 0x2001 *) | MAXLESSTHANMIN (* 0x2002 *) | FILENAMECODES (* 0x3000 *) | SUBCLASSFAILURE (* 0x3001 *) | INVALIDFILENAME (* 0x3002 *) | BUFFERTOOSMALL (* 0x3003 *) | FINDREPLACECODES (* 0x4000 *) | BUFFERLENGTHZERO (* 0x4001 *) | CHOOSECOLORCODES (* 0x5000 *) fun CommDlgExtendedError () = case call0 (commdlg "CommDlgExtendedError") () INT () of 0x0000 => GENERALCODES | 0x0001 => STRUCTSIZE | 0x0002 => INITIALIZATION | 0x0003 => NOTEMPLATE | 0x0004 => NOHINSTANCE | 0x0005 => LOADSTRFAILURE | 0x0006 => FINDRESFAILURE | 0x0007 => LOADRESFAILURE | 0x0008 => LOCKRESFAILURE | 0x0009 => MEMALLOCFAILURE | 0x000A => MEMLOCKFAILURE | 0x000B => NOHOOK | 0x000C => REGISTERMSGFAIL | 0x1000 => PRINTERCODES | 0x1001 => SETUPFAILURE | 0x1002 => PARSEFAILURE | 0x1003 => RETDEFFAILURE | 0x1004 => LOADDRVFAILURE | 0x1005 => GETDEVMODEFAIL | 0x1006 => INITFAILURE | 0x1007 => NODEVICES | 0x1008 => NODEFAULTPRN | 0x1009 => DNDMMISMATCH | 0x100A => CREATEICFAILURE | 0x100B => PRINTERNOTFOUND | 0x100C => DEFAULTDIFFERENT | 0x2000 => CHOOSEFONTCODES | 0x2001 => NOFONTS | 0x2002 => MAXLESSTHANMIN | 0x3000 => FILENAMECODES | 0x3001 => SUBCLASSFAILURE | 0x3002 => INVALIDFILENAME | 0x3003 => BUFFERTOOSMALL | 0x4000 => FINDREPLACECODES | 0x4001 => BUFFERLENGTHZERO | _ => DIALOGFAILURE; (* As always there are a number of ways of matching the C types to ML. Since functions such as GetOpenFileName update their parameters, probably the easiest way to deal with them is as functions which return an updated parameter set. *) datatype TemplateType = TemplateHandle of Dialog.DLGTEMPLATE | TemplateResource of HINSTANCE * Resource.RESID | TemplateDefault structure OpenFileFlags:> sig include BIT_FLAGS val OFN_ALLOWMULTISELECT : flags val OFN_CREATEPROMPT : flags val OFN_EXPLORER : flags val OFN_EXTENSIONDIFFERENT : flags val OFN_FILEMUSTEXIST : flags val OFN_HIDEREADONLY : flags val OFN_LONGNAMES : flags val OFN_NOCHANGEDIR : flags val OFN_NODEREFERENCELINKS : flags val OFN_NOLONGNAMES : flags val OFN_NONETWORKBUTTON : flags val OFN_NOREADONLYRETURN : flags val OFN_NOTESTFILECREATE : flags val OFN_NOVALIDATE : flags val OFN_OVERWRITEPROMPT : flags val OFN_PATHMUSTEXIST : flags val OFN_READONLY : flags val OFN_SHAREAWARE : flags val OFN_SHOWHELP : flags end = struct type flags = SysWord.word fun toWord f = f fun fromWord f = f val flags = List.foldl (fn (a, b) => SysWord.orb(a,b)) 0w0 fun allSet (fl1, fl2) = SysWord.andb(fl1, fl2) = fl1 fun anySet (fl1, fl2) = SysWord.andb(fl1, fl2) <> 0w0 fun clear (fl1, fl2) = SysWord.andb(SysWord.notb fl1, fl2) val OFN_READONLY = 0wx00000001 val OFN_OVERWRITEPROMPT = 0wx00000002 val OFN_HIDEREADONLY = 0wx00000004 val OFN_NOCHANGEDIR = 0wx00000008 val OFN_SHOWHELP = 0wx00000010 val OFN_NOVALIDATE = 0wx00000100 val OFN_ALLOWMULTISELECT = 0wx00000200 val OFN_EXTENSIONDIFFERENT = 0wx00000400 val OFN_PATHMUSTEXIST = 0wx00000800 val OFN_FILEMUSTEXIST = 0wx00001000 val OFN_CREATEPROMPT = 0wx00002000 val OFN_SHAREAWARE = 0wx00004000 val OFN_NOREADONLYRETURN = 0wx00008000 val OFN_NOTESTFILECREATE = 0wx00010000 val OFN_NONETWORKBUTTON = 0wx00020000 val OFN_NOLONGNAMES = 0wx00040000 (* force no long names for 4.x modules*) val OFN_EXPLORER = 0wx00080000 (* new look commdlg*) val OFN_NODEREFERENCELINKS = 0wx00100000 val OFN_LONGNAMES = 0wx00200000 (* force long names for 3.x modules*) val all = flags[OFN_READONLY, OFN_OVERWRITEPROMPT, OFN_HIDEREADONLY, OFN_NOCHANGEDIR, OFN_SHOWHELP, OFN_NOVALIDATE, OFN_ALLOWMULTISELECT, OFN_EXTENSIONDIFFERENT, OFN_PATHMUSTEXIST, OFN_FILEMUSTEXIST, OFN_CREATEPROMPT, OFN_SHAREAWARE, OFN_NOREADONLYRETURN, OFN_NOTESTFILECREATE, OFN_NONETWORKBUTTON, OFN_NOLONGNAMES, OFN_EXPLORER, OFN_NODEREFERENCELINKS, OFN_LONGNAMES] val intersect = List.foldl (fn (a, b) => SysWord.andb(a,b)) all end (* These flags are local only. *) val OFN_ENABLEHOOK = 0wx00000020 (* Never used. *) val OFN_ENABLETEMPLATE = 0wx00000040 val OFN_ENABLETEMPLATEHANDLE = 0wx00000080 type OPENFILENAME = { owner: HWND option, template: TemplateType, filter: (string * string) list, customFilter: (string * string) option, filterIndex: int, file: string, (* Initial value of file and returned result. *) maxFile: int, (* Max size of expected file name. *) fileTitle : string, initialDir: string option, title: string option, (* Optional title - default is Save or Open. *) flags: OpenFileFlags.flags, defExt: string option } local val OPENFILENAME = STRUCT20(UINT, HWNDOPT, POINTER, POINTER, POINTER, INT, INT, POINTER, INT, POINTER, INT, STRINGOPT, STRINGOPT, WORD, SHORT, SHORT, STRINGOPT, INT, INT, POINTER) val (toOFN, fromOFN, ofnStruct) = breakConversion OPENFILENAME fun toCOpenFileName( { owner: HWND option, template: TemplateType, filter: (string * string) list, customFilter: (string * string) option, filterIndex: int, file: string, maxFile: int, fileTitle : string, initialDir: string option, title: string option, flags: OpenFileFlags.flags, defExt: string option }:OPENFILENAME): vol = let val hw: vol = fromHWND(getOpt(owner, hwndNull)) val (f1: LargeWord.word, inst: vol, templ: vol) = case template of TemplateHandle dlgTemp => (OFN_ENABLETEMPLATEHANDLE, (* This is supposed to be a handle. *) fromWord8vec(Dialog.compileTemplate dlgTemp), toCint 0) | TemplateResource(hInst, resId) => ( OFN_ENABLETEMPLATE, fromHINST hInst, fromRESID resId ) | TemplateDefault => (0w0, toCint 0, toCint 0) local (* The filter strings are pairs of strings with a final terminating null. That implies that the strings cannot be empty. Should we check that? Get the store needed for the strings, including the null terminations and the final null. *) val filterSize = List.foldl (fn((s1,s2),n) => size s1 + size s2 + n + 2) 1 filter val buf = alloc filterSize Cchar fun copyToBuf((s1,s2), n) = let val ss1 = size s1 and ss2 = size s2 in stringToBuf(buf, n, s1); stringToBuf(buf, n+ss1+1, s2); n+ss1+ss2+2 (* Result is the next offset. *) end val lastAddr = List.foldl copyToBuf 0 filter val _ = assign Cchar (offset lastAddr Cchar buf) (toCint 0); in val lpstrFilter = case filter of nil => toCint 0 (* Set it to null. *) | _ => address buf end val (lpstrCustomFilter, nMaxCustFilter) = case customFilter of NONE => (toCint 0, 0) | SOME (dispString, pattern) => let (* Make sure we have enough space. 100 is probably big enough. *) val space = Int.max(size dispString + size pattern + 2, 100) val buf = alloc space Cchar in stringToBuf(buf, 0, dispString); stringToBuf(buf, size dispString + 1, pattern); (address buf, space) end val lpstrFile = (* Full name of file including path. *) allocAndInitialise(maxFile, file) val lpstrFileTitle = (* Name excluding the path. *) allocAndInitialise(maxFile, fileTitle) in address( fromOFN(sizeof ofnStruct, (* lStructSize *) owner, (* hwndOwner *) inst, (* hInstance *) lpstrFilter, lpstrCustomFilter, nMaxCustFilter, filterIndex, lpstrFile, maxFile+1, (* nMaxFile *) lpstrFileTitle, maxFile+1, (* nMaxFileTitle *) initialDir, title, LargeWord.orb(f1, OpenFileFlags.toWord flags), (* Flags *) 0, (* nFileOffset *) 0, (* nFileExtension *) defExt, 0, (* lCustData *) 0, (* lpfnHook *) templ)) (* lpTemplateName *) end (* Most of the fields are unchanged so we're better off extracting them from the original. If we've passed in a template we have to get it from the original because we can only convert a memory object to a Word8Vector.vector if we know its length. *) fun fromCOpenFileName v ({ owner, template, filter, maxFile, initialDir, title, defExt, ...}:OPENFILENAME): OPENFILENAME = let val (_, _, _, _, lpstrCustomFilter, _, nFilterIndex, lpstrFile, _, lpstrFileTitle, _, _, _, flags, _, _, _, _, _, _) = toOFN(deref v) val customFilter = if fromCint lpstrCustomFilter = 0 then NONE else let val s1 = fromCstring lpstrCustomFilter val s2 = fromCstring (address(offset (size s1 +1) Cchar (deref lpstrCustomFilter))) in SOME(s1, s2) end in { owner = owner, template = template, filter = filter, customFilter = customFilter, filterIndex = nFilterIndex, file = fromCstring lpstrFile, maxFile = maxFile, fileTitle = fromCstring lpstrFileTitle, initialDir = initialDir, title = title, (* Mask off the template flags. *) flags = OpenFileFlags.fromWord(LargeWord.andb(LargeWord.notb 0wxE0, flags)), defExt = defExt } end in fun GetOpenFileName (arg: OPENFILENAME): OPENFILENAME option = let val converted = toCOpenFileName arg val result = call1 (commdlg "GetOpenFileNameA") POINTER BOOL converted in if result then SOME(fromCOpenFileName converted arg) else NONE end and GetSaveFileName (arg: OPENFILENAME): OPENFILENAME option = let val converted = toCOpenFileName arg val result = call1 (commdlg "GetSaveFileNameA") POINTER BOOL converted in if result then SOME(fromCOpenFileName converted arg) else NONE end end (* local *) fun GetFileTitle(file: string): string = let val gft = call3(commdlg "GetFileTitleA") (STRING, POINTER, SHORT) SHORT val buffsize = gft(file, toCint 0, 0) val _ = if buffsize < 0 then raise OS.SysErr("GetFileTitle", SOME(GetLastError())) else () val buf = alloc buffsize Cchar val result = gft(file, address buf, buffsize) in if result < 0 then raise OS.SysErr("GetFileTitle", SOME(GetLastError())) else fromCstring(address buf) end (* This is a bit messy. It creates a modeless dialogue box and sends messages to the parent window. The only problem is that the message identifier is not a constant. It has to be obtained by a call to RegisterWindowMessage. *) (* We also have to ensure that the "vol" containing the FINDREPLACE structure is not freed until the dialogue window is destroyed. *) structure FindReplaceFlags = FindReplaceFlags (* These flags are local only. *) val FR_ENABLEHOOK = 0wx00000100 val FR_ENABLETEMPLATE = 0wx00000200 val FR_ENABLETEMPLATEHANDLE = 0wx00002000 (* The address of this structure is passed in messages. That all looks extremely messy. *) type FINDREPLACE = { owner : HWND, (* NOT an option. *) template: TemplateType, flags: FindReplaceFlags.flags, findWhat: string, replaceWith: string, bufferSize: int } local val FINDREPLACE = STRUCT11(UINT, HWND, POINTER, WORD, POINTER, POINTER, SHORT, SHORT, INT, INT, POINTER) val (toOFR, fromOFR, ofrStruct) = breakConversion FINDREPLACE fun toCFindReplace( { owner : HWND, (* NOT an option. *) template: TemplateType, flags: FindReplaceFlags.flags, findWhat: string, replaceWith: string, bufferSize: int }: FINDREPLACE): vol = let val (f1: LargeWord.word, inst: vol, templ: vol) = case template of TemplateHandle dlgTemp => (FR_ENABLETEMPLATEHANDLE, (* This is supposed to be a handle. *) fromWord8vec(Dialog.compileTemplate dlgTemp), toCint 0) | TemplateResource(hInst, resId) => ( FR_ENABLETEMPLATE, fromHINST hInst, fromRESID resId ) | TemplateDefault => (0w0, toCint 0, toCint 0) val lpstrFindWhat = allocAndInitialise(bufferSize, findWhat) val lpstrReplaceWith = allocAndInitialise(bufferSize, replaceWith) in address( fromOFR(sizeof ofrStruct, (* lStructSize *) owner, (* hwndOwner *) inst, (* hInstance *) LargeWord.orb(f1, FindReplaceFlags.toWord flags), (* Flags *) lpstrFindWhat, lpstrReplaceWith, bufferSize, bufferSize, 0, (* lCustData *) 0, (* lpfnHook *) templ)) (* lpTemplateName *) end fun findReplace name (arg: FINDREPLACE): HWND = let val converted = toCFindReplace arg val result = call1 (commdlg (name ^"A")) POINTER HWND converted in if isHNull result then raise OS.SysErr(name, SOME(GetLastError())) else (* We need to keep hold of the vol corresponding to the FINDREPLACE structure otherwise it may be garbage- collected away. Also, since this is a modeless dialogue we have to add it to the modeless dialogue list so that keyboard functions work. *) (Message.addModelessDialogue(result, converted); result) end in val FindText = findReplace "FindText" and ReplaceText = findReplace "ReplaceText" end structure PageSetupFlags :> sig include BIT_FLAGS val PSD_DEFAULTMINMARGINS : flags val PSD_DISABLEMARGINS : flags val PSD_DISABLEORIENTATION : flags val PSD_DISABLEPAGEPAINTING : flags val PSD_DISABLEPAPER : flags val PSD_DISABLEPRINTER : flags val PSD_INHUNDREDTHSOFMILLIMETERS : flags val PSD_INTHOUSANDTHSOFINCHES : flags val PSD_MARGINS : flags val PSD_MINMARGINS : flags val PSD_NONETWORKBUTTON : flags val PSD_NOWARNING : flags val PSD_RETURNDEFAULT : flags val PSD_SHOWHELP : flags end = struct type flags = SysWord.word fun toWord f = f fun fromWord f = f val flags = List.foldl (fn (a, b) => SysWord.orb(a,b)) 0w0 fun allSet (fl1, fl2) = SysWord.andb(fl1, fl2) = fl1 fun anySet (fl1, fl2) = SysWord.andb(fl1, fl2) <> 0w0 fun clear (fl1, fl2) = SysWord.andb(SysWord.notb fl1, fl2) val PSD_DEFAULTMINMARGINS = 0wx00000000 (* default (printer's) *) (*val PSD_INWININIINTLMEASURE = 0wx00000000 *)(* 1st of 4 possible *) val PSD_MINMARGINS = 0wx00000001 (* use caller's *) val PSD_MARGINS = 0wx00000002 (* use caller's *) val PSD_INTHOUSANDTHSOFINCHES = 0wx00000004 (* 2nd of 4 possible *) val PSD_INHUNDREDTHSOFMILLIMETERS = 0wx00000008 (* 3rd of 4 possible *) val PSD_DISABLEMARGINS = 0wx00000010 val PSD_DISABLEPRINTER = 0wx00000020 val PSD_NOWARNING = 0wx00000080 val PSD_DISABLEORIENTATION = 0wx00000100 val PSD_RETURNDEFAULT = 0wx00000400 val PSD_DISABLEPAPER = 0wx00000200 val PSD_SHOWHELP = 0wx00000800 (* val PSD_ENABLEPAGESETUPHOOK = 0wx00002000 val PSD_ENABLEPAGESETUPTEMPLATE = 0wx00008000 val PSD_ENABLEPAGESETUPTEMPLATEHANDLE = 0wx00020000 val PSD_ENABLEPAGEPAINTHOOK = 0wx00040000 *) val PSD_DISABLEPAGEPAINTING = 0wx00080000 val PSD_NONETWORKBUTTON = 0wx00200000 val all = flags[PSD_DEFAULTMINMARGINS, PSD_MINMARGINS, PSD_MARGINS, PSD_INTHOUSANDTHSOFINCHES, PSD_INHUNDREDTHSOFMILLIMETERS, PSD_DISABLEMARGINS, PSD_DISABLEPRINTER, PSD_NOWARNING, PSD_DISABLEORIENTATION, PSD_RETURNDEFAULT, PSD_DISABLEPAPER, PSD_SHOWHELP, PSD_DISABLEPAGEPAINTING, PSD_NONETWORKBUTTON] val intersect = List.foldl (fn (a, b) => SysWord.andb(a,b)) all end structure PrintDlgFlags :> sig include BIT_FLAGS val PD_ALLPAGES : flags val PD_COLLATE : flags val PD_DISABLEPRINTTOFILE : flags val PD_HIDEPRINTTOFILE : flags val PD_NONETWORKBUTTON : flags val PD_NOPAGENUMS : flags val PD_NOSELECTION : flags val PD_NOWARNING : flags val PD_PAGENUMS : flags val PD_PRINTSETUP : flags val PD_PRINTTOFILE : flags val PD_RETURNDC : flags val PD_RETURNDEFAULT : flags val PD_RETURNIC : flags val PD_SELECTION : flags val PD_SHOWHELP : flags val PD_USEDEVMODECOPIES : flags val PD_USEDEVMODECOPIESANDCOLLATE : flags end = struct type flags = SysWord.word fun toWord f = f fun fromWord f = f val flags = List.foldl (fn (a, b) => SysWord.orb(a,b)) 0w0 fun allSet (fl1, fl2) = SysWord.andb(fl1, fl2) = fl1 fun anySet (fl1, fl2) = SysWord.andb(fl1, fl2) <> 0w0 fun clear (fl1, fl2) = SysWord.andb(SysWord.notb fl1, fl2) val PD_ALLPAGES = 0wx00000000 val PD_SELECTION = 0wx00000001 val PD_PAGENUMS = 0wx00000002 val PD_NOSELECTION = 0wx00000004 val PD_NOPAGENUMS = 0wx00000008 val PD_COLLATE = 0wx00000010 val PD_PRINTTOFILE = 0wx00000020 val PD_PRINTSETUP = 0wx00000040 val PD_NOWARNING = 0wx00000080 val PD_RETURNDC = 0wx00000100 val PD_RETURNIC = 0wx00000200 val PD_RETURNDEFAULT = 0wx00000400 val PD_SHOWHELP = 0wx00000800 (*val PD_ENABLEPRINTHOOK = 0wx00001000 val PD_ENABLESETUPHOOK = 0wx00002000 val PD_ENABLEPRINTTEMPLATE = 0wx00004000 val PD_ENABLESETUPTEMPLATE = 0wx00008000 val PD_ENABLEPRINTTEMPLATEHANDLE = 0wx00010000 val PD_ENABLESETUPTEMPLATEHANDLE = 0wx00020000 *) val PD_USEDEVMODECOPIES = 0wx00040000 val PD_USEDEVMODECOPIESANDCOLLATE = 0wx00040000 val PD_DISABLEPRINTTOFILE = 0wx00080000 val PD_HIDEPRINTTOFILE = 0wx00100000 val PD_NONETWORKBUTTON = 0wx00200000 val all = flags[PD_ALLPAGES, PD_SELECTION, PD_PAGENUMS, PD_NOSELECTION, PD_NOPAGENUMS, PD_COLLATE, PD_PRINTTOFILE, PD_PRINTSETUP, PD_NOWARNING, PD_RETURNDC, PD_RETURNIC, PD_RETURNDEFAULT, PD_SHOWHELP, PD_USEDEVMODECOPIES, PD_USEDEVMODECOPIESANDCOLLATE, PD_DISABLEPRINTTOFILE, PD_HIDEPRINTTOFILE, PD_NONETWORKBUTTON] val intersect = List.foldl (fn (a, b) => SysWord.andb(a,b)) all end type PAGESETUPDLG = { owner: HWND option, devMode: DEVMODE option, devNames: DEVNAMES option, flags: PageSetupFlags.flags, paperSize: POINT, minMargin: RECT, margin: RECT (* For the moment we ignore the other options. *) } type PRINTDLG = { owner: HWND option, devMode: DEVMODE option, devNames: DEVNAMES option, context: HDC option, flags: PrintDlgFlags.flags, fromPage: int, toPage: int, minPage: int, maxPage: int, copies: int (* For the moment we ignore the other options. *) } local val PAGESETUPDLG = STRUCT14(UINT, HWNDOPT, HGLOBAL, HGLOBAL, WORD, POINT, RECT, RECT, HINSTANCE, INT, INT, INT, INT, INT) val (toPSD, fromPSD, psdStruct) = breakConversion PAGESETUPDLG (* A DEVNAMES structure is a structure containing offsets followed by the actual strings. *) val DEVNAMES = STRUCT4(SHORT, SHORT, SHORT, SHORT) val (toDN, fromDN, dnStruct) = breakConversion DEVNAMES val DN_DEFAULTPRN = 0x0001 fun toDevNames NONE = hglobalNull | toDevNames (SOME{driver, device, output, default}) = let (* We need memory for the DEVNAMES structure plus the strings plus their terminating nulls. *) val devnameSize = sizeof dnStruct val sizeDriver = size driver and sizeDevice = size device and sizeOutput = size output val space = devnameSize + sizeDriver + sizeDevice + sizeOutput + 3 val mHandle = GlobalAlloc(0, space) val buff = deref(GlobalLock mHandle) (* Copy in the strings and calculate the next offset. *) fun copyString b str = ( fillCstring b str; offset (size str+1) Cchar b ); val off1 = copyString (offset 1 dnStruct buff) driver; val off2 = copyString off1 device val _ = copyString off2 output in assign dnStruct buff (fromDN(devnameSize, devnameSize+sizeDriver+1, devnameSize+sizeDriver+sizeDevice+2, if default then DN_DEFAULTPRN else 0)); GlobalUnlock mHandle; mHandle end (* Convert a DevNames structure. Also frees the handle if it's not null. *) fun fromDevNames v = if isHglobalNull v then NONE else let val buff = deref(GlobalLock v) val (off0, off1, off2, def) = toDN buff val driver = fromCstring(address(offset off0 Cchar buff)) val device = fromCstring(address(offset off1 Cchar buff)) val output = fromCstring(address(offset off2 Cchar buff)) val default = IntInf.andb(def, DN_DEFAULTPRN) <> 0 in GlobalUnlock v; GlobalFree v; SOME {driver=driver, device=device, output=output, default=default} end fun toCPageSetupDlg({ owner: HWND option, devMode: DEVMODE option, devNames: {driver: string, device: string, output: string, default: bool} option, flags: PageSetupFlags.flags, paperSize: POINT, minMargin: RECT, margin: RECT}: PAGESETUPDLG) : vol = let val devnames = toDevNames devNames val devmode = case devMode of NONE => hglobalNull | SOME dv => let val dev = deref(toCDevMode dv) (* toCDevMode constructs the structure in local memory. We have to copy it to store allocated with GlobalAlloc. *) val size = fromCshort(offset 36 Cchar dev) + fromCshort(offset 38 Cchar dev) val hGlob = GlobalAlloc(0, size) val mem = deref(GlobalLock hGlob) fun doCopy t f 0 = () | doCopy t f i = ( assign Cchar t f; doCopy(offset 1 Cchar t) (offset 1 Cchar f) (i-1) ) in doCopy mem dev size; GlobalUnlock hGlob; hGlob end in address( fromPSD (sizeof psdStruct, owner, devmode, devnames, PageSetupFlags.toWord flags, paperSize, minMargin, margin, hinstanceNull, 0, 0, 0, 0, 0 ) ) end fun fromCPageSetupDlg v : PAGESETUPDLG = let val (_, owner, hgDevMode, hgDevNames, flags, paperSize, minMargin, margin, _, _, _, _, _, _) = toPSD(deref v) val devMode = if isHglobalNull hgDevMode then NONE else let val r = SOME(fromCDevMode(GlobalLock hgDevMode)) in GlobalUnlock hgDevMode; GlobalFree hgDevMode; r end; val devNames = fromDevNames hgDevNames in { owner = owner, devMode = devMode, devNames = devNames, flags = PageSetupFlags.fromWord flags, paperSize = paperSize, minMargin = minMargin, margin = margin } end (* This is a bit of a mess. It turns out that the fields after the five shorts are not aligned onto 4-byte boundaries. Since we don't currently use them this doesn't matter except that we have to set the size explicitly. *) val PRINTDLG = STRUCT19(UINT, HWNDOPT, HGLOBAL, HGLOBAL, HDC, WORD, SHORT, SHORT, SHORT, SHORT, SHORT, INT, INT, INT, INT, INT, INT, INT, INT) val (toPRD, fromPRD, _) = breakConversion PRINTDLG val printDlgSize = 66 fun toCPrintDlg({ owner: HWND option, devMode: DEVMODE option, devNames: {driver: string, device: string, output: string, default: bool} option, context: HDC option, flags: PrintDlgFlags.flags, fromPage: int, toPage: int, minPage: int, maxPage: int, copies: int}: PRINTDLG) : vol = let val devnames = toDevNames devNames val devmode = case devMode of NONE => hglobalNull | SOME dv => let val dev = deref(toCDevMode dv) (* toCDevMode constructs the structure in local memory. We have to copy it to store allocated with GlobalAlloc. *) val size = fromCshort(offset 36 Cchar dev) + fromCshort(offset 38 Cchar dev) val hGlob = GlobalAlloc(0, size) val mem = deref(GlobalLock hGlob) fun doCopy t f 0 = () | doCopy t f i = ( assign Cchar t f; doCopy(offset 1 Cchar t) (offset 1 Cchar f) (i-1) ) in doCopy mem dev size; GlobalUnlock hGlob; hGlob end in address( fromPRD (printDlgSize, owner, devmode, devnames, getOpt(context, hdcNull), PrintDlgFlags.toWord flags, fromPage, toPage, minPage, maxPage, copies, 0, 0, 0, 0, 0, 0, 0, 0 ) ) end fun fromCPrintDlg v : PRINTDLG = let val (_, owner, hgDevMode, hgDevNames, hdc, flags, fromPage, toPage, minPage, maxPage, copies, _, _, _, _, _, _, _, _) = toPRD(deref v) val devMode = if isHglobalNull hgDevMode then NONE else let val r = SOME(fromCDevMode(GlobalLock hgDevMode)) in GlobalUnlock hgDevMode; GlobalFree hgDevMode; r end; val devNames = fromDevNames hgDevNames in { owner = owner, devMode = devMode, devNames = devNames, context = if isHdcNull hdc then NONE else SOME hdc, flags = PrintDlgFlags.fromWord flags, fromPage = fromPage, toPage = toPage, minPage = minPage, maxPage = maxPage, copies = copies } end in fun PageSetupDlg (arg: PAGESETUPDLG): PAGESETUPDLG option = let val converted = toCPageSetupDlg arg val result = call1 (commdlg "PageSetupDlgA") POINTER BOOL converted (* Convert the result. We have to do this even if the result is false to make sure we call GlobalFree on any global handles. *) val newArg = fromCPageSetupDlg converted in if result then SOME newArg else NONE end and PrintDlg (arg: PRINTDLG): PRINTDLG option = let val converted = toCPrintDlg arg val result = call1 (commdlg "PrintDlgA") POINTER BOOL converted (* Convert the result. We have to do this even if the result is false to make sure we call GlobalFree on any global handles. *) val newArg = fromCPrintDlg converted in if result then SOME newArg else NONE end end structure ChooseFontFlags :> sig include BIT_FLAGS val CF_ANSIONLY : flags val CF_APPLY : flags val CF_BOTH : flags val CF_EFFECTS : flags val CF_FIXEDPITCHONLY : flags val CF_FORCEFONTEXIST : flags val CF_NOFACESEL : flags val CF_NOOEMFONTS : flags val CF_NOSCRIPTSEL : flags val CF_NOSIMULATIONS : flags val CF_NOSIZESEL : flags val CF_NOSTYLESEL : flags val CF_NOVECTORFONTS : flags val CF_NOVERTFONTS : flags val CF_PRINTERFONTS : flags val CF_SCALABLEONLY : flags val CF_SCREENFONTS : flags val CF_SCRIPTSONLY : flags val CF_SELECTSCRIPT : flags val CF_SHOWHELP : flags val CF_TTONLY : flags val CF_WYSIWYG : flags end = struct type flags = SysWord.word fun toWord f = f fun fromWord f = f val flags = List.foldl (fn (a, b) => SysWord.orb(a,b)) 0w0 fun allSet (fl1, fl2) = SysWord.andb(fl1, fl2) = fl1 fun anySet (fl1, fl2) = SysWord.andb(fl1, fl2) <> 0w0 fun clear (fl1, fl2) = SysWord.andb(SysWord.notb fl1, fl2) val CF_SCREENFONTS = 0wx00000001 val CF_PRINTERFONTS = 0wx00000002 val CF_BOTH = 0wx00000003: flags val CF_SHOWHELP = 0wx00000004 (* val CF_ENABLEHOOK = 0wx00000008 val CF_ENABLETEMPLATE = 0wx00000010 val CF_ENABLETEMPLATEHANDLE = 0wx00000020 *) (*val CF_INITTOLOGFONTSTRUCT = 0wx00000040*) (*val CF_USESTYLE = 0wx00000080*) val CF_EFFECTS = 0wx00000100 val CF_APPLY = 0wx00000200 val CF_ANSIONLY = 0wx00000400 val CF_SCRIPTSONLY = CF_ANSIONLY val CF_NOVECTORFONTS = 0wx00000800 val CF_NOOEMFONTS = CF_NOVECTORFONTS val CF_NOSIMULATIONS = 0wx00001000 (*val CF_LIMITSIZE = 0wx00002000*) val CF_FIXEDPITCHONLY = 0wx00004000 val CF_WYSIWYG = 0wx00008000 val CF_FORCEFONTEXIST = 0wx00010000 val CF_SCALABLEONLY = 0wx00020000 val CF_TTONLY = 0wx00040000 val CF_NOFACESEL = 0wx00080000 val CF_NOSTYLESEL = 0wx00100000 val CF_NOSIZESEL = 0wx00200000 val CF_SELECTSCRIPT = 0wx00400000 val CF_NOSCRIPTSEL = 0wx00800000 val CF_NOVERTFONTS = 0wx01000000 val all = flags[CF_SCREENFONTS, CF_PRINTERFONTS, CF_SHOWHELP, CF_EFFECTS, CF_APPLY, CF_ANSIONLY, CF_NOVECTORFONTS, CF_NOSIMULATIONS, CF_FIXEDPITCHONLY, CF_WYSIWYG, CF_FORCEFONTEXIST, CF_SCALABLEONLY, CF_TTONLY, CF_NOFACESEL, CF_NOSTYLESEL, CF_NOSIZESEL, CF_SELECTSCRIPT, CF_NOSCRIPTSEL, CF_NOVERTFONTS] val intersect = List.foldl (fn (a, b) => SysWord.andb(a,b)) all end structure ChooseFontTypes :> sig include BIT_FLAGS val BOLD_FONTTYPE : flags val ITALIC_FONTTYPE : flags val PRINTER_FONTTYPE : flags val REGULAR_FONTTYPE : flags val SCREEN_FONTTYPE : flags val SIMULATED_FONTTYPE : flags end = struct type flags = SysWord.word fun toWord f = f fun fromWord f = f val flags = List.foldl (fn (a, b) => SysWord.orb(a,b)) 0w0 fun allSet (fl1, fl2) = SysWord.andb(fl1, fl2) = fl1 fun anySet (fl1, fl2) = SysWord.andb(fl1, fl2) <> 0w0 fun clear (fl1, fl2) = SysWord.andb(SysWord.notb fl1, fl2) val SIMULATED_FONTTYPE = 0wx8000 val PRINTER_FONTTYPE = 0wx4000 val SCREEN_FONTTYPE = 0wx2000 val BOLD_FONTTYPE = 0wx0100 val ITALIC_FONTTYPE = 0wx0200 val REGULAR_FONTTYPE = 0wx0400 val all = flags[SIMULATED_FONTTYPE, PRINTER_FONTTYPE, SCREEN_FONTTYPE, BOLD_FONTTYPE, ITALIC_FONTTYPE, REGULAR_FONTTYPE] val intersect = List.foldl (fn (a, b) => SysWord.andb(a,b)) all end type CHOOSEFONT = { owner: HWND option, context: HDC option, logFont: LOGFONT option, pointSize: int, flags: ChooseFontFlags.flags, colors: COLORREF, style: string option, fontType: ChooseFontTypes.flags, size: {min: int, max: int} option } local val CHOOSEFONT = STRUCT16(UINT, HWNDOPT, HDC, POINTER, INT, WORD, COLORREF, INT, INT, INT, INT, POINTER, SHORT, SHORT, INT, INT) val (toCF, fromCF, cfStruct) = breakConversion CHOOSEFONT val (toLF, fromLF, lfStruct) = breakConversion FontBase.LOGFONT val CF_LIMITSIZE = 0wx00002000 val CF_INITTOLOGFONTSTRUCT = 0wx00000040 val CF_USESTYLE = 0wx00000080 fun toCChooseFont({ owner: HWND option, context: HDC option, logFont: LOGFONT option, pointSize: int, flags: ChooseFontFlags.flags, colors: COLORREF, style: string option, fontType: ChooseFontTypes.flags, size: {min: int, max: int} option }) = let (* Use the supplied logFont otherwise allocate store for a new one. *) val logf = case logFont of SOME logf => address(fromLF logf) | NONE => address(alloc 1 lfStruct) (* Copy any style to the buffer - I don't know why this is 64. *) val lpszStyle = allocAndInitialise(64, getOpt(style, "")) val (min, max) = case size of SOME {min, max} => (min, max) | NONE => (0,0) val f1 = case size of SOME _ => CF_LIMITSIZE | _ => 0w0 val f2 = case logFont of SOME _ => CF_INITTOLOGFONTSTRUCT | _ => 0w0 val f3 = case style of SOME _ => CF_USESTYLE | _ => 0w0 val flags = List.foldl LargeWord.orb 0w0 [ChooseFontFlags.toWord flags, f1, f2, f3] in address( fromCF(sizeof cfStruct, owner, getOpt(context, hdcNull), logf, pointSize, flags, colors, 0, 0, 0, 0, lpszStyle, LargeWord.toInt (ChooseFontTypes.toWord fontType), 0, min, max)) end fun fromCChooseFont v : CHOOSEFONT = let val (_, owner, hdc, logf, pointSize, flags, colors, _, _, _, _, style, types, _, min, max) = toCF(deref v) val minMax = if LargeWord.andb(flags, CF_LIMITSIZE) = 0w0 then NONE else SOME{min=min, max=max} val style = if LargeWord.andb(flags, CF_USESTYLE) = 0w0 then NONE else SOME(fromCstring style) in { owner = owner, context = if isHdcNull hdc then NONE else SOME hdc, logFont = SOME(toLF(deref logf)), pointSize = pointSize, (* Remove CF_LIMITSIZE and/or CF_INITTOLOGFONTSTRUCT *) flags = ChooseFontFlags.intersect[ChooseFontFlags.fromWord flags], colors = colors, style = style, fontType = ChooseFontTypes.fromWord(LargeWord.andb(LargeWord.fromInt types, 0wxffff)), size = minMax} end in fun ChooseFont (arg: CHOOSEFONT): CHOOSEFONT option = let val converted = toCChooseFont arg val result = call1 (commdlg "ChooseFontA") POINTER BOOL converted in if result then SOME(fromCChooseFont converted) else NONE end end structure ChooseColorFlags :> sig include BIT_FLAGS val CC_ANYCOLOR : flags val CC_FULLOPEN : flags val CC_PREVENTFULLOPEN : flags val CC_RGBINIT : flags val CC_SHOWHELP : flags val CC_SOLIDCOLOR : flags end = struct type flags = SysWord.word fun toWord f = f fun fromWord f = f val flags = List.foldl (fn (a, b) => SysWord.orb(a,b)) 0w0 fun allSet (fl1, fl2) = SysWord.andb(fl1, fl2) = fl1 fun anySet (fl1, fl2) = SysWord.andb(fl1, fl2) <> 0w0 fun clear (fl1, fl2) = SysWord.andb(SysWord.notb fl1, fl2) val CC_RGBINIT = 0wx00000001 val CC_FULLOPEN = 0wx00000002 val CC_PREVENTFULLOPEN = 0wx00000004 val CC_SHOWHELP = 0wx00000008 (*val CC_ENABLEHOOK = 0wx00000010 val CC_ENABLETEMPLATE = 0wx00000020 val CC_ENABLETEMPLATEHANDLE = 0wx00000040*) val CC_SOLIDCOLOR = 0wx00000080 val CC_ANYCOLOR = 0wx00000100 val all = flags[CC_RGBINIT, CC_FULLOPEN, CC_PREVENTFULLOPEN, CC_SHOWHELP, CC_SOLIDCOLOR, CC_ANYCOLOR] val intersect = List.foldl (fn (a, b) => SysWord.andb(a,b)) all end type CHOOSECOLOR = { owner: HWND option, result: COLORREF, customColors: COLORREF list, flags: ChooseColorFlags.flags } local val CHOOSECOLOR = STRUCT9(UINT, HWNDOPT, INT, COLORREF, POINTER, WORD, INT, INT, INT) (* The custom colours are held in an array of 16 elements. *) val CUSTOM = STRUCT16(COLORREF, COLORREF, COLORREF, COLORREF, COLORREF, COLORREF, COLORREF, COLORREF, COLORREF, COLORREF, COLORREF, COLORREF, COLORREF, COLORREF, COLORREF, COLORREF) val (toCC, fromCC, ccStruct) = breakConversion CHOOSECOLOR val (toM, fromM, mStruct) = breakConversion CUSTOM val (toCR, fromCR, cref) = breakConversion COLORREF fun toCChooseColor { owner: HWND option, result: COLORREF, customColors: COLORREF list, flags: ChooseColorFlags.flags } = let val custom = alloc 1 mStruct val black = fromCR(RGB{red=0, green=0, blue=0}) fun fillCustom(_, 16) = () | fillCustom([], i) = (assign cref (offset i cref custom) black; fillCustom([], i+1)) | fillCustom(hd::tl, i) = (assign cref (offset i cref custom) (fromCR hd); fillCustom(tl, i+1)) in fillCustom(customColors, 0); address( fromCC(sizeof ccStruct, owner, 0, result, address custom, ChooseColorFlags.toWord flags, 0, 0, 0)) end fun fromCChooseColor v : CHOOSECOLOR = let val (_, owner, _, result, custom, flags, _, _, _) = toCC(deref v) val custom = List.tabulate(16, fn i => toCR(offset i cref(deref custom))) in { owner = owner, flags = ChooseColorFlags.fromWord flags, customColors = custom, result = result} end in fun ChooseColor (arg: CHOOSECOLOR): CHOOSECOLOR option = let val converted = toCChooseColor arg val result = call1 (commdlg "ChooseColorA") POINTER BOOL converted in if result then SOME(fromCChooseColor converted) else NONE end end (* typedef struct tagCHOOSECOLORA { DWORD lStructSize; HWND hwndOwner; HWND hInstance; COLORREF rgbResult; COLORREF* lpCustColors; DWORD Flags; LPARAM lCustData; LPCCHOOKPROC lpfnHook; LPCSTR lpTemplateName; } CHOOSECOLORA, *LPCHOOSECOLORA; *) (* ChooseColor PrintDlgEx - NT 5.0 and later only The following application-defined hook procedures are used with common dialog boxes. CCHookProc CFHookProc FRHookProc OFNHookProc OFNHookProcOldStyle PagePaintHook PageSetupHook PrintHookProc SetupHookProc *) end end; polyml.5.2.1/mlsource/extra/Win/Cursor.sml0000644000175000017500000001220610313043364017475 0ustar daviddavid(* Copyright (c) 2001 David C.J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure Cursor: sig type HCURSOR and HINSTANCE type POINT = { x : int, y: int } type RECT = { left: int, top: int, right: int, bottom: int } val hcursorNull : HCURSOR val isHcursorNull : HCURSOR -> bool datatype CursorId = OCR_APPSTARTING | OCR_CROSS | OCR_IBEAM | OCR_NO | OCR_NORMAL | OCR_SIZEALL | OCR_SIZENESW | OCR_SIZENS | OCR_SIZENWSE | OCR_SIZEWE | OCR_UP | OCR_WAIT val ClipCursor : RECT -> unit val CopyCursor : HCURSOR -> HCURSOR val DestroyCursor : HCURSOR -> unit val GetClipCursor : unit -> RECT val GetCursor : unit -> HCURSOR val GetCursorPos : unit -> POINT val LoadCursor : HINSTANCE * Resource.RESID -> HCURSOR val LoadCursorFromFile : string -> HCURSOR val LoadSystemCursor : CursorId -> HCURSOR val LoadSystemCursorFromFile : CursorId -> HCURSOR val SetCursor : HCURSOR -> HCURSOR val SetCursorPos : int * int -> unit val SetSytemCursor : HCURSOR * CursorId -> unit val ShowCursor : bool -> int end = struct local open CInterface open Base open Resource in type HCURSOR = HCURSOR and HINSTANCE = HINSTANCE type RECT = RECT and POINT = POINT val hcursorNull = hgdiObjNull and isHcursorNull = isHgdiObjNull datatype CursorId = OCR_APPSTARTING (* Standard arrow and small hourglass *) | OCR_NORMAL (* Standard arrow *) | OCR_CROSS (* Crosshair *) | OCR_IBEAM (* I-beam *) | OCR_NO (* Slashed circle *) | OCR_SIZEALL (* Four-pointed arrow pointing north, south, east, and west *) | OCR_SIZENESW (* Double-pointed arrow pointing northeast and southwest *) | OCR_SIZENS (* Double-pointed arrow pointing north and south *) | OCR_SIZENWSE (* Double-pointed arrow pointing northwest and southeast *) | OCR_SIZEWE (* Double-pointed arrow pointing west and east *) | OCR_UP (* Vertical arrow *) | OCR_WAIT (* Hourglass *) local fun idToInt OCR_APPSTARTING = 32650 | idToInt OCR_NORMAL = 32512 | idToInt OCR_CROSS = 32515 | idToInt OCR_IBEAM = 32513 | idToInt OCR_NO = 32648 | idToInt OCR_SIZEALL = 32646 | idToInt OCR_SIZENESW = 32643 | idToInt OCR_SIZENS = 32645 | idToInt OCR_SIZENWSE = 32642 | idToInt OCR_SIZEWE = 32644 | idToInt OCR_UP = 32516 | idToInt OCR_WAIT = 32514 fun intToId _ = raise Fail "intToId" in val CURSORID = absConversion {abs=intToId, rep=idToInt} INT end val SetSytemCursor = call2 (user "SetSytemCursor") (HCURSOR, CURSORID) (SUCCESSSTATE "SetSytemCursor") fun checkCursor name c = if isHcursorNull c then raise OS.SysErr(name, SOME(GetLastError())) else c val LoadCursorFromFile = checkCursor "LoadCursorFromFile" o call1 (user "LoadCursorFromFileA") (STRING) HCURSOR (* ML extension - simpler than having a separate function. *) val LoadSystemCursorFromFile = checkCursor "LoadCursorFromFile" o call1 (user "LoadCursorFromFileA") (CURSORID) HCURSOR val ClipCursor = call1 (user "ClipCursor") (POINTERTO RECT) (SUCCESSSTATE "ClipCursor") val CopyCursor = checkCursor "CopyCursor" o call1 (user "CopyCursor") (HCURSOR) HCURSOR val DestroyCursor = call1 (user "DestroyCursor") (HCURSOR) (SUCCESSSTATE "DestroyCursor") fun GetClipCursor () = let val (toRect, _, _) = breakConversion RECT val buff = alloc 4 Clong val res = call1 (user "GetClipCursor") (POINTER) BOOL (address buff) in if res then toRect buff else raise OS.SysErr("GetClipCursor", SOME(GetLastError())) end val GetCursor = call0 (user "GetCursor") () HCURSOR fun GetCursorPos () = let val (toPoint, _, _) = breakConversion POINT val buff = alloc 2 Clong val res = call1 (user "GetCursorPos") (POINTER) BOOL (address buff) in if res then toPoint buff else raise OS.SysErr("GetCursorPos", SOME(GetLastError())) end val SetCursor = call1 (user "SetCursor") HCURSOR HCURSOR val SetCursorPos = call2 (user "SetCursorPos") (INT,INT) (SUCCESSSTATE "SetCursorPos") val ShowCursor = call1 (user "ShowCursor") BOOL INT val LoadCursor = checkCursor "LoadCursor" o call2 (user "LoadCursorA") (HINSTANCE, RESID) HCURSOR fun LoadSystemCursor(id: CursorId) = checkCursor "LoadCursor" ((call2 (user "LoadCursorA") (HINSTANCE, CURSORID) HCURSOR) (hinstanceNull, id)) (* TODO: CreateCursor a little complicated because it includes bit maps. *) end end; polyml.5.2.1/mlsource/extra/Win/DeviceBase.sml0000644000175000017500000004421010506226530020214 0ustar daviddavid(* Copyright (c) 2001 David C.J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure DeviceBase = struct local open CInterface Base in (* Paper sizes. *) (* Colours. Retain the American spelling for compatibility. *) datatype DMColor = DMCOLOR_MONOCHROME | DMCOLOR_COLOR local val tab = [ (DMCOLOR_MONOCHROME, 1), (DMCOLOR_COLOR, 2)] in val (fromDMC, toDMC) = tableLookup(tab, NONE) end (* Default source. *) datatype DMSource = DMBIN_UPPER | DMBIN_ONLYONE | DMBIN_LOWER | DMBIN_MIDDLE | DMBIN_MANUAL | DMBIN_ENVELOPE | DMBIN_ENVMANUAL | DMBIN_AUTO | DMBIN_TRACTOR | DMBIN_SMALLFMT | DMBIN_LARGEFMT | DMBIN_LARGECAPACITY | DMBIN_CASSETTE | DMBIN_FORMSOURCE | DMSOURCE_OTHER of int local val tab = [ (DMBIN_ONLYONE, 1), (DMBIN_UPPER, 1), (DMBIN_LOWER, 2), (DMBIN_MIDDLE, 3), (DMBIN_MANUAL, 4), (DMBIN_ENVELOPE, 5), (DMBIN_ENVMANUAL, 6), (DMBIN_AUTO, 7), (DMBIN_TRACTOR, 8), (DMBIN_SMALLFMT, 9), (DMBIN_LARGEFMT, 10), (DMBIN_LARGECAPACITY, 11), (DMBIN_CASSETTE, 14), (DMBIN_FORMSOURCE, 15)] in fun doConv (DMSOURCE_OTHER i) = i | doConv _ = raise Match val (fromDMS, toDMS) = tableLookup(tab, SOME(DMSOURCE_OTHER, doConv)) end (* Print quality. Positive numbers represent dots per inch. *) datatype DMResolution = DMRES_DRAFT | DMRES_LOW | DMRES_MEDIUM | DMRES_HIGH | DMRES_DPI of int local val tab = [ (DMRES_DRAFT, ~1), (DMRES_LOW, ~2), (DMRES_MEDIUM, ~3), (DMRES_HIGH, ~4)] in fun doConv (DMRES_DPI i) = i | doConv _ = raise Match val (fromDMR, toDMR) = tableLookup(tab, SOME(DMRES_DPI, doConv)) end datatype DMDuplex = DMDUP_SIMPLEX | DMDUP_VERTICAL | DMDUP_HORIZONTAL local val tab = [ (DMDUP_SIMPLEX, 1), (DMDUP_VERTICAL, 2), (DMDUP_HORIZONTAL, 3)] in val (fromDMD, toDMD) = tableLookup(tab, NONE) end datatype DMTrueType = DMTT_BITMAP | DMTT_DOWNLOAD | DMTT_SUBDEV | DMTT_DOWNLOAD_OUTLINE local val tab = [ (DMTT_BITMAP, 1), (DMTT_DOWNLOAD, 2), (DMTT_SUBDEV, 3), (DMTT_DOWNLOAD_OUTLINE, 4)] in val (fromDMTT, toDMTT) = tableLookup(tab, NONE) end datatype DMICMMethod = DMICMMETHOD_NONE | DMICMMETHOD_SYSTEM | DMICMMETHOD_DRIVER | DMICMMETHOD_DEVICE | DMICMMETHOD_OTHER of int local val tab = [ (DMICMMETHOD_NONE, 1), (DMICMMETHOD_SYSTEM, 2), (DMICMMETHOD_DRIVER, 3), (DMICMMETHOD_DEVICE, 4)] in fun doConv (DMICMMETHOD_OTHER i) = i | doConv _ = raise Match val (fromDMICMM, toDMICMM) = tableLookup(tab, SOME(DMICMMETHOD_OTHER, doConv)) end datatype DMICMIntent = DMICM_SATURATE | DMICM_CONTRAST | DMICM_COLORMETRIC | DMICMINTENT_OTHER of int local val tab = [ (DMICM_SATURATE, 1), (DMICM_CONTRAST, 2), (DMICM_COLORMETRIC, 3)] in fun doConv (DMICMINTENT_OTHER i) = i | doConv _ = raise Match val (fromDMICMI, toDMICMI) = tableLookup(tab, SOME(DMICMINTENT_OTHER, doConv)) end datatype DMMedia = DMMEDIA_STANDARD | DMMEDIA_TRANSPARENCY | DMMEDIA_GLOSSY | DMICMMEDIA_OTHER of int local val tab = [ (DMMEDIA_STANDARD, 1), (DMMEDIA_TRANSPARENCY, 2), (DMMEDIA_GLOSSY, 3)] in fun doConv (DMICMMEDIA_OTHER i) = i | doConv _ = raise Match val (fromDMM, toDMM) = tableLookup(tab, SOME(DMICMMEDIA_OTHER, doConv)) end datatype DMDither = DMDITHER_NONE | DMDITHER_COARSE | DMDITHER_FINE | DMDITHER_LINEART | DMDITHER_GRAYSCALE | DMDITHER_OTHER of int local val tab = [ (DMDITHER_NONE, 1), (DMDITHER_COARSE, 2), (DMDITHER_FINE, 3), (DMDITHER_LINEART, 4), (DMDITHER_GRAYSCALE, 5)] in fun doConv (DMDITHER_OTHER i) = i | doConv _ = raise Match val (fromDMDi, toDMDi) = tableLookup(tab, SOME(DMDITHER_OTHER, doConv)) end (* Paper orientation. *) datatype DMOrientation = DMORIENT_PORTRAIT | DMORIENT_LANDSCAPE local val tab = [ (DMORIENT_PORTRAIT, 1), (DMORIENT_LANDSCAPE, 2)] in (* Because we use getShort to get the values we don't need a Conversion. *) val (fromDMO, toDMO) = tableLookup(tab, NONE) end datatype DMPaperSize = DMPAPER_LETTER | DMPAPER_LETTERSMALL | DMPAPER_TABLOID | DMPAPER_LEDGER | DMPAPER_LEGAL | DMPAPER_STATEMENT | DMPAPER_EXECUTIVE | DMPAPER_A3 | DMPAPER_A4 | DMPAPER_A4SMALL | DMPAPER_A5 | DMPAPER_B4 | DMPAPER_B5 | DMPAPER_FOLIO | DMPAPER_QUARTO | DMPAPER_10X14 | DMPAPER_11X17 | DMPAPER_NOTE | DMPAPER_ENV_9 | DMPAPER_ENV_10 | DMPAPER_ENV_11 | DMPAPER_ENV_12 | DMPAPER_ENV_14 | DMPAPER_CSHEET | DMPAPER_DSHEET | DMPAPER_ESHEET | DMPAPER_ENV_DL | DMPAPER_ENV_C5 | DMPAPER_ENV_C3 | DMPAPER_ENV_C4 | DMPAPER_ENV_C6 | DMPAPER_ENV_C65 | DMPAPER_ENV_B4 | DMPAPER_ENV_B5 | DMPAPER_ENV_B6 | DMPAPER_ENV_ITALY | DMPAPER_ENV_MONARCH | DMPAPER_ENV_PERSONAL | DMPAPER_FANFOLD_US | DMPAPER_FANFOLD_STD_GERMAN | DMPAPER_FANFOLD_LGL_GERMAN | DMPAPER_ISO_B4 | DMPAPER_JAPANESE_POSTCARD | DMPAPER_9X11 | DMPAPER_10X11 | DMPAPER_15X11 | DMPAPER_ENV_INVITE | DMPAPER_RESERVED_48 | DMPAPER_RESERVED_49 | DMPAPER_LETTER_EXTRA | DMPAPER_LEGAL_EXTRA | DMPAPER_TABLOID_EXTRA | DMPAPER_A4_EXTRA | DMPAPER_LETTER_TRANSVERSE | DMPAPER_A4_TRANSVERSE | DMPAPER_LETTER_EXTRA_TRANSVERSE | DMPAPER_A_PLUS | DMPAPER_B_PLUS | DMPAPER_LETTER_PLUS | DMPAPER_A4_PLUS | DMPAPER_A5_TRANSVERSE | DMPAPER_B5_TRANSVERSE | DMPAPER_A3_EXTRA | DMPAPER_A5_EXTRA | DMPAPER_B5_EXTRA | DMPAPER_A2 | DMPAPER_A3_TRANSVERSE | DMPAPER_A3_EXTRA_TRANSVERSE | DMPAPER_OTHER of int local val tab = [ (DMPAPER_LETTER, 1), (DMPAPER_LETTERSMALL, 2), (DMPAPER_TABLOID, 3), (DMPAPER_LEDGER, 4), (DMPAPER_LEGAL, 5), (DMPAPER_STATEMENT, 6), (DMPAPER_EXECUTIVE, 7), (DMPAPER_A3, 8), (DMPAPER_A4, 9), (DMPAPER_A4SMALL, 10), (DMPAPER_A5, 11), (DMPAPER_B4, 12), (DMPAPER_B5, 13), (DMPAPER_FOLIO, 14), (DMPAPER_QUARTO, 15), (DMPAPER_10X14, 16), (DMPAPER_11X17, 17), (DMPAPER_NOTE, 18), (DMPAPER_ENV_9, 19), (DMPAPER_ENV_10, 20), (DMPAPER_ENV_11, 21), (DMPAPER_ENV_12, 22), (DMPAPER_ENV_14, 23), (DMPAPER_CSHEET, 24), (DMPAPER_DSHEET, 25), (DMPAPER_ESHEET, 26), (DMPAPER_ENV_DL, 27), (DMPAPER_ENV_C5, 28), (DMPAPER_ENV_C3, 29), (DMPAPER_ENV_C4, 30), (DMPAPER_ENV_C6, 31), (DMPAPER_ENV_C65, 32), (DMPAPER_ENV_B4, 33), (DMPAPER_ENV_B5, 34), (DMPAPER_ENV_B6, 35), (DMPAPER_ENV_ITALY, 36), (DMPAPER_ENV_MONARCH, 37), (DMPAPER_ENV_PERSONAL, 38), (DMPAPER_FANFOLD_US, 39), (DMPAPER_FANFOLD_STD_GERMAN, 40), (DMPAPER_FANFOLD_LGL_GERMAN, 41), (DMPAPER_ISO_B4, 42), (DMPAPER_JAPANESE_POSTCARD, 43), (DMPAPER_9X11, 44), (DMPAPER_10X11, 45), (DMPAPER_15X11, 46), (DMPAPER_ENV_INVITE, 47), (DMPAPER_RESERVED_48, 48), (DMPAPER_RESERVED_49, 49), (DMPAPER_LETTER_EXTRA, 50), (DMPAPER_LEGAL_EXTRA, 51), (DMPAPER_TABLOID_EXTRA, 52), (DMPAPER_A4_EXTRA, 53), (DMPAPER_LETTER_TRANSVERSE, 54), (DMPAPER_A4_TRANSVERSE, 55), (DMPAPER_LETTER_EXTRA_TRANSVERSE, 56), (DMPAPER_A_PLUS, 57), (DMPAPER_B_PLUS, 58), (DMPAPER_LETTER_PLUS, 59), (DMPAPER_A4_PLUS, 60), (DMPAPER_A5_TRANSVERSE, 61), (DMPAPER_B5_TRANSVERSE, 62), (DMPAPER_A3_EXTRA, 63), (DMPAPER_A5_EXTRA, 64), (DMPAPER_B5_EXTRA, 65), (DMPAPER_A2, 66), (DMPAPER_A3_TRANSVERSE, 67), (DMPAPER_A3_EXTRA_TRANSVERSE, 68) ] in (* Because we use getShort to get the values we don't need a Conversion. *) fun doConv (DMPAPER_OTHER i) = i | doConv _ = raise Match val (fromDMPS, toDMPS) = tableLookup(tab, SOME(DMPAPER_OTHER, doConv)) end type DEVMODE = { deviceName: string, driverVersion: int, orientation: DMOrientation option, paperSize: DMPaperSize option, paperLength: int option, paperWidth: int option, scale: int option, copies: int option, defaultSource: DMSource option, printQuality: DMResolution option, color: DMColor option, duplex: DMDuplex option, yResolution: int option, ttOption: DMTrueType option, collate: bool option, formName: string option, logPixels: int option, bitsPerPixel: int option, pelsWidth: int option, pelsHeight: int option, displayFlags: int option, (* Apparently no longer used. *) displayFrequency: int option, icmMethod: DMICMMethod option, icmIntent: DMICMIntent option, mediaType: DMMedia option, ditherType: DMDither option, iccManufacturer: int option, iccModel: int option, panningWidth: int option, panningHeight: int option, driverPrivate: Word8Vector.vector } local val DM_SPECVERSION = 0x0401 val DMBaseSize = 156 (* Size of structure without any user data. *) (* These bits indicate the valid fields in the structure. *) val DM_ORIENTATION = 0x00000001 val DM_PAPERSIZE = 0x00000002 val DM_PAPERLENGTH = 0x00000004 val DM_PAPERWIDTH = 0x00000008 val DM_SCALE = 0x00000010 val DM_COPIES = 0x00000100 val DM_DEFAULTSOURCE = 0x00000200 val DM_PRINTQUALITY = 0x00000400 val DM_COLOR = 0x00000800 val DM_DUPLEX = 0x00001000 val DM_YRESOLUTION = 0x00002000 val DM_TTOPTION = 0x00004000 val DM_COLLATE = 0x00008000 val DM_FORMNAME = 0x00010000 val DM_LOGPIXELS = 0x00020000 val DM_BITSPERPEL = 0x00040000 val DM_PELSWIDTH = 0x00080000 val DM_PELSHEIGHT = 0x00100000 val DM_DISPLAYFLAGS = 0x00200000 val DM_DISPLAYFREQUENCY = 0x00400000 val DM_PANNINGWIDTH = 0x00800000 val DM_PANNINGHEIGHT = 0x01000000 val DM_ICMMETHOD = 0x02000000 val DM_ICMINTENT = 0x04000000 val DM_MEDIATYPE = 0x08000000 val DM_DITHERTYPE = 0x10000000 val DM_ICCMANUFACTURER = 0x20000000 val DM_ICCMODEL = 0x40000000 (* The argument "vaddr" is the address of the structure. Perhaps we shouldn't do it that way and instead use POINTERTO in various places. *) fun fromCDevMode vaddr : DEVMODE = let val v = deref vaddr val off = ref 0 fun getShort() = let val r = fromCshort(offset (!off) Cchar v) in off := !off + sizeof(Cshort); r end; fun getLong() = let val r = fromClong(offset (!off) Cchar v) in off := !off + sizeof(Clong); r end; val deviceName = fromCstring(address v) val _ = off := !off + (32 * sizeof(Cchar)) val specVersion = getShort() val driverVersion = getShort() val size = getShort() val driverExtra = getShort() (* The "fields" value determines which of the fields are valid. *) val fields = getLong() fun getOpt opt conv v = if IntInf.andb(fields, opt) = 0 then NONE else SOME(conv v) fun I x = x val orientation = (getOpt DM_ORIENTATION toDMO o getShort) () val paperSize = (getOpt DM_PAPERSIZE toDMPS o getShort) () val paperLength = getOpt DM_PAPERLENGTH I (getShort()) val paperWidth = getOpt DM_PAPERWIDTH I (getShort()) val scale = getOpt DM_SCALE I (getShort()) val copies = getOpt DM_COPIES I (getShort()) val defaultSource = (getOpt DM_DEFAULTSOURCE toDMS o getShort) () val printQuality = (getOpt DM_PRINTQUALITY toDMR o getShort) () val colour = (getOpt DM_COLOR toDMC o getShort) () val duplex = (getOpt DM_DUPLEX toDMD o getShort) () val yResolution = getOpt DM_YRESOLUTION I (getShort()) val ttOption = (getOpt DM_TTOPTION toDMTT o getShort) () val collate = getOpt DM_COLLATE I (getShort()) val formName = getOpt DM_FORMNAME I (fromCstring(address(offset (!off) Cchar v))) val _ = off := !off + (32 * sizeof(Cchar)) val logPixels = getOpt DM_LOGPIXELS I (getShort()) val bitsPerPixel = getOpt DM_BITSPERPEL I (getLong()) val pelsWidth = getOpt DM_PELSWIDTH I (getLong()) val pelsHeight = getOpt DM_PELSHEIGHT I (getLong()) val displayFlags = getOpt DM_DISPLAYFLAGS I (getLong()) val displayFrequency = getOpt DM_DISPLAYFREQUENCY I (getLong()) val icmMethod = (getOpt DM_ICMMETHOD toDMICMM o getLong) () val icmIntent = (getOpt DM_ICMINTENT toDMICMI o getLong) () val mediaType = (getOpt DM_MEDIATYPE toDMM o getLong) () val ditherType = (getOpt DM_DITHERTYPE toDMDi o getLong) () val iccManufacturer = getOpt DM_ICCMANUFACTURER I (getLong()) val iccModel = getOpt DM_ICCMODEL I (getLong()) val panningWidth = getOpt DM_PANNINGWIDTH I (getLong()) val panningHeight = getOpt DM_PANNINGHEIGHT I (getLong()) (* There may be private data at the end. *) val driverPrivate = toWord8vec(address(offset size Cchar v), driverExtra) in { deviceName = deviceName, driverVersion = driverVersion, orientation = orientation, paperSize = paperSize, paperLength = paperLength, paperWidth = paperWidth, scale = scale, copies = copies, defaultSource = defaultSource, printQuality = printQuality, color = colour, duplex = duplex, yResolution = yResolution, ttOption = ttOption, collate = case collate of NONE => NONE | SOME 0 => SOME false | SOME _ => SOME true, formName = formName, logPixels = logPixels, bitsPerPixel = bitsPerPixel, pelsWidth = pelsWidth, pelsHeight = pelsHeight, displayFlags = displayFlags, displayFrequency = displayFrequency, icmMethod = icmMethod, icmIntent = icmIntent, mediaType = mediaType, ditherType = ditherType, iccManufacturer = iccManufacturer, iccModel = iccModel, panningWidth = panningWidth, panningHeight = panningHeight, driverPrivate = driverPrivate } end fun toCDevMode({ deviceName: string, driverVersion: int, orientation: DMOrientation option, paperSize: DMPaperSize option, paperLength: int option, paperWidth: int option, scale: int option, copies: int option, defaultSource: DMSource option, printQuality: DMResolution option, color: DMColor option, duplex: DMDuplex option, yResolution: int option, ttOption: DMTrueType option, collate: bool option, formName: string option, logPixels: int option, bitsPerPixel: int option, pelsWidth: int option, pelsHeight: int option, displayFlags: int option, (* Apparently no longer used. *) displayFrequency: int option, icmMethod: DMICMMethod option, icmIntent: DMICMIntent option, mediaType: DMMedia option, ditherType: DMDither option, iccManufacturer: int option, iccModel: int option, panningWidth: int option, panningHeight: int option, driverPrivate: Word8Vector.vector }: DEVMODE) : vol = let val driverExtra = Word8Vector.length driverPrivate val v = alloc (DMBaseSize + driverExtra) Cchar val off = ref 0 (* The name can be at most 31 characters. *) val devName = if size deviceName > 31 then String.substring(deviceName, 0, 31) else deviceName (* setShort and setLong set the appropriate field and advance the pointer. *) fun setShort i = (assign Cshort (offset (!off) Cchar v) (toCshort i); off := !off + sizeof Cshort) fun setLong i = (assign Clong (offset (!off) Cchar v) (toClong i); off := !off + sizeof Clong) (* Optional values default to zero. If the option is SOME v we set the appropriate bit in "fields". *) val fields = ref 0 fun setOpt opt _ NONE = 0 | setOpt opt conv (SOME v) = (fields := IntInf.orb(!fields, opt); conv v) fun I x = x fun fromCollate true = 1 | fromCollate false = 0 val form = case formName of NONE => "" | SOME s => if size s > 31 then String.substring(s, 0, 31) else s in fillCstring v devName; off := !off + 32; setShort DM_SPECVERSION; setShort driverVersion; setShort DMBaseSize; setShort driverExtra; setLong 0; (* Fields - set this later. *) setShort(setOpt DM_ORIENTATION fromDMO orientation); setShort(setOpt DM_PAPERSIZE fromDMPS paperSize); setShort(setOpt DM_PAPERLENGTH I paperLength); setShort(setOpt DM_PAPERWIDTH I paperWidth); setShort(setOpt DM_SCALE I scale); setShort(setOpt DM_COPIES I copies); setShort(setOpt DM_DEFAULTSOURCE fromDMS defaultSource); setShort(setOpt DM_PRINTQUALITY fromDMR printQuality); setShort(setOpt DM_COLOR fromDMC color); setShort(setOpt DM_DUPLEX fromDMD duplex); setShort(setOpt DM_YRESOLUTION I yResolution); setShort(setOpt DM_TTOPTION fromDMTT ttOption); setShort(setOpt DM_COLLATE fromCollate collate); fillCstring (offset (!off) Cchar v) form; off := !off + 32; setShort(setOpt DM_LOGPIXELS I logPixels); setLong(setOpt DM_BITSPERPEL I bitsPerPixel); setLong(setOpt DM_PELSWIDTH I pelsWidth); setLong(setOpt DM_PELSHEIGHT I pelsHeight); setLong(setOpt DM_DISPLAYFLAGS I displayFlags); setLong(setOpt DM_DISPLAYFREQUENCY I displayFrequency); setLong(setOpt DM_ICMMETHOD fromDMICMM icmMethod); setLong(setOpt DM_ICMINTENT fromDMICMI icmIntent); setLong(setOpt DM_MEDIATYPE fromDMM mediaType); setLong(setOpt DM_DITHERTYPE fromDMDi ditherType); setLong(setOpt DM_ICCMANUFACTURER I iccManufacturer); setLong(setOpt DM_ICCMODEL I iccModel); setLong(setOpt DM_PANNINGWIDTH I panningWidth); setLong(setOpt DM_PANNINGHEIGHT I panningHeight); (* Set the fields now. *) assign Clong (offset 40 Cchar v) (toClong(!fields)); let fun copyToBuf (i, c): unit = assign Cchar (offset (i + !off) Cchar v) (toCint(Word8.toInt c)) in Word8Vector.appi copyToBuf driverPrivate end; address v end in val LPDEVMODE = mkConversion fromCDevMode toCDevMode (Cpointer Cvoid) end end end; polyml.5.2.1/mlsource/extra/Win/DeviceContext.sml0000644000175000017500000006733310313043364020777 0ustar daviddavid(* Copyright (c) 2001 David C.J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure DeviceContext: sig type BITMAP and HDC and HGDIOBJ and HWND and HRGN type LOGBRUSH = Brush.LOGBRUSH type LOGFONT = Font.LOGFONT type LOGPEN = Pen.LOGPEN type POINT = {x: int, y: int} type StockObjectType val ANSI_FIXED_FONT : StockObjectType val ANSI_VAR_FONT : StockObjectType val BLACK_BRUSH : StockObjectType val BLACK_PEN : StockObjectType val CLR_INVALID : StockObjectType val DEFAULT_PALETTE : StockObjectType val DEVICE_DEFAULT_FONT : StockObjectType val DKGRAY_BRUSH : StockObjectType val GRAY_BRUSH : StockObjectType val HOLLOW_BRUSH : StockObjectType val LTGRAY_BRUSH : StockObjectType val NULL_BRUSH : StockObjectType val NULL_PEN : StockObjectType val OEM_FIXED_FONT : StockObjectType val SYSTEM_FIXED_FONT : StockObjectType val SYSTEM_FONT : StockObjectType val WHITE_BRUSH : StockObjectType val WHITE_PEN : StockObjectType val GetStockObject : StockObjectType -> HGDIOBJ eqtype DeviceItem val ASPECTX : DeviceItem val ASPECTXY : DeviceItem val ASPECTY : DeviceItem val BITSPIXEL : DeviceItem val CLIPCAPS : DeviceItem val COLORRES : DeviceItem val CURVECAPS : DeviceItem val DRIVERVERSION : DeviceItem val HORZRES : DeviceItem val HORZSIZE : DeviceItem val LINECAPS : DeviceItem val LOGPIXELSX : DeviceItem val LOGPIXELSY : DeviceItem val NUMBRUSHES : DeviceItem val NUMCOLORS : DeviceItem val NUMFONTS : DeviceItem val NUMMARKERS : DeviceItem val NUMPENS : DeviceItem val NUMRESERVED : DeviceItem val PDEVICESIZE : DeviceItem val PHYSICALHEIGHT : DeviceItem val PHYSICALOFFSETX : DeviceItem val PHYSICALOFFSETY : DeviceItem val PHYSICALWIDTH : DeviceItem val PLANES : DeviceItem val POLYGONALCAPS : DeviceItem val RASTERCAPS : DeviceItem val SCALINGFACTORX : DeviceItem val SCALINGFACTORY : DeviceItem val SIZEPALETTE : DeviceItem val TECHNOLOGY : DeviceItem val TEXTCAPS : DeviceItem val VERTRES : DeviceItem val VERTSIZE : DeviceItem val GetDeviceCaps : HDC * DeviceItem -> int (* Results of various calls to GetDeviceCaps. Perhaps its result type should be a union. *) val CC_CHORD : int val CC_CIRCLES : int val CC_ELLIPSES : int val CC_INTERIORS : int val CC_NONE : int val CC_PIE : int val CC_ROUNDRECT : int val CC_STYLED : int val CC_WIDE : int val CC_WIDESTYLED : int val CP_NONE : int val CP_RECTANGLE : int val CP_REGION : int val DT_CHARSTREAM : int val DT_DISPFILE : int val DT_METAFILE : int val DT_PLOTTER : int val DT_RASCAMERA : int val DT_RASDISPLAY : int val DT_RASPRINTER : int val LC_INTERIORS : int val LC_MARKER : int val LC_NONE : int val LC_POLYLINE : int val LC_POLYMARKER : int val LC_STYLED : int val LC_WIDE : int val LC_WIDESTYLED : int val PC_INTERIORS : int val PC_NONE : int val PC_PATHS : int val PC_POLYGON : int val PC_POLYPOLYGON : int val PC_RECTANGLE : int val PC_SCANLINE : int val PC_STYLED : int val PC_TRAPEZOID : int val PC_WIDE : int val PC_WIDESTYLED : int val PC_WINDPOLYGON : int val RC_BANDING : int val RC_BIGFONT : int val RC_BITBLT : int val RC_BITMAP64 : int val RC_DEVBITS : int val RC_DIBTODEV : int val RC_DI_BITMAP : int val RC_FLOODFILL : int val RC_GDI20_OUTPUT : int val RC_GDI20_STATE : int val RC_OP_DX_OUTPUT : int val RC_PALETTE : int val RC_SAVEBITMAP : int val RC_SCALING : int val RC_STRETCHBLT : int val RC_STRETCHDIB : int val TC_CP_STROKE : int val TC_CR_90 : int val TC_CR_ANY : int val TC_EA_DOUBLE : int val TC_IA_ABLE : int val TC_OP_CHARACTER : int val TC_OP_STROKE : int val TC_RA_ABLE : int val TC_RESERVED : int val TC_SA_CONTIN : int val TC_SA_DOUBLE : int val TC_SA_INTEGER : int val TC_SCROLLBLT : int val TC_SF_X_YINDEP : int val TC_SO_ABLE : int val TC_UA_ABLE : int val TC_VA_ABLE : int datatype DMColor = DMCOLOR_COLOR | DMCOLOR_MONOCHROME and DMDither = DMDITHER_COARSE | DMDITHER_FINE | DMDITHER_GRAYSCALE | DMDITHER_LINEART | DMDITHER_NONE | DMDITHER_OTHER of int and DMDuplex = DMDUP_HORIZONTAL | DMDUP_SIMPLEX | DMDUP_VERTICAL and DMICMIntent = DMICMINTENT_OTHER of int | DMICM_COLORMETRIC | DMICM_CONTRAST | DMICM_SATURATE and DMICMMethod = DMICMMETHOD_DEVICE | DMICMMETHOD_DRIVER | DMICMMETHOD_NONE | DMICMMETHOD_OTHER of int | DMICMMETHOD_SYSTEM and DMMedia = DMICMMEDIA_OTHER of int | DMMEDIA_GLOSSY | DMMEDIA_STANDARD | DMMEDIA_TRANSPARENCY and DMOrientation = DMORIENT_LANDSCAPE | DMORIENT_PORTRAIT and DMPaperSize = DMPAPER_10X11 | DMPAPER_10X14 | DMPAPER_11X17 | DMPAPER_15X11 | DMPAPER_9X11 | DMPAPER_A2 | DMPAPER_A3 | DMPAPER_A3_EXTRA | DMPAPER_A3_EXTRA_TRANSVERSE | DMPAPER_A3_TRANSVERSE | DMPAPER_A4 | DMPAPER_A4SMALL | DMPAPER_A4_EXTRA | DMPAPER_A4_PLUS | DMPAPER_A4_TRANSVERSE | DMPAPER_A5 | DMPAPER_A5_EXTRA | DMPAPER_A5_TRANSVERSE | DMPAPER_A_PLUS | DMPAPER_B4 | DMPAPER_B5 | DMPAPER_B5_EXTRA | DMPAPER_B5_TRANSVERSE | DMPAPER_B_PLUS | DMPAPER_CSHEET | DMPAPER_DSHEET | DMPAPER_ENV_10 | DMPAPER_ENV_11 | DMPAPER_ENV_12 | DMPAPER_ENV_14 | DMPAPER_ENV_9 | DMPAPER_ENV_B4 | DMPAPER_ENV_B5 | DMPAPER_ENV_B6 | DMPAPER_ENV_C3 | DMPAPER_ENV_C4 | DMPAPER_ENV_C5 | DMPAPER_ENV_C6 | DMPAPER_ENV_C65 | DMPAPER_ENV_DL | DMPAPER_ENV_INVITE | DMPAPER_ENV_ITALY | DMPAPER_ENV_MONARCH | DMPAPER_ENV_PERSONAL | DMPAPER_ESHEET | DMPAPER_EXECUTIVE | DMPAPER_FANFOLD_LGL_GERMAN | DMPAPER_FANFOLD_STD_GERMAN | DMPAPER_FANFOLD_US | DMPAPER_FOLIO | DMPAPER_ISO_B4 | DMPAPER_JAPANESE_POSTCARD | DMPAPER_LEDGER | DMPAPER_LEGAL | DMPAPER_LEGAL_EXTRA | DMPAPER_LETTER | DMPAPER_LETTERSMALL | DMPAPER_LETTER_EXTRA | DMPAPER_LETTER_EXTRA_TRANSVERSE | DMPAPER_LETTER_PLUS | DMPAPER_LETTER_TRANSVERSE | DMPAPER_NOTE | DMPAPER_OTHER of int | DMPAPER_QUARTO | DMPAPER_RESERVED_48 | DMPAPER_RESERVED_49 | DMPAPER_STATEMENT | DMPAPER_TABLOID | DMPAPER_TABLOID_EXTRA and DMResolution = DMRES_DPI of int | DMRES_DRAFT | DMRES_HIGH | DMRES_LOW | DMRES_MEDIUM and DMSource = DMBIN_AUTO | DMBIN_CASSETTE | DMBIN_ENVELOPE | DMBIN_ENVMANUAL | DMBIN_FORMSOURCE | DMBIN_LARGECAPACITY | DMBIN_LARGEFMT | DMBIN_LOWER | DMBIN_MANUAL | DMBIN_MIDDLE | DMBIN_ONLYONE | DMBIN_SMALLFMT | DMBIN_TRACTOR | DMBIN_UPPER | DMSOURCE_OTHER of int and DMTrueType = DMTT_BITMAP | DMTT_DOWNLOAD | DMTT_DOWNLOAD_OUTLINE | DMTT_SUBDEV type DEVMODE = { deviceName: string, driverVersion: int, orientation: DMOrientation option, paperSize: DMPaperSize option, paperLength: int option, paperWidth: int option, scale: int option, copies: int option, defaultSource: DMSource option, printQuality: DMResolution option, color: DMColor option, duplex: DMDuplex option, yResolution: int option, ttOption: DMTrueType option, collate: bool option, formName: string option, logPixels: int option, bitsPerPixel: int option, pelsWidth: int option, pelsHeight: int option, displayFlags: int option, (* Apparently no longer used. *) displayFrequency: int option, icmMethod: DMICMMethod option, icmIntent: DMICMIntent option, mediaType: DMMedia option, ditherType: DMDither option, iccManufacturer: int option, iccModel: int option, panningWidth: int option, panningHeight: int option, driverPrivate: Word8Vector.vector } val CancelDC : HDC -> unit val CreateCompatibleDC : HDC -> HDC val CreateDC : string option * string option * string option * DEVMODE option -> HDC val DeleteDC : HDC -> unit val DeleteObject : HGDIOBJ -> unit datatype EnumObject = OBJ_BITMAP | OBJ_BRUSH | OBJ_DC | OBJ_ENHMETADC | OBJ_ENHMETAFILE | OBJ_EXTPEN | OBJ_FONT | OBJ_MEMDC | OBJ_METADC | OBJ_METAFILE | OBJ_PAL | OBJ_PEN | OBJ_REGION val GetCurrentObject : HDC * EnumObject -> HGDIOBJ val GetDC : HWND -> HDC datatype DeviceContextFlag = DCX_CACHE | DCX_CLIPCHILDREN | DCX_CLIPSIBLINGS | DCX_EXCLUDERGN | DCX_EXCLUDEUPDATE | DCX_INTERSECTRGN | DCX_INTERSECTUPDATE | DCX_LOCKWINDOWUPDATE | DCX_NORECOMPUTE | DCX_NORESETATTRS | DCX_PARENTCLIP | DCX_VALIDATE | DCX_WINDOW val GetDCEx : HWND * HRGN * DeviceContextFlag list -> HDC val GetDCOrgEx : HDC -> POINT datatype GetObject = GO_Bitmap of BITMAP | GO_Brush of LOGBRUSH | GO_Font of LOGFONT | GO_Palette of int | GO_Pen of LOGPEN val GetObject : HGDIOBJ -> GetObject val GetObjectType : HGDIOBJ -> EnumObject val ReleaseDC : HWND * HDC -> bool val ResetDC : HDC * DEVMODE -> HDC val RestoreDC : HDC * int -> unit val SaveDC : HDC -> int val SelectObject : HDC * HGDIOBJ -> HGDIOBJ type DEVNAMES = {driver: string, device: string, output: string, default: bool} end = struct local open CInterface Base fun callgdi name = call_sym (load_sym (load_lib "gdi32.DLL") name) fun gdicall_IW name CR (C1,C2) (a1) = let val (from1,to1,ctype1) = breakConversion C1 val (from2,to2,ctype2) = breakConversion C2 val (fromR,toR,ctypeR) = breakConversion CR val va1 = to1 a1 val va2 = address (alloc 1 ctype2) val res = callgdi name [(ctype1,va1),(Cpointer ctype2,va2)] ctypeR val _: unit = fromR res in (from2 (deref va2)) end fun checkDC name c = if isHdcNull c then raise OS.SysErr(name, SOME(GetLastError())) else c in type HDC = HDC and HGDIOBJ = HGDIOBJ and HWND = HWND and HRGN = HRGN type LOGFONT = Font.LOGFONT open GdiBase DeviceBase type POINT = POINT datatype DeviceContextFlag = DCX_WINDOW | DCX_CACHE | DCX_NORESETATTRS | DCX_CLIPCHILDREN | DCX_CLIPSIBLINGS | DCX_PARENTCLIP | DCX_EXCLUDERGN | DCX_INTERSECTRGN | DCX_EXCLUDEUPDATE | DCX_INTERSECTUPDATE | DCX_LOCKWINDOWUPDATE | DCX_NORECOMPUTE | DCX_VALIDATE local val tab = [ (DCX_WINDOW, 0x00000001), (DCX_CACHE, 0x00000002), (DCX_NORESETATTRS, 0x00000004), (DCX_CLIPCHILDREN, 0x00000008), (DCX_CLIPSIBLINGS, 0x00000010), (DCX_PARENTCLIP, 0x00000020), (DCX_EXCLUDERGN, 0x00000040), (DCX_INTERSECTRGN, 0x00000080), (DCX_EXCLUDEUPDATE, 0x00000100), (DCX_INTERSECTUPDATE, 0x00000200), (DCX_LOCKWINDOWUPDATE, 0x00000400), (DCX_NORECOMPUTE, 0x00100000), (DCX_VALIDATE, 0x00200000)] in val DEVICECONTEXTFLAG = tableSetConversion(tab, NONE) end (* DEVNAMES is not actually used in this structure. *) type DEVNAMES = {driver: string, device: string, output: string, default: bool} datatype EnumObject = OBJ_PEN | OBJ_BRUSH | OBJ_DC | OBJ_METADC | OBJ_PAL | OBJ_FONT | OBJ_BITMAP | OBJ_REGION | OBJ_METAFILE | OBJ_MEMDC | OBJ_EXTPEN | OBJ_ENHMETADC | OBJ_ENHMETAFILE local val tab = [ (OBJ_PEN, 1), (OBJ_BRUSH, 2), (OBJ_DC, 3), (OBJ_METADC, 4), (OBJ_PAL, 5), (OBJ_FONT, 6), (OBJ_BITMAP, 7), (OBJ_REGION, 8), (OBJ_METAFILE, 9), (OBJ_MEMDC, 10), (OBJ_EXTPEN, 11), (OBJ_ENHMETADC, 12), (OBJ_ENHMETAFILE, 13) ] datatype EnumObject = W of int (* GetObjectType returns 0 in the event of an error. *) fun toInt _ = raise Match fun fromInt i = if i = 0 then raise OS.SysErr("ObjectType", SOME(GetLastError())) else raise Match; in val ENUMOBJECT = tableConversion(tab, SOME(fromInt, toInt)) end local datatype DeviceItem = W of int in type DeviceItem = DeviceItem val DEVICEITEM = absConversion {abs = W, rep = fn W n => n} INT val DRIVERVERSION = W (0 (* Device driver version *)) val TECHNOLOGY = W (2 (* Device classification *)) val HORZSIZE = W (4 (* Horizontal size in millimeters *)) val VERTSIZE = W (6 (* Vertical size in millimeters *)) val HORZRES = W (8 (* Horizontal width in pixels *)) val VERTRES = W (10 (* Vertical width in pixels *)) val BITSPIXEL = W (12 (* Number of bits per pixel *)) val PLANES = W (14 (* Number of planes *)) val NUMBRUSHES = W (16 (* Number of brushes the device has *)) val NUMPENS = W (18 (* Number of pens the device has *)) val NUMMARKERS = W (20 (* Number of markers the device has *)) val NUMFONTS = W (22 (* Number of fonts the device has *)) val NUMCOLORS = W (24 (* Number of colors the device supports *)) val PDEVICESIZE = W (26 (* Size required for device descriptor *)) val CURVECAPS = W (28 (* Curve capabilities *)) val LINECAPS = W (30 (* Line capabilities *)) val POLYGONALCAPS = W (32 (* Polygonal capabilities *)) val TEXTCAPS = W (34 (* Text capabilities *)) val CLIPCAPS = W (36 (* Clipping capabilities *)) val RASTERCAPS = W (38 (* Bitblt capabilities *)) val ASPECTX = W (40 (* Length of the X leg *)) val ASPECTY = W (42 (* Length of the Y leg *)) val ASPECTXY = W (44 (* Length of the hypotenuse *)) val LOGPIXELSX = W (88 (* Logical pixels/inch in X *)) val LOGPIXELSY = W (90 (* Logical pixels/inch in Y *)) val SIZEPALETTE = W (104 (* Number of entries in physical palette *)) val NUMRESERVED = W (106 (* Number of reserved entries in palette *)) val COLORRES = W (108 (* Actual color resolution *)) val PHYSICALWIDTH = W (110 (* Physical Width in device units *)) val PHYSICALHEIGHT = W (111 (* Physical Height in device units *)) val PHYSICALOFFSETX = W (112 (* Physical Printable Area x margin *)) val PHYSICALOFFSETY = W (113 (* Physical Printable Area y margin *)) val SCALINGFACTORX = W (114 (* Scaling factor x *)) val SCALINGFACTORY = W (115 (* Scaling factor y *)) end (* Results of GetDeviceCaps. Since it returns an int all these are simply ints. *) val DT_PLOTTER = 0 (* Vector plotter *) val DT_RASDISPLAY = 1 (* Raster display *) val DT_RASPRINTER = 2 (* Raster printer *) val DT_RASCAMERA = 3 (* Raster camera *) val DT_CHARSTREAM = 4 (* Character-stream, PLP *) val DT_METAFILE = 5 (* Metafile, VDM *) val DT_DISPFILE = 6 (* Display-file *) (* Curve Capabilities *) val CC_NONE = 0 (* Curves not supported *) val CC_CIRCLES = 1 (* Can do circles *) val CC_PIE = 2 (* Can do pie wedges *) val CC_CHORD = 4 (* Can do chord arcs *) val CC_ELLIPSES = 8 (* Can do ellipese *) val CC_WIDE = 16 (* Can do wide lines *) val CC_STYLED = 32 (* Can do styled lines *) val CC_WIDESTYLED = 64 (* Can do wide styled lines *) val CC_INTERIORS = 128 (* Can do interiors *) val CC_ROUNDRECT = 256 (* *) (* Line Capabilities *) val LC_NONE = 0 (* Lines not supported *) val LC_POLYLINE = 2 (* Can do polylines *) val LC_MARKER = 4 (* Can do markers *) val LC_POLYMARKER = 8 (* Can do polymarkers *) val LC_WIDE = 16 (* Can do wide lines *) val LC_STYLED = 32 (* Can do styled lines *) val LC_WIDESTYLED = 64 (* Can do wide styled lines *) val LC_INTERIORS = 128 (* Can do interiors *) (* Polygonal Capabilities *) val PC_NONE = 0 (* Polygonals not supported *) val PC_POLYGON = 1 (* Can do polygons *) val PC_RECTANGLE = 2 (* Can do rectangles *) val PC_WINDPOLYGON = 4 (* Can do winding polygons *) val PC_TRAPEZOID = 4 (* Can do trapezoids *) val PC_SCANLINE = 8 (* Can do scanlines *) val PC_WIDE = 16 (* Can do wide borders *) val PC_STYLED = 32 (* Can do styled borders *) val PC_WIDESTYLED = 64 (* Can do wide styled borders *) val PC_INTERIORS = 128 (* Can do interiors *) val PC_POLYPOLYGON = 256 (* Can do polypolygons *) val PC_PATHS = 512 (* Can do paths *) (* Clipping Capabilities *) val CP_NONE = 0 (* No clipping of output *) val CP_RECTANGLE = 1 (* Output clipped to rects *) val CP_REGION = 2 (* obsolete *) (* Text Capabilities *) val TC_OP_CHARACTER = 0x00000001 (* Can do OutputPrecision CHARACTER *) val TC_OP_STROKE = 0x00000002 (* Can do OutputPrecision STROKE *) val TC_CP_STROKE = 0x00000004 (* Can do ClipPrecision STROKE *) val TC_CR_90 = 0x00000008 (* Can do CharRotAbility 90 *) val TC_CR_ANY = 0x00000010 (* Can do CharRotAbility ANY *) val TC_SF_X_YINDEP = 0x00000020 (* Can do ScaleFreedom X_YINDEPENDENT *) val TC_SA_DOUBLE = 0x00000040 (* Can do ScaleAbility DOUBLE *) val TC_SA_INTEGER = 0x00000080 (* Can do ScaleAbility INTEGER *) val TC_SA_CONTIN = 0x00000100 (* Can do ScaleAbility CONTINUOUS *) val TC_EA_DOUBLE = 0x00000200 (* Can do EmboldenAbility DOUBLE *) val TC_IA_ABLE = 0x00000400 (* Can do ItalisizeAbility ABLE *) val TC_UA_ABLE = 0x00000800 (* Can do UnderlineAbility ABLE *) val TC_SO_ABLE = 0x00001000 (* Can do StrikeOutAbility ABLE *) val TC_RA_ABLE = 0x00002000 (* Can do RasterFontAble ABLE *) val TC_VA_ABLE = 0x00004000 (* Can do VectorFontAble ABLE *) val TC_RESERVED = 0x00008000 val TC_SCROLLBLT = 0x00010000 (* Don't do text scroll with blt *) (* Raster Capabilities *) val RC_BITBLT = 1 (* Can do standard BLT. *) val RC_BANDING = 2 (* Device requires banding support *) val RC_SCALING = 4 (* Device requires scaling support *) val RC_BITMAP64 = 8 (* Device can support >64K bitmap *) val RC_GDI20_OUTPUT = 0x0010 (* has 2.0 output calls *) val RC_GDI20_STATE = 0x0020 val RC_SAVEBITMAP = 0x0040 val RC_DI_BITMAP = 0x0080 (* supports DIB to memory *) val RC_PALETTE = 0x0100 (* supports a palette *) val RC_DIBTODEV = 0x0200 (* supports DIBitsToDevice *) val RC_BIGFONT = 0x0400 (* supports >64K fonts *) val RC_STRETCHBLT = 0x0800 (* supports StretchBlt *) val RC_FLOODFILL = 0x1000 (* supports FloodFill *) val RC_STRETCHDIB = 0x2000 (* supports StretchDIBits *) val RC_OP_DX_OUTPUT = 0x4000 val RC_DEVBITS = 0x8000 local datatype StockObjectType = W of int in type StockObjectType = StockObjectType val STOCKOBJECTTYPE = absConversion {abs = W, rep = fn W n => n} INT val WHITE_BRUSH = W (0) val LTGRAY_BRUSH = W (1) val GRAY_BRUSH = W (2) val DKGRAY_BRUSH = W (3) val BLACK_BRUSH = W (4) val NULL_BRUSH = W (5) val HOLLOW_BRUSH = NULL_BRUSH val WHITE_PEN = W (6) val BLACK_PEN = W (7) val NULL_PEN = W (8) val OEM_FIXED_FONT = W (10) val ANSI_FIXED_FONT = W (11) val ANSI_VAR_FONT = W (12) val SYSTEM_FONT = W (13) val DEVICE_DEFAULT_FONT = W (14) val DEFAULT_PALETTE = W (15) val SYSTEM_FIXED_FONT = W (16) val STOCK_LAST = W (16) val CLR_INVALID = W (0xFFFFFFFF) end val CancelDC = call1(gdi "CancelDC") (HDC) (SUCCESSSTATE "CancelDC") val CreateCompatibleDC = call1(gdi "CreateCompatibleDC") (HDC) HDC val DeleteDC = call1(gdi "DeleteDC") (HDC) (SUCCESSSTATE "DeleteDC") val DeleteObject = call1(gdi "DeleteObject") (HGDIOBJ) (SUCCESSSTATE "DeleteObject") val GetCurrentObject = call2(gdi "GetCurrentObject") (HDC,ENUMOBJECT) HGDIOBJ val GetDC = checkDC "GetDC" o call1(user "GetDC") (HWND) HDC val GetDCEx = checkDC "GetDCEx" o call3(user "GetDCEx") (HWND,HRGN,DEVICECONTEXTFLAG) HDC val GetDCOrgEx = gdicall_IW "GetDCOrgEx" (SUCCESSSTATE "GetDCOrgEx") (HDC,POINT) val GetDeviceCaps = call2(gdi "GetDeviceCaps") (HDC,DEVICEITEM) INT val GetObjectType = call1(gdi "GetObjectType") (HGDIOBJ) ENUMOBJECT val GetStockObject = call1 (gdi "GetStockObject") (STOCKOBJECTTYPE) HGDIOBJ val ReleaseDC = call2(user "ReleaseDC") (HWND,HDC) BOOL val RestoreDC = call2(gdi "RestoreDC") (HDC,INT) (SUCCESSSTATE "RestoreDC") val SaveDC = call1(gdi "SaveDC") (HDC) INT val ResetDC = call2 (gdi "ResetDC") (HDC, LPDEVMODE) HDC (* The result of SelectObject is a bit of a mess. It is the original object being replaced except if the argument is a region when it returns a RESULTREGION. Perhaps we need a different function for that. *) val SelectObject = call2(gdi "SelectObject") (HDC,HGDIOBJ) HGDIOBJ local val cdc = call4 (gdi "CreateDCA") (STRINGOPT, STRINGOPT, STRINGOPT, POINTER) HDC val (_, toCdev, _) = breakConversion LPDEVMODE in fun CreateDC(driver: string option, device: string option, output: string option, data: DEVMODE option) = checkDC "CreateDC" (cdc(driver, device, output, case data of NONE => toCint 0 | SOME dev => toCdev dev)) end (* GetObject returns information about different kinds of GDI object. It takes a pointer to a structure whose size and format differ according to the type of object. To implement this properly in ML we have to find out the type before we start. *) datatype GetObject = GO_Bitmap of BITMAP (*| GO_DIBSection of DIBSECTION*) (* This is a subset of BITMAP *) (*| GO_ExPen of EXTLOGPEN*) | GO_Brush of LOGBRUSH | GO_Font of LOGFONT | GO_Pen of LOGPEN | GO_Palette of int local val getObj = call3 (gdi "GetObjectA") (HGDIOBJ, INT, POINTER) INT val (fromCBM, _, _) = breakConversion BITMAP val (fromCLF, _, _) = breakConversion FontBase.LOGFONT val (fromCLB, _, _) = breakConversion LOGBRUSH val (fromCLP, _, _) = breakConversion LOGPEN in fun GetObject(hgdi: HGDIOBJ): GetObject = let (* Call with a NULL buffer to find out the memory required. Also checks the GDI object. *) val space = getObj(hgdi, 0, toCint 0) val _ = if space <= 0 then raise OS.SysErr("GetObject", SOME(GetLastError())) else () val mem = alloc space Cchar val res = getObj(hgdi, space, address mem) in case GetObjectType hgdi of OBJ_PEN => GO_Pen(fromCLP mem) | OBJ_BRUSH => GO_Brush(fromCLB mem) | OBJ_BITMAP => GO_Bitmap(fromCBM mem) | OBJ_FONT => GO_Font(fromCLF mem) (*| OBJ_EXPEN => *) (* TODO!!*) | OBJ_PAL => GO_Palette(fromCshort mem) (* Number of entries. *) | _ => raise Fail "Different type" end end (* Other Device context functions: ChangeDisplaySettings ChangeDisplaySettingsEx CreateIC DeviceCapabilities DrawEscape EnumDisplayDevices EnumDisplaySettings EnumObjects EnumObjectsProc GetDCBrushColor - NT 5.0 and Win 98 only GetDCPenColor - NT 5.0 and Win 98 only SetDCBrushColor - NT 5.0 and Win 98 only SetDCPenColor - NT 5.0 and Win 98 only *) end end; polyml.5.2.1/mlsource/extra/Win/Dialog.sml0000644000175000017500000004550310676746561017452 0ustar daviddavid(* Copyright (c) 2001-7 David C.J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* Dialogue boxes and operations on them. *) structure Dialog: sig type HWND and HINSTANCE datatype DLGCLASSES = DLG_CLASS of string * Window.Style.flags | DLG_BUTTON of Button.Style.flags | DLG_COMBOBOX of Combobox.Style.flags | DLG_EDIT of Edit.Style.flags | DLG_LISTBOX of Listbox.Style.flags | DLG_SCROLLBAR of Scrollbar.Style.flags | DLG_STATIC of Static.Style.flags datatype DLGTITLE = DLG_TITLERESOURCE of int | DLG_TITLESTRING of string structure Style: sig include BIT_FLAGS val WS_OVERLAPPED: flags and WS_POPUP: flags and WS_CHILD: flags and WS_MINIMIZE: flags and WS_VISIBLE: flags and WS_DISABLED:flags and WS_CLIPSIBLINGS:flags and WS_CLIPCHILDREN:flags and WS_MAXIMIZE:flags and WS_CAPTION:flags and WS_BORDER:flags and WS_DLGFRAME:flags and WS_VSCROLL:flags and WS_HSCROLL:flags and WS_SYSMENU:flags and WS_THICKFRAME:flags and WS_GROUP:flags and WS_TABSTOP:flags and WS_MINIMIZEBOX:flags and WS_MAXIMIZEBOX:flags and WS_TILED:flags and WS_ICONIC:flags and WS_SIZEBOX:flags and WS_OVERLAPPEDWINDOW:flags and WS_TILEDWINDOW:flags and WS_POPUPWINDOW:flags and WS_CHILDWINDOW:flags and DS_3DLOOK: flags and DS_ABSALIGN: flags and DS_CENTER: flags and DS_CENTERMOUSE: flags and DS_CONTEXTHELP: flags and DS_CONTROL: flags and DS_FIXEDSYS: flags and DS_LOCALEDIT: flags and DS_MODALFRAME: flags and DS_NOFAILCREATE: flags and DS_NOIDLEMSG: flags and DS_SETFONT: flags and DS_SETFOREGROUND: flags and DS_SYSMODAL: flags end type DLGITEMTEMPLATE = { extendedStyle: int, x: int, y: int, cx : int, cy: int, id: int, class: DLGCLASSES, title: DLGTITLE, creationData: Word8Vector.vector option } type DLGTEMPLATE = { style: Style.flags, extendedStyle: int, x : int, y: int, cx: int, cy: int, menu: Resource.RESID option, class: Resource.RESID option, title: string, font: (int * string) option, items: DLGITEMTEMPLATE list } val DialogBox : HINSTANCE * Resource.RESID * HWND * (HWND * Message.Message * 'a -> Message.LRESULT * 'a) * 'a -> int val DialogBoxIndirect: HINSTANCE * DLGTEMPLATE * HWND * (HWND * Message.Message * 'a -> Message.LRESULT * 'a) * 'a -> int val CreateDialog : HINSTANCE * Resource.RESID * HWND * (HWND * Message.Message * 'a -> Message.LRESULT * 'a) * 'a -> HWND val CreateDialogIndirect: HINSTANCE * DLGTEMPLATE * HWND * (HWND * Message.Message * 'a -> Message.LRESULT * 'a) * 'a -> HWND val GetDialogBaseUnits : unit -> {horizontal: int, vertical: int} val GetDlgCtrlID: HWND -> int and GetDlgItem: HWND * int -> HWND and GetDlgItemText: HWND * int -> string and IsDialogMessage: HWND * Message.MSG -> bool and EndDialog: HWND * int -> unit (* MessageBox and MessageBeep are in the MessageBox structure. *) (* CreateDialogIndirectParam CreateDialogParam DefDlgProc - Used to create custom dialogues DialogBoxIndirectParam DialogBoxParam DialogProc GetDlgItemInt - Ignore - probably better done with Int.toString SetDlgItemInt - ditto GetNextDlgGroupItem GetNextDlgTabItem MapDialogRect MessageBoxEx SendDlgItemMessage SetDlgItemText MessageBoxIndirect *) val compileTemplate : DLGTEMPLATE -> Word8Vector.vector val decompileTemplate : Word8Vector.vector -> DLGTEMPLATE end = struct local open CInterface open Base open Globals open Window open Resource fun user name = load_sym (load_lib "user32.dll") name and kernel name = load_sym (load_lib "kernel32.dll") name fun checkWindow name c = if isHNull c then raise OS.SysErr(name, SOME(GetLastError())) else c (* Dialogue procedures never call DefWindowProc. *) fun dlgProcRes (lres, state) = (lres, state) val DLGPROC = PASCALFUNCTION4 (HWND, INT, POINTER, POINTER) POINTER in type HWND = HWND and HINSTANCE = HINSTANCE datatype DLGCLASSES = DLG_CLASS of string * Window.Style.flags (* Named window class. *) | DLG_BUTTON of Button.Style.flags | DLG_EDIT of Edit.Style.flags | DLG_STATIC of Static.Style.flags | DLG_LISTBOX of Listbox.Style.flags | DLG_SCROLLBAR of Scrollbar.Style.flags | DLG_COMBOBOX of Combobox.Style.flags datatype DLGTITLE = DLG_TITLESTRING of string | DLG_TITLERESOURCE of int structure Style = struct open Window.Style (* Include all the windows styles. *) val DS_ABSALIGN: flags = fromWord 0wx0001 val DS_SYSMODAL: flags = fromWord 0wx0002 val DS_LOCALEDIT: flags = fromWord 0wx0020 val DS_SETFONT: flags = fromWord 0wx0040 val DS_MODALFRAME: flags = fromWord 0wx0080 val DS_NOIDLEMSG: flags = fromWord 0wx0100 val DS_SETFOREGROUND: flags = fromWord 0wx0200 val DS_3DLOOK: flags = fromWord 0wx0004 val DS_FIXEDSYS: flags = fromWord 0wx0008 val DS_NOFAILCREATE: flags = fromWord 0wx0010 val DS_CONTROL: flags = fromWord 0wx0400 val DS_CENTER: flags = fromWord 0wx0800 val DS_CENTERMOUSE: flags = fromWord 0wx1000 val DS_CONTEXTHELP: flags = fromWord 0wx2000 val all = flags[Window.Style.all, DS_ABSALIGN, DS_SYSMODAL, DS_LOCALEDIT, DS_SETFONT, DS_MODALFRAME, DS_NOIDLEMSG, DS_SETFOREGROUND, DS_3DLOOK, DS_FIXEDSYS, DS_NOFAILCREATE, DS_CONTROL, DS_CENTER, DS_CENTERMOUSE, DS_CONTEXTHELP] val intersect = List.foldl (fn (a, b) => fromWord(SysWord.andb(toWord a, toWord b))) all end type DLGITEMTEMPLATE = { extendedStyle: int, x: int, y: int, cx : int, cy: int, id: int, class: DLGCLASSES, title: DLGTITLE, creationData: Word8Vector.vector option } type DLGTEMPLATE = { style: Style.flags, extendedStyle: int, x : int, y: int, cx: int, cy: int, menu: Resource.RESID option, class: Resource.RESID option, title: string, font: (int * string) option, items: DLGITEMTEMPLATE list } (* Convert between the data structures and the templates. *) (* TODO: This only deals with the basic templates not the extended versions. *) fun decompileTemplate (w: Word8Vector.vector): DLGTEMPLATE = let val ptr = ref 0 val isExtended = PackWord32Little.subVec(w, 0) = 0wxFFFF0001 val _ = if isExtended then raise Fail "Extended templates not implemented" else (); val style = PackWord32Little.subVec(w, !ptr div 4) val _ = ptr := !ptr + 4; val exStyle = LargeWord.toInt(PackWord32Little.subVec(w, !ptr div 4)) val _ = ptr := !ptr + 4; val cdit = LargeWord.toInt(PackWord16Little.subVec(w, !ptr div 2)) val _ = ptr := !ptr + 2; val x = LargeWord.toInt(PackWord16Little.subVec(w, !ptr div 2)) val _ = ptr := !ptr + 2; val y = LargeWord.toInt(PackWord16Little.subVec(w, !ptr div 2)) val _ = ptr := !ptr + 2; val cx = LargeWord.toInt(PackWord16Little.subVec(w, !ptr div 2)) val _ = ptr := !ptr + 2; val cy = LargeWord.toInt(PackWord16Little.subVec(w, !ptr div 2)) val _ = ptr := !ptr + 2; (* Extract a null-terminated Unicode string and advance ptr beyond it. *) fun getString () = let val start = !ptr fun advance () = let val next = LargeWord.toInt(PackWord16Little.subVec(w, !ptr div 2)) in ptr := !ptr + 2; if next = 0 then () else advance() end in advance(); unicodeToString(Word8VectorSlice.vector(Word8VectorSlice.slice(w, start, SOME(!ptr-start-2)))) end fun ffffOrString(): Resource.RESID = let val next = LargeWord.toInt(PackWord16Little.subVec(w, !ptr div 2)) in if next = 0xffff then ( (* Resource identifier. *) ptr := !ptr + 4; Resource.IdAsInt(LargeWord.toInt(PackWord16Little.subVec(w, (!ptr-2) div 2))) ) else (* Resource name. *) Resource.IdAsString(getString()) end (* Menu. *) val menu = case ffffOrString() of Resource.IdAsString "" => NONE | r => SOME r (* Class. *) val class = case ffffOrString() of Resource.IdAsString "" => NONE | r => SOME r (* Title - null terminated Unicode string. *) val title = getString() (* Font - only if DS_SETFONT included in the style. *) val font = if Style.anySet(Style.fromWord style, Style.DS_SETFONT) then let val size = LargeWord.toInt(PackWord16Little.subVec(w, !ptr div 2)) val _ = ptr := !ptr + 2 val name = getString() in SOME(size, name) end else NONE (* Items. *) fun processItem n : DLGITEMTEMPLATE = let (* Must be aligned onto a DWORD boundary. *) val _ = while !ptr mod 4 <> 0 do ptr := !ptr + 1; val style = PackWord32Little.subVec(w, !ptr div 4) val _ = ptr := !ptr + 4; val exStyle = LargeWord.toInt(PackWord32Little.subVec(w, !ptr div 4)) val _ = ptr := !ptr + 4; val x = LargeWord.toInt(PackWord16Little.subVec(w, !ptr div 2)) val _ = ptr := !ptr + 2; val y = LargeWord.toInt(PackWord16Little.subVec(w, !ptr div 2)) val _ = ptr := !ptr + 2; val cx = LargeWord.toInt(PackWord16Little.subVec(w, !ptr div 2)) val _ = ptr := !ptr + 2; val cy = LargeWord.toInt(PackWord16Little.subVec(w, !ptr div 2)) val _ = ptr := !ptr + 2; val id = LargeWord.toInt(PackWord16Little.subVec(w, !ptr div 2)) val _ = ptr := !ptr + 2; val class = case ffffOrString() of Resource.IdAsString s => DLG_CLASS (s, Window.Style.fromWord style) | Resource.IdAsInt 0x0080 => DLG_BUTTON (Button.Style.fromWord style) | Resource.IdAsInt 0x0081 => DLG_EDIT (Edit.Style.fromWord style) | Resource.IdAsInt 0x0082 => DLG_STATIC (Static.Style.fromWord style) | Resource.IdAsInt 0x0083 => DLG_LISTBOX (Listbox.Style.fromWord style) | Resource.IdAsInt 0x0084 => DLG_SCROLLBAR (Scrollbar.Style.fromWord style) | Resource.IdAsInt 0x0085 => DLG_COMBOBOX (Combobox.Style.fromWord style) | _ => raise Fail "Unknown dialog type" val title = case ffffOrString() of Resource.IdAsString s => DLG_TITLESTRING s | Resource.IdAsInt i => DLG_TITLERESOURCE i val creation = let val length = LargeWord.toInt(PackWord16Little.subVec(w, !ptr div 2)) val _ = ptr := !ptr + 2; val start = !ptr val _ = ptr := !ptr + length in if length = 0 then NONE else SOME(Word8VectorSlice.vector(Word8VectorSlice.slice(w, start, SOME length))) end in { extendedStyle = exStyle, x = x, y = y, cx = cx, cy = cy, id = id, class = class, title = title, creationData = creation } end in { style = Style.fromWord style, extendedStyle = exStyle, x = x, y = y, cx = cx, cy = cy, menu = menu, class = class, title = title, font = font, items = List.tabulate(cdit, processItem) } end; (* Generate a dialogue template in memory. *) fun compileTemplate (t: DLGTEMPLATE) = let val basis = Word8Array.array (18, 0w0) val nullString = Word8Vector.tabulate(2, fn _ => 0w0) (* Force DS_SETFONT in the style according to whether we have a font specified. *) val style = if #font t = NONE then Style.clear(Style.DS_SETFONT, #style t) else Style.flags[#style t, Style.DS_SETFONT] val _ = PackWord32Little.update(basis, 0, Style.toWord style); val _ = PackWord32Little.update(basis, 1, LargeWord.fromInt(#extendedStyle t)); val _ = PackWord16Little.update(basis, 4, LargeWord.fromInt(List.length(#items t))); val _ = PackWord16Little.update(basis, 5, LargeWord.fromInt(#x t)); val _ = PackWord16Little.update(basis, 6, LargeWord.fromInt(#y t)); val _ = PackWord16Little.update(basis, 7, LargeWord.fromInt(#cx t)); val _ = PackWord16Little.update(basis, 8, LargeWord.fromInt(#cy t)); fun sixteenBit i = Word8Vector.fromList[Word8.fromInt i, Word8.fromInt(i div 256)] fun unicodeString s = Word8Vector.concat[stringToUnicode s, nullString] fun resOrString (Resource.IdAsString s) = unicodeString s | resOrString (Resource.IdAsInt i) = Word8Vector.fromList [0wxff, 0wxff, Word8.fromInt i, Word8.fromInt(i div 256)] val menu = case #menu t of NONE => nullString | SOME r => resOrString r val class = case #class t of NONE => nullString | SOME r => resOrString r val title = unicodeString(#title t) val font = case #font t of SOME (size, name) => [Word8Vector.fromList [Word8.fromInt size, Word8.fromInt(size div 256)], stringToUnicode name, nullString] | NONE => [] fun compileItems [] = [] | compileItems((t: DLGITEMTEMPLATE) :: rest) = let val basis = Word8Array.array(18, 0w0) val (style, class) = case #class t of DLG_CLASS(c, s) => (Window.Style.toWord s, Resource.IdAsString c) | DLG_BUTTON s => (Button.Style.toWord s, Resource.IdAsInt 0x80) | DLG_COMBOBOX s => (Combobox.Style.toWord s, Resource.IdAsInt 0x85) | DLG_EDIT s => (Edit.Style.toWord s, Resource.IdAsInt 0x81) | DLG_LISTBOX s => (Listbox.Style.toWord s, Resource.IdAsInt 0x83) | DLG_SCROLLBAR s => (Scrollbar.Style.toWord s, Resource.IdAsInt 0x84) | DLG_STATIC s => (Static.Style.toWord s, Resource.IdAsInt 0x82) val _ = PackWord32Little.update(basis, 0, style); val _ = PackWord32Little.update(basis, 1, LargeWord.fromInt(#extendedStyle t)); val _ = PackWord16Little.update(basis, 4, LargeWord.fromInt(#x t)); val _ = PackWord16Little.update(basis, 5, LargeWord.fromInt(#y t)); val _ = PackWord16Little.update(basis, 6, LargeWord.fromInt(#cx t)); val _ = PackWord16Little.update(basis, 7, LargeWord.fromInt(#cy t)); val _ = PackWord16Little.update(basis, 8, LargeWord.fromInt(#id t)); val title = resOrString( case #title t of DLG_TITLESTRING s => Resource.IdAsString s | DLG_TITLERESOURCE i => Resource.IdAsInt i) val creation = case #creationData t of NONE => [nullString] | SOME r => [r, nullString] val vec = Word8Vector.concat (Word8ArraySlice.vector(Word8ArraySlice.full basis) :: resOrString class :: title :: creation) val rounding = Word8Vector.length vec mod 4 in (* Must align onto a 4-byte boundary except for the last. *) (if rounding = 0 orelse rest = nil then vec else Word8Vector.concat[vec, Word8Vector.tabulate(4-rounding, fn _ => 0w0)]) :: compileItems rest end val header = Word8Vector.concat (Word8ArraySlice.vector(Word8ArraySlice.full basis) :: menu :: class :: title :: font) val rounding = Word8Vector.length header mod 4 val alignment = Word8Vector.tabulate(4-rounding, fn _ => 0w0) in Word8Vector.concat(header :: alignment :: compileItems (#items t)) end (* CreateDialogIndirect: Create a modeless dialogue using a resource. *) local val sysCreateDialog = call5 (user "CreateDialogParamA") (HINSTANCE, RESID, HWND, DLGPROC, INT) HWND in fun CreateDialog (hInst, lpTemplate, hWndParent, dialogueProc, init) = let val _ = Message.setCallback(dlgProcRes o dialogueProc, init); val res = checkWindow "CreateDialog" (sysCreateDialog(hInst, lpTemplate, hWndParent, Message.mainCallbackFunction, 0)) in (* Add this to the modeless dialogue list so that keyboard operations will work. *) Message.addModelessDialogue(res, toCint 0); res end end (* CreateDialogIndirect: Create a modeless dialogue from a template. *) local val sysCreateDialogIndirect = call5 (user "CreateDialogIndirectParamA") (HINSTANCE, POINTER, HWND, DLGPROC, INT) HWND in fun CreateDialogIndirect (hInst, template, hWndParent, dialogueProc, init) = let val _ = Message.setCallback(dlgProcRes o dialogueProc, init); (* Compile the template and copy it to C memory. *) val compiled = compileTemplate template val size = Word8Vector.length compiled val templ = alloc size Cchar fun copyToBuf(i, v): unit = assign Cchar (offset i Cchar templ) (toCint(Word8.toInt v)) val _ = Word8Vector.appi copyToBuf compiled val res = checkWindow "CreateDialog" (sysCreateDialogIndirect(hInst, address templ, hWndParent, Message.mainCallbackFunction, 0)) in (* Add this to the modeless dialogue list so that keyboard operations will work. *) Message.addModelessDialogue(res, toCint 0); res end end (* DialogBox: create a dialogue using a resource. *) local val sysDialogBox = call5 (user "DialogBoxParamA") (HINSTANCE, RESID, HWND, DLGPROC, INT) INT in fun DialogBox (hInst, lpTemplate, hWndParent, dialogueProc, init) = let (* We can use the normal window procedure as a dialogue proc. *) val _ = Message.setCallback(dlgProcRes o dialogueProc, init); val result = sysDialogBox(hInst, lpTemplate, hWndParent, Message.mainCallbackFunction, 0) in (* How do we remove the callback? Look for the last message? *) result end end (* DialogBoxIndirect: create a dialogue using a template. *) local val sysDialogBoxIndirect = call5 (user "DialogBoxIndirectParamA") (HINSTANCE, POINTER, HWND, DLGPROC, INT) INT in fun DialogBoxIndirect (hInst, template, hWndParent, dialogueProc, init) = let val _ = Message.setCallback(dlgProcRes o dialogueProc, init); (* Compile the template and copy it to C memory. *) val compiled = compileTemplate template val size = Word8Vector.length compiled val templ = alloc size Cchar fun copyToBuf(i, v): unit = assign Cchar (offset i Cchar templ) (toCint(Word8.toInt v)) val _ = Word8Vector.appi copyToBuf compiled in sysDialogBoxIndirect(hInst, address templ, hWndParent, Message.mainCallbackFunction, 0) end end (* Get average size of system font. *) fun GetDialogBaseUnits() : {horizontal: int, vertical: int} = let val base = call0 (user "GetDialogBaseUnits") () UINT () in {horizontal = LOWORD base, vertical = HIWORD base} end val GetDlgCtrlID = call1 (user "GetDlgCtrlID") HWND INT and GetDlgItem = call2 (user "GetDlgItem") (HWND, INT) HWND val GetDlgItemText = Window.GetWindowText o GetDlgItem val IsDialogMessage = call2 (user "IsDialogMessage") (HWND, Message.LPMSG) BOOL val EndDialog = call2 (user "EndDialog") (HWND, INT) (SUCCESSSTATE "EndDialog") end end; polyml.5.2.1/mlsource/extra/Win/DragDrop.sml0000644000175000017500000000446010313043364017725 0ustar daviddavid(* Copyright (c) 2001 David C.J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure DragDrop: sig type HDROP type HWND (* = Window.HWND *) type POINT = { x: int, y: int } val DragAcceptFiles : HWND * bool -> unit val DragFinish : HDROP -> unit val DragQueryFile : HDROP -> string list val DragQueryPoint : HDROP -> POINT * bool end = struct local open CInterface Base in type HDROP = HDROP and HWND = HWND type POINT = POINT (* Call DragAcceptFiles to accept files. *) val DragAcceptFiles = call2 (shell "DragAcceptFiles") (HWND,BOOL) VOID (* Call DragFinish when finished processing a WM_DROP message. *) and DragFinish = call1 (shell "DragFinish") (HDROP) VOID (* Call DragQueryFile to get the file(s). *) local val dragQueryFile = call4 (shell "DragQueryFileA") (HDROP,INT,POINTER,UINT) UINT in fun DragQueryFile (hd: HDROP): string list = let val nfiles = dragQueryFile(hd, ~1, toCint 0, 0) fun getFile n = let val buffsize = dragQueryFile(hd, n, toCint 0, 0) + 1 (* Must add one for NULL *) val buff = address (alloc buffsize Cchar) val res = dragQueryFile(hd, n, buff, buffsize) in fromCstring buff end in List.tabulate(nfiles, getFile) end end (* Call DragQueryPoint to find out where to drop the file(s). *) local val dragQueryPoint = call2 (shell "DragQueryPoint") (HDROP, POINTER) BOOL val (fromCpt, toCpt, ptSize) = breakConversion POINT in fun DragQueryPoint (hd: HDROP): POINT * bool = let val v = alloc 1 ptSize val res = dragQueryPoint(hd, address v) in (fromCpt v, res) end end end end; polyml.5.2.1/mlsource/extra/Win/Edit.sml0000644000175000017500000001273610313043364017115 0ustar daviddavid(* Copyright (c) 2001 David C.J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* Edit windows. *) structure Edit: sig structure Style: sig (* We use the same type so we can use this everywhere we can use the general window style. *) include BIT_FLAGS where type flags = Window.Style.flags val WS_OVERLAPPED: flags and WS_POPUP: flags and WS_CHILD: flags and WS_MINIMIZE: flags and WS_VISIBLE: flags and WS_DISABLED:flags and WS_CLIPSIBLINGS:flags and WS_CLIPCHILDREN:flags and WS_MAXIMIZE:flags and WS_CAPTION:flags and WS_BORDER:flags and WS_DLGFRAME:flags and WS_VSCROLL:flags and WS_HSCROLL:flags and WS_SYSMENU:flags and WS_THICKFRAME:flags and WS_GROUP:flags and WS_TABSTOP:flags and WS_MINIMIZEBOX:flags and WS_MAXIMIZEBOX:flags and WS_TILED:flags and WS_ICONIC:flags and WS_SIZEBOX:flags and WS_OVERLAPPEDWINDOW:flags and WS_TILEDWINDOW:flags and WS_POPUPWINDOW:flags and WS_CHILDWINDOW:flags and ES_LEFT: flags and ES_CENTER:flags and ES_RIGHT:flags and ES_MULTILINE:flags and ES_UPPERCASE: flags and ES_LOWERCASE: flags and ES_PASSWORD: flags and ES_AUTOVSCROLL: flags and ES_AUTOHSCROLL: flags and ES_NOHIDESEL: flags and ES_OEMCONVERT: flags and ES_READONLY: flags and ES_WANTRETURN: flags and ES_NUMBER: flags end structure Notifications: sig val EN_SETFOCUS: int val EN_KILLFOCUS: int val EN_CHANGE: int val EN_UPDATE: int val EN_ERRSPACE: int val EN_MAXTEXT: int val EN_HSCROLL: int val EN_VSCROLL: int end end = struct structure Style = struct open Window.Style (* Include all the windows styles. *) val ES_LEFT: flags = fromWord 0wx0000 val ES_CENTER: flags = fromWord 0wx0001 val ES_RIGHT: flags = fromWord 0wx0002 val ES_MULTILINE: flags = fromWord 0wx0004 val ES_UPPERCASE: flags = fromWord 0wx0008 val ES_LOWERCASE: flags = fromWord 0wx0010 val ES_PASSWORD: flags = fromWord 0wx0020 val ES_AUTOVSCROLL: flags = fromWord 0wx0040 val ES_AUTOHSCROLL: flags = fromWord 0wx0080 val ES_NOHIDESEL: flags = fromWord 0wx0100 val ES_OEMCONVERT: flags = fromWord 0wx0400 val ES_READONLY: flags = fromWord 0wx0800 val ES_WANTRETURN: flags = fromWord 0wx1000 val ES_NUMBER: flags = fromWord 0wx2000 val all = flags[Window.Style.all, ES_LEFT, ES_CENTER, ES_RIGHT, ES_MULTILINE, ES_UPPERCASE, ES_LOWERCASE, ES_PASSWORD, ES_AUTOVSCROLL, ES_AUTOHSCROLL, ES_NOHIDESEL, ES_OEMCONVERT, ES_READONLY, ES_WANTRETURN, ES_NUMBER] val intersect = List.foldl (fn (a, b) => fromWord(SysWord.andb(toWord a, toWord b))) all end structure Notifications = struct val EN_SETFOCUS = 0x0100 val EN_KILLFOCUS = 0x0200 val EN_CHANGE = 0x0300 val EN_UPDATE = 0x0400 val EN_ERRSPACE = 0x0500 val EN_MAXTEXT = 0x0501 val EN_HSCROLL = 0x0601 val EN_VSCROLL = 0x0602 end end; (* let open Edit.Style val flagTable = [(ES_CENTER, "ES_CENTER"), (ES_RIGHT, "ES_RIGHT"), (ES_MULTILINE, "ES_MULTILINE"), (ES_UPPERCASE, "ES_UPPERCASE"), (ES_LOWERCASE, "ES_LOWERCASE"), (ES_PASSWORD, "ES_PASSWORD"), (ES_AUTOVSCROLL, "ES_AUTOVSCROLL"), (ES_AUTOHSCROLL, "ES_AUTOHSCROLL"), (ES_NOHIDESEL, "ES_NOHIDESEL"), (ES_OEMCONVERT, "ES_OEMCONVERT"), (ES_READONLY, "ES_READONLY"), (ES_WANTRETURN, "ES_WANTRETURN"), (ES_NUMBER, "ES_NUMBER"), (WS_POPUP, "WS_POPUP"), (WS_CHILD, "WS_CHILD"), (WS_MINIMIZE, "WS_MINIMIZE"), (WS_VISIBLE, "WS_VISIBLE"), (WS_DISABLED, "WS_DISABLED"), (WS_CLIPSIBLINGS, "WS_CLIPSIBLINGS"), (WS_CLIPCHILDREN, "WS_CLIPCHILDREN"), (WS_MAXIMIZE, "WS_MAXIMIZE"), (WS_CAPTION, "WS_CAPTION"), (WS_BORDER, "WS_BORDER"), (WS_DLGFRAME, "WS_DLGFRAME"), (WS_VSCROLL, "WS_VSCROLL"), (WS_HSCROLL, "WS_HSCROLL"), (WS_SYSMENU, "WS_SYSMENU"), (WS_THICKFRAME, "WS_THICKFRAME"), (WS_GROUP, "WS_GROUP"), (WS_TABSTOP, "WS_TABSTOP"), (WS_MINIMIZEBOX, "WS_MINIMIZEBOX"), (WS_MAXIMIZEBOX, "WS_MAXIMIZEBOX")] fun accumulateFlags f [] = [] | accumulateFlags f ((w, s)::t) = if allSet(w, f) then s :: accumulateFlags(clear(w, f)) t else accumulateFlags f t fun printFlags(put, beg, brk, nd) depth _ x = (* This is just the code to print a list. *) let val stringFlags = accumulateFlags x flagTable fun plist [] depth = () | plist _ 0 = put "..." | plist [h] depth = put h | plist (h::t) depth = ( put (h^","); brk (1, 0); plist t (depth - 1) ) in beg (3, false); put "["; if depth <= 0 then put "..." else plist stringFlags depth; put "]"; nd () end in PolyML.install_pp printFlags end; *)polyml.5.2.1/mlsource/extra/Win/FlagPrint.sml0000644000175000017500000000337710313043364020117 0ustar daviddavid(* Copyright (c) 2001 David C.J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) functor FlagPrint(structure BITS: BIT_FLAGS) = struct (* Auxiliary function to create a function to print out bit flags. The function must actually be installed by the caller because it has to be called with the type itself. *) fun createFlagPrinter (flagTable: (BITS.flags * string) list) = let fun accumulateFlags f [] = [] | accumulateFlags f ((w, s)::t) = if BITS.allSet(w, f) then s :: accumulateFlags(BITS.clear(w, f)) t else accumulateFlags f t fun printFlags(put, beg, brk, nd) depth _ x = (* This is just the code to print a list. *) let val stringFlags = accumulateFlags x flagTable fun plist [] depth = () | plist _ 0 = put "..." | plist [h] depth = put h | plist (h::t) depth = ( put (h^","); brk (1, 0); plist t (depth - 1) ) in beg (3, false); put "["; if depth <= 0 then put "..." else plist stringFlags depth; put "]"; nd () end in printFlags end; end; polyml.5.2.1/mlsource/extra/Win/Font.sml0000644000175000017500000004500010676745634017151 0ustar daviddavid(* Copyright (c) 2001 David C.J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure Font : sig type HDC and HFONT type COLORREF = Color.COLORREF type POINT = {x: int, y: int} and SIZE = {cx: int, cy: int } and RECT = { top: int, left: int, bottom: int, right: int } datatype FontFamily = FF_DECORATIVE | FF_DONTCARE | FF_MODERN | FF_ROMAN | FF_SCRIPT | FF_SWISS and FontPitch = DEFAULT_PITCH | FIXED_PITCH | VARIABLE_PITCH and OutputPrecision = OUT_CHARACTER_PRECIS | OUT_DEFAULT_PRECIS | OUT_DEVICE_PRECIS | OUT_OUTLINE_PRECIS | OUT_RASTER_PRECIS | OUT_SCREEN_OUTLINE_PRECIS | OUT_STRING_PRECIS | OUT_STROKE_PRECIS | OUT_TT_ONLY_PRECIS | OUT_TT_PRECIS and OutputQuality = DEFAULT_QUALITY | DRAFT_QUALITY | OTHER_QUALITY of int | PROOF_QUALITY and CharacterSet = ANSI_CHARSET | CHINESEBIG5_CHARSET | DEFAULT_CHARSET | HANGEUL_CHARSET | OEM_CHARSET | OTHER_CHARSET of int | SHIFTJIS_CHARSET | SYMBOL_CHARSET type FontWeight = int val FW_BLACK : FontWeight val FW_BOLD : FontWeight val FW_DEMIBOLD : FontWeight val FW_DONTCARE : FontWeight val FW_EXTRABOLD : FontWeight val FW_EXTRALIGHT : FontWeight val FW_HEAVY : FontWeight val FW_LIGHT : FontWeight val FW_MEDIUM : FontWeight val FW_NORMAL : FontWeight val FW_REGULAR : FontWeight val FW_SEMIBOLD : FontWeight val FW_THIN : FontWeight val FW_ULTRABOLD : FontWeight val FW_ULTRALIGHT : FontWeight type ClippingPrecision val CLIP_CHARACTER_PRECIS : ClippingPrecision val CLIP_DEFAULT_PRECIS : ClippingPrecision val CLIP_EMBEDDED : ClippingPrecision val CLIP_LH_ANGLES : ClippingPrecision val CLIP_MASK : ClippingPrecision val CLIP_STROKE_PRECIS : ClippingPrecision val CLIP_TT_ALWAYS : ClippingPrecision type LOGFONT = { height : int, width : int, escapement : int, orientation : int, weight : FontWeight, italic : bool, underline : bool, strikeOut : bool, charSet : CharacterSet, outputPrecision: OutputPrecision, clipPrecision : ClippingPrecision, quality : OutputQuality, pitch: FontPitch, family: FontFamily, faceName : string } datatype DrawTextMode = DT_BOTTOM | DT_CALCRECT | DT_CENTER | DT_EXPANDTABS | DT_EXTERNALLEADING | DT_INTERNAL | DT_LEFT | DT_NOCLIP | DT_NOPREFIX | DT_RIGHT | DT_SINGLELINE | DT_TABSTOP of int | DT_TOP | DT_VCENTER | DT_WORDBREAK and TextAlign = TA_BASELINE | TA_BOTTOM | TA_CENTER | TA_LEFT | TA_NOUPDATECP | TA_RIGHT | TA_TOP | TA_UPDATECP and TextMetricPitch = TMPF_DEVICE | TMPF_FIXED_PITCH | TMPF_TRUETYPE | TMPF_VECTOR and ExtendedTextMode = ETO_CLIPPED | ETO_GLYPH_INDEX | ETO_IGNORELANGUAGE | ETO_OPAQUE | ETO_RTLREADING type TEXTMETRIC = { height: int, ascent: int, descent: int, internalLeading: int, externalLeading: int, aveCharWidth: int, maxCharWidth: int, weight: int, overhang: int, digitizedAspectX: int, digitizedAspectY: int, firstChar: char, lastChar: char, defaultChar: char, breakChar: char, italic: bool, underlined: bool, struckOut: bool, pitch: TextMetricPitch list, family: FontFamily, charSet : CharacterSet } val AddFontResource : string -> int val CreateFont : LOGFONT -> HFONT val CreateFontIndirect : LOGFONT -> HFONT val CreateScalableFontResource : int * string * string * string -> unit val DrawText : HDC * string * RECT * DrawTextMode list -> int val ExtTextOut : HDC * POINT * ExtendedTextMode list * RECT option * string * int list -> unit val GetAspectRatioFilterEx : HDC -> SIZE val GetCharABCWidths : HDC * char * char -> (int * int * int) list val GetCharABCWidthsFloat : HDC * char * char -> (real * real * real) list val GetCharWidth32 : HDC * char * char -> int list val GetCharWidthFloat : HDC * int * int -> real list val GetTabbedTextExtent : HDC * string * int list -> SIZE val GetTextAlign : HDC -> TextAlign list val GetTextCharacterExtra : HDC -> int val GetTextColor : HDC -> COLORREF val GetTextExtentExPoint : HDC * string * int option -> {fit: int option, size: SIZE, extents: int list} val GetTextExtentPoint32 : HDC * string -> SIZE val GetTextFace : HDC -> string val GetTextMetrics : HDC -> TEXTMETRIC val RemoveFontResource : string -> unit val SetMapperFlags : HDC * bool -> bool val SetTextAlign : HDC * TextAlign list -> TextAlign list val SetTextCharacterExtra : HDC * int -> int val SetTextColor : HDC * COLORREF -> COLORREF val SetTextJustification : HDC * int * int -> unit val TabbedTextOut: HDC * POINT * string * int list * int -> SIZE val TextOut : HDC * POINT * String.string -> unit end = struct local open CInterface Base GdiBase fun callgdi name = call_sym (load_sym (load_lib "gdi32.DLL") name) fun gdicall_IW name CR (C1,C2) (a1) = let val (from1,to1,ctype1) = breakConversion C1 val (from2,to2,ctype2) = breakConversion C2 val (fromR,toR,ctypeR) = breakConversion CR val va1 = to1 a1 val va2 = address (alloc 1 ctype2) val res = callgdi name [(ctype1,va1),(Cpointer ctype2,va2)] ctypeR val _: unit = fromR res in (from2 (deref va2)) end val HEIGHT = INT: int Conversion val FONTMAPPERFLAG = BOOL : bool Conversion in type COLORREF = Color.COLORREF type SIZE = SIZE and POINT = POINT and RECT = RECT type HDC = HDC and HFONT = HFONT open FontBase (* Contains the types used in LOGFONT. *) datatype TextAlign = TA_NOUPDATECP | TA_UPDATECP | TA_LEFT | TA_RIGHT | TA_CENTER | TA_TOP | TA_BOTTOM | TA_BASELINE local val tab = [ (TA_NOUPDATECP, 0), (TA_UPDATECP, 1), (TA_LEFT, 0), (TA_RIGHT, 2), (TA_CENTER, 6), (TA_TOP, 0), (TA_BOTTOM, 8), (TA_BASELINE, 24) ] in val TEXTALIGN = tableSetConversion(tab, NONE) end (*TYPE: DrawTextMode *) datatype DrawTextMode = DT_TOP | DT_LEFT | DT_CENTER | DT_RIGHT | DT_VCENTER | DT_BOTTOM | DT_WORDBREAK | DT_SINGLELINE | DT_EXPANDTABS | DT_NOCLIP | DT_EXTERNALLEADING | DT_CALCRECT | DT_NOPREFIX | DT_INTERNAL | DT_TABSTOP of int local val tab = [ (DT_TOP, 0x0000), (DT_LEFT, 0x0000), (DT_CENTER, 0x0001), (DT_RIGHT, 0x0002), (DT_VCENTER, 0x0004), (DT_BOTTOM, 0x0008), (DT_WORDBREAK, 0x0010), (DT_SINGLELINE, 0x0020), (DT_EXPANDTABS, 0x0040), (DT_NOCLIP, 0x0100), (DT_EXTERNALLEADING, 0x0200), (DT_CALCRECT, 0x0400), (DT_NOPREFIX, 0x0800), (DT_INTERNAL, 0x1000) ] val tabStop = 0x0080 fun toInt (DT_TABSTOP i) = IntInf.orb(tabStop, i*256) | toInt _ = raise Match fun fromInt i = if IntInf.andb(i, tabStop) = tabStop then DT_TABSTOP((i div 256) mod 256) else raise Match; in val DRAWTEXTMODE = tableSetConversion(tab, SOME(fromInt, toInt)) end val AddFontResource = call1(gdi "AddFontResourceA") (STRING) INT val CreateScalableFontResource = call4(gdi "CreateScalableFontResourceA") (INT,STRING,STRING,STRING) (SUCCESSSTATE "CreateScalableFontResource") val GetTextAlign = call1(gdi "GetTextAlign") (HDC) TEXTALIGN val GetTextCharacterExtra = call1(gdi "GetTextCharacterExtra") (HDC) INT val RemoveFontResource = call1(gdi "RemoveFontResourceA") (STRING) (SUCCESSSTATE "RemoveFontResource") val SetMapperFlags = call2(gdi "SetMapperFlags") (HDC,FONTMAPPERFLAG) FONTMAPPERFLAG val SetTextAlign = call2(gdi "SetTextAlign") (HDC,TEXTALIGN) TEXTALIGN val SetTextCharacterExtra = call2(gdi "SetTextCharacterExtra") (HDC,INT) INT val SetTextJustification = call3(gdi "SetTextJustification") (HDC,INT,INT) (SUCCESSSTATE "SetTextJustification") val DrawText = call4(user "DrawTextA") (HDC,STRING,POINTERTO RECT,DRAWTEXTMODE) INT val GetTextColor = call1 (gdi "GetTextColor") (HDC) COLORREF and SetTextColor = call2 (gdi "SetTextColor") (HDC, COLORREF) COLORREF val GetAspectRatioFilterEx = gdicall_IW "GetAspectRatioFilterEx" (SUCCESSSTATE "GetAspectRatioFilterEx") (HDC,SIZE) fun CreateFont({height: int, width: int, escapement: int, orientation: int, weight: FontWeight, italic: bool, underline: bool, strikeOut: bool, charSet: CharacterSet, outputPrecision: OutputPrecision, clipPrecision: ClippingPrecision, quality: OutputQuality, pitch: FontPitch, family: FontFamily, faceName: string}: LOGFONT) = call14 (gdi "CreateFontA") (INT, INT, INT, INT, FONTWEIGHT, BOOL, BOOL, BOOL, CHARACTERSET, OUTPUTPRECISION, CLIPPINGPRECISION, OUTPUTQUALITY, FONTPITCHANDFAMILY, STRING) HFONT (height, width, escapement, orientation, weight, italic, underline, strikeOut, charSet, outputPrecision, clipPrecision, quality, (pitch, family), if size faceName > 31 then String.substring(faceName, 0, 31) else faceName) (* CreateFont and CreateFontIndirect take the same arguments in ML. *) val CreateFontIndirect = call1 (gdi "CreateFontIndirectA") (POINTERTO LOGFONT) HFONT datatype ExtendedTextMode = ETO_OPAQUE | ETO_CLIPPED | ETO_GLYPH_INDEX | ETO_RTLREADING | ETO_IGNORELANGUAGE local val tab = [ (ETO_OPAQUE, 0x0002), (ETO_CLIPPED, 0x0004), (ETO_GLYPH_INDEX, 0x0010), (ETO_RTLREADING, 0x0080), (ETO_IGNORELANGUAGE, 0x1000) ] in val EXTENDEDTEXTOUT = tableSetConversion(tab, NONE) end fun ExtTextOut (h,({x,y}:POINT),option,rect,text,gapl) = let val slen = String.size text val (gaps, _) = case gapl of [] => (toCint 0 (* Null *), 0) | _ => list2Vector INT gapl (* The Rect is optional but really depends on the ETO_OPAQUE or ETO_CLIPPED options. *) val r = case rect of NONE => toCint 0 (* Null *) | SOME rect => let val (_, to, _) = breakConversion (POINTERTO RECT) in to rect end in call8 (gdi "ExtTextOutA") (HDC,INT,INT,EXTENDEDTEXTOUT,POINTER,STRING,INT,POINTER) (SUCCESSSTATE "ExtTextOut") (h,x,y,option,r,text,slen, gaps) end fun GetCharABCWidths (h, c1: char, c2: char) = let val count = ord c2 - ord c1 val ABC = STRUCT3(INT, INT, INT) val (toABC, fromABC, abcStruct) = breakConversion ABC val abcarr = alloc count abcStruct val _: unit = call4 (gdi "GetCharABCWidthsA") (HDC,INT,INT,POINTER) (SUCCESSSTATE "GetCharABCWidths") (h, ord c1, ord c2,address abcarr) fun getElement i = toABC(offset i abcStruct abcarr) in List.tabulate(count, getElement) end fun GetCharABCWidthsFloat (h,c1,c2) = let val count = ord c2 - ord c1 val ABC = STRUCT3(FLOAT, FLOAT, FLOAT) val (toABC, fromABC, abcStruct) = breakConversion ABC val abcarr = alloc count abcStruct val res = call4 (gdi "GetCharABCWidthsFloatA") (HDC,INT,INT,POINTER) (SUCCESSSTATE "GetCharABCWidthsFloat") (h, ord c1, ord c2, address abcarr) fun getElement i = toABC(offset i abcStruct abcarr) in List.tabulate(count, getElement) end fun GetCharWidth32 (h,c1,c2) = let val count = ord c2 - ord c1 val arr = alloc count Cint val res = call4 (gdi "GetCharWidth32A") (HDC,INT,INT,POINTER) (SUCCESSSTATE "GetCharWidth32") (h, ord c1, ord c2,address arr) fun getElement i = fromCint(offset i Cint arr) in List.tabulate(count, getElement) end fun GetCharWidthFloat (h,c1,c2) = let val count = c2-c1 val arr = alloc count Cfloat val res = call4 (gdi "GetCharWidthFloatA") (HDC,INT,INT,POINTER) (SUCCESSSTATE "GetCharWidthFloat") (h,c1,c2,address arr) fun getElement i = fromCfloat(offset i Cfloat arr) in List.tabulate(count, getElement) end fun GetTextExtentPoint32 (h,s) = let val (fromSize, _, sizeStruct) = breakConversion SIZE val sz = alloc 1 sizeStruct val slen = String.size s val _ = call4 (gdi "GetTextExtentPoint32A") (HDC,STRING,INT,POINTER) (SUCCESSSTATE "GetTextExtentPoint32") (h,s,slen,address sz) in fromSize sz end fun TextOut (h,({x,y}:POINT),s) = let val len = String.size s in call5 (gdi "TextOutA") (HDC,INT,INT,STRING,INT) (SUCCESSSTATE "TextOut") (h,x,y,s,len) end datatype TextMetricPitch = TMPF_FIXED_PITCH | TMPF_VECTOR | TMPF_TRUETYPE | TMPF_DEVICE (* N.B. TMPF_FIXED_PITCH is included if the font is NOT fixed pitch!! *) type TEXTMETRIC = { height: int, ascent: int, descent: int, internalLeading: int, externalLeading: int, aveCharWidth: int, maxCharWidth: int, weight: int, overhang: int, digitizedAspectX: int, digitizedAspectY: int, firstChar: char, lastChar: char, defaultChar: char, breakChar: char, italic: bool, underlined: bool, struckOut: bool, pitch: TextMetricPitch list, family: FontFamily, charSet : CharacterSet } fun GetTextMetrics hdc : TEXTMETRIC = let val TEXTMETRIC = STRUCT20(LONG, LONG, LONG, LONG, LONG, LONG, LONG, LONG, LONG, LONG, LONG, CHAR, CHAR, CHAR, CHAR, CHAR, CHAR, CHAR, CHAR, CHAR) val (fromTm, toTm, tmStruct) = breakConversion TEXTMETRIC val buff = alloc 1 tmStruct val _:unit = call2 (gdi "GetTextMetricsA") (HDC, POINTER) (SUCCESSSTATE "GetTextMetrics") (hdc, address buff) val (height, ascent, descent, internalLeading, externalLeading, aveCharWidth, maxCharWidth, weight, overhang, digitizedAspectX, digitizedAspectY, firstChar, lastChar, defaultChar, breakChar, italic, underlined, struckOut, pitchAndFamily, charSet) = fromTm buff val (fromChs, _, _) = breakConversion CHARACTERSET val family = toFamily(IntInf.andb(ord pitchAndFamily, 0xf0)) val pitch = (if IntInf.andb(ord pitchAndFamily, 1) <> 0 then [TMPF_FIXED_PITCH] else []) @ (if IntInf.andb(ord pitchAndFamily, 2) <> 0 then [TMPF_VECTOR] else []) @ (if IntInf.andb(ord pitchAndFamily, 4) <> 0 then [TMPF_TRUETYPE] else []) @ (if IntInf.andb(ord pitchAndFamily, 8) <> 0 then [TMPF_DEVICE] else []) in { height = height, ascent = ascent, descent = ascent, internalLeading = internalLeading, externalLeading = externalLeading, aveCharWidth = aveCharWidth, maxCharWidth = maxCharWidth, weight = weight, overhang = overhang, digitizedAspectX = digitizedAspectX, digitizedAspectY = digitizedAspectY, firstChar = firstChar, lastChar = lastChar, defaultChar = defaultChar, breakChar = breakChar, italic = italic <> #"\000", underlined = underlined <> #"\000", struckOut = struckOut <> #"\000", family = family, pitch = pitch, charSet = fromChs(toCint(ord charSet)) } end fun GetTextFace hdc : string = let val getFaceCall = call3(gdi "GetTextFaceA") (HDC, INT, POINTER) INT (* Call with a NULL buffer to find out the size. *) val count = getFaceCall(hdc, 0, toCint 0) val _ = if count < 0 then raise OS.SysErr("GetTextFace", SOME(GetLastError())) else () val buff = alloc count Cchar val res = getFaceCall(hdc, count, address buff) in fromCstring(address buff) end fun GetTextExtentExPoint(hdc: HDC, s: string, maxWidth: int option) : {fit: int option, extents: int list, size: SIZE} = let val count = size s val vec = alloc count Cint (* The lpnFit argument controls whether we get the maximum no. of chars. *) val lpnFit = case maxWidth of NONE => toCint 0 | SOME f => address(alloc 1 Cint) val (fromSize, _, sizeStruct) = breakConversion SIZE val sizeVec = alloc 1 sizeStruct val _: unit = call7(gdi "GetTextExtentExPointA") (HDC, STRING, INT, INT, POINTER, POINTER, POINTER) (SUCCESSSTATE "GetTextExtentExPoint") (hdc, s, count, getOpt(maxWidth, 0), lpnFit, address vec, address sizeVec) val fit = case maxWidth of NONE => NONE | _ => SOME(fromCint(deref lpnFit)) val extents = List.tabulate(getOpt(fit, count), fn i => fromCint(offset i Cint vec)) in {fit = fit, extents = extents, size = fromSize sizeVec} end local val tabbedTextOut = call8 (user "TabbedTextOutA") (HDC, INT, INT, STRING, INT, INT, POINTER, INT) UINT in fun TabbedTextOut(hdc, {x, y}: POINT, str, tabs, origin): SIZE = let val (tabVec, nTabs) = case tabs of [] => (toCint 0, 0) (* Make the vector null. *) | _ => list2Vector INT tabs val res = tabbedTextOut(hdc, x, y, str, size str, nTabs, tabVec, origin) in (* Zero represents an error. But it's also possible to return zero if the string is empty. *) {cx = LOWORD res, cy = HIWORD res} end end local val tabbedTextExtent = call5 (user "GetTabbedTextExtentA") (HDC, STRING, INT, INT, POINTER) (POSINT "GetTabbedTextExtent") in fun GetTabbedTextExtent(hdc, str, tabs): SIZE = let val (tabVec, nTabs) = case tabs of [] => (toCint 0, 0) (* Make the vector null. *) | _ => list2Vector INT tabs val res = tabbedTextExtent(hdc, str, size str, nTabs, tabVec) in {cx = LOWORD res, cy = HIWORD res} end end (* Other Font and Text functions: DrawTextEx EnumFontFamiliesEx EnumFontFamExProc GetCharacterPlacement GetFontData GetFontLanguageInfo GetFontUnicodeRanges GetGlyphIndices GetGlyphOutline GetKerningPairs GetOutlineTextMetrics GetRasterizerCaps GetTabbedTextExtent PolyTextOut *) end end; polyml.5.2.1/mlsource/extra/Win/FontBase.sml0000644000175000017500000001702710313043365017730 0ustar daviddavid(* Copyright (c) 2001 David C.J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure FontBase = struct local open CInterface Base in datatype OutputQuality = DEFAULT_QUALITY | DRAFT_QUALITY | PROOF_QUALITY | OTHER_QUALITY of int local val tab = [ (DEFAULT_QUALITY, 0), (DRAFT_QUALITY, 1), (PROOF_QUALITY, 2) ] in fun doConv (OTHER_QUALITY i) = i | doConv _ = raise Match val OUTPUTQUALITY = tableConversion(tab, SOME(OTHER_QUALITY, doConv)) end datatype CharacterSet = ANSI_CHARSET | DEFAULT_CHARSET | SYMBOL_CHARSET | SHIFTJIS_CHARSET | HANGEUL_CHARSET | CHINESEBIG5_CHARSET | OEM_CHARSET | OTHER_CHARSET of int local val tab = [ (ANSI_CHARSET, 0), (DEFAULT_CHARSET, 1), (SYMBOL_CHARSET, 2), (SHIFTJIS_CHARSET, 128), (HANGEUL_CHARSET, 129), (CHINESEBIG5_CHARSET, 136), (OEM_CHARSET, 255) ] fun doConv (OTHER_CHARSET i) = i | doConv _ = raise Match in val CHARACTERSET = tableConversion(tab, SOME(OTHER_CHARSET, doConv)) end (* In the underlying CreateFont call the pitch and family are ORed together. *) (*TYPE: FontFamily *) datatype FontFamily = FF_DONTCARE | FF_ROMAN | FF_SWISS | FF_MODERN | FF_SCRIPT| FF_DECORATIVE and FontPitch = DEFAULT_PITCH | FIXED_PITCH | VARIABLE_PITCH local val tab1 = [ (DEFAULT_PITCH, 0), (FIXED_PITCH, 1), (VARIABLE_PITCH, 2)] and tab2 = [ (FF_DONTCARE, 0 * 16 (* (0<<4) Don't care or don't know. *)), (FF_ROMAN, 1 * 16 (* (1<<4) Variable stroke width, serifed. *)), (FF_SWISS, 2 * 16 (* (2<<4) Variable stroke width, sans~serifed. *)), (FF_MODERN, 3 * 16 (* (3<<4) Constant stroke width, serifed or sans~serifed. *)), (FF_SCRIPT, 4 * 16 (* (4<<4) Cursive, etc. *)), (FF_DECORATIVE, 5 * 16 (* (5<<4) Old English, etc. *))] val (fromPitch, toPitch) = tableLookup(tab1, NONE) and (fromFamily, toFamily) = tableLookup(tab2, NONE) fun repPF (pitch, family) = IntInf.orb(fromPitch pitch, fromFamily family) fun absPF i = (toPitch(IntInf.andb(i, 3)), toFamily(IntInf.andb(i, ~16))) in val toFamily = toFamily (* This is used in TEXTMETRIC. *) val FONTPITCHANDFAMILY = absConversion {abs = absPF, rep = repPF} INT end (*TYPE: FontWeight - This type is really int, not an abstract type. *) type FontWeight = int val FONTWEIGHT = INT val FW_DONTCARE = 0 val FW_THIN = 100 val FW_EXTRALIGHT = 200 val FW_LIGHT = 300 val FW_NORMAL = 400 val FW_MEDIUM = 500 val FW_SEMIBOLD = 600 val FW_BOLD = 700 val FW_EXTRABOLD = 800 val FW_HEAVY = 900 val FW_ULTRALIGHT = FW_EXTRALIGHT val FW_REGULAR = FW_NORMAL val FW_DEMIBOLD = FW_SEMIBOLD val FW_ULTRABOLD = FW_EXTRABOLD val FW_BLACK = FW_HEAVY datatype OutputPrecision = OUT_DEFAULT_PRECIS | OUT_STRING_PRECIS | OUT_CHARACTER_PRECIS | OUT_STROKE_PRECIS | OUT_TT_PRECIS | OUT_DEVICE_PRECIS | OUT_RASTER_PRECIS | OUT_TT_ONLY_PRECIS | OUT_OUTLINE_PRECIS | OUT_SCREEN_OUTLINE_PRECIS local val tab = [ (OUT_DEFAULT_PRECIS, 0), (OUT_STRING_PRECIS, 1), (OUT_CHARACTER_PRECIS, 2), (OUT_STROKE_PRECIS, 3), (OUT_TT_PRECIS, 4), (OUT_DEVICE_PRECIS, 5), (OUT_RASTER_PRECIS, 6), (OUT_TT_ONLY_PRECIS, 7), (OUT_OUTLINE_PRECIS, 8), (OUT_SCREEN_OUTLINE_PRECIS, 9) ] in val OUTPUTPRECISION = tableConversion(tab, NONE) end (* TODO: This is a bit set. *) local datatype ClippingPrecision = W of int in type ClippingPrecision = ClippingPrecision val CLIPPINGPRECISION = absConversion {abs = W, rep = fn W n => n} INT val CLIP_DEFAULT_PRECIS = W (0) val CLIP_CHARACTER_PRECIS = W (1) val CLIP_STROKE_PRECIS = W (2) val CLIP_MASK = W (0xf) val CLIP_LH_ANGLES = W (1 * 16 (* 1<<4 *)) val CLIP_TT_ALWAYS = W (2 * 16 (* 2<<4 *)) val CLIP_EMBEDDED = W (8 * 16 (* 8<<4 *)) end type LOGFONT = { height : int, width : int, escapement : int, orientation : int, weight : FontWeight, italic : bool, underline : bool, strikeOut : bool, charSet : CharacterSet, outputPrecision: OutputPrecision, clipPrecision : ClippingPrecision, quality : OutputQuality, pitch: FontPitch, family: FontFamily, faceName : string } local val LogFont = STRUCT14(INT, INT, INT, INT, FONTWEIGHT, CHAR, CHAR, CHAR, CHAR, CHAR, CHAR, CHAR, CHAR, CHARARRAY 32) val (fromBase, toBase, struc) = breakConversion LogFont val (fromCS, toCS, _) = breakConversion CHARACTERSET val (fromOP, toOP, _) = breakConversion OUTPUTPRECISION val (fromCP, toCP, _) = breakConversion CLIPPINGPRECISION val (fromOQ, toOQ, _) = breakConversion OUTPUTQUALITY val (fromFPF, toFPF, _) = breakConversion FONTPITCHANDFAMILY fun chToB #"\000" = false | chToB _ = true fun bToch false = #"\000" | bToch true = #"\001" fun from v : LOGFONT = let val (height, width, escapement, orientation, weight, italic, underline, strikeOut, charSet, outputPrecision, clipPrecision, quality, pitchFamily, faceName) = fromBase v val (pitch, family) = (fromFPF o toCint o ord) pitchFamily in {height = height, width = width, escapement = escapement, orientation = orientation, weight = weight, italic = chToB italic, underline = chToB underline, strikeOut = chToB strikeOut, charSet = (fromCS o toCint o ord) charSet, outputPrecision = (fromOP o toCint o ord) outputPrecision, clipPrecision = (fromCP o toCint o ord) clipPrecision, quality = (fromOQ o toCint o ord) quality, pitch = pitch, family = family, faceName = faceName} end fun to ({height, width, escapement, orientation, weight, italic, underline, strikeOut, charSet, outputPrecision, clipPrecision, quality, pitch, family, faceName}: LOGFONT) = let val pitchFamily = fromCchar(toFPF(pitch, family)) in toBase(height, width, escapement, orientation, weight, bToch italic, bToch underline, bToch strikeOut, (chr o fromCint o toCS) charSet, (chr o fromCint o toOP) outputPrecision, (chr o fromCint o toCP) clipPrecision, (chr o fromCint o toOQ) quality, pitchFamily, faceName) end in val LOGFONT = mkConversion from to struc end end end; polyml.5.2.1/mlsource/extra/Win/GdiBase.sml0000644000175000017500000002442110313043365017521 0ustar daviddavid(* Copyright (c) 2001 David C.J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure GdiBase = struct local open CInterface Base in local datatype RasterOpCode = W of int and QuaternaryRop = Y of int in type RasterOpCode = RasterOpCode type QuaternaryRop = QuaternaryRop val RASTEROPCODE = absConversion {abs = W, rep = fn W n => n} INT val QUATERNARY = absConversion {abs = Y, rep = fn Y n => n} INT val SRCCOPY = W (0x00CC0020 (* dest = source *)) val SRCPAINT = W (0x00EE0086 (* dest = source OR dest *)) val SRCAND = W (0x008800C6 (* dest = source AND dest *)) val SRCINVERT = W (0x00660046 (* dest = source XOR dest *)) val SRCERASE = W (0x00440328 (* dest = source AND (NOT dest ) *)) val NOTSRCCOPY = W (0x00330008 (* dest = (NOT source) *)) val NOTSRCERASE = W (0x001100A6 (* dest = (NOT src) AND (NOT dest) *)) val MERGECOPY = W (0x00C000CA (* dest = (source AND pattern) *)) val MERGEPAINT = W (0x00BB0226 (* dest = (NOT source) OR dest *)) val PATCOPY = W (0x00F00021 (* dest = pattern *)) val PATPAINT = W (0x00FB0A09 (* dest = DPSnoo *)) val PATINVERT = W (0x005A0049 (* dest = pattern XOR dest *)) val DSTINVERT = W (0x00550009 (* dest = (NOT dest) *)) val BLACKNESS = W (0x00000042 (* dest = BLACK *)) val WHITENESS = W (0x00FF0062 (* dest = WHITE *)) fun MAKEROP4{fore = (W fore): RasterOpCode, back = (W back): RasterOpCode} = Y(IntInf.orb(fore, IntInf.andb(IntInf.<<(back, 0w8), 0xFF000000))) end (* BITMAPS *) type BITMAP = { width: int, height: int, widthBytes: int, planes: int, bitsPerPixel: int, bits: Word8Vector.vector option } local val bitmapStruct = STRUCT7(INT, INT, INT, INT, SHORT, SHORT, POINTER) val (fromCStr, toCStr, lpStruct) = breakConversion bitmapStruct fun toCbmp({width, height, widthBytes, planes, bitsPerPixel, bits}: BITMAP) = toCStr(0, width, height, widthBytes, planes, bitsPerPixel, case bits of NONE => toCint 0 | SOME b => fromWord8vec b) fun fromCbmp(v: vol): BITMAP = let val (_, width, height, widthBytes, planes, bitsPerPixel, bits) = fromCStr v val bits = if fromCint bits = 0 then NONE else SOME (toWord8vec (bits, height * widthBytes)) in {width = width, height = height, widthBytes = widthBytes, planes = planes, bitsPerPixel = bitsPerPixel, bits = bits} end in val BITMAP = mkConversion fromCbmp toCbmp lpStruct end (* Line and Path *) datatype PointType = PT_MOVETO | PT_LINETO | PT_BEZIERTO | PT_LINETOANDCLOSE | PT_BEZIERTOANDCLOSE local val tab = [ (PT_LINETO, 2), (PT_BEZIERTO, 4), (PT_MOVETO, 6), (PT_LINETOANDCLOSE, 3), (PT_BEZIERTOANDCLOSE, 5) ] val (toInt, fromInt) = tableLookup(tab, NONE) in val POINTTYPE = absConversion {abs = fromInt o ord, rep = chr o toInt} CHAR (* Encoded as single bytes *) end (* COLORREF - this is an RGB encoded into a 32-bit word. *) abstype COLORREF = C of LargeWord.word with local open LargeWord infix 7 andb infix 6 orb infix 4 << >> in fun RGB{red: int, green: int, blue: int} = C(fromInt red andb 0wxff orb (fromInt green andb 0wxff << 0w8) orb (fromInt blue andb 0wxff << 0w16)) fun PALETTERGB rgb = let val C r = RGB rgb in C(r orb 0wx02000000) end fun toRGB(C p) = { red = toInt(p andb 0wxff), green = toInt((p >> 0w8) andb 0wxff), blue = toInt((p >> 0w16) andb 0wxff) } end val COLORREF = absConversion {abs=C, rep = fn(C v) => v} WORD end (* Brush *) datatype BrushStyle = BS_SOLID | BS_HOLLOW | BS_HATCHED of HatchStyle | BS_PATTERN of HBITMAP (* | BS_DIBPATTERN of PACKEDDIB *) and HatchStyle = HS_HORIZONTAL | HS_VERTICAL | HS_FDIAGONAL | HS_BDIAGONAL | HS_CROSS | HS_DIAGCROSS type LOGBRUSH = BrushStyle * COLORREF local val LBRUSH = STRUCT3(INT, COLORREF, INT) val (fromStr, toStr, lbStruct) = breakConversion LBRUSH val hbtab = [ (HS_HORIZONTAL, 0 (* ~~~~~ *)), (HS_VERTICAL, 1 (* ||||| *)), (HS_FDIAGONAL, 2 (* \\\\\ *)), (HS_BDIAGONAL, 3 (* (* /// *) *)), (HS_CROSS, 4 (* +++++ *)), (HS_DIAGCROSS, 5 (* xxxxx *)) ] val (fromHB, toHB) = tableLookup(hbtab, NONE) fun toLB(BS_SOLID, cr) = toStr(0, cr, 0) | toLB(BS_HOLLOW, cr) = toStr(1, cr (* actually ignored *), 0) | toLB(BS_HATCHED hs, cr) = toStr(2, cr, fromHB hs) | toLB(BS_PATTERN hb, cr) = toStr(3, cr (* actually ignored *), hgdiAsInt hb) (* | toLB(BS_DIBPATTERN dp, cr) = toStr(5, cr (* treated specially *), ??? dp) *) fun fromLB (v: vol): LOGBRUSH = let val (t, cr, i) = fromStr v in case t of 0 => (BS_SOLID, cr) | 1 => (BS_HOLLOW, cr) | 2 => (BS_HATCHED(toHB i), cr) | 3 => (BS_PATTERN(intAsHgdi i), cr) | _ => raise Fail "Unknown brush type" end in val HATCHSTYLE = absConversion {abs = toHB, rep = fromHB} INT val LOGBRUSH = mkConversion fromLB toLB lbStruct end (* Pen *) (* This is confused. Many of these are only applicable for ExtCreatePen and most are mutually exclusive. *) datatype PenStyle = PS_SOLID | PS_DASH | PS_DOT | PS_DASHDOT | PS_DASHDOTDOT | PS_NULL | PS_INSIDEFRAME | PS_USERSTYLE | PS_ALTERNATE | PS_ENDCAP_ROUND | PS_ENDCAP_SQUARE | PS_ENDCAP_FLAT | PS_JOIN_ROUND | PS_JOIN_BEVEL | PS_JOIN_MITER | PS_COSMETIC | PS_GEOMETRIC type LOGPEN = PenStyle * int option * COLORREF local val LPEN = STRUCT3(INT, POINT, COLORREF) val (fromStr, toStr, lpStruct) = breakConversion LPEN val tab = [ (PS_SOLID, 0), (PS_DASH, 1 (* ~~~~~~~ *)), (PS_DOT, 2 (* ....... *)), (PS_DASHDOT, 3 (* _._._._ *)), (PS_DASHDOTDOT, 4 (* _.._.._ *)), (PS_NULL, 5), (PS_INSIDEFRAME, 6), (PS_USERSTYLE, 7), (PS_ALTERNATE, 8), (PS_ENDCAP_ROUND, 0x00000000), (PS_ENDCAP_SQUARE, 0x00000100), (PS_ENDCAP_FLAT, 0x00000200), (PS_JOIN_ROUND, 0x00000000), (PS_JOIN_BEVEL, 0x00001000), (PS_JOIN_MITER, 0x00002000), (PS_COSMETIC, 0x00000000), (PS_GEOMETRIC, 0x00010000) ] val (fromPS, toPS) = tableLookup(tab, NONE) fun toLP((ps, width, cr): LOGPEN) = toStr(fromPS ps, {x=getOpt(width, 0), y=0}, cr) fun fromLP(v: vol): LOGPEN = let val (ps, {x=width, ...}, cr) = fromStr v in (toPS ps, case width of 0 => NONE | i => SOME i, cr) end in val PENSTYLE = tableSetConversion(tab, NONE) val LOGPEN = mkConversion fromLP toLP lpStruct end (* Transform *) datatype MapMode = MM_TEXT | MM_LOMETRIC | MM_HIMETRIC | MM_LOENGLISH | MM_HIENGLISH | MM_TWIPS | MM_ISOTROPIC | MM_ANISOTROPIC val MM_MIN = MM_TEXT val MM_MAX = MM_ANISOTROPIC val MM_MAX_FIXEDSCALE = MM_TWIPS local val tab = [ (MM_TEXT, 1), (MM_LOMETRIC, 2), (MM_HIMETRIC, 3), (MM_LOENGLISH, 4), (MM_HIENGLISH, 5), (MM_TWIPS, 6), (MM_ISOTROPIC, 7), (MM_ANISOTROPIC, 8) ] (* SetMapMode and GetMapMode return 0 in the event of an error. *) fun toInt _ = raise Match fun fromInt i = if i = 0 then raise OS.SysErr("MapMode", SOME(GetLastError())) else raise Match; in val MAPMODE = tableConversion(tab, SOME(fromInt, toInt)) end (* REGIONS *) local datatype RegionOperation = W of int in type RegionOperation = RegionOperation val REGIONOPERATION = absConversion {abs = W, rep = fn W n => n} INT val RGN_ERROR = W (0) val RGN_AND = W (1) val RGN_OR = W (2) val RGN_XOR = W (3) val RGN_DIFF = W (4) val RGN_COPY = W (5) end local datatype ResultRegion = W of int in type ResultRegion = ResultRegion val RESULTREGION = absConversion {abs = W, rep = fn W n => n} INT val ERROR = W (0) val NULLREGION = W (1) val SIMPLEREGION = W (2) val COMPLEXREGION = W (3) end type METAFILEPICT = {mm: MapMode, size: SIZE, hMF: HMETAFILE} local val metaFilePict = STRUCT3(MAPMODE, SIZE, HMETAFILE) val (toMfp, fromMfp, mfpStruct) = breakConversion metaFilePict fun toCMfp({mm, size, hMF}: METAFILEPICT): vol = fromMfp(mm, size, hMF) fun fromCMfp v : METAFILEPICT = let val (mm, size, hMF) = toMfp v in {mm=mm, size=size, hMF=hMF} end in (* This is needed in the Clipboard structure. *) val METAFILEPICT = mkConversion fromCMfp toCMfp mfpStruct end end end; polyml.5.2.1/mlsource/extra/Win/Globals.sml0000644000175000017500000000311010313043365017576 0ustar daviddavid(* Copyright (c) 2001 David C.J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure Globals : sig type 'a HANDLE type HINSTANCE type HWND val hNull : 'a HANDLE val handleOfInt : int -> 'a HANDLE val intOfHandle : 'a HANDLE -> int val isHNull : 'a HANDLE -> bool val ApplicationInstance : unit -> HINSTANCE val GetLastError : unit -> OS.syserror val MainWindow : unit -> HWND end = struct local open CInterface open Base in type 'a HANDLE = 'a HANDLE val hNull = hNull and isHNull = isHNull and handleOfInt = handleOfInt and intOfHandle = intOfHandle type HINSTANCE = HINSTANCE type HWND = HWND val GetLastError = Base.GetLastError local fun callWin n : int = RunCall.run_call2 RuntimeCalls.POLY_SYS_os_specific (n, ()) in fun ApplicationInstance(): HINSTANCE = handleOfInt(callWin 1103) and MainWindow(): HWND = handleOfInt(callWin 1104) end end end; polyml.5.2.1/mlsource/extra/Win/Icon.sml0000644000175000017500000000537110313043365017116 0ustar daviddavid(* Copyright (c) 2001 David C.J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure Icon: sig type HICON and HINSTANCE and HDC val CopyIcon : HICON -> HICON val DestroyIcon : HICON -> unit val DrawIcon : HDC * int * int * HICON -> unit val ExtractIcon : HINSTANCE * string * int -> HICON val IDI_APPLICATION : Resource.RESID val IDI_ASTERISK : Resource.RESID val IDI_ERROR : Resource.RESID val IDI_EXCLAMATION : Resource.RESID val IDI_HAND : Resource.RESID val IDI_INFORMATION : Resource.RESID val IDI_QUESTION : Resource.RESID val IDI_WARNING : Resource.RESID val IDI_WINLOGO : Resource.RESID val LoadIcon : HINSTANCE * Resource.RESID -> HICON end = struct local open CInterface open Base open Resource in type HICON = HICON and HINSTANCE = HINSTANCE and HDC = HDC val hiconNull = hgdiObjNull and isHiconNull = isHgdiObjNull fun checkIcon name c = if isHiconNull c then raise OS.SysErr(name, SOME(GetLastError())) else c val CopyIcon = checkIcon "CopyIcon" o call1 (user "CopyIcon") (HICON) HICON val DestroyIcon = checkResult "DestroyIcon" o call1 (user "DestroyIcon") (HICON) BOOL val DrawIcon = checkResult "DrawIcon" o call4 (user "DrawIcon") (HDC, INT, INT, HICON) BOOL val ExtractIcon = call3 (user "ExtractIcon") (HINSTANCE, STRING, INT) HICON val LoadIcon = checkIcon "LoadIcon" o call2 (user "LoadIconA") (HINSTANCE, RESID) HICON (* Built-in icons. *) val IDI_APPLICATION = Resource.IdAsInt 32512 val IDI_ASTERISK = Resource.IdAsInt 32516 val IDI_EXCLAMATION = Resource.IdAsInt 32515 val IDI_HAND = Resource.IdAsInt 32513 val IDI_ERROR = IDI_HAND val IDI_INFORMATION = IDI_ASTERISK val IDI_QUESTION = Resource.IdAsInt 32514 val IDI_WARNING = IDI_EXCLAMATION val IDI_WINLOGO = Resource.IdAsInt 32517 (* TODO: CreateIcon - complicated CreateIconFromResource - complicated CreateIconFromResourceEx CreateIconIndirect DrawIconEx ExtractAssociatedIcon ExtractIconEx GetIconInfo LookupIconIdFromDirectory LookupIconIdFromDirectoryEx *) end end; polyml.5.2.1/mlsource/extra/Win/Keyboard.sml0000644000175000017500000000432710313043365017766 0ustar daviddavid(* Copyright (c) 2001 David C.J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure Keyboard: sig type HWND val EnableWindow : HWND * bool -> bool val GetActiveWindow : unit -> HWND option val GetFocus : unit -> HWND option val IsWindowEnabled : HWND -> bool val SetActiveWindow : HWND -> HWND val SetFocus : HWND option -> HWND option end = struct local open CInterface Base fun checkWindow name c = if isHNull c then raise OS.SysErr(name, SOME(GetLastError())) else c in type HWND = HWND val EnableWindow = call2 (user "EnableWindow") (HWND, BOOL) BOOL val GetActiveWindow = call0 (user "GetActiveWindow") () HWNDOPT val GetFocus = call0 (user "GetFocus") () HWNDOPT val IsWindowEnabled = call1 (user "IsWindowEnabled") (HWND) BOOL val SetActiveWindow = checkWindow "SetActiveWindow" o call1 (user "SetActiveWindow") (HWND) HWND (* The argument to SetFocus is an option because we may ignore input. The result may be null if there was an error or if no window had focus. *) val SetFocus = call1 (user "SetFocus") (HWNDOPT) HWNDOPT end end; (* ActivateKeyboardLayout GetAsyncKeyState GetKeyboardLayout GetKeyboardLayoutList GetKeyboardLayoutName GetKeyboardState GetKeyNameText GetKeyState keybd_event LoadKeyboardLayout MapVirtualKey MapVirtualKeyEx OemKeyScan RegisterHotKey SendInput SetKeyboardState ToAscii ToAsciiEx ToUnicode ToUnicodeEx UnloadKeyboardLayout UnregisterHotKey VkKeyScan VkKeyScanEx Obsolete Functions GetKBCodePage *) polyml.5.2.1/mlsource/extra/Win/Line.sml0000644000175000017500000001120010676745732017124 0ustar daviddavid(* Copyright (c) 2001 David C.J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure Line : sig type HDC type RECT = { top: int, left: int, bottom: int, right: int } type POINT = { x: int, y: int } datatype PointType = PT_BEZIERTO | PT_BEZIERTOANDCLOSE | PT_LINETO | PT_LINETOANDCLOSE | PT_MOVETO eqtype ArcDirection val AD_CLOCKWISE : ArcDirection val AD_COUNTERCLOCKWISE : ArcDirection val AngleArc : HDC * int * int * int * real * real -> unit val Arc : HDC * int * int * int * int * int * int * int * int -> unit val ArcTo : HDC * int * int * int * int * int * int * int * int -> unit val GetArcDirection : HDC -> ArcDirection val LineTo : HDC * POINT -> bool val MoveToEx : HDC * POINT -> POINT val PolyBezier : HDC * POINT list -> unit val PolyBezierTo : HDC * POINT list -> unit val PolyDraw : HDC * (PointType * POINT) list -> unit val Polyline : HDC * POINT list -> unit val PolylineTo : HDC * POINT list -> unit val SetArcDirection : HDC * ArcDirection -> ArcDirection end = struct local open CInterface Base GdiBase val (fromPt, toPt, ptStruct) = breakConversion POINT val XCOORD = INT : int Conversion val YCOORD = INT: int Conversion in type HDC = HDC and POINT = POINT and RECT = RECT datatype PointType = datatype PointType local datatype ArcDirection = W of int in type ArcDirection = ArcDirection val ARCDIRECTION = absConversion {abs = W, rep = fn W n => n} INT val AD_COUNTERCLOCKWISE = W(1) val AD_CLOCKWISE = W(2) end; val AngleArc = call6(gdi "AngleArc") (HDC,XCOORD,YCOORD,INT,FLOAT,FLOAT) (SUCCESSSTATE "AngleArc") val Arc = call9(gdi "Arc") (HDC,INT,INT,INT,INT,INT,INT,INT,INT) (SUCCESSSTATE "Arc") val ArcTo = call9(gdi "ArcTo") (HDC,INT,INT,INT,INT,INT,INT,INT,INT) (SUCCESSSTATE "ArcTo") val GetArcDirection = call1(gdi "GetArcDirection") (HDC) ARCDIRECTION val SetArcDirection = call2(gdi "SetArcDirection") (HDC,ARCDIRECTION) ARCDIRECTION fun LineTo (h,({x,y}:POINT)) = call3 (gdi "LineTo") (HDC,INT,INT) (BOOL) (h,x,y) local val moveToEx = call4 (gdi "MoveToEx") (HDC, INT, INT, POINTER) (SUCCESSSTATE "MoveToEx") in fun MoveToEx(h, ({x,y}:POINT)) = let val p = alloc 1 ptStruct val _ = moveToEx(h, x, y, address p) in fromPt p end end fun PolyBezier (h,pts: POINT list) = let val count = List.length pts val ptarr = alloc count ptStruct fun setItem(pt, n) = (assign ptStruct (offset n ptStruct ptarr) (toPt pt); n+1) val _: int = List.foldl setItem 0 pts in call3 (gdi "PolyBezier") (HDC,POINTER,INT) (SUCCESSSTATE "PolyBezier") (h,address ptarr,count) end fun PolyBezierTo (h,pts: POINT list) = let val count = List.length pts val ptarr = alloc count ptStruct fun setItem(pt, n) = (assign ptStruct (offset n ptStruct ptarr) (toPt pt); n+1) val _: int = List.foldl setItem 0 pts in call3 (gdi "PolyBezierTo") (HDC,POINTER,INT) (SUCCESSSTATE "PolyBezierTo") (h,address ptarr,count) end fun PolyDraw (h, tplist: (PointType * POINT) list) = let val (typeList, ptList) = ListPair.unzip tplist val (ptarr, count) = list2Vector POINT ptList val (farr, _) = list2Vector POINTTYPE typeList in call4 (gdi "PolyDraw") (HDC,POINTER,POINTER,INT) (SUCCESSSTATE "PolyDraw") (h, ptarr, farr,count) end fun Polyline (h, pts: POINT list) = let val (ptarr, count) = list2Vector POINT pts in call3 (gdi "Polyline") (HDC,POINTER,INT) (SUCCESSSTATE "Polyline") (h, ptarr, count) end fun PolylineTo (h,pts: POINT list) = let val (ptarr, count) = list2Vector POINT pts in call3 (gdi "PolylineTo") (HDC,POINTER,INT) (SUCCESSSTATE "PolylineTo") (h, ptarr, count) end (* Other Line and Curve functions: LineDDA LineDDAProc PolyPolyline *) end end; polyml.5.2.1/mlsource/extra/Win/Listbox.sml0000644000175000017500000001347110313043365017652 0ustar daviddavid(* Copyright (c) 2001 David C.J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* Listboxes. *) structure Listbox: sig structure Style: sig include BIT_FLAGS where type flags = Window.Style.flags val WS_OVERLAPPED: flags and WS_POPUP: flags and WS_CHILD: flags and WS_MINIMIZE: flags and WS_VISIBLE: flags and WS_DISABLED:flags and WS_CLIPSIBLINGS:flags and WS_CLIPCHILDREN:flags and WS_MAXIMIZE:flags and WS_CAPTION:flags and WS_BORDER:flags and WS_DLGFRAME:flags and WS_VSCROLL:flags and WS_HSCROLL:flags and WS_SYSMENU:flags and WS_THICKFRAME:flags and WS_GROUP:flags and WS_TABSTOP:flags and WS_MINIMIZEBOX:flags and WS_MAXIMIZEBOX:flags and WS_TILED:flags and WS_ICONIC:flags and WS_SIZEBOX:flags and WS_OVERLAPPEDWINDOW:flags and WS_TILEDWINDOW:flags and WS_POPUPWINDOW: flags and WS_CHILDWINDOW: flags and LBS_NOTIFY: flags and LBS_SORT: flags and LBS_NOREDRAW: flags and LBS_MULTIPLESEL: flags and LBS_OWNERDRAWFIXED: flags and LBS_OWNERDRAWVARIABLE: flags and LBS_HASSTRINGS: flags and LBS_USETABSTOPS: flags and LBS_NOINTEGRALHEIGHT: flags and LBS_MULTICOLUMN: flags and LBS_WANTKEYBOARDINPUT: flags and LBS_EXTENDEDSEL: flags and LBS_DISABLENOSCROLL: flags and LBS_NODATA: flags and LBS_NOSEL: flags and LBS_STANDARD: flags end structure Notifications: sig val LBN_SELCHANGE: int val LBN_DBLCLK: int val LBN_SELCANCEL: int val LBN_SETFOCUS: int val LBN_KILLFOCUS: int end datatype LBDirAttr = DDL_READWRITE | DDL_READONLY | DDL_HIDDEN | DDL_SYSTEM | DDL_DIRECTORY | DDL_ARCHIVE | DDL_POSTMSGS | DDL_DRIVES | DDL_EXCLUSIVE end = struct structure Style = struct open Window.Style (* Include all the windows styles. *) val LBS_NOTIFY = fromWord 0wx0001 val LBS_SORT = fromWord 0wx0002 val LBS_NOREDRAW = fromWord 0wx0004 val LBS_MULTIPLESEL = fromWord 0wx0008 val LBS_OWNERDRAWFIXED = fromWord 0wx0010 val LBS_OWNERDRAWVARIABLE = fromWord 0wx0020 val LBS_HASSTRINGS = fromWord 0wx0040 val LBS_USETABSTOPS = fromWord 0wx0080 val LBS_NOINTEGRALHEIGHT = fromWord 0wx0100 val LBS_MULTICOLUMN = fromWord 0wx0200 val LBS_WANTKEYBOARDINPUT = fromWord 0wx0400 val LBS_EXTENDEDSEL = fromWord 0wx0800 val LBS_DISABLENOSCROLL = fromWord 0wx1000 val LBS_NODATA = fromWord 0wx2000 val LBS_NOSEL = fromWord 0wx4000 val LBS_STANDARD = flags[LBS_NOTIFY, LBS_SORT, WS_VSCROLL, WS_BORDER] val all = flags[Window.Style.all, LBS_NOTIFY, LBS_SORT, LBS_NOREDRAW, LBS_MULTIPLESEL, LBS_OWNERDRAWFIXED, LBS_OWNERDRAWVARIABLE, LBS_HASSTRINGS, LBS_USETABSTOPS, LBS_NOINTEGRALHEIGHT, LBS_MULTICOLUMN, LBS_WANTKEYBOARDINPUT, LBS_EXTENDEDSEL, LBS_DISABLENOSCROLL, LBS_NODATA, LBS_NOSEL] val intersect = List.foldl (fn (a, b) => fromWord(SysWord.andb(toWord a, toWord b))) all end structure Notifications = struct val LBN_SELCHANGE = 1 val LBN_DBLCLK = 2 val LBN_SELCANCEL = 3 val LBN_SETFOCUS = 4 val LBN_KILLFOCUS = 5 end datatype LBDirAttr = datatype ComboBase.CBDirAttr end; (* let open Listbox.Style val flagTable = [(LBS_NOTIFY, "LBS_NOTIFY"), (LBS_SORT, "LBS_SORT"), (LBS_NOREDRAW, "LBS_NOREDRAW"), (LBS_MULTIPLESEL, "LBS_MULTIPLESEL"), (LBS_OWNERDRAWFIXED, "LBS_OWNERDRAWFIXED"), (LBS_OWNERDRAWVARIABLE, "LBS_OWNERDRAWVARIABLE"), (LBS_HASSTRINGS, "LBS_HASSTRINGS"), (LBS_USETABSTOPS, "LBS_USETABSTOPS"), (LBS_NOINTEGRALHEIGHT, "LBS_NOINTEGRALHEIGHT"), (LBS_MULTICOLUMN, "LBS_MULTICOLUMN"), (LBS_WANTKEYBOARDINPUT, "LBS_WANTKEYBOARDINPUT"), (LBS_EXTENDEDSEL, "LBS_EXTENDEDSEL"), (LBS_DISABLENOSCROLL, "LBS_DISABLENOSCROLL"), (LBS_NODATA, "LBS_NODATA"), (WS_POPUP, "WS_POPUP"), (WS_CHILD, "WS_CHILD"), (WS_MINIMIZE, "WS_MINIMIZE"), (WS_VISIBLE, "WS_VISIBLE"), (WS_DISABLED, "WS_DISABLED"), (WS_CLIPSIBLINGS, "WS_CLIPSIBLINGS"), (WS_CLIPCHILDREN, "WS_CLIPCHILDREN"), (WS_MAXIMIZE, "WS_MAXIMIZE"), (WS_CAPTION, "WS_CAPTION"), (WS_BORDER, "WS_BORDER"), (WS_DLGFRAME, "WS_DLGFRAME"), (WS_VSCROLL, "WS_VSCROLL"), (WS_HSCROLL, "WS_HSCROLL"), (WS_SYSMENU, "WS_SYSMENU"), (WS_THICKFRAME, "WS_THICKFRAME"), (WS_GROUP, "WS_GROUP"), (WS_TABSTOP, "WS_TABSTOP"), (WS_MINIMIZEBOX, "WS_MINIMIZEBOX"), (WS_MAXIMIZEBOX, "WS_MAXIMIZEBOX")] fun accumulateFlags f [] = [] | accumulateFlags f ((w, s)::t) = if allSet(w, f) then s :: accumulateFlags(clear(w, f)) t else accumulateFlags f t fun printFlags(put, beg, brk, nd) depth _ x = (* This is just the code to print a list. *) let val stringFlags = accumulateFlags x flagTable fun plist [] depth = () | plist _ 0 = put "..." | plist [h] depth = put h | plist (h::t) depth = ( put (h^","); brk (1, 0); plist t (depth - 1) ) in beg (3, false); put "["; if depth <= 0 then put "..." else plist stringFlags depth; put "]"; nd () end in PolyML.install_pp printFlags end; *)polyml.5.2.1/mlsource/extra/Win/Locale.sml0000644000175000017500000001000510313043365017413 0ustar daviddavid(* Copyright (c) 2001 David C.J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure Locale: sig datatype PrimaryLanguage = LANG_AFRIKAANS | LANG_ALBANIAN | LANG_ARABIC | LANG_BASQUE | LANG_BELARUSIAN | LANG_BULGARIAN | LANG_CATALAN | LANG_CHINESE | LANG_CROATIAN | LANG_CZECH | LANG_DANISH | LANG_DUTCH | LANG_ENGLISH | LANG_ESTONIAN | LANG_FAEROESE | LANG_FARSI | LANG_FINNISH | LANG_FRENCH | LANG_GERMAN | LANG_GREEK | LANG_HEBREW | LANG_HUNGARIAN | LANG_ICELANDIC | LANG_INDONESIAN | LANG_ITALIAN | LANG_JAPANESE | LANG_KOREAN | LANG_LATVIAN | LANG_LITHUANIAN | LANG_NORWEGIAN | LANG_POLISH | LANG_PORTUGUESE | LANG_ROMANIAN | LANG_RUSSIAN | LANG_SERBIAN | LANG_SLOVAK | LANG_SLOVENIAN | LANG_SPANISH | LANG_SWEDISH | LANG_THAI | LANG_TURKISH | LANG_UKRANIAN | LANG_VIETNAMESE | LANG_NEUTRAL datatype SubLanguage = SUBLANG_ARABIC_ALGERIA | SUBLANG_ARABIC_BAHRAIN | SUBLANG_ARABIC_EGYPT | SUBLANG_ARABIC_IRAQ | SUBLANG_ARABIC_JORDAN | SUBLANG_ARABIC_KUWAIT | SUBLANG_ARABIC_LEBANON | SUBLANG_ARABIC_LIBYA | SUBLANG_ARABIC_MOROCCO | SUBLANG_ARABIC_OMAN | SUBLANG_ARABIC_QATAR | SUBLANG_ARABIC_SAUDI_ARABIA | SUBLANG_ARABIC_SYRIA | SUBLANG_ARABIC_TUNISIA | SUBLANG_ARABIC_UAE | SUBLANG_ARABIC_YEMEN | SUBLANG_CHINESE_HONGKONG | SUBLANG_CHINESE_SIMPLIFIED | SUBLANG_CHINESE_SINGAPORE | SUBLANG_CHINESE_TRADITIONAL | SUBLANG_DUTCH | SUBLANG_DUTCH_BELGIAN | SUBLANG_ENGLISH_AUS | SUBLANG_ENGLISH_BELIZE | SUBLANG_ENGLISH_CAN | SUBLANG_ENGLISH_CARIBBEAN | SUBLANG_ENGLISH_EIRE | SUBLANG_ENGLISH_JAMAICA | SUBLANG_ENGLISH_NZ | SUBLANG_ENGLISH_SOUTH_AFRICA | SUBLANG_ENGLISH_TRINIDAD | SUBLANG_ENGLISH_UK | SUBLANG_ENGLISH_US | SUBLANG_FRENCH | SUBLANG_FRENCH_BELGIAN | SUBLANG_FRENCH_CANADIAN | SUBLANG_FRENCH_LUXEMBOURG | SUBLANG_FRENCH_SWISS | SUBLANG_GERMAN | SUBLANG_GERMAN_AUSTRIAN | SUBLANG_GERMAN_LIECHTENSTEIN | SUBLANG_GERMAN_LUXEMBOURG | SUBLANG_GERMAN_SWISS | SUBLANG_ITALIAN | SUBLANG_ITALIAN_SWISS | SUBLANG_KOREAN | SUBLANG_KOREAN_JOHAB | SUBLANG_NORWEGIAN_BOKMAL | SUBLANG_NORWEGIAN_NYNORSK | SUBLANG_PORTUGUESE | SUBLANG_PORTUGUESE_BRAZILIAN | SUBLANG_SERBIAN_CYRILLIC | SUBLANG_SERBIAN_LATIN | SUBLANG_SPANISH | SUBLANG_SPANISH_ARGENTINA | SUBLANG_SPANISH_BOLIVIA | SUBLANG_SPANISH_CHILE | SUBLANG_SPANISH_COLOMBIA | SUBLANG_SPANISH_COSTA_RICA | SUBLANG_SPANISH_DOMINICAN_REPUBLIC | SUBLANG_SPANISH_ECUADOR | SUBLANG_SPANISH_EL_SALVADOR | SUBLANG_SPANISH_GUATEMALA | SUBLANG_SPANISH_HONDURAS | SUBLANG_SPANISH_MEXICAN | SUBLANG_SPANISH_MODERN | SUBLANG_SPANISH_NICARAGUA | SUBLANG_SPANISH_PANAMA | SUBLANG_SPANISH_PARAGUAY | SUBLANG_SPANISH_PERU | SUBLANG_SPANISH_PUERTO_RICO | SUBLANG_SPANISH_URUGUAY | SUBLANG_SPANISH_VENEZUELA | SUBLANG_SWEDISH | SUBLANG_SWEDISH_FINLAND | SUBLANG_NEUTRAL | SUBLANG_DEFAULT | SUBLANG_SYS_DEFAULT datatype LANGID = MAKELANGID of PrimaryLanguage * SubLanguage val GetUserDefaultLangID: unit -> LANGID and GetSystemDefaultLangID: unit -> LANGID end = struct local open CInterface Base in open LocaleBase val GetUserDefaultLangID = call0 (kernel "GetUserDefaultLangID") () LANGID and GetSystemDefaultLangID = call0 (kernel "GetSystemDefaultLangID") () LANGID end end; polyml.5.2.1/mlsource/extra/Win/LocaleBase.sml0000644000175000017500000002001210313043365020205 0ustar daviddavid(* Copyright (c) 2001 David C.J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure LocaleBase = struct local open CInterface Base in datatype PrimaryLanguage = LANG_AFRIKAANS | LANG_ICELANDIC | LANG_ALBANIAN | LANG_INDONESIAN | LANG_ARABIC | LANG_ITALIAN | LANG_BASQUE | LANG_JAPANESE | LANG_BELARUSIAN | LANG_KOREAN | LANG_BULGARIAN | LANG_LATVIAN | LANG_CATALAN | LANG_LITHUANIAN | LANG_CHINESE | LANG_NEUTRAL | LANG_CROATIAN | LANG_NORWEGIAN | LANG_CZECH | LANG_POLISH | LANG_DANISH | LANG_PORTUGUESE | LANG_DUTCH | LANG_ROMANIAN | LANG_ENGLISH | LANG_RUSSIAN | LANG_ESTONIAN | LANG_SERBIAN | LANG_FAEROESE | LANG_SLOVAK | LANG_FARSI | LANG_SLOVENIAN | LANG_FINNISH | LANG_SPANISH | LANG_FRENCH | LANG_SWEDISH | LANG_GERMAN | LANG_THAI | LANG_GREEK | LANG_TURKISH | LANG_HEBREW | LANG_UKRANIAN | LANG_HUNGARIAN | LANG_VIETNAMESE datatype SubLanguage = SUBLANG_ARABIC_SAUDI_ARABIA | SUBLANG_GERMAN | SUBLANG_ARABIC_IRAQ | SUBLANG_GERMAN_SWISS | SUBLANG_ARABIC_EGYPT | SUBLANG_GERMAN_AUSTRIAN | SUBLANG_ARABIC_LIBYA | SUBLANG_GERMAN_LUXEMBOURG | SUBLANG_ARABIC_ALGERIA | SUBLANG_GERMAN_LIECHTENSTEIN | SUBLANG_ARABIC_MOROCCO | SUBLANG_ITALIAN | SUBLANG_ARABIC_TUNISIA | SUBLANG_ITALIAN_SWISS | SUBLANG_ARABIC_OMAN | SUBLANG_KOREAN | SUBLANG_ARABIC_YEMEN | SUBLANG_KOREAN_JOHAB | SUBLANG_ARABIC_SYRIA | SUBLANG_NEUTRAL | SUBLANG_ARABIC_JORDAN | SUBLANG_NORWEGIAN_BOKMAL | SUBLANG_ARABIC_LEBANON | SUBLANG_NORWEGIAN_NYNORSK | SUBLANG_ARABIC_KUWAIT | SUBLANG_PORTUGUESE | SUBLANG_ARABIC_UAE | SUBLANG_PORTUGUESE_BRAZILIAN | SUBLANG_ARABIC_BAHRAIN | SUBLANG_SERBIAN_LATIN | SUBLANG_ARABIC_QATAR | SUBLANG_SERBIAN_CYRILLIC | SUBLANG_CHINESE_TRADITIONAL | SUBLANG_SPANISH | SUBLANG_CHINESE_SIMPLIFIED | SUBLANG_SPANISH_MEXICAN | SUBLANG_CHINESE_HONGKONG | SUBLANG_SPANISH_MODERN | SUBLANG_CHINESE_SINGAPORE | SUBLANG_SPANISH_GUATEMALA | SUBLANG_DEFAULT | SUBLANG_SPANISH_COSTA_RICA | SUBLANG_DUTCH | SUBLANG_SPANISH_PANAMA | SUBLANG_DUTCH_BELGIAN | SUBLANG_SPANISH_DOMINICAN_REPUBLIC | SUBLANG_ENGLISH_US | SUBLANG_SPANISH_VENEZUELA | SUBLANG_ENGLISH_UK | SUBLANG_SPANISH_COLOMBIA | SUBLANG_ENGLISH_AUS | SUBLANG_SPANISH_PERU | SUBLANG_ENGLISH_CAN | SUBLANG_SPANISH_ARGENTINA | SUBLANG_ENGLISH_NZ | SUBLANG_SPANISH_ECUADOR | SUBLANG_ENGLISH_EIRE | SUBLANG_SPANISH_CHILE | SUBLANG_ENGLISH_SOUTH_AFRICA | SUBLANG_SPANISH_URUGUAY | SUBLANG_ENGLISH_JAMAICA | SUBLANG_SPANISH_PARAGUAY | SUBLANG_ENGLISH_CARIBBEAN | SUBLANG_SPANISH_BOLIVIA | SUBLANG_ENGLISH_BELIZE | SUBLANG_SPANISH_EL_SALVADOR | SUBLANG_ENGLISH_TRINIDAD | SUBLANG_SPANISH_HONDURAS | SUBLANG_FRENCH | SUBLANG_SPANISH_NICARAGUA | SUBLANG_FRENCH_BELGIAN | SUBLANG_SPANISH_PUERTO_RICO | SUBLANG_FRENCH_CANADIAN | SUBLANG_SWEDISH | SUBLANG_FRENCH_SWISS | SUBLANG_SWEDISH_FINLAND | SUBLANG_FRENCH_LUXEMBOURG | SUBLANG_SYS_DEFAULT local val tab = [ (LANG_NEUTRAL, 0x00), (LANG_AFRIKAANS, 0x36), (LANG_ALBANIAN, 0x1c), (LANG_ARABIC, 0x01), (LANG_BASQUE, 0x2d), (LANG_BELARUSIAN, 0x23), (LANG_BULGARIAN, 0x02), (LANG_CATALAN, 0x03), (LANG_CHINESE, 0x04), (LANG_CROATIAN, 0x1a), (LANG_CZECH, 0x05), (LANG_DANISH, 0x06), (LANG_DUTCH, 0x13), (LANG_ENGLISH, 0x09), (LANG_ESTONIAN, 0x25), (LANG_FAEROESE, 0x38), (LANG_FARSI, 0x29), (LANG_FINNISH, 0x0b), (LANG_FRENCH, 0x0c), (LANG_GERMAN, 0x07), (LANG_GREEK, 0x08), (LANG_HEBREW, 0x0d), (LANG_HUNGARIAN, 0x0e), (LANG_ICELANDIC, 0x0f), (LANG_INDONESIAN, 0x21), (LANG_ITALIAN, 0x10), (LANG_JAPANESE, 0x11), (LANG_KOREAN, 0x12), (LANG_LATVIAN, 0x26), (LANG_LITHUANIAN, 0x27), (LANG_NORWEGIAN, 0x14), (LANG_POLISH, 0x15), (LANG_PORTUGUESE, 0x16), (LANG_ROMANIAN, 0x18), (LANG_RUSSIAN, 0x19), (LANG_SERBIAN, 0x1a), (LANG_SLOVAK, 0x1b), (LANG_SLOVENIAN, 0x24), (LANG_SPANISH, 0x0a), (LANG_SWEDISH, 0x1d), (LANG_THAI, 0x1e), (LANG_TURKISH, 0x1f), (LANG_UKRANIAN, 0x22), (LANG_VIETNAMESE, 0x2a)] in val (fromPrim, toPrim) = tableLookup(tab, NONE) end local val tab = [ (SUBLANG_NEUTRAL, 0x00), (SUBLANG_DEFAULT, 0x01), (SUBLANG_SYS_DEFAULT, 0x02), (SUBLANG_ARABIC_SAUDI_ARABIA, 0x01), (SUBLANG_ARABIC_IRAQ, 0x02), (SUBLANG_ARABIC_EGYPT, 0x03), (SUBLANG_ARABIC_LIBYA, 0x04), (SUBLANG_ARABIC_ALGERIA, 0x05), (SUBLANG_ARABIC_MOROCCO, 0x06), (SUBLANG_ARABIC_TUNISIA, 0x07), (SUBLANG_ARABIC_OMAN, 0x08), (SUBLANG_ARABIC_YEMEN, 0x09), (SUBLANG_ARABIC_SYRIA, 0x0a), (SUBLANG_ARABIC_JORDAN, 0x0b), (SUBLANG_ARABIC_LEBANON, 0x0c), (SUBLANG_ARABIC_KUWAIT, 0x0d), (SUBLANG_ARABIC_UAE, 0x0e), (SUBLANG_ARABIC_BAHRAIN, 0x0f), (SUBLANG_ARABIC_QATAR, 0x10), (SUBLANG_CHINESE_TRADITIONAL, 0x01), (SUBLANG_CHINESE_SIMPLIFIED, 0x02), (SUBLANG_CHINESE_HONGKONG, 0x03), (SUBLANG_CHINESE_SINGAPORE, 0x04), (SUBLANG_DUTCH, 0x01), (SUBLANG_DUTCH_BELGIAN, 0x02), (SUBLANG_ENGLISH_US, 0x01), (SUBLANG_ENGLISH_UK, 0x02), (SUBLANG_ENGLISH_AUS, 0x03), (SUBLANG_ENGLISH_CAN, 0x04), (SUBLANG_ENGLISH_NZ, 0x05), (SUBLANG_ENGLISH_EIRE, 0x06), (SUBLANG_ENGLISH_SOUTH_AFRICA, 0x07), (SUBLANG_ENGLISH_JAMAICA, 0x08), (SUBLANG_ENGLISH_CARIBBEAN, 0x09), (SUBLANG_ENGLISH_BELIZE, 0x0a), (SUBLANG_ENGLISH_TRINIDAD, 0x0b), (SUBLANG_FRENCH, 0x01), (SUBLANG_FRENCH_BELGIAN, 0x02), (SUBLANG_FRENCH_CANADIAN, 0x03), (SUBLANG_FRENCH_SWISS, 0x04), (SUBLANG_FRENCH_LUXEMBOURG, 0x05), (SUBLANG_GERMAN, 0x01), (SUBLANG_GERMAN_SWISS, 0x02), (SUBLANG_GERMAN_AUSTRIAN, 0x03), (SUBLANG_GERMAN_LUXEMBOURG, 0x04), (SUBLANG_GERMAN_LIECHTENSTEIN, 0x05), (SUBLANG_ITALIAN, 0x01), (SUBLANG_ITALIAN_SWISS, 0x02), (SUBLANG_KOREAN, 0x01), (SUBLANG_KOREAN_JOHAB, 0x02), (SUBLANG_NORWEGIAN_BOKMAL, 0x01), (SUBLANG_NORWEGIAN_NYNORSK, 0x02), (SUBLANG_PORTUGUESE, 0x02), (SUBLANG_PORTUGUESE_BRAZILIAN, 0x01), (SUBLANG_SERBIAN_LATIN, 0x02), (SUBLANG_SERBIAN_CYRILLIC, 0x03), (SUBLANG_SPANISH, 0x01), (SUBLANG_SPANISH_MEXICAN, 0x02), (SUBLANG_SPANISH_MODERN, 0x03), (SUBLANG_SPANISH_GUATEMALA, 0x04), (SUBLANG_SPANISH_COSTA_RICA, 0x05), (SUBLANG_SPANISH_PANAMA, 0x06), (SUBLANG_SPANISH_DOMINICAN_REPUBLIC, 0x07), (SUBLANG_SPANISH_VENEZUELA, 0x08), (SUBLANG_SPANISH_COLOMBIA, 0x09), (SUBLANG_SPANISH_PERU, 0x0a), (SUBLANG_SPANISH_ARGENTINA, 0x0b), (SUBLANG_SPANISH_ECUADOR, 0x0c), (SUBLANG_SPANISH_CHILE, 0x0d), (SUBLANG_SPANISH_URUGUAY, 0x0e), (SUBLANG_SPANISH_PARAGUAY, 0x0f), (SUBLANG_SPANISH_BOLIVIA, 0x10), (SUBLANG_SPANISH_EL_SALVADOR, 0x11), (SUBLANG_SPANISH_HONDURAS, 0x12), (SUBLANG_SPANISH_NICARAGUA, 0x13), (SUBLANG_SPANISH_PUERTO_RICO, 0x14), (SUBLANG_SWEDISH, 0x01), (SUBLANG_SWEDISH_FINLAND, 0x02)] in val (fromSub, toSub) = tableLookup(tab, NONE) end datatype LANGID = MAKELANGID of PrimaryLanguage * SubLanguage local fun fromLANGID(MAKELANGID(prim, sub)) = IntInf.orb(fromPrim prim, IntInf.<<(fromSub sub, 0w10)) (* It seems that GetUserDefaultLangID at least sets the top word to something odd so we mask both parts. *) fun toLANGID l = MAKELANGID( toPrim(IntInf.andb(l, 0x3ff)), toSub(IntInf.andb(IntInf.~>>(l, 0w10), 0x3f)) ) in val LANGID = absConversion {abs = toLANGID, rep = fromLANGID} INT end end end; polyml.5.2.1/mlsource/extra/Win/Menu.sml0000644000175000017500000004421610676746104017150 0ustar daviddavid(* Copyright (c) 2001 David C.J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure Menu: sig type HMENU and HBITMAP and HWND and HINSTANCE type RECT = { left: int, top: int, right: int, bottom: int } datatype MenuFlag = MF_BYCOMMAND | MF_BYPOSITION | MF_SEPARATOR | MF_ENABLED | MF_GRAYED | MF_DISABLED | MF_UNCHECKED | MF_CHECKED | MF_USECHECKBITMAPS | MF_STRING | MF_BITMAP | MF_OWNERDRAW | MF_POPUP | MF_MENUBARBREAK | MF_MENUBREAK | MF_UNHILITE | MF_HILITE | MF_DEFAULT | MF_SYSMENU | MF_HELP | MF_RIGHTJUSTIFY | MF_MOUSESELECT datatype MenuIdOrHandle = MenuHandle of HMENU | MenuId of int datatype MenuItemOptions = MFT_MENUBARBREAK | MFT_MENUBREAK | MFT_RADIOCHECK | MFT_RIGHTJUSTIFY | MFT_RIGHTORDER datatype MenuItemType = MFT_BITMAP of HBITMAP | MFT_OWNERDRAW of int | MFT_SEPARATOR | MFT_STRING of string datatype MenuState = MFS_CHECKED | MFS_DEFAULT | MFS_DISABLED | MFS_ENABLED | MFS_GRAYED | MFS_HILITE | MFS_UNCHECKED | MFS_UNHILITE type MenuItemInfo = { menuType: MenuItemType, menuOptions: MenuItemOptions list, state: MenuState list, wID: int, hSubMenu: HMENU option, hbmpChecked: HBITMAP option, hbmpUnchecked: HBITMAP option, itemData: int } val AppendMenu : HMENU * MenuFlag list * MenuIdOrHandle * MenuItemType -> unit val CheckMenuRadioItem : HMENU * int * int * int * MenuFlag -> unit val CreateMenu : unit -> HMENU val CreatePopupMenu : unit -> HMENU val DeleteMenu : HMENU * int * MenuFlag -> unit val DestroyMenu : HMENU -> unit val DrawMenuBar : HWND -> unit val EnableMenuItem : HMENU * int * MenuFlag -> MenuFlag list val GetMenu : HWND -> HMENU datatype GMDIFlags = GMDI_GOINTOPOPUPS | GMDI_USEDISABLED val GetMenuDefaultItem : HMENU * bool * GMDIFlags list -> int val GetMenuItemCount : HMENU -> int val GetMenuItemID : HMENU -> int val GetMenuItemInfo : HMENU * int * bool -> MenuItemInfo val GetMenuItemRect : HWND * HMENU * int -> RECT val GetMenuState : HMENU * int * MenuFlag -> MenuFlag list * int val GetMenuString : HMENU * int * MenuFlag -> string val GetSubMenu : HMENU * int -> HMENU val GetSystemMenu : HWND * bool -> HMENU val HiliteMenuItem : HWND * HMENU * int * MenuFlag list -> unit val InsertMenu : HMENU * int * MenuFlag list * MenuIdOrHandle * MenuItemType -> unit val IsMenu : HMENU -> bool val LoadMenu : HINSTANCE * Resource.RESID -> HMENU val ModifyMenu : HMENU * int * MenuFlag list * MenuIdOrHandle * MenuItemType -> unit val RemoveMenu : HMENU * int * MenuFlag -> unit val SetMenu : HWND * HMENU option -> unit val SetMenuItemInfo : HMENU * int * bool * MenuItemInfo -> unit val InsertMenuItem : HMENU * int * bool * MenuItemInfo -> unit datatype TrackPopupMenuOptions = TPM_LEFTBUTTON | TPM_RIGHTBUTTON | TPM_LEFTALIGN | TPM_CENTERALIGN | TPM_RIGHTALIGN | TPM_TOPALIGN | TPM_VCENTERALIGN | TPM_BOTTOMALIGN | (*TPM_HORIZONTAL | TPM_VERTICAL |*) TPM_NONOTIFY | TPM_RETURNCMD val TrackPopupMenu : HMENU * TrackPopupMenuOptions list * int * int * HWND -> int val SetMenuContextHelpId: HMENU * int -> unit val GetMenuContextHelpId: HMENU -> int end = struct local open CInterface open Base (* Flags used in GetItemInfo and SetItemInfo. *) val MIIM_STATE = 0x00000001 val MIIM_ID = 0x00000002 val MIIM_SUBMENU = 0x00000004 val MIIM_CHECKMARKS = 0x00000008 val MIIM_TYPE = 0x00000010 val MIIM_DATA = 0x00000020 val allInfo = 0x3f in open MenuBase type HMENU = HMENU and HBITMAP = HBITMAP and RECT = RECT and HWND = HWND and HINSTANCE = HINSTANCE val hmenuNull = hmenuNull and isHmenuNull = isHmenuNull fun checkMenu name c = if isHmenuNull c then raise OS.SysErr(name, SOME(GetLastError())) else c (* Check here means "make active", the opposite of uncheck *) val CheckMenuRadioItem = checkResult "CheckMenuRadioItem" o call5 (user "CheckMenuRadioItem") (HMENU, UINT, UINT, UINT, MENUFLAG) BOOL val CreateMenu = checkMenu "CreateMenu" o call0 (user "CreateMenu") () HMENU val CreatePopupMenu = checkMenu "CreatePopupMenu" o call0 (user "CreatePopupMenu") () HMENU val DeleteMenu = checkResult "DeleteMenu" o call3 (user "DeleteMenu") (HMENU, UINT, MENUFLAG) BOOL val DestroyMenu = checkResult "DestroyMenu" o call1 (user "DestroyMenu") (HMENU) BOOL val DrawMenuBar = checkResult "DrawMenuBar" o call1 (user "DrawMenuBar") (HWND) BOOL local val enableCall = call3(user "EnableMenuItem") (HMENU, INT, MENUFLAG) INT in fun EnableMenuItem(hMenu: HMENU, id: int, flags: MenuFlag): MenuFlag list = let val res = enableCall(hMenu, id, flags) in if res = ~1 then raise OS.SysErr("EnableMenuItem", SOME(GetLastError())) else toMenuFlagSet res end end val GetMenu = call1 (user "GetMenu") (HWND) HMENU datatype GMDIFlags = GMDI_GOINTOPOPUPS | GMDI_USEDISABLED local val tab = [ (GMDI_USEDISABLED, 0x0001), (GMDI_GOINTOPOPUPS, 0x0002) ] in val GMDIFLAGS = tableSetConversion(tab, NONE) end local val callGMDI = call3 (user "GetMenuDefaultItem") (HMENU, BOOL, GMDIFLAGS) UINT in fun GetMenuDefaultItem(hMenu: HMENU, m: bool, opts: GMDIFlags list): int = let val res = callGMDI(hMenu, m, opts) in if res = ~1 then raise OS.SysErr("GetMenuDefaultItem", SOME(GetLastError())) else res end end fun GetMenuItemCount hMenu = case call1 (user "GetMenuItemCount") (HMENU) INT (hMenu) of ~1 => raise OS.SysErr("GetMenuItemCount", SOME(GetLastError())) | n => n val GetMenuItemID = call1 (user "GetMenuItemID") (HMENU) INT local val getMenuString = call5 (user "GetMenuStringA") (HMENU,INT,POINTER,INT,MENUFLAG) (POSINT "GetMenuString") in (* Loop until we have read the whole string. *) fun GetMenuString(h,i,f): string = getStringCall(fn (buff, n) => getMenuString(h,i,buff,n,f)) end datatype MenuItemType = MFT_BITMAP of HBITMAP | MFT_SEPARATOR | MFT_STRING of string | MFT_OWNERDRAW of int val mft_STRING = 0wx00000000 val mft_BITMAP = 0wx00000004 val mft_OWNERDRAW = 0wx00000100 val mft_SEPARATOR = 0wx00000800 val mft_POPUP = 0wx00000010 val typeBits = 0wx914 datatype MenuItemOptions = MFT_MENUBARBREAK | MFT_MENUBREAK | MFT_RADIOCHECK | MFT_RIGHTJUSTIFY | MFT_RIGHTORDER local val tab = [ (MFT_MENUBARBREAK, 0x00000020), (MFT_MENUBREAK, 0x00000040), (MFT_RADIOCHECK, 0x00000200), (MFT_RIGHTORDER, 0x00002000), (MFT_RIGHTJUSTIFY, 0x00004000)] in val (fromMFT, toMFT) = tableSetLookup(tab, NONE) end datatype MenuState = MFS_GRAYED | MFS_DISABLED | MFS_CHECKED | MFS_DEFAULT | MFS_HILITE | MFS_ENABLED | MFS_UNCHECKED | MFS_UNHILITE local val tab = [ (MFS_DISABLED, 0x00000002), (MFS_ENABLED, 0x00000000), (MFS_GRAYED, 0x00000003), (MFS_CHECKED, 0x00000008), (MFS_UNCHECKED, 0x00000000), (MFS_HILITE, 0x00000080), (MFS_UNHILITE, 0x00000000), (MFS_DEFAULT, 0x00001000)] in val MENUSTATE = tableSetConversion(tab, NONE) end type MenuItemInfo = { (*mask: int,*) (* Datatype? *) menuType: MenuItemType, menuOptions: MenuItemOptions list, state: MenuState list, wID: int, hSubMenu: HMENU option, hbmpChecked: HBITMAP option, hbmpUnchecked: HBITMAP option, itemData: int } (* Although we can selectively return information it's probably simpler to return the lot. It's only in SetMenuItemInfo where we might want to update only some of the information. To find out if we've got all the string we will have to loop until the value of cch we get back is less than the buffer we passed. *) local val MENUITEMINFO = STRUCT11(INT,INT,WORD,MENUSTATE,INT,HMENUOPT,HGDIOBJOPT,HGDIOBJOPT,INT,POINTER,INT) val (fromCmenuiteminfo, toCmenuiteminfo, menuItemStruct) = breakConversion MENUITEMINFO val getMenuItemInfo = call4 (user "GetMenuItemInfoA") (HMENU, UINT, BOOL, POINTER) (SUCCESSSTATE "GetMenuItemInfo") val setMenuItemInfo = call4 (user "SetMenuItemInfoA") (HMENU, UINT, BOOL, POINTER) (SUCCESSSTATE "SetMenuItemInfo") val insertMenuItem = call4 (user "InsertMenuItemA") (HMENU, UINT, BOOL, POINTER) (SUCCESSSTATE "InsertMenuItem") in fun GetMenuItemInfo(hMenu: HMENU, uItem: int, fByPosition): MenuItemInfo = let (* We need to set the size and the bits for the information we want. In order to be able to retrieve the "Type" information we have to be prepared to accept a string. To do that the dwTypeData must point to a small vector. To simplify matters we don't try to get the whole string because we can't guess the size. Instead we use GetMenuString. Everything else can be zero. *) val v = alloc 4 Cchar val r = toCmenuiteminfo(sizeof menuItemStruct, allInfo, 0w0, [], 0, NONE, NONE, NONE, 0, address v, 4); val res = getMenuItemInfo(hMenu, uItem, fByPosition, address r) val (_, _, mtype, state, wID, hSubMenu, hbmpChecked, hbmpUnchecked, itemData, typeData, cch) = fromCmenuiteminfo r val menuType = if LargeWord.andb(mtype, mft_BITMAP) <> 0w0 then MFT_BITMAP(handleOfInt(LOWORD(fromCuint typeData))) else if LargeWord.andb(mtype, mft_OWNERDRAW) <> 0w0 then MFT_OWNERDRAW(fromCint typeData) else if LargeWord.andb(mtype, mft_SEPARATOR) <> 0w0 then MFT_SEPARATOR else (* String *) MFT_STRING(GetMenuString(hMenu, uItem, if fByPosition then MF_BYPOSITION else MF_BYCOMMAND)) (* The options are the other bits in the type field. *) val menuOptions = toMFT(LargeWord.toInt(LargeWord.andb(LargeWord.notb typeBits, mtype))) in { menuType = menuType, menuOptions = menuOptions, wID = wID, hSubMenu = hSubMenu, hbmpChecked = hbmpChecked, hbmpUnchecked = hbmpUnchecked, itemData = itemData, state = state } end (* It's simplest to set everything. *) fun SetMenuItemInfo(hMenu: HMENU, uItem: int, fByPosition, ({menuType, menuOptions, wID, hSubMenu, hbmpChecked, hbmpUnchecked, itemData, state }: MenuItemInfo)) = let val (bits, typeData, cch) = case menuType of MFT_BITMAP b => (mft_BITMAP, toCint(intOfHandle b), 0) | MFT_OWNERDRAW i => (mft_OWNERDRAW, toCint i, 0) | MFT_SEPARATOR => (mft_SEPARATOR, toCint 0, 0) | MFT_STRING s => (mft_STRING, toCstring s, size s + 1) val mtype = LargeWord.orb(LargeWord.fromInt (fromMFT menuOptions), bits) val r = toCmenuiteminfo(sizeof menuItemStruct, allInfo, mtype, state, wID, hSubMenu, hbmpChecked, hbmpUnchecked, itemData, typeData, cch); in setMenuItemInfo(hMenu, uItem, fByPosition, address r) end fun InsertMenuItem(hMenu: HMENU, uItem: int, fByPosition, ({menuType, menuOptions, wID, hSubMenu, hbmpChecked, hbmpUnchecked, itemData, state }: MenuItemInfo)) = let val (bits, typeData, cch) = case menuType of MFT_BITMAP b => (mft_BITMAP, toCint(intOfHandle b), 0) | MFT_OWNERDRAW i => (mft_OWNERDRAW, toCint i, 0) | MFT_SEPARATOR => (mft_SEPARATOR, toCint 0, 0) | MFT_STRING s => (mft_STRING, toCstring s, size s + 1) val mtype = LargeWord.orb(LargeWord.fromInt (fromMFT menuOptions), bits) val r = toCmenuiteminfo(sizeof menuItemStruct, allInfo, mtype, state, wID, hSubMenu, hbmpChecked, hbmpUnchecked, itemData, typeData, cch); in insertMenuItem(hMenu, uItem, fByPosition, address r) end end local val getMenuState = call3 (user "GetMenuState") (HMENU,INT,MENUFLAG) UINT in (* If the menu opens a submenu the high order word is the number of items. The low order word is the state. *) fun GetMenuState (hm, i, mf): MenuFlag list * int = let val res = getMenuState(hm, i, mf) in if res < 0 then raise OS.SysErr("GetMenuState", SOME(GetLastError())) else (toMenuFlagSet(LOWORD res), HIWORD res) end end val GetSubMenu = call2 (user "GetSubMenu") (HMENU,INT) HMENU val GetSystemMenu = call2 (user "GetSystemMenu") (HWND,BOOL) HMENU val HiliteMenuItem = call4 (user "HiliteMenuItem") (HWND,HMENU,INT,MENUFLAGSET) (SUCCESSSTATE "HiliteMenuItem") val IsMenu = call1 (user "IsMenu") (HMENU) BOOL (* InsertMenu can insert a string item or a submenu. *) datatype MenuIdOrHandle = MenuId of int | MenuHandle of HMENU local fun getDisplay (MFT_BITMAP hb) = (mft_BITMAP, toCint(hgdiAsInt hb)) | getDisplay MFT_SEPARATOR = (mft_SEPARATOR, toCint 0) | getDisplay (MFT_STRING (s: string)) = (mft_STRING, toCstring s) | getDisplay (MFT_OWNERDRAW (i: int)) = (mft_OWNERDRAW, toCint i) fun InsertOrModifyMenu (functionName: string) (hMenu: HMENU, pos: int, flags: MenuFlag list, new: MenuIdOrHandle, disp: MenuItemType) = let (* Flags - mask out the ones we set by other means. *) val f1 = LargeWord.andb(LargeWord.fromInt(fromMenuFlagSet flags), LargeWord.notb typeBits) (* The C call incorporates various options within the flags. It's better, in ML, to pull these out and treat them as part of the datatype. *) (* The "new" argument indicates whether the item is a sub-menu or should send a message containing the id when the menu item is selected. *) val (f2, id) = case new of MenuId i => (0w0, i) | MenuHandle m => (mft_POPUP, intOfHandle m) (* The "disp" argument describes how the item is displayed. *) val (f3, str) = getDisplay disp val flags = List.foldl LargeWord.orb 0w0 [f1,f2,f3] in call5 (user functionName) (HMENU,INT,WORD,INT,POINTER) (SUCCESSSTATE functionName) (hMenu, pos, flags, id, str) end in val InsertMenu = InsertOrModifyMenu "InsertMenuA" and ModifyMenu = InsertOrModifyMenu "ModifyMenuA" fun AppendMenu(hMenu: HMENU, flags: MenuFlag list, new: MenuIdOrHandle, disp: MenuItemType) = let val f1 = LargeWord.andb(LargeWord.fromInt(fromMenuFlagSet flags), LargeWord.notb typeBits) val (f2, id) = case new of MenuId i => (0wx00000000, i) | MenuHandle m => (mft_POPUP, intOfHandle m) val (f3, str) = getDisplay disp val flags = List.foldl LargeWord.orb 0w0 [f1,f2,f3] in call4 (user "AppendMenuA") (HMENU,WORD,INT,POINTER) (SUCCESSSTATE "AppendMenuA") (hMenu, flags, id, str) end end val RemoveMenu = call3(user "RemoveMenu") (HMENU, INT, MENUFLAG) (SUCCESSSTATE "RemoveMenu") datatype TrackPopupMenuOptions = TPM_LEFTBUTTON | TPM_RIGHTBUTTON | TPM_LEFTALIGN | TPM_CENTERALIGN | TPM_RIGHTALIGN | TPM_TOPALIGN | TPM_VCENTERALIGN | TPM_BOTTOMALIGN | (*TPM_HORIZONTAL | TPM_VERTICAL |*) TPM_NONOTIFY | TPM_RETURNCMD local val tab = [ (TPM_LEFTBUTTON, 0x0000), (TPM_RIGHTBUTTON, 0x0002), (TPM_LEFTALIGN, 0x0000), (TPM_CENTERALIGN, 0x0004), (TPM_RIGHTALIGN, 0x0008), (TPM_TOPALIGN, 0x0000), (TPM_VCENTERALIGN, 0x0010), (TPM_BOTTOMALIGN, 0x0020), (*(TPM_HORIZONTAL, 0x0000), (TPM_VERTICAL, 0x0040),*) (TPM_NONOTIFY, 0x0080), (TPM_RETURNCMD, 0x0100) ] in val TRACKPOPUPOPTIONS = tableSetConversion(tab, NONE) end local val trackPopupMenu = call7 (user "TrackPopupMenu") (HMENU, TRACKPOPUPOPTIONS, INT, INT, INT, HWND, POINTER) INT in fun TrackPopupMenu(menu, flags, x, y, owner) = trackPopupMenu(menu, flags, x, y, 0, owner, toCint 0) end local val (fromR,toR,ctypeR) = breakConversion RECT in fun GetMenuItemRect(hWnd, hMenu, item): RECT = let val (fromR,toR,ctypeR) = breakConversion RECT val r = alloc 1 ctypeR val res = call4 (user "GetMenuItemRect") (HWND, HMENU, UINT, POINTER) (SUCCESSSTATE "GetMenuItemRect") (hWnd, hMenu, item, address r) in fromR r end end val LoadMenu = call2 (user "LoadMenuA") (HINSTANCE, RESID) HMENU val SetMenu = call2 (user "SetMenu") (HWND, HMENUOPT) (SUCCESSSTATE "SetMenu") val SetMenuContextHelpId = call2 (user "SetMenuContextHelpId") (HMENU, INT) (SUCCESSSTATE "SetWindowContextHelpId") val GetMenuContextHelpId = call1 (user "GetMenuContextHelpId") (HMENU) INT (* *) (*fun LoadMenuIndirect (mlist: (MenuFlag list * int * string) list list) = let val count = List.length mlist val menu = *) (* TODO: GetMenuCheckMarkDimensions - use GetSystemMetrics LoadMenuIndirect MenuItemFromPoint SetMenuDefaultItem SetMenuItemBitmaps TrackPopupMenuEx Obsolete Functions CheckMenuItem GetMenuCheckMarkDimensions ModifyMenu *) end end; (* struct datatype MenuItemData = MID of {option: Style.flag, id:MenuItem, display:string} (* I don't think this will work. The strings have to be Unicode. *) fun LoadMenuIndirect (mlist) = let val count = List.length mlist val menu = alloc count (Cstruct [Cshort,Cshort,Cpointer Cchar]) fun pl2a v n [] = () | pl2a v n (MID {option=flag, id= MenuID id, display=s} :: rest) = let val item = make_struct [(Cshort,toCshort (repE MenuFlagE flag)), (Cshort,toCshort id ), (Cpointer Cchar,toCstring s) ] in ( assign (Cstruct [Cshort,Cshort,Cpointer Cchar]) (offset n (Cstruct [Cshort,Cshort,Cpointer Cchar]) v) item ; pl2a v (n+1) rest ) end val u = pl2a menu 0 mlist in call1 (getuser "LoadMenuIndirectA") (POINTER) (HMENU) (address menu) end end; *) polyml.5.2.1/mlsource/extra/Win/MenuBase.sml0000644000175000017500000000503410313043366017722 0ustar daviddavid(* Copyright (c) 2001 David C.J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure MenuBase = struct local open CInterface Base in (* TODO: This duplicates some of the other datatypes. *) datatype MenuFlag = (*MF_INSERT | MF_CHANGE | MF_APPEND | MF_DELETE | MF_REMOVE | *) MF_BYCOMMAND | MF_BYPOSITION | MF_SEPARATOR | MF_ENABLED | MF_GRAYED | MF_DISABLED | MF_UNCHECKED | MF_CHECKED | MF_USECHECKBITMAPS | MF_STRING | MF_BITMAP | MF_OWNERDRAW | MF_POPUP | MF_MENUBARBREAK | MF_MENUBREAK | MF_UNHILITE | MF_HILITE | MF_DEFAULT | MF_SYSMENU | MF_HELP | MF_RIGHTJUSTIFY | MF_MOUSESELECT local val tab = [ (*(MF_INSERT, 0x00000000), (MF_CHANGE, 0x00000080), (MF_APPEND, 0x00000100), (MF_DELETE, 0x00000200), (MF_REMOVE, 0x00001000),*) (MF_BYCOMMAND, 0x00000000), (MF_BYPOSITION, 0x00000400), (MF_SEPARATOR, 0x00000800), (MF_ENABLED, 0x00000000), (MF_GRAYED, 0x00000001), (MF_DISABLED, 0x00000002), (MF_UNCHECKED, 0x00000000), (MF_CHECKED, 0x00000008), (MF_USECHECKBITMAPS, 0x00000200), (MF_STRING, 0x00000000), (MF_BITMAP, 0x00000004), (MF_OWNERDRAW, 0x00000100), (MF_POPUP, 0x00000010), (MF_MENUBARBREAK, 0x00000020), (MF_MENUBREAK, 0x00000040), (MF_UNHILITE, 0x00000000), (MF_HILITE, 0x00000080), (MF_DEFAULT, 0x00001000), (MF_SYSMENU, 0x00002000), (MF_HELP, 0x00004000), (MF_RIGHTJUSTIFY, 0x00004000), (MF_MOUSESELECT, 0x00008000) ] in val (fromMenuFlagSet, toMenuFlagSet) = tableSetLookup(tab, NONE) val MENUFLAGSET = absConversion {abs=toMenuFlagSet, rep=fromMenuFlagSet} INT (* Sometimes we just want a single flag - either MF_BYCOMMAND or MF_BYPOSITION or, for WM_MENUCHAR, MF_POPUP or MF_SYSMENU. *) val (fromMenuFlag, toMenuFlag) = tableLookup(tab, NONE) val MENUFLAG = tableConversion(tab, NONE) end end end; polyml.5.2.1/mlsource/extra/Win/Message.sml0000644000175000017500000042604610676747164017644 0ustar daviddavid(* Copyright (c) 2001-7 David C.J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* Messaging functions. This is based on Panos' version but substantially modified. *) structure Message : sig datatype ControlType = ODT_BUTTON | ODT_COMBOBOX | ODT_LISTBOX | ODT_MENU | ODT_STATIC datatype ImageType = IMAGE_BITMAP | IMAGE_CURSOR | IMAGE_ENHMETAFILE | IMAGE_ICON type HGDIOBJ and HWND and HMENU and HICON and HINSTANCE and HDC and HFONT and HRGN and HDROP type RECT = { left: int, top: int, right: int, bottom: int } type POINT = { x: int, y: int } datatype LRESULT = LRESHANDLE of HGDIOBJ | LRESINT of int type KeyData type windowFlags and findReplaceFlags datatype ScrollDirection = SB_BOTTOM | SB_ENDSCROLL | SB_LEFT | SB_LINEDOWN | SB_LINELEFT | SB_LINERIGHT | SB_LINEUP | SB_PAGEDOWN | SB_PAGELEFT | SB_PAGERIGHT | SB_PAGEUP | SB_RIGHT | SB_THUMBPOSITION | SB_THUMBTRACK | SB_TOP type WindowPositionStyle datatype MouseKeyFlags = MK_LBUTTON | MK_RBUTTON | MK_SHIFT | MK_CONTROL | MK_MBUTTON type ClipboardFormat and ClassType datatype MarginSettings = UseFontInfo | Margins of {left: int option, right: int option } datatype MDITileFlags = MDITILE_VERTICAL | MDITILE_HORIZONTAL | MDITILE_SKIPDISABLED datatype SystemCommand = SC_ARRANGE | SC_CLOSE | SC_CONTEXTHELP | SC_DEFAULT | SC_HOTKEY | SC_HSCROLL | SC_KEYMENU | SC_MAXIMIZE | SC_MINIMIZE | SC_MONITORPOWER | SC_MOUSEMENU | SC_MOVE | SC_NEXTWINDOW | SC_PREVWINDOW | SC_RESTORE | SC_SCREENSAVE | SC_SEPARATOR | SC_SIZE | SC_TASKLIST | SC_VSCROLL datatype WMActivateOptions = WA_ACTIVE | WA_CLICKACTIVE | WA_INACTIVE datatype WMPrintOption = PRF_CHECKVISIBLE | PRF_CHILDREN | PRF_CLIENT | PRF_ERASEBKGND | PRF_NONCLIENT | PRF_OWNED datatype WMSizeOptions = SIZE_MAXHIDE | SIZE_MAXIMIZED | SIZE_MAXSHOW | SIZE_MINIMIZED | SIZE_RESTORED datatype HelpHandle = MenuHandle of HMENU | WindowHandle of HWND (* Passed in the lpParam argument of a WM_NOTIFY message. TODO: Many of these have additional information. *) datatype Notification = NM_OUTOFMEMORY | NM_CLICK | NM_DBLCLK | NM_RETURN | NM_RCLICK | NM_RDBLCLK | NM_SETFOCUS | NM_KILLFOCUS | NM_CUSTOMDRAW | NM_HOVER | NM_NCHITTEST | NM_KEYDOWN | NM_RELEASEDCAPTURE | NM_SETCURSOR | NM_CHAR | NM_TOOLTIPSCREATED | NM_LDOWN | NM_RDOWN | NM_THEMECHANGED | LVN_ITEMCHANGING | LVN_ITEMCHANGED | LVN_INSERTITEM | LVN_DELETEITEM | LVN_DELETEALLITEMS | LVN_BEGINLABELEDIT | LVN_ENDLABELEDIT | LVN_COLUMNCLICK | LVN_BEGINDRAG | LVN_BEGINRDRAG | LVN_GETDISPINFO | LVN_SETDISPINFO | LVN_KEYDOWN | LVN_GETINFOTIP | HDN_ITEMCHANGING | HDN_ITEMCHANGED | HDN_ITEMCLICK | HDN_ITEMDBLCLICK | HDN_DIVIDERDBLCLICK | HDN_BEGINTRACK | HDN_ENDTRACK | HDN_TRACK | HDN_ENDDRAG | HDN_BEGINDRAG | HDN_GETDISPINFO | TVN_SELCHANGING | TVN_SELCHANGED | TVN_GETDISPINFO | TVN_SETDISPINFO | TVN_ITEMEXPANDING | TVN_ITEMEXPANDED | TVN_BEGINDRAG | TVN_BEGINRDRAG | TVN_DELETEITEM | TVN_BEGINLABELEDIT | TVN_ENDLABELEDIT | TVN_KEYDOWN | TVN_GETINFOTIP | TVN_SINGLEEXPAND | TTN_GETDISPINFO of string ref | TTN_SHOW | TTN_POP | TCN_KEYDOWN | TCN_SELCHANGE | TCN_SELCHANGING | TBN_GETBUTTONINFO | TBN_BEGINDRAG | TBN_ENDDRAG | TBN_BEGINADJUST | TBN_ENDADJUST | TBN_RESET | TBN_QUERYINSERT | TBN_QUERYDELETE | TBN_TOOLBARCHANGE | TBN_CUSTHELP | TBN_DROPDOWN | TBN_HOTITEMCHANGE | TBN_DRAGOUT | TBN_DELETINGBUTTON | TBN_GETDISPINFO | TBN_GETINFOTIP | UDN_DELTAPOS | RBN_GETOBJECT | RBN_LAYOUTCHANGED | RBN_AUTOSIZE | RBN_BEGINDRAG | RBN_ENDDRAG | RBN_DELETINGBAND | RBN_DELETEDBAND | RBN_CHILDSIZE | CBEN_GETDISPINFO | CBEN_DRAGBEGIN | IPN_FIELDCHANGED | SBN_SIMPLEMODECHANGE | PGN_SCROLL | PGN_CALCSIZE | NM_OTHER of int (* Catch-all for other cases. *) datatype Message = WM_ACTIVATE of {active : WMActivateOptions, minimize : bool } (* Indicates a change in activation state *) | WM_ACTIVATEAPP of {active : bool, threadid: int } (* Notifies applications when a new task activates *) | WM_ASKCBFORMATNAME of { length: int, formatName : string ref} (* Retrieves the name of the clipboard format *) | WM_CANCELJOURNAL (* Notifies application when user cancels journaling *) | WM_CANCELMODE (* Notifies a Window to cancel internal modes *) | WM_CHANGECBCHAIN of { removed : HWND, next : HWND } (* Notifies clipboard viewer of removal from chain *) | WM_CHAR of {charCode : char, data : KeyData } (* Indicates the user pressed a character key *) | WM_CHARTOITEM of {key : int, caretpos : int, listbox : HWND } (* Provides list-box keystrokes to owner Window *) | WM_CHILDACTIVATE (* Notifies a child Window of activation *) (* This is WM_USER+1. It's only used in a GetFont dialogue box. | WM_CHOOSEFONT_GETLOGFONT of LOGFONT ref *) (* Retrieves LOGFONT structure for Font dialog box *) | WM_CLEAR (* Clears an edit control *) | WM_CLOSE (* System Close menu command was chosen *) | WM_COMMAND of {notifyCode : int, wId : int, control : HWND } (* Specifies a command message *) | WM_COMPACTING of { compactratio : int } (* Indicates a low memory condition *) | WM_COMPAREITEM of {controlid : int, ctlType : ControlType, ctlID : int, hItem : HWND, itemID1 : int, itemData1 : int, itemID2 : int, itemData2 : int } (* Determines position of combo- or list-box item *) | WM_COPY (* Copies a selection to the clipboard *) | WM_COPYDATA of { sender : HWND, data : int, pdata: Word8Vector.vector } (* Passes data to another application *) | WM_CREATE of { instance: HINSTANCE, creation: int, menu : HMENU, parent : HWND, cy : int, cx : int, y : int, x : int, style : windowFlags, name : string, (* The class may be a string or an atom. *) class : ClassType, extendedstyle : int } (* Indicates a Window is being created *) | WM_CTLCOLORBTN of { displaycontext : HDC, button : HWND } (* Button is about to be drawn *) | WM_CTLCOLORDLG of { displaycontext : HDC, dialogbox : HWND } (* Dialog box is about to be drawn *) | WM_CTLCOLOREDIT of { displaycontext : HDC, editcontrol : HWND } (* Control is about to be drawn *) | WM_CTLCOLORLISTBOX of { displaycontext : HDC, listbox : HWND } (* List box is about to be drawn *) | WM_CTLCOLORMSGBOX of { displaycontext : HDC, messagebox : HWND } (* Message box is about to be drawn *) | WM_CTLCOLORSCROLLBAR of { displaycontext : HDC, scrollbar : HWND } (* Indicates scroll bar is about to be drawn *) | WM_CTLCOLORSTATIC of { displaycontext : HDC, staticcontrol : HWND } (* Control is about to be drawn *) (* Note the return value is an HBRUSH *) | WM_CUT (* Deletes a selection and copies it to the clipboard *) (* | WM_DDE_ACK (* Acknowledges a DDE message *) | WM_DDE_ADVISE (* Requests a DDE data-change update *) | WM_DDE_DATA (* Sends data to a DDE client *) | WM_DDE_EXECUTE (* Sends a string to a DDE server *) | WM_DDE_INITIATE (* Initiates a DDE conversation *) | WM_DDE_POKE (* Send unsolicited data to a server *) | WM_DDE_REQUEST (* Requests data from a DDE server *) | WM_DDE_TERMINATE (* Ends a DDE conversation *) | WM_DDE_UNADVISE (* Stops a DDE data-update request *) *) | WM_DEADCHAR of { charCode : char, data : KeyData } (* Indicates the user pressed a dead key *) | WM_DELETEITEM of { controlid : int, ctlType : ControlType, ctlID : int, itemID : int, item : HWND, itemData : int } (* Indicates owner-draw item or control was altered *) | WM_DESTROY (* Indicates Window is about to be destroyed *) | WM_DESTROYCLIPBOARD (* Notifies owner that the clipboard was emptied *) | WM_DEVMODECHANGE of { devicename : string } (* Indicates the device-mode settings have changed *) | WM_DRAWCLIPBOARD (* Indicates the clipboard's contents have changed *) | WM_DRAWITEM of { controlid : int, ctlType : ControlType, ctlID : int, itemID : int, itemAction : int, itemState : int, hItem : HWND , hDC : HDC, rcItem : RECT, itemData : int } (* Indicates owner-draw control/menu needs redrawing *) | WM_DROPFILES of { hDrop : HDROP } (* Indicates that a file has been dropped *) | WM_ENABLE of { enabled : bool } (* Indicates a Window's enable state is changing *) | WM_ENDSESSION of { endsession : bool } (* Indicates whether the Windows session is ending *) | WM_ENTERIDLE of { flag : int, window : HWND } (* Indicates a modal dialog box or menu is idle *) | WM_ENTERMENULOOP of { istrack: bool } (* Indicates entry into menu modal loop *) | WM_EXITMENULOOP of { istrack: bool } (* Indicates exit from menu modal loop *) | WM_ERASEBKGND of { devicecontext : HDC } (* Indicates a Window's background need erasing *) | WM_FONTCHANGE (* Indicates a change in the font-resource pool *) | WM_GETDLGCODE (* Allows dialog procedure to process control input *) | WM_GETFONT (* Retrieves the font that a control is using *) | WM_GETHOTKEY (* Gets the virtual-key code of a Window's hot key *) | WM_GETMINMAXINFO of { maxSize: POINT ref, maxPosition: POINT ref, minTrackSize: POINT ref, maxTrackSize : POINT ref } (* Gets minimum and maximum sizing information *) | WM_GETTEXT of { length: int, text : string ref } (* Gets the text that corresponds to a Window *) | WM_GETTEXTLENGTH (* Gets length of text associated with a Window *) | WM_HOTKEY of { id : int } (* Hot key has been detected *) | WM_HSCROLL of { value : ScrollDirection, position : int, scrollbar : HWND } (* Indicates a click in a horizontal scroll bar *) | WM_HSCROLLCLIPBOARD of { viewer : HWND, code : int, position : int } (* Prompts owner to scroll clipboard contents *) | WM_ICONERASEBKGND of { devicecontext : HDC } (* Notifies minimized Window to fill icon background *) | WM_INITDIALOG of { dialog : HWND, initdata : int } (* Initializes a dialog box *) | WM_INITMENU of { menu : HMENU } (* Indicates a menu is about to become active *) | WM_INITMENUPOPUP of { menupopup : HMENU, itemposition : int, isSystemMenu : bool } (* Indicates a pop-up menu is being created *) | WM_KEYDOWN of { virtualKey : int, data : KeyData } (* Indicates a nonsystem key was pressed *) | WM_KEYUP of { virtualKey : int, data : KeyData } (* Indicates a nonsystem key was released *) | WM_KILLFOCUS of { receivefocus : HWND } (* Indicates the Window is losing keyboard focus *) | WM_LBUTTONDBLCLK of { keyflags : MouseKeyFlags list, x : int, y : int } (* Indicates double-click of left button *) | WM_LBUTTONDOWN of { keyflags : MouseKeyFlags list, x : int, y : int } (* Indicates when left mouse button is pressed *) | WM_LBUTTONUP of { keyflags : MouseKeyFlags list, x : int, y : int } (* Indicates when left mouse button is released *) | WM_MBUTTONDBLCLK of { keyflags : MouseKeyFlags list, x : int, y : int } (* Indicates double-click of middle mouse button *) | WM_MBUTTONDOWN of { keyflags : MouseKeyFlags list, x : int, y : int } (* Indicates when middle mouse button is pressed *) | WM_MBUTTONUP of { keyflags : MouseKeyFlags list, x : int, y : int } (* Indicates when middle mouse button is released *) | WM_MDICASCADE of { skipDisabled : bool } (* Arranges MDI child Windows in cascade format *) | WM_MDICREATE of { class : ClassType, title : string, instance: HINSTANCE, x : int, y : int, cx : int, cy : int, style : int, cdata : int } (* Prompts MDI client to create a child Window *) | WM_MDIDESTROY of { child : HWND } (* Closes an MDI child Window *) | WM_MDIGETACTIVE (* Retrieves data about the active MDI child Window *) | WM_MDIICONARRANGE (* Arranges minimized MDI child Windows *) | WM_MDIMAXIMIZE of { child: HWND } (* Maximizes an MDI child Window *) | WM_MDINEXT of { child : HWND, flagnext : bool } (* Activates the next MDI child Window *) | WM_MDIREFRESHMENU (* Refreshes an MDI frame Window's menu *) | WM_MDIRESTORE of { child : HWND } (* Prompts MDI client to restore a child Window *) | WM_MDISETMENU of { frameMenu : HMENU, windowMenu : HMENU } (* Replaces an MDI frame Window's menu *) | WM_MDITILE of { tilingflag : MDITileFlags list } (* Arranges MDI child Windows in tiled format *) | WM_MEASUREITEM of { controlid : int, ctlType : ControlType, ctlID : int, itemID : int, itemWidth : int, itemHeight : int, itemData : int } (* Requests dimensions of owner-draw control or item *) | WM_MENUCHAR of { ch : char, menuflag : MenuBase.MenuFlag, menu : HMENU } (* Indicates an unknown menu mnemonic was pressed *) | WM_MENUSELECT of { menuitem : int, menuflags : MenuBase.MenuFlag list, menu : HMENU } (* Indicates that the user selected a menu item *) | WM_MOUSEACTIVATE of { parent : HWND, hitTest : int, message : int } (* Indicates a mouse click in an inactive Window *) | WM_MOUSEMOVE of { keyflags : MouseKeyFlags list, x : int, y : int } (* Indicates mouse-cursor movement *) | WM_MOVE of { x : int, y : int } (* Indicates a Window's position has changed *) | WM_NCACTIVATE of { active : bool } (* Changes the active state of nonclient area *) | WM_NCCALCSIZE of { validarea : bool, newrect : RECT ref, oldrect : RECT, oldclientarea : RECT, hwnd : HWND, insertAfter : HWND, x : int, y : int, cx : int, cy : int, style : WindowPositionStyle list } (* Calculates the size of a Window's client area *) | WM_NCCREATE of { instance: HINSTANCE, creation: int, menu : HMENU, parent : HWND, cy : int, cx : int, y : int, x : int, style : windowFlags, name : string, class : ClassType, extendedstyle : int } (* Indicates a Window's nonclient area being created *) | WM_NCDESTROY (* Indicates Window's nonclient area being destroyed *) | WM_NCHITTEST of { x : int, y : int } (* Indicates mouse-cursor movement *) | WM_NCLBUTTONDBLCLK of { hitTest : int, x : int, y : int } (* Indicates nonclient left button double-click *) | WM_NCLBUTTONDOWN of { hitTest : int, x : int, y : int } (* Indicates left button pressed in nonclient area *) | WM_NCLBUTTONUP of { hitTest : int, x : int, y : int } (* Indicates left button released in nonclient area *) | WM_NCMBUTTONDBLCLK of { hitTest : int, x : int, y : int } (* Indicates nonclient middle button double-click *) | WM_NCMBUTTONDOWN of { hitTest : int, x : int, y : int } (* Indicates middle button pressed in nonclient area *) | WM_NCMBUTTONUP of { hitTest : int, x : int, y : int } (* Indicates middle button released in nonclient area *) | WM_NCMOUSEMOVE of { hitTest : int, x : int, y : int } (* Indicates mouse-cursor movement in nonclient area *) | WM_NCPAINT of { region : HRGN } (* Indicates a Window's frame needs painting *) | WM_NCRBUTTONDBLCLK of { hitTest : int, x : int, y : int } (* Indicates nonclient right button double-click *) | WM_NCRBUTTONDOWN of { hitTest : int, x : int, y : int } (* Indicates right button pressed in nonclient area *) | WM_NCRBUTTONUP of { hitTest : int, x : int, y : int } (* Indicates right button released in nonclient area *) | WM_NEXTDLGCTL of { control : int, handleflag : bool } (* Sets focus to different dialog box control *) | WM_PAINT (* Indicates a Window's client area need painting *) | WM_PAINTCLIPBOARD of { clipboard : HWND } (* Prompts owner to display clipboard contents *) | WM_PAINTICON (* Icon is about to be painted *) | WM_PALETTECHANGED of { palChg : HWND } (* Indicates the focus-Window realized its palette *) | WM_PALETTEISCHANGING of { realize : HWND } (* Informs Windows that palette is changing *) | WM_PARENTNOTIFY of { eventflag : int, idchild : int, value : int } (* Notifies parent of child-Window activity *) | WM_PASTE (* Inserts clipboard data into an edit control *) | WM_POWER of { powerevent : int } (* Indicates the system is entering suspended mode *) | WM_QUERYDRAGICON (* Requests a cursor handle for a minimized Window *) | WM_QUERYENDSESSION of { source : int } (* Requests that the Windows session be ended *) | WM_QUERYNEWPALETTE (* Allows a Window to realize its logical palette *) | WM_QUERYOPEN (* Requests that a minimized Window be restored *) | WM_QUEUESYNC (* Delimits CBT messages *) | WM_QUIT of { exitcode : int } (* Requests that an application be terminated *) | WM_RBUTTONDBLCLK of { keyflags : MouseKeyFlags list, x: int, y: int } (* Indicates double-click of right mouse button *) | WM_RBUTTONDOWN of { keyflags : MouseKeyFlags list, x: int, y: int } (* Indicates when right mouse button is pressed *) | WM_RBUTTONUP of { keyflags : MouseKeyFlags list, x: int, y: int } (* Indicates when right mouse button is released *) | WM_RENDERALLFORMATS (* Notifies owner to render all clipboard formats *) | WM_RENDERFORMAT of { format : ClipboardFormat } (* Notifies owner to render clipboard data *) | WM_SETCURSOR of { cursorwindow : HWND, hitTest : int, mousemessage : int } (* Prompts a Window to set the cursor shape *) | WM_SETFOCUS of { losing : HWND } | WM_SETFONT of {font : HFONT, redrawflag : bool } | WM_SETHOTKEY of { virtualKey : int } | WM_SETREDRAW of { redrawflag : int } | WM_SETTEXT of { text : string } | WM_SHOWWINDOW of { showflag : bool, statusflag : int } | WM_SIZE of { flag : WMSizeOptions, width : int, height : int } | WM_SIZECLIPBOARD of { viewer : HWND} | WM_SPOOLERSTATUS of { jobstatus : int, jobsleft : int } | WM_SYSCHAR of { charCode : char, data : KeyData } | WM_SYSCOLORCHANGE | WM_SYSCOMMAND of { commandvalue : SystemCommand, sysBits: int, p: POINT } | WM_SYSDEADCHAR of { charCode : char, data : KeyData } | WM_SYSKEYDOWN of { virtualKey : int, data : KeyData } | WM_SYSKEYUP of { virtualKey : int, data : KeyData } | WM_TIMECHANGE (* Indicates the system time has been set *) | WM_TIMER of { timerid : int } | WM_UNDO | WM_USER of { uMsg: int, wParam: int, lParam: int } | WM_APP of { uMsg: int, wParam: int, lParam: int } | WM_REGISTERED of { uMsg: int, wParam: int, lParam: int } | WM_VKEYTOITEM of { virtualKey : int, caretpos : int, listbox : HWND } | WM_VSCROLL of { value : ScrollDirection, position : int, scrollbar : HWND } | WM_VSCROLLCLIPBOARD of { viewer : HWND, code : int, position : int } | WM_WINDOWPOSCHANGED of { hwnd: HWND, front : HWND, x : int, y : int, width : int, height : int, flags : WindowPositionStyle list } | WM_WINDOWPOSCHANGING of { hwnd: HWND, front: HWND ref, x : int ref, y : int ref, width : int ref, height : int ref, flags : WindowPositionStyle list ref } | WM_SETTINGCHANGE of { section_name : string } | WM_NOTIFY of {from: HWND, idCtrl: int, idFrom : int, notification: Notification } | WM_CAPTURECHANGED of { newCapture: HWND } | WM_ENTERSIZEMOVE | WM_EXITSIZEMOVE | WM_PRINT of {hdc: HDC, flags: WMPrintOption list } | WM_PRINTCLIENT of {hdc: HDC, flags: WMPrintOption list } | WM_HELP of { ctrlId: int, itemHandle: HelpHandle, contextId: int, mousePos: POINT } | WM_GETICON of { big: bool } | WM_SETICON of { big: bool, icon: HICON } | WM_CONTEXTMENU of { hwnd: HWND, xPos: int, yPos: int } | WM_DISPLAYCHANGE of { bitsPerPixel: int, xScreen: int, yScreen: int } | EM_CANUNDO | EM_CHARFROMPOS of { point: POINT } | EM_EMPTYUNDOBUFFER | EM_FMTLINES of {addEOL: bool} | EM_GETFIRSTVISIBLELINE | EM_GETLIMITTEXT | EM_GETLINE of { lineNo: int, size: int, result: string ref } | EM_GETLINECOUNT | EM_GETMARGINS | EM_GETMODIFY | EM_GETPASSWORDCHAR | EM_GETRECT of {rect: RECT ref} | EM_GETSEL of {startPos: int ref, endPos: int ref} | EM_GETTHUMB | EM_LIMITTEXT of {limit: int} | EM_LINEFROMCHAR of {index: int} | EM_LINEINDEX of {line: int} | EM_LINELENGTH of {index: int} | EM_LINESCROLL of {xScroll: int, yScroll: int} | EM_POSFROMCHAR of {index: int} | EM_REPLACESEL of {canUndo: bool, text: string} | EM_SCROLL of {action: ScrollDirection} | EM_SCROLLCARET | EM_SETMARGINS of {margins: MarginSettings} | EM_SETMODIFY of { modified: bool } | EM_SETPASSWORDCHAR of { ch: char } | EM_SETREADONLY of { readOnly: bool } | EM_SETRECT of {rect: RECT} | EM_SETRECTNP of {rect: RECT} | EM_SETSEL of {startPos: int, endPos: int} | EM_SETTABSTOPS of {tabs: int list} | EM_UNDO | BM_CLICK | BM_GETCHECK | BM_GETIMAGE of {imageType: ImageType} | BM_GETSTATE | BM_SETCHECK of {state: int} | BM_SETIMAGE of {image: HGDIOBJ, imageType: ImageType} | BM_SETSTATE of {highlight: bool } | BM_SETSTYLE of {redraw: bool, style: windowFlags} | CB_GETEDITSEL of {startPos: int ref, endPos: int ref} | CB_LIMITTEXT of {limit: int} | CB_SETEDITSEL of {startPos: int, endPos: int} | CB_ADDSTRING of { text: string } | CB_DELETESTRING of { index: int } | CB_GETCOUNT | CB_GETCURSEL | CB_DIR of { attrs: ComboBase.CBDirAttr list, fileSpec: string } | CB_GETLBTEXT of { index: int, length: int, text: string ref } | CB_GETLBTEXTLEN of { index: int } | CB_INSERTSTRING of { index: int, text: string } | CB_RESETCONTENT | CB_FINDSTRING of { indexStart: int, text: string } | CB_SELECTSTRING of { indexStart: int, text: string } | CB_SETCURSEL of { index: int } | CB_SHOWDROPDOWN of { show: bool } | CB_GETITEMDATA of { index: int } | CB_SETITEMDATA of { index: int, data: int } | CB_GETDROPPEDCONTROLRECT of { rect: RECT ref } | CB_SETITEMHEIGHT of { index: int, height: int } | CB_GETITEMHEIGHT of { index: int } | CB_SETEXTENDEDUI of { extended: bool } | CB_GETEXTENDEDUI | CB_GETDROPPEDSTATE | CB_FINDSTRINGEXACT of { indexStart: int, text: string } | CB_SETLOCALE of { locale: int } | CB_GETLOCALE | CB_GETTOPINDEX | CB_SETTOPINDEX of { index: int } | CB_GETHORIZONTALEXTENT | CB_SETHORIZONTALEXTENT of { extent: int } | CB_GETDROPPEDWIDTH | CB_SETDROPPEDWIDTH of { width: int } | CB_INITSTORAGE of { items: int, bytes: int } | LB_ADDSTRING of { text: string } | LB_INSERTSTRING of { index: int, text: string } | LB_DELETESTRING of { index: int } | LB_SELITEMRANGEEX of { first: int, last: int } | LB_RESETCONTENT | LB_SETSEL of { select: bool, index: int } | LB_SETCURSEL of { index: int } | LB_GETSEL of { index: int } | LB_GETCURSEL | LB_GETTEXT of { index: int, length: int, text: string ref } | LB_GETTEXTLEN of { index: int } | LB_GETCOUNT | LB_SELECTSTRING of { indexStart: int, text: string } | LB_DIR of { attrs: ComboBase.CBDirAttr list, fileSpec: string } | LB_GETTOPINDEX | LB_FINDSTRING of { indexStart: int, text: string } | LB_GETSELCOUNT | LB_GETSELITEMS of { itemCount: int, items: int list ref } | LB_SETTABSTOPS of { tabs: int list } | LB_GETHORIZONTALEXTENT | LB_SETHORIZONTALEXTENT of { extent: int } | LB_SETCOLUMNWIDTH of { column: int } | LB_ADDFILE of { fileName: string } | LB_SETTOPINDEX of { index: int } | LB_GETITEMRECT of { rect: RECT ref, index: int } | LB_GETITEMDATA of { index: int } | LB_SETITEMDATA of { index: int, data: int } | LB_SELITEMRANGE of { select: bool, first: int, last: int } | LB_SETANCHORINDEX of { index: int } | LB_GETANCHORINDEX | LB_SETCARETINDEX of { index: int, scroll: bool } | LB_GETCARETINDEX | LB_SETITEMHEIGHT of { index: int, height: int } | LB_GETITEMHEIGHT of { index: int } | LB_FINDSTRINGEXACT of { indexStart: int, text: string } | LB_SETLOCALE of { locale: int } (* Should be an abstract type? *) | LB_GETLOCALE (* Result will be the type used above. *) | LB_SETCOUNT of { items: int } | LB_INITSTORAGE of { items: int, bytes: int } | LB_ITEMFROMPOINT of { point: POINT } | STM_GETICON | STM_GETIMAGE of {imageType: ImageType} | STM_SETICON of {icon: HICON} | STM_SETIMAGE of {image: HGDIOBJ, imageType: ImageType} | SBM_SETPOS of { pos: int, redraw: bool } | SBM_GETPOS | SBM_SETRANGE of { minPos: int, maxPos: int } | SBM_SETRANGEREDRAW of { minPos: int, maxPos: int } | SBM_GETRANGE of { minPos: int ref, maxPos: int ref } | SBM_ENABLE_ARROWS of ScrollBase.enableArrows | SBM_SETSCROLLINFO of { info: ScrollBase.SCROLLINFO, options: ScrollBase.ScrollInfoOption list } | SBM_GETSCROLLINFO of { info: ScrollBase.SCROLLINFO ref, options: ScrollBase.ScrollInfoOption list } | FINDMSGSTRING of { flags: findReplaceFlags, findWhat: string, replaceWith: string } | NULL type MSG = { msg: Message, hwnd: HWND, time: Time.time, pt: {x: int, y: int} } val GetInputState : unit -> bool val GetMessage : HWND option * int * int -> MSG val GetMessagePos : unit -> POINT val GetMessageTime : unit -> Time.time datatype QueueStatus = QS_ALLPOSTMESSAGE | QS_HOTKEY | QS_KEY | QS_MOUSEBUTTON | QS_MOUSEMOVE | QS_PAINT | QS_POSTMESSAGE | QS_SENDMESSAGE | QS_TIMER val QS_ALLEVENTS : QueueStatus list val QS_ALLINPUT : QueueStatus list val QS_INPUT : QueueStatus list val QS_MOUSE : QueueStatus list val GetQueueStatus : QueueStatus list -> QueueStatus list val InSendMessage : unit -> bool datatype PeekMessageOptions = PM_NOREMOVE | PM_REMOVE val PeekMessage : HWND option * int * int * PeekMessageOptions -> MSG option val PostQuitMessage : int -> unit val RegisterWindowMessage : string -> int val RunApplication : unit -> int val SendMessage : HWND * Message -> LRESULT val PostMessage : HWND * Message -> unit val HWND_BROADCAST: HWND val WaitMessage : unit -> bool (* These last few are just used internally. *) val subclass : HWND * (HWND * Message * 'a -> LRESULT * 'a) * 'a -> (HWND * Message -> LRESULT) val setCallback: (HWND * Message * 'a -> LRESULT * 'a) * 'a -> unit val addModelessDialogue : HWND * CInterface.vol -> unit val removeCallback : HWND -> unit (*val updateWindowHandle: HWND -> unit*) val compileMessage: Message -> int * CInterface.vol * CInterface.vol val decompileMessage: int * CInterface.vol * CInterface.vol -> Message val messageReturnFromParams: Message * CInterface.vol * CInterface.vol * CInterface.vol -> LRESULT val updateParamsFromMessage: Message * CInterface.vol * CInterface.vol -> unit val LPMSG: MSG CInterface.Conversion val mainCallbackFunction: HWND*int*CInterface.vol*CInterface.vol->CInterface.vol end = struct local open CInterface open Base open Globals open WinBase fun user name = load_sym (load_lib "user32.dll") name val COPYDATASTRUCT = STRUCT3(LONG, LONG, POINTER) val (fromCcopydata, toCcopydata, _) = breakConversion COPYDATASTRUCT val WINDOWPOS = STRUCT7(HWND, HWND, INT, INT, INT, INT, WINDOWPOSITIONSTYLE) val (fromCwindowpos, toCwindowpos, Cwindowpos) = breakConversion WINDOWPOS val MDICREATESTRUCT = STRUCT9(CLASS,STRING,HINSTANCE,INT,INT,INT,INT,LONG,LONG) val (fromCmdicreatestruct, toCmdicreatestruct, _) = breakConversion MDICREATESTRUCT val MEASUREITEMSTRUCT = STRUCT6(MessageBase.CONTROLTYPE,INT,INT,INT,INT,INT) val (fromCmeasureitemstruct, toCmeasureitemstruct, _) = breakConversion MEASUREITEMSTRUCT val DELETEITEMSTRUCT = STRUCT5(MessageBase.CONTROLTYPE,INT,INT,HWND,INT) val (fromCdeleteitemstruct, toCdeleteitemstruct, _) = breakConversion DELETEITEMSTRUCT val COMPAREITEMSTRUCT = STRUCT7(MessageBase.CONTROLTYPE,INT,HWND,INT,LONG,INT,LONG) val (fromCcompareitemstruct, toCcompareitemstruct, _) = breakConversion COMPAREITEMSTRUCT val CREATESTRUCT = STRUCT12(INT,HINSTANCE,HMENU,HWND,INT,INT,INT,INT,WORD,STRING,CLASS,LONG) val (fromCcreatestruct, toCcreatestruct, _) = breakConversion CREATESTRUCT val MINMAXINFO = STRUCT5(POINT,POINT,POINT,POINT,POINT) val (fromCminmaxinfo, toCminmaxinfo, _) = breakConversion MINMAXINFO val DRAWITEMSTRUCT = STRUCT9(MessageBase.CONTROLTYPE,INT,INT,INT,INT,HWND,HDC,RECT,LONG) val (fromCdrawitemstruct, toCdrawitemstruct, _) = breakConversion DRAWITEMSTRUCT val NCCALCSIZE_PARAMS = STRUCT4(RECT,RECT,RECT,POINTERTO WINDOWPOS) val (fromCncalcsizestruct, toCncalcsizestruct, _) = breakConversion NCCALCSIZE_PARAMS val HELPINFO = STRUCT6(INT, INT, INT, INT, INT, POINT) val (fromChelpinfo, toChelpinfo, helpStruct) = breakConversion HELPINFO (* Notification structures *) val NMHDR = STRUCT3(HWND, INT, INT) val (fromCnmhdr, toCnmhdr, nmhdr) = breakConversion NMHDR val CHARARRAY80 = CHARARRAY 80 val (_, toCcharArray80, charArray80) = breakConversion CHARARRAY80 val NMTTDISPINFO = STRUCT6(NMHDR, POINTER (* String or resource id *), CHARARRAY80, HINSTANCE, UINT, UINT); val (fromCnmttdispinfo, toCnmttdispinfo, _) = breakConversion NMTTDISPINFO; val (toHMENU, fromHMENU, _) = breakConversion HMENU and (toHWND, fromHWND, _) = breakConversion HWND and (toHDC, fromHDC, _) = breakConversion HDC and (toHFONT, fromHFONT, _) = breakConversion HFONT and (toHRGN, fromHRGN, _) = breakConversion HRGN and (toHDROP, fromHDROP, _) = breakConversion HDROP and (toHINST, fromHINST, _) = breakConversion HINSTANCE and (toHICON, fromHICON, _) = breakConversion HICON and (toHGDIOBJ, fromHGDIOBJ, _) = breakConversion HGDIOBJ and (fromCrect, toCrect, CRect) = breakConversion RECT and (fromCpoint, toCpoint, CPoint) = breakConversion POINT and (fromCsd, toCsd, _) = breakConversion MessageBase.SCROLLDIRECTION and (fromCit, toCit, _) = breakConversion MessageBase.IMAGETYPE and (fromCcbf, toCcbf, _) = breakConversion CLIPFORMAT and (fromCwmsf, toCwmsf, _) = breakConversion MessageBase.WMSIZEOPTIONS val (fromCscrollinfo, toCscrollinfo, _) = breakConversion ScrollBase.SCROLLINFO val (fromCesbf, toCesbf, _) = breakConversion ScrollBase.ENABLESCROLLBARFLAG val (fromCcbal, toCcbal, _) = breakConversion ComboBase.CBDIRATTRS val (fromCwmpl, toCwmpl, _) = breakConversion MessageBase.WMPRINTOPS val (fromCmkf, toCmkf, _) = breakConversion MessageBase.MOUSEKEYFLAGS val (fromCmdif, toCmdif, _) = breakConversion MessageBase.MDITILEFLAGS fun itob i = i <> 0 val RegisterMessage = call1 (user "RegisterWindowMessageA") STRING UINT in open MessageBase (* Get Message, MSG and ImageType *) type HGDIOBJ = HGDIOBJ and HWND = HWND and RECT = RECT and POINT = POINT and HMENU = HMENU and HICON = HICON and HINSTANCE = HINSTANCE and HDC = HDC and HFONT = HFONT and HRGN = HRGN and HDROP = HDROP and ClipboardFormat = ClipboardFormat and ClassType = ClassType and findReplaceFlags = FindReplaceFlags.flags and windowFlags = flags fun decompileMessage (m: int, wp: vol, lp: vol) = (* Decode a received message. All the parameters are ints at this stage because the parameters are passed from the callback mechanism which doesn't go through the CInterface structure. *) case m of 0x0000 => NULL | 0x0001 => let val (cp,inst,menu,parent, cy,cx,y,x, style, name,class, extendedstyle) = fromCcreatestruct (deref lp) in WM_CREATE { instance = inst, creation = cp, menu = menu, parent = parent, cy = cy, cx = cx, y = y, x = x, style = Style.fromWord style, name = name, class = class, extendedstyle = extendedstyle } end | 0x0002 => WM_DESTROY | 0x0003 => WM_MOVE { x = LOWORD (fromCuint lp), y = HIWORD (fromCuint lp) } | 0x0005 => WM_SIZE { flag = fromCwmsf wp, width = LOWORD (fromCuint lp), height = HIWORD (fromCuint lp) } | 0x0006 => WM_ACTIVATE { active = toWMactive (LOWORD (fromCuint wp)), minimize = itob (HIWORD (fromCuint wp)) } | 0x0007 => WM_SETFOCUS { losing = toHWND wp } | 0x0008 => WM_KILLFOCUS { receivefocus = toHWND wp } | 0x000A => WM_ENABLE { enabled = itob (fromCint wp) } | 0x000B => WM_SETREDRAW { redrawflag = fromCint wp } | 0x000C => WM_SETTEXT { text = fromCstring lp } (* When the message arrives we don't know what the text is. *) | 0x000D => WM_GETTEXT { length = fromCint wp, text = ref "" } | 0x000E => WM_GETTEXTLENGTH | 0x000F => WM_PAINT | 0x0010 => WM_CLOSE | 0x0011 => WM_QUERYENDSESSION { source = (fromCint wp) } | 0x0012 => WM_QUIT { exitcode = (fromCint wp) } | 0x0013 => WM_QUERYOPEN | 0x0014 => WM_ERASEBKGND { devicecontext = toHDC wp } | 0x0015 => WM_SYSCOLORCHANGE | 0x0016 => WM_ENDSESSION { endsession = itob (fromCint wp) } | 0x0018 => WM_SHOWWINDOW { showflag = itob (fromCint wp), statusflag = (fromCint lp) } | 0x001A => WM_SETTINGCHANGE { section_name = fromCstring lp } (* "0x001A" *) | 0x001B => WM_DEVMODECHANGE { devicename = fromCstring lp } (* "0x001B" *) | 0x001C => WM_ACTIVATEAPP { active = itob (fromCint wp), threadid = (fromCint lp) } (* "0x001C" *) | 0x001D => WM_FONTCHANGE | 0x001E => WM_TIMECHANGE (* "0x001E" *) | 0x001F => WM_CANCELMODE (* "0x001F" *) | 0x0020 => WM_SETCURSOR { cursorwindow = toHWND wp, hitTest = LOWORD (fromCuint lp), mousemessage = HIWORD (fromCuint lp) } (* "0x0020" *) | 0x0021 => WM_MOUSEACTIVATE { parent = toHWND wp, hitTest = LOWORD (fromCuint lp), message = HIWORD (fromCuint lp) }(* "0x0021" *) | 0x0022 => WM_CHILDACTIVATE (* "0x0022" *) | 0x0023 => WM_QUEUESYNC (* "0x0023" *) | 0x0024 => let val (ptres, ptms, ptmp, ptts, ptmts) = fromCminmaxinfo(deref lp) in WM_GETMINMAXINFO { maxSize = ref ptms, maxPosition = ref ptmp, minTrackSize = ref ptts, maxTrackSize = ref ptmts} end | 0x0026 => WM_PAINTICON | 0x0027 => WM_ICONERASEBKGND { devicecontext = toHDC wp } (* "0x0027" *) | 0x0028 => WM_NEXTDLGCTL { control = fromCint wp, handleflag = itob (fromCint lp) } (* "0x0028" *) | 0x002A => WM_SPOOLERSTATUS { jobstatus = fromCint wp, jobsleft = LOWORD (fromCuint lp) } (* "0x002A" *) | 0x002B => let val (ctlType,ctlID,itemID,itemAction,itemState,hItem,hDC, rcItem,itemData) = fromCdrawitemstruct(deref lp) in WM_DRAWITEM { controlid = fromCint wp, ctlType = ctlType, ctlID = ctlID, itemID = itemID, itemAction = itemAction, itemState = itemState, hItem = hItem, hDC = hDC, rcItem = rcItem, itemData = itemData } end | 0x002C => let val (ctlType,ctlID,itemID, itemWidth,itemHeight,itemData) = fromCmeasureitemstruct (deref lp) in WM_MEASUREITEM {controlid = fromCint wp, ctlType = ctlType, ctlID = ctlID, itemID = itemID, itemWidth = itemWidth, itemHeight = itemHeight, itemData = itemData } end | 0x002D => let val (ctlType,ctlID,itemID,hItem,itemData) = fromCdeleteitemstruct(deref lp) in WM_DELETEITEM { controlid = fromCint wp, ctlType = ctlType, ctlID = ctlID, itemID = itemID, item = hItem, itemData = itemData } end | 0x002E => WM_VKEYTOITEM { virtualKey = LOWORD (fromCuint wp), caretpos = HIWORD (fromCuint wp), listbox = toHWND lp } (* "0x002E" *) | 0x002F => WM_CHARTOITEM { key = LOWORD (fromCuint wp), caretpos = HIWORD (fromCuint wp),listbox = toHWND lp } (* "0x002F" *) | 0x0030 => WM_SETFONT { font = toHFONT wp, redrawflag = itob (fromCint lp) } (* "0x0030" *) | 0x0031 => WM_GETFONT (* "0x0031" *) | 0x0032 => WM_SETHOTKEY { virtualKey = fromCint wp } (* "0x0032" *) | 0x0033 => WM_GETHOTKEY (* "0x0033" *) | 0x0037 => WM_QUERYDRAGICON (* "0x0037" *) | 0x0039 => let val (ctlType,ctlID, hItem, itemID1,itemData1, itemID2,itemData2) = fromCcompareitemstruct(deref lp) in WM_COMPAREITEM { controlid = fromCint wp, ctlType = ctlType, ctlID = ctlID, hItem = hItem, itemID1 = itemID1, itemData1 = itemData1, itemID2 = itemID2, itemData2 = itemData2 } (* "0x0039" *) end | 0x0041 => WM_COMPACTING { compactratio = fromCint wp } (* "0x0041" *) | 0x0046 => let val (wh,front,x,y,width,height,flags) = fromCwindowpos(deref lp) in WM_WINDOWPOSCHANGING {hwnd = wh, front= ref front, x= ref x, y= ref y, width= ref width, height = ref height, flags = ref flags} end | 0x0047 => let val (wh,front,x,y,width,height,flags) = fromCwindowpos(deref lp) in WM_WINDOWPOSCHANGED { hwnd = wh, front = front, x = x, y = y, width = width, height = height, flags = flags} end | 0x0048 => WM_POWER { powerevent = fromCint wp } (* "0x0048" *) | 0x004A => let val (data,cbData,lpData) = fromCcopydata(deref lp) (* Extract the memory block as a Word8Vector.vector. *) (* TODO: Test this. Have we got the correct level of indirection? *) val pdata = toWord8vec (lpData, cbData) in WM_COPYDATA { sender = toHWND wp, data = data, pdata = pdata } end | 0x004B => WM_CANCELJOURNAL (* "0x004B" *) | 0x004E => let val (hwndFrom, idFrom, code) = fromCnmhdr (deref lp) val notification = decompileNotification (lp, code) in WM_NOTIFY { idCtrl = fromCint wp, from = hwndFrom, idFrom = idFrom, notification = notification} end | 0x0053 => let val (_, contextType, ctrlId, itemHandle, contextId, mousePos) = fromChelpinfo(deref lp) val hndl = if ctrlId = 2 then MenuHandle(handleOfInt itemHandle) else WindowHandle(handleOfInt itemHandle) in WM_HELP { ctrlId = ctrlId, itemHandle = hndl, contextId = contextId, mousePos = mousePos} end (* WM_INPUTLANGCHANGEREQUEST 0x0050 WM_INPUTLANGCHANGE 0x0051 WM_TCARD 0x0052 WM_USERCHANGED 0x0054 WM_NOTIFYFORMAT 0x0055 NFR_ANSI 1 NFR_UNICODE 2 NF_QUERY 3 NF_REQUERY 4 WM_CONTEXTMENU 0x007B WM_STYLECHANGING 0x007C WM_STYLECHANGED 0x007D *) | 0x007B => WM_CONTEXTMENU { hwnd = toHWND wp, xPos = LOWORD (fromCuint lp), yPos = HIWORD (fromCuint lp)} | 0x007E => WM_DISPLAYCHANGE { bitsPerPixel = fromCint wp, xScreen = LOWORD (fromCuint lp), yScreen = HIWORD (fromCuint lp)} | 0x007F => WM_GETICON { big = fromCint wp = 1} | 0x0080 => WM_SETICON { big = fromCint wp = 1, icon = toHICON lp} | 0x0081 => let val (cp,inst,menu,parent, cy,cx,y,x, style, name,class, extendedstyle) = fromCcreatestruct (deref lp) in WM_NCCREATE { instance = inst, creation = cp, menu = menu, parent = parent, cy = cy, cx = cx, y = y, x = x, style = Style.fromWord style, name = name, class = class, extendedstyle = extendedstyle } end | 0x0082 => WM_NCDESTROY | 0x0083 => if itob (fromCint wp) then let val (newrect,oldrect,oldclientarea,winpos) = fromCncalcsizestruct (deref lp) val (wh,front,x,y,cx,cy,style) = winpos in WM_NCCALCSIZE { validarea = true, newrect = ref newrect, oldrect = oldrect, oldclientarea = oldclientarea, hwnd = wh, insertAfter = front, x = x, y = y, cx = cx, cy = cy, style = style } end else (* lParam points to a rect. *) let val newrect = fromCrect (deref lp) in WM_NCCALCSIZE { validarea = false, newrect = ref newrect, oldrect = {left=0, top=0, right=0, bottom=0}, oldclientarea = {left=0, top=0, right=0, bottom=0}, insertAfter = hwndNull, hwnd = hwndNull, x = 0, y = 0, cx = 0, cy = 0, style = [] } end | 0x0084 => WM_NCHITTEST { x = LOWORD (fromCuint lp), y = HIWORD (fromCuint lp) } (* "0x0084" *) | 0x0085 => WM_NCPAINT { region = toHRGN wp } (* "0x0085" *) | 0x0086 => WM_NCACTIVATE { active = itob (fromCint wp) } (* "0x0086" *) | 0x0087 => WM_GETDLGCODE (* "0x0087" *) | 0x00A0 => WM_NCMOUSEMOVE { hitTest = fromCint wp, x = LOWORD (fromCuint lp), y = HIWORD (fromCuint lp) } | 0x00A1 => WM_NCLBUTTONDOWN { hitTest = fromCint wp, x = LOWORD (fromCuint lp), y = HIWORD (fromCuint lp) } | 0x00A2 => WM_NCLBUTTONUP { hitTest = fromCint wp, x = LOWORD (fromCuint lp), y = HIWORD (fromCuint lp) } | 0x00A3 => WM_NCLBUTTONDBLCLK { hitTest = fromCint wp, x = LOWORD (fromCuint lp), y = HIWORD (fromCuint lp) } | 0x00A4 => WM_NCRBUTTONDOWN { hitTest = fromCint wp, x = LOWORD (fromCuint lp), y = HIWORD (fromCuint lp) } | 0x00A5 => WM_NCRBUTTONUP { hitTest = fromCint wp, x = LOWORD (fromCuint lp), y = HIWORD (fromCuint lp) } | 0x00A6 => WM_NCRBUTTONDBLCLK { hitTest = fromCint wp, x = LOWORD (fromCuint lp), y = HIWORD (fromCuint lp) } | 0x00A7 => WM_NCMBUTTONDOWN { hitTest = fromCint wp, x = LOWORD (fromCuint lp), y = HIWORD (fromCuint lp) } | 0x00A8 => WM_NCMBUTTONUP { hitTest = fromCint wp, x = LOWORD (fromCuint lp), y = HIWORD (fromCuint lp) } | 0x00A9 => WM_NCMBUTTONDBLCLK { hitTest = fromCint wp, x = LOWORD (fromCuint lp), y = HIWORD (fromCuint lp) } (* Edit control messages *) | 0x00B0 => EM_GETSEL { startPos = ref(fromCint(deref wp)), endPos = ref(fromCint(deref lp)) } | 0x00B1 => EM_SETSEL { startPos = fromCint wp, endPos = fromCint lp } | 0x00B2 => EM_GETRECT { rect = ref(fromCrect(deref lp)) } | 0x00B3 => EM_SETRECT { rect = fromCrect(deref lp) } | 0x00B4 => EM_SETRECTNP { rect = fromCrect(deref lp) } | 0x00B5 => EM_SCROLL{action = fromCsd wp} | 0x00B6 => EM_LINESCROLL{xScroll = fromCint wp, yScroll = fromCint lp} | 0x00B7 => EM_SCROLLCARET | 0x00B8 => EM_GETMODIFY | 0x00B9 => EM_SETMODIFY{modified = itob (fromCint wp)} | 0x00BA => EM_GETLINECOUNT | 0x00BB => EM_LINEINDEX {line = fromCint wp} (* EM_SETHANDLE 0x00BC *) | 0x00BE => EM_GETTHUMB | 0x00C1 => EM_LINELENGTH {index = fromCint wp} | 0x00C2 => EM_REPLACESEL {canUndo = itob (fromCint wp), text = fromCstring lp} (* All we know at this stage is the number of characters. *) | 0x00C4 => EM_GETLINE { lineNo = fromCint wp, size = fromCint(deref lp), result = ref "" } | 0x00C5 => EM_LIMITTEXT {limit = fromCint wp} | 0x00C6 => EM_CANUNDO | 0x00C7 => EM_UNDO | 0x00C8 => EM_FMTLINES{addEOL = itob (fromCint wp)} | 0x00C9 => EM_LINEFROMCHAR{index = fromCint wp} | 0x00CB => let val v = deref lp fun getTab i = fromCint(offset i Cint v) in EM_SETTABSTOPS{tabs=List.tabulate((fromCint wp), getTab)} end | 0x00CC => EM_SETPASSWORDCHAR{ch = chr (fromCint wp)} | 0x00CD => EM_EMPTYUNDOBUFFER | 0x00CE => EM_GETFIRSTVISIBLELINE | 0x00CF => EM_SETREADONLY{readOnly = itob (fromCint wp)} (* EM_SETWORDBREAKPROC 0x00D0 EM_GETWORDBREAKPROC 0x00D1 *) | 0x00D2 => EM_GETPASSWORDCHAR | 0x00D3 => if (fromCint wp) = 0xffff then EM_SETMARGINS{margins=UseFontInfo} else let val left = if IntInf.andb((fromCint wp), 1) <> 0 then SOME(LOWORD (fromCuint lp)) else NONE val right = if IntInf.andb((fromCint wp), 2) <> 0 then SOME(HIWORD (fromCuint lp)) else NONE in EM_SETMARGINS{margins=Margins{left=left, right=right}} end | 0x00D4 => EM_GETMARGINS | 0x00D5 => EM_GETLIMITTEXT | 0x00D6 => EM_POSFROMCHAR {index = (fromCint wp)} | 0x00D7 => let val pt = fromCuint (deref lp) in EM_CHARFROMPOS { point = {x = LOWORD pt, y = HIWORD pt} } end (* Scroll bar messages *) | 0x00E0 => SBM_SETPOS {pos = fromCint wp, redraw = itob (fromCint lp)} | 0x00E1 => SBM_GETPOS | 0x00E2 => SBM_SETRANGE {minPos = fromCint wp, maxPos = fromCint lp} | 0x00E6 => SBM_SETRANGEREDRAW {minPos = fromCint wp, maxPos = fromCint lp} | 0x00E3 => SBM_GETRANGE { minPos = ref(fromCint(deref wp)), maxPos = ref(fromCint(deref lp)) } | 0x00E4 => SBM_ENABLE_ARROWS(fromCesbf wp) | 0x00E9 => let val (info, options) = fromCscrollinfo(deref lp) in SBM_SETSCROLLINFO{ info = info, options = options } end | 0x00EA => let (* The values may not be correct at this point but the mask should have been set. *) val (info, options) = fromCscrollinfo(deref lp) in SBM_GETSCROLLINFO{ info = ref info, options = options } end (* Button control messages *) | 0x00F0 => BM_GETCHECK | 0x00F1 => BM_SETCHECK{state = (fromCint wp)} | 0x00F2 => BM_GETSTATE | 0x00F3 => BM_SETSTATE{highlight = (fromCint wp) <> 0} | 0x00F4 => BM_SETSTYLE{redraw = (fromCint lp) <> 0, style = Style.fromWord(LargeWord.fromInt (fromCint wp))} | 0x00F5 => BM_CLICK | 0x00F6 => BM_GETIMAGE{imageType = fromCit wp} | 0x00F7 => BM_SETIMAGE{imageType = fromCit wp, image = intAsHgdi (fromCint lp)} | 0x0100 => WM_KEYDOWN { virtualKey = (fromCint wp), data = (fromCint lp) } | 0x0101 => WM_KEYUP { virtualKey = (fromCint wp), data = (fromCint lp) } | 0x0102 => WM_CHAR { charCode = chr (fromCint wp), data = (fromCint lp) } | 0x0103 => WM_DEADCHAR { charCode = chr (fromCint wp), data = (fromCint lp) } | 0x0104 => WM_SYSKEYDOWN { virtualKey = (fromCint wp), data = (fromCint lp) } | 0x0105 => WM_SYSKEYUP { virtualKey = (fromCint wp), data = (fromCint lp) } | 0x0106 => WM_SYSCHAR { charCode = chr (fromCint wp), data = (fromCint lp) } | 0x0107 => WM_SYSDEADCHAR { charCode = chr (fromCint wp), data = (fromCint lp) } (* WM_IME_STARTCOMPOSITION 0x010D WM_IME_ENDCOMPOSITION 0x010E WM_IME_COMPOSITION 0x010F WM_IME_KEYLAST 0x010F *) | 0x0110 => WM_INITDIALOG { dialog = toHWND wp, initdata = (fromCint lp) } (* "0x0110" *) | 0x0111 => WM_COMMAND { notifyCode = (HIWORD (fromCuint wp)), wId = LOWORD (fromCuint wp), control = toHWND lp } | 0x0112 => WM_SYSCOMMAND let val uIntWp = fromCuint wp val uIntLp = fromCuint lp in { commandvalue = MessageBase.toSysCommand(IntInf.andb(uIntWp, 0xFFF0)), sysBits = IntInf.andb(uIntWp, 0xF), p = {x= LOWORD uIntLp,y= HIWORD uIntLp}} end | 0x0113 => WM_TIMER { timerid = (fromCint wp) } (* "0x0113" *) | 0x0114 => WM_HSCROLL { value = fromCsd(toCint(LOWORD (fromCuint wp))), position = HIWORD (fromCuint wp), scrollbar = toHWND lp } (* "0x0114" *) | 0x0115 => WM_VSCROLL { value = fromCsd(toCint(LOWORD (fromCuint wp))), position = HIWORD (fromCuint wp), scrollbar = toHWND lp } (* "0x0115" *) | 0x0116 => WM_INITMENU { menu = toHMENU wp } (* "0x0116" *) | 0x0117 => WM_INITMENUPOPUP { menupopup = toHMENU wp, itemposition = LOWORD (fromCuint lp), isSystemMenu = itob (HIWORD (fromCuint lp)) } (* "0x0117" *) | 0x011F => WM_MENUSELECT { menuitem = LOWORD (fromCuint wp), menuflags = MenuBase.toMenuFlagSet(IntInf.andb(HIWORD (fromCuint wp), 65535)), menu= toHMENU lp } (* "0x011F" *) | 0x0120 => WM_MENUCHAR { ch = chr (LOWORD (fromCuint wp)), menuflag = MenuBase.toMenuFlag(IntInf.andb(HIWORD (fromCuint wp), 65535)), menu= toHMENU lp } (* "0x0120" *) | 0x0121 => WM_ENTERIDLE { flag = (fromCint wp), window = toHWND lp } (* "0x0121" *) | 0x0132 => WM_CTLCOLORMSGBOX { displaycontext = toHDC wp, messagebox = toHWND lp } (* "0x0132" *) | 0x0133 => WM_CTLCOLOREDIT { displaycontext = toHDC wp, editcontrol = toHWND lp } (* "0x0133" *) | 0x0134 => WM_CTLCOLORLISTBOX { displaycontext = toHDC wp, listbox = toHWND lp } (* "0x0134" *) | 0x0135 => WM_CTLCOLORBTN { displaycontext = toHDC wp, button = toHWND lp }(* "0x0135" *) | 0x0136 => WM_CTLCOLORDLG { displaycontext = toHDC wp, dialogbox = toHWND lp } (* "0x0136" *) | 0x0137 => WM_CTLCOLORSCROLLBAR { displaycontext = toHDC wp, scrollbar = toHWND lp } (* "0x0137" *) | 0x0138 => WM_CTLCOLORSTATIC { displaycontext = toHDC wp, staticcontrol = toHWND lp } (* "0x0138" *) (* Combobox messages. *) | 0x0140 => CB_GETEDITSEL { startPos = ref(fromCint(deref wp)), endPos = ref(fromCint(deref lp)) } | 0x0141 => CB_LIMITTEXT {limit = (fromCint wp)} | 0x0142 => CB_SETEDITSEL { startPos = LOWORD (fromCuint lp), endPos = HIWORD (fromCuint lp) } | 0x0143 => CB_ADDSTRING {text = fromCstring lp } | 0x0144 => CB_DELETESTRING {index = (fromCint wp)} | 0x0145 => CB_DIR {attrs = fromCcbal wp, fileSpec = fromCstring lp } | 0x0146 => CB_GETCOUNT | 0x0147 => CB_GETCURSEL | 0x0148 => CB_GETLBTEXT { index = (fromCint wp), length = ~1, text = ref "" } | 0x0149 => CB_GETLBTEXTLEN {index = (fromCint wp)} | 0x014A => CB_INSERTSTRING {text = fromCstring lp, index = (fromCint wp) } | 0x014B => CB_RESETCONTENT | 0x014C => CB_FINDSTRING {text = fromCstring lp, indexStart = (fromCint wp) } | 0x014D => CB_SELECTSTRING {text = fromCstring lp, indexStart = (fromCint wp) } | 0x014E => CB_SETCURSEL {index = (fromCint wp)} | 0x014F => CB_SHOWDROPDOWN {show = itob (fromCint wp)} | 0x0150 => CB_GETITEMDATA {index = (fromCint wp)} | 0x0151 => CB_SETITEMDATA {index = (fromCint wp), data = (fromCint lp)} | 0x0152 => CB_GETDROPPEDCONTROLRECT {rect = ref(fromCrect (deref lp)) } | 0x0153 => CB_SETITEMHEIGHT {index = (fromCint wp), height = (fromCint lp)} | 0x0154 => CB_GETITEMHEIGHT {index = (fromCint wp)} | 0x0155 => CB_SETEXTENDEDUI {extended = itob (fromCint wp)} | 0x0156 => CB_GETEXTENDEDUI | 0x0157 => CB_GETDROPPEDSTATE | 0x0158 => CB_FINDSTRINGEXACT {text = fromCstring lp, indexStart = (fromCint wp) } | 0x0159 => CB_SETLOCALE {locale = (fromCint wp)} | 0x015A => CB_GETLOCALE | 0x015b => CB_GETTOPINDEX | 0x015c => CB_SETTOPINDEX {index = (fromCint wp)} | 0x015d => CB_GETHORIZONTALEXTENT | 0x015e => CB_SETHORIZONTALEXTENT {extent = (fromCint wp)} | 0x015f => CB_GETDROPPEDWIDTH | 0x0160 => CB_SETDROPPEDWIDTH {width = (fromCint wp)} | 0x0161 => CB_INITSTORAGE {items = (fromCint wp), bytes = (fromCint lp)} (* Static control messages. *) | 0x0170 => STM_SETICON{icon = toHICON wp} | 0x0171 => STM_GETICON | 0x0172 => STM_SETIMAGE{imageType = fromCit wp, image = toHGDIOBJ lp} | 0x0173 => STM_GETIMAGE{imageType = fromCit wp} (* Listbox messages *) | 0x0180 => LB_ADDSTRING {text = fromCstring(toCint (fromCint lp)) } | 0x0181 => LB_INSERTSTRING {text = fromCstring lp, index = (fromCint wp) } | 0x0182 => LB_DELETESTRING {index = (fromCint wp)} | 0x0183 => LB_SELITEMRANGEEX {first = (fromCint wp), last = (fromCint lp)} | 0x0184 => LB_RESETCONTENT | 0x0185 => LB_SETSEL {select = itob (fromCint wp), index = (fromCint lp)} | 0x0186 => LB_SETCURSEL {index = (fromCint wp)} | 0x0187 => LB_GETSEL {index = (fromCint wp)} | 0x0188 => LB_GETCURSEL | 0x0189 => LB_GETTEXT { index = (fromCint wp), length = ~1, text = ref "" } | 0x018A => LB_GETTEXTLEN {index = (fromCint wp)} | 0x018B => LB_GETCOUNT | 0x018C => LB_SELECTSTRING {text = fromCstring lp, indexStart = (fromCint wp) } | 0x018D => LB_DIR {attrs = fromCcbal wp, fileSpec = fromCstring lp } | 0x018E => LB_GETTOPINDEX | 0x018F => LB_FINDSTRING {text = fromCstring lp, indexStart = (fromCint wp) } | 0x0190 => LB_GETSELCOUNT | 0x0191 => LB_GETSELITEMS { itemCount = (fromCint wp), items = ref [] } | 0x0192 => let val v = deref lp fun getTab i = fromCint(offset i Cint v) in LB_SETTABSTOPS{tabs=List.tabulate((fromCint wp), getTab)} end | 0x0193 => LB_GETHORIZONTALEXTENT | 0x0194 => LB_SETHORIZONTALEXTENT {extent = (fromCint wp)} | 0x0195 => LB_SETCOLUMNWIDTH {column = (fromCint wp)} | 0x0196 => LB_ADDFILE {fileName = fromCstring lp } | 0x0197 => LB_SETTOPINDEX {index = (fromCint wp)} | 0x0198 => LB_GETITEMRECT {index = (fromCint wp), rect = ref(fromCrect (deref lp)) } | 0x0199 => LB_GETITEMDATA {index = (fromCint wp)} | 0x019A => LB_SETITEMDATA {index = (fromCint wp), data = (fromCint lp)} | 0x019B => LB_SELITEMRANGE {select = itob (fromCint wp), first = LOWORD (fromCuint lp), last = HIWORD (fromCuint lp)} | 0x019C => LB_SETANCHORINDEX {index = (fromCint wp)} | 0x019D => LB_GETANCHORINDEX | 0x019E => LB_SETCARETINDEX {index = (fromCint wp), scroll = itob (fromCint lp)} | 0x019F => LB_GETCARETINDEX | 0x01A0 => LB_SETITEMHEIGHT {index = (fromCint wp), height = LOWORD (fromCuint lp)} | 0x01A1 => LB_GETITEMHEIGHT {index = (fromCint wp)} | 0x01A2 => LB_FINDSTRINGEXACT {text = fromCstring lp, indexStart = (fromCint wp) } | 0x01A5 => LB_SETLOCALE {locale = (fromCint wp)} | 0x01A6 => LB_GETLOCALE | 0x01A7 => LB_SETCOUNT {items = (fromCint wp)} | 0x01A8 => LB_INITSTORAGE {items = (fromCint wp), bytes = (fromCint lp)} | 0x01A9 => LB_ITEMFROMPOINT {point = {x = LOWORD (fromCuint lp), y = HIWORD (fromCuint lp) }} | 0x0200 => WM_MOUSEMOVE { keyflags = fromCmkf wp, x = LOWORD (fromCuint lp), y = HIWORD (fromCuint lp) } | 0x0201 => WM_LBUTTONDOWN { keyflags = fromCmkf wp, x = LOWORD (fromCuint lp), y = HIWORD (fromCuint lp) } | 0x0202 => WM_LBUTTONUP { keyflags = fromCmkf wp, x = LOWORD (fromCuint lp), y = HIWORD (fromCuint lp) } | 0x0203 => WM_LBUTTONDBLCLK { keyflags = fromCmkf wp, x = LOWORD (fromCuint lp), y = HIWORD (fromCuint lp) } | 0x0204 => WM_RBUTTONDOWN { keyflags = fromCmkf wp, x = LOWORD (fromCuint lp), y = HIWORD (fromCuint lp) } | 0x0205 => WM_RBUTTONUP { keyflags = fromCmkf wp, x = LOWORD (fromCuint lp), y = HIWORD (fromCuint lp) } | 0x0206 => WM_RBUTTONDBLCLK { keyflags = fromCmkf wp, x = LOWORD (fromCuint lp), y = HIWORD (fromCuint lp) } | 0x0207 => WM_MBUTTONDOWN { keyflags = fromCmkf wp, x = LOWORD (fromCuint lp), y = HIWORD (fromCuint lp) } | 0x0208 => WM_MBUTTONUP { keyflags = fromCmkf wp, x = LOWORD (fromCuint lp), y = HIWORD (fromCuint lp) } | 0x0209 => WM_MBUTTONDBLCLK { keyflags = fromCmkf wp, x = LOWORD (fromCuint lp), y = HIWORD (fromCuint lp) } (* WM_MOUSEWHEEL 0x020A *) | 0x0210 => WM_PARENTNOTIFY { eventflag = LOWORD (fromCuint wp), idchild = HIWORD (fromCuint wp), value = (fromCint lp) } | 0x0211 => WM_ENTERMENULOOP { istrack= itob (fromCint wp) } (* "0x0211" *) | 0x0212 => WM_EXITMENULOOP { istrack= itob (fromCint wp) } (* "0x0212" *) (* WM_NEXTMENU 0x0213 WM_SIZING 0x0214 *) | 0x0215 => WM_CAPTURECHANGED { newCapture = toHWND lp } (* WM_MOVING 0x0216 WM_POWERBROADCAST 0x0218 WM_DEVICECHANGE 0x0219 *) | 0x0220 => let val (class,title,hinst, x,y,cx,cy, style,lParam) = fromCmdicreatestruct (deref lp) in WM_MDICREATE { class = class, title = title, instance = hinst, x = x, y = y, cx = cx, cy = cy, style = style, cdata = lParam } end | 0x0221 => WM_MDIDESTROY { child = toHWND wp } (* "0x0221" *) | 0x0223 => WM_MDIRESTORE { child = toHWND wp } (* "0x0223" *) | 0x0224 => WM_MDINEXT { child = toHWND wp, flagnext = itob (fromCint lp) } (* "0x0224" *) | 0x0225 => WM_MDIMAXIMIZE { child = toHWND wp } (* "0x0225" *) | 0x0226 => WM_MDITILE { tilingflag = fromCmdif wp } (* "0x0226" *) | 0x0227 => WM_MDICASCADE { skipDisabled = IntInf.andb((fromCint wp), 2) <> 0 } | 0x0228 => WM_MDIICONARRANGE | 0x0229 => WM_MDIGETACTIVE | 0x0230 => WM_MDISETMENU { frameMenu = toHMENU wp, windowMenu = toHMENU lp } (* "0x0230" *) | 0x0231 => WM_ENTERSIZEMOVE | 0x0232 => WM_EXITSIZEMOVE | 0x0233 => WM_DROPFILES { hDrop = toHDROP wp } | 0x0234 => WM_MDIREFRESHMENU (* "0x0234" *) (* WM_IME_SETCONTEXT 0x0281 WM_IME_NOTIFY 0x0282 WM_IME_CONTROL 0x0283 WM_IME_COMPOSITIONFULL 0x0284 WM_IME_SELECT 0x0285 WM_IME_CHAR 0x0286 WM_IME_KEYDOWN 0x0290 WM_IME_KEYUP 0x0291 WM_MOUSEHOVER 0x02A1 WM_MOUSELEAVE 0x02A3 *) | 0x0300 => WM_CUT (* "0x0300" *) | 0x0301 => WM_COPY (* "0x0301" *) | 0x0302 => WM_PASTE (* "0x0302" *) | 0x0303 => WM_CLEAR (* "0x0303" *) | 0x0304 => WM_UNDO (* "0x0304" *) | 0x0305 => WM_RENDERFORMAT { format = fromCcbf wp } (* "0x0305" *) | 0x0306 => WM_RENDERALLFORMATS (* "0x0306" *) | 0x0307 => WM_DESTROYCLIPBOARD (* "0x0307" *) | 0x0308 => WM_DRAWCLIPBOARD (* "0x0308" *) | 0x0309 => WM_PAINTCLIPBOARD { clipboard = toHWND wp } (* "0x0309" *) | 0x030A => WM_VSCROLLCLIPBOARD { viewer = toHWND wp, code = LOWORD (fromCuint lp), position = HIWORD (fromCuint lp) } (* "0x030A" *) | 0x030B => WM_SIZECLIPBOARD { viewer = toHWND lp } (* "0x030B" *) (* The format name is inserted by the window procedure so any incoming message won't have the information. Indeed the buffer may not have been initialised. *) | 0x030C => WM_ASKCBFORMATNAME { length = (fromCint wp), formatName = ref "" } | 0x030D => WM_CHANGECBCHAIN { removed = toHWND wp, next = toHWND lp } | 0x030E => WM_HSCROLLCLIPBOARD { viewer = toHWND wp, code = LOWORD (fromCuint lp), position = HIWORD (fromCuint lp) } (* "0x030E" *) | 0x030F => WM_QUERYNEWPALETTE (* "0x030F" *) | 0x0310 => WM_PALETTEISCHANGING { realize = toHWND wp } (* "0x0310" *) | 0x0311 => WM_PALETTECHANGED { palChg = toHWND wp } (* "0x0311" *) | 0x0312 => WM_HOTKEY { id = (fromCint wp) } (* "0x0312" *) | 0x0317 => WM_PRINT { hdc = toHDC wp, flags = fromCwmpl lp } | 0x0318 => WM_PRINTCLIENT { hdc = toHDC wp, flags = fromCwmpl lp } | i => (* User, application and registered messages. *) (* Rich edit controls use WM_USER+37 to WM_USER+122. As and when we implement rich edit controls we may want to treat those messages specially. *) if i >= 0x0400 andalso i <= 0x7FFF then WM_USER { uMsg = m, wParam = (fromCint wp), lParam = (fromCint lp) } else if i >= 0x8000 andalso i <= 0xBFFF then WM_APP { uMsg = m, wParam = (fromCint wp), lParam = (fromCint lp) } else if i >= 0x8000 andalso i <= 0xFFFF then ( (* We could use PolyML.OnEntry to initialise the registered messages. *) if i = RegisterMessage "commdlg_FindReplace" then let (* The argument is really a FINDREPLACE struct. *) val flags = FindReplaceFlags.fromWord(LargeWord.fromInt( fromCuint(offset 3 Cuint (deref lp)))) val findwhat = fromCstring(offset 4 Cuint (deref lp)) val replace = fromCstring(offset 5 Cuint (deref lp)) in FINDMSGSTRING{flags=flags, findWhat=findwhat, replaceWith=replace} end else WM_REGISTERED { uMsg = m, wParam = (fromCint wp), lParam = (fromCint lp) } ) else (*NULL*) (* Generate USER messages at the moment so we know what they are. *) WM_USER { uMsg = m, wParam = (fromCint wp), lParam = (fromCint lp) } and decompileNotification (lp: vol, ~1) = NM_OUTOFMEMORY | decompileNotification (lp: vol, ~2) = NM_CLICK | decompileNotification (lp: vol, ~3) = NM_DBLCLK | decompileNotification (lp: vol, ~4) = NM_RETURN | decompileNotification (lp: vol, ~5) = NM_RCLICK | decompileNotification (lp: vol, ~6) = NM_RDBLCLK | decompileNotification (lp: vol, ~7) = NM_SETFOCUS | decompileNotification (lp: vol, ~8) = NM_KILLFOCUS | decompileNotification (lp: vol, ~12) = NM_CUSTOMDRAW | decompileNotification (lp: vol, ~13) = NM_HOVER | decompileNotification (lp: vol, ~14) = NM_NCHITTEST | decompileNotification (lp: vol, ~15) = NM_KEYDOWN | decompileNotification (lp: vol, ~16) = NM_RELEASEDCAPTURE | decompileNotification (lp: vol, ~17) = NM_SETCURSOR | decompileNotification (lp: vol, ~18) = NM_CHAR | decompileNotification (lp: vol, ~19) = NM_TOOLTIPSCREATED | decompileNotification (lp: vol, ~20) = NM_LDOWN | decompileNotification (lp: vol, ~21) = NM_RDOWN | decompileNotification (lp: vol, ~22) = NM_THEMECHANGED | decompileNotification (lp: vol, ~100) = LVN_ITEMCHANGING | decompileNotification (lp: vol, ~101) = LVN_ITEMCHANGED | decompileNotification (lp: vol, ~102) = LVN_INSERTITEM | decompileNotification (lp: vol, ~103) = LVN_DELETEITEM | decompileNotification (lp: vol, ~104) = LVN_DELETEALLITEMS | decompileNotification (lp: vol, ~105) = LVN_BEGINLABELEDIT | decompileNotification (lp: vol, ~106) = LVN_ENDLABELEDIT | decompileNotification (lp: vol, ~108) = LVN_COLUMNCLICK | decompileNotification (lp: vol, ~109) = LVN_BEGINDRAG | decompileNotification (lp: vol, ~111) = LVN_BEGINRDRAG | decompileNotification (lp: vol, ~150) = LVN_GETDISPINFO | decompileNotification (lp: vol, ~151) = LVN_SETDISPINFO | decompileNotification (lp: vol, ~155) = LVN_KEYDOWN | decompileNotification (lp: vol, ~157) = LVN_GETINFOTIP | decompileNotification (lp: vol, ~300) = HDN_ITEMCHANGING | decompileNotification (lp: vol, ~301) = HDN_ITEMCHANGED | decompileNotification (lp: vol, ~302) = HDN_ITEMCLICK | decompileNotification (lp: vol, ~303) = HDN_ITEMDBLCLICK | decompileNotification (lp: vol, ~305) = HDN_DIVIDERDBLCLICK | decompileNotification (lp: vol, ~306) = HDN_BEGINTRACK | decompileNotification (lp: vol, ~307) = HDN_ENDTRACK | decompileNotification (lp: vol, ~308) = HDN_TRACK | decompileNotification (lp: vol, ~311) = HDN_ENDDRAG | decompileNotification (lp: vol, ~310) = HDN_BEGINDRAG | decompileNotification (lp: vol, ~309) = HDN_GETDISPINFO | decompileNotification (lp: vol, ~401) = TVN_SELCHANGING | decompileNotification (lp: vol, ~402) = TVN_SELCHANGED | decompileNotification (lp: vol, ~403) = TVN_GETDISPINFO | decompileNotification (lp: vol, ~404) = TVN_SETDISPINFO | decompileNotification (lp: vol, ~405) = TVN_ITEMEXPANDING | decompileNotification (lp: vol, ~406) = TVN_ITEMEXPANDED | decompileNotification (lp: vol, ~407) = TVN_BEGINDRAG | decompileNotification (lp: vol, ~408) = TVN_BEGINRDRAG | decompileNotification (lp: vol, ~409) = TVN_DELETEITEM | decompileNotification (lp: vol, ~410) = TVN_BEGINLABELEDIT | decompileNotification (lp: vol, ~411) = TVN_ENDLABELEDIT | decompileNotification (lp: vol, ~412) = TVN_KEYDOWN | decompileNotification (lp: vol, ~413) = TVN_GETINFOTIP | decompileNotification (lp: vol, ~415) = TVN_SINGLEEXPAND | decompileNotification (lp: vol, ~520) = let val nmt = fromCnmttdispinfo(deref lp) (* Just look at the byte data at the moment. *) in TTN_GETDISPINFO(ref(#3 nmt)) end | decompileNotification (lp: vol, ~521) = TTN_SHOW | decompileNotification (lp: vol, ~522) = TTN_POP | decompileNotification (lp: vol, ~550) = TCN_KEYDOWN | decompileNotification (lp: vol, ~551) = TCN_SELCHANGE | decompileNotification (lp: vol, ~552) = TCN_SELCHANGING | decompileNotification (lp: vol, ~700) = TBN_GETBUTTONINFO | decompileNotification (lp: vol, ~701) = TBN_BEGINDRAG | decompileNotification (lp: vol, ~702) = TBN_ENDDRAG | decompileNotification (lp: vol, ~703) = TBN_BEGINADJUST | decompileNotification (lp: vol, ~704) = TBN_ENDADJUST | decompileNotification (lp: vol, ~705) = TBN_RESET | decompileNotification (lp: vol, ~706) = TBN_QUERYINSERT | decompileNotification (lp: vol, ~707) = TBN_QUERYDELETE | decompileNotification (lp: vol, ~708) = TBN_TOOLBARCHANGE | decompileNotification (lp: vol, ~709) = TBN_CUSTHELP | decompileNotification (lp: vol, ~710) = TBN_DROPDOWN | decompileNotification (lp: vol, ~713) = TBN_HOTITEMCHANGE | decompileNotification (lp: vol, ~714) = TBN_DRAGOUT | decompileNotification (lp: vol, ~715) = TBN_DELETINGBUTTON | decompileNotification (lp: vol, ~716) = TBN_GETDISPINFO | decompileNotification (lp: vol, ~718) = TBN_GETINFOTIP (*<<<*) | decompileNotification (lp: vol, ~722) = UDN_DELTAPOS | decompileNotification (lp: vol, ~832) = RBN_GETOBJECT | decompileNotification (lp: vol, ~833) = RBN_LAYOUTCHANGED | decompileNotification (lp: vol, ~834) = RBN_AUTOSIZE | decompileNotification (lp: vol, ~835) = RBN_BEGINDRAG | decompileNotification (lp: vol, ~836) = RBN_ENDDRAG | decompileNotification (lp: vol, ~837) = RBN_DELETINGBAND | decompileNotification (lp: vol, ~838) = RBN_DELETEDBAND | decompileNotification (lp: vol, ~839) = RBN_CHILDSIZE | decompileNotification (lp: vol, ~800) = CBEN_GETDISPINFO | decompileNotification (lp: vol, ~808) = CBEN_DRAGBEGIN | decompileNotification (lp: vol, ~860) = IPN_FIELDCHANGED | decompileNotification (lp: vol, ~880) = SBN_SIMPLEMODECHANGE | decompileNotification (lp: vol, ~901) = PGN_SCROLL | decompileNotification (lp: vol, ~902) = PGN_CALCSIZE | decompileNotification (lp: vol, code) = NM_OTHER code (* Create a general message. *) fun createMessage (msgId: int, hwnd: HWND, wParam: vol, lParam: vol, time: Time.time, pt: {x: int, y: int}): vol = CInterface.make_struct[ (Cint, toCint msgId), (voidStar, fromHWND hwnd), (Cint, wParam), (Clong, lParam), (Clong, toCint(Time.toMilliseconds time)), (Cint, toCint (#x pt)), (Cint, toCint (#y pt))] fun btoi false = 0 | btoi true = 1 fun compileMessage NULL = (0x0000, toCint 0, toCint 0) | compileMessage ( WM_CREATE { instance, creation, menu, parent, cy, cx, y, x, style, name, class, extendedstyle}) = (0x0001, toCint 0, address(toCcreatestruct(creation, instance, menu, parent, cy, cx, y, x, Style.toWord style, name, class, extendedstyle))) | compileMessage WM_DESTROY = (0x0002, toCint 0, toCint 0) | compileMessage (WM_MOVE {x, y}) = (0x0003, toCint 0, toCuint(MAKELONG(x, y))) | compileMessage (WM_SIZE {flag, width, height}) = (0x0005, toCwmsf flag, toCuint(MAKELONG(width, height))) | compileMessage (WM_ACTIVATE {active, minimize}) = (0x0006, toCuint(MAKELONG(fromWMactive active, btoi minimize)), toCint 0) | compileMessage (WM_SETFOCUS {losing}) = (0x0007, toCint 0, fromHWND losing) | compileMessage (WM_KILLFOCUS {receivefocus}) = (0x0008, toCint 0, fromHWND receivefocus) | compileMessage (WM_ENABLE {enabled}) = (0x000A, toCint (btoi enabled), toCint 0) | compileMessage (WM_SETREDRAW {redrawflag}) = (0x000B, toCint redrawflag, toCint 0) | compileMessage (WM_SETTEXT {text}) = (0x000C, toCint 0, toCstring text) | compileMessage (WM_GETTEXT {length, text}) = (* We have to allocate a buffer big enough to receive the text. *) (0x000D, toCint length, address(alloc(length+1) Cchar)) | compileMessage WM_GETTEXTLENGTH = (0x000E, toCint 0, toCint 0) | compileMessage WM_PAINT = (0x000F, toCint 0, toCint 0) | compileMessage WM_CLOSE = (0x0010, toCint 0, toCint 0) | compileMessage (WM_QUERYENDSESSION { source}) = (0x0011, toCint source, toCint 0) | compileMessage (WM_QUIT {exitcode}) = (0x0012, toCint exitcode, toCint 0) | compileMessage WM_QUERYOPEN = (0x0013, toCint 0, toCint 0) | compileMessage (WM_ERASEBKGND {devicecontext}) = (0x0014, toCint 0, fromHDC devicecontext) | compileMessage WM_SYSCOLORCHANGE = (0x0015, toCint 0, toCint 0) | compileMessage (WM_ENDSESSION {endsession}) = (0x0016, toCint(btoi endsession), toCint 0) | compileMessage (WM_SHOWWINDOW {showflag, statusflag}) = (0x0018, toCint(btoi showflag), toCint statusflag) | compileMessage (WM_SETTINGCHANGE {section_name}) = (0x001A, toCint 0, toCstring section_name) | compileMessage (WM_DEVMODECHANGE {devicename}) = (0x001B, toCint 0, toCstring devicename) | compileMessage (WM_ACTIVATEAPP {active, threadid}) = (0x001B, toCint(btoi active), toCint threadid) | compileMessage WM_FONTCHANGE = (0x001D, toCint 0, toCint 0) | compileMessage WM_TIMECHANGE = (0x001E, toCint 0, toCint 0) | compileMessage WM_CANCELMODE = (0x001F, toCint 0, toCint 0) | compileMessage (WM_SETCURSOR {cursorwindow, hitTest, mousemessage}) = (0x0020, fromHWND cursorwindow, toCuint(MAKELONG(hitTest, mousemessage))) | compileMessage (WM_MOUSEACTIVATE {parent, hitTest, message}) = (0x0021, fromHWND parent, toCuint(MAKELONG(hitTest, message))) | compileMessage WM_CHILDACTIVATE = (0x0022, toCint 0, toCint 0) | compileMessage WM_QUEUESYNC = (0x0023, toCint 0, toCint 0) | compileMessage (WM_GETMINMAXINFO{ maxSize=ref maxSize, maxPosition=ref maxPosition, minTrackSize=ref minTrackSize, maxTrackSize=ref maxTrackSize}) = (0x0024, toCint 0, address(toCminmaxinfo({x=0,y=0}, maxSize, maxPosition, minTrackSize, maxTrackSize))) | compileMessage WM_PAINTICON = (0x0026, toCint 0, toCint 0) | compileMessage (WM_ICONERASEBKGND {devicecontext}) = (0x0027, fromHDC devicecontext, toCint 0) | compileMessage (WM_NEXTDLGCTL {control, handleflag}) = (0x0028, toCint control, toCint(btoi handleflag)) | compileMessage (WM_SPOOLERSTATUS {jobstatus, jobsleft}) = (0x002A, toCint jobstatus, toCint jobsleft) | compileMessage (WM_DRAWITEM{ controlid, ctlType, ctlID, itemID, itemAction,itemState, hItem, hDC, rcItem, itemData}) = (0x002B, toCint controlid, address(toCdrawitemstruct(ctlType, ctlID, itemID, itemAction,itemState, hItem, hDC,rcItem,itemData))) | compileMessage (WM_MEASUREITEM{ controlid, ctlType, ctlID, itemID, itemWidth, itemHeight, itemData}) = (0x002C, toCint controlid, address(toCmeasureitemstruct(ctlType, ctlID, itemID, itemWidth, itemHeight,itemData))) | compileMessage (WM_DELETEITEM{ controlid, ctlType, ctlID, itemID, item, itemData}) = (0x002D, toCint controlid, address(toCdeleteitemstruct(ctlType, ctlID, itemID, item, itemData))) | compileMessage (WM_VKEYTOITEM {virtualKey, caretpos, listbox}) = (0x002E, toCuint(MAKELONG(virtualKey, caretpos)), fromHWND listbox) | compileMessage (WM_CHARTOITEM {key, caretpos, listbox}) = (0x002F, toCuint(MAKELONG(key, caretpos)), fromHWND listbox) | compileMessage (WM_SETFONT {font, redrawflag}) = (0x0030, fromHFONT font, toCint(btoi redrawflag)) | compileMessage WM_GETFONT = (0x0031, toCint 0, toCint 0) | compileMessage (WM_SETHOTKEY {virtualKey}) = (0x0032, toCint virtualKey, toCint 0) | compileMessage WM_GETHOTKEY = (0x0033, toCint 0, toCint 0) | compileMessage WM_QUERYDRAGICON = (0x0037, toCint 0, toCint 0) | compileMessage ( WM_COMPAREITEM{ controlid, ctlType, ctlID, hItem, itemID1,itemData1, itemID2,itemData2}) = (0x0039, toCint controlid, address(toCcompareitemstruct(ctlType, ctlID, hItem, itemID1, itemData1, itemID2,itemData2))) | compileMessage (WM_COMPACTING { compactratio}) = (0x0041, toCint compactratio, toCint 0) | compileMessage ( WM_WINDOWPOSCHANGING{hwnd, front=ref front, x=ref x, y=ref y, width=ref width, height=ref height, flags=ref flags}) = (0x0046, toCint 0, address(toCwindowpos(hwnd, front, x, y, width, height, flags))) | compileMessage (WM_WINDOWPOSCHANGED{hwnd, front, x, y, width, height, flags}) = (0x0047, toCint 0, address(toCwindowpos(hwnd, front, x, y, width, height, flags))) | compileMessage (WM_POWER {powerevent}) = (0x0048, toCint powerevent, toCint 0) | compileMessage (WM_COPYDATA {sender, data, pdata}) = (0x004A, fromHWND sender, address(toCcopydata(data, Word8Vector.length pdata, fromWord8vec pdata))) | compileMessage WM_CANCELJOURNAL = (0x004B, toCint 0, toCint 0) | compileMessage (WM_NOTIFY {idCtrl, from, idFrom, notification}) = (0x004E, toCint idCtrl, compileNotification(from, idFrom, notification)) (* WM_INPUTLANGCHANGEREQUEST 0x0050 WM_INPUTLANGCHANGE 0x0051 WM_TCARD 0x0052 WM_USERCHANGED 0x0054 WM_NOTIFYFORMAT 0x0055 WM_STYLECHANGING 0x007C WM_STYLECHANGED 0x007D *) | compileMessage (WM_HELP {ctrlId, itemHandle, contextId, mousePos}) = let val (ctype, handl) = case itemHandle of MenuHandle m => (2, intOfHandle m) | WindowHandle w => (1, intOfHandle w) in (0x0053, toCint 0, address(toChelpinfo(sizeof helpStruct, ctype, ctrlId, handl, contextId, mousePos))) end | compileMessage (WM_CONTEXTMENU { hwnd, xPos, yPos }) = (0x007B, fromHWND hwnd, toCuint(MAKELONG(xPos, yPos))) | compileMessage (WM_DISPLAYCHANGE { bitsPerPixel, xScreen, yScreen}) = (0x007E, toCint bitsPerPixel, toCuint(MAKELONG(xScreen, yScreen))) | compileMessage (WM_GETICON {big}) = (0x007F, toCint(btoi big), toClong 0) | compileMessage (WM_SETICON { big, icon }) = (0x0080, toCint(btoi big), toClong(intOfHandle icon)) | compileMessage ( WM_NCCREATE { instance, creation, menu, parent, cy, cx, y, x, style, name, class, extendedstyle}) = (0x0081, toCint 0, address(toCcreatestruct(creation, instance, menu, parent, cy, cx, y, x, Style.toWord style, name, class, extendedstyle))) | compileMessage WM_NCDESTROY = (0x0082, toCint 0, toCint 0) | compileMessage ( WM_NCCALCSIZE {validarea, newrect=ref newrect, oldrect, oldclientarea, hwnd, insertAfter, x, y, cx, cy, style}) = if validarea then (0x0083, toCint 1, address(toCncalcsizestruct(newrect,oldrect,oldclientarea, (hwnd,insertAfter,x,y,cx,cy, style)))) else (0x0083, toCint 0, address(toCrect newrect)) | compileMessage (WM_NCHITTEST {x, y}) = (0x0084, toCint 0, toCuint(MAKELONG(x, y))) | compileMessage (WM_NCPAINT {region}) = (0x0085, fromHRGN region, toCint 0) | compileMessage (WM_NCACTIVATE {active}) = (0x0086, toCint(btoi active), toCint 0) | compileMessage WM_GETDLGCODE = (0x0087, toCint 0, toCint 0) | compileMessage (WM_NCMOUSEMOVE {hitTest, x, y}) = (0x00A0, toCint hitTest, toCuint(MAKELONG(x, y))) | compileMessage (WM_NCLBUTTONDOWN {hitTest, x, y}) = (0x00A1, toCint hitTest, toCuint(MAKELONG(x, y))) | compileMessage (WM_NCLBUTTONUP {hitTest, x, y}) = (0x00A2, toCint hitTest, toCuint(MAKELONG(x, y))) | compileMessage (WM_NCLBUTTONDBLCLK {hitTest, x, y}) = (0x00A3, toCint hitTest, toCuint(MAKELONG(x, y))) | compileMessage (WM_NCRBUTTONDOWN {hitTest, x, y}) = (0x00A4, toCint hitTest, toCuint(MAKELONG(x, y))) | compileMessage (WM_NCRBUTTONUP {hitTest, x, y}) = (0x00A5, toCint hitTest, toCuint(MAKELONG(x, y))) | compileMessage (WM_NCRBUTTONDBLCLK {hitTest, x, y}) = (0x00A6, toCint hitTest, toCuint(MAKELONG(x, y))) | compileMessage (WM_NCMBUTTONDOWN {hitTest, x, y}) = (0x00A7, toCint hitTest, toCuint(MAKELONG(x, y))) | compileMessage (WM_NCMBUTTONUP {hitTest, x, y}) = (0x00A8, toCint hitTest, toCuint(MAKELONG(x, y))) | compileMessage (WM_NCMBUTTONDBLCLK {hitTest, x, y}) = (0x00A9, toCint hitTest, toCuint(MAKELONG(x, y))) (* Edit control messages *) | compileMessage (EM_GETSEL{startPos=ref s, endPos=ref e}) = (0x00B0, address(toCint s), address(toCint e)) | compileMessage (EM_SETSEL{startPos, endPos}) = (0x00B1, toCint startPos, toCint endPos) | compileMessage (EM_GETRECT{rect=ref r}) = (0x00B2, toCint 0, address(toCrect r)) | compileMessage (EM_SETRECT{rect}) = (0x00B3, toCint 0, address(toCrect rect)) | compileMessage (EM_SETRECTNP{rect}) = (0x00B4, toCint 0, address(toCrect rect)) | compileMessage (EM_SCROLL{action}) = (0x00B5, toCsd action, toCint 0) | compileMessage (EM_LINESCROLL{xScroll, yScroll}) = (0x00B6, toCint xScroll, toCint yScroll) | compileMessage EM_SCROLLCARET = (0x00B7, toCint 0, toCint 0) | compileMessage EM_GETMODIFY = (0x00B8, toCint 0, toCint 0) | compileMessage (EM_SETMODIFY{modified}) = (0x00B9, toCint(btoi modified), toCint 0) | compileMessage EM_GETLINECOUNT = (0x00BA, toCint 0, toCint 0) | compileMessage (EM_LINEINDEX{line}) = (0x00BB, toCint line, toCint 0) (* EM_SETHANDLE 0x00BC *) | compileMessage EM_GETTHUMB = (0x00BE, toCint 0, toCint 0) | compileMessage (EM_LINELENGTH{index}) = (0x00BB, toCint index, toCint 0) | compileMessage (EM_REPLACESEL{canUndo, text}) = (0x00C2, toCint(btoi canUndo), toCstring text) | compileMessage (EM_GETLINE {lineNo, size, result}) = (* We have to allocate a buffer big enough to receive the text and set the first word to the length of the buffer. *) let val vec = alloc (Int.max(size+1, sizeof Cint)) Cchar in assign Cint vec (toCint(size+1)); (0x00C5, toCint lineNo, address vec) end | compileMessage (EM_LIMITTEXT{limit}) = (0x00C5, toCint limit, toCint 0) | compileMessage EM_CANUNDO = (0x00C6, toCint 0, toCint 0) | compileMessage EM_UNDO = (0x00C7, toCint 0, toCint 0) | compileMessage (EM_FMTLINES{addEOL}) = (0x00C8, toCint(btoi addEOL), toCint 0) | compileMessage (EM_LINEFROMCHAR{index}) = (0x00C9, toCint index, toCint 0) | compileMessage (EM_SETTABSTOPS{tabs}) = let val cTabs = List.length tabs val vec = alloc cTabs Cint fun setVec(tab, i) = (assign Cint vec (toCint tab); i+1) in List.foldl setVec 0 tabs; (0x00CB, toCint cTabs, address vec) end | compileMessage (EM_SETPASSWORDCHAR{ch}) = (0x00CC, toCchar ch, toCint 0) | compileMessage EM_EMPTYUNDOBUFFER = (0x00CD, toCint 0, toCint 0) | compileMessage EM_GETFIRSTVISIBLELINE = (0x00CE, toCint 0, toCint 0) | compileMessage (EM_SETREADONLY{readOnly}) = (0x00CF, toCint(btoi readOnly), toCint 0) (* EM_SETWORDBREAKPROC 0x00D0 EM_GETWORDBREAKPROC 0x00D1 *) | compileMessage EM_GETPASSWORDCHAR = (0x00D2, toCint 0, toCint 0) | compileMessage (EM_SETMARGINS{margins}) = ( case margins of UseFontInfo => (0x00D3, toCint 0xffff, toCint 0) | Margins{left, right} => let val (b0, lo) = case left of SOME l => (1, l) | NONE => (0, 0) val (b1, hi) = case right of SOME r => (2, r) | NONE => (0, 0) in (0x00D3, toCint (IntInf.orb(b0, b1)), toCuint(MAKELONG(hi,lo))) end ) (* #if(WINVER >= 0x0400) EM_SETMARGINS 0x00D3 *) | compileMessage EM_GETMARGINS = (0x00D4, toCint 0, toCint 0) | compileMessage EM_GETLIMITTEXT = (0x00D5, toCint 0, toCint 0) | compileMessage (EM_POSFROMCHAR {index}) = (0x00D6, toCint index, toCint 0) | compileMessage (EM_CHARFROMPOS{point = {x,y}}) = let val v = alloc 1 Clong in assign Cint v (toCuint(MAKELONG(x,y))); (0x00D7, toCint 0, address v) end (* Scroll bar messages *) | compileMessage (SBM_SETPOS {pos, redraw}) = (0x00E0, toCint pos, toCint(btoi redraw)) | compileMessage SBM_GETPOS = (0x00E1, toCint 0, toCint 0) | compileMessage (SBM_SETRANGE {minPos, maxPos}) = (0x00E2, toCint minPos, toCint maxPos) | compileMessage (SBM_SETRANGEREDRAW {minPos, maxPos}) = (0x00E6, toCint minPos, toCint maxPos) | compileMessage (SBM_GETRANGE {minPos = ref min, maxPos = ref max}) = (0x00E3, address(toCint min), address(toCint max)) | compileMessage (SBM_ENABLE_ARROWS flags) = (0x00E4, toCesbf flags, toCint 0) | compileMessage (SBM_SETSCROLLINFO {info, options}) = (0x00E9, toCint 0, address(toCscrollinfo(info, options))) | compileMessage (SBM_GETSCROLLINFO {info = ref info, options}) = (0x00EA, toCint 0, address(toCscrollinfo(info, options))) (* Button control messages *) | compileMessage BM_GETCHECK = (0x00F0, toCint 0, toCint 0) | compileMessage (BM_SETCHECK{state}) = (0x00F1, toCint state, toCint 0) | compileMessage BM_GETSTATE = (0x00F2, toCint 0, toCint 0) | compileMessage (BM_SETSTATE{highlight}) = (0x00F3, toCint(btoi highlight), toCint 0) | compileMessage (BM_SETSTYLE{redraw, style}) = (0x00F3, toCint(LargeWord.toInt(Style.toWord style)), toCint(btoi redraw)) | compileMessage BM_CLICK = (0x00F5, toCint 0, toCint 0) | compileMessage (BM_GETIMAGE{imageType}) = (0x00F6, toCit imageType, toCint 0) | compileMessage (BM_SETIMAGE{imageType, image}) = (0x00F7, toCit imageType, toCint(hgdiAsInt image)) | compileMessage (WM_KEYDOWN {virtualKey, data}) = (0x0100, toCint virtualKey, toCint data) | compileMessage (WM_KEYUP {virtualKey, data}) = (0x0101, toCint virtualKey, toCint data) | compileMessage (WM_CHAR {charCode, data}) = (0x0102, toCchar charCode, toCint data) | compileMessage (WM_DEADCHAR {charCode, data}) = (0x0103, toCchar charCode, toCint data) | compileMessage (WM_SYSKEYDOWN {virtualKey, data}) = (0x0104, toCint virtualKey, toCint data) | compileMessage (WM_SYSKEYUP {virtualKey, data}) = (0x0105, toCint virtualKey, toCint data) | compileMessage (WM_SYSCHAR {charCode, data}) = (0x0106, toCchar charCode, toCint data) | compileMessage (WM_SYSDEADCHAR {charCode, data}) = (0x0107, toCchar charCode, toCint data) (* WM_IME_STARTCOMPOSITION 0x010D WM_IME_ENDCOMPOSITION 0x010E WM_IME_COMPOSITION 0x010F WM_IME_KEYLAST 0x010F *) | compileMessage (WM_INITDIALOG { dialog, initdata}) = (0x0110, fromHWND dialog, toCint initdata) | compileMessage (WM_COMMAND {notifyCode, wId, control}) = (0x0111, toCuint(MAKELONG(wId, notifyCode)), fromHWND control) | compileMessage (WM_SYSCOMMAND {commandvalue, sysBits, p={x,y}}) = (0x0112, toCuint(IntInf.orb(sysBits, MessageBase.fromSysCommand commandvalue)), toCuint(MAKELONG(x,y))) | compileMessage (WM_TIMER {timerid}) = (0x0113, toCint timerid, toCint 0) | compileMessage (WM_HSCROLL {value, position, scrollbar}) = (0x0114, toCuint(MAKELONG(fromCint(toCsd value), position)), fromHWND scrollbar) | compileMessage (WM_VSCROLL {value, position, scrollbar}) = (0x0115, toCuint(MAKELONG(fromCint(toCsd value), position)), fromHWND scrollbar) | compileMessage (WM_INITMENU {menu}) = (0x0116, fromHMENU menu, toCint 0) | compileMessage (WM_INITMENUPOPUP {menupopup, itemposition, isSystemMenu}) = (0x0117, fromHMENU menupopup, toCuint(MAKELONG(itemposition, btoi isSystemMenu))) | compileMessage (WM_MENUSELECT {menuitem, menuflags, menu}) = (0x011F, toCuint(MAKELONG(menuitem, MenuBase.fromMenuFlagSet menuflags)), fromHMENU menu) | compileMessage (WM_MENUCHAR { ch, menuflag, menu}) = (0x0120, toCuint(MAKELONG(ord ch, MenuBase.fromMenuFlag menuflag)), fromHMENU menu) | compileMessage (WM_ENTERIDLE { flag, window}) = (0x0121, toCint flag, fromHWND window) | compileMessage (WM_CTLCOLORMSGBOX { displaycontext, messagebox}) = (0x0132, fromHDC displaycontext, fromHWND messagebox) | compileMessage (WM_CTLCOLOREDIT { displaycontext, editcontrol}) = (0x0133, fromHDC displaycontext, fromHWND editcontrol) | compileMessage (WM_CTLCOLORLISTBOX { displaycontext, listbox}) = (0x0134, fromHDC displaycontext, fromHWND listbox) | compileMessage (WM_CTLCOLORBTN { displaycontext, button}) = (0x0135, fromHDC displaycontext, fromHWND button) | compileMessage (WM_CTLCOLORDLG { displaycontext, dialogbox}) = (0x0136, fromHDC displaycontext, fromHWND dialogbox) | compileMessage (WM_CTLCOLORSCROLLBAR { displaycontext, scrollbar}) = (0x0137, fromHDC displaycontext, fromHWND scrollbar) | compileMessage (WM_CTLCOLORSTATIC { displaycontext, staticcontrol}) = (0x0138, fromHDC displaycontext, fromHWND staticcontrol) (* Combobox messages. *) | compileMessage (CB_GETEDITSEL{startPos=ref s, endPos=ref e}) = (0x0140, address(toCint s), address(toCint e)) | compileMessage (CB_LIMITTEXT{limit}) = (0x0141, toCint limit, toCint 0) | compileMessage (CB_SETEDITSEL{startPos, endPos}) = (0x0142, toCint 0, toCuint(MAKELONG(startPos, endPos))) | compileMessage (CB_ADDSTRING{text}) = (0x0143, toCint 0, toCstring text) | compileMessage (CB_DELETESTRING{index}) = (0x0144, toCint index, toCint 0) | compileMessage (CB_DIR{attrs, fileSpec}) = (0x0145, toCcbal attrs, toCstring fileSpec) | compileMessage CB_GETCOUNT = (0x0146, toCint 0, toCint 0) | compileMessage CB_GETCURSEL = (0x0147, toCint 0, toCint 0) | compileMessage (CB_GETLBTEXT {length, index, text}) = (* This is messy. There's no actual argument that passes the size of the buffer so we have to add an extra argument to the ML message to pass it. *) (0x0148, toCint index, address(alloc(length+1) Cchar)) | compileMessage (CB_GETLBTEXTLEN{index}) = (0x0149, toCint index, toCint 0) | compileMessage (CB_INSERTSTRING{text, index}) = (0x014A, toCint index, toCstring text) | compileMessage CB_RESETCONTENT = (0x014B, toCint 0, toCint 0) | compileMessage (CB_FINDSTRING{text, indexStart}) = (0x014C, toCint indexStart, toCstring text) | compileMessage (CB_SELECTSTRING{text, indexStart}) = (0x014D, toCint indexStart, toCstring text) | compileMessage (CB_SETCURSEL{index}) = (0x014E, toCint index, toCint 0) | compileMessage (CB_SHOWDROPDOWN{show}) = (0x014F, toCint(btoi show), toCint 0) | compileMessage (CB_GETITEMDATA{index}) = (0x0150, toCint index, toCint 0) | compileMessage (CB_SETITEMDATA{index, data}) = (0x0151, toCint index, toCint data) | compileMessage (CB_GETDROPPEDCONTROLRECT{rect = ref r}) = (0x0152, toCint 0, address(toCrect r)) | compileMessage (CB_SETITEMHEIGHT{index, height}) = (0x0153, toCint index, toCint height) | compileMessage (CB_GETITEMHEIGHT{index}) = (0x0154, toCint index, toCint 0) | compileMessage (CB_SETEXTENDEDUI{extended}) = (0x0155, toCint(btoi extended), toCint 0) | compileMessage CB_GETEXTENDEDUI = (0x0156, toCint 0, toCint 0) | compileMessage CB_GETDROPPEDSTATE = (0x0157, toCint 0, toCint 0) | compileMessage (CB_FINDSTRINGEXACT{text, indexStart}) = (0x0158, toCint indexStart, toCstring text) | compileMessage (CB_SETLOCALE{locale}) = (0x0159, toCint locale, toCint 0) | compileMessage CB_GETLOCALE = (0x015A, toCint 0, toCint 0) | compileMessage CB_GETTOPINDEX = (0x015b, toCint 0, toCint 0) | compileMessage (CB_SETTOPINDEX{index}) = (0x015c, toCint index, toCint 0) | compileMessage CB_GETHORIZONTALEXTENT = (0x015d, toCint 0, toCint 0) | compileMessage (CB_SETHORIZONTALEXTENT{extent}) = (0x015e, toCint extent, toCint 0) | compileMessage CB_GETDROPPEDWIDTH = (0x015f, toCint 0, toCint 0) | compileMessage (CB_SETDROPPEDWIDTH{width}) = (0x0160, toCint width, toCint 0) | compileMessage (CB_INITSTORAGE{items, bytes}) = (0x0161, toCint items, toCint bytes) (* Static control messages. *) | compileMessage (STM_SETICON{icon}) = (0x0170, toCint(hgdiAsInt icon), toCint 0) | compileMessage STM_GETICON = (0x0171, toCint 0, toCint 0) | compileMessage (STM_SETIMAGE{imageType, image}) = (0x0172, toCit imageType, toCint(hgdiAsInt image)) | compileMessage (STM_GETIMAGE{imageType}) = (0x0173, toCit imageType, toCint 0) (* Listbox messages *) | compileMessage (LB_ADDSTRING{text}) = (0x0180, toCint 0, toCstring text) | compileMessage (LB_INSERTSTRING{text, index}) = (0x0181, toCint index, toCstring text) | compileMessage (LB_DELETESTRING{index}) = (0x0182, toCint index, toCint 0) | compileMessage (LB_SELITEMRANGEEX{first, last}) = (0x0183, toCint first, toCint last) | compileMessage LB_RESETCONTENT = (0x0184, toCint 0, toCint 0) | compileMessage (LB_SETSEL{select, index}) = (0x0185, toCint(btoi select), toCint index) | compileMessage (LB_SETCURSEL{index}) = (0x0186, toCint index, toCint 0) | compileMessage (LB_GETSEL{index}) = (0x0187, toCint index, toCint 0) | compileMessage LB_GETCURSEL = (0x0188, toCint 0, toCint 0) | compileMessage (LB_GETTEXT {length, index, text}) = (* This is messy. There's no actual argument that passes the size of the buffer so we have to add an extra argument to the ML message to pass it. *) (0x0189, toCint index, address(alloc (length+1) Cchar)) | compileMessage (LB_GETTEXTLEN{index}) = (0x018A, toCint index, toCint 0) | compileMessage LB_GETCOUNT = (0x018B, toCint 0, toCint 0) | compileMessage (LB_SELECTSTRING{text, indexStart}) = (0x018C, toCint indexStart, toCstring text) | compileMessage (LB_DIR{attrs, fileSpec}) = (0x018D, toCcbal attrs, toCstring fileSpec) | compileMessage LB_GETTOPINDEX = (0x018E, toCint 0, toCint 0) | compileMessage (LB_FINDSTRING{text, indexStart}) = (0x018F, toCint indexStart, toCstring text) | compileMessage LB_GETSELCOUNT = (0x0190, toCint 0, toCint 0) | compileMessage (LB_GETSELITEMS{itemCount, ...}) = (* Allocate a buffer to receive the items. Set each element of the buffer to ~1 so that the values are defined if not all of them are set. *) let val v = alloc itemCount Cint fun fill a 0 = () | fill a n = (assign Cint a (toCint ~1); fill (offset 1 Cint a) (n-1)) in fill v itemCount; (0x0191, toCint itemCount, address v) end | compileMessage (LB_SETTABSTOPS{tabs}) = let val cTabs = List.length tabs val vec = alloc cTabs Cint fun setVec(tab, i) = (assign Cint vec (toCint tab); i+1) in List.foldl setVec 0 tabs; (0x0192, toCint cTabs, address vec) end | compileMessage LB_GETHORIZONTALEXTENT = (0x0193, toCint 0, toCint 0) | compileMessage (LB_SETHORIZONTALEXTENT{extent}) = (0x0194, toCint extent, toCint 0) | compileMessage (LB_SETCOLUMNWIDTH{column}) = (0x0195, toCint column, toCint 0) | compileMessage (LB_ADDFILE{fileName}) = (0x0196, toCint 0, toCstring fileName) | compileMessage (LB_SETTOPINDEX{index}) = (0x0197, toCint index, toCint 0) | compileMessage (LB_GETITEMRECT{rect = ref r, index}) = (0x0198, toCint index, address(toCrect r)) | compileMessage (LB_GETITEMDATA{index}) = (0x0199, toCint index, toCint 0) | compileMessage (LB_SETITEMDATA{index, data}) = (0x019A, toCint index, toCint data) | compileMessage (LB_SELITEMRANGE{select, first, last}) = (0x019B, toCint(btoi select), toCuint(MAKELONG(first, last))) | compileMessage (LB_SETANCHORINDEX{index}) = (0x019C, toCint index, toCint 0) | compileMessage LB_GETANCHORINDEX = (0x019D, toCint 0, toCint 0) | compileMessage (LB_SETCARETINDEX{index, scroll}) = (0x019E, toCint index, toCint(btoi scroll)) | compileMessage LB_GETCARETINDEX = (0x019F, toCint 0, toCint 0) | compileMessage (LB_SETITEMHEIGHT{index, height}) = (0x01A0, toCint index, toCuint(MAKELONG(height, 0))) | compileMessage (LB_GETITEMHEIGHT{index}) = (0x01A1, toCint index, toCint 0) | compileMessage (LB_FINDSTRINGEXACT{text, indexStart}) = (0x01A2, toCint indexStart, toCstring text) | compileMessage (LB_SETLOCALE{locale}) = (0x01A5, toCint locale, toCint 0) | compileMessage LB_GETLOCALE = (0x01A6, toCint 0, toCint 0) | compileMessage (LB_SETCOUNT{items}) = (0x01A7, toCint items, toCint 0) | compileMessage (LB_INITSTORAGE{items, bytes}) = (0x01A8, toCint items, toCint bytes) | compileMessage (LB_ITEMFROMPOINT { point = {x, y}}) = (0x01A9, toCint 0, toCuint(MAKELONG(x,y))) | compileMessage (WM_MOUSEMOVE { keyflags, x, y}) = (0x0200, toCmkf keyflags, toCuint(MAKELONG(x,y))) | compileMessage (WM_LBUTTONDOWN { keyflags, x, y}) = (0x0201, toCmkf keyflags, toCuint(MAKELONG(x,y))) | compileMessage (WM_LBUTTONUP { keyflags, x, y}) = (0x02022, toCmkf keyflags, toCuint(MAKELONG(x,y))) | compileMessage (WM_LBUTTONDBLCLK { keyflags, x, y}) = (0x0203, toCmkf keyflags, toCuint(MAKELONG(x,y))) | compileMessage (WM_RBUTTONDOWN { keyflags, x, y}) = (0x0204, toCmkf keyflags, toCuint(MAKELONG(x,y))) | compileMessage (WM_RBUTTONUP { keyflags, x, y}) = (0x02025, toCmkf keyflags, toCuint(MAKELONG(x,y))) | compileMessage (WM_RBUTTONDBLCLK { keyflags, x, y}) = (0x0206, toCmkf keyflags, toCuint(MAKELONG(x,y))) | compileMessage (WM_MBUTTONDOWN { keyflags, x, y}) = (0x0207, toCmkf keyflags, toCuint(MAKELONG(x,y))) | compileMessage (WM_MBUTTONUP { keyflags, x, y}) = (0x02028, toCmkf keyflags, toCuint(MAKELONG(x,y))) | compileMessage (WM_MBUTTONDBLCLK { keyflags, x, y}) = (0x0209, toCmkf keyflags, toCuint(MAKELONG(x,y))) (* WM_MOUSEWHEEL 0x020A *) | compileMessage (WM_PARENTNOTIFY { eventflag, idchild, value}) = (0x0210, toCuint(MAKELONG(eventflag,idchild)), toCint value) | compileMessage (WM_ENTERMENULOOP {istrack}) = (0x0211, toCint(btoi istrack), toCint 0) | compileMessage (WM_EXITMENULOOP {istrack}) = (0x0212, toCint(btoi istrack), toCint 0) (* WM_NEXTMENU 0x0213 WM_SIZING 0x0214 *) | compileMessage (WM_CAPTURECHANGED {newCapture}) = (0x0215, toCint 0, fromHWND newCapture) (* WM_MOVING 0x0216 WM_POWERBROADCAST 0x0218 WM_DEVICECHANGE 0x0219 *) | compileMessage (WM_MDICREATE{class, title, instance, x, y, cx, cy, style, cdata}) = (0x0220, toCint 0, address(toCmdicreatestruct(class,title,instance,x,y,cx,cy,style,cdata))) | compileMessage (WM_MDIDESTROY{child}) = (0x0221, fromHWND child, toCint 0) | compileMessage (WM_MDIRESTORE{child}) = (0x0223, fromHWND child, toCint 0) | compileMessage (WM_MDINEXT{child, flagnext}) = (0x0224, fromHWND child, toCint(btoi flagnext)) | compileMessage (WM_MDIMAXIMIZE{child}) = (0x0225, fromHWND child, toCint 0) | compileMessage (WM_MDITILE{tilingflag}) = (0x0226, toCmdif tilingflag, toCint 0) | compileMessage (WM_MDICASCADE{skipDisabled}) = (0x0227, toCint(if skipDisabled then 2 else 0), toCint 0) | compileMessage WM_MDIICONARRANGE = (0x0228, toCint 0, toCint 0) | compileMessage WM_MDIGETACTIVE = (0x0229, toCint 0, toCint 0 (* MUST be null *)) | compileMessage (WM_MDISETMENU{frameMenu, windowMenu}) = (0x0230, fromHMENU frameMenu, fromHMENU windowMenu) | compileMessage WM_ENTERSIZEMOVE = (0x0231, toCint 0, toCint 0) | compileMessage WM_EXITSIZEMOVE = (0x0232, toCint 0, toCint 0) | compileMessage (WM_DROPFILES{hDrop}) = (0x0233, fromHDROP hDrop, toCint 0) | compileMessage WM_MDIREFRESHMENU = (0x0234, toCint 0, toCint 0) (* WM_IME_SETCONTEXT 0x0281 WM_IME_NOTIFY 0x0282 WM_IME_CONTROL 0x0283 WM_IME_COMPOSITIONFULL 0x0284 WM_IME_SELECT 0x0285 WM_IME_CHAR 0x0286 WM_IME_KEYDOWN 0x0290 WM_IME_KEYUP 0x0291 WM_MOUSEHOVER 0x02A1 WM_MOUSELEAVE 0x02A3 *) | compileMessage WM_CUT = (0x0300, toCint 0, toCint 0) | compileMessage WM_COPY = (0x0301, toCint 0, toCint 0) | compileMessage WM_PASTE = (0x0302, toCint 0, toCint 0) | compileMessage WM_CLEAR = (0x0303, toCint 0, toCint 0) | compileMessage WM_UNDO = (0x0304, toCint 0, toCint 0) | compileMessage (WM_RENDERFORMAT {format}) = (0x0305, toCcbf format, toCint 0) | compileMessage WM_RENDERALLFORMATS = (0x0306, toCint 0, toCint 0) | compileMessage WM_DESTROYCLIPBOARD = (0x0307, toCint 0, toCint 0) | compileMessage WM_DRAWCLIPBOARD = (0x0308, toCint 0, toCint 0) | compileMessage (WM_PAINTCLIPBOARD{clipboard}) = (0x030A, fromHWND clipboard, toCint 0) | compileMessage (WM_VSCROLLCLIPBOARD{viewer, code, position}) = (0x030A, fromHWND viewer, toCuint(MAKELONG(code, position))) | compileMessage (WM_SIZECLIPBOARD{viewer}) = (0x030B, toCint 0, fromHWND viewer) | compileMessage (WM_ASKCBFORMATNAME {length, formatName}) = (* We have to allocate a buffer big enough to receive the text. *) (0x030C, toCint length, address(alloc(length+1) Cchar)) | compileMessage (WM_CHANGECBCHAIN{removed, next}) = (0x030D, fromHWND removed, fromHWND next) | compileMessage (WM_HSCROLLCLIPBOARD{viewer, code, position}) = (0x030E, fromHWND viewer, toCuint(MAKELONG(code, position))) | compileMessage WM_QUERYNEWPALETTE = (0x030F, toCint 0, toCint 0) | compileMessage (WM_PALETTEISCHANGING{realize}) = (0x0310, fromHWND realize, toCint 0) | compileMessage (WM_PALETTECHANGED{palChg}) = (0x0311, fromHWND palChg, toCint 0) | compileMessage (WM_HOTKEY{id}) = (0x0312, toCint id, toCint 0) | compileMessage (WM_PRINT{hdc, flags}) = (0x0317, fromHDC hdc, toCwmpl flags) | compileMessage (WM_PRINTCLIENT{hdc, flags}) = (0x0318, fromHDC hdc, toCwmpl flags) | compileMessage (FINDMSGSTRING{flags, findWhat, replaceWith}) = let val vec = alloc 10 Cint in assign Clong (offset 0 Clong vec) (toCint(10 * sizeof Cint)); assign Clong (offset 3 Clong vec) (toCuint(LargeWord.toInt( FindReplaceFlags.toWord flags))); assign Clong (offset 4 Clong vec) (toCstring findWhat); assign Clong (offset 5 Clong vec) (toCstring replaceWith); (RegisterMessage "commdlg_FindReplace", toCint 0, vec) end | compileMessage (WM_USER{uMsg, wParam, lParam}) = (uMsg, toCint wParam, toCint lParam) | compileMessage (WM_APP{uMsg, wParam, lParam}) = (uMsg, toCint wParam, toCint lParam) | compileMessage (WM_REGISTERED{uMsg, wParam, lParam}) = (uMsg, toCint wParam, toCint lParam) and compileNotification (from, idFrom, NM_OUTOFMEMORY) = address(toCnmhdr(from, idFrom, ~1)) | compileNotification (from, idFrom, NM_CLICK) = address(toCnmhdr(from, idFrom, ~2)) | compileNotification (from, idFrom, NM_DBLCLK) = address(toCnmhdr(from, idFrom, ~3)) | compileNotification (from, idFrom, NM_RETURN) = address(toCnmhdr(from, idFrom, ~4)) | compileNotification (from, idFrom, NM_RCLICK) = address(toCnmhdr(from, idFrom, ~5)) | compileNotification (from, idFrom, NM_RDBLCLK) = address(toCnmhdr(from, idFrom, ~6)) | compileNotification (from, idFrom, NM_SETFOCUS) = address(toCnmhdr(from, idFrom, ~7)) | compileNotification (from, idFrom, NM_KILLFOCUS) = address(toCnmhdr(from, idFrom, ~8)) | compileNotification (from, idFrom, NM_CUSTOMDRAW) = address(toCnmhdr(from, idFrom, ~12)) | compileNotification (from, idFrom, NM_HOVER) = address(toCnmhdr(from, idFrom, ~13)) | compileNotification (from, idFrom, NM_NCHITTEST) = address(toCnmhdr(from, idFrom, ~14)) | compileNotification (from, idFrom, NM_KEYDOWN) = address(toCnmhdr(from, idFrom, ~15)) | compileNotification (from, idFrom, NM_RELEASEDCAPTURE) = address(toCnmhdr(from, idFrom, ~16)) | compileNotification (from, idFrom, NM_SETCURSOR) = address(toCnmhdr(from, idFrom, ~17)) | compileNotification (from, idFrom, NM_CHAR) = address(toCnmhdr(from, idFrom, ~18)) | compileNotification (from, idFrom, NM_TOOLTIPSCREATED) = address(toCnmhdr(from, idFrom, ~19)) | compileNotification (from, idFrom, NM_LDOWN) = address(toCnmhdr(from, idFrom, ~20)) | compileNotification (from, idFrom, NM_RDOWN) = address(toCnmhdr(from, idFrom, ~21)) | compileNotification (from, idFrom, NM_THEMECHANGED) = address(toCnmhdr(from, idFrom, ~22)) | compileNotification (from, idFrom, LVN_ITEMCHANGING) = address(toCnmhdr(from, idFrom, ~100)) | compileNotification (from, idFrom, LVN_ITEMCHANGED) = address(toCnmhdr(from, idFrom, ~101)) | compileNotification (from, idFrom, LVN_INSERTITEM) = address(toCnmhdr(from, idFrom, ~102)) | compileNotification (from, idFrom, LVN_DELETEITEM) = address(toCnmhdr(from, idFrom, ~103)) | compileNotification (from, idFrom, LVN_DELETEALLITEMS) = address(toCnmhdr(from, idFrom, ~104)) | compileNotification (from, idFrom, LVN_BEGINLABELEDIT) = address(toCnmhdr(from, idFrom, ~105)) | compileNotification (from, idFrom, LVN_ENDLABELEDIT) = address(toCnmhdr(from, idFrom, ~106)) | compileNotification (from, idFrom, LVN_COLUMNCLICK) = address(toCnmhdr(from, idFrom, ~108)) | compileNotification (from, idFrom, LVN_BEGINDRAG) = address(toCnmhdr(from, idFrom, ~109)) | compileNotification (from, idFrom, LVN_BEGINRDRAG) = address(toCnmhdr(from, idFrom, ~111)) | compileNotification (from, idFrom, LVN_GETDISPINFO) = address(toCnmhdr(from, idFrom, ~150)) | compileNotification (from, idFrom, LVN_SETDISPINFO) = address(toCnmhdr(from, idFrom, ~151)) | compileNotification (from, idFrom, LVN_KEYDOWN) = address(toCnmhdr(from, idFrom, ~155)) | compileNotification (from, idFrom, LVN_GETINFOTIP) = address(toCnmhdr(from, idFrom, ~157)) | compileNotification (from, idFrom, HDN_ITEMCHANGING) = address(toCnmhdr(from, idFrom, ~300)) | compileNotification (from, idFrom, HDN_ITEMCHANGED) = address(toCnmhdr(from, idFrom, ~301)) | compileNotification (from, idFrom, HDN_ITEMCLICK) = address(toCnmhdr(from, idFrom, ~302)) | compileNotification (from, idFrom, HDN_ITEMDBLCLICK) = address(toCnmhdr(from, idFrom, ~303)) | compileNotification (from, idFrom, HDN_DIVIDERDBLCLICK) = address(toCnmhdr(from, idFrom, ~305)) | compileNotification (from, idFrom, HDN_BEGINTRACK) = address(toCnmhdr(from, idFrom, ~306)) | compileNotification (from, idFrom, HDN_ENDTRACK) = address(toCnmhdr(from, idFrom, ~307)) | compileNotification (from, idFrom, HDN_TRACK) = address(toCnmhdr(from, idFrom, ~308)) | compileNotification (from, idFrom, HDN_ENDDRAG) = address(toCnmhdr(from, idFrom, ~311)) | compileNotification (from, idFrom, HDN_BEGINDRAG) = address(toCnmhdr(from, idFrom, ~310)) | compileNotification (from, idFrom, HDN_GETDISPINFO) = address(toCnmhdr(from, idFrom, ~309)) | compileNotification (from, idFrom, TVN_SELCHANGING) = address(toCnmhdr(from, idFrom, ~401)) | compileNotification (from, idFrom, TVN_SELCHANGED) = address(toCnmhdr(from, idFrom, ~402)) | compileNotification (from, idFrom, TVN_GETDISPINFO) = address(toCnmhdr(from, idFrom, ~403)) | compileNotification (from, idFrom, TVN_SETDISPINFO) = address(toCnmhdr(from, idFrom, ~404)) | compileNotification (from, idFrom, TVN_ITEMEXPANDING) = address(toCnmhdr(from, idFrom, ~405)) | compileNotification (from, idFrom, TVN_ITEMEXPANDED) = address(toCnmhdr(from, idFrom, ~406)) | compileNotification (from, idFrom, TVN_BEGINDRAG) = address(toCnmhdr(from, idFrom, ~407)) | compileNotification (from, idFrom, TVN_BEGINRDRAG) = address(toCnmhdr(from, idFrom, ~408)) | compileNotification (from, idFrom, TVN_DELETEITEM) = address(toCnmhdr(from, idFrom, ~409)) | compileNotification (from, idFrom, TVN_BEGINLABELEDIT) = address(toCnmhdr(from, idFrom, ~410)) | compileNotification (from, idFrom, TVN_ENDLABELEDIT) = address(toCnmhdr(from, idFrom, ~411)) | compileNotification (from, idFrom, TVN_KEYDOWN) = address(toCnmhdr(from, idFrom, ~412)) | compileNotification (from, idFrom, TVN_GETINFOTIP) = address(toCnmhdr(from, idFrom, ~413)) | compileNotification (from, idFrom, TVN_SINGLEEXPAND) = address(toCnmhdr(from, idFrom, ~415)) | compileNotification (from, idFrom, TTN_GETDISPINFO(ref s)) = address(toCnmttdispinfo((from, idFrom, ~520), toCint 0, s, Globals.hNull, 0, 0)) | compileNotification (from, idFrom, TTN_SHOW) = address(toCnmhdr(from, idFrom, ~521)) | compileNotification (from, idFrom, TTN_POP) = address(toCnmhdr(from, idFrom, ~522)) | compileNotification (from, idFrom, TCN_KEYDOWN) = address(toCnmhdr(from, idFrom, ~550)) | compileNotification (from, idFrom, TCN_SELCHANGE) = address(toCnmhdr(from, idFrom, ~551)) | compileNotification (from, idFrom, TCN_SELCHANGING) = address(toCnmhdr(from, idFrom, ~552)) | compileNotification (from, idFrom, TBN_GETBUTTONINFO) = address(toCnmhdr(from, idFrom, ~700)) | compileNotification (from, idFrom, TBN_BEGINDRAG) = address(toCnmhdr(from, idFrom, ~701)) | compileNotification (from, idFrom, TBN_ENDDRAG) = address(toCnmhdr(from, idFrom, ~702)) | compileNotification (from, idFrom, TBN_BEGINADJUST) = address(toCnmhdr(from, idFrom, ~703)) | compileNotification (from, idFrom, TBN_ENDADJUST) = address(toCnmhdr(from, idFrom, ~704)) | compileNotification (from, idFrom, TBN_RESET) = address(toCnmhdr(from, idFrom, ~705)) | compileNotification (from, idFrom, TBN_QUERYINSERT) = address(toCnmhdr(from, idFrom, ~706)) | compileNotification (from, idFrom, TBN_QUERYDELETE) = address(toCnmhdr(from, idFrom, ~707)) | compileNotification (from, idFrom, TBN_TOOLBARCHANGE) = address(toCnmhdr(from, idFrom, ~708)) | compileNotification (from, idFrom, TBN_CUSTHELP) = address(toCnmhdr(from, idFrom, ~709)) | compileNotification (from, idFrom, TBN_DROPDOWN) = address(toCnmhdr(from, idFrom, ~710)) | compileNotification (from, idFrom, TBN_HOTITEMCHANGE) = address(toCnmhdr(from, idFrom, ~713)) | compileNotification (from, idFrom, TBN_DRAGOUT) = address(toCnmhdr(from, idFrom, ~714)) | compileNotification (from, idFrom, TBN_DELETINGBUTTON) = address(toCnmhdr(from, idFrom, ~715)) | compileNotification (from, idFrom, TBN_GETDISPINFO) = address(toCnmhdr(from, idFrom, ~716)) | compileNotification (from, idFrom, TBN_GETINFOTIP) = address(toCnmhdr(from, idFrom, ~718)) | compileNotification (from, idFrom, UDN_DELTAPOS) = address(toCnmhdr(from, idFrom, ~722)) | compileNotification (from, idFrom, RBN_GETOBJECT) = address(toCnmhdr(from, idFrom, ~832)) | compileNotification (from, idFrom, RBN_LAYOUTCHANGED) = address(toCnmhdr(from, idFrom, ~833)) | compileNotification (from, idFrom, RBN_AUTOSIZE) = address(toCnmhdr(from, idFrom, ~834)) | compileNotification (from, idFrom, RBN_BEGINDRAG) = address(toCnmhdr(from, idFrom, ~835)) | compileNotification (from, idFrom, RBN_ENDDRAG) = address(toCnmhdr(from, idFrom, ~836)) | compileNotification (from, idFrom, RBN_DELETINGBAND) = address(toCnmhdr(from, idFrom, ~837)) | compileNotification (from, idFrom, RBN_DELETEDBAND) = address(toCnmhdr(from, idFrom, ~838)) | compileNotification (from, idFrom, RBN_CHILDSIZE) = address(toCnmhdr(from, idFrom, ~839)) | compileNotification (from, idFrom, CBEN_GETDISPINFO) = address(toCnmhdr(from, idFrom, ~800)) | compileNotification (from, idFrom, CBEN_DRAGBEGIN) = address(toCnmhdr(from, idFrom, ~808)) | compileNotification (from, idFrom, IPN_FIELDCHANGED) = address(toCnmhdr(from, idFrom, ~860)) | compileNotification (from, idFrom, SBN_SIMPLEMODECHANGE) = address(toCnmhdr(from, idFrom, ~880)) | compileNotification (from, idFrom, PGN_SCROLL) = address(toCnmhdr(from, idFrom, ~901)) | compileNotification (from, idFrom, PGN_CALCSIZE) = address(toCnmhdr(from, idFrom, ~902)) | compileNotification (from, idFrom, NM_OTHER code) = address(toCnmhdr(from, idFrom, code)) local val msgStruct = STRUCT6(HWND, INT, POINTER, POINTER, INT, POINT) val (toMsg, fromMsg, msgType) = breakConversion msgStruct in (* Return the address of a vol containing the message. *) fun packMessage({msg, hwnd, time, pt}: MSG): vol = let val (msgId: int, wParam: vol, lParam: vol) = compileMessage msg val msgVol = fromMsg(hwnd, msgId, wParam, lParam, Time.toMilliseconds time, pt) in address msgVol end (* v is the address of a message structure. The result is the unpacked message. *) fun unpackMessage(v: vol): MSG = let val (hWnd, msgId, wParam, lParam, t, pt) = toMsg(deref v) in { msg = decompileMessage(msgId, wParam, lParam), hwnd = hWnd, time = Time.fromMilliseconds t, pt = pt } end val LPMSG = mkConversion unpackMessage packMessage (Cpointer msgType) end (* Update the lParam/wParam values from the values in a returned message. This is needed if an ML callback makes a modification that has to be passed back to C. *) (* TODO: The rest of these. *) fun updateParamsFromMessage(msg: Message, wp: vol, lp: vol): unit = case msg of WM_GETTEXT{text, ...} => () | WM_ASKCBFORMATNAME{formatName, ...} => () | EM_GETLINE{result, ...} => () | EM_GETRECT{rect, ...} => () | EM_GETSEL{startPos, endPos} => () | CB_GETEDITSEL{startPos, endPos} => () | CB_GETLBTEXT {text, ...} => () | CB_GETDROPPEDCONTROLRECT{rect, ...} => () | SBM_GETRANGE {minPos, maxPos} => () | SBM_GETSCROLLINFO {info, ...} => () | LB_GETTEXT {text, ...} => () | LB_GETSELITEMS{itemCount, items} => () | LB_GETITEMRECT{rect, ...} => () | WM_NCCALCSIZE { newrect = ref newrect, ...} => assign CRect (deref lp) (toCrect newrect) | WM_GETMINMAXINFO {maxSize=ref maxSize, maxPosition=ref maxPosition, minTrackSize=ref minTrackSize, maxTrackSize=ref maxTrackSize} => ( assign CPoint (offset 1 CPoint (deref lp)) (toCpoint maxSize); assign CPoint (offset 2 CPoint (deref lp)) (toCpoint maxPosition); assign CPoint (offset 3 CPoint (deref lp)) (toCpoint minTrackSize); assign CPoint (offset 4 CPoint (deref lp)) (toCpoint maxTrackSize) ) | WM_WINDOWPOSCHANGING{ hwnd, front=ref front, x=ref x, y=ref y, width=ref width, height=ref height, flags=ref flags} => assign Cwindowpos (deref lp) (toCwindowpos(hwnd, front, x, y, width, height, flags)) | WM_NOTIFY{ notification=TTN_GETDISPINFO(ref s), ...} => (* This particular notification allows the result to be fed back in several ways. We copy into the char array. *) assign charArray80 (offset 1 (Cpointer Cvoid) (offset 1 nmhdr (deref lp))) (toCcharArray80 s) | _ => (); (* Update the message contents from the values of wParam/lParam. This is used when a message has been sent or passed into C code that may have updated the message contents. Casts certain message results to HGDIOBJ. *) fun messageReturnFromParams(msg: Message, wp: vol, lp: vol, reply: vol): LRESULT = let val () = (* For certain messages we need to extract the reply from the arguments. *) case msg of WM_GETTEXT{text, ...} => text := (if fromCint reply = 0 then "" else fromCstring lp) | WM_ASKCBFORMATNAME{formatName, ...} => formatName := (if fromCint reply = 0 then "" else fromCstring lp) | EM_GETLINE{result, ...} => result := (if fromCint reply = 0 then "" else fromCstring lp) | EM_GETRECT{rect, ...} => rect := fromCrect(deref lp) | EM_GETSEL{startPos, endPos} => (startPos := fromCint(deref wp); endPos := fromCint(deref lp)) | CB_GETEDITSEL{startPos, endPos} => (startPos := fromCint(deref wp); endPos := fromCint(deref lp)) | CB_GETLBTEXT {text, ...} => text := (if fromCint reply = 0 then "" else fromCstring lp) | CB_GETDROPPEDCONTROLRECT{rect, ...} => rect := fromCrect(deref lp) | SBM_GETRANGE {minPos, maxPos} => (minPos := fromCint(deref wp); maxPos := fromCint(deref lp)) | SBM_GETSCROLLINFO {info, ...} => let val (inf, _) = fromCscrollinfo(deref lp) in info := inf end | LB_GETTEXT {text, ...} => text := (if fromCint reply = 0 then "" else fromCstring lp) | LB_GETSELITEMS{itemCount, items} => let val b = deref lp in items := List.tabulate(itemCount, fn n => fromCint(offset n Cint b)) end | LB_GETITEMRECT{rect, ...} => rect := fromCrect(deref lp) | WM_NCCALCSIZE { newrect, ...} => (* Whatever the value of "validarea" we just look at the first rectangle. *) newrect := fromCrect (deref lp) | WM_GETMINMAXINFO {maxSize, maxPosition, minTrackSize, maxTrackSize} => let val (ptres, ptms, ptmp, ptts, ptmts) = fromCminmaxinfo(deref lp) in maxSize := ptms; maxPosition := ptmp; minTrackSize := ptts; maxTrackSize := ptmts end | WM_WINDOWPOSCHANGING{ hwnd, front, x, y, width, height, flags} => let val (_,newfront,newx,newy,newwidth,newheight,newflags) = fromCwindowpos(deref lp) in front := newfront; x := newx; y := newy; width := newwidth; height := newheight; flags := newflags end | _ => () in (* We need to "cast" some of the results. *) case msg of WM_GETFONT => LRESHANDLE(toHGDIOBJ reply) | WM_GETICON _ => LRESHANDLE(toHGDIOBJ reply) | WM_SETICON _ => LRESHANDLE(toHGDIOBJ reply) | BM_GETIMAGE _ => LRESHANDLE(toHGDIOBJ reply) | BM_SETIMAGE _ => LRESHANDLE(toHGDIOBJ reply) | STM_GETICON => LRESHANDLE(toHGDIOBJ reply) | STM_GETIMAGE _ => LRESHANDLE(toHGDIOBJ reply) | STM_SETICON _ => LRESHANDLE(toHGDIOBJ reply) | STM_SETIMAGE _ => LRESHANDLE(toHGDIOBJ reply) | _ => LRESINT (fromCint reply) end (* Window callback table. *) local type callback = HWND * int * vol * vol -> vol (* *) datatype tableEntry = TableEntry of {hWnd: HWND, callBack: callback} (* Windows belong to the thread that created them so each thread has its own list of windows. Any thread could have one outstanding callback waiting to be assigned to a window that is being created. *) val threadWindows = Universal.tag(): tableEntry list Universal.tag val threadOutstanding = Universal.tag(): callback option Universal.tag val WNDPROC = PASCALFUNCTION4 (HWND, INT, POINTER, POINTER) POINTER (* This is used to set the window proc. The result is also a window proc but since we're passing it to CallWindowProc it's simpler to treat the result as an int. *) val SetWindowLong = call3 (user "SetWindowLongA") (HWND, INT, WNDPROC) POINTER val CallWindowProc = call5 (user "CallWindowProcA") (POINTER, HWND, INT, POINTER, POINTER) POINTER (* This message is used to test if we are using the Poly callback. We use the same number as MFC uses so it's unlikely that any Windows class will use this. *) val WMTESTPOLY = 0x0360 in fun getWindowList (): tableEntry list = getOpt (Thread.Thread.getLocal threadWindows, []) and setWindowList(t: tableEntry list): unit = Thread.Thread.setLocal(threadWindows, t) fun getOutstanding(): callback option = Option.join(Thread.Thread.getLocal threadOutstanding) and setOutstanding(t: callback option): unit = Thread.Thread.setLocal(threadOutstanding, t) (* Get the callback for this window. If it's the first time we've had a message for this window we need to use the outstanding callback. *) fun getCallback(hw: HWND): callback = case List.find (fn (TableEntry{hWnd, ...}) => intOfHandle hw = intOfHandle hWnd) (getWindowList ()) of SOME(TableEntry{callBack, ...}) => callBack | NONE => (* See if this has just been set up. *) (case getOutstanding() of SOME cb => (* It has. We now know the window handle so link it up. *) ( setWindowList(TableEntry{hWnd=hw, callBack=cb} :: getWindowList ()); setOutstanding NONE; cb ) | NONE => raise Fail "No callback found" ) fun removeCallback(hw: HWND): unit = setWindowList(List.filter (fn(TableEntry{hWnd, ...}) => intOfHandle hw <> intOfHandle hWnd) (getWindowList ())) fun mainCallbackFunction(hw:HWND, msgId:int, wParam:vol, lParam:vol) = if msgId = WMTESTPOLY then toCint ~1 (* This tests whether we are already installed. *) else getCallback hw (hw, msgId, wParam, lParam) fun windowCallback (call: HWND * Message * 'a -> LRESULT * 'a, init: 'a): (HWND * int * vol* vol-> vol) = let val state = ref init fun callBack(h: HWND, uMsg:int, wParam: vol, lParam: vol): vol = let val msg = decompileMessage(uMsg, wParam, lParam) handle exn => ( print(concat["Exception with message ", Int.toString uMsg, exnMessage exn ]); NULL ) val (result, newState) = call(h, msg, !state) handle exn => ( print(concat["Exception with message ", PolyML.makestring msg, exnMessage exn ]); (LRESINT 0, !state) ) in (* For a few messages we have to update the value pointed to by wParam/lParam after we've handled it. *) updateParamsFromMessage(msg, wParam, lParam); state := newState; (* If our callback returned SOME x we use that as the result, otherwise we call the default. We do it this way rather than having the caller call DefWindowProc because that would involve recompiling the message and we can't guarantee that all the parameters of the original message would be correctly set. *) case result of LRESINT res => toCint res | LRESHANDLE res => fromHGDIOBJ res end; in callBack end (* When we first set up a callback we don't know the window handle so we use null. *) fun setCallback(call, init) = setOutstanding(SOME(windowCallback(call, init))) fun subclass(w: HWND, f: HWND * Message * 'a -> LRESULT * 'a, init: 'a): (HWND * Message -> LRESULT) = let val sendMsg = call4(user "SendMessageA") (HWND, INT, POINTER, POINTER) INT val testPoly: int = sendMsg(w, WMTESTPOLY, toCint 0, toCint 0) fun addCallback (hWnd, call: HWND * Message * 'a -> LRESULT * 'a, init: 'a): unit = setWindowList( TableEntry{ hWnd = hWnd, callBack = windowCallback(call, init) } :: getWindowList ()) val oldDefProc: callback = if testPoly = ~1 then (* We already have our Window proc installed. *) let (* We should have a callback already installed. *) val oldCallback = getCallback w in removeCallback w; addCallback(w, f, init); oldCallback end else let (* Set up the new window proc and get the existing one. *) val oldWProc = SetWindowLong(w, ~4, mainCallbackFunction) val defProc = fn (h, m, w, l) => CallWindowProc(oldWProc, h, m, w, l) in (* Remove any existing callback function and install the new one. *) removeCallback w; addCallback(w, f, init); defProc end in fn (hw: HWND, msg: Message) => let val (m: int, w: vol, l: vol) = compileMessage msg val res: vol = oldDefProc(hw, m, w, l) in messageReturnFromParams(msg, w, l, res) end end end (* Keyboard operations on modeless dialogues are performed by isDialogMessage. We keep a list of modeless dialogues and process them in the main message loop. This also has an important function for dialogues created by FindText. FindText creates a FINDREPLACE structure which must not be GC'd while the dialogue exists. We include the vol in this table which holds onto the underlying C structure. *) local val modeless = ref [] val isDialogMessage = call2 (user "IsDialogMessage") (HWND, POINTER) BOOL val isWindow = call1 (user "IsWindow") (HWND) BOOL in fun addModelessDialogue (hWnd: HWND, retain: vol) = modeless := (hWnd, retain) :: (!modeless) fun isDialogueMsg(msg: vol) = ( (* Take this opportunity to filter any dialogues that have gone away. *) modeless := List.filter (isWindow o #1) (!modeless); (* See if isDialogMessage returns true for any of these. *) List.foldl (fn ((w, _), b) => b orelse isDialogMessage(w, msg)) false (!modeless) ) end datatype PeekMessageOptions = PM_NOREMOVE | PM_REMOVE (* TODO: We can also include PM_NOYIELD. *) fun PeekMessage(hWnd: HWND option, wMsgFilterMin: int, wMsgFilterMax: int, remove: PeekMessageOptions): MSG option = let val msg = alloc 7 Cint val peekMsg = call5(user "PeekMessageA") (POINTER, HWNDOPT, INT, INT, INT) INT val opts = case remove of PM_REMOVE => 1 | PM_NOREMOVE => 0 val res = peekMsg(address msg, hWnd, wMsgFilterMin, wMsgFilterMax, opts) in if res = 0 then NONE else SOME(unpackMessage(address msg)) end; local val callWin = RunCall.run_call2 RuntimeCalls.POLY_SYS_os_specific in fun pauseForMessage(hwnd: HWND, min, max): unit = callWin(1101, (intOfHandle hwnd, min, max)) (* We implement WaitMessage within the RTS. *) fun WaitMessage(): bool = (pauseForMessage(hwndNull, 0, 0); true) end (* We don't use the underlying GetMessage function because that blocks the thread which would prevent other ML processes from running. Instead we use PeekMessage and an RTS call which allows other threads to run. *) fun GetMessage(hWnd: HWND option, wMsgFilterMin: int, wMsgFilterMax: int): MSG = case PeekMessage(hWnd, wMsgFilterMin, wMsgFilterMax, PM_REMOVE) of SOME msg => msg | NONE => let val hwnd = getOpt(hWnd, hwndNull) in pauseForMessage(hwnd, wMsgFilterMin, wMsgFilterMax); GetMessage(hWnd, wMsgFilterMin, wMsgFilterMax) end (* Wait for messages and dispatch them. It only returns when a QUIT message has been received. *) fun RunApplication() = let val peekMsg = call5(user "PeekMessageA") (POINTER, HWND, INT, INT, INT) INT val transMsg = call1(user "TranslateMessage") (POINTER) INT val dispMsg = call1(user "DispatchMessageA") (POINTER) INT val msg = alloc 7 Cint val res = peekMsg(address msg, toHWND(toCint 0), 0, 0, 1) in if res = 0 then (* There's no message at the moment. Wait for one. *) (WaitMessage(); RunApplication()) else case unpackMessage(address msg) of { msg = WM_QUIT{exitcode}, ...} => exitcode | _ => ( if isDialogueMsg(address msg) then () else ( transMsg(address msg); dispMsg(address msg); () ); RunApplication() ) end fun SendMessage(hWnd: HWND, msg: Message) = let val sendMsg = call4(user "SendMessageA") (HWND, INT, POINTER, POINTER) POINTER val (msgId: int, wp: vol, lp: vol) = compileMessage msg val reply = sendMsg(hWnd, msgId, wp, lp) in (* Update any result values and cast the results if necessary. *) messageReturnFromParams(msg, wp, lp, reply) end local val postMessage = call4(user "PostMessageA") (HWND, INT, POINTER, POINTER) (SUCCESSSTATE "PostMessage") in fun PostMessage(hWnd: HWND, msg: Message) = let val (msgId: int, wp: vol, lp: vol) = compileMessage msg in postMessage(hWnd, msgId, wp, lp) end end val HWND_BROADCAST: HWND = handleOfInt 0xffff val PostQuitMessage = call1 (user "PostQuitMessage") INT VOID val RegisterWindowMessage = call1 (user "RegisterWindowMessageA") (STRING) INT val InSendMessage = call0 (user "InSendMessage") () BOOL val GetInputState = call0 (user "GetInputState") () BOOL local val getMessagePos = call0 (user "GetMessagePos") () UINT in fun GetMessagePos(): POINT = let val r = getMessagePos () in { x = LOWORD r, y = HIWORD r } end end val GetMessageTime = Time.fromMilliseconds o call0 (user "GetMessageTime") () INT datatype QueueStatus = QS_KEY | QS_MOUSEMOVE | QS_MOUSEBUTTON | QS_POSTMESSAGE | QS_TIMER | QS_PAINT | QS_SENDMESSAGE | QS_HOTKEY | QS_ALLPOSTMESSAGE local val tab = [ (QS_KEY, 0x0001), (QS_MOUSEMOVE, 0x0002), (QS_MOUSEBUTTON, 0x0004), (QS_POSTMESSAGE, 0x0008), (QS_TIMER, 0x0010), (QS_PAINT, 0x0020), (QS_SENDMESSAGE, 0x0040), (QS_HOTKEY, 0x0080), (QS_ALLPOSTMESSAGE, 0x0100) ] in val (fromQS, toQS) = tableSetLookup(tab, NONE) end val QS_MOUSE = [QS_MOUSEMOVE, QS_MOUSEBUTTON] val QS_INPUT = QS_KEY :: QS_MOUSE val QS_ALLEVENTS = QS_POSTMESSAGE :: QS_TIMER :: QS_PAINT :: QS_HOTKEY :: QS_INPUT val QS_ALLINPUT = QS_SENDMESSAGE :: QS_ALLEVENTS local val getQueueStatus = call1 (user "GetQueueStatus") (INT) UINT in fun GetQueueStatus flags = let val res = getQueueStatus(fromQS flags) in (* The RTS uses PeekMessage internally so the "new messages" value in the LOWORD is meaningless. *) toQS(HIWORD(res)) end end (* BroadcastSystemMessage DispatchMessage GetMessageExtraInfo InSendMessageEx - NT 5.0 and Windows 98 PostThreadMessage ReplyMessage SendAsyncProc SendMessageCallback SendMessageTimeout SendNotifyMessage SetMessageExtraInfo TranslateMessage Obsolete Functions PostAppMessage SetMessageQueue *) end end; polyml.5.2.1/mlsource/extra/Win/MessageBase.sml0000644000175000017500000013103710676747012020420 0ustar daviddavid(* Copyright (c) 2001 David C.J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* This contains the types used in the Message structure. *) structure MessageBase = struct local open CInterface Base in type flags = WinBase.Style.flags and WindowPositionStyle = WinBase.WindowPositionStyle datatype LRESULT = LRESINT of int | LRESHANDLE of HGDIOBJ (* Maybe we should have two different types for horizontal and vertical. *) datatype ScrollDirection = SB_BOTTOM | SB_ENDSCROLL | SB_LINEDOWN | SB_LINEUP | SB_PAGEDOWN | SB_PAGEUP | SB_THUMBPOSITION | SB_THUMBTRACK | SB_TOP | SB_LEFT | SB_RIGHT | SB_LINELEFT | SB_LINERIGHT | SB_PAGELEFT | SB_PAGERIGHT local val tab = [ (SB_LINEUP, 0), (SB_LINELEFT, 0), (SB_LINEDOWN, 1), (SB_LINERIGHT, 1), (SB_PAGEUP, 2), (SB_PAGELEFT, 2), (SB_PAGEDOWN, 3), (SB_PAGERIGHT, 3), (SB_THUMBPOSITION, 4), (SB_THUMBTRACK, 5), (SB_TOP, 6), (SB_LEFT, 6), (SB_BOTTOM, 7), (SB_RIGHT, 7), (SB_ENDSCROLL, 8) ] in val SCROLLDIRECTION = tableConversion(tab, NONE) end (* This is a bit of a mess. Various operations take or return handles to these types of image and also take this value as a parameter. *) datatype ImageType = IMAGE_BITMAP | IMAGE_CURSOR | IMAGE_ENHMETAFILE | IMAGE_ICON local val tab = [ (IMAGE_BITMAP, 0), (IMAGE_ICON, 1), (IMAGE_CURSOR, 2), (IMAGE_ENHMETAFILE, 3) ] in val IMAGETYPE = tableConversion(tab, NONE) end (* WM_SIZE options. *) datatype WMSizeOptions = SIZE_RESTORED | SIZE_MINIMIZED | SIZE_MAXIMIZED | SIZE_MAXSHOW | SIZE_MAXHIDE local val tab = [ (SIZE_RESTORED, 0), (SIZE_MINIMIZED, 1), (SIZE_MAXIMIZED, 2), (SIZE_MAXSHOW, 3), (SIZE_MAXHIDE, 4) ] in val WMSIZEOPTIONS = tableConversion(tab, NONE) end (* WM_ACTIVATE options *) datatype WMActivateOptions = WA_INACTIVE | WA_ACTIVE | WA_CLICKACTIVE local val tab = [ (WA_INACTIVE, 0), (WA_ACTIVE, 1), (WA_CLICKACTIVE, 2) ] in val (fromWMactive, toWMactive) = tableLookup(tab, NONE) end datatype SystemCommand = SC_SIZE | SC_MOVE | SC_MINIMIZE | SC_MAXIMIZE | SC_NEXTWINDOW | SC_PREVWINDOW | SC_CLOSE | SC_VSCROLL | SC_HSCROLL | SC_MOUSEMENU | SC_KEYMENU | SC_ARRANGE | SC_RESTORE | SC_TASKLIST | SC_SCREENSAVE | SC_HOTKEY | SC_DEFAULT | SC_MONITORPOWER | SC_CONTEXTHELP | SC_SEPARATOR local val tab = [ (SC_SIZE, 0xF000), (SC_MOVE, 0xF010), (SC_MINIMIZE, 0xF020), (SC_MAXIMIZE, 0xF030), (SC_NEXTWINDOW, 0xF040), (SC_PREVWINDOW, 0xF050), (SC_CLOSE, 0xF060), (SC_VSCROLL, 0xF070), (SC_HSCROLL, 0xF080), (SC_MOUSEMENU, 0xF090), (SC_KEYMENU, 0xF100), (SC_ARRANGE, 0xF110), (SC_RESTORE, 0xF120), (SC_TASKLIST, 0xF130), (SC_SCREENSAVE, 0xF140), (SC_HOTKEY, 0xF150), (SC_DEFAULT, 0xF160), (SC_MONITORPOWER, 0xF170), (SC_CONTEXTHELP, 0xF180)] in val (fromSysCommand, toSysCommand) = tableLookup(tab, NONE) end datatype ControlType = ODT_MENU | ODT_LISTBOX | ODT_COMBOBOX | ODT_BUTTON | ODT_STATIC local val tab = [ (ODT_MENU, 1), (ODT_LISTBOX, 2), (ODT_COMBOBOX, 3), (ODT_BUTTON, 4), (ODT_STATIC, 5) ] in val CONTROLTYPE = tableConversion(tab, NONE) end datatype WMPrintOption = PRF_CHECKVISIBLE | PRF_NONCLIENT | PRF_CLIENT | PRF_ERASEBKGND | PRF_CHILDREN | PRF_OWNED local val tab = [ (PRF_CHECKVISIBLE, 0x00000001), (PRF_NONCLIENT, 0x00000002), (PRF_CLIENT, 0x00000004), (PRF_ERASEBKGND, 0x00000008), (PRF_CHILDREN, 0x00000010), (PRF_OWNED, 0x00000020) ] in val WMPRINTOPS = tableSetConversion(tab, NONE) end (* Parameters to EM_SETMARGINS. *) datatype MarginSettings = UseFontInfo | Margins of {left: int option, right: int option } datatype MouseKeyFlags = MK_LBUTTON | MK_RBUTTON | MK_SHIFT | MK_CONTROL | MK_MBUTTON local val tab = [ (MK_LBUTTON, 0x0001), (MK_RBUTTON, 0x0002), (MK_SHIFT, 0x0004), (MK_CONTROL, 0x0008), (MK_MBUTTON, 0x0010) ] in val MOUSEKEYFLAGS = tableSetConversion(tab, NONE) end datatype MDITileFlags = MDITILE_VERTICAL | MDITILE_HORIZONTAL | MDITILE_SKIPDISABLED local val tab = [ (MDITILE_VERTICAL, 0x0000), (MDITILE_HORIZONTAL, 0x0001), (MDITILE_SKIPDISABLED, 0x0002) ] in val MDITILEFLAGS = tableSetConversion(tab, NONE) end (* TODO: Perhaps use a datatype for this. It's always possible to use functions from IntInf though. *) type KeyData = int datatype HelpHandle = MenuHandle of HMENU | WindowHandle of HWND (* Passed in the lpParam argument of a WM_NOTIFY message. TODO: Many of these have additional information. *) datatype Notification = NM_OUTOFMEMORY | NM_CLICK | NM_DBLCLK | NM_RETURN | NM_RCLICK | NM_RDBLCLK | NM_SETFOCUS | NM_KILLFOCUS | NM_CUSTOMDRAW | NM_HOVER | NM_NCHITTEST | NM_KEYDOWN | NM_RELEASEDCAPTURE | NM_SETCURSOR | NM_CHAR | NM_TOOLTIPSCREATED | NM_LDOWN | NM_RDOWN | NM_THEMECHANGED | LVN_ITEMCHANGING | LVN_ITEMCHANGED | LVN_INSERTITEM | LVN_DELETEITEM | LVN_DELETEALLITEMS | LVN_BEGINLABELEDIT | LVN_ENDLABELEDIT | LVN_COLUMNCLICK | LVN_BEGINDRAG | LVN_BEGINRDRAG | LVN_GETDISPINFO | LVN_SETDISPINFO | LVN_KEYDOWN | LVN_GETINFOTIP | HDN_ITEMCHANGING | HDN_ITEMCHANGED | HDN_ITEMCLICK | HDN_ITEMDBLCLICK | HDN_DIVIDERDBLCLICK | HDN_BEGINTRACK | HDN_ENDTRACK | HDN_TRACK | HDN_ENDDRAG | HDN_BEGINDRAG | HDN_GETDISPINFO | TVN_SELCHANGING | TVN_SELCHANGED | TVN_GETDISPINFO | TVN_SETDISPINFO | TVN_ITEMEXPANDING | TVN_ITEMEXPANDED | TVN_BEGINDRAG | TVN_BEGINRDRAG | TVN_DELETEITEM | TVN_BEGINLABELEDIT | TVN_ENDLABELEDIT | TVN_KEYDOWN | TVN_GETINFOTIP | TVN_SINGLEEXPAND | TTN_GETDISPINFO of string ref | TTN_SHOW | TTN_POP | TCN_KEYDOWN | TCN_SELCHANGE | TCN_SELCHANGING | TBN_GETBUTTONINFO | TBN_BEGINDRAG | TBN_ENDDRAG | TBN_BEGINADJUST | TBN_ENDADJUST | TBN_RESET | TBN_QUERYINSERT | TBN_QUERYDELETE | TBN_TOOLBARCHANGE | TBN_CUSTHELP | TBN_DROPDOWN | TBN_HOTITEMCHANGE | TBN_DRAGOUT | TBN_DELETINGBUTTON | TBN_GETDISPINFO | TBN_GETINFOTIP | UDN_DELTAPOS | RBN_GETOBJECT | RBN_LAYOUTCHANGED | RBN_AUTOSIZE | RBN_BEGINDRAG | RBN_ENDDRAG | RBN_DELETINGBAND | RBN_DELETEDBAND | RBN_CHILDSIZE | CBEN_GETDISPINFO | CBEN_DRAGBEGIN | IPN_FIELDCHANGED | SBN_SIMPLEMODECHANGE | PGN_SCROLL | PGN_CALCSIZE | NM_OTHER of int (* Catch-all for other cases. *) datatype Message = WM_ACTIVATE of {active : WMActivateOptions, minimize : bool } (* Indicates a change in activation state *) | WM_ACTIVATEAPP of {active : bool, threadid: int } (* Notifies applications when a new task activates *) | WM_ASKCBFORMATNAME of { length: int, formatName : string ref} (* Retrieves the name of the clipboard format *) | WM_CANCELJOURNAL (* Notifies application when user cancels journaling *) | WM_CANCELMODE (* Notifies a Window to cancel internal modes *) | WM_CHANGECBCHAIN of { removed : HWND, next : HWND } (* Notifies clipboard viewer of removal from chain *) | WM_CHAR of {charCode : char, data : KeyData } (* Indicates the user pressed a character key *) | WM_CHARTOITEM of {key : int, caretpos : int, listbox : HWND } (* Provides list-box keystrokes to owner Window *) | WM_CHILDACTIVATE (* Notifies a child Window of activation *) (* This is WM_USER+1. It's only used in a GetFont dialogue box. | WM_CHOOSEFONT_GETLOGFONT of LOGFONT ref *) (* Retrieves LOGFONT structure for Font dialog box *) | WM_CLEAR (* Clears an edit control *) | WM_CLOSE (* System Close menu command was chosen *) | WM_COMMAND of {notifyCode : int, wId : int, control : HWND } (* Specifies a command message *) | WM_COMPACTING of { compactratio : int } (* Indicates a low memory condition *) | WM_COMPAREITEM of {controlid : int, ctlType : ControlType, ctlID : int, hItem : HWND, itemID1 : int, itemData1 : int, itemID2 : int, itemData2 : int } (* Determines position of combo- or list-box item *) | WM_COPY (* Copies a selection to the clipboard *) | WM_COPYDATA of { sender : HWND, data : int, pdata: Word8Vector.vector } (* Passes data to another application *) | WM_CREATE of { instance: HINSTANCE, creation: int, menu : HMENU, parent : HWND, cy : int, cx : int, y : int, x : int, style : flags, name : string, (* The class may be a string or an atom. *) class : ClassType, extendedstyle : int } (* Indicates a Window is being created *) | WM_CTLCOLORBTN of { displaycontext : HDC, button : HWND } (* Button is about to be drawn *) | WM_CTLCOLORDLG of { displaycontext : HDC, dialogbox : HWND } (* Dialog box is about to be drawn *) | WM_CTLCOLOREDIT of { displaycontext : HDC, editcontrol : HWND } (* Control is about to be drawn *) | WM_CTLCOLORLISTBOX of { displaycontext : HDC, listbox : HWND } (* List box is about to be drawn *) | WM_CTLCOLORMSGBOX of { displaycontext : HDC, messagebox : HWND } (* Message box is about to be drawn *) | WM_CTLCOLORSCROLLBAR of { displaycontext : HDC, scrollbar : HWND } (* Indicates scroll bar is about to be drawn *) | WM_CTLCOLORSTATIC of { displaycontext : HDC, staticcontrol : HWND } (* Control is about to be drawn *) (* Note the return value is an HBRUSH *) | WM_CUT (* Deletes a selection and copies it to the clipboard *) (* | WM_DDE_ACK (* Acknowledges a DDE message *) | WM_DDE_ADVISE (* Requests a DDE data-change update *) | WM_DDE_DATA (* Sends data to a DDE client *) | WM_DDE_EXECUTE (* Sends a string to a DDE server *) | WM_DDE_INITIATE (* Initiates a DDE conversation *) | WM_DDE_POKE (* Send unsolicited data to a server *) | WM_DDE_REQUEST (* Requests data from a DDE server *) | WM_DDE_TERMINATE (* Ends a DDE conversation *) | WM_DDE_UNADVISE (* Stops a DDE data-update request *) *) | WM_DEADCHAR of { charCode : char, data : KeyData } (* Indicates the user pressed a dead key *) | WM_DELETEITEM of { controlid : int, ctlType : ControlType, ctlID : int, itemID : int, item : HWND, itemData : int } (* Indicates owner-draw item or control was altered *) | WM_DESTROY (* Indicates Window is about to be destroyed *) | WM_DESTROYCLIPBOARD (* Notifies owner that the clipboard was emptied *) | WM_DEVMODECHANGE of { devicename : string } (* Indicates the device-mode settings have changed *) | WM_DRAWCLIPBOARD (* Indicates the clipboard's contents have changed *) | WM_DRAWITEM of { controlid : int, ctlType : ControlType, ctlID : int, itemID : int, itemAction : int, itemState : int, hItem : HWND , hDC : HDC, rcItem : RECT, itemData : int } (* Indicates owner-draw control/menu needs redrawing *) | WM_DROPFILES of { hDrop : HDROP } (* Indicates that a file has been dropped *) | WM_ENABLE of { enabled : bool } (* Indicates a Window's enable state is changing *) | WM_ENDSESSION of { endsession : bool } (* Indicates whether the Windows session is ending *) | WM_ENTERIDLE of { flag : int, window : HWND } (* Indicates a modal dialog box or menu is idle *) | WM_ENTERMENULOOP of { istrack: bool } (* Indicates entry into menu modal loop *) | WM_EXITMENULOOP of { istrack: bool } (* Indicates exit from menu modal loop *) | WM_ERASEBKGND of { devicecontext : HDC } (* Indicates a Window's background need erasing *) | WM_FONTCHANGE (* Indicates a change in the font-resource pool *) | WM_GETDLGCODE (* Allows dialog procedure to process control input *) | WM_GETFONT (* Retrieves the font that a control is using *) | WM_GETHOTKEY (* Gets the virtual-key code of a Window's hot key *) | WM_GETMINMAXINFO of { maxSize: POINT ref, maxPosition: POINT ref, minTrackSize: POINT ref, maxTrackSize : POINT ref } (* Gets minimum and maximum sizing information *) | WM_GETTEXT of { length: int, text : string ref } (* Gets the text that corresponds to a Window *) | WM_GETTEXTLENGTH (* Gets length of text associated with a Window *) | WM_HOTKEY of { id : int } (* Hot key has been detected *) | WM_HSCROLL of { value : ScrollDirection, position : int, scrollbar : HWND } (* Indicates a click in a horizontal scroll bar *) | WM_HSCROLLCLIPBOARD of { viewer : HWND, code : int, position : int } (* Prompts owner to scroll clipboard contents *) | WM_ICONERASEBKGND of { devicecontext : HDC } (* Notifies minimized Window to fill icon background *) | WM_INITDIALOG of { dialog : HWND, initdata : int } (* Initializes a dialog box *) | WM_INITMENU of { menu : HMENU } (* Indicates a menu is about to become active *) | WM_INITMENUPOPUP of { menupopup : HMENU, itemposition : int, isSystemMenu : bool } (* Indicates a pop-up menu is being created *) | WM_KEYDOWN of { virtualKey : int, data : KeyData } (* Indicates a nonsystem key was pressed *) | WM_KEYUP of { virtualKey : int, data : KeyData } (* Indicates a nonsystem key was released *) | WM_KILLFOCUS of { receivefocus : HWND } (* Indicates the Window is losing keyboard focus *) | WM_LBUTTONDBLCLK of { keyflags : MouseKeyFlags list, x : int, y : int } (* Indicates double-click of left button *) | WM_LBUTTONDOWN of { keyflags : MouseKeyFlags list, x : int, y : int } (* Indicates when left mouse button is pressed *) | WM_LBUTTONUP of { keyflags : MouseKeyFlags list, x : int, y : int } (* Indicates when left mouse button is released *) | WM_MBUTTONDBLCLK of { keyflags : MouseKeyFlags list, x : int, y : int } (* Indicates double-click of middle mouse button *) | WM_MBUTTONDOWN of { keyflags : MouseKeyFlags list, x : int, y : int } (* Indicates when middle mouse button is pressed *) | WM_MBUTTONUP of { keyflags : MouseKeyFlags list, x : int, y : int } (* Indicates when middle mouse button is released *) | WM_MDICASCADE of { skipDisabled : bool } (* Arranges MDI child Windows in cascade format *) | WM_MDICREATE of { class : ClassType, title : string, instance: HINSTANCE, x : int, y : int, cx : int, cy : int, style : int, cdata : int } (* Prompts MDI client to create a child Window *) | WM_MDIDESTROY of { child : HWND } (* Closes an MDI child Window *) | WM_MDIGETACTIVE (* Retrieves data about the active MDI child Window *) | WM_MDIICONARRANGE (* Arranges minimized MDI child Windows *) | WM_MDIMAXIMIZE of { child: HWND } (* Maximizes an MDI child Window *) | WM_MDINEXT of { child : HWND, flagnext : bool } (* Activates the next MDI child Window *) | WM_MDIREFRESHMENU (* Refreshes an MDI frame Window's menu *) | WM_MDIRESTORE of { child : HWND } (* Prompts MDI client to restore a child Window *) | WM_MDISETMENU of { frameMenu : HMENU, windowMenu : HMENU } (* Replaces an MDI frame Window's menu *) | WM_MDITILE of { tilingflag : MDITileFlags list } (* Arranges MDI child Windows in tiled format *) | WM_MEASUREITEM of { controlid : int, ctlType : ControlType, ctlID : int, itemID : int, itemWidth : int, itemHeight : int, itemData : int } (* Requests dimensions of owner-draw control or item *) | WM_MENUCHAR of { ch : char, menuflag : MenuBase.MenuFlag, menu : HMENU } (* Indicates an unknown menu mnemonic was pressed *) | WM_MENUSELECT of { menuitem : int, menuflags : MenuBase.MenuFlag list, menu : HMENU } (* Indicates that the user selected a menu item *) | WM_MOUSEACTIVATE of { parent : HWND, hitTest : int, message : int } (* Indicates a mouse click in an inactive Window *) | WM_MOUSEMOVE of { keyflags : MouseKeyFlags list, x : int, y : int } (* Indicates mouse-cursor movement *) | WM_MOVE of { x : int, y : int } (* Indicates a Window's position has changed *) | WM_NCACTIVATE of { active : bool } (* Changes the active state of nonclient area *) | WM_NCCALCSIZE of { validarea : bool, newrect : RECT ref, (* can be updated. *) oldrect : RECT, oldclientarea : RECT, hwnd : HWND, insertAfter : HWND, x : int, y : int, cx : int, cy : int, style : WindowPositionStyle list } (* Calculates the size of a Window's client area *) | WM_NCCREATE of { instance: HINSTANCE, creation: int, menu : HMENU, parent : HWND, cy : int, cx : int, y : int, x : int, style : flags, name : string, class : ClassType, extendedstyle : int } (* Indicates a Window's nonclient area being created *) | WM_NCDESTROY (* Indicates Window's nonclient area being destroyed *) | WM_NCHITTEST of { x : int, y : int } (* Indicates mouse-cursor movement *) | WM_NCLBUTTONDBLCLK of { hitTest : int, x : int, y : int } (* Indicates nonclient left button double-click *) | WM_NCLBUTTONDOWN of { hitTest : int, x : int, y : int } (* Indicates left button pressed in nonclient area *) | WM_NCLBUTTONUP of { hitTest : int, x : int, y : int } (* Indicates left button released in nonclient area *) | WM_NCMBUTTONDBLCLK of { hitTest : int, x : int, y : int } (* Indicates nonclient middle button double-click *) | WM_NCMBUTTONDOWN of { hitTest : int, x : int, y : int } (* Indicates middle button pressed in nonclient area *) | WM_NCMBUTTONUP of { hitTest : int, x : int, y : int } (* Indicates middle button released in nonclient area *) | WM_NCMOUSEMOVE of { hitTest : int, x : int, y : int } (* Indicates mouse-cursor movement in nonclient area *) | WM_NCPAINT of { region : HRGN } (* Indicates a Window's frame needs painting *) | WM_NCRBUTTONDBLCLK of { hitTest : int, x : int, y : int } (* Indicates nonclient right button double-click *) | WM_NCRBUTTONDOWN of { hitTest : int, x : int, y : int } (* Indicates right button pressed in nonclient area *) | WM_NCRBUTTONUP of { hitTest : int, x : int, y : int } (* Indicates right button released in nonclient area *) | WM_NEXTDLGCTL of { control : int, handleflag : bool } (* Sets focus to different dialog box control *) | WM_PAINT (* Indicates a Window's client area need painting *) | WM_PAINTCLIPBOARD of { clipboard : HWND } (* Prompts owner to display clipboard contents *) | WM_PAINTICON (* Icon is about to be painted *) | WM_PALETTECHANGED of { palChg : HWND } (* Indicates the focus-Window realized its palette *) | WM_PALETTEISCHANGING of { realize : HWND } (* Informs Windows that palette is changing *) | WM_PARENTNOTIFY of { eventflag : int, idchild : int, value : int } (* Notifies parent of child-Window activity *) | WM_PASTE (* Inserts clipboard data into an edit control *) | WM_POWER of { powerevent : int } (* Indicates the system is entering suspended mode *) | WM_QUERYDRAGICON (* Requests a cursor handle for a minimized Window *) | WM_QUERYENDSESSION of { source : int } (* Requests that the Windows session be ended *) | WM_QUERYNEWPALETTE (* Allows a Window to realize its logical palette *) | WM_QUERYOPEN (* Requests that a minimized Window be restored *) | WM_QUEUESYNC (* Delimits CBT messages *) | WM_QUIT of { exitcode : int } (* Requests that an application be terminated *) | WM_RBUTTONDBLCLK of { keyflags : MouseKeyFlags list, x: int, y: int } (* Indicates double-click of right mouse button *) | WM_RBUTTONDOWN of { keyflags : MouseKeyFlags list, x: int, y: int } (* Indicates when right mouse button is pressed *) | WM_RBUTTONUP of { keyflags : MouseKeyFlags list, x: int, y: int } (* Indicates when right mouse button is released *) | WM_RENDERALLFORMATS (* Notifies owner to render all clipboard formats *) | WM_RENDERFORMAT of { format : ClipboardFormat } (* Notifies owner to render clipboard data *) | WM_SETCURSOR of { cursorwindow : HWND, hitTest : int, mousemessage : int } (* Prompts a Window to set the cursor shape *) | WM_SETFOCUS of { losing : HWND } (* Indicates the Window gained the keyboard focus *) | WM_SETFONT of {font : HFONT, redrawflag : bool } (* Sets the font for a control *) | WM_SETHOTKEY of { virtualKey : int } (* Associates a hot key with a Window *) | WM_SETREDRAW of { redrawflag : int } (* Allows or prevents redrawing in a Window *) | WM_SETTEXT of { text : string } (* Sets the text of a Window *) | WM_SHOWWINDOW of { showflag : bool, statusflag : int } (* Indicates a Window is about to be hidden or shown *) | WM_SIZE of { flag : WMSizeOptions, width : int, height : int } (* Indicates a change in a Window's size *) | WM_SIZECLIPBOARD of { viewer : HWND} (* Indicates a change in the chipboard's size *) | WM_SPOOLERSTATUS of { jobstatus : int, jobsleft : int } (* Indicates a print job was added or removed *) | WM_SYSCHAR of { charCode : char, data : KeyData } (* Indicates a System-menu key was pressed *) | WM_SYSCOLORCHANGE (* Indicates a system color value was changed *) | WM_SYSCOMMAND of { commandvalue : SystemCommand, sysBits: int, p: POINT } (* Indicates a system command was requested *) | WM_SYSDEADCHAR of { charCode : char, data : KeyData } (* Indicates a system dead key was pressed *) | WM_SYSKEYDOWN of { virtualKey : int, data : KeyData } | WM_SYSKEYUP of { virtualKey : int, data : KeyData } (* Indicates that ALT plus another key was released *) | WM_TIMECHANGE (* Indicates the system time has been set *) | WM_TIMER of { timerid : int } (* Indicates timeout interval for a timer has elapsed *) | WM_UNDO (* Undoes the last operation in an edit control *) | WM_USER of { uMsg: int, wParam: int, lParam: int } | WM_APP of { uMsg: int, wParam: int, lParam: int } | WM_REGISTERED of { uMsg: int, wParam: int, lParam: int } (* Indicates a range of message values *) (* 0 through WM_USER - 1 Messages reserved for use by the system. WM_USER through 0x7FFF Integer messages for use by private window classes. WM_APP through 0xBFFF Messages available for use by applications. 0xC000 through 0xFFFF String messages for use by applications. Greater than 0xFFFF Reserved by the system for future use. WM_USER through 0x7FFF Integer messages for use by private Window classes 0x8000 through 0xBFFF Messages reserved for future use by Windows 0xC000 through 0xFFFF String messages for use by applications Greater than 0xFFFF Reserved by Windows for future use *) | WM_VKEYTOITEM of { virtualKey : int, caretpos : int, listbox : HWND } (* Provides list-box keystrokes to owner Window *) | WM_VSCROLL of { value : ScrollDirection, position : int, scrollbar : HWND } (* Indicates a click in a vertical scroll bar *) | WM_VSCROLLCLIPBOARD of { viewer : HWND, code : int, position : int } (* Prompts owner to scroll clipboard contents *) | WM_WINDOWPOSCHANGED of { hwnd: HWND, front : HWND, x : int, y : int, width : int, height : int, flags : WindowPositionStyle list } (* Notifies Window of size or position change *) | WM_WINDOWPOSCHANGING of { hwnd: HWND, front: HWND ref, x : int ref, y : int ref, width : int ref, height : int ref, flags : WindowPositionStyle list ref } (* Notifies Window of new size or position *) | WM_SETTINGCHANGE of { section_name : string } (* Notifies applications that system wide settings have changed *) | WM_NOTIFY of {from: HWND, idCtrl: int, idFrom : int, notification: Notification } | WM_CAPTURECHANGED of { newCapture: HWND } | WM_ENTERSIZEMOVE | WM_EXITSIZEMOVE | WM_PRINT of {hdc: HDC, flags: WMPrintOption list } | WM_PRINTCLIENT of {hdc: HDC, flags: WMPrintOption list } (* WM_MOUSEWHEEL 0x020A WM_NEXTMENU 0x0213 WM_SIZING 0x0214 WM_MOVING 0x0216 WM_POWERBROADCAST 0x0218 WM_DEVICECHANGE 0x0219 *) (* WM_INPUTLANGCHANGEREQUEST 0x0050 WM_INPUTLANGCHANGE 0x0051 WM_TCARD 0x0052 WM_USERCHANGED 0x0054 WM_NOTIFYFORMAT 0x0055 WM_STYLECHANGING 0x007C WM_STYLECHANGED 0x007D WM_DISPLAYCHANGE 0x007E *) | WM_HELP of { ctrlId: int, itemHandle: HelpHandle, contextId: int, mousePos: POINT } | WM_GETICON of { big: bool } | WM_SETICON of { big: bool, icon: HICON } | WM_CONTEXTMENU of { hwnd: HWND, xPos: int, yPos: int } | WM_DISPLAYCHANGE of { bitsPerPixel: int, xScreen: int, yScreen: int } (* Edit control messages. *) | EM_CANUNDO | EM_CHARFROMPOS of { point: POINT } | EM_EMPTYUNDOBUFFER | EM_FMTLINES of {addEOL: bool} | EM_GETFIRSTVISIBLELINE (* EM_GETHANDLE - Not implemented. We can't do anything with it at the moment. *) | EM_GETLIMITTEXT | EM_GETLINE of { lineNo: int, size: int, result: string ref } | EM_GETLINECOUNT | EM_GETMARGINS | EM_GETMODIFY | EM_GETPASSWORDCHAR | EM_GETRECT of {rect: RECT ref} | EM_GETSEL of {startPos: int ref, endPos: int ref} | EM_GETTHUMB | EM_LIMITTEXT of {limit: int} | EM_LINEFROMCHAR of {index: int} | EM_LINEINDEX of {line: int} | EM_LINELENGTH of {index: int} | EM_LINESCROLL of {xScroll: int, yScroll: int} | EM_POSFROMCHAR of {index: int} | EM_REPLACESEL of {canUndo: bool, text: string} | EM_SCROLL of {action: ScrollDirection} | EM_SCROLLCARET | EM_SETMARGINS of {margins: MarginSettings} | EM_SETMODIFY of { modified: bool } | EM_SETPASSWORDCHAR of { ch: char } | EM_SETREADONLY of { readOnly: bool } | EM_SETRECT of {rect: RECT} | EM_SETRECTNP of {rect: RECT} | EM_SETSEL of {startPos: int, endPos: int} | EM_SETTABSTOPS of {tabs: int list} | EM_UNDO (* Button control messages. *) | BM_CLICK | BM_GETCHECK | BM_GETIMAGE of {imageType: ImageType} | BM_GETSTATE | BM_SETCHECK of {state: int} | BM_SETIMAGE of {image: HGDIOBJ, imageType: ImageType} | BM_SETSTATE of {highlight: bool } | BM_SETSTYLE of {redraw: bool, style: flags} (* Combobox messages. *) | CB_GETEDITSEL of {startPos: int ref, endPos: int ref} | CB_LIMITTEXT of {limit: int} | CB_SETEDITSEL of {startPos: int, endPos: int} | CB_ADDSTRING of { text: string } | CB_DELETESTRING of { index: int } | CB_GETCOUNT | CB_GETCURSEL | CB_DIR of { attrs: ComboBase.CBDirAttr list, fileSpec: string } | CB_GETLBTEXT of { index: int, length: int, text: string ref } (* Get the text from the list box. We need to have the length in order to allocate memory for the string although this isn't actually passed in the message. *) | CB_GETLBTEXTLEN of { index: int } | CB_INSERTSTRING of { index: int, text: string } | CB_RESETCONTENT | CB_FINDSTRING of { indexStart: int, text: string } | CB_SELECTSTRING of { indexStart: int, text: string } | CB_SETCURSEL of { index: int } | CB_SHOWDROPDOWN of { show: bool } | CB_GETITEMDATA of { index: int } | CB_SETITEMDATA of { index: int, data: int } | CB_GETDROPPEDCONTROLRECT of { rect: RECT ref } | CB_SETITEMHEIGHT of { index: int, height: int } | CB_GETITEMHEIGHT of { index: int } | CB_SETEXTENDEDUI of { extended: bool } | CB_GETEXTENDEDUI (* Note: Returned value is a bool *) | CB_GETDROPPEDSTATE (* Note: Returned value is a bool *) | CB_FINDSTRINGEXACT of { indexStart: int, text: string } | CB_SETLOCALE of { locale: int } (* Should be an abstract type? *) | CB_GETLOCALE (* Result will be the type used above. *) | CB_GETTOPINDEX | CB_SETTOPINDEX of { index: int } | CB_GETHORIZONTALEXTENT | CB_SETHORIZONTALEXTENT of { extent: int } | CB_GETDROPPEDWIDTH | CB_SETDROPPEDWIDTH of { width: int } | CB_INITSTORAGE of { items: int, bytes: int } (* Listbox messages *) | LB_ADDSTRING of { text: string } | LB_INSERTSTRING of { index: int, text: string } | LB_DELETESTRING of { index: int } | LB_SELITEMRANGEEX of { first: int, last: int } | LB_RESETCONTENT | LB_SETSEL of { select: bool, index: int } | LB_SETCURSEL of { index: int } | LB_GETSEL of { index: int } | LB_GETCURSEL | LB_GETTEXT of { index: int, length: int, text: string ref } (* Get the text from the list box. We need to have the length in order to allocate memory for the string although this isn't actually passed in the message. *) | LB_GETTEXTLEN of { index: int } | LB_GETCOUNT | LB_SELECTSTRING of { indexStart: int, text: string } | LB_DIR of { attrs: ComboBase.CBDirAttr list, fileSpec: string } | LB_GETTOPINDEX | LB_FINDSTRING of { indexStart: int, text: string } | LB_GETSELCOUNT | LB_GETSELITEMS of { itemCount: int, items: int list ref } | LB_SETTABSTOPS of { tabs: int list } | LB_GETHORIZONTALEXTENT | LB_SETHORIZONTALEXTENT of { extent: int } | LB_SETCOLUMNWIDTH of { column: int } | LB_ADDFILE of { fileName: string } | LB_SETTOPINDEX of { index: int } | LB_GETITEMRECT of { rect: RECT ref, index: int } | LB_GETITEMDATA of { index: int } | LB_SETITEMDATA of { index: int, data: int } | LB_SELITEMRANGE of { select: bool, first: int, last: int } | LB_SETANCHORINDEX of { index: int } | LB_GETANCHORINDEX | LB_SETCARETINDEX of { index: int, scroll: bool } | LB_GETCARETINDEX | LB_SETITEMHEIGHT of { index: int, height: int } | LB_GETITEMHEIGHT of { index: int } | LB_FINDSTRINGEXACT of { indexStart: int, text: string } | LB_SETLOCALE of { locale: int } (* Should be an abstract type? *) | LB_GETLOCALE (* Result will be the type used above. *) | LB_SETCOUNT of { items: int } | LB_INITSTORAGE of { items: int, bytes: int } | LB_ITEMFROMPOINT of { point: POINT } (* Static control messages*) | STM_GETICON | STM_GETIMAGE of {imageType: ImageType} | STM_SETICON of {icon: HICON} | STM_SETIMAGE of {image: HGDIOBJ, imageType: ImageType} (* Scroll bar messages *) | SBM_SETPOS of { pos: int, redraw: bool } | SBM_GETPOS | SBM_SETRANGE of { minPos: int, maxPos: int } | SBM_SETRANGEREDRAW of { minPos: int, maxPos: int } | SBM_GETRANGE of { minPos: int ref, maxPos: int ref } | SBM_ENABLE_ARROWS of ScrollBase.enableArrows | SBM_SETSCROLLINFO of { info: ScrollBase.SCROLLINFO, options: ScrollBase.ScrollInfoOption list } | SBM_GETSCROLLINFO of { info: ScrollBase.SCROLLINFO ref, options: ScrollBase.ScrollInfoOption list } (* Registered messages. *) | FINDMSGSTRING of { flags: FindReplaceFlags.flags, findWhat: string, replaceWith: string } (* Sent to parent window by a FindReplace dialogue. The actual argument is a FINDREPLACE structure but this is the only information that may change. *) | NULL (* GetMessage and PeekMessage return these values. *) type MSG = { msg: Message, hwnd: HWND, time: Time.time, pt: {x: int, y: int} } end end; polyml.5.2.1/mlsource/extra/Win/MessageBox.sml0000644000175000017500000001254210313043367020263 0ustar daviddavid(* Copyright (c) 2001 David C.J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure MessageBox : sig type HWND val IDABORT : int val IDCANCEL : int val IDCLOSE : int val IDHELP : int val IDIGNORE : int val IDNO : int val IDOK : int val IDRETRY : int val IDYES : int structure MessageBoxStyle : sig include BIT_FLAGS val MB_ABORTRETRYIGNORE : flags val MB_APPLMODAL : flags val MB_DEFAULT_DESKTOP_ONLY : flags val MB_DEFBUTTON1 : flags val MB_DEFBUTTON2 : flags val MB_DEFBUTTON3 : flags val MB_DEFBUTTON4 : flags val MB_HELP : flags val MB_ICONASTERISK : flags val MB_ICONERROR : flags val MB_ICONEXCLAMATION : flags val MB_ICONHAND : flags val MB_ICONINFORMATION : flags val MB_ICONQUESTION : flags val MB_ICONSTOP : flags val MB_ICONWARNING : flags val MB_NOFOCUS : flags val MB_OK : flags val MB_OKCANCEL : flags val MB_RETRYCANCEL : flags val MB_RIGHT : flags val MB_RTLREADING : flags val MB_SERVICE_NOTIFICATION : flags val MB_SERVICE_NOTIFICATION_NT3X : flags val MB_SETFOREGROUND : flags val MB_SYSTEMMODAL : flags val MB_TASKMODAL : flags val MB_TOPMOST : flags val MB_USERICON : flags val MB_YESNO : flags val MB_YESNOCANCEL : flags end val MessageBox : HWND option * string * string * MessageBoxStyle.flags -> int val MessageBeep: MessageBoxStyle.flags -> unit end = struct local open CInterface open Base open Globals fun user name = load_sym (load_lib "user32.dll") name in type HWND = HWND structure MessageBoxStyle = struct type flags = SysWord.word fun toWord f = f fun fromWord f = f val flags = List.foldl (fn (a, b) => SysWord.orb(a,b)) 0w0 fun allSet (fl1, fl2) = SysWord.andb(fl1, fl2) = fl1 fun anySet (fl1, fl2) = SysWord.andb(fl1, fl2) <> 0w0 fun clear (fl1, fl2) = SysWord.andb(SysWord.notb fl1, fl2) val MB_OK = 0wx00000000 val MB_OKCANCEL = 0wx00000001 val MB_ABORTRETRYIGNORE = 0wx00000002 val MB_YESNOCANCEL = 0wx00000003 val MB_YESNO = 0wx00000004 val MB_RETRYCANCEL = 0wx00000005 val MB_ICONHAND = 0wx00000010 val MB_ICONQUESTION = 0wx00000020 val MB_ICONEXCLAMATION = 0wx00000030 val MB_ICONASTERISK = 0wx00000040 val MB_USERICON = 0wx00000080 val MB_ICONWARNING = MB_ICONEXCLAMATION val MB_ICONERROR = MB_ICONHAND val MB_ICONINFORMATION = MB_ICONASTERISK val MB_ICONSTOP = MB_ICONHAND val MB_DEFBUTTON1 = 0wx00000000 val MB_DEFBUTTON2 = 0wx00000100 val MB_DEFBUTTON3 = 0wx00000200 val MB_DEFBUTTON4 = 0wx00000300 val MB_APPLMODAL = 0wx00000000 val MB_SYSTEMMODAL = 0wx00001000 val MB_TASKMODAL = 0wx00002000 val MB_HELP = 0wx00004000 (* Help Button *) val MB_NOFOCUS = 0wx00008000 val MB_SETFOREGROUND = 0wx00010000 val MB_DEFAULT_DESKTOP_ONLY = 0wx00020000 val MB_TOPMOST = 0wx00040000 val MB_RIGHT = 0wx00080000 val MB_RTLREADING = 0wx00100000 val MB_SERVICE_NOTIFICATION = 0wx00200000 val MB_SERVICE_NOTIFICATION_NT3X = 0wx00040000 val all = flags[MB_OK, MB_OKCANCEL, MB_ABORTRETRYIGNORE, MB_YESNOCANCEL, MB_YESNO, MB_RETRYCANCEL, MB_ICONHAND, MB_ICONQUESTION, MB_ICONEXCLAMATION, MB_ICONASTERISK, MB_USERICON, MB_DEFBUTTON1, MB_DEFBUTTON2, MB_DEFBUTTON3, MB_DEFBUTTON4, MB_APPLMODAL, MB_SYSTEMMODAL, MB_TASKMODAL, MB_HELP, MB_NOFOCUS, MB_SETFOREGROUND, MB_DEFAULT_DESKTOP_ONLY, MB_TOPMOST, MB_RIGHT, MB_RTLREADING, MB_SERVICE_NOTIFICATION, MB_SERVICE_NOTIFICATION_NT3X] val intersect = List.foldl (fn (a, b) => SysWord.andb(a,b)) all end (* Return values from a message box. Should this be a datatype? *) val IDOK = 1 val IDCANCEL = 2 val IDABORT = 3 val IDRETRY = 4 val IDIGNORE = 5 val IDYES = 6 val IDNO = 7 val IDCLOSE = 8 val IDHELP = 9 val MBSTYLE: MessageBoxStyle.flags Conversion = WORD val MessageBox = call4 (user "MessageBoxA") (HWNDOPT, STRING, STRING, MBSTYLE) INT val MessageBeep = call1 (user "MessageBeep") MBSTYLE (SUCCESSSTATE "MessageBeep") end end; polyml.5.2.1/mlsource/extra/Win/Metafile.sml0000644000175000017500000002215010313043367017750 0ustar daviddavid(* Copyright (c) 2001 David C.J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure Metafile : sig type HENHMETAFILE type HMETAFILE type HDC (*= Base.HDC*) type RECT = { top: int, left: int, bottom: int, right: int } type SIZE = { cx: int, cy: int } datatype MapMode = datatype Transform.MapMode type METAFILEPICT = {mm: MapMode, size: SIZE, hMF: HMETAFILE} type ENHMETAHEADER = { bounds: RECT, frame: RECT, fileSize: int, records: int, handles: int, palEntries: int, resolutionPixels: SIZE, resolutionMM: SIZE, openGL: bool } val CloseEnhMetaFile : HDC -> HENHMETAFILE val CloseMetaFile : HDC -> HMETAFILE val CopyEnhMetaFile : HENHMETAFILE * string -> HENHMETAFILE val CopyMetaFile : HMETAFILE * string -> HMETAFILE val CreateEnhMetaFile : HDC * string option * RECT * {pictureName: string, applicationName: string} option -> HDC val CreateMetaFile : string option -> HDC val DeleteEnhMetaFile : HENHMETAFILE -> unit val DeleteMetaFile : HMETAFILE -> unit val GdiComment : HDC * Word8Vector.vector -> unit val GetEnhMetaFile : string -> HENHMETAFILE val GetEnhMetaFileBits : HENHMETAFILE -> Word8Vector.vector val GetEnhMetaFileDescription : HENHMETAFILE -> {pictureName: string, applicationName: string} option val GetEnhMetaFileHeader : HENHMETAFILE -> ENHMETAHEADER val GetMetaFile : string -> HMETAFILE val GetMetaFileBitsEx : HMETAFILE -> Word8Vector.vector val GetWinMetaFileBits : HENHMETAFILE * Transform.MapMode * HDC -> Word8Vector.vector val PlayEnhMetaFile : HDC * HENHMETAFILE * RECT -> unit val PlayMetaFile : HDC * HMETAFILE -> unit val SetEnhMetaFileBits : Word8Vector.vector -> HENHMETAFILE val SetMetaFileBits : Word8Vector.vector -> HMETAFILE val SetWinMetaFileBits : Word8Vector.vector * HDC * {size: SIZE, mapMode: MapMode} option -> HENHMETAFILE end = struct local open CInterface Base GdiBase in datatype MapMode = datatype Transform.MapMode type HENHMETAFILE = HENHMETAFILE and HMETAFILE = HMETAFILE type HDC = Base.HDC type SIZE = SIZE and RECT = RECT type METAFILEPICT = METAFILEPICT (* TODO: Many of these should check for NULL as a result indicating an error. *) val CloseEnhMetaFile = call1 (gdi "CloseEnhMetaFile") (HDC) HENHMETAFILE and CloseMetaFile = call1 (gdi "CloseMetaFile") (HDC) HMETAFILE and CopyEnhMetaFile = call2 (gdi "CopyEnhMetaFileA") (HENHMETAFILE, STRING) HENHMETAFILE and CopyMetaFile = call2 (gdi "CopyMetaFileA") (HMETAFILE, STRING) HMETAFILE and CreateMetaFile = call1 (gdi "CreateMetaFileA") (STRINGOPT) HDC and DeleteEnhMetaFile = call1 (gdi "DeleteEnhMetaFile") (HENHMETAFILE) (SUCCESSSTATE "DeleteEnhMetaFile") and DeleteMetaFile = call1 (gdi "DeleteMetaFile") (HMETAFILE) (SUCCESSSTATE "DeleteMetaFile") and GetEnhMetaFile = call1 (gdi "GetEnhMetaFileA") (STRING) HENHMETAFILE and GetMetaFile = call1 (gdi "GetMetaFileA") (STRING) HMETAFILE and PlayEnhMetaFile = call3(gdi "PlayEnhMetaFile") (HDC, HENHMETAFILE, POINTERTO RECT) (SUCCESSSTATE "PlayEnhMetaFile") and PlayMetaFile = call2(gdi "PlayMetaFile") (HDC, HMETAFILE) (SUCCESSSTATE "PlayMetaFile") local val cemf = call4 (gdi "CreateEnhMetaFileA") (HDC, STRINGOPT, POINTERTO RECT, POINTER) HDC in fun CreateEnhMetaFile(hdc, name, r, NONE) = cemf(hdc, name, r, toCint 0) | CreateEnhMetaFile(hdc, name, r, SOME{applicationName, pictureName}) = let val appSize = size applicationName and pictSize = size pictureName val buff = alloc (appSize + pictSize + 3) Cchar in (* The two strings are copied to the buffer with a null between and two nulls at the end. *) fillCstring buff applicationName; fillCstring (offset (appSize+1) Cchar buff) pictureName; assign Cchar (offset (appSize+pictSize+2) Cchar buff) (toCchar #"\000"); cemf(hdc, name, r, address buff) end end fun GdiComment(hdc, v) = let val vecsize = Word8Vector.length v val buff = fromWord8vec v in call3 (gdi "GdiComment") (HDC, INT, POINTER) (SUCCESSSTATE "GdiComment") (hdc, vecsize, buff) end local val gemfb = call3 (gdi "GetEnhMetaFileBits") (HENHMETAFILE, INT, POINTER) (POSINT "GetEnhMetaFileBits") in fun GetEnhMetaFileBits(hemf: HENHMETAFILE): Word8Vector.vector = let (* Call with a NULL buffer to find out how big it is. *) val size = gemfb(hemf, 0, toCint 0) val buff = alloc size Cchar val res = gemfb(hemf, size, address buff) in toWord8vec(address buff, size) end end local val gemfb = call3 (gdi "GetMetaFileBitsEx") (HMETAFILE, INT, POINTER) (POSINT "GetMetaFileBitsEx") in fun GetMetaFileBitsEx(hemf: HMETAFILE): Word8Vector.vector = let (* Call with a NULL buffer to find out how big it is. *) val size = gemfb(hemf, 0, toCint 0) val buff = alloc size Cchar val res = gemfb(hemf, size, address buff) in toWord8vec(address buff, size) end end local val gemfd = call3 (gdi "GetEnhMetaFileDescriptionA") (HENHMETAFILE, INT, POINTER) INT in fun GetEnhMetaFileDescription(hemf: HENHMETAFILE) = (* Call with a NULL buffer to find out how big it is. *) case gemfd(hemf, 0, toCint 0) of 0 => NONE (* No error - simply no description. *) | len => if len < 0 then raise OS.SysErr("GetEnhMetaFileDescription", SOME(GetLastError())) else let (* The application and picture names are encoded as a pair. *) val buff = alloc len Cchar val res = gemfd(hemf, len, address buff) val str1 = fromCstring(address buff) val str2 = fromCstring(address(offset (size str1 +1) Cchar buff)) in SOME {applicationName=str1, pictureName=str2} end end fun SetEnhMetaFileBits(v: Word8Vector.vector): HENHMETAFILE = call2 (gdi "SetEnhMetaFileBits") (INT, POINTER) HENHMETAFILE (Word8Vector.length v, fromWord8vec v) fun SetMetaFileBits(v: Word8Vector.vector): HMETAFILE = call2 (gdi "SetMetaFileBits") (INT, POINTER) HMETAFILE (Word8Vector.length v, fromWord8vec v) local val gwmfb = call5 (gdi "GetWinMetaFileBits") (HENHMETAFILE, INT, POINTER, MAPMODE, HDC) (POSINT "GetWinMetaFileBits") in fun GetWinMetaFileBits(hemf, mapMode, hdc) = let (* Call with a null pointer to get the size. *) val size = gwmfb(hemf, 0, toCint 0, mapMode, hdc) val buff = alloc size Cchar val res = gwmfb(hemf, size, address buff, mapMode, hdc) in toWord8vec(address buff, size) end end local val swmfb = call4 (gdi "SetWinMetaFileBits") (INT, POINTER, HDC, POINTER) HENHMETAFILE val (_, fromMfp, _) = breakConversion METAFILEPICT in fun SetWinMetaFileBits(v, hdc, opts) = let val optBuff = case opts of NONE => toCint 0 | SOME {size, mapMode} => address(fromMfp{mm=mapMode, size=size, hMF=hgdiObjNull}) in swmfb(Word8Vector.length v, fromWord8vec v, hdc, optBuff) end end type ENHMETAHEADER = { bounds: RECT, frame: RECT, fileSize: int, records: int, handles: int, palEntries: int, resolutionPixels: SIZE, resolutionMM: SIZE, openGL: bool } local val ENHMETAHEADER = STRUCT18(INT, INT, RECT, RECT, INT, INT, INT, INT, SHORT, SHORT, INT, INT, INT, SIZE, SIZE, INT, INT, BOOL) val (toEMH, _, _) = breakConversion ENHMETAHEADER val gemf = call3 (gdi "GetEnhMetaFileHeader") (HENHMETAFILE, INT, POINTER) (POSINT "GetEnhMetaFileHeader") in fun GetEnhMetaFileHeader(h: HENHMETAFILE): ENHMETAHEADER = let (* Initial call with a NULL buffer to get size and check the handle. *) val size = gemf(h, 0, toCint 0) val buff = alloc size Cchar val res = gemf(h, size, address buff) val (_, _, bounds, frame, _, _, fileSize, records, handles, _, descSize, offDesc, palEntries, resolutionPixels, resolutionMM, pixelFormatSize, pixelFormatOff, openGL) = toEMH buff (* Ignore the description and the pixelFormat structure. We can get the description using GetEnhMetaFileDescription. *) in { bounds = bounds, frame = frame, fileSize = fileSize, records = records, handles = handles, palEntries = palEntries, resolutionPixels = resolutionPixels, resolutionMM = resolutionMM, openGL = openGL } end end (* Other metafile Functions EnhMetaFileProc EnumEnhMetaFile GetEnhMetaFilePaletteEntries PlayEnhMetaFileRecord Obsolete Functions EnumMetaFile EnumMetaFileProc PlayMetaFileRecord SetMetaFileBitsEx *) end end; polyml.5.2.1/mlsource/extra/Win/Mouse.sml0000644000175000017500000000353010313043367017313 0ustar daviddavid(* Copyright (c) 2001 David C.J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure Mouse : sig type HWND type POINT = { x: int, y: int } val DragDetect : HWND * POINT -> bool val GetCapture : unit -> HWND option val GetDoubleClickTime : unit -> Time.time val ReleaseCapture : unit -> unit val SetCapture : HWND -> HWND option val SetDoubleClickTime : Time.time -> unit val SwapMouseButton : bool -> bool end = struct local open CInterface Base in type HWND = HWND and POINT = POINT val GetCapture = call0 (user "GetCapture") () HWNDOPT val SetCapture = call1 (user "SetCapture") (HWND) HWNDOPT val ReleaseCapture = call0 (user "ReleaseCapture") () (SUCCESSSTATE "ReleaseCapture") val SetDoubleClickTime = call1 (user "SetDoubleClickTime") (INT) (SUCCESSSTATE "SetDoubleClickTime") o Time.toMilliseconds val GetDoubleClickTime = Time.fromMilliseconds o call0 (user "GetDoubleClickTime") () INT val SwapMouseButton = call1 (user "SwapMouseButton") (BOOL) BOOL val DragDetect = call2 (user "DragDetect") (HWND, POINT) BOOL end end; (* GetMouseMovePoints - NT 5.0 and Windows 98 only mouse_event TrackMouseEvent *) polyml.5.2.1/mlsource/extra/Win/Painting.sml0000644000175000017500000001543210676746157020023 0ustar daviddavid(* Copyright (c) 2001 David C.J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure Painting : sig type HWND and HDC and COLORREF and HRGN type RECT = { top: int, left: int, bottom: int, right: int } type BinaryRasterOperation val R2_BLACK : BinaryRasterOperation val R2_COPYPEN : BinaryRasterOperation val R2_MASKNOTPEN : BinaryRasterOperation val R2_MASKPEN : BinaryRasterOperation val R2_MASKPENNOT : BinaryRasterOperation val R2_MERGENOTPEN : BinaryRasterOperation val R2_MERGEPEN : BinaryRasterOperation val R2_MERGEPENNOT : BinaryRasterOperation val R2_NOP : BinaryRasterOperation val R2_NOT : BinaryRasterOperation val R2_NOTCOPYPEN : BinaryRasterOperation val R2_NOTMASKPEN : BinaryRasterOperation val R2_NOTMERGEPEN : BinaryRasterOperation val R2_NOTXORPEN : BinaryRasterOperation val R2_WHITE : BinaryRasterOperation val R2_XORPEN : BinaryRasterOperation type PAINTSTRUCT = { hdc: HDC, erase: bool, paint: RECT, private: Word8Vector.vector } val BeginPaint : HWND -> HDC * PAINTSTRUCT val EndPaint : HWND * PAINTSTRUCT -> unit val GdiFlush : unit -> unit val GdiGetBatchLimit : unit -> int val GdiSetBatchLimit : int -> int val GetBkColor : HDC -> COLORREF val GetROP2 : HDC -> BinaryRasterOperation val GetUpdateRect : HWND * bool -> RECT option val GetUpdateRgn : HWND * HRGN * bool -> Region.ResultRegion val GetWindowDC : HWND -> HDC val InvalidateRgn : HWND * HRGN * bool -> unit val SetBkColor : HDC * COLORREF -> COLORREF val SetROP2 : HDC * BinaryRasterOperation -> BinaryRasterOperation val WindowFromDC : HDC -> HWND val InvalidateRect: HWND * RECT * bool -> unit end = struct local open CInterface Base GdiBase fun checkDC name c = if isHdcNull c then raise OS.SysErr(name, SOME(GetLastError())) else c in type ResultRegion = Region.ResultRegion type HDC = HDC and HRGN = HRGN and HWND = HWND type RECT = RECT and COLORREF = COLORREF (* GetROP2 and SetROP2. *) local datatype BinaryRasterOperation = W of int in type BinaryRasterOperation = BinaryRasterOperation val BINARYRASTEROPERATION = absConversion {abs = W, rep = fn W n => n} INT val R2_BLACK = W (1 (* 0 *)) val R2_NOTMERGEPEN = W (2 (* DPon *)) val R2_MASKNOTPEN = W (3 (* DPna *)) val R2_NOTCOPYPEN = W (4 (* PN *)) val R2_MASKPENNOT = W (5 (* PDna *)) val R2_NOT = W (6 (* Dn *)) val R2_XORPEN = W (7 (* DPx *)) val R2_NOTMASKPEN = W (8 (* DPan *)) val R2_MASKPEN = W (9 (* DPa *)) val R2_NOTXORPEN = W (10 (* DPxn *)) val R2_NOP = W (11 (* D *)) val R2_MERGENOTPEN = W (12 (* DPno *)) val R2_COPYPEN = W (13 (* P *)) val R2_MERGEPENNOT = W (14 (* PDno *)) val R2_MERGEPEN = W (15 (* DPo *)) val R2_WHITE = W (16 (* 1 *)) end val GdiFlush = call0 (gdi "GdiFlush") () (SUCCESSSTATE "GdiFlush") val GdiGetBatchLimit = call0 (gdi "GdiGetBatchLimit") () INT val GdiSetBatchLimit = call1 (gdi "GdiSetBatchLimit") (INT) INT val GetBkColor = call1 (gdi "GetBkColor") (HDC) COLORREF val GetROP2 = call1(user "GetROP2") (HDC) BINARYRASTEROPERATION val GetUpdateRgn = call3(user "GetUpdateRgn") (HWND,HRGN,BOOL) RESULTREGION val GetWindowDC = call1(user "GetWindowDC") (HWND) HDC val InvalidateRgn = call3(user "InvalidateRgn") (HWND,HRGN,BOOL) (SUCCESSSTATE "InvalidateRgn") val SetBkColor = call2 (gdi "SetBkColor") (HDC, COLORREF) COLORREF val WindowFromDC = call1(user "WindowFromDC") (HDC) HWND val SetROP2 = call2(user "SetROP2") (HDC, BINARYRASTEROPERATION) BINARYRASTEROPERATION fun GetUpdateRect (hw: HWND, erase: bool): RECT option = let val (from,_,rtype) = breakConversion RECT val va = address (alloc 1 rtype) (* If the update area is empty the result is zero. *) val res = call3 (user "GetUpdateRect") (HWND, POINTER, BOOL) BOOL (hw, va, erase) in if res then SOME(from(deref va)) else NONE end type PAINTSTRUCT = { hdc: HDC, erase: bool, paint: RECT, private: Word8Vector.vector } local val PAINTSTRUCT = STRUCT4(HDC, BOOL, RECT, BYTEARRAY 40) val (fromPS, toPS, psStr) = breakConversion PAINTSTRUCT fun fromCPS(b: vol): PAINTSTRUCT = let val (hdc, erase, paint, private) = fromPS b in {hdc = hdc, erase = erase, paint = paint, private = private} end fun toCPS({hdc, erase, paint, private}: PAINTSTRUCT): vol = toPS(hdc, erase, paint, private) val beginPaint = call2 (user "BeginPaint") (HWND, POINTER) HDC val endPaint = call2 (user "EndPaint") (HWND, POINTER) VOID in fun BeginPaint(hwnd: HWND): HDC * PAINTSTRUCT = let val b = alloc 1 psStr val hdc = checkDC "BeginPaint" (beginPaint (hwnd, address b)) in (hdc, fromCPS b) end and EndPaint(hwnd: HWND, ps: PAINTSTRUCT): unit = endPaint(hwnd, address(toCPS ps)) end val InvalidateRect = (checkResult "InvalidateRect") o (call3 (user "InvalidateRect") (HWND, POINTERTO RECT, BOOL) BOOL) (* Other painting and drawing functions: DrawAnimatedRects DrawCaption DrawEdge DrawFocusRect DrawFrameControl DrawState DrawStateProc ExcludeUpdateRgn GetBkMode GetBoundsRect GetWindowRgn GrayString LockWindowUpdate OutputProc PaintDesktop RedrawWindow SetBkMode SetBoundsRect SetWindowRgn UpdateWindow ValidateRect ValidateRgn *) end end; polyml.5.2.1/mlsource/extra/Win/Path.sml0000644000175000017500000001062010313043367017115 0ustar daviddavid(* Copyright (c) 2001 David C.J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure Path : sig type HDC and HRGN type POINT = {x: int, y: int} datatype PointType = datatype Line.PointType val AbortPath : HDC -> unit val BeginPath : HDC -> unit val CloseFigure : HDC -> unit val EndPath : HDC -> unit val FillPath : HDC -> unit val FlattenPath : HDC -> unit val GetMiterLimit : HDC -> real val GetPath : HDC -> (PointType * POINT) list val PathToRegion : HDC -> HRGN val SetMiterLimit : HDC * real -> real val StrokeAndFillPath : HDC -> unit val StrokePath : HDC -> unit val WidenPath : HDC -> unit end = struct local open CInterface Base fun callgdi name = call_sym (load_sym (load_lib "gdi32.DLL") name) fun gdicall_IW name CR (C1,C2) (a1) = let val (from1,to1,ctype1) = breakConversion C1 val (from2,to2,ctype2) = breakConversion C2 val (fromR,toR,ctypeR) = breakConversion CR val va1 = to1 a1 val va2 = address (alloc 1 ctype2) val res = callgdi name [(ctype1,va1),(Cpointer ctype2,va2)] ctypeR val _: unit = fromR res in (from2 (deref va2)) end fun gdicall_IIW name CR (C1,C2,C3) (a1,a2) = let val (from1,to1,ctype1) = breakConversion C1 val (from2,to2,ctype2) = breakConversion C2 val (from3,to3,ctype3) = breakConversion C3 val (fromR,toR,ctypeR) = breakConversion CR val va1 = to1 a1 val va2 = to2 a2 val va3 = address (alloc 1 ctype3) val res = callgdi name [(ctype1,va1),(ctype2,va2),(Cpointer ctype3,va3)] ctypeR val _ : unit = fromR res in (from3 (deref va3)) end in type HDC = HDC and POINT = POINT and HRGN = HRGN datatype PointType = datatype Line.PointType (* PATHS *) val AbortPath = call1(gdi "AbortPath") (HDC) (SUCCESSSTATE "AbortPath") val BeginPath = call1(gdi "BeginPath") (HDC) (SUCCESSSTATE "BeginPath") val CloseFigure = call1(gdi "CloseFigure") (HDC) (SUCCESSSTATE "CloseFigure") val EndPath = call1(gdi "EndPath") (HDC) (SUCCESSSTATE "EndPath") val FillPath = call1(gdi "FillPath") (HDC) (SUCCESSSTATE "FillPath") val FlattenPath = call1(gdi "FlattenPath") (HDC) (SUCCESSSTATE "FlattenPath") val GetMiterLimit = gdicall_IW "GetMiterLimit" (SUCCESSSTATE "GetMiterLimit") (HDC,FLOAT) val PathToRegion = call1(gdi "PathToRegion") (HDC) HRGN val SetMiterLimit = gdicall_IIW "SetMiterLimit" (SUCCESSSTATE "SetMiterLimit") (HDC,FLOAT,FLOAT) val StrokeAndFillPath = call1(gdi "StrokeAndFillPath") (HDC) (SUCCESSSTATE "StrokeAndFillPath") val StrokePath = call1(gdi "StrokePath") (HDC) (SUCCESSSTATE "StrokePath") val WidenPath = call1(gdi "WidenPath") (HDC) (SUCCESSSTATE "WidenPath") fun GetPath h = let val gpCall = call4 (gdi "GetPath") (HDC, POINTER, POINTER, INT) INT val null = toCint 0 (* Passing 0 as the size will retrieve the number of points. *) val count = gpCall(h, null, null, 0) val _ = if count < 0 then raise OS.SysErr("GetPath", SOME(GetLastError())) else () val (fromPt, _, ptStruct) = breakConversion POINT val (fromTy, _, _) = breakConversion GdiBase.POINTTYPE val ptarr = alloc count ptStruct val farr = alloc count Cchar val res = gpCall(h, address ptarr, address farr, count) fun getElement(n:int): PointType * POINT = (fromTy(deref(offset n Cchar farr)), fromPt(deref(offset n ptStruct ptarr))) in List.tabulate(count, getElement) end end end; polyml.5.2.1/mlsource/extra/Win/Pen.sml0000644000175000017500000000437610313043367016756 0ustar daviddavid(* Copyright (c) 2001 David C.J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure Pen : sig type HPEN datatype PenStyle = PS_ALTERNATE | PS_COSMETIC | PS_DASH | PS_DASHDOT | PS_DASHDOTDOT | PS_DOT | PS_ENDCAP_FLAT | PS_ENDCAP_ROUND | PS_ENDCAP_SQUARE | PS_GEOMETRIC | PS_INSIDEFRAME | PS_JOIN_BEVEL | PS_JOIN_MITER | PS_JOIN_ROUND | PS_NULL | PS_SOLID | PS_USERSTYLE type COLORREF = Color.COLORREF type LOGBRUSH = Brush.LOGBRUSH type LOGPEN = PenStyle * int option * COLORREF val CreatePen : PenStyle list * int * COLORREF -> HPEN val CreatePenIndirect : LOGPEN -> HPEN val ExtCreatePen : PenStyle list * int * LOGBRUSH * (int * int) list -> HPEN end = struct local open CInterface Base in open GdiBase type HPEN = HPEN val CreatePen = call3 (gdi "CreatePen") (PENSTYLE,INT,COLORREF) (HPEN) val CreatePenIndirect = call1 (gdi "CreatePenIndirect") (POINTERTO LOGPEN) (HPEN) fun ExtCreatePen (ps: PenStyle list, width, log: LOGBRUSH, dashSp: (int*int) list) = let val PAIR = absConversion {abs = fn _ => raise Fail "PAIR", rep = MAKELONG} LONG (* custom is supposed to be NULL if ps <> PS_USERSTYLE. Make sure it is at least NULL if the list is empty. *) val (custom, len) = case dashSp of [] => (toCint 0, 0) | _ => list2Vector PAIR dashSp in call5 (gdi "ExtCreatePen") (PENSTYLE,LONG,LOGBRUSH,LONG,POINTER) (HPEN) (ps, width, log, len, custom) end end end; polyml.5.2.1/mlsource/extra/Win/Printing.sml0000644000175000017500000000447310313043367020024 0ustar daviddavid(* Copyright (c) 2001 David C.J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure Printing : sig type HDC type DOCINFO = { docName: string, output: string option, dType: string option} val StartDoc : HDC * DOCINFO -> int val StartPage : HDC -> unit val AbortDoc : HDC -> unit val EndDoc : HDC -> unit val EndPage : HDC -> unit datatype WMPrintOption = PRF_CHECKVISIBLE | PRF_NONCLIENT | PRF_CLIENT | PRF_ERASEBKGND | PRF_CHILDREN | PRF_OWNED end = struct local open CInterface Base in type HDC = HDC type DOCINFO = { docName: string, output: string option, dType: string option} (* PRINTING AND SPOOLING. *) fun StartDoc(hdc: HDC, info: DOCINFO as {docName, output, dType}): int = let val DOCINFO = STRUCT5(INT, STRING, STRINGOPT, STRINGOPT, WORD) val (_,_,dinfo) = breakConversion DOCINFO val startdoc = call2(gdi "StartDocA")(HDC, DOCINFO) INT val res = startdoc(hdc, (sizeof dinfo, docName, output, dType, 0w0)) in if res > 0 then res else raise OS.SysErr("StartDoc", SOME(GetLastError())) end local fun checkSuccess name res = if res > 0 then () else raise OS.SysErr(name, SOME(GetLastError())) in val EndDoc = checkSuccess "EndDoc" o call1(gdi "EndDoc") HDC INT val StartPage = checkSuccess "StartPage" o call1(gdi "StartPage") HDC INT val EndPage = checkSuccess "EndPage" o call1(gdi "EndPage") HDC INT val AbortDoc = checkSuccess "AbortDoc" o call1(gdi "AbortDoc") HDC INT end datatype WMPrintOption = datatype MessageBase.WMPrintOption (* Other printing functions: DeviceCapabilities Escape ExtEscape SetAbortProc *) end end; polyml.5.2.1/mlsource/extra/Win/Rectangle.sml0000644000175000017500000000755310313043367020140 0ustar daviddavid(* Copyright (c) 2001 David C.J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure Rectangle : sig type POINT = { x: int, y: int } type RECT = { top: int, left: int, bottom: int, right: int } val EqualRect : RECT * RECT -> bool val InflateRect : RECT * int * int -> unit * RECT val IntersectRect : RECT * RECT -> bool * RECT val IsRectEmpty : RECT -> bool val OffsetRect : RECT * int * int -> RECT val PtInRect : RECT * POINT -> bool val SetRect : int * int * int * int -> RECT val SetRectEmpty : unit -> RECT val SubtractRect : RECT * RECT -> RECT val UnionRect : RECT * RECT -> RECT end = struct local open CInterface Base fun calluser name = call_sym (load_sym (load_lib "user32.DLL") name) fun usercall_MII name CR (C1,C2,C3) (a1,a2,a3) = let val (from1,to1,ctype1) = breakConversion C1 val (from2,to2,ctype2) = breakConversion C2 val (from3,to3,ctype3) = breakConversion C3 val (fromR,toR,ctypeR) = breakConversion CR val va1 = address (to1 a1) val va2 = to2 a2 val va3 = to3 a3 val res = calluser name [(Cpointer ctype1,va1),(ctype2,va2),(ctype3,va3)] ctypeR in (fromR res,from1 (deref va1)) end in type RECT = RECT and POINT = POINT (* RECTANGLES. *) val EqualRect = call2 (user "EqualRect") (POINTERTO RECT, POINTERTO RECT) BOOL val InflateRect = usercall_MII "InflateRect" (SUCCESSSTATE "InflateRect") (RECT,INT,INT) fun IntersectRect(r1, r2) = let val (from,_,rtype) = breakConversion RECT val va = address (alloc 1 rtype) val res = call3 (user "IntersectRect") (POINTER, POINTERTO RECT, POINTERTO RECT) BOOL (va, r1, r2) in (res, from(deref va)) end fun OffsetRect(r: RECT, dx: int, dy: int): RECT = let val (from,_,rtype) = breakConversion RECT val va = address (alloc 1 rtype) in call3 (user "OffsetRect") (POINTER, INT, INT) (SUCCESSSTATE "OffsetRect")(va, dx, dy); from(deref va) end val IsRectEmpty = call1(user "IsRectEmpty") (POINTERTO RECT) BOOL val PtInRect = call2(user "PtInRect") (POINTERTO RECT,POINT) BOOL fun SetRect(a,b,c,d) : RECT = let val (from,_,rtype) = breakConversion RECT val va = address (alloc 1 rtype) in call5 (user "SetRect") (POINTER, INT, INT, INT, INT) (SUCCESSSTATE "SetRect") (va, a, b, c, d); from(deref va) end fun SetRectEmpty () : RECT = let val (from,_,rtype) = breakConversion RECT val va = address (alloc 1 rtype) in call1 (user "SetRectEmpty") (POINTER) (SUCCESSSTATE "SetRectEmpty") va; from(deref va) end local fun rectCall name (r1: RECT, r2: RECT) : RECT = let val (from,_,rtype) = breakConversion RECT val va = address (alloc 1 rtype) in call3 (user name) (POINTER, POINTERTO RECT, POINTERTO RECT) (SUCCESSSTATE name) (va, r1, r2); from(deref va) end in val SubtractRect = rectCall "SubtractRect" val UnionRect = rectCall "UnionRect" end (* Other Rectangle functions: CopyRect *) end end; polyml.5.2.1/mlsource/extra/Win/Region.sml0000644000175000017500000001756210313043370017452 0ustar daviddavid(* Copyright (c) 2001 David C.J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure Region: sig type HDC and HBRUSH and HRGN and HPEN type POINT = { x: int, y: int } type RECT = { top: int, left: int, bottom: int, right: int } type RegionOperation val RGN_AND : RegionOperation val RGN_COPY : RegionOperation val RGN_DIFF : RegionOperation val RGN_ERROR : RegionOperation val RGN_OR : RegionOperation val RGN_XOR : RegionOperation type ResultRegion val COMPLEXREGION : ResultRegion val NULLREGION : ResultRegion val ERROR : ResultRegion val SIMPLEREGION : ResultRegion type PolyFillMode val ALTERNATE : PolyFillMode val WINDING : PolyFillMode val CombineRgn : HRGN * HRGN * HRGN * RegionOperation -> ResultRegion val CreateEllipticRgn : RECT -> HRGN val CreatePolygonRgn : POINT list * PolyFillMode -> HPEN val CreateRectRgn : RECT -> HRGN val CreateRoundRectRgn : RECT * int * int -> HRGN val EqualRgn : HRGN * HRGN -> bool val FillRgn : HDC * HRGN * HBRUSH -> unit val FrameRgn : HDC * HRGN * HBRUSH * int * int -> unit val GetPolyFillMode : HDC -> PolyFillMode val GetRgnBox : HRGN -> RECT val InvertRgn : HDC * HRGN -> unit val OffsetRgn : HRGN * int * int -> ResultRegion val PaintRgn : HDC * HRGN -> unit val PtInRegion : HRGN * int * int -> bool val RectInRegion : HRGN * RECT -> bool val SetPolyFillMode : HDC * PolyFillMode -> PolyFillMode val SetRectRgn : HRGN * RECT -> bool end = struct local open CInterface Base fun callgdi name = call_sym (load_sym (load_lib "gdi32.DLL") name) fun gdicall_IW name CR (C1,C2) (a1) = let val (from1,to1,ctype1) = breakConversion C1 val (from2,to2,ctype2) = breakConversion C2 val (fromR,toR,ctypeR) = breakConversion CR val va1 = to1 a1 val va2 = address (alloc 1 ctype2) val res = callgdi name [(ctype1,va1),(Cpointer ctype2,va2)] ctypeR val _: unit = fromR res in (from2 (deref va2)) end val XCOORD = INT : int Conversion val YCOORD = INT: int Conversion val XOFFSET = INT : int Conversion val YOFFSET = INT: int Conversion val HEIGHT = INT: int Conversion val WIDTH = INT: int Conversion in type HRGN = Base.HRGN and HBRUSH = Base.HBRUSH and HDC = Base.HDC and HPEN = HPEN and RECT = RECT and POINT = POINT open GdiBase local datatype PolyFillMode = W of int in type PolyFillMode = PolyFillMode val POLYFILLMODE = absConversion {abs = W, rep = fn W n => n} INT val ALTERNATE = W (1) val WINDING = W (2) end val CombineRgn = call4(gdi "CombineRgn") (HRGN,HRGN,HRGN,REGIONOPERATION) RESULTREGION val EqualRgn = call2(gdi "EqualRgn") (HRGN,HRGN) BOOL val FillRgn = call3(gdi "FillRgn") (HDC,HRGN,HBRUSH) (SUCCESSSTATE "FillRgn") val FrameRgn = call5(gdi "FrameRgn") (HDC,HRGN,HBRUSH,WIDTH,HEIGHT) (SUCCESSSTATE "FrameRgn") val GetPolyFillMode = call1(gdi "GetPolyFillMode") (HDC) POLYFILLMODE val InvertRgn = call2(gdi "InvertRgn") (HDC,HRGN) (SUCCESSSTATE "InvertRgn") val OffsetRgn = call3(gdi "OffsetRgn") (HRGN,XOFFSET,YOFFSET) RESULTREGION val PaintRgn = call2(gdi "PaintRgn") (HDC,HRGN) (SUCCESSSTATE "PaintRgn") val PtInRegion = call3(gdi "PtInRegion") (HRGN,XCOORD,YCOORD) BOOL val GetRgnBox = gdicall_IW "GetRgnBox" (SUCCESSSTATE "GetRgnBox") (HRGN,RECT) val RectInRegion = call2(gdi "RectInRegion") (HRGN,RECT) BOOL val SetPolyFillMode = call2(gdi "SetPolyFillMode") (HDC,POLYFILLMODE) POLYFILLMODE fun SetRectRgn (h, ({ left, top, right, bottom }: RECT)) = call5 (gdi "SetRectRgn") (HRGN,LONG,LONG,LONG,LONG) (BOOL) (h,left,top,right,bottom) fun CreateEllipticRgn ({left,top,right,bottom}: RECT) = call4 (gdi "CreateEllipticRgn") (LONG,LONG,LONG,LONG) (HRGN) (left,top,right,bottom) fun CreateRectRgn ({left,top,right,bottom}: RECT) = call4 (gdi "CreateRectRgn") (LONG,LONG,LONG,LONG) (HRGN) (left,top,right,bottom) fun CreateRoundRectRgn ({left,top,right,bottom}: RECT,w,h) = call6 (gdi "CreateRoundRectRgn") (LONG,LONG,LONG,LONG,WIDTH,HEIGHT) (HRGN) (left,top,right,bottom,w,h) fun CreatePolygonRgn (pts: POINT list,fmode) = let val count = List.length pts val ptarr = alloc count (Cstruct [Clong,Clong]) fun pl2a v n [] = () | pl2a v n ({x,y} :: rest) = let val item = make_struct [(Clong,toClong x), (Clong,toClong y)] in ( assign (Cstruct [Clong,Clong]) (offset n (Cstruct [Clong,Clong]) v) item ; pl2a v (n+1) rest ) end val u = pl2a ptarr 0 pts in call3 (gdi "CreatePolygonRgn") (POINTER,INT,POLYFILLMODE) (HPEN) (address ptarr,count,fmode) end (* fun ExtCreateRegion (x,rects,rectmain) = let val {r11,r12,r21,r22,tx,ty} = breakXForm x val xform = make_struct [ (Cfloat,toCfloat r11), (Cfloat,toCfloat r12), (Cfloat,toCfloat r21), (Cfloat,toCfloat r22), (Cfloat,toCfloat tx), (Cfloat,toCfloat ty) ] val count = List.length rects val rectarr = alloc count (Cstruct [Clong,Clong,Clong,Clong]) fun pl2a v n [] = () | pl2a v n ({left,top,right,bottom} :: rest) = let val item = make_struct [(Clong,toClong left), (Clong,toClong top), (Clong,toClong right), (Clong,toClong bottom)] in ( assign (Cstruct [Clong,Clong,Clong,Clong]) (offset n (Cstruct [Clong,Clong,Clong,Clong]) v) item ; pl2a v (n+1) rest ) end val u = pl2a rectarr 0 rects val {left,top,right,bottom} = rectmain val rgndata = make_struct [ (Clong,toClong 32), (Clong,toClong 1), (Clong,toClong count), (Clong,toClong 0 ), (Clong,toClong left), (Clong,toClong top), (Clong,toClong right), (Clong,toClong bottom), (Cvoid,rectarr) ] val struct_size = 64 + 16 * count in call3 (gdi "ExtCreateRegion") (POINTER,INT,POINTER) (HRGN) (address xform,struct_size,address rgndata) end *) (* fun GetRegionData h = let val bufsize = call3 (gdi "GetRegionData") (HRGN,LONG,POINTER) (LONG) (h,0,toCint 0) val rgndata = alloc 1 (Cstruct [Clong,Clong,Clong,Clong, Clong,Clong,Clong,Clong,Cvoid]) val res = call3 (gdi "GetRegionData") (HRGN,LONG,POINTER) (LONG) (h,bufsize,address rgndata) in "not implemented" end *) (* Other Region Functions CreateEllipticRgnIndirect CreatePolyPolygonRgn CreateRectRgnIndirect ExtCreateRegion GetRegionData *) end end; polyml.5.2.1/mlsource/extra/Win/Resource.sml0000644000175000017500000001512110313043370020003 0ustar daviddavid(* Copyright (c) 2001 David C.J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure Resource : sig datatype ResourceType = RT_CURSOR | RT_BITMAP | RT_ICON | RT_MENU | RT_DIALOG | RT_STRING | RT_FONTDIR | RT_FONT | RT_ACCELERATOR | RT_RCDATA | RT_MESSAGETABLE | RT_GROUP_CURSOR | RT_GROUP_ICON | RT_VERSION | RT_DLGINCLUDE | RT_ANICURSOR | RT_ANIICON | RT_PLUGPLAY | RT_VXD type HRSRC type HRSRCGLOBAL type HINSTANCE datatype RESID = IdAsInt of int | IdAsString of string val MAKEINTRESOURCE : int -> RESID type HUPDATE val BeginUpdateResource : string * bool -> HUPDATE val EndUpdateResource : HUPDATE * bool -> unit val FindResource : HINSTANCE * RESID * ResourceType -> HRSRC val FindResourceEx : HINSTANCE * ResourceType * RESID * Locale.LANGID -> HRSRC val FreeLibrary : HINSTANCE -> bool val LoadLibrary : string -> HINSTANCE val LoadResource : HINSTANCE * HRSRC -> HRSRCGLOBAL val LoadString : HINSTANCE * RESID -> string val LockResource : HRSRCGLOBAL -> Word8Vector.vector val SizeofResource : HINSTANCE * HRSRC -> int val UpdateResource : HUPDATE * ResourceType * RESID * Locale.LANGID * Word8Vector.vector option -> unit end = struct open CInterface open Base datatype RESID = datatype RESID fun MAKEINTRESOURCE i = if i >= 0 andalso i < 65536 then IdAsInt i else raise Fail "resource id out of range" abstype Resource = Resource and UpdateObj = UpdateObj with end; type HUPDATE = UpdateObj HANDLE and HRSRC = Resource HANDLE; val HRSRC: HRSRC Conversion = absConversion {abs=handleOfInt, rep=intOfHandle} INT and HUPDATE: HUPDATE Conversion = absConversion {abs=handleOfInt, rep=intOfHandle} INT fun checkHandle name h = if isHNull h then raise OS.SysErr(name, SOME(GetLastError())) else h datatype ResourceType = RT_CURSOR | RT_BITMAP | RT_ICON | RT_MENU | RT_DIALOG | RT_STRING | RT_FONTDIR | RT_FONT | RT_ACCELERATOR | RT_RCDATA | RT_MESSAGETABLE | RT_GROUP_CURSOR | RT_GROUP_ICON | RT_VERSION | RT_DLGINCLUDE | RT_ANICURSOR | RT_ANIICON | RT_PLUGPLAY | RT_VXD local fun toRes 1 = RT_CURSOR | toRes 2 = RT_BITMAP | toRes 3 = RT_ICON | toRes 4 = RT_MENU | toRes 5 = RT_DIALOG | toRes 6 = RT_STRING | toRes 7 = RT_FONTDIR | toRes 8 = RT_FONT | toRes 9 = RT_ACCELERATOR | toRes 10 = RT_RCDATA | toRes 11 = RT_MESSAGETABLE | toRes 12 = RT_GROUP_CURSOR | toRes 14 = RT_GROUP_ICON | toRes 16 = RT_VERSION | toRes 17 = RT_DLGINCLUDE | toRes 19 = RT_PLUGPLAY | toRes 20 = RT_VXD | toRes 21 = RT_ANICURSOR | toRes 22 = RT_ANIICON | toRes _ = raise Fail "Unknown Resource Type" fun fromRes RT_CURSOR = 1 | fromRes RT_BITMAP = 2 | fromRes RT_ICON = 3 | fromRes RT_MENU = 4 | fromRes RT_DIALOG = 5 | fromRes RT_STRING = 6 | fromRes RT_FONTDIR = 7 | fromRes RT_FONT = 8 | fromRes RT_ACCELERATOR = 9 | fromRes RT_RCDATA = 10 | fromRes RT_MESSAGETABLE = 11 | fromRes RT_GROUP_CURSOR = 12 | fromRes RT_GROUP_ICON = 14 | fromRes RT_VERSION = 16 | fromRes RT_DLGINCLUDE = 17 | fromRes RT_PLUGPLAY = 19 | fromRes RT_VXD = 20 | fromRes RT_ANICURSOR = 21 | fromRes RT_ANIICON = 22 in val RESOURCETYPE = mkConversion (toRes o fromCint) (toCint o fromRes) Cint end local fun kernel name = load_sym (load_lib "kernel32.dll") name and user name = load_sym (load_lib "user32.dll") name datatype HRSRCGLOBAL = HRSRCGLOBAL of vol * int in type HRSRCGLOBAL = HRSRCGLOBAL val LoadLibrary = call1 (kernel "LoadLibraryA") (STRING) HINSTANCE and FreeLibrary = call1 (kernel "FreeLibrary") (HINSTANCE) BOOL and FindResource = checkHandle "FindResource" o call3 (kernel "FindResourceA") (HINSTANCE, RESID, RESOURCETYPE) HRSRC and SizeofResource = call2 (kernel "SizeofResource") (HINSTANCE, HRSRC) INT (* The name and type are in the reverse order in FindResource and FindResourceEx *) and FindResourceEx = checkHandle "FindResourceEx" o call4 (kernel "FindResourceExA") (HINSTANCE, RESOURCETYPE, RESID, LocaleBase.LANGID) HRSRC (* LoadResource - load a resource into memory and get a handle to it. *) fun LoadResource (hInst, hRsrc) = let val size = SizeofResource (hInst, hRsrc) val load = call2 (kernel "LoadResource") (HINSTANCE, HRSRC) POINTER val rsrc = load(hInst, hRsrc) in HRSRCGLOBAL(rsrc, size) end (* LockResource - get the resource as a piece of binary store. *) fun LockResource (HRSRCGLOBAL(hg, size)) = let val LockRes = call1 (kernel "LockResource") (POINTER) POINTER val res = LockRes hg in Word8Vector.tabulate(size, fn i => Word8.fromInt(ord(fromCchar(offset i Cchar (deref res)))) ) end fun LoadString (hInst, resId): string = let (* The underlying call returns the number of bytes copied EXCLUDING the terminating null. *) val load = call4 (user "LoadStringA") (HINSTANCE, RESID, POINTER, INT) INT (* The easiest way to make sure we have enough store is to loop. *) fun tryLoad n = let val store = address (alloc n Cchar) val used = load(hInst, resId, store, n) in (* We can't distinguish the empty string from a missing resource. *) if used = 0 then "" else if used < n-1 then fromCstring store else tryLoad(n*2) end in tryLoad 100 end fun BeginUpdateResource(str, flag): HUPDATE = case call2 (user "BeginUpdateResourceA") (STRING, BOOL) INT (str, flag) of 0 => raise OS.SysErr("BeginUpdateResource", SOME(GetLastError())) | h => handleOfInt h val EndUpdateResource = call2 (user "EndUpdateResource") (HUPDATE, BOOL) (SUCCESSSTATE "EndUpdateResource") local val updateResource = call6 (user "UpdateResource") (HUPDATE, RESOURCETYPE, RESID, LocaleBase.LANGID, POINTER, INT) (SUCCESSSTATE "UpdateResource") in fun UpdateResource(hup, rt, resid, lang, SOME vec) = updateResource(hup, rt, resid, lang, fromWord8vec vec, Word8Vector.length vec) | UpdateResource(hup, rt, resid, lang, NONE) = updateResource(hup, rt, resid, lang, toCint 0, 0) end end end; polyml.5.2.1/mlsource/extra/Win/ScrollBase.sml0000644000175000017500000000546610313043370020260 0ustar daviddavid(* Copyright (c) 2001 David C.J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure ScrollBase = struct local open CInterface Base in type enableArrows = { enableLeftUp: bool, enableRightDown: bool } val ESB_ENABLE_BOTH = { enableLeftUp = true, enableRightDown = true } val ESB_DISABLE_BOTH = { enableLeftUp = false, enableRightDown = false } val ESB_DISABLE_LEFT = { enableLeftUp = false, enableRightDown = true } val ESB_DISABLE_RIGHT = { enableLeftUp = true, enableRightDown = false } val ESB_DISABLE_UP = ESB_DISABLE_LEFT val ESB_DISABLE_DOWN = ESB_DISABLE_RIGHT local (* The arrows are disabled if the bit is set. *) fun toInt({enableLeftUp: bool, enableRightDown}: enableArrows) = IntInf.orb(if enableLeftUp then 0 else 1, if enableRightDown then 0 else 2) and fromInt i : enableArrows = {enableLeftUp = IntInf.andb(i, 1) = 0, enableRightDown = IntInf.andb(i, 2) = 0} in val ENABLESCROLLBARFLAG = absConversion{rep = toInt, abs = fromInt} INT end type SCROLLINFO = { minPos: int, maxPos: int, pageSize: int, pos: int, trackPos: int } datatype ScrollInfoOption = SIF_RANGE | SIF_PAGE | SIF_POS | SIF_DISABLENOSCROLL | SIF_TRACKPOS val SIF_ALL = [SIF_RANGE, SIF_PAGE, SIF_POS, SIF_TRACKPOS] local val tab = [ (SIF_RANGE, 0x0001), (SIF_PAGE, 0x0002), (SIF_POS, 0x0004), (SIF_DISABLENOSCROLL, 0x0008), (SIF_TRACKPOS, 0x0010)] in (*val (fromSIF, toSIF) = tableSetLookup(tab, NONE)*) val SCROLLINFOOPTION = tableSetConversion(tab, NONE) end local val SCROLLINFOSTRUCT = STRUCT7(INT, SCROLLINFOOPTION, INT, INT, INT, INT, INT) val (_, _, scrollInfoStruct) = breakConversion SCROLLINFOSTRUCT fun fromStruct(_, mask, minPos, maxPos, pageSize, pos, trackPos) = ({minPos = minPos, maxPos = maxPos, pageSize = pageSize, pos = pos, trackPos = trackPos}, mask) and toStruct({ minPos, maxPos, pageSize, pos, trackPos}, options) = (sizeof scrollInfoStruct, options, minPos, maxPos, pageSize, pos, trackPos) in val SCROLLINFO = absConversion{abs=fromStruct, rep=toStruct} SCROLLINFOSTRUCT end end end; polyml.5.2.1/mlsource/extra/Win/Scrollbar.sml0000644000175000017500000002170510313043370020144 0ustar daviddavid(* Copyright (c) 2001 David C.J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* Scrollbars. *) structure Scrollbar: sig type HWND and HDC and HRGN type RECT = { left: int, top: int, right: int, bottom: int } structure Style: sig include BIT_FLAGS where type flags = Window.Style.flags val WS_OVERLAPPED: flags and WS_POPUP: flags and WS_CHILD: flags and WS_MINIMIZE: flags and WS_VISIBLE: flags and WS_DISABLED:flags and WS_CLIPSIBLINGS:flags and WS_CLIPCHILDREN:flags and WS_MAXIMIZE:flags and WS_CAPTION:flags and WS_BORDER:flags and WS_DLGFRAME:flags and WS_VSCROLL:flags and WS_HSCROLL:flags and WS_SYSMENU:flags and WS_THICKFRAME:flags and WS_GROUP:flags and WS_TABSTOP:flags and WS_MINIMIZEBOX:flags and WS_MAXIMIZEBOX:flags and WS_TILED:flags and WS_ICONIC:flags and WS_SIZEBOX:flags and WS_OVERLAPPEDWINDOW:flags and WS_TILEDWINDOW:flags and WS_POPUPWINDOW:flags and WS_CHILDWINDOW:flags and SBS_HORZ:flags and SBS_VERT:flags and SBS_TOPALIGN:flags and SBS_LEFTALIGN:flags and SBS_BOTTOMALIGN:flags and SBS_RIGHTALIGN:flags and SBS_SIZEBOXTOPLEFTALIGN:flags and SBS_SIZEBOXBOTTOMRIGHTALIGN:flags and SBS_SIZEBOX:flags and SBS_SIZEGRIP:flags end type enableArrows = { enableLeftUp: bool, enableRightDown: bool } val ESB_ENABLE_BOTH: enableArrows val ESB_DISABLE_BOTH: enableArrows val ESB_DISABLE_LEFT: enableArrows val ESB_DISABLE_RIGHT: enableArrows val ESB_DISABLE_UP: enableArrows val ESB_DISABLE_DOWN: enableArrows type SCROLLINFO = { minPos: int, maxPos: int, pageSize: int, pos: int, trackPos: int } datatype ScrollInfoOption = SIF_RANGE | SIF_PAGE | SIF_POS | SIF_DISABLENOSCROLL | SIF_TRACKPOS val SIF_ALL : ScrollInfoOption list datatype ScrollBarType = SB_BOTH | SB_CTL | SB_HORZ | SB_VERT datatype ScrollWindowFlag = SW_ERASE | SW_INVALIDATE | SW_SCROLLCHILDREN val EnableScrollBar : HWND * ScrollBarType * enableArrows -> unit val GetScrollInfo : HWND * ScrollBarType * ScrollInfoOption list -> SCROLLINFO val GetScrollPos : HWND * ScrollBarType -> int val ScrollDC : HDC * int * int * RECT * RECT * HRGN -> RECT val ScrollWindow : HWND * int * int * RECT * RECT -> unit val ScrollWindowEx : HWND * int * int * RECT * RECT * HRGN * ScrollWindowFlag list -> RECT val SetScrollInfo : HWND * ScrollBarType * ScrollInfoOption list * SCROLLINFO * bool -> int val SetScrollPos : HWND * ScrollBarType * int * bool -> int val SetScrollRange : HWND * ScrollBarType * int * int * bool -> bool val ShowScrollBar : HWND * ScrollBarType * bool -> unit end = struct local open CInterface Base in open ScrollBase type HDC = HDC and HWND = HWND and HRGN = HRGN and RECT = RECT structure Style = struct open Window.Style (* Include all the windows styles. *) val SBS_HORZ = fromWord 0wx0000 val SBS_VERT = fromWord 0wx0001 val SBS_TOPALIGN = fromWord 0wx0002 val SBS_LEFTALIGN = fromWord 0wx0002 val SBS_BOTTOMALIGN = fromWord 0wx0004 val SBS_RIGHTALIGN = fromWord 0wx0004 val SBS_SIZEBOXTOPLEFTALIGN = fromWord 0wx0002 val SBS_SIZEBOXBOTTOMRIGHTALIGN = fromWord 0wx0004 val SBS_SIZEBOX = fromWord 0wx0008 val SBS_SIZEGRIP = fromWord 0wx0010 val all = flags[Window.Style.all, SBS_HORZ, SBS_VERT, SBS_TOPALIGN, SBS_BOTTOMALIGN, SBS_SIZEBOX, SBS_SIZEGRIP] val intersect = List.foldl (fn (a, b) => fromWord(SysWord.andb(toWord a, toWord b))) all end datatype ScrollBarType = SB_CTL | SB_HORZ | SB_VERT | SB_BOTH local val tab = [ (SB_HORZ, 0), (SB_VERT, 1), (SB_CTL, 2), (SB_BOTH, 3) ] in val SCROLLBARTYPE = tableConversion(tab, NONE) end datatype ScrollWindowFlag = SW_SCROLLCHILDREN | SW_INVALIDATE | SW_ERASE local val tab = [ (SW_SCROLLCHILDREN, 0x0001), (SW_INVALIDATE, 0x0002), (SW_ERASE, 0x0004) ] in val SCROLLWINDOWFLAG = tableSetConversion(tab, NONE) end local open CInterface open Base in val EnableScrollBar = call3(user "EnableScrollBar") (HWND,SCROLLBARTYPE,ENABLESCROLLBARFLAG) (SUCCESSSTATE "EnableScrollBar") val GetScrollPos = call2 (user "GetScrollPos") (HWND,SCROLLBARTYPE) INT val SetScrollRange = call5(user "SetScrollRange") (HWND,SCROLLBARTYPE,INT,INT,BOOL) BOOL val SetScrollPos = call4(user "SetScrollPos") (HWND,SCROLLBARTYPE,INT,BOOL) INT val ShowScrollBar = call3(user "ShowScrollBar") (HWND,SCROLLBARTYPE,BOOL) (SUCCESSSTATE "ShowScrollBar") val ScrollWindow = call5(user "ScrollWindow") (HWND,INT,INT,POINTERTO RECT,POINTERTO RECT) (SUCCESSSTATE "ScrollWindow") local val (fromCrect, toCrect, rectStr) = breakConversion RECT val scrollDC = call7 (user "ScrollDC") (HDC,INT,INT,POINTERTO RECT,POINTERTO RECT,HRGN,POINTER) (SUCCESSSTATE "ScrollDC") val scrollWindowEx = call8(user "ScrollWindowEx") (HWND,INT,INT,POINTERTO RECT,POINTERTO RECT,HRGN,POINTER,SCROLLWINDOWFLAG) (SUCCESSSTATE "ScrollWindowEx") in fun ScrollDC(hDC, dx, dy, prcScroll, prcClip, hrgnUpdate): RECT = let val v = alloc 1 rectStr val _ : unit = scrollDC(hDC, dx, dy, prcScroll, prcClip, hrgnUpdate, address v) in fromCrect v end and ScrollWindowEx(hWnd, dx, dy, prcScroll, prcClip, hrgnUpdate, flags) = let val v = alloc 1 rectStr val _ : unit = scrollWindowEx(hWnd, dx, dy, prcScroll, prcClip, hrgnUpdate, address v, flags) in fromCrect v end end local val getScrollInfo = call3 (user "GetScrollInfo") (HWND, SCROLLBARTYPE, POINTER) (SUCCESSSTATE "GetScrollInfo") and setScrollInfo = call4 (user "SetScrollInfo") (HWND, SCROLLBARTYPE, POINTERTO SCROLLINFO, BOOL) INT val (fromCscrollinfo, toCscrollinfo, _) = breakConversion SCROLLINFO in fun GetScrollInfo(hwnd, sbt, options): SCROLLINFO = let (* Create a vector. This must contain the size of the structure and the bits for the values required. *) val v = toCscrollinfo({minPos=0, maxPos=0, pageSize=0, pos=0, trackPos=0}, options) val _: unit = getScrollInfo(hwnd, sbt, address v) val (info, _) = fromCscrollinfo v in info end and SetScrollInfo(hwnd, sbt, options, info, redraw): int = setScrollInfo(hwnd, sbt, (info, options), redraw) end end end end; (* let open Scrollbar.Style (* The same values are used with different names for horizontal and vertical bars. Maybe we should generate different names according to whether the SBS_VERT flag is set. *) val flagTable = [(SBS_VERT, "SBS_VERT"), (SBS_TOPALIGN, "SBS_TOPALIGN"), (SBS_BOTTOMALIGN, "SBS_BOTTOMALIGN"), (SBS_SIZEBOX, "SBS_SIZEBOX"), (SBS_SIZEGRIP, "SBS_SIZEGRIP"), (WS_POPUP, "WS_POPUP"), (WS_CHILD, "WS_CHILD"), (WS_MINIMIZE, "WS_MINIMIZE"), (WS_VISIBLE, "WS_VISIBLE"), (WS_DISABLED, "WS_DISABLED"), (WS_CLIPSIBLINGS, "WS_CLIPSIBLINGS"), (WS_CLIPCHILDREN, "WS_CLIPCHILDREN"), (WS_MAXIMIZE, "WS_MAXIMIZE"), (WS_CAPTION, "WS_CAPTION"), (WS_BORDER, "WS_BORDER"), (WS_DLGFRAME, "WS_DLGFRAME"), (WS_VSCROLL, "WS_VSCROLL"), (WS_HSCROLL, "WS_HSCROLL"), (WS_SYSMENU, "WS_SYSMENU"), (WS_THICKFRAME, "WS_THICKFRAME"), (WS_GROUP, "WS_GROUP"), (WS_TABSTOP, "WS_TABSTOP"), (WS_MINIMIZEBOX, "WS_MINIMIZEBOX"), (WS_MAXIMIZEBOX, "WS_MAXIMIZEBOX")] fun accumulateFlags f [] = [] | accumulateFlags f ((w, s)::t) = if allSet(w, f) then s :: accumulateFlags(clear(w, f)) t else accumulateFlags f t fun printFlags(put, beg, brk, nd) depth _ x = (* This is just the code to print a list. *) let val stringFlags = accumulateFlags x flagTable fun plist [] depth = () | plist _ 0 = put "..." | plist [h] depth = put h | plist (h::t) depth = ( put (h^","); brk (1, 0); plist t (depth - 1) ) in beg (3, false); put "["; if depth <= 0 then put "..." else plist stringFlags depth; put "]"; nd () end in PolyML.install_pp printFlags end; *) polyml.5.2.1/mlsource/extra/Win/Shape.sml0000644000175000017500000000656010313043370017263 0ustar daviddavid(* Copyright (c) 2001 David C.J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure Shape: sig type HBRUSH type HDC type POINT = { x: int, y: int } type RECT = { top: int, left: int, bottom: int, right: int } val Chord : HDC * RECT * POINT * POINT -> unit val Ellipse : HDC * RECT -> unit val FillRect : HDC * RECT * HBRUSH -> unit val FrameRect : HDC * RECT * HBRUSH -> unit val InvertRect : HDC * RECT -> unit val Pie : HDC * RECT * POINT * POINT -> unit val Polygon : HDC * POINT list -> unit val Rectangle : HDC * RECT -> unit val RoundRect : HDC * RECT * int * int -> unit end = struct local open CInterface Base val WIDTH = INT: int Conversion val HEIGHT = INT: int Conversion in type HDC = HDC and HBRUSH = HBRUSH type RECT = RECT and POINT = POINT (* FILLED SHAPES *) (* Strangely, some of these are in user32 and some in gdi32. *) val FillRect = call3 (user "FillRect") (HDC,POINTERTO RECT,HBRUSH) (SUCCESSSTATE "FillRect") val FrameRect = call3 (user "FrameRect") (HDC,POINTERTO RECT,HBRUSH) (SUCCESSSTATE "FrameRect") val InvertRect = call2 (user "InvertRect") (HDC,POINTERTO RECT) (SUCCESSSTATE "InvertRect") fun Chord (h,{left,top,right,bottom}: RECT,{x=x1,y=y1}: POINT,{x=x2,y=y2}: POINT) = call9 (gdi "Chord") (HDC,LONG,LONG,LONG,LONG,LONG,LONG,LONG,LONG) (SUCCESSSTATE "Chord") (h,left,top,right,bottom,x1,y1,x2,y2) fun Ellipse (h,{left,top,right,bottom}: RECT) = call5 (gdi "Ellipse") (HDC,LONG,LONG,LONG,LONG) (SUCCESSSTATE "Ellipse") (h,left,top,right,bottom) fun Pie (h,{left,top,right,bottom}: RECT,{x=x1,y=y1}: POINT,{x=x2,y=y2}: POINT) = call9 (gdi "Pie") (HDC,LONG,LONG,LONG,LONG,LONG,LONG,LONG,LONG) (SUCCESSSTATE "Pie") (h,left,top,right,bottom,x1,y1,x2,y2) fun Polygon (h,pts: POINT list) = let val count = List.length pts val (fromPt, toPt, ptStruct) = breakConversion POINT val ptarr = alloc count ptStruct fun setItem(pt, n) = (assign ptStruct (offset n ptStruct ptarr) (toPt pt); n+1) val _: int = List.foldl setItem 0 pts in call3 (gdi "Polygon") (HDC,POINTER,INT) (SUCCESSSTATE "Polygon") (h,address ptarr,count) end fun Rectangle(h,{left,top,right,bottom}: RECT) = call5 (gdi "Rectangle") (HDC,LONG,LONG,LONG,LONG) (SUCCESSSTATE "Rectangle") (h,left,top,right,bottom) fun RoundRect(h,{left,top,right,bottom}: RECT,w,ht) = call7 (gdi "RoundRect") (HDC,LONG,LONG,LONG,LONG,WIDTH,HEIGHT) (SUCCESSSTATE "RoundRect") (h,left,top,right,bottom,w,ht) (* Other Filled shape functions: PolyPolygon *) end end; polyml.5.2.1/mlsource/extra/Win/Static.sml0000644000175000017500000001753110313043370017452 0ustar daviddavid(* Copyright (c) 2001 David C.J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* Static windows e.g. labels. *) structure Static: sig structure Style: sig include BIT_FLAGS where type flags = Window.Style.flags val WS_OVERLAPPED: flags and WS_POPUP: flags and WS_CHILD: flags and WS_MINIMIZE: flags and WS_VISIBLE: flags and WS_DISABLED:flags and WS_CLIPSIBLINGS:flags and WS_CLIPCHILDREN:flags and WS_MAXIMIZE:flags and WS_CAPTION:flags and WS_BORDER:flags and WS_DLGFRAME:flags and WS_VSCROLL:flags and WS_HSCROLL:flags and WS_SYSMENU:flags and WS_THICKFRAME:flags and WS_GROUP:flags and WS_TABSTOP:flags and WS_MINIMIZEBOX:flags and WS_MAXIMIZEBOX:flags and WS_TILED:flags and WS_ICONIC:flags and WS_SIZEBOX:flags and WS_OVERLAPPEDWINDOW:flags and WS_TILEDWINDOW:flags and WS_POPUPWINDOW:flags and WS_CHILDWINDOW:flags and SS_LEFT: flags and SS_CENTER: flags and SS_RIGHT: flags and SS_ICON: flags and SS_BLACKRECT: flags and SS_GRAYRECT: flags and SS_WHITERECT: flags and SS_BLACKFRAME: flags and SS_GRAYFRAME: flags and SS_WHITEFRAME: flags and SS_USERITEM: flags and SS_SIMPLE: flags and SS_LEFTNOWORDWRAP: flags and SS_OWNERDRAW: flags and SS_BITMAP: flags and SS_ENHMETAFILE: flags and SS_ETCHEDHORZ: flags and SS_ETCHEDVERT: flags and SS_ETCHEDFRAME: flags and SS_TYPEMASK: flags and SS_NOPREFIX: flags and SS_NOTIFY: flags and SS_CENTERIMAGE: flags and SS_RIGHTJUST: flags and SS_REALSIZEIMAGE: flags and SS_SUNKEN: flags and SS_ENDELLIPSIS: flags and SS_PATHELLIPSIS: flags and SS_WORDELLIPSIS: flags and SS_ELLIPSISMASK: flags end structure Notifications: sig val STN_CLICKED: int val STN_DBLCLK: int val STN_ENABLE: int val STN_DISABLE: int end end = struct structure Style = struct open Window.Style (* Include all the windows styles. *) val SS_LEFT: flags = fromWord 0wx00000000 val SS_CENTER: flags = fromWord 0wx00000001 val SS_RIGHT: flags = fromWord 0wx00000002 val SS_ICON: flags = fromWord 0wx00000003 val SS_BLACKRECT: flags = fromWord 0wx00000004 val SS_GRAYRECT: flags = fromWord 0wx00000005 val SS_WHITERECT: flags = fromWord 0wx00000006 val SS_BLACKFRAME: flags = fromWord 0wx00000007 val SS_GRAYFRAME: flags = fromWord 0wx00000008 val SS_WHITEFRAME: flags = fromWord 0wx00000009 val SS_USERITEM: flags = fromWord 0wx0000000A val SS_SIMPLE: flags = fromWord 0wx0000000B val SS_LEFTNOWORDWRAP: flags = fromWord 0wx0000000C val SS_OWNERDRAW: flags = fromWord 0wx0000000D val SS_BITMAP: flags = fromWord 0wx0000000E val SS_ENHMETAFILE: flags = fromWord 0wx0000000F val SS_ETCHEDHORZ: flags = fromWord 0wx00000010 val SS_ETCHEDVERT: flags = fromWord 0wx00000011 val SS_ETCHEDFRAME: flags = fromWord 0wx00000012 val SS_TYPEMASK: flags = fromWord 0wx0000001F val SS_NOPREFIX: flags = fromWord 0wx00000080 val SS_NOTIFY: flags = fromWord 0wx00000100 val SS_CENTERIMAGE: flags = fromWord 0wx00000200 val SS_RIGHTJUST: flags = fromWord 0wx00000400 val SS_REALSIZEIMAGE: flags = fromWord 0wx00000800 val SS_SUNKEN: flags = fromWord 0wx00001000 val SS_ENDELLIPSIS: flags = fromWord 0wx00004000 val SS_PATHELLIPSIS: flags = fromWord 0wx00008000 val SS_WORDELLIPSIS: flags = fromWord 0wx0000C000 val SS_ELLIPSISMASK: flags = fromWord 0wx0000C000 val all = flags[Window.Style.all, SS_LEFT, SS_CENTER, SS_RIGHT, SS_ICON, SS_BLACKRECT, SS_GRAYRECT, SS_WHITERECT, SS_BLACKFRAME, SS_GRAYFRAME, SS_WHITEFRAME, SS_USERITEM, SS_SIMPLE, SS_LEFTNOWORDWRAP, SS_OWNERDRAW, SS_BITMAP, SS_ENHMETAFILE, SS_ETCHEDHORZ, SS_ETCHEDVERT, SS_ETCHEDFRAME, SS_TYPEMASK, SS_NOPREFIX, SS_NOTIFY, SS_CENTERIMAGE, SS_RIGHTJUST, SS_REALSIZEIMAGE, SS_SUNKEN, SS_ENDELLIPSIS, SS_PATHELLIPSIS, SS_WORDELLIPSIS, SS_ELLIPSISMASK] val intersect = List.foldl (fn (a, b) => fromWord(SysWord.andb(toWord a, toWord b))) all end structure Notifications = struct val STN_CLICKED = 0 val STN_DBLCLK = 1 val STN_ENABLE = 2 val STN_DISABLE = 3 end end; (* let open Static.Style fun getType w = let val typeField = fromWord(SysWord.andb(toWord w, toWord SS_TYPEMASK)) in if typeField = SS_LEFT then "SS_LEFT" else if typeField = SS_CENTER then "SS_CENTER" else if typeField = SS_RIGHT then "SS_RIGHT" else if typeField = SS_ICON then "SS_ICON" else if typeField = SS_BLACKRECT then "SS_BLACKRECT" else if typeField = SS_GRAYRECT then "SS_GRAYRECT" else if typeField = SS_WHITERECT then "SS_WHITERECT" else if typeField = SS_BLACKFRAME then "SS_BLACKFRAME" else if typeField = SS_GRAYFRAME then "SS_GRAYFRAME" else if typeField = SS_WHITEFRAME then "SS_WHITEFRAME" else if typeField = SS_USERITEM then "SS_USERITEM" else if typeField = SS_SIMPLE then "SS_SIMPLE" else if typeField = SS_LEFTNOWORDWRAP then "SS_LEFTNOWORDWRAP" else if typeField = SS_OWNERDRAW then "SS_OWNERDRAW" else if typeField = SS_BITMAP then "SS_BITMAP" else if typeField = SS_ENHMETAFILE then "SS_ENHMETAFILE" else if typeField = SS_ETCHEDHORZ then "SS_ETCHEDHORZ" else if typeField = SS_ETCHEDVERT then "SS_ETCHEDVERT" else if typeField = SS_ETCHEDFRAME then "SS_ETCHEDFRAME" else "??" end val flagTable = [(SS_NOPREFIX, "SS_NOPREFIX"), (SS_NOTIFY, "SS_NOTIFY"), (SS_CENTERIMAGE, "SS_CENTERIMAGE"), (SS_RIGHTJUST, "SS_RIGHTJUST"), (SS_REALSIZEIMAGE, "SS_REALSIZEIMAGE"), (SS_SUNKEN, "SS_SUNKEN"), (SS_WORDELLIPSIS, "SS_WORDELLIPSIS"), (* Must come before the next two. *) (SS_ENDELLIPSIS, "SS_ENDELLIPSIS"), (SS_PATHELLIPSIS, "SS_PATHELLIPSIS"), (WS_POPUP, "WS_POPUP"), (WS_CHILD, "WS_CHILD"), (WS_MINIMIZE, "WS_MINIMIZE"), (WS_VISIBLE, "WS_VISIBLE"), (WS_DISABLED, "WS_DISABLED"), (WS_CLIPSIBLINGS, "WS_CLIPSIBLINGS"), (WS_CLIPCHILDREN, "WS_CLIPCHILDREN"), (WS_MAXIMIZE, "WS_MAXIMIZE"), (WS_CAPTION, "WS_CAPTION"), (WS_BORDER, "WS_BORDER"), (WS_DLGFRAME, "WS_DLGFRAME"), (WS_VSCROLL, "WS_VSCROLL"), (WS_HSCROLL, "WS_HSCROLL"), (WS_SYSMENU, "WS_SYSMENU"), (WS_THICKFRAME, "WS_THICKFRAME"), (WS_GROUP, "WS_GROUP"), (WS_TABSTOP, "WS_TABSTOP"), (WS_MINIMIZEBOX, "WS_MINIMIZEBOX"), (WS_MAXIMIZEBOX, "WS_MAXIMIZEBOX")] fun accumulateFlags f [] = [] | accumulateFlags f ((w, s)::t) = if allSet(w, f) then s :: accumulateFlags(clear(w, f)) t else accumulateFlags f t fun printFlags(put, beg, brk, nd) depth _ x = (* This is just the code to print a list. *) let val stringFlags = getType x :: accumulateFlags x flagTable fun plist [] depth = () | plist _ 0 = put "..." | plist [h] depth = put h | plist (h::t) depth = ( put (h^","); brk (1, 0); plist t (depth - 1) ) in beg (3, false); put "["; if depth <= 0 then put "..." else plist stringFlags depth; put "]"; nd () end in PolyML.install_pp printFlags end; *)polyml.5.2.1/mlsource/extra/Win/Transform.sml0000644000175000017500000003136410313043370020176 0ustar daviddavid(* Copyright (c) 2001 David C.J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure Transform: sig type HDC (*= Base.HDC*) type HWND (*= Base.HWND*) type POINT = { x: int, y: int } type SIZE = { cx: int, cy: int } datatype Fraction = Fraction of {num: int, denom: int} datatype MapMode = MM_ANISOTROPIC | MM_HIENGLISH | MM_HIMETRIC | MM_ISOTROPIC | MM_LOENGLISH | MM_LOMETRIC | MM_TEXT | MM_TWIPS val MM_MAX : MapMode val MM_MAX_FIXEDSCALE : MapMode val MM_MIN : MapMode type XForm = { m11: real, m12: real, m21: real, m22: real, dx: real, dy: real } type XFormType val MWT_IDENTITY : XFormType val MWT_LEFTMULTIPLY : XFormType val MWT_MAX : XFormType val MWT_MIN : XFormType val MWT_RIGHTMULTIPLY : XFormType type GraphicsMode val GM_ADVANCED : GraphicsMode val GM_COMPATIBLE : GraphicsMode val GM_ERROR : GraphicsMode val ClientToScreen : HWND * POINT -> POINT val CombineTransform : XForm * XForm -> XForm val DPtoLP : HDC * POINT list -> POINT list val GetCurrentPositionEx : HDC -> POINT val GetGraphicsMode : HDC -> GraphicsMode val GetMapMode : HDC -> MapMode val GetViewportExtEx : HDC -> SIZE val GetViewportOrgEx : HDC -> POINT val GetWindowExtEx : HDC -> SIZE val GetWindowOrgEx : HDC -> POINT val GetWorldTransform : HDC -> XForm val LPtoDP : HDC * POINT list -> POINT list val MapWindowPoints : HWND * HWND * POINT list -> POINT list val ModifyWorldTransform : HDC * XForm * XFormType -> unit val OffsetViewportOrgEx : HDC * int * int -> unit * POINT val OffsetWindowOrgEx : HDC * int * int -> unit * POINT val ScaleViewportExtEx : HWND * Fraction * Fraction -> SIZE val ScaleWindowExtEx : HWND * Fraction * Fraction -> SIZE val ScreenToClient : HWND * POINT -> POINT val SetGraphicsMode : HDC * GraphicsMode -> GraphicsMode val SetMapMode : HDC * MapMode -> MapMode val SetViewportExtEx : HDC * int * int -> unit * SIZE val SetViewportOrgEx : HDC * int * int -> unit * POINT val SetWindowExtEx : HDC * int * int -> unit * SIZE val SetWindowOrgEx : HDC * int * int -> unit * POINT val SetWorldTransform : HDC * XForm -> unit end = struct local open CInterface Base GdiBase fun callgdi name = call_sym (load_sym (load_lib "gdi32.DLL") name) fun calluser name = call_sym (load_sym (load_lib "user32.DLL") name) fun gdicall_IM name CR (C1,C2) (a1,a2) = let val (from1,to1,ctype1) = breakConversion C1 val (from2,to2,ctype2) = breakConversion C2 val (fromR,toR,ctypeR) = breakConversion CR val va1 = to1 a1 val va2 = address (to2 a2) val res = callgdi name [(ctype1,va1),(Cpointer ctype2,va2)] ctypeR val _ : unit = fromR res in from2 (deref va2) end fun gdicall_WRR name CR (C1,C2,C3) (a2,a3) = let val (from1,to1,ctype1) = breakConversion C1 val (from2,to2,ctype2) = breakConversion C2 val (from3,to3,ctype3) = breakConversion C3 val (fromR,toR,ctypeR) = breakConversion CR val va1 = address (alloc 1 ctype1) val va2 = address (to2 a2) val va3 = address (to3 a3) val res = callgdi name [(Cpointer ctype1,va1),(Cpointer ctype2,va2),(Cpointer ctype3,va3)] ctypeR val _ : unit = fromR res in from1 (deref va1) end fun gdicall_IW name CR (C1,C2) (a1) = let val (from1,to1,ctype1) = breakConversion C1 val (from2,to2,ctype2) = breakConversion C2 val (fromR,toR,ctypeR) = breakConversion CR val va1 = to1 a1 val va2 = address (alloc 1 ctype2) val res = callgdi name [(ctype1,va1),(Cpointer ctype2,va2)] ctypeR val _: unit = fromR res in (from2 (deref va2)) end fun gdicall_IRI name CR (C1,C2,C3) (a1,a2,a3) = let val (from1,to1,ctype1) = breakConversion C1 val (from2,to2,ctype2) = breakConversion C2 val (from3,to3,ctype3) = breakConversion C3 val (fromR,toR,ctypeR) = breakConversion CR val va1 = to1 a1 val va2 = address (to2 a2) val va3 = to3 a3 val res = callgdi name [(ctype1,va1),(Cpointer ctype2,va2),(ctype3,va3)] ctypeR in (fromR res) end fun gdicall_IIIW name CR (C1,C2,C3,C4) (a1,a2,a3) = let val (from1,to1,ctype1) = breakConversion C1 val (from2,to2,ctype2) = breakConversion C2 val (from3,to3,ctype3) = breakConversion C3 val (from4,to4,ctype4) = breakConversion C4 val (fromR,toR,ctypeR) = breakConversion CR val va1 = to1 a1 val va2 = to2 a2 val va3 = to3 a3 val va4 = address (alloc 1 ctype4) val res = callgdi name [(ctype1,va1),(ctype2,va2),(ctype3,va3),(Cpointer ctype4,va4)] ctypeR in (fromR res,from4 (deref va4)) end fun usercall_IM name CR (C1,C2) (a1,a2) = let val (from1,to1,ctype1) = breakConversion C1 val (from2,to2,ctype2) = breakConversion C2 val (fromR,toR,ctypeR) = breakConversion CR val va1 = to1 a1 val va2 = address (to2 a2) val res = calluser name [(ctype1,va1),(Cpointer ctype2,va2)] ctypeR val _ : unit = fromR res in from2 (deref va2) end fun gdicall_IR name CR (C1,C2) (a1,a2) = let val (from1,to1,ctype1) = breakConversion C1 val (from2,to2,ctype2) = breakConversion C2 val (fromR,toR,ctypeR) = breakConversion CR val va1 = to1 a1 val va2 = address (to2 a2) val res = callgdi name [(ctype1,va1),(Cpointer ctype2,va2)] ctypeR in (fromR res) end val XOFFSET = INT: int Conversion val YOFFSET = INT: int Conversion in type HDC = Base.HDC and HWND = Base.HWND type POINT = POINT and SIZE = SIZE open GdiBase (* COORDINATE SPACES AND TRANSFORMATIONS *) local datatype GraphicsMode = W of int in type GraphicsMode = GraphicsMode val GRAPHICSMODE = absConversion {abs = W, rep = fn W n => n} INT val GM_ERROR (* ???? *) = W 0 val GM_COMPATIBLE = W (1) val GM_ADVANCED = W (2) end type XForm = { m11: real, m12: real, m21: real, m22: real, dx: real, dy: real } local fun breakXForm {m11,m12,m21,m22,dx,dy} = (m11,m12,m21,m22,dx,dy) fun mkXForm (m11,m12,m21,m22,dx,dy) = {m11=m11,m12=m12,m21=m21,m22=m22,dx=dx,dy=dy} in val XFORM = absConversion {abs=mkXForm, rep=breakXForm} (STRUCT6 (FLOAT,FLOAT,FLOAT,FLOAT,FLOAT,FLOAT)) end local datatype XFormType = W of int in type XFormType = XFormType val XFORMTYPE = absConversion {abs = W, rep = fn W n => n} INT val MWT_IDENTITY = W (1) val MWT_LEFTMULTIPLY = W (2) val MWT_RIGHTMULTIPLY = W (3) val MWT_MIN = MWT_IDENTITY val MWT_MAX = MWT_RIGHTMULTIPLY end val ClientToScreen = gdicall_IM "ClientToScreen" (SUCCESSSTATE "ClientToScreen") (HWND,POINT) val CombineTransform = gdicall_WRR "CombineTransform" (SUCCESSSTATE "CombineTransform") (XFORM,XFORM,XFORM) val GetCurrentPositionEx = gdicall_IW "GetCurrentPositionEx" (SUCCESSSTATE "GetCurrentPositionEx") (HDC,POINT) val GetViewportExtEx = gdicall_IW "GetViewportExtEx" (SUCCESSSTATE "GetViewportExtEx") (HDC,SIZE) val GetViewportOrgEx = gdicall_IW "GetViewportOrgEx" (SUCCESSSTATE "GetViewportOrgEx") (HDC,POINT) val GetWindowExtEx = gdicall_IW "GetWindowExtEx" (SUCCESSSTATE "GetWindowExtEx") (HDC,SIZE) val GetWindowOrgEx = gdicall_IW "GetWindowOrgEx" (SUCCESSSTATE "GetWindowOrgEx") (HDC,POINT) val GetWorldTransform = gdicall_IW "GetWorldTransform" (SUCCESSSTATE "GetWorldTransform") (HDC,XFORM) val ModifyWorldTransform = gdicall_IRI "ModifyWorldTransform" (SUCCESSSTATE "GetWorldTransform") (HDC,XFORM,XFORMTYPE) val OffsetViewportOrgEx = gdicall_IIIW "OffsetViewportOrgEx" (SUCCESSSTATE "OffsetViewportOrgEx") (HDC,XOFFSET,YOFFSET,POINT) val OffsetWindowOrgEx = gdicall_IIIW "OffsetWindowOrgEx" (SUCCESSSTATE "OffsetWindowOrgEx") (HDC,XOFFSET,YOFFSET,POINT) val ScreenToClient = usercall_IM "ScreenToClient" (SUCCESSSTATE "ScreenToClient") (HWND,POINT) val SetViewportExtEx = gdicall_IIIW "SetViewportExtEx" (SUCCESSSTATE "SetViewportExtEx") (HDC,INT,INT,SIZE) val SetViewportOrgEx = gdicall_IIIW "SetViewportOrgEx" (SUCCESSSTATE "SetViewportOrgEx") (HDC,INT,INT,POINT) val SetWindowExtEx = gdicall_IIIW "SetWindowExtEx" (SUCCESSSTATE "SetWindowExtEx") (HDC,INT,INT,SIZE) val SetWindowOrgEx = gdicall_IIIW "SetWindowOrgEx" (SUCCESSSTATE "SetWindowOrgEx") (HDC,INT,INT,POINT) val SetWorldTransform = gdicall_IR "SetWorldTransform" (SUCCESSSTATE "SetWorldTransform") (HDC,XFORM) val GetMapMode = call1(gdi "GetMapMode") (HDC) MAPMODE val SetMapMode = call2(gdi "SetMapMode") (HDC,MAPMODE) MAPMODE (* Should check the result is non-zero. *) val GetGraphicsMode = call1 (gdi "GetGraphicsMode") (HDC) GRAPHICSMODE val SetGraphicsMode = call2 (gdi "SetGraphicsMode") (HDC, GRAPHICSMODE) GRAPHICSMODE datatype Fraction = Fraction of {num:int, denom:int} fun ScaleViewportExtEx (h,Fraction{num=n1,denom=d1},Fraction{num=n2,denom=d2}) = let val (fromSize, _, sizeStruct) = breakConversion SIZE val sv = alloc 1 sizeStruct val _ = call6 (gdi "ScaleViewportExtEx") (HWND,INT,INT,INT,INT,POINTER) (SUCCESSSTATE "ScaleViewportExtEx") (h,n1,d1,n2,d2,address sv) in fromSize sv end fun ScaleWindowExtEx (h,Fraction{num=n1,denom=d1},Fraction{num=n2,denom=d2}) = let val (fromSize, _, sizeStruct) = breakConversion SIZE val sv = alloc 1 sizeStruct val _ = call6 (gdi "ScaleWindowExtEx") (HWND,INT,INT,INT,INT,POINTER) (SUCCESSSTATE "ScaleWindowExtEx") (h,n1,d1,n2,d2,address sv) in fromSize sv end fun DPtoLP (h,pts) = let val count = List.length pts val (fromPt, toPt, ptStruct) = breakConversion POINT val ptarr = alloc count ptStruct val _: int = List.foldl (fn (p, n) => (assign ptStruct (offset n ptStruct ptarr) (toPt p); n+1)) 0 pts val _:unit = call3 (gdi "DPtoLP") (HDC,POINTER,INT) (SUCCESSSTATE "DPtoLP") (h, address ptarr, count) in List.tabulate(count, fn i => fromPt (offset i ptStruct ptarr)) end fun LPtoDP (h,pts) = let val count = List.length pts val (fromPt, toPt, ptStruct) = breakConversion POINT val ptarr = alloc count ptStruct val _: int = List.foldl (fn (p, n) => (assign ptStruct (offset n ptStruct ptarr) (toPt p); n+1)) 0 pts val _:unit = call3 (gdi "LPtoDP") (HDC,POINTER,INT) (SUCCESSSTATE "LPtoDP") (h, address ptarr, count) in List.tabulate(count, fn i => fromPt (offset i ptStruct ptarr)) end fun MapWindowPoints (h1,h2,pts) = let val count = List.length pts val (fromPt, toPt, ptStruct) = breakConversion POINT val ptarr = alloc count ptStruct val _: int = List.foldl (fn (p, n) => (assign ptStruct (offset n ptStruct ptarr) (toPt p); n+1)) 0 pts (* The result is the bits added in each direction to make the mapping or is zero if there is an error. Isn't it possible that if the two windows were exactly aligned the result could be zero? *) val res = call4 (user "MapWindowPoints") (HWND,HWND,POINTER,INT) (INT) (h1,h2,address ptarr,count) in List.tabulate(count, fn i => fromPt (offset i ptStruct ptarr)) end end end; polyml.5.2.1/mlsource/extra/Win/WinBase.sml0000644000175000017500000002322310676746440017572 0ustar daviddavid(* Copyright (c) 2001-7 David C.J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* This contains the types used in the Win structure. *) structure WinBase = struct local open CInterface Base in structure Style :> sig include BIT_FLAGS val WS_BORDER : flags val WS_CAPTION : flags val WS_CHILD : flags val WS_CHILDWINDOW : flags val WS_CLIPCHILDREN : flags val WS_CLIPSIBLINGS : flags val WS_DISABLED : flags val WS_DLGFRAME : flags val WS_GROUP : flags val WS_HSCROLL : flags val WS_ICONIC : flags val WS_MAXIMIZE : flags val WS_MAXIMIZEBOX : flags val WS_MINIMIZE : flags val WS_MINIMIZEBOX : flags val WS_OVERLAPPED : flags val WS_OVERLAPPEDWINDOW : flags val WS_POPUP : flags val WS_POPUPWINDOW : flags val WS_SIZEBOX : flags val WS_SYSMENU : flags val WS_TABSTOP : flags val WS_THICKFRAME : flags val WS_TILED : flags val WS_TILEDWINDOW : flags val WS_VISIBLE : flags val WS_VSCROLL : flags end = struct type flags = SysWord.word fun toWord f = f fun fromWord f = f val flags = List.foldl (fn (a, b) => SysWord.orb(a,b)) 0w0 fun allSet (fl1, fl2) = SysWord.andb(fl1, fl2) = fl1 fun anySet (fl1, fl2) = SysWord.andb(fl1, fl2) <> 0w0 fun clear (fl1, fl2) = SysWord.andb(SysWord.notb fl1, fl2) (* Window styles. *) val WS_OVERLAPPED: flags = 0wx00000000 val WS_POPUP: flags = 0wx80000000 val WS_CHILD: flags = 0wx40000000 val WS_MINIMIZE: flags = 0wx20000000 val WS_VISIBLE: flags = 0wx10000000 val WS_DISABLED: flags = 0wx08000000 val WS_CLIPSIBLINGS: flags = 0wx04000000 val WS_CLIPCHILDREN: flags = 0wx02000000 val WS_MAXIMIZE: flags = 0wx01000000 val WS_CAPTION: flags = 0wx00C00000 (* WS_BORDER | WS_DLGFRAME *) val WS_BORDER: flags = 0wx00800000 val WS_DLGFRAME: flags = 0wx00400000 val WS_VSCROLL: flags = 0wx00200000 val WS_HSCROLL: flags = 0wx00100000 val WS_SYSMENU: flags = 0wx00080000 val WS_THICKFRAME: flags = 0wx00040000 val WS_GROUP: flags = 0wx00020000 val WS_TABSTOP: flags = 0wx00010000 val WS_MINIMIZEBOX: flags = 0wx00020000 val WS_MAXIMIZEBOX: flags = 0wx00010000 val WS_TILED: flags = WS_OVERLAPPED val WS_ICONIC: flags = WS_MINIMIZE val WS_SIZEBOX: flags = WS_THICKFRAME val WS_OVERLAPPEDWINDOW = flags[WS_OVERLAPPED, WS_CAPTION, WS_SYSMENU, WS_THICKFRAME, WS_MINIMIZEBOX, WS_MAXIMIZEBOX] val WS_TILEDWINDOW = WS_OVERLAPPEDWINDOW val WS_POPUPWINDOW = flags[WS_POPUP, WS_BORDER, WS_SYSMENU] val WS_CHILDWINDOW = WS_CHILD val all = flags[WS_OVERLAPPED, WS_POPUP, WS_CHILD, WS_MINIMIZE, WS_VISIBLE, WS_DISABLED, WS_CLIPSIBLINGS, WS_CLIPCHILDREN, WS_MAXIMIZE, WS_CAPTION, WS_BORDER, WS_DLGFRAME, WS_VSCROLL, WS_HSCROLL, WS_SYSMENU, WS_THICKFRAME, WS_GROUP, WS_TABSTOP, WS_MINIMIZEBOX, WS_MAXIMIZEBOX] val intersect = List.foldl (fn (a, b) => SysWord.andb(a,b)) all end structure ExStyle:> sig include BIT_FLAGS val WS_EX_DLGMODALFRAME: flags and WS_EX_NOPARENTNOTIFY: flags and WS_EX_TOPMOST: flags and WS_EX_ACCEPTFILES : flags and WS_EX_TRANSPARENT: flags and WS_EX_MDICHILD: flags and WS_EX_TOOLWINDOW: flags and WS_EX_WINDOWEDGE: flags and WS_EX_CLIENTEDGE: flags and WS_EX_CONTEXTHELP: flags and WS_EX_RIGHT: flags and WS_EX_LEFT: flags and WS_EX_RTLREADING: flags and WS_EX_LTRREADING: flags and WS_EX_LEFTSCROLLBAR: flags and WS_EX_RIGHTSCROLLBAR: flags and WS_EX_CONTROLPARENT: flags and WS_EX_STATICEDGE: flags and WS_EX_APPWINDOW: flags and WS_EX_OVERLAPPEDWINDOW: flags and WS_EX_PALETTEWINDOW: flags end = struct type flags = SysWord.word fun toWord f = f fun fromWord f = f val flags = List.foldl (fn (a, b) => SysWord.orb(a,b)) 0w0 fun allSet (fl1, fl2) = SysWord.andb(fl1, fl2) = fl1 fun anySet (fl1, fl2) = SysWord.andb(fl1, fl2) <> 0w0 fun clear (fl1, fl2) = SysWord.andb(SysWord.notb fl1, fl2) val WS_EX_DLGMODALFRAME = 0wx00000001 val WS_EX_NOPARENTNOTIFY = 0wx00000004 val WS_EX_TOPMOST = 0wx00000008 val WS_EX_ACCEPTFILES = 0wx00000010 val WS_EX_TRANSPARENT = 0wx00000020 val WS_EX_MDICHILD = 0wx00000040 val WS_EX_TOOLWINDOW = 0wx00000080 val WS_EX_WINDOWEDGE = 0wx00000100 val WS_EX_CLIENTEDGE = 0wx00000200 val WS_EX_CONTEXTHELP = 0wx00000400 val WS_EX_RIGHT = 0wx00001000 val WS_EX_LEFT = 0wx00000000 val WS_EX_RTLREADING = 0wx00002000 val WS_EX_LTRREADING = 0wx00000000 val WS_EX_LEFTSCROLLBAR = 0wx00004000 val WS_EX_RIGHTSCROLLBAR = 0wx00000000 val WS_EX_CONTROLPARENT = 0wx00010000 val WS_EX_STATICEDGE = 0wx00020000 val WS_EX_APPWINDOW = 0wx00040000 val WS_EX_OVERLAPPEDWINDOW = flags[WS_EX_WINDOWEDGE, WS_EX_CLIENTEDGE] val WS_EX_PALETTEWINDOW = flags[WS_EX_WINDOWEDGE, WS_EX_TOOLWINDOW, WS_EX_TOPMOST] val all = flags[WS_EX_DLGMODALFRAME, WS_EX_NOPARENTNOTIFY, WS_EX_TOPMOST, WS_EX_ACCEPTFILES, WS_EX_TRANSPARENT, WS_EX_MDICHILD, WS_EX_TOOLWINDOW, WS_EX_WINDOWEDGE, WS_EX_CLIENTEDGE, WS_EX_CONTEXTHELP, WS_EX_RIGHT, WS_EX_LEFT, WS_EX_RTLREADING, WS_EX_LTRREADING, WS_EX_LEFTSCROLLBAR, WS_EX_RIGHTSCROLLBAR, WS_EX_CONTROLPARENT, WS_EX_STATICEDGE, WS_EX_APPWINDOW] val intersect = List.foldl (fn (a, b) => SysWord.andb(a,b)) all end datatype WindowPositionStyle = SWP_ASYNCWINDOWPOS | SWP_DEFERERASE | SWP_FRAMECHANGED | SWP_HIDEWINDOW | SWP_NOACTIVATE | SWP_NOCOPYBITS | SWP_NOMOVE | SWP_NOOWNERZORDER | SWP_NOREDRAW | SWP_NOSENDCHANGING | SWP_NOSIZE | SWP_NOZORDER | SWP_SHOWWINDOW | SWP_OTHER of int local val tab = [ (SWP_NOSIZE, 0x0001), (SWP_NOMOVE, 0x0002), (SWP_NOZORDER, 0x0004), (SWP_NOREDRAW, 0x0008), (SWP_NOACTIVATE, 0x0010), (SWP_FRAMECHANGED, 0x0020), (* The frame changed: send WM_NCCALCSIZE *) (SWP_SHOWWINDOW, 0x0040), (SWP_HIDEWINDOW, 0x0080), (SWP_NOCOPYBITS, 0x0100), (SWP_NOOWNERZORDER, 0x0200), (* Don't do owner Z ordering *) (SWP_NOSENDCHANGING, 0x0400), (* Don't send WM_WINDOWPOSCHANGING *) (SWP_DEFERERASE, 0x2000), (SWP_ASYNCWINDOWPOS, 0x4000)] (* It seems that some other bits are set although they're not defined. *) fun toInt (SWP_OTHER i) = i | toInt _ = raise Match in val WINDOWPOSITIONSTYLE = tableSetConversion(tab, SOME(SWP_OTHER, toInt)) end (* In C the parent and menu arguments are combined in a rather odd way. *) datatype ParentType = PopupWithClassMenu (* Popup or overlapped window using class menu. *) | PopupWindow of HMENU (* Popup or overlapped window with supplied menu. *) | ChildWindow of { parent: HWND, id: int } (* Child window. *) (* This function is used whenever windows are created. *) local open Style in (* In the case of a child window the "menu" is actually an integer which identifies the child in notification messages to the parent. We silently set or clear the WS_CHILD bit depending on the argument. *) fun unpackWindowRelation(relation: ParentType, style) = case relation of PopupWithClassMenu => (hwndNull, 0, toWord(clear(WS_CHILD, style))) | PopupWindow hm => (hwndNull, intOfHandle hm, toWord(clear(WS_CHILD, style))) | ChildWindow{parent, id} => (parent, id, toWord(flags[WS_CHILD, style])) end end end; polyml.5.2.1/mlsource/extra/Win/WinSystem.sml0000644000175000017500000001554410313043370020167 0ustar daviddavid(* Copyright (c) 2001 David C.J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure WinSystem : sig type SystemMetrics val SM_ARRANGE : SystemMetrics val SM_CLEANBOOT : SystemMetrics val SM_CMOUSEBUTTONS : SystemMetrics val SM_CXBORDER : SystemMetrics val SM_CXCURSOR : SystemMetrics val SM_CXDLGFRAME : SystemMetrics val SM_CXDOUBLECLK : SystemMetrics val SM_CXDRAG : SystemMetrics val SM_CXEDGE : SystemMetrics val SM_CXFIXEDFRAME : SystemMetrics val SM_CXFRAME : SystemMetrics val SM_CXFULLSCREEN : SystemMetrics val SM_CXHSCROLL : SystemMetrics val SM_CXHTHUMB : SystemMetrics val SM_CXICON : SystemMetrics val SM_CXICONSPACING : SystemMetrics val SM_CXMAXIMIZED : SystemMetrics val SM_CXMAXTRACK : SystemMetrics val SM_CXMENUCHECK : SystemMetrics val SM_CXMENUSIZE : SystemMetrics val SM_CXMIN : SystemMetrics val SM_CXMINIMIZED : SystemMetrics val SM_CXMINSPACING : SystemMetrics val SM_CXMINTRACK : SystemMetrics val SM_CXSCREEN : SystemMetrics val SM_CXSIZE : SystemMetrics val SM_CXSIZEFRAME : SystemMetrics val SM_CXSMICON : SystemMetrics val SM_CXSMSIZE : SystemMetrics val SM_CXVSCROLL : SystemMetrics val SM_CYBORDER : SystemMetrics val SM_CYCAPTION : SystemMetrics val SM_CYCURSOR : SystemMetrics val SM_CYDLGFRAME : SystemMetrics val SM_CYDOUBLECLK : SystemMetrics val SM_CYDRAG : SystemMetrics val SM_CYEDGE : SystemMetrics val SM_CYFIXEDFRAME : SystemMetrics val SM_CYFRAME : SystemMetrics val SM_CYFULLSCREEN : SystemMetrics val SM_CYHSCROLL : SystemMetrics val SM_CYICON : SystemMetrics val SM_CYICONSPACING : SystemMetrics val SM_CYKANJIWINDOW : SystemMetrics val SM_CYMAXIMIZED : SystemMetrics val SM_CYMAXTRACK : SystemMetrics val SM_CYMENU : SystemMetrics val SM_CYMENUCHECK : SystemMetrics val SM_CYMENUSIZE : SystemMetrics val SM_CYMIN : SystemMetrics val SM_CYMINIMIZED : SystemMetrics val SM_CYMINSPACING : SystemMetrics val SM_CYMINTRACK : SystemMetrics val SM_CYSCREEN : SystemMetrics val SM_CYSIZE : SystemMetrics val SM_CYSIZEFRAME : SystemMetrics val SM_CYSMCAPTION : SystemMetrics val SM_CYSMICON : SystemMetrics val SM_CYSMSIZE : SystemMetrics val SM_CYVSCROLL : SystemMetrics val SM_CYVTHUMB : SystemMetrics val SM_DBCSENABLED : SystemMetrics val SM_DEBUG : SystemMetrics val SM_MENUDROPALIGNMENT : SystemMetrics val SM_MIDEASTENABLED : SystemMetrics val SM_MOUSEPRESENT : SystemMetrics val SM_MOUSEWHEELPRESENT : SystemMetrics val SM_NETWORK : SystemMetrics val SM_PENWINDOWS : SystemMetrics val SM_RESERVED1 : SystemMetrics val SM_RESERVED2 : SystemMetrics val SM_RESERVED3 : SystemMetrics val SM_RESERVED4 : SystemMetrics val SM_SECURE : SystemMetrics val SM_SHOWSOUNDS : SystemMetrics val SM_SLOWMACHINE : SystemMetrics val SM_SWAPBUTTON : SystemMetrics val GetSystemMetrics : SystemMetrics -> int end = struct local open CInterface open Base in abstype SystemMetrics = ABS of int with val SM_CXSCREEN = ABS 0 val SM_CYSCREEN = ABS 1 val SM_CXVSCROLL = ABS 2 val SM_CYHSCROLL = ABS 3 val SM_CYCAPTION = ABS 4 val SM_CXBORDER = ABS 5 val SM_CYBORDER = ABS 6 val SM_CXDLGFRAME = ABS 7 val SM_CYDLGFRAME = ABS 8 val SM_CYVTHUMB = ABS 9 val SM_CXHTHUMB = ABS 10 val SM_CXICON = ABS 11 val SM_CYICON = ABS 12 val SM_CXCURSOR = ABS 13 val SM_CYCURSOR = ABS 14 val SM_CYMENU = ABS 15 val SM_CXFULLSCREEN = ABS 16 val SM_CYFULLSCREEN = ABS 17 val SM_CYKANJIWINDOW = ABS 18 val SM_MOUSEPRESENT = ABS 19 val SM_CYVSCROLL = ABS 20 val SM_CXHSCROLL = ABS 21 val SM_DEBUG = ABS 22 val SM_SWAPBUTTON = ABS 23 val SM_RESERVED1 = ABS 24 val SM_RESERVED2 = ABS 25 val SM_RESERVED3 = ABS 26 val SM_RESERVED4 = ABS 27 val SM_CXMIN = ABS 28 val SM_CYMIN = ABS 29 val SM_CXSIZE = ABS 30 val SM_CYSIZE = ABS 31 val SM_CXFRAME = ABS 32 val SM_CYFRAME = ABS 33 val SM_CXMINTRACK = ABS 34 val SM_CYMINTRACK = ABS 35 val SM_CXDOUBLECLK = ABS 36 val SM_CYDOUBLECLK = ABS 37 val SM_CXICONSPACING = ABS 38 val SM_CYICONSPACING = ABS 39 val SM_MENUDROPALIGNMENT = ABS 40 val SM_PENWINDOWS = ABS 41 val SM_DBCSENABLED = ABS 42 val SM_CMOUSEBUTTONS = ABS 43 val SM_SECURE = ABS 44 val SM_CXEDGE = ABS 45 val SM_CYEDGE = ABS 46 val SM_CXMINSPACING = ABS 47 val SM_CYMINSPACING = ABS 48 val SM_CXSMICON = ABS 49 val SM_CYSMICON = ABS 50 val SM_CYSMCAPTION = ABS 51 val SM_CXSMSIZE = ABS 52 val SM_CYSMSIZE = ABS 53 val SM_CXMENUSIZE = ABS 54 val SM_CYMENUSIZE = ABS 55 val SM_ARRANGE = ABS 56 val SM_CXMINIMIZED = ABS 57 val SM_CYMINIMIZED = ABS 58 val SM_CXMAXTRACK = ABS 59 val SM_CYMAXTRACK = ABS 60 val SM_CXMAXIMIZED = ABS 61 val SM_CYMAXIMIZED = ABS 62 val SM_NETWORK = ABS 63 val SM_CLEANBOOT = ABS 67 val SM_CXDRAG = ABS 68 val SM_CYDRAG = ABS 69 val SM_SHOWSOUNDS = ABS 70 val SM_CXMENUCHECK = ABS 71 val SM_CYMENUCHECK = ABS 72 val SM_SLOWMACHINE = ABS 73 val SM_MIDEASTENABLED = ABS 74 val SM_MOUSEWHEELPRESENT = ABS 75 val SM_CXFIXEDFRAME = SM_CXDLGFRAME val SM_CYFIXEDFRAME = SM_CYDLGFRAME val SM_CXSIZEFRAME = SM_CXFRAME val SM_CYSIZEFRAME = SM_CYFRAME local val getSystemMetrics = call1 (user "GetSystemMetrics") (INT) INT in fun GetSystemMetrics(ABS i) = getSystemMetrics i end end end end; polyml.5.2.1/mlsource/extra/Win/Window.sml0000644000175000017500000004536110676747302017516 0ustar daviddavid(* Copyright (c) 2001-7 David C.J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure Window : sig type HWND and HINSTANCE and HMENU type POINT = { x: int, y: int } type RECT = { left: int, top: int, right: int, bottom: int } structure Style: sig include BIT_FLAGS val WS_OVERLAPPED: flags and WS_POPUP: flags and WS_CHILD: flags and WS_MINIMIZE: flags and WS_VISIBLE: flags and WS_DISABLED:flags and WS_CLIPSIBLINGS:flags and WS_CLIPCHILDREN:flags and WS_MAXIMIZE:flags and WS_CAPTION:flags and WS_BORDER:flags and WS_DLGFRAME:flags and WS_VSCROLL:flags and WS_HSCROLL:flags and WS_SYSMENU:flags and WS_THICKFRAME:flags and WS_GROUP:flags and WS_TABSTOP:flags and WS_MINIMIZEBOX:flags and WS_MAXIMIZEBOX:flags and WS_TILED:flags and WS_ICONIC:flags and WS_SIZEBOX:flags and WS_OVERLAPPEDWINDOW:flags and WS_TILEDWINDOW:flags and WS_POPUPWINDOW:flags and WS_CHILDWINDOW:flags end structure ExStyle: sig include BIT_FLAGS val WS_EX_DLGMODALFRAME: flags and WS_EX_NOPARENTNOTIFY: flags and WS_EX_TOPMOST: flags and WS_EX_ACCEPTFILES : flags and WS_EX_TRANSPARENT: flags and WS_EX_MDICHILD: flags and WS_EX_TOOLWINDOW: flags and WS_EX_WINDOWEDGE: flags and WS_EX_CLIENTEDGE: flags and WS_EX_CONTEXTHELP: flags and WS_EX_RIGHT: flags and WS_EX_LEFT: flags and WS_EX_RTLREADING: flags and WS_EX_LTRREADING: flags and WS_EX_LEFTSCROLLBAR: flags and WS_EX_RIGHTSCROLLBAR: flags and WS_EX_CONTROLPARENT: flags and WS_EX_STATICEDGE: flags and WS_EX_APPWINDOW: flags and WS_EX_OVERLAPPEDWINDOW: flags and WS_EX_PALETTEWINDOW: flags end datatype WindowPositionStyle = SWP_ASYNCWINDOWPOS | SWP_DEFERERASE | SWP_FRAMECHANGED | SWP_HIDEWINDOW | SWP_NOACTIVATE | SWP_NOCOPYBITS | SWP_NOMOVE | SWP_NOOWNERZORDER | SWP_NOREDRAW | SWP_NOSENDCHANGING | SWP_NOSIZE | SWP_NOZORDER | SWP_SHOWWINDOW | SWP_OTHER of int datatype ShowWindowOptions = SW_HIDE | SW_MAXIMIZE | SW_MINIMIZE | SW_RESTORE | SW_SHOW | SW_SHOWDEFAULT | SW_SHOWMAXIMIZED | SW_SHOWMINIMIZED | SW_SHOWMINNOACTIVE | SW_SHOWNA | SW_SHOWNOACTIVATE | SW_SHOWNORMAL val SW_NORMAL: ShowWindowOptions val SW_MAX: ShowWindowOptions val ShowWindow: HWND * ShowWindowOptions -> bool datatype GetWindowFlags = GW_CHILD | GW_HWNDFIRST | GW_HWNDLAST | GW_HWNDNEXT | GW_HWNDPREV | GW_OWNER datatype ParentType = ChildWindow of {id: int, parent: HWND} | PopupWindow of HMENU | PopupWithClassMenu val GWL_EXSTYLE : int val GWL_HINSTANCE : int val GWL_HWNDPARENT : int val GWL_ID : int val GWL_STYLE : int val GWL_USERDATA : int val AdjustWindowRect : RECT * Style.flags * bool -> RECT val AdjustWindowRectEx : RECT * Style.flags * bool * int -> RECT val ArrangeIconicWindows : HWND -> int val BringWindowToTop : HWND -> unit val CW_USEDEFAULT : int val ChildWindowFromPoint : HWND * POINT -> HWND option val CloseWindow : HWND -> unit val CreateWindow : {x: int, y: int, init: 'a, name: string, class: 'a Class.ATOM, style: Style.flags, width: int, height: int, instance: HINSTANCE, relation: ParentType} -> HWND val CreateWindowEx : {x: int, y: int, init: 'a, name: string, class: 'a Class.ATOM, style: Style.flags, width: int, height: int, instance: HINSTANCE, relation: ParentType, exStyle: ExStyle.flags} -> HWND val CreateMDIClient: { relation: ParentType, style: Style.flags, instance: HINSTANCE, windowMenu: HMENU, idFirstChild: int} -> HWND val DefWindowProc: HWND * Message.Message -> Message.LRESULT val DefFrameProc: HWND * HWND * Message.Message -> Message.LRESULT val DefMDIChildProc: HWND * Message.Message -> Message.LRESULT val DestroyWindow: HWND -> unit val FindWindow: string * string option -> HWND val FindWindowEx: HWND option * HWND option * string * string option -> HWND val GetClassName : HWND -> string val GetClientRect : HWND -> RECT val GetDesktopWindow : unit -> HWND val GetForegroundWindow : unit -> HWND val GetLastActivePopup : HWND -> HWND val GetNextWindow : HWND * GetWindowFlags -> HWND val GetParent : HWND -> HWND option val GetTopWindow : HWND option -> HWND option val GetWindow : HWND * GetWindowFlags -> HWND option val GetWindowContextHelpId : HWND -> int val GetWindowLong : HWND * int -> int val GetWindowRect : HWND -> RECT val GetWindowText : HWND -> string val GetWindowTextLength : HWND -> int val IsChild : HWND * HWND -> bool val IsIconic : HWND -> bool val IsWindow : HWND -> bool val IsWindowVisible : HWND -> bool val IsZoomed : HWND -> bool val MoveWindow : {x: int, y: int, hWnd: HWND, width: int, height: int, repaint: bool} -> unit val OpenIcon : HWND -> unit val SetForegroundWindow : HWND -> bool val SetParent : HWND * HWND option -> HWND val SetWindowContextHelpId : HWND * int -> unit val SetWindowLong : HWND * int * int -> int val SetWindowPos : HWND * HWND * int * int * int * int * WindowPositionStyle list -> unit val SetWindowText : HWND * string -> unit val SubclassWindow : HWND * (HWND * Message.Message * 'a -> Message.LRESULT * 'a) * 'a -> (HWND * Message.Message) -> Message.LRESULT val WindowFromPoint : POINT -> HWND option end = struct local open CInterface open Globals open Base open Resource open Class fun checkWindow name c = if isHNull c then raise OS.SysErr(name, SOME(GetLastError())) else c in type HWND = HWND and HINSTANCE = HINSTANCE and RECT = RECT and POINT = POINT and HMENU = HMENU open WinBase (* Get Style and SetWindowPositionStyle *) datatype ShowWindowOptions = SW_HIDE | SW_MAXIMIZE | SW_MINIMIZE | SW_RESTORE | SW_SHOW | SW_SHOWDEFAULT | SW_SHOWMAXIMIZED | SW_SHOWMINIMIZED | SW_SHOWMINNOACTIVE | SW_SHOWNA | SW_SHOWNOACTIVATE | SW_SHOWNORMAL val SW_NORMAL = SW_SHOWNORMAL val SW_MAX = SW_SHOWDEFAULT fun ShowWindow (win, opt) = let val cmd = case opt of SW_HIDE => 0 | SW_SHOWNORMAL => 1 | SW_SHOWMINIMIZED => 2 | SW_SHOWMAXIMIZED => 3 | SW_MAXIMIZE => 3 | SW_SHOWNOACTIVATE => 4 | SW_SHOW => 5 | SW_MINIMIZE => 6 | SW_SHOWMINNOACTIVE => 7 | SW_SHOWNA => 8 | SW_RESTORE => 9 | SW_SHOWDEFAULT => 10 in call2 (user "ShowWindow")(HWND,INT) (BOOL) (win, cmd) end; val CloseWindow = call1 (user "CloseWindow") (HWND) (SUCCESSSTATE "CloseWindow") val FindWindow = checkWindow "FindWindow" o call2 (user "FindWindowA") (STRING, STRINGOPT) HWND val FindWindowEx = checkWindow "FindWindowEx" o call4 (user "FindWindowExA") (HWNDOPT, HWNDOPT, STRING, STRINGOPT) HWND val GetDesktopWindow = call0 (user "GetDesktopWindow") () HWND val GetForegroundWindow = call0 (user "GetForegroundWindow") () HWND val GetLastActivePopup = call1 (user "GetLastActivePopup") HWND HWND val GetParent = call1 (user "GetParent") HWND HWNDOPT val GetTopWindow = call1 (user "GetTopWindow") HWNDOPT HWNDOPT val GetWindowTextLength = call1 (user "GetWindowTextLengthA") HWND INT val SetWindowText = call2 (user "SetWindowTextA") (HWND, STRING) (SUCCESSSTATE "SetWindowText") fun GetWindowText(hwnd: HWND): string = let val getTextCall = call3 (user "GetWindowTextA") (HWND, POINTER, INT) INT val baseLen = GetWindowTextLength hwnd (* The length returned by GetWindowTextLength may be larger than the text but we have to add one for the terminating null. *) val buff = alloc (baseLen+1) Cchar val size = getTextCall(hwnd, address buff, baseLen+1) in if size = 0 then "" else fromCstring(address buff) end (* Get the class name of a window. The only way to do it is to loop until the size returned is less than the size of the buffer. *) local val getClassCall = call3 (user "GetClassNameA") (HWND, POINTER, INT) (POSINT "GetClassName") in fun GetClassName(hwnd: HWND): string = getStringCall(fn (buff, n) => getClassCall(hwnd, buff, n)) end datatype GetWindowFlags = GW_CHILD | GW_HWNDFIRST | GW_HWNDLAST | GW_HWNDNEXT | GW_HWNDPREV | GW_OWNER local fun winFlag GW_HWNDFIRST = 0 | winFlag GW_HWNDLAST = 1 | winFlag GW_HWNDNEXT = 2 | winFlag GW_HWNDPREV = 3 | winFlag GW_OWNER = 4 | winFlag GW_CHILD = 5 in fun GetWindow (win, gwFlag) = call2 (user "GetWindow") (HWND,INT) HWNDOPT (win, winFlag gwFlag) (* Only GW_HWNDNEXT and GW_HWNDPREV are allowed here but it's probably not worth making it a special case. *) fun GetNextWindow(win: HWND, gwFlag) = checkWindow "GetNextWindow" ( call2 (user "GetNextWindow") (HWND,INT) HWND (win, winFlag gwFlag)) end val IsChild = call2 (user "IsChild") (HWND,HWND) BOOL val IsIconic = call1 (user "IsIconic") (HWND) BOOL val IsWindow = call1 (user "IsWindow") (HWND) BOOL val IsWindowVisible = call1 (user "IsWindowVisible") (HWND) BOOL val IsZoomed = call1 (user "IsZoomed") (HWND) BOOL fun GetClientRect(hWnd: HWND): RECT = let val buff = alloc 4 Clong val res = call2 (user "GetClientRect") (HWND, POINTER) BOOL (hWnd, address buff) val (toRect,_,_) = breakConversion RECT in if res then toRect buff else raise OS.SysErr("GetClientRect", SOME(GetLastError())) end fun GetWindowRect(hWnd: HWND): RECT = let val buff = alloc 4 Clong val res = call2 (user "GetWindowRect") (HWND, POINTER) BOOL (hWnd, address buff) val (toRect,_,_) = breakConversion RECT in if res then toRect buff else raise OS.SysErr("GetWindowRect", SOME(GetLastError())) end fun AdjustWindowRect(rect: RECT, style: Style.flags, bMenu: bool): RECT = let val (toRect,fromRect,_) = breakConversion RECT val buff = fromRect rect val res = call3 (user "AdjustWindowRect") (POINTER, INT, BOOL) BOOL (address buff, LargeWord.toInt(Style.toWord style), bMenu) in if res then toRect buff else raise OS.SysErr("AdjustWindowRect", SOME(GetLastError())) end fun AdjustWindowRectEx(rect: RECT, style: Style.flags, bMenu: bool, exStyle: int): RECT = let val (toRect,fromRect,_) = breakConversion RECT val buff = fromRect rect val res = call4 (user "AdjustWindowRectEx") (POINTER, INT, BOOL, INT) BOOL (address buff, LargeWord.toInt(Style.toWord style), bMenu, exStyle) in if res then toRect buff else raise OS.SysErr("AdjustWindowRectEx", SOME(GetLastError())) end val ArrangeIconicWindows = call1 (user "ArrangeIconicWindows") (HWND) INT (* POSINT? *) val BringWindowToTop = call1 (user "BringWindowToTop") (HWND) (SUCCESSSTATE "BringWindowToTop") val OpenIcon = call1 (user "OpenIcon") (HWND) (SUCCESSSTATE "OpenIcon") val SetForegroundWindow = call1 (user "SetForegroundWindow") (HWND) BOOL fun SetParent(child: HWND, new: HWND option): HWND = let val old = call2 (user "SetParent") (HWND, HWND) HWND (child, getOpt(new, hwndNull)) in if isHNull old then raise OS.SysErr("SetParent", SOME(GetLastError())) else old end fun CreateWindowEx{class: 'a Class.ATOM, (* Window class *) name: string, (* Window name *) style: Style.flags, (* window style *) exStyle: ExStyle.flags, (* extended style *) x: int, (* horizontal position of window *) y: int, (* vertical position of window *) width: int, (* window width *) height: int, (* window height *) relation: ParentType, (* parent or owner window *) instance: HINSTANCE, (* application instance *) init: 'a}: HWND = let (* Set up a callback for ML classes and return the class name. *) val className: string = case class of Registered { proc, className} => (Message.setCallback(proc, init); className) | SystemClass s => s val (parent, menu, styleWord) = WinBase.unpackWindowRelation(relation, style) (* Create a window. *) val res = call12 (user "CreateWindowExA") (WORD, STRING, STRING, WORD, INT, INT, INT, INT, HWND, INT, HINSTANCE, INT) HWND (ExStyle.toWord exStyle, className, name, styleWord, x, y, width, height, parent, menu, instance, 0) in if isHNull res then raise OS.SysErr("CreateWindowEx", SOME(GetLastError())) else (); res end fun CreateWindow{class: 'a Class.ATOM, name: string, style: Style.flags, x: int, y: int, width: int, height: int, relation: ParentType, instance: HINSTANCE, init: 'a}: HWND = CreateWindowEx{exStyle=ExStyle.flags[], class=class, name=name, style=style, x=x, y=y, width=width, height=height,relation=relation, instance=instance, init=init} fun CreateMDIClient{ relation: ParentType, (* This should always be ChildWindow *) style: Style.flags, instance: HINSTANCE, (* application instance *) windowMenu: HMENU, (* Window menu to which children are added. *) idFirstChild: int (* Id of first child when it's created. *) }: HWND = let val (parent, menu, styleWord) = case relation of PopupWithClassMenu => (hwndNull, hmenuNull, Style.toWord(Style.clear(Style.WS_CHILD, style))) | PopupWindow hm => (hwndNull, hm, Style.toWord(Style.clear(Style.WS_CHILD, style))) | ChildWindow{parent, id} => (parent, handleOfInt id, Style.toWord(Style.flags[Style.WS_CHILD, style])) val CLIENTCREATESTRUCT = STRUCT2(HMENU, UINT) val (_, toCcreateStruct, _) = breakConversion CLIENTCREATESTRUCT val createS = address(toCcreateStruct(windowMenu, idFirstChild)) val res = call12 (user "CreateWindowExA") (WORD, STRING, WORD, WORD, INT, INT, INT, INT, HWND, HMENU, HINSTANCE, POINTER) HWND (0w0, "MDICLIENT", 0w0, styleWord, 0, 0, 0, 0, parent, menu, instance, createS) in if isHNull res then raise OS.SysErr("CreateWindowEx", SOME(GetLastError())) else res end fun DefWindowProc (hWnd: HWND, msg: Message.Message): Message.LRESULT = let val (wMsg, wParam: vol, lParam: vol) = Message.compileMessage msg val res = call4 (user "DefWindowProcA") (HWND, INT, POINTER, POINTER) POINTER (hWnd, wMsg, wParam, lParam) in Message.messageReturnFromParams(msg, wParam, lParam, res) end fun DefFrameProc (hWnd: HWND, hWndMDIClient: HWND, msg: Message.Message): Message.LRESULT = let val (wMsg, wParam: vol, lParam: vol) = Message.compileMessage msg val res = call5 (user "DefFrameProcA") (HWND, HWND, INT, POINTER, POINTER) POINTER (hWnd, hWndMDIClient, wMsg, wParam, lParam) in (* Write back any changes the function has made. *) Message.messageReturnFromParams(msg, wParam, lParam, res) end fun DefMDIChildProc (hWnd: HWND, msg: Message.Message): Message.LRESULT = let val (wMsg, wParam: vol, lParam: vol) = Message.compileMessage msg val res = call4 (user "DefMDIChildProcA") (HWND, INT, POINTER, POINTER) POINTER (hWnd, wMsg, wParam, lParam) in Message.messageReturnFromParams(msg, wParam, lParam, res) end val CW_USEDEFAULT = ~0x80000000 (* Default value for size and/ot position. *) fun DestroyWindow(hWnd: HWND) = ( call1 (user "DestroyWindow") (HWND) (SUCCESSSTATE "DestroyWindow") hWnd; Message.removeCallback hWnd ) (*val GWL_WNDPROC = ~4*) val GWL_HINSTANCE = ~6 val GWL_HWNDPARENT = ~8 val GWL_STYLE = ~16 val GWL_EXSTYLE = ~20 val GWL_USERDATA = ~21 val GWL_ID = ~12 val GetWindowLong = call2 (user "GetWindowLongA") (HWND, INT) INT (* SetWindowLong is a dangerous function to export. *) val SetWindowLong = call3 (user "SetWindowLongA") (HWND, INT, INT) INT (* ML extension. This replaces the GetWindowLong and SetWindowLong calls. *) val SubclassWindow = Message.subclass fun MoveWindow{hWnd: HWND, x: int, y: int, height: int, width: int, repaint: bool} = call6(user "MoveWindow") (HWND,INT,INT,INT,INT,BOOL) (SUCCESSSTATE "MoveWindow") (hWnd, x, y, width, height, repaint) val SetWindowPos = call7 (user "SetWindowPos") (HWND, HWND, INT, INT, INT, INT, WINDOWPOSITIONSTYLE) (SUCCESSSTATE "SetWindowPos") val SetWindowContextHelpId = call2 (user "SetWindowContextHelpId") (HWND, INT) (SUCCESSSTATE "SetWindowContextHelpId") val GetWindowContextHelpId = call1 (user "GetWindowContextHelpId") (HWND) INT local (* The C interface currently passes structures by reference. That's certainly wrong for Microsoft C and I suspect it's also wrong on Unix. I'm reluctant to change it without knowing more. DCJM. *) val childWindowFromPoint = call3 (user "ChildWindowFromPoint") (HWND, INT, INT) HWNDOPT and windowFromPoint = call2 (user "WindowFromPoint") (INT, INT) HWNDOPT in fun ChildWindowFromPoint(hw, {x, y}:POINT) = childWindowFromPoint(hw, x, y) and WindowFromPoint({x, y}:POINT) = windowFromPoint(x, y) end (* TODO: AnimateWindow - Only Win98/NT 5.0 BeginDeferWindowPos CascadeWindows ChildWindowFromPointEx DeferWindowPos EndDeferWindowPos EnumChildProc EnumChildWindows EnumThreadWindows EnumThreadWndProc EnumWindows EnumWindowsProc GetWindowPlacement GetWindowThreadProcessId IsWindowUnicode SetWindowPlacement ShowOwnedPopups ShowWindowAsync TileWindows *) end end; (* Because we're using opaque matching we have to install pretty printers outside the structure. *) local open Window.Style val flagTable = [(WS_POPUP, "WS_POPUP"), (WS_CHILD, "WS_CHILD"), (WS_MINIMIZE, "WS_MINIMIZE"), (WS_VISIBLE, "WS_VISIBLE"), (WS_DISABLED, "WS_DISABLED"), (WS_CLIPSIBLINGS, "WS_CLIPSIBLINGS"), (WS_CLIPCHILDREN, "WS_CLIPCHILDREN"), (WS_MAXIMIZE, "WS_MAXIMIZE"), (WS_CAPTION, "WS_CAPTION"), (WS_BORDER, "WS_BORDER"), (WS_DLGFRAME, "WS_DLGFRAME"), (WS_VSCROLL, "WS_VSCROLL"), (WS_HSCROLL, "WS_HSCROLL"), (WS_SYSMENU, "WS_SYSMENU"), (WS_THICKFRAME, "WS_THICKFRAME"), (WS_GROUP, "WS_GROUP"), (WS_TABSTOP, "WS_TABSTOP"), (WS_MINIMIZEBOX, "WS_MINIMIZEBOX"), (WS_MAXIMIZEBOX, "WS_MAXIMIZEBOX")] structure FlagP = FlagPrint(structure BITS = Window.Style) in val _ = PolyML.install_pp (FlagP.createFlagPrinter flagTable) end; polyml.5.2.1/mlsource/extra/Win/clean.sml0000644000175000017500000000212510313043370017276 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* Clean up the name space by removing unnecessary declarations. *) val _ = List.app PolyML.Compiler.forgetStructure [ "Base", "ComboBase", "FontBase", "MenuBase", "ScrollBase", "WinBase", "MessageBase", "GdiBase", "DeviceBase", "LocaleBase" ]; val _ = List.app PolyML.Compiler.forgetFunctor ["FlagPrint"]; polyml.5.2.1/mlsource/extra/Win/ml_bind.sml0000644000175000017500000000300710676746325017646 0ustar daviddavid(* Copyright (c) 2001-7 David C.J. Matthews This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* Build everything. *) local structure d = Dialog structure g = Globals structure c = Cursor structure i = Icon structure m = Menu structure cl = Class structure e = Edit structure w = Window structure o = CommonDialog structure b = MessageBox structure t = Caret structure cb = Clipboard structure mf = Metafile structure r = Rectangle structure t = Transform structure p = Printing structure p = Path (* Includes Line *) structure d = DeviceContext (* Includes Pen, Font, Brush, Color *) structure p = Painting structure s = Shape structure l = Line structure b = Bitmap structure c = Clipping structure dd = DragDrop structure k = Keyboard structure m = Mouse structure ws = WinSystem structure lo = Locale structure cc = CommonControls in end; polyml.5.2.1/mlsource/extra/Win/Original/0000755000175000017500000000000011100060555017242 5ustar daviddavidpolyml.5.2.1/mlsource/extra/Win/Original/ConstType.ML0000644000175000017500000000152710313043370021432 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure ConstType = ConstTypeFct ( structure Macro = Macro ); polyml.5.2.1/mlsource/extra/Win/Original/ConstTypeFct.ML0000644000175000017500000076501710313043372022104 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (*------------------------------------------------------------------------------ CONTENTS: 3 MODE=ML SEP=3 183. import Macro 194. functor 208. misc 216. 'a encoding wraps 'a <-> int 265. DocumentMode 292. DeviceCapability 329. RasterOperation 366. RasterOpCode 401. GdiError 419. ResultRegion 455. RegionOperation 487. StretchMode 510. PolyFillMode 535. TextAlign 563. VirtualTextAlign 586. ExtendedTextOut 619. DCBound 646. MetaFunction 732. GDIEscapes 823. SpoolerErrorCode 853. EnumObject 885. XFormType 908. BitmapCompression 931. TextMetricPitchandFamily 953. NewTextMetric 972. LogicalFont 990. OutputPrecision 1017. ClippingPrecision 1043. OutputQuality 1064. FontPitch 1085. CharacterSet 1110. FontFamily 1134. FontWeight 1167. CulturePANOSE 1187. FamilyTypePANOSE 1209. IndexPANOSE 1236. SerifStylePANOSE 1268. WeightPANOSE 1296. ProportionPANOSE 1322. ContrastPANOSE 1348. StrokeVariationPANOSE 1373. ArmStylePANOSE 1401. LetterFormPANOSE 1433. MidlinePANOSE 1463. XHeightPANOSE 1487. ExtLogFont 1506. FontType 1525. PaletteEntryFlag 1546. BkMode 1568. GraphicsMode 1590. PointType 1613. MapMode 1643. TransMode 1661. StockObjectType 1698. BrushStyle 1724. HatchStyle 1766. PenStyle 1806. ArcDirection 1815. DeviceItem 1867. DeviceTechnology 1892. CurveCapability 1920. LineCapability 1947. PolygonalCapability 1975. ClippingCapability 1997. TextCapability 2033. RasterCapability 2067. DeviceIndependentPalette 2098. SystemPaletteUse 2120. BitmapInit 2141. FloodFillMode 2163. DeviceMode 2194. PaperOrientation 2212. PaperSize 2274. BinMode 2306. DevModeResolution 2361. DocumentMode 2387. DeviceCapability 2578. misc C -> ML 2589. ResourceType 2627. ScrollBarType 2664. ShowWindowMode 2706. KeyFunction 2728. VirtualKey 2833. WindowHook 2866. HookCode 2889. HookProcedureCode 2917. InputEventType 2955. KeyLayoutFlag 2979. DesktopOperation 3003. WindowStationAccess 3028. GetWindowLongParam 3054. GetWindowLongValue 3083. WindowActivationState 3104. PowerState 3127. WindowMessage 3306. HitTest 3350. SendMessageTimeOut 3369. MessageActivateFlag 3391. SizeFlag 3419. WindowAttribute 3443. MouseKey 3469. WindowStyle 3523. WindowStyleExtended 3546. ClassStyle 3577. ClipboardFormat 3619. AccelaratorFunction 3642. WindowPlacementFlag 3662. OwnerDrawnType 3686. OwnerDrawnAction 3712. PeekMessageAction 3731. HotKeyModifier 3752. HotKeyIdentifier 3772. ExitWindowMode 3794. probvlem 3802. SetWindowPositionStyle 3833. probvlem 3851. KeyEvent 3871. MouseEvent 3897. QueueStatus 3940. SystemMetrics 4003. TrackPopMenu 4026. DrawTextMode 4059. DeviceContextFlag 4090. RedrawWindowFlag 4120. ScrollWindowFlag 4141. EnableScrollBarFlag 4167. MessageBoxValue 4212. ControlColor 4238. ColorType 4277. GetWindowFlag 4302. MenuFlag 4352. SystemCommand 4388. CursorIdentifier 4420. BitmapOption 4472. OCRFlag 4502. OICFlag 4531. IconIdentifier 4554. MessageBoxIdentifier 4579. EditStyle 4610. ControlNotification 4636. EditCtlBehaviour 4683. WordBreakFlag 4702. ButtonStyle 4759. ButtonMessageEnquiry 4782. StaticStyle 4815. StaticMessage 4836. DWLParameter 4857. DialogBoxFlag 4884. DialogStyle 4909. DefaultMessageAction 4927. PROB 4935. DialogCode 4964. ListBoxFlag 5006. ListBoxAction 5063. ListBoxStyle 5099. ComboBoxValue 5149. ComboBoxStyle 5178. ComboBoxAction 5224. ScrollBarStyle 5251. ScrollBarAction 5285. HelpOption 5315. SysParamInfo 5368. conversions 5533. upper case conversions 5698. ends ------------------------------------------------------------------------------*) signature importMacroSig = sig val hexOR : int list -> int val hex : string -> int end; (*------------------------------------------------------------------------------ INDEX: functor ------------------------------------------------------------------------------*) functor ConstTypeFct ( structure Macro : importMacroSig ) = struct local val hex = Macro.hex val hexOR = Macro.hexOR fun MAKEINTRESOURCE i = i val TRUE = 1 val FALSE = 0 val DIFFERENCE = 11 in open CInterface (*------------------------------------------------------------------------------ INDEX: misc ------------------------------------------------------------------------------*) (*------------------------------------------------------------------------------ INDEX: 'a encoding wraps 'a <-> int ------------------------------------------------------------------------------*) abstype 'a encoding = E of (int -> 'a) * ('a -> int) with val encoding = E fun absE (E (abs,rep)) = abs fun repE (E (abs,rep)) = rep end fun absConversion E C = let val (fromC,toC,ctype) = breakConversion C in mkConversion (absE E o fromC) (toC o repE E) ctype end fun conversionOfEncoding E = absConversion E INT local (****** * This scheme reduces the number of functions. * e.g. 40 types, t1 t2 t3 etc... * with 40 t1 encoding values * and the 4 general functions below. * 40 + 4 = 44 values. * This is equivalent to 40 * 4 = 160 values. ******) fun split n = (n mod 2=1,n div 2) fun extendBoolOp f (0,0) = 0 | extendBoolOp f (n,m) = let val (n0,n) = split n val (m0,m) = split m in (if f (n0,m0) then 1 else 0) + 2 * extendBoolOp f (n,m) end fun extend bop E (a,b) = absE E (extendBoolOp bop (repE E a,repE E b)) fun curry f a b = f (a,b) fun fold f Z [] = Z | fold f Z (x::xs) = fold f (f Z x) xs in val orE = extend (fn (a,b) => a orelse b) val andE = extend (fn (a,b) => a andalso b) val xorE = extend (fn (a,b) => (not a andalso b) orelse (a andalso not b)) fun orLE E = fold (curry (orE E)) (absE E 0) fun addE E = fn a => fn b => absE E (repE E a + repE E b) fun addLE E = fold (addE E) (absE E 0) end (*------------------------------------------------------------------------------ INDEX: DocumentMode ------------------------------------------------------------------------------*) (* Device Modes *) (* DocumentProperties() *) (*TYPE: DocumentMode *) local datatype DocumentMode = W of int in type DocumentMode = DocumentMode val DocumentModeE = encoding (W,fn W n => n) val DM_UPDATE = W (1) val DM_COPY = W (2) val DM_PROMPT = W (4) val DM_MODIFY = W (8) val DM_IN_BUFFER = DM_MODIFY val DM_IN_PROMPT = DM_PROMPT val DM_OUT_BUFFER = DM_COPY val DM_OUT_DEFAULT = DM_UPDATE end (*------------------------------------------------------------------------------ INDEX: DeviceCapability ------------------------------------------------------------------------------*) (* Device capabilities *) (* DeviceCapabilities() *) (*TYPE: DeviceCapability *) local datatype DeviceCapability = W of int in type DeviceCapability = DeviceCapability val DeviceCapabilityE = encoding (W,fn W n => n) val DC_FIELDS = W (1) val DC_PAPERS = W (2) val DC_PAPERSIZE = W (3) val DC_MINEXTENT = W (4) val DC_MAXEXTENT = W (5) val DC_BINS = W (6) val DC_DUPLEX = W (7) val DC_SIZE = W (8) val DC_EXTRA = W (9) val DC_VERSION = W (10) val DC_DRIVER = W (11) val DC_BINNAMES = W (12) val DC_ENUMRESOLUTIONS = W (13) val DC_FILEDEPENDENCIES = W (14) val DC_TRUETYPE = W (15) val DC_PAPERNAMES = W (16) val DC_ORIENTATION = W (17) val DC_COPIES = W (18) end (*------------------------------------------------------------------------------ INDEX: RasterOperation ------------------------------------------------------------------------------*) (* Binary raster operations *) (* GetROP2() SetROP2() *) (*TYPE: RasterOperation *) local datatype RasterOperation = W of int in type RasterOperation = RasterOperation val RasterOperationE = encoding (W,fn W n => n) val R2_BLACK = W (1 (* 0 *)) val R2_NOTMERGEPEN = W (2 (* DPon *)) val R2_MASKNOTPEN = W (3 (* DPna *)) val R2_NOTCOPYPEN = W (4 (* PN *)) val R2_MASKPENNOT = W (5 (* PDna *)) val R2_NOT = W (6 (* Dn *)) val R2_XORPEN = W (7 (* DPx *)) val R2_NOTMASKPEN = W (8 (* DPan *)) val R2_MASKPEN = W (9 (* DPa *)) val R2_NOTXORPEN = W (10 (* DPxn *)) val R2_NOP = W (11 (* D *)) val R2_MERGENOTPEN = W (12 (* DPno *)) val R2_COPYPEN = W (13 (* P *)) val R2_MERGEPENNOT = W (14 (* PDno *)) val R2_MERGEPEN = W (15 (* DPo *)) val R2_WHITE = W (16 (* 1 *)) val R2_LAST = W (16) end (*------------------------------------------------------------------------------ INDEX: RasterOpCode ------------------------------------------------------------------------------*) (* BitBlt() MaskBlt() StretchBlt() *) (*TYPE: RasterOpCode *) local datatype RasterOpCode = W of int in type RasterOpCode = RasterOpCode val RasterOpCodeE = encoding (W,fn W n => n) val SRCCOPY = W (hex "0x00CC0020" (* dest = source *)) val SRCPAINT = W (hex "0x00EE0086" (* dest = source OR dest *)) val SRCAND = W (hex "0x008800C6" (* dest = source AND dest *)) val SRCINVERT = W (hex "0x00660046" (* dest = source XOR dest *)) val SRCERASE = W (hex "0x00440328" (* dest = source AND (NOT dest ) *)) val NOTSRCCOPY = W (hex "0x00330008" (* dest = (NOT source) *)) val NOTSRCERASE = W (hex "0x001100A6" (* dest = (NOT src) AND (NOT dest) *)) val MERGECOPY = W (hex "0x00C000CA" (* dest = (source AND pattern) *)) val MERGEPAINT = W (hex "0x00BB0226" (* dest = (NOT source) OR dest *)) val PATCOPY = W (hex "0x00F00021" (* dest = pattern *)) val PATPAINT = W (hex "0x00FB0A09" (* dest = DPSnoo *)) val PATINVERT = W (hex "0x005A0049" (* dest = pattern XOR dest *)) val DSTINVERT = W (hex "0x00550009" (* dest = (NOT dest) *)) val BLACKNESS = W (hex "0x00000042" (* dest = BLACK *)) val WHITENESS = W (hex "0x00FF0062" (* dest = WHITE *)) end (*------------------------------------------------------------------------------ INDEX: GdiError ------------------------------------------------------------------------------*) (*TYPE: GdiError *) local datatype GdiError = W of int in type GdiError = GdiError val GdiErrorE = encoding (W,fn W n => n) val GDI_ERROR = W ((hex "0xFFFFFFFF")) val HGDI_ERROR = W ((hex "0xFFFFFFFF")) end (*------------------------------------------------------------------------------ INDEX: ResultRegion ------------------------------------------------------------------------------*) (* CombineRgn() ExcludeClipRect() ExtSelectClipRgn() GetClipBox() GetRgnBox() IntersectClipRect() OffsetClipRgn() OffsetRgn() SelectClipRgn() SelectObject() SetMetaRgn() ExcludeUpdateRgn() GetUpdateRgn() ScrollWindowEx() *) (*TYPE: ResultRegion *) local datatype ResultRegion = W of int in type ResultRegion = ResultRegion val ResultRegionE = encoding (W,fn W n => n) val ERROR = W (0) val NULLREGION = W (1) val SIMPLEREGION = W (2) val COMPLEXREGION = W (3) end (*------------------------------------------------------------------------------ INDEX: RegionOperation ------------------------------------------------------------------------------*) (* Creates the union of the two combined regions except for the overlapping areas. CombineRgn() ExtSelectClipRgn() SelectClipPath() *) (*TYPE: RegionOperation *) local datatype RegionOperation = W of int in type RegionOperation = RegionOperation val RegionOperationE = encoding (W,fn W n => n) val RGN_ERROR = W (0) val RGN_AND = W (1) val RGN_OR = W (2) val RGN_XOR = W (3) val RGN_DIFF = W (4) val RGN_COPY = W (5) val RGN_MIN = RGN_AND val RGN_MAX = RGN_COPY end (*------------------------------------------------------------------------------ INDEX: StretchMode ------------------------------------------------------------------------------*) (* SetStretchBltMode() *) (*TYPE: StretchMode *) local datatype StretchMode = W of int in type StretchMode = StretchMode val StretchModeE = encoding (W,fn W n => n) val BLACKONWHITE = W (1) val WHITEONBLACK = W (2) val COLORONCOLOR = W (3) val HALFTONE = W (4) val MAXSTRETCHBLTMODE = W (4) end (*------------------------------------------------------------------------------ INDEX: PolyFillMode ------------------------------------------------------------------------------*) (* SetPolyFillMode() CreatePolygonRgn() CreatePolyPolygonRgn() GetPolyFillMode() GetDeviceCaps() *) (*TYPE: PolyFillMode *) local datatype PolyFillMode = W of int in type PolyFillMode = PolyFillMode val PolyFillModeE = encoding (W,fn W n => n) val ALTERNATE = W (1) val WINDING = W (2) val POLYFILL_LAST = W (2) end (*------------------------------------------------------------------------------ INDEX: TextAlign ------------------------------------------------------------------------------*) (* GetTextAlign() SetTextAlign() *) (*TYPE: TextAlign *) local datatype TextAlign = W of int in type TextAlign = TextAlign val TextAlignE = encoding (W,fn W n => n) val TA_NOUPDATECP = W (0) val TA_UPDATECP = W (1) val TA_LEFT = W (0) val TA_RIGHT = W (2) val TA_CENTER = W (6) val TA_TOP = W (0) val TA_BOTTOM = W (8) val TA_BASELINE = W (24) val TA_MASK = addLE TextAlignE [TA_BASELINE,TA_CENTER,TA_UPDATECP] end (*------------------------------------------------------------------------------ INDEX: VirtualTextAlign ------------------------------------------------------------------------------*) (*TYPE: VirtualTextAlign *) local datatype VirtualTextAlign = W of int fun f ta = W (repE TextAlignE ta) in type VirtualTextAlign = VirtualTextAlign val VirtualTextAlignE = encoding (W,fn W n => n) val VTA_BASELINE = f (TA_BASELINE) val VTA_LEFT = f (TA_BOTTOM) val VTA_RIGHT = f (TA_TOP) val VTA_CENTER = f (TA_CENTER) val VTA_BOTTOM = f (TA_RIGHT) val VTA_TOP = f (TA_LEFT) end (*------------------------------------------------------------------------------ INDEX: ExtendedTextOut ------------------------------------------------------------------------------*) (* PolyTextOut() ExtTextOut() *) (*TYPE: ExtendedTextOut *) local datatype ExtendedTextOut = W of int in type ExtendedTextOut = ExtendedTextOut val ExtendedTextOutE = encoding (W,fn W n => n) val ETO_GRAYED = W (1) val ETO_OPAQUE = W (2) val ETO_CLIPPED = W (4) end (*------------------------------------------------------------------------------ INDEX: ASPECT_FILTERING constant ------------------------------------------------------------------------------*) val ASPECT_FILTERING = 1 (*------------------------------------------------------------------------------ INDEX: DCBound ------------------------------------------------------------------------------*) (* Drawing bounds *) (* SetBoundsRect() GetBoundsRect() *) (*TYPE: DCBound *) local datatype DCBound = W of int in type DCBound = DCBound val DCBoundE = encoding (W,fn W n => n) val DCB_RESET = W (hex "0x0001") val DCB_ACCUMULATE = W (hex "0x0002") val DCB_DIRTY = DCB_ACCUMULATE val DCB_SET = orLE DCBoundE [DCB_RESET,DCB_ACCUMULATE] val DCB_ENABLE = W (hex "0x0004") val DCB_DISABLE = W (hex "0x0008") end (*------------------------------------------------------------------------------ INDEX: MetaFunction ------------------------------------------------------------------------------*) (* Metafile functions *) (*TYPE: MetaFunction *) local datatype MetaFunction = W of int in type MetaFunction = MetaFunction val MetaFunctionE = encoding (W,fn W n => n) val META_SETBKCOLOR = W (hex "0x0201") val META_SETBKMODE = W (hex "0x0102") val META_SETMAPMODE = W (hex "0x0103") val META_SETROP2 = W (hex "0x0104") val META_SETRELABS = W (hex "0x0105") val META_SETPOLYFILLMODE = W (hex "0x0106") val META_SETSTRETCHBLTMODE = W (hex "0x0107") val META_SETTEXTCHAREXTRA = W (hex "0x0108") val META_SETTEXTCOLOR = W (hex "0x0209") val META_SETTEXTJUSTIFICATION = W (hex "0x020A") val META_SETWINDOWORG = W (hex "0x020B") val META_SETWINDOWEXT = W (hex "0x020C") val META_SETVIEWPORTORG = W (hex "0x020D") val META_SETVIEWPORTEXT = W (hex "0x020E") val META_OFFSETWINDOWORG = W (hex "0x020F") val META_SCALEWINDOWEXT = W (hex "0x0410") val META_OFFSETVIEWPORTORG = W (hex "0x0211") val META_SCALEVIEWPORTEXT = W (hex "0x0412") val META_LINETO = W (hex "0x0213") val META_MOVETO = W (hex "0x0214") val META_EXCLUDECLIPRECT = W (hex "0x0415") val META_INTERSECTCLIPRECT = W (hex "0x0416") val META_ARC = W (hex "0x0817") val META_ELLIPSE = W (hex "0x0418") val META_FLOODFILL = W (hex "0x0419") val META_PIE = W (hex "0x081A") val META_RECTANGLE = W (hex "0x041B") val META_ROUNDRECT = W (hex "0x061C") val META_PATBLT = W (hex "0x061D") val META_SAVEDC = W (hex "0x001E") val META_SETPIXEL = W (hex "0x041F") val META_OFFSETCLIPRGN = W (hex "0x0220") val META_TEXTOUT = W (hex "0x0521") val META_BITBLT = W (hex "0x0922") val META_STRETCHBLT = W (hex "0x0B23") val META_POLYGON = W (hex "0x0324") val META_POLYLINE = W (hex "0x0325") val META_ESCAPE = W (hex "0x0626") val META_RESTOREDC = W (hex "0x0127") val META_FILLREGION = W (hex "0x0228") val META_FRAMEREGION = W (hex "0x0429") val META_INVERTREGION = W (hex "0x012A") val META_PAINTREGION = W (hex "0x012B") val META_SELECTCLIPREGION = W (hex "0x012C") val META_SELECTOBJECT = W (hex "0x012D") val META_SETTEXTALIGN = W (hex "0x012E") val META_CHORD = W (hex "0x0830") val META_SETMAPPERFLAGS = W (hex "0x0231") val META_EXTTEXTOUT = W (hex "0x0a32") val META_SETDIBTODEV = W (hex "0x0d33") val META_SELECTPALETTE = W (hex "0x0234") val META_REALIZEPALETTE = W (hex "0x0035") val META_ANIMATEPALETTE = W (hex "0x0436") val META_SETPALENTRIES = W (hex "0x0037") val META_POLYPOLYGON = W (hex "0x0538") val META_RESIZEPALETTE = W (hex "0x0139") val META_DIBBITBLT = W (hex "0x0940") val META_DIBSTRETCHBLT = W (hex "0x0b41") val META_DIBCREATEPATTERNBRUSH = W (hex "0x0142") val META_STRETCHDIB = W (hex "0x0f43") val META_EXTFLOODFILL = W (hex "0x0548") val META_DELETEOBJECT = W (hex "0x01f0") val META_CREATEPALETTE = W (hex "0x00f7") val META_CREATEPATTERNBRUSH = W (hex "0x01F9") val META_CREATEPENINDIRECT = W (hex "0x02FA") val META_CREATEFONTINDIRECT = W (hex "0x02FB") val META_CREATEBRUSHINDIRECT = W (hex "0x02FC") val META_CREATEREGION = W (hex "0x06FF") end (*------------------------------------------------------------------------------ INDEX: GDIEscapes ------------------------------------------------------------------------------*) (*TYPE: GDIEscapes *) local datatype GDIEscapes = W of int in type GDIEscapes = GDIEscapes val GDIEscapesE = encoding (W,fn W n => n) val NEWFRAME = W (1) val ABORTDOC = W (2) val NEXTBAND = W (3) val SETCOLORTABLE = W (4) val GETCOLORTABLE = W (5) val FLUSHOUTPUT = W (6) val DRAFTMODE = W (7) val QUERYESCSUPPORT = W (8) val SETABORTPROC = W (9) val STARTDOC = W (10) val ENDDOC = W (11) val GETPHYSPAGESIZE = W (12) val GETPRINTINGOFFSET = W (13) val GETSCALINGFACTOR = W (14) val MFCOMMENT = W (15) val GETPENWIDTH = W (16) val SETCOPYCOUNT = W (17) val SELECTPAPERSOURCE = W (18) val DEVICEDATA = W (19) val PASSTHROUGH = W (19) val GETTECHNOLGY = W (20) val GETTECHNOLOGY = W (20) val SETLINECAP = W (21) val SETLINEJOIN = W (22) val SETMITERLIMIT = W (23) val BANDINFO = W (24) val DRAWPATTERNRECT = W (25) val GETVECTORPENSIZE = W (26) val GETVECTORBRUSHSIZE = W (27) val ENABLEDUPLEX = W (28) val GETSETPAPERBINS = W (29) val GETSETPRINTORIENT = W (30) val ENUMPAPERBINS = W (31) val SETDIBSCALING = W (32) val EPSPRINTING = W (33) val ENUMPAPERMETRICS = W (34) val GETSETPAPERMETRICS = W (35) val POSTSCRIPT_DATA = W (37) val POSTSCRIPT_IGNORE = W (38) val MOUSETRAILS = W (39) val GETDEVICEUNITS = W (42) val GETEXTENDEDTEXTMETRICS = W (256) val GETEXTENTTABLE = W (257) val GETPAIRKERNTABLE = W (258) val GETTRACKKERNTABLE = W (259) val EXTTEXTOUT = W (512) val GETFACENAME = W (513) val DOWNLOADFACE = W (514) val ENABLERELATIVEWIDTHS = W (768) val ENABLEPAIRKERNING = W (769) val SETKERNTRACK = W (770) val SETALLJUSTVALUES = W (771) val SETCHARSET = W (772) val STRETCHBLT = W (2048) val GETSETSCREENPARAMS = W (3072) val BEGIN_PATH = W (4096) val CLIP_TO_PATH = W (4097) val END_PATH = W (4098) val EXT_DEVICE_CAPS = W (4099) val RESTORE_CTM = W (4100) val SAVE_CTM = W (4101) val SET_ARC_DIRECTION = W (4102) val SET_BACKGROUND_COLOR = W (4103) val SET_POLY_MODE = W (4104) val SET_SCREEN_ANGLE = W (4105) val SET_SPREAD = W (4106) val TRANSFORM_CTM = W (4107) val SET_CLIP_BOX = W (4108) val SET_BOUNDS = W (4109) val SET_MIRROR_MODE = W (4110) val OPENCHANNEL = W (4110) val DOWNLOADHEADER = W (4111) val CLOSECHANNEL = W (4112) val POSTSCRIPT_PASSTHROUGH = W (4115) val ENCAPSULATED_POSTSCRIPT = W (4116) end (*------------------------------------------------------------------------------ INDEX: SpoolerErrorCode ------------------------------------------------------------------------------*) (* AbortDoc() EndDoc() EndPage() Escape() StartDoc() StartPage() *) (*TYPE: SpoolerErrorCode *) local datatype SpoolerErrorCode = W of int in type SpoolerErrorCode = SpoolerErrorCode val SpoolerErrorCodeE = encoding (W,fn W n => n) val SP_NOTREPORTED = W (hex "0x4000") val SP_ERROR = W ((~1)) val SP_APPABORT = W ((~2)) val SP_USERABORT = W ((~3)) val SP_OUTOFDISK = W ((~4)) val SP_OUTOFMEMORY = W ((~5)) val PR_JOBSTATUS = W (hex "0x0000") end (*------------------------------------------------------------------------------ INDEX: EnumObject ------------------------------------------------------------------------------*) (* GetCurrentObject() GetObjectType() *) (*TYPE: EnumObject *) local datatype EnumObject = W of int in type EnumObject = EnumObject val EnumObjectE = encoding (W,fn W n => n) val OBJ_PEN = W (1) val OBJ_BRUSH = W (2) val OBJ_DC = W (3) val OBJ_METADC = W (4) val OBJ_PAL = W (5) val OBJ_FONT = W (6) val OBJ_BITMAP = W (7) val OBJ_REGION = W (8) val OBJ_METAFILE = W (9) val OBJ_MEMDC = W (10) val OBJ_EXTPEN = W (11) val OBJ_ENHMETADC = W (12) val OBJ_ENHMETAFILE = W (13) end (*------------------------------------------------------------------------------ INDEX: XFormType ------------------------------------------------------------------------------*) (* ModifyWorldTransform() *) (*TYPE: XFormType *) local datatype XFormType = W of int in type XFormType = XFormType val XFormTypeE = encoding (W,fn W n => n) val MWT_IDENTITY = W (1) val MWT_LEFTMULTIPLY = W (2) val MWT_RIGHTMULTIPLY = W (3) val MWT_MIN = MWT_IDENTITY val MWT_MAX = MWT_RIGHTMULTIPLY end (*------------------------------------------------------------------------------ INDEX: BitmapCompression --------------------- ---------------------------------------------------------*) (* Bitmap compression *) (* BITMAPINFOHEADER struct *) (*TYPE: BitmapCompression *) local datatype BitmapCompression = W of int in type BitmapCompression = BitmapCompression val BitmapCompressionE = encoding (W,fn W n => n) val BI_RGB = W (0) val BI_RLE8 = W (1) val BI_RLE4 = W (2) val BI_BITFIELDS = W (3) end (*------------------------------------------------------------------------------ INDEX: TextMetricPitchandFamily ------------------------------------------------------------------------------*) (* TEXTMETRIC struct *) (*TYPE: TextMetricPitchandFamily *) local datatype TextMetricPitchandFamily = W of int in type TextMetricPitchandFamily = TextMetricPitchandFamily val TextMetricPitchandFamilyE = encoding (W,fn W n => n) val TMPF_FIXED_PITCH = W (hex "0x01") val TMPF_VECTOR = W (hex "0x02") val TMPF_DEVICE = W (hex "0x08") val TMPF_TRUETYPE = W (hex "0x04") end (*------------------------------------------------------------------------------ INDEX: NewTextMetric ------------------------------------------------------------------------------*) (*TYPE: NewTextMetric *) local datatype NewTextMetric = W of int in type NewTextMetric = NewTextMetric val NewTextMetricE = encoding (W,fn W n => n) val NTM_REGULAR = W (hex "0x00000040") val NTM_BOLD = W (hex "0x00000020") val NTM_ITALIC = W (hex "0x00000001") end (*------------------------------------------------------------------------------ INDEX: LogicalFont ------------------------------------------------------------------------------*) (*TYPE: LogicalFont *) local datatype LogicalFont = W of int in type LogicalFont = LogicalFont val LogicalFontE = encoding (W,fn W n => n) val LF_FACESIZE = W (32) val LF_FULLFACESIZE = W (64) end (*------------------------------------------------------------------------------ INDEX: OutputPrecision ------------------------------------------------------------------------------*) (* CreateFont() *) (*TYPE: OutputPrecision *) local datatype OutputPrecision = W of int in type OutputPrecision = OutputPrecision val OutputPrecisionE = encoding (W,fn W n => n) val OUT_DEFAULT_PRECIS = W (0) val OUT_STRING_PRECIS = W (1) val OUT_CHARACTER_PRECIS = W (2) val OUT_STROKE_PRECIS = W (3) val OUT_TT_PRECIS = W (4) val OUT_DEVICE_PRECIS = W (5) val OUT_RASTER_PRECIS = W (6) val OUT_TT_ONLY_PRECIS = W (7) val OUT_OUTLINE_PRECIS = W (8) end (*------------------------------------------------------------------------------ INDEX: ClippingPrecision ------------------------------------------------------------------------------*) (* Logical Font CreateFont() *) (*TYPE: ClippingPrecision *) local datatype ClippingPrecision = W of int in type ClippingPrecision = ClippingPrecision val ClippingPrecisionE = encoding (W,fn W n => n) val CLIP_DEFAULT_PRECIS = W (0) val CLIP_CHARACTER_PRECIS = W (1) val CLIP_STROKE_PRECIS = W (2) val CLIP_MASK = W (hex "0xf") val CLIP_LH_ANGLES = W (1 * 16 (* 1<<4 *)) val CLIP_TT_ALWAYS = W (2 * 16 (* 2<<4 *)) val CLIP_EMBEDDED = W (8 * 16 (* 8<<4 *)) end (*------------------------------------------------------------------------------ INDEX: OutputQuality ------------------------------------------------------------------------------*) (* CreateFont() *) (*TYPE: OutputQuality *) local datatype OutputQuality = W of int in type OutputQuality = OutputQuality val OutputQualityE = encoding (W,fn W n => n) val DEFAULT_QUALITY = W (0) val DRAFT_QUALITY = W (1) val PROOF_QUALITY = W (2) end (*------------------------------------------------------------------------------ INDEX: FontPitch ------------------------------------------------------------------------------*) (* CreateFont() *) (*TYPE: FontPitch *) local datatype FontPitch = W of int in type FontPitch = FontPitch val FontPitchE = encoding (W,fn W n => n) val DEFAULT_PITCH = W (0) val FIXED_PITCH = W (1) val VARIABLE_PITCH = W (2) end (*------------------------------------------------------------------------------ INDEX: CharacterSet ------------------------------------------------------------------------------*) (* CreateFont() *) (*TYPE: CharacterSet *) local datatype CharacterSet = W of int in type CharacterSet = CharacterSet val CharacterSetE = encoding (W,fn W n => n) val ANSI_CHARSET = W (0) val DEFAULT_CHARSET = W (1) val SYMBOL_CHARSET = W (2) val SHIFTJIS_CHARSET = W (128) val HANGEUL_CHARSET = W (129) val CHINESEBIG5_CHARSET = W (136) val OEM_CHARSET = W (255) end (*------------------------------------------------------------------------------ INDEX: FontFamily ------------------------------------------------------------------------------*) (* CreateFont() *) (*TYPE: FontFamily *) local datatype FontFamily = W of int in type FontFamily = FontFamily val FontFamilyE = encoding (W,fn W n => n) val FF_DONTCARE = W (0 * 16 (* (0<<4) Don't care or don't know. *)) val FF_ROMAN = W (1 * 16 (* (1<<4) Variable stroke width, serifed. *)) val FF_SWISS = W (2 * 16 (* (2<<4) Variable stroke width, sans~serifed. *)) val FF_MODERN = W (3 * 16 (* (3<<4) Constant stroke width, serifed or sans~serifed. *)) val FF_SCRIPT = W (4 * 16 (* (4<<4) Cursive, etc. *)) val FF_DECORATIVE = W (5 * 16 (* (5<<4) Old English, etc. *)) end (*------------------------------------------------------------------------------ INDEX: FontWeight ------------------------------------------------------------------------------*) (* CreateFont() *) (*TYPE: FontWeight *) local datatype FontWeight = W of int in type FontWeight = FontWeight val FontWeightE = encoding (W,fn W n => n) val FW_DONTCARE = W (0) val FW_THIN = W (100) val FW_EXTRALIGHT = W (200) val FW_LIGHT = W (300) val FW_NORMAL = W (400) val FW_MEDIUM = W (500) val FW_SEMIBOLD = W (600) val FW_BOLD = W (700) val FW_EXTRABOLD = W (800) val FW_HEAVY = W (900) val FW_ULTRALIGHT = FW_EXTRALIGHT val FW_REGULAR = FW_NORMAL val FW_DEMIBOLD = FW_SEMIBOLD val FW_ULTRABOLD = FW_EXTRABOLD val FW_BLACK = FW_HEAVY end (*------------------------------------------------------------------------------ INDEX: CulturePANOSE ------------------------------------------------------------------------------*) (* In PANOSE struct *) (*TYPE: CulturePANOSE *) local datatype CulturePANOSE = W of int in type CulturePANOSE = CulturePANOSE val CulturePANOSEE = encoding (W,fn W n => n) val PAN_ANY = W (0 (* Any *)) val PAN_CULTURE_LATIN = W (0) end (*------------------------------------------------------------------------------ INDEX: FamilyTypePANOSE ------------------------------------------------------------------------------*) (*TYPE: FamilyTypePANOSE *) local datatype FamilyTypePANOSE = W of int in type FamilyTypePANOSE = FamilyTypePANOSE val FamilyTypePANOSEE = encoding (W,fn W n => n) val PAN_ANY = W (0 (* Any *)) val PAN_NO_FIT = W (1 (* No Fit *)) val PAN_FAMILY_TEXT_DISPLAY = W (2 (* Text and Display *)) val PAN_FAMILY_SCRIPT = W (3 (* Script *)) val PAN_FAMILY_DECORATIVE = W (4 (* Decorative *)) val PAN_FAMILY_PICTORIAL = W (5 (* Pictorial *)) end (*------------------------------------------------------------------------------ INDEX: IndexPANOSE ------------------------------------------------------------------------------*) (*TYPE: IndexPANOSE *) local datatype IndexPANOSE = W of int in type IndexPANOSE = IndexPANOSE val IndexPANOSEE = encoding (W,fn W n => n) val PANOSE_COUNT = W (10) val PAN_FAMILYTYPE_INDEX = W (0) val PAN_SERIFSTYLE_INDEX = W (1) val PAN_WEIGHT_INDEX = W (2) val PAN_PROPORTION_INDEX = W (3) val PAN_CONTRAST_INDEX = W (4) val PAN_STROKEVARIATION_INDEX = W (5) val PAN_ARMSTYLE_INDEX = W (6) val PAN_LETTERFORM_INDEX = W (7) val PAN_MIDLINE_INDEX = W (8) val PAN_XHEIGHT_INDEX = W (9) end (*------------------------------------------------------------------------------ INDEX: SerifStylePANOSE ------------------------------------------------------------------------------*) (*TYPE: SerifStylePANOSE *) local datatype SerifStylePANOSE = W of int in type SerifStylePANOSE = SerifStylePANOSE val SerifStylePANOSEE = encoding (W,fn W n => n) val PAN_ANY = W (0 (* Any *)) val PAN_NO_FIT = W (1 (* No Fit *)) val PAN_SERIF_COVE = W (2 (* Cove *)) val PAN_SERIF_OBTUSE_COVE = W (3 (* Obtuse Cove *)) val PAN_SERIF_SQUARE_COVE = W (4 (* Square Cove *)) val PAN_SERIF_OBTUSE_SQUARE_COVE = W (5 (* Obtuse Square Cove *)) val PAN_SERIF_SQUARE = W (6 (* Square *)) val PAN_SERIF_THIN = W (7 (* Thin *)) val PAN_SERIF_BONE = W (8 (* Bone *)) val PAN_SERIF_EXAGGERATED = W (9 (* Exaggerated *)) val PAN_SERIF_TRIANGLE = W (10 (* Triangle *)) val PAN_SERIF_NORMAL_SANS = W (11 (* Normal Sans *)) val PAN_SERIF_OBTUSE_SANS = W (12 (* Obtuse Sans *)) val PAN_SERIF_PERP_SANS = W (13 (* Prep Sans *)) val PAN_SERIF_FLARED = W (14 (* Flared *)) val PAN_SERIF_ROUNDED = W (15 (* Rounded *)) end (*------------------------------------------------------------------------------ INDEX: WeightPANOSE ------------------------------------------------------------------------------*) (*TYPE: WeightPANOSE *) local datatype WeightPANOSE = W of int in type WeightPANOSE = WeightPANOSE val WeightPANOSEE = encoding (W,fn W n => n) val PAN_ANY = W (0 (* Any *)) val PAN_NO_FIT = W (1 (* No Fit *)) val PAN_WEIGHT_VERY_LIGHT = W (2 (* Very Light *)) val PAN_WEIGHT_LIGHT = W (3 (* Light *)) val PAN_WEIGHT_THIN = W (4 (* Thin *)) val PAN_WEIGHT_BOOK = W (5 (* Book *)) val PAN_WEIGHT_MEDIUM = W (6 (* Medium *)) val PAN_WEIGHT_DEMI = W (7 (* Demi *)) val PAN_WEIGHT_BOLD = W (8 (* Bold *)) val PAN_WEIGHT_HEAVY = W (9 (* Heavy *)) val PAN_WEIGHT_BLACK = W (10 (* Black *)) val PAN_WEIGHT_NORD = W (11 (* Nord *)) end (*------------------------------------------------------------------------------ INDEX: ProportionPANOSE ------------------------------------------------------------------------------*) (*TYPE: ProportionPANOSE *) local datatype ProportionPANOSE = W of int in type ProportionPANOSE = ProportionPANOSE val ProportionPANOSEE = encoding (W,fn W n => n) val PAN_ANY = W (0 (* Any *)) val PAN_NO_FIT = W (1 (* No Fit *)) val PAN_PROP_OLD_STYLE = W (2 (* Old Style *)) val PAN_PROP_MODERN = W (3 (* Modern *)) val PAN_PROP_EVEN_WIDTH = W (4 (* Even Width *)) val PAN_PROP_EXPANDED = W (5 (* Expanded *)) val PAN_PROP_CONDENSED = W (6 (* Condensed *)) val PAN_PROP_VERY_EXPANDED = W (7 (* Very Expanded *)) val PAN_PROP_VERY_CONDENSED = W (8 (* Very Condensed *)) val PAN_PROP_MONOSPACED = W (9 (* Monospaced *)) end (*------------------------------------------------------------------------------ INDEX: ContrastPANOSE ------------------------------------------------------------------------------*) (*TYPE: ContrastPANOSE *) local datatype ContrastPANOSE = W of int in type ContrastPANOSE = ContrastPANOSE val ContrastPANOSEE = encoding (W,fn W n => n) val PAN_ANY = W (0 (* Any *)) val PAN_NO_FIT = W (1 (* No Fit *)) val PAN_CONTRAST_NONE = W (2 (* None *)) val PAN_CONTRAST_VERY_LOW = W (3 (* Very Low *)) val PAN_CONTRAST_LOW = W (4 (* Low *)) val PAN_CONTRAST_MEDIUM_LOW = W (5 (* Medium Low *)) val PAN_CONTRAST_MEDIUM = W (6 (* Medium *)) val PAN_CONTRAST_MEDIUM_HIGH = W (7 (* Mediim High *)) val PAN_CONTRAST_HIGH = W (8 (* High *)) val PAN_CONTRAST_VERY_HIGH = W (9 (* Very High *)) end (*------------------------------------------------------------------------------ INDEX: StrokeVariationPANOSE ------------------------------------------------------------------------------*) (*TYPE: StrokeVariationPANOSE *) local datatype StrokeVariationPANOSE = W of int in type StrokeVariationPANOSE = StrokeVariationPANOSE val StrokeVariationPANOSEE = encoding (W,fn W n => n) val PAN_ANY = W (0 (* Any *)) val PAN_NO_FIT = W (1 (* No Fit *)) val PAN_STROKE_GRADUAL_DIAG = W (2 (* Gradual/Diagonal *)) val PAN_STROKE_GRADUAL_TRAN = W (3 (* Gradual/Transitional *)) val PAN_STROKE_GRADUAL_VERT = W (4 (* Gradual/Vertical *)) val PAN_STROKE_GRADUAL_HORZ = W (5 (* Gradual/Horizontal *)) val PAN_STROKE_RAPID_VERT = W (6 (* Rapid/Vertical *)) val PAN_STROKE_RAPID_HORZ = W (7 (* Rapid/Horizontal *)) val PAN_STROKE_INSTANT_VERT = W (8 (* Instant/Vertical *)) end (*------------------------------------------------------------------------------ INDEX: ArmStylePANOSE ------------------------------------------------------------------------------*) (*TYPE: ArmStylePANOSE *) local datatype ArmStylePANOSE = W of int in type ArmStylePANOSE = ArmStylePANOSE val ArmStylePANOSEE = encoding (W,fn W n => n) val PAN_ANY = W (0 (* Any *)) val PAN_NO_FIT = W (1 (* No Fit *)) val PAN_STRAIGHT_ARMS_HORZ = W (2 (* Straight Arms/Horizontal *)) val PAN_STRAIGHT_ARMS_WEDGE = W (3 (* Straight Arms/Wedge *)) val PAN_STRAIGHT_ARMS_VERT = W (4 (* Straight Arms/Vertical *)) val PAN_STRAIGHT_ARMS_SINGLE_SERIF = W (5 (* Straight Arms/Single~Serif *)) val PAN_STRAIGHT_ARMS_DOUBLE_SERIF = W (6 (* Straight Arms/Double~Serif *)) val PAN_BENT_ARMS_HORZ = W (7 (* Non~Straight Arms/Horizontal *)) val PAN_BENT_ARMS_WEDGE = W (8 (* Non~Straight Arms/Wedge *)) val PAN_BENT_ARMS_VERT = W (9 (* Non~Straight Arms/Vertical *)) val PAN_BENT_ARMS_SINGLE_SERIF = W (10 (* Non~Straight Arms/Single~Serif *)) val PAN_BENT_ARMS_DOUBLE_SERIF = W (11 (* Non~Straight Arms/Double~Serif *)) end (*------------------------------------------------------------------------------ INDEX: LetterFormPANOSE ------------------------------------------------------------------------------*) (*TYPE: LetterFormPANOSE *) local datatype LetterFormPANOSE = W of int in type LetterFormPANOSE = LetterFormPANOSE val LetterFormPANOSEE = encoding (W,fn W n => n) val PAN_ANY = W (0 (* Any *)) val PAN_NO_FIT = W (1 (* No Fit *)) val PAN_LETT_NORMAL_CONTACT = W (2 (* Normal/Contact *)) val PAN_LETT_NORMAL_WEIGHTED = W (3 (* Normal/Weighted *)) val PAN_LETT_NORMAL_BOXED = W (4 (* Normal/Boxed *)) val PAN_LETT_NORMAL_FLATTENED = W (5 (* Normal/Flattened *)) val PAN_LETT_NORMAL_ROUNDED = W (6 (* Normal/Rounded *)) val PAN_LETT_NORMAL_OFF_CENTER = W (7 (* Normal/Off Center *)) val PAN_LETT_NORMAL_SQUARE = W (8 (* Normal/Square *)) val PAN_LETT_OBLIQUE_CONTACT = W (9 (* Oblique/Contact *)) val PAN_LETT_OBLIQUE_WEIGHTED = W (10 (* Oblique/Weighted *)) val PAN_LETT_OBLIQUE_BOXED = W (11 (* Oblique/Boxed *)) val PAN_LETT_OBLIQUE_FLATTENED = W (12 (* Oblique/Flattened *)) val PAN_LETT_OBLIQUE_ROUNDED = W (13 (* Oblique/Rounded *)) val PAN_LETT_OBLIQUE_OFF_CENTER = W (14 (* Oblique/Off Center *)) val PAN_LETT_OBLIQUE_SQUARE = W (15 (* Oblique/Square *)) end (*------------------------------------------------------------------------------ INDEX: MidlinePANOSE ------------------------------------------------------------------------------*) (*TYPE: MidlinePANOSE *) local datatype MidlinePANOSE = W of int in type MidlinePANOSE = MidlinePANOSE val MidlinePANOSEE = encoding (W,fn W n => n) val PAN_ANY = W (0 (* Any *)) val PAN_NO_FIT = W (1 (* No Fit *)) val PAN_MIDLINE_STANDARD_TRIMMED = W (2 (* Standard/Trimmed *)) val PAN_MIDLINE_STANDARD_POINTED = W (3 (* Standard/Pointed *)) val PAN_MIDLINE_STANDARD_SERIFED = W (4 (* Standard/Serifed *)) val PAN_MIDLINE_HIGH_TRIMMED = W (5 (* High/Trimmed *)) val PAN_MIDLINE_HIGH_POINTED = W (6 (* High/Pointed *)) val PAN_MIDLINE_HIGH_SERIFED = W (7 (* High/Serifed *)) val PAN_MIDLINE_CONSTANT_TRIMMED = W (8 (* Constant/Trimmed *)) val PAN_MIDLINE_CONSTANT_POINTED = W (9 (* Constant/Pointed *)) val PAN_MIDLINE_CONSTANT_SERIFED = W (10 (* Constant/Serifed *)) val PAN_MIDLINE_LOW_TRIMMED = W (11 (* Low/Trimmed *)) val PAN_MIDLINE_LOW_POINTED = W (12 (* Low/Pointed *)) val PAN_MIDLINE_LOW_SERIFED = W (13 (* Low/Serifed *)) end (*------------------------------------------------------------------------------ INDEX: XHeightPANOSE ------------------------------------------------------------------------------*) (*TYPE: XHeightPANOSE *) local datatype XHeightPANOSE = W of int in type XHeightPANOSE = XHeightPANOSE val XHeightPANOSEE = encoding (W,fn W n => n) val PAN_ANY = W (0 (* Any *)) val PAN_NO_FIT = W (1 (* No Fit *)) val PAN_XHEIGHT_CONSTANT_SMALL = W (2 (* Constant/Small *)) val PAN_XHEIGHT_CONSTANT_STD = W (3 (* Constant/Standard *)) val PAN_XHEIGHT_CONSTANT_LARGE = W (4 (* Constant/Large *)) val PAN_XHEIGHT_DUCKING_SMALL = W (5 (* Ducking/Small *)) val PAN_XHEIGHT_DUCKING_STD = W (6 (* Ducking/Standard *)) val PAN_XHEIGHT_DUCKING_LARGE = W (7 (* Ducking/Large *)) end (*------------------------------------------------------------------------------ INDEX: ExtLogFont ------------------------------------------------------------------------------*) (*TYPE: ExtLogFont *) local datatype ExtLogFont = W of int in type ExtLogFont = ExtLogFont val ExtLogFontE = encoding (W,fn W n => n) val ELF_VENDOR_SIZE = W (4) val ELF_VERSION = W (0) val ELF_CULTURE_LATIN = W (0) end (*------------------------------------------------------------------------------ INDEX: FontType ------------------------------------------------------------------------------*) (*TYPE: FontType *) local datatype FontType = W of int in type FontType = FontType val FontTypeE = encoding (W,fn W n => n) val RASTER_FONTTYPE = W (hex "0x0001") val DEVICE_FONTTYPE = W (hex "0x002") val TRUETYPE_FONTTYPE = W (hex "0x004") end (*------------------------------------------------------------------------------ INDEX: PaletteEntryFlag ------------------------------------------------------------------------------*) (* AnimatePalette() *) (*TYPE: PaletteEntryFlag *) local datatype PaletteEntryFlag = W of int in type PaletteEntryFlag = PaletteEntryFlag val PaletteEntryFlagE = encoding (W,fn W n => n) val PC_RESERVED = W (hex "0x01" (* palette index used for animation *)) val PC_EXPLICIT = W (hex "0x02" (* palette index is explicit to device *)) val PC_NOCOLLAPSE = W (hex "0x04" (* do not match color to system palette *)) end (*------------------------------------------------------------------------------ INDEX: BkMode ------------------------------------------------------------------------------*) (* TextOut() SetBkMode() *) (*TYPE: BkMode *) local datatype BkMode = W of int in type BkMode = BkMode val BkModeE = encoding (W,fn W n => n) val TRANSPARENT = W (1) val OPAQUE = W (2) val BKMODE_LAST = W (2) end (*------------------------------------------------------------------------------ INDEX: GraphicsMode ------------------------------------------------------------------------------*) (* SetGraphicsMode() GetGraphicsMode() *) (*TYPE: GraphicsMode *) local datatype GraphicsMode = W of int in type GraphicsMode = GraphicsMode val GraphicsModeE = encoding (W,fn W n => n) val GM_COMPATIBLE = W (1) val GM_ADVANCED = W (2) val GM_LAST = W (2) end (*------------------------------------------------------------------------------ INDEX: PointType ------------------------------------------------------------------------------*) (* PolyDraw() GetPath() *) (*TYPE: PointType *) local datatype PointType = W of int in type PointType = PointType val PointTypeE = encoding (W,fn W n => n) val PT_CLOSEFIGURE = W (hex "0x01") val PT_LINETO = W (hex "0x02") val PT_BEZIERTO = W (hex "0x04") val PT_MOVETO = W (hex "0x06") end (*------------------------------------------------------------------------------ INDEX: MapMode ------------------------------------------------------------------------------*) (* SetMapMode() GetMapMode() *) (*TYPE: MapMode *) local datatype MapMode = W of int in type MapMode = MapMode val MapModeE = encoding (W,fn W n => n) val MM_TEXT = W (1) val MM_LOMETRIC = W (2) val MM_HIMETRIC = W (3) val MM_LOENGLISH = W (4) val MM_HIENGLISH = W (5) val MM_TWIPS = W (6) val MM_ISOTROPIC = W (7) val MM_ANISOTROPIC = W (8) val MM_MIN = MM_TEXT val MM_MAX = MM_ANISOTROPIC val MM_MAX_FIXEDSCALE = MM_TWIPS end (*------------------------------------------------------------------------------ INDEX: TransMode ------------------------------------------------------------------------------*) (*TYPE: TransMode *) local datatype TransMode = W of int in type TransMode = TransMode val TransModeE = encoding (W,fn W n => n) val ABSOLUTE = W (1) val RELATIVE = W (2) end (*------------------------------------------------------------------------------ INDEX: StockObjectType ------------------------------------------------------------------------------*) (* GetStockObject() *) (*TYPE: StockObjectType *) local datatype StockObjectType = W of int in type StockObjectType = StockObjectType val StockObjectTypeE = encoding (W,fn W n => n) val WHITE_BRUSH = W (0) val LTGRAY_BRUSH = W (1) val GRAY_BRUSH = W (2) val DKGRAY_BRUSH = W (3) val BLACK_BRUSH = W (4) val NULL_BRUSH = W (5) val HOLLOW_BRUSH = NULL_BRUSH val WHITE_PEN = W (6) val BLACK_PEN = W (7) val NULL_PEN = W (8) val OEM_FIXED_FONT = W (10) val ANSI_FIXED_FONT = W (11) val ANSI_VAR_FONT = W (12) val SYSTEM_FONT = W (13) val DEVICE_DEFAULT_FONT = W (14) val DEFAULT_PALETTE = W (15) val SYSTEM_FIXED_FONT = W (16) val STOCK_LAST = W (16) val CLR_INVALID = W (hex "0xFFFFFFFF") end (*------------------------------------------------------------------------------ INDEX: BrushStyle ------------------------------------------------------------------------------*) (*TYPE: BrushStyle *) local datatype BrushStyle = W of int in type BrushStyle = BrushStyle val BrushStyleE = encoding (W,fn W n => n) val BS_SOLID = W (0) val BS_NULL = W (1) val BS_HOLLOW = BS_NULL val BS_HATCHED = W (2) val BS_PATTERN = W (3) val BS_INDEXED = W (4) val BS_DIBPATTERN = W (5) val BS_DIBPATTERNPT = W (6) val BS_PATTERN8X8 = W (7) val BS_DIBPATTERN8X8 = W (8) end (*------------------------------------------------------------------------------ INDEX: HatchStyle ------------------------------------------------------------------------------*) (*TYPE: HatchStyle *) local datatype HatchStyle = W of int in type HatchStyle = HatchStyle val HatchStyleE = encoding (W,fn W n => n) val HS_HORIZONTAL = W (0 (* ~~~~~ *)) val HS_VERTICAL = W (1 (* ||||| *)) val HS_FDIAGONAL = W (2 (* \\\\\ *)) val HS_BDIAGONAL = W (3 (* (* /// *) *)) val HS_CROSS = W (4 (* +++++ *)) val HS_DIAGCROSS = W (5 (* xxxxx *)) val HS_FDIAGONAL1 = W (6) val HS_BDIAGONAL1 = W (7) val HS_SOLID = W (8) val HS_DENSE1 = W (9) val HS_DENSE2 = W (10) val HS_DENSE3 = W (11) val HS_DENSE4 = W (12) val HS_DENSE5 = W (13) val HS_DENSE6 = W (14) val HS_DENSE7 = W (15) val HS_DENSE8 = W (16) val HS_NOSHADE = W (17) val HS_HALFTONE = W (18) val HS_SOLIDCLR = W (19) val HS_DITHEREDCLR = W (20) val HS_SOLIDTEXTCLR = W (21) val HS_DITHEREDTEXTCLR = W (22) val HS_SOLIDBKCLR = W (23) val HS_DITHEREDBKCLR = W (24) val HS_API_MAX = W (25) end (*------------------------------------------------------------------------------ INDEX: PenStyle ------------------------------------------------------------------------------*) (* Pen Styles *) (* ExtCreatePen() *) (*TYPE: PenStyle *) local datatype PenStyle = W of int in type PenStyle = PenStyle val PenStyleE = encoding (W,fn W n => n) val PS_SOLID = W (0) val PS_DASH = W (1 (* ~~~~~~~ *)) val PS_DOT = W (2 (* ....... *)) val PS_DASHDOT = W (3 (* _._._._ *)) val PS_DASHDOTDOT = W (4 (* _.._.._ *)) val PS_NULL = W (5) val PS_INSIDEFRAME = W (6) val PS_USERSTYLE = W (7) val PS_ALTERNATE = W (8) val PS_STYLE_MASK = W (hex "0x0000000F") val PS_ENDCAP_ROUND = W (hex "0x00000000") val PS_ENDCAP_SQUARE = W (hex "0x00000100") val PS_ENDCAP_FLAT = W (hex "0x00000200") val PS_ENDCAP_MASK = W (hex "0x00000F00") val PS_JOIN_ROUND = W (hex "0x00000000") val PS_JOIN_BEVEL = W (hex "0x00001000") val PS_JOIN_MITER = W (hex "0x00002000") val PS_JOIN_MASK = W (hex "0x0000F000") val PS_COSMETIC = W (hex "0x00000000") val PS_GEOMETRIC = W (hex "0x00010000") val PS_TYPE_MASK = W (hex "0x000F0000") end (*------------------------------------------------------------------------------ INDEX: ArcDirection ------------------------------------------------------------------------------*) local datatype ArcDirection = W of int in type ArcDirection = ArcDirection val ArcDirectionE = encoding (W,fn W n => n) val AD_COUNTERCLOCKWISE = W(1) val AD_CLOCKWISE = W(2) end; (*------------------------------------------------------------------------------ INDEX: DeviceItem ------------------------------------------------------------------------------*) (* GetDeviceCaps() *) (*TYPE: DeviceItem *) local datatype DeviceItem = W of int in type DeviceItem = DeviceItem val DeviceItemE = encoding (W,fn W n => n) val DRIVERVERSION = W (0 (* Device driver version *)) val TECHNOLOGY = W (2 (* Device classification *)) val HORZSIZE = W (4 (* Horizontal size in millimeters *)) val VERTSIZE = W (6 (* Vertical size in millimeters *)) val HORZRES = W (8 (* Horizontal width in pixels *)) val VERTRES = W (10 (* Vertical width in pixels *)) val BITSPIXEL = W (12 (* Number of bits per pixel *)) val PLANES = W (14 (* Number of planes *)) val NUMBRUSHES = W (16 (* Number of brushes the device has *)) val NUMPENS = W (18 (* Number of pens the device has *)) val NUMMARKERS = W (20 (* Number of markers the device has *)) val NUMFONTS = W (22 (* Number of fonts the device has *)) val NUMCOLORS = W (24 (* Number of colors the device supports *)) val PDEVICESIZE = W (26 (* Size required for device descriptor *)) val CURVECAPS = W (28 (* Curve capabilities *)) val LINECAPS = W (30 (* Line capabilities *)) val POLYGONALCAPS = W (32 (* Polygonal capabilities *)) val TEXTCAPS = W (34 (* Text capabilities *)) val CLIPCAPS = W (36 (* Clipping capabilities *)) val RASTERCAPS = W (38 (* Bitblt capabilities *)) val ASPECTX = W (40 (* Length of the X leg *)) val ASPECTY = W (42 (* Length of the Y leg *)) val ASPECTXY = W (44 (* Length of the hypotenuse *)) val LOGPIXELSX = W (88 (* Logical pixels/inch in X *)) val LOGPIXELSY = W (90 (* Logical pixels/inch in Y *)) val SIZEPALETTE = W (104 (* Number of entries in physical palette *)) val NUMRESERVED = W (106 (* Number of reserved entries in palette *)) val COLORRES = W (108 (* Actual color resolution *)) val PHYSICALWIDTH = W (110 (* Physical Width in device units *)) val PHYSICALHEIGHT = W (111 (* Physical Height in device units *)) val PHYSICALOFFSETX = W (112 (* Physical Printable Area x margin *)) val PHYSICALOFFSETY = W (113 (* Physical Printable Area y margin *)) val SCALINGFACTORX = W (114 (* Scaling factor x *)) val SCALINGFACTORY = W (115 (* Scaling factor y *)) end (*------------------------------------------------------------------------------ INDEX: DeviceTechnology ------------------------------------------------------------------------------*) (* GetDeviceCaps() *) (*TYPE: DeviceTechnology *) local datatype DeviceTechnology = W of int in type DeviceTechnology = DeviceTechnology val DeviceTechnologyE = encoding (W,fn W n => n) val DT_PLOTTER = W (0 (* Vector plotter *)) val DT_RASDISPLAY = W (1 (* Raster display *)) val DT_RASPRINTER = W (2 (* Raster printer *)) val DT_RASCAMERA = W (3 (* Raster camera *)) val DT_CHARSTREAM = W (4 (* Character~stream, PLP *)) val DT_METAFILE = W (5 (* Metafile, VDM *)) val DT_DISPFILE = W (6 (* Display~file *)) end (*------------------------------------------------------------------------------ INDEX: CurveCapability ------------------------------------------------------------------------------*) (* GetDeviceCaps() *) (*TYPE: CurveCapability *) local datatype CurveCapability = W of int in type CurveCapability = CurveCapability val CurveCapabilityE = encoding (W,fn W n => n) val CC_NONE = W (0 (* Curves not supported *)) val CC_CIRCLES = W (1 (* Can do circles *)) val CC_PIE = W (2 (* Can do pie wedges *)) val CC_CHORD = W (4 (* Can do chord arcs *)) val CC_ELLIPSES = W (8 (* Can do ellipese *)) val CC_WIDE = W (16 (* Can do wide lines *)) val CC_STYLED = W (32 (* Can do styled lines *)) val CC_WIDESTYLED = W (64 (* Can do wide styled lines *)) val CC_INTERIORS = W (128 (* Can do interiors *)) val CC_ROUNDRECT = W (256 (* *)) end (*------------------------------------------------------------------------------ INDEX: LineCapability ------------------------------------------------------------------------------*) (* Line capabilities *) (* GetDeviceCaps() *) (*TYPE: LineCapability *) local datatype LineCapability = W of int in type LineCapability = LineCapability val LineCapabilityE = encoding (W,fn W n => n) val LC_NONE = W (0 (* Lines not supported *)) val LC_POLYLINE = W (2 (* Can do polylines *)) val LC_MARKER = W (4 (* Can do markers *)) val LC_POLYMARKER = W (8 (* Can do polymarkers *)) val LC_WIDE = W (16 (* Can do wide lines *)) val LC_STYLED = W (32 (* Can do styled lines *)) val LC_WIDESTYLED = W (64 (* Can do wide styled lines *)) val LC_INTERIORS = W (128 (* Can do interiors *)) end (*------------------------------------------------------------------------------ INDEX: PolygonalCapability ------------------------------------------------------------------------------*) (* GetDeviceCaps() *) (*TYPE: PolygonalCapability *) local datatype PolygonalCapability = W of int in type PolygonalCapability = PolygonalCapability val PolygonalCapabilityE = encoding (W,fn W n => n) val PC_NONE = W (0 (* Polygonals not supported *)) val PC_POLYGON = W (1 (* Can do polygons *)) val PC_RECTANGLE = W (2 (* Can do rectangles *)) val PC_WINDPOLYGON = W (4 (* Can do winding polygons *)) val PC_TRAPEZOID = W (4 (* Can do trapezoids *)) val PC_SCANLINE = W (8 (* Can do scanlines *)) val PC_WIDE = W (16 (* Can do wide borders *)) val PC_STYLED = W (32 (* Can do styled borders *)) val PC_WIDESTYLED = W (64 (* Can do wide styled borders *)) val PC_INTERIORS = W (128 (* Can do interiors *)) end (*------------------------------------------------------------------------------ INDEX: ClippingCapability ------------------------------------------------------------------------------*) (* Polygonal capabilities *) (* GetDeviceCaps() *) (*TYPE: ClippingCapability *) local datatype ClippingCapability = W of int in type ClippingCapability = ClippingCapability val ClippingCapabilityE = encoding (W,fn W n => n) val CP_NONE = W (0 (* No clipping of output *)) val CP_RECTANGLE = W (1 (* Output clipped to rects *)) val CP_REGION = W (2 (* *)) end (*------------------------------------------------------------------------------ INDEX: TextCapability ------------------------------------------------------------------------------*) (* Text capabilities *) (* GetDeviceCaps() *) (*TYPE: TextCapability *) local datatype TextCapability = W of int in type TextCapability = TextCapability val TextCapabilityE = encoding (W,fn W n => n) val TC_OP_CHARACTER = W (hex "0x00000001" (* Can do OutputPrecision CHARACTER *)) val TC_OP_STROKE = W (hex "0x00000002" (* Can do OutputPrecision STROKE *)) val TC_CP_STROKE = W (hex "0x00000004" (* Can do ClipPrecision STROKE *)) val TC_CR_90 = W (hex "0x00000008" (* Can do CharRotAbility 90 *)) val TC_CR_ANY = W (hex "0x00000010" (* Can do CharRotAbility ANY *)) val TC_SF_X_YINDEP = W (hex "0x00000020" (* Can do ScaleFreedom X_YINDEPENDENT *)) val TC_SA_DOUBLE = W (hex "0x00000040" (* Can do ScaleAbility DOUBLE *)) val TC_SA_INTEGER = W (hex "0x00000080" (* Can do ScaleAbility INTEGER *)) val TC_SA_CONTIN = W (hex "0x00000100" (* Can do ScaleAbility CONTINUOUS *)) val TC_EA_DOUBLE = W (hex "0x00000200" (* Can do EmboldenAbility DOUBLE *)) val TC_IA_ABLE = W (hex "0x00000400" (* Can do ItalisizeAbility ABLE *)) val TC_UA_ABLE = W (hex "0x00000800" (* Can do UnderlineAbility ABLE *)) val TC_SO_ABLE = W (hex "0x00001000" (* Can do StrikeOutAbility ABLE *)) val TC_RA_ABLE = W (hex "0x00002000" (* Can do RasterFontAble ABLE *)) val TC_VA_ABLE = W (hex "0x00004000" (* Can do VectorFontAble ABLE *)) val TC_RESERVED = W (hex "0x00008000") val TC_SCROLLBLT = W (hex "0x00010000" (* do text scroll with blt *)) end (*------------------------------------------------------------------------------ INDEX: RasterCapability ------------------------------------------------------------------------------*) (* GetDeviceCaps() *) (*TYPE: RasterCapability *) local datatype RasterCapability = W of int in type RasterCapability = RasterCapability val RasterCapabilityE = encoding (W,fn W n => n) val RC_BITBLT = W (1 (* Can do standard BLT. *)) val RC_BANDING = W (2 (* Device requires banding support *)) val RC_SCALING = W (4 (* Device requires scaling support *)) val RC_BITMAP64 = W (8 (* Device can support >64K bitmap *)) val RC_GDI20_OUTPUT = W (hex "0x0010" (* has 2.0 output calls *)) val RC_GDI20_STATE = W (hex "0x0020") val RC_SAVEBITMAP = W (hex "0x0040") val RC_DI_BITMAP = W (hex "0x0080" (* supports DIB to memory *)) val RC_PALETTE = W (hex "0x0100" (* supports a palette *)) val RC_DIBTODEV = W (hex "0x0200" (* supports DIBitsToDevice *)) val RC_BIGFONT = W (hex "0x0400" (* supports >64K fonts *)) val RC_STRETCHBLT = W (hex "0x0800" (* supports StretchBlt *)) val RC_FLOODFILL = W (hex "0x1000" (* supports FloodFill *)) val RC_STRETCHDIB = W (hex "0x2000" (* supports StretchDIBits *)) val RC_OP_DX_OUTPUT = W (hex "0x4000") val RC_DEVBITS = W (hex "0x8000") end (*------------------------------------------------------------------------------ INDEX: DeviceIndependentPalette ------------------------------------------------------------------------------*) (* DIB Color Table IDs *) (* CreateDIBitmap() CreateDIBPatternBrush() CreateDIBPatternBrushPt() GetDIBits() SetDIBits() SetDIBitsToDevice() StretchDIBits() *) (*TYPE: DeviceIndependentPalette *) local datatype DeviceIndependentPalette = W of int in type DeviceIndependentPalette = DeviceIndependentPalette val DeviceIndependentPaletteE = encoding (W,fn W n => n) val DIB_RGB_COLORS = W (0 (* color table in RGBs *)) val DIB_PAL_COLORS = W (1 (* color table in palette indices *)) val DIB_PAL_INDICES = W (2 (* No color table indices into surf palette *)) val DIB_PAL_PHYSINDICES = W (2 (* No color table indices into surf palette *)) val DIB_PAL_LOGINDICES = W (4 (* No color table indices into DC palette *)) end (*------------------------------------------------------------------------------ INDEX: SystemPaletteUse ------------------------------------------------------------------------------*) (* GetSystemPaletteUse() SetSystemPaletteUse() *) (*TYPE: SystemPaletteUse *) local datatype SystemPaletteUse = W of int in type SystemPaletteUse = SystemPaletteUse val SystemPaletteUseE = encoding (W,fn W n => n) val SYSPAL_ERROR = W (0) val SYSPAL_STATIC = W (1) val SYSPAL_NOSTATIC = W (2) end (*------------------------------------------------------------------------------ INDEX: BitmapInit ------------------------------------------------------------------------------*) (* Create bitmap *) (* CreateDIBitmap() *) (*TYPE: BitmapInit *) local datatype BitmapInit = W of int in type BitmapInit = BitmapInit val BitmapInitE = encoding (W,fn W n => n) val CBM_CREATEDIB = W (hex "0x02" (* create DIB bitmap *)) val CBM_INIT = W (hex "0x04" (* initialize bitmap *)) end (*------------------------------------------------------------------------------ INDEX: FloodFillMode ------------------------------------------------------------------------------*) (* ExtFloodFill() *) (*TYPE: FloodFillMode *) local datatype FloodFillMode = W of int in type FloodFillMode = FloodFillMode val FloodFillModeE = encoding (W,fn W n => n) val FLOODFILLBORDER = W (0) val FLOODFILLSURFACE = W (1) val CCHDEVICENAME = W (32) val CCHFORMNAME = W (32) end (*------------------------------------------------------------------------------ INDEX: DeviceMode ------------------------------------------------------------------------------*) (*TYPE: DeviceMode *) local datatype DeviceMode = W of int in type DeviceMode = DeviceMode val DeviceModeE = encoding (W,fn W n => n) val DM_SPECVERSION = W (hex "0x320") val DM_ORIENTATION = W (hex "0x0000001") val DM_PAPERSIZE = W (hex "0x0000002") val DM_PAPERLENGTH = W (hex "0x0000004") val DM_PAPERWIDTH = W (hex "0x0000008") val DM_SCALE = W (hex "0x0000010") val DM_COPIES = W (hex "0x0000100") val DM_DEFAULTSOURCE = W (hex "0x0000200") val DM_PRINTQUALITY = W (hex "0x0000400") val DM_COLOR = W (hex "0x0000800") val DM_DUPLEX = W (hex "0x0001000") val DM_YRESOLUTION = W (hex "0x0002000") val DM_TTOPTION = W (hex "0x0004000") val DM_COLLATE = W (hex "0x0008000") val DM_FORMNAME = W (hex "0x0010000") end (*------------------------------------------------------------------------------ INDEX: PaperOrientation ------------------------------------------------------------------------------*) (*TYPE: PaperOrientation *) local datatype PaperOrientation = W of int in type PaperOrientation = PaperOrientation val PaperOrientationE = encoding (W,fn W n => n) val DMORIENT_PORTRAIT = W (1) val DMORIENT_LANDSCAPE = W (2) end (*------------------------------------------------------------------------------ INDEX: PaperSize ------------------------------------------------------------------------------*) (*TYPE: PaperSize *) local datatype PaperSize = W of int in type PaperSize = PaperSize val PaperSizeE = encoding (W,fn W n => n) val DMPAPER_LETTER = W (1 (* Letter 8 1/2 x 11 in *)) val DMPAPER_FIRST = DMPAPER_LETTER val DMPAPER_LETTERSMALL = W (2 (* Letter Small 8 1/2 x 11 in *)) val DMPAPER_TABLOID = W (3 (* Tabloid 11 x 17 in *)) val DMPAPER_LEDGER = W (4 (* Ledger 17 x 11 in *)) val DMPAPER_LEGAL = W (5 (* Legal 8 1/2 x 14 in *)) val DMPAPER_STATEMENT = W (6 (* Statement 5 1/2 x 8 1/2 in *)) val DMPAPER_EXECUTIVE = W (7 (* Executive 7 1/4 x 10 1/2 in *)) val DMPAPER_A3 = W (8 (* A3 297 x 420 mm *)) val DMPAPER_A4 = W (9 (* A4 210 x 297 mm *)) val DMPAPER_A4SMALL = W (10 (* A4 Small 210 x 297 mm *)) val DMPAPER_A5 = W (11 (* A5 148 x 210 mm *)) val DMPAPER_B4 = W (12 (* B4 250 x 354 *)) val DMPAPER_B5 = W (13 (* B5 182 x 257 mm *)) val DMPAPER_FOLIO = W (14 (* Folio 8 1/2 x 13 in *)) val DMPAPER_QUARTO = W (15 (* Quarto 215 x 275 mm *)) val DMPAPER_10X14 = W (16 (* 1hex "0x14" in *)) val DMPAPER_11X17 = W (17 (* 11x17 in *)) val DMPAPER_NOTE = W (18 (* Note 8 1/2 x 11 in *)) val DMPAPER_ENV_9 = W (19 (* Envelope #9 3 7/8 x 8 7/8 *)) val DMPAPER_ENV_10 = W (20 (* Envelope #10 4 1/8 x 9 1/2 *)) val DMPAPER_ENV_11 = W (21 (* Envelope #11 4 1/2 x 10 3/8 *)) val DMPAPER_ENV_12 = W (22 (* Envelope #12 4 \276 x 11 *)) val DMPAPER_ENV_14 = W (23 (* Envelope #14 5 x 11 1/2 *)) val DMPAPER_CSHEET = W (24 (* C size sheet *)) val DMPAPER_DSHEET = W (25 (* D size sheet *)) val DMPAPER_ESHEET = W (26 (* E size sheet *)) val DMPAPER_ENV_DL = W (27 (* Envelope DL 110 x 220mm *)) val DMPAPER_ENV_C5 = W (28 (* Envelope C5 162 x 229 mm *)) val DMPAPER_ENV_C3 = W (29 (* Envelope C3 324 x 458 mm *)) val DMPAPER_ENV_C4 = W (30 (* Envelope C4 229 x 324 mm *)) val DMPAPER_ENV_C6 = W (31 (* Envelope C6 114 x 162 mm *)) val DMPAPER_ENV_C65 = W (32 (* Envelope C65 114 x 229 mm *)) val DMPAPER_ENV_B4 = W (33 (* Envelope B4 250 x 353 mm *)) val DMPAPER_ENV_B5 = W (34 (* Envelope B5 176 x 250 mm *)) val DMPAPER_ENV_B6 = W (35 (* Envelope B6 176 x 125 mm *)) val DMPAPER_ENV_ITALY = W (36 (* Envelope 110 x 230 mm *)) val DMPAPER_ENV_MONARCH = W (37 (* Envelope Monarch 3.875 x 7.5 in *)) val DMPAPER_ENV_PERSONAL = W (38 (* 6 3/4 Envelope 3 5/8 x 6 1/2 in *)) val DMPAPER_FANFOLD_US = W (39 (* US Std Fanfold 14 7/8 x 11 in *)) val DMPAPER_FANFOLD_STD_GERMAN = W (40 (* German Std Fanfold 8 1/2 x 12 in *)) val DMPAPER_FANFOLD_LGL_GERMAN = W (41 (* German Legal Fanfold 8 1/2 x 13 in *)) val DMPAPER_LAST = DMPAPER_FANFOLD_LGL_GERMAN val DMPAPER_USER = W (256) val DMPAPER_FIRST = DMPAPER_LETTER end (*------------------------------------------------------------------------------ INDEX: BinMode ------------------------------------------------------------------------------*) (*TYPE: BinMode *) local datatype BinMode = W of int in type BinMode = BinMode val BinModeE = encoding (W,fn W n => n) val DMBIN_UPPER = W (1) val DMBIN_FIRST = DMBIN_UPPER val DMBIN_ONLYONE = W (1) val DMBIN_LOWER = W (2) val DMBIN_MIDDLE = W (3) val DMBIN_MANUAL = W (4) val DMBIN_ENVELOPE = W (5) val DMBIN_ENVMANUAL = W (6) val DMBIN_AUTO = W (7) val DMBIN_TRACTOR = W (8) val DMBIN_SMALLFMT = W (9) val DMBIN_LARGEFMT = W (10) val DMBIN_LARGECAPACITY = W (11) val DMBIN_CASSETTE = W (14) val DMBIN_LAST = DMBIN_CASSETTE val DMBIN_USER = W (256 (* device specific bins start here *)) end (*------------------------------------------------------------------------------ INDEX: DevModeResolution ------------------------------------------------------------------------------*) (*TYPE: DevModeResolution *) local datatype DevModeResolution = W of int in type DevModeResolution = DevModeResolution val DevModeResolutionE = encoding (W,fn W n => n) val DMRES_DRAFT = W ((~1)) val DMRES_LOW = W ((~2)) val DMRES_MEDIUM = W ((~3)) val DMRES_HIGH = W ((~4)) end (*------------------------------------------------------------------------------ INDEX: Printer specific constants - not implemented ------------------------------------------------------------------------------*) (* val DMCOLOR_MONOCHROME = 1 val DMCOLOR_COLOR = 2 val DMDUP_SIMPLEX = 1 val DMDUP_VERTICAL = 2 val DMDUP_HORIZONTAL = 3 val DMTT_BITMAP = 1 (* print TT fonts as graphics *) val DMTT_DOWNLOAD = 2 (* download TT fonts as soft fonts *) val DMTT_SUBDEV = 3 (* substitute device fonts for TT fonts *) val DMCOLLATE_FALSE = 0 val DMCOLLATE_TRUE = 1 val DM_GRAYSCALE = hex "0x00000001" val DM_INTERLACED = hex "0x00000002" *) (*------------------------------------------------------------------------------ INDEX: Constant used by RGNDATAHEADER ------------------------------------------------------------------------------*) val RDH_RECTANGLES = 1 (*------------------------------------------------------------------------------ INDEX: used by GetGlyphOutline - not implemented ------------------------------------------------------------------------------*) (* val GGO_METRICS = 0 val GGO_BITMAP = 1 val GGO_NATIVE = 2 *) (*------------------------------------------------------------------------------ INDEX: used by TTPOLYGONHEADER - not implemented ------------------------------------------------------------------------------*) (* val TT_POLYGON_TYPE = 24 val TT_PRIM_LINE = 1 val TT_PRIM_QSPLINE = 2 val TT_AVAILABLE = hex "0x0001" val TT_ENABLED = hex "0x0002" *) (*------------------------------------------------------------------------------ INDEX: DocumentMode ------------------------------------------------------------------------------*) (* DocumentProperties() *) (*TYPE: DocumentMode *) local datatype DocumentMode = W of int in type DocumentMode = DocumentMode val DocumentModeE = encoding (W,fn W n => n) val DM_UPDATE = W (1) val DM_COPY = W (2) val DM_PROMPT = W (4) val DM_MODIFY = W (8) val DM_IN_BUFFER = DM_MODIFY val DM_IN_PROMPT = DM_PROMPT val DM_OUT_BUFFER = DM_COPY val DM_OUT_DEFAULT = DM_UPDATE end (*------------------------------------------------------------------------------ INDEX: DeviceCapability ------------------------------------------------------------------------------*) (* DeviceCapabilities() *) (*TYPE: DeviceCapability *) local datatype DeviceCapability = W of int in type DeviceCapability = DeviceCapability val DeviceCapabilityE = encoding (W,fn W n => n) val DC_FIELDS = W (1) val DC_PAPERS = W (2) val DC_PAPERSIZE = W (3) val DC_MINEXTENT = W (4) val DC_MAXEXTENT = W (5) val DC_BINS = W (6) val DC_DUPLEX = W (7) val DC_SIZE = W (8) val DC_EXTRA = W (9) val DC_VERSION = W (10) val DC_DRIVER = W (11) val DC_BINNAMES = W (12) val DC_ENUMRESOLUTIONS = W (13) val DC_FILEDEPENDENCIES = W (14) val DC_TRUETYPE = W (15) val DC_PAPERNAMES = W (16) val DC_ORIENTATION = W (17) val DC_COPIES = W (18) end (*------------------------------------------------------------------------------ INDEX: ColorAdjustmentFlag ------------------------------------------------------------------------------*) local datatype ColorAdjustmentFlag = W of int in type ColorAdjustmentFlag = ColorAdjustmentFlag val ColorAdjustmentFlagE = encoding (W,fn W n => n) val CA_NEGATIVE = W (hex "0x0001") val CA_LOG_FILTER = W (hex "0x0002") end (*------------------------------------------------------------------------------ INDEX: IlluminantConstant ------------------------------------------------------------------------------*) local datatype IlluminantConstant = W of int in type IlluminantConstant = IlluminantConstant val IlluminantConstantE = encoding (W,fn W n => n) val ILLUMINANT_DEVICE_DEFAULT = W (0) val ILLUMINANT_A = W (1) val ILLUMINANT_B = W (2) val ILLUMINANT_C = W (3) val ILLUMINANT_D50 = W (4) val ILLUMINANT_D55 = W (5) val ILLUMINANT_D65 = W (6) val ILLUMINANT_D75 = W (7) val ILLUMINANT_F2 = W (8) val ILLUMINANT_MAX_INDEX = ILLUMINANT_F2 val ILLUMINANT_TUNGSTEN = ILLUMINANT_A val ILLUMINANT_DAYLIGHT = ILLUMINANT_C val ILLUMINANT_FLUORESCENT = ILLUMINANT_F2 val ILLUMINANT_NTSC = ILLUMINANT_C end (*------------------------------------------------------------------------------ INDEX: Constants ------------------------------------------------------------------------------*) val RGB_GAMMA_MIN = 02500 val RGB_GAMMA_MAX = 65000 val REFERENCE_WHITE_MIN = 6000 val REFERENCE_WHITE_MAX = 10000 val REFERENCE_BLACK_MIN = 0 val REFERENCE_BLACK_MAX = 4000 val COLOR_ADJ_MIN = ~100 val COLOR_ADJ_MAX = 100 val FONTMAPPER_MAX = 10 (* Enhanced metafiles - not implemented *) (* val ENHMETA_SIGNATURE = hex "0x464D4520" val ENHMETA_STOCK_OBJECT = hex "0x80000000" val EMR_HEADER = 1 val EMR_POLYBEZIER = 2 val EMR_POLYGON = 3 val EMR_POLYLINE = 4 val EMR_POLYBEZIERTO = 5 val EMR_POLYLINETO = 6 val EMR_POLYPOLYLINE = 7 val EMR_POLYPOLYGON = 8 val EMR_SETWINDOWEXTEX = 9 val EMR_SETWINDOWORGEX = 10 val EMR_SETVIEWPORTEXTEX = 11 val EMR_SETVIEWPORTORGEX = 12 val EMR_SETBRUSHORGEX = 13 val EMR_EOF = 14 val EMR_SETPIXELV = 15 val EMR_SETMAPPERFLAGS = 16 val EMR_SETMAPMODE = 17 val EMR_SETBKMODE = 18 val EMR_SETPOLYFILLMODE = 19 val EMR_SETROP2 = 20 val EMR_SETSTRETCHBLTMODE = 21 val EMR_SETTEXTALIGN = 22 val EMR_SETCOLORADJUSTMENT = 23 val EMR_SETTEXTCOLOR = 24 val EMR_SETBKCOLOR = 25 val EMR_OFFSETCLIPRGN = 26 val EMR_MOVETOEX = 27 val EMR_SETMETARGN = 28 val EMR_EXCLUDECLIPRECT = 29 val EMR_INTERSECTCLIPRECT = 30 val EMR_SCALEVIEWPORTEXTEX = 31 val EMR_SCALEWINDOWEXTEX = 32 val EMR_SAVEDC = 33 val EMR_RESTOREDC = 34 val EMR_SETWORLDTRANSFORM = 35 val EMR_MODIFYWORLDTRANSFORM = 36 val EMR_SELECTOBJECT = 37 val EMR_CREATEPEN = 38 val EMR_CREATEBRUSHINDIRECT = 39 val EMR_DELETEOBJECT = 40 val EMR_ANGLEARC = 41 val EMR_ELLIPSE = 42 val EMR_RECTANGLE = 43 val EMR_ROUNDRECT = 44 val EMR_ARC = 45 val EMR_CHORD = 46 val EMR_PIE = 47 val EMR_SELECTPALETTE = 48 val EMR_CREATEPALETTE = 49 val EMR_SETPALETTEENTRIES = 50 val EMR_RESIZEPALETTE = 51 val EMR_REALIZEPALETTE = 52 val EMR_EXTFLOODFILL = 53 val EMR_LINETO = 54 val EMR_ARCTO = 55 val EMR_POLYDRAW = 56 val EMR_SETARCDIRECTION = 57 val EMR_SETMITERLIMIT = 58 val EMR_BEGINPATH = 59 val EMR_ENDPATH = 60 val EMR_CLOSEFIGURE = 61 val EMR_FILLPATH = 62 val EMR_STROKEANDFILLPATH = 63 val EMR_STROKEPATH = 64 val EMR_FLATTENPATH = 65 val EMR_WIDENPATH = 66 val EMR_SELECTCLIPPATH = 67 val EMR_ABORTPATH = 68 val EMR_GDICOMMENT = 70 val EMR_FILLRGN = 71 val EMR_FRAMERGN = 72 val EMR_INVERTRGN = 73 val EMR_PAINTRGN = 74 val EMR_EXTSELECTCLIPRGN = 75 val EMR_BITBLT = 76 val EMR_STRETCHBLT = 77 val EMR_MASKBLT = 78 val EMR_PLGBLT = 79 val EMR_SETDIBITSTODEVICE = 80 val EMR_STRETCHDIBITS = 81 val EMR_EXTCREATEFONTINDIRECTW = 82 val EMR_EXTTEXTOUTA = 83 val EMR_EXTTEXTOUTW = 84 val EMR_POLYBEZIER16 = 85 val EMR_POLYGON16 = 86 val EMR_POLYLINE16 = 87 val EMR_POLYBEZIERTO16 = 88 val EMR_POLYLINETO16 = 89 val EMR_POLYPOLYLINE16 = 90 val EMR_POLYPOLYGON16 = 91 val EMR_POLYDRAW16 = 92 val EMR_CREATEMONOBRUSH = 93 val EMR_CREATEDIBPATTERNBRUSHPT = 94 val EMR_EXTCREATEPEN = 95 val EMR_POLYTEXTOUTA = 96 val EMR_POLYTEXTOUTW = 97 val EMR_MIN = 1 val EMR_MAX = 97 *) (******************************************* * * CONST for winuser (grouped) * *******************************************) (*------------------------------------------------------------------------------ INDEX: ResourceType ------------------------------------------------------------------------------*) (* LookupIconFromDirectory() EnumResourceLanguages() EnumResourceNames() FindResource() FindResourceEx() UpdateResource() *) (*TYPE: ResourceType *) local datatype ResourceType = W of int in type ResourceType = ResourceType val ResourceTypeE = encoding (W,fn W n => n) val RT_CURSOR = W (MAKEINTRESOURCE(1)) val RT_BITMAP = W (MAKEINTRESOURCE(2)) val RT_ICON = W (MAKEINTRESOURCE(3)) val RT_MENU = W (MAKEINTRESOURCE(4)) val RT_DIALOG = W (MAKEINTRESOURCE(5)) val RT_STRING = W (MAKEINTRESOURCE(6)) val RT_FONTDIR = W (MAKEINTRESOURCE(7)) val RT_FONT = W (MAKEINTRESOURCE(8)) val RT_ACCELERATOR = W (MAKEINTRESOURCE(9)) val RT_RCDATA = W (MAKEINTRESOURCE(10)) val RT_MESSAGETABLE = W (MAKEINTRESOURCE(11)) val RT_GROUP_CURSOR = addLE ResourceTypeE [RT_CURSOR,W DIFFERENCE] val RT_GROUP_ICON = addLE ResourceTypeE [RT_ICON,W DIFFERENCE] val RT_VERSION = W (MAKEINTRESOURCE(16)) val RT_DLGINCLUDE = W (MAKEINTRESOURCE(17)) end (*------------------------------------------------------------------------------ INDEX: ScrollBarType ------------------------------------------------------------------------------*) (* Scroll Bar *) (*TYPE: ScrollBarType *) local datatype ScrollBarType = W of int in type ScrollBarType = ScrollBarType val ScrollBarTypeE = encoding (W,fn W n => n) val SB_HORZ = W (0) val SB_VERT = W (1) val SB_CTL = W (2) val SB_BOTH = W (3) val SB_LINEUP = W (0) val SB_LINELEFT = W (0) val SB_LINEDOWN = W (1) val SB_LINERIGHT = W (1) val SB_PAGEUP = W (2) val SB_PAGELEFT = W (2) val SB_PAGEDOWN = W (3) val SB_PAGERIGHT = W (3) val SB_THUMBPOSITION = W (4) val SB_THUMBTRACK = W (5) val SB_TOP = W (6) val SB_LEFT = W (6) val SB_BOTTOM = W (7) val SB_RIGHT = W (7) val SB_ENDSCROLL = W (8) end (*------------------------------------------------------------------------------ INDEX: ShowWindowMode ------------------------------------------------------------------------------*) (* Scroll messages *) (* ShowWindow() *) (*TYPE: ShowWindowMode *) local datatype ShowWindowMode = W of int in type ShowWindowMode = ShowWindowMode val ShowWindowModeE = encoding (W,fn W n => n) val SW_HIDE = W (0) val SW_SHOWNORMAL = W (1) val SW_NORMAL = W (1) val SW_SHOWMINIMIZED = W (2) val SW_SHOWMAXIMIZED = W (3) val SW_MAXIMIZE = W (3) val SW_SHOWNOACTIVATE = W (4) val SW_SHOW = W (5) val SW_MINIMIZE = W (6) val SW_SHOWMINNOACTIVE = W (7) val SW_SHOWNA = W (8) val SW_RESTORE = W (9) val SW_SHOWDEFAULT = W (10) val SW_MAX = W (10) val HIDE_WINDOW = W (0) val SHOW_OPENWINDOW = W (1) val SHOW_ICONWINDOW = W (2) val SHOW_FULLSCREEN = W (3) val SHOW_OPENNOACTIVATE = W (4) val SW_PARENTCLOSING = W (1) val SW_OTHERZOOM = W (2) val SW_PARENTOPENING = W (3) val SW_OTHERUNZOOM = W (4) end (*------------------------------------------------------------------------------ INDEX: KeyFunction ------------------------------------------------------------------------------*) (*TYPE: KeyFunction *) local datatype KeyFunction = W of int in type KeyFunction = KeyFunction val KeyFunctionE = encoding (W,fn W n => n) val KF_EXTENDED = W (hex "0x0100") val KF_DLGMODE = W (hex "0x0800") val KF_MENUMODE = W (hex "0x1000") val KF_ALTDOWN = W (hex "0x2000") val KF_REPEAT = W (hex "0x4000") val KF_UP = W (hex "0x8000") end (*------------------------------------------------------------------------------ INDEX: VirtualKey ------------------------------------------------------------------------------*) (* Virtual Keys *) (*TYPE: VirtualKey *) local datatype VirtualKey = W of int in type VirtualKey = VirtualKey val VirtualKeyE = encoding (W,fn W n => n) val VK_LBUTTON = W (hex "0x01") val VK_RBUTTON = W (hex "0x02") val VK_CANCEL = W (hex "0x03") val VK_MBUTTON = W (hex "0x04" (* NOT contiguous with L & RBUTTON *)) val VK_BACK = W (hex "0x08") val VK_TAB = W (hex "0x09") val VK_CLEAR = W (hex "0x0C") val VK_RETURN = W (hex "0x0D") val VK_SHIFT = W (hex "0x10") val VK_CONTROL = W (hex "0x11") val VK_MENU = W (hex "0x12") val VK_PAUSE = W (hex "0x13") val VK_CAPITAL = W (hex "0x14") val VK_ESCAPE = W (hex "0x1B") val VK_SPACE = W (hex "0x20") val VK_PRIOR = W (hex "0x21") val VK_NEXT = W (hex "0x22") val VK_END = W (hex "0x23") val VK_HOME = W (hex "0x24") val VK_LEFT = W (hex "0x25") val VK_UP = W (hex "0x26") val VK_RIGHT = W (hex "0x27") val VK_DOWN = W (hex "0x28") val VK_SELECT = W (hex "0x29") val VK_PRINT = W (hex "0x2A") val VK_EXECUTE = W (hex "0x2B") val VK_SNAPSHOT = W (hex "0x2C") val VK_INSERT = W (hex "0x2D") val VK_DELETE = W (hex "0x2E") val VK_HELP = W (hex "0x2F") val VK_NUMPAD0 = W (hex "0x60") val VK_NUMPAD1 = W (hex "0x61") val VK_NUMPAD2 = W (hex "0x62") val VK_NUMPAD3 = W (hex "0x63") val VK_NUMPAD4 = W (hex "0x64") val VK_NUMPAD5 = W (hex "0x65") val VK_NUMPAD6 = W (hex "0x66") val VK_NUMPAD7 = W (hex "0x67") val VK_NUMPAD8 = W (hex "0x68") val VK_NUMPAD9 = W (hex "0x69") val VK_MULTIPLY = W (hex "0x6A") val VK_ADD = W (hex "0x6B") val VK_SEPARATOR = W (hex "0x6C") val VK_SUBTRACT = W (hex "0x6D") val VK_DECIMAL = W (hex "0x6E") val VK_DIVIDE = W (hex "0x6F") val VK_F1 = W (hex "0x70") val VK_F2 = W (hex "0x71") val VK_F3 = W (hex "0x72") val VK_F4 = W (hex "0x73") val VK_F5 = W (hex "0x74") val VK_F6 = W (hex "0x75") val VK_F7 = W (hex "0x76") val VK_F8 = W (hex "0x77") val VK_F9 = W (hex "0x78") val VK_F10 = W (hex "0x79") val VK_F11 = W (hex "0x7A") val VK_F12 = W (hex "0x7B") val VK_F13 = W (hex "0x7C") val VK_F14 = W (hex "0x7D") val VK_F15 = W (hex "0x7E") val VK_F16 = W (hex "0x7F") val VK_F17 = W (hex "0x80") val VK_F18 = W (hex "0x81") val VK_F19 = W (hex "0x82") val VK_F20 = W (hex "0x83") val VK_F21 = W (hex "0x84") val VK_F22 = W (hex "0x85") val VK_F23 = W (hex "0x86") val VK_F24 = W (hex "0x87") val VK_NUMLOCK = W (hex "0x90") val VK_SCROLL = W (hex "0x91") val VK_LSHIFT = W (hex "0xA0") val VK_RSHIFT = W (hex "0xA1") val VK_LCONTROL = W (hex "0xA2") val VK_RCONTROL = W (hex "0xA3") val VK_LMENU = W (hex "0xA4") val VK_RMENU = W (hex "0xA5") val VK_ATTN = W (hex "0xF6") val VK_CRSEL = W (hex "0xF7") val VK_EXSEL = W (hex "0xF8") val VK_EREOF = W (hex "0xF9") val VK_PLAY = W (hex "0xFA") val VK_ZOOM = W (hex "0xFB") val VK_NONAME = W (hex "0xFC") val VK_PA1 = W (hex "0xFD") val VK_OEM_CLEAR = W (hex "0xFE") end (*------------------------------------------------------------------------------ INDEX: WindowHook ------------------------------------------------------------------------------*) (* Hooks and other procs *) (*TYPE: WindowHook *) local datatype WindowHook = W of int in type WindowHook = WindowHook val WindowHookE = encoding (W,fn W n => n) val WH_MIN = W ((~1)) val WH_MSGFILTER = W ((~1)) val WH_JOURNALRECORD = W (0) val WH_JOURNALPLAYBACK = W (1) val WH_KEYBOARD = W (2) val WH_GETMESSAGE = W (3) val WH_CALLWNDPROC = W (4) val WH_CBT = W (5) val WH_SYSMSGFILTER = W (6) val WH_MOUSE = W (7) val WH_HARDWARE = W (8) val WH_DEBUG = W (9) val WH_SHELL = W (10) val WH_FOREGROUNDIDLE = W (11) val WH_MAX = W (11) end (*------------------------------------------------------------------------------ INDEX: HookCode ------------------------------------------------------------------------------*) (*TYPE: HookCode *) local datatype HookCode = W of int in type HookCode = HookCode val HookCodeE = encoding (W,fn W n => n) val HC_ACTION = W (0) val HC_GETNEXT = W (1) val HC_SKIP = W (2) val HC_NOREMOVE = W (3) val HC_NOREM = HC_NOREMOVE val HC_SYSMODALON = W (4) val HC_SYSMODALOFF = W (5) end (*------------------------------------------------------------------------------ INDEX: HookProcedureCode ------------------------------------------------------------------------------*) (* Callback proc *) (*TYPE: HookProcedureCode *) local datatype HookProcedureCode = W of int in type HookProcedureCode = HookProcedureCode val HookProcedureCodeE = encoding (W,fn W n => n) val HCBT_MOVESIZE = W (0) val HCBT_MINMAX = W (1) val HCBT_QS = W (2) val HCBT_CREATEWND = W (3) val HCBT_DESTROYWND = W (4) val HCBT_ACTIVATE = W (5) val HCBT_CLICKSKIPPED = W (6) val HCBT_KEYSKIPPED = W (7) val HCBT_SYSCOMMAND = W (8) val HCBT_SETFOCUS = W (9) end (*------------------------------------------------------------------------------ INDEX: InputEventType ------------------------------------------------------------------------------*) (*TYPE: InputEventType *) local datatype InputEventType = W of int in type InputEventType = InputEventType val InputEventTypeE = encoding (W,fn W n => n) val MSGF_DIALOGBOX = W (0) val MSGF_MESSAGEBOX = W (1) val MSGF_MENU = W (2) val MSGF_MOVE = W (3) val MSGF_SIZE = W (4) val MSGF_SCROLLBAR = W (5) val MSGF_NEXTWINDOW = W (6) val MSGF_MAINLOOP = W (8) val MSGF_MAX = W (8) val MSGF_USER = W (4096) end (*------------------------------------------------------------------------------ INDEX: KeyLayoutFlag ------------------------------------------------------------------------------*) (* LoadKeyboardLayout() ActivateKeyboardLayout() *) (*TYPE: KeyLayoutFlag *) local datatype KeyLayoutFlag = W of int in type KeyLayoutFlag = KeyLayoutFlag val KeyLayoutFlagE = encoding (W,fn W n => n) val KLF_ACTIVATE = W (hex "0x00000001") val KLF_SUBSTITUTE_OK = W (hex "0x00000002") val KLF_UNLOADPREVIOUS = W (hex "0x00000004") val KLF_REORDER = W (hex "0x00000008") val KL_NAMELENGTH = W (9) end (*------------------------------------------------------------------------------ INDEX: DesktopOperation ------------------------------------------------------------------------------*) (*TYPE: DesktopOperation *) local datatype DesktopOperation = W of int in type DesktopOperation = DesktopOperation val DesktopOperationE = encoding (W,fn W n => n) val DESKTOP_READOBJECTS = W (hex "0x0001") val DESKTOP_CREATEWINDOW = W (hex "0x0002") val DESKTOP_CREATEMENU = W (hex "0x0004") val DESKTOP_HOOKCONTROL = W (hex "0x0008") val DESKTOP_JOURNALRECORD = W (hex "0x0010") val DESKTOP_JOURNALPLAYBACK = W (hex "0x0020") val DESKTOP_ENUMERATE = W (hex "0x0040") val DESKTOP_WRITEOBJECTS = W (hex "0x0080") end (*------------------------------------------------------------------------------ INDEX: WindowStationAccess ------------------------------------------------------------------------------*) (*TYPE: WindowStationAccess *) local datatype WindowStationAccess = W of int in type WindowStationAccess = WindowStationAccess val WindowStationAccessE = encoding (W,fn W n => n) val WINSTA_ENUMDESKTOPS = W (hex "0x0001") val WINSTA_READATTRIBUTES = W (hex "0x0002") val WINSTA_ACCESSCLIPBOARD = W (hex "0x0004") val WINSTA_CREATEDESKTOP = W (hex "0x0008") val WINSTA_WRITEATTRIBUTES = W (hex "0x0010") val WINSTA_ACCESSGLOBALATOMS = W (hex "0x0020") val WINSTA_EXITWINDOWS = W (hex "0x0040") val WINSTA_ENUMERATE = W (hex "0x0100") val WINSTA_READSCREEN = W (hex "0x0200") end (*------------------------------------------------------------------------------ INDEX: GetWindowLongParam ------------------------------------------------------------------------------*) (* GetWindowLong() SetWindowLong() *) (*TYPE: GetWindowLongParam *) local datatype GetWindowLongParam = W of int in type GetWindowLongParam = GetWindowLongParam val GetWindowLongParamE = encoding (W,fn W n => n) val GWL_WNDPROC = W ((~4)) val GWL_HINSTANCE = W ((~6)) val GWL_HWNDPARENT = W ((~8)) val GWL_STYLE = W ((~16)) val GWL_EXSTYLE = W ((~20)) val GWL_USERDATA = W ((~21)) val GWL_ID = W ((~12)) end (*------------------------------------------------------------------------------ INDEX: GetWindowLongValue ------------------------------------------------------------------------------*) (* GetWindowLong() SetWindowLong() *) (*TYPE: GetWindowLongValue *) local datatype GetWindowLongValue = W of int in type GetWindowLongValue = GetWindowLongValue val GetWindowLongValueE = encoding (W,fn W n => n) val GCL_MENUNAME = W ((~8)) val GCL_HBRBACKGROUND = W ((~10)) val GCL_HCURSOR = W ((~12)) val GCL_HICON = W ((~14)) val GCL_HMODULE = W ((~16)) val GCL_CBWNDEXTRA = W ((~18)) val GCL_CBCLSEXTRA = W ((~20)) val GCL_WNDPROC = W ((~24)) val GCL_STYLE = W ((~26)) val GCW_ATOM = W ((~32)) end (*------------------------------------------------------------------------------ INDEX: WindowActivationState ------------------------------------------------------------------------------*) (* SetActiveWindow() *) (*TYPE: WindowActivationState *) local datatype WindowActivationState = W of int in type WindowActivationState = WindowActivationState val WindowActivationStateE = encoding (W,fn W n => n) val WA_INACTIVE = W (0) val WA_ACTIVE = W (1) val WA_CLICKACTIVE = W (2) end (*------------------------------------------------------------------------------ INDEX: PowerState ------------------------------------------------------------------------------*) (* Power *) (*TYPE: PowerState *) local datatype PowerState = W of int in type PowerState = PowerState val PowerStateE = encoding (W,fn W n => n) val PWR_OK = W (1) val PWR_FAIL = W ((~1)) val PWR_SUSPENDREQUEST = W (1) val PWR_SUSPENDRESUME = W (2) val PWR_CRITICALRESUME = W (3) end (*------------------------------------------------------------------------------ INDEX: WindowMessage ------------------------------------------------------------------------------*) (* Window Messages *) (*TYPE: WindowMessage *) local datatype WindowMessage = W of int in type WindowMessage = WindowMessage val WindowMessageE = encoding (W,fn W n => n) val WM_NULL = W (hex "0x0000") val WM_CREATE = W (hex "0x0001") val WM_DESTROY = W (hex "0x0002") val WM_MOVE = W (hex "0x0003") val WM_SIZE = W (hex "0x0005") val WM_ACTIVATE = W (hex "0x0006") val WM_SETFOCUS = W (hex "0x0007") val WM_KILLFOCUS = W (hex "0x0008") val WM_ENABLE = W (hex "0x000A") val WM_SETREDRAW = W (hex "0x000B") val WM_SETTEXT = W (hex "0x000C") val WM_GETTEXT = W (hex "0x000D") val WM_GETTEXTLENGTH = W (hex "0x000E") val WM_PAINT = W (hex "0x000F") val WM_CLOSE = W (hex "0x0010") val WM_QUERYENDSESSION = W (hex "0x0011") val WM_QUIT = W (hex "0x0012") val WM_QUERYOPEN = W (hex "0x0013") val WM_ERASEBKGND = W (hex "0x0014") val WM_SYSCOLORCHANGE = W (hex "0x0015") val WM_ENDSESSION = W (hex "0x0016") val WM_SHOWWINDOW = W (hex "0x0018") val WM_WININICHANGE = W (hex "0x001A") val WM_DEVMODECHANGE = W (hex "0x001B") val WM_ACTIVATEAPP = W (hex "0x001C") val WM_FONTCHANGE = W (hex "0x001D") val WM_TIMECHANGE = W (hex "0x001E") val WM_CANCELMODE = W (hex "0x001F") val WM_SETCURSOR = W (hex "0x0020") val WM_MOUSEACTIVATE = W (hex "0x0021") val WM_CHILDACTIVATE = W (hex "0x0022") val WM_QUEUESYNC = W (hex "0x0023") val WM_GETMINMAXINFO = W (hex "0x0024") val WM_PAINTICON = W (hex "0x0026") val WM_ICONERASEBKGND = W (hex "0x0027") val WM_NEXTDLGCTL = W (hex "0x0028") val WM_SPOOLERSTATUS = W (hex "0x002A") val WM_DRAWITEM = W (hex "0x002B") val WM_MEASUREITEM = W (hex "0x002C") val WM_DELETEITEM = W (hex "0x002D") val WM_VKEYTOITEM = W (hex "0x002E") val WM_CHARTOITEM = W (hex "0x002F") val WM_SETFONT = W (hex "0x0030") val WM_GETFONT = W (hex "0x0031") val WM_SETHOTKEY = W (hex "0x0032") val WM_GETHOTKEY = W (hex "0x0033") val WM_QUERYDRAGICON = W (hex "0x0037") val WM_COMPAREITEM = W (hex "0x0039") val WM_COMPACTING = W (hex "0x0041") val WM_OTHERWINDOWCREATED = W (hex "0x0042" (* no longer suported *)) val WM_OTHERWINDOWDESTROYED = W (hex "0x0043" (* no longer suported *)) val WM_COMMNOTIFY = W (hex "0x0044" (* no longer suported *)) val WM_WINDOWPOSCHANGING = W (hex "0x0046") val WM_WINDOWPOSCHANGED = W (hex "0x0047") val WM_POWER = W (hex "0x0048") val WM_COPYDATA = W (hex "0x004A") val WM_CANCELJOURNAL = W (hex "0x004B") val WM_NCCREATE = W (hex "0x0081") val WM_NCDESTROY = W (hex "0x0082") val WM_NCCALCSIZE = W (hex "0x0083") val WM_NCHITTEST = W (hex "0x0084") val WM_NCPAINT = W (hex "0x0085") val WM_NCACTIVATE = W (hex "0x0086") val WM_GETDLGCODE = W (hex "0x0087") val WM_NCMOUSEMOVE = W (hex "0x00A0") val WM_NCLBUTTONDOWN = W (hex "0x00A1") val WM_NCLBUTTONUP = W (hex "0x00A2") val WM_NCLBUTTONDBLCLK = W (hex "0x00A3") val WM_NCRBUTTONDOWN = W (hex "0x00A4") val WM_NCRBUTTONUP = W (hex "0x00A5") val WM_NCRBUTTONDBLCLK = W (hex "0x00A6") val WM_NCMBUTTONDOWN = W (hex "0x00A7") val WM_NCMBUTTONUP = W (hex "0x00A8") val WM_NCMBUTTONDBLCLK = W (hex "0x00A9") val WM_KEYFIRST = W (hex "0x0100") val WM_KEYDOWN = W (hex "0x0100") val WM_KEYUP = W (hex "0x0101") val WM_CHAR = W (hex "0x0102") val WM_DEADCHAR = W (hex "0x0103") val WM_SYSKEYDOWN = W (hex "0x0104") val WM_SYSKEYUP = W (hex "0x0105") val WM_SYSCHAR = W (hex "0x0106") val WM_SYSDEADCHAR = W (hex "0x0107") val WM_KEYLAST = W (hex "0x0108") val WM_INITDIALOG = W (hex "0x0110") val WM_COMMAND = W (hex "0x0111") val WM_SYSCOMMAND = W (hex "0x0112") val WM_TIMER = W (hex "0x0113") val WM_HSCROLL = W (hex "0x0114") val WM_VSCROLL = W (hex "0x0115") val WM_INITMENU = W (hex "0x0116") val WM_INITMENUPOPUP = W (hex "0x0117") val WM_MENUSELECT = W (hex "0x011F") val WM_MENUCHAR = W (hex "0x0120") val WM_ENTERIDLE = W (hex "0x0121") val WM_CTLCOLORMSGBOX = W (hex "0x0132") val WM_CTLCOLOREDIT = W (hex "0x0133") val WM_CTLCOLORLISTBOX = W (hex "0x0134") val WM_CTLCOLORBTN = W (hex "0x0135") val WM_CTLCOLORDLG = W (hex "0x0136") val WM_CTLCOLORSCROLLBAR = W (hex "0x0137") val WM_CTLCOLORSTATIC = W (hex "0x0138") val WM_MOUSEFIRST = W (hex "0x0200") val WM_MOUSEMOVE = W (hex "0x0200") val WM_LBUTTONDOWN = W (hex "0x0201") val WM_LBUTTONUP = W (hex "0x0202") val WM_LBUTTONDBLCLK = W (hex "0x0203") val WM_RBUTTONDOWN = W (hex "0x0204") val WM_RBUTTONUP = W (hex "0x0205") val WM_RBUTTONDBLCLK = W (hex "0x0206") val WM_MBUTTONDOWN = W (hex "0x0207") val WM_MBUTTONUP = W (hex "0x0208") val WM_MBUTTONDBLCLK = W (hex "0x0209") val WM_MOUSELAST = W (hex "0x0209") val WM_PARENTNOTIFY = W (hex "0x0210") val WM_ENTERMENULOOP = W (hex "0x0211") val WM_EXITMENULOOP = W (hex "0x0212") val WM_MDICREATE = W (hex "0x0220") val WM_MDIDESTROY = W (hex "0x0221") val WM_MDIACTIVATE = W (hex "0x0222") val WM_MDIRESTORE = W (hex "0x0223") val WM_MDINEXT = W (hex "0x0224") val WM_MDIMAXIMIZE = W (hex "0x0225") val WM_MDITILE = W (hex "0x0226") val WM_MDICASCADE = W (hex "0x0227") val WM_MDIICONARRANGE = W (hex "0x0228") val WM_MDIGETACTIVE = W (hex "0x0229") val WM_MDISETMENU = W (hex "0x0230") val WM_DROPFILES = W (hex "0x0233") val WM_MDIREFRESHMENU = W (hex "0x0234") val WM_CUT = W (hex "0x0300") val WM_COPY = W (hex "0x0301") val WM_PASTE = W (hex "0x0302") val WM_CLEAR = W (hex "0x0303") val WM_UNDO = W (hex "0x0304") val WM_RENDERFORMAT = W (hex "0x0305") val WM_RENDERALLFORMATS = W (hex "0x0306") val WM_DESTROYCLIPBOARD = W (hex "0x0307") val WM_DRAWCLIPBOARD = W (hex "0x0308") val WM_PAINTCLIPBOARD = W (hex "0x0309") val WM_VSCROLLCLIPBOARD = W (hex "0x030A") val WM_SIZECLIPBOARD = W (hex "0x030B") val WM_ASKCBFORMATNAME = W (hex "0x030C") val WM_CHANGECBCHAIN = W (hex "0x030D") val WM_HSCROLLCLIPBOARD = W (hex "0x030E") val WM_QUERYNEWPALETTE = W (hex "0x030F") val WM_PALETTEISCHANGING = W (hex "0x0310") val WM_PALETTECHANGED = W (hex "0x0311") val WM_HOTKEY = W (hex "0x0312") val WM_PENWINFIRST = W (hex "0x0380") val WM_PENWINLAST = W (hex "0x038F") val WM_USER = W (hex "0x0400") end (*------------------------------------------------------------------------------ INDEX: HitTest ------------------------------------------------------------------------------*) (* WM_NCHITTEST system message *) (*TYPE: HitTest *) local datatype HitTest = W of int in type HitTest = HitTest val HitTestE = encoding (W,fn W n => n) val HTERROR = W ((~2)) val HTTRANSPARENT = W ((~1)) val HTNOWHERE = W (0) val HTCLIENT = W (1) val HTCAPTION = W (2) val HTSYSMENU = W (3) val HTGROWBOX = W (4) val HTSIZE = HTGROWBOX val HTMENU = W (5) val HTHSCROLL = W (6) val HTVSCROLL = W (7) val HTMINBUTTON = W (8) val HTMAXBUTTON = W (9) val HTLEFT = W (10) val HTRIGHT = W (11) val HTTOP = W (12) val HTTOPLEFT = W (13) val HTTOPRIGHT = W (14) val HTBOTTOM = W (15) val HTBOTTOMLEFT = W (16) val HTBOTTOMRIGHT = W (17) val HTBORDER = W (18) val HTREDUCE = HTMINBUTTON val HTZOOM = HTMAXBUTTON val HTSIZEFIRST = HTLEFT val HTSIZELAST = HTBOTTOMRIGHT end (*------------------------------------------------------------------------------ INDEX: SendMessageTimeOut ------------------------------------------------------------------------------*) (*TYPE: SendMessageTimeOut *) local datatype SendMessageTimeOut = W of int in type SendMessageTimeOut = SendMessageTimeOut val SendMessageTimeOutE = encoding (W,fn W n => n) val SMTO_NORMAL = W (hex "0x0000") val SMTO_BLOCK = W (hex "0x0001") val SMTO_ABORTIFHUNG = W (hex "0x0002") end (*------------------------------------------------------------------------------ INDEX: MessageActivateFlag ------------------------------------------------------------------------------*) (* WM_MOUSEACTVATE message *) (*TYPE: MessageActivateFlag *) local datatype MessageActivateFlag = W of int in type MessageActivateFlag = MessageActivateFlag val MessageActivateFlagE = encoding (W,fn W n => n) val MA_ACTIVATE = W (1) val MA_ACTIVATEANDEAT = W (2) val MA_NOACTIVATE = W (3) val MA_NOACTIVATEANDEAT = W (4) end (*------------------------------------------------------------------------------ INDEX: SizeFlag ------------------------------------------------------------------------------*) (* WM_SIZE message *) (*TYPE: SizeFlag *) local datatype SizeFlag = W of int in type SizeFlag = SizeFlag val SizeFlagE = encoding (W,fn W n => n) val SIZE_RESTORED = W (0) val SIZE_MINIMIZED = W (1) val SIZE_MAXIMIZED = W (2) val SIZE_MAXSHOW = W (3) val SIZE_MAXHIDE = W (4) val SIZENORMAL = SIZE_RESTORED val SIZEICONIC = SIZE_MINIMIZED val SIZEFULLSCREEN = SIZE_MAXIMIZED val SIZEZOOMSHOW = SIZE_MAXSHOW val SIZEZOOMHIDE = SIZE_MAXHIDE end (*------------------------------------------------------------------------------ INDEX: WindowAttribute ------------------------------------------------------------------------------*) (*TYPE: WindowAttribute *) local datatype WindowAttribute = W of int in type WindowAttribute = WindowAttribute val WindowAttributeE = encoding (W,fn W n => n) val WVR_ALIGNTOP = W (hex "0x0010") val WVR_ALIGNLEFT = W (hex "0x0020") val WVR_ALIGNBOTTOM = W (hex "0x0040") val WVR_ALIGNRIGHT = W (hex "0x0080") val WVR_HREDRAW = W (hex "0x0100") val WVR_VREDRAW = W (hex "0x0200") val WVR_REDRAW = orLE WindowAttributeE [WVR_HREDRAW,WVR_VREDRAW] val WVR_VALIDRECTS = W (hex "0x0400") end (*------------------------------------------------------------------------------ INDEX: MouseKey ------------------------------------------------------------------------------*) (* Set if the left mouse button is down. See WM_LBUTTONDBLCLK, WM_MBUTTONDBLCLK, WM_MBUTTONDOWN, WM_MBUTTONUP, WM_MOUSEMOVE, WM_RBUTTONDBLCLK, WM_RBUTTONDOWN, WM_RBUTTONUP. *) (*TYPE: MouseKey *) local datatype MouseKey = W of int in type MouseKey = MouseKey val MouseKeyE = encoding (W,fn W n => n) val MK_LBUTTON = W (hex "0x0001") val MK_RBUTTON = W (hex "0x0002") val MK_SHIFT = W (hex "0x0004") val MK_CONTROL = W (hex "0x0008") val MK_MBUTTON = W (hex "0x0010") end (*------------------------------------------------------------------------------ INDEX: WindowStyle ------------------------------------------------------------------------------*) (* Window Styles *) (* CreateMDIWindow() CreateWindow() *) (*TYPE: WindowStyle *) local datatype WindowStyle = W of int in type WindowStyle = WindowStyle val WindowStyleE = encoding (W,fn W n => n) val WS_OVERLAPPED = W (hex "0x00000000") val WS_POPUP = W (hex "0x80000000") val WS_CHILD = W (hex "0x40000000") val WS_MINIMIZE = W (hex "0x20000000") val WS_VISIBLE = W (hex "0x10000000") val WS_DISABLED = W (hex "0x08000000") val WS_CLIPSIBLINGS = W (hex "0x04000000") val WS_CLIPCHILDREN = W (hex "0x02000000") val WS_MAXIMIZE = W (hex "0x01000000") val WS_CAPTION = W (hex "0x00C00000" (* WS_BORDER | WS_DLGFRAME *)) val WS_BORDER = W (hex "0x00800000") val WS_DLGFRAME = W (hex "0x00400000") val WS_VSCROLL = W (hex "0x00200000") val WS_HSCROLL = W (hex "0x00100000") val WS_SYSMENU = W (hex "0x00080000") val WS_THICKFRAME = W (hex "0x00040000") val WS_GROUP = W (hex "0x00020000") val WS_TABSTOP = W (hex "0x00010000") val WS_MINIMIZEBOX = W (hex "0x00020000") val WS_MAXIMIZEBOX = W (hex "0x00010000") val WS_TILED = WS_OVERLAPPED val WS_ICONIC = WS_MINIMIZE val WS_SIZEBOX = WS_THICKFRAME val WS_OVERLAPPEDWINDOW = orLE WindowStyleE [WS_OVERLAPPED, WS_CAPTION, WS_SYSMENU, WS_THICKFRAME, WS_MINIMIZEBOX, WS_MAXIMIZEBOX] val WS_TILEDWINDOW = WS_OVERLAPPEDWINDOW val WS_POPUPWINDOW = orLE WindowStyleE [WS_POPUP, WS_BORDER, WS_SYSMENU] val WS_CHILDWINDOW = WS_CHILD end (*------------------------------------------------------------------------------ INDEX: WindowStyleExtended ------------------------------------------------------------------------------*) (* CreateWindowEx() *) (*TYPE: WindowStyleExtended *) local datatype WindowStyleExtended = W of int in type WindowStyleExtended = WindowStyleExtended val WindowStyleExtendedE = encoding (W,fn W n => n) val WS_EX_DLGMODALFRAME = W (hex "0x00000001") val WS_EX_NOPARENTNOTIFY = W (hex "0x00000004") val WS_EX_TOPMOST = W (hex "0x00000008") val WS_EX_ACCEPTFILES = W (hex "0x00000010") val WS_EX_TRANSPARENT = W (hex "0x00000020") end (*------------------------------------------------------------------------------ INDEX: ClassStyle ------------------------------------------------------------------------------*) (* Windows Class Styles *) (*TYPE: ClassStyle *) local datatype ClassStyle = W of int in type ClassStyle = ClassStyle val ClassStyleE = encoding (W,fn W n => n) val CS_VREDRAW = W (hex "0x0001") val CS_HREDRAW = W (hex "0x0002") val CS_KEYCVTWINDOW = W (hex "0x0004") val CS_DBLCLKS = W (hex "0x0008") val CS_OWNDC = W (hex "0x0020") val CS_CLASSDC = W (hex "0x0040") val CS_PARENTDC = W (hex "0x0080") val CS_NOKEYCVT = W (hex "0x0100") val CS_NOCLOSE = W (hex "0x0200") val CS_SAVEBITS = W (hex "0x0800") val CS_BYTEALIGNCLIENT = W (hex "0x1000") val CS_BYTEALIGNWINDOW = W (hex "0x2000") val CS_GLOBALCLASS = W (hex "0x4000") end (*------------------------------------------------------------------------------ INDEX: ClipboardFormat ------------------------------------------------------------------------------*) (* Clipboard Formats *) (* SetClipboardData() *) (*TYPE: ClipboardFormat *) local datatype ClipboardFormat = W of int in type ClipboardFormat = ClipboardFormat val ClipboardFormatE = encoding (W,fn W n => n) val CF_TEXT = W (1) val CF_BITMAP = W (2) val CF_METAFILEPICT = W (3) val CF_SYLK = W (4) val CF_DIF = W (5) val CF_TIFF = W (6) val CF_OEMTEXT = W (7) val CF_DIB = W (8) val CF_PALETTE = W (9) val CF_PENDATA = W (10) val CF_RIFF = W (11) val CF_WAVE = W (12) val CF_UNICODETEXT = W (13) val CF_ENHMETAFILE = W (14) val CF_OWNERDISPLAY = W (hex "0x0080") val CF_DSPTEXT = W (hex "0x0081") val CF_DSPBITMAP = W (hex "0x0082") val CF_DSPMETAFILEPICT = W (hex "0x0083") val CF_DSPENHMETAFILE = W (hex "0x008E") val CF_PRIVATEFIRST = W (hex "0x0200") val CF_PRIVATELAST = W (hex "0x02FF") val CF_GDIOBJFIRST = W (hex "0x0300") val CF_GDIOBJLAST = W (hex "0x03FF") end (*------------------------------------------------------------------------------ INDEX: AccelaratorFunction ------------------------------------------------------------------------------*) (* Structure ACCEL *) (*TYPE: AccelaratorFunction *) local datatype AccelaratorFunction = W of int in type AccelaratorFunction = AccelaratorFunction val AccelaratorFunctionE = encoding (W,fn W n => n) val FVIRTKEY = W (TRUE (* Assumed to be == TRUE *)) val FNOINVERT = W (hex "0x02") val FSHIFT = W (hex "0x04") val FCONTROL = W (hex "0x08") val FALT = W (hex "0x10") end (*------------------------------------------------------------------------------ INDEX: WindowPlacementFlag ------------------------------------------------------------------------------*) (* Structure WINDOWPLACEMENT *) (*TYPE: WindowPlacementFlag *) local datatype WindowPlacementFlag = W of int in type WindowPlacementFlag = WindowPlacementFlag val WindowPlacementFlagE = encoding (W,fn W n => n) val WPF_SETMINPOSITION = W (hex "0x0001") val WPF_RESTORETOMAXIMIZED = W (hex "0x0002") end (*------------------------------------------------------------------------------ INDEX: OwnerDrawnType ------------------------------------------------------------------------------*) (* Owner-drawn combo box MEASUREITEMSTRUCT DRAWITEMSTRUCT *) (*TYPE: OwnerDrawnType *) local datatype OwnerDrawnType = W of int in type OwnerDrawnType = OwnerDrawnType val OwnerDrawnTypeE = encoding (W,fn W n => n) val ODT_MENU = W (1) val ODT_LISTBOX = W (2) val ODT_COMBOBOX = W (3) val ODT_BUTTON = W (4) end (*------------------------------------------------------------------------------ INDEX: OwnerDrawnAction ------------------------------------------------------------------------------*) (* Structure DRAWITEMSTRUCT *) (*TYPE: OwnerDrawnAction *) local datatype OwnerDrawnAction = W of int in type OwnerDrawnAction = OwnerDrawnAction val OwnerDrawnActionE = encoding (W,fn W n => n) val ODA_DRAWENTIRE = W (hex "0x0001") val ODA_SELECT = W (hex "0x0002") val ODA_FOCUS = W (hex "0x0004") val ODS_SELECTED = W (hex "0x0001") val ODS_GRAYED = W (hex "0x0002") val ODS_DISABLED = W (hex "0x0004") val ODS_CHECKED = W (hex "0x0008") val ODS_FOCUS = W (hex "0x0010") end (*------------------------------------------------------------------------------ INDEX: PeekMessageAction ------------------------------------------------------------------------------*) (*TYPE: PeekMessageAction *) local datatype PeekMessageAction = W of int in type PeekMessageAction = PeekMessageAction val PeekMessageActionE = encoding (W,fn W n => n) val PM_NOREMOVE = W (hex "0x0000") val PM_REMOVE = W (hex "0x0001") val PM_NOYIELD = W (hex "0x0002") end (*------------------------------------------------------------------------------ INDEX: HotKeyModifier ------------------------------------------------------------------------------*) (* RegisterHotKey() *) (*TYPE: HotKeyModifier *) local datatype HotKeyModifier = W of int in type HotKeyModifier = HotKeyModifier val HotKeyModifierE = encoding (W,fn W n => n) val MOD_ALT = W (hex "0x0001") val MOD_CONTROL = W (hex "0x0002") val MOD_SHIFT = W (hex "0x0004") end (*------------------------------------------------------------------------------ INDEX: HotKeyIdentifier ------------------------------------------------------------------------------*) (* WM_HOTKEY Message *) (*TYPE: HotKeyIdentifier *) local datatype HotKeyIdentifier = W of int in type HotKeyIdentifier = HotKeyIdentifier val HotKeyIdentifierE = encoding (W,fn W n => n) val IDHOT_SNAPWINDOW = W ((~1) (* SHIFT~PRINTSCRN *)) val IDHOT_SNAPDESKTOP = W ((~2) (* PRINTSCRN *)) end (*------------------------------------------------------------------------------ INDEX: ExitWindowMode ------------------------------------------------------------------------------*) (* ExitWindows() *) (*TYPE: ExitWindowMode *) local datatype ExitWindowMode = W of int in type ExitWindowMode = ExitWindowMode val ExitWindowModeE = encoding (W,fn W n => n) val EWX_LOGOFF = W (0) val EWX_SHUTDOWN = W (1) val EWX_REBOOT = W (2) val EWX_FORCE = W (4) end (*------------------------------------------------------------------------------ INDEX: probvlem ------------------------------------------------------------------------------*) val CW_USEDEFAULT = (hex "0x80000000") (*------------------------------------------------------------------------------ INDEX: SetWindowPositionStyle ------------------------------------------------------------------------------*) (* SetWindowPos() DeferWindowPos() *) (*TYPE: SetWindowPositionStyle *) local datatype SetWindowPositionStyle = W of int in type SetWindowPositionStyle = SetWindowPositionStyle val SetWindowPositionStyleE = encoding (W,fn W n => n) val SWP_NOSIZE = W (hex "0x0001") val SWP_NOMOVE = W (hex "0x0002") val SWP_NOZORDER = W (hex "0x0004") val SWP_NOREDRAW = W (hex "0x0008") val SWP_NOACTIVATE = W (hex "0x0010") val SWP_FRAMECHANGED = W (hex "0x0020" (* The frame changed: send WM_NCCALCSIZE *)) val SWP_SHOWWINDOW = W (hex "0x0040") val SWP_HIDEWINDOW = W (hex "0x0080") val SWP_NOCOPYBITS = W (hex "0x0100") val SWP_NOOWNERZORDER = W (hex "0x0200" (* Don't do owner Z ordering *)) val SWP_DRAWFRAME = SWP_FRAMECHANGED val SWP_NOREPOSITION = SWP_NOOWNERZORDER end (*------------------------------------------------------------------------------ INDEX: KeyEvent ------------------------------------------------------------------------------*) (* Key event *) (*TYPE: KeyEvent *) local datatype KeyEvent = W of int in type KeyEvent = KeyEvent val KeyEventE = encoding (W,fn W n => n) val KEYEVENTF_EXTENDEDKEY = W (hex "0x0001") val KEYEVENTF_KEYUP = W (hex "0x0002") end (*------------------------------------------------------------------------------ INDEX: MouseEvent ------------------------------------------------------------------------------*) (* mouse_event() *) (*TYPE: MouseEvent *) local datatype MouseEvent = W of int in type MouseEvent = MouseEvent val MouseEventE = encoding (W,fn W n => n) val MOUSEEVENTF_MOVE = W (hex "0x0001" (* mouse move *)) val MOUSEEVENTF_LEFTDOWN = W (hex "0x0002" (* left button down *)) val MOUSEEVENTF_LEFTUP = W (hex "0x0004" (* left button up *)) val MOUSEEVENTF_RIGHTDOWN = W (hex "0x0008" (* right button down *)) val MOUSEEVENTF_RIGHTUP = W (hex "0x0010" (* right button up *)) val MOUSEEVENTF_MIDDLEDOWN = W (hex "0x0020" (* middle button down *)) val MOUSEEVENTF_MIDDLEUP = W (hex "0x0040" (* middle button up *)) val MOUSEEVENTF_ABSOLUTE = W (hex "0x8000" (* absolute move *)) end (*------------------------------------------------------------------------------ INDEX: QueueStatus ------------------------------------------------------------------------------*) (* GetQueueStatus() *) (*TYPE: QueueStatus *) local datatype QueueStatus = W of int in type QueueStatus = QueueStatus val QueueStatusE = encoding (W,fn W n => n) val QS_KEY = W (hex "0x01") val QS_MOUSEMOVE = W (hex "0x02") val QS_MOUSEBUTTON = W (hex "0x04") val QS_POSTMESSAGE = W (hex "0x08") val QS_TIMER = W (hex "0x10") val QS_PAINT = W (hex "0x20") val QS_SENDMESSAGE = W (hex "0x40") val QS_HOTKEY = W (hex "0x80") val QS_MOUSE = orLE QueueStatusE [QS_MOUSEMOVE, QS_MOUSEBUTTON] val QS_INPUT = orLE QueueStatusE [QS_MOUSE, QS_KEY] val QS_ALLEVENTS = orLE QueueStatusE [QS_INPUT, QS_POSTMESSAGE, QS_TIMER, QS_PAINT, QS_HOTKEY] val QS_ALLINPUT = orLE QueueStatusE [QS_SENDMESSAGE, QS_PAINT, QS_TIMER, QS_POSTMESSAGE, QS_MOUSEBUTTON, QS_MOUSEMOVE, QS_HOTKEY, QS_KEY] end (*------------------------------------------------------------------------------ INDEX: SystemMetrics ------------------------------------------------------------------------------*) (* GetSystemMetrics() *) (*TYPE: SystemMetrics *) local datatype SystemMetrics = W of int in type SystemMetrics = SystemMetrics val SystemMetricsE = encoding (W,fn W n => n) val SM_CXSCREEN = W (0) val SM_CYSCREEN = W (1) val SM_CXVSCROLL = W (2) val SM_CYHSCROLL = W (3) val SM_CYCAPTION = W (4) val SM_CXBORDER = W (5) val SM_CYBORDER = W (6) val SM_CXDLGFRAME = W (7) val SM_CYDLGFRAME = W (8) val SM_CYVTHUMB = W (9) val SM_CXHTHUMB = W (10) val SM_CXICON = W (11) val SM_CYICON = W (12) val SM_CXCURSOR = W (13) val SM_CYCURSOR = W (14) val SM_CYMENU = W (15) val SM_CXFULLSCREEN = W (16) val SM_CYFULLSCREEN = W (17) val SM_CYKANJIWINDOW = W (18) val SM_MOUSEPRESENT = W (19) val SM_CYVSCROLL = W (20) val SM_CXHSCROLL = W (21) val SM_DEBUG = W (22) val SM_SWAPBUTTON = W (23) val SM_RESERVED1 = W (24) val SM_RESERVED2 = W (25) val SM_RESERVED3 = W (26) val SM_RESERVED4 = W (27) val SM_CXMIN = W (28) val SM_CYMIN = W (29) val SM_CXSIZE = W (30) val SM_CYSIZE = W (31) val SM_CXFRAME = W (32) val SM_CYFRAME = W (33) val SM_CXMINTRACK = W (34) val SM_CYMINTRACK = W (35) val SM_CXDOUBLECLK = W (36) val SM_CYDOUBLECLK = W (37) val SM_CXICONSPACING = W (38) val SM_CYICONSPACING = W (39) val SM_MENUDROPALIGNMENT = W (40) val SM_PENWINDOWS = W (41) val SM_DBCSENABLED = W (42) val SM_CMOUSEBUTTONS = W (43) val SM_CMETRICS = W (44) end (*------------------------------------------------------------------------------ INDEX: TrackPopMenu ------------------------------------------------------------------------------*) (* TrackPopUpMenu() *) (*TYPE: TrackPopMenu *) local datatype TrackPopMenu = W of int in type TrackPopMenu = TrackPopMenu val TrackPopMenuE = encoding (W,fn W n => n) val TPM_LEFTBUTTON = W (hex "0x0000") val TPM_RIGHTBUTTON = W (hex "0x0002") val TPM_LEFTALIGN = W (hex "0x0000") val TPM_CENTERALIGN = W (hex "0x0004") val TPM_RIGHTALIGN = W (hex "0x0008") end (*------------------------------------------------------------------------------ INDEX: DrawTextMode ------------------------------------------------------------------------------*) (* DrawText() *) (*TYPE: DrawTextMode *) local datatype DrawTextMode = W of int in type DrawTextMode = DrawTextMode val DrawTextModeE = encoding (W,fn W n => n) val DT_TOP = W (hex "0x0000") val DT_LEFT = W (hex "0x0000") val DT_CENTER = W (hex "0x0001") val DT_RIGHT = W (hex "0x0002") val DT_VCENTER = W (hex "0x0004") val DT_BOTTOM = W (hex "0x0008") val DT_WORDBREAK = W (hex "0x0010") val DT_SINGLELINE = W (hex "0x0020") val DT_EXPANDTABS = W (hex "0x0040") val DT_TABSTOP = W (hex "0x0080") val DT_NOCLIP = W (hex "0x0100") val DT_EXTERNALLEADING = W (hex "0x0200") val DT_CALCRECT = W (hex "0x0400") val DT_NOPREFIX = W (hex "0x0800") val DT_INTERNAL = W (hex "0x1000") end (*------------------------------------------------------------------------------ INDEX: DeviceContextFlag ------------------------------------------------------------------------------*) (* Flags for GetDCEx() *) (*TYPE: DeviceContextFlag *) local datatype DeviceContextFlag = W of int in type DeviceContextFlag = DeviceContextFlag val DeviceContextFlagE = encoding (W,fn W n => n) val DCX_WINDOW = W (hex "0x00000001") val DCX_CACHE = W (hex "0x00000002") val DCX_NORESETATTRS = W (hex "0x00000004") val DCX_CLIPCHILDREN = W (hex "0x00000008") val DCX_CLIPSIBLINGS = W (hex "0x00000010") val DCX_PARENTCLIP = W (hex "0x00000020") val DCX_EXCLUDERGN = W (hex "0x00000040") val DCX_INTERSECTRGN = W (hex "0x00000080") val DCX_EXCLUDEUPDATE = W (hex "0x00000100") val DCX_INTERSECTUPDATE = W (hex "0x00000200") val DCX_LOCKWINDOWUPDATE = W (hex "0x00000400") val DCX_NORECOMPUTE = W (hex "0x00100000") val DCX_VALIDATE = W (hex "0x00200000") end (*------------------------------------------------------------------------------ INDEX: RedrawWindowFlag ------------------------------------------------------------------------------*) (* RedrawWindow() *) (*TYPE: RedrawWindowFlag *) local datatype RedrawWindowFlag = W of int in type RedrawWindowFlag = RedrawWindowFlag val RedrawWindowFlagE = encoding (W,fn W n => n) val RDW_INVALIDATE = W (hex "0x0001") val RDW_INTERNALPAINT = W (hex "0x0002") val RDW_ERASE = W (hex "0x0004") val RDW_VALIDATE = W (hex "0x0008") val RDW_NOINTERNALPAINT = W (hex "0x0010") val RDW_NOERASE = W (hex "0x0020") val RDW_NOCHILDREN = W (hex "0x0040") val RDW_ALLCHILDREN = W (hex "0x0080") val RDW_UPDATENOW = W (hex "0x0100") val RDW_ERASENOW = W (hex "0x0200") val RDW_FRAME = W (hex "0x0400") val RDW_NOFRAME = W (hex "0x0800") end (*------------------------------------------------------------------------------ INDEX: ScrollWindowFlag ------------------------------------------------------------------------------*) (* ScrollWindow() *) (*TYPE: ScrollWindowFlag *) local datatype ScrollWindowFlag = W of int in type ScrollWindowFlag = ScrollWindowFlag val ScrollWindowFlagE = encoding (W,fn W n => n) val SW_SCROLLCHILDREN = W (hex "0x0001" (* Scroll children within *lprcScroll. *)) val SW_INVALIDATE = W (hex "0x0002" (* Invalidate after scrolling *)) val SW_ERASE = W (hex "0x0004" (* If SW_INVALIDATE, don't send WM_ERASEBACKGROUND *)) end (*------------------------------------------------------------------------------ INDEX: EnableScrollBarFlag ------------------------------------------------------------------------------*) (* EnableScrollBar() *) (*TYPE: EnableScrollBarFlag *) local datatype EnableScrollBarFlag = W of int in type EnableScrollBarFlag = EnableScrollBarFlag val EnableScrollBarFlagE = encoding (W,fn W n => n) val ESB_ENABLE_BOTH = W (hex "0x0000") val ESB_DISABLE_BOTH = W (hex "0x0003") val ESB_DISABLE_LEFT = W (hex "0x0001") val ESB_DISABLE_RIGHT = W (hex "0x0002") val ESB_DISABLE_UP = W (hex "0x0001") val ESB_DISABLE_DOWN = W (hex "0x0002") val ESB_DISABLE_LTUP = ESB_DISABLE_LEFT val ESB_DISABLE_RTDN = ESB_DISABLE_RIGHT end (*------------------------------------------------------------------------------ INDEX: MessageBoxValue ------------------------------------------------------------------------------*) (* MessageBox() MessageBeep() *) (*TYPE: MessageBoxValue *) local datatype MessageBoxValue = W of int in type MessageBoxValue = MessageBoxValue val MessageBoxValueE = encoding (W,fn W n => n) val MB_OK = W (hex "0x00000000") val MB_OKCANCEL = W (hex "0x00000001") val MB_ABORTRETRYIGNORE = W (hex "0x00000002") val MB_YESNOCANCEL = W (hex "0x00000003") val MB_YESNO = W (hex "0x00000004") val MB_RETRYCANCEL = W (hex "0x00000005") val MB_ICONHAND = W (hex "0x00000010") val MB_ICONQUESTION = W (hex "0x00000020") val MB_ICONEXCLAMATION = W (hex "0x00000030") val MB_ICONASTERISK = W (hex "0x00000040") val MB_ICONINFORMATION = MB_ICONASTERISK val MB_ICONSTOP = MB_ICONHAND val MB_DEFBUTTON1 = W (hex "0x00000000") val MB_DEFBUTTON2 = W (hex "0x00000100") val MB_DEFBUTTON3 = W (hex "0x00000200") val MB_APPLMODAL = W (hex "0x00000000") val MB_SYSTEMMODAL = W (hex "0x00001000") val MB_TASKMODAL = W (hex "0x00002000") val MB_NOFOCUS = W (hex "0x00008000") val MB_SETFOREGROUND = W (hex "0x00010000") val MB_DEFAULT_DESKTOP_ONLY = W (hex "0x00020000") val MB_TYPEMASK = W (hex "0x0000000F") val MB_ICONMASK = W (hex "0x000000F0") val MB_DEFMASK = W (hex "0x00000F00") val MB_MODEMASK = W (hex "0x00003000") val MB_MISCMASK = W (hex "0x0000C000") end (*------------------------------------------------------------------------------ INDEX: ControlColor ------------------------------------------------------------------------------*) (* Color types and constants *) (*TYPE: ControlColor *) local datatype ControlColor = W of int in type ControlColor = ControlColor val ControlColorE = encoding (W,fn W n => n) val CTLCOLOR_MSGBOX = W (0) val CTLCOLOR_EDIT = W (1) val CTLCOLOR_LISTBOX = W (2) val CTLCOLOR_BTN = W (3) val CTLCOLOR_DLG = W (4) val CTLCOLOR_SCROLLBAR = W (5) val CTLCOLOR_STATIC = W (6) val CTLCOLOR_MAX = W (8 (* three bits max *)) end (*------------------------------------------------------------------------------ INDEX: ColorType ------------------------------------------------------------------------------*) (* Color types and constants *) (*TYPE: ColorType *) local datatype ColorType = W of int in type ColorType = ColorType val ColorTypeE = encoding (W,fn W n => n) val COLOR_SCROLLBAR = W (0) val COLOR_BACKGROUND = W (1) val COLOR_ACTIVECAPTION = W (2) val COLOR_INACTIVECAPTION = W (3) val COLOR_MENU = W (4) val COLOR_WINDOW = W (5) val COLOR_WINDOWFRAME = W (6) val COLOR_MENUTEXT = W (7) val COLOR_WINDOWTEXT = W (8) val COLOR_CAPTIONTEXT = W (9) val COLOR_ACTIVEBORDER = W (10) val COLOR_INACTIVEBORDER = W (11) val COLOR_APPWORKSPACE = W (12) val COLOR_HIGHLIGHT = W (13) val COLOR_HIGHLIGHTTEXT = W (14) val COLOR_BTNFACE = W (15) val COLOR_BTNSHADOW = W (16) val COLOR_GRAYTEXT = W (17) val COLOR_BTNTEXT = W (18) val COLOR_INACTIVECAPTIONTEXT = W (19) val COLOR_BTNHIGHLIGHT = W (20) end (*------------------------------------------------------------------------------ INDEX: GetWindowFlag ------------------------------------------------------------------------------*) (* GetWindow() *) (*TYPE: GetWindowFlag *) local datatype GetWindowFlag = W of int in type GetWindowFlag = GetWindowFlag val GetWindowFlagE = encoding (W,fn W n => n) val GW_HWNDFIRST = W (0) val GW_HWNDLAST = W (1) val GW_HWNDNEXT = W (2) val GW_HWNDPREV = W (3) val GW_OWNER = W (4) val GW_CHILD = W (5) val GW_MAX = W (5) end (*------------------------------------------------------------------------------ INDEX: MenuFlag ------------------------------------------------------------------------------*) (* Menu Flags *) (* AppendMenu() InsertMenu() ModifyMenu() ChangeMenu() GetMenuState() *) (*TYPE: MenuFlag *) local datatype MenuFlag = W of int in type MenuFlag = MenuFlag val MenuFlagE = encoding (W,fn W n => n) val MF_INSERT = W (hex "0x00000000") val MF_CHANGE = W (hex "0x00000080") val MF_APPEND = W (hex "0x00000100") val MF_DELETE = W (hex "0x00000200") val MF_REMOVE = W (hex "0x00001000") val MF_BYCOMMAND = W (hex "0x00000000") val MF_BYPOSITION = W (hex "0x00000400") val MF_SEPARATOR = W (hex "0x00000800") val MF_ENABLED = W (hex "0x00000000") val MF_GRAYED = W (hex "0x00000001") val MF_DISABLED = W (hex "0x00000002") val MF_UNCHECKED = W (hex "0x00000000") val MF_CHECKED = W (hex "0x00000008") val MF_USECHECKBITMAPS = W (hex "0x00000200") val MF_STRING = W (hex "0x00000000") val MF_BITMAP = W (hex "0x00000004") val MF_OWNERDRAW = W (hex "0x00000100") val MF_POPUP = W (hex "0x00000010") val MF_MENUBARBREAK = W (hex "0x00000020") val MF_MENUBREAK = W (hex "0x00000040") val MF_UNHILITE = W (hex "0x00000000") val MF_HILITE = W (hex "0x00000080") val MF_SYSMENU = W (hex "0x00002000") val MF_HELP = W (hex "0x00004000") val MF_MOUSESELECT = W (hex "0x00008000") val MF_END = W (hex "0x00000080") end (*------------------------------------------------------------------------------ INDEX: SystemCommand ------------------------------------------------------------------------------*) (* System menu *) (*TYPE: SystemCommand *) local datatype SystemCommand = W of int in type SystemCommand = SystemCommand val SystemCommandE = encoding (W,fn W n => n) val SC_SIZE = W (hex "0xF000") val SC_MOVE = W (hex "0xF010") val SC_MINIMIZE = W (hex "0xF020") val SC_MAXIMIZE = W (hex "0xF030") val SC_NEXTWINDOW = W (hex "0xF040") val SC_PREVWINDOW = W (hex "0xF050") val SC_CLOSE = W (hex "0xF060") val SC_VSCROLL = W (hex "0xF070") val SC_HSCROLL = W (hex "0xF080") val SC_MOUSEMENU = W (hex "0xF090") val SC_KEYMENU = W (hex "0xF100") val SC_ARRANGE = W (hex "0xF110") val SC_RESTORE = W (hex "0xF120") val SC_TASKLIST = W (hex "0xF130") val SC_SCREENSAVE = W (hex "0xF140") val SC_HOTKEY = W (hex "0xF150") val SC_ICON = SC_MINIMIZE val SC_ZOOM = SC_MAXIMIZE end (*------------------------------------------------------------------------------ INDEX: CursorIdentifier ------------------------------------------------------------------------------*) (* LoadCursor() *) (*TYPE: CursorIdentifier *) local datatype CursorIdentifier = W of int in type CursorIdentifier = CursorIdentifier val CursorIdentifierE = encoding (W,fn W n => n) val IDC_ARROW = W (MAKEINTRESOURCE(32512)) val IDC_IBEAM = W (MAKEINTRESOURCE(32513)) val IDC_WAIT = W (MAKEINTRESOURCE(32514)) val IDC_CROSS = W (MAKEINTRESOURCE(32515)) val IDC_UPARROW = W (MAKEINTRESOURCE(32516)) val IDC_SIZE = W (MAKEINTRESOURCE(32640)) val IDC_ICON = W (MAKEINTRESOURCE(32641)) val IDC_SIZENWSE = W (MAKEINTRESOURCE(32642)) val IDC_SIZENESW = W (MAKEINTRESOURCE(32643)) val IDC_SIZEWE = W (MAKEINTRESOURCE(32644)) val IDC_SIZENS = W (MAKEINTRESOURCE(32645)) val IDC_SIZEALL = W (MAKEINTRESOURCE(32646) (* not in win3.1 *)) val IDC_NO = W (MAKEINTRESOURCE(32648) (* not in win3.1 *)) val IDC_APPSTARTING = W (MAKEINTRESOURCE(32650) (* not in win3.1 *)) end (*------------------------------------------------------------------------------ INDEX: BitmapOption ------------------------------------------------------------------------------*) (* LoadBitmap() *) (*TYPE: BitmapOption *) local datatype BitmapOption = W of int in type BitmapOption = BitmapOption val BitmapOptionE = encoding (W,fn W n => n) val OBM_CLOSE = W (32754) val OBM_UPARROW = W (32753) val OBM_DNARROW = W (32752) val OBM_RGARROW = W (32751) val OBM_LFARROW = W (32750) val OBM_REDUCE = W (32749) val OBM_ZOOM = W (32748) val OBM_RESTORE = W (32747) val OBM_REDUCED = W (32746) val OBM_ZOOMD = W (32745) val OBM_RESTORED = W (32744) val OBM_UPARROWD = W (32743) val OBM_DNARROWD = W (32742) val OBM_RGARROWD = W (32741) val OBM_LFARROWD = W (32740) val OBM_MNARROW = W (32739) val OBM_COMBO = W (32738) val OBM_UPARROWI = W (32737) val OBM_DNARROWI = W (32736) val OBM_RGARROWI = W (32735) val OBM_LFARROWI = W (32734) val OBM_OLD_CLOSE = W (32767) val OBM_SIZE = W (32766) val OBM_OLD_UPARROW = W (32765) val OBM_OLD_DNARROW = W (32764) val OBM_OLD_RGARROW = W (32763) val OBM_OLD_LFARROW = W (32762) val OBM_BTSIZE = W (32761) val OBM_CHECK = W (32760) val OBM_CHECKBOXES = W (32759) val OBM_BTNCORNERS = W (32758) val OBM_OLD_REDUCE = W (32757) val OBM_OLD_ZOOM = W (32756) val OBM_OLD_RESTORE = W (32755) end (*------------------------------------------------------------------------------ INDEX: OCRFlag ------------------------------------------------------------------------------*) (*TYPE: OCRFlag *) local datatype OCRFlag = W of int in type OCRFlag = OCRFlag val OCRFlagE = encoding (W,fn W n => n) val OCR_NORMAL = W (32512) val OCR_IBEAM = W (32513) val OCR_WAIT = W (32514) val OCR_CROSS = W (32515) val OCR_UP = W (32516) val OCR_SIZE = W (32640) val OCR_ICON = W (32641) val OCR_SIZENWSE = W (32642) val OCR_SIZENESW = W (32643) val OCR_SIZEWE = W (32644) val OCR_SIZENS = W (32645) val OCR_SIZEALL = W (32646) val OCR_ICOCUR = W (32647) val OCR_NO = W (32648 (* not in win3.1 *)) end (*------------------------------------------------------------------------------ INDEX: OICFlag ------------------------------------------------------------------------------*) (*TYPE: OICFlag *) local datatype OICFlag = W of int in type OICFlag = OICFlag val OICFlagE = encoding (W,fn W n => n) val OIC_SAMPLE = W (32512) val OIC_HAND = W (32513) val OIC_QUES = W (32514) val OIC_BANG = W (32515) val OIC_NOTE = W (32516) end (*------------------------------------------------------------------------------ INDEX: IconIdentifier ------------------------------------------------------------------------------*) (* LoadIcon() *) (*TYPE: IconIdentifier *) local datatype IconIdentifier = W of int in type IconIdentifier = IconIdentifier val IconIdentifierE = encoding (W,fn W n => n) val IDI_APPLICATION = W (MAKEINTRESOURCE(32512)) val IDI_HAND = W (MAKEINTRESOURCE(32513)) val IDI_QUESTION = W (MAKEINTRESOURCE(32514)) val IDI_EXCLAMATION = W (MAKEINTRESOURCE(32515)) val IDI_ASTERISK = W (MAKEINTRESOURCE(32516)) end (*------------------------------------------------------------------------------ INDEX: MessageBoxIdentifier ------------------------------------------------------------------------------*) (* MessageBox() *) (*TYPE: MessageBoxIdentifier *) local datatype MessageBoxIdentifier = W of int in type MessageBoxIdentifier = MessageBoxIdentifier val MessageBoxIdentifierE = encoding (W,fn W n => n) val IDOK = W (1) val IDCANCEL = W (2) val IDABORT = W (3) val IDRETRY = W (4) val IDIGNORE = W (5) val IDYES = W (6) val IDNO = W (7) end (*------------------------------------------------------------------------------ INDEX: EditStyle ------------------------------------------------------------------------------*) (* CreateWindow() *) (*TYPE: EditStyle *) local datatype EditStyle = W of int in type EditStyle = EditStyle val EditStyleE = encoding (W,fn W n => n) val ES_LEFT = W (hex "0x0000") val ES_CENTER = W (hex "0x0001") val ES_RIGHT = W (hex "0x0002") val ES_MULTILINE = W (hex "0x0004") val ES_UPPERCASE = W (hex "0x0008") val ES_LOWERCASE = W (hex "0x0010") val ES_PASSWORD = W (hex "0x0020") val ES_AUTOVSCROLL = W (hex "0x0040") val ES_AUTOHSCROLL = W (hex "0x0080") val ES_NOHIDESEL = W (hex "0x0100") val ES_OEMCONVERT = W (hex "0x0400") val ES_READONLY = W (hex "0x0800") val ES_WANTRETURN = W (hex "0x1000") val ES_OVERLAPPED = W (hex "0x00000000") val ES_POPUP = W (hex "0x80000000") val ES_CHILD = W (hex "0x40000000") val ES_MINIMIZE = W (hex "0x20000000") val ES_VISIBLE = W (hex "0x10000000") val ES_DISABLED = W (hex "0x08000000") val ES_CLIPSIBLINGS = W (hex "0x04000000") val ES_CLIPCHILDREN = W (hex "0x02000000") val ES_MAXIMIZE = W (hex "0x01000000") val ES_CAPTION = W (hex "0x00C00000") val ES_BORDER = W (hex "0x00800000") val ES_DLGFRAME = W (hex "0x00400000") val ES_VSCROLL = W (hex "0x00200000") val ES_HSCROLL = W (hex "0x00100000") val ES_SYSMENU = W (hex "0x00080000") val ES_THICKFRAME = W (hex "0x00040000") val ES_GROUP = W (hex "0x00020000") val ES_TABSTOP = W (hex "0x00010000") val ES_MINIMIZEBOX = W (hex "0x00020000") val ES_MAXIMIZEBOX = W (hex "0x00010000") val ES_TILED = ES_OVERLAPPED val ES_ICONIC = ES_MINIMIZE val ES_SIZEBOX = ES_THICKFRAME val ES_OVERLAPPEDWINDOW = orLE EditStyleE [ES_OVERLAPPED, ES_CAPTION, ES_SYSMENU, ES_THICKFRAME, ES_MINIMIZEBOX, ES_MAXIMIZEBOX] val ES_TILEDWINDOW = ES_OVERLAPPEDWINDOW val ES_POPUPWINDOW = orLE EditStyleE [ES_POPUP, ES_BORDER, ES_SYSMENU] val ES_CHILDWINDOW = ES_CHILD end (*------------------------------------------------------------------------------ INDEX: ControlNotification ------------------------------------------------------------------------------*) (* WM_COMMAND message *) (*TYPE: ControlNotification *) local datatype ControlNotification = W of int in type ControlNotification = ControlNotification val ControlNotificationE = encoding (W,fn W n => n) (* Edit control notifications *) val EN_SETFOCUS = W (hex "0x0100") val EN_KILLFOCUS = W (hex "0x0200") val EN_CHANGE = W (hex "0x0300") val EN_UPDATE = W (hex "0x0400") val EN_ERRSPACE = W (hex "0x0500") val EN_MAXTEXT = W (hex "0x0501") val EN_HSCROLL = W (hex "0x0601") val EN_VSCROLL = W (hex "0x0602") (* Button control notifications *) val BN_CLICKED = W (0) val BN_PAINT = W (1) val BN_HILITE = W (2) val BN_UNHILITE = W (3) val BN_DISABLE = W (4) val BN_DOUBLECLICKED = W (5) (* ListBox control notifications *) val LBN_ERRSPACE = W ((~2)) val LBN_SELCHANGE = BN_PAINT val LBN_DBLCLK = BN_HILITE val LBN_SELCANCEL = BN_UNHILITE val LBN_SETFOCUS = BN_DISABLE val LBN_KILLFOCUS = BN_DOUBLECLICKED (* ComboBox control notifications *) val CBN_ERRSPACE = W ((~1)) val CBN_SELCHANGE = BN_PAINT val CBN_DBLCLK = BN_HILITE val CBN_SETFOCUS = BN_UNHILITE val CBN_KILLFOCUS = BN_DISABLE val CBN_EDITCHANGE = BN_DOUBLECLICKED val CBN_EDITUPDATE = W (6) val CBN_DROPDOWN = W (7) val CBN_CLOSEUP = W (8) val CBN_SELENDOK = W (9) val CBN_SELENDCANCEL = W (10) end (*------------------------------------------------------------------------------ INDEX: EditCtlBehaviour ------------------------------------------------------------------------------*) (*TYPE: EditCtlBehaviour *) local datatype EditCtlBehaviour = W of int in type EditCtlBehaviour = EditCtlBehaviour val EditCtlBehaviourE = encoding (W,fn W n => n) val EM_GETSEL = W (hex "0x00B0") val EM_SETSEL = W (hex "0x00B1") val EM_GETRECT = W (hex "0x00B2") val EM_SETRECT = W (hex "0x00B3") val EM_SETRECTNP = W (hex "0x00B4") val EM_SCROLL = W (hex "0x00B5") val EM_LINESCROLL = W (hex "0x00B6") val EM_SCROLLCARET = W (hex "0x00B7") val EM_GETMODIFY = W (hex "0x00B8") val EM_SETMODIFY = W (hex "0x00B9") val EM_GETLINECOUNT = W (hex "0x00BA") val EM_LINEINDEX = W (hex "0x00BB") val EM_SETHANDLE = W (hex "0x00BC") val EM_GETHANDLE = W (hex "0x00BD") val EM_GETTHUMB = W (hex "0x00BE") val EM_LINELENGTH = W (hex "0x00C1") val EM_REPLACESEL = W (hex "0x00C2") val EM_GETLINE = W (hex "0x00C4") val EM_LIMITTEXT = W (hex "0x00C5") val EM_CANUNDO = W (hex "0x00C6") val EM_UNDO = W (hex "0x00C7") val EM_FMTLINES = W (hex "0x00C8") val EM_LINEFROMCHAR = W (hex "0x00C9") val EM_SETTABSTOPS = W (hex "0x00CB") val EM_SETPASSWORDCHAR = W (hex "0x00CC") val EM_EMPTYUNDOBUFFER = W (hex "0x00CD") val EM_GETFIRSTVISIBLELINE = W (hex "0x00CE") val EM_SETREADONLY = W (hex "0x00CF") val EM_SETWORDBREAKPROC = W (hex "0x00D0") val EM_GETWORDBREAKPROC = W (hex "0x00D1") val EM_GETPASSWORDCHAR = W (hex "0x00D2") end (*------------------------------------------------------------------------------ INDEX: WordBreakFlag ------------------------------------------------------------------------------*) (*TYPE: WordBreakFlag *) local datatype WordBreakFlag = W of int in type WordBreakFlag = WordBreakFlag val WordBreakFlagE = encoding (W,fn W n => n) val WB_LEFT = W (0) val WB_RIGHT = W (1) val WB_ISDELIMITER = W (2) end (*------------------------------------------------------------------------------ INDEX: ButtonStyle ------------------------------------------------------------------------------*) (* Brush and Button styles *) (* CreateWindow() IsDlgButtonChecked() *) (*TYPE: ButtonStyle *) local datatype ButtonStyle = W of int in type ButtonStyle = ButtonStyle val ButtonStyleE = encoding (W,fn W n => n) val BS_PUSHBUTTON = W (hex "0x00") val BS_DEFPUSHBUTTON = W (hex "0x01") val BS_CHECKBOX = W (hex "0x02") val BS_AUTOCHECKBOX = W (hex "0x03") val BS_RADIOBUTTON = W (hex "0x04") val BS_3STATE = W (hex "0x05") val BS_AUTO3STATE = W (hex "0x06") val BS_GROUPBOX = W (hex "0x07") val BS_USERBUTTON = W (hex "0x08") val BS_AUTORADIOBUTTON = W (hex "0x09") val BS_OWNERDRAW = W (hex "0x0B") val BS_LEFTTEXT = W (hex "0x20") val BS_OVERLAPPED = W (hex "0x00000000") val BS_POPUP = W (hex "0x80000000") val BS_CHILD = W (hex "0x40000000") val BS_MINIMIZE = W (hex "0x20000000") val BS_VISIBLE = W (hex "0x10000000") val BS_DISABLED = W (hex "0x08000000") val BS_CLIPSIBLINGS = W (hex "0x04000000") val BS_CLIPCHILDREN = W (hex "0x02000000") val BS_MAXIMIZE = W (hex "0x01000000") val BS_CAPTION = W (hex "0x00C00000") val BS_BORDER = W (hex "0x00800000") val BS_DLGFRAME = W (hex "0x00400000") val BS_VSCROLL = W (hex "0x00200000") val BS_HSCROLL = W (hex "0x00100000") val BS_SYSMENU = W (hex "0x00080000") val BS_THICKFRAME = W (hex "0x00040000") val BS_GROUP = W (hex "0x00020000") val BS_TABSTOP = W (hex "0x00010000") val BS_MINIMIZEBOX = W (hex "0x00020000") val BS_MAXIMIZEBOX = W (hex "0x00010000") val BS_TILED = BS_OVERLAPPED val BS_ICONIC = BS_MINIMIZE val BS_SIZEBOX = BS_THICKFRAME val BS_OVERLAPPEDWINDOW = orLE ButtonStyleE [BS_OVERLAPPED, BS_CAPTION, BS_SYSMENU, BS_THICKFRAME, BS_MINIMIZEBOX, BS_MAXIMIZEBOX] val BS_TILEDWINDOW = BS_OVERLAPPEDWINDOW val BS_POPUPWINDOW = orLE ButtonStyleE [BS_POPUP, BS_BORDER, BS_SYSMENU] val BS_CHILDWINDOW = BS_CHILD end (*------------------------------------------------------------------------------ INDEX: ButtonMessageEnquiry ------------------------------------------------------------------------------*) (* Button control *) (*TYPE: ButtonMessageEnquiry *) local datatype ButtonMessageEnquiry = W of int in type ButtonMessageEnquiry = ButtonMessageEnquiry val ButtonMessageEnquiryE = encoding (W,fn W n => n) val BM_GETCHECK = W (hex "0x00F0") val BM_SETCHECK = W (hex "0x00F1") val BM_GETSTATE = W (hex "0x00F2") val BM_SETSTATE = W (hex "0x00F3") val BM_SETSTYLE = W (hex "0x00F4") end (*------------------------------------------------------------------------------ INDEX: StaticStyle ------------------------------------------------------------------------------*) (* Static controls *) (* CreateWindow() *) (*TYPE: StaticStyle *) local datatype StaticStyle = W of int in type StaticStyle = StaticStyle val StaticStyleE = encoding (W,fn W n => n) val SS_LEFT = W (hex "0x00") val SS_CENTER = W (hex "0x01") val SS_RIGHT = W (hex "0x02") val SS_ICON = W (hex "0x03") val SS_BLACKRECT = W (hex "0x04") val SS_GRAYRECT = W (hex "0x05") val SS_WHITERECT = W (hex "0x06") val SS_BLACKFRAME = W (hex "0x07") val SS_GRAYFRAME = W (hex "0x08") val SS_WHITEFRAME = W (hex "0x09") val SS_USERITEM = W (hex "0x0A") val SS_SIMPLE = W (hex "0x0B") val SS_LEFTNOWORDWRAP = W (hex "0x0C") val SS_NOPREFIX = W (hex "0x80" (* Don't do "&" character translation *)) val SS_OVERLAPPED = W (hex "0x00000000") val SS_POPUP = W (hex "0x80000000") val SS_CHILD = W (hex "0x40000000") val SS_MINIMIZE = W (hex "0x20000000") val SS_VISIBLE = W (hex "0x10000000") val SS_DISABLED = W (hex "0x08000000") val SS_CLIPSIBLINGS = W (hex "0x04000000") val SS_CLIPCHILDREN = W (hex "0x02000000") val SS_MAXIMIZE = W (hex "0x01000000") val SS_CAPTION = W (hex "0x00C00000") val SS_BORDER = W (hex "0x00800000") val SS_DLGFRAME = W (hex "0x00400000") val SS_VSCROLL = W (hex "0x00200000") val SS_HSCROLL = W (hex "0x00100000") val SS_SYSMENU = W (hex "0x00080000") val SS_THICKFRAME = W (hex "0x00040000") val SS_GROUP = W (hex "0x00020000") val SS_TABSTOP = W (hex "0x00010000") val SS_MINIMIZEBOX = W (hex "0x00020000") val SS_MAXIMIZEBOX = W (hex "0x00010000") val SS_TILED = SS_OVERLAPPED val SS_ICONIC = SS_MINIMIZE val SS_SIZEBOX = SS_THICKFRAME val SS_OVERLAPPEDWINDOW = orLE StaticStyleE [SS_OVERLAPPED, SS_CAPTION, SS_SYSMENU, SS_THICKFRAME, SS_MINIMIZEBOX, SS_MAXIMIZEBOX] val SS_TILEDWINDOW = SS_OVERLAPPEDWINDOW val SS_POPUPWINDOW = orLE StaticStyleE [SS_POPUP, SS_BORDER, SS_SYSMENU] val SS_CHILDWINDOW = SS_CHILD end (*------------------------------------------------------------------------------ INDEX: StaticMessage ------------------------------------------------------------------------------*) (* Static control messages *) (*TYPE: StaticMessage *) local datatype StaticMessage = W of int in type StaticMessage = StaticMessage val StaticMessageE = encoding (W,fn W n => n) val STM_SETICON = W (hex "0x170") val STM_GETICON = W (hex "0x171") val STM_MSGMAX = W (hex "0x172") end (*------------------------------------------------------------------------------ INDEX: DWLParameter ------------------------------------------------------------------------------*) (* SetWindowLong() *) (*TYPE: DWLParameter *) local datatype DWLParameter = W of int in type DWLParameter = DWLParameter val DWLParameterE = encoding (W,fn W n => n) val DWL_MSGRESULT = W (0) val DWL_DLGPROC = W (4) val DWL_USER = W (8) end (*------------------------------------------------------------------------------ INDEX: DialogBoxFlag ------------------------------------------------------------------------------*) (* Dialog Box flags *) (*TYPE: DialogBoxFlag *) local datatype DialogBoxFlag = W of int in type DialogBoxFlag = DialogBoxFlag val DialogBoxFlagE = encoding (W,fn W n => n) val DDL_READWRITE = W (hex "0x0000") val DDL_READONLY = W (hex "0x0001") val DDL_HIDDEN = W (hex "0x0002") val DDL_SYSTEM = W (hex "0x0004") val DDL_DIRECTORY = W (hex "0x0010") val DDL_ARCHIVE = W (hex "0x0020") val DDL_POSTMSGS = W (hex "0x2000") val DDL_DRIVES = W (hex "0x4000") val DDL_EXCLUSIVE = W (hex "0x8000") end (*------------------------------------------------------------------------------ INDEX: DialogStyle ------------------------------------------------------------------------------*) (* CreateWindow() *) (*TYPE: DialogStyle *) local datatype DialogStyle = W of int in type DialogStyle = DialogStyle val DialogStyleE = encoding (W,fn W n => n) val DS_ABSALIGN = W (hex "0x01") val DS_SYSMODAL = W (hex "0x02") val DS_LOCALEDIT = W (hex "0x20" (* Edit items get Local storage. *)) val DS_SETFONT = W (hex "0x40" (* User specified font for Dlg controls *)) val DS_MODALFRAME = W (hex "0x80" (* Can be combined with WS_CAPTION *)) val DS_NOIDLEMSG = W (hex "0x100" (* WM_ENTERIDLE message will not be sent *)) val DS_SETFOREGROUND = W (hex "0x200" (* not in win3.1 *)) end (*------------------------------------------------------------------------------ INDEX: DefaultMessageAction ------------------------------------------------------------------------------*) (*TYPE: DefaultMessageAction *) local datatype DefaultMessageAction = W of int in type DefaultMessageAction = DefaultMessageAction val DefaultMessageActionE = encoding (W,fn W n => n) val DM_GETDEFID = W ((repE WindowMessageE WM_USER+0)) val DM_SETDEFID = W ((repE WindowMessageE WM_USER+1)) end (*------------------------------------------------------------------------------ INDEX: PROB ------------------------------------------------------------------------------*) val DC_HASDEFID = (hex "0x534B") (*------------------------------------------------------------------------------ INDEX: DialogCode ------------------------------------------------------------------------------*) (* Dialog codes *) (*TYPE: DialogCode *) local datatype DialogCode = W of int in type DialogCode = DialogCode val DialogCodeE = encoding (W,fn W n => n) val DLGC_WANTARROWS = W (hex "0x0001" (* Control wants arrow keys *)) val DLGC_WANTTAB = W (hex "0x0002" (* Control wants tab keys *)) val DLGC_WANTALLKEYS = W (hex "0x0004" (* Control wants all keys *)) val DLGC_WANTMESSAGE = W (hex "0x0004" (* Pass message to control *)) val DLGC_HASSETSEL = W (hex "0x0008" (* Understands EM_SETSEL message *)) val DLGC_DEFPUSHBUTTON = W (hex "0x0010" (* Default pushbutton *)) val DLGC_UNDEFPUSHBUTTON = W (hex "0x0020" (* Non~default pushbutton *)) val DLGC_RADIOBUTTON = W (hex "0x0040" (* Radio button *)) val DLGC_WANTCHARS = W (hex "0x0080" (* Want WM_CHAR messages *)) val DLGC_STATIC = W (hex "0x0100" (* Static item: don't include *)) val DLGC_BUTTON = W (hex "0x2000" (* Button item: can be checked *)) end (*------------------------------------------------------------------------------ INDEX: ListBoxFlag ------------------------------------------------------------------------------*) (*TYPE: ListBoxFlag *) local datatype ListBoxFlag = W of int in type ListBoxFlag = ListBoxFlag val ListBoxFlagE = encoding (W,fn W n => n) val LB_CTLCODE = W (0) val LB_OKAY = W (0) val LB_ERR = W ((~1)) val LB_ERRSPACE = W ((~2)) end (*------------------------------------------------------------------------------ INDEX: ListBoxAction ------------------------------------------------------------------------------*) (* ListBox return consts and messages *) (*TYPE: ListBoxAction *) local datatype ListBoxAction = W of int in type ListBoxAction = ListBoxAction val ListBoxActionE = encoding (W,fn W n => n) val LB_ADDSTRING = W (hex "0x0180") val LB_INSERTSTRING = W (hex "0x0181") val LB_DELETESTRING = W (hex "0x0182") val LB_SELITEMRANGEEX = W (hex "0x0183") val LB_RESETCONTENT = W (hex "0x0184") val LB_SETSEL = W (hex "0x0185") val LB_SETCURSEL = W (hex "0x0186") val LB_GETSEL = W (hex "0x0187") val LB_GETCURSEL = W (hex "0x0188") val LB_GETTEXT = W (hex "0x0189") val LB_GETTEXTLEN = W (hex "0x018A") val LB_GETCOUNT = W (hex "0x018B") val LB_SELECTSTRING = W (hex "0x018C") val LB_DIR = W (hex "0x018D") val LB_GETTOPINDEX = W (hex "0x018E") val LB_FINDSTRING = W (hex "0x018F") val LB_GETSELCOUNT = W (hex "0x0190") val LB_GETSELITEMS = W (hex "0x0191") val LB_SETTABSTOPS = W (hex "0x0192") val LB_GETHORIZONTALEXTENT = W (hex "0x0193") val LB_SETHORIZONTALEXTENT = W (hex "0x0194") val LB_SETCOLUMNWIDTH = W (hex "0x0195") val LB_ADDFILE = W (hex "0x0196") val LB_SETTOPINDEX = W (hex "0x0197") val LB_GETITEMRECT = W (hex "0x0198") val LB_GETITEMDATA = W (hex "0x0199") val LB_SETITEMDATA = W (hex "0x019A") val LB_SELITEMRANGE = W (hex "0x019B") val LB_SETANCHORINDEX = W (hex "0x019C") val LB_GETANCHORINDEX = W (hex "0x019D") val LB_SETCARETINDEX = W (hex "0x019E") val LB_GETCARETINDEX = W (hex "0x019F") val LB_SETITEMHEIGHT = W (hex "0x01A0") val LB_GETITEMHEIGHT = W (hex "0x01A1") val LB_FINDSTRINGEXACT = W (hex "0x01A2") val LB_SETLOCALE = W (hex "0x01A5") val LB_GETLOCALE = W (hex "0x01A6") val LB_SETCOUNT = W (hex "0x01A7") val LB_MSGMAX = W (hex "0x01A8") end (*------------------------------------------------------------------------------ INDEX: ListBoxStyle ------------------------------------------------------------------------------*) (* List Box Styles *) (*TYPE: ListBoxStyle *) local datatype ListBoxStyle = W of int in type ListBoxStyle = ListBoxStyle val ListBoxStyleE = encoding (W,fn W n => n) val LBS_NOTIFY = W (hex "0x0001") val LBS_SORT = W (hex "0x0002") val LBS_NOREDRAW = W (hex "0x0004") val LBS_MULTIPLESEL = W (hex "0x0008") val LBS_OWNERDRAWFIXED = W (hex "0x0010") val LBS_OWNERDRAWVARIABLE = W (hex "0x0020") val LBS_HASSTRINGS = W (hex "0x0040") val LBS_USETABSTOPS = W (hex "0x0080") val LBS_NOINTEGRALHEIGHT = W (hex "0x0100") val LBS_MULTICOLUMN = W (hex "0x0200") val LBS_WANTKEYBOARDINPUT = W (hex "0x0400") val LBS_EXTENDEDSEL = W (hex "0x0800") val LBS_DISABLENOSCROLL = W (hex "0x1000") val LBS_NODATA = W (hex "0x2000") val LBS_STANDARD = orLE ListBoxStyleE [LBS_NOTIFY, LBS_SORT, W (repE WindowStyleE WS_VSCROLL), W (repE WindowStyleE WS_BORDER)] val LBS_OVERLAPPED = W (hex "0x00000000") val LBS_POPUP = W (hex "0x80000000") val LBS_CHILD = W (hex "0x40000000") val LBS_MINIMIZE = W (hex "0x20000000") val LBS_VISIBLE = W (hex "0x10000000") val LBS_DISABLED = W (hex "0x08000000") val LBS_CLIPSIBLINGS = W (hex "0x04000000") val LBS_CLIPCHILDREN = W (hex "0x02000000") val LBS_MAXIMIZE = W (hex "0x01000000") val LBS_CAPTION = W (hex "0x00C00000") val LBS_BORDER = W (hex "0x00800000") val LBS_DLGFRAME = W (hex "0x00400000") val LBS_VSCROLL = W (hex "0x00200000") val LBS_HSCROLL = W (hex "0x00100000") val LBS_SYSMENU = W (hex "0x00080000") val LBS_THICKFRAME = W (hex "0x00040000") val LBS_GROUP = W (hex "0x00020000") val LBS_TABSTOP = W (hex "0x00010000") val LBS_MINIMIZEBOX = W (hex "0x00020000") val LBS_MAXIMIZEBOX = W (hex "0x00010000") val LBS_TILED = LBS_OVERLAPPED val LBS_ICONIC = LBS_MINIMIZE val LBS_SIZEBOX = LBS_THICKFRAME val LBS_OVERLAPPEDWINDOW = orLE ListBoxStyleE [LBS_OVERLAPPED, LBS_CAPTION, LBS_SYSMENU, LBS_THICKFRAME, LBS_MINIMIZEBOX, LBS_MAXIMIZEBOX] val LBS_TILEDWINDOW = LBS_OVERLAPPEDWINDOW val LBS_POPUPWINDOW = orLE ListBoxStyleE [LBS_POPUP, LBS_BORDER, LBS_SYSMENU] val LBS_CHILDWINDOW = LBS_CHILD end (*------------------------------------------------------------------------------ INDEX: ComboBoxValue ------------------------------------------------------------------------------*) (* Combo box message return value *) (*TYPE: ComboBoxValue *) local datatype ComboBoxValue = W of int in type ComboBoxValue = ComboBoxValue val ComboBoxValueE = encoding (W,fn W n => n) val CB_OKAY = W (0) val CB_ERR = W ((~1)) val CB_ERRSPACE = W ((~2)) end (*------------------------------------------------------------------------------ INDEX: ComboBoxStyle ------------------------------------------------------------------------------*) (* Combo Box styles *) (*TYPE: ComboBoxStyle *) local datatype ComboBoxStyle = W of int in type ComboBoxStyle = ComboBoxStyle val ComboBoxStyleE = encoding (W,fn W n => n) val CBS_SIMPLE = W (hex "0x0001") val CBS_DROPDOWN = W (hex "0x0002") val CBS_DROPDOWNLIST = W (hex "0x0003") val CBS_OWNERDRAWFIXED = W (hex "0x0010") val CBS_OWNERDRAWVARIABLE = W (hex "0x0020") val CBS_AUTOHSCROLL = W (hex "0x0040") val CBS_OEMCONVERT = W (hex "0x0080") val CBS_SORT = W (hex "0x0100") val CBS_HASSTRINGS = W (hex "0x0200") val CBS_NOINTEGRALHEIGHT = W (hex "0x0400") val CBS_DISABLENOSCROLL = W (hex "0x0800") val CBS_OVERLAPPED = W (hex "0x00000000") val CBS_POPUP = W (hex "0x80000000") val CBS_CHILD = W (hex "0x40000000") val CBS_MINIMIZE = W (hex "0x20000000") val CBS_VISIBLE = W (hex "0x10000000") val CBS_DISABLED = W (hex "0x08000000") val CBS_CLIPSIBLINGS = W (hex "0x04000000") val CBS_CLIPCHILDREN = W (hex "0x02000000") val CBS_MAXIMIZE = W (hex "0x01000000") val CBS_CAPTION = W (hex "0x00C00000") val CBS_BORDER = W (hex "0x00800000") val CBS_DLGFRAME = W (hex "0x00400000") val CBS_VSCROLL = W (hex "0x00200000") val CBS_HSCROLL = W (hex "0x00100000") val CBS_SYSMENU = W (hex "0x00080000") val CBS_THICKFRAME = W (hex "0x00040000") val CBS_GROUP = W (hex "0x00020000") val CBS_TABSTOP = W (hex "0x00010000") val CBS_MINIMIZEBOX = W (hex "0x00020000") val CBS_MAXIMIZEBOX = W (hex "0x00010000") val CBS_TILED = CBS_OVERLAPPED val CBS_ICONIC = CBS_MINIMIZE val CBS_SIZEBOX = CBS_THICKFRAME val CBS_OVERLAPPEDWINDOW = orLE ComboBoxStyleE [CBS_OVERLAPPED, CBS_CAPTION, CBS_SYSMENU, CBS_THICKFRAME, CBS_MINIMIZEBOX, CBS_MAXIMIZEBOX] val CBS_TILEDWINDOW = CBS_OVERLAPPEDWINDOW val CBS_POPUPWINDOW = orLE ComboBoxStyleE [CBS_POPUP, CBS_BORDER, CBS_SYSMENU] val CBS_CHILDWINDOW = CBS_CHILD end (*------------------------------------------------------------------------------ INDEX: ComboBoxAction ------------------------------------------------------------------------------*) (* Combo Box return values and messages *) (*TYPE: ComboBoxAction *) local datatype ComboBoxAction = W of int in type ComboBoxAction = ComboBoxAction val ComboBoxActionE = encoding (W,fn W n => n) val CB_GETEDITSEL = W (hex "0x0140") val CB_LIMITTEXT = W (hex "0x0141") val CB_SETEDITSEL = W (hex "0x0142") val CB_ADDSTRING = W (hex "0x0143") val CB_DELETESTRING = W (hex "0x0144") val CB_DIR = W (hex "0x0145") val CB_GETCOUNT = W (hex "0x0146") val CB_GETCURSEL = W (hex "0x0147") val CB_GETLBTEXT = W (hex "0x0148") val CB_GETLBTEXTLEN = W (hex "0x0149") val CB_INSERTSTRING = W (hex "0x014A") val CB_RESETCONTENT = W (hex "0x014B") val CB_FINDSTRING = W (hex "0x014C") val CB_SELECTSTRING = W (hex "0x014D") val CB_SETCURSEL = W (hex "0x014E") val CB_SHOWDROPDOWN = W (hex "0x014F") val CB_GETITEMDATA = W (hex "0x0150") val CB_SETITEMDATA = W (hex "0x0151") val CB_GETDROPPEDCONTROLRECT = W (hex "0x0152") val CB_SETITEMHEIGHT = W (hex "0x0153") val CB_GETITEMHEIGHT = W (hex "0x0154") val CB_SETEXTENDEDUI = W (hex "0x0155") val CB_GETEXTENDEDUI = W (hex "0x0156") val CB_GETDROPPEDSTATE = W (hex "0x0157") val CB_FINDSTRINGEXACT = W (hex "0x0158") val CB_SETLOCALE = W (hex "0x0159") val CB_GETLOCALE = W (hex "0x015a") val CB_MSGMAX = W (hex "0x015b") end (*------------------------------------------------------------------------------ INDEX: ScrollBarStyle ------------------------------------------------------------------------------*) (* Scroll Bar styles *) (*TYPE: ScrollBarStyle *) local datatype ScrollBarStyle = W of int in type ScrollBarStyle = ScrollBarStyle val ScrollBarStyleE = encoding (W,fn W n => n) val SBS_HORZ = W (hex "0x0000") val SBS_VERT = W (hex "0x0001") val SBS_TOPALIGN = W (hex "0x0002") val SBS_LEFTALIGN = W (hex "0x0002") val SBS_BOTTOMALIGN = W (hex "0x0004") val SBS_RIGHTALIGN = W (hex "0x0004") val SBS_SIZEBOXTOPLEFTALIGN = W (hex "0x0002") val SBS_SIZEBOXBOTTOMRIGHTALIGN = W (hex "0x0004") val SBS_SIZEBOX = W (hex "0x0008") val SBS_OVERLAPPED = W (hex "0x00000000") val SBS_POPUP = W (hex "0x80000000") val SBS_CHILD = W (hex "0x40000000") val SBS_MINIMIZE = W (hex "0x20000000") val SBS_VISIBLE = W (hex "0x10000000") val SBS_DISABLED = W (hex "0x08000000") val SBS_CLIPSIBLINGS = W (hex "0x04000000") val SBS_CLIPCHILDREN = W (hex "0x02000000") val SBS_MAXIMIZE = W (hex "0x01000000") val SBS_CAPTION = W (hex "0x00C00000") val SBS_BORDER = W (hex "0x00800000") val SBS_DLGFRAME = W (hex "0x00400000") val SBS_VSCROLL = W (hex "0x00200000") val SBS_HSCROLL = W (hex "0x00100000") val SBS_SYSMENU = W (hex "0x00080000") val SBS_THICKFRAME = W (hex "0x00040000") val SBS_GROUP = W (hex "0x00020000") val SBS_TABSTOP = W (hex "0x00010000") val SBS_MINIMIZEBOX = W (hex "0x00020000") val SBS_MAXIMIZEBOX = W (hex "0x00010000") val SBS_TILED = SBS_OVERLAPPED val SBS_ICONIC = SBS_MINIMIZE val SBS_SIZEBOX = SBS_THICKFRAME val SBS_OVERLAPPEDWINDOW = orLE ScrollBarStyleE [SBS_OVERLAPPED, SBS_CAPTION, SBS_SYSMENU, SBS_THICKFRAME, SBS_MINIMIZEBOX, SBS_MAXIMIZEBOX] val SBS_TILEDWINDOW = SBS_OVERLAPPEDWINDOW val SBS_POPUPWINDOW = orLE ScrollBarStyleE [SBS_POPUP, SBS_BORDER, SBS_SYSMENU] val SBS_CHILDWINDOW = SBS_CHILD end (*------------------------------------------------------------------------------ INDEX: ScrollBarAction ------------------------------------------------------------------------------*) (*TYPE: ScrollBarAction *) local datatype ScrollBarAction = W of int in type ScrollBarAction = ScrollBarAction val ScrollBarActionE = encoding (W,fn W n => n) val SBM_SETPOS = W (hex "0x00E0" (* not in win3.1 *)) val SBM_GETPOS = W (hex "0x00E1" (* not in win3.1 *)) val SBM_SETRANGE = W (hex "0x00E2" (* not in win3.1 *)) val SBM_SETRANGEREDRAW = W (hex "0x00E6" (* not in win3.1 *)) val SBM_GETRANGE = W (hex "0x00E3" (* not in win3.1 *)) val SBM_ENABLE_ARROWS = W (hex "0x00E4" (* not in win3.1 *)) end (*------------------------------------------------------------------------------ INDEX: HelpOption ------------------------------------------------------------------------------*) (*TYPE: HelpOption *) local datatype HelpOption = W of int in type HelpOption = HelpOption val HelpOptionE = encoding (W,fn W n => n) val HELP_CONTEXT = W (hex "0x0001" (* Display topic in ulTopic *)) val HELP_QUIT = W (hex "0x0002" (* Terminate help *)) val HELP_INDEX = W (hex "0x0003" (* Display index *)) val HELP_CONTENTS = W (hex "0x0003") val HELP_HELPONHELP = W (hex "0x0004" (* Display help on using help *)) val HELP_SETINDEX = W (hex "0x0005" (* Set current Index for multi index help *)) val HELP_SETCONTENTS = W (hex "0x0005") val HELP_CONTEXTPOPUP = W (hex "0x0008") val HELP_FORCEFILE = W (hex "0x0009") val HELP_KEY = W (hex "0x0101" (* Display topic for keyword in offabData *)) val HELP_COMMAND = W (hex "0x0102") val HELP_PARTIALKEY = W (hex "0x0105") val HELP_MULTIKEY = W (hex "0x0201") val HELP_SETWINPOS = W (hex "0x0203") end (*------------------------------------------------------------------------------ INDEX: SysParamInfo ------------------------------------------------------------------------------*) (* SystemParameterInfo() *) (*TYPE: SysParamInfo *) local datatype SysParamInfo = W of int in type SysParamInfo = SysParamInfo val SysParamInfoE = encoding (W,fn W n => n) val SPI_GETBEEP = W (1) val SPI_SETBEEP = W (2) val SPI_GETMOUSE = W (3) val SPI_SETMOUSE = W (4) val SPI_GETBORDER = W (5) val SPI_SETBORDER = W (6) val SPI_GETKEYBOARDSPEED = W (10) val SPI_SETKEYBOARDSPEED = W (11) val SPI_LANGDRIVER = W (12) val SPI_ICONHORIZONTALSPACING = W (13) val SPI_GETSCREENSAVETIMEOUT = W (14) val SPI_SETSCREENSAVETIMEOUT = W (15) val SPI_GETSCREENSAVEACTIVE = W (16) val SPI_SETSCREENSAVEACTIVE = W (17) val SPI_GETGRIDGRANULARITY = W (18) val SPI_SETGRIDGRANULARITY = W (19) val SPI_SETDESKWALLPAPER = W (20) val SPI_SETDESKPATTERN = W (21) val SPI_GETKEYBOARDDELAY = W (22) val SPI_SETKEYBOARDDELAY = W (23) val SPI_ICONVERTICALSPACING = W (24) val SPI_GETICONTITLEWRAP = W (25) val SPI_SETICONTITLEWRAP = W (26) val SPI_GETMENUDROPALIGNMENT = W (27) val SPI_SETMENUDROPALIGNMENT = W (28) val SPI_SETDOUBLECLKWIDTH = W (29) val SPI_SETDOUBLECLKHEIGHT = W (30) val SPI_GETICONTITLELOGFONT = W (31) val SPI_SETDOUBLECLICKTIME = W (32) val SPI_SETMOUSEBUTTONSWAP = W (33) val SPI_SETICONTITLELOGFONT = W (34) val SPI_GETFASTTASKSWITCH = W (35) val SPI_SETFASTTASKSWITCH = W (36) val SPIF_UPDATEINIFILE = W (hex "0x0001") val SPIF_SENDWININICHANGE = W (hex "0x0002") end (*------------------------------------------------------------------------------ INDEX: conversions ------------------------------------------------------------------------------*) structure Conversions = struct val DocumentMode = conversionOfEncoding DocumentModeE val DeviceCapability = conversionOfEncoding DeviceCapabilityE val RasterOperation = conversionOfEncoding RasterOperationE val RasterOpCode = conversionOfEncoding RasterOpCodeE val GdiError = conversionOfEncoding GdiErrorE val ResultRegion = conversionOfEncoding ResultRegionE val RegionOperation = conversionOfEncoding RegionOperationE val StretchMode = conversionOfEncoding StretchModeE val PolyFillMode = conversionOfEncoding PolyFillModeE val TextAlign = conversionOfEncoding TextAlignE val VirtualTextAlign = conversionOfEncoding VirtualTextAlignE val ExtendedTextOut = conversionOfEncoding ExtendedTextOutE val DCBound = conversionOfEncoding DCBoundE val MetaFunction = conversionOfEncoding MetaFunctionE val GDIEscapes = conversionOfEncoding GDIEscapesE val SpoolerErrorCode = conversionOfEncoding SpoolerErrorCodeE val EnumObject = conversionOfEncoding EnumObjectE val XFormType = conversionOfEncoding XFormTypeE val BitmapCompression = conversionOfEncoding BitmapCompressionE val TextMetricPitchandFamily = conversionOfEncoding TextMetricPitchandFamilyE val NewTextMetric = conversionOfEncoding NewTextMetricE val LogicalFont = conversionOfEncoding LogicalFontE val OutputPrecision = conversionOfEncoding OutputPrecisionE val ClippingPrecision = conversionOfEncoding ClippingPrecisionE val OutputQuality = conversionOfEncoding OutputQualityE val FontPitch = conversionOfEncoding FontPitchE val CharacterSet = conversionOfEncoding CharacterSetE val FontFamily = conversionOfEncoding FontFamilyE val FontWeight = conversionOfEncoding FontWeightE val CulturePANOSE = conversionOfEncoding CulturePANOSEE val FamilyTypePANOSE = conversionOfEncoding FamilyTypePANOSEE val IndexPANOSE = conversionOfEncoding IndexPANOSEE val SerifStylePANOSE = conversionOfEncoding SerifStylePANOSEE val WeightPANOSE = conversionOfEncoding WeightPANOSEE val ProportionPANOSE = conversionOfEncoding ProportionPANOSEE val ContrastPANOSE = conversionOfEncoding ContrastPANOSEE val StrokeVariationPANOSE = conversionOfEncoding StrokeVariationPANOSEE val ArmStylePANOSE = conversionOfEncoding ArmStylePANOSEE val LetterFormPANOSE = conversionOfEncoding LetterFormPANOSEE val MidlinePANOSE = conversionOfEncoding MidlinePANOSEE val XHeightPANOSE = conversionOfEncoding XHeightPANOSEE val ExtLogFont = conversionOfEncoding ExtLogFontE val FontType = conversionOfEncoding FontTypeE val PaletteEntryFlag = conversionOfEncoding PaletteEntryFlagE val BkMode = conversionOfEncoding BkModeE val GraphicsMode = conversionOfEncoding GraphicsModeE val PointType = conversionOfEncoding PointTypeE val MapMode = conversionOfEncoding MapModeE val TransMode = conversionOfEncoding TransModeE val StockObjectType = conversionOfEncoding StockObjectTypeE val BrushStyle = conversionOfEncoding BrushStyleE val HatchStyle = conversionOfEncoding HatchStyleE val PenStyle = conversionOfEncoding PenStyleE val DeviceItem = conversionOfEncoding DeviceItemE val DeviceTechnology = conversionOfEncoding DeviceTechnologyE val CurveCapability = conversionOfEncoding CurveCapabilityE val LineCapability = conversionOfEncoding LineCapabilityE val PolygonalCapability = conversionOfEncoding PolygonalCapabilityE val ClippingCapability = conversionOfEncoding ClippingCapabilityE val TextCapability = conversionOfEncoding TextCapabilityE val RasterCapability = conversionOfEncoding RasterCapabilityE val DeviceIndependentPalette = conversionOfEncoding DeviceIndependentPaletteE val SystemPaletteUse = conversionOfEncoding SystemPaletteUseE val BitmapInit = conversionOfEncoding BitmapInitE val FloodFillMode = conversionOfEncoding FloodFillModeE val DeviceMode = conversionOfEncoding DeviceModeE val PaperOrientation = conversionOfEncoding PaperOrientationE val PaperSize = conversionOfEncoding PaperSizeE val BinMode = conversionOfEncoding BinModeE val DevModeResolution = conversionOfEncoding DevModeResolutionE val DocumentMode = conversionOfEncoding DocumentModeE val DeviceCapability = conversionOfEncoding DeviceCapabilityE val ResourceType = conversionOfEncoding ResourceTypeE val ScrollBarType = conversionOfEncoding ScrollBarTypeE val ShowWindowMode = conversionOfEncoding ShowWindowModeE val KeyFunction = conversionOfEncoding KeyFunctionE val VirtualKey = conversionOfEncoding VirtualKeyE val WindowHook = conversionOfEncoding WindowHookE val HookCode = conversionOfEncoding HookCodeE val HookProcedureCode = conversionOfEncoding HookProcedureCodeE val InputEventType = conversionOfEncoding InputEventTypeE val KeyLayoutFlag = conversionOfEncoding KeyLayoutFlagE val DesktopOperation = conversionOfEncoding DesktopOperationE val WindowStationAccess = conversionOfEncoding WindowStationAccessE val GetWindowLongParam = conversionOfEncoding GetWindowLongParamE val GetWindowLongValue = conversionOfEncoding GetWindowLongValueE val WindowActivationState = conversionOfEncoding WindowActivationStateE val PowerState = conversionOfEncoding PowerStateE val WindowMessage = conversionOfEncoding WindowMessageE val HitTest = conversionOfEncoding HitTestE val SendMessageTimeOut = conversionOfEncoding SendMessageTimeOutE val MessageActivateFlag = conversionOfEncoding MessageActivateFlagE val SizeFlag = conversionOfEncoding SizeFlagE val WindowAttribute = conversionOfEncoding WindowAttributeE val MouseKey = conversionOfEncoding MouseKeyE val WindowStyle = conversionOfEncoding WindowStyleE val WindowStyleExtended = conversionOfEncoding WindowStyleExtendedE val ClassStyle = conversionOfEncoding ClassStyleE val ClipboardFormat = conversionOfEncoding ClipboardFormatE val AccelaratorFunction = conversionOfEncoding AccelaratorFunctionE val WindowPlacementFlag = conversionOfEncoding WindowPlacementFlagE val OwnerDrawnType = conversionOfEncoding OwnerDrawnTypeE val OwnerDrawnAction = conversionOfEncoding OwnerDrawnActionE val PeekMessageAction = conversionOfEncoding PeekMessageActionE val HotKeyModifier = conversionOfEncoding HotKeyModifierE val HotKeyIdentifier = conversionOfEncoding HotKeyIdentifierE val ExitWindowMode = conversionOfEncoding ExitWindowModeE val SetWindowPositionStyle = conversionOfEncoding SetWindowPositionStyleE val KeyEvent = conversionOfEncoding KeyEventE val MouseEvent = conversionOfEncoding MouseEventE val QueueStatus = conversionOfEncoding QueueStatusE val SystemMetrics = conversionOfEncoding SystemMetricsE val TrackPopMenu = conversionOfEncoding TrackPopMenuE val DrawTextMode = conversionOfEncoding DrawTextModeE val DeviceContextFlag = conversionOfEncoding DeviceContextFlagE val RedrawWindowFlag = conversionOfEncoding RedrawWindowFlagE val ScrollWindowFlag = conversionOfEncoding ScrollWindowFlagE val EnableScrollBarFlag = conversionOfEncoding EnableScrollBarFlagE val MessageBoxValue = conversionOfEncoding MessageBoxValueE val ControlColor = conversionOfEncoding ControlColorE val ColorType = conversionOfEncoding ColorTypeE val GetWindowFlag = conversionOfEncoding GetWindowFlagE val MenuFlag = conversionOfEncoding MenuFlagE val SystemCommand = conversionOfEncoding SystemCommandE val CursorIdentifier = conversionOfEncoding CursorIdentifierE val BitmapOption = conversionOfEncoding BitmapOptionE val OCRFlag = conversionOfEncoding OCRFlagE val OICFlag = conversionOfEncoding OICFlagE val IconIdentifier = conversionOfEncoding IconIdentifierE val MessageBoxIdentifier = conversionOfEncoding MessageBoxIdentifierE val EditStyle = conversionOfEncoding EditStyleE val ControlNotification = conversionOfEncoding ControlNotificationE val EditCtlBehaviour = conversionOfEncoding EditCtlBehaviourE val WordBreakFlag = conversionOfEncoding WordBreakFlagE val ButtonStyle = conversionOfEncoding ButtonStyleE val ButtonMessageEnquiry = conversionOfEncoding ButtonMessageEnquiryE val StaticStyle = conversionOfEncoding StaticStyleE val StaticMessage = conversionOfEncoding StaticMessageE val DWLParameter = conversionOfEncoding DWLParameterE val DialogBoxFlag = conversionOfEncoding DialogBoxFlagE val DialogStyle = conversionOfEncoding DialogStyleE val DefaultMessageAction = conversionOfEncoding DefaultMessageActionE val DialogCode = conversionOfEncoding DialogCodeE val ListBoxFlag = conversionOfEncoding ListBoxFlagE val ListBoxAction = conversionOfEncoding ListBoxActionE val ListBoxStyle = conversionOfEncoding ListBoxStyleE val ComboBoxValue = conversionOfEncoding ComboBoxValueE val ComboBoxStyle = conversionOfEncoding ComboBoxStyleE val ComboBoxAction = conversionOfEncoding ComboBoxActionE val ScrollBarStyle = conversionOfEncoding ScrollBarStyleE val ScrollBarAction = conversionOfEncoding ScrollBarActionE val HelpOption = conversionOfEncoding HelpOptionE val SysParamInfo = conversionOfEncoding SysParamInfoE end (*------------------------------------------------------------------------------ INDEX: upper case conversions ------------------------------------------------------------------------------*) structure UpperCaseConversions = struct val DOCUMENTMODE = conversionOfEncoding DocumentModeE val DEVICECAPABILITY = conversionOfEncoding DeviceCapabilityE val RASTEROPERATION = conversionOfEncoding RasterOperationE val RASTEROPCODE = conversionOfEncoding RasterOpCodeE val GDIERROR = conversionOfEncoding GdiErrorE val RESULTREGION = conversionOfEncoding ResultRegionE val REGIONOPERATION = conversionOfEncoding RegionOperationE val STRETCHMODE = conversionOfEncoding StretchModeE val POLYFILLMODE = conversionOfEncoding PolyFillModeE val TEXTALIGN = conversionOfEncoding TextAlignE val VIRTUALTEXTALIGN = conversionOfEncoding VirtualTextAlignE val EXTENDEDTEXTOUT = conversionOfEncoding ExtendedTextOutE val DCBOUND = conversionOfEncoding DCBoundE val METAFUNCTION = conversionOfEncoding MetaFunctionE val GDIESCAPES = conversionOfEncoding GDIEscapesE val SPOOLERERRORCODE = conversionOfEncoding SpoolerErrorCodeE val ENUMOBJECT = conversionOfEncoding EnumObjectE val XFORMTYPE = conversionOfEncoding XFormTypeE val BITMAPCOMPRESSION = conversionOfEncoding BitmapCompressionE val TEXTMETRICPITCHANDFAMILY = conversionOfEncoding TextMetricPitchandFamilyE val NEWTEXTMETRIC = conversionOfEncoding NewTextMetricE val LOGICALFONT = conversionOfEncoding LogicalFontE val OUTPUTPRECISION = conversionOfEncoding OutputPrecisionE val CLIPPINGPRECISION = conversionOfEncoding ClippingPrecisionE val OUTPUTQUALITY = conversionOfEncoding OutputQualityE val FONTPITCH = conversionOfEncoding FontPitchE val CHARACTERSET = conversionOfEncoding CharacterSetE val FONTFAMILY = conversionOfEncoding FontFamilyE val FONTWEIGHT = conversionOfEncoding FontWeightE val CULTUREPANOSE = conversionOfEncoding CulturePANOSEE val FAMILYTYPEPANOSE = conversionOfEncoding FamilyTypePANOSEE val INDEXPANOSE = conversionOfEncoding IndexPANOSEE val SERIFSTYLEPANOSE = conversionOfEncoding SerifStylePANOSEE val WEIGHTPANOSE = conversionOfEncoding WeightPANOSEE val PROPORTIONPANOSE = conversionOfEncoding ProportionPANOSEE val CONTRASTPANOSE = conversionOfEncoding ContrastPANOSEE val STROKEVARIATIONPANOSE = conversionOfEncoding StrokeVariationPANOSEE val ARMSTYLEPANOSE = conversionOfEncoding ArmStylePANOSEE val LETTERFORMPANOSE = conversionOfEncoding LetterFormPANOSEE val MIDLINEPANOSE = conversionOfEncoding MidlinePANOSEE val XHEIGHTPANOSE = conversionOfEncoding XHeightPANOSEE val EXTLOGFONT = conversionOfEncoding ExtLogFontE val FONTTYPE = conversionOfEncoding FontTypeE val PALETTEENTRYFLAG = conversionOfEncoding PaletteEntryFlagE val BKMODE = conversionOfEncoding BkModeE val GRAPHICSMODE = conversionOfEncoding GraphicsModeE val POINTTYPE = conversionOfEncoding PointTypeE val MAPMODE = conversionOfEncoding MapModeE val TRANSMODE = conversionOfEncoding TransModeE val STOCKOBJECTTYPE = conversionOfEncoding StockObjectTypeE val BRUSHSTYLE = conversionOfEncoding BrushStyleE val HATCHSTYLE = conversionOfEncoding HatchStyleE val PENSTYLE = conversionOfEncoding PenStyleE val DEVICEITEM = conversionOfEncoding DeviceItemE val DEVICETECHNOLOGY = conversionOfEncoding DeviceTechnologyE val CURVECAPABILITY = conversionOfEncoding CurveCapabilityE val LINECAPABILITY = conversionOfEncoding LineCapabilityE val POLYGONALCAPABILITY = conversionOfEncoding PolygonalCapabilityE val CLIPPINGCAPABILITY = conversionOfEncoding ClippingCapabilityE val TEXTCAPABILITY = conversionOfEncoding TextCapabilityE val RASTERCAPABILITY = conversionOfEncoding RasterCapabilityE val DEVICEINDEPENDENTPALETTE = conversionOfEncoding DeviceIndependentPaletteE val SYSTEMPALETTEUSE = conversionOfEncoding SystemPaletteUseE val BITMAPINIT = conversionOfEncoding BitmapInitE val FLOODFILLMODE = conversionOfEncoding FloodFillModeE val DEVICEMODE = conversionOfEncoding DeviceModeE val PAPERORIENTATION = conversionOfEncoding PaperOrientationE val PAPERSIZE = conversionOfEncoding PaperSizeE val BINMODE = conversionOfEncoding BinModeE val DEVMODERESOLUTION = conversionOfEncoding DevModeResolutionE val DOCUMENTMODE = conversionOfEncoding DocumentModeE val DEVICECAPABILITY = conversionOfEncoding DeviceCapabilityE val RESOURCETYPE = conversionOfEncoding ResourceTypeE val SCROLLBARTYPE = conversionOfEncoding ScrollBarTypeE val SHOWWINDOWMODE = conversionOfEncoding ShowWindowModeE val KEYFUNCTION = conversionOfEncoding KeyFunctionE val VIRTUALKEY = conversionOfEncoding VirtualKeyE val WINDOWHOOK = conversionOfEncoding WindowHookE val HOOKCODE = conversionOfEncoding HookCodeE val HOOKPROCEDURECODE = conversionOfEncoding HookProcedureCodeE val INPUTEVENTTYPE = conversionOfEncoding InputEventTypeE val KEYLAYOUTFLAG = conversionOfEncoding KeyLayoutFlagE val DESKTOPOPERATION = conversionOfEncoding DesktopOperationE val WINDOWSTATIONACCESS = conversionOfEncoding WindowStationAccessE val GETWINDOWLONGPARAM = conversionOfEncoding GetWindowLongParamE val GETWINDOWLONGVALUE = conversionOfEncoding GetWindowLongValueE val WINDOWACTIVATIONSTATE = conversionOfEncoding WindowActivationStateE val POWERSTATE = conversionOfEncoding PowerStateE val WINDOWMESSAGE = conversionOfEncoding WindowMessageE val HITTEST = conversionOfEncoding HitTestE val SENDMESSAGETIMEOUT = conversionOfEncoding SendMessageTimeOutE val MESSAGEACTIVATEFLAG = conversionOfEncoding MessageActivateFlagE val SIZEFLAG = conversionOfEncoding SizeFlagE val WINDOWATTRIBUTE = conversionOfEncoding WindowAttributeE val MOUSEKEY = conversionOfEncoding MouseKeyE val WINDOWSTYLE = conversionOfEncoding WindowStyleE val WINDOWSTYLEEXTENDED = conversionOfEncoding WindowStyleExtendedE val CLASSSTYLE = conversionOfEncoding ClassStyleE val CLIPBOARDFORMAT = conversionOfEncoding ClipboardFormatE val ACCELARATORFUNCTION = conversionOfEncoding AccelaratorFunctionE val WINDOWPLACEMENTFLAG = conversionOfEncoding WindowPlacementFlagE val OWNERDRAWNTYPE = conversionOfEncoding OwnerDrawnTypeE val OWNERDRAWNACTION = conversionOfEncoding OwnerDrawnActionE val PEEKMESSAGEACTION = conversionOfEncoding PeekMessageActionE val HOTKEYMODIFIER = conversionOfEncoding HotKeyModifierE val HOTKEYIDENTIFIER = conversionOfEncoding HotKeyIdentifierE val EXITWINDOWMODE = conversionOfEncoding ExitWindowModeE val SETWINDOWPOSITIONSTYLE = conversionOfEncoding SetWindowPositionStyleE val KEYEVENT = conversionOfEncoding KeyEventE val MOUSEEVENT = conversionOfEncoding MouseEventE val QUEUESTATUS = conversionOfEncoding QueueStatusE val SYSTEMMETRICS = conversionOfEncoding SystemMetricsE val TRACKPOPMENU = conversionOfEncoding TrackPopMenuE val DRAWTEXTMODE = conversionOfEncoding DrawTextModeE val DEVICECONTEXTFLAG = conversionOfEncoding DeviceContextFlagE val REDRAWWINDOWFLAG = conversionOfEncoding RedrawWindowFlagE val SCROLLWINDOWFLAG = conversionOfEncoding ScrollWindowFlagE val ENABLESCROLLBARFLAG = conversionOfEncoding EnableScrollBarFlagE val MESSAGEBOXVALUE = conversionOfEncoding MessageBoxValueE val CONTROLCOLOR = conversionOfEncoding ControlColorE val COLORTYPE = conversionOfEncoding ColorTypeE val GETWINDOWFLAG = conversionOfEncoding GetWindowFlagE val MENUFLAG = conversionOfEncoding MenuFlagE val SYSTEMCOMMAND = conversionOfEncoding SystemCommandE val CURSORIDENTIFIER = conversionOfEncoding CursorIdentifierE val BITMAPOPTION = conversionOfEncoding BitmapOptionE val OCRFLAG = conversionOfEncoding OCRFlagE val OICFLAG = conversionOfEncoding OICFlagE val ICONIDENTIFIER = conversionOfEncoding IconIdentifierE val MESSAGEBOXIDENTIFIER = conversionOfEncoding MessageBoxIdentifierE val EDITSTYLE = conversionOfEncoding EditStyleE val CONTROLNOTIFICATION = conversionOfEncoding ControlNotificationE val EDITCTLBEHAVIOUR = conversionOfEncoding EditCtlBehaviourE val WORDBREAKFLAG = conversionOfEncoding WordBreakFlagE val BUTTONSTYLE = conversionOfEncoding ButtonStyleE val BUTTONMESSAGEENQUIRY = conversionOfEncoding ButtonMessageEnquiryE val STATICSTYLE = conversionOfEncoding StaticStyleE val STATICMESSAGE = conversionOfEncoding StaticMessageE val DWLPARAMETER = conversionOfEncoding DWLParameterE val DIALOGBOXFLAG = conversionOfEncoding DialogBoxFlagE val DIALOGSTYLE = conversionOfEncoding DialogStyleE val DEFAULTMESSAGEACTION = conversionOfEncoding DefaultMessageActionE val DIALOGCODE = conversionOfEncoding DialogCodeE val LISTBOXFLAG = conversionOfEncoding ListBoxFlagE val LISTBOXACTION = conversionOfEncoding ListBoxActionE val LISTBOXSTYLE = conversionOfEncoding ListBoxStyleE val COMBOBOXVALUE = conversionOfEncoding ComboBoxValueE val COMBOBOXSTYLE = conversionOfEncoding ComboBoxStyleE val COMBOBOXACTION = conversionOfEncoding ComboBoxActionE val SCROLLBARSTYLE = conversionOfEncoding ScrollBarStyleE val SCROLLBARACTION = conversionOfEncoding ScrollBarActionE val HELPOPTION = conversionOfEncoding HelpOptionE val SYSPARAMINFO = conversionOfEncoding SysParamInfoE val ARCDIRECTION = conversionOfEncoding ArcDirectionE end (*------------------------------------------------------------------------------ INDEX: ends ------------------------------------------------------------------------------*) end end; polyml.5.2.1/mlsource/extra/Win/Original/CtrlFn.ML0000644000175000017500000000207410313043372020672 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure CtrlFn = CtrlFnFct ( structure Dir = Dir structure CInterface = CInterface structure Macro = Macro structure ConstType = ConstType structure Type = Type32 ); polyml.5.2.1/mlsource/extra/Win/Original/CtrlFnFct.ML0000644000175000017500000005435110313043372021334 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) signature importCInterfaceSig = sig type sym type 'a Conversion type Ctype type vol val get_sym : string -> string -> sym val call_sym : sym -> (Ctype * vol) list -> Ctype -> vol val alloc : int -> Ctype -> vol val address : vol -> vol val deref : vol -> vol val offset : int -> Ctype -> vol -> vol val assign : Ctype -> vol -> vol -> unit val Cchar : Ctype val Cfloat : Ctype val Cint : Ctype val Clong : Ctype val Cshort : Ctype val Cpointer : Ctype -> Ctype val Cstruct : Ctype list -> Ctype val Cfunction : Ctype list * Ctype -> Ctype val Cvoid : Ctype val voidStar : Ctype val toCstring : string -> vol val toCchar : string -> vol val toCfloat : real -> vol val toCint : int -> vol val toClong : int -> vol val toCshort : int -> vol val fromCstring : vol -> string val fromCchar : vol -> string val fromCfloat : vol -> real val fromCint : vol -> int val fromClong : vol -> int val fromCshort : vol -> int val break_struct : Ctype list -> vol -> vol list val make_struct : (Ctype * vol) list -> vol val CHAR : string Conversion val DOUBLE : real Conversion val FLOAT : real Conversion val INT : int Conversion val LONG : int Conversion val SHORT : int Conversion val STRING : string Conversion val VOID : unit Conversion val BOOL : bool Conversion val POINTER : vol Conversion val call4 : sym -> 'a Conversion * 'b Conversion * 'c Conversion * 'd Conversion -> 'e Conversion -> 'a * 'b * 'c * 'd -> 'e end; signature importMacroSig = sig val LOWORD : int -> int val HIWORD : int -> int val MAKELPARAM : int * int -> int end; signature importConstTypeSig = sig type 'a encoding type ButtonMessageEnquiry type ScrollBarAction type ComboBoxAction type EditCtlBehaviour type ListBoxAction type ButtonStyle val ButtonStyleE : ButtonStyle encoding type EnableScrollBarFlag val EnableScrollBarFlagE : EnableScrollBarFlag encoding type DialogBoxFlag val DialogBoxFlagE : DialogBoxFlag encoding val repE : 'a encoding -> 'a -> int val absE : 'a encoding -> int -> 'a val ButtonMessageEnquiryE : ButtonMessageEnquiry encoding val BM_GETCHECK : ButtonMessageEnquiry val BM_SETCHECK : ButtonMessageEnquiry val BM_GETSTATE : ButtonMessageEnquiry val BM_SETSTATE : ButtonMessageEnquiry val BM_SETSTYLE : ButtonMessageEnquiry val ScrollBarActionE : ScrollBarAction encoding val SBM_SETPOS : ScrollBarAction val SBM_GETPOS : ScrollBarAction val SBM_SETRANGE : ScrollBarAction val SBM_SETRANGEREDRAW : ScrollBarAction val SBM_GETRANGE : ScrollBarAction val SBM_ENABLE_ARROWS : ScrollBarAction val ComboBoxActionE : ComboBoxAction encoding val CB_GETEDITSEL : ComboBoxAction val CB_LIMITTEXT : ComboBoxAction val CB_SETEDITSEL : ComboBoxAction val CB_ADDSTRING : ComboBoxAction val CB_DELETESTRING : ComboBoxAction val CB_DIR : ComboBoxAction val CB_GETCOUNT : ComboBoxAction val CB_GETCURSEL : ComboBoxAction val CB_GETLBTEXT : ComboBoxAction val CB_GETLBTEXTLEN : ComboBoxAction val CB_INSERTSTRING : ComboBoxAction val CB_RESETCONTENT : ComboBoxAction val CB_FINDSTRING : ComboBoxAction val CB_SELECTSTRING : ComboBoxAction val CB_SETCURSEL : ComboBoxAction val CB_SHOWDROPDOWN : ComboBoxAction val CB_GETITEMDATA : ComboBoxAction val CB_SETITEMDATA : ComboBoxAction val CB_GETDROPPEDCONTROLRECT : ComboBoxAction val CB_SETITEMHEIGHT : ComboBoxAction val CB_GETITEMHEIGHT : ComboBoxAction val CB_SETEXTENDEDUI : ComboBoxAction val CB_GETEXTENDEDUI : ComboBoxAction val CB_GETDROPPEDSTATE : ComboBoxAction val CB_FINDSTRINGEXACT : ComboBoxAction val CB_SETLOCALE : ComboBoxAction val CB_GETLOCALE : ComboBoxAction val CB_MSGMAX : ComboBoxAction val EditCtlBehaviourE : EditCtlBehaviour encoding val EM_GETSEL : EditCtlBehaviour val EM_SETSEL : EditCtlBehaviour val EM_GETRECT : EditCtlBehaviour val EM_SETRECT : EditCtlBehaviour val EM_SETRECTNP : EditCtlBehaviour val EM_SCROLL : EditCtlBehaviour val EM_LINESCROLL : EditCtlBehaviour val EM_SCROLLCARET : EditCtlBehaviour val EM_GETMODIFY : EditCtlBehaviour val EM_SETMODIFY : EditCtlBehaviour val EM_GETLINECOUNT : EditCtlBehaviour val EM_LINEINDEX : EditCtlBehaviour val EM_SETHANDLE : EditCtlBehaviour val EM_GETHANDLE : EditCtlBehaviour val EM_GETTHUMB : EditCtlBehaviour val EM_LINELENGTH : EditCtlBehaviour val EM_REPLACESEL : EditCtlBehaviour val EM_GETLINE : EditCtlBehaviour val EM_LIMITTEXT : EditCtlBehaviour val EM_CANUNDO : EditCtlBehaviour val EM_UNDO : EditCtlBehaviour val EM_FMTLINES : EditCtlBehaviour val EM_LINEFROMCHAR : EditCtlBehaviour val EM_SETTABSTOPS : EditCtlBehaviour val EM_SETPASSWORDCHAR : EditCtlBehaviour val EM_EMPTYUNDOBUFFER : EditCtlBehaviour val EM_GETFIRSTVISIBLELINE : EditCtlBehaviour val EM_SETREADONLY : EditCtlBehaviour val EM_SETWORDBREAKPROC : EditCtlBehaviour val EM_GETWORDBREAKPROC : EditCtlBehaviour val EM_GETPASSWORDCHAR : EditCtlBehaviour val ListBoxActionE : ListBoxAction encoding val LB_ADDSTRING : ListBoxAction val LB_INSERTSTRING : ListBoxAction val LB_DELETESTRING : ListBoxAction val LB_SELITEMRANGEEX : ListBoxAction val LB_RESETCONTENT : ListBoxAction val LB_SETSEL : ListBoxAction val LB_SETCURSEL : ListBoxAction val LB_GETSEL : ListBoxAction val LB_GETCURSEL : ListBoxAction val LB_GETTEXT : ListBoxAction val LB_GETTEXTLEN : ListBoxAction val LB_GETCOUNT : ListBoxAction val LB_SELECTSTRING : ListBoxAction val LB_DIR : ListBoxAction val LB_GETTOPINDEX : ListBoxAction val LB_FINDSTRING : ListBoxAction val LB_GETSELCOUNT : ListBoxAction val LB_GETSELITEMS : ListBoxAction val LB_SETTABSTOPS : ListBoxAction val LB_GETHORIZONTALEXTENT : ListBoxAction val LB_SETHORIZONTALEXTENT : ListBoxAction val LB_SETCOLUMNWIDTH : ListBoxAction val LB_ADDFILE : ListBoxAction val LB_SETTOPINDEX : ListBoxAction val LB_GETITEMRECT : ListBoxAction val LB_GETITEMDATA : ListBoxAction val LB_SETITEMDATA : ListBoxAction val LB_SELITEMRANGE : ListBoxAction val LB_SETANCHORINDEX : ListBoxAction val LB_GETANCHORINDEX : ListBoxAction val LB_SETCARETINDEX : ListBoxAction val LB_GETCARETINDEX : ListBoxAction val LB_SETITEMHEIGHT : ListBoxAction val LB_GETITEMHEIGHT : ListBoxAction val LB_FINDSTRINGEXACT : ListBoxAction val LB_SETLOCALE : ListBoxAction val LB_GETLOCALE : ListBoxAction val LB_SETCOUNT : ListBoxAction val LB_MSGMAX : ListBoxAction end; signature importTypeSig = sig type 'a Conversion type vol type Point type Rectangle val mkPoint : {x:int,y:int} -> Point val breakPoint : Point -> {x:int,y:int} val mkRect : {left:int,top:int,right:int,bottom:int} -> Rectangle val breakRect : Rectangle -> {left:int,top:int,right:int,bottom:int} datatype MLHWND = MLHWND of vol val HWND : MLHWND Conversion datatype MLHLOCAL= MLHLOCAL of vol val HLOCAL : MLHLOCAL Conversion end; signature importDirSig = sig val wpolyname : string val gdilibname : string val userlibname : string end; functor CtrlFnFct ( structure Dir : importDirSig structure CInterface : importCInterfaceSig structure Macro : importMacroSig structure ConstType : importConstTypeSig structure Type : importTypeSig sharing type CInterface.vol = Type.vol sharing type CInterface.Conversion = Type.Conversion ) = struct local open CInterface open Macro open ConstType open Type open Dir val get = get_sym userlibname val SendMessage = call4 (get "SendMessageA") (HWND,LONG,LONG,LONG) (LONG) fun SendMessageV (MLHWND h,m,p1,p2) = fromClong ( call_sym (get "SendMessageA") [(Cvoid,h), (Clong,toClong m), (Clong,toClong p1), (Clong,p2) ] Clong ) fun SendMessageVV (MLHWND h,m,p1,p2) = fromClong ( call_sym (get "SendMessageA") [(Cvoid,h), (Clong,toClong m), (Clong,p1), (Clong,p2) ] Clong ) fun btoi b = if b then 1 else 0 exception WrongNumberOfVolatiles fun break_struct4 types v = let val vols = break_struct types v in case vols of [v1,v2,v3,v4] => (v1,v2,v3,v4) | _ => raise WrongNumberOfVolatiles end; in (* Buttons *) fun button__GETCHECK (w) = SendMessage(w,repE ButtonMessageEnquiryE BM_GETCHECK,0,0) fun button__SETCHECK (w,f) = SendMessage(w,repE ButtonMessageEnquiryE BM_SETCHECK,f,0) fun button__GETSTATE (w) = SendMessage(w,repE ButtonMessageEnquiryE BM_GETSTATE,0,0) fun button__SETSTATE (w,f) = SendMessage(w,repE ButtonMessageEnquiryE BM_SETSTATE,f,0) fun button__SETSTYLE (w,s,f) = SendMessage(w,repE ButtonMessageEnquiryE BM_SETSTYLE,repE ButtonStyleE s,btoi f) (* Scroll Bars *) fun scrollbar_SETPOS (w,pos,f) = SendMessage(w,repE ScrollBarActionE SBM_SETPOS,pos,btoi f) fun scrollbar_GETPOS (w) = SendMessage(w,repE ScrollBarActionE SBM_GETPOS,0,0) fun scrollbar_SETRANGE (w,min,max) = SendMessage(w,repE ScrollBarActionE SBM_SETRANGE,min,max) fun scrollbar_SETRANGEREDRAW (w,min,max) = SendMessage(w,repE ScrollBarActionE SBM_SETRANGEREDRAW,min,max) fun scrollbar_GETRANGE (w,mp,Mp) = SendMessage(w,repE ScrollBarActionE SBM_GETRANGE,mp,Mp) fun scrollbar_ENABLE_ARROWS (w,f) = SendMessage(w,repE ScrollBarActionE SBM_ENABLE_ARROWS,repE EnableScrollBarFlagE f,0) (* Combo Boxes *) fun combobox_GETEDITSEL (w) = let val r = SendMessage(w,repE ComboBoxActionE CB_GETEDITSEL,0,0) in (LOWORD r,HIWORD r) end fun combobox_LIMITTEXT (w,limit) = SendMessage(w,repE ComboBoxActionE CB_LIMITTEXT,limit,0) fun combobox_SETEDITSEL (w,start,finish) = SendMessage(w,repE ComboBoxActionE CB_SETEDITSEL,0,MAKELPARAM(start,finish)) fun combobox_ADDSTRING (w,s) = SendMessageV(w,repE ComboBoxActionE CB_ADDSTRING,0,toCstring s) fun combobox_DELETESTRING (w,i) = SendMessage(w,repE ComboBoxActionE CB_DELETESTRING,i,0) fun combobox_DIR (w,f,s) = SendMessageV(w,repE ComboBoxActionE CB_DIR,repE DialogBoxFlagE f,toCstring s) fun combobox_GETCOUNT (w) = SendMessage(w,repE ComboBoxActionE CB_GETCOUNT,0,0) fun combobox_GETCURSEL (w) = SendMessage(w,repE ComboBoxActionE CB_GETCURSEL,0,0) fun combobox_GETLBTEXT (w,i) = let val s = alloc 100 Cchar val r = SendMessageV(w,repE ComboBoxActionE CB_GETLBTEXT,i,s) in fromCstring s end fun combobox_GETLBTEXTLEN (w,i) = SendMessage(w,repE ComboBoxActionE CB_GETLBTEXTLEN,i,0) fun combobox_INSERTSTRING (w,i,s) = SendMessageV(w,repE ComboBoxActionE CB_INSERTSTRING,i,toCstring s) fun combobox_RESETCONTENT (w) = SendMessage(w,repE ComboBoxActionE CB_RESETCONTENT,0,0) fun combobox_FINDSTRING (w,i,s) = SendMessageV(w,repE ComboBoxActionE CB_FINDSTRING,i,toCstring s) fun combobox_SELECTSTRING (w,i,s) = SendMessageV(w,repE ComboBoxActionE CB_SELECTSTRING,i,toCstring s) fun combobox_SETCURSEL (w,i) = SendMessage(w,repE ComboBoxActionE CB_SETCURSEL,i,0) fun combobox_SHOWDROPDOWN (w,f) = SendMessage(w,repE ComboBoxActionE CB_SHOWDROPDOWN,btoi f,0) fun combobox_GETITEMDATA (w,i) = SendMessage(w,repE ComboBoxActionE CB_GETITEMDATA,i,0) fun combobox_SETITEMDATA (w,i,data) = SendMessage(w,repE ComboBoxActionE CB_SETITEMDATA,i,data) fun combobox_GETDROPPEDCONTROLRECT (w) = let val rect = alloc 4 Clong val r = SendMessageV(w,repE ComboBoxActionE CB_GETDROPPEDCONTROLRECT,0,address rect) val (t,r,b,l) = break_struct4 ([Clong,Clong,Clong,Clong]) rect in mkRect {left=fromClong t,top=fromClong r,right=fromClong b,bottom=fromClong l} end fun combobox_SETITEMHEIGHT (w,i,h) = SendMessage(w,repE ComboBoxActionE CB_SETITEMHEIGHT,i,h) fun combobox_GETITEMHEIGHT (w,i) = SendMessage(w,repE ComboBoxActionE CB_GETITEMHEIGHT,i,0) fun combobox_SETEXTENDEDUI (w,f) = SendMessage(w,repE ComboBoxActionE CB_SETEXTENDEDUI,btoi f,0) fun combobox_GETEXTENDEDUI (w) = SendMessage(w,repE ComboBoxActionE CB_GETEXTENDEDUI,0,0) fun combobox_GETDROPPEDSTATE (w) = SendMessage(w,repE ComboBoxActionE CB_GETDROPPEDSTATE,0,0) fun combobox_FINDSTRINGEXACT (w,i,s) = SendMessageV(w,repE ComboBoxActionE CB_FINDSTRINGEXACT,i,toCstring s) fun combobox_SETLOCALE (w,i) = SendMessage(w,repE ComboBoxActionE CB_SETLOCALE,i,0) fun combobox_GETLOCALE (w) = SendMessage(w,repE ComboBoxActionE CB_GETLOCALE,0,0) (* Edit Controls *) fun editcontrol_GETSEL (w) = let val r = SendMessage(w,repE EditCtlBehaviourE EM_GETSEL,0,0) in (LOWORD r, HIWORD r) end fun editcontrol_SETSEL (w,start,finish) = SendMessage(w,repE EditCtlBehaviourE EM_SETSEL,start,finish) fun editcontrol_GETRECT (w) = let val rect = alloc 4 Clong val r = SendMessageV(w,repE EditCtlBehaviourE EM_GETRECT,0,address rect) val (t,r,b,l) = break_struct4 ([Clong,Clong,Clong,Clong]) rect in mkRect {top=fromClong t,left=fromClong r,bottom=fromClong b,right=fromClong l} end fun editcontrol_SETRECT (w,r) = let val {top,right,bottom,left} = breakRect r val rect = make_struct [(Clong,toClong left), (Clong,toClong top), (Clong,toClong right), (Clong,toClong bottom) ] in SendMessageV(w,repE EditCtlBehaviourE EM_SETRECT,0,address rect) end fun editcontrol_SETRECTNP (w,r) = let val {top,right,bottom,left} = breakRect r val rect = make_struct [(Clong,toClong left), (Clong,toClong top), (Clong,toClong right), (Clong,toClong bottom) ] in SendMessageV(w,repE EditCtlBehaviourE EM_SETRECTNP,0,address rect) end fun editcontrol_SCROLL (w,i) = SendMessage(w,repE EditCtlBehaviourE EM_SCROLL,i,0) fun editcontrol_LINESCROLL (w,x,y) = SendMessage(w,repE EditCtlBehaviourE EM_LINESCROLL,x,y) fun editcontrol_SCROLLCARET (w) = SendMessage(w,repE EditCtlBehaviourE EM_SCROLLCARET,0,0) fun editcontrol_GETMODIFY (w) = SendMessage(w,repE EditCtlBehaviourE EM_GETMODIFY,0,0) fun editcontrol_SETMODIFY (w,f) = SendMessage(w,repE EditCtlBehaviourE EM_SETMODIFY,btoi f,0) fun editcontrol_GETLINECOUNT (w) = SendMessage(w,repE EditCtlBehaviourE EM_GETLINECOUNT,0,0) fun editcontrol_LINEINDEX (w,lno) = SendMessage(w,repE EditCtlBehaviourE EM_LINEINDEX,lno,0) fun editcontrol_SETHANDLE (w,MLHLOCAL h) = SendMessageVV(w,repE EditCtlBehaviourE EM_SETHANDLE,h,toClong 0) fun editcontrol_GETHANDLE (w) = MLHLOCAL (toClong (SendMessage(w,repE EditCtlBehaviourE EM_GETHANDLE,0,0)) ) fun editcontrol_LINELENGTH (w,i) = SendMessage(w,repE EditCtlBehaviourE EM_LINELENGTH,i,0) fun editcontrol_REPLACESEL (w,s) = SendMessageV(w,repE EditCtlBehaviourE EM_REPLACESEL,0,toCstring s) fun editcontrol_GETLINE (w,lno) = let val l = alloc 100 Cchar val r = SendMessageV(w,repE EditCtlBehaviourE EM_GETLINE,lno,address l) in fromCstring l end fun editcontrol_LIMITTEXT (w,l) = SendMessage(w,repE EditCtlBehaviourE EM_LIMITTEXT,l,0) fun editcontrol_CANUNDO (w) = SendMessage(w,repE EditCtlBehaviourE EM_CANUNDO,0,0) fun editcontrol_UNDO (w) = SendMessage(w,repE EditCtlBehaviourE EM_UNDO,0,0) fun editcontrol_FMTLINES (w,f) = SendMessage(w,repE EditCtlBehaviourE EM_FMTLINES,btoi f,0) fun editcontrol_LINEFROMCHAR (w,i) = SendMessage(w,repE EditCtlBehaviourE EM_LINEFROMCHAR,i,0) fun editcontrol_SETTABSTOPS (w,ilist) = let val l = List.length ilist val arr = alloc l Cshort in SendMessageV(w,repE EditCtlBehaviourE EM_SETTABSTOPS,l,address arr) end fun editcontrol_SETPASSWORDCHAR (w,ch) = SendMessage(w,repE EditCtlBehaviourE EM_SETPASSWORDCHAR, ord ch,0) fun editcontrol_EMPTYUNDOBUFFER (w) = SendMessage(w,repE EditCtlBehaviourE EM_EMPTYUNDOBUFFER,0,0) fun editcontrol_GETFIRSTVISIBLELINE (w) = SendMessage(w,repE EditCtlBehaviourE EM_GETFIRSTVISIBLELINE,0,0) fun editcontrol_SETREADONLY (w,f) = SendMessage(w,repE EditCtlBehaviourE EM_SETREADONLY,btoi f,0) fun editcontrol_GETPASSWORDCHAR (w) = chr (SendMessage (w,repE EditCtlBehaviourE EM_GETPASSWORDCHAR,0,0) ) (* List Box *) fun listbox_ADDSTRING (w,s) = SendMessageV(w,repE ListBoxActionE LB_ADDSTRING,0,toCstring s) fun listbox_INSERTSTRING (w,i,s) = SendMessageV(w,repE ListBoxActionE LB_INSERTSTRING,i,toCstring s) fun listbox_DELETESTRING (w,i) = SendMessage(w,repE ListBoxActionE LB_DELETESTRING,i,0) fun listbox_SELITEMRANGEEX (w,fst,lst) = SendMessage(w,repE ListBoxActionE LB_SELITEMRANGEEX,fst,lst) fun listbox_RESETCONTENT (w) = SendMessage(w,repE ListBoxActionE LB_RESETCONTENT,0,0) fun listbox_SETSEL (w,f,i) = SendMessage(w,repE ListBoxActionE LB_SETSEL,btoi f,i) fun listbox_GETSEL (w,i) = SendMessage(w,repE ListBoxActionE LB_GETSEL,i,0) fun listbox_GETCURSEL (w) = SendMessage(w,repE ListBoxActionE LB_GETCURSEL,0,0) fun listbox_GETTEXT (w,i) = let val s = alloc 100 Cchar val r = SendMessageV(w,repE ListBoxActionE LB_GETTEXT,i,address s) in fromCstring s end fun listbox_GETTEXTLEN (w,i) = SendMessage(w,repE ListBoxActionE LB_GETTEXTLEN,i,0) fun listbox_GETCOUNT (w) = SendMessage(w,repE ListBoxActionE LB_GETCOUNT,0,0) fun listbox_SELECTSTRING (w,i,s) = SendMessageV(w,repE ListBoxActionE LB_SELECTSTRING,i,toCstring s) fun listbox_DIR (w,attr,s) = SendMessageV(w,repE ListBoxActionE LB_DIR,repE DialogBoxFlagE attr,toCstring s) fun listbox_GETTOPINDEX (w) = SendMessage(w,repE ListBoxActionE LB_GETTOPINDEX,0,0) fun listbox_FINDSTRING (w,i,s) = SendMessageV(w,repE ListBoxActionE LB_FINDSTRING,i,toCstring s) fun listbox_GETSELCOUNT (w) = SendMessage(w,repE ListBoxActionE LB_GETSELCOUNT,0,0) fun listbox_GETSELITEMS (w,i) = let val buf = alloc i Cint val r = SendMessageV(w,repE ListBoxActionE LB_GETSELITEMS,i,address buf) fun v2l v 0 = [] | v2l v i = (v2l v (i-1)) @ [(fromCint (offset (i-1) Cint v))] in v2l buf end fun listbox_SETTABSTOPS (w,ilist) = let val l = List.length ilist val arr = alloc l Cshort in SendMessageV(w,repE ListBoxActionE LB_SETTABSTOPS,l,address arr) end fun listbox_GETHORIZONTALEXTENT (w) = SendMessage(w,repE ListBoxActionE LB_GETHORIZONTALEXTENT,0,0) fun listbox_SETHORIZONTALEXTENT (w,x) = SendMessage(w,repE ListBoxActionE LB_SETHORIZONTALEXTENT,x,0) fun listbox_SETCOLUMNWIDTH (w,x) = SendMessage(w,repE ListBoxActionE LB_SETCOLUMNWIDTH,x,0) fun listbox_ADDFILE (w,s) = SendMessageV(w,repE ListBoxActionE LB_ADDFILE,0,toCstring s) fun listbox_SETTOPINDEX (w,i) = SendMessage(w,repE ListBoxActionE LB_SETTOPINDEX,i,0) fun listbox_GETITEMRECT (w,i) = let val rect = alloc 4 Clong val r = SendMessageV(w,repE ListBoxActionE LB_GETITEMRECT,i,address rect) val (t,r,b,l) = break_struct4 ([Clong,Clong,Clong,Clong]) rect in mkRect {top=fromClong t,left=fromClong r, bottom=fromClong b,right=fromClong l} end fun listbox_GETITEMDATA (w,i) = SendMessage(w,repE ListBoxActionE LB_GETITEMDATA,i,0) fun listbox_SETITEMDATA (w,i,data) = SendMessage(w,repE ListBoxActionE LB_SETITEMDATA,i,data) fun listbox_SELITEMRANGE (w,f,fst,lst) = SendMessage(w,repE ListBoxActionE LB_SELITEMRANGE,btoi f,MAKELPARAM (fst,lst) ) fun listbox_SETANCHORINDEX (w,i) = SendMessage(w,repE ListBoxActionE LB_SETANCHORINDEX,i,0) fun listbox_GETANCHORINDEX (w) = SendMessage(w,repE ListBoxActionE LB_GETANCHORINDEX,0,0) fun listbox_SETCARETINDEX (w,i,f) = SendMessage(w,repE ListBoxActionE LB_SETCARETINDEX,i,MAKELPARAM(f,0)) fun listbox_GETCARETINDEX (w) = SendMessage(w,repE ListBoxActionE LB_GETCARETINDEX,0,0) fun listbox_SETITEMHEIGHT (w,i,y) = SendMessage(w,repE ListBoxActionE LB_SETITEMHEIGHT,i,MAKELPARAM(y,0)) fun listbox_GETITEMHEIGHT (w,i) = SendMessage(w,repE ListBoxActionE LB_GETITEMHEIGHT,i,0) fun listbox_FINDSTRINGEXACT (w,i,s) = SendMessageV(w,repE ListBoxActionE LB_FINDSTRINGEXACT,i,toCstring s) fun listbox_SETLOCALE (w,i) = SendMessage(w,repE ListBoxActionE LB_SETLOCALE,i,0) fun listbox_GETLOCALE (w) = SendMessage(w,repE ListBoxActionE LB_GETLOCALE,0,0) fun listbox_SETCOUNT (w,i) = SendMessage(w,repE ListBoxActionE LB_SETCOUNT,i,0) end end; polyml.5.2.1/mlsource/extra/Win/Original/Dir.ML0000644000175000017500000000146210313043372020220 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure Dir = DirFct (); polyml.5.2.1/mlsource/extra/Win/Original/DirFct.ML0000644000175000017500000000171710313043372020660 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) functor DirFct () = struct val wpolyname = "\\panos\\mergerun\\wpoly.EXE" val gdilibname = "\\windows\\system\\gdi32.DLL" val userlibname = "\\windows\\system\\user32.DLL" end; polyml.5.2.1/mlsource/extra/Win/Original/DrawCom.ML0000644000175000017500000000147310313043372021040 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure DrawCom = DrawComFct (); polyml.5.2.1/mlsource/extra/Win/Original/DrawComFct.ML0000644000175000017500000001604410313043372021475 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software *) (************************************************************************** How do draw commands work ? The following functions use a device context to draw to the client area of a window. Such a DC can be obtained by GetDC (MLHWND -> MLHDC) and released by ReleaseDC ( MLHWWD * MLHDC -> int ) Getting a DC is an expensive operation and in order to make things more efficient we add HDC entries to the window table in the runtime system. A winGadget which is a DrawableWindow has a valid HDC (obtained with GetDC) when the window ia created. If it is not DrawableWindow it has a null HDC. DrawableWindow is a 'winAttrib. **************************************************************************) functor DrawComFct() = struct local open UserFn open UserFn2 open GdiFn val mkDrawCommand = Gadget.mkDrawCommand fun dc1 gf = mkDrawCommand (fn dc => gf dc) fun dc2 gf a = mkDrawCommand (fn dc => gf (dc,a)) fun dc3 gf (a,b) = mkDrawCommand (fn dc => gf (dc,a,b)) fun dc4 gf (a,b,c) = mkDrawCommand (fn dc => gf (dc,a,b,c)) fun dc5 gf (a,b,c,d) = mkDrawCommand (fn dc => gf (dc,a,b,c,d)) fun dc6 gf (a,b,c,d,e) = mkDrawCommand (fn dc => gf (dc,a,b,c,d,e)) fun dc9 gf (a,b,c,d,e,f,g,h) = mkDrawCommand (fn dc => gf (dc,a,b,c,d,e,f,g,h)) fun dc11 gf (a,b,c,d,e,f,g,h,i,j) = mkDrawCommand (fn dc => gf (dc,a,b,c,d,e,f,g,h,i,j)) fun dc12 gf (a,b,c,d,e,f,g,h,i,j,k) = mkDrawCommand (fn dc => gf (dc,a,b,c,d,e,f,g,h,i,j,k)) in val GetClipBox = dc1 GetClipBox val OffsetWindowOrgEx = dc3 OffsetWindowOrgEx val InvertRect = dc2 InvertRect val SetArcDirection = dc2 SetArcDirection val CreateCompatibleBitmap = dc3 CreateCompatibleBitmap val GetMetaRgn = dc2 GetMetaRgn val SetPolyFillMode = dc2 SetPolyFillMode val StretchBlt = dc11 StretchBlt val SetMetaRgn = dc1 SetMetaRgn val GetCurrentPositionEx = dc1 GetCurrentPositionEx val StrokePath = dc1 StrokePath val GetWorldTransform = dc1 GetWorldTransform val SetMapperFlags = dc2 SetMapperFlags val FrameRgn = dc5 FrameRgn val SetWorldTransform = dc2 SetWorldTransform val FlattenPath = dc1 FlattenPath val SelectClipRgn = dc2 SelectClipRgn val GetDeviceCaps = dc2 GetDeviceCaps val GetDCOrgEx = dc1 GetDCOrgEx val PtVisible = dc4 PtVisible val WidenPath = dc1 WidenPath val CreateHalftonePalette = dc1 CreateHalftonePalette val GetMapMode = dc1 GetMapMode val SelectObject = dc2 SelectObject val SetMapMode = dc3 SetMapMode val GetStretchBltMode = dc1 GetStretchBltMode val RectVisible = dc2 RectVisible val OffsetClipRgn = dc3 OffsetClipRgn val SetStretchBltMode = dc2 SetStretchBltMode val GetMiterLimit = dc1 GetMiterLimit val GetSystemPaletteUse = dc1 GetSystemPaletteUse val GetWindowExtEx = dc1 GetWindowExtEx val SetMiterLimit = dc2 SetMiterLimit val SetSystemPaletteUse = dc2 SetSystemPaletteUse val SetWindowExtEx = dc3 SetWindowExtEx val GetAspectRatioFilterEx = dc1 GetAspectRatioFilterEx val GetGraphicsMode = dc1 GetGraphicsMode val ExtSelectClipRgn = dc3 ExtSelectClipRgn val PathToRegion = dc1 PathToRegion val GetCurrentObject = dc2 GetCurrentObject val InvertRgn = dc2 InvertRgn val AbortPath = dc1 AbortPath val FillRgn = dc3 FillRgn val PaintRgn = dc2 PaintRgn val GetTextCharacterExtra = dc1 GetTextCharacterExtra val ArcTo = dc6 ArcTo val PatBlt = dc6 PatBlt val SelectClipPath = dc2 SelectClipPath val GetViewportOrgEx = dc1 GetViewportOrgEx val GetWindowOrgEx = dc1 GetWindowOrgEx val GetBrushOrgEx = dc1 GetBrushOrgEx val FillRect = dc3 FillRect val SetTextCharacterExtra = dc2 SetTextCharacterExtra val SelectPalette = dc3 SelectPalette val UpdateColors = dc1 UpdateColors val SetViewportOrgEx = dc3 SetViewportOrgEx val SetWindowOrgEx = dc3 SetWindowOrgEx val SetTextJustification = dc3 SetTextJustification val DrawText = dc4 DrawText val SetBrushOrgEx = dc2 SetBrushOrgEx val RealizePalette = dc1 RealizePalette val GetViewportExtEx = dc1 GetViewportExtEx val Arc = dc6 Arc val BeginPath = dc1 BeginPath val OffsetViewportOrgEx = dc3 OffsetViewportOrgEx val MoveToEx = dc3 MoveToEx val BitBlt = dc9 BitBlt val SetViewportExtEx = dc3 SetViewportExtEx val GetClipRgn = dc2 GetClipRgn val GetTextAlign = dc1 GetTextAlign val FillPath = dc1 FillPath val StrokeAndFillPath = dc1 StrokeAndFillPath val EndPath = dc1 EndPath val AngleArc = dc6 AngleArc val FrameRect = dc3 FrameRect val SetTextAlign = dc2 SetTextAlign val GetPolyFillMode = dc1 GetPolyFillMode val ModifyWorldTransform = dc3 ModifyWorldTransform val CloseFigure = dc1 CloseFigure val MaskBlt = dc12 MaskBlt val SetBoundsRect = dc3 SetBoundsRect val GetROP2 = dc1 GetROP2 val SetROP2 = dc2 SetROP2 val ScrollDC = dc6 ScrollDC val WindowFromDC = dc1 WindowFromDC val ExcludeUpdateRgn = dc2 ExcludeUpdateRgn val DrawIcon = dc4 DrawIcon val DrawFocusRect = dc2 DrawFocusRect val GetBkMode = dc1 GetBkMode val GetBoundsRect = dc2 GetBoundsRect val SetBkMode = dc2 SetBkMode val ExcludeClipRect = dc2 ExcludeClipRect val Pie = dc4 Pie val PolyDraw = dc2 PolyDraw val DrawRectangle = dc2 DrawRectangle val PolyBezierTo = dc2 PolyBezierTo val GetPath = dc2 GetPath val GetNearestColor = dc2 GetNearestColor val PolylineTo = dc2 PolylineTo val ExtFloodFill = dc5 ExtFloodFill val GetCharABCWidthsFloat = dc3 GetCharABCWidthsFloat val Polyline = dc2 Polyline val DrawRoundRect = dc4 DrawRoundRect val GetCharABCWidths = dc3 GetCharABCWidths val GetCharWidth32 = dc3 GetCharWidth32 val DPtoLP = dc2 DPtoLP val LPtoDP = dc2 LPtoDP val TextOut = dc3 TextOut val GetCharWidthFloat = dc3 GetCharWidthFloat val ExtTextOut = dc6 ExtTextOut val Ellipse = dc2 Ellipse val GetPixel = dc3 GetPixel val GetTextExtentPoint32 = dc2 GetTextExtentPoint32 val SetPixel = dc4 SetPixel val PolyBezier = dc2 PolyBezier val Polygon = dc2 Polygon val IntersectClipRect = dc2 IntersectClipRect val GetTextColor = dc1 GetTextColor val SetTextColor = dc2 SetTextColor val LineTo = dc2 LineTo val GetBkColor = dc1 GetBkColor val SetBkColor = dc2 SetBkColor val Chord = dc4 Chord end end; polyml.5.2.1/mlsource/extra/Win/Original/Failure.ML0000644000175000017500000000153410313043372021071 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure Failure = FailureFct (structure CInterface = CInterface); polyml.5.2.1/mlsource/extra/Win/Original/FailureFct.ML0000644000175000017500000005544710313043373021543 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (**************************************************************** Numerical List of Error Codes Can be used by applications to determine runtime errors. ****************************************************************) signature importCInterfaceSig = sig type sym type 'a Conversion val get_sym : string -> string -> sym val call0 : sym -> unit -> 'a Conversion -> unit -> 'a val LONG : int Conversion end; functor FailureFct(structure CInterface : importCInterfaceSig) = struct local open CInterface fun getErrorState i = case i of ~8 => "ERROR_UNKNOWNALG" | ~7 => "ERROR_BADVALUE" | ~6 => "ERROR_GLOBLOCK" | ~5 => "ERROR_GLOBALLOC" | ~4 => "ERROR_WRITE" | ~3 => "ERROR_READ" | ~2 => "ERROR_BADOUTHANDLE" | ~1 => "ERROR_BADINHANDLE" | 0 => "NO_ERROR" | 1 => "ERROR_INVALID_FUNCTION" | 2 => "ERROR_FILE_NOT_FOUND" | 3 => "ERROR_PATH_NOT_FOUND" | 4 => "ERROR_TOO_MANY_OPEN_FILES" | 5 => "ERROR_ACCESS_DENIED" | 6 => "ERROR_INVALID_HANDLE" | 7 => "ERROR_ARENA_TRASHED" | 8 => "ERROR_NOT_ENOUGH_MEMORY" | 9 => "ERROR_INVALID_BLOCK" | 10 => "ERROR_BAD_ENVIRONMENT" | 11 => "ERROR_BAD_FORMAT" | 12 => "ERROR_INVALID_ACCESS" | 13 => "ERROR_INVALID_DATA" | 14 => "ERROR_OUTOFMEMORY" | 15 => "ERROR_INVALID_DRIVE" | 16 => "ERROR_CURRENT_DIRECTORY" | 17 => "ERROR_NOT_SAME_DEVICE" | 18 => "ERROR_NO_MORE_FILES" | 19 => "ERROR_WRITE_PROTECT" | 20 => "ERROR_BAD_UNIT" | 21 => "ERROR_NOT_READY" | 22 => "ERROR_BAD_COMMAND" | 23 => "ERROR_CRC" | 24 => "ERROR_BAD_LENGTH" | 25 => "ERROR_SEEK" | 26 => "ERROR_NOT_DOS_DISK" | 27 => "ERROR_SECTOR_NOT_FOUND" | 28 => "ERROR_OUT_OF_PAPER" | 29 => "ERROR_WRITE_FAULT" | 30 => "ERROR_READ_FAULT" | 31 => "ERROR_GEN_" | 32 => "ERROR_SHARING_VIOLATION" | 33 => "ERROR_LOCK_VIOLATION" | 34 => "ERROR_WRONG_DISK" | 36 => "ERROR_SHARING_BUFFER_EXCEEDED" | 38 => "ERROR_HANDLE_EOF" | 39 => "ERROR_HANDLE_DISK_FULL" | 50 => "ERROR_NOT_SUPPORTED" | 51 => "ERROR_REM_NOT_LIST" | 52 => "ERROR_DUP_NAME" | 53 => "ERROR_BAD_NETPATH" | 54 => "ERROR_NETWORK_BUSY" | 55 => "ERROR_DEV_NOT_EXIST" | 56 => "ERROR_TOO_MANY_CMDS" | 57 => "ERROR_ADAP_HDW_ERR" | 58 => "ERROR_BAD_NET_RESP" | 59 => "ERROR_UNEXP_NET_ERR" | 60 => "ERROR_BAD_REM_ADAP" | 61 => "ERROR_PRINTQ_FULL" | 62 => "ERROR_NO_SPOOL_SPACE" | 63 => "ERROR_PRINT_CANCELLED" | 64 => "ERROR_NETNAME_DELETED" | 65 => "ERROR_NETWORK_ACCESS_DENIED" | 66 => "ERROR_BAD_DEV_TYPE" | 67 => "ERROR_BAD_NET_NAME" | 68 => "ERROR_TOO_MANY_NAMES" | 69 => "ERROR_TOO_MANY_SESS" | 70 => "ERROR_SHARING_PAUSED" | 71 => "ERROR_REQ_NOT_ACCEP" | 72 => "ERROR_REDIR_PAUSED" | 80 => "ERROR_FILE_EXISTS" | 82 => "ERROR_CANNOT_MAKE" | 83 => "ERROR_FAIL_I24" | 84 => "ERROR_OUT_OF_STRUCTURES" | 85 => "ERROR_ALREADY_ASSIGNED" | 86 => "ERROR_INVALID_PASSWORD" | 87 => "ERROR_INVALID_PARAMETER" | 88 => "ERROR_NET_WRITE_FAULT" | 89 => "ERROR_NO_PROC_SLOTS" | 100 => "ERROR_TOO_MANY_SEMAPHORES" | 101 => "ERROR_EXCL_SEM_ALREADY_OWNED" | 102 => "ERROR_SEM_IS_SET" | 103 => "ERROR_TOO_MANY_SEM_REQUESTS" | 104 => "ERROR_INVALID_AT_INTERRUPT_TIME" | 105 => "ERROR_SEM_OWNER_DIED" | 106 => "ERROR_SEM_USER_LIMIT" | 107 => "ERROR_DISK_CHANGE" | 108 => "ERROR_DRIVE_LOCKED" | 109 => "ERROR_BROKEN_PIPE" | 110 => "ERROR_OPEN_FAILED" | 111 => "ERROR_BUFFER_OVERFLOW" | 112 => "ERROR_DISK_FULL" | 113 => "ERROR_NO_MORE_SEARCH_HANDLES" | 114 => "ERROR_INVALID_TARGET_HANDLE" | 117 => "ERROR_INVALID_CATEGORY" | 118 => "ERROR_INVALID_VERIFY_SWITCH" | 119 => "ERROR_BAD_DRIVER_LEVEL" | 120 => "ERROR_CALL_NOT_IMPLEMENTED" | 121 => "ERROR_SEM_TIMEOUT" | 122 => "ERROR_INSUFFICIENT_BUFFER" | 123 => "ERROR_INVALID_NAME" | 124 => "ERROR_INVALID_LEVEL" | 125 => "ERROR_NO_VOLUME_LABEL" | 126 => "ERROR_MOD_NOT_FOUND" | 127 => "ERROR_PROC_NOT_FOUND" | 128 => "ERROR_WAIT_NO_CHILDREN" | 129 => "ERROR_CHILD_NOT_COMPLETE" | 130 => "ERROR_DIRECT_ACCESS_HANDLE" | 131 => "ERROR_NEGATIVE_SEEK" | 132 => "ERROR_SEEK_ON_DEVICE" | 133 => "ERROR_IS_JOIN_TARGET" | 134 => "ERROR_IS_JOINED" | 135 => "ERROR_IS_SUBSTED" | 136 => "ERROR_NOT_JOINED" | 137 => "ERROR_NOT_SUBSTED" | 138 => "ERROR_JOIN_TO_JOIN" | 139 => "ERROR_SUBST_TO_SUBST" | 140 => "ERROR_JOIN_TO_SUBST" | 141 => "ERROR_SUBST_TO_JOIN" | 142 => "ERROR_BUSY_DRIVE" | 143 => "ERROR_SAME_DRIVE" | 144 => "ERROR_DIR_NOT_ROOT" | 145 => "ERROR_DIR_NOT_EMPTY" | 146 => "ERROR_IS_SUBST_PATH" | 147 => "ERROR_IS_JOIN_PATH" | 148 => "ERROR_PATH_BUSY" | 149 => "ERROR_IS_SUBST_TARGET" | 150 => "ERROR_SYSTEM_TRACE" | 151 => "ERROR_INVALID_EVENT_COUNT" | 152 => "ERROR_TOO_MANY_MUXWAITERS" | 153 => "ERROR_INVALID_LIST_FORMAT" | 154 => "ERROR_LABEL_TOO_LONG" | 155 => "ERROR_TOO_MANY_TCBS" | 156 => "ERROR_SIGNAL_REFUSED" | 157 => "ERROR_DISCARDED" | 158 => "ERROR_NOT_LOCKED" | 159 => "ERROR_BAD_THREADID_ADDR" | 160 => "ERROR_BAD_ARGUMENTS" | 161 => "ERROR_BAD_PATHNAME" | 162 => "ERROR_SIGNAL_PENDING" | 164 => "ERROR_MAX_THRDS_REACHED" | 167 => "ERROR_LOCK_FAILED" | 170 => "ERROR_BUSY" | 173 => "ERROR_CANCEL_VIOLATION" | 174 => "ERROR_ATOMIC_LOCKS_NOT_SUPPORTED" | 180 => "ERROR_INVALID_SEGMENT_NUMBER" | 182 => "ERROR_INVALID_ORDINAL" | 183 => "ERROR_ALREADY_EXISTS" | 186 => "ERROR_INVALID_FLAG_NUMBER" | 187 => "ERROR_SEM_NOT_FOUND" | 188 => "ERROR_INVALID_STARTING_CODESEG" | 189 => "ERROR_INVALID_STACKSEG" | 190 => "ERROR_INVALID_MODULETYPE" | 191 => "ERROR_INVALID_EXE_SIGNATURE" | 192 => "ERROR_EXE_MARKED_INVALID" | 193 => "ERROR_BAD_EXE_FORMAT" | 194 => "ERROR_ITERATED_DATA_EXCEEDS_64k" | 195 => "ERROR_INVALID_MINALLOCSIZE" | 196 => "ERROR_DYNLINK_FROM_INVALID_RING" | 197 => "ERROR_IOPL_NOT_ENABLED" | 198 => "ERROR_INVALID_SEGDPL" | 199 => "ERROR_AUTODATASEG_EXCEEDS_64k" | 200 => "ERROR_RING2SEG_MUST_BE_MOVABLE" | 201 => "ERROR_RELOC_CHAIN_XEEDS_SEGLIM" | 202 => "ERROR_INFLOOP_IN_RELOC_CHAIN" | 203 => "ERROR_ENVVAR_NOT_FOUND" | 205 => "ERROR_NO_SIGNAL_SENT" | 206 => "ERROR_FILENAME_EXCED_RANGE" | 207 => "ERROR_RING2_STACK_IN_USE" | 208 => "ERROR_META_EXPANSION_TOO_LONG" | 209 => "ERROR_INVALID_SIGNAL_NUMBER" | 210 => "ERROR_THREAD_1_INACTIVE" | 212 => "ERROR_LOCKED" | 214 => "ERROR_TOO_MANY_MODULES" | 215 => "ERROR_NESTING_NOT_ALLOWED" | 230 => "ERROR_BAD_PIPE" | 231 => "ERROR_PIPE_BUSY" | 232 => "ERROR_NO_DATA" | 233 => "ERROR_PIPE_NOT_CONNECTED" | 234 => "ERROR_MORE_DATA" | 240 => "ERROR_VC_DISCONNECTED" | 254 => "ERROR_INVALID_EA_NAME" | 255 => "ERROR_EA_LIST_INCONSISTENT" | 259 => "ERROR_NO_MORE_ITEMS" | 266 => "ERROR_CANNOT_COPY" | 267 => "ERROR_DIRECTORY" | 275 => "ERROR_EAS_DIDNT_FIT" | 276 => "ERROR_EA_FILE_CORRUPT" | 277 => "ERROR_EA_TABLE_FULL" | 278 => "ERROR_INVALID_EA_HANDLE" | 282 => "ERROR_EAS_NOT_SUPPORTED" | 288 => "ERROR_NOT_OWNER" | 298 => "ERROR_TOO_MANY_POSTS" | 317 => "ERROR_MR_MID_NOT_FOUND" | 487 => "ERROR_INVALID_ADDRESS" | 534 => "ERROR_ARITHMETIC_OVERFLOW" | 535 => "ERROR_PIPE_CONNECTED" | 536 => "ERROR_PIPE_LISTENING" | 994 => "ERROR_EA_ACCESS_DENIED" | 995 => "ERROR_OPERATION_ABORTED" | 996 => "ERROR_IO_INCOMPLETE" | 997 => "ERROR_IO_PENDING" | 998 => "ERROR_NOACCESS" | 999 => "ERROR_SWAPERROR" | 1001 => "ERROR_STACK_OVERFLOW" | 1002 => "ERROR_INVALID_MESSAGE" | 1003 => "ERROR_CAN_NOT_COMPLETE" | 1004 => "ERROR_INVALID_FLAGS" | 1005 => "ERROR_UNRECOGNIZED_VOLUME" | 1006 => "ERROR_FILE_INVALID" | 1007 => "ERROR_FULLSCREEN_MODE" | 1008 => "ERROR_NO_TOKEN" | 1009 => "ERROR_BADDB" | 1010 => "ERROR_BADKEY" | 1011 => "ERROR_CANTOPEN" | 1012 => "ERROR_CANTREAD" | 1013 => "ERROR_CANTWRITE" | 1014 => "ERROR_REGISTRY_RECOVERED" | 1015 => "ERROR_REGISTRY_CORRUPT" | 1016 => "ERROR_REGISTRY_IO_FAILED" | 1017 => "ERROR_NOT_REGISTRY_FILE" | 1018 => "ERROR_KEY_DELETED" | 1019 => "ERROR_NO_LOG_SPACE" | 1020 => "ERROR_KEY_HAS_CHILDREN" | 1021 => "ERROR_CHILD_MUST_BE_VOLATILE" | 1022 => "ERROR_NOTIFY_ENUM_DIR" | 1051 => "ERROR_DEPENDENT_SERVICES_RUNNING" | 1052 => "ERROR_INVALID_SERVICE_CONTROL" | 1053 => "ERROR_SERVICE_REQUEST_TIMEOUT" | 1054 => "ERROR_SERVICE_NO_THREAD" | 1055 => "ERROR_SERVICE_DATABASE_LOCKED" | 1056 => "ERROR_SERVICE_ALREADY_RUNNING" | 1057 => "ERROR_INVALID_SERVICE_ACCOUNT" | 1058 => "ERROR_SERVICE_DISABLED" | 1059 => "ERROR_CIRCULAR_DEPENDENCY" | 1060 => "ERROR_SERVICE_DOES_NOT_EXIST" | 1061 => "ERROR_SERVICE_CANNOT_ACCEPT_CTRL" | 1062 => "ERROR_SERVICE_NOT_ACTIVE" | 1063 => "ERROR_FAILED_SERVICE_CONTROLLER_CONNECT" | 1064 => "ERROR_EXCEPTION_IN_SERVICE" | 1065 => "ERROR_DATABASE_DOES_NOT_EXIST" | 1066 => "ERROR_SERVICE_SPECIFIC_ERROR" | 1067 => "ERROR_PROCESS_ABORTED" | 1068 => "ERROR_SERVICE_DEPENDENCY_FAILED" | 1069 => "ERROR_SERVICE_LOGON_FAILED" | 1070 => "ERROR_SERVICE_START_HANG" | 1071 => "ERROR_INVALID_SERVICE_LOCK" | 1072 => "ERROR_SERVICE_MARKED_FOR_DELETE" | 1073 => "ERROR_SERVICE_EXISTS" | 1074 => "ERROR_ALREADY_RUNNING_LKG" | 1075 => "ERROR_SERVICE_DEPENDENCY_DELETED" | 1076 => "ERROR_BOOT_ALREADY_ACCEPTED" | 1077 => "ERROR_SERVICE_NEVER_STARTED" | 1078 => "ERROR_DUPLICATE_SERVICE_NAME" | 1100 => "ERROR_END_OF_MEDIA" | 1101 => "ERROR_FILEMARK_DETECTED" | 1102 => "ERROR_BEGINNING_OF_MEDIA" | 1103 => "ERROR_SETMARK_DETECTED" | 1104 => "ERROR_NO_DATA_DETECTED" | 1105 => "ERROR_PARTITION_" | 1106 => "ERROR_INVALID_BLOCK_LENGTH" | 1107 => "ERROR_DEVICE_NOT_PARTITIONED" | 1108 => "ERROR_UNABLE_TO_LOCK_MEDIA" | 1109 => "ERROR_UNABLE_TO_UNLOAD_MEDIA" | 1110 => "ERROR_MEDIA_CHANGED" | 1111 => "ERROR_BUS_RESET" | 1112 => "ERROR_NO_MEDIA_IN_DRIVE" | 1113 => "ERROR_NO_UNICODE_TRANSLATION" | 1114 => "ERROR_DLL_INIT_FAILED" | 1115 => "ERROR_SHUTDOWN_IN_PROGRESS" | 1116 => "ERROR_NO_SHUTDOWN_IN_PROGRESS" | 1117 => "ERROR_IO_DEVICE" | 1118 => "ERROR_SERIAL_NO_DEVICE" | 1119 => "ERROR_IRQ_BUSY" | 1120 => "ERROR_MORE_WRITES" | 1121 => "ERROR_COUNTER_TIMEOUT" | 1122 => "ERROR_FLOPPY_ID_MARK_NOT_FOUND" | 1123 => "ERROR_FLOPPY_WRONG_CYLINDER" | 1124 => "ERROR_FLOPPY_UNKNOWN_ERROR" | 1125 => "ERROR_FLOPPY_BAD_REGISTERS" | 1126 => "ERROR_DISK_RECALIBRATE_FAILED" | 1127 => "ERROR_DISK_OPERATION_FAILED" | 1128 => "ERROR_DISK_RESET_FAILED" | 1129 => "ERROR_EOM_OVERFLOW" | 1130 => "ERROR_NOT_ENOUGH_SERVER_MEMORY" | 1131 => "ERROR_POSSIBLE_DEADLOCK" | 1200 => "ERROR_BAD_DEVICE" | 1201 => "ERROR_CONNECTION_UNAVAILABLE" | 1202 => "ERROR_DEVICE_ALREADY_REMEMBERED" | 1203 => "ERROR_NO_NET_OR_BAD_PATH" | 1204 => "ERROR_BAD_PROVIDER" | 1205 => "ERROR_CANNOT_OPEN_PROFILE" | 1206 => "ERROR_BAD_PROFILE" | 1207 => "ERROR_NOT_CONTAINER" | 1208 => "ERROR_EXTENDED_ERROR" | 1209 => "ERROR_INVALID_GROUPNAME" | 1210 => "ERROR_INVALID_COMPUTERNAME" | 1211 => "ERROR_INVALID_EVENTNAME" | 1212 => "ERROR_INVALID_DOMAINNAME" | 1213 => "ERROR_INVALID_SERVICENAME" | 1214 => "ERROR_INVALID_NETNAME" | 1215 => "ERROR_INVALID_SHARENAME" | 1216 => "ERROR_INVALID_PASSWORDNAME" | 1217 => "ERROR_INVALID_MESSAGENAME" | 1218 => "ERROR_INVALID_MESSAGEDEST" | 1219 => "ERROR_SESSION_CREDENTIAL_CONFLICT" | 1220 => "ERROR_REMOTE_SESSION_LIMIT_EXCEEDED" | 1221 => "ERROR_DUP_DOMAINNAME" | 1300 => "ERROR_NOT_ALL_ASSIGNED" | 1301 => "ERROR_SOME_NOT_MAPPED" | 1302 => "ERROR_NO_QUOTAS_FOR_ACCOUNT" | 1303 => "ERROR_LOCAL_USER_SESSION_KEY" | 1304 => "ERROR_NULL_LM_PASSWORD" | 1305 => "ERROR_UNKNOWN_REVISION" | 1306 => "ERROR_REVISION_MISMATCH" | 1307 => "ERROR_INVALID_OWNER" | 1308 => "ERROR_INVALID_PRIMARY_GROUP" | 1309 => "ERROR_NO_IMPERSONATION_TOKEN" | 1310 => "ERROR_CANT_DISABLE_MANDATORY" | 1311 => "ERROR_NO_LOGON_SERVERS" | 1312 => "ERROR_NO_SUCH_LOGON_SESSION" | 1313 => "ERROR_NO_SUCH_PRIVILEGE" | 1314 => "ERROR_PRIVILEGE_NOT_HELD" | 1315 => "ERROR_INVALID_ACCOUNT_NAME" | 1316 => "ERROR_USER_EXISTS" | 1317 => "ERROR_NO_SUCH_USER" | 1318 => "ERROR_GROUP_EXISTS" | 1319 => "ERROR_NO_SUCH_GROUP" | 1320 => "ERROR_MEMBER_IN_GROUP" | 1321 => "ERROR_MEMBER_NOT_IN_GROUP" | 1322 => "ERROR_LAST_ADMIN" | 1323 => "ERROR_WRONG_PASSWORD" | 1324 => "ERROR_ILL_FORMED_PASSWORD" | 1325 => "ERROR_PASSWORD_RESTRICTION" | 1326 => "ERROR_LOGON_" | 1327 => "ERROR_ACCOUNT_RESTRICTION" | 1328 => "ERROR_INVALID_LOGON_HOURS" | 1329 => "ERROR_INVALID_WORKSTATION" | 1330 => "ERROR_PASSWORD_EXPIRED" | 1331 => "ERROR_ACCOUNT_DISABLED" | 1332 => "ERROR_NONE_MAPPED" | 1333 => "ERROR_TOO_MANY_LUIDS_REQUESTED" | 1334 => "ERROR_LUIDS_EXHAUSTED" | 1335 => "ERROR_INVALID_SUB_AUTHORITY" | 1336 => "ERROR_INVALID_ACL" | 1337 => "ERROR_INVALID_SID" | 1338 => "ERROR_INVALID_SECURITY_DESCR" | 1340 => "ERROR_BAD_INHERITANCE_ACL" | 1341 => "ERROR_SERVER_DISABLED" | 1342 => "ERROR_SERVER_NOT_DISABLED" | 1343 => "ERROR_INVALID_ID_AUTHORITY" | 1344 => "ERROR_ALLOTTED_SPACE_EXCEEDED" | 1345 => "ERROR_INVALID_GROUP_ATTRIBUTES" | 1346 => "ERROR_BAD_IMPERSONATION_LEVEL" | 1347 => "ERROR_CANT_OPEN_ANONYMOUS" | 1348 => "ERROR_BAD_VALIDATION_CLASS" | 1349 => "ERROR_BAD_TOKEN_TYPE" | 1350 => "ERROR_NO_SECURITY_ON_OBJECT" | 1351 => "ERROR_CANT_ACCESS_DOMAIN_INFO" | 1352 => "ERROR_INVALID_SERVER_STATE" | 1353 => "ERROR_INVALID_DOMAIN_STATE" | 1354 => "ERROR_INVALID_DOMAIN_ROLE" | 1355 => "ERROR_NO_SUCH_DOMAIN" | 1356 => "ERROR_DOMAIN_EXISTS" | 1357 => "ERROR_DOMAIN_LIMIT_EXCEEDED" | 1358 => "ERROR_INTERNAL_DB_CORRUPTION" | 1359 => "ERROR_INTERNAL_ERROR" | 1360 => "ERROR_GENERIC_NOT_MAPPED" | 1361 => "ERROR_BAD_DESCRIPTOR_FORMAT" | 1362 => "ERROR_NOT_LOGON_PROCESS" | 1363 => "ERROR_LOGON_SESSION_EXISTS" | 1364 => "ERROR_NO_SUCH_PACKAGE" | 1365 => "ERROR_BAD_LOGON_SESSION_STATE" | 1366 => "ERROR_LOGON_SESSION_COLLISION" | 1367 => "ERROR_INVALID_LOGON_TYPE" | 1368 => "ERROR_CANNOT_IMPERSONATE" | 1369 => "ERROR_RXACT_INVALID_STATE" | 1370 => "ERROR_RXACT_COMMIT_" | 1371 => "ERROR_SPECIAL_ACCOUNT" | 1372 => "ERROR_SPECIAL_GROUP" | 1373 => "ERROR_SPECIAL_USER" | 1374 => "ERROR_MEMBERS_PRIMARY_GROUP" | 1375 => "ERROR_TOKEN_ALREADY_IN_USE" | 1376 => "ERROR_NO_SUCH_ALIAS" | 1377 => "ERROR_MEMBER_NOT_IN_ALIAS" | 1378 => "ERROR_MEMBER_IN_ALIAS" | 1379 => "ERROR_ALIAS_EXISTS" | 1380 => "ERROR_LOGON_NOT_GRANTED" | 1381 => "ERROR_TOO_MANY_SECRETS" | 1382 => "ERROR_SECRET_TOO_LONG" | 1383 => "ERROR_INTERNAL_DB_ERROR" | 1384 => "ERROR_TOO_MANY_CONTEXT_IDS" | 1385 => "ERROR_LOGON_TYPE_NOT_GRANTED" | 1386 => "ERROR_NT_CROSS_ENCRYPTION_REQUIRED" | 1387 => "ERROR_NO_SUCH_MEMBER" | 1388 => "ERROR_INVALID_MEMBER" | 1389 => "ERROR_TOO_MANY_SIDS" | 1390 => "ERROR_LM_CROSS_ENCRYPTION_REQUIRED" | 1391 => "ERROR_NO_INHERITANCE" | 1392 => "ERROR_FILE_CORRUPT" | 1393 => "ERROR_DISK_CORRUPT" | 1394 => "ERROR_NO_USER_SESSION_KEY" | 1400 => "ERROR_INVALID_WINDOW_HANDLE" | 1401 => "ERROR_INVALID_MENU_HANDLE" | 1402 => "ERROR_INVALID_CURSOR_HANDLE" | 1403 => "ERROR_INVALID_ACCEL_HANDLE" | 1404 => "ERROR_INVALID_HOOK_HANDLE" | 1405 => "ERROR_INVALID_DWP_HANDLE" | 1406 => "ERROR_TLW_WITH_WSCHILD" | 1407 => "ERROR_CANNOT_FIND_WND_CLASS" | 1408 => "ERROR_WINDOW_OF_OTHER_THREAD" | 1409 => "ERROR_HOTKEY_ALREADY_REGISTERED" | 1410 => "ERROR_CLASS_ALREADY_EXISTS" | 1411 => "ERROR_CLASS_DOES_NOT_EXIST" | 1412 => "ERROR_CLASS_HAS_WINDOWS" | 1413 => "ERROR_INVALID_INDEX" | 1414 => "ERROR_INVALID_ICON_HANDLE" | 1415 => "ERROR_PRIVATE_DIALOG_INDEX" | 1416 => "ERROR_LISTBOX_ID_NOT_FOUND" | 1417 => "ERROR_NO_WILDCARD_CHARACTERS" | 1418 => "ERROR_CLIPBOARD_NOT_OPEN" | 1419 => "ERROR_HOTKEY_NOT_REGISTERED" | 1420 => "ERROR_WINDOW_NOT_DIALOG" | 1421 => "ERROR_CONTROL_ID_NOT_FOUND" | 1422 => "ERROR_INVALID_COMBOBOX_MESSAGE" | 1423 => "ERROR_WINDOW_NOT_COMBOBOX" | 1424 => "ERROR_INVALID_EDIT_HEIGHT" | 1425 => "ERROR_DC_NOT_FOUND" | 1426 => "ERROR_INVALID_HOOK_FILTER" | 1427 => "ERROR_INVALID_FILTER_PROC" | 1428 => "ERROR_HOOK_NEEDS_HMOD" | 1429 => "ERROR_GLOBAL_ONLY_HOOK" | 1430 => "ERROR_JOURNAL_HOOK_SET" | 1431 => "ERROR_HOOK_NOT_INSTALLED" | 1432 => "ERROR_INVALID_LB_MESSAGE" | 1433 => "ERROR_SETCOUNT_ON_BAD_LB" | 1434 => "ERROR_LB_WITHOUT_TABSTOPS" | 1435 => "ERROR_DESTROY_OBJECT_OF_OTHER_THREAD" | 1436 => "ERROR_CHILD_WINDOW_MENU" | 1437 => "ERROR_NO_SYSTEM_MENU" | 1438 => "ERROR_INVALID_MSGBOX_STYLE" | 1439 => "ERROR_INVALID_SPI_VALUE" | 1440 => "ERROR_SCREEN_ALREADY_LOCKED" | 1441 => "ERROR_HWNDS_HAVE_DIFFERENT_PARENT" | 1442 => "ERROR_NOT_CHILD_WINDOW" | 1443 => "ERROR_INVALID_GW_COMMAND" | 1444 => "ERROR_INVALID_THREAD_ID" | 1445 => "ERROR_NON_MDICHILD_WINDOW" | 1446 => "ERROR_POPUP_ALREADY_ACTIVE" | 1447 => "ERROR_NO_SCROLLBARS" | 1448 => "ERROR_INVALID_SCROLLBAR_RANGE" | 1449 => "ERROR_INVALID_SHOWWIN_COMMAND" | 1500 => "ERROR_EVENTLOG_FILE_CORRUPT" | 1501 => "ERROR_EVENTLOG_CANT_START" | 1502 => "ERROR_LOG_FILE_FULL" | 1503 => "ERROR_EVENTLOG_FILE_CHANGED" | 1700 => "RPC_S_INVALID_STRING_BINDING" | 1701 => "RPC_S_WRONG_KIND_OF_BINDING" | 1702 => "RPC_S_INVALID_BINDING" | 1703 => "RPC_S_PROTSEQ_NOT_SUPPORTED" | 1704 => "RPC_S_INVALID_RPC_PROTSEQ" | 1705 => "RPC_S_INVALID_STRING_UUID" | 1706 => "RPC_S_INVALID_ENDPOINT_FORMAT" | 1707 => "RPC_S_INVALID_NET_ADDR" | 1708 => "RPC_S_NO_ENDPOINT_FOUND" | 1709 => "RPC_S_INVALID_TIMEOUT" | 1710 => "RPC_S_OBJECT_NOT_FOUND" | 1711 => "RPC_S_ALREADY_REGISTERED" | 1712 => "RPC_S_TYPE_ALREADY_REGISTERED" | 1713 => "RPC_S_ALREADY_LISTENING" | 1714 => "RPC_S_NO_PROTSEQS_REGISTERED" | 1715 => "RPC_S_NOT_LISTENING" | 1716 => "RPC_S_UNKNOWN_MGR_TYPE" | 1717 => "RPC_S_UNKNOWN_IF" | 1718 => "RPC_S_NO_BINDINGS" | 1719 => "RPC_S_NO_PROTSEQS" | 1720 => "RPC_S_CANT_CREATE_ENDPOINT" | 1721 => "RPC_S_OUT_OF_RESOURCES" | 1722 => "RPC_S_SERVER_UNAVAILABLE" | 1723 => "RPC_S_SERVER_TOO_BUSY" | 1724 => "RPC_S_INVALID_NETWORK_OPTIONS" | 1725 => "RPC_S_NO_CALL_ACTIVE" | 1726 => "RPC_S_CALL_FAILED" | 1727 => "RPC_S_CALL_FAILED_DNE" | 1728 => "RPC_S_PROTOCOL_ERROR" | 1729 => "RPC_S_CANNOT_BIND" | 1730 => "RPC_S_UNSUPPORTED_TRANS_SYN" | 1731 => "RPC_S_SERVER_OUT_OF_MEMORY" | 1732 => "RPC_S_UNSUPPORTED_TYPE" | 1733 => "RPC_S_INVALID_TAG" | 1734 => "RPC_S_INVALID_BOUND" | 1735 => "RPC_S_NO_ENTRY_NAME" | 1736 => "RPC_S_INVALID_NAME_SYNTAX" | 1737 => "RPC_S_UNSUPPORTED_NAME_SYNTAX" | 1738 => "RPC_S_SERVER_NOT_LISTENING" | 1739 => "RPC_S_UUID_NO_ADDRESS" | 1740 => "RPC_S_DUPLICATE_ENDPOINT" | 1741 => "RPC_S_UNKNOWN_AUTHN_TYPE" | 1742 => "RPC_S_MAX_CALLS_TOO_SMALL" | 1743 => "RPC_S_STRING_TOO_LONG" | 1744 => "RPC_S_PROTSEQ_NOT_FOUND" | 1745 => "RPC_S_PROCNUM_OUT_OF_RANGE" | 1746 => "RPC_S_BINDING_HAS_NO_AUTH" | 1747 => "RPC_S_UNKNOWN_AUTHN_SERVICE" | 1748 => "RPC_S_UNKNOWN_AUTHN_LEVEL" | 1749 => "RPC_S_INVALID_AUTH_IDENTITY" | 1750 => "RPC_S_UNKNOWN_AUTHZ_SERVICE" | 1751 => "EPT_S_INVALID_ENTRY" | 1752 => "EPT_S_CANT_PERFORM_OP" | 1753 => "EPT_S_NOT_REGISTERED" | 1754 => "RPC_S_NO_INTERFACES_EXPORTED" | 1755 => "RPC_S_INCOMPLETE_NAME" | 1756 => "RPC_S_INVALID_VERS_OPTION" | 1757 => "RPC_S_NO_MORE_MEMBERS" | 1758 => "RPC_S_NOTHING_TO_UNEXPORT" | 1759 => "RPC_S_INTERFACE_NOT_FOUND" | 1760 => "RPC_S_ENTRY_ALREADY_EXISTS" | 1761 => "RPC_S_ENTRY_NOT_FOUND" | 1762 => "RPC_S_NAME_SERVICE_UNAVAILABLE" | 1763 => "RPC_S_INVALID_NAF_IF" | 1764 => "RPC_S_CANNOT_SUPPORT" | 1765 => "RPC_S_NO_CONTEXT_AVAILABLE" | 1766 => "RPC_S_INTERNAL_ERROR" | 1767 => "RPC_S_ZERO_DIVIDE" | 1768 => "RPC_S_ADDRESS_ERROR" | 1769 => "RPC_S_FP_DIV_ZERO" | 1770 => "RPC_S_FP_UNDERFLOW" | 1771 => "RPC_S_FP_OVERFLOW" | 1772 => "RPC_X_NO_MORE_ENTRIES" | 1773 => "RPC_X_SS_CHAR_TRANS_OPEN_FAIL" | 1774 => "RPC_X_SS_CHAR_TRANS_SHORT_FILE" | 1775 => "RPC_X_SS_IN_NULL_CONTEXT" | 1776 => "RPC_X_SS_CONTEXT_MISMATCH" | 1777 => "RPC_X_SS_CONTEXT_DAMAGED" | 1778 => "RPC_X_SS_HANDLES_MISMATCH" | 1779 => "RPC_X_SS_CANNOT_GET_CALL_HANDLE" | 1780 => "RPC_X_NULL_REF_POINTER" | 1781 => "RPC_X_ENUM_VALUE_OUT_OF_RANGE" | 1782 => "RPC_X_BYTE_COUNT_TOO_SMALL" | 1783 => "RPC_X_BAD_STUB_DATA" | 1784 => "ERROR_INVALID_USER_BUFFER" | 1785 => "ERROR_UNRECOGNIZED_MEDIA" | 1786 => "ERROR_NO_TRUST_LSA_SECRET" | 1787 => "ERROR_NO_TRUST_SAM_ACCOUNT" | 1788 => "ERROR_TRUSTED_DOMAIN_" | 1789 => "ERROR_TRUSTED_RELATIONSHIP_" | 1790 => "ERROR_TRUST_" | 1791 => "RPC_S_CALL_IN_PROGRESS" | 1792 => "ERROR_NETLOGON_NOT_STARTED" | 1793 => "ERROR_ACCOUNT_EXPIRED" | 1794 => "ERROR_REDIRECTOR_HAS_OPEN_HANDLES" | 1795 => "ERROR_PRINTER_DRIVER_ALREADY_INSTALLED" | 1796 => "ERROR_UNKNOWN_PORT" | 1797 => "ERROR_UNKNOWN_PRINTER_DRIVER" | 1798 => "ERROR_UNKNOWN_PRINTPROCESSOR" | 1799 => "ERROR_INVALID_SEPARATOR_FILE" | 1800 => "ERROR_INVALID_PRIORITY" | 1801 => "ERROR_INVALID_PRINTER_NAME" | 1802 => "ERROR_PRINTER_ALREADY_EXISTS" | 1803 => "ERROR_INVALID_PRINTER_COMMAND" | 1804 => "ERROR_INVALID_DATATYPE" | 1805 => "ERROR_INVALID_ENVIRONMENT" | 1806 => "RPC_S_NO_MORE_BINDINGS" | 1807 => "ERROR_NOLOGON_INTERDOMAIN_TRUST_ACCOUNT" | 1808 => "ERROR_NOLOGON_WORKSTATION_TRUST_ACCOUNT" | 1809 => "ERROR_NOLOGON_SERVER_TRUST_ACCOUNT" | 1810 => "ERROR_DOMAIN_TRUST_INCONSISTENT" | 1811 => "ERROR_SERVER_HAS_OPEN_HANDLES" | 1812 => "ERROR_RESOURCE_DATA_NOT_FOUND" | 1813 => "ERROR_RESOURCE_TYPE_NOT_FOUND" | 1814 => "ERROR_RESOURCE_NAME_NOT_FOUND" | 1815 => "ERROR_RESOURCE_LANG_NOT_FOUND" | 1816 => "ERROR_NOT_ENOUGH_QUOTA" | 1898 => "RPC_S_GROUP_MEMBER_NOT_FOUND" | 1899 => "EPT_S_CANT_CREATE" | 1900 => "RPC_S_INVALID_OBJECT" | 2138 => "ERROR_NO_NETWORK" | 2202 => "ERROR_BAD_USERNAME" | 2250 => "ERROR_NOT_CONNECTED" | 2401 => "ERROR_OPEN_FILES" | 2404 => "ERROR_DEVICE_IN_USE" | 6118 => "ERROR_NO_BROWSER_SERVERS_FOUND" | _ => "ERROR __UNKNOWN__" in exception Failure of string fun TraceFn f args = if (f args) then true else let val get = get_sym "\\winnt\\system32\\kernel32.DLL" val r = call0 (get "GetLastError") () (LONG) () in raise (Failure (getErrorState r)) end; fun TraceFns [] = true | TraceFns ((f,a)::fs) = ( TraceFn f a ; TraceFns fs) end end; polyml.5.2.1/mlsource/extra/Win/Original/Gadget.ML0000644000175000017500000000232110313043373020671 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure Gadget = GadgetFct ( structure CInterface = CInterface structure ConstType = ConstType structure Type = Type32 structure Handler = Handler structure MsgFn = MsgFn structure UserFn = UserFn structure UserFn2 = UserFn2 structure GdiFn = GdiFn ); polyml.5.2.1/mlsource/extra/Win/Original/GadgetFct.ML0000644000175000017500000014447710313043373021351 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) signature importCInterfaceSig = sig type vol val toCint : int -> vol end signature importConstTypeSig = sig type 'a encoding val orLE : 'a encoding -> 'a list -> 'a type MenuFlag val MF_CHECKED : MenuFlag val MF_GRAYED :MenuFlag val MF_MENUBREAK :MenuFlag val MF_MENUBARBREAK : MenuFlag val MF_SEPARATOR : MenuFlag val MF_POPUP : MenuFlag type ClassStyle val CS_HREDRAW : ClassStyle val CS_VREDRAW : ClassStyle type WindowStyle val WS_OVERLAPPEDWINDOW : WindowStyle val WS_POPUPWINDOW : WindowStyle type WindowStyleExtended type ButtonStyle type ScrollBarStyle type ScrollBarType type StaticStyle type EditStyle type ListBoxStyle type ComboBoxStyle val CW_USEDEFAULT : int type IconIdentifier val IDI_APPLICATION : IconIdentifier type CursorIdentifier val IDC_ARROW : CursorIdentifier val WindowStyleExtendedE : WindowStyleExtended encoding val MenuFlagE : MenuFlag encoding val ClassStyleE : ClassStyle encoding val WindowStyleE : WindowStyle encoding val ButtonStyleE : ButtonStyle encoding val StaticStyleE : StaticStyle encoding val ScrollBarStyleE : ScrollBarStyle encoding val EditStyleE : EditStyle encoding val ListBoxStyleE : ListBoxStyle encoding val ComboBoxStyleE : ComboBoxStyle encoding val SBS_HORZ : ScrollBarStyle val SBS_CHILD : ScrollBarStyle val SBS_VERT : ScrollBarStyle val SB_CTL : ScrollBarType val CBS_SIMPLE : ComboBoxStyle val CBS_CHILD : ComboBoxStyle val ES_LEFT : EditStyle val ES_AUTOHSCROLL : EditStyle val ES_BORDER : EditStyle val ES_CHILD : EditStyle val LBS_STANDARD : ListBoxStyle val LBS_CHILD : ListBoxStyle val SS_SIMPLE : StaticStyle val SS_CHILD : StaticStyle val BS_CHILD : ButtonStyle val BS_PUSHBUTTON : ButtonStyle end; signature importTypeSig = sig type vol eqtype Id val newId : unit -> Id val intOfId : Id -> int val sameId : Id * Id -> bool datatype 'a option = Some of 'a | None datatype MLHWND = MLHWND of vol end; signature importHandlerSig = sig type window type MLHMENU type MLHDC type System type ProcessID exception Windows of string val newProcessID : unit -> ProcessID val RunProcess : ProcessID -> unit val AddCallbackML : window * (System -> unit) -> unit val AddWindowRTS : window * ProcessID * bool -> bool val SetProcessRunStateRTS : int * int -> unit val EnableProcessWindowsRTS : int * bool -> unit val delegate : ProcessID -> (unit -> unit) -> bool val nullWindow : unit -> window val nullMenu : unit -> MLHMENU val killprocess: ProcessID -> unit val closeDownWin: window -> unit val GetpidRTS : window -> int val GetDeviceContextRTS : window -> MLHDC val HasValidDeviceContextRTS : window -> bool end; signature importMsgFnSig = sig eqtype Id type System type MouseMessage type ControlMessage type KeyMessage type ScrollMessage type RefreshMessage type DestroyMessage type OtherMessage val mouseMessageOf : System -> MouseMessage val controlMessageOf : System -> ControlMessage val keyMessageOf : System -> KeyMessage val refreshMessageOf : System -> RefreshMessage val scrollMessageOf : System -> ScrollMessage val destroyMessageOf : System -> DestroyMessage val otherMessageOf : System -> OtherMessage datatype callbacktype = MouseCB | ControlCB of Id | TimerCB of Id | KeyCB | ScrollCB | RefreshCB | DestroyCB | OtherCB val getcallbacktype : System -> callbacktype end; signature importUserFnSig = sig type MLHMENU type MLHWND type MenuFlag type ScrollBarType type Rectangle val CreatePopupMenu : unit -> MLHMENU val CreateMenu : unit -> MLHMENU val SetMenu : MLHWND * MLHMENU -> bool val AppendMenu : MLHMENU * MenuFlag * int * string -> bool val AppendSubMenu : MLHMENU * MenuFlag * MLHMENU * string -> bool val UpdateWindow : MLHWND -> bool val SetScrollRange : MLHWND * ScrollBarType * int * int * bool -> bool val SetScrollPos : MLHWND * ScrollBarType * int * bool -> int val EnableWindow : MLHWND * bool -> bool val GetParent : MLHWND -> MLHWND val GetWindowRect : MLHWND -> bool * Rectangle end; signature importUserFn2Sig = sig type vol type MLHWND datatype Color = Rgb of int * int * int type MLHBRUSH type WindowStyle type WindowStyleExtended type ClassStyle type ButtonStyle type ComboBoxStyle type EditStyle type ListBoxStyle type ScrollBarStyle type StaticStyle type IconIdentifier type CursorIdentifier datatype MLHICON = MLHICON of vol datatype MLHCURSOR = MLHCURSOR of vol type MLHMENU val CreateSolidBrush : Color -> MLHBRUSH val mkWindow : WindowStyleExtended * ClassStyle * MLHICON * MLHCURSOR * MLHBRUSH * string * WindowStyle * int * int * int * int * MLHWND * MLHMENU -> MLHWND val mkButton : string * ButtonStyle * int * int * int * int * int * MLHWND -> MLHWND val mkComboBox : string * ComboBoxStyle * int * int * int * int * int * MLHWND -> MLHWND val mkEdit : string * EditStyle * int * int * int * int * int * MLHWND -> MLHWND val mkListBox : string * ListBoxStyle * int * int * int * int * int * MLHWND -> MLHWND val mkScrollBar : string * ScrollBarStyle * int * int * int * int * int * MLHWND -> MLHWND val mkStatic : string * StaticStyle * int * int * int * int * MLHWND -> MLHWND val SetTimer : MLHWND * int * int -> bool val KillTimer : MLHWND * int -> bool val ShowWindow : MLHWND -> bool val LoadIcon : IconIdentifier -> MLHICON val LoadCursor : CursorIdentifier -> MLHCURSOR type Rectangle datatype Section = Nothing | Section of Rectangle val Union: Rectangle -> Rectangle -> Rectangle val RightR: Rectangle -> int val BottomR: Rectangle -> int end; signature importGdiFnSig = sig end; functor GadgetFct ( structure CInterface : importCInterfaceSig structure ConstType : importConstTypeSig structure Type : importTypeSig structure Handler : importHandlerSig structure MsgFn : importMsgFnSig structure UserFn : importUserFnSig structure UserFn2 : importUserFn2Sig structure GdiFn : importGdiFnSig sharing type MsgFn.Id = Type.Id sharing type ConstType.MenuFlag = UserFn.MenuFlag sharing type ConstType.ScrollBarType = UserFn.ScrollBarType sharing type ConstType.ScrollBarStyle = UserFn2.ScrollBarStyle sharing type ConstType.ClassStyle = UserFn2.ClassStyle sharing type ConstType.ComboBoxStyle = UserFn2.ComboBoxStyle sharing type ConstType.ListBoxStyle = UserFn2.ListBoxStyle sharing type ConstType.StaticStyle = UserFn2.StaticStyle sharing type ConstType.EditStyle = UserFn2.EditStyle sharing type ConstType.WindowStyleExtended = UserFn2.WindowStyleExtended sharing type CInterface.vol = Type.vol = UserFn2.vol sharing type ConstType.WindowStyle = UserFn2.WindowStyle sharing type Handler.MLHMENU = UserFn.MLHMENU = UserFn2.MLHMENU sharing type ConstType.ButtonStyle = UserFn2.ButtonStyle sharing type Handler.window = UserFn.MLHWND = UserFn2.MLHWND = Type.MLHWND sharing type Handler.System = MsgFn.System sharing type ConstType.IconIdentifier = UserFn2.IconIdentifier sharing type ConstType.CursorIdentifier = UserFn2.CursorIdentifier ) = struct local open CInterface open ConstType open Type open Handler open MsgFn open UserFn open UserFn2 open GdiFn in fun concat [] = [] | concat (a::x) = a@concat x type position = int*int type 'a handler = 'a -> unit type 'a port = 'a handler list ref ; datatype 'a inport = In of 'a port and 'a outport = Out of 'a port; val inport = In and outport = Out; fun connectIn (In (p as ref fs)) f = (p := f::fs); abstype 'a command = Command of unit -> 'a and 'a drawcommand = DrawCommand of MLHDC -> 'a with fun mkCommand f = Command f; fun mkDrawCommand f = DrawCommand f; (* change name of next function to drawInWin *) fun mkWindowCommand (DrawCommand f) w = Command ( fn () => (if HasValidDeviceContextRTS(w) then f (GetDeviceContextRTS w) else raise (Windows "Attempt to draw to no Drawable window") ) ) fun execute (Command f) = f() infixr thenC seqC thenDC seqDC; fun (Command f) thenC g = Command (fn() => execute(g(f()))) ; fun (Command f) seqC (Command g) = Command (fn() => (f();g())) ; fun (DrawCommand f) thenDC G = DrawCommand( fn dc => let val fres = f dc val DrawCommand g = G fres in g dc end) fun (DrawCommand f) seqDC (DrawCommand g) = DrawCommand (fn dc => (f dc ; g dc)) fun returnC a = Command(fn() => a) fun returnDC a = DrawCommand (fn _ => a) type action = unit command; val noAction = Command(fn() => ()) : action fun mkAction f = mkCommand f : action fun actions [] = noAction | actions [a] = a | actions (a :: more) = a seqC (actions more) end; fun send (Out fs) a = mkAction (fn () => (map (fn f => f a) (!fs); ())) fun newport() = ref [] : '_a port; fun sharedstate (stateref: 'a ref) (nextstatefun: 'b * 'a -> 'a * action) : 'b -> unit = let fun handlefun input = let val (nextstate,action) = nextstatefun(input, !stateref) in (stateref:= nextstate;execute action) end; in handlefun end; type callbackcase = callbacktype * (System->unit) fun makeScrollCB f win sref = let fun next(msg,s) = f(scrollMessageOf msg, win, s) val cb = sharedstate sref next in (ScrollCB, cb) end; fun makeMouseCB f win sref = let fun next(msg,s) = f(mouseMessageOf msg, win, s) val cb = sharedstate sref next in (MouseCB, cb) end; fun makeKeyCB f win sref = let fun next(msg,s) = f(keyMessageOf msg, win, s) val cb = sharedstate sref next in (KeyCB, cb) end; fun makeRefreshCB f win sref = let fun next(msg,s) = f(refreshMessageOf msg, win, s) val cb = sharedstate sref next in (RefreshCB, cb) end; fun makeControlCB (id,f) win sref = let fun next(msg,s) = f(controlMessageOf msg, win, s) val cb = sharedstate sref next in (ControlCB id, cb) end; fun makeDestroyCB f win sref = let fun next(msg,s) = f(destroyMessageOf msg, win, s) val cb = sharedstate sref next in (DestroyCB, cb) end; fun makeMenuCB (id,f) win sref = let fun next(msg,s) = f(win, s) val cb = sharedstate sref next in (ControlCB id, cb) end; fun makeOtherCB f win sref = let fun next(msg,s) = f(otherMessageOf msg, win, s) val cb = sharedstate sref next in (OtherCB, cb) end; fun makeTimerCB id action = (TimerCB id, fn s => execute action) fun assoc [] f a = f a | assoc ((b,c)::more) f a = if a=b then c else assoc more f a fun callbackwith cbs system = assoc cbs (fn _ => fn _ => ()) (getcallbacktype system) system (* callbackwith : callbackcase list -> System -> unit Explanation:- assoc cbs default converts the callbackcase list cbs to a mapping callbacktype -> (System->unit) using default on unmatched callbacktypes this mapping is applied to (messagetype system) to get the appropriate (System->unit) function which is finally applied to system *) (* MENUS *) (* datatype label = IconLabel of Icon | Label of string *) type label = string datatype 's menuItem = MenuItem of label * ('s menuAttrib list) | Popup of label * 's menuItem list | Separator and 's menuAttrib = MenuFunction of window * 's -> 's * action (* | ItemAccelerator of string *) | ItemId of Id | ItemChecked | ItemDisabled | ItemBreak | ItemBarBreak fun getMenuFun [] = None | getMenuFun (MenuFunction f::_) = Some f | getMenuFun (_::more) = getMenuFun more; fun getItemId [] = newId() (* generates a fresh id if not supplied by user *) | getItemId (ItemId i::_) = i | getItemId (_::more) = getItemId more; fun getItemFlags [] = [] | getItemFlags (ItemChecked::more) = MF_CHECKED::getItemFlags more | getItemFlags (ItemDisabled::more) = MF_GRAYED::getItemFlags more | getItemFlags (ItemBreak::more) = MF_MENUBREAK::getItemFlags more | getItemFlags (ItemBarBreak::more) = MF_MENUBARBREAK::getItemFlags more | getItemFlags (_::more) = getItemFlags more fun makeItemFlag atts = orLE MenuFlagE (getItemFlags atts) fun addMenuItems hmenu [] = [] | addMenuItems hmenu (Separator::more) = let val u = AppendMenu(hmenu, MF_SEPARATOR, 0, "") in addMenuItems hmenu more end | addMenuItems hmenu (MenuItem(s,atts)::more) = let val id = getItemId atts val state = makeItemFlag atts val u = AppendMenu(hmenu, state, intOfId id, s) val menufun = getMenuFun atts in case menufun of None => addMenuItems hmenu more | Some f => (id,f)::addMenuItems hmenu more end | addMenuItems hmenu (Popup(s,items)::more) = let val submenu = CreatePopupMenu () val label = s val u = AppendSubMenu(hmenu, MF_POPUP, submenu, label) val funs = addMenuItems submenu items in funs @ addMenuItems hmenu more end fun createMenu(items) = let val hmenu = CreateMenu () in (hmenu, addMenuItems hmenu items) end (* WINDOWS *) datatype 's winAttrib = WinMouse of MouseMessage * window * 's -> 's * action | WinKey of KeyMessage * window * 's -> 's * action | WinRefresh of RefreshMessage * window * 's -> 's * action | WinMenuBar of 's menuItem list | WinScroll of ScrollMessage * window * 's -> 's * action | WinIcon of IconIdentifier | WinBackground of Color | WinDrawable | WinSize of int * int | WinName of string | WinStyle of WindowStyle list | WinExStyle of WindowStyleExtended list | WinClassStyle of ClassStyle list | WinCursor of CursorIdentifier | WinDestroy of DestroyMessage * window * 's -> 's * action | WinMessage of OtherMessage * window * 's -> 's * action fun getWinDestroy [] = None | getWinDestroy (WinDestroy b :: more) = Some b | getWinDestroy (_ :: more) = getWinDestroy more fun getWinDrawable [] = false | getWinDrawable (WinDrawable :: more) = true | getWinDrawable (_ :: more) = getWinDrawable more fun getWinScroll [] = None | getWinScroll (WinScroll b :: more) = Some b | getWinScroll (_ :: more) = getWinScroll more fun getWinName [] = "" | getWinName (WinName s::more) = s | getWinName (_::more) = getWinName more fun getWinSize [] = (CW_USEDEFAULT,CW_USEDEFAULT) | getWinSize (WinSize s::more) = s | getWinSize (_::more) = getWinSize more fun getWinMenu [] = None | getWinMenu (WinMenuBar items :: more) = Some items | getWinMenu (_ :: more) = getWinMenu more fun getWinMouse [] = None | getWinMouse (WinMouse b :: more) = Some b | getWinMouse (_ :: more) = getWinMouse more fun getWinKey [] = None | getWinKey (WinKey b :: more) = Some b | getWinKey (_ :: more) = getWinKey more fun getWinRefresh [] = None | getWinRefresh (WinRefresh b :: more) = Some b | getWinRefresh (_ :: more) = getWinRefresh more fun getWinOther [] = None | getWinOther (WinMessage b :: more) = Some b | getWinOther (_ :: more) = getWinOther more fun getWinStyle [] = [WS_OVERLAPPEDWINDOW] | getWinStyle (WinStyle b :: more) = b | getWinStyle (_ :: more) = getWinStyle more fun getWinExStyle [] = [] | getWinExStyle (WinExStyle b :: more) = b | getWinExStyle (_ :: more) = getWinExStyle more fun getWinIcon [] = IDI_APPLICATION | getWinIcon (WinIcon b :: more) = b | getWinIcon (_ :: more) = getWinIcon more fun getWinClassStyle [] = [CS_HREDRAW, CS_VREDRAW] | getWinClassStyle (WinClassStyle b :: more) = b | getWinClassStyle (_ :: more) = getWinClassStyle more fun getWinBackground [] = Rgb(255,255,255) | getWinBackground (WinBackground b :: more) = b | getWinBackground (_ :: more) = getWinBackground more fun getWinCursor [] = IDC_ARROW | getWinCursor (WinCursor b :: more) = b | getWinCursor (_ :: more) = getWinCursor more fun winMake parent (x,y) attribs (* doesn't deal with menu or scroll bars *) = let val exstyle = orLE WindowStyleExtendedE (getWinExStyle attribs) val cstyle = orLE ClassStyleE (getWinClassStyle attribs) val icon = LoadIcon (getWinIcon attribs) val cursor = LoadCursor (getWinCursor attribs) val background = CreateSolidBrush(getWinBackground attribs) val label = getWinName attribs val style = orLE WindowStyleE (getWinStyle attribs) val (w,h) = getWinSize attribs in mkWindow(exstyle, cstyle, icon, cursor, background, label, style, x,y,w,h,parent, nullMenu() ) end (* BUTTONS *) datatype 's buttonAttrib = ButtonLabel of string | ButtonSize of int * int | ButtonId of Id | ButtonFunction of ControlMessage * window * 's -> 's * action | ButtonStyle of ButtonStyle list fun getButtonId [] = newId() | getButtonId (ButtonId id::more) = id | getButtonId (_::more) = getButtonId more fun getButtonLabel [] = "" | getButtonLabel (ButtonLabel s::more) = s | getButtonLabel (_::more) = getButtonLabel more fun getButtonFunction [] = None | getButtonFunction (ButtonFunction b::more) = Some b | getButtonFunction (_::more) = getButtonFunction more fun getButtonStyle [] = [BS_CHILD] | getButtonStyle (ButtonStyle b::more) = b | getButtonStyle (_::more) = getButtonStyle more fun getButtonSize [] = (CW_USEDEFAULT, CW_USEDEFAULT) | getButtonSize (ButtonSize b::more) = b | getButtonSize (_::more) = getButtonSize more fun buttonMake parent (x,y) attribs = let val (w,h) = getButtonSize attribs val label = getButtonLabel attribs val style = orLE ButtonStyleE (getButtonStyle attribs) val buttonId = getButtonId attribs in (mkButton( label, style, x,y,w,h,intOfId buttonId,parent),buttonId) end (* SCROLLBARS *) datatype Orientation = OVertical | OHorizontal datatype 's scrollBarAttrib = ScrollOrientation of Orientation | ScrollSize of int * int | ScrollId of Id | ScrollFunction of window * 's -> 's * action | ScrollStyle of ScrollBarStyle list | ScrollRange of int * int | ScrollInitVal of int fun getScrollOrientation [] = OHorizontal | getScrollOrientation (ScrollOrientation b::more) = b | getScrollOrientation (_::more) = getScrollOrientation more fun getScrollSize [] = (CW_USEDEFAULT, CW_USEDEFAULT) | getScrollSize (ScrollSize b::more) = b | getScrollSize (_::more) = getScrollSize more fun getScrollId [] = newId () | getScrollId (ScrollId b::more) = b | getScrollId (_::more) = getScrollId more fun getScrollFunction [] = None | getScrollFunction (ScrollFunction b::more) = Some b | getScrollFunction (_::more) = getScrollFunction more fun getScrollStyle [] = [SBS_HORZ,SBS_CHILD] | getScrollStyle (ScrollStyle b::more) = b | getScrollStyle (_::more) = getScrollStyle more fun getScrollRange [] = (1,100) | getScrollRange (ScrollRange b::more) = b | getScrollRange (_::more) = getScrollRange more fun getScrollInitVal [] = 1 | getScrollInitVal (ScrollInitVal b::more) = b | getScrollInitVal (_::more) = getScrollInitVal more fun scrollbarMake parent (x,y) attribs = let val (w,h) = getScrollSize attribs val label = "" val style = orLE ScrollBarStyleE (getScrollStyle attribs) val (v1,v2) = getScrollRange attribs val v = getScrollInitVal attribs val orient = (case (getScrollOrientation attribs) of OHorizontal => SBS_HORZ | OVertical => SBS_VERT ) val scrollId = getScrollId attribs val w = mkScrollBar(label,orLE ScrollBarStyleE [style,orient], x,y,w,h,intOfId scrollId,parent) val u = SetScrollRange (w, SB_CTL, v1, v2, false) val u = SetScrollPos (w, SB_CTL, v, false) in (w,scrollId) end (* COMBOBOXES *) datatype 's comboBoxAttrib = ComboBoxStyle of ComboBoxStyle list | ComboBoxLabel of string | ComboBoxSize of int * int | ComboBoxId of Id | ComboBoxFunction of ControlMessage * window * 's -> 's * action fun getComboBoxStyle [] = [CBS_SIMPLE,CBS_CHILD] | getComboBoxStyle (ComboBoxStyle b::more) = b | getComboBoxStyle (_::more) = getComboBoxStyle more fun getComboBoxLabel [] = "" | getComboBoxLabel (ComboBoxLabel b::more) = b | getComboBoxLabel (_::more) = getComboBoxLabel more fun getComboBoxSize [] = (CW_USEDEFAULT,CW_USEDEFAULT) | getComboBoxSize (ComboBoxSize b::more) = b | getComboBoxSize (_::more) = getComboBoxSize more fun getComboBoxId [] = newId() | getComboBoxId (ComboBoxId b::more) = b | getComboBoxId (_::more) = getComboBoxId more fun getComboBoxFunction [] = None | getComboBoxFunction (ComboBoxFunction b::more) = Some b | getComboBoxFunction (_::more) = getComboBoxFunction more fun comboBoxMake parent (x,y) attribs = let val (w,h) = getComboBoxSize attribs val label = getComboBoxLabel attribs val style = orLE ComboBoxStyleE (getComboBoxStyle attribs) val comboboxId = getComboBoxId attribs in (mkComboBox( label, style, x,y,w,h,intOfId comboboxId,parent),comboboxId) end (* EDITS *) datatype 's editAttrib = EditStyle of EditStyle list | EditLabel of string | EditSize of int * int | EditId of Id | EditFunction of ControlMessage * window * 's -> 's * action fun getEditStyle [] = [ES_AUTOHSCROLL,ES_BORDER,ES_CHILD] | getEditStyle (EditStyle b::more) = b | getEditStyle (_::more) = getEditStyle more fun getEditLabel [] = "" | getEditLabel (EditLabel b::more) = b | getEditLabel (_::more) = getEditLabel more fun getEditSize [] = (CW_USEDEFAULT,CW_USEDEFAULT) | getEditSize (EditSize b::more) = b | getEditSize (_::more) = getEditSize more fun getEditId [] = newId() | getEditId (EditId b::more) = b | getEditId (_::more) = getEditId more fun getEditFunction [] = None | getEditFunction (EditFunction b::more) = Some b | getEditFunction (_::more) = getEditFunction more fun editMake parent (x,y) attribs = let val (w,h) = getEditSize attribs val label = getEditLabel attribs val style = orLE EditStyleE (getEditStyle attribs) val editId = getEditId attribs in (mkEdit(label,style,x,y,w,h,intOfId editId,parent),editId) end (* LISTBOXES *) datatype 's listBoxAttrib = ListBoxStyle of ListBoxStyle list | ListBoxLabel of string | ListBoxSize of int * int | ListBoxId of Id | ListBoxFunction of ControlMessage * window * 's -> 's * action fun getListBoxStyle [] = [LBS_STANDARD,LBS_CHILD] | getListBoxStyle (ListBoxStyle b::more) = b | getListBoxStyle (_::more) = getListBoxStyle more fun getListBoxLabel [] = "" | getListBoxLabel (ListBoxLabel b::more) = b | getListBoxLabel (_::more) = getListBoxLabel more fun getListBoxSize [] = (CW_USEDEFAULT,CW_USEDEFAULT) | getListBoxSize (ListBoxSize b::more) = b | getListBoxSize (_::more) = getListBoxSize more fun getListBoxId [] = newId() | getListBoxId (ListBoxId b::more) = b | getListBoxId (_::more) = getListBoxId more fun getListBoxFunction [] = None | getListBoxFunction (ListBoxFunction b::more) = Some b | getListBoxFunction (_::more) = getListBoxFunction more fun listBoxMake parent (x,y) attribs = let val (w,h) = getListBoxSize attribs val label = getListBoxLabel attribs val style = orLE ListBoxStyleE (getListBoxStyle attribs) val listboxId = getListBoxId attribs in (mkListBox (label,style,x,y,w,h,intOfId listboxId,parent),listboxId) end (* STATICS *) datatype 's staticAttrib = StaticStyle of StaticStyle list | StaticLabel of string | StaticSize of int * int fun getStaticStyle [] = [SS_SIMPLE,SS_CHILD] | getStaticStyle (StaticStyle b::more) = b | getStaticStyle (_::more) = getStaticStyle more fun getStaticLabel [] = "" | getStaticLabel (StaticLabel b::more) = b | getStaticLabel (_::more) = getStaticLabel more fun getStaticSize [] = (CW_USEDEFAULT,CW_USEDEFAULT) | getStaticSize (StaticSize b::more) = b | getStaticSize (_::more) = getStaticSize more fun staticMake parent (x,y) attribs = let val (w,h) = getStaticSize attribs val label = getStaticLabel attribs val style = orLE StaticStyleE (getStaticStyle attribs) in mkStatic (label,style,x,y,w,h,parent) end (********************************************************** The following type is returned when a gadget is started, and contains some gadget control **********************************************************) datatype gadgetresult = GR of { wins: window list, (* [] for Abstract gadgets, more than one for groups *) show: action, (* shows window and any children windows *) kill: action, (* Only used to terminate top level, closes then killsprocess *) close: action, (* Closesdown window and children, bottom up *) callbacks: callbackcase list, (* Any callbacks which need to be handled by parent *) children: gadgetresult list (* Results of starting children gadgets *) } fun getwinsGR(GR{wins = wins,...}) = wins fun getshowGR(GR{show = show,...}) = show fun getkillGR(GR{kill=kill,...}) = kill fun getcloseGR(GR{close=close,...}) = close fun getcbsGR(GR{callbacks=callbacks,...}) = callbacks fun getchildrenGR(GR{children=children,...}) = children (******************************************************************************************* No longer needed: fun killgroupprocess grlist = noAction *******************************************************************************************) fun groupGR pid grlist (* Extra PID argument needed for kill, forked processes dealt with by forkedGadget *) = GR{wins = concat(map getwinsGR grlist), show = actions(map getshowGR grlist), kill = actions(map getcloseGR grlist @ [mkAction(fn()=>killprocess pid)]), close = actions(map getcloseGR grlist), callbacks = concat(map getcbsGR grlist), children = grlist } type gadgetargs = ProcessID * window * position datatype gadget = Gadget of (gadgetargs -> gadgetresult) fun startGadget (Gadget g) args (** should be made local -- only runGadget exported **) = g args; fun forkedGadget G = Gadget(fn (pid0,parent,position) => let val pid = newProcessID() val u = RunProcess pid val GR{wins,show,kill,close,callbacks,children} = startGadget G (pid,parent,position) val killboth = actions[mkAction(fn () => killprocess pid0), kill] in (* closing a forked gadget requires the forked process to be killed as well. killing now requires 2 processes to be killed *) GR{wins=wins, show=show, kill=killboth, close=kill, callbacks = callbacks, children = children } end); (* runGadget : gadget -> (int*int) -> gadgetresult This is a primitive function to start a gadget (generating a new process and null parent). It returns a gadgetresult which contains a kill action which can be executed to terminate the running gadget cleanly. *) fun runGadget g position = let val pid = newProcessID() val shell = MLHWND (toCint 0) val gr = startGadget g (pid,shell,position) in (execute(getshowGR gr) ; RunProcess pid; gr ) end; (* runApplication : (action -> gadget) -> (int*int) -> gadgetresult This function is the main one intended for users to run application gadgets. runApplication requires an argument (makeGusing: action -> gadget) rather than just a gadget. The argument for makeGusing will be supplied internally and will be a killer action to cleanly terminate the running gadget with all children, etc. Thus the argument 'makeGusing' can build any gadget using this killer action wherever the user wants (e.g. attached to a child button). If the killer action is executed when the gadget is running, it sends () on a private internal channel c. When the made gadget (makeGusing killer) is started with the more primitive runGadget, it returns a gadget result (gr) which includes its own clean kill action (kill). This kill action deals with children, windows and the process on which the gadget is running. It does not exist before the gadget is run so could not be used directly to make the gadget. A separate process is forked to receive the () on channel c. It merely executes this resulting kill returned in the gadget result gr when it receives () on c. Finally, a new gadget result is returned. This is virtually the same as gr except that the kill has to be modified to do the old kill and deal with the waiting forked process as well. In fact the new killer action is exactly what is required here, because it sends () on c which causes the forked process both to do the kill for us and to finish! *) local open Process in fun runApplication (makeGusing : action -> gadget) position = let val c = channel () : unit channel val killall = mkAction (fn () => send (c,())) val GR{kill,wins,close,show,callbacks,children} = runGadget (makeGusing killall) position val u = fork (fn () => (receive c ; execute kill)) in GR{kill=killall, wins=wins, close=close, show=show, callbacks=callbacks, children=children} end end; fun offset(a:int, b:int) (x,y) = (a+x, b+y); fun simpleGroupGadget children (* gadgets paired with an offset *) = Gadget(fn (pid,parent,pos) => let fun startchild (g,shift) = startGadget g (pid,parent,offset pos shift) in groupGR pid (map startchild children) end) ; (*************************************************************** (* For Gadget Group Layout Functions: *) (* Retrieve from a gadgetresult the overall rectangle occupied by the gadget A section is (already) defined as Section of rectangle | Nothing and we need Nothing for abstract gadgets imports needed: GetWindowRect type Rectangle datatype Section = Nothing | Section of Rectangle val Union: Rectangle -> Rectangle -> Rectangle val RightR: Rectangle -> int val BottomR: Rectangle -> int *) fun bigUnion [] = error "union of no rectangles" | bigUnion [r] = r | bigUnion (r1::more) = Union r1 (bigUnion more) fun rectofGR gr = (case getwinsGR gr of [] => Nothing | somewins => Section(bigUnion(map GetWindowRect somewins)) ) (* Simple Layout: (rows with tops aligned & columns left aligned) does not require adjustment after creation of windows (other alignments do) *) datatype 'a layout = PositionAt of ((int*int) * 'a layout) | Row of int * 'a list (* int for spacing *) | Column of int * 'a list fun hmove n (x,y) Nothing = (x,y) | hmove n (x,y) (Section r) = (RightR r + n,y) fun vmove n (x,y) Nothing = (x,y) | vmove n (x,y) (Section r) = (x,BottomR r + n) fun layoutGadget gs = = Gadget(fn (pid,parent,pos) => let fun startPos (PositionAt (shift,gl)) pos = startPos gl (offset pos shift) | startPos (Row (n,gs)) pos = startAll (hmove n) gs pos | startPos (Column(n,gs)) pos = startAll (vmove n) gs pos and startAll f [] pos = [] | startAll f (g::gs) pos = let val gr = startGadget g (pid,parent,pos) val newpos = f pos (rectofGR gr) val grs = startAll f gs newpos in gr::grs end in groupGR pid (startPos gs pos) end) ; ******************************************************************) val noChild = Gadget(fn (pid,parent,pos) => groupGR pid []) fun nobehaveGadget a = let fun b w (m,s) = (s,noAction) in a b (inport (newport ())) end; (* winGadget : 's winAttrib list attributes -> 's start state -> child list positions and gadgets -> (window -> ('a * 's) -> ('s * action)) high level behav'r -> 'a inport for high level messages -> gadget winGadget winAttribs startstate children b inport This creates a parent window gadget with high level behavior determined by b and startstate (and connected to inport) along with options/attributes described in winattribs some of which share the state. Children are gadgets (plus a position relative to parent area) which do not share the state (they have their own state when made and communicate via message sending). Internally, however, this is acheived by children and options creating callbacks which are collected together in the parent *) fun winGadget winAttribs startstate child b inport = Gadget(fn (pid, parent, position) => let (* create win using parent, position and other info from winDef null menu handle for main win. Register window on RTS *) val window = winMake parent position winAttribs val u = AddWindowRTS(window,pid,getWinDrawable winAttribs) (* set up shared state *) val winstate = ref startstate (* set up abstract behaviour: DELETE NEXT 3 LINES for winGadget0 *) val handlefun = sharedstate winstate (b window) fun high a = ( delegate pid (fn() => handlefun a) ; () ) val u = connectIn inport high (* Create menu if defined in windef and return callbackcases *) val menuCB : callbackcase list = case getWinMenu winAttribs of None => [] | Some m => let val (hmenu, behaviours) = createMenu m (* behaviours : (Id * (window * 's -> 's * action)) list *) fun makeCB itm = makeMenuCB itm window winstate in (SetMenu(window, hmenu); map makeCB behaviours) end (* ScrollBar callbackcase *) val scrollCB = case getWinScroll winAttribs of None => [] | Some b => [makeScrollCB b window winstate] (* Mouse callbackcase *) val mouseCB = case getWinMouse winAttribs of None => [] | Some b => [makeMouseCB b window winstate] (* Key callbackcase *) val keyCB = case getWinKey winAttribs of None => [] | Some b => [makeKeyCB b window winstate] (* Refresh callbackcase *) val refreshCB = case getWinRefresh winAttribs of None => [] | Some b => [makeRefreshCB b window winstate] (* Destroy callbackcase *) val destroyCB = case getWinDestroy winAttribs of None => [] | Some b => [makeDestroyCB b window winstate] (* Other callbackcase *) val otherCB = case getWinOther winAttribs of None => [] | Some b => [makeOtherCB b window winstate] (* Create children and get result callbacks *) val childGR = startGadget child (pid,window,(0,0)) val childcallbacks = getcbsGR childGR (* Collect All callbacks and deal with them *) val callbacks = concat[menuCB,mouseCB,keyCB,refreshCB, otherCB,scrollCB,destroyCB,childcallbacks] val u = AddCallbackML(window,callbackwith callbacks) val parentcallbacks = [] (* None for Parent *) val show = actions[mkAction (fn() => (ShowWindow window; UpdateWindow window;())), getshowGR childGR ] val close = actions[getcloseGR childGR, mkAction(fn() => closeDownWin window)] val kill = actions[mkAction(fn() => killprocess pid),close] val wins = [window] in GR{wins = wins, show = show, kill = kill, close = close, callbacks = parentcallbacks, children = [childGR] } end); fun winGadgetBasic winAttribs startstate children = nobehaveGadget (winGadget winAttribs startstate children) fun abstractGadget startstate b inport (* No window *) = Gadget(fn (pid, parent, _) => let val stateref = ref startstate val handlefun = sharedstate stateref b fun high a = ( delegate pid (fn () => handlefun a) ; ()) val u = connectIn inport high val dummywin = nullWindow() val u = AddWindowRTS(dummywin,pid,false) val close = mkAction(fn() => closeDownWin dummywin) val kill = actions[mkAction(fn() => killprocess pid),close] in GR{wins = [], show = noAction, kill = kill, close = close , callbacks = [], children = [] } end); datatype repeaterControl = RepeaterStart | RepeaterStop | RepeaterInterval of int fun repeaterGadget action startspeed inport(* No window *) = Gadget(fn (pid, parent, _) => let datatype runningState = running of int | stopped of int (* timers should not be called with negative delays the function v (validate) forces speed to 0 if a negative value is specified *) fun mkValid speed = if speed >= 0 then speed else 0 val timerId = newId() val stateref = ref (stopped (mkValid startspeed)) fun stopgo (RepeaterStart,stopped speed) = (running speed, mkAction(fn () => ( SetTimer(parent,intOfId timerId, speed); () ) )) | stopgo (RepeaterStop,stopped speed) = (stopped speed,noAction) | stopgo (RepeaterInterval newspeed,stopped speed) = (stopped (mkValid newspeed),noAction) | stopgo (RepeaterStart,running speed) = (running speed,noAction) | stopgo (RepeaterStop,running speed) = (stopped speed, mkAction(fn () => ( KillTimer(parent, intOfId timerId); () ) )) | stopgo (RepeaterInterval newspeed,running speed) = (running (mkValid newspeed), mkAction(fn () => ( KillTimer(parent, intOfId timerId); SetTimer(parent,intOfId timerId, (mkValid newspeed)); () ) )) val handlefun = sharedstate stateref stopgo fun high a = ( delegate pid (fn () => handlefun a) ; () ) val u = connectIn inport high fun stopgoresult m = let val (newstate,act) = stopgo (m,running 0) in mkAction(fn () => ()) end val cbs = [makeTimerCB timerId action] in GR{wins = [], show = noAction, kill = stopgoresult RepeaterStop, (* makes sure it has stopped *) close = stopgoresult RepeaterStop, callbacks = cbs, children = [] } end); fun buttonGadget buttonAttribs startstate b inport = Gadget(fn (pid, parent, position) => let (* create button using parent, position and other info from buttonDef *) val (window,buttonId) = buttonMake parent position buttonAttribs val u = AddWindowRTS(window,pid,false) (* set up shared state *) val winstate = ref startstate (* set up abstract behaviour *) val handlefun = sharedstate winstate (b window) fun high a = ( delegate pid (fn() => handlefun a) ; () ) val u = connectIn inport high (* Click callbackcase *) val buttonCB = case getButtonFunction buttonAttribs of None => [] | Some b => [makeControlCB (buttonId,b) window winstate] val show = mkAction (fn() => (ShowWindow window; UpdateWindow window;())) val close = mkAction(fn() => closeDownWin window) val kill = actions[mkAction(fn() => killprocess pid),close] val wins = [window] in GR{wins = wins, show = show, kill = kill, close = close, callbacks = buttonCB, (* pass callback to parent *) children = [] } end); fun buttonGadgetBasic buttonAttribs startstate = nobehaveGadget (buttonGadget buttonAttribs startstate); fun scrollGadget scrollAttribs startstate b inport = Gadget(fn (pid, parent, position) => let (* create scrollbar using parent, position and other info from scrollAttribs *) val (window,scrollId) = scrollbarMake parent position scrollAttribs val u = AddWindowRTS(window,pid,false) (* set up shared state *) val winstate = ref startstate (* set up abstract behaviour *) val handlefun = sharedstate winstate (b window) fun high a = ( delegate pid (fn() => handlefun a) ; () ) val u = connectIn inport high (* Click callbackcase *) val scrollCB = case getScrollFunction scrollAttribs of None => [] | Some b => [makeMenuCB (scrollId,b) window winstate] val show = mkAction (fn() => (ShowWindow window; UpdateWindow window;())) val close = mkAction(fn() => closeDownWin window) val kill = actions[mkAction(fn() => killprocess pid),close] val wins = [window] in GR{wins = wins, show = show, kill = kill, close = close, callbacks = scrollCB, (* pass callback to parent *) children = [] } end); fun scrollGadgetBasic scrollAttribs startstate = nobehaveGadget (scrollGadget scrollAttribs startstate); fun comboboxGadget comboboxAttribs startstate b inport = Gadget(fn (pid, parent, position) => let (* create combobox using parent, position and other info from comboboxAttribs *) val (window,comboboxId) = comboBoxMake parent position comboboxAttribs val u = AddWindowRTS(window,pid,false) (* set up shared state *) val winstate = ref startstate (* set up abstract behaviour *) val handlefun = sharedstate winstate (b window) fun high a = ( delegate pid (fn() => handlefun a) ; () ) val u = connectIn inport high (* Click callbackcase *) val comboboxCB = case getComboBoxFunction comboboxAttribs of None => [] | Some b => [makeControlCB (comboboxId,b) window winstate] val show = mkAction (fn() => (ShowWindow window; UpdateWindow window;())) val close = mkAction(fn() => closeDownWin window) val kill = actions[mkAction(fn() => killprocess pid),close] val wins = [window] in GR{wins = wins, show = show, kill = kill, close = close, callbacks = comboboxCB, (* pass callback to parent *) children = [] } end); fun comboboxGadgetBasic comboboxAttribs startstate = nobehaveGadget (comboboxGadget comboboxAttribs startstate); fun editGadget editAttribs startstate b inport = Gadget(fn (pid, parent, position) => let (* create edit using parent, position and other info from editAttribs *) val (window,editId) = editMake parent position editAttribs val u = AddWindowRTS(window,pid,false) (* set up shared state *) val winstate = ref startstate (* set up abstract behaviour *) val handlefun = sharedstate winstate (b window) fun high a = ( delegate pid (fn() => handlefun a) ; () ) val u = connectIn inport high (* Click callbackcase *) val editCB = case getEditFunction editAttribs of None => [] | Some b => [makeControlCB (editId,b) window winstate] val show = mkAction (fn() => (ShowWindow window; UpdateWindow window;())) val close = mkAction(fn() => closeDownWin window) val kill = actions[mkAction(fn() => killprocess pid),close] val wins = [window] in GR{wins = wins, show = show, kill = kill, close = close, callbacks = editCB, (* pass callback to parent *) children = [] } end); fun editGadgetBasic editAttribs startstate = nobehaveGadget (editGadget editAttribs startstate); fun listboxGadget listboxAttribs startstate b inport = Gadget(fn (pid, parent, position) => let (* create listbox using parent, position and other info from listboxAttribs *) val (window,listboxId) = listBoxMake parent position listboxAttribs val u = AddWindowRTS(window,pid,false) (* set up shared state *) val winstate = ref startstate (* set up abstract behaviour *) val handlefun = sharedstate winstate (b window) fun high a = ( delegate pid (fn() => handlefun a) ; () ) val u = connectIn inport high (* Click callbackcase *) val listboxCB = case getListBoxFunction listboxAttribs of None => [] | Some b => [makeControlCB (listboxId,b) window winstate] val show = mkAction (fn() => (ShowWindow window; UpdateWindow window;())) val close = mkAction(fn() => closeDownWin window) val kill = actions[mkAction(fn() => killprocess pid),close] val wins = [window] in GR{wins = wins, show = show, kill = kill, close = close, callbacks = listboxCB, (* pass callback to parent *) children = [] } end); fun listboxGadgetBasic listboxAttribs startstate = nobehaveGadget (listboxGadget listboxAttribs startstate); fun staticGadget staticAttribs = Gadget(fn (pid, parent, position) => let (* create static using parent, position and other info from staticAttribs *) val window = staticMake parent position staticAttribs val u = AddWindowRTS(window,pid,false) val show = mkAction (fn() => (ShowWindow window; UpdateWindow window;())) val close = noAction val kill = actions[mkAction(fn() => killprocess pid),close] val wins = [window] in GR{wins = wins, show = show, kill = kill, close = close, callbacks = [], (* pass callback to parent *) children = [] } end); (**** Running Dialogs ****) local open Process fun runGadgetDialog parentpid g position = let val pid = newProcessID() val shell = MLHWND (toCint 0) val gr = startGadget g (pid,shell,position) in (execute(getshowGR gr) ; RunProcess pid; SetProcessRunStateRTS (parentpid,1); gr ) end val ConsoleWindow = MLHWND (toCint 0) in fun modalDialogCmd w ( d : ('_a -> action) -> gadget ) position = mkCommand(fn () => let val c = channel() fun result a = mkAction (fn () => send (c,a)) val parentpid = GetpidRTS w val b = EnableProcessWindowsRTS (parentpid,false) val GR{kill,...} = runGadgetDialog parentpid (d result) position val r = receive c in (execute kill ; SetProcessRunStateRTS (parentpid,0) ; EnableProcessWindowsRTS (parentpid,true) ; r) end ) (* The following function is used to spawn a modal dialog from the ML console. The console is blocked until the dialog has closed *) fun runModalDialog dlg position = execute (modalDialogCmd ConsoleWindow dlg position) end val runModelessDialog = runApplication (**** Creating Dialogs ****) fun modaldialogGadget winAttribs startstate children b inport = winGadget ((WinStyle [WS_POPUPWINDOW]):: winAttribs) startstate children b inport fun modaldialogGadgetBasic winAttribs startstate children = nobehaveGadget (modaldialogGadget winAttribs startstate children) val modelessdialogGadget = winGadget val modelessdialogGadgetBasic = winGadgetBasic fun localPort (f: '_a port -> gadget) :gadget = Gadget(fn (pid, parent, position) => let val p = newport() in startGadget (f p) (pid,parent,position) end); fun localId (f: Id -> gadget) :gadget = Gadget(fn (pid, parent, position) => let val id = newId() in startGadget (f id) (pid,parent,position) end); (* NB loop f p takes an existing port(p) and links f: '_a inport -> '_a outport -> gadget in a loop. It connects up the inport so ONLY outport p can be used outside. This allows external use of the outport which would not be possible if the port was created internally *) fun loop f p = f (inport p) (outport p) end (* of local *) end (* of functor GadgetFct *); polyml.5.2.1/mlsource/extra/Win/Original/GadgetSig.ML0000644000175000017500000001625710313043373021351 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) signature GadgetSig = sig type action val actions : action list -> action type label type position datatype gadget = Gadget of ProcessID -> window -> position -> gadgetresult val forkedGadget : gadget -> gadget val runAppProc : (action -> gadget) -> position -> gadgetresult datatype 'a winAttrib = WinBackground of Color | WinClassStyle of ClassStyle list | WinCursor of CursorIdentifier | WinExStyle of WindowStyleExtended list | WinIcon of IconIdentifier | WinKey of KeyMessage * window * 'a -> 'a * action | WinMenuBar of 'a menuItem list | WinMessage of OtherMessage * window * 'a -> 'a * action | WinMouse of MouseMessage * window * 'a -> 'a * action | WinName of string | WinRefresh of RefreshMessage * window * 'a -> 'a * action | WinScroll of ScrollMessage * window * 'a -> 'a * action | WinSize of int * int | WinStyle of WindowStyle list val winGadgetBasic : '_a winAttrib list -> '_a -> child list -> gadget val winGadget : '_a winAttrib list -> '_a -> child list -> (MLHWND -> 'b * '_a -> '_a * action) -> 'b inport -> gadget datatype 'a buttonAttrib = ButtonFunction of window * 'a -> 'a * action | ButtonId of Id | ButtonLabel of string | ButtonSize of int * int | ButtonStyle of ButtonStyle list val buttonGadgetBasic : '_a buttonAttrib list -> '_a -> gadget val buttonGadget : '_a buttonAttrib list -> '_a -> (MLHWND -> 'b * '_a -> '_a * action) -> 'b inport -> gadget datatype 'a scrollBarAttrib = ScrollFunction of window * 'a -> 'a * action | ScrollId of Id | ScrollInitVal of int | ScrollOrientation of Orientation | ScrollRange of int * int | ScrollSize of int * int | ScrollStyle of ScrollBarStyle list val scrollGadgetBasic : '_a scrollBarAttrib list -> '_a -> gadget datatype 'a DlgAction = ActionCancel | ActionHelp of ((unit -> action) -> gadget) * position | ActionNo | ActionOk of 'a | ActionYes | PushButtonSize of int * int val dialogGadget : 'a DlgAction list -> '_b winAttrib list -> '_b -> child list -> (MLHWND -> 'c * '_b -> '_b * action) -> 'c inport -> ('a DlgResult -> action) -> gadget val localPort : ('_a port -> gadget) -> gadget val makeKeyCB : (KeyMessage * 'a * 'b -> 'b * action) -> 'a -> 'b ref -> callbacktype * (System -> unit) val makeScrollCB : (ScrollMessage * 'a * 'b -> 'b * action) -> 'a -> 'b ref -> callbacktype * (System -> unit) val runAppProc : (action -> gadget) -> position -> gadgetresult val startGadget : gadget -> ProcessID -> window -> position -> gadgetresult val mkCommand : (unit -> 'a) -> 'a command val nobehaveGadget : (('a -> 'b * 'c -> 'c * action) -> '_d inport -> 'e) -> 'e datatype Orientation = OHorizontal | OVertical val returnC : 'a -> 'a command val createMenu : 'a menuItem list -> MLHMENU * (Id * (window * 'a -> 'a * action)) list val makeControlCB : Id * ('a * 'b -> 'b * action) -> 'a -> 'b ref -> callbacktype * ('c -> unit) val runGadget : gadget -> position -> gadgetresult val mkAction : (unit -> unit) -> action val editGadget : '_a editAttrib list -> '_a -> (MLHWND -> 'b * '_a -> '_a * action) -> 'b inport -> gadget datatype 'a staticAttrib = StaticLabel of string | StaticSize of int * int | StaticStyle of StaticStyle list datatype 'a menuItem = MenuItem of label * 'a menuAttrib list | Popup of label * 'a menuItem list | Separator val comboboxGadgetBasic : '_a comboBoxAttrib list -> '_a -> gadget val noAction : action val runDialog : (('_a -> action) -> gadget) -> position -> '_a command val groupGadget : child list -> gadget datatype 'a menuAttrib = ItemBarBreak | ItemBreak | ItemChecked | ItemDisabled | ItemId of Id | MenuFunction of window * 'a -> 'a * action datatype 'a listBoxAttrib = ListBoxFunction of window * 'a -> 'a * action | ListBoxId of Id | ListBoxLabel of string | ListBoxSize of int * int | ListBoxStyle of ListBoxStyle list datatype gadgetresult = GR of {kill: action, show: action, close: action, children: gadgetresult list, callbacks: callbackcase list, winaction: (window -> action) -> action} datatype 'a comboBoxAttrib = ComboBoxFunction of window * 'a -> 'a * action | ComboBoxId of Id | ComboBoxLabel of string | ComboBoxSize of int * int | ComboBoxStyle of ComboBoxStyle list type 'a port datatype 'a editAttrib = EditFunction of window * 'a -> 'a * action | EditId of Id | EditLabel of string | EditSize of int * int | EditStyle of EditStyle list val send : 'a outport -> 'a -> action datatype 'a DlgResult = BoolResult of bool | NoResult | OkResult of 'a val makeRefreshCB : (RefreshMessage * 'a * 'b -> 'b * action) -> 'a -> 'b ref -> callbacktype * (System -> unit) val listboxGadget : '_a listBoxAttrib list -> '_a -> (MLHWND -> 'b * '_a -> '_a * action) -> 'b inport -> gadget val seqC : 'a command * 'b command -> 'b command val thenC : 'a command * ('a -> 'b command) -> 'b command val editGadgetBasic : '_a editAttrib list -> '_a -> gadget datatype child = Abstract of gadget | Offset of position * gadget val listboxGadgetBasic : '_a listBoxAttrib list -> '_a -> gadget datatype 'a inport = In of 'a port val inport : 'a port -> 'a inport type 'a command val abstractGadget : '_a -> ('b * '_a -> '_a * action) -> 'b inport -> gadget val staticGadget : 'a staticAttrib list -> gadget type callbackcase val connectIn : 'a inport -> 'a handler -> unit datatype 'a outport = Out of 'a port val outport : 'a port -> 'a outport val loop : ('a inport -> 'a outport -> 'b) -> 'a port -> 'b val makeMouseCB : (MouseMessage * 'a * 'b -> 'b * action) -> 'a -> 'b ref -> callbacktype * (System -> unit) val timerGadget : unit command -> timerControl inport -> gadget val scrollGadget : '_a scrollBarAttrib list -> '_a -> (MLHWND -> 'b * '_a -> '_a * action) -> 'b inport -> gadget val execute : 'a command -> 'a val newport : unit -> '_a port datatype timerControl = TimerKill | TimerRepeat of int val comboboxGadget : '_a comboBoxAttrib list -> '_a -> (MLHWND -> 'b * '_a -> '_a * action) -> 'b inport -> gadget end end polyml.5.2.1/mlsource/extra/Win/Original/GdiFn.ML0000644000175000017500000000203210313043373020464 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure GdiFn = GdiFnFct ( structure Dir = Dir structure CInterface = CInterface structure ConstType = ConstType structure Type = Type32 ) ; polyml.5.2.1/mlsource/extra/Win/Original/GdiFnFct.ML0000644000175000017500000007410510313043373021133 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) signature importConstTypeSig = sig type 'a Conversion type ArcDirection type TextAlign type EnumObject type DeviceItem type DeviceContextFlag type DrawTextMode type SetWindowPositionStyle type StockObjectType type RegionOperation type SystemPaletteUse type MapMode type PolyFillMode type DialogBoxFlag type VirtualKey type MenuFlag type TrackPopMenu type DCBound type EnableScrollBarFlag type ScrollBarType type ScrollWindowFlag type GetWindowFlag type ShowWindowMode type WindowPlacementFlag type StretchMode type ResultRegion type GraphicsMode type RasterOperation type BitmapOption type RasterOpCode type XFormType type IconIdentifier type RedrawWindowFlag type BkMode structure UpperCaseConversions : sig val TEXTALIGN : TextAlign Conversion val ENUMOBJECT : EnumObject Conversion val DEVICEITEM : DeviceItem Conversion val DEVICECONTEXTFLAG : DeviceContextFlag Conversion val DRAWTEXTMODE : DrawTextMode Conversion val SETWINDOWPOSITIONSTYLE : SetWindowPositionStyle Conversion val STOCKOBJECTTYPE : StockObjectType Conversion val REGIONOPERATION : RegionOperation Conversion val SYSTEMPALETTEUSE : SystemPaletteUse Conversion val MAPMODE : MapMode Conversion val POLYFILLMODE : PolyFillMode Conversion val DIALOGBOXFLAG : DialogBoxFlag Conversion val VIRTUALKEY : VirtualKey Conversion val MENUFLAG : MenuFlag Conversion val TRACKPOPMENU : TrackPopMenu Conversion val DCBOUND : DCBound Conversion val ENABLESCROLLBARFLAG : EnableScrollBarFlag Conversion val SCROLLBARTYPE : ScrollBarType Conversion val SCROLLWINDOWFLAG : ScrollWindowFlag Conversion val GETWINDOWFLAG : GetWindowFlag Conversion val SHOWWINDOWMODE : ShowWindowMode Conversion val WINDOWPLACEMENTFLAG : WindowPlacementFlag Conversion val STRETCHMODE : StretchMode Conversion val RESULTREGION : ResultRegion Conversion val GRAPHICSMODE : GraphicsMode Conversion val RASTEROPERATION : RasterOperation Conversion val BITMAPOPTION : BitmapOption Conversion val RASTEROPCODE : RasterOpCode Conversion val ICONIDENTIFIER : IconIdentifier Conversion val REDRAWWINDOWFLAG : RedrawWindowFlag Conversion val BKMODE : BkMode Conversion val XFORMTYPE : XFormType Conversion val ARCDIRECTION : ArcDirection Conversion end end; signature importCInterfaceSig = sig type vol type Ctype type 'a Conversion type sym type dylib val alloc : int -> Ctype -> vol val address : vol -> vol val deref : vol -> vol val offset : int -> Ctype -> vol -> vol val assign : Ctype -> vol -> vol -> unit val Cpointer : Ctype -> Ctype val Cvoid : Ctype val breakConversion : 'a Conversion -> (vol -> 'a) * ('a -> vol) * Ctype val call_sym : sym -> (Ctype * vol) list -> Ctype -> vol val load_lib : string -> dylib val load_sym : dylib -> string -> sym val CHAR : string Conversion val DOUBLE : real Conversion val FLOAT : real Conversion val INT : int Conversion val LONG : int Conversion val SHORT : int Conversion val STRING : string Conversion val VOID : unit Conversion val BOOL : bool Conversion val POINTER : vol Conversion end; signature importTypeSig = sig type 'a Conversion type ForceBackground type ClassName type WindowName type Rectangle type Xcoord type Ycoord type Xoffset type Yoffset type Width type Height type Index type SuccessState type RWpermission type MLHWND type DCinstance type MLHDC type MLHGDIOBJ type MLHBITMAP type MLHRGN type MLHBRUSH type MLHPALETTE type MLHICON type MLHMENU type MLHDWP type Fmf type ListBox type StaticControl type MenuItem val HWND : MLHWND Conversion val HDC : MLHDC Conversion val HGDIOBJ : MLHGDIOBJ Conversion val HBITMAP : MLHBITMAP Conversion val HRGN : MLHRGN Conversion val HBRUSH : MLHBRUSH Conversion val HPALETTE : MLHPALETTE Conversion val HICON : MLHICON Conversion val HMENU : MLHMENU Conversion val HDWP : MLHDWP Conversion type Point type Size type XForm val POINT : Point Conversion val SIZE : Size Conversion val XFORM : XForm Conversion val RECTANGLE : Rectangle Conversion val XCOORD : Xcoord Conversion val YCOORD : Ycoord Conversion val XOFFSET : Xoffset Conversion val YOFFSET : Yoffset Conversion val WIDTH : Width Conversion val HEIGHT : Height Conversion val INDEX : Index Conversion val RWPERMISSION : RWpermission Conversion val FONTMAPPERFLAG : Fmf Conversion val SUCCESSSTATE : SuccessState Conversion val DCINSTANCE : DCinstance Conversion val FORCEBACKGROUND : ForceBackground Conversion val LISTBOX : ListBox Conversion val STATICCONTROL : StaticControl Conversion val MENUITEM : int Conversion end; signature importDirSig = sig val wpolyname : string val gdilibname : string val userlibname : string end; functor GdiFnFct ( structure Dir : importDirSig structure CInterface : importCInterfaceSig structure ConstType : importConstTypeSig structure Type : importTypeSig sharing type CInterface.Conversion = ConstType.Conversion = Type.Conversion ) = struct local open CInterface open Dir fun call name = call_sym (load_sym (load_lib gdilibname) name) fun rcall_IIIIIIIII name CR (C1,C2,C3,C4,C5,C6,C7,C8,C9) (a1,a2,a3,a4,a5,a6,a7,a8,a9) = let val (from1,to1,ctype1) = breakConversion C1 val (from2,to2,ctype2) = breakConversion C2 val (from3,to3,ctype3) = breakConversion C3 val (from4,to4,ctype4) = breakConversion C4 val (from5,to5,ctype5) = breakConversion C5 val (from6,to6,ctype6) = breakConversion C6 val (from7,to7,ctype7) = breakConversion C7 val (from8,to8,ctype8) = breakConversion C8 val (from9,to9,ctype9) = breakConversion C9 val (fromR,toR,ctypeR) = breakConversion CR val va1 = to1 a1 val va2 = to2 a2 val va3 = to3 a3 val va4 = to4 a4 val va5 = to5 a5 val va6 = to6 a6 val va7 = to7 a7 val va8 = to8 a8 val va9 = to9 a9 val res = call name [(ctype1,va1),(ctype2,va2),(ctype3,va3),(ctype4,va4),(ctype5,va5),(ctype6,va6),(ctype7,va7), (ctype8,va8),(ctype9,va9)] ctypeR in (fromR res) end fun rcall_IIIIIIIIIIII name CR (C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12) (a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12) = let val (from1,to1,ctype1) = breakConversion C1 val (from2,to2,ctype2) = breakConversion C2 val (from3,to3,ctype3) = breakConversion C3 val (from4,to4,ctype4) = breakConversion C4 val (from5,to5,ctype5) = breakConversion C5 val (from6,to6,ctype6) = breakConversion C6 val (from7,to7,ctype7) = breakConversion C7 val (from8,to8,ctype8) = breakConversion C8 val (from9,to9,ctype9) = breakConversion C9 val (from10,to10,ctype10) = breakConversion C10 val (from11,to11,ctype11) = breakConversion C11 val (from12,to12,ctype12) = breakConversion C12 val (fromR,toR,ctypeR) = breakConversion CR val va1 = to1 a1 val va2 = to2 a2 val va3 = to3 a3 val va4 = to4 a4 val va5 = to5 a5 val va6 = to6 a6 val va7 = to7 a7 val va8 = to8 a8 val va9 = to9 a9 val va10 = to10 a10 val va11 = to11 a11 val va12 = to12 a12 val res = call name [(ctype1,va1),(ctype2,va2),(ctype3,va3),(ctype4,va4),(ctype5,va5),(ctype6,va6),(ctype7,va7), (ctype8,va8),(ctype9,va9),(ctype10,va10),(ctype11,va11),(ctype12,va12)] ctypeR in (fromR res) end fun rcall_IIIIIIIIIII name CR (C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11) (a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11) = let val (from1,to1,ctype1) = breakConversion C1 val (from2,to2,ctype2) = breakConversion C2 val (from3,to3,ctype3) = breakConversion C3 val (from4,to4,ctype4) = breakConversion C4 val (from5,to5,ctype5) = breakConversion C5 val (from6,to6,ctype6) = breakConversion C6 val (from7,to7,ctype7) = breakConversion C7 val (from8,to8,ctype8) = breakConversion C8 val (from9,to9,ctype9) = breakConversion C9 val (from10,to10,ctype10) = breakConversion C10 val (from11,to11,ctype11) = breakConversion C11 val (fromR,toR,ctypeR) = breakConversion CR val va1 = to1 a1 val va2 = to2 a2 val va3 = to3 a3 val va4 = to4 a4 val va5 = to5 a5 val va6 = to6 a6 val va7 = to7 a7 val va8 = to8 a8 val va9 = to9 a9 val va10 = to10 a10 val va11 = to11 a11 val res = call name [(ctype1,va1),(ctype2,va2),(ctype3,va3),(ctype4,va4),(ctype5,va5),(ctype6,va6),(ctype7,va7), (ctype8,va8),(ctype9,va9),(ctype10,va10),(ctype11,va11)] ctypeR in (fromR res) end fun rcall_IIIIIII name CR (C1,C2,C3,C4,C5,C6,C7) (a1,a2,a3,a4,a5,a6,a7) = let val (from1,to1,ctype1) = breakConversion C1 val (from2,to2,ctype2) = breakConversion C2 val (from3,to3,ctype3) = breakConversion C3 val (from4,to4,ctype4) = breakConversion C4 val (from5,to5,ctype5) = breakConversion C5 val (from6,to6,ctype6) = breakConversion C6 val (from7,to7,ctype7) = breakConversion C7 val (fromR,toR,ctypeR) = breakConversion CR val va1 = to1 a1 val va2 = to2 a2 val va3 = to3 a3 val va4 = to4 a4 val va5 = to5 a5 val va6 = to6 a6 val va7 = to7 a7 val res = call name [(ctype1,va1),(ctype2,va2),(ctype3,va3),(ctype4,va4),(ctype5,va5),(ctype6,va6),(ctype7,va7)] ctypeR in (fromR res) end fun rcall_IIIM name CR (C1,C2,C3,C4) (a1,a2,a3,a4) = let val (from1,to1,ctype1) = breakConversion C1 val (from2,to2,ctype2) = breakConversion C2 val (from3,to3,ctype3) = breakConversion C3 val (from4,to4,ctype4) = breakConversion C4 val (fromR,toR,ctypeR) = breakConversion CR val va1 = to1 a1 val va2 = to2 a2 val va3 = to3 a3 val va4 = address (to4 a4) val res = call name [(ctype1,va1),(ctype2,va2),(ctype3,va3),(Cpointer ctype4,va4)] ctypeR in (fromR res,from4 (deref va4)) end fun rcall_IM name CR (C1,C2) (a1,a2) = let val (from1,to1,ctype1) = breakConversion C1 val (from2,to2,ctype2) = breakConversion C2 val (fromR,toR,ctypeR) = breakConversion CR val va1 = to1 a1 val va2 = address (to2 a2) val res = call name [(ctype1,va1),(Cpointer ctype2,va2)] ctypeR in (fromR res,from2 (deref va2)) end fun rcall_WRR name CR (C1,C2,C3) (a2,a3) = let val (from1,to1,ctype1) = breakConversion C1 val (from2,to2,ctype2) = breakConversion C2 val (from3,to3,ctype3) = breakConversion C3 val (fromR,toR,ctypeR) = breakConversion CR val va1 = address (alloc 1 ctype1) val va2 = address (to2 a2) val va3 = address (to3 a3) val res = call name [(Cpointer ctype1,va1),(Cpointer ctype2,va2),(Cpointer ctype3,va3)] ctypeR in (fromR res,from1 (deref va1)) end fun rcall_IRI name CR (C1,C2,C3) (a1,a2,a3) = let val (from1,to1,ctype1) = breakConversion C1 val (from2,to2,ctype2) = breakConversion C2 val (from3,to3,ctype3) = breakConversion C3 val (fromR,toR,ctypeR) = breakConversion CR val va1 = to1 a1 val va2 = address (to2 a2) val va3 = to3 a3 val res = call name [(ctype1,va1),(Cpointer ctype2,va2),(ctype3,va3)] ctypeR in (fromR res) end fun rcall_IR name CR (C1,C2) (a1,a2) = let val (from1,to1,ctype1) = breakConversion C1 val (from2,to2,ctype2) = breakConversion C2 val (fromR,toR,ctypeR) = breakConversion CR val va1 = to1 a1 val va2 = address (to2 a2) val res = call name [(ctype1,va1),(Cpointer ctype2,va2)] ctypeR in (fromR res) end fun rcall_IIRI name CR (C1,C2,C3,C4) (a1,a2,a3,a4) = let val (from1,to1,ctype1) = breakConversion C1 val (from2,to2,ctype2) = breakConversion C2 val (from3,to3,ctype3) = breakConversion C3 val (from4,to4,ctype4) = breakConversion C4 val (fromR,toR,ctypeR) = breakConversion CR val va1 = to1 a1 val va2 = to2 a2 val va3 = address (to3 a3) val va4 = to4 a4 val res = call name [(ctype1,va1),(ctype2,va2),(Cpointer ctype3,va3),(ctype4,va4)] ctypeR in (fromR res) end fun rcall_IIIIII name CR (C1,C2,C3,C4,C5,C6) (a1,a2,a3,a4,a5,a6) = let val (from1,to1,ctype1) = breakConversion C1 val (from2,to2,ctype2) = breakConversion C2 val (from3,to3,ctype3) = breakConversion C3 val (from4,to4,ctype4) = breakConversion C4 val (from5,to5,ctype5) = breakConversion C5 val (from6,to6,ctype6) = breakConversion C6 val (fromR,toR,ctypeR) = breakConversion CR val va1 = to1 a1 val va2 = to2 a2 val va3 = to3 a3 val va4 = to4 a4 val va5 = to5 a5 val va6 = to6 a6 val res = call name [(ctype1,va1),(ctype2,va2),(ctype3,va3),(ctype4,va4),(ctype5,va5),(ctype6,va6)] ctypeR in (fromR res) end fun rcall_IIIW name CR (C1,C2,C3,C4) (a1,a2,a3) = let val (from1,to1,ctype1) = breakConversion C1 val (from2,to2,ctype2) = breakConversion C2 val (from3,to3,ctype3) = breakConversion C3 val (from4,to4,ctype4) = breakConversion C4 val (fromR,toR,ctypeR) = breakConversion CR val va1 = to1 a1 val va2 = to2 a2 val va3 = to3 a3 val va4 = address (alloc 1 ctype4) val res = call name [(ctype1,va1),(ctype2,va2),(ctype3,va3),(Cpointer ctype4,va4)] ctypeR in (fromR res,from4 (deref va4)) end fun rcall_IIW name CR (C1,C2,C3) (a1,a2) = let val (from1,to1,ctype1) = breakConversion C1 val (from2,to2,ctype2) = breakConversion C2 val (from3,to3,ctype3) = breakConversion C3 val (fromR,toR,ctypeR) = breakConversion CR val va1 = to1 a1 val va2 = to2 a2 val va3 = address (alloc 1 ctype3) val res = call name [(ctype1,va1),(ctype2,va2),(Cpointer ctype3,va3)] ctypeR in (fromR res,from3 (deref va3)) end fun rcall_IIII name CR (C1,C2,C3,C4) (a1,a2,a3,a4) = let val (from1,to1,ctype1) = breakConversion C1 val (from2,to2,ctype2) = breakConversion C2 val (from3,to3,ctype3) = breakConversion C3 val (from4,to4,ctype4) = breakConversion C4 val (fromR,toR,ctypeR) = breakConversion CR val va1 = to1 a1 val va2 = to2 a2 val va3 = to3 a3 val va4 = to4 a4 val res = call name [(ctype1,va1),(ctype2,va2),(ctype3,va3),(ctype4,va4)] ctypeR in (fromR res) end fun rcall_IIIII name CR (C1,C2,C3,C4,C5) (a1,a2,a3,a4,a5) = let val (from1,to1,ctype1) = breakConversion C1 val (from2,to2,ctype2) = breakConversion C2 val (from3,to3,ctype3) = breakConversion C3 val (from4,to4,ctype4) = breakConversion C4 val (from5,to5,ctype5) = breakConversion C5 val (fromR,toR,ctypeR) = breakConversion CR val va1 = to1 a1 val va2 = to2 a2 val va3 = to3 a3 val va4 = to4 a4 val va5 = to5 a5 val res = call name [(ctype1,va1),(ctype2,va2),(ctype3,va3),(ctype4,va4),(ctype5,va5)] ctypeR in (fromR res) end fun rcall_I name CR (C1) (a1) = let val (from1,to1,ctype1) = breakConversion C1 val (fromR,toR,ctypeR) = breakConversion CR val va1 = to1 a1 val res = call name [(ctype1,va1)] ctypeR in (fromR res) end fun rcall_III name CR (C1,C2,C3) (a1,a2,a3) = let val (from1,to1,ctype1) = breakConversion C1 val (from2,to2,ctype2) = breakConversion C2 val (from3,to3,ctype3) = breakConversion C3 val (fromR,toR,ctypeR) = breakConversion CR val va1 = to1 a1 val va2 = to2 a2 val va3 = to3 a3 val res = call name [(ctype1,va1),(ctype2,va2),(ctype3,va3)] ctypeR in (fromR res) end fun rcall_IW name CR (C1,C2) (a1) = let val (from1,to1,ctype1) = breakConversion C1 val (from2,to2,ctype2) = breakConversion C2 val (fromR,toR,ctypeR) = breakConversion CR val va1 = to1 a1 val va2 = address (alloc 1 ctype2) val res = call name [(ctype1,va1),(Cpointer ctype2,va2)] ctypeR in (fromR res,from2 (deref va2)) end fun rcall_II name CR (C1,C2) (a1,a2) = let val (from1,to1,ctype1) = breakConversion C1 val (from2,to2,ctype2) = breakConversion C2 val (fromR,toR,ctypeR) = breakConversion CR val va1 = to1 a1 val va2 = to2 a2 val res = call name [(ctype1,va1),(ctype2,va2)] ctypeR in (fromR res) end in open ConstType open UpperCaseConversions open Type val BitBlt = rcall_IIIIIIIII "BitBlt" SUCCESSSTATE (HDC,XCOORD,YCOORD,WIDTH,HEIGHT,HDC,XCOORD,YCOORD,RASTEROPERATION) val CreateCompatibleBitmap = rcall_III "CreateCompatibleBitmap" HBITMAP (HDC,WIDTH,HEIGHT) val GetGraphicsMode = rcall_I "GetGraphicsMode" GRAPHICSMODE (HDC) val GetStretchBltMode = rcall_I "GetStretchBltMode" STRETCHMODE (HDC) val MaskBlt = rcall_IIIIIIIIIIII "MaskBlt" SUCCESSSTATE (HDC,XCOORD,YCOORD,WIDTH,HEIGHT,HDC,XCOORD,YCOORD,HBITMAP,XOFFSET,YOFFSET,RASTEROPCODE) val PatBlt = rcall_IIIIII "PatBlt" SUCCESSSTATE (HDC,XCOORD,YCOORD,WIDTH,HEIGHT,RASTEROPCODE) val SetStretchBltMode = rcall_II "SetStretchBltMode" SUCCESSSTATE (HDC,STRETCHMODE) val StretchBlt = rcall_IIIIIIIIIII "StretchBlt" SUCCESSSTATE (HDC,XCOORD,YCOORD,WIDTH,HEIGHT,HDC,XCOORD,YCOORD,WIDTH,HEIGHT,RASTEROPCODE) val PlgBlt = rcall_IIIIIII "PlgBlt" SUCCESSSTATE (HDC,RECTANGLE,HDC,RECTANGLE,HBITMAP,XCOORD,YCOORD) val SetBitmapDimensionEx = rcall_IIIM "SetBitmapDimensionEx" SUCCESSSTATE (HBITMAP,WIDTH,HEIGHT,SIZE) val GetBitmapDimensionEx = rcall_IW "GetBitmapDimensionEx" SUCCESSSTATE (HBITMAP,SIZE) val GetBrushOrgEx = rcall_IW "GetBrushOrgEx" SUCCESSSTATE (HDC,POINT) val SetBrushOrgEx = rcall_IM "SetBrushOrgEx" SUCCESSSTATE (HDC,POINT) val CreatePatternBrush = rcall_I "CreatePatternBrush" HBRUSH (HBITMAP) val GetStockObject = rcall_I "GetStockObject" HGDIOBJ (STOCKOBJECTTYPE) val GetClipBox = rcall_IW "GetClipBox" RESULTREGION (HDC,RECTANGLE) val RectVisible = rcall_IR "RectVisible" BOOL (HDC,RECTANGLE) val ExtSelectClipRgn = rcall_III "ExtSelectClipRgn" RESULTREGION (HDC,HRGN,REGIONOPERATION) val GetClipRgn = rcall_II "GetClipRgn" SUCCESSSTATE (HDC,HRGN) val GetMetaRgn = rcall_II "GetMetaRgn" SUCCESSSTATE (HDC,HRGN) val OffsetClipRgn = rcall_III "OffsetClipRgn" RESULTREGION (HDC,XOFFSET,YOFFSET) val PtVisible = rcall_IIII "PtVisible" BOOL (HDC,XCOORD,YCOORD,BOOL) val SelectClipPath = rcall_II "SelectClipPath" SUCCESSSTATE (HDC,REGIONOPERATION) val SelectClipRgn = rcall_II "SelectClipRgn" SUCCESSSTATE (HDC,HRGN) val SetMetaRgn = rcall_I "SetMetaRgn" SUCCESSSTATE (HDC) val GetSystemPaletteUse = rcall_I "GetSystemPaletteUse" SYSTEMPALETTEUSE (HDC) val RealizePalette = rcall_I "RealizePalette" INT (HDC) val ResizePalette = rcall_II "ResizePalette" SUCCESSSTATE (HPALETTE,INT) val SelectPalette = rcall_III "SelectPalette" HPALETTE (HDC,HPALETTE,FORCEBACKGROUND) val SetSystemPaletteUse = rcall_II "SetSystemPaletteUse" SYSTEMPALETTEUSE (HDC,SYSTEMPALETTEUSE) val UpdateColors = rcall_I "UpdateColors" SUCCESSSTATE (HDC) val CreateHalftonePalette = rcall_I "CreateHalftonePalette" HPALETTE (HDC) val GetMapMode = rcall_I "GetMapMode" MAPMODE (HDC) val SetMapMode = rcall_III "SetMapMode" MAPMODE (HDC,MAPMODE,MAPMODE) val ClientToScreen = rcall_IM "ClientToScreen" SUCCESSSTATE (HWND,POINT) val CombineTransform = rcall_WRR "CombineTransform" SUCCESSSTATE (XFORM,XFORM,XFORM) val GetCurrentPositionEx = rcall_IW "GetCurrentPositionEx" SUCCESSSTATE (HDC,POINT) val GetViewportExtEx = rcall_IW "GetViewportExtEx" SUCCESSSTATE (HDC,SIZE) val GetViewportOrgEx = rcall_IW "GetViewportOrgEx" SUCCESSSTATE (HDC,POINT) val GetWindowExtEx = rcall_IW "GetWindowExtEx" SUCCESSSTATE (HDC,SIZE) val GetWindowOrgEx = rcall_IW "GetWindowOrgEx" SUCCESSSTATE (HDC,POINT) val GetWorldTransform = rcall_IW "GetWorldTransform" SUCCESSSTATE (HDC,XFORM) val ModifyWorldTransform = rcall_IRI "ModifyWorldTransform" SUCCESSSTATE (HDC,XFORM,XFORMTYPE) val OffsetViewportOrgEx = rcall_IIIW "OffsetViewportOrgEx" SUCCESSSTATE (HDC,XOFFSET,YOFFSET,POINT) val OffsetWindowOrgEx = rcall_IIIW "OffsetWindowOrgEx" SUCCESSSTATE (HDC,XOFFSET,YOFFSET,POINT) val ScreenToClient = rcall_IR "ScreenToClient" SUCCESSSTATE (HWND,POINT) val SetViewportExtEx = rcall_IIIW "SetViewportExtEx" SUCCESSSTATE (HDC,INT,INT,SIZE) val SetViewportOrgEx = rcall_IIIW "SetViewportOrgEx" SUCCESSSTATE (HDC,INT,INT,POINT) val SetWindowExtEx = rcall_IIIW "SetWindowExtEx" SUCCESSSTATE (HDC,INT,INT,SIZE) val SetWindowOrgEx = rcall_IIIW "SetWindowOrgEx" SUCCESSSTATE (HDC,INT,INT,POINT) val SetWorldTransform = rcall_IR "SetWorldTransform" SUCCESSSTATE (HDC,XFORM) val CancelDC = rcall_I "CancelDC" SUCCESSSTATE (HDC) val CreateCompatibleDC = rcall_I "CreateCompatibleDC" HDC (HDC) val DeleteDC = rcall_I "DeleteDC" SUCCESSSTATE (HDC) val DeleteObject = rcall_I "DeleteObject" SUCCESSSTATE (HGDIOBJ) val GetCurrentObject = rcall_II "GetCurrentObject" HGDIOBJ (HDC,ENUMOBJECT) val GetDeviceCaps = rcall_II "GetDeviceCaps" DEVICEITEM (HDC,DEVICEITEM) val GetObjectType = rcall_I "GetObjectType" ENUMOBJECT (HGDIOBJ) val RestoreDC = rcall_II "RestoreDC" SUCCESSSTATE (HDC,DCINSTANCE) val SaveDC = rcall_I "SaveDC" INT (HDC) val SelectObject = rcall_II "SelectObject" RESULTREGION (HDC,HGDIOBJ) val GetDCEx = rcall_III "GetDCEx" HDC (HWND,HRGN,DEVICECONTEXTFLAG) val GetDCOrgEx = rcall_IW "GetDCOrgEx" SUCCESSSTATE (HDC,POINT) val FillRect = rcall_IRI "FillRect" SUCCESSSTATE (HDC,RECTANGLE,HBRUSH) val FrameRect = rcall_IRI "FrameRect" SUCCESSSTATE (HDC,RECTANGLE,HBRUSH) val InvertRect = rcall_IR "InvertRect" SUCCESSSTATE (HDC,RECTANGLE) val AddFontResource = rcall_I "AddFontResource" INT (STRING) val CreateScalableFontResource = rcall_IIII "CreateScalableFontResource" SUCCESSSTATE (RWPERMISSION,STRING,STRING,STRING) val GetTextAlign = rcall_I "GetTextAlign" TEXTALIGN (HDC) val GetTextCharacterExtra = rcall_I "GetTextCharacterExtra" INT (HDC) val RemoveFontResource = rcall_II "RemoveFontResource" SUCCESSSTATE (STRING,SUCCESSSTATE) val SetMapperFlags = rcall_II "SetMapperFlags" FONTMAPPERFLAG (HDC,FONTMAPPERFLAG) val SetTextAlign = rcall_II "SetTextAlign" TEXTALIGN (HDC,TEXTALIGN) val SetTextCharacterExtra = rcall_II "SetTextCharacterExtra" INT (HDC,INT) val SetTextJustification = rcall_III "SetTextJustification" SUCCESSSTATE (HDC,INT,INT) val DrawText = rcall_IIRI "DrawText" HEIGHT (HDC,STRING,RECTANGLE,DRAWTEXTMODE) val GetAspectRatioFilterEx = rcall_IW "GetAspectRatioFilterEx" SUCCESSSTATE (HDC,SIZE) val AngleArc = rcall_IIIIII "AngleArc" SUCCESSSTATE (HDC,XCOORD,YCOORD,INT,FLOAT,FLOAT) val Arc = rcall_IIIIII "Arc" SUCCESSSTATE (HDC,RECTANGLE,INT,INT,INT,INT) val ArcTo = rcall_IIIIII "ArcTo" SUCCESSSTATE (HDC,RECTANGLE,INT,INT,INT,INT) val GetArcDirection = rcall_I "GetArcDirection" ARCDIRECTION (HDC) val SetArcDirection = rcall_II "SetArcDirection" ARCDIRECTION (HDC,ARCDIRECTION) val MoveToEx = rcall_IIIW "MoveToEx" SUCCESSSTATE (HDC,XCOORD,YCOORD,POINT) val AbortPath = rcall_I "AbortPath" SUCCESSSTATE (HDC) val BeginPath = rcall_I "BeginPath" SUCCESSSTATE (HDC) val CloseFigure = rcall_I "CloseFigure" SUCCESSSTATE (HDC) val EndPath = rcall_I "EndPath" SUCCESSSTATE (HDC) val FillPath = rcall_I "FillPath" SUCCESSSTATE (HDC) val FlattenPath = rcall_I "FlattenPath" SUCCESSSTATE (HDC) val GetMiterLimit = rcall_IW "GetMiterLimit" SUCCESSSTATE (HDC,FLOAT) val PathToRegion = rcall_I "PathToRegion" HRGN (HDC) val SetMiterLimit = rcall_IIW "SetMiterLimit" SUCCESSSTATE (HDC,FLOAT,FLOAT) val StrokeAndFillPath = rcall_I "StrokeAndFillPath" SUCCESSSTATE (HDC) val StrokePath = rcall_I "StrokePath" SUCCESSSTATE (HDC) val WidenPath = rcall_I "WidenPath" SUCCESSSTATE (HDC) val CombineRgn = rcall_IIII "CombineRgn" RESULTREGION (HRGN,HRGN,HRGN,REGIONOPERATION) val EqualRgn = rcall_II "EqualRgn" BOOL (HRGN,HRGN) val FillRgn = rcall_III "FillRgn" SUCCESSSTATE (HDC,HRGN,HBRUSH) val FrameRgn = rcall_IIIII "FrameRgn" SUCCESSSTATE (HDC,HRGN,HBRUSH,WIDTH,HEIGHT) val GetPolyFillMode = rcall_I "GetPolyFillMode" POLYFILLMODE (HDC) val InvertRgn = rcall_II "InvertRgn" SUCCESSSTATE (HDC,HRGN) val OffsetRgn = rcall_III "OffsetRgn" RESULTREGION (HRGN,XOFFSET,YOFFSET) val PaintRgn = rcall_II "PaintRgn" SUCCESSSTATE (HDC,HRGN) val PtInRegion = rcall_III "PtInRegion" BOOL (HRGN,XCOORD,YCOORD) val SetPolyFillMode = rcall_II "SetPolyFillMode" POLYFILLMODE (HDC,POLYFILLMODE) val GetRgnBox = rcall_IW "GetRgnBox" SUCCESSSTATE (HRGN,RECTANGLE) val RectInRegion = rcall_II "RectInRegion" BOOL (HRGN,RECTANGLE) end end polyml.5.2.1/mlsource/extra/Win/Original/Handler.ML0000644000175000017500000000210010313043373021046 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure Handler = HandlerFct ( structure Dir = Dir structure CInterface = CInterface structure Type = Type32 structure MsgFn = MsgFn structure UserFn = UserFn ) ; polyml.5.2.1/mlsource/extra/Win/Original/HandlerFct.ML0000644000175000017500000005653410313043373021527 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (***************************************************************** ***************************************************************** * * M E S S A G E S C H E D U L E R * ***************************************************************** *****************************************************************) signature importCInterfaceSig = sig type sym type vol type Ctype type 'a Conversion val get_sym : string -> string -> sym val address : vol -> vol val alloc : int -> Ctype -> vol val voidStar : Ctype val Cstruct : Ctype list -> Ctype val Cint : Ctype val Clong : Ctype val toCint : int -> vol val toClong : int -> vol val call0 : sym -> unit -> 'a Conversion -> unit -> 'a val call1 : sym -> 'a Conversion -> 'b Conversion -> 'a -> 'b val call2 : sym -> 'a Conversion * 'b Conversion -> 'c Conversion -> 'a * 'b -> 'c val call3 : sym -> 'a Conversion * 'b Conversion * 'c Conversion -> 'd Conversion -> 'a * 'b * 'c -> 'd val call4 : sym -> 'a Conversion * 'b Conversion * 'c Conversion * 'd Conversion -> 'e Conversion -> 'a * 'b * 'c * 'd -> 'e val call5 : sym -> 'a Conversion * 'b Conversion * 'c Conversion * 'd Conversion * 'e Conversion -> 'f Conversion -> 'a * 'b * 'c * 'd * 'e -> 'f val call6 : sym -> 'a Conversion * 'b Conversion * 'c Conversion * 'd Conversion * 'e Conversion * 'f Conversion -> 'g Conversion -> 'a * 'b * 'c * 'd * 'e * 'f -> 'g val STRUCT4 : 'a1 Conversion * 'a2 Conversion * 'a3 Conversion * 'a4 Conversion -> ('a1 * 'a2 * 'a3 * 'a4) Conversion val INT : int Conversion val LONG : int Conversion val BOOL : bool Conversion val VOID : unit Conversion val POINTER : vol Conversion end; signature importTypeSig = sig type vol type 'a Conversion datatype MLHWND = MLHWND of vol val HWND : MLHWND Conversion datatype MLHDC = MLHDC of vol val HDC : MLHDC Conversion datatype MLHMENU = MLHMENU of vol end; signature importMsgFnSig = sig type System type MLHWND val MakeSystem : MLHWND*int*int*int -> System end; signature importUserFnSig = sig type MLHWND val DestroyWindow : MLHWND -> bool end; signature importDirSig = sig val wpolyname : string val gdilibname : string val userlibname : string end; functor HandlerFct ( structure Dir : importDirSig structure CInterface : importCInterfaceSig structure Type : importTypeSig structure MsgFn : importMsgFnSig structure UserFn : importUserFnSig sharing type CInterface.vol = Type.vol sharing type CInterface.Conversion = Type.Conversion sharing type Type.MLHWND = MsgFn.MLHWND = UserFn.MLHWND ) = struct open PolyML open CInterface open Type open MsgFn open Process (*open System*) open UserFn open Dir val get = get_sym userlibname val executable = wpolyname fun intop (f:int*int->'a) = f val op < = intop (op <) val op > = intop (op >) (* Message values in RTS queue *) val POLYMORPHIC = 1025 val DELAYED = 1026 val DESTROY_PROCESS_MESSAGE = 1030 (* Masks used by GetQueueLength *) datatype mask = ALL (* All messages *) | SYSALL (* All System messages *) | SYS of int (* Specific System messages *) | ALPHA (* Polymorphic messages *) | EXPIRED (* Delayed messages which have expired and are in R.T.S. Local Queue *) | PENDING (* Delayed messages which have not expired yet and are kept in R.T.S. DList *) type ProcessID = int type WindowID = int type delay = int type window = MLHWND fun nullMenu () = MLHMENU (toCint 0) (* temporary to create null windows pointer values are small integers should not clash with normal pointer values *) local val WID = ref 0 in fun nullWindow () = MLHWND (toCint (WID:=1 + (!WID) ; !WID)) end val Qmessage = STRUCT4 (HWND,INT,INT,LONG) exception PROCESSERROR of { pid : int, fname : string, message : string } exception WINDOWERROR of { wid : int, fname : string, message : string } val WID = ref 0; (* First WindowID *) val PID = ref 0; (* First ProcessID *) fun newProcessID () = (PID:=1 + (!PID) ; !PID) fun newWindowID () = (WID:=1 + (!WID) ; !WID) exception Windows of string (********* B A S I C M E S S A G E H A N D L I N G *********) val IsEmptyLocalQueueRTS = call1 (get_sym executable "IsEmptyLocalQueue") (INT) (BOOL) val GetLocalQueueRTS = call1 (get_sym executable "GetLocalQueue") (INT) (Qmessage) val PostLocalQueueRTS = call5 (get_sym executable "PostLocalQueue") (INT,HWND,INT,INT,LONG) (BOOL) val ProcessLocalDListRTS = call1 (get_sym executable "ProcessLocalDLIST") (INT) (BOOL) val PutLocalDListRTS = call6 (get_sym executable "PutLocalDLIST") (INT,HWND,INT,INT,LONG,LONG) (BOOL) val GetTime = call0 (get "GetCurrentTime") () (LONG) val PeekMessage = call5 (get "PeekMessageA") (POINTER,HWND,INT,INT,INT) (BOOL) val TranslateMessage = call1 (get "TranslateMessage") (POINTER) (BOOL) val DispatchMessage = call1 (get "DispatchMessageA") (POINTER) (LONG) val GetwidRTS = call1 (get_sym executable "Getwid") (HWND) (INT) val GetpidRTS = call1 (get_sym executable "Getpid") (HWND) (INT) val GethwndRTS = call1 (get_sym executable "GetHWND") (INT) (HWND) val AddProcessRTS = call1 (get_sym executable "AddProcess") (INT) (BOOL) val RemoveProcessRTS = call1 (get_sym executable "RemoveProcess") (INT) (BOOL) fun AddWindowRTS (w,p,drawable) = let val wid = newWindowID () in call4 (get_sym executable "AddWindow") (INT,HWND,INT,BOOL) (BOOL) (wid,w,p,drawable) end val RemoveWindowRTS = call1 (get_sym executable "RemoveWindow") (INT) (BOOL) val SetProcessRunStateRTS = call2 (get_sym executable "SetProcessRunState") (INT,INT) (VOID) val EnableProcessWindowsRTS = call2 (get_sym executable "EnableProcessWindows") (INT,BOOL) (VOID) val GetDeviceContextRTS = call1 (get_sym executable "GetDeviceContext") (HWND) (HDC) val HasValidDeviceContextRTS = call1 (get_sym executable "HasValidDeviceContext") (HWND) (BOOL) (******* A D V A N C E D M E S S A G E H A N D L I N G *******) val PriorityPostLocalQueueRTS = call5 (get_sym executable "PriorityPostLocalQueue") (INT,HWND,INT,INT,LONG) (BOOL) val GetLengthLocalQueueRTS = call3 (get_sym executable "GetLengthLocalQueue") (INT,HWND,INT) (INT) val GetLengthLocalDListRTS = call2 (get_sym executable "GetLengthLocalDList") (INT,HWND) (INT) val PeekLocalQueueRTS = call1 (get_sym executable "PeekLocalQueue") (INT) (Qmessage) val MessageExistsLocalQueueRTS = call3 (get_sym executable "MessageExistsLocalQueue") (INT,HWND,INT) (BOOL) val SelectMessageLocalQueueRTS = call3 (get_sym executable "SelectMessageLocalQueue") (INT,HWND,INT) (Qmessage) (*****************************************************************) abstype 'a Queue = Q of ('a list * 'a list) with exception EMPTY_QUEUE fun mkQ () = Q([],[]) fun emptyQ ( Q([],[]) ) = true | emptyQ _ = false fun putQ ( e , ( Q(inl,outl) ) ) = Q( e::inl , outl ) fun putfrontQ ( e , ( Q(inl,outl) ) ) = Q( inl , e :: outl ) fun getQ ( Q([],[]) ) = raise EMPTY_QUEUE | getQ ( Q(inl,[]) ) = getQ ( Q([], rev inl) ) | getQ ( Q(inl,h::t) ) = (h, Q(inl,t) ) end val (PROCESSTABLE : ( ( ProcessID * (unit->unit) Queue (* direct messages *) * ( delay * (unit->unit) ) list (* delayed messages *) ) list ref) ) = ref ([]) val (CALLBACKTABLE : ( ( WindowID * (System->unit) ) list ref) ) = ref ([]) (******************************) fun ProcessExistsML p = let fun pexists p ([]) = false | pexists p ( (p1,q1,q2) :: rest ) = if p=p1 then true else if p>p1 then false else pexists p rest in pexists p ( !PROCESSTABLE ) end fun AddProcessEntryML p = let fun ins p ([]) = [(p,mkQ(),[])] | ins p (l as ((p1,q1,q2) :: rest)) = if p>p1 then (p,mkQ(),[]) :: l else if p p1 then raise PROCESSERROR { pid = p, fname = "RemoveProcessEntryML", message = "Process does not exist" } else if p < p1 then (p1,q1,q2) :: del p rest else rest in ( PROCESSTABLE := del p (!PROCESSTABLE) ) end fun WindowExistsML w = let fun wexists w ([]) = false | wexists w ( (w1,s) :: rest ) = if w=w1 then true else if w>w1 then false else wexists w rest in wexists (GetwidRTS w) ( !CALLBACKTABLE ) end fun AddCallbackML (w,send) = let fun ins (w,s) ([]) = [(w,send)] | ins (w,s) (l as ((w1,s1) :: rest)) = if w>w1 then [(w,s)] @ l else if w w1 then l else if w < w1 then (w1,s1) :: del w rest else rest in CALLBACKTABLE := del (GetwidRTS w) ( ! CALLBACKTABLE ) end fun GetCallbackML wp = let fun get w [] = raise WINDOWERROR {wid = GetwidRTS wp, fname = "GetCallbackML", message = "Window does not exist" } | get w (l as (w1,s1) :: rest) = if w > w1 then raise WINDOWERROR {wid = GetwidRTS wp, fname = "GetCallbackML", message = "Window does not exist" } else if w < w1 then get w rest else s1 in get (GetwidRTS wp) ( ! CALLBACKTABLE ) end fun PostPolymorphicML p m = let fun insert p m ([]) = raise PROCESSERROR { pid = p, fname = "PostPolymorphicML", message = "Process does not exist" } | insert p m ( (entry as (p1,q1,q2)) :: rest) = if p=p1 then ( (p1,putQ(m,q1),q2) :: rest) else entry :: insert p m rest in PROCESSTABLE := insert p m ( !PROCESSTABLE ) end fun PriorityPostPolymorphicML p m = let fun insert p m ([]) = raise PROCESSERROR { pid = p, fname = "PriorityPostPolymorphicML", message = "Process does not exist" } | insert p m ( (entry as (p1,q1,q2)) :: rest) = if p=p1 then ( (p1,putfrontQ(m,q1),q2) :: rest) else entry :: insert p m rest in PROCESSTABLE := insert p m ( !PROCESSTABLE ) end (* fun MovePolymorphicML (p,offset) = let exception ERROR fun get n [] = raise ERROR | get 1 (h::t) = (h,t) | get n (h::t) = let val (h2,rest) = get (n-1) t in (h2,h::rest) end; fun swap n [] = raise ERROR | swap 1 [h] = [h] | swap n (h::t) = let val (out,rest) = get (n-1) t in out :: h :: rest end fun move p off ([]) = raise PROCESSERROR { pid = p, fname = "MovePolymorphicML", message = "Process does not exist" } | move p off ( (entry as (p1,q1,q2)) :: rest) = if p=p1 then ( (p1, swap off q1,q2) :: rest) else entry :: move p off rest in PROCESSTABLE := move p offset ( !PROCESSTABLE ) end *) fun GetPolymorphicML p = let fun del [] = raise PROCESSERROR { pid = p, fname = "GetPolymorphicML", message = "Process queue is empty" } | del (h::t) = (h,t) fun delete p ([]) = raise PROCESSERROR { pid = p, fname = "GetPolymorphicML", message = "Process does not exist" } | delete p ((entry as (p1,q1,q2)) :: rest) = if p=p1 then let val (e,q) = getQ q1 in ( e , (p1,q,q2)::rest ) end else let val ( e , newtable ) = delete p rest in ( e , (p1,q1,q2) :: newtable ) end val ( m , newtable ) = delete p ( !PROCESSTABLE ) in ( PROCESSTABLE := newtable ; m ) end fun PostDelayedML p delay m = let val timeout = GetTime () + delay; fun ins (t,m) ([]) = [(t,m)] | ins (t,m) (l as ((t1,m1) :: rest)) = if t DESTROY_PROCESS_MESSAGE) then ( PolyML.exception_trace ( fn () => if m=POLYMORPHIC then ProcessPolymorphic (h,m,p,l) else if m=DELAYED then ProcessDelayed (h,m,p,l) else ProcessSystem (h,m,w,l) ) handle Windows s => output (std_out,"Exception Windows <"^s^"> raised.\n") | _ => (); ProcessQueueML p ) else false end fun HANDLER p = let val msg = alloc 1 (Cstruct [voidStar,Cint,Clong,Clong,Clong,Clong,Clong,Clong]); fun HANDLERLOCAL p = let val continue = ( ProcessLocalDListRTS p ; ProcessQueueML p ); in if continue then ( BuildQueues msg ; HANDLERLOCAL p) else () end in ( AddProcessRTS p; AddProcessEntryML p; HANDLERLOCAL p; RemoveProcessRTS p; RemoveProcessEntryML p; () ) end (*********************************************************** * * A process terminates when it receives the message * DESTROYPROCESS in its local queue * CLEANUP ??? * * When a process dies the message queues associated * with the process are destroyed and also the windows * belonging to this process. * ***********************************************************) fun RunProcess p = ( fork (fn () => HANDLER p) ) fun delegate pid f = if ProcessExistsML pid then (PostPolymorphicML pid f; PostLocalQueueRTS (pid,MLHWND (toCint 0),POLYMORPHIC,pid,0)) (*****) else raise PROCESSERROR{ pid = pid, fname = "delegate", message = "Attempt to send to inactive process" } fun GetQueueLength p w m = if ProcessExistsML p then ( case m of (* All messages for window w in local queue *) ALL => GetLengthLocalQueueRTS (p,GethwndRTS w,1030 ) (* System messages for window w in local queue *) | SYSALL => GetLengthLocalQueueRTS (p,GethwndRTS w,1031 ) (* Specific system messages for window w in local queue *) | SYS n => GetLengthLocalQueueRTS (p,GethwndRTS w,n) (* Polymorphicn messages for window w in local queue *) | ALPHA => GetLengthLocalQueueRTS (p,GethwndRTS w,POLYMORPHIC) (* Delayed messages for window w which have expired in local queue *) | EXPIRED => GetLengthLocalQueueRTS (p,GethwndRTS w,DELAYED) (* Delayed messages for window w which have not expired yet *) | PENDING => GetLengthLocalDListRTS (p,GethwndRTS w) ) else raise PROCESSERROR{ pid = p, fname = "GetQueueLength", message = "Attemp to access inactive process"}; fun PeekNext p = if not (ProcessExistsML p) then raise PROCESSERROR{ pid = p, fname = "PeekNext", message = "Attemp to access inactive process"} else if (IsEmptyLocalQueueRTS p) then raise PROCESSERROR{ pid = p, fname = "PeekNext", message = "Attemp to Peek from empty queue"} else let val (h,m,w,l) = PeekLocalQueueRTS p val w = GetwidRTS h in (w,m) end fun MessageExists p w m = if not (ProcessExistsML p) then raise PROCESSERROR{ pid = p, fname = "MessageExists", message = "Attemp to access inactive process"} else if not (WindowExistsML w) then raise WINDOWERROR{ wid = (GetwidRTS w), fname = "MessageExists", message = "Attemp to access inesistent window"} else let val h = w in ( case m of (* All messages for window w in local queue *) ALL => MessageExistsLocalQueueRTS (p,h,1030) (* System messages for window w in local queue *) | SYSALL => MessageExistsLocalQueueRTS (p,h,1031) (* Specific system messages for window w in local queue *) | SYS n => MessageExistsLocalQueueRTS (p,h,n) (* Polymorphicn messages for window w in local queue *) | ALPHA => MessageExistsLocalQueueRTS (p,h,POLYMORPHIC) (* Delayed messages for window w which have expired in local queue *) | EXPIRED => MessageExistsLocalQueueRTS (p,h,DELAYED) (* Delayed messages for window w which have not expired yet *) | PENDING => raise PROCESSERROR{ pid = p, fname = "MessageExists", message = "Pending messages are not placed in the queues yet!"} ) end (* fun SelectMessage p w m = if not (ProcessExistsML p) then raise PROCESSERROR{ pid = p, fname = "SelectMessage", message = "Attemp to access inactive process"} else if not (WindowExistsML w) then raise WINDOWERROR{ wid = GetwidRTS w, fname = "SelectMessage", message = "Attemp to access inexistent window"} else let val h = w val (h2,m,p1,p2) = ( case m of ALL => SelectMessageLocalQueueRTS (p,h,1030 ) | SYSALL => SelectMessageLocalQueueRTS (p,h,1031 ) | SYS n => SelectMessageLocalQueueRTS (p,h,n) | ALPHA => SelectMessageLocalQueueRTS (p,h,POLYMORPHIC) | EXPIRED => SelectMessageLocalQueueRTS (p,h,DELAYED) | PENDING => raise PROCESSERROR{ pid = p, fname = "SelectMessage", message = "Pending messages are not placed in the queues yet!"} ) val w2 = GetwidRTS h2 in if(w2=0) then false else if m=POLYMORPHIC then (MovePolymorphicML (p,p1) ; true) else if m=DELAYED then (MoveDelayedML (p,p1) ; true) else true end *) fun profile () = let val printProcTable = call0 (get_sym executable "printProcTable") () (VOID) val printWinTable = call0 (get_sym executable "printWinTable") () (VOID) in ( printProcTable () ; printWinTable () ; ExtendedIO.flush_out std_out ; (!PROCESSTABLE,!CALLBACKTABLE); () ) end fun killprocess (pid : ProcessID) = ( PriorityPostLocalQueueRTS (pid,MLHWND (toCint 0),DESTROY_PROCESS_MESSAGE,0,0); SetProcessRunStateRTS (pid,1); ()) fun closeDownWin (w:window) = ( DestroyWindow w; RemoveWindowRTS (GetwidRTS w); DeleteCallbackML w ) end; polyml.5.2.1/mlsource/extra/Win/Original/ML32Fct.ML0000644000175000017500000000246610313043373020622 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) functor ML32Fct ( (*structure ConstType : ConstTypeSig structure Type : TypeSig structure UserFn : UserFnSig structure UserFn2 : UserFn2Sig structure GdiFn : GdiFnSig structure CtrlFn : CtrlFnSig structure Gadget : GadgetSig *) ) = struct open ConstType open MsgFn open Type32 open UserFn open UserFn2 open GdiFn open CtrlFn open Gadget open Failure structure DrawCommands = DrawCom structure Advanced = struct end end polyml.5.2.1/mlsource/extra/Win/Original/Macro.ML0000644000175000017500000000146710313043373020551 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure Macro = MacroFct () ; polyml.5.2.1/mlsource/extra/Win/Original/MacroFct.ML0000644000175000017500000001755310313043373021211 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (*************************************************************************** Translation of C macros in ML ----------------------------- Macros (all) GetBValue Retrieves blue-intensity value from 32-bit RGB value GetGValue Retrieves green-intensity value from 32-bit RGB value GetRValue Retrieves red-intensity value from 32-bit RGB value HIBYTE Retrieves the high-order byte HIWORD Retrieves the high-order word LANGIDFROMLCID Retrieves language ID from locale ID LOBYTE Retrieves the low-order byte LOWORD Retrieves the low-order word MAKEINTATOM Creates an integer atom MAKEINTRESOURCE Converts a resource identifier into a string MAKELANGID Creates a language ID from primary and sub ID MAKELCID Creates a locale ID from language ID MAKELONG LONG value from two WORDs MAKELPARAM Creates unsigned long-integer message parameter MAKELRESULT Creates unsigned long-integer message result MAKEPOINTS Converts a long value into a POINTS structure MAKEWORD Creates WORD value from two BYTEs MAKEWPARAM Creates an unsigned long-integer message parameter max Larger of two values min Returns the smaller of two values PALETTEINDEX Returns a logical-palette index specifier PALETTERGB Red, green, blue values to COLORREF POINTSTOPOINT Copies POINTS structure to POINT structure POINTTOPOINTS Converts POINT structure to POINTS structure PRIMARYLANGID Extracts primary ID from language ID RGB Red, green, blue values to RGB SUBLANGID Extracts sublanguage ID from language ID SORTIDFROMLCID Retrieves sorting ID from locale ID TEXT Converts text to Unicode when UNICODE is defined **************************************************************************) functor MacroFct () = struct local (*open Prelude; *) fun intOfHexDigit c = let val c = ord c in if ord "0" <= c andalso c <= ord "9" then c - ord "0" else if ord "a" <= c andalso c <= ord "f" then c - ord "a" + 10 else if ord "A" <= c andalso c <= ord "F" then c - ord "A" + 10 else raise Match end fun calc [] = 0 | calc (n::ns) = n + 16*calc ns exception HexFailed fun split n = (n mod 2=1,n div 2) fun extendBoolOp f (0,0) = 0 | extendBoolOp f (n,m) = let val (n0,n) = split n val (m0,m) = split m in (if f (n0,m0) then 1 else 0) + 2 * extendBoolOp f (n,m) end fun extend f (n,m) = (extendBoolOp f (n,m)) (* open Int *) val ** = IntInf.pow infix ** in fun hex str = case explode str of "0"::"x"::digs => let val increasingDigs = rev (map intOfHexDigit digs) in calc increasingDigs end | _ => raise HexFailed val natOr = extend (fn (a,b) => a orelse b) val natAnd = extend (fn (a,b) => a andalso b) val natXor = extend (fn (a,b) => (not a andalso b) orelse (a andalso not b)) fun shiftNatUp k n = n * (2 ** k) fun shiftNatDown k n = n div (2 ** k) exception HexORFailed fun hexOR [] = raise HexORFailed | hexOR [h] = h | hexOR (h::t) = natOr (h,hexOR t) end fun GetRValue(rgb) = natAnd (rgb,hex "0xFF") (* ((BYTE)(rgb)) *) fun GetGValue(rgb) = natAnd (natAnd(rgb,hex"0xFFFF") div 256,hex "0xFF") (* ((BYTE)(((WORD)(rgb)) >> 8)) *) fun GetBValue(rgb) = natAnd (rgb div 65536,hex "0xFF") (* ((BYTE)((rgb)>>16)) *) fun HIBYTE(w) = natAnd ( natAnd (w,hex "0xFFFF") div 256 , hex "0xFF") (* ((BYTE)(((WORD)(w) >> 8) & 0xFF)) *) fun HIWORD(l) = natAnd ( l div 65536, hex "0xFFFF") (* ((WORD)(((DWORD)(l) >> 16) & 0xFFFF)) *) fun LANGIDFROMLCID(lcid) = natAnd ( lcid , hex "0xFFFF" ) (* ((WORD )(lcid)) *) fun LOBYTE(w) = natAnd (w,hex "0xFF") (* ((BYTE)(w)) *) fun LOWORD(l) = natAnd (l,hex "0xFFFF") (* ((WORD)(l)) *) (* To be used in RGB *) fun LONG2BYTE dw = let val wlow = LOWORD dw val b1 = LOBYTE wlow val b2 = HIBYTE wlow val whigh = HIWORD dw val b3 = LOBYTE whigh val b4 = HIBYTE whigh in (b1,b2,b3,b4) end fun BYTE2LONG (b1,b2,b3,b4) = let val b1ok = natAnd (b1,hex "0xFF") val b2ok = natAnd (b2,hex "0xFF") val b3ok = natAnd (b3,hex "0xFF") val b4ok = natAnd (b4,hex "0xFF") in b1ok + 256 * ( b2ok + 256 * ( b3ok + 256 * b4ok) ) end fun MAKEINTATOM(i) = natAnd (i,hex "0xFFFF") (* (LPTSTR)((DWORD)((WORD)(i))) *) fun MAKEINTRESOURCEA(i) = natAnd (i,hex "0xFFFF") (* (LPSTR)((DWORD)((WORD)(i))) *) fun MAKELANGID(p, s) = natOr ( natAnd(s,hex"0xFFFF")*1024, natAnd(p,hex"0xFFFF") ) (* ((((WORD)(s)) << 10) | (WORD)(p)) *) fun MAKELCID(lgid, srtid) = natOr( natAnd(srtid,hex"0xFFFF")*65536, natAnd(lgid,hex"0xFFFF") ) (* ((DWORD)( ( ( (DWORD) ((WORD)(srtid)) ) << 16) | ( (DWORD) ((WORD)(lgid)) ) )) *) fun MAKELONG(a, b) = natOr ( natAnd(a,hex"0xFFFF"), natAnd(b,hex"0xFFFF") * 65536 ) (* ((LONG)(((WORD)(a)) | ((DWORD)((WORD)(b))) << 16)) *) fun MAKELPARAM(l, h) = MAKELONG(l, h) (* (LPARAM)MAKELONG(l, h) *) fun MAKELRESULT(l, h) = MAKELONG(l, h) (* (LRESULT)MAKELONG(l, h) *) fun MAKEPOINTS (l) = 0 (* Not implemented *) (* (*((POINTS FAR *)&(l))) *) fun MAKEWORD(a, b) = natAnd ( natOr( natAnd(a,hex"0xFF"), natAnd(natAnd(b,hex"0xFF")*256,hex"0xFFFF") ), hex"0xFFFF" ) (* ((WORD)(((BYTE)(a)) | ((WORD)((BYTE)(b))) << 8)) *) fun MAKEWPARAM(l, h) = MAKELONG(l, h) (* (WPARAM)MAKELONG(l, h) *) fun MAX(a:int,b:int) = if a > b then a else b fun MIN(a:int,b:int) = if a < b then a else b fun PALETTEINDEX(i) = natOr(hex"0x01000000", natAnd(i,hex"FFFF") ) (* ((COLORREF)(0x01000000 | (DWORD)(WORD)(i))) *) fun POINTSTOPOINT(pt,pts) = 0 (* Not implemented *) (* {(pt).x = (SHORT)LOWORD(pts); (pt).y = (SHORT)HIWORD(pts);} *) fun POINTTOPOINTS(pt) = 0 (* Not implemented *) (* (MAKELONG((short)((pt).x), (short)((pt).y))) *) fun PRIMARYLANGID(lgid) = natAnd ( natAnd(lgid,hex"0xFFFF"), hex"0x3FF") (* ((WORD)(lgid) & 0x3ff) *) fun RGB(r,g,b) = hexOR ([natAnd(r,hex"0xFF"), natAnd(natAnd(g,hex"0xFF")*256,hex"0xFFFF"), natAnd(natAnd(b,hex"0xFF")*65536,hex"0xFFFFFFFF")] ) (* ((COLORREF) (((BYTE)(r) | ((WORD)((BYTE)(g))<<8)) | (((DWORD)(BYTE)(b))<<16))) *) fun PALETTERGB(r,g,b) = natOr( hex"0x02000000", RGB(r,g,b) ) (* (0x02000000 | RGB(r,g,b)) *) fun SUBLANGID(lgid) = natAnd(lgid,hex"0xFFFF") div 1024 (* ((WORD )(lgid) >> 10) *) val NLS_VALID_LOCALE_MASK = hex ("0x000FFFFF") fun SORTIDFROMLCID(lcid) = natAnd( natAnd (lcid, NLS_VALID_LOCALE_MASK ) div 65536, hex"0xFFFF" ) (* ((WORD )((((DWORD)(lcid)) & NLS_VALID_LOCALE_MASK) >> 16)) *) fun TEXT (s) = s end; polyml.5.2.1/mlsource/extra/Win/Original/Ml32.ml0000644000175000017500000000216310313043373020317 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure ML32 = ML32Fct ( (*structure ConstType = ConstType structure Type = Type32 structure UserFn = UserFn structure UserFn2 = UserFn2 structure GdiFn = GdiFn structure CtrlFn = CtrlFn structure Gadget = Gadget*) ); polyml.5.2.1/mlsource/extra/Win/Original/MsgFn.ML0000644000175000017500000000224210313043373020512 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure MsgFn = MsgFnFct ( structure Dir = Dir structure CInterface = CInterface structure Macro = Macro structure ConstType = ConstType structure Type = Type32 structure MsgVal = MsgVal structure MsgType = MsgType ); polyml.5.2.1/mlsource/extra/Win/Original/MsgFnFct.ML0000644000175000017500000056701410313043374021165 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) signature importCInterfaceSig = sig type vol type Ctype type sym type 'a Conversion val get_sym : string -> string -> sym val Cchar : Ctype val Cdouble : Ctype val Cfloat : Ctype val Cint : Ctype val Clong : Ctype val Cshort : Ctype val Cpointer : Ctype -> Ctype val Cstruct : Ctype list -> Ctype val Cfunction : Ctype list * Ctype -> Ctype val Cvoid : Ctype val voidStar : Ctype val toCstring : string -> vol val toCchar : string -> vol val toCdouble : real -> vol val toCfloat : real -> vol val toCint : int -> vol val toClong : int -> vol val toCshort : int -> vol val fromCstring : vol -> string val fromCchar : vol -> string val fromCdouble : vol -> real val fromCfloat : vol -> real val fromCint : vol -> int val fromClong : vol -> int val fromCshort : vol -> int val break_struct : Ctype list -> vol -> vol list val make_struct : (Ctype * vol) list -> vol val alloc : int -> Ctype -> vol val address : vol -> vol val deref : vol -> vol val offset : int -> Ctype -> vol -> vol val assign : Ctype -> vol -> vol -> unit val POINTER : vol Conversion val INT : int Conversion val LONG : int Conversion val call1 : sym -> 'a Conversion -> 'b Conversion -> 'a -> 'b end; signature importMacroSig = sig val LOWORD : int -> int val HIWORD : int -> int val natAnd : int * int -> int end; signature importTypeSig = sig type vol type 'a Conversion datatype Id = Id of int datatype 'a option = Some of 'a | None datatype MLHWND = MLHWND of vol val HWND : MLHWND Conversion datatype MLHDC = MLHDC of vol datatype MLHMENU = MLHMENU of vol datatype MLHANDLE = MLHANDLE of vol datatype MLHRGN = MLHRGN of vol datatype MLHFONT = MLHFONT of vol datatype MLHICON = MLHICON of vol datatype MLHCURSOR = MLHCURSOR of vol datatype MLHBRUSH = MLHBRUSH of vol type Point val mkPoint : {x:int,y:int} -> Point type Rectangle val mkRect : {left:int,top:int,right:int,bottom:int} -> Rectangle end; signature importConstTypeSig = sig type 'a encoding val absE : 'a encoding -> int -> 'a type WindowStyleExtended type WindowStyle type SetWindowPositionStyle type SystemCommand type HitTest type ScrollBarType type ControlNotification val ScrollBarTypeE : ScrollBarType encoding val HitTestE : HitTest encoding val WindowStyleExtendedE : WindowStyleExtended encoding val WindowStyleE : WindowStyle encoding val SetWindowPositionStyleE : SetWindowPositionStyle encoding val SystemCommandE : SystemCommand encoding val ControlNotificationE : ControlNotification encoding end; signature importMsgValSig = sig datatype MessageValue = MSG_NULL (* 0x0000 *) | MSG_CREATE (* 0x0001 *) | MSG_DESTROY (* 0x0002 *) | MSG_MOVE (* 0x0003 *) | MSG_SIZE (* 0x0005 *) | MSG_ACTIVATE (* 0x0006 *) | MSG_SETFOCUS (* 0x0007 *) | MSG_KILLFOCUS (* 0x0008 *) | MSG_ENABLE (* 0x000A *) | MSG_SETREDRAW (* 0x000B *) | MSG_SETTEXT (* 0x000C *) | MSG_GETTEXT (* 0x000D *) | MSG_GETTEXTLENGTH (* 0x000E *) | MSG_PAINT (* 0x000F *) | MSG_CLOSE (* 0x0010 *) | MSG_QUERYENDSESSION (* 0x0011 *) | MSG_QUIT (* 0x0012 *) | MSG_QUERYOPEN (* 0x0013 *) | MSG_ERASEBKGND (* 0x0014 *) | MSG_SYSCOLORCHANGE (* 0x0015 *) | MSG_ENDSESSION (* 0x0016 *) | MSG_SHOWWINDOW (* 0x0018 *) | MSG_WININICHANGE (* 0x001A *) | MSG_DEVMODECHANGE (* 0x001B *) | MSG_ACTIVATEAPP (* 0x001C *) | MSG_FONTCHANGE (* 0x001D *) | MSG_TIMECHANGE (* 0x001E *) | MSG_CANCELMODE (* 0x001F *) | MSG_SETCURSOR (* 0x0020 *) | MSG_MOUSEACTIVATE (* 0x0021 *) | MSG_CHILDACTIVATE (* 0x0022 *) | MSG_QUEUESYNC (* 0x0023 *) | MSG_GETMINMAXINFO (* 0x0024 *) | MSG_PAINTICON (* 0x0026 *) | MSG_ICONERASEBKGND (* 0x0027 *) | MSG_NEXTDLGCTL (* 0x0028 *) | MSG_SPOOLERSTATUS (* 0x002A *) | MSG_DRAWITEM (* 0x002B *) | MSG_MEASUREITEM (* 0x002C *) | MSG_DELETEITEM (* 0x002D *) | MSG_VKEYTOITEM (* 0x002E *) | MSG_CHARTOITEM (* 0x002F *) | MSG_SETFONT (* 0x0030 *) | MSG_GETFONT (* 0x0031 *) | MSG_SETHOTKEY (* 0x0032 *) | MSG_GETHOTKEY (* 0x0033 *) | MSG_QUERYDRAGICON (* 0x0037 *) | MSG_COMPAREITEM (* 0x0039 *) | MSG_COMPACTING (* 0x0041 *) | MSG_OTHERWINDOWCREATED (* 0x0042 *) (* no longer suported *) | MSG_OTHERWINDOWDESTROYED (* 0x0043 *) (* no longer suported *) | MSG_COMMNOTIFY (* 0x0044 *) (* no longer suported *) | MSG_WINDOWPOSCHANGING (* 0x0046 *) | MSG_WINDOWPOSCHANGED (* 0x0047 *) | MSG_POWER (* 0x0048 *) | MSG_COPYDATA (* 0x004A *) | MSG_CANCELJOURNAL (* 0x004B *) | MSG_NCCREATE (* 0x0081 *) | MSG_NCDESTROY (* 0x0082 *) | MSG_NCCALCSIZE (* 0x0083 *) | MSG_NCHITTEST (* 0x0084 *) | MSG_NCPAINT (* 0x0085 *) | MSG_NCACTIVATE (* 0x0086 *) | MSG_GETDLGCODE (* 0x0087 *) | MSG_NCMOUSEMOVE (* 0x00A0 *) | MSG_NCLBUTTONDOWN (* 0x00A1 *) | MSG_NCLBUTTONUP (* 0x00A2 *) | MSG_NCLBUTTONDBLCLK (* 0x00A3 *) | MSG_NCRBUTTONDOWN (* 0x00A4 *) | MSG_NCRBUTTONUP (* 0x00A5 *) | MSG_NCRBUTTONDBLCLK (* 0x00A6 *) | MSG_NCMBUTTONDOWN (* 0x00A7 *) | MSG_NCMBUTTONUP (* 0x00A8 *) | MSG_NCMBUTTONDBLCLK (* 0x00A9 *) | MSG_KEYDOWN (* 0x0100 *) | MSG_KEYUP (* 0x0101 *) | MSG_CHAR (* 0x0102 *) | MSG_DEADCHAR (* 0x0103 *) | MSG_SYSKEYDOWN (* 0x0104 *) | MSG_SYSKEYUP (* 0x0105 *) | MSG_SYSCHAR (* 0x0106 *) | MSG_SYSDEADCHAR (* 0x0107 *) | MSG_KEYLAST (* 0x0108 *) | MSG_INITDIALOG (* 0x0110 *) | MSG_COMMAND (* 0x0111 *) | MSG_SYSCOMMAND (* 0x0112 *) | MSG_TIMER (* 0x0113 *) | MSG_HSCROLL (* 0x0114 *) | MSG_VSCROLL (* 0x0115 *) | MSG_INITMENU (* 0x0116 *) | MSG_INITMENUPOPUP (* 0x0117 *) | MSG_MENUSELECT (* 0x011F *) | MSG_MENUCHAR (* 0x0120 *) | MSG_ENTERIDLE (* 0x0121 *) | MSG_CTLCOLORMSGBOX (* 0x0132 *) | MSG_CTLCOLOREDIT (* 0x0133 *) | MSG_CTLCOLORLISTBOX (* 0x0134 *) | MSG_CTLCOLORBTN (* 0x0135 *) | MSG_CTLCOLORDLG (* 0x0136 *) | MSG_CTLCOLORSCROLLBAR (* 0x0137 *) | MSG_CTLCOLORSTATIC (* 0x0138 *) | MSG_MOUSEMOVE (* 0x0200 *) | MSG_LBUTTONDOWN (* 0x0201 *) | MSG_LBUTTONUP (* 0x0202 *) | MSG_LBUTTONDBLCLK (* 0x0203 *) | MSG_RBUTTONDOWN (* 0x0204 *) | MSG_RBUTTONUP (* 0x0205 *) | MSG_RBUTTONDBLCLK (* 0x0206 *) | MSG_MBUTTONDOWN (* 0x0207 *) | MSG_MBUTTONUP (* 0x0208 *) | MSG_MBUTTONDBLCLK (* 0x0209 *) | MSG_PARENTNOTIFY (* 0x0210 *) | MSG_ENTERMENULOOP (* 0x0211 *) | MSG_EXITMENULOOP (* 0x0212 *) | MSG_MDICREATE (* 0x0220 *) | MSG_MDIDESTROY (* 0x0221 *) | MSG_MDIACTIVATE (* 0x0222 *) | MSG_MDIRESTORE (* 0x0223 *) | MSG_MDINEXT (* 0x0224 *) | MSG_MDIMAXIMIZE (* 0x0225 *) | MSG_MDITILE (* 0x0226 *) | MSG_MDICASCADE (* 0x0227 *) | MSG_MDIICONARRANGE (* 0x0228 *) | MSG_MDIGETACTIVE (* 0x0229 *) | MSG_MDISETMENU (* 0x0230 *) | MSG_DROPFILES (* 0x0233 *) | MSG_MDIREFRESHMENU (* 0x0234 *) | MSG_CUT (* 0x0300 *) | MSG_COPY (* 0x0301 *) | MSG_PASTE (* 0x0302 *) | MSG_CLEAR (* 0x0303 *) | MSG_UNDO (* 0x0304 *) | MSG_RENDERFORMAT (* 0x0305 *) | MSG_RENDERALLFORMATS (* 0x0306 *) | MSG_DESTROYCLIPBOARD (* 0x0307 *) | MSG_DRAWCLIPBOARD (* 0x0308 *) | MSG_PAINTCLIPBOARD (* 0x0309 *) | MSG_VSCROLLCLIPBOARD (* 0x030A *) | MSG_SIZECLIPBOARD (* 0x030B *) | MSG_ASKCBFORMATNAME (* 0x030C *) | MSG_CHANGECBCHAIN (* 0x030D *) | MSG_HSCROLLCLIPBOARD (* 0x030E *) | MSG_QUERYNEWPALETTE (* 0x030F *) | MSG_PALETTEISCHANGING (* 0x0310 *) | MSG_PALETTECHANGED (* 0x0311 *) | MSG_HOTKEY (* 0x0312 *) | MSG_PENWINFIRST (* 0x0380 *) | MSG_PENWINLAST (* 0x038F *) | MSG_USER (* 0x0400 *) val i2MessageValue : int -> MessageValue end; signature importMsgTypeSig = sig type MLHWND type MLHDC type MLHMENU type MLHANDLE type MLHRGN type MLHFONT type Point type Rectangle type WindowStyleExtended type WindowStyle type SetWindowPositionStyle type SystemCommand type ControlNotification datatype System = SYS_ACTIVATE of { w : MLHWND, active : int, minimize : bool } (* Indicates a change in activation state *) (*------------------------------------------------------------------------------ WM_ACTIVATE fActive = LOWORD(wParam); -o- activation flag -o- fMinimized = (BOOL) HIWORD(wParam); -o- minimized flag -o- MLHWND = (MLHWND) lParam; -o- window handle -o- The WM_ACTIVATE message is sent when a window is being activated or deactivated. This message is sent first to the window procedure of the top-level window being deactivated and then to the window procedure of the top-level window being activated. ------------------------------------------------------------------------------*) | SYS_ACTIVATEAPP of { w : MLHWND, active : bool, threadid: int } (* Notifies applications when a new task activates *) (*------------------------------------------------------------------------------ WM_ACTIVATEAPP fActive = (BOOL) wParam; -o- activation flag -o- dwThreadID = (int) lParam: -o- thread identifier -o- The WM_ACTIVATEAPP message is sent when a window beinting to a different application than the active window is about to be activated. The message is sent to the application whose window is being activated and to the application whose window is being deactivated. ------------------------------------------------------------------------------*) | SYS_ASKCBFORMATNAME of { w : MLHWND, formatname : string } (* Retrieves the name of the clipboard format *) (*------------------------------------------------------------------------------ WM_ASKCBFORMATNAME cchName = (int) wParam -o- size of buffer -o- lpszFormatName = (LPTSTR) lParam -o- buffer to receive format name -o- The WM_ASKCBFORMATNAME message is sent to the clipboard owner by a clipboard viewer window to request the name of a CF_OWNERDISPLAY clipboard format. ------------------------------------------------------------------------------*) | SYS_CANCELJOURNAL (* Notifies application when user cancels journaling *) (*------------------------------------------------------------------------------ WM_CANCELJOURNAL wParam = 0; -o- not used, must be zero -o- lParam = 0; -o- not used, must be zero -o- The WM_CANCELJOURNAL message is posted to an application when a user cancels the application's journaling activities. The message is posted with a NULL window handle. ------------------------------------------------------------------------------*) | SYS_CANCELMODE of { w : MLHWND } (* Notifies a Window to cancel internal modes *) (*------------------------------------------------------------------------------ WM_CANCELMODE The WM_CANCELMODE message is sent to the focus window when a dialog box or message box is displayed, enabling the focus window to cancel modes such as mouse capture. ------------------------------------------------------------------------------*) | SYS_CHANGECBCHAIN of { w : MLHWND, removed : MLHWND, next : MLHWND } (* Notifies clipboard viewer of removal from chain *) (*------------------------------------------------------------------------------ WM_CHANGECBCHAIN MLHWNDRemove = (MLHWND) wParam; -o- handle of window being removed -o- MLHWNDNext = (MLHWND) lParam; -o- handle of next window in chain -o- The WM_CHANGECBCHAIN message is sent to the first window in the clipboard viewer chain when a window is being removed from the chain. ------------------------------------------------------------------------------*) | SYS_CHAR of { w : MLHWND, ch : string, data : int } (* Indicates the user pressed a character key *) (*------------------------------------------------------------------------------ WM_CHAR chCharCode = (TCHAR) wParam; -o- character code -o- lKeyData = lParam; -o- key data -o- The WM_CHAR message is posted to the window with the keyboard focus when a WM_KEYDOWN message is translated by the TranslateMessage function. WM_CHAR contains the character code of the key that was pressed. ------------------------------------------------------------------------------*) | SYS_CHARTOITEM of { w : MLHWND, key : int, caretpos : int, listbox : MLHWND } (* Provides list-box keystrokes to owner Window *) (*------------------------------------------------------------------------------ WM_CHARTOITEM nKey = LOWORD(wParam); -o- key value -o- nCaretPos = HIWORD(wParam); -o- caret position -o- MLHWNDListBox = (MLHWND) lParam; -o- handle of list box -o- The WM_CHARTOITEM message is sent by a list box with the LBS_WANTKEYBOARDINPUT style to its owner in response to a WM_CHAR message. ------------------------------------------------------------------------------*) | SYS_CHILDACTIVATE of { w : MLHWND } (* Notifies a child Window of activation *) (*------------------------------------------------------------------------------ WM_CHILDACTIVATE The WM_CHILDACTIVATE message is sent to a multiple document interface (MDI) child window when the user clicks the window's title bar or when the window is activated, moved, or sized. ------------------------------------------------------------------------------*) | SYS_CHOOSEFONT_GETLOGFONT of { w : MLHWND, lfHeight : int, lfWidth : int, lfEscapement : int, lfOrientation : int, lfWeight : int, lfItalic : int, lfUnderline : int, lfStrikeOut : int, lfCharSet : int, lfOutPrecision : int, lfClipPrecision : int, lfQuality : int, lfPitchAndFamily : int, lfFaceName : string } (* Retrieves LOGFONT structure for Font dialog box *) (*------------------------------------------------------------------------------ WM_CHOOSEFONT_GETLOGFONT wParam = 0; -o- not used, must be zero -o- lParam = (LPLOGFONT) lplf; -o- address of struct. with font data -o- An application sends a WM_CHOOSEFONT_GETLOGFONT message to the Font dialog box created by the ChooseFont function to retrieve the current LOGFONT structure. ------------------------------------------------------------------------------*) | SYS_CLEAR of { w : MLHWND } (* Clears an edit control *) (*------------------------------------------------------------------------------ WM_CLEAR wParam = 0; -o- not used, must be zero -o- lParam = 0; -o- not used, must be zero -o- An application sends a WM_CLEAR message to an edit control or combo box to delete (clear) the current selection, if any, from the edit control. ------------------------------------------------------------------------------*) | SYS_CLOSE of { w : MLHWND } (* System Close menu command was chosen *) (*------------------------------------------------------------------------------ WM_CLOSE The WM_CLOSE message is sent as a signal that a window or an application should terminate. ------------------------------------------------------------------------------*) | SYS_COMMAND of { w : MLHWND, notifycode : ControlNotification, wid : int, control : MLHWND } (* Specifies a command message *) (*------------------------------------------------------------------------------ WM_COMMAND wNotifyCode = HIWORD(wParam); -o- notification code -o- wID = LOWORD(wParam); -o- item, control, or accelerator identifier -o- MLHWNDCtl = (MLHWND) lParam; -o- handle of control -o- The WM_COMMAND message is sent when the user selects a command item from a menu, when a control sends a notification message to its parent window, or when an accelerator keystroke is translated. ------------------------------------------------------------------------------*) | SYS_COMPACTING of { w : MLHWND, compactratio : int } (* Indicates a low memory condition *) (*------------------------------------------------------------------------------ WM_COMPACTING wCompactRatio = wParam; -o- compacting ratio -o- The WM_COMPACTING message is sent to all top-level windows when Windows detects more than 12.5 percent of system time over a 30- to 60-second interval is being spent compacting memory. This indicates that system memory is low. ------------------------------------------------------------------------------*) | SYS_COMPAREITEM of { w : MLHWND, controlid : int, CtlType : int, CtlID : int, hItem : MLHWND, itemID1 : int, itemData1 : int, itemID2 : int, itemData2 : int } (* Determines position of combo- or list-box item *) (*------------------------------------------------------------------------------ WM_COMPAREITEM idCtl = wParam; -o- control identifier -o- lpcis = (LPCOMPAREITEMSTRUCT) lParam; -o- structure with items -o- Windows sends the WM_COMPAREITEM message to determine the relative position of a new item in the sorted list of an owner-drawn combo box or list box. Whenever the application adds a new item, Windows sends this message to the owner of a combo box or list box created with the CBS_SORT or LBS_SORT style. ------------------------------------------------------------------------------*) | SYS_COPY of { w : MLHWND } (* Copies a selection to the clipboard *) (*------------------------------------------------------------------------------ WM_COPY wParam = 0; -o- not used, must be zero -o- lParam = 0; -o- not used, must be zero -o- An application sends the WM_COPY message to an edit control or combo box to copy the current selection to the Clipboard in CF_TEXT format. ------------------------------------------------------------------------------*) | SYS_COPYDATA of { w : MLHWND, sender : MLHWND, data : int } (* Passes data to another application *) (*------------------------------------------------------------------------------ WM_COPYDATA wParam = (WPARAM) (MLHWND) MLHWNDFrom; -o- handle of sending window -o- lParam = (LPARAM) (P COPYDATASTRUCT) pcds; -o- pointer to structure with data -o- The WM_COPYDATA message is sent when an application passes data to another application. ------------------------------------------------------------------------------*) | SYS_CREATE of { w : MLHWND, menu : MLHMENU, parent : MLHWND, cy : int, cx : int, y : int, x : int, style : WindowStyle, name : string, classname : string, extendedstyle : WindowStyleExtended } (* Indicates a Window is being created *) (*------------------------------------------------------------------------------ WM_CREATE lpcs = (LP CREATESTRUCT) lParam; -o- structure with creation data -o- The WM_CREATE message is sent when an application requests that a window be created by calling the CreateWindowEx or CreateWindow function. The window procedure of the new window receives this message after the window is created, but before the window becomes visible. The message is sent before the CreateWindowEx or CreateWindow function returns. ------------------------------------------------------------------------------*) | SYS_CTLCOLORBTN of { w : MLHWND, displaycontext : MLHDC, button : MLHWND } (* Button is about to be drawn *) (*------------------------------------------------------------------------------ WM_CTLCOLORBTN MLHDCButton = (MLHDC) wParam; -o- handle of button display context -o- MLHWNDButton = (MLHWND) lParam; -o- handle of button -o- The WM_CTLCOLORBTN message is sent to the parent window of a button when the button is about to be drawn. By responding to this message, the parent window can set a button's text and background colors. ------------------------------------------------------------------------------*) | SYS_CTLCOLORDLG of { w : MLHWND, displaycontext : MLHDC, dialogbox : MLHWND } (* Dialog box is about to be drawn *) (*------------------------------------------------------------------------------ WM_CTLCOLORDLG MLHDCDlg = (MLHDC) wParam; -o- handle of dialog box display context -o- MLHWNDDlg = (MLHWND) lParam; -o- handle of dialog box -o- The WM_CTLCOLORDLG message is sent to a dialog box before Windows draws the dialog box. By responding to this message, the dialog box can set its text and background colors by using the given display device context handle. ------------------------------------------------------------------------------*) | SYS_CTLCOLOREDIT of { w : MLHWND, displaycontext : MLHDC, editcontrol : MLHWND } (* Control is about to be drawn *) (*------------------------------------------------------------------------------ WM_CTLCOLOREDIT MLHDCEdit = (MLHDC) wParam; -o- handle of display context -o- MLHWNDEdit = (MLHWND) lParam; -o- handle of static control -o- The WM_CTLCOLOREDIT message is sent to the parent window of an edit control when the control is about to be drawn. By responding to this message, the parent window can use the given device context handle to set the text and background colors of the edit control. ------------------------------------------------------------------------------*) | SYS_CTLCOLORLISTBOX of { w : MLHWND, displaycontext : MLHDC, listbox : MLHWND } (* List box is about to be drawn *) (*------------------------------------------------------------------------------ WM_CTLCOLORLISTBOX MLHDCLB = (MLHDC) wParam; -o- handle of list box display context -o- MLHWNDLB = (MLHWND) lParam; -o- handle of list box -o- The WM_CTLCOLORLISTBOX message is sent to the parent window of a list box before Windows draws the list box. By responding to this message, the parent window can set the text and background colors of the list box by using the given display device context handle. ------------------------------------------------------------------------------*) | SYS_CTLCOLORMSGBOX of { w : MLHWND, displaycontext : MLHDC, messagebox : MLHWND } (* Message box is about to be drawn *) (*------------------------------------------------------------------------------ WM_CTLCOLORMSGBOX MLHDCMB = (MLHDC) wParam; -o- handle of message box display context -o- MLHWNDMB = (MLHWND) lParam; -o- handle of message box -o- The WM_CTLCOLORMSGBOX message is sent to the owner window of a message box before Windows draws the message box. By responding to this message, the owner window can set the text and background colors of the message box by using the given display device context handle. ------------------------------------------------------------------------------*) | SYS_CTLCOLORSCROLLBAR of { w : MLHWND, displaycontext : MLHDC, scrollbar : MLHWND } (* Indicates scroll bar is about to be drawn *) (*------------------------------------------------------------------------------ WM_CTLCOLORSCROLLBAR MLHDCSB = (MLHDC) wParam; -o- handle of scroll bar display context -o- MLHWNDSB = (MLHWND) lParam; -o- handle of scroll bar -o- The WM_CTLCOLORSCROLLBAR message is sent to the parent window of a scroll bar control when the control is about to be drawn. By responding to this message, the parent window can use the given display context handle to set the background color of the scroll bar control. ------------------------------------------------------------------------------*) | SYS_CTLCOLORSTATIC of { w : MLHWND, displaycontext : MLHDC, staticcontrol : MLHWND } (* Control is about to be drawn *) (*------------------------------------------------------------------------------ WM_CTLCOLORSTATIC MLHDCStatic = (MLHDC) wParam; -o- handle of display context -o- MLHWNDStatic = (MLHWND) lParam; -o- handle of static control -o- The WM_CTLCOLORSTATIC message is sent to the parent window of a static control when the control is about to be drawn. By responding to this message, the parent window can use the given device context (DC) handle to set the text and background colors of the static control. ------------------------------------------------------------------------------*) | SYS_CUT of { w : MLHWND } (* Deletes a selection and copies it to the clipboard *) (*------------------------------------------------------------------------------ WM_CUT wParam = 0; -o- not used, must be zero -o- lParam = 0; -o- not used, must be zero -o- An application sends a WM_CUT message to an edit control or combo box to delete (cut) the current selection, if any, in the edit control and copy the deleted text to the Clipboard in CF_TEXT format. ------------------------------------------------------------------------------*) | SYS_DDE_ACK (* Acknowledges a DDE message *) (*------------------------------------------------------------------------------ WM_DDE_ACK -o- Response to WM_DDE_INITIATE -o- wParam = (WPARAM) MLHWND; -o- handle of posting application -o- lParam = MAKELPARAM(aApp, aTopic) -o- application and topic atoms -o- -o- Response to WM_DDE_EXECUTE -o- wParam = (WPARAM) MLHWND; -o- handle of posting application -o- lParam = (LPARAM) lPackedVal; -o- packed status flags and data handle -o- -o- Response to all other messages -o- wParam = (WPARAM) MLHWND; -o- handle of posting application -o- lParam = (LPARAM) lPackedVal; -o- packed status flags and item -o- The WM_DDE_ACK message notifies a dynamic data exchange (DDE) application of the receipt and processing of a WM_DDE_INITIATE, WM_DDE_EXECUTE, WM_DDE_DATA, WM_DDE_ADVISE, WM_DDE_UNADVISE, or WM_DDE_POKE message, and in some cases, of a WM_DDE_REQUEST message. ------------------------------------------------------------------------------*) | SYS_DDE_ADVISE (* Requests a DDE data-change update *) (*------------------------------------------------------------------------------ WM_DDE_ADVISE wParam = (WPARAM) MLHWND; -o- handle of posting application -o- lParam = (LPARAM) lPackedVal; -o- packed DDEADVISE and item atom -o- A dynamic data exchange (DDE) client application posts the WM_DDE_ADVISE message to a DDE server application to request the server to supply an update for a data item whenever the item changes. ------------------------------------------------------------------------------*) | SYS_DDE_DATA (* Sends data to a DDE client *) (*------------------------------------------------------------------------------ WM_DDE_DATA wParam = (WPARAM) MLHWND; -o- handle of posting application -o- lParam = (LPARAM) lPackedVal; -o- packed DDEDATA and item atom -o- A dynamic data exchange (DDE) server application posts a WM_DDE_DATA message to a DDE client application to pass a data item to the client or to notify the client of the availability of a data item. ------------------------------------------------------------------------------*) | SYS_DDE_EXECUTE (* Sends a string to a DDE server *) (*------------------------------------------------------------------------------ WM_DDE_EXECUTE wParam = (WPARAM) MLHWND; -o- handle of posting application -o- lParam = (LPARAM) hCommands; -o- handle to global object -o- A dynamic data exchange (DDE) client application posts a WM_DDE_EXECUTE message to a DDE server application to send a string to the server to be processed as a series of commands. The server application is expected to post a WM_DDE_ACK message in response. ------------------------------------------------------------------------------*) | SYS_DDE_INITIATE (* Initiates a DDE conversation *) (*------------------------------------------------------------------------------ WM_DDE_INITIATE wParam = (WPARAM) MLHWND; -o- handle of posting appl. -o- lParam = MAKELPARAM(aApp, aTopic); -o- appl. and topic atoms -o- A dynamic data exchange (DDE) client application sends a WM_DDE_INITIATE message to initiate a conversation with a server application responding to the specified application and topic names. Upon receiving this message, all server applications with names that match the specified application and that support the specified topic are expected to acknowledge it. (For more information, see the WM_DDE_ACK message.) ------------------------------------------------------------------------------*) | SYS_DDE_POKE (* Send unsolicited data to a server *) (*------------------------------------------------------------------------------ WM_DDE_POKE wParam = (WPARAM) MLHWND; -o- handle of posting application -o- lParam = (LPARAM) lPackedVal; -o- packed DDEPOKE and item atom -o- A dynamic data exchange (DDE) client application posts a WM_DDE_POKE message to a DDE server application. A client uses this message to request the server to accept an unsolicited data item. The server is expected to reply with a WM_DDE_ACK message indicating whether it accepted the data item. ------------------------------------------------------------------------------*) | SYS_DDE_REQUEST (* Requests data from a DDE server *) (*------------------------------------------------------------------------------ WM_DDE_REQUEST wParam = (WPARAM) MLHWND; -o- handle of posting application -o- lParam = (LPARAM) lParam; -o- holds cfFormat and aItem -o- A dynamic data exchange (DDE) client application posts a WM_DDE_REQUEST message to a DDE server application to request the value of a data item. ------------------------------------------------------------------------------*) | SYS_DDE_TERMINATE (* Ends a DDE conversation *) (*------------------------------------------------------------------------------ WM_DDE_TERMINATE wParam = (WPARAM) MLHWND; -o- handle of posting window -o- lParam = 0; -o- not used, must be zero -o- A dynamic data exchange (DDE) application (client or server) posts a WM_DDE_TERMINATE message to terminate a conversation. ------------------------------------------------------------------------------*) | SYS_DDE_UNADVISE (* Stops a DDE data-update request *) (*------------------------------------------------------------------------------ WM_DDE_UNADVISE wParam = (WPARAM) MLHWND; -o- handle of posting application -o- lParam = (LPARAM) lParam; -o- format and item atom -o- A dynamic data exchange (DDE) client application posts a WM_DDE_UNADVISE message to inform a DDE server application that the specified item or a particular clipboard format for the item should no inter be updated. This terminates the warm or hot link for the specified item. ------------------------------------------------------------------------------*) | SYS_DEADCHAR of { w : MLHWND, charcode : string, keydata : int } (* Indicates the user pressed a dead key *) (*------------------------------------------------------------------------------ WM_DEADCHAR chCharCode = (TCHAR) wParam; -o- character code -o- lKeyData = lParam; -o- key data -o- The WM_DEADCHAR message is posted to the window with the keyboard focus when a WM_KEYUP message is translated by the TranslateMessage function. WM_DEADCHAR specifies a character code generated by a dead key. A dead key is a key that generates a character, such as the umlaut (double-dot), that is combined with another character to form a composite character. For example, the umlaut-O character (Ö) is generated by typing the dead key for the umlaut character, and then typing the O key. ------------------------------------------------------------------------------*) | SYS_DELETEITEM of { w : MLHWND, controlid : int, CtlType : int, CtlID : int, itemID : int, item : MLHWND, itemData : int } (* Indicates owner-draw item or control was altered *) (*------------------------------------------------------------------------------ WM_DELETEITEM idCtl = wParam; -o- control identifier -o- lpdis = (LP DELETEITEMSTRUCT) lParam; -o- structure with item info. -o- The WM_DELETEITEM message is sent to the owner of an owner-drawn list box or combo box when the list box or combo box is destroyed or when items are removed by the LB_DELETESTRING, LB_RESETCONTENT, CB_DELETESTRING, or CB_RESETCONTENT message. ------------------------------------------------------------------------------*) | SYS_DESTROY of { w : MLHWND } (* Indicates Window is about to be destroyed *) (*------------------------------------------------------------------------------ WM_DESTROY The WM_DESTROY message is sent when a window is being destroyed. It is sent to the window procedure of the window being destroyed after the window is removed from the screen. This message is sent first to the window being destroyed and then to the child windows (if any) as they are destroyed. During the processing of the message, it can be assumed that all child windows still exist. ------------------------------------------------------------------------------*) | SYS_DESTROYCLIPBOARD of { w : MLHWND } (* Notifies owner that the clipboard was emptied *) (*------------------------------------------------------------------------------ WM_DESTROYCLIPBOARD The WM_DESTROYCLIPBOARD message is sent to the clipboard owner when the clipboard is emptied by a call to the EmptyClipboard function. ------------------------------------------------------------------------------*) | SYS_DEVMODECHANGE of { w : MLHWND, devicename : string } (* Indicates the device-mode settings have changed *) (*------------------------------------------------------------------------------ WM_DEVMODECHANGE lpszDev = (LPCTSTR) lParam; -o- address of device name -o- The WM_DEVMODECHANGE message is sent to all top-level windows whenever the user changes device-mode settings. ------------------------------------------------------------------------------*) | SYS_DRAWCLIPBOARD of { w : MLHWND } (* Indicates the clipboard's contents have changed *) (*------------------------------------------------------------------------------ WM_DRAWCLIPBOARD The WM_DRAWCLIPBOARD message is sent to the first window in the clipboard viewer chain when the contents of the clipboard change. This enables a clipboard viewer window to display the new contents of the clipboard. ------------------------------------------------------------------------------*) | SYS_DRAWITEM of { w : MLHWND, controlid : int, CtlType : int, CtlID : int, itemID : int, itemAction : int, itemState : int, hItem : MLHWND , hDC : MLHDC, rcItem : Rectangle, itemData : int } (* Indicates owner-draw control/menu needs redrawing *) (*------------------------------------------------------------------------------ WM_DRAWITEM idCtl = (int) wParam; -o- control identifier -o- lpdis = (LP DRAWITEMSTRUCT) lParam; -o- item-drawing information -o- The WM_DRAWITEM message is sent to the owner window of an owner-drawn button, combo box, list box, or menu when a visual aspect of the button, combo box, list box, or menu has changed. ------------------------------------------------------------------------------*) | SYS_DROPFILES of { w : MLHWND, hDrop : MLHANDLE } (* Indicates that a file has been dropped *) (*------------------------------------------------------------------------------ WM_DROPFILES hDrop = (HANDLE) wParam; -o- handle of internal drop structure -o- The WM_DROPFILES message is sent when the user releases the left mouse button while the cursor is in the window of an application that has registered itself as a recipient of dropped files. ------------------------------------------------------------------------------*) | SYS_ENABLE of { w : MLHWND, enabled : bool } (* Indicates a Window's enable state is changing *) (*------------------------------------------------------------------------------ WM_ENABLE fEnabled = (BOOL) wParam; -o- enabled/disabled flag -o- The WM_ENABLE message is sent when an application changes the enabled state of a window. It is sent to the window whose enabled state is changing. This message is sent before the EnableWindow function returns, but after the enabled state (WS_DISABLE style bit) of the window has changed. ------------------------------------------------------------------------------*) | SYS_ENDSESSION of { w : MLHWND, endsession : bool } (* Indicates whether the Windows session is ending *) (*------------------------------------------------------------------------------ WM_ENDSESSION fEndSession = (BOOL) wParam; -o- end-session flag -o- The WM_ENDSESSION message is sent to an application after Windows processes the results of the WM_QUERYENDSESSION message. The WM_ENDSESSION message informs the application whether the Windows session is ending. ------------------------------------------------------------------------------*) | SYS_ENTERIDLE of { w : MLHWND, flag : int, Window : MLHWND } (* Indicates a modal dialog box or menu is idle *) (*------------------------------------------------------------------------------ WM_ENTERIDLE fuSource = wParam; -o- idle-source flag -o- MLHWND = (MLHWND) lParam; -o- handle of dialog box or owner window -o- The WM_ENTERIDLE message informs an application's main window procedure that a modal dialog box or menu is entering an idle state. A modal dialog box or menu enters an idle state when no messages are waiting in its queue after it has processed one or more previous messages. ------------------------------------------------------------------------------*) | SYS_ENTERMENULOOP of { w : MLHWND, istrack: bool } (* Indicates entry into menu modal loop *) (*------------------------------------------------------------------------------ WM_ENTERMENULOOP wParam = (BOOL) fIsTrackPopupMenu -o- flags a popup menu -o- lParam = 0 ; -o- not used; must be zero -o- The WM_ENTERMENULOOP message informs an application's main window procedure that a menu modal loop has been entered. ------------------------------------------------------------------------------*) | SYS_EXITMENULOOP of { w : MLHWND, istrack: bool } (* Indicates exit from menu modal loop *) (*------------------------------------------------------------------------------ WM_EXITLOOP wParam = (BOOL) fIsTrackPopupMenu -o- flags a popup menu -o- lParam = 0 ; -o- not used; must be zero -o- The WM_ENTERMENULOOP message informs an application's main window procedure that a menu modal loop has been exited. ------------------------------------------------------------------------------*) | SYS_ERASEBKGND of { w : MLHWND, devicecontext : MLHDC } (* Indicates a Window's background need erasing *) (*------------------------------------------------------------------------------ WM_ERASEBKGND MLHDC = (MLHDC) wParam; -o- device-context handle -o- An application sends the WM_ERASEBKGND message when the window background must be erased (for example, when a window is resized). The message is sent to prepare an invalidated portion of a window for painting. ------------------------------------------------------------------------------*) | SYS_FONTCHANGE of { w : MLHWND } (* Indicates a change in the font-resource pool *) (*------------------------------------------------------------------------------ WM_FONTCHANGE wParam = 0; -o- not used, must be zero -o- lParam = 0; -o- not used, must be zero -o- An application sends the WM_FONTCHANGE message to all top-level windows in the system after changing the pool of font resources. ------------------------------------------------------------------------------*) | SYS_GETDLGCODE of { w : MLHWND } (* Allows dialog procedure to process control input *) (*------------------------------------------------------------------------------ WM_GETDLGCODE The WM_GETDLGCODE message is sent to the dialog box procedure associated with a control. Normally, Windows handles all arrow-key and TAB-key input to the control. By responding to the WM_GETDLGCODE message, an application can take control of a particular type of input and process the input itself. ------------------------------------------------------------------------------*) | SYS_GETFONT of { w : MLHWND } (* Retrieves the font that a control is using *) (*------------------------------------------------------------------------------ WM_GETFONT wParam = 0; -o- not used, must be zero -o- lParam = 0; -o- not used, must be zero -o- An application sends a WM_GETFONT message to a control to retrieve the font with which the control is currently drawing its text. ------------------------------------------------------------------------------*) | SYS_GETHOTKEY of { w : MLHWND } (* Gets the virtual-key code of a Window's hot key *) (*------------------------------------------------------------------------------ WM_GETHOTKEY wParam = 0; -o- not used, must be zero -o- lParam = 0; -o- not used, must be zero -o- An application sends a WM_GETHOTKEY message to determine the hot key associated with a window. ------------------------------------------------------------------------------*) | SYS_GETMINMAXINFO of { w : MLHWND, MaxSizex : int, MaxSizey : int, MaxPositionx : int, MaxPositiony : int, MinTrackSizex : int, MinTrackSizey : int, MaxTrackSizex : int, MaxTrackSizey : int } (* Gets minimum and maximum sizing information *) (*------------------------------------------------------------------------------ WM_GETMINMAXINFO lpmmi = (LP MINMAXINFO) lParam; -o- address of structure -o- The WM_GETMINMAXINFO message is sent to a window when the size or position of the window is about to change. An application can use this message to override the window's default maximized size and position, or its default minimum or maximum tracking size. ------------------------------------------------------------------------------*) | SYS_GETTEXT of { w : MLHWND, text : string } (* Gets the text that corresponds to a Window *) (*------------------------------------------------------------------------------ WM_GETTEXT wParam = (WPARAM) cchTextMax; -o- number of characters to copy -o- lParam = (LPARAM) lpszText; -o- address of buffer for text -o- An application sends a WM_GETTEXT message to copy the text that corresponds to a window into a buffer provided by the caller. ------------------------------------------------------------------------------*) | SYS_GETTEXTLENGTH of { w : MLHWND } (* Gets length of text associated with a Window *) (*------------------------------------------------------------------------------ WM_GETTEXTLENGTH wParam = 0; -o- not used, must be zero -o- lParam = 0; -o- not used, must be zero -o- An application sends a WM_GETTEXTLENGTH message to determine the length, in characters, of the text associated with a window. The length does not include the terminating null character. ------------------------------------------------------------------------------*) | SYS_HOTKEY of { w : MLHWND, id : int } (* Hot key has been detected *) (*------------------------------------------------------------------------------ WM_HOTKEY idHotKey = (int) wParam; -o- identifier of hot-key -o- The WM_HOTKEY message is posted when the user presses a hot key registered by RegisterHotKey. The message is placed at the top of the message queue associated with the thread that registered the hot key. ------------------------------------------------------------------------------*) | SYS_HSCROLL of { w : MLHWND, value : int, position : int, scrollbar : MLHWND } (* Indicates a click in a horizontal scroll bar *) (*------------------------------------------------------------------------------ WM_HSCROLL nScrollCode = (int) LOWORD(wParam); -o- scroll bar value -o- nPos = (short int) HIWORD(wParam); -o- scroll box position -o- MLHWNDScrollBar = (MLHWND) lParam; -o- handle of scroll bar -o- The WM_HSCROLL message is sent to a window when a scroll event occurs in the window's standard horizontal scroll bar. This message is also sent to the owner of a horizontal scroll bar control when a scroll event occurs in the control. ------------------------------------------------------------------------------*) | SYS_HSCROLLCLIPBOARD of { w : MLHWND, viewer : MLHWND, code : int, position : int } (* Prompts owner to scroll clipboard contents *) (*------------------------------------------------------------------------------ WM_HSCROLLCLIPBOARD MLHWNDViewer = (MLHWND) wParam; -o- handle of clipboard viewer -o- nScrollCode = (int) LOWORD(lParam); -o- scroll bar code -o- nPos = (int) HIWORD(lParam); -o- scroll box position -o- The WM_HSCROLLCLIPBOARD message is sent to the clipboard owner by a clipboard viewer window when the clipboard contains data in the CF_OWNERDISPLAY format and an event occurs in the clipboard viewer's horizontal scroll bar. The owner should scroll the clipboard image and update the scroll bar values. ------------------------------------------------------------------------------*) | SYS_ICONERASEBKGND of { w : MLHWND, devicecontext : MLHDC } (* Notifies minimized Window to fill icon background *) (*------------------------------------------------------------------------------ WM_ICONERASEBKGND MLHDC = (MLHDC) wParam; -o- handle of device context -o- The WM_ICONERASEBKGND message is sent to a minimized window when the background of the icon must be filled before painting the icon. A window receives this message only if a class icon is defined for the window; otherwise, WM_ERASEBKGND is sent. ------------------------------------------------------------------------------*) | SYS_INITDIALOG of { w : MLHWND, dialog : MLHWND, initdata : int } (* Initializes a dialog box *) (*------------------------------------------------------------------------------ WM_INITDIALOG MLHWNDFocus = (MLHWND) wParam; -o- handle of control to receive focus -o- lInitParam = lParam; -o- initialization parameter -o- The WM_INITDIALOG message is sent to the dialog box procedure immediately before a dialog box is displayed. Dialog box procedures typically use this message to initialize controls and carry out any other initialization tasks that affect the appearance of the dialog box. ------------------------------------------------------------------------------*) | SYS_INITMENU of { w : MLHWND, menu : MLHMENU } (* Indicates a menu is about to become active *) (*------------------------------------------------------------------------------ WM_INITMENU hmenuInit = (HMENU) wParam; -o- handle of menu to initialize -o- The WM_INITMENU message is sent when a menu is about to become active. It occurs when the user clicks an item on the menu bar or presses a menu key. This allows the application to modify the menu before it is displayed. ------------------------------------------------------------------------------*) | SYS_INITMENUPOPUP of { w : MLHWND, menupopup : MLHMENU, itemposition : int, issystemmenu : bool } (* Indicates a pop-up menu is being created *) (*------------------------------------------------------------------------------ WM_INITMENUPOPUP hmenuPopup = (HMENU) wParam; -o- handle of pop-up menu -o- uPos = (int) LOWORD(lParam); -o- pop-up item position -o- fSystemMenu = (BOOL) HIWORD(lParam); -o- System menu flag -o- The WM_INITMENUPOPUP message is sent when a pop-up menu is about to become active. This allows an application to modify the pop-up menu before it is displayed, without changing the entire menu. ------------------------------------------------------------------------------*) | SYS_KEYDOWN of { w : MLHWND, virtualkey : int, data : int } (* Indicates a nonsystem key was pressed *) (*------------------------------------------------------------------------------ WM_KEYDOWN nVirtKey = (int) wParam; -o- virtual-key code -o- lKeyData = lParam; -o- key data -o- The WM_KEYDOWN message is posted to the window with the keyboard focus when a nonsystem key is pressed. A nonsystem key is a key that is pressed when the ALT key is not pressed. ------------------------------------------------------------------------------*) | SYS_KEYUP of { w : MLHWND, virtualkey : int, data : int } (* Indicates a nonsystem key was released *) (*------------------------------------------------------------------------------ WM_KEYUP nVirtKey = (int) wParam; -o- virtual-key code -o- lKeyData = lParam; -o- key data -o- The WM_KEYUP message is posted to the window with the keyboard focus when a nonsystem key is released. A nonsystem key is a key that is pressed when the ALT key is not pressed, or a keyboard key that is pressed when a window has the keyboard focus. ------------------------------------------------------------------------------*) | SYS_KILLFOCUS of { w : MLHWND, receivefocus : MLHWND } (* Indicates the Window is losing keyboard focus *) (*------------------------------------------------------------------------------ WM_KILLFOCUS MLHWNDGetFocus = (MLHWND) wParam; -o- handle of window receiving focus -o- The WM_KILLFOCUS message is sent to a window immediately before it loses the keyboard focus. ------------------------------------------------------------------------------*) | SYS_LBUTTONDBLCLK of { w : MLHWND, keyflags : int, xpos : int, ypos : int } (* Indicates double-click of left button *) (*------------------------------------------------------------------------------ WM_LBUTTONDBLCLK fwKeys = wParam; -o- key flags -o- xPos = LOWORD(lParam); -o- horizontal position of cursor -o- yPos = HIWORD(lParam); -o- vertical position of cursor -o- The WM_LBUTTONDBLCLK message is posted when the user double-clicks the left mouse button while the cursor is in the client area of a window. If the mouse is not captured, the message is posted to the window beneath the cursor. Otherwise, the message is posted to the window that has captured the mouse. ------------------------------------------------------------------------------*) | SYS_LBUTTONDOWN of {w : MLHWND, keyflags : int, xpos : int, ypos : int } (* Indicates when left mouse button is pressed *) (*------------------------------------------------------------------------------ WM_LBUTTONDOWN fwKeys = wParam; -o- key flags -o- xPos = LOWORD(lParam); -o- horizontal position of cursor -o- yPos = HIWORD(lParam); -o- vertical position of cursor -o- The WM_LBUTTONDOWN message is posted when the user presses the left mouse button while the cursor is in the client area of a window. If the mouse is not captured, the message is posted to the window beneath the cursor. Otherwise, the message is posted to the window that has captured the mouse. ------------------------------------------------------------------------------*) | SYS_LBUTTONUP of { w : MLHWND, keyflags : int, xpos : int, ypos : int } (* Indicates when left mouse button is released *) (*------------------------------------------------------------------------------ WM_LBUTTONUP fwKeys = wParam; -o- key flags -o- xPos = LOWORD(lParam); -o- horizontal position of cursor -o- yPos = HIWORD(lParam); -o- vertical position of cursor -o- The WM_LBUTTONUP message is posted when the user releases the left mouse button while the cursor is in the client area of a window. If the mouse is not captured, the message is posted to the window beneath the cursor. Otherwise, the message is posted to the window that has captured the mouse. ------------------------------------------------------------------------------*) | SYS_MBUTTONDBLCLK of { w : MLHWND, keyflags : int, xpos : int, ypos : int } (* Indicates double-click of middle mouse button *) (*------------------------------------------------------------------------------ WM_MBUTTONDBLCLK fwKeys = wParam; -o- key flags -o- xPos = LOWORD(lParam); -o- horizontal position of cursor -o- yPos = HIWORD(lParam); -o- vertical position of cursor -o- The WM_MBUTTONDBLCLK message is posted when the user double-clicks the middle mouse button while the cursor is in the client area of a window. If the mouse is not captured, the message is posted to the window beneath the cursor. Otherwise, the message is posted to the window that has captured the mouse. ------------------------------------------------------------------------------*) | SYS_MBUTTONDOWN of { w : MLHWND, keyflags : int, xpos : int, ypos : int } (* Indicates when middle mouse button is pressed *) (*------------------------------------------------------------------------------ WM_MBUTTONDOWN fwKeys = wParam; -o- key flags -o- xPos = LOWORD(lParam); -o- horizontal position of cursor -o- yPos = HIWORD(lParam); -o- vertical position of cursor -o- The WM_MBUTTONDOWN message is posted when the user presses the middle mouse button while the cursor is in the client area of a window. If the mouse is not captured, the message is posted to the window beneath the cursor. Otherwise, the message is posted to the window that has captured the mouse. ------------------------------------------------------------------------------*) | SYS_MBUTTONUP of { w : MLHWND, keyflags : int, xpos : int, ypos : int } (* Indicates when middle mouse button is released *) (*------------------------------------------------------------------------------ WM_MBUTTONUP fwKeys = wParam; -o- key flags -o- xPos = LOWORD(lParam); -o- horizontal position of cursor -o- yPos = HIWORD(lParam); -o- vertical position of cursor -o- The WM_MBUTTONUP message is posted when the user releases the middle mouse button while the cursor is in the client area of a window. If the mouse is not captured, the message is posted to the window beneath the cursor. Otherwise, the message is posted to the window that has captured the mouse. ------------------------------------------------------------------------------*) | SYS_MDICASCADE of { w : MLHWND, flag : int } (* Arranges MDI child Windows in cascade format *) (*------------------------------------------------------------------------------ WM_MDICASCADE wParam = (WPARAM) (int) fuCascade; -o- cascade flag -o- lParam = 0; -o- not used, must be zero -o- An application sends the WM_MDICASCADE message to a multiple document interface (MDI) client window to arrange all its child windows in a cascade format. ------------------------------------------------------------------------------*) | SYS_MDICREATE of { w : MLHWND, szClass : string, szTitle : string, x : int, y : int, cx : int, cy : int, style : int, cdata : int } (* Prompts MDI client to create a child Window *) (*------------------------------------------------------------------------------ WM_MDICREATE wParam = 0; -o- not used, must be zero -o- lParam = (LPARAM) (LP MDICREATESTRUCT) lpmdic; -o- creation data -o- An application sends the WM_MDICREATE message to a multiple document interface (MDI) client window to create an MDI child window. ------------------------------------------------------------------------------*) | SYS_MDIDESTROY of { w : MLHWND, childtoclose : MLHWND } (* Closes an MDI child Window *) (*------------------------------------------------------------------------------ WM_MDIDESTROY wParam = (WPARAM) (MLHWND) MLHWNDChild; -o- handle of child to close -o- lParam = 0; -o- not used, must be zero -o- An application sends the WM_MDIDESTROY message to a multiple document interface (MDI) client window to close an MDI child window. ------------------------------------------------------------------------------*) | SYS_MDIGETACTIVE of { w : MLHWND, stateflag : bool } (* Retrieves data about the active MDI child Window *) (*------------------------------------------------------------------------------ WM_MDIGETACTIVE wParam = 0; -o- not used, must be zero -o- lParam = (LPBOOL) lpfMaximized; -o- optional pointer to maximized state flag -o- An application sends the WM_MDIGETACTIVE message to a multiple document interface (MDI) client window to retrieve the handle of the active MDI child window. ------------------------------------------------------------------------------*) | SYS_MDIICONARRANGE of { w : MLHWND } (* Arranges minimized MDI child Windows *) (*------------------------------------------------------------------------------ WM_MDIICONARRANGE wParam = 0; -o- not used, must be zero -o- lParam = 0; -o- not used, must be zero -o- An application sends the WM_MDIICONARRANGE message to a multiple document interface (MDI) client window to arrange all minimized MDI child windows. It does not affect child windows that are not minimized. ------------------------------------------------------------------------------*) | SYS_MDIMAXIMIZE of { w : MLHWND, childtomaximise : MLHWND } (* Maximizes an MDI child Window *) (*------------------------------------------------------------------------------ M_MDIMAXIMIZE wParam = (WPARAM) (MLHWND) MLHWNDMax; -o- handle of child to maximize -o- lParam = 0; -o- not used, must be zero -o- An application sends the WM_MDIMAXIMIZE message to a multiple document interface (MDI) client window to maximize an MDI child window. Windows resizes the child window to make its client area fill the client window. Windows places the child window's System menu icon in the rightmost position of the frame window's menu bar, and places the child window's restore icon in the leftmost position. Windows also appends the title bar text of the child window to that of the frame window. ------------------------------------------------------------------------------*) | SYS_MDINEXT of { w : MLHWND, child : MLHWND, flagnext : bool } (* Activates the next MDI child Window *) (*------------------------------------------------------------------------------ WM_MDINEXT wParam = (WPARAM) (MLHWND) MLHWNDChild; -o- handle of child -o- lParam = (LPARAM) fNext; -o- next or previous child -o- An application sends the WM_MDINEXT message to a multiple document interface (MDI) client window to activate the next or previous child window. ------------------------------------------------------------------------------*) | SYS_MDIREFRESHMENU of { w : MLHWND } (* Refreshes an MDI frame Window's menu *) (*------------------------------------------------------------------------------ WM_MDIREFRESHMENU wParam = 0; -o- not used, must be zero -o- lParam = 0; -o- not used, must be zero -o- An application sends the WM_MDIREFRESHMENU message to a multiple document interface (MDI) client window to refresh the Window menu of the MDI frame window. ------------------------------------------------------------------------------*) | SYS_MDIRESTORE of { w : MLHWND, childtorestore : MLHWND } (* Prompts MDI client to restore a child Window *) (*------------------------------------------------------------------------------ WM_MDIRESTORE wParam = (WPARAM) (MLHWND) MLHWNDRes; -o- handle of child to restore -o- lParam = 0; -o- not used, must be zero -o- An application sends the WM_MDIRESTORE message to a multiple document interface (MDI) client window to restore an MDI child window from maximized or minimized size. ------------------------------------------------------------------------------*) | SYS_MDISETMENU of { w : MLHWND, framemenu : MLHMENU, Windowmenu : MLHMENU } (* Replaces an MDI frame Window's menu *) (*------------------------------------------------------------------------------ WM_MDISETMENU wParam = (WPARAM) (HMENU) hmenuFrame; -o- handle of frame menu -o- lParam = (LPARAM) (HMENU) hmenuWindow; -o- handle of Window menu -o- An application sends the WM_MDISETMENU message to a multiple document interface (MDI) client window to replace the entire menu of an MDI frame window, to replace the Window menu of the frame window, or both. ------------------------------------------------------------------------------*) | SYS_MDITILE of { w : MLHWND, tilingflag : int } (* Arranges MDI child Windows in tiled format *) (*------------------------------------------------------------------------------ WM_MDITILE wParam = (WPARAM) (int) fuTile; -o- tiling flag -o- lParam = 0; -o- not used, must be zero -o- An application sends the WM_MDITILE message to a multiple document interface (MDI) client window to arrange all of its MDI child windows in a tile format. ------------------------------------------------------------------------------*) | SYS_MEASUREITEM of { w : MLHWND, controlid : int, CtlType : int, CtlID : int, itemID : int, itemWidth : int, itemHeight : int, itemData : int } (* Requests dimensions of owner-draw control or item *) (*------------------------------------------------------------------------------ WM_MEASUREITEM idCtl = (int) wParam; -o- control identifier -o- lpmis = (LP MEASUREITEMSTRUCT) lParam; -o- item-size information -o- The WM_MEASUREITEM message is sent to the owner window of an owner-drawn button, combo box, list box, or menu item when the control or menu is created. ------------------------------------------------------------------------------*) | SYS_MENUCHAR of { w : MLHWND, ch : string, menuflag : int, menu : MLHMENU } (* Indicates an unknown menu mnemonic was pressed *) (*------------------------------------------------------------------------------ WM_MENUCHAR chUser = (char) LOWORD(wParam); -o- ASCII character -o- fuFlag = (int) HIWORD(wParam); -o- menu flag -o- hmenu = (HMENU) lParam; -o- handle of menu -o- The WM_MENUCHAR message is sent when a menu is active and the user presses a key that does not correspond to any mnemonic or accelerator key. This message is sent to the window that owns the menu. ------------------------------------------------------------------------------*) | SYS_MENUSELECT of { w : MLHWND, menuitem : int, menuflags : int, menu : MLHMENU } (* Indicates that the user selected a menu item *) (*------------------------------------------------------------------------------ WM_MENUSELECT uItem = (int) LOWORD(wParam); -o- menu item or pop-up menu index -o- fuFlags = (int) HIWORD(wParam); -o- menu flags -o- hmenu = (HMENU) lParam; -o- handle of menu clicked on -o- The WM_MENUSELECT message is sent to a menu's owner window when the user selects a menu item. ------------------------------------------------------------------------------*) | SYS_MOUSEACTIVATE of { w : MLHWND, parent : MLHWND, hit_test : int, message : int } (* Indicates a mouse click in an inactive Window *) (*------------------------------------------------------------------------------ WM_MOUSEACTIVATE MLHWNDTopLevel = (MLHWND) wParam; -o- handle of top-level parent -o- nHittest = (INT) LOWORD(lParam); -o- hit-test code -o- uMsg = (int) HIWORD(lParam); -o- mouse message -o- The WM_MOUSEACTIVATE message is sent when the cursor is in an inactive window and the user presses a mouse button. The parent window receives this message only if the child window passes it to the DefWindowProc function. ------------------------------------------------------------------------------*) | SYS_MOUSEMOVE of { w : MLHWND, keyflags : int, xpos : int, ypos : int } (* Indicates mouse-cursor movement *) (*------------------------------------------------------------------------------ WM_MOUSEMOVE fwKeys = wParam; -o- key flags -o- xPos = LOWORD(lParam); -o- horizontal position of cursor -o- yPos = HIWORD(lParam); -o- vertical position of cursor -o- The WM_MOUSEMOVE message is posted to a window when the cursor moves. If the mouse is not captured, the message is posted to the window that contains the cursor. Otherwise, the message is posted to the window that has captured the mouse. ------------------------------------------------------------------------------*) | SYS_MOVE of { w : MLHWND, xpos : int, ypos : int } (* Indicates a Window's position has changed *) (*------------------------------------------------------------------------------ WM_MOVE xPos = (int) LOWORD(lParam); -o- horizontal position -o- yPos = (int) HIWORD(lParam); -o- vertical position -o- The WM_MOVE message is sent after a window has been moved. ------------------------------------------------------------------------------*) | SYS_NCACTIVATE of { w : MLHWND, active : bool } (* Changes the active state of nonclient area *) (*------------------------------------------------------------------------------ WM_NCACTIVATE fActive = (BOOL) wParam; The WM_NCACTIVATE message is sent to a window when its nonclient area needs to be changed to indicate an active or inactive state. ------------------------------------------------------------------------------*) | SYS_NCCALCSIZE of { w : MLHWND, validarea : bool, newrect : Rectangle, oldrect : Rectangle, oldclientarea : Rectangle, InsertAfter : MLHWND, x : int, y : int, cx : int, cy : int, flags : int } (* Calculates the size of a Window's client area *) (*------------------------------------------------------------------------------ WM_NCCALCSIZE fCalcValidRects = (BOOL) wParam; -o- valid area flag -o- lpncsp = (LP NCCALCSIZE_PARAMS) lParam; -o- address of data -o- The WM_NCCALCSIZE message is sent when the size and position of a window's client area must be calculated. By processing this message, an application can control the contents of the window's client area when the size or position of the window changes. ------------------------------------------------------------------------------*) | SYS_NCCREATE of { w : MLHWND, menu : MLHMENU, parent : MLHWND, cy : int, cx : int, y : int, x : int, style : int, name : string, classname : string, exstyle : int } (* Indicates a Window's nonclient area being created *) (*------------------------------------------------------------------------------ WM_NCCREATE lpcs = (LP CREATESTRUCT) lParam; -o- initialization data -o- The WM_NCCREATE message is sent prior to the WM_CREATE message when a window is first created. ------------------------------------------------------------------------------*) | SYS_NCDESTROY of { w : MLHWND } (* Indicates Window's nonclient area being destroyed *) (*------------------------------------------------------------------------------ WM_NCDESTROY The WM_NCDESTROY message informs a window that its nonclient area is being destroyed. The DestroyWindow function sends the WM_NCDESTROY message to the window following the WM_DESTROY message. WM_DESTROY is used to free the allocated memory object associated with the window. ------------------------------------------------------------------------------*) | SYS_NCHITTEST of { w : MLHWND, xpos : int, ypos : int } (* Indicates mouse-cursor movement *) (*------------------------------------------------------------------------------ WM_NCHITTEST xPos = LOWORD(lParam); -o- horizontal position of cursor -o- yPos = HIWORD(lParam); -o- vertical position of cursor -o- The WM_NCHITTEST message is sent to a window when the cursor moves, or when a mouse button is pressed or released. If the mouse is not captured, the message is sent to the window beneath the cursor. Otherwise, the message is posted to the window that has captured the mouse. ------------------------------------------------------------------------------*) | SYS_NCLBUTTONDBLCLK of { w : MLHWND, hit_test : int, xpos : int, ypos : int } (* Indicates nonclient left button double-click *) (*------------------------------------------------------------------------------ WM_NCLBUTTONDBLCLK nHittest = (INT) wParam; -o- hit-test code -o- pts = MAKEPOINTS(lParam); -o- position of cursor -o- The WM_NCLBUTTONDBLCLK message is posted when the user double-clicks the left mouse button while the cursor is within the nonclient area of a window. This message is posted to the window that contains the cursor. If a window has captured the mouse, this message is not posted. ------------------------------------------------------------------------------*) | SYS_NCLBUTTONDOWN of { w : MLHWND, hit_test : int, xpos : int, ypos : int } (* Indicates left button pressed in nonclient area *) (*------------------------------------------------------------------------------ WM_NCLBUTTONDOWN nHittest = (INT) wParam; -o- hit-test code -o- pts = MAKEPOINTS(lParam); -o- position of cursor -o- The WM_NCLBUTTONDOWN message is posted when the user presses the left mouse button while the cursor is within the nonclient area of a window. This message is posted to the window that contains the cursor. If a window has captured the mouse, this message is not posted. ------------------------------------------------------------------------------*) | SYS_NCLBUTTONUP of { w : MLHWND, hit_test : int, xpos : int, ypos : int } (* Indicates left button released in nonclient area *) (*------------------------------------------------------------------------------ WM_NCLBUTTONUP nHittest = (INT) wParam; -o- hit-test code -o- pts = MAKEPOINTS(lParam); -o- mouse-cursor coordinates -o- The WM_NCLBUTTONUP message is posted when the user releases the left mouse button while the cursor is within the nonclient area of a window. This message is posted to the window that contains the cursor. If a window has captured the mouse, this message is not posted. ------------------------------------------------------------------------------*) | SYS_NCMBUTTONDBLCLK of { w : MLHWND, hit_test : int, xpos : int, ypos : int } (* Indicates nonclient middle button double-click *) (*------------------------------------------------------------------------------ WM_NCMBUTTONDBLCLK nHittest = (INT) wParam; -o- hit-test code -o- pts = MAKEPOINTS(lParam); -o- position of cursor -o- The WM_NCMBUTTONDBLCLK message is posted when the user double-clicks the middle mouse button while the cursor is within the nonclient area of a window. This message is posted to the window that contains the cursor. If a window has captured the mouse, this message is not posted. ------------------------------------------------------------------------------*) | SYS_NCMBUTTONDOWN of { w : MLHWND, hit_test : int, xpos : int, ypos : int } (* Indicates middle button pressed in nonclient area *) (*------------------------------------------------------------------------------ WM_NCMBUTTONDOWN nHittest = (INT) wParam; -o- hit-test code -o- pts = MAKEPOINTS(lParam); -o- position of cursor -o- The WM_NCMBUTTONDOWN message is posted when the user presses the middle mouse button while the cursor is within the nonclient area of a window. This message is posted to the window that contains the cursor. If a window has captured the mouse, this message is not posted. ------------------------------------------------------------------------------*) | SYS_NCMBUTTONUP of { w : MLHWND, hit_test : int, xpos : int, ypos : int } (* Indicates middle button released in nonclient area *) (*------------------------------------------------------------------------------ WM_NCMBUTTONUP nHittest = (INT) wParam; -o- hit-test code -o- pts = MAKEPOINTS(lParam); -o- position of cursor -o- The WM_NCMBUTTONUP message is posted when the user releases the middle mouse button while the cursor is within the nonclient area of a window. This message is posted to the window that contains the cursor. If a window has captured the mouse, this message is not posted. ------------------------------------------------------------------------------*) | SYS_NCMOUSEMOVE of { w : MLHWND, hit_test : int, xpos : int, ypos : int } (* Indicates mouse-cursor movement in nonclient area *) (*------------------------------------------------------------------------------ WM_NCMOUSEMOVE nHittest = (INT) wParam; -o- hit-test code -o- pts = MAKEPOINTS(lParam); -o- position of cursor -o- The WM_NCMOUSEMOVE message is posted to a window when the cursor is moved within the nonclient area of the window. This message is posted to the window that contains the cursor. If a window has captured the mouse, this message is not posted. ------------------------------------------------------------------------------*) | SYS_NCPAINT of { w : MLHWND, region : MLHRGN } (* Indicates a Window's frame needs painting *) (*------------------------------------------------------------------------------ WM_NCPAINT hrgn = (HRGN) wParam; -o- update-region handle -o- An application sends the WM_NCPAINT message to a window when its frame must be painted. ------------------------------------------------------------------------------*) | SYS_NCRBUTTONDBLCLK of { w : MLHWND, hit_test : int, xpos : int, ypos : int } (* Indicates nonclient right button double-click *) (*------------------------------------------------------------------------------ WM_NCRBUTTONDBLCLK nHittest = (INT) wParam; -o- hit-test code -o- pts = MAKEPOINTS(lParam); -o- position of cursor -o- The WM_NCRBUTTONDBLCLK message is posted when the user double-clicks the right mouse button while the cursor is within the nonclient area of a window. This message is posted to the window that contains the cursor. If a window has captured the mouse, this message is not posted. ------------------------------------------------------------------------------*) | SYS_NCRBUTTONDOWN of { w : MLHWND, hit_test : int, xpos : int, ypos : int } (* Indicates right button pressed in nonclient area *) (*------------------------------------------------------------------------------ WM_NCRBUTTONDOWN nHittest = (INT) wParam; -o- hit-test code -o- pts = MAKEPOINTS(lParam); -o- position of cursor -o- The WM_NCRBUTTONDOWN message is posted when the user presses the right mouse button while the cursor is within the nonclient area of a window. This message is posted to the window that contains the cursor. If a window has captured the mouse, this message is not posted. ------------------------------------------------------------------------------*) | SYS_NCRBUTTONUP of { w : MLHWND, hit_test : int, xpos : int, ypos : int } (* Indicates right button released in nonclient area *) (*------------------------------------------------------------------------------ WM_NCRBUTTONUP nHittest = (INT) wParam; -o- hit-test code -o- pts = MAKEPOINTS(lParam); -o- position of cursor -o- The WM_NCRBUTTONUP message is posted when the user releases the right mouse button while the cursor is within the nonclient area of a window. This message is posted to the window that contains the cursor. If a window has captured the mouse, this message is not posted. ------------------------------------------------------------------------------*) | SYS_NEXTDLGCTL of { w : MLHWND, control : int, handleflag : bool } (* Sets focus to different dialog box control *) (*------------------------------------------------------------------------------ WM_NEXTDLGCTL wCtlFocus = wParam; -o- identifies control for focus -o- fHandle = (BOOL) LOWORD(lParam); -o- wParam handle flag -o- The WM_NEXTDLGCTL message is sent to a dialog box procedure to set the keyboard focus to a different control in the dialog box. ------------------------------------------------------------------------------*) | SYS_PAINT of { w : MLHWND } (* Indicates a Window's client area need painting *) (*------------------------------------------------------------------------------ WM_PAINT An application sends the WM_PAINT message when Windows or another application makes a request to paint a portion of an application's window. The message is sent when the UpdateWindow or RedrawWindow function is called, or by the DispatchMessage function when the application obtains a WM_PAINT message by using the GetMessage or PeekMessage function. ------------------------------------------------------------------------------*) | SYS_PAINTCLIPBOARD of { w : MLHWND, clipboard : MLHWND } (* Prompts owner to display clipboard contents *) (*------------------------------------------------------------------------------ WM_PAINTCLIPBOARD MLHWNDViewer = (MLHWND) wParam; -o- handle of clipboard viewer -o- hglbPs = (HGLOBAL) lParam; -o- handle of PAINTSTRUCT object -o- The WM_PAINTCLIPBOARD message is sent to the clipboard owner by a clipboard viewer window when the clipboard contains data in the CF_OWNERDISPLAY format and the clipboard viewer's client area needs repainting. ------------------------------------------------------------------------------*) | SYS_PAINTICON of { w : MLHWND } (* Icon is about to be painted *) (*------------------------------------------------------------------------------ WM_PAINTICON The WM_PAINTICON message is sent to a minimized window when the icon is to be painted. A window receives this message only if a class icon is defined for the window. Otherwise, WM_PAINT is sent instead. ------------------------------------------------------------------------------*) | SYS_PALETTECHANGED of { w : MLHWND, changedpalette : MLHWND } (* Indicates the focus-Window realized its palette *) (*------------------------------------------------------------------------------ WM_PALETTECHANGED MLHWNDPalChg = (MLHWND) wParam; -o- handle of window that changed palette -o- The WM_PALETTECHANGED message is sent to all top-level and overlapped windows after the window with the keyboard focus has realized its logical palette, thereby changing the system palette. This message enables a window without the keyboard focus that uses a color palette to realize its logical palette and update its client area. ------------------------------------------------------------------------------*) | SYS_PALETTEISCHANGING of { w : MLHWND, changingpalette : MLHWND } (* Informs Windows that palette is changing *) (*------------------------------------------------------------------------------ WM_PALETTEISCHANGING MLHWNDRealize = (MLHWND) wParam; -o- window to realize palette -o- The WM_PALETTEISCHANGING message informs applications that an application is going to realize its logical palette. ------------------------------------------------------------------------------*) | SYS_PARENTNOTIFY of { w : MLHWND, eventflag : int, idchild : int, value : int } (* Notifies parent of child-Window activity *) (*------------------------------------------------------------------------------ WM_PARENTNOTIFY fwEvent = LOWORD(wParam); -o- event flags -o- idChild = HIWORD(wParam); -o- identifier of child window -o- lValue = lParam; -o- child handle, or cursor coordinates -o- The WM_PARENTNOTIFY message is sent to the parent of a child window when the child window is created or destroyed or when the user clicks a mouse button while the cursor is over the child window. When the child window is being created, the system sends WM_PARENTNOTIFY just before the CreateWindow or CreateWindowEx function that creates the window returns. When the child window is being destroyed, Windows sends the message before any processing to destroy the window takes place. ------------------------------------------------------------------------------*) | SYS_PASTE of { w : MLHWND } (* Inserts clipboard data into an edit control *) (*------------------------------------------------------------------------------ WM_PASTE wParam = 0; -o- not used, must be zero -o- lParam = 0; -o- not used, must be zero -o- An application sends a WM_PASTE message to an edit control or combo box to copy the current contents of the Clipboard to the edit control at the current caret position. Data is inserted only if the Clipboard contains data in CF_TEXT format. ------------------------------------------------------------------------------*) | SYS_POWER of { w : MLHWND, powerevent : int } (* Indicates the system is entering suspended mode *) (*------------------------------------------------------------------------------ WM_POWER fwPowerEvt = wParam; -o- power-event notification message -o- The WM_POWER message is sent when the system, typically a battery-powered personal computer, is about to enter the suspended mode. ------------------------------------------------------------------------------*) | SYS_QUERYDRAGICON of { w : MLHWND } (* Requests a cursor handle for a minimized Window *) (*------------------------------------------------------------------------------ WM_QUERYDRAGICON The WM_QUERYDRAGICON message is sent to a minimized (iconic) window which is about to be dragged by the user but which does not have an icon defined for its class. An application can return the handle of an icon or cursor. The system displays this cursor or icon while the user drags the icon. ------------------------------------------------------------------------------*) | SYS_QUERYENDSESSION of { w : MLHWND, source : int } (* Requests that the Windows session be ended *) (*------------------------------------------------------------------------------ WM_QUERYENDSESSION nSource = (int) wParam; -o- source of end-session request -o- The WM_QUERYENDSESSION message is sent when the user chooses to end the Windows session or when an application calls the ExitWindows function. If any application returns zero, the Windows session is not ended. Windows stops sending WM_QUERYENDSESSION messages as soon as one application returns zero. After processing this message, Windows sends the WM_ENDSESSION message with the wParam parameter set to the results of the WM_QUERYENDSESSION message. ------------------------------------------------------------------------------*) | SYS_QUERYNEWPALETTE of { w : MLHWND } (* Allows a Window to realize its logical palette *) (*------------------------------------------------------------------------------ WM_QUERYNEWPALETTE The WM_QUERYNEWPALETTE message informs a window that it is about to receive the keyboard focus, giving the window the opportunity to realize its logical palette when it receives the focus. ------------------------------------------------------------------------------*) | SYS_QUERYOPEN of { w : MLHWND } (* Requests that a minimized Window be restored *) (*------------------------------------------------------------------------------ WM_QUERYOPEN The WM_QUERYOPEN message is sent to an icon when the user requests that the window be restored to its previous size and position. ------------------------------------------------------------------------------*) | SYS_QUEUESYNC of { w : MLHWND } (* Delimits CBT messages *) (*------------------------------------------------------------------------------ WM_QUEUESYNC wParam = 0; -o- not used, must be zero -o- lParam = 0; -o- not used, must be zero -o- The WM_QUEUESYNC message is sent by a computer-based training (CBT) application to separate user-input messages from other messages sent through the WH_JOURNALPLAYBACK hook procedure. ------------------------------------------------------------------------------*) | SYS_QUIT of { w : MLHWND, exitcode : int } (* Requests that an application be terminated *) (*------------------------------------------------------------------------------ WM_QUIT nExitCode = (int) wParam; -o- exit code -o- The WM_QUIT message indicates a request to terminate an application and is generated when the application calls the PostQuitMessage function. It causes the GetMessage function to return zero. ------------------------------------------------------------------------------*) | SYS_RBUTTONDBLCLK of { w : MLHWND, keyflags : int, xpos : int, ypos : int } (* Indicates double-click of right mouse button *) (*------------------------------------------------------------------------------ WM_RBUTTONDBLCLK fwKeys = wParam; -o- key flags -o- xPos = LOWORD(lParam); -o- horizontal position of cursor -o- yPos = HIWORD(lParam); -o- vertical position of cursor -o- The WM_RBUTTONDBLCLK message is posted when the user double-clicks the right mouse button while the cursor is in the client area of a window. If the mouse is not captured, the message is posted to the window beneath the cursor. Otherwise, the message is posted to the window that has captured the mouse. ------------------------------------------------------------------------------*) | SYS_RBUTTONDOWN of { w : MLHWND, keyflags : int, xpos : int, ypos : int } (* Indicates when right mouse button is pressed *) (*------------------------------------------------------------------------------ WM_RBUTTONDOWN fwKeys = wParam; -o- key flags -o- xPos = LOWORD(lParam); -o- horizontal position of cursor -o- yPos = HIWORD(lParam); -o- vertical position of cursor -o- The WM_RBUTTONDOWN message is posted when the user presses the right mouse button while the cursor is in the client area of a window. If the mouse is not captured, the message is posted to the window beneath the cursor. Otherwise, the message is posted to the window that has captured the mouse. ------------------------------------------------------------------------------*) | SYS_RBUTTONUP of { w : MLHWND, keyflags : int, xpos : int, ypos : int } (* Indicates when right mouse button is released *) (*------------------------------------------------------------------------------ WM_RBUTTONUP fwKeys = wParam; -o- key flags -o- xPos = LOWORD(lParam); -o- horizontal position of cursor -o- yPos = HIWORD(lParam); -o- vertical position of cursor -o- The WM_RBUTTONUP message is posted when the user releases the right mouse button while the cursor is in the client area of a window. If the mouse is not captured, the message is posted to the window beneath the cursor. Otherwise, the message is posted to the window that has captured the mouse. ------------------------------------------------------------------------------*) | SYS_RENDERALLFORMATS of { w : MLHWND } (* Notifies owner to render all clipboard formats *) (*------------------------------------------------------------------------------ WM_RENDERALLFORMATS The WM_RENDERALLFORMATS message is sent to the clipboard owner before it is destroyed, if the clipboard owner has delayed rendering one or more clipboard formats. For the contents of the clipboard to remain available to other applications, the clipboard owner must render data in all the formats it is capable of generating, and place the data on the clipboard by calling the SetClipboardData function. ------------------------------------------------------------------------------*) | SYS_RENDERFORMAT of { w : MLHWND, format : int } (* Notifies owner to render clipboard data *) (*------------------------------------------------------------------------------ WM_RENDERFORMAT uFormat = (int) wParam; -o- clipboard format -o- The WM_RENDERFORMAT message is sent to the clipboard owner if it has delayed rendering a specific clipboard format, and if an application has requested data in that format. The clipboard owner must render data in the specified format and place it on the clipboard by calling the SetClipboardData function. ------------------------------------------------------------------------------*) | SYS_SETCURSOR of { w : MLHWND, cursorwindow : MLHWND, hittest : int, mousemessage : int } (* Prompts a Window to set the cursor shape *) (*------------------------------------------------------------------------------ WM_SETCURSOR MLHWND = (MLHWND) wParam; -o- handle of window with cursor -o- nHittest = LOWORD(lParam); -o- hit-test code -o- wMouseMsg = HIWORD(lParam); -o- mouse-message identifier -o- The WM_SETCURSOR message is sent to a window if the mouse causes the cursor to move within a window and mouse input is not captured. ------------------------------------------------------------------------------*) | SYS_SETFOCUS of { w : MLHWND, losing : MLHWND } (* Indicates the Window gained the keyboard focus *) (*------------------------------------------------------------------------------ WM_SETFOCUS MLHWNDLoseFocus = (MLHWND) wParam; -o- handle of window losing focus -o- The WM_SETFOCUS message is sent to a window after it has gained the keyboard focus. ------------------------------------------------------------------------------*) | SYS_SETFONT of { w : MLHWND, font : MLHFONT, redrawflag : int } (* Sets the font for a control *) (*------------------------------------------------------------------------------ WM_SETFONT wParam = (WPARAM) hfont; -o- handle of font -o- lParam = MAKELPARAM(fRedraw, 0); -o- redraw flag -o- An application sends a WM_SETFONT message to specify the font that a control is to use when drawing text. ------------------------------------------------------------------------------*) | SYS_SETHOTKEY of { w : MLHWND, virtualkey : int } (* Associates a hot key with a Window *) (*------------------------------------------------------------------------------ WM_SETHOTKEY wParam = (WPARAM) vkey; -o- virtual-key code of hot key -o- lParam = 0; -o- not used, must be zero -o- An application sends a WM_SETHOTKEY message to a window to associate a hot key with the window. When the user presses the hot key, the system activates the window. ------------------------------------------------------------------------------*) | SYS_SETREDRAW of { w : MLHWND, redrawflag : int } (* Allows or prevents redrawing in a Window *) (*------------------------------------------------------------------------------ WM_SETREDRAW wParam = (WPARAM) fRedraw; -o- state of redraw flag -o- lParam = 0; -o- not used, must be zero -o- An application sends the WM_SETREDRAW message to a window to allow changes in that window to be redrawn or to prevent changes in that window from being redrawn. ------------------------------------------------------------------------------*) | SYS_SETTEXT of { w : MLHWND, Windowtext : string } (* Sets the text of a Window *) (*------------------------------------------------------------------------------ WM_SETTEXT wParam = 0; -o- not used, must be zero -o- lParam = (LPARAM)(LPCTSTR)lpsz; -o- address of window-text string -o- An application sends a WM_SETTEXT message to set the text of a window. ------------------------------------------------------------------------------*) | SYS_SHOWWINDOW of { w : MLHWND, showflag : bool, statusflag : int } (* Indicates a Window is about to be hidden or shown *) (*------------------------------------------------------------------------------ WM_SHOWWINDOW fShow = (BOOL) wParam; -o- show/hide flag -o- fnStatus = (int) lParam; -o- status flag -o- The WM_SHOWWINDOW message is sent to a window when the window is about to be hidden or shown. ------------------------------------------------------------------------------*) | SYS_SIZE of { w : MLHWND, resizeflag : int, width : int, height : int } (* Indicates a change in a Window's size *) (*------------------------------------------------------------------------------ WM_SIZE fwSizeType = wParam; -o- resizing flag -o- nWidth = LOWORD(lParam); -o- width of client area -o- nHeight = HIWORD(lParam); -o- height of client area -o- The WM_SIZE message is sent to a window after its size has changed. ------------------------------------------------------------------------------*) | SYS_SIZECLIPBOARD of { w : MLHWND, viewer : MLHWND} (* Indicates a change in the chipboard's size *) (*------------------------------------------------------------------------------ WM_SIZECLIPBOARD MLHWNDViewer = (MLHWND) wParam; -o- handle of clipboard viewer -o- hglbRc = (HGLOBAL) lParam; -o- handle of RECT object -o- The WM_SIZECLIPBOARD message is sent to the clipboard owner by a clipboard viewer window when the clipboard contains data in the CF_OWNERDISPLAY format and the clipboard viewer's client area has changed size. ------------------------------------------------------------------------------*) | SYS_SPOOLERSTATUS of { w : MLHWND, jobstatus : int, jobsleft : int } (* Indicates a print job was added or removed *) (*------------------------------------------------------------------------------ WM_SPOOLERSTATUS fwJobStatus = wParam; -o- job-status flag -o- cJobsLeft = LOWORD(lParam); -o- number of jobs remaining -o- The WM_SPOOLERSTATUS message is sent from Windows Print Manager whenever a job is added to or removed from the Print Manager queue. ------------------------------------------------------------------------------*) | SYS_SYSCHAR of { w : MLHWND, ch : string, keydata : int } (* Indicates a System-menu key was pressed *) (*------------------------------------------------------------------------------ WM_SYSCHAR chCharCode = (TCHAR) wParam; -o- character code -o- lKeyData = lParam; -o- key data -o- The WM_SYSCHAR message is posted to the window with the keyboard focus when a WM_SYSKEYDOWN message is translated by the TranslateMessage function. It specifies the character code of a system character key--that is, a character key that is pressed while the ALT key is down. ------------------------------------------------------------------------------*) | SYS_SYSCOLORCHANGE of { w : MLHWND } (* Indicates a system color value was changed *) (*------------------------------------------------------------------------------ WM_SYSCOLORCHANGE The WM_SYSCOLORCHANGE message is sent to all top-level windows when a change is made to a system color setting. ------------------------------------------------------------------------------*) | SYS_SYSCOMMAND of { w : MLHWND, commandvalue : SystemCommand, p : Point } (* Indicates a system command was requested *) (*------------------------------------------------------------------------------ WM_SYSCOMMAND uCmdType = wParam; -o- command value -o- xPos = LOWORD(lParam); -o- horizontal position of cursor -o- yPos = HIWORD(lParam); -o- vertical position of cursor -o- The WM_SYSCOMMAND message is sent when the user chooses a command from the System menu (also known as Control menu) or when the user chooses the Maximize button or Minimize button. ------------------------------------------------------------------------------*) | SYS_SYSDEADCHAR of { w : MLHWND, ch : string, keydata : int } (* Indicates a system dead key was pressed *) (*------------------------------------------------------------------------------ WM_SYSDEADCHAR chCharCode = (TCHAR) wParam; -o- character code -o- lKeyData = lParam; -o- key data -o- The WM_SYSDEADCHAR message is sent to the window with the keyboard focus when a WM_SYSKEYDOWN message is translated by the TranslateMessage function. WM_SYSDEADCHAR specifies the character code of a system dead key--that is, a dead key that is pressed while holding down the ALT key. ------------------------------------------------------------------------------*) | SYS_SYSKEYDOWN of { w : MLHWND, virtualkey : int, keydata : int } | SYS_SYSKEYUP of { w : MLHWND, virtualkey : int, keydata : int } (* Indicates that ALT plus another key was released *) (*------------------------------------------------------------------------------ WM_SYSKEYDOWN UP nVirtKey = (int) wParam; -o- virtual-key code -o- lKeyData = lParam; -o- key data -o- The WM_SYSKEYUP message is posted to the window with the keyboard focus when the user releases a key that was pressed while the ALT key was held down. It also occurs when no window currently has the keyboard focus; in this case, the WM_SYSKEYUP message is sent to the active window. The window that receives the message can distinguish between these two contexts by checking the context code in the lKeyData parameter. ------------------------------------------------------------------------------*) | SYS_TIMECHANGE of { w : MLHWND } (* Indicates the system time has been set *) (*------------------------------------------------------------------------------ WM_TIMECHANGE wParam = 0; -o- not used, must be zero -o- lParam = 0; -o- not used, must be zero -o- An application sends the WM_TIMECHANGE message to all top-level windows after changing the system time. ------------------------------------------------------------------------------*) | SYS_TIMER of { w : MLHWND, timerid : int } (* Indicates timeout interval for a timer has elapsed *) (*------------------------------------------------------------------------------ WM_TIMER wTimerID = wParam; -o- timer identifier -o- tmprc = (TIMERPROC ) lParam; -o- address of timer callback -o- The WM_TIMER message is posted to the installing thread's message queue or sent to the appropriate TimerProc callback function after each interval specified in the SetTimer function used to install a timer. ------------------------------------------------------------------------------*) | SYS_UNDO of { w : MLHWND } (* Undoes the last operation in an edit control *) (*------------------------------------------------------------------------------ WM_UNDO An application sends a WM_UNDO message to an edit control to undo the last operation. When this message is sent to an edit control, the previously deleted text is restored or the previously added text is deleted. ------------------------------------------------------------------------------*) | SYS_USER of { w : MLHWND } (* Indicates a range of message values (*------------------------------------------------------------------------------ ------------------------------------------------------------------------------*) 0 through WM_USER - 1 Messages reserved for use by Windows WM_USER through 0x7FFF Integer messages for use by private Window classes 0x8000 through 0xBFFF Messages reserved for future use by Windows 0xC000 through 0xFFFF String messages for use by applications Greater than 0xFFFF Reserved by Windows for future use *) | SYS_VKEYTOITEM of { w : MLHWND, virtualkey : int, caretpos : int, listbox : MLHWND } (* Provides list-box keystrokes to owner Window *) (*------------------------------------------------------------------------------ WM_VKEYTOITEM vkey = LOWORD(wParam); -o- virtual-key code -o- nCaretPos = HIWORD(wParam); -o- caret position -o- MLHWNDLB = lParam; -o- handle of list box -o- The WM_VKEYTOITEM message is sent by a list box with the LBS_WANTKEYBOARDINPUT style to its owner in response to a WM_KEYDOWN message. ------------------------------------------------------------------------------*) | SYS_VSCROLL of { w : MLHWND, value : int, position : int, scrollbar : MLHWND } (* Indicates a click in a vertical scroll bar *) (*------------------------------------------------------------------------------ WM_VSCROLL nScrollCode = (int) LOWORD(wParam); -o- scroll bar value -o- nPos = (short int) HIWORD(wParam); -o- scroll box position -o- MLHWNDScrollBar = (MLHWND) lParam; -o- handle of scroll bar -o- The WM_VSCROLL message is sent to a window when a scroll event occurs in the window's standard vertical scroll bar. This message is also sent to the owner of a vertical scroll bar control when a scroll event occurs in the control. ------------------------------------------------------------------------------*) | SYS_VSCROLLCLIPBOARD of { w : MLHWND, viewer : MLHWND, code : int, position : int } (* Prompts owner to scroll clipboard contents *) (*------------------------------------------------------------------------------ WM_VSCROLLCLIPBOARD MLHWNDViewer = (MLHWND) wParam; -o- handle of clipboard viewer -o- nScrollCode = (int) LOWORD(lParam); -o- scroll bar code -o- nPos = (int) HIWORD(lParam); -o- scroll box position -o- The WM_VSCROLLCLIPBOARD message is sent to the clipboard owner by a clipboard viewer window when the clipboard contains data in the CF_OWNERDISPLAY format and an event occurs in the clipboard viewer's vertical scroll bar. The owner should scroll the clipboard image and update the scroll bar values. ------------------------------------------------------------------------------*) | SYS_WINDOWPOSCHANGED of { w : MLHWND, front : MLHWND, xpos : int, ypos : int, width : int, height : int, flags : SetWindowPositionStyle } (* Notifies Window of size or position change *) (*------------------------------------------------------------------------------ WM_WINDOWPOSCHANGED lpwp = (LP WINDOWPOS) lParam; -o- points to size and position data -o- The WM_WINDOWPOSCHANGED message is sent to a window whose size, position, or place in the Z order has changed as a result of a call to SetWindowPos or another window-management function. ------------------------------------------------------------------------------*) | SYS_WINDOWPOSCHANGING of { w : MLHWND, front : MLHWND, xpos : int, ypos : int, width : int, height : int, flags : SetWindowPositionStyle } (* Notifies Window of new size or position *) (*------------------------------------------------------------------------------ WM_WINDOWPOSCHANGING lpwp = (LP WINDOWPOS) lParam; -o- points to size and position data -o- The WM_WINDOWPOSCHANGING message is sent to a window whose size, position, or place in the Z order is about to change as a result of a call to SetWindowPos or another window-management function. ------------------------------------------------------------------------------*) | SYS_WININICHANGE of { w : MLHWND, section_name : string } (* Notifies applications that WIN.INI has changed *) (*------------------------------------------------------------------------------ WM_WININICHANGE wParam = 0; -o- not used, must be zero -o- lParam = (LPARAM) (LPCTSTR) pszSection; -o- section-name string -o- An application sends the WM_WININICHANGE message to all top-level windows after making a change to the WIN.INI file. The SystemParametersInfo function sends the WM_WININICHANGE message after an application uses the function to change a setting in WIN.INI. ------------------------------------------------------------------------------*) | SYS_UNKNOWN of { w : MLHWND } (*------------------------------------------------------------------------------ UNKNOWN MESSAGE ------------------------------------------------------------------------------*) | SYS_NULL; (*------------------------------------------------------------------------------ NO MESSAGE ------------------------------------------------------------------------------*) end; signature importDirSig = sig val wpolyname : string val gdilibname : string val userlibname : string end; functor MsgFnFct( structure Dir : importDirSig structure CInterface : importCInterfaceSig structure Macro : importMacroSig structure Type : importTypeSig structure ConstType : importConstTypeSig structure MsgVal : importMsgValSig structure MsgType : importMsgTypeSig sharing type CInterface.Conversion = Type.Conversion sharing type CInterface.vol = Type.vol sharing type Type.MLHMENU = MsgType.MLHMENU sharing type Type.MLHWND = MsgType.MLHWND sharing type Type.MLHDC = MsgType.MLHDC sharing type Type.MLHMENU = MsgType.MLHMENU sharing type Type.MLHANDLE = MsgType.MLHANDLE sharing type Type.MLHRGN = MsgType.MLHRGN sharing type Type.MLHFONT = MsgType.MLHFONT sharing type ConstType.WindowStyleExtended = MsgType.WindowStyleExtended sharing type ConstType.WindowStyle = MsgType.WindowStyle sharing type ConstType.SetWindowPositionStyle = MsgType.SetWindowPositionStyle sharing type ConstType.SystemCommand = MsgType.SystemCommand sharing type Type.Point = MsgType.Point sharing type Type.Rectangle = MsgType.Rectangle sharing type ConstType.ControlNotification = MsgType.ControlNotification ) = struct open CInterface open Macro open Type open ConstType open MsgVal open MsgType open Dir local fun itob i = if i=0 then false else true val getrts = get_sym wpolyname fun viewmessage (m,b) = if b then TextIO.print("event = "^(Int.toString m)^"\n") else () exception WrongNumberOfVolatiles fun break_struct3 types v = let val vols = break_struct types v in case vols of [v1,v2,v3] => (v1,v2,v3) | _ => raise WrongNumberOfVolatiles end; fun break_struct5 types v = let val vols = break_struct types v in case vols of [v1,v2,v3,v4,v5] => (v1,v2,v3,v4,v5) | _ => raise WrongNumberOfVolatiles end; fun break_struct6 types v = let val vols = break_struct types v in case vols of [v1,v2,v3,v4,v5,v6] => (v1,v2,v3,v4,v5,v6) | _ => raise WrongNumberOfVolatiles end; fun break_struct7 types v = let val vols = break_struct types v in case vols of [v1,v2,v3,v4,v5,v6,v7] => (v1,v2,v3,v4,v5,v6,v7) | _ => raise WrongNumberOfVolatiles end; fun break_struct9 types v = let val vols = break_struct types v in case vols of [v1,v2,v3,v4,v5,v6,v7,v8,v9] => (v1,v2,v3,v4,v5,v6,v7,v8,v9) | _ => raise WrongNumberOfVolatiles end; fun break_struct10 types v = let val vols = break_struct types v in case vols of [v1,v2,v3,v4,v5,v6,v7,v8,v9,v10] => (v1,v2,v3,v4,v5,v6,v7,v8,v9,v10) | _ => raise WrongNumberOfVolatiles end; fun break_struct12 types v = let val vols = break_struct types v in case vols of [v1,v2,v3,v4,v5,v6,v7,v8,v9,v10,v11,v12] => (v1,v2,v3,v4,v5,v6,v7,v8,v9,v10,v11,v12) | _ => raise WrongNumberOfVolatiles end; in fun MakeSystem (h,m,wp,lp) = let val u = viewmessage (m,true) in case (i2MessageValue m) of MSG_NULL => SYS_NULL (* "0x0000" *) | MSG_CREATE => let val (cp,inst,menu,parent, cy,cx,y,x, style, name,classname, extendedstyle) = break_struct12 ([voidStar,voidStar,voidStar,voidStar, Cint,Cint,Cint,Cint, Clong, Cpointer Cchar, Cpointer Cchar, Clong]) (deref (toClong lp)) in SYS_CREATE { w = h, menu = MLHMENU menu, parent = MLHWND parent, cy = fromCint cy, cx = fromCint cx, y = fromCint y, x = fromCint x, style = absE WindowStyleE (fromClong style), name = fromCstring name, classname = fromCstring classname, extendedstyle = absE WindowStyleExtendedE (fromClong extendedstyle) } (* "0x0001" *) end | MSG_DESTROY => SYS_DESTROY { w = h } (* "0x0002" *) | MSG_MOVE => SYS_MOVE { w = h, xpos = LOWORD lp, ypos = HIWORD lp } (* "0x0003" *) | MSG_SIZE => SYS_SIZE { w = h, resizeflag = wp, width = LOWORD lp, height = HIWORD lp } (* "0x0005" *) | MSG_ACTIVATE => SYS_ACTIVATE { w = h, active = LOWORD wp, minimize = itob (HIWORD wp) } (* "0x0006" *) | MSG_SETFOCUS => SYS_SETFOCUS { w = h, losing = MLHWND (toClong wp) } (* "0x0007" *) | MSG_KILLFOCUS => SYS_KILLFOCUS { w = h, receivefocus = MLHWND (toClong wp) } (* "0x0008" *) | MSG_ENABLE => SYS_ENABLE { w = h, enabled = itob wp } (* "0x000A" *) | MSG_SETREDRAW => SYS_SETREDRAW { w = h, redrawflag = wp } (* "0x000B" *) | MSG_SETTEXT => SYS_SETTEXT { w = h, Windowtext = fromCstring (toClong lp) } (* "0x000C" *) | MSG_GETTEXT => SYS_GETTEXT { w = h, text = fromCstring (toClong lp) } (* "0x000D" *) | MSG_GETTEXTLENGTH => SYS_GETTEXTLENGTH { w = h } (* "0x000E" *) | MSG_PAINT => SYS_PAINT { w = h } (* "0x000F" *) | MSG_CLOSE => SYS_CLOSE { w = h } (* "0x0010" *) | MSG_QUERYENDSESSION=> SYS_QUERYENDSESSION { w = h, source = wp } (* "0x0011" *) | MSG_QUIT => SYS_QUIT { w = h, exitcode = wp } (* "0x0012" *) | MSG_QUERYOPEN => SYS_QUERYOPEN { w = h } (* "0x0013" *) | MSG_ERASEBKGND => SYS_ERASEBKGND { w = h, devicecontext = MLHDC (toClong wp) } (* "0x0014" *) | MSG_SYSCOLORCHANGE => SYS_SYSCOLORCHANGE { w = h } (* "0x0015" *) | MSG_ENDSESSION => SYS_ENDSESSION { w = h, endsession = itob wp }(* "0x0016" *) | MSG_SHOWWINDOW => SYS_SHOWWINDOW { w = h, showflag = itob wp, statusflag = lp } (* "0x0018" *) | MSG_WININICHANGE => SYS_WININICHANGE { w = h, section_name = fromCstring (toClong lp) } (* "0x001A" *) | MSG_DEVMODECHANGE => SYS_DEVMODECHANGE { w = h, devicename = fromCstring (toClong lp) } (* "0x001B" *) | MSG_ACTIVATEAPP => SYS_ACTIVATEAPP { w = h, active = itob wp, threadid = lp } (* "0x001C" *) | MSG_FONTCHANGE => SYS_FONTCHANGE { w = h } (* "0x001D" *) | MSG_TIMECHANGE => SYS_TIMECHANGE { w = h } (* "0x001E" *) | MSG_CANCELMODE => SYS_CANCELMODE { w = h } (* "0x001F" *) | MSG_SETCURSOR => SYS_SETCURSOR { w = h, cursorwindow = MLHWND (toClong wp), hittest = LOWORD lp, mousemessage = HIWORD lp } (* "0x0020" *) | MSG_MOUSEACTIVATE => SYS_MOUSEACTIVATE { w = h, parent = MLHWND (toClong wp), hit_test = LOWORD lp, message = HIWORD lp }(* "0x0021" *) | MSG_CHILDACTIVATE => SYS_CHILDACTIVATE { w = h } (* "0x0022" *) | MSG_QUEUESYNC => SYS_QUEUESYNC { w = h } (* "0x0023" *) | MSG_GETMINMAXINFO => let val (ptresx,ptresy, ptmsx,ptmsy, ptmpx,ptmpy, pttsx,pttsy, ptmtsx,ptmtsy) = break_struct10 ([Clong,Clong, Clong,Clong, Clong,Clong, Clong,Clong, Clong,Clong]) (deref (toClong lp)) in SYS_GETMINMAXINFO { w = h, MaxSizex = fromClong ptmsx, MaxSizey = fromClong ptmsy, MaxPositionx = fromClong ptmpx, MaxPositiony = fromClong ptmpy, MinTrackSizex = fromClong pttsx, MinTrackSizey = fromClong pttsy, MaxTrackSizex = fromClong ptmtsx, MaxTrackSizey = fromClong ptmtsy } (* "0x0024" *) end | MSG_PAINTICON => SYS_PAINTICON { w = h } (* "0x0026" *) | MSG_ICONERASEBKGND => SYS_ICONERASEBKGND { w = h, devicecontext = MLHDC (toClong wp) } (* "0x0027" *) | MSG_NEXTDLGCTL => SYS_NEXTDLGCTL { w = h, control = wp, handleflag = itob lp } (* "0x0028" *) | MSG_SPOOLERSTATUS => SYS_SPOOLERSTATUS { w = h, jobstatus = wp, jobsleft = LOWORD lp } (* "0x002A" *) | MSG_DRAWITEM => let val (CtlType,CtlID,itemID,itemAction,itemState, hItem,hDC, rcleft,rctop,rcbottom,rcright, itemData) = break_struct12 ([Cint,Cint,Cint,Cint,Cint, voidStar,voidStar, Clong,Clong,Clong,Clong, Clong]) (deref (toClong lp)) in SYS_DRAWITEM { w = h, controlid = wp, CtlType = fromCint CtlType, CtlID = fromCint CtlID, itemID = fromCint itemID, itemAction = fromCint itemAction, itemState = fromCint itemState, hItem = MLHWND hItem, hDC = MLHDC hDC, rcItem = mkRect {left = fromClong rcleft, top = fromClong rctop, bottom = fromClong rcbottom, right = fromClong rcright}, itemData = fromClong itemData } (* "0x002B" *) end | MSG_MEASUREITEM => let val (CtlType,CtlID,itemID, itemWidth,itemHeight,itemData) = break_struct6 ([Cint,Cint,Cint, Cint,Cint,Clong]) (deref (toClong lp)) in SYS_MEASUREITEM { w = h, controlid = wp, CtlType = fromCint CtlType, CtlID = fromCint CtlID, itemID = fromCint itemID, itemWidth = fromCint itemWidth, itemHeight = fromCint itemHeight, itemData = fromClong itemData } (* "0x002C" *) end | MSG_DELETEITEM => let val (CtlType,CtlID,itemID, hItem,itemData) = break_struct5 ([Cint,Cint,Cint,voidStar,Cint]) (deref (toClong lp)) in SYS_DELETEITEM { w = h, controlid = wp, CtlType = fromCint CtlType, CtlID = fromCint CtlID, itemID = fromCint itemID, item = MLHWND hItem, itemData = fromCint itemData } (* "0x002D" *) end | MSG_VKEYTOITEM => SYS_VKEYTOITEM { w = h, virtualkey = LOWORD wp, caretpos = HIWORD wp, listbox = MLHWND (toClong lp) } (* "0x002E" *) | MSG_CHARTOITEM => SYS_CHARTOITEM { w = h, key = LOWORD wp, caretpos = HIWORD wp, listbox = MLHWND (toClong lp) } (* "0x002F" *) | MSG_SETFONT => SYS_SETFONT { w = h, font = MLHFONT (toClong wp), redrawflag = lp } (* "0x0030" *) | MSG_GETFONT => SYS_GETFONT { w = h } (* "0x0031" *) | MSG_SETHOTKEY => SYS_SETHOTKEY { w = h, virtualkey = wp } (* "0x0032" *) | MSG_GETHOTKEY => SYS_GETHOTKEY { w = h } (* "0x0033" *) | MSG_QUERYDRAGICON => SYS_QUERYDRAGICON { w = h } (* "0x0037" *) | MSG_COMPAREITEM => let val (CtlType,CtlID, hItem, itemID1,itemData1, itemID2,itemData2) = break_struct7 ([Cint,Cint, voidStar, Cint,Clong,Cint,Clong]) (deref (toClong lp)) in SYS_COMPAREITEM { w = h, controlid = wp, CtlType = fromCint CtlType, CtlID = fromCint CtlID, hItem = MLHWND hItem, itemID1 = fromCint itemID1, itemData1 = fromClong itemData1, itemID2 = fromCint itemID2, itemData2 = fromClong itemData2 } (* "0x0039" *) end | MSG_COMPACTING => SYS_COMPACTING { w = h, compactratio = wp } (* "0x0041" *) | MSG_WINDOWPOSCHANGING => let val (wh,front, xpos,ypos,width,height, flags) = break_struct7 ([voidStar,voidStar, Cint,Cint,Cint,Cint,Cint]) (deref (toClong lp)) in SYS_WINDOWPOSCHANGING { w = h, front = MLHWND front, xpos = fromCint xpos, ypos = fromCint ypos, width = fromCint width, height = fromCint height, flags = absE SetWindowPositionStyleE (fromCint flags) } (* "0x0047" *) end | MSG_WINDOWPOSCHANGED => let val (wh,front, xpos,ypos,width,height, flags) = break_struct7 ([voidStar,voidStar, Cint,Cint,Cint,Cint,Cint]) (deref (toClong lp)) in SYS_WINDOWPOSCHANGED { w = h, front = MLHWND front, xpos = fromCint xpos, ypos = fromCint ypos, width = fromCint width, height = fromCint height, flags = absE SetWindowPositionStyleE (fromCint flags) } (* "0x0047" *) end | MSG_POWER => SYS_POWER { w = h, powerevent = wp } (* "0x0048" *) | MSG_COPYDATA => let val (data,_,_) = break_struct3 ([Clong,Clong,voidStar]) (deref (toClong lp)) in SYS_COPYDATA { w = h, sender = MLHWND (toClong wp), data = fromClong data } (* "0x004A" *) end | MSG_CANCELJOURNAL => SYS_CANCELJOURNAL (* "0x004B" *) | MSG_NCCREATE => let val (createp,inst,menu,parent, cy,cx,y,x, style,name,classname,exstyle) = break_struct12 ([voidStar,voidStar,voidStar,voidStar, Cint,Cint,Cint,Cint, Clong, Cpointer Cchar, Cpointer Cchar, Clong]) (deref (toClong lp)) in SYS_NCCREATE { w = h, menu = MLHMENU menu, parent = MLHWND parent, cy = fromCint cy, cx = fromCint cx, y = fromCint y, x = fromCint x, style = fromClong style , name = fromCstring name, classname = fromCstring classname, exstyle = fromClong exstyle } (* "0x0081" *) end | MSG_NCDESTROY => SYS_NCDESTROY { w = h } (* "0x0082" *) (* This is problematic - different under Windows NT and Windows 95 *) | MSG_NCCALCSIZE => (* SYS_NCCALCSIZE { w = h, validarea = valid, newrect = mkRect {left=call1 (getrts "getr0left") (POINTER) (LONG) psize, top=call1 (getrts "getr0top") (POINTER) (LONG) psize, right=call1 (getrts "getr0right") (POINTER) (LONG) psize, bottom=call1 (getrts "getr0bottom") (POINTER) (LONG) psize}, oldrect = mkRect {left=call1 (getrts "getr1left") (POINTER) (LONG) psize, top=call1 (getrts "getr1top") (POINTER) (LONG) psize, right=call1 (getrts "getr1right") (POINTER) (LONG) psize, bottom=call1 (getrts "getr1bottom") (POINTER) (LONG) psize}, oldclientarea = mkRect {left=call1 (getrts "getr2left") (POINTER) (LONG) psize, top=call1 (getrts "getr2top") (POINTER) (LONG) psize, right=call1 (getrts "getr2right") (POINTER) (LONG) psize, bottom=call1 (getrts "getr2bottom") (POINTER) (LONG) psize}, InsertAfter = call1 (getrts "gethwndafter") (POINTER) (HWND) psize, x = call1 (getrts "getx") (POINTER) (INT) psize, y = call1 (getrts "gety") (POINTER) (INT) psize, cx = call1 (getrts "getcx") (POINTER) (INT) psize, cy = call1 (getrts "getcy") (POINTER) (INT) psize, flags = call1 (getrts "getflags") (POINTER) (INT) psize } *) (* "0x0083" *) SYS_NCCALCSIZE { w = h, validarea = true, newrect = mkRect {left=0, top=0, right=0, bottom=0}, oldrect = mkRect {left=0, top=0, right=0, bottom=0}, oldclientarea = mkRect {left=0, top=0, right=0, bottom=0}, InsertAfter = MLHWND (toClong 0), x = 0, y = 0, cx = 0, cy = 0, flags = 0 } (* "0x0083" *) | MSG_NCHITTEST => SYS_NCHITTEST { w = h, xpos = LOWORD lp, ypos = HIWORD lp } (* "0x0084" *) | MSG_NCPAINT => SYS_NCPAINT { w = h, region = MLHRGN (toClong wp) } (* "0x0085" *) | MSG_NCACTIVATE => SYS_NCACTIVATE { w = h, active = itob wp } (* "0x0086" *) | MSG_GETDLGCODE => SYS_GETDLGCODE { w = h } (* "0x0087" *) | MSG_NCMOUSEMOVE => SYS_NCMOUSEMOVE { w = h, hit_test = wp, xpos = LOWORD lp, ypos = HIWORD lp } (* "0x00A0" *) | MSG_NCLBUTTONDOWN => SYS_NCLBUTTONDOWN { w = h, hit_test = wp, xpos = LOWORD lp, ypos = HIWORD lp }(* "0x00A1" *) | MSG_NCLBUTTONUP => SYS_NCLBUTTONUP { w = h, hit_test = wp, xpos = LOWORD lp, ypos = HIWORD lp } (* "0x00A2" *) | MSG_NCLBUTTONDBLCLK=> SYS_NCLBUTTONDBLCLK { w = h, hit_test = wp, xpos = LOWORD lp, ypos = HIWORD lp } (* "0x00A3" *) | MSG_NCRBUTTONDOWN => SYS_NCRBUTTONDOWN { w = h, hit_test = wp, xpos = LOWORD lp, ypos = HIWORD lp } (* "0x00A4" *) | MSG_NCRBUTTONUP => SYS_NCRBUTTONUP { w = h, hit_test = wp, xpos = LOWORD lp, ypos = HIWORD lp } (* "0x00A5" *) | MSG_NCRBUTTONDBLCLK=> SYS_NCRBUTTONDBLCLK { w = h, hit_test = wp, xpos = LOWORD lp, ypos = HIWORD lp } (* "0x00A6" *) | MSG_NCMBUTTONDOWN => SYS_NCMBUTTONDOWN { w = h, hit_test = wp, xpos = LOWORD lp, ypos = HIWORD lp } (* "0x00A7" *) | MSG_NCMBUTTONUP => SYS_NCMBUTTONUP { w = h, hit_test = wp, xpos = LOWORD lp, ypos = HIWORD lp } (* "0x00A8" *) | MSG_NCMBUTTONDBLCLK=> SYS_NCMBUTTONDBLCLK { w = h, hit_test = wp, xpos = LOWORD lp, ypos = HIWORD lp } (* "0x00A9" *) | MSG_KEYDOWN => SYS_KEYDOWN { w = h, virtualkey = wp, data = lp } (* "0x0100" *) | MSG_KEYUP => SYS_KEYUP { w = h, virtualkey = wp, data = lp } (* "0x0101" *) | MSG_CHAR => SYS_CHAR { w = h, ch = SML90.chr wp, data = lp } (* "0x0102" *) | MSG_DEADCHAR => SYS_DEADCHAR { w = h, charcode = SML90.chr wp, keydata = lp } (* "0x0103" *) | MSG_SYSKEYUP => SYS_SYSKEYUP { w = h, virtualkey = wp, keydata = lp } (* "0x0105" *) | MSG_SYSCHAR => SYS_SYSCHAR { w = h, ch = SML90.chr wp, keydata = lp } (* "0x0106" *) | MSG_SYSDEADCHAR => SYS_SYSDEADCHAR { w = h, ch = SML90.chr wp, keydata = lp } (* "0x0107" *) | MSG_INITDIALOG => SYS_INITDIALOG { w = h, dialog = MLHWND (toClong wp), initdata = lp } (* "0x0110" *) | MSG_COMMAND => SYS_COMMAND { w = h, notifycode = absE ControlNotificationE (HIWORD wp), wid = LOWORD wp, control = MLHWND (toClong lp) } (* "0x0111" *) | MSG_SYSCOMMAND => SYS_SYSCOMMAND { w = h, commandvalue = absE SystemCommandE wp, p = mkPoint {x= LOWORD lp,y= HIWORD lp} } (* "0x0112" *) | MSG_TIMER => SYS_TIMER { w = h, timerid = wp } (* "0x0113" *) | MSG_HSCROLL => SYS_HSCROLL { w = h, value = LOWORD wp, position = HIWORD wp, scrollbar = MLHWND (toClong lp) } (* "0x0114" *) | MSG_VSCROLL => SYS_VSCROLL { w = h, value = LOWORD wp, position = HIWORD wp, scrollbar = MLHWND (toClong lp) } (* "0x0115" *) | MSG_INITMENU => SYS_INITMENU { w = h, menu = MLHMENU (toClong wp) } (* "0x0116" *) | MSG_INITMENUPOPUP => SYS_INITMENUPOPUP { w = h, menupopup = MLHMENU (toClong wp), itemposition = LOWORD lp, issystemmenu = itob (HIWORD lp) } (* "0x0117" *) | MSG_MENUSELECT => SYS_MENUSELECT { w = h, menuitem = call1 (getrts "menuselectLW") (INT) (INT) wp, menuflags = call1 (getrts "menuselectHW") (INT) (INT) wp, menu = MLHMENU (toClong lp) } (* "0x011F" *) | MSG_MENUCHAR => SYS_MENUCHAR { w = h, ch = SML90.chr (LOWORD wp), menuflag = HIWORD wp, menu = MLHMENU (toClong lp) } (* "0x0120" *) | MSG_ENTERIDLE => SYS_ENTERIDLE { w = h, flag = wp, Window = MLHWND (toClong lp) } (* "0x0121" *) | MSG_CTLCOLORMSGBOX => SYS_CTLCOLORMSGBOX { w = h, displaycontext = MLHDC (toClong wp), messagebox = MLHWND (toClong lp) } (* "0x0132" *) | MSG_CTLCOLOREDIT => SYS_CTLCOLOREDIT { w = h, displaycontext = MLHDC (toClong wp), editcontrol = MLHWND (toClong lp) } (* "0x0133" *) | MSG_CTLCOLORLISTBOX=> SYS_CTLCOLORLISTBOX { w = h, displaycontext = MLHDC (toClong wp), listbox = MLHWND (toClong lp) } (* "0x0134" *) | MSG_CTLCOLORBTN => SYS_CTLCOLORBTN { w = h, displaycontext = MLHDC (toClong wp), button = MLHWND (toClong lp) }(* "0x0135" *) | MSG_CTLCOLORDLG => SYS_CTLCOLORDLG { w = h, displaycontext = MLHDC (toClong wp), dialogbox = MLHWND (toClong lp) } (* "0x0136" *) | MSG_CTLCOLORSCROLLBAR => SYS_CTLCOLORSCROLLBAR { w = h, displaycontext = MLHDC (toClong wp), scrollbar = MLHWND (toClong lp) } (* "0x0137" *) | MSG_CTLCOLORSTATIC => SYS_CTLCOLORSTATIC { w = h, displaycontext = MLHDC (toClong wp), staticcontrol = MLHWND (toClong lp) } (* "0x0138" *) | MSG_MOUSEMOVE => SYS_MOUSEMOVE { w = h, keyflags = wp, xpos = LOWORD lp, ypos = HIWORD lp } (* "0x0200" *) | MSG_LBUTTONDOWN => SYS_LBUTTONDOWN { w = h, keyflags = wp, xpos = LOWORD lp, ypos = HIWORD lp } (* "0x0201" *) | MSG_LBUTTONUP => SYS_LBUTTONUP { w = h, keyflags = wp, xpos = LOWORD lp, ypos = HIWORD lp } (* "0x0202" *) | MSG_LBUTTONDBLCLK => SYS_LBUTTONDBLCLK { w = h, keyflags = wp, xpos = LOWORD lp, ypos = HIWORD lp } (* "0x0203" *) | MSG_RBUTTONDOWN => SYS_RBUTTONDOWN { w = h, keyflags = wp, xpos = LOWORD lp, ypos = HIWORD lp } (* "0x0204" *) | MSG_RBUTTONUP => SYS_RBUTTONUP { w = h, keyflags = wp, xpos = LOWORD lp, ypos = HIWORD lp } (* "0x0205" *) | MSG_RBUTTONDBLCLK => SYS_RBUTTONDBLCLK { w = h, keyflags = wp, xpos = LOWORD lp, ypos = HIWORD lp }(* "0x0206" *) | MSG_MBUTTONDOWN => SYS_MBUTTONDOWN { w = h, keyflags = wp, xpos = LOWORD lp, ypos = HIWORD lp } (* "0x0207" *) | MSG_MBUTTONUP => SYS_MBUTTONUP { w = h, keyflags = wp, xpos = LOWORD lp, ypos = HIWORD lp } (* "0x0208" *) | MSG_MBUTTONDBLCLK => SYS_MBUTTONDBLCLK { w = h, keyflags = wp, xpos = LOWORD lp, ypos = HIWORD lp } (* "0x0209" *) | MSG_PARENTNOTIFY => SYS_PARENTNOTIFY { w = h, eventflag = LOWORD wp, idchild = HIWORD wp, value = lp } (* "0x0210" *) | MSG_ENTERMENULOOP => SYS_ENTERMENULOOP { w = h, istrack= itob wp } (* "0x0211" *) | MSG_EXITMENULOOP => SYS_EXITMENULOOP { w = h, istrack= itob wp } (* "0x0212" *) | MSG_MDICREATE => let val (szClass,szTitle,hinst, x,y,cx,cy, style,lParam) = break_struct9 ([Cpointer Cchar, Cpointer Cchar, voidStar, Cint,Cint,Cint,Cint, Clong,Clong]) (deref (toClong lp)) in SYS_MDICREATE { w = h, szClass = fromCstring szClass, szTitle = fromCstring szTitle, x = fromCint x, y = fromCint y, cx = fromCint cx, cy = fromCint cy, style = fromClong style, cdata = fromClong lParam } (* "0x0220" *) end | MSG_MDIDESTROY => SYS_MDIDESTROY { w = h, childtoclose = MLHWND (toClong wp) } (* "0x0221" *) | MSG_MDIRESTORE => SYS_MDIRESTORE { w = h, childtorestore = MLHWND (toClong wp) } (* "0x0223" *) | MSG_MDINEXT => SYS_MDINEXT { w = h, child = MLHWND (toClong wp), flagnext = itob lp } (* "0x0224" *) | MSG_MDIMAXIMIZE => SYS_MDIMAXIMIZE { w = h, childtomaximise = MLHWND (toClong wp) } (* "0x0225" *) | MSG_MDITILE => SYS_MDITILE { w = h, tilingflag = wp } (* "0x0226" *) | MSG_MDICASCADE => SYS_MDICASCADE { w = h, flag = wp } (* "0x0227" *) | MSG_MDIICONARRANGE => SYS_MDIICONARRANGE { w = h } (* "0x0228" *) | MSG_MDIGETACTIVE => SYS_MDIGETACTIVE { w = h, stateflag = itob (fromClong (address (toClong lp))) } (* "0x0229" *) | MSG_MDISETMENU => SYS_MDISETMENU { w = h, framemenu = MLHMENU (toClong wp), Windowmenu = MLHMENU (toClong lp) } (* "0x0230" *) | MSG_DROPFILES => SYS_DROPFILES { w = h, hDrop = MLHANDLE (toClong wp) } (* "0x0233" *) | MSG_MDIREFRESHMENU => SYS_MDIREFRESHMENU { w = h } (* "0x0234" *) | MSG_CUT => SYS_CUT { w = h } (* "0x0300" *) | MSG_COPY => SYS_COPY { w = h } (* "0x0301" *) | MSG_PASTE => SYS_PASTE { w = h } (* "0x0302" *) | MSG_CLEAR => SYS_CLEAR { w = h } (* "0x0303" *) | MSG_UNDO => SYS_UNDO { w = h } (* "0x0304" *) | MSG_RENDERFORMAT => SYS_RENDERFORMAT { w = h, format = wp } (* "0x0305" *) | MSG_RENDERALLFORMATS => SYS_RENDERALLFORMATS { w = h } (* "0x0306" *) | MSG_DESTROYCLIPBOARD => SYS_DESTROYCLIPBOARD { w = h } (* "0x0307" *) | MSG_DRAWCLIPBOARD => SYS_DRAWCLIPBOARD { w = h } (* "0x0308" *) | MSG_PAINTCLIPBOARD => SYS_PAINTCLIPBOARD { w = h, clipboard = MLHWND (toClong wp) } (* "0x0309" *) | MSG_VSCROLLCLIPBOARD => SYS_VSCROLLCLIPBOARD { w = h, viewer = MLHWND (toClong wp), code = LOWORD lp, position = HIWORD lp } (* "0x030A" *) | MSG_SIZECLIPBOARD => SYS_SIZECLIPBOARD { w = h, viewer = MLHWND (toClong lp) } (* "0x030B" *) | MSG_ASKCBFORMATNAME=> let val formatname = fromCstring (address (toClong lp)) in SYS_ASKCBFORMATNAME { w = h, formatname = formatname } (* "0x030C" *) end | MSG_CHANGECBCHAIN => SYS_CHANGECBCHAIN { w = h, removed = MLHWND (toClong wp), next = MLHWND (toClong lp) } (* "0x030D" *) | MSG_HSCROLLCLIPBOARD => SYS_HSCROLLCLIPBOARD { w = h, viewer = MLHWND (toClong wp), code = LOWORD lp, position = HIWORD lp } (* "0x030E" *) | MSG_QUERYNEWPALETTE => SYS_QUERYNEWPALETTE { w = h } (* "0x030F" *) | MSG_PALETTEISCHANGING => SYS_PALETTEISCHANGING { w = h, changingpalette = MLHWND (toClong wp) } (* "0x0310" *) | MSG_PALETTECHANGED => SYS_PALETTECHANGED { w = h, changedpalette = MLHWND (toClong wp) } (* "0x0311" *) | MSG_HOTKEY => SYS_HOTKEY { w = h, id = wp } (* "0x0312" *) | MSG_USER => SYS_USER { w = h } (* "0x0400" *) | _ => SYS_NULL end datatype callbacktype = MouseCB | ControlCB of Id | TimerCB of Id | KeyCB | ScrollCB | RefreshCB | DestroyCB | OtherCB datatype MouseButton = Left | Middle | Right | NoButton datatype MouseAction = Up | Down | DoubleClk | MouseMove datatype InClientArea = Yes | No of HitTest datatype MouseMessage = Mouse of { button : MouseButton, action : MouseAction, position : Point, inclientarea : InClientArea, ldown : bool, mdown : bool, rdown : bool, ctrldown : bool, shiftdown : bool } datatype ControlMessage = Ctrl of { w : MLHWND, notifycode : ControlNotification, ctlid : Id, ctl : MLHWND } datatype KeyMessage = Key of {w : MLHWND, key : string, keydata : int, dead : bool, system : bool } datatype ScrollBarOrientation = Horizontal | Vertical datatype ScrollBarData = ScrollMove of ScrollBarType * int | ScrollRedraw of MLHDC datatype ScrollMessage = Scroll of {w : MLHWND, orientation : ScrollBarOrientation, data : ScrollBarData, shandle : MLHWND } datatype RefreshMessage = Refresh of {w : MLHWND, inclientarea : bool} datatype DestroyMessage = Destroy of {w : MLHWND} datatype TimerMessage = Timer of {w : MLHWND, timer : Id} datatype OtherMessage = Msg of System (* system -> callbacktype *) fun getcallbacktype m = case m of SYS_NCMOUSEMOVE _ => MouseCB | SYS_NCLBUTTONDOWN _ => MouseCB | SYS_NCLBUTTONUP _ => MouseCB | SYS_NCLBUTTONDBLCLK _ => MouseCB | SYS_NCRBUTTONDOWN _ => MouseCB | SYS_NCRBUTTONUP _ => MouseCB | SYS_NCRBUTTONDBLCLK _ => MouseCB | SYS_NCMBUTTONDOWN _ => MouseCB | SYS_NCMBUTTONUP _ => MouseCB | SYS_NCMBUTTONDBLCLK _ => MouseCB | SYS_MOUSEMOVE _ => MouseCB | SYS_LBUTTONDOWN _ => MouseCB | SYS_LBUTTONUP _ => MouseCB | SYS_LBUTTONDBLCLK _ => MouseCB | SYS_RBUTTONDOWN _ => MouseCB | SYS_RBUTTONUP _ => MouseCB | SYS_RBUTTONDBLCLK _ => MouseCB | SYS_MBUTTONDOWN _ => MouseCB | SYS_MBUTTONUP _ => MouseCB | SYS_MBUTTONDBLCLK _ => MouseCB | SYS_COMMAND {wid,...} => ControlCB (Id wid) | SYS_TIMER {timerid,...} => TimerCB (Id timerid) | SYS_CHAR _ => KeyCB | SYS_DEADCHAR _ => KeyCB | SYS_SYSCHAR _ => KeyCB | SYS_SYSDEADCHAR _ => KeyCB | SYS_HSCROLL _ => ScrollCB | SYS_VSCROLL _ => ScrollCB | SYS_CTLCOLORSCROLLBAR _ => ScrollCB | SYS_NCPAINT _ => RefreshCB | SYS_PAINT _ => RefreshCB | SYS_NCDESTROY _ => DestroyCB | _ => OtherCB (* system -> TimerMessage *) exception NotATimerMessage fun timerMessageOf sysmsg = case sysmsg of SYS_TIMER {w,timerid} => Timer {w = w, timer = Id timerid} | _ => raise NotATimerMessage (* system -> MouseMessage *) exception NotAMouseMessage fun checkbit (flag,mask) = if flag < 0 then false else (natAnd(flag,mask) = mask) fun mouseMessageOf sysmsg = case sysmsg of SYS_NCMOUSEMOVE {w,hit_test,xpos,ypos} => Mouse { button = NoButton, action = MouseMove, position = mkPoint {x=xpos,y=ypos}, inclientarea = No (absE HitTestE hit_test), ldown = false, mdown = false, rdown = false, ctrldown = false, shiftdown = false } | SYS_NCLBUTTONDOWN {w,hit_test,xpos,ypos} => Mouse { button = Left, action = Down, position = mkPoint {x=xpos,y=ypos}, inclientarea = No (absE HitTestE hit_test), ldown = false, mdown = false, rdown = false, ctrldown = false, shiftdown = false } | SYS_NCLBUTTONUP {w,hit_test,xpos,ypos} => Mouse { button = Left, action = Up, position = mkPoint {x=xpos,y=ypos}, inclientarea = No (absE HitTestE hit_test), ldown = false, mdown = false, rdown = false, ctrldown = false, shiftdown = false } | SYS_NCLBUTTONDBLCLK {w,hit_test,xpos,ypos} => Mouse { button = Left, action = DoubleClk, position = mkPoint {x=xpos,y=ypos}, inclientarea = No (absE HitTestE hit_test), ldown = false, mdown = false, rdown = false, ctrldown = false, shiftdown = false } | SYS_NCRBUTTONDOWN {w,hit_test,xpos,ypos} => Mouse { button = Right, action = Down, position = mkPoint {x=xpos,y=ypos}, inclientarea = No (absE HitTestE hit_test), ldown = false, mdown = false, rdown = false, ctrldown = false, shiftdown = false } | SYS_NCRBUTTONUP {w,hit_test,xpos,ypos} => Mouse { button = Right, action = Up, position = mkPoint {x=xpos,y=ypos}, inclientarea = No (absE HitTestE hit_test), ldown = false, mdown = false, rdown = false, ctrldown = false, shiftdown = false } | SYS_NCRBUTTONDBLCLK {w,hit_test,xpos,ypos} => Mouse { button = Right, action = DoubleClk, position = mkPoint {x=xpos,y=ypos}, inclientarea = No (absE HitTestE hit_test), ldown = false, mdown = false, rdown = false, ctrldown = false, shiftdown = false } | SYS_NCMBUTTONDOWN {w,hit_test,xpos,ypos} => Mouse { button = Middle, action = Down, position = mkPoint {x=xpos,y=ypos}, inclientarea = No (absE HitTestE hit_test), ldown = false, mdown = false, rdown = false, ctrldown = false, shiftdown = false } | SYS_NCMBUTTONUP {w,hit_test,xpos,ypos} => Mouse { button = Middle, action = Up, position = mkPoint {x=xpos,y=ypos}, inclientarea = No (absE HitTestE hit_test), ldown = false, mdown = false, rdown = false, ctrldown = false, shiftdown = false } | SYS_NCMBUTTONDBLCLK {w,hit_test,xpos,ypos} => Mouse { button = Middle, action = DoubleClk, position = mkPoint {x=xpos,y=ypos}, inclientarea = No (absE HitTestE hit_test), ldown = false, mdown = false, rdown = false, ctrldown = false, shiftdown = false } | SYS_MOUSEMOVE {w,keyflags,xpos,ypos} => Mouse { button = NoButton, action = MouseMove, position = mkPoint {x=xpos,y=ypos}, inclientarea = Yes, ldown = false, mdown = false, rdown = false, ctrldown = false, shiftdown = false } | SYS_LBUTTONDOWN {w,keyflags,xpos,ypos} => Mouse { button = Left, action = Down, position = mkPoint {x=xpos,y=ypos}, inclientarea = Yes, ldown = true, mdown = checkbit (keyflags,16), rdown = checkbit (keyflags,2), ctrldown = checkbit (keyflags,8), shiftdown = checkbit (keyflags,4) } | SYS_LBUTTONUP {w,keyflags,xpos,ypos} => Mouse { button = Left, action = Up, position = mkPoint {x=xpos,y=ypos}, inclientarea = Yes, ldown = false, mdown = checkbit (keyflags,16), rdown = checkbit (keyflags,2), ctrldown = checkbit (keyflags,8), shiftdown = checkbit (keyflags,4) } | SYS_LBUTTONDBLCLK {w,keyflags,xpos,ypos} => Mouse { button = Left, action = DoubleClk, position = mkPoint {x=xpos,y=ypos}, inclientarea = Yes, ldown = checkbit (keyflags,1), mdown = checkbit (keyflags,16), rdown = checkbit (keyflags,2), ctrldown = checkbit (keyflags,8), shiftdown = checkbit (keyflags,4) } | SYS_RBUTTONDOWN {w,keyflags,xpos,ypos} => Mouse { button = Right, action = Down, position = mkPoint {x=xpos,y=ypos}, inclientarea = Yes, ldown = checkbit (keyflags,1), mdown = checkbit (keyflags,16), rdown = true, ctrldown = checkbit (keyflags,8), shiftdown = checkbit (keyflags,4) } | SYS_RBUTTONUP {w,keyflags,xpos,ypos} => Mouse { button = Left, action = Up, position = mkPoint {x=xpos,y=ypos}, inclientarea = Yes, ldown = checkbit (keyflags,1), mdown = checkbit (keyflags,16), rdown = true, ctrldown = checkbit (keyflags,8), shiftdown = checkbit (keyflags,4) } | SYS_RBUTTONDBLCLK {w,keyflags,xpos,ypos} => Mouse { button = Right, action = DoubleClk, position = mkPoint {x=xpos,y=ypos}, inclientarea = Yes, ldown = checkbit (keyflags,1), mdown = checkbit (keyflags,16), rdown = checkbit (keyflags,2), ctrldown = checkbit (keyflags,8), shiftdown = checkbit (keyflags,4) } | SYS_MBUTTONDOWN {w,keyflags,xpos,ypos} => Mouse { button = Middle, action = Down, position = mkPoint {x=xpos,y=ypos}, inclientarea = Yes, ldown = checkbit (keyflags,1), mdown = true, rdown = checkbit (keyflags,2), ctrldown = checkbit (keyflags,8), shiftdown = checkbit (keyflags,4) } | SYS_MBUTTONUP {w,keyflags,xpos,ypos} => Mouse { button = Middle, action = Up, position = mkPoint {x=xpos,y=ypos}, inclientarea = Yes, ldown = checkbit (keyflags,1), mdown = true, rdown = checkbit (keyflags,2), ctrldown = checkbit (keyflags,8), shiftdown = checkbit (keyflags,4) } | SYS_MBUTTONDBLCLK {w,keyflags,xpos,ypos} => Mouse { button = Middle, action = DoubleClk, position = mkPoint {x=xpos,y=ypos}, inclientarea = Yes, ldown = checkbit (keyflags,1), mdown = checkbit (keyflags,16), rdown = checkbit (keyflags,2), ctrldown = checkbit (keyflags,8), shiftdown = checkbit (keyflags,4) } | _ => raise NotAMouseMessage (* system -> ControlMessage *) exception NotAControlMessage fun controlMessageOf sysmsg = case sysmsg of SYS_COMMAND {w,notifycode,wid,control} => Ctrl { w = w, notifycode = notifycode, ctlid = Id wid, ctl = control } | _ => raise NotAControlMessage (* system -> KeyMessage *) exception NotAKeyMessage fun keyMessageOf sysmsg = case sysmsg of SYS_CHAR {w,ch,data} => Key {w = w, key = ch, keydata = data, dead = false, system = false } | SYS_DEADCHAR {w,charcode,keydata} => Key {w = w, key = charcode, keydata = keydata, dead = true, system = false } | SYS_SYSCHAR {w,ch,keydata} => Key {w = w, key = ch, keydata = keydata, dead = false, system = true } | SYS_SYSDEADCHAR {w,ch,keydata} => Key {w = w, key = ch, keydata = keydata, dead = true, system = true } | _ => raise NotAKeyMessage (* system -> KeyMessage *) exception NotAScrollMessage fun scrollMessageOf sysmsg = case sysmsg of SYS_HSCROLL {w,value,position,scrollbar} => Scroll {w = w, orientation = Horizontal, data = ScrollMove ( (absE ScrollBarTypeE value), position ), shandle = scrollbar } | SYS_VSCROLL {w,value,position,scrollbar} => Scroll {w = w, orientation = Vertical, data = ScrollMove ( (absE ScrollBarTypeE value), position ), shandle = scrollbar } | SYS_CTLCOLORSCROLLBAR {w,displaycontext,scrollbar} => Scroll {w = w, orientation = Vertical, data = ScrollRedraw displaycontext, shandle = scrollbar } | _ => raise NotAScrollMessage (* system -> RefreshMessage *) exception NotARefreshMessage fun refreshMessageOf sysmsg = case sysmsg of SYS_PAINT {w} => Refresh {w=w,inclientarea=true} | SYS_NCPAINT {w,region} => Refresh {w=w,inclientarea=false} | _ => raise NotARefreshMessage (* system -> DestroyMessage *) exception NotADestroyMessage fun destroyMessageOf sysmsg = case sysmsg of SYS_NCDESTROY {w} => Destroy {w=w} | _ => raise NotADestroyMessage (* system -> OtherMessage *) exception NotAGeneralMessage fun otherMessageOf sysmsg = case (getcallbacktype sysmsg) of OtherCB => Msg sysmsg | _ => raise NotAGeneralMessage end end; polyml.5.2.1/mlsource/extra/Win/Original/MsgType.ML0000644000175000017500000000162410313043374021074 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure MsgType = MsgTypeFct ( structure Type = Type32 structure ConstType = ConstType ); polyml.5.2.1/mlsource/extra/Win/Original/MsgTypefct.ML0000644000175000017500000035051110313043375021574 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) signature importTypeSig = sig type MLHWND type MLHDC type MLHMENU type MLHANDLE type MLHRGN type MLHFONT type Point type Rectangle end; signature importConstTypeSig = sig type WindowStyleExtended type WindowStyle type SetWindowPositionStyle type SystemCommand type ControlNotification end; functor MsgTypeFct ( structure Type : importTypeSig structure ConstType : importConstTypeSig ) = struct open ConstType open Type datatype System = SYS_ACTIVATE of { w : MLHWND, active : int, minimize : bool } (* Indicates a change in activation state *) (*------------------------------------------------------------------------------ WM_ACTIVATE fActive = LOWORD(wParam); -o- activation flag -o- fMinimized = (BOOL) HIWORD(wParam); -o- minimized flag -o- MLHWND = (MLHWND) lParam; -o- window handle -o- The WM_ACTIVATE message is sent when a window is being activated or deactivated. This message is sent first to the window procedure of the top-level window being deactivated and then to the window procedure of the top-level window being activated. ------------------------------------------------------------------------------*) | SYS_ACTIVATEAPP of { w : MLHWND, active : bool, threadid: int } (* Notifies applications when a new task activates *) (*------------------------------------------------------------------------------ WM_ACTIVATEAPP fActive = (BOOL) wParam; -o- activation flag -o- dwThreadID = (int) lParam: -o- thread identifier -o- The WM_ACTIVATEAPP message is sent when a window beinting to a different application than the active window is about to be activated. The message is sent to the application whose window is being activated and to the application whose window is being deactivated. ------------------------------------------------------------------------------*) | SYS_ASKCBFORMATNAME of { w : MLHWND, formatname : string } (* Retrieves the name of the clipboard format *) (*------------------------------------------------------------------------------ WM_ASKCBFORMATNAME cchName = (int) wParam -o- size of buffer -o- lpszFormatName = (LPTSTR) lParam -o- buffer to receive format name -o- The WM_ASKCBFORMATNAME message is sent to the clipboard owner by a clipboard viewer window to request the name of a CF_OWNERDISPLAY clipboard format. ------------------------------------------------------------------------------*) | SYS_CANCELJOURNAL (* Notifies application when user cancels journaling *) (*------------------------------------------------------------------------------ WM_CANCELJOURNAL wParam = 0; -o- not used, must be zero -o- lParam = 0; -o- not used, must be zero -o- The WM_CANCELJOURNAL message is posted to an application when a user cancels the application's journaling activities. The message is posted with a NULL window handle. ------------------------------------------------------------------------------*) | SYS_CANCELMODE of { w : MLHWND } (* Notifies a Window to cancel internal modes *) (*------------------------------------------------------------------------------ WM_CANCELMODE The WM_CANCELMODE message is sent to the focus window when a dialog box or message box is displayed, enabling the focus window to cancel modes such as mouse capture. ------------------------------------------------------------------------------*) | SYS_CHANGECBCHAIN of { w : MLHWND, removed : MLHWND, next : MLHWND } (* Notifies clipboard viewer of removal from chain *) (*------------------------------------------------------------------------------ WM_CHANGECBCHAIN MLHWNDRemove = (MLHWND) wParam; -o- handle of window being removed -o- MLHWNDNext = (MLHWND) lParam; -o- handle of next window in chain -o- The WM_CHANGECBCHAIN message is sent to the first window in the clipboard viewer chain when a window is being removed from the chain. ------------------------------------------------------------------------------*) | SYS_CHAR of { w : MLHWND, ch : string, data : int } (* Indicates the user pressed a character key *) (*------------------------------------------------------------------------------ WM_CHAR chCharCode = (TCHAR) wParam; -o- character code -o- lKeyData = lParam; -o- key data -o- The WM_CHAR message is posted to the window with the keyboard focus when a WM_KEYDOWN message is translated by the TranslateMessage function. WM_CHAR contains the character code of the key that was pressed. ------------------------------------------------------------------------------*) | SYS_CHARTOITEM of { w : MLHWND, key : int, caretpos : int, listbox : MLHWND } (* Provides list-box keystrokes to owner Window *) (*------------------------------------------------------------------------------ WM_CHARTOITEM nKey = LOWORD(wParam); -o- key value -o- nCaretPos = HIWORD(wParam); -o- caret position -o- MLHWNDListBox = (MLHWND) lParam; -o- handle of list box -o- The WM_CHARTOITEM message is sent by a list box with the LBS_WANTKEYBOARDINPUT style to its owner in response to a WM_CHAR message. ------------------------------------------------------------------------------*) | SYS_CHILDACTIVATE of { w : MLHWND } (* Notifies a child Window of activation *) (*------------------------------------------------------------------------------ WM_CHILDACTIVATE The WM_CHILDACTIVATE message is sent to a multiple document interface (MDI) child window when the user clicks the window's title bar or when the window is activated, moved, or sized. ------------------------------------------------------------------------------*) | SYS_CHOOSEFONT_GETLOGFONT of { w : MLHWND, lfHeight : int, lfWidth : int, lfEscapement : int, lfOrientation : int, lfWeight : int, lfItalic : int, lfUnderline : int, lfStrikeOut : int, lfCharSet : int, lfOutPrecision : int, lfClipPrecision : int, lfQuality : int, lfPitchAndFamily : int, lfFaceName : string } (* Retrieves LOGFONT structure for Font dialog box *) (*------------------------------------------------------------------------------ WM_CHOOSEFONT_GETLOGFONT wParam = 0; -o- not used, must be zero -o- lParam = (LPLOGFONT) lplf; -o- address of struct. with font data -o- An application sends a WM_CHOOSEFONT_GETLOGFONT message to the Font dialog box created by the ChooseFont function to retrieve the current LOGFONT structure. ------------------------------------------------------------------------------*) | SYS_CLEAR of { w : MLHWND } (* Clears an edit control *) (*------------------------------------------------------------------------------ WM_CLEAR wParam = 0; -o- not used, must be zero -o- lParam = 0; -o- not used, must be zero -o- An application sends a WM_CLEAR message to an edit control or combo box to delete (clear) the current selection, if any, from the edit control. ------------------------------------------------------------------------------*) | SYS_CLOSE of { w : MLHWND } (* System Close menu command was chosen *) (*------------------------------------------------------------------------------ WM_CLOSE The WM_CLOSE message is sent as a signal that a window or an application should terminate. ------------------------------------------------------------------------------*) | SYS_COMMAND of { w : MLHWND, notifycode : ControlNotification, wid : int, control : MLHWND } (* Specifies a command message *) (*------------------------------------------------------------------------------ WM_COMMAND wNotifyCode = HIWORD(wParam); -o- notification code -o- wID = LOWORD(wParam); -o- item, control, or accelerator identifier -o- MLHWNDCtl = (MLHWND) lParam; -o- handle of control -o- The WM_COMMAND message is sent when the user selects a command item from a menu, when a control sends a notification message to its parent window, or when an accelerator keystroke is translated. ------------------------------------------------------------------------------*) | SYS_COMPACTING of { w : MLHWND, compactratio : int } (* Indicates a low memory condition *) (*------------------------------------------------------------------------------ WM_COMPACTING wCompactRatio = wParam; -o- compacting ratio -o- The WM_COMPACTING message is sent to all top-level windows when Windows detects more than 12.5 percent of system time over a 30- to 60-second interval is being spent compacting memory. This indicates that system memory is low. ------------------------------------------------------------------------------*) | SYS_COMPAREITEM of { w : MLHWND, controlid : int, CtlType : int, CtlID : int, hItem : MLHWND, itemID1 : int, itemData1 : int, itemID2 : int, itemData2 : int } (* Determines position of combo- or list-box item *) (*------------------------------------------------------------------------------ WM_COMPAREITEM idCtl = wParam; -o- control identifier -o- lpcis = (LPCOMPAREITEMSTRUCT) lParam; -o- structure with items -o- Windows sends the WM_COMPAREITEM message to determine the relative position of a new item in the sorted list of an owner-drawn combo box or list box. Whenever the application adds a new item, Windows sends this message to the owner of a combo box or list box created with the CBS_SORT or LBS_SORT style. ------------------------------------------------------------------------------*) | SYS_COPY of { w : MLHWND } (* Copies a selection to the clipboard *) (*------------------------------------------------------------------------------ WM_COPY wParam = 0; -o- not used, must be zero -o- lParam = 0; -o- not used, must be zero -o- An application sends the WM_COPY message to an edit control or combo box to copy the current selection to the Clipboard in CF_TEXT format. ------------------------------------------------------------------------------*) | SYS_COPYDATA of { w : MLHWND, sender : MLHWND, data : int } (* Passes data to another application *) (*------------------------------------------------------------------------------ WM_COPYDATA wParam = (WPARAM) (MLHWND) MLHWNDFrom; -o- handle of sending window -o- lParam = (LPARAM) (P COPYDATASTRUCT) pcds; -o- pointer to structure with data -o- The WM_COPYDATA message is sent when an application passes data to another application. ------------------------------------------------------------------------------*) | SYS_CREATE of { w : MLHWND, menu : MLHMENU, parent : MLHWND, cy : int, cx : int, y : int, x : int, style : WindowStyle, name : string, classname : string, extendedstyle : WindowStyleExtended } (* Indicates a Window is being created *) (*------------------------------------------------------------------------------ WM_CREATE lpcs = (LP CREATESTRUCT) lParam; -o- structure with creation data -o- The WM_CREATE message is sent when an application requests that a window be created by calling the CreateWindowEx or CreateWindow function. The window procedure of the new window receives this message after the window is created, but before the window becomes visible. The message is sent before the CreateWindowEx or CreateWindow function returns. ------------------------------------------------------------------------------*) | SYS_CTLCOLORBTN of { w : MLHWND, displaycontext : MLHDC, button : MLHWND } (* Button is about to be drawn *) (*------------------------------------------------------------------------------ WM_CTLCOLORBTN MLHDCButton = (MLHDC) wParam; -o- handle of button display context -o- MLHWNDButton = (MLHWND) lParam; -o- handle of button -o- The WM_CTLCOLORBTN message is sent to the parent window of a button when the button is about to be drawn. By responding to this message, the parent window can set a button's text and background colors. ------------------------------------------------------------------------------*) | SYS_CTLCOLORDLG of { w : MLHWND, displaycontext : MLHDC, dialogbox : MLHWND } (* Dialog box is about to be drawn *) (*------------------------------------------------------------------------------ WM_CTLCOLORDLG MLHDCDlg = (MLHDC) wParam; -o- handle of dialog box display context -o- MLHWNDDlg = (MLHWND) lParam; -o- handle of dialog box -o- The WM_CTLCOLORDLG message is sent to a dialog box before Windows draws the dialog box. By responding to this message, the dialog box can set its text and background colors by using the given display device context handle. ------------------------------------------------------------------------------*) | SYS_CTLCOLOREDIT of { w : MLHWND, displaycontext : MLHDC, editcontrol : MLHWND } (* Control is about to be drawn *) (*------------------------------------------------------------------------------ WM_CTLCOLOREDIT MLHDCEdit = (MLHDC) wParam; -o- handle of display context -o- MLHWNDEdit = (MLHWND) lParam; -o- handle of static control -o- The WM_CTLCOLOREDIT message is sent to the parent window of an edit control when the control is about to be drawn. By responding to this message, the parent window can use the given device context handle to set the text and background colors of the edit control. ------------------------------------------------------------------------------*) | SYS_CTLCOLORLISTBOX of { w : MLHWND, displaycontext : MLHDC, listbox : MLHWND } (* List box is about to be drawn *) (*------------------------------------------------------------------------------ WM_CTLCOLORLISTBOX MLHDCLB = (MLHDC) wParam; -o- handle of list box display context -o- MLHWNDLB = (MLHWND) lParam; -o- handle of list box -o- The WM_CTLCOLORLISTBOX message is sent to the parent window of a list box before Windows draws the list box. By responding to this message, the parent window can set the text and background colors of the list box by using the given display device context handle. ------------------------------------------------------------------------------*) | SYS_CTLCOLORMSGBOX of { w : MLHWND, displaycontext : MLHDC, messagebox : MLHWND } (* Message box is about to be drawn *) (*------------------------------------------------------------------------------ WM_CTLCOLORMSGBOX MLHDCMB = (MLHDC) wParam; -o- handle of message box display context -o- MLHWNDMB = (MLHWND) lParam; -o- handle of message box -o- The WM_CTLCOLORMSGBOX message is sent to the owner window of a message box before Windows draws the message box. By responding to this message, the owner window can set the text and background colors of the message box by using the given display device context handle. ------------------------------------------------------------------------------*) | SYS_CTLCOLORSCROLLBAR of { w : MLHWND, displaycontext : MLHDC, scrollbar : MLHWND } (* Indicates scroll bar is about to be drawn *) (*------------------------------------------------------------------------------ WM_CTLCOLORSCROLLBAR MLHDCSB = (MLHDC) wParam; -o- handle of scroll bar display context -o- MLHWNDSB = (MLHWND) lParam; -o- handle of scroll bar -o- The WM_CTLCOLORSCROLLBAR message is sent to the parent window of a scroll bar control when the control is about to be drawn. By responding to this message, the parent window can use the given display context handle to set the background color of the scroll bar control. ------------------------------------------------------------------------------*) | SYS_CTLCOLORSTATIC of { w : MLHWND, displaycontext : MLHDC, staticcontrol : MLHWND } (* Control is about to be drawn *) (*------------------------------------------------------------------------------ WM_CTLCOLORSTATIC MLHDCStatic = (MLHDC) wParam; -o- handle of display context -o- MLHWNDStatic = (MLHWND) lParam; -o- handle of static control -o- The WM_CTLCOLORSTATIC message is sent to the parent window of a static control when the control is about to be drawn. By responding to this message, the parent window can use the given device context (DC) handle to set the text and background colors of the static control. ------------------------------------------------------------------------------*) | SYS_CUT of { w : MLHWND } (* Deletes a selection and copies it to the clipboard *) (*------------------------------------------------------------------------------ WM_CUT wParam = 0; -o- not used, must be zero -o- lParam = 0; -o- not used, must be zero -o- An application sends a WM_CUT message to an edit control or combo box to delete (cut) the current selection, if any, in the edit control and copy the deleted text to the Clipboard in CF_TEXT format. ------------------------------------------------------------------------------*) | SYS_DDE_ACK (* Acknowledges a DDE message *) (*------------------------------------------------------------------------------ WM_DDE_ACK -o- Response to WM_DDE_INITIATE -o- wParam = (WPARAM) MLHWND; -o- handle of posting application -o- lParam = MAKELPARAM(aApp, aTopic) -o- application and topic atoms -o- -o- Response to WM_DDE_EXECUTE -o- wParam = (WPARAM) MLHWND; -o- handle of posting application -o- lParam = (LPARAM) lPackedVal; -o- packed status flags and data handle -o- -o- Response to all other messages -o- wParam = (WPARAM) MLHWND; -o- handle of posting application -o- lParam = (LPARAM) lPackedVal; -o- packed status flags and item -o- The WM_DDE_ACK message notifies a dynamic data exchange (DDE) application of the receipt and processing of a WM_DDE_INITIATE, WM_DDE_EXECUTE, WM_DDE_DATA, WM_DDE_ADVISE, WM_DDE_UNADVISE, or WM_DDE_POKE message, and in some cases, of a WM_DDE_REQUEST message. ------------------------------------------------------------------------------*) | SYS_DDE_ADVISE (* Requests a DDE data-change update *) (*------------------------------------------------------------------------------ WM_DDE_ADVISE wParam = (WPARAM) MLHWND; -o- handle of posting application -o- lParam = (LPARAM) lPackedVal; -o- packed DDEADVISE and item atom -o- A dynamic data exchange (DDE) client application posts the WM_DDE_ADVISE message to a DDE server application to request the server to supply an update for a data item whenever the item changes. ------------------------------------------------------------------------------*) | SYS_DDE_DATA (* Sends data to a DDE client *) (*------------------------------------------------------------------------------ WM_DDE_DATA wParam = (WPARAM) MLHWND; -o- handle of posting application -o- lParam = (LPARAM) lPackedVal; -o- packed DDEDATA and item atom -o- A dynamic data exchange (DDE) server application posts a WM_DDE_DATA message to a DDE client application to pass a data item to the client or to notify the client of the availability of a data item. ------------------------------------------------------------------------------*) | SYS_DDE_EXECUTE (* Sends a string to a DDE server *) (*------------------------------------------------------------------------------ WM_DDE_EXECUTE wParam = (WPARAM) MLHWND; -o- handle of posting application -o- lParam = (LPARAM) hCommands; -o- handle to global object -o- A dynamic data exchange (DDE) client application posts a WM_DDE_EXECUTE message to a DDE server application to send a string to the server to be processed as a series of commands. The server application is expected to post a WM_DDE_ACK message in response. ------------------------------------------------------------------------------*) | SYS_DDE_INITIATE (* Initiates a DDE conversation *) (*------------------------------------------------------------------------------ WM_DDE_INITIATE wParam = (WPARAM) MLHWND; -o- handle of posting appl. -o- lParam = MAKELPARAM(aApp, aTopic); -o- appl. and topic atoms -o- A dynamic data exchange (DDE) client application sends a WM_DDE_INITIATE message to initiate a conversation with a server application responding to the specified application and topic names. Upon receiving this message, all server applications with names that match the specified application and that support the specified topic are expected to acknowledge it. (For more information, see the WM_DDE_ACK message.) ------------------------------------------------------------------------------*) | SYS_DDE_POKE (* Send unsolicited data to a server *) (*------------------------------------------------------------------------------ WM_DDE_POKE wParam = (WPARAM) MLHWND; -o- handle of posting application -o- lParam = (LPARAM) lPackedVal; -o- packed DDEPOKE and item atom -o- A dynamic data exchange (DDE) client application posts a WM_DDE_POKE message to a DDE server application. A client uses this message to request the server to accept an unsolicited data item. The server is expected to reply with a WM_DDE_ACK message indicating whether it accepted the data item. ------------------------------------------------------------------------------*) | SYS_DDE_REQUEST (* Requests data from a DDE server *) (*------------------------------------------------------------------------------ WM_DDE_REQUEST wParam = (WPARAM) MLHWND; -o- handle of posting application -o- lParam = (LPARAM) lParam; -o- holds cfFormat and aItem -o- A dynamic data exchange (DDE) client application posts a WM_DDE_REQUEST message to a DDE server application to request the value of a data item. ------------------------------------------------------------------------------*) | SYS_DDE_TERMINATE (* Ends a DDE conversation *) (*------------------------------------------------------------------------------ WM_DDE_TERMINATE wParam = (WPARAM) MLHWND; -o- handle of posting window -o- lParam = 0; -o- not used, must be zero -o- A dynamic data exchange (DDE) application (client or server) posts a WM_DDE_TERMINATE message to terminate a conversation. ------------------------------------------------------------------------------*) | SYS_DDE_UNADVISE (* Stops a DDE data-update request *) (*------------------------------------------------------------------------------ WM_DDE_UNADVISE wParam = (WPARAM) MLHWND; -o- handle of posting application -o- lParam = (LPARAM) lParam; -o- format and item atom -o- A dynamic data exchange (DDE) client application posts a WM_DDE_UNADVISE message to inform a DDE server application that the specified item or a particular clipboard format for the item should no inter be updated. This terminates the warm or hot link for the specified item. ------------------------------------------------------------------------------*) | SYS_DEADCHAR of { w : MLHWND, charcode : string, keydata : int } (* Indicates the user pressed a dead key *) (*------------------------------------------------------------------------------ WM_DEADCHAR chCharCode = (TCHAR) wParam; -o- character code -o- lKeyData = lParam; -o- key data -o- The WM_DEADCHAR message is posted to the window with the keyboard focus when a WM_KEYUP message is translated by the TranslateMessage function. WM_DEADCHAR specifies a character code generated by a dead key. A dead key is a key that generates a character, such as the umlaut (double-dot), that is combined with another character to form a composite character. For example, the umlaut-O character (Ö) is generated by typing the dead key for the umlaut character, and then typing the O key. ------------------------------------------------------------------------------*) | SYS_DELETEITEM of { w : MLHWND, controlid : int, CtlType : int, CtlID : int, itemID : int, item : MLHWND, itemData : int } (* Indicates owner-draw item or control was altered *) (*------------------------------------------------------------------------------ WM_DELETEITEM idCtl = wParam; -o- control identifier -o- lpdis = (LP DELETEITEMSTRUCT) lParam; -o- structure with item info. -o- The WM_DELETEITEM message is sent to the owner of an owner-drawn list box or combo box when the list box or combo box is destroyed or when items are removed by the LB_DELETESTRING, LB_RESETCONTENT, CB_DELETESTRING, or CB_RESETCONTENT message. ------------------------------------------------------------------------------*) | SYS_DESTROY of { w : MLHWND } (* Indicates Window is about to be destroyed *) (*------------------------------------------------------------------------------ WM_DESTROY The WM_DESTROY message is sent when a window is being destroyed. It is sent to the window procedure of the window being destroyed after the window is removed from the screen. This message is sent first to the window being destroyed and then to the child windows (if any) as they are destroyed. During the processing of the message, it can be assumed that all child windows still exist. ------------------------------------------------------------------------------*) | SYS_DESTROYCLIPBOARD of { w : MLHWND } (* Notifies owner that the clipboard was emptied *) (*------------------------------------------------------------------------------ WM_DESTROYCLIPBOARD The WM_DESTROYCLIPBOARD message is sent to the clipboard owner when the clipboard is emptied by a call to the EmptyClipboard function. ------------------------------------------------------------------------------*) | SYS_DEVMODECHANGE of { w : MLHWND, devicename : string } (* Indicates the device-mode settings have changed *) (*------------------------------------------------------------------------------ WM_DEVMODECHANGE lpszDev = (LPCTSTR) lParam; -o- address of device name -o- The WM_DEVMODECHANGE message is sent to all top-level windows whenever the user changes device-mode settings. ------------------------------------------------------------------------------*) | SYS_DRAWCLIPBOARD of { w : MLHWND } (* Indicates the clipboard's contents have changed *) (*------------------------------------------------------------------------------ WM_DRAWCLIPBOARD The WM_DRAWCLIPBOARD message is sent to the first window in the clipboard viewer chain when the contents of the clipboard change. This enables a clipboard viewer window to display the new contents of the clipboard. ------------------------------------------------------------------------------*) | SYS_DRAWITEM of { w : MLHWND, controlid : int, CtlType : int, CtlID : int, itemID : int, itemAction : int, itemState : int, hItem : MLHWND , hDC : MLHDC, rcItem : Rectangle, itemData : int } (* Indicates owner-draw control/menu needs redrawing *) (*------------------------------------------------------------------------------ WM_DRAWITEM idCtl = (int) wParam; -o- control identifier -o- lpdis = (LP DRAWITEMSTRUCT) lParam; -o- item-drawing information -o- The WM_DRAWITEM message is sent to the owner window of an owner-drawn button, combo box, list box, or menu when a visual aspect of the button, combo box, list box, or menu has changed. ------------------------------------------------------------------------------*) | SYS_DROPFILES of { w : MLHWND, hDrop : MLHANDLE } (* Indicates that a file has been dropped *) (*------------------------------------------------------------------------------ WM_DROPFILES hDrop = (HANDLE) wParam; -o- handle of internal drop structure -o- The WM_DROPFILES message is sent when the user releases the left mouse button while the cursor is in the window of an application that has registered itself as a recipient of dropped files. ------------------------------------------------------------------------------*) | SYS_ENABLE of { w : MLHWND, enabled : bool } (* Indicates a Window's enable state is changing *) (*------------------------------------------------------------------------------ WM_ENABLE fEnabled = (BOOL) wParam; -o- enabled/disabled flag -o- The WM_ENABLE message is sent when an application changes the enabled state of a window. It is sent to the window whose enabled state is changing. This message is sent before the EnableWindow function returns, but after the enabled state (WS_DISABLE style bit) of the window has changed. ------------------------------------------------------------------------------*) | SYS_ENDSESSION of { w : MLHWND, endsession : bool } (* Indicates whether the Windows session is ending *) (*------------------------------------------------------------------------------ WM_ENDSESSION fEndSession = (BOOL) wParam; -o- end-session flag -o- The WM_ENDSESSION message is sent to an application after Windows processes the results of the WM_QUERYENDSESSION message. The WM_ENDSESSION message informs the application whether the Windows session is ending. ------------------------------------------------------------------------------*) | SYS_ENTERIDLE of { w : MLHWND, flag : int, Window : MLHWND } (* Indicates a modal dialog box or menu is idle *) (*------------------------------------------------------------------------------ WM_ENTERIDLE fuSource = wParam; -o- idle-source flag -o- MLHWND = (MLHWND) lParam; -o- handle of dialog box or owner window -o- The WM_ENTERIDLE message informs an application's main window procedure that a modal dialog box or menu is entering an idle state. A modal dialog box or menu enters an idle state when no messages are waiting in its queue after it has processed one or more previous messages. ------------------------------------------------------------------------------*) | SYS_ENTERMENULOOP of { w : MLHWND, istrack: bool } (* Indicates entry into menu modal loop *) (*------------------------------------------------------------------------------ WM_ENTERMENULOOP wParam = (BOOL) fIsTrackPopupMenu -o- flags a popup menu -o- lParam = 0 ; -o- not used; must be zero -o- The WM_ENTERMENULOOP message informs an application's main window procedure that a menu modal loop has been entered. ------------------------------------------------------------------------------*) | SYS_EXITMENULOOP of { w : MLHWND, istrack: bool } (* Indicates exit from menu modal loop *) (*------------------------------------------------------------------------------ WM_EXITLOOP wParam = (BOOL) fIsTrackPopupMenu -o- flags a popup menu -o- lParam = 0 ; -o- not used; must be zero -o- The WM_ENTERMENULOOP message informs an application's main window procedure that a menu modal loop has been exited. ------------------------------------------------------------------------------*) | SYS_ERASEBKGND of { w : MLHWND, devicecontext : MLHDC } (* Indicates a Window's background need erasing *) (*------------------------------------------------------------------------------ WM_ERASEBKGND MLHDC = (MLHDC) wParam; -o- device-context handle -o- An application sends the WM_ERASEBKGND message when the window background must be erased (for example, when a window is resized). The message is sent to prepare an invalidated portion of a window for painting. ------------------------------------------------------------------------------*) | SYS_FONTCHANGE of { w : MLHWND } (* Indicates a change in the font-resource pool *) (*------------------------------------------------------------------------------ WM_FONTCHANGE wParam = 0; -o- not used, must be zero -o- lParam = 0; -o- not used, must be zero -o- An application sends the WM_FONTCHANGE message to all top-level windows in the system after changing the pool of font resources. ------------------------------------------------------------------------------*) | SYS_GETDLGCODE of { w : MLHWND } (* Allows dialog procedure to process control input *) (*------------------------------------------------------------------------------ WM_GETDLGCODE The WM_GETDLGCODE message is sent to the dialog box procedure associated with a control. Normally, Windows handles all arrow-key and TAB-key input to the control. By responding to the WM_GETDLGCODE message, an application can take control of a particular type of input and process the input itself. ------------------------------------------------------------------------------*) | SYS_GETFONT of { w : MLHWND } (* Retrieves the font that a control is using *) (*------------------------------------------------------------------------------ WM_GETFONT wParam = 0; -o- not used, must be zero -o- lParam = 0; -o- not used, must be zero -o- An application sends a WM_GETFONT message to a control to retrieve the font with which the control is currently drawing its text. ------------------------------------------------------------------------------*) | SYS_GETHOTKEY of { w : MLHWND } (* Gets the virtual-key code of a Window's hot key *) (*------------------------------------------------------------------------------ WM_GETHOTKEY wParam = 0; -o- not used, must be zero -o- lParam = 0; -o- not used, must be zero -o- An application sends a WM_GETHOTKEY message to determine the hot key associated with a window. ------------------------------------------------------------------------------*) | SYS_GETMINMAXINFO of { w : MLHWND, MaxSizex : int, MaxSizey : int, MaxPositionx : int, MaxPositiony : int, MinTrackSizex : int, MinTrackSizey : int, MaxTrackSizex : int, MaxTrackSizey : int } (* Gets minimum and maximum sizing information *) (*------------------------------------------------------------------------------ WM_GETMINMAXINFO lpmmi = (LP MINMAXINFO) lParam; -o- address of structure -o- The WM_GETMINMAXINFO message is sent to a window when the size or position of the window is about to change. An application can use this message to override the window's default maximized size and position, or its default minimum or maximum tracking size. ------------------------------------------------------------------------------*) | SYS_GETTEXT of { w : MLHWND, text : string } (* Gets the text that corresponds to a Window *) (*------------------------------------------------------------------------------ WM_GETTEXT wParam = (WPARAM) cchTextMax; -o- number of characters to copy -o- lParam = (LPARAM) lpszText; -o- address of buffer for text -o- An application sends a WM_GETTEXT message to copy the text that corresponds to a window into a buffer provided by the caller. ------------------------------------------------------------------------------*) | SYS_GETTEXTLENGTH of { w : MLHWND } (* Gets length of text associated with a Window *) (*------------------------------------------------------------------------------ WM_GETTEXTLENGTH wParam = 0; -o- not used, must be zero -o- lParam = 0; -o- not used, must be zero -o- An application sends a WM_GETTEXTLENGTH message to determine the length, in characters, of the text associated with a window. The length does not include the terminating null character. ------------------------------------------------------------------------------*) | SYS_HOTKEY of { w : MLHWND, id : int } (* Hot key has been detected *) (*------------------------------------------------------------------------------ WM_HOTKEY idHotKey = (int) wParam; -o- identifier of hot-key -o- The WM_HOTKEY message is posted when the user presses a hot key registered by RegisterHotKey. The message is placed at the top of the message queue associated with the thread that registered the hot key. ------------------------------------------------------------------------------*) | SYS_HSCROLL of { w : MLHWND, value : int, position : int, scrollbar : MLHWND } (* Indicates a click in a horizontal scroll bar *) (*------------------------------------------------------------------------------ WM_HSCROLL nScrollCode = (int) LOWORD(wParam); -o- scroll bar value -o- nPos = (short int) HIWORD(wParam); -o- scroll box position -o- MLHWNDScrollBar = (MLHWND) lParam; -o- handle of scroll bar -o- The WM_HSCROLL message is sent to a window when a scroll event occurs in the window's standard horizontal scroll bar. This message is also sent to the owner of a horizontal scroll bar control when a scroll event occurs in the control. ------------------------------------------------------------------------------*) | SYS_HSCROLLCLIPBOARD of { w : MLHWND, viewer : MLHWND, code : int, position : int } (* Prompts owner to scroll clipboard contents *) (*------------------------------------------------------------------------------ WM_HSCROLLCLIPBOARD MLHWNDViewer = (MLHWND) wParam; -o- handle of clipboard viewer -o- nScrollCode = (int) LOWORD(lParam); -o- scroll bar code -o- nPos = (int) HIWORD(lParam); -o- scroll box position -o- The WM_HSCROLLCLIPBOARD message is sent to the clipboard owner by a clipboard viewer window when the clipboard contains data in the CF_OWNERDISPLAY format and an event occurs in the clipboard viewer's horizontal scroll bar. The owner should scroll the clipboard image and update the scroll bar values. ------------------------------------------------------------------------------*) | SYS_ICONERASEBKGND of { w : MLHWND, devicecontext : MLHDC } (* Notifies minimized Window to fill icon background *) (*------------------------------------------------------------------------------ WM_ICONERASEBKGND MLHDC = (MLHDC) wParam; -o- handle of device context -o- The WM_ICONERASEBKGND message is sent to a minimized window when the background of the icon must be filled before painting the icon. A window receives this message only if a class icon is defined for the window; otherwise, WM_ERASEBKGND is sent. ------------------------------------------------------------------------------*) | SYS_INITDIALOG of { w : MLHWND, dialog : MLHWND, initdata : int } (* Initializes a dialog box *) (*------------------------------------------------------------------------------ WM_INITDIALOG MLHWNDFocus = (MLHWND) wParam; -o- handle of control to receive focus -o- lInitParam = lParam; -o- initialization parameter -o- The WM_INITDIALOG message is sent to the dialog box procedure immediately before a dialog box is displayed. Dialog box procedures typically use this message to initialize controls and carry out any other initialization tasks that affect the appearance of the dialog box. ------------------------------------------------------------------------------*) | SYS_INITMENU of { w : MLHWND, menu : MLHMENU } (* Indicates a menu is about to become active *) (*------------------------------------------------------------------------------ WM_INITMENU hmenuInit = (HMENU) wParam; -o- handle of menu to initialize -o- The WM_INITMENU message is sent when a menu is about to become active. It occurs when the user clicks an item on the menu bar or presses a menu key. This allows the application to modify the menu before it is displayed. ------------------------------------------------------------------------------*) | SYS_INITMENUPOPUP of { w : MLHWND, menupopup : MLHMENU, itemposition : int, issystemmenu : bool } (* Indicates a pop-up menu is being created *) (*------------------------------------------------------------------------------ WM_INITMENUPOPUP hmenuPopup = (HMENU) wParam; -o- handle of pop-up menu -o- uPos = (int) LOWORD(lParam); -o- pop-up item position -o- fSystemMenu = (BOOL) HIWORD(lParam); -o- System menu flag -o- The WM_INITMENUPOPUP message is sent when a pop-up menu is about to become active. This allows an application to modify the pop-up menu before it is displayed, without changing the entire menu. ------------------------------------------------------------------------------*) | SYS_KEYDOWN of { w : MLHWND, virtualkey : int, data : int } (* Indicates a nonsystem key was pressed *) (*------------------------------------------------------------------------------ WM_KEYDOWN nVirtKey = (int) wParam; -o- virtual-key code -o- lKeyData = lParam; -o- key data -o- The WM_KEYDOWN message is posted to the window with the keyboard focus when a nonsystem key is pressed. A nonsystem key is a key that is pressed when the ALT key is not pressed. ------------------------------------------------------------------------------*) | SYS_KEYUP of { w : MLHWND, virtualkey : int, data : int } (* Indicates a nonsystem key was released *) (*------------------------------------------------------------------------------ WM_KEYUP nVirtKey = (int) wParam; -o- virtual-key code -o- lKeyData = lParam; -o- key data -o- The WM_KEYUP message is posted to the window with the keyboard focus when a nonsystem key is released. A nonsystem key is a key that is pressed when the ALT key is not pressed, or a keyboard key that is pressed when a window has the keyboard focus. ------------------------------------------------------------------------------*) | SYS_KILLFOCUS of { w : MLHWND, receivefocus : MLHWND } (* Indicates the Window is losing keyboard focus *) (*------------------------------------------------------------------------------ WM_KILLFOCUS MLHWNDGetFocus = (MLHWND) wParam; -o- handle of window receiving focus -o- The WM_KILLFOCUS message is sent to a window immediately before it loses the keyboard focus. ------------------------------------------------------------------------------*) | SYS_LBUTTONDBLCLK of { w : MLHWND, keyflags : int, xpos : int, ypos : int } (* Indicates double-click of left button *) (*------------------------------------------------------------------------------ WM_LBUTTONDBLCLK fwKeys = wParam; -o- key flags -o- xPos = LOWORD(lParam); -o- horizontal position of cursor -o- yPos = HIWORD(lParam); -o- vertical position of cursor -o- The WM_LBUTTONDBLCLK message is posted when the user double-clicks the left mouse button while the cursor is in the client area of a window. If the mouse is not captured, the message is posted to the window beneath the cursor. Otherwise, the message is posted to the window that has captured the mouse. ------------------------------------------------------------------------------*) | SYS_LBUTTONDOWN of {w : MLHWND, keyflags : int, xpos : int, ypos : int } (* Indicates when left mouse button is pressed *) (*------------------------------------------------------------------------------ WM_LBUTTONDOWN fwKeys = wParam; -o- key flags -o- xPos = LOWORD(lParam); -o- horizontal position of cursor -o- yPos = HIWORD(lParam); -o- vertical position of cursor -o- The WM_LBUTTONDOWN message is posted when the user presses the left mouse button while the cursor is in the client area of a window. If the mouse is not captured, the message is posted to the window beneath the cursor. Otherwise, the message is posted to the window that has captured the mouse. ------------------------------------------------------------------------------*) | SYS_LBUTTONUP of { w : MLHWND, keyflags : int, xpos : int, ypos : int } (* Indicates when left mouse button is released *) (*------------------------------------------------------------------------------ WM_LBUTTONUP fwKeys = wParam; -o- key flags -o- xPos = LOWORD(lParam); -o- horizontal position of cursor -o- yPos = HIWORD(lParam); -o- vertical position of cursor -o- The WM_LBUTTONUP message is posted when the user releases the left mouse button while the cursor is in the client area of a window. If the mouse is not captured, the message is posted to the window beneath the cursor. Otherwise, the message is posted to the window that has captured the mouse. ------------------------------------------------------------------------------*) | SYS_MBUTTONDBLCLK of { w : MLHWND, keyflags : int, xpos : int, ypos : int } (* Indicates double-click of middle mouse button *) (*------------------------------------------------------------------------------ WM_MBUTTONDBLCLK fwKeys = wParam; -o- key flags -o- xPos = LOWORD(lParam); -o- horizontal position of cursor -o- yPos = HIWORD(lParam); -o- vertical position of cursor -o- The WM_MBUTTONDBLCLK message is posted when the user double-clicks the middle mouse button while the cursor is in the client area of a window. If the mouse is not captured, the message is posted to the window beneath the cursor. Otherwise, the message is posted to the window that has captured the mouse. ------------------------------------------------------------------------------*) | SYS_MBUTTONDOWN of { w : MLHWND, keyflags : int, xpos : int, ypos : int } (* Indicates when middle mouse button is pressed *) (*------------------------------------------------------------------------------ WM_MBUTTONDOWN fwKeys = wParam; -o- key flags -o- xPos = LOWORD(lParam); -o- horizontal position of cursor -o- yPos = HIWORD(lParam); -o- vertical position of cursor -o- The WM_MBUTTONDOWN message is posted when the user presses the middle mouse button while the cursor is in the client area of a window. If the mouse is not captured, the message is posted to the window beneath the cursor. Otherwise, the message is posted to the window that has captured the mouse. ------------------------------------------------------------------------------*) | SYS_MBUTTONUP of { w : MLHWND, keyflags : int, xpos : int, ypos : int } (* Indicates when middle mouse button is released *) (*------------------------------------------------------------------------------ WM_MBUTTONUP fwKeys = wParam; -o- key flags -o- xPos = LOWORD(lParam); -o- horizontal position of cursor -o- yPos = HIWORD(lParam); -o- vertical position of cursor -o- The WM_MBUTTONUP message is posted when the user releases the middle mouse button while the cursor is in the client area of a window. If the mouse is not captured, the message is posted to the window beneath the cursor. Otherwise, the message is posted to the window that has captured the mouse. ------------------------------------------------------------------------------*) | SYS_MDICASCADE of { w : MLHWND, flag : int } (* Arranges MDI child Windows in cascade format *) (*------------------------------------------------------------------------------ WM_MDICASCADE wParam = (WPARAM) (int) fuCascade; -o- cascade flag -o- lParam = 0; -o- not used, must be zero -o- An application sends the WM_MDICASCADE message to a multiple document interface (MDI) client window to arrange all its child windows in a cascade format. ------------------------------------------------------------------------------*) | SYS_MDICREATE of { w : MLHWND, szClass : string, szTitle : string, x : int, y : int, cx : int, cy : int, style : int, cdata : int } (* Prompts MDI client to create a child Window *) (*------------------------------------------------------------------------------ WM_MDICREATE wParam = 0; -o- not used, must be zero -o- lParam = (LPARAM) (LP MDICREATESTRUCT) lpmdic; -o- creation data -o- An application sends the WM_MDICREATE message to a multiple document interface (MDI) client window to create an MDI child window. ------------------------------------------------------------------------------*) | SYS_MDIDESTROY of { w : MLHWND, childtoclose : MLHWND } (* Closes an MDI child Window *) (*------------------------------------------------------------------------------ WM_MDIDESTROY wParam = (WPARAM) (MLHWND) MLHWNDChild; -o- handle of child to close -o- lParam = 0; -o- not used, must be zero -o- An application sends the WM_MDIDESTROY message to a multiple document interface (MDI) client window to close an MDI child window. ------------------------------------------------------------------------------*) | SYS_MDIGETACTIVE of { w : MLHWND, stateflag : bool } (* Retrieves data about the active MDI child Window *) (*------------------------------------------------------------------------------ WM_MDIGETACTIVE wParam = 0; -o- not used, must be zero -o- lParam = (LPBOOL) lpfMaximized; -o- optional pointer to maximized state flag -o- An application sends the WM_MDIGETACTIVE message to a multiple document interface (MDI) client window to retrieve the handle of the active MDI child window. ------------------------------------------------------------------------------*) | SYS_MDIICONARRANGE of { w : MLHWND } (* Arranges minimized MDI child Windows *) (*------------------------------------------------------------------------------ WM_MDIICONARRANGE wParam = 0; -o- not used, must be zero -o- lParam = 0; -o- not used, must be zero -o- An application sends the WM_MDIICONARRANGE message to a multiple document interface (MDI) client window to arrange all minimized MDI child windows. It does not affect child windows that are not minimized. ------------------------------------------------------------------------------*) | SYS_MDIMAXIMIZE of { w : MLHWND, childtomaximise : MLHWND } (* Maximizes an MDI child Window *) (*------------------------------------------------------------------------------ M_MDIMAXIMIZE wParam = (WPARAM) (MLHWND) MLHWNDMax; -o- handle of child to maximize -o- lParam = 0; -o- not used, must be zero -o- An application sends the WM_MDIMAXIMIZE message to a multiple document interface (MDI) client window to maximize an MDI child window. Windows resizes the child window to make its client area fill the client window. Windows places the child window's System menu icon in the rightmost position of the frame window's menu bar, and places the child window's restore icon in the leftmost position. Windows also appends the title bar text of the child window to that of the frame window. ------------------------------------------------------------------------------*) | SYS_MDINEXT of { w : MLHWND, child : MLHWND, flagnext : bool } (* Activates the next MDI child Window *) (*------------------------------------------------------------------------------ WM_MDINEXT wParam = (WPARAM) (MLHWND) MLHWNDChild; -o- handle of child -o- lParam = (LPARAM) fNext; -o- next or previous child -o- An application sends the WM_MDINEXT message to a multiple document interface (MDI) client window to activate the next or previous child window. ------------------------------------------------------------------------------*) | SYS_MDIREFRESHMENU of { w : MLHWND } (* Refreshes an MDI frame Window's menu *) (*------------------------------------------------------------------------------ WM_MDIREFRESHMENU wParam = 0; -o- not used, must be zero -o- lParam = 0; -o- not used, must be zero -o- An application sends the WM_MDIREFRESHMENU message to a multiple document interface (MDI) client window to refresh the Window menu of the MDI frame window. ------------------------------------------------------------------------------*) | SYS_MDIRESTORE of { w : MLHWND, childtorestore : MLHWND } (* Prompts MDI client to restore a child Window *) (*------------------------------------------------------------------------------ WM_MDIRESTORE wParam = (WPARAM) (MLHWND) MLHWNDRes; -o- handle of child to restore -o- lParam = 0; -o- not used, must be zero -o- An application sends the WM_MDIRESTORE message to a multiple document interface (MDI) client window to restore an MDI child window from maximized or minimized size. ------------------------------------------------------------------------------*) | SYS_MDISETMENU of { w : MLHWND, framemenu : MLHMENU, Windowmenu : MLHMENU } (* Replaces an MDI frame Window's menu *) (*------------------------------------------------------------------------------ WM_MDISETMENU wParam = (WPARAM) (HMENU) hmenuFrame; -o- handle of frame menu -o- lParam = (LPARAM) (HMENU) hmenuWindow; -o- handle of Window menu -o- An application sends the WM_MDISETMENU message to a multiple document interface (MDI) client window to replace the entire menu of an MDI frame window, to replace the Window menu of the frame window, or both. ------------------------------------------------------------------------------*) | SYS_MDITILE of { w : MLHWND, tilingflag : int } (* Arranges MDI child Windows in tiled format *) (*------------------------------------------------------------------------------ WM_MDITILE wParam = (WPARAM) (int) fuTile; -o- tiling flag -o- lParam = 0; -o- not used, must be zero -o- An application sends the WM_MDITILE message to a multiple document interface (MDI) client window to arrange all of its MDI child windows in a tile format. ------------------------------------------------------------------------------*) | SYS_MEASUREITEM of { w : MLHWND, controlid : int, CtlType : int, CtlID : int, itemID : int, itemWidth : int, itemHeight : int, itemData : int } (* Requests dimensions of owner-draw control or item *) (*------------------------------------------------------------------------------ WM_MEASUREITEM idCtl = (int) wParam; -o- control identifier -o- lpmis = (LP MEASUREITEMSTRUCT) lParam; -o- item-size information -o- The WM_MEASUREITEM message is sent to the owner window of an owner-drawn button, combo box, list box, or menu item when the control or menu is created. ------------------------------------------------------------------------------*) | SYS_MENUCHAR of { w : MLHWND, ch : string, menuflag : int, menu : MLHMENU } (* Indicates an unknown menu mnemonic was pressed *) (*------------------------------------------------------------------------------ WM_MENUCHAR chUser = (char) LOWORD(wParam); -o- ASCII character -o- fuFlag = (int) HIWORD(wParam); -o- menu flag -o- hmenu = (HMENU) lParam; -o- handle of menu -o- The WM_MENUCHAR message is sent when a menu is active and the user presses a key that does not correspond to any mnemonic or accelerator key. This message is sent to the window that owns the menu. ------------------------------------------------------------------------------*) | SYS_MENUSELECT of { w : MLHWND, menuitem : int, menuflags : int, menu : MLHMENU } (* Indicates that the user selected a menu item *) (*------------------------------------------------------------------------------ WM_MENUSELECT uItem = (int) LOWORD(wParam); -o- menu item or pop-up menu index -o- fuFlags = (int) HIWORD(wParam); -o- menu flags -o- hmenu = (HMENU) lParam; -o- handle of menu clicked on -o- The WM_MENUSELECT message is sent to a menu's owner window when the user selects a menu item. ------------------------------------------------------------------------------*) | SYS_MOUSEACTIVATE of { w : MLHWND, parent : MLHWND, hit_test : int, message : int } (* Indicates a mouse click in an inactive Window *) (*------------------------------------------------------------------------------ WM_MOUSEACTIVATE MLHWNDTopLevel = (MLHWND) wParam; -o- handle of top-level parent -o- nHittest = (INT) LOWORD(lParam); -o- hit-test code -o- uMsg = (int) HIWORD(lParam); -o- mouse message -o- The WM_MOUSEACTIVATE message is sent when the cursor is in an inactive window and the user presses a mouse button. The parent window receives this message only if the child window passes it to the DefWindowProc function. ------------------------------------------------------------------------------*) | SYS_MOUSEMOVE of { w : MLHWND, keyflags : int, xpos : int, ypos : int } (* Indicates mouse-cursor movement *) (*------------------------------------------------------------------------------ WM_MOUSEMOVE fwKeys = wParam; -o- key flags -o- xPos = LOWORD(lParam); -o- horizontal position of cursor -o- yPos = HIWORD(lParam); -o- vertical position of cursor -o- The WM_MOUSEMOVE message is posted to a window when the cursor moves. If the mouse is not captured, the message is posted to the window that contains the cursor. Otherwise, the message is posted to the window that has captured the mouse. ------------------------------------------------------------------------------*) | SYS_MOVE of { w : MLHWND, xpos : int, ypos : int } (* Indicates a Window's position has changed *) (*------------------------------------------------------------------------------ WM_MOVE xPos = (int) LOWORD(lParam); -o- horizontal position -o- yPos = (int) HIWORD(lParam); -o- vertical position -o- The WM_MOVE message is sent after a window has been moved. ------------------------------------------------------------------------------*) | SYS_NCACTIVATE of { w : MLHWND, active : bool } (* Changes the active state of nonclient area *) (*------------------------------------------------------------------------------ WM_NCACTIVATE fActive = (BOOL) wParam; The WM_NCACTIVATE message is sent to a window when its nonclient area needs to be changed to indicate an active or inactive state. ------------------------------------------------------------------------------*) | SYS_NCCALCSIZE of { w : MLHWND, validarea : bool, newrect : Rectangle, oldrect : Rectangle, oldclientarea : Rectangle, InsertAfter : MLHWND, x : int, y : int, cx : int, cy : int, flags : int } (* Calculates the size of a Window's client area *) (*------------------------------------------------------------------------------ WM_NCCALCSIZE fCalcValidRects = (BOOL) wParam; -o- valid area flag -o- lpncsp = (LP NCCALCSIZE_PARAMS) lParam; -o- address of data -o- The WM_NCCALCSIZE message is sent when the size and position of a window's client area must be calculated. By processing this message, an application can control the contents of the window's client area when the size or position of the window changes. ------------------------------------------------------------------------------*) | SYS_NCCREATE of { w : MLHWND, menu : MLHMENU, parent : MLHWND, cy : int, cx : int, y : int, x : int, style : int, name : string, classname : string, exstyle : int } (* Indicates a Window's nonclient area being created *) (*------------------------------------------------------------------------------ WM_NCCREATE lpcs = (LP CREATESTRUCT) lParam; -o- initialization data -o- The WM_NCCREATE message is sent prior to the WM_CREATE message when a window is first created. ------------------------------------------------------------------------------*) | SYS_NCDESTROY of { w : MLHWND } (* Indicates Window's nonclient area being destroyed *) (*------------------------------------------------------------------------------ WM_NCDESTROY The WM_NCDESTROY message informs a window that its nonclient area is being destroyed. The DestroyWindow function sends the WM_NCDESTROY message to the window following the WM_DESTROY message. WM_DESTROY is used to free the allocated memory object associated with the window. ------------------------------------------------------------------------------*) | SYS_NCHITTEST of { w : MLHWND, xpos : int, ypos : int } (* Indicates mouse-cursor movement *) (*------------------------------------------------------------------------------ WM_NCHITTEST xPos = LOWORD(lParam); -o- horizontal position of cursor -o- yPos = HIWORD(lParam); -o- vertical position of cursor -o- The WM_NCHITTEST message is sent to a window when the cursor moves, or when a mouse button is pressed or released. If the mouse is not captured, the message is sent to the window beneath the cursor. Otherwise, the message is posted to the window that has captured the mouse. ------------------------------------------------------------------------------*) | SYS_NCLBUTTONDBLCLK of { w : MLHWND, hit_test : int, xpos : int, ypos : int } (* Indicates nonclient left button double-click *) (*------------------------------------------------------------------------------ WM_NCLBUTTONDBLCLK nHittest = (INT) wParam; -o- hit-test code -o- pts = MAKEPOINTS(lParam); -o- position of cursor -o- The WM_NCLBUTTONDBLCLK message is posted when the user double-clicks the left mouse button while the cursor is within the nonclient area of a window. This message is posted to the window that contains the cursor. If a window has captured the mouse, this message is not posted. ------------------------------------------------------------------------------*) | SYS_NCLBUTTONDOWN of { w : MLHWND, hit_test : int, xpos : int, ypos : int } (* Indicates left button pressed in nonclient area *) (*------------------------------------------------------------------------------ WM_NCLBUTTONDOWN nHittest = (INT) wParam; -o- hit-test code -o- pts = MAKEPOINTS(lParam); -o- position of cursor -o- The WM_NCLBUTTONDOWN message is posted when the user presses the left mouse button while the cursor is within the nonclient area of a window. This message is posted to the window that contains the cursor. If a window has captured the mouse, this message is not posted. ------------------------------------------------------------------------------*) | SYS_NCLBUTTONUP of { w : MLHWND, hit_test : int, xpos : int, ypos : int } (* Indicates left button released in nonclient area *) (*------------------------------------------------------------------------------ WM_NCLBUTTONUP nHittest = (INT) wParam; -o- hit-test code -o- pts = MAKEPOINTS(lParam); -o- mouse-cursor coordinates -o- The WM_NCLBUTTONUP message is posted when the user releases the left mouse button while the cursor is within the nonclient area of a window. This message is posted to the window that contains the cursor. If a window has captured the mouse, this message is not posted. ------------------------------------------------------------------------------*) | SYS_NCMBUTTONDBLCLK of { w : MLHWND, hit_test : int, xpos : int, ypos : int } (* Indicates nonclient middle button double-click *) (*------------------------------------------------------------------------------ WM_NCMBUTTONDBLCLK nHittest = (INT) wParam; -o- hit-test code -o- pts = MAKEPOINTS(lParam); -o- position of cursor -o- The WM_NCMBUTTONDBLCLK message is posted when the user double-clicks the middle mouse button while the cursor is within the nonclient area of a window. This message is posted to the window that contains the cursor. If a window has captured the mouse, this message is not posted. ------------------------------------------------------------------------------*) | SYS_NCMBUTTONDOWN of { w : MLHWND, hit_test : int, xpos : int, ypos : int } (* Indicates middle button pressed in nonclient area *) (*------------------------------------------------------------------------------ WM_NCMBUTTONDOWN nHittest = (INT) wParam; -o- hit-test code -o- pts = MAKEPOINTS(lParam); -o- position of cursor -o- The WM_NCMBUTTONDOWN message is posted when the user presses the middle mouse button while the cursor is within the nonclient area of a window. This message is posted to the window that contains the cursor. If a window has captured the mouse, this message is not posted. ------------------------------------------------------------------------------*) | SYS_NCMBUTTONUP of { w : MLHWND, hit_test : int, xpos : int, ypos : int } (* Indicates middle button released in nonclient area *) (*------------------------------------------------------------------------------ WM_NCMBUTTONUP nHittest = (INT) wParam; -o- hit-test code -o- pts = MAKEPOINTS(lParam); -o- position of cursor -o- The WM_NCMBUTTONUP message is posted when the user releases the middle mouse button while the cursor is within the nonclient area of a window. This message is posted to the window that contains the cursor. If a window has captured the mouse, this message is not posted. ------------------------------------------------------------------------------*) | SYS_NCMOUSEMOVE of { w : MLHWND, hit_test : int, xpos : int, ypos : int } (* Indicates mouse-cursor movement in nonclient area *) (*------------------------------------------------------------------------------ WM_NCMOUSEMOVE nHittest = (INT) wParam; -o- hit-test code -o- pts = MAKEPOINTS(lParam); -o- position of cursor -o- The WM_NCMOUSEMOVE message is posted to a window when the cursor is moved within the nonclient area of the window. This message is posted to the window that contains the cursor. If a window has captured the mouse, this message is not posted. ------------------------------------------------------------------------------*) | SYS_NCPAINT of { w : MLHWND, region : MLHRGN } (* Indicates a Window's frame needs painting *) (*------------------------------------------------------------------------------ WM_NCPAINT hrgn = (HRGN) wParam; -o- update-region handle -o- An application sends the WM_NCPAINT message to a window when its frame must be painted. ------------------------------------------------------------------------------*) | SYS_NCRBUTTONDBLCLK of { w : MLHWND, hit_test : int, xpos : int, ypos : int } (* Indicates nonclient right button double-click *) (*------------------------------------------------------------------------------ WM_NCRBUTTONDBLCLK nHittest = (INT) wParam; -o- hit-test code -o- pts = MAKEPOINTS(lParam); -o- position of cursor -o- The WM_NCRBUTTONDBLCLK message is posted when the user double-clicks the right mouse button while the cursor is within the nonclient area of a window. This message is posted to the window that contains the cursor. If a window has captured the mouse, this message is not posted. ------------------------------------------------------------------------------*) | SYS_NCRBUTTONDOWN of { w : MLHWND, hit_test : int, xpos : int, ypos : int } (* Indicates right button pressed in nonclient area *) (*------------------------------------------------------------------------------ WM_NCRBUTTONDOWN nHittest = (INT) wParam; -o- hit-test code -o- pts = MAKEPOINTS(lParam); -o- position of cursor -o- The WM_NCRBUTTONDOWN message is posted when the user presses the right mouse button while the cursor is within the nonclient area of a window. This message is posted to the window that contains the cursor. If a window has captured the mouse, this message is not posted. ------------------------------------------------------------------------------*) | SYS_NCRBUTTONUP of { w : MLHWND, hit_test : int, xpos : int, ypos : int } (* Indicates right button released in nonclient area *) (*------------------------------------------------------------------------------ WM_NCRBUTTONUP nHittest = (INT) wParam; -o- hit-test code -o- pts = MAKEPOINTS(lParam); -o- position of cursor -o- The WM_NCRBUTTONUP message is posted when the user releases the right mouse button while the cursor is within the nonclient area of a window. This message is posted to the window that contains the cursor. If a window has captured the mouse, this message is not posted. ------------------------------------------------------------------------------*) | SYS_NEXTDLGCTL of { w : MLHWND, control : int, handleflag : bool } (* Sets focus to different dialog box control *) (*------------------------------------------------------------------------------ WM_NEXTDLGCTL wCtlFocus = wParam; -o- identifies control for focus -o- fHandle = (BOOL) LOWORD(lParam); -o- wParam handle flag -o- The WM_NEXTDLGCTL message is sent to a dialog box procedure to set the keyboard focus to a different control in the dialog box. ------------------------------------------------------------------------------*) | SYS_PAINT of { w : MLHWND } (* Indicates a Window's client area need painting *) (*------------------------------------------------------------------------------ WM_PAINT An application sends the WM_PAINT message when Windows or another application makes a request to paint a portion of an application's window. The message is sent when the UpdateWindow or RedrawWindow function is called, or by the DispatchMessage function when the application obtains a WM_PAINT message by using the GetMessage or PeekMessage function. ------------------------------------------------------------------------------*) | SYS_PAINTCLIPBOARD of { w : MLHWND, clipboard : MLHWND } (* Prompts owner to display clipboard contents *) (*------------------------------------------------------------------------------ WM_PAINTCLIPBOARD MLHWNDViewer = (MLHWND) wParam; -o- handle of clipboard viewer -o- hglbPs = (HGLOBAL) lParam; -o- handle of PAINTSTRUCT object -o- The WM_PAINTCLIPBOARD message is sent to the clipboard owner by a clipboard viewer window when the clipboard contains data in the CF_OWNERDISPLAY format and the clipboard viewer's client area needs repainting. ------------------------------------------------------------------------------*) | SYS_PAINTICON of { w : MLHWND } (* Icon is about to be painted *) (*------------------------------------------------------------------------------ WM_PAINTICON The WM_PAINTICON message is sent to a minimized window when the icon is to be painted. A window receives this message only if a class icon is defined for the window. Otherwise, WM_PAINT is sent instead. ------------------------------------------------------------------------------*) | SYS_PALETTECHANGED of { w : MLHWND, changedpalette : MLHWND } (* Indicates the focus-Window realized its palette *) (*------------------------------------------------------------------------------ WM_PALETTECHANGED MLHWNDPalChg = (MLHWND) wParam; -o- handle of window that changed palette -o- The WM_PALETTECHANGED message is sent to all top-level and overlapped windows after the window with the keyboard focus has realized its logical palette, thereby changing the system palette. This message enables a window without the keyboard focus that uses a color palette to realize its logical palette and update its client area. ------------------------------------------------------------------------------*) | SYS_PALETTEISCHANGING of { w : MLHWND, changingpalette : MLHWND } (* Informs Windows that palette is changing *) (*------------------------------------------------------------------------------ WM_PALETTEISCHANGING MLHWNDRealize = (MLHWND) wParam; -o- window to realize palette -o- The WM_PALETTEISCHANGING message informs applications that an application is going to realize its logical palette. ------------------------------------------------------------------------------*) | SYS_PARENTNOTIFY of { w : MLHWND, eventflag : int, idchild : int, value : int } (* Notifies parent of child-Window activity *) (*------------------------------------------------------------------------------ WM_PARENTNOTIFY fwEvent = LOWORD(wParam); -o- event flags -o- idChild = HIWORD(wParam); -o- identifier of child window -o- lValue = lParam; -o- child handle, or cursor coordinates -o- The WM_PARENTNOTIFY message is sent to the parent of a child window when the child window is created or destroyed or when the user clicks a mouse button while the cursor is over the child window. When the child window is being created, the system sends WM_PARENTNOTIFY just before the CreateWindow or CreateWindowEx function that creates the window returns. When the child window is being destroyed, Windows sends the message before any processing to destroy the window takes place. ------------------------------------------------------------------------------*) | SYS_PASTE of { w : MLHWND } (* Inserts clipboard data into an edit control *) (*------------------------------------------------------------------------------ WM_PASTE wParam = 0; -o- not used, must be zero -o- lParam = 0; -o- not used, must be zero -o- An application sends a WM_PASTE message to an edit control or combo box to copy the current contents of the Clipboard to the edit control at the current caret position. Data is inserted only if the Clipboard contains data in CF_TEXT format. ------------------------------------------------------------------------------*) | SYS_POWER of { w : MLHWND, powerevent : int } (* Indicates the system is entering suspended mode *) (*------------------------------------------------------------------------------ WM_POWER fwPowerEvt = wParam; -o- power-event notification message -o- The WM_POWER message is sent when the system, typically a battery-powered personal computer, is about to enter the suspended mode. ------------------------------------------------------------------------------*) | SYS_QUERYDRAGICON of { w : MLHWND } (* Requests a cursor handle for a minimized Window *) (*------------------------------------------------------------------------------ WM_QUERYDRAGICON The WM_QUERYDRAGICON message is sent to a minimized (iconic) window which is about to be dragged by the user but which does not have an icon defined for its class. An application can return the handle of an icon or cursor. The system displays this cursor or icon while the user drags the icon. ------------------------------------------------------------------------------*) | SYS_QUERYENDSESSION of { w : MLHWND, source : int } (* Requests that the Windows session be ended *) (*------------------------------------------------------------------------------ WM_QUERYENDSESSION nSource = (int) wParam; -o- source of end-session request -o- The WM_QUERYENDSESSION message is sent when the user chooses to end the Windows session or when an application calls the ExitWindows function. If any application returns zero, the Windows session is not ended. Windows stops sending WM_QUERYENDSESSION messages as soon as one application returns zero. After processing this message, Windows sends the WM_ENDSESSION message with the wParam parameter set to the results of the WM_QUERYENDSESSION message. ------------------------------------------------------------------------------*) | SYS_QUERYNEWPALETTE of { w : MLHWND } (* Allows a Window to realize its logical palette *) (*------------------------------------------------------------------------------ WM_QUERYNEWPALETTE The WM_QUERYNEWPALETTE message informs a window that it is about to receive the keyboard focus, giving the window the opportunity to realize its logical palette when it receives the focus. ------------------------------------------------------------------------------*) | SYS_QUERYOPEN of { w : MLHWND } (* Requests that a minimized Window be restored *) (*------------------------------------------------------------------------------ WM_QUERYOPEN The WM_QUERYOPEN message is sent to an icon when the user requests that the window be restored to its previous size and position. ------------------------------------------------------------------------------*) | SYS_QUEUESYNC of { w : MLHWND } (* Delimits CBT messages *) (*------------------------------------------------------------------------------ WM_QUEUESYNC wParam = 0; -o- not used, must be zero -o- lParam = 0; -o- not used, must be zero -o- The WM_QUEUESYNC message is sent by a computer-based training (CBT) application to separate user-input messages from other messages sent through the WH_JOURNALPLAYBACK hook procedure. ------------------------------------------------------------------------------*) | SYS_QUIT of { w : MLHWND, exitcode : int } (* Requests that an application be terminated *) (*------------------------------------------------------------------------------ WM_QUIT nExitCode = (int) wParam; -o- exit code -o- The WM_QUIT message indicates a request to terminate an application and is generated when the application calls the PostQuitMessage function. It causes the GetMessage function to return zero. ------------------------------------------------------------------------------*) | SYS_RBUTTONDBLCLK of { w : MLHWND, keyflags : int, xpos : int, ypos : int } (* Indicates double-click of right mouse button *) (*------------------------------------------------------------------------------ WM_RBUTTONDBLCLK fwKeys = wParam; -o- key flags -o- xPos = LOWORD(lParam); -o- horizontal position of cursor -o- yPos = HIWORD(lParam); -o- vertical position of cursor -o- The WM_RBUTTONDBLCLK message is posted when the user double-clicks the right mouse button while the cursor is in the client area of a window. If the mouse is not captured, the message is posted to the window beneath the cursor. Otherwise, the message is posted to the window that has captured the mouse. ------------------------------------------------------------------------------*) | SYS_RBUTTONDOWN of { w : MLHWND, keyflags : int, xpos : int, ypos : int } (* Indicates when right mouse button is pressed *) (*------------------------------------------------------------------------------ WM_RBUTTONDOWN fwKeys = wParam; -o- key flags -o- xPos = LOWORD(lParam); -o- horizontal position of cursor -o- yPos = HIWORD(lParam); -o- vertical position of cursor -o- The WM_RBUTTONDOWN message is posted when the user presses the right mouse button while the cursor is in the client area of a window. If the mouse is not captured, the message is posted to the window beneath the cursor. Otherwise, the message is posted to the window that has captured the mouse. ------------------------------------------------------------------------------*) | SYS_RBUTTONUP of { w : MLHWND, keyflags : int, xpos : int, ypos : int } (* Indicates when right mouse button is released *) (*------------------------------------------------------------------------------ WM_RBUTTONUP fwKeys = wParam; -o- key flags -o- xPos = LOWORD(lParam); -o- horizontal position of cursor -o- yPos = HIWORD(lParam); -o- vertical position of cursor -o- The WM_RBUTTONUP message is posted when the user releases the right mouse button while the cursor is in the client area of a window. If the mouse is not captured, the message is posted to the window beneath the cursor. Otherwise, the message is posted to the window that has captured the mouse. ------------------------------------------------------------------------------*) | SYS_RENDERALLFORMATS of { w : MLHWND } (* Notifies owner to render all clipboard formats *) (*------------------------------------------------------------------------------ WM_RENDERALLFORMATS The WM_RENDERALLFORMATS message is sent to the clipboard owner before it is destroyed, if the clipboard owner has delayed rendering one or more clipboard formats. For the contents of the clipboard to remain available to other applications, the clipboard owner must render data in all the formats it is capable of generating, and place the data on the clipboard by calling the SetClipboardData function. ------------------------------------------------------------------------------*) | SYS_RENDERFORMAT of { w : MLHWND, format : int } (* Notifies owner to render clipboard data *) (*------------------------------------------------------------------------------ WM_RENDERFORMAT uFormat = (int) wParam; -o- clipboard format -o- The WM_RENDERFORMAT message is sent to the clipboard owner if it has delayed rendering a specific clipboard format, and if an application has requested data in that format. The clipboard owner must render data in the specified format and place it on the clipboard by calling the SetClipboardData function. ------------------------------------------------------------------------------*) | SYS_SETCURSOR of { w : MLHWND, cursorwindow : MLHWND, hittest : int, mousemessage : int } (* Prompts a Window to set the cursor shape *) (*------------------------------------------------------------------------------ WM_SETCURSOR MLHWND = (MLHWND) wParam; -o- handle of window with cursor -o- nHittest = LOWORD(lParam); -o- hit-test code -o- wMouseMsg = HIWORD(lParam); -o- mouse-message identifier -o- The WM_SETCURSOR message is sent to a window if the mouse causes the cursor to move within a window and mouse input is not captured. ------------------------------------------------------------------------------*) | SYS_SETFOCUS of { w : MLHWND, losing : MLHWND } (* Indicates the Window gained the keyboard focus *) (*------------------------------------------------------------------------------ WM_SETFOCUS MLHWNDLoseFocus = (MLHWND) wParam; -o- handle of window losing focus -o- The WM_SETFOCUS message is sent to a window after it has gained the keyboard focus. ------------------------------------------------------------------------------*) | SYS_SETFONT of { w : MLHWND, font : MLHFONT, redrawflag : int } (* Sets the font for a control *) (*------------------------------------------------------------------------------ WM_SETFONT wParam = (WPARAM) hfont; -o- handle of font -o- lParam = MAKELPARAM(fRedraw, 0); -o- redraw flag -o- An application sends a WM_SETFONT message to specify the font that a control is to use when drawing text. ------------------------------------------------------------------------------*) | SYS_SETHOTKEY of { w : MLHWND, virtualkey : int } (* Associates a hot key with a Window *) (*------------------------------------------------------------------------------ WM_SETHOTKEY wParam = (WPARAM) vkey; -o- virtual-key code of hot key -o- lParam = 0; -o- not used, must be zero -o- An application sends a WM_SETHOTKEY message to a window to associate a hot key with the window. When the user presses the hot key, the system activates the window. ------------------------------------------------------------------------------*) | SYS_SETREDRAW of { w : MLHWND, redrawflag : int } (* Allows or prevents redrawing in a Window *) (*------------------------------------------------------------------------------ WM_SETREDRAW wParam = (WPARAM) fRedraw; -o- state of redraw flag -o- lParam = 0; -o- not used, must be zero -o- An application sends the WM_SETREDRAW message to a window to allow changes in that window to be redrawn or to prevent changes in that window from being redrawn. ------------------------------------------------------------------------------*) | SYS_SETTEXT of { w : MLHWND, Windowtext : string } (* Sets the text of a Window *) (*------------------------------------------------------------------------------ WM_SETTEXT wParam = 0; -o- not used, must be zero -o- lParam = (LPARAM)(LPCTSTR)lpsz; -o- address of window-text string -o- An application sends a WM_SETTEXT message to set the text of a window. ------------------------------------------------------------------------------*) | SYS_SHOWWINDOW of { w : MLHWND, showflag : bool, statusflag : int } (* Indicates a Window is about to be hidden or shown *) (*------------------------------------------------------------------------------ WM_SHOWWINDOW fShow = (BOOL) wParam; -o- show/hide flag -o- fnStatus = (int) lParam; -o- status flag -o- The WM_SHOWWINDOW message is sent to a window when the window is about to be hidden or shown. ------------------------------------------------------------------------------*) | SYS_SIZE of { w : MLHWND, resizeflag : int, width : int, height : int } (* Indicates a change in a Window's size *) (*------------------------------------------------------------------------------ WM_SIZE fwSizeType = wParam; -o- resizing flag -o- nWidth = LOWORD(lParam); -o- width of client area -o- nHeight = HIWORD(lParam); -o- height of client area -o- The WM_SIZE message is sent to a window after its size has changed. ------------------------------------------------------------------------------*) | SYS_SIZECLIPBOARD of { w : MLHWND, viewer : MLHWND} (* Indicates a change in the chipboard's size *) (*------------------------------------------------------------------------------ WM_SIZECLIPBOARD MLHWNDViewer = (MLHWND) wParam; -o- handle of clipboard viewer -o- hglbRc = (HGLOBAL) lParam; -o- handle of RECT object -o- The WM_SIZECLIPBOARD message is sent to the clipboard owner by a clipboard viewer window when the clipboard contains data in the CF_OWNERDISPLAY format and the clipboard viewer's client area has changed size. ------------------------------------------------------------------------------*) | SYS_SPOOLERSTATUS of { w : MLHWND, jobstatus : int, jobsleft : int } (* Indicates a print job was added or removed *) (*------------------------------------------------------------------------------ WM_SPOOLERSTATUS fwJobStatus = wParam; -o- job-status flag -o- cJobsLeft = LOWORD(lParam); -o- number of jobs remaining -o- The WM_SPOOLERSTATUS message is sent from Windows Print Manager whenever a job is added to or removed from the Print Manager queue. ------------------------------------------------------------------------------*) | SYS_SYSCHAR of { w : MLHWND, ch : string, keydata : int } (* Indicates a System-menu key was pressed *) (*------------------------------------------------------------------------------ WM_SYSCHAR chCharCode = (TCHAR) wParam; -o- character code -o- lKeyData = lParam; -o- key data -o- The WM_SYSCHAR message is posted to the window with the keyboard focus when a WM_SYSKEYDOWN message is translated by the TranslateMessage function. It specifies the character code of a system character key--that is, a character key that is pressed while the ALT key is down. ------------------------------------------------------------------------------*) | SYS_SYSCOLORCHANGE of { w : MLHWND } (* Indicates a system color value was changed *) (*------------------------------------------------------------------------------ WM_SYSCOLORCHANGE The WM_SYSCOLORCHANGE message is sent to all top-level windows when a change is made to a system color setting. ------------------------------------------------------------------------------*) | SYS_SYSCOMMAND of { w : MLHWND, commandvalue : SystemCommand, p : Point } (* Indicates a system command was requested *) (*------------------------------------------------------------------------------ WM_SYSCOMMAND uCmdType = wParam; -o- command value -o- xPos = LOWORD(lParam); -o- horizontal position of cursor -o- yPos = HIWORD(lParam); -o- vertical position of cursor -o- The WM_SYSCOMMAND message is sent when the user chooses a command from the System menu (also known as Control menu) or when the user chooses the Maximize button or Minimize button. ------------------------------------------------------------------------------*) | SYS_SYSDEADCHAR of { w : MLHWND, ch : string, keydata : int } (* Indicates a system dead key was pressed *) (*------------------------------------------------------------------------------ WM_SYSDEADCHAR chCharCode = (TCHAR) wParam; -o- character code -o- lKeyData = lParam; -o- key data -o- The WM_SYSDEADCHAR message is sent to the window with the keyboard focus when a WM_SYSKEYDOWN message is translated by the TranslateMessage function. WM_SYSDEADCHAR specifies the character code of a system dead key--that is, a dead key that is pressed while holding down the ALT key. ------------------------------------------------------------------------------*) | SYS_SYSKEYDOWN of { w : MLHWND, virtualkey : int, keydata : int } | SYS_SYSKEYUP of { w : MLHWND, virtualkey : int, keydata : int } (* Indicates that ALT plus another key was released *) (*------------------------------------------------------------------------------ WM_SYSKEYDOWN UP nVirtKey = (int) wParam; -o- virtual-key code -o- lKeyData = lParam; -o- key data -o- The WM_SYSKEYUP message is posted to the window with the keyboard focus when the user releases a key that was pressed while the ALT key was held down. It also occurs when no window currently has the keyboard focus; in this case, the WM_SYSKEYUP message is sent to the active window. The window that receives the message can distinguish between these two contexts by checking the context code in the lKeyData parameter. ------------------------------------------------------------------------------*) | SYS_TIMECHANGE of { w : MLHWND } (* Indicates the system time has been set *) (*------------------------------------------------------------------------------ WM_TIMECHANGE wParam = 0; -o- not used, must be zero -o- lParam = 0; -o- not used, must be zero -o- An application sends the WM_TIMECHANGE message to all top-level windows after changing the system time. ------------------------------------------------------------------------------*) | SYS_TIMER of { w : MLHWND, timerid : int } (* Indicates timeout interval for a timer has elapsed *) (*------------------------------------------------------------------------------ WM_TIMER wTimerID = wParam; -o- timer identifier -o- tmprc = (TIMERPROC ) lParam; -o- address of timer callback -o- The WM_TIMER message is posted to the installing thread's message queue or sent to the appropriate TimerProc callback function after each interval specified in the SetTimer function used to install a timer. ------------------------------------------------------------------------------*) | SYS_UNDO of { w : MLHWND } (* Undoes the last operation in an edit control *) (*------------------------------------------------------------------------------ WM_UNDO An application sends a WM_UNDO message to an edit control to undo the last operation. When this message is sent to an edit control, the previously deleted text is restored or the previously added text is deleted. ------------------------------------------------------------------------------*) | SYS_USER of { w : MLHWND } (* Indicates a range of message values (*------------------------------------------------------------------------------ ------------------------------------------------------------------------------*) 0 through WM_USER - 1 Messages reserved for use by Windows WM_USER through 0x7FFF Integer messages for use by private Window classes 0x8000 through 0xBFFF Messages reserved for future use by Windows 0xC000 through 0xFFFF String messages for use by applications Greater than 0xFFFF Reserved by Windows for future use *) | SYS_VKEYTOITEM of { w : MLHWND, virtualkey : int, caretpos : int, listbox : MLHWND } (* Provides list-box keystrokes to owner Window *) (*------------------------------------------------------------------------------ WM_VKEYTOITEM vkey = LOWORD(wParam); -o- virtual-key code -o- nCaretPos = HIWORD(wParam); -o- caret position -o- MLHWNDLB = lParam; -o- handle of list box -o- The WM_VKEYTOITEM message is sent by a list box with the LBS_WANTKEYBOARDINPUT style to its owner in response to a WM_KEYDOWN message. ------------------------------------------------------------------------------*) | SYS_VSCROLL of { w : MLHWND, value : int, position : int, scrollbar : MLHWND } (* Indicates a click in a vertical scroll bar *) (*------------------------------------------------------------------------------ WM_VSCROLL nScrollCode = (int) LOWORD(wParam); -o- scroll bar value -o- nPos = (short int) HIWORD(wParam); -o- scroll box position -o- MLHWNDScrollBar = (MLHWND) lParam; -o- handle of scroll bar -o- The WM_VSCROLL message is sent to a window when a scroll event occurs in the window's standard vertical scroll bar. This message is also sent to the owner of a vertical scroll bar control when a scroll event occurs in the control. ------------------------------------------------------------------------------*) | SYS_VSCROLLCLIPBOARD of { w : MLHWND, viewer : MLHWND, code : int, position : int } (* Prompts owner to scroll clipboard contents *) (*------------------------------------------------------------------------------ WM_VSCROLLCLIPBOARD MLHWNDViewer = (MLHWND) wParam; -o- handle of clipboard viewer -o- nScrollCode = (int) LOWORD(lParam); -o- scroll bar code -o- nPos = (int) HIWORD(lParam); -o- scroll box position -o- The WM_VSCROLLCLIPBOARD message is sent to the clipboard owner by a clipboard viewer window when the clipboard contains data in the CF_OWNERDISPLAY format and an event occurs in the clipboard viewer's vertical scroll bar. The owner should scroll the clipboard image and update the scroll bar values. ------------------------------------------------------------------------------*) | SYS_WINDOWPOSCHANGED of { w : MLHWND, front : MLHWND, xpos : int, ypos : int, width : int, height : int, flags : SetWindowPositionStyle } (* Notifies Window of size or position change *) (*------------------------------------------------------------------------------ WM_WINDOWPOSCHANGED lpwp = (LP WINDOWPOS) lParam; -o- points to size and position data -o- The WM_WINDOWPOSCHANGED message is sent to a window whose size, position, or place in the Z order has changed as a result of a call to SetWindowPos or another window-management function. ------------------------------------------------------------------------------*) | SYS_WINDOWPOSCHANGING of { w : MLHWND, front : MLHWND, xpos : int, ypos : int, width : int, height : int, flags : SetWindowPositionStyle } (* Notifies Window of new size or position *) (*------------------------------------------------------------------------------ WM_WINDOWPOSCHANGING lpwp = (LP WINDOWPOS) lParam; -o- points to size and position data -o- The WM_WINDOWPOSCHANGING message is sent to a window whose size, position, or place in the Z order is about to change as a result of a call to SetWindowPos or another window-management function. ------------------------------------------------------------------------------*) | SYS_WININICHANGE of { w : MLHWND, section_name : string } (* Notifies applications that WIN.INI has changed *) (*------------------------------------------------------------------------------ WM_WININICHANGE wParam = 0; -o- not used, must be zero -o- lParam = (LPARAM) (LPCTSTR) pszSection; -o- section-name string -o- An application sends the WM_WININICHANGE message to all top-level windows after making a change to the WIN.INI file. The SystemParametersInfo function sends the WM_WININICHANGE message after an application uses the function to change a setting in WIN.INI. ------------------------------------------------------------------------------*) | SYS_UNKNOWN of { w : MLHWND } (*------------------------------------------------------------------------------ UNKNOWN MESSAGE ------------------------------------------------------------------------------*) | SYS_NULL; (*------------------------------------------------------------------------------ NO MESSAGE ------------------------------------------------------------------------------*) end; polyml.5.2.1/mlsource/extra/Win/Original/MsgVal.ML0000644000175000017500000000147110313043375020676 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure MsgVal = MsgValFct (); polyml.5.2.1/mlsource/extra/Win/Original/MsgValFct.ML0000644000175000017500000003537110313043375021341 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (**************************************************************** The message value datatype ****************************************************************) functor MsgValFct () = struct datatype MessageValue = MSG_NULL (* 0x0000 *) | MSG_CREATE (* 0x0001 *) | MSG_DESTROY (* 0x0002 *) | MSG_MOVE (* 0x0003 *) | MSG_SIZE (* 0x0005 *) | MSG_ACTIVATE (* 0x0006 *) | MSG_SETFOCUS (* 0x0007 *) | MSG_KILLFOCUS (* 0x0008 *) | MSG_ENABLE (* 0x000A *) | MSG_SETREDRAW (* 0x000B *) | MSG_SETTEXT (* 0x000C *) | MSG_GETTEXT (* 0x000D *) | MSG_GETTEXTLENGTH (* 0x000E *) | MSG_PAINT (* 0x000F *) | MSG_CLOSE (* 0x0010 *) | MSG_QUERYENDSESSION (* 0x0011 *) | MSG_QUIT (* 0x0012 *) | MSG_QUERYOPEN (* 0x0013 *) | MSG_ERASEBKGND (* 0x0014 *) | MSG_SYSCOLORCHANGE (* 0x0015 *) | MSG_ENDSESSION (* 0x0016 *) | MSG_SHOWWINDOW (* 0x0018 *) | MSG_WININICHANGE (* 0x001A *) | MSG_DEVMODECHANGE (* 0x001B *) | MSG_ACTIVATEAPP (* 0x001C *) | MSG_FONTCHANGE (* 0x001D *) | MSG_TIMECHANGE (* 0x001E *) | MSG_CANCELMODE (* 0x001F *) | MSG_SETCURSOR (* 0x0020 *) | MSG_MOUSEACTIVATE (* 0x0021 *) | MSG_CHILDACTIVATE (* 0x0022 *) | MSG_QUEUESYNC (* 0x0023 *) | MSG_GETMINMAXINFO (* 0x0024 *) | MSG_PAINTICON (* 0x0026 *) | MSG_ICONERASEBKGND (* 0x0027 *) | MSG_NEXTDLGCTL (* 0x0028 *) | MSG_SPOOLERSTATUS (* 0x002A *) | MSG_DRAWITEM (* 0x002B *) | MSG_MEASUREITEM (* 0x002C *) | MSG_DELETEITEM (* 0x002D *) | MSG_VKEYTOITEM (* 0x002E *) | MSG_CHARTOITEM (* 0x002F *) | MSG_SETFONT (* 0x0030 *) | MSG_GETFONT (* 0x0031 *) | MSG_SETHOTKEY (* 0x0032 *) | MSG_GETHOTKEY (* 0x0033 *) | MSG_QUERYDRAGICON (* 0x0037 *) | MSG_COMPAREITEM (* 0x0039 *) | MSG_COMPACTING (* 0x0041 *) | MSG_OTHERWINDOWCREATED (* 0x0042 *) (* no longer suported *) | MSG_OTHERWINDOWDESTROYED (* 0x0043 *) (* no longer suported *) | MSG_COMMNOTIFY (* 0x0044 *) (* no longer suported *) | MSG_WINDOWPOSCHANGING (* 0x0046 *) | MSG_WINDOWPOSCHANGED (* 0x0047 *) | MSG_POWER (* 0x0048 *) | MSG_COPYDATA (* 0x004A *) | MSG_CANCELJOURNAL (* 0x004B *) | MSG_NCCREATE (* 0x0081 *) | MSG_NCDESTROY (* 0x0082 *) | MSG_NCCALCSIZE (* 0x0083 *) | MSG_NCHITTEST (* 0x0084 *) | MSG_NCPAINT (* 0x0085 *) | MSG_NCACTIVATE (* 0x0086 *) | MSG_GETDLGCODE (* 0x0087 *) | MSG_NCMOUSEMOVE (* 0x00A0 *) | MSG_NCLBUTTONDOWN (* 0x00A1 *) | MSG_NCLBUTTONUP (* 0x00A2 *) | MSG_NCLBUTTONDBLCLK (* 0x00A3 *) | MSG_NCRBUTTONDOWN (* 0x00A4 *) | MSG_NCRBUTTONUP (* 0x00A5 *) | MSG_NCRBUTTONDBLCLK (* 0x00A6 *) | MSG_NCMBUTTONDOWN (* 0x00A7 *) | MSG_NCMBUTTONUP (* 0x00A8 *) | MSG_NCMBUTTONDBLCLK (* 0x00A9 *) | MSG_KEYDOWN (* 0x0100 *) | MSG_KEYUP (* 0x0101 *) | MSG_CHAR (* 0x0102 *) | MSG_DEADCHAR (* 0x0103 *) | MSG_SYSKEYDOWN (* 0x0104 *) | MSG_SYSKEYUP (* 0x0105 *) | MSG_SYSCHAR (* 0x0106 *) | MSG_SYSDEADCHAR (* 0x0107 *) | MSG_KEYLAST (* 0x0108 *) | MSG_INITDIALOG (* 0x0110 *) | MSG_COMMAND (* 0x0111 *) | MSG_SYSCOMMAND (* 0x0112 *) | MSG_TIMER (* 0x0113 *) | MSG_HSCROLL (* 0x0114 *) | MSG_VSCROLL (* 0x0115 *) | MSG_INITMENU (* 0x0116 *) | MSG_INITMENUPOPUP (* 0x0117 *) | MSG_MENUSELECT (* 0x011F *) | MSG_MENUCHAR (* 0x0120 *) | MSG_ENTERIDLE (* 0x0121 *) | MSG_CTLCOLORMSGBOX (* 0x0132 *) | MSG_CTLCOLOREDIT (* 0x0133 *) | MSG_CTLCOLORLISTBOX (* 0x0134 *) | MSG_CTLCOLORBTN (* 0x0135 *) | MSG_CTLCOLORDLG (* 0x0136 *) | MSG_CTLCOLORSCROLLBAR (* 0x0137 *) | MSG_CTLCOLORSTATIC (* 0x0138 *) | MSG_MOUSEMOVE (* 0x0200 *) | MSG_LBUTTONDOWN (* 0x0201 *) | MSG_LBUTTONUP (* 0x0202 *) | MSG_LBUTTONDBLCLK (* 0x0203 *) | MSG_RBUTTONDOWN (* 0x0204 *) | MSG_RBUTTONUP (* 0x0205 *) | MSG_RBUTTONDBLCLK (* 0x0206 *) | MSG_MBUTTONDOWN (* 0x0207 *) | MSG_MBUTTONUP (* 0x0208 *) | MSG_MBUTTONDBLCLK (* 0x0209 *) | MSG_PARENTNOTIFY (* 0x0210 *) | MSG_ENTERMENULOOP (* 0x0211 *) | MSG_EXITMENULOOP (* 0x0212 *) | MSG_MDICREATE (* 0x0220 *) | MSG_MDIDESTROY (* 0x0221 *) | MSG_MDIACTIVATE (* 0x0222 *) | MSG_MDIRESTORE (* 0x0223 *) | MSG_MDINEXT (* 0x0224 *) | MSG_MDIMAXIMIZE (* 0x0225 *) | MSG_MDITILE (* 0x0226 *) | MSG_MDICASCADE (* 0x0227 *) | MSG_MDIICONARRANGE (* 0x0228 *) | MSG_MDIGETACTIVE (* 0x0229 *) | MSG_MDISETMENU (* 0x0230 *) | MSG_DROPFILES (* 0x0233 *) | MSG_MDIREFRESHMENU (* 0x0234 *) | MSG_CUT (* 0x0300 *) | MSG_COPY (* 0x0301 *) | MSG_PASTE (* 0x0302 *) | MSG_CLEAR (* 0x0303 *) | MSG_UNDO (* 0x0304 *) | MSG_RENDERFORMAT (* 0x0305 *) | MSG_RENDERALLFORMATS (* 0x0306 *) | MSG_DESTROYCLIPBOARD (* 0x0307 *) | MSG_DRAWCLIPBOARD (* 0x0308 *) | MSG_PAINTCLIPBOARD (* 0x0309 *) | MSG_VSCROLLCLIPBOARD (* 0x030A *) | MSG_SIZECLIPBOARD (* 0x030B *) | MSG_ASKCBFORMATNAME (* 0x030C *) | MSG_CHANGECBCHAIN (* 0x030D *) | MSG_HSCROLLCLIPBOARD (* 0x030E *) | MSG_QUERYNEWPALETTE (* 0x030F *) | MSG_PALETTEISCHANGING (* 0x0310 *) | MSG_PALETTECHANGED (* 0x0311 *) | MSG_HOTKEY (* 0x0312 *) | MSG_PENWINFIRST (* 0x0380 *) | MSG_PENWINLAST (* 0x038F *) | MSG_USER (* 0x0400 *) fun i2MessageValue i = case i of 1 => MSG_CREATE | 2 => MSG_DESTROY | 3 => MSG_MOVE | 5 => MSG_SIZE | 6 => MSG_ACTIVATE | 7 => MSG_SETFOCUS | 8 => MSG_KILLFOCUS | 10 => MSG_ENABLE | 11 => MSG_SETREDRAW | 12 => MSG_SETTEXT | 13 => MSG_GETTEXT | 14 => MSG_GETTEXTLENGTH | 15 => MSG_PAINT | 16 => MSG_CLOSE | 17 => MSG_QUERYENDSESSION | 18 => MSG_QUIT | 19 => MSG_QUERYOPEN | 20 => MSG_ERASEBKGND | 21 => MSG_SYSCOLORCHANGE | 22 => MSG_ENDSESSION | 24 => MSG_SHOWWINDOW | 26 => MSG_WININICHANGE | 27 => MSG_DEVMODECHANGE | 28 => MSG_ACTIVATEAPP | 29 => MSG_FONTCHANGE | 30 => MSG_TIMECHANGE | 31 => MSG_CANCELMODE | 32 => MSG_SETCURSOR | 33 => MSG_MOUSEACTIVATE | 34 => MSG_CHILDACTIVATE | 35 => MSG_QUEUESYNC | 36 => MSG_GETMINMAXINFO | 38 => MSG_PAINTICON | 39 => MSG_ICONERASEBKGND | 40 => MSG_NEXTDLGCTL | 42 => MSG_SPOOLERSTATUS | 43 => MSG_DRAWITEM | 44 => MSG_MEASUREITEM | 45 => MSG_DELETEITEM | 46 => MSG_VKEYTOITEM | 47 => MSG_CHARTOITEM | 48 => MSG_SETFONT | 49 => MSG_GETFONT | 50 => MSG_SETHOTKEY | 51 => MSG_GETHOTKEY | 55 => MSG_QUERYDRAGICON | 57 => MSG_COMPAREITEM | 65 => MSG_COMPACTING | 66 => MSG_OTHERWINDOWCREATED | 67 => MSG_OTHERWINDOWDESTROYED | 68 => MSG_COMMNOTIFY | 70 => MSG_WINDOWPOSCHANGING | 71 => MSG_WINDOWPOSCHANGED | 72 => MSG_POWER | 74 => MSG_COPYDATA | 75 => MSG_CANCELJOURNAL | 129 => MSG_NCCREATE | 130 => MSG_NCDESTROY | 131 => MSG_NCCALCSIZE | 132 => MSG_NCHITTEST | 133 => MSG_NCPAINT | 134 => MSG_NCACTIVATE | 135 => MSG_GETDLGCODE | 160 => MSG_NCMOUSEMOVE | 161 => MSG_NCLBUTTONDOWN | 162 => MSG_NCLBUTTONUP | 163 => MSG_NCLBUTTONDBLCLK | 164 => MSG_NCRBUTTONDOWN | 165 => MSG_NCRBUTTONUP | 166 => MSG_NCRBUTTONDBLCLK | 167 => MSG_NCMBUTTONDOWN | 168 => MSG_NCMBUTTONUP | 169 => MSG_NCMBUTTONDBLCLK | 256 => MSG_KEYDOWN | 257 => MSG_KEYUP | 258 => MSG_CHAR | 259 => MSG_DEADCHAR | 260 => MSG_SYSKEYDOWN | 261 => MSG_SYSKEYUP | 262 => MSG_SYSCHAR | 263 => MSG_SYSDEADCHAR | 264 => MSG_KEYLAST | 272 => MSG_INITDIALOG | 273 => MSG_COMMAND | 274 => MSG_SYSCOMMAND | 275 => MSG_TIMER | 276 => MSG_HSCROLL | 277 => MSG_VSCROLL | 278 => MSG_INITMENU | 279 => MSG_INITMENUPOPUP | 287 => MSG_MENUSELECT | 288 => MSG_MENUCHAR | 289 => MSG_ENTERIDLE | 306 => MSG_CTLCOLORMSGBOX | 307 => MSG_CTLCOLOREDIT | 308 => MSG_CTLCOLORLISTBOX | 309 => MSG_CTLCOLORBTN | 310 => MSG_CTLCOLORDLG | 311 => MSG_CTLCOLORSCROLLBAR | 312 => MSG_CTLCOLORSTATIC | 512 => MSG_MOUSEMOVE | 513 => MSG_LBUTTONDOWN | 514 => MSG_LBUTTONUP | 515 => MSG_LBUTTONDBLCLK | 516 => MSG_RBUTTONDOWN | 517 => MSG_RBUTTONUP | 518 => MSG_RBUTTONDBLCLK | 519 => MSG_MBUTTONDOWN | 520 => MSG_MBUTTONUP | 521 => MSG_MBUTTONDBLCLK | 528 => MSG_PARENTNOTIFY | 529 => MSG_ENTERMENULOOP | 530 => MSG_EXITMENULOOP | 544 => MSG_MDICREATE | 545 => MSG_MDIDESTROY | 546 => MSG_MDIACTIVATE | 547 => MSG_MDIRESTORE | 548 => MSG_MDINEXT | 549 => MSG_MDIMAXIMIZE | 550 => MSG_MDITILE | 551 => MSG_MDICASCADE | 552 => MSG_MDIICONARRANGE | 553 => MSG_MDIGETACTIVE | 560 => MSG_MDISETMENU | 563 => MSG_DROPFILES | 564 => MSG_MDIREFRESHMENU | 768 => MSG_CUT | 769 => MSG_COPY | 770 => MSG_PASTE | 771 => MSG_CLEAR | 772 => MSG_UNDO | 773 => MSG_RENDERFORMAT | 774 => MSG_RENDERALLFORMATS | 775 => MSG_DESTROYCLIPBOARD | 776 => MSG_DRAWCLIPBOARD | 777 => MSG_PAINTCLIPBOARD | 778 => MSG_VSCROLLCLIPBOARD | 779 => MSG_SIZECLIPBOARD | 780 => MSG_ASKCBFORMATNAME | 781 => MSG_CHANGECBCHAIN | 782 => MSG_HSCROLLCLIPBOARD | 783 => MSG_QUERYNEWPALETTE | 784 => MSG_PALETTEISCHANGING | 785 => MSG_PALETTECHANGED | 786 => MSG_HOTKEY | 896 => MSG_PENWINFIRST | 911 => MSG_PENWINLAST | 1024 => MSG_USER | _ => MSG_NULL end; polyml.5.2.1/mlsource/extra/Win/Original/Readme0000644000175000017500000000106410313043375020371 0ustar daviddavidThis directory contains the code for Panos's Windows interface. SPF 11/3/96 I've modified it to allow it, more or less, to compile on the present version of Poly/ML (4.0 beta1). It needs more work to get it to run though. It seems to use some additional functions in the run-time system (RTS) which aren't provided and I can't find any source for them. It might be possible to reconstruct them. N.B. The RTS contains code to process window messages since that is needed to handle DDE. It may be that this is sufficient to handle all the cases. DCJM 17/10/00. polyml.5.2.1/mlsource/extra/Win/Original/Type32.ML0000644000175000017500000000163210313043375020572 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure Type32 = Type32Fct ( structure CInterface = CInterface structure ConstType = ConstType ); polyml.5.2.1/mlsource/extra/Win/Original/Type32Fct.ML0000644000175000017500000002512410313043375021231 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) signature importConstTypeSig = sig structure UpperCaseConversions : sig end type PaletteEntryFlag type MenuFlag type IconIdentifier type ColorAdjustmentFlag type IlluminantConstant end; signature importCInterfaceSig = sig type vol type Ctype type 'a Conversion val mkConversion : (vol -> 'a) -> ('a -> vol) -> Ctype -> 'a Conversion val breakConversion : 'a Conversion -> (vol -> 'a) * ('a -> vol) * Ctype val toCint : int -> vol val STRUCT2 : 'a1 Conversion * 'a2 Conversion -> ('a1 * 'a2) Conversion val STRUCT4 : 'a1 Conversion * 'a2 Conversion * 'a3 Conversion * 'a4 Conversion -> ('a1 * 'a2 * 'a3 * 'a4) Conversion val STRUCT6 : 'a1 Conversion * 'a2 Conversion * 'a3 Conversion * 'a4 Conversion * 'a5 Conversion * 'a6 Conversion -> ('a1 * 'a2 * 'a3 * 'a4 * 'a5 * 'a6) Conversion val voidStar : Ctype val FLOAT : real Conversion val INT : int Conversion val LONG : int Conversion val BOOL : bool Conversion end; functor Type32Fct ( structure CInterface : importCInterfaceSig structure ConstType : importConstTypeSig ) = struct open CInterface open ConstType datatype MLHACCEL = MLHACCEL of vol (* Handle of an accelerator table *) val HACCEL = mkConversion (MLHACCEL) ((fn (MLHACCEL h) => h)) (voidStar) datatype MLHANDLE = MLHANDLE of vol (* Handle of an object *) val HANDLE = mkConversion (MLHANDLE) ((fn (MLHANDLE h) => h)) (voidStar) datatype MLHBITMAP = MLHBITMAP of vol (* Handle of a bitmap *) val HBITMAP = mkConversion (MLHBITMAP) ((fn (MLHBITMAP h) => h)) (voidStar) datatype MLHBRUSH = MLHBRUSH of vol (* Handle of a brush *) val HBRUSH = mkConversion (MLHBRUSH) ((fn (MLHBRUSH h) => h)) (voidStar) datatype MLHCONV = MLHCONV of vol (* Handle of a dynamic data exchange (DDE) conversation *) val HCONV = mkConversion (MLHCONV) ((fn (MLHCONV h) => h)) (voidStar) datatype MLHCONVLIST = MLHCONVLIST of vol (* Handle of a DDE conversation list *) val HCONVLIST = mkConversion (MLHCONVLIST) ((fn (MLHCONVLIST h) => h)) (voidStar) datatype MLHCURSOR = MLHCURSOR of vol (* Handle of a cursor *) val HCURSOR = mkConversion (MLHCURSOR) ((fn (MLHCURSOR h) => h)) (voidStar) datatype MLHDC = MLHDC of vol (* Handle of a device context (DC) *) val HDC = mkConversion (MLHDC) ((fn (MLHDC h) => h)) (voidStar) datatype MLHDDEDATA = MLHDDEDATA of vol (* Handle of DDE data *) val HDDEDATA = mkConversion (MLHDDEDATA) ((fn (MLHDDEDATA h) => h)) (voidStar) datatype MLHDWP = MLHDWP of vol (* Handle of a deferred window position structure *) val HDWP = mkConversion (MLHDWP) ((fn (MLHDWP h) => h)) (voidStar) datatype MLHENHMETAFILE = MLHENHMETAFILE of vol (* Handle of an enhanced metafile *) val HENHMETAFILE = mkConversion (MLHENHMETAFILE) ((fn (MLHENHMETAFILE h) => h)) (voidStar) datatype MLHFILE = MLHFILE of vol (* Handle of a file *) val HFILE = mkConversion (MLHFILE) ((fn (MLHFILE h) => h)) (voidStar) datatype MLHFONT = MLHFONT of vol (* Handle of a font *) val HFONT = mkConversion (MLHFONT) ((fn (MLHFONT h) => h)) (voidStar) datatype MLHGDIOBJ = MLHGDIOBJ of vol (* Handle of a GDI object *) val HGDIOBJ = mkConversion (MLHGDIOBJ) ((fn (MLHGDIOBJ h) => h)) (voidStar) datatype MLHGLOBAL = MLHGLOBAL of vol (* Handle of a global memory block *) val HGLOBAL = mkConversion (MLHGLOBAL) ((fn (MLHGLOBAL h) => h)) (voidStar) datatype MLHICON = MLHICON of vol (* Handle of an icon *) val HICON = mkConversion (MLHICON) ((fn (MLHICON h) => h)) (voidStar) datatype MLHINSTANCE = MLHINSTANCE of vol (* Handle of an instance *) val HINSTANCE = mkConversion (MLHINSTANCE) ((fn (MLHINSTANCE h) => h)) (voidStar) datatype MLHKEY = MLHKEY of vol (* Handle of a registry key *) val HKEY = mkConversion (MLHKEY) ((fn (MLHKEY h) => h)) (voidStar) datatype MLHLOCAL = MLHLOCAL of vol (* Handle of a local memory block *) val HLOCAL = mkConversion (MLHLOCAL) ((fn (MLHLOCAL h) => h)) (voidStar) datatype MLHMENU = MLHMENU of vol (* Handle of a menu *) val HMENU = mkConversion (MLHMENU) ((fn (MLHMENU h) => h)) (voidStar) datatype MLHMETAFILE = MLHMETAFILE of vol (* Handle of a metafile *) val HMETAFILE = mkConversion (MLHMETAFILE) ((fn (MLHMETAFILE h) => h)) (voidStar) datatype MLHPALETTE = MLHPALETTE of vol (* Handle of a palette *) val HPALETTE = mkConversion (MLHPALETTE) ((fn (MLHPALETTE h) => h)) (voidStar) datatype MLHPEN = MLHPEN of vol (* Handle of a pen *) val HPEN = mkConversion (MLHPEN) ((fn (MLHPEN h) => h)) (voidStar) datatype MLHRGN = MLHRGN of vol (* Handle of a region *) val HRGN = mkConversion (MLHRGN) ((fn (MLHRGN h) => h)) (voidStar) datatype MLHRSRC = MLHRSRC of vol (* Handle of a resource *) val HRSRC = mkConversion (MLHRSRC) ((fn (MLHRSRC h) => h)) (voidStar) datatype MLHSZ = MLHSZ of vol (* Handle of a DDE string *) val HSZ = mkConversion (MLHSZ) ((fn (MLHSZ h) => h)) (voidStar) datatype MLHWND = MLHWND of vol (* Handle of a window *) val HWND = mkConversion (MLHWND) ((fn (MLHWND h) => h)) (voidStar) datatype MLPAINT = MLPAINT of vol (* Wraps PaintStructure vol *) val PAINT = mkConversion (MLPAINT) ((fn (MLPAINT h) => h)) (voidStar) fun mkBrush (MLHGDIOBJ v) = (MLHBRUSH v) fun mkBitmap (MLHGDIOBJ v) = (MLHBITMAP v) fun mkFont (MLHGDIOBJ v) = (MLHFONT v) fun mkPen (MLHGDIOBJ v) = (MLHPEN v) fun mkRegion (MLHGDIOBJ v) = (MLHRGN v) (* PlacementOrder constants *) val HWND_BROADCAST = MLHWND (toCint (Macro.hex "0xffff")) val HWND_DESKTOP = MLHWND (toCint 0) val HWND_TOP = MLHWND (toCint 0) val HWND_BOTTOM = MLHWND (toCint 1) val HWND_TOPMOST = MLHWND (toCint ~1) val HWND_NOTOPMOST = MLHWND (toCint ~2) datatype Color = Rgb of int * int *int type ClassName = string type WindowName = string type Xcoord = int type Ycoord = int type Xoffset = int type Yoffset = int type Width = int type Height = int type Index = int type SuccessState = bool type DCinstance = int type ForceBackground = bool type ListBox = int type StaticControl = int datatype MenuItem = MenuID of int type RWpermission = int type DCInstance = int type Fmf = int val MENUITEM = INT : int Conversion val XCOORD = INT : Xcoord Conversion val YCOORD = INT: Ycoord Conversion val XOFFSET = INT: Xoffset Conversion val YOFFSET = INT: Yoffset Conversion val WIDTH = INT: Width Conversion val HEIGHT = INT: Height Conversion val INDEX = INT: Index Conversion val SUCCESSSTATE = BOOL: SuccessState Conversion val RWPERMISSION = INT: RWpermission Conversion val FORCEBACKGROUND = BOOL : ForceBackground Conversion val LISTBOX = INT : ListBox Conversion val STATICCONTROL = INT : StaticControl Conversion val DCINSTANCE = INT : DCInstance Conversion val FONTMAPPERFLAG = INT : Fmf Conversion datatype Range = Range of {min:int,max:int} type SuccessState = bool datatype KeyState = KeyUp | KeyDown | NoKey datatype ShiftState = Shift | Ctrl | Alt | Comb of ShiftState list datatype Wnd = W of MLHWND * int datatype 'a Option = Some of 'a | None datatype BitmapData = BitmapData of Color list list fun absConversion {abs,rep} C = let val (fromC,toC,Ctype) = breakConversion C in mkConversion (abs o fromC) (toC o rep) (Ctype) end abstype Size = S of int * int with fun mkSize {width,height} = S (width,height) fun breakSize (S (width,height)) = {width=width,height=height} val SIZE = absConversion {abs=(fn x => S x), rep=(fn S x => x)} (STRUCT2 (LONG,LONG)) end abstype Rectangle = R of int * int * int * int with fun mkRect {left,top,right,bottom} = R (left,top,right,bottom) fun breakRect (R (left,top,right,bottom)) = {left=left,top=top,right=right,bottom=bottom} val RECTANGLE = absConversion {abs=(fn x => R x), rep=(fn R x => x)} (STRUCT4 (LONG,LONG,LONG,LONG)) end abstype Point = P of int * int with fun mkPoint {x,y} = P (x,y) fun breakPoint (P (x,y)) = {x=x,y=y} val POINT = absConversion {abs=(fn x => P x), rep=(fn P x => x)} (STRUCT2 (LONG,LONG)) end abstype XForm = X of real * real * real * real * real * real with fun mkXForm {r11,r12,r21,r22,tx,ty} = X (r11,r12,r21,r22,tx,ty) fun breakXForm (X (r11,r12,r21,r22,tx,ty)) = {r11=r11,r12=r12,r21=r21, r22=r22,tx=tx,ty=ty} val XFORM = absConversion {abs=(fn x => X x), rep=(fn X x => x)} (STRUCT6 (FLOAT,FLOAT,FLOAT,FLOAT,FLOAT,FLOAT)) end datatype PaletteEntry = PE of {red:int,green:int, blue:int,flag:PaletteEntryFlag} datatype ColorAdjustment = CA of {flags:ColorAdjustmentFlag, illuminance:IlluminantConstant, Rgamma:int, Ggamma:int, Bgamma:int, referenceBlack:int, referenceWhite:int, contrast:int, brightness:int, colorfullness:int, Rgammatint:int } datatype Fraction = Fraction of {num:int,denom:int} datatype ABC = ABC of { Aspacing:int, Bspacing:int, Cspacing:int } datatype ABCfloat = ABCfloat of { Aspacing:real, Bspacing:real, Cspacing:real } datatype VirtualKeyData = VK of int list datatype MenuItemData = MID of {option:MenuFlag, id:MenuItem, display:string} type PaintData = MLHDC * bool * Rectangle datatype 'a option = Some of 'a | None datatype Id = Id of int val nextfreeId = ref 0 fun newId () = (nextfreeId:= !nextfreeId +1; Id(!nextfreeId)) fun intOfId (Id n) = n fun sameId (Id n, Id m) = n=m end; polyml.5.2.1/mlsource/extra/Win/Original/UserFn.ML0000644000175000017500000000204410313043375020704 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure UserFn = UserFnFct ( structure Dir = Dir structure CInterface = CInterface structure ConstType = ConstType structure Type = Type32 ) ; polyml.5.2.1/mlsource/extra/Win/Original/UserFn2.ML0000644000175000017500000000212010313043375020761 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure UserFn2 = UserFn2Fct ( structure Dir = Dir structure CInterface = CInterface structure Macro = Macro structure ConstType = ConstType structure Type = Type32 ) ; polyml.5.2.1/mlsource/extra/Win/Original/UserFn2Fct.ML0000644000175000017500000013636310313043376021440 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) signature importCInterfaceSig = sig type sym type 'a Conversion type Ctype type vol val global : sym -> 'a Conversion -> unit -> 'a val get_sym : string -> string -> sym val volOfSym : sym -> vol val alloc : int -> Ctype -> vol val address : vol -> vol val deref : vol -> vol val offset : int -> Ctype -> vol -> vol val assign : Ctype -> vol -> vol -> unit val Cchar : Ctype val Cfloat : Ctype val Cint : Ctype val Clong : Ctype val Cshort : Ctype val Cpointer : Ctype -> Ctype val Cstruct : Ctype list -> Ctype val Cfunction : Ctype list * Ctype -> Ctype val Cvoid : Ctype val voidStar : Ctype val toCstring : string -> vol val toCchar : string -> vol val toCfloat : real -> vol val toCint : int -> vol val toClong : int -> vol val toCshort : int -> vol val fromCstring : vol -> string val fromCchar : vol -> string val fromCfloat : vol -> real val fromCint : vol -> int val fromClong : vol -> int val fromCshort : vol -> int val call_sym : sym -> (Ctype * vol) list -> Ctype -> vol val break_struct : Ctype list -> vol -> vol list val make_struct : (Ctype * vol) list -> vol val CHAR : string Conversion val DOUBLE : real Conversion val FLOAT : real Conversion val INT : int Conversion val LONG : int Conversion val SHORT : int Conversion val STRING : string Conversion val VOID : unit Conversion val BOOL : bool Conversion val POINTER : vol Conversion val call0 : sym -> unit -> 'a Conversion -> unit -> 'a val call1 : sym -> 'a Conversion -> 'b Conversion -> 'a -> 'b val call2 : sym -> 'a Conversion * 'b Conversion -> 'c Conversion -> 'a * 'b -> 'c val call3 : sym -> 'a Conversion * 'b Conversion * 'c Conversion -> 'd Conversion -> 'a * 'b * 'c -> 'd val call4 : sym -> 'a Conversion * 'b Conversion * 'c Conversion * 'd Conversion -> 'e Conversion -> 'a * 'b * 'c * 'd -> 'e val call5 : sym -> 'a Conversion * 'b Conversion * 'c Conversion * 'd Conversion * 'e Conversion -> 'f Conversion -> 'a * 'b * 'c * 'd * 'e -> 'f val call6 : sym -> 'a Conversion * 'b Conversion * 'c Conversion * 'd Conversion * 'e Conversion * 'f Conversion -> 'g Conversion -> 'a * 'b * 'c * 'd * 'e * 'f -> 'g val call7 : sym -> 'a Conversion * 'b Conversion * 'c Conversion * 'd Conversion * 'e Conversion * 'f Conversion * 'g Conversion -> 'h Conversion -> 'a * 'b * 'c * 'd * 'e * 'f * 'g -> 'h val call8 : sym -> 'a Conversion * 'b Conversion * 'c Conversion * 'd Conversion * 'e Conversion * 'f Conversion * 'g Conversion * 'h Conversion -> 'i Conversion -> 'a * 'b * 'c * 'd * 'e * 'f * 'g * 'h -> 'i val call9 : sym -> 'a Conversion * 'b Conversion * 'c Conversion * 'd Conversion * 'e Conversion * 'f Conversion * 'g Conversion * 'h Conversion * 'i Conversion -> 'j Conversion -> 'a * 'b * 'c * 'd * 'e * 'f * 'g * 'h * 'i -> 'j end; signature importMacroSig = sig val GetRValue : int -> int val GetGValue : int -> int val GetBValue : int -> int val PALETTERGB : int * int * int -> int val BYTE2LONG : int * int * int * int -> int val LONG2BYTE : int -> int * int * int * int val MAKELONG : int * int -> int val LOWORD : int -> int val HIWORD : int -> int val LOBYTE : int -> int val HIBYTE : int -> int val natAnd : int * int -> int end; signature importConstTypeSig = sig type 'a encoding type 'a Conversion val absE : 'a encoding -> int -> 'a val repE : 'a encoding -> 'a -> int type WindowStyleExtended type WindowStyle type ClassStyle type ButtonStyle type ComboBoxStyle type EditStyle type ListBoxStyle type ScrollBarStyle type StaticStyle type FloodFillMode type BrushStyle type HatchStyle type ResultRegion type PaletteEntryFlag type PointType type PenStyle type ExtendedTextOut type PolyFillMode type MenuFlag type ScrollBarType type IconIdentifier type CursorIdentifier type WindowPlacementFlag type ShowWindowMode val WindowPlacementFlagE : WindowPlacementFlag encoding val ShowWindowModeE : ShowWindowMode encoding val WindowStyleExtendedE : WindowStyleExtended encoding val WindowStyleE : WindowStyle encoding val ClassStyleE : ClassStyle encoding val ButtonStyleE : ButtonStyle encoding val ComboBoxStyleE : ComboBoxStyle encoding val EditStyleE : EditStyle encoding val ListBoxStyleE : ListBoxStyle encoding val ScrollBarStyleE : ScrollBarStyle encoding val StaticStyleE : StaticStyle encoding val MenuFlagE : MenuFlag encoding val IconIdentifierE : IconIdentifier encoding val CursorIdentifierE : CursorIdentifier encoding structure UpperCaseConversions : sig val ICONIDENTIFIER : IconIdentifier Conversion val CURSORIDENTIFIER : CursorIdentifier Conversion val SCROLLBARTYPE : ScrollBarType Conversion val MENUFLAG : MenuFlag Conversion val POLYFILLMODE :PolyFillMode Conversion val FLOODFILLMODE : FloodFillMode Conversion val PENSTYLE : PenStyle Conversion val EXTENDEDTEXTOUT : ExtendedTextOut Conversion end val BrushStyleE : BrushStyle encoding val HatchStyleE : HatchStyle encoding val ResultRegionE : ResultRegion encoding val PaletteEntryFlagE : PaletteEntryFlag encoding val PointTypeE : PointType encoding end; signature importTypeSig = sig type vol type 'a Conversion type PaletteEntryFlag type MenuFlag datatype MenuItem = MenuID of int datatype MLHANDLE = MLHANDLE of vol val HANDLE : MLHANDLE Conversion datatype MLHWND = MLHWND of vol val HWND : MLHWND Conversion datatype MLHDC = MLHDC of vol val HDC : MLHDC Conversion datatype MLHMENU = MLHMENU of vol val HMENU : MLHMENU Conversion datatype MLHRGN = MLHRGN of vol val HRGN : MLHRGN Conversion datatype MLHFONT = MLHFONT of vol val HFONT : MLHFONT Conversion datatype MLHICON = MLHICON of vol val HICON : MLHICON Conversion datatype MLHCURSOR = MLHCURSOR of vol val HCURSOR : MLHCURSOR Conversion datatype MLHBRUSH = MLHBRUSH of vol val HBRUSH : MLHBRUSH Conversion datatype MLHPALETTE = MLHPALETTE of vol val HPALETTE : MLHPALETTE Conversion datatype MLHPEN = MLHPEN of vol val HPEN : MLHPEN Conversion datatype MLPAINT = MLPAINT of vol val PAINT : MLPAINT Conversion datatype Range = Range of {min:int,max:int} datatype Color = Rgb of int * int *int type Xcoord type Ycoord type Height type Width val XCOORD : Xcoord Conversion val YCOORD : Ycoord Conversion val HEIGHT : Height Conversion val WIDTH : Width Conversion type Point type Rectangle type Size type XForm val mkPoint : {x:int,y:int} -> Point val breakPoint : Point -> {x:int,y:int} val mkSize : {width:int,height:int} -> Size val breakSize : Size -> {width:int,height:int} val mkRect : {left:int,top:int,right:int,bottom:int} -> Rectangle val breakRect : Rectangle -> {left:int,top:int,right:int,bottom:int} val breakXForm : XForm -> {r11:real,r12:real,r21:real, r22:real,tx:real,ty:real} datatype PaletteEntry = PE of {red:int,green:int, blue:int,flag:PaletteEntryFlag} datatype Fraction = Fraction of {num:int,denom:int} datatype ABC = ABC of { Aspacing:int, Bspacing:int, Cspacing:int } datatype ABCfloat = ABCfloat of { Aspacing:real, Bspacing:real, Cspacing:real } datatype ShiftState = Shift | Ctrl | Alt | Comb of ShiftState list datatype VirtualKeyData = VK of int list datatype MenuItemData = MID of {option:MenuFlag, id:MenuItem, display:string} end; signature importDirSig = sig val wpolyname : string val gdilibname : string val userlibname : string end; functor UserFn2Fct ( structure Dir : importDirSig structure CInterface : importCInterfaceSig structure Macro : importMacroSig structure ConstType : importConstTypeSig structure Type : importTypeSig sharing type CInterface.Conversion = Type.Conversion = ConstType.Conversion sharing type CInterface.vol = Type.vol sharing type Type.PaletteEntryFlag = ConstType.PaletteEntryFlag sharing type Type.MenuFlag = ConstType.MenuFlag ) = struct open CInterface open Macro open Type open ConstType open UpperCaseConversions open Dir local val Executable = wpolyname fun Getv (v,conv) = global (get_sym Executable v) conv () val getuser = get_sym userlibname val getgdi = get_sym gdilibname exception WrongNumberOfVolatiles fun break_struct2 types v = let val vols = break_struct types v in case vols of [v1,v2] => (v1,v2) | _ => raise WrongNumberOfVolatiles end; fun break_struct3 types v = let val vols = break_struct types v in case vols of [v1,v2,v3] => (v1,v2,v3) | _ => raise WrongNumberOfVolatiles end; fun break_struct11 types v = let val vols = break_struct types v in case vols of [v1,v2,v3,v4,v5,v6,v7,v8,v9,v10,v11] => (v1,v2,v3,v4,v5,v6,v7,v8,v9,v10,v11) | _ => raise WrongNumberOfVolatiles end; in (* WINDOW CREATION *) (* mkWindow : WindowStyleExtended * ClassStyle * MLHICON * MLHCURSOR * MLHBRUSH * WindowName * WindowStyle * Xcoord * Ycoord * Width * Height * MLHWND * MLHMENU -> MLHWND *) fun mkWindow (exstyle,cstyle,i,c,b,name,style,x,y,w,h,parent,menu) = let val UserWproc = volOfSym (get_sym Executable "UserWindowClassHandler") val instance = Getv ("hinst",HANDLE) val temporaryclass_name = "mywonderfulclass" val myclass = make_struct [ (Cint, toCint (repE ClassStyleE cstyle)), (Cpointer (Cfunction ([voidStar,Cint,Cint,Clong],Clong)),UserWproc), (Cint, toCint 0), (Cint, toCint 0), (voidStar, (fn (MLHANDLE v) => v) instance), (voidStar, (fn (MLHICON v) => v) i), (voidStar, (fn (MLHCURSOR v) => v) c), (voidStar, (fn (MLHBRUSH v) => v) b), (Cpointer Cchar,toCint 0), (Cpointer Cchar, toCstring temporaryclass_name) ] val success = call1 (getuser "RegisterClassA") (POINTER) (BOOL) (address myclass) in MLHWND ( call_sym (getuser "CreateWindowExA") [(Clong,toClong (repE WindowStyleExtendedE exstyle) ), (Cpointer Cchar,toCstring temporaryclass_name), (Cpointer Cchar,toCstring name), (Clong,toClong (repE WindowStyleE style)), (Cint,toCint x), (Cint,toCint y), (Cint,toCint w), (Cint,toCint h), (voidStar,(fn (MLHWND v) => v) parent), (voidStar,(fn (MLHMENU v) => v) menu), (voidStar,(fn (MLHANDLE v) => v) instance), (voidStar,toCint 0)] voidStar ) end (* mkButton : string * ButtonStyle * Xcoord * Ycoord * Width * Height * int * HWND -> HWND *) fun mkButton (name,style,x,y,w,h,i,parent) = let val instance = Getv ("hinst",HANDLE) in MLHWND ( call_sym (getuser "CreateWindowExA") [(Clong,toClong 0 ), (Cpointer Cchar,toCstring "BUTTON"), (Cpointer Cchar,toCstring name), (Clong,toClong (repE ButtonStyleE style)), (Cint,toCint x), (Cint,toCint y), (Cint,toCint w), (Cint,toCint h), (voidStar,(fn (MLHWND v) => v) parent), (voidStar,toCint i), (* i is the child control identifier *) (voidStar,(fn (MLHANDLE v) => v) instance), (voidStar,toCint 0)] voidStar ) end (* mkComboBox : string * ComboBoxStyle * Xcoord * Ycoord * Width * Height * int * HWND -> HWND *) fun mkComboBox (name,style,x,y,w,h,i,parent) = let val instance = Getv ("hinst",HANDLE) in MLHWND ( call_sym (getuser "CreateWindowExA") [(Clong,toClong 0 ), (Cpointer Cchar,toCstring "COMBOBOX"), (Cpointer Cchar,toCstring name), (Clong,toClong (repE ComboBoxStyleE style)), (Cint,toCint x), (Cint,toCint y), (Cint,toCint w), (Cint,toCint h), (voidStar,(fn (MLHWND v) => v) parent), (voidStar,toCint i), (* i is the child control identifier *) (voidStar,(fn (MLHANDLE v) => v) instance), (voidStar,toCint 0)] voidStar ) end (* mkEdit : string * EditStyle * Xcoord * Ycoord * Width * Height * int * HWND -> HWND *) fun mkEdit (name,style,x,y,w,h,i,parent) = let val instance = Getv ("hinst",HANDLE) in MLHWND ( call_sym (getuser "CreateWindowExA") [(Clong,toClong 0 ), (Cpointer Cchar,toCstring "EDIT"), (Cpointer Cchar,toCstring name), (Clong,toClong (repE EditStyleE style)), (Cint,toCint x), (Cint,toCint y), (Cint,toCint w), (Cint,toCint h), (voidStar,(fn (MLHWND v) => v) parent), (voidStar,toCint i), (* i is the child control identifier *) (voidStar,(fn (MLHANDLE v) => v) instance), (voidStar,toCint 0)] voidStar ) end (* mkListBox : string * ListBoxStyle * Xcoord * Ycoord * Width * Height * int * HWND -> HWND *) fun mkListBox (name,style,x,y,w,h,i,parent) = let val instance = Getv ("hinst",HANDLE) in MLHWND ( call_sym (getuser "CreateWindowExA") [(Clong,toClong 0 ), (Cpointer Cchar,toCstring "LISTBOX"), (Cpointer Cchar,toCstring name), (Clong,toClong (repE ListBoxStyleE style)), (Cint,toCint x), (Cint,toCint y), (Cint,toCint w), (Cint,toCint h), (voidStar,(fn (MLHWND v) => v) parent), (voidStar,toCint i), (* i is the child control identifier *) (voidStar,(fn (MLHANDLE v) => v) instance), (voidStar,toCint 0)] voidStar ) end (* mkScrollBar : string * ScrollBarStyle * Xcoord * Ycoord * Width * Height * int * HWND -> HWND *) fun mkScrollBar (name,style,x,y,w,h,i,parent) = let val instance = Getv ("hinst",HANDLE) in MLHWND ( call_sym (getuser "CreateWindowExA") [(Clong,toClong 0 ), (Cpointer Cchar,toCstring "SCROLLBAR"), (Cpointer Cchar,toCstring name), (Clong,toClong (repE ScrollBarStyleE style)), (Cint,toCint x), (Cint,toCint y), (Cint,toCint w), (Cint,toCint h), (voidStar,(fn (MLHWND v) => v) parent), (voidStar,toCint i), (* i is the child control identifier *) (voidStar,(fn (MLHANDLE v) => v) instance), (voidStar,toCint 0)] voidStar ) end (* mkStatic : string * StaticStyle * Xcoord * Ycoord * Width * Height * HWND -> HWND *) fun mkStatic (name,style,x,y,w,h,parent) = let val instance = Getv ("hinst",HANDLE) in MLHWND ( call_sym (getuser "CreateWindowExA") [(Clong,toClong 0 ), (Cpointer Cchar,toCstring "STATIC"), (Cpointer Cchar,toCstring name), (Clong,toClong (repE StaticStyleE style)), (Cint,toCint x), (Cint,toCint y), (Cint,toCint w), (Cint,toCint h), (voidStar,(fn (MLHWND v) => v) parent), (voidStar,toCint 0), (voidStar,(fn (MLHANDLE v) => v) instance), (voidStar,toCint 0)] voidStar ) end (* BITMAPS *) fun ExtFloodFill (h,x,y,Rgb(r,g,b),f) = call5 (getgdi "ExtFloodFill") (HDC,XCOORD,YCOORD,LONG,FLOODFILLMODE) (BOOL) (h,x,y,PALETTERGB(r,g,b),f) fun GetPixel (h,x,y) = let val r = call3 (getgdi "GetPixel") (HDC,XCOORD,YCOORD) (LONG) (h,x,y) in Rgb(GetRValue r,GetGValue r,GetBValue r) end fun SetPixel (h,x,y,Rgb(r,g,b)) = call4 (getgdi "SetPixel") (HDC,XCOORD,YCOORD,LONG) (BOOL) (h,x,y,PALETTERGB(r,g,b)) (* BRUSHES *) fun CreateBrushIndirect (br,Rgb(r,g,b),h) = let val logbrush = make_struct [ (Clong,toClong (repE BrushStyleE br)), (Clong,toClong (PALETTERGB(r,g,b))), (Clong,toClong (repE HatchStyleE h))] in call1 (getuser "CreateBrushIndirect") (POINTER) (HBRUSH) (address logbrush) end fun CreateHatchBrush (h,Rgb(r,g,b)) = call2 (getgdi "CreateHatchBrush") (HBRUSH,LONG) (LONG) (h,PALETTERGB(r,g,b)) fun CreateSolidBrush (Rgb(r,g,b)) = call1 (getgdi "CreateSolidBrush") (LONG) (HBRUSH) (PALETTERGB(r,g,b)) (* CLIPPING *) fun ExcludeClipRect (h,rect) = let val {left,top,right,bottom} = breakRect rect in absE ResultRegionE ( call5 (getgdi "ExcludeClipRect") (HDC,LONG,LONG,LONG,LONG) (INT) (h,left,top,right,bottom) ) end fun IntersectClipRect (h,rect) = let val {left,top,right,bottom} = breakRect rect in absE ResultRegionE ( call5 (getgdi "IntersectClipRect") (HDC,LONG,LONG,LONG,LONG) (INT) (h,left,top,right,bottom) ) end (* COLORS *) fun GetNearestColor (h,Rgb(r,g,b)) = let val rgb = call2 (getgdi "GetNearestColor") (HDC,LONG) (LONG) (h,PALETTERGB(r,g,b)) in Rgb(GetRValue rgb,GetGValue rgb,GetBValue rgb) end fun GetNearestPaletteIndex (h,Rgb(r,g,b)) = call2 (getgdi "GetNearestPaletteIndex") (HPALETTE,LONG) (INT) (h,PALETTERGB(r,g,b)) fun AnimatePalette (h,start,pl) = let val count = List.length pl val pal = alloc count Clong fun pl2a v n [] = () | pl2a v n (PE {red=r,green=g,blue=b,flag=f} :: rest) = let val item = toClong (BYTE2LONG (r,g,b,repE PaletteEntryFlagE f)) in ( assign Clong (offset n Clong v) item ; pl2a v (n+1) rest ) end val u = pl2a pal 0 pl in call4 (getgdi "AnimatePalette") (HPALETTE,INT,INT,POINTER) (BOOL) (h,start,count,address pal) end fun CreatePalette (pl) = let val count = List.length pl fun pl2a v n [] = () | pl2a v n (PE {red=r,green=g,blue=b,flag=f} :: rest) = let val item = toClong (BYTE2LONG (r,g,b,repE PaletteEntryFlagE f)) in ( assign Clong (offset n Clong v) item ; pl2a v (n+1) rest ) end val logpal = alloc (count+1) Clong val u = assign Cshort (offset 1 Cshort logpal) (toCshort count) val u = pl2a (offset 1 Clong logpal) 0 pl in call1 (getgdi "CreatePalette") (POINTER) (HPALETTE) (address logpal) end fun GetPaletteEntries (h,start,no) = let val palarr = alloc no Clong val res = call4 (getgdi "GetPaletteEntries") (HPALETTE,INT,INT,POINTER) (INT) (h,start,no,address palarr) fun v2l v 0 = [] | v2l v i = let val (r,g,b,f) = LONG2BYTE (fromClong (offset (i-1) Clong v)) in (v2l v (i-1)) @ [PE {red=r,green=g,blue=b,flag=absE PaletteEntryFlagE f} ] end in (res,v2l palarr no) end fun GetSystemPaletteEntries (h,start,no) = let val palarr = alloc no Clong val res = call4 (getgdi "GetSystemPaletteEntries") (HPALETTE,INT,INT,POINTER) (INT) (h,start,no,address palarr) fun v2l v 0 = [] | v2l v i = let val (r,g,b,f) = LONG2BYTE (fromClong (offset (i-1) Clong v)) in (v2l v (i-1)) @ [PE {red=r,green=g,blue=b,flag=absE PaletteEntryFlagE f} ] end in (res,v2l palarr no) end fun SetPaletteEntries (h,start,pl) = let val count = List.length pl val pal = alloc count Clong fun pl2a v n [] = () | pl2a v n (PE {red=r,green=g,blue=b,flag=f} :: rest) = let val item = toClong (BYTE2LONG (r,g,b,repE PaletteEntryFlagE f)) in ( assign Clong (offset n Clong v) item ; pl2a v (n+1) rest ) end val u = pl2a pal 0 pl in call4 (getgdi "SetPaletteEntries") (HPALETTE,INT,INT,POINTER) (BOOL) (h,start,count,address pal) end (* COORDINATE SPACES AND TRANSFORMATIONS *) fun ScaleViewportExtEx (h,Fraction{num=n1,denom=d1},Fraction{num=n2,denom=d2}) = let val sv = alloc 1 (Cstruct [Clong,Clong]) val res = call6 (getgdi "ScaleViewportExtEx") (HWND,INT,INT,INT,INT,POINTER) (BOOL) (h,n1,d1,n2,d2,address sv) val (wv,hv) = break_struct2 [Clong,Clong] sv in mkSize {width=fromClong wv, height=fromClong hv} end fun ScaleWindowExtEx (h,Fraction{num=n1,denom=d1},Fraction{num=n2,denom=d2}) = let val sv = alloc 1 (Cstruct [Clong,Clong]) val res = call6 (getgdi "ScaleWindowExtEx") (HWND,INT,INT,INT,INT,POINTER) (BOOL) (h,n1,d1,n2,d2,address sv) val (wv,hv) = break_struct2 [Clong,Clong] sv in mkSize {width=fromClong wv, height=fromClong hv} end fun DPtoLP (h,pts) = let val count = List.length pts val ptarr = alloc count (Cstruct [Clong,Clong]) fun pl2a v n [] = () | pl2a v n (p :: rest) = let val {x,y} = breakPoint p val item = make_struct [(Clong,toClong x), (Clong,toClong y)] in ( assign (Cstruct [Clong,Clong]) (offset n (Cstruct [Clong,Clong]) v) item ; pl2a v (n+1) rest ) end val u = pl2a ptarr 0 pts val res = call3 (getgdi "DPtoLP") (HDC,POINTER,INT) (BOOL) (h, address ptarr,count) fun v2l v 0 = [] | v2l v i = let val vp = offset (i-1) (Cstruct [Clong,Clong]) v val (vx,vy) = break_struct2 [Clong,Clong] vp in (v2l v (i-1)) @ [(mkPoint {x=fromClong vx,y=fromClong vy})] end in (res,v2l ptarr count) end fun LPtoDP (h,pts) = let val count = List.length pts val ptarr = alloc count (Cstruct [Clong,Clong]) fun pl2a v n [] = () | pl2a v n (p :: rest) = let val {x,y} = breakPoint p val item = make_struct [(Clong,toClong x), (Clong,toClong y)] in ( assign (Cstruct [Clong,Clong]) (offset n (Cstruct [Clong,Clong]) v) item ; pl2a v (n+1) rest ) end val u = pl2a ptarr 0 pts val res = call3 (getgdi "LPtoDP") (HDC,POINTER,INT) (BOOL) (h, address ptarr,count) fun v2l v 0 = [] | v2l v i = let val vp = offset (i-1) (Cstruct [Clong,Clong]) v val (vx,vy) = break_struct2 [Clong,Clong] vp in (v2l v (i-1)) @ [mkPoint {x=fromClong vx,y=fromClong vy} ] end in (res,v2l ptarr count) end fun MapWindowPoints (h1,h2,pts) = let val count = List.length pts val ptarr = alloc count (Cstruct [Clong,Clong]) fun pl2a v n [] = () | pl2a v n (p :: rest) = let val {x,y} = breakPoint p val item = make_struct [(Clong,toClong x), (Clong,toClong y)] in ( assign (Cstruct [Clong,Clong]) (offset n (Cstruct [Clong,Clong]) v) item ; pl2a v (n+1) rest ) end val u = pl2a ptarr 0 pts val res = call4 (getuser "MapWindowPoints") (HWND,HWND,POINTER,INT) (INT) (h1,h2,address ptarr,count) fun v2l v 0 = [] | v2l v i = let val vp = offset (i-1) (Cstruct [Clong,Clong]) v val (vx,vy) = break_struct2 [Clong,Clong] vp in (v2l v (i-1)) @ [mkPoint {x=fromClong vx,y=fromClong vy} ] end in ((LOWORD res,HIWORD res),v2l ptarr count) end (* DEVICE CONTEXTS *) (* FILLED SHAPES *) fun Chord (h,rect,p1,p2) = let val {left,top,right,bottom} = breakRect rect val {x=x1,y=y1} = breakPoint p1 val {x=x2,y=y2} = breakPoint p2 in call9 (getgdi "Chord") (HDC,LONG,LONG,LONG,LONG,LONG,LONG,LONG,LONG) (BOOL) (h,left,top,right,bottom,x1,y1,x2,y2) end fun Ellipse (h,rect) = let val {left,top,right,bottom} = breakRect rect in call5 (getgdi "Ellipse") (HDC,LONG,LONG,LONG,LONG) (BOOL) (h,left,top,right,bottom) end fun Pie (h,rect,p1,p2) = let val {left,top,right,bottom} = breakRect rect val {x=x1,y=y1} = breakPoint p1 val {x=x2,y=y2} = breakPoint p2 in call9 (getgdi "Pie") (HDC,LONG,LONG,LONG,LONG,LONG,LONG,LONG,LONG) (BOOL) (h,left,top,right,bottom,x1,y1,x2,y2) end fun DrawRectangle(h,rect) = let val {left,top,right,bottom} = breakRect rect in call5 (getgdi "Rectangle") (HDC,LONG,LONG,LONG,LONG) (BOOL) (h,left,top,right,bottom) end fun DrawRoundRect(h,rect,w,ht) = let val {left,top,right,bottom} = breakRect rect in call7 (getgdi "RoundRect") (HDC,LONG,LONG,LONG,LONG,WIDTH,HEIGHT) (BOOL) (h,left,top,right,bottom,w,ht) end fun Polygon (h,pts) = let val count = List.length pts val ptarr = alloc count (Cstruct [Clong,Clong]) fun pl2a v n [] = () | pl2a v n (p :: rest) = let val {x,y} = breakPoint p val item = make_struct [(Clong,toClong x), (Clong,toClong y)] in ( assign (Cstruct [Clong,Clong]) (offset n (Cstruct [Clong,Clong]) v) item ; pl2a v (n+1) rest ) end val u = pl2a ptarr 0 pts in call3 (getgdi "Polygon") (HDC,POINTER,INT) (BOOL) (h,address ptarr,count) end (* FONTS AND TEXT *) fun GetTextColor h = let val rgb = call1 (getgdi "GetTextColor") (HDC) (LONG) h in Rgb (GetRValue rgb,GetGValue rgb,GetBValue rgb) end fun SetTextColor (h,Rgb(r,g,b)) = let val rgb = call2 (getgdi "SetTextColor") (HDC,LONG) (LONG) (h,PALETTERGB(r,g,b)) in Rgb (GetRValue rgb,GetGValue rgb,GetBValue rgb) end fun ExtTextOut (h,p,option,rect1,text,gapl) = let val {left,top,right,bottom} = breakRect rect1 val rect = alloc 4 Clong val u = (assign Clong (offset 0 Clong rect) (toClong left); assign Clong (offset 1 Clong rect) (toClong top); assign Clong (offset 2 Clong rect) (toClong right); assign Clong (offset 3 Clong rect) (toClong bottom) ) val slen = String.size text val gapno = List.length gapl val gaps = alloc gapno Cint fun pl2a v n [] = () | pl2a v n (x :: rest) = let val item = toCint x in ( assign Cint (offset n Cint v) item ; pl2a v (n+1) rest ) end val u = pl2a gaps 0 gapl val {x,y} = breakPoint p in call8 (getgdi "ExtTextOutA") (HDC,LONG,LONG,EXTENDEDTEXTOUT,POINTER,STRING,INT,POINTER) (BOOL) (h,x,y,option,address rect,text,slen,address gaps) end fun GetCharABCWidths (h,c1,c2) = let val count = c2-c1 val abcarr = alloc count (Cstruct [Cint,Cint,Cint]) val res = call4 (getgdi "GetCharABCWidthsA") (HDC,INT,INT,POINTER) (BOOL) (h,c1,c2,address abcarr) fun v2l v 0 = [] | v2l v i = let val vp = offset (i-1) (Cstruct [Cint,Cint,Cint]) v val (va,vb,vc) = break_struct3 [Cint,Cint,Cint] vp in (v2l v (i-1)) @ [ ABC { Aspacing = fromClong va, Bspacing = fromClong vb, Cspacing = fromClong vc } ] end in v2l abcarr count end fun GetCharABCWidthsFloat (h,c1,c2) = let val count = c2-c1 val abcarr = alloc count (Cstruct [Cfloat,Cfloat,Cfloat]) val res = call4 (getgdi "GetCharABCWidthsFloatA") (HDC,INT,INT,POINTER) (BOOL) (h,c1,c2,address abcarr) fun v2l v 0 = [] | v2l v i = let val vp = offset (i-1) (Cstruct [Cfloat,Cfloat,Cfloat]) v val (va,vb,vc) = break_struct3 [Cfloat,Cfloat,Cfloat] vp in (v2l v (i-1)) @ [ ABCfloat { Aspacing = fromCfloat va, Bspacing = fromCfloat vb, Cspacing = fromCfloat vc } ] end in v2l abcarr count end fun GetCharWidth32 (h,c1,c2) = let val count = c2-c1 val abcarr = alloc count Cint val res = call4 (getgdi "GetCharWidth32A") (HDC,INT,INT,POINTER) (BOOL) (h,c1,c2,address abcarr) fun v2l v 0 = [] | v2l v i = let val vp = offset (i-1) Cint v in (v2l v (i-1)) @ [fromCint vp ] end in v2l abcarr count end fun GetCharWidthFloat (h,c1,c2) = let val count = c2-c1 val abcarr = alloc count Cfloat val res = call4 (getgdi "GetCharWidthFloatA") (HDC,INT,INT,POINTER) (BOOL) (h,c1,c2,address abcarr) fun v2l v 0 = [] | v2l v i = let val vp = offset (i-1) Cfloat v in (v2l v (i-1)) @ [fromCfloat vp ] end in v2l abcarr count end fun GetTextExtentPoint32 (h,s) = let val sz = alloc 1 (Cstruct [Clong,Clong]) val slen = String.size s val res = call4 (getgdi "GetTextExtentPoint32A") (HDC,STRING,INT,POINTER) (BOOL) (h,s,slen,address sz) val (x,y) = break_struct2 [Clong,Clong] sz in mkSize {width=fromClong x, height=fromClong y} end fun TextOut (h,p,s) = let val len = String.size s val {x,y} = breakPoint p in call5 (getgdi "TextOut") (HDC,INT,INT,STRING,INT) (BOOL) (h,x,y,s,len) end (* LINES AND CURVES *) fun LineTo (h,p) = let val {x,y} = breakPoint p in call3 (getgdi "LineTo") (HDC,INT,INT) (BOOL) (h,x,y) end fun PolyBezier (h,pts) = let val count = List.length pts val ptarr = alloc count (Cstruct [Clong,Clong]) fun pl2a v n [] = () | pl2a v n (p :: rest) = let val {x,y} = breakPoint p val item = make_struct [(Clong,toClong x), (Clong,toClong y)] in ( assign (Cstruct [Clong,Clong]) (offset n (Cstruct [Clong,Clong]) v) item ; pl2a v (n+1) rest ) end val u = pl2a ptarr 0 pts in call3 (getgdi "PolyBezier") (HDC,POINTER,INT) (INT) (h,address ptarr,count) end fun PolyBezierTo (h,pts) = let val count = List.length pts val ptarr = alloc count (Cstruct [Clong,Clong]) fun pl2a v n [] = () | pl2a v n (p :: rest) = let val {x,y} = breakPoint p val item = make_struct [(Clong,toClong x), (Clong,toClong y)] in ( assign (Cstruct [Clong,Clong]) (offset n (Cstruct [Clong,Clong]) v) item ; pl2a v (n+1) rest ) end val u = pl2a ptarr 0 pts in call3 (getgdi "PolyBezierTo") (HDC,POINTER,INT) (INT) (h,address ptarr,count) end fun PolyDraw (h,ptlist) = let val count = List.length ptlist val ptarr = alloc count (Cstruct [Clong,Clong]) val farr = alloc count Cchar fun pl2a v n [] = () | pl2a v n ((p,f) :: rest) = let val {x,y} = breakPoint p val item = make_struct [(Clong,toClong x), (Clong,toClong y)] in ( assign (Cstruct [Clong,Clong]) (offset n (Cstruct [Clong,Clong]) v) item ; pl2a v (n+1) rest ) end val u = pl2a ptarr 0 ptlist fun f2a v n [] = () | f2a v n ((_,f) :: rest) = let val item = toCchar (SML90.chr (repE PointTypeE f)) in ( assign Cchar (offset n Cchar v) item ; f2a v (n+1) rest ) end val u = f2a ptarr 0 ptlist in call4 (getgdi "PolyDraw") (HDC,POINTER,POINTER,INT) (INT) (h,address ptarr,address farr,count) end fun Polyline (h,pts) = let val count = List.length pts val ptarr = alloc count (Cstruct [Clong,Clong]) fun pl2a v n [] = () | pl2a v n (p :: rest) = let val {x,y} = breakPoint p val item = make_struct [(Clong,toClong x), (Clong,toClong y)] in ( assign (Cstruct [Clong,Clong]) (offset n (Cstruct [Clong,Clong]) v) item ; pl2a v (n+1) rest ) end val u = pl2a ptarr 0 pts in call3 (getgdi "Polyline") (HDC,POINTER,INT) (BOOL) (h,address ptarr,count) end fun PolylineTo (h,pts) = let val count = List.length pts val ptarr = alloc count (Cstruct [Clong,Clong]) fun pl2a v n [] = () | pl2a v n (p :: rest) = let val {x,y} = breakPoint p val item = make_struct [(Clong,toClong x), (Clong,toClong y)] in ( assign (Cstruct [Clong,Clong]) (offset n (Cstruct [Clong,Clong]) v) item ; pl2a v (n+1) rest ) end val u = pl2a ptarr 0 pts in call3 (getgdi "PolylineTo") (HDC,POINTER,INT) (BOOL) (h,address ptarr,count) end (* PENS *) fun CreatePen (s,w,Rgb(r,g,b)) = call3 (getgdi "CreatePen") (PENSTYLE,INT,LONG) (HPEN) (s,w,PALETTERGB(r,g,b)) fun ExtCreatePen (ps,w,bs,Rgb(r,g,b),hs,intpairl) = let val len = List.length intpairl val log = make_struct [ (Clong,toClong (repE BrushStyleE bs)), (Clong,toClong (PALETTERGB(r,g,b))), (Clong,toClong (repE HatchStyleE hs))] val custom = alloc len Clong fun pl2a v n [] = () | pl2a v n ((l1,l2) :: rest) = let val item = toClong (MAKELONG(l1,l2)) in ( assign Clong (offset n Clong v) item ; pl2a v (n+1) rest ) end val u = pl2a custom 0 intpairl in call5 (getgdi "ExtCreatePen") (PENSTYLE,LONG,POINTER,LONG,POINTER) (HPEN) (ps,w,address log,len,address custom) end (* PATHS *) fun GetPath (h,ptlist) = let val count = List.length ptlist val ptarr = alloc count (Cstruct [Clong,Clong]) val farr = alloc count Cchar fun pl2a v n [] = () | pl2a v n ((p,f) :: rest) = let val {x,y} = breakPoint p val item = make_struct [(Clong,toClong x), (Clong,toClong y)] in ( assign (Cstruct [Clong,Clong]) (offset n (Cstruct [Clong,Clong]) v) item ; pl2a v (n+1) rest ) end val u = pl2a ptarr 0 ptlist fun f2a v n [] = () | f2a v n ((_,f) :: rest) = let val item = toCchar (SML90.chr (repE PointTypeE f)) in ( assign Cchar (offset n Cchar v) item ; f2a v (n+1) rest ) end val u = f2a ptarr 0 ptlist in call4 (getgdi "GetPath") (HDC,POINTER,POINTER,INT) (INT) (h,address ptarr,address farr,count) end (* REGIONS *) fun CreateEllipticRgn (rect) = let val {left,top,right,bottom} = breakRect rect in call4 (getgdi "CreateEllipticRgn") (LONG,LONG,LONG,LONG) (HRGN) (left,top,right,bottom) end fun CreateRectRgn (rect) = let val {left,top,right,bottom} = breakRect rect in call4 (getgdi "CreateRectRgn") (LONG,LONG,LONG,LONG) (HRGN) (left,top,right,bottom) end fun CreateRoundRectRgn (rect,w,h) = let val {left,top,right,bottom} = breakRect rect in call6 (getgdi "CreateRoundRectRgn") (LONG,LONG,LONG,LONG,WIDTH,HEIGHT) (HRGN) (left,top,right,bottom,w,h) end fun CreatePolygonRgn (pts,fmode) = let val count = List.length pts val ptarr = alloc count (Cstruct [Clong,Clong]) fun pl2a v n [] = () | pl2a v n (p :: rest) = let val {x,y} = breakPoint p val item = make_struct [(Clong,toClong x), (Clong,toClong y)] in ( assign (Cstruct [Clong,Clong]) (offset n (Cstruct [Clong,Clong]) v) item ; pl2a v (n+1) rest ) end val u = pl2a ptarr 0 pts in call3 (getgdi "CreatePolygonRgn") (POINTER,INT,POLYFILLMODE) (HPEN) (address ptarr,count,fmode) end fun ExtCreateRegion (x,rects,rectmain) = let val {r11,r12,r21,r22,tx,ty} = breakXForm x val xform = make_struct [ (Cfloat,toCfloat r11), (Cfloat,toCfloat r12), (Cfloat,toCfloat r21), (Cfloat,toCfloat r22), (Cfloat,toCfloat tx), (Cfloat,toCfloat ty) ] val count = List.length rects val rectarr = alloc count (Cstruct [Clong,Clong,Clong,Clong]) fun pl2a v n [] = () | pl2a v n (rect :: rest) = let val {left,top,right,bottom} = breakRect rect val item = make_struct [(Clong,toClong left), (Clong,toClong top), (Clong,toClong right), (Clong,toClong bottom)] in ( assign (Cstruct [Clong,Clong,Clong,Clong]) (offset n (Cstruct [Clong,Clong,Clong,Clong]) v) item ; pl2a v (n+1) rest ) end val u = pl2a rectarr 0 rects val {left,top,right,bottom} = breakRect rectmain val rgndata = make_struct [ (Clong,toClong 32), (Clong,toClong 1), (Clong,toClong count), (Clong,toClong 0 ), (Clong,toClong left), (Clong,toClong top), (Clong,toClong right), (Clong,toClong bottom), (Cvoid,rectarr) ] val struct_size = 64 + 16 * count in call3 (getgdi "ExtCreateRegion") (POINTER,INT,POINTER) (HRGN) (address xform,struct_size,address rgndata) end fun GetRegionData h = let val bufsize = call3 (getgdi "GetRegionData") (HRGN,LONG,POINTER) (LONG) (h,0,toCint 0) val rgndata = alloc 1 (Cstruct [Clong,Clong,Clong,Clong, Clong,Clong,Clong,Clong,Cvoid]) val res = call3 (getgdi "GetRegionData") (HRGN,LONG,POINTER) (LONG) (h,bufsize,address rgndata) in "not implemented" end (* BUTTONS *) (* COMBO BOXES *) (* ICONS *) (* KEYBOARD INPUT *) fun GetKeyboardState () = let val barr = alloc 256 Cchar val res = call1 (getuser "GetKeyboardState") (POINTER) (BOOL) (address barr) fun v2l v 0 = [] | v2l v i = let val vp = offset (i-1) Cchar v in (v2l v (i-1)) @ [SML90.ord (fromCchar vp) ] end in (res,VK (v2l barr 256)) end fun VkKeyScan ch = let val res = call1 (getuser "VkKeyScanA") (SHORT) (SHORT) (SML90.ord ch) val keycode = LOBYTE res val vkcode = HIBYTE res val r = ref [] : (ShiftState list) ref val u = ( if natAnd (1,vkcode) = 1 then r := (Shift :: (!r)) else (); if natAnd (2,vkcode) = 2 then r := (Ctrl :: (!r)) else (); if natAnd (4,vkcode) = 4 then r := (Alt :: (!r)) else () ) in (keycode,Comb (!r) ) end (* MENUS *) fun GetMenuCheckMarkDimensions () = let val res = call0 (getuser "GetMenuCheckMarkDimensions") () (LONG) () in (LOWORD res,HIWORD res) end fun GetMenuString (h,i,f) = let val s = alloc 100 Cchar val res = call5 (getuser "GetMenuString") (HMENU,INT,POINTER,INT,MENUFLAG) (INT) (h,i,address s,100,f) in fromCstring s end fun LoadMenuIndirect (mlist) = let val count = List.length mlist val menu = alloc count (Cstruct [Cshort,Cshort,Cpointer Cchar]) fun pl2a v n [] = () | pl2a v n (MID {option=flag, id= MenuID id, display=s} :: rest) = let val item = make_struct [(Cshort,toCshort (repE MenuFlagE flag)), (Cshort,toCshort id ), (Cpointer Cchar,toCstring s) ] in ( assign (Cstruct [Cshort,Cshort,Cpointer Cchar]) (offset n (Cstruct [Cshort,Cshort,Cpointer Cchar]) v) item ; pl2a v (n+1) rest ) end val u = pl2a menu 0 mlist in call1 (getuser "LoadMenuIndirectA") (POINTER) (HMENU) (address menu) end (* MOUSE INPUT *) (* PAINTING AND DRAWING *) fun BeginPaint h = let val space = alloc 14 Clong val res = call2 (getuser "BeginPaint") (HWND,POINTER) (HDC) (h,address space) in (MLPAINT space,res) end fun EndPaint(h,MLPAINT space) = call2 (getuser "EndPaint") (HWND,POINTER) (BOOL) (h,address space) fun GetBkColor h = let val r = call1 (getgdi "GetBkColor") (HDC) (LONG) h in Rgb(GetRValue r,GetGValue r,GetBValue r) end fun SetBkColor (h,Rgb(r,g,b)) = let val r = call2 (getgdi "SetBkColor") (HDC,LONG) (LONG) (h,PALETTERGB(r,g,b)) in Rgb(GetRValue r,GetGValue r,GetBValue r) end fun SetRectRgn (h,rect) = let val {left,top,right,bottom} = breakRect rect in call5 (getgdi "SetRectRgn") (HRGN,LONG,LONG,LONG,LONG) (BOOL) (h,left,top,right,bottom) end (* SCROLL BARS *) fun GetScrollRange (h,f) = let val mv = alloc 1 Cint val Mv = alloc 1 Cint val res = call4 (getuser "GetScrollRange") (HWND,SCROLLBARTYPE,POINTER,POINTER) (BOOL) (h,f,address mv,address Mv) in Range {min = fromCint mv, max = fromCint Mv} end (* TIMERS *) val KillTimer = call2 (getuser "KillTimer") (HWND,INT) (BOOL) fun SetTimer (h,i,dt) = call4 (getuser "SetTimer") (HWND,INT,INT,POINTER) (BOOL) (h,i,dt,toCint 0) (* LIST BOXES *) (* RECTANGLES *) (* Extra functions imported from X-Windows interface *) fun LeftR r = let val {left,top,right,bottom} = breakRect r in left end fun RightR r = let val {left,top,right,bottom} = breakRect r in right end fun TopR r = let val {left,top,right,bottom} = breakRect r in top end fun BottomR r = let val {left,top,right,bottom} = breakRect r in bottom end fun Width r = let val {left,top,right,bottom} = breakRect r in right - left end fun Height r = let val {left,top,right,bottom} = breakRect r in bottom - top end fun TopRLeftR r = let val {left,top,right,bottom} = breakRect r in mkPoint{ x=left ,y=top } end fun TopRRightR r = let val {left,top,right,bottom} = breakRect r in mkPoint { x=right,y=top } end fun BottomRLeftR r = let val {left,top,right,bottom} = breakRect r in mkPoint { x=left ,y=bottom } end fun BottomRRightR r = let val {left,top,right,bottom} = breakRect r in mkPoint { x=right,y=bottom } end fun IsProperRect r = let val {left,top,right,bottom} = breakRect r in left <= right andalso top <= bottom end fun mkArea {x,y,w,h} = mkRect {left=x,top=y,right=x+w,bottom=y+h} fun breakArea r = let val {left,top,right,bottom} = breakRect r in {x=left,y=top,w=right-left,h=bottom-top} end fun SplitRect r = let val { top,left,bottom,right } = breakRect r in ( mkPoint {x=left,y=top}, mkPoint {x=right,y=bottom}) end fun min a b = a fun max a b = a fun MakeRect p1 p2 = let val {x=x1,y=y1} = breakPoint p1 val {x=x2,y=y2} = breakPoint p2 in mkRect { left = min x1 x2, top = min y1 y2, right = max x1 x2, bottom = max y1 y2 } end fun Reflect r = let val {top,left,bottom,right} = breakRect r in mkRect { left = top, top = left, right = bottom, bottom = right } end fun NegativePoint p = let val {x,y} = breakPoint p in mkPoint {x = ~x, y= ~y} end datatype Section = Nothing | Section of Rectangle fun Intersection r1 r2 = let val ML = max (LeftR r1) (LeftR r2) val MT = max (TopR r1) (TopR r2) val MR = min (RightR r1) (RightR r2) val MB = min (BottomR r1) (BottomR r2) in if MR > ML andalso MB > MT then Section (mkRect {left=ML,top=MT,right=MR,bottom=MB}) else Nothing end fun Union r1 r2 = let val ML = min (LeftR r1) (LeftR r2) val MT = min (TopR r1) (TopR r2) val MR = max (RightR r1) (RightR r2) val MB = max (BottomR r1) (BottomR r2) in mkRect { left = ML, top = MT, right = MR, bottom = MB } end fun OutsetRect dist rect = let val {left,top,right,bottom} = breakRect rect in mkRect { left = left - dist, top = top - dist, right = right + dist, bottom = bottom + dist } end fun OffsetRect rect p = let val {x,y} = breakPoint p val { top,left,bottom,right } = breakRect rect in mkRect { left = left + x, top = top + y, right = right + x, bottom = bottom + y } end fun IncludePoint p rect = let val {x,y} = breakPoint p val {left,top,right,bottom} = breakRect rect in mkRect { left = min x left, top = min y top, right = max x right, bottom = max y bottom } end infix AddPoint SubtractPoint fun p1 AddPoint p2 = let val{x,y} = breakPoint p1 val{x=dx,y=dy} = breakPoint p2 in mkPoint { x = x + dx, y = y + dy } end fun p1 SubtractPoint p2 = let val{x,y} = breakPoint p1 val{x=dx,y=dy} = breakPoint p2 in mkPoint { x = x - dx, y = y - dy } end infix Inside Overlap Within LeftROf RightROf AboveOf BelowOf HorizontallyAbutting VerticallyAbutting fun r1 Inside r2 = ( LeftR r1 >= LeftR r2 andalso RightR r1 <= RightR r2 andalso TopR r1 >= TopR r2 andalso BottomR r1 <= BottomR r2 ) fun r1 Overlap r2 = (case (Intersection r1 r2) of Nothing => false | Section _ => true ) fun p Within rect = let val {x,y} = breakPoint p in ( x >= LeftR rect andalso y >= TopR rect andalso x < RightR rect andalso y < BottomR rect ) end fun p LeftROf rect = let val {x,y} = breakPoint p in (x < LeftR rect) end fun p RightROf rect = let val {x,y} = breakPoint p in (x >= RightR rect) end fun p AboveOf rect = let val {x,y} = breakPoint p in (y < TopR rect) end fun p BelowOf rect = let val {x,y} = breakPoint p in (y >= BottomR rect) end fun a HorizontallyAbutting b = ( (RightR a = LeftR b orelse LeftR a = RightR b) andalso (TopR a <= TopR b) andalso (BottomR a >= BottomR b) ) fun a VerticallyAbutting b = ( (BottomR a = TopR b orelse TopR a = BottomR b) andalso (LeftR a <= LeftR b) andalso (RightR a >= RightR b) ) val origin = mkPoint { x=0,y=0 }; val emptyArea = mkArea {x=0,y=0,w=0,h=0} val unitArea = mkArea { x=0,y=0,w=1,h=1 }; (* WINDOWS *) fun LoadIcon id = let val instance = Getv ("hinst",HANDLE) in call2 (getuser "LoadIconA") (HANDLE,ICONIDENTIFIER) (HICON) (MLHANDLE (toCint 0),id) end fun LoadCursor id = let val instance = Getv ("hinst",HANDLE) in call2 (getuser "LoadCursorA") (HANDLE,CURSORIDENTIFIER) (HCURSOR) (MLHANDLE (toCint 0),id) end fun ShowWindow h1 = let val cmdshow = Getv ("cmdshow",INT) fun ShowWin (whandle,cmdshow) = call2 (getuser "ShowWindow") (HWND,INT) (BOOL) (h1,cmdshow) in ShowWin (h1,cmdshow) end; fun GetWindowPlacement h = let val p = alloc 1 (Cstruct [Cint,Cint,Cint, Clong,Clong,Clong,Clong, Clong,Clong,Clong,Clong]) val r = call2 (getuser "GetWindowPlacement") (HWND,POINTER) (BOOL) (h,address p) val (le,f,sh,minx,miny,maxx,maxy,l,t,r,b) = break_struct11 [Cint,Cint,Cint, Clong,Clong,Clong,Clong, Clong,Clong,Clong,Clong] p in (absE WindowPlacementFlagE (fromCint f), absE ShowWindowModeE (fromCint sh), mkPoint {x=fromClong minx,y=fromClong miny}, mkPoint {x=fromClong maxx,y=fromClong maxy}, mkRect {left=fromClong l,top=fromClong t, right=fromClong r,bottom=fromClong b}) end fun SetWindowPlacement (h,f,sh,p1,p2,rect) = let val {left,top,right,bottom} = breakRect rect val {x=x1,y=y1} = breakPoint p1 val {x=x2,y=y2} = breakPoint p2 val p = make_struct ([(Cint,toCint 48 ), (Cint,toCint (repE WindowPlacementFlagE f) ), (Cint,toCint (repE ShowWindowModeE sh ) ), (Clong,toClong x1), (Clong,toClong y1), (Clong,toClong x2), (Clong,toClong y2), (Clong,toClong left), (Clong,toClong top), (Clong,toClong right), (Clong,toClong bottom) ]) in call2 (getuser "SetWindowPlacement") (HWND,POINTER) (BOOL) (h,address p) end end end; polyml.5.2.1/mlsource/extra/Win/Original/UserFnFct.ML0000644000175000017500000010540410313043376021346 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) signature importConstTypeSig = sig type 'a Conversion type TextAlign type EnumObject type DeviceItem type DeviceContextFlag type DrawTextMode type SetWindowPositionStyle type StockObjectType type RegionOperation type SystemPaletteUse type MapMode type PolyFillMode type DialogBoxFlag type VirtualKey type MenuFlag type TrackPopMenu type DCBound type EnableScrollBarFlag type ScrollBarType type ScrollWindowFlag type GetWindowFlag type ShowWindowMode type WindowPlacementFlag type StretchMode type ResultRegion type GraphicsMode type RasterOperation type BitmapOption type RasterOpCode type XFormType type IconIdentifier type RedrawWindowFlag type BkMode type MessageBoxValue type MessageBoxIdentifier structure UpperCaseConversions : sig val TEXTALIGN : TextAlign Conversion val ENUMOBJECT : EnumObject Conversion val DEVICEITEM : DeviceItem Conversion val DEVICECONTEXTFLAG : DeviceContextFlag Conversion val DRAWTEXTMODE : DrawTextMode Conversion val SETWINDOWPOSITIONSTYLE : SetWindowPositionStyle Conversion val STOCKOBJECTTYPE : StockObjectType Conversion val REGIONOPERATION : RegionOperation Conversion val SYSTEMPALETTEUSE : SystemPaletteUse Conversion val MAPMODE : MapMode Conversion val POLYFILLMODE : PolyFillMode Conversion val DIALOGBOXFLAG : DialogBoxFlag Conversion val VIRTUALKEY : VirtualKey Conversion val MENUFLAG : MenuFlag Conversion val TRACKPOPMENU : TrackPopMenu Conversion val DCBOUND : DCBound Conversion val ENABLESCROLLBARFLAG : EnableScrollBarFlag Conversion val SCROLLBARTYPE : ScrollBarType Conversion val SCROLLWINDOWFLAG : ScrollWindowFlag Conversion val GETWINDOWFLAG : GetWindowFlag Conversion val SHOWWINDOWMODE : ShowWindowMode Conversion val WINDOWPLACEMENTFLAG : WindowPlacementFlag Conversion val STRETCHMODE : StretchMode Conversion val RESULTREGION : ResultRegion Conversion val GRAPHICSMODE : GraphicsMode Conversion val RASTEROPERATION : RasterOperation Conversion val BITMAPOPTION : BitmapOption Conversion val RASTEROPCODE : RasterOpCode Conversion val ICONIDENTIFIER : IconIdentifier Conversion val REDRAWWINDOWFLAG : RedrawWindowFlag Conversion val BKMODE : BkMode Conversion val MESSAGEBOXVALUE : MessageBoxValue Conversion val MESSAGEBOXIDENTIFIER : MessageBoxIdentifier Conversion end end; signature importCInterfaceSig = sig type vol type Ctype type 'a Conversion type sym type dylib val alloc : int -> Ctype -> vol val address : vol -> vol val deref : vol -> vol val offset : int -> Ctype -> vol -> vol val assign : Ctype -> vol -> vol -> unit val Cpointer : Ctype -> Ctype val Cvoid : Ctype val breakConversion : 'a Conversion -> (vol -> 'a) * ('a -> vol) * Ctype val call_sym : sym -> (Ctype * vol) list -> Ctype -> vol val load_lib : string -> dylib val load_sym : dylib -> string -> sym val CHAR : string Conversion val DOUBLE : real Conversion val FLOAT : real Conversion val INT : int Conversion val LONG : int Conversion val SHORT : int Conversion val STRING : string Conversion val VOID : unit Conversion val BOOL : bool Conversion val POINTER : vol Conversion end; signature importTypeSig = sig type 'a Conversion type ForceBackground type ClassName type WindowName type Rectangle type Xcoord type Ycoord type Xoffset type Yoffset type Width type Height type Index type SuccessState type RWpermission type MLHWND type DCinstance type MLHDC type MLHGDIOBJ type MLHBITMAP type MLHRGN type MLHBRUSH type MLHPALETTE type MLHICON type MLHMENU type MLHDWP type Fmf type ListBox type StaticControl type MenuItem val HWND : MLHWND Conversion val HDC : MLHDC Conversion val HGDIOBJ : MLHGDIOBJ Conversion val HBITMAP : MLHBITMAP Conversion val HRGN : MLHRGN Conversion val HBRUSH : MLHBRUSH Conversion val HPALETTE : MLHPALETTE Conversion val HICON : MLHICON Conversion val HMENU : MLHMENU Conversion val HDWP : MLHDWP Conversion type Point type Size type XForm val POINT : Point Conversion val SIZE : Size Conversion val XFORM : XForm Conversion val RECTANGLE : Rectangle Conversion val XCOORD : Xcoord Conversion val YCOORD : Ycoord Conversion val XOFFSET : Xoffset Conversion val YOFFSET : Yoffset Conversion val WIDTH : Width Conversion val HEIGHT : Height Conversion val INDEX : Index Conversion val RWPERMISSION : RWpermission Conversion val FONTMAPPERFLAG : Fmf Conversion val SUCCESSSTATE : SuccessState Conversion val DCINSTANCE : DCinstance Conversion val FORCEBACKGROUND : ForceBackground Conversion val LISTBOX : ListBox Conversion val STATICCONTROL : StaticControl Conversion val MENUITEM : int Conversion end; signature importDirSig = sig val wpolyname : string val gdilibname : string val userlibname : string end; functor UserFnFct ( structure Dir : importDirSig structure CInterface : importCInterfaceSig structure ConstType : importConstTypeSig structure Type : importTypeSig sharing type CInterface.Conversion = ConstType.Conversion = Type.Conversion ) = struct local open CInterface open Dir fun call name = call_sym (load_sym (load_lib userlibname) name) fun rcall_IIIII name CR (C1,C2,C3,C4,C5) (a1,a2,a3,a4,a5) = let val (from1,to1,ctype1) = breakConversion C1 val (from2,to2,ctype2) = breakConversion C2 val (from3,to3,ctype3) = breakConversion C3 val (from4,to4,ctype4) = breakConversion C4 val (from5,to5,ctype5) = breakConversion C5 val (fromR,toR,ctypeR) = breakConversion CR val va1 = to1 a1 val va2 = to2 a2 val va3 = to3 a3 val va4 = to4 a4 val va5 = to5 a5 val res = call name [(ctype1,va1),(ctype2,va2),(ctype3,va3),(ctype4,va4),(ctype5,va5)] ctypeR in (fromR res) end fun rcall_IIIIIR name CR (C1,C2,C3,C4,C5,C6) (a1,a2,a3,a4,a5,a6) = let val (from1,to1,ctype1) = breakConversion C1 val (from2,to2,ctype2) = breakConversion C2 val (from3,to3,ctype3) = breakConversion C3 val (from4,to4,ctype4) = breakConversion C4 val (from5,to5,ctype5) = breakConversion C5 val (from6,to6,ctype6) = breakConversion C6 val (fromR,toR,ctypeR) = breakConversion CR val va1 = to1 a1 val va2 = to2 a2 val va3 = to3 a3 val va4 = to4 a4 val va5 = to5 a5 val va6 = address (to6 a6) val res = call name [(ctype1,va1),(ctype2,va2),(ctype3,va3),(ctype4,va4),(ctype5,va5),(Cpointer ctype6,va6)] ctypeR in (fromR res) end fun rcall_IIW name CR (C1,C2,C3) (a1,a2) = let val (from1,to1,ctype1) = breakConversion C1 val (from2,to2,ctype2) = breakConversion C2 val (from3,to3,ctype3) = breakConversion C3 val (fromR,toR,ctypeR) = breakConversion CR val va1 = to1 a1 val va2 = to2 a2 val va3 = address (alloc 1 ctype3) val res = call name [(ctype1,va1),(ctype2,va2),(Cpointer ctype3,va3)] ctypeR in (fromR res,from3 (deref va3)) end fun rcall_IRII name CR (C1,C2,C3,C4) (a1,a2,a3,a4) = let val (from1,to1,ctype1) = breakConversion C1 val (from2,to2,ctype2) = breakConversion C2 val (from3,to3,ctype3) = breakConversion C3 val (from4,to4,ctype4) = breakConversion C4 val (fromR,toR,ctypeR) = breakConversion CR val va1 = to1 a1 val va2 = address (to2 a2) val va3 = to3 a3 val va4 = to4 a4 val res = call name [(ctype1,va1),(Cpointer ctype2,va2),(ctype3,va3),(ctype4,va4)] ctypeR in (fromR res) end fun rcall_IRI name CR (C1,C2,C3) (a1,a2,a3) = let val (from1,to1,ctype1) = breakConversion C1 val (from2,to2,ctype2) = breakConversion C2 val (from3,to3,ctype3) = breakConversion C3 val (fromR,toR,ctypeR) = breakConversion CR val va1 = to1 a1 val va2 = address (to2 a2) val va3 = to3 a3 val res = call name [(ctype1,va1),(Cpointer ctype2,va2),(ctype3,va3)] ctypeR in (fromR res) end fun rcall_IR name CR (C1,C2) (a1,a2) = let val (from1,to1,ctype1) = breakConversion C1 val (from2,to2,ctype2) = breakConversion C2 val (fromR,toR,ctypeR) = breakConversion CR val va1 = to1 a1 val va2 = address (to2 a2) val res = call name [(ctype1,va1),(Cpointer ctype2,va2)] ctypeR in (fromR res) end fun vcall_III name (C1,C2,C3) (a1,a2,a3) = let val (from1,to1,ctype1) = breakConversion C1 val (from2,to2,ctype2) = breakConversion C2 val (from3,to3,ctype3) = breakConversion C3 val va1 = to1 a1 val va2 = to2 a2 val va3 = to3 a3 val res = call name [(ctype1,va1),(ctype2,va2),(ctype3,va3)] Cvoid in () end fun rcall_IIII name CR (C1,C2,C3,C4) (a1,a2,a3,a4) = let val (from1,to1,ctype1) = breakConversion C1 val (from2,to2,ctype2) = breakConversion C2 val (from3,to3,ctype3) = breakConversion C3 val (from4,to4,ctype4) = breakConversion C4 val (fromR,toR,ctypeR) = breakConversion CR val va1 = to1 a1 val va2 = to2 a2 val va3 = to3 a3 val va4 = to4 a4 val res = call name [(ctype1,va1),(ctype2,va2),(ctype3,va3),(ctype4,va4)] ctypeR in (fromR res) end fun rcall_IIIRRIW name CR (C1,C2,C3,C4,C5,C6,C7) (a1,a2,a3,a4,a5,a6) = let val (from1,to1,ctype1) = breakConversion C1 val (from2,to2,ctype2) = breakConversion C2 val (from3,to3,ctype3) = breakConversion C3 val (from4,to4,ctype4) = breakConversion C4 val (from5,to5,ctype5) = breakConversion C5 val (from6,to6,ctype6) = breakConversion C6 val (from7,to7,ctype7) = breakConversion C7 val (fromR,toR,ctypeR) = breakConversion CR val va1 = to1 a1 val va2 = to2 a2 val va3 = to3 a3 val va4 = address (to4 a4) val va5 = address (to5 a5) val va6 = to6 a6 val va7 = address (alloc 1 ctype7) val res = call name [(ctype1,va1),(ctype2,va2),(ctype3,va3),(Cpointer ctype4,va4),(Cpointer ctype5,va5), (ctype6,va6),(Cpointer ctype7,va7)] ctypeR in (fromR res,from7 (deref va7)) end fun rcall_IIIRR name CR (C1,C2,C3,C4,C5) (a1,a2,a3,a4,a5) = let val (from1,to1,ctype1) = breakConversion C1 val (from2,to2,ctype2) = breakConversion C2 val (from3,to3,ctype3) = breakConversion C3 val (from4,to4,ctype4) = breakConversion C4 val (from5,to5,ctype5) = breakConversion C5 val (fromR,toR,ctypeR) = breakConversion CR val va1 = to1 a1 val va2 = to2 a2 val va3 = to3 a3 val va4 = address (to4 a4) val va5 = address (to5 a5) val res = call name [(ctype1,va1),(ctype2,va2),(ctype3,va3),(Cpointer ctype4,va4),(Cpointer ctype5,va5)] ctypeR in (fromR res) end fun rcall_IIIRRIIW name CR (C1,C2,C3,C4,C5,C6,C7,C8) (a1,a2,a3,a4,a5,a6,a7) = let val (from1,to1,ctype1) = breakConversion C1 val (from2,to2,ctype2) = breakConversion C2 val (from3,to3,ctype3) = breakConversion C3 val (from4,to4,ctype4) = breakConversion C4 val (from5,to5,ctype5) = breakConversion C5 val (from6,to6,ctype6) = breakConversion C6 val (from7,to7,ctype7) = breakConversion C7 val (from8,to8,ctype8) = breakConversion C8 val (fromR,toR,ctypeR) = breakConversion CR val va1 = to1 a1 val va2 = to2 a2 val va3 = to3 a3 val va4 = address (to4 a4) val va5 = address (to5 a5) val va6 = to6 a6 val va7 = to7 a7 val va8 = address (alloc 1 ctype8) val res = call name [(ctype1,va1),(ctype2,va2),(ctype3,va3),(Cpointer ctype4,va4),(Cpointer ctype5,va5), (ctype6,va6),(ctype7,va7),(Cpointer ctype8,va8)] ctypeR in (fromR res,from8 (deref va8)) end fun rcall_III name CR (C1,C2,C3) (a1,a2,a3) = let val (from1,to1,ctype1) = breakConversion C1 val (from2,to2,ctype2) = breakConversion C2 val (from3,to3,ctype3) = breakConversion C3 val (fromR,toR,ctypeR) = breakConversion CR val va1 = to1 a1 val va2 = to2 a2 val va3 = to3 a3 val res = call name [(ctype1,va1),(ctype2,va2),(ctype3,va3)] ctypeR in (fromR res) end fun rcall_RR name CR (C1,C2) (a1,a2) = let val (from1,to1,ctype1) = breakConversion C1 val (from2,to2,ctype2) = breakConversion C2 val (fromR,toR,ctypeR) = breakConversion CR val va1 = address (to1 a1) val va2 = address (to2 a2) val res = call name [(Cpointer ctype1,va1),(Cpointer ctype2,va2)] ctypeR in (fromR res) end fun rcall_WRRI name CR (C1,C2,C3,C4) (a2,a3,a4) = let val (from1,to1,ctype1) = breakConversion C1 val (from2,to2,ctype2) = breakConversion C2 val (from3,to3,ctype3) = breakConversion C3 val (from4,to4,ctype4) = breakConversion C4 val (fromR,toR,ctypeR) = breakConversion CR val va1 = address (alloc 1 ctype1) val va2 = address (to2 a2) val va3 = address (to3 a3) val va4 = to4 a4 val res = call name [(Cpointer ctype1,va1),(Cpointer ctype2,va2),(Cpointer ctype3,va3),(ctype4,va4)] ctypeR in (fromR res,from1 (deref va1)) end fun rcall_R name CR (C1) (a1) = let val (from1,to1,ctype1) = breakConversion C1 val (fromR,toR,ctypeR) = breakConversion CR val va1 = address (to1 a1) val res = call name [(Cpointer ctype1,va1)] ctypeR in (fromR res) end fun rcall_MII name CR (C1,C2,C3) (a1,a2,a3) = let val (from1,to1,ctype1) = breakConversion C1 val (from2,to2,ctype2) = breakConversion C2 val (from3,to3,ctype3) = breakConversion C3 val (fromR,toR,ctypeR) = breakConversion CR val va1 = address (to1 a1) val va2 = to2 a2 val va3 = to3 a3 val res = call name [(Cpointer ctype1,va1),(ctype2,va2),(ctype3,va3)] ctypeR in (fromR res,from1 (deref va1)) end fun rcall_RI name CR (C1,C2) (a1,a2) = let val (from1,to1,ctype1) = breakConversion C1 val (from2,to2,ctype2) = breakConversion C2 val (fromR,toR,ctypeR) = breakConversion CR val va1 = address (to1 a1) val va2 = to2 a2 val res = call name [(Cpointer ctype1,va1),(ctype2,va2)] ctypeR in (fromR res) end fun rcall_IIIIW name CR (C1,C2,C3,C4,C5) (a1,a2,a3,a4) = let val (from1,to1,ctype1) = breakConversion C1 val (from2,to2,ctype2) = breakConversion C2 val (from3,to3,ctype3) = breakConversion C3 val (from4,to4,ctype4) = breakConversion C4 val (from5,to5,ctype5) = breakConversion C5 val (fromR,toR,ctypeR) = breakConversion CR val va1 = to1 a1 val va2 = to2 a2 val va3 = to3 a3 val va4 = to4 a4 val va5 = address (alloc 1 ctype5) val res = call name [(ctype1,va1),(ctype2,va2),(ctype3,va3),(ctype4,va4),(Cpointer ctype5,va5)] ctypeR in (fromR res,from5 (deref va5)) end fun rcall_W name CR (C1) () = let val (from1,to1,ctype1) = breakConversion C1 val (fromR,toR,ctypeR) = breakConversion CR val va1 = address (alloc 1 ctype1) val res = call name [(Cpointer ctype1,va1)] ctypeR in (fromR res,from1 (deref va1)) end fun rcall_WRR name CR (C1,C2,C3) (a2,a3) = let val (from1,to1,ctype1) = breakConversion C1 val (from2,to2,ctype2) = breakConversion C2 val (from3,to3,ctype3) = breakConversion C3 val (fromR,toR,ctypeR) = breakConversion CR val va1 = address (alloc 1 ctype1) val va2 = address (to2 a2) val va3 = address (to3 a3) val res = call name [(Cpointer ctype1,va1),(Cpointer ctype2,va2),(Cpointer ctype3,va3)] ctypeR in (fromR res,from1 (deref va1)) end fun rcall_IIIIIIII name CR (C1,C2,C3,C4,C5,C6,C7,C8) (a1,a2,a3,a4,a5,a6,a7,a8) = let val (from1,to1,ctype1) = breakConversion C1 val (from2,to2,ctype2) = breakConversion C2 val (from3,to3,ctype3) = breakConversion C3 val (from4,to4,ctype4) = breakConversion C4 val (from5,to5,ctype5) = breakConversion C5 val (from6,to6,ctype6) = breakConversion C6 val (from7,to7,ctype7) = breakConversion C7 val (from8,to8,ctype8) = breakConversion C8 val (fromR,toR,ctypeR) = breakConversion CR val va1 = to1 a1 val va2 = to2 a2 val va3 = to3 a3 val va4 = to4 a4 val va5 = to5 a5 val va6 = to6 a6 val va7 = to7 a7 val va8 = to8 a8 val res = call name [(ctype1,va1),(ctype2,va2),(ctype3,va3),(ctype4,va4),(ctype5,va5),(ctype6,va6),(ctype7,va7), (ctype8,va8)] ctypeR in (fromR res) end fun rcall_IW name CR (C1,C2) (a1) = let val (from1,to1,ctype1) = breakConversion C1 val (from2,to2,ctype2) = breakConversion C2 val (fromR,toR,ctypeR) = breakConversion CR val va1 = to1 a1 val va2 = address (alloc 1 ctype2) val res = call name [(ctype1,va1),(Cpointer ctype2,va2)] ctypeR in (fromR res,from2 (deref va2)) end fun rcall_IIIIII name CR (C1,C2,C3,C4,C5,C6) (a1,a2,a3,a4,a5,a6) = let val (from1,to1,ctype1) = breakConversion C1 val (from2,to2,ctype2) = breakConversion C2 val (from3,to3,ctype3) = breakConversion C3 val (from4,to4,ctype4) = breakConversion C4 val (from5,to5,ctype5) = breakConversion C5 val (from6,to6,ctype6) = breakConversion C6 val (fromR,toR,ctypeR) = breakConversion CR val va1 = to1 a1 val va2 = to2 a2 val va3 = to3 a3 val va4 = to4 a4 val va5 = to5 a5 val va6 = to6 a6 val res = call name [(ctype1,va1),(ctype2,va2),(ctype3,va3),(ctype4,va4),(ctype5,va5),(ctype6,va6)] ctypeR in (fromR res) end fun rcall_IIIIIII name CR (C1,C2,C3,C4,C5,C6,C7) (a1,a2,a3,a4,a5,a6,a7) = let val (from1,to1,ctype1) = breakConversion C1 val (from2,to2,ctype2) = breakConversion C2 val (from3,to3,ctype3) = breakConversion C3 val (from4,to4,ctype4) = breakConversion C4 val (from5,to5,ctype5) = breakConversion C5 val (from6,to6,ctype6) = breakConversion C6 val (from7,to7,ctype7) = breakConversion C7 val (fromR,toR,ctypeR) = breakConversion CR val va1 = to1 a1 val va2 = to2 a2 val va3 = to3 a3 val va4 = to4 a4 val va5 = to5 a5 val va6 = to6 a6 val va7 = to7 a7 val res = call name [(ctype1,va1),(ctype2,va2),(ctype3,va3),(ctype4,va4),(ctype5,va5),(ctype6,va6),(ctype7,va7)] ctypeR in (fromR res) end fun rcall_O name CR (C0) () = let val (fromR,toR,ctypeR) = breakConversion CR val res = call name [] ctypeR in (fromR res) end fun rcall_I name CR (C1) (a1) = let val (from1,to1,ctype1) = breakConversion C1 val (fromR,toR,ctypeR) = breakConversion CR val va1 = to1 a1 val res = call name [(ctype1,va1)] ctypeR in (fromR res) end fun rcall_II name CR (C1,C2) (a1,a2) = let val (from1,to1,ctype1) = breakConversion C1 val (from2,to2,ctype2) = breakConversion C2 val (fromR,toR,ctypeR) = breakConversion CR val va1 = to1 a1 val va2 = to2 a2 val res = call name [(ctype1,va1),(ctype2,va2)] ctypeR in (fromR res) end fun rcall_IIIIIW name CR (C1,C2,C3,C4,C5,C6) (a1,a2,a3,a4,a5) = let val (from1,to1,ctype1) = breakConversion C1 val (from2,to2,ctype2) = breakConversion C2 val (from3,to3,ctype3) = breakConversion C3 val (from4,to4,ctype4) = breakConversion C4 val (from5,to5,ctype5) = breakConversion C5 val (from6,to6,ctype6) = breakConversion C6 val (fromR,toR,ctypeR) = breakConversion CR val va1 = to1 a1 val va2 = to2 a2 val va3 = to3 a3 val va4 = to4 a4 val va5 = to5 a5 val va6 = address (alloc 1 ctype6) val res = call name [(ctype1,va1),(ctype2,va2),(ctype3,va3),(ctype4,va4),(ctype5,va5),(Cpointer ctype6,va6)] ctypeR in (fromR res,from6 (deref va6)) end in open ConstType open UpperCaseConversions open Type val LoadBitmap = rcall_II "LoadBitmapA" HBITMAP (BITMAPOPTION,STRING) val CheckDlgButton = rcall_III "CheckDlgButton" SUCCESSSTATE (HWND,INT,INT) val CheckRadioButton = rcall_IIII "CheckRadioButton" SUCCESSSTATE (HWND,INT,INT,INT) val IsDlgButtonChecked = rcall_II "IsDlgButtonChecked" INT (HWND,INT) val DlgDirListComboBox = rcall_IIIII "DlgDirListComboBox" SUCCESSSTATE (HWND,STRING,INT,INT,DIALOGBOXFLAG) val DlgDirSelectComboBoxEx = rcall_IIII "DlgDirSelectComboBoxEx" SUCCESSSTATE (HWND,STRING,INT,INT) val DlgDirSelectEx = rcall_IIII "DlgDirSelectEx" SUCCESSSTATE (HWND,STRING,INT,INT) val ArrangeIconicWindows = rcall_I "ArrangeIconicWindows" INT (HWND) val DestroyIcon = rcall_I "DestroyIcon" SUCCESSSTATE (HICON) val DrawIcon = rcall_IIII "DrawIcon" SUCCESSSTATE (HDC,XCOORD,YCOORD,HICON) val IsIconic = rcall_I "IsIconic" BOOL (HWND) val OpenIcon = rcall_I "OpenIcon" SUCCESSSTATE (HWND) val EnableWindow = rcall_II "EnableWindow" SUCCESSSTATE (HWND,BOOL) val GetDC = rcall_I "GetDC" HDC (HWND) val ReleaseDC = rcall_II "ReleaseDC" BOOL (HWND,HDC) val GetActiveWindow = rcall_O "GetActiveWindow" HWND (VOID) val GetFocus = rcall_O "GetFocus" HWND (VOID) val IsWindowEnabled = rcall_I "IsWindowEnabled" BOOL (HWND) val RegisterHotKey = rcall_IIII "RegisterHotKey" SUCCESSSTATE (HWND,INT,INT,VIRTUALKEY) val SetActiveWindow = rcall_I "SetActiveWindow" HWND (HWND) val SetFocus = rcall_I "SetFocus" HWND (HWND) val AppendMenu = rcall_IIII "AppendMenuA" SUCCESSSTATE (HMENU,MENUFLAG,INT,STRING) val AppendSubMenu = rcall_IIII "AppendMenuA" SUCCESSSTATE (HMENU,MENUFLAG,HMENU,STRING) val CheckMenuItem = rcall_III "CheckMenuItem" MENUFLAG (HMENU,INT,MENUFLAG) val CreateMenu = rcall_O "CreateMenu" HMENU (VOID) val CreatePopupMenu = rcall_O "CreatePopupMenu" HMENU (VOID) val DeleteMenu = rcall_III "DeleteMenu" SUCCESSSTATE (HMENU,INT,MENUFLAG) val DestroyMenu = rcall_I "DestroyMenu" SUCCESSSTATE (HMENU) val DrawMenuBar = rcall_I "DrawMenuBar" SUCCESSSTATE (HWND) val EnableMenuItem = rcall_III "EnableMenuItem" MENUFLAG (HMENU,INT,MENUFLAG) val GetMenu = rcall_I "GetMenu" HMENU (HWND) val GetMenuItemCount = rcall_I "GetMenuItemCount" INT (HMENU) val GetMenuItemID = rcall_II "GetMenuItemID" INT (HMENU,INT) val GetMenuState = rcall_III "GetMenuState" MENUFLAG (HMENU,INT,MENUFLAG) val GetSubMenu = rcall_II "GetSubMenu" HMENU (HMENU,INT) val GetSystemMenu = rcall_II "GetSystemMenu" HMENU (HWND,BOOL) val HiliteMenuItem = rcall_IIII "HiliteMenuItem" BOOL (HWND,HMENU,INT,MENUFLAG) val IsMenu = rcall_I "IsMenu" BOOL (HMENU) val SetMenu = rcall_II "SetMenu" SUCCESSSTATE (HWND,HMENU) val SetMenuItemBitmaps = rcall_IIIII "SetMenuItemBitmaps" SUCCESSSTATE (HMENU,INT,MENUFLAG,HBITMAP,HBITMAP) val InsertMenu = rcall_IIIII "InsertMenuA" SUCCESSSTATE (HMENU,MENUITEM,MENUFLAG,MENUITEM,STRING) val ModifyMenu = rcall_IIIII "ModifyMenuA" SUCCESSSTATE (HMENU,MENUITEM,MENUFLAG,MENUITEM,STRING) val RemoveMenu = rcall_III "RemoveMenu" SUCCESSSTATE (HMENU,MENUITEM,MENUFLAG) val TrackPopupMenu = rcall_IIIIIR "TrackPopupMenu" SUCCESSSTATE (HMENU,TRACKPOPMENU,XCOORD,YCOORD,HWND,RECTANGLE) val GetCapture = rcall_O "GetCapture" HWND (VOID) val ReleaseCapture = rcall_O "ReleaseCapture" SUCCESSSTATE (VOID) val SetCapture = rcall_I "SetCapture" HWND (HWND) val SwapMouseButton = rcall_I "SwapMouseButton" SUCCESSSTATE (BOOL) val DrawFocusRect = rcall_IR "DrawFocusRect" SUCCESSSTATE (HDC,RECTANGLE) val GetBoundsRect = rcall_IIW "GetBoundsRect" DCBOUND (HDC,DCBOUND,RECTANGLE) val InvalidateRect = rcall_IRI "InvalidateRect" SUCCESSSTATE (HWND,RECTANGLE,BOOL) val RedrawWindow = rcall_IRII "RedrawWindow" SUCCESSSTATE (HWND,RECTANGLE,HRGN,REDRAWWINDOWFLAG) val SetBoundsRect = rcall_IRI "SetBoundsRect" DCBOUND (HDC,RECTANGLE,DCBOUND) val ValidateRect = rcall_IR "ValidateRect" SUCCESSSTATE (HWND,RECTANGLE) val ExcludeUpdateRgn = rcall_II "ExcludeUpdateRgn" RESULTREGION (HDC,HWND) val GdiFlush = rcall_O "GdiFlush" SUCCESSSTATE (VOID) val GdiGetBatchLimit = rcall_O "GdiGetBatchLimit" INT (VOID) val GdiSetBatchLimit = rcall_I "GdiSetBatchLimit" INT (INT) val GetBkMode = rcall_I "GetBkMode" BKMODE (HDC) val GetROP2 = rcall_I "GetROP2" RASTEROPERATION (HDC) val GetUpdateRgn = rcall_III "GetUpdateRgn" RESULTREGION (HWND,HRGN,BOOL) val GetWindowDC = rcall_I "GetWindowDC" HDC (HWND) val InvalidateRgn = vcall_III "InvalidateRgn" (HWND,HRGN,BOOL) val LockWindowUpdate = rcall_I "LockWindowUpdate" SUCCESSSTATE (HWND) val SetBkMode = rcall_II "SetBkMode" BKMODE (HDC,BKMODE) val SetROP2 = rcall_II "SetROP2" RASTEROPERATION (HDC,RASTEROPERATION) val UpdateWindow = rcall_I "UpdateWindow" SUCCESSSTATE (HWND) val ValidateRgn = rcall_II "ValidateRgn" SUCCESSSTATE (HWND,HRGN) val WindowFromDC = rcall_I "WindowFromDC" HWND (HDC) val EnableScrollBar = rcall_III "EnableScrollBar" SUCCESSSTATE (HWND,SCROLLBARTYPE,ENABLESCROLLBARFLAG) val GetScrollPos = rcall_II "GetScrollPos" INT (HWND,SCROLLBARTYPE) val SetScrollRange = rcall_IIIII "SetScrollRange" BOOL (HWND,SCROLLBARTYPE,INT,INT,BOOL) val SetScrollPos = rcall_IIII "SetScrollPos" INT (HWND,SCROLLBARTYPE,INT,BOOL) val ShowScrollBar = rcall_III "ShowScrollBar" SUCCESSSTATE (HWND,SCROLLBARTYPE,BOOL) val ScrollDC = rcall_IIIRRIW "ScrollDC" SUCCESSSTATE (HDC,INT,INT,RECTANGLE,RECTANGLE,HRGN,RECTANGLE) val ScrollWindow = rcall_IIIRR "ScrollWindow" SUCCESSSTATE (HWND,INT,INT,RECTANGLE,RECTANGLE) val ScrollWindowEx = rcall_IIIRRIIW "ScrollWindowEx" SUCCESSSTATE (HWND,INT,INT,RECTANGLE,RECTANGLE,HRGN,SCROLLWINDOWFLAG,RECTANGLE) val DlgDirList = rcall_IIIIII "DlgDirListA" SUCCESSSTATE (HWND,STRING,LISTBOX,STATICCONTROL,DIALOGBOXFLAG,STRING) val DlgDirSelectEx = rcall_III "DlgDirSelectExA" SUCCESSSTATE (HWND,LISTBOX,STRING) val EqualRect = rcall_RR "EqualRect" BOOL (RECTANGLE,RECTANGLE) val InflateRect = rcall_MII "InflateRect" SUCCESSSTATE (RECTANGLE,INT,INT) val IntersectRect = rcall_WRRI "IntersectRect" BOOL (RECTANGLE,RECTANGLE,RECTANGLE,BOOL) val IsRectEmpty = rcall_R "IsRectEmpty" BOOL (RECTANGLE) val OffsetRect = rcall_MII "OffsetRect" SUCCESSSTATE (RECTANGLE,XOFFSET,YOFFSET) val PtInRect = rcall_RI "PtInRect" BOOL (RECTANGLE,POINT) val SetRect = rcall_IIIIW "SetRect" SUCCESSSTATE (INT,INT,INT,INT,RECTANGLE) val SetRectEmpty = rcall_W "SetRectEmpty" SUCCESSSTATE (RECTANGLE) val SubtractRect = rcall_WRR "SubtractRect" SUCCESSSTATE (RECTANGLE,RECTANGLE,RECTANGLE) val UnionRect = rcall_WRR "UnionRect" SUCCESSSTATE (RECTANGLE,RECTANGLE,RECTANGLE) val AnyPopup = rcall_O "AnyPopup" BOOL (VOID) val ArrangeIconicWindows = rcall_I "ArrangeIconicWindows" HEIGHT (HWND) val BeginDeferWindowPos = rcall_I "BeginDeferWindowPos" HDWP (INT) val BringWindowToTop = rcall_I "BringWindowToTop" SUCCESSSTATE (HWND) val ChildWindowFromPoint = rcall_II "ChildWindowFromPoint" HWND (HWND,POINT) val CloseWindow = rcall_I "CloseWindow" SUCCESSSTATE (HWND) val DeferWindowPos = rcall_IIIIIIII "DeferWindowPos" HDWP (HDWP,HWND,HWND,XCOORD,YCOORD,WIDTH,HEIGHT,SETWINDOWPOSITIONSTYLE) val DestroyWindow = rcall_I "DestroyWindow" SUCCESSSTATE (HWND) val FindWindow = rcall_II "FindWindowA" HWND (STRING,STRING) val GetDesktopWindow = rcall_O "GetDesktopWindow" HWND (VOID) val GetForegroundWindow = rcall_O "GetForegroundWindow" HWND (VOID) val GetLastActivePopup = rcall_I "GetLastActivePopup" HWND (HWND) val GetParent = rcall_I "GetParent" HWND (HWND) val GetTopWindow = rcall_I "GetTopWindow" HWND (HWND) val GetWindow = rcall_II "GetWindow" HWND (HWND,GETWINDOWFLAG) val GetClientRect = rcall_IW "GetClientRect" BOOL (HWND,RECTANGLE) val GetNextWindow = rcall_II "GetNextWindow" HWND (HWND,GETWINDOWFLAG) val GetWindowTextLength = rcall_I "GetWindowTextLength" INT (HWND) val IsChild = rcall_II "IsChild" BOOL (HWND,HWND) val IsIconic = rcall_I "IsIconic" BOOL (HWND) val IsWindow = rcall_I "IsWindow" BOOL (HWND) val IsWindowVisible = rcall_I "IsWindowVisible" BOOL (HWND) val IsZoomed = rcall_I "IsZoomed" BOOL (HWND) val MoveWindow = rcall_IIIIII "MoveWindow" SUCCESSSTATE (HWND,XCOORD,YCOORD,WIDTH,HEIGHT,BOOL) val OpenIcon = rcall_I "OpenIcon" SUCCESSSTATE (HWND) val SetForegroundWindow = rcall_I "SetForegroundWindow" SUCCESSSTATE (HWND) val SetParent = rcall_II "SetParent" HWND (HWND,HWND) val SetWindowPos = rcall_IIIIIII "SetWindowPos" SUCCESSSTATE (HWND,HWND,XCOORD,YCOORD,WIDTH,HEIGHT,SETWINDOWPOSITIONSTYLE) val SetWindowText = rcall_II "SetWindowTextA" SUCCESSSTATE (HWND,STRING) val ShowOwnedPopups = rcall_II "ShowOwnedPopups" SUCCESSSTATE (HWND,BOOL) val WindowFromPoint = rcall_I "WindowFromPoint" HWND (POINT) val GetClientRect = rcall_II "GetClientRect" HEIGHT (HWND,WIDTH) val GetWindowRect = rcall_IW "GetWindowRect" BOOL (HWND,RECTANGLE) val MessageBox = rcall_IIII "MessageBoxA" MESSAGEBOXIDENTIFIER (HWND,STRING,STRING,MESSAGEBOXVALUE) end end polyml.5.2.1/mlsource/extra/XWindows/0000755000175000017500000000000011100060556016524 5ustar daviddavidpolyml.5.2.1/mlsource/extra/XWindows/XATOMS_SIG.ML0000644000175000017500000000637210313043376020511 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) signature XATOMS_SIG = sig val XA_PRIMARY: int ; val XA_SECONDARY: int ; val XA_ARC: int ; val XA_ATOM: int ; val XA_BITMAP: int ; val XA_CARDINAL: int ; val XA_COLORMAP: int ; val XA_CURSOR: int ; val XA_CUT_BUFFER0: int ; val XA_CUT_BUFFER1: int ; val XA_CUT_BUFFER2: int ; val XA_CUT_BUFFER3: int ; val XA_CUT_BUFFER4: int ; val XA_CUT_BUFFER5: int ; val XA_CUT_BUFFER6: int ; val XA_CUT_BUFFER7: int ; val XA_DRAWABLE: int ; val XA_FONT: int ; val XA_INTEGER: int ; val XA_PIXMAP: int ; val XA_POINT: int ; val XA_RECTANGLE: int ; val XA_RESOURCE_MANAGER: int ; val XA_RGB_COLOR_MAP: int ; val XA_RGB_BEST_MAP: int ; val XA_RGB_BLUE_MAP: int ; val XA_RGB_DEFAULT_MAP: int ; val XA_RGB_GRAY_MAP: int ; val XA_RGB_GREEN_MAP: int ; val XA_RGB_RED_MAP: int ; val XA_STRING: int ; val XA_VISUALID: int ; val XA_WINDOW: int ; val XA_WM_COMMAND: int ; val XA_WM_HINTS: int ; val XA_WM_CLIENT_MACHINE: int ; val XA_WM_ICON_NAME: int ; val XA_WM_ICON_SIZE: int ; val XA_WM_NAME: int ; val XA_WM_NORMAL_HINTS: int ; val XA_WM_SIZE_HINTS: int ; val XA_MIN_SPACE: int ; val XA_NORM_SPACE: int ; val XA_MAX_SPACE: int ; val XA_END_SPACE: int ; val XA_SUPERSCRIPT_X: int ; val XA_SUPERSCRIPT_Y: int ; val XA_SUBSCRIPT_X: int ; val XA_SUBSCRIPT_Y: int ; val XA_UNDERLINE_POSITION: int ; val XA_UNDERLINE_THICKNESS: int ; val XA_STRIKEOUT_ASCENT: int ; val XA_STRIKEOUT_DESCENT: int ; val XA_ITALIC_ANGLE: int ; val XA_X_HEIGHT: int ; val XA_QUAD_WIDTH: int ; val XA_WEIGHT: int ; val XA_POINT_SIZE: int ; val XA_RESOLUTION: int ; val XA_COPYRIGHT: int ; val XA_NOTICE: int ; val XA_FONT_NAME: int ; val XA_FAMILY_NAME: int ; val XA_FULL_NAME: int ; val XA_CAP_HEIGHT: int ; val XA_WM_CLASS: int ; val XA_WM_TRANSIENT_FOR: int ; end (* XATOMS_SIG *) ; polyml.5.2.1/mlsource/extra/XWindows/XAtoms.ML0000644000175000017500000000637010313043376020205 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure XAtoms: XATOMS_SIG = struct val XA_PRIMARY = 1 ; val XA_SECONDARY = 2 ; val XA_ARC = 3 ; val XA_ATOM = 4 ; val XA_BITMAP = 5 ; val XA_CARDINAL = 6 ; val XA_COLORMAP = 7 ; val XA_CURSOR = 8 ; val XA_CUT_BUFFER0 = 9 ; val XA_CUT_BUFFER1 = 10 ; val XA_CUT_BUFFER2 = 11 ; val XA_CUT_BUFFER3 = 12 ; val XA_CUT_BUFFER4 = 13 ; val XA_CUT_BUFFER5 = 14 ; val XA_CUT_BUFFER6 = 15 ; val XA_CUT_BUFFER7 = 16 ; val XA_DRAWABLE = 17 ; val XA_FONT = 18 ; val XA_INTEGER = 19 ; val XA_PIXMAP = 20 ; val XA_POINT = 21 ; val XA_RECTANGLE = 22 ; val XA_RESOURCE_MANAGER = 23 ; val XA_RGB_COLOR_MAP = 24 ; val XA_RGB_BEST_MAP = 25 ; val XA_RGB_BLUE_MAP = 26 ; val XA_RGB_DEFAULT_MAP = 27 ; val XA_RGB_GRAY_MAP = 28 ; val XA_RGB_GREEN_MAP = 29 ; val XA_RGB_RED_MAP = 30 ; val XA_STRING = 31 ; val XA_VISUALID = 32 ; val XA_WINDOW = 33 ; val XA_WM_COMMAND = 34 ; val XA_WM_HINTS = 35 ; val XA_WM_CLIENT_MACHINE = 36 ; val XA_WM_ICON_NAME = 37 ; val XA_WM_ICON_SIZE = 38 ; val XA_WM_NAME = 39 ; val XA_WM_NORMAL_HINTS = 40 ; val XA_WM_SIZE_HINTS = 41 ; val XA_MIN_SPACE = 43 ; val XA_NORM_SPACE = 44 ; val XA_MAX_SPACE = 45 ; val XA_END_SPACE = 46 ; val XA_SUPERSCRIPT_X = 47 ; val XA_SUPERSCRIPT_Y = 48 ; val XA_SUBSCRIPT_X = 49 ; val XA_SUBSCRIPT_Y = 50 ; val XA_UNDERLINE_POSITION = 51 ; val XA_UNDERLINE_THICKNESS = 52 ; val XA_STRIKEOUT_ASCENT = 53 ; val XA_STRIKEOUT_DESCENT = 54 ; val XA_ITALIC_ANGLE = 55 ; val XA_X_HEIGHT = 56 ; val XA_QUAD_WIDTH = 57 ; val XA_WEIGHT = 58 ; val XA_POINT_SIZE = 59 ; val XA_RESOLUTION = 60 ; val XA_COPYRIGHT = 61 ; val XA_NOTICE = 62 ; val XA_FONT_NAME = 63 ; val XA_FAMILY_NAME = 64 ; val XA_FULL_NAME = 65 ; val XA_CAP_HEIGHT = 66 ; val XA_WM_CLASS = 67 ; val XA_WM_TRANSIENT_FOR = 68 ; end (* XAtoms *) ; polyml.5.2.1/mlsource/extra/XWindows/XCURSORS_SIG.ML0000644000175000017500000000711010313043376020755 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) signature XCURSORS_SIG = sig val XC_num_glyphs: int ; val XC_X_cursor: int ; val XC_arrow: int ; val XC_based_arrow_down: int ; val XC_based_arrow_up: int ; val XC_boat: int ; val XC_bogosity: int ; val XC_bottom_left_corner: int ; val XC_bottom_right_corner: int ; val XC_bottom_side: int ; val XC_bottom_tee: int ; val XC_box_spiral: int ; val XC_center_ptr: int ; val XC_circle: int ; val XC_clock: int ; val XC_coffee_mug: int ; val XC_cross: int ; val XC_cross_reverse: int ; val XC_crosshair: int ; val XC_diamond_cross: int ; val XC_dot: int ; val XC_dotbox: int ; val XC_double_arrow: int ; val XC_draft_large: int ; val XC_draft_small: int ; val XC_draped_box: int ; val XC_exchange: int ; val XC_fleur: int ; val XC_gobbler: int ; val XC_gumby: int ; val XC_hand1: int ; val XC_hand2: int ; val XC_heart: int ; val XC_icon: int ; val XC_iron_cross: int ; val XC_left_ptr: int ; val XC_left_side: int ; val XC_left_tee: int ; val XC_leftbutton: int ; val XC_ll_angle: int ; val XC_lr_angle: int ; val XC_man: int ; val XC_middlebutton: int ; val XC_mouse: int ; val XC_pencil: int ; val XC_pirate: int ; val XC_plus: int ; val XC_question_arrow: int ; val XC_right_ptr: int ; val XC_right_side: int ; val XC_right_tee: int ; val XC_rightbutton: int ; val XC_rtl_logo: int ; val XC_sailboat: int ; val XC_sb_down_arrow: int ; val XC_sb_h_double_arrow: int ; val XC_sb_left_arrow: int ; val XC_sb_right_arrow: int ; val XC_sb_up_arrow: int ; val XC_sb_v_double_arrow: int ; val XC_shuttle: int ; val XC_sizing: int ; val XC_spider: int ; val XC_spraycan: int ; val XC_star: int ; val XC_target: int ; val XC_tcross: int ; val XC_top_left_arrow: int ; val XC_top_left_corner: int ; val XC_top_right_corner: int ; val XC_top_side: int ; val XC_top_tee: int ; val XC_trek: int ; val XC_ul_angle: int ; val XC_umbrella: int ; val XC_ur_angle: int ; val XC_watch: int ; val XC_xterm: int ; end (* XCURSORS_SIG *) ; polyml.5.2.1/mlsource/extra/XWindows/XCall.ML0000644000175000017500000005443011003115032017757 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure XCall = struct local structure Type = struct type ex_type = string; val ex_iden = 10; end; structure E: sig exception ex of string end = RunCall.Run_exception1(Type); in exception XWindows = E.ex; end; fun xcall n = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows n (* The following XCALL numbers should match those in xcall_numbers.h *) (* in the Poly/ML run-time system. *) val XCALL_Not = 10; val XCALL_And = 11; val XCALL_Or = 12; val XCALL_Xor = 13; val XCALL_DownShift = 14; val XCALL_UpShift = 15; val XCALL_NoDrawable = 20; val XCALL_NoCursor = 21; val XCALL_NoFont = 22; val XCALL_NoColormap = 23; val XCALL_NoVisual = 24; val XCALL_GetTimeOfDay = 30; (* Colorcells 100 *) val XCALL_XAllocColor = 103; val XCALL_XAllocColorCells = 104; val XCALL_XAllocColorPlanes = 105; val XCALL_XAllocNamedColor = 106; val XCALL_XFreeColors = 107; val XCALL_XLookupColor = 108; val XCALL_XParseColor = 109; val XCALL_XQueryColor = 110; val XCALL_XQueryColors = 111; val XCALL_XStoreColor = 112; val XCALL_XStoreColors = 113; val XCALL_XStoreNamedColor = 114; val XCALL_BlackPixel = 115; val XCALL_WhitePixel = 116; (* Colormaps 150 *) val XCALL_XCopyColormapAndFree = 150; val XCALL_XCreateColormap = 151; val XCALL_XInstallColormap = 154; val XCALL_XListInstalledColormaps = 155; val XCALL_XUninstallColormap = 158; val XCALL_DefaultColormap = 159; val XCALL_DefaultVisual = 160; val XCALL_DisplayCells = 161; val XCALL_VisualClass = 162; val XCALL_VisualRedMask = 163; val XCALL_VisualGreenMask = 164; val XCALL_VisualBlueMask = 165; (* Cursors 200 *) val XCALL_XCreateFontCursor = 200; val XCALL_XCreateGlyphCursor = 201; val XCALL_XCreatePixmapCursor = 202; val XCALL_XDefineCursor = 203; val XCALL_XQueryBestCursor = 205; val XCALL_XRecolorCursor = 206; val XCALL_XUndefineCursor = 207; val XCALL_XOpenDisplay = 222; (* Display Specifications 250 *) val XCALL_CellsOfScreen = 250; val XCALL_DefaultDepth = 251; val XCALL_DisplayHeight = 252; val XCALL_DisplayHeightMM = 253; val XCALL_DisplayPlanes = 254; val XCALL_DisplayString = 255; val XCALL_DisplayWidth = 256; val XCALL_DisplayWidthMM = 257; val XCALL_DoesBackingStore = 258; val XCALL_DoesSaveUnders = 259; val XCALL_EventMaskOfScreen = 260; val XCALL_MaxCmapsOfScreen = 261; val XCALL_MinCmapsOfScreen = 262; val XCALL_ProtocolRevision = 263; val XCALL_ProtocolVersion = 264; val XCALL_ServerVendor = 265; val XCALL_VendorRelease = 266; (* Drawing Primitives 300 *) val XCALL_XClearArea = 300; val XCALL_XClearWindow = 301; val XCALL_XCopyArea = 302; val XCALL_XCopyPlane = 303; val XCALL_XDrawArc = 304; val XCALL_XDrawArcs = 305; val XCALL_XDrawImageString = 306; val XCALL_XDrawImageString16 = 307; val XCALL_XDrawLine = 308; val XCALL_XDrawLines = 309; val XCALL_XDrawPoint = 310; val XCALL_XDrawPoints = 311; val XCALL_XDrawRectangle = 312; val XCALL_XDrawRectangles = 313; val XCALL_XDrawSegments = 314; val XCALL_XDrawString = 315; val XCALL_XDrawString16 = 316; val XCALL_XDrawText = 317; val XCALL_XDrawText16 = 318; val XCALL_XFillArc = 319; val XCALL_XFillArcs = 320; val XCALL_XFillPolygon = 321; val XCALL_XFillRectangle = 322; val XCALL_XFillRectangles = 323; (* Events 350 *) val XCALL_XSelectInput = 350; val XCALL_XSynchronize = 351; val XCALL_GetState = 361; val XCALL_SetState = 362; val XCALL_NextEvent = 365; val XCALL_InsertTimeout = 366; val XCALL_XSetInputFocus = 370; val XCALL_XGetInputFocus = 371; val XCALL_XSetSelectionOwner = 372; val XCALL_XGetSelectionOwner = 373; val XCALL_XConvertSelection = 374; val XCALL_XSendSelectionNotify = 375; val XCALL_XDeleteProperty = 376; val XCALL_XInternAtom = 377; val XCALL_XGetAtomName = 378; (* Fonts 400 *) val XCALL_XGetFontPath = 401; val XCALL_XListFonts = 402; val XCALL_XListFontsWithInfo = 403; val XCALL_XLoadFont = 404; val XCALL_XLoadQueryFont = 405; val XCALL_XQueryFont = 406; val XCALL_XSetFontPath = 407; (* Grabbing 450 *) (* Graphics Context 500 *) val XCALL_DefaultGC = 500; val XCALL_UpdateGC = 501; val XCALL_XCreateGC = 503; val XCALL_XSetClipRectangles = 509; val XCALL_XSetDashes = 510; (* Images 550 *) val XCALL_XAddPixel = 550; val XCALL_XGetImage = 552; val XCALL_XGetPixel = 553; val XCALL_XGetSubImage = 554; val XCALL_XPutImage = 555; val XCALL_XPutPixel = 556; val XCALL_XSubImage = 557; val XCALL_BitmapBitOrder = 558; val XCALL_BitmapPad = 559; val XCALL_BitmapUnit = 560; val XCALL_ByteOrder = 561; (* Keyboard 600 *) val XCALL_XLookupString = 611; val XCALL_XQueryKeymap = 612; val XCALL_IsCursorKey = 618; val XCALL_IsFunctionKey = 619; val XCALL_IsKeypadKey = 620; val XCALL_IsMiscFunctionKey = 621; val XCALL_IsModifierKey = 622; val XCALL_IsPFKey = 623; (* Output Buffer 650 *) val XCALL_XFlush = 650; val XCALL_XSync = 651; (* Pointers 700 *) val XCALL_XQueryPointer = 703; (* Regions 750 *) (* Save Set 800 *) (* Screen Saver 850 *) val XCALL_XActivateScreenSaver = 850; val XCALL_XForceScreenSaver = 851; val XCALL_XGetScreenSaver = 852; val XCALL_XResetScreenSaver = 853; val XCALL_XSetScreenSaver = 854; (* Standard Geometry 900 *) val XCALL_XTranslateCoordinates = 902; (* Text 950 *) val XCALL_XTextExtents = 950; val XCALL_XTextExtents16 = 951; val XCALL_XTextWidth = 952; val XCALL_XTextWidth16 = 953; (* Tiles, Pixmaps, Stipples and Bitmaps 1000 *) val XCALL_XCreateBitmapFromData = 1000; val XCALL_XCreatePixmap = 1001; val XCALL_XCreatePixmapFromBitmapData = 1002; val XCALL_XQueryBestStipple = 1004; val XCALL_XQueryBestTile = 1005; val XCALL_XReadBitmapFile = 1006; val XCALL_XWriteBitmapFile = 1007; (* User Preferences 1050 *) val XCALL_XAutoRepeatOff = 1050; val XCALL_XAutoRepeatOn = 1051; val XCALL_XBell = 1052; val XCALL_XGetDefault = 1053; (* Window Attributes 1100 *) val XCALL_ChangeWindow = 1100; val XCALL_XGetGeometry = 1101; val XCALL_XGetWindowAttributes = 1102; val XCALL_XSetWindowBorderWidth = 1107; (* Window Configuration 1150 *) val XCALL_XCirculateSubwindows = 1150; val XCALL_XConfigureWindow = 1153; val XCALL_XLowerWindow = 1154; val XCALL_XMapRaised = 1155; val XCALL_XMapSubwindows = 1156; val XCALL_XMapWindow = 1157; val XCALL_XMoveResizeWindow = 1158; val XCALL_XMoveWindow = 1159; val XCALL_XQueryTree = 1160; val XCALL_XRaiseWindow = 1161; val XCALL_XReparentWindow = 1162; val XCALL_XResizeWindow = 1163; val XCALL_XRestackWindows = 1164; val XCALL_XUnmapSubwindows = 1165; val XCALL_XUnmapWindow = 1166; (* Window Existence 1200 *) val XCALL_RootWindow = 1200; val XCALL_DestroyXObject = 1201; val XCALL_XDestroySubwindows = 1202; val XCALL_XCreateSimpleWindow = 1203; val XCALL_XCreateWindow = 1204; (* Window Manager 1250 *) val XCALL_XSetProperty = 1299; val XCALL_XGetTextProperty = 1250; val XCALL_XGetWMHints = 1253; val XCALL_XGetWMSizeHints = 1255; val XCALL_XGetIconSizes = 1257; val XCALL_XGetTransientForHint = 1259; val XCALL_XGetWMColormapWindows = 1261; val XCALL_XGetRGBColormaps = 1263; val XCALL_XWMGeometry = 1264; (* Miscellaneous and Convenience functions 1300 *) val XCALL_GetID = 1300; val XCALL_ResourceExists = 1301; val XCALL_GetDisplay = 1303; (* X Toolkit 3000 *) val XCALL_NoWidget = 3000; val XCALL_AppInitialise = 3001; val XCALL_XtRealizeWidget = 3002; val XCALL_XtManageChildren = 3003; val XCALL_XtUnmanageChildren = 3004; val XCALL_XtDestroyWidget = 3005; val XCALL_SetCallbacks = 3006; val XCALL_XtSetValues = 3007; val XCALL_GetValue = 3008; val XCALL_XtParent = 3009; val XCALL_XtWindow = 3010; val XCALL_XtDisplay = 3011; val XCALL_XtUnrealizeWidget = 3012; val XCALL_XtName = 3013; val XCALL_XtParseTranslationTable = 3014; val XCALL_XtOverrideTranslations = 3015; val XCALL_XtAugmentTranslations = 3016; val XCALL_XtUninstallTranslations = 3017; val XCALL_XtTranslateTablePrint = 3018; val XCALL_XtCreatePopupShell = 3019; val XCALL_InsertWidgetTimeout = 3020; val XCALL_GetWidgetState = 3021; val XCALL_SetWidgetState = 3022; val XCALL_XtSetSensitive = 3023; val XCALL_XtIsSensitive = 3024; val XCALL_GetSubresources = 3025; val XCALL_Cast = 3026; (* added 6/12/94 SPF *) val XCALL_XtPopup = 3027; val XCALL_XtPopdown = 3028; val XCALL_XtMapWidget = 3029; val XCALL_XtUnmapWidget = 3030; (* added 19/1/95 SPF *) val XCALL_XtIsManaged = 3031; val XCALL_XtIsRealized = 3032; (* added 23/3/01 DCJM *) val XCALL_XtGetApplicationResources = 3033; val XCALL_XtAddEventHandler = 3034; val XCALL_XmCreateArrowButton = 4000; val XCALL_XmCreateArrowButtonGadget = 4001; val XCALL_XmCreateBulletinBoard = 4002; val XCALL_XmCreateBulletinBoardDialog = 4003; val XCALL_XmCreateCascadeButton = 4004; val XCALL_XmCreateCascadeButtonGadget = 4005; val XCALL_XmCreateCommand = 4006; val XCALL_XmCreateDialogShell = 4007; val XCALL_XmCreateDrawingArea = 4008; val XCALL_XmCreateDrawnButton = 4009; val XCALL_XmCreateErrorDialog = 4010; val XCALL_XmCreateFileSelectionBox = 4011; val XCALL_XmCreateFileSelectionDialog = 4012; val XCALL_XmCreateForm = 4013; val XCALL_XmCreateFormDialog = 4014; val XCALL_XmCreateFrame = 4015; val XCALL_XmCreateInformationDialog = 4016; val XCALL_XmCreateLabel = 4017; val XCALL_XmCreateLabelGadget = 4018; val XCALL_XmCreateList = 4019; val XCALL_XmCreateMainWindow = 4020; val XCALL_XmCreateMenuBar = 4021; val XCALL_XmCreateMenuShell = 4022; val XCALL_XmCreateMessageBox = 4023; val XCALL_XmCreateMessageDialog = 4024; val XCALL_XmCreateOptionMenu = 4025; val XCALL_XmCreatePanedWindow = 4026; val XCALL_XmCreatePopupMenu = 4027; val XCALL_XmCreatePromptDialog = 4028; val XCALL_XmCreatePulldownMenu = 4029; val XCALL_XmCreatePushButton = 4030; val XCALL_XmCreatePushButtonGadget = 4031; val XCALL_XmCreateQuestionDialog = 4032; val XCALL_XmCreateRadioBox = 4033; val XCALL_XmCreateRowColumn = 4034; val XCALL_XmCreateScale = 4035; val XCALL_XmCreateScrollBar = 4036; val XCALL_XmCreateScrolledList = 4037; val XCALL_XmCreateScrolledText = 4038; val XCALL_XmCreateScrolledWindow = 4039; val XCALL_XmCreateSelectionBox = 4040; val XCALL_XmCreateSelectionDialog = 4041; val XCALL_XmCreateSeparator = 4042; val XCALL_XmCreateSeparatorGadget = 4043; val XCALL_XmCreateSimpleCheckBox = 4044; val XCALL_XmCreateSimpleMenuBar = 4045; val XCALL_XmCreateSimpleOptionMenu = 4046; val XCALL_XmCreateSimplePopupMenu = 4047; val XCALL_XmCreateSimplePulldownMenu = 4048; val XCALL_XmCreateSimpleRadioBox = 4049; val XCALL_XmCreateText = 4050; val XCALL_XmCreateTextField = 4051; val XCALL_XmCreateToggleButton = 4052; val XCALL_XmCreateToggleButtonGadget = 4053; val XCALL_XmCreateWarningDialog = 4054; val XCALL_XmCreateWorkArea = 4055; val XCALL_XmCreateWorkingDialog = 4056; val XCALL_XmCascadeButtonHighlight = 4060; val XCALL_XmCommandError = 4061; val XCALL_XmCommandGetChild = 4062; val XCALL_XmFileSelectionBoxGetChild = 4063; val XCALL_XmFileSelectionDoSearch = 4064; val XCALL_XmIsSomething = 4080; val XCALL_XmMainWindowSetAreas = 4100; val XCALL_XmMainWindowSepX = 4101; val XCALL_XmMessageBoxGetChild = 4105; val XCALL_XmOptionButtonGadget = 4106; val XCALL_XmOptionLabelGadget = 4107; val XCALL_XmSelectionBoxGetChild = 4108; val XCALL_XmSetMenuCursor = 4200; val XCALL_XmScrolledWindowSetAreas = 4201; val XCALL_XmTextGetString = 4202; val XCALL_XmTextSetString = 4203; val XCALL_XmTextSetInsertionPosition = 4204; val XCALL_XmTrackingLocate = 4210; val XCALL_XmUpdateDisplay = 4211; (* XmText widget 4300 *) (* XmTextClearSelection 4300; *) (* XmTextCopy 4301; *) (* XmTextCut 4302; *) val XCALL_XmTextGetAddMode = 4303; val XCALL_XmTextGetBaseline = 4304; val XCALL_XmTextGetCursorPosition = 4305; val XCALL_XmTextGetEditable = 4306; val XCALL_XmTextGetInsertionPosition = 4307; val XCALL_XmTextGetLastPosition = 4308; val XCALL_XmTextGetMaxLength = 4309; val XCALL_XmTextGetSelection = 4310; (* XmTextGetSelectionPosition 4311; *) (* XCALL_XmTextGetString defined above *) (* XmTextGetSource 4313; *) val XCALL_XmTextGetTopCharacter = 4314; val XCALL_XmTextInsert = 4315; val XCALL_XmTextPaste = 4316; (* XmTextPosToXY 4317; *) val XCALL_XmTextRemove = 4318; val XCALL_XmTextReplace = 4319; val XCALL_XmTextScroll = 4320; val XCALL_XmTextSetAddMode = 4321; val XCALL_XmTextSetCursorPosition = 4322; val XCALL_XmTextSetEditable = 4323; (* XmTextSetHighlight 4324; *) (* XCALL_XmTextSetInsertionPosition defined above *) val XCALL_XmTextSetMaxLength = 4326; (* XmTextSetSelection 4327; *) (* XmTextSetSource 4328; *) (* XCALL_XmTextSetString defined above *) val XCALL_XmTextSetTopCharacter = 4330; val XCALL_XmTextShowPosition = 4331; val XCALL_XmTextXYToPos = 4332; (* XmTextField widget 4350 *) (* XmTextFieldClearSelection 4350; *) (* XmTextFieldCopy 4351; *) (* XmTextFieldCut 4352; *) val XCALL_XmTextFieldGetAddMode = 4353; val XCALL_XmTextFieldGetBaseline = 4354; val XCALL_XmTextFieldGetCursorPosition = 4355; val XCALL_XmTextFieldGetEditable = 4356; val XCALL_XmTextFieldGetInsertionPosition = 4357; val XCALL_XmTextFieldGetLastPosition = 4358; val XCALL_XmTextFieldGetMaxLength = 4359; val XCALL_XmTextFieldGetSelection = 4360; (* XmTextFieldGetSelectionPosition 4361; *) val XCALL_XmTextFieldGetString = 4362; val XCALL_XmTextFieldInsert = 4363; val XCALL_XmTextFieldPaste = 4364; (* XmTextFieldPosToXY 4365; *) val XCALL_XmTextFieldRemove = 4366; val XCALL_XmTextFieldReplace = 4367; val XCALL_XmTextFieldSetAddMode = 4368; val XCALL_XmTextFieldSetCursorPosition = 4369; val XCALL_XmTextFieldSetEditable = 4370; (* XmTextFieldSetHighlight 4371; *) val XCALL_XmTextFieldSetInsertionPosition = 4372; val XCALL_XmTextFieldSetMaxLength = 4373; (* XmTextFieldSetSelection 4374; *) val XCALL_XmTextFieldSetString = 4375; val XCALL_XmTextFieldShowPosition = 4376; val XCALL_XmTextFieldXYToPos = 4377; (* XmList widget 4400 *) val XCALL_XmListAddItem = 4400; val XCALL_XmListAddItemUnselected = 4401; val XCALL_XmListAddItems = 4402; val XCALL_XmListDeleteAllItems = 4403; val XCALL_XmListDeleteItem = 4404; val XCALL_XmListDeleteItems = 4405; val XCALL_XmListDeletePos = 4406; val XCALL_XmListDeleteItemsPos = 4407; val XCALL_XmListDeselectAllItems = 4408; val XCALL_XmListDeselectItem = 4409; val XCALL_XmListDeselectPos = 4410; val XCALL_XmListGetMatchPos = 4411; val XCALL_XmListGetSelectedPos = 4412; val XCALL_XmListItemExists = 4413; val XCALL_XmListItemPos = 4414; val XCALL_XmListReplaceItems = 4415; val XCALL_XmListReplaceItemsPos = 4416; val XCALL_XmListSelectItem = 4417; val XCALL_XmListSelectPos = 4418; val XCALL_XmListSetAddMode = 4419; val XCALL_XmListSetBottomItem = 4420; val XCALL_XmListSetBottomPos = 4421; val XCALL_XmListSetHorizPos = 4422; val XCALL_XmListSetItem = 4423; val XCALL_XmListSetPos = 4424; (* Added by DCJM. 23/3/01. *) val XCALL_XmMenuPosition = 4500; (* Not supported by the SUNOS version of the tool-kit ... val XCALL_XmListAddItemsUnselected val XCALL_XmListDeletePositions val XCALL_XmListGetKbdItemPos val XCALL_XmListPosSelected val XCALL_XmListReplaceItemsPosUnselected val XCALL_XmListReplaceItemsPositions val XCALL_XmListSetKbdItemPos val XCALL_XmListUpdateSelectedList val XCALL_XmListYToPos val XCALL_XmListPosToBounds ... *) end; polyml.5.2.1/mlsource/extra/XWindows/XCursors.ML0000644000175000017500000000726610313043376020567 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure XCursors: XCURSORS_SIG = struct val XC_num_glyphs = 154 ; val XC_X_cursor = 0 ; val XC_arrow = 2 ; val XC_based_arrow_down = 4 ; val XC_based_arrow_up = 6 ; val XC_boat = 8 ; val XC_bogosity = 10 ; val XC_bottom_left_corner = 12 ; val XC_bottom_right_corner = 14 ; val XC_bottom_side = 16 ; val XC_bottom_tee = 18 ; val XC_box_spiral = 20 ; val XC_center_ptr = 22 ; val XC_circle = 24 ; val XC_clock = 26 ; val XC_coffee_mug = 28 ; val XC_cross = 30 ; val XC_cross_reverse = 32 ; val XC_crosshair = 34 ; val XC_diamond_cross = 36 ; val XC_dot = 38 ; val XC_dotbox = 40 ; val XC_double_arrow = 42 ; val XC_draft_large = 44 ; val XC_draft_small = 46 ; val XC_draped_box = 48 ; val XC_exchange = 50 ; val XC_fleur = 52 ; val XC_gobbler = 54 ; val XC_gumby = 56 ; val XC_hand1 = 58 ; val XC_hand2 = 60 ; val XC_heart = 62 ; val XC_icon = 64 ; val XC_iron_cross = 66 ; val XC_left_ptr = 68 ; val XC_left_side = 70 ; val XC_left_tee = 72 ; val XC_leftbutton = 74 ; val XC_ll_angle = 76 ; val XC_lr_angle = 78 ; val XC_man = 80 ; val XC_middlebutton = 82 ; val XC_mouse = 84 ; val XC_pencil = 86 ; val XC_pirate = 88 ; val XC_plus = 90 ; val XC_question_arrow = 92 ; val XC_right_ptr = 94 ; val XC_right_side = 96 ; val XC_right_tee = 98 ; val XC_rightbutton = 100 ; val XC_rtl_logo = 102 ; val XC_sailboat = 104 ; val XC_sb_down_arrow = 106 ; val XC_sb_h_double_arrow = 108 ; val XC_sb_left_arrow = 110 ; val XC_sb_right_arrow = 112 ; val XC_sb_up_arrow = 114 ; val XC_sb_v_double_arrow = 116 ; val XC_shuttle = 118 ; val XC_sizing = 120 ; val XC_spider = 122 ; val XC_spraycan = 124 ; val XC_star = 126 ; val XC_target = 128 ; val XC_tcross = 130 ; val XC_top_left_arrow = 132 ; val XC_top_left_corner = 134 ; val XC_top_right_corner = 136 ; val XC_top_side = 138 ; val XC_top_tee = 140 ; val XC_trek = 142 ; val XC_ul_angle = 144 ; val XC_umbrella = 146 ; val XC_ur_angle = 148 ; val XC_watch = 150 ; val XC_xterm = 152 ; end (* XCursors *) ; polyml.5.2.1/mlsource/extra/XWindows/XEVENT_SIG.ML0000644000175000017500000003607110313043376020506 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) signature XEVENT_SIG = sig include XTYPES_SIG ; datatype EventMask = KeyPressMask | KeyReleaseMask | ButtonPressMask | ButtonReleaseMask | EnterWindowMask | LeaveWindowMask | PointerMotionMask | PointerMotionHintMask | Button1MotionMask | Button2MotionMask | Button3MotionMask | Button4MotionMask | Button5MotionMask | ButtonMotionMask | KeymapStateMask | ExposureMask | VisibilityChangeMask | StructureNotifyMask | ResizeRedirectMask | SubstructureNotifyMask | SubstructureRedirectMask | FocusChangeMask | PropertyChangeMask | ColormapChangeMask | OwnerGrabButtonMask | ButtonClickMask (* extra event mask *) ; datatype Modifier = ShiftMask | LockMask | ControlMask | Mod1Mask | Mod2Mask | Mod3Mask | Mod4Mask | Mod5Mask | Button1Mask | Button2Mask | Button3Mask | Button4Mask | Button5Mask | AnyModifier ; datatype ButtonName = Button1 | Button2 | Button3 | Button4 | Button5 | AnyButton ; datatype Placement = PlaceOnTop | PlaceOnBottom ; datatype StackMode = Above | Below | TopIf | BottomIf | Opposite ; datatype NotifyMode = NotifyNormal | NotifyGrab | NotifyUngrab | NotifyWhileGrabbed ; datatype NotifyDetail = NotifyAncestor | NotifyVirtual | NotifyInferior | NotifyNonLinear | NotifyNonLinearVirtual | NotifyPointer | NotifyPointerRoot | NotifyDetailNone ; datatype GraphicsCode = CopyArea | CopyPlane ; datatype Visibility = VisibilityUnobscured | VisibilityPartiallyObscured | VisibilityFullyObscured ; datatype 'a XEvent = ButtonPress of { sendEvent: bool, window: Drawable, root: Drawable, subwindow: Drawable, time: int, pointer: XPoint, rootPointer: XPoint, modifiers: Modifier list, button: ButtonName } | ButtonRelease of { sendEvent: bool, window: Drawable, root: Drawable, subwindow: Drawable, time: int, pointer: XPoint, rootPointer: XPoint, modifiers: Modifier list, button: ButtonName } | ButtonClick of { sendEvent: bool, (* extra event type *) window: Drawable, root: Drawable, subwindow: Drawable, time: int, pointer: XPoint, rootPointer: XPoint, modifiers: Modifier list, button: ButtonName, up: int, (* number of up transitions *) down: int } (* number of down transitions *) | CirculateNotify of { sendEvent: bool, event: Drawable, window: Drawable, place: Placement } | CirculateRequest of { sendEvent: bool, parent: Drawable, window: Drawable, place: Placement } | ColormapNotify of { sendEvent: bool, window: Drawable, colormap: Colormap, new: bool, installed: bool } | ConfigureNotify of { sendEvent: bool, event: Drawable, window: Drawable, position: XPoint, size: XRectangle, borderWidth: int, above: Drawable, overrideRedirect: bool } | ConfigureRequest of { sendEvent: bool, parent: Drawable, window: Drawable, position: XPoint, size: XRectangle, borderWidth: int, above: Drawable, detail: StackMode } | CreateNotify of { sendEvent: bool, parent: Drawable, window: Drawable, position: XPoint, size: XRectangle, borderWidth: int, overrideRedirect: bool } | DestroyNotify of { sendEvent: bool, event: Drawable, window: Drawable } | EnterNotify of { sendEvent: bool, window: Drawable, root: Drawable, subwindow: Drawable, time: int, pointer: XPoint, rootPointer: XPoint, mode: NotifyMode, detail: NotifyDetail, focus: bool, modifiers: Modifier list } | LeaveNotify of { sendEvent: bool, window: Drawable, root: Drawable, subwindow: Drawable, time: int, pointer: XPoint, rootPointer: XPoint, mode: NotifyMode, detail: NotifyDetail, focus: bool, modifiers: Modifier list } | Expose of { sendEvent: bool, window: Drawable, region: XRectangle, count: int } | FocusIn of { sendEvent: bool, window: Drawable, mode: NotifyMode, detail: NotifyDetail } | FocusOut of { sendEvent: bool, window: Drawable, mode: NotifyMode, detail: NotifyDetail } | GraphicsExpose of { sendEvent: bool, window: Drawable, region: XRectangle, count: int, code: GraphicsCode } | NoExpose of { sendEvent: bool, window: Drawable, code: GraphicsCode } | GravityNotify of { sendEvent: bool, event: Drawable, window: Drawable, position: XPoint } | KeymapNotify of { sendEvent: bool, window: Drawable, keyVector: bool list (* 256 bools *) } | KeyPress of { sendEvent: bool, window: Drawable, root: Drawable, subwindow: Drawable, time: int, pointer: XPoint, rootPointer: XPoint, modifiers: Modifier list, keycode: int } | KeyRelease of { sendEvent: bool, window: Drawable, root: Drawable, subwindow: Drawable, time: int, pointer: XPoint, rootPointer: XPoint, modifiers: Modifier list, keycode: int } | MapNotify of { sendEvent: bool, event: Drawable, window: Drawable, overrideRedirect: bool } | UnmapNotify of { sendEvent: bool, event: Drawable, window: Drawable, fromConfigure: bool } | MapRequest of { sendEvent: bool, parent: Drawable, window: Drawable } | MotionNotify of { sendEvent: bool, window: Drawable, root: Drawable, subwindow: Drawable, time: int, pointer: XPoint, rootPointer: XPoint, modifiers: Modifier list, isHint: bool } | ReparentNotify of { sendEvent: bool, event: Drawable, window: Drawable, parent: Drawable, position: XPoint, overrideRedirect: bool } | ResizeRequest of { sendEvent: bool, window: Drawable, size: XRectangle } | SelectionClear of { sendEvent: bool, window: Drawable, selection: int, time: int } | SelectionNotify of { sendEvent: bool, requestor: Drawable, selection: int, target: int, property: int, time: int } | SelectionRequest of { sendEvent: bool, owner: Drawable, requestor: Drawable, selection: int, target: int, property: int, time: int } | VisibilityNotify of { sendEvent: bool, window: Drawable, visibility: Visibility } | DeleteRequest of { window: Drawable } (* extra event type *) | Message of { window: Drawable, message: 'a } (* extra event type *) | NoEvent ; end (* XEVENT_SIG *) ; polyml.5.2.1/mlsource/extra/XWindows/XKEYSYMS_SIG.ML0000644000175000017500000010246610313043376020773 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) signature XKEYSYMS_SIG = sig val XK_VoidSymbol: int ; (* * TTY Functions, cleverly chosen to map to ascii, for convenience of * programming, but could have been arbitrary (at the cost of lookup * tables in client code. *) val XK_BackSpace: int ; val XK_Tab: int ; val XK_Linefeed: int ; val XK_Clear: int ; val XK_Return: int ; val XK_Pause: int ; val XK_Scroll_Lock: int ; val XK_Escape: int ; val XK_Delete: int ; (* International & multi-key character composition *) val XK_Multi_key: int ; (* Japanese keyboard support *) val XK_Kanji: int ; val XK_Muhenkan: int ; val XK_Henkan_Mode: int ; val XK_Henkan: int ; val XK_Romaji: int ; val XK_Hiragana: int ; val XK_Katakana: int ; val XK_Hiragana_Katakana: int ; val XK_Zenkaku: int ; val XK_Hankaku: int ; val XK_Zenkaku_Hankaku: int ; val XK_Touroku: int ; val XK_Massyo: int ; val XK_Kana_Lock: int ; val XK_Kana_Shift: int ; val XK_Eisu_Shift: int ; val XK_Eisu_toggle: int ; (* Cursor control & motion *) val XK_Home: int ; val XK_Left: int ; val XK_Up: int ; val XK_Right: int ; val XK_Down: int ; val XK_Prior: int ; val XK_Next: int ; val XK_End: int ; val XK_Begin: int ; (* Misc Functions *) val XK_Select: int ; val XK_Print: int ; val XK_Execute: int ; val XK_Insert: int ; val XK_Undo: int ; val XK_Redo: int ; val XK_Menu: int ; val XK_Find: int ; val XK_Cancel: int ; val XK_Help: int ; val XK_Break: int ; val XK_Mode_switch: int ; val XK_script_switch: int ; val XK_Num_Lock: int ; (* Keypad Functions, keypad numbers cleverly chosen to map to ascii *) val XK_KP_Space: int ; val XK_KP_Tab: int ; val XK_KP_Enter: int ; val XK_KP_F1: int ; val XK_KP_F2: int ; val XK_KP_F3: int ; val XK_KP_F4: int ; val XK_KP_Equal: int ; val XK_KP_Multiply: int ; val XK_KP_Add: int ; val XK_KP_Separator: int ; val XK_KP_Subtract: int ; val XK_KP_Decimal: int ; val XK_KP_Divide: int ; val XK_KP_0: int ; val XK_KP_1: int ; val XK_KP_2: int ; val XK_KP_3: int ; val XK_KP_4: int ; val XK_KP_5: int ; val XK_KP_6: int ; val XK_KP_7: int ; val XK_KP_8: int ; val XK_KP_9: int ; (* * Auxilliary Functions; note the duplicate definitions for left and right * function keys; Sun keyboards and a few other manufactures have such * function key groups on the left and/or right sides of the keyboard. * We've not found a keyboard with more than 35 function keys total. *) val XK_F1: int ; val XK_F2: int ; val XK_F3: int ; val XK_F4: int ; val XK_F5: int ; val XK_F6: int ; val XK_F7: int ; val XK_F8: int ; val XK_F9: int ; val XK_F10: int ; val XK_F11: int ; val XK_L1: int ; val XK_F12: int ; val XK_L2: int ; val XK_F13: int ; val XK_L3: int ; val XK_F14: int ; val XK_L4: int ; val XK_F15: int ; val XK_L5: int ; val XK_F16: int ; val XK_L6: int ; val XK_F17: int ; val XK_L7: int ; val XK_F18: int ; val XK_L8: int ; val XK_F19: int ; val XK_L9: int ; val XK_F20: int ; val XK_L10: int ; val XK_F21: int ; val XK_R1: int ; val XK_F22: int ; val XK_R2: int ; val XK_F23: int ; val XK_R3: int ; val XK_F24: int ; val XK_R4: int ; val XK_F25: int ; val XK_R5: int ; val XK_F26: int ; val XK_R6: int ; val XK_F27: int ; val XK_R7: int ; val XK_F28: int ; val XK_R8: int ; val XK_F29: int ; val XK_R9: int ; val XK_F30: int ; val XK_R10: int ; val XK_F31: int ; val XK_R11: int ; val XK_F32: int ; val XK_R12: int ; val XK_R13: int ; val XK_F33: int ; val XK_F34: int ; val XK_R14: int ; val XK_F35: int ; val XK_R15: int ; (* Modifiers *) val XK_Shift_L: int ; val XK_Shift_R: int ; val XK_Control_L: int ; val XK_Control_R: int ; val XK_Caps_Lock: int ; val XK_Shift_Lock: int ; val XK_Meta_L: int ; val XK_Meta_R: int ; val XK_Alt_L: int ; val XK_Alt_R: int ; val XK_Super_L: int ; val XK_Super_R: int ; val XK_Hyper_L: int ; val XK_Hyper_R: int ; (* Latin 1 *) val XK_space: int ; val XK_exclam: int ; val XK_quotedbl: int ; val XK_numbersign: int ; val XK_dollar: int ; val XK_percent: int ; val XK_ampersand: int ; val XK_apostrophe: int ; val XK_quoteright: int ; val XK_parenleft: int ; val XK_parenright: int ; val XK_asterisk: int ; val XK_plus: int ; val XK_comma: int ; val XK_minus: int ; val XK_period: int ; val XK_slash: int ; val XK_0: int ; val XK_1: int ; val XK_2: int ; val XK_3: int ; val XK_4: int ; val XK_5: int ; val XK_6: int ; val XK_7: int ; val XK_8: int ; val XK_9: int ; val XK_colon: int ; val XK_semicolon: int ; val XK_less: int ; val XK_equal: int ; val XK_greater: int ; val XK_question: int ; val XK_at: int ; val XK_A: int ; val XK_B: int ; val XK_C: int ; val XK_D: int ; val XK_E: int ; val XK_F: int ; val XK_G: int ; val XK_H: int ; val XK_I: int ; val XK_J: int ; val XK_K: int ; val XK_L: int ; val XK_M: int ; val XK_N: int ; val XK_O: int ; val XK_P: int ; val XK_Q: int ; val XK_R: int ; val XK_S: int ; val XK_T: int ; val XK_U: int ; val XK_V: int ; val XK_W: int ; val XK_X: int ; val XK_Y: int ; val XK_Z: int ; val XK_bracketleft: int ; val XK_backslash: int ; val XK_bracketright: int ; val XK_asciicircum: int ; val XK_underscore: int ; val XK_grave: int ; val XK_quoteleft: int ; val XK_a: int ; val XK_b: int ; val XK_c: int ; val XK_d: int ; val XK_e: int ; val XK_f: int ; val XK_g: int ; val XK_h: int ; val XK_i: int ; val XK_j: int ; val XK_k: int ; val XK_l: int ; val XK_m: int ; val XK_n: int ; val XK_o: int ; val XK_p: int ; val XK_q: int ; val XK_r: int ; val XK_s: int ; val XK_t: int ; val XK_u: int ; val XK_v: int ; val XK_w: int ; val XK_x: int ; val XK_y: int ; val XK_z: int ; val XK_braceleft: int ; val XK_bar: int ; val XK_braceright: int ; val XK_asciitilde: int ; val XK_nobreakspace: int ; val XK_exclamdown: int ; val XK_cent: int ; val XK_sterling: int ; val XK_currency: int ; val XK_yen: int ; val XK_brokenbar: int ; val XK_section: int ; val XK_diaeresis: int ; val XK_copyright: int ; val XK_ordfeminine: int ; val XK_guillemotleft: int ; val XK_notsign: int ; val XK_hyphen: int ; val XK_registered: int ; val XK_macron: int ; val XK_degree: int ; val XK_plusminus: int ; val XK_twosuperior: int ; val XK_threesuperior: int ; val XK_acute: int ; val XK_mu: int ; val XK_paragraph: int ; val XK_periodcentered: int ; val XK_cedilla: int ; val XK_onesuperior: int ; val XK_masculine: int ; val XK_guillemotright: int ; val XK_onequarter: int ; val XK_onehalf: int ; val XK_threequarters: int ; val XK_questiondown: int ; val XK_Agrave: int ; val XK_Aacute: int ; val XK_Acircumflex: int ; val XK_Atilde: int ; val XK_Adiaeresis: int ; val XK_Aring: int ; val XK_AE: int ; val XK_Ccedilla: int ; val XK_Egrave: int ; val XK_Eacute: int ; val XK_Ecircumflex: int ; val XK_Ediaeresis: int ; val XK_Igrave: int ; val XK_Iacute: int ; val XK_Icircumflex: int ; val XK_Idiaeresis: int ; val XK_ETH: int ; val XK_Eth: int ; val XK_Ntilde: int ; val XK_Ograve: int ; val XK_Oacute: int ; val XK_Ocircumflex: int ; val XK_Otilde: int ; val XK_Odiaeresis: int ; val XK_multiply: int ; val XK_Ooblique: int ; val XK_Ugrave: int ; val XK_Uacute: int ; val XK_Ucircumflex: int ; val XK_Udiaeresis: int ; val XK_Yacute: int ; val XK_THORN: int ; val XK_Thorn: int ; val XK_ssharp: int ; val XK_agrave: int ; val XK_aacute: int ; val XK_acircumflex: int ; val XK_atilde: int ; val XK_adiaeresis: int ; val XK_aring: int ; val XK_ae: int ; val XK_ccedilla: int ; val XK_egrave: int ; val XK_eacute: int ; val XK_ecircumflex: int ; val XK_ediaeresis: int ; val XK_igrave: int ; val XK_iacute: int ; val XK_icircumflex: int ; val XK_idiaeresis: int ; val XK_eth: int ; val XK_ntilde: int ; val XK_ograve: int ; val XK_oacute: int ; val XK_ocircumflex: int ; val XK_otilde: int ; val XK_odiaeresis: int ; val XK_division: int ; val XK_oslash: int ; val XK_ugrave: int ; val XK_uacute: int ; val XK_ucircumflex: int ; val XK_udiaeresis: int ; val XK_yacute: int ; val XK_thorn: int ; val XK_ydiaeresis: int ; (* Latin 2 *) val XK_Aogonek: int ; val XK_breve: int ; val XK_Lstroke: int ; val XK_Lcaron: int ; val XK_Sacute: int ; val XK_Scaron: int ; val XK_Scedilla: int ; val XK_Tcaron: int ; val XK_Zacute: int ; val XK_Zcaron: int ; val XK_Zabovedot: int ; val XK_aogonek: int ; val XK_ogonek: int ; val XK_lstroke: int ; val XK_lcaron: int ; val XK_sacute: int ; val XK_caron: int ; val XK_scaron: int ; val XK_scedilla: int ; val XK_tcaron: int ; val XK_zacute: int ; val XK_doubleacute: int ; val XK_zcaron: int ; val XK_zabovedot: int ; val XK_Racute: int ; val XK_Abreve: int ; val XK_Lacute: int ; val XK_Cacute: int ; val XK_Ccaron: int ; val XK_Eogonek: int ; val XK_Ecaron: int ; val XK_Dcaron: int ; val XK_Dstroke: int ; val XK_Nacute: int ; val XK_Ncaron: int ; val XK_Odoubleacute: int ; val XK_Rcaron: int ; val XK_Uring: int ; val XK_Udoubleacute: int ; val XK_Tcedilla: int ; val XK_racute: int ; val XK_abreve: int ; val XK_lacute: int ; val XK_cacute: int ; val XK_ccaron: int ; val XK_eogonek: int ; val XK_ecaron: int ; val XK_dcaron: int ; val XK_dstroke: int ; val XK_nacute: int ; val XK_ncaron: int ; val XK_odoubleacute: int ; val XK_udoubleacute: int ; val XK_rcaron: int ; val XK_uring: int ; val XK_tcedilla: int ; val XK_abovedot: int ; (* Latin 3 *) val XK_Hstroke: int ; val XK_Hcircumflex: int ; val XK_Iabovedot: int ; val XK_Gbreve: int ; val XK_Jcircumflex: int ; val XK_hstroke: int ; val XK_hcircumflex: int ; val XK_idotless: int ; val XK_gbreve: int ; val XK_jcircumflex: int ; val XK_Cabovedot: int ; val XK_Ccircumflex: int ; val XK_Gabovedot: int ; val XK_Gcircumflex: int ; val XK_Ubreve: int ; val XK_Scircumflex: int ; val XK_cabovedot: int ; val XK_ccircumflex: int ; val XK_gabovedot: int ; val XK_gcircumflex: int ; val XK_ubreve: int ; val XK_scircumflex: int ; (* Latin 4 *) val XK_kra: int ; val XK_kappa: int ; val XK_Rcedilla: int ; val XK_Itilde: int ; val XK_Lcedilla: int ; val XK_Emacron: int ; val XK_Gcedilla: int ; val XK_Tslash: int ; val XK_rcedilla: int ; val XK_itilde: int ; val XK_lcedilla: int ; val XK_emacron: int ; val XK_gcedilla: int ; val XK_tslash: int ; val XK_ENG: int ; val XK_eng: int ; val XK_Amacron: int ; val XK_Iogonek: int ; val XK_Eabovedot: int ; val XK_Imacron: int ; val XK_Ncedilla: int ; val XK_Omacron: int ; val XK_Kcedilla: int ; val XK_Uogonek: int ; val XK_Utilde: int ; val XK_Umacron: int ; val XK_amacron: int ; val XK_iogonek: int ; val XK_eabovedot: int ; val XK_imacron: int ; val XK_ncedilla: int ; val XK_omacron: int ; val XK_kcedilla: int ; val XK_uogonek: int ; val XK_utilde: int ; val XK_umacron: int ; (* Katakana *) val XK_overline: int ; val XK_kana_fullstop: int ; val XK_kana_openingbracket: int ; val XK_kana_closingbracket: int ; val XK_kana_comma: int ; val XK_kana_conjunctive: int ; val XK_kana_middledot: int ; val XK_kana_WO: int ; val XK_kana_a: int ; val XK_kana_i: int ; val XK_kana_u: int ; val XK_kana_e: int ; val XK_kana_o: int ; val XK_kana_ya: int ; val XK_kana_yu: int ; val XK_kana_yo: int ; val XK_kana_tsu: int ; val XK_kana_tu: int ; val XK_prolongedsound: int ; val XK_kana_A: int ; val XK_kana_I: int ; val XK_kana_U: int ; val XK_kana_E: int ; val XK_kana_O: int ; val XK_kana_KA: int ; val XK_kana_KI: int ; val XK_kana_KU: int ; val XK_kana_KE: int ; val XK_kana_KO: int ; val XK_kana_SA: int ; val XK_kana_SHI: int ; val XK_kana_SU: int ; val XK_kana_SE: int ; val XK_kana_SO: int ; val XK_kana_TA: int ; val XK_kana_CHI: int ; val XK_kana_TI: int ; val XK_kana_TSU: int ; val XK_kana_TU: int ; val XK_kana_TE: int ; val XK_kana_TO: int ; val XK_kana_NA: int ; val XK_kana_NI: int ; val XK_kana_NU: int ; val XK_kana_NE: int ; val XK_kana_NO: int ; val XK_kana_HA: int ; val XK_kana_HI: int ; val XK_kana_FU: int ; val XK_kana_HU: int ; val XK_kana_HE: int ; val XK_kana_HO: int ; val XK_kana_MA: int ; val XK_kana_MI: int ; val XK_kana_MU: int ; val XK_kana_ME: int ; val XK_kana_MO: int ; val XK_kana_YA: int ; val XK_kana_YU: int ; val XK_kana_YO: int ; val XK_kana_RA: int ; val XK_kana_RI: int ; val XK_kana_RU: int ; val XK_kana_RE: int ; val XK_kana_RO: int ; val XK_kana_WA: int ; val XK_kana_N: int ; val XK_voicedsound: int ; val XK_semivoicedsound: int ; val XK_kana_switch: int ; (* Arabic *) val XK_Arabic_comma: int ; val XK_Arabic_semicolon: int ; val XK_Arabic_question_mark: int ; val XK_Arabic_hamza: int ; val XK_Arabic_maddaonalef: int ; val XK_Arabic_hamzaonalef: int ; val XK_Arabic_hamzaonwaw: int ; val XK_Arabic_hamzaunderalef: int ; val XK_Arabic_hamzaonyeh: int ; val XK_Arabic_alef: int ; val XK_Arabic_beh: int ; val XK_Arabic_tehmarbuta: int ; val XK_Arabic_teh: int ; val XK_Arabic_theh: int ; val XK_Arabic_jeem: int ; val XK_Arabic_hah: int ; val XK_Arabic_khah: int ; val XK_Arabic_dal: int ; val XK_Arabic_thal: int ; val XK_Arabic_ra: int ; val XK_Arabic_zain: int ; val XK_Arabic_seen: int ; val XK_Arabic_sheen: int ; val XK_Arabic_sad: int ; val XK_Arabic_dad: int ; val XK_Arabic_tah: int ; val XK_Arabic_zah: int ; val XK_Arabic_ain: int ; val XK_Arabic_ghain: int ; val XK_Arabic_tatweel: int ; val XK_Arabic_feh: int ; val XK_Arabic_qaf: int ; val XK_Arabic_kaf: int ; val XK_Arabic_lam: int ; val XK_Arabic_meem: int ; val XK_Arabic_noon: int ; val XK_Arabic_ha: int ; val XK_Arabic_heh: int ; val XK_Arabic_waw: int ; val XK_Arabic_alefmaksura: int ; val XK_Arabic_yeh: int ; val XK_Arabic_fathatan: int ; val XK_Arabic_dammatan: int ; val XK_Arabic_kasratan: int ; val XK_Arabic_fatha: int ; val XK_Arabic_damma: int ; val XK_Arabic_kasra: int ; val XK_Arabic_shadda: int ; val XK_Arabic_sukun: int ; val XK_Arabic_switch: int ; (* Cyrillic *) val XK_Serbian_dje: int ; val XK_Macedonia_gje: int ; val XK_Cyrillic_io: int ; val XK_Ukrainian_ie: int ; val XK_Ukranian_je: int ; val XK_Macedonia_dse: int ; val XK_Ukrainian_i: int ; val XK_Ukranian_i: int ; val XK_Ukrainian_yi: int ; val XK_Ukranian_yi: int ; val XK_Cyrillic_je: int ; val XK_Serbian_je: int ; val XK_Cyrillic_lje: int ; val XK_Serbian_lje: int ; val XK_Cyrillic_nje: int ; val XK_Serbian_nje: int ; val XK_Serbian_tshe: int ; val XK_Macedonia_kje: int ; val XK_Byelorussian_shortu: int ; val XK_Cyrillic_dzhe: int ; val XK_Serbian_dze: int ; val XK_numerosign: int ; val XK_Serbian_DJE: int ; val XK_Macedonia_GJE: int ; val XK_Cyrillic_IO: int ; val XK_Ukrainian_IE: int ; val XK_Ukranian_JE: int ; val XK_Macedonia_DSE: int ; val XK_Ukrainian_I: int ; val XK_Ukranian_I: int ; val XK_Ukrainian_YI: int ; val XK_Ukranian_YI: int ; val XK_Cyrillic_JE: int ; val XK_Serbian_JE: int ; val XK_Cyrillic_LJE: int ; val XK_Serbian_LJE: int ; val XK_Cyrillic_NJE: int ; val XK_Serbian_NJE: int ; val XK_Serbian_TSHE: int ; val XK_Macedonia_KJE: int ; val XK_Byelorussian_SHORTU: int ; val XK_Cyrillic_DZHE: int ; val XK_Serbian_DZE: int ; val XK_Cyrillic_yu: int ; val XK_Cyrillic_a: int ; val XK_Cyrillic_be: int ; val XK_Cyrillic_tse: int ; val XK_Cyrillic_de: int ; val XK_Cyrillic_ie: int ; val XK_Cyrillic_ef: int ; val XK_Cyrillic_ghe: int ; val XK_Cyrillic_ha: int ; val XK_Cyrillic_i: int ; val XK_Cyrillic_shorti: int ; val XK_Cyrillic_ka: int ; val XK_Cyrillic_el: int ; val XK_Cyrillic_em: int ; val XK_Cyrillic_en: int ; val XK_Cyrillic_o: int ; val XK_Cyrillic_pe: int ; val XK_Cyrillic_ya: int ; val XK_Cyrillic_er: int ; val XK_Cyrillic_es: int ; val XK_Cyrillic_te: int ; val XK_Cyrillic_u: int ; val XK_Cyrillic_zhe: int ; val XK_Cyrillic_ve: int ; val XK_Cyrillic_softsign: int ; val XK_Cyrillic_yeru: int ; val XK_Cyrillic_ze: int ; val XK_Cyrillic_sha: int ; val XK_Cyrillic_e: int ; val XK_Cyrillic_shcha: int ; val XK_Cyrillic_che: int ; val XK_Cyrillic_hardsign: int ; val XK_Cyrillic_YU: int ; val XK_Cyrillic_A: int ; val XK_Cyrillic_BE: int ; val XK_Cyrillic_TSE: int ; val XK_Cyrillic_DE: int ; val XK_Cyrillic_IE: int ; val XK_Cyrillic_EF: int ; val XK_Cyrillic_GHE: int ; val XK_Cyrillic_HA: int ; val XK_Cyrillic_I: int ; val XK_Cyrillic_SHORTI: int ; val XK_Cyrillic_KA: int ; val XK_Cyrillic_EL: int ; val XK_Cyrillic_EM: int ; val XK_Cyrillic_EN: int ; val XK_Cyrillic_O: int ; val XK_Cyrillic_PE: int ; val XK_Cyrillic_YA: int ; val XK_Cyrillic_ER: int ; val XK_Cyrillic_ES: int ; val XK_Cyrillic_TE: int ; val XK_Cyrillic_U: int ; val XK_Cyrillic_ZHE: int ; val XK_Cyrillic_VE: int ; val XK_Cyrillic_SOFTSIGN: int ; val XK_Cyrillic_YERU: int ; val XK_Cyrillic_ZE: int ; val XK_Cyrillic_SHA: int ; val XK_Cyrillic_E: int ; val XK_Cyrillic_SHCHA: int ; val XK_Cyrillic_CHE: int ; val XK_Cyrillic_HARDSIGN: int ; (* Greek *) val XK_Greek_ALPHAaccent: int ; val XK_Greek_EPSILONaccent: int ; val XK_Greek_ETAaccent: int ; val XK_Greek_IOTAaccent: int ; val XK_Greek_IOTAdiaeresis: int ; val XK_Greek_OMICRONaccent: int ; val XK_Greek_UPSILONaccent: int ; val XK_Greek_UPSILONdieresis: int ; val XK_Greek_OMEGAaccent: int ; val XK_Greek_accentdieresis: int ; val XK_Greek_horizbar: int ; val XK_Greek_alphaaccent: int ; val XK_Greek_epsilonaccent: int ; val XK_Greek_etaaccent: int ; val XK_Greek_iotaaccent: int ; val XK_Greek_iotadieresis: int ; val XK_Greek_iotaaccentdieresis: int ; val XK_Greek_omicronaccent: int ; val XK_Greek_upsilonaccent: int ; val XK_Greek_upsilondieresis: int ; val XK_Greek_upsilonaccentdieresis: int ; val XK_Greek_omegaaccent: int ; val XK_Greek_ALPHA: int ; val XK_Greek_BETA: int ; val XK_Greek_GAMMA: int ; val XK_Greek_DELTA: int ; val XK_Greek_EPSILON: int ; val XK_Greek_ZETA: int ; val XK_Greek_ETA: int ; val XK_Greek_THETA: int ; val XK_Greek_IOTA: int ; val XK_Greek_KAPPA: int ; val XK_Greek_LAMDA: int ; val XK_Greek_LAMBDA: int ; val XK_Greek_MU: int ; val XK_Greek_NU: int ; val XK_Greek_XI: int ; val XK_Greek_OMICRON: int ; val XK_Greek_PI: int ; val XK_Greek_RHO: int ; val XK_Greek_SIGMA: int ; val XK_Greek_TAU: int ; val XK_Greek_UPSILON: int ; val XK_Greek_PHI: int ; val XK_Greek_CHI: int ; val XK_Greek_PSI: int ; val XK_Greek_OMEGA: int ; val XK_Greek_alpha: int ; val XK_Greek_beta: int ; val XK_Greek_gamma: int ; val XK_Greek_delta: int ; val XK_Greek_epsilon: int ; val XK_Greek_zeta: int ; val XK_Greek_eta: int ; val XK_Greek_theta: int ; val XK_Greek_iota: int ; val XK_Greek_kappa: int ; val XK_Greek_lamda: int ; val XK_Greek_lambda: int ; val XK_Greek_mu: int ; val XK_Greek_nu: int ; val XK_Greek_xi: int ; val XK_Greek_omicron: int ; val XK_Greek_pi: int ; val XK_Greek_rho: int ; val XK_Greek_sigma: int ; val XK_Greek_finalsmallsigma: int ; val XK_Greek_tau: int ; val XK_Greek_upsilon: int ; val XK_Greek_phi: int ; val XK_Greek_chi: int ; val XK_Greek_psi: int ; val XK_Greek_omega: int ; val XK_Greek_switch: int ; (* Technical *) val XK_leftradical: int ; val XK_topleftradical: int ; val XK_horizconnector: int ; val XK_topintegral: int ; val XK_botintegral: int ; val XK_vertconnector: int ; val XK_topleftsqbracket: int ; val XK_botleftsqbracket: int ; val XK_toprightsqbracket: int ; val XK_botrightsqbracket: int ; val XK_topleftparens: int ; val XK_botleftparens: int ; val XK_toprightparens: int ; val XK_botrightparens: int ; val XK_leftmiddlecurlybrace: int ; val XK_rightmiddlecurlybrace: int ; val XK_topleftsummation: int ; val XK_botleftsummation: int ; val XK_topvertsummationconnector: int ; val XK_botvertsummationconnector: int ; val XK_toprightsummation: int ; val XK_botrightsummation: int ; val XK_rightmiddlesummation: int ; val XK_lessthanequal: int ; val XK_notequal: int ; val XK_greaterthanequal: int ; val XK_integral: int ; val XK_therefore: int ; val XK_variation: int ; val XK_infinity: int ; val XK_nabla: int ; val XK_approximate: int ; val XK_similarequal: int ; val XK_ifonlyif: int ; val XK_implies: int ; val XK_identical: int ; val XK_radical: int ; val XK_includedin: int ; val XK_includes: int ; val XK_intersection: int ; val XK_union: int ; val XK_logicaland: int ; val XK_logicalor: int ; val XK_partialderivative: int ; val XK_function: int ; val XK_leftarrow: int ; val XK_uparrow: int ; val XK_rightarrow: int ; val XK_downarrow: int ; (* Special *) val XK_blank: int ; val XK_soliddiamond: int ; val XK_checkerboard: int ; val XK_ht: int ; val XK_ff: int ; val XK_cr: int ; val XK_lf: int ; val XK_nl: int ; val XK_vt: int ; val XK_lowrightcorner: int ; val XK_uprightcorner: int ; val XK_upleftcorner: int ; val XK_lowleftcorner: int ; val XK_crossinglines: int ; val XK_horizlinescan1: int ; val XK_horizlinescan3: int ; val XK_horizlinescan5: int ; val XK_horizlinescan7: int ; val XK_horizlinescan9: int ; val XK_leftt: int ; val XK_rightt: int ; val XK_bott: int ; val XK_topt: int ; val XK_vertbar: int ; (* Publishing *) val XK_emspace: int ; val XK_enspace: int ; val XK_em3space: int ; val XK_em4space: int ; val XK_digitspace: int ; val XK_punctspace: int ; val XK_thinspace: int ; val XK_hairspace: int ; val XK_emdash: int ; val XK_endash: int ; val XK_signifblank: int ; val XK_ellipsis: int ; val XK_doubbaselinedot: int ; val XK_onethird: int ; val XK_twothirds: int ; val XK_onefifth: int ; val XK_twofifths: int ; val XK_threefifths: int ; val XK_fourfifths: int ; val XK_onesixth: int ; val XK_fivesixths: int ; val XK_careof: int ; val XK_figdash: int ; val XK_leftanglebracket: int ; val XK_decimalpoint: int ; val XK_rightanglebracket: int ; val XK_marker: int ; val XK_oneeighth: int ; val XK_threeeighths: int ; val XK_fiveeighths: int ; val XK_seveneighths: int ; val XK_trademark: int ; val XK_signaturemark: int ; val XK_trademarkincircle: int ; val XK_leftopentriangle: int ; val XK_rightopentriangle: int ; val XK_emopencircle: int ; val XK_emopenrectangle: int ; val XK_leftsinglequotemark: int ; val XK_rightsinglequotemark: int ; val XK_leftdoublequotemark: int ; val XK_rightdoublequotemark: int ; val XK_prescription: int ; val XK_minutes: int ; val XK_seconds: int ; val XK_latincross: int ; val XK_hexagram: int ; val XK_filledrectbullet: int ; val XK_filledlefttribullet: int ; val XK_filledrighttribullet: int ; val XK_emfilledcircle: int ; val XK_emfilledrect: int ; val XK_enopencircbullet: int ; val XK_enopensquarebullet: int ; val XK_openrectbullet: int ; val XK_opentribulletup: int ; val XK_opentribulletdown: int ; val XK_openstar: int ; val XK_enfilledcircbullet: int ; val XK_enfilledsqbullet: int ; val XK_filledtribulletup: int ; val XK_filledtribulletdown: int ; val XK_leftpointer: int ; val XK_rightpointer: int ; val XK_club: int ; val XK_diamond: int ; val XK_heart: int ; val XK_maltesecross: int ; val XK_dagger: int ; val XK_doubledagger: int ; val XK_checkmark: int ; val XK_ballotcross: int ; val XK_musicalsharp: int ; val XK_musicalflat: int ; val XK_malesymbol: int ; val XK_femalesymbol: int ; val XK_telephone: int ; val XK_telephonerecorder: int ; val XK_phonographcopyright: int ; val XK_caret: int ; val XK_singlelowquotemark: int ; val XK_doublelowquotemark: int ; val XK_cursor: int ; (* APL *) val XK_leftcaret: int ; val XK_rightcaret: int ; val XK_downcaret: int ; val XK_upcaret: int ; val XK_overbar: int ; val XK_downtack: int ; val XK_upshoe: int ; val XK_downstile: int ; val XK_underbar: int ; val XK_jot: int ; val XK_quad: int ; val XK_uptack: int ; val XK_circle: int ; val XK_upstile: int ; val XK_downshoe: int ; val XK_rightshoe: int ; val XK_leftshoe: int ; val XK_lefttack: int ; val XK_righttack: int ; (* Hebrew *) val XK_hebrew_doublelowline: int ; val XK_hebrew_aleph: int ; val XK_hebrew_bet: int ; val XK_hebrew_beth: int ; val XK_hebrew_gimel: int ; val XK_hebrew_gimmel: int ; val XK_hebrew_dalet: int ; val XK_hebrew_daleth: int ; val XK_hebrew_he: int ; val XK_hebrew_waw: int ; val XK_hebrew_zain: int ; val XK_hebrew_zayin: int ; val XK_hebrew_chet: int ; val XK_hebrew_het: int ; val XK_hebrew_tet: int ; val XK_hebrew_teth: int ; val XK_hebrew_yod: int ; val XK_hebrew_finalkaph: int ; val XK_hebrew_kaph: int ; val XK_hebrew_lamed: int ; val XK_hebrew_finalmem: int ; val XK_hebrew_mem: int ; val XK_hebrew_finalnun: int ; val XK_hebrew_nun: int ; val XK_hebrew_samech: int ; val XK_hebrew_samekh: int ; val XK_hebrew_ayin: int ; val XK_hebrew_finalpe: int ; val XK_hebrew_pe: int ; val XK_hebrew_finalzade: int ; val XK_hebrew_finalzadi: int ; val XK_hebrew_zade: int ; val XK_hebrew_zadi: int ; val XK_hebrew_qoph: int ; val XK_hebrew_kuf: int ; val XK_hebrew_resh: int ; val XK_hebrew_shin: int ; val XK_hebrew_taw: int ; val XK_hebrew_taf: int ; val XK_Hebrew_switch: int ; end (* XKEYSYMS_SIG *) ; polyml.5.2.1/mlsource/extra/XWindows/XKeySyms.ML0000644000175000017500000010770710313043376020534 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure XKeySyms: XKEYSYMS_SIG = struct val XK_VoidSymbol = 16777215 ; (* * TTY Functions, cleverly chosen to map to ascii, for convenience of * programming, but could have been arbitrary (at the cost of lookup * tables in client code. *) val XK_BackSpace = 65288 ; val XK_Tab = 65289 ; val XK_Linefeed = 65290 ; val XK_Clear = 65291 ; val XK_Return = 65293 ; val XK_Pause = 65299 ; val XK_Scroll_Lock = 65300 ; val XK_Escape = 65307 ; val XK_Delete = 65535 ; (* International & multi-key character composition *) val XK_Multi_key = 65312 ; (* Japanese keyboard support *) val XK_Kanji = 65313 ; val XK_Muhenkan = 65314 ; val XK_Henkan_Mode = 65315 ; val XK_Henkan = 65315 ; val XK_Romaji = 65316 ; val XK_Hiragana = 65317 ; val XK_Katakana = 65318 ; val XK_Hiragana_Katakana = 65319 ; val XK_Zenkaku = 65320 ; val XK_Hankaku = 65321 ; val XK_Zenkaku_Hankaku = 65322 ; val XK_Touroku = 65323 ; val XK_Massyo = 65324 ; val XK_Kana_Lock = 65325 ; val XK_Kana_Shift = 65326 ; val XK_Eisu_Shift = 65327 ; val XK_Eisu_toggle = 65328 ; (* Cursor control & motion *) val XK_Home = 65360 ; val XK_Left = 65361 ; val XK_Up = 65362 ; val XK_Right = 65363 ; val XK_Down = 65364 ; val XK_Prior = 65365 ; val XK_Next = 65366 ; val XK_End = 65367 ; val XK_Begin = 65368 ; (* Misc Functions *) val XK_Select = 65376 ; val XK_Print = 65377 ; val XK_Execute = 65378 ; val XK_Insert = 65379 ; val XK_Undo = 65381 ; val XK_Redo = 65382 ; val XK_Menu = 65383 ; val XK_Find = 65384 ; val XK_Cancel = 65385 ; val XK_Help = 65386 ; val XK_Break = 65387 ; val XK_Mode_switch = 65406 ; val XK_script_switch = 65406 ; val XK_Num_Lock = 65407 ; (* Keypad Functions, keypad numbers cleverly chosen to map to ascii *) val XK_KP_Space = 65408 ; val XK_KP_Tab = 65417 ; val XK_KP_Enter = 65421 ; val XK_KP_F1 = 65425 ; val XK_KP_F2 = 65426 ; val XK_KP_F3 = 65427 ; val XK_KP_F4 = 65428 ; val XK_KP_Equal = 65469 ; val XK_KP_Multiply = 65450 ; val XK_KP_Add = 65451 ; val XK_KP_Separator = 65452 ; val XK_KP_Subtract = 65453 ; val XK_KP_Decimal = 65454 ; val XK_KP_Divide = 65455 ; val XK_KP_0 = 65456 ; val XK_KP_1 = 65457 ; val XK_KP_2 = 65458 ; val XK_KP_3 = 65459 ; val XK_KP_4 = 65460 ; val XK_KP_5 = 65461 ; val XK_KP_6 = 65462 ; val XK_KP_7 = 65463 ; val XK_KP_8 = 65464 ; val XK_KP_9 = 65465 ; (* * Auxilliary Functions; note the duplicate definitions for left and right * function keys; Sun keyboards and a few other manufactures have such * function key groups on the left and/or right sides of the keyboard. * We've not found a keyboard with more than 35 function keys total. *) val XK_F1 = 65470 ; val XK_F2 = 65471 ; val XK_F3 = 65472 ; val XK_F4 = 65473 ; val XK_F5 = 65474 ; val XK_F6 = 65475 ; val XK_F7 = 65476 ; val XK_F8 = 65477 ; val XK_F9 = 65478 ; val XK_F10 = 65479 ; val XK_F11 = 65480 ; val XK_L1 = 65480 ; val XK_F12 = 65481 ; val XK_L2 = 65481 ; val XK_F13 = 65482 ; val XK_L3 = 65482 ; val XK_F14 = 65483 ; val XK_L4 = 65483 ; val XK_F15 = 65484 ; val XK_L5 = 65484 ; val XK_F16 = 65485 ; val XK_L6 = 65485 ; val XK_F17 = 65486 ; val XK_L7 = 65486 ; val XK_F18 = 65487 ; val XK_L8 = 65487 ; val XK_F19 = 65488 ; val XK_L9 = 65488 ; val XK_F20 = 65489 ; val XK_L10 = 65489 ; val XK_F21 = 65490 ; val XK_R1 = 65490 ; val XK_F22 = 65491 ; val XK_R2 = 65491 ; val XK_F23 = 65492 ; val XK_R3 = 65492 ; val XK_F24 = 65493 ; val XK_R4 = 65493 ; val XK_F25 = 65494 ; val XK_R5 = 65494 ; val XK_F26 = 65495 ; val XK_R6 = 65495 ; val XK_F27 = 65496 ; val XK_R7 = 65496 ; val XK_F28 = 65497 ; val XK_R8 = 65497 ; val XK_F29 = 65498 ; val XK_R9 = 65498 ; val XK_F30 = 65499 ; val XK_R10 = 65499 ; val XK_F31 = 65500 ; val XK_R11 = 65500 ; val XK_F32 = 65501 ; val XK_R12 = 65501 ; val XK_R13 = 65502 ; val XK_F33 = 65502 ; val XK_F34 = 65503 ; val XK_R14 = 65503 ; val XK_F35 = 65504 ; val XK_R15 = 65504 ; (* Modifiers *) val XK_Shift_L = 65505 ; val XK_Shift_R = 65506 ; val XK_Control_L = 65507 ; val XK_Control_R = 65508 ; val XK_Caps_Lock = 65509 ; val XK_Shift_Lock = 65510 ; val XK_Meta_L = 65511 ; val XK_Meta_R = 65512 ; val XK_Alt_L = 65513 ; val XK_Alt_R = 65514 ; val XK_Super_L = 65515 ; val XK_Super_R = 65516 ; val XK_Hyper_L = 65517 ; val XK_Hyper_R = 65518 ; (* Latin 1 *) val XK_space = 32 ; val XK_exclam = 33 ; val XK_quotedbl = 34 ; val XK_numbersign = 35 ; val XK_dollar = 36 ; val XK_percent = 37 ; val XK_ampersand = 38 ; val XK_apostrophe = 39 ; val XK_quoteright = 39 ; val XK_parenleft = 40 ; val XK_parenright = 41 ; val XK_asterisk = 42 ; val XK_plus = 43 ; val XK_comma = 44 ; val XK_minus = 45 ; val XK_period = 46 ; val XK_slash = 47 ; val XK_0 = 48 ; val XK_1 = 49 ; val XK_2 = 50 ; val XK_3 = 51 ; val XK_4 = 52 ; val XK_5 = 53 ; val XK_6 = 54 ; val XK_7 = 55 ; val XK_8 = 56 ; val XK_9 = 57 ; val XK_colon = 58 ; val XK_semicolon = 59 ; val XK_less = 60 ; val XK_equal = 61 ; val XK_greater = 62 ; val XK_question = 63 ; val XK_at = 64 ; val XK_A = 65 ; val XK_B = 66 ; val XK_C = 67 ; val XK_D = 68 ; val XK_E = 69 ; val XK_F = 70 ; val XK_G = 71 ; val XK_H = 72 ; val XK_I = 73 ; val XK_J = 74 ; val XK_K = 75 ; val XK_L = 76 ; val XK_M = 77 ; val XK_N = 78 ; val XK_O = 79 ; val XK_P = 80 ; val XK_Q = 81 ; val XK_R = 82 ; val XK_S = 83 ; val XK_T = 84 ; val XK_U = 85 ; val XK_V = 86 ; val XK_W = 87 ; val XK_X = 88 ; val XK_Y = 89 ; val XK_Z = 90 ; val XK_bracketleft = 91 ; val XK_backslash = 92 ; val XK_bracketright = 93 ; val XK_asciicircum = 94 ; val XK_underscore = 95 ; val XK_grave = 96 ; val XK_quoteleft = 96 ; val XK_a = 97 ; val XK_b = 98 ; val XK_c = 99 ; val XK_d = 100 ; val XK_e = 101 ; val XK_f = 102 ; val XK_g = 103 ; val XK_h = 104 ; val XK_i = 105 ; val XK_j = 106 ; val XK_k = 107 ; val XK_l = 108 ; val XK_m = 109 ; val XK_n = 110 ; val XK_o = 111 ; val XK_p = 112 ; val XK_q = 113 ; val XK_r = 114 ; val XK_s = 115 ; val XK_t = 116 ; val XK_u = 117 ; val XK_v = 118 ; val XK_w = 119 ; val XK_x = 120 ; val XK_y = 121 ; val XK_z = 122 ; val XK_braceleft = 123 ; val XK_bar = 124 ; val XK_braceright = 125 ; val XK_asciitilde = 126 ; val XK_nobreakspace = 160 ; val XK_exclamdown = 161 ; val XK_cent = 162 ; val XK_sterling = 163 ; val XK_currency = 164 ; val XK_yen = 165 ; val XK_brokenbar = 166 ; val XK_section = 167 ; val XK_diaeresis = 168 ; val XK_copyright = 169 ; val XK_ordfeminine = 170 ; val XK_guillemotleft = 171 ; val XK_notsign = 172 ; val XK_hyphen = 173 ; val XK_registered = 174 ; val XK_macron = 175 ; val XK_degree = 176 ; val XK_plusminus = 177 ; val XK_twosuperior = 178 ; val XK_threesuperior = 179 ; val XK_acute = 180 ; val XK_mu = 181 ; val XK_paragraph = 182 ; val XK_periodcentered = 183 ; val XK_cedilla = 184 ; val XK_onesuperior = 185 ; val XK_masculine = 186 ; val XK_guillemotright = 187 ; val XK_onequarter = 188 ; val XK_onehalf = 189 ; val XK_threequarters = 190 ; val XK_questiondown = 191 ; val XK_Agrave = 192 ; val XK_Aacute = 193 ; val XK_Acircumflex = 194 ; val XK_Atilde = 195 ; val XK_Adiaeresis = 196 ; val XK_Aring = 197 ; val XK_AE = 198 ; val XK_Ccedilla = 199 ; val XK_Egrave = 200 ; val XK_Eacute = 201 ; val XK_Ecircumflex = 202 ; val XK_Ediaeresis = 203 ; val XK_Igrave = 204 ; val XK_Iacute = 205 ; val XK_Icircumflex = 206 ; val XK_Idiaeresis = 207 ; val XK_ETH = 208 ; val XK_Eth = 208 ; val XK_Ntilde = 209 ; val XK_Ograve = 210 ; val XK_Oacute = 211 ; val XK_Ocircumflex = 212 ; val XK_Otilde = 213 ; val XK_Odiaeresis = 214 ; val XK_multiply = 215 ; val XK_Ooblique = 216 ; val XK_Ugrave = 217 ; val XK_Uacute = 218 ; val XK_Ucircumflex = 219 ; val XK_Udiaeresis = 220 ; val XK_Yacute = 221 ; val XK_THORN = 222 ; val XK_Thorn = 222 ; val XK_ssharp = 223 ; val XK_agrave = 224 ; val XK_aacute = 225 ; val XK_acircumflex = 226 ; val XK_atilde = 227 ; val XK_adiaeresis = 228 ; val XK_aring = 229 ; val XK_ae = 230 ; val XK_ccedilla = 231 ; val XK_egrave = 232 ; val XK_eacute = 233 ; val XK_ecircumflex = 234 ; val XK_ediaeresis = 235 ; val XK_igrave = 236 ; val XK_iacute = 237 ; val XK_icircumflex = 238 ; val XK_idiaeresis = 239 ; val XK_eth = 240 ; val XK_ntilde = 241 ; val XK_ograve = 242 ; val XK_oacute = 243 ; val XK_ocircumflex = 244 ; val XK_otilde = 245 ; val XK_odiaeresis = 246 ; val XK_division = 247 ; val XK_oslash = 248 ; val XK_ugrave = 249 ; val XK_uacute = 250 ; val XK_ucircumflex = 251 ; val XK_udiaeresis = 252 ; val XK_yacute = 253 ; val XK_thorn = 254 ; val XK_ydiaeresis = 255 ; (* Latin 2 *) val XK_Aogonek = 417 ; val XK_breve = 418 ; val XK_Lstroke = 419 ; val XK_Lcaron = 421 ; val XK_Sacute = 422 ; val XK_Scaron = 425 ; val XK_Scedilla = 426 ; val XK_Tcaron = 427 ; val XK_Zacute = 428 ; val XK_Zcaron = 430 ; val XK_Zabovedot = 431 ; val XK_aogonek = 433 ; val XK_ogonek = 434 ; val XK_lstroke = 435 ; val XK_lcaron = 437 ; val XK_sacute = 438 ; val XK_caron = 439 ; val XK_scaron = 441 ; val XK_scedilla = 442 ; val XK_tcaron = 443 ; val XK_zacute = 444 ; val XK_doubleacute = 445 ; val XK_zcaron = 446 ; val XK_zabovedot = 447 ; val XK_Racute = 448 ; val XK_Abreve = 451 ; val XK_Lacute = 453 ; val XK_Cacute = 454 ; val XK_Ccaron = 456 ; val XK_Eogonek = 458 ; val XK_Ecaron = 460 ; val XK_Dcaron = 463 ; val XK_Dstroke = 464 ; val XK_Nacute = 465 ; val XK_Ncaron = 466 ; val XK_Odoubleacute = 469 ; val XK_Rcaron = 472 ; val XK_Uring = 473 ; val XK_Udoubleacute = 475 ; val XK_Tcedilla = 478 ; val XK_racute = 480 ; val XK_abreve = 483 ; val XK_lacute = 485 ; val XK_cacute = 486 ; val XK_ccaron = 488 ; val XK_eogonek = 490 ; val XK_ecaron = 492 ; val XK_dcaron = 495 ; val XK_dstroke = 496 ; val XK_nacute = 497 ; val XK_ncaron = 498 ; val XK_odoubleacute = 501 ; val XK_udoubleacute = 507 ; val XK_rcaron = 504 ; val XK_uring = 505 ; val XK_tcedilla = 510 ; val XK_abovedot = 511 ; (* Latin 3 *) val XK_Hstroke = 673 ; val XK_Hcircumflex = 678 ; val XK_Iabovedot = 681 ; val XK_Gbreve = 683 ; val XK_Jcircumflex = 684 ; val XK_hstroke = 689 ; val XK_hcircumflex = 694 ; val XK_idotless = 697 ; val XK_gbreve = 699 ; val XK_jcircumflex = 700 ; val XK_Cabovedot = 709 ; val XK_Ccircumflex = 710 ; val XK_Gabovedot = 725 ; val XK_Gcircumflex = 728 ; val XK_Ubreve = 733 ; val XK_Scircumflex = 734 ; val XK_cabovedot = 741 ; val XK_ccircumflex = 742 ; val XK_gabovedot = 757 ; val XK_gcircumflex = 760 ; val XK_ubreve = 765 ; val XK_scircumflex = 766 ; (* Latin 4 *) val XK_kra = 930 ; val XK_kappa = 930 ; val XK_Rcedilla = 931 ; val XK_Itilde = 933 ; val XK_Lcedilla = 934 ; val XK_Emacron = 938 ; val XK_Gcedilla = 939 ; val XK_Tslash = 940 ; val XK_rcedilla = 947 ; val XK_itilde = 949 ; val XK_lcedilla = 950 ; val XK_emacron = 954 ; val XK_gcedilla = 955 ; val XK_tslash = 956 ; val XK_ENG = 957 ; val XK_eng = 959 ; val XK_Amacron = 960 ; val XK_Iogonek = 967 ; val XK_Eabovedot = 972 ; val XK_Imacron = 975 ; val XK_Ncedilla = 977 ; val XK_Omacron = 978 ; val XK_Kcedilla = 979 ; val XK_Uogonek = 985 ; val XK_Utilde = 989 ; val XK_Umacron = 990 ; val XK_amacron = 992 ; val XK_iogonek = 999 ; val XK_eabovedot = 1004 ; val XK_imacron = 1007 ; val XK_ncedilla = 1009 ; val XK_omacron = 1010 ; val XK_kcedilla = 1011 ; val XK_uogonek = 1017 ; val XK_utilde = 1021 ; val XK_umacron = 1022 ; (* Katakana *) val XK_overline = 1150 ; val XK_kana_fullstop = 1185 ; val XK_kana_openingbracket = 1186 ; val XK_kana_closingbracket = 1187 ; val XK_kana_comma = 1188 ; val XK_kana_conjunctive = 1189 ; val XK_kana_middledot = 1189 ; val XK_kana_WO = 1190 ; val XK_kana_a = 1191 ; val XK_kana_i = 1192 ; val XK_kana_u = 1193 ; val XK_kana_e = 1194 ; val XK_kana_o = 1195 ; val XK_kana_ya = 1196 ; val XK_kana_yu = 1197 ; val XK_kana_yo = 1198 ; val XK_kana_tsu = 1199 ; val XK_kana_tu = 1199 ; val XK_prolongedsound = 1200 ; val XK_kana_A = 1201 ; val XK_kana_I = 1202 ; val XK_kana_U = 1203 ; val XK_kana_E = 1204 ; val XK_kana_O = 1205 ; val XK_kana_KA = 1206 ; val XK_kana_KI = 1207 ; val XK_kana_KU = 1208 ; val XK_kana_KE = 1209 ; val XK_kana_KO = 1210 ; val XK_kana_SA = 1211 ; val XK_kana_SHI = 1212 ; val XK_kana_SU = 1213 ; val XK_kana_SE = 1214 ; val XK_kana_SO = 1215 ; val XK_kana_TA = 1216 ; val XK_kana_CHI = 1217 ; val XK_kana_TI = 1217 ; val XK_kana_TSU = 1218 ; val XK_kana_TU = 1218 ; val XK_kana_TE = 1219 ; val XK_kana_TO = 1220 ; val XK_kana_NA = 1221 ; val XK_kana_NI = 1222 ; val XK_kana_NU = 1223 ; val XK_kana_NE = 1224 ; val XK_kana_NO = 1225 ; val XK_kana_HA = 1226 ; val XK_kana_HI = 1227 ; val XK_kana_FU = 1228 ; val XK_kana_HU = 1228 ; val XK_kana_HE = 1229 ; val XK_kana_HO = 1230 ; val XK_kana_MA = 1231 ; val XK_kana_MI = 1232 ; val XK_kana_MU = 1233 ; val XK_kana_ME = 1234 ; val XK_kana_MO = 1235 ; val XK_kana_YA = 1236 ; val XK_kana_YU = 1237 ; val XK_kana_YO = 1238 ; val XK_kana_RA = 1239 ; val XK_kana_RI = 1240 ; val XK_kana_RU = 1241 ; val XK_kana_RE = 1242 ; val XK_kana_RO = 1243 ; val XK_kana_WA = 1244 ; val XK_kana_N = 1245 ; val XK_voicedsound = 1246 ; val XK_semivoicedsound = 1247 ; val XK_kana_switch = 65406 ; (* Arabic *) val XK_Arabic_comma = 1452 ; val XK_Arabic_semicolon = 1467 ; val XK_Arabic_question_mark = 1471 ; val XK_Arabic_hamza = 1473 ; val XK_Arabic_maddaonalef = 1474 ; val XK_Arabic_hamzaonalef = 1475 ; val XK_Arabic_hamzaonwaw = 1476 ; val XK_Arabic_hamzaunderalef = 1477 ; val XK_Arabic_hamzaonyeh = 1478 ; val XK_Arabic_alef = 1479 ; val XK_Arabic_beh = 1480 ; val XK_Arabic_tehmarbuta = 1481 ; val XK_Arabic_teh = 1482 ; val XK_Arabic_theh = 1483 ; val XK_Arabic_jeem = 1484 ; val XK_Arabic_hah = 1485 ; val XK_Arabic_khah = 1486 ; val XK_Arabic_dal = 1487 ; val XK_Arabic_thal = 1488 ; val XK_Arabic_ra = 1489 ; val XK_Arabic_zain = 1490 ; val XK_Arabic_seen = 1491 ; val XK_Arabic_sheen = 1492 ; val XK_Arabic_sad = 1493 ; val XK_Arabic_dad = 1494 ; val XK_Arabic_tah = 1495 ; val XK_Arabic_zah = 1496 ; val XK_Arabic_ain = 1497 ; val XK_Arabic_ghain = 1498 ; val XK_Arabic_tatweel = 1504 ; val XK_Arabic_feh = 1505 ; val XK_Arabic_qaf = 1506 ; val XK_Arabic_kaf = 1507 ; val XK_Arabic_lam = 1508 ; val XK_Arabic_meem = 1509 ; val XK_Arabic_noon = 1510 ; val XK_Arabic_ha = 1511 ; val XK_Arabic_heh = 1511 ; val XK_Arabic_waw = 1512 ; val XK_Arabic_alefmaksura = 1513 ; val XK_Arabic_yeh = 1514 ; val XK_Arabic_fathatan = 1515 ; val XK_Arabic_dammatan = 1516 ; val XK_Arabic_kasratan = 1517 ; val XK_Arabic_fatha = 1518 ; val XK_Arabic_damma = 1519 ; val XK_Arabic_kasra = 1520 ; val XK_Arabic_shadda = 1521 ; val XK_Arabic_sukun = 1522 ; val XK_Arabic_switch = 65406 ; (* Cyrillic *) val XK_Serbian_dje = 1697 ; val XK_Macedonia_gje = 1698 ; val XK_Cyrillic_io = 1699 ; val XK_Ukrainian_ie = 1700 ; val XK_Ukranian_je = 1700 ; val XK_Macedonia_dse = 1701 ; val XK_Ukrainian_i = 1702 ; val XK_Ukranian_i = 1702 ; val XK_Ukrainian_yi = 1703 ; val XK_Ukranian_yi = 1703 ; val XK_Cyrillic_je = 1704 ; val XK_Serbian_je = 1704 ; val XK_Cyrillic_lje = 1705 ; val XK_Serbian_lje = 1705 ; val XK_Cyrillic_nje = 1706 ; val XK_Serbian_nje = 1706 ; val XK_Serbian_tshe = 1707 ; val XK_Macedonia_kje = 1708 ; val XK_Byelorussian_shortu = 1710 ; val XK_Cyrillic_dzhe = 1711 ; val XK_Serbian_dze = 1711 ; val XK_numerosign = 1712 ; val XK_Serbian_DJE = 1713 ; val XK_Macedonia_GJE = 1714 ; val XK_Cyrillic_IO = 1715 ; val XK_Ukrainian_IE = 1716 ; val XK_Ukranian_JE = 1716 ; val XK_Macedonia_DSE = 1717 ; val XK_Ukrainian_I = 1718 ; val XK_Ukranian_I = 1718 ; val XK_Ukrainian_YI = 1719 ; val XK_Ukranian_YI = 1719 ; val XK_Cyrillic_JE = 1720 ; val XK_Serbian_JE = 1720 ; val XK_Cyrillic_LJE = 1721 ; val XK_Serbian_LJE = 1721 ; val XK_Cyrillic_NJE = 1722 ; val XK_Serbian_NJE = 1722 ; val XK_Serbian_TSHE = 1723 ; val XK_Macedonia_KJE = 1724 ; val XK_Byelorussian_SHORTU = 1726 ; val XK_Cyrillic_DZHE = 1727 ; val XK_Serbian_DZE = 1727 ; val XK_Cyrillic_yu = 1728 ; val XK_Cyrillic_a = 1729 ; val XK_Cyrillic_be = 1730 ; val XK_Cyrillic_tse = 1731 ; val XK_Cyrillic_de = 1732 ; val XK_Cyrillic_ie = 1733 ; val XK_Cyrillic_ef = 1734 ; val XK_Cyrillic_ghe = 1735 ; val XK_Cyrillic_ha = 1736 ; val XK_Cyrillic_i = 1737 ; val XK_Cyrillic_shorti = 1738 ; val XK_Cyrillic_ka = 1739 ; val XK_Cyrillic_el = 1740 ; val XK_Cyrillic_em = 1741 ; val XK_Cyrillic_en = 1742 ; val XK_Cyrillic_o = 1743 ; val XK_Cyrillic_pe = 1744 ; val XK_Cyrillic_ya = 1745 ; val XK_Cyrillic_er = 1746 ; val XK_Cyrillic_es = 1747 ; val XK_Cyrillic_te = 1748 ; val XK_Cyrillic_u = 1749 ; val XK_Cyrillic_zhe = 1750 ; val XK_Cyrillic_ve = 1751 ; val XK_Cyrillic_softsign = 1752 ; val XK_Cyrillic_yeru = 1753 ; val XK_Cyrillic_ze = 1754 ; val XK_Cyrillic_sha = 1755 ; val XK_Cyrillic_e = 1756 ; val XK_Cyrillic_shcha = 1757 ; val XK_Cyrillic_che = 1758 ; val XK_Cyrillic_hardsign = 1759 ; val XK_Cyrillic_YU = 1760 ; val XK_Cyrillic_A = 1761 ; val XK_Cyrillic_BE = 1762 ; val XK_Cyrillic_TSE = 1763 ; val XK_Cyrillic_DE = 1764 ; val XK_Cyrillic_IE = 1765 ; val XK_Cyrillic_EF = 1766 ; val XK_Cyrillic_GHE = 1767 ; val XK_Cyrillic_HA = 1768 ; val XK_Cyrillic_I = 1769 ; val XK_Cyrillic_SHORTI = 1770 ; val XK_Cyrillic_KA = 1771 ; val XK_Cyrillic_EL = 1772 ; val XK_Cyrillic_EM = 1773 ; val XK_Cyrillic_EN = 1774 ; val XK_Cyrillic_O = 1775 ; val XK_Cyrillic_PE = 1776 ; val XK_Cyrillic_YA = 1777 ; val XK_Cyrillic_ER = 1778 ; val XK_Cyrillic_ES = 1779 ; val XK_Cyrillic_TE = 1780 ; val XK_Cyrillic_U = 1781 ; val XK_Cyrillic_ZHE = 1782 ; val XK_Cyrillic_VE = 1783 ; val XK_Cyrillic_SOFTSIGN = 1784 ; val XK_Cyrillic_YERU = 1785 ; val XK_Cyrillic_ZE = 1786 ; val XK_Cyrillic_SHA = 1787 ; val XK_Cyrillic_E = 1788 ; val XK_Cyrillic_SHCHA = 1789 ; val XK_Cyrillic_CHE = 1790 ; val XK_Cyrillic_HARDSIGN = 1791 ; (* Greek *) val XK_Greek_ALPHAaccent = 1953 ; val XK_Greek_EPSILONaccent = 1954 ; val XK_Greek_ETAaccent = 1955 ; val XK_Greek_IOTAaccent = 1956 ; val XK_Greek_IOTAdiaeresis = 1957 ; val XK_Greek_OMICRONaccent = 1959 ; val XK_Greek_UPSILONaccent = 1960 ; val XK_Greek_UPSILONdieresis = 1961 ; val XK_Greek_OMEGAaccent = 1963 ; val XK_Greek_accentdieresis = 1966 ; val XK_Greek_horizbar = 1967 ; val XK_Greek_alphaaccent = 1969 ; val XK_Greek_epsilonaccent = 1970 ; val XK_Greek_etaaccent = 1971 ; val XK_Greek_iotaaccent = 1972 ; val XK_Greek_iotadieresis = 1973 ; val XK_Greek_iotaaccentdieresis = 1974 ; val XK_Greek_omicronaccent = 1975 ; val XK_Greek_upsilonaccent = 1976 ; val XK_Greek_upsilondieresis = 1977 ; val XK_Greek_upsilonaccentdieresis = 1978 ; val XK_Greek_omegaaccent = 1979 ; val XK_Greek_ALPHA = 1985 ; val XK_Greek_BETA = 1986 ; val XK_Greek_GAMMA = 1987 ; val XK_Greek_DELTA = 1988 ; val XK_Greek_EPSILON = 1989 ; val XK_Greek_ZETA = 1990 ; val XK_Greek_ETA = 1991 ; val XK_Greek_THETA = 1992 ; val XK_Greek_IOTA = 1993 ; val XK_Greek_KAPPA = 1994 ; val XK_Greek_LAMDA = 1995 ; val XK_Greek_LAMBDA = 1995 ; val XK_Greek_MU = 1996 ; val XK_Greek_NU = 1997 ; val XK_Greek_XI = 1998 ; val XK_Greek_OMICRON = 1999 ; val XK_Greek_PI = 2000 ; val XK_Greek_RHO = 2001 ; val XK_Greek_SIGMA = 2002 ; val XK_Greek_TAU = 2004 ; val XK_Greek_UPSILON = 2005 ; val XK_Greek_PHI = 2006 ; val XK_Greek_CHI = 2007 ; val XK_Greek_PSI = 2008 ; val XK_Greek_OMEGA = 2009 ; val XK_Greek_alpha = 2017 ; val XK_Greek_beta = 2018 ; val XK_Greek_gamma = 2019 ; val XK_Greek_delta = 2020 ; val XK_Greek_epsilon = 2021 ; val XK_Greek_zeta = 2022 ; val XK_Greek_eta = 2023 ; val XK_Greek_theta = 2024 ; val XK_Greek_iota = 2025 ; val XK_Greek_kappa = 2026 ; val XK_Greek_lamda = 2027 ; val XK_Greek_lambda = 2027 ; val XK_Greek_mu = 2028 ; val XK_Greek_nu = 2029 ; val XK_Greek_xi = 2030 ; val XK_Greek_omicron = 2031 ; val XK_Greek_pi = 2032 ; val XK_Greek_rho = 2033 ; val XK_Greek_sigma = 2034 ; val XK_Greek_finalsmallsigma = 2035 ; val XK_Greek_tau = 2036 ; val XK_Greek_upsilon = 2037 ; val XK_Greek_phi = 2038 ; val XK_Greek_chi = 2039 ; val XK_Greek_psi = 2040 ; val XK_Greek_omega = 2041 ; val XK_Greek_switch = 65406 ; (* Technical *) val XK_leftradical = 2209 ; val XK_topleftradical = 2210 ; val XK_horizconnector = 2211 ; val XK_topintegral = 2212 ; val XK_botintegral = 2213 ; val XK_vertconnector = 2214 ; val XK_topleftsqbracket = 2215 ; val XK_botleftsqbracket = 2216 ; val XK_toprightsqbracket = 2217 ; val XK_botrightsqbracket = 2218 ; val XK_topleftparens = 2219 ; val XK_botleftparens = 2220 ; val XK_toprightparens = 2221 ; val XK_botrightparens = 2222 ; val XK_leftmiddlecurlybrace = 2223 ; val XK_rightmiddlecurlybrace = 2224 ; val XK_topleftsummation = 2225 ; val XK_botleftsummation = 2226 ; val XK_topvertsummationconnector = 2227 ; val XK_botvertsummationconnector = 2228 ; val XK_toprightsummation = 2229 ; val XK_botrightsummation = 2230 ; val XK_rightmiddlesummation = 2231 ; val XK_lessthanequal = 2236 ; val XK_notequal = 2237 ; val XK_greaterthanequal = 2238 ; val XK_integral = 2239 ; val XK_therefore = 2240 ; val XK_variation = 2241 ; val XK_infinity = 2242 ; val XK_nabla = 2245 ; val XK_approximate = 2248 ; val XK_similarequal = 2249 ; val XK_ifonlyif = 2253 ; val XK_implies = 2254 ; val XK_identical = 2255 ; val XK_radical = 2262 ; val XK_includedin = 2266 ; val XK_includes = 2267 ; val XK_intersection = 2268 ; val XK_union = 2269 ; val XK_logicaland = 2270 ; val XK_logicalor = 2271 ; val XK_partialderivative = 2287 ; val XK_function = 2294 ; val XK_leftarrow = 2299 ; val XK_uparrow = 2300 ; val XK_rightarrow = 2301 ; val XK_downarrow = 2302 ; (* Special *) val XK_blank = 2527 ; val XK_soliddiamond = 2528 ; val XK_checkerboard = 2529 ; val XK_ht = 2530 ; val XK_ff = 2531 ; val XK_cr = 2532 ; val XK_lf = 2533 ; val XK_nl = 2536 ; val XK_vt = 2537 ; val XK_lowrightcorner = 2538 ; val XK_uprightcorner = 2539 ; val XK_upleftcorner = 2540 ; val XK_lowleftcorner = 2541 ; val XK_crossinglines = 2542 ; val XK_horizlinescan1 = 2543 ; val XK_horizlinescan3 = 2544 ; val XK_horizlinescan5 = 2545 ; val XK_horizlinescan7 = 2546 ; val XK_horizlinescan9 = 2547 ; val XK_leftt = 2548 ; val XK_rightt = 2549 ; val XK_bott = 2550 ; val XK_topt = 2551 ; val XK_vertbar = 2552 ; (* Publishing *) val XK_emspace = 2721 ; val XK_enspace = 2722 ; val XK_em3space = 2723 ; val XK_em4space = 2724 ; val XK_digitspace = 2725 ; val XK_punctspace = 2726 ; val XK_thinspace = 2727 ; val XK_hairspace = 2728 ; val XK_emdash = 2729 ; val XK_endash = 2730 ; val XK_signifblank = 2732 ; val XK_ellipsis = 2734 ; val XK_doubbaselinedot = 2735 ; val XK_onethird = 2736 ; val XK_twothirds = 2737 ; val XK_onefifth = 2738 ; val XK_twofifths = 2739 ; val XK_threefifths = 2740 ; val XK_fourfifths = 2741 ; val XK_onesixth = 2742 ; val XK_fivesixths = 2743 ; val XK_careof = 2744 ; val XK_figdash = 2747 ; val XK_leftanglebracket = 2748 ; val XK_decimalpoint = 2749 ; val XK_rightanglebracket = 2750 ; val XK_marker = 2751 ; val XK_oneeighth = 2755 ; val XK_threeeighths = 2756 ; val XK_fiveeighths = 2757 ; val XK_seveneighths = 2758 ; val XK_trademark = 2761 ; val XK_signaturemark = 2762 ; val XK_trademarkincircle = 2763 ; val XK_leftopentriangle = 2764 ; val XK_rightopentriangle = 2765 ; val XK_emopencircle = 2766 ; val XK_emopenrectangle = 2767 ; val XK_leftsinglequotemark = 2768 ; val XK_rightsinglequotemark = 2769 ; val XK_leftdoublequotemark = 2770 ; val XK_rightdoublequotemark = 2771 ; val XK_prescription = 2772 ; val XK_minutes = 2774 ; val XK_seconds = 2775 ; val XK_latincross = 2777 ; val XK_hexagram = 2778 ; val XK_filledrectbullet = 2779 ; val XK_filledlefttribullet = 2780 ; val XK_filledrighttribullet = 2781 ; val XK_emfilledcircle = 2782 ; val XK_emfilledrect = 2783 ; val XK_enopencircbullet = 2784 ; val XK_enopensquarebullet = 2785 ; val XK_openrectbullet = 2786 ; val XK_opentribulletup = 2787 ; val XK_opentribulletdown = 2788 ; val XK_openstar = 2789 ; val XK_enfilledcircbullet = 2790 ; val XK_enfilledsqbullet = 2791 ; val XK_filledtribulletup = 2792 ; val XK_filledtribulletdown = 2793 ; val XK_leftpointer = 2794 ; val XK_rightpointer = 2795 ; val XK_club = 2796 ; val XK_diamond = 2797 ; val XK_heart = 2798 ; val XK_maltesecross = 2800 ; val XK_dagger = 2801 ; val XK_doubledagger = 2802 ; val XK_checkmark = 2803 ; val XK_ballotcross = 2804 ; val XK_musicalsharp = 2805 ; val XK_musicalflat = 2806 ; val XK_malesymbol = 2807 ; val XK_femalesymbol = 2808 ; val XK_telephone = 2809 ; val XK_telephonerecorder = 2810 ; val XK_phonographcopyright = 2811 ; val XK_caret = 2812 ; val XK_singlelowquotemark = 2813 ; val XK_doublelowquotemark = 2814 ; val XK_cursor = 2815 ; (* APL *) val XK_leftcaret = 2979 ; val XK_rightcaret = 2982 ; val XK_downcaret = 2984 ; val XK_upcaret = 2985 ; val XK_overbar = 3008 ; val XK_downtack = 3010 ; val XK_upshoe = 3011 ; val XK_downstile = 3012 ; val XK_underbar = 3014 ; val XK_jot = 3018 ; val XK_quad = 3020 ; val XK_uptack = 3022 ; val XK_circle = 3023 ; val XK_upstile = 3027 ; val XK_downshoe = 3030 ; val XK_rightshoe = 3032 ; val XK_leftshoe = 3034 ; val XK_lefttack = 3036 ; val XK_righttack = 3068 ; (* Hebrew *) val XK_hebrew_doublelowline = 3295 ; val XK_hebrew_aleph = 3296 ; val XK_hebrew_bet = 3297 ; val XK_hebrew_beth = 3297 ; val XK_hebrew_gimel = 3298 ; val XK_hebrew_gimmel = 3298 ; val XK_hebrew_dalet = 3299 ; val XK_hebrew_daleth = 3299 ; val XK_hebrew_he = 3300 ; val XK_hebrew_waw = 3301 ; val XK_hebrew_zain = 3302 ; val XK_hebrew_zayin = 3302 ; val XK_hebrew_chet = 3303 ; val XK_hebrew_het = 3303 ; val XK_hebrew_tet = 3304 ; val XK_hebrew_teth = 3304 ; val XK_hebrew_yod = 3305 ; val XK_hebrew_finalkaph = 3306 ; val XK_hebrew_kaph = 3307 ; val XK_hebrew_lamed = 3308 ; val XK_hebrew_finalmem = 3309 ; val XK_hebrew_mem = 3310 ; val XK_hebrew_finalnun = 3311 ; val XK_hebrew_nun = 3312 ; val XK_hebrew_samech = 3313 ; val XK_hebrew_samekh = 3313 ; val XK_hebrew_ayin = 3314 ; val XK_hebrew_finalpe = 3315 ; val XK_hebrew_pe = 3316 ; val XK_hebrew_finalzade = 3317 ; val XK_hebrew_finalzadi = 3317 ; val XK_hebrew_zade = 3318 ; val XK_hebrew_zadi = 3318 ; val XK_hebrew_qoph = 3319 ; val XK_hebrew_kuf = 3319 ; val XK_hebrew_resh = 3320 ; val XK_hebrew_shin = 3321 ; val XK_hebrew_taw = 3322 ; val XK_hebrew_taf = 3322 ; val XK_Hebrew_switch = 65406 ; end (* XKeySyms *) ; polyml.5.2.1/mlsource/extra/XWindows/XTYPES_SIG.ML0000644000175000017500000000203410313043376020521 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) signature XTYPES_SIG = sig (* abstypes *) type Colormap ; type Cursor ; type Display ; type Drawable ; type Font ; type GC ; type Visual ; (* Geometry *) datatype XPoint = XPoint of { x:int,y:int } ; eqtype XRectangle ; end ; polyml.5.2.1/mlsource/extra/XWindows/XWINDOWS_R2_SIG.ML0000644000175000017500000001325210313043377021317 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (* Grabbing *) eqtype GrabMode ; val GrabModeSync: GrabMode ; val GrabModeAsync: GrabMode ; eqtype GrabStatus ; val GrabSuccess: GrabStatus ; val AlreadyGrabbed: GrabStatus ; val GrabInvalidTime: GrabStatus ; val GrabNotViewable: GrabStatus ; val GrabFrozen: GrabStatus ; (* val XChangeActivePointerGrab: EventMask list -> Cursor -> int -> unit ; *) (* val XGrabButton: ButtonName -> Modifier list -> Drawable -> bool -> EventMask list -> GrabMode -> GrabMode -> Drawable -> Cursor -> unit ; *) (* val XGrabKey: int -> Modifier list -> Drawable -> bool -> GrabMode -> GrabMode -> unit ; *) (* val XGrabKeyboard: Drawable -> bool -> GrabMode -> GrabMode -> int -> GrabStatus ; *) (* val XGrabPointer: Drawable -> bool -> EventMask list -> GrabMode -> GrabMode -> Drawable -> Cursor -> int -> GrabStatus ; *) (* val XGrabServer: unit -> unit ; *) (* val XUngrabButton: ButtonName -> Modifier list -> Drawable -> unit ; *) (* val XUngrabKey: int -> Modifier list -> Drawable -> unit ; *) (* val XUngrabKeyboard: int -> unit ; *) (* val XUngrabPointer: int -> unit ; *) (* val XUngrabServer: unit -> unit ; *) val CurrentTime: int ; (* Keyboard *) eqtype AutoRepeatMode ; val AutoRepeatModeOff: AutoRepeatMode ; val AutoRepeatModeOn: AutoRepeatMode ; val AutoRepeatModeDefault: AutoRepeatMode ; datatype XKeyboardControl = KBKeyClickPercent of int | KBBellPercent of int | KBBellPitch of int | KBBellDuration of int | KBLed of int | KBLedMode of bool | KBKey of int | KBAutoRepeatMode of AutoRepeatMode ; datatype XKeyboardState = XKeyboardState of { keyClickPercent: int, bellPercent: int, bellPitch: int, bellDuration: int, leds: bool list, (* 32 bools *) autoRepeats: bool list, (* 256 bools *) globalAutoRepeat: AutoRepeatMode } ; datatype XModifierKeymap = XModifierKeymap of int (* maxKeysPerModifier *) * int list list ; (* 8 by maxKeysPerModifier keycodes *) eqtype MapIndex ; val ShiftMapIndex: MapIndex ; val LockMapIndex: MapIndex ; val ControlMapIndex: MapIndex ; val Mod1MapIndex: MapIndex ; val Mod2MapIndex: MapIndex ; val Mod3MapIndex: MapIndex ; val Mod4MapIndex: MapIndex ; val Mod5MapIndex: MapIndex ; eqtype MapStatus ; val MappingSuccess: MapStatus ; val MappingBusy: MapStatus ; val MappingFailed: MapStatus ; (* val XChangeKeyboardControl: XKeyboardControl list -> unit ; *) (* val XChangeKeyboardMapping: int -> int -> int list -> unit ; *) (* val XDeleteModifiermapEntry: XModifierKeymap -> int -> MapIndex -> unit ; *) (* val XGetKeyboardControl: unit -> XKeyboardState ; *) (* val XGetKeyboardMapping: int -> int -> int list ; *) (* val XGetModifierMapping: unit -> XModifierKeymap ; *) (* val XInsertModifiermapEntry: XModifierKeymap -> int -> MapIndex -> XModifierKeymap ; *) (* val XKeycodeToKeysym: int -> int -> int ; *) (* val XKeysymToKeycode: int -> int ; *) (* val XKeysymToString: int -> string ; *) (* val XLookupKeysym: int -> MapIndex -> int ; *) (* val XNewModifiermap: int -> XModifierKeymap ; *) (* val XQueryKeymap: unit -> bool list ; (* 256 bools *) *) (* val XRebindKeysym: int -> int list -> string -> unit ; *) (* val XRefreshKeyboardMapping: XMappingEvent -> unit ; *) (* val XSetModifierMapping: XModifierKeymap -> MapStatus ; *) (* val XStringToKeysym: string -> int ; *) (* Pointers *) (* val XChangePointerControl: bool -> bool -> int -> int -> int -> unit ; *) (* val XGetPointerControl: unit -> (int * int * int) ; *) (* val XGetPointerMapping: int -> int list ; *) (* val XSetPointerMapping: int list -> MapStatus ; *) (* val XWarpPointer: Drawable -> Drawable -> XRectangle -> XPoint -> unit ; *) (* Save Set *) eqtype SetMode ; val SetModeInsert: SetMode ; val SetModeDelete: SetMode ; (* val XAddToSaveSet: Drawable -> unit ; *) (* val XChangeSaveSet: Drawable -> SetMode -> unit ; *) (* val XRemoveFromSaveSet: Drawable -> unit ; *) polyml.5.2.1/mlsource/extra/XWindows/XWINDOWS_SIG.ML0000644000175000017500000010561710313043377020763 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) (****************************************************************************** ****************************************************************************** *** *** *** Copyright (c) Abstract Hardware Limited 1988 - 1994 *** *** *** *** Copyright (c) 1987 Digital Equipment Corporation *** *** Copyright (c) 1987 Massachusetts Institute of Technology *** *** *** *** All Rights Reserved *** *** *** *** Permission to use, copy, modify, and distribute this signature and *** *** its documentation for any purpose and without fee is hereby granted, *** *** provided that the above copyright notices appear in all copies and *** *** that both the copyright notices and this permission notice appear in *** *** supporting documentation, and that the names of Digital, MIT and AHL *** *** not be used in advertising or publicity pertaining to distribution of *** *** the signature without specific, written prior permission. Digital, *** *** MIT and AHL disclaim all warranties with regard to this signature, *** *** including all implied warranties of merchantability and fitness, in *** *** no event shall Digital, MIT or AHL be liable for any special, *** *** indirect or consequential damages or any damages whatsoever resulting *** *** from loss of use, data or profits, whether in an action of contract, *** *** negligence or other tortious action, arising out of or in connection *** *** with the use or performance of this signature. *** *** *** ****************************************************************************** ******************************************************************************) signature XWINDOWS_SIG = sig structure XAtoms : XATOMS_SIG; structure XCursors : XCURSORS_SIG; structure XKeySyms : XKEYSYMS_SIG; exception XWindows of string ; include XEVENT_SIG ; (* Geometry *) val Left: XRectangle -> int ; val Right: XRectangle -> int ; val Top: XRectangle -> int ; val Bottom: XRectangle -> int ; val Width: XRectangle -> int ; (* width and height are non-negative *) val Height: XRectangle -> int ; val TopLeft: XRectangle -> XPoint ; val TopRight: XRectangle -> XPoint ; val BottomLeft: XRectangle -> XPoint ; val BottomRight: XRectangle -> XPoint ; exception XRectangle of { top:int,left:int,bottom:int,right:int } ; val Rect: { left:int,right:int,top:int,bottom:int } -> XRectangle ; val Area: { x:int,y:int,w:int,h:int } -> XRectangle ; val DestructRect: XRectangle -> { left:int,right:int,top:int,bottom:int } ; val DestructArea: XRectangle -> { x:int,y:int,w:int,h:int } ; val SplitRect: XRectangle -> (XPoint * XPoint) ; val MakeRect: XPoint -> XPoint -> XRectangle ; val Reflect: XRectangle -> XRectangle ; val NegativePoint: XPoint -> XPoint ; datatype Section = Nothing | Section of XRectangle ; val Intersection: XRectangle -> XRectangle -> Section ; val Union: XRectangle -> XRectangle -> XRectangle ; val OutsetRect: int -> XRectangle -> XRectangle ; val OffsetRect: XRectangle -> XPoint -> XRectangle ; val IncludePoint: XPoint -> XRectangle -> XRectangle ; (* meant to be used as infix operators *) val AddPoint: (XPoint * XPoint) -> XPoint ; val SubtractPoint: (XPoint * XPoint) -> XPoint ; (* meant to be used as infix predicates *) val Inside: (XRectangle * XRectangle) -> bool ; val Overlap: (XRectangle * XRectangle) -> bool ; val Within: (XPoint * XRectangle) -> bool ; val LeftOf: (XPoint * XRectangle) -> bool ; val RightOf: (XPoint * XRectangle) -> bool ; val AboveOf: (XPoint * XRectangle) -> bool ; val BelowOf: (XPoint * XRectangle) -> bool ; val HorizontallyAbutting: (XRectangle * XRectangle) -> bool ; val VerticallyAbutting: (XRectangle * XRectangle) -> bool ; val origin: XPoint ; val empty: XRectangle ; (* Colorcells *) datatype XColor = XColor of { doRed: bool, doGreen: bool, doBlue: bool, red: int, green: int, blue: int, pixel: int } ; val Pixel: XColor -> int ; val RGB: XColor -> (int * int * int) ; val Not: int -> int ; (* infix, for not-ing pixel values *) val And: int * int -> int ; (* infix, for and-ing pixel values *) val Or: int * int -> int ; (* infix, for or-ing pixel values *) val Xor: int * int -> int ; (* infix, for xor-ing pixel values *) val >> : int * int -> int ; (* infix, for shifting pixel values *) val << : int * int -> int ; (* infix, for shifting pixel values *) val XAllocColor: Colormap -> XColor -> XColor ; val XAllocColorCells: Colormap -> bool -> int -> int -> (int list * int list) ; val XAllocColorPlanes: Colormap -> bool -> int -> int -> int -> int -> (int list * int * int * int) ; val XAllocNamedColor: Colormap -> string -> (XColor * XColor) ; val XFreeColors: Colormap -> int list -> int -> unit ; val XLookupColor: Colormap -> string -> (XColor * XColor) ; val XParseColor: Colormap -> string -> XColor ; val XQueryColor: Colormap -> int -> XColor ; val XQueryColors: Colormap -> int list -> XColor list ; val XStoreColor: Colormap -> XColor -> unit ; val XStoreColors: Colormap -> XColor list -> unit ; val XStoreNamedColor: Colormap -> string -> int -> (bool * bool * bool) -> unit ; val BlackPixel: Display -> int ; val WhitePixel: Display -> int ; (* Colormaps *) datatype AllocType = AllocNone | AllocAll ; val XCopyColormapAndFree: Colormap -> Colormap ; val XCreateColormap: Drawable -> Visual -> AllocType -> Colormap ; val XFreeColormap: Colormap -> unit ; val XInstallColormap: Colormap -> unit ; val XListInstalledColormaps: Drawable -> Colormap list ; val XSetWindowColormap: Drawable -> Colormap -> unit ; val XUninstallColormap: Colormap -> unit ; val DefaultColormap: Display -> Colormap ; val DefaultVisual: Display -> Visual ; val DisplayCells: Display -> int ; datatype VisualClass = StaticGray | GrayScale | StaticColor | PseudoColor | TrueColor | DirectColor ; val VisualClass: Visual -> VisualClass ; val VisualRedMask: Visual -> int ; val VisualGreenMask: Visual -> int ; val VisualBlueMask: Visual -> int ; (* Cursors *) val XCreateFontCursor: Display -> int -> Cursor ; val XCreateGlyphCursor: Font -> Font -> int -> int -> XColor -> XColor -> Cursor ; val XCreatePixmapCursor: Drawable -> Drawable -> XColor -> XColor -> XPoint -> Cursor ; val XDefineCursor: Drawable -> Cursor -> unit ; val XFreeCursor: Cursor -> unit ; val XQueryBestCursor: Drawable -> XRectangle -> XRectangle ; val XRecolorCursor: Cursor -> XColor -> XColor -> unit ; val XUndefineCursor: Drawable -> unit ; (* Display Specifications *) datatype ShapeClass = CursorShape | TileShape | StippleShape ; val XQueryBestSize: ShapeClass -> Drawable -> XRectangle -> XRectangle ; datatype BackingStore = NotUseful | WhenMapped | Always ; val XOpenDisplay: string -> Display ; val XStartDisplayHandler: Display -> unit ; val AllPlanes: int ; val CellsOfScreen: Display -> int ; val DefaultDepth: Display -> int ; val DisplayHeight: Display -> int ; val DisplayHeightMM: Display -> int ; val DisplayPlanes: Display -> int ; val DisplayString: Display -> string ; val DisplayWidth: Display -> int ; val DisplayWidthMM: Display -> int ; val DoesBackingStore: Display -> BackingStore ; val DoesSaveUnders: Display -> bool ; val EventMaskOfScreen: Display -> EventMask list ; val MaxCmapsOfScreen: Display -> int ; val MinCmapsOfScreen: Display -> int ; val ProtocolRevision: Display -> int ; val ProtocolVersion: Display -> int ; val ServerVendor: Display -> string ; val VendorRelease: Display -> int ; (* Drawing Primitives *) datatype XArc = XArc of XRectangle * int * int ; datatype XTextItem = XTextItem of string * int * Font ; datatype XTextItem16 = XTextItem16 of int list * int * Font ; datatype CoordMode = CoordModeOrigin | CoordModePrevious ; datatype PolyShape = Complex | Nonconvex | Convex ; val XClearArea: Drawable -> XRectangle -> bool -> unit ; val XClearWindow: Drawable -> unit ; val XCopyArea: Drawable -> Drawable -> GC -> XPoint -> XRectangle -> unit ; val XCopyPlane: Drawable -> Drawable -> GC -> XPoint -> XRectangle -> int -> unit ; val XDrawArc: Drawable -> GC -> XArc -> unit ; val XDrawArcs: Drawable -> GC -> XArc list -> unit ; val XDrawImageString: Drawable -> GC -> XPoint -> string -> unit ; val XDrawImageString16: Drawable -> GC -> XPoint -> int list -> unit ; val XDrawLine: Drawable -> GC -> XPoint -> XPoint -> unit ; val XDrawLines: Drawable -> GC -> XPoint list -> CoordMode -> unit ; val XDrawPoint: Drawable -> GC -> XPoint -> unit ; val XDrawPoints: Drawable -> GC -> XPoint list -> CoordMode -> unit ; val XDrawRectangle: Drawable -> GC -> XRectangle -> unit ; val XDrawRectangles: Drawable -> GC -> XRectangle list -> unit ; val XDrawSegments: Drawable -> GC -> (XPoint * XPoint) list -> unit ; val XDrawString: Drawable -> GC -> XPoint -> string -> unit ; val XDrawString16: Drawable -> GC -> XPoint -> int list -> unit ; val XDrawText: Drawable -> GC -> XPoint -> XTextItem list -> unit ; val XDrawText16: Drawable -> GC -> XPoint -> XTextItem16 list -> unit ; val XFillArc: Drawable -> GC -> XArc -> unit ; val XFillArcs: Drawable -> GC -> XArc list -> unit ; val XFillPolygon: Drawable -> GC -> XPoint list -> PolyShape -> CoordMode -> unit ; val XFillRectangle: Drawable -> GC -> XRectangle -> unit ; val XFillRectangles: Drawable -> GC -> XRectangle list -> unit ; (* Events *) val XSelectInput: Drawable -> EventMask list -> unit ; val XSynchronize: Display -> int -> unit ; val XSetHandler: Drawable -> ('a XEvent * 'b -> 'b) -> 'b -> (int -> 'a -> unit) ; val NullHandler: 'a XEvent * 'b -> 'b ; val CurrentTime: int ; datatype RevertCode = RevertToParent | RevertToPointerRoot | RevertToNone ; val XSetInputFocus: Display -> Drawable -> RevertCode -> int -> unit ; val XGetInputFocus: Display -> (Drawable * RevertCode) ; val XSetSelectionOwner: Display -> int -> Drawable -> int -> unit ; val XGetSelectionOwner: Display -> int -> Drawable ; val XConvertSelection: { selection:int, target:int, property:int, requestor:Drawable, time:int } -> unit ; val XSendSelectionNotify: { selection:int, target:int, property:int, requestor:Drawable, time:int } -> unit ; val XDeleteProperty: Drawable -> int -> unit ; val XInternAtom: Display -> string -> bool -> int ; val XGetAtomName: Display -> int -> string ; (* Fonts *) datatype FontDirection = FontLeftToRight | FontRightToLeft ; datatype XCharStruct = XCharStruct of { lbearing: int, rbearing: int, width: int, ascent: int, descent: int, attributes: int } ; datatype XFontStruct = XFontStruct of { font: Font, direction: FontDirection, minChar: int, maxChar: int, minByte1: int, maxByte1: int, allCharsExist: bool, defaultChar: int, minBounds: XCharStruct, maxBounds: XCharStruct, perChar: XCharStruct list, ascent: int, descent: int } ; val XFreeFont: XFontStruct -> unit ; val XGetFontPath: Display -> string list ; val XListFonts: Display -> string -> int -> string list ; val XListFontsWithInfo: Display -> string -> int -> (string list * XFontStruct list) ; val XLoadFont: Display -> string -> Font ; val XLoadQueryFont: Display -> string -> XFontStruct ; val XQueryFont: Font -> XFontStruct ; val XSetFontPath: Display -> string list -> unit ; val XUnloadFont: Font -> unit ; (* Graphics Context *) datatype GCArcMode = ArcChord | ArcPieSlice ; datatype GCOrder = Unsorted | YSorted | YXSorted | YXBanded ; datatype GCFillRule = EvenOddRule | WindingRule ; datatype GCFillStyle = FillSolid | FillTiled | FillStippled | FillOpaqueStippled ; datatype GCFunction = GXclear | GXand | GXandReverse | GXcopy | GXandInverted | GXnoop | GXxor | GXor | GXnor | GXequiv | GXinvert | GXorReverse | GXcopyInverted | GXorInverted | GXnand | GXset ; datatype GCLineStyle = LineSolid | LineOnOffDash | LineDoubleDash ; datatype GCCapStyle = CapNotLast | CapButt | CapRound | CapProjecting ; datatype GCJoinStyle = JoinMiter | JoinRound | JoinBevel ; datatype GCSubwindowMode = ClipByChildren | IncludeInferiors ; val DefaultGC: Display -> GC ; datatype XGCValue = GCFunction of GCFunction | GCPlaneMask of int | GCForeground of int | GCBackground of int | GCLineWidth of int | GCLineStyle of GCLineStyle | GCCapStyle of GCCapStyle | GCJoinStyle of GCJoinStyle | GCFillStyle of GCFillStyle | GCFillRule of GCFillRule | GCTile of Drawable | GCStipple of Drawable | GCTSOrigin of XPoint | GCFont of Font | GCSubwindowMode of GCSubwindowMode | GCGraphicsExposures of bool | GCClipOrigin of XPoint | GCClipMask of Drawable | GCDashOffset of int | GCDashList of int | GCArcMode of GCArcMode ; val XChangeGC: GC -> XGCValue list -> unit ; val XCreateGC: Drawable -> XGCValue list -> GC ; val XFreeGC: GC -> unit ; val XSetArcMode: GC -> GCArcMode -> unit ; val XSetBackground: GC -> int -> unit ; val XSetClipMask: GC -> Drawable -> unit ; val XSetClipOrigin: GC -> XPoint -> unit ; val XSetClipRectangles: GC -> XPoint -> XRectangle list -> GCOrder -> unit ; val XSetDashes: GC -> int -> int list -> unit ; val XSetFillRule: GC -> GCFillRule -> unit ; val XSetFillStyle: GC -> GCFillStyle -> unit ; val XSetFont: GC -> Font -> unit ; val XSetForeground: GC -> int -> unit ; val XSetFunction: GC -> GCFunction -> unit ; val XSetGraphicsExposures: GC -> bool -> unit ; val XSetLineAttributes: GC -> int -> GCLineStyle -> GCCapStyle -> GCJoinStyle -> unit ; val XSetPlaneMask: GC -> int -> unit ; val XSetState: GC -> int -> int -> GCFunction -> int -> unit ; val XSetStipple: GC -> Drawable -> unit ; val XSetSubwindowMode: GC -> GCSubwindowMode -> unit ; val XSetTile: GC -> Drawable -> unit ; val XSetTSOrigin: GC -> XPoint -> unit ; (* Images *) datatype ImageFormat = XYBitmap | XYPixmap | ZPixmap ; datatype ImageOrder = LSBFirst | MSBFirst ; type ImageData ; val Data: string -> ImageData ; datatype XImage = XImage of { data: ImageData, size: XRectangle, depth: int, format: ImageFormat, xoffset: int, bitmapPad: int, byteOrder: ImageOrder, bitmapUnit: int, bitsPerPixel: int, bytesPerLine: int, visualRedMask: int, bitmapBitOrder: ImageOrder, visualBlueMask: int, visualGreenMask: int } ; val XAddPixel: Display -> XImage -> int -> unit ; val XCreateImage: Visual -> int -> ImageFormat -> int -> string -> XRectangle -> int -> int -> XImage ; val XGetImage: Drawable -> XRectangle -> int -> ImageFormat -> XImage ; val XGetPixel: Display -> XImage -> XPoint -> int ; val XGetSubImage: Drawable -> XRectangle -> int -> ImageFormat -> XImage -> XPoint -> unit ; val XPutImage: Drawable -> GC -> XImage -> XPoint -> XRectangle -> unit ; val XPutPixel: Display -> XImage -> XPoint -> int -> unit ; val XSubImage: Display -> XImage -> XRectangle -> XImage ; val BitmapBitOrder: Display -> ImageOrder ; val BitmapPad: Display -> int ; val BitmapUnit: Display -> int ; val ByteOrder: Display -> ImageOrder ; val ImageByteOrder: XImage -> ImageOrder ; val ImageSize: XImage -> XRectangle ; val ImageDepth: XImage -> int ; (* Keyboard *) (* keysym values are integers, and are defined in other signatures *) val XLookupString: Drawable -> int -> Modifier list -> (string * int) ; val XQueryKeymap: Display -> bool list ; (* 256 bools *) val IsCursorKey: int -> bool ; val IsFunctionKey: int -> bool ; val IsKeypadKey: int -> bool ; val IsMiscFunctionKey: int -> bool ; val IsModifierKey: int -> bool ; val IsPFKey: int -> bool ; (* Output Buffer *) val XFlush: Display -> unit ; val XSync: Display -> bool -> unit ; (* Pointers *) val XQueryPointer: Drawable -> (bool * Drawable * Drawable * XPoint * XPoint * Modifier list) ; (* Screen Saver *) datatype SaveMode = ScreenSaverReset | ScreenSaverActive ; datatype Blanking = DontPreferBlanking | PreferBlanking | DefaultBlanking ; datatype Exposures = DontAllowExposures | AllowExposures | DefaultExposures ; val XActivateScreenSaver: Display -> unit ; val XForceScreenSaver: Display -> SaveMode -> unit ; val XGetScreenSaver: Display -> (int * int * Blanking * Exposures) ; val XResetScreenSaver: Display -> unit ; val XSetScreenSaver: Display -> int -> int -> Blanking -> Exposures -> unit ; (* Standard Geometry *) val XTranslateCoordinates: Drawable -> Drawable -> XPoint -> XPoint * Drawable ; (* Text *) val XTextExtents: XFontStruct -> string -> (FontDirection * int * int * XCharStruct) ; val XTextExtents16: XFontStruct -> int list -> (FontDirection * int * int * XCharStruct) ; val XTextWidth: XFontStruct -> string -> int ; val XTextWidth16: XFontStruct -> int list -> int ; (* Tiles, Pixmaps, Stipples and Bitmaps *) datatype BitmapStatus = BitmapOpenFailed | BitmapFileInvalid | BitmapNoMemory | BitmapSuccess of Drawable * XRectangle * XPoint ; val XCreateBitmapFromData: Drawable -> string -> XRectangle -> Drawable ; val XCreatePixmap: Drawable -> XRectangle -> int -> Drawable ; val XCreatePixmapFromBitmapData: Drawable -> string -> XRectangle -> int -> int -> int -> Drawable ; val XFreePixmap: Drawable -> unit ; val XQueryBestStipple: Drawable -> XRectangle -> XRectangle ; val XQueryBestTile: Drawable -> XRectangle -> XRectangle ; val XReadBitmapFile: Drawable -> string -> BitmapStatus ; val XWriteBitmapFile: string -> Drawable -> XRectangle -> XPoint -> BitmapStatus ; (* User Preferences *) val XAutoRepeatOff: Display -> unit ; val XAutoRepeatOn: Display -> unit ; val XBell: Display -> int -> unit ; val XGetDefault: Display -> string -> string -> string ; (* Window Attributes *) datatype Gravity = ForgetGravity | NorthWestGravity | NorthGravity | NorthEastGravity | WestGravity | CenterGravity | EastGravity | SouthWestGravity | SouthGravity | SouthEastGravity | StaticGravity ; val UnmapGravity: Gravity ; (* same as ForgetGravity *) datatype XSetWindowAttributes = CWBackPixmap of Drawable | CWBackPixel of int | CWBorderPixmap of Drawable | CWBorderPixel of int | CWBitGravity of Gravity | CWWinGravity of Gravity | CWBackingStore of BackingStore | CWBackingPlanes of int | CWBackingPixel of int | CWOverrideRedirect of bool | CWSaveUnder of bool | CWEventMask of EventMask list | CWDontPropagate of EventMask list | CWColormap of Colormap | CWCursor of Cursor ; datatype WindowClass = CopyFromParentClass | InputOutputClass | InputOnlyClass ; datatype MapState = IsUnmapped | IsUnviewable | IsViewable ; datatype XWindowAttributes = XWindowAttributes of { position: XPoint, size: XRectangle, borderWidth: int, depth: int, visual: Visual, root: Drawable, class: WindowClass, bitGravity: Gravity, winGravity: Gravity, backingStore: BackingStore, backingPlanes: int, backingPixel: int, saveUnder: bool, colormap: Colormap, mapInstalled: bool, mapState: MapState, allEventMasks: EventMask list, yourEventMask: EventMask list, doNotPropagateMask: EventMask list, overrideRedirect: bool } ; val XChangeWindowAttributes: Drawable -> XSetWindowAttributes list -> unit ; val XGetGeometry: Drawable -> (Drawable * XPoint * XRectangle * int * int) ; val XGetWindowAttributes: Drawable -> XWindowAttributes ; val XSetWindowBackground: Drawable -> int -> unit ; val XSetWindowBackgroundPixmap: Drawable -> Drawable -> unit ; val XSetWindowBorder: Drawable -> int -> unit ; val XSetWindowBorderPixmap: Drawable -> Drawable -> unit ; val XSetWindowBorderWidth: Drawable -> int -> unit ; (* Window Configuration *) datatype CirculateDirection = RaiseLowest | LowerHighest ; datatype XWindowChanges = CWPosition of XPoint | CWSize of XRectangle | CWBorderWidth of int | CWStackMode of StackMode | CWSibling of Drawable ; val XCirculateSubwindows: Drawable -> CirculateDirection -> unit ; val XCirculateSubwindowsDown: Drawable -> unit ; val XCirculateSubwindowsUp: Drawable -> unit ; val XConfigureWindow: Drawable -> XWindowChanges list -> unit ; val XLowerWindow: Drawable -> unit ; val XMapRaised: Drawable -> unit ; val XMapSubwindows: Drawable -> unit ; val XMapWindow: Drawable -> unit ; val XMoveResizeWindow: Drawable -> XPoint -> XRectangle -> unit ; val XMoveWindow: Drawable -> XPoint -> unit ; val XQueryTree: Drawable -> (Drawable * Drawable * Drawable list) ; val XRaiseWindow: Drawable -> unit ; val XReparentWindow: Drawable -> Drawable -> XPoint -> unit ; val XResizeWindow: Drawable -> XRectangle -> unit ; val XRestackWindows: Drawable list -> unit ; val XUnmapSubwindows: Drawable -> unit ; val XUnmapWindow: Drawable -> unit ; (* Window Existence *) val NoDrawable: Drawable ; val NoCursor: Cursor ; val NoFont: Font ; val NoColormap: Colormap ; val NoVisual: Visual ; val ParentRelative: Drawable ; val CopyFromParentDrawable: Drawable ; val CopyFromParentVisual: Visual ; val PointerWindow: Drawable ; val InputFocus: Drawable ; val PointerRoot: Drawable ; val NoSymbol: int ; val AnyKey: int ; val RootWindow: Display -> Drawable ; val XDestroyWindow: Drawable -> unit ; val XDestroySubwindows: Drawable -> unit ; val XCreateSimpleWindow: Drawable -> XPoint -> XRectangle -> int -> int -> int -> Drawable ; val XCreateWindow: Drawable -> XPoint -> XRectangle -> int -> int -> WindowClass -> Visual -> XSetWindowAttributes list -> Drawable ; (* Window Manager *) datatype XWMStateHint = DontCareState | NormalState | ZoomState | IconicState | InactiveState ; datatype XWMHint = InputHint of bool | StateHint of XWMStateHint | IconPixmapHint of Drawable | IconWindowHint of Drawable | IconPositionHint of XPoint | IconMaskHint of Drawable ; datatype XWMSizeHint = PPosition of XPoint | PSize of XRectangle | PMinSize of XRectangle | PMaxSize of XRectangle | PResizeInc of XRectangle | PAspect of XPoint * XPoint | PBaseSize of XRectangle | PWinGravity of Gravity ; datatype XStandardColormap = XStandardColormap of { colormap: Colormap, redMax: int, redMult: int, greenMax: int, greenMult: int, blueMax: int, blueMult: int, basePixel: int, visual: Visual } ; datatype PropertyValue = PropertyArc of XArc list | PropertyAtom of int list | PropertyBitmap of Drawable list | PropertyColormap of Colormap list | PropertyCursor of Cursor list | PropertyDrawable of Drawable list | PropertyFont of Font list | PropertyInteger of int list | PropertyPixmap of Drawable list | PropertyPoint of XPoint list | PropertyRectangle of XRectangle list | PropertyRGBColormap of XStandardColormap list | PropertyString of string | PropertyVisual of Visual list | PropertyWindow of Drawable list | PropertyWMHints of XWMHint list | PropertyWMSizeHints of XWMSizeHint list | PropertyWMIconSizes of (XRectangle * XRectangle * XRectangle) list ; val XSetProperty: Drawable -> int -> PropertyValue -> int -> unit ; val XGetTextProperty: Drawable -> int -> (string * int * int * int) ; val XGetWMName: Drawable -> string ; val XGetWMIconName: Drawable -> string ; val XGetWMClientMachine: Drawable -> string ; val XSetWMName: Drawable -> string -> unit ; val XSetWMIconName: Drawable -> string -> unit ; val XSetWMClientMachine: Drawable -> string -> unit ; val XGetWMCommand: Drawable -> string list ; val XGetWMClass: Drawable -> string list ; val XSetWMCommand: Drawable -> string list -> unit ; val XSetWMClass: Drawable -> string list -> unit ; val XSetWMHints: Drawable -> XWMHint list -> unit ; val XGetWMHints: Drawable -> XWMHint list ; val XSetWMSizeHints: Drawable -> int -> XWMSizeHint list -> unit ; val XGetWMSizeHints: Drawable -> int -> XWMSizeHint list ; val XSetWMNormalHints: Drawable -> XWMSizeHint list -> unit ; val XGetWMNormalHints: Drawable -> XWMSizeHint list ; val XWMGeometry: Display -> string -> string -> int -> XWMSizeHint list -> XPoint * XRectangle * Gravity ; val XSetWMProperties: Drawable -> string -> string -> string list -> XWMSizeHint list -> XWMHint list -> string list -> unit ; val XSetIconSizes: Drawable -> (XRectangle * XRectangle * XRectangle) list -> unit ; val XGetIconSizes: Drawable -> (XRectangle * XRectangle * XRectangle) list ; val XSetTransientForHint: Drawable -> Drawable -> unit ; val XGetTransientForHint: Drawable -> Drawable ; val XSetWMColormapWindows: Drawable -> Drawable list -> unit ; val XGetWMColormapWindows: Drawable -> Drawable list ; val XSetRGBColormaps: Drawable -> int -> XStandardColormap list -> unit ; val XGetRGBColormaps: Drawable -> int -> XStandardColormap list ; (* Miscellaneous and Convenience functions *) val ColormapID: Colormap -> int ; (* id numbers for X resources *) val CursorID: Cursor -> int ; (* two X resources with the same id are the same resource *) val DrawableID: Drawable -> int ; val FontID: Font -> int ; val GCID: GC -> int ; val VisualID: Visual -> int ; val SameDrawable: Drawable -> Drawable -> bool ; val ColormapDisplay: Colormap -> Display ; (* Display associated with X resource *) val CursorDisplay: Cursor -> Display ; val DrawableDisplay: Drawable -> Display ; val FontDisplay: Font -> Display ; val GCDisplay: GC -> Display ; val VisualDisplay: Visual -> Display ; val ColormapExists: Colormap -> bool ; (* value brought across from previous session *) val CursorExists: Cursor -> bool ; val DrawableExists: Drawable -> bool ; val FontExists: Font -> bool ; val GCExists: GC -> bool ; val VisualExists: Visual -> bool ; val DisplayExists: Display -> bool ; val XSetColors: GC -> int -> int -> unit ; (* set foreground and background *) val XGetWindowRoot: Drawable -> Drawable ; (* root from XGetGeometry *) val XGetWindowPosition: Drawable -> XPoint ; (* position from XGetGeometry *) val XGetWindowSize: Drawable -> XRectangle ; (* size from XGetGeometry *) val XGetWindowBorderWidth: Drawable -> int ; (* border width from XGetGeometry *) val XGetWindowDepth: Drawable -> int ; (* depth from XGetGeometry *) val XGetWindowParent: Drawable -> Drawable ; (* parent from XQueryTree *) val XGetWindowChildren: Drawable -> Drawable list ; (* children from XQueryTree *) val GetTimeOfDay: unit -> int * int ; val FSFont: XFontStruct -> Font ; val FSDirection: XFontStruct -> FontDirection ; val FSMinChar: XFontStruct -> int ; val FSMaxChar: XFontStruct -> int ; val FSMinByte1: XFontStruct -> int ; val FSMaxByte1: XFontStruct -> int ; val FSAllCharsExist: XFontStruct -> bool ; val FSDefaultChar: XFontStruct -> int ; val FSMinBounds: XFontStruct -> XCharStruct ; val FSMaxBounds: XFontStruct -> XCharStruct ; val FSPerChar: XFontStruct -> XCharStruct list ; val FSAscent: XFontStruct -> int ; val FSDescent: XFontStruct -> int ; val CharLBearing: XCharStruct -> int ; val CharRBearing: XCharStruct -> int ; val CharWidth: XCharStruct -> int ; val CharAscent: XCharStruct -> int ; val CharDescent: XCharStruct -> int ; val CharAttributes: XCharStruct -> int ; val FSMinWidth: XFontStruct -> int ; val FSMaxWidth: XFontStruct -> int ; val FSMinHeight: XFontStruct -> int ; val FSMaxHeight: XFontStruct -> int ; val ShiftDown: Modifier list -> bool ; val ControlDown: Modifier list -> bool ; end (* XWINDOWS_SIG *) ; polyml.5.2.1/mlsource/extra/XWindows/ml_bind.ML0000644000175000017500000032571510773147047020417 0ustar daviddavid(* Copyright (c) 2000 Cambridge University Technical Services Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) structure XWindows: XWINDOWS_SIG = struct local open XCall; open XAtoms; in structure XAtoms = XAtoms; structure XCursors = XCursors; structure XKeySyms = XKeySyms; exception XWindows = XWindows; (* abstypes *) abstype Colormap = Colormap with end; abstype Cursor = Cursor with end; abstype Display = Display with end; abstype Drawable = Drawable with end; abstype Font = Font with end; abstype GC = GC with end; abstype Visual = Visual with end; (* Geometry *) datatype XPoint = XPoint of { x:int,y:int }; datatype XRectangle = R of { top:int,left:int,bottom:int,right:int }; fun Left (R {left,...}) = left; fun Right (R {right,...}) = right; fun Top (R {top,...}) = top; fun Bottom (R {bottom,...}) = bottom; fun Width (R {right,left,...}) = right - left; fun Height (R {top,bottom,...}) = bottom - top; fun TopLeft (R {top,left,...}) = XPoint { x=left ,y=top }; fun TopRight (R {top,right,...}) = XPoint { x=right,y=top }; fun BottomLeft (R {bottom,left,...}) = XPoint { x=left ,y=bottom }; fun BottomRight (R {bottom,right,...}) = XPoint { x=right,y=bottom }; exception XRectangle of { top:int,left:int,bottom:int,right:int }; fun Rect (rect as {left,top,right,bottom}) = ( if left <= right andalso top <= bottom then R rect else raise XRectangle rect ); fun Area {x,y,w,h} = Rect { left = x, top = y, right = x+w, bottom = y+h }; fun DestructRect (R rect) = rect; fun DestructArea rect = let val {left,top,right,bottom} = DestructRect rect; in { x = left, y = top, w = right-left, h = bottom-top } end; fun SplitRect rect = let val { top,left,bottom,right } = DestructRect rect; in (XPoint { x = left, y = top }, XPoint { x = right, y = bottom }) end; fun min a b : int = if a < b then a else b; fun max a b : int = if a > b then a else b; fun MakeRect p1 p2 = let val (XPoint{x=x1,y=y1}) = p1; val (XPoint{x=x2,y=y2}) = p2; in Rect { left = min x1 x2, top = min y1 y2, right = max x1 x2, bottom = max y1 y2 } end; fun Reflect rect = let val {top,left,bottom,right} = DestructRect rect; in Rect { left = top, top = left, right = bottom, bottom = right } end; fun NegativePoint (XPoint{x,y}) = XPoint { x = ~x, y = ~y }; datatype Section = Nothing | Section of XRectangle; fun Intersection r1 r2 = let val ML = max (Left r1) (Left r2); val MT = max (Top r1) (Top r2); val MR = min (Right r1) (Right r2); val MB = min (Bottom r1) (Bottom r2); in if MR > ML andalso MB > MT then Section (Rect { left = ML, top = MT, right = MR, bottom = MB }) else Nothing end; fun Union r1 r2 = let val ML = min (Left r1) (Left r2); val MT = min (Top r1) (Top r2); val MR = max (Right r1) (Right r2); val MB = max (Bottom r1) (Bottom r2); in Rect { left = ML, top = MT, right = MR, bottom = MB } end; fun OutsetRect dist rect = let val { top,left,bottom,right } = DestructRect rect; in Rect { left = left - dist, top = top - dist, right = right + dist, bottom = bottom + dist } end; fun OffsetRect rect (XPoint{x,y}) = let val { top,left,bottom,right } = DestructRect rect; in Rect { left = left + x, top = top + y, right = right + x, bottom = bottom + y } end; fun IncludePoint (XPoint{x,y}) rect = let val { top,left,bottom,right } = DestructRect rect; in Rect { left = min x left, top = min y top, right = max x right, bottom = max y bottom } end; infix AddPoint SubtractPoint; fun (XPoint{x,y}) AddPoint (XPoint{x=dx,y=dy}) = ( XPoint { x = x + dx, y = y + dy } ); fun (XPoint{x,y}) SubtractPoint (XPoint{x=dx,y=dy}) = ( XPoint { x = x - dx, y = y - dy } ); infix Inside Overlap Within LeftOf RightOf AboveOf BelowOf HorizontallyAbutting VerticallyAbutting; fun r1 Inside r2 = ( Left r1 >= Left r2 andalso Right r1 <= Right r2 andalso Top r1 >= Top r2 andalso Bottom r1 <= Bottom r2 ); fun r1 Overlap r2 = (case (Intersection r1 r2) of Nothing => false | Section _ => true); fun (XPoint{x,y}) Within rect = ( x >= Left rect andalso y >= Top rect andalso x < Right rect andalso y < Bottom rect ); fun (XPoint{x,y}) LeftOf rect = (x < Left rect); fun (XPoint{x,y}) RightOf rect = (x >= Right rect); fun (XPoint{x,y}) AboveOf rect = (y < Top rect); fun (XPoint{x,y}) BelowOf rect = (y >= Bottom rect); fun a HorizontallyAbutting b = ( (Right a = Left b orelse Left a = Right b) andalso (Top a <= Top b) andalso (Bottom a >= Bottom b) ); fun a VerticallyAbutting b = ( (Bottom a = Top b orelse Top a = Bottom b) andalso (Left a <= Left b) andalso (Right a >= Right b) ); val origin = XPoint { x=0,y=0 }; val empty = Area {x=0,y=0,w=0,h=0}; val a1 = Area { x=0,y=0,w=1,h=1 }; (* Colorcells 100 *) datatype XColor = XColor of { doRed: bool, doGreen: bool, doBlue: bool, red: int, green: int, blue: int, pixel: int }; fun Pixel (XColor {pixel,...}) = pixel; fun RGB (XColor {red,green,blue,...}) = (red,green,blue); fun Not (a:int):int = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_Not,a); infix 9 And Or Xor >> <<; fun a And b = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_And,a:int,b:int):int; fun a Or b = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_Or,a:int,b:int):int; fun a Xor b = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_Xor,a:int,b:int):int; fun a >> b = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_DownShift,a:int,b:int):int; fun a << b = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_UpShift,a:int,b:int):int; fun XAllocColor (cmap:Colormap) (x:XColor):XColor = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XAllocColor,cmap,x); fun XAllocColorCells (cmap:Colormap) (contig:bool) (nplanes:int) (ncolors:int):(int list * int list) = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XAllocColorCells,cmap,contig,nplanes,ncolors); fun XAllocColorPlanes (cmap:Colormap) (contig:bool) (ncolors:int) (nreds:int) (ngreens:int) (nblues:int):(int list * int * int * int) = ( RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XAllocColorPlanes,cmap,contig,ncolors,nreds,ngreens,nblues) ); fun XAllocNamedColor (cmap:Colormap) (name:string):(XColor * XColor) = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XAllocNamedColor,cmap,name); fun XFreeColors (cmap:Colormap) (pixels:int list) (planes:int):unit = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XFreeColors,cmap,pixels,planes); fun XLookupColor (cmap:Colormap) (name:string):(XColor * XColor) = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XLookupColor,cmap,name); fun XParseColor (cmap:Colormap) (name:string):XColor = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XParseColor,cmap,name); fun XQueryColor (cmap:Colormap) (pixel:int):XColor = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XQueryColor,cmap,pixel); fun XQueryColors (cmap:Colormap) (pixels:int list):XColor list = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XQueryColors,cmap,pixels); fun XStoreColor (cmap:Colormap) (x:XColor):unit = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XStoreColor,cmap,x); fun XStoreColors (cmap:Colormap) (L:XColor list):unit = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XStoreColors,cmap,L); fun XStoreNamedColor (cmap:Colormap) (name:string) (pixel:int) (r:bool,g:bool,b:bool):unit = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XStoreNamedColor,cmap,name,pixel,r,g,b); fun BlackPixel (d:Display) = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_BlackPixel,d); fun WhitePixel (d:Display) = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_WhitePixel,d); (* Colormaps 150 *) datatype AllocType = AllocNone | AllocAll; fun fromAllocType AllocNone = 0 | fromAllocType AllocAll = 1; datatype XStandardColormap = XStandardColormap of { colormap: Colormap, redMax: int, redMult: int, greenMax: int, greenMult: int, blueMax: int, blueMult: int, basePixel: int }; fun XCopyColormapAndFree (cmap:Colormap):Colormap = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XCopyColormapAndFree,cmap); fun XCreateColormap (d:Drawable) (v:Visual) (a:AllocType):Colormap = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XCreateColormap,d,v,fromAllocType a); fun XInstallColormap (cmap:Colormap):unit = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XInstallColormap,cmap); fun XListInstalledColormaps (d:Drawable):Colormap list = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XListInstalledColormaps,d); fun XUninstallColormap (cmap:Colormap):unit = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XUninstallColormap,cmap); fun DefaultColormap (d:Display) = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_DefaultColormap,d) : Colormap; fun DefaultVisual (d:Display) = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_DefaultVisual,d) : Visual; fun DisplayCells (d:Display) = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_DisplayCells,d) : int; datatype VisualClass = StaticGray | GrayScale | StaticColor | PseudoColor | TrueColor | DirectColor; fun VisualClass (v:Visual) = case RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_VisualClass,v) of 0 => StaticGray | 1 => GrayScale | 2 => StaticColor | 3 => PseudoColor | 4 => TrueColor | _ => DirectColor; fun VisualRedMask (v:Visual):int = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_VisualRedMask,v); fun VisualGreenMask (v:Visual):int = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_VisualGreenMask,v); fun VisualBlueMask (v:Visual):int = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_VisualBlueMask,v); (* Cursors 200 *) fun XCreateFontCursor (d:Display) (n:int):Cursor = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XCreateFontCursor,d,n); fun XCreateGlyphCursor (sf:Font) (mf:Font) (sc:int) (mc:int) (fg:XColor) (bg:XColor):Cursor = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XCreateGlyphCursor,sf,mf,sc,mc,fg,bg); fun XCreatePixmapCursor (src:Drawable) (mask:Drawable) (fg:XColor) (bg:XColor) (hotspot:XPoint):Cursor = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XCreatePixmapCursor,src,mask,fg,bg,hotspot); fun XDefineCursor (d:Drawable) (c:Cursor):unit = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows(XCALL_XDefineCursor,d,c); fun XQueryBestCursor (d:Drawable) (r:XRectangle):XRectangle = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XQueryBestCursor,d,r); fun XRecolorCursor (c:Cursor) (fg:XColor) (bg:XColor) = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XRecolorCursor,c,fg,bg); fun XUndefineCursor (d:Drawable):unit = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XUndefineCursor,d); (* Display Specifications 250 *) datatype BackingStore = NotUseful | WhenMapped | Always; fun toBackingStore 0 = NotUseful | toBackingStore 1 = WhenMapped | toBackingStore _ = Always; fun fromBackingStore NotUseful = 0 | fromBackingStore WhenMapped = 1 | fromBackingStore Always = 2; datatype EventMask = KeyPressMask | KeyReleaseMask | ButtonPressMask | ButtonReleaseMask | EnterWindowMask | LeaveWindowMask | PointerMotionMask | PointerMotionHintMask | Button1MotionMask | Button2MotionMask | Button3MotionMask | Button4MotionMask | Button5MotionMask | ButtonMotionMask | KeymapStateMask | ExposureMask | VisibilityChangeMask | StructureNotifyMask | ResizeRedirectMask | SubstructureNotifyMask | SubstructureRedirectMask | FocusChangeMask | PropertyChangeMask | ColormapChangeMask | OwnerGrabButtonMask | ButtonClickMask (* extra event mask *); exception BadEventMask of int; fun toEventMask n = let fun MaskName 1 = KeyPressMask | MaskName 2 = KeyReleaseMask | MaskName 4 = ButtonPressMask | MaskName 8 = ButtonReleaseMask | MaskName 16 = EnterWindowMask | MaskName 32 = LeaveWindowMask | MaskName 64 = PointerMotionMask | MaskName 128 = PointerMotionHintMask | MaskName 256 = Button1MotionMask | MaskName 512 = Button2MotionMask | MaskName 1024 = Button3MotionMask | MaskName 2048 = Button4MotionMask | MaskName 4096 = Button5MotionMask | MaskName 8192 = ButtonMotionMask | MaskName 16384 = KeymapStateMask | MaskName 32768 = ExposureMask | MaskName 65536 = VisibilityChangeMask | MaskName 131072 = StructureNotifyMask | MaskName 262144 = ResizeRedirectMask | MaskName 524288 = SubstructureNotifyMask | MaskName 1048576 = SubstructureRedirectMask | MaskName 2097152 = FocusChangeMask | MaskName 4194304 = PropertyChangeMask | MaskName 8388608 = ColormapChangeMask | MaskName 16777216 = OwnerGrabButtonMask | MaskName 2147483648 = ButtonClickMask (* extra event mask *) | MaskName n = raise BadEventMask n; fun ShiftAndMask 0 mask acc = acc | ShiftAndMask n mask acc = ShiftAndMask (n And Not mask) (mask << 1) (if (n And mask) <> 0 then MaskName mask :: acc else acc); in ShiftAndMask n 1 [] end; fun fromEventMask list = let fun MaskBit KeyPressMask = 1 | MaskBit KeyReleaseMask = 2 | MaskBit ButtonPressMask = 4 | MaskBit ButtonReleaseMask = 8 | MaskBit EnterWindowMask = 16 | MaskBit LeaveWindowMask = 32 | MaskBit PointerMotionMask = 64 | MaskBit PointerMotionHintMask = 128 | MaskBit Button1MotionMask = 256 | MaskBit Button2MotionMask = 512 | MaskBit Button3MotionMask = 1024 | MaskBit Button4MotionMask = 2048 | MaskBit Button5MotionMask = 4096 | MaskBit ButtonMotionMask = 8192 | MaskBit KeymapStateMask = 16384 | MaskBit ExposureMask = 32768 | MaskBit VisibilityChangeMask = 65536 | MaskBit StructureNotifyMask = 131072 | MaskBit ResizeRedirectMask = 262144 | MaskBit SubstructureNotifyMask = 524288 | MaskBit SubstructureRedirectMask = 1048576 | MaskBit FocusChangeMask = 2097152 | MaskBit PropertyChangeMask = 4194304 | MaskBit ColormapChangeMask = 8388608 | MaskBit OwnerGrabButtonMask = 16777216 | MaskBit ButtonClickMask = 2147483648 Or MaskBit ButtonPressMask Or MaskBit ButtonReleaseMask (* extra event mask *); fun OrTogether [] acc = acc | OrTogether (H::T) acc = OrTogether T (MaskBit H Or acc); in OrTogether list 0 end; val AllPlanes = Not 0; fun CellsOfScreen (d:Display) = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_CellsOfScreen,d) : int; fun DefaultDepth (d:Display) = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_DefaultDepth,d) : int; fun DisplayHeight (d:Display) = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_DisplayHeight,d) : int; fun DisplayHeightMM (d:Display) = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_DisplayHeightMM,d) : int; fun DisplayPlanes (d:Display) = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_DisplayPlanes,d) : int; fun DisplayString (d:Display) = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_DisplayString,d) : string; fun DisplayWidth (d:Display) = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_DisplayWidth,d) : int; fun DisplayWidthMM (d:Display) = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_DisplayWidthMM,d) : int; fun DoesBackingStore (d:Display) = toBackingStore (RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_DoesBackingStore,d)); fun DoesSaveUnders (d:Display) = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_DoesSaveUnders,d) : bool; fun EventMaskOfScreen (d:Display) = toEventMask (RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_EventMaskOfScreen,d)); fun MaxCmapsOfScreen (d:Display) = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_MaxCmapsOfScreen,d) : int; fun MinCmapsOfScreen (d:Display) = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_MinCmapsOfScreen,d) : int; fun ProtocolRevision (d:Display) = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_ProtocolRevision,d) : int; fun ProtocolVersion (d:Display) = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_ProtocolVersion,d) : int; fun ServerVendor (d:Display) = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_ServerVendor,d) : string; fun VendorRelease (d:Display) = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_VendorRelease,d) : int; (* Drawing Primitives 300 *) datatype XArc = XArc of XRectangle * int * int; datatype XTextItem = XTextItem of string * int * Font; datatype XTextItem16 = XTextItem16 of int list * int * Font; datatype CoordMode = CoordModeOrigin | CoordModePrevious; fun fromCoordMode CoordModeOrigin = 0 | fromCoordMode CoordModePrevious = 1; datatype PolyShape = Complex | Nonconvex | Convex; fun fromPolyShape Complex = 0 | fromPolyShape Nonconvex = 1 | fromPolyShape Convex = 2; fun XClearArea (d:Drawable) (r:XRectangle) (e:bool):unit = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XClearArea,d,r,e); fun XClearWindow (d:Drawable):unit = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XClearWindow,d); fun XCopyArea (src:Drawable) (dst:Drawable) (gc:GC) (P:XPoint) (r:XRectangle):unit = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XCopyArea,src,dst,gc,P,r); fun XCopyPlane (src:Drawable) (dst:Drawable) (gc:GC) (P:XPoint) (r:XRectangle) (plane:int):unit = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XCopyPlane,src,dst,gc,P,r,plane); fun XDrawArc (d:Drawable) (gc:GC) (a:XArc):unit = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XDrawArc,d,gc,a); fun XDrawArcs (d:Drawable) (gc:GC) (L:XArc list):unit = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XDrawArcs,d,gc,L); fun XDrawImageString (d:Drawable) (gc:GC) (p:XPoint) (s:string):unit = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XDrawImageString,d,gc,p,s); fun XDrawImageString16 (d:Drawable) (gc:GC) (p:XPoint) (L:int list):unit = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XDrawImageString16,d,gc,p,L); fun XDrawLine (d:Drawable) (gc:GC) (p1:XPoint) (p2:XPoint):unit = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XDrawLine,d,gc,p1,p2); fun XDrawLines (d:Drawable) (gc:GC) (L:XPoint list) (mode:CoordMode):unit = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XDrawLines,d,gc,L,fromCoordMode mode); fun XDrawPoint (d:Drawable) (gc:GC) (p:XPoint):unit = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XDrawPoint,d,gc,p); fun XDrawPoints (d:Drawable) (gc:GC) (L:XPoint list) (mode:CoordMode):unit = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XDrawPoints,d,gc,L,fromCoordMode mode); fun XDrawRectangle (d:Drawable) (gc:GC) (r:XRectangle):unit = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XDrawRectangle,d,gc,r); fun XDrawRectangles (d:Drawable) (gc:GC) (L:XRectangle list):unit = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XDrawRectangles,d,gc,L); fun XDrawSegments (d:Drawable) (gc:GC) (L:(XPoint * XPoint) list):unit = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XDrawSegments,d,gc,L); fun XDrawString (d:Drawable) (gc:GC) (p:XPoint) (s:string):unit = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XDrawString,d,gc,p,s); fun XDrawString16 (d:Drawable) (gc:GC) (p:XPoint) (s:int list):unit = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XDrawString16,d,gc,p,s); fun XDrawText (d:Drawable) (gc:GC) (p:XPoint) (L:XTextItem list):unit = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XDrawText,d,gc,p,L); fun XDrawText16 (d:Drawable) (gc:GC) (p:XPoint) (L:XTextItem16 list):unit = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XDrawText16,d,gc,p,L); fun XFillArc (d:Drawable) (gc:GC) (a:XArc):unit = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XFillArc,d,gc,a); fun XFillArcs (d:Drawable) (gc:GC) (L:XArc list):unit = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XFillArcs,d,gc,L); fun XFillPolygon (d:Drawable) (gc:GC) (L:XPoint list) (shape:PolyShape) (mode:CoordMode):unit = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XFillPolygon,d,gc,L,fromPolyShape shape,fromCoordMode mode); fun XFillRectangle (d:Drawable) (gc:GC) (r:XRectangle):unit = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XFillRectangle,d,gc,r); fun XFillRectangles (d:Drawable) (gc:GC) (L:XRectangle list):unit = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XFillRectangles,d,gc,L); (* Events 350 *) datatype Modifier = ShiftMask | LockMask | ControlMask | Mod1Mask | Mod2Mask | Mod3Mask | Mod4Mask | Mod5Mask | Button1Mask | Button2Mask | Button3Mask | Button4Mask | Button5Mask | AnyModifier; exception BadModifier of int; fun toModifier n = let fun MaskName 1 = ShiftMask | MaskName 2 = LockMask | MaskName 4 = ControlMask | MaskName 8 = Mod1Mask | MaskName 16 = Mod2Mask | MaskName 32 = Mod3Mask | MaskName 64 = Mod4Mask | MaskName 128 = Mod5Mask | MaskName 256 = Button1Mask | MaskName 512 = Button2Mask | MaskName 1024 = Button3Mask | MaskName 2048 = Button4Mask | MaskName 4096 = Button5Mask | MaskName 32768 = AnyModifier | MaskName n = raise BadModifier n; fun ShiftAndMask 0 mask acc = acc | ShiftAndMask n mask acc = ShiftAndMask (n And Not mask) (mask << 1) (if (n And mask) <> 0 then MaskName mask :: acc else acc); in ShiftAndMask n 1 [] end; fun fromModifier list = let fun MaskBit ShiftMask = 1 | MaskBit LockMask = 2 | MaskBit ControlMask = 4 | MaskBit Mod1Mask = 8 | MaskBit Mod2Mask = 16 | MaskBit Mod3Mask = 32 | MaskBit Mod4Mask = 64 | MaskBit Mod5Mask = 128 | MaskBit Button1Mask = 256 | MaskBit Button2Mask = 512 | MaskBit Button3Mask = 1024 | MaskBit Button4Mask = 2048 | MaskBit Button5Mask = 4096 | MaskBit AnyModifier = 32768; fun OrTogether [] acc = acc | OrTogether (H::T) acc = OrTogether T (MaskBit H Or acc); in OrTogether list 0 end; datatype ButtonName = Button1 | Button2 | Button3 | Button4 | Button5 | AnyButton; fun toButtonName 1 = Button1 | toButtonName 2 = Button2 | toButtonName 3 = Button3 | toButtonName 4 = Button4 | toButtonName 5 = Button5 | toButtonName _ = AnyButton; fun fromButtonName Button1 = 1 | fromButtonName Button2 = 2 | fromButtonName Button3 = 3 | fromButtonName Button4 = 4 | fromButtonName Button5 = 5 | fromButtonName AnyButton = 0; datatype Placement = PlaceOnTop | PlaceOnBottom; fun toPlacement 0 = PlaceOnTop | toPlacement _ = PlaceOnBottom; datatype StackMode = Above | Below | TopIf | BottomIf | Opposite; fun toStackMode 0 = Above | toStackMode 1 = Below | toStackMode 2 = TopIf | toStackMode 3 = BottomIf | toStackMode _ = Opposite; fun fromStackMode Above = 0 | fromStackMode Below = 1 | fromStackMode TopIf = 2 | fromStackMode BottomIf = 3 | fromStackMode Opposite = 4; datatype NotifyMode = NotifyNormal | NotifyGrab | NotifyUngrab | NotifyWhileGrabbed; fun toNotifyMode 0 = NotifyNormal | toNotifyMode 1 = NotifyGrab | toNotifyMode 2 = NotifyUngrab | toNotifyMode _ = NotifyWhileGrabbed; datatype NotifyDetail = NotifyAncestor | NotifyVirtual | NotifyInferior | NotifyNonLinear | NotifyNonLinearVirtual | NotifyPointer | NotifyPointerRoot | NotifyDetailNone; fun toNotifyDetail 0 = NotifyAncestor | toNotifyDetail 1 = NotifyVirtual | toNotifyDetail 2 = NotifyInferior | toNotifyDetail 3 = NotifyNonLinear | toNotifyDetail 4 = NotifyNonLinearVirtual | toNotifyDetail 5 = NotifyPointer | toNotifyDetail 6 = NotifyPointerRoot | toNotifyDetail _ = NotifyDetailNone; datatype GraphicsCode = CopyArea | CopyPlane; fun toGraphicsCode 62 = CopyArea | toGraphicsCode _ = CopyPlane; datatype Visibility = VisibilityUnobscured | VisibilityPartiallyObscured | VisibilityFullyObscured; fun toVisibility 0 = VisibilityUnobscured | toVisibility 1 = VisibilityPartiallyObscured | toVisibility _ = VisibilityFullyObscured; datatype 'a XEvent = ButtonPress of { sendEvent: bool, window: Drawable, root: Drawable, subwindow: Drawable, time: int, pointer: XPoint, rootPointer: XPoint, modifiers: Modifier list, button: ButtonName } | ButtonRelease of { sendEvent: bool, window: Drawable, root: Drawable, subwindow: Drawable, time: int, pointer: XPoint, rootPointer: XPoint, modifiers: Modifier list, button: ButtonName } | ButtonClick of { sendEvent: bool, (* extra event type *) window: Drawable, root: Drawable, subwindow: Drawable, time: int, pointer: XPoint, rootPointer: XPoint, modifiers: Modifier list, button: ButtonName, up: int, (* number of up transitions *) down: int } (* number of down transitions *) | CirculateNotify of { sendEvent: bool, event: Drawable, window: Drawable, place: Placement } | CirculateRequest of { sendEvent: bool, parent: Drawable, window: Drawable, place: Placement } | ColormapNotify of { sendEvent: bool, window: Drawable, colormap: Colormap, new: bool, installed: bool } | ConfigureNotify of { sendEvent: bool, event: Drawable, window: Drawable, position: XPoint, size: XRectangle, borderWidth: int, above: Drawable, overrideRedirect: bool } | ConfigureRequest of { sendEvent: bool, parent: Drawable, window: Drawable, position: XPoint, size: XRectangle, borderWidth: int, above: Drawable, detail: StackMode } | CreateNotify of { sendEvent: bool, parent: Drawable, window: Drawable, position: XPoint, size: XRectangle, borderWidth: int, overrideRedirect: bool } | DestroyNotify of { sendEvent: bool, event: Drawable, window: Drawable } | EnterNotify of { sendEvent: bool, window: Drawable, root: Drawable, subwindow: Drawable, time: int, pointer: XPoint, rootPointer: XPoint, mode: NotifyMode, detail: NotifyDetail, focus: bool, modifiers: Modifier list } | LeaveNotify of { sendEvent: bool, window: Drawable, root: Drawable, subwindow: Drawable, time: int, pointer: XPoint, rootPointer: XPoint, mode: NotifyMode, detail: NotifyDetail, focus: bool, modifiers: Modifier list } | Expose of { sendEvent: bool, window: Drawable, region: XRectangle, count: int } | FocusIn of { sendEvent: bool, window: Drawable, mode: NotifyMode, detail: NotifyDetail } | FocusOut of { sendEvent: bool, window: Drawable, mode: NotifyMode, detail: NotifyDetail } | GraphicsExpose of { sendEvent: bool, window: Drawable, region: XRectangle, count: int, code: GraphicsCode } | NoExpose of { sendEvent: bool, window: Drawable, code: GraphicsCode } | GravityNotify of { sendEvent: bool, event: Drawable, window: Drawable, position: XPoint } | KeymapNotify of { sendEvent: bool, window: Drawable, keyVector: bool list (* 256 bools *) } | KeyPress of { sendEvent: bool, window: Drawable, root: Drawable, subwindow: Drawable, time: int, pointer: XPoint, rootPointer: XPoint, modifiers: Modifier list, keycode: int } | KeyRelease of { sendEvent: bool, window: Drawable, root: Drawable, subwindow: Drawable, time: int, pointer: XPoint, rootPointer: XPoint, modifiers: Modifier list, keycode: int } | MapNotify of { sendEvent: bool, event: Drawable, window: Drawable, overrideRedirect: bool } | UnmapNotify of { sendEvent: bool, event: Drawable, window: Drawable, fromConfigure: bool } | MapRequest of { sendEvent: bool, parent: Drawable, window: Drawable } | MotionNotify of { sendEvent: bool, window: Drawable, root: Drawable, subwindow: Drawable, time: int, pointer: XPoint, rootPointer: XPoint, modifiers: Modifier list, isHint: bool } | ReparentNotify of { sendEvent: bool, event: Drawable, window: Drawable, parent: Drawable, position: XPoint, overrideRedirect: bool } | ResizeRequest of { sendEvent: bool, window: Drawable, size: XRectangle } | SelectionClear of { sendEvent: bool, window: Drawable, selection: int, time: int } | SelectionNotify of { sendEvent: bool, requestor: Drawable, selection: int, target: int, property: int, time: int } | SelectionRequest of { sendEvent: bool, owner: Drawable, requestor: Drawable, selection: int, target: int, property: int, time: int } | VisibilityNotify of { sendEvent: bool, window: Drawable, visibility: Visibility } | DeleteRequest of { window: Drawable } (* extra event type *) | Message of { window: Drawable, message: 'a } (* extra event type *) | NoEvent fun XSelectInput (d:Drawable) (m:EventMask list):unit = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XSelectInput,d,fromEventMask m); fun XSynchronize (d:Display) (n:int):unit = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XSynchronize,d,n); fun XSetHandler (drawable:Drawable) (Handler:'a XEvent * 'b -> 'b) (initialState:'b) = ( RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_SetState,drawable,Handler,initialState); fn (ms:int) => fn (alpha:'a) => RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_InsertTimeout,drawable,ms,alpha,Handler) ); fun NullHandler (e,s) = s; local fun Exists x = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_ResourceExists,x):bool; in val ColormapExists = Exists : Colormap -> bool; val CursorExists = Exists : Cursor -> bool; val DrawableExists = Exists : Drawable -> bool; val FontExists = Exists : Font -> bool; val GCExists = Exists : GC -> bool; val VisualExists = Exists : Visual -> bool; val DisplayExists = Exists : Display -> bool; end; local fun GetDisplay x = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_GetDisplay,x):Display; in val ColormapDisplay = GetDisplay : Colormap -> Display; val CursorDisplay = GetDisplay : Cursor -> Display; val DrawableDisplay = GetDisplay : Drawable -> Display; val FontDisplay = GetDisplay : Font -> Display; val GCDisplay = GetDisplay : GC -> Display; val VisualDisplay = GetDisplay : Visual -> Display; end; local fun MakeXKeyEvent (_,sendEvent,window,(root,subwindow,time,pointer,rootPointer,modifiers,keycode),_,_) = { sendEvent = sendEvent, window = window, root = root, subwindow = subwindow, time = time, pointer = pointer, rootPointer = rootPointer, modifiers = toModifier modifiers, keycode = keycode }; fun MakeXButtonEvent (_,sendEvent,window,(root,subwindow,time,pointer,rootPointer,modifiers,button),_,_) = { sendEvent = sendEvent, window = window, root = root, subwindow = subwindow, time = time, pointer = pointer, rootPointer = rootPointer, modifiers = toModifier modifiers, button = toButtonName button }; fun MakeXMotionEvent (_,sendEvent,window,(root,subwindow,time,pointer,rootPointer,modifiers,isHint),_,_) = { sendEvent = sendEvent, window = window, root = root, subwindow = subwindow, time = time, pointer = pointer, rootPointer = rootPointer, modifiers = toModifier modifiers, isHint = isHint }; fun MakeXCrossingEvent (_,sendEvent,window,(root,subwindow,time,pointer,rootPointer,mode,detail,focus,modifiers),_,_) = { sendEvent = sendEvent, window = window, root = root, subwindow = subwindow, time = time, pointer = pointer, rootPointer = rootPointer, mode = toNotifyMode mode, detail = toNotifyDetail detail, focus = focus, modifiers = toModifier modifiers }; fun MakeXExposeEvent (_,sendEvent,window,(region,count),_,_) = { sendEvent = sendEvent, window = window, region = region, count = count }; fun MakeXGraphicsExposeEvent (_,sendEvent,window,(region,count,code),_,_) = { sendEvent = sendEvent, window = window, region = region, count = count, code = toGraphicsCode code }; fun MakeXNoExposeEvent (_,sendEvent,window,code,_,_) = { sendEvent = sendEvent, window = window, code = toGraphicsCode code }; fun MakeXVisibilityEvent (_,sendEvent,window,visibility,_,_) = { sendEvent = sendEvent, window = window, visibility = toVisibility visibility }; fun MakeXCreateWindowEvent (_,sendEvent,parent,(window,position,size,borderWidth,overrideRedirect),_,_) = { sendEvent = sendEvent, window = window, parent = parent, position = position, size = size, borderWidth = borderWidth, overrideRedirect = overrideRedirect }; fun MakeXDestroyWindowEvent (_,sendEvent,event,window,_,_) = { sendEvent = sendEvent, event = event, window = window }; fun MakeXUnmapEvent (_,sendEvent,event,(window,fromConfigure),_,_) = { sendEvent = sendEvent, event = event, window = window, fromConfigure = fromConfigure }; fun MakeXMapEvent (_,sendEvent,event,(window,overrideRedirect),_,_) = { sendEvent = sendEvent, event = event, window = window, overrideRedirect = overrideRedirect }; fun MakeXFocusChangeEvent (_,sendEvent,window,(mode,detail),_,_) = { sendEvent = sendEvent, window = window, mode = toNotifyMode mode, detail = toNotifyDetail mode }; fun MakeXKeymapEvent (_,sendEvent,window,keyVector,_,_) = { sendEvent = sendEvent, window = window, keyVector = keyVector }; fun MakeXConfigureEvent (_,sendEvent,event,(window,position,size,borderWidth,above,overrideRedirect),_,_) = { sendEvent = sendEvent, event = event, window = window, position = position, size = size, borderWidth = borderWidth, above = above, overrideRedirect = overrideRedirect }; fun MakeXMapRequestEvent (_,sendEvent,parent,window,_,_) = { sendEvent = sendEvent, parent = parent, window = window }; fun MakeXReparentEvent (_,sendEvent,event,(window,parent,position,overrideRedirect),_,_) = { sendEvent = sendEvent, event = event, window = window, parent = parent, position = position, overrideRedirect = overrideRedirect }; fun MakeXConfigureRequestEvent (_,sendEvent,parent,(window,position,size,borderWidth,above,detail),_,_) = { sendEvent = sendEvent, parent = parent, window = window, position = position, size = size, borderWidth = borderWidth, above = above, detail = toStackMode detail }; fun MakeXGravityEvent (_,sendEvent,event,(window,position),_,_) = { sendEvent = sendEvent, event = event, window = window, position = position }; fun MakeXResizeRequestEvent (_,sendEvent,window,size,_,_) = { sendEvent = sendEvent, window = window, size = size }; fun MakeXCirculateEvent (_,sendEvent,event,(window,place),_,_) = { sendEvent = sendEvent, event = event, window = window, place = toPlacement place }; fun MakeXCirculateRequestEvent (_,sendEvent,parent,(window,place),_,_) = { sendEvent = sendEvent, parent = parent, window = window, place = toPlacement place }; fun MakeXSelectionClearEvent (_,sendEvent,window,(selection,time),_,_) = { sendEvent = sendEvent, window = window, selection = selection, time = time } fun MakeXSelectionEvent (_,sendEvent,requestor,(selection,target,property,time),_,_) = { sendEvent = sendEvent, requestor = requestor, selection = selection, target = target, property = property, time = time } fun MakeXSelectionRequestEvent (_,sendEvent,owner,(requestor,selection,target,property,time),_,_) = { sendEvent = sendEvent, owner = owner, requestor = requestor, selection = selection, target = target, property = property, time = time } fun MakeXColormapEvent (_,sendEvent,window,(colormap,new,installed),_,_) = { sendEvent = sendEvent, window = window, colormap = colormap, new = new, installed = installed }; fun MakeXClickEvent (_,sendEvent,window,(root,subwindow,time,pointer,rootPointer,modifiers,button,up,down),_,_) = { sendEvent = sendEvent, window = window, root = root, subwindow = subwindow, time = time, pointer = pointer, rootPointer = rootPointer, modifiers = toModifier modifiers, button = toButtonName button, up = up, down = down }; fun MakeDeleteEvent (_,_,window,_,_,_) = { window = window }; fun MakeMessageEvent (_,_,window,message,_,_) = { window = window, message = message }; fun NextEvent display = let val (data as (etype,_,window,_,callbacks, events)) = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_NextEvent,display); val event = case etype of 2 => KeyPress (MakeXKeyEvent (RunCall.unsafeCast data)) | 3 => KeyRelease (MakeXKeyEvent (RunCall.unsafeCast data)) | 4 => ButtonPress (MakeXButtonEvent (RunCall.unsafeCast data)) | 5 => ButtonRelease (MakeXButtonEvent (RunCall.unsafeCast data)) | 6 => MotionNotify (MakeXMotionEvent (RunCall.unsafeCast data)) | 7 => EnterNotify (MakeXCrossingEvent (RunCall.unsafeCast data)) | 8 => LeaveNotify (MakeXCrossingEvent (RunCall.unsafeCast data)) | 9 => FocusIn (MakeXFocusChangeEvent (RunCall.unsafeCast data)) | 10 => FocusOut (MakeXFocusChangeEvent (RunCall.unsafeCast data)) | 11 => KeymapNotify (MakeXKeymapEvent (RunCall.unsafeCast data)) | 12 => Expose (MakeXExposeEvent (RunCall.unsafeCast data)) | 13 => GraphicsExpose (MakeXGraphicsExposeEvent (RunCall.unsafeCast data)) | 14 => NoExpose (MakeXNoExposeEvent (RunCall.unsafeCast data)) | 15 => VisibilityNotify (MakeXVisibilityEvent (RunCall.unsafeCast data)) | 16 => CreateNotify (MakeXCreateWindowEvent (RunCall.unsafeCast data)) | 17 => DestroyNotify (MakeXDestroyWindowEvent (RunCall.unsafeCast data)) | 18 => UnmapNotify (MakeXUnmapEvent (RunCall.unsafeCast data)) | 19 => MapNotify (MakeXMapEvent (RunCall.unsafeCast data)) | 22 => ConfigureNotify (MakeXConfigureEvent (RunCall.unsafeCast data)) | 20 => MapRequest (MakeXMapRequestEvent (RunCall.unsafeCast data)) | 21 => ReparentNotify (MakeXReparentEvent (RunCall.unsafeCast data)) | 23 => ConfigureRequest (MakeXConfigureRequestEvent (RunCall.unsafeCast data)) | 24 => GravityNotify (MakeXGravityEvent (RunCall.unsafeCast data)) | 25 => ResizeRequest (MakeXResizeRequestEvent (RunCall.unsafeCast data)) | 26 => CirculateNotify (MakeXCirculateEvent (RunCall.unsafeCast data)) | 27 => CirculateRequest (MakeXCirculateRequestEvent (RunCall.unsafeCast data)) | 29 => SelectionClear (MakeXSelectionClearEvent (RunCall.unsafeCast data)) | 30 => SelectionRequest (MakeXSelectionRequestEvent (RunCall.unsafeCast data)) | 31 => SelectionNotify (MakeXSelectionEvent (RunCall.unsafeCast data)) | 32 => ColormapNotify (MakeXColormapEvent (RunCall.unsafeCast data)) | 42 => ButtonClick (MakeXClickEvent (RunCall.unsafeCast data)) | 43 => DeleteRequest (MakeDeleteEvent (RunCall.unsafeCast data)) | 99 => Message (MakeMessageEvent (RunCall.unsafeCast data)) | 100 => NoEvent | _ => raise XWindows "Bad event type"; in (event,window,callbacks,events) end; fun ProcessEvent (event,window,[],[]) () = let val (handler,state) = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_GetState,window); val newState = handler (event,state); in if DrawableExists window then let val (newHandler,_) = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_GetState,window); in if PolyML.pointerEq(handler, newHandler) then RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_SetState,window,nil,newState) else () end else () end | ProcessEvent (event,_,callbacks,events) () = let fun Call [] = () | Call ((w,f)::T) = ( Call T; RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_SetWidgetState,w,f (w,event,RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_GetWidgetState,w))) ); fun call [] = () | call ((w,f)::T) = (call T; f (w, event)) in Call callbacks; call events end; datatype 'a Option = None | Some of 'a; fun XWindowHandler display = let val E = Some (NextEvent display) handle XWindows _ => None; in case E of None => () | Some e => ( PolyML.exception_trace (ProcessEvent e) handle XWindows s => print("Exception XWindows \"" ^ s ^ "\" raised.\n") | _ => (); XWindowHandler display ) end; in fun XStartDisplayHandler display = (Thread.Thread.fork (fn () => XWindowHandler display, []); ()); fun XOpenDisplay (s:string):Display = let val display = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XOpenDisplay,s); in XStartDisplayHandler display; display end; end (* local *); val CurrentTime = 0; datatype RevertCode = RevertToNone | RevertToPointerRoot | RevertToParent; fun fromRevertCode RevertToNone = 0 | fromRevertCode RevertToPointerRoot = 1 | fromRevertCode RevertToParent = 2; fun toRevertCode 0 = RevertToNone | toRevertCode 1 = RevertToPointerRoot | toRevertCode _ = RevertToParent; fun XSetInputFocus (d:Display) (w:Drawable) (r:RevertCode) (t:int) = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XSetInputFocus,d,w,fromRevertCode r,t); fun XGetInputFocus (d:Display):(Drawable * RevertCode) = let val (w,r) = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XGetInputFocus,d); in (w,toRevertCode r) end; fun XSetSelectionOwner (d:Display) (selection:int) (owner:Drawable) (time:int):unit = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XSetSelectionOwner,d,selection,owner,time); fun XGetSelectionOwner (d:Display) (selection:int):Drawable = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XGetSelectionOwner,d,selection); fun XConvertSelection {selection:int,target:int,property:int,requestor:Drawable,time:int}:unit = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XConvertSelection,selection,target,property,requestor,time); fun XSendSelectionNotify {selection:int,target:int,property:int,requestor:Drawable,time:int}:unit = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XSendSelectionNotify,selection,target,property,requestor,time); fun XDeleteProperty (requestor:Drawable) (property:int):unit = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XDeleteProperty,requestor,property); fun XInternAtom (d:Display) (name:string) (onlyIfExists:bool):int = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XInternAtom,d,name,onlyIfExists); fun XGetAtomName (d:Display) (atom:int):string = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XGetAtomName,d,atom); (* Fonts 400 *) datatype FontDirection = FontLeftToRight | FontRightToLeft; datatype XCharStruct = XCharStruct of { lbearing: int, rbearing: int, width: int, ascent: int, descent: int, attributes: int }; datatype XFontStruct = XFontStruct of { font: Font, direction: FontDirection, minChar: int, maxChar: int, minByte1: int, maxByte1: int, allCharsExist: bool, defaultChar: int, minBounds: XCharStruct, maxBounds: XCharStruct, perChar: XCharStruct list, ascent: int, descent: int }; fun XGetFontPath (d:Display):string list = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XGetFontPath,d); fun XListFonts (d:Display) (s:string) (n:int):string list = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XListFonts,d,s,n); fun XListFontsWithInfo (d:Display) (s:string) (n:int):(string list * XFontStruct list) = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XListFontsWithInfo,d,s,n); fun XLoadFont (d:Display) (s:string):Font = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XLoadFont,d,s); fun XLoadQueryFont (d:Display) (s:string):XFontStruct = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XLoadQueryFont,d,s); fun XQueryFont (f:Font):XFontStruct = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XQueryFont,f); fun XSetFontPath (d:Display) (L:string list):unit = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XSetFontPath,d,L); (* Grabbing 450 *) (* Graphics Context 500 *) datatype GCArcMode = ArcChord | ArcPieSlice; fun fromArcMode ArcChord = 0 | fromArcMode ArcPieSlice = 1; datatype GCOrder = Unsorted | YSorted | YXSorted | YXBanded; fun fromOrder Unsorted = 0 | fromOrder YSorted = 1 | fromOrder YXSorted = 2 | fromOrder YXBanded = 3; datatype GCFillRule = EvenOddRule | WindingRule; fun fromFillRule EvenOddRule = 0 | fromFillRule WindingRule = 1; datatype GCFillStyle = FillSolid | FillTiled | FillStippled | FillOpaqueStippled; fun fromFillStyle FillSolid = 0 | fromFillStyle FillTiled = 1 | fromFillStyle FillStippled = 2 | fromFillStyle FillOpaqueStippled = 3; datatype GCFunction = GXclear | GXand | GXandReverse | GXcopy | GXandInverted | GXnoop | GXxor | GXor | GXnor | GXequiv | GXinvert | GXorReverse | GXcopyInverted | GXorInverted | GXnand | GXset; fun fromFunction GXclear = 0 | fromFunction GXand = 1 | fromFunction GXandReverse = 2 | fromFunction GXcopy = 3 | fromFunction GXandInverted = 4 | fromFunction GXnoop = 5 | fromFunction GXxor = 6 | fromFunction GXor = 7 | fromFunction GXnor = 8 | fromFunction GXequiv = 9 | fromFunction GXinvert = 10 | fromFunction GXorReverse = 11 | fromFunction GXcopyInverted = 12 | fromFunction GXorInverted = 13 | fromFunction GXnand = 14 | fromFunction GXset = 15; datatype GCLineStyle = LineSolid | LineOnOffDash | LineDoubleDash; fun fromLineStyle LineSolid = 0 | fromLineStyle LineOnOffDash = 1 | fromLineStyle LineDoubleDash = 2; datatype GCCapStyle = CapNotLast | CapButt | CapRound | CapProjecting; fun fromCapStyle CapNotLast = 0 | fromCapStyle CapButt = 1 | fromCapStyle CapRound = 2 | fromCapStyle CapProjecting = 3; datatype GCJoinStyle = JoinMiter | JoinRound | JoinBevel; fun fromJoinStyle JoinMiter = 0 | fromJoinStyle JoinRound = 1 | fromJoinStyle JoinBevel = 2; datatype GCSubwindowMode = ClipByChildren | IncludeInferiors; fun fromSubwindowMode ClipByChildren = 0 | fromSubwindowMode IncludeInferiors = 1; fun DefaultGC (d:Display) = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_DefaultGC,d) : GC; datatype XGCValue = GCFunction of GCFunction | GCPlaneMask of int | GCForeground of int | GCBackground of int | GCLineWidth of int | GCLineStyle of GCLineStyle | GCCapStyle of GCCapStyle | GCJoinStyle of GCJoinStyle | GCFillStyle of GCFillStyle | GCFillRule of GCFillRule | GCTile of Drawable | GCStipple of Drawable | GCTSOrigin of XPoint | GCFont of Font | GCSubwindowMode of GCSubwindowMode | GCGraphicsExposures of bool | GCClipOrigin of XPoint | GCClipMask of Drawable | GCDashOffset of int | GCDashList of int | GCArcMode of GCArcMode; fun UpdateGC gc (GCFunction f) = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_UpdateGC,gc,0 ,fromFunction f) | UpdateGC gc (GCPlaneMask mask) = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_UpdateGC,gc,1 ,mask) | UpdateGC gc (GCForeground fg) = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_UpdateGC,gc,2 ,fg) | UpdateGC gc (GCBackground bg) = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_UpdateGC,gc,3 ,bg) | UpdateGC gc (GCLineWidth w) = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_UpdateGC,gc,4 ,w) | UpdateGC gc (GCLineStyle ls) = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_UpdateGC,gc,5 ,fromLineStyle ls) | UpdateGC gc (GCCapStyle cs) = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_UpdateGC,gc,6 ,fromCapStyle cs) | UpdateGC gc (GCJoinStyle js) = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_UpdateGC,gc,7 ,fromJoinStyle js) | UpdateGC gc (GCFillStyle fs) = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_UpdateGC,gc,8 ,fromFillStyle fs) | UpdateGC gc (GCFillRule rule) = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_UpdateGC,gc,9 ,fromFillRule rule) | UpdateGC gc (GCTile tile) = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_UpdateGC,gc,10,tile) | UpdateGC gc (GCStipple stipple) = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_UpdateGC,gc,11,stipple) | UpdateGC gc (GCTSOrigin (XPoint {x,y})) = (RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_UpdateGC,gc,12,x); RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_UpdateGC,gc,13,y)) | UpdateGC gc (GCFont font) = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_UpdateGC,gc,14,font) | UpdateGC gc (GCSubwindowMode mode) = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_UpdateGC,gc,15,fromSubwindowMode mode) | UpdateGC gc (GCGraphicsExposures ex) = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_UpdateGC,gc,16,ex) | UpdateGC gc (GCClipOrigin (XPoint {x,y})) = (RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_UpdateGC,gc,17,x); RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_UpdateGC,gc,18,y)) | UpdateGC gc (GCClipMask mask) = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_UpdateGC,gc,19,mask) | UpdateGC gc (GCDashOffset offset) = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_UpdateGC,gc,20,offset) | UpdateGC gc (GCDashList dashes) = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_UpdateGC,gc,21,dashes) | UpdateGC gc (GCArcMode mode) = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_UpdateGC,gc,22,fromArcMode mode); fun XChangeGC gc [] = () | XChangeGC gc (H::T) = (UpdateGC gc H; XChangeGC gc T); fun XCreateGC (d:Drawable) (values:XGCValue list):GC = let val gc = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XCreateGC,d); in XChangeGC gc values; gc end; fun XSetFunction gc f = UpdateGC gc (GCFunction f); fun XSetPlaneMask gc mask = UpdateGC gc (GCPlaneMask mask); fun XSetForeground gc fg = UpdateGC gc (GCForeground fg); fun XSetBackground gc bg = UpdateGC gc (GCBackground bg); fun XSetFillStyle gc fs = UpdateGC gc (GCFillStyle fs); fun XSetFillRule gc rule = UpdateGC gc (GCFillRule rule); fun XSetTile gc tile = UpdateGC gc (GCTile tile) fun XSetStipple gc stipple = UpdateGC gc (GCStipple stipple); fun XSetTSOrigin gc point = UpdateGC gc (GCTSOrigin point); fun XSetFont gc font = UpdateGC gc (GCFont font); fun XSetSubwindowMode gc mode = UpdateGC gc (GCSubwindowMode mode); fun XSetGraphicsExposures gc ex = UpdateGC gc (GCGraphicsExposures ex); fun XSetClipOrigin gc point = UpdateGC gc (GCClipOrigin point); fun XSetClipMask gc mask = UpdateGC gc (GCClipMask mask); fun XSetArcMode gc mode = UpdateGC gc (GCArcMode mode); fun XSetLineAttributes gc w ls cs js = XChangeGC gc [GCLineWidth w, GCLineStyle ls,GCCapStyle cs,GCJoinStyle js]; fun XSetState gc fg bg f mask = XChangeGC gc [GCForeground fg,GCBackground bg,GCFunction f, GCPlaneMask mask]; fun XSetClipRectangles (gc:GC) (p:XPoint) (L:XRectangle list) (order:GCOrder):unit = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XSetClipRectangles,gc,p,L,fromOrder order); fun XSetDashes (gc:GC) (offset:int) (dashes:int list) = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XSetDashes,gc,offset,dashes); (* Images 550 *) datatype ImageFormat = XYBitmap | XYPixmap | ZPixmap; datatype ImageOrder = LSBFirst | MSBFirst; abstype ImageData = ImageData of string with val Data = ImageData end; datatype XImage = XImage of { data: ImageData, size: XRectangle, depth: int, format: ImageFormat, xoffset: int, bitmapPad: int, byteOrder: ImageOrder, bitmapUnit: int, bitsPerPixel: int, bytesPerLine: int, visualRedMask: int, bitmapBitOrder: ImageOrder, visualBlueMask: int, visualGreenMask: int }; (* XImages need to be mutable for XAddPixel, XGetSubImage and XPutPixel to work properly *) fun XAddPixel (d:Display) (i:XImage) (a:int):unit = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XAddPixel,d,i,a); fun XCreateImage v depth format xoffset data size bitmapPad bytesPerLine = ( XImage { data = Data data, size = size, depth = depth, format = format, xoffset = xoffset, bitmapPad = bitmapPad, byteOrder = LSBFirst, bitmapUnit = 8, bitsPerPixel = 1, bytesPerLine = bytesPerLine, visualRedMask = VisualRedMask v, bitmapBitOrder = LSBFirst, visualBlueMask = VisualBlueMask v, visualGreenMask = VisualGreenMask v } ); fun XGetImage (d:Drawable) (r:XRectangle) (mask:int) (f:ImageFormat) = XImage (RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XGetImage,d,r,mask,f)); fun XGetPixel (d:Display) (i:XImage) (point:XPoint):int = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XGetPixel,d,i,point); fun XGetSubImage (d:Drawable) (r:XRectangle) (mask:int) (f:ImageFormat) (i:XImage) (point:XPoint):unit = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XGetSubImage,d,r,mask,f,i,point); fun XPutImage (d:Drawable) (gc:GC) (i:XImage) (p:XPoint) (r:XRectangle):unit = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XPutImage,d,gc,i,p,r); fun XPutPixel (d:Display) (i:XImage) (point:XPoint) (pixel:int):unit = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XPutPixel,d,i,point,pixel); fun XSubImage (d:Display) (i:XImage) (r:XRectangle) = XImage (RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XSubImage,d,i,r)); fun BitmapBitOrder (d:Display) = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_BitmapBitOrder,d) : ImageOrder; fun BitmapPad (d:Display) = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_BitmapPad,d) : int; fun BitmapUnit (d:Display) = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_BitmapUnit,d) : int; fun ByteOrder (d:Display) = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_ByteOrder,d) : ImageOrder; fun ImageByteOrder (XImage {byteOrder,...}) = byteOrder; fun ImageSize (XImage {size,...}) = size; fun ImageDepth (XImage {depth,...}) = depth; (* Keyboard 600 *) (* keysym values are integers, and are defined in other signatures *) fun XLookupString (d:Drawable) (keycode:int) (modifiers:Modifier list):(string * int) = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XLookupString,d,keycode,fromModifier modifiers); fun XQueryKeymap (d:Display):bool list = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XQueryKeymap,d); fun IsCursorKey (k:int):bool = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_IsCursorKey,k); fun IsFunctionKey (k:int):bool = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_IsFunctionKey,k); fun IsKeypadKey (k:int):bool = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_IsKeypadKey,k); fun IsMiscFunctionKey (k:int):bool = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_IsMiscFunctionKey,k); fun IsModifierKey (k:int):bool = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_IsModifierKey,k); fun IsPFKey (k:int):bool = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_IsPFKey,k); (* Output Buffer 650 *) fun XFlush (d:Display):unit = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XFlush,d); fun XSync (d:Display) (b:bool):unit = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XSync,d,b); (* Pointers 700 *) fun XQueryPointer (d:Drawable) = let val (s:bool,root:Drawable,child:Drawable,r:XPoint,w:XPoint,m) = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XQueryPointer,d); in (s,root,child,r,w,toModifier m) end; (* Regions 750*) (* Save Set 800 *) (* Screen Saver 850 *) datatype SaveMode = ScreenSaverReset | ScreenSaverActive; fun fromSaveMode ScreenSaverReset = 0 | fromSaveMode ScreenSaverActive = 1; datatype Blanking = DontPreferBlanking | PreferBlanking | DefaultBlanking; fun toBlanking 0 = DontPreferBlanking | toBlanking 1 = PreferBlanking | toBlanking _ = DefaultBlanking; fun fromBlanking DontPreferBlanking = 0 | fromBlanking PreferBlanking = 1 | fromBlanking DefaultBlanking = 2; datatype Exposures = DontAllowExposures | AllowExposures | DefaultExposures; fun toExposures 0 = DontAllowExposures | toExposures 1 = AllowExposures | toExposures _ = DefaultExposures; fun fromExposures DontAllowExposures = 0 | fromExposures AllowExposures = 1 | fromExposures DefaultExposures = 2; fun XActivateScreenSaver (d:Display):unit = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XActivateScreenSaver,d); fun XForceScreenSaver (d:Display) (s:SaveMode):unit = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XForceScreenSaver,d,fromSaveMode s); fun XGetScreenSaver (d:Display) = let val (timeout,interval,blanking,exposures) = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XGetScreenSaver,d); in (timeout:int,interval:int,toBlanking blanking,toExposures exposures) end; fun XResetScreenSaver (d:Display):unit = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XResetScreenSaver,d); fun XSetScreenSaver (d:Display) (timeout:int) (interval:int) (blanking:Blanking) (exposures:Exposures) = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XSetScreenSaver,d,timeout,interval,fromBlanking blanking,fromExposures exposures); (* Standard Geometry 900 *) fun XTranslateCoordinates (src:Drawable) (dst:Drawable) (p:XPoint):(XPoint * Drawable) = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XTranslateCoordinates,src,dst,p); (* Text 950 *) fun XTextExtents (fs:XFontStruct) (s:string):(FontDirection * int * int * XCharStruct) = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XTextExtents,fs,s); fun XTextExtents16 (fs:XFontStruct) (L:int list):(FontDirection * int * int * XCharStruct) = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XTextExtents16,fs,L); fun XTextWidth (fs:XFontStruct) (s:string):int = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XTextWidth,fs,s); fun XTextWidth16 (fs:XFontStruct) (L:int list):int = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XTextWidth16,fs,L); (* Tiles, Pixmaps, Stipples and Bitmaps 1000 *) datatype BitmapStatus = BitmapOpenFailed | BitmapFileInvalid | BitmapNoMemory | BitmapSuccess of Drawable * XRectangle * XPoint; fun XCreateBitmapFromData (d:Drawable) (s:string) (r:XRectangle):Drawable = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XCreateBitmapFromData,d,s,r); fun XCreatePixmap (d:Drawable) (r:XRectangle) (depth:int):Drawable = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XCreatePixmap,d,r,depth); fun XCreatePixmapFromBitmapData (d:Drawable) (s:string) (r:XRectangle) (fg:int) (bg:int) (depth:int):Drawable = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XCreatePixmapFromBitmapData,d,s,r,fg,bg,depth); fun XQueryBestStipple (d:Drawable) (r:XRectangle):XRectangle = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XQueryBestStipple,d,r); fun XQueryBestTile (d:Drawable) (r:XRectangle):XRectangle = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XQueryBestTile,d,r); datatype ShapeClass = CursorShape | TileShape | StippleShape; fun XQueryBestSize CursorShape = XQueryBestCursor | XQueryBestSize TileShape = XQueryBestTile | XQueryBestSize StippleShape = XQueryBestStipple; fun XReadBitmapFile (d:Drawable) (s:string) = let val (status,bitmap,size,hotspot) = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XReadBitmapFile,d,s); in case status of 0 => BitmapSuccess (bitmap,size,hotspot) | 1 => BitmapOpenFailed | 2 => BitmapFileInvalid | _ => BitmapNoMemory end; fun XWriteBitmapFile (s:string) (bitmap:Drawable) (size:XRectangle) (hotspot:XPoint) = let val status = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XWriteBitmapFile,s,bitmap,size,hotspot); in case status of 0 => BitmapSuccess (bitmap,size,hotspot) | 1 => BitmapOpenFailed | 2 => BitmapFileInvalid | _ => BitmapNoMemory end; (* User Preferences 1050 *) fun XAutoRepeatOff (d:Display):unit = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XAutoRepeatOff,d); fun XAutoRepeatOn (d:Display):unit = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XAutoRepeatOn,d); fun XBell (d:Display) (n:int):unit = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XBell,d,n); fun XGetDefault (d:Display) (program:string) (option:string):string = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XGetDefault,d,program,option); (* Window Attributes 1100 *) datatype Gravity = ForgetGravity | NorthWestGravity | NorthGravity | NorthEastGravity | WestGravity | CenterGravity | EastGravity | SouthWestGravity | SouthGravity | SouthEastGravity | StaticGravity; val UnmapGravity = ForgetGravity; fun toGravity 0 = ForgetGravity | toGravity 1 = NorthWestGravity | toGravity 2 = NorthGravity | toGravity 3 = NorthEastGravity | toGravity 4 = WestGravity | toGravity 5 = CenterGravity | toGravity 6 = EastGravity | toGravity 7 = SouthWestGravity | toGravity 8 = SouthGravity | toGravity 9 = SouthEastGravity | toGravity _ = StaticGravity; fun fromGravity ForgetGravity = 0 | fromGravity NorthWestGravity = 1 | fromGravity NorthGravity = 2 | fromGravity NorthEastGravity = 3 | fromGravity WestGravity = 4 | fromGravity CenterGravity = 5 | fromGravity EastGravity = 6 | fromGravity SouthWestGravity = 7 | fromGravity SouthGravity = 8 | fromGravity SouthEastGravity = 9 | fromGravity StaticGravity = 10; datatype XSetWindowAttributes = CWBackPixmap of Drawable | CWBackPixel of int | CWBorderPixmap of Drawable | CWBorderPixel of int | CWBitGravity of Gravity | CWWinGravity of Gravity | CWBackingStore of BackingStore | CWBackingPlanes of int | CWBackingPixel of int | CWOverrideRedirect of bool | CWSaveUnder of bool | CWEventMask of EventMask list | CWDontPropagate of EventMask list | CWColormap of Colormap | CWCursor of Cursor; datatype WindowClass = CopyFromParentClass | InputOutputClass | InputOnlyClass; fun toWindowClass 0 = CopyFromParentClass | toWindowClass 1 = InputOutputClass | toWindowClass _ = InputOnlyClass; fun fromWindowClass CopyFromParentClass = 0 | fromWindowClass InputOutputClass = 1 | fromWindowClass InputOnlyClass = 2; datatype MapState = IsUnmapped | IsUnviewable | IsViewable; fun toMapState 0 = IsUnmapped | toMapState 1 = IsUnviewable | toMapState _ = IsViewable; datatype XWindowAttributes = XWindowAttributes of { position: XPoint, size: XRectangle, borderWidth: int, depth: int, visual: Visual, root: Drawable, class: WindowClass, bitGravity: Gravity, winGravity: Gravity, backingStore: BackingStore, backingPlanes: int, backingPixel: int, saveUnder: bool, colormap: Colormap, mapInstalled: bool, mapState: MapState, allEventMasks: EventMask list, yourEventMask: EventMask list, doNotPropagateMask: EventMask list, overrideRedirect: bool }; fun ChangeWindow d (CWBackPixmap pixmap) = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_ChangeWindow,d,0 ,pixmap) | ChangeWindow d (CWBackPixel pixel) = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_ChangeWindow,d,1 ,pixel) | ChangeWindow d (CWBorderPixmap pixmap) = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_ChangeWindow,d,2 ,pixmap) | ChangeWindow d (CWBorderPixel pixel) = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_ChangeWindow,d,3 ,pixel) | ChangeWindow d (CWBitGravity gravity) = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_ChangeWindow,d,4 ,fromGravity gravity) | ChangeWindow d (CWWinGravity gravity) = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_ChangeWindow,d,5 ,fromGravity gravity) | ChangeWindow d (CWBackingStore bs) = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_ChangeWindow,d,6 ,fromBackingStore bs) | ChangeWindow d (CWBackingPlanes mask) = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_ChangeWindow,d,7 ,mask) | ChangeWindow d (CWBackingPixel pixel) = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_ChangeWindow,d,8 ,pixel) | ChangeWindow d (CWOverrideRedirect b) = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_ChangeWindow,d,9 ,b) | ChangeWindow d (CWSaveUnder b) = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_ChangeWindow,d,10,b) | ChangeWindow d (CWEventMask mask) = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_ChangeWindow,d,11,fromEventMask mask) | ChangeWindow d (CWDontPropagate mask) = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_ChangeWindow,d,12,fromEventMask mask) | ChangeWindow d (CWColormap cmap) = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_ChangeWindow,d,13,cmap) | ChangeWindow d (CWCursor cursor) = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_ChangeWindow,d,14,cursor); fun XChangeWindowAttributes d [] = () | XChangeWindowAttributes d (H::T) = (ChangeWindow d H; XChangeWindowAttributes d T); fun XGetGeometry (d:Drawable):(Drawable * XPoint * XRectangle * int * int) = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XGetGeometry,d); fun XGetWindowAttributes (d:Drawable) = let val (position,size,borderWidth,depth,visual,root,class, bitGravity,winGravity,backingStore,backingPlanes, backingPixel,saveUnder,colormap,mapInstalled,mapState, allEventMasks,yourEventMask,doNotPropagateMask,overrideRedirect) = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XGetWindowAttributes,d); in XWindowAttributes { position = position, size = size, borderWidth = borderWidth, depth = depth, visual = visual, root = root, class = toWindowClass class, bitGravity = toGravity bitGravity, winGravity = toGravity winGravity, backingStore = toBackingStore backingStore, backingPlanes = backingPlanes, backingPixel = backingPixel, saveUnder = saveUnder, colormap = colormap, mapInstalled = mapInstalled, mapState = toMapState mapState, allEventMasks = toEventMask allEventMasks, yourEventMask = toEventMask yourEventMask, doNotPropagateMask = toEventMask doNotPropagateMask, overrideRedirect = overrideRedirect } end; fun XSetWindowBackground d bg = ChangeWindow d (CWBackPixel bg); fun XSetWindowBackgroundPixmap d pixmap = ChangeWindow d (CWBackPixmap pixmap); fun XSetWindowBorder d border = ChangeWindow d (CWBorderPixel border); fun XSetWindowBorderPixmap d pixmap = ChangeWindow d (CWBorderPixmap pixmap); fun XSetWindowColormap d cmap = ChangeWindow d (CWColormap cmap); fun XSetWindowBorderWidth (d:Drawable) (width:int):unit = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XSetWindowBorderWidth,d,width); (* Window Configuration 1150 *) val NoDrawable = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_NoDrawable,0) : Drawable; val ParentRelative = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_NoDrawable,1) : Drawable; val NoCursor = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_NoCursor,0) : Cursor; val NoFont = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_NoFont,0) : Font; val NoColormap = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_NoColormap,0) : Colormap; val NoVisual = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_NoVisual,0) : Visual; val CopyFromParentDrawable = NoDrawable; val CopyFromParentVisual = NoVisual; val PointerWindow = NoDrawable; val InputFocus = ParentRelative; val PointerRoot = ParentRelative; val NoSymbol = 0; val AnyKey = 0; datatype CirculateDirection = RaiseLowest | LowerHighest; fun fromCirculateDirection RaiseLowest = 0 | fromCirculateDirection LowerHighest = 1; datatype XWindowChanges = CWPosition of XPoint | CWSize of XRectangle | CWBorderWidth of int | CWStackMode of StackMode | CWSibling of Drawable; fun XCirculateSubwindows (d:Drawable) (dir:CirculateDirection):unit = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XCirculateSubwindows,d,fromCirculateDirection dir); fun XCirculateSubwindowsDown d = XCirculateSubwindows d LowerHighest; fun XCirculateSubwindowsUp d = XCirculateSubwindows d RaiseLowest; fun XConfigureWindow (win:Drawable) (L:XWindowChanges list):unit = let fun AddIn m n = if (m And n) = 0 then (m Or n) else raise XWindows "XConfigureWindow parameters"; fun Trans [] acc = acc | Trans ((CWPosition P)::T) (_,S,w,d,s,m) = Trans T (P,S,w,d,s,AddIn m 3) | Trans ((CWSize S)::T) (P,_,w,d,s,m) = Trans T (P,S,w,d,s,AddIn m 12) | Trans ((CWBorderWidth w)::T) (P,S,_,d,s,m) = Trans T (P,S,w,d,s,AddIn m 16) | Trans ((CWSibling d)::T) (P,S,w,_,s,m) = Trans T (P,S,w,d,s,AddIn m 32) | Trans ((CWStackMode s)::T) (P,S,w,d,_,m) = Trans T (P,S,w,d,fromStackMode s,AddIn m 64); in RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XConfigureWindow,win,Trans L (origin,a1,0,NoDrawable,0,0)) end; fun XLowerWindow (d:Drawable):unit = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XLowerWindow,d); fun XMapRaised (d:Drawable):unit = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XMapRaised,d); fun XMapSubwindows (d:Drawable):unit = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XMapSubwindows,d); fun XMapWindow (d:Drawable):unit = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XMapWindow,d); fun XMoveResizeWindow (d:Drawable) (p:XPoint) (r:XRectangle):unit = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XMoveResizeWindow,d,p,r); fun XMoveWindow (d:Drawable) (p:XPoint):unit = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XMoveWindow,d,p); fun XQueryTree (d:Drawable):(Drawable * Drawable * Drawable list) = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XQueryTree,d); fun XRaiseWindow (d:Drawable):unit = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XRaiseWindow,d); fun XReparentWindow (win:Drawable) (parent:Drawable) (p:XPoint):unit = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XReparentWindow,win,parent,p); fun XResizeWindow (d:Drawable) (r:XRectangle):unit = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XResizeWindow,d,r); fun XRestackWindows (L:Drawable list):unit = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XRestackWindows,L); fun XUnmapSubwindows (d:Drawable):unit = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XUnmapSubwindows,d); fun XUnmapWindow (d:Drawable):unit = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XUnmapWindow,d); (* Window Existence 1200 *) fun RootWindow (d:Display) = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_RootWindow,d) : Drawable; fun DestroyXObject x = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_DestroyXObject,x):unit; val XDestroyWindow = DestroyXObject : Drawable -> unit; val XFreeGC = DestroyXObject : GC -> unit; val XFreePixmap = DestroyXObject : Drawable -> unit; val XFreeCursor = DestroyXObject : Cursor -> unit; val XUnloadFont = DestroyXObject : Font -> unit; val XFreeColormap = DestroyXObject : Colormap -> unit; fun XFreeFont (XFontStruct {font,...}) = XUnloadFont font; fun XDestroySubwindows (d:Drawable):unit = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XDestroySubwindows,d); fun XCreateSimpleWindow (parent:Drawable) (position:XPoint) (size:XRectangle) (borderWidth:int) (border:int) (background:int): Drawable = ( RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XCreateSimpleWindow,parent,position,size,borderWidth,border,background,NullHandler,42) ); fun XCreateWindow (parent:Drawable) (position:XPoint) (size:XRectangle) (borderWidth:int) (depth:int) (class:WindowClass) (visual:Visual) (L:XSetWindowAttributes list): Drawable = let val w = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XCreateWindow,parent,position,size,borderWidth,depth,fromWindowClass class,visual,NullHandler,42); in XChangeWindowAttributes w L; w end; (* Window Manager 1250 *) datatype XWMStateHint = DontCareState | NormalState | ZoomState | IconicState | InactiveState; fun fromXWMStateHint DontCareState = 0 | fromXWMStateHint NormalState = 1 | fromXWMStateHint ZoomState = 2 | fromXWMStateHint IconicState = 3 | fromXWMStateHint InactiveState = 4; fun toXWMStateHint 0 = DontCareState | toXWMStateHint 1 = NormalState | toXWMStateHint 2 = ZoomState | toXWMStateHint 3 = IconicState | toXWMStateHint _ = InactiveState; datatype XWMHint = InputHint of bool | StateHint of XWMStateHint | IconPixmapHint of Drawable | IconWindowHint of Drawable | IconPositionHint of XPoint | IconMaskHint of Drawable; datatype XWMSizeHint = PPosition of XPoint | PSize of XRectangle | PMinSize of XRectangle | PMaxSize of XRectangle | PResizeInc of XRectangle | PAspect of XPoint * XPoint | PBaseSize of XRectangle | PWinGravity of Gravity; datatype XStandardColormap = XStandardColormap of { colormap: Colormap, redMax: int, redMult: int, greenMax: int, greenMult: int, blueMax: int, blueMult: int, basePixel: int, visual: Visual }; datatype PropertyValue = PropertyArc of XArc list | PropertyAtom of int list | PropertyBitmap of Drawable list | PropertyColormap of Colormap list | PropertyCursor of Cursor list | PropertyDrawable of Drawable list | PropertyFont of Font list | PropertyInteger of int list | PropertyPixmap of Drawable list | PropertyPoint of XPoint list | PropertyRectangle of XRectangle list | PropertyRGBColormap of XStandardColormap list | PropertyString of string | PropertyVisual of Visual list | PropertyWindow of Drawable list | PropertyWMHints of XWMHint list | PropertyWMSizeHints of XWMSizeHint list | PropertyWMIconSizes of (XRectangle * XRectangle * XRectangle) list; fun fromXWMHints L = let fun AddIn m n = if (m And n) = 0 then (m Or n) else raise XWindows "XWMHint parameters"; fun Trans [] (i,s,p,w,P,m,f) = (i,fromXWMStateHint s,p,w,P,m,f) | Trans ((InputHint i)::T) (_,s,p,w,P,m,f) = Trans T (i,s,p,w,P,m,AddIn f 1) | Trans ((StateHint s)::T) (i,_,p,w,P,m,f) = Trans T (i,s,p,w,P,m,AddIn f 2) | Trans ((IconPixmapHint p)::T) (i,s,_,w,P,m,f) = Trans T (i,s,p,w,P,m,AddIn f 4) | Trans ((IconWindowHint w)::T) (i,s,p,_,P,m,f) = Trans T (i,s,p,w,P,m,AddIn f 8) | Trans ((IconPositionHint P)::T) (i,s,p,w,_,m,f) = Trans T (i,s,p,w,P,m,AddIn f 16) | Trans ((IconMaskHint m)::T) (i,s,p,w,P,_,f) = Trans T (i,s,p,w,P,m,AddIn f 32); in Trans L (false,DontCareState,NoDrawable,NoDrawable,origin,NoDrawable,0) end; fun fromXWMSizeHints L = let fun AddIn m n = if (m And n) = 0 then (m Or n) else raise XWindows "XWMSizeHint parameters"; fun Trans [] (p,s,min,max,inc,a,bs,wg,f) = (p,s,min,max,inc,a,bs,fromGravity wg,f) | Trans ((PPosition p) ::T) (_,s,min,max,inc,a,bs,wg,f) = Trans T (p,s,min,max,inc,a,bs,wg,AddIn f 4) | Trans ((PSize s) ::T) (p,_,min,max,inc,a,bs,wg,f) = Trans T (p,s,min,max,inc,a,bs,wg,AddIn f 8) | Trans ((PMinSize min)::T) (p,s,_ ,max,inc,a,bs,wg,f) = Trans T (p,s,min,max,inc,a,bs,wg,AddIn f 16) | Trans ((PMaxSize max)::T) (p,s,min,_ ,inc,a,bs,wg,f) = Trans T (p,s,min,max,inc,a,bs,wg,AddIn f 32) | Trans ((PResizeInc inc)::T) (p,s,min,max,_ ,a,bs,wg,f) = Trans T (p,s,min,max,inc,a,bs,wg,AddIn f 64) | Trans ((PAspect a) ::T) (p,s,min,max,inc,_,bs,wg,f) = Trans T (p,s,min,max,inc,a,bs,wg,AddIn f 128) | Trans ((PBaseSize bs) ::T) (p,s,min,max,inc,a,_ ,wg,f) = Trans T (p,s,min,max,inc,a,bs,wg,AddIn f 256) | Trans ((PWinGravity wg) ::T) (p,s,min,max,inc,a,bs,_ ,f) = Trans T (p,s,min,max,inc,a,bs,wg,AddIn f 512); in Trans L (origin,a1,a1,a1,a1,(origin,origin),a1,ForgetGravity,0) end; fun fromXStandardColormaps L = let fun Trans (XStandardColormap {colormap,redMax,redMult,greenMax,greenMult,blueMax,blueMult,basePixel,visual}) = ( (colormap,redMax,redMult,greenMax,greenMult,blueMax,blueMult,basePixel,visual) ); in map Trans L end; fun XSetProperty (w:Drawable) (property:int) (v:PropertyValue) (t:int):unit = ( case v of PropertyArc L => RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XSetProperty,w,property,t,L,XA_ARC) | PropertyAtom L => RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XSetProperty,w,property,t,L,XA_ATOM) | PropertyBitmap L => RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XSetProperty,w,property,t,L,XA_BITMAP) | PropertyColormap L => RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XSetProperty,w,property,t,L,XA_COLORMAP) | PropertyCursor L => RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XSetProperty,w,property,t,L,XA_CURSOR) | PropertyDrawable L => RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XSetProperty,w,property,t,L,XA_DRAWABLE) | PropertyFont L => RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XSetProperty,w,property,t,L,XA_FONT) | PropertyInteger L => RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XSetProperty,w,property,t,L,XA_INTEGER) | PropertyPixmap L => RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XSetProperty,w,property,t,L,XA_PIXMAP) | PropertyPoint L => RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XSetProperty,w,property,t,L,XA_POINT) | PropertyRectangle L => RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XSetProperty,w,property,t,L,XA_RECTANGLE) | PropertyString s => RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XSetProperty,w,property,t,s,XA_STRING) | PropertyVisual L => RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XSetProperty,w,property,t,L,XA_VISUALID) | PropertyWindow L => RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XSetProperty,w,property,t,L,XA_WINDOW) | PropertyRGBColormap L => RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XSetProperty,w,property,t,fromXStandardColormaps L,XA_RGB_COLOR_MAP) | PropertyWMHints L => RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XSetProperty,w,property,t,[fromXWMHints L],XA_WM_HINTS) | PropertyWMSizeHints L => RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XSetProperty,w,property,t,[fromXWMSizeHints L],XA_WM_SIZE_HINTS) | PropertyWMIconSizes L => RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XSetProperty,w,property,t,L,XA_WM_ICON_SIZE) ); fun XGetTextProperty (w:Drawable) (property:int):(string * int * int * int) = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XGetTextProperty,w,property); fun GetSet property exceptionName = let fun Get w = let val (string,encoding,format,_) = XGetTextProperty w property; in if encoding = XA_STRING andalso format = 8 then string else raise XWindows exceptionName end; fun Set w s = XSetProperty w property (PropertyString s) XA_STRING; in (Get,Set) end; val (XGetWMName ,XSetWMName) = GetSet XA_WM_NAME "XGetWMName"; val (XGetWMIconName ,XSetWMIconName) = GetSet XA_WM_ICON_NAME "XGetWMIconName"; val (XGetWMClientMachine,XSetWMClientMachine) = GetSet XA_WM_CLIENT_MACHINE "XGetWMClientMachine"; fun GetSetList property exceptionName = let fun Split s = let fun Accum acc s [] = rev (s::acc) | Accum acc s (H::T) = if H = #"\000" then Accum (s::acc) "" T else Accum acc (s ^ String.str H) T; in Accum [] "" (explode s) end; fun Join [] = "" | Join [s] = s | Join (H::T) = H ^ "\000" ^ Join T; val (Get,Set) = GetSet property exceptionName; in (fn w => Split (Get w),fn w => fn L => Set w (Join L)) end; val (XGetWMCommand,XSetWMCommand) = GetSetList XA_WM_COMMAND "XGetWMCommand"; val (XGetWMClass ,XSetWMClass) = GetSetList XA_WM_CLASS "XGetWMClass"; fun XSetWMHints w L = XSetProperty w XA_WM_HINTS (PropertyWMHints L) XA_WM_HINTS; fun XGetWMHints (win:Drawable) = let val (i,s,p,w,P,m,f) = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XGetWMHints,win); val s = toXWMStateHint s; in (if (f And 1) <> 0 then [InputHint i] else []) @ (if (f And 2) <> 0 then [StateHint s] else []) @ (if (f And 4) <> 0 then [IconPixmapHint p] else []) @ (if (f And 8) <> 0 then [IconWindowHint w] else []) @ (if (f And 16) <> 0 then [IconPositionHint P] else []) @ (if (f And 32) <> 0 then [IconMaskHint m] else []) end; fun XSetWMSizeHints w property L = XSetProperty w property (PropertyWMSizeHints L) XA_WM_SIZE_HINTS; fun XGetWMSizeHints (win:Drawable) (property:int) = let val (p,s,min,max,inc,a,bs,wg,f) = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XGetWMSizeHints,win,property); val wg = toGravity wg; in (if (f And 4) <> 0 then [PPosition p] else []) @ (if (f And 8) <> 0 then [PSize s] else []) @ (if (f And 16) <> 0 then [PMinSize min] else []) @ (if (f And 32) <> 0 then [PMaxSize max] else []) @ (if (f And 64) <> 0 then [PResizeInc inc] else []) @ (if (f And 128) <> 0 then [PAspect a] else []) @ (if (f And 256) <> 0 then [PBaseSize bs] else []) @ (if (f And 512) <> 0 then [PWinGravity wg] else []) end; fun XSetWMNormalHints w L = XSetWMSizeHints w XA_WM_NORMAL_HINTS L; fun XGetWMNormalHints w = XGetWMSizeHints w XA_WM_NORMAL_HINTS; fun XSetWMProperties w windowName iconName commands normalHints wmHints class = ( if windowName <> "" then XSetWMName w windowName else (); if iconName <> "" then XSetWMIconName w iconName else (); if commands <> [] then XSetWMCommand w commands else (); XSetWMNormalHints w normalHints; XSetWMHints w wmHints; if class <> [] then XSetWMClass w class else () ); fun XSetIconSizes w sizes = XSetProperty w XA_WM_ICON_SIZE (PropertyWMIconSizes sizes) XA_WM_ICON_SIZE; fun XGetIconSizes (w:Drawable):(XRectangle * XRectangle * XRectangle) list = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XGetIconSizes,w); fun XSetTransientForHint transient main = XSetProperty transient XA_WM_TRANSIENT_FOR (PropertyWindow [main]) XA_WINDOW; fun XGetTransientForHint (w:Drawable):Drawable = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XGetTransientForHint,w); fun XSetWMColormapWindows w subwins = let val property = XInternAtom (DrawableDisplay w) "WM_COLORMAP_WINDOWS" true; in if property = 0 then raise XWindows "XSetWMColormapWindows failed" else XSetProperty w property (PropertyWindow subwins) XA_WINDOW end; fun XGetWMColormapWindows (w:Drawable):Drawable list = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XGetWMColormapWindows,w); fun XSetRGBColormaps w property L = XSetProperty w property (PropertyRGBColormap L) XA_RGB_COLOR_MAP; fun XGetRGBColormaps (w:Drawable) (property:int) = let fun Trans (colormap,redMax,redMult,greenMax,greenMult,blueMax,blueMult,basePixel,visual) = ( XStandardColormap { colormap = colormap, redMax = redMax, redMult = redMult, greenMax = greenMax, greenMult = greenMult, blueMax = blueMax, blueMult = blueMult, basePixel = basePixel, visual = visual } ); in map Trans (RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XGetRGBColormaps,w,property)) end; fun XWMGeometry (d:Display) (user:string) (def:string) (borderWidth:int) (L:XWMSizeHint list):(XPoint * XRectangle * Gravity) = let val (p,r,g) = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_XWMGeometry,d,user,def,borderWidth,fromXWMSizeHints L); in (p,r,toGravity g) end; (* Miscellaneous and Convenience functions 1300 *) local fun GetID x = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_GetID,x):int; in val ColormapID = GetID : Colormap -> int; val CursorID = GetID : Cursor -> int; val DrawableID = GetID : Drawable -> int; val FontID = GetID : Font -> int; val GCID = GetID : GC -> int; val VisualID = GetID : Visual -> int; end; fun SameDrawable a b = (DrawableID a = DrawableID b); fun XSetColors gc fg bg = (XSetForeground gc fg; XSetBackground gc bg); fun XGetWindowRoot w = #1 (XGetGeometry w); fun XGetWindowPosition w = #2 (XGetGeometry w); fun XGetWindowSize w = #3 (XGetGeometry w); fun XGetWindowBorderWidth w = #4 (XGetGeometry w); fun XGetWindowDepth w = #5 (XGetGeometry w); fun XGetWindowParent w = #2 (XQueryTree w); fun XGetWindowChildren w = #3 (XQueryTree w); fun GetTimeOfDay():(int * int) = RunCall.run_call1 RuntimeCalls.POLY_SYS_XWindows (XCALL_GetTimeOfDay,0); fun FSFont (XFontStruct {font ,...}) = font; fun FSDirection (XFontStruct {direction ,...}) = direction; fun FSMinChar (XFontStruct {minChar ,...}) = minChar; fun FSMaxChar (XFontStruct {maxChar ,...}) = maxChar; fun FSMinByte1 (XFontStruct {minByte1 ,...}) = minByte1; fun FSMaxByte1 (XFontStruct {maxByte1 ,...}) = maxByte1; fun FSAllCharsExist (XFontStruct {allCharsExist,...}) = allCharsExist; fun FSDefaultChar (XFontStruct {defaultChar ,...}) = defaultChar; fun FSMinBounds (XFontStruct {minBounds ,...}) = minBounds; fun FSMaxBounds (XFontStruct {maxBounds ,...}) = maxBounds; fun FSPerChar (XFontStruct {perChar ,...}) = perChar; fun FSAscent (XFontStruct {ascent ,...}) = ascent; fun FSDescent (XFontStruct {descent ,...}) = descent; fun CharLBearing (XCharStruct {lbearing ,...}) = lbearing; fun CharRBearing (XCharStruct {rbearing ,...}) = rbearing; fun CharWidth (XCharStruct {width ,...}) = width; fun CharAscent (XCharStruct {ascent ,...}) = ascent; fun CharDescent (XCharStruct {descent ,...}) = descent; fun CharAttributes (XCharStruct {attributes,...}) = attributes; fun FSMinWidth f = CharWidth (FSMinBounds f); fun FSMaxWidth f = CharWidth (FSMaxBounds f); fun FSMinHeight f = CharAscent (FSMinBounds f) + CharDescent (FSMinBounds f); fun FSMaxHeight f = CharAscent (FSMaxBounds f) + CharDescent (FSMaxBounds f); fun ShiftDown [] = false | ShiftDown (ShiftMask::_) = true | ShiftDown (_::T) = ShiftDown T; fun ControlDown [] = false | ControlDown (ControlMask::_) = true | ControlDown (_::T) = ControlDown T; end (* local *); end (* structure XWindows *); exception XWindows = XWindows.XWindows; let open XWindows; fun printRect ( addString,beginBracket,space,endBracket ) _ _ (r:XRectangle) = let val R = DestructRect r; in addString ("Rect " ^ PolyML.makestring R) end; in PolyML.install_pp printRect end;